From c896cdcedc62a04830d2927bb2d456de33132ebb Mon Sep 17 00:00:00 2001 From: SmallMain Date: Fri, 17 Jun 2022 18:49:50 +0800 Subject: [PATCH] Deploy Demo --- .../assets/common/config.40d4c.json | 204 + .../common/import/0b/0b9ccc5db.16f5e.json | 9740 +++ demo/web-desktop/assets/common/index.40d4c.js | 29 + demo/web-desktop/assets/common/index.js.map | 1 + ...3cc1-a452-4276-848d-2bdf30e6852a.91637.png | Bin 0 -> 43060 bytes ...85b3-4934-44c0-8d8e-3812b99f015e.2eb47.png | Bin 0 -> 285630 bytes ...59f3-5655-4369-9e9f-455c81d2ddd9.ca872.png | Bin 0 -> 68654 bytes ...041a-75a5-4af2-a40d-f27e9498901a.40d17.png | Bin 0 -> 187127 bytes ...f00b-0ef4-4b7c-aac0-42ee42635e55.9a531.png | Bin 0 -> 105052 bytes ...6173-d285-473c-b206-40a7fff5386e.6d3cf.png | Bin 0 -> 418 bytes ...55ac-9b92-4dd7-b143-cb02342dbe48.7b3fa.png | Bin 0 -> 138343 bytes ...fdd2-97c6-409c-9c0f-fdfa681f16a9.d86d7.png | Bin 0 -> 79283 bytes ...24ff-c18a-4940-82f9-4fe3c2ab8e96.9c555.png | Bin 0 -> 81287 bytes ...530a-ef05-45c1-b012-eb4686f4c70f.abf6b.png | Bin 0 -> 57745 bytes .../SFNSMonoItalic.ttf | Bin 0 -> 199276 bytes .../web-desktop/assets/home/config.9b664.json | 30 + demo/web-desktop/assets/home/index.9b664.js | 29 + demo/web-desktop/assets/home/index.js.map | 1 + .../assets/internal/config.8360b.json | 133 + .../internal/import/09/0967b326a.c3301.json | 2032 + .../assets/internal/index.8360b.js | 29 + demo/web-desktop/assets/internal/index.js.map | 1 + ...e94c-56a7-410f-bd1a-fc7483f7d14a.cea68.png | Bin 0 -> 82 bytes .../web-desktop/assets/main/config.fb25a.json | 55 + .../main/import/0d/0d90adf1f.bd1b5.json | 3338 + demo/web-desktop/assets/main/index.fb25a.js | 233 + demo/web-desktop/assets/main/index.js.map | 1 + ...23dd-11f4-4dd3-8eec-0caf6b3b45b9.6d707.png | Bin 0 -> 237 bytes ...ca85-4681-47c1-b5dd-d036a9d39ea2.d55c2.png | Bin 0 -> 163 bytes .../assets/multi-render/config.f7eed.json | 241 + .../import/0e/0e0c9da58.5c474.json | 14514 ++++ .../assets/multi-render/index.f7eed.js | 100 + .../assets/multi-render/index.js.map | 1 + ...ba2c-cfa2-4fb0-a5ac-a95f9b461fc0.eae97.png | Bin 0 -> 6280 bytes ...3cc1-a452-4276-848d-2bdf30e6852a.91637.png | Bin 0 -> 43060 bytes ...7785-ef30-4b66-a9d2-ebcaf6a7f6e8.2ecc6.png | Bin 0 -> 6694 bytes ...0fd3-74ca-4503-b2bc-2088cd6dbf4c.28847.png | Bin 0 -> 6652 bytes ...9d18-51d1-4017-9ea6-98dcad8ecdf5.99af5.png | Bin 0 -> 6904 bytes ...59f3-5655-4369-9e9f-455c81d2ddd9.ca872.png | Bin 0 -> 68654 bytes ...041a-75a5-4af2-a40d-f27e9498901a.40d17.png | Bin 0 -> 187127 bytes ...6173-d285-473c-b206-40a7fff5386e.6d3cf.png | Bin 0 -> 418 bytes ...1142-4c83-4933-afca-cb7a17f67053.c06a9.png | Bin 0 -> 177 bytes ...4f44-c0da-4c94-a97f-fac1ab844551.92cfc.png | Bin 0 -> 6611 bytes ...8430-6621-4bd5-86ce-0957a216dd69.9e7e3.png | Bin 0 -> 7299 bytes ...f3c2-02bb-4874-81f7-f2dea6970f18.83fcc.png | Bin 0 -> 182 bytes ...1231-4d65-475c-a6bb-a8199e851e88.6159f.png | Bin 0 -> 6553 bytes ...fdd2-97c6-409c-9c0f-fdfa681f16a9.d86d7.png | Bin 0 -> 79283 bytes ...530a-ef05-45c1-b012-eb4686f4c70f.abf6b.png | Bin 0 -> 57745 bytes ...e89b-faa2-4484-bea6-5c01dd9f06e2.90cf4.png | Bin 0 -> 185 bytes ...a5a2-8837-4f45-a24a-2486eef5fb78.46cee.png | Bin 0 -> 6959 bytes demo/web-desktop/assets/sp/config.de22b.json | 28 + ...c18-b913-460e-a0d9-5d74f4cda12b.a50cc.json | 321 + demo/web-desktop/assets/sp/index.de22b.js | 29 + demo/web-desktop/assets/sp/index.js.map | 1 + .../assets/spine/config.251d3.json | 141 + .../spine/import/06/063dea748.d4c56.json | 19176 ++++++ demo/web-desktop/assets/spine/index.251d3.js | 117 + demo/web-desktop/assets/spine/index.js.map | 1 + ...85b3-4934-44c0-8d8e-3812b99f015e.2eb47.png | Bin 0 -> 285630 bytes ...041a-75a5-4af2-a40d-f27e9498901a.40d17.png | Bin 0 -> 187127 bytes ...f00b-0ef4-4b7c-aac0-42ee42635e55.9a531.png | Bin 0 -> 105052 bytes ...f4-f84e-4d78-8ea7-946f62007fcd.b8970.atlas | 209 + ...55ac-9b92-4dd7-b143-cb02342dbe48.7b3fa.png | Bin 0 -> 138343 bytes ...1142-4c83-4933-afca-cb7a17f67053.c06a9.png | Bin 0 -> 177 bytes ...11b5-bf4f-4a78-ac4a-8443e7166be1.fd38c.png | Bin 0 -> 32648 bytes ...f3c2-02bb-4874-81f7-f2dea6970f18.83fcc.png | Bin 0 -> 182 bytes ...fdd2-97c6-409c-9c0f-fdfa681f16a9.d86d7.png | Bin 0 -> 79283 bytes ...24ff-c18a-4940-82f9-4fe3c2ab8e96.9c555.png | Bin 0 -> 81287 bytes ...e89b-faa2-4484-bea6-5c01dd9f06e2.90cf4.png | Bin 0 -> 185 bytes .../assets/text-render/config.697bc.json | 54 + .../import/0d/0dccb646b.af549.json | 2059 + .../assets/text-render/index.697bc.js | 122 + .../assets/text-render/index.js.map | 1 + demo/web-desktop/cocos2d-js.931db.js | 55118 ++++++++++++++++ demo/web-desktop/cocos2d-js.js.e63e9.map | 1 + demo/web-desktop/favicon.8de18.ico | Bin 0 -> 1150 bytes demo/web-desktop/index.html | 74 + demo/web-desktop/main.cf932.js | 144 + demo/web-desktop/splash.85cfd.png | Bin 0 -> 5884 bytes demo/web-desktop/src/settings.49c14.js | 29 + demo/web-desktop/style-desktop.81ede.css | 116 + demo/web-desktop/style-mobile.25fc5.css | 124 + .../assets/common/config.40d4c.json | 204 + .../common/import/0b/0b9ccc5db.16f5e.json | 9740 +++ demo/web-mobile/assets/common/index.40d4c.js | 29 + demo/web-mobile/assets/common/index.js.map | 1 + ...3cc1-a452-4276-848d-2bdf30e6852a.91637.png | Bin 0 -> 43060 bytes ...85b3-4934-44c0-8d8e-3812b99f015e.2eb47.png | Bin 0 -> 285630 bytes ...59f3-5655-4369-9e9f-455c81d2ddd9.ca872.png | Bin 0 -> 68654 bytes ...041a-75a5-4af2-a40d-f27e9498901a.40d17.png | Bin 0 -> 187127 bytes ...f00b-0ef4-4b7c-aac0-42ee42635e55.9a531.png | Bin 0 -> 105052 bytes ...6173-d285-473c-b206-40a7fff5386e.6d3cf.png | Bin 0 -> 418 bytes ...55ac-9b92-4dd7-b143-cb02342dbe48.7b3fa.png | Bin 0 -> 138343 bytes ...fdd2-97c6-409c-9c0f-fdfa681f16a9.d86d7.png | Bin 0 -> 79283 bytes ...24ff-c18a-4940-82f9-4fe3c2ab8e96.9c555.png | Bin 0 -> 81287 bytes ...530a-ef05-45c1-b012-eb4686f4c70f.abf6b.png | Bin 0 -> 57745 bytes .../SFNSMonoItalic.ttf | Bin 0 -> 199276 bytes demo/web-mobile/assets/home/config.9b664.json | 30 + demo/web-mobile/assets/home/index.9b664.js | 29 + demo/web-mobile/assets/home/index.js.map | 1 + .../assets/internal/config.8360b.json | 133 + .../internal/import/09/0967b326a.c3301.json | 2032 + .../web-mobile/assets/internal/index.8360b.js | 29 + demo/web-mobile/assets/internal/index.js.map | 1 + ...e94c-56a7-410f-bd1a-fc7483f7d14a.cea68.png | Bin 0 -> 82 bytes demo/web-mobile/assets/main/config.ced16.json | 55 + .../main/import/0d/0d90adf1f.bd1b5.json | 3338 + demo/web-mobile/assets/main/index.ced16.js | 233 + demo/web-mobile/assets/main/index.js.map | 1 + ...23dd-11f4-4dd3-8eec-0caf6b3b45b9.6d707.png | Bin 0 -> 237 bytes ...ca85-4681-47c1-b5dd-d036a9d39ea2.d55c2.png | Bin 0 -> 163 bytes .../assets/multi-render/config.f7eed.json | 241 + .../import/0e/0e0c9da58.5c474.json | 14514 ++++ .../assets/multi-render/index.f7eed.js | 100 + .../assets/multi-render/index.js.map | 1 + ...ba2c-cfa2-4fb0-a5ac-a95f9b461fc0.eae97.png | Bin 0 -> 6280 bytes ...3cc1-a452-4276-848d-2bdf30e6852a.91637.png | Bin 0 -> 43060 bytes ...7785-ef30-4b66-a9d2-ebcaf6a7f6e8.2ecc6.png | Bin 0 -> 6694 bytes ...0fd3-74ca-4503-b2bc-2088cd6dbf4c.28847.png | Bin 0 -> 6652 bytes ...9d18-51d1-4017-9ea6-98dcad8ecdf5.99af5.png | Bin 0 -> 6904 bytes ...59f3-5655-4369-9e9f-455c81d2ddd9.ca872.png | Bin 0 -> 68654 bytes ...041a-75a5-4af2-a40d-f27e9498901a.40d17.png | Bin 0 -> 187127 bytes ...6173-d285-473c-b206-40a7fff5386e.6d3cf.png | Bin 0 -> 418 bytes ...1142-4c83-4933-afca-cb7a17f67053.c06a9.png | Bin 0 -> 177 bytes ...4f44-c0da-4c94-a97f-fac1ab844551.92cfc.png | Bin 0 -> 6611 bytes ...8430-6621-4bd5-86ce-0957a216dd69.9e7e3.png | Bin 0 -> 7299 bytes ...f3c2-02bb-4874-81f7-f2dea6970f18.83fcc.png | Bin 0 -> 182 bytes ...1231-4d65-475c-a6bb-a8199e851e88.6159f.png | Bin 0 -> 6553 bytes ...fdd2-97c6-409c-9c0f-fdfa681f16a9.d86d7.png | Bin 0 -> 79283 bytes ...530a-ef05-45c1-b012-eb4686f4c70f.abf6b.png | Bin 0 -> 57745 bytes ...e89b-faa2-4484-bea6-5c01dd9f06e2.90cf4.png | Bin 0 -> 185 bytes ...a5a2-8837-4f45-a24a-2486eef5fb78.46cee.png | Bin 0 -> 6959 bytes demo/web-mobile/assets/sp/config.de22b.json | 28 + ...c18-b913-460e-a0d9-5d74f4cda12b.a50cc.json | 321 + demo/web-mobile/assets/sp/index.de22b.js | 29 + demo/web-mobile/assets/sp/index.js.map | 1 + .../web-mobile/assets/spine/config.68273.json | 141 + .../spine/import/06/063dea748.d4c56.json | 19176 ++++++ demo/web-mobile/assets/spine/index.68273.js | 117 + demo/web-mobile/assets/spine/index.js.map | 1 + ...85b3-4934-44c0-8d8e-3812b99f015e.2eb47.png | Bin 0 -> 285630 bytes ...041a-75a5-4af2-a40d-f27e9498901a.40d17.png | Bin 0 -> 187127 bytes ...f00b-0ef4-4b7c-aac0-42ee42635e55.9a531.png | Bin 0 -> 105052 bytes ...f4-f84e-4d78-8ea7-946f62007fcd.b8970.atlas | 209 + ...55ac-9b92-4dd7-b143-cb02342dbe48.7b3fa.png | Bin 0 -> 138343 bytes ...1142-4c83-4933-afca-cb7a17f67053.c06a9.png | Bin 0 -> 177 bytes ...11b5-bf4f-4a78-ac4a-8443e7166be1.fd38c.png | Bin 0 -> 32648 bytes ...f3c2-02bb-4874-81f7-f2dea6970f18.83fcc.png | Bin 0 -> 182 bytes ...fdd2-97c6-409c-9c0f-fdfa681f16a9.d86d7.png | Bin 0 -> 79283 bytes ...24ff-c18a-4940-82f9-4fe3c2ab8e96.9c555.png | Bin 0 -> 81287 bytes ...e89b-faa2-4484-bea6-5c01dd9f06e2.90cf4.png | Bin 0 -> 185 bytes .../assets/text-render/config.697bc.json | 54 + .../import/0d/0dccb646b.af549.json | 2059 + .../assets/text-render/index.697bc.js | 122 + .../assets/text-render/index.js.map | 1 + demo/web-mobile/cocos2d-js.c901d.js | 55118 ++++++++++++++++ demo/web-mobile/cocos2d-js.js.e3018.map | 1 + demo/web-mobile/favicon.8de18.ico | Bin 0 -> 1150 bytes demo/web-mobile/index.html | 90 + demo/web-mobile/main.c5ece.js | 144 + demo/web-mobile/splash.85cfd.png | Bin 0 -> 5884 bytes demo/web-mobile/src/settings.4ff07.js | 29 + demo/web-mobile/style-desktop.81ede.css | 116 + demo/web-mobile/style-mobile.25fc5.css | 124 + demo/web-mobile/vconsole.min.bac6b.js | 12 + 165 files changed, 217182 insertions(+) create mode 100644 demo/web-desktop/assets/common/config.40d4c.json create mode 100644 demo/web-desktop/assets/common/import/0b/0b9ccc5db.16f5e.json create mode 100644 demo/web-desktop/assets/common/index.40d4c.js create mode 100644 demo/web-desktop/assets/common/index.js.map create mode 100644 demo/web-desktop/assets/common/native/1c/1c8a3cc1-a452-4276-848d-2bdf30e6852a.91637.png create mode 100644 demo/web-desktop/assets/common/native/39/398d85b3-4934-44c0-8d8e-3812b99f015e.2eb47.png create mode 100644 demo/web-desktop/assets/common/native/45/45be59f3-5655-4369-9e9f-455c81d2ddd9.ca872.png create mode 100644 demo/web-desktop/assets/common/native/62/6231041a-75a5-4af2-a40d-f27e9498901a.40d17.png create mode 100644 demo/web-desktop/assets/common/native/68/6843f00b-0ef4-4b7c-aac0-42ee42635e55.9a531.png create mode 100644 demo/web-desktop/assets/common/native/6e/6e056173-d285-473c-b206-40a7fff5386e.6d3cf.png create mode 100644 demo/web-desktop/assets/common/native/70/702455ac-9b92-4dd7-b143-cb02342dbe48.7b3fa.png create mode 100644 demo/web-desktop/assets/common/native/c1/c11dfdd2-97c6-409c-9c0f-fdfa681f16a9.d86d7.png create mode 100644 demo/web-desktop/assets/common/native/d0/d06d24ff-c18a-4940-82f9-4fe3c2ab8e96.9c555.png create mode 100644 demo/web-desktop/assets/common/native/d9/d9c4530a-ef05-45c1-b012-eb4686f4c70f.abf6b.png create mode 100644 demo/web-desktop/assets/common/native/e8/e8aa5e1c-0730-4ebe-81a1-e7fa0db9be7d.a6625/SFNSMonoItalic.ttf create mode 100644 demo/web-desktop/assets/home/config.9b664.json create mode 100644 demo/web-desktop/assets/home/index.9b664.js create mode 100644 demo/web-desktop/assets/home/index.js.map create mode 100644 demo/web-desktop/assets/internal/config.8360b.json create mode 100644 demo/web-desktop/assets/internal/import/09/0967b326a.c3301.json create mode 100644 demo/web-desktop/assets/internal/index.8360b.js create mode 100644 demo/web-desktop/assets/internal/index.js.map create mode 100644 demo/web-desktop/assets/internal/native/02/0275e94c-56a7-410f-bd1a-fc7483f7d14a.cea68.png create mode 100644 demo/web-desktop/assets/main/config.fb25a.json create mode 100644 demo/web-desktop/assets/main/import/0d/0d90adf1f.bd1b5.json create mode 100644 demo/web-desktop/assets/main/index.fb25a.js create mode 100644 demo/web-desktop/assets/main/index.js.map create mode 100644 demo/web-desktop/assets/main/native/61/617323dd-11f4-4dd3-8eec-0caf6b3b45b9.6d707.png create mode 100644 demo/web-desktop/assets/main/native/d6/d6d3ca85-4681-47c1-b5dd-d036a9d39ea2.d55c2.png create mode 100644 demo/web-desktop/assets/multi-render/config.f7eed.json create mode 100644 demo/web-desktop/assets/multi-render/import/0e/0e0c9da58.5c474.json create mode 100644 demo/web-desktop/assets/multi-render/index.f7eed.js create mode 100644 demo/web-desktop/assets/multi-render/index.js.map create mode 100644 demo/web-desktop/assets/multi-render/native/10/100eba2c-cfa2-4fb0-a5ac-a95f9b461fc0.eae97.png create mode 100644 demo/web-desktop/assets/multi-render/native/1c/1c8a3cc1-a452-4276-848d-2bdf30e6852a.91637.png create mode 100644 demo/web-desktop/assets/multi-render/native/22/22247785-ef30-4b66-a9d2-ebcaf6a7f6e8.2ecc6.png create mode 100644 demo/web-desktop/assets/multi-render/native/43/438c0fd3-74ca-4503-b2bc-2088cd6dbf4c.28847.png create mode 100644 demo/web-desktop/assets/multi-render/native/44/44999d18-51d1-4017-9ea6-98dcad8ecdf5.99af5.png create mode 100644 demo/web-desktop/assets/multi-render/native/45/45be59f3-5655-4369-9e9f-455c81d2ddd9.ca872.png create mode 100644 demo/web-desktop/assets/multi-render/native/62/6231041a-75a5-4af2-a40d-f27e9498901a.40d17.png create mode 100644 demo/web-desktop/assets/multi-render/native/6e/6e056173-d285-473c-b206-40a7fff5386e.6d3cf.png create mode 100644 demo/web-desktop/assets/multi-render/native/71/71561142-4c83-4933-afca-cb7a17f67053.c06a9.png create mode 100644 demo/web-desktop/assets/multi-render/native/77/77844f44-c0da-4c94-a97f-fac1ab844551.92cfc.png create mode 100644 demo/web-desktop/assets/multi-render/native/7a/7a788430-6621-4bd5-86ce-0957a216dd69.9e7e3.png create mode 100644 demo/web-desktop/assets/multi-render/native/b4/b43ff3c2-02bb-4874-81f7-f2dea6970f18.83fcc.png create mode 100644 demo/web-desktop/assets/multi-render/native/b6/b6161231-4d65-475c-a6bb-a8199e851e88.6159f.png create mode 100644 demo/web-desktop/assets/multi-render/native/c1/c11dfdd2-97c6-409c-9c0f-fdfa681f16a9.d86d7.png create mode 100644 demo/web-desktop/assets/multi-render/native/d9/d9c4530a-ef05-45c1-b012-eb4686f4c70f.abf6b.png create mode 100644 demo/web-desktop/assets/multi-render/native/e8/e851e89b-faa2-4484-bea6-5c01dd9f06e2.90cf4.png create mode 100644 demo/web-desktop/assets/multi-render/native/eb/eb72a5a2-8837-4f45-a24a-2486eef5fb78.46cee.png create mode 100644 demo/web-desktop/assets/sp/config.de22b.json create mode 100644 demo/web-desktop/assets/sp/import/5d/5dcffc18-b913-460e-a0d9-5d74f4cda12b.a50cc.json create mode 100644 demo/web-desktop/assets/sp/index.de22b.js create mode 100644 demo/web-desktop/assets/sp/index.js.map create mode 100644 demo/web-desktop/assets/spine/config.251d3.json create mode 100644 demo/web-desktop/assets/spine/import/06/063dea748.d4c56.json create mode 100644 demo/web-desktop/assets/spine/index.251d3.js create mode 100644 demo/web-desktop/assets/spine/index.js.map create mode 100644 demo/web-desktop/assets/spine/native/39/398d85b3-4934-44c0-8d8e-3812b99f015e.2eb47.png create mode 100644 demo/web-desktop/assets/spine/native/62/6231041a-75a5-4af2-a40d-f27e9498901a.40d17.png create mode 100644 demo/web-desktop/assets/spine/native/68/6843f00b-0ef4-4b7c-aac0-42ee42635e55.9a531.png create mode 100644 demo/web-desktop/assets/spine/native/69/69163ff4-f84e-4d78-8ea7-946f62007fcd.b8970.atlas create mode 100644 demo/web-desktop/assets/spine/native/70/702455ac-9b92-4dd7-b143-cb02342dbe48.7b3fa.png create mode 100644 demo/web-desktop/assets/spine/native/71/71561142-4c83-4933-afca-cb7a17f67053.c06a9.png create mode 100644 demo/web-desktop/assets/spine/native/80/804e11b5-bf4f-4a78-ac4a-8443e7166be1.fd38c.png create mode 100644 demo/web-desktop/assets/spine/native/b4/b43ff3c2-02bb-4874-81f7-f2dea6970f18.83fcc.png create mode 100644 demo/web-desktop/assets/spine/native/c1/c11dfdd2-97c6-409c-9c0f-fdfa681f16a9.d86d7.png create mode 100644 demo/web-desktop/assets/spine/native/d0/d06d24ff-c18a-4940-82f9-4fe3c2ab8e96.9c555.png create mode 100644 demo/web-desktop/assets/spine/native/e8/e851e89b-faa2-4484-bea6-5c01dd9f06e2.90cf4.png create mode 100644 demo/web-desktop/assets/text-render/config.697bc.json create mode 100644 demo/web-desktop/assets/text-render/import/0d/0dccb646b.af549.json create mode 100644 demo/web-desktop/assets/text-render/index.697bc.js create mode 100644 demo/web-desktop/assets/text-render/index.js.map create mode 100644 demo/web-desktop/cocos2d-js.931db.js create mode 100644 demo/web-desktop/cocos2d-js.js.e63e9.map create mode 100644 demo/web-desktop/favicon.8de18.ico create mode 100644 demo/web-desktop/index.html create mode 100644 demo/web-desktop/main.cf932.js create mode 100644 demo/web-desktop/splash.85cfd.png create mode 100644 demo/web-desktop/src/settings.49c14.js create mode 100644 demo/web-desktop/style-desktop.81ede.css create mode 100644 demo/web-desktop/style-mobile.25fc5.css create mode 100644 demo/web-mobile/assets/common/config.40d4c.json create mode 100644 demo/web-mobile/assets/common/import/0b/0b9ccc5db.16f5e.json create mode 100644 demo/web-mobile/assets/common/index.40d4c.js create mode 100644 demo/web-mobile/assets/common/index.js.map create mode 100644 demo/web-mobile/assets/common/native/1c/1c8a3cc1-a452-4276-848d-2bdf30e6852a.91637.png create mode 100644 demo/web-mobile/assets/common/native/39/398d85b3-4934-44c0-8d8e-3812b99f015e.2eb47.png create mode 100644 demo/web-mobile/assets/common/native/45/45be59f3-5655-4369-9e9f-455c81d2ddd9.ca872.png create mode 100644 demo/web-mobile/assets/common/native/62/6231041a-75a5-4af2-a40d-f27e9498901a.40d17.png create mode 100644 demo/web-mobile/assets/common/native/68/6843f00b-0ef4-4b7c-aac0-42ee42635e55.9a531.png create mode 100644 demo/web-mobile/assets/common/native/6e/6e056173-d285-473c-b206-40a7fff5386e.6d3cf.png create mode 100644 demo/web-mobile/assets/common/native/70/702455ac-9b92-4dd7-b143-cb02342dbe48.7b3fa.png create mode 100644 demo/web-mobile/assets/common/native/c1/c11dfdd2-97c6-409c-9c0f-fdfa681f16a9.d86d7.png create mode 100644 demo/web-mobile/assets/common/native/d0/d06d24ff-c18a-4940-82f9-4fe3c2ab8e96.9c555.png create mode 100644 demo/web-mobile/assets/common/native/d9/d9c4530a-ef05-45c1-b012-eb4686f4c70f.abf6b.png create mode 100644 demo/web-mobile/assets/common/native/e8/e8aa5e1c-0730-4ebe-81a1-e7fa0db9be7d.a6625/SFNSMonoItalic.ttf create mode 100644 demo/web-mobile/assets/home/config.9b664.json create mode 100644 demo/web-mobile/assets/home/index.9b664.js create mode 100644 demo/web-mobile/assets/home/index.js.map create mode 100644 demo/web-mobile/assets/internal/config.8360b.json create mode 100644 demo/web-mobile/assets/internal/import/09/0967b326a.c3301.json create mode 100644 demo/web-mobile/assets/internal/index.8360b.js create mode 100644 demo/web-mobile/assets/internal/index.js.map create mode 100644 demo/web-mobile/assets/internal/native/02/0275e94c-56a7-410f-bd1a-fc7483f7d14a.cea68.png create mode 100644 demo/web-mobile/assets/main/config.ced16.json create mode 100644 demo/web-mobile/assets/main/import/0d/0d90adf1f.bd1b5.json create mode 100644 demo/web-mobile/assets/main/index.ced16.js create mode 100644 demo/web-mobile/assets/main/index.js.map create mode 100644 demo/web-mobile/assets/main/native/61/617323dd-11f4-4dd3-8eec-0caf6b3b45b9.6d707.png create mode 100644 demo/web-mobile/assets/main/native/d6/d6d3ca85-4681-47c1-b5dd-d036a9d39ea2.d55c2.png create mode 100644 demo/web-mobile/assets/multi-render/config.f7eed.json create mode 100644 demo/web-mobile/assets/multi-render/import/0e/0e0c9da58.5c474.json create mode 100644 demo/web-mobile/assets/multi-render/index.f7eed.js create mode 100644 demo/web-mobile/assets/multi-render/index.js.map create mode 100644 demo/web-mobile/assets/multi-render/native/10/100eba2c-cfa2-4fb0-a5ac-a95f9b461fc0.eae97.png create mode 100644 demo/web-mobile/assets/multi-render/native/1c/1c8a3cc1-a452-4276-848d-2bdf30e6852a.91637.png create mode 100644 demo/web-mobile/assets/multi-render/native/22/22247785-ef30-4b66-a9d2-ebcaf6a7f6e8.2ecc6.png create mode 100644 demo/web-mobile/assets/multi-render/native/43/438c0fd3-74ca-4503-b2bc-2088cd6dbf4c.28847.png create mode 100644 demo/web-mobile/assets/multi-render/native/44/44999d18-51d1-4017-9ea6-98dcad8ecdf5.99af5.png create mode 100644 demo/web-mobile/assets/multi-render/native/45/45be59f3-5655-4369-9e9f-455c81d2ddd9.ca872.png create mode 100644 demo/web-mobile/assets/multi-render/native/62/6231041a-75a5-4af2-a40d-f27e9498901a.40d17.png create mode 100644 demo/web-mobile/assets/multi-render/native/6e/6e056173-d285-473c-b206-40a7fff5386e.6d3cf.png create mode 100644 demo/web-mobile/assets/multi-render/native/71/71561142-4c83-4933-afca-cb7a17f67053.c06a9.png create mode 100644 demo/web-mobile/assets/multi-render/native/77/77844f44-c0da-4c94-a97f-fac1ab844551.92cfc.png create mode 100644 demo/web-mobile/assets/multi-render/native/7a/7a788430-6621-4bd5-86ce-0957a216dd69.9e7e3.png create mode 100644 demo/web-mobile/assets/multi-render/native/b4/b43ff3c2-02bb-4874-81f7-f2dea6970f18.83fcc.png create mode 100644 demo/web-mobile/assets/multi-render/native/b6/b6161231-4d65-475c-a6bb-a8199e851e88.6159f.png create mode 100644 demo/web-mobile/assets/multi-render/native/c1/c11dfdd2-97c6-409c-9c0f-fdfa681f16a9.d86d7.png create mode 100644 demo/web-mobile/assets/multi-render/native/d9/d9c4530a-ef05-45c1-b012-eb4686f4c70f.abf6b.png create mode 100644 demo/web-mobile/assets/multi-render/native/e8/e851e89b-faa2-4484-bea6-5c01dd9f06e2.90cf4.png create mode 100644 demo/web-mobile/assets/multi-render/native/eb/eb72a5a2-8837-4f45-a24a-2486eef5fb78.46cee.png create mode 100644 demo/web-mobile/assets/sp/config.de22b.json create mode 100644 demo/web-mobile/assets/sp/import/5d/5dcffc18-b913-460e-a0d9-5d74f4cda12b.a50cc.json create mode 100644 demo/web-mobile/assets/sp/index.de22b.js create mode 100644 demo/web-mobile/assets/sp/index.js.map create mode 100644 demo/web-mobile/assets/spine/config.68273.json create mode 100644 demo/web-mobile/assets/spine/import/06/063dea748.d4c56.json create mode 100644 demo/web-mobile/assets/spine/index.68273.js create mode 100644 demo/web-mobile/assets/spine/index.js.map create mode 100644 demo/web-mobile/assets/spine/native/39/398d85b3-4934-44c0-8d8e-3812b99f015e.2eb47.png create mode 100644 demo/web-mobile/assets/spine/native/62/6231041a-75a5-4af2-a40d-f27e9498901a.40d17.png create mode 100644 demo/web-mobile/assets/spine/native/68/6843f00b-0ef4-4b7c-aac0-42ee42635e55.9a531.png create mode 100644 demo/web-mobile/assets/spine/native/69/69163ff4-f84e-4d78-8ea7-946f62007fcd.b8970.atlas create mode 100644 demo/web-mobile/assets/spine/native/70/702455ac-9b92-4dd7-b143-cb02342dbe48.7b3fa.png create mode 100644 demo/web-mobile/assets/spine/native/71/71561142-4c83-4933-afca-cb7a17f67053.c06a9.png create mode 100644 demo/web-mobile/assets/spine/native/80/804e11b5-bf4f-4a78-ac4a-8443e7166be1.fd38c.png create mode 100644 demo/web-mobile/assets/spine/native/b4/b43ff3c2-02bb-4874-81f7-f2dea6970f18.83fcc.png create mode 100644 demo/web-mobile/assets/spine/native/c1/c11dfdd2-97c6-409c-9c0f-fdfa681f16a9.d86d7.png create mode 100644 demo/web-mobile/assets/spine/native/d0/d06d24ff-c18a-4940-82f9-4fe3c2ab8e96.9c555.png create mode 100644 demo/web-mobile/assets/spine/native/e8/e851e89b-faa2-4484-bea6-5c01dd9f06e2.90cf4.png create mode 100644 demo/web-mobile/assets/text-render/config.697bc.json create mode 100644 demo/web-mobile/assets/text-render/import/0d/0dccb646b.af549.json create mode 100644 demo/web-mobile/assets/text-render/index.697bc.js create mode 100644 demo/web-mobile/assets/text-render/index.js.map create mode 100644 demo/web-mobile/cocos2d-js.c901d.js create mode 100644 demo/web-mobile/cocos2d-js.js.e3018.map create mode 100644 demo/web-mobile/favicon.8de18.ico create mode 100644 demo/web-mobile/index.html create mode 100644 demo/web-mobile/main.c5ece.js create mode 100644 demo/web-mobile/splash.85cfd.png create mode 100644 demo/web-mobile/src/settings.4ff07.js create mode 100644 demo/web-mobile/style-desktop.81ede.css create mode 100644 demo/web-mobile/style-mobile.25fc5.css create mode 100644 demo/web-mobile/vconsole.min.bac6b.js diff --git a/demo/web-desktop/assets/common/config.40d4c.json b/demo/web-desktop/assets/common/config.40d4c.json new file mode 100644 index 00000000..5f0e3a33 --- /dev/null +++ b/demo/web-desktop/assets/common/config.40d4c.json @@ -0,0 +1,204 @@ +{ + "paths": { + "3e30KyALhNkZttyuW0A6EU": [ + "effects/custom-2d-sprite", + "cc.EffectAsset" + ], + "e8ql4cBzBOvoGh5/oNub59": [ + "fonts/SFNSMonoItalic", + "cc.TTFFont" + ], + "80AR/OlBFOoajT99htLYeJ": [ + "fonts/normalFont", + "cc.BitmapFont" + ], + "45vlnzVlVDaZ6fRVyB0t3Z": [ + "fonts/normalFont", + "cc.Texture2D" + ], + "92aqwImq1Ik7GrBSFnKTF2": [ + "fonts/normalFont", + "cc.SpriteFrame", + 1 + ], + "c1Hf3Sl8ZAnJwP/fpoHxap": [ + "images/1655112479313", + "cc.Texture2D" + ], + "a7ZscqX+JCIZRS157bMyhq": [ + "images/1655112479313", + "cc.SpriteFrame", + 1 + ], + "62MQQadaVK8qQN8n6UmJAa": [ + "images/1655112514006", + "cc.Texture2D" + ], + "85yTK+9shIo7RQfQ1TDEUi": [ + "images/1655112514006", + "cc.SpriteFrame", + 1 + ], + "39jYWzSTREwI2OOBK5nwFe": [ + "images/1655112526123", + "cc.Texture2D" + ], + "09o3P/9gBP/Yc7AnxUBZ+Q": [ + "images/1655112526123", + "cc.SpriteFrame", + 1 + ], + "d0bST/wYpJQIL5T+PCq46W": [ + "images/1655112538161", + "cc.Texture2D" + ], + "70VXjGE0JMUqGli0jmCmTF": [ + "images/1655112538161", + "cc.SpriteFrame", + 1 + ], + "68Q/ALDvRLfKrAQu5CY15V": [ + "images/1655112548981", + "cc.Texture2D" + ], + "87/8ZHBEVIkKeNxmalrn9r": [ + "images/1655112548981", + "cc.SpriteFrame", + 1 + ], + "70JFWsm5JN17FDywI0Lb5I": [ + "images/1655112563832", + "cc.Texture2D" + ], + "d0Bu8c2MBCKJc+mKBWzjsJ": [ + "images/1655112563832", + "cc.SpriteFrame", + 1 + ], + "1cijzBpFJCdoSNK98w5oUq": [ + "images/1655112624336", + "cc.Texture2D" + ], + "8029xEf4FHy49dWo6NK8c7": [ + "images/1655112624336", + "cc.SpriteFrame", + 1 + ], + "2cDGL4OAVN0ZbEl3w2urT8": [ + "materials/custom-2d-sprite", + "cc.Material" + ], + "bc2ZOJo5NCbrI0FXxitEvE": [ + "spines/spineboy", + "sp.SkeletonData" + ], + "d9xFMK7wVFwbAS60aG9McP": [ + "spines/spineboy", + "cc.Texture2D" + ], + "f2P0YcCjtHDqebnuMp4CMZ": [ + "spines/spineboy", + "cc.SpriteFrame", + 1 + ], + "b6OkwTsm1LK5cvRTwFehiy": [ + "spines/spineboy", + "cc.TextAsset" + ] + }, + "uuids": [ + "3e30KyALhNkZttyuW0A6EU", + "80AR/OlBFOoajT99htLYeJ", + "45vlnzVlVDaZ6fRVyB0t3Z", + "92aqwImq1Ik7GrBSFnKTF2", + "e8ql4cBzBOvoGh5/oNub59", + "c1Hf3Sl8ZAnJwP/fpoHxap", + "a7ZscqX+JCIZRS157bMyhq", + "62MQQadaVK8qQN8n6UmJAa", + "85yTK+9shIo7RQfQ1TDEUi", + "39jYWzSTREwI2OOBK5nwFe", + "09o3P/9gBP/Yc7AnxUBZ+Q", + "d0bST/wYpJQIL5T+PCq46W", + "70VXjGE0JMUqGli0jmCmTF", + "68Q/ALDvRLfKrAQu5CY15V", + "87/8ZHBEVIkKeNxmalrn9r", + "70JFWsm5JN17FDywI0Lb5I", + "d0Bu8c2MBCKJc+mKBWzjsJ", + "1cijzBpFJCdoSNK98w5oUq", + "8029xEf4FHy49dWo6NK8c7", + "2cDGL4OAVN0ZbEl3w2urT8", + "bc2ZOJo5NCbrI0FXxitEvE", + "d9xFMK7wVFwbAS60aG9McP", + "f2P0YcCjtHDqebnuMp4CMZ", + "b6OkwTsm1LK5cvRTwFehiy", + "6eBWFz0oVHPLIGQKf/9Thu" + ], + "scenes": {}, + "redirect": [], + "deps": [], + "packs": { + "0b9ccc5db": [ + "09o3P/9gBP/Yc7AnxUBZ+Q", + "1cijzBpFJCdoSNK98w5oUq", + "2cDGL4OAVN0ZbEl3w2urT8", + "39jYWzSTREwI2OOBK5nwFe", + "3e30KyALhNkZttyuW0A6EU", + "45vlnzVlVDaZ6fRVyB0t3Z", + "62MQQadaVK8qQN8n6UmJAa", + "68Q/ALDvRLfKrAQu5CY15V", + "6eBWFz0oVHPLIGQKf/9Thu", + "70JFWsm5JN17FDywI0Lb5I", + "70VXjGE0JMUqGli0jmCmTF", + "80AR/OlBFOoajT99htLYeJ", + "8029xEf4FHy49dWo6NK8c7", + "85yTK+9shIo7RQfQ1TDEUi", + "87/8ZHBEVIkKeNxmalrn9r", + "92aqwImq1Ik7GrBSFnKTF2", + "a7ZscqX+JCIZRS157bMyhq", + "b6OkwTsm1LK5cvRTwFehiy", + "bc2ZOJo5NCbrI0FXxitEvE", + "c1Hf3Sl8ZAnJwP/fpoHxap", + "d0Bu8c2MBCKJc+mKBWzjsJ", + "d0bST/wYpJQIL5T+PCq46W", + "d9xFMK7wVFwbAS60aG9McP", + "e8ql4cBzBOvoGh5/oNub59", + "f2P0YcCjtHDqebnuMp4CMZ" + ] + }, + "name": "common", + "importBase": "import", + "nativeBase": "native", + "debug": true, + "isZip": false, + "encrypted": false, + "versions": { + "import": [ + "0b9ccc5db", + "16f5e" + ], + "native": [ + "1cijzBpFJCdoSNK98w5oUq", + "91637", + "39jYWzSTREwI2OOBK5nwFe", + "2eb47", + "45vlnzVlVDaZ6fRVyB0t3Z", + "ca872", + "62MQQadaVK8qQN8n6UmJAa", + "40d17", + "68Q/ALDvRLfKrAQu5CY15V", + "9a531", + "6eBWFz0oVHPLIGQKf/9Thu", + "6d3cf", + "70JFWsm5JN17FDywI0Lb5I", + "7b3fa", + "c1Hf3Sl8ZAnJwP/fpoHxap", + "d86d7", + "d0bST/wYpJQIL5T+PCq46W", + "9c555", + "d9xFMK7wVFwbAS60aG9McP", + "abf6b", + "e8ql4cBzBOvoGh5/oNub59", + "a6625" + ] + } +} \ No newline at end of file diff --git a/demo/web-desktop/assets/common/import/0b/0b9ccc5db.16f5e.json b/demo/web-desktop/assets/common/import/0b/0b9ccc5db.16f5e.json new file mode 100644 index 00000000..424057b6 --- /dev/null +++ b/demo/web-desktop/assets/common/import/0b/0b9ccc5db.16f5e.json @@ -0,0 +1,9740 @@ +[ + 1, + [ + "62MQQadaVK8qQN8n6UmJAa", + "d9xFMK7wVFwbAS60aG9McP", + "39jYWzSTREwI2OOBK5nwFe", + "6eBWFz0oVHPLIGQKf/9Thu", + "3e30KyALhNkZttyuW0A6EU", + "d0bST/wYpJQIL5T+PCq46W", + "92aqwImq1Ik7GrBSFnKTF2", + "1cijzBpFJCdoSNK98w5oUq", + "68Q/ALDvRLfKrAQu5CY15V", + "45vlnzVlVDaZ6fRVyB0t3Z", + "c1Hf3Sl8ZAnJwP/fpoHxap", + "70JFWsm5JN17FDywI0Lb5I" + ], + [ + "_textureSetter", + "texture", + "texture2", + "_effectAsset", + "spriteFrame" + ], + [ + "cc.Texture2D", + "cc.SpriteFrame", + [ + "cc.Material", + [ + "_name", + "_techniqueData" + ], + 2, + 11 + ], + [ + "cc.EffectAsset", + [ + "_name", + "shaders", + "techniques" + ], + 0 + ], + [ + "cc.BitmapFont", + [ + "_name", + "fontSize", + "_fntConfig" + ], + 0 + ], + [ + "cc.TextAsset", + [ + "_name", + "text" + ], + 1 + ], + [ + "sp.SkeletonData", + [ + "_name", + "_atlasText", + "textureNames", + "_skeletonJson", + "textures" + ], + -1, + 3 + ], + [ + "cc.TTFFont", + [ + "_name", + "_native" + ], + 1 + ] + ], + [ + [ + 2, + 0, + 1, + 2 + ], + [ + 3, + 0, + 1, + 2, + 4 + ], + [ + 4, + 0, + 1, + 2, + 4 + ], + [ + 5, + 0, + 1, + 3 + ], + [ + 6, + 0, + 1, + 2, + 3, + 4, + 5 + ], + [ + 7, + 0, + 1, + 3 + ] + ], + [ + [ + [ + { + "name": "1655112526123", + "rect": [ + 0, + 0, + 656, + 992 + ], + "offset": [ + 0, + 0 + ], + "originalSize": [ + 656, + 992 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 0 + ], + [ + 2 + ] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + [ + 0, + "custom-2d-sprite", + [ + {}, + "0", + 11, + [ + { + "defines": { + "USE_TEXTURE": true, + "USE_MULTI_TEXTURE": true + } + }, + "props", + 11, + [ + { + "blur": 0.01, + "wh_ratio": 1, + "radius": 0.45 + }, + "texture", + 6, + 0, + "texture2", + 6, + 1 + ] + ] + ] + ] + ], + 0, + 0, + [ + 0, + 0, + 0 + ], + [ + 1, + 2, + 3 + ], + [ + 0, + 3, + 4 + ] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + [ + 1, + "custom-2d-sprite", + [ + { + "hash": 2734998855, + "record": null, + "name": "custom-2d-sprite|vs|fs", + "glsl3": { + "vert": "\nprecision highp float;\nuniform CCGlobal {\n mat4 cc_matView;\n mat4 cc_matViewInv;\n mat4 cc_matProj;\n mat4 cc_matProjInv;\n mat4 cc_matViewProj;\n mat4 cc_matViewProjInv;\n vec4 cc_cameraPos;\n vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nin vec3 a_position;\nin vec4 a_color;\nout vec4 v_color;\n#if USE_TEXTURE\nin vec2 a_uv0;\nout vec2 v_uv0;\n#if USE_MULTI_TEXTURE\nin float a_texId;\nout float v_texId;\n#endif\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #if USE_MULTI_TEXTURE\n v_texId = a_texId;\n #endif\n #endif\n v_color = a_color;\n gl_Position = pos;\n}", + "frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform ALPHA_TEST {\n float alphaThreshold;\n };\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nin vec4 v_color;\n#if USE_TEXTURE\nin vec2 v_uv0;\nuniform sampler2D texture;\n#if USE_MULTI_TEXTURE\nin float v_texId;\nuniform sampler2D texture2;\nuniform sampler2D texture3;\nuniform sampler2D texture4;\nuniform sampler2D texture5;\nuniform sampler2D texture6;\nuniform sampler2D texture7;\nuniform sampler2D texture8;\n#endif\n#endif\nuniform ARGS{\n float radius;\n float blur;\n vec2 center;\n float wh_ratio;\n};\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n #if USE_MULTI_TEXTURE\n if(v_texId < 1.0){\n vec4 texture_tmp = texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture\n texture_tmp.a *= texture(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture_tmp.rgb * texture_tmp.rgb);\n o.a *= texture_tmp.a;\n #else\n o *= texture_tmp;\n #endif\n } else if(v_texId < 2.0){\n vec4 texture2_tmp = texture(texture2, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture2\n texture2_tmp.a *= texture(texture2, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture2_tmp.rgb * texture2_tmp.rgb);\n o.a *= texture2_tmp.a;\n #else\n o *= texture2_tmp;\n #endif\n } else if(v_texId < 3.0){\n vec4 texture3_tmp = texture(texture3, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture3\n texture3_tmp.a *= texture(texture3, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture3_tmp.rgb * texture3_tmp.rgb);\n o.a *= texture3_tmp.a;\n #else\n o *= texture3_tmp;\n #endif\n } else if(v_texId < 4.0){\n vec4 texture4_tmp = texture(texture4, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture4\n texture4_tmp.a *= texture(texture4, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture4_tmp.rgb * texture4_tmp.rgb);\n o.a *= texture4_tmp.a;\n #else\n o *= texture4_tmp;\n #endif\n } else if(v_texId < 5.0){\n vec4 texture5_tmp = texture(texture5, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture5\n texture5_tmp.a *= texture(texture5, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture5_tmp.rgb * texture5_tmp.rgb);\n o.a *= texture5_tmp.a;\n #else\n o *= texture5_tmp;\n #endif\n } else if(v_texId < 6.0){\n vec4 texture6_tmp = texture(texture6, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture6\n texture6_tmp.a *= texture(texture6, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture6_tmp.rgb * texture6_tmp.rgb);\n o.a *= texture6_tmp.a;\n #else\n o *= texture6_tmp;\n #endif\n } else if(v_texId < 7.0){\n vec4 texture7_tmp = texture(texture7, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture7\n texture7_tmp.a *= texture(texture7, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture7_tmp.rgb * texture7_tmp.rgb);\n o.a *= texture7_tmp.a;\n #else\n o *= texture7_tmp;\n #endif\n } else {\n vec4 texture8_tmp = texture(texture8, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture8\n texture8_tmp.a *= texture(texture8, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture8_tmp.rgb * texture8_tmp.rgb);\n o.a *= texture8_tmp.a;\n #else\n o *= texture8_tmp;\n #endif\n }\n #else\n vec4 texture_tmp = texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture\n texture_tmp.a *= texture(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture_tmp.rgb * texture_tmp.rgb);\n o.a *= texture_tmp.a;\n #else\n o *= texture_tmp;\n #endif\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n float circle = radius * radius;\n float rx = center.x * wh_ratio;\n float ry = center.y;\n float dis = (v_uv0.x * wh_ratio - rx) * (v_uv0.x * wh_ratio - rx) + (v_uv0.y - ry) * (v_uv0.y - ry);\n o.a = smoothstep(circle, circle - blur, dis);\n gl_FragColor = o;\n}" + }, + "glsl1": { + "vert": "\nprecision highp float;\nuniform mat4 cc_matViewProj;\nuniform mat4 cc_matWorld;\nattribute vec3 a_position;\nattribute vec4 a_color;\nvarying vec4 v_color;\n#if USE_TEXTURE\nattribute vec2 a_uv0;\nvarying vec2 v_uv0;\n#if USE_MULTI_TEXTURE\nattribute float a_texId;\nvarying float v_texId;\n#endif\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #if USE_MULTI_TEXTURE\n v_texId = a_texId;\n #endif\n #endif\n v_color = a_color;\n gl_Position = pos;\n}", + "frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform float alphaThreshold;\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvarying vec4 v_color;\n#if USE_TEXTURE\nvarying vec2 v_uv0;\nuniform sampler2D texture;\n#if USE_MULTI_TEXTURE\nvarying float v_texId;\nuniform sampler2D texture2;\nuniform sampler2D texture3;\nuniform sampler2D texture4;\nuniform sampler2D texture5;\nuniform sampler2D texture6;\nuniform sampler2D texture7;\nuniform sampler2D texture8;\n#endif\n#endif\nuniform float radius;\nuniform float blur;\nuniform vec2 center;\nuniform float wh_ratio;\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n #if USE_MULTI_TEXTURE\n if(v_texId < 1.0){\n vec4 texture_tmp = texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture\n texture_tmp.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture_tmp.rgb * texture_tmp.rgb);\n o.a *= texture_tmp.a;\n #else\n o *= texture_tmp;\n #endif\n } else if(v_texId < 2.0){\n vec4 texture2_tmp = texture2D(texture2, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture2\n texture2_tmp.a *= texture2D(texture2, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture2_tmp.rgb * texture2_tmp.rgb);\n o.a *= texture2_tmp.a;\n #else\n o *= texture2_tmp;\n #endif\n } else if(v_texId < 3.0){\n vec4 texture3_tmp = texture2D(texture3, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture3\n texture3_tmp.a *= texture2D(texture3, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture3_tmp.rgb * texture3_tmp.rgb);\n o.a *= texture3_tmp.a;\n #else\n o *= texture3_tmp;\n #endif\n } else if(v_texId < 4.0){\n vec4 texture4_tmp = texture2D(texture4, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture4\n texture4_tmp.a *= texture2D(texture4, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture4_tmp.rgb * texture4_tmp.rgb);\n o.a *= texture4_tmp.a;\n #else\n o *= texture4_tmp;\n #endif\n } else if(v_texId < 5.0){\n vec4 texture5_tmp = texture2D(texture5, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture5\n texture5_tmp.a *= texture2D(texture5, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture5_tmp.rgb * texture5_tmp.rgb);\n o.a *= texture5_tmp.a;\n #else\n o *= texture5_tmp;\n #endif\n } else if(v_texId < 6.0){\n vec4 texture6_tmp = texture2D(texture6, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture6\n texture6_tmp.a *= texture2D(texture6, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture6_tmp.rgb * texture6_tmp.rgb);\n o.a *= texture6_tmp.a;\n #else\n o *= texture6_tmp;\n #endif\n } else if(v_texId < 7.0){\n vec4 texture7_tmp = texture2D(texture7, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture7\n texture7_tmp.a *= texture2D(texture7, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture7_tmp.rgb * texture7_tmp.rgb);\n o.a *= texture7_tmp.a;\n #else\n o *= texture7_tmp;\n #endif\n } else {\n vec4 texture8_tmp = texture2D(texture8, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture8\n texture8_tmp.a *= texture2D(texture8, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture8_tmp.rgb * texture8_tmp.rgb);\n o.a *= texture8_tmp.a;\n #else\n o *= texture8_tmp;\n #endif\n }\n #else\n vec4 texture_tmp = texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture\n texture_tmp.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture_tmp.rgb * texture_tmp.rgb);\n o.a *= texture_tmp.a;\n #else\n o *= texture_tmp;\n #endif\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n float circle = radius * radius;\n float rx = center.x * wh_ratio;\n float ry = center.y;\n float dis = (v_uv0.x * wh_ratio - rx) * (v_uv0.x * wh_ratio - rx) + (v_uv0.y - ry) * (v_uv0.y - ry);\n o.a = smoothstep(circle, circle - blur, dis);\n gl_FragColor = o;\n}" + }, + "builtins": { + "globals": { + "blocks": [ + { + "name": "CCGlobal", + "defines": [] + } + ], + "samplers": [] + }, + "locals": { + "blocks": [ + { + "name": "CCLocal", + "defines": [] + } + ], + "samplers": [] + } + }, + "defines": [ + { + "name": "USE_TEXTURE", + "type": "boolean", + "defines": [] + }, + { + "name": "USE_MULTI_TEXTURE", + "type": "boolean", + "defines": [ + "USE_TEXTURE" + ] + }, + { + "name": "CC_USE_MODEL", + "type": "boolean", + "defines": [] + }, + { + "name": "USE_ALPHA_TEST", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture", + "type": "boolean", + "defines": [ + "USE_TEXTURE" + ] + }, + { + "name": "INPUT_IS_GAMMA", + "type": "boolean", + "defines": [ + "USE_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture2", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture3", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture4", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture5", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture6", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture7", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture8", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + } + ], + "blocks": [ + { + "name": "ALPHA_TEST", + "binding": 0, + "members": [ + { + "name": "alphaThreshold", + "type": 13, + "count": 1 + } + ], + "defines": [ + "USE_ALPHA_TEST" + ] + }, + { + "name": "ARGS", + "binding": 1, + "members": [ + { + "name": "radius", + "type": 13, + "count": 1 + }, + { + "name": "blur", + "type": 13, + "count": 1 + }, + { + "name": "center", + "type": 14, + "count": 1 + }, + { + "name": "wh_ratio", + "type": 13, + "count": 1 + } + ], + "defines": [] + } + ], + "samplers": [ + { + "name": "texture", + "type": 29, + "count": 1, + "binding": 30, + "defines": [ + "USE_TEXTURE" + ] + }, + { + "name": "texture2", + "type": 29, + "count": 1, + "binding": 31, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "texture3", + "type": 29, + "count": 1, + "binding": 32, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "texture4", + "type": 29, + "count": 1, + "binding": 33, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "texture5", + "type": 29, + "count": 1, + "binding": 34, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "texture6", + "type": 29, + "count": 1, + "binding": 35, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "texture7", + "type": 29, + "count": 1, + "binding": 36, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "texture8", + "type": 29, + "count": 1, + "binding": 37, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + } + ] + } + ], + [ + { + "passes": [ + { + "program": "custom-2d-sprite|vs|fs", + "blendState": { + "targets": [ + { + "blend": true + } + ] + }, + "rasterizerState": { + "cullMode": 0 + }, + "properties": { + "texture": { + "value": "white", + "type": 29 + }, + "texture2": { + "value": "white", + "type": 29 + }, + "texture3": { + "value": "white", + "type": 29 + }, + "texture4": { + "value": "white", + "type": 29 + }, + "texture5": { + "value": "white", + "type": 29 + }, + "texture6": { + "value": "white", + "type": 29 + }, + "texture7": { + "value": "white", + "type": 29 + }, + "texture8": { + "value": "white", + "type": 29 + }, + "alphaThreshold": { + "type": 13, + "value": [ + 0.5 + ] + }, + "wh_ratio": { + "type": 13, + "value": [ + 1 + ], + "editor": { + "tooltip": "宽高比" + } + }, + "blur": { + "type": 13, + "value": [ + 0.35 + ], + "editor": { + "tooltip": "光圈模糊程度" + } + }, + "radius": { + "type": 13, + "value": [ + 0.5 + ], + "editor": { + "tooltip": "光圈半径" + } + }, + "center": { + "type": 14, + "value": [ + 0.5, + 0.5 + ], + "editor": { + "tooltip": "光圈起点" + } + } + } + } + ] + } + ] + ] + ], + 0, + 0, + [], + [], + [] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + { + "name": "1655112538161", + "rect": [ + 0, + 0, + 596, + 672 + ], + "offset": [ + 0, + 0 + ], + "originalSize": [ + 596, + 672 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 0 + ], + [ + 5 + ] + ], + [ + [ + [ + 2, + "normalFont", + 64, + { + "commonHeight": 72, + "fontSize": 64, + "atlasName": "normalFont.png", + "fontDefDictionary": { + "32": { + "xOffset": 0, + "yOffset": 58, + "xAdvance": 18, + "rect": { + "x": 446, + "y": 710, + "width": 0, + "height": 0 + } + }, + "33": { + "xOffset": 6, + "yOffset": 11, + "xAdvance": 18, + "rect": { + "x": 328, + "y": 661, + "width": 8, + "height": 47 + } + }, + "34": { + "xOffset": 3, + "yOffset": 10, + "xAdvance": 23, + "rect": { + "x": 284, + "y": 710, + "width": 18, + "height": 18 + } + }, + "35": { + "xOffset": 1, + "yOffset": 10, + "xAdvance": 36, + "rect": { + "x": 221, + "y": 560, + "width": 36, + "height": 49 + } + }, + "36": { + "xOffset": 2, + "yOffset": 7, + "xAdvance": 36, + "rect": { + "x": 59, + "y": 500, + "width": 32, + "height": 58 + } + }, + "37": { + "xOffset": 4, + "yOffset": 10, + "xAdvance": 57, + "rect": { + "x": 661, + "y": 500, + "width": 51, + "height": 50 + } + }, + "38": { + "xOffset": 3, + "yOffset": 10, + "xAdvance": 43, + "rect": { + "x": 139, + "y": 560, + "width": 40, + "height": 49 + } + }, + "39": { + "xOffset": 3, + "yOffset": 10, + "xAdvance": 12, + "rect": { + "x": 304, + "y": 710, + "width": 8, + "height": 18 + } + }, + "40": { + "xOffset": 4, + "yOffset": 9, + "xAdvance": 21, + "rect": { + "x": 109, + "y": 2, + "width": 17, + "height": 62 + } + }, + "41": { + "xOffset": 4, + "yOffset": 9, + "xAdvance": 21, + "rect": { + "x": 128, + "y": 2, + "width": 17, + "height": 62 + } + }, + "42": { + "xOffset": 2, + "yOffset": 10, + "xAdvance": 25, + "rect": { + "x": 260, + "y": 710, + "width": 22, + "height": 21 + } + }, + "43": { + "xOffset": 4, + "yOffset": 19, + "xAdvance": 37, + "rect": { + "x": 162, + "y": 710, + "width": 32, + "height": 32 + } + }, + "44": { + "xOffset": 5, + "yOffset": 50, + "xAdvance": 18, + "rect": { + "x": 314, + "y": 710, + "width": 8, + "height": 17 + } + }, + "45": { + "xOffset": 2, + "yOffset": 37, + "xAdvance": 21, + "rect": { + "x": 384, + "y": 710, + "width": 19, + "height": 7 + } + }, + "46": { + "xOffset": 6, + "yOffset": 50, + "xAdvance": 18, + "rect": { + "x": 374, + "y": 710, + "width": 8, + "height": 8 + } + }, + "47": { + "xOffset": 0, + "yOffset": 10, + "xAdvance": 18, + "rect": { + "x": 292, + "y": 560, + "width": 19, + "height": 49 + } + }, + "48": { + "xOffset": 3, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 578, + "y": 560, + "width": 31, + "height": 48 + } + }, + "49": { + "xOffset": 7, + "yOffset": 10, + "xAdvance": 36, + "rect": { + "x": 86, + "y": 611, + "width": 18, + "height": 48 + } + }, + "50": { + "xOffset": 2, + "yOffset": 10, + "xAdvance": 36, + "rect": { + "x": 374, + "y": 560, + "width": 32, + "height": 48 + } + }, + "51": { + "xOffset": 3, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 408, + "y": 560, + "width": 32, + "height": 48 + } + }, + "52": { + "xOffset": 1, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 78, + "y": 661, + "width": 33, + "height": 47 + } + }, + "53": { + "xOffset": 3, + "yOffset": 12, + "xAdvance": 36, + "rect": { + "x": 113, + "y": 661, + "width": 32, + "height": 47 + } + }, + "54": { + "xOffset": 2, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 442, + "y": 560, + "width": 32, + "height": 48 + } + }, + "55": { + "xOffset": 3, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 181, + "y": 661, + "width": 31, + "height": 47 + } + }, + "56": { + "xOffset": 3, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 476, + "y": 560, + "width": 32, + "height": 48 + } + }, + "57": { + "xOffset": 3, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 510, + "y": 560, + "width": 32, + "height": 48 + } + }, + "58": { + "xOffset": 6, + "yOffset": 23, + "xAdvance": 18, + "rect": { + "x": 84, + "y": 710, + "width": 8, + "height": 35 + } + }, + "59": { + "xOffset": 5, + "yOffset": 23, + "xAdvance": 18, + "rect": { + "x": 366, + "y": 661, + "width": 8, + "height": 44 + } + }, + "60": { + "xOffset": 4, + "yOffset": 18, + "xAdvance": 37, + "rect": { + "x": 94, + "y": 710, + "width": 32, + "height": 33 + } + }, + "61": { + "xOffset": 4, + "yOffset": 24, + "xAdvance": 37, + "rect": { + "x": 226, + "y": 710, + "width": 32, + "height": 21 + } + }, + "62": { + "xOffset": 4, + "yOffset": 18, + "xAdvance": 37, + "rect": { + "x": 128, + "y": 710, + "width": 32, + "height": 33 + } + }, + "63": { + "xOffset": 3, + "yOffset": 10, + "xAdvance": 36, + "rect": { + "x": 611, + "y": 560, + "width": 31, + "height": 48 + } + }, + "64": { + "xOffset": 3, + "yOffset": 9, + "xAdvance": 65, + "rect": { + "x": 2, + "y": 2, + "width": 61, + "height": 62 + } + }, + "65": { + "xOffset": 0, + "yOffset": 11, + "xAdvance": 43, + "rect": { + "x": 215, + "y": 611, + "width": 44, + "height": 47 + } + }, + "66": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 43, + "rect": { + "x": 683, + "y": 611, + "width": 36, + "height": 47 + } + }, + "67": { + "xOffset": 3, + "yOffset": 10, + "xAdvance": 46, + "rect": { + "x": 95, + "y": 560, + "width": 42, + "height": 49 + } + }, + "68": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 46, + "rect": { + "x": 442, + "y": 611, + "width": 39, + "height": 47 + } + }, + "69": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 43, + "rect": { + "x": 2, + "y": 661, + "width": 36, + "height": 47 + } + }, + "70": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 39, + "rect": { + "x": 147, + "y": 661, + "width": 32, + "height": 47 + } + }, + "71": { + "xOffset": 3, + "yOffset": 10, + "xAdvance": 50, + "rect": { + "x": 49, + "y": 560, + "width": 44, + "height": 49 + } + }, + "72": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 46, + "rect": { + "x": 644, + "y": 611, + "width": 37, + "height": 47 + } + }, + "73": { + "xOffset": 6, + "yOffset": 11, + "xAdvance": 18, + "rect": { + "x": 338, + "y": 661, + "width": 8, + "height": 47 + } + }, + "74": { + "xOffset": 2, + "yOffset": 11, + "xAdvance": 32, + "rect": { + "x": 34, + "y": 611, + "width": 27, + "height": 48 + } + }, + "75": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 43, + "rect": { + "x": 483, + "y": 611, + "width": 39, + "height": 47 + } + }, + "76": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 214, + "y": 661, + "width": 30, + "height": 47 + } + }, + "77": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 53, + "rect": { + "x": 168, + "y": 611, + "width": 45, + "height": 47 + } + }, + "78": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 46, + "rect": { + "x": 524, + "y": 611, + "width": 38, + "height": 47 + } + }, + "79": { + "xOffset": 3, + "yOffset": 10, + "xAdvance": 50, + "rect": { + "x": 2, + "y": 560, + "width": 45, + "height": 49 + } + }, + "80": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 43, + "rect": { + "x": 40, + "y": 661, + "width": 36, + "height": 47 + } + }, + "81": { + "xOffset": 3, + "yOffset": 10, + "xAdvance": 50, + "rect": { + "x": 613, + "y": 500, + "width": 46, + "height": 52 + } + }, + "82": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 46, + "rect": { + "x": 398, + "y": 611, + "width": 42, + "height": 47 + } + }, + "83": { + "xOffset": 3, + "yOffset": 10, + "xAdvance": 43, + "rect": { + "x": 181, + "y": 560, + "width": 38, + "height": 49 + } + }, + "84": { + "xOffset": 2, + "yOffset": 11, + "xAdvance": 39, + "rect": { + "x": 564, + "y": 611, + "width": 38, + "height": 47 + } + }, + "85": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 46, + "rect": { + "x": 334, + "y": 560, + "width": 38, + "height": 48 + } + }, + "86": { + "xOffset": 0, + "yOffset": 11, + "xAdvance": 43, + "rect": { + "x": 353, + "y": 611, + "width": 43, + "height": 47 + } + }, + "87": { + "xOffset": 1, + "yOffset": 11, + "xAdvance": 60, + "rect": { + "x": 106, + "y": 611, + "width": 60, + "height": 47 + } + }, + "88": { + "xOffset": 0, + "yOffset": 11, + "xAdvance": 43, + "rect": { + "x": 261, + "y": 611, + "width": 44, + "height": 47 + } + }, + "89": { + "xOffset": 0, + "yOffset": 11, + "xAdvance": 43, + "rect": { + "x": 307, + "y": 611, + "width": 44, + "height": 47 + } + }, + "90": { + "xOffset": 1, + "yOffset": 11, + "xAdvance": 39, + "rect": { + "x": 604, + "y": 611, + "width": 38, + "height": 47 + } + }, + "91": { + "xOffset": 4, + "yOffset": 11, + "xAdvance": 18, + "rect": { + "x": 330, + "y": 377, + "width": 14, + "height": 60 + } + }, + "92": { + "xOffset": 0, + "yOffset": 10, + "xAdvance": 18, + "rect": { + "x": 313, + "y": 560, + "width": 19, + "height": 49 + } + }, + "93": { + "xOffset": 1, + "yOffset": 11, + "xAdvance": 18, + "rect": { + "x": 346, + "y": 377, + "width": 14, + "height": 60 + } + }, + "94": { + "xOffset": 2, + "yOffset": 9, + "xAdvance": 30, + "rect": { + "x": 196, + "y": 710, + "width": 28, + "height": 27 + } + }, + "95": { + "xOffset": -1, + "yOffset": 65, + "xAdvance": 36, + "rect": { + "x": 405, + "y": 710, + "width": 39, + "height": 6 + } + }, + "96": { + "xOffset": 3, + "yOffset": 11, + "xAdvance": 21, + "rect": { + "x": 359, + "y": 710, + "width": 13, + "height": 10 + } + }, + "97": { + "xOffset": 2, + "yOffset": 23, + "xAdvance": 36, + "rect": { + "x": 411, + "y": 661, + "width": 32, + "height": 36 + } + }, + "98": { + "xOffset": 4, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 644, + "y": 560, + "width": 30, + "height": 48 + } + }, + "99": { + "xOffset": 3, + "yOffset": 23, + "xAdvance": 32, + "rect": { + "x": 479, + "y": 661, + "width": 30, + "height": 36 + } + }, + "100": { + "xOffset": 2, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 676, + "y": 560, + "width": 30, + "height": 48 + } + }, + "101": { + "xOffset": 2, + "yOffset": 23, + "xAdvance": 36, + "rect": { + "x": 445, + "y": 661, + "width": 32, + "height": 36 + } + }, + "102": { + "xOffset": 1, + "yOffset": 10, + "xAdvance": 18, + "rect": { + "x": 63, + "y": 611, + "width": 21, + "height": 48 + } + }, + "103": { + "xOffset": 2, + "yOffset": 22, + "xAdvance": 36, + "rect": { + "x": 259, + "y": 560, + "width": 31, + "height": 49 + } + }, + "104": { + "xOffset": 4, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 246, + "y": 661, + "width": 29, + "height": 47 + } + }, + "105": { + "xOffset": 4, + "yOffset": 11, + "xAdvance": 14, + "rect": { + "x": 348, + "y": 661, + "width": 7, + "height": 47 + } + }, + "106": { + "xOffset": -3, + "yOffset": 10, + "xAdvance": 14, + "rect": { + "x": 660, + "y": 66, + "width": 14, + "height": 61 + } + }, + "107": { + "xOffset": 4, + "yOffset": 11, + "xAdvance": 32, + "rect": { + "x": 277, + "y": 661, + "width": 29, + "height": 47 + } + }, + "108": { + "xOffset": 4, + "yOffset": 11, + "xAdvance": 14, + "rect": { + "x": 357, + "y": 661, + "width": 7, + "height": 47 + } + }, + "109": { + "xOffset": 4, + "yOffset": 23, + "xAdvance": 53, + "rect": { + "x": 591, + "y": 661, + "width": 46, + "height": 35 + } + }, + "110": { + "xOffset": 4, + "yOffset": 23, + "xAdvance": 36, + "rect": { + "x": 2, + "y": 710, + "width": 28, + "height": 35 + } + }, + "111": { + "xOffset": 2, + "yOffset": 23, + "xAdvance": 36, + "rect": { + "x": 376, + "y": 661, + "width": 33, + "height": 36 + } + }, + "112": { + "xOffset": 4, + "yOffset": 23, + "xAdvance": 36, + "rect": { + "x": 708, + "y": 560, + "width": 30, + "height": 48 + } + }, + "113": { + "xOffset": 2, + "yOffset": 23, + "xAdvance": 36, + "rect": { + "x": 2, + "y": 611, + "width": 30, + "height": 48 + } + }, + "114": { + "xOffset": 4, + "yOffset": 23, + "xAdvance": 21, + "rect": { + "x": 62, + "y": 710, + "width": 20, + "height": 35 + } + }, + "115": { + "xOffset": 2, + "yOffset": 23, + "xAdvance": 32, + "rect": { + "x": 511, + "y": 661, + "width": 29, + "height": 36 + } + }, + "116": { + "xOffset": 1, + "yOffset": 11, + "xAdvance": 18, + "rect": { + "x": 308, + "y": 661, + "width": 18, + "height": 47 + } + }, + "117": { + "xOffset": 4, + "yOffset": 24, + "xAdvance": 36, + "rect": { + "x": 32, + "y": 710, + "width": 28, + "height": 35 + } + }, + "118": { + "xOffset": 1, + "yOffset": 23, + "xAdvance": 32, + "rect": { + "x": 674, + "y": 661, + "width": 32, + "height": 35 + } + }, + "119": { + "xOffset": 0, + "yOffset": 23, + "xAdvance": 46, + "rect": { + "x": 542, + "y": 661, + "width": 47, + "height": 35 + } + }, + "120": { + "xOffset": 0, + "yOffset": 23, + "xAdvance": 32, + "rect": { + "x": 639, + "y": 661, + "width": 33, + "height": 35 + } + }, + "121": { + "xOffset": 1, + "yOffset": 23, + "xAdvance": 32, + "rect": { + "x": 544, + "y": 560, + "width": 32, + "height": 48 + } + }, + "122": { + "xOffset": 1, + "yOffset": 23, + "xAdvance": 32, + "rect": { + "x": 708, + "y": 661, + "width": 31, + "height": 35 + } + }, + "123": { + "xOffset": 2, + "yOffset": 9, + "xAdvance": 21, + "rect": { + "x": 65, + "y": 2, + "width": 20, + "height": 62 + } + }, + "124": { + "xOffset": 6, + "yOffset": 9, + "xAdvance": 17, + "rect": { + "x": 147, + "y": 2, + "width": 6, + "height": 62 + } + }, + "125": { + "xOffset": 1, + "yOffset": 9, + "xAdvance": 21, + "rect": { + "x": 87, + "y": 2, + "width": 20, + "height": 62 + } + }, + "126": { + "xOffset": 3, + "yOffset": 29, + "xAdvance": 37, + "rect": { + "x": 324, + "y": 710, + "width": 33, + "height": 12 + } + }, + "19978": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 476, + "y": 439, + "width": 58, + "height": 58 + } + }, + "20010": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 676, + "y": 66, + "width": 61, + "height": 60 + } + }, + "20026": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 118, + "y": 377, + "width": 55, + "height": 60 + } + }, + "20080": { + "xOffset": 5, + "yOffset": 8, + "xAdvance": 64, + "rect": { + "x": 277, + "y": 500, + "width": 57, + "height": 57 + } + }, + "20154": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 2, + "y": 129, + "width": 61, + "height": 60 + } + }, + "20215": { + "xOffset": 2, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 65, + "y": 129, + "width": 61, + "height": 60 + } + }, + "20302": { + "xOffset": 2, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 128, + "y": 129, + "width": 61, + "height": 60 + } + }, + "20313": { + "xOffset": 2, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 362, + "y": 377, + "width": 61, + "height": 59 + } + }, + "20323": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 307, + "y": 66, + "width": 58, + "height": 61 + } + }, + "20803": { + "xOffset": 3, + "yOffset": 8, + "xAdvance": 64, + "rect": { + "x": 155, + "y": 500, + "width": 59, + "height": 57 + } + }, + "20805": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 490, + "y": 253, + "width": 58, + "height": 60 + } + }, + "20813": { + "xOffset": 3, + "yOffset": 3, + "xAdvance": 64, + "rect": { + "x": 2, + "y": 66, + "width": 59, + "height": 61 + } + }, + "20853": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 2, + "y": 253, + "width": 59, + "height": 60 + } + }, + "20869": { + "xOffset": 7, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 175, + "y": 377, + "width": 52, + "height": 60 + } + }, + "20891": { + "xOffset": 4, + "yOffset": 7, + "xAdvance": 64, + "rect": { + "x": 656, + "y": 439, + "width": 57, + "height": 58 + } + }, + "20986": { + "xOffset": 7, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 229, + "y": 377, + "width": 52, + "height": 60 + } + }, + "20998": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 632, + "y": 129, + "width": 60, + "height": 60 + } + }, + "21015": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 2, + "y": 439, + "width": 57, + "height": 59 + } + }, + "21040": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 61, + "y": 439, + "width": 57, + "height": 59 + } + }, + "21069": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 63, + "y": 66, + "width": 59, + "height": 61 + } + }, + "21097": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 542, + "y": 315, + "width": 57, + "height": 60 + } + }, + "21160": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 550, + "y": 253, + "width": 58, + "height": 60 + } + }, + "21215": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 407, + "y": 2, + "width": 60, + "height": 61 + } + }, + "21319": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 610, + "y": 253, + "width": 58, + "height": 60 + } + }, + "21330": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 670, + "y": 253, + "width": 58, + "height": 60 + } + }, + "21407": { + "xOffset": 3, + "yOffset": 7, + "xAdvance": 64, + "rect": { + "x": 216, + "y": 500, + "width": 59, + "height": 57 + } + }, + "21475": { + "xOffset": 9, + "yOffset": 11, + "xAdvance": 64, + "rect": { + "x": 563, + "y": 500, + "width": 48, + "height": 52 + } + }, + "21487": { + "xOffset": 4, + "yOffset": 8, + "xAdvance": 64, + "rect": { + "x": 336, + "y": 500, + "width": 59, + "height": 56 + } + }, + "21518": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 2, + "y": 191, + "width": 60, + "height": 60 + } + }, + "22478": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 191, + "y": 129, + "width": 61, + "height": 60 + } + }, + "22681": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 64, + "y": 191, + "width": 60, + "height": 60 + } + }, + "22823": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 126, + "y": 191, + "width": 60, + "height": 60 + } + }, + "22825": { + "xOffset": 3, + "yOffset": 8, + "xAdvance": 64, + "rect": { + "x": 93, + "y": 500, + "width": 60, + "height": 57 + } + }, + "23041": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 488, + "y": 377, + "width": 60, + "height": 59 + } + }, + "23432": { + "xOffset": 5, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 2, + "y": 377, + "width": 56, + "height": 60 + } + }, + "23448": { + "xOffset": 5, + "yOffset": 3, + "xAdvance": 64, + "rect": { + "x": 546, + "y": 66, + "width": 55, + "height": 61 + } + }, + "23453": { + "xOffset": 5, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 2, + "y": 500, + "width": 55, + "height": 58 + } + }, + "23567": { + "xOffset": 2, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 425, + "y": 377, + "width": 61, + "height": 59 + } + }, + "24050": { + "xOffset": 6, + "yOffset": 7, + "xAdvance": 64, + "rect": { + "x": 505, + "y": 500, + "width": 56, + "height": 55 + } + }, + "24065": { + "xOffset": 4, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 60, + "y": 377, + "width": 56, + "height": 60 + } + }, + "24182": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 124, + "y": 66, + "width": 59, + "height": 61 + } + }, + "24314": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 63, + "y": 253, + "width": 59, + "height": 60 + } + }, + "24320": { + "xOffset": 4, + "yOffset": 8, + "xAdvance": 64, + "rect": { + "x": 397, + "y": 500, + "width": 58, + "height": 56 + } + }, + "24339": { + "xOffset": 11, + "yOffset": 8, + "xAdvance": 64, + "rect": { + "x": 457, + "y": 500, + "width": 46, + "height": 56 + } + }, + "24403": { + "xOffset": 7, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 178, + "y": 439, + "width": 50, + "height": 59 + } + }, + "24449": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 254, + "y": 129, + "width": 61, + "height": 60 + } + }, + "24471": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 188, + "y": 191, + "width": 60, + "height": 60 + } + }, + "25552": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 250, + "y": 191, + "width": 60, + "height": 60 + } + }, + "25910": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 185, + "y": 66, + "width": 59, + "height": 61 + } + }, + "25928": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 155, + "y": 2, + "width": 61, + "height": 61 + } + }, + "26009": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 317, + "y": 129, + "width": 61, + "height": 60 + } + }, + "26102": { + "xOffset": 5, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 673, + "y": 377, + "width": 58, + "height": 59 + } + }, + "26361": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 2, + "y": 315, + "width": 58, + "height": 60 + } + }, + "26368": { + "xOffset": 4, + "yOffset": 7, + "xAdvance": 64, + "rect": { + "x": 536, + "y": 439, + "width": 58, + "height": 58 + } + }, + "26395": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 120, + "y": 439, + "width": 56, + "height": 59 + } + }, + "26408": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 62, + "y": 315, + "width": 58, + "height": 60 + } + }, + "26426": { + "xOffset": 2, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 380, + "y": 129, + "width": 61, + "height": 60 + } + }, + "26448": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 124, + "y": 253, + "width": 59, + "height": 60 + } + }, + "26524": { + "xOffset": 3, + "yOffset": 6, + "xAdvance": 64, + "rect": { + "x": 230, + "y": 439, + "width": 60, + "height": 58 + } + }, + "27425": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 218, + "y": 2, + "width": 61, + "height": 61 + } + }, + "27493": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 367, + "y": 66, + "width": 58, + "height": 61 + } + }, + "27494": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 550, + "y": 377, + "width": 60, + "height": 59 + } + }, + "27599": { + "xOffset": 3, + "yOffset": 3, + "xAdvance": 64, + "rect": { + "x": 281, + "y": 2, + "width": 61, + "height": 61 + } + }, + "27963": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 185, + "y": 253, + "width": 59, + "height": 60 + } + }, + "28608": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 443, + "y": 129, + "width": 61, + "height": 60 + } + }, + "28857": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 312, + "y": 191, + "width": 60, + "height": 60 + } + }, + "31181": { + "xOffset": 2, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 122, + "y": 315, + "width": 58, + "height": 60 + } + }, + "31526": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 246, + "y": 253, + "width": 59, + "height": 60 + } + }, + "31569": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 307, + "y": 253, + "width": 59, + "height": 60 + } + }, + "31574": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 469, + "y": 2, + "width": 60, + "height": 61 + } + }, + "31665": { + "xOffset": 2, + "yOffset": 3, + "xAdvance": 64, + "rect": { + "x": 531, + "y": 2, + "width": 60, + "height": 61 + } + }, + "31918": { + "xOffset": 2, + "yOffset": 3, + "xAdvance": 64, + "rect": { + "x": 344, + "y": 2, + "width": 61, + "height": 61 + } + }, + "32043": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 182, + "y": 315, + "width": 58, + "height": 60 + } + }, + "32418": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 354, + "y": 439, + "width": 59, + "height": 58 + } + }, + "32493": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 593, + "y": 2, + "width": 60, + "height": 61 + } + }, + "32511": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 374, + "y": 191, + "width": 60, + "height": 60 + } + }, + "32791": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 436, + "y": 191, + "width": 60, + "height": 60 + } + }, + "33258": { + "xOffset": 10, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 283, + "y": 377, + "width": 45, + "height": 60 + } + }, + "33457": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 246, + "y": 66, + "width": 59, + "height": 61 + } + }, + "33609": { + "xOffset": 4, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 242, + "y": 315, + "width": 58, + "height": 60 + } + }, + "33719": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 368, + "y": 253, + "width": 59, + "height": 60 + } + }, + "33829": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 601, + "y": 315, + "width": 57, + "height": 60 + } + }, + "34917": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 498, + "y": 191, + "width": 60, + "height": 60 + } + }, + "35745": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 560, + "y": 191, + "width": 60, + "height": 60 + } + }, + "36141": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 302, + "y": 315, + "width": 58, + "height": 60 + } + }, + "36153": { + "xOffset": 5, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 603, + "y": 66, + "width": 55, + "height": 61 + } + }, + "36824": { + "xOffset": 4, + "yOffset": 6, + "xAdvance": 64, + "rect": { + "x": 612, + "y": 377, + "width": 59, + "height": 59 + } + }, + "36896": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 429, + "y": 253, + "width": 59, + "height": 60 + } + }, + "37327": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 415, + "y": 439, + "width": 59, + "height": 58 + } + }, + "37329": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 292, + "y": 439, + "width": 60, + "height": 58 + } + }, + "38047": { + "xOffset": 2, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 362, + "y": 315, + "width": 58, + "height": 60 + } + }, + "38081": { + "xOffset": 2, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 506, + "y": 129, + "width": 61, + "height": 60 + } + }, + "38134": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 622, + "y": 191, + "width": 60, + "height": 60 + } + }, + "38228": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 655, + "y": 2, + "width": 60, + "height": 61 + } + }, + "38431": { + "xOffset": 6, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 422, + "y": 315, + "width": 58, + "height": 60 + } + }, + "38450": { + "xOffset": 5, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 487, + "y": 66, + "width": 57, + "height": 61 + } + }, + "38477": { + "xOffset": 5, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 482, + "y": 315, + "width": 58, + "height": 60 + } + }, + "38480": { + "xOffset": 5, + "yOffset": 6, + "xAdvance": 64, + "rect": { + "x": 596, + "y": 439, + "width": 58, + "height": 58 + } + }, + "38543": { + "xOffset": 5, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 660, + "y": 315, + "width": 57, + "height": 60 + } + }, + "38599": { + "xOffset": 3, + "yOffset": 3, + "xAdvance": 64, + "rect": { + "x": 427, + "y": 66, + "width": 58, + "height": 61 + } + }, + "39569": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 569, + "y": 129, + "width": 61, + "height": 60 + } + } + }, + "kerningDict": { + "2097217": -3, + "2097236": -1, + "2097241": -1, + "3211313": -4, + "4259872": -3, + "4259924": -4, + "4259926": -4, + "4259927": -2, + "4259929": -4, + "4259958": -1, + "4259959": -1, + "4259961": -1, + "4587564": -7, + "4587566": -7, + "4587585": -3, + "4980768": -2, + "4980820": -4, + "4980822": -4, + "4980823": -4, + "4980825": -4, + "4980857": -2, + "5242912": -1, + "5242924": -8, + "5242926": -8, + "5242945": -4, + "5374036": -1, + "5374038": -1, + "5374039": -1, + "5374041": -1, + "5505056": -1, + "5505068": -7, + "5505069": -3, + "5505070": -7, + "5505082": -7, + "5505083": -7, + "5505089": -4, + "5505103": -1, + "5505121": -7, + "5505123": -7, + "5505125": -7, + "5505129": -2, + "5505135": -7, + "5505138": -2, + "5505139": -7, + "5505141": -2, + "5505143": -3, + "5505145": -3, + "5636140": -5, + "5636141": -3, + "5636142": -5, + "5636154": -2, + "5636155": -2, + "5636161": -4, + "5636193": -4, + "5636197": -3, + "5636201": -1, + "5636207": -3, + "5636210": -2, + "5636213": -2, + "5636217": -2, + "5701676": -3, + "5701677": -1, + "5701678": -3, + "5701690": -1, + "5701691": -1, + "5701697": -2, + "5701729": -2, + "5701733": -1, + "5701743": -1, + "5701746": -1, + "5701749": -1, + "5832736": -1, + "5832748": -8, + "5832749": -5, + "5832750": -8, + "5832762": -3, + "5832763": -4, + "5832769": -4, + "5832801": -4, + "5832805": -5, + "5832809": -2, + "5832815": -5, + "5832816": -4, + "5832817": -5, + "5832821": -3, + "5832822": -3, + "6684774": -1, + "7471148": -3, + "7471150": -3, + "7733292": -4, + "7733294": -4, + "7798828": -3, + "7798830": -3, + "7929900": -4, + "7929902": -4 + } + } + ] + ], + 0, + 0, + [ + 0 + ], + [ + 4 + ], + [ + 6 + ] + ], + [ + [ + { + "name": "1655112624336", + "rect": [ + 0, + 0, + 564, + 882 + ], + "offset": [ + 0, + 0 + ], + "originalSize": [ + 564, + 882 + ], + "capInsets": [ + 192, + 176, + 198, + 155 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 0 + ], + [ + 7 + ] + ], + [ + [ + { + "name": "1655112514006", + "rect": [ + 0, + 0, + 556, + 606 + ], + "offset": [ + 0, + 0 + ], + "originalSize": [ + 556, + 606 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 0 + ], + [ + 0 + ] + ], + [ + [ + { + "name": "1655112548981", + "rect": [ + 0, + 0, + 396, + 570 + ], + "offset": [ + 0, + 0 + ], + "originalSize": [ + 396, + 570 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 0 + ], + [ + 8 + ] + ], + [ + [ + { + "name": "normalFont", + "rect": [ + 2, + 2, + 737, + 742 + ], + "offset": [ + -0.5, + 20 + ], + "originalSize": [ + 742, + 786 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 0 + ], + [ + 9 + ] + ], + [ + [ + { + "name": "1655112479313", + "rect": [ + 0, + 0, + 402, + 370 + ], + "offset": [ + 0, + 0 + ], + "originalSize": [ + 402, + 370 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 0 + ], + [ + 10 + ] + ], + [ + [ + [ + 3, + "spineboy", + "\nspineboy.png\nsize:1024,256\nformat: RGBA8888\nfilter: Linear,Linear\nrepeat: none\neye_indifferent\n rotate: true\n xy: 389, 5\n size: 56, 53\n orig: 56, 53\n offset: 0, 0\n index: -1\neye_surprised\n rotate: false\n xy: 580, 34\n size: 56, 53\n orig: 56, 53\n offset: 0, 0\n index: -1\nfront_bracer\n rotate: false\n xy: 732, 85\n size: 35, 48\n orig: 35, 48\n offset: 0, 0\n index: -1\nfront_fist_closed\n rotate: false\n xy: 556, 91\n size: 45, 49\n orig: 45, 49\n offset: 0, 0\n index: -1\nfront_fist_open\n rotate: false\n xy: 668, 32\n size: 52, 52\n orig: 52, 52\n offset: 0, 0\n index: -1\nfront_foot\n rotate: false\n xy: 924, 201\n size: 76, 41\n orig: 76, 41\n offset: 0, 0\n index: -1\nfront_foot_bend1\n rotate: false\n xy: 845, 200\n size: 77, 42\n orig: 77, 42\n offset: 0, 0\n index: -1\nfront_foot_bend2\n rotate: false\n xy: 778, 186\n size: 65, 56\n orig: 65, 56\n offset: 0, 0\n index: -1\nfront_shin\n rotate: true\n xy: 444, 91\n size: 49, 110\n orig: 49, 110\n offset: 0, 0\n index: -1\nfront_thigh\n rotate: true\n xy: 603, 89\n size: 29, 67\n orig: 29, 67\n offset: 0, 0\n index: -1\nfront_upper_arm\n rotate: true\n xy: 672, 86\n size: 32, 58\n orig: 32, 58\n offset: 0, 0\n index: -1\ngoggles\n rotate: false\n xy: 444, 142\n size: 157, 100\n orig: 157, 100\n offset: 0, 0\n index: -1\ngun\n rotate: false\n xy: 603, 120\n size: 126, 122\n orig: 126, 122\n offset: 0, 0\n index: -1\nhead\n rotate: false\n xy: 279, 63\n size: 163, 179\n orig: 163, 179\n offset: 0, 0\n index: -1\nmouth_grind\n rotate: false\n xy: 845, 163\n size: 56, 35\n orig: 56, 35\n offset: 0, 0\n index: -1\nmouth_oooo\n rotate: false\n xy: 842, 126\n size: 56, 35\n orig: 56, 35\n offset: 0, 0\n index: -1\nmouth_smile\n rotate: false\n xy: 769, 97\n size: 56, 35\n orig: 56, 35\n offset: 0, 0\n index: -1\nmuzzle\n rotate: false\n xy: 2, 2\n size: 275, 240\n orig: 277, 240\n offset: 0, 0\n index: -1\nneck\n rotate: false\n xy: 903, 173\n size: 22, 25\n orig: 22, 25\n offset: 0, 0\n index: -1\nrear_bracer\n rotate: false\n xy: 722, 40\n size: 34, 43\n orig: 34, 43\n offset: 0, 0\n index: -1\nrear_foot\n rotate: false\n xy: 444, 11\n size: 68, 36\n orig: 68, 36\n offset: 0, 0\n index: -1\nrear_foot_bend1\n rotate: false\n xy: 444, 49\n size: 70, 40\n orig: 70, 40\n offset: 0, 0\n index: -1\nrear_foot_bend2\n rotate: false\n xy: 778, 134\n size: 62, 50\n orig: 62, 50\n offset: 0, 0\n index: -1\nrear_shin\n rotate: false\n xy: 731, 135\n size: 45, 107\n orig: 45, 107\n offset: 0, 0\n index: -1\nrear_thigh\n rotate: true\n xy: 516, 50\n size: 39, 62\n orig: 39, 62\n offset: 0, 0\n index: -1\nrear_upper_arm\n rotate: false\n xy: 638, 35\n size: 28, 52\n orig: 28, 52\n offset: 0, 0\n index: -1\ntorso\n rotate: true\n xy: 279, 2\n size: 59, 108\n orig: 59, 108\n offset: 0, 0\n index: -1\n" + ] + ], + 0, + 0, + [], + [], + [] + ], + [ + [ + [ + 4, + "spineboy", + "\nspineboy.png\nsize:1024,256\nformat: RGBA8888\nfilter: Linear,Linear\nrepeat: none\neye_indifferent\n rotate: true\n xy: 389, 5\n size: 56, 53\n orig: 56, 53\n offset: 0, 0\n index: -1\neye_surprised\n rotate: false\n xy: 580, 34\n size: 56, 53\n orig: 56, 53\n offset: 0, 0\n index: -1\nfront_bracer\n rotate: false\n xy: 732, 85\n size: 35, 48\n orig: 35, 48\n offset: 0, 0\n index: -1\nfront_fist_closed\n rotate: false\n xy: 556, 91\n size: 45, 49\n orig: 45, 49\n offset: 0, 0\n index: -1\nfront_fist_open\n rotate: false\n xy: 668, 32\n size: 52, 52\n orig: 52, 52\n offset: 0, 0\n index: -1\nfront_foot\n rotate: false\n xy: 924, 201\n size: 76, 41\n orig: 76, 41\n offset: 0, 0\n index: -1\nfront_foot_bend1\n rotate: false\n xy: 845, 200\n size: 77, 42\n orig: 77, 42\n offset: 0, 0\n index: -1\nfront_foot_bend2\n rotate: false\n xy: 778, 186\n size: 65, 56\n orig: 65, 56\n offset: 0, 0\n index: -1\nfront_shin\n rotate: true\n xy: 444, 91\n size: 49, 110\n orig: 49, 110\n offset: 0, 0\n index: -1\nfront_thigh\n rotate: true\n xy: 603, 89\n size: 29, 67\n orig: 29, 67\n offset: 0, 0\n index: -1\nfront_upper_arm\n rotate: true\n xy: 672, 86\n size: 32, 58\n orig: 32, 58\n offset: 0, 0\n index: -1\ngoggles\n rotate: false\n xy: 444, 142\n size: 157, 100\n orig: 157, 100\n offset: 0, 0\n index: -1\ngun\n rotate: false\n xy: 603, 120\n size: 126, 122\n orig: 126, 122\n offset: 0, 0\n index: -1\nhead\n rotate: false\n xy: 279, 63\n size: 163, 179\n orig: 163, 179\n offset: 0, 0\n index: -1\nmouth_grind\n rotate: false\n xy: 845, 163\n size: 56, 35\n orig: 56, 35\n offset: 0, 0\n index: -1\nmouth_oooo\n rotate: false\n xy: 842, 126\n size: 56, 35\n orig: 56, 35\n offset: 0, 0\n index: -1\nmouth_smile\n rotate: false\n xy: 769, 97\n size: 56, 35\n orig: 56, 35\n offset: 0, 0\n index: -1\nmuzzle\n rotate: false\n xy: 2, 2\n size: 275, 240\n orig: 277, 240\n offset: 0, 0\n index: -1\nneck\n rotate: false\n xy: 903, 173\n size: 22, 25\n orig: 22, 25\n offset: 0, 0\n index: -1\nrear_bracer\n rotate: false\n xy: 722, 40\n size: 34, 43\n orig: 34, 43\n offset: 0, 0\n index: -1\nrear_foot\n rotate: false\n xy: 444, 11\n size: 68, 36\n orig: 68, 36\n offset: 0, 0\n index: -1\nrear_foot_bend1\n rotate: false\n xy: 444, 49\n size: 70, 40\n orig: 70, 40\n offset: 0, 0\n index: -1\nrear_foot_bend2\n rotate: false\n xy: 778, 134\n size: 62, 50\n orig: 62, 50\n offset: 0, 0\n index: -1\nrear_shin\n rotate: false\n xy: 731, 135\n size: 45, 107\n orig: 45, 107\n offset: 0, 0\n index: -1\nrear_thigh\n rotate: true\n xy: 516, 50\n size: 39, 62\n orig: 39, 62\n offset: 0, 0\n index: -1\nrear_upper_arm\n rotate: false\n xy: 638, 35\n size: 28, 52\n orig: 28, 52\n offset: 0, 0\n index: -1\ntorso\n rotate: true\n xy: 279, 2\n size: 59, 108\n orig: 59, 108\n offset: 0, 0\n index: -1\n", + [ + "spineboy.png" + ], + { + "bones": [ + { + "name": "hip", + "y": 247.48 + }, + { + "name": "front_thigh", + "parent": "hip", + "length": 74.8, + "x": -17.45, + "y": -11.64, + "rotation": -95.51, + "color": "00ff04ff" + }, + { + "name": "rear_thigh", + "parent": "hip", + "length": 85.71, + "x": 8.91, + "y": -5.62, + "rotation": -72.54, + "color": "ff000dff" + }, + { + "name": "torso", + "parent": "hip", + "length": 127.55, + "x": -1.61, + "y": 4.9, + "rotation": 103.82, + "color": "e0da19ff" + }, + { + "name": "front_shin", + "parent": "front_thigh", + "length": 128.76, + "x": 78.69, + "y": 1.6, + "rotation": -2.21, + "inheritScale": false, + "color": "00ff04ff" + }, + { + "name": "front_upper_arm", + "parent": "torso", + "length": 69.45, + "x": 103.75, + "y": 19.32, + "rotation": 168.37, + "color": "00ff04ff" + }, + { + "name": "neck", + "parent": "torso", + "length": 25.45, + "x": 127.49, + "y": -0.3, + "rotation": -31.53, + "color": "e0da19ff" + }, + { + "name": "rear_shin", + "parent": "rear_thigh", + "length": 121.87, + "x": 86.1, + "y": -1.32, + "rotation": -19.83, + "color": "ff000dff" + }, + { + "name": "rear_upper_arm", + "parent": "torso", + "length": 51.93, + "x": 92.35, + "y": -19.22, + "rotation": -169.55, + "color": "ff000dff" + }, + { + "name": "front_bracer", + "parent": "front_upper_arm", + "length": 40.57, + "x": 68.8, + "y": -0.68, + "rotation": 18.29, + "color": "00ff04ff" + }, + { + "name": "front_foot", + "parent": "front_shin", + "length": 91.34, + "x": 128.75, + "y": -0.33, + "rotation": 77.9, + "color": "00ff04ff" + }, + { + "name": "head", + "parent": "neck", + "length": 263.57, + "x": 27.66, + "y": -0.25, + "rotation": 23.18, + "color": "e0da19ff" + }, + { + "name": "rear_bracer", + "parent": "rear_upper_arm", + "length": 34.55, + "x": 51.35, + "rotation": 23.15, + "color": "ff000dff" + }, + { + "name": "rear_foot", + "parent": "rear_shin", + "length": 82.57, + "x": 121.45, + "y": -0.75, + "rotation": 69.3, + "color": "ff000dff" + }, + { + "name": "front_fist", + "parent": "front_bracer", + "length": 65.38, + "x": 40.56, + "y": 0.19, + "rotation": 12.43, + "color": "00ff04ff" + }, + { + "name": "gun", + "parent": "rear_bracer", + "length": 43.1, + "x": 34.42, + "y": -0.45, + "rotation": 5.34, + "color": "ff000dff" + }, + { + "name": "gunTip", + "parent": "gun", + "x": 201.04, + "y": 52.13, + "rotation": 6.83, + "color": "ff000dff" + } + ], + "slots": [ + { + "name": "rear_upper_arm", + "bone": "rear_upper_arm", + "attachment": "rear_upper_arm" + }, + { + "name": "rear_bracer", + "bone": "rear_bracer", + "attachment": "rear_bracer" + }, + { + "name": "gun", + "bone": "gun", + "attachment": "gun" + }, + { + "name": "rear_foot", + "bone": "rear_foot", + "attachment": "rear_foot" + }, + { + "name": "rear_thigh", + "bone": "rear_thigh", + "attachment": "rear_thigh" + }, + { + "name": "rear_shin", + "bone": "rear_shin", + "attachment": "rear_shin" + }, + { + "name": "neck", + "bone": "neck", + "attachment": "neck" + }, + { + "name": "torso", + "bone": "torso", + "attachment": "torso" + }, + { + "name": "front_upper_arm", + "bone": "front_upper_arm", + "attachment": "front_upper_arm" + }, + { + "name": "head", + "bone": "head", + "attachment": "head" + }, + { + "name": "eye", + "bone": "head", + "attachment": "eye_indifferent" + }, + { + "name": "front_thigh", + "bone": "front_thigh", + "attachment": "front_thigh" + }, + { + "name": "front_foot", + "bone": "front_foot", + "attachment": "front_foot" + }, + { + "name": "front_shin", + "bone": "front_shin", + "attachment": "front_shin" + }, + { + "name": "mouth", + "bone": "head", + "attachment": "mouth_smile" + }, + { + "name": "goggles", + "bone": "head", + "attachment": "goggles" + }, + { + "name": "front_bracer", + "bone": "front_bracer", + "attachment": "front_bracer" + }, + { + "name": "front_fist", + "bone": "front_fist", + "attachment": "front_fist_closed" + }, + { + "name": "muzzle", + "bone": "gunTip", + "additive": true + } + ], + "skins": { + "default": { + "eye": { + "eye_indifferent": { + "x": 85.72, + "y": -28.18, + "rotation": -70.63, + "width": 93, + "height": 89 + }, + "eye_surprised": { + "x": 85.72, + "y": -28.18, + "rotation": -70.63, + "width": 93, + "height": 89 + } + }, + "front_bracer": { + "front_bracer": { + "x": 12.03, + "y": -1.67, + "rotation": 79.59, + "width": 58, + "height": 80 + } + }, + "front_fist": { + "front_fist_closed": { + "x": 35.49, + "y": 6, + "rotation": 67.16, + "width": 75, + "height": 82 + }, + "front_fist_open": { + "x": 39.56, + "y": 7.76, + "rotation": 67.16, + "width": 86, + "height": 87 + } + }, + "front_foot": { + "front_foot": { + "x": 29.51, + "y": 7.83, + "rotation": 18.68, + "width": 126, + "height": 69 + }, + "front_foot_bend1": { + "x": 29.51, + "y": 7.83, + "rotation": 18.68, + "width": 128, + "height": 70 + }, + "front_foot_bend2": { + "x": 16.07, + "y": 13.83, + "rotation": 18.68, + "width": 108, + "height": 93 + } + }, + "front_shin": { + "front_shin": { + "x": 55.11, + "y": -3.54, + "rotation": 96.59, + "width": 82, + "height": 184 + } + }, + "front_thigh": { + "front_thigh": { + "x": 42.47, + "y": 4.44, + "rotation": 84.86, + "width": 48, + "height": 112 + } + }, + "front_upper_arm": { + "front_upper_arm": { + "x": 28.3, + "y": 7.37, + "rotation": 97.89, + "width": 54, + "height": 97 + } + }, + "goggles": { + "goggles": { + "x": 97.07, + "y": 6.54, + "rotation": -70.63, + "width": 261, + "height": 166 + } + }, + "gun": { + "gun": { + "x": 77.3, + "y": 16.4, + "rotation": 60.82, + "width": 210, + "height": 203 + } + }, + "head": { + "head": { + "x": 128.95, + "y": 0.29, + "rotation": -70.63, + "width": 271, + "height": 298 + } + }, + "mouth": { + "mouth_grind": { + "x": 23.68, + "y": -32.23, + "rotation": -70.63, + "width": 93, + "height": 59 + }, + "mouth_oooo": { + "x": 23.68, + "y": -32.23, + "rotation": -70.63, + "width": 93, + "height": 59 + }, + "mouth_smile": { + "x": 23.68, + "y": -32.23, + "rotation": -70.63, + "width": 93, + "height": 59 + } + }, + "muzzle": { + "muzzle": { + "x": 18.25, + "y": 5.44, + "rotation": 0.15, + "width": 462, + "height": 400 + } + }, + "neck": { + "neck": { + "x": 9.76, + "y": -3.01, + "rotation": -55.22, + "width": 36, + "height": 41 + } + }, + "rear_bracer": { + "rear_bracer": { + "x": 11.15, + "y": -2.2, + "rotation": 66.17, + "width": 56, + "height": 72 + } + }, + "rear_foot": { + "rear_foot": { + "x": 31.51, + "y": 3.57, + "rotation": 23.07, + "width": 113, + "height": 60 + }, + "rear_foot_bend1": { + "x": 34.39, + "y": 4.8, + "rotation": 23.07, + "width": 117, + "height": 66 + }, + "rear_foot_bend2": { + "x": 30.38, + "y": 12.62, + "rotation": 23.07, + "width": 103, + "height": 83 + } + }, + "rear_shin": { + "rear_shin": { + "x": 58.29, + "y": -2.75, + "rotation": 92.37, + "width": 75, + "height": 178 + } + }, + "rear_thigh": { + "rear_thigh": { + "x": 33.1, + "y": -4.11, + "rotation": 72.54, + "width": 65, + "height": 104 + } + }, + "rear_upper_arm": { + "rear_upper_arm": { + "x": 21.12, + "y": 4.08, + "rotation": 89.32, + "width": 47, + "height": 87 + } + }, + "torso": { + "torso": { + "x": 63.61, + "y": 7.12, + "rotation": -94.53, + "width": 98, + "height": 180 + } + } + } + }, + "events": { + "footstep": {}, + "headAttach": { + "int": 3, + "float": 4 + }, + "headBehind": { + "int": 5, + "float": 6, + "string": "setup" + }, + "headPop": { + "int": 1, + "float": 2 + } + }, + "animations": { + "death": { + "slots": { + "eye": { + "attachment": [ + { + "time": 0, + "name": "eye_surprised" + }, + { + "time": 0.4666, + "name": "eye_indifferent" + }, + { + "time": 2.2333, + "name": "eye_surprised" + }, + { + "time": 4.5333, + "name": "eye_indifferent" + } + ] + }, + "front_fist": { + "attachment": [ + { + "time": 0, + "name": "front_fist_open" + } + ] + }, + "mouth": { + "attachment": [ + { + "time": 0, + "name": "mouth_oooo" + }, + { + "time": 2.2333, + "name": "mouth_grind" + }, + { + "time": 4.5333, + "name": "mouth_oooo" + } + ] + } + }, + "bones": { + "head": { + "rotate": [ + { + "time": 0, + "angle": -2.82 + }, + { + "time": 0.1333, + "angle": -28.74 + }, + { + "time": 0.2333, + "angle": 11.42 + }, + { + "time": 0.3333, + "angle": -50.24 + }, + { + "time": 0.4, + "angle": -72.66, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": -72.66 + }, + { + "time": 0.5, + "angle": -20.24 + }, + { + "time": 0.5666, + "angle": -85.28, + "curve": "stepped" + }, + { + "time": 0.9333, + "angle": -85.28, + "curve": "stepped" + }, + { + "time": 2.2333, + "angle": -85.28 + }, + { + "time": 2.5, + "angle": -51.96, + "curve": "stepped" + }, + { + "time": 4.5333, + "angle": -51.96 + }, + { + "time": 4.6666, + "angle": -85.28 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "neck": { + "rotate": [ + { + "time": 0, + "angle": -2.82 + }, + { + "time": 0.1333, + "angle": 12.35 + }, + { + "time": 0.2333, + "angle": 29.89 + }, + { + "time": 0.3, + "angle": 70.36 + }, + { + "time": 0.4, + "angle": -10.22, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": -10.22 + }, + { + "time": 0.5, + "angle": 2.92 + }, + { + "time": 0.5666, + "angle": 47.94, + "curve": "stepped" + }, + { + "time": 2.2333, + "angle": 47.94 + }, + { + "time": 2.5, + "angle": 18.5, + "curve": "stepped" + }, + { + "time": 4.5333, + "angle": 18.5 + }, + { + "time": 4.6666, + "angle": 47.94 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "torso": { + "rotate": [ + { + "time": 0, + "angle": -8.61 + }, + { + "time": 0.1333, + "angle": 28.19 + }, + { + "time": 0.2666, + "angle": -280.19 + }, + { + "time": 0.4, + "angle": -237.22, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": -237.22 + }, + { + "time": 0.5, + "angle": 76.03, + "curve": "stepped" + }, + { + "time": 0.8, + "angle": 76.03, + "curve": "stepped" + }, + { + "time": 0.9333, + "angle": 76.03, + "curve": "stepped" + }, + { + "time": 2.2333, + "angle": 76.03 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.9333, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 2.2333, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -38.85 + }, + { + "time": 0.1333, + "angle": -299.58 + }, + { + "time": 0.2666, + "angle": -244.74 + }, + { + "time": 0.4, + "angle": -292.35 + }, + { + "time": 0.4333, + "angle": -315.84 + }, + { + "time": 0.5, + "angle": -347.94 + }, + { + "time": 0.7, + "angle": -347.33, + "curve": "stepped" + }, + { + "time": 2.2333, + "angle": -347.33 + }, + { + "time": 2.7, + "angle": -290.68 + }, + { + "time": 2.7666, + "angle": -285.1 + }, + { + "time": 4.6666, + "angle": -290.68 + }, + { + "time": 4.8, + "angle": 8.61 + }, + { + "time": 4.8666, + "angle": 10.94 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -44.69 + }, + { + "time": 0.1333, + "angle": 112.26 + }, + { + "time": 0.2666, + "angle": 129.07 + }, + { + "time": 0.4, + "angle": 134.94, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": 134.94 + }, + { + "time": 0.5666, + "angle": 172.6, + "curve": "stepped" + }, + { + "time": 0.9333, + "angle": 172.6, + "curve": "stepped" + }, + { + "time": 2.2333, + "angle": 172.6 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_bracer": { + "rotate": [ + { + "time": 0, + "angle": 21.88 + }, + { + "time": 0.1333, + "angle": 11.48 + }, + { + "time": 0.2666, + "angle": -18.81 + }, + { + "time": 0.4, + "angle": -18.92 + }, + { + "time": 0.4333, + "angle": -18.28 + }, + { + "time": 0.5, + "angle": 60.61 + }, + { + "time": 0.7, + "angle": -18.87, + "curve": "stepped" + }, + { + "time": 2.2333, + "angle": -18.87 + }, + { + "time": 2.7, + "angle": -1.95, + "curve": "stepped" + }, + { + "time": 4.6666, + "angle": -1.95 + }, + { + "time": 4.8, + "angle": 34.55 + }, + { + "time": 4.9333, + "angle": -18.74 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_fist": { + "rotate": [ + { + "time": 0, + "angle": -2.33 + }, + { + "time": 0.2666, + "angle": 26.34 + }, + { + "time": 0.7, + "angle": -6.07, + "curve": "stepped" + }, + { + "time": 2.2333, + "angle": -6.07 + }, + { + "time": 2.7, + "angle": 5.72, + "curve": "stepped" + }, + { + "time": 4.6666, + "angle": 5.72 + }, + { + "time": 4.8666, + "angle": -6.52 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_bracer": { + "rotate": [ + { + "time": 0, + "angle": 10.36 + }, + { + "time": 0.1333, + "angle": -23.12 + }, + { + "time": 0.2666, + "angle": -23.11 + }, + { + "time": 0.4, + "angle": -23.16, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": -23.16 + }, + { + "time": 0.5666, + "angle": -23.2, + "curve": "stepped" + }, + { + "time": 0.9333, + "angle": -23.2, + "curve": "stepped" + }, + { + "time": 2.2333, + "angle": -23.2 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": -2.78 + }, + { + "time": 0.1333, + "angle": -24.58 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "hip": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 0.9333, + "angle": 0, + "curve": "stepped" + }, + { + "time": 2.2333, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + }, + { + "time": 0.2, + "x": 50.34, + "y": 151.73 + }, + { + "time": 0.4, + "x": 5.16, + "y": -119.64, + "curve": "stepped" + }, + { + "time": 0.4333, + "x": 5.16, + "y": -119.64 + }, + { + "time": 0.5, + "x": 50.34, + "y": -205.18, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 50.34, + "y": -205.18, + "curve": "stepped" + }, + { + "time": 0.9333, + "x": 50.34, + "y": -205.18, + "curve": "stepped" + }, + { + "time": 2.2333, + "x": 50.34, + "y": -205.18 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.1333, + "angle": 8.47 + }, + { + "time": 0.2666, + "angle": 115.95 + }, + { + "time": 0.4, + "angle": 180.66, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": 180.66 + }, + { + "time": 0.5, + "angle": 155.22 + }, + { + "time": 0.6, + "angle": 97.73 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.1333, + "angle": -27.37 + }, + { + "time": 0.2666, + "angle": -35.1 + }, + { + "time": 0.4, + "angle": -37.72, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": -37.72 + }, + { + "time": 0.5, + "angle": -40.06 + }, + { + "time": 0.6, + "angle": 2.76 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_thigh": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.1333, + "angle": 70.45 + }, + { + "time": 0.2666, + "angle": 155.34 + }, + { + "time": 0.4, + "angle": 214.31, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": 214.31 + }, + { + "time": 0.5, + "angle": 169.67 + }, + { + "time": 0.8, + "angle": 83.27 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_shin": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.1333, + "angle": 18.93 + }, + { + "time": 0.2666, + "angle": -21.04 + }, + { + "time": 0.4, + "angle": -29.93, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": -29.93 + }, + { + "time": 0.5, + "angle": -16.79 + }, + { + "time": 0.8, + "angle": 7.77 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_foot": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.1333, + "angle": -11.62 + }, + { + "time": 0.4, + "angle": -45.59, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": -45.59 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_foot": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.4, + "angle": -48.75, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": -48.75 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "gunTip": { + "rotate": [ + { + "time": 0, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + } + } + }, + "hit": { + "slots": { + "front_fist": { + "attachment": [ + { + "time": 0.1666, + "name": "front_fist_open" + } + ] + }, + "mouth": { + "attachment": [ + { + "time": 0, + "name": "mouth_grind" + }, + { + "time": 0.3333, + "name": "mouth_smile" + } + ] + } + }, + "bones": { + "torso": { + "rotate": [ + { + "time": 0, + "angle": 56.42 + }, + { + "time": 0.3333, + "angle": 8.89 + } + ] + }, + "neck": { + "rotate": [ + { + "time": 0, + "angle": 35.38 + }, + { + "time": 0.2333, + "angle": 24.94 + } + ] + }, + "head": { + "rotate": [ + { + "time": 0, + "angle": 10.21 + }, + { + "time": 0.3333, + "angle": -41.3 + } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -310.92, + "curve": [ + 0.38, + 0.53, + 0.744, + 1 + ] + }, + { + "time": 0.3333, + "angle": -112.59 + } + ], + "translate": [ + { + "time": 0, + "x": 7.23, + "y": -13.13 + } + ] + }, + "front_bracer": { + "rotate": [ + { + "time": 0, + "angle": 36.99 + }, + { + "time": 0.3333, + "angle": -28.64 + } + ] + }, + "front_fist": { + "rotate": [ + { + "time": 0, + "angle": 13.59 + }, + { + "time": 0.3333, + "angle": 7.55 + } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 271.02, + "curve": [ + 0.342, + 0.36, + 0.68, + 0.71 + ] + }, + { + "time": 0.3333, + "angle": -15.84 + } + ], + "translate": [ + { + "time": 0.3333, + "x": -0.09, + "y": -0.46 + } + ] + }, + "rear_bracer": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.3333, + "angle": 40.03 + } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": 14.98 + }, + { + "time": 0.3333, + "angle": 39.75 + } + ] + }, + "hip": { + "translate": [ + { + "time": 0, + "x": -75.54, + "y": -78.03 + }, + { + "time": 0.2333, + "x": -36.48, + "y": 12.42 + }, + { + "time": 0.3333, + "x": -36.48, + "y": -2.99 + } + ] + }, + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 90.94, + "curve": [ + 0.227, + 0.26, + 0.432, + 1 + ] + }, + { + "time": 0.3333, + "angle": 32.02 + } + ], + "translate": [ + { + "time": 0, + "x": 7.21, + "y": -4 + } + ] + }, + "rear_thigh": { + "rotate": [ + { + "time": 0, + "angle": 40.51, + "curve": [ + 0.295, + 0.3, + 0.59, + 0.99 + ] + }, + { + "time": 0.3333, + "angle": 90.76 + } + ], + "translate": [ + { + "time": 0, + "x": -1.96, + "y": -0.32 + } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": -96.62 + }, + { + "time": 0.3333, + "angle": -15.13 + } + ] + }, + "rear_shin": { + "rotate": [ + { + "time": 0, + "angle": 7.99 + }, + { + "time": 0.3333, + "angle": -67.54 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_foot": { + "rotate": [ + { + "time": 0, + "angle": 5.4 + }, + { + "time": 0.3333, + "angle": -16.26 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_foot": { + "rotate": [ + { + "time": 0, + "angle": 2.67 + }, + { + "time": 0.3333, + "angle": -10.31 + } + ] + } + } + }, + "idle": { + "slots": { + "front_fist": { + "attachment": [ + { + "time": 0, + "name": "front_fist_open" + }, + { + "time": 1.6666, + "name": "front_fist_open" + } + ] + }, + "mouth": { + "attachment": [ + { + "time": 0, + "name": "mouth_smile" + }, + { + "time": 1.6666, + "name": "mouth_smile" + } + ] + } + }, + "bones": { + "torso": { + "rotate": [ + { + "time": 0, + "angle": -5.61, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.8333, + "angle": -9.65, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.6666, + "angle": -5.61 + } + ], + "translate": [ + { + "time": 0, + "x": -6.49, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -59.85, + "curve": [ + 0.492, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "angle": -54.31, + "curve": [ + 0.324, + 0.11, + 0.75, + 1 + ] + }, + { + "time": 1.6666, + "angle": -59.85 + } + ], + "translate": [ + { + "time": 0, + "x": -7.12, + "y": -8.23 + }, + { + "time": 0.6666, + "x": -6.32, + "y": -8.3 + }, + { + "time": 1.6666, + "x": -7.12, + "y": -8.23 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 62.41, + "curve": [ + 0.504, + 0.02, + 0.75, + 1 + ] + }, + { + "time": 0.7333, + "angle": 43.83, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.6666, + "angle": 62.41 + } + ], + "translate": [ + { + "time": 0, + "x": -1.83, + "y": -16.78 + }, + { + "time": 0.6666, + "x": 0.34, + "y": -15.23 + }, + { + "time": 1.6666, + "x": -1.83, + "y": -16.78 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "neck": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.6666, + "angle": 2.39 + }, + { + "time": 1.6666, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": -1.88, + "y": -4.76, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": -1.88, + "y": -4.76 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 0.64, + "curve": [ + 0.235, + 0, + 0.558, + 0.99 + ] + }, + { + "time": 0.6666, + "angle": -4.34, + "curve": [ + 0.594, + 0, + 0.653, + 1 + ] + }, + { + "time": 1.6666, + "angle": 0.64 + } + ], + "translate": [ + { + "time": 0, + "x": -13.39, + "y": 6.69, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": -13.39, + "y": 6.69 + } + ], + "scale": [ + { + "time": 0, + "x": 0.896, + "y": 1, + "curve": [ + 0.235, + 0, + 0.558, + 0.99 + ] + }, + { + "time": 0.6666, + "x": 0.825, + "y": 1, + "curve": [ + 0.594, + 0, + 0.653, + 1 + ] + }, + { + "time": 1.6666, + "x": 0.896, + "y": 1 + } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": -19.28, + "curve": "stepped" + }, + { + "time": 1.6666, + "angle": -19.28 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ + 0.235, + 0, + 0.558, + 0.99 + ] + }, + { + "time": 0.6666, + "x": 0.994, + "y": 1, + "curve": [ + 0.594, + 0, + 0.653, + 1 + ] + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "rear_thigh": { + "rotate": [ + { + "time": 0, + "angle": 30.5, + "curve": [ + 0.235, + 0, + 0.558, + 0.99 + ] + }, + { + "time": 0.6666, + "angle": 40.15, + "curve": [ + 0.594, + 0, + 0.653, + 1 + ] + }, + { + "time": 1.6666, + "angle": 30.5 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "rear_shin": { + "rotate": [ + { + "time": 0, + "angle": -23.83, + "curve": [ + 0.235, + 0, + 0.558, + 0.99 + ] + }, + { + "time": 0.6666, + "angle": -43.77, + "curve": [ + 0.594, + 0, + 0.653, + 1 + ] + }, + { + "time": 1.6666, + "angle": -23.83 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "front_foot": { + "rotate": [ + { + "time": 0, + "angle": 5.13, + "curve": [ + 0.235, + 0, + 0.558, + 0.99 + ] + }, + { + "time": 0.6666, + "angle": 10.04, + "curve": [ + 0.594, + 0, + 0.653, + 1 + ] + }, + { + "time": 1.6666, + "angle": 5.13 + } + ], + "scale": [ + { + "time": 0, + "x": 0.755, + "y": 1.309, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 0.755, + "y": 1.309 + } + ] + }, + "hip": { + "translate": [ + { + "time": 0, + "x": -6.63, + "y": -23.01, + "curve": [ + 0.235, + 0, + 0.558, + 0.99 + ] + }, + { + "time": 0.6666, + "x": 6.27, + "y": -35, + "curve": [ + 0.594, + 0, + 0.653, + 1 + ] + }, + { + "time": 1.6666, + "x": -6.63, + "y": -23.01 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "rear_foot": { + "rotate": [ + { + "time": 0, + "angle": -7.34, + "curve": [ + 0.235, + 0, + 0.558, + 0.99 + ] + }, + { + "time": 0.6666, + "angle": 3.85, + "curve": [ + 0.594, + 0, + 0.653, + 1 + ] + }, + { + "time": 1.6666, + "angle": -7.34 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "rear_bracer": { + "rotate": [ + { + "time": 0, + "angle": -17.16, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "angle": 12.52, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.6666, + "angle": -17.16 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "head": { + "rotate": [ + { + "time": 0, + "angle": -5.51, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "angle": -3.12, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.6666, + "angle": -5.51 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "front_bracer": { + "rotate": [ + { + "time": 0, + "angle": 45.46, + "curve": [ + 0.492, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "angle": 41.33, + "curve": [ + 0.32, + 0.1, + 0.736, + 0.91 + ] + }, + { + "time": 1.6666, + "angle": 45.46 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "angle": -15.59, + "curve": [ + 0.732, + 0, + 0.769, + 0.99 + ] + }, + { + "time": 1.6666, + "angle": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "front_fist": { + "rotate": [ + { + "time": 0, + "angle": -6.84, + "curve": [ + 0.492, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "angle": -14.63, + "curve": [ + 0.324, + 0.11, + 0.75, + 1 + ] + }, + { + "time": 1.6666, + "angle": -6.84 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "x": 0.689, + "y": 1.1, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + } + } + }, + "jump": { + "slots": { + "front_fist": { + "attachment": [ + { + "time": 0, + "name": "front_fist_open" + }, + { + "time": 0.2, + "name": "front_fist_closed" + }, + { + "time": 0.6666, + "name": "front_fist_open" + } + ] + }, + "mouth": { + "attachment": [ + { + "time": 0, + "name": "mouth_grind" + } + ] + }, + "torso": { + "attachment": [ + { + "time": 0, + "name": "torso" + } + ] + } + }, + "bones": { + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 91.53, + "curve": [ + 0.278, + 0.46, + 0.763, + 1 + ] + }, + { + "time": 0.2, + "angle": -35.83, + "curve": [ + 0.761, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.4333, + "angle": 127.74 + }, + { + "time": 0.7333, + "angle": 48.18, + "curve": [ + 0.227, + 0.26, + 0.432, + 1 + ] + }, + { + "time": 0.8333, + "angle": 25.35 + }, + { + "time": 0.9333, + "angle": 45.37 + }, + { + "time": 1.0333, + "angle": 38.12 + }, + { + "time": 1.1333, + "angle": 25.35 + }, + { + "time": 1.3333, + "angle": 91.53 + } + ], + "translate": [ + { + "time": 0, + "x": -2.56, + "y": 5.77 + }, + { + "time": 0.4333, + "x": 8.3, + "y": 7.98 + }, + { + "time": 0.7333, + "x": 7.21, + "y": -4 + }, + { + "time": 1.3333, + "x": -2.56, + "y": 5.77 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "torso": { + "rotate": [ + { + "time": 0, + "angle": -42.63 + }, + { + "time": 0.2, + "angle": -5.74 + }, + { + "time": 0.4333, + "angle": -50.76 + }, + { + "time": 0.7333, + "angle": 1.89 + }, + { + "time": 0.8333, + "angle": 11.58 + }, + { + "time": 0.9666, + "angle": -1.89 + }, + { + "time": 1.1333, + "angle": 11.58 + }, + { + "time": 1.3333, + "angle": -42.63 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_thigh": { + "rotate": [ + { + "time": 0, + "angle": -26.32 + }, + { + "time": 0.2, + "angle": 121.44 + }, + { + "time": 0.4333, + "angle": 70.54 + }, + { + "time": 0.7333, + "angle": 79.89, + "curve": [ + 0.295, + 0.3, + 0.59, + 0.99 + ] + }, + { + "time": 0.8333, + "angle": 99.12 + }, + { + "time": 0.9333, + "angle": 74.05 + }, + { + "time": 1.0333, + "angle": 98.04 + }, + { + "time": 1.1333, + "angle": 99.12 + }, + { + "time": 1.3333, + "angle": -26.32 + } + ], + "translate": [ + { + "time": 0, + "x": -0.56, + "y": -0.32 + }, + { + "time": 0.4333, + "x": -8.5, + "y": 10.58 + }, + { + "time": 0.7333, + "x": -1.96, + "y": -0.32 + }, + { + "time": 1.3333, + "x": -0.56, + "y": -0.32 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_shin": { + "rotate": [ + { + "time": 0, + "angle": -78.69 + }, + { + "time": 0.4333, + "angle": -55.56 + }, + { + "time": 0.7333, + "angle": -62.84 + }, + { + "time": 0.8333, + "angle": -80.74 + }, + { + "time": 0.9333, + "angle": -41.12 + }, + { + "time": 1.0333, + "angle": -77.4 + }, + { + "time": 1.1333, + "angle": -80.74 + }, + { + "time": 1.3333, + "angle": -78.69 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.7333, + "x": 1, + "y": 1 + } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -22.61 + }, + { + "time": 0.2, + "angle": -246.68 + }, + { + "time": 0.6, + "angle": 11.28, + "curve": [ + 0.246, + 0, + 0.633, + 0.53 + ] + }, + { + "time": 0.7333, + "angle": -57.45, + "curve": [ + 0.38, + 0.53, + 0.744, + 1 + ] + }, + { + "time": 0.8666, + "angle": -112.59 + }, + { + "time": 0.9333, + "angle": -102.17 + }, + { + "time": 1.0333, + "angle": -108.61 + }, + { + "time": 1.1333, + "angle": -112.59 + }, + { + "time": 1.3333, + "angle": -22.61 + } + ], + "translate": [ + { + "time": 0, + "x": 6.08, + "y": 7.15 + }, + { + "time": 0.2, + "x": 7.23, + "y": -13.13, + "curve": "stepped" + }, + { + "time": 0.7333, + "x": 7.23, + "y": -13.13 + }, + { + "time": 1.3333, + "x": 6.08, + "y": 7.15 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_bracer": { + "rotate": [ + { + "time": 0, + "angle": 66.46 + }, + { + "time": 0.2, + "angle": 42.39 + }, + { + "time": 0.4333, + "angle": 26.06 + }, + { + "time": 0.7333, + "angle": 13.28 + }, + { + "time": 0.8666, + "angle": -28.64 + }, + { + "time": 0.9333, + "angle": -22.31 + }, + { + "time": 1.0333, + "angle": -35.39 + }, + { + "time": 1.1333, + "angle": -28.64 + }, + { + "time": 1.3333, + "angle": 66.46 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_fist": { + "rotate": [ + { + "time": 0, + "angle": -28.43 + }, + { + "time": 0.4333, + "angle": -45.6 + }, + { + "time": 0.7333, + "angle": -53.66 + }, + { + "time": 0.8666, + "angle": 7.55 + }, + { + "time": 0.9333, + "angle": 31.15 + }, + { + "time": 1.0333, + "angle": -32.58 + }, + { + "time": 1.1333, + "angle": 7.55 + }, + { + "time": 1.3333, + "angle": -28.43 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 39.68 + }, + { + "time": 0.2, + "angle": 276.57 + }, + { + "time": 0.3, + "angle": 17.73 + }, + { + "time": 0.4333, + "angle": 83.38 + }, + { + "time": 0.6, + "angle": -4.71, + "curve": [ + 0.246, + 0, + 0.633, + 0.53 + ] + }, + { + "time": 0.7333, + "angle": -69.63, + "curve": [ + 0.342, + 0.36, + 0.68, + 0.71 + ] + }, + { + "time": 0.7666, + "angle": 321.47, + "curve": [ + 0.333, + 0.33, + 0.667, + 0.66 + ] + }, + { + "time": 0.8, + "angle": 33.7, + "curve": [ + 0.358, + 0.64, + 0.693, + 1 + ] + }, + { + "time": 0.8666, + "angle": 34.56 + }, + { + "time": 1.0333, + "angle": 71.96 + }, + { + "time": 1.1333, + "angle": 34.56 + }, + { + "time": 1.3333, + "angle": 39.68 + } + ], + "translate": [ + { + "time": 0, + "x": -3.1, + "y": -4.86 + }, + { + "time": 0.2, + "x": 23.33, + "y": 49.07 + }, + { + "time": 0.4333, + "x": 20.78, + "y": 40.21 + }, + { + "time": 1.3333, + "x": -3.1, + "y": -4.86 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_bracer": { + "rotate": [ + { + "time": 0, + "angle": 29.66 + }, + { + "time": 0.2, + "angle": 45.06 + }, + { + "time": 0.4333, + "angle": -4.34 + }, + { + "time": 0.7666, + "angle": 61.68 + }, + { + "time": 0.8, + "angle": 82.59 + }, + { + "time": 0.8666, + "angle": 80.06 + }, + { + "time": 1.0333, + "angle": 57.56 + }, + { + "time": 1.1333, + "angle": 80.06 + }, + { + "time": 1.3333, + "angle": 29.66 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "neck": { + "rotate": [ + { + "time": 0, + "angle": 24.9 + }, + { + "time": 0.2, + "angle": 16.31 + }, + { + "time": 0.4333, + "angle": 7.44 + }, + { + "time": 0.7333, + "angle": -20.35 + }, + { + "time": 0.8333, + "angle": -0.69, + "curve": "stepped" + }, + { + "time": 1.1333, + "angle": -0.69 + }, + { + "time": 1.3333, + "angle": 24.9 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "head": { + "rotate": [ + { + "time": 0, + "angle": 24.92 + }, + { + "time": 0.2, + "angle": 10.36 + }, + { + "time": 0.4333, + "angle": 28.65 + }, + { + "time": 0.7333, + "angle": -2.65 + }, + { + "time": 0.8333, + "angle": -28.94, + "curve": "stepped" + }, + { + "time": 1.1333, + "angle": -28.94 + }, + { + "time": 1.3333, + "angle": 24.92 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "hip": { + "rotate": [ + { + "time": 0, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": -34.51, + "y": -78.62, + "curve": [ + 0.232, + 1, + 0.75, + 1 + ] + }, + { + "time": 0.2, + "x": -34.51, + "y": 182.5, + "curve": [ + 0.232, + 0.48, + 0.598, + 0.79 + ] + }, + { + "time": 0.7666, + "x": -34.51, + "y": 596.22, + "curve": [ + 0.329, + 0.17, + 0.66, + 0.21 + ] + }, + { + "time": 1.1333, + "x": -34.51, + "y": 2.49 + }, + { + "time": 1.3333, + "x": -34.51, + "y": -78.62 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": -90.62, + "curve": [ + 0.416, + 0.54, + 0.743, + 1 + ] + }, + { + "time": 0.2, + "angle": -10.52, + "curve": [ + 0.644, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.4333, + "angle": -127.72 + }, + { + "time": 0.7333, + "angle": -19.91 + }, + { + "time": 0.8333, + "angle": -5.16 + }, + { + "time": 0.9333, + "angle": -35.06 + }, + { + "time": 1.0333, + "angle": -43.97 + }, + { + "time": 1.1333, + "angle": -5.16 + }, + { + "time": 1.3333, + "angle": -90.62 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_foot": { + "rotate": [ + { + "time": 0, + "angle": -0.79 + }, + { + "time": 0.0333, + "angle": 16.27 + }, + { + "time": 0.0666, + "angle": 23.52 + }, + { + "time": 0.1, + "angle": 21.02 + }, + { + "time": 0.1333, + "angle": 10.92 + }, + { + "time": 0.2, + "angle": -38.45 + }, + { + "time": 0.4333, + "angle": 6.62 + }, + { + "time": 0.7333, + "angle": -11.51 + }, + { + "time": 1.0333, + "angle": -22.91 + }, + { + "time": 1.3333, + "angle": -0.79 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_foot": { + "rotate": [ + { + "time": 0, + "angle": -12.77 + }, + { + "time": 0.2, + "angle": 17.05 + }, + { + "time": 0.4333, + "angle": 19.45 + }, + { + "time": 0.7333, + "angle": 2.67 + }, + { + "time": 1.0333, + "angle": -28.49 + }, + { + "time": 1.3333, + "angle": -12.77 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": 6.18 + }, + { + "time": 0.2, + "angle": 30.81 + }, + { + "time": 0.4333, + "angle": 13.25 + }, + { + "time": 0.7333, + "angle": 14.98 + }, + { + "time": 0.7666, + "angle": 25.64 + }, + { + "time": 0.8, + "angle": 20.62 + }, + { + "time": 0.8666, + "angle": 64.52 + }, + { + "time": 1.0333, + "angle": 8.59 + }, + { + "time": 1.1333, + "angle": 64.52 + }, + { + "time": 1.3333, + "angle": 6.18 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + } + } + }, + "run": { + "slots": { + "front_fist": { + "attachment": [ + { + "time": 0, + "name": "front_fist_closed" + } + ] + }, + "mouth": { + "attachment": [ + { + "time": 0, + "name": "mouth_grind" + } + ] + }, + "torso": { + "attachment": [ + { + "time": 0, + "name": "torso" + } + ] + } + }, + "bones": { + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 42.05, + "curve": [ + 0.195, + 0.86, + 0.75, + 1 + ] + }, + { + "time": 0.0666, + "angle": 46.07 + }, + { + "time": 0.1333, + "angle": -20.28 + }, + { + "time": 0.2, + "angle": -27.23 + }, + { + "time": 0.2666, + "angle": -47.16 + }, + { + "time": 0.3333, + "angle": -39.79 + }, + { + "time": 0.4, + "angle": -25.86 + }, + { + "time": 0.4666, + "angle": 14.35 + }, + { + "time": 0.5333, + "angle": 55.62 + }, + { + "time": 0.6, + "angle": 69.65 + }, + { + "time": 0.6666, + "angle": 86.4 + }, + { + "time": 0.7333, + "angle": 65.87 + }, + { + "time": 0.8, + "angle": 42.05 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + }, + { + "time": 0.0333, + "x": -5.79, + "y": 11.15 + }, + { + "time": 0.0666, + "x": -5.13, + "y": 11.55 + }, + { + "time": 0.1333, + "x": -7.7, + "y": 8.98 + }, + { + "time": 0.5333, + "x": -1.26, + "y": 3.83 + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "torso": { + "rotate": [ + { + "time": 0, + "angle": -39.7 + }, + { + "time": 0.2, + "angle": -57.29 + }, + { + "time": 0.4, + "angle": -39.7 + }, + { + "time": 0.6, + "angle": -57.29 + }, + { + "time": 0.8, + "angle": -39.7 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.4, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_thigh": { + "rotate": [ + { + "time": 0, + "angle": -56.59 + }, + { + "time": 0.0666, + "angle": -21.57 + }, + { + "time": 0.1333, + "angle": 27.95 + }, + { + "time": 0.2, + "angle": 42.42 + }, + { + "time": 0.2666, + "angle": 62.37 + }, + { + "time": 0.3333, + "angle": 45.42 + }, + { + "time": 0.4, + "angle": 15.67 + }, + { + "time": 0.4666, + "angle": 28.22 + }, + { + "time": 0.5333, + "angle": -38.62 + }, + { + "time": 0.6, + "angle": -53.26 + }, + { + "time": 0.6666, + "angle": -79.31 + }, + { + "time": 0.7333, + "angle": -86.47 + }, + { + "time": 0.8, + "angle": -56.59 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + }, + { + "time": 0.4, + "x": -6.76, + "y": -3.86 + }, + { + "time": 0.4333, + "x": -15.85, + "y": 7.28 + }, + { + "time": 0.4666, + "x": -13.04, + "y": 4.04 + }, + { + "time": 0.5, + "x": -10.24, + "y": 7.11 + }, + { + "time": 0.5333, + "x": -9.01, + "y": -5.15 + }, + { + "time": 0.6666, + "x": -23.18, + "y": -2.57 + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_shin": { + "rotate": [ + { + "time": 0, + "angle": -74 + }, + { + "time": 0.0666, + "angle": -83.38 + }, + { + "time": 0.1333, + "angle": -106.69 + }, + { + "time": 0.2, + "angle": -66.01 + }, + { + "time": 0.2666, + "angle": -55.22 + }, + { + "time": 0.3333, + "angle": -24.8 + }, + { + "time": 0.4, + "angle": 18.44, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.4666, + "angle": -56.65 + }, + { + "time": 0.5333, + "angle": -11.94, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "angle": -41.26 + }, + { + "time": 0.7333, + "angle": -43.6 + }, + { + "time": 0.8, + "angle": -74 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -89.36 + }, + { + "time": 0.0666, + "angle": -95.67 + }, + { + "time": 0.1333, + "angle": -22 + }, + { + "time": 0.2, + "angle": -316.04 + }, + { + "time": 0.2666, + "angle": -274.94 + }, + { + "time": 0.3333, + "angle": -273.74 + }, + { + "time": 0.4, + "angle": -272.09 + }, + { + "time": 0.4666, + "angle": -264.89 + }, + { + "time": 0.5333, + "angle": -320.09 + }, + { + "time": 0.6, + "angle": -50.83 + }, + { + "time": 0.6666, + "angle": -81.72 + }, + { + "time": 0.7333, + "angle": -83.92 + }, + { + "time": 0.8, + "angle": -89.36 + } + ], + "translate": [ + { + "time": 0, + "x": 6.24, + "y": 10.05 + }, + { + "time": 0.2666, + "x": 4.95, + "y": -13.13 + }, + { + "time": 0.6, + "x": -2.43, + "y": 1.94 + }, + { + "time": 0.8, + "x": 6.24, + "y": 10.05 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_bracer": { + "rotate": [ + { + "time": 0, + "angle": 33.43 + }, + { + "time": 0.0666, + "angle": 20.53 + }, + { + "time": 0.1333, + "angle": 15.26 + }, + { + "time": 0.2, + "angle": 19.28 + }, + { + "time": 0.2666, + "angle": 22.62 + }, + { + "time": 0.3333, + "angle": 37.29 + }, + { + "time": 0.4, + "angle": 41.53 + }, + { + "time": 0.4666, + "angle": 31.73 + }, + { + "time": 0.5333, + "angle": 67.45 + }, + { + "time": 0.6666, + "angle": 39.77 + }, + { + "time": 0.7333, + "angle": 30.95 + }, + { + "time": 0.8, + "angle": 33.43 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_fist": { + "rotate": [ + { + "time": 0, + "angle": -19.75 + }, + { + "time": 0.0666, + "angle": -37.11 + }, + { + "time": 0.1333, + "angle": -50.79 + }, + { + "time": 0.2666, + "angle": -12.69 + }, + { + "time": 0.3333, + "angle": 3.01 + }, + { + "time": 0.4333, + "angle": 12.05 + }, + { + "time": 0.5333, + "angle": 13.25 + }, + { + "time": 0.8, + "angle": -19.75 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 68.68 + }, + { + "time": 0.0666, + "angle": 73.89 + }, + { + "time": 0.1333, + "angle": -9.64 + }, + { + "time": 0.2, + "angle": 284.27 + }, + { + "time": 0.2666, + "angle": 283.29 + }, + { + "time": 0.3333, + "angle": 278.28 + }, + { + "time": 0.4, + "angle": 271.02 + }, + { + "time": 0.4666, + "angle": 263.2 + }, + { + "time": 0.5333, + "angle": 314.25 + }, + { + "time": 0.6, + "angle": 16.83 + }, + { + "time": 0.6666, + "angle": 70.35 + }, + { + "time": 0.7333, + "angle": 73.53 + }, + { + "time": 0.8, + "angle": 68.68 + } + ], + "translate": [ + { + "time": 0, + "x": -2.57, + "y": -8.89 + }, + { + "time": 0.1333, + "x": -4.68, + "y": 7.2 + }, + { + "time": 0.2, + "x": 21.73, + "y": 51.17 + }, + { + "time": 0.6, + "x": 4.33, + "y": 2.05 + }, + { + "time": 0.8, + "x": -2.57, + "y": -8.89 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_bracer": { + "rotate": [ + { + "time": 0, + "angle": 31.04 + }, + { + "time": 0.0666, + "angle": 28.28 + }, + { + "time": 0.1333, + "angle": 49.36 + }, + { + "time": 0.2, + "angle": 59.37 + }, + { + "time": 0.2666, + "angle": 8.56 + }, + { + "time": 0.3333, + "angle": 9.38 + }, + { + "time": 0.4, + "angle": 11.51 + }, + { + "time": 0.4666, + "angle": 7.22 + }, + { + "time": 0.5333, + "angle": -18.44 + }, + { + "time": 0.6, + "angle": 11.44 + }, + { + "time": 0.6666, + "angle": 9.99 + }, + { + "time": 0.7333, + "angle": 8.28 + }, + { + "time": 0.8, + "angle": 31.04 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "neck": { + "rotate": [ + { + "time": 0, + "angle": 11.03 + }, + { + "time": 0.2, + "angle": 13.58 + }, + { + "time": 0.4, + "angle": 11.03 + }, + { + "time": 0.6, + "angle": 13.58 + }, + { + "time": 0.8, + "angle": 11.03 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.4, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "head": { + "rotate": [ + { + "time": 0, + "angle": 11.03 + }, + { + "time": 0.1, + "angle": 12.34 + }, + { + "time": 0.2, + "angle": 25.55 + }, + { + "time": 0.4, + "angle": 11.03 + }, + { + "time": 0.5, + "angle": 12.34 + }, + { + "time": 0.6, + "angle": 25.55 + }, + { + "time": 0.8, + "angle": 11.03 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.4, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "hip": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": -62.47, + "y": -23.1 + }, + { + "time": 0.0666, + "x": -62.47, + "y": -38.51, + "curve": [ + 0.244, + 0.04, + 0.75, + 1 + ] + }, + { + "time": 0.2666, + "x": -62.47, + "y": 22.28, + "curve": [ + 0.17, + 0.52, + 0.75, + 1 + ] + }, + { + "time": 0.4, + "x": -62.47, + "y": -23.1 + }, + { + "time": 0.4333, + "x": -62.47, + "y": -24.59 + }, + { + "time": 0.4666, + "x": -62.47, + "y": -43.29, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "x": -62.47, + "y": 22.28 + }, + { + "time": 0.8, + "x": -62.47, + "y": -23.1 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ + 0.481, + 0.01, + 0.75, + 1 + ] + }, + { + "time": 0.0666, + "angle": -64.42 + }, + { + "time": 0.1333, + "angle": -20.59, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.2666, + "angle": -62.51 + }, + { + "time": 0.3333, + "angle": -79.74 + }, + { + "time": 0.4, + "angle": -78.28 + }, + { + "time": 0.4666, + "angle": -118.96, + "curve": [ + 0.93, + 0, + 0.952, + 0.95 + ] + }, + { + "time": 0.6, + "angle": -88.95 + }, + { + "time": 0.6666, + "angle": -79.09 + }, + { + "time": 0.7333, + "angle": -47.77 + }, + { + "time": 0.8, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_foot": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.0333, + "angle": -21.13, + "curve": [ + 0.121, + 0.23, + 0.75, + 1 + ] + }, + { + "time": 0.0666, + "angle": 17.64 + }, + { + "time": 0.1, + "angle": 29.92 + }, + { + "time": 0.1333, + "angle": 16.44 + }, + { + "time": 0.2, + "angle": -29.22 + }, + { + "time": 0.2666, + "angle": -1.61 + }, + { + "time": 0.3333, + "angle": -10.22 + }, + { + "time": 0.4666, + "angle": -15.99 + }, + { + "time": 0.6, + "angle": 9.03 + }, + { + "time": 0.7333, + "angle": 17.32 + }, + { + "time": 0.8, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_foot": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.0666, + "angle": -12.04 + }, + { + "time": 0.1333, + "angle": -0.87 + }, + { + "time": 0.2, + "angle": 25.81 + }, + { + "time": 0.2666, + "angle": 4.71 + }, + { + "time": 0.4, + "angle": 18.09, + "curve": [ + 0.281, + 0.73, + 0.75, + 1 + ] + }, + { + "time": 0.4333, + "angle": -1.7 + }, + { + "time": 0.4666, + "angle": 27.12 + }, + { + "time": 0.5, + "angle": 38.83 + }, + { + "time": 0.5333, + "angle": 30.76 + }, + { + "time": 0.5666, + "angle": -20.49 + }, + { + "time": 0.6, + "angle": -30.8 + }, + { + "time": 0.6666, + "angle": -1.31 + }, + { + "time": 0.8, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.1333, + "angle": 24.72 + }, + { + "time": 0.5, + "angle": -11.87 + }, + { + "time": 0.8, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + } + }, + "events": [ + { + "time": 0, + "name": "footstep" + }, + { + "time": 0.4, + "name": "footstep", + "int": 1 + } + ] + }, + "shoot": { + "slots": { + "front_fist": { + "attachment": [ + { + "time": 0.1333, + "name": "front_fist_closed" + }, + { + "time": 0.4, + "name": "front_fist_open" + } + ] + }, + "mouth": { + "attachment": [ + { + "time": 0.1333, + "name": "mouth_grind" + } + ] + }, + "muzzle": { + "attachment": [ + { + "time": 0.1333, + "name": "muzzle" + }, + { + "time": 0.2666, + "name": null + } + ], + "color": [ + { + "time": 0.1333, + "color": "ffffff00", + "curve": [ + 0.118, + 0.99, + 0.75, + 1 + ] + }, + { + "time": 0.1666, + "color": "ffffffff", + "curve": [ + 0.821, + 0, + 0.909, + 0.89 + ] + }, + { + "time": 0.2666, + "color": "ffffff00" + } + ] + } + }, + "bones": { + "front_fist": { + "scale": [ + { + "time": 0.1333, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.4, + "x": 1, + "y": 1 + } + ] + }, + "gunTip": { + "translate": [ + { + "time": 0.1333, + "x": 0, + "y": 0 + }, + { + "time": 0.2, + "x": 20.93, + "y": 1.57 + } + ], + "scale": [ + { + "time": 0.1333, + "x": 1, + "y": 1 + }, + { + "time": 0.2, + "x": 1.247, + "y": 1.516 + } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": 1.9 + } + ], + "translate": [ + { + "time": 0, + "x": 7.95, + "y": 5.84, + "curve": [ + 0, + 0.3, + 0.678, + 1 + ] + }, + { + "time": 0.3, + "x": -9.3, + "y": -1.41 + }, + { + "time": 0.4, + "x": 0, + "y": 0 + } + ] + }, + "rear_bracer": { + "rotate": [ + { + "time": 0, + "angle": -30.47 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ + 0, + 0.3, + 0.678, + 1 + ] + }, + { + "time": 0.3, + "x": -5.99, + "y": -3.71 + }, + { + "time": 0.4, + "x": 0, + "y": 0 + } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 62.3 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ + 0, + 0.3, + 0.678, + 1 + ] + }, + { + "time": 0.3, + "x": 2.81, + "y": 11.41 + }, + { + "time": 0.4, + "x": 0, + "y": 0 + } + ] + } + } + }, + "test": { + "slots": { + "front_foot": { + "color": [ + { + "time": 0.6666, + "color": "ffffffff" + }, + { + "time": 1.3333, + "color": "ff0700ff" + } + ] + }, + "gun": { + "color": [ + { + "time": 0, + "color": "ffffffff", + "curve": "stepped" + }, + { + "time": 0.6666, + "color": "ffffffff" + }, + { + "time": 1.3333, + "color": "32ff00ff" + } + ] + }, + "rear_foot": { + "color": [ + { + "time": 0.6666, + "color": "ffffffff" + }, + { + "time": 1.3333, + "color": "ff0700ff" + } + ] + } + }, + "bones": { + "head": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.3333, + "angle": -20.72 + }, + { + "time": 0.6666, + "angle": -32.41 + }, + { + "time": 1, + "angle": -5.3 + }, + { + "time": 1.3333, + "angle": 24.96 + }, + { + "time": 1.6666, + "angle": 15.61 + }, + { + "time": 2, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ + 0.172, + 0.37, + 0.574, + 0.73 + ] + }, + { + "time": 0.1666, + "x": 144.19, + "y": -77.59, + "curve": [ + 0.372, + 0.61, + 0.765, + 1 + ] + }, + { + "time": 0.3333, + "x": 217.61, + "y": -192.63, + "curve": [ + 0.282, + 0, + 0.624, + 0.31 + ] + }, + { + "time": 0.5, + "x": 181.21, + "y": -365.66, + "curve": [ + 0.313, + 0.21, + 0.654, + 0.54 + ] + }, + { + "time": 0.6666, + "x": 20.09, + "y": -500.4, + "curve": [ + 0.147, + 0.27, + 0.75, + 1 + ] + }, + { + "time": 0.8333, + "x": -194.24, + "y": -341.84 + }, + { + "time": 1, + "x": -307.93, + "y": -114 + }, + { + "time": 1.1666, + "x": -330.38, + "y": 121.42, + "curve": [ + 0.25, + 0, + 0.764, + 0.48 + ] + }, + { + "time": 1.3333, + "x": -240.42, + "y": 335.66, + "curve": [ + 0.229, + 0.37, + 0.58, + 0.73 + ] + }, + { + "time": 1.5, + "x": -56.12, + "y": 288.06, + "curve": [ + 0.296, + 0.6, + 0.641, + 1 + ] + }, + { + "time": 1.6666, + "x": 87.63, + "y": 191.33, + "curve": [ + 0.238, + 0, + 0.626, + 0.39 + ] + }, + { + "time": 1.8333, + "x": 60.62, + "y": 95.14, + "curve": [ + 0.41, + 0.26, + 0.803, + 0.62 + ] + }, + { + "time": 2, + "x": 0, + "y": 0 + } + ] + } + }, + "draworder": [ + { + "time": 0.6666, + "offsets": [ + { + "slot": "head", + "offset": -9 + }, + { + "slot": "eye", + "offset": -9 + }, + { + "slot": "mouth", + "offset": -12 + }, + { + "slot": "goggles", + "offset": -12 + } + ] + }, + { + "time": 1.3333 + } + ], + "events": [ + { + "time": 0, + "name": "headPop", + "int": 0, + "float": 0, + "string": "pop.wav" + }, + { + "time": 1, + "name": "headBehind", + "int": 7, + "float": 8, + "string": "animate" + }, + { + "time": 2, + "name": "headAttach", + "int": 0, + "float": 0, + "string": "attach.wav" + } + ] + }, + "walk": { + "slots": { + "front_fist": { + "attachment": [ + { + "time": 0, + "name": "front_fist_closed" + } + ] + }, + "mouth": { + "attachment": [ + { + "time": 0, + "name": "mouth_smile" + } + ] + }, + "torso": { + "attachment": [ + { + "time": 0, + "name": "torso" + } + ] + } + }, + "bones": { + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 15.79 + }, + { + "time": 0.1, + "angle": 27.39 + }, + { + "time": 0.2, + "angle": -7.94 + }, + { + "time": 0.3, + "angle": -16.94 + }, + { + "time": 0.4, + "angle": -28.62 + }, + { + "time": 0.5, + "angle": -19.3 + }, + { + "time": 0.6, + "angle": -3.08 + }, + { + "time": 0.7, + "angle": 29.51 + }, + { + "time": 0.8, + "angle": 15.79 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + }, + { + "time": 0.4, + "x": -1.18, + "y": 0.54 + }, + { + "time": 0.5, + "x": 0.11, + "y": 0.41 + }, + { + "time": 0.6, + "x": 9.48, + "y": 0.27 + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.4, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": 5.12 + }, + { + "time": 0.1, + "angle": -20.87 + }, + { + "time": 0.2, + "angle": 13.37 + }, + { + "time": 0.3, + "angle": 15.98 + }, + { + "time": 0.4, + "angle": 5.94 + }, + { + "time": 0.5, + "angle": -26.76 + }, + { + "time": 0.7, + "angle": -55.44 + }, + { + "time": 0.8, + "angle": 5.12 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_thigh": { + "rotate": [ + { + "time": 0, + "angle": -34.38 + }, + { + "time": 0.1, + "angle": -30.32 + }, + { + "time": 0.2, + "angle": -37.22 + }, + { + "time": 0.3, + "angle": 20.73 + }, + { + "time": 0.4, + "angle": 8.69 + }, + { + "time": 0.5, + "angle": 12.16 + }, + { + "time": 0.6, + "angle": -24.62 + }, + { + "time": 0.7, + "angle": -27.26 + }, + { + "time": 0.8, + "angle": -34.38 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + }, + { + "time": 0.4, + "x": 4.08, + "y": -9.53 + }, + { + "time": 0.5, + "x": 0, + "y": 0 + }, + { + "time": 0.7, + "x": -21.14, + "y": -9.6 + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_shin": { + "rotate": [ + { + "time": 0, + "angle": 14.26 + }, + { + "time": 0.1, + "angle": -17.3 + }, + { + "time": 0.2, + "angle": -12.67 + }, + { + "time": 0.3, + "angle": -58.89 + }, + { + "time": 0.4, + "angle": 15.95 + }, + { + "time": 0.5, + "angle": -9 + }, + { + "time": 0.6, + "angle": 26.06 + }, + { + "time": 0.7, + "angle": 21.85 + }, + { + "time": 0.8, + "angle": 14.26 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + }, + { + "time": 0.1, + "x": 0.951, + "y": 1 + }, + { + "time": 0.5, + "x": 0.975, + "y": 1 + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_foot": { + "rotate": [ + { + "time": 0, + "angle": 10.13 + }, + { + "time": 0.1, + "angle": 12.27 + }, + { + "time": 0.2, + "angle": -2.94 + }, + { + "time": 0.3, + "angle": 6.29 + }, + { + "time": 0.4, + "angle": 13.45 + }, + { + "time": 0.5, + "angle": -3.57 + }, + { + "time": 0.6, + "angle": -0.97 + }, + { + "time": 0.7, + "angle": 2.97 + }, + { + "time": 0.8, + "angle": 10.13 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -23.74 + }, + { + "time": 0.4, + "angle": -320.57 + }, + { + "time": 0.8, + "angle": -23.74 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 11.62 + }, + { + "time": 0.1, + "angle": 19.36 + }, + { + "time": 0.4, + "angle": 345.26 + }, + { + "time": 0.5, + "angle": 343.44 + }, + { + "time": 0.8, + "angle": 11.62 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "torso": { + "rotate": [ + { + "time": 0, + "angle": -12.11 + }, + { + "time": 0.1666, + "angle": -17.16 + }, + { + "time": 0.4, + "angle": -12.11 + }, + { + "time": 0.5666, + "angle": -15.81 + }, + { + "time": 0.8, + "angle": -12.11 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "neck": { + "rotate": [ + { + "time": 0, + "angle": 1.41 + }, + { + "time": 0.2333, + "angle": -3.04 + }, + { + "time": 0.4, + "angle": 1.41 + }, + { + "time": 0.6333, + "angle": -3.04 + }, + { + "time": 0.8, + "angle": 1.41 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.4, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "head": { + "rotate": [ + { + "time": 0, + "angle": 6.97 + }, + { + "time": 0.1666, + "angle": 8.02 + }, + { + "time": 0.2666, + "angle": 12.65 + }, + { + "time": 0.4, + "angle": 6.97 + }, + { + "time": 0.5666, + "angle": 8.02 + }, + { + "time": 0.6666, + "angle": 12.65 + }, + { + "time": 0.8, + "angle": 6.97 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.4, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "hip": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": -23.93, + "y": 3.22, + "curve": [ + 0.518, + 0.03, + 0.807, + 0.61 + ] + }, + { + "time": 0.1, + "x": -23.93, + "y": -9.24, + "curve": [ + 0.135, + 0.33, + 0.601, + 0.99 + ] + }, + { + "time": 0.2, + "x": -23.93, + "y": 4.35, + "curve": [ + 0.204, + 0.68, + 0.75, + 1 + ] + }, + { + "time": 0.3, + "x": -23.93, + "y": 2.38, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.4, + "x": -23.93, + "y": -2.5, + "curve": [ + 0.692, + 0.01, + 0.75, + 1 + ] + }, + { + "time": 0.5, + "x": -23.93, + "y": -10.32, + "curve": [ + 0.235, + 0.77, + 0.75, + 1 + ] + }, + { + "time": 0.6, + "x": -23.93, + "y": 4.35, + "curve": [ + 0.287, + 0.37, + 0.718, + 0.76 + ] + }, + { + "time": 0.7, + "x": -23.93, + "y": 10.34, + "curve": [ + 0.615, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.8, + "x": -23.93, + "y": 3.22 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_bracer": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.4, + "angle": 20.59 + }, + { + "time": 0.8, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_foot": { + "rotate": [ + { + "time": 0, + "angle": 12.49 + }, + { + "time": 0.1, + "angle": -8.34 + }, + { + "time": 0.2, + "angle": -6.17 + }, + { + "time": 0.3, + "angle": -0.75 + }, + { + "time": 0.3333, + "angle": 3.89 + }, + { + "time": 0.4, + "angle": 10.22 + }, + { + "time": 0.5, + "angle": 11.44 + }, + { + "time": 0.6, + "angle": -0.33 + }, + { + "time": 0.7, + "angle": 0.15 + }, + { + "time": 0.8, + "angle": 12.49 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_bracer": { + "rotate": [ + { + "time": 0, + "angle": 3.58 + }, + { + "time": 0.1, + "angle": 5.51 + }, + { + "time": 0.4, + "angle": -22.77 + }, + { + "time": 0.5, + "angle": -9.65 + }, + { + "time": 0.8, + "angle": 3.58 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_fist": { + "rotate": [ + { + "time": 0, + "angle": -15.22 + }, + { + "time": 0.1, + "angle": -51.4 + }, + { + "time": 0.4, + "angle": -39.4 + }, + { + "time": 0.5, + "angle": 19.26 + }, + { + "time": 0.8, + "angle": -15.22 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": -24.06, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.1, + "angle": -10.94, + "curve": [ + 0.381, + 0.54, + 0.742, + 1 + ] + }, + { + "time": 0.4, + "angle": 25.34, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "angle": -27.47, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.8, + "angle": -24.06 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + } + } + } + } + }, + [ + 0 + ] + ] + ], + 0, + 0, + [ + 0 + ], + [ + -1 + ], + [ + 1 + ] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + { + "name": "1655112563832", + "rect": [ + 0, + 0, + 660, + 554 + ], + "offset": [ + 0, + 0 + ], + "originalSize": [ + 660, + 554 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 0 + ], + [ + 11 + ] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + [ + 5, + "SFNSMonoItalic", + "SFNSMonoItalic.ttf" + ], + -1 + ], + 0, + 0, + [], + [], + [] + ], + [ + [ + { + "name": "spineboy", + "rect": [ + 2, + 2, + 998, + 240 + ], + "offset": [ + -11, + 6 + ], + "originalSize": [ + 1024, + 256 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 0 + ], + [ + 1 + ] + ] + ] +] \ No newline at end of file diff --git a/demo/web-desktop/assets/common/index.40d4c.js b/demo/web-desktop/assets/common/index.40d4c.js new file mode 100644 index 00000000..a4d827f4 --- /dev/null +++ b/demo/web-desktop/assets/common/index.40d4c.js @@ -0,0 +1,29 @@ +(function e(t, n, r) { + function s(o, u) { + if (!n[o]) { + if (!t[o]) { + var b = o.split("/"); + b = b[b.length - 1]; + if (!t[b]) { + var a = "function" == typeof __require && __require; + if (!u && a) return a(b, !0); + if (i) return i(b, !0); + throw new Error("Cannot find module '" + o + "'"); + } + o = b; + } + var f = n[o] = { + exports: {} + }; + t[o][0].call(f.exports, function(e) { + var n = t[o][1][e]; + return s(n || e); + }, f, f.exports, e, t, n, r); + } + return n[o].exports; + } + var i = "function" == typeof __require && __require; + for (var o = 0; o < r.length; o++) s(r[o]); + return s; +})({}, {}, []); +//# sourceMappingURL=index.js.map diff --git a/demo/web-desktop/assets/common/index.js.map b/demo/web-desktop/assets/common/index.js.map new file mode 100644 index 00000000..a6d01198 --- /dev/null +++ b/demo/web-desktop/assets/common/index.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"index.js"} \ No newline at end of file diff --git a/demo/web-desktop/assets/common/native/1c/1c8a3cc1-a452-4276-848d-2bdf30e6852a.91637.png b/demo/web-desktop/assets/common/native/1c/1c8a3cc1-a452-4276-848d-2bdf30e6852a.91637.png new file mode 100644 index 0000000000000000000000000000000000000000..c81fbe1872d965a1b68513ecdd6acc81d3e248a2 GIT binary patch literal 43060 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¥8aOAU&74+jD zGB%T5Di^>am%~rXq9+1=#D%V)e|R*}(2ql{Z%ig8S_>I;0RQ%5sL~-@v^JigI>P|u zrxM*(wtm^GqH*FbM6l{YQ6^Djpaf-->Vd)GR`gCk!;<(D#7EQr9u&PkYDVCei>G(n zz&VdCska>cCcHw6paa*?AA}8YL*EQ>?cWks!M$Jac7dEqwTpjIfpVPCD;~n2FHce8 zXD)%&mU!%$Wc&D8*2{le9e|j4`>pP8MvG=(c$srgB-`EoJzhVU;dG3WhpE5n5t z=x#=T8{{OVUWeDJw6qXd+Rev-3CQoVL|@ASn=&!5+p`eZ+WHmX@kbI*Q1S*PvS)~C zxDa$HpqvGuoQDo#uO`@&m>Nu=VVC3G)lZUup_<+5ouo{z#p@RT8us}?lxhdnv)Ntz z4zTI2SKoof|5r$)IuD#7F6`IS(sHyEo&b3Nmzs(s@|0c>9BfVkczbtAWUBnQ{=V!C z3~nNIiXzM6Iqymq2Z_0XpEkptNC;gAeY=I@-u1)urT?T^$qMXNt?_+f@|QR8O5)`+?FG7Iy#$hd?*DNI zQpAD5U8n>-$pD_I)nxr#6#AR7-+vs2jUI1=A(H^w%IWmpoL$_Z^PJ+4{{Zc};B_3~ zOrC@p8LVpz?sB}n?Ee^*2aUb*bVZ-8cf$JbptBOCzI#FVU(R;G4}t$6=*b*<#gE36 zL6k?qL)HEl#1(}NLQyhhY!`;Xw`II!KnV^1`0vfIEd2)9+8}8%5*XZ(Rl83qL&PhJ zVI8UQe^rJ_BJZN&5hCsXjiwC|(cIZTkM>g>*3iN5cINe@6^ATlFpA=Utv6RG-L=IN zzs*nZs7_)atldq`h#e`5UqR;;AtpZI!O*Ua^E$isiPMYg=ba)SqEG$5wcwS{4D27l zaO8#d3;H-nrHu{)R*U&TEdRlN347{-Z`6M)t~LZ-8^^)-=bnbRf^701`u~r}0Hxw-3{BU(vIEj|aKH5YKpGT`*f`GYtD2`Js?XdNi zx7*RAFq_RjT1O1eo;3!YyGvCmFC3Y+eSGH6FuZ;8t;!d$Ejl=|j7T$EV}qkWIP1jyX!O zj`#PW#xTEUYPl$pRdfM>cn4&mMB0fM+(NXH1L%X=QK~OV?OB=WZLnp0s{ApJ?*07D z689^J$l^!Crzr1aZ2x?MBb9FcTG$|x(H}r(#h~KIfOR1dj1XxB1A&ld99Gd|?{}_z zA|jTRk-gvphBgLjhN|nnWbp$ZGu6t8CumtW4x0PpWM^K;^XPiK+HK5Zl*u4j@VX?0 z)l5J!fkZGfm5-=>U;N92-~Qc(PIvUai`xM8IRxr6&EwBM4 zeTR&9ZMuy11q&dpmsr>b{@a89m&KJVaEl2_b=ItAT*{fnItD1_@$o zyKaAiLs$nocDpRN+O9HvaMx)6x01jl*g6-GiMuyr9`J>{-(cvj0ctU|#Ou42wmaTZ z09e=ULY$;jMv?(%JEN~;e0I14l@!PNyH-SEL`cyz^ICzQtdz%c8n|`RqPd8-(+g*vttweW9RZCdA zJ?t)c&jud_6PGf(842TLx0RdgcALo<9C}pLvP>P__n&RJvS$q>kgedwoB1BGDd)ii zC{;R=kdgHJ;2BC6e!5sy>MRhxuOPy6w&AIr_VAFp^mJ}aDOy0eLytn(X5$z1xo#Q* zoG(t(F72bXze-_xV3YWb8-rHR0cyT@;_**8DBJnBG&^|PBt-)gcaNLeVjkQ=yv_t9 zGREKk9bB`sUqPR*YH=CbuzJ+IJ48&=?alw)u&T_4=ARe>;pLwJrGl=2Lw z`u`GZ0@uHEEgEv!rhyN!KZr3I$&p0v%Kzw^UP0fe((xgl!*h&N_BT>+C;opvey&NR zfv+OL_n3od4x=7o;o1*|oG|!Y{-P=ziYlOZiUYe@;e=6NDXS~#_V@qh6)6KtMDea8 zZ@iLa0+RS?Q2@LA9v=1Cv@bEag~+)j9=IDc6_t5|lH6J81Y_}AeqX`xSE6`n$fp)3 za4F>7uwxk96##$xQ5AM+zG!!KW1=~Ek`nCC`;C&cO9UM)p7HFN|1Wz6tjt&bw6#6R z~)!R{%1TxP5 zVH$@l(R`Matq$=I{Wq~^R2egHR>_gzG~&M`6T!|hiqii)e6{qD4G+iK5tanf=i0wm zHEQ=9RReG#@wP%|nnN>O%KXKJTnI8-XqTJdr*qIZl%q8I(%acc^Iuf)Rm?1pex>-b z|K1*0qWXR|O4K;K9f}pjQ*eGCfRKT21B%#i^RkSGTa|QKKbx{qdzqLAORh3d7(`9o z(E#5`As)~bUCf(@hW^b$_Ad#7@p?(g_MKp#g5WN$#1I1gd{U+BEpBg#n&!z&UdK&O zS|Tp&(|58d*oE5x4Tr{{c97;SgY%zy_*|FDCX3kg2d2+iMvlQ}7R<7*E{&AFrk919 zwhn_cV?%0|xgO7#B73flmilG6gQ3)2ojBk(5LpO%q|mb2{Ei_9t%&6?YE&hyiYRZb z!K&e4)s3I5Yr&q?^nasF9%6Lq3!8{Rj#}g~4Fh~R!?a$RY$`Jb3ysi;ZOx&mg`Mwo z&8~?}`qW-08f&spa#4DDJ&8P9;dyAf)ZW+_m8_+HNW9yNcy45J)(|98Z1Ml6DiM|O zBz(Sl&P3|)MC1yb$zw_%B5|M-*~O1`ZkalH!vH^kn%!puQUBs0X#Ddkw?{Xl0uL|K zbh-Wj8~_|xw}I_kg6d=nCWm#xo&J=N13M}o-~mZ}Km?zxH%$ROKGXwrPr>IAHt(3d z`r#`BzioW}AJw~tksLFW=33^#EB>pS`_*?O6#P4%8AJ#hx2v5Bv`!5M@x8(s4F^5Q zY%Fp9oR;*j?R(}{6|Dz*f8I)07_*A@bxgMwU3sc&a~QgmElDdDORt-|ygo@%rg&9K z#q82Rd8@o#{m6%TxkLCh@nE_Eq!dAjwXjaWKgXmP>b3urLg2kfCRlj4Or2tKO$|i< zFyY|%dt2L6#3W;+rjh_%lXkTa>JPlN0fBW%MATg77hS6RTW#O9#X72;NFp!VIrjno zg%$@9mZsUsEDyTm-@;DbcQH@uRpPq;CHz4pQ`~yq6omd?b5IGpxtBe7jx=fZqU}b| zss9xFaUk-D7bXwY*cALqrakvBY5ifV@8r{ zW(jjCeMF05rs*8EFMA+TM4eIG0%zMSlgoO)jWB(mkb<>Jj)(%@@d9|q@SGyppAL<0 zJhZ%8n!9Ev$ex(v!T(mSJo~>BrC(qE;6xlO8-y1r$JD)89{^59LTxX zEA>)rN8gA4k7WVtMafFPI9y6i!ee z5K8LZ_f3S2!)IG?_m?cU%k{7GDblJ7e()Cq{ExdG*2BPereRy=!5j1#KOz|d4L32&yGGDBzxc%9Inw(dEI`y)`7 zp3UmiWI5vF)5Z^{xiXaMwZFt?oqp@)3EuBRW_4MNXEW%G z!mOAuH%e%Xlb5+ks0THek(O z|8R8ap^XxxMqh$b8W1idzV8lrN_FecUBysp(rzETGy-i~&b0{iTOE>-p%IK2CO($f6;S8 z>$n+wL&REYGfZAeIB`Ih!#f}W1_gWZ+4W!TJxgY!-m>&~66Udax?PB&uYdAX+6X8^ zfRUhK(cFM4!qOdtl)#HZe?@XaBj#SAn$FKf6UG>P_PtxcDWs3R$_pbc_qn2dW6vZ? zm?r((DKsq1LHO>+N?l0lUG7!>+Wwvi^kEv(eCOJ75^p#)5oath3ZFe*smXYUC2OIQ zRFCgF)Vqv_8elDeA4-|m^W_Tc`8PZ<-plVntdY;cG3cu2ot%<<4|Vc1JTVRgLhJ^h zIvqwaoj!RgZT%dyM`Lt{%;h|=2gP^@xDhiD9fYm|t%(*EPRd=$6=9gT#`n>e1yp=0 zO}Yfx4}{?AUmo_+nnEbJU7Uk@9VoLE0%(FXf!`JYn-DA4F&;?3F9RU2%hKv}+ zZgryGk+=f|%!3QllGo8E)OGkC3SizaXi~mp?(r;SL!u8Z&j-`mTIIhx*ceMp!-FPw zdVT}z%l9uvXJi{tC27w=LF{TAHfg`OiBTkKLDevAT%S4z`;%$+L}|K$ta~^rUu@tl zTagjSDCYUC#QbHR#!>4C#%#SE$g5FgZ*P8arH&+ymE$iI%{j-1&fr*gdtqT3LdM)_ z-R{sl)6>p`0UUX^L`pyk{nR|{*jExg3lH8DrH!QYGehU#;;pn>p!OgL9>qUlJZ2PA zW(`>H=iovzMu-LDL|bq2%y`gx-u}5Rrcq8M zw1F0RVG0rELl^H~(7?CxposDG4eZJ#*3?K_^(T>0Gpq%U$|hI@Bt@dqbWI{-0vQzJ z39dtpF%Belw=+yjGD{$1LK&0;S)x$x1R~oXT|BtvJ;S7z znYEGq;fJRd+seTmaKKAN^#g2ee&ljE^S8@-)=<(hGNy2i5Ahf(fL`W3_J{f%h?$oD zII_K}0zs*dXA~P5cdN8amJU6w)~s%!4lK^Z8}Q6O+FuQD2yYiBo22&6$gTybFKeV9!?Y zjr>*R2PE0O;NdLX-`!Vp*oIN0g`I`4~3L1$418AC=*T)i)5hu$cb@mo3W>K^g1 zooSSGy}PWHc@{@4B}~ZpafV)O3_k2+e$9K&Ro%?96Lh!&d501dC?A{_4;P?@A;d;X`AtKzmYTM0Y12nmirzMC9XQ@1fVHUv;gUcyQ|{2mu{q;9dj`WCbQe z@&g(3h*5laVil=Xm!vUQ{H&kA%N{L=rAd-kr}#c{^2*H#o&ztqsRBzjjs`32#EHgP zx{(a>5>jL&ye9NwK36}T6VB_bT7Tp{mvd;C8CY_e3vbwqTtuCE97MVYKAh^&DO%u; z{BfaUdwd?vgbGkj+<8r=x#m!TZ+m{t5MMz(nF<2(ES#)2v;wcbZ=ua7u5iuGm}G{M zT*xe5tb?8T(Q!!~cauTLvka%{fA8q@zJG!E5gl^3M>}gJqTiZLmrdWmdewA+ctG98OyBS{4zJf*bvJdg8x|#5xt&?kYmxx7uSZkLEw-{trT1T7p?U&( zDY;8B%)a@-FfKi3`z>;lhTtt!GM=sFcQ?h2MHhEVFR|@IWW`;7`yQvUX5hG{kwJ~_NS^Ddh+QG4?PH=^MB|M3U1uO8OaCpy2 zhw=l82Xw0QRh~&e5lU{o**8}BUC(|c7P4%Rm_NcHcEF+MK@QK`2YC!4Vj{bhsW}#- zt|neVf(r6C5|lCm#_bP`J-df0qMT4L4gWWN8~vLArXPNq^T9Z3y=-8NiC)j`Js(~T z24VLWvDQ2(LDis&qxx~;Q&B%_APAB!CarxUrowyuPc_-+#Q7xIyj3pBbQuYkvSKyq z8Kkh&o(J{9a;+&~;w28+h|1o5S?bK*Q1V~e?@ z-vZLfAV@prgf#h6@82`So(*2g*feA5){Qdka`K*p_9CzP zVU0s)a+0T^VrUW+umRAr{fKrlnSL|wPCz;Ou@B6vxbeu{W9A53BWda zuOBlw|Ki=`r(ts5603eDQPc2Yw{q9OJ^gFsW|G6#d`}CoyEAAReC2vwl8Z6619kSt z4C0R!P(+jPl9n6#-%6!62|NF6tcktRPwpE&^KaE{r8U9QBO>aHwTrOnEEHl6qG4T}5^X~p5nt-?#vbaR-5K8Opc z)eLZ)EQ4jRm#@hlq07`Um&`ML6se4PuRMhu=Ywv-4h%^*1UYlIBmGD5j$`Ys$_~8T zi9y|pOloIFhhR{zx`D%s((L+SDTS}f3c>1KPbF?ji}_}U-_-e|_7rswEi$cuSgk#? zBy(31X{vAzYjU$!%(EBTEm-Xn&d0zn%$zkFz z;Ws6PaeSI%t)!d&RtCPXi6j?7kJa++U~wbM#gI&{}j;ey?Ie@ z7fo-bj7X~bxmE*z9J>(sVLuNd`MaT@j}1Uy{F(}BHP0_c#`5JW9?f-);C*G z2NyH;0{%D(3>ZbaK*uQ3B}^dx^Q$?sqg}&N^bR1YG@ZTEa_24B8{K`9TzD|6K3L~IAW01R z{-AWZvRNT|lhzSA4?n*R;LkM%XG3(7|MDu;(9tzyj7)DS!AXGhIcp87)+scruf}9C zD0k{Wa1DL~R6ZdZ*Z3IVZ`xw2%Qx0N%t)1zds2IY`vCN4X9}ro}}rIA=k!wPI6%( zTTHb6O&qm`pwQh{%HEFL>1K{ODOx9*;6zVdtt24HW)lkY@F1BcMSDQT?2>)7YZ6MG z7%5fPS&U;4N7^W>S2a{ z%P4Rd&-U)A3TK!USyzF#53ZyQGQZ5jI>>I)A1+*{U_Vyv?{d!uM=i9jB}}v(TqdTF z{b2$rU7xwoC$L*UY}?5HypOqVO;2SI1#ztEgU~#32!~I1H&OfbRDXzBGZs0H^qPh7 zA(>g2{F-?%2%V#{sCM%ALUc=B5y5FZy4V;z26@s@A(|M=pj2nOzql3d&9UxeUMCq4 zh=e6UfVC%)!QbqKXzynL#T^Hdqlxk$oV*voX>roh9V6FYbMr8#vE6*$&UR3pdw#sS zio-PWj9?_u(fJ<&Kv_Vh31j}ML7>#m>?{6bGH*A%{YfyhR9N@&EKJ!##uzG49jB27 zK2!>oh|~TG_?ZZnx>9mA2dL@7c~E+rcN-3f*NW1wa6F`H+%>kU^dgEs&7-LU`4St49*GHk{#|VJ2or5Y%Hfv5FK1S*{O)>>Z zq|G3ikDU}1dEohuulW$@yLt{@3F*fzOZN=@hdQ*I@Pc@Tj4@;Esv#|kL>Yw@80){) zn1h{pK@1Z+U^wdYuoQ-9Vq}4Eau`H;6Q5&TyTY$)h==(8NEfgGCo*O=ej2&+58#c$ zXcLosLc%tazqkUXFLm-~gBr9IM-66-A+J_KQK-|k5d2JBg{XE)-An4q^(O4=0p&>m#j$tWff%x7d8KcBrIy(?CnVJQ8r~01>BOaebM{!?wS*kV?k;6nhN;f3luNgrQtNr6u{?n|4;{RvBVO z&)L;EIRHUUt(C30px^xsAjer?=dFlm^^)=R!gJ>Ihih?Et*Z|v#a9X|4Kc2JO38XE zDnA}zk!dAH%Th!JtL9*(1!+?aDU^AKfEA-J21Lm;XU{T10oyYo#-l9_ zbs{{;|L%qmYiU{s4| z*Mf}M+Zmpk*d#N=Xlz&QO&*{Ej(D--$lz+)0@67%$ZY%x@@z4kQ{c-m`6E!FF@7)P z_(wiAfgz;uW8wF;NieY!jvByO3Io6m;&z~>ty&&7jg(H9HeQ(o$3Wd(g|=L|JN-XH zOI2rrLx8l3hk;o~-4~=a5U^p!$L&%<3@nI8XGO`y;#jAMgjaAXqqvtDI^GrMwgURX zFj**9tOhZNy;Z==%cX{36G-5LR+NGUU|)(4@j`|&?t0+@l(w$e{aC*WxP#;F3We<6 zxo2dI1rOK36eqb;fSueSW2&@#IL9qObN!3tTBR2c_Rql&EpT{e{!tut-+nTN!a0r3 z8O4LxRNgdH0mmaNQg1zpG<04Ze(R1pE*Cx%EtEIw{Nv(* z(~Lj!@N^6p{!?NZvSkVl_>)NH(R>ls4qubGf4dH}IQ(hSz=j|H9Gcl&Z9%4Wy!I}Z zQ^rw!Id&jq@}TFMRT`}NjX%Vbc66(}sBw-DFtS|73Mx!E34m;))p&J7=OA+}TXqGI z2^jwAI83Tz=?~-j-PBhKjITfMdHuCT;g%iOc1 zXon0H7NpgUx6|dGC@c@ttRmAgCdR}0kPuF^coi+iGD!f-?9Q9spt$y5T+Nm=xsJ{+ zxF9}s^Y{4z$1kX9h|}i9F;Mc}Ll|ruF^;DI!IskDMg}Ml!8|HS-Yi~g6=XtpH-hRS6<`N9x zL`(vFOg)Yq*%I`z{7~;rS$!Yn8gBXdOe42FgegXF@5S)HHkB# zKYq!`-jdir>fd+I`!^$DaV>uzMu2GaPF{n zkVN3I$RaYvgwk)(s5PVpM)b{k?4?E>21!c`Cu)1K6k790X>0%62~4$O!6oSx1qy}A z&;5-7vI+mbC*~;|KH&%0C<(v(KQ?AI(Q`kkWAR9`wYku>0(F zIw5KiAuKp;h2ekW#jvYb`s-If&|jQi?s&D@zV_o=S-k^X3(!$*Znn9DF(3h4rV~65 zEph#i`D>It`3nBA0%LA*Kq>I8H!&o3-apHwD<#@`?>$@0OhFmtAxJt2ovv5*8zO?s zl68G%X3X|-Fs<=Gf2w-+hmc3*_uIdWujKt>N6lvRZ87`Vd2aMoFD(Sw}}sTMl$u)O@@DmiZBQtx3nElu@|^3Ic(Ph_)e<7No5g zs-0C9MdqvvZ|6FjoU*}*7Cf?)=#i;9bR0U`J$~d%U>@<1$I4}V2MUDKZtI>6%E~@l zkj_go>2PcxsM+@__b|>vbYH4yvH7<`!tVw?^u)sLFae9YB1r$)dhnu%ggDo(OR++| z^}&zd)Hd2PKD6(T$>uHn78av!O+Jd>8AA79{}C^@@+Cl1Mi(;Hzz;ISl@&UM56{}Y zp46;} zHdNkj99w$sV7f#1sMZ2);5G^Y0f{~wu{bxW3W)km;yo^<6Shmtnf>VdHxy$P)GTtLS!BYkX!2~GSQ8(TRTU5wMQw?QV>y@eb>rHzS6u^E>{zNA5tb=$ zSnQ;}@UG=(o+zgMn@V70c}ohse$o6_OB#F-5qap%dZ6nS#K!5{EmdX4PKR?X$Eyur zE8oAyI|gu~0Cd|=n+!VPxO#a`u)Hmr#OC535{z_O}|>sTNCl8XDI8*qXK zv*sO!s?9m#i$PD)&4)LUF_vb?c*fz}Tc7rVy!j=Q?W!NY?{9p(AOKxsE*Au7a%g!9F7p)?y*gq&S*^CG9iHBx zusdn>nlfdJo~+>d1V+-GfR*}c+1Eau(*eNOoK8gXA-Gdm0Mg!r4Bl7_YC8GCs5zto zXA$tFo-8xOZ2x7iMu__B3&#smNHma|9_PYODa;dAQI}db+Ba^}`F(8y6iockIPUy2R0p6clY6b=LhX>4w{y*ld{|tc zbaPSUoyE3!dw?mPZJWb{{sC3R4&P6*kOqjNw0%5aU&-#Yql+R2sh@=gLGbPfokpO? zcYR~t#fffXe*&RKj7jJGF+w~*P9(0!;jQSxF%39{_r3*nGGqSUoDXeE)5xg!Zxs#& zNBy2<2S{4Teq~Fe|5p<|)5quIB+_@rhD<1TGfZdgfm$LjT?*KEU-YroC<48JhrO0n zqGX690JykmL0aXUY`c9vE^RO)^b6Q9o`ed`jjZdGzcVPl%>bbPutW1Rie>rE<*YhD z^}`P4*lN`whAG#cQ~-80{*B$#R6Dlsn#MfbU_PO4h{*F;xl1Lx95_X@ch1gt|6$rI zP$atix+}qjFGb$*32Ax>Ts2a;3?R&>Q^G?14-(c8fkIA^+OmVehTyQu!aEKItP zb>rMUndS{>89ZhnDsxK;vs(d>#9?xGboV*zC4jIqhWI4zZ$}wcbL6KoDAFB?elbNX zB{J>)N)~8F@IfR6EhOV=dflPXtl#Gz7M}f!3-d{C3RrNjAxQl3?x_AY2C%7Xb2Cmq z&#eHzj01g4$}RE<#tByk7^c<-$T2r@c;oq}XGHIU!Ic`UNAc~86M%d!EDL#+LK!MJ zs>}c%`>dY8(^`we|K6nKX&q(32Bz#by*ZBiSiT-WwIV`71!6zQ6hHEZYxknQ8XZc_ zYb=QeUG{9f_(MzBPXV-^>&k*3e)T4fxp!xPV%V`dW#2n63GvjNHg$ zS>mYgPsPlF@?AS1Mkbu8Z3UV##h?IZ11vRG@nNRAci?Lq=L171p`{qSzfjVeHO;h# zyc)KCG!js_6Y=C)#hNFbQu3RW?MKi%Wh)1*--n*RWa7%zPkAVE`1(6Z`%hJs{f^w1 z1?kF$5`4&rOxp_0XduoVYKuVdcavIs45x(cIt;CVUR_ zNNEoCxMYW7UnF5A~f{&j9>V$+2wMVRNTP!bMv<`+^cz1(2wTnl@dA+V*|-FN1Uj!@#zZ~ zy?ynh;|?u-9K{oE7>n^-vP=s>fvbk2uE$RztLEXvTD^O38X;ADpWEj@3`uWlmj_=f zn~@Z~aT3XqA$?i_hROaS*resD$MU$H z)IN?`qLAGH~sJM(Vyr9!SNYic7j02ml5<7`NLm-Ei&Ehg@b;!{LJS^#GcALoz;ye*B5063pAm-2$2^mXrXV0GZ9-Ygbuw+B<*OiTRffru6%y6A zlE{KI_d~xz?#`a$Vdr^TvOq^MIQ=?;(;sc&khl6rarh`;t<7rCeY#0`>GcKaft0a% z`wuR7bb0T=4U>q~c`QreWwQ{imwC{akz@h;KNedIYP;)q0`NRH5x|8%Raff{sm#Io zz^dPb8cB@_ESkZ5?6=pW`_H_LecSksj3JQ8J`7IBV8@v~)G@7nuNfREpiElI`xT2K z`z7OEl?LhuyB`sPfPBJ~&r;^$Do&*JaLiC&Jy6a{u+dK{_v2$r!(ZP&qMD!dvhqYS z8FP2x#%D0+I4`w^{wHG zs6kdF%n_y(QDqu7Eow?|D2W)2`t}R~s4EP&np` zL92A$vUa|Cbb=I3%k2}xu@-pSLDLp_yX@qBhq3u-%>i7yzb2u#ifsD?)E#=s82ywv zcz;s_B_4RA0{Df9ZKMq|;M28Diz2_J#giVE#(8=B*RsZ|A_LiQU}$gsW4?zrPmWQJrTpi0a?i%?7!- zuWMxo8KF6|cDr5WD^zwqJ}HtrW*k2czeq2wbtV{`=0lNJNWk(M2!1CD9-WxTj=qs} zuo93Hp?OkwgY_NovASGL*u&H+6cV`h%X^ z0OQM)P_wYc!-RRb7rSrVi<{NYJUD-r1-U$U1Gv40qoylA;#^xabIMZmQyYrOu$xMp zhhM@p#Ui@rYao{Dmfr~KtbFLBkraE?EL@0FFu{b!ocFsCl=O~4!A(GoVfB1q%f+iM zEGzD~$0m|9Fjs3EK9;q4kzn8!2xsPztuX`x7X%0GT&5ALK~kgd4fq?=!wp;YFE&w5p8|yU97cx zyKU=ie8T|qEnkEAE|2($3s+UAgQG6I1J2X|@z$gBw$5|jdK5P%s&tsVIH2ip)PZ>#;FdCBm=i%aS zwIANpii}pLk6&37nNG|sjVjRf;6q=niBWk%ibVq{Z{xBgmR0VQKh*cGkxu+spuPG6 zIXZ&Fuq+ea>$ZvqnJ!H&$k${{&%&Iu@DE+~63s*rl7l&Xm8+32w5oDdyMDzqP41pD^lWFG%rDYi2#ku{vxS{<_Zl~|D z2tl4^(DA&y;=>9N%dbp|#$|nBdn(&{E=1q|>@DO*-VqYv5-YzAK#2)CoM_DvELCt> zI*GN-jVB6fKxBQe7}PaTwae}DBS(ps{ot$T0FBor)=qycQU7@kst&dfNB0~p1Olw7{2HD=8H2h}^bahc=w>b!7Cs#;$Dy+Zj zt7Q3(Ol#*}#ffGp&jdLx1u$VofIBFia=|&co14!9B4iYWtaoe-uH61A$&$A9Xgn9D zbh~{2#Nec_K}~!LiK{iw94ect4p)5@hVZct8 z(+q)&F=H^a;d4VAM1{N04cCg{#wxH*4>OZ7mGqFr{g22g#U@Vnca+7mdOPzk z^14pWg0%OKTh~it4*X-Pr`uZ693(#JJO+eD-38mjOrNAiI*4ZA?9Iy)3PYxHHA3of zkDmDtFpNIrxak(AQ*Lw-#+^-L0~Kr>fRFvlnT4Ym1JOcU+35Q}F@i-MI1sZhmO!#6| zuTLP^>MLJd=)*l+AD*<*ziS%~pMYC?A{pX1zCpPqne({r})IX{2i^H2^WvPdFAnO)sQglO>aI^cx!j~Zgx@1 z4C+WZJwA#I?uA@0RxRUjOkw_G;-B<287Vhy;{6G$%0*vmTW=9h&OntB0&hjUZ-&Y9ZQIo18Se&E17lQr}I%jW=DvwoPn>)JV z)kC=*VJTL5T{+Qk?afmuzCG8RcDy@YdxVF5nrBjm)f`NL4b#XPsN8_pL>qZzTV}-H z<7v2FjnNvdh6?hL@<>*aKYtH_L0nvQ+x}Hs(>P7HI`eX%x5-$2GS?y+T=u#!Gb*;k z#F(j568AeDmd&d?F;#!JD+%)`BF`mC`H5BfcOy2JQyxaV)`BQhpOnzobG%L=tw`?dSwQHd&z zPTTe|Xl?oODyT}rTtx4iHl1L~GMcjq`uuLvRkj~5RrZe9#(G&I_|Kr?ye zcv{^{g?XX4;o6?6m(z71A%Jx5^xN8asO<4_j2EH{K{GzYZ@1EXeLFpwvvzlW$b~#V zW>!O&60iK}&-%8z*8f7A)IHJwsKReA2KA>jdiA5G28xPXL;4X!EeQjwrp#+!>Tv~b zMyuUq4`A`BZw%7$mHHP~Bfcli%U-JN^wlHN)(sg-#BAkt&P{3JJk_e-l=s-0a|OF3Q~3^1b>|b+a<*~Y@xN2 zmJ{leHnZ?nACtcli;5LzzAG6&-S`dsoMDNzLdgXz{$)b5n9}d#X)HId20N0q@?v_c zZN#grVKQbPV=eRzE!aOZk}~wOw%q)i@t$iZ>rHh6Vc$_hhh=U%d+BD?S`Su??z!>n z-uTd~AGCZZ`KZ|dIhb_?jn3=up;{esys_ux_99#-r=>H7jA?p#=buIfOJcM9bp7U{ ztV&3Tc63S8Y0ppC#6^FNJQRCO)l}Jis|yL4yIt$4efZ7W z|Iq)SS=u-DhuxK8#v@x5Pa)u!|4I|^StTH8=vWt=RL)O|+ctM*9Hh6go=9YVzTV_b z^pPdINUHtN#E#QltD*0*`Zj2F)lbT|jU!!;w*<3w3oK)ZbOT&(O5>>(MePU7vRzAQ z8vv`1k2&!>t-A+*d&<`A zBC4QCprH7l)<1lZJJ36Tt`^5WF_elFSL^W$Tg8?!KhTFIH(H?~mQBFA zJ&e0vz)ycC{6<&IPmqOEXxIM%R@o?`m1O*2{2eG#3COeR7}ooA=6v8%z0}LJRD&+~ zP$aqP)MsSt^PgEK z19bn0Oj9@ZYYSQIte>AJ7O~C5KT2dpQ3v)U%-YS$RF7E%e_~J+I(I0woBd(Q52uvX z4uDJYMh*;IUe8)m_;oV)Fv>-n$C#Y%8|xnH=3W-1ilhwdYtp=h7NbU7CA`QOj)I-R z_?_s76QGP`^>|;w<>?u;w)~DL)|*KO_HT}3O?2-2sys~CJizddP!OaJFn--whm%D; zL7zMq9p5*Dbglm4tMfFEQ!z!DNKs^)NueNb650FigdmA7OnX-wel7m8mRj{5aPHz@ ziG&7k7@Wze-0rm5n>9UmcMZnsAt*xCz@dY7Y?2TyZ}HMOcIoz7uboCy)!Va6EaGZG zJb2;z^B=5ZJ>9c$vOYb|?eLrSgJ7@!FxqSGdzu^{%^B(*;>s8o+)TPNXV(l6t4^&x z`O+~4LnsVy(#C#|^Nz|>n!lgx=HcP73q>{2G5rZ>Z){?8VC>I_{iLbMIo=ET$ur z1E8X}=9x!`*y!#7ZYtfBNrWD=cZQ)`vap@K64qQaTpnweJKmtUDlihD;88|R}N~C7b!zW zSF94S>Nn>@?&Lm@@>IQ9Ot&+8S7Ux_B7y zXWRG_#7h{G&NSC9vFgLF15XKti0GqZGf1yn2qS5_-fDAWk#(E)46be1mSxY|Q$qmV zrPybeI?6XaR`2Y!Em+lJB`9(F^s&>YM>QrE2oK-6zp*e?j(;u`+;(v5u0C7p&zE1{ zzt=5Gkz{ae1)hwqs=sz+!*xt5D}ak7uHV-AVC;!~*{5=FRp?bwM)COVg@eL}m=+qM z*5)<=grpa`3mu5-7~IOS>5nB%t|Aq#uF{KlncM9xL|9kxI&}AM%{>g0dOwT-wY&bg z+o99prAJt#`_q#T^DU>J5juY{jZCo}Z*$9dtwEV@Jka;D2Tha25nGv9a9^#aC*~b7 z%DSMg;i0qpxn%#Ik))Sgu;3^hb;>wNIz(wVEO+;EIBYKL9fiYIPVT5O4?JC71@0=( zzFN&x=g}BzYSLYt3yzA;G0R%I+7}8(&jshrVr3>^GP|zT|B!Mx$?Jd4X%=bx)}&Sep4|=blM_CR*;Y{O8O5M^@!{bh`>plGnkCk}XcoAbev;D) z>tRBUeM>Z@;D5Zc>Zumlwji<~?GvFLIVRv+wv%S$UyOF&zJ>!hfK~)t$9V>ECfhRetl3|VcjW6FU{qVs{Vro zksFG6lz?liBcIp@#e-$%4!I@L2ok5M%|oY{Ya{cWcs0tGmE7VkzGk3qRMIuY6)Z}_b*xeJJTYnJNC2G2x|K$uGQB?TO^0~~LsxDz3 zYRf z+(+Tf`ogznHT|jv`+cp_{spR(X{w1{)RZ#fFOJ)peO$dQy10gFC*tt8a$sNbcjkJS z;`Poi=1$CmS?s3nbiWpw88XujZf7sK9k%%s6{Q@^ z54#@z5N+jGQK9BKsGtQLx6UFTeWw%=9XC1O^msvf7F(kH>R~7`Szwzn`OK%bh05ya z+XOw#k85`qJj-G&B(T43kK2ho;9-t*yEa9Fm}8`wrzEmqT0xtr)71HTcbyD|zcZK% zcj~5GG#ZGi*R2V`DKIz10-(LOm##bKA*D`Ua z0uUQVu{P#N*XF2Y71J|iTTZ9CX_Qf%us>J_z~|{&B5#c8_Bmt^Z)payP1UC0rtH{I z6R|5?`SA9FJH-rfGJdKh)5{v%`Y!)x{PrQQd!ik|J;|-4KYLUIYeL!Uy0@RNiyWn0 z(5=DAFp9|rVWebQJmjQpATQxC=V?1$S=5c)0%eicYMIYspBy5K(z{1{P(2i+Tz5bC zz4Oot0y(4g`kOlZpGv2S za3A}9bE_6vExx1ihQvZpP~m%gXZ13l68>pXRyOxVw?M*lCmoNAzP1izLd>dKp-T-l z&O=^_3+?R{2D4bW=Gnhnv9c30^nC^NM{rdsw)zh?lTa3d>ol3_En}c6*erK`{I(FT zOtaZo|MP9NjDv^1%Y@m}huhlBXFhJbd$E=MQlXoAr5%=&7gdRM+g$9j`XX6`e)C7r z>&1VLAl6ngWK2s=-W{o62Izhf5r9b_^d+lpBZW@3?R=YH39gOtEh5 zPpHLH^v`tEuS!e!nMvf{4_JHe8>?}fsA5T;{MDD<3*^Zr|NpP2D-VRS?fOqop{y0z zm!zm<8)L~f*#?6Mcju=mQv@?{q3(C@m9z@b3ogpo4_y4F zm+{n1KZM}MQj~!8cd`2}CVog5nj6M4FuLl_Qo-TH?f6r16!`HOOgGDKWUg6{g47md zh(4Q|y0u+@SAOjfc)U@xzkK(XLda>3DEX^1NSO^#5o8d~O3>8AO>V!)Qa+(*XSML9 z(BwsZ$j#)FqqSk|8v9ZL6TK~#I|Bk{aZi?X2da>bnrC$w!i#QE{R7dTR7CNCft0!H za2trKOlj8wpNB^X`HFbdn&$7?1u^YF{{$KFhjE1c);dAOcF${V`|C#h7YZ%Z`#)&q z4K2+0@`hl04E!8(SC)hCRONJWQNioRjcGx=n|`0mtH+b>Z7)#G%4sS_N)9ewTB*fQ zW3}zP&PpL^>4lkIH?88wHjLMfDqY*6MKib9HPZBX>}E_j9y8jvWx79%+J2Nw-X2b~ z40nz@WY@ZsX`$Vq^nyQj+wsEiUtx;zh_TF6|MaB`ym__?(;S6Tde%)j2j{P90*?UnZVd3+A+aH$E+ z_gBVR)qQnhu>xe)@N;Bo27S$^=TidcAIgtdZvvrMkaC}NkGXvJRppo~{9<(W!|sG; z8G9<&M`&wOuJF%Jm=r3Z(N0!6BkSr)hF8-43O4)srE|!6dc#1%lm|1SleH#Rp>!o3 zp6^e{VTJ16N{x3(5kW=4?ta4O_A|9hJ|U>8=92>2Q;A`IGRY`O_|;#DyVVsEw0nlQ zH@&dEh=SX#AT2M@r3VO7RT9g}UOF3_wWAkidc`CB_@_>&$R(J7(S30Uearj%Fay)J zx_FsLYyoe4$l3CV7lOiUIvTD8ruVXtete98sSeBV!WJyTcO#hfuSxk4*o71wno?4w zcZ!S5w(<^I$g$fp-{~!F&x$g;oLi;NX2J?Pk`-|55@d&(zN5}pe4Nh~2&cAL5lo7eTvcB%Q>7}_CC~--< zm$!jyE%#kTa&C##F@Vxm{NRge+Y#N8J{bITMU`&f~C~Aj=nq zIstGJX0&W$TXW~>S>BFzaTlGUExv{ObVjJI|EWHQ!5f+f-?v<*W4&Kdx7@6M7I1c~ z2&jLoW-Ae!e>hp9xIIUW-(d)Y(oT&gq{SVUzQk)CXe^MSMs@AXnjXkQ!M-_JZS}#> z_fM1W67$@2BT3O6YsV8LyPvsX%xX{<;+?F;=Psj#UeDBGk8?DJWWqPI}^{+72p z8(`rwBOX9&$gkKcLk`lj`Fa%jcHLF+ zWAWahZ7O6p5~m3}96Hpu0HXgDF_-!rJ)rM;3*XO<-!A>So0b>f(Bqk z8J|m&Oq1fKn&kE>%+4ho1tW`PMP4LrHT=^ZW zW;VUCXTqd!M(Q^dFFNd?6#5TcpW=aD>a^<6NTx$gMoQ#g*%4$o*Dg@9}%8;qv&LS7KxJuyUbZkK$BIEOx z*`+Dv!}-hdSH)MLWWRoqYXO3q_3t=d)>IrYd#yHZ_Rl{E?HuyrBIg#Gi0U_^FNXM| zG)Qeo76Umrl|vwV7}s%^z_ z@?viRAdH0zRO`hwf>g{VD}Qa}U7*d|%CVA=8!5=@2<#a)p(VwD9nc|^%2Qv2`&r_| zVEmKw;j3GDwf>@}`HQm?ZaGRbCdVOV9nnK{#gY^o&cMII-R=W?G4g9g)>*?on9r)k z!QAX3^`500NXAYkJR{2fK|i=M{V__4*iIgM{u>=-{y|MtkxQt3uKDC)C(&qIqilXJ zTv>N_c5&x1M@3CiVN2BeU)8p{&T)4z9>nSwy|@i3MVD|4wk{UzFqQL_AcGbe5@Ys% z*`8j&!A;cC>&!Ch6E2ZBK7-7R+vJW7GqQzsQmaZs0(LgXR_;d}|4E8^U$|EI-B_V1 zGSqkum@?batKJ{7orq*nr`AUQ;HimKs}P-N&3P**5%;n$Gc1>w$?Und1z$|Y^ zaasKRRr=lR_$qL@kNJ?T6f2vDd>v7Xcn7b$SpUr#=Nh6Jo-1+t33DVk2m1HR7~fSB zmI8|zynPfbXi(GO@vV7)w0nU!;&zEHj8cpBUlTA%5E2w!>Kc;uYucr*M2M{Vz)?N_ znET5&Z099{mh-|g%F~QctA5cyW+I;Le86fK?j{wvXfZk zJro=@`Of(oA(tgETwTxNXy7<_oL`B+;80xq*$MZ<@QtlTO|8)6z+Csmb;oDUFC^{0 zRm_oljzzcJKmE;?1|o&)?@56;p=19rxY+&wqri{&Tz`oeg~2I6a=-{?E`DFYRun=3 z%O#;ql~;YHCx_a!XYsb{E_|fa>@VqFd}|-M>fQ?bKRxmb4u&wN=S_6p!Aj@A#L}n` z;w{pFl(JsXmiTstY)o7E9kSZ>GB`b{&E9ij+E0^8DZrF++<)R9*B> zI)g5RP@~MIU{ZP7yWVo$brvB$Y>y%TCQ46ek6oh}jwc+6n8LvPlHB6}NJ6v^(BI}^ z&A-911{Z#wUB+lIQ`QlT;Kqoy3u(T~Cv%`0ms3kavlrs~Jspn5(=CMSn?8+T`_FJr zse+Tjp16pQlVt|OCzRZuB$oD7RU8DGFMq7RL|OYucU|7kG*60YGglw z9Y0U`|DN+m-0fd{fys>WjP^>j87(r`jH`N!E<>pPVql)Jk|iY?qZN|z^V8Dbk1cUe z%>U(4s+85|AskY?yUu*Q6;|fQNpao=2SF`vp1L30R9JgjFMM!k(^MbFW!L2$P*x#( zi8Iyp0(zBSUQm{L2vBe_i6V;&3-Eegt>e|CHEMxq+@ zNwApP(~tO#5jH~-S0%yDkbaEWU$q@4BxWF%uMCT&oRqD4jI{B&17sR}cqF$Ybprl1 z)j)}oliwC}#+$?MJdIFQT6K%2@+*9C-FH#w7S~66GvcaQQGY5@VzwOhi)0KFodI9dKz`*6_;+%)S3r9K8zxV272?A5inZfLks8rzptPGfhd6fTnn!~SZvFETWW%fa0E`eEqGBwe8`hL@b zG&RkyZzF``9lGYcG4Xpc3(?C44_{^O$eB^A(2?<2?=|@4$iAWapSSG_M>8*&5A6iK z_>T^cC!$>N-lv)U^4nvn+}T9jMImBiuCXaiKD}xa5fs_EA{FEqdD!b9rQ^cqKS#OD`!D6JqaMBr+~wnDSK(rx3TU$A zwx!Y(iKOYBGw-U%(eM&4T#VKQ*(-rH%?X7YzSygP1Ogc#)OxbQG|w#|WMpzdH|` zTt_uj7=44>x_3@MnF~&T2JS=W@SXD$Z`g#DwfU}wZ@M@r6V~u6%lo#1*emw-lqYi7 zw}}>AobBK*2;?B8!N*zn%h`u|tm%`iV)2lXK@N1D?OZ>{h>;IQi@IMhRQZ*0y+bv*0{DRI=H0hD@I3mm9t6qbb>fqkSB6~ z4URl_3d9v&RMF8{^)rb&*axT{SmtG0fD&#urqJYz?6RX|%DqGJ4;M3e zg_V3_K51?}sZ$;&q&f`C(p8UEv^A~(w9wtlt-d$0odc&6jYWMvj zx*LaRU}m@?FNw1@`It7R-Y2c?($PHMUc4la*aNpLNZKPk!gl8(S}6LcsCefym0fGN zyv^!>U>g{nzxgt~iu$iFh@ZFum$r`hlKK3Z;J+{OP=0kLe3x-VRf>+{G9BBeqgT|kKOT!Fz*vuj?x zY<_md@89940dQO4Xzj%qg;FL1nCVz*h4LFvr85RqnXH_t0q-i}nZY*~WQe@`Wn9i1 zQRk}VCNc^N5!S!69Zurv^rNd*E_I;@*n_*Rl;3?Xwy~}F7<_#q6DcKXDMRU z_kk&lv>I!L@gUI{?Ij%s#%Vkh3gYrZyd@53+@gUat|In?QhO>WHt_m$j?b{A5dn`b zC?>Wi->Cd3!~I!@21c6&0q~8D3nH&V^wJ=8656fmDX*Ode(-sWU=ybF6H7eM!i#lJ zu$VX8SYra#-&`t33 zDjYqZv2=_EwprU4JOYFqR(pr^K}o$mG4WjC$n(92w&y9WVt-66TH42b)DjgM4ds0w zbj0@pzNlPeCh-V(WcdgtbqQ7;oK`M>AVNga4CPk_NsmmI2O1CVbVLqbbn$OSNg>U*Xpw1YeX6S4C_`Y=b@3 zb;ry$Kki~2_RD`ng>|dk3)4>T!?rD&yhskzYm2j(DW1^;>gHc);f#if0?PsyBnrmsZuwk(8k1LHuSaY% zzcyq}S6*lTn{DXZe|5U_CL*k$8K<6&e1Y)d&0VdGB|RhD0rr^N!R2%iKv^{|HpZ7R ze5uJZ@pn8*v>_O9$0E9qM%CqkB~a*#-&bN-UWdFpN$@HMwoXI#OTMNg_-?C{jjvD3e**)%M}=eh!xaNHKKiy_G*l1hV28GzM@!PO zC|5a#komQydKX#IEEIrDs*~%7mpG@Lx&pNrljt3xfld}cX7E%=J=c{1T#ROg@5R2L zf8PDOp^%dGU!(H?$+KrAKJ`JfjA`1lUnWz1tETuo_;ag~Jd2FoFuT-C5{jErhYZ)4j);uZ2d zq`yEH6{pDgxY;SCqb(ywA9efi(88hTxKHhCJci?4V{JTc_N;>HDLQ6_(D=|VJRikN zWm`w)%UjKZchS~{=giw_3b^Ijtei#wo@rS78^b}0C7M+~)rw?A;zCBtPb92x_;)O6 zqq{Ww_nuWYTDvl`ZwCk4RCdzAJnBZzzrT8PBJ3(%nP5Kdq&7GH>`(Om({=CZ@CJO_ z(uH5%)d-{!hv4CykK-x0G|*f3u{IxL%x^sWDovR=dUJrTIxud#mwl2fU3ENoHaPc( z222el_1ZwaHT$|1it|1BeZrN@DNX+7%q^q?I>3-juwD14NLQLi=Pmr>eZWRj@dy02 zoD#7Ho*DRHo2zq-^!YjQ>QrC+PRbi{;KiE~TSc8k?-;pn8w)P?HcI|8FgN}Hpg`bK zw6)S4*)77tpjlh+FVs6(>u!TOhgD;8L7B+?z84#I&auseF{7JIGekaW>qBJe;a_Cw zGI$%#Ut>C>A4~(KSP|L^mNs+rV zH_=Cvt*-cdCWFXmgYf#e>_&S)~`!IpthR|=TJ7T`Wh zogJHVC2>)+@tGholYH%f#(e27PZ79si2fmqfBDE&eu}cxU%+Q#Xl_uY=N$Wg{%>b1 literal 0 HcmV?d00001 diff --git a/demo/web-desktop/assets/common/native/39/398d85b3-4934-44c0-8d8e-3812b99f015e.2eb47.png b/demo/web-desktop/assets/common/native/39/398d85b3-4934-44c0-8d8e-3812b99f015e.2eb47.png new file mode 100644 index 0000000000000000000000000000000000000000..1a3ad88fc3572c24af8bc54f6bb92e3aaa910cee GIT binary patch literal 285630 zcmV(}K+wO5P)Q&wSWZg^W>Xn=)}TVQKnWN$}FQ;3e4Ra#`%+Tn$Z zmQhq*)Y#v2c!8FirFnjcVrX&>3J5nWC@mx*f`^iXiIYxJT#AvLGbSQ^f{oeSMHw zLPSiLo~Wawtg*7XuCBFOMLSkXNQZN1-r?w&m!64?l)b*jou#myo1wP0y_=t?UQ<)4 zs zkcX0vm7SHDZ)IvXI6=R-y1T^9YGG%MgoLuBop@$nvbw`mOHQ`G$gZTMshN>yRZXq7 zzq+ogi+OQ%ZE=EpgL`XbjfRYYZf2*VrM0M}wym?Ci-1x)FvGsUaA|O*ouIXvh=6Kd zSWs2c%gM^a!*5wkE-NrEF*->$EU}-JW>7=HwXlnJYstO0ysDslV^uI87pSpU3Y<9IS zGB?vV3QG1E--`HZ!VC-q8bm925TcAEZ(|vGOEL(WTo~12X}5?_@zy5cle31 zG{#v^?Tz;O)ZVu{D_P3ywwou;>0-v5ls4qZ&9a2CSa%4h_Vl`)J^U;r5jYSRG={^j zGFpaiPOlt9ZrTt;Y5^pg07xZrVKxC064|QCV-L5HsXVq6NgoT6k?zAwbgb!!6Bj5O zO@ICS0fB~{L5M-Xn}hfc!Wg`yFb>) z07*7}4PLt7yVV1C-3!C9wWc-okqQL36B_whws~>ceHKUtk_7X{oJ>Lo7&@F;?8qI+M3aK3 z|Me1h9OGCda{TY?)0I2yIexH7ENMOpy6A(JTtXwfb=_mv%+<;HqpoT_qm_y5WC{s^ z6qnt(*`X_c&;=Z`1jiIo#ZgSdO#I6;L!N_RoLe2m*^Lmn@YBq}Z3I%Ec{rJXDS*Il zV;~>}0vS<>a4|`0z$AcnqVt4iEaQ_i8UP7-6orIWYH@3Hg1+2!gTOk2+Bk>e9|I1X zxCD?$Y8Xc+@;?cX4j(_G(JgwWF(d*=>iqk%e}(W^(Mi5cAE(vG1tv0L((iDubkM}hJ`rJ*KmYE9|Oy2>|v;huw~g_l(Xy}aVJRLqKA%e*;9GU9X81HXNxY6 zC&6H3^YVKeCfdzlCN%b~_qNY8$`|Z5LJ~A$P$p8lC2$#=#&vMt$ho0(ppu3mdBD-0 z@YRr2(4J-3fYCg*{`>oRirrBj1u|+8LUtHOXk*!gMC$4|;&sK)4G7k)M;CzXjDaM} zk{V841Unl92=?p}-(MzE8HCc8LP@|W3{smB2~4xv4=}7)_3Ks+DzXSB`7$7v0Azxs zaapQOMkw+%wYlRDLjtE!p7jzWy)*PofD{}BN$IrZ!Sq%H5Kh{MVc6D8BSg{)+00{I zAq%7deRL(mH_OrFSRm)KT5HEu5)>vhs@q9Sag_YVH8Cf#eh+a(ms?l_TAC#cisq=q zL;^~~%Lb_m!apa8P;&$ci$j&j%wxlhP4L+DRHjiT=bBDoh+$A zCf$ZE%9uwr93y!&I;oN3IWyT(1Y_^580t$_64w#t7?P5?Yb5e*u$j@=Nr}`3G*(OH z&`G*fpwhae$CLmv@!*!`q!dCsfh3qj2~tA?HAIlW5eYW@br?jt&xXw@mCBkm-B!2E zqVqT@YW(TWx@TR_HB!oueXWaE%09*)2n@Ogg>(o#!nMx+S&XAvw-8s3k(-0l$y_%S zk{**>H@==2g38Jir^%ugEXO46opH=@<`HY%;QODWUP?h`pbwOp^$E# zUjs)F$ru0oxUf)i*&Uy!N!&Idtm0_S%$!{bM7>~XM%^rwP{;(xJE=mpjlPh{b|lNu zZNXF>70+a{Ns&b6O%IpJuKMmMDi25ml01&lf)g(?*kSrAIgbBq$NCr>vTYEV7J?!$ zW1!%QV}(S7iFW*DSP(xhfycrWb{}&z5J)95&T8VN6m@4U{u*^gn0db{i#_x`?J%~1 z4v}TE%a$@^ed-V_W*sdH0qXtheY90>rW%_GU;*Xu~a7D^>^ zX2PK;=Qq&E#CP*ESI8)%!57Cv``eIU7X%XN3>A?7Y45L+DJcNwej?(DWu2AR88XVgvOXkRAzaE_f)Vf zI&A=`ec4Cj>vbL%8oV|?`I3Cwoo521bw!J##Yip9B1&rlnUx^1ph7$b40DF&o?RsY zBoIuN`Q#OG{QO|%0|nHILuL}Gv7ruP^~BVnyX>VY6f$A6XLrUn1hQ;%sG9PmP4F+0 z@7AYqEX$UO9?QG^eXWF%Y+$VxLSk6K(Se*uq(+hqp^{m4+};&*GL%0g(}*iEdmXLu zDJ+64Dr9Ftc!Z@{wXo?o1}L;J7|!d(Bcl;NzZ^$-Rl~QcIf~Zl)l2G-ttyb1I_x2c z44Lzx3Z&JX^uA_6_^TBJYnjNN66rytPVV?rqOj;HS(vb)tKzWnN@o&}v({REm%|&cV~@GERGdXA)dF+14ysjnILMX z8AKICm&M+V-VMHP=s=%=NcMcdKlKKM6t~|~Ii%q{jp-$A`31xQ8b(@QPrL<5Zr$jm zcJGE0X*`kzd5)o|U0EdItt(EtV+ztx`hi&1mjThGNX9g#zT4`Pc})^p2!#w^LP6cl z{x-~C*QRI)$Az>434P>;_CDYqPFnQAXiS$mB8>)-&AD_>oi!8KQy$rLs2~cod?%(! z%`AY-3gbOhNP94Z3D-RYtYENi(0)}%88DIbEyb%s;laCR9lc6OiYbtsbjz^A5696g zgtb$Ea=cirKD{lS#*oUT8V?qWj+-6{l0XnKr1v40Zk0U?0J1twBRD1osTB7;A-{IX z@DMAW^2qCmDU2BQggr66u@}`;F9jRVvL`6yyeQOeB>IR+%aBWD z$)Mvl2_r)s#~HTBV|^D5J&Fp+U?OuXN3%e?40xUMq>4s`uFs zr1OS|b(l!dXhWqkcFxH%Gx%y`4K)+0Z+X^jV>xIbfSRp@)fHWpss)>rA zu*tXc!GkYWOsxe?m2o2|k@{9hByt-tiMP*#^c={JC?Z{`P4+=&wj+mqIS=rP(}Qlm175>TlQ1gD*D#Bn8zau~k=WMBeg3?#m9|Mz#&wc^PRhSYOI5fMb$odem* z%ii;opj0gNMtC$ZeT+L3(i_}OrI1$5)LN1UlfaS8sB9~k1|oi$;H$BaTxV{uHxWe6 z7?DwAV{fBgovKL6#hPe5I-aD88NXoE2a!l3js%g~!)G&-bTO1*Q53Q|gA@5|zLLp8 zK$;7rN^m`X#J|6=^30pUydf|oGmqs1?2GYwid}4tizhT(^mL}J$&9}+mQHclG!*x% z3b`l+?6T2GU2#!umLHl-`I0mLRd3Z=)!gSe(b_K>9Zu{rh8=4T+4BnJyCS2ur<( z%Z8L-u6TOuDR=PQK#@DgQ;<@H1dwHgR1BjuTVVEk86n3(+*_q_&R7(o^gLT)7kKT^ z%xT-hf8nRLe#000Mr44aJ{`rF%cZCUglTPOQYZKHs>hM;mcvxW67UpAEb%EjLTD=&H&5YtnLqgFh?dY zP%AUrIC~{9&aWzo!fB`E)W>wEVP9<0 zT(+xXfMtEJb-0R0BuA|+h7Me^F=lQAYO}e|p6Ig8X}1))kV^L9WD%ropVn+PEA>!^ zW#r5r--)j#B26PC6lU zIg{ETslkHrJgL#*;<(1+17p)dO83yHIx3%dDM_+zr6-f9u7h5Zo-cFTg`?nFND|qm zq%qQqdZJyJ+t!xNg>usIRCXr@9BVvslbXH`8XGbitObF~E=|>-)RUaGm*JSNqj0|* z8S-fwM`?Dn5?9Ea+T_2jmVHbjCCgTMq=EF&EKOUzIT(c1g%V5a)H&Gu;{5S|Ifq7; z5^hXFOqXVNo3re)&z`l09+^BXMSBx{03Ihql4S#oX?|TM5&@*n+;blh89Qrf;B{a; z#>6#}P|z5f(FjvS@j5p@g~b_DNVx2!2}z9ykvfW#9IN!SO$h5*OtkaM1QH7@Vjn_g zsSVxXFt}JF&8DtJcIzbSQ+WiHMq#Lt($>s)1d@m&i*t!JiNsp7y2H-%8b2^bx@^4< z(m}8Y7;76@G2IdyqDBoZ0jc!%=rvN9x^Yix`V3^IkV2%_A$_`7B)yTq708j=Aj5VuiFz zvuw{~P!N|Je^leeRxP0kR{Mky^4M>*&M$w)sI)Gq{UqBF(Umir8oSP8rSyZ*6sJoX zkX|E4&Yi8@E#v4%1?4NmD?|pRA20eW`x;&+E8WGXRYvH+=Z7Hzw%gNLNT#)0~ zoft88r;8%6KQ)K#zf^3$xUvBe8z|@@`%M}V6qdLsUuyG$FkY!qMn;n ztX@fsa}HO&(CJ*7Vp^!-(k~nlX9mu5j5>>ik*nIqyx(#cQX2YZ& zsTKUOW0%H&jJ$S&o>_WGY*kxH<%T|0~q7t z4o0#iT)tc1$!(`}b=^=Rk3lS05^2_*cBhfb#?KfLbi!I>wFrdWvc_W3;IMNG!dzVl zTC9slMaW9+alR~&%|I4X9JC;iFL-U-xS{ORj|<~SvsEFr7%rU-)R;{5;bxi3ZYAod zZL|~;i=ImJg!~5eSmk>yvM!f=P>ZA|?5C}(sPl-0k#&vCm;cnIvTPHIk}jNqm2w&w zR*RO@M&z9++&aQ($8kl5a z&X6vwzV(sz&1UZse6q=5n~9{aYh>QZ&NpmaKY5x-tCMcv_ znV}+{JM4-;Cg)#TUIT#yh|)qK>GJ7YZ9rt^p!vc?HRRAYCrra6R1$15iFPjo?90{| zG6B*QGTlTIcIhHwmq=i!g9#i0NN=E$%nyf>j3m8i_~}~?XI+!PzC8OmlnrLfWw4ia zLB^egP@q@?vT8zET$RLdx>;-((i!OrX9OV0&QE8~HWc=99_gWq<}dtI^9m1J)S*c3 z3fV5jkl;~(gt06pk9KNs0Br5?`H;~AuN1iikc#A7`{oS^cNZ8ykpYj@ojD2S6CBa^ z6DFfaWMC#B&Y*t-r-6~FBm~<-xk;pv8zad?OpuLngy)6fD}I4c#V`Ik6jJtOH!CEF6bFt?HL=U~ z{R$4HcGD{)!b$(VRzhT}%{(XCl7yK=3Y|WU%f$JgCu_{Qt9S}}P{u$n1BukO!BQA; zlkaS(`D^@_4H2Y=7Nv#aX6XkZMO$3OVj966n2|88Q5lQn#;OGhX&-esr9zs=j>Xc; zJ>0g!Ova!5Xi!MRkAMw0r3Yi+t`R86t0h*odv~SL|{irti z0mysJcnUQJQ5aK#v)p;3E&2NJyo-K8Ae#e8Sf-Hh*woc+af%2MX1_Refk=f>A=D=3 z(Muz0!NGYmilZ`RcshZKtgnU8VU|0GBu>Mlr#x{|qdey8Atzf<6G!N%p@|RcF{H9; zAevz;JgP`8ki4|ogkx7zhJK%(DrV|l4J}hfGU-zcfnZf9<-@;>Kzzo7yqxd|k!;2> zp1i4VZm7HLN`{Tk+Vo$fB&C5uVl{xK*cM-fXGFO`GF0r6X7qtw22m|iL552Pie{5o zyh#tfKxLqi{KmP*hC<4t5y&v9X>nT39nKGIO|Ou}-NBB@?9vyreV#L1B)8^29XTyU zM>;PE6l+zVZlaKRp$KV=yMA9mV+si%r>T+K1Nso4=6m3+ zb#e6=MQMU$Lk1377Fzm>AONXNTMNh#5$<{JR8u259RtWYCw2C{BgY*D4M z3CJMF&Jwxg{6~c8G)@y4ZnOhm(7bGtP~kD_6|3N46M@7-ZWACE0i+q$L)J~j9)~&S z2LjY%NVGsPrIUHo>L2q*-{70a_wO&#{^d9KAJga!b@UYhQs6Tylp>K-*O8ojzGP_8 z-IPR@%0CmsN8z;zNLW^D?IzXm@cs1(4COJ(uN^qPdZ^Bj=MJhoB99W2iO+_pCJQEN zF!EDa6d1M1vh29(lPY98z%bc*Ceuw|k|ER14A{Zq7v~C0&Z$6}Pv*iDe^~09H^kw$ zZ{9pUJ3AvJA3r)fYjyjilwG11OeUg;dssK~))UW{#Bt@y0dSyUqt~uDZ4g;NvXRGy z7|7JZUD(;?e|Km&JFf>DZ#IzDF8FLVB1et?20#dH)MpA|aBC)Gx)eySLl$C4>^htz zk5EYDG@fe1Yv&4?Gn$=GXeqXRxI9ZZe|ulP`Q81;_kaECyZ6@C?mc<(V0C3>W%Y72 znsKog3nRi*CDBcJz9j2&y5Og;Bfh2wGB?DFIgRxU8wRZ|%ne{gZW^Oo8C-gcyP%NJ zwVslw)(cH&bkN)FOcl9p%4yuj3TZ3G8Av2G%wt2A4IJY-BsX#BC{~}#Mw5AKgyG2^ z-7o*~+u#4@?stFs?#1ohtE=7JjqUC2{fC>I=l}BafBKI<v9X6goiD?v&HJVc9StA)e ztlI&dA%8BBeg#JNh#|)wI|H&I%MK1Rz-maR&_=3;jS2}4F@kXoQhEH6?03Ka&38ZC zzJ2@Z!|?jqTeX)jUp~9|AOG!t{`Wup{AY|Ll1=S$E1wonK3}qFxh`WdJ&ie$d1iy7 zp(CsEm~W%;=^4b18IUR&2))M6IF>ajL&6Nlxp8FE=`xToqnJCesK(?8da2?6rI7$; z4u5i%-G=AJCxQrYX}X;&WV!BxZQAB+7)TaK`qqfYe`Xv%yk>j<_T9&ie&oYH_}z8cSnR4u{+B=V^8`l!dH2!4UQEMum)P;z?bL%}e5W zd1Jgq=(`q5DDdy6tr7wm5ry7udv>1|YiaI1L+k4o; zlHFJ$8kL|C2rH1?O-@SWzw7s)BYPWC} zc@AI|)#!Xh>cqezAcQsSjBVCQRYGS`$9$9GSl36dKEiBKZc!jrATV7BW1=!3y#Q(Z z@wn^u#hu!D=!<;-33-f=Y_PEG)6RfwcG=)CnW=#RL1)sHGPjIINF=dHokY08`9?%hXX(P)(B$G?7jyJtvtThpDh0-21?S5(~rh|)k6W#nC55gkGw z<_1yZ*7$@#!pa3m{qkcN6r5=-QbZqtPW@%RA@i>&t6TzWVjAzWhf9 zlAQKpzbim`NgOtvKq|OoC_{D_NYuqaBzF=+8jsa%+YK^_zWmYdxk6?MjyzoK2}_$ZZ%qCdEit z!zx|iSQJR-kc@9?%Y66&^IS^xFTtMMgKQe zm)8kJde13NB71*5{6KH+-AClO1;~y935AUG5fXWe9wi*9Wss565RjQdn#*QuS?cdR zP9hScTqN^aId@f?^EKl#js50yd1H9ZKKgoZxc5xD;b3sYL^6#R0_NM7Z%HH7ZNGng zwfx|eL=t82Cd2uPTJtG=-Z6kwE*dO$);W>^hhom=bSX_JkKBO9++QPdls?)#V{03s zkO(73mn&N*^v-`0`$+aqnA}}oBbEH}+ojnMNC(l{swn!v{k4X#y&%b^_u#XFLJE+| zeY~wFciVNd;-q5feG7}pxhwl@pPin)fB(rLy)8r?d+hB!X7Fh5_;~L^#PRdbFOK&1 zj#w_K81y4+N_X=6YCK&3_lfi#qHZ8Cc?W-$dB}fQi%Rhh!i9bc9)<0=67!Zq}orZ_PD?H$(?ox zB$8}5D5U%Nndtn#&}txRW3A1f0!&YJ7}tWyT1fsuJU)A{e7JRWazeo)N#nux#`d1- z;>E?w=bx)x?ClYxgycIy@<$=^{cv}O>f}{2`&i z3ki*3PGe^K&;rw?JuQBOChu>UTBnOCd@G@+7EaXa%K8Sq<%FZb`1enL|MZR?Zwblk z;l}#CukOF0g?|Pl>X1G+h^8cwA^AAA0%b@5iJV4(6p7?#6itRUK^&{wWLrS8lxC~P z=5*`+qbJK-MB~8;*|TSR!~Kno?c<{h#*o#K1@iOf7Z*qDz$w(>lDQFieXvCppsrX| z7-9HO4FwPkVn9Ry$7zE|a0zo&#CfJsJPDKkK06RnVT8*b&ljfpIG&!!aKvmO8MQ)& z-QFCnE}w54TyxQvffO9y^26=fkUY>=_W@++vnOZQ?$f2yWXOpOfvm@n2q}83l5W5e zM3$ihjG!{ibjk|J0VMrs9-rM?zdE1{kBHnj*xMWIZ*OnxAHVwZg-RoJ7lbDP`HX-h zyJjL8$WJVi%d2NPanp3l3QMCe$Tb$F#W1mH=L)F>l?juEq&*>)k(DP5Mb7hcaw8o5 z{SA_9Xd{3W6Jg_98vK%cwcu#6GuG+`9MZem|Pdp6ss$LM*Zn!v^iPC)w#l zji87a5;$URQ=dr;NrUMO36AvT>_!xFf%f6uKV5rzazI8vUTtj*j`xlS`}_OH$FGi# zF36b5S9HTf5|G0oWj${{ihX+bez<+UI->cmY0?_|5jT~?r{CeFIF)l6ly|bDa+9JD zJvXHsHQAli#=0&OOI>P$On%|Aj8>1p{*{F zMkDM-ppae{k3TFM3aJK#6etlys`s9dW;aBZ1YvdD?!dI%aAX*%CIiyUnP zU#*5=F{8ofk^WFikKB5IM* zUz!VK&Lm(2R1PFUNSUa~V@O|Ik^dEW!tKtWiXb{zuq_dBWCA2j8x9z0U?zfi%X4 z=_aoTr%g^_lu!hCuWtZLIn)rjmr&m`5 z8brzrr5_z?>Q^xcNj28}6@oX-5yAO3A1b#TH_cq9Vl z8j?hEggzJ?unmbw2_siWN@M~gAdJQtk7NKcb=lxi+;+uftMzzl&N+a<|`$i5}Bv~Ven=6zvMlmGVOC_=(Y|^xYoW_9s zB8?$Y7_T43(vuMz%H`B1T$UG6(i0MCy$9lAD&LPD-6fBGLT|@#u)VRt3ON`YONRZ5 zIu%PUL=utTzdSmoMdRyR+w^DX?K{}G8eWfyTsx%|XzrOuIcFcBgOnwqUVqaH%k_ID)W1~W%;g+vPt1lJDydetW`TR8$lA0Qj zn%|=4L-W=of@?e_9%v`RlU!BMX5z4Gz z(@N+QsEU$ zEpGU_RR^;EiB7qdYehJwd<^8-y~B0NuGe?DAkNNWbA9K0^Pv&Bd49e_w=9?Y1meS^ zm!BUEcw6lLF$I=`-SwxtC&Tw|IYy_|KZm>l%weP^6G(y5XiO##0cgK;-uMIqkc(h+ zT1#<+h1pEOTl=CvVG}@NQEup~sV5w1a^~s-@kqw#*VcA6AMO*6-;nnvkz_#me&c*+Yd~Uobo`JQJt87G4LUiv z=IJgX^7`cI+T~d;kuY_H!e!A%Lo>Ywo~Uj+$I`DSSi`5(nF-N2N$_@i}-D zBJnxG>A|=&#-jqsJl?+j^oj$;gY6UE{C=>{?ci98YvQl=CAlFWFUJ+}nPh%YTbD>D z67mR}K^f9qw({sn4Xi~ll0@DV82zdPiBYbRlOoEvTB$_JT4e(A>DHDwZ5F?s<>i$X zCX!@P!bs9cLUNyw+}zpO+~*|cc=LS!6-%Tz8LCeRk+Nh8M3&AKCnWj8`doBiGSkN? zUAEzfGSEaQCmx;B!J&Kj0BpxmfrJ6bxbibI7DzH$OL3cdBo;*;iO1V4kV6qjjUZ{c zA5YdQko&?TE9B<#>d55LNOXxD$(_9bg;X5%QXA35I2w@Yu@zua6q0FFk>tOb+9Hx* zF|!=P=B*I&n?3W(m7Vq5Pf6zpNOBhsHz+=20C$*3s{as?B#}boCQIZwiRIwpYa;R? zEe9g+O_F-T6*JBpd8x(5&gvO^>zqiOujpG2^XgCee8}29hQ$;}ybhr(8N_jMqQlm} zqkJ3y_Qtof$cTrQb-LG@SzUf=+ufPRr%#DTuKp5^n$YYKi!jO^8Akva=hM-_kNPzz zX8M6%r|h$ny7(dv_5q8=BfIPwdD!~)nVSiby$DF04~V22HZ_vWyUDZs8ymaCq)cJ+n?X#Hb7l&OKX%*$9+MwmeXzQAzPUkPXOa91Rm;V>9PKHP zx>n#l5xGotTpVAXP94fsIfM_EA~})ACB@4x%byV`PVKf4K<4@g^B6pH)$-w%MkEU( zbD{Sm&aXchjg-yYe({0@Qh;Rm97obcDY|V_NA))=1)ZxxMn~&mQ8##mLXMb4?h_!9 z)1)rjsC0#7Bz30+h^!ZYz-A@Uu4OfR1x~wtb7hA-^~niqBn=oyRz$D(h^rPnH#c_( z$Olx`<@`oO^7&tAF7b#%aLNeDX^Yo>N4fTJcjeS~eDed=ubdAF0FiGeU`_?3^9LGB z7Smef5i|xo&SA39%M~z(u-$Vsb#{hs!6Uot4sJHGA=!vX zGOhgxkkCi($VU2hAoyIMXDAoDDYc&A$`AfSK-;| z=yL6l{WT}o;E`~2AjwbfiE|=5C)1(^LCG3ha^Tv?^r z*M~$Z{hqF_tuE7zCf=I^n%jO!+rXaj1owvIHdg&vzdXZ7Gvz===R=AVI0cbqj~(xMg~JAtP{k;IbdQaaIPrLPx=K81{gHVjcm2Z)4Iha|nJ{GYD2a@D zG$1Lf+1?PB4HAPj6sm`#;1uyJxEm3SVy8ugGz`Hbk{b5e#w6KfCJP=r`g93In2}<( z!#I+P|EoK@8&@omSG!w>#Mtr*9Z$-+%lR@HXVw%wu3TQOa?U+aB-fZo;dE_hj{~0z zUIetivCBm@0#b;i#c1?@K=~(Qa>4E$zYg`;`H`7m)^eI9U^u;HJf>^TppUV`p7#Su zqU(vpKUsa_`%xY(}>3xhmv0pC7}`1(9vO}OH3zk1W5DLkxGutUn`Cydyy_j z5#E}HRfWXbicleyN$_}+ZzpLaLWD>nqr<4(!sSBYZ}x~by|Fy9M$)u26S?~2k^@EJ z?efXx3RAhmz zG-+^px=J_8mv_IqOLGs$w0&EMj3PAf@n56KLsNFdysU#xT z)>b!Pj*jerG*knM+jWnv^I7mHgbt;p}dN>0%WlQi9iy9iQ-Tte8h|) zS+;-1uW*5QxRqYH94q8#boSL(fBJzOHYz@}ZAslVzw=bYW#|M##_?Q;q>WDYpX}ET$JA`9w(pa)akl z=^ssR3uk!CtCy#0m!nf*lf5-*qu78KNlF^NNq>@ve6mVD{pk6#!5$s7!V4r1Y_rYv z$?dfVqi(;eP#T#HIHvb(c0MD(ob3}m36M)kq7$oQESlVwOX6A}O#{e89_;|1a8sA3 zl5OQuN*PMR>D{~E{r2|X$YC>#gd>@Hq!Tt9-KZ{ru6*i`moO?&2tN!k--pT;|<mvc;|{BHipc(V8fsX8XSX%WPm{ocrh?xE?~kL;06OU z9?>(w21EqBlzPRIW`g+2^q~a)rLTVNE9FWRUeq#7+%}hz&N*bVzhL0 z4~(p@4-fRqob7%B$)!#QFAt$%x74Oes6E#@X$&gEMu_sV##zJBONRnp7R!-WXC*S8 z&3Hl+c+A=w?sJ^Lpr_cz>L!o>_2kLZr%&&w>1<;HNrlt~R54db5e5(mBmKw3U+ z0%=Va&ZuS9j-q~LK<@XELjXy0C}S@BKtv-$Nz#Xlva2L5HjZOvd>Wz$4jw!pxBAcw zNCwTFok+1edr}ZZWYz|x)+EhDB3T2{E}&_QW79?ky8G}zG4{H=zKrF7h6&`d5qV=W zb&1`PDv@C*QH~tzrR65nvK^nC=qBS}&z!j(ao0v~P97b|$a40Pm86_Un#-lnX;L1q zULue1*3KiFDmd4ev65GP1}w{_DUmP(vU@TCq_>^vkxY5rl4YN*Q6L@0Ado*UI6xNN zOe^{JQEl7rA&I5u+r|2F!@W2XUSODjS#m&py1MLb1d;|GF-$W9B1Iy5dwUjAsfASU zB0waG%A$le@JK&8dxz(i`?;IBvYfEYvM<@ehT^i#6mCCOlTc=EcAxGHsbBHzLE>YqX^` zq>Ji_U}4Or)q#u?=~PDDr_aKc-d-!2%qRkVh>I6oFS8RFn!{$*+VrqhxJY8 z=1d_uQpQp3tq8{yNt_f&o_X~VW8pBSqR&`yK+d3vcM2xnK=S#R3_a;mSxRIy9z%l0 zs6g6Ct=#&cgL`u2aZ-4s%O;QYwE21RD4=Q2+2(>ZFuH9O$xtJY0$J=lhPPMAV+v_R zDv;7x6VI}h#~_V-xk8FOCQ-EUZ6cYlXL;^SxwIjJ@XWMObYS-jCFx=`)gzQ?)j>mL zjINmm8haN}flwk@{b85S2-0gU0LdTgVLgb|pw0od{ET$<&tfqFNF?^6lSN=bULs*z!;Kww!7hTwOJ8#+%PK&J%=T?)y%$PO0v~VOK1+H(uucP0qS8| z4*xF*qyc&RHh_e;X8)-G*>C!2-nwmCaBOplRF@r3Y8*dbEFcp|?>CckI1ET{hcty$ z6!k4YGO0OmfNv6MuLzi#9y?=s)VxrVJ*QKx*s4Ig_c4=hY3+hUDvr-)YO+zTf^lCg#)N+cKM{|VL;Uf}=VE)WTi-9jXpV5dYN7kI{(AW~g8_#9wr zZGlc7o*9yDtZ53(1d$!XvXta9j6^OIO!kmVyYAn>X-kqyk#s9{xwN-=bbe3GnT!>N z_RERJD}c1GLWj`z12Q3y5ohf@CV|v0Q%zyi%wcP98mDsJF(98Z$5w|u4<0)O$JRb; zzqK?5D8eT(Od^wGc(|5lX9d!8+r-cz4jn9X7@ba-1DQ}r-nl}WEb@ky7)*>MS#rt; zBhwkZBrBHG^FxUK(2OU81sJG-@wt#l@(5Wx1g!+7LTV4_oLTHZA;`N@IBvrx-RYj5 z0rZYTAkjoFJBa{DQOLhayY3d*^@=T+_QQ5_9BF@cP%)MbWIOPrDx1= z3_y0^g8(Gzya*u+V>mj8rjdD9mB`(G_K&d;5H*->Pa-*@3LZP~XclOYMIn;5fJ#uPQ6kc2DF_z=X^W)IcFoMt`wW*s7>8-sD3rG3 z+~Ca30x;!UEE<(|HU`~S6nii}0}C|LR36Er*dlF=hDWR(o6Y(TWV{d=88tD5w8=C) z{H;9}uw?rgIpje!1CUOk0*PyW9`n-Z6-h@?Kc-3d8E089qh5L=UaKMC72fA3u1$k~DaSCq|YF$6w6woYHA7?VWq7vj&7j^V`Ga9*V@qy^-NTec9#M05?c6z;>biYQJOfD0xeZ81a)02Cm!!Ye zbEMrPd&gPkQk(w#67iMHEw;h5Wn2V)Gm z%>?aJ*{c>G_r0McZYG6S;fP1SFWrh zex&uIO`k+^))zO}ri73u<1)X2xj3T9G9_b3p~=eI$xR;O%MB=ti3tlV_#}bEk(lcm zGYTc;hue=MQ|un;e<;o27C8e)AuHh18Fg&yxnEH)AoTIx9mIF!Jdapi^J7vZ!2Hu zV0cX;A%UD&IM%BbAEw#NVQ4t_E?P;FhELeCiwR#0Dp3mpkgAaQ#a|m3DO(4TK$1I% z3?qtkBK3iQM-YjVh@_qT;&(J(Dl{{~+=_3|aHk|1kYrPE%x;P3k>(jT=}*pCupvXw zXsj96jiX;WC<14A^=8i`Ca9~&hJ8LbDLvwM(ECUp6-dPqhd7$XwWXyA7?329V-m#o zSnqguAAQ%ZbUNoYU0M9MT9U{xcIYnKvl?7t3h6|O;Zp24=E!PrJRg)HDa2j6yjKJ= z5Sdz7oSvS-!yt~t4*NHwaU7dCm(zWZ@j<0hIB)7jkeVs%i(RL!sZx#n2b?Am*I)gbRl4-9Tv}ln?7~;i&3~EQxlIu^J>-Nv6slsur zMcge~@!_FyxGx%F+5;e|`=6!m=wvS7$OIb~;gLAnasWc38gAHC0RxUW1js4rX4$NZ zgGYpr!DSccNoxHYS-!7P?si|=C$lo1(`8$}9k(oUZ8togLnOoTlk~!3sLslWG)HR2 z8r$0}h&%)wum16me-I*jr{Gtn`!w1%lfTj12Z7|CO7zzw!??p>%@q)NW$xPWFa{AH z3XmjH7CCedRf{4L8U3JCf%H6Fg;L*{88`3~o*YOJnU%(bZO!o5*(1n!)0r*E;I7(! z(mF}$vzpF90n*yTai*~inmp=~0IY@6rb#4uq`#)eZf6uZZE1}XNt1QMaSTYpWdleU z$FUa{+Zr2})*7cJ`d%{|>0`4l+NP$pT*j|h9WR4KLL))swdJn^k+MxEqw3PYWV|S8 z_nBx)QWL2VS*0*iqy&8)Q#zBlOYX+)t{N}F(M@SAjhB491SyN+YMU8(wAt4@!lb$K zmPuKjLUL=6C_q*QAZ_8EP&X4GmlQ^bBWY{^tV|@CeM@0n8qrb!GM!r>?aSaZ3?x>iCqMHYaR+p5QE2b7LgJs({j`|og(MKDn@lGG%5&jw*Un`K( z87`Ga0di88vTyZCTm*7jc$`?O#jCxsVH!A+Ntku%vO!n+regxBBBU1m+zxZtyxNUt z+1q^t&p%pqP-1A0!W`5`P^nej_Asm;(>eFPyw52Xx{*m--xu9;B137^6Pk?8uldT{@sD`g4gL`Pb?O4D3b2Rju@y*J zw|TOg7I<7Fk20>H@<@X`^6}C_OQgAM_MoP7@3rY9_?_QJ+^3BtaRXq_X>jBK(k(4M zJKnXMc9DFpUW;6`rUl4h^(1@%GJb{hWeQB<@hmdaMusi&*ue4_zB|>3;Co{NW*Uig z(Fij;$pIy2+;DiIe|i1>y?giP`ehQLtglNV(fDIH60ri8MZX#mo@GagMM@OnNEJ^5 zGW+@%fxMS^XXfiu=GmIvOOWQWC7X$_PJ_3tltdmMl1A8*5IvGc7+{2{r&c45fk#pZ zfh3SdWSbJ%X+Rck%WsZGuB~fiaMKm?$8iIj3773E8N)FRiA>_?vBUG31KC9&L8Qbr zKn?=QjJg+Yy0Kwwp}cpD!U&rhr+^}soM=WJd;;>w=Q+Z$*pL!oag{@K+nqf#-NSQ_ z@7=ri_}U;BAbr<*FJ+>pMJC2*Vd)7np8Hl5v>95N#48mQL$Qw>1aiq1YYB$XvMgh@1t6Zwxuy%8XP2{Rf6#-u_f9k*FpymodTdE~c>L`ud50A!F~ z1yZWudYY271}S&L6s-+U3k6$9Wqa+0h-0JWH|Qn>k^?%F!$p8nkVtlwch6EH@2z9% z;iT-+@Qs9#J%>Jt(P#WQicYLo(H%(Ys);7ArBqBXNHRUIaUwT!mypne-9NJesex*2 z)s&1m*b$@a;b09jMJ6G5IZ5osV@@-*Ub0kXNdnM?*S z8626TiU3*hOjjM($zuO1vbUEAWEw3YoS!UpXyQlM15~x=)M0y0s(in|k&XIJp z^(WnujgSr`UOr}K&I`Sc7cp1{?46V zp3exRtV0Tc1Wsaoi#o1PTO0?F<5bD1iMkUL?d`SACng%l7JA96weKym@uE*w4d5D7 zsf!mmO_6&wbi%s(bHjzm%;Z8Uo(Qz5Mm8E}i3$Q4jY7al0Yn_N1Nj-&vo>k?7kiwpL@9;^Ep zjsj#>b12jKUG@(EGA(O9(xzeTTUO!26B!?0TpTBm3k&08Z4*sRb#N^0Q@vwj0CmBJ zyFp|dAm;O37Q{^(pBj&xxPZo7<#A0+ z^$|3d$?$b8fSiCp5=cB^b=nfJcSM0q{P-P-igY0;p%p^c>`y8*ZoY^k#I#uCQTR(D znFB~LA6n8>A^AUqOSZ`M2PQSB>GauSlGbHSXAm4Jk%SL22|yca>rS1jYsXWfJSvgW zZci8~k-GAf%tP#?M545by+yibhv(Mk9zRCw&qJC_)#eWQH$PLyVG*NSv@4Cw#>zek zg#@nxWPAdSo7Ww2mlMeNZe2c1yD^ zdJLJ>97)&69EtYx+cp3>gIzUYDB-a5H3o?!jWp&qAQJM}z-&gI7>Bv>iAIo`ki%p1 zh3b#2MgxiL#GF{J$iN+AM_3_W2a#W11CvZ`faF8l+>|^f%vmf5E}M6OKW9}-K9>4e zg&dZMB*S9mEJbQE!y`&#bS4cBvB;K4QIG9J!e5u71@e%r*c^ItHGqUX-oAaiW*+Ox zamuS!d2oWEa@O2T44Xk=Fx(lCFmYMN41u)9cfaF@9)~T zZ&%^AEv3E{Yy`)U(zbRn~8MKd}_5!b)wf{}xt zV`pvLasTJ5s)x#8F0((vT5i;<8?7PU6Ev+GD4~yPI*r@kZtCL|$oMdJNNE&Ehf-f6 zkjSVC(0M-@av1@VS8><%x9e+$IH{`xKvEzDN0mdoSL&MZg2@K}Qiw!g8IYtUfmF=W z#v@}#3ZG+XSx&{K?-pgm_x6)E z>0Jwp+^>*CLLx!r6ieVjW8iVBfjmw$*EXCyR)m!ML@g?l0;z=GQm*V>ko=}Yh{X2f zed3<_2WDz&pplq<_!vZTNPFy;| zyS+wNf=r~?a?uV*j9@>^>^PfzGD&~UbyI5QQwSkBZjI)8?V^}aAV-^;n$FO06(UV6 zLtkX$$h2DD7=aASMFa)p3kDQv5Hyl#ZX0G76;u6VyLRo`21#dst`B8L1`hKoWZLg4 zm^zXDEGikT?f9+F*42duVn|{WuU2SbAdI;AfehA^Xw@R$lAuXll0ygra94s zoV(VFW+<6SJlQMDQqA=0dO+Cb3q)c}F@@!xM`o{~{6md|&z^iDUK>bu^mg@RAPO-{h3g-M30k6~S@9`J~m zMj!L6;z&^hj?N>@m?V(aJ3bPCJhrbetn_3OC8nAv=#W3YIAx0pJ^Yw)R2NKDQ z=;M&Ba@L6w5rX1mZvj9^DFA=y4e3fNe5UC@_}b zRagjh)UoXCP{>!ZDWvoGdV%wpG->=H?>y|C-6|r(NQN(CN8XzYcPuLiB$Mpn4I;^i zTgI;16vtlJv9X3)DTW_C+V&d8Y4F4t^PD+#rl}czoX?Lj(Z=*N0v*}nMmDd(kAOsC z>)4u0EnUOQtp0G8Hk>xAKi__fNb&~Tbrs0`F(fSFP@P5?febv#OU;249CPa<5C7K_ z9y_UzH0#JMWkKAwcO{RNl^{|!9v*_R+{3lu*2v?E0Ew^>zMAH)TGdjBv`Qq5G=fKz zKc*Iob`_@MMB+}N39+MR*_&bIu9AKGN+^y@tp!M%mTf?K5a~dY$kzenGr~t7t1-@U znF}Zx`5Ltd)i`p#>4-!z))$pqo z{z~KTuC+lW%XM7=TRd`&jX<3jFLq-B;x$0YJeyl#AdDoD*Sb2(KT87XV|Ga(y@Z}2 zk+L3!MS$jfRUtK8%)?`J;zB&7F&wi2sjK*umVQ!W^&TcN2IL(IWF>iQm1@t@#;nOB zuq2K&!;uCa&36MxJZ`pFuqjdp8mFhmi*|XE>lR=HZgvMm>`E9*cJJO@f~-9GqUh~sxfRmXPzE=}ck9cYx2~Wc z;SmkGeZ+>gv@t;<0Us4|)22u#Wm43UC&t}6w$OB{y1M!ZocAb@1bdtTR?dYa581-_ zSn;Q?1)2812wL1YkBl=yCnvdWh-&0u4+`W-1mjsY(QsLm!(Q?+unB`YJc3XrAoQ=2 zOj_YHqR?SCO&kdzZ49m$s~PGR*iX&Cqs?02BI4a$oPb?swz9&Lco~l#iKCkSvad9g z$Oi4cfGrWoeGW%FganR)q{fm0BU!|2cS#97y#rJ13hDj1j-yIs05Zq_B4bsW57n3q z=5DXB!+R_2OCIK`4M_Gwa#nR9QY4Z{5<|XN8Xqr5V`MvkME-X|&on;8Q`M(WpRPW# zdS!I9Y^hP_fY^Q_J;*Bs$R2#gI(b)r*M*jrJA+E(mqO&154(E~UCl3%=CdO%JM+3_ zQy~MBKSIk2g&#m`nVimghGz4P$E|X zkv#J;(jEoXhm zu8=g-LsP(KVrjW~{J#K)C)iOMVLSLY4$TZcG#=@! z^2ib4QGw)zNV4jqgE}K^V>y8=bfcTzUG(Og$KE832Q~Lj)T%?4{gRh`q8^(Dfdr6Q zVRR%9WYCzsPuF;h&m#9Jx~`9QL18=$WiP=9WFS%pYc#zo7p{V%@pwj497S>zL@sgO5^N3Y23Stx9LgK!FhUrQ?SZ}U=59@6(#dJ6 zVH&K=WB1Mq#nH@w{1JgHj824gD&q}kdd|J>l%8E0lY5C6lTsKD6FVkgVSWdJB$4c} zAdi||9|4GG-#dH!o$Bh-?=X5~1da@RVzjQTmW2v>ZJ0Ke4j`Cc>*7u~tsO0?n)5ZC zldYYt!Xq|{hDd%5BEP=YopO!LK_&=@0U7C-%mSoqVyRkgfeb(P;UhkdKT=?$*~ueVjFi9enncE6iqSSI#((=C5ryk$3n7H)9C7`(RdiJa|x9 zEGc^Pg}r-U-n-|8BGSmxq+85o%W5wuhJ`-yM3${C8$ddd4yC=_X+JB9G&gPFIh)C? zbsWfj0_3m)xiPU(yHVRtB+X}!^-5)2M!LWwbn)za?}13*Sak%|pJtROWh&xQ9fHW| z0d_ibT?KiDv_eD}^t6>a*o1f-8aa z^3V4LQvO8F^+`=3sfl)DYc`_+^3a7F;1NKoI`XVYa+wNSMqYcu8cHJ^n2MXmhJ+_jN!KGx=C1A1Wg*|&;e)*)(2v2P}j#wcr?J14M zkh+kH0x1k8S}Rl`3*#`F`HVxoJ|m@Z=(6q{Qjvk8z6*=S$GD^(14xFDByy=1K*DEB zlPGG60J65d7UAQms&|ebe~)(h^gC6|uIb0+Pd8vhk%{&cGHnKsv>6h)GK&FjcJ!={rUQ#A7N*Zng$@r)82nzuHo!o`{K!nmH`K*f|qc{_soMQ#g$XS^it z0!b8u?FjM3kN$YGWsp4n6&s(x#A(Z>9{>_OhAok#<|CyZ$m1&PNR?SN3>N{i&N?e> za*cJ8gGT^~5OS9jLB^rl*?5qG zB&?Z#gGjD$yoM6VS2;^R!&t_2K(|S|_`8~x7ED?ukY*(E@qa%4vMWns<7D7WO^S-5 z^P@4Oe$(b4`nES_E|)p0;z=OgoW_jbhy9^-KQ|UKfc=^RQjvjq+@18ezb1Wum4kN=n z8Bq)#JGMBaDx?RImeWun@ls0@!uZmBp$ju-N@Mx7yJ@^~z*vz1WE+9p&_M)3NtLW6 zkm9d<#}P>$9UuF+`3&MmDCFsPU^rD*<9$S`XC#tHHY|;rr8{-QxWE{vG zRUcPKV=_5b!+#W~XGf79I{GC+quYVqC)-Arppe4j2@pvr5l8CqVQ()dGa%1yYpy$0 zO%$cd^ZR$iB(I^r;rJoaLiSYwNfpVIOhFu2(`EVw&_#af*T1@msfd9`sECc(U=moz z&3LAr8^|5WIMSN7eH9kcXKV_PS%S&ZoGX;>fJv86)SO3=;6s(hV*nC7e)ZK|aoJqh zz6Aq^wv}^G$kqGR_aTWUkl@lJl1MVGLB(Q|NUmP0F(i^~^qz@C6_!vM_q_ZfV0>}! z3q>VNeMwky282h> z|7vaRtoi3lHL3YdC6W`CIf{sSB*RE^+DUJ%R1yaV(4n-iqConhKfy#C9mnvIyX;Ku zC5td$Fjv0_VMD35p#LF-88pVD0{N)^t4$z>XsMpgZt!S8;#dWa#$>gfgh!bCX7efX z8On-$(8#r*kdo6-8|kM%_~3&#UIvT@b^KbR$~cfD*pT!!CUiw-wpQd+$jzMQB>+ha z1Ll151Qt~x{a+W>pIQBhec=EmLdwG3CmXQMi~zX;Gb9P5jvq47E*fw67Zk!zA18*t zuloIwe?1~5)kyO@)hI|d%fnn+A(DtcnalKz;2$1Fft)M#wWexPL#g=|pvdm5`btP7 z2DeG%mjkI!5=0t=WHQ`4GnpE>g+ONZp9c_`bwAsbNCVx=@DY8~k7xoUev+^J^4~9Y z>J)6-R1@(daD>ageY;ZT(bNygKn)*lP)N*CueyJq5AHrO#FhTq3`9DTAQBQuBI$R~ z7`?9qetOS~KZU*V;+{844sJ%15J#L{BO|3679+zXn~btJJhtvl?1i6%$KGEM4@pHK zX`!Y>mn}{^H;nl;(@kA=(a}Z%DVZP*R}zV=Mu|L%9^Im;+A~#E&_f8MJhoFl+;!x% z+P!K7ly%KoSZ{7xX~bWa;`lHUO#DFRfMi!^Duq!S_Q70+)z1UWC(?}epO3F~l*gSm z0B|n(Ad{>rNDd_Uvs^pimKR4G$WHtwY!NESrhUW@q+s$2eq?|CV-42?@J(LfuMZz4 zkoAuqaUKn}>$-r=7Ib!q0y%mgrfD{WvWj2^4EaQ9t3-0eR$^eQ^b%co!`QK7$M(GV zv)BIiXCJ)$!tR4akp_=yPzD%rM1ZUaKnjmRAqymg1durt5&{_kl3Ys+Q0O?SKw1-f zY;taX^92L-{kZPP@w3N|gU2IH|MqW6qZQCFf(RVX zs-0$OlBM$Y6HR5Zm^-Q-D_5?R&5jIk8e(fFw<5oAdFT zG(}Pnc!?q7=0GZsN$zre;66LiDh>^HRfKI3HrYqWB|iUrsq%@nKyLB~qd-C(sgIXY zP=G!vj%urlBY~te;!bIlF~lo)!GuWmJ~t9bCfca<{_KOF{_Si3>$RWmDFI~4qG#NE z6Gg(wlhbI9`yO}%frOF1nprkYU_1wVb?45V=gys#oUy5S;>4LVC-6+yHc0wf zU+NI|_`J}HN(d5~%KCcl8-4rw?aDi!%iLJ4MsBuQl=9~vw;kDl)c)M!5JSpG##|or z>SXvJ{B2SV9Fb^S{nMjX0QpP){QfwvEk4fUSBD=w0FW@MBzT;>5&F(nppKNtRps&i z{i>?_B95y#&JaYNn$&nNg|szzY-EXSBB=fNI{0ytB;(RkbOFJNsIG*0ZIgpm+Nm~ z%fCl=@e{0kf+$jn^lD_OQD=rbOKaS`wL-J(?WJB?R~Yl-=s*V3I8@ODj|Jwj-AaG- z3V(qAvm?6mzAfM3~GMx*^FbUS3c5Ix+fsES$*T@RfNQ3eD zbusxt8XKxG%Qhfw*tMC3pGE<4&z_^NHJ^FsEX0si$g^*~{r20xiQ9)_0_Lk=Qfh0E z(yDt^qh$bc33<&x$4t%de*LT8VUBX=ojVxOz>MX?pMLS+ZY5`oO2h74S9t+JAq{}R z-8HX#CwQb8kemd&$zy&XiEpG}?nFw0E&VcmN*1 z`s(_1ka_r4{bk*bMk67>_?SEjjLfk`A@83u3+asZ-}7~%3_k+eN)wb5vpkO#rb!`D z6ZRBDyn|rM>i|D@7^#qw6l?X`>*CQpYN9yuElGA1NTWYgI76qp$EVMwkhzy}tKb}l z>9t|F?4?=BY6v7BhX4tWJ${lrzWd(k<7eM{6~z5tvESgWH#qnrm1;!tbafS;GxVUk z`U)oMP$q`Ex;sj%IQFhU;>U%x$nVGt%n zf=4Q(0$IfaiMHCRyhS2?Dy)uY<6X7_99OS^$F^~HOwg1+;>Pm0`D^>sfQgN-Z2HyE z>m$FhR)(ZGlDz7=KDiY#HvQW&_~&BLdv=osx(kcg5DAHtq(<$804cTclT!_~XU^_? zYv;S~!aqmUkubWEN}3=EB2PgetH5OS{j#<`nOuVv`i4?9H7JPy$6I&rV(;kd4?yHs z^_5RSB<6js&(2)ck(F3&hf0Na?um&48z4GGn=O!CM+6|ZupERadcRl>HYWr z=iR3^sf#?`r96^H+#IIYzID64l7R`jEBI6yKCZ)MKVCIEwTkB=DGd&w=&>V;K04=c zf;={@vdxs;D|?FenH;K0TA|07G@oty<#{$0QZo=Iyt3zN)s9Cf5(&79^F< zK;+vdl4n^6!h?r0tSt6+&^lXEsUg@rvQP-g-Mb(Y8ucN~x+v->;^z_Dgr13ipy#5RxfAOHwCUwc+4D}HP9As6R5Q)5F0Y8FTL?8XfLz?~*D zg$AaBYPq(2UrFR)rED9gi4WA6kIn|<)`Fxo8t_J>yX-tHJ_n+OCCA3c`Y`V>JUJCe zTk}X3P&rfm?pweSjJ*fUG^5t6`a=*YqKFqSw6}TENRpxCeN1iu=8b5sfH(^g%#HJLx8VMemny3XJxgj0NZZ$<%zh#zRAstBjC6GSz z=-!()Z;S%@zyJNuzkUB7e*UN1blA!x+;rekZV*3mZK;;aoQsYAv#>ZonC8W2jJR-h zl{A`zrpW|4>(S*L5%ljevEg7YX2c)cw<{27i8aj5e344th(*Wx3aw}u0W$kQ4dL{h z#(<1b>BHm}4Wt>LK6jR#Glo1^w0EjuWW<0}B8lV*fUK2yhG(kIo_qJ)dl-$e-W2T% zFd{$v?!)hJ;EInDLmxsGpAU{r96U19jG~p_A(fW zv#L(u@qhtp(rGlhaiKC-NUw{NM^9?JDjreDB!_8x0rN;9@_8k)IJ;i54Eg2AYt^uB@Pye57oY zt-1mvB;?lNk6_Ri0}@EqLnHr6BD)U#&3=p&2s3nd`Bvfc56O7sgXe;Gwb4|u8?to zB$5HhY&G#nb=-y}e_$Qbr)P`lC0%l|9YC&+&dmvrFg@4ND3cf`sO7R}<0r?)WxHb8 zv6#z@!#In?*1dyxvA+T$Av2S+tO4$ge9g;`_`5*u9qc1-F z^izo;?;=^o1O@X<)TS>Dck?+28~rTYzI>3lnS!IjQo6 z#8iM~5ep~*@&y)J(tOWo?#|VwtMkX)=kxV`e|Td|6YXXD;}4MTGA*TTYe~a@2#*(GLgW=DmuD>?l@jXJ3uS>LuIdR?D3d19 zww$Xq4QUoI=onHi<-3dH10aw_7xCgEpUTdmqH*VeNmi0A zG32XEh%_Sk&nu+y+u96}PXx%@Qn%%k7fhVUX%$y^L|?_#S1WcZ*H6m zu|&uEHjqS?BOfY92yh3xcY79#YSh`seY10!{@7xnuvpmWeE6_LBI)z^E9I0-2c7oc zpFNv(tgo-f*YTN&`w+vf_HX=)#ENf0%q&#-*`9bq16d}1c<}aBK=P_35{Qeh0)YIT z@Rs(Trg5}cczoFTLN#f?V@C&}bZa10lV%CY8Ah52B=$%kkIWVYFLDMJ=}L^rVg~X^ zHW}oANI{ZH3T?QJ`Wv!rtl~OuG;&uXjPkCs8e@6}Vn?Iqz|KaEQAh)1g?+-OR!Wk; ztvoI&Sq`L`BY&OGmUj*07iX@plYl28Nu34KEFga;GZu#-kT76q38Z5oug}rO9?mug zc20rsz9>Wrg}jhW++IYQ&Hc-#9f_Ld`-MeIxQKXNV_TT^W z$&-;t`+BkH-|sK3$MNw14Q4rS;9wO5H*ZnIU__N-c|zKS_@FgsdNc7I{3)-_8+qp+ zGV5#zq=rHBco9S;k;D=H8%8AW=~xp)V!HH$pK!solp=SvgJn?iNmz`_7H)`ztne~G z3XR5Rh{1XEC1P>Y&Qa@yr9y^u(;q%WwKvMJB zH{WO;2_z(Pbt;ukr$MA_b_O8P65p)HCr(d|^jbb}_0cj6sGnUM!3bJ5>*>p6`WC&V z4L3nVnw`UM^e&L(n1v#e8}&W!@Amua{IDXmlJuRB-VKy;&s+T1)X*M%H-VHTg+P#E zXBh)bYq24LeKYm;p48jw7SxJaND^$Rcvx$ddC#~XG}@b+kfr)pI2>g)T($_H=Mf|YN+vU`^w4k*S51?3AS&$sjp2c0UqK@>9y1sz1tGJUsa5tdK$e#w`4qE&WB|Q8kUGWTg>q@Bq^8jfkC!XuYw)vEYI0;Fu6iQNg?#7kE(ZiLIWImlz2K;~2FRGvFR@+|UYWZd5> zqc%#Ct$r0C65CFBVhOB-9nK8INF;rADc1?R3nbY=^wDWkBY&8g@pQG=?R8+XNF_#{O~sHQ%Djf9GUkFb;%F)4 zMHq*3|LqqF$lVpPO3}Ez9BCFZC?MI+t_0E~+44|#^b)K#XoY;eK_ktA29Zcz3Mwy8 z^6mAZBo$JCgpo)cL-N9i8bGQE3j~nB@e^^^=V5INQ|S~05|^o|v;fJUA(4jH{!afp zr@K}_N~$zhKO61idTlT{IG*Vb!C4c?#{wi@j{zhS1=fE4{-2K?%|u$7nm{Cw1e5!b zE=If0Pzz0+F5_^AR_dTT9tOnJ(PB#9P#TTIf^ZzGa0t4SUmF;2ojB++baY=k_v zHoO!b;j#7306ve-<7!jT%PE zBLz}2%b)#E@+dC*RT8Px(HcYJLs`}K;fnvQJBQoLkcLaWyZ8YOr23zK6^vBLiV1Q# zj6^NiE{`H#pLiP}MI!|rZ5IW|O%Mql-`NXw{O^t`>>6+j<({^DI=&t!k5jPJ6nI?7 zOFW4{a+z_YW$Kf?NJBFygEcilsN`ZK5uO=XbOOj+DVOWKi`a}%>JB0#^6!8DVPfV& zPZNkFl4Non{uvp^i4zRQwSajplN8$v4kEO0jWnc%1!M zWmv>s0$c&_f`OQj)NowYVr6B6%d)zrmO#JLGkGW-=aU zu2bpb!naR?ixM_zBn;R0P5{Wa+1!z|8)TN7 zbXqim#7|{HQdl_5k@r!$P1*vw%)_-hn{KRC>-aA6>C zcO0wKRZFC)`pBCsHNb{b6)S42q{dA8m=IEc6dDgwBKfLN%iX8ZjD2D_R7k$QI!Pek z`5ZtBkqja=k>rs;a!U95JA02Gud0&n4B9j2k-mrw?P(|!;}13#)L=TXv3|7&wNdMC8;6r;;bo;m#_6+u5GM+aJjel z*r6H)BufDZA?dOSq!jZvEFeiFLr9+3#f%0#!j`w0Y*Pb)B#>MC@G-l_OcYG{Z1ai1 zKqM6sKq`m58<3_T&L3(b%cDq1gtf<3vlV40FlZ)uugj3~&vp-7c9}rF%F3AB3Mqed z|45UHSEe<;-une4O+!eDln0CmZGuNMu=nn5t8%nKAGsTvBcDnMkR(#Em{*ofi058y z>swZ34(S`>rP6GQ1SAq;kxSk{$=l=XpBsn-a;~P9yRgoZ5*h%>tOgSK7oQN>1eJtN zw!m>C+qK(^`$r#4?x&FPgCv*x_aAs0a52LX{#1#Z-(lKJ?&KaO)k`{OX$Q(T5SB_^ zU9WD1I08pl@3qTEY8#In{pje?Lp3jvU*DxbKED571d@$IH3MSTgj$~G_ zdyE?NA&X}3%|C)O*&|)U zCxGPcDIBcexY-LSh_e~b5b~*D^iBknR)k~5IFVv_G$%+yO) z`<^`iUFzXlA}`Vi|FtpdGqjK5dXJ^r>Dd+L_9C-wgn+nKp_U`4Ga^x{j z9tor{$$OfX%c&5sbf8Xteq>htZ)z+FB#FcYyH_Bqah6JfKuo^beUh_}qV)D1lcOfdr38E}H7vL+!P-?S4Cg%A$W1iZ*%r^!l5Y`w{+hvdC|M zR&8dM1#}w!L}5Jn_8xLcj}0I%!&lRq>s&3>#IdHD`3xmexolJ+u?`zNQW#b1lMAxZ zxxsXuDvBe28yQBcRBuj9Qwyz?QgTY1JaW*CE?g(x?Bj?=%KQa!#5;ie4eR2^6%gfV zwP|P@)s(t8pJhv76_D`Q21xU{07%oOkq}Y?Y0N_M$MWsnOl?S|GaTN(Rv~FspMAc3 z+Z2989p~nNqXtrj&c3>2^f65c6_32Zla?lr!es&#qPFulW^Z%M2f3wC$ut{L{>sX1 zk`lQX0*@tcBy{WRHap6E_pT3oq^x22)0 ztFGM{=lu34BgyqNKU9OCF7!&qEbeIQh9>1j>(8o0Nh=0{ynOjVZL_`E-qP;u$u*%G zj)IQ{l4Zyane^d46&pYjOiEf-a=$=PyyGgnh64i^GBe}hKA0#ZO;NeFrq9T(mtoUS zfg`}fBpPQ2D3n`8AKffN^n|+4AO7_V5~;b+tNd(t*+h~gS}JKU{E->TPXOc; z&C`>(+c(bE>iZ_=OxpBol|eji-+mTUzMWnfi#=bQKD&hn=~cGvsV<_ZQ=+K*43} z^mtO$ZDmEPDyY@~}?}n@2I>(9;mE1}~gTTO#0HHnP?Q!A%X46A>Y$1}xdvuZr zdcQ0{w7_2qKSv&(76u83VktcDf1CZ765FAAIqP&oq(3puWhvVN<{BF$ZJA@K)~trIveV4oGDhgnq0o^m+yasPUnFw%W%E@`76Zhc+y9x3JU zU6fLkfa&>L?*UpOYtH)vkcd-@-CZpWO+8Muk)%wjOnkNm(no(S)43E*O5}YiBn2`& z6rIg*?_3^ncte}=+t5Ziwu|Y^x8HtB64A2}XHA8awXs$kTMGnsasR`wesh>WN?}|c z#$EGO!6P1JwQ;@iz1iIz6(7-8DqnAiM;KKp)W=bfto?Ji;96~Fr&+&c+$?x~?IY3&CuHwf4a?;=3j*+$M>$ zXfTK)IpiCk+avnl{|-R@8&KDS_^R~T$FDEfD;}RHmo4nTY0m(7 zK!?BSAX1Fyd9nPRho$n8R7-wC26Y(O4O2`qv%%5X>?D%zWe|@y2rrV)k%2IL_EG^r z<^oP{si~%BVR@nUSalPsali9rZekwa1`L!(S@BSUmn`8wZ)pjHVxB~* zXkSl*BfuqT4Cy0(z!dpaTO6Q@slugD``#Y3!$(h_I5CQE6I9hN92JRdUQdPSt+AS` z7HltWZ` z{`}LQ{#lQTvxC4ktC&^3H9(@5O(5CLK3>_Wp@I=dTye{*rIJKMv7!i(40fB#-rlE? z_+aT2lFHP=;4Pe0bE}UNX~=Ar`5O_=R~TIlF|Bce$AGioEp=Acq{rJD zk5#wi=$s$l$4nO-gTpf))kcsvY$G#C+zregsm1992 z`Z2Oz^QT<4F4K?S8Y7C@G>}jS@c3^(IsA?QsU*@=duUevYrUJ^q2hzLrVI%n%Ql)i zZC+v(KpG@1t%Nx5tjilsHcSeN=0YI#;mW&HsnJ9XdhjduYLsb(q!G#bSpibcnLGat z2F8IT4N&q{fMg9){52lJCwtpC=a3!?@<7(PyASZD>lPx1`o}!<*$5-O$ZlF%8;X6? z{v*wd*O16^>6AXx;QnKX($xvCisK}!x%={AuA%0xbFom$Mf!(g-58rpr zA;Gp!l`zo~#cC=X?( zd1;8`*E{_7uICwx{aU{n(~z1oi-{$6n-U;R3tQpHw-o}(Fp?>Do5K)^If?}WnIeDS zl7@TK#yR(cQw~vuqdv~!$m5GxQ=@DaWgmF$0RTDgSuDA70awoLEwRklH8_%LZUK=D z%~*`=P@6bCe)zBdj>s;!D&Y-lwC-5cRRi5ZfD5b z-r9;HD2k-&pMurS-jG_jR!H?K$#TQ{i?R7JfVeUq?(Z8=Jl2y(Esz2w(iW~XQrk?a zZ&{|KQJZwlG?2dlk9r`IC}e2EJ>ucN}aT}n&L7q1Eke{pb&|q7bLiyFCV(y;4v76LSl6)UG=&@?yvz!2Wn0W_*FAibdfvJ%K&?+&C$qYfgqX&}XATNE0TpjE(BKQKVbLn|eS{L!PfwOm>b9Ep!% z5>En&G#fzb2|QU?WZ4RcL`uT5IPsfq(?rr7Y5_xvILc(jLK|Sjfj20&sUz@t1Se+5 zZ}gqNb)#MpIV(k=6-Xq242~@#F>$p7kS~Ksm&=v7G2IgYf`TN}kxgR$;+r12f+OD6 zhb?I7YEViFqbLTX_d_Dr z5jL)$o_z3Na{T~G=`7^~$~3+;X`hOX^#}Wt12)fC|Df02>~HU?lfP5R$pPX(DbUHe zc2WqVEaDdT7Ld?%=sGsx<6`VgW|+~VtTtTP8qa0zi@Sl`{?n)TusDSMLp364f%rr{ ztdMCAc9G?`WdU*@_0dd3l1as;%6)g#W_A{2wx%J$BbS>0cno>c6vlT~NP{MBsg=e| z2^1F-PyUz>r%3XBM;?y70`^^BzG!AbDUg~+xa^hsO#q2q*9l~s1ti}E$SDy<9QJkV zI$%_VqD@?|ga#ss&e_N`YU=45Y^iR&+xoCGkOLfr`9O`U;2TN~0LXR%iLkcLA79ABT`znC zEnjFGbff@e9Mk5h)z$bYJoZ8g9vX8zlLt~Kp$JsTd_G+~4R4-~fykko13@gO9*Wd8 zG_Qe!FP zZblB3IvSleU39*c5lOw=T`C1ec^Mv+YGSW|+f+ymq=lpM*>u{=G81VO(m{cg2}r6V zX*`Rm0oW!!a{#${?gnj`MB<=B>IGy15($k=jwh3x(+&0qVVVH9L$gu2RY6jX4`!OIL5MBrm{aW6okdm0EAETTd1J zsF6c0aY*aP;MCMYew~@j)Iti=K_|i9X|}2#?2qr4_Rad#YN~h|j7}D_31lPTp|PP0 z(Qu-@8S|H|)it#)mwV|xkaRCC;cuu5JS0+Xr4&UqXFZZsE_Hy%;kC8lVaAUc0a8 zGIUb&-*y5iX7&k?djn*u5=aqBb8F#gLdx>hxQfLp!{qJ`Taw-zQdo_%Ses^ zQfI`}NFIU+AitvUz%-8xBq@-HCeL5GapoNM{^4X0R%s8Py#fDD*NOECw-8S1^hU*y zNU~uUhWcT_`B);*T)zDMWIU1xBGK{;C6falr{7iAdgRcdLrpCuE+oX7UF@uygVP3u3P{3;YB_-1 zfXUoA^ z2;|56-XV~hNJ}AC_<#{e9wl|_yav+nsQmT$>);VlCjJP0rNed$?wt{)tVgunVt#WA zEnP(n8g#3Us~%g|y($7WqT_O)vu(x1vEvR-Cqmq_7YIzp3szE!wwhT_b zRv@crWYPHXkN2_eBjqp!WW8!Y14dZAq%}9TBoaU(NE36kK^<8+2a&KFH#mlYVz|m^ z5ilF!&U#Iei;K=FUI4Om#;x1CyVKP!rK$W4til6KJTnP+Iy|{*s&wXZvrKx z&sWD5eH{gKwv{-lD!HnZ(3E%B|zy0k!H3?3`+g5YT za@+c-Ad*NP1<139cL4eEPT!4ja!m@~m6gxrP$9)-n-f74j}-!`l5DPTuT;o#oi>2N z^wg1DjOjJvuZkkAoLrtlC4Dx>D~v?mHXjW<_KF7bx&TR&4&o|(^Yt^E$R8z}!Gk@W z8^Cc>Y#CS*#WSn}jSSz=S?3Cf#CXNX1x!WSuz_N9DAp4iyO6xl0UDp8{pMTjpSj>A zj|d=z%E#D`3bjh-$gr1ly47eg#`@=D!TzyW))REJ+iM#!7HNP)+ETkdID&m!rl%Lu z`$v&Qujf;dd^QrwMiSZXI;dow9~n1FOW);ZlvckcLnSLYE+<`~rqkAh{5_-+a$4<)-Zl$^^TqhSPzu04z&2-s9SeybL| zeQB+I*O}xKGonx3q+$w?Ki~l%zk1gI$g92>9Kqvpb88Zt@+_MFN#y+ZK@R@~e|7IPLsJ-Muh@d84}p&GMWrOo63tsf}_j?GB+FD}jxByaM# zVr&yIHeYc19)(K?AUQ*U3ZEz?O6V?6X0WHL-PO>L^NxjsIDsj+*yBxjftTIhs1))V zfu!HIPq8F9*k?m4a1_4T7Q=DfIJU_%XiIl>r{hJ;o5Pup`qP6Ed+nqUS)5vkB&G+D zS0x4=_L|-!M|wZ{=+s9?k2TcgN@ElAmm}NaBf= zxlA-kfz&|C#M3NK`1l(A8Ii=TxktP|yZ7wbGt-jLCJH(C96Zj=5=cuSs|*L`4j9s` zcaz*yC?u2Y|527?pRSNdwJ7^d1!Sc-8q-{w6i2dtYdu93-ztJh61juSt;26{Yk++B z(wSKnehiSz_mr(L)}{{@i3F08Kx4zwa}0v6Yy#D@*U#HDs@yHWCVv2D%JB~D7*^41(Z8j|YPz{T`ea z42nZ>v}~Y}#Uh3w{oS5eyWQW+bu=iiXA{AJv+$Wb z1WApf0uns_Ft;*$=Im$h?#81r#i2ZTF+f%-A=mzhk6-> zEMsx|-fT2|Zzw(f)eYHA&su>gLlqX0^2PEvfCQ1>$PRp$&Yn59iMeOg8?RG0SET|Z zEgSGEd!kLFGASCVnB2_3aY=N6T|yfz?g=7ll|t+X%T+=s#b z!G(nsYvYIxY%!d(*f-FZP3IT#EMEE{lg0L|Ez+LqZfKfz4 zBd1{Re|YWkv16{7&lg16Re(Y=zlJX6HaZ&sB*;YJhiAZo$>a|+QBg=95e|8jxOtiD zi@y86->MbH+xyqgL?7`KlYXHfDfR=2oJG~gxa=zV?Uz4}8#59~8p?(%z@t`3_Gx4n zBQ218l~;XESU`fscjcv=HXjuXnj#PbNeyE~jsr6cR{CpsYNw3^3`67B^-@?NlA1<^ zB$6xSh=~h*Huos~hE17so0~j9SKN4;bdK|Q@#>(6LLj+kf8{)-#-S9kMYy31GLHTz=g^{aPv(*rCJ5vs5DAIwz^ zdjI|RPn|ki+ttBRxpI43dnH^r0Qbd1CM&g zDUxRy$&=+v+KkU8l24ux$S?Mm(0NX z`=wB-GvB?e(BKYRlRN^TlHGwGUxJ7|;cf8MH|05mZkQ0p!;bz9!SAWI00~Z%j`uPGc(b_NH!aaL=uDHXn!P>$olP$zA+SPGgYt z6GtZ50^}a!vdfti7}fi(4Mo0$#(fprvXM4DTwZBHs2P^4Ixaq21F4CGfyWHOK$zq; z+BkHmdWX2k0NSb~-{g_2Jy9grvp(?Gss*94Bfcrw#P-tduCNnel?8y($;jfd3 zB4Jm#_{)g`xz`n%iw1Iwi={$`8&R6G=}=?98JvmqBy0mS*r+^+VTh33-yKRsypgQO z>$2BgX3$50L{%{!vU#%oBb>WUIQwQ3@xi%gGf@;qGb5`-dod4X&&Jo&@w$|)yCHEQ zvof@p@WgDMNOn3p?1(t>{v#j#9NGvb-~aiCr>-@&R3CEr=AAASB^OH=;{=Z->DX|o z4}pB@yYu|f)iGN?@@%%F2;}T?hJz*F-9rKFitwnAl!th1&7>%#APLh7Ng#jstHbZU zs`_HGY|CNm6uSb*e^Eeck6j)^`nAUvAZ1TOQOI&-l#8)<&BIhFDUtFrgT%&bYg6zU z0?myn0C92l=4}Frht^1`Zf_bQVQ0qA2#;HHx*(FaDjP>~nc+C%OUi=6Q1>Drj^vS) z%eX4`-cEu@06904T!BQ+J%5Cwd=W#=JnDC1hYDa=2y_KPPoiEdoN*(nENwVl4NZX_ zZ*m~y!K%J-;MhM9_BJ*kMB0a+ zJxh*Ed#2Y$7UFe91RAylG;ZpOk#M9X;u%`WVCh*fY;$(U!oh?C)8qEup9|jf*&m)d zVsAWB=U#H=yo>0%2fPKRo32|5JM$bI@^ zAlzLc1xJg`GM8=Uc&+vg-d~}Vdzoj8M5^76L?W3duj!9TN0Le(VUk)Kg(QyWI7P5Y zArS8`M#&|R@Ls|rXU5sgpk+8cJ~M|!p+Zgt8z z?{0UFbBSYfHd`1zzYn93;c%p`-E-mQ*kZ&zztjaFuK`EC8ojRS7Ib9>`vwz8nURup z`}>|eLyst%?X%_M_BwcLn*&2@jdfE=n|CY`OJ-0x@4wj}>hcCXkr>)Mj>h*gu zq5SAbZLQtu?D4t_sQmkh$%^#&QykRv!OCd^Q2%@q}N>=8%G9Mu?P8ZIg#7{D02Q z_qCDq+Vj2n#m&uKHr%Djc6)c}c`+8#pysMfBMXDQXpqXvnxzR;*L^b*cP|M7M?xiQ zwh$63xrHRkk*c7uXK-Z2zQ&R;l94>JEj!&xx}DrL9{Vy)W@fV!?%Vx8_IsWx`Ds}m z7WUYZ<)jn3<&V#K&N<(69+K)(F2kJU9t|LZNC5dUoFk(VHMh|y9Rm_O@12a3#4o6X zbO#nAvNQmZ01`2~geoKoKghG=@+>B}s`b{~ftXBR>ERhU0uOl*>dO!WN&Tjg%^Ns_ zLY`5TQbDthFfV0~tG%et$*|wwTA5D-XTzy%A&^$2Xwu*9>cM@@7@!O#E;4CI;+349!?ES$<(rKmon44FW^57u06gN;IZTrM8jkbU z8M52``G5J3H$VAtbNnVxut5OjG(28URDJGl94_-q(0}_)7T!+SnV#_e5`Z>ZX(`|NF`ORoC^R;*&!`?<0 z4LPADFlAxB()G#@*zM;1jHY4S^LA(n+i7DR?xwKK`o zuc|^WF9~@C$uJI-N~Kb-#c}gZ7!H!v3?KY)VIFhUvMh@!)o296((btx-4CQ`DOp1h zb|B_O`@7uG5<70+AH9lU_WLwUvzC-PIY~h1P9`)+Gu9UNz2tFOYJ)`E7sTHKnx9@J z-;0RrY(|o4E!J@dY%6qJFF{h7jpt}tjKFr^ld9zO&H0Jb;b*PXHXrIdC3kq+Hb!M} z@Hp`N!@qlP+(FVa58`&nb|NV;!4! zU*An5`+(gdksAaS1f)G1jD<7Q7G%a9q~jrv$VIYSYSqKEpB~u0AD4mr-f(=0l4Udxw~!D6NLOMmY8DEyxnv<-Qj@{J;Jl5I zNJ))nGFovP3oaL2F5jM}Ce|>i@Gy%wZuU(%7)=&(ope5m+h zKh2bZNH^ga@de!r(vA<>VDXX(tU%-y>}~U+bO9b=x&G{IsQ-r$HUY#EDN*-mW~wjs zlaR`uDcO|PzLMbmvZj`gXACKeA3Nlfv2}48)F8ZW{_*K_!aXO))kG{MRpXKvHH%$C zgKJc&fo=@_d+?AhH)h98DAE>?79|s6%uKr7(NwjPp*uYau|h6~>iwbXxoZ=>LxK{i zQsV4vsV_&;o$4_Il6r{H`_Mj(klc!QB)N4gz(b-)s^xJJ1H!_|?l}eQwjFD3Ze?I| zG$SoEf;AM9BYEVdEj@c{1NrgazQ@}noJ)=696{wP|POm&?@j5y`B?rCB zS_z^ZMZsiiAu3sdmcidCgBH=Sc=+1u!g`8^+6Z8_VcG4LV`xAoqVuk0xi95Px}NUG zB*XF)RloQ7f)B?>A`+rDxzbS}#Ee&ZA#5o?iycv$%`vRwK-sTkQer<_6*5XHA+bHW z8GX2ciq8q;6}EeHst;Y~rhHo{etP2}se4E~!mgRXqCNa?Sm!*J%uHrB?}*PF&G=nI z+2D}_IpHAR$!R8m{0SbMNA4kS9VU4biQE4-l29jo_`>R5-2myxA{`*dd}Q&+?imW~ zu0z~(NSjt@3onuv%3kPCU?^LFX$_dlWUBU@7rKV3V%hI`mp(xxKJaj{_txs#w97}ZLyi`%*7H&%l1(4SFu@CT9KNuLh8Tzxnvj0IU2Bb0k??2)W@+T8u;=!Xep2+x~TTUca z=77iV^O^b&LuxfI!I2+C3(!g+wM<#Nc@$*e=krRkVa}m zq!Uk&IK!OZVY@#5i7m2V7iSlX7;eBE!^!FC7sVG4d{Jx0DWmH}GJP8#_-;sjY%Ce4 z+I08Qe!q!GIz^(yab2oYOS^)L5UcrP`S`e(ueA=~a-xa0MLLRvEEftgI)~XyJ&Jy| zAe##21r&^WVRCf=9UCZZpKnF8Ew9V{=y6QR%c)8!p4BsuYBW;lo~t@Bwuge^ru)#3 zwxS>eqRZZ8F|i65y)K`-pa@bflQy%aiIZ;5v%TsH1YFCnmNzL~dOX{zDN?G{l0tJN z(flnYAZ;M=HJKk&gTcOJYME-v6cpwm;UG5<8;11HXU9jL(!lt62m#x1kX;yakYvaL z0VMZ{JaY4I>^`>bAsrx?xM4D4+d#rY@@@ApHy*qUIqo4jkPeP`y4AS3t7QWKCmiLs z<4D@cyFBE*zuS9ZT;9ZNo|)Y6$X%qZ`@s_<6D4sA|M8KZwQl@JMe>D??7Tf3lFs0S z2`f&JRN@=-Xa<*zNTWGu4uB)-K5ySP8IZ`bTN0$V{XPmP{ey#4Di+fQ(99MJVpPVc ztZZhjU3B?0-OTE3Ly7AHL%|$FB9MCht6x3eN~BuhY47x7x0H`MEyGGX%%4%a_Pk;5t=dhJo zxr*6cxd0&NPz=ZNHZg{_HrphS$Qb70VyYnL(PuAUrA8h=dd_!;8H>#_j3zjEqTS{| zGGlU|5s%mO0w?eP^xpWnk>kjbBpaJ!fQzKY9S8EpL;f`fl6d3>90|yq`2`N-dv~Tb z+{Qg5C-63pV{Veap4@6c9+H6k_pAP~m^~uWd1B@i$4O)XqtNYi42xO-i%DoqyMX_o zIJ9+VOycLTN!=RwNDzte-6j_a_t=CHn{Nl#08*)-fmq7-Lvf`SI<6gOsn`b%ZX(^) zO#q3gofL6CYh3AOLNJ6la&k3Zx-^trVLt%JR$kkBY$p4u`G-E2FP2Cyrb^9h+-PSC zrrESI-R^D|0aWmRNiEJzVp9 z1TU4_rIb#Ud>ePI6xBDvW;R$_}~+Tr!s?dwt$$8S=E9lN!FzqE@U*7#$e-_ZU*YxLL9}GhJR(I8cP%w zXXdB@nGDN{Q4r%LBb!JJGU_Fy*Rl{EGnS+swnm&tr&9a*hdEu!c&wiZE=1+jPyKf zrm}IC)O3+y6OicGpoK;H5~SN4N1ibLf<8!Q#fT&%Ne?+Nwu_(gJ`Jz<-Ex$pnHmR5 zKB5iZ!#(7Guz~!m5s=(PF5~lNjS3tj2Xf4K$mT$Dw|y6vV?D*ujD!7j-$9e9)Od2k zz54h5`t@>DFfOm`LnJ|o;`nW2KpOV(5J0kI8|lp5H2}lt>c+;daem%tZ0{jt zqjl&G^(CR&spPA&7^$`n4*HOSh}9}wq?|4l@Jp~5Oy^T(N=g%u#_nz#zcaLDJi{Wk z!Pa`bYop+UlG!PMygao%+!U0y(=ko9)m|z{>EGB#=C!R0iC_Px2W?x}n(eP{WLf#GBs4 z!{{`-=w+AAYG=7hMXB~%C~`;Qt+^P@YWHKfg8`XMzS~VpV6{2Orx6ajm#F_}P%f6N zMmm?*bC`%INs{sDW}+g_rjoOZ(ZzWzE)%mkVKx}=N=dz&6Rb>oqphE8Qz7!Tzfo*x zejykXq%|+5xk*gvO=U{)lq?6-%)n|~W|YhG?wfP`?KK~|5UN~qVeVvMe5 z$jYE8bRb7i&%*=U<<$YvUPz#3S?ZuKA3y$^~2fz=d>oP1|UPdNDs5*Ev!Y0zXO# zQ;DQVXUM#%5eBg|}j2qiLP3YNT za>CN_kT#E8Yw^?Xtc86u^Wj3S>zpE4;Qr+=Z5~Il+d2MF(AMpS4FeKHl7}4abza-~ ztjO%Bq2f^-!rE0C}o<2Z;B2t!v&sQY9FMnfIwYM{~8%fqlylen0flN0GDRSW;_C@W>BmG_;XoG5nFV(%o(A zN)b9_Xzf^=YB*Bga~tU?Hf$b2Bps)(=?y`~hWD7qNHV9$!!v8Va=zTgaU96+IhT0x zMh*9n{Qd=&B!Ziz*4oG@aW-kBU4UxGjG~O{K;JN z%|`KP?R9&j*hrbWw(K?!wH+*^+IMe0pI%i4+P9jVm04`e{4l+c#iyGJyNMAMb$|77Tq&*`D8d5j`gd!iebZpCIHDIGrGlePSzJ~ zhezH7BODzduXb5UmRkB37o|=olT#a?K701e`N1>xZW0#y1|K&zwrmQnhD$8CUYvIh zc~ZkSPTc@`?*_(#*Fp6mH$IoB;l3%X_|)vlGhw9saH>CyblE{fT1*WwaX zaFnz~hS-qpqD(_vU6tM_z)wGi39KZ38*Bt8{WzDR}%bj*!Ho z;~@!2_RL^>H)M}F?y-I%L(=B*u9ZZi)S6!4*|}=u*7DyEzf%s+1IWctwKQrk14vv? zY7>d;Nu3ni0g}#;tSBznKGMER$sw`~c_e(}&{6xq7|UH4ump+@kXJ+`_-vNy*f%Bh zp{0>U0C^BY$r)>#7b8o3=qr-z$%Kr;w&%^ZmWfLR3=|64!PjjB-(04t`WqReu@^|| zrGhGD)PV2t^wTHskfhb6p_s>OlIEUPwKrD)^0JK;{Q4(FwYZK-$MiYOI9 zYpb}vVRlB6vF3C(*op{N*J@}~{eg#6Xipm*Tt-<9ca)=?21YnCv2qhUB6EsU1af|; z{O4;c9@&4y-O*_HmEs`3mBC*1H0B|h8j^cR4kmaUM}IEq}DHm2L9(EaX>OgBKjDu-vGTftCOz4?}iykuudx-^#p_d8c!Bgz2C5s~C2 zL8Oz|07*P-eI#ok+LOrk!tAcoG`n;>0Rc(#UDt01op>)^%eEreRtg|7mJJ6fiyy@h zvPHSyN0G0JVl|S4qMjGDu-5El)$YpPA!}gcY5w+t;@;%7c7w6r=+(YD2izrliK(m0$ ziUFh!Dk-foY}w0{rAp7}T2J@QTCqdSvm zoAZyIi5f6C;UU4}C}Mw~fczc-=|pYk6`*{^-Q;JE?1CGeBH<+YDR;6i$x;|+eILH? z-ysLdQI@?I`|S+2%f*h*I@cf)v_Kn4_xk+TbGj?whDdrF9Uv)aBdBQ3Inura5f9q& zEIk7uRpULVuZJHh?@IUmVGaB-KxY+BHtp9<4Clfo1`o^N0ozJ*fAdSnMLJZrid3 zFoMw@eI+8hC7SH2RH-TRk=P2Qu=p`skmnWwWCR0;kTZ%c@t{{11l8wdEb zOcxy-q-0SPv+=AryV#GdLzJ6{_prgFB}0QKY1*pS|I$#6j9KY)6|svv*=nTH&0HaE zq$RX!a*CPAXT2*pJvv0fRc?BHk7m3Nr^>o%ozjgtyH?S|P7>R%_Fuj5uXzJSzcvt} zdu!9~wdDe~U#WUV_3IXrC1F=z)pw>p*n0ZG2b=Q zqy4FvrW}*=?y0#L)?qCO9$o79A*2(K*FdR@e>#jwLXqCwNLC#A&wzTUaEupC#v>wj z4MN~#62Znl@{4>J+s4oNsq>#U$CT#?PRM3Q$dQKxkHC+6NJb>fvHyzZyO@7uK-wPC zIY&C5>^#X){a3bK-yOgLYMfbYa7UO4kQuD zfaFBlcI1p9(jX%FO1$<{jq(L`X&_K-LoDurTCxk5M(fU4%*HpU^+4mJ)N-9tT3#2C zyHF<%>q`Z3X1#}b(@;!=G7-%YC=lyHD(Uv_pPp-qk#5#Y>7ag|X$<{Q$;cJdl7ytE zn~4`<{gw|vt^i4lQa(Snbk~|J-35yO68@ne%{5$aK=y1)iep2=}JgU|fu(}jW z{PxAtKyB!jTGWlAVQE)wp}0DQvncHO3JPO#(p2!bjaLq20NLwTBauoIzgkL~RK0QB z*qKN!%)50XAgB63l16LbB{TSUQ;C5|OHL?G+eRgb0b}uZ7r*=61>Seu%M1@$TWaB| zoYnHH`}`!v3FLVL+4$xFCt@>mLiXJ`jYFe@qf-?pAioa-j_{D+??*oZha5+n&q)_K zu9O_P#W5er)0zq63#s{1A}s49X&)o<^V*l43nG%u4N}5QSp(TdVTw6*TClr?j-84KPvl?b1)fXxc>L^w`Pa{Ftw$>zydf{gX^LUKMV z0Z!4KL}NQ7Rja*tJ)H^$qfz0FD&g!ns8+*`bIZT&e;t4jH(ipzu%qJ`OBdaF-e3_~TNSpE-FV7gbwfv)94ky+zMZn1={BgVSk!bV zD;k(rEbhCup1l9y0SZY|k6lSoObc@}@#|0wvAQa^SbedvE$Vt!*c zmBs&)6gN?j5kA{nFpW$$tMr2jA(zTF#abj=pq02RXd}(0u?8rCOM#Yc*u8vJaFzw$JW{i9V8L6Z6N=A z^%a{AB&vAKrl4)X*v=m&{DD*#+DPp6!2%#!GleZcCv@{9+ZSZdb(NfH>_L}+6jBjV zDqw9c=#xyp!M$o1-yVsZH1Uo}=<5BRI9((eh^|7qRzJOseWFwd15gR$pj~yVt^DdCjh(zbb z2*(kO_{z)VpW(q<+jp$%#dOxwRb zv@p%!_qkrbUQ2}&8Ld$)uc?=wH!o#P^Q`%nHy=>M29Qs;rZ67naxW&ObT8Ht)>9~v z*7Efx-W)^6)VBcPa7jR$2Y3TWC@;iTUv3eQw%NL$Hr_nEcVvbEe@Hxj`L93{K!Qm7 z6d6e+5|FhsXUGfVwi1^&ukSKW{vhUDLG$_jK9zf!xA?Y#inB4is{R1;a^_z78EA8IPdxOMI|HBm=T?7RO+Z z2_S#KSK~4mZ7`jJ_=Nr7b{!H~4cKxz*>{~G2~UdH><9^E#pnb{9&+5!SEsZF1}8~4 z0?cm*@+V`;_WQSo5*-)GYXtb@st~kl0OSFPWJcS(KCg8Uv>hH{fBuTC_TYI9h;;1d zxEBPsa{@$=SUjR6dmI0CQHO)1f;e=pROvyz2P-Qa>r_e|DLD&8R}aA%0vS1p^P_l> zTwgzyvZ3S8`w(S^Lh)v^+L9xci+UW>To|u5tc`ElT|E)@NtW?)a{!fNO;7FI#bdl0fyl2|erY#$& zmvHxVB!Xo=v3~mEtpZ{88OCF=jp}Vz2uQ}8T`jt>KUHq4?U%#GnlC7&g-lLLNJcfC zttJz5bCrC&Bx%KfDY}r=Y~pj}$@8fv!B{pIbNh|2zxEW7aUTtfN2>K=)qi@rE$lRo zUhkmx_yzG=za|xsOtRHLXAn4%2(FLboj_c`QHaTsPw}NZ!QOI)0+`qyZtw4%TI#S- z{Q2s#FdXh|?(2uqfMB3N)ILA=W6f?9Nj8P+Cl7vx!JFCXsgyDw6D|cIgH`9IXlAak zO-e7eFRi!%S*?IET~m+_*4Z7h2O<1}pyjRQfh4;O&oW^24EH!XK5`=>QIcdt#?b?_ z!!+BB>y*Peb^lM}@-tjaOh7t~8W^XMOLMt{WI%oh5BVuRh(;%;;RgRmZgFzB!6uU1 zT~)`iG-r}XIRAh1LtMg7Q+)_9p?~=o!m(1ac?6Bj@CsgzH)~*)BYDQw8Vqm$`X4^| zEWoz>SVJf;idLJh$@W;qOq;c>sZ)DR!k(o_wimDFo7ajwKkX9b_4P2k2~{AK3gWle z%H})AAs{q_RkFtOagUt?h*=nEJP^JKSOG{sc5n#omhH<*;@ z=W|U7Qnh?0p3}945PrJl-Fy0c6F_2Flxu!AECv(pUC*%S@%V?x{ZF^cjg9SX&v5%= zWHQ6ztAASEE<^>@Kn2x*`n7%(*z-NNOPX+#-XLAtttiOF-xzs}%$hhvwlV99u}kBn zE?7{&3;LykCU*Z1(36K?m`yy!RbX)%y-={ArNqkPC8G%*JD`vJBJBUr2f0XQ%txw_ z`;3z7vDq!&is5ih63W#TOnk-{`@jI<-#dO1-;Yw7v55WC5AOj+he<{xY#hnS$p#0; zF)2AeN8Vlo>}crlWfDjhvPCRE{Qd8bBe{kZq5icjc|Uk{Tu%) zKUUsbtV%g#+j85~Dx(%Qwxs|_>WW3sxW>*VWzgx*`DW!7w7820$CxPXE1fv>701=e z1=`qWarvVIv3Jp|*6SFm5qiz9Fqo)`>h9o;f_>utww`Eg47EfmFG;z4Hm<}o7>F)i zr&H*|4Ir|~D?;$;(}lnXj~6x{Jb3O}*_xU~wcTAjNBi(}w}?FYWLJF!T@HFU#TSR4 z6|s)|S34)>vfrY;GKcy%+r`5j@AIcmkYmH1&WdyMa|vYArStQqo-(z97&hA*R&iKt zw9gxd!^_Kdx;sFX>g@AlypzW*wzdtk7=3t2>e?W18!+M#2WbM5{39NOBn+>q8p(*v zfk>zF$bV{g>nMoQ$&0h?q{a@}_h0~$*C82>_A6c$e;3G~-lJ&!>CGAPE+lz9lG`|r z^f_j?Zjv1p_xax&-`;r0|I63;|E6`Pdwy14Wc`CbiP;V9q11zZoYSO74e_JG2P&>xUrFl)>?_!Nvxg{wXL8S z%nS9hrd$^H3}0*tTEnt6irxjMrYTs{X{BNnZVlwdz@T3D+#Wh?`wv@(JBzwyj4vMw zx9XK3W31bFa=Q`u>m?9%!0vI$6?X&ZUEuq_yot91YN;sxW-}sBSSW0bO=VvkY>&-8gStM*#*LzBbZaMD)Mvczh)_GJrkAkI&?g3CL7mAT zwAf9EBt9GO9v=s^mq49B4OOE{+>$WkL8uM0*$c7eSvqQ|=W}BiyFJJyg z9R4*Yk~`YRSrF;-$T;%)NA}t|eRb9NknrEfUZk0eXPg=c*N_ktR_$ryd)FR0_Jj}Y+q*S|_c3XI1JpBh=^ z)3b$20y}D?VX?8p6xG(`S#ZO@2w#SHJP56?y8y-T@WsJrX8Z8PN9zaU<8c@4__iJ4 z5p2{1muA=4v+;u$+1>E=v#nwr|CK|Wy*%RB2oLK-wOCIyPpnJJR!ZFn5sN9fsGEc0 zGx-lK1CvnhI?>-g#6JQ_p^UnJ&NVnF(oQbgIXAL3I!ql|(BMrBAIv09GvyPj)fxCc z=1B-X%^rXhtTQ>ayIvE-Bo^Cd-056D75ZW~>_87DsU94FMm#t0=VM++PE1)xa14#+ zF;goRar#;tM%!W`gzDY+?h*d_Q(L-G>^R=Wf@5;d%m5NZGVd<_@+DZ5M8@%DhsWdN zoe0`srJy6XbzBv46#4Oyn?Cl2Ye){He1;?(*`52?GLUd-7>+nYas?>`f6frefaG>t z${%(Q|LLB#!v87qi;N}YxSan`oEHXBq~9qtRaa<2*Z$< z;8$a)eMF{)BEF;`X%K0Q#y7)86&!KnI{a$XTO&wpGmVap3=hs3#nB!BiMqnLdCIPZ(tS2wfOR`?jr0t8vu34In_Kdg@~5%%P&yOzi4nm&GGW$T zo}C<>Tx{n@hi(3iWdPZhCiGgBJ#&kukxV}#`36HTip znajsKA6K7h_ilYr7JO-UBPZ5k?f^Ly~4=OH~P&OOc^5|F9GojkQV&NyS4 z8BH*gu!{MOJc61{bdmu!noqq;3p=-`$j?S)Ib0hf!uzn0b{Q*RvShjD|f-d7K;^#WGFNr5k)SPTv``1D)4#jG1y7k-&EOF-fJ6 zeUUxJ(&8-_Izllkz)d@*r&Qm3CBnHw3jAGRkHUPmfu zj!V^TbCzV59pAS<_5SG%UK1YFENz}Nbf@h(+pwZsC zwIT#jcHUSLYKF9sk4zi7~UN(;vk9I$s(ofCniw0RPbYB3>j=xoWI=t=_l|gIoXhx1SI1T zf>A0fGKg=^Sabczd8EQL=?(p&3?$BwubXT_l3Q$2kP?t`%m+L&4Jk9p50PhWwgh8W zXG8Zvvilg>4dyGwA{`4L=d$-KdN{vf2g<{!y8t{wMal|NzA-x@*G);s$g0Gn+;hW- z1ds5sSxt{r22DLqAtSA3MAkht@H$qEOtj#f^45v?oT3 zJ8%Fy$Q~ZQC{QWn@qr_RS*A|I(6Te5#tMa{QlN4@)=+Ae8d_h~IypKtjO_@z;ZcmI zfMIW^B9X&p8;6CBb~L%H2?i~}+>8na`{sq-^SwiZO3a2tJw+lfcv>IDS}nJxQqm-z zes*uVyqVssSA4;A|4eD2iI91{l@RyTswW8h3_w8+>$Yq=v|0z$okV=GR3_&xN418W zrtUKYV$EQ{(~JqIWp|kmpx0gD-H>Y?pRV=Y@hO~;i`xizA;2GkkOCzjp(7z+QF6BF z> ^kmE@3F?XH0LH?x-4X@MgRF-$bK61f0g?$*19iuJt*hw2oK*~5W4asdb9&aKN zA|uIdHXa?!> zJk}1|^>%#A7?9bCV%SboDbVJ;BVy)qrlA%~OMAI=t0g8&NIVCHpnGQc{G>^58M!EK z>?|vTu~sU-(Q2h)@RTviN5}`0K}})?X_gxo&JPTz29<%5HKE-M3OJ0O#+t2$rnQiM ziV^E;s0mq!0Z8|Jx}K?tnrgHe6x~BiL-wLPcX;-h>oB{KN;RXklW4Hk$}~y~D`}N# zQxMe+p_WmvG=o?_g0c4~wJ5mEIHO>a+te;vxCu(M4y_|+3LGJ5eu#%)w24PN0HY)_ zkbi@Q40=e*Nyz`jUXPGp$3r<_MUMF5ZP`z zyp@Thf-CYT0pz$VjAS5Ga}}*b@#rq9xWNF zF;6Xp85_<;TDcgK&mF&oGgBEhM7eH;!>NFs9lr=MQRG_tQYcqAbG zK99UMkO`mv*o7otRopRu^2LbcK%Vikag%`L3Q{^j5{=Ac|E{AUF|gnl&XByNLBjFP zN|Fn&wZKj4Uh4`W;KyuI05qgUZ}J+c+LQ?aDG}K@MiP+O9eMBvBT|qZ8hWBD;OE73 z<+AOa~apyVW}|*pb#JX5QXWF#;{d&DsJ35NdDO6gCO{KxDxbUQZaJUcitG2?~4K{1$^rRYV=C!4=$365_V`XJ% zUg=9VN+&*REg!Vn#T^uU`k5;oF2XvG;}kiC%+1s|wnji)_?H_Ul-S2H5;zi%FA*f~ zs7PeVUS$2gP0k!|&wE`uQ_s$nl0&_6Apd~_`AY7Pr)lJni2NB7RksZh8B?ppW$J}f_87)>LAY~$V zKqQs)K-eA`7qZk_TbN|Gjhdd}N890ToxOl&!|mO$i-wD5v(TlOq#`&Z(E3Gkv|f=(4|wN}fz* z1GDC##sq=VG3XiawSqnBoVXObG9){|=Cv-D*`6k^k!>4k-A^DdI0iD|gm z+GwiMYDS@IeWKD`Qr(>IQ4aU@UB=Gr9V*I;)lQpG!z)PMm%dsZT3XoLUu~3>xx~ZG zM73_ydTob?i#RPhLWR)ydf^}reOTNEkXuM=GaPBNQh_F>0La~!QjIQq;Jpmwu|Fuq zAsLEiY2X& zZ%?G1*iw;M9D<$00CH?hKLPuNvi{lU#qp`_qW{3WJ?08SZLSw~Kx6?u4VVXD4DGl= z2Za~y>{ej|i;U*xCd@%=y}q|3YTbsUc4*#EO+Lx_Dyc+No6`nz&ZNRHskho^&R@1V z7h|ow)mhJjwHj~}ut%#E6I%INWKiiH?NRjg4p2N%ozo;rVy%UY_4T?3teJ*jd#mSr`!8SY8@OEDngEX&GZ{I>Z%CCNmlw4A^QtA^ z-l}RZFce7DQ12UYS|)<+4HQzC!5mTnI7#jzWjgf?GKD&UUBc1k3i-1HWE`J#d~spB zWmPEy`M2Y2@NuUu7tD2oD5HprgxhL9E)sVb{5P6xNVkH-5wZ(NP)sHp8WNXmvt0h2w+qvGsABAdO}K>2NtBi$+($ zXgdrsAlsohmUCK06~h{zm7JGGz~D}%htx~Hs7h`1z|K0COG)&&U_aapMuRJRmr-mB zmnIXfg0)mDh4}o*Nvnk%VJf9JnJ~YxhXFZoen=Y?GqqH`)jXN@Rh~|-l|5_sYPHYM zyc=74>ekd-*a%mN`KtBulE;m%9EGZ{_b}LVs?56`z7FKp$MU+4n%@S zk}e>lWqAcQGuUqoIPz~ah>2%Z}vcuLs!o{VR_90A% zOeA>37)=Ss8r>L?xKSLaA`#gpAf*ip{zVG5Q5-Ie!h&rCmGlS@)43iIpdyt}w2$Lx zxOT;{^gIh7X|Hb_CrCSHs~}>z@nd@j2Qi&W)jKJc(mufh@4~QGQmkq`)jdO55&p+=VkB#skKn;tdk7kiNbymaG2Ptpe+E0od4 z_PvnsObdIOJ9q9}t1f(8jrp{>QU$!B!XlcgCX$*)ZV1zTda?5E$c0Qcycr>Xf}QLb z>Ay0q`Ra*6v!dQtrr~EdR~p)iRdgUZncXl4^r9IKoBsgObi^bvo9d{D7sO<3ahj(N zp_Ddw1d-(1jLRxg0`dg|QZ7MwO+)gD0bTNb_tp@q8vi8?$@AC@Na9fj5;$V7|9|=5 zSA-*&{C5@`#{l;F>si5dxNucAHMK7R6;%Pi{%=_C+-+Y)a6& zSKZ=59Vi9_Un8IisLAUuZ6WrLU@{6op&$nsaBt?sx}|2 zEu~|L3{`_4rabOkz-u?6V>|nzu=NZB5!S=dkIbE6`jO46D8QZ{9}|y9M*xzmNb+i; zR($6W_Tk-zQpk=Qzit{ko-Fqy2uSM7ewP8sQis5iNry)nNEG_K3m{2Bejo!$6cUd7 z_1~F(^x*MkBxN6)At}8jAaT9_CV_gCag?4U?5-ssF)H9Wq7n$dyyyTa^GG&@fW$>1 zN>ImyVM%Sy5C$X^BRN7T0Lh3fgeV}q^?dBeu19AH26BJ>;kGdza*eOM;AqBo+F84P z!j;A0A3z#KM<{HgMy>1%muqp^=66J>acaUnG^FZXUF}zwJOK_s)nTrXGXByR-}%VrYmF>d;{cL<-;$1IUyvx?>r=+@t6pxCH4R(bk1j z*(0PrIw_}D7M@ODxqbWUwYzsdiB;DY%32ISfSZ=7L}|>bR?+WvD=tnx8U>JMSnOuB z*-Akw)mr)1>V9d#t(ad`eKmbe^Y%g&NdXMOszn32CA6uVBPe_{+ffc5I)HQSa*d-b z66r&hG@x`&D2`-3jyB^{FeR@6>9@Ym(k(=!e2nZKo6H&HOyY;^k~QQ95|DB(yTc<7 zLP}wA8A!=u%e$+81@p`VuXF>F^g<^5%}COX!N{E(iO4e~;z7cJgb<8;$Z82d>QS|a zIVuDsBa)eG07+-^V~7+pucknxB-e<@7|xC?Fb?$zT3NS3KF^3;bQz~Gjbf}A#>N@_ z)V6-~5r9NZB;p0yt(r)|#}Uwn zU5hPmw1Sq=;i3NCfg6_w`jjZFt)g)J zMAmU6t;3Bkjr1#ZJ$;X!P3eRATCLK=fd$E+mXQ2v^^47NZvTnui?^?QcI)?RKB|=u z3IaMBF$d0wjLo9aq=yriCI5!1OX6k+HK$WY2gM^b z2}$PS#D1Rq$ojXb=nM*g%EK`d<+;(d{ru5$6c^~nitC}B1B!R}L#~6vtc5a&NVFl` zu}Rv3k@uv=_+b(r7?v^q;$_ zYV^-5mS@~E13l-J!x_*Zz~vC&XI0s9+LIOl0LUAc&Z`0dGW9*;iNezK z$DWniwNLKdzklt)H7uO}Sfj0bR_aX@m4muqLUivX(X=@8m%a~YXXo;XSW0LDaU_Fk z<;Ku{!=p8;|7)A0p2H2_i9UiY8Y8NNJ!m7a2(K z_^+(J>s@|?{D1+;g^28+30M2^uOAbSXQiVTH`!s5+iXcVmfZ>x4|d~30!S}rSI~rj zU9`Xc$cSVGkpyH2L=umZij0v{10XRz5;rm3Ilc| zYR0j>5_OS<&;b>wqKk0r^2HI8&Fr+B{fnZ-n1zlsVm69ip`1yg0yh&0y8A9D0|rA$ zJEC-_%av&D`{`QBS81sBFc#b+Bxx9c!aa29d@entJwI@vXV4NvM*>{y3RGmXiPxvl zkg>WIe^r}aH`0T7_yd=atic!q953-pnrd0QcK`0jcdlH$cK_OyyRoNx?gSR(oum@6 zDzt1=+|%T4^y?=3FlgqHX(xlA!U;SkoK0h!O9q3s9JsZ=ufFy1mAAiYXt89L1`hiG2I~H5kkj#&fpRy2-9#WFOCYSr{DYBy~w^9SV|_-XI|$ zX=Vy(!7xe==-`eVpC!BV?$j`w4ILffXhczHR4HC>JfIu3C7^4rm(Wgo>< z$E9V9Er|6B%YE|~)yjs5d|o;#EJTGB;S}o2klaiUx${V^A3?(4(+Y;BfGQ6>8$oMrZM0oZ(`etN0aP~j4r&uo0jeIqp`Ojl<+!#HbNbFD@>t`+6r0*14hOs8i!BsV?0ZP^HUg!AjJsoLclr@H2xe}OPRVWlHEPiwM&n%t0aA~MVhb@DxX5ORSte$|kh0SK`ByWk-B5kWp zKY8&ledll77=Y7`u0y6mr<-fne*5tLXHVCz+<$oYlY5_dH0eNn4M)&QrJAaw7Tf{l z&2wt+=)lDf2WKaOI55{LHG$TPLr?Cd7chope}8rFk6)~QwWkTF)0#aWXh!{pC^~{- zV8(_~u0I|QWseKRqPdWTP?tI^HmWYd%wz*dt{_od(E*Z#(|0xi&LHf#H)nvv zE_4?4d5ddE67JHle#5uqZkjG2|MVD0;)&aDUcnM9(nCg(y>KXH96QnRpJP8 z?8#%0^z7aokxc97W-%lH$H?6SBJu^zPmx9pLpll)L^33yB1!Hyn@mIE^hiYFYm6tW zIm5ZoW)2~7hRGAy<>Er-tQbGQ2yJLlza7oY?TAP>G{YDjnCofR>I`19(FkoB4375p zO)9;Mb2GLL%-QkIoIi(c)gzu@GzEQEKS?!xW#0n2zmtKAPxWLKF+dE3%&B^{H&9{L zH))&*)=sNsz+7vcv=Zf$)@fo1ZCR~gM8tr#i#SB~O=>d&0tKhok13qi?*I0;SEi?L z-~E?|pZ@X6rz==UhWG&{06mSZEu^&SB{eoQcrOn8@b!mV;vzne^-3y6G&gIW($f|9 zKK=?{EIi#;s7nZk0Z*1l#LOuWOT^Ajw8j*+v_NBi%YdawteV-*|=ulroR(&h;Z@Y61ZA5lyZ5X8h$}Dd>O;HwZxq zkyh|Y8El**Nk5)Ipd-m<(+Z@BL@jAZ)RUo6%Sgq4*n5TM|00^V5YS<>oFn*7ArEAB zpn1hYzI*Sda+Kd$(re&K~?ad2OZNTbOVx+QC?RF-F@=9{;6v6D3 zy_H1W*U$**Rce-*e{ypucP_2IIsaboh}Ubaoz^nGd_6_uDHob2*Aq+V$!$hA(5^2Szp8B*I|?&ohan{bcO_ulAqndv7;Wl zRV3MLh|J^PqYst=3HkFBR3vbuCkZLaV{p`2D-IeVH5hFY0+J#<1S^pkVO082rnB`N z!8cZdHuWrQBh&m!%vdd> zBF5nOG(q2tN{#)Vxfu`UpCqf$O{sFGzEaWTdbi=CdnbN$Ngd!Jr?@XqyXckf^M z&bl@LZw+ytqujy zAK}zmqxhd;B&s=RpBynQjVybIhb=CD$P9Z;ky$%w$SnJy%Rm;<#r?m(=~!$&E1+Yt zW&H@@c3M`69c_7rNeRdgBn^2M$hRdPpKXGTNO7p06UwY3$|^f*Z?e zOVUx0U4BiM#pY(41Gxtvbp+(sH25Cf3Pj=|NMvO{9U_TGfqB_dzD9DhTQva5#_f@@ zhQMqyAU_;^7B660ooi~n;0nQocKG3WV*;*YDIMK0BYuot`%%<~A7T=UIN{4cKWcNy zj6>8}yk3)tS8p_mkxvuWjC;ti7ogd+)rB&q2I2VTtCY(L_fjGW^+;Q3FvMp*c}bzZ zFyai7f1QsClwY5&!}y-I60P<|-h5cp6_3V7`v%UB&MoILxfDe^zSQ-H*WbBz@6#(+ zAAb4e!>j*t_0Hq>ryt(C+Ki=h?!APN)MC3_AUS#YFF$;Ta|bLyjJb878AJ-&AsFm^ zLwRX_A0HWuXqvD_1Z>cY1cS~%QY;w^UX#g)HL^McT2b|ciXWRCw>XeABzUBOA+nDx zF&Sc+R{+^*o|kdsgOdOM0!F#Xrj{BGN`WS8aUSaK%i zoHlPle82PHG;+6w2Yxt^_&}XvNKE3FeOQE z=sm6Z0EberH(S8T-H)yX{fEP|Q)vCi;Jpdd1p-DSCCpxnZ6}(Zabi$C>JRMpITIS3 zu^mJl(MHVyLlSd%gV=vCGiQRDj0By*MGe-~Eo%dYbjhGlmevxUJUrZ172{BS$m*p< z^*p*|=5L-;te%@0x;b=y*dzuc$Wc?Oz1Bhtzku8!+^|^Q)^?1qZ-4mp#Y=rN%a+CV z>FH@~!jFOv zNq&ZeVD}MJBn`gDwwga5(cF7>dL(&4La6P$n#;y3-q0mwuOp#Q7RepFJ)rgl_?3Fv z$Yn21nX|i7TX8>%$FXk9Xo6whu`X%r)+LN|ilQ9C9E8QTEjqnkF;mJZ17b-$YY z@;s--I@P?{ZJ3!fETu~sF%ZaUg#-qp#+oP$o32!X0mEJzCi}vZC+|H`yw~qO*WYv5 zWJeSc8muNzQR4#o8Bl+Q#?>~e6ti)(rT%cEPj4|TwxA(}nlJU`^^YE2z4z(;fByXQ z|Nh|G-3K^N-o0}Bod3nioLXu4>VFw#(6(l_&8e2{MVrlt>6a6(xDjQME(C!{P!aVE z(GBFX0c1yhLUhs?7PV4>SN3USlTGqQt=K(%i~|V`DJ5!nlNaZa8V(T_mwg(hAi0K= zpPdJ|lxdVT4Qo1$DCp3}t+V=)GvS)i(sF#2Pz9qM;$yM4>KneH*RzLGkG5 zQQtt1#bk+4DNv;4Onvm__50Ugus{0z^N)Ue|L%i_cW+<0cje3L)s^b)l+e(wm2U-- zilN!Bzy1#0kOU<97ZAaOyG7AE>CRyRSi|kMc=3Om zoLRObhmAhBq6>ZKV@JDj;*rwXyT$G8aR^i-ki-SS55q;fmI28%B=2$N=yBn7+GoR% z9h2SV)sV&RbY$~HHV2Z)WBFotrZc(a#uG?(@#q1MxP!^=a$OuE@#v0=%LmD`xkK=% zEiGG2y4g{v$ZxT%W*0<4I#9}mdsGqtA|)VWa%p6nc+9fnBWr#o~SCG|Z<>Q`#tFCb=(v|dA#Tz%4y(WL)&?#aI?6z9%g);XdZ zF@Yv$M1_+kMi-!)70GRkDQmXl+vCrE_~GKFa(ZdRFrq^X9ZGy`7FrcMF*X(s!CJGF>;Y}@ z#Nq`K8AeDEEx=pe-^)P4+;Pz4A94Eld)~~#!;o^V4@@=(lKa^5?gci5?^U1X0|5E| z_&Wcmw$Cfy=XP&4ZMW@?XT6P^lOOuO+}C;dsE-x< z_TdBAjuSiZ(mBuh_C9X{;G2p>KDA6GJnER+>HunI5+voLMI#SKa8wrZy*8gMJhs=g zIjY^q0`f-xC!c&Wa^@m)9^}JYNJ`h9OcF~mc3EnNoYv&40#ZuX3>b@z(%3JbY#IlKq9j?YEbvx)-;*bKaGY*tq%MQpegCmrY%fo9f%l$6?W}8ZDa=mqoe+icd{_EHo1X(sTV2e^_exwh@>+fh>7IY z%I1a7KLCDEVkzDO;DxCrMCg9W?RWz-Wy$s1iI_wjs%Z zkm$P@j1^7)w8t4JiQZ?p=;cxw+6dO``BW-cDoqxPu_!VWHnv@MJ8XUmgGalZQ@2XD zww;bCCZsV!tFdx z%Kch?kG$vd`)5b~I5OlhHoW1z{oPuJCIV=-iWw6e1-b5@fv3%)dh{rZd{PbLt*novA;0&Gwvd`fF_1Lp;<2rm=FvMO0Lr6iY{96*ZQlP$ zLD}9%E>2syZmX=VKBza9A%8;ku#HG~k0}u$ zUfh|xHaC3u@IPBX9{T6G7hZqy4e4>_0 zW29Or$GdC-K~WMSFMh3pSPtU+pmxsNQlH`YasO% z5-2PSX(6diC7!#*Bu5n$AFtNvl6LDR35Sv;=g~yAyX|&SOUpv$ru_if|G~&@a$+|L z^I#AJIbt6VekKKN(W2tuwQKgeIyH!tx?&b!i}h?U%CJlnO;QAtWH|yo(j?-{q&JnN zsVwhucb_=kn;UnR!t`LIL(x(&>`k+^%}Dz~X1Fv&lb6r!=;~mm-|4_tvrhp-vpRL_ zRwG<;|nmwo;EwYi^-UAuJt|Ga!@_&(LB7vBEu z(%ZNE zbZ(c@B_qgqMP#FZtBxkUrI6B5Vrd?PiwlyK#7xS5{t+5!$O){he6+C<^7#GJ0I3`{ zcSb#3%F%{V`{{3rM(AE2HI)5bE9=A222u|kipSPTNDIh!HHzx(k&wGp3BYR5YjxAzC0tLlH*(7@_97>~=f5yPfV;+h}0QFhjP0ExHhE+{+`*%Yr*^I?~;7 z;&PYcGW%qBTeY3?$72lE6w6ysNbh)NX@CE|Og13KkzITL3#pIZ^*wCXcAGn*LqQ~S zX!!7ZP%=<QN<7tm)^bsI+)<*$pdF*x|wM2lG6&E74 zg**q6no8>usUGWqq&3$7kJe~|inFh(j|Y!lhp02;JWnK2hc&V~Q;1x}OZN0BBGtJm zKuSw9K*~9A+R_;=XAhUxvXE=2he*p=JdT5o`c{${#D{3=smo`chG zJNkzDZ8l$gIgVO$$z-2FIv7j3`}%r%B59AC71cJ68}N$2kqEP$4(zP-M#1>HC)oA3xU$lz7?DOdjGz?F$+Ys z!9cKvt1``z_xKO-yo^Pj)?^4JTPUYvOK*E=t7 zR$R0ORbs_tBsl+2mZdD&-`?E;M%2ZThMr#C4*as0>uZ-SM3x{1ka^d_mVI;DzZfb_ zhNFIeGR2Js<+t}g{d7L*3yGY&f7}yVDa;Fyf+Rp9rjElt^D&zTJf4VudusYyQd$-R zsj;&2vYn5pP1#KbE{pL64-aL2iH}C$22NT%} zYXr&mQX%NqW&X5E*$_VJCWAN+swx$3unY93u#Y;U8smW!f&xwj}OL6Hs`3H zOn1c_D|<%+k%(=;<_R**Wk#?U-pOJ$h3)9?7;w8Iqiln7;@Ii9J>J_pK+>oCXoqc@ zp!H~{Czg}{&Vmq^7cHr<>2vm;I{A*{tz!b@5&s>J*A;6N1;`~)WXo*Pj&UzPiwH`p z{@(!kF=4~xpJZ$IKEi$bV}~x`vFEPABSg;4%^f;)===+F6Ng`Z`PJ7i-G6t1jb8T# zW7Se5`+%xdlX)EsF9Fm2Ed=ykt4=41eX=yfmh;78ae{vmKeOelu2Ly!6j<+7La=ff z;^rUx*ZZtN2}MS2PS(6{ppLdCi66$`Rf`2N(+ZgmIc|8oMUWvtw&lSe)hm%t7NUO* zNMafRQt`++;86qlJq4tWv47FBkQhji%>v#sMBe4ba!<)+zgM~PIN@QK7X#FQcjHpN+S7+;jtY*cH}MRJEu>d zK6bh*#3rv;p3xTaGC;$U1)4yr=;rS4R+@kM>f*;2zxwLt+Mjp+v{&25#_x>nzcBnW zxj+h#1U7i>vGcFt$X|T*hBEG?un)r~W}^q_dRY?moAJ8A^8c9ZzuVY_@9 z`Jc<({!+M-q4xsAiQu0RO&Zat*PATVnltp`V-DYEFuSl3868DnHCmVqik^zf{j4dC zkM|2J2&)fqksn%}%3&Z6T((B?5&WKH9W|xju#n%=KNFA*EfJBG{N&Iyx&ez&QI^1Uz>nSgSxQ3Le*GT`Rd}i8t6iuD9 z5vv%cX?oKJI?WOHxRFhm9$R;3cVECZ8l~)(j*Lc19!H167VtZJown6nZYr1a+o00n zChF=70Chl$zc8`8x`>5jN*rk_;=dS+_Amwn4BryziQdwBDsFFr@>uZVKJgfvEe ze{AAB7s!@{6e6z=zj%1;+VG``!#l47B$DJtsaW%FWbxUlRI$0olvmNtoyBfe%9UH& zC`bb2sg9|1jH+d^F}sW5R@RY*3Y4do<3ZytlWrUH^C(5~0;dl-oo3$1vr!0t$`z7F zjl>4gg(Ix&8yel-e(q_E7C^QauODCMFF$H$QoC%W5+HS&XRIJw6ZzN`68hCZ8E*$b zKL7l?&qJiVfg?up97uwtE-1pIuGy%MfGEZi3yG_?j>Y6(5(PTc)=ajGSZJx$51-CW zZ`*o%diq8_yUoy-6k5bAih(2qT(>MHLP`+HIH$NUNkBrRte0F)#FL&7swRcCI=9E> zgK#Mt%*I_|CjMg??=-hXGgf9G49PkpQ4gCXejV53a_mpg%9RvPo#1k6~*edo0eO@eS!y1~&(GwR=IgUF{afy7V+g&pA;k>=M z#5%4FZhN-2zcWiBeQzmMdno%6K7AstiVwT!pkj8D>q*Gx_FZ;|;a+V`lI=NF`W*(K``FTZtkG!`q@vCJ%>D96lrEa;W5 z#d0>7CJ~nG87iFJSRuO}WXaP;sl-m6q&GO9}E|EDm$9oXPbB}sm(++>E z*2pxfl1R$q^}Ct=f9XW;F`^nr$?FZLDtQVs4Eo&PK{je0x~j$fwT>+u5N$(DZvC2DW^qb`<1cXLZU;~7S*(_kk;<@_B13osjxHry=|~=JCwUHTkyuJ-R7AE+Bu`5@03t~pwD+QM+8Tg( zgvh6#v4FfWe*3fA0QosSTV*1-@W^h{iv2Ki+(Zu zc#6i}>Mj_{NUXiQbAO?_!|Xvh+x(Q#^R@c^E)f|%m(XN*e{Sq&bKd}Rm~`afONS4g zfARHMQNKvI82Oiljelx}!?idxHu2oGCfcm7qem{k1(GLE*m6^qMx%-%SF_?uECFQ< zDM2Lpr!q^$G~spBoSdAWiF*-Y#lNIdWP;|EjHVjTUL$9=F>dSU@Y4LjkDq(G)$af& zEwA0Sd{uuG>uAY`YL^X=SV$#!kAZBrkQzvvW4Tywh99nL3E(nVQ0YBfddC94Rt57*AllSti1bX4`& zF6|Caj17y+)63(dLdpf)cH>ly#Qn}Gj*cN)^!>n z9nRhmed^^Z9zGOn7SWqFD^bV56xU@lH<*v*+|y}QzLL^E+W>IfQ7@(v4+N*^d7!gS zl9HV%Bo=<~uiyTz@}&rosh&tVx_?HUb|(&z+HNYB4UgJFTCEkDM+IcdV?)0BV|4xQ zsh?i?DNH{5Jm<=}=LJXgv@xlJZLM=55eUX>MJ^jnzB{$* z0LUTF${C2HUFUNo4LJq&5qbdfVo=1pQmTL>O{NDjHGG+i3FL0?CK2MKg3T}0nh#hA z5^_2h6Fa-HX+&$Q^+a*0Zqm_DXJS2N`uZIKk4LVNUT>)sqJz>GBBr6(<_Y2KNM}aR zBxj28kk3pcV!2iE;CXwd;v!uX>K(lmP1ERAWCL|Ln;#uw+WPouM;GCBWGm?$XPbx8c=_}zq!0*l%CkG@1TbAbF+4|*t$5T(&W&9fn|p0cGC*9x^2Z|yq| ztkc>Wqk*(swzUXW=OH-&*?xtDM`|>h1%P}OAcaQ^C7;e&NBlPLxaAUJ9GPCa zY*3(o8|}IR%3xRv=5PuTlIW;Emr4|WN!k?I)8MfIvSlFKfPD5p ze)`jApH(zID*;aHSU9$b;d{&Crz4S+1qMi^TbrJcC}BM?fb-bI*H8rgVnc8!xvL+mWUmljlKviwqF8Qc&x z3!BE`YOgIy9>#0NUGDy92IpC08)2msaYq0#C%rG2g>iSJv=O~~wm@e=Boc7&4}7Ej zLq0lq6IHgcrz`dvBVgwARL;d>LDU=li>w8X z>r`t@S|iJ5akm=Yt*r%vwFhg<C#fsHOM;G&Fb#`%?}$)%-UUp z_ZDLOZf-6dI#DJuhu$zR>-fc$_4m~(rO6-yX-1T+>wo^|8*lvJ$KO3jTC3oOSX+Q> z&oe)I;8BM)j}~eKNGqt}fTNX!)G>{fg|t*#S{CxBIBbx_Ov2)-fNRG|fak4-?){$rxN*oia-4vb~Y0 z=KYRPGQ`kpjg)lA=BZTD(;-gUG*G*uy34xkGog4rVS0&TLQ&-U@?ku-%kTHw0(TmA z!*KP|mXxux9PXZBWHO1_qLG(!c}aA8PMp3lFg|onpR?B#AV>Od`0nDgZ{nI|sG)`e z^JJW<>w=HvTnX_;GeN`f7K*hvi9~ObK8Qu$wX1ft_&_!^XN~Z%9drBI=Ph;m1Pl`+FID!S$bt> z=aRZYw&SRPJTyVI~}aWVA?+C|()1HDI%U3R!5!Aw3J z&SVq3Lh|`yHDjQKwz&n4vs?GBHjweVQhwX6>?ARJRduCs)#1yBs|H6L5$F3rW0L8Un4wWAdgxt2#hyy)rK-qHHQ* zlnVMuM2>%Un|=7m5cA4Kib`+x2?SUK;x}tc<$g9k}qEQj{4)yd$!;)1?U?RPf z^=M|k@k=^iu*mhZ zVz|tB#ULT%c2B!ZoIicKcc$`7i%x^Z$A6$75`i(&NwIWnZ!eop_Fd>adHQ(Y$nDQQ z*&yf-Q^upu;r>?Mtk!^MdE|q;XV)hgW33lwXPFnA9bWqFrSs>njY&?t{iy8tp|LT5 z90p#gk`@zrgMZnZiWb4CNOKdRO+Jw*+57=kyq~g75l4}vPi4Yc?yWU64q^)!VKtj+ zf2Dj6+t|3Wxq0=y%}Rv`JYVE$D*eo4CvH+z4B~S*h%6*Md=K8hY5$T<*3YOWG%=7m zpnl9>Yap#s4c}go7jFgGO3j%g4!dpO5DWRgsMA>EhT<}{h5U)|C?DF9d|sV%fB*NI zNKWe}DShNXiG^$*ZvaZrmfK;$7_mtd^D(nxmU78hr4;Dx?q-%j z^^l{&7h8%=eVA|9WqnwYHj0K6_V#K8?~Tr$x`CeqDB zvsp%wU;2B)>FM0+1zOb|et)inMKp`dIH=9c<%V5!*d@QT^$K_*Sw2e&YJrpCRmwjE zb8IC2_-v~<7+I2vcJN|pdV4h>Ch}kZ;oBI<7LaW)N`3grKym<5(vV8;-kQm7WqlsK zLs}lYb%ktg-BueB08$P>wut0B0;HHpymmX1#M_*I`jKTMAK$XAlLLAN;}PMk)*iA} z@(CcPX|Cv_iYINlXK2o2*$=)1mwgc(GvTrSlRg$eC*w3uaXy_1$||4&vf*hNd@Z4> zhlwP~<}D>nlZLWr#ax^UOx=m)GbJ}kM2F2CGAN{&1~xB>AE#e1>N362Xen7R(sWdN z!&Q=aF5jx#OIF>R#uJd#(vv|jp^_ex*=g2H-Xn8NZ;_Wg4Ip zfupB-#y5i0HtEwXmdV;w%vzP5>vuo+=ASg3P_!XlJ#(`fi=C@L_SzvTf|n0X|@Bj=yD+Pw%ABX{K%bAv{Cvw zeSIV29!Zba=?D^-Hf`+TZ23GqTVWC*3SA2lwdkG`wM0suwG!=O}HM zC!EgCA+p}#GT!~ZbVTBiWtf4~`>dV6<|~^E<%QoiHjN7V6z#1eUnz+SXM{)0q{xr+ zgF>2)a{8`T=^B5!MGHXc>8>Y6*g6p@j*#ysd2vgtv=!5Ew1LzU+4>3z3*s;N$x}c4 z$qyBenoI4w#YQS3p|Slc$-!p}l04R$ZR=?tNz_Bz9KC_;;G-NN@;grvWK*c=>ga$- zLhA9`9!#WMxYw!sfAB%y2mK@CEXXf}51Q{O7?P)1*+_2S&V9_zB$F%!VuLT{B#5~) zDlr1+=yq?nGdIY6&lqJS!Q=DzX^JknjBq8LEJcmDnAETt^`wI)DRNI_)X^7BiS!vu z-WulB*qx~lW95c%C&M??7(^R#GlOpEot#-^_>oSArD7=gFni_(+KhASYFUM2QCkf>Kl$$2=GojwS)D6bP=H-fw-R{`?Y(@*2Gb?5lO(UU6h2aWnD z1F0-zE2jB=JCF)TorNT(X$O+GgNC1{eke!d$a8R17D%0T3#o|Y4I(W|3665wcN<&D z{P(o7g;p)HptPv`M|?Ih4QcVt&d!dW0YxMhlGzUqS)Xx~E&4`=#$lAof+d*5ohNyQ zUE970J~zcg7h~87h$J+jSDF?qwg|;4ri-bWXvv@t3u9=Q6eOt7_)5M=I!<69s=Hy_ zvxomk2nFP5ZrU}NcIBMt%@Y7L@|&Cad-lxW=AB!cS2ihyY-XrbXL7ka`6Y4L_GUIY zxx79;^yTs6$By^)k9=~&oAlP~<{%BTOdG_iaI*H%XEz^^cdzep$J^q1w*!yEWE_9@ zL?Qw5@Wl18*M^68s@1(ESty5_CaoQ3t9X2p0%$Qs$5J$K;`FiOz0Uqf$PAU3P#3+K z8k3HUI3S?0g%T0VMT|R@$|h}TO2UwlO>~L2mSzQBHHgI0KDLI?HK0V#IP4@%haywV zdEFxKW0^<}-i`DBvySaRwyuyeP@@ebN5?dBh13cG!lN8MQ`81X!4W(8O&h6>1?0Oz zWIL0VRGK2vvXQ{3iEJgx_0d;JotorFyet4R;AEXkM|aNvxt}2{kXs5|Fpk=!aBK&!Vl|G*#u95$}H292wg%mT|1Sf0tY z1D0=QMAC)zwY4CMEoVAU^qf5TM`p`!Y^0-5P^**!c+I) zc<1ZkvEgevE#A(f>anL!_E$uNE6c6f3z15G#qE7kyDQn@XP_ImsD% zS)|S#3N0=!=BA0Wt+>Y8&#q^^o@608mW9+Y&2v&XY;)Q0NRrc<$i@UKAlsI+0;DS=PV6Knyw>Kqv8=}|mlB9+S~Wy>L` z8Nr8-%dHX-Sa~T+mO>I~Npjnf@f9V9Ld$HtFu4qoMFL&JFb!GMrPL!yFs73Q;&AHT zsO6FuPQ;^rpDUP3lxabiHi|fvwIclznT)twR?^&=V&98_s<=d}e|YmMi`$J1sy^%- z-XvPMQfx~_rNL|t9pYhCny+rl~2V1M9meB|2f>9*XN)bQH>yInsh0flN;{)SvPcmDF zNB%H-nc0d=th^+iqF5)3T3O7M1}pbwYb2}k%%{O4&?1RNSIWb^ho929Ti_0PvmnVx z`9DD`phOEOKtA_f%W2C|NPeSFy#2I*q|Tv$R1=39NWoEiYzxSL`-_28F|G#kCl-=C zn#q=tq{yw1)J9UfZQ^aXlz5xNhqj3OvE;rM$hWpWDI&Qy5M@iDh9fv~0FdH|;JC7K z1`~PP=c5BnE&q|C;UqPh`EYQB?H((1=7JNjW#!AT{MBQV&*A$ zu#&LoDlt)ojU;Lb-aLDEgdGc?eDKE`XU?R(2I%Bz;jQf!%X`IQaOI=*2M1a1xL~G z-@yql)%a5>B2{Ob)pEU-AfZaCt5Q*!EVD95zAHmRyQs3)SYuV7ChYH0rUuLG$p4HnV@@_PzMIqe=>T_N>E_AgW`@FN!T-~auGkDPA? z+!m5jxOvxN@)0DhM*+!$oorifY*i8U(8Xgi2ja3NsChcKZ5vQH3Xnqww@9&&YF^lL z+XI-ql4Y!c*Kv^Odoo^FkJ7y8O>RhGHc=OC=Q>z|Se15eu+7$3^?^hvz$W;1O5+uA zdve2|+$cG6@#2QTrOC|lEwW==$U&kmqH?O?ez^q(ZU@u2(bF+-H zPn8;R%z)L}66@S%*4NK?KKb(amm?$N>xJ}&mr4njx=L-gT-jUBdRNxhmz(iKQ~rp? zRrV|#9@aoUnMhJXq$4lAu7GSX#5(pSxAu77V63Uy z4s{uE(S+Ga8Y%#ih0nk#vr1IB=EJCw1}CwS!SypfTrvBP=!wi?B7{dSli6xM7*5f@ zPu4rae~fV(+Q}KoAr>zLz1~S???d!G8c`2o6(Kd%{Qnp`8>hDKGr^~u>}B@0%}b|u z7egndof-yG(=!|ajxL_2wS^Kg9@7dX*@E2NT;EPjbYGLvwQnf@L3d7j_*=Pv?}?;eBz+jVO3;dy`QJag$CO!c{c z`_<(OZ=Sn);nZdH21$&8? zJ2@6g`*CMvDBK!qi}`xzVvJ=~<`mC%2P?vB1EdvkJ!pe`A0scD*O^z3G{i!<#z%7V zbIV?vcZe5QGi=q>{E&0`owibXqFY2qzR3%56+Pw> znE@oBOom9nuoXyR8h7H*ifYKMi%M1bnuAQHa;F*+C|xXJGBdQ{p*a4+jNRy)O_6K7 zt?3_#G#MZp*q8_Rwvh}T5wiyq1*wT~dX_~qN<@Qr{Mz8dE5^%(FvCE%J@Iu6e@CV| zVUpBOJFa0;vNthZH{L39i86cG(AvgE`!15;abF9UM{oc_F$TcM0@Iu@62WZC1{E4B zXoKw9f2{S`b9@UL_aFOJ(R0rgo#I5z1#H&U-;-2kA+BB`87E0iLGC)VXiyjmxP&*| zWPp~F4eZP<%g!k;&4f}Gr%UD6y>lbS!5X6ukx)?>XOEA^ znogd?OtVL~qvPZ|q)JX+{Nt&8@10`GheFREfB(mS`y=ztvX^q4r)gclh8hA*IWe+u zX#|HLlJKW;R%cn3&VI4BK%=jbX_h4#IU1vA<3wyYjs@Pa7j@qt!f5qU_Cjrr)b3&)9y8&Wwr%nZ{zN*g&RzPVvLA}d|bNVyU3B^LKq z6=&fDF*8(}T~JfFdzT~J)G5d*E^DR-KkVgIMoA{5D27yr6v)0fzt#?s7toOokve8z zfxKUkZGa>~RTuIpIZNyo4qf336J#48owA|!H&_jcZscKsn*+tldj!HEQxT*v!f%oN883^8x1Lm9YAE`sES%@(UQXfCSheAhyx@i1w#1V z^rFQ>02z-Cj4;$dYMe|YI7%-Ih_(?2M3`PenKEn_7$#q|wm=CyNjoYyhACe&U&5b` za>(ob6Es$nMwTP9d;k69iRV6e?OYM(+fRM)0ZHNuMaP)&d!Jq!GRo(%-q0ztu7s+c z4W0d>mKy@WK=*8McdDDSiVXqJP)k?Gd2)ygsAXTcxoOC!ZC`BPA$N)Of8p290OSLB zL}2#tw+{YXB5hodxXk=Ay44?wHS~@SRu86U$5y=a={j#8oxc*w5jsyV;ik&xZLz*V zZ;+pFR$ji?!-1S`*0kS54H3wr~M{hpDE35`v3{amW)p#X&;qf}c?dR|#AG!x5 z;5-0G+86kS0+rE_(tGBbZ0kf?AdTV`2!#TL(lyyXb#x>T#A--4u9224$K0O zAB`gIl8csEL``Z>I_tF{;aUdbm($YT=ZXr!hq{JbG7k>V0M?>yl z()NyPv+nVqANM@ZzElFeMRqB=aM|4m*;M16P5hgS;)y^b#XXL^^!ud_yTet`dLeB3i}kt(J}BQC1E_bz%_%f4a5v5)+CS zPY_wZbFAya8+$I(Mfu#xllxD7@WzF6=dSMGf9}G$mT*Iy0a9WjQt+&%kY&E-sbmw~ zlKLaO9f%K3jwV>!pGZ%}*_0D3u4(|1^Zg6q1`+`wzdt$BQh$P?&KjyuF2iq5{F#y0e1U-f7;Ud-eqKdUQ&3D!^{__+K4@CnJK){C4> zDuKZJ$S%Cdoa>wzU>j$G6AaAIO;QfS3Q0muk2A1kT!6&+Zf`tAs11>(h-e0D6iDNM zZ4YW})(0R7vQ3n|Gsrfp?nOU>f%PE;NRZ^|KmXKPZL1^Y?HAHhE)P_s+HD>?O4~-n zk#zmY3~_nnUt_7%3=|sjDw`{s{jyC{d6Z;NN<`EpKsq$?NcPgR%PZ!S8aMWQFoa7* z>6#J@d2rG?p%8{R%mkBu4 zpS##`lC3V>$!1At7ds(J@?Lx6$R61;o|{XeUKZQ6(J?qo{N5HN-qte^R6x#;bO3j> zcW`lXEM3jKuITtwMTLK0sehqkfzRQVefLyXZTE%wzZ7|q89{MTrGDs?zFzFB}NSaPbL~-OD z9cgPeTamOaK&mA*A8AduekOjT&}c2Uqa-EDeuR~Lja^~iAc-D`Kp8z=sxCsw6ZckAp;=|cNebK4|jm$K}2wd3T(>)aT;Y0>F%v4bkB&R7l0Ew_q zK>ipzCb<9A#HuOw#dCAvWC!{2%NH-7y8J=uQODily*4|Kbpf;n1-pj$>*jg^J3^Ug z37-w6Bt3`hFyWx#T<_#!dcJqiJ2*+R61n`U=t9#{+p*9HXPBBev)B$=1j z)HX>EjpY7tQBhnr@r7`kJbsxV^u;+P7xPzOtdnvc2Cfr>+$k0XIZDcirWxG^O&&dp zt~?Q<=6LKRmsnYz%gu%I>|I;b32PxrkG#RIToTY__5PvJST6wpBi7P?!$kznlW?kQ zVXD8sZ*g=q&^tOAm`qJB4*7?IMV*nUR$qLip}8v_ZTB!sK5+WNfnz7%`O}pbDI7jX zLmDgr^6=|F`dgesS@PDDSoQZOLd&tizO^-)LT|3iJ%wAhR6UO9QaFAuSe65i${|2* zLsB`dSw%x4TpO8$>FPu}m7eU4u|w{7X#$h-m`7j=y^D>Sf_^&_^j%0~*645uhF{UF_Ax&e9__s!M-} zufy14&Th2;WJ4%|DaH#Y6-0wxt;3eWH$eit5Ba!r~Url%GbK14q<$w08h z56tNBq?cUeAg9DwB+WosW2=9U#}o2(wH<36IB}$<`VIl`jeWC?Z1(XajF6{y>xqNgy;+)*KSm&%2o>nM+MRq$jopeQIYT{m3P^E zm?j!eB?j>wF+LQ-l5?>*`5;BIo%}f8n*Gl?lZWo)Jx1G(cqx&5VS&_>NzyHjSPv3s z(&?=DkJe&48-(18+^&X1gh|Az$d^S!nj+$lCAeWQ5gt`V0;HYW=FMSJY1AiEN>s_@ z(WD}cdUVV2q9MWaTS&1fp|&vZSVnQC1?3uml}M zHAP))@R7AP%gL~(yGo{T;siy*Lga9&E;WRrr6MuxPx%wgRcsWev8AQ)2!3M8?!w*Q zt=&_yjmKRaGu*;xL1|7wnYTKy!vC*Gzr?iCHZwH^k!wj#pD%wjC-(!XqcDnwtJxW= z_cR4*!(^5*5{Zs6^=Dxvj4v{BqNAFdV8GWdZa(n=Bp@b^>T^bNqzw(IN~-+ z^Y_B-fu-APH*PM@=j=A>u@K=O#Yg=NBrTDs$g%4=#M-lCV-?yw&@HVjgU%X6i~#1x zBVG>Qk;};b{pNPI)9{mFvXw}i7B?F5DNT!mq;P0~bS?H%X4O3w+wIjhQH^RybR-X$ z6dtYN-a@2|Zfg}$5|X-bC8LUHEw^a`GVMQlOm<7#h0XlfY^3^-VzKuNkh~IpDPDUW zAoXAc$`P%2Q!dtsD_K3vZ^q^GC~e~m+%&e+!q<*3*jD8Cgd5s}72UYxfx0TcpL%$r zs!l?qMOY*`Hw^DmxAAvVpsa5W)>jr#yU5?A->K~EZ9LvLOkEA4Z2^36PDWFv8J?b+ z9$2`&yv!Bb+iNk1kM++r%`HUxfry1_!J;s3uBSZ`?eMe1<+S84zjF9NJ|tp%NRBi7 z=Ym5-qwnZqNwqAkkdof8s1CNl1Uc8Ad!36|^>iDFoE;Pj2;;iQhHivx-M|*;7 zi5d#}eS^cEI*N~pA$Y7x#YYFzZ20S*pOi(~+Ggn;N^mhY<*%y4;VLMpDZ%Mdxu*-a zTDToR7Uox`0{mSoqy6Ndx$QbKGR2NPbk!P{Ls4K@?zza^6mDIppA}d^pN}5H;DLB+ zSFpW-6+d{Y#*T+@1pLY03BS&Qi60 zerf}=HM^18l9GHLMvfjW$R;6abK?LxHYPTEwm1(@rQm1*!a0C4&Z49tk_#be#+YRA zGhXClpDbb;7h#g*kMX)p`OwWVJFPwzNKCd?YPMNyHw)>m=@rD?9$5pVhyhZ)Ne4(} zQdJ}xlDLNCkGpUMn{9i4Y-j_L)@bvDK9RX{0vL-$J_4rqaM3(CgmavCBj~+IGnn~P7iwO21l`D zsi1xb>g4C2#L+N{U@<*5Hg%Z zT(@s8^vBkg`eOh|v_Txc;A1UdQ83)@uW$5M`5LMkqqH@iX5;9Ksv%V#0HpYkhhF@j z?>~3U?_-Y;6(M#a#1`;em-K8nJl_8FQ+PySuEipw3G`!OK39uDY&AOv0mSUwoLs8c zd0E*eGsz#h&MJm6v}9R%WohnA?%7)QvCK$1fn2$F1xa`nND`F3umDLLngLQrY^>Ww zP-D~LG;SFnpAsO2KMSP8;}f`$3Z(MrYDgv06b}_hRgf-{$d1ScBz3_BZw`_wjthxA zeve3-k_1WZ{o&nulTMbv1UG`CSZuD4UA^4SrAU~e%$)W0mvxOg<<47SX&9MR3j~W3P|) z%*-6Etv%a=%#>GD=m9HrYcM9_zhkqnY8RUFV}}qOHR(p#0;H%oy-)*>j)u%I*;s5l z-(?yrGEc-~vK7czcvEqS)R^0<$o~P4YPC%=5-*Zo3pf3vNN#r}O>tY>(JYV-j)qA? zBtbSmQJf}{LsL#ig`^;5vGYm-BEfMK9XT<&I4Pox4svyB2&s-yFZ2=B_&CPGYAA}^ z$$|dr#8BTH1F}IX%XsTmv)3!@s!)e@TrJjs8%lJA`$ z6SzDwpjK0el;z>HZZE*ba=)(Op)0d3+{JD6;1H!F3fi3~I#7|*d#5$1xj&KS7v#64 zZT$7|y%%vGgDq{eR}_(MBFzJg49Un7Jc_JQVX2d%VD4`pd*bth*N=A<^=vKw1R}!-!zO!|d33=v7DrNuwxDMv`~iB>7|BBpIniM8wsQ zx|e+Cz7^MK>xeAkJR$mjo%g@CwNGhzXF~1GQ+~o_iFqY0PMsjd+ES2QFO%t%c{5sYqLAom z@PuQ@kk`k;i3Mi-r>`8hCL1Ilq#@s;CvtBmOVc@iO{re|M>rJGXYnBUZ!Qm}uY+TL z&SOtK{POSq@!_ZURA{P^lcwlKY3kFjvJ3h56^zXz>A*_e^_+Y~k%Nt3DT12JD`%xm zad}0(Y@Czxuv0a)V#sJ(WE2NX^P@|9N= zN1kkGBTTv(azuDUe*8_xZWCxzv$27V*zBD{vKnif7tdL38c28AvJQDT>d_xCV z$HU#iJaM0La|;UOUQ+QYE#0)atZH6(4E-^?ipIE)i>LyUN~Wq%=VKWtHF0Cia(*OYv`$ieaYG`R~ETR>goK#WA0$o2-Y1kSJVE>2S>2TJ`K|4Q-EErBDBdSO4&>Z@v1Z$ExbO=jXfipE<^- zBFt{)qxMT?(T|dKV0l4hE`}N)&+-A+ljl5ShD#&mv^C40S`5h0*M+N2@z5y99Z4Sr zQfw}iWdaF~yn!QPLmK7V9kDeJ#gVs%!10w=703T2Tnde@Cu!uzYO+DnwCf^nTw^Wv z;~Ak1FzN#_)omUiiFVwQ0dfk5EcQ9|h5#8nK%+SAkeU<6yXJ}#LH7D0RX+^3s7PL) zNw1c;y(x%HgjwRA=;EeAdvg$}LYmtdb(Ooq`}XAJW}nR_fW))Ma1l^LBtoN$WQEZW z+uTQi5xZAgQ&X!<@?KjAiIR<+nW;TnyG>aZ=G3JZZ_X(uq{yd*$Z0-Brlx38lk*F- zUxwO8sI`Y0x=0ChT)NcOI{oo+Ha9Df+SYS_ARQucBCniTKsh$}B8+LMy;dH1D3D7d z(WSnznwr&Bx*Yd?>383tYwcg2eLBbwbUHm>ry`%~SH(5_zow5k(R)*Tp+KD+#}kt+ zSPGjne1X11PqME8AZ3>g6E;@?(zV#AG9}WWXrMG}R8&L$rI|Q18qxx(b!-%*1=7`! z?tB$YKJ?0~7;PRf36iQKVbZEdd`Lv9+9uNGp+jFVY0imQ4JjFNYqMo-A5RXF@~$Eu z%|AiAA<>YhxOvdrd<3StWl2C<_mv8L94sc7aXwJ6(Kdj2_E9;=;zx#k@W)oDvikb6 zJs$2B9(ki>|Nam5<;~>voQ12iToA4;EXmF)W&nkT)$6pnh|<7xW3abX)yS7PS-V;* zqAagH`q)d4UF$i!d%H$0xt?B}xUtN}b4mPsx^x~QX)hC*X44bP#j&!X_(&|&5NWKS zLA{M-`5oizwtvPDi9Dd=N8;?)xi3Ond`AQ2PKmBXL5g}bVGXN(l9lk7bG@>x`_v=< z@D~5uA3Xl3Kb>A#+1v!n`R;Cj+)Qt7LgXqyt`^r#j?N_~=5E|v8Oy?ipc+L@q98%D z7CL*_XCy=>#Ay%k3SYKBTAQt*fX(_?ll|0}ERc$$;Zc&1y5?^ykl%JSq^Z`3hLktu z5pjvs*v5^u9WT-j*{DFIQIPWC@yB6Ng?yv~q{P|6p=+}Zkn$|{+5q_-HQ5Xy>6&kk zm%cNHNCIq-w8!p=WYC!484$BAp^ujsFu|ID#;VG!yu4y|LLI2zSDM?Ci`D6YM29Hc zq}m!XZTZZU;6KjRsgUx4$F0e4+WXNB{Hdc15Q>~V%TrA)a_!mYAASDO$FA`=ZL2NT zT%QlDPplo95G+FpF(;o3$4x{`pRMJM4}-d2;}iU zJ;yrphFHf?0%;W_Jod-B>2SPG)E4ya|Mu7anZNFtm!H~ngxD}G;(X zsKw-Ha+z|^CpQEBs^aV(nCv-<@b8n?3nX(vvW&Qf+5{65J^^woktXG%NUGQPhGKd<@_5gkRHl3&QzD&JXH92##Y}PU9Sd5vXIp(6uDSI74!?e!RGqPEbMZw zi2R`It9lf7NX(G@ydPCH30?WPllb{~Rtls>EH0DU+RxohMo>r#M^jJR3h*<$VIwM zx@uXChSW%aH&rjjWIqp(+cczgA-4gkf0r(7wB0@cX$35eyiB+ak~aCXZN^6TqPa|h zqY?8-29e-sfy7vg7ip_C3MAc-+z6&aw>jkjMr0BRsL))&J0^RP_GtCS~4lgR6w!M-sU>zA&ZY01QVjEg5gs;(SgSn6mB zb)6XUgk@vK3D!WrfBraEvaQAD?fyJEx$&=@dFN7RL)$>K6ML;Vek>1!Y|~sMQJ2LH zow{xs$Tv1vy87(za3cTp3xN$qQlE@$pdz~q6v*z$7)O(C-MB%pxR|c%t|~9i$}WIO zG1YjdNceRa%F{F7%(CM@gCE};PO$*EX7rRxj4S3lArGaa6~l0GPJcvlzD}M4P zhWqxJfc9dSgqGPOE6PBHlN0$*-GC<2MR8}VfA+Qo8# zU}AK6`Nl1k33|^H!KythL&V)7;Fgz=7q2I;j0s{tv&h8RE$7Z@e;uxoWZ%MkA7i{GtMxnbk!2kO5?-jx=3eus(#^-LW}hhaLfI7gcULCw@Ssu31J^5YNj_!c;f*x7a> zSXI&07V2W9Uel$ipC7kC-j7GVwi@!#3wyc#IzWq=;|kp4ku<#UxSGX3NqD?_2Z?;) zFB|NQ5TKX16Qi9P4xEmj~?iR$HBw?6vl_D3IKw{g*jWjzSH1YiW0z_sjX*QfCNbtrOP8g z{tyNE3R;qP6=2Ln(oB9?B)95FB~sqelf3OD63HNvOr+Z#qIq#TD~yKJpoXSJM0`j^ zQW&gW2T1uOup+;)$j}Gv5lnE)L0x#vCn_cuM$`*J%;yL!LZd$M6}dXxEkaLx0=>su zmMf_rzDHTwM$Lna5Z~Y`J_@;IW#y&Uke8l*^dF^q@`ooR5Un*t8Y~H1XVc#5IZ08| zw5xVonG_&dH^mnGNLNdDkQ+En3(;wAm~hXE6KHnUOO~E{=#A?77|{ zc;xz73Lfv=Q6M)OAARc4Cmwwh9N}?Yh}<+t>QkANyR(ABf#ljp04YQ+Puxt#dIR|G zM3e{i<*DJu;mNHe(8j9=NQfjAsbgO5qH(d;j(TxTHbj}cxQ%HHi#EvKp&{jew@pJr zBuJ{fB0TbzVYIipkr~apK#7VJyA6>$%{D|jDM{Wfj}W;%>vMs%9RS(PH3Y=V1EUR* zB9mkz0aFUnaD;d<+C2Q-6k?RfEC~(^q0r4`8ze<*Iw10yqazDTvWlr_YZhr(LZ{}c zENS&AEXcyGRKc8UB3a;+FT3may?bp2AiwnNF9GsfkIqQcRJemknqAkaY>ST6Od)T= zq+a6+MMs#fXb(2ZKB17W>B^NC08)swIBrMMYDmTyxFm9>bKEi4)?hDJd#hxZ3c)bC z4;Vkcd-v|f=3_IpwKGRH?%ow7x65!vjTEzSc1G9Gkg6irZXmHyR_6TafqJG2(op+%K~XsqzSS)lD)%Z>&=+$8qz$BWcrcrppDC< z-9(OtR1E+1}Dbm@aCJR7&_$8VAl{Lrr9gSEr_(C4P?%n z(IiQYdnCY436cPbf;1Qklu)S#+@vtzQ3NitF~-G`gTxDvQe>o;@?tKjVkz%-EAE?6 zPu@;*%JM*(Uwii&KIGG1dj5BG%s%t%HStvqkydDWg~$o6y^d>U26W_U8a$_&w&ijr z$Hf}kSd+zg|k!uRTYwEl!#jWNKuZ&)hlSs zv_!`=YbR2&Z$*M14}&gcxuPG9W<>502{tB!F+(kku0V7N!4QUcrTQji$o}P|FIB;~ zsMC*Sa&;gGk9-t3<(K^Rzn$rsdH3lrKKrlWarm#_?NK6)A8F^ES98V!f!Nvzdveu( zL@?YyG~T(ibm=s07VYhANluX^IodgX+-S&qxpDK@8D-P(^WvY_PQdP6{=!2Jk;jRb zMi$3bSK+aFQ&9Wd;qmjk8~%6C?&=8wq;(?U(a1)X0n%H2;}ZoEK}qTY-ReL>%3%Ir zMFBxzZfS+OkYcb}y6DoC`4=}&qbkx41dtcEg_^(ETFG{SWG^2<&AsN_EtPSYG(1|9 z4Uar{H{ud04`AsoW72BKuM3b$cU^@nD_wu+$f4pH-a*kgjUftT>daz0NBo zqRA#;EUgHl@d8Bai#Kn4@`;!!+1BZ=$l*JbGcV+sXw;8lbUrgczK54T^IPsY{Oren z_jiA}XV1R8911#8Q#6@%x0QTWVDDQ4NGvMc2sxm0hP&!b4Q*{woCBoH>1;Hl5vd#ks%Cu@NL$Ia zq9fTmfpk-lyjdVY(WNpINd{!4l4z~ACDI~kfkbR*^JOdBjkeaDGz}?1_61zXBk#S2 zhGe3jVwIX~C(>S&B8~DWDajS)v?d1|M%ix2Qo|HsavAzj$34vx6k<>DfAGtXlE5g~ z_ZlvG1uJ=*y4L^Vtkf}kVSf}r2|JfM(ndh3q@`pgjyHE{5T zdV3YAN{9qWw{Oy|Bj$|Fv%PuAaU!1tN!Y=QWEiaJL{qe=kzIX}Hg;jLvJ@V7BqHx` zvjI{T0+wU)c8oePPd`>QR@zm|HmQn&fU%Ovv~jskDDmUbq7d(OMZ8w zu5edPNltKRxc7!@u+@uPPR7KEtd?FXZ+96gk|?`MJ6#(6h~|A1NHy5jWSgMI#x#$Z zRi&0kROI$TjRg{r@2??UPtqjFt<6>-tU?I*rb(KT4x`sZ#2g z^s>^dY-);BdeD*o$mnpzO?U)IqauU3m8u~X$UE`}K2wv}3 z(TfXt`%{G1Vof^Ec{xVuG-b#)T~$%qBWa&KZcyX#um@i+DUtcH`$`o^tsoMhI%#pc zJJ%R&Yq2emRzq5gZGFgpfJMt>MyO5wP#e;04KdS^+@c}Xhcr4eGxfv6I+0&>fpk~# z36R7zuW_>@Ay>PU$rVA;5hwE_GB5Fnw)qUn8e$K%!^*s)62=%HcdHAD!$_x3ISEQB zG)TshjH0)=5_k(3b=7P zdGp2%0rEDYCYwQ^(Q1)lhT`hWvj_q?&FkmIX3tXd5rF&);RtYSW?We$M%8G*90b_` zBu@_p^5GpOd%G9;iZ$6V>GVh1mCrWy1CScqD3d14M&uaXHk*Bq$P6I)uVb+R^2mGW z$Ce?MrYsJtI)q54P=mmxWMSyomBxFWaFE_f;juW^sTQhGTX0%ddP?^M$+3G=V{}a7 zr-NdmIySnv*w?>&i*Y@^4IeGt=Iz#6Y;dT%IGdL8O;L{`Ml+5$nHV9kGcYpV2 zRT>~Q(YKMVlOKhwtQ;Y-Fq6od{INi6Es*RQfB*Ej#7O|DlrKfo*8$SuF=_0z2zD7qaei#$a}(4UAV1@e zAfIop0%UeYRf-_{1}f6X((>F5cykT%FVnBieUNC(yd$l)kCSWg2KXV|2hb&s9okE zv8$-ayM(Q^-_5N;=LnE@KoXNyQ6Upl*)>XJM$dUpqB?nAa)yL8FsWs2ntoUT-XHd~ zaQ1lM%!z+G2#^^>B8J0Eqpd(b^ZFTXdbvOny^jx!;z8DF{rb+Ffz9g3yPIQwHb5$| zhDYSieE#m5k}PTvChKE#s8VWUyEnNi9KA-O68iql&*+kg@Dc&Rg5+Y+ZX|IeWA_u7ZQP-O}YMON<6`ozb zFE6`vUwKYWSyhSw8-BQ%cpcUCE6FuL97wX3vmYPcD2BDUxWB$Qzp$iAaEwN=*^Y`- z-GkNE#7VGcS6*-f6vZH-ayHYNk*Ce503b7o+$B_tDk|@j5`z$F*`_>=$;J>;+YQ08@ zbas)*liEA?WRd~W-Nkn=rV$`_caw(=rYesw^0rN+24!9UR+X`6}WR} zF8bMLXvGLjibRZtL`9a?miafd4g!$K2G>EQyS*%@WV?zi%KPi)A*3@AAg1o;#+}qbfdvC(`M5;d1$<&gL6xAZ|O-Q_o;#Y#W7wH;_VX*_akoj4Anp+wsJ`w$>MDj9l8Le-0ltknrKw_InhgFs$ zdcrCwKYst0t+R1%yFL?qIut0}UD|B3v#q?xXfm_*$e=W_Vl1OZzJ)Tl5vp+`d^011!v z8q&<@SRPGK1Ccx}kUTslTg0f zTSi0$$|6mG)IuRTk^~Tuho*$SW zl7<1s6uF$XSgCN>@5X(Ec~up0ooFgZ7EyG8qGQ$|5)4&vA>om~Rg!ms#P2kbXEMxx zK#8VOHEF6O*7j=1)|=^ycI!&@P?e-sv>7&>7;l>#p>BBjH@~4D(go54H9WUWHcvjg zr9%bs)f1P=i|>4%PD=iTS69n7#bE!DpAbhiB8Eq$Q4IFCf8@6fkBaP9_x>OjJK!TN zj)DY8qap9CPLuEf$Vvqmv-3RT0%SDoTp@@c8SZfcr0J?vAQ4>;i5Lxu#eT%}`gnju z6v#(iAiXh-5vw5;Nh>x%?(rhEF|zTJjct&$$sgPGW5udSB~nE)<1A1%y^uv@4dB+w zNzMCc*Q1%{q``_B0<^~YW8@Wsoh|-=K|%9A?6Y~1g$@3e&P=|IwT%7T|2WRI*iveuMc`mQ28iW3p!#D-iigyKm&nRY%FVIuh9wAo=^PZPYN=^7xt$tqjx4 zh2>^tQ&YRwiR{@}s?O?|Hia6Lq&A@u*Ua?~vAl6)lpOczpTBH0Bw}-sNTbPCoBjCm zZyX=;5Qw88FHbMs#A5TU0i@Dsm~_=6JR%CD8f^5V{BHIp7CYb%XG*i0j5P{Ua*z`f zRBE)rB1to9IUSC6baFF@pKpYHRDCXxLXoX!3zG_@uJy6o#p^X>eUNPxBt$l3eJqe@ zNPTz{k}i%syw#dNuOn4FaW>LeuyKJDT~B8G1Art6sd;X36W7#NR8ze~Ln6UU4Kx7~ z?U;+tkL2krj7lD`$Ee5M?Zh>7`|xOOp}W>c8{a^jb(1U)C}pQuHOrH?o59)n)tMXM zsDU;>@>yzTi`5Kw;UeQ-At(|_{}>|0KJ(W~Z2Hab9S_pgkxou>O|}ilvH{QTAAfF$ znIFj@^M54T(+4_>SjdFT^X-!Bs)9U9&#S;)JE zm6f$`08+mzXmhDFK*FK{Qd`p0VDr1T*EV`&-Yr~SC&E^fElCIQT+omRlZY&yp|NiX zpU6lU;kAzq*AKctO0StA5)EmA{F%82Vu8H$*d^CutA=a@(&|X7At927Mbi3_)@EBI z8;rJ5k@5h@2D5F&T5Z*i`rm;QNnV`67=YxR07!6DQQuJ~1lbx;L{~CuoaD$iU0sVb6k$JefGLL@&lzJPZb3pz41KXY{%@PJWE+9H>6 zB3ZOCHuJ7D@NziGY4@p%v+dprgJm6%!lRYOrNh9Y}U5P17zKS8n4M#9F2y2#0#X=k&QrlT*_wRqEq5*&#W@p~WL7 zW$tF!xR64d1=6^YmPSkD4s1RqTY+Tsd$za%kcyn~Az@B| zoGUIQ3ewe(9v5;8$nRJnA81Vbs0fStVsLEKk!Z+970JUj+Md`39P3mhFSeF#bK}~e zE0x0-JYpGe7>hcRjYtEU&Ke+VTBnf-1Hu_DE3wtFxyb|*5Q+B~Xo5%w&aTy5i&_5f6|=HVs5-_Q$Q+ko$3((QII2s8r|CinC8puN)qW1;r|a z5Ta@DlLoY`32RoIZCquzqz7`K$k-8;tXQOliXS4oIq7ncluw|C!5E((lav|A<3Q4+ z-9Mj8C%dP#k42Wl(#^6cXI(Vk!NXK?SG(s^!KOg#z>T|@w(&15l8*J`#RKHH20sGi zA8WW3tsa|=1kxAR$LD0~5Cy5K7>YPwJx8PN&>X)g8qxw;pZSqjub5iRfln?U;9rD> zB&Ru+*zg0SdXZ9_ae3rbiBuX9{mJ3?M1KEG2sejTWEmtkosi2!G*?jFY)G%nS7>DKBC0cP5rBk9I;*JEh=$ziL908RtutDtIoHn903#2POHLBf4YFMxMJYBU#^HL~ z7LJxlC$912BJEcE#yd8iqK#A8ZpcSkAZ^2vY(9ICb6I`xs5tr&sX&xSkHe$5kz%yV zv_>S?ib>W`rKA&*aj>wjwMQarHQ6r)Xx?KbXP`L}8-UhuI5RnVawr)u@xQB8G1nj| ziy`GM2;t;7dyt*K50R??nWTk>@ut_7?*b$y&=Tp0K&eI>qd4=WoAMJ_Ym)l;llJi* z{tH%V)WusAhQwk6-7_0|)4bG>sMKMuI+H z`Wplw5tO95kV+mvis-9o&vX2;{G9zRLDCebX6gEEa*%gLz!8~S;Dkg{j^Zuq0(=1w zgB^{^cx^)ZA$ij?v143gFkAVACPmR*GKFX_WTOk|m~5jU8w-b4Kzd6<{)0u*8)~bL zw5jpBNo~)uFK>S&338i{tk;kbX?r1cfn1e1+mc zi9s4B;~2+|#eyB0^wAj_>G*CUMIK^GE;dr=WuNZAz~I=-!gPPOM9T&xY#EBjERoxw zO}sKPu^`)cmXZ4^cV@G-bU4`8(s^R}?pN2YeK}5SaB@pUYF5wi2&>R&QY`!yMtjBA ziaYDsciI$5a^aK1h!SKY!)mfQpgh!j^!z8o!vJYDq_!twm z^eeY-EG1bbr!_-ZM6Swhn=NIaM6JA3JSPW8~8rWPWt#a1BM3~AHiml`)i+L%V! zQ^jbBY|xMmZlv)d?V3Jt^bBe@rhindj)X>!j&wzgwll);!T)^&9})?#Ake5?X1Xj> z#<}n!wdYJWj%PidFg~|M++#?=f4y;`5C!nd6N<`YL z6vw!92yA>@xk`_P7%Wq&AiTVoOmy^p)OTuGj$(bOK=Sy5G1dAiKtiPXYsU<#ie!UW zyYQ$@N2Y$*oTwf-K><ujozcP0x23SUQp?hyY!xK6)ERzi zS)|0lnv2>a0Di>?!hLPt)}|1-k1}php8)wNxp8=OdMOl10a9^tV;Xq0treFfra?_M zSZoXA1EzAQ8nYp&;bEDyHrwMz+Q7yF*)Y^#%G!YFwc0j2uElHtlG0%xE@V`q8h{MJ zpJaaIBBTOIlvCm>8h%I$v8p1T;7=2~P#_Tj1wj&P#5Ov)^idrd96UZakdqPbTrtPJ zhQ%sN$w~UmP8X^KHMnv!3o=42KIF1Gl61Rp!5|$x+wsxa-^z-+EAXg5f}|Or0!DNZ z;%Fi*4Qmr@aivL473tuYDINU{yCIGj!2YrWq%K2akm1ycz2{$kd3eW80TLE%9@2K7 zSsYy_Qn=;D-0Abn3M4h3Oy7qOJlq*6f0K1XF2WiW*N=2W=|oN*?_ys<6ZX0r95pAt ztU{G$x`1LVX|G?Zn3I{NBtOl$1T7~RA9+_JiA*LK6d+YWq8$YwMbeFF;Hb`pG#c_T zrybJna<+9t1LQ+Oq*ah!4GD`pdGXY=5!v``t~6L2#fxmrMp`1hZlt&KM?Tz@e3WN1Hv-jkGNl)9m$Aqlb7SYop=FS@*#rqcXmp}(yf zXEBYg%FeQQw>sZFje4AxRtwH*=vLADl8sa%vD%;BA|08`bakR5<;<^1kYo1TX%)Av zM*TH4i^?O(@wA^P`<;(;fq+?DMYb<7$vQ`LB!wDHj7wAG|2e_&_8rLM3ZyIE#&N`J zvsI5izkHfhq)yWu9gGH_{fnRM??|vr3Ls7L2ertH$B$G>=N3*JKT8KV{$p~Jcm^>c zw(RL2pO+>AJq4Lf@&kVnTf|^QJmKRVmO7&(BXRM&y815dF+&UrpnP(Hv{@f_Go+eq z8`J2$Bsa#k8q$U}`VS_`HavO*8$+Znv#<)%bVjOpY_=_HTbqrJv^;tSztnnbsLhbq zhp!*bM94w%0dY$Js2esVq*-&y*lT*Qn2Ck3^X4d!QaLmiS$H9#!N`0UgJL8pi>cmT zj_ZnklnWrVgVF6HXC>u|U$w#_I*!W$q{cL;3CC*RV#f{3L|Q%yzIvYP2E+j-HgLxS z#9+^e3cBm)AQYrSWYNdXrH@&-0+CyX4mP4Gt|b%BYkHjWGqU%@xy#GLJ9h1IfmHqI zA+ixiRgpYD(LVIgWZW?44?g|eUw`+_=$aB~fRw=6btWAo`GlPO*Ec%(=34zL<#qI< z;wZ|I=hYjd*>Xbeconkb!o^(ALnI~IfgpX$ys?4iP&k;trRwbLyYw(XIxsmw@4z36q}X;vSRTP|3C?`@dV0?IBWRYyY^3YrHBF@utUBG#81@=23^E!=w$l z>Gpa0S$xQZ`j7~z?p%pWeAORm#V@I^XVU!_iwd zfs2#nbBHtw=&oxOG34-w6S@1xA8kJ8%= zE09noqTE^j8i?d++Qy|iE(=r^`irf>|M%SYG1}oYk+xQBOr}RH_Lk9B^L^#qvu9-m zTnm4edCNOa0#?2!fpVcR-9zHasE(5DFv{F6@5H=37f$>#|X)d29R+>XW z?%cTpAe{^(k9ztPP=l!TA>DF~Kuy?wWp#cj(E02?KKK2nk9FwUGbcwXd3#~dCV%)& zub%$L*E`s35NJ-6y0tu`wE%cj<3DpGTaleIf*=V;_R1lpGEKP@b3*}a53Lx{NHEgX z+1a(7j!1w)0LofyPu9n&(^w$wftm&&MZ5~K5lEXKZ*0{yk#^&1727@T9gBU==6zUW zsvm!$E1#7}qaq*BpvD0*givY0i&hqu$h7K5$!be=m7T>Rkq}*oyjd7*HP^t|-rR{9 z_l0Bmk)b2~lks>yA5YO*3cfihHRxrqYNb+GXWwDGTqyAS`QF(p%R-|OvOlYf*=(*8 zA`c&hB7jsS$%k4&U;n!g5BmKK)|m39 z3KY6EMA}H+{h!YqeEXgDRx01uH*aC8O*^QnM|ACx5ZjTb1LbeA;VbH4|Z64Aqo+dOEcihYD zdFI0oAlj0)r4e~f1quy}X4$hn_3mg$ntk55lnF}h5EiMnu$bN_jiKzqQ$3lMR&he^ zWO~KN4=a+e8d7)C?J#`oj5ANv^_ zpU(iKb5)5AV?BP~N^(6rGk1jm8zNrcEAnm#UYq3>BYLJbBM8MG%+nnnK z@*y4%>85)=*PHA{1!**-nXj?Sr{uD>iZ`zD^2kFqBwH*jjS8ft(O7JNeB`}Leef6w z(^JNoHv}a8sw~M#A`;@@)6m4=TZw4?T#{s3uG73YEvK~QMkCw-iKjSFmZrefl2 zGMK2Xy*ZLc#WGULlHm}YP#G$WO^lC^^0GQUV}JxnroV1qEX5O@(dL$8ub$pQ(#BKa(=!@^{f8@z0AKriP47*KVR2NbY_lJ_TtepB{u`WrU(=;)hAC{127eFd? z`eKx$7f5TmdAM=UAzg-gb-K7gez1uJSZ{WA@KekkBo<}K#$45u2Qa=z2{&NcA3bcsGnU9nZ(Yp=PSFytimb z$wD4O#Q~&8KfHVsqS z0BK`v6s3E@#y#+Efcz^3vWuI0+T+-xB0rW0Dh8X4=!F%ZKSUz3n8wXalxc~iT!(%X z+sK<1Vk(s~cAiqrWGWZq-c2SF4XyB}LpL>zM97YdgeOX{UIx^Ge)cr5iM}v2J|}l9 zKT#f~wtEY8!J)sXzp3-R6Q{4@Ga@GW2%b*bSyDbOk4vpDp846651}Cso_U*+x|6UM zFH-hcOfcmrrj|W@JTC9pvFmXIq=O)wSt5}-BKfdHs?apV9*m>u4SZ(yrZ@TIOxH$_ zUq?KIO1Znhz72|h6tvj)!mwLeH*4J^+k*osK^$?q__cD>crY5x=Gc_2`w;w`QsT(U!TrY+NNtI11X4$`e`M#otb#O4RGe0yKLOI*CFVt# z)L&DR-RMJFFOsKS&*v>5dctgrqfwBEYDj$%*}Cn%#p5q9*$=*Pw#&(M!=ql+4FvRX zq)#vY6nUq$;Y2PMN|`3Qgc}(qOGbw{cAG%36$8eYbTgG#6eu=56HyK8gWxoIq$1Xu zzavqQ6}o;Tq~y}u$RPG=AXlB9(VHHw+`WM(xn7pZ>*kKvUtPGPKnjstqGb@pQ4DtL z?vMWccf?}9*&;Vr*%B=^O?ud|+UYf>CIFHS9XTX?{=nm~`1mfPAXVy#?OUSFtDF?**JN1llKj|N5OmAOOub6>v{l$Gnc znFQetkZs@4i0DK^8J=|AZ6ZzLhns2G_f`$Eb(KkbYrr3jK&0%f=Q;?vp#%v_$!#ui z+FFwsqGK^_NjXx^WMg5hLRvFXOr=0`W?{U)ZGs&3ee@&^f^1p2)y*1noQS55!)?>E z&}e|*a7X5_L*A%$mhj@bnAxb zN5#_6*r*|4(FQfTx>W4#SS}RF_}be!lK_gmM?7k4&S41!(l7N_8Q9c5GsKCl&0O16 zN|-0!AB+(q2D^fZ3{8Eqc_GdmQw{xC<8zUA0oqPEjM3RFO@91GHMex_r<84hY}Amr zkObM1^syJ^8fPoLhnr&5>0O_q}+w8bgt??}A^Bh%z$VMIME+1DS9UeKX zWDT}^9u^!8kl1W4^}9gg6^aiTHXD`^X{eX+8ZeDIZOoCDfRlujSi2o<8W|8&6Eyk; z`N$;59Z3x~v68E<3(jOU)tw|GNe;NIJ1E)4QXQHQ{W#uVn3$O% z&TG;K1u5d9X9YgJI4Y&qi3G@D4DL`dF+kWwv=P;yPdBSx{}$o1Gd(Pq0`MD=dj?18 zr9l15wfBV+y|lA*bJfq z-J2XM<>^@K`;KTU#f>Z1jt))Aa{DN4rE%(6{l^E2q9lu=XG^#?+LB90z+`?P7W4&# zN0c#sq@;be0i^I`8+7Yk$Opw@J3t}|rOEji1zA_gHaP0TiUXvfk318+FZ7$X5T3zG^}(3C(MM2jWaFG)_aoCtw& zvNAS1&N|WYg)7SACr(9Cw#qU9)~#dVH=$B8(8RHN_C*&zgCOT*X~Dj^2JM)55r_oD zK#0nbj74sg*Ed&JuPjS)Nr2q({8IqAOMyI82c)6U{(>#hSRh%c^860DP16<+1;}$@ zY}1kz`}T`(KZi$Gh^LiAHdDBRTq-30SxzyPP33YV89O^Ox!g!E6|GoCmjO_;rAi|U zIM=)B*<;1RAdw*!8H1!1y z`R9zbMe61X#J(t8 z$Ek>~gqBDVRi?7(&`NH8Y`VX9B+pqR)FdeC3(mhum0w_der-vRBvQaP<14=8!KW27 z6p5}Rz7LST_oi6JK&UBB6ibLZ-rW8}G-RC*X%(beY|TPi4e15) z;fIaI_VQ>%tiF|PMmGYbrPA_f!kYRm&$e;g#x>r-8ss_EkZP^bkZx3CYuM(n$#>L; zq&U)~^}lA`07SkdO)gr}Cl(Xc7GW2ACL!GYeRoVbQbr%h54c4h|b-i2&! z?c(*DY2+r0#Dz#{A!a;Md^fg4qoR04S&7jOhdACAXhm=@cCU1^AXR{zQy}R)14t#2 zry;VzdfRYD!ycDdW%&7jJ3ZH1_Ty&zitF9i*J{}5&jFIW&OM%6A}m_ns5oZhm}A_G z73vGV=HOuOWTKdllkkypLz&uxZuVl03V|QZ(1S&(RY(>KJH)x4GuwZtBU%7ufHWug zEs&;L9I4-%tF32^J1h8K+GE+Epn$4|eCr=Xwy^v&cH3;iZ``bc$wsUX36XZAuDjjY zllJ*1oJhHwZO?r__{OC!c$7)&)@G*!BVIHrZzDj}Mpgx2dnKDgs@p6HFhCM!w~{Z? z1u7Eq5DFz?xmZw!iFr4p_;G=DUC*ftpcCa%IgzVo#d}=w`_Q(vtMlDx~Zl7{PUUsxkT7aT3qjf z1;ZPD4%uQmuT3n>otq=3d3h_QflCV{d|KyGakSe?w`{rc_|MCG7v{?=5>9htF(33x+A@{(PIe6$T9IC~(F^vc$>WAs{(Su2LdO>+q5u`!V5oJ<*NU_+4Ngf^? zc{Xm76n zQF0N9vO&=4g>VYc~#Y-YfS~o+hmuC6fWG(!s4b7NKQpXjO7>i zz7^2Ne_-&(Ev!shMS#iI)gr_aB%bLYN&LL{l5Eg)@dZQV!rrA{0o zc`lES&8Ih(&~=O+;VVF+0Qm(#+VJJRRgSWlVv1`kL~_K^7qjf}DJ62jSRP-JAKk-e zJ0dYL*+gYE&9Tjs8O!z)>_kH1M^T#R#xn|%m`1vN8hl6-V>@TEaUoS;5g1i|;3~); zDUilsI~yjINLK(-#MO}Ua1FN=t0C*p*GNqpAZ@5^`XRlENW}3VU4w16`?xn49%3Kg z>k6a>+1j;(jzok`!W#A>@z%rR28)>`3JFJB&58i2)5r-|@+^^jK9-3x0UI2M%iMN6 zj~5vMU*e!pF)rU1RgA>Tbw%H2$}g9mN>`P%27e~#5Q8dB7v0gaQopKDCE zd}t=pQ>lSS6+P(g+%}P=_lz)LvR`Qz2q|<3ku>s1p9%OSaC@Xa!}$wYnTxQh%()O_ zgdnKh7YQbE2_I$G!;>S&8FC2bGT{(Hst6>tiIRAO^cqBF3#p|@ZoV*)t;*k2cZF7I z$yMfv!^63;(E@i}8PB@!CV@~lAgRfqd+Mk0ydxkYP>KqLNA%sqJacgWW8agsk0A9^Ts_013nbyQSZo8NM@5o@REzzf%cJczH&Tx! zK)&@BI?`y#w|L5j)sO~Aj~|JOY;3Y{ZMF?-B(gF058YZe55uJC7{>vTQVm2(AsYoL z&ZM}Jh@&IJL<%e9Zs1WT9hmVmJI|a>SpGcH8p_0iIFclCQf&W8#0T>-%2_0;S&FXE zWDzB^o=$|z)m$Vcy}pq&&Qe@w8oOs1|5}t3TsGTZEz%1_qI`UIe8I8Xj$4NQ0ZYCl z%#nu3J3O4c3WQ>|MNdi4Ta)C^#%@2=qyUwqv>b}X*3YoD{-vjOKK0a7`vgcn1W6ld z!(n6Z8Bd$^Q6eSKe*XOXvCxJ;xp{rfW_#e#*ld`ziO1RQscO1ZD5VlhIc7STNTN*G z;R{E?#q~wTikA{e8KkLd zkk9DmTrZG~3ev>b7RUy(t)eCy68Qv)^5RvIo>pDNgCt@zKPvU@6-G43-eM9c&9oOx z3X#u#C|+dqEA1iyQjE^Lwf5pcq|X`qqP~jJjhY;!Ns9LJB zH-WDac;8?Fv?xkw^8{- z7H2C(ZRLyPpfN1>mr3;u(i>VU7p5wU7uXL_)-{J@Y*}B}UFglWadAvi<6X^x00+Z4 zhJWVG?UMHqH3yJZMS3*kqZ(wpVu&;BSfQc=w5jaabfK+(beui)1UHno#cJ!r3Sc69QXUcU8 zA)*`h`~c+Y$-Tcmun!(zPz{OfutZw_(N&6;$@=I9AXRn^|F1U=o{gotHys*p^8t?# zX}>*=@XXTGT*FE3P315aVkvl!h^Og54wA2pQ!SiWox)+^JFYT$Ep1R`-WZCjLq|`Z zJUY}i8SnDZ4%yiPksrT#P-=$&2~Arrrch?^_+;-$Y5>P)aBvWd9nLVvi9Y031D_;1 zj|}!!rD1ZQNP&VCKPW}CV?vaqbnlY&VC9#1tKl$HPZ3Oe+tBF3+|fd1f(e|}J6nOP zx@P*>L=YHkVqD=-fz%xN%1W&qA~r*d`$=>%&-2^!j2lAa%TMi7n=MN6d1qaK^&~wu zTX{4{x`{|Pefjghr#Uy)ec=mN43PR`B7Mf39NyeqTrV+exnAbyI9kqD$`RV6*mRVF zOMY^T#S*?V7F(xi)`)Y+$zrm5tJ&!p3QMQne|B&n*x4EE3vvxjh@@1r%~f-5P$QwS z0Ex+VG^ACL4vs(2q`0-%KZRiN7Nsg;#KR*#q~X!nY(AqP-}K#_FT$cyv@5K)oo1Rj|rX>l)Y(NGc+ z>T9<06aV_);OqI+;ek{hNwF&6Z~|SKky{P)V(6m7OneX>%RkccGgcwFQ7uEKZlz2+ z2XKgN$R4G*@sI}9lH4DF**I$^XE55(XBgDaDlUt? z#Uo><-aRn9Yu^hmJ@LZJPYpw)vD&7r&5PjZR&5%Xv?|g#o%??EpPt#@Ro=X?r6Nrl zQj$~>Wl5fDQx=d;k?5}G($v&tcXcA!y-v}K+(m@wI#Oi(l??%l^R)PMSLS(Pb75g* zWC(BN(U7Rf{oi{O%c~~a)o>CQs}G6E{tp6V1Ce{Y3KAeyKPr$$ zys-^HDw4dY7%t(_3P^fSGkEUAA{NN{RHWu2RZWV;u2+*XcBqY!QnGpanfC~5e7c3y z0{OS9Af@0DqU(4#7lKsP7vH0P`hq2jmGm)GH5Q3kkF0~37 zio~k}G_FQUZIo)Wg$h&K31D54Voh2`C1ead90g9!f8kFRm+(QQf33PW!=ej{+q!Pn z>AQx{|IKFuq!A%f&MKoL{eFOCT`ftz*yyXj{jV?W-1Wi}FFf%SveN^k(UAfq;?p~=Wh-o%Soh2gtG*>T=>I; zr3nL4ut{5`u7;jim2-4AG{8~q$U{;>E|BELMY7*=xOV9#v#~F}vO9D*oXPylsl5mG z?IOe$8Fp><^8f&{Kuy2trX!6_=Cc)G^cHPg70JtvU;oEPj-AbwuWKor$2|iia_7S4 zB7ogS^(|gxKjy6XC(I?$T{d4~UM3~m%y3Ikmy4T}+UJwm*;~`4a-6LBJV8y{Ye$Zr zIC|>DYtK#&z5$S3ogHV+5Yz0JJS5r?qMU8_21qpIlg5X%8q%61n7 z37-MtY^g*?u-GC2vp2U#YTlYCYVO1#8kl_cHQG~9kbP2tZAKwVHBp2F$&#qTSM%vy#aq`sB6R*DCcKr3Tf@4byF}B+4N1Q`mzd#%X ziN!YelJp3y`j9`U!%={I)GnDqL5jt;A&mw`DvcV_yqXVJL0X&5!xPrPVgr&}6WUfq zI-!lW`+VQ3NDJgIBo+DHN3q$Ggza&A&_FJLfTJ!42>bj-KRQPZh1Pdkn<2EhImnLk z{Gi<9VcW*gkRD$;rJ5Q%7{{nY>XtL=L}7?cZ+-`Yf^elN7F_$Tm8DS~T+`Jobo4gd;$z8wih5 z+!h`+0H-60o+tn%4cUU16OqATF3K|A6{n7!paVZfN)n23A5p!a9m0ZBvgY5s!58Gu znTe%r@&6e+8^5UQe9>E4yRL059jkp&o@>_CI!T@kvpFH43w43f*T(*bexvZ4~t zqR7J)jwHQs8EFl5bCzr^naUwi91}H2-E|bvmw|OU`#OKjeSbc`?~gCProH!m=79%w zxA5KP`Jvzj9;VDTgcBI72?B1K7U=0E=%JJm4t7NmR#gSLmN*<3oI=o&nv8U)l&Z~r z2S|Mrp{IrdCwYQ3ujRkHX2t%UHTCGlWobDYW&0BS83rmCnFTs&$26HVqT9kCnC?*>f$yH*jAuW*Bg#<|J zLK+{^?P25P4Qi~8G?p8&PGky^UL6UJskcIuN8Mjx%r-z;F+k!&%D)~e^5xH@#%#4v(g>T)HQhFGo?X$Ypj|(vS4z6Dczj!b)7>nACcvG^ok2 zEJ<~TcMWkW@TIudz{K4*nFW3T9FqgRw22Fo1K6|Z2+f0|ktju+fmpO}a4Z@a4$CHP z7Lt%yA)M7B&V6;;6vY{%AH&x#Eu||#>g~(FUjN#fbLGWZNE$Y~#8;mKjEnhFiJV(O zG-pCmkxVt(ycKOStZ!sACG znjYurbtAp=UJB$Bgf*y0$#ZM$tb?%HiN|L;9IRT-k}N4&ZIS5I7vH*3UKRd`K#!t>)`VNX@p5c<3mHqBpay`cvIwt zSWG?&nDM@t{CXG%D-d82_ehkY&N!k@8(gXzsWgIR_`m*Z1P}7XS9Z~b_Pgb~USl)I zhm|>LLZmp604Y}6aV1qj&PCE`9#0|CJ9Xpy_N>CnJy*W&_H%g|ATiK%hzpN0N|T%k z%Wh^$*8W(W5@9qhshz|mi<>8;I5ZJ2E|rHcBHUw~i= zlcuWeaU@|<<%c$VPUgq@kv7!kWpK3Ot}g{hyht5}m1>OxBnlA71V~Yl&Za$>+GQ3n z;zL5@D=*R^BoVm;Ht;I$CQ6ZnBN+`|nF9??xuB@kN3C-61#ZAyf+YGX8MPzOWUB>Z zv6N^i*bKuUTO^~=c%R%@W6AMIbW9G4L`Sgac#)BK6w@7+Vy_N6J3xx#<_6kYsnMj* zzwBaVz^^_yc<}9m`*&X`ZW92>_Yl;y36MCEi?hU;G(dXu<6bJ!kCsQLoO@E|(VpXIaut7b_(*o&T7ioc1nd?U?mhR!= zSs)(-Na^_zAhF51@lo5$bX+D~CK>oeS?6Pd8d*^6WFl!0TEnUV4x!2Dt29OOMy!(C zvM82*I5ARs7lF0 zrlrY8rE#M&=B~5QcOG5^>2)II!?NO%Gec9@=_!$+!AO*U zY>GuvwV@$gQ$l0(7Z0<5A#b@HX_t-*DG%gjQaxDTh{cA--UFTeO*;;LB68({RnQ2I zq8?4}nYp@&A368NAqvu}NS$5a0<7&7mmu2$DQ^Jj6$7LqnS!MeRHQc>`GyI#Z5vvO z8)=Ug8zvD0rRK>o+a4fac7Zg_j-o5Ipp8<)kCZ;~-x>8N@;e1r%=YpXPopAr8k?0Y zQj%$E@Ha`=9ojL_v{{modD2ioc%y@4=@MEO@P?YqT$;IAqUezbmF)l_Xe1JhCsB~5 zD{WX$fYO`IasgI(29rcI^niyYDnKVGl0-KykO-wi$~1W^R(y8wZONEiIk~!~xW<>G z_Bx9vV&ZI3l4^CkB%PVxP9EWysbDH{F4={&R04(g}mOsu7kL8%+h$YqGr-n;>0b7SUcWp1kyF6O#%gJo40+#nE{pHm>nl zZPk+AuqG8qBN}WQB1HhwYRHEbNIHIK`7xmBU3OEEkwIr2?$EETu!s-mam{it)8Gg4 zgvWe#M3PO*VCfVC4HOUANX%vxNg!pj6DYl)7XLBUQA*FQw2+U|xKSDo$oGbIE;&Iy zIicARG1dA#{vOGha8V>V73ZF`-UO6=IS?QhHtqwbw4fn+qY)LI|Mh2|{rhKcul?+J zeQ~i5{fKHT$q~_*#xR+NK%^U~Sg}h4JT9b7`)KxZWmaL?hx<=O!uXB%CEmaHcM3Ej zUCF7TzKrI6_P~usr|!uuT-hK;rI5M9i6|kqSal{j3-rn|YBDxCDSP-DG8*@h6+hhG ze)!O#!@UO%9Qg43xpn8*1P*&blcFemB1S`EvbEXA1T|g_IXnLfj{vDzbr(pI&^#Tn zE~Tp>v!#6KHQRpy#{W78NX5@3Qf5l+ zHxQ{AGLTIt3LSeA_kbk6qFJzu?Uv38rakl7bI4g6UO<9Y%+FoARL}R(?9x0;6Gmv1 zu8aT;<>bU=RFVwjjwH_S!YWUM8)0T}Xs{krr%< zHkIu;J%o!fCb!}U`5|(G4v7fM{`ZxV0SnbZW^ynQ8=0Kc+91(Rf;>=PG=SdslV$bG zVh^1;jESviZQR%1+uOU3SIenWo$JnC`RJ2R^cskE>ZoQ^8V!(=8MpnpYO?2ONP=v4 zr;jFmERbrl7x8eOeBsrQ3Z&7L9x;_0LnLP*KXNj~Im1vA~fTVAH zo`l)U#fLP!S^o6)hubASYqEKhsW3^7r?0_mQ)1+5v1!9VrRHTf(SPRLP|OtwWdo&r zszErmD%bDN)k}2#5H%Y)0>Kz}WR$aN6*qOUG?UkK22UpO$G8EO0LsCs`%~CH6q1xf z#Eq1ACj7nh?xHRMGAtT$xRzkx;JSlve|`R9c};bF+A_RF(&E+C^*QyDkrW{L0E`<~ z^0Z;i+%9q((|CDw65|TwviicJniD-!!9aMNM3g?KXU6b4qAYehlxkC^1EeM*ZD)m9p<;q;)0zu=;H*SCK=ME=kndS0d3cqi$w}JK#xu>} zO^z#+_K>#SV_|m(SRf(N0Lj0SgxLW3XFyYHZ1kapke3R!TzyQZpd)*n>5wW|OAwvS zq!-MwCXH@L>~s??y0rT!k_;~}Yr}?>{7^%8$7nOF1az<=k7`bOHc1^cBb&kkqoV33BCRd?qFaQIX%CzFKHenyq+F2@#D>lEKFXy`uvmXGATpXQKL#7>4fOLIGZzI|peZ+3{arQzstk2lL|J=EC zPbiR2IeWsy`*#&28qywa=Ryto5h7DHynJEkGZVdQk z%BG+|ciW*qFnxH9q)vjAH()Tv5qVIJ4$4gI^bB_H`}^Ph2U{Xw5s`obD5-h-Ga9?I z^H&!Z6_pfMq71jZvodWZKBRANVQ~&dySlohzCMRv5O>m{)$s`t!#N3 zVX02h5*Z5xN=ND%dy$rm5DfwOq4lR)4jkRTA2SAfIFJBoW>5r30Z3d(+b|B0-d>-d zDUc?}cJ!m-_$Gha6~5(uOa(F(OdcwxliVbLERz;V?`{?KB2&c@sYsIh(Joy%didE| zfOIS}*v&ywRzZTH(CC(Gh;bNx){ZnHaOV&#iE-{7;ubnZL!xf{L&-Gq)*NYUjP%!L z=lYwQLLJ?uEDFJh7i4OTQyU`>9%u;pW9)k#pl&$KIyexwaUzc1vmP4Sy zL`4OG0TbHy?~jj-|NZ;mf6!aQge=A{7$!g(?P@4!xKOpJ$d|ROWZ9OLL?1H!n&T@f zEUK^e5q4LXpdm5aZ6*`B5?4|P+h~APaX0LGBWz=;mkEseTIt)!Lj0bw>8YL`hRTP6 zlX7B|0^vj$4Ihss;*-(191UR6<}fd$fZc?{uvsDVA$Q0n#L$*BL4`V6vDXS$*!!R}vU5Tli87Hzq zQ{JCe{doN*#~CRIk4E~NI(jc`t?_;QG11JHcivf+wwO<{e1(Nn4gs>bnmoBYbJDb& zZM{MlNb5*i9xags=K`b)Zd!f)wQExx8IH3w{oYXDh~&TH>Tg7E1~AC&N2-S;$8i~3 z=?>56=pOB7{kW{5((M<7*kH=Ymqgq6kL)R9Cb?szuA9Bjji^Eb(S)2^oM3?uG50_; zIW#zsNrx*v3jEqway%HIHCzTA>(qJZUztOXNLK^ZxNvAFd>bN~C@FH$*dedAN;B z+2%+ku~sH$1jNR^_)wC2+T@PWB}CZTT9J^`i-BNYl+l{0LC)QEDS7>M^+X-WKnT-wNwvzmmE-iTMoHM@;+E> zG$U|gxe@gzT_S(TBflFSNg0_&a})P${PxI~w@Eq5rpunOu}QM|(I^?9`}DZu|MK5S zbZTZY7$&2|gDB?4P3DAkqu;RbIFT5M4)%3LGFlr&T02Er8xI_4K}CwqKDK0uj*ya9 z=I`*=k1b(jRHE!xb>00x0`d_9q**IzP4{bXPb_?J-cJ=sf@zmV6%UY-?~%qxoiEQ!M8GDr| zIx9!J%%qi~#OL!B7Zz2wwbdil^*E6*=@t^56p+nKnv%8=7f1Nz_uvA^{Z2bOs~hoe z_aukLfMGa-;3Fv8V^R9B^+K_5sY)5olPpJeU$heGLQrGnozhJjf_fxiZG~) zarLhDcD%^e7J(9JK}GIAfAqr-Hz1IRyr3J#=r4TiahQ|_G=M}!{@m%$_3%g`8z9{} zjh*lEN-B^>piiGX zE<%f=7sy$)NaLie?jxANQd13-%OA31}n)=QkAG$PGpIaR}}Z*P}ZUT?w=cf1ULD$S_KnB6jlr5MM^Qkxb+omweDP zZ%JlN!!zIAmu|Faq8bc1>puM*?O%OWSY48(2AQM}J|C?c!2xnEkuH!L z*?1G=sYkv55D-(vZeDRz(BT1mok*yq|y*;kg`l>9%*sS_E6#;AOx=~EsZp03@~!TuS$LQ z((purVquVphMVGJjRa+v09TVKBa&D_O^&02C?8_C?}W#vAav?}GJGcxAfi8X@~Wu5 zED(EV3nB&^AjN3YXHimAL|ju;jF$A(LzWs~P=hp$w~;xXq}@HP;WZ)_oA}%S>ECvOdPMOm0Wb#Ev-HZwLZGIo7MmUhU< zAlL2dBvqTif4UtRk-DyZRJ6Z3d}8=00ZpaTe#xhzC|xEkkshnP$*C4gKgvMi~l7@igrS zalZy2Wl^8MA;vg1a|?L`1^mw6EUoneW>YIilVwsotcSJd|xKg@nfl|yoOgr#OvB%9Dg7Vs1SMXiD>ijr4fg1F0c99hKE$~?$3 zL>dfdX*424dXY>e(mIm%ptcp4PxpiQWkaMXBCcBav;X-AE~;80Q-Cys*a(X&SeM(> zOzhkok`vm1h?N#gOa}||#8RPd=%??ezoV0-APw|JN=!5CM`y~|Qyy!7=(}RQnxFhQ zZC4pI$7FP5^w%=ekbQ|g(s)`LiUK5~*1^Q}37KLhGZ~bSRZe+Mkp7X%3|STFLL^y4 zCq}fVr}xO!ww22kOL&c8&tQArd!|xSM<=q-n2($PcqW21#`? z#bUQn>=6@hcapol=6_yZeW>U3m+kxFY$&2|ID;1%pH9+m#uzL!M1jd5C!5(E&=+Qh zLOM|$KZ00fY;Z6-f*l~K<)`OoG&YLYUDvwr@afYRF6`N}4VRIo7;*RENRj$qdY)fJ znhAAh{CrubD^p)q6h(m%>f}#xh1IOqdEAI_$!k^s^8XJi0#-@%^ z4#N`8baryzi{HeIbwwU?g`)`5O!QiXiL5*Pdd^eUozir{0MEbNedQG_If)S&)Ru0@ z0K;Elb~`6rhnMmy_42~xulBygte$fck-~&gl)@udE-F_lpEW>^;&Z#f1 ztSl@nDwcS=xX6bmN!%?=Vz^Ox8*wJB$+ko)pT=e@kAy^A@gy|YOr?j&E#F={a=N#b z40qiqcd)1L&CqK>EuMiHHX4Qor^lG`McD^y$$yb+kS>$bt~#>g@^cA=r2QwPJR)^1 zCr+H$O-RFRo-*Uqvh5iSt=H&=A3Dl4?6&vVjYz78l#!&1^ZO-ovMtE0wQ9~Nq z&4fkmhRoGZSt=j;)of)`A{JcZ_sA;ici%JZ;EqByL*=(u{p&4($ z51<|RE=i&68#GPoX`70H8x=9Bt&w|-OBZ1u!Au|C8HmnAqv*`>`$>YCKn1EN5a55h zv}HAvrAbq`zycwJ#uRI^(f~5YSExXWk_1YOc6B{ON}~mF%F30p%#@f$fs|ldX|xYK zOvi&HD8fe-qb)FckmPpAwIg30K6IKr`#ntU4khp1r{`FjJvXlzpg)&xi!qY>+2mr` zzd%a~?VyQ{(h-OZ)iMe!R%CR9pIc)WQT73%?EMf0QjR!#;x#eu%+$O}r3M52p!kZ^ zWL~!!M@JkxP0OLk+^z;oq>8)EcHZ8-dq36}5B;d0q!MY7G-F_h<|D1m=81ryJ|Gbu zT^6m2>FqK%L}Ig_di|l7-(s;5r`dii$R^k5vWUB=B^qHzw~O9v9hQb zD7A!GU)`2d?;{b^mZhN$f{Um`YW4>P=ZIz?1>GD#*3q0Tse=yuKeb)u*yrg32TpZ% z4dL@n{fAVyS?!j-B0n}Vk_bnG0Z7c-tS(C^fxYmfOGgqI1X+q83Nq44QdS$$PMuq~ zZk5h=nFYwk`9nXty%qnuz-d0yW*>JQq&?F~NR5L0F%4-r6tPW20QnEavT1;XM=z0c zfD|4rbp}aCLH9|7LYwpS`VG-K2S)On=$gEd?e|w? zvRIz@dIE5nHBCU|L}20$p5!?Bo-pnsigRLuhTOo|y{X9nMVerg+wk0wt!^X9h|>r| z7;S0ifgI6otcOG~0%TDUuVS!5&hI?EYP z*^LmcYi#d9+7FyM_k{X^i{_|EW4+Z_%MdK8Q7eZeA?KW4P%_ylspDNT7baC2PXn7r z-0JrK6-c8zRp#hOkIl9~S{`}KzWta8kcy-RHbmNzWPR$@h4Zl4yX+Yn#CGYLk!|Ef zTR-xt|$@j?vm| z>Gr|;>pJ~RF6qncd_yFf-~v2Gosta$uvFp5C@02faV5`8wmc|3k-B;IdT=Hl#iU1r zGn0v)%h!sl>%j*7CAe@HTQc4NDb<=B>GJVaiVIl;mnG1N{T5Bh_tVna=qAUR6d)z& zmZPyA96`1%M?|9a62>C5T9ZoTMs6ZryLh7a^pV>q&wO_~IoPM;X$6`7ZuXLfBC!G) z&#WCSE#+v9%wC3|QjbG&Jy+If<3dIn`&f|46vO#*MnO6>S{&7TL_@lT8ttv{^!n(G zmuWsTO9JNq!%B^rs!oJhOK)MKnkUnz*Zi-w#f zQja78B;`ZVkO1i}IQv0^g;9<&h0Q7LOpd;RBQ4#-p%6#8C}8KA5m@vkEogL~<#NpL zrQG}wMp7*G95deE?Y9x53MDYK8zZPCVK{1_;6i2&WK~s zj*NHpMe!S{`i>{ZsShV6I4plX+7~2S-WMF~863^{^2o_z6QO7&g{O2+EF%R(q>Zta zG^Ed0ROG{K6WEA1iT(CrxG5yEs}Gb_L#8>gjlSSnwCpm1BC*y2WYJz(ed?AEy;usx zLgebzx3Auc5A{S6WK{3P{n@pn4S0@BbCC4nF7YVWs1W*0_zq?U0Z7i|g%Tr@grtyq zs7HYWM=`nN{WzTq@G(gP$*i`d_cDFTA9{XO*Zs^HYM(5()2@?l=u*NPi0b|Eb)1WR3I&p0GX1BMCQ7V{6eZ&B*ko_B9{Q< zFMpvxx)U^>A%<6$BIw3+l%vGIH&Bq@aD`V+#qtY!sxy<`NM&)UWXm%P@^>^uq-Ge2 zMC30cPZvefqL!B(%J9qbDQe+}ZvNq3LoO8>0-sPU5Uz_PLKy7CL?SA^6cXZ4L}X4N z8E3*~@=id4n!diVF&TLty3KZ`BiBxzKHPqIHOCfUY73%7@{Y9@OKfHr(2#qJYAOpW zt12stYN{%0s>(N&ixsb|s;a51sVtV_4e>T6UlgT|f~m1~3O&A0%RiO4vl2z=bo|)m zeLN5W6nN|DN#hFbNiKCC>bd>hP$be-8lrf`63v%n{*wC^bs2u#8-8Sn4zD9(as)`} z{TY-|uk-uYX=H*x3}7N=CYBi6DbH}Z{pSLt)sF7LBua;-wc=IXb|LIpuhE6l^2iGy z5#@0ib%c^-eBg=jO?mC*=}RF}k@RMMR1A$)H(K>*ljxR8A<{|yJiciD!wY_b52-*} zaoTh#Q!|C72cj>DI2w|#f9?NEt%iYv_l%tIv_HmyMg^^w21Q? zD0%DAAjze_qLKU4*~CHwoQ&I$7b3_U?2CqDvY?43GknM}ql6PdntEhGB!eqDN6N;? z_|z07?l>D~k6b=-2p&29L3{#?+TiHcqS29rB0j3yB1M&z!lFpkrcFC{mc6mP3_2^z zckV2Q&}!hzlH#E3T3IaiUwFi%lew%cta<iL6jJ2D2uA=qJJ+p0t6T1Y z331&&47Nrzq9D~`d*^91t}*ep-Fs#%wl|dVifYIl9)y3wp+lp2xFSIM43J(Tt%^jv zI&!XhG)TI8fq3!o5DAjMmelw!rFsaEh=Zek{MGMXgcwN-Qq0r*AR=$F_BO!DK}1in zev>Z39K&lU$NabRn+kHJeoZxpS(=Q}?q>hyyyddQ>P5nEHdEN88Ex-5w7R{QV>FzPBQ{2aNOu(l zK#B+H+lvEPQk~@k$D+z|a4au>|F=&fTc3QRY*YFBWenkzR~2QYN%bZN)4y1;l!>r< z+|C+QX*u10zkmPJ&vE$)%_XWqJl7k{=h*G~%1y^NRb4ESJkQiXbfvkee*ThEoulb{ot_YBJCyxpSTY-G_RV`qn zAs>->8f&uUO19e#sjHlg$p+=wpgILe$A`>8L@}BNVA9Ksm@lhyRDF7o1V}@q3#7gB zmBORN(JOqz5cwP;R{NQU7yd#UEFjWF5+>QZmo96aAu*SC#Sz6QB11|6V1!YLag@i* zwJ+^}K~A1>WELMjpM8;}IQ$`;$Tgh9(IfF_1x&Z7M}T~(KyTL-un4lWju|~Bm2m`e zfnNT4F3E}hiWvNn_X$o<1zE``RYXZhPW4SrqD*nQS{qC2P?MLh)hi=L&|mJ$M0J_TLaNC&8d7mISi0NA zt%Br#fIpv_>hZ)i0I6bl*(TLfMiV&j)CSkwYOLDAWb6?87XP(=?YUnBO=%1@w{&6b9hWlH64;;9ATAGw(eb= zU@=5rAi`+h=)TpfPhKu+GrePWC`(e~X)7_>)kVG%iI8jFuc|4dVWEt+!Xl(R=4s1bc;kKgzn*{ojrTs^Te#`M#j6|t zgct&aMLVUay=q(3mxSx9N7zHr*wS*Uv%}Bw1j$8Uoc#kVQrVHeLk5qUaHu75R#7{k zK(cu&5*aD&=svri#5h30lT&t)Dvi5W#RS<88Xygdys3t?K*FQ#Ju@u2K=SfxNKLi6 zD3VG*M}5IP70FR5aLM94G(lFW8~lZVz*n)RM6qhEB6JJwjH4*^qd&AOvw0;ISD z5UDGKxQRZT=x7+ts4Ml?N=X+%9ZSE@@W9QAZ!QG}lR~71*}-v)woK$FX~`Z7PPNBk z?HKIh>Nf58wik${_U?SAIL3=zi>AE;JY84J=@(ga%|(j;&ho`kT9VA7k3|neE$;*HrDSA{RtXNTTj4 zjeU0R+*F2jU-bBfMX#@V=GkXn_~WNlr%898x%RDCZEL7SMgDL7N?S5E;)NCyIUPB2 z^5kkZ_GE}6BvsPZkQNKCNMKTJAiH?r-$U5zgFj+`* z_DU&Y=FrLdJmd{()Q2=cK4gG2VG%%jB-NXow^(W9rSD!@EZ=gGv^vsM5iO92r{%|k zq{Wdux)HwcL_<?0N09-+6COFTO^RC*8Bq4he^7)QueguU2&QRH zKV%_NQu%)Q`}_+pTC(Z^E(oonef8MUCCA=e_rUz!yFWaB{CFABHVL7fn?SL=3Rm;^ zo-$fhHq77f*!)#XHlS5E>@5E>J~K0Y`&+EG=K`2}wZUnhY(vkMZ@Mf_Bs{icbl0-t z3>lz0$OXAbH)Sk|`50I4CZN;1Jpd_3?PXaZRj#vF&Jxp@4Jz7qh8Q5xkj{h`3-7s1 z%vv8WkdFYQdq9?~j{!1OJVee*Gw|^f`v(G$MoFd+X>GO*YEl)XA}K(sSR`#FT&?zF z&ye}~`6EAH@WA}XpMUPj7dAZp<`cT?dBt)v6WU)!Eq21-2#^}+$eR!;ek8?23^kS+ z(~JmkdNfgiG<$>8UKkDw1)Us7!=Kq^*1~e(2)0VyvU`=&mv|8jG$9hy+ONPtIOUFgCdIF8QC ze*ykJ<3tPBtzWnQ*t*wO9Xq#f>$YvXw{0rlv+3gT<23}zL_T}=?B2Tj!>#A{Z#7pT%PZ#Kds|x?ZsfJg#}A+2T3lmGY3+c2bM8P>Mq}N+ z)<_+xhlU-SH-la?N)j>~0s$-$Q5|V8kPHFjS%R9UoY+{AM4Z`W*%fJkBn@eT8cAh&Id2x%OKHN864v;DQtwg9)Sv9%X<42~dNY9SG6bI6cVGNJ%aZhW#&7alZ z;=KLalaD>TfFwB)_n#TE(Vhy;)Zp8NaP5FmY&0U60H%gDKu0lARHWkQE(L-|Rgns$ zq}%mfiPY0Zk|oX~1LEx3CDvU2(&pFJ5`*T~Y6GjpGl?+sdJNv*OAb=K35<-5VX~*b zJaen3j&-27Ze6@aXS7WkMG%2R<`^6)@|pRwmNt2?0UM5 z8$S7HeP>YCuid-#?VqHb7fIa#t@U&2Mn{fcIPevV?Asf;&c(u`hK|NVhYm1;P0^r# z2Q>OcXpe$IIxApOu9Z4Y%ezF`W{HZaW-F7@>|^E@L_y9q*)EV8WW%F7zTkBsk!KV_ zo(S(2NP}Uj%xcKR)@XZ()a1BC+TJ^e4vemTv<4e7NUB(c$<8%dQXmr)U;OsDXCIXG zxY-q;x=f=K3^K8DEw)?jvpSC|e4#+19@DY28r9GcWRT=@>BSJOiMq7L+P%v}1g z@+OP?h{gH;T7$*TtwlJ6I2sxN$-s5WHjKdPn&%nmeH^@X_4b#^co&T^+#YU|GBlb{ znUrFQQursn`ag`F`&X9txu?^lyWMFz>9#fLo*Z^anypEvBz<3#DoH91Zcr8|X;Oy7 z6N^|05k)Z~K^QK60w_ zRA=L8XWi(H8~aX`Ls3`P;EjT^4P~b~Z?wf*a^uyf6?1UVb}OSXjD=&fztVARm;7`k z8^7p+p5HAS3)jGQY_zViv_h>1g7j*Ki7kQy{FajUpPAb&9nBo^CH3^nBJ78L;*T5MH$5=}KP!~vPWVd#r{F3HVC z{Kz0b9#N6T>K>JIu9f$@L-=KUYO^E{D9r)^S#kw9vf7BaG*ICY)rl_vjVjupAmw~A)2QsE zNToYtAh)EM?RMN%Vhz>Ir7P29BDGv48;gCjzvr?BxsTPi53kRe>pOD-Bctgpi?xHk zG3tizX04~OV$=H7KY9PzCq8%^pZ{MTfA8_bhsSz%9XY&rPkMT1o9+x&me;kmrKQKq z+uCA-H*VZ$gvRp9bL=f6%{4SboFz9epH-gu`o540d4lul` z=5UD{fI&eb%8ZA3@oxq-E~W|VG(M(DjAryP3Z%zS;&uj0W{D(xj96{xL1uxBrha%N zWP3u3{b?YmL@7il3>5Acut;R{9DU>8q6O^_lxuuXq|qZqNBNM2xNDcMMFb$A@s=ba zfz<5wb@AqOpqSHw6_Vbj3~ddN1w8H)vTQVs1#||Q+h|uq6r?%!NoEY{jsUs=(@Sj=CL zp}!0v)CCxzxW{U7+8rlEq_s~PjXazmt5Wz*`Yq?M{CU%wHC@zfhP%2(cc-7&x36JL zS7;U`Z`Q1^t==Oeq-zyI(vD3fXKdTHtEu70KYSY%X*7Amt?mj9WxvH975c;lq_RGi z?(s2=cOk^~@e z3eM0-JMW8hMSf@LLu0Ah@e}CCNHDCKRa|XV4^fY>7`%eMAMF=q3_%(&jHGcF!O%QP z5{@EG@;Yi0Rq1#{=Y~z@+OaZE7jgbo_n4l3{a@c%0I155TzdJP>&H*mGUiM&oPGDE z6`K!esV<>*ZR^DN9HIwnb?_NTa75;yqvog^@(pw&y%Q_4zF70ouU9|0a@DGrmNG;% zHkPtr$Pg1{(>R8gfs)QxCah}fpz%guE5088qiJY#qA-rC>9mNvb!}>50wrlg`VAMZ zsl$f7)!MOTMb6w`ZJd~x=o(Esa`T(miZ#uIHhlE;G|Zu>v59LYuC zI5P4m`VAUoZGCesXxZKhne1f4!vqO~ng;;sJ#ue?qB?TcXotPJ z0Ox`9;@w9%iNNSoqC}}otMn+!4huFfJ@mQds~{1Q-x*j*c*R`w<-hbs?~GT3%7%x%7~_ot0m4refM za_-tS@;%MXntr7z?O^>`0-WY!$k~Z;YAX!Uc$?zCo^0YH*yXu}1WX|fJ*zubtvYn_ zk+M}~?AQA3A5u~&TB6;N0Jgt!D)II`j=vr3xm;aYS>ID%c@RX|7wu@2k|d5Juw%K9 zodcPgLP??{vD>KUAoJw@Nno#;v(i^s;A4j+NWb-J5NQ!`Oq zGTl&E5v%MY3sTqZYEUJcJ$y!?cOr!mK)Plh7iCB9z=j&q_d-Tv8cC${$7@K~;~5>e zj3`QPwO@;>NT6~D>GZ)nhoQU34+%vVu}FM)4vdKJUjs-~T(NxY893B)v;mrqu2&0b%%Q_ zgG{bf@4iANprNm|t+TC@>c_~*{onoNKmMOTq;Qf^PT`D5b4Z%#4z_ae$FwCw>nH8_ zF(PoUV7Ga{a8FyM|9tI_f4s^4MVW0^u=Lgq)reYN-?8e8O@%o-bGio4jGk#rZ#Z$P zCO!RdLoa`JiMtoD`048w0S5P`xQez54QUsX)CkGopd`F_6%=Z?Q4{)*KBO^G)`vQc zfJ}5DeViS|Q61x+Lx0}vo72FE8!s{12cE3*6+-khPl!U@tqDNc%K1h!ktiPM)o7VQ{L71uZqP6)Mqb zOY;k}Q4MdFy5Kcue0X?xs%w%dz={&qOjfjPtvcL0*3esA+?%3cDpZa$Mw^MdUnu$7 zog5LQ5GfpGwRv33zpc|GobVEsckYrTMV8>k_9dl(F;3vw2d~V?HW6BxZ!Zx zi6afn3!A56UsVvqk2WHMP>+qy0ur1Ar12Oc2|zB${zX_hL_>NcU6AeSGy>9%FC-dl zJt972lty5*hkbMse2qPksK~I(BB6Zf#d(ij?E10a$1CyeYXXwgxWzPR$d45fySN4( zor*LdXGD*3Jf6*?m!Q#D!^qc|mX zY}c-a?RywEVm*g&1k2!SVE@*2*15Nchz66b!NFjeGve2k0;Ck=qX3UUaKCELbwGL| z!ywzoG#sp_`3>7%QI=*}cx>~Bw_VXZ`8Q`iVok5j7 zeQk|ry4XN57v&f_kF#!$^_^ie$0x?8xPVDJ2Kxk*u(?QE$f7s%meKMduLA|?#b9$L zn-_10=|(RXd0Y{Y_qdM}+!M1Suv6m}Y|oLr;GBOtec!-|%v$~7OFKF`&UBvYt{KTl zO_40*T0jO9L2qIW?2!(qf9nHE)|fbAtO9~qj2b4 zNNVB_;L*?6JQVWiakTe{;SM94Ip#-tFVcW?Q28{Z-hBz%>&H;Ss}D%{ABVNW=fA~< z9}d^dZkMgvlnYDA>KBX*TW3KBnvzRS<`4d&90m|sL`9L;|PjgWTDW*)IR8Q&sh z;j|c^$**nH%CJ|K7)qMYG{eHwR8GFHTfQxqyDilvrOg$1if`($rQ$u0o=G97m-&r) zAyFRXOadf_#M})~Zsy#)`_)&(+dGM>g=D~_`L?f-{VYUqAv-%8aUPE}?CRyttC9;U zb}gbAUm#MkdP-nw!lrmkJc1MMpX>91N1LS%Om+}tyUJn2WV?YH??P&h))x*FBwDHY zAAd_kqygz;Z4YF$oNY9^_b8CgpVY&iegkS?@JaiiAfI`j;d^08fys5x4zPZliV^kJ8ezUK|7FCL{czX!ihT& zPFcKo9a&>*H;-4ewzf{jT3Z|2D8Ti!mbS15r?mc9Wo+UrMiyAjV+XLkfF&*B1l}m9 z@u^ASC;><^rAZK=P>i@N1X53DuJ!ID{6>Ijgh^hsJ$((35)3y?>b~5>)YLGN#gOgB z*TTq#HZHn?)vqz3CX4bDX#_M!j_fKbR*$&r>a%_)6$oTg;Bj3M5%vkuBp{!0KBQYV z0g#sU!95Jxa|0l~_`+dCLyEiyA&EqR^h-H-_{|)i$QME)1tj7%q({<;H`&pETQGVY zeRLkE$QNlr)2?y4DSpqXVp2bXD>T(+W)&7MCRt{rGUbI>#^*X~1WYp`LJ}7F2J8BQ zTu##b#VO>Al5rpW?&_Dsov>?p|76a;w!1KHSxg z#YQn6t8O{nQs3X-K4EM1wAI8#FgD6RSEA1;$eozPeI!mcB)^`X;kS2Pzh{QjkN`*? zmq08b&*P_NW-Lc<`^2Fk^@j)oI8C(;c^d63S16prRZhFKpAvIXS# zG1-0~nKY1V#S!`2~ zORbXac>Mn+#+CiCX8@$N&v_aho)ID?_oX9USmS{-M=-Ha<29t`F>>S~Vzoh1L{h1F zFNJ=yz=K4Be2*$B!MP88-ief?y2dFP+Gm}~7LXdV)`3`cQIXvdZBnm`mDjM_+Kg<| zZDl9{Dt!w#^bMsd8oZDwIwCB&CRWSjpV5-t4mvQTN*2CTT03s&$O@D zNK1tUFc$L#ZF(H+Vw9EG0s!Dqs?jouhS-(sT7#fV;8sjGE$OIqO44N^!+_>~9EZeX zpjr6f+Nu0)!ftMMtSV-s5PhnV9pw~{%;;r5P>(Xu$FYEy}9WF4pz zStWMSB_b`#4yx-f#yIo>4Z9&fbTVdej80DM73L@u+gV&xf=@43A?dj!_dA)*v28*Ev3$;`WuAXq&ie=Lr+!JQ2sE8>J2Z^ABkp zfA&=l!~S;Rd?H<^B1M_nH`Ix@w0 zep+yo&e^uCNNfB|)Z1b}$}ymPsEhDP)N+f|qMF-M#ci);10{ARmDY#qTKiUCtbP4P zd5^Nx`fHcv$YDs6nV2nefsu4LJf6R;-#-m#*ZW z|MOiFPHsY`Y&L6CFGFYjx$LU#+iQmZ1di4Shi+u(cD;Zs+>q8=yo->giNOVJB`v8q zP-}|?^;W_dO;x;tdFKNB0tLq>Jv?0Kf>Y_|()o?*zuYBlqI>VZUn zG3=^+B@}&LDiR^eMgUJEUizjMqlwS!#-l+7jZg`XM3%5A5v7KtBAUQl3)vL&Cz(Cj zwuk#)CBbURquPECoCAAG@h0h0?6OHfhPK|2-zX~K(T4pC*E66$JVhe|SJVl8LnzJ9 zyZ6^CGb}F(iIg|&@0Jnnh&#_>^cyqR!yAzNvBjelq>MH^8j$z6&3;RbNX^&!duj(t zV&gksaM36`C7Jd@L4H(lGM%}tw0I4|-b{5v=6}hZ8b;4~tI9vRUAs!t;wMi&!VJ%g z{-TD&-zf+yhfCEy#9rVq(xge2nc~$j813S(bB{S>}Nd-)L!J;xk8Ou|YAYY!B%aIJqF^$zoZAB>> zQm5g|>*_ks3=U^)GG)jVyT#Qg$Q7%1>?kPcC?p=&xtK|Cl>4ZC-=b0_zFU~>i$h*X zeq%E$qz#1-MqxA_`Kg}AdpeN~j{?%A#9Nqd zfi)c)I_t`7s^(>aqrH3aQMMT56?u3hBVJ?#NMEb@bXG$ehF+pkc9g~_k`SqW z$R9lN77M3>Nmvi04IYGIjbv6N6jnx_iJLgokMRNEH18#`9aUj>4>XcU5~H&k5)OIO zL1PR#?$bI_Kyvm8uuE#0JE^X3J=-5+_d|Q14NB$4Yr4xjJF;ls0meBJ?1l{Xrn23v zn{AB6NT5$@X(68xQ=)SL`R4=e#!mHoqJ+ zj^9P>*QG^>LwDyeyxJYeQq~Kn2jZ<=SsU>uu-Pk^r6oDZ&VluVo!x2d%VeI*2|$7) za#TQa9$;@8smdo_eg3g$f3OlO%^MuDV$@z%s*#Wyx3NQzbT->>J;P#yehcx%m>qlp^J&;)JD39K78WM-y*h4N5150iVXV#i4G*FBVud+#|I2Ljs_^;~^vhyfMNv4Fr*213>F0l$FSdr#Lp~|*z508HiSqAq`TX0Ck{$_l_1k8j#94 zA_O)j<^zIc7$!(Jid8T)At`CYgq(pbA{%KHTLEdZC=i?VlGDkeDyEfl*-}-Zkh-F# zoV5?-ZFSX+qit<{gTpyG#D(I~3vfoz zkd+~iA&^!%3`T1H`QeA%^>(HhG;N547n5vLRTyMD91$PX=si(GNq`q>Bp|5 zL^6?nQ)D#EPRxsk`tf(}AMDF$|neDKJlY>6c8~xV)JZh$3$#$k%;l614n?>g!UcC`k@3k?N^FSj*cnm9hI< zbC+!`X^VADtN_R@7Ri{wVEfLBSZAEh8Pb-e_070&s+q7$S$AS!5+I$D%EtM@siz-IDPKmRaPD) z&1~Kpj}7PSR5}uE!aZ7|?1J6hxp`F^1XKBgg;EFq3D zBz<1o@u*!>4Dn*G?Nk!MwY*2nwFlB!Y^NZt7yFwM(P;_(rHNJ(M~Gz=1+|v=0|Ff;l&Rg85#R6nQ`elf#*XQ=(Aj-#8hY4*kgaQ z@0gel0X4}}CWfLW;Gt1rv_8cvh`LRJVs>!qMjShU^9FKTa`W?9?X0z^11+`n^)*}f zl=j7x@=->dc5IW4D~7vbjU~B98BzSQxt=>(cZg>o@7l530D0%n*y%usxe>XS=PqP! zzGO2jD&2h3XhWex(nmDc?K&vwW+&z#}V|S98`dmoEPSSN61;41eN*u5PAGFWHSvX7;FPl8j>8O*N_Tl9FWdj z+ex`F%C>9|-{%wX7zHxi#p1>D=qoh>^1)&}Mv45@gEXX>Y#(Sxf%Ki@CI)2U@f#WK zP(}V;F|y^x5q|(y-w(yW6p+q7tBVhjJ7^Ve5h;a|#|rHseJ5PA8`gTl3{haa!4eJW zjQ^r-xwRbkYRMfSXUr5Vo9S9g*|AtZIW^f&&PPB(q-rrFQ@T)(nQBry&8pLqbH{pm zw8~WdJ?9ZPRNe8i+Ov~gR6uMu$+PAFvW4I+QH6%^!Q1;0Q-TNY*;k)7*?`j$E6`Pz#t&Sqr^HY6ye}TD$bV0 z_9j~nWRyrA3BBVF0@8VrUPZd=xM;{Qs)+_QZjaRL9>_!<0Wzv0jY!9%0SS?Kk;FBq zNPIb%bm4RuY+HKVlHc}eM=6{!xQVe*8UwLB;*4EpKMGH8(p_bxN84vA&Y{;L@(@Y7 zdt7J}^jfUj%GIT+qpX4+$S={smdeSgzO!dbONhHG+SHFE2COF9V~zY| zR1*6ESy0k)tmmKx9rDQv-o}ugCje%qAHk)h0b&XsS-X4fSOx3Fa<}rkWwgTe&Y92; zM5WplxkC+^bZL2Ua>my5cx~$xs_{<L$cX3d(41|p(Cv3kiA8`6!lLnI*YiF z5t|)qNF#E#=?AO*;xX1_$DA%*ZchO^>T%a$i6 z2aP?+{9p<_JmkvdTfU6HiSSJmySJ3V&r|ybODnV&f9uhz5|)yZQlwd-VmtGqd#dY8 zD;i@23OltaZ(_K;tG%_cyrT91i{-C!=&%LFQ^NIh?PtrUBNuP+JTLSYt|U(bQvM|$ zwAJ=lePazn`s)@Y*#R>b)&yll4cfpZI?_tmL(8_Gh?iG#=tDz>CNkLLs%DFHt7czd z`s*UUkNj-lJkFPZqdb*eKjZT3#uZtgf1b4-DU3Ci*OYL04ymm@P@;bpEvyh2SSEw5 zEM$E5sZ;y*nSu;Xn;VecWIGLMrEE2yA*}XMORn96b!58kT&E#ttA+4jeleB9cr#VumIJjdExOiQ6R&74Ev;;9i?wIzx(s2>czb_eWp#bev7-=}&zk3! z%+I)4r=7c*Bn3e+=sCNn>hyUDiJ(aUpSnAaX0=VrjD6L0S2ZOsWFSaH8jwBS*2yl-VQUf_9> zMC>)zTCU_j&ECoOLAFczfMLXDCl1#<*ktPwDo7vI7?7`dlkM`_Vbi!?dW)KDZ?h%Q zID2;UX)wpIyTmQ?Uf5?B`&URo_YDY?FeM2DW74^`X2kqQE~!ODiVP1 zPQfG9#VLS{#njdYl4(bJ=Rf`50wAeA;Y9+YJ*6WR)C_G-AC2{OO)%{bj)-YUM8DqD zAMeUJwfwmKOUTYv`h6&y1185}o8EnaN>bLRAC~Q7ncT^fsu;$(vrvsQLJk3EIevO; zUZ&0`8ILt5Au=@Cb^ulyG8$z&A2L{Yui_y=jIay_4!;)y`HTBv8mAxkM|{W#k`kAP zj2dniWzR}fL;6IdZ$N`cry_ayX2=MT9!LKXrRlRi@6&+x?DMaFI{?xG45`R~#{fuP zZnKIN1i@50%+wiaOBZ;l&w|^<7Eu$^+&)uuPqT{TtE9vR#tFEn~?3-IR*j1RNB3#yBS$B85q`7op;IoU_ z)4J<*;OcQ@7gai9aRK}C(UNAcDYVFF<3m!l0mTVmWE4>s;Ar|CjGgI(NO}}Me#P7p zYqOXMaI_EV55InCb4_emx)J$P=t9bgoI=o)%D$^@93(;iw))fgEu1H$Cu=%~rk{6z zw|ezQWhc}2mzC9Vn!T2cKPXlJC8LuBZ+V$4gv=-RT2iwcYb|l7h;_Fm1ky*@X0p+c z0@C>7G>FurnQYfD9?AN+q)$|Qb=wCu4-}sq_Y2;PNC6oMYJUBxU-zhI)Q61l=%bnl zlKdKINSekUdE(LU{_;HmDI#5HQ5{RAVN;0dk|4^6#M?)dzWxE82g#_}6=C@5XsFgFC_K z!!TMha0GKS>QdI7*0Av9S7fpI*QHU!z-BwEJ#_ujwwlo{{$tUoS75V&(j3XVQ+Ki4 zf4pT;y(YP#lK*u!gR)cO!CDO>Z4y6gKI&L?=ull0&LyIHX@fq@;*MO5s)N$D9hNOmv#Dt_dxES@bWP>JR`h&9Nm#wrz8IZlbv9* zN%s@gP?-pu#zP=|-p9mS?C5;9qtWr`#K$#iu`rYUy~p448WM7hNDm}RBq|P0#oxA? zX3<*qCK0A=&K$_3-S0R!5skjjgH%ev1H5zM6&KTZAO)j6ym+haeaHth36&8i5(PQi zUg0%lVyPzFc_to1lkL+!dPD+k5$V!COP+ax$wQjP10DsWH`xNxiHdH5(`!hVj#Lsz zXBV)yxasO=8CtIQ#fF|*A1w>cJA~TjY@)&3M>t+AZMlqI^6lMqjiXv)S6<$TO|9!| zXN!2@VBw}5&R%nFwY(~CIc$@apUFIZ?>yHTxEOndMZT}2AlF{F4UO4a2c_^=FYGrV z%_Kn$0*Er*hSWxoT)*Z_S=!jbk6HclI!YF;$n$ytBoC%EHm7&Sy2g!03uzF&o7GmR zEpu%sLZnSOUbCPcnbKyBxm$kr#Yd|Uj^S|r6TLj#9wVS4@T0J39oU;2z0WX6j9g$NsR3jq+}6K(mnBt^3w9!>gqVl_;hT$ggBJ8v&PC; zV>cV}23N1{>bg1h6itJC=`W~wn?8K8fbFL&bwKt2%1L=74BAsvw3 zWcy0C_aYNpD)aT8UB##cJv(-gGi8yVk!$L*NwpUeUa;ktD4PkbE{=n(l%2M`lSLN(uq#-8=Q4FXp z5_W+Xq>rV}`_BT>Y_sIN1tfkt&WyHoHr6$^v7#4gA4N^FVO$lO8mvNRXJpq|r0qfxIKXLD8;LX6Q6Qxs#bdbH;<{c0FC2LvTCPgAWRaND=qJh( z{v?;2>a;o7;74&S0h24z1DqySKMZx>yu5f_`QEKeDQ2A5P)Kr_0mReCuP`B%$*v!Q zY`Ki*vg!FE0dzH62}kZKkpKq_Ah|5<2#HdU`UVF*%wi)s2zkwSb5 zEx-&{4la+Ett7#;`-YE+MrvNZnmQoS*BABDaJJ;ejQdvyF|VH7#{9rfIUeV)eCG^Dj(ay_bFU+->qZx2%gN8yKk>-ZFCu zjIf6lRSBDP;T`gYd`_Bj5*lT)MdkY7W_HdOtM-kIr6#?iQ6U)A`c>=#YSOm6eOA{o zOlV^2aTZBuv85Yn_kqg%Y5H~u@9|fW%RSVY$TPX^k=m=Gg#iTGqXaZ`jmJ+MZeX8O z+NrV~oWdai)q(cpq*K|FK*Es)S3Bf63uJI@2+DKy#QB;&lREZI>s0Ij?jD$wv>3m4%SAuOu9>Nq)P$My22b1@@Axix}g)2;`plf)PJVs zL2EBwz=0*6()YNBM<)h>{1*CsbdEDiXCSiHcdcd*T4!fn{BYAQYF8Nzd(%&zDjV$> zY%k=oX3d5t3plNY*vvu*WHj$1p<&#P)Y!3Xf3=;M#-H%=F}5QT@kmCxEdG{;bPCb~ z$&z3L^0h=Dqfrfygghi79zBzv^YALt0m&fjkLmVNE&HiZT(pe~X}O(5A95B+ptPNi z)*Bg2A95dYXc4l&_U~ysCpaRshciB-`Zfy$7*S4r^UdOQ>xz?;i;LH7OE0fx;x*Ra z-j3F29c`;_sZs%>n_27|9l9nw(M}zjejW+2ZQ#5GJl=MhK={LIBJdcQUlVTNR0AmcqUY}AFLrGwZp{3 zxCas+(&HFakkK^(rXf9!@W>N!Kq?RUB56p57yxp<){HJTk;x7;WO!gE%A-jbXseEB zS`x)#%Ov4B=oE)PsX!J+E=rbq>=k~!z3ioHI&xTZ$otDU60<`QXgj_>8J|Wj*KDPp zqy0X0ouhbL?7)>q8}3p|xN3po4DS&P`M|q6Af4dQ*$+xkU&gLwWB_u~@yP#YO>iNT z5v5HZ9ZGLl7;cHNWh+_}qYqWBu}vI%=VuNJWn)npBzl0)(=d(%?LN~i#z#oYU(^DC z3kQ0p#3Pw}9xu$@$Xw*A0{SM(3gkKtcAgvoNiE&l!@sxgZn}K-9V*+vWzbJ)nPF0% zoDV31qZ4@Kd%C*@k8b0AFu&k{)C(Y^S)aEhL9@@ZQSm{|->V^gN2IbomKgU@wg=J^ z=?~L{E@TMgY+U21j3ma1Y2IJ**b|I-vG#u6yr<>|JO(N2V3#PwMR>Gaq(ba)5jk}j z*ZAm08su2=UoR{k>rG|NJD{hi!c7Y*e*>q=$_f;BA|1c(SS8^*1^c)O6OY>FFf*h#^Dmq96nwoBc9K;5) zKm3iQkkz5;l91AqP5=@f-wLjHse~O|I%I+YB8h37hJ;9f#I$=LG13tY8KLoSYDfw1 zjz{l9y5@?+w2$x3<>`S$Jdxn&O|}OT1?jpWNsDU^*3PioCT2u-+qI$v1;a?fN0^F6 z;TW8NwH3Se)8Ua{DCND!AD1p{!h=6~3LSvp){}B$VWR7{I5C27C5z3n4O^QyO~8#S zvY2nubk^U6QX*Zb5gN(duLPv&$lC^)S{(y2X{I3SlL;5P+i}~7q}K;1k=v56FhEYRwB!^qh$Q9h@2v#G0^pY z%D*zio@X?rC7-g-eObZp96OJ2YzQ?;xrUaXg54*Yn#NL7l6Q^74{aDFy5WmJ*GbJO zWIsA`_v-S zKr-KvH`n{E07w(sVpJE9Qd4`I4r7i_zP-;0=iAajj}?hU7;P(MW5IDLd)FcQ27MO{ zJ@8=}=DMn;?o4~v3L;!(PLyS!GZ&LBBH2P}$jMrtQ&6G8H5y7hsJnTmXX4Rm$S9CuNR#MAM)w3b1?eSJkRC{N=RW#91{fTW z@&QexCk;u@q!WQ?=^o4XxE6_mEs znY%fIr|q3mxNXZ3>ErLND8a2ddFagQLIVw$E43!}{y(d}oRNI{9yl&Bzo^W<}HD+w6_ z36b*+M~O4s?)Z_($9f`3IGoxBBr=&sNbMbK;zFNT)N0OMy~(L53oIE# zL+d9uvBc!Iy=lA4>&nU+>$(X%_Z`~6dX!Jzz~qU>H{Q^V|M7{*el8P3fC)#9C>#c9 z$ZYYbJmU2KW9)34qR#I;544~R32soExf>Y6K(v!UK-U?A83WsZGm+4eqL;yL)?FT( zmd=jRX~xTKtqW5wH8>S9oq>}WM8R2bW|@Mcj2W2=mtY=dlij55YU`@5?ti)0`}6y@ zKRaY{_W>F~RD>6w=LbAV(v##K(VvzY1RC<>DAWHzR6~!2#;;D)%2x9rAUWNWT%TBZ z5g<)0`GbO-k9TNb;=BobkyvyIa(~o|;*5;9^J!^e|KuOO_u;#b+DR52JI0LU3FESs z$S5A0-=ND*K6PW==($rPwEkYbO>`aaWdmR8Z0(aI=hb1f8~V)^7oDK?8b>+4VoDL8aA|4_Wyl75*LWcs`P0Am z{zj)Am6)_NWMfm^=qW8=`pYZ-={s+~ef7-^R4Pu@?J?3ksnp_${kop%9kdq_k3M|w zJ+3BwVjR*8`zzXU$&>#S9tkPzfcI}H*%0ge`~QSNgiRCwqS7)*%88T{NJVe|iSzEn zE=IeHm*M`gwdeG?lIDU-QCSxr8*Z;aYIM+aoKbZ9A@tjO3NLM39nySo*%9B-;aDRSWl_i$kn5Ty?l zV7nu7-Z$2}wPaNs!_o@ZbzVQ@%J@Rt`pi|5#rLkf#pOTFxG%K5d0U5BQ|%p>Yfp5c z%UHGdUC$FE4=Em{88r^AGh9IUTg5S^F@LIawWI;zkb6r2Lg_{|Lrbx%n62JiirCoD z>^)On2=i#knQLp}daYgDu}v{wTNoN9o2@o=0OnCdDsc9y+J2T?&Eqx!{yW6{)JLz& zU~~J^t=PbYOop06GwU46A#%HL@f17~VTZ50neOB4EJ(s6-_fK-l7nYG2?iC_DDbu= zo_j0IV%tDX7D!jg_BEuxtP~=1fb29FcWOr`fxJImIn0?lbc+J^=Kz`AIr^zUMsr#s zb4%I=q=P!D|7`g#XR#5h(-=2e#%`wD_a$xNbN8*AHy`(`Os<8ATG}=ndXC#sI2fics#Ny1AHfZLbd-b)qkTx=N^YGX{oXHHdlLS3?@+w{Em6#`enGvNs`e)?s{UU;{nbajo zQHrwHi-J;V*?$^o{LB1yRzE*g{0YSlmCO=c6yS^3=arR z6++kkNSD@Pokz{@uO%@a3XoP zh(jhsF-?&vNVm_~(muY1^nrBSoPF}1>?}1ledSo?S#{9;bPbu?e3q*rcLJGvTh5QN zCH`(7Sj^Foha@@=y=cbd0cz1Z&?_x zJN%qmGp^gj{Jx3lMd3)mYHvFc=KRf6YsMGC8}rhON3U~6h#Qos%(@@E!g5`1?UN1v z_(*SWlGFaFxGXoy5;@Z`@Q~(;_c+M#qrd&hJ3nIh6y^I@KmX=``wiJ2#V^18`Tzdt zul^bse`EZqo}vdrVnE?ttgcdWTP_{iSLzWgO+#K@&ctSxnpBqZ78zZ-)^H#eSHTZC z^WFVl{+s<>wOz0&D5dniYZV(0M_0VjKPeaWTYt0vTi;?67BkrcDHcSc{jmM2Qcf#9 zPPj*8jm*$dG4vodhv;5>tL4S{#!5$!8F%S$WqbBE2V2!|P!XuNL$F@q5Fi^2NFI60 zo=kEkJ5VnmvkKAGWIPgcjkRzTkpFKd(wzhMg6thYI+KkE$lReCry+MvdF{}U*6MSx zB)_0xtF))C328*Q!ZiveZq11rCWu}j^>EV)am!J(;+`kBwZGuU-6m3#uqSaC+FN=- z@sfmF_{%GA;x10CO;SD^)vhW1Q*~OdLf+?sda=GgH^(EeZZ4J>Q+MmYKq?-8 z_pbQ*7scAlo^p7G8uCv*uuBUN`PbjXl>d^PjL;AydgZ#$MJL)3D~rN~4uM!p(gGS) zGq^FBoNZe<^r8}56iRPi%WJ7mWbV^b-cbvYD7i21w-AMI1WfAjb=PTu@C)V5^{4{& zx4sOIIwodk7~+YN`uYRqm7%dXE76Y0q3q@V=Lsk}K}nuHn;^7CTn1}@|^eSNuQkg1?1C!%#CWm(Y?-@V%WL7 z!fzON&AI$HNsBjZt&qZ&=#|dNSo?!EJ0e6br47aPIK=r&TaC|Y1|_@6)bqJa9FtFO zD`i7g^FztLHLfhIqZen6zHyOJLwrbSVQaS_`ADzjF2C_jUPPu6`U>pTk4e zZH){J7+1ezeew@6&%eiC{P{P2`pHiPqjEqp-RhwDcNAl`%4eMLC^&`V&)7@0KYOST z@$NlGX=ko49A7!kz!zov?mKyb{zx?5ex^eiA2kJa*|Ie@3yDQV&a5=EW?#hGeqEd8 zng0&1C`gb*w7BAODp=mKYxkb5(UG-uZ@YG(*S7PMHa0Xi29Zhhqq=t!5-hbvGEq5F z9*_r(NNU&>duxI;_Lt|Ag%po2FOImxxDTWsW#@!1inM1f-1f!s82A$=+n?}~d^(U2 znUjai*$?^0ClBFJFg`g0Z#)uXGvKu~+Jj%WWimcFIXQl+uJP-~zfRS!v5Az~M7nQ& zV)OYsH#IZrj>wsAe6r8kUg<4>^hGCXu=$Nm=O)|k-M+fP+$q-{G}7RS=DgTyb3rp< z=*QPCOs;V@_3Hc(I%J3hT`W0_8^)|b3gdU=_PwLpI7^LCIdE!qOkxvZ+nx$o^tP1# z=0mfgAPA6pVWt|z>h)BhzyO9Xk7>NNtfFMLjyy##NUHdicH z7Zv19vCn#IX}ypC6QrXk#UwIDSQBdnNDVJQWVO|5v`bd$$Ab(Wsp}m28 zTF*2A`*gDpJgPg_H`zHcjZ>4p7x_d4qe-40!sG@tdT`=+v?*ABKV*){-Z|uDI684E z(um9{YG)00RNhK+$;-QJN5J-Be8_Fe2&8dzbP9{QGG0(WGc=T5U)X9q^d&)eOJO)K zil;BV=mu)M;eYRpjfbQ6sNhI7?6nCL$Sk;aWw&qG#rjK5K~UBMdHqw#)6tp1Ja1h&5R>HkJ691L@xVcJZdHz zBVZBDV};nay1Q@Px^#0Jh^98f6IV%+#nS6}rPLIG4!k7FMpAXjwvyY5W{Y`v%h!(l z;!FSf`LDlvQCXag@T4j=I_RZC+iDQ6Lr4DL9BYBNh{4TRd5_oIHWYL|7`i>ju^})- zD|K~gnfRFj_#B$Q@^}BF=7n$k792kyiivUzW<2m zhMRQn({hH~WmF53iuJ|JoLL;8Mz9*Kt_jBV0~!q`?@wbYE4GO24qv)-_~d#zJvSU5 z&Lk6w>EX)*l(dQVnH}sp0gJB_Ib*GCae+Kr^&$-rk3*xvp3nJm0wQapB_)YeZF_8; zjiqEJ))uf8w>Q=|`sM_sd`dZxn6{uLAMHSIjhGyi{Zf&}^rOrA1e$}*B}FZ?=lUjF zl^P$&9U9X4kUon(kdj;t>A&95>a#;bcKvZ6C0U!DlZZrw z>n3R)d;7}uQ!FGkmMvEQbAYrz!ib_y9oj*)ix_c0xBvC$-}vN*AD{@KjtlFb(A@LG4}OE&Xg!LS<m9&kyxsvompG-y~IUGLrH5 z06_9BIN!y>9`*LtGTEw5a2naj0HnP9)P5;Oha<0XBfFNHTZ#|#$IsWs)8WmvwWG@Y zUwv?73_VH9c&bBd@zpO0kZPeg$PotpiX3Fn@;wLL1qOJ8$kQ*CM?!n6icSkjfOJIq zCfj&)?PtDuF4+mBeqZ`AS3~N_SCxiiPTJ?wfb>TgBsoSqw^rjjk-R{qC-#SNQ#eih za^dqmkBvl_ytLi8wK+lH5w)^9`RkAL~zk8vWU z9-;E?!`?@r*p6vkl!8pHT6}%^@^W-A5=bQYVa^m^yY~3bwT9XHy!F}eP<%Nvcw>2Z z`u=b%GmIvrKM0;N;`}A{e13qyE0rRtLqiZu$;BXH>WIv~K5>7rqNTVnFA(c^p|&?Y zOY-*K6^c=Fir9wCO>UUn2#Zcb|j2XFoLkgm*vxV88GTIZ(?_m1mw z{;3*om$P`>WeRc|9=CfY!}GW2!&6OCm)tRO)BLD2cX0f$?bS2&$VJ2BE0ar8b^q~; z+1VOT4%ID8%)Gt6uyPnoouOB^u0g0H(X!efAv!(yk&QHrj&9{g5}A${`0sv;j{mzy zzW?UY>mzJAe&ybqN7sW$SEix%AfT8i?$-`Sd!yM!$tib*x}sD(n0 zdi%#m5HP%Zry;nZ6vQOi^b2J=I>%S*TTs5LSz*S6r1t z6%Kd3RKoc+Zf5|b#B(9dWItWXwxHVAi+a@(OsGxOgA3+SWf8~CAq;mIS6PNY&0ZDD$uU(?+*n_Le*tsfxLbD zO0Vq;2a4Om#hv=N`>O-B9hVp5`U3K4+#ilZBn=tlbI7Xe?*mgM?Qtas&gjg32TJ&| zUOM8i5I^8CVQ)b3*=urBN4X1oF(kS-7Dy*M5fX#b%X zS?)*Kx%;Ma4E7&3pZQszoWytzjGozc+ba-5GHa*p0dZYE)Mz3l`Op5@$-tBg}+A}mj;)ukG%Bx##1zZFPu6~AY%zgl@qs13j(v`7*~!zCj;*O zh!wDfqXrOlLj5BXJ5kfLG8s-M2hQU{p#Xc+o8v1hlN8ooIrjq&gQwLR#~ z)GD~`I$zr^^ZN*o@R8+k;PYP|*&x`jdHEis{_MlQ$FuzAH~-;#>?;FCWx^jFdGG+M zs2~`HMs$>kCxbClNduW!uqK#k4fgj%iX#;T2P*US+_}}gy*qztbH1-6lv*6<@rgeCVO^)Aw;?%-0cNx2Yhh%487FR{__4Yg84NvO&9*|tqbgeW_>58|E|*m zbamrFZ)~7z|9)i{+EY?;!YXxFNgS8Wc~@4NRaF>frV`nc{LLTzf9 z0yopvEPkB2FOivxncOtG}?b@3v^1dgbCPn#tA$ zq3cVV6Mb_>{*C1$@!@vaJ(AP-YPBdH<;e9SrNn$980w%lvx>il()Yjfw{L#`$cK#f zJp>gMtyQT@j+v(hm2tXi$mL8+d$IbvuP?-RzcrE$K9m6rCD<}rGf7z~95 z<#kK*bpWGiT)d1?M(N>+lA+`sDl7t^Rt2(5mG9AcnQI&jCEphXDL_s~V?(N8Z_Hm! zBQn=>!yUvyd}=b-!+cVMt)?L*%8(CAgJZp^YHJ5tWmQ=y7>wxV8aBI-y^uOhygRR; zzND%iEvaSB2Bcp&+?j{WP5o54h$b6l=NM|A#hfEGh$+Zi4e5%1*lhonS5|x?bFa8d zd?cM@qOGB-md`54{*vW$tScNIWwEWnLR!sctCjRQq~6DowuvhXqlZkH-ulw<(Me$3 zRFj2hHW7l_X6j&c9cLuNzuNRFdANz8-U0dlz3K4M_^DH*hOUOkS9F$>tmG;BbUB?A zzH;@*aH_X&V}1<3Oy72SW59*aX8jH_b8)<{hY#V=pk%A=`|m#d`0ek%&$|@I3_yh- zIgdt7jwNDVlDplq?Dws;Vj!MLW{}q4P`Ke_Uh$s1hMsHt_LQ!amKFx)BWnMO!pib; z92>oeV1ao?fKu+G}ZJkSEv{8;Ms9>sS=wpT~aU<+Z zY#fowxX}uUh9hdxoXEjx5&^5xvo!~)9hOuctPa*x6v>Hng_>uCBn4e6Z3TJmW|F_o zIhRLJtjdPjK99t*u#|F{Y@ z)n!%r&)Shg*9>kEbe2fBL)=r5pv5G}($P2XZH{hV>bCsQQrl5Vfs}9@#wL)+c#W+? zlZa$4VPm7GHYbLX^eRwrJ92wn9p!Z^OINPmyFTI$Z2y1E6_%;khBgfY`v9 z%k2ao;=r_{hG7My)ZU!xz>IK<$0OhS&+Mb>?S1#I+(fi0A1enAE|fpAp=bCxQHyO| zyzd#{`{=$^TC#(E>swo!dp1i;PoC`A*YJG9$?fV00B8hrQm8MJYrg6*J6w z98l(7NZKHnRTQm9kOKG#cZZSBz}h!%1Y>h!X{R0gZV!EIZ50|dKM#}o!MK6g{Hqf? z154zeQ6gZF$XmJbNQj*HO9E1@6$WGjNTLqwS!Dr_zJ|>9R(Rq-MEpq_mxPp*=jI{p zIoEysLmofpEVctuEIM81smN@k?bouMWMOnehz6tm`HThG6-C9*oTL--&`q04aM!YJ zRW6HgRdF_>{dLu&>!#ZJ`{u*r$JHY~wRZFhiJ7{?UwW#jt;P!HIU@F&X5T}NE9ga~ zfETe|saP5qPick4#kVHzgBl2^6)zV6h;$+u>D+f%)bC&Tk<~ibg zb)upE&8>!TLt#Vd$$f>z=*r!t`|8uNsEQ@=VI-4@^My+>j^wrVDxKNEE9SM$Bm+I2 zK*t26nKJK3=khVNRzN<|-W!9+Az#ptNG~CcBJ|<76iZaS;ZJykNNuqoIi68BQt)5} zF-_IpgO%kkQ8@H^D-dleeWu_*RcC#^!kvQbKuxa621LJ*?W@SF!R8qtb8l|u4jXzr zx}_C=#Dx@!E?6-pT_)0~^pVUSDSjG8f0RaLLjh^4?w|A5@41#~&uZ%`AsOti){QKX z6`IG&j!!Oxxv(2v7?IOx{323~h}=h4IeEcyy0wg`3@UCLHKHP-?wz)#v?ho41dp1px9gk-Cga^@%Mdg(T%jow} zl#LH*LfOz6?v`Sg^f5E+GLaQ7@53)lX6?-TAiD-%l5LG4@%Skc&u*-(f$1D+s>W?esi8&jGhR0p{u(mO7v+M=N-A^MqWo9&y6gFyTJOe|7gxK-D9992uZ<*SoNHzw9D zk`Y&!V?0vOUYHn*_l`w6$sWz19{HmK4#DNsczjuEPe-xTXTfh1pC++`8_0ZY7&^q` zWgZ7)Qd1C=go!gUt;P>7V=9$d^=9NUgwM<3Q9uUr_Uy~AYRTJGd~M&p-GvR$@7vu{ zk;n{ImW2`-qDTHEt3aqHXpwLR+~IvW)j`lCFBQK)@eCwFB|xeVl7Efz&SlS^ygxjw z+)!_9%oDE>5+H|%`A?ZvUnZ)-cRZ^`TsxWsk`alT&&ndz(P`qI>dNw>Kt*NXWsEjF z%4U=BLF7vw(8$dJ#AP7^4#=#HHW+iAND+y^W4(OH9L<=k9gRn~v%(K)a)A_De!<#l zJs-(zTcp19h$}Wa9QC1zV5rRP2Oz|DE5*AdqLRlKZAP29){!-qE%f5lv0@?2;@6c| z(Q%FL_`18YiHYXTfAwzIpct3J^JB26VY^T#Yg$TauFy_3tpD+*@iy7}Q8h#gNJ-sR zTVL|wgN-(-+2M(a8QMB}EtG~qGBsFD$((kCr8mOijTm6^-DIQK?RokjLiaEeCY#kfA%lt#ILF(w+p zu@_GQv7T}&>Y1}BM`p6IT;4@u9ud3SURBu~9L(VLSG`=s9ghR2*_}%=eD|N3SmCfB zKTshG>+6lkrXD~<0qHkB?%>e}5~0`gX$6^UvPG6B;tmm&{{9L-CC>Xj zaSRK{AdP1zNSiji=``f67jH>kG%V>f+di%yadLr2V(7=V>kE_W+~vqMVF+mX`z=hD zs;2$iVHPvY1~d2D+wV`eGCiikqy9KVneUquZ#IpWOsHWn7L|#f*Q|GVt!=$8i3dgthGL(gUIj7=T$CBKh)3NR89E)4 z(*z|l-h2eFmr+#mT==^1b!ZKeWnl=oq#{DQe?@2Uo_!6arBn_n)D&0LBodKG6)JK% zg(k&;B+sU5N(PEx9FYfLDqQ1et|((ZC2#`j0KTUt6VA3yqo|4Q`2=mEVNUT3`+y%> z#z!$2A4lP6V0AE9bFf*h;WSkE0+1?X!{pf;AX!pWUPTb|tarWL-+h)>&{FR#u}ebk zOof*`{o2)NOhMMW1MWQRUzf zg~ZtKLj6TZ-g2V0pY1z6EBlt(Ce$lCwsCZAb7_2JoaROL5TC2F;&zU(%na66p2_bY zllqWeEN(z8D!=I#^0Eg*k@{vEX`)7@CaqUnF*HPY>hXwv?2A#FCLf)e>l;eK#xfr*-+({^Q26$ueO9NF#Cp?k2$N=H)lwmI z&7wlZbjm@uCR97FDPhVWKfm|k6tr}9(h5-)s;P{W^`n<$unEzrGE!AeM59S! z981+G^Mu;B#r941A2$17QRFNxx?E+pr`(t9hqr2sh~r&qtiWQ68oh|aZTekS z_T`}`(Ej}ipctE27$2FkTSweHdhH@t4BZ@}#2vsM6-zbAWtpDfY}?dIlXvUb)gbkO zl){_FH`g{tn%wPnfUF};zCP3&9}6#?8l_OUIWfXp6p#ntF;2jvZ@0kABmolt6CjDz<@fQJ8IH6HUZ2@WekSj{t!{ zE%<{-+SJT(z1$v;CR+95l!z(eMTQ6bOks=0ca6xD@fbrvkmCVKKBK)6L$W#I6r_I% zwmeW0IU9`z4_21Ee0tYsKhxkWHayxkXA#NarT$qV>9>eyLz|tQ;=()&dbTI0 z9(@h@W$}oH%mvboFnGMV!gV(H{RiETPmaDiF?_vVWM;d#O>^xItrd5!^^}tJXvizv z++;-=en`H0nL2|*GuY9s5ypt!n881PTR=J@-Q?B^GY);p6kH^m13Km)7$ue*H)eSN z#|3a~)W$!6l*u05+MIb1?@hOjW46z&oSHg1FE27om%8GXSgY$t7O!z~8CFu((W^l)0hyHhNW%hx8dKXHnLhMrhVOV(yPRmvO`suLv5}Q~_f`dK z@*9ea^R{n3-hSNEv!|u7lstJSdXvg(4IeA_jR;H0vS^Ib4sU^4Fcz1Ws!v1lmV**1 zWxvTa4HMYw1Vc2Lgt%yLN;z25)h@G-cnT5^Lyh90>OnqN65$bA&v6CbR=dP759+rUMfk3amqTwwMZ8lUA2Y>-Jrv_Y+D)?j>aQWhpkS= z$2KNcw08;_Z`)YkTw-^CF0ln>hSK%6=KPnTSVFJEr3@38}_VYX*O1ZzK^7hR&X?LHm>ks`nP;?J6w2dF$q_ z?K_Wq8ctp--LpGC66udr1uGMYijq)NnTj~WH#V#)b8RY;awKTdslh8%7(FU!yHH0O z+Oy-#fc@JhmYP4WOt?PGAqkJxfNXU`KBF6}{3B;E*avlx0VeG-aUdWd(GoA^7x8T> zscDV2*3cKjGL_x-oW0?tthgcBkMIW(ntaT7`$%dJZ`Ol!7F$62H5tK}>puDlQaolY zwm&K7S|WMLso6l{SzdBFEsRWuCgPv)is9Wf&(`O&&tDxQ&zF|cF0IB$$u>9!BK<8} z*NAE^An^F@e>VN7>W!GhYiwE>r~DEJh2Fl-7LB#qy#;cSP8585qh3wpYik!qkK6J| zqp=Ab`+5mvDA|m@ikw>+2{Q!7^6fSYwP%Os!}+L6jP&d}wdKA{ySHj<6+0Lwu2@tR z#0lz4aZSd$a=hqp2 zeCBcY7jU1qr6liMdwx%0Wkr9ao|f4}B)=*cGp2{*t)U=Bdm1E@G0TPO7lX05o4-bV z-#0}m-q6njwe2WuKByNSVNbohhNS2fj7Y{h;!zMnlFw250yrE*TO?T^rm=0!6rw#U zq#9phRlrN-HG`SKz4`c&FljhCAQ2H+(vK_B-(T@08SV*s(Vh|KJ{FbN^MHo*am=QAqP`L{MrzYjeFXhEs-S+?*O&K{PsR;f|?Ae=Pg=U%Pm{?TtG6!=3Xe z?HEoB$LAMDn?_Ce`$pD|E^TRkknL|aaz=LVSgyL{ivzGM{LYVe*8 z1d`^<>i>@8Z$?v>QJ6&0t4RufeL+$`Nq!*l_!5bznP?2Ha?fRZW6@wuC{kaLUr~O# z_y9dV&y-$bAiMh(UGtCcU>^1~I` zsd2-i>WpO-<;)sqNs^+<6!dyYa1luQ5+v2KhUguvP%$?uVT~0?RHYdi?!6$HpcT@^ zG;EsEP&V9gr>3YnbAwKVLNnO5UECE8ZD~cIq%y*~$$o6N(ddZeOb80n_aDU~FV19x zBQHB~RQ@rm9|fdSkdDWvHFuyKwhN_8=aT z+dWI`fx;e47-hnyChRE_)5t$dLE8BA)Iym3jgQDOMh+~ELn2Zq&^&AI7N+R|?a1=c zzq~#Qr-**Pv1xRQO-{Z2lcOw~lAPn^)I!?`V~*of4B-MK(Ke%s>tUW|#)fP6zo2&N z>Y&2r`?!PmYX>rP#1J`Sk*Al@Sg}NM8DkDK)2KumzWPW(V+J(P*VlhGlc;7+!K(+< z1VTxgVDWc%=a=Ufkb1m%>m-ek> zlmPO$neIdsqLR{+`dpxtccyIr3!^}ijLddiI3kWfm9T476U`Fo`u?r2B7_7P&Ls^_ zrKW7J*LddcZoX8kesRL-(?T+IBNiztq?`?puJ^1M{fJ=V*#;S@Auh7Z?<#~tBkwH{ zkrF*-p_Iw?S=1{t)jaq_8jd>@Bs}^{P>e<=Zk%SPj?{yDBW5^is4Wz!EGa4`TW!OJ z*r_j)fkbZc#NwXDsr8Mv(wiFjqQi#)e=W-sj#7?X=6j=UgWO;0;n@69Z96j>fiY{0 zO-nj5k*|%s6~6E)+VK~E{(IXP#P*6nY&khWAX8^F3da?A+&VWtg@Uw&xDk#x zl=(rW!D(>f_-{obfrA*J-};&SywYoXdb%%NyV-r~KOi@6ec|R|ra6$4yRm;Ik^WHs zftEl?St6Q@@)MpgB?k9|Dyd8&lZr#596=&~JVse>3tJRhNm8}1cPQwQIMke0}l2uNd*Cr`3K78Q9K($|dMqmQG-Gl-q1aeWmINJpfl zbo{Bqr&XlG(EpXa^2B}$YszRf&U>D9KHK2dd9#JfxwTb0`jp)c0bCgSKey7fUyQf6CBT}+1}Jx zODUR{Fk39DyuCHK#-tZGwylSkwi?>zW4GCKx;a}p)WPUsEj_O3*+6qrI_QQBbt-99 z;8Z3CfN={{d8FU9mqW- z!Ef3A!dGr-aP8Km?(O5mHh9xL&*V3>a1ARxn@`I^IdM=FB^x@ZXeo+%#IGDqCWobz zAu{$GdIqHF!}G^p$BHBE2t*1^wH|eWBuyJM5_*{rci<4kNN8Qd&t5bb zp@kZr$ODD=p0V#94hz+v`z-Vo|FM5ezjiR13FP)+Q#Fn$V5n5gL(3?!H0fYZn&UCT>4$=ThIjH%`^j+(;$}N+D0> zXcH8uxthF_JpiL43vFw!)uA{oP4o+RYe`l<2BsipAD z2Kn*LbZ>HEYGizKCRzK!3nyw9Gr=0=eDK(SAR6yz@9m4F7Vi&C;}|AUiWp|{=Q7cn zPt5f7hZ1xZ1z4iIK0D7J4BlA10guyB0-H!xH9Nb>gBKT4m}$uC*?zpu^CdQ@bpOR) zXfS;nU*)kJ>67{U3R`w{Mmh_MNjg_GCt9T*YidMfGQO;GImzC*00g}1=Geds9ZH<4 z7g*ZbfF%7>dyL67;iy8AiP3qv3nY~<$wXziLZBlf>lLueBBAK&bfUQo!CnU{YtWKR z!Mau-5QNEs;*#oUbZNqKK ziZ`CYMvhZfImgVw#shX0-|bspIEA~2<%UPeMK8#4L@F5nwrR&x<8NI#x^V8Rrai?Z zi;S0Uw|6u*G&R~gvDlbv$vGmY$*J)+0-2?)rTNrAdTC{4DxB>4@`=SoaO^|I_&x&^ z8WGR6Z;0q%x;oNaok(V4)xkL?RQQrS1v;?a9n}g9r zH6^aIgTVx_#WGP@Y=zI{BNLHOB7UqkhCz=-;{wtZtC>vvzl5FtZ`1d^?`=W?AzL^F zVtUU>%4k^e?j=iLthvd`9DR~ccT`015rGq&sHz>D#5lWbqc#jx7ui*0)zJ~{a*us# zRgQb&N|+xi*|MTZ`yly9?C1VV_wjsxKIRjTJKa}olY}-9<-zOw7nWSm?*xhD&PAok zUcFe;g7YoSJ@Ji&51rZsNA*;MzIwikl0>&*ujxITqZ{UZ^5Fm(AiDmsj>1lk@^>1Y z_jUxl9~>FbwJ)=OuY05>fs;Zjn~FZ8eA@LN{Vf45kbW5B%WK`}hBL_3!xU_%`do#{KLFyl3B06A-%vfw#ltAOdhtoN$Rk#SEriVwxY;{*iOGYR*uiw16 zzIUaj;vvW1p6SdwTMjAS0H#kRi=*`Wo0~=JyDPu@cw(Y!&#})(VmGc=JDT^Na6f@e z{BxT1d_}~`#7ec!RCN9Rs?}*sjilas_YzgV6%YuK5I1E+(tuyCX5)N_I!s&`SE6w# z94CZPJ9d@dVGkoJ3OX`b{Ld=4VPF;>36Dc)3dYbU$L2=+2LqkuMsE4rbVu38ufKiu z-!9(y`8ObW=i*tDu|2W)XKsV3tyC= z-(SP6-3^Uh2&HDPu584~hVyyD*n*FODi3>YM!FgAvnxHW<)ASK!z`oCqj^JTfpw@8+b!9F4%bJQ~rhE}lSn zijW)QZPo<2-QyBpL*he%Vy{~4p;0`l+4C@v{y2?adyx})7|I@--HWFiU>gM~4XIA? z9nE#YqT6`(%|)!W6M3lPu10N|%O0}W6q~>J_xty^;#RF*|Mc0X?Av_y+3nl6?aw|J zj}ZF$egc=_p!C_N&uUj5j+>biBYCX^40fW#^PbtP~jRTk`-dyRF>2^M+}%) z$!Dr~jmcHIgF*@5ESDI|AKS>PF=ID8x;QtM7z-XdI&z8{exQ^7>kKzK8Z&pknSS*u zednjIetPF3f!t5u>qNdbsV`~+oo{!BPcNUIzxK|xYp6(yseNOpsgvm3n220j#fOkx z-cqYkDlx=Pp4m^w8O1Atxwj-{*dSqkNAq-fa3i#;CP85js|G4-#kqcRbwS|@Uo(kg5ZU& zjy&bb*btplyW?ZtVd8l@A&<;|5FAvIhDU%#$Pdn*ou3?Ex_f?JdGP^d7Cjn?Wb`Yq zsLN9c<4&p#-K&pB4=KsOVddDX9<{&OV9i=Hbt4`a zp2|G_T(*b~i}&hAWu_xRvbrYOKXAoM;&& zGgY>VmH6!X(p)SQi)SHLI4TFZxD=b~pO5n6idxIp=BJ$gspWL~>u)9+ucjN*cV-$7 zFGgOa({~kX1@D;N0x$qcHV`YUf z3KxMVf%cr@o$qgba)|&+=31@6g3%nFoxRG@!<*8PvfXB$VogArAp3hp!L)4&yG`0h z(nWIgJK9%w8!-lk0U7zQ7KXmN>( z6oQoIl?mbrlP;7Vk{*ygi^A~}4@YS1>c=-~hW_F8H!_i)^crd-6riLYT_CkhD>|tp z_J0#aM+k*~j<8aTJR|6;+SxQ7}8Ndd|H!tKxGIJ(ZHHq}4F zbblt13Adkqv2FkBZ*mlPSlUDShbZOx&6s_h&*VDbC`t2($Y`fO>~#8*H&*RV$J+Yj zdVXpu7@K`-3pX%h*NVj^eZCxiqu(qU9$$(jtiD7hGgc1A+1uoVR$7!8G0deh^p&e> z1WK*OD^#9ie9E#)S$ZkU0DW>KSe|zV`&)&b;X0|)<(bIz!}l7I_oit|N>8)ztx-(> z@|zjllL!uTt+u?}i0mwDckA-;N7)_*lMO( zuN88f8_8518r#Z!(YaVQZ(9^_(1?i^OYJIaL*$|8E@#_f5_1iiGzC>s@yyafwJ%3d^7VU>T)LQ>;V(sl zQ!c&JfX3YL&al(DMqk?UwW%q`8VL>#P7W=OCPI~XC{a#C7u6qES<+Pxc4DcYW9j+q z>?gBsF5IMd#GjzNap~&Sn}mHh0sA{8eOy%a^bmFyJ+1Ra!SwF%|3HXkDnTN z|9wg|s7QBN>5q<}FWnT-;J|q_=qRJ)=g*#}(NRt!>`4T5LRcaSXY^@(1|+@aHe=BP zzGgHW@Imy|2Q9!|X9tV8bFbtud`Btkz-3o8XK;~{?G{T=vgS?Jk}e<>iq{m0Sv+$B7)IbSMhtL7MB>M_Cil zKW`c(`obIIqXgLi>E?S3kj6TDTGBhi=}`%&2|>w!7w}m0U}R81s?qRxMj{@OH+k&# zk1-h|@p*L1*}eMFh|i?^ZFA%H>Rr>7?QcQw8+bo^U# zdT${)?2IA)Kq@!%#Cckl9k6=7ZZ$vIh&iEoK@lMkPR3PUpU{!TwCkw zt)|^>#bhC+8ng1=h+2G(Ao!7ZgTaBhjk_mhu}#Vc<|JJJ5$Ha2op{W{ zGQms04`B|8XR3X3-IMS^4mC7-K>DI~o;O15!!(+e2sGGvK$^oeUq_0y58u;nX191q z=`hkC#rL?dI6wUAAsa2UutIWCWKN*gHj6r{3z2w?$Y%p2KGpeWevdsi98;PM zZLMXkezv3-91&PFzw!$}a(QDt>2!vj)RVPR|8YC@!s>|6VsmB&6AG^#ZwLHD&<+8=8*;-_$ zV|Z*3S$7%}g0V5d_Vir3R&Pu+oGTwrPj_M%D}e?sv#4rlk>=V3GU8d&XomZE>8;t>cQweMhxn696rGP})lF_Xf}|kn zO!6$YyF7QCA+OyRLXzml2Xa*HkVE5NEnPS}f8=e7hf;~8_kcXPUdpA2DViNZe z5smQZ0eNyXdUnKN9Gf8f+fHF~=HZ>!#q2w;h8R&&WlZ7{~s+_RMHUQh_{Lc}{1dB;)IAv9kH0N;V-;DsuA=21v|zGr7LhmuuAH zH*aQ+oF0tdxOqTBMB6DU`awhGlldB8r0bO%-($G(M+-HYE=urNU0a#dvDthzUZs(u z8b=eBl>1RDuLaaVS+x+F*UHp>3Jp#`?ET(hKV&Q2Mf5Q4M9l4m} zpnSdQXveMP;QZP)D!E>_n?%_4V^gP39}hV5^A6LABcy-&${6e_HStV%Y;-Oh-^i)~ zbCo=h=F={{b?H6@L(%9JXT+pd9gvJPZQ~x1+MVInbUmFB4zogqrq7UPxc&XPXHVYy zYGdf5Lp%~^gCxxsYK0`Y?i=Vkb$2N=CelRmYsF}&^FGs6k$!Por{zd~`+5;WeN}Is zZj|^q9!mMV=teY17s%eQMlklONoZ95QKD~FF%2_oX1GfZK1pCmG>#*-`gpJ}7(6>V zIYm0oMB5SGE)+as! zq-{R*SoC-lklh{QaA+QAL|+Vvu;{ywUVPnqbRF?qbA7w*ci{FKZ9l>WNV$+~@jvkn z(c@H6M+ff6ZA4z}oS2-PCxi@MyZErX5LY-N;!$2C=^uEkk^M#=KKlLd9~t}nRKm}Y zPTDJ2ZYT&=SFZ0a%IPx-vV&l&b7IX^ko8if(ylis$lPCP1&$=vZ>^NAYP^N-X0&O} zip8uV_~uGC_BZTeXA>X`#ag@FtlKaDGwz5-yIjg+of9ZZ5VDN1E)({Y*(hJK9azNH z){AL^7#zf6F_NwqBMtKI1$M0hB!7xkXtwn)=;;^iNd4`VXU`Ztf0{?pb4s`Xkogv0 z4lOy{sqwu`0VhoMJ3)*4j+3qE2v(bt+;~PnW*12Pxa}0`L}FbVD|By}nhZof_6#>5 z-gSDl6@Joj*x_YB`Q7v`a0AtBcjPC3`MI z-6}PY1#GLPa2fL)nZ{ywCMJsY^mN^7D0$_`Pi(eZ?4NJ7`RDZLH@~_48=bX#L}Cd& z-%cviiRvdxZ=q@-J6CY(PRruk8szhn{8rh@C(4;P&FSHB6KZ3wwJ*)Y*Eh+7UpjL} zheO) zBH_^tc#WJTo{^kfShxU>y!DFfN&;n9Lq=a0YXUGR3PDmB>djM(k{)Y~96sUdYe?T{ z^Y}Y`x&}rb-EVbH3X)nV(}e-@9FUUi(-~*egh~E|i&z z62)4*lXi&E4Ujgre|v8mhhrNvz1RNNkJ&c#yW6+Fd&;?-Qd`50d!Q(|iI&>ReG=m6 zo8)ug$RnSR64zwn8zg*`5C=$)M>olH|IDmeW-1M7?tG#ad6SOB2vW>8KUy-6W}&kJ zPxCVpkEWbGx1fD5p>dRmnSxb+u9|wzh8NC#@OA(ZkFSCJ=zV}xw<9kn7na5$(aZe! zHxoxiqtBxo)~K`-@OXUJ$8olcqYHw+_BEtWe$d@T>!p_@u$pw4?JxL3Wz9(v$oCgFE)1w*g9|AlnPV1^^CN6o8InFFZx_0E7wyya9}SPl zs9{lW9+1LUt>XdDNZ)cbBTt{kH`QaWg2adP!|ZN{g}+nfklB`c^mr7Is$-i%)Fi|F zv`LG`>EV8G4DhqeO_S&GEVV}?q6Lq5kX%mEFS6NbnN=4`D1%IJ1W8Oc(^y;ASK`r@ zi()U4KvK*(iBziUz)W^)YiWFZ_tIPUQ&ymvw{mIk5^bcDU#-~biH|$Y*v*x4z3B7k z6r0J_s?yb@DK$M|<;lvheYwAY?wWTBb@7<4xA69c8#32wcg#_FX&~tW$mXm(e<$^c z&?(aX(_VY~>6P~0pI&Y!uULicAHHkaG;!Kj9&J}4k`+AJQl7*S$#q`!u1qzKK~!V8 zWwx}rKoZRO_S*070l?X-97SYYQbeK=T_W{9HrycDZE$7LkU6^`@pwc4XPoyAVM?~OvcF)#@TR0A{fO_m+AgT7SAfYv&MwudcRQ9- zR0+oc_hzv}BU`hBZq%X1^bW;907l4t6N<^MH=FgGBh0vC*Cq(EzIge=rGG4ZnWp`CSfj0$Ah)f`h@sO0GvX4DDN+*g)=@@>_!gK$I zSOiM*E1$jP?FK}a7JP&4HtI^~s6DyxNOP~|pOlLO2O$(6RAC)lB3 zvX=08C0{S(D-|oJ91;((tP_1xEGLC+fW!^3>*&Hd#20ZuhdZ4#S zjXP-}E%KhgSgNw(mIfcsTKDoOBdvCd`?Nqlkl999gHQfP?;vQ-TW%tfA0Js0h?I5& z$T=5DI>j_~7-mu1;uw?-u(^UlA!D%pfgcCYjh~`wB$F)-DIkLalEz1r4ll-PUoaH< zfsKId^&y2LHamcs_BCU-1^4f2M;}L@N2CWySJYqOE683Ad4UGabL=Sn5p`^pX-*GL z9yxt{(C)lPm$)l#bFLc3T_o`!g`-ZtD%$>uSFicFVd^gMNO41%9;>|Z{KaZjW7M8_ zK!Pgbkf+J4tSlZm9_ULw-sfbS4!bSbxq7Q)cZfaISI&@4J-cc}{_z))!ua(RX-Kc? zy;;DZ*4ve=&7Y{GrrI8gWm_5ardr03TZ%L&)&g=V1vk1hN_ zi_pZ%XE@T)PO^r6Z@abq!{r|?=U;ALwpxEaIB26PUv7W*UA~lL?_`O7N~Uw7G`Nv$ zC(YBwMk}C^#YQ+}3tfsM{vD@6^RcB1@QGpFJ3uwxl=$jk7YhI20mMw=!fJBk- zvs8nwV3eq9(Vej&$PVp(#pWx9y(R%t5sYftM^A+ogGYXBG-P+eO9O|a-Si_mazRA8 zKBNyM;uEQ$1|9(t>D7%ruHzftW3LD4$22~UJn#K&{jj%=O}_O4E2@8d+??(jc1Di8 zbK0?r@BP$Qh=xarhonLp4i6&`sQ~BVv=A!eIVfxvCxn6 ziPU<0{zU)e#{Od#fa(a*ZuuCtGw^b0 z<(&9xsU{~uDiR)ZtyZpvnzUIdiRVBo29XW`)*PciNw5Pi^g1PrYM>e`$=%=?5|;oP zf6vT8GP8#lx%b26mzVPg?SoeShl7J{O!dn@5mTc$Gqex^T&0474MG#>UGUmNS!Joeh_zs>smzsfbp0^oFU8A6X|{X-+PFwZD}ui$;lM#D5nhSzcI=O`Zr$hSnZG zzsEG{?u)IABlU>6{#aw#A~M}tKghA~xf5MqwNRT{W~!QZEpHb`QmK~az}-?L54&6} zq7`joZXhkx1SB69lwax;Ye4CK!sa5A<Oy4xGtMK*xTMa_|x7& z^`P{!RNXsxxt-xNyqhT{D@l?+*=iLfnWRKsr9LSiGA|~h_>~OvNkMK9V0-DFwZlO2 zBB8$rBH{49drQgm>WW7x9wj7i?Gt1h5AuR{`_*$H4VjAu$Wue3cbD#t4yYZRHGJYx zb(+AyM!0XVzu(o6A4x$Ds8Ta}at>Rs5Zfj48H9*o3IdF1mVU!sLmeg^DA%LisJsAq0ry){6x)$5r5pYWX z^O*Q!>qV$H*7lJ!IXdIA?OL3#AUN@ zd}XET9P97fJ@c5YC$WX^uPZoVCqTX~9wlhpT4k*jA)KkD*2;|t8+P5(oauVLhRTdn z%~rOjV??>{P95?ro(lB|Y1AX8rimslB|r*N*mUw1e~$4U$_&qz8I{$@Sdu35N*3Cx z*~`i8y}im0@K^!JgX&%u0BLO0V)|^GKng7=EV)6^mlu$FqAzLmnTsb~{fNOn3}lx` z_Z{7YCCCOuIg;kyoH5xqr6S3T&(7|Dsl64NF1a8iLoSbto}N5q^cbDscNZ2pz(CFV zeQ#R;L=G;7hJr`EJyRcy3`j*9qwNksm~~aAATAF7mP%hi(lPEkjlGsyF#6&7}5j!IaBUBI# zk*XmQYunkim9cpnu{;y)qS!VT9L0q5xIv=R3O&BGvP<%D_0oz3Lk<}i6SRm&470tq zXk~q zoUJ677~_ajoFUsTkto_Z5Cz?C{o2LRjcR-%-TclIt}*~5L`q3YN9z2XmltPk)>WcB z0U1_^ZBDQMG`S2uEE1 z?AGqk(W4{d*JsyL>$`LGO62A8+3j|%WAo8V1N(+v(I5*Z`huvE^S<86=oyBM^|*3M%F}4uQ4n`dQ`iSPaA8U&>~o zi!IWX*g+gek?X8nd1Du4@@4fPLs_%3zAEjwn&f3YR?bsd(wZP9cd**!lA`RgiFTwP zvxY~{V2j5dA`zWwxbJQWAe@a(D5$b%p7i(6;*cLih!AbGH}86-i`JY677 zKV-d+?`m}PqvJ=)_6%G1v_|ESdh~fju-61M z<~NmtG{KC)@z=u9ncV#Y^LVVh1qI_-Ii$Y6n>t7r2A~XZy_{*%ZSBR zk%k00O7iH~_##ApBp@{btKmW&`IRSXG$oDzeq?VmnnXMrBGnZc=nZ3ddO-5*JOjE4`k1z7b|Jd6c#Z5aX%B zo`)mChr>tiT}R_kEm2j5Ixp`zP4uH`Y^GMsKuwlL2Kpzivm)>0*#2zXAq?i2VYMk9 zP4^Ex23DW6BE;>9w^r(Dcr@2Wc>e11&m)cOTAeZu37}dojdXAmRg1BSTF|x1_mKN> z3Tk{rG+0LY#>QY1(>NB5jV-$^Ad{?#>>K2gQ_ITYBXY$kUQKE;ONy|PY*#Cg8P6P4 z4pvv=oDt(*YZek?_>i$u3A0~@#;Pu8>JEDxgUvpBC45{3>GSC4#Jiya9L>|uia{YZ~Tz;wMy7s#l1L`MRokE1V#ar9LrBzAf9>xQpY zq~AFHMgh?maO68>S5kO#FcA*CLOcEp9wkNx9?JNDqeO;UzvG!}?j+G)p?4w@g5u-l zwdc`5(bTemv7o9Ay$9{Kl%oR-<<+%Vbi~S69$Z@b>Un5r_ucP<{lptiIfJS7fF!%# zu&>{6ATGE1$%6X1BW5=h@~hjQ&!j8=i7B6#12^%5SP~#J2V2Q_dk-)xSnWzy zH=@|iqjM-M@>`V;35xiRQ4QhpR;CA%4OaArYgM${P{G3`@imZ-Js?Ss>ssvWeKQEF z%C;M4dyN(D5uyF7m$b=^IWH9t0nr59ZvMv`o>ncJ8QgOVeX`aNX_z#5@zL?cKKBUh zSrnu@R)}hZNWQ?Lz8Y3rEF!);X*_|h1bVfjp;2#dAlc(V`WliaP(q_mBsBhABDu!G zx}nfQcw}s&kG?Z4sPN$P0~$G$uWK|)_!#x5ef6j;x+^&Aq4kcEo#n|F*ZY)vmTHo% zu3X`Q@3Ia)C7Zlp&OUJT*8kGU42{z6|86#^|&c9uT)%S*K-q{bo17%Meb*l z43Ns&zn)3kznkt{{`ZefR6m{jotqqDGLVE-9e**`)&f5b;P6#>F@7Yy;7*f|QI1xP zckON#icki#U1NPfK1+aYmSF%NF9(^`zhpoUN`H8%^dnv*+LCQnL^oLJBuj+i(Q=-& zxMfp5gve4Hnv?P$4||Xz(Ysjd6|)svt65xaku*o@_&cX;uAV`8QrJd4daV^?#+l`Q zt`)i>5^D=hx)BjJK$3fSg!95xWsSy-fYkEuA1rw$SiH zWlo4TGb^hlwvH@r-Fm+C{P|pB?bgD4T`fQPq|{@VN7QO&Hrv4vm(D!zZ!|U)bWi+G z>EVuDnAtqI9QpOHq@B|=le@BM*FG#ZDaF_du?wh1Tu9KAAE}~t3l&K?W4CBBlFiPy zOrVuWmMtph*?fzzeDUd<*Mv=(*cOka{Mf2Ed+ zG*P}(6uYf25po+KO~;wfqdU!|7obCQkbxJSJS4y-l3|xK!M1{$9u>KC@5@_PAyT1@ z3fczAyR_$GamNIt={{pDoB6`N(0L_&x>mbi0}P|%b5TypX}P%J(Rh#ARq93RzSSN> z4i^u-J!k<>LG~mcr67AlY?nzt1*sR`WJ~-}hBua2_zooBCOFQqNpO@MQ`%B`$LG=b ziLM*z3Ln6uUJa1!3P;qXDRwyiiOq!l~R?|A+qUBe)Y#5l&DNkt-hNr8Xh^NWZEK&_U8X3?EHS(JhOd|Lr6nt z$(%5defB^zImtBEQ4maaPt$bDz%dwAMWN_~iv&<4LjbcKX{xqnqkU7E(a74)MZ#f( z6*O`k;gK*GNVZV5FFcYj+W+f(zUz5jKfIz_XZiK(7n7NGl+Ud7tly97KmItX4I=nZ z)vWrc^^dGEX}7B3_`Cdn!KDq;u!u(un;aa^THKYHK}}byDbm-bCTT>-H%q(uCTYM7 zPWCoNc^lV6P#*rc{d>)6& zq4!tr-u}Q;WJgC{>K&HLYCwV+Kw88Hu8l~Zr?jswa%lXA8;r*2(r|{1S?su%ea>Qg z@jM2%CUE(SCL0wAj6O~Cj4@4%o71ddu_>h?xFa4V#-S51^ah(pguC$wkjP|f>ooE7 zp)aQe5#aDuXjRMXr4L_jj$uExA3xq&IzCMf&CTV}Rv2=aP{=y#g#_U8+?Y;a)+YS%4Jh^=c|RS@_|{y5c{N{`kjibrQ#3CL86bcx0hoZBk{XVha_Zp($I9qIp#h zRC!5-r7So9M3vRbWM?YPN}7q~5O$VF{Sg?4K&|owNER!W$=8TKO2skB>-@69V3vi{ z!D@cBOyKgs3_mGD8Ev#H2HVu5SCA($4Tw1*AR{0~lhWM?kKSM{(Sy((;=^`uk z;^^a}7pM+MMC>+|WWN(`jXZ6QaU3KtPWhRL{6G$k1RiNRoF2K89I?reGTNjZ%~+eJ z1xcRoVkNQJ&}uk3B)yl7bQy$kpXTI(&GvH2%ZSwFar7v;*b3AgMv?HVkR5Y?U6VGO%yiu8OCrQVn?5lQ|-Qblp0!kG~YBkepkEK@@7JtlW z#3_PaWCluwVl)0s{)~u@a@eTH18^lNQ$C>DC(md9UbNBaMzv10yN1vVO+-O8v6&lywna!l7_~d1OE)7Xc zd~oWv@fd*YORBCNZ;ry5tn;2-Iw3{@TnULd9I?z9BC)|bU?ym$Ch(99v@0x^~@~xz7mh_ zEp_HjkPgREb7^Ju@}*X4`>U7v%*xi(=GsOjU6uYUXRxO57y;QXoxNP@A>*?BWWS|o zr z6<3c4DBA0yS92OFE9@1-pp2`?c(WH48yvCR`-}68;G^#Bom#sr25!tbH5h>8yvTML zGBkqK3ya+EIUwIn^evVLURg`5i68l+!Uo~kzMNml)6&>`u<>}iyuOv0-(NdiXtgXT z$$BNzkB&!T*!hQ$bh0g&N*~ zs)HqS#_xapm3`%iobzKV+-M(wgviq;BGO{w7+b_fsj&F)I?3#Wx7g^&OE;%Je;>~# zG%#>#pWht1jurMeO2O*CMxPe&fykjLPNW?mL+4?)G~@*$<3RF?pCK=5NRZ^^Z28;Z*-NMevaZ|%);5V+I^F8g&9BnL=K9{%)nY-V-*Rg|dd@F-2Cd`mk` zN~6U*riJCTOrpG$S$*;HkO2~?C`z=O4fVoCK+;#U{hw#0cJb`xM#|EM0LcN8BV;X2 zgr~i`ovsT=kQ~jvMnNL1c`uA+OF7M|Y&GcNl5MwQvx0z3L8F=*r4sSyx%AY4%T$`+ zr{yxKhb&jLMG@0$?hS2)d_v|nM50K~2sdK8H7N*KNrb!Zu3e<8QlV9vx&U(9fP4dy z4oD1k6cX>&xADKQ~{SXKOi3Tp7Df=EI#5Lv03|lR89RSD{51_u~gx;AWf2zUa?f ztgA3DOxHyX88X_6{QRPZ+?34Fwx+VBOI_nqkOrhlbcRIC$u<#?(v>1IoHC^%fBNvo zP@>;gR&;E(>xz|nEP`O7R(db7{&K7Pa(-zlv%Dc8zKSg>K%Iy1hJ<0j5 zcjOL*r1NNW!(11HBb!~_7`^h!M&{C`{LuW&#@2znnKT+E&2I!`bc8H489zaMXlZVp z2oAnX{W%t!O-uFf{#<%a~67-|2kq zs_|G&@gS$ZW*h1xC^?z#hHtCjC#-KpxaH5pU#0?O+|G!5+sLXiCL1DEle>UobtPxK zYzdRI*Z>)LRMf|t<_Jjd*9b@6T&6akeEj&=_YFw5668p;&!Y7~z9ajNBXY_UsTjAM zY$n-{T)%O1+Dx{qJ?ozOM4pZ6bDha%y%Oid`5Op4b_7-H$>bcFOwJ2PqdZ!rBrp4y zd~DwF(h9DNM8+#Df?E@S3|{u)9=pm%ZVo2kal#vHvNTAf{~VBrZZRPJ5!3AWPyO9P z-5)Zt32_!1MC8t7QF(Qu)#Xg3MY#hRnx*dX1Pk33H@0zN2*BXFR+VH%to@+C4+|?Q z08eebtQ5&;&kD#{fE=BD-2hAR*w$S9QORVhYEL-U1!{updahTi$|1Hmyw>a1gQz87 z915uW#Xu__*|Gy=%ciC>i%R*-v|uCUlzEp$8Ii@EMR%6}cE? zN5;hJQ14S<3_Rvsrm@Q zu(GjRz?-p1kF7?0{`${ZT=sP4tdL_bo$>gnt@awl#0B3hQ6}ZHTP6NngA{mCt%Y`q zr3R?PT`s*9L)rz9EiH0@NAqx+%0@#Sr^Ykflrmpf+ZLY8+1Xje^<6+@8I#So)`ufs z=pf=z2Aje(>BmrZb`ooU^*XYHWyb;M4Us#4`q;ia(R4`W-0$zjfJ8)O=Nu{hXgmVs zC!Zv4vTq)5KxSG~_(n#Ur~;1$q%wz|NIyEo(P%o-*ha2TF)w1(57G@2&;auP=VS*r zJ9dJMS?v%b-@Bk8!Ex`+n-}nSlRlbXeTaVi86Ls$cfSM3;AO|X8VNj__;23+d~NE+ z_&Z?Kpn!Ki)RS{56+TM48LDk5)~>A3$Ew2i@-EJju2uzmUvb3`xzQy=3lNf zv$HJejAS%heVt_*ej{^MlDS4yf|+hPRoSj(>(HMC$kDdGE7tJusmWC&6ah#V4sGfG z3C1Kn<76|XqluTh=np&!GxVQ8v;ucHqhd0HNj`9cA)C^Wl=WH@FF)`fsyH5{AOSL} zI$Ms;kD+yeE3Owcmeejh9BIk>pAmudlOh>cdUV9lJ+s+Kmz+tSBhuG=!;PDyqD_a1 zn|<`@Nkz(9UmEGV^nn36ZD&Xkc_T?|-OtSLl>1m zF3@8<+9&=+C7&)Zf-14SoV+}6>F(mt5!evl878x-QS(z7%b49~6*mNMbL<9bh!^aU-D_`P!aHw^wQ5w*8m?mzkP) z;_zj>p~hr6c8UzS?0BYTW=6fwGg|yTHht-Xs}p9gQIF90-vKi4h=@9akniF+Dhl-W zRWsAe@Ou&Ic^oxhc(9B~rrcHU=M=fMxKJweCijRkb>n4NeS@9vzOH>O9KYcOF6$cy zHSTNMRs0*rW1TBoOx2j^^SpTQ7e4>s)FW3loiiZG&%mPtGS|pbA6d-RC+kH}H69@y zAceezm++=Y+-S%d+@-A*SIRQY2_j{4r!mc%|H%EUDdNs-K1!tmkTA@tvdJeGE=^@Y zlX@i;=h6fX=^JTG%ua`a;t14nAySdx=#s@B-$zT%>2G>Xf4L_o`!8&PP{gC9pEpmB zju)x*aXyU)GLc}noH}X-ukg1@z?ZmqVt$NS76MWl(k*VEdbXLoH7^E(uYG=v;uJ|l z0ck6~+%`@H#(xpXATLiY1|nszBkj1{IY!0}w&#&p(B_n8K~7(~cD0|3q300^JO(DC zfso+~Z@%C5uV%)7I>#gO6i~QR7TMp*=hN-}{(%PT4|>|AL~?KObf{-sFr;Ly(Ok9f zzP4Zw+vgO1WZq+uK>+z$LD@o+=TeNR?{Z&|t@-;8)#rpA9q?$x2LPJOVX%_d zFEG&r$obS`YEToUDjgn8L3S*5WRXonhDbOfzuNzxpDnko#=g1xM&z1l9VN1l(S^1u z8y=AZhgM~-gTa2~Ds=6$oywO>Px~jvn}>%@;7e?t?k%t4ZC9PO zw%I?`uS;1CbVdq|tre;mwPL2w7LQ(tC_X6WwC?@;e^>z0@kl#E@j=d{Sj@I_sLX6u z?sj!FS1j>sW=YM~4M^pQS_K86wB}eHUkI@u<}p|0X`>vg4KuxAaP>&nfN20`s0I5^)5&{3Np;{G4yyvlON{-g|YS6JR?U|1N+&>ltfc&{f zLa0t1C7bTx$(`RP6c#V9;$I`CAbkvSMJ~4EF^GYwTVPOTTVljQq~7tWB~ZdKPEi1gjv z(vWrwk#>kBKn{?S1@#@;88WURFE)9hA1_A6G1kTxFjvhs#7so6e>+kKigb$O(Fn(?^;5+W^^J*+uX zQ>GQe0w#ZuG{5~iMBa#|si0L|3qv5%V7yrE!|fuI=iKYKf`mp}-?hI#L=VQ5D|j>4 zu1*9VJ3vZ93b~LX3`Cyi@l|={>PLp75&5%6@!ma-ls`XhZYQ3;d)i;iu#2mXtxPN) zoi0q&OPcKj7$qMG59PS&jqR({r@dThIa{r}4u7TBsqCnLEd9sd3&eZ=Ao844)05(j zu~Nbh01LBhn0cKm)TA!akqkVGggQyv^T1mZep=~bIt7e&n1n}Al!;D>M+6|@4e-iV zdyyuwgE9ojU7qbL-ZoC0RbUGh&!g%f1CYlCWC%d|Pj{0DNJ%(p;^XW*KEYx`q|FvL z7yI;hM&8Vn3MzEdpa7az_jit|BuAA=yEvytCR^!iP0ghW^7i~~v}EFXcWMgb z`P(*0@Pqe%HQ~**c$9QBr1Mz}NH40T@TT0!N3Z6Wp1!p)rFwITO=vWks8j~ty?WJ8 zQaWYR$j096EcT3Yd~B7_P(IQVZSYclG5vB$t*dKWSXL|RF(CQRrpXO{A;;$5{!$Q_ zJi{7-OH(qB29J7D@<NTViFhCfI4HOThXKPU= zM_vp-o|v$DkpXxg3rw4#%J&-IVH0o^Y*IOYxr9j#7{CXyT5La%wC|c)pd!Daruk+y3o4 zKYx4gBkFuK?jCV8QfBedPY;XvGRw`MUah=bCwwzrcyD2CXTHtRu88s0#x2?Eg7C;n zU?jD+K2Rt%nM}bzXg5N|Vbo~g&Irie9||fs`@#>O;$8Yar;}r`ntLP>khxE1TWlo6 zsy~#5tY&4=1-ERr^)zU}3p`3csykLZss|A$A+dq+hBXJI=Ml54#J4%&2c|n)e2Ju- zbZ55dS`d%HVtbP<(t?KcYuUL%=m#Ku@SM0KFPMbLozHeop6o>XKxXJ(*eA)XQzWVp z(OuoE$2)|S>GJ0c8Jrq3*og8q?_Wy{-?-9yyKl^&AyIZC)>4DxLLk$}){!Xs6Ac>| zk=M@w>2c&j01*+A)*87Mne2e%Mo^K z)>ar&W){SBq=%Evg|{ER7)z?MVBVzjVmz3y7&q>Iv@`nk22YDAQ?#!rtn$pM|Tm)A3X6&lKClG z;blhqNc{`Wvh5vd`(|`{6gF0%d*@_lMw6MfebbgO^jgKZ!6@k>f%yL5>PYv<@K|EZ zne1U|)#S@)@ELr=pTs*hx(6aTM*3=>1((Za!f%X5E?#rz$}56n6XHHjIvv@-sQ*oO zZ2i;B&A~4(e{gO5!(gk$qBqz^q~<}|oM!4CU1wLEM*;cv?f8D;Z{PkF6m8idqape3 zH*dAim@Og)nF8vuzr421=@Gj;(0#nv)z1`(I%Jg0T1QfFTpoN?X_pEI|6XYWp=Gb3 z2qJ4KqYzJ~@grm!kYD69p$`&s59GSk(^=XM|0p0Qp95rpN#X$NO2}(ETnb2}O>D>- zBq;G!M}z9f<>c>viId|icUj-sD+J4HocWSh$gb!rSZrE%Q z*)iM4T;UM8(do`!;YH*damLz4XVEjcKlS-^u+3mGe`Gr z&zsAC`=7u0RxBcJ_Z&Y7$A`7;yv+6Z(pQ=lGK^Cnk8UFMvI53oJ83g*=tGR`$?qQ@Dtb2kN`PaOci|X8=1vYN#Ke| zu9AHFSqda^v8|ZHH8r66XpL2w1w7)(a0xkOw)qAs)x2v-aK3{=e%7M|7;X1QW=TW( z3`cnE^mYZ8#uFJ7B=0zozVAkV)4a`S-@pGd>Nvdf>}b#Y8oXa0o^j5|vz_Bx*YTJ~ zC`lOnk~KAo_!y5Ol1G!?#O?XMF_s9Z$PFYtj@Ba?_p(hxE{CD_ds_hMT4$2<@a`>k6UM*xtAUs&1B8J`ZXU>c0O_o8 zm{TesZH@cep8cM`ePlk5-=S?dzC}y^G@05Sd-|&XX=-f?^$1}7rVoUE-n`!e@sQWR4Z9Fy@aHVCNHp;@(BRA88Jh}#M0m+|i8j$v9 zoaaL^r}cGhL!|Gd31vQEuvDzYkjLO>d!voOqg0KY1v^F(iF|UO$d6BD?;SlO9G>)% z$Pmqbv9o{U`po97VU4apLu&Y$m{dcJ*=#B+xDr#F^Bgp_IB5g`ZDKyHugXEbL-LBBA|tE4cA?MfT-0aTG$cSSntrsoX7kC#{p27x%2>aO&W`Zs zMAq5^iODt~QIS^r7;tnza(`Q#>3aJUK+^4nhLixL@p!L&km-6wu5f+sV4!V0_AKsq zU#hB<$FDQQv36w2aPw5lylj?gUF-jz&Si0Ej7JS}Za1hb!?%ISdgUMD(Xj}W+@bIL z>?C%$6cwj~WSt{px@9zSQ}r%DIv)tpx{$0txVjo6q=o%1>RG-G0&d*lP+0N|mNl!y z;KKtc@k4+ui=9WdP0XQ*nQO#I4DwYl+!mSi8j_HSceLjsqs{wqv{mj7u^;j$maDM= zQHUdQZ)dY_IQc9&%rs}F?pfFe=?YD-wl(R>^*eV7IVbfPqLDA-fyfQhkA@>OA}%kpImExn{Lt3c4Yc`t!ZE1Fb2N5< zz7MDlj50P5Xslp$;>w~LL`}=!Ixv+O*Vxrz2J3j61 zDnuBxdGW+!$Em4hmQ&P)t=~`83$w~P%UC1XH0zScU#n2O`TLTP>i9I^=6vjW9R=yd z0aA_*Y-2dNqj8WHixBSgX=ZjRh&o;go?AglInrJOiF z+yhy$GI0i7$e}rm1E~@oE^KwQe@4$vMMl=Vqau$jbaG^ZJ5Cwe+Rpux$kD#@LiIgZ zI{L8%q&^*y$0v8Y`|b>}KSMye$hfoG*94^Rf=zVaSe+uaNE9;EQ(&~M($`pwzE=$z zBBKqwtN1lsVfvY8QJ2YyY&KWKq?cG+91Xc*x?VUcSTM7{**$$3?HD^e0^|SoOzQGL z5{IPI8X`ebK%Q5RrVQK3%XreV*tpfdbzFY?8~NFjjm+*q|A+5Y<}%ddULCkPF+RVu zF*aUMbjK;jh{vdzt1TW&@c6jNS0;|fl6GUdwwYY@_pQl}f>fWOgs6C(KvES28Odb5 zfC=Y!0@C#4^HR=$v?zI-pp!LJ*r5_6m9TMPNz6DRrv@ys-KmEAp$d?4ee9Rw)FdcK zbuGXn;yoG*iC;WG!eb;I1$oo~5+sdE`Puw6+wf!&DV=nzvzHOMPfiFl-F=CP5b-qGHG$Yov9kX(4!Xh*3>N-k#>uTS@UFh1d|wNDd5BQL`-0O`X% znnm$1{}KmMIBIA`J3sdGTf&bB3%r8dd)VHsG_HO)(0jPt9G4CpzuJ?$e>%o<+Z$_% z!HC)BjnwisP<(x@X*-5hawZ;eugUtM90g?QhwsT0y3-@2XW*q|O)lNYp%3eB-<&KwwOKt+IRZbBy;k@C|{;y%Na{jISP92Sp1U%VjJ7H=On1Iw{%f~3a z#kN*MMIZ&F+3UklRS{}(1BH>REjZ8jGWc8#em3Vv@#w~klhEFogGdES>>zo3O2Q^7 z3~{&>CFf$5*T}P@#p^e3-nt_qnN_NnDM>yelWjXeSQ|2;-fM@R>!iJlW0T}DgvZ_I zE!*iP?Z~RRn924&4Y!Vl;mBErw7iCpYD42@-=+7)qog(J(c`GM z7k$z3vbF8wp8-;yw$6~=y*5h!Iaeu9eq=Q2jp)-#&uW!Q>+01mR#{JD3{g7ciM`{! z!Eqx|w@5(Gh~!?(Y&Dram04RTibcK@ko0Gs)_?wMJCpVBr#Lpr~vk9|z@H##Oe zD9O2Cx5E*V`ZNF9Kt|496QBlwPt-11<9jRkGvj{U;KJD2ITB4 zPr{EPjZ)T?uGw$>Zl^Z4I$|o)IJ9%6ce&JNVK$rxfb`yX$6h12G@eJ>Xt*DMj44Pr zcaKZfSVStoEFvH4$>0=|`a(cH(dtc#(1`s!esUsfXVX;n-V9NqD*<21tPb5f6 zc(6r=Pj@qgd-_^1^5$kdK5A=n*?1T8D8|O2P6m7AbOzNt9)-U;L;_FajjvSB>g1rSuj)Xex4No2K(TXy7rEf~T*%tWm z6H8H$0@9ieuiVybQwsi<8xohvi1CCc;9k~ez@ghwTh9Uko+c#LaEv(5-aMj}1PG}6?1^`T8Cg+jy( zwn!~7t7-hhuGPc*<$?A9*p*88hfWsF| zn$>pwxSq#2kSzh}6WF3L;xPaz9`_xPK4};RLR%rkYT+g1Ab1A zca9ckUZ`aJPIBhWGfQdvXylZ_GxOTtzI1X&iJCW?#|Te2(kNxLp~~=m3t;8E@hU=#fgCd z0eNj``Nq_I!tEUf$+*Ze7HgHmT|(03{fZ^Dvrbr)fPRD(L$Y3KQgS8|J6^WE3EMm< zjn9$W~XFSTvI^4%zNBYgrtA5Rf8~dq+VUkk0>> zq*E7pG$1!UkXUS=#10w~#4y*+So@nHC>RBx3N9jL69H-Jk*A~k_mAHk@4P`df}>_8 z?xAa@+~_lOq!Fp9_akpkuPYAu>4`iX$tP$u4ZT!P1u1xhvvPTlSq2%#R-pKLYn3rdn- z1t7^~i${$PM~q0QWB6lny_tImjDK`?QsrjSl#{J;v#Wn%dVM=JFfoCKyxOj9FW0}t)lKZCkjW^czg#tf#+x8#Ivf#!mM^ljEP-MH}iw=;E#a{%n;c!Ht@$Agu2#-NS z`d-5rkceCv!_uiodkaV2?kO_ie8OV~NOaGWoi}^OC(OGC8V$XFV*?_m9FX$>NsSl^ z?DpN`#lFGBG);#$3GZC_lEPexcyvIzVxM8$@@UqS8y2J|neb5d!-p3)H>i*Nw*&IX zy~AWaJ4t#Py@n*7>TpDyJF{s#-W(h3yL&zHD``g`>WR*d?iC~`NNB`jJ0QW)3DF;T z1o!4;)=5eu!6z$;`1(i6#vd{B=cNA5&=HwD}J5Tr`|H* z+@I%sd3ko$vG_;r4l7W0j_m3C%PL5dyn;haCNy5!01o$u{?()3$X405Fb38;H7Zu}| z6Sqf(Z+?Pr69K73UcN26&zFW9k;+6uwA-B|Ha(GHr@NgwZN_QvvVBflzF5@C0FH<$ z#|TGBbbh?MI^2D8aBy|?W*5rw9nMVftsRYy%6QDj1F2ND2hxVq1|T0!p5;sA=S;f@ z3tLQsJJY?|`(gjJ@_PB&M4Q^jYu9?Zx0a@R^W8nQYNQ`62|`o_@qfSNrF^5tGKQIS zN#cNH!(o+&sCl7Y+C3}OMI_94Dn+B!g6|fpIh_|BkALt$emCoZG!-cp0aE|MG|2L! z15*DJ40ChbJ7-ASI^Q`}n1VD7Sw-9t($)9yc03x8fyWhq6pzlS31M;37{Wdd$RPY+ zH}!a(2T~ex?U)nf-pu~an;{MIRQKWj3$dd%FUhjtCOko*CU@N;$Bcp!6n0Xegw+ZKf<93`;>WRRi* zvem({!=ty?(AYUZ9%8UV*;#ycia$i&_c(ekdFeAk(rZh}eJ{8=Izb-4cyYY*!cX76 zJJT7)Cz|AEgAF$O%GC0UzE9NUMZFpGD{gC|U5^22qkVjR?(i-3a!1)18ULj5%{U9o zk%!_RKXM8r!&;EQBv(fwA|>4MX28+&=*;yX#h7EL$DiX_YfoZCW6Y)T)#8ZNiyM%C zkVs7er4Eqk+@y-Zz|r`~>2%hpr0C?jl*#l?d^rA|{tBn(_u+BAQhRUQD;fP|N+6O) zlhon1`ta9RcD>7E){>%Gyp>rK^d#HWn{Kptop)rpM@{Of-2z!e6QCURKz{f7dEAKO z)i{M%n)N`Mi-R)*-*w%k9l4P65rEE7x6$zDM?^qMyt&RGK|jU~cCgsN%Ld5^MjoSG z=>Bx+^<)6j4w3ZLoa~&wpr6al+x$! zwGAz2rl%M3wfCfM#AEcgX-M*@=O35UGmzgpsMaDLr5`DoBv>s5CB@x?A|%RscQj<( zhsN9G6rBw=!Xl!P&wBNB&Qa&@pem)RDvRfQ!{vN#0gh_qF5wQ2kpQC;JNNqk6B&*k zNZD(g>rRch5BXdeagX?HVen}nj~lQB9GwK!8P1T8=V*mJRoG|mXx|OwOHMu8pD{ms z3Zc+eN#|AD3evr}H~a||x*Q%gu=Mk8wcVpJJ3!i^!{K?l!UQDk5PlN_L~_G#>Hrx$ znqfZ$Ev_NOq^xyNkV4YyNAs>tJz}q=AJLA}O>A<2o|X7oiNR&q*OwN$U&nbUdOXoyX0)SZS$X!V6G3AYXrH-$l9*F(A#y zjzATVSp!m7DiX=P!=wFMLu2f$;UnS?oVh-ONC#xVasL-rE|}jU7{7{ebT{MCBPnZc zuek0+>=1b>qdoKN^u&ggVqlYddv{7gu6%Fe0D-(PB7>8ggwn`d zaH?iVPC5Z5O|VXUaN5y$tb5IiUxvz#U-0l!$MH+jqPn(aSr|ozxHZB;wxiez&Q;JH z$3<1Ik^BSckGKEQ{e0J6``PEgbiU^~&v|@+Fe;x}Yp=D}TKkpd2U|yt$J2w2gM_B4 zZdlov-}-@bKt{?hyzu^u@L09;SX+D7Q=12dtKSNn9?{!b$-iWeoqtvt_IiJ(^JrQY zkK+{?NgVe0#X-0LX!-E)w?+*OS)KgP%(ciCnl>+24g$L2z@%%V=^MmT`e#V?RPEf;+|qu~Ms@GpiG@LN`M5(a+l#Hs z!yOYUoM{^=M;dXHv$LudcOKngukejoM`*N9PXRIGrw}U06Os<(bS0)d>US#%IdeL2 zYjm=qV}TPNS|TV7y5-I~0cqivfb`{~45Y6g5kNkfN5|27Uj-up5m7R zSGQy#Bakg~pM9&w!xmgNVik#rl*=YQX;NxD4A4EW>)qFHb?;J`?MO1#dCvig#5vrZ zu56Cp6p$JMP?xnBis#_DAu>8`SWH0LVa5QN%%iTy&u`CC;bt8*9ZS|xS*0NV|Ny_qI|%J#9swnJXZv3|oT>Q}`$?7BP?( zbbF8^6KTmB>ck5Z0EwJGw}z*ORLC1?yyQUgG(NLt_zFl(v9SM`;m)mc_2>(Y2;^oZ zkm~`+MHCEV;xW}!Tz;%j9N?TrM^dUVk4B+Aq?jhTYy-0U=1!G?Rzsc5 z4L~d*1r7!h?KnJF_wG|KKcA3fy7(@vV)Zf1BMM^z4%I<29HM$3=p!QOi;daHH1<9K zc@Q9@oJ`L{a`!^W`;Mc0HAy6nydltPe)gq3l$pg*xB;_Bo->K^1~R0>!^c@WG~9aKOLQ~8 z{q%=Il0X^nsR!UAe`zqf)L`S)y0u`QWq$0mLl0~KG9PD0e=Q!(VGGB({?MZU@%w4= zA)47y_5KZw9{tpFj}D|mnNs6=sN~TfSU_SQbpW=2L|Q+dI63pjl@CrZTStdq64@&I zI6B6b$ose7F0nj=M||^#UF{2Mv|sO8-*g1sJo07GCO)v#@qqhEbNf8|G!Eo6_R%Z1 z5jgU^KEDZ=fkPQcGmqTVAt@NRYB&JautgVorljeEtR?Q9{?-Ok#Mv@^vZtM`GdH+K;6VjU@ zVwJ`ISbT=!pGp?e3v|6TJ9F5+cx}9`Mo+1bI=GO3^ml=*S9io@{_8xWEuQL&{WQS10 zB3C5R(~!jn3!6L?dwa5gMx&o#VI{=2zN9QJu3HIE0uuSh_{z*yvABj3kRkZKIDIji zMY(p}bkP8NQP1Ywl?X=w350@CHy$NRoT8Y&4>BGLX@kbybp%p4=E}q|j^RRn1Tl(X zwJU*{f|?Zb<{PlJqQ>Bk-JCSG4-u+ZO3P^?2Z{n~2`oZzlKazixEZ#nHbgeL@#+8|e z560IN0a$y~d~cr}8aT`dMLWr$Wb()wh4R*(UYm2*-(O;oNgxmhX`zH`Mk0V;mg|N` z2U0WpJjTKQju(q^*%^>L7?1-2$P4oATtWPa>8%V%ey@r+3_r)w9;L)%9!I(B^^_5h zJf?~YYW1INAt6x;{3XSo^Iy0JPq+eP`<%9e8Jg0tuYuldcto`=Vfs{kD9{x%0C|9; z4tI6eeE705KPUpZM|sFy)z9viYqrLRx*Fq7RHoWoeH>0erm#jQ$mWg(!A)oNJ%(f4 zCJa@NSjQdkcFR4KI#$dh#RGMY(C`vmV=}sMWjvT3)PSspi8_>c+#XlUsuP_ zW{+xu^KNqQt=wkCX0{)lgsQ}$jhJ#44aS6HSUc7?9aNf$S!)LlU>@NS^XNSOH$dh# zY2w|Mkarbf`|wc_d4g#BQpe({kKR*oqdJRMPi|hH*dkIbbWCsx4YFKg=fBpJw8$D> z=+r;jJX5+6U)bHKEbzYFJEG6|kLRH87^nWc@mJP97v-u$qlpd=!-`bX-q)g4m<`R^IL}Zd-EA_$-)@} zGSQf0lFtf0W27B^;L#0aO)b$z%TI6ZtGhR+q6%VRvg42ik4+IsLI{=UKDDE-;pZOH zJdZ*(q>6nk4@oH`eO-uvT7O)jdcZn*Z++$chbi*|khyW-C^fpOfj}yNlvYRd;=h@CxMzrfRrvx{FyYM!tD>>|;s@1t>}TEL)KdAbMufT=dKU19o}#Vfky^xfoe7sI6-UQc;a39b@9rlz=oI z6O1TtAl*WCSGFz0HKeC}5|EEs$A8gnyWCButdJSV%K*s=vQGZ_-q$sUy1#A3M9Nt= z%<+_5w&i^ovdCWcYq#n#kyXz@V^*FEkq5w0VfI0+pyrsUC~hY*m7m$?_O0xHW@r>dsz1Tf;AD6% zmH%&fZD#Pw6~dc$e*DT>VPoYI%g3ID75!^dzoi4*hClAaTXRe$$N1`qX)zg23!JYc za($$|8f=Sgy}^eIM@<%U*+?g|mdxIr4%r{KiSAwpGc!584v;Q6V_C%rBpga?R3mfV zw0H4PX(4B9YN?TE_f$FTIQrg}3sA3V02N5Q1#v$@*CH*eO}o73jJ{p}WVhmM2Y(c1F!=an7j#H zqjE@1!WEI0;n9i5m|i(>d&^m?c!>WtkedV~av<|4A{%I?NQQ<&C3>FSb$~8hwnu~` zG@5xdAkT_Ol;bhsi0tk}I*dp_e#&S)pggLbLv7YgFO1Ag51bpkq7Cg61FOZYQ|B*j zwsmrho4g~&i=kzl!LGSW^F1S-P9rB_Sq3=(xh@r}YkL><(D|?PW-wE3(o4LcA%L+l zzbPDjRG;T38$r^5=yE*q>n(>dQxKUfxJo zSXF^y9Q7CuP=IXVc(D4wj;EQG!Cz^0JrsreVKVT@1zsr8=yDciB)9WOkZnVw)Rz4L zyVh5jskqTwTAm#`hsz@|Su%IMR$SO%=nlLNHZ~4k+?r^=y{utjoO?dv_7M{0vu)qk z?4#bpy?qm$R>_dQ+sz>_gvv)2d4#{cnNBaX?BJobeJBtUxOYl^WQM=1p~ z04W6+f6Y6u%1n?yLMCfSbJ-9HB(<&I-mI;^b-zYHqVATuWFZx0ACt$X;Ov)mEidgv z3bFG*LZr>22tOSN5BI!mL#|$Y zL2F0HF^&ZPC)c)w4;&_?zOGp4qv5$K7=ML4_-Wa{(jOOBmInsTH4a|+sBv|4_9K>$ z8-H8h5&#z)&#|$+R_vW%CmJAc+jyTqatETw>ik$F-+ zGg4}BX*2`bI5X%y-Ya7(Ywo>6wN3=malB}6Ngvb_nfC_BP%Lh9eWtzH%z=zCe~!nA zAa~fq$g9r4QFAH`$ot~4w<4tZI_q5csq={3Ao@pSQejP^F;@i?x3WcKttJHA`mBL7 zyu1_kQ0uK$oAI3X4iBiZ2NPM{efa6;cfS1G^DjG)R_tRIk}Nlfg|R+ftO0}JUe5!U zfaJp#lo3gQlvy+s6O8(OWF0jvmB^Ydo}Ewaq|EHNob{{DBRD1?QJ%+yBTu>VGymOQ zp8LvicCz(vskP$F3P6J7wb9k-kKTK8X7tOFY8?iHPM7{jE9-!O93JV6K+eb0uuweR zyscwcF0b=)9iS#xXk5xhT052aC=C|_gZ54>i;aAX;k3|ZWp&w0)x7Eg3c02Sw$>cO zaDgQsjWgVl(mpmc03gjkMm@%3W$QKC@RJMyGUdcISPIPnWUBJmfzimiEyI60>5pU*D@c#L!tRqb5amcjIK6!U^v5^s#rSv=8TYVIp@`Wk7l!GOMki zTCGX;Pm?CSXbAX3q)Bx@-l&}cDGLdT*3gPtBa8MoQ}1Z=GALBvIlc8JZB}6rne%8k zK5iisk9sAyorpx?H{0If(UX*hE4D5Ev4n3M8k(J*T>b4>Bg?Sm>r3T})L6hGk!t|XdF(SF z1CQ+($kf)A+6;4xN4i(KYX6|My`~(vT6!g>>kn-3D zBx&(o4fRi%%a**Q#wI#Pk1Y;$q@f}inn1jzAFonbs) z;P=a8`=kn~vX&y+N6$P$q6;ANn}$;ATF4TRk;N2U2Oj?=`Dj?=9l5KVY9VQCh39?j z@FXkdk`CR!*SfFuUW+CLVB!e0AqXHbQ`N_IIgms%dk%H);=|_Wz8rzvWk5nCdxQow zZ8UMdk5>-G^Soq$Z4O#Wj#t@PVoF$c@fClcOmg@enew=MFKN&5wNuBz(If+z){or& zzJ;t%0+M%@iX`s?kROqHJUy{6eX((HV79#a@Zo52U|?YE%c)stJa_I~W21na`CE^U zX46jZe9yc}50Ef4H|;-)$IgZRVJ#pzw8j@_8_3f^04XV+U{ic?-ol$9H(H3(IUP|f zW$@tT)mgY4G$!31N?1tKX}`HtkdETu@-2Dn0Ax(aJB}&c<2(Xnp2yBqC7#-7E=M54 z7@xFo#5M{>!kAwx#x@-NmCuF8xj&K{&wtk%^78$gE!{QF<6%aM->N@^iG(MpX}whg zK337)9D?jU0ut?N*!Ogm11Tc2o*E0XLr0Dh-Ib3e-Yf4X0r)6&2ukc`Oe>D*zgxG*??*wYbM~m4kshQaJ-5cYc}=|IUD% zCL4f4C$^#?Hqd=jC@T$5Ji5b1j^m;v9z7*48IRVukW%8Ie-`o3l0dt=z6rl-&huEdgv41teYoxCo`>|z zxB)3532NL#0;IgOp1qqvZyz0SNb-Uo4GX9`DC%FbbwR+sN+`bgqxWBUfo6fX-amgl z&epN1p^-;mlq~h*Cemp8yF|Km^k;y?Woxg7IRU3fm$oikIlTpsQ$SQIEIk~Z9T*rI z8WNC=jWg3r3+0u`qEr~}ygd;dw%bR!Z2Nf;_4JR(k>BoV?}9<&F@!vE{HK_-tJpIy zdueop&snpVVlqQA0O^5__0Mu6Z#gr-=x8K1@zS2l>Q#w4q zfJ`)^&TT;YA;b=(@tC3*gOLjue*=t?=fGWN6!nKvLt?U!h&5y{4!cJ2LsQstwuyYV z=2}BFWNS+;7P8BMH2+Bk61`mAvX7J7Bam574M6(Ldz%dj=)QoI%v<|8?)I$=WahF} zyb;!@pt$=Vo_Pio(Rt2RedZZ(e1sh{A|sD)RPu<<{`VF#r6Eo6hqKJDXVR2<7~Y$F zID3j*V|l)3L;p;pUp`!&oc(5YcF2%qWw-ctak(5${M#7j6kl^|VIMnS7v0_P!h!`l z^Bq0w&Cxst8k0&!=Eex^HaTGj4Q!K?-{_4rKTx$TK3zniF9gka3$* zG$tPN0d^eTgEAf+NK!tY^Qo|qnSJzCBNC42XIV~MVv(2y(tb(s={zPN@6UC&)`DXf zg*q%3@ztl_t?B3OO?|7c@CRxbTQ{&@GF^h57q$?fh zE*oh@w#b2`e-RX6arZyG=q%nq=U*TlOf2(A`+E%DF(PfOXh1RJF~3=}oyhGxBBgy8 zT=5fYsu>^NQ29)8YS@mOoO-ZSm>v4&`|rP>H4V*f{CPtbWp+2iEqN@7^B&-Fy zXFgm(Hwj8b+$1V*S2wRW-oAdu%h1!jU&}BC(MP z$wXYL?vX$;P4+RD{V_n+)WM@^KkGb9c7L}CjTNcU>CW{vg4xlrQW@5+|DUNc ztH)pb0wS+nyEb{Ixcc_PA~GZkQ)8hhya6}#BkP-_-s3SbC1A3$O#MPLMy zmjTINMz+x-8Ucx26p25W9`OQ4Sw|L+24r|445Xdikql&pr0>2|5SbM7J(bcZKDG^y zQs{GP?RMwNbYXO(P`0*&2cu=enSlWZ@=Rgl?YGAYV`Bv)aCEc`gRI~tCntvnW*Qr( z2g*2X75f8Z4-Ok1NsZUowjv&Au}i3$Ad=|YG3^{#49m~Ii=;zY5|Eywj99{>-g&L? z8qmi%e6|HZ_HDVGIqH%tKN`17FXyqwE@hY(>TNeZ9#g(z zTsT&QJPAt%S6n8jX|Nfkf)Y21`I@_5(^Pv46RAMwaCe_3fm^Z90S7Wv=f2xl7or-z zu{C5RkXS(DQ4*1X#VCO6;#TjKZ6>v{0wPk`1UGmLII?(j0~zi=-sZ7gXY>0tIUZ34 zr2nE0+UpI<%o<_&Tb0G zl8ydGK**Iy97r%iV~|2Htt|Bxoy(pF+2d+M(O+kCNh?O>LSx{O ziyP8&MrUP+9fy}fBO>aN#H1+$^5c8${e;=IejG>>uYEP`z}PTXBV=SE4*_Izwo_wi zNNeue-}0^%J8-lY22w!U8Zuf)Z(#sOlxW0b+nqPW2OzP)&sK$lgI(Ci^XE^oc07V0 zQNaxBM=7Oz0*&G37V>Nbl23Hm4kQwdcYW88gwo&-X)pGl4)vnS=9@qRIUtO5stHy#r4%VA&ivx24MExyiAQX|EzsIGC0V{ z%#tc9>h0`bv;}378%Zf+5;>4gS z@^E1E)ni9~YKpsSfHWD54kRxj=|pBMrbs68_>ceSNM=d%e+S6R?Hw)bABWVq95(|U zTL@_mx3oc{jAmP_ETmj^vXE8M&s+9C9|uGxAT6pnm`)=$$x&y@J@3yfB<9i1R<-ji zzdCjP)JdZes|b%0X3~MoAN%h}dR3(B$re)bW*VzJqu~(qXqy@93x}K6SGII|Yw63W z<%^At@Hlzx%-Ge>KOY@kUHaq0!dPk2G*Da}xM&A>Fj;`#HZ&`jj;XPzo0NFZqMDfd zzin^pZ$l$e--rWg@~8QQwy>PEqKmBeAt4!q?#Mbs+ger9uF*!ZczW!(Z#c^iBe1DRHmBJyk{kvSekWK5fb z<6XeNgTJ<6OmFV4XjH8ncA^!CF-X>urNd3EUYAApfk zi*rLn;NW=XjN+RKbJ-mW{Hu~Cx%@5vmJ4kW$pj>Kp1ARQI~Cw0<$y$PBDoC6S)4Z# zd-*hVsUs5$n=A(qx^Qt zhC7Z4NLK=q-&X;om-`rj2lw5&*}AVzCQ_>Jt`Ri?(mEL2Wn&zx=U#fwwhxK29Y`!B zcx6C3k~t!gwad~p3zAr0KkG1BNBK~ej(0-7+LDivNSVmQ<3A%O(vigM@dnL2kgjZR zhARU3NFA`~)I>}5)+s%#mA))%MCoakg{9)y>gd$Yuow-oulZN>ek8xPR}`MJ!~gARwm}*>@?jJA6(t%+U1Y=nxOz zeE+9wzxvg$L?fB=?QxAaFz(jt*p{ zfy^<<4*+S4$oQ4>=>Yg>)d1fQ)I7Wq-#(|7PYM>bPUtA32YdYM}uT>bv?79*JsRcN3X_6pztDB3nHA_%r2)6vERR)?9_L0>_ibUuEaSPIl8_TB>;v zi7+X}02^%wQr`s&i4u_8+807hquDEFDev4^F5hljIl_YV(b{U^_)qvdPci8JbmJ_` z!m)`$dE(*NMbGU33O^N!EE?hQPv3w4i^j(9zH1y{wK+Ov=cBg!{@Ufsb9~-RNM=lS z0;Ga%8AyY{iOgF_m=utiimL_ge8DBb4T8bRKi9UtH0*lhUjJvM=O*RJf>QPfJT}eQirOY|7F0 z9X|NFTy{!~>&zr{uuYZRAgM50L;|GE>M;wM1d#5tWg+*wZ6qnq2jk17D)ZIHkI-?I z@hAq(K)Q0_j5En+;t}aibdv#@l%F;g>%~7^D{h{zZvF}veq?59^T-?8wmEV9IwSci(+?X0D`J$@XTn%Pt^! zM?YP)ACUT6@J>kA()rr2#GHFYy%SIaZE)OuCsTh*LUAJKfDExk5(3^ zkG%1!)sJHz2hN?F9wL%io?4o@K+WzM0&eMHu|)8F=Gsu>l|TFk`hyH)VRdS$XJmnH zlMWpR3XhisB+u|DAX9jwb!1pU_Kz41ZX%_GWR6MQ3mXM{wk%NDUOY|)?BGz(Q5A+Y z9;ToTcV9O)Tb?JAyKCpMFPKLp8lP++(_u7Fn90Z7=O(EDT7uDe0{P=`l9A;fJ^Sc9K2Bt29%Vi6^5XX-AoEEdJ`g`Tk2gx2 zU){aCzJC1f-J_-XwNE)6n~qq{$5J>weGZMUemQ$#@Z6;F$WG0}QQIw~e*B~N{_>Z< z{^dWez@s9Xo(JNQ;(&Ip%WfcX+jEJ?1rKgIO(Pxn?#x2owpT)u3oJ7kkcOuLDIODo z3B*!f;dj6zKng}KBu9;W4rz`@6gOu&f_bc5LArrVN4_G%Pj7ofx!Q@uB2T>X`g=fz zum&VsnN}hb$<^0V)5IZ4l!%GQL#!gThI}_#NMPKnb>y>cJDz(=Z44o**#(eU=b@y} zB+vE)11S;%k%Tn>sl1~R8F>UqB!`_Ua#1eVQwby>JCd@IDK+jr*~vhne>yAccyzkF z#!~Y9@c5m(r`9JJe4qh&rS^kWqBKCMLH#?c}!e%<;0X^7hhy zEoUIjLb}(+L;@sbK8NdTh;1nLArS66{H#aW!9t2iY~*uKw{`85f{E1Bdr$oM^d6Km zkw`#xfuTr@L<&fpvJ>g?3_LoJUQdyL1j4+GM_YYjAcKW;{PG?<=EWIqdiK%Q=FB6w zynC$p!`&AqiYMWb!pNiIQ4#eZ8ed+TBJ-#O&{&}~)Oc}q=%bIWsN>59?c%S`4PhVU zuSXX8+k1(wA+i?(35Ihrjvi{8Du5j6X~RH5g99n^i1cYh>J@BdcrleA0O@X6DkbT; z7*OQlOnA_<8Av1`6OR_;XY$=b;b>~H1!SO+cV*Tm;FvoWI}y1p)K1*xn3UodsXNh& zD^ir*gU1fpakG(qZMEzl&e0sGRo>y6{p#|{(mv0LNM3vUYW9SJU7N`FlIHtV0vRZ* zG?B??zlNfT1jvfBs)Kz5$dg8-Zx^~^WSxeDC;J$fy?ZtRnNCd7Z;nIw(5L4&H_xBd zk2i*2yfZ$ra{SJ#NCPZF3--k;8k;iuWs%rMdokB08D}v$cHzPw)DFwxA(~14-2j`5 ztRKI8I3h2ne?WQck1zK#<3S2QMjQ=DS9@FN>UJQ}hHD}(s5Bra97t2@?Z*z9azg-l z8v8tMC^)Xq(NCZ7$EIoE5^<*8l6d}G4IZu)C6RI z0J5{T^RS0C?r{YRnTT{835OJ*hb5!|nV)%YAnH$@H5|X1DQ(^P zCtFtTIdG$DV&*73YQoPc4RW?~7if%KD?D7CWz9INUF~bvW`{nRy+H5bAn!k*?;3yc zeIfAp@Bt1P9u2?V-Z_mO!BzL0l@yH-is?a)h>`!fH5W-SK3tjnrgd}rp5{{});a4y2 zS-EjHB+7r-U$v+DMR;W2oQ-YTVX6B6=)^nN%C+T(QzgtJNS?uGkDdAAcjp>|&Y@pW zDfwSlKOem=AjMdFKZ3p9cKe6LY4?lDpf)K1+0ow!l{H!+m{+3AFo~%w<>auYHXZ zfJ5KD1G#rMK)%$1&rU$b8eOo^L8J)aZNB`0D?A^%V|bDEw`eoa32L z6Z!e)SAYMz?@3JJzWL&dt1f`NzO-anNZ%Ulz(9u8V}AlNNfwd_NdJQiNQ@x3*#a+h zp`tWYO)yOWWSpNCFoVBHWC3M#`mX{gH(f#<7P*{93u8iEI5!`Zf}l}}fR+Gcq|kA^ zmj^P2HG#*hvFkTKSMwH-dv`W;Wl^^F4zn8Fq@4eTRBg{lSwoG8tn$PBBaaqjJCH}80AxBh z^9{o>WzKU8NEhS<9`D?EYv+q!eR>vW9TJmOb9-*wxr4W6g&=_=zMrnI6YmXtId2Y| zHzpGOc5G;pG77Vczeg|{fyCe}EKmh$Zr8p$Ug6^VH)=0E}>L~=5;(5xJo8{`W} z>z*+XT|DwiK&GGu<@XU?4&-N*t4P+6^$|wBYcY`|$7}ZiPV=+X2kT!~+u_p`hzmvo z60g0xzUITUhP1?wfCRUMV~)-)eUX5Sr^`hkUojw)%LdCB)fkc});l_o$`TzxPXtmg zB#$i|zk0Fit@C%lQ4*!+8xC;XyUZiv!0C66{3K@OFHJ3#hh`B?3}>XP*Hs~@id}FF zKIjh@bQ<%6M-z^y!c%AQb-&9~K5&>*vX6nqxOW&^u|ZHpw^0es0HiA!#>8q=ey_$% zBpAv>@>b7bUqfBf;r@muvyjhL?>l%*eXs!O5e=gys&>D1tf9KXLM9Ulk&(y8i8Li3 zUpF9g9@~jLv5m;oe$7QhBZp0NEXC$8<1rE$a120x`oq@Vw_bR3H?1%4p5NE-)m=Jx zjzXi(o7Un$JnC;>UMe$nZ|HkTTweR+>TKca?>`A7y2A#|Po~h~{DXxaJKda4nx3|> zT;%HKGIe-bG62~DkY0*r$W;a$$ar+Qg(Tw1^5pA*Lcb@8!$d4HO0|9rm{;If6L|FW zqYZzoz;VtyXfl1PcXlLA$bM%dE5K1aT313sGRe71N-N87MG>sCj5H$6MD}&oY06YE zlaN{4P)m94T)lwQ8SDF+z5dLjY-T_`xA(1`eN9iLHKYS69wUo+B^u!|5NT6RtKe}v zkdiMV(@r)#ri>2;68l)On-kl!Q%Ivvc>Ljo-Fv|?naBTe_r;wp@80?J(IcvK?G*G6 zj*{|}s7`-#w77L~K%LoC=Axl5etYJNPk#5?-+h8Uzlz(w`bFUj45Vp(apA#|8J>O; zjHWi1ttXR|izNIRfe10_06H)6C*zP8vPEP7GUF^MZzUs;GLMN?S>6oCH1R#&5F#CfDBsMYv=^?g& zghihp@M?0|hGf#&N9Ui}`~DB$$kz_!-Mu@j`p(~_B2pgv6zkRF?--C;z`jx*{r_~G z|8v&Yb>}58P6!Q}k|JkqT{;Eu@@p-Dhfy#Q)$4M zA&hWw6e9H#LTE$@O1VEXZk~a=zp`X_qpeO&U5vI_w#u^&qoi~ z(B|cH?m73Ia~Ec5D@3FnX;v6LarW5Re;64#iv%P@c64AN*-@OC`GTVI=~F~Dgfus} zL7KG!_-U0X73nqzYxL@Cmi*Cf1b~Ea`C%R%M?Ix@Cy$_1)cyX9UEJ)&Wk|YL7mxYZ zZ5>cLYm`ys70E|P)Fm7XAcIG6%rGV#Q?jSPv7Sf+uXNP;+fr(Jc(>L>9&YxISgEyb zU_ZMxKOI^~E`JoR$6OY+KDxP*2{S&=q90ra8av#$L z0J7kb8XvciZ~~CwvvW)%9vw*Iu?|R-&jfj9=;mLZUnv}G5p8IE@Z8c#R+fa=wutQP zWNqNPmPf~KwUd$b^NJ^Wt{oeB@9fAgelY@)@Cc9{1UF~UF~Xghi}Uwz+|y)#UQ?{X zWjk_QT2P``rttxg7)m524PU(^w~!zivXl*271KoJ$7g0#)i{$*Sa+vgOfo}@Q$5Ih zwKpo{cCPeSGZ=+q)zqc;V)K}IRQ4NraINKI;FzQAP((2fWQC*~P2G6PW#d14?X?@V zMUfJxACdIg+rPibjsa$@^1ino(;5;W(I0*1d2j^CB?EhxVbg+w{;~d3G@j0!s5IMc^ z1`%?&N9?3HO!y@AI_}5DGAa0%px1btTGy+>4j$t9o_}kwSkPFDNkwMeOVNz=Q z>7mx9mbcq%bOk`JUa@aAT{YrSBz{j8lH1yFMakiL-$uE9QnDL@zZznk%q}&5Vt`bnY}Ma)t!>V$e-q{@*-i ze(ryb|8GNNeQ$$FNS3R~kD*WD4sc~qFGhtBbaG)gv6OxQ1Tq*=xppj9j-jGo0T`nw zH>_if21xcXp(rGk562)@@wFL8c&(R{SKwI47Lk^Wtbp_m?Q{?WKAY)1aLccTtRd{w{0%iIOnZ(GvB#Z=tE#Xuke-?h zB173wPG?&g!)$Zd1CMSwWh{AvXXevkEXF)eFA8PmoyVXtc+_Y!RPq=!qO^XDeL|@Q zDT5Ij|0Z%gh3at(Oy$3;)*1&=H9yGDPH5iG_Ti4V@!9Hw<#_6)`&K_f`5EOtB2h&0 zu&jC8_7v5;_^4UP6xBF}_8As3@rZ*L;|F6lMG1|TZYO)+CQz$ z!*UTh)Y*Q1_I_WQFcpVpPrb7IPgzi|-2Y%|%Es~Gvonv6P!}s`9@<+hQK6=#x3#7N% zRFu3*(lwvR3@Sxm#p7Yn(q%FvCE(-*la6HJs1ch;hGT8XWAx2PVIQjlXrNI!pJJQP zYaN|O$B>&BQ}{Qjn5^hRgv+RX)Vn}(v1^Z9q@o(^W3EEOb8|bigN`o}KWh?@jjQ)z zB0cZ(JqPlSzSGpaI)L=O!(dSq`lkaaRVQWVzHAW{N%0J%`Roj2Et0xza3DP|9+~mJ zRCzJ9{^-K&`abNUc#QUi$(4_+?0aUa@5x5-*yqQ~q108jxqJ5B`Sn{RcqMI1k?t@w&4uh2gd%r)a$^aVL8BC#*4S(_kMs8LPk-QkWlMQW(XD_M755a@ z5gxPPFT_vS#Xzy1NCUFYYnN-tM5FgiZ>|{89efR29jSiA_0=xo}v3k7mk9X zEMug}d7k{!M{cUt;=%r#eSIV-J+&^ed?W$X{r-$*6JRR=(kx`}iDP)_Ug-i&*rWLC zGbesAGIrKH__@kmkl~hflpZe%Nt@$Bi2a7e!f2Sfn^jAXUL530VO0O z#1U8G3Go@r%!~XIw^L(q36fdCk8h&MJEXTl4M-nL@KH=AP@H^BPkr4+gkQ>1m})^Cfx!gt?kytP=?uX=m{SOGuSjHOA8r18V6!AiYweB8<4KRQS&V-Amz3D(Bzicg;(xl z9laepc)b7ovIpk5m#qOu`VNP(g^-xA|_9t8M{Y7Gd_Lq-t`-YF<;~N;8B|YeB;Kilu?sktb*9rG6Z(Fbz~5W5~4Bc zBBhY{IZJ>-n~2j> z>B-F%T>h88FHI!t8Xe>=_4kLB+`oU@s^&v`F=uvyyO7iDWs1aAF`gXvA1&G2`dk|8 z{Aghz9Y`mVhX9hVV6hHJ-=OJADuEPn1(fcrB_onczeZEd(EaX(g;yrSN%NEzk?`2? z{3M?wgWg$*oy0&^L~1UdPDlUM*Hc*94e$t#6BC0IcX~(ZRk%HR*K<8MYwRODDo@Vn zpR3~+txEUCs}AJ7aXu26zccskGe42}YyD7B85YDYnq%#@uad29>aFCQBF;Y$@ zf~%~Y2)CqTiDQN_cx1DL-5K90Oti&_3X||mES5C7IgRa{;_Pfd3<4FKTLy^09PyDS zM%I|feg~3vFHZ(ZX+zG&U90#cbsE@B#$5_O1d*mour4%2_K9sYlG?21+G5kDfo@Jp_J6qs#5%gN7eWrC)gEu>3Vy zpQI-q7monheQSFCvy9c{?3ylcR4%foch4Onn>X&>?Y;6IxgTO}?qlfeiHl=nBcB_D z^GpetpH8}HqI7p$u?>dFETjt_`GHr$^M=FfS!p8@YGNrFM9Iv#>n@;-{usTaS`q`t z`D`3-EV7PXYnCG!!N`R?^%!$}Dn(}(I69F5V>vY-DN$(R6Bx;;r?(U11HY6N5ZI0d<3v1Xr+%q@&hL(&P6|aMEC9A(QagJDQsE{4)W$ z9nZXa`47L}5V7|68y z$V;FKM=oP>ef!BvmuEYNh_b6(WDStdymIL#Fxun&pWcT@WqtYxgN7z;KfArFtMk)O z9)IGgt#HWJ;XzwA$WjiTBpdmLDj_kBkf;<8;k7y##y3hg=HGt%XY-gwaJ-m+G$W~c z@_QLb9~*!Y2+p5i%z#9Bd0t882)Q0fz_V-GUcq6=(~b@!Dk_lNCet_L&N|ZI<=%`( zH1Ls1%80x5ecATdiANVAU|TrDC6q}N$mK>Gxf$9vKi9uG8dv1@~8Zs5Oj$d z8*g1{1b&=cQ)dwCD={pviA5w9GI&G+vYDxTt%rOOxtdu4`0MS@H7>J(_elV`bl|N< zEGH8plZA}sW4*lBCJ|ZH{4{KEAmMRh*We&X0_2v|1X~Fl9lv!_cHClSbNi9uTe~(r zYiD{{gJHrkz?@uIuyDo-$cNrs`3&|E*@Pczbg4npcJ|lrKe1^u3s~Vuy6M|zzx|fK zm%L7BaJ$UU{wSg!=5U)4Ze zl%pDkfKXoHC=O&GSw!ww+hmK#6&j|J&V5_{Xd^!RhfBVffovRTUHuaW(qe3YdpM4T zp>!l`frLi~(hMXJhAIZR<)6rA&-M&o>uG=7_i=34R44&?|MIMbGx%&w;txKVoI>!Z zTFDJ~d#Zhyi8^~~*Lqg3n8&V71W?cZ_h;#^VI{#|1T%SugNsRtACrAlZ$rnK5%GBa z`d1rSL|(sldZqx9phn3b1PNjwnAF>0D6OOuQ)bP}fV&n(UqjXgK7526M_0_G2zPBV z9s|Vm5yg*TA^+O!qxodhyY)LbKq%!-M5*x1D8cA*HWQG7IHrxeiPVABNtXC&TXm>8 zr^W>&Hu5Kp%fJ6aPE!F-Gy6zjfjG!A_r!=6%^gWE!5*d8wU9Cy6mC|GcDc2p(;Yg%3*AfjHeSeL*K| z7k~8D^siIAojPa93=Ev_%&vR~wcC?+xv9Xl) zAv>N(NHL3h>GTt!EsDjY6!t3|cVv6&WKlQ}7Md4@x@8QDl_RQ4_Y{+)LW0e`uq%d3 zam8{`G&+C;%=)ZUkXWan(eplOQsn>4Kw=|3%yuCA|FPxC0S4cDR3i&Xqt_#i+nEyS zVyN?zEh`!Yqm>>z7{c7cq0!yy zT&;j)U5IK=^y)i$zOyfQociFCn|;os4T)T@a!7RklgnKPH9@?KKi7D~VcWm@DIEF9 zVQtf>T%-us6hfnW6 zOr;i(!rUv+-WHIcm~hOMKP|r;Sk=5Er^cB#1&^AU+qm4Z2|B1*5Y$Wbkv7Km0!eRz8_5-W^ zm(1ckPrQ85xDlhv#b=dVs&K3YGC&L>D;z^L6ZkTX!ZA1ug|A-B;U6c}`fUR;2A6)c z-%50A4Ww-$ezc!yy4wU~o_o(sJ{FMMmphO=H#9bHdrnPWF}UKPH2NtuPNUv}5+J>p zL3<+*Nwv0ocJ#(d*+8lU0vaz}UTEI}jY&R!Jp1hEt0A13W!uJqWC1z#VBZg(p+eGr zkjGYIHp9lZT>jPh?t>=>Wg)kkg#<{+4vRfVNW&6RF1xoEAcr;e=fdbY&ec`}^tpRG zjYoueylOChE+!T4Kn6VWKYZ>x7M@xE%Yo$U0N6k$zfgr_B!RM#EavA$MWg9P{>@zR zwKE=(bwo2#Z3V7l7#Z&1u?|URF<>k$Uacw)6O8r_AW;IcT0r_25& z+7#6=Z|X$>$$(Owy+Ah7y!Q7gNL$|4yi^v_Jaz`Ml%Jrqw_-A~L9&p+<6x33mQ@1^vn{Imk=Bsnk+hFK^CEKZ zz`g|JQn!#LjeFO+Y~Z*-Sq3)(vgFZ&nrM$rma4P+=n>}SK_kQo775u3`ZRk(!=2K-kEDQ z9sk_t7b%FeFnbIhKbLvDY84hzGLX<{vumotpI4p6AaZd9j$^dZfSj-Lj(x8@h zvf4l|c)b2Im*ZGgnMK08NN~Gr)?l+xrm@x;2XT_qSnyafS(wyhB1u9jq8Y$HQ<>Y+ z0*?VCnMf9q%~tU97+W3g{9d1xF*hmFa^ zW166yc?|gvc@wAPu|g7?SH{r^xs720ok_h+9@>AE{}f-h=FmD$E=2Ze48Cg|W(mjO z(M!&RWq9iv7VQcFnKM~S;*z(D#I-AO~zcMc&E`3}yJBig^Q z{56-E#>A`bF1mp%fgCzIyABc!KQ2?>%9p0Zs?S$}Nea!el(R1#VfXOhpiSemypK&z zO+k&a;}Zvl@zSQ_A`)F-2GubodG2l0$Y*sjTpWi-V4P-O+qSZq)weP6__vw53PHN?qi#YEVGt|PRO2`r zY(ZP$lPk{Ljn@I`3Lv#llY!)zVpyRe8z5a)W6`?*!`8I}YZcWbAT>=z2NXMsz=;}L zT9!8Ava2Y&egWx7n(9LB2KhtHKi&o01!c8Qtc66ZX?qgQoXLT?L%=4 ztUKkHv6A2C29U;O|zyYz+Q<&+k)*5U3+EkFkO^w`GnnPXS1MSH}2^%zS@?gTjS_|Z z#~`hwFrK73YD*#u3&~hMf*Jw&7H#}*?ZsyoB^GV$9yay2kQrCr=SSNC(ygMKNvNcy zW>xc(kA{UrrGYGnEYjodvXgzpK;jPZhsc&`fSF>ORAM0$(2Rxm*G6hN+l zNX0cR1|%0ia+-TnbIYnV>V#e0C?KiObs$+u`eBDFnwzwQOy#)`bJ?+~MA*m3{4^XS zlcSZH298}obKrP#5X+cgiJx$e+D>;~gv{$sJ6j`VAG?IFN0J zK3v<@43JMh_SmCXNY9J|WZFFhNctBZYi^C1_b?Xz+9*uck(efkEEbUsWKi5Pru^PX zUqu=mdM6;IMC3Z>ag$FWFMwoGxPEr!`@C z;>#}wkfs1FzKMmTE~#8YT0JBt5}*Cfn|tN6wTetcMkey3)>gu7EF@7)22#p-aRIry zrRC}DvR6ISLY5~LuL?CNZqW+TqZ;uDkX_(l@;WrJ=zH3h^~nP#aM%&jXaw5Omf7y9 z+9N^qPNlgkzwS$r29J2|&Rd+DgkW9pA^t>bt9d<$bPH+ANWAu*9ab~hO*TC9=-@e!Lk-_eNysGsd|~#}&Z#H# zZ->WDsI&hR%p7JD$z6*`la`U_z}%JF#5W8y9XUN}JhFDQ#5g>XB%jd)a&y|rGP)N0uemHla-^jkx>#^-zrx*a`qpFXJV2@(0PwD}C>eqQWa+fs zI%XcjK89ZA9XwV~o*UP5#bZdG990Ks{~bX7^_TMu;B-etXJuX{F>8{(Jj2Y@uqU6~`aq3~z? zn1-PV$BPNb=@X=YWFjjIiP?gjV)>{&XN#LNkSOtp452LlWj&yDT!$l#g>-vpmXUiz zL1rF9hGR02MAgy5WiNv-7xB1-tOGJ|taHMJ1NO}uVdy}{I?~)VDtQbbwTh&thQWr- zZ$h7Fl&bQIwQKhuYU*#rLYm9|Nrc(djeDTY@Uu1jd#wq!u#iTd)0mNL3Wb$yu=8Ph zOp*9eua|5UJjNk5$bpo*MhVCmvNF^;JG;)pnZ-7ehrXlBrwVtCc<#Q{`NCx4v6C=c zna>G&d*Jamn_b|@+gln0EZa)A?~;v#$c}N2X_z@dmWTZs95(h*JOZc;WU`R(2z^z; zN6bW_WCHFpOl0ur5T&~$i|IgCJbFelf^on^c1!EkoC@b|L>4@{%NB=j67?Km_97m0 zeOaBm4zp)Cx}(;+ZVjp5CLANG2?L2N(+QBujf+SNu?@$5ZZ-|AX~&0ao9&3=01_fI zlM-R}QlgqF?c>|myu&<(g8Z=(HWE?6`XWChed8X2aEen81!lP=?!ePS-gxUdM$WTF_r7r!7M>mI#vB<4>1jv}u zf(W;r$sAkP8%SvUt?|eURXzQMQS|3hU{chWiLQsFASFXK>M8=rglLZQ;#EBHlcJe4_n)H#RUFc15ERdH>c;zH?Q_XLsJ} z?ql(pdTTbf@6whLL?VdXjrePTqyPC9;0Vs$b8~||tRc^hjL$Fw?ZlY!;pnt#$4`uC z^$3o%X3wXp$c^v;OL;R-K>DtYg}+?RWmrfD(k)^J(wMXUhG?~p07<4%OUdgQ$ItAa z;uh1)5|u@pt1DIU)RL&P;)-l|Eo61x+C6nvL^KX#;28gyS5D^H71rYgj{}F>ssOtm zB_dnbw*8V1qU-|5Wl|1m0P?xk<`tfYbRfN=g3E~HRck4ON0~@V`yhxkIh?yxHSSi> zrlolDQ8Ps)Bhsh!*~I4;)*WTO6o~nJaYM4!Ilr=O%5#wR@}$qg<;gxddnJ7U@*q*P zc)a64;-38gn^Y%kc9Ms#;p3dFJ=c3~WDJ*0NJC_;LyRdMKf{jARn`316blilLI~&4 zAgl~z@~22KO{msm#~!%<6g^<5DC_~lbfGx&C@CjskiNnr3T3fbwR7?YX2ILOjJTi6smy}6z(7FR@n}_n*2}s|nY24fVWO??c zk%x^83mM{Thz%>*0D%T%2s9~js5OxJ)HySc6^{|{U?JC2i<@d8VbR}Coqap?-RHeZ z(xqR)Y#!|c=4UlgML_P>@=;TL?#M(-W+35_9z@@}k-CoeOxStZ<0q&cXLP`629Gn3 zN+)O&+7R1-BkM>^qy|s1UxU#yAcd7Yu7J#t3Y^b)IY4~sNEU}8@s>3l9ND4h94)v;EK$?O4o0^Uq=51};OWFq` zDIj<3=uh2V`0S5%w6v@;AYTMX->Q)sQkV^pKWSVw&=eLj5xLjajJnA@29o&fFp&Wy zIq{@n1e^e=rCVAhBDap6oq;3rSpxbULtCiDg*?l8=j}n;Amq}+kMA#gr8>~v4J4h1 zM=#yCLlfDmQM;E)ienYontbS5GUV zrqE(1`%Kq3&R9T7)9TH}K>m*PGQ*G#cPDD3|3@53tATF5f3Snse)D04Anxpw4Q9AoDZy6?UVk1~+# z9e!e&@wFs#f{{~5c}Vf7((!Nnj4`v1@Tfn}WB%Q92YQAHYR+9f!yF4HJ&#_qtxpx9 zSt|n-yI(Nqc^;3AyZ-F@SH83Ss`Dryi^XKX#1-B)0--?C6kk>hLLPUn-wH&%BrkYG z|2JXyP#(iK`-8?p#g`}yWFV=}K(a37<3YFs=}7)b@EAa*4hCXuZ5@8RZ{Nqtj0?yC zOr!zHDsl%vHd#>fB0wrLUaldDvbX-fdrOS@!+IS2Yvonu%WP|Nsi$|AubdT-j z;N+~6dF)IMTSW4S6xaadx})c}*o=Vk*d%w?yn%0_;TZ!mcw_}h&c}x6_q{Mgn2od_ za}XZyOia}DnRz_pJZfWc*XZ#c{`2WQGq$t$+AywK<+~WjUi!W${9!$rPcJrq%{&2j zyT+rGqivM;2t$q|Z0VoKNpPZd$vO*}2k5?Y>Q^7{1IQ;;?*ow%PFqtVTbn-wNLk3|8XNN( za+$7_hotWi3;AeU^O~oF$F(7m*vhT7AhO6xHfSs@FLTvWj~Dvb|NO?ITS#z}3`K4- zmB~bQoM?uM?1AANP5F4Gd@cwEQXZQV%#wwa%MKvP{Ime%+BLR@^m3mi?y-}FB&Gq#wau$mzv^-PkwXR1At7bc)b5<`&2$_gyaw7BI&Rt&`wK8`#YpW(>JilXW~*l zheo}SqM-Lv{brQ?zGb}X!=f?Oc7L)IgkxVHY>xsdE8>zJ2 z0H{voG|Y;Y>5$t#E|>VrsuDW9Tse>~1~=+uvL{y=VMAmQP}lM(MERx&XX+(1T_wFa zw64n$<)f1T^1rF2=7yG#I!b)s#|9)s;gY-8zMb5egylN9dftYZZg^8yd)MHB9#|wzg@I)_kg9-`k0ijM2yN^%=OdgNpRYQ#=Mi)w0V!!{ zj{}K<$KWf#{B3$ijKW9J$to_Rn8y@IE)oM${-ppihy*<@UWIBHtIgl&UA7b!7PE+d z!aCLi`By0`{w6@8Uwx8YHazYa0LT>8tbKBYTS%`N7mqnHPN&UJ8lUWM<4DBR1*@D+ z>)O59A__zUGK{7N;1!Ux^LZI0Kt|hPE<1A*Nr?|YA}bOzBH^)f^T`A7xPk5%N-Hpk z(UWaqG%`r1p8rcITx21qZY>Py*S!ysb>!n@BHd$aOB@|8sbr=WLt4Lk%hNsjt%i%T>Yf8!0_0J7PDd@g_lN%Pp|vJJ=;%`GePBo()iT;Z~D*!FWMLhS~4MA%3p z(r2m2TSgbG7v{p^I!O;H0kpOKzyX}LihitN3%mkI7)t`k2e&?O1E~)WYHohLrSAoB zt$b#wqYShdo}=h0e~eY3tAH_BjBvWHJ=TCsIOcKAX$_fy#9`xBe)Se65+IY$ z#$}WDY1*;BUqC(zknXZg0AUmGS3$O{FK@R$p~ zq;&~NQRq{gVblCJIBwo`{6NF~kcRhdZQn(Jqva(2TLUk4 z_Ffo1eywBXgjGt8k8`{F^AU@_WiIt*A{9P+{_SiaGmu~xg^I4C!rO}?f;v^}6yDgB zDa=2^pl*NRPqfSYOM>zDq#uJvqmEmFV%?_npF5EC@??+088|Km62)<_MA=sB^Cmzd z^VylmegWCqy0(A+j%YLk_|H;Zi60hh4&qYCvn2cIoe{z>C&83Ft zG>y;8#X-{KiI=dIn#M!c5FUHFx2jM32?LUH$P6UZd5kR}N&5VtFKyr0D*-ulYb8lY zWF;6nMv2WDI8V-5RPILH)v+zmY`=Zi1OxlJdUkD)MeOS6avu51ZR#5AA>5|qefMT8 zt9-YuMtWIFQhk9`!K*t&W*g}XOAMs6m`4-?b+}Lf$19^I6uH^;7fxtk$d~>p2+c6^ z+j!z~%LtCKdNc-OF<2-9KsV(f z0kY-8Ljuw!MEZ0e)POwgLs0XhN7oLlQXUcunSjJ5@~&~&o{kI!kV+`0D7%M%X2RRD zkuj-dqo1nK8BG zIJOsgZ8+9YH;oy;P4la*a`hh!hkczqXpLaIM>lVN+_x3C?(P{L9i2NcsQiF{sG^f%TK5@GQ7WE%?_ z;jmyym)@?5#XtY^my6x$S{&`QDAOYbdF!D-Qrp-GM}iuF{P>?cINO%QPiqwD@&u5r z2}s%w14y@!ZXz{eylG%>cG-k01$`OFGS0TW#pJSm9t1q*VsWoRlsXMbfb@){#oJ~g zx3*tCzN>3<_m)i#T&Y-VId!ao>V;+&8#(Pp7hG9{By{fs_irc#MK$8F0+KMh z)qq@M26C@_bcWKGkC7WMdl~{rEg-#lA>^kqq=ObD$TSn#*?##FzMb6odUx4a$N-Xe z07=s4`5}E(6Vfm>;8wSJ>^@{Xl7`$MA_0=Pxd$DGMU92zl0G&Ou6&Hlkc+T7p4 zQDx3;+RB~VcduNzdmH+CYK#iHVO-=F#G8M5(>i}+8VO7ko*P(G~u%44u^9) zjUSxEVF-w4<^=dW0P%?IAh@HKFCXmoGu{C*EMy5J7hm)(%=YQ4sII_jZXpRt6l60j z$cdY5+gw2IQcDGA!FJej?EslfBrbbG8Gy|P27wMB=Rofpf}e?=+izU?uXk_XdHov* zg=r8y(0dLRxikiPZtlxbkUYjw$Ic`A^{>AYj|d=hAA@JI9ms&J9!e*YS7I>~s2P?1 z$z^gZ`AXhe7jHL@cA<=)e~MAZ?Rhg9lH2^2Lk= zH4bEpSB#s>UbX+DR;?jrA(s~}yVgQJ-AtJ6K!Tg_OBrz2r-NK)bg zQbYv&ZC!)wA)^Gr?qT5ke+k|$pj=4kUt(e|AG5!CsG#j{K60@ zCSN_Nf}v-5nT=%okiv0QmkB6MDeb^Kj($0}=RnULBXalf$xZ68xkFz3_19nT(n!-c z-uUwNzfSB1NQl(bUAne8(MG3i_fmQB<(GJLEacgdpHrRof1nW_e~pd2PA!lD36bus zO}SV*W_OEDiH`_XxJ*u=Ug^^>{h-U_jAm1*=g@!r{hweV4IA)t4q=cFd$u1kjbFKl2_Vb7((day?Qe3OYbP(>$jPaN)Bv-PKVC6uvhAb>3M0&-zfK=XRO)Ze_ zvOTOZAnRSW1F4N*+j+x4P8g8ss2F}QdzsDP6P1nRjHDyGx^0OGs#;*CAX_*lRY39# zkev%u`VR_by}#o|ann>IL*J;PsiT+yM#5DAYgAaCEky$2*uP8{r-81AuD zdC%>xLF;yy7~HdG&%aWW@%lILs0fGsLn_IMV@@2?Kg-!mm`9X=+-Nj1q#PhW`|Pvp z>g6(t#{jaF+e>|2M$pkX?IiM4SjhO%ZokjJ<@dgFOfLx%Ya*Hqqh2mC=^Xm!Lsa6J ziS%mR&|k#4!~${}9C6qZnQ^Q4@u;Q+!PTlmzicgBb`+mgZHJAGkF}EbVKX~ic3L&M zSV;2CL!xZ2sPIM_WK(o}l&*JZ6WSyqF<|g`@W|0Eon{{`37MM@`=UNPN^|wo(S<1o zQcC3)H$S~UGzpSAhXDa3V+Pc^$k_`v5poXuh;>5=NCn!Q#JNXad+_$jty)&>8J)mp z4(|TVZ(c|L_HXd`?@tkQ|2v1jU+CqirLhxdj*V*i?p+y2>BQObpC=26#3MjjEaN;r z3`h}VOgfl_GL5cy3dOfUspIG$GLS%Hatd`BjOo#F3};=+5RE`5uN`aTV|)xmP!x@n zL8daF1SCA3o_YV=IaZJY(#yuZ>kuGYR}BDU4r+=#q}M|lkmP-umabqP3vDuPA;n`_ zK=KAjnB=o;`Vx~3J%*zkwpqx076Z3LD2KjTnHiQ4sg8Enk#=Pw;gPSkdE?`ziX#|& z32DXRmsk1{(k&!!Joe-yKu&^VC;t*WcApA=1Z3y`r|kTntGtdp&8};l&5|)Yq=I9< zj6;Eu?24SVSVxj^5YeJ5NC|9QF(b&VU>c zlEx%J+A{LoR7?F9bbYW7FMe*rz4iBQ3CdfE$M4+3hY!{sr7&_|E$y;)#`Zpq{1K35 zA(8B(0VyKGK<4yzt_hRl=IKznJi}eYkxNkbl{osUF>n-$kqx(tMKZc392b~KXcUhI zUUuIFB3)r33;oyv@;829d#3Rx@c6#!>fRBMCl1a9kYo^3^WiH2y?WIu2hwO%E<7Y4Z8^y!WI*PL6)xWrk%Xw$k&X3UiA%&$*I4RmTuurb zS^ZB2(rPO*l6uzz?R??_=gNhF1WENE-u^uX68k8$fgSt!tS2LvZ!`-zILi8O0CBjX zoz~teBHOfxWDVK7rKblVJFdbbW)a=f>mEdY=dT=WgU8-`_z*nq=T|ZwPXXddcs%r` zl8`r^GbsPrB_RLoK)MR;s1R5Pp#7UgBEw@>Vp+jz1l9>iy!CHHOn7X8DA}#!sF$n4 zLc(a7$YSSA5Si!rpadk#$9LcTr6(XMs{lw^lK@g1HFDX;BS0d6tX{ix89?TpnwX_h zu#gZ*-UlF8u2RV@)FA`XuuO2GNKg8kiYy#R5t*6}!-FHUnV3jhF4`$_oV3-j+%iAO zKq_sXfea$GgKZuh$eyShQnC0#3yH^`{JbB@K+4EI^L(<8m&oP_$WjYH2}UKe4=Ja8 zP)J^%vZ&_Px$DHCg*@t6_@;pv8TBAiK~1)h@4l-oYz(AjAWt}uDaaO(-g%gTT(ZW1 zj5TBgHH*qXzWA-h%c>VUkRD}AhNii1lQ=A9$1{)#N_E#rA~Mg3Y)_4-UL9W5&^_H< z=ZCH%@wjk6Bpmv_OM=r`jP|bc}O%ujO{!sqIo*m$8;JzL?-`=x1mwvyWbf2bfZV#ZrG=fu znT|G=j=Qd3rv?M7n3s;bkPVR}B;t^zGi~SETgV5ooIIpzpR=b9A3h0?R`YX+ZdnUz ze4_?s6A6_bL8AaNI1EKJ<25?|C`iD?r&vRetp6KC!lXTT79x=BuNTnBGZfH;_#{+V zIU?RGiPRDj3u!+4)jeb&v5#yeaQx4lfIRO&<|B$XRc~6d{a0&NrJ&~f7S#A=wkcfp zBh|}Rt=1CK*O0M`?LeXoWaS#thm}&O>!%#FIgo~<#sVPhnH;TKohrg!kj0C93Ei-1Rf938w)q^%rx z$93%EF2)5gaRmXS4CFm5B*m0i_^ssB2eqw3f|3H{+I?rmAin<)K)%Of^3;jLHquly zQa%39<#XQLLMHPVLqt&+$cU2l7TeIpnlTx_zx&PKIj43>;E6_<L@<1kF z^lQLaNQ%d`*jpGlhJ}pOkDEx=kVfQdFYlo+7k`b8>}6gTK#q<18WO4L5DOVVdfQ=c zI+W6&0G)OC$fjjW3qU%N24hy>7+7W?HMwcf@~$xK@D*x{plXIf`wT3b8j zuTNdIF#^}8u!t$RMg%px&RwMt10tu6@9*1E&nby*Bq--c_wfsS3XkA@_Pvvu05ouA zVEohPY!cOTX`~*JjrI+}(e`Qdig+7^f%M45l;4G0r2@BX9{mdsuam(Py#*ZIWf$yY zCh~vih1_X-0YybZ+#!q(Zr6hOq#k9%BShL<$n$eYnwqU3MK%&14M6?Xo_+miwXv%Y#oin zQ2r+0i-Eav*gqAJC;|B@K-!)dfMnRm&=BjUoCSBX>EsgKux8~estBc zO^a7LkVf5htse_O!eao*_tTu8MH*KMkTQ_=hfy2!CkEG6xRZKi(Y835mVNVet4-;`SBmXGBlzy>& zY~LI|h{uLTWUa88koG^lZL7c|6}ORzlnNB)oxh4gM&Fb6?G`7|&7d1bOk*~tQQQ;W zx~S~2B?EGyjV#L8&wX5`;&5@In#7|_qXdtNYG}y5VkVLi+2YZFH2dg4;$#7`Xd!Xg zVIc#^)oaL~10+@t?hMEjX(v@jl9`PkecmNqb}Cz_C}6WY@_0XRbaak z+*Vf$kG_cP7-S2vR~w1Fdq??$nvG(vxw`%3a`W@oukUTWil{7SNvU-s)n~*tl$mS$CN<7d znznUtv~{X&sulwY)BI{j_crfu9#A9Vr=4%WJOj_nZNONW7Z2kYK*p*y3}nuV$2uYkCf!16&+voy-+w<(awRV= zAX@>l)`8S?7m&0MCFFkCKnD@EI12 z(q;NnS6?IiiN1tmgftP+WE^+!5Ru|hKz85l4sWjAZA5-EYW3BISMvXy8%us|Pn3 zNXO6}uWqA|!D(_bLk^Y-8x2V(R<}Ij$72nd@#L9sw3jm9q2heK$U5e}#LC_;{e+FG zV3P&|36N=~7QHm%Cs=7y%B(`Yg)ZBHv|{fidkPk^;ur>V*@W5KnO-3v302HO!lmzL zXO|t_3l1Z4AY063U#GRk%p=NkemKmlyEHspQ{@KII~Wi|Mobex+GrFT58y-&b^Abz z2(l-CX68|`wYF6V(b2)^L2hY8XH^(vP<5{$GL7E73;{JC+4?$Y;ATrTc1AcM&4v3CHZB_s_(Vw#3H z(w%o+mzpn#R&ccAU}YeQX1a$)x~97u67K8B30-KgX2ZS`+lY$%u-ybYGb)elz&f^| zbS9H#ekyS})(OJIIM$r>DAC*0}j+s~qe^F%O^;~#!HJ~uZuMm;J> zj?Z0td$&&37LZ(1YEC2yP`<`OGD6Xd(xSQ>*`5D?cAxBINf7j)@)9#>tK`@jjJ2n| zOSz_}Pz)IX3#y!%>x$?*hc)m1(s^_sF_8oM&pWDW6rHm&E+B=YyKI7!rLQnaDwUtb z8nPk}`RJod*KEo_ieoSA5r)oV(N+6#*()7L5g0f+o-&Xn$`o3<71prl96Sb*3CV)b z21pTU^f8k3^K2`#6R*2%RTqAOyNJ}may8S_HS7abnJ&O%osQ$|sj08&>%~a2g#?Z& zAt%fhkV>Am?(GFq(nC}1%E&SbM`S#1{p^c#=e{8FwpS;T3{0N70 zo;Wr)c4GX%`Sark=B{0v+f6U5@d%JH!pDKs-c12WC`7&q?EujG^04e-s7M_qk&A4k z|6_dd@ShdH&LfXhN0AHALJL#kp@j|HA~A?mr4RphT0;hqS84$g6M1l-cpMjzu;><2 zkqJOzA(a?UClp6wypZ;JeASw@X-dSt~Mr<8&V%D1-b0PuKO(YK#=M|%r+O9^6RQfa~@TL#tlLDXOxg{MHcud z-05kXnqpbZG=Vd6b9 zkO$e({1Oy$%N^2Nfaws1C$_Hwz`|`@d1NG!E|n^0#knLcB+?Q-k^`BDw0}bfQfo+n zoFNZM@9-(NkQqr9eorm|$o~hI4Umhg$@}CkST2Ygx0Z7LMH*Kcjf+>WUKBWbB$HQ= z+|p=ud_Swm?#4R9F9RuR!bAp;COM{j1EYgVR9#igxQG;zut`?(v(L8P-^yo* z&oPkv>#@Jhxf6_6xl(%@Ajij!QTlhSx#`$gCqVug6!F};yq3rO@WMdKKB9Gsiq^hQGD8A-R0Tr1tQigdU>Xd_*fHnNh$ zbg?51lZ6Z#BXkKs3q%UONQ-;2T=JQa!qL}|?y&`=@tDHw0|GKzNG#pjRRx!ATZfe{ zo1kVj^**wY$MMHOQE(X(t6L9+%g5X&?$b zlGR4GduRn0sslQCgPIFExA5A7^LOstx&PT0w^E&j_H91HTMN+S!L@-S`>4^>HIvN~ zBg4&2S58<1a#K_DwYdWyKlk%L{Q9+z$wz8}sg?BWO+d;(mMedvn<1w0xRZ4IC;)@T z1-ZlEtP;Hn!&+e{c|7Q@3vo-up&v2%ej%e#e z0hCs~@=CUlKZ-TvqKYVc_1Xla@du4WH$LNxH?Ea9B2HvdwU4`Klt{FTZ6^}dP^4>Z zHS57K@#wQkt$o33b4_qr&H?4knspO(yu~zK>Miaz29WlT(a2C&he@1f(b!$1j>qY) zmOh0zYT!w`?5(L5jl{MBzAo ze)bc(Y2JGIWgl2^VD4CLvo=Qrq;MQJ9CwRHWYrKv*?Tx!j>ha1)WlvkN_ohy8<3AI zUAD<4sT5CsKw403SssAQ;#18q?LwGHfJ_5b2#7bPA>;0{gGb@$ zA-4kweRad@49qAazcfLj+<^qfr_)RyLKuy|Eg{u<4D&aEbwXX^^oZ)>j`Jd=O&{xk z^GNBpP(1r-s@^%wE;mR5B#T8){~+!WK*AzBiUdA7(qYBMk>SbVk%`%++GAIa;k=tI zx?%eBbDd*jyO|YX_AGcoDm>j@naa=WkY0GNC%QNKC|YSWLFjfwXXk#N@eKR$5-u);lpgvL7Ok9GRV%m}ox6@!FjXG990Ldu+V(9b|*H z$27+j1DR+<#$!?9u|OoCIf*=UH6F2$0i@9*0VJObHoj%dIh#Vu$@Q=(fYgmWassm0 z#304=v+&aS-2{*5AAkDp2k-y(cQ0?=qnWwjID1?Pw&vDkAOZ3Kg9AWOwUA;`aW+BC z($%Y3Lw-v`#v!tzxWX)?0l9Ql0I751!ZPwQ95ag<#}{9;K>-0|Iq!44`FQVe^5F@{ zD$S^f>Gvt9(E`$A8S#k9Ny(H2DwX=pF8X>AARoK?LmzEHNiILn(5Nao?Cve4q2adS z-jtvp?jojXtYMR=ccj#~p@)x2LdrZ!8XjfsU#X$>!;^;xMmy%`=RtDnJ_7^3$l-P- z5~-M+xfTGqoJ8b)&>xv>Zkin)8JVa(F>V^W)^rRY*}3_+bL{PF#5rucH7YK-jtDtM+`6?n*{@D`R*3g zMUK`cAfb_!B+E#mY@1;A=Aolh?Xo*Kvu)e9FXsukZIcENQv;YW36HyEAfNwV^=y&% zmAXn@c5=9+OacD~=9(sMAHyu1AM1Q${QR}1x0MKrQ@AQ-S;V;s(cPahjH|62 z6MEc91p|rrK+qYgnW(h*)VoPoI$};@#cYbCVnJGlws0(s5129_NsPb$+qYic1CUM4 zvu7suPxuiQEFi;SFGF0gkpRhFwp_Mb$lP`q7BXCRwOPn8j;ma-C>f5yA~b^IkA7q> z+j(>WD6^1Ll||ywT=w!9=j=cdW7D8j1Tw0}?c>SD=W{TffLu3h2XrbE`Fy{C#6T** zW&-o@NLP#fB^YTb)ztBeS2cE1XQ7z8OZB?PTU8%ndo=)QV;-q!#ABa2O6CV3XD(j6 zd2?IG6nivz4e2f0DbnU01Ib{F7IvVvGhJ>4zr)qy3?32SGFgsm^SGj5MTp zT<;zm$`CvTkPaVP+GKrpJiC)>3ugFSvOd|yAwnHXlM6^UkQ>@5II{>!0e-23Ra8!? zu4bCen#TIZEu}N9$1&SV*lM#CQ>m^51Mz3kg=;UTg&z4fDeq+5#ifV>y=MK&_-JWe~x;-*7d+hw&wWhi8Psgt{U+aAB6F;Un zMcUpM8;(2ryG%tOi^kH)Lrz-yB0fcVCk6$L;x~OQS~HMbEA_z4$Y59Z5#f}1w2hh% z49MLEq@6w0BpzAA7>#dmF6n%0NEuKo)mu05V(1M+78!A0!~l2_Bxn=r|&1 z3>*4rDP4v}4_56^7Ej54r;K zZub+Zbz4*JtxQ~%J_@bLFp>4?=2g>OW1EQBu=aNH^+_u6S$#}d+#A8#;)!@LMP~*@nnekZ`lFiMNL&MF-;1L(z zd7!EJ{KsjtM%#!f)J}bfAX%gl9<9OfVJ6aDw!E`pnfnhUe+wi%oVNRro5-N7QeioR z$e`Bm!bUofKP4?r`59sMo@60$Pk3wriG37~(jJqy9STTV7|K9`P>!<0WvfCL3%Pnb zK<0I0cxvHTpizz*7~R@_+kqUE(zRL5EXQRsZK|$eg2#qNgoy-6Z^ z;?vJoO_KG2N5#|jv;8Ag0umg7wBHjx?Io$5y&2+nS{T@}vAb?Q-B7o_o|A}M*ndvt zK9W^Pvinc>|DhAwy76TB>C*r?`lT|GQ#fwul@X+n1Yh>cIrkrcKcEHk+pD1VS$w=|&``Kt=Gd48lKGq5g=}|J=RS?O`rH>Ml z3E-kUlLW4nqr>Cv!LhozBrTMHj4=UJG+`j=eU+@sdsp_4mLxgq_Z^AxeQ<+|H(3rkR}bi z*D(xHF5YjR*?Ba15(o)D(vT|v(%9=)#{5#YevB;3)Nf{^P zJQC5=kR^Au?bm!~8A|oYYN>OUotkoH@}rMFI(-v7x6O2@+>EkuQsTCucmU@>7{AM6 z8`Yw1Jx7_vhFw%j*3-MQg;i@?7a4gB7?1?q z4y2!jDH09Fbgi(Fj*{3Dlf3f`6_9iwE6c+5nV|}0Vf-o;NIH-aU}qr1W2^j32J&~W zF2g|9He(?j$Sc~SSqP*}Qn4_5?UJ>>VsgbxWgsDGVU(SLd=wy;a^_b`IeO9&80D;; zN2k$G@MIdxH@>mx8@vRh$^?PXf#lBHVUxpFsgHNi2uYOgp>K!c=KwNge4I$`o@lrW zf5s!~2gsidS>2>uIG-q>>FyeW`*!V4E>|am;V27PGi{?>N=k;dwUltPB_XL)nY9kn zJFI@h6YO!HvZ;?JPo6w<`Y5*Y;$DcHSNaDYr|xXUC|bn@UvPhKy-X%s+WHmkSVw-l zyR%IbBa^c-m(5Lc2hKNM?i%T5V?&r13Kst~LAw0;YPINa&J_sba@$GAVRm~bQ zfD8+1L}r)Gf!V97pCpPgA~TRWBo-QtN5c^s<){JLX#CpOzLtPY{ar?*ytRpqnm$`U z(gYhk>c)>mdzT08>dfBxFn{tHst$APrPqd>H?&`CoIlnt_v?xRuJUkflyofd-->BvRH zmqc~N&wj>F#1eAHy1)6?XP?ea-GJn*qahVis0gyEj(j9M+L_$lrIFs;PSLlerasBW z`|5lJwIL}L`KCsOBL zG`6?bxA*R+uWV>&Xk?=4+L$tu*Upd4(c+;0C+r_upsf(waeRTj!xwZ!D>PP|YgC*$ zk>88QV|7m9CKN2zXQ25@6$+*q&Fcx)!p!v2Q_>Mhz%3{UJaB!{7xN?dAi1- zClOv!-cdC_-Ce`{xxC_|-G}dMqKhUz10=^G9X^Ga*`sl0ZXj(TNsSs?+e(z9FG-a{ zBM~8S!8#hoXSt$m4^y_Q-TDpcx(|7L@-4JQtp1j>ON5D;$R2PMK^X%RzRz?#H;RknjsdaZs7sgd=jNoi}1k58tbaI&rVbmAn!%pN*~g0PmWG zR7`_~JOYuDmgmP9HDyja)0hWNX$`rIb7~@}iLJxJ8uCS1$kl5Tkg;p+>qnxQiN|&mDIjfm8TFB7BB$%jLLy_de|l&q z-df-F`OS5y2(m#uRuSJQ@gudvWAB8YI@~27SvcTabqYwm&gg1oe+!R&Rw(|72Zd;d z(8>31y!X*%8fIH<-)3~%wwpI0^0Uuy-ShW%iAI=AOX10uqbr>7D@czsp~HT)hY$jmE!6i*hebueZ_In$0TE6kq#%ag^*MxBiv6 zY?pxK+j)FIHj~djfA@2~i4u`JFN`$q?DzU|V{%1ZgJpWymy!48uK*$q#PU%Fa+s*9 zhYY2r0&YZA0KdF}$!NBrFrcZA8m{-AWUkLn7)HO4}YVeB7Py6kY;xuVUs5G$0cEQ*uHJ^K?jQb%wHkv@hGm;D-B*#}si zFc(rV3dbwQ97u?aCRko;4alVxKt5~@$!hV*YTvdtAQO+C?va5^c^-fa9)IwI9|%Y& zBvNq0C>*;`KBhQ;jE?LKq=>4Nzo+q(<3eDBnCp zE^>6RLq+A{@#tk)NHXQ~IBYAr$kjh;1mmmkIFMU<_=`|8G&#(oeqx$6Z6ijq>HOIF zYqPW0enFK5Ye-C^ctp9b0u22bMdQf3X#z;yE?g}-c3va-aF;DPk8T}xFVZS%!~?~c zq8mgShoK{+sM^-FoDrU)cAWgsz;ORARw zqPHgiB=UeJJ8Wole;q)kGY+W_=SbgDU(kpMu?(m&nC&YDZ#kuX+bTuG%mOY%S@wvb)zp*|dT??|78)P2y{E|+R& zCNrq7*S3`g_Z~i_GZk)}RljDM)O_RQX-!KZQ7#_$Qa^d~@Hv43IkN2Da<5n zIgo}V#0fg{zy%;p+&o|+y?#=+PMe+&>#TV|DX_sjzJP*AAMK;WI5R6WB4GT~sS_u7 z9z19~astCItbM_8bR?^v+`jo0Wql~FDAq$(7FRqDkV^<=#A8^<0+0%4;86w={e1!w z9{a>285S=W=Ve4v*kCbDl|$$jQg1*7V=(0&+lTYW*fn_n7wRVsX*Cv(ZvSH={VRZ# zRb&G48H3o$#Y_5K`8`=b;$l;Pz&!CoRrIkRY3?x9RJh( z;s&kXU=SjEx=@;T4Z6(1!--tO7cci12Q6~yZiCZWmQc!JY&<- z0Md#ptagY%TVc$!y1H0PZrspaQr$R-P;$yGD>pa>B~pAv6XmH!bI94lBXfbeVTMCpUuK@3)4<}2M61>V20Z{aeIT# z`K)W~nrNZ}>>asmFC2G|T`t1TL;{F+U1tRKZnt_Ckj(Z=DvS@W9Fv>OXt`*OtFdP) zv@Y3ZCiSz4NRu;(;1LMRv-l7|E?v8MtpRD1D+J_M)k6~1 ztX%V?TgbeI%sHR$e?56@;h0yD@F*e|nU}WkR_nJC>PhyIGDx{>Y^3r&hNQwcIAX7RVhIOnbF%3)E{k~7MfmAs0 zOuKA$S4$h5=AtAOBn{RgEg%_asx}57+y{@BX+s=khx;-qa?In+n>UXN$a$qBzo0A) zDB0p>K^avS@W|Xg)OPM({kfK&UG*F9>0H_M-6Io3H3wc7kfyYm?R(j#2Tf#!h2%zG z29sct_(`B~mxne7QF`d&E?bZMee>3d&Iqd0U6DvVQ3|yI(s2aHY#R|3B(jhqQc#{H z)iZuTrQ*4t#`_m|8jzbP7#EOkA*1>%ETr;~h^-n>1WDoOF^vI<$MzMZ@fbjwg_L=O zMULz;9(#D8cBwm=NUQA;kq)GHE?9)EWMb-#%|vc6Ak9XO)G5hh0^k0cp{My_oh)nn zh8lZjJR+qdVP8Ah_-{ORTQbt^$ojqnqw-U*=rgexL}e47Prb=Ne70yb%=9RyESQ1B zRGvm`ZC|`h+zpc#$&b?*izv5HmfTj9UUp$~1@6qZB%j{G$Y`a^apfD^M|y{co5o+K z5KR_^*H7F;29X)a0*?rQ>^9>W@-m7%g@SwGmbr{|pk1P`LEla66}P#aNmno(MiL?w zT&E@QKRSF7#5I`=e-m`t>>c=DN6AoKIE-DvSJj%~3w#>Kz z$>ZTbMoL^U4WjGNb_k^eWS7K^0RfSiIwR68q$b{n$KIK^f>H;vK09p;WZh7e?{FKw zE2g`5P>-AT9sBz+md+zm6KtbsBspE`v%euM9!UDAZJYu*uWI*ACA@i8U+?kMig@b7 zLx)b-xk{r)NsI#|1wfo^$d(O3_vw@9qsss}Gk<5Ey0rN_$Tn~wGDY1=1HmX3)MB2i z+y#(*LtT^C#wq(D(DqW@Nc#}id?k?4$snruAe10W6}RQ)Eb%5Sv~jxnH@yRqYmvx` z2s;#Ey1VUMRzb!`Gn^sO6b@TRcADsl?Q|R?%*H}izw!(A4U0g^K4v6i4Vm^17ngw) z#tBG|X_WNITi629qwF?ZBjypmxJAYY4=y>9vXL7NNO+7eJ3O`$K0aUt98vJN?n2}A zIeFDxk}_Xg}-oNKN* zLhbC=kz*O_#tdZ9UuO^QK-(|jM$(DY>Da>YRrK+z=C0omi@L!=rc!Y##cluEfb5#xyX(6S*%>yF8_o(e1QaTyUt^zV!$OlZMhuP91B3V#C-V}{mcqupOGXnDF zpAH~>&-2sYaVFQ9!`6~ft3&;swo51=Q*>oK zUT4I#NeO(R$=b24RI^2eXh+cAgUnc=f>T}FhuEo64H|Zl6OwKqQbD%KeHu|s&P7O) zmDH77xpujcyYj^2{X1WNdFKm-JKCl!^^K5@oTC7y^L6~2=8*d$vN%jPWqk?^7H*-# z3v>fWueTLu`XB}i(-bTu$H5wqn<$-J96dAuDak@=qb7)SB)^$}gaeb@ zb*k=?JS(WMhF#=BsZa1|K+?r(Wwl5Vkmr7?mOt}M4dJvqY%-S5Hx4~b0OZv|Ipfo< z^`ZQ7ZgI?imUF_i*94bXNC{K9zompdZ*S2VuR1t{4x5AOx*(jvUn6!ACE+L@-_uUc zM|?o}?qB|L`r@`x5|Urid2^@3fu!)_{(W%NtrcMaQ_G=-j4oTVD(Z8?LT34a*)Jv_pJc11Fu2Eo zgh-EvAW~jif=FqR_hJJeI3j@Lg9M~UHOliCkS4X#&_3u(NOd9PwWHg|G>>`timHZk zSFBR#{nOKO@Cj+lTf$>|<}sD_wD2V||IJ?y|GU9~uBwaEFkP*86?S*^YSuHKN_&~K zA|4SuzK2ajZXUt$BR)&|3yaCLmShDf@Ek}tkLMDP2q3K$htwqJZ5FwQZ{m{UD5VS=xmI)g6fe{$l-?XIyH^C9J^i*ooLMr5oa zUmzVRAgS}=9FR^1sAz`I*|Pzph;$1Hj{5&J41go%+1|&@k z+BIDAI70E~Kx$80%03$)^V#jsxNM)r<$E;1B_b7|NJb>nQI^}L zj03r&VYsSaCod(LzurJNqg8_aEg0^VhIztc%@&a4)NE!oD~>tyfA~88*R0QU&wI8o z!yGvXLem+m*rHowS*IB3YDQ4mTCF=yrtD0R+M>HZ+j=_~{1m;H10^?qO1{apE+XWA>t^E~nV4qfKJPNkc7sgZVQYML z>#bNflwClwx*{4PsU1FF3JH-lzEION+Ab-xP=d9VeMVpn8c0>^&Q;5WfkYr1jh$DPEgTs%)a_!P zrr=$7X@;Sz2p79G6xUpxA~!y5lf$0(Fher9OoW4E#-Va$c5Z2Q>Gtha4RF(!cJk!v z8YH5MoFMi5XK2L!j4ubs|6@o`t#NAgf3G)w^}*?1fAAJ*pOQ!e88(>s0ms2X?Nqp$ zM#xW1P>QSpY@}G?4%NzDwBuXcLinhJ;9XG?5p;5Ibsv zOf~4f@s5EEg>+0)9y@`omhq=H?*K@KX0w(JktLB9N!t&@)ENnvH0XMxlz?;#ns@8C zK{p#B894N~bs9Xjo-^yCV{GB*0w6Rxp}vO^1f`2iq^mX0e)ie_0B0k~`7tWr^1dXU z$olvs*-i?c?IM!V<%=H2)k#u39E@TvQxmp>&L6 z78exODEMBQoLKGMUSfh4Zy2J496hO{S@tJykB$N(g5JrKz zvZAa{a!GI6)Y8&yOmK567^ZwArWnUB?XmwXAhj_cX8r#cm#->Ue7b9XhNlo1WMg~(z3dsEzU!YrD zeHb!;+=U%Ffan3GkCG_zMLBFtS#NFg!B3xY(q3=;aekI(JoZN;Bi`x^hSx^aIzBt+ zReiqjRXh^T$Y4<)1U49%pV_Ioh4~dAU7()BNm4x*+Tus@(YbP;Ai)wMG45|bA+KD~ z4J6n5Kn9VqQw3#Aeaz%fT3xgmd^S|8o3@hNefq>qM$#Q3{klnM=U$LOBD+0qgNw&O z@)!R}K>n{cNvoPjaI{7`6Uj#da>z)+q%Bsd9KCQvL5+cQ8nPuJ|MqYDExNh&{wbGg zHfm=DKpIJaltJXvPlKdY@|9O!`L91{V6xwDL*R%x4-Jt<(m=*_uzetXwL(~@Nt`yH z1HuXuj{-8vj&AQoV8!F^!~dHsqA1S8xXZFDxfrF zIf-3BhGLq%f^q#;)7IP50kTVFb^=#IyvcV;?o11r%z-pxp*S!kmYo&#e;tbc zllOk^AREI+gQRV75f+;~YHop#3p}+)^if%#Bj?Vw?z0Y%wto-g>%&9mP)HU9ghE2H z4I*E9=_NB+P^NA0zCHCc1d#tEadPB+DS-@ylT~#6a`DIxc_i{Mu*jui946gNnLr9? zrWv*zJM2RzP8%fKR1Uos63IPs_UiFz_khNwcDHVwaUf&aja)fd0Pn-%!8?9NKyXSx zsvbj4dn$O81BXO-oP)=e#XtV#2{jvn9C+k~R|@o|7UmxVMHSR-%%dE( z7S$VH8)7EF_^c@;f8o%@{V(g6fRHEGA7wzj51Os4?t7B}V%$c;=k)uCYd54Jn5ZMg z?EDXg$r=hY%rW4&<)sB#Y{SPhPfm=0ru9+r^{4lrJb6OYtx$(aFn*NL?TNV+$RyZi zSeA#A?3UD{h{SbUAOZ4Eq%BuZaE*tW7 z29dN+?}R#~kX6O0__+nv16JDzvP6^SVFo19M4HF4W#z=x?9(m+flFZI6SqQAHyopI z`1)2ATtXq6Ko*c23P`cHbLiYw1DU%5KoTG!TE5%INpbnKsSGZk-r$&+{k2YsU->71 z^wu*m1!3i|v7oVV+=t6UBU=ifq zt+^Pr8eVgnAf~aO)_*9}Y!vEHK_qeNum>KI$Gel$92%FwaL#+4y>WcpA-Cj_+_-_f z|BVvnE++=NxbMd+vr9Ar!6F}Sn*_?+i6profaG?E-ovT6>x+xmuL{Vz*~=3)eIPYx zDqsCqfXo*a(%8z`)<8qUwM4QGlj|2pcK-25x|i2RWMb0IPsbRRSt@892h z-&GoTbR%SlBu^k|Ah|+w?1I{NUPs;xKTAM5-%EERRYa8o`5(gOOZzu<+}`(E|DGZ;pvW zUh<^EVb;fA*f*+Q)6e_wz!`SsB5CocYHJ^$vyOz^u~`)y9e}B!;;I&(If}VCf1M+w zwyOY}y3w>4f0mTb{L19QqJhM++rq()LYj*{xu8jDdEWZRXe8qXfdS0VPeEr%hO)r26Dh1rxy|$btm66 zv{11DPow|1Q<|hx{?61>xcHHzOk13Xzf#ef|7(otImY6uk?YQ;O@hm3Hy$mK4Aq=J|FM9)f1i(!dAr|;JF#~Cd)WcSpfNW+Y`{^JKmm4l(LFDg_)7aqH)=fUz zA)edy@&=lQqj|(KxXyi}8Pu@dj)%h}bL{VJyZ_t%WBYf5qJ6yw6!&{DLPyZU3WwlP z%kgm7^p{B=kw&*xU^Mo?SZtX-enuX=>EqR@t9P$@@b%gZnMnYhmQMOc8(w28^OJKc za@6ASU&Z4hG&)o1#N^}X-erKBmycH#STG5c0#dn2Cnu@utSn8z{=~K4-~4iK-K6B3 zYhcd+I&-VmhDd}FDig@PifS%6!fqxyLn2ucprj(o)&hO}&mD zd*Njf{cO7oOk1J-@&G*A*+ZHt=_DT&POGp^cdmE)vg=-poL$ehoF7jfCtR)}`Qytt zHJ^<<0xyXm;YcD9SP5MK@-I*RHF%u2DY^-PTp_HPd&q%OYy#(sC&OGsghvcQ3B`MJ zsHA{=K%Cup6p%k@{Cy}Oq4PcO{Q&?=W@RPQ9}h$$rY*n{I%O%5{)qr9KdI)Hv*JY1! zo7cHA!C2?Xg3{ib57~y-extYFD009wKH&b^oGi?mbpnYQ$UH$hz7~+`rG!VHAzOiu zkS2j7>9hObZ^G~A-Ah_m;VxaK3@K)tVk;kx+UXqy+b-6O_%6t6JkKcjSK=HQ$BEw^ zakzbDhM!nd3&cm@IH|;>?&+L$)V(k{F*mlh@`^XszdQ zOW$LM%eKtiK)$$VREzJOymY%7JSrpk0uI|d0KE0lT^<+VGOx-}b@1Bw zj2g_~(F;_#%}L1sb8<3lS)enR9#M2gk_iVLA0HaXB}~^WUjK6M$9DkoU;d@vf)+rwgQWD57tH{% zfLy1Ljlgo%4ag3Ww$>WiS^Sgi>JKN{nZzuQ-MM0^*5_gfq=8I{G>({njG#t9S|rt( z8~e}1~ke5+MC9DF4uyeBO^6@VV~L@pRQ^9*`b2 zF1tHGhDDtv6w*XSaoK6dOy2OaRcLG?`^V4i+4AF-FUl6Q7j?_wmQni8a;1;9xwusq z(mcNfj-+qk(jg5U;&^Ap+LyVzV*DeXSglG=Bw^U+p9AFh1b1`tg936f^GM$00=g)Jw;pa8$;3bRyjFmQNnJB?8zAM%NnA3u1CZw-((XEe z%pQy2&^#8Bb+20iY3p-^6_9RNQT1!1`ZU^-8to)mJ|v=wUPSB~FzSbCc7v z6XTFOXWk~RTppjDcUfk7I@)$oO0Xo^qcxHXRCAUTWy2t?eb7B{G3*y*|J=7-bvC z;RfW`CVqKS>0}>B-bii+j(lurL$3wo;Q%t1-X@Q-BGO12$OG-X=n5cksp1$8+t>mm zO9BoZU|FP0M0)kJ|LO~D!*z{ELo%_b(znrI^4CuFz@Hp3II``GFh;jUa9M(VI6PiH zPUFR`&yTN>cqH2H;nzp5gWLSvmE$vW)4ZCV#YE(%2xM-gn*WskahilUUIL^9aDp}Y zw^iw0xUB|Wxox2+AjuuA@M04E)ZL0iq<8N44sFXMeY&!`;R_JE0%?=rl|mL(Sf;c4 zy$}YnDWpGwTCDa*c8SbCQWgXTkcl`zHXduW&m#j#-lwG@zk){rDGW^`uYcvN&ynHN zJI+}l%VlTfFcnfS{;s2tn2tlE>1?>{Hv|nW{9{0LcVWF?A)vnLP+5 z3(0*!q;WK#+6kphwo2ea5-6R?{PFI?heWnMUQ8gpFO4w=l^OB+x0Df=J60S6hg{m_ z87`_uH{5782awaGcgA1E;PF*JmH$4zhjYWF%WDuji3^@!)MgU>o1dDwd}U%mz)k8` zc_ouT&J%f)eB{g0&w0#1a`TcR?Z-8COv=tZSm-YWNSrx z?-%K;yFmJ(Br<{dHX!T5u4LCleoLV`V--7XSq)Rr- z@c1j4>oe_LIFc5pvtk&QV5gh*aW|xb?5;wR_j!HewgS>D))ThbL^dY>u$6bD5+EH) zgh?a=NE3-g7z2+5q--6Ko|Dz*TGDhWfjp2%0wf;$#e=(m(U%_*Xgf6W+~MeJky0n1 zku+X8t^ze2YKxS41V|F#&^U38D$Jx@_Bb?}N8dMg{EW7i9fwDZRRN@ZW;LBHshpTK zk8-t3B2t52PXy$wV(W=XrfnLKy1aper38|8G^KhtIpV+P$x&tij&q;JWQOEmp zx>L?I9?VO{qjq8IAgOEbM{XQv0D_f~p^pX<14@8wNJ=6(K?=y>f)N&NJDJJ8a6upucf=5E*JTd^i9)`bs2!9Yf}?n6Y|&B zdg{)VQB+~S?mYP(UZbz-O0z;b(uP6ulSJatBk5fiHU_u}ZO=QxTE<0H;Eh&+N&;vkP{$QwpG?H07}?7+!BpDy07CFKq{#Si7wiN zLcVxlUt1-a;kx~`YS%K|w#ck0JbDBh&wVj>Ou;87MF}Ebm*&l?czuoOE>AF!1fuTk zj1NEp9*=Zacugc^3P*_2TC^VV3+8O*2pQh8(4)Z!BQf6FK0Dkf;LCp$ZjkX}n zG)_|`U(61K#jlq4-a!`=NSmvOSo7FT8!OZ{F`-6Uhfo`WQ!SsEXL3kwd3-A-j`4rH}*76?~-u`3zAFK;oPY zVb@X}ZG|Hi`ys{S?{YCfEM<Imr+xt+PI+0?_I z8+{fUF)1W}BKj+0k27ZQD8XO=DbJ1UX>Ubt2$)g-IM6Xvh+yH39fDKHR(A4+*79-8 zln4SP3nDp2YRCr9?bb+DZ@_mJ735IJwt)FRexsuGr%p@?QH9^CZ-XePGU|2mAumHr zF+X^uaryqo*2k}I3P?H%9|5HLBOkr}$UYnT5=ev61yYPvm|Z2lK9ChY17UZ}`&)rb z@QTRt*=De+Gtijv43;qJ?duZB2IR1D9)I1W}sQdzBvsWp_P^>n6K2Ey8*dy}M z-dtT1i&oO$BOYUx0dRX$N(#yKK9){$YNTmbBr43|QJ0EX6IW;;U%kBmkLk}r7G81u zSFbPbjdJheS6?kZxbya-^8oqNNAJJ?C|vf>6UhFJO5w8mYfa0tx6J0J1hPNE%6A!6 z}1a{-wh>U<>fR>(>__Hh)DnePc8AMpm1NMsVp|KkiKPI@S{f)>|<#fUp0`23?wL3@fuslBe2or z9Wx5nM*&8R?Oi;MX%3}@LLNHwvJ}!)@whjM{Q}-}pZlc1QRfBn+dL~z4v>8B3Oq(= zqcV&p{)twIv%`5$VP+BywPvcxLcW~uaok%(^9Y|-)V#tj z**=fZyyhCAhYB$^DUzN>=8Jy7G{kstI{<%S|5|gTum)?=d2Mhf}_J47NV&IQu}+;ZRraKz#w5oO!uvJU|yV+wsBH3aTzk9YC;1W9fO zlSlS$vuQO?U=w%mYLtffMG*^qlKh2n2RYyidph<3=g*&`Hh<|tA#V(4bH$I9i9 z1Yb;n%!4GMO^hYx`4Kthl;F^Oadz(N?4kvd|K$J@2mzBPTCRC*fh-_RqF!d0{cS|@ zmgcWjiV+?&x^8RHcrGLp=O8*1vP-0&;-<|8W5zS87n;bQWr+R$9mx&a25r9Sa}U3u zQlh$Z-5E(!&x9<~IclAdi{>5ULXd^)>dal!8I!~ho*8!8u5x{zqo!_B!fnHFZ)R;~ z!bNKudKMlNNlzk|EAaTKdBh-)lw;&~q74I>HKGI6R!DZ3E5>#i+azKVN<9XUC?wKY zKxSsV5-&BXpG=nJ7fSeqVLNA*M)D>sli~t0r7&)ftKr+M%-ATjM@C!!yU%1ZxM3Mt9Oe{oy*96(no(6o{g2~x?Ot9Z*ic3!nn&Y+b2m@@{MkJ84iE+qgo22xLrV+Vc}?r z#AmB1(lp+4PP``|QAmKqIY;y|e6IE%C3|$C90yB=YV-g~i)186&aSPU z9iLb-k93>)1i3V|6k&}#bBxF`$&EXQN9$wUdZXKB1IU|PJ#v#ewmdch>6If|^gu?E zuO^VyUjdMzl*!14RjMf<`}2iOIuppY60!pEO8(SZs&?dTKD(^8W(Y{@A{I;*kw3Ko zBm!x5ghy|3W=rrd-#z_~h(sY9kVkeLy|8op_UJwX$Zjn=y*7_k%WgoP9xEWp8d)cu z_9^>Ar&qTrWH33}sx;Qe1QOl?!ZH_WMnxPy9gP(bdFj&UzlBGLjO4h(8k%sQjg3GJ z$lacP)w&7~meF#?hevObM{tbk@OxAbRWwBQ$mF;(h(q>9XOAHgI0I|;1v$K#aBc@t zjBNooC;9doJob8X3);r#0;0B7ppZ+@hp%?)?wu$1bqAQfY5xs@cx<8}@hBh{0dg83 zql`^GgS{gdKXsEY1Eh+FZbVBWEBjLlX&_S}i${HJfXD>W_+f36X=Aj4pa9ZD)^&#Q zkEJJv!LW9WZ0AUVny(#Y8^|`g0Fcs19t>pqY-h!X7|TwH%tK@?t_YEgt@k-oL)s^S z-01k4cf;t9mW3=Ft4$Xm9n+LX+GWQYaeLR`G1?w&2_&?|E-3>^i^FTTZe98u;|PdI z3Q5X1Yf{(}e`?^%3i+CV^z{ijp6YJMw!sJ5bcv0-!9DDn8fhHc z0TX0ZILwv#5E)J64CjpQ+U+e>;?eECY7~OUwq4wp4aYW$G;O&zk8;TBqA-`1$JgTK zLlwQ5{hB~R9q!=J)xV2o3P79EiisiFw{dm5p-itO{1A1loFGiGYP5k?x|2^ORqh98LBv}v2BybNS*KTE51e5sHdUmyPEkp^TrYrp$q_e?(~j^6!K3OSlJ z8tJ2f3?36mMZcFk>sm8h;?a3?NhCi3ke>&St{~cNb6emR0cndZEWSX_`iQ}vfmEz~ zs_e2PQV2q3rXneK|5o}aAYJ~JYQiI{Da50jE5K1h+FD{U>+8Ivm@{iVX09n$gB;9p zyVvR}K*A`1I^p9%Si9^`ZHr;^dI-lnzq}VmzE@Kx0pv}QiYs3v$_|CZ3?%=HgJMm3 zVdbX>fE1(+$gEw9K_OW{hF~@-*SAY{!WxYJV1Tp?r$YK7Vv+z*`SalMy&w`8DKkOi zd1rmJ3GLUhhtKku9(%|NIrPqjoftrlMdGKnpLOnFsHOLs%YJI(#^KWq$W11)dVCaG zn@IDRhNx~ZV;bupl?lk_g2$YJA;lQ#hvni>Gug`6STsW(44?g5xokphqf4X4fx|D* z5g8V9UR#{$yM#M=uR-Bw0i;kT}OUvO8s?-jW@%@gNHgb^M^ zpDKx8?ZteNFJDsPU0z)RN%7G2IFEc8$Rsj>bT+1d)N|KiOXTdb%Td=EGER?!d7`F~ z4ag5O2M&?d-{V|Q8b}6_^4i>!*Kp*6EdRS?#j#l99BIhDLXz}3LheUC+r`5IvU_h5 zKvqoiJdPNJ+_p&;2_H!0LrfK;as^!k>CZ1Azm7Is%`rqYX?d6KEiLJE1y z6>jf%rtD2Jd{$%s;OOls*Kps`y(xv>l&{gpi5U*2YZFd~lY2xc8Rq%|Aek~88JU|l zk4w6nQ#o^|$EN`i!=sbVG?3HqC?IdDv*M;X<%G!tFP4=G;xtBkB!PAV5@|%MGVgAChqt(h?~iN&1LL0m(w$BGOQ1 zsRp}nbVmZ|T1^+o^4WZnK(axX%aXQk-1*MV0CF?$HUrr#FAYf?dDmPvwg*Gae9vYs zaIWTD1F1~7)X5Fudve$ni7X;HM@l7u40Bi$iSyB2RI{@gvMtW1@U29=Cmvu8$85K) z4`^#k_l5Q;TsHok#10CGMCwLs?|BB+8=7|&jvjExC1@&l_ehp2=pie_HJX=BoLzb> z?pEA*)>}Jqg6Wxs$=>*cdF0|R3OCqFZZ%aGqz7qzL|pbBeMLUFZ#n7ZWyLrE=~L$Y zI{=BtR-j;oM1MdLAl>t$?U4;Yz|j{f46bRHwz02(EH=Bs=vY02^XfQ@6JuFQq!yhe zkP2h6=#Cjkr+j30cypw!(_`D^99Pt2*AGWX76p*_LF)efy-AkF1oH2G7?&`>BLeyS zwym205 z6Nhp2^DYZIfK;{|TgHn6br)g+i4KJ$ww?(vftZc7 z|MxkAX3MPr-U}ck8^FOY5}Cmdy5>0Bxk$3(0uoCevyx5ykpiUa-}1iVP(VVYfmDnG zbKFytNuMbm#@FB$JmFEbMR%mJm{~1n%K4Z_(m&T`ZYV?_nIV(8cAR;{)g{et-3GtM zOw8Q-{M0>p?6@eF=Ny}9J-cWoQx5{t%>V#F|GpI(qcbkz!3g9;w2_N!JkOwWBRtbojpNg6L4{X{)bwdq?lUmQB% zo^hR%~3gV4EU(4nM49OR!(Ra--y%a>in@y zs+R(^F|a(l#@70?CyB9{{-0ZUyuwJ~iBtE^Y8gfB^`R+E1;u#{&rG}P46jbfd;t>S z8%@Nr1&#QL2S^1-p(-K)GKoweS*j}_0g*?6m~=EC*JZB5=cdapAh7~+Kp{&@{X4ww z64|(n=l+%L3;;o6BH8ahi=GPi!9Q3Bq(Owo0`d)Sn>s?NMrj}2?(wwlEA*AF2_#p{ z)Dbd(+`4(|rlZ4~w_}@tvRMKdNR~q8!e{Romm_xK$DKYfXnU@)Y1_BuP%Ta|z#ccu z$*%rsGqDJep7YjTKdorFBOC>!d8Bxp3JDd}B#Yk;>WawVv8#~Z zeTZyPdghJ#&24d{Odxq`RzMQR{LC;$`=*nSXr_;jVZ~!Mp5^(G4^EI^36X%+6te5G z?Xy8LT{a#&6>{75qr;oF%Q`^vQAj%PlO8)15`8p~ajE}))3?h&<}nfrkIbPj9Ckmb zv5@As0WzW*<+X2c&eKj^U*Z6TwPw=%T5`daZVFA9d8ar^>2Moygfj1$lKR@ntq6O&I06$A{+M%Nhu*#gR}T~^{**^36KQjIQfrLA=6{$u7EC(O8-Q* zC#PJ3sj}LTHbCUybZh>45*d2gV3*Gx05ZcEpCK)hBztUlYV41^8OXSQVJIy0F@e-7 z6?QsrKLSb6L(4cW`<3RhG4ohJKK(rj=C32$cLtNPv5L5(!J@_4C}f-=%_A25 zxl%o~J!TcA8pgL+APr<>7_EJS@5pNyd*-dKtHea#FCd3*4h?@y#R#(T*(&n@DP+P-$ ztAC=zsEZEAA#_PC7E6G>${&(IDn~i*8lt@T>i8JdenA%8MR>Oq;>Gp=T3}<=m0#YGO5t%@~$!f?q z<*oa+OkNxy*#_AhwT-9r*u!{i18JA7+u?j!q3=3uK>mmR{p|qxJV0(1kUIe~h%7Es zA%$dKUu+8?EqP~HIF&@kL}3Not=%V@&V-|Ws`0oF^HVA$0!eC7K(fq{rTGYCyTV;S zG77<%*nZC|?n72Hu7OFwy5^Y#%*8^KZcRcdF7S>${V1 z?j$k!#k1q9t37Tt>~RwkS9bLtl5ONG5J&=Oerf9LYWoZziLll5v$!I+epc>%)*COB zlmx?-Y3=sm^CeD?3nVzTf#Y%)OuAztFl;?N zg97Q_Z&tei{JjE_e^wt-NH;$MW$qO>k8feIV0;;gL>`y>H`GWR0kI5$OqabAnlh+) zdc8v8vWc-H%Km|Z8hh*pq)I%1$VYN%Lm*QjMI`dLF@d~wrVJtl8?F@M)LZLBc4zq> zW_6SqL|H0c9wB`}of0?nlZk5snNx=nNM9v#h@7Vf!&Iy}B^+N>6PX6D)shR1p6w#k zaemTUB6U90JhnTODv8K^hfCRPR@$t&-FZhYx zWK?gMMvSEvYQcb7f*v;wO$tcBGoCu8E-djIuxTKd=H@Mswy%FCAhAA>ASfWc(G(yJ zVY=*;OCFk~LMC^54u$;o1pvikS(~m&9@AyN?Rz6Il0O16w%xz=7EO==360V`U+_vw+YB0fP}~nkYg#571rRgc@vTwlEq^(A!+N+ z6Jqe_IcztI=b|%t+p^G4OhDqZA<2ovcJY!tcCF%N;eABy8d!*>xln~X-krP-k9XMw zpktsZy}K%9we z$HrDI!6MWakYSYz7h|2^xg(5zQD9b_ZueYBrt%KNHEQ;G4_yR8VJRRnRcP4a{FW6` zEb?w1TTIg=@{JV801~bssYTh5_6dosD7y>fCILCd?`>~D7L?jJ6-<=Es zI$cQ8xJ*XbNu2UN#*tT6$igvzJct1#vx72?5jKg8QcYghsheQ;AKD*f9kuN!1No{} zG=t+cdF)qFN2eM+j_8Xv5kHP~GD2U9F+$eaoj6Yds5Mm9>+yP(DCQ)=jM6;EPkh0) zp1G6w?FmDrU1#@B+&lZwwHtPrMB0rI5MT zNA4eI?GvOL&~VpaB^!rG!x%Rbw~H7U8CMsDuYCoFSdQZ2AT+LNY+K*B?r!p4-|*E_ zw|x;32go%%_MduOKI0>!FDBMk@10n?z4G`QMzpo`=bLY0I9B6d4`EIx&z|?MU~1?E zM~}+#BRNB>(HsJEoHYiGsH8`|6wXf zqP(_&%xk-dW9+UYqB$RJx$mY#`hGdJL$bmdTMs1nw+E0r@z@5kT(*nZCelD^CR>*i zcNKEGc(g_~8*7mbL{?Z69{c$X$)mGB@aRijVKZ1ViGJD_PFq$zx)7Nmb~O87X42V8 z+AB0Q7Q0U+kG?yWgm`-YV|k05%}K~tBQ=hxuL2%1_nA$J2oAinUynFB+gk=ZrS7yq0*)hYc&XM}MdCX==yK2v5XS7}Y7ukM+Is)S1*iofx zyD*8USk|6#$n-2W3rP{buo>-#oN|PVMp_(+U^KdbX*NOGaojg>3P-{j1=j${)iT15 zHb;5z+e^yfa5j7hY++McWq*?IXep^L&K8sl|HkVtbRCFdZ1NCqOv;R!3DIhqEUt!x-83K?N^k0ARx`3_+9X!1kPs0p ztbrKI$aWJ!bAdWXzN{E|OsKF@Q`dyj9U9OHYh zuZ^i@K6%c2zP?Pkf+S#WXT}gC^LYO1`96<7$K;{~WRpmRG_}3Lg_-~|qiidrSVSQW zWGduS4aohakdQd2kPz99k(hYI0?0!?uN9A3-L^&&6MM2SdLBLgipsT=k9hRZVe7&)o@d>evme*t8#%B9bD<~ksA?HMCq88kbU|ivKf066lJ3Th& zQsJgrLyQfLx#7o8L_na)dw6q=)BK;maY%ECXghB$PI-z(NaKhVHKl8YvT~8F!rjQM zq))yzxR7G7O1P0oPjtluY`>6=MACrENTE$U0wIHww&W4BpH3iOpG$6g) z$3XfF36OT!1teF+W!h&G8-aEMq|HF;mz2w-Cf!hg^6ANACvb4^`|X6=~c{afY58!6-Y^SuZ9E>$(1kWf|00JXT^r$8e$RW%;Bn2bjbv#q_}F-qC6G-Zp9~-)FCKZwQb+^ow2u`MAa@AJM<^Wz zkeftg(#Yrj24waA0A$q*RV_P;ZpY8LX-}Q25o1M8X;)>B% z7pPy!7BmqlaJ3jnqG*x@Bs@NY#eRWY2!t`>ib$%4Xq!tX4N8-~QWMLsr_3Y&20i5% z^RA9+#zq&-qHt8LP;bdUBWnDWMFFk;9-%q5GCl#1tG%@~fW*D~7T7huTBMc}YsCqs zQAx7q-UJPh=FxY_dhLayY|S>)r|YgRf*Na+b&#ZwVZ?b#AxkpL#ikURIT2MrVg)4M zNrzqvS!R(;mz_kaEmzmk6p*h0q=~$Z!6U}&1x9+4$AjjvfGmOZ2{IDn;FH}xE$yRX zb^`hBKXQ~!P%{AJ?mR@6LRuTWb=(cRd4|LiNGBoldf_-kN+R*tb$xrZML7H8_hfaM z5)uhoIr~Ldnd>jtSwecqD!bKjxb#piJN8QgBo8#7ErTxIypc*0*A&CKc) zoFE~RFr5wKpD81mKx(zA@;w0guK=l_+uh}q8ksoE)rxvyAVZssVdetOBXl|~IjE34 zBypAc@izqD#(ZQS)r_(WNWX4C2JV2ER@W^+OB2BQmwoR_zt8WgAGvGqF6k z@3S4$7(RHc%WAZ2T!_}xjYkq%t=qPZ;vxB)lL(lrhf4J9isfoZq}TcFw6~5>2q3MH zM$+@Px{M+5L(e>I?aB;IkgZDShM<+vRT7FPPp)lZizX%%+>)>(aZ#~_sYa+ zc+~xwm@_*Q`q@R;92x8N$N-I49`E13k3`CiIjYI3;j1t9fqdLR0uc0+LI#lhA;<VAB&$WKqGk789f8roei0whTv+0AS4I|7g%k|lfrL+mqv zw8K_blC}zXROQe-z7|1E-0Ve6VMiVPHenS9V+Ca87pop^ONA^TlSl(;tAaHj#iPf0 z;HwI-14j*H+i6E*#jEnzPm0L&+go&otOngm`{1z+q!e<8 z6jJ@U0pyk~mc}gD*kfl-yx*W}8XpOBrRIux#GitSfRx#ZyYSa64~+i_9?RS{AzZVE z*P^G@%;2cy%y#7dohA|w4v+{YmLazHT^y0MYl=0uM9S=)&+#SlsKA8T8v4ms zx+0Zt<9p?Z@xzN#@Q6Hi?sPi69u@3Gc)U*Nf&(^>i*nh}rXTZpfnnFfm1Xha>Go;x|6(Y zO1<0=32uvB2D|P+WM_;5c2{jb%JGc5a;WntKmi;HN@3{Wnn&AxA0m-PH}%S6Lmtz! z>7>;eWGs~-4;~T7I6-FG2RVXAp#XyV0~z>lvk6TOyKRj}o||hf=%UyieLyua6E+}` zb-QakVj+mdqp`$XG1M9I`0)$Jk1NDZmyN+8KxRl|B<-{jI4fiT zxuHRqS=h=$D$2G(K1OS}fW%!p?c)yLP4HOy=x8QrWThH^?_q7OkUVC%!ST*S+A^^% z49%Nf#b9-NY(Uz3x9CPq;JHa32o0oX!@$x1j%FcfD9XXx=MqRh6_S6?e?PN7v*diT zV;3CN1?lsn;aqYW2!E^U^n^-&W^Cnp=g#snKwcMPWBB%!oA_uNfMV*wn{<~5ue19C z`e>OP!`2nmxMX8Q71N-Frjdi^eUJo5JxCuR5*`6DS36rFo%Tr}F>?rxDUnsDX;N2- z$ON*IH@V*eOCW<~1DO&zP%TV_^b2^zZO80F+_{iI-bf&Ma;!~^y#S9FKD=<@!tp16 zuHMHqcjRu4oR2Km=t?0WC>65KkS)p%Ao~j0fXrCN4>jjyd2B#}B7XkahaY}+C^2EB zk1zN)knn=}_!rf|ya6@_5zB)&AR&?ubW$Rjqct{w^dJ{sM(GC?hDXi?2xRl$+hTI| z2>OU+q~q(`;SlQF2uW|^bS$vP#yzeeASIM4QZx9k)*c!m*Ls}}3fUuAro%_KUIW;Q zx^*fQi`34D-S~)pYEVJc&3q{4fEjE&+aQ0)OAvEXrG z{?tWG`gq~P4=?QA4UvgtExB(n7dQQt=NTyLxfBEGN4 zDd%nh)HlrGuUWiel=a1db2;Os%C+<0@F*Z*(_OmIGNW*Z@OqJ&N*gG=P7a9LUq?KG zl877`iH(`!JD2C}6Im@4wE`t2vTeMmiedBF6&N)R{hX$pxtEiM z5!IMTNR+F_yfN!kn0Wl~7Z;B27I+*To%DGe7GKvWjV+%TVQ`S$Tz0jep^!Y2_9>Um z5wZcN^A(n>SezPHYRBhBS83GkBO@hkJkPi*5&`rcGtiN* z?kL5*PJB&naa}+`TNfr>yygTca+P2l*N}ouQb`O1k@v<%zHki@CW&>(lp~AOd2r!z zrX;y8Bnh>BADDsUq7e7ZU>{u4hyZ#dVLCxY+g3nQs=@14qjw3StcVOwjb58;z}lPD zYgUnZg4ldEQ5CPrHxbqdMrVBtBunjmcH~1fnv17SeKw+{-b<_ZgB0J&d%l!VqXxWK#6C@UO89Dne_*Fk*9INEpy zNLslwB@-8G+EiUB14)?76=|>-ruDdgYl+;NGqb8?TPsZ@&bxq&gM#q4nDMq=h zkdjD%{HK2sj!-F|Eee}G`CURA^9YIkW3v)APdN<)VSNHfRsM=>xAg0!XgYB z6GwS!?;X&gbO;`cNzE4Ev*FR#U}uwA_UI;*klSuTbeJ79!eb~Td`V_u%RHiw97`LJ zI}PM>v~XB1S+wR{yWf?TqK~>RN!c92YxkFFuUYu+nLv_Jf@?9Bsyhsqw6}*d;+Q$| zP}eFcpSAuOP%|=^o6r>9aLgRjFd{!q?wg2a?H)E}PrW7}IddAwXu7aGQtlqfGbI0< zq4dq28-diS0RHI67C^dW=nRlv37;m9A$#@Z#*<>?b;w~30;$(ka~w=&wsK8aW}Tdi zl(V)0WVDE1wQWzQO*~_BP~$Ts78xHx8X{|0EFiT?#XzdL0)&20KvpgL>l=aG1dy*g z(Nkq>TzN}_r#k9a{Q!A{Mt5<#pMQUt2K}i5k)*$;ia`LEGf%q+LqMWc!Dm1pvqLXpU!QhMPwDQ z>oOXfVyW0B9*ZgrZ>+|zk4*-zrtB|8Mi99qQ)u3x2OCe39`ynea zo`o86Jl~Z<(r=cB$8y%D(eg-iWNidThH`v{Z0Z=bL;UG3sbqHHX4iPx6PS49vjLeW zNC~7JG6vSbjrl>rcJTewmBI`NhM}(!lP=~ zf)6awz}~9Qd`i>smcnm{og#P6EUt9;kQLjwi6bqrdF;aCOYM$k-RShsaFMLi+}3s!a<2lIy10o zL^{})o$%q&c1e@3H*(CdrNjZ!G=d{MW)d=qq-oqh`cseY*fCR0Arr{VLn4qK@+u%f zFkE(}!sV^u(caoe$FG^k#L;Ry^c*avK7yl4D1u2cX`c;%&1F|W!$Y?Fgv+iAXaG{` z=o0o$I1DloN1M-zSqnN0kw~OF)4ZYF6+^FZR$=B`?)C{Fl?e9|fmzkE9cW7}ov&tr zR8LM=dB`QZXy7;l&LYB+UF<5}CLd~E; z7Laz?TQ36PS< z99#fL%mRs>k-yeJw)fy#CA;2Ofk2u^vfl96ougydd2)D!NFJq>1TC227z7f_WDzn+ z+r>R`NQdN|_GAS>vuL*xlS#GLN&yrB($Z3`GNDx#eO)}Z@1)U2G}z0|UGYdhd>nlonVa)KHLOJLkX*UWdPv#`*-8Ah zayR2F5I`EmqyF^xf~$yI=@1{z2cdVCZ&sy{yxn>E<(C0+jm#uxgLNk_waxT5?0M!0 zi9*Irb2vmxB!94|A|{aSst|y5Q83Ne3ArS))<_BA|LPy-F@YrZ&ckQ{Sq@yRra=DP ze-@A|-HY_&OW1bPc)ljOXca$rks`Ku%toK*A@bGdn?i2v%;o8;6p}P#+csr|#AC;5 zpAA8cfXuGPR7bH0jl%H-{T9QBI6nB`fBDw8hKPbOfK&$Z@D)wO{_5R#89_bde(&Vb zX-AFur`P7$0vSsw+6HltdsQgI2#s~JaNH(y*#_lAFu_q%3&+$Qgmwu-9uH{xwS(`b zCgW{pj=Qz8hX`DEfk0>S$Ubqo<2kS10Y?lbX%%;it&%<>PcE33V@%v|z{GfO4IV=x z;~*(pU3X+8m0SVH-ulS;y_bLgX#z>gk_Ubwu4`b8srH6l#e^d|36RZ_NDL|iNGt)P zSt1qEJOW+<*_^r1OYVZze(^AY9Bem>FgrsUB+~0iZLfK9VLKnK(MPtRwp^baBbqq~ zfdH8jX&|xc%mqj+fK*bO8{9Vni9Ff{f&2@A1VnCiW@ z2Os>_A7evacaKC`AP)zRfFUAZ0muyzbpnY(2A0tmxnXh7=Y-g@iqGK_%VcECb@lJN zQ6#?&R~<|E@TIzZLFOd^tcwCew&RX^_hfR2#h=*!vZL+jG|J>^OahAw(+ zm8UtKCpj#Vh}1N!Y(?iukx0stCtR^%6pyMij-ZdKDCUWh3B=`>KmGLOdxYO>R#9Y< z8$3M+`-#-?>{VH8S>&?fAW|OFZoBSMf=J_7MQSOeiA?Si$a2|W8j|{lR~M##Hic;$ z18knD75>lID&;#2F{7Av8yYFl*j-y7ji5EsK3iY$(S%XP3sG3#0=E|Pjc@aP&ga8?4AQ4Ai?IND{oeB=BuY0dJCLVLyJqn3BUgt2$ z7Smik3p7Xsv2K5ok{k`uphDtH9Q zwhyw1G?J~Mf`{Ny3v^vNjGgxdB<3i)6jDIa>?0sIZ;J4`f@{?Xl?Hbp^KIlYweg|v zeCIpg|NhW3O&_smjN~Ck_JxOl#8)SI{jTv0aBRV315ymeL}CWdfM~UBL`Dk8jC!B5 z=Vv_bdd@%s9nx$bdycYs-<_3UD#@h2o%Ne}=YACDbhG))bwRH?IjyEe5XJ0{4Ij0e zsA_{FF^m(IcyCZ_>>-LeAtI0?Yxl^Oui?(uJ9py<$qz+gQODEi&xmOhXeW=3TCW1+ zC6J6XbX|CWL?V0MzyHl|esf4TW}t1E6p=XX4L};l;1Sb;N8Stj+#TZv@~`touhy_ubnN{K9eG>*>7 z^PqSJAjKp28AvR6bVzd%Gme=NFC?=eQVRLqM9~&N{vz8Ut&s58-w#z$n@7*o`TN?LhKww@*RR4`EYtFm7dHs_t6>2nzXEM z3&^Q6j2KW#^tg-*d+-QVYW!y98RmMTPJaMN(=IBhnm3;MUWZI0T8Kj0V=GsQL=s@T zm?$87%kT)cs3`U90Fu(BYU;iKkxM!k{AeJRABV_W&i!e*eBADpM@e|hw2g8=RkV%- zW4oK7AHM{Tu?)y=-ZP9u(M2SY41Y7a+}!qd!tE41M#9HD%3^tc`s{^+3k2D+4H5}| z*?pGT@dPs6wQo(rGRU?WvrFlnmp!S7Kvtb zh3g;jmQq=`W+aeTY(7H~`BEFu*k~aX4;(o{+#P!&@!00ky9BVAvpUR8t6dx*V`!RD zn#h!Q!#$69T-&QiNhT_DP6V^2PTmge_10DmB+RPuQQx)`H;{Mk-th@Cq4j`6+&@C% z2^4*mHUfE;D4W(uPkTi+ng&UDG?3_ICdgYlCyUmmO%Gp|NPb2dneIDl*^rlWw*GWf zlPYN-W5AFOp8+6!L*6G4iPMgEV6up83+@w1XUBO_K!z#5y}!n?QAnv=EG&gbZ14=} z9peDWL$%?iK;o^PcSIgjARCYG4bhtGEDrXBjBYS`ZnOpJ@UFZjB$tF2g!pMRe3!y`bpPBbjsbuN)S>})3yO%@8-E+rs&6^o{PqCCP6$*Z&I-a5%oc!6%Z zYp)W(Uo(%Y)p&8c2QyQ%Ce70r?0dnM~-$gIi*Y4cK9p6C<;gO>xTgWAl zuIva7zE@Vy0>kNT3yySh{b48SNV7ve8GyImKhUuuBhGR^b*3%=epMl1Sc?6_42K14P0n zGYknNpXIUv((56)F8c*5q;xKUtf1!E)-jGYZh5kGKQ$t@*P;>1^C`x(TS`El z!vNA~#+`=|Y~!bOC#=qu9%Y1HHvk2UJhEFEfixB~x?4ewS@=dOTU1~)2*jinKJY;xV;(F?j3Me0Lx2fgN28?oEEP$)1RxUe%ls;ksWD9Ca zA<@PykGBHN15uoT$NYQn2#v)fIR5(AzXnJ_BOqgPMt7@UAsb0CWt${2qUt&^+8jiO znbr)dIU_#$xnRY>#fCkV^Zk;ftk^@Mw2!9HT=V2@M`y z#)ij;W=K}*mD8OwM=5plCOpo{Q%ef9eJ>0u z-BAH}-BIJIpvO6JXvAXa)Qqoq^Jv30c>L@P7r~A%Vdn6rMmFTsh|cPGg3~M9ST`N4MSW2={tzw(HN)0P9Fcb z!fX7sc{Gri9`V`mD20R!%=dN|vW+2-hH?J0!KG z*=zqG@<$pj+?N80GV(&(DcVh5o_m!BPRw=RaWe9{kp)q2hV+#&Kq+aoO?#$)ZusPi z23@@e{F>J=dqmJc66pX|%S(3d-9seT;>&eyNLv(!svR0Yo{_}h)n6D$#YS^X*RoTn zcXDDHASb59<92}DPRKxdTx0?!7C>^0)RW?DTk_b#ngX&Ck#)YzWk9m*_{B`3o>Lrc zp^tcKiiPAKU;0@jA|dkB<=NTGFbR}#(Ko|}KTmA0Ih)*%vwG>|!S$WhP= zSwIdIklN_n2XZ$Ld4fbAC6J={8|kktj}gxNT08ZY(6mqDMKNncw-&)H*%;(zm%R0uMxsDu8?82K->$LV5w}Rd^4EhoZV@r zW*`CKQ;AkH8Qvm7WcDqJSq(ZevwY3J) z*Bb*Pzt}O2?VMwqJ(R8A_1W>*sCk@_fA$4lJdFC1SMFod(($>Ng4I%$QNEbg9!DB~ z0C(=R?3y2Gi1a`fW*~D1IZ=x;-LZMkZRXa%E=?M4%y3}CtNWHr`|;R}=8#>DYSF^h zRda{_W1yl9k=xH+gh+tIV~a?8Z)GE+ZCg=I6S{WuToGCGTLx0*r6}%zj9`Y>2GT_4 zi^LHg6G(aLH^k#xAOH0H8`}Z$?Ct4Ole2sN*E@SbQcObR!ol2e|CZVyOCgg;;u*}t zT@6UB<{1Q%JS17j4GLMcY+dBl2XZ%C@*UDhAk$;#`7yjTpTLO2P9W*62qy8_93eSF z?zBRpWx0n+rWwIJOD2#0N*3kB;1M9*MQ$EVq=D3&Yh1M*do0{><^?`s=OmHvc=T7l zIwt{c2jbkpG@9~cB_3{M`8bXA}@tHo4XGxL6B!*BbUB0+D zjzW5x%Pr#wRNi;NKa`#CZ#z*Vwxpp6&iiv|j z#@d0l4_}8#Ocm;Qj?RgrB;)lBwe)nSCZTbZW20R%V})|;(SCtIBA(rozRc#GVTkZ` zZ`_FJ%WS;#HkUES8Wec-G+mlCE#&e4J{xn$?xqPVR&(BnKrDVN4)X8+pXUV-{-i zro&LkxW>zQ$e3VwIDu3~TnINHcNj<@Mj*|jSxk4GJpOKI8#oq^%0uqdAyOI%E=XjH zM7+b^Cq>OBwiPR~n2J$I6Z<3$Wb&93v58|W0`LxL9SZ#0;gUbJVEXjv^CP0@4SWi$ zX)RM<5AsL3+g-a-%(<0!dKS}@aqA|4>U~}SB!4g>8()${1;^{69DIwc9KQxDpt3}| z!3T%T$y42s3Sfj{t_X0p2fGQp=wlKoAaU;Wkk4o|cLBTlQOIHr(xw4AKSUV{Wv6RLWC;o;H;V9xQk?MbBOD+m{Fyj|&UOs#8 zJA1J_N*<4_&+BhJpFlpZ9ekONtawINi}V6W*oq)~uu$Vg0UoJw+NS~en1IYKNCAni z!Y~3kz~g(Vj|OsA0}>qnQ9y3BL>|f=xOzs&e2-1+){A>Hx4NXANuZQS16ieS2Q~26 z2Xb2qq_dEjjuem4dgihXk~r%OV_Y(fN9KfxV;m>;ab-~+TJoq%zLxiOjuGJau*pO$ zFLa@BWP(mlFL~&O7PUDZiMn}I-g`uqY`bl^az;lnwTmzUaFJ7`{Q8pZzE?hb!)|zO zO5dv6L^F`)ch<%PBqGiK^FIk7J#KoNmWG3 z&kn;22E*>R~`oIcEsxj~= zApg+{N%1h^Y-<=g8IOk3tH6Ea+$w=|XRg5;$od44^?r^SdJ;A(HOjmD=>Wc3Q4Qj# zxMr_Tj{pXMj&-gpenI3EO?OEQQK*5>xzTg#QCrsB1IbEH*&vkUf+ptAo}LHCc@QBA zH<0`~G}e8)UcDRj?c56hXl7D~c73t-h)25>b=x$2*b$FQ0@pyM+1s!5R+J2#m{-Ag zJ3xK}kY1O(@G)#UJ086J*vmtMNCAlpE`=;0^VwKBih)A@2*}v<=lZytgaq^@V7L0u7l)@#xE5L2EL12Wn% z2p6vTq7g?H7d0rh**Ff{A5F;Fn_TmVL1e@*vCvHANP}qW1NjF31_qGmBh^B7Ns)oP zj5=Z}KJ3{`?ngWpk<_t8;y@-c6tWWHUZSUm{Zh!*T2YIAhU)fq_!N-OKGlHKXm&pd zDIQTsh1eEI;aFA*DHLeK}C%hxzFBMJ$V77|; zTp2aSs^>(vPX#oJk^r*#Ymd9?iljYzMuSLv@N8UClfyI-YQrg*0x0p#F$9v`f$4~N-dX3_mdCJ9H=uXzh0x5-5aT_2tXca&vk!|`bSK|5vSr!!< zHT($3KMbm!WjBbflmhHWv6N#y<<%6=sGsAMS{7$eN~A<{rr{*tlm|s^A~EJ{27%N=@rXGRcNmj~%eU884#{A9bSGB< zDEVk4Nrt;zNH9H#JVGPhdK7=nfAmPCi3G^Y{{WHucR!x{e9G*v4PyeiB`txZPLm4R zF3aBFvJGVA#XaUl7LvbGKp*1QI}^9kUT$nas?bQMcrO{ z&k9{GOHu~N9YM#?)Qo53Hzz69_!pg&azZhxYNZ^#u7GF?jhu*Cuq?)X1nHz{0ZDpEqp=#Wxs3zA8WkHNn;YlP-v}U+ zNPM;wGH)p^Z%v{xdnml)F-tRWnB^Fs97Ujjbb1pW)kr~khExwkYB_~E9_Pt{qm7ef zAn`n+Q9$ZMB*FaOZ@&$Yzu3PUA|Y@ik13FB&2l zhkqsmNN<45zO%0a(nto6)Uty|nUH)sfRsP=0$gtmkW?OW+0Vn;0pwrBVAm7g`J+p^ zQX!MZEFFqR8w%;zMrCa#Y}IJgNH^-9+xN=0A09Y1rUEozt*DUQ zozUQ`n|Kc}>5pvFp9YXrlnHZBFTms8VH`F!A8!}H&9Crn)q5nbD5>KcT|w*$;ZpDj zjb5$-i#F|1b84rveD`k0&AL<#>DCB8-sEx7Koabrkf&8Xr|*XVn>;xZH4Tu^@c}?? z|M)x#X@C+)6q2B(6msCM569Im(I^E8h`AVrkO)t$m^~!YY4D$kM%N2P|R&H)UV=l7&tZ{#bac@qg1F*ESxpwC3=Gb*|I(rWEYS~q|-iReGH@)oiT0* zko=Vah2#jSkfv#)A2zsb%mat)v=x%@wG;8W0+2^^pSw?ezMvB<6`DLl)%(xAsZ@R9 zaW9vQ;9E$hL}r4r;h0U4iii-(!^TppNu5=)MC!lez2}H>T-!e9D;y5dQ^QSgSQj88 z(TEcU+kM_Fz$h5x`H(oRhClZaOmYo8N-I62GpEaioY9o7i;_g6&Xr3{JU|y*;)OM- zO)TTZlHL{B5u4i4*8xbH%CR1f``Q_|1qn))oBCcGwN5gkL#FfElG04m{Es*d4)oW| zL-)x+;~#eJ=@W^^kGDID9K z!@!7n;+1bfr25J~Z->jL4Wx$|NME|N?GbJKx3cd5X(AP89|KO+2j!3TEeRmHXdCu? zAuusBdlY@_=msx@RQ*B|ct}v7jX+&36O+Tprg@xOVOoblZ2Z42L5ye{x~E{=198#287@!5aAIRF}}{HyPc8yH`m#RmYed~kna_{w32hWIAQQ;_)=60o`-ehGARCY+k&zhR@i0Jg zj~Dc+Q1cgA$Ck?$kcw#@GLVBFyMTm8mWp37kV@zPWL$Klk$yoLm(9Uv^7yo_sxglM znF6`fGuIRs-4ygF29gHSR=amqoaArpid$!Gsvf?(@0Um4IpzgF91S88S5}_k*D+F! zSlsG0<)SvF9Tud(Ouy#{b&z?SCwm1 zfzFcL5kECNIypSxCAm29WHZA$JK!7EB$sKpIFyPb1oKJ&3RbN8k3P zz8}t+TvdYs{O}M(69X%K6vOzLfbmMu>I_%5}qA`yij$a;?A106|Y?)M}o0$d224vp@hK z;jt?}4UfPEkIXa(NW$xmQPhKIWPQb*b#?Ww0wnrq9I-R>l&^Jtm?ZLXoIk@IVf-7z z6Z5F$NB{5t%VR4gnF<+uc2%p9KuRLhWye-#oANv^VDnl)rulCg$ny{xWtlg83%2I3 zDbG+4Tp+^s14LdPJ-K%jr=xUTT#0@_NJ8Wu0T~`Um@F%IU6x-VkPS#HWb~euNg*@s zL!E{w8-C^EvlTLcbe+aP(oiuNWT!$xW14v+(8eHAM?K^bEDg?)aM&KRaf!wPX&^n- z3cw9WtN{s;(KMOUH~M=CWdEXv6w6;iC6l-O6S=c5GUuAF!J>VJwSdq|2uHE4|IdS2Pu@G&QgpG=X@CcCWtDWU#p?4PuSJ%mZ z_j!EzeSrM^r^^K0ojVS$7kx(vCWZ9MKE*ji?5?`6ptjeKuF^`rzyKQUx-{+@NK8OV z=&03r6t;kb#RRft9-V~b&xyj(K+-?~gOmzmanDaNU#oeLrQyKnsV>6o31S+K(qza8 z23&@4ssy(!Apgfd{NlJ-3{{MSWAWJEdF#jh31n6QpQ7lJNuQw&7R!AysA)iwCVD_e z$O5tyav<+hl^U=BMs3ZtKE|Rw-AAafLrEGRAHmT)nm7ZQF8hf9Qj1XrfsCVMHmGGE zM$F5)tmDfL`?uEoP`7nMziX1Qq0c>P>B9FNxUOJY{X7Cv@ph~UAdkb*aB^b)6cL5H z^cN;(qZ&Sbav#;4ec*_Vj=Ou3Yqjy`9c$om44cOdf9 z-!tt%Qc?pA)Ufa81xnYJ$fqkysW2V4t;A=S1wvz;j&=g0~NM#vPjX!;ZU?whQccU3Z9z1@EY`FiE)PJ0WcC({8 zjvpd7_P)b_bU6v+1ruq@3;D%LJlaT6XX9*c}P{VMWletZ9ZQH z5}#exB=UE^8~WjuSInbvjMWr)ZJ#3vJQUqv7Ble}KLlA7)cDR~Z`}(ZQw_l{r@dOL zJRW(A->-hkT%-0hKr-QoCO`dXxOCpp^>U=mH64D1;78dVIK)L8NEZ|}>^j@!ZO)Jr zlc#1*#mym?oe>Wn-{054U&G+2*H&F8F6X>>V3{fpfi>Sj9``LTFDq!lcr=hseMdaw zcO;N6Gk(~)>zUb+B|`Pz`Wht_!U@$E(MifVv1<|_SC`-4x1y3JKHETYgiIhkV&iJI zLK=U5g+lUdB3rMcjAsD}gy(-oHr%a`w2>*m2FOVn%@lg%I6ce>lA|M4)*rslRp!oW zB#;jPWbl{zC=9KU4aY61kK&Rq3P|{(wIatC3?l8{ey%9{kp?7BBDjFetWS%wi^ft& zaQip9&i^&;`_A)TIM{3Mhdn4Qjk5*8HuWZ)yNSe}Wd@w98+&H;3xre#h=QYlrHta4|7g{n+v%I8|KWr~)!wwsYPENYPks{IZql+03KE z{8!Og$>o8={3J(HeZsvOQwL_b%1abdKR>O%`nXq8agBb*Ys{iz zR)_Tqu5E8^wylq&#SYZ<@X>RN7DtX$?M7pTO}b4Yb#$>i-|Ye;-1R@`OAP^&dNnSa zJfwN#4Ib&{WpgP<%+Zbi@CBUks5@hIm+^brjKNd$I6`3i-PYWIGsf;Oe#b4wq|4tz zA+=;hMd%#TF1IH|*2fbGMIrOD!fbbx<+|`+p^#@GlEU@#Pd|5xK~}ZfLgWr0l5g_k z?c3yh<~pkch7ksIaXB7yrz`Sj2;>i5&>6A_`rIh%I6JL9r#QIkcJ(KDjy+e%QMmr`OuX0%cqc_!pXVqyUK3Q6i zXnS*WS~J?#K&jDqvoxBw<18EI`!_;6s~d9474h^ z)=CP6)}$X*zE-|bwb#~)uhnm$k_+9g{*9B1eC>ZBkN}yTj)~*LM1D4q-%uetfyAny z1|kzkBytkSKg(wE371{ckcCJCnF0xrKQv+qB$zn{H;{Rob`7tMkUo(>#$8Lkyde&e z3FH&SJ~oBChUJxXCmw(N(Z~PxNd_kPGb2*+`k(`c8N$7I@sffWw}ks2wIXdyx5Lh5 z4~Ej?p4>(=y%3EA9^qF%E+vwJ> zhk^8_6kC?Ene;DXga8?hj}gomMrFjkzh33)d#=myWCtD%Bt$wN4vH#zslK2Scsqb> z%P7-IAmLF!a#xbg8J@W19}KfDlN8z}frKsr`6VeNC>Di`%($X#fHaYuAzjJNc|-G9 zfSeG=JV91xNO;uY5FC@o!{(9R$MD*A*vjmvZJh7S_#}ah>%ZLd7!v6wUBk$$3y84; zI?t9gW<37rqmMrRHQY0hTb&PZ5P0R4uO48ahuv%2S?_XzK`dGyWjyy?#Z+^Kp54B^ zlr2JQG(oOIEUz7{;q8%bB)mW$>#dReHE*r17ihFw%PZX)oWbLL^C&+}WhMh{;fP5f z9oOKo*)`R)oB||k2E5LKWD)-QqdRd2olcfHdov`c;Tt-G_4Dj8h?_c1`5+ZrrdD9B%Dh+**Dqb_5q!Aje{{YB^ zM&Rgw+qdo>o&MPme(-}YCy+cKg%4ZunC7Pi$f|JY6yziD2$T-96Udl?1;zp-Kk|2; zf32F&syXbUjsfHk_xWyO0qK_U1oChIsgj~AhmuH1Akl}bIX*=ukgjBlTNk=bWHrTL zKRp%o!?V`vFS#S)y2Y z{NX+bbEl6L(m)yy%U%?Zo|)#0gzP zM}#dNXGH%Y|3S6mmu{hrch&x*21y$EcoU1fb#h&wFKke9(({NcV%b(nTe zW`r4{CDdjCV0DqUxpZ~BP9WcG4VN|;sPJXRzEc|@QOM{ShsZE^Od!?h7`gCohC;e9 z<50#O6atdB1QMfKxzI97eA@1_G@eGSbKUHaj<6nqH)0os1 z0?V@kqzc&{j*0yfF4H8Cp^-skrI2`RTL77&ia?sj=&dMoG({f;qz{LoP+aue$>I6%7n9Q1t;1b^Z2%eS_3OdI1k z6mLYL|&!G*!HHm;~hB-`|WIv_CbJcktbqu5KFk1%1D_ zw0=`NumI9ThC*V>Lt+I=j*wKT(L!xx7O_&u1d>ojKziMuE}qScxGa&{)I%dK;mppp zcLDVtKpwrTZ43Ov#oR2Q*81jhGi%wez4n4E#qkB>_u1yX%*OG-;h2nR01+HhAq$Z1 z_A!kz5=Fsq0;%-?)%e1n>LV6&*;c4Rq|ICK-%$mEgCqCN_VDyoPvxFp+l9iRQK{S|F{##qlPk@oaxSmN4p@w$aqDoLo7o; zv)Q6D29P9$K-YQm#kqB|LIcV%zICB9AmSZ#daXWjbyuU01YcA8$DASUu;DS%;O}e8 zS$0;yCOldR?ap~F2Kg+Zj@VRro6Eg)yWOXEKK+ziVn3BoDzqWYCSq!Idz$yTa`kFR za8Dm9ZX8y*d$SWF=QojAKNiEjA>nfp(4(&WJBdQK>$$?`5gP!f-^CtuW6 z5@{ggZbK&<6}sf^3lAh}d~qfhO6yV*-T!b&8_sot+|2&HB|ux(@liYiq;GpaUe~oD z;JC~O3xtnU2P5Lq|yrU{U(Maj@)s( z=*}~pB7;Zch-$i&IO4seat|g2q;7cs5Q+Ts(~myl-eR6YBpamL^NqdP`5qxR$H@O5 zkZ}o8F%%LYb1^w@`Zj>Hv*riAS}pHF=1onw-qS;K(VNcp(Ehli%>efVBld!ckcQK`F0*2UwEO=Slsh}DVoRw2AbxP@r808bluQE%6OkqO{I_knU)MEkPfla zW2ZtEcb!0{J{5_?96dY42FQ!2$qWIc%-udwtf``w7{b9bAXS9f`!meO+@dRg9sv(O zE1z8nq&qL7l@cTSc=7V(%g~Q`g>JNwtIOwtqHB2cc4vU(H?4$^76~k?ZL>`}13BeG zEK1i~pxDtRAiaKTj?0O+MystpIPQ(dGYY)8!emciDaq69#S&eQ*DQJmm9~>sQH|kr zl;eN~fy5F>IwEi0@h#f2aNX2z-tY7EnLQ2+qqz+vG!Kyl$g&A7%`V%EprJ8MJd))R z$~*$1&F|gx$V8if+@b4^M%?M2LnNu63rDkIR5^;AE{=bx$Bx}q*)V{_TPJlz4gb=w zJbbyB){agr!S#8N1UDYr@|Z-5NduW3<0jITn#lT03}l0&fGj*#`uHP&%=2O)^0Cy& zBoaO>kQhK}1XlVOiAXc4*qDA^O>d__R#(?}%u76Kted_G#pn7N0r|&xC+<@s^1V#E zncIp`<;#k-k;nj&;8{H8vI`!{m53TVLo&UTT(gU;CU2@zI3S9F#~zilCbze9zdHii zogeczj#0>|kN1z~14xy!mB9%fDQZ);c8|ECn&1&XuD6je($+L>b}j}3OPK| z2P}!?9mPUr9;eq%odr{Znz&+xqfai9i(?OmAPk8lqTv;JEZ9Y_SjD8~1(U|KD#vZO zw23bqHXxeE^xAgWo;q|`lSfD(w#P0!W=_1QBRD3HKdPnC-yuLcR7aI5 z)HnkPkU=DaUGDtxjWv7$LkzWjTwMd*w#Op1_yQoEfg~@jXtz7xUtChFg?Ma?r|!>= zIYCl!zdwsu!lV4PfxLmmVqMyOZa`i$kCL&>SHOR@seq{$(>+c8w4J zJY!)!mlJ{{ILfGI1Ee=POC!@#ROPTU!cKQx#4*)TFF)E>1u$3;X&}>UXI|VXpGc6q zDI6XRByYH7jXY>ge%y}e6J%Tx>sGTPh@ZVV0(l@~nuP$CWvua) z9(VWl+QVVJ-{YQ$3drvnNQW#jah+QqMdd&Jv!<(gNvExd#tvJ0C?*Xg{owCv5iT8% z=V@_bCjvlf@OqArZ}YZ`(mSyQ{oS1dj5zbhC-IRi3^Z8vG&+jwmj%RiZ^JPfs%t08*!LJ+psYn{SXD z-*e6fZI(Xj011KER&+-SPJFc2tzaH9G_Nq}1SKXSky6bk-c+t97lsC6Y0YVE}2XfP}~}7htM+#DgX-eK$I1myMZ6 zsB)Rc`glM*RzT9rgGY{`?$d-j>ZHT~F)n~-do*R%c1uMK-vYv5nd~$^`_eK%cEHi* zR#RN~rkuF9-J_7?fm$kz>Cb3%`zyyqSBn-O!X2$S8@5!W8PMZEDG@fido$x2K-Tsg zY44GZq(2RlLT-7HE<7?e!!vh1da2x=50c30kzg)juhZO_q z<_bG(YBgY6QwIiRZgoRW#56MqBse-BM zN7(M9P%ob@VQ?$tG}hS$;;tQbR}Q#{#7HL)vGDW#Y2xJA07F#F3YWfGjRMkj!`Fv@3nQh!4GVscsk(NnQX z`LsZE?YxYoDsKFNIWmjjh}*|i!xr6*ND?vj5QSs)Saao2`e+^* zT_DZ|!{5tW^IrERjnp;aO?<*nKx&dpS9s#U4P?_mLZm8)8%jnJU<=6KeRAhRSYBdA zr`_M%!vT!8sA&I`xWqt)M4HFkXol&g4~N+R>G1?hBK( z+6s_S%dT9uEfbfY17UYnIHD=~m?%E1kdCsQ0ZJg%3Q_e$`ufA=*5%8@CfpSQkqM-0 zHQJRjYaKn9E?YrQ07=lo&!#{+6<&>SYZiA{lj2V-M3%)V7P7s4Oy30&a zqjo`Zdem;d^ArWAz0aATx=!%y$r)6T5T>@*ZT?>Ap6=c}K=zy%2h3rs?dnQbVNAbO z?+Rpq?DfD#edR->lGz$;vB%~LN-$(^pw!!?B%n9EYHFm~k3>_$Uwwd-@x`0FvJX=t z*+=;v|0IZ_YMfYx(;K^2m9e48TSEw#;u?U&ATgGh`j%^m^uP?s9~6=*4dt1qe*usv zq`dx5uSp^aue~khs1{KuDSmq{Hpsc-L>j5gqfg(r)v)U$WL_rs#giv`|9Y6^Oy7j*kwvDq6@Zw{41sB!IHEUj5n@mVq0}YXp94-yLfbGjrUQ>AqR~- z!D&0Nxnd##k_FN?iEH@JkwmU`v}%QJF*p;Fn2<~;eVT+vfE16u503Bj_{{g-dY(Ku zM@YvqinY;7PtLpg{L7i{ooAgz!9X&m*Mtq^*7 zkV(Io(*Uvr+3@((pFhQ2TmfWp*+kiuMDk8yxqyW(~|XAa~Gv`i&0+p{}@5Rnc2{?bxGp;<#$f z$5o3_9OLw^-s#fAZA#R*>j5B+NPBaN#348Pbb9GpgeGBh4G4R*KRD&hb94_Lp_T}H zicGk}>K;F%qK$!tXMx4X-TG+hh8i-wJ)GVQ@DqH#EiqO_noahXN;h>b4UgZ2;P>Kg z9KvY79zAdP1r*Y|oI@c0 zD?sw{l#oo9P0KhwJM@v4Sdg!nW?#lM4}0tcl2<9@ku1=Fq`?G3caMw9=&x8%hlOe= zO8eBFF_77y8&ii7jU$khrse7dWE8C3SOJ7>uZWg;W01oi3=-i{LP_kSFFADtp7PH_ zGC^gN#pyPOO0Vge8=;Fm^*d@#yTfxFt_HUN62^od>c}e})Zsk!amt;KbV^7dT|{hf zWE>)pAAlz&fh4d2b~cx85CWOF$@~>%9)t_mqp_uZ>fY%*G#G; zpQ1?uAo0I$&Q+NP8q-ANBLJyHBns(6WZK_^raGqie8x2J_^?2xQ97hHod!(-B4qNw z3!KINJQ~YmHW46It9b{%=0n+D4?TfMMDYyp6TlncYajCj#2NRI4Zmp%I$4(p_&IFF>uhY_Hn@1Z@ z3YP`QjA;N8fh;B?aDbNL)>BxC8jnf$TiO8Mtc{lMJ`@j7Z+n5@`|OA zLrgulbL&^m-CSQ%&3a@Wn_dd=encC6&%bmVzf~osPou;AnKAJW_Cb5T-QFY4pC<C1Hv+r9&>nmp3Kj5R03G2gjh6OdmiI8N{wp-ZBd_MlQm0>`_Y zeS}n%#z6k(1X4cRbB7wt{sQPGka;a4KT(40;;<7(NGu9@Bs}(Gytqb_$4D#}M+(WH zO`m}{14$+_Br+zrgU19?u;H$Sn`_w%UUC+}iPk8z3CH7Jk;h~JIqPT}jjV&Ma8#d} z{I)G`E|zI^6ypd0IgLQtkE)~R140#$!jXzcg5SP}wcLHH=VOd+Z=L%PPcr0;F0_fg zn{w7n!V+$yj2M3!F4@b^+#tzaN&v~$eQk+mi9VR&wspS<@sEIP_PZQc>--o}JY3w^ z^-WDs`QeqVp@5v4X|y^^G|?iFFKO{|j1QK8+orAK-{cF}kDtCrZU=tj{CH0{jsT^* zDL736q=yP`^XQc0rIkyY?xqhOb$AqzLXj*wc1>5(IOFqImPgZQ9LedGS*8{P^xUeVbw!VcS05b;dl9 zjGH;J;r0-NN~&VIS&1&(IZd#%A&Pnn5weH0vZuSNH_f`Lk78WIp@S};(`eVY+ZsB! z`7J=UKj;a^IieQ5N^%`V(;<1oEAwvxr1n4V;)r8O)rKY{nk@l29?!Ojg>=b$Z;4(r z3?T2ETj~UmH7?V+{W@fvz5bGtjOH#iGR!UH2_)RI%;thQSNBt=CU#z!~2}t26A`6enVNpWUr`O67NQKy1o$FSg zN6cdyU_Pa&#z3aa21yJc|IF=b5oF6_Cy*(TsgT7K)L;!`5?!nMVgN2muh}#eygInLc9$2P$M7`{TUBcWQlo~*B@qokVt8#5 zkGN^?xENs;+P;BQh`q6)pyrIPhd-mpX8oqcd27%kUaHUEAI~;%{taUI*1(~*f!tm1 zv<2jm8i}6^NaQIRXaywLxz8+t)T4nUs)0w{;&6>^%!*<#bWsaAva9EuK6Eg{xE449 zq<&$lX@v)&?F1m<(fXJJvi!BaZSKV{{?%9h2lbhd$Rdz|VKHb7D>?~|zQ4=vmlTeG zgvVk!MDB}rA1fp;Hh_#NZh-s@mz_A4pvDSmAb;prd+jV9>daVmiKBX%tRyqeigCB| zz$hzMY6232Nx==-Lfh?SLXCWn$Ng6`rty-gS&)o~Cigvivx1QI*QJ@{tbLMHzzxai z!XuF6LIz)V*sGnF!c|6! z)Ki}qjC+1#j^BwIQI-@~Go)@H#p48!R171a$r?>{K*W+pUMkC{=26Z!LmE6b5%wgI zs@6cH6Ol-yf%HQFIhhwvi7Xk&Ng&0LEwF?|yIdZGn|Z8&Jd6=$KlaMso&d-bwDagY zv}MIa&gjpgvRI9A(Jl^X9`h4dQa{Rs%11(+n6!bU!*nl?HjG-556RuUY{8=op`VH- zb1%MnES&afwfjx=>nOMpiJth6_x(Shc70RIiO>#v&*Ap_j+GU!Q@-BHKA)caK0*nm zIflqr$@0+rv&DwojloE}FvvIQZe*2;2Bg2|XJ#6`VSRSSVG|C2Nj>5Kxv{x&93X3r z8fmj_8oE&{b~}4Vl!+9HvBeaL3?S8qONCIW9YKgd8c5-_MpZ^j_AcC>V>$tk!}Pk7 zVg}M@N-xn|Qum`F=9J)p?dJl>XJ7osFaEW!&@_+_%46Zr-uhvKEta0aR^_q7VSk=C z9zr4AqU(ixgf+x9{DfW#kdCq+mPqqhfGjN)!DX=|5ZEk=eDS~$^9hho7)S(C12x9c zJX#;8RHhM;DUjieTZTy!2+Hpq_sRj51<5GlWZO7ZM8O?P$)k1Gg>LoW@@F_wSN_N2 z+UshQWTucaqOWDb3NSc^Lm^+ zwt8tLR+;(tu^d3sf*aRSz+(dGc;;Qfm_TxhWW8B>Z1aeTM@yiQBrrF90f z637b3qL7wI)~RqG?0<(yX(YzEGhKE8(h^yC3>*uP;Fgt|qLiHfc=V-S5=5b;3fQWu0Utf zl`+A@vt$!pHB5n&#}^iQ$KtY;_K8Z(!>7oJC_B!F2W&v6 zSE3P{dBhG?-yt5|Twx$J>K}z2uK*CSn1J*QtUG(;crmwyD|n9kvfIcWp>`e~`3z9n z(u;$ni;e&ZivX#NkeH?yI)`U8WvKmUa|8KNyy$yG+=M9^VB1Ga6ani4$2Ul%_-dm3T|8_YJaYKJfrCH!84~&KO91&a>z6H&_-d7Bj3%MBfQ&IN zUAm4Fw%_JB$kk>9El0Okr`I?s9PvoamG$bjW9y@^)ji1L7Nax05i7ux|m1~S-QAh!q68YI- z%|7oH4}-=CaB{*R1u`OeqRf60wDRkzY4<;DT&OHL?whE%bOl$-IeMhuv!4= zH9+FdGqRzQm>xl%AEv$yiu@!vM#3DcYKrbn(HG$%B-D-E%#AOA5~~QeSzTGS2-U)=tg~Cs=IQDm^(U`*=b#XB=@L`+zXF? zEyHKWdS>xhBvKp(mk(P4`3++1JVF{s6jGLlNX$S&qPAgP+p2 zT<@^b<3Xz_Vfb2Qo?hQtWV0VZdGbk~XOs?uq zJFaDOSmBN^viJrmG*_;e(0`u{!u{kBMBr5 z35^i>;)~e_=}VEKj6D%zTN#r}clCrm=8JixZ3iG#$DRZdtAKpOE<1g;ag?rFRtu00 zYl_pJaN9IjNdIub5R^bl?nrzmkd9%}rO)7Nsh?%{din6wV)T9EW9g*M} zLcrv~6R$i|c88g-BPw}E*ppWv#(g+cy4|Ekp1IF6`FrE&^)xNdgJDBXl5W4~x!Rm}u8A6OwBr;L1ElI+G(;P~Mix+WIMB*al~nY?_?EXaMsBQZP! z)}0={cxjRR_wtZl4w{Gtly24+DOl5Z36N7LBmw*$k&Oa(y4IJYpIt!m8+`dE$8?Om zjz<=d&q*S2+TVR1US3j3k(H)Dc0VptGYO^kOCFR2l<83U#R&gs9 zZj%H8$P4SrhZ6t^$yX_0Lu3hPL5xf{ zlOVd@Vub{)1TuMq#spGC7KJpCSOJoD3=WZ=%ARZ*FDhws`iA{%KQ8MxMR z-E5GwiASyl0Z0*v*G42wWc+;c=#4%Zqs&%3=H&{iQftMHQv5N0ED1{Sh}!f>iqmhW%QtU8kX~aRh}FkYloubylPf z*0)$vARK8fs_lPl>cGpFesb)!+gej5ARX4AkpOw}ZOFNfV8SDX8tR2qtPSKQra=Yn zCR^U5lHWSMu#AVe)XM5XqoM3=_-ue=WWhk%-mZXr?pwSBk(?i8&P1lq&b&`r31*BU zFMgu7iW1W#kiaMljReT20MdCMOC(Mk%i@lKjH$y(jWm;K2_zeLzRIf5Cv&o^ScyWan;655e^0W5bRW9A~O0Ys1Tp(H&1*Jo3IpP(Jqz`?N5oDXX*kPFW z7DH&DDDzjeDf_s(BRyba9F^8YC^_aWFZVhWq7f_f(G?j@Aq<#VHBKbB<-oU=)Y*8R z-W@jNy|Meo?m4)0<=G!y(Wnj^DiTO68Z2}e9S%5ScGM1}v^ibo-s#tJzd2)EMs#*c zQ8pvrgxYxdR%dIm)nx`;v$p-l3@+pltKFuLzV`OLr>~y{Nc=QJ8c43LR-yZOcmzl( zBoZkgJFA+mW(g+hNU?B}ljF)V@6-{%saxkE@2SxhrpiTI``JM9Ti=05 z1abn%Y=E2ulGoy|%Tx5R5=fzCfi#V_BoZL2L!^kr^i%HW^&xVS$P~$mVJ~+3c%Ot$ zj94gOns1n+&j)(|$fykF4%`3|B*SMHckf;JG7^-o3O4c#d7RpyZ=V=F(+j~YmvHBaQb!xlMAD#RJKYxD4{O`)o|Fm*5hDe=fu)`%pL+9R&e zyF(r2Dk$zk=B^a-7joR<^ZbngK-%JdLvXY}3dO+)fm9;BLkXPGZj`vMeaW+UY*uKr zYcn5DG1Z7d@)iEed!1gtHm)&M1CZS#M0!)t9KUq;Uyr@^>bn4Wipn+!`rgb_3`--D z+%L?23ITZy14!NL(YlQG-CkSbMg?WTSGWOS``Gqn+%!01c_=6Qps*%$;;$;CF_5QT zeDUnF0QsHoJo_wlnz(P_GfOpC;ZQH-xquXp|0&Yq@F*aQrPIzs^c=H6TlS z8dDSPT5Oh-B=4z?-Wlo;IaQ;RXa*qX`R}hc>)o0A`o8qp1mOoy|K!r8yDWvervMlt z1*8sKx~AdyU4Yesls0q=Zl8IQsJrMB4336Uyj!y`ae zGc*ZgSk`Iceg*S5nHrBQWKqQlEQ{~8Kt5%G3@aM>)Klsj|58X~@`zbivqMOJK97+` z(nJQ66_B25g|X5LndT51i-kThhgbnglpQ|%gf5s1AdAKFM=IjkG#=LyBZ!|8DYD?qx%JVJHU8R~*|KRtpHBE>|2p2G;=Mnrlx?V1w!tGSn|lVm7z2#O6lEe+%>oZ`i&X4pd65Rfy}_n$oU&c%zrzI^xRuSSY6 z(mmm{xq9%VPLj?->Pj-NuV>q!i0t5tk;qGzE?qoMrsv}JX5Ih99W?SwY-sz8Ge4Xm z)qw$yJKPrnj{r#yQfbJ4Odz8>H~qD(0LjB=D5M)Jd>Ay47D(9AtBsFSAtxmAkB+`7 zIPzoRw1s36S!9y8eIx{N$eHKCe9cD!8B^H?@=)+t6!OtWzm7s0$iib`G8!T|R2s|zb zO4u=QUn5yb0m(-mWgYP0F3qj1d3b{d$>DjzZBCRo&!5|c#PdRvHe434sBJuNDkdW0 zwT;9PHH{3nT({VpnNdJ39J+NTuLp{#yrt#-{xK=n+ISYfJtoXiUaQL|_7ey`vHzKO ze*N;x7ytEVKYxAal;UhcYf9PSv|q&#$)5^H$=sSZ2XFf~fHS_pdGc~SHqD$~U1q!q z-=e-f9!Tx#*X26^0>~Yyqo9A$G#bY*PE@i3$RdzYk(n?isw*HRkkzVtyWZf@K=L9g z0n$+oK$03yiA;g?-P)RZP_?EI`7n|Ixw7CP8BT&Jkpi*ONN@}wF%=f|WdnKQ@khU2 z0r{k0#_-oR=(Iw*0oMw-fDFflo03QRBv8oYF)otra#VCCLyeGpRVg5WSlx5TMcLQ} zH+Qk46i4kLCV0dRV*qu|yYB}$aP4)zf%+Lp^5qc8=dSGHm_;Ns8ohP>2^;=H_~<6i zn?J>Zs~tZB54!4>nl9@}YqfrBS<;N~E~#X51kA?pxL2E>ZF_#UGdD!@0di_TF%4%- z0ZFc$@(qNl3h)>}K6dEfJI@@3$Z16KByo1sXukUr_htg*_uoE6wc9|h8Ay*4a%9FE z-@ZTy$E4i?hse_uu~+>2lYf~FB3Dq-XtKynJ`+GH#&+Eh9%T>fW2qGuc_b+Lf}kW| zmh;uh3a7uuaSrZPAx*3Ro3F*#aomS-?q=LB=RH?$VtwT zj2zyhaEJlqoH}qxg5xWW&5`W^$aiYbNF!Mkw~#ma#gWHx&FZE#^7WumC&;rea(YaK z%+3mL#jSWO0%;Z}^$|xcD2=6o)YWi43xZVunO1u+kUESaXkObN80m_SrqoC~&Tg_(ywsLy1cu$A0Ger6H`YTQb_+^4%N6b;F)(W-rBzK+V@YMC9o!}adKQP zmdKd?#RSqT_Pn)q)zxaRlhGxmH7_j8Nf7@E{ck-|VH9j=$pFY}BJ%9BXP;9z6GUcA zQ~Wh7${voc{bCL)v&;6?a1y$Qd32oplxJZB$UjxcFY%L+`7zCjq?s&GV*4~AtwW(* zc5Xo{Jo;kyym-#Yk+O`G&({s47MA7}AYnNjdmw5&xjomH8{>&2tS7K9{a7(t0Rc{v~U zo&z3v>5j9Fe9}AykpRh!A0#%shL+tHKtjm)!af&}fG58ZiDWCGx=hBr?oCAUJ2*8jci4D) zfQFHcR1dil*jFx`e{flQ!U0k(;-lL)rZ#jx6eUA^GMC)*0|ZDC#ByADO_l#u^Dmm8 zS=_ULL+&YSS!C%*Sw9;vu#xYIe2v)olAXPk!)OZ2X zUzpcx%Wc<)G?b>&29V|vicV`lCW_V>(CF4A0m;?D5n5y5cqV{Mmu(==@Woj~bW9UK z>QbBexaUSjRS=o<#(KhO)fiBolbn898vZi1eB?_(df2K6RG%3Fsj4o&B+sVys@oaN zK$%P&{!zJY-{J<3Ajs1JA}7i)gpeI99WV23J0(A^|Bw6XJ-@!fH(})Y8uExS7%}5c zG@_cukkU2710z$!42q{#+0LdE|Jem~6v<8Ro>e|vA_`7#C z9*3=a0F^1rleq&!BzHl}Ay+;2H8E-;6UQs&(U#p62C|kA?+3DOx;hgcSvr~nu#S~Y zV?2~Yq=BrZeN3{nRTs+@BK;i-lLg8n?q4J)0b6bWPcx8@G4YrcYUJ?@<`krj>){~r zpR47iCHccDQht7IfRsZ<8w1IRSujbK46VD7At z;jqmk`UsD8BJHzNB2h>uAcx!hkTkgrT10+NOBp~{Y$4vYf$fA#Z0!b%D z;gL5~jz!MZ^<8$kMk$cwgQAds5$zSfE~Oe*cr1~=d=n%slG#w1I$4lBqK=5coU(Sy zP8JR`>k}gjcGw0IaFa;qee`9yZ`?p;@h}$VH+%(r0TL6Bb_Ol_TGHl_xPcgb1V?WxjeClnkK}0u(Kd+n%rwH8`bctoRkMPO%XZvAM0rIi z8PEW!==hyvZ2BgtAlevsTvXEWoM#W&abX|_8D{Owus50GrwJJF!ID92D(5Y&-6PO$ z0jP1+w-u0x={O}rT>?G;kqwM6XGlvlRH^3}i}-yV1KarPum16$*u{7G!3BUkxOxw# zeK5H(&oTV*TyOF5$+34EBjQjkD`GoGhoiZf!fVf`Zru%eeGMS9)d!Dl7-i9bMo<$# z_UmIN!|MuJ{H{bUD$+HD#7ISEn4Q(^N+F5Vv&5rFTOuhSF;@8r$wFm?d3qtUAbepP~Uv3)HWt$p4#(N4#Qj=aOLDxjs7fSBPqsw7SL`kIsBuT{1 zvi7C`BslJpx>~Xeomm|-+B~cM z=}lU95z`%9;dPTwag+o|6k1~zRIXaRQO8OTMO$;%(11*3|jdbz{B*SmxxPh`TnNoQ~ z!S0ZknZaWL5-WFwB#{6~leobwKw=>2;O1BuT)Ll9V~Ul5)c z#zUmW9n^#}mX#x3)Q^374HQO)44>whG9416uh0tRI48FbR=HGMW7Qf~26N zAJW4u!}hodwo zBh8bSU@N2sF)#u*4s-xU6;1ZpZE(B&`E}pbjtNPO-%OSI+LDurU}&%HRJjT=JSQSY zpU7VeL(MyAJ!HoVA_8JmV$w*y0;f%_?+QdB zk=pz7)dd4Nu?JNLYm<*|h{!q7Eq%=9(s0|c5{b-#vt{0=i>+Y?29i<@CL*1ItSo>m zlU+Z{_|y)N;8YYckB|mZF#5qSGWl#=HpT3$)C7`MGBQO{L?)7{lht`LpcIhfZgGT2 zOXLrF^8+M?h1-TiOCRq6GBe{gLs>rbs%M`h<+QyKjmJjRvO6|-)HH|#8d(oYy^xf_ z;uYl4S6X~#AgzzAv-{oMrP1|O^-nvMmP$&K zwFqF9ja0D1D?|Vgu?0Y`F6xhi2I3k|aE3wsc-k2v6i)XjE73wsqFJFPvWaT4(0{Wt zJ>$NLHgjO;sbn9YEg*e5odp?)j-fXs5(ITr5WcMz5{VF_v69GW?Y{VrTv7a+PayK% z)*kn^;<)!jBnuJekVyCU_#uPqXf<8X`a%ji0ptNda>1s3_W1;o9HfBso+*G#mz_NF z=CQ)!vWwG(s1(TmXduBTJT^eqErI-dogq^qjbtUUzYZj`XakcZB{5%3m##agJfc)q z0kYVA1DS1T)j4ty!)1hL*ZY$fulzl$^#Q0Mra~ z5oTXL+~+=KD!Q!Nm+M;;kK|`Sa9ooKtpIX>1E8?v{qS*=Ze(P9h+Ghak?UDy47WuA zQQxuCQmBn1*6S|i$xTTbczd;U;e>(R^p@@1IaRxHPQbQq&zR-C>JYGFOBKIKD5_z6W7sO-*q%ULV zv5IO0W8K1Er#YOlg}}M>ERT>@#xQ@J3RxP^{+o&PxA1oX$;xe8Cb0;)W7Q;PDh(vv zKIyV^=@dK~NW&OC;{p;J5|?t>*<69aqgX7Kxu9yVbKIz{&Soj3Y2;ueAX~~+$ky@J zl0=f;>U`kYI6?Xh32%I6NzG?;R_K>TGE7x%gwV+!=Y6h8SED9vZ26S#?xgg>7yJ5Q z;8ZVJ++M@bcc+J=CS@;uYocemAff?~sQH4H_3MWDv142VMg2fPB6@=WIXuwdUzE0J z(4f}Z(MllaA~`=|?M+2))O1eh@<$~jiPY6+uI2j+9q?^&XjnkDXRfpA%w-jYHERAL zNq+twKysHbB02i>md=r}$gn-jn@uN+SU`gs_wp*|uVrfjGM%<^J(RNX*}qI8G0(s{ zsOcvX91D}cB%BPBfjpAUxmDq>Fj*9msD{)yM5aa>NPiDwolJtHBOH({7dmKz)e()o zcmt{ZG4JmW-?F>Tf6koG{j8;*`lk9+T2`Q5y+4?s5VvYMvb(nm3FA(0C~(AoH2QE(quGEpp4z= z?z9SrzJNrLwbw(VlV`PNqfO*tm(6e2wPua8$~!f+O!}Nx8gL^?0tu0BwIHs!ND=Y! z+60#gkM6B~y*9DEfjW|cXsIheaB^@&g+~HM91j7PvycFZm$yP%A|cY*9yeBqNQ)yE zV2966Apcy}2O9NS1=((COdu1_jbDU0R4VrPTssz{^X3^fGJ5J>7b@jTKQZ#3ch(5VS8uD90qo^!s|knVEb z@3qWa1n0AP-wrXLog17?ykmMZ3NPAQM5O)K38b%ndZ|l#UXE!Jh$ae+G3-lo1ti7o z$cZmN5ZNUq!&P@U?(Yib`1D;}ct>z9WtA@wkRG8{3ptzdFJ6#D`gUt&a@HBbwvcQ3 zb(sQeTDvl61xORAB-t9ag+f9kxgKT34P+4M%Uu&l6WOnj6_Ul>MuSAI2q=ZG&w-pA^}9i{FlzqW^lRsz%L4A@>rd#{$D__)t?(V{fw^O#q$YN_q=q0B{ja>weqze$p zcK~vjWDh_N480U#F9%}shtjx!TqSY}AQdu^_HGfmkMJE7X2;KgvZ9v%Fc!ui;oOe$ zMEgFR03_!<`Rw0dq<$=sPetSex$d5vHp5-CI}r_TV)ET-vj9mk$A`$#wKzm#2_*J5 zmO#p7n@0l~MAj|cbuuZMY*~)ZZt)DV3y$HmQz7FJX(9zAW|8F~MAA?Okg1cI3i63k zK#E7Nm{K}2cuXQs6dnQ6Mp@@|jD046JktlHK3REn--oD0emSy(I0JOfN4q&8+NZF$YVHMQU+RObj&ebv`7eC*Attu4S}FWvpXsn ziZT}MtHEuW{t72C0P-CXIpAWYu4-b_?jO!|cKJg@yO@E5NRP(SYC%!^03eOzC>3;c zvE|8Zop(i~7bN+Xl_YYJJ|FD5oHhcvbx%N&d2~V?bE8k$E}pf+ekA*=*cgfJP{;yg z-AYuGK$=LDQA|o1dGtrT3dkzvuEjXvyAepv@!kub6>Fa&2O-jF!~_z{H31H3ipv&{ z{XojHMUC@(-qjE)sSc`nE2N2(K2EUEYkPZfL#dUtBeg>oSN`^P`jfalJNiI6{ z(Q)&-lH^EYGHFVc=yA_v47_?^!I^S+ykj6QX;(hC#j%=08Dy6;-%9~i9{MnR5F2dhWvg3lI)}PF@u`Am7YnGciu5D?#j0M zHPqQQw|rxx`*hOQ^F$rrQN8rO8t?Yr;B921>`2#oDg=19EiK`I6dNR zEu6zc{JR~J3CLp{AsYaRhI;?O!Xlgc$V5^wce^gNLm=gfMHe210aDWYa*XOXK(_Yp zEFqCQ9mh1@#DmFcyJPpFHVNF@Gm)eheU4N`VV(S}`cSAZQFoflt`tSzx@?VKiQhHj zh&ie`dR`0oaMu}So5uoVU+Smem@YdVZS?C@Y4M_v8Eo?clB(6DMB=n%&?kL_LNF{= zL=qfBeZveSMJRUJX8IcsmCOT$zV zW83DV-qZE&#vEoKbqB*-mKl}Im=Tlf-o48+zLeaX5UD!%bO?>UAJRTjP2S{|DJgoi zLES$L$!LP%+UIN|=WCe|r*5;8*3GYRNZkf!)We@+9n8)boSh{v0vqifwV*( z>`lmU={i)Cob7qqs2lC0u?bFR83rA66Qw-PB0y5$kv0m+2Ok`@LiY2RK(es;=SN6h zi$P;iNb=%EAyXT9DYK{C}+Ye-W(gJ`wSpGb91;!N2G*r2QSUj1k;Em z`_E_gTf{x%oJ3<6(qLm&H#sQ?y5nmbHBxzS^QPK+wzfV!PkNjli{JcS5_xZJ6dXAd z+D2C=SGz(nHvf109w2>p`z>r^V|nA&_EUiTI)HSPT@ZdahKEqBnFT_z>o#)F`vUyAxqk^7|#_X zO{bp-g;cvaC$Or?l1BXCzbXJ}qdt#$YSoROx`5Uf+f21Ft(u~Tpa+aViZ<$V%bgi0 z)VA+^IbWm^C+=%Qv{e8g732`Y$f+~DK=QhafbH|eO?8h=b@6x7noW1OdZ-#blsWgK zyrX#J$RQxLIne9*MWrZoO0l7jIYe?Ph%!Je7P;V&8G?mP|I=7ihXq6;kpgmfoUH>b zRnc{|B3&O5(=d}wXuS5(r%L`@{Qd8LFNu60iR9DTXXdM4AuoXRHW@YYP0lEHJ26Q} zxc!K~3PethMwJGu@#v+H%8DnDuLo+1vwq#4+b@tPq=3xcvrxzkYW!9dQZCzJO(C*o zz?iS)xgwEr+1YtKDf{pkqnCk`QtfUtN%>w zWI5wbOn}W=I+r>q7=NroCUf!LcB-r!6N!?{9@Fwp6H^CSCyzdJX>?sTBD%>}fe*4V z8k?mYaNqFBMv0RCN!o%nOah5O_Mah(LKYxJWWN=E-A^QTMDEHJC@3*4 zRxRv)Y_#`m&7X=w;<4WZ(%hw0&z2IREL+NfE^0PuE>~((IiJ=1gHxd1+Uo%`Q>&Co z%pJofH!oQ+8{E`H%T=p0IXbFSpf8F>H}%=6DdHZj6Hp%z?UL}SFlTicHJf4@TvWEE zPN+k1e6BaTzDzIzlW?UyFAZk0lweF6EsXpfj!`t=P^qJ0*x~rAAqKPEY^Gw4Mi?VD zT+o&Aln*I9F7E4m*R=q*kw~%q4$}-xI(&4w;;J`rxVZA*CO|%b$ceWo_(9~y7eD^^ z6P+SQCnsqhei%gZi@4Cf=MDfq_6j~V)CZE=AbIN%UVCp%5}CKP>j;@HTmIUuXITHd zVOqsvNs9}}JVPdsS;~&rl8J;z*J|+DeLVKT+5bFW0FbWG%bF*RLUoZ6yksI$!G^`t zJl?MXnLR(5jI2m3S)tQmXR5ixYOiVD-^ter*E7c%k8nyJ6_rTJsh@NO$#-ry8YC{I ziLJT$6CCAE&Te?{Vba?od)f=;l|i$!IJCT{lbKmQb)6IsyC&@P(ZN}oSqY}$ZK&Dm z^;)wUBcS~3hOtcn36U>f+F4^tCvfhg(&9<2v1%Xip;t<=D3{DP{X1%>0J)dc5<85* zl8D)Cv=@5-2axpm%4hSf!JFLCILAwMV|+t^ufnMuw&8iOg&^+jZ9TZ~U)ksQG1CX< z3AB~RxypStjC`rA3WTvl0R~xW;gL)mza&XyBA?Tg;r6qm=l`y%8fGCo6|(Ty2V`9y zD;@#TGuctf7LY|C3z7*W3VFl|i6v>Ne`YQW_G-eI?*(Ktj0u>OE?Ztx<7EMM*j399 z=={uOn@1P4Yd+k*&wB*mG5dHSFB;g~f9~lAh;+xfOP0#V!($sYYpN+uEo=&gSOmSH zy4+Or{XuTC8=*}@Sz;VG6$-W{cGR1N$Wtxv=^jcANnqr@0aM3Nys|H5om!yVdzhGI zpxse3t}lz0Kt&U*)G{L#1^~hsa`+WQr?lRKgvhSXDb&eB6W;}NO^51 z!3<=c9mzXJW}SVKdl2~udk(~V#Oxm&1xT79Es_8km2C6apMnIz@=;jDW9$ehi_c0o zWX3e+(h6Azve5Q#n~>L=6%rizaf9PPZOeG`WtgA7>NzGzV0+6qUUcE{r zX@H`qhrh}YM+XC`@DB&AJ?3p3Hdh)mzOB2F)mPb85r;y|uF{dMh4C@^xL0*>ScXW3 z$sm$%=pHmlBsi0*y6RPB#!-TJZw-mWZIh2Avia(hE0^y%^+P5HY)zzYY_~#kqoI++ z$Q$u(IA-2c%i8nj+XnI@6G>Y|09gt(02xH~j~iC+%Wzi#(i2_<$jn04tJ$fL>9YU- zXjHBzJ_xH6a=a`OhsOIT8vZPkJ2qJWNIdZ?L5X>p;7iBb0|F8!-vIHp zfovj=EvkM`SX<7BSBKEL1CSX0SgPDwW;MlPXJ3VsMe5E9$TffnvH+>264>n(Pu|Z84{@L7LbSf&4}i&C;#2VTOWP2 z^*5(}sdmU5I)upZ+W)2OJgb*z;<0vye6w(v{o-Yy2CE?nk3K_sCm;5231Yv|jdmmw z85T(KC@QU1>9GrrVF6?YFcpslOZdVk7eo1cg@_=CKqq)r+--S0P8_4}s{g1oS@AUM zBxy)MOf+T3`7thIdF)lc`0EY47So~1*1vzEJ%6(C-jFBp-=&4Sr8ZX1jNWLjharPB zMnxL50CIfzxT4(w$k`kllwLs)XF62N*J>X^~<#uZP$(qe+N^jq&AbO9M!yzIA{kX+r{>y}ayJ zV^2Q!Ev#|{CkSi5co2ywE@~K%+Oy^v48a1VE>Wbnle1q6JJCXAd-$DBz5bfy|>;1M*+zM&8ZL6TLG6f zAp4skp|BRxVD%#;%{ZACuUvLrB1=%y2c&51H-3-Cz2fz?9nr=auWK&(7;9T*A=CIU zxglSU%TAA7k7IlsBz=hud7&6Aeiy!VZpr29PAp)oiO6W(-9lqT&eXo5yJOZqW2U zq~zkShMMr`DzsW=kw{tI+6k6^2aq~Ss^?MP$3Uto2vE~I+JMiEvP(($pR$i+lUP$Tn3SGbCRv_2$0b+-VY=& znn&R{;BOdz}IhqQ5x*oH=l@!2-vwt)22 z5Wa4~cfVtLn9-;L&;rkcza6p-sCoO4X&e8}aUOInAz@)9ytHDQ zSc8B}YRa*r--Gern--4(5{wL9`0TeYKiH%94kDvP!b|no&37Oq_o!+Ux`^*IU6OA#Nf;sBejd3x{+9r9xJgK%Q1sk&$}7EDYggK8kNCI(;Lj z#}M-#MZg$@JMp+dV*p{wjmMAYG!#GL;t>6&ZcU{)s5%7idvo)%H`LHN*;Rnk%vE3t z#|XZogS)9@V+>_*4)I=Z{$7Jxsi&k56q1G_x*6eEU_Y;YD)O-=(l;3E)-P;V8i{dn zB0JCqh(-XiMffA2e1d%P(;co$)KaT!OLtb)cH5S=dg%r5VauE7`@VqWO_%3r7+fQ> z`j~A4;#Y!k<*Y&g4sK)RJIubt(_Sb)?Wi7$A4!6Qm3#nauLXP*&51LP+0xVNTY zS~|c=eQyK2``OCOz6QpEM+A_uYj4NUc7pYN4+QbfWkt0C@oVLG0CLMfGOmi-7LWwm z_-qpiu(<7|Yp#w-C0-bC(kz=e1u=)yd%WZC;1jid2kJQ9B(R6vOuIs7`j_hd)wVQTGAnhz zhew%0C2ykd?E@fnr5HfRU28A{9Pz@2NTxMB+($^chH9a!F_Y_|lFmR%BoCZ!gu<(- zkHT~fBHg-XAV2l`6jG0GpQojQScZovV<(Nq@y$GB(a0K%jN*4UorcbwZo-k6txkZymffv_l0J z$KKaFJ8wO&HjXR-&7q2qo_f|(gA4?i-3@h-_ndiSc7~rmK_yh`^Xs%*sr#=bn^PTT zj+8h+@}IzOqxBxhAHu*C`p`|C65)==Hie!B+-g5_XSoTGK1DujOV)nG4CHsZE1Rp6 z01_glnJ*wx?tAlWODqlvFUvHG7k>#{=W|tb-$|O8adn3?k#B+d-)f9#bOuKH7K| zcVpW?GBV<6L1d|A_j~MuqbFcvRcThT3y@aG64odW>29A;NGJ>|Zn|cG2#EsnXU6Cf zW`}KHFiTnRn6Zte(VtS3UHR-Pzz!g@p9ewoognC6!_^&S6ETQ{RQk`wj+Svatb1#o3KDrO9QN_3C|fuJQZZ;O!Oaii@rRI14L96R zAWNC13bUz48%Q^Y6Ld6bAR@BySu#w+u-+BTn!N!?wa#JQZxSP{_-F8&_1K`UzKo7=rEFBYW@lLlB))veK#Ip_ z0upYosdUPm!qR> zknT=s=*&R%4;dqrsvOzM4ynQ)u!xo&FfHaHd zF@e+$zTdipokV7&9YCf=_7ho4`}8TKfh>hXTb?1)1Y`+n%wqwv_-PRdh6P0M%@4fE z^oZM^k+d9hEeio6|KlDDvxvQGfpn=R>M~`qkAPHv8970;mUzY4MJJ3Tlqlr5dDH-` zfb{MP#*);&mn~G*LHlO$c-#A>cv7!Qame54e=Z&`miOuAFD(peYqJRAHyrInF9*lm z%|L9Ux-n|_>=1!8wPT>Upu9DUL;WxD6?y6^`S|_xu7HF`fRsd9G69lX-KVwQ?40Hk z2(rCO&v(;Iug@%f`A621-_{u99q$Vgk8H4Ho{S7+R}S0li~J?+a1Yk5@5NxC^zqZ2 z?t1%zf&4p)g?o4jFVO4?$n@HGzvXU*hf+mLq!#RA4+@a*Xdvyg^RgtD45g6$BQ;56 zEv%_0#tV-zU{D9LL^U?ySb+50p+joF^hebFx@a7E;4K{27%nw|Odj=UAj^Wj97og{ zQl_3UK9*eO@)U^F?+4)oGWx@#7hT0k1F6||KFQ4CqwQ@CZi1m$jCI5_>Pf|6U(=1K zC8E?vEEQe%X$)_O=`M!`4HP4~Bz@DNwi=AcWvc;P8zT_N4x-keeNh_8VUu_8xZ9Lh zh(g}k0;DAI#Ww)?2m9=>7d(R-=So_S{7w*{_EuPB)!t#}Zc?$9@vUBCn~C zUdR4A!xIi$jyrue81kY=B_S&yq0!gYFAo$3XnCQ z=|Wa0dG=e&r7N146#2YNf|RgPL; zv89fko{paY$xR=T{oyNh#n%Oh6w(J*zjibu9*aUIke0|GGJq@xNr&1+A^W|y{dS49 zOS3p!)v`V|)5vR|LIR|NYOFu5HjYW4-`W1sZ-UwPoG6oARc6d%Zq0QX`#wC%EReyV z)KTrU{K|ORh->t;YmPaK6OlC889vN|(`PQD@E&rAJRd;HIETu%gyfzg_5ku| z0I4KWMI=`D+4ba49m$^+v{NF>{R^c#w|MNDLgtiLp)rxPI@XmDCJkd69~ek4)pR&* z%h?5I!DF{d?6F870Wdqf2Wg{-m^)1k;07|50+~s8q%epi(va?OXDrooYNNYO`jM`C zFRl0!b()PuPE307=qD~Z9G!V&DgAn}o<{JQj@AFSxc3H_vI2c*55B;dz_V9pcYmB- zP*Ga(Hti1($gbsR71OhtL=c9gA_3B&4JmJ(A-|da9!t$U_Y>D;|KanM+)bgi%>b!# zAV6Nb3w#jBjzAGPNk!0i1ZRN-0~VVKFF~YOOgkzb*}{`ux|g-}Y};YB#ufYn@$nO% z{S`zekS-YNTVe&s2LWUdX{Vh)7MIN~z8a8NKaoKrZ+`|zU@TTw$T&ns*F;9v5ziDJ zi!}BF36FHeXaFkh$g9&!rI zM;gh`ASCjFhy-U7nIIM-*AmF{8l=%Fk{8UKkcCHE0GUMAhim#Z(ybMJK-Q70ogrCW z;k-}Xps_BG31mT1j|rqoZQkqU#G_{e1r!M7{f4<$MYI}7hcnsMlR)yMjDn3_cCM&0 zk(qV$M2>gHYoxF_KjqCd@HjQ^=`ysGC!kU8*c}xZS-7Q0bePXo^C%$k+PdDzw|y+{ zE)!@tB8DRIIE@iAQ-&rxbM{bO5_H)J$iw#8-Lq(80;$#;LAPs^4+SL2$M3RGqo)Ax z1^LD&cRpm>z)Y7YdX>p*Zcy-20D8!-dh4_g77u;Q@M-ZOb6JrmwB3^(B#>92s(j~SIG3)^|)GZg~mFLR!6_^%C#WQ`-r_XhzcOxsS^|0JUG%e zkkMzxGuSXAHX7BcGC@p3;j+t(vKekCkkvJ@MB8keQdb3iKH`x1n&y z(;h1A84-{^jafWb0n@{GxfrcOEu@NveO;#Z%@b@G$>}5w9>=2fmVQM%d8LpDqP-CkzBZ8Ai-SU5c&HtuAPI+x zrfs~ZM2PVzxG|BJsXEIXjgZr3`tV?s)HsH}R?;3`as`6)mqk0sJBZaW8Tus$Ml5 zc&ze}zA7Miv_fJA2m{6%kiUw~aQ#NY8i2HAI+EuV)ELMr6^>Oiivubgp1_nJ*RFA2 zH7jhVXuREis!af$TPnqL*Qsh1NB7)3l~t zPk!+|JQ^%SGIUa*^eZfQL=nG-VUdLz4$|zj?-95w4QU`f)&+`nAYDGRl~CK3WyJn_IBOEw2V~Z0Y6=-0 z<4C0AY$GWYrH_Tif@6~C*J1(^Q+F877QUS40TJgT!|by0*)<@EvWM>vmoU4kAo5*8 z9YIh~>Vs%HckrHgrf^yukz?tjLT&2VEUM`&-rC@o&QPk^hyOp@-CI@BBetGt5dc9i zgRV?k5pqyri7VF$gW>RdQM7~3nMcEj%Z5jgmH$pRE^#F8d9m}|_tD&gp_)AE;ZQ*S z2$1Iha_M)v2BN3sYbiT#J?UKrWmv0a$iIhfW9Xl16N50Jm|H|0;|5#n7X&SdD)4S0gJDv0o zvO3KMS8Woyogz_*yTG7Qx*-+PX~1+l5{RxCLIn^Z6)I3jgn)G5hqpO163@G1;H?AKL4_pZjy(`f!B!RMn|-jz!fZea-#6&(~MK)6N=+6p$ve=d#-p z-S8MBN5*V=J{z#;h6K32Lgt~(WwT4Ae6~4sQKl!4{&I$=G%>o!X9H41x=XPhlJ#*3 zk*~I#PiaWc9CB2wyie{cHjd#@SkoSqL#RzmIz+0)&e_?LcHcT5;J#V8ATNDQF!Bj| z5Q$abgXx^FQzm|zfjx38x=nj=3_!T{V-Lx~+qdTdQAR{Fe;Wtxz*`_H_%?6=Dj<2! zr%ECrqG^5U8OTQSfs_=Ku!-%eF2bk(0YDwE-^6O z-s*6~62ka~j#_L2E?tgrt<>yw6FI@80Rghib2QF|F9zNdj2t9;Eort!9k!tlY=@@;? zV>D8aoFR3HOqaNFi`6C83=AWYErw}8GNir2YJ||eK0!`q!Bm|_M@N8^_wJIM;+JVb zl8}_O(ZSP0bV&7v7)DxHXdr#y64IQe+eeDp4%EaV#!OA0v^HWpUabKHsYWnE3Z=XAr46sx}nNC((?U)F%UO{dw6uLqmdazBdJ z)AaoiOyR&Q#Y2AQBY-4rT^{=FZgLCu&_Imv`i*168!$*=@3pk!$i2cTmskrXXC?J` zwT54{Q@z^e4J1qZA zFxdlAVNFhvtzkUdoP*;?sU~su2#!IrcY+)>?T0Ld43IJ-l`e~A4ZdO`(m+CF>ezPJ zZDB>Vpw&Od^ic8$i8aY3+q{YVxHhTK(F@eLY?r$=jjdg#7^@-G7O4($0&fPDzr9HM zTw=-MrIUws&m6MI^-4Q&+;#N=*D7qk%w;s%=M0df2p4hK%1K)B6iSzO7I*N-Q|O~C zh`j`l-{1ZUYBj=OZ2etlPxW5#Q?~`AS}3MUoF}>QSoeDukaHqZOPK)@^t$ED29j}q z&XL$LS^VhpD5Nqn7+CVG^V+CmfV>2e~Z$CD(wfdSs#6)th$3NrV`KsRzI{Ju|yv=XQO7x zt+p39U$W#z6>ez6xQBC$`@QIFI7_Duhzz(|;qVoC?^_JK(DO~)93BaX$?ZTN(phb{ zJgq#@ZHR&Bu!>w9w51^P7=xbTLC$z;-LoheNY5RU-8k1 zghXGa?z1Dtcb*uOwd#XZB$Lz+X38!>B$=+{V#DL{kL0%bLqZafOyim`)?t88J*-6{ z+Zi$vX|Ih%BBPN#B5eY)zZES&{wG~hGdkmC3z7y>x42jJFig5Yn9sgC-c2Dbke*f5 zOibnt17w2iT{27L$MM-B(k@p-V&>737a&8Vr(9_?L;k!CwbJA3YG(z35qA z-#m$-{|#XpRN#}dBj4$!Q02NjdNP`7fJ|bXw;^(H^2GbJP-vU^6c;PH(@Y!d#{}eG zzEdNP_0b1KESG6wCXyF1NPNEWh;bbu&*ka2D5_ZtU>dF#k@DNAWuuL0gA9=p$-Tq> z7l21T`NwN*m59`%mrXSygJcCZjmQRMbK6ZKn?knsv(Pwth76E8CiV`G4y}7U-i1h( z-kV3SlOX4VMkXo|IyN&HAR#iDab9DVNE^*(pVp<@8JiK49^=~PF;~5IDo7bmF}+JG zO#Ks9P*eLV-D%_6OmR&~NqZ}gdGY8TtoPr4fA0Ld^4X{(9YN|veE zl{?+JuwWqJ%VUJnL489uZ@Cd%Zy}7hYJhwxKt>zo!v!lqVxBr20(l-FF`}9&IqjDY z3CMQ%^Gk*`K%tPkWbtHojj$oTALwf0^LX(9t;)5pX!v3r~$jbmHK z(||OO0TMUefE0oi)NtsO)YSq2y}?`jYabe&g>)Q4m?9nnIR{7vyA_bvkGgZ5j-ax0 zLa}nenTF?^)j907_8O0d$Bxb(+@`~p62N0>dHRr*Ps-poaqd_(sl%|6m?56P%Qhfc#28qRs;H6dEa+^hG7pR>;rDfP+S0 z90GYvKz_gid*)j?H4@2q?PI7EkHJLk5T457*;+g8eV1(1U?38s70}w~eJmxR;yms7npe!VZRIWTpiby0<3!NY6H|W~l>q#U)LZpCfHX6s2K>BkO zNV{v{*eZwKb88;;)J>2OnK(N@^3riRKo*W#fNPu;HEZ7}^a)66gwF8NgEtF*UA9oiNiiW_`0Tn z?<odBb~56WUftIxCX@36TI9|80F!%F?T(!lQr$$r8O< zaq80{Ryp!)8pyJr6I|B@FGUxZwIWuCWlZ3S0ZZ~!VQ7(9-dZJbHJge(2uYN{R1~>|j*c&GDO@Krq0n$jqqkwD*3607e*5z;I zzeObNXg)@MqDA~SQis|2## zc>~f*!dDZ<+^8P$_3+qPTMh(|3}f-nkw}|KcI5TU5GlQSTcmkp)@aw-+zTyX)Wmw7}%%X@VbU7LUq+e=8ohcD=Y_F9wh$kfe5aX)L|^ z-6Pv`egPCa)g}p#19eF18ufWXjhWdQDdx--02V>%zH9~vkw+pPZYS2X4E%wgT(ug* z$uSB?qey4C(UiT^0jZh~0t}FIC*1{?T3*H>y~~lfr7S?&ERi2@b0IQoC#uB6U{5Wh<>@BHJGgea&g>p&!v0{a-bw4U>H$&19f#;WkdY zT((wMq;{An+eC)P24slr8?PmZ`M8&@suoBrPfTJ=YN=~$&_x582?k6&a>#UiA|eAM zbwJ0}Ou33aW7tu-UIvhL&{X{zd8{@w55lVDPrCPAaCE;l@bTUp$!B~v?|p$<0Ip>8 zU3y_bgW9%+22PzBKjLj;n#P)%ot@Fros(CD;pM?VJPODwmtoL{NdqY&g`h$9Zer{r;6<6uoeMjb8^nz@lh!cfW$NNzeIwZ`cXYS zr6gV5xS*z(@eg&^7xj~)3*2ou3yv^o3~}4vT;X<>TQo zL?V!SdW&w3!vgYMNu;N?Y8~D?Lm>G~(lPC2>Hs&9fBc|;d>(^H%t4KP_QZo)3dLHe z5D7sQGh@{l4w3I3cVzQtT|uXy25UsxGW9wn@lKa5BBhTJ$ebe^k9*;~^pag^vfKw@wPl4237dpkD6_!=cP8(W=W|-pA zDxj|=kyvU%$FSnD5orsJ^^q)OEZ2I8NSGYW0NL&!a;T6$Ynkx~WWo43&)Olf5x4Ef7P&1<0*OLm+Vcfl z>9xvOEPkAB-81487A3uPv|(IzlUkjJVXY_zX(XDcoe_@2tcY$ zLd}oQbN^GL>hvFw(gX^3#~sTX?9-Q3keCwLv;{XJ%(loE4Dh;}oKY zzlJgO@Lo2Md#rzu#!HE&u+&?;K@dc_C!8+qxeed!2N<{|m{gO1tiMf&!TCWzvLhUS z9UlJ}BHiT(IUweOHjy<1%Hp>Lq%RJhP-h}U{$igcQb3AG1E~O;aYFGJB)?E|g)`$= zC6`JeLu8OFd5i_g=ClJOL?*Pk6Uj%K-v-E>AsIaED`a>ylL0bBI?gtd4a*-7r083d z731*e3p?6yweaB-`EdhMK3i48n#gvaczA^3060#LINh@SgFZxI5dXH2IMR~L%dIPF2D!6fm`dB-!+ilULbwUfGY|aAYTDUEKYmx zUc`uQSx%7-ty@cOxoyBBF|J*=5Ge=*Bt&|_Pnp`n)nZ}uUqdaUkfJg6MvjrqYbTZ& zGFb{46OSz)*;y~#ZZlv=WV!6;N+Cypv_OtXq|1jt{^ZyP5~HMvNDyd@wN zLn~4NKT-GpM5O)pg5SZ{i%3O5Ui!G8jQg01g!pVS0GwZKuA%(dQTClcnn?P0l=jAH zBZx8sY2;Mc?h@k|aZP|!%|vk7s^IC7Q+rnO*fJXzdD5MUQka_WXwOmLd zJuqOutt9$q$DO`J4!xjpOlpQEo;;ylJ6EPC9S&yj*W_{rgeF;R29T6w^xVOB0qK(@ zycUorNgC04$?sGz1uH5gky9k4YHujvjQ1$}gy+O~cnpxgx6d|iNTilEE3yud_S&G6 zJfy0J4=S)Bs;TQcRFo!Tl$|S{aIMuTm%Q3OL^dE@CV!1g5*8eL0vR0J_R$Do*4`$qw~DgtSkJm!)dH!#7EcwAn|V-k|B^UPPi z>K`Or&&`_Y9IrLwZ9DWZQo=wI23fl{oVk&3zKTAo6Oth(rfIg(yhcFo>&ji|4v_kG z9w3jOKS9rhmMT-#gU8A3muZWf)!hhq+{If9liz&9QzaYskl#*@hw_Ypl*b0hGGcA} z?6W5b&Cj2}B)hsE6CUleO=JnQ^VMWyipU<2K1FK4dJ9u7l1LE)qpn_uNLy-$k3u8} z0Hh2gDb~1E!>33i>8${5!f>U}=I{uPMiL$aWK&0dVEy7@31lxt-ts?UvXyS^vjt?& zWrs)O*nmu&Eh2k|$X2asD7Gh~Kw2O%9`rrEXw_(&(Lh&du(nl2L>7?nC?d6|yodwH zG!6NmWAWL6((i&F=Ie1pG4C1w>W48^CB%>|P(>vtY%9`-2Zwtuq=+bpf(s)qD$3g*_{vII-lOa;|Jl=!~@;;VGegfKD zeDpCA@B<>o_v}nFkRj3v`TN&QWOxKcNbH5!**R_?E7lH>?T!XB86b`qw6je*BHp!^k{0*5h*i{uF=3~S|Po*A~{I7 zGJQ$51DG&l)1SH1f5?DsJ+59OaP7;p>SFx?r-kUD^vD-i$K5!sg3kW+`wx-ziB+%z zk3d5c+F$>47A<4`3L0lFCt5 z90f%0^Kq7jOHE7gmja~9>T@2SaXPSo)J4EoDOwvyK8MM156UE$V`u=-Y>=Q-7leQe zqC6;M^s?6#z2*05PH91+P?0D(QeiB@is+N_;=OGFwmI1xAnq?r_t zz*P6u5N_8M?L456zLZM{=Dr01mK6csc%O5m=*&eSVxRju%%^{vf384i^R^}0$JwzW zG+9A)?f`?b=R96Rz)gNqQ0f#(51No<6CMhw=_{gb?&+9OY%{s=(m1oz(*Wt?K&H6y5#Z1s_as=a> z{_9e%%)*LDS%3r`EggT$K!RjVX|H>nbj|@IDcEW&0EXrj)jp&akB{lg7n(;Q`SN*H zFmwIza3*ZM*6f~M&*~p-@8cE*c0_8qh_^4{L0Mf3k0&u^uaGm41Wr6QHqA91yBGH$ zkO0Y07FQz~$kbtox=kboj|OtEXAd)6CjiohL`ox%tLJQ5K&tx#B*lnsx(tv%5s->p zoQf=u?QCMn-V?Qs>{zw~DD?<=?xrobZ3y|6#z>xPq5iX2Wvd@DKsF+KXGllc&0&kg-nO&e3}Vn+ z0VEQ&f$I_26RCUJ+|eyh{AmTsn1Y=a&n(v=P@UsLAT>bv*hW-MNCLIYwHXr{AiY^X zX`nUL+KUW3G}r$Px;iA=R$hfjI6i<-Qqj4wk$**P$AJyC9bH#Ljax%CbSR!bi#~!R z$;Xom#|gLnO>OGs5cEp-@&7S z1abj6tsJP9n$@@;EwXA5gUB5yWHnfjZ-hrFB<)~H>KMqn^8*K4UAgtH$g|sSHwcGE z%ypV5WQg=ZQZH;F67>y`Arc_daK=ZO{q>`k#m;XJQ{(j+dHjL0jTMp(-J#3=`Ollj zj>G<2e0I)|5UC)$fD~?7+1#whWN=&or2E5jW5+Z2Z561sgQB_?ZObk1^YQYsoa^Tr z)(((0{rVVQ)terzkmZGIw5AkOog30Y16kRn+Dh);H-PMHqmn^O>@Q`uf#qo6D2&Ni zYQf5pCEmMmjbfvKJOPMj5A%fYvtOPdS#wwdX{DUnsr|NGhX8%LvBRAbS!loD{*N%_?}Q82vh&0>=?!;-9DdS7d?p~38 zMh-Da7DU=Rhe%u3VyjUEDP+dG+u-%ey(taIwM8T@`^`usVRqxu-^)xPLa7fd^=w(o z{UDA(GQH#hQZ8FVH9a7skMJ0U#F|2uKK7>%ZJ~1|kx|JZkgIKGg$eD|7DyB_k#p`C z2FMDqC6J%PSgq0xj`V-i<%61WPlxo-29RDXURj^;$Sd^Gm&0ZjM{usIdbficR2BM` z_FvG-iVFvxMl&UvlyaC}1j|Dg&Yf`=kY}{#&YmReXqyd>C?!yO@{23hX&BcOLwRg~ z1jXF@aoa$;kc~vDXfvbnhryVWO8KQ6A~m<*3#to9taGR;q+s5J_k@p$Z_0dxT)Slg zg#k%{5&sH(4q(y%Su-#}5;TJ(j0H&JI3%*In(T-~dMiGXME+}t>=vE{$0D-RMsYc` z^45Vd61fi;8<3+4`D71BEJ*hHecW8}WPn_CHw%_Ln#TsDTxl+Z6FTM*ATdI1YJ^!X z{&57dQbEgICz|Ea^9YKJFX$d?kPMJ@wH(eG7i}K((hWt19+T5XBQ2<~y2<+J@xzNG z#V@@2v?sSYopKrg$Z@UuIpeZ6K*Hnum7k%x=X^pM$P}Y&wwPYrlL&hOJ*0JKUR7+B z1M%BROBzUs(Dtw_UXtW7oK5E&qIhP=aNhsWR;AkAZde6lZ)Sz0rk4o5qH ztnk@PqKIc_tt) z?bvbuBl{|(_Erh->2iVr(h&^CvVbzP2~jycf}_m<5^NjD?140m7)%>T%*n_O$VQ^S ztdi=`1;m8beHe{n6UYF$1BLwirjWy|Pdh<|$d^N8dF+N`Xw05*o)?=9%ihKxx1V8^ z`*BL!*~LgCSfXH|ks!O0KA(e50VyIWGooUM*lBpgY3Cg2l#ekhf4wG7**uad(o~pe z#W^pIEWYNUCHtfvc9vnlZ)k?O8Akv4FIM+2Gp0h-O&V{0Ze(JvlR z!Y7h%G*qRKJAML@NTfB-uA48hm;|}a1h(BLaoz!P;%ZC)Mk6`0mPD?tyod1z6wF5-b3TQCOgJ|p zH)97*`}b_~?>HbFwLbC%Q6fCVqdOg#JEVtuni38faVB5|sGWytvyaUKwL?iyNTz1$jf~n8OBtQZP z0=Z_`eI{N~fWZJRtrQJNB=T>yOP2vcXNRniP;>pFIvWX%oqpWhrODUCXY1Kp&{#O? zHAK32(*fx@MMW@6+C5%-FP63~sao>_dFi^n93IsQ>9N?u40j#k+&4ApY6>?N%@Wc$ zSF>=7%it&xYWI{iQI1&-yj}@SYve7RDi`qE1lTiV9jCsS`U0a)86bCNE}8*U@u+Do zB+^7)4I#Axw{kl=ClbM|o!EE({XZ#KmW<5Y+nhYHF?G9y>@yJ6Gkx@vZZ1_`*sp>kj6UpiqQI<$la#19DkFJ{=(0<`W?4a-@mz%*~^g$n_RC z?N6~N+Hl)(*DS^-w%32s+nL<)@QsbY#{bqO#M4U$I1HeV?@%lJj8(NTQpIcy6dWHr zx_{el(vrHyjdcMoXDdCf&M{7nG?8nkiWLy!pa_P3CAGw9|6h>24U`^)U6@oBldHo- zV!L56t0UyG=Z^j56Ilif-LeQD^n2@uIF6MD669!**g{*GR@{k5y~bPHGKbBFfeew& zs0O;wV?|^qZeJw5x>+B@MG)!b0J7)HhCntVhcpJreiYO1(B-q4YuQQrJjDn@0cnrj z7swW7XIB7a8ncB7N7LBMSQeaN5^GU6-9E|#a!2N-$B{CaDHQYA0f`n?UR)9xg{P0DzV}}Xb?04?$xIi`kbdQ-EK=d8h_+R@S%k>L zO0g@~Q$U8u0O`%)o>s_!A=H=<@rY(AvtuBof{zBs9XlR&@2%U>uoSFq2GWlmi}i?w zNFO9W>S-jlPc|VSBalNTQ>{t;FhH8eSc9=1_jSIywfQt28HoKal(Gv*DI`nA|9kV; zQpdhRI;c^QZGRme8;*b1s4T%;p_4=NVU8%791UeVog&LVo^U(j=fHQpJC zp^7E{;?`GhPOBhInH0i~46U8wTDPt@1ge%Mjk{UL)k3*#Feh~>6yyKLo@+0M9R7*pJ8?~X!B1SklCASg=`XO7Mt}1vLDS9h9R;Eq?>&@g=|O2 z63DU;*#mM_(?_#d793;t<4q@vN?`DK|7N>aNtlm@pyn0}FvPMbpn&{*V|=!Sv)l3L zY|UwSq*_?g&F)_o1sA}QExyK(xat9H8C*9jTX z;#r!D=k~w4O~S|&?7yl$W;Qe9U+5bcx)~^K<4}ibI>?qycsBMb^V-=liCjOxU1NR)_)cvyE64J z{nGb!&iaJML?CMS5syr0BWPLks98etklDp&V^KxnxH@eWq4F)jx3vpJ1f>4c$KqA< z-SEiogz{@!>1%+(Kj$b1EXCuY3rCLZrnG(L(2;{&&c5Ma4t|9l96vO_h(hY{s4GJt za3zqO7m2LhsC!F$&Q!yx<@aizBLS1^&JZ_$mTPHrzn|QPzkQBG4!x?X&j+ zBt#;Rm-Iwm82ad^DP#vn2ikiZk)Ws>Lt;8b@)3y)k1{kio<9;P9`h9*lkyx=IBcj$ zeBDp?G#r}&q!p6N;d2d0cpL>X-4zYU!V#A|8y2hZJdK8!@fQ^-PSbHKNo&mgrHJq@gHx9{*a|_lNjPP|1^j z#vb~OFRLR3uZD9(a`O%Czz0Z5*JDojY-Q~0Yk2fri!$Ul4>75zD~peg?|*UA8eL>4 zJ2-xHk=tt)r{`}CCMi(+1Su9XQUi}#@WcBA;ka!RiGk(qo$6u($m+zcySXrSM%ZKe zwvVnA*F)G4Sq35O2sc>7GXauO85=Kc{15(%2T4p~@z#55UNt~=PQ2FpB+`b+32S6{ z^pB+O9U$$ki^vwztnk<=5?Uv#K$F5uLvn=2OnH$PzpoVXXMG?Wj}VzNq=Ib6GzPM{ zYf#h&Ob%J>LD`TLkQ~>Z*|On_~&va9AC5BQzTG91t^TOuJoCID}; zm&!9Wn*8G>_aX{L#t|=$A9;0yE_~%;Vgb1u9>=C{3CPQIl}R5Pkl^Sk?8=Cvk`M`u z`hZAIk#uX!St7MZ!wuqmNFU7zL`orpBogVvp1uH*XgWYz8A(w}88NZQr$dHc`0%F^ zVTdweO(FT@{q7be_h`T*VYNiqZ<9!Gb2A1qheummDxMDU0O={iHq>Pxn{_yLvkRHc zt{}VZhYXPKjVk2JSPC_i4IfCl2O5E~XMLSq>9`9>LJS}?kJPcti|(>OW-mR`XisWe z&QMGNsXBI@`FQmEtp##;!|`yXt}r!^Q0UY-Od)PfG%)&ry#34D9* z^o8r!b(qu!GW!HX4Exm6*ipN;rV;jg-t4w3#anyQDHl0+I?E~J14Uex$mDv~?NI%7s z%F^y5(A>x?fs{h}zpeWiARTO5Aw{BIdu#@=Q^T!ar~ffWMBQviyv}`v_5K!E{pjV zz)Q=|81ou9)P~3c@>bEwQxW-+i1hB}>A{qN#A=Z}_I7aeunS#1nVVzxbx!um?lK71kx8Ll{_{c{|6t<T0D`Un3|f6Ylm4)niXgvawA8`ZWBJTrhcDHAz%dTe$^c%Y2U%{z~EWcNd!_r z()0t4<`D|v(Z|-VgQLh_um17Pb%V_k$H}k1KDCwMSPjXJxzK#(==h79R+DMp^ejA% zvx#2)w8YnJ`k_e81ndCx1|5)txNP-Pq+mm^9VB0pL{fj$HcGx;*C$M3z*wJeh{zym zi42i|qy(f3f=^fxAHGCyg%z@ZjLSBW0ExM(7bH>E(!Fr%Hggl{{3VGVc;v@}aGbUt zlQc4rQOJ=H+v3P$>`oXPj|MVp0*J8zQdytp3do;UCEEgdSB2D#*$=>D!kMBGdrl8` z^WIG&6=g>wsqCR&^4Y)hB_Zl}6gD{~%14X8l0LuEH6UmyU-*sLRZ2D35dhFuSgU=9Q zZxD}1ST;T;f4#W4hs3xh7^q?oz;J*R3P^UTNFoc!%a#3cuw5rf{ynOCzJPqaXK9Gl zl0ENg4v^VB1_uC{al*60>{xlD;Q0a@*1kNuBOH>!{gNPFxDERdy-q4Bxr`09&f z#W{DXBunoDr2Bp7KJ)$Tn6iUv9k1=p%h|~n`3jzVmRUEmyvHoTW8K@X1mzJ14|c0} zw?tU^NA(g#9v||+1Ts6kyry_`ZWKxt-@6O#^aWhDcszam1@}JyCHJQ8{_xpnHa+uy zJeD?ZOs9+ht9_sAA3klzEOyTTV7&UoT5<24}?AjzVSO=_R`cNi@cu>$h- z>_SOzxK5GX0&#(3a#EDBL>fqw6oIri1jrDXVMDQ}L!?Er8Y5isRu>zrBa!;C5?YKY z);R81xov;(!q(4;6J2-ydZINx_Hhi40WuET0_nXK07**Hs`i5SU4D!vH zwC-{xj!QL4bE2+Vj7oxZ8| z8@2tsK&ZX{;IGInPfT@A50U4hF*)2X3l5UtJ9Z6Yd zFm=*Es?m%u%uLGkKfVY3vK!aSanl4TPc1WPAQ**=Kn6(68YvDjBW5Cfe#Cr+>_!ve zk>3pH4M?(xBPv->qmKQE#_`M@CG6IR+kmt}HXbYIQyv?ajmJhIbv^Mv2FQCVq;AW$ z$A-4X<9$!@P_8>}{0EPc%+z2yL=x9f%xkq1$)m(;mu{5FEOwnBsniHhnSl(CKJB?q z;|&z9Lu1-=#xg0zGzetzC^z4LtiNLX-!kxW_hd7fB-7oVBs(?QaC+&+=@(vLtl`ED zWrD~{qL1W$4xOV+bMT<^kJEH6N+1OmK$01UHPx*2gm4RcueXsHX6{x`Z0D>$XYc8EI)f7trepldnJ(nu>*1_kS6k} z`<}Y*IgrFaa%hpr75T|kz_g)u@!?R>NBpVrkfl-g*KmlDB`oqHks%V7I^>bexHZy+ zL?&!(o<{W1QaN$kI<0Jhz#)<0@zal&357hgz>cfsw{}$kzPwpH(!Ozx-i-t6_mlq_ zV@Ds!N#9R-lzT9be1#r*EuSJ9v<@i88LF|%o&-pOZiu`*<3ywW!Eb(~ow8 ziSg~>5t_1*4mxl`3f@}n` zfOJ3uj*>^4*yL3wl*ME}3$*H4+I(2}qm%z0Ap<0oFIo0 z&3&UL->t8B?ZzZP9(dNvpElL>zJeNnth*L6cNl$K7LO(mAlrf-FAx`WH0Wymtt8S5 z%&yZtewua*-a$~&$Jm-ITEk_VNa-VgP8m;t4ClInR{s&%T=xCO3;`dwv5{DRSvNCj zqQUxjkv)=lZIC>AW{l<>wWbYr;(670=4<5^$?$x`=2C!kgCxD-Iz46sRq;slJ%fmn zA(}=YCk>>C42_?lfimU##AA0;T+wJUdD$pxL?V)IhZK>Hyi0yAQ9$H$DI$gA+x{1r z>(d>Trf{W5nn$dd?8X)Yq%D8D0Xfltyq886kP*n;c>}A6&*8= z03+G*t^b5F@OWJtM>+9%646(0dVh+Ooom{Da)@*sPlU}EK*k($+nw+F`0366aO1$! z0&(Lqz^cs65`k;fwqJPR`ZfL%NK(Ao&U3Ba!yn)<`3XBJKb` zi1ZslGN(vkm6%z)@-Spdtc`eWk;~6GLIJb@86vTfy#PanrA|hPuC2))e+MgQgYr6NZ6A= z8c3<0U}YDNswmp(c+EkuHjdt;+I$T{uV2`Yx8*0ZQ))wPol1vAMNOG+gv;)#2OM~L z^Iac5{`t%Q@SY3(K~433&th&^94Mj=IGeb0ia0Ero~2?3bgk8$Ay z*b%8Wu{ubmuiHP9_tI2eK(^mo(g%+QGDKz-WN)r3%l3Ha^O)rnBaLSxF-`7ZNLoDC zc&$*#oFMx^;<44~lN_W2Y`7aWAUBYxWOLg^IR4g7l*T_2W-mH)mj>B+=0Q>3p z-us&l5V^Mr9+e_jd0XcLW*rZ)duq%bYE<|Dl1sf9>tc1Tf#i-EwUn{bc@ZKZRbw{W zLnOg>fcz3WIa9mJXO0_4D`YpXU@cTlModN^MWR=cB9Q^It@JTF6IDWlJ>e5S4w1;F zHk8I3W<#WbG_yGLLb4&3U;Ahj*si%nLQNuLZ6)cw&X94|JtASTdF)Dy|Nq9$_qFcx zJmVSN@@5$>gRsQf*5rkJkU;8iIFW^dye3$3q4b5RC9f2XjHIXt8%2^+LQPWF41-Nj zI)w}eFLA(KG22Rhl)Os7FXaDgpX<7>?|J<7*K&JH=N#$Sk~8+{bwBsdM?kXh-Z9NU zAqPOBke$bd$L6tL87Sn-Lec{HkUf?4JEX-Wcr`?Di>4dIvf3gAq)h zW0GPLkaPfXJjL!4&8uDVJq@nXndY&?ODC`GT{(#=et!PS53f+zM)Tl|FuP_9vCn_) zWzKIw%D(C}hnSCd`gLwuSeP77qJC z_7F%796nPXdl1nKkbGI6(a02V0P-wLz88UUL2kS5IVz_L9;#z!$7nVCoN)XyXCO)X zD8{H94fgl9wg_+by?2KP{fnM~Iset(l}nf2eOH5Ds%5_qkXop#0yl?7I6d#X z=H3;NWQ3SC^a?&L7sqHB2kpAK4IZ1BJw!4{N*D#CEkM3m(MO?UGm^Dk$^i>xO^7VS z9Nd_`*C#cewgunVIeHhniP$+S2G+juJ|A_5T>l7pbVvh?mdL_UAL*l+qy>1<&=Qn%oC}g>Dy~nWX z-7f^B18cl@0&WhREu!J*Si-2@+$>JhlSdkPbUcd4N|TcupDrGOlTQWuK&TxVYA8n` zw@E~LGLV(ao)TmrmJ{Tqw=Tis5C8QN>jM~$WfoCEj`rz-sCMDAXjkjfaMJXfu^h-N zN?FUoLLXi2`T7LN10@@|9Ilf?cuY*w-Y}0XHZBxD;bAKWZhrLVK`s)h^dvzFz((TA zX)Ek0P_Y21ziA>L3u9YXkuptFNZZkkx&4SHF9I?XhXImapCbx2eTBqhCo7&9`^ii? z){aOT$hjrLZ1b2c5^j+I$guuUwb+=b^dBVxB zC}&^MRUzQX3MoL;k06;2=f+x&Ulx!)D2ye%LDcVp2sV#74#piUDi`5oyyIatR=pH6xu7YXWJGeG9dt zbk@BN4M=F+YCw`Plt99>fV@ljM42AZqFn)cSAR7Vh>p}}1EihyjPFg9@=k8{d|n2R zn0qaE^^VE3Ip?Xpk@r)g+_3;r>fdo%y zcYggYFnZ~3fYh>bt!DYvr?x2M#|7j;bJ}n45leEi%sWcU?OxUsV_$;N^pw^7i#ltA zWEW_2cT$KnTgeYGFwIk99=}-__ggChVxPurO~G1Q?qJ1PKc?x$GXgRSNq4TZKF|HB zAp0gf0_3D{2#=4r?8owGw{0Z5v*c4tOH1zLuDd|86a^r&H8(sSikVan10+O>ki`_A z@8hPw`34|W-|H4m`KhaZV;zucxKtc39<$0S;f&49^8GFJ5vAnyLGkF+Jdri>>rt{f zBKkej;_Hkb5^d|oL|v~=vE@A`8>rtX>2nFE%}ap%QGk><{<5MNlv0Pt{}GX893c&4 zHisYZg4g~93GxcB^;DM0EHy@$#Y_XfF0|}A^_``!-M%0sRRfd+9*ac!_RR=gb@w<+ zS=Jp!1>~`ofpi;2wl>#CaO?zfknzd$qrJI(eawy7?OHi!eOx#^N+AI^CIRJ8ylyqvm^5ap+Q}k9iPi-K%iGjMY zBM~)ltN&3|YLAj z?MJpIfxOMDXBrC0TbOe5(P-G@ci&j2pJ;>dW=D6_Z2}}+lIP!{cC)&-esORA%KJK2 zvL@w9-4!b!iM#)ctRsd-@(P%8+8Ft8iZtI&Zf)}-dx@lgOeX~&_S+T9n2CfGqS3FH z^@g=F`58U3f4T0-j7SQ}0Ev4x(2~`7YHU)x<}Z0oUIVfPQCODa(&59`!yKe(99C(1 zdwhBxyLIPAAzN#OcpNHZfMf(#l|us=g?xfYz9t|okM#t?PqD_?OQ6bSrw%x$p&9fG z3Z0v*>4l_tlosz!bjFSbNq(wUf-BO1KZv$A8c0JdeRL}kzqOK`MiKK3b!Ewuhez$z z_lhf7+TFUvRQ$Z>9Je+%ytsv#@GV|8_sL40WXg-;_Rjk1huhoNXh*xopf*Lsz4afG zG8d4fDFKlrI6(5k4RVxcSatvP*WXrWE;u%q4U%ROQ)E3!|D?yKCI6CayqtAX`VyaA za+y_*j}jRq{pM$vLvN_%E3k;3x*OgzIF_ry%mi}yJb@2 z*;Sfh*wRM5SXKFj=wsE#GdZhY+h~kFVjLys9pCSQBgU6DzaEaVoYMa}92HJ4FH#6v zoZH~5<ME1ly50TCHA0-#)phM1e_w}8JhfKt{t_X0RA0)7#T71g;hz7`oiDJKe_SN-T!b%wEG|fK+IX+jj6G7X5&=`aS8w zjr)~E7CnOUSbv5A(gS2HQi(nea5RlQB)cLFpX~(sBA;02vg_ha%`fy6@@SX+jMF}k z7HWpBTPT*xmen&ZyXj*E**49x)CAWpm2CoKBy!Oqwu9`9X{TFUC%XWN@hmETBoUFch!&92%*uWGnnj9<{M*0?mM?Gz1U(`P%X8OtpUf57 z$nn=JJ1YQr<;wOd3sD9azYkG2ibhq z8FCaLwX-po8)E3AfmCTESIZg54Ai(gw-yHozzgE>e#RH9j67<|<77fxK#IrP!oGM+ zk%dl!~&8J56G&3?$!&ZDHY;tIBkkcNyw#=-e0*xlf`-QxU;>wxpQ`I zXZ!q>bs`?3n{Do`!B!cQb&w+-Nf5pB4zHvx&ugKTyK>Ev8IqSGm%Fl6a)bR6)ZIikl8Q} zq&mbINQ6*0Vm^HO$XIA5vd;B1FfLuYtz|&|{czQQ)RWz{TgP`1-}q^CQSh#5w8oJQ zk+*HlDXHV`96GL{FnY;%0P;Q3k~=#)@VK(Hw6n*em9tA{FK#o0=uK1?e~%pMA|%d| z0EtE#$ZM<-7my!&vdcIoE3WI}8j_YsXfj}Y1V~d@FlM<_1P-R6kj)_3NSjC@8AB}L zCLQJzBCALvc*O$}c^FppBs^n$5p*UjRZoryt5lHo2$ zmL`rJGE*z}*Wn5vV~S*)`(BYo%r!V&SsOJLNL9^_wz%A8gF50itv}p|cztJkePwfFae*L* z;AZ*w@>$+lWuxgucK>Ye?R~XJL(oZr83V~7lBS>li3vwl3hl5NE&M=-NL}^nIYZa9 z8Na4 z36QM`GDM2U24wc#Ck+`MTaf+0K(>jRzd2GN9Z=3@eC;-H0f~_vZy`ZaTn0$$F%ZcMh9H8WeYU|Ak{`4|Lj@|m-Y^fyc$Diu z1!R!Sg|Oi0hd>IC-D1%Ky5Pu&tnA@34QM&+;m_=_`<267fIYx5iSS@Ky!;~;b?ghI z*ZNfDuv5t9vHL!|12TE>0usQ6E*n{lJZ2iUxAe!g?BgTWknjLCNu)u5rdlhGlMaL3 zw$cX+4~j=2=H^5LX@#^tlKm+lMUyuKVqRhaQcnZ(ne?F*Q@tZ(CcHf26(FA+ z(*#IQ)U;+F`RG`Db;Hpb*-*sXex^q51zAcfKKD7bVuj>g#W4mFmtE6dxowUYdu*K_ zc@So6v_?AVWmL%_PMIWeB_I=A_kf&kK-Llr<=*uVKLq47KUu97(}}Tf*J2^c;|nY` z-KRNHJ9lZuWb;0oeCL)%v*$*eEX+8rCBe&Q&z?PXYKiq0oFd_IhphsVNTl(Sr)RxW z{8NC$7+WZP6polU1j!;aK$3&>40VlBC&yE55Z1e9<+N+)Uq2ITJn{&Uw(O&_`}e6a zYB`xUY}=-Wn@MB6V5Z~ps8JdoX*vVPrjQlWyj*F>r~a%$O@E>$8v@GwDm;y28#ru8 z*2_~GELdjh&_FuMt~Rl8#npaOK$=K!Y&=3pj*#jSPtlNXs|C`owsJP9RfkA|YXFOd zN1h5+vfXu&yYlTmDx^hH!wquS$q>yeF^bKcIB{-jZso=o*L9DGM#483G23Q59Gqv) zEzs?`;9dL2Pc5;MYWdXC20oh%`Nf^>eM=Sz|Rs1j!FLjdK?Fd=zxdHM|XMNh1fDXvVWX3aVIC0klqn1rV87c#0OBv2fva&hFJf_FNuX@9{ z3P=ndNsGsvR|mcj2|KYAstsfe9Qm+7R#*>?`VDg171+!=KV-BCc%U%?Im7>GaN9HE z(H5&L)Gs#zN`89l#tl|zoE~vY-iTlF0!#PDvnO6!W<}a@kR%7Ry3Y0$H1fQ7R7G3n z%U<99S||!i5d1&}j(o}vWIy`=LJth2y>)rt7GAi^B5{g0j`7mg_tgEGHUpV2GUi(4 z>iAG+!A*+4F1(0y9MLqMhcgR59;{9o?3ThFS#aOWiW^8PB-d`fHUv_3M89|x5*`Jl zYl4|nNMlbo{yK?d20(It1V_wIb(=?kInu*?tbPD;aQEukeEX6JTF42rYf+CegG68Edi==z*Eu6SL9-XfL z6Yj4tQo+R9x%m;lX;-~&Q=kZs7)YMo0mzM&6}&dFwQzjPNNREcpPl882M0!xC%ph7 zZIK57ju3J0f)pTs3y{iemqBKk@rvG=9~sXDq=@WRfDeFlC%LmT1_kqLNfzH3$*fT6 zwfYRMqWSTlK=au3QXP-7K~MvZj%m1nLHEEu=gQ%*P;+<$kWondwI{jyadvCQwGDtI zZ*3x%g+SyfNo*)kOk;uE4Tu>e;Nj;*=fulhSB*Qz#pyQUDmIa}!Z8*c3rO#@QWD<% zMAW@~jNICi=yGKZpVQ3 zrwXMRHg}Owk9z6U22T6Kjg1u|8>Yj!x=VK@VFhH?;{xA-i4>PjAr0gK_gvOi$Q%g^ z$qutNS7RPSWRUD}$V)6h#-x++ojiaNB5~af$J*-CE=Nk8#<#K$tJtP-h+~LsOty)` zED5N*_;cMVzCTML|0)WprdF=t{T}UPl1N=4LfLx3nItHj zSHroRgeY}$*NqxN7N$5}u1Q@Nr*4hB90(Kv60KMJ<LK1+h6}yK-z0#ifsH5OEu31l8s1!>-alh06}a^4Ixy)$1c56=ai!Y(Vx~D<1TL z>_^!>flOylB=T`<$2FJz0#?@zR=tm>rjU{>bLJ4+cgo2q){G3~&3mv&gsnj4Ghgo& z1bH~fj>8s?u0RLFK96p~tvXShzIoi#n1Tis;Som+VyNXL*XEu1nZIrAoZ;>9 zBAU9m%Nw;4dTMQ+G^l&dr}(87$ST^ubn3&+ix+91ytsaiYBs+5S8Q=+&wwUrB#}S= zIXnu!7#`b`3<`UG?KZAD;n8iXX{pa$#nQDmdw$R$mZv(wTB0&WE9o*ofmbZ zh&Q4INNa8D^l2@SL!TXq9Q0JQ{VBal_M{oI+oSSa1M=ZpHxCCxu#ZOBoiKKvEx_gv z`ykd=tWufMwU|hxwNaUIUUF{hs@JA)>5zku~`D%Ck?Sk$7!(o|)=c zfb6CVc|snCV+%(w%ngyvRr^_crV`V1dGQo#h6-sOj|LJXEs~)UAX{Hg!!a)b64SoY zY*F5_LK4&jNS`4kinVC}CZ)pwnX(}lW8RU=CP|al$uj?V2jsM^q*0%;cy+G}(7<>8 zZSlw{z^ec@vtwY}KMd}Rs0WeAqqms(|ppUCNULH)@yWY<8jhi{ z=d!WRW54oBE7S~u92RN>WOLaN35>ncVfI75d_>ZRpTcF=Wp5`SFC$z)kxsG68kIx- zUH;LnMr6t~T8#IN25D}FN6ZMCXRHDFh^L+e;E;7YO&U6gdeD`96t%d@mCS{$6|@ia z1W59uYcm`rt&p=E5Ot}|ZO)Yja%*vyH;917e9p|z%s7WhR$VP`_=54gC(OpP$0718 zJg&N6^E(3xkKcNfMn3xwC5qNZKBS6z%7_hLNFm>@w#K%HXCjaNJv;qS8w-(nNw{nW z-*}8fI<|P_>8Jk=Addw|^H@GRWy1lCgU;Mz1AUBz#vo}EkokuLKg}(y5vog7^$1!m43zmnTm}KsG33sNIf__Vp))9Kzxe)J}x`A z(gjE>q$M&g`)DGM>hS5`1JZEpVw&y_ujh_%*@yj@#z4B3ohV!M+0yC5=U{iPc}$d@ z4Y~r-7yEM;+>%alnSc$C&UD{AT|jPKI2|BGWHnY?MISFLG-o~GF%yMNB4af%)00xh zV=~KwWq@&iAC27H()TnIv7rTx|dON!S^uw>Bdp_LWzXrizd z&9p(Sc2l?xATyKg zyyU{oIo?AzZ!R2~yjVrqnLG%PMiL>zoaWA-1l(-qHIG`q%X&#K3c7ohG-oYlL58yVcEBvzg8D8nW&|;S7r)Lq!wEIdS(a`{jX_X6s4WT>|xyRxQUxs~o z0%Rmo;@CJoNAeVq0)blpQM||Ng~+$ELF)3Yj~T0%TK231nLn0FdA90jV=&+QVyN zAvj_%+2av?43MWLK#l^Wn`zT~1|P7m86EbHReGGUK)u-5lsm0m(Ql zhEVo8e%w~;FI?*Dh_u5Fkah8Yh_q7r9O{pM{@yWXASX;_DZO3@TWSXo*21B#*Jsd> zJ7|YI>L%iZ);z_`W5TJ|{xX}U8j!-Vx$N8oi$WU6XOb9?LgJ^fHhbNW93;jkKX|qzoRO(y7;`q$fcG|^@pTKdAGexx*p%B(Lh?~OhQc{7$g_#N<#|=NR^)1~4E>Xb ztmJqdA(71six2pw(CWgPe0}Kq=t88a?EN*zKgDf$R37vm3t71S^$YWe0VlhpxJZtu zdvi-!AYZ_(?%WxUkg91<=XN?(;HM3wy43_^ZuYD_lv4n?tAu(v?ePrx@zW5wv(2r? ze+-a66_0>Mc(#fCk)*mF5nTpN4mb(^>MS%3^V1R66SpX;?->^u=8j)`H z6_IwEFZ$q!;97GNCADpQrgGAs+aKwQ4Q|+MgRil6f&|IJF+hIb3JED4kQPV-IZQ*w zWv4&4wVy>A^$?C}^%*K;1M($ryC*dckQnI^Cw;K-YA};Z6f@Mt@inOlfK5o*wuW7%M}0;9<7ypM~B$SGc0hvk5fOcrRV%7 zYnWzcS{{2`&_Nu*^)ymxAXPsPkkgp5mb2gpkhSd!ja2Rjja*sZfAu$i{OFU*0GWZq z0*fOx^_?6yJXUG3cWY9zh?@Nmk%?qv!4Y#v1CBr8(THr_jYuSscBRBghbz|u zge_p2JZyQlPvmgIaJV?7S$J&z+LpaO-o;0dJpi&7WJe(zkh-6}U72JYc_i(_yRA?& z1ac%G={Oj zyjnAhTiWRdfL{V6=SPx1;_-Lb$ydL*bCq(?XjlI;!8GYJLrriOk1YeST>~jctr%yz z2c$$28gFZri-~lF`}i_MZtUC%kRoz2{R(!*5&9+?N$v+Mapw@pTLokl5L0Jymu>B! z$Yn=un`5PGn4h&mqOBImg0h9o6ap34y!aiCa1>}r_84lf-)jWMCf`09W(US$3ETD< z9(xubpG{sotIv*9$YCivhse^%W(edk?GqS#3W?tMuK%gpM=wRI#5lab74{%N!XqLn zul)c>7xC9sEp#()%m79pM-56Ig<~!h39uutVbQ%dS20~0_a(PrM<4gkylR2eJJ;`< z$MMvHI^~oMSR=ov)Q^B9TAKC5HoyU7l_cTQtQL@UxkTke^{3}(l3WDH&AVs56p)t# zWF*pF8YQexi{qpp?GF%{bENb!cP7c)_AQ2F10sh&_K%RLvnIT>wW5u9JqF0bmWGT%rrDX%=# z^NDk>9h9w#-Pgwi*@KCi3w@V8R7l<8Wg;7pN&c9}SkuSA_^``HAe#wGJ;e{l^{SL@ ze+`BD?-@xSLDKBm8~1>$UW`Jno+GqsE`w_xe)69y^Gzb0!SA4oG-Rge^plIbz7oG~EK-@CcA^IG*9*J8t5&TY}s` zibnw{g?a_2Z6do% literal 0 HcmV?d00001 diff --git a/demo/web-desktop/assets/common/native/45/45be59f3-5655-4369-9e9f-455c81d2ddd9.ca872.png b/demo/web-desktop/assets/common/native/45/45be59f3-5655-4369-9e9f-455c81d2ddd9.ca872.png new file mode 100644 index 0000000000000000000000000000000000000000..c8fdfac77cd9190c54b4288937a2acc47f9325fa GIT binary patch literal 68654 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�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%0A-v#qZhZ6e=9)WvYo)qg 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 literal 0 HcmV?d00001 diff --git a/demo/web-desktop/assets/common/native/68/6843f00b-0ef4-4b7c-aac0-42ee42635e55.9a531.png b/demo/web-desktop/assets/common/native/68/6843f00b-0ef4-4b7c-aac0-42ee42635e55.9a531.png new file mode 100644 index 0000000000000000000000000000000000000000..18265803b0f78942dab8d949ce9d4c4d9762943d GIT binary patch literal 105052 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 FV1kJ4Ed~Gp literal 0 HcmV?d00001 diff --git a/demo/web-desktop/assets/common/native/6e/6e056173-d285-473c-b206-40a7fff5386e.6d3cf.png b/demo/web-desktop/assets/common/native/6e/6e056173-d285-473c-b206-40a7fff5386e.6d3cf.png new file mode 100644 index 0000000000000000000000000000000000000000..8050170ccf3fb7d031bc06928ce6f6b643d25d07 GIT binary patch literal 418 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU3?z3ec*Fy#oB*E?SD(znPoF-SnwolhdjlCC zKYj#~5b*#1e|vlT+qZAOfB(L*v2owNeQj-RPEJlCAt4VRK8%Tpv9z>&{rYujY3cLl z&zqW>y1ToRlaue>y*qdA+><9yUcY|*(xpoU1qEJSUYj;;%F4>xY$aL&w3n+S$S;@y zX!^U(32!H|HD~(V1&ZGGba4!+xOMl+O};}4BCdfJp_vP(+}e5W#sB|{nFTLL>^$=0 zNnKpxF3vaKQ&&Dn={8B$mb*Hs(?Ua{Ux(%D1e22sJR&^qOlD=A+Ty*+;7WyA%fhb) zoQIDces){*cC2|=ar%|u8~F@3m@8lJE4!W3S-$34!CGzosoQ$5UOt&Kx7f%ad+LMG zyY(&Z+yRsB#&%}TE)#pV_jBwgOO22BGL^pHWlmam?)0A+=J|?SlK-A#a^xsZW>;q9 zO49LT(0K7HIpUI^-GYS=E1H|0w?%9=(G~wFpE*tM(Y|N%%UM@U=ie2^p(+RTCWEJ| KpUXO@geCy3Aj$y% literal 0 HcmV?d00001 diff --git a/demo/web-desktop/assets/common/native/70/702455ac-9b92-4dd7-b143-cb02342dbe48.7b3fa.png b/demo/web-desktop/assets/common/native/70/702455ac-9b92-4dd7-b143-cb02342dbe48.7b3fa.png new file mode 100644 index 0000000000000000000000000000000000000000..791d8fad6ad84d74c27b8f1ee1a2f3b5423ffd94 GIT binary patch literal 138343 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

JQ>TSG8IePfoDI)`4 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 z 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 VxEs7{IamMy002ovPDHLkV1lM^cN+iz literal 0 HcmV?d00001 diff --git a/demo/web-desktop/assets/common/native/c1/c11dfdd2-97c6-409c-9c0f-fdfa681f16a9.d86d7.png b/demo/web-desktop/assets/common/native/c1/c11dfdd2-97c6-409c-9c0f-fdfa681f16a9.d86d7.png new file mode 100644 index 0000000000000000000000000000000000000000..5c3b67dbb2ff22e772988276bd9ea50393414dfa GIT binary patch literal 79283 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 literal 0 HcmV?d00001 diff --git a/demo/web-desktop/assets/common/native/e8/e8aa5e1c-0730-4ebe-81a1-e7fa0db9be7d.a6625/SFNSMonoItalic.ttf b/demo/web-desktop/assets/common/native/e8/e8aa5e1c-0730-4ebe-81a1-e7fa0db9be7d.a6625/SFNSMonoItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..41ee30e3e4a2d3623bf13491804a755b527e5382 GIT binary patch literal 199276 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�-?!VlcQ;2V%n7Bob>v^xs-~TKZc%%D#8yvA z8Z)MA*J;z{hlb8gf|}sSvg`IYvCwyEIIwJDRGY&M zJ9zdB>W{!KN_Y25mqJ5xa`2F3?xX3!ceuopeSLd7SenQpv^p=_ zMXak&b$eP@--VIKvj)4NgQBCMXFu|kygyDgJ>5XhD9{tZ)a}ys?h}A62k-BVz;yjW z5ergt6{~PiGHaMMl2NYmXV0E#I1hp83lYqlH+SAbe{}b1=4&R>WcG?B(L49!aa=Fc zbQm$upf`>Tao2tY^QJ=b0ch1UQC*rIXo?IM#)pN)#a$rcqtk;XTt2jE10tq3CUGO2 zT8}PA$8 bG#T5%Rp24tSd_!p(&hnZ^BlqqAPn<=xp?(J literal 0 HcmV?d00001 diff --git a/demo/web-desktop/assets/home/config.9b664.json b/demo/web-desktop/assets/home/config.9b664.json new file mode 100644 index 00000000..e154104f --- /dev/null +++ b/demo/web-desktop/assets/home/config.9b664.json @@ -0,0 +1,30 @@ +{ + "paths": { + "e3EaADwKFP+ZmDIVTeFF63": [ + "home", + "cc.Prefab" + ] + }, + "uuids": [ + "e3EaADwKFP+ZmDIVTeFF63" + ], + "scenes": {}, + "redirect": [ + "e3EaADwKFP+ZmDIVTeFF63", + 0 + ], + "deps": [ + "main" + ], + "packs": {}, + "name": "home", + "importBase": "import", + "nativeBase": "native", + "debug": true, + "isZip": false, + "encrypted": false, + "versions": { + "import": [], + "native": [] + } +} \ No newline at end of file diff --git a/demo/web-desktop/assets/home/index.9b664.js b/demo/web-desktop/assets/home/index.9b664.js new file mode 100644 index 00000000..a4d827f4 --- /dev/null +++ b/demo/web-desktop/assets/home/index.9b664.js @@ -0,0 +1,29 @@ +(function e(t, n, r) { + function s(o, u) { + if (!n[o]) { + if (!t[o]) { + var b = o.split("/"); + b = b[b.length - 1]; + if (!t[b]) { + var a = "function" == typeof __require && __require; + if (!u && a) return a(b, !0); + if (i) return i(b, !0); + throw new Error("Cannot find module '" + o + "'"); + } + o = b; + } + var f = n[o] = { + exports: {} + }; + t[o][0].call(f.exports, function(e) { + var n = t[o][1][e]; + return s(n || e); + }, f, f.exports, e, t, n, r); + } + return n[o].exports; + } + var i = "function" == typeof __require && __require; + for (var o = 0; o < r.length; o++) s(r[o]); + return s; +})({}, {}, []); +//# sourceMappingURL=index.js.map diff --git a/demo/web-desktop/assets/home/index.js.map b/demo/web-desktop/assets/home/index.js.map new file mode 100644 index 00000000..a6d01198 --- /dev/null +++ b/demo/web-desktop/assets/home/index.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"index.js"} \ No newline at end of file diff --git a/demo/web-desktop/assets/internal/config.8360b.json b/demo/web-desktop/assets/internal/config.8360b.json new file mode 100644 index 00000000..da9fabd2 --- /dev/null +++ b/demo/web-desktop/assets/internal/config.8360b.json @@ -0,0 +1,133 @@ +{ + "paths": { + "30aC+Hnw1PF4pEcoY3kUYb": [ + "effects/builtin-2d-graphics", + "cc.EffectAsset" + ], + "14TDKXr2NJ6LjvHPops74o": [ + "effects/builtin-2d-gray-sprite", + "cc.EffectAsset" + ], + "f1h0LXVtJOta5JLZ1xCzfI": [ + "effects/builtin-2d-label", + "cc.EffectAsset" + ], + "0ek66qC1NOQLjgYmi04HvX": [ + "effects/builtin-2d-spine", + "cc.EffectAsset" + ], + "28dPjdQWxEQIG3VVl1Qm6T": [ + "effects/builtin-2d-sprite", + "cc.EffectAsset" + ], + "2afAA24LNP4YmYiaVLiivs": [ + "effects/builtin-3d-trail", + "cc.EffectAsset" + ], + "c0BAyVxX9JzZy8EjFrc9DU": [ + "effects/builtin-clear-stencil", + "cc.EffectAsset" + ], + "6dkeWRTOBGXICfYQ7JUBnG": [ + "effects/builtin-unlit", + "cc.EffectAsset" + ], + "6fgBCSDDdPMInvyNlggls2": [ + "materials/builtin-2d-base", + "cc.Material" + ], + "a1U5RdJRFMFL57BdJC9H1X": [ + "materials/builtin-2d-graphics", + "cc.Material" + ], + "3ae7efMv1CLq2ilvUY/tQi": [ + "materials/builtin-2d-gray-sprite", + "cc.Material" + ], + "e0LYfU5ZlNFoAB4UiRrGUG": [ + "materials/builtin-2d-label", + "cc.Material" + ], + "7a/QZLET9IDreTiBfRn2PD": [ + "materials/builtin-2d-spine", + "cc.Material" + ], + "ecpdLyjvZBwrvm+cedCcQy": [ + "materials/builtin-2d-sprite", + "cc.Material" + ], + "46bU+b5fROqIXVPG6aZWWK": [ + "materials/builtin-3d-trail", + "cc.Material" + ], + "cffgu4qBxEqa150o1DmRAy": [ + "materials/builtin-clear-stencil", + "cc.Material" + ], + "2aKWBXJHxKHLvrBUi2yYZQ": [ + "materials/builtin-unlit", + "cc.Material" + ] + }, + "uuids": [ + "30aC+Hnw1PF4pEcoY3kUYb", + "14TDKXr2NJ6LjvHPops74o", + "f1h0LXVtJOta5JLZ1xCzfI", + "0ek66qC1NOQLjgYmi04HvX", + "28dPjdQWxEQIG3VVl1Qm6T", + "2afAA24LNP4YmYiaVLiivs", + "c0BAyVxX9JzZy8EjFrc9DU", + "6dkeWRTOBGXICfYQ7JUBnG", + "6fgBCSDDdPMInvyNlggls2", + "a1U5RdJRFMFL57BdJC9H1X", + "3ae7efMv1CLq2ilvUY/tQi", + "e0LYfU5ZlNFoAB4UiRrGUG", + "7a/QZLET9IDreTiBfRn2PD", + "ecpdLyjvZBwrvm+cedCcQy", + "46bU+b5fROqIXVPG6aZWWK", + "cffgu4qBxEqa150o1DmRAy", + "2aKWBXJHxKHLvrBUi2yYZQ", + "02delMVqdBD70a/HSD99FK" + ], + "scenes": {}, + "redirect": [], + "deps": [], + "packs": { + "0967b326a": [ + "02delMVqdBD70a/HSD99FK", + "0ek66qC1NOQLjgYmi04HvX", + "14TDKXr2NJ6LjvHPops74o", + "28dPjdQWxEQIG3VVl1Qm6T", + "2aKWBXJHxKHLvrBUi2yYZQ", + "2afAA24LNP4YmYiaVLiivs", + "30aC+Hnw1PF4pEcoY3kUYb", + "3ae7efMv1CLq2ilvUY/tQi", + "46bU+b5fROqIXVPG6aZWWK", + "6dkeWRTOBGXICfYQ7JUBnG", + "6fgBCSDDdPMInvyNlggls2", + "7a/QZLET9IDreTiBfRn2PD", + "a1U5RdJRFMFL57BdJC9H1X", + "c0BAyVxX9JzZy8EjFrc9DU", + "cffgu4qBxEqa150o1DmRAy", + "e0LYfU5ZlNFoAB4UiRrGUG", + "ecpdLyjvZBwrvm+cedCcQy", + "f1h0LXVtJOta5JLZ1xCzfI" + ] + }, + "name": "internal", + "importBase": "import", + "nativeBase": "native", + "debug": true, + "isZip": false, + "encrypted": false, + "versions": { + "import": [ + "0967b326a", + "c3301" + ], + "native": [ + "02delMVqdBD70a/HSD99FK", + "cea68" + ] + } +} \ No newline at end of file diff --git a/demo/web-desktop/assets/internal/import/09/0967b326a.c3301.json b/demo/web-desktop/assets/internal/import/09/0967b326a.c3301.json new file mode 100644 index 00000000..8c185db2 --- /dev/null +++ b/demo/web-desktop/assets/internal/import/09/0967b326a.c3301.json @@ -0,0 +1,2032 @@ +[ + 1, + [ + "02delMVqdBD70a/HSD99FK", + "28dPjdQWxEQIG3VVl1Qm6T", + "6dkeWRTOBGXICfYQ7JUBnG", + "14TDKXr2NJ6LjvHPops74o", + "2afAA24LNP4YmYiaVLiivs", + "0ek66qC1NOQLjgYmi04HvX", + "30aC+Hnw1PF4pEcoY3kUYb", + "c0BAyVxX9JzZy8EjFrc9DU", + "f1h0LXVtJOta5JLZ1xCzfI" + ], + [ + "_effectAsset", + "diffuseTexture", + "mainTexture" + ], + [ + "cc.Texture2D", + [ + "cc.EffectAsset", + [ + "_name", + "shaders", + "techniques" + ], + 0 + ], + [ + "cc.Material", + [ + "_name", + "_techniqueData" + ], + 2, + 11 + ], + [ + "cc.Material", + [ + "_name", + "_techniqueData" + ], + 1 + ] + ], + [ + [ + 1, + 0, + 1, + 2, + 4 + ], + [ + 3, + 0, + 1, + 3 + ], + [ + 2, + 0, + 1, + 2 + ] + ], + [ + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + [ + 0, + "builtin-2d-spine", + [ + { + "hash": 3550530479, + "record": null, + "name": "builtin-2d-spine|vs|fs", + "glsl3": { + "vert": "\nprecision highp float;\nuniform CCGlobal {\n mat4 cc_matView;\n mat4 cc_matViewInv;\n mat4 cc_matProj;\n mat4 cc_matProjInv;\n mat4 cc_matViewProj;\n mat4 cc_matViewProjInv;\n vec4 cc_cameraPos;\n vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nin vec3 a_position;\nin vec4 a_color;\n#if USE_TINT\n in vec4 a_color0;\n#endif\nin vec2 a_uv0;\nout vec2 v_uv0;\nout vec4 v_light;\n#if USE_TINT\n out vec4 v_dark;\n#endif\nvoid main () {\n mat4 mvp;\n #if CC_USE_MODEL\n mvp = cc_matViewProj * cc_matWorld;\n #else\n mvp = cc_matViewProj;\n #endif\n v_uv0 = a_uv0;\n v_light = a_color;\n #if USE_TINT\n v_dark = a_color0;\n #endif\n gl_Position = mvp * vec4(a_position, 1);\n}", + "frag": "\nprecision highp float;\nuniform sampler2D texture;\nin vec2 v_uv0;\nin vec4 v_light;\n#if USE_TINT\n in vec4 v_dark;\n#endif\n#if USE_ALPHA_TEST\n uniform ALPHA_TEST {\n float alphaThreshold;\n };\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvoid main () {\n vec4 texColor = vec4(1.0);\n vec4 texture_tmp = texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture\n texture_tmp.a *= texture(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n texColor.rgb *= (texture_tmp.rgb * texture_tmp.rgb);\n texColor.a *= texture_tmp.a;\n #else\n texColor *= texture_tmp;\n #endif\n vec4 finalColor;\n #if USE_TINT\n finalColor.a = v_light.a * texColor.a;\n finalColor.rgb = ((texColor.a - 1.0) * v_dark.a + 1.0 - texColor.rgb) * v_dark.rgb + texColor.rgb * v_light.rgb;\n #else\n finalColor = texColor * v_light;\n #endif\n ALPHA_TEST(finalColor);\n gl_FragColor = finalColor;\n}" + }, + "glsl1": { + "vert": "\nprecision highp float;\nuniform mat4 cc_matViewProj;\nuniform mat4 cc_matWorld;\nattribute vec3 a_position;\nattribute vec4 a_color;\n#if USE_TINT\n attribute vec4 a_color0;\n#endif\nattribute vec2 a_uv0;\nvarying vec2 v_uv0;\nvarying vec4 v_light;\n#if USE_TINT\n varying vec4 v_dark;\n#endif\nvoid main () {\n mat4 mvp;\n #if CC_USE_MODEL\n mvp = cc_matViewProj * cc_matWorld;\n #else\n mvp = cc_matViewProj;\n #endif\n v_uv0 = a_uv0;\n v_light = a_color;\n #if USE_TINT\n v_dark = a_color0;\n #endif\n gl_Position = mvp * vec4(a_position, 1);\n}", + "frag": "\nprecision highp float;\nuniform sampler2D texture;\nvarying vec2 v_uv0;\nvarying vec4 v_light;\n#if USE_TINT\n varying vec4 v_dark;\n#endif\n#if USE_ALPHA_TEST\n uniform float alphaThreshold;\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvoid main () {\n vec4 texColor = vec4(1.0);\n vec4 texture_tmp = texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture\n texture_tmp.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n texColor.rgb *= (texture_tmp.rgb * texture_tmp.rgb);\n texColor.a *= texture_tmp.a;\n #else\n texColor *= texture_tmp;\n #endif\n vec4 finalColor;\n #if USE_TINT\n finalColor.a = v_light.a * texColor.a;\n finalColor.rgb = ((texColor.a - 1.0) * v_dark.a + 1.0 - texColor.rgb) * v_dark.rgb + texColor.rgb * v_light.rgb;\n #else\n finalColor = texColor * v_light;\n #endif\n ALPHA_TEST(finalColor);\n gl_FragColor = finalColor;\n}" + }, + "builtins": { + "globals": { + "blocks": [ + { + "name": "CCGlobal", + "defines": [] + } + ], + "samplers": [] + }, + "locals": { + "blocks": [ + { + "name": "CCLocal", + "defines": [] + } + ], + "samplers": [] + } + }, + "defines": [ + { + "name": "USE_TINT", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_MODEL", + "type": "boolean", + "defines": [] + }, + { + "name": "USE_ALPHA_TEST", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture", + "type": "boolean", + "defines": [] + }, + { + "name": "INPUT_IS_GAMMA", + "type": "boolean", + "defines": [] + } + ], + "blocks": [ + { + "name": "ALPHA_TEST", + "binding": 0, + "members": [ + { + "name": "alphaThreshold", + "type": 13, + "count": 1 + } + ], + "defines": [ + "USE_ALPHA_TEST" + ] + } + ], + "samplers": [ + { + "name": "texture", + "type": 29, + "count": 1, + "binding": 30, + "defines": [] + } + ] + } + ], + [ + { + "passes": [ + { + "program": "builtin-2d-spine|vs|fs", + "blendState": { + "targets": [ + { + "blend": true + } + ] + }, + "rasterizerState": { + "cullMode": 0 + }, + "properties": { + "texture": { + "value": "white", + "type": 29 + }, + "alphaThreshold": { + "type": 13, + "value": [ + 0.5 + ] + } + } + } + ] + } + ] + ] + ], + 0, + 0, + [], + [], + [] + ], + [ + [ + [ + 0, + "builtin-2d-gray-sprite", + [ + { + "hash": 4278481454, + "record": null, + "name": "builtin-2d-gray-sprite|vs|fs", + "glsl3": { + "vert": "\nprecision highp float;\nuniform CCGlobal {\n mat4 cc_matView;\n mat4 cc_matViewInv;\n mat4 cc_matProj;\n mat4 cc_matProjInv;\n mat4 cc_matViewProj;\n mat4 cc_matViewProjInv;\n vec4 cc_cameraPos;\n vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n};\nin vec3 a_position;\nin mediump vec2 a_uv0;\nout mediump vec2 v_uv0;\nin vec4 a_color;\nout vec4 v_color;\nvoid main () {\n gl_Position = cc_matViewProj * vec4(a_position, 1);\n v_uv0 = a_uv0;\n v_color = a_color;\n}", + "frag": "\nprecision highp float;\nuniform sampler2D texture;\nin mediump vec2 v_uv0;\nin vec4 v_color;\nvoid main () {\n vec4 color = v_color;\n vec4 texture_tmp = texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture\n texture_tmp.a *= texture(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n color.rgb *= (texture_tmp.rgb * texture_tmp.rgb);\n color.a *= texture_tmp.a;\n #else\n color *= texture_tmp;\n #endif\n float gray = 0.2126*color.r + 0.7152*color.g + 0.0722*color.b;\n gl_FragColor = vec4(gray, gray, gray, color.a);\n}" + }, + "glsl1": { + "vert": "\nprecision highp float;\nuniform mat4 cc_matViewProj;\nattribute vec3 a_position;\nattribute mediump vec2 a_uv0;\nvarying mediump vec2 v_uv0;\nattribute vec4 a_color;\nvarying vec4 v_color;\nvoid main () {\n gl_Position = cc_matViewProj * vec4(a_position, 1);\n v_uv0 = a_uv0;\n v_color = a_color;\n}", + "frag": "\nprecision highp float;\nuniform sampler2D texture;\nvarying mediump vec2 v_uv0;\nvarying vec4 v_color;\nvoid main () {\n vec4 color = v_color;\n vec4 texture_tmp = texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture\n texture_tmp.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n color.rgb *= (texture_tmp.rgb * texture_tmp.rgb);\n color.a *= texture_tmp.a;\n #else\n color *= texture_tmp;\n #endif\n float gray = 0.2126*color.r + 0.7152*color.g + 0.0722*color.b;\n gl_FragColor = vec4(gray, gray, gray, color.a);\n}" + }, + "builtins": { + "globals": { + "blocks": [ + { + "name": "CCGlobal", + "defines": [] + } + ], + "samplers": [] + }, + "locals": { + "blocks": [], + "samplers": [] + } + }, + "defines": [ + { + "name": "CC_USE_ALPHA_ATLAS_texture", + "type": "boolean", + "defines": [] + }, + { + "name": "INPUT_IS_GAMMA", + "type": "boolean", + "defines": [] + } + ], + "blocks": [], + "samplers": [ + { + "name": "texture", + "type": 29, + "count": 1, + "binding": 30, + "defines": [] + } + ] + } + ], + [ + { + "passes": [ + { + "program": "builtin-2d-gray-sprite|vs|fs", + "blendState": { + "targets": [ + { + "blend": true + } + ] + }, + "rasterizerState": { + "cullMode": 0 + }, + "properties": { + "texture": { + "value": "white", + "type": 29 + } + } + } + ] + } + ] + ] + ], + 0, + 0, + [], + [], + [] + ], + [ + [ + [ + 0, + "builtin-2d-sprite", + [ + { + "hash": 3278106612, + "record": null, + "name": "builtin-2d-sprite|vs|fs", + "glsl3": { + "vert": "\nprecision highp float;\nuniform CCGlobal {\n mat4 cc_matView;\n mat4 cc_matViewInv;\n mat4 cc_matProj;\n mat4 cc_matProjInv;\n mat4 cc_matViewProj;\n mat4 cc_matViewProjInv;\n vec4 cc_cameraPos;\n vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nin vec3 a_position;\nin vec4 a_color;\nout vec4 v_color;\n#if USE_TEXTURE\nin vec2 a_uv0;\nout vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}", + "frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform ALPHA_TEST {\n float alphaThreshold;\n };\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nin vec4 v_color;\n#if USE_TEXTURE\nin vec2 v_uv0;\nuniform sampler2D texture;\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n vec4 texture_tmp = texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture\n texture_tmp.a *= texture(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture_tmp.rgb * texture_tmp.rgb);\n o.a *= texture_tmp.a;\n #else\n o *= texture_tmp;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n}" + }, + "glsl1": { + "vert": "\nprecision highp float;\nuniform mat4 cc_matViewProj;\nuniform mat4 cc_matWorld;\nattribute vec3 a_position;\nattribute vec4 a_color;\nvarying vec4 v_color;\n#if USE_TEXTURE\nattribute vec2 a_uv0;\nvarying vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}", + "frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform float alphaThreshold;\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvarying vec4 v_color;\n#if USE_TEXTURE\nvarying vec2 v_uv0;\nuniform sampler2D texture;\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n vec4 texture_tmp = texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture\n texture_tmp.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture_tmp.rgb * texture_tmp.rgb);\n o.a *= texture_tmp.a;\n #else\n o *= texture_tmp;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n}" + }, + "builtins": { + "globals": { + "blocks": [ + { + "name": "CCGlobal", + "defines": [] + } + ], + "samplers": [] + }, + "locals": { + "blocks": [ + { + "name": "CCLocal", + "defines": [] + } + ], + "samplers": [] + } + }, + "defines": [ + { + "name": "USE_TEXTURE", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_MODEL", + "type": "boolean", + "defines": [] + }, + { + "name": "USE_ALPHA_TEST", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture", + "type": "boolean", + "defines": [ + "USE_TEXTURE" + ] + }, + { + "name": "INPUT_IS_GAMMA", + "type": "boolean", + "defines": [ + "USE_TEXTURE" + ] + } + ], + "blocks": [ + { + "name": "ALPHA_TEST", + "binding": 0, + "members": [ + { + "name": "alphaThreshold", + "type": 13, + "count": 1 + } + ], + "defines": [ + "USE_ALPHA_TEST" + ] + } + ], + "samplers": [ + { + "name": "texture", + "type": 29, + "count": 1, + "binding": 30, + "defines": [ + "USE_TEXTURE" + ] + } + ] + } + ], + [ + { + "passes": [ + { + "program": "builtin-2d-sprite|vs|fs", + "blendState": { + "targets": [ + { + "blend": true + } + ] + }, + "rasterizerState": { + "cullMode": 0 + }, + "properties": { + "texture": { + "value": "white", + "type": 29 + }, + "alphaThreshold": { + "type": 13, + "value": [ + 0.5 + ] + } + } + } + ] + } + ] + ] + ], + 0, + 0, + [], + [], + [] + ], + [ + [ + [ + 2, + "builtin-unlit", + [ + {}, + "0", + 11, + [ + { + "defines": { + "USE_DIFFUSE_TEXTURE": true + } + }, + "props", + 11, + [ + {}, + "diffuseTexture", + 6, + 0 + ] + ] + ] + ] + ], + 0, + 0, + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 0, + 2 + ] + ], + [ + [ + [ + 0, + "builtin-3d-trail", + [ + { + "hash": 2929688198, + "record": null, + "name": "builtin-3d-trail|particle-trail:vs_main|tinted-fs:add", + "glsl3": { + "vert": "\nprecision mediump float;\nuniform Constants{\n vec4 mainTiling_Offset;\n vec4 frameTile_velLenScale;\n vec4 scale;\n};\nuniform CCGlobal {\n mat4 cc_matView;\n mat4 cc_matViewInv;\n mat4 cc_matProj;\n mat4 cc_matProjInv;\n mat4 cc_matViewProj;\n mat4 cc_matViewProjInv;\n vec4 cc_cameraPos;\n vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nout vec2 uv;\nout vec4 color;\nin vec3 a_position;\nin vec4 a_texCoord;\nin vec3 a_texCoord1;\nin vec3 a_texCoord2;\nin vec4 a_color;\n#if CC_DRAW_WIRE_FRAME\n out vec3 vBarycentric;\n#endif\nvec4 vs_main() {\n highp vec4 pos = vec4(a_position, 1);\n vec4 velocity = vec4(a_texCoord1.xyz, 0);\n#if !CC_USE_WORLD_SPACE\n pos = cc_matWorld * pos;\n velocity = cc_matWorld * velocity;\n#endif\n float vertOffset = (a_texCoord.x - 0.5) * a_texCoord.y;\n vec3 camUp = normalize(cross(pos.xyz - cc_cameraPos.xyz, velocity.xyz));\n pos.xyz += camUp * vertOffset;\n pos = cc_matViewProj * pos;\n uv = a_texCoord.zw * mainTiling_Offset.xy + mainTiling_Offset.zw;;\n color = a_color;\n#if CC_DRAW_WIRE_FRAME\n vBarycentric = a_texCoord2;\n#endif\n return pos;\n}\nvoid main() { gl_Position = vs_main(); }", + "frag": "\nprecision mediump float;\nvec4 CCFragOutput (vec4 color) {\n #if OUTPUT_TO_GAMMA\n color.rgb = sqrt(color.rgb);\n #endif\n\treturn color;\n}\nin vec2 uv;\nin vec4 color;\n#if CC_DRAW_WIRE_FRAME\n in vec3 vBarycentric;\n#endif\nuniform sampler2D mainTexture;\nuniform FragConstants {\n vec4 tintColor;\n};\nvec4 add () {\n vec4 col = 2.0 * color * tintColor * texture(mainTexture, uv);\n #if CC_DRAW_WIRE_FRAME\n if (any(lessThan(vBarycentric, vec3(0.02)))) {\n col = vec4(0., 1., 1., 1.);\n }\n #endif\n return CCFragOutput(col);\n}\nout vec4 cc_FragColor;\nvoid main() { cc_FragColor = add(); }" + }, + "glsl1": { + "vert": "\nprecision mediump float;\nuniform vec4 mainTiling_Offset;\nuniform mat4 cc_matViewProj;\nuniform vec4 cc_cameraPos;\nuniform mat4 cc_matWorld;\nvarying vec2 uv;\nvarying vec4 color;\nattribute vec3 a_position;\nattribute vec4 a_texCoord;\nattribute vec3 a_texCoord1;\nattribute vec3 a_texCoord2;\nattribute vec4 a_color;\n#if CC_DRAW_WIRE_FRAME\n varying vec3 vBarycentric;\n#endif\nvec4 vs_main() {\n highp vec4 pos = vec4(a_position, 1);\n vec4 velocity = vec4(a_texCoord1.xyz, 0);\n#if !CC_USE_WORLD_SPACE\n pos = cc_matWorld * pos;\n velocity = cc_matWorld * velocity;\n#endif\n float vertOffset = (a_texCoord.x - 0.5) * a_texCoord.y;\n vec3 camUp = normalize(cross(pos.xyz - cc_cameraPos.xyz, velocity.xyz));\n pos.xyz += camUp * vertOffset;\n pos = cc_matViewProj * pos;\n uv = a_texCoord.zw * mainTiling_Offset.xy + mainTiling_Offset.zw;;\n color = a_color;\n#if CC_DRAW_WIRE_FRAME\n vBarycentric = a_texCoord2;\n#endif\n return pos;\n}\nvoid main() { gl_Position = vs_main(); }", + "frag": "\nprecision mediump float;\nvec4 CCFragOutput (vec4 color) {\n #if OUTPUT_TO_GAMMA\n color.rgb = sqrt(color.rgb);\n #endif\n\treturn color;\n}\nvarying vec2 uv;\nvarying vec4 color;\n#if CC_DRAW_WIRE_FRAME\n varying vec3 vBarycentric;\n#endif\nuniform sampler2D mainTexture;\nuniform vec4 tintColor;\nvec4 add () {\n vec4 col = 2.0 * color * tintColor * texture2D(mainTexture, uv);\n #if CC_DRAW_WIRE_FRAME\n if (any(lessThan(vBarycentric, vec3(0.02)))) {\n col = vec4(0., 1., 1., 1.);\n }\n #endif\n return CCFragOutput(col);\n}\nvoid main() { gl_FragColor = add(); }" + }, + "builtins": { + "globals": { + "blocks": [ + { + "name": "CCGlobal", + "defines": [] + } + ], + "samplers": [] + }, + "locals": { + "blocks": [ + { + "name": "CCLocal", + "defines": [] + } + ], + "samplers": [] + } + }, + "defines": [ + { + "name": "CC_DRAW_WIRE_FRAME", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_WORLD_SPACE", + "type": "boolean", + "defines": [] + }, + { + "name": "OUTPUT_TO_GAMMA", + "type": "boolean", + "defines": [] + } + ], + "blocks": [ + { + "name": "Constants", + "binding": 0, + "members": [ + { + "name": "mainTiling_Offset", + "type": 16, + "count": 1 + }, + { + "name": "frameTile_velLenScale", + "type": 16, + "count": 1 + }, + { + "name": "scale", + "type": 16, + "count": 1 + } + ], + "defines": [] + }, + { + "name": "FragConstants", + "binding": 1, + "members": [ + { + "name": "tintColor", + "type": 16, + "count": 1 + } + ], + "defines": [] + } + ], + "samplers": [ + { + "name": "mainTexture", + "type": 29, + "count": 1, + "binding": 30, + "defines": [] + } + ] + }, + { + "hash": 4224037318, + "record": null, + "name": "builtin-3d-trail|particle-trail:vs_main|tinted-fs:multiply", + "glsl3": { + "vert": "\nprecision mediump float;\nuniform Constants{\n vec4 mainTiling_Offset;\n vec4 frameTile_velLenScale;\n vec4 scale;\n};\nuniform CCGlobal {\n mat4 cc_matView;\n mat4 cc_matViewInv;\n mat4 cc_matProj;\n mat4 cc_matProjInv;\n mat4 cc_matViewProj;\n mat4 cc_matViewProjInv;\n vec4 cc_cameraPos;\n vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nout vec2 uv;\nout vec4 color;\nin vec3 a_position;\nin vec4 a_texCoord;\nin vec3 a_texCoord1;\nin vec3 a_texCoord2;\nin vec4 a_color;\n#if CC_DRAW_WIRE_FRAME\n out vec3 vBarycentric;\n#endif\nvec4 vs_main() {\n highp vec4 pos = vec4(a_position, 1);\n vec4 velocity = vec4(a_texCoord1.xyz, 0);\n#if !CC_USE_WORLD_SPACE\n pos = cc_matWorld * pos;\n velocity = cc_matWorld * velocity;\n#endif\n float vertOffset = (a_texCoord.x - 0.5) * a_texCoord.y;\n vec3 camUp = normalize(cross(pos.xyz - cc_cameraPos.xyz, velocity.xyz));\n pos.xyz += camUp * vertOffset;\n pos = cc_matViewProj * pos;\n uv = a_texCoord.zw * mainTiling_Offset.xy + mainTiling_Offset.zw;;\n color = a_color;\n#if CC_DRAW_WIRE_FRAME\n vBarycentric = a_texCoord2;\n#endif\n return pos;\n}\nvoid main() { gl_Position = vs_main(); }", + "frag": "\nprecision mediump float;\nvec4 CCFragOutput (vec4 color) {\n #if OUTPUT_TO_GAMMA\n color.rgb = sqrt(color.rgb);\n #endif\n\treturn color;\n}\nin vec2 uv;\nin vec4 color;\n#if CC_DRAW_WIRE_FRAME\n in vec3 vBarycentric;\n#endif\nuniform sampler2D mainTexture;\nuniform FragConstants {\n vec4 tintColor;\n};\nvec4 multiply () {\n vec4 col;\n vec4 texColor = texture(mainTexture, uv);\n col.rgb = tintColor.rgb * texColor.rgb * color.rgb * vec3(2.0);\n col.a = (1.0 - texColor.a) * (tintColor.a * color.a * 2.0);\n #if CC_DRAW_WIRE_FRAME\n if (any(lessThan(vBarycentric, vec3(0.02)))) {\n col = vec4(0., 1., 1., col.a);\n }\n #endif\n return CCFragOutput(col);\n}\nout vec4 cc_FragColor;\nvoid main() { cc_FragColor = multiply(); }" + }, + "glsl1": { + "vert": "\nprecision mediump float;\nuniform vec4 mainTiling_Offset;\nuniform mat4 cc_matViewProj;\nuniform vec4 cc_cameraPos;\nuniform mat4 cc_matWorld;\nvarying vec2 uv;\nvarying vec4 color;\nattribute vec3 a_position;\nattribute vec4 a_texCoord;\nattribute vec3 a_texCoord1;\nattribute vec3 a_texCoord2;\nattribute vec4 a_color;\n#if CC_DRAW_WIRE_FRAME\n varying vec3 vBarycentric;\n#endif\nvec4 vs_main() {\n highp vec4 pos = vec4(a_position, 1);\n vec4 velocity = vec4(a_texCoord1.xyz, 0);\n#if !CC_USE_WORLD_SPACE\n pos = cc_matWorld * pos;\n velocity = cc_matWorld * velocity;\n#endif\n float vertOffset = (a_texCoord.x - 0.5) * a_texCoord.y;\n vec3 camUp = normalize(cross(pos.xyz - cc_cameraPos.xyz, velocity.xyz));\n pos.xyz += camUp * vertOffset;\n pos = cc_matViewProj * pos;\n uv = a_texCoord.zw * mainTiling_Offset.xy + mainTiling_Offset.zw;;\n color = a_color;\n#if CC_DRAW_WIRE_FRAME\n vBarycentric = a_texCoord2;\n#endif\n return pos;\n}\nvoid main() { gl_Position = vs_main(); }", + "frag": "\nprecision mediump float;\nvec4 CCFragOutput (vec4 color) {\n #if OUTPUT_TO_GAMMA\n color.rgb = sqrt(color.rgb);\n #endif\n\treturn color;\n}\nvarying vec2 uv;\nvarying vec4 color;\n#if CC_DRAW_WIRE_FRAME\n varying vec3 vBarycentric;\n#endif\nuniform sampler2D mainTexture;\nuniform vec4 tintColor;\nvec4 multiply () {\n vec4 col;\n vec4 texColor = texture2D(mainTexture, uv);\n col.rgb = tintColor.rgb * texColor.rgb * color.rgb * vec3(2.0);\n col.a = (1.0 - texColor.a) * (tintColor.a * color.a * 2.0);\n #if CC_DRAW_WIRE_FRAME\n if (any(lessThan(vBarycentric, vec3(0.02)))) {\n col = vec4(0., 1., 1., col.a);\n }\n #endif\n return CCFragOutput(col);\n}\nvoid main() { gl_FragColor = multiply(); }" + }, + "builtins": { + "globals": { + "blocks": [ + { + "name": "CCGlobal", + "defines": [] + } + ], + "samplers": [] + }, + "locals": { + "blocks": [ + { + "name": "CCLocal", + "defines": [] + } + ], + "samplers": [] + } + }, + "defines": [ + { + "name": "CC_DRAW_WIRE_FRAME", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_WORLD_SPACE", + "type": "boolean", + "defines": [] + }, + { + "name": "OUTPUT_TO_GAMMA", + "type": "boolean", + "defines": [] + } + ], + "blocks": [ + { + "name": "Constants", + "binding": 0, + "members": [ + { + "name": "mainTiling_Offset", + "type": 16, + "count": 1 + }, + { + "name": "frameTile_velLenScale", + "type": 16, + "count": 1 + }, + { + "name": "scale", + "type": 16, + "count": 1 + } + ], + "defines": [] + }, + { + "name": "FragConstants", + "binding": 1, + "members": [ + { + "name": "tintColor", + "type": 16, + "count": 1 + } + ], + "defines": [] + } + ], + "samplers": [ + { + "name": "mainTexture", + "type": 29, + "count": 1, + "binding": 30, + "defines": [] + } + ] + }, + { + "hash": 1704877102, + "record": null, + "name": "builtin-3d-trail|particle-trail:vs_main|no-tint-fs:addSmooth", + "glsl3": { + "vert": "\nprecision mediump float;\nuniform Constants{\n vec4 mainTiling_Offset;\n vec4 frameTile_velLenScale;\n vec4 scale;\n};\nuniform CCGlobal {\n mat4 cc_matView;\n mat4 cc_matViewInv;\n mat4 cc_matProj;\n mat4 cc_matProjInv;\n mat4 cc_matViewProj;\n mat4 cc_matViewProjInv;\n vec4 cc_cameraPos;\n vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nout vec2 uv;\nout vec4 color;\nin vec3 a_position;\nin vec4 a_texCoord;\nin vec3 a_texCoord1;\nin vec3 a_texCoord2;\nin vec4 a_color;\n#if CC_DRAW_WIRE_FRAME\n out vec3 vBarycentric;\n#endif\nvec4 vs_main() {\n highp vec4 pos = vec4(a_position, 1);\n vec4 velocity = vec4(a_texCoord1.xyz, 0);\n#if !CC_USE_WORLD_SPACE\n pos = cc_matWorld * pos;\n velocity = cc_matWorld * velocity;\n#endif\n float vertOffset = (a_texCoord.x - 0.5) * a_texCoord.y;\n vec3 camUp = normalize(cross(pos.xyz - cc_cameraPos.xyz, velocity.xyz));\n pos.xyz += camUp * vertOffset;\n pos = cc_matViewProj * pos;\n uv = a_texCoord.zw * mainTiling_Offset.xy + mainTiling_Offset.zw;;\n color = a_color;\n#if CC_DRAW_WIRE_FRAME\n vBarycentric = a_texCoord2;\n#endif\n return pos;\n}\nvoid main() { gl_Position = vs_main(); }", + "frag": "\nprecision mediump float;\nvec4 CCFragOutput (vec4 color) {\n #if OUTPUT_TO_GAMMA\n color.rgb = sqrt(color.rgb);\n #endif\n\treturn color;\n}\nin vec2 uv;\nin vec4 color;\nuniform sampler2D mainTexture;\nvec4 addSmooth () {\n vec4 col = color * texture(mainTexture, uv);\n col.rgb *= col.a;\n return CCFragOutput(col);\n}\nout vec4 cc_FragColor;\nvoid main() { cc_FragColor = addSmooth(); }" + }, + "glsl1": { + "vert": "\nprecision mediump float;\nuniform vec4 mainTiling_Offset;\nuniform mat4 cc_matViewProj;\nuniform vec4 cc_cameraPos;\nuniform mat4 cc_matWorld;\nvarying vec2 uv;\nvarying vec4 color;\nattribute vec3 a_position;\nattribute vec4 a_texCoord;\nattribute vec3 a_texCoord1;\nattribute vec3 a_texCoord2;\nattribute vec4 a_color;\n#if CC_DRAW_WIRE_FRAME\n varying vec3 vBarycentric;\n#endif\nvec4 vs_main() {\n highp vec4 pos = vec4(a_position, 1);\n vec4 velocity = vec4(a_texCoord1.xyz, 0);\n#if !CC_USE_WORLD_SPACE\n pos = cc_matWorld * pos;\n velocity = cc_matWorld * velocity;\n#endif\n float vertOffset = (a_texCoord.x - 0.5) * a_texCoord.y;\n vec3 camUp = normalize(cross(pos.xyz - cc_cameraPos.xyz, velocity.xyz));\n pos.xyz += camUp * vertOffset;\n pos = cc_matViewProj * pos;\n uv = a_texCoord.zw * mainTiling_Offset.xy + mainTiling_Offset.zw;;\n color = a_color;\n#if CC_DRAW_WIRE_FRAME\n vBarycentric = a_texCoord2;\n#endif\n return pos;\n}\nvoid main() { gl_Position = vs_main(); }", + "frag": "\nprecision mediump float;\nvec4 CCFragOutput (vec4 color) {\n #if OUTPUT_TO_GAMMA\n color.rgb = sqrt(color.rgb);\n #endif\n\treturn color;\n}\nvarying vec2 uv;\nvarying vec4 color;\nuniform sampler2D mainTexture;\nvec4 addSmooth () {\n vec4 col = color * texture2D(mainTexture, uv);\n col.rgb *= col.a;\n return CCFragOutput(col);\n}\nvoid main() { gl_FragColor = addSmooth(); }" + }, + "builtins": { + "globals": { + "blocks": [ + { + "name": "CCGlobal", + "defines": [] + } + ], + "samplers": [] + }, + "locals": { + "blocks": [ + { + "name": "CCLocal", + "defines": [] + } + ], + "samplers": [] + } + }, + "defines": [ + { + "name": "CC_DRAW_WIRE_FRAME", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_WORLD_SPACE", + "type": "boolean", + "defines": [] + }, + { + "name": "OUTPUT_TO_GAMMA", + "type": "boolean", + "defines": [] + } + ], + "blocks": [ + { + "name": "Constants", + "binding": 0, + "members": [ + { + "name": "mainTiling_Offset", + "type": 16, + "count": 1 + }, + { + "name": "frameTile_velLenScale", + "type": 16, + "count": 1 + }, + { + "name": "scale", + "type": 16, + "count": 1 + } + ], + "defines": [] + } + ], + "samplers": [ + { + "name": "mainTexture", + "type": 29, + "count": 1, + "binding": 30, + "defines": [] + } + ] + }, + { + "hash": 2717357054, + "record": null, + "name": "builtin-3d-trail|particle-trail:vs_main|no-tint-fs:premultiplied", + "glsl3": { + "vert": "\nprecision mediump float;\nuniform Constants{\n vec4 mainTiling_Offset;\n vec4 frameTile_velLenScale;\n vec4 scale;\n};\nuniform CCGlobal {\n mat4 cc_matView;\n mat4 cc_matViewInv;\n mat4 cc_matProj;\n mat4 cc_matProjInv;\n mat4 cc_matViewProj;\n mat4 cc_matViewProjInv;\n vec4 cc_cameraPos;\n vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nout vec2 uv;\nout vec4 color;\nin vec3 a_position;\nin vec4 a_texCoord;\nin vec3 a_texCoord1;\nin vec3 a_texCoord2;\nin vec4 a_color;\n#if CC_DRAW_WIRE_FRAME\n out vec3 vBarycentric;\n#endif\nvec4 vs_main() {\n highp vec4 pos = vec4(a_position, 1);\n vec4 velocity = vec4(a_texCoord1.xyz, 0);\n#if !CC_USE_WORLD_SPACE\n pos = cc_matWorld * pos;\n velocity = cc_matWorld * velocity;\n#endif\n float vertOffset = (a_texCoord.x - 0.5) * a_texCoord.y;\n vec3 camUp = normalize(cross(pos.xyz - cc_cameraPos.xyz, velocity.xyz));\n pos.xyz += camUp * vertOffset;\n pos = cc_matViewProj * pos;\n uv = a_texCoord.zw * mainTiling_Offset.xy + mainTiling_Offset.zw;;\n color = a_color;\n#if CC_DRAW_WIRE_FRAME\n vBarycentric = a_texCoord2;\n#endif\n return pos;\n}\nvoid main() { gl_Position = vs_main(); }", + "frag": "\nprecision mediump float;\nvec4 CCFragOutput (vec4 color) {\n #if OUTPUT_TO_GAMMA\n color.rgb = sqrt(color.rgb);\n #endif\n\treturn color;\n}\nin vec2 uv;\nin vec4 color;\nuniform sampler2D mainTexture;\nvec4 premultiplied () {\n vec4 col = color * texture(mainTexture, uv) * color.a;\n return CCFragOutput(col);\n}\nout vec4 cc_FragColor;\nvoid main() { cc_FragColor = premultiplied(); }" + }, + "glsl1": { + "vert": "\nprecision mediump float;\nuniform vec4 mainTiling_Offset;\nuniform mat4 cc_matViewProj;\nuniform vec4 cc_cameraPos;\nuniform mat4 cc_matWorld;\nvarying vec2 uv;\nvarying vec4 color;\nattribute vec3 a_position;\nattribute vec4 a_texCoord;\nattribute vec3 a_texCoord1;\nattribute vec3 a_texCoord2;\nattribute vec4 a_color;\n#if CC_DRAW_WIRE_FRAME\n varying vec3 vBarycentric;\n#endif\nvec4 vs_main() {\n highp vec4 pos = vec4(a_position, 1);\n vec4 velocity = vec4(a_texCoord1.xyz, 0);\n#if !CC_USE_WORLD_SPACE\n pos = cc_matWorld * pos;\n velocity = cc_matWorld * velocity;\n#endif\n float vertOffset = (a_texCoord.x - 0.5) * a_texCoord.y;\n vec3 camUp = normalize(cross(pos.xyz - cc_cameraPos.xyz, velocity.xyz));\n pos.xyz += camUp * vertOffset;\n pos = cc_matViewProj * pos;\n uv = a_texCoord.zw * mainTiling_Offset.xy + mainTiling_Offset.zw;;\n color = a_color;\n#if CC_DRAW_WIRE_FRAME\n vBarycentric = a_texCoord2;\n#endif\n return pos;\n}\nvoid main() { gl_Position = vs_main(); }", + "frag": "\nprecision mediump float;\nvec4 CCFragOutput (vec4 color) {\n #if OUTPUT_TO_GAMMA\n color.rgb = sqrt(color.rgb);\n #endif\n\treturn color;\n}\nvarying vec2 uv;\nvarying vec4 color;\nuniform sampler2D mainTexture;\nvec4 premultiplied () {\n vec4 col = color * texture2D(mainTexture, uv) * color.a;\n return CCFragOutput(col);\n}\nvoid main() { gl_FragColor = premultiplied(); }" + }, + "builtins": { + "globals": { + "blocks": [ + { + "name": "CCGlobal", + "defines": [] + } + ], + "samplers": [] + }, + "locals": { + "blocks": [ + { + "name": "CCLocal", + "defines": [] + } + ], + "samplers": [] + } + }, + "defines": [ + { + "name": "CC_DRAW_WIRE_FRAME", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_WORLD_SPACE", + "type": "boolean", + "defines": [] + }, + { + "name": "OUTPUT_TO_GAMMA", + "type": "boolean", + "defines": [] + } + ], + "blocks": [ + { + "name": "Constants", + "binding": 0, + "members": [ + { + "name": "mainTiling_Offset", + "type": 16, + "count": 1 + }, + { + "name": "frameTile_velLenScale", + "type": 16, + "count": 1 + }, + { + "name": "scale", + "type": 16, + "count": 1 + } + ], + "defines": [] + } + ], + "samplers": [ + { + "name": "mainTexture", + "type": 29, + "count": 1, + "binding": 30, + "defines": [] + } + ] + } + ], + [ + { + "name": "add", + "passes": [ + { + "program": "builtin-3d-trail|particle-trail:vs_main|tinted-fs:add", + "rasterizerState": { + "cullMode": 0 + }, + "blendState": { + "targets": [ + { + "blend": true, + "blendSrc": 770, + "blendDst": 1, + "blendSrcAlpha": 770, + "blendDstAlpha": 1 + } + ] + }, + "depthStencilState": { + "depthTest": true, + "depthWrite": false + }, + "properties": { + "mainTexture": { + "value": "grey", + "type": 29 + }, + "mainTiling_Offset": { + "type": 16, + "value": [ + 1, + 1, + 0, + 0 + ] + }, + "frameTile_velLenScale": { + "type": 16, + "value": [ + 1, + 1, + 0, + 0 + ] + }, + "tintColor": { + "type": 16, + "value": [ + 0.5, + 0.5, + 0.5, + 0.5 + ], + "inspector": { + "type": "color" + } + } + } + } + ] + }, + { + "name": "alpha-blend", + "passes": [ + { + "program": "builtin-3d-trail|particle-trail:vs_main|tinted-fs:add", + "rasterizerState": { + "cullMode": 0 + }, + "blendState": { + "targets": [ + { + "blend": true, + "blendSrc": 1, + "blendDst": 771, + "blendSrcAlpha": 1, + "blendDstAlpha": 771 + } + ] + }, + "depthStencilState": { + "depthTest": true, + "depthWrite": false + }, + "properties": { + "mainTexture": { + "value": "grey", + "type": 29 + }, + "mainTiling_Offset": { + "type": 16, + "value": [ + 1, + 1, + 0, + 0 + ] + }, + "frameTile_velLenScale": { + "type": 16, + "value": [ + 1, + 1, + 0, + 0 + ] + }, + "tintColor": { + "type": 16, + "value": [ + 0.5, + 0.5, + 0.5, + 0.5 + ], + "inspector": { + "type": "color" + } + } + } + } + ] + }, + { + "name": "add-multiply", + "passes": [ + { + "program": "builtin-3d-trail|particle-trail:vs_main|tinted-fs:multiply", + "rasterizerState": { + "cullMode": 0 + }, + "blendState": { + "targets": [ + { + "blend": true, + "blendSrc": 1, + "blendDst": 771, + "blendSrcAlpha": 1, + "blendDstAlpha": 771 + } + ] + }, + "depthStencilState": { + "depthTest": true, + "depthWrite": false + }, + "properties": { + "mainTexture": { + "value": "grey", + "type": 29 + }, + "mainTiling_Offset": { + "type": 16, + "value": [ + 1, + 1, + 0, + 0 + ] + }, + "frameTile_velLenScale": { + "type": 16, + "value": [ + 1, + 1, + 0, + 0 + ] + }, + "tintColor": { + "type": 16, + "value": [ + 0.5, + 0.5, + 0.5, + 0.5 + ], + "inspector": { + "type": "color" + } + } + } + } + ] + }, + { + "name": "add-smooth", + "passes": [ + { + "program": "builtin-3d-trail|particle-trail:vs_main|no-tint-fs:addSmooth", + "rasterizerState": { + "cullMode": 0 + }, + "blendState": { + "targets": [ + { + "blend": true, + "blendSrc": 1, + "blendDst": 771, + "blendSrcAlpha": 1, + "blendDstAlpha": 771 + } + ] + }, + "depthStencilState": { + "depthTest": true, + "depthWrite": false + }, + "properties": { + "mainTexture": { + "value": "grey", + "type": 29 + }, + "mainTiling_Offset": { + "type": 16, + "value": [ + 1, + 1, + 0, + 0 + ] + }, + "frameTile_velLenScale": { + "type": 16, + "value": [ + 1, + 1, + 0, + 0 + ] + } + } + } + ] + }, + { + "name": "premultiply-blend", + "passes": [ + { + "program": "builtin-3d-trail|particle-trail:vs_main|no-tint-fs:premultiplied", + "rasterizerState": { + "cullMode": 0 + }, + "blendState": { + "targets": [ + { + "blend": true, + "blendSrc": 1, + "blendDst": 771, + "blendSrcAlpha": 1, + "blendDstAlpha": 771 + } + ] + }, + "depthStencilState": { + "depthTest": true, + "depthWrite": false + }, + "properties": { + "mainTexture": { + "value": "grey", + "type": 29 + }, + "mainTiling_Offset": { + "type": 16, + "value": [ + 1, + 1, + 0, + 0 + ] + }, + "frameTile_velLenScale": { + "type": 16, + "value": [ + 1, + 1, + 0, + 0 + ] + } + } + } + ] + } + ] + ] + ], + 0, + 0, + [], + [], + [] + ], + [ + [ + [ + 0, + "builtin-2d-graphics", + [ + { + "hash": 550349795, + "record": null, + "name": "builtin-2d-graphics|vs|fs", + "glsl3": { + "vert": "\nprecision highp float;\nuniform CCGlobal {\n mat4 cc_matView;\n mat4 cc_matViewInv;\n mat4 cc_matProj;\n mat4 cc_matProjInv;\n mat4 cc_matViewProj;\n mat4 cc_matViewProjInv;\n vec4 cc_cameraPos;\n vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nin vec3 a_position;\nin vec4 a_color;\nout vec4 v_color;\nin float a_dist;\nout float v_dist;\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n pos = cc_matViewProj * cc_matWorld * pos;\n v_color = a_color;\n v_dist = a_dist;\n gl_Position = pos;\n}", + "frag": "\n#if CC_SUPPORT_standard_derivatives\n #extension GL_OES_standard_derivatives : enable\n#endif\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform ALPHA_TEST {\n float alphaThreshold;\n };\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nin vec4 v_color;\nin float v_dist;\nvoid main () {\n vec4 o = v_color;\n ALPHA_TEST(o);\n #if CC_SUPPORT_standard_derivatives\n float aa = fwidth(v_dist);\n #else\n float aa = 0.05;\n #endif\n float alpha = 1. - smoothstep(-aa, 0., abs(v_dist) - 1.0);\n o.rgb *= o.a;\n o *= alpha;\n gl_FragColor = o;\n}" + }, + "glsl1": { + "vert": "\nprecision highp float;\nuniform mat4 cc_matViewProj;\nuniform mat4 cc_matWorld;\nattribute vec3 a_position;\nattribute vec4 a_color;\nvarying vec4 v_color;\nattribute float a_dist;\nvarying float v_dist;\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n pos = cc_matViewProj * cc_matWorld * pos;\n v_color = a_color;\n v_dist = a_dist;\n gl_Position = pos;\n}", + "frag": "\n#if CC_SUPPORT_standard_derivatives\n #extension GL_OES_standard_derivatives : enable\n#endif\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform float alphaThreshold;\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvarying vec4 v_color;\nvarying float v_dist;\nvoid main () {\n vec4 o = v_color;\n ALPHA_TEST(o);\n #if CC_SUPPORT_standard_derivatives\n float aa = fwidth(v_dist);\n #else\n float aa = 0.05;\n #endif\n float alpha = 1. - smoothstep(-aa, 0., abs(v_dist) - 1.0);\n o.rgb *= o.a;\n o *= alpha;\n gl_FragColor = o;\n}" + }, + "builtins": { + "globals": { + "blocks": [ + { + "name": "CCGlobal", + "defines": [] + } + ], + "samplers": [] + }, + "locals": { + "blocks": [ + { + "name": "CCLocal", + "defines": [] + } + ], + "samplers": [] + } + }, + "defines": [ + { + "name": "CC_SUPPORT_standard_derivatives", + "type": "boolean", + "defines": [] + }, + { + "name": "USE_ALPHA_TEST", + "type": "boolean", + "defines": [] + } + ], + "blocks": [ + { + "name": "ALPHA_TEST", + "binding": 0, + "members": [ + { + "name": "alphaThreshold", + "type": 13, + "count": 1 + } + ], + "defines": [ + "USE_ALPHA_TEST" + ] + } + ], + "samplers": [] + } + ], + [ + { + "passes": [ + { + "program": "builtin-2d-graphics|vs|fs", + "blendState": { + "targets": [ + { + "blend": true, + "blendSrc": 1, + "blendDst": 771, + "blendSrcAlpha": 1, + "blendDstAlpha": 771 + } + ] + }, + "rasterizerState": { + "cullMode": 0 + }, + "properties": { + "alphaThreshold": { + "type": 13, + "value": [ + 0.5 + ] + } + } + } + ] + } + ] + ] + ], + 0, + 0, + [], + [], + [] + ], + [ + [ + [ + 1, + "builtin-2d-gray-sprite", + {} + ] + ], + 0, + 0, + [ + 0 + ], + [ + 0 + ], + [ + 3 + ] + ], + [ + [ + [ + 2, + "builtin-3d-trail", + [ + {}, + "0", + 11, + [ + {}, + "props", + 11, + [ + {}, + "mainTexture", + 6, + 0 + ] + ] + ] + ] + ], + 0, + 0, + [ + 0, + 0 + ], + [ + 2, + 0 + ], + [ + 0, + 4 + ] + ], + [ + [ + [ + 0, + "builtin-unlit", + [ + { + "hash": 922858114, + "record": null, + "name": "builtin-unlit|unlit-vs|unlit-fs", + "glsl3": { + "vert": "\nprecision highp float;\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nuniform CCGlobal {\n mat4 cc_matView;\n mat4 cc_matViewInv;\n mat4 cc_matProj;\n mat4 cc_matProjInv;\n mat4 cc_matViewProj;\n mat4 cc_matViewProjInv;\n vec4 cc_cameraPos;\n vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n};\n#if CC_USE_SKINNING\n in vec4 a_weights;\n in vec4 a_joints;\n #if CC_USE_JOINTS_TEXTRUE\n uniform SKINNING {\n vec2 jointsTextureSize;\n };\n uniform sampler2D jointsTexture;\n #if CC_JOINTS_TEXTURE_FLOAT32\n mat4 getBoneMatrix(const in float i) {\n float width = jointsTextureSize.x;\n float height = jointsTextureSize.y;\n float j = i * 4.0;\n float x = mod(j, width);\n float y = floor(j / width);\n float dx = 1.0 / width;\n float dy = 1.0 / height;\n y = dy * (y + 0.5);\n vec4 v1 = texture(jointsTexture, vec2(dx * (x + 0.5), y));\n vec4 v2 = texture(jointsTexture, vec2(dx * (x + 1.5), y));\n vec4 v3 = texture(jointsTexture, vec2(dx * (x + 2.5), y));\n vec4 v4 = texture(jointsTexture, vec2(dx * (x + 3.5), y));\n return mat4(v1, v2, v3, v4);\n }\n #else\n float decode32(vec4 rgba) {\n float Sign = 1.0 - step(128.0, rgba[0]) * 2.0;\n float Exponent = 2.0 * mod(rgba[0], 128.0) + step(128.0, rgba[1]) - 127.0;\n float Mantissa = mod(rgba[1], 128.0) * 65536.0 + rgba[2] * 256.0 + rgba[3] + 8388608.0;\n return Sign * exp2(Exponent - 23.0) * Mantissa;\n }\n vec4 decodevec4 (vec4 x, vec4 y, vec4 z, vec4 w) {\n return vec4(\n decode32(x.wzyx * 255.0),\n decode32(y.wzyx * 255.0),\n decode32(z.wzyx * 255.0),\n decode32(w.wzyx * 255.0)\n );\n }\n vec4 decodevec4 (float dx, float x, float y) {\n return decodevec4(\n texture(jointsTexture, vec2(dx * (x + 0.5), y)),\n texture(jointsTexture, vec2(dx * (x + 1.5), y)),\n texture(jointsTexture, vec2(dx * (x + 2.5), y)),\n texture(jointsTexture, vec2(dx * (x + 3.5), y))\n );\n }\n mat4 getBoneMatrix(const in float i) {\n float width = jointsTextureSize.x;\n float height = jointsTextureSize.y;\n float j = i * 16.0;\n float x = mod(j, width);\n float y = floor(j / width);\n float dx = 1.0 / width;\n float dy = 1.0 / height;\n y = dy * (y + 0.5);\n vec4 v1 = decodevec4(dx, x, y);\n vec4 v2 = decodevec4(dx, x+4.0, y);\n vec4 v3 = decodevec4(dx, x+8.0, y);\n vec4 v4 = decodevec4(dx, x+12.0, y);\n return mat4(v1, v2, v3, v4);\n }\n #endif\n #else\n uniform JOINT_MATRIX {\n mat4 jointMatrices[50];\n };\n mat4 getBoneMatrix(const in float i) {\n return jointMatrices[int(i)];\n }\n #endif\n mat4 skinMatrix() {\n return\n getBoneMatrix(a_joints.x) * a_weights.x +\n getBoneMatrix(a_joints.y) * a_weights.y +\n getBoneMatrix(a_joints.z) * a_weights.z +\n getBoneMatrix(a_joints.w) * a_weights.w\n ;\n }\n#endif\nstruct StandardVertInput {\n vec2 uv;\n vec4 position;\n vec3 normal;\n vec4 tangent;\n vec4 color;\n};\nin vec3 a_position;\n#if CC_USE_ATTRIBUTE_UV0\nin vec2 a_uv0;\n#endif\n#if CC_USE_ATTRIBUTE_COLOR\nin vec4 a_color;\n#endif\n#if CC_USE_ATTRIBUTE_NORMAL\nin vec3 a_normal;\n#endif\n#if CC_USE_ATTRIBUTE_TANGENT\nin vec4 a_tangent;\n#endif\nvoid CCAttribute (out StandardVertInput In) {\n In.position = vec4(a_position, 1.0);\n #if CC_USE_ATTRIBUTE_UV0\n In.uv = a_uv0;\n #else\n In.uv = vec2(0.0);\n #endif\n #if CC_USE_ATTRIBUTE_COLOR\n In.color = a_color;\n #else\n In.color = vec4(1.0);\n #endif\n #if CC_USE_ATTRIBUTE_NORMAL\n In.normal = a_normal;\n #else\n In.normal = vec3(0.0, 1.0, 0.0);\n #endif\n #if CC_USE_ATTRIBUTE_TANGENT\n In.tangent = a_tangent;\n #else\n In.tangent = vec4(1.0, 0.0, 0.0, 0.0);\n #endif\n}\nvoid CCVertInput(out StandardVertInput In) {\n CCAttribute(In);\n #if CC_USE_SKINNING\n mat4 m = skinMatrix();\n In.position = m * In.position;\n #if CC_USE_ATTRIBUTE_NORMAL\n In.normal = (m * vec4(In.normal, 0)).xyz;\n #endif\n #if CC_USE_ATTRIBUTE_TANGENT\n In.tangent = m * In.tangent;\n #endif\n #endif\n}\nuniform MAIN_TILING {\n vec2 mainTiling;\n vec2 mainOffset;\n};\n#if CC_USE_ATTRIBUTE_UV0 && USE_DIFFUSE_TEXTURE\n out mediump vec2 v_uv0;\n#endif\n#if CC_USE_ATTRIBUTE_COLOR\n out lowp vec4 v_color;\n#endif\nvoid main () {\n StandardVertInput In;\n CCVertInput(In);\n #if CC_USE_ATTRIBUTE_COLOR\n v_color = In.color;\n #endif\n #if CC_USE_ATTRIBUTE_UV0 && USE_DIFFUSE_TEXTURE\n v_uv0 = In.uv * mainTiling + mainOffset;\n #endif\n gl_Position = cc_matViewProj * cc_matWorld * In.position;\n}", + "frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform ALPHA_TEST {\n float alphaThreshold;\n };\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvec4 CCFragOutput (vec4 color) {\n #if OUTPUT_TO_GAMMA\n color.rgb = sqrt(color.rgb);\n #endif\n\treturn color;\n}\nuniform UNLIT {\n lowp vec4 diffuseColor;\n};\n#if USE_DIFFUSE_TEXTURE\n uniform sampler2D diffuseTexture;\n#endif\n#if CC_USE_ATTRIBUTE_COLOR\n in lowp vec4 v_color;\n#endif\n#if CC_USE_ATTRIBUTE_UV0 && USE_DIFFUSE_TEXTURE\n in mediump vec2 v_uv0;\n#endif\nvoid main () {\n vec4 color = diffuseColor;\n #if CC_USE_ATTRIBUTE_UV0 && USE_DIFFUSE_TEXTURE\n vec4 diffuseTexture_tmp = texture(diffuseTexture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_diffuseTexture\n diffuseTexture_tmp.a *= texture(diffuseTexture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n color.rgb *= (diffuseTexture_tmp.rgb * diffuseTexture_tmp.rgb);\n color.a *= diffuseTexture_tmp.a;\n #else\n color *= diffuseTexture_tmp;\n #endif\n #endif\n #if CC_USE_ATTRIBUTE_COLOR\n color *= v_color;\n #endif\n ALPHA_TEST(color);\n gl_FragColor = CCFragOutput(color);\n}" + }, + "glsl1": { + "vert": "\nprecision highp float;\nuniform mat4 cc_matWorld;\nuniform mat4 cc_matViewProj;\n#if CC_USE_SKINNING\n attribute vec4 a_weights;\n attribute vec4 a_joints;\n #if CC_USE_JOINTS_TEXTRUE\n uniform vec2 jointsTextureSize;\n uniform sampler2D jointsTexture;\n #if CC_JOINTS_TEXTURE_FLOAT32\n mat4 getBoneMatrix(const in float i) {\n float width = jointsTextureSize.x;\n float height = jointsTextureSize.y;\n float j = i * 4.0;\n float x = mod(j, width);\n float y = floor(j / width);\n float dx = 1.0 / width;\n float dy = 1.0 / height;\n y = dy * (y + 0.5);\n vec4 v1 = texture2D(jointsTexture, vec2(dx * (x + 0.5), y));\n vec4 v2 = texture2D(jointsTexture, vec2(dx * (x + 1.5), y));\n vec4 v3 = texture2D(jointsTexture, vec2(dx * (x + 2.5), y));\n vec4 v4 = texture2D(jointsTexture, vec2(dx * (x + 3.5), y));\n return mat4(v1, v2, v3, v4);\n }\n #else\n float decode32(vec4 rgba) {\n float Sign = 1.0 - step(128.0, rgba[0]) * 2.0;\n float Exponent = 2.0 * mod(rgba[0], 128.0) + step(128.0, rgba[1]) - 127.0;\n float Mantissa = mod(rgba[1], 128.0) * 65536.0 + rgba[2] * 256.0 + rgba[3] + 8388608.0;\n return Sign * exp2(Exponent - 23.0) * Mantissa;\n }\n vec4 decodevec4 (vec4 x, vec4 y, vec4 z, vec4 w) {\n return vec4(\n decode32(x.wzyx * 255.0),\n decode32(y.wzyx * 255.0),\n decode32(z.wzyx * 255.0),\n decode32(w.wzyx * 255.0)\n );\n }\n vec4 decodevec4 (float dx, float x, float y) {\n return decodevec4(\n texture2D(jointsTexture, vec2(dx * (x + 0.5), y)),\n texture2D(jointsTexture, vec2(dx * (x + 1.5), y)),\n texture2D(jointsTexture, vec2(dx * (x + 2.5), y)),\n texture2D(jointsTexture, vec2(dx * (x + 3.5), y))\n );\n }\n mat4 getBoneMatrix(const in float i) {\n float width = jointsTextureSize.x;\n float height = jointsTextureSize.y;\n float j = i * 16.0;\n float x = mod(j, width);\n float y = floor(j / width);\n float dx = 1.0 / width;\n float dy = 1.0 / height;\n y = dy * (y + 0.5);\n vec4 v1 = decodevec4(dx, x, y);\n vec4 v2 = decodevec4(dx, x+4.0, y);\n vec4 v3 = decodevec4(dx, x+8.0, y);\n vec4 v4 = decodevec4(dx, x+12.0, y);\n return mat4(v1, v2, v3, v4);\n }\n #endif\n #else\n uniform mat4 jointMatrices[50];\n mat4 getBoneMatrix(const in float i) {\n return jointMatrices[int(i)];\n }\n #endif\n mat4 skinMatrix() {\n return\n getBoneMatrix(a_joints.x) * a_weights.x +\n getBoneMatrix(a_joints.y) * a_weights.y +\n getBoneMatrix(a_joints.z) * a_weights.z +\n getBoneMatrix(a_joints.w) * a_weights.w\n ;\n }\n#endif\nstruct StandardVertInput {\n vec2 uv;\n vec4 position;\n vec3 normal;\n vec4 tangent;\n vec4 color;\n};\nattribute vec3 a_position;\n#if CC_USE_ATTRIBUTE_UV0\nattribute vec2 a_uv0;\n#endif\n#if CC_USE_ATTRIBUTE_COLOR\nattribute vec4 a_color;\n#endif\n#if CC_USE_ATTRIBUTE_NORMAL\nattribute vec3 a_normal;\n#endif\n#if CC_USE_ATTRIBUTE_TANGENT\nattribute vec4 a_tangent;\n#endif\nvoid CCAttribute (out StandardVertInput In) {\n In.position = vec4(a_position, 1.0);\n #if CC_USE_ATTRIBUTE_UV0\n In.uv = a_uv0;\n #else\n In.uv = vec2(0.0);\n #endif\n #if CC_USE_ATTRIBUTE_COLOR\n In.color = a_color;\n #else\n In.color = vec4(1.0);\n #endif\n #if CC_USE_ATTRIBUTE_NORMAL\n In.normal = a_normal;\n #else\n In.normal = vec3(0.0, 1.0, 0.0);\n #endif\n #if CC_USE_ATTRIBUTE_TANGENT\n In.tangent = a_tangent;\n #else\n In.tangent = vec4(1.0, 0.0, 0.0, 0.0);\n #endif\n}\nvoid CCVertInput(out StandardVertInput In) {\n CCAttribute(In);\n #if CC_USE_SKINNING\n mat4 m = skinMatrix();\n In.position = m * In.position;\n #if CC_USE_ATTRIBUTE_NORMAL\n In.normal = (m * vec4(In.normal, 0)).xyz;\n #endif\n #if CC_USE_ATTRIBUTE_TANGENT\n In.tangent = m * In.tangent;\n #endif\n #endif\n}\nuniform vec2 mainTiling;\nuniform vec2 mainOffset;\n#if CC_USE_ATTRIBUTE_UV0 && USE_DIFFUSE_TEXTURE\n varying mediump vec2 v_uv0;\n#endif\n#if CC_USE_ATTRIBUTE_COLOR\n varying lowp vec4 v_color;\n#endif\nvoid main () {\n StandardVertInput In;\n CCVertInput(In);\n #if CC_USE_ATTRIBUTE_COLOR\n v_color = In.color;\n #endif\n #if CC_USE_ATTRIBUTE_UV0 && USE_DIFFUSE_TEXTURE\n v_uv0 = In.uv * mainTiling + mainOffset;\n #endif\n gl_Position = cc_matViewProj * cc_matWorld * In.position;\n}", + "frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform float alphaThreshold;\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvec4 CCFragOutput (vec4 color) {\n #if OUTPUT_TO_GAMMA\n color.rgb = sqrt(color.rgb);\n #endif\n\treturn color;\n}\nuniform lowp vec4 diffuseColor;\n#if USE_DIFFUSE_TEXTURE\n uniform sampler2D diffuseTexture;\n#endif\n#if CC_USE_ATTRIBUTE_COLOR\n varying lowp vec4 v_color;\n#endif\n#if CC_USE_ATTRIBUTE_UV0 && USE_DIFFUSE_TEXTURE\n varying mediump vec2 v_uv0;\n#endif\nvoid main () {\n vec4 color = diffuseColor;\n #if CC_USE_ATTRIBUTE_UV0 && USE_DIFFUSE_TEXTURE\n vec4 diffuseTexture_tmp = texture2D(diffuseTexture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_diffuseTexture\n diffuseTexture_tmp.a *= texture2D(diffuseTexture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n color.rgb *= (diffuseTexture_tmp.rgb * diffuseTexture_tmp.rgb);\n color.a *= diffuseTexture_tmp.a;\n #else\n color *= diffuseTexture_tmp;\n #endif\n #endif\n #if CC_USE_ATTRIBUTE_COLOR\n color *= v_color;\n #endif\n ALPHA_TEST(color);\n gl_FragColor = CCFragOutput(color);\n}" + }, + "builtins": { + "globals": { + "blocks": [ + { + "name": "CCGlobal", + "defines": [] + } + ], + "samplers": [] + }, + "locals": { + "blocks": [ + { + "name": "CCLocal", + "defines": [] + } + ], + "samplers": [] + } + }, + "defines": [ + { + "name": "CC_USE_SKINNING", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_JOINTS_TEXTRUE", + "type": "boolean", + "defines": [ + "CC_USE_SKINNING" + ] + }, + { + "name": "CC_JOINTS_TEXTURE_FLOAT32", + "type": "boolean", + "defines": [ + "CC_USE_SKINNING", + "CC_USE_JOINTS_TEXTRUE" + ] + }, + { + "name": "CC_USE_ATTRIBUTE_UV0", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_ATTRIBUTE_COLOR", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_ATTRIBUTE_NORMAL", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_ATTRIBUTE_TANGENT", + "type": "boolean", + "defines": [] + }, + { + "name": "USE_DIFFUSE_TEXTURE", + "type": "boolean", + "defines": [] + }, + { + "name": "USE_ALPHA_TEST", + "type": "boolean", + "defines": [] + }, + { + "name": "OUTPUT_TO_GAMMA", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_ALPHA_ATLAS_diffuseTexture", + "type": "boolean", + "defines": [ + "CC_USE_ATTRIBUTE_UV0", + "USE_DIFFUSE_TEXTURE" + ] + }, + { + "name": "INPUT_IS_GAMMA", + "type": "boolean", + "defines": [ + "CC_USE_ATTRIBUTE_UV0", + "USE_DIFFUSE_TEXTURE" + ] + } + ], + "blocks": [ + { + "name": "SKINNING", + "binding": 0, + "members": [ + { + "name": "jointsTextureSize", + "type": 14, + "count": 1 + } + ], + "defines": [ + "CC_USE_SKINNING", + "CC_USE_JOINTS_TEXTRUE" + ] + }, + { + "name": "JOINT_MATRIX", + "binding": 1, + "members": [ + { + "name": "jointMatrices", + "type": 26, + "count": 50 + } + ], + "defines": [ + "CC_USE_SKINNING" + ] + }, + { + "name": "MAIN_TILING", + "binding": 2, + "members": [ + { + "name": "mainTiling", + "type": 14, + "count": 1 + }, + { + "name": "mainOffset", + "type": 14, + "count": 1 + } + ], + "defines": [] + }, + { + "name": "ALPHA_TEST", + "binding": 3, + "members": [ + { + "name": "alphaThreshold", + "type": 13, + "count": 1 + } + ], + "defines": [ + "USE_ALPHA_TEST" + ] + }, + { + "name": "UNLIT", + "binding": 4, + "members": [ + { + "name": "diffuseColor", + "type": 16, + "count": 1 + } + ], + "defines": [] + } + ], + "samplers": [ + { + "name": "jointsTexture", + "type": 29, + "count": 1, + "binding": 30, + "defines": [ + "CC_USE_SKINNING", + "CC_USE_JOINTS_TEXTRUE" + ] + }, + { + "name": "diffuseTexture", + "type": 29, + "count": 1, + "binding": 31, + "defines": [ + "USE_DIFFUSE_TEXTURE" + ] + } + ] + } + ], + [ + { + "name": "opaque", + "passes": [ + { + "program": "builtin-unlit|unlit-vs|unlit-fs", + "blendState": { + "targets": [ + { + "blend": true + } + ] + }, + "rasterizerState": { + "cullMode": 0 + }, + "depthStencilState": { + "depthTest": true, + "depthWrite": true + }, + "properties": { + "diffuseTexture": { + "value": "white", + "type": 29 + }, + "diffuseColor": { + "type": 16, + "value": [ + 1, + 1, + 1, + 1 + ], + "editor": { + "type": "color" + } + }, + "alphaThreshold": { + "type": 13, + "value": [ + 0.5 + ] + }, + "mainTiling": { + "type": 14, + "value": [ + 1, + 1 + ] + }, + "mainOffset": { + "type": 14, + "value": [ + 0, + 0 + ] + } + } + } + ] + }, + { + "name": "transparent", + "passes": [ + { + "stage": "transparent", + "program": "builtin-unlit|unlit-vs|unlit-fs", + "blendState": { + "targets": [ + { + "blend": true + } + ] + }, + "rasterizerState": { + "cullMode": 0 + }, + "depthStencilState": { + "depthTest": true, + "depthWrite": true + }, + "properties": { + "diffuseTexture": { + "value": "white", + "type": 29 + }, + "diffuseColor": { + "type": 16, + "value": [ + 1, + 1, + 1, + 1 + ], + "editor": { + "type": "color" + } + }, + "alphaThreshold": { + "type": 13, + "value": [ + 0.5 + ] + }, + "mainTiling": { + "type": 14, + "value": [ + 1, + 1 + ] + }, + "mainOffset": { + "type": 14, + "value": [ + 0, + 0 + ] + } + } + } + ] + } + ] + ] + ], + 0, + 0, + [], + [], + [] + ], + [ + [ + [ + 1, + "builtin-2d-base", + {} + ] + ], + 0, + 0, + [ + 0 + ], + [ + 0 + ], + [ + 1 + ] + ], + [ + [ + [ + 1, + "builtin-2d-spine", + {} + ] + ], + 0, + 0, + [ + 0 + ], + [ + 0 + ], + [ + 5 + ] + ], + [ + [ + [ + 1, + "builtin-2d-graphics", + { + "0": { + "defines": {} + } + } + ] + ], + 0, + 0, + [ + 0 + ], + [ + 0 + ], + [ + 6 + ] + ], + [ + [ + [ + 0, + "builtin-clear-stencil", + [ + { + "hash": 2075641479, + "record": null, + "name": "builtin-clear-stencil|vs|fs", + "glsl3": { + "vert": "\nprecision highp float;\nin vec3 a_position;\nvoid main () {\n gl_Position = vec4(a_position, 1);\n}", + "frag": "\nprecision highp float;\nvoid main () {\n gl_FragColor = vec4(1.0);\n}" + }, + "glsl1": { + "vert": "\nprecision highp float;\nattribute vec3 a_position;\nvoid main () {\n gl_Position = vec4(a_position, 1);\n}", + "frag": "\nprecision highp float;\nvoid main () {\n gl_FragColor = vec4(1.0);\n}" + }, + "builtins": { + "globals": { + "blocks": [], + "samplers": [] + }, + "locals": { + "blocks": [], + "samplers": [] + } + }, + "defines": [], + "blocks": [], + "samplers": [] + } + ], + [ + { + "passes": [ + { + "program": "builtin-clear-stencil|vs|fs", + "blendState": { + "targets": [ + { + "blend": true + } + ] + }, + "rasterizerState": { + "cullMode": 0 + } + } + ] + } + ] + ] + ], + 0, + 0, + [], + [], + [] + ], + [ + [ + [ + 1, + "builtin-clear-stencil", + {} + ] + ], + 0, + 0, + [ + 0 + ], + [ + 0 + ], + [ + 7 + ] + ], + [ + [ + [ + 1, + "builtin-2d-label", + { + "0": { + "defines": { + "USE_TEXTURE": true + } + } + } + ] + ], + 0, + 0, + [ + 0 + ], + [ + 0 + ], + [ + 8 + ] + ], + [ + [ + [ + 1, + "builtin-2d-sprite", + { + "0": { + "defines": { + "USE_TEXTURE": true + } + } + } + ] + ], + 0, + 0, + [ + 0 + ], + [ + 0 + ], + [ + 1 + ] + ], + [ + [ + [ + 0, + "builtin-2d-label", + [ + { + "hash": 1105459032, + "record": null, + "name": "builtin-2d-label|vs|fs", + "glsl3": { + "vert": "\nprecision highp float;\nuniform CCGlobal {\n mat4 cc_matView;\n mat4 cc_matViewInv;\n mat4 cc_matProj;\n mat4 cc_matProjInv;\n mat4 cc_matViewProj;\n mat4 cc_matViewProjInv;\n vec4 cc_cameraPos;\n vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nin vec3 a_position;\nin vec4 a_color;\nout vec4 v_color;\n#if USE_TEXTURE\nin vec2 a_uv0;\nout vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}", + "frag": "\n#if CC_SUPPORT_standard_derivatives\n #extension GL_OES_standard_derivatives : enable\n#endif\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform ALPHA_TEST {\n float alphaThreshold;\n };\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nin vec4 v_color;\n#if USE_TEXTURE\nin vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n#if USE_SDF\nuniform Outline {\n vec4 outlineColor;\n float outlineSize;\n};\n#endif\nvoid main () {\n#if USE_SDF\n #if USE_TEXTURE_ALPHAONLY\n float dist = texture(texture, v_uv0).a;\n #else\n float dist = texture(texture, v_uv0).r;\n #endif\n #if USE_SDF_EXTEND\n const float EDGE_VALUE = 0.45;\n #else\n const float EDGE_VALUE = 0.5;\n #endif\n #if CC_SUPPORT_standard_derivatives\n float smoothing = fwidth(dist);\n #else\n float smoothing = 0.05;\n #endif\n float outEdge = EDGE_VALUE - outlineSize;\n float bg = smoothstep(outEdge - smoothing, outEdge, dist);\n float fg = smoothstep(EDGE_VALUE - smoothing, EDGE_VALUE, dist);\n vec4 fgColor = outlineColor * (1.0 - fg) + v_color * fg;\n gl_FragColor = vec4(fgColor.rgb, fgColor.a * bg);\n#else\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n #if USE_TEXTURE_ALPHAONLY\n o.a *= texture(texture, v_uv0).a;\n #else\n o *= texture(texture, v_uv0);\n #endif\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n#endif\n}" + }, + "glsl1": { + "vert": "\nprecision highp float;\nuniform mat4 cc_matViewProj;\nuniform mat4 cc_matWorld;\nattribute vec3 a_position;\nattribute vec4 a_color;\nvarying vec4 v_color;\n#if USE_TEXTURE\nattribute vec2 a_uv0;\nvarying vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}", + "frag": "\n#if CC_SUPPORT_standard_derivatives\n #extension GL_OES_standard_derivatives : enable\n#endif\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform float alphaThreshold;\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvarying vec4 v_color;\n#if USE_TEXTURE\nvarying vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n#if USE_SDF\nuniform vec4 outlineColor;\nuniform float outlineSize;\n#endif\nvoid main () {\n#if USE_SDF\n #if USE_TEXTURE_ALPHAONLY\n float dist = texture2D(texture, v_uv0).a;\n #else\n float dist = texture2D(texture, v_uv0).r;\n #endif\n #if USE_SDF_EXTEND\n const float EDGE_VALUE = 0.45;\n #else\n const float EDGE_VALUE = 0.5;\n #endif\n #if CC_SUPPORT_standard_derivatives\n float smoothing = fwidth(dist);\n #else\n float smoothing = 0.05;\n #endif\n float outEdge = EDGE_VALUE - outlineSize;\n float bg = smoothstep(outEdge - smoothing, outEdge, dist);\n float fg = smoothstep(EDGE_VALUE - smoothing, EDGE_VALUE, dist);\n vec4 fgColor = outlineColor * (1.0 - fg) + v_color * fg;\n gl_FragColor = vec4(fgColor.rgb, fgColor.a * bg);\n#else\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n #if USE_TEXTURE_ALPHAONLY\n o.a *= texture2D(texture, v_uv0).a;\n #else\n o *= texture2D(texture, v_uv0);\n #endif\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n#endif\n}" + }, + "builtins": { + "globals": { + "blocks": [ + { + "name": "CCGlobal", + "defines": [] + } + ], + "samplers": [] + }, + "locals": { + "blocks": [ + { + "name": "CCLocal", + "defines": [] + } + ], + "samplers": [] + } + }, + "defines": [ + { + "name": "USE_TEXTURE", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_MODEL", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_SUPPORT_standard_derivatives", + "type": "boolean", + "defines": [] + }, + { + "name": "USE_ALPHA_TEST", + "type": "boolean", + "defines": [] + }, + { + "name": "USE_SDF", + "type": "boolean", + "defines": [] + }, + { + "name": "USE_TEXTURE_ALPHAONLY", + "type": "boolean", + "defines": [ + "USE_SDF" + ] + }, + { + "name": "USE_SDF_EXTEND", + "type": "boolean", + "defines": [ + "USE_SDF" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_TEXTURE", + "type": "boolean", + "defines": [ + "USE_TEXTURE" + ] + } + ], + "blocks": [ + { + "name": "ALPHA_TEST", + "binding": 0, + "members": [ + { + "name": "alphaThreshold", + "type": 13, + "count": 1 + } + ], + "defines": [ + "USE_ALPHA_TEST" + ] + }, + { + "name": "Outline", + "binding": 1, + "members": [ + { + "name": "outlineColor", + "type": 16, + "count": 1 + }, + { + "name": "outlineSize", + "type": 13, + "count": 1 + } + ], + "defines": [ + "USE_SDF" + ] + } + ], + "samplers": [ + { + "name": "texture", + "type": 29, + "count": 1, + "binding": 30, + "defines": [ + "USE_TEXTURE" + ] + } + ] + } + ], + [ + { + "passes": [ + { + "program": "builtin-2d-label|vs|fs", + "blendState": { + "targets": [ + { + "blend": true + } + ] + }, + "rasterizerState": { + "cullMode": 0 + }, + "properties": { + "texture": { + "value": "white", + "type": 29 + }, + "alphaThreshold": { + "type": 13, + "value": [ + 0.5 + ] + }, + "outlineSize": { + "type": 13, + "value": [ + 0 + ] + }, + "outlineColor": { + "type": 16, + "value": [ + 1, + 1, + 1, + 1 + ] + } + } + } + ] + } + ] + ] + ], + 0, + 0, + [], + [], + [] + ] + ] +] \ No newline at end of file diff --git a/demo/web-desktop/assets/internal/index.8360b.js b/demo/web-desktop/assets/internal/index.8360b.js new file mode 100644 index 00000000..a4d827f4 --- /dev/null +++ b/demo/web-desktop/assets/internal/index.8360b.js @@ -0,0 +1,29 @@ +(function e(t, n, r) { + function s(o, u) { + if (!n[o]) { + if (!t[o]) { + var b = o.split("/"); + b = b[b.length - 1]; + if (!t[b]) { + var a = "function" == typeof __require && __require; + if (!u && a) return a(b, !0); + if (i) return i(b, !0); + throw new Error("Cannot find module '" + o + "'"); + } + o = b; + } + var f = n[o] = { + exports: {} + }; + t[o][0].call(f.exports, function(e) { + var n = t[o][1][e]; + return s(n || e); + }, f, f.exports, e, t, n, r); + } + return n[o].exports; + } + var i = "function" == typeof __require && __require; + for (var o = 0; o < r.length; o++) s(r[o]); + return s; +})({}, {}, []); +//# sourceMappingURL=index.js.map diff --git a/demo/web-desktop/assets/internal/index.js.map b/demo/web-desktop/assets/internal/index.js.map new file mode 100644 index 00000000..a6d01198 --- /dev/null +++ b/demo/web-desktop/assets/internal/index.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"index.js"} \ No newline at end of file diff --git a/demo/web-desktop/assets/internal/native/02/0275e94c-56a7-410f-bd1a-fc7483f7d14a.cea68.png b/demo/web-desktop/assets/internal/native/02/0275e94c-56a7-410f-bd1a-fc7483f7d14a.cea68.png new file mode 100644 index 0000000000000000000000000000000000000000..fa6376e6316ae9bd38595b550b5fdf78a6fa6d6b GIT binary patch literal 82 zcmeAS@N?(olHy`uVBq!ia0vp^Od!n23?w}&=BEQG<^Z1%*Z=?jFFzuE0?6g^ba4#f bxSkAB$il#=a7i~GD9YgJ>gTe~DWM4fnP3tm literal 0 HcmV?d00001 diff --git a/demo/web-desktop/assets/main/config.fb25a.json b/demo/web-desktop/assets/main/config.fb25a.json new file mode 100644 index 00000000..b6dbdbde --- /dev/null +++ b/demo/web-desktop/assets/main/config.fb25a.json @@ -0,0 +1,55 @@ +{ + "paths": {}, + "uuids": [ + "catK9m3HRBtYgmebOjC6ma", + "ecpdLyjvZBwrvm+cedCcQy", + "a2MjXRFdtLlYQ5ouAFv/+R", + "5cO7kybDxGj4ipyMYdRYZB", + "5f5dyqtRNNxaFmVzYns6FZ", + "e3EaADwKFP+ZmDIVTeFF63", + "02delMVqdBD70a/HSD99FK", + "d608qFRoFHwbXd0Dap056i", + "61cyPdEfRN047sDK9rO0W5" + ], + "scenes": { + "db://assets/main.fire": "catK9m3HRBtYgmebOjC6ma" + }, + "redirect": [ + "ecpdLyjvZBwrvm+cedCcQy", + 0, + "02delMVqdBD70a/HSD99FK", + 0 + ], + "deps": [ + "internal" + ], + "packs": { + "0d90adf1f": [ + "5cO7kybDxGj4ipyMYdRYZB", + "5f5dyqtRNNxaFmVzYns6FZ", + "61cyPdEfRN047sDK9rO0W5", + "a2MjXRFdtLlYQ5ouAFv/+R", + "catK9m3HRBtYgmebOjC6ma", + "d608qFRoFHwbXd0Dap056i", + "e3EaADwKFP+ZmDIVTeFF63" + ] + }, + "name": "main", + "importBase": "import", + "nativeBase": "native", + "debug": true, + "isZip": false, + "encrypted": false, + "versions": { + "import": [ + "0d90adf1f", + "bd1b5" + ], + "native": [ + "61cyPdEfRN047sDK9rO0W5", + "6d707", + "d608qFRoFHwbXd0Dap056i", + "d55c2" + ] + } +} \ No newline at end of file diff --git a/demo/web-desktop/assets/main/import/0d/0d90adf1f.bd1b5.json b/demo/web-desktop/assets/main/import/0d/0d90adf1f.bd1b5.json new file mode 100644 index 00000000..1a4e33c8 --- /dev/null +++ b/demo/web-desktop/assets/main/import/0d/0d90adf1f.bd1b5.json @@ -0,0 +1,3338 @@ +[ + 1, + [ + "ecpdLyjvZBwrvm+cedCcQy", + "a2MjXRFdtLlYQ5ouAFv/+R", + "d608qFRoFHwbXd0Dap056i", + "61cyPdEfRN047sDK9rO0W5", + "02delMVqdBD70a/HSD99FK", + "5f5dyqtRNNxaFmVzYns6FZ", + "e3EaADwKFP+ZmDIVTeFF63", + "5cO7kybDxGj4ipyMYdRYZB" + ], + [ + "node", + "_spriteFrame", + "checkMark", + "_N$target", + "_textureSetter", + "root", + "_parent", + "version", + "mainArea", + "scene", + "_scrollView", + "asset", + "data" + ], + [ + [ + "cc.Node", + [ + "_name", + "_id", + "_opacity", + "_components", + "_contentSize", + "_parent", + "_trs", + "_children", + "_color", + "_prefab", + "_anchorPoint" + ], + 0, + 9, + 5, + 1, + 7, + 2, + 5, + 4, + 5 + ], + [ + "cc.Widget", + [ + "_alignFlags", + "_originalHeight", + "_left", + "_originalWidth", + "alignMode", + "_top", + "node" + ], + -3, + 1 + ], + [ + "cc.Node", + [ + "_name", + "_active", + "_parent", + "_components", + "_contentSize", + "_color", + "_trs", + "_children", + "_anchorPoint" + ], + 1, + 1, + 12, + 5, + 5, + 7, + 2, + 5 + ], + [ + "cc.Sprite", + [ + "_sizeMode", + "_type", + "_isTrimmedMode", + "node", + "_materials", + "_spriteFrame" + ], + 0, + 1, + 3, + 6 + ], + "cc.SpriteFrame", + [ + "cc.Label", + [ + "_string", + "_fontSize", + "_N$horizontalAlign", + "_N$verticalAlign", + "_N$cacheMode", + "_materials", + "_lineHeight", + "_N$overflow", + "node" + ], + -5, + 1 + ], + [ + "cc.PrefabInfo", + [ + "sync", + "fileId", + "root", + "asset" + ], + 1, + 1, + 6 + ], + "cc.Texture2D", + [ + "cc.Toggle", + [ + "zoomScale", + "_N$transition", + "_N$isChecked", + "node", + "_N$normalColor", + "_N$target", + "checkMark" + ], + 0, + 1, + 5, + 1, + 1 + ], + [ + "cc.SceneAsset", + [ + "_name", + "asyncLoadAssets" + ], + 1 + ], + [ + "cc.Node", + [ + "_name", + "_parent", + "_components", + "_contentSize", + "_anchorPoint" + ], + 2, + 1, + 2, + 5, + 5 + ], + [ + "cc.ToggleContainer", + [ + "node" + ], + 3, + 1 + ], + [ + "cc.Layout", + [ + "_resize", + "_N$layoutType", + "_N$paddingTop", + "node", + "_layoutSize" + ], + 0, + 1, + 5 + ], + [ + "cc.Canvas", + [ + "node", + "_designResolution" + ], + 3, + 1, + 5 + ], + [ + "2454fZB1jNNTbYkc7ryXmr1", + [ + "node", + "version" + ], + 3, + 1, + 1 + ], + [ + "853f5uyG5pFHpEaXeXta1ML", + [ + "node", + "home", + "multiMaterial", + "multiBatcher", + "charMode", + "highDPI", + "spineBatch", + "spineSkin", + "mainArea" + ], + 3, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + [ + "cc.Scene", + [ + "_name", + "_children", + "_anchorPoint", + "_trs" + ], + 2, + 2, + 5, + 7 + ], + [ + "cc.Camera", + [ + "_clearFlags", + "_depth", + "node" + ], + 1, + 1 + ], + [ + "cc.Scrollbar", + [ + "_N$direction", + "node", + "_N$handle" + ], + 2, + 1, + 1 + ], + [ + "cc.ScrollView", + [ + "horizontal", + "brake", + "bounceDuration", + "_N$horizontalScrollBar", + "node", + "_N$content", + "_N$verticalScrollBar" + ], + -1, + 1, + 1, + 1 + ], + [ + "cc.Prefab", + [ + "_name" + ], + 2 + ] + ], + [ + [ + 1, + 0, + 3, + 1, + 6, + 4 + ], + [ + 1, + 0, + 6, + 2 + ], + [ + 3, + 0, + 3, + 4, + 5, + 2 + ], + [ + 5, + 0, + 1, + 2, + 3, + 4, + 5, + 8, + 7 + ], + [ + 1, + 0, + 3, + 6, + 3 + ], + [ + 0, + 0, + 5, + 7, + 3, + 4, + 6, + 2 + ], + [ + 0, + 0, + 5, + 3, + 4, + 2 + ], + [ + 0, + 0, + 5, + 3, + 8, + 4, + 2 + ], + [ + 3, + 0, + 3, + 4, + 2 + ], + [ + 2, + 0, + 1, + 2, + 3, + 5, + 4, + 3 + ], + [ + 8, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 4 + ], + [ + 0, + 0, + 5, + 3, + 8, + 4, + 6, + 2 + ], + [ + 1, + 0, + 2, + 6, + 3 + ], + [ + 0, + 0, + 2, + 5, + 3, + 8, + 4, + 6, + 3 + ], + [ + 5, + 0, + 1, + 6, + 2, + 3, + 7, + 4, + 5, + 8, + 9 + ], + [ + 9, + 0, + 1, + 3 + ], + [ + 0, + 0, + 7, + 3, + 4, + 10, + 6, + 2 + ], + [ + 0, + 0, + 1, + 7, + 3, + 4, + 6, + 3 + ], + [ + 0, + 0, + 5, + 7, + 3, + 4, + 2 + ], + [ + 0, + 0, + 5, + 9, + 2 + ], + [ + 0, + 0, + 7, + 3, + 9, + 4, + 6, + 2 + ], + [ + 0, + 0, + 5, + 3, + 9, + 8, + 4, + 6, + 2 + ], + [ + 2, + 0, + 2, + 7, + 3, + 5, + 4, + 6, + 2 + ], + [ + 2, + 0, + 2, + 7, + 3, + 4, + 8, + 6, + 2 + ], + [ + 2, + 0, + 2, + 3, + 5, + 4, + 6, + 2 + ], + [ + 2, + 0, + 2, + 3, + 5, + 4, + 2 + ], + [ + 10, + 0, + 1, + 2, + 3, + 4, + 2 + ], + [ + 11, + 0, + 1 + ], + [ + 12, + 0, + 1, + 2, + 3, + 4, + 4 + ], + [ + 1, + 0, + 1, + 6, + 3 + ], + [ + 1, + 4, + 0, + 2, + 1, + 6, + 5 + ], + [ + 1, + 0, + 2, + 5, + 6, + 4 + ], + [ + 8, + 0, + 1, + 3, + 4, + 5, + 6, + 3 + ], + [ + 13, + 0, + 1, + 1 + ], + [ + 14, + 0, + 1, + 1 + ], + [ + 3, + 0, + 2, + 3, + 4, + 5, + 3 + ], + [ + 3, + 1, + 0, + 3, + 4, + 5, + 3 + ], + [ + 3, + 1, + 0, + 3, + 4, + 3 + ], + [ + 15, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 1 + ], + [ + 5, + 0, + 1, + 6, + 2, + 3, + 4, + 5, + 8, + 8 + ], + [ + 16, + 0, + 1, + 2, + 3, + 2 + ], + [ + 17, + 0, + 1, + 2, + 3 + ], + [ + 18, + 0, + 1, + 2, + 2 + ], + [ + 19, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 5 + ], + [ + 6, + 0, + 2, + 3, + 2 + ], + [ + 6, + 2, + 1 + ], + [ + 6, + 1, + 2, + 2 + ], + [ + 20, + 0, + 2 + ] + ], + [ + [ + [ + { + "name": "default_scrollbar_vertical", + "rect": [ + 0, + 0, + 15, + 30 + ], + "offset": [ + 0, + 0 + ], + "originalSize": [ + 15, + 30 + ], + "capInsets": [ + 4, + 10, + 4, + 10 + ] + } + ], + [ + 4 + ], + 0, + [ + 0 + ], + [ + 4 + ], + [ + 2 + ] + ], + [ + [ + { + "name": "default_scrollbar_vertical_bg", + "rect": [ + 0, + 0, + 15, + 30 + ], + "offset": [ + 0, + 0 + ], + "originalSize": [ + 15, + 30 + ], + "capInsets": [ + 4, + 10, + 4, + 10 + ] + } + ], + [ + 4 + ], + 0, + [ + 0 + ], + [ + 4 + ], + [ + 3 + ] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 7 + ], + 0, + [], + [], + [] + ], + [ + [ + { + "name": "default_sprite_splash", + "rect": [ + 0, + 0, + 2, + 2 + ], + "offset": [ + 0, + 0 + ], + "originalSize": [ + 2, + 2 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 4 + ], + 0, + [ + 0 + ], + [ + 4 + ], + [ + 4 + ] + ], + [ + [ + [ + 15, + "main", + null + ], + [ + 16, + "content", + [ + -4, + -5, + -6, + -7, + -8, + -9, + -10, + -11, + -12, + -13, + -14, + -15, + -16, + -17, + -18 + ], + [ + [ + 27, + -1 + ], + [ + 28, + 1, + 2, + 10, + -2, + [ + 5, + 240, + 555 + ] + ], + [ + 4, + 41, + 220, + -3 + ] + ], + [ + 5, + 240, + 555 + ], + [ + 0, + 0.5, + 1 + ], + [ + 0, + 300, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 5, + "home", + 1, + [ + -23, + -24, + -25 + ], + [ + [ + 32, + 0.97, + 3, + -21, + [ + 4, + 4292269782 + ], + -20, + -19 + ], + [ + 4, + 40, + 200, + -22 + ] + ], + [ + 5, + 240, + 50 + ], + [ + 0, + -107, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0 + ] + ], + [ + 5, + "multi-render-material", + 1, + [ + -30, + -31, + -32 + ], + [ + [ + 10, + 0.97, + 3, + false, + -28, + [ + 4, + 4292269782 + ], + -27, + -26 + ], + [ + 4, + 40, + 200, + -29 + ] + ], + [ + 5, + 240, + 50 + ], + [ + 0, + -197, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0 + ] + ], + [ + 5, + "multi-render-batcher", + 1, + [ + -37, + -38, + -39 + ], + [ + [ + 10, + 0.97, + 3, + false, + -35, + [ + 4, + 4292269782 + ], + -34, + -33 + ], + [ + 4, + 40, + 200, + -36 + ] + ], + [ + 5, + 240, + 50 + ], + [ + 0, + -248, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0 + ] + ], + [ + 5, + "char-mode", + 1, + [ + -44, + -45, + -46 + ], + [ + [ + 10, + 0.97, + 3, + false, + -42, + [ + 4, + 4292269782 + ], + -41, + -40 + ], + [ + 4, + 40, + 200, + -43 + ] + ], + [ + 5, + 240, + 50 + ], + [ + 0, + -338, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0 + ] + ], + [ + 5, + "high-dpi", + 1, + [ + -51, + -52, + -53 + ], + [ + [ + 10, + 0.97, + 3, + false, + -49, + [ + 4, + 4292269782 + ], + -48, + -47 + ], + [ + 4, + 40, + 200, + -50 + ] + ], + [ + 5, + 240, + 50 + ], + [ + 0, + -389, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0 + ] + ], + [ + 5, + "spine-batch", + 1, + [ + -58, + -59, + -60 + ], + [ + [ + 10, + 0.97, + 3, + false, + -56, + [ + 4, + 4292269782 + ], + -55, + -54 + ], + [ + 4, + 40, + 200, + -57 + ] + ], + [ + 5, + 240, + 50 + ], + [ + 0, + -479, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0 + ] + ], + [ + 5, + "spine-skin", + 1, + [ + -65, + -66, + -67 + ], + [ + [ + 10, + 0.97, + 3, + false, + -63, + [ + 4, + 4292269782 + ], + -62, + -61 + ], + [ + 4, + 40, + 200, + -64 + ] + ], + [ + 5, + 240, + 50 + ], + [ + 0, + -530, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0 + ] + ], + [ + 17, + "Canvas", + "a5esZu+45LA5mBpvttspPD", + [ + -72, + -73, + -74 + ], + [ + [ + 33, + -68, + [ + 5, + 960, + 600 + ] + ], + [ + 1, + 45, + -69 + ], + [ + 34, + -71, + -70 + ] + ], + [ + 5, + 960, + 600 + ], + [ + 480, + 300, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 22, + "left-area", + 9, + [ + -80, + -81 + ], + [ + [ + -75, + [ + 29, + 13, + 250, + -76 + ], + [ + 35, + 0, + false, + -77, + [ + 30 + ], + 31 + ], + [ + 38, + -79, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + -78 + ] + ], + 1, + 4, + 4, + 4 + ], + [ + 4, + 4279834905 + ], + [ + 5, + 240, + 600 + ], + [ + -360, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 23, + "scrollBar", + 10, + [ + -85 + ], + [ + [ + -82, + [ + 30, + 0, + 37, + 350.07654921020657, + 237, + -83 + ], + [ + 36, + 1, + 0, + -84, + [ + 28 + ], + 29 + ] + ], + 1, + 4, + 4 + ], + [ + 5, + 8, + 600 + ], + [ + 0, + 1, + 0.5 + ], + [ + 120, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 5, + "main-area", + 9, + [ + -87 + ], + [ + [ + 1, + 37, + -86 + ] + ], + [ + 5, + 720, + 600 + ], + [ + 120, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 18, + "view", + 10, + [ + 1 + ], + [ + [ + 0, + 45, + 240, + 250, + -88 + ] + ], + [ + 5, + 240, + 600 + ] + ], + [ + 11, + "cat", + 1, + [ + [ + 14, + "- Cocos Service Pack Demo -", + 14, + 16, + 1, + 1, + 1, + 2, + [ + null + ], + -89 + ], + [ + 12, + 16, + 20, + -90 + ] + ], + [ + 4, + 4287401100 + ], + [ + 5, + 230.365, + 40 + ], + [ + 0, + -30, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 24, + "cat", + 1, + [ + [ + -91, + [ + 4, + 40, + 200.135, + -92 + ] + ], + 1, + 4 + ], + [ + 4, + 4287401100 + ], + [ + 5, + 240, + 32 + ], + [ + 0, + -66, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 7, + "bg", + 2, + [ + [ + 2, + 0, + -93, + [ + 0 + ], + 1 + ], + [ + 0, + 45, + 100, + 100, + -94 + ] + ], + [ + 4, + 4281348144 + ], + [ + 5, + 240, + 50 + ] + ], + [ + 25, + "check", + 2, + [ + [ + -95, + [ + 0, + 45, + 100, + 100, + -96 + ] + ], + 1, + 4 + ], + [ + 4, + 4283058762 + ], + [ + 5, + 240, + 50 + ] + ], + [ + 6, + "text", + 2, + [ + [ + 3, + "首页", + 16, + 1, + 1, + 2, + [ + null + ], + -97 + ], + [ + 1, + 18, + -98 + ] + ], + [ + 5, + 32, + 40 + ] + ], + [ + 11, + "cat", + 1, + [ + [ + 3, + "- 多纹理渲染 -", + 14, + 1, + 1, + 2, + [ + null + ], + -99 + ], + [ + 12, + 16, + 20, + -100 + ] + ], + [ + 4, + 4287401100 + ], + [ + 5, + 87.1, + 40 + ], + [ + 0, + -152, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 7, + "bg", + 3, + [ + [ + 2, + 0, + -101, + [ + 3 + ], + 4 + ], + [ + 0, + 45, + 100, + 100, + -102 + ] + ], + [ + 4, + 4281348144 + ], + [ + 5, + 240, + 50 + ] + ], + [ + 9, + "check", + false, + 3, + [ + [ + -103, + [ + 0, + 45, + 100, + 100, + -104 + ] + ], + 1, + 4 + ], + [ + 4, + 4283058762 + ], + [ + 5, + 240, + 50 + ] + ], + [ + 6, + "text", + 3, + [ + [ + 3, + "多纹理材质", + 16, + 1, + 1, + 2, + [ + null + ], + -105 + ], + [ + 1, + 18, + -106 + ] + ], + [ + 5, + 80, + 40 + ] + ], + [ + 7, + "bg", + 4, + [ + [ + 2, + 0, + -107, + [ + 8 + ], + 9 + ], + [ + 0, + 45, + 100, + 100, + -108 + ] + ], + [ + 4, + 4281348144 + ], + [ + 5, + 240, + 50 + ] + ], + [ + 9, + "check", + false, + 4, + [ + [ + -109, + [ + 0, + 45, + 100, + 100, + -110 + ] + ], + 1, + 4 + ], + [ + 4, + 4283058762 + ], + [ + 5, + 240, + 50 + ] + ], + [ + 6, + "text", + 4, + [ + [ + 3, + "多纹理合批", + 16, + 1, + 1, + 2, + [ + null + ], + -111 + ], + [ + 1, + 18, + -112 + ] + ], + [ + 5, + 80, + 40 + ] + ], + [ + 11, + "cat", + 1, + [ + [ + 3, + "- 文本渲染 -", + 14, + 1, + 1, + 2, + [ + null + ], + -113 + ], + [ + 12, + 16, + 20, + -114 + ] + ], + [ + 4, + 4287401100 + ], + [ + 5, + 73.1, + 40 + ], + [ + 0, + -293, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 7, + "bg", + 5, + [ + [ + 2, + 0, + -115, + [ + 11 + ], + 12 + ], + [ + 0, + 45, + 100, + 100, + -116 + ] + ], + [ + 4, + 4281348144 + ], + [ + 5, + 240, + 50 + ] + ], + [ + 9, + "check", + false, + 5, + [ + [ + -117, + [ + 0, + 45, + 100, + 100, + -118 + ] + ], + 1, + 4 + ], + [ + 4, + 4283058762 + ], + [ + 5, + 240, + 50 + ] + ], + [ + 6, + "text", + 5, + [ + [ + 3, + "新的 Char 缓存模式", + 16, + 1, + 1, + 2, + [ + null + ], + -119 + ], + [ + 1, + 18, + -120 + ] + ], + [ + 5, + 139.575, + 40 + ] + ], + [ + 7, + "bg", + 6, + [ + [ + 2, + 0, + -121, + [ + 16 + ], + 17 + ], + [ + 0, + 45, + 100, + 100, + -122 + ] + ], + [ + 4, + 4281348144 + ], + [ + 5, + 240, + 50 + ] + ], + [ + 9, + "check", + false, + 6, + [ + [ + -123, + [ + 0, + 45, + 100, + 100, + -124 + ] + ], + 1, + 4 + ], + [ + 4, + 4283058762 + ], + [ + 5, + 240, + 50 + ] + ], + [ + 6, + "text", + 6, + [ + [ + 3, + "高 DPI 支持", + 16, + 1, + 1, + 2, + [ + null + ], + -125 + ], + [ + 1, + 18, + -126 + ] + ], + [ + 5, + 83.56, + 40 + ] + ], + [ + 11, + "cat", + 1, + [ + [ + 3, + "- Spine 增强 -", + 14, + 1, + 1, + 2, + [ + null + ], + -127 + ], + [ + 12, + 16, + 20, + -128 + ] + ], + [ + 4, + 4287401100 + ], + [ + 5, + 84.795, + 40 + ], + [ + 0, + -434, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 7, + "bg", + 7, + [ + [ + 2, + 0, + -129, + [ + 19 + ], + 20 + ], + [ + 0, + 45, + 100, + 100, + -130 + ] + ], + [ + 4, + 4281348144 + ], + [ + 5, + 240, + 50 + ] + ], + [ + 9, + "check", + false, + 7, + [ + [ + -131, + [ + 0, + 45, + 100, + 100, + -132 + ] + ], + 1, + 4 + ], + [ + 4, + 4283058762 + ], + [ + 5, + 240, + 50 + ] + ], + [ + 6, + "text", + 7, + [ + [ + 3, + "动态合图", + 16, + 1, + 1, + 2, + [ + null + ], + -133 + ], + [ + 1, + 18, + -134 + ] + ], + [ + 5, + 64, + 40 + ] + ], + [ + 7, + "bg", + 8, + [ + [ + 2, + 0, + -135, + [ + 24 + ], + 25 + ], + [ + 0, + 45, + 100, + 100, + -136 + ] + ], + [ + 4, + 4281348144 + ], + [ + 5, + 240, + 50 + ] + ], + [ + 9, + "check", + false, + 8, + [ + [ + -137, + [ + 0, + 45, + 100, + 100, + -138 + ] + ], + 1, + 4 + ], + [ + 4, + 4283058762 + ], + [ + 5, + 240, + 50 + ] + ], + [ + 6, + "text", + 8, + [ + [ + 3, + "SpriteFrame 换装", + 16, + 1, + 1, + 2, + [ + null + ], + -139 + ], + [ + 1, + 18, + -140 + ] + ], + [ + 5, + 124.48, + 40 + ] + ], + [ + 40, + "New Node", + [ + 9 + ], + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 6, + "Main Camera", + 9, + [ + [ + 41, + 7, + -1, + -141 + ] + ], + [ + 5, + 960, + 640 + ] + ], + [ + 14, + "Version: v1.0.0\n", + 14, + 16, + 1, + 1, + 3, + 2, + [ + null + ], + 15 + ], + [ + 8, + 0, + 17, + [ + 2 + ] + ], + [ + 8, + 0, + 21, + [ + 5 + ] + ], + [ + 13, + "line", + 150, + 1, + [ + [ + 2, + 0, + -142, + [ + 6 + ], + 7 + ] + ], + [ + 4, + 4278190080 + ], + [ + 5, + 240, + 1 + ], + [ + 0, + -222.5, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 8, + 0, + 24, + [ + 10 + ] + ], + [ + 8, + 0, + 28, + [ + 13 + ] + ], + [ + 13, + "line", + 150, + 1, + [ + [ + 2, + 0, + -143, + [ + 14 + ], + 15 + ] + ], + [ + 4, + 4278190080 + ], + [ + 5, + 240, + 1 + ], + [ + 0, + -363.5, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 8, + 0, + 31, + [ + 18 + ] + ], + [ + 8, + 0, + 35, + [ + 21 + ] + ], + [ + 13, + "line", + 150, + 1, + [ + [ + 2, + 0, + -144, + [ + 22 + ], + 23 + ] + ], + [ + 4, + 4278190080 + ], + [ + 5, + 240, + 1 + ], + [ + 0, + -504.5, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 8, + 0, + 38, + [ + 26 + ] + ], + [ + 26, + "bar", + 11, + [ + -145 + ], + [ + 5, + 8, + 30 + ], + [ + 0, + 1, + 0 + ] + ], + [ + 37, + 1, + 0, + 53, + [ + 27 + ] + ], + [ + 42, + 1, + 11, + 54 + ], + [ + 43, + false, + 0.75, + 0.23, + null, + 10, + 1, + 55 + ], + [ + 19, + "home", + 12, + [ + 44, + true, + -146, + 32 + ] + ] + ], + 0, + [ + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + -1, + 14, + 0, + -2, + 15, + 0, + -3, + 2, + 0, + -4, + 19, + 0, + -5, + 3, + 0, + -6, + 45, + 0, + -7, + 4, + 0, + -8, + 26, + 0, + -9, + 5, + 0, + -10, + 48, + 0, + -11, + 6, + 0, + -12, + 33, + 0, + -13, + 7, + 0, + -14, + 51, + 0, + -15, + 8, + 0, + 2, + 43, + 0, + 3, + 2, + 0, + 0, + 2, + 0, + 0, + 2, + 0, + -1, + 16, + 0, + -2, + 17, + 0, + -3, + 18, + 0, + 2, + 44, + 0, + 3, + 3, + 0, + 0, + 3, + 0, + 0, + 3, + 0, + -1, + 20, + 0, + -2, + 21, + 0, + -3, + 22, + 0, + 2, + 46, + 0, + 3, + 4, + 0, + 0, + 4, + 0, + 0, + 4, + 0, + -1, + 23, + 0, + -2, + 24, + 0, + -3, + 25, + 0, + 2, + 47, + 0, + 3, + 5, + 0, + 0, + 5, + 0, + 0, + 5, + 0, + -1, + 27, + 0, + -2, + 28, + 0, + -3, + 29, + 0, + 2, + 49, + 0, + 3, + 6, + 0, + 0, + 6, + 0, + 0, + 6, + 0, + -1, + 30, + 0, + -2, + 31, + 0, + -3, + 32, + 0, + 2, + 50, + 0, + 3, + 7, + 0, + 0, + 7, + 0, + 0, + 7, + 0, + -1, + 34, + 0, + -2, + 35, + 0, + -3, + 36, + 0, + 2, + 52, + 0, + 3, + 8, + 0, + 0, + 8, + 0, + 0, + 8, + 0, + -1, + 37, + 0, + -2, + 38, + 0, + -3, + 39, + 0, + 0, + 9, + 0, + 0, + 9, + 0, + 7, + 42, + 0, + 0, + 9, + 0, + -1, + 41, + 0, + -2, + 10, + 0, + -3, + 12, + 0, + -1, + 56, + 0, + 0, + 10, + 0, + 0, + 10, + 0, + 8, + 12, + 0, + 0, + 10, + 0, + -1, + 13, + 0, + -2, + 11, + 0, + -1, + 55, + 0, + 0, + 11, + 0, + 0, + 11, + 0, + -1, + 53, + 0, + 0, + 12, + 0, + -1, + 57, + 0, + 0, + 13, + 0, + 0, + 14, + 0, + 0, + 14, + 0, + -1, + 42, + 0, + 0, + 15, + 0, + 0, + 16, + 0, + 0, + 16, + 0, + -1, + 43, + 0, + 0, + 17, + 0, + 0, + 18, + 0, + 0, + 18, + 0, + 0, + 19, + 0, + 0, + 19, + 0, + 0, + 20, + 0, + 0, + 20, + 0, + -1, + 44, + 0, + 0, + 21, + 0, + 0, + 22, + 0, + 0, + 22, + 0, + 0, + 23, + 0, + 0, + 23, + 0, + -1, + 46, + 0, + 0, + 24, + 0, + 0, + 25, + 0, + 0, + 25, + 0, + 0, + 26, + 0, + 0, + 26, + 0, + 0, + 27, + 0, + 0, + 27, + 0, + -1, + 47, + 0, + 0, + 28, + 0, + 0, + 29, + 0, + 0, + 29, + 0, + 0, + 30, + 0, + 0, + 30, + 0, + -1, + 49, + 0, + 0, + 31, + 0, + 0, + 32, + 0, + 0, + 32, + 0, + 0, + 33, + 0, + 0, + 33, + 0, + 0, + 34, + 0, + 0, + 34, + 0, + -1, + 50, + 0, + 0, + 35, + 0, + 0, + 36, + 0, + 0, + 36, + 0, + 0, + 37, + 0, + 0, + 37, + 0, + -1, + 52, + 0, + 0, + 38, + 0, + 0, + 39, + 0, + 0, + 39, + 0, + 0, + 41, + 0, + 0, + 45, + 0, + 0, + 48, + 0, + 0, + 51, + 0, + -1, + 54, + 0, + 5, + 57, + 0, + 9, + 40, + 1, + 6, + 13, + 9, + 6, + 40, + 55, + 10, + 56, + 146 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 43, + 44, + 46, + 47, + 49, + 50, + 52, + 54 + ], + [ + -1, + 1, + -1, + -1, + 1, + -1, + -1, + 1, + -1, + 1, + -1, + -1, + 1, + -1, + -1, + 1, + -1, + 1, + -1, + -1, + 1, + -1, + -1, + 1, + -1, + 1, + -1, + -1, + -1, + 1, + -1, + 1, + 11, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + [ + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 5, + 0, + 1, + 6, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 7 + ] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 7 + ], + 0, + [], + [], + [] + ], + [ + [ + [ + 47, + "home" + ], + [ + 20, + "home", + [ + -3 + ], + [ + [ + 1, + 45, + -2 + ] + ], + [ + 45, + -1 + ], + [ + 5, + 960, + 600 + ], + [ + 480, + 300, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 21, + "tips", + 1, + [ + [ + 39, + "源码:https://github.com/smallmain/cocos-service-pack/tree/master/demo", + 16, + 20, + 1, + 1, + 2, + [ + null + ], + -4 + ], + [ + 31, + 17, + 95.11500000000001, + 549.6320000000001, + -5 + ] + ], + [ + 46, + "60yhtKNmhJBa7a+vJD0YMi", + 1 + ], + [ + 4, + 4286611584 + ], + [ + 5, + 522.005, + 20 + ], + [ + 0, + -259.63200000000006, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ] + ], + 0, + [ + 0, + 5, + 1, + 0, + 0, + 1, + 0, + -1, + 2, + 0, + 0, + 2, + 0, + 0, + 2, + 0, + 12, + 1, + 5 + ], + [], + [], + [] + ] + ] +] \ No newline at end of file diff --git a/demo/web-desktop/assets/main/index.fb25a.js b/demo/web-desktop/assets/main/index.fb25a.js new file mode 100644 index 00000000..f32603dc --- /dev/null +++ b/demo/web-desktop/assets/main/index.fb25a.js @@ -0,0 +1,233 @@ +window.__require = function e(t, n, r) { + function s(o, u) { + if (!n[o]) { + if (!t[o]) { + var b = o.split("/"); + b = b[b.length - 1]; + if (!t[b]) { + var a = "function" == typeof __require && __require; + if (!u && a) return a(b, !0); + if (i) return i(b, !0); + throw new Error("Cannot find module '" + o + "'"); + } + o = b; + } + var f = n[o] = { + exports: {} + }; + t[o][0].call(f.exports, function(e) { + var n = t[o][1][e]; + return s(n || e); + }, f, f.exports, e, t, n, r); + } + return n[o].exports; + } + var i = "function" == typeof __require && __require; + for (var o = 0; o < r.length; o++) s(r[o]); + return s; +}({ + "left-area": [ function(require, module, exports) { + "use strict"; + cc._RF.push(module, "853f5uyG5pFHpEaXeXta1ML", "left-area"); + "use strict"; + var __extends = this && this.__extends || function() { + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || { + __proto__: [] + } instanceof Array && function(d, b) { + d.__proto__ = b; + } || function(d, b) { + for (var p in b) Object.prototype.hasOwnProperty.call(b, p) && (d[p] = b[p]); + }; + return extendStatics(d, b); + }; + return function(d, b) { + extendStatics(d, b); + function __() { + this.constructor = d; + } + d.prototype = null === b ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + }(); + var __decorate = this && this.__decorate || function(decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : null === desc ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if ("object" === typeof Reflect && "function" === typeof Reflect.decorate) r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) (d = decorators[i]) && (r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r); + return c > 3 && r && Object.defineProperty(target, key, r), r; + }; + var __values = this && this.__values || function(o) { + var s = "function" === typeof Symbol && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && "number" === typeof o.length) return { + next: function() { + o && i >= o.length && (o = void 0); + return { + value: o && o[i++], + done: !o + }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); + }; + var __read = this && this.__read || function(o, n) { + var m = "function" === typeof Symbol && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((void 0 === n || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } catch (error) { + e = { + error: error + }; + } finally { + try { + r && !r.done && (m = i["return"]) && m.call(i); + } finally { + if (e) throw e.error; + } + } + return ar; + }; + Object.defineProperty(exports, "__esModule", { + value: true + }); + var _a = cc._decorator, ccclass = _a.ccclass, property = _a.property; + var LeftArea = function(_super) { + __extends(LeftArea, _super); + function LeftArea() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.home = null; + _this.multiMaterial = null; + _this.multiBatcher = null; + _this.charMode = null; + _this.highDPI = null; + _this.spineBatch = null; + _this.spineSkin = null; + _this.mainArea = null; + _this.tick = 0; + return _this; + } + LeftArea.prototype.start = function() { + this.map = new Map([ [ this.home, { + bundle: "home", + path: "home" + } ], [ this.multiMaterial, { + bundle: "multi-render", + path: "multi-material/multi-material" + } ], [ this.multiBatcher, { + bundle: "multi-render", + path: "multi-batcher/multi-batcher" + } ], [ this.charMode, { + bundle: "text-render", + path: "char-mode/char-mode" + } ], [ this.highDPI, { + bundle: "text-render", + path: "high-dpi/high-dpi" + } ], [ this.spineBatch, { + bundle: "spine", + path: "batch/spine-batch" + } ], [ this.spineSkin, { + bundle: "spine", + path: "skin/spine-skin" + } ] ]); + this.initBtns(); + }; + LeftArea.prototype.initBtns = function() { + var e_1, _a; + var _this = this; + var _loop_1 = function(node, route) { + node.on("toggle", function(toggle) { + if (toggle.isChecked) { + var cur_1 = ++_this.tick; + _this.mainArea.destroyAllChildren(); + route && cc.assetManager.loadBundle(route.bundle, function(err, bundle) { + err || bundle.load(route.path, cc.Prefab, function(err, prefab) { + err || cur_1 !== _this.tick || _this.mainArea.addChild(cc.instantiate(prefab)); + }); + }); + } + }); + }; + try { + for (var _b = __values(this.map), _c = _b.next(); !_c.done; _c = _b.next()) { + var _d = __read(_c.value, 2), node = _d[0], route = _d[1]; + _loop_1(node, route); + } + } catch (e_1_1) { + e_1 = { + error: e_1_1 + }; + } finally { + try { + _c && !_c.done && (_a = _b.return) && _a.call(_b); + } finally { + if (e_1) throw e_1.error; + } + } + }; + __decorate([ property(cc.Node) ], LeftArea.prototype, "home", void 0); + __decorate([ property(cc.Node) ], LeftArea.prototype, "multiMaterial", void 0); + __decorate([ property(cc.Node) ], LeftArea.prototype, "multiBatcher", void 0); + __decorate([ property(cc.Node) ], LeftArea.prototype, "charMode", void 0); + __decorate([ property(cc.Node) ], LeftArea.prototype, "highDPI", void 0); + __decorate([ property(cc.Node) ], LeftArea.prototype, "spineBatch", void 0); + __decorate([ property(cc.Node) ], LeftArea.prototype, "spineSkin", void 0); + __decorate([ property(cc.Node) ], LeftArea.prototype, "mainArea", void 0); + LeftArea = __decorate([ ccclass ], LeftArea); + return LeftArea; + }(cc.Component); + exports.default = LeftArea; + cc._RF.pop(); + }, {} ], + main: [ function(require, module, exports) { + "use strict"; + cc._RF.push(module, "2454fZB1jNNTbYkc7ryXmr1", "main"); + "use strict"; + var __extends = this && this.__extends || function() { + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || { + __proto__: [] + } instanceof Array && function(d, b) { + d.__proto__ = b; + } || function(d, b) { + for (var p in b) Object.prototype.hasOwnProperty.call(b, p) && (d[p] = b[p]); + }; + return extendStatics(d, b); + }; + return function(d, b) { + extendStatics(d, b); + function __() { + this.constructor = d; + } + d.prototype = null === b ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + }(); + var __decorate = this && this.__decorate || function(decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : null === desc ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if ("object" === typeof Reflect && "function" === typeof Reflect.decorate) r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) (d = decorators[i]) && (r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r); + return c > 3 && r && Object.defineProperty(target, key, r), r; + }; + Object.defineProperty(exports, "__esModule", { + value: true + }); + var _a = cc._decorator, ccclass = _a.ccclass, property = _a.property; + var Main = function(_super) { + __extends(Main, _super); + function Main() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.version = null; + return _this; + } + Main.prototype.start = function() { + this.version.string = "Version: v" + cc.sp.version + "\n"; + }; + __decorate([ property(cc.Label) ], Main.prototype, "version", void 0); + Main = __decorate([ ccclass ], Main); + return Main; + }(cc.Component); + exports.default = Main; + cc.sp.labelRetinaScale = 2; + cc.dynamicAtlasManager.maxFrameSize = 2048; + cc._RF.pop(); + }, {} ] +}, {}, [ "left-area", "main" ]); +//# sourceMappingURL=index.js.map diff --git a/demo/web-desktop/assets/main/index.js.map b/demo/web-desktop/assets/main/index.js.map new file mode 100644 index 00000000..e051f156 --- /dev/null +++ b/demo/web-desktop/assets/main/index.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["assets/left-area.ts","assets/main.ts"],"names":["_a","cc","_decorator","ccclass","property","LeftArea","_super","__extends","_this","apply","this","arguments","home","multiMaterial","multiBatcher","charMode","highDPI","spineBatch","spineSkin","mainArea","tick","prototype","start","map","Map","bundle","path","initBtns","_loop_1","node","route","on","toggle","isChecked","cur_1","destroyAllChildren","assetManager","loadBundle","err","load","Prefab","prefab","addChild","instantiate","_b","__values","_c","next","done","_d","__read","value","__decorate","Node","Component","exports","default","Main","version","string","sp","Label","labelRetinaScale","dynamicAtlasManager","maxFrameSize"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAAM,IAAAA,KAAAC,GAAAC,YAAAC,UAAAH,GAAAG,SAAAC,WAAAJ,GAAAI;IAGN,IAAAC,WAAA,SAAAC;MAAsCC,UAAAF,UAAAC;MAAtC,SAAAD;QAAA,IAAAG,QAAA,SAAAF,UAAAA,OAAAG,MAAAC,MAAAC,cAAAD;QAGIF,MAAAI,OAAA;QAGAJ,MAAAK,gBAAA;QAGAL,MAAAM,eAAA;QAGAN,MAAAO,WAAA;QAGAP,MAAAQ,UAAA;QAGAR,MAAAS,aAAA;QAGAT,MAAAU,YAAA;QAGAV,MAAAW,WAAA;QAEAX,MAAAY,OAAA;;;MAKAf,SAAAgB,UAAAC,QAAA;QACIZ,KAAAa,MAAA,IAAAC,IAAA,EAEI,EAAAd,KAAAE,MAAA;UACIa,QAAA;UACAC,MAAA;aAGJ,EAAAhB,KAAAG,eAAA;UACIY,QAAA;UACAC,MAAA;aAGJ,EAAAhB,KAAAI,cAAA;UACIW,QAAA;UACAC,MAAA;aAGJ,EAAAhB,KAAAK,UAAA;UACIU,QAAA;UACAC,MAAA;aAGJ,EAAAhB,KAAAM,SAAA;UACIS,QAAA;UACAC,MAAA;aAGJ,EAAAhB,KAAAO,YAAA;UACIQ,QAAA;UACAC,MAAA;aAGJ,EAAAhB,KAAAQ,WAAA;UACIO,QAAA;UACAC,MAAA;;QAKRhB,KAAAiB;;MAIJtB,SAAAgB,UAAAM,WAAA;;QAAA,IAAAnB,QAAAE;QACgB,IAAAkB,UAAA,SAAAC,MAAAC;UACRD,KAAAE,GAAA,UAAA,SAAAC;YACI,IAAAA,OAAAC,WAAA;cACI,IAAAC,UAAA1B,MAAAY;cAEAZ,MAAAW,SAAAgB;cAEAL,SACI7B,GAAAmC,aAAAC,WAAAP,MAAAL,QAAA,SAAAa,KAAAb;gBACIa,OACIb,OAAAc,KAAAT,MAAAJ,MAAAzB,GAAAuC,QAAA,SAAAF,KAAAG;kBACIH,OAAAJ,UAAA1B,MAAAY,QACIZ,MAAAW,SAAAuB,SAAAzC,GAAA0C,YAAAF;;;;;;;UAZhC,KAAA,IAAAG,KAAAC,SAAAnC,KAAAa,MAAAuB,KAAAF,GAAAG,SAAAD,GAAAE,MAAAF,KAAAF,GAAAG,QAAA;YAAW,IAAAE,KAAAC,OAAAJ,GAAAK,OAAA,IAAAtB,OAAAoB,GAAA,IAAAnB,QAAAmB,GAAA;YAACrB,QAAAC,MAAAC;;;;;;;;;;;;;;MAzEhBsB,WAAA,EADChD,SAAAH,GAAAoD,SACoBhD,SAAAgB,WAAA,aAAA;MAGrB+B,WAAA,EADChD,SAAAH,GAAAoD,SAC6BhD,SAAAgB,WAAA,sBAAA;MAG9B+B,WAAA,EADChD,SAAAH,GAAAoD,SAC4BhD,SAAAgB,WAAA,qBAAA;MAG7B+B,WAAA,EADChD,SAAAH,GAAAoD,SACwBhD,SAAAgB,WAAA,iBAAA;MAGzB+B,WAAA,EADChD,SAAAH,GAAAoD,SACuBhD,SAAAgB,WAAA,gBAAA;MAGxB+B,WAAA,EADChD,SAAAH,GAAAoD,SAC0BhD,SAAAgB,WAAA,mBAAA;MAG3B+B,WAAA,EADChD,SAAAH,GAAAoD,SACyBhD,SAAAgB,WAAA,kBAAA;MAG1B+B,WAAA,EADChD,SAAAH,GAAAoD,SACwBhD,SAAAgB,WAAA,iBAAA;MAxBRhB,WAAA+C,WAAA,EADpBjD,WACoBE;MAmGrB,OAAAA;KAnGA,CAAAJ,GAAAqD;IAAqBC,QAAAC,UAAAnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICHf,IAAAL,KAAAC,GAAAC,YAAAC,UAAAH,GAAAG,SAAAC,WAAAJ,GAAAI;IAGN,IAAAqD,OAAA,SAAAnD;MAAkCC,UAAAkD,MAAAnD;MAAlC,SAAAmD;QAAA,IAAAjD,QAAA,SAAAF,UAAAA,OAAAG,MAAAC,MAAAC,cAAAD;QAGIF,MAAAkD,UAAA;;;MAGUD,KAAApC,UAAAC,QAAA;QACNZ,KAAAgD,QAAAC,SAAA,eAAA1D,GAAA2D,GAAAF,UAAA;;MAJJN,WAAA,EADChD,SAAAH,GAAA4D,UACwBJ,KAAApC,WAAA,gBAAA;MAHRoC,OAAAL,WAAA,EADpBjD,WACoBsD;MAUrB,OAAAA;KAVA,CAAAxD,GAAAqD;IAAqBC,QAAAC,UAAAC;IAarBxD,GAAA2D,GAAAE,mBAAA;IACA7D,GAAA8D,oBAAAC,eAAA","sourcesContent":["const { ccclass, property } = cc._decorator;\n\n@ccclass\nexport default class LeftArea extends cc.Component {\n\n @property(cc.Node)\n home: cc.Node = null;\n\n @property(cc.Node)\n multiMaterial: cc.Node = null;\n\n @property(cc.Node)\n multiBatcher: cc.Node = null;\n\n @property(cc.Node)\n charMode: cc.Node = null;\n\n @property(cc.Node)\n highDPI: cc.Node = null;\n\n @property(cc.Node)\n spineBatch: cc.Node = null;\n\n @property(cc.Node)\n spineSkin: cc.Node = null;\n\n @property(cc.Node)\n mainArea: cc.Node = null;\n\n tick = 0;\n\n map: Map\n\n\n start() {\n this.map = new Map([\n\n [this.home, {\n bundle: \"home\",\n path: \"home\",\n }],\n\n [this.multiMaterial, {\n bundle: \"multi-render\",\n path: \"multi-material/multi-material\",\n }],\n\n [this.multiBatcher, {\n bundle: \"multi-render\",\n path: \"multi-batcher/multi-batcher\",\n }],\n\n [this.charMode, {\n bundle: \"text-render\",\n path: \"char-mode/char-mode\",\n }],\n\n [this.highDPI, {\n bundle: \"text-render\",\n path: \"high-dpi/high-dpi\",\n }],\n\n [this.spineBatch, {\n bundle: \"spine\",\n path: \"batch/spine-batch\",\n }],\n\n [this.spineSkin, {\n bundle: \"spine\",\n path: \"skin/spine-skin\",\n }],\n\n ]);\n\n this.initBtns();\n }\n\n\n initBtns() {\n for (const [node, route] of this.map) {\n node.on('toggle', (toggle: cc.Toggle) => {\n if (toggle.isChecked) {\n const cur = ++this.tick;\n\n this.mainArea.destroyAllChildren();\n\n if (route) {\n cc.assetManager.loadBundle(route.bundle, (err, bundle) => {\n if (!err) {\n bundle.load(route.path, cc.Prefab, (err, prefab: cc.Prefab) => {\n if (!err && cur === this.tick) {\n this.mainArea.addChild(cc.instantiate(prefab));\n }\n });\n }\n });\n }\n }\n });\n }\n }\n\n}\n","const { ccclass, property } = cc._decorator;\n\n@ccclass\nexport default class Main extends cc.Component {\n\n @property(cc.Label)\n version: cc.Label = null;\n\n\n protected start(): void {\n this.version.string = `Version: v${cc.sp.version}\\n`;\n }\n\n}\n\n\ncc.sp.labelRetinaScale = 2;\ncc.dynamicAtlasManager.maxFrameSize = 2048;\n"],"file":"index.js"} \ No newline at end of file diff --git a/demo/web-desktop/assets/main/native/61/617323dd-11f4-4dd3-8eec-0caf6b3b45b9.6d707.png b/demo/web-desktop/assets/main/native/61/617323dd-11f4-4dd3-8eec-0caf6b3b45b9.6d707.png new file mode 100644 index 0000000000000000000000000000000000000000..0616a37a61f3b92711a07c4a91a236768865655b GIT binary patch literal 237 zcmeAS@N?(olHy`uVBq!ia0vp^{6H+n!3-piG;MJMQU(D&A+8oyR%TXKjg5`wR#u^* zq3IbJDJdzFCQa(;>FMk1Yi@3yIB{ZUXJ>nRdv|wtTU*=tN{Jajz3e4He!*2P-wK(x zY`MJftuat2)zif>q~g}yiQYmD1{}@{Lw`3u`kSx);EHQsLYcm>m`X{((zU19KSoYl zwXXDhq~5Zqkh4CfyysVaov`$w`!#os-UN5S!pF&+t_j82XLs(mQHgx?puXpSlKc(v iZ=JP|<#vd_`^nJd%vao-ayS}jA%mx@pUXO@geCyQ^Ig6G literal 0 HcmV?d00001 diff --git a/demo/web-desktop/assets/main/native/d6/d6d3ca85-4681-47c1-b5dd-d036a9d39ea2.d55c2.png b/demo/web-desktop/assets/main/native/d6/d6d3ca85-4681-47c1-b5dd-d036a9d39ea2.d55c2.png new file mode 100644 index 0000000000000000000000000000000000000000..843a9a6201fa2796a2764897432a54a2d7becf64 GIT binary patch literal 163 zcmeAS@N?(olHy`uVBq!ia0vp^{6H+n!3-piG;MJMQW60^A+GmdK II;Vst04sAs3;+NC literal 0 HcmV?d00001 diff --git a/demo/web-desktop/assets/multi-render/config.f7eed.json b/demo/web-desktop/assets/multi-render/config.f7eed.json new file mode 100644 index 00000000..2975b952 --- /dev/null +++ b/demo/web-desktop/assets/multi-render/config.f7eed.json @@ -0,0 +1,241 @@ +{ + "paths": { + "77hE9EwNpMlKl/+sGrhEVR": [ + "multi-batcher/images/1", + "cc.Texture2D" + ], + "c4+eoUuahAOa4lmC/4Hkdi": [ + "multi-batcher/images/1", + "cc.SpriteFrame", + 1 + ], + "b6FhIxTWVHXKa7qBmehR6I": [ + "multi-batcher/images/etc1_rgb_a", + "cc.Texture2D" + ], + "eahTDGUrZBV4Y+i+JslTuW": [ + "multi-batcher/images/etc1_rgb_a", + "cc.SpriteFrame", + 1 + ], + "ebcqWiiDdPRaJKJIbu9ft4": [ + "multi-batcher/images/png", + "cc.Texture2D" + ], + "0a5R1NT2lDxqcI2pwtgfb1": [ + "multi-batcher/images/png", + "cc.SpriteFrame", + 1 + ], + "22JHeF7zBLZqnS68r2p/bo": [ + "multi-batcher/images/pvrtc2_rgb_a", + "cc.Texture2D" + ], + "41Zz922rlJZZmZnFZqPxVK": [ + "multi-batcher/images/pvrtc2_rgb_a", + "cc.SpriteFrame", + 1 + ], + "43jA/TdMpFA7K8IIjNbb9M": [ + "multi-batcher/images/sheep_down_0", + "cc.Texture2D" + ], + "8fHzmU6I5EBqjpHEb0Xl3i": [ + "multi-batcher/images/sheep_down_0", + "cc.SpriteFrame", + 1 + ], + "10Drosz6JPsKWsqV+bRh/A": [ + "multi-batcher/images/sheep_jump_2", + "cc.Texture2D" + ], + "2dPOEW20pCTLs79c0WyZVp": [ + "multi-batcher/images/sheep_jump_2", + "cc.SpriteFrame", + 1 + ], + "44mZ0YUdFAF56mmNytjs31": [ + "multi-batcher/images/sheep_jump_3", + "cc.Texture2D" + ], + "b48cuQCqRMLaIzf9I1fTbW": [ + "multi-batcher/images/sheep_jump_3", + "cc.SpriteFrame", + 1 + ], + "7aeIQwZiFL1YbOCVeiFt1p": [ + "multi-batcher/images/sheep_run_1", + "cc.Texture2D" + ], + "55URLSNf5K3IyZBezfiMKa": [ + "multi-batcher/images/sheep_run_1", + "cc.SpriteFrame", + 1 + ], + "14W7pBGWJJ7q7JCPsVTovy": [ + "multi-batcher/multi-batcher", + "cc.Prefab" + ], + "c58wUeG09DhJOcuDi8uPW/": [ + "multi-material/multi-material", + "cc.Prefab" + ], + "0eAM9yHrBFe4PSAXHMHNl+": [ + "multi-material/test-material", + "cc.Material" + ] + }, + "uuids": [ + "77hE9EwNpMlKl/+sGrhEVR", + "c4+eoUuahAOa4lmC/4Hkdi", + "b6FhIxTWVHXKa7qBmehR6I", + "eahTDGUrZBV4Y+i+JslTuW", + "ebcqWiiDdPRaJKJIbu9ft4", + "0a5R1NT2lDxqcI2pwtgfb1", + "22JHeF7zBLZqnS68r2p/bo", + "41Zz922rlJZZmZnFZqPxVK", + "43jA/TdMpFA7K8IIjNbb9M", + "8fHzmU6I5EBqjpHEb0Xl3i", + "10Drosz6JPsKWsqV+bRh/A", + "2dPOEW20pCTLs79c0WyZVp", + "44mZ0YUdFAF56mmNytjs31", + "b48cuQCqRMLaIzf9I1fTbW", + "7aeIQwZiFL1YbOCVeiFt1p", + "55URLSNf5K3IyZBezfiMKa", + "14W7pBGWJJ7q7JCPsVTovy", + "c58wUeG09DhJOcuDi8uPW/", + "0eAM9yHrBFe4PSAXHMHNl+", + "ecpdLyjvZBwrvm+cedCcQy", + "f0BIwQ8D5Ml7nTNQbh1YlS", + "e97GVMl6JHh5Ml5qEDdSGa", + "29FYIk+N1GYaeWH/q1NxQO", + "5cO7kybDxGj4ipyMYdRYZB", + "5f5dyqtRNNxaFmVzYns6FZ", + "a2MjXRFdtLlYQ5ouAFv/+R", + "8c20Sso/ZEn7NUfNSM+EBh", + "8029xEf4FHy49dWo6NK8c7", + "a7ZscqX+JCIZRS157bMyhq", + "80AR/OlBFOoajT99htLYeJ", + "6eBWFz0oVHPLIGQKf/9Thu", + "bc2ZOJo5NCbrI0FXxitEvE", + "2cDGL4OAVN0ZbEl3w2urT8", + "5dz/wYuRNGDqDZXXT0zaEr", + "c1Hf3Sl8ZAnJwP/fpoHxap", + "1cijzBpFJCdoSNK98w5oUq", + "45vlnzVlVDaZ6fRVyB0t3Z", + "d9xFMK7wVFwbAS60aG9McP", + "e8Ueib+qJEhL6mXAHdnwbi", + "b4P/PCArtIdIH38t6mlw8Y", + "71VhFCTINJM6/Ky3oX9nBT", + "92aqwImq1Ik7GrBSFnKTF2", + "3e30KyALhNkZttyuW0A6EU", + "62MQQadaVK8qQN8n6UmJAa" + ], + "scenes": {}, + "redirect": [ + "ecpdLyjvZBwrvm+cedCcQy", + 0, + "5cO7kybDxGj4ipyMYdRYZB", + 1, + "5f5dyqtRNNxaFmVzYns6FZ", + 1, + "a2MjXRFdtLlYQ5ouAFv/+R", + 1 + ], + "deps": [ + "internal", + "main" + ], + "packs": { + "0e0c9da58": [ + "0a5R1NT2lDxqcI2pwtgfb1", + "0eAM9yHrBFe4PSAXHMHNl+", + "10Drosz6JPsKWsqV+bRh/A", + "14W7pBGWJJ7q7JCPsVTovy", + "1cijzBpFJCdoSNK98w5oUq", + "22JHeF7zBLZqnS68r2p/bo", + "29FYIk+N1GYaeWH/q1NxQO", + "2cDGL4OAVN0ZbEl3w2urT8", + "2dPOEW20pCTLs79c0WyZVp", + "3e30KyALhNkZttyuW0A6EU", + "41Zz922rlJZZmZnFZqPxVK", + "43jA/TdMpFA7K8IIjNbb9M", + "44mZ0YUdFAF56mmNytjs31", + "45vlnzVlVDaZ6fRVyB0t3Z", + "55URLSNf5K3IyZBezfiMKa", + "5dz/wYuRNGDqDZXXT0zaEr", + "62MQQadaVK8qQN8n6UmJAa", + "6eBWFz0oVHPLIGQKf/9Thu", + "71VhFCTINJM6/Ky3oX9nBT", + "77hE9EwNpMlKl/+sGrhEVR", + "7aeIQwZiFL1YbOCVeiFt1p", + "80AR/OlBFOoajT99htLYeJ", + "8029xEf4FHy49dWo6NK8c7", + "8c20Sso/ZEn7NUfNSM+EBh", + "8fHzmU6I5EBqjpHEb0Xl3i", + "92aqwImq1Ik7GrBSFnKTF2", + "a7ZscqX+JCIZRS157bMyhq", + "b4P/PCArtIdIH38t6mlw8Y", + "b48cuQCqRMLaIzf9I1fTbW", + "b6FhIxTWVHXKa7qBmehR6I", + "bc2ZOJo5NCbrI0FXxitEvE", + "c1Hf3Sl8ZAnJwP/fpoHxap", + "c4+eoUuahAOa4lmC/4Hkdi", + "c58wUeG09DhJOcuDi8uPW/", + "d9xFMK7wVFwbAS60aG9McP", + "e8Ueib+qJEhL6mXAHdnwbi", + "e97GVMl6JHh5Ml5qEDdSGa", + "eahTDGUrZBV4Y+i+JslTuW", + "ebcqWiiDdPRaJKJIbu9ft4", + "f0BIwQ8D5Ml7nTNQbh1YlS" + ] + }, + "name": "multi-render", + "importBase": "import", + "nativeBase": "native", + "debug": true, + "isZip": false, + "encrypted": false, + "versions": { + "import": [ + "0e0c9da58", + "5c474" + ], + "native": [ + "10Drosz6JPsKWsqV+bRh/A", + "eae97", + "1cijzBpFJCdoSNK98w5oUq", + "91637", + "22JHeF7zBLZqnS68r2p/bo", + "2ecc6", + "43jA/TdMpFA7K8IIjNbb9M", + "28847", + "44mZ0YUdFAF56mmNytjs31", + "99af5", + "45vlnzVlVDaZ6fRVyB0t3Z", + "ca872", + "62MQQadaVK8qQN8n6UmJAa", + "40d17", + "6eBWFz0oVHPLIGQKf/9Thu", + "6d3cf", + "71VhFCTINJM6/Ky3oX9nBT", + "c06a9", + "77hE9EwNpMlKl/+sGrhEVR", + "92cfc", + "7aeIQwZiFL1YbOCVeiFt1p", + "9e7e3", + "b4P/PCArtIdIH38t6mlw8Y", + "83fcc", + "b6FhIxTWVHXKa7qBmehR6I", + "6159f", + "c1Hf3Sl8ZAnJwP/fpoHxap", + "d86d7", + "d9xFMK7wVFwbAS60aG9McP", + "abf6b", + "e8Ueib+qJEhL6mXAHdnwbi", + "90cf4", + "ebcqWiiDdPRaJKJIbu9ft4", + "46cee" + ] + } +} \ No newline at end of file diff --git a/demo/web-desktop/assets/multi-render/import/0e/0e0c9da58.5c474.json b/demo/web-desktop/assets/multi-render/import/0e/0e0c9da58.5c474.json new file mode 100644 index 00000000..8a803565 --- /dev/null +++ b/demo/web-desktop/assets/multi-render/import/0e/0e0c9da58.5c474.json @@ -0,0 +1,14514 @@ +[ + 1, + [ + "ecpdLyjvZBwrvm+cedCcQy", + "0eAM9yHrBFe4PSAXHMHNl+", + "f0BIwQ8D5Ml7nTNQbh1YlS", + "6eBWFz0oVHPLIGQKf/9Thu", + "a7ZscqX+JCIZRS157bMyhq", + "c1Hf3Sl8ZAnJwP/fpoHxap", + "1cijzBpFJCdoSNK98w5oUq", + "45vlnzVlVDaZ6fRVyB0t3Z", + "d9xFMK7wVFwbAS60aG9McP", + "e97GVMl6JHh5Ml5qEDdSGa", + "29FYIk+N1GYaeWH/q1NxQO", + "5f5dyqtRNNxaFmVzYns6FZ", + "a2MjXRFdtLlYQ5ouAFv/+R", + "5cO7kybDxGj4ipyMYdRYZB", + "8c20Sso/ZEn7NUfNSM+EBh", + "bc2ZOJo5NCbrI0FXxitEvE", + "ebcqWiiDdPRaJKJIbu9ft4", + "5dz/wYuRNGDqDZXXT0zaEr", + "55URLSNf5K3IyZBezfiMKa", + "b48cuQCqRMLaIzf9I1fTbW", + "2dPOEW20pCTLs79c0WyZVp", + "0a5R1NT2lDxqcI2pwtgfb1", + "41Zz922rlJZZmZnFZqPxVK", + "8fHzmU6I5EBqjpHEb0Xl3i", + "eahTDGUrZBV4Y+i+JslTuW", + "c4+eoUuahAOa4lmC/4Hkdi", + "71VhFCTINJM6/Ky3oX9nBT", + "62MQQadaVK8qQN8n6UmJAa", + "3e30KyALhNkZttyuW0A6EU", + "10Drosz6JPsKWsqV+bRh/A", + "22JHeF7zBLZqnS68r2p/bo", + "7aeIQwZiFL1YbOCVeiFt1p", + "92aqwImq1Ik7GrBSFnKTF2", + "43jA/TdMpFA7K8IIjNbb9M", + "44mZ0YUdFAF56mmNytjs31", + "77hE9EwNpMlKl/+sGrhEVR", + "8029xEf4FHy49dWo6NK8c7", + "80AR/OlBFOoajT99htLYeJ", + "2cDGL4OAVN0ZbEl3w2urT8", + "b4P/PCArtIdIH38t6mlw8Y", + "b6FhIxTWVHXKa7qBmehR6I", + "e8Ueib+qJEhL6mXAHdnwbi" + ], + [ + "node", + "_spriteFrame", + "_textureSetter", + "_parent", + "texture", + "texture2", + "_effectAsset", + "root", + "data", + "_scrollView", + "_N$normalSprite", + "_N$pressedSprite", + "_N$hoverSprite", + "_N$disabledSprite", + "_N$skeletonData", + "texture3", + "texture4", + "texture5", + "textures", + "cancelBtn", + "batchBtn", + "spriteFrame", + "_N$file", + "_texture" + ], + [ + "cc.Texture2D", + "cc.SpriteFrame", + [ + "cc.Sprite", + [ + "_sizeMode", + "_isTrimmedMode", + "_type", + "_N$autoSwitchMaterial", + "_N$allowDynamicAtlas", + "_fillRange", + "_fillType", + "_fillStart", + "node", + "_materials", + "_spriteFrame", + "_fillCenter" + ], + -5, + 1, + 3, + 6, + 5 + ], + [ + "cc.Node", + [ + "_name", + "_objFlags", + "_components", + "_prefab", + "_contentSize", + "_children", + "_trs", + "_parent", + "_anchorPoint", + "_color" + ], + 1, + 9, + 4, + 5, + 2, + 7, + 1, + 5, + 5 + ], + [ + "cc.Widget", + [ + "_alignFlags", + "_originalWidth", + "_left", + "_originalHeight", + "alignMode", + "_right", + "_top", + "node" + ], + -4, + 1 + ], + [ + "cc.Layout", + [ + "_resize", + "_N$layoutType", + "_N$paddingTop", + "_N$spacingY", + "_N$paddingBottom", + "_N$startAxis", + "_N$affectedByScale", + "node", + "_layoutSize" + ], + -4, + 1, + 5 + ], + [ + "cc.Label", + [ + "_string", + "_fontSize", + "_N$horizontalAlign", + "_N$verticalAlign", + "_N$cacheMode", + "_materials", + "_lineHeight", + "_N$autoSwitchMaterial", + "_N$allowDynamicAtlas", + "node" + ], + -6, + 1 + ], + [ + "cc.Node", + [ + "_name", + "_parent", + "_children", + "_components", + "_prefab", + "_contentSize", + "_color", + "_anchorPoint", + "_trs" + ], + 2, + 1, + 2, + 12, + 4, + 5, + 5, + 5, + 7 + ], + [ + "cc.PrefabInfo", + [ + "fileId", + "root" + ], + 2, + 1 + ], + [ + "cc.Label", + [ + "_string", + "_fontSize", + "_N$horizontalAlign", + "_N$verticalAlign", + "_enableWrapText", + "_N$overflow", + "_N$cacheMode", + "_lineHeight", + "_isSystemFontUsed", + "_N$autoSwitchMaterial", + "_N$allowDynamicAtlas", + "node", + "_materials", + "_N$file" + ], + -8, + 1, + 3, + 6 + ], + [ + "sp.Skeleton", + [ + "defaultSkin", + "defaultAnimation", + "_preCacheMode", + "_animationName", + "_N$enableBatch", + "_N$autoSwitchMaterial", + "_N$allowDynamicAtlas", + "_cacheMode", + "node", + "_materials", + "_N$skeletonData" + ], + -5, + 1, + 3, + 6 + ], + [ + "cc.Material", + [ + "_name", + "_techniqueData" + ], + 2, + 11 + ], + [ + "cc.Prefab", + [ + "_name" + ], + 2 + ], + [ + "cc.Node", + [ + "_name", + "_parent", + "_components", + "_prefab", + "_contentSize", + "_anchorPoint" + ], + 2, + 1, + 2, + 4, + 5, + 5 + ], + [ + "3e9188DEK9FCYlYeL+jvmrQ", + [ + "node", + "batchBtn", + "cancelBtn", + "textures" + ], + 3, + 1, + 1, + 1, + 1 + ], + [ + "cc.ToggleContainer", + [ + "node" + ], + 3, + 1 + ], + [ + "cc.Button", + [ + "_N$transition", + "node", + "_N$normalColor", + "_N$pressedColor", + "_N$disabledColor", + "_N$target", + "_N$normalSprite", + "_N$pressedSprite", + "_N$hoverSprite", + "_N$disabledSprite" + ], + 2, + 1, + 5, + 5, + 5, + 1, + 6, + 6, + 6, + 6 + ], + [ + "cc.Scrollbar", + [ + "enableAutoHide", + "_N$direction", + "node", + "_N$handle" + ], + 1, + 1, + 1 + ], + [ + "cc.ScrollView", + [ + "horizontal", + "brake", + "bounceDuration", + "_N$horizontalScrollBar", + "node", + "_N$content", + "_N$verticalScrollBar" + ], + -1, + 1, + 1, + 1 + ], + [ + "cc.EffectAsset", + [ + "_name", + "shaders", + "techniques" + ], + 0 + ], + [ + "cc.BitmapFont", + [ + "_name", + "fontSize", + "_fntConfig" + ], + 0 + ], + [ + "sp.SkeletonData", + [ + "_name", + "_atlasText", + "textureNames", + "_skeletonJson", + "textures" + ], + -1, + 3 + ], + [ + "cc.MotionStreak", + [ + "_stroke", + "_N$autoSwitchMaterial", + "node", + "_materials", + "_texture" + ], + 1, + 1, + 3, + 6 + ] + ], + [ + [ + 8, + 0, + 1, + 2 + ], + [ + 3, + 0, + 7, + 2, + 3, + 4, + 6, + 2 + ], + [ + 3, + 0, + 7, + 5, + 2, + 3, + 4, + 6, + 2 + ], + [ + 6, + 0, + 1, + 6, + 2, + 3, + 4, + 5, + 9, + 8 + ], + [ + 5, + 0, + 1, + 2, + 4, + 3, + 6, + 7, + 8, + 7 + ], + [ + 2, + 8, + 9, + 10, + 1 + ], + [ + 4, + 0, + 1, + 3, + 7, + 4 + ], + [ + 2, + 2, + 0, + 8, + 9, + 10, + 3 + ], + [ + 3, + 0, + 5, + 2, + 3, + 4, + 6, + 2 + ], + [ + 11, + 0, + 1, + 2 + ], + [ + 12, + 0, + 2 + ], + [ + 3, + 0, + 5, + 2, + 3, + 4, + 8, + 6, + 2 + ], + [ + 3, + 0, + 1, + 5, + 2, + 3, + 4, + 3 + ], + [ + 3, + 0, + 7, + 5, + 2, + 3, + 4, + 2 + ], + [ + 3, + 0, + 1, + 7, + 2, + 3, + 9, + 4, + 3 + ], + [ + 7, + 0, + 1, + 2, + 3, + 4, + 6, + 5, + 2 + ], + [ + 7, + 0, + 1, + 2, + 3, + 4, + 5, + 7, + 8, + 2 + ], + [ + 13, + 0, + 1, + 2, + 3, + 4, + 5, + 2 + ], + [ + 4, + 0, + 7, + 2 + ], + [ + 4, + 4, + 0, + 1, + 3, + 7, + 5 + ], + [ + 4, + 4, + 0, + 2, + 3, + 7, + 5 + ], + [ + 8, + 1, + 1 + ], + [ + 5, + 0, + 1, + 7, + 8, + 3 + ], + [ + 5, + 0, + 1, + 2, + 4, + 3, + 7, + 8, + 6 + ], + [ + 15, + 0, + 1 + ], + [ + 2, + 0, + 1, + 8, + 9, + 10, + 3 + ], + [ + 2, + 2, + 0, + 8, + 9, + 3 + ], + [ + 2, + 0, + 1, + 3, + 4, + 8, + 9, + 10, + 5 + ], + [ + 2, + 2, + 0, + 1, + 3, + 4, + 8, + 9, + 10, + 6 + ], + [ + 16, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 2 + ], + [ + 9, + 0, + 1, + 4, + 2, + 3, + 5, + 6, + 11, + 12, + 8 + ], + [ + 17, + 0, + 1, + 2, + 3, + 3 + ], + [ + 18, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 5 + ], + [ + 19, + 0, + 1, + 2, + 4 + ], + [ + 4, + 0, + 2, + 5, + 1, + 7, + 5 + ], + [ + 4, + 0, + 2, + 6, + 7, + 4 + ], + [ + 4, + 0, + 1, + 7, + 3 + ], + [ + 14, + 0, + 1, + 2, + 3, + 1 + ], + [ + 5, + 0, + 1, + 5, + 2, + 3, + 7, + 8, + 6 + ], + [ + 2, + 2, + 0, + 5, + 1, + 3, + 4, + 8, + 9, + 10, + 7 + ], + [ + 2, + 2, + 0, + 6, + 7, + 5, + 1, + 3, + 4, + 8, + 9, + 11, + 10, + 9 + ], + [ + 6, + 0, + 1, + 2, + 3, + 4, + 5, + 9, + 7 + ], + [ + 6, + 0, + 1, + 6, + 2, + 3, + 4, + 7, + 8, + 5, + 9, + 10 + ], + [ + 9, + 0, + 1, + 7, + 8, + 2, + 3, + 9, + 10, + 11, + 12, + 13, + 9 + ], + [ + 20, + 0, + 1, + 2, + 4 + ], + [ + 21, + 0, + 1, + 2, + 3, + 4, + 5 + ], + [ + 22, + 0, + 1, + 2, + 3, + 4, + 3 + ], + [ + 10, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 8, + 9, + 10, + 8 + ], + [ + 10, + 0, + 1, + 2, + 7, + 3, + 4, + 5, + 6, + 8, + 9, + 10, + 9 + ] + ], + [ + [ + [ + { + "name": "png", + "rect": [ + 33, + 5, + 143, + 150 + ], + "offset": [ + -9.5, + -0.5 + ], + "originalSize": [ + 228, + 159 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 2 + ], + [ + 16 + ] + ], + [ + [ + [ + 9, + "test-material", + [ + {}, + "0", + 11, + [ + { + "defines": { + "USE_TEXTURE": true, + "USE_MULTI_TEXTURE": true + } + }, + "props", + 11, + [ + {}, + "texture", + 6, + 0, + "texture2", + 6, + 1, + "texture3", + 6, + 2, + "texture4", + 6, + 3, + "texture5", + 6, + 4 + ] + ] + ] + ] + ], + 0, + 0, + [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 4, + 5, + 15, + 16, + 17, + 6 + ], + [ + 5, + 6, + 3, + 7, + 8, + 17 + ] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,0", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + [ + 10, + "multi-batcher" + ], + [ + 8, + "multi-batcher", + [ + -7 + ], + [ + [ + 18, + 45, + -2 + ], + [ + 37, + -6, + -5, + -4, + -3 + ] + ], + [ + 21, + -1 + ], + [ + 5, + 960, + 600 + ], + [ + 480, + 300, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 8, + "textures", + [ + -9, + -10, + -11, + -12, + -13, + -14, + -15, + -16 + ], + [ + [ + 22, + 1, + 3, + -8, + [ + 5, + 717, + 288 + ] + ] + ], + [ + 0, + "e0AioYjhRHjKmqedjlAWhb", + 1 + ], + [ + 5, + 717, + 288 + ], + [ + 0, + -234, + 0, + 0, + 0, + 0, + 1, + 0.5, + 0.5, + 1 + ] + ], + [ + 11, + "content", + [ + -20, + 2, + -21, + -22 + ], + [ + [ + 24, + -17 + ], + [ + 38, + 1, + 2, + 1, + 30, + 20, + -18, + [ + 5, + 785.815, + 498 + ] + ], + [ + 34, + 41, + 87.09249999999997, + 87.09249999999997, + 220, + -19 + ] + ], + [ + 0, + "98B5382ANHgKQw5BkMsWAq", + 1 + ], + [ + 5, + 785.815, + 498 + ], + [ + 0, + 0.5, + 1 + ], + [ + 0, + 300, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 15, + "sv", + 1, + [ + -26, + -27 + ], + [ + [ + -23, + [ + 6, + 45, + 240, + 250, + -24 + ], + [ + 25, + 0, + false, + -25, + [ + 33 + ], + 34 + ] + ], + 1, + 4, + 4 + ], + [ + 0, + "b5RxDsAgFOW6xOyBdbz2rI", + 1 + ], + [ + 4, + 4279834905 + ], + [ + 5, + 960, + 600 + ] + ], + [ + 12, + "Background", + 512, + [ + -30 + ], + [ + [ + 7, + 1, + 0, + -28, + [ + 17 + ], + 18 + ], + [ + 19, + 0, + 45, + 100, + 40, + -29 + ] + ], + [ + 0, + "c1rI+zAe1AVJuLNaOa0/Am", + 1 + ], + [ + 5, + 100, + 40 + ] + ], + [ + 12, + "Background", + 512, + [ + -33 + ], + [ + [ + 7, + 1, + 0, + -31, + [ + 24 + ], + 25 + ], + [ + 19, + 0, + 45, + 100, + 40, + -32 + ] + ], + [ + 0, + "75f/zpdqVNfLYRxiuVwv4C", + 1 + ], + [ + 5, + 100, + 40 + ] + ], + [ + 16, + "scrollBar", + 4, + [ + -37 + ], + [ + [ + -34, + [ + 20, + 0, + 37, + 350.07654921020657, + 237, + -35 + ], + [ + 7, + 1, + 0, + -36, + [ + 31 + ], + 32 + ] + ], + 1, + 4, + 4 + ], + [ + 0, + "c2cC2kA1NNeozY+5ZzkcSY", + 1 + ], + [ + 5, + 8, + 600 + ], + [ + 0, + 1, + 0.5 + ], + [ + 480, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 2, + "batch", + 3, + [ + 5 + ], + [ + [ + 29, + 2, + -38, + [ + 4, + 4293322470 + ], + [ + 4, + 4291348680 + ], + [ + 4, + 3363338360 + ], + 5, + 19, + 20, + 21, + 22 + ] + ], + [ + 0, + "0b0QeJt7VC44+K0EVYPDVj", + 1 + ], + [ + 5, + 100, + 40 + ], + [ + 0, + -418, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 2, + "cancel", + 3, + [ + 6 + ], + [ + [ + 29, + 2, + -39, + [ + 4, + 4293322470 + ], + [ + 4, + 4291348680 + ], + [ + 4, + 3363338360 + ], + 6, + 26, + 27, + 28, + 29 + ] + ], + [ + 0, + "d9fVRHRzVGa6qXzt5stxxE", + 1 + ], + [ + 5, + 100, + 40 + ], + [ + 0, + -478, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 13, + "view", + 4, + [ + 3 + ], + [ + [ + 6, + 45, + 240, + 250, + -40 + ] + ], + [ + 0, + "645yltQ0dFpbIcIgDazPDc", + 1 + ], + [ + 5, + 960, + 600 + ] + ], + [ + 1, + "tips", + 3, + [ + [ + 41, + "点击按钮会将这 8 张纹理关联同一个材质, Draw Call 会降低 7", + 16, + 1, + 1, + 2, + [ + null + ], + -41 + ], + [ + 35, + 17, + 95.11500000000001, + 30, + -42 + ] + ], + [ + 0, + "fbSLTYNutL174TDvzvU3nT", + 1 + ], + [ + 5, + 445.375, + 40 + ], + [ + 0, + -50, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "sheep_run_1", + 2, + [ + [ + 5, + -43, + [ + 0 + ], + 1 + ] + ], + [ + 0, + "290LB9y6dH754pFZjiX/ZH", + 1 + ], + [ + 5, + 176, + 115 + ], + [ + -270.5, + 86.5, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "sheep_jump_3", + 2, + [ + [ + 5, + -44, + [ + 2 + ], + 3 + ] + ], + [ + 0, + "0fvsvQgkVCH6CHuDRPrLT3", + 1 + ], + [ + 5, + 152, + 115 + ], + [ + -106.5, + 86.5, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "sheep_jump_2", + 2, + [ + [ + 5, + -45, + [ + 4 + ], + 5 + ] + ], + [ + 0, + "99/QBu9VRBqKTg4pZ/kxlb", + 1 + ], + [ + 5, + 160, + 104 + ], + [ + 49.5, + 92, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "png", + 2, + [ + [ + 5, + -46, + [ + 6 + ], + 7 + ] + ], + [ + 0, + "62bYLhXTdAE7unUwKnJ9+F", + 1 + ], + [ + 5, + 143, + 150 + ], + [ + 201, + 69, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "pvrtc2_rgb_a", + 2, + [ + [ + 5, + -47, + [ + 8 + ], + 9 + ] + ], + [ + 0, + "04ha70LWVGZp2m+P91mgRz", + 1 + ], + [ + 5, + 147, + 138 + ], + [ + -285, + -75, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "sheep_down_0", + 2, + [ + [ + 5, + -48, + [ + 10 + ], + 11 + ] + ], + [ + 0, + "ebEGt8f0JD7LLZQlSrZevu", + 1 + ], + [ + 5, + 224, + 87 + ], + [ + -99.5, + -49.5, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "etc1_rgb_a", + 2, + [ + [ + 5, + -49, + [ + 12 + ], + 13 + ] + ], + [ + 0, + "2arjghRTlJ+LCDvhAlCMgJ", + 1 + ], + [ + 5, + 154, + 131 + ], + [ + 89.5, + -71.5, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "1", + 2, + [ + [ + 5, + -50, + [ + 14 + ], + 15 + ] + ], + [ + 0, + "158hruI69MzqtLXovgpl9j", + 1 + ], + [ + 5, + 152, + 103 + ], + [ + 242.5, + -57.5, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 14, + "Label", + 512, + 5, + [ + [ + 30, + "合批", + 20, + false, + 1, + 1, + 1, + 1, + -51, + [ + 16 + ] + ] + ], + [ + 0, + "3ea+qYSxdPGLhbcByL6vuG", + 1 + ], + [ + 4, + 4278190080 + ], + [ + 5, + 100, + 40 + ] + ], + [ + 14, + "Label", + 512, + 6, + [ + [ + 30, + "还原", + 20, + false, + 1, + 1, + 1, + 1, + -52, + [ + 23 + ] + ] + ], + [ + 0, + "ecQWFGSopDrpI1pat+ViDn", + 1 + ], + [ + 4, + 4278190080 + ], + [ + 5, + 100, + 40 + ] + ], + [ + 17, + "bar", + 7, + [ + -53 + ], + [ + 0, + "29pI3SelxAU6ODrNe5LS2g", + 1 + ], + [ + 5, + 8, + 30 + ], + [ + 0, + 1, + 0 + ] + ], + [ + 26, + 1, + 0, + 22, + [ + 30 + ] + ], + [ + 31, + false, + 1, + 7, + 23 + ], + [ + 32, + false, + 0.75, + 0.23, + null, + 4, + 3, + 24 + ] + ], + 0, + [ + 0, + 7, + 1, + 0, + 0, + 1, + 0, + 18, + 2, + 0, + 19, + 9, + 0, + 20, + 8, + 0, + 0, + 1, + 0, + -1, + 4, + 0, + 0, + 2, + 0, + -1, + 12, + 0, + -2, + 13, + 0, + -3, + 14, + 0, + -4, + 15, + 0, + -5, + 16, + 0, + -6, + 17, + 0, + -7, + 18, + 0, + -8, + 19, + 0, + 0, + 3, + 0, + 0, + 3, + 0, + 0, + 3, + 0, + -1, + 11, + 0, + -3, + 8, + 0, + -4, + 9, + 0, + -1, + 25, + 0, + 0, + 4, + 0, + 0, + 4, + 0, + -1, + 10, + 0, + -2, + 7, + 0, + 0, + 5, + 0, + 0, + 5, + 0, + -1, + 20, + 0, + 0, + 6, + 0, + 0, + 6, + 0, + -1, + 21, + 0, + -1, + 24, + 0, + 0, + 7, + 0, + 0, + 7, + 0, + -1, + 22, + 0, + 0, + 8, + 0, + 0, + 9, + 0, + 0, + 10, + 0, + 0, + 11, + 0, + 0, + 11, + 0, + 0, + 12, + 0, + 0, + 13, + 0, + 0, + 14, + 0, + 0, + 15, + 0, + 0, + 16, + 0, + 0, + 17, + 0, + 0, + 18, + 0, + 0, + 19, + 0, + 0, + 20, + 0, + 0, + 21, + 0, + -1, + 23, + 0, + 8, + 1, + 2, + 3, + 3, + 3, + 3, + 10, + 5, + 3, + 8, + 6, + 3, + 9, + 24, + 9, + 25, + 53 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23 + ], + [ + -1, + 1, + -1, + 1, + -1, + 1, + -1, + 1, + -1, + 1, + -1, + 1, + -1, + 1, + -1, + 1, + -1, + -1, + 1, + 10, + 11, + 12, + 13, + -1, + -1, + 1, + 10, + 11, + 12, + 13, + -1, + -1, + 1, + -1, + 1, + 1 + ], + [ + 0, + 18, + 0, + 19, + 0, + 20, + 0, + 21, + 0, + 22, + 0, + 23, + 0, + 24, + 0, + 25, + 0, + 0, + 2, + 2, + 9, + 2, + 10, + 0, + 0, + 2, + 2, + 9, + 2, + 10, + 0, + 0, + 11, + 0, + 12, + 13 + ] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,0", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + { + "name": "default_btn_disabled", + "rect": [ + 0, + 0, + 40, + 40 + ], + "offset": [ + 0, + 0 + ], + "originalSize": [ + 40, + 40 + ], + "capInsets": [ + 12, + 12, + 12, + 12 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 2 + ], + [ + 26 + ] + ], + [ + [ + [ + 9, + "custom-2d-sprite", + [ + {}, + "0", + 11, + [ + { + "defines": { + "USE_TEXTURE": true, + "USE_MULTI_TEXTURE": true + } + }, + "props", + 11, + [ + { + "blur": 0.01, + "wh_ratio": 1, + "radius": 0.45 + }, + "texture", + 6, + 0, + "texture2", + 6, + 1 + ] + ] + ] + ] + ], + 0, + 0, + [ + 0, + 0, + 0 + ], + [ + 4, + 5, + 6 + ], + [ + 27, + 3, + 28 + ] + ], + [ + [ + { + "name": "sheep_jump_2", + "rect": [ + 24, + 24, + 160, + 104 + ], + "offset": [ + -10, + 3.5 + ], + "originalSize": [ + 228, + 159 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 2 + ], + [ + 29 + ] + ], + [ + [ + [ + 33, + "custom-2d-sprite", + [ + { + "hash": 2734998855, + "record": null, + "name": "custom-2d-sprite|vs|fs", + "glsl3": { + "vert": "\nprecision highp float;\nuniform CCGlobal {\n mat4 cc_matView;\n mat4 cc_matViewInv;\n mat4 cc_matProj;\n mat4 cc_matProjInv;\n mat4 cc_matViewProj;\n mat4 cc_matViewProjInv;\n vec4 cc_cameraPos;\n vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nin vec3 a_position;\nin vec4 a_color;\nout vec4 v_color;\n#if USE_TEXTURE\nin vec2 a_uv0;\nout vec2 v_uv0;\n#if USE_MULTI_TEXTURE\nin float a_texId;\nout float v_texId;\n#endif\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #if USE_MULTI_TEXTURE\n v_texId = a_texId;\n #endif\n #endif\n v_color = a_color;\n gl_Position = pos;\n}", + "frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform ALPHA_TEST {\n float alphaThreshold;\n };\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nin vec4 v_color;\n#if USE_TEXTURE\nin vec2 v_uv0;\nuniform sampler2D texture;\n#if USE_MULTI_TEXTURE\nin float v_texId;\nuniform sampler2D texture2;\nuniform sampler2D texture3;\nuniform sampler2D texture4;\nuniform sampler2D texture5;\nuniform sampler2D texture6;\nuniform sampler2D texture7;\nuniform sampler2D texture8;\n#endif\n#endif\nuniform ARGS{\n float radius;\n float blur;\n vec2 center;\n float wh_ratio;\n};\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n #if USE_MULTI_TEXTURE\n if(v_texId < 1.0){\n vec4 texture_tmp = texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture\n texture_tmp.a *= texture(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture_tmp.rgb * texture_tmp.rgb);\n o.a *= texture_tmp.a;\n #else\n o *= texture_tmp;\n #endif\n } else if(v_texId < 2.0){\n vec4 texture2_tmp = texture(texture2, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture2\n texture2_tmp.a *= texture(texture2, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture2_tmp.rgb * texture2_tmp.rgb);\n o.a *= texture2_tmp.a;\n #else\n o *= texture2_tmp;\n #endif\n } else if(v_texId < 3.0){\n vec4 texture3_tmp = texture(texture3, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture3\n texture3_tmp.a *= texture(texture3, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture3_tmp.rgb * texture3_tmp.rgb);\n o.a *= texture3_tmp.a;\n #else\n o *= texture3_tmp;\n #endif\n } else if(v_texId < 4.0){\n vec4 texture4_tmp = texture(texture4, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture4\n texture4_tmp.a *= texture(texture4, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture4_tmp.rgb * texture4_tmp.rgb);\n o.a *= texture4_tmp.a;\n #else\n o *= texture4_tmp;\n #endif\n } else if(v_texId < 5.0){\n vec4 texture5_tmp = texture(texture5, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture5\n texture5_tmp.a *= texture(texture5, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture5_tmp.rgb * texture5_tmp.rgb);\n o.a *= texture5_tmp.a;\n #else\n o *= texture5_tmp;\n #endif\n } else if(v_texId < 6.0){\n vec4 texture6_tmp = texture(texture6, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture6\n texture6_tmp.a *= texture(texture6, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture6_tmp.rgb * texture6_tmp.rgb);\n o.a *= texture6_tmp.a;\n #else\n o *= texture6_tmp;\n #endif\n } else if(v_texId < 7.0){\n vec4 texture7_tmp = texture(texture7, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture7\n texture7_tmp.a *= texture(texture7, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture7_tmp.rgb * texture7_tmp.rgb);\n o.a *= texture7_tmp.a;\n #else\n o *= texture7_tmp;\n #endif\n } else {\n vec4 texture8_tmp = texture(texture8, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture8\n texture8_tmp.a *= texture(texture8, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture8_tmp.rgb * texture8_tmp.rgb);\n o.a *= texture8_tmp.a;\n #else\n o *= texture8_tmp;\n #endif\n }\n #else\n vec4 texture_tmp = texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture\n texture_tmp.a *= texture(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture_tmp.rgb * texture_tmp.rgb);\n o.a *= texture_tmp.a;\n #else\n o *= texture_tmp;\n #endif\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n float circle = radius * radius;\n float rx = center.x * wh_ratio;\n float ry = center.y;\n float dis = (v_uv0.x * wh_ratio - rx) * (v_uv0.x * wh_ratio - rx) + (v_uv0.y - ry) * (v_uv0.y - ry);\n o.a = smoothstep(circle, circle - blur, dis);\n gl_FragColor = o;\n}" + }, + "glsl1": { + "vert": "\nprecision highp float;\nuniform mat4 cc_matViewProj;\nuniform mat4 cc_matWorld;\nattribute vec3 a_position;\nattribute vec4 a_color;\nvarying vec4 v_color;\n#if USE_TEXTURE\nattribute vec2 a_uv0;\nvarying vec2 v_uv0;\n#if USE_MULTI_TEXTURE\nattribute float a_texId;\nvarying float v_texId;\n#endif\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #if USE_MULTI_TEXTURE\n v_texId = a_texId;\n #endif\n #endif\n v_color = a_color;\n gl_Position = pos;\n}", + "frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform float alphaThreshold;\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvarying vec4 v_color;\n#if USE_TEXTURE\nvarying vec2 v_uv0;\nuniform sampler2D texture;\n#if USE_MULTI_TEXTURE\nvarying float v_texId;\nuniform sampler2D texture2;\nuniform sampler2D texture3;\nuniform sampler2D texture4;\nuniform sampler2D texture5;\nuniform sampler2D texture6;\nuniform sampler2D texture7;\nuniform sampler2D texture8;\n#endif\n#endif\nuniform float radius;\nuniform float blur;\nuniform vec2 center;\nuniform float wh_ratio;\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n #if USE_MULTI_TEXTURE\n if(v_texId < 1.0){\n vec4 texture_tmp = texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture\n texture_tmp.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture_tmp.rgb * texture_tmp.rgb);\n o.a *= texture_tmp.a;\n #else\n o *= texture_tmp;\n #endif\n } else if(v_texId < 2.0){\n vec4 texture2_tmp = texture2D(texture2, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture2\n texture2_tmp.a *= texture2D(texture2, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture2_tmp.rgb * texture2_tmp.rgb);\n o.a *= texture2_tmp.a;\n #else\n o *= texture2_tmp;\n #endif\n } else if(v_texId < 3.0){\n vec4 texture3_tmp = texture2D(texture3, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture3\n texture3_tmp.a *= texture2D(texture3, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture3_tmp.rgb * texture3_tmp.rgb);\n o.a *= texture3_tmp.a;\n #else\n o *= texture3_tmp;\n #endif\n } else if(v_texId < 4.0){\n vec4 texture4_tmp = texture2D(texture4, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture4\n texture4_tmp.a *= texture2D(texture4, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture4_tmp.rgb * texture4_tmp.rgb);\n o.a *= texture4_tmp.a;\n #else\n o *= texture4_tmp;\n #endif\n } else if(v_texId < 5.0){\n vec4 texture5_tmp = texture2D(texture5, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture5\n texture5_tmp.a *= texture2D(texture5, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture5_tmp.rgb * texture5_tmp.rgb);\n o.a *= texture5_tmp.a;\n #else\n o *= texture5_tmp;\n #endif\n } else if(v_texId < 6.0){\n vec4 texture6_tmp = texture2D(texture6, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture6\n texture6_tmp.a *= texture2D(texture6, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture6_tmp.rgb * texture6_tmp.rgb);\n o.a *= texture6_tmp.a;\n #else\n o *= texture6_tmp;\n #endif\n } else if(v_texId < 7.0){\n vec4 texture7_tmp = texture2D(texture7, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture7\n texture7_tmp.a *= texture2D(texture7, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture7_tmp.rgb * texture7_tmp.rgb);\n o.a *= texture7_tmp.a;\n #else\n o *= texture7_tmp;\n #endif\n } else {\n vec4 texture8_tmp = texture2D(texture8, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture8\n texture8_tmp.a *= texture2D(texture8, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture8_tmp.rgb * texture8_tmp.rgb);\n o.a *= texture8_tmp.a;\n #else\n o *= texture8_tmp;\n #endif\n }\n #else\n vec4 texture_tmp = texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture\n texture_tmp.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture_tmp.rgb * texture_tmp.rgb);\n o.a *= texture_tmp.a;\n #else\n o *= texture_tmp;\n #endif\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n float circle = radius * radius;\n float rx = center.x * wh_ratio;\n float ry = center.y;\n float dis = (v_uv0.x * wh_ratio - rx) * (v_uv0.x * wh_ratio - rx) + (v_uv0.y - ry) * (v_uv0.y - ry);\n o.a = smoothstep(circle, circle - blur, dis);\n gl_FragColor = o;\n}" + }, + "builtins": { + "globals": { + "blocks": [ + { + "name": "CCGlobal", + "defines": [] + } + ], + "samplers": [] + }, + "locals": { + "blocks": [ + { + "name": "CCLocal", + "defines": [] + } + ], + "samplers": [] + } + }, + "defines": [ + { + "name": "USE_TEXTURE", + "type": "boolean", + "defines": [] + }, + { + "name": "USE_MULTI_TEXTURE", + "type": "boolean", + "defines": [ + "USE_TEXTURE" + ] + }, + { + "name": "CC_USE_MODEL", + "type": "boolean", + "defines": [] + }, + { + "name": "USE_ALPHA_TEST", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture", + "type": "boolean", + "defines": [ + "USE_TEXTURE" + ] + }, + { + "name": "INPUT_IS_GAMMA", + "type": "boolean", + "defines": [ + "USE_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture2", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture3", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture4", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture5", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture6", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture7", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture8", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + } + ], + "blocks": [ + { + "name": "ALPHA_TEST", + "binding": 0, + "members": [ + { + "name": "alphaThreshold", + "type": 13, + "count": 1 + } + ], + "defines": [ + "USE_ALPHA_TEST" + ] + }, + { + "name": "ARGS", + "binding": 1, + "members": [ + { + "name": "radius", + "type": 13, + "count": 1 + }, + { + "name": "blur", + "type": 13, + "count": 1 + }, + { + "name": "center", + "type": 14, + "count": 1 + }, + { + "name": "wh_ratio", + "type": 13, + "count": 1 + } + ], + "defines": [] + } + ], + "samplers": [ + { + "name": "texture", + "type": 29, + "count": 1, + "binding": 30, + "defines": [ + "USE_TEXTURE" + ] + }, + { + "name": "texture2", + "type": 29, + "count": 1, + "binding": 31, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "texture3", + "type": 29, + "count": 1, + "binding": 32, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "texture4", + "type": 29, + "count": 1, + "binding": 33, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "texture5", + "type": 29, + "count": 1, + "binding": 34, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "texture6", + "type": 29, + "count": 1, + "binding": 35, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "texture7", + "type": 29, + "count": 1, + "binding": 36, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "texture8", + "type": 29, + "count": 1, + "binding": 37, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + } + ] + } + ], + [ + { + "passes": [ + { + "program": "custom-2d-sprite|vs|fs", + "blendState": { + "targets": [ + { + "blend": true + } + ] + }, + "rasterizerState": { + "cullMode": 0 + }, + "properties": { + "texture": { + "value": "white", + "type": 29 + }, + "texture2": { + "value": "white", + "type": 29 + }, + "texture3": { + "value": "white", + "type": 29 + }, + "texture4": { + "value": "white", + "type": 29 + }, + "texture5": { + "value": "white", + "type": 29 + }, + "texture6": { + "value": "white", + "type": 29 + }, + "texture7": { + "value": "white", + "type": 29 + }, + "texture8": { + "value": "white", + "type": 29 + }, + "alphaThreshold": { + "type": 13, + "value": [ + 0.5 + ] + }, + "wh_ratio": { + "type": 13, + "value": [ + 1 + ], + "editor": { + "tooltip": "宽高比" + } + }, + "blur": { + "type": 13, + "value": [ + 0.35 + ], + "editor": { + "tooltip": "光圈模糊程度" + } + }, + "radius": { + "type": 13, + "value": [ + 0.5 + ], + "editor": { + "tooltip": "光圈半径" + } + }, + "center": { + "type": 14, + "value": [ + 0.5, + 0.5 + ], + "editor": { + "tooltip": "光圈起点" + } + } + } + } + ] + } + ] + ] + ], + 0, + 0, + [], + [], + [] + ], + [ + [ + { + "name": "pvrtc2_rgb_a", + "rect": [ + 29, + 13, + 147, + 138 + ], + "offset": [ + -11.5, + -2.5 + ], + "originalSize": [ + 228, + 159 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 2 + ], + [ + 30 + ] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,0", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,0", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + { + "name": "sheep_run_1", + "rect": [ + 27, + 20, + 176, + 115 + ], + "offset": [ + 1, + 2 + ], + "originalSize": [ + 228, + 159 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 2 + ], + [ + 31 + ] + ], + [ + [ + [ + 33, + "multi-2d-sprite", + [ + { + "hash": 3894394603, + "record": null, + "name": "multi-2d-sprite|vs|fs", + "glsl3": { + "vert": "\nprecision highp float;\nuniform CCGlobal {\n mat4 cc_matView;\n mat4 cc_matViewInv;\n mat4 cc_matProj;\n mat4 cc_matProjInv;\n mat4 cc_matViewProj;\n mat4 cc_matViewProjInv;\n vec4 cc_cameraPos;\n vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nin vec3 a_position;\nin vec4 a_color;\nout vec4 v_color;\n#if USE_TEXTURE\nin vec2 a_uv0;\nout vec2 v_uv0;\n#if USE_MULTI_TEXTURE\nin float a_texId;\nout float v_texId;\n#endif\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #if USE_MULTI_TEXTURE\n v_texId = a_texId;\n #endif\n #endif\n v_color = a_color;\n gl_Position = pos;\n}", + "frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform ALPHA_TEST {\n float alphaThreshold;\n };\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nin vec4 v_color;\n#if USE_TEXTURE\nin vec2 v_uv0;\nuniform sampler2D texture;\n#if USE_MULTI_TEXTURE\nin float v_texId;\nuniform sampler2D texture2;\nuniform sampler2D texture3;\nuniform sampler2D texture4;\nuniform sampler2D texture5;\nuniform sampler2D texture6;\nuniform sampler2D texture7;\nuniform sampler2D texture8;\n#endif\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n #if USE_MULTI_TEXTURE\n if(v_texId < 1.0){\n vec4 texture_tmp = texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture\n texture_tmp.a *= texture(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture_tmp.rgb * texture_tmp.rgb);\n o.a *= texture_tmp.a;\n #else\n o *= texture_tmp;\n #endif\n } else if(v_texId < 2.0){\n vec4 texture2_tmp = texture(texture2, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture2\n texture2_tmp.a *= texture(texture2, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture2_tmp.rgb * texture2_tmp.rgb);\n o.a *= texture2_tmp.a;\n #else\n o *= texture2_tmp;\n #endif\n } else if(v_texId < 3.0){\n vec4 texture3_tmp = texture(texture3, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture3\n texture3_tmp.a *= texture(texture3, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture3_tmp.rgb * texture3_tmp.rgb);\n o.a *= texture3_tmp.a;\n #else\n o *= texture3_tmp;\n #endif\n } else if(v_texId < 4.0){\n vec4 texture4_tmp = texture(texture4, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture4\n texture4_tmp.a *= texture(texture4, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture4_tmp.rgb * texture4_tmp.rgb);\n o.a *= texture4_tmp.a;\n #else\n o *= texture4_tmp;\n #endif\n } else if(v_texId < 5.0){\n vec4 texture5_tmp = texture(texture5, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture5\n texture5_tmp.a *= texture(texture5, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture5_tmp.rgb * texture5_tmp.rgb);\n o.a *= texture5_tmp.a;\n #else\n o *= texture5_tmp;\n #endif\n } else if(v_texId < 6.0){\n vec4 texture6_tmp = texture(texture6, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture6\n texture6_tmp.a *= texture(texture6, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture6_tmp.rgb * texture6_tmp.rgb);\n o.a *= texture6_tmp.a;\n #else\n o *= texture6_tmp;\n #endif\n } else if(v_texId < 7.0){\n vec4 texture7_tmp = texture(texture7, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture7\n texture7_tmp.a *= texture(texture7, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture7_tmp.rgb * texture7_tmp.rgb);\n o.a *= texture7_tmp.a;\n #else\n o *= texture7_tmp;\n #endif\n } else {\n vec4 texture8_tmp = texture(texture8, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture8\n texture8_tmp.a *= texture(texture8, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture8_tmp.rgb * texture8_tmp.rgb);\n o.a *= texture8_tmp.a;\n #else\n o *= texture8_tmp;\n #endif\n }\n #else\n vec4 texture_tmp = texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture\n texture_tmp.a *= texture(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture_tmp.rgb * texture_tmp.rgb);\n o.a *= texture_tmp.a;\n #else\n o *= texture_tmp;\n #endif\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n}" + }, + "glsl1": { + "vert": "\nprecision highp float;\nuniform mat4 cc_matViewProj;\nuniform mat4 cc_matWorld;\nattribute vec3 a_position;\nattribute vec4 a_color;\nvarying vec4 v_color;\n#if USE_TEXTURE\nattribute vec2 a_uv0;\nvarying vec2 v_uv0;\n#if USE_MULTI_TEXTURE\nattribute float a_texId;\nvarying float v_texId;\n#endif\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #if USE_MULTI_TEXTURE\n v_texId = a_texId;\n #endif\n #endif\n v_color = a_color;\n gl_Position = pos;\n}", + "frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform float alphaThreshold;\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvarying vec4 v_color;\n#if USE_TEXTURE\nvarying vec2 v_uv0;\nuniform sampler2D texture;\n#if USE_MULTI_TEXTURE\nvarying float v_texId;\nuniform sampler2D texture2;\nuniform sampler2D texture3;\nuniform sampler2D texture4;\nuniform sampler2D texture5;\nuniform sampler2D texture6;\nuniform sampler2D texture7;\nuniform sampler2D texture8;\n#endif\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n #if USE_MULTI_TEXTURE\n if(v_texId < 1.0){\n vec4 texture_tmp = texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture\n texture_tmp.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture_tmp.rgb * texture_tmp.rgb);\n o.a *= texture_tmp.a;\n #else\n o *= texture_tmp;\n #endif\n } else if(v_texId < 2.0){\n vec4 texture2_tmp = texture2D(texture2, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture2\n texture2_tmp.a *= texture2D(texture2, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture2_tmp.rgb * texture2_tmp.rgb);\n o.a *= texture2_tmp.a;\n #else\n o *= texture2_tmp;\n #endif\n } else if(v_texId < 3.0){\n vec4 texture3_tmp = texture2D(texture3, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture3\n texture3_tmp.a *= texture2D(texture3, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture3_tmp.rgb * texture3_tmp.rgb);\n o.a *= texture3_tmp.a;\n #else\n o *= texture3_tmp;\n #endif\n } else if(v_texId < 4.0){\n vec4 texture4_tmp = texture2D(texture4, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture4\n texture4_tmp.a *= texture2D(texture4, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture4_tmp.rgb * texture4_tmp.rgb);\n o.a *= texture4_tmp.a;\n #else\n o *= texture4_tmp;\n #endif\n } else if(v_texId < 5.0){\n vec4 texture5_tmp = texture2D(texture5, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture5\n texture5_tmp.a *= texture2D(texture5, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture5_tmp.rgb * texture5_tmp.rgb);\n o.a *= texture5_tmp.a;\n #else\n o *= texture5_tmp;\n #endif\n } else if(v_texId < 6.0){\n vec4 texture6_tmp = texture2D(texture6, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture6\n texture6_tmp.a *= texture2D(texture6, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture6_tmp.rgb * texture6_tmp.rgb);\n o.a *= texture6_tmp.a;\n #else\n o *= texture6_tmp;\n #endif\n } else if(v_texId < 7.0){\n vec4 texture7_tmp = texture2D(texture7, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture7\n texture7_tmp.a *= texture2D(texture7, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture7_tmp.rgb * texture7_tmp.rgb);\n o.a *= texture7_tmp.a;\n #else\n o *= texture7_tmp;\n #endif\n } else {\n vec4 texture8_tmp = texture2D(texture8, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture8\n texture8_tmp.a *= texture2D(texture8, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture8_tmp.rgb * texture8_tmp.rgb);\n o.a *= texture8_tmp.a;\n #else\n o *= texture8_tmp;\n #endif\n }\n #else\n vec4 texture_tmp = texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture\n texture_tmp.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture_tmp.rgb * texture_tmp.rgb);\n o.a *= texture_tmp.a;\n #else\n o *= texture_tmp;\n #endif\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n}" + }, + "builtins": { + "globals": { + "blocks": [ + { + "name": "CCGlobal", + "defines": [] + } + ], + "samplers": [] + }, + "locals": { + "blocks": [ + { + "name": "CCLocal", + "defines": [] + } + ], + "samplers": [] + } + }, + "defines": [ + { + "name": "USE_TEXTURE", + "type": "boolean", + "defines": [] + }, + { + "name": "USE_MULTI_TEXTURE", + "type": "boolean", + "defines": [ + "USE_TEXTURE" + ] + }, + { + "name": "CC_USE_MODEL", + "type": "boolean", + "defines": [] + }, + { + "name": "USE_ALPHA_TEST", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture", + "type": "boolean", + "defines": [ + "USE_TEXTURE" + ] + }, + { + "name": "INPUT_IS_GAMMA", + "type": "boolean", + "defines": [ + "USE_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture2", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture3", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture4", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture5", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture6", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture7", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture8", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + } + ], + "blocks": [ + { + "name": "ALPHA_TEST", + "binding": 0, + "members": [ + { + "name": "alphaThreshold", + "type": 13, + "count": 1 + } + ], + "defines": [ + "USE_ALPHA_TEST" + ] + } + ], + "samplers": [ + { + "name": "texture", + "type": 29, + "count": 1, + "binding": 30, + "defines": [ + "USE_TEXTURE" + ] + }, + { + "name": "texture2", + "type": 29, + "count": 1, + "binding": 31, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "texture3", + "type": 29, + "count": 1, + "binding": 32, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "texture4", + "type": 29, + "count": 1, + "binding": 33, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "texture5", + "type": 29, + "count": 1, + "binding": 34, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "texture6", + "type": 29, + "count": 1, + "binding": 35, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "texture7", + "type": 29, + "count": 1, + "binding": 36, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "texture8", + "type": 29, + "count": 1, + "binding": 37, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + } + ] + } + ], + [ + { + "passes": [ + { + "program": "multi-2d-sprite|vs|fs", + "blendState": { + "targets": [ + { + "blend": true + } + ] + }, + "rasterizerState": { + "cullMode": 0 + }, + "properties": { + "texture": { + "value": "white", + "type": 29 + }, + "texture2": { + "value": "white", + "type": 29 + }, + "texture3": { + "value": "white", + "type": 29 + }, + "texture4": { + "value": "white", + "type": 29 + }, + "texture5": { + "value": "white", + "type": 29 + }, + "texture6": { + "value": "white", + "type": 29 + }, + "texture7": { + "value": "white", + "type": 29 + }, + "texture8": { + "value": "white", + "type": 29 + }, + "alphaThreshold": { + "type": 13, + "value": [ + 0.5 + ] + } + } + } + ] + } + ] + ] + ], + 0, + 0, + [], + [], + [] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,0", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,0", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + [ + 44, + "normalFont", + 64, + { + "commonHeight": 72, + "fontSize": 64, + "atlasName": "normalFont.png", + "fontDefDictionary": { + "32": { + "xOffset": 0, + "yOffset": 58, + "xAdvance": 18, + "rect": { + "x": 446, + "y": 710, + "width": 0, + "height": 0 + } + }, + "33": { + "xOffset": 6, + "yOffset": 11, + "xAdvance": 18, + "rect": { + "x": 328, + "y": 661, + "width": 8, + "height": 47 + } + }, + "34": { + "xOffset": 3, + "yOffset": 10, + "xAdvance": 23, + "rect": { + "x": 284, + "y": 710, + "width": 18, + "height": 18 + } + }, + "35": { + "xOffset": 1, + "yOffset": 10, + "xAdvance": 36, + "rect": { + "x": 221, + "y": 560, + "width": 36, + "height": 49 + } + }, + "36": { + "xOffset": 2, + "yOffset": 7, + "xAdvance": 36, + "rect": { + "x": 59, + "y": 500, + "width": 32, + "height": 58 + } + }, + "37": { + "xOffset": 4, + "yOffset": 10, + "xAdvance": 57, + "rect": { + "x": 661, + "y": 500, + "width": 51, + "height": 50 + } + }, + "38": { + "xOffset": 3, + "yOffset": 10, + "xAdvance": 43, + "rect": { + "x": 139, + "y": 560, + "width": 40, + "height": 49 + } + }, + "39": { + "xOffset": 3, + "yOffset": 10, + "xAdvance": 12, + "rect": { + "x": 304, + "y": 710, + "width": 8, + "height": 18 + } + }, + "40": { + "xOffset": 4, + "yOffset": 9, + "xAdvance": 21, + "rect": { + "x": 109, + "y": 2, + "width": 17, + "height": 62 + } + }, + "41": { + "xOffset": 4, + "yOffset": 9, + "xAdvance": 21, + "rect": { + "x": 128, + "y": 2, + "width": 17, + "height": 62 + } + }, + "42": { + "xOffset": 2, + "yOffset": 10, + "xAdvance": 25, + "rect": { + "x": 260, + "y": 710, + "width": 22, + "height": 21 + } + }, + "43": { + "xOffset": 4, + "yOffset": 19, + "xAdvance": 37, + "rect": { + "x": 162, + "y": 710, + "width": 32, + "height": 32 + } + }, + "44": { + "xOffset": 5, + "yOffset": 50, + "xAdvance": 18, + "rect": { + "x": 314, + "y": 710, + "width": 8, + "height": 17 + } + }, + "45": { + "xOffset": 2, + "yOffset": 37, + "xAdvance": 21, + "rect": { + "x": 384, + "y": 710, + "width": 19, + "height": 7 + } + }, + "46": { + "xOffset": 6, + "yOffset": 50, + "xAdvance": 18, + "rect": { + "x": 374, + "y": 710, + "width": 8, + "height": 8 + } + }, + "47": { + "xOffset": 0, + "yOffset": 10, + "xAdvance": 18, + "rect": { + "x": 292, + "y": 560, + "width": 19, + "height": 49 + } + }, + "48": { + "xOffset": 3, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 578, + "y": 560, + "width": 31, + "height": 48 + } + }, + "49": { + "xOffset": 7, + "yOffset": 10, + "xAdvance": 36, + "rect": { + "x": 86, + "y": 611, + "width": 18, + "height": 48 + } + }, + "50": { + "xOffset": 2, + "yOffset": 10, + "xAdvance": 36, + "rect": { + "x": 374, + "y": 560, + "width": 32, + "height": 48 + } + }, + "51": { + "xOffset": 3, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 408, + "y": 560, + "width": 32, + "height": 48 + } + }, + "52": { + "xOffset": 1, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 78, + "y": 661, + "width": 33, + "height": 47 + } + }, + "53": { + "xOffset": 3, + "yOffset": 12, + "xAdvance": 36, + "rect": { + "x": 113, + "y": 661, + "width": 32, + "height": 47 + } + }, + "54": { + "xOffset": 2, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 442, + "y": 560, + "width": 32, + "height": 48 + } + }, + "55": { + "xOffset": 3, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 181, + "y": 661, + "width": 31, + "height": 47 + } + }, + "56": { + "xOffset": 3, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 476, + "y": 560, + "width": 32, + "height": 48 + } + }, + "57": { + "xOffset": 3, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 510, + "y": 560, + "width": 32, + "height": 48 + } + }, + "58": { + "xOffset": 6, + "yOffset": 23, + "xAdvance": 18, + "rect": { + "x": 84, + "y": 710, + "width": 8, + "height": 35 + } + }, + "59": { + "xOffset": 5, + "yOffset": 23, + "xAdvance": 18, + "rect": { + "x": 366, + "y": 661, + "width": 8, + "height": 44 + } + }, + "60": { + "xOffset": 4, + "yOffset": 18, + "xAdvance": 37, + "rect": { + "x": 94, + "y": 710, + "width": 32, + "height": 33 + } + }, + "61": { + "xOffset": 4, + "yOffset": 24, + "xAdvance": 37, + "rect": { + "x": 226, + "y": 710, + "width": 32, + "height": 21 + } + }, + "62": { + "xOffset": 4, + "yOffset": 18, + "xAdvance": 37, + "rect": { + "x": 128, + "y": 710, + "width": 32, + "height": 33 + } + }, + "63": { + "xOffset": 3, + "yOffset": 10, + "xAdvance": 36, + "rect": { + "x": 611, + "y": 560, + "width": 31, + "height": 48 + } + }, + "64": { + "xOffset": 3, + "yOffset": 9, + "xAdvance": 65, + "rect": { + "x": 2, + "y": 2, + "width": 61, + "height": 62 + } + }, + "65": { + "xOffset": 0, + "yOffset": 11, + "xAdvance": 43, + "rect": { + "x": 215, + "y": 611, + "width": 44, + "height": 47 + } + }, + "66": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 43, + "rect": { + "x": 683, + "y": 611, + "width": 36, + "height": 47 + } + }, + "67": { + "xOffset": 3, + "yOffset": 10, + "xAdvance": 46, + "rect": { + "x": 95, + "y": 560, + "width": 42, + "height": 49 + } + }, + "68": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 46, + "rect": { + "x": 442, + "y": 611, + "width": 39, + "height": 47 + } + }, + "69": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 43, + "rect": { + "x": 2, + "y": 661, + "width": 36, + "height": 47 + } + }, + "70": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 39, + "rect": { + "x": 147, + "y": 661, + "width": 32, + "height": 47 + } + }, + "71": { + "xOffset": 3, + "yOffset": 10, + "xAdvance": 50, + "rect": { + "x": 49, + "y": 560, + "width": 44, + "height": 49 + } + }, + "72": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 46, + "rect": { + "x": 644, + "y": 611, + "width": 37, + "height": 47 + } + }, + "73": { + "xOffset": 6, + "yOffset": 11, + "xAdvance": 18, + "rect": { + "x": 338, + "y": 661, + "width": 8, + "height": 47 + } + }, + "74": { + "xOffset": 2, + "yOffset": 11, + "xAdvance": 32, + "rect": { + "x": 34, + "y": 611, + "width": 27, + "height": 48 + } + }, + "75": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 43, + "rect": { + "x": 483, + "y": 611, + "width": 39, + "height": 47 + } + }, + "76": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 214, + "y": 661, + "width": 30, + "height": 47 + } + }, + "77": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 53, + "rect": { + "x": 168, + "y": 611, + "width": 45, + "height": 47 + } + }, + "78": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 46, + "rect": { + "x": 524, + "y": 611, + "width": 38, + "height": 47 + } + }, + "79": { + "xOffset": 3, + "yOffset": 10, + "xAdvance": 50, + "rect": { + "x": 2, + "y": 560, + "width": 45, + "height": 49 + } + }, + "80": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 43, + "rect": { + "x": 40, + "y": 661, + "width": 36, + "height": 47 + } + }, + "81": { + "xOffset": 3, + "yOffset": 10, + "xAdvance": 50, + "rect": { + "x": 613, + "y": 500, + "width": 46, + "height": 52 + } + }, + "82": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 46, + "rect": { + "x": 398, + "y": 611, + "width": 42, + "height": 47 + } + }, + "83": { + "xOffset": 3, + "yOffset": 10, + "xAdvance": 43, + "rect": { + "x": 181, + "y": 560, + "width": 38, + "height": 49 + } + }, + "84": { + "xOffset": 2, + "yOffset": 11, + "xAdvance": 39, + "rect": { + "x": 564, + "y": 611, + "width": 38, + "height": 47 + } + }, + "85": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 46, + "rect": { + "x": 334, + "y": 560, + "width": 38, + "height": 48 + } + }, + "86": { + "xOffset": 0, + "yOffset": 11, + "xAdvance": 43, + "rect": { + "x": 353, + "y": 611, + "width": 43, + "height": 47 + } + }, + "87": { + "xOffset": 1, + "yOffset": 11, + "xAdvance": 60, + "rect": { + "x": 106, + "y": 611, + "width": 60, + "height": 47 + } + }, + "88": { + "xOffset": 0, + "yOffset": 11, + "xAdvance": 43, + "rect": { + "x": 261, + "y": 611, + "width": 44, + "height": 47 + } + }, + "89": { + "xOffset": 0, + "yOffset": 11, + "xAdvance": 43, + "rect": { + "x": 307, + "y": 611, + "width": 44, + "height": 47 + } + }, + "90": { + "xOffset": 1, + "yOffset": 11, + "xAdvance": 39, + "rect": { + "x": 604, + "y": 611, + "width": 38, + "height": 47 + } + }, + "91": { + "xOffset": 4, + "yOffset": 11, + "xAdvance": 18, + "rect": { + "x": 330, + "y": 377, + "width": 14, + "height": 60 + } + }, + "92": { + "xOffset": 0, + "yOffset": 10, + "xAdvance": 18, + "rect": { + "x": 313, + "y": 560, + "width": 19, + "height": 49 + } + }, + "93": { + "xOffset": 1, + "yOffset": 11, + "xAdvance": 18, + "rect": { + "x": 346, + "y": 377, + "width": 14, + "height": 60 + } + }, + "94": { + "xOffset": 2, + "yOffset": 9, + "xAdvance": 30, + "rect": { + "x": 196, + "y": 710, + "width": 28, + "height": 27 + } + }, + "95": { + "xOffset": -1, + "yOffset": 65, + "xAdvance": 36, + "rect": { + "x": 405, + "y": 710, + "width": 39, + "height": 6 + } + }, + "96": { + "xOffset": 3, + "yOffset": 11, + "xAdvance": 21, + "rect": { + "x": 359, + "y": 710, + "width": 13, + "height": 10 + } + }, + "97": { + "xOffset": 2, + "yOffset": 23, + "xAdvance": 36, + "rect": { + "x": 411, + "y": 661, + "width": 32, + "height": 36 + } + }, + "98": { + "xOffset": 4, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 644, + "y": 560, + "width": 30, + "height": 48 + } + }, + "99": { + "xOffset": 3, + "yOffset": 23, + "xAdvance": 32, + "rect": { + "x": 479, + "y": 661, + "width": 30, + "height": 36 + } + }, + "100": { + "xOffset": 2, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 676, + "y": 560, + "width": 30, + "height": 48 + } + }, + "101": { + "xOffset": 2, + "yOffset": 23, + "xAdvance": 36, + "rect": { + "x": 445, + "y": 661, + "width": 32, + "height": 36 + } + }, + "102": { + "xOffset": 1, + "yOffset": 10, + "xAdvance": 18, + "rect": { + "x": 63, + "y": 611, + "width": 21, + "height": 48 + } + }, + "103": { + "xOffset": 2, + "yOffset": 22, + "xAdvance": 36, + "rect": { + "x": 259, + "y": 560, + "width": 31, + "height": 49 + } + }, + "104": { + "xOffset": 4, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 246, + "y": 661, + "width": 29, + "height": 47 + } + }, + "105": { + "xOffset": 4, + "yOffset": 11, + "xAdvance": 14, + "rect": { + "x": 348, + "y": 661, + "width": 7, + "height": 47 + } + }, + "106": { + "xOffset": -3, + "yOffset": 10, + "xAdvance": 14, + "rect": { + "x": 660, + "y": 66, + "width": 14, + "height": 61 + } + }, + "107": { + "xOffset": 4, + "yOffset": 11, + "xAdvance": 32, + "rect": { + "x": 277, + "y": 661, + "width": 29, + "height": 47 + } + }, + "108": { + "xOffset": 4, + "yOffset": 11, + "xAdvance": 14, + "rect": { + "x": 357, + "y": 661, + "width": 7, + "height": 47 + } + }, + "109": { + "xOffset": 4, + "yOffset": 23, + "xAdvance": 53, + "rect": { + "x": 591, + "y": 661, + "width": 46, + "height": 35 + } + }, + "110": { + "xOffset": 4, + "yOffset": 23, + "xAdvance": 36, + "rect": { + "x": 2, + "y": 710, + "width": 28, + "height": 35 + } + }, + "111": { + "xOffset": 2, + "yOffset": 23, + "xAdvance": 36, + "rect": { + "x": 376, + "y": 661, + "width": 33, + "height": 36 + } + }, + "112": { + "xOffset": 4, + "yOffset": 23, + "xAdvance": 36, + "rect": { + "x": 708, + "y": 560, + "width": 30, + "height": 48 + } + }, + "113": { + "xOffset": 2, + "yOffset": 23, + "xAdvance": 36, + "rect": { + "x": 2, + "y": 611, + "width": 30, + "height": 48 + } + }, + "114": { + "xOffset": 4, + "yOffset": 23, + "xAdvance": 21, + "rect": { + "x": 62, + "y": 710, + "width": 20, + "height": 35 + } + }, + "115": { + "xOffset": 2, + "yOffset": 23, + "xAdvance": 32, + "rect": { + "x": 511, + "y": 661, + "width": 29, + "height": 36 + } + }, + "116": { + "xOffset": 1, + "yOffset": 11, + "xAdvance": 18, + "rect": { + "x": 308, + "y": 661, + "width": 18, + "height": 47 + } + }, + "117": { + "xOffset": 4, + "yOffset": 24, + "xAdvance": 36, + "rect": { + "x": 32, + "y": 710, + "width": 28, + "height": 35 + } + }, + "118": { + "xOffset": 1, + "yOffset": 23, + "xAdvance": 32, + "rect": { + "x": 674, + "y": 661, + "width": 32, + "height": 35 + } + }, + "119": { + "xOffset": 0, + "yOffset": 23, + "xAdvance": 46, + "rect": { + "x": 542, + "y": 661, + "width": 47, + "height": 35 + } + }, + "120": { + "xOffset": 0, + "yOffset": 23, + "xAdvance": 32, + "rect": { + "x": 639, + "y": 661, + "width": 33, + "height": 35 + } + }, + "121": { + "xOffset": 1, + "yOffset": 23, + "xAdvance": 32, + "rect": { + "x": 544, + "y": 560, + "width": 32, + "height": 48 + } + }, + "122": { + "xOffset": 1, + "yOffset": 23, + "xAdvance": 32, + "rect": { + "x": 708, + "y": 661, + "width": 31, + "height": 35 + } + }, + "123": { + "xOffset": 2, + "yOffset": 9, + "xAdvance": 21, + "rect": { + "x": 65, + "y": 2, + "width": 20, + "height": 62 + } + }, + "124": { + "xOffset": 6, + "yOffset": 9, + "xAdvance": 17, + "rect": { + "x": 147, + "y": 2, + "width": 6, + "height": 62 + } + }, + "125": { + "xOffset": 1, + "yOffset": 9, + "xAdvance": 21, + "rect": { + "x": 87, + "y": 2, + "width": 20, + "height": 62 + } + }, + "126": { + "xOffset": 3, + "yOffset": 29, + "xAdvance": 37, + "rect": { + "x": 324, + "y": 710, + "width": 33, + "height": 12 + } + }, + "19978": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 476, + "y": 439, + "width": 58, + "height": 58 + } + }, + "20010": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 676, + "y": 66, + "width": 61, + "height": 60 + } + }, + "20026": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 118, + "y": 377, + "width": 55, + "height": 60 + } + }, + "20080": { + "xOffset": 5, + "yOffset": 8, + "xAdvance": 64, + "rect": { + "x": 277, + "y": 500, + "width": 57, + "height": 57 + } + }, + "20154": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 2, + "y": 129, + "width": 61, + "height": 60 + } + }, + "20215": { + "xOffset": 2, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 65, + "y": 129, + "width": 61, + "height": 60 + } + }, + "20302": { + "xOffset": 2, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 128, + "y": 129, + "width": 61, + "height": 60 + } + }, + "20313": { + "xOffset": 2, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 362, + "y": 377, + "width": 61, + "height": 59 + } + }, + "20323": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 307, + "y": 66, + "width": 58, + "height": 61 + } + }, + "20803": { + "xOffset": 3, + "yOffset": 8, + "xAdvance": 64, + "rect": { + "x": 155, + "y": 500, + "width": 59, + "height": 57 + } + }, + "20805": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 490, + "y": 253, + "width": 58, + "height": 60 + } + }, + "20813": { + "xOffset": 3, + "yOffset": 3, + "xAdvance": 64, + "rect": { + "x": 2, + "y": 66, + "width": 59, + "height": 61 + } + }, + "20853": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 2, + "y": 253, + "width": 59, + "height": 60 + } + }, + "20869": { + "xOffset": 7, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 175, + "y": 377, + "width": 52, + "height": 60 + } + }, + "20891": { + "xOffset": 4, + "yOffset": 7, + "xAdvance": 64, + "rect": { + "x": 656, + "y": 439, + "width": 57, + "height": 58 + } + }, + "20986": { + "xOffset": 7, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 229, + "y": 377, + "width": 52, + "height": 60 + } + }, + "20998": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 632, + "y": 129, + "width": 60, + "height": 60 + } + }, + "21015": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 2, + "y": 439, + "width": 57, + "height": 59 + } + }, + "21040": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 61, + "y": 439, + "width": 57, + "height": 59 + } + }, + "21069": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 63, + "y": 66, + "width": 59, + "height": 61 + } + }, + "21097": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 542, + "y": 315, + "width": 57, + "height": 60 + } + }, + "21160": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 550, + "y": 253, + "width": 58, + "height": 60 + } + }, + "21215": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 407, + "y": 2, + "width": 60, + "height": 61 + } + }, + "21319": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 610, + "y": 253, + "width": 58, + "height": 60 + } + }, + "21330": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 670, + "y": 253, + "width": 58, + "height": 60 + } + }, + "21407": { + "xOffset": 3, + "yOffset": 7, + "xAdvance": 64, + "rect": { + "x": 216, + "y": 500, + "width": 59, + "height": 57 + } + }, + "21475": { + "xOffset": 9, + "yOffset": 11, + "xAdvance": 64, + "rect": { + "x": 563, + "y": 500, + "width": 48, + "height": 52 + } + }, + "21487": { + "xOffset": 4, + "yOffset": 8, + "xAdvance": 64, + "rect": { + "x": 336, + "y": 500, + "width": 59, + "height": 56 + } + }, + "21518": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 2, + "y": 191, + "width": 60, + "height": 60 + } + }, + "22478": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 191, + "y": 129, + "width": 61, + "height": 60 + } + }, + "22681": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 64, + "y": 191, + "width": 60, + "height": 60 + } + }, + "22823": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 126, + "y": 191, + "width": 60, + "height": 60 + } + }, + "22825": { + "xOffset": 3, + "yOffset": 8, + "xAdvance": 64, + "rect": { + "x": 93, + "y": 500, + "width": 60, + "height": 57 + } + }, + "23041": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 488, + "y": 377, + "width": 60, + "height": 59 + } + }, + "23432": { + "xOffset": 5, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 2, + "y": 377, + "width": 56, + "height": 60 + } + }, + "23448": { + "xOffset": 5, + "yOffset": 3, + "xAdvance": 64, + "rect": { + "x": 546, + "y": 66, + "width": 55, + "height": 61 + } + }, + "23453": { + "xOffset": 5, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 2, + "y": 500, + "width": 55, + "height": 58 + } + }, + "23567": { + "xOffset": 2, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 425, + "y": 377, + "width": 61, + "height": 59 + } + }, + "24050": { + "xOffset": 6, + "yOffset": 7, + "xAdvance": 64, + "rect": { + "x": 505, + "y": 500, + "width": 56, + "height": 55 + } + }, + "24065": { + "xOffset": 4, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 60, + "y": 377, + "width": 56, + "height": 60 + } + }, + "24182": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 124, + "y": 66, + "width": 59, + "height": 61 + } + }, + "24314": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 63, + "y": 253, + "width": 59, + "height": 60 + } + }, + "24320": { + "xOffset": 4, + "yOffset": 8, + "xAdvance": 64, + "rect": { + "x": 397, + "y": 500, + "width": 58, + "height": 56 + } + }, + "24339": { + "xOffset": 11, + "yOffset": 8, + "xAdvance": 64, + "rect": { + "x": 457, + "y": 500, + "width": 46, + "height": 56 + } + }, + "24403": { + "xOffset": 7, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 178, + "y": 439, + "width": 50, + "height": 59 + } + }, + "24449": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 254, + "y": 129, + "width": 61, + "height": 60 + } + }, + "24471": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 188, + "y": 191, + "width": 60, + "height": 60 + } + }, + "25552": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 250, + "y": 191, + "width": 60, + "height": 60 + } + }, + "25910": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 185, + "y": 66, + "width": 59, + "height": 61 + } + }, + "25928": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 155, + "y": 2, + "width": 61, + "height": 61 + } + }, + "26009": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 317, + "y": 129, + "width": 61, + "height": 60 + } + }, + "26102": { + "xOffset": 5, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 673, + "y": 377, + "width": 58, + "height": 59 + } + }, + "26361": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 2, + "y": 315, + "width": 58, + "height": 60 + } + }, + "26368": { + "xOffset": 4, + "yOffset": 7, + "xAdvance": 64, + "rect": { + "x": 536, + "y": 439, + "width": 58, + "height": 58 + } + }, + "26395": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 120, + "y": 439, + "width": 56, + "height": 59 + } + }, + "26408": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 62, + "y": 315, + "width": 58, + "height": 60 + } + }, + "26426": { + "xOffset": 2, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 380, + "y": 129, + "width": 61, + "height": 60 + } + }, + "26448": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 124, + "y": 253, + "width": 59, + "height": 60 + } + }, + "26524": { + "xOffset": 3, + "yOffset": 6, + "xAdvance": 64, + "rect": { + "x": 230, + "y": 439, + "width": 60, + "height": 58 + } + }, + "27425": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 218, + "y": 2, + "width": 61, + "height": 61 + } + }, + "27493": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 367, + "y": 66, + "width": 58, + "height": 61 + } + }, + "27494": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 550, + "y": 377, + "width": 60, + "height": 59 + } + }, + "27599": { + "xOffset": 3, + "yOffset": 3, + "xAdvance": 64, + "rect": { + "x": 281, + "y": 2, + "width": 61, + "height": 61 + } + }, + "27963": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 185, + "y": 253, + "width": 59, + "height": 60 + } + }, + "28608": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 443, + "y": 129, + "width": 61, + "height": 60 + } + }, + "28857": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 312, + "y": 191, + "width": 60, + "height": 60 + } + }, + "31181": { + "xOffset": 2, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 122, + "y": 315, + "width": 58, + "height": 60 + } + }, + "31526": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 246, + "y": 253, + "width": 59, + "height": 60 + } + }, + "31569": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 307, + "y": 253, + "width": 59, + "height": 60 + } + }, + "31574": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 469, + "y": 2, + "width": 60, + "height": 61 + } + }, + "31665": { + "xOffset": 2, + "yOffset": 3, + "xAdvance": 64, + "rect": { + "x": 531, + "y": 2, + "width": 60, + "height": 61 + } + }, + "31918": { + "xOffset": 2, + "yOffset": 3, + "xAdvance": 64, + "rect": { + "x": 344, + "y": 2, + "width": 61, + "height": 61 + } + }, + "32043": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 182, + "y": 315, + "width": 58, + "height": 60 + } + }, + "32418": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 354, + "y": 439, + "width": 59, + "height": 58 + } + }, + "32493": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 593, + "y": 2, + "width": 60, + "height": 61 + } + }, + "32511": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 374, + "y": 191, + "width": 60, + "height": 60 + } + }, + "32791": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 436, + "y": 191, + "width": 60, + "height": 60 + } + }, + "33258": { + "xOffset": 10, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 283, + "y": 377, + "width": 45, + "height": 60 + } + }, + "33457": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 246, + "y": 66, + "width": 59, + "height": 61 + } + }, + "33609": { + "xOffset": 4, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 242, + "y": 315, + "width": 58, + "height": 60 + } + }, + "33719": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 368, + "y": 253, + "width": 59, + "height": 60 + } + }, + "33829": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 601, + "y": 315, + "width": 57, + "height": 60 + } + }, + "34917": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 498, + "y": 191, + "width": 60, + "height": 60 + } + }, + "35745": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 560, + "y": 191, + "width": 60, + "height": 60 + } + }, + "36141": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 302, + "y": 315, + "width": 58, + "height": 60 + } + }, + "36153": { + "xOffset": 5, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 603, + "y": 66, + "width": 55, + "height": 61 + } + }, + "36824": { + "xOffset": 4, + "yOffset": 6, + "xAdvance": 64, + "rect": { + "x": 612, + "y": 377, + "width": 59, + "height": 59 + } + }, + "36896": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 429, + "y": 253, + "width": 59, + "height": 60 + } + }, + "37327": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 415, + "y": 439, + "width": 59, + "height": 58 + } + }, + "37329": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 292, + "y": 439, + "width": 60, + "height": 58 + } + }, + "38047": { + "xOffset": 2, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 362, + "y": 315, + "width": 58, + "height": 60 + } + }, + "38081": { + "xOffset": 2, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 506, + "y": 129, + "width": 61, + "height": 60 + } + }, + "38134": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 622, + "y": 191, + "width": 60, + "height": 60 + } + }, + "38228": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 655, + "y": 2, + "width": 60, + "height": 61 + } + }, + "38431": { + "xOffset": 6, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 422, + "y": 315, + "width": 58, + "height": 60 + } + }, + "38450": { + "xOffset": 5, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 487, + "y": 66, + "width": 57, + "height": 61 + } + }, + "38477": { + "xOffset": 5, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 482, + "y": 315, + "width": 58, + "height": 60 + } + }, + "38480": { + "xOffset": 5, + "yOffset": 6, + "xAdvance": 64, + "rect": { + "x": 596, + "y": 439, + "width": 58, + "height": 58 + } + }, + "38543": { + "xOffset": 5, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 660, + "y": 315, + "width": 57, + "height": 60 + } + }, + "38599": { + "xOffset": 3, + "yOffset": 3, + "xAdvance": 64, + "rect": { + "x": 427, + "y": 66, + "width": 58, + "height": 61 + } + }, + "39569": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 569, + "y": 129, + "width": 61, + "height": 60 + } + } + }, + "kerningDict": { + "2097217": -3, + "2097236": -1, + "2097241": -1, + "3211313": -4, + "4259872": -3, + "4259924": -4, + "4259926": -4, + "4259927": -2, + "4259929": -4, + "4259958": -1, + "4259959": -1, + "4259961": -1, + "4587564": -7, + "4587566": -7, + "4587585": -3, + "4980768": -2, + "4980820": -4, + "4980822": -4, + "4980823": -4, + "4980825": -4, + "4980857": -2, + "5242912": -1, + "5242924": -8, + "5242926": -8, + "5242945": -4, + "5374036": -1, + "5374038": -1, + "5374039": -1, + "5374041": -1, + "5505056": -1, + "5505068": -7, + "5505069": -3, + "5505070": -7, + "5505082": -7, + "5505083": -7, + "5505089": -4, + "5505103": -1, + "5505121": -7, + "5505123": -7, + "5505125": -7, + "5505129": -2, + "5505135": -7, + "5505138": -2, + "5505139": -7, + "5505141": -2, + "5505143": -3, + "5505145": -3, + "5636140": -5, + "5636141": -3, + "5636142": -5, + "5636154": -2, + "5636155": -2, + "5636161": -4, + "5636193": -4, + "5636197": -3, + "5636201": -1, + "5636207": -3, + "5636210": -2, + "5636213": -2, + "5636217": -2, + "5701676": -3, + "5701677": -1, + "5701678": -3, + "5701690": -1, + "5701691": -1, + "5701697": -2, + "5701729": -2, + "5701733": -1, + "5701743": -1, + "5701746": -1, + "5701749": -1, + "5832736": -1, + "5832748": -8, + "5832749": -5, + "5832750": -8, + "5832762": -3, + "5832763": -4, + "5832769": -4, + "5832801": -4, + "5832805": -5, + "5832809": -2, + "5832815": -5, + "5832816": -4, + "5832817": -5, + "5832821": -3, + "5832822": -3, + "6684774": -1, + "7471148": -3, + "7471150": -3, + "7733292": -4, + "7733294": -4, + "7798828": -3, + "7798830": -3, + "7929900": -4, + "7929902": -4 + } + } + ] + ], + 0, + 0, + [ + 0 + ], + [ + 21 + ], + [ + 32 + ] + ], + [ + [ + { + "name": "1655112624336", + "rect": [ + 0, + 0, + 564, + 882 + ], + "offset": [ + 0, + 0 + ], + "originalSize": [ + 564, + 882 + ], + "capInsets": [ + 192, + 176, + 198, + 155 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 2 + ], + [ + 6 + ] + ], + [ + [ + { + "name": "default_sprite", + "rect": [ + 0, + 2, + 40, + 36 + ], + "offset": [ + 0, + 0 + ], + "originalSize": [ + 40, + 40 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 2 + ], + [ + 3 + ] + ], + [ + [ + { + "name": "sheep_down_0", + "rect": [ + 2, + 61, + 224, + 87 + ], + "offset": [ + 0, + -25 + ], + "originalSize": [ + 228, + 159 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 2 + ], + [ + 33 + ] + ], + [ + [ + { + "name": "normalFont", + "rect": [ + 2, + 2, + 737, + 742 + ], + "offset": [ + -0.5, + 20 + ], + "originalSize": [ + 742, + 786 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 2 + ], + [ + 7 + ] + ], + [ + [ + { + "name": "1655112479313", + "rect": [ + 0, + 0, + 402, + 370 + ], + "offset": [ + 0, + 0 + ], + "originalSize": [ + 402, + 370 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 2 + ], + [ + 5 + ] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + { + "name": "sheep_jump_3", + "rect": [ + 26, + 24, + 152, + 115 + ], + "offset": [ + -12, + -2 + ], + "originalSize": [ + 228, + 159 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 2 + ], + [ + 34 + ] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,0", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + [ + 45, + "spineboy", + "\nspineboy.png\nsize:1024,256\nformat: RGBA8888\nfilter: Linear,Linear\nrepeat: none\neye_indifferent\n rotate: true\n xy: 389, 5\n size: 56, 53\n orig: 56, 53\n offset: 0, 0\n index: -1\neye_surprised\n rotate: false\n xy: 580, 34\n size: 56, 53\n orig: 56, 53\n offset: 0, 0\n index: -1\nfront_bracer\n rotate: false\n xy: 732, 85\n size: 35, 48\n orig: 35, 48\n offset: 0, 0\n index: -1\nfront_fist_closed\n rotate: false\n xy: 556, 91\n size: 45, 49\n orig: 45, 49\n offset: 0, 0\n index: -1\nfront_fist_open\n rotate: false\n xy: 668, 32\n size: 52, 52\n orig: 52, 52\n offset: 0, 0\n index: -1\nfront_foot\n rotate: false\n xy: 924, 201\n size: 76, 41\n orig: 76, 41\n offset: 0, 0\n index: -1\nfront_foot_bend1\n rotate: false\n xy: 845, 200\n size: 77, 42\n orig: 77, 42\n offset: 0, 0\n index: -1\nfront_foot_bend2\n rotate: false\n xy: 778, 186\n size: 65, 56\n orig: 65, 56\n offset: 0, 0\n index: -1\nfront_shin\n rotate: true\n xy: 444, 91\n size: 49, 110\n orig: 49, 110\n offset: 0, 0\n index: -1\nfront_thigh\n rotate: true\n xy: 603, 89\n size: 29, 67\n orig: 29, 67\n offset: 0, 0\n index: -1\nfront_upper_arm\n rotate: true\n xy: 672, 86\n size: 32, 58\n orig: 32, 58\n offset: 0, 0\n index: -1\ngoggles\n rotate: false\n xy: 444, 142\n size: 157, 100\n orig: 157, 100\n offset: 0, 0\n index: -1\ngun\n rotate: false\n xy: 603, 120\n size: 126, 122\n orig: 126, 122\n offset: 0, 0\n index: -1\nhead\n rotate: false\n xy: 279, 63\n size: 163, 179\n orig: 163, 179\n offset: 0, 0\n index: -1\nmouth_grind\n rotate: false\n xy: 845, 163\n size: 56, 35\n orig: 56, 35\n offset: 0, 0\n index: -1\nmouth_oooo\n rotate: false\n xy: 842, 126\n size: 56, 35\n orig: 56, 35\n offset: 0, 0\n index: -1\nmouth_smile\n rotate: false\n xy: 769, 97\n size: 56, 35\n orig: 56, 35\n offset: 0, 0\n index: -1\nmuzzle\n rotate: false\n xy: 2, 2\n size: 275, 240\n orig: 277, 240\n offset: 0, 0\n index: -1\nneck\n rotate: false\n xy: 903, 173\n size: 22, 25\n orig: 22, 25\n offset: 0, 0\n index: -1\nrear_bracer\n rotate: false\n xy: 722, 40\n size: 34, 43\n orig: 34, 43\n offset: 0, 0\n index: -1\nrear_foot\n rotate: false\n xy: 444, 11\n size: 68, 36\n orig: 68, 36\n offset: 0, 0\n index: -1\nrear_foot_bend1\n rotate: false\n xy: 444, 49\n size: 70, 40\n orig: 70, 40\n offset: 0, 0\n index: -1\nrear_foot_bend2\n rotate: false\n xy: 778, 134\n size: 62, 50\n orig: 62, 50\n offset: 0, 0\n index: -1\nrear_shin\n rotate: false\n xy: 731, 135\n size: 45, 107\n orig: 45, 107\n offset: 0, 0\n index: -1\nrear_thigh\n rotate: true\n xy: 516, 50\n size: 39, 62\n orig: 39, 62\n offset: 0, 0\n index: -1\nrear_upper_arm\n rotate: false\n xy: 638, 35\n size: 28, 52\n orig: 28, 52\n offset: 0, 0\n index: -1\ntorso\n rotate: true\n xy: 279, 2\n size: 59, 108\n orig: 59, 108\n offset: 0, 0\n index: -1\n", + [ + "spineboy.png" + ], + { + "bones": [ + { + "name": "hip", + "y": 247.48 + }, + { + "name": "front_thigh", + "parent": "hip", + "length": 74.8, + "x": -17.45, + "y": -11.64, + "rotation": -95.51, + "color": "00ff04ff" + }, + { + "name": "rear_thigh", + "parent": "hip", + "length": 85.71, + "x": 8.91, + "y": -5.62, + "rotation": -72.54, + "color": "ff000dff" + }, + { + "name": "torso", + "parent": "hip", + "length": 127.55, + "x": -1.61, + "y": 4.9, + "rotation": 103.82, + "color": "e0da19ff" + }, + { + "name": "front_shin", + "parent": "front_thigh", + "length": 128.76, + "x": 78.69, + "y": 1.6, + "rotation": -2.21, + "inheritScale": false, + "color": "00ff04ff" + }, + { + "name": "front_upper_arm", + "parent": "torso", + "length": 69.45, + "x": 103.75, + "y": 19.32, + "rotation": 168.37, + "color": "00ff04ff" + }, + { + "name": "neck", + "parent": "torso", + "length": 25.45, + "x": 127.49, + "y": -0.3, + "rotation": -31.53, + "color": "e0da19ff" + }, + { + "name": "rear_shin", + "parent": "rear_thigh", + "length": 121.87, + "x": 86.1, + "y": -1.32, + "rotation": -19.83, + "color": "ff000dff" + }, + { + "name": "rear_upper_arm", + "parent": "torso", + "length": 51.93, + "x": 92.35, + "y": -19.22, + "rotation": -169.55, + "color": "ff000dff" + }, + { + "name": "front_bracer", + "parent": "front_upper_arm", + "length": 40.57, + "x": 68.8, + "y": -0.68, + "rotation": 18.29, + "color": "00ff04ff" + }, + { + "name": "front_foot", + "parent": "front_shin", + "length": 91.34, + "x": 128.75, + "y": -0.33, + "rotation": 77.9, + "color": "00ff04ff" + }, + { + "name": "head", + "parent": "neck", + "length": 263.57, + "x": 27.66, + "y": -0.25, + "rotation": 23.18, + "color": "e0da19ff" + }, + { + "name": "rear_bracer", + "parent": "rear_upper_arm", + "length": 34.55, + "x": 51.35, + "rotation": 23.15, + "color": "ff000dff" + }, + { + "name": "rear_foot", + "parent": "rear_shin", + "length": 82.57, + "x": 121.45, + "y": -0.75, + "rotation": 69.3, + "color": "ff000dff" + }, + { + "name": "front_fist", + "parent": "front_bracer", + "length": 65.38, + "x": 40.56, + "y": 0.19, + "rotation": 12.43, + "color": "00ff04ff" + }, + { + "name": "gun", + "parent": "rear_bracer", + "length": 43.1, + "x": 34.42, + "y": -0.45, + "rotation": 5.34, + "color": "ff000dff" + }, + { + "name": "gunTip", + "parent": "gun", + "x": 201.04, + "y": 52.13, + "rotation": 6.83, + "color": "ff000dff" + } + ], + "slots": [ + { + "name": "rear_upper_arm", + "bone": "rear_upper_arm", + "attachment": "rear_upper_arm" + }, + { + "name": "rear_bracer", + "bone": "rear_bracer", + "attachment": "rear_bracer" + }, + { + "name": "gun", + "bone": "gun", + "attachment": "gun" + }, + { + "name": "rear_foot", + "bone": "rear_foot", + "attachment": "rear_foot" + }, + { + "name": "rear_thigh", + "bone": "rear_thigh", + "attachment": "rear_thigh" + }, + { + "name": "rear_shin", + "bone": "rear_shin", + "attachment": "rear_shin" + }, + { + "name": "neck", + "bone": "neck", + "attachment": "neck" + }, + { + "name": "torso", + "bone": "torso", + "attachment": "torso" + }, + { + "name": "front_upper_arm", + "bone": "front_upper_arm", + "attachment": "front_upper_arm" + }, + { + "name": "head", + "bone": "head", + "attachment": "head" + }, + { + "name": "eye", + "bone": "head", + "attachment": "eye_indifferent" + }, + { + "name": "front_thigh", + "bone": "front_thigh", + "attachment": "front_thigh" + }, + { + "name": "front_foot", + "bone": "front_foot", + "attachment": "front_foot" + }, + { + "name": "front_shin", + "bone": "front_shin", + "attachment": "front_shin" + }, + { + "name": "mouth", + "bone": "head", + "attachment": "mouth_smile" + }, + { + "name": "goggles", + "bone": "head", + "attachment": "goggles" + }, + { + "name": "front_bracer", + "bone": "front_bracer", + "attachment": "front_bracer" + }, + { + "name": "front_fist", + "bone": "front_fist", + "attachment": "front_fist_closed" + }, + { + "name": "muzzle", + "bone": "gunTip", + "additive": true + } + ], + "skins": { + "default": { + "eye": { + "eye_indifferent": { + "x": 85.72, + "y": -28.18, + "rotation": -70.63, + "width": 93, + "height": 89 + }, + "eye_surprised": { + "x": 85.72, + "y": -28.18, + "rotation": -70.63, + "width": 93, + "height": 89 + } + }, + "front_bracer": { + "front_bracer": { + "x": 12.03, + "y": -1.67, + "rotation": 79.59, + "width": 58, + "height": 80 + } + }, + "front_fist": { + "front_fist_closed": { + "x": 35.49, + "y": 6, + "rotation": 67.16, + "width": 75, + "height": 82 + }, + "front_fist_open": { + "x": 39.56, + "y": 7.76, + "rotation": 67.16, + "width": 86, + "height": 87 + } + }, + "front_foot": { + "front_foot": { + "x": 29.51, + "y": 7.83, + "rotation": 18.68, + "width": 126, + "height": 69 + }, + "front_foot_bend1": { + "x": 29.51, + "y": 7.83, + "rotation": 18.68, + "width": 128, + "height": 70 + }, + "front_foot_bend2": { + "x": 16.07, + "y": 13.83, + "rotation": 18.68, + "width": 108, + "height": 93 + } + }, + "front_shin": { + "front_shin": { + "x": 55.11, + "y": -3.54, + "rotation": 96.59, + "width": 82, + "height": 184 + } + }, + "front_thigh": { + "front_thigh": { + "x": 42.47, + "y": 4.44, + "rotation": 84.86, + "width": 48, + "height": 112 + } + }, + "front_upper_arm": { + "front_upper_arm": { + "x": 28.3, + "y": 7.37, + "rotation": 97.89, + "width": 54, + "height": 97 + } + }, + "goggles": { + "goggles": { + "x": 97.07, + "y": 6.54, + "rotation": -70.63, + "width": 261, + "height": 166 + } + }, + "gun": { + "gun": { + "x": 77.3, + "y": 16.4, + "rotation": 60.82, + "width": 210, + "height": 203 + } + }, + "head": { + "head": { + "x": 128.95, + "y": 0.29, + "rotation": -70.63, + "width": 271, + "height": 298 + } + }, + "mouth": { + "mouth_grind": { + "x": 23.68, + "y": -32.23, + "rotation": -70.63, + "width": 93, + "height": 59 + }, + "mouth_oooo": { + "x": 23.68, + "y": -32.23, + "rotation": -70.63, + "width": 93, + "height": 59 + }, + "mouth_smile": { + "x": 23.68, + "y": -32.23, + "rotation": -70.63, + "width": 93, + "height": 59 + } + }, + "muzzle": { + "muzzle": { + "x": 18.25, + "y": 5.44, + "rotation": 0.15, + "width": 462, + "height": 400 + } + }, + "neck": { + "neck": { + "x": 9.76, + "y": -3.01, + "rotation": -55.22, + "width": 36, + "height": 41 + } + }, + "rear_bracer": { + "rear_bracer": { + "x": 11.15, + "y": -2.2, + "rotation": 66.17, + "width": 56, + "height": 72 + } + }, + "rear_foot": { + "rear_foot": { + "x": 31.51, + "y": 3.57, + "rotation": 23.07, + "width": 113, + "height": 60 + }, + "rear_foot_bend1": { + "x": 34.39, + "y": 4.8, + "rotation": 23.07, + "width": 117, + "height": 66 + }, + "rear_foot_bend2": { + "x": 30.38, + "y": 12.62, + "rotation": 23.07, + "width": 103, + "height": 83 + } + }, + "rear_shin": { + "rear_shin": { + "x": 58.29, + "y": -2.75, + "rotation": 92.37, + "width": 75, + "height": 178 + } + }, + "rear_thigh": { + "rear_thigh": { + "x": 33.1, + "y": -4.11, + "rotation": 72.54, + "width": 65, + "height": 104 + } + }, + "rear_upper_arm": { + "rear_upper_arm": { + "x": 21.12, + "y": 4.08, + "rotation": 89.32, + "width": 47, + "height": 87 + } + }, + "torso": { + "torso": { + "x": 63.61, + "y": 7.12, + "rotation": -94.53, + "width": 98, + "height": 180 + } + } + } + }, + "events": { + "footstep": {}, + "headAttach": { + "int": 3, + "float": 4 + }, + "headBehind": { + "int": 5, + "float": 6, + "string": "setup" + }, + "headPop": { + "int": 1, + "float": 2 + } + }, + "animations": { + "death": { + "slots": { + "eye": { + "attachment": [ + { + "time": 0, + "name": "eye_surprised" + }, + { + "time": 0.4666, + "name": "eye_indifferent" + }, + { + "time": 2.2333, + "name": "eye_surprised" + }, + { + "time": 4.5333, + "name": "eye_indifferent" + } + ] + }, + "front_fist": { + "attachment": [ + { + "time": 0, + "name": "front_fist_open" + } + ] + }, + "mouth": { + "attachment": [ + { + "time": 0, + "name": "mouth_oooo" + }, + { + "time": 2.2333, + "name": "mouth_grind" + }, + { + "time": 4.5333, + "name": "mouth_oooo" + } + ] + } + }, + "bones": { + "head": { + "rotate": [ + { + "time": 0, + "angle": -2.82 + }, + { + "time": 0.1333, + "angle": -28.74 + }, + { + "time": 0.2333, + "angle": 11.42 + }, + { + "time": 0.3333, + "angle": -50.24 + }, + { + "time": 0.4, + "angle": -72.66, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": -72.66 + }, + { + "time": 0.5, + "angle": -20.24 + }, + { + "time": 0.5666, + "angle": -85.28, + "curve": "stepped" + }, + { + "time": 0.9333, + "angle": -85.28, + "curve": "stepped" + }, + { + "time": 2.2333, + "angle": -85.28 + }, + { + "time": 2.5, + "angle": -51.96, + "curve": "stepped" + }, + { + "time": 4.5333, + "angle": -51.96 + }, + { + "time": 4.6666, + "angle": -85.28 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "neck": { + "rotate": [ + { + "time": 0, + "angle": -2.82 + }, + { + "time": 0.1333, + "angle": 12.35 + }, + { + "time": 0.2333, + "angle": 29.89 + }, + { + "time": 0.3, + "angle": 70.36 + }, + { + "time": 0.4, + "angle": -10.22, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": -10.22 + }, + { + "time": 0.5, + "angle": 2.92 + }, + { + "time": 0.5666, + "angle": 47.94, + "curve": "stepped" + }, + { + "time": 2.2333, + "angle": 47.94 + }, + { + "time": 2.5, + "angle": 18.5, + "curve": "stepped" + }, + { + "time": 4.5333, + "angle": 18.5 + }, + { + "time": 4.6666, + "angle": 47.94 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "torso": { + "rotate": [ + { + "time": 0, + "angle": -8.61 + }, + { + "time": 0.1333, + "angle": 28.19 + }, + { + "time": 0.2666, + "angle": -280.19 + }, + { + "time": 0.4, + "angle": -237.22, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": -237.22 + }, + { + "time": 0.5, + "angle": 76.03, + "curve": "stepped" + }, + { + "time": 0.8, + "angle": 76.03, + "curve": "stepped" + }, + { + "time": 0.9333, + "angle": 76.03, + "curve": "stepped" + }, + { + "time": 2.2333, + "angle": 76.03 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.9333, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 2.2333, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -38.85 + }, + { + "time": 0.1333, + "angle": -299.58 + }, + { + "time": 0.2666, + "angle": -244.74 + }, + { + "time": 0.4, + "angle": -292.35 + }, + { + "time": 0.4333, + "angle": -315.84 + }, + { + "time": 0.5, + "angle": -347.94 + }, + { + "time": 0.7, + "angle": -347.33, + "curve": "stepped" + }, + { + "time": 2.2333, + "angle": -347.33 + }, + { + "time": 2.7, + "angle": -290.68 + }, + { + "time": 2.7666, + "angle": -285.1 + }, + { + "time": 4.6666, + "angle": -290.68 + }, + { + "time": 4.8, + "angle": 8.61 + }, + { + "time": 4.8666, + "angle": 10.94 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -44.69 + }, + { + "time": 0.1333, + "angle": 112.26 + }, + { + "time": 0.2666, + "angle": 129.07 + }, + { + "time": 0.4, + "angle": 134.94, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": 134.94 + }, + { + "time": 0.5666, + "angle": 172.6, + "curve": "stepped" + }, + { + "time": 0.9333, + "angle": 172.6, + "curve": "stepped" + }, + { + "time": 2.2333, + "angle": 172.6 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_bracer": { + "rotate": [ + { + "time": 0, + "angle": 21.88 + }, + { + "time": 0.1333, + "angle": 11.48 + }, + { + "time": 0.2666, + "angle": -18.81 + }, + { + "time": 0.4, + "angle": -18.92 + }, + { + "time": 0.4333, + "angle": -18.28 + }, + { + "time": 0.5, + "angle": 60.61 + }, + { + "time": 0.7, + "angle": -18.87, + "curve": "stepped" + }, + { + "time": 2.2333, + "angle": -18.87 + }, + { + "time": 2.7, + "angle": -1.95, + "curve": "stepped" + }, + { + "time": 4.6666, + "angle": -1.95 + }, + { + "time": 4.8, + "angle": 34.55 + }, + { + "time": 4.9333, + "angle": -18.74 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_fist": { + "rotate": [ + { + "time": 0, + "angle": -2.33 + }, + { + "time": 0.2666, + "angle": 26.34 + }, + { + "time": 0.7, + "angle": -6.07, + "curve": "stepped" + }, + { + "time": 2.2333, + "angle": -6.07 + }, + { + "time": 2.7, + "angle": 5.72, + "curve": "stepped" + }, + { + "time": 4.6666, + "angle": 5.72 + }, + { + "time": 4.8666, + "angle": -6.52 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_bracer": { + "rotate": [ + { + "time": 0, + "angle": 10.36 + }, + { + "time": 0.1333, + "angle": -23.12 + }, + { + "time": 0.2666, + "angle": -23.11 + }, + { + "time": 0.4, + "angle": -23.16, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": -23.16 + }, + { + "time": 0.5666, + "angle": -23.2, + "curve": "stepped" + }, + { + "time": 0.9333, + "angle": -23.2, + "curve": "stepped" + }, + { + "time": 2.2333, + "angle": -23.2 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": -2.78 + }, + { + "time": 0.1333, + "angle": -24.58 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "hip": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 0.9333, + "angle": 0, + "curve": "stepped" + }, + { + "time": 2.2333, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + }, + { + "time": 0.2, + "x": 50.34, + "y": 151.73 + }, + { + "time": 0.4, + "x": 5.16, + "y": -119.64, + "curve": "stepped" + }, + { + "time": 0.4333, + "x": 5.16, + "y": -119.64 + }, + { + "time": 0.5, + "x": 50.34, + "y": -205.18, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 50.34, + "y": -205.18, + "curve": "stepped" + }, + { + "time": 0.9333, + "x": 50.34, + "y": -205.18, + "curve": "stepped" + }, + { + "time": 2.2333, + "x": 50.34, + "y": -205.18 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.1333, + "angle": 8.47 + }, + { + "time": 0.2666, + "angle": 115.95 + }, + { + "time": 0.4, + "angle": 180.66, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": 180.66 + }, + { + "time": 0.5, + "angle": 155.22 + }, + { + "time": 0.6, + "angle": 97.73 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.1333, + "angle": -27.37 + }, + { + "time": 0.2666, + "angle": -35.1 + }, + { + "time": 0.4, + "angle": -37.72, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": -37.72 + }, + { + "time": 0.5, + "angle": -40.06 + }, + { + "time": 0.6, + "angle": 2.76 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_thigh": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.1333, + "angle": 70.45 + }, + { + "time": 0.2666, + "angle": 155.34 + }, + { + "time": 0.4, + "angle": 214.31, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": 214.31 + }, + { + "time": 0.5, + "angle": 169.67 + }, + { + "time": 0.8, + "angle": 83.27 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_shin": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.1333, + "angle": 18.93 + }, + { + "time": 0.2666, + "angle": -21.04 + }, + { + "time": 0.4, + "angle": -29.93, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": -29.93 + }, + { + "time": 0.5, + "angle": -16.79 + }, + { + "time": 0.8, + "angle": 7.77 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_foot": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.1333, + "angle": -11.62 + }, + { + "time": 0.4, + "angle": -45.59, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": -45.59 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_foot": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.4, + "angle": -48.75, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": -48.75 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "gunTip": { + "rotate": [ + { + "time": 0, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + } + } + }, + "hit": { + "slots": { + "front_fist": { + "attachment": [ + { + "time": 0.1666, + "name": "front_fist_open" + } + ] + }, + "mouth": { + "attachment": [ + { + "time": 0, + "name": "mouth_grind" + }, + { + "time": 0.3333, + "name": "mouth_smile" + } + ] + } + }, + "bones": { + "torso": { + "rotate": [ + { + "time": 0, + "angle": 56.42 + }, + { + "time": 0.3333, + "angle": 8.89 + } + ] + }, + "neck": { + "rotate": [ + { + "time": 0, + "angle": 35.38 + }, + { + "time": 0.2333, + "angle": 24.94 + } + ] + }, + "head": { + "rotate": [ + { + "time": 0, + "angle": 10.21 + }, + { + "time": 0.3333, + "angle": -41.3 + } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -310.92, + "curve": [ + 0.38, + 0.53, + 0.744, + 1 + ] + }, + { + "time": 0.3333, + "angle": -112.59 + } + ], + "translate": [ + { + "time": 0, + "x": 7.23, + "y": -13.13 + } + ] + }, + "front_bracer": { + "rotate": [ + { + "time": 0, + "angle": 36.99 + }, + { + "time": 0.3333, + "angle": -28.64 + } + ] + }, + "front_fist": { + "rotate": [ + { + "time": 0, + "angle": 13.59 + }, + { + "time": 0.3333, + "angle": 7.55 + } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 271.02, + "curve": [ + 0.342, + 0.36, + 0.68, + 0.71 + ] + }, + { + "time": 0.3333, + "angle": -15.84 + } + ], + "translate": [ + { + "time": 0.3333, + "x": -0.09, + "y": -0.46 + } + ] + }, + "rear_bracer": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.3333, + "angle": 40.03 + } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": 14.98 + }, + { + "time": 0.3333, + "angle": 39.75 + } + ] + }, + "hip": { + "translate": [ + { + "time": 0, + "x": -75.54, + "y": -78.03 + }, + { + "time": 0.2333, + "x": -36.48, + "y": 12.42 + }, + { + "time": 0.3333, + "x": -36.48, + "y": -2.99 + } + ] + }, + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 90.94, + "curve": [ + 0.227, + 0.26, + 0.432, + 1 + ] + }, + { + "time": 0.3333, + "angle": 32.02 + } + ], + "translate": [ + { + "time": 0, + "x": 7.21, + "y": -4 + } + ] + }, + "rear_thigh": { + "rotate": [ + { + "time": 0, + "angle": 40.51, + "curve": [ + 0.295, + 0.3, + 0.59, + 0.99 + ] + }, + { + "time": 0.3333, + "angle": 90.76 + } + ], + "translate": [ + { + "time": 0, + "x": -1.96, + "y": -0.32 + } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": -96.62 + }, + { + "time": 0.3333, + "angle": -15.13 + } + ] + }, + "rear_shin": { + "rotate": [ + { + "time": 0, + "angle": 7.99 + }, + { + "time": 0.3333, + "angle": -67.54 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_foot": { + "rotate": [ + { + "time": 0, + "angle": 5.4 + }, + { + "time": 0.3333, + "angle": -16.26 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_foot": { + "rotate": [ + { + "time": 0, + "angle": 2.67 + }, + { + "time": 0.3333, + "angle": -10.31 + } + ] + } + } + }, + "idle": { + "slots": { + "front_fist": { + "attachment": [ + { + "time": 0, + "name": "front_fist_open" + }, + { + "time": 1.6666, + "name": "front_fist_open" + } + ] + }, + "mouth": { + "attachment": [ + { + "time": 0, + "name": "mouth_smile" + }, + { + "time": 1.6666, + "name": "mouth_smile" + } + ] + } + }, + "bones": { + "torso": { + "rotate": [ + { + "time": 0, + "angle": -5.61, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.8333, + "angle": -9.65, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.6666, + "angle": -5.61 + } + ], + "translate": [ + { + "time": 0, + "x": -6.49, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -59.85, + "curve": [ + 0.492, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "angle": -54.31, + "curve": [ + 0.324, + 0.11, + 0.75, + 1 + ] + }, + { + "time": 1.6666, + "angle": -59.85 + } + ], + "translate": [ + { + "time": 0, + "x": -7.12, + "y": -8.23 + }, + { + "time": 0.6666, + "x": -6.32, + "y": -8.3 + }, + { + "time": 1.6666, + "x": -7.12, + "y": -8.23 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 62.41, + "curve": [ + 0.504, + 0.02, + 0.75, + 1 + ] + }, + { + "time": 0.7333, + "angle": 43.83, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.6666, + "angle": 62.41 + } + ], + "translate": [ + { + "time": 0, + "x": -1.83, + "y": -16.78 + }, + { + "time": 0.6666, + "x": 0.34, + "y": -15.23 + }, + { + "time": 1.6666, + "x": -1.83, + "y": -16.78 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "neck": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.6666, + "angle": 2.39 + }, + { + "time": 1.6666, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": -1.88, + "y": -4.76, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": -1.88, + "y": -4.76 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 0.64, + "curve": [ + 0.235, + 0, + 0.558, + 0.99 + ] + }, + { + "time": 0.6666, + "angle": -4.34, + "curve": [ + 0.594, + 0, + 0.653, + 1 + ] + }, + { + "time": 1.6666, + "angle": 0.64 + } + ], + "translate": [ + { + "time": 0, + "x": -13.39, + "y": 6.69, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": -13.39, + "y": 6.69 + } + ], + "scale": [ + { + "time": 0, + "x": 0.896, + "y": 1, + "curve": [ + 0.235, + 0, + 0.558, + 0.99 + ] + }, + { + "time": 0.6666, + "x": 0.825, + "y": 1, + "curve": [ + 0.594, + 0, + 0.653, + 1 + ] + }, + { + "time": 1.6666, + "x": 0.896, + "y": 1 + } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": -19.28, + "curve": "stepped" + }, + { + "time": 1.6666, + "angle": -19.28 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ + 0.235, + 0, + 0.558, + 0.99 + ] + }, + { + "time": 0.6666, + "x": 0.994, + "y": 1, + "curve": [ + 0.594, + 0, + 0.653, + 1 + ] + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "rear_thigh": { + "rotate": [ + { + "time": 0, + "angle": 30.5, + "curve": [ + 0.235, + 0, + 0.558, + 0.99 + ] + }, + { + "time": 0.6666, + "angle": 40.15, + "curve": [ + 0.594, + 0, + 0.653, + 1 + ] + }, + { + "time": 1.6666, + "angle": 30.5 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "rear_shin": { + "rotate": [ + { + "time": 0, + "angle": -23.83, + "curve": [ + 0.235, + 0, + 0.558, + 0.99 + ] + }, + { + "time": 0.6666, + "angle": -43.77, + "curve": [ + 0.594, + 0, + 0.653, + 1 + ] + }, + { + "time": 1.6666, + "angle": -23.83 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "front_foot": { + "rotate": [ + { + "time": 0, + "angle": 5.13, + "curve": [ + 0.235, + 0, + 0.558, + 0.99 + ] + }, + { + "time": 0.6666, + "angle": 10.04, + "curve": [ + 0.594, + 0, + 0.653, + 1 + ] + }, + { + "time": 1.6666, + "angle": 5.13 + } + ], + "scale": [ + { + "time": 0, + "x": 0.755, + "y": 1.309, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 0.755, + "y": 1.309 + } + ] + }, + "hip": { + "translate": [ + { + "time": 0, + "x": -6.63, + "y": -23.01, + "curve": [ + 0.235, + 0, + 0.558, + 0.99 + ] + }, + { + "time": 0.6666, + "x": 6.27, + "y": -35, + "curve": [ + 0.594, + 0, + 0.653, + 1 + ] + }, + { + "time": 1.6666, + "x": -6.63, + "y": -23.01 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "rear_foot": { + "rotate": [ + { + "time": 0, + "angle": -7.34, + "curve": [ + 0.235, + 0, + 0.558, + 0.99 + ] + }, + { + "time": 0.6666, + "angle": 3.85, + "curve": [ + 0.594, + 0, + 0.653, + 1 + ] + }, + { + "time": 1.6666, + "angle": -7.34 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "rear_bracer": { + "rotate": [ + { + "time": 0, + "angle": -17.16, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "angle": 12.52, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.6666, + "angle": -17.16 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "head": { + "rotate": [ + { + "time": 0, + "angle": -5.51, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "angle": -3.12, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.6666, + "angle": -5.51 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "front_bracer": { + "rotate": [ + { + "time": 0, + "angle": 45.46, + "curve": [ + 0.492, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "angle": 41.33, + "curve": [ + 0.32, + 0.1, + 0.736, + 0.91 + ] + }, + { + "time": 1.6666, + "angle": 45.46 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "angle": -15.59, + "curve": [ + 0.732, + 0, + 0.769, + 0.99 + ] + }, + { + "time": 1.6666, + "angle": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "front_fist": { + "rotate": [ + { + "time": 0, + "angle": -6.84, + "curve": [ + 0.492, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "angle": -14.63, + "curve": [ + 0.324, + 0.11, + 0.75, + 1 + ] + }, + { + "time": 1.6666, + "angle": -6.84 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "x": 0.689, + "y": 1.1, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + } + } + }, + "jump": { + "slots": { + "front_fist": { + "attachment": [ + { + "time": 0, + "name": "front_fist_open" + }, + { + "time": 0.2, + "name": "front_fist_closed" + }, + { + "time": 0.6666, + "name": "front_fist_open" + } + ] + }, + "mouth": { + "attachment": [ + { + "time": 0, + "name": "mouth_grind" + } + ] + }, + "torso": { + "attachment": [ + { + "time": 0, + "name": "torso" + } + ] + } + }, + "bones": { + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 91.53, + "curve": [ + 0.278, + 0.46, + 0.763, + 1 + ] + }, + { + "time": 0.2, + "angle": -35.83, + "curve": [ + 0.761, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.4333, + "angle": 127.74 + }, + { + "time": 0.7333, + "angle": 48.18, + "curve": [ + 0.227, + 0.26, + 0.432, + 1 + ] + }, + { + "time": 0.8333, + "angle": 25.35 + }, + { + "time": 0.9333, + "angle": 45.37 + }, + { + "time": 1.0333, + "angle": 38.12 + }, + { + "time": 1.1333, + "angle": 25.35 + }, + { + "time": 1.3333, + "angle": 91.53 + } + ], + "translate": [ + { + "time": 0, + "x": -2.56, + "y": 5.77 + }, + { + "time": 0.4333, + "x": 8.3, + "y": 7.98 + }, + { + "time": 0.7333, + "x": 7.21, + "y": -4 + }, + { + "time": 1.3333, + "x": -2.56, + "y": 5.77 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "torso": { + "rotate": [ + { + "time": 0, + "angle": -42.63 + }, + { + "time": 0.2, + "angle": -5.74 + }, + { + "time": 0.4333, + "angle": -50.76 + }, + { + "time": 0.7333, + "angle": 1.89 + }, + { + "time": 0.8333, + "angle": 11.58 + }, + { + "time": 0.9666, + "angle": -1.89 + }, + { + "time": 1.1333, + "angle": 11.58 + }, + { + "time": 1.3333, + "angle": -42.63 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_thigh": { + "rotate": [ + { + "time": 0, + "angle": -26.32 + }, + { + "time": 0.2, + "angle": 121.44 + }, + { + "time": 0.4333, + "angle": 70.54 + }, + { + "time": 0.7333, + "angle": 79.89, + "curve": [ + 0.295, + 0.3, + 0.59, + 0.99 + ] + }, + { + "time": 0.8333, + "angle": 99.12 + }, + { + "time": 0.9333, + "angle": 74.05 + }, + { + "time": 1.0333, + "angle": 98.04 + }, + { + "time": 1.1333, + "angle": 99.12 + }, + { + "time": 1.3333, + "angle": -26.32 + } + ], + "translate": [ + { + "time": 0, + "x": -0.56, + "y": -0.32 + }, + { + "time": 0.4333, + "x": -8.5, + "y": 10.58 + }, + { + "time": 0.7333, + "x": -1.96, + "y": -0.32 + }, + { + "time": 1.3333, + "x": -0.56, + "y": -0.32 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_shin": { + "rotate": [ + { + "time": 0, + "angle": -78.69 + }, + { + "time": 0.4333, + "angle": -55.56 + }, + { + "time": 0.7333, + "angle": -62.84 + }, + { + "time": 0.8333, + "angle": -80.74 + }, + { + "time": 0.9333, + "angle": -41.12 + }, + { + "time": 1.0333, + "angle": -77.4 + }, + { + "time": 1.1333, + "angle": -80.74 + }, + { + "time": 1.3333, + "angle": -78.69 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.7333, + "x": 1, + "y": 1 + } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -22.61 + }, + { + "time": 0.2, + "angle": -246.68 + }, + { + "time": 0.6, + "angle": 11.28, + "curve": [ + 0.246, + 0, + 0.633, + 0.53 + ] + }, + { + "time": 0.7333, + "angle": -57.45, + "curve": [ + 0.38, + 0.53, + 0.744, + 1 + ] + }, + { + "time": 0.8666, + "angle": -112.59 + }, + { + "time": 0.9333, + "angle": -102.17 + }, + { + "time": 1.0333, + "angle": -108.61 + }, + { + "time": 1.1333, + "angle": -112.59 + }, + { + "time": 1.3333, + "angle": -22.61 + } + ], + "translate": [ + { + "time": 0, + "x": 6.08, + "y": 7.15 + }, + { + "time": 0.2, + "x": 7.23, + "y": -13.13, + "curve": "stepped" + }, + { + "time": 0.7333, + "x": 7.23, + "y": -13.13 + }, + { + "time": 1.3333, + "x": 6.08, + "y": 7.15 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_bracer": { + "rotate": [ + { + "time": 0, + "angle": 66.46 + }, + { + "time": 0.2, + "angle": 42.39 + }, + { + "time": 0.4333, + "angle": 26.06 + }, + { + "time": 0.7333, + "angle": 13.28 + }, + { + "time": 0.8666, + "angle": -28.64 + }, + { + "time": 0.9333, + "angle": -22.31 + }, + { + "time": 1.0333, + "angle": -35.39 + }, + { + "time": 1.1333, + "angle": -28.64 + }, + { + "time": 1.3333, + "angle": 66.46 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_fist": { + "rotate": [ + { + "time": 0, + "angle": -28.43 + }, + { + "time": 0.4333, + "angle": -45.6 + }, + { + "time": 0.7333, + "angle": -53.66 + }, + { + "time": 0.8666, + "angle": 7.55 + }, + { + "time": 0.9333, + "angle": 31.15 + }, + { + "time": 1.0333, + "angle": -32.58 + }, + { + "time": 1.1333, + "angle": 7.55 + }, + { + "time": 1.3333, + "angle": -28.43 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 39.68 + }, + { + "time": 0.2, + "angle": 276.57 + }, + { + "time": 0.3, + "angle": 17.73 + }, + { + "time": 0.4333, + "angle": 83.38 + }, + { + "time": 0.6, + "angle": -4.71, + "curve": [ + 0.246, + 0, + 0.633, + 0.53 + ] + }, + { + "time": 0.7333, + "angle": -69.63, + "curve": [ + 0.342, + 0.36, + 0.68, + 0.71 + ] + }, + { + "time": 0.7666, + "angle": 321.47, + "curve": [ + 0.333, + 0.33, + 0.667, + 0.66 + ] + }, + { + "time": 0.8, + "angle": 33.7, + "curve": [ + 0.358, + 0.64, + 0.693, + 1 + ] + }, + { + "time": 0.8666, + "angle": 34.56 + }, + { + "time": 1.0333, + "angle": 71.96 + }, + { + "time": 1.1333, + "angle": 34.56 + }, + { + "time": 1.3333, + "angle": 39.68 + } + ], + "translate": [ + { + "time": 0, + "x": -3.1, + "y": -4.86 + }, + { + "time": 0.2, + "x": 23.33, + "y": 49.07 + }, + { + "time": 0.4333, + "x": 20.78, + "y": 40.21 + }, + { + "time": 1.3333, + "x": -3.1, + "y": -4.86 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_bracer": { + "rotate": [ + { + "time": 0, + "angle": 29.66 + }, + { + "time": 0.2, + "angle": 45.06 + }, + { + "time": 0.4333, + "angle": -4.34 + }, + { + "time": 0.7666, + "angle": 61.68 + }, + { + "time": 0.8, + "angle": 82.59 + }, + { + "time": 0.8666, + "angle": 80.06 + }, + { + "time": 1.0333, + "angle": 57.56 + }, + { + "time": 1.1333, + "angle": 80.06 + }, + { + "time": 1.3333, + "angle": 29.66 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "neck": { + "rotate": [ + { + "time": 0, + "angle": 24.9 + }, + { + "time": 0.2, + "angle": 16.31 + }, + { + "time": 0.4333, + "angle": 7.44 + }, + { + "time": 0.7333, + "angle": -20.35 + }, + { + "time": 0.8333, + "angle": -0.69, + "curve": "stepped" + }, + { + "time": 1.1333, + "angle": -0.69 + }, + { + "time": 1.3333, + "angle": 24.9 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "head": { + "rotate": [ + { + "time": 0, + "angle": 24.92 + }, + { + "time": 0.2, + "angle": 10.36 + }, + { + "time": 0.4333, + "angle": 28.65 + }, + { + "time": 0.7333, + "angle": -2.65 + }, + { + "time": 0.8333, + "angle": -28.94, + "curve": "stepped" + }, + { + "time": 1.1333, + "angle": -28.94 + }, + { + "time": 1.3333, + "angle": 24.92 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "hip": { + "rotate": [ + { + "time": 0, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": -34.51, + "y": -78.62, + "curve": [ + 0.232, + 1, + 0.75, + 1 + ] + }, + { + "time": 0.2, + "x": -34.51, + "y": 182.5, + "curve": [ + 0.232, + 0.48, + 0.598, + 0.79 + ] + }, + { + "time": 0.7666, + "x": -34.51, + "y": 596.22, + "curve": [ + 0.329, + 0.17, + 0.66, + 0.21 + ] + }, + { + "time": 1.1333, + "x": -34.51, + "y": 2.49 + }, + { + "time": 1.3333, + "x": -34.51, + "y": -78.62 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": -90.62, + "curve": [ + 0.416, + 0.54, + 0.743, + 1 + ] + }, + { + "time": 0.2, + "angle": -10.52, + "curve": [ + 0.644, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.4333, + "angle": -127.72 + }, + { + "time": 0.7333, + "angle": -19.91 + }, + { + "time": 0.8333, + "angle": -5.16 + }, + { + "time": 0.9333, + "angle": -35.06 + }, + { + "time": 1.0333, + "angle": -43.97 + }, + { + "time": 1.1333, + "angle": -5.16 + }, + { + "time": 1.3333, + "angle": -90.62 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_foot": { + "rotate": [ + { + "time": 0, + "angle": -0.79 + }, + { + "time": 0.0333, + "angle": 16.27 + }, + { + "time": 0.0666, + "angle": 23.52 + }, + { + "time": 0.1, + "angle": 21.02 + }, + { + "time": 0.1333, + "angle": 10.92 + }, + { + "time": 0.2, + "angle": -38.45 + }, + { + "time": 0.4333, + "angle": 6.62 + }, + { + "time": 0.7333, + "angle": -11.51 + }, + { + "time": 1.0333, + "angle": -22.91 + }, + { + "time": 1.3333, + "angle": -0.79 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_foot": { + "rotate": [ + { + "time": 0, + "angle": -12.77 + }, + { + "time": 0.2, + "angle": 17.05 + }, + { + "time": 0.4333, + "angle": 19.45 + }, + { + "time": 0.7333, + "angle": 2.67 + }, + { + "time": 1.0333, + "angle": -28.49 + }, + { + "time": 1.3333, + "angle": -12.77 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": 6.18 + }, + { + "time": 0.2, + "angle": 30.81 + }, + { + "time": 0.4333, + "angle": 13.25 + }, + { + "time": 0.7333, + "angle": 14.98 + }, + { + "time": 0.7666, + "angle": 25.64 + }, + { + "time": 0.8, + "angle": 20.62 + }, + { + "time": 0.8666, + "angle": 64.52 + }, + { + "time": 1.0333, + "angle": 8.59 + }, + { + "time": 1.1333, + "angle": 64.52 + }, + { + "time": 1.3333, + "angle": 6.18 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + } + } + }, + "run": { + "slots": { + "front_fist": { + "attachment": [ + { + "time": 0, + "name": "front_fist_closed" + } + ] + }, + "mouth": { + "attachment": [ + { + "time": 0, + "name": "mouth_grind" + } + ] + }, + "torso": { + "attachment": [ + { + "time": 0, + "name": "torso" + } + ] + } + }, + "bones": { + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 42.05, + "curve": [ + 0.195, + 0.86, + 0.75, + 1 + ] + }, + { + "time": 0.0666, + "angle": 46.07 + }, + { + "time": 0.1333, + "angle": -20.28 + }, + { + "time": 0.2, + "angle": -27.23 + }, + { + "time": 0.2666, + "angle": -47.16 + }, + { + "time": 0.3333, + "angle": -39.79 + }, + { + "time": 0.4, + "angle": -25.86 + }, + { + "time": 0.4666, + "angle": 14.35 + }, + { + "time": 0.5333, + "angle": 55.62 + }, + { + "time": 0.6, + "angle": 69.65 + }, + { + "time": 0.6666, + "angle": 86.4 + }, + { + "time": 0.7333, + "angle": 65.87 + }, + { + "time": 0.8, + "angle": 42.05 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + }, + { + "time": 0.0333, + "x": -5.79, + "y": 11.15 + }, + { + "time": 0.0666, + "x": -5.13, + "y": 11.55 + }, + { + "time": 0.1333, + "x": -7.7, + "y": 8.98 + }, + { + "time": 0.5333, + "x": -1.26, + "y": 3.83 + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "torso": { + "rotate": [ + { + "time": 0, + "angle": -39.7 + }, + { + "time": 0.2, + "angle": -57.29 + }, + { + "time": 0.4, + "angle": -39.7 + }, + { + "time": 0.6, + "angle": -57.29 + }, + { + "time": 0.8, + "angle": -39.7 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.4, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_thigh": { + "rotate": [ + { + "time": 0, + "angle": -56.59 + }, + { + "time": 0.0666, + "angle": -21.57 + }, + { + "time": 0.1333, + "angle": 27.95 + }, + { + "time": 0.2, + "angle": 42.42 + }, + { + "time": 0.2666, + "angle": 62.37 + }, + { + "time": 0.3333, + "angle": 45.42 + }, + { + "time": 0.4, + "angle": 15.67 + }, + { + "time": 0.4666, + "angle": 28.22 + }, + { + "time": 0.5333, + "angle": -38.62 + }, + { + "time": 0.6, + "angle": -53.26 + }, + { + "time": 0.6666, + "angle": -79.31 + }, + { + "time": 0.7333, + "angle": -86.47 + }, + { + "time": 0.8, + "angle": -56.59 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + }, + { + "time": 0.4, + "x": -6.76, + "y": -3.86 + }, + { + "time": 0.4333, + "x": -15.85, + "y": 7.28 + }, + { + "time": 0.4666, + "x": -13.04, + "y": 4.04 + }, + { + "time": 0.5, + "x": -10.24, + "y": 7.11 + }, + { + "time": 0.5333, + "x": -9.01, + "y": -5.15 + }, + { + "time": 0.6666, + "x": -23.18, + "y": -2.57 + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_shin": { + "rotate": [ + { + "time": 0, + "angle": -74 + }, + { + "time": 0.0666, + "angle": -83.38 + }, + { + "time": 0.1333, + "angle": -106.69 + }, + { + "time": 0.2, + "angle": -66.01 + }, + { + "time": 0.2666, + "angle": -55.22 + }, + { + "time": 0.3333, + "angle": -24.8 + }, + { + "time": 0.4, + "angle": 18.44, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.4666, + "angle": -56.65 + }, + { + "time": 0.5333, + "angle": -11.94, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "angle": -41.26 + }, + { + "time": 0.7333, + "angle": -43.6 + }, + { + "time": 0.8, + "angle": -74 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -89.36 + }, + { + "time": 0.0666, + "angle": -95.67 + }, + { + "time": 0.1333, + "angle": -22 + }, + { + "time": 0.2, + "angle": -316.04 + }, + { + "time": 0.2666, + "angle": -274.94 + }, + { + "time": 0.3333, + "angle": -273.74 + }, + { + "time": 0.4, + "angle": -272.09 + }, + { + "time": 0.4666, + "angle": -264.89 + }, + { + "time": 0.5333, + "angle": -320.09 + }, + { + "time": 0.6, + "angle": -50.83 + }, + { + "time": 0.6666, + "angle": -81.72 + }, + { + "time": 0.7333, + "angle": -83.92 + }, + { + "time": 0.8, + "angle": -89.36 + } + ], + "translate": [ + { + "time": 0, + "x": 6.24, + "y": 10.05 + }, + { + "time": 0.2666, + "x": 4.95, + "y": -13.13 + }, + { + "time": 0.6, + "x": -2.43, + "y": 1.94 + }, + { + "time": 0.8, + "x": 6.24, + "y": 10.05 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_bracer": { + "rotate": [ + { + "time": 0, + "angle": 33.43 + }, + { + "time": 0.0666, + "angle": 20.53 + }, + { + "time": 0.1333, + "angle": 15.26 + }, + { + "time": 0.2, + "angle": 19.28 + }, + { + "time": 0.2666, + "angle": 22.62 + }, + { + "time": 0.3333, + "angle": 37.29 + }, + { + "time": 0.4, + "angle": 41.53 + }, + { + "time": 0.4666, + "angle": 31.73 + }, + { + "time": 0.5333, + "angle": 67.45 + }, + { + "time": 0.6666, + "angle": 39.77 + }, + { + "time": 0.7333, + "angle": 30.95 + }, + { + "time": 0.8, + "angle": 33.43 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_fist": { + "rotate": [ + { + "time": 0, + "angle": -19.75 + }, + { + "time": 0.0666, + "angle": -37.11 + }, + { + "time": 0.1333, + "angle": -50.79 + }, + { + "time": 0.2666, + "angle": -12.69 + }, + { + "time": 0.3333, + "angle": 3.01 + }, + { + "time": 0.4333, + "angle": 12.05 + }, + { + "time": 0.5333, + "angle": 13.25 + }, + { + "time": 0.8, + "angle": -19.75 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 68.68 + }, + { + "time": 0.0666, + "angle": 73.89 + }, + { + "time": 0.1333, + "angle": -9.64 + }, + { + "time": 0.2, + "angle": 284.27 + }, + { + "time": 0.2666, + "angle": 283.29 + }, + { + "time": 0.3333, + "angle": 278.28 + }, + { + "time": 0.4, + "angle": 271.02 + }, + { + "time": 0.4666, + "angle": 263.2 + }, + { + "time": 0.5333, + "angle": 314.25 + }, + { + "time": 0.6, + "angle": 16.83 + }, + { + "time": 0.6666, + "angle": 70.35 + }, + { + "time": 0.7333, + "angle": 73.53 + }, + { + "time": 0.8, + "angle": 68.68 + } + ], + "translate": [ + { + "time": 0, + "x": -2.57, + "y": -8.89 + }, + { + "time": 0.1333, + "x": -4.68, + "y": 7.2 + }, + { + "time": 0.2, + "x": 21.73, + "y": 51.17 + }, + { + "time": 0.6, + "x": 4.33, + "y": 2.05 + }, + { + "time": 0.8, + "x": -2.57, + "y": -8.89 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_bracer": { + "rotate": [ + { + "time": 0, + "angle": 31.04 + }, + { + "time": 0.0666, + "angle": 28.28 + }, + { + "time": 0.1333, + "angle": 49.36 + }, + { + "time": 0.2, + "angle": 59.37 + }, + { + "time": 0.2666, + "angle": 8.56 + }, + { + "time": 0.3333, + "angle": 9.38 + }, + { + "time": 0.4, + "angle": 11.51 + }, + { + "time": 0.4666, + "angle": 7.22 + }, + { + "time": 0.5333, + "angle": -18.44 + }, + { + "time": 0.6, + "angle": 11.44 + }, + { + "time": 0.6666, + "angle": 9.99 + }, + { + "time": 0.7333, + "angle": 8.28 + }, + { + "time": 0.8, + "angle": 31.04 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "neck": { + "rotate": [ + { + "time": 0, + "angle": 11.03 + }, + { + "time": 0.2, + "angle": 13.58 + }, + { + "time": 0.4, + "angle": 11.03 + }, + { + "time": 0.6, + "angle": 13.58 + }, + { + "time": 0.8, + "angle": 11.03 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.4, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "head": { + "rotate": [ + { + "time": 0, + "angle": 11.03 + }, + { + "time": 0.1, + "angle": 12.34 + }, + { + "time": 0.2, + "angle": 25.55 + }, + { + "time": 0.4, + "angle": 11.03 + }, + { + "time": 0.5, + "angle": 12.34 + }, + { + "time": 0.6, + "angle": 25.55 + }, + { + "time": 0.8, + "angle": 11.03 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.4, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "hip": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": -62.47, + "y": -23.1 + }, + { + "time": 0.0666, + "x": -62.47, + "y": -38.51, + "curve": [ + 0.244, + 0.04, + 0.75, + 1 + ] + }, + { + "time": 0.2666, + "x": -62.47, + "y": 22.28, + "curve": [ + 0.17, + 0.52, + 0.75, + 1 + ] + }, + { + "time": 0.4, + "x": -62.47, + "y": -23.1 + }, + { + "time": 0.4333, + "x": -62.47, + "y": -24.59 + }, + { + "time": 0.4666, + "x": -62.47, + "y": -43.29, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "x": -62.47, + "y": 22.28 + }, + { + "time": 0.8, + "x": -62.47, + "y": -23.1 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ + 0.481, + 0.01, + 0.75, + 1 + ] + }, + { + "time": 0.0666, + "angle": -64.42 + }, + { + "time": 0.1333, + "angle": -20.59, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.2666, + "angle": -62.51 + }, + { + "time": 0.3333, + "angle": -79.74 + }, + { + "time": 0.4, + "angle": -78.28 + }, + { + "time": 0.4666, + "angle": -118.96, + "curve": [ + 0.93, + 0, + 0.952, + 0.95 + ] + }, + { + "time": 0.6, + "angle": -88.95 + }, + { + "time": 0.6666, + "angle": -79.09 + }, + { + "time": 0.7333, + "angle": -47.77 + }, + { + "time": 0.8, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_foot": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.0333, + "angle": -21.13, + "curve": [ + 0.121, + 0.23, + 0.75, + 1 + ] + }, + { + "time": 0.0666, + "angle": 17.64 + }, + { + "time": 0.1, + "angle": 29.92 + }, + { + "time": 0.1333, + "angle": 16.44 + }, + { + "time": 0.2, + "angle": -29.22 + }, + { + "time": 0.2666, + "angle": -1.61 + }, + { + "time": 0.3333, + "angle": -10.22 + }, + { + "time": 0.4666, + "angle": -15.99 + }, + { + "time": 0.6, + "angle": 9.03 + }, + { + "time": 0.7333, + "angle": 17.32 + }, + { + "time": 0.8, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_foot": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.0666, + "angle": -12.04 + }, + { + "time": 0.1333, + "angle": -0.87 + }, + { + "time": 0.2, + "angle": 25.81 + }, + { + "time": 0.2666, + "angle": 4.71 + }, + { + "time": 0.4, + "angle": 18.09, + "curve": [ + 0.281, + 0.73, + 0.75, + 1 + ] + }, + { + "time": 0.4333, + "angle": -1.7 + }, + { + "time": 0.4666, + "angle": 27.12 + }, + { + "time": 0.5, + "angle": 38.83 + }, + { + "time": 0.5333, + "angle": 30.76 + }, + { + "time": 0.5666, + "angle": -20.49 + }, + { + "time": 0.6, + "angle": -30.8 + }, + { + "time": 0.6666, + "angle": -1.31 + }, + { + "time": 0.8, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.1333, + "angle": 24.72 + }, + { + "time": 0.5, + "angle": -11.87 + }, + { + "time": 0.8, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + } + }, + "events": [ + { + "time": 0, + "name": "footstep" + }, + { + "time": 0.4, + "name": "footstep", + "int": 1 + } + ] + }, + "shoot": { + "slots": { + "front_fist": { + "attachment": [ + { + "time": 0.1333, + "name": "front_fist_closed" + }, + { + "time": 0.4, + "name": "front_fist_open" + } + ] + }, + "mouth": { + "attachment": [ + { + "time": 0.1333, + "name": "mouth_grind" + } + ] + }, + "muzzle": { + "attachment": [ + { + "time": 0.1333, + "name": "muzzle" + }, + { + "time": 0.2666, + "name": null + } + ], + "color": [ + { + "time": 0.1333, + "color": "ffffff00", + "curve": [ + 0.118, + 0.99, + 0.75, + 1 + ] + }, + { + "time": 0.1666, + "color": "ffffffff", + "curve": [ + 0.821, + 0, + 0.909, + 0.89 + ] + }, + { + "time": 0.2666, + "color": "ffffff00" + } + ] + } + }, + "bones": { + "front_fist": { + "scale": [ + { + "time": 0.1333, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.4, + "x": 1, + "y": 1 + } + ] + }, + "gunTip": { + "translate": [ + { + "time": 0.1333, + "x": 0, + "y": 0 + }, + { + "time": 0.2, + "x": 20.93, + "y": 1.57 + } + ], + "scale": [ + { + "time": 0.1333, + "x": 1, + "y": 1 + }, + { + "time": 0.2, + "x": 1.247, + "y": 1.516 + } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": 1.9 + } + ], + "translate": [ + { + "time": 0, + "x": 7.95, + "y": 5.84, + "curve": [ + 0, + 0.3, + 0.678, + 1 + ] + }, + { + "time": 0.3, + "x": -9.3, + "y": -1.41 + }, + { + "time": 0.4, + "x": 0, + "y": 0 + } + ] + }, + "rear_bracer": { + "rotate": [ + { + "time": 0, + "angle": -30.47 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ + 0, + 0.3, + 0.678, + 1 + ] + }, + { + "time": 0.3, + "x": -5.99, + "y": -3.71 + }, + { + "time": 0.4, + "x": 0, + "y": 0 + } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 62.3 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ + 0, + 0.3, + 0.678, + 1 + ] + }, + { + "time": 0.3, + "x": 2.81, + "y": 11.41 + }, + { + "time": 0.4, + "x": 0, + "y": 0 + } + ] + } + } + }, + "test": { + "slots": { + "front_foot": { + "color": [ + { + "time": 0.6666, + "color": "ffffffff" + }, + { + "time": 1.3333, + "color": "ff0700ff" + } + ] + }, + "gun": { + "color": [ + { + "time": 0, + "color": "ffffffff", + "curve": "stepped" + }, + { + "time": 0.6666, + "color": "ffffffff" + }, + { + "time": 1.3333, + "color": "32ff00ff" + } + ] + }, + "rear_foot": { + "color": [ + { + "time": 0.6666, + "color": "ffffffff" + }, + { + "time": 1.3333, + "color": "ff0700ff" + } + ] + } + }, + "bones": { + "head": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.3333, + "angle": -20.72 + }, + { + "time": 0.6666, + "angle": -32.41 + }, + { + "time": 1, + "angle": -5.3 + }, + { + "time": 1.3333, + "angle": 24.96 + }, + { + "time": 1.6666, + "angle": 15.61 + }, + { + "time": 2, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ + 0.172, + 0.37, + 0.574, + 0.73 + ] + }, + { + "time": 0.1666, + "x": 144.19, + "y": -77.59, + "curve": [ + 0.372, + 0.61, + 0.765, + 1 + ] + }, + { + "time": 0.3333, + "x": 217.61, + "y": -192.63, + "curve": [ + 0.282, + 0, + 0.624, + 0.31 + ] + }, + { + "time": 0.5, + "x": 181.21, + "y": -365.66, + "curve": [ + 0.313, + 0.21, + 0.654, + 0.54 + ] + }, + { + "time": 0.6666, + "x": 20.09, + "y": -500.4, + "curve": [ + 0.147, + 0.27, + 0.75, + 1 + ] + }, + { + "time": 0.8333, + "x": -194.24, + "y": -341.84 + }, + { + "time": 1, + "x": -307.93, + "y": -114 + }, + { + "time": 1.1666, + "x": -330.38, + "y": 121.42, + "curve": [ + 0.25, + 0, + 0.764, + 0.48 + ] + }, + { + "time": 1.3333, + "x": -240.42, + "y": 335.66, + "curve": [ + 0.229, + 0.37, + 0.58, + 0.73 + ] + }, + { + "time": 1.5, + "x": -56.12, + "y": 288.06, + "curve": [ + 0.296, + 0.6, + 0.641, + 1 + ] + }, + { + "time": 1.6666, + "x": 87.63, + "y": 191.33, + "curve": [ + 0.238, + 0, + 0.626, + 0.39 + ] + }, + { + "time": 1.8333, + "x": 60.62, + "y": 95.14, + "curve": [ + 0.41, + 0.26, + 0.803, + 0.62 + ] + }, + { + "time": 2, + "x": 0, + "y": 0 + } + ] + } + }, + "draworder": [ + { + "time": 0.6666, + "offsets": [ + { + "slot": "head", + "offset": -9 + }, + { + "slot": "eye", + "offset": -9 + }, + { + "slot": "mouth", + "offset": -12 + }, + { + "slot": "goggles", + "offset": -12 + } + ] + }, + { + "time": 1.3333 + } + ], + "events": [ + { + "time": 0, + "name": "headPop", + "int": 0, + "float": 0, + "string": "pop.wav" + }, + { + "time": 1, + "name": "headBehind", + "int": 7, + "float": 8, + "string": "animate" + }, + { + "time": 2, + "name": "headAttach", + "int": 0, + "float": 0, + "string": "attach.wav" + } + ] + }, + "walk": { + "slots": { + "front_fist": { + "attachment": [ + { + "time": 0, + "name": "front_fist_closed" + } + ] + }, + "mouth": { + "attachment": [ + { + "time": 0, + "name": "mouth_smile" + } + ] + }, + "torso": { + "attachment": [ + { + "time": 0, + "name": "torso" + } + ] + } + }, + "bones": { + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 15.79 + }, + { + "time": 0.1, + "angle": 27.39 + }, + { + "time": 0.2, + "angle": -7.94 + }, + { + "time": 0.3, + "angle": -16.94 + }, + { + "time": 0.4, + "angle": -28.62 + }, + { + "time": 0.5, + "angle": -19.3 + }, + { + "time": 0.6, + "angle": -3.08 + }, + { + "time": 0.7, + "angle": 29.51 + }, + { + "time": 0.8, + "angle": 15.79 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + }, + { + "time": 0.4, + "x": -1.18, + "y": 0.54 + }, + { + "time": 0.5, + "x": 0.11, + "y": 0.41 + }, + { + "time": 0.6, + "x": 9.48, + "y": 0.27 + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.4, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": 5.12 + }, + { + "time": 0.1, + "angle": -20.87 + }, + { + "time": 0.2, + "angle": 13.37 + }, + { + "time": 0.3, + "angle": 15.98 + }, + { + "time": 0.4, + "angle": 5.94 + }, + { + "time": 0.5, + "angle": -26.76 + }, + { + "time": 0.7, + "angle": -55.44 + }, + { + "time": 0.8, + "angle": 5.12 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_thigh": { + "rotate": [ + { + "time": 0, + "angle": -34.38 + }, + { + "time": 0.1, + "angle": -30.32 + }, + { + "time": 0.2, + "angle": -37.22 + }, + { + "time": 0.3, + "angle": 20.73 + }, + { + "time": 0.4, + "angle": 8.69 + }, + { + "time": 0.5, + "angle": 12.16 + }, + { + "time": 0.6, + "angle": -24.62 + }, + { + "time": 0.7, + "angle": -27.26 + }, + { + "time": 0.8, + "angle": -34.38 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + }, + { + "time": 0.4, + "x": 4.08, + "y": -9.53 + }, + { + "time": 0.5, + "x": 0, + "y": 0 + }, + { + "time": 0.7, + "x": -21.14, + "y": -9.6 + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_shin": { + "rotate": [ + { + "time": 0, + "angle": 14.26 + }, + { + "time": 0.1, + "angle": -17.3 + }, + { + "time": 0.2, + "angle": -12.67 + }, + { + "time": 0.3, + "angle": -58.89 + }, + { + "time": 0.4, + "angle": 15.95 + }, + { + "time": 0.5, + "angle": -9 + }, + { + "time": 0.6, + "angle": 26.06 + }, + { + "time": 0.7, + "angle": 21.85 + }, + { + "time": 0.8, + "angle": 14.26 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + }, + { + "time": 0.1, + "x": 0.951, + "y": 1 + }, + { + "time": 0.5, + "x": 0.975, + "y": 1 + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_foot": { + "rotate": [ + { + "time": 0, + "angle": 10.13 + }, + { + "time": 0.1, + "angle": 12.27 + }, + { + "time": 0.2, + "angle": -2.94 + }, + { + "time": 0.3, + "angle": 6.29 + }, + { + "time": 0.4, + "angle": 13.45 + }, + { + "time": 0.5, + "angle": -3.57 + }, + { + "time": 0.6, + "angle": -0.97 + }, + { + "time": 0.7, + "angle": 2.97 + }, + { + "time": 0.8, + "angle": 10.13 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -23.74 + }, + { + "time": 0.4, + "angle": -320.57 + }, + { + "time": 0.8, + "angle": -23.74 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 11.62 + }, + { + "time": 0.1, + "angle": 19.36 + }, + { + "time": 0.4, + "angle": 345.26 + }, + { + "time": 0.5, + "angle": 343.44 + }, + { + "time": 0.8, + "angle": 11.62 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "torso": { + "rotate": [ + { + "time": 0, + "angle": -12.11 + }, + { + "time": 0.1666, + "angle": -17.16 + }, + { + "time": 0.4, + "angle": -12.11 + }, + { + "time": 0.5666, + "angle": -15.81 + }, + { + "time": 0.8, + "angle": -12.11 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "neck": { + "rotate": [ + { + "time": 0, + "angle": 1.41 + }, + { + "time": 0.2333, + "angle": -3.04 + }, + { + "time": 0.4, + "angle": 1.41 + }, + { + "time": 0.6333, + "angle": -3.04 + }, + { + "time": 0.8, + "angle": 1.41 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.4, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "head": { + "rotate": [ + { + "time": 0, + "angle": 6.97 + }, + { + "time": 0.1666, + "angle": 8.02 + }, + { + "time": 0.2666, + "angle": 12.65 + }, + { + "time": 0.4, + "angle": 6.97 + }, + { + "time": 0.5666, + "angle": 8.02 + }, + { + "time": 0.6666, + "angle": 12.65 + }, + { + "time": 0.8, + "angle": 6.97 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.4, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "hip": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": -23.93, + "y": 3.22, + "curve": [ + 0.518, + 0.03, + 0.807, + 0.61 + ] + }, + { + "time": 0.1, + "x": -23.93, + "y": -9.24, + "curve": [ + 0.135, + 0.33, + 0.601, + 0.99 + ] + }, + { + "time": 0.2, + "x": -23.93, + "y": 4.35, + "curve": [ + 0.204, + 0.68, + 0.75, + 1 + ] + }, + { + "time": 0.3, + "x": -23.93, + "y": 2.38, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.4, + "x": -23.93, + "y": -2.5, + "curve": [ + 0.692, + 0.01, + 0.75, + 1 + ] + }, + { + "time": 0.5, + "x": -23.93, + "y": -10.32, + "curve": [ + 0.235, + 0.77, + 0.75, + 1 + ] + }, + { + "time": 0.6, + "x": -23.93, + "y": 4.35, + "curve": [ + 0.287, + 0.37, + 0.718, + 0.76 + ] + }, + { + "time": 0.7, + "x": -23.93, + "y": 10.34, + "curve": [ + 0.615, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.8, + "x": -23.93, + "y": 3.22 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_bracer": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.4, + "angle": 20.59 + }, + { + "time": 0.8, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_foot": { + "rotate": [ + { + "time": 0, + "angle": 12.49 + }, + { + "time": 0.1, + "angle": -8.34 + }, + { + "time": 0.2, + "angle": -6.17 + }, + { + "time": 0.3, + "angle": -0.75 + }, + { + "time": 0.3333, + "angle": 3.89 + }, + { + "time": 0.4, + "angle": 10.22 + }, + { + "time": 0.5, + "angle": 11.44 + }, + { + "time": 0.6, + "angle": -0.33 + }, + { + "time": 0.7, + "angle": 0.15 + }, + { + "time": 0.8, + "angle": 12.49 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_bracer": { + "rotate": [ + { + "time": 0, + "angle": 3.58 + }, + { + "time": 0.1, + "angle": 5.51 + }, + { + "time": 0.4, + "angle": -22.77 + }, + { + "time": 0.5, + "angle": -9.65 + }, + { + "time": 0.8, + "angle": 3.58 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_fist": { + "rotate": [ + { + "time": 0, + "angle": -15.22 + }, + { + "time": 0.1, + "angle": -51.4 + }, + { + "time": 0.4, + "angle": -39.4 + }, + { + "time": 0.5, + "angle": 19.26 + }, + { + "time": 0.8, + "angle": -15.22 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": -24.06, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.1, + "angle": -10.94, + "curve": [ + 0.381, + 0.54, + 0.742, + 1 + ] + }, + { + "time": 0.4, + "angle": 25.34, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "angle": -27.47, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.8, + "angle": -24.06 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + } + } + } + } + }, + [ + 0 + ] + ] + ], + 0, + 0, + [ + 0 + ], + [ + -1 + ], + [ + 8 + ] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + { + "name": "1", + "rect": [ + 32, + 36, + 152, + 103 + ], + "offset": [ + -6, + -8 + ], + "originalSize": [ + 228, + 159 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 2 + ], + [ + 35 + ] + ], + [ + [ + [ + 10, + "multi-material" + ], + [ + 8, + "multi-material", + [ + -3 + ], + [ + [ + 18, + 45, + -2 + ] + ], + [ + 21, + -1 + ], + [ + 5, + 960, + 640 + ], + [ + 480, + 320, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 11, + "content", + [ + -7, + -8, + -9, + -10, + -11, + -12, + -13, + -14, + -15, + -16, + -17 + ], + [ + [ + 24, + -4 + ], + [ + 22, + 1, + 3, + -5, + [ + 5, + 960, + 803 + ] + ], + [ + 36, + 41, + 220, + -6 + ] + ], + [ + 0, + "98B5382ANHgKQw5BkMsWAq", + 1 + ], + [ + 5, + 960, + 803 + ], + [ + 0, + 0.5, + 1 + ], + [ + 0, + 320, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 15, + "sv", + 1, + [ + -21, + -22 + ], + [ + [ + -18, + [ + 6, + 45, + 240, + 250, + -19 + ], + [ + 25, + 0, + false, + -20, + [ + 23 + ], + 24 + ] + ], + 1, + 4, + 4 + ], + [ + 0, + "b5RxDsAgFOW6xOyBdbz2rI", + 1 + ], + [ + 4, + 4279834905 + ], + [ + 5, + 960, + 640 + ] + ], + [ + 16, + "scrollBar", + 3, + [ + -26 + ], + [ + [ + -23, + [ + 20, + 0, + 37, + 350.07654921020657, + 237, + -24 + ], + [ + 7, + 1, + 0, + -25, + [ + 21 + ], + 22 + ] + ], + 1, + 4, + 4 + ], + [ + 0, + "c2cC2kA1NNeozY+5ZzkcSY", + 1 + ], + [ + 5, + 8, + 640 + ], + [ + 0, + 1, + 0.5 + ], + [ + 480, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 2, + "simple-sprite", + 2, + [ + -28, + -29 + ], + [ + [ + 23, + 1, + 2, + 50, + 50, + 20, + -27, + [ + 5, + 200, + 190 + ] + ] + ], + [ + 0, + "cel07wPiZH1a58pRPiEEb2", + 1 + ], + [ + 5, + 200, + 190 + ], + [ + -380, + -95, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 2, + "sliced-sprite", + 2, + [ + -31, + -32 + ], + [ + [ + 4, + 1, + 2, + 50, + 50, + 20, + true, + -30, + [ + 5, + 200, + 310 + ] + ] + ], + [ + 0, + "4aagUhJlJBRraxu0HdmBV+", + 1 + ], + [ + 5, + 200, + 310 + ], + [ + -180, + -155, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 2, + "tiled-sprite", + 2, + [ + -34, + -35 + ], + [ + [ + 4, + 1, + 2, + 50, + 50, + 20, + true, + -33, + [ + 5, + 200, + 350 + ] + ] + ], + [ + 0, + "0667j7NjxL+ZD1xRXB4KUN", + 1 + ], + [ + 5, + 200, + 350 + ], + [ + 20, + -175, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 2, + "filled-sprite", + 2, + [ + -37, + -38 + ], + [ + [ + 4, + 1, + 2, + 50, + 50, + 20, + true, + -36, + [ + 5, + 200, + 261 + ] + ] + ], + [ + 0, + "dcDdK4fAJH5qn+dxWps1NJ", + 1 + ], + [ + 5, + 200, + 261 + ], + [ + 220, + -130.5, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 2, + "radial-sprite", + 2, + [ + -40, + -41 + ], + [ + [ + 4, + 1, + 2, + 50, + 50, + 20, + true, + -39, + [ + 5, + 200, + 261 + ] + ] + ], + [ + 0, + "eesZ6vPt5AdKXqG0l/MjeY", + 1 + ], + [ + 5, + 200, + 261 + ], + [ + -380, + -480.5, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 2, + "mesh-sprite", + 2, + [ + -43, + -44 + ], + [ + [ + 4, + 1, + 2, + 50, + 50, + 20, + true, + -42, + [ + 5, + 200, + 180 + ] + ] + ], + [ + 0, + "adKwcVQDxJDpRoPxGNaLq0", + 1 + ], + [ + 5, + 200, + 180 + ], + [ + -180, + -440, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 2, + "bitmap-label", + 2, + [ + -46, + -47 + ], + [ + [ + 4, + 1, + 2, + 50, + 50, + 20, + true, + -45, + [ + 5, + 200, + 180 + ] + ] + ], + [ + 0, + "a5HraLpUFIfLWhIikkzaHr", + 1 + ], + [ + 5, + 200, + 180 + ], + [ + 20, + -440, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 2, + "motionsteak", + 2, + [ + -49, + -50 + ], + [ + [ + 4, + 1, + 2, + 50, + 50, + 20, + true, + -48, + [ + 5, + 200, + 170 + ] + ] + ], + [ + 0, + "c1aHWHIBlDo6sJUzzqPK8A", + 1 + ], + [ + 5, + 200, + 170 + ], + [ + 220, + -435, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 2, + "spine", + 2, + [ + -52, + -53 + ], + [ + [ + 4, + 1, + 2, + 20, + 50, + 90, + true, + -51, + [ + 5, + 200, + 192 + ] + ] + ], + [ + 0, + "ffL4g6oPBMh5/7G4BvdV8d", + 1 + ], + [ + 5, + 200, + 192 + ], + [ + -380, + -707, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 2, + "cache-spine", + 2, + [ + -55, + -56 + ], + [ + [ + 4, + 1, + 2, + 20, + 50, + 90, + true, + -54, + [ + 5, + 200, + 192 + ] + ] + ], + [ + 0, + "9aqu41z15KAJFA3qEkvQwB", + 1 + ], + [ + 5, + 200, + 192 + ], + [ + -180, + -707, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 2, + "custom-material", + 2, + [ + -58, + -59 + ], + [ + [ + 23, + 1, + 2, + 50, + 50, + 20, + -57, + [ + 5, + 200, + 190 + ] + ] + ], + [ + 0, + "3d08Ds4LtI2LrmAruDcl75", + 1 + ], + [ + 5, + 200, + 190 + ], + [ + 20, + -706, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 13, + "view", + 3, + [ + 2 + ], + [ + [ + 6, + 45, + 240, + 250, + -60 + ] + ], + [ + 0, + "645yltQ0dFpbIcIgDazPDc", + 1 + ], + [ + 5, + 960, + 640 + ] + ], + [ + 1, + "label", + 5, + [ + [ + 3, + "Sprite - Simple", + 20, + 30, + 1, + 1, + 2, + [ + null + ], + -61 + ] + ], + [ + 0, + "8d/S7CZd9PWJtu7DBKMbAl", + 1 + ], + [ + 5, + 131.16, + 30 + ], + [ + 0, + 30, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "sprite", + 5, + [ + [ + 27, + 2, + false, + 2, + 2, + -62, + [ + 0 + ], + 1 + ] + ], + [ + 0, + "00PO/vO7RBA7LGG4gZnmVR", + 1 + ], + [ + 5, + 40, + 40 + ], + [ + 0, + -25, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "label", + 6, + [ + [ + 3, + "Sprite - Sliced", + 20, + 30, + 1, + 1, + 2, + [ + null + ], + -63 + ] + ], + [ + 0, + "72H7MLl+BJQ6PKf0/pXpiZ", + 1 + ], + [ + 5, + 124.5, + 30 + ], + [ + 0, + 90, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "sprite", + 6, + [ + [ + 28, + 1, + 0, + false, + 2, + 2, + -64, + [ + 2 + ], + 3 + ] + ], + [ + 0, + "24rXyqKwhLmo/etzDS5uBA", + 1 + ], + [ + 5, + 700, + 800 + ], + [ + 0, + -25, + 0, + 0, + 0, + 0, + 1, + 0.2, + 0.2, + 1 + ] + ], + [ + 1, + "label", + 7, + [ + [ + 3, + "Sprite - Tiled", + 20, + 30, + 1, + 1, + 2, + [ + null + ], + -65 + ] + ], + [ + 0, + "84+9/9sNRFjIiXNpeVVYL4", + 1 + ], + [ + 5, + 113.375, + 30 + ], + [ + 0, + 110, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "sprite", + 7, + [ + [ + 28, + 2, + 0, + false, + 2, + 2, + -66, + [ + 4 + ], + 5 + ] + ], + [ + 0, + "25R2hvKGpEl5LjIqJa/TQG", + 1 + ], + [ + 5, + 1000, + 2000 + ], + [ + 0, + -25, + 0, + 0, + 0, + 0, + 1, + 0.1, + 0.1, + 1 + ] + ], + [ + 1, + "label", + 8, + [ + [ + 3, + "Sprite - Filled", + 20, + 30, + 1, + 1, + 2, + [ + null + ], + -67 + ] + ], + [ + 0, + "4dgWFWJnJDkLOf+68EDXHl", + 1 + ], + [ + 5, + 117.82, + 30 + ], + [ + 0, + 65.5, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "sprite", + 8, + [ + [ + 39, + 3, + 2, + 0.7, + false, + 2, + 2, + -68, + [ + 6 + ], + 7 + ] + ], + [ + 0, + "943ChJKgtOkLkxWK8LJrag", + 1 + ], + [ + 5, + 402, + 370 + ], + [ + 0, + -25, + 0, + 0, + 0, + 0, + 1, + 0.3, + 0.3, + 1 + ] + ], + [ + 1, + "label", + 9, + [ + [ + 3, + "Sprite - Radial", + 20, + 30, + 1, + 1, + 2, + [ + null + ], + -69 + ] + ], + [ + 0, + "3cUe7aTThGJ4w39HojyGKv", + 1 + ], + [ + 5, + 126.73, + 30 + ], + [ + 0, + 65.5, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "sprite", + 9, + [ + [ + 40, + 3, + 2, + 2, + 0.3, + 0.7, + false, + 2, + 2, + -70, + [ + 8 + ], + [ + 0, + 0.5, + 0.5 + ], + 9 + ] + ], + [ + 0, + "1cwLiQAbpDYLXhR7AEpB5L", + 1 + ], + [ + 5, + 402, + 370 + ], + [ + 0, + -25, + 0, + 0, + 0, + 0, + 1, + 0.3, + 0.3, + 1 + ] + ], + [ + 1, + "label", + 10, + [ + [ + 3, + "Sprite - Mesh", + 20, + 30, + 1, + 1, + 2, + [ + null + ], + -71 + ] + ], + [ + 0, + "a88tQBbOhIc7ABFOj/8+Sh", + 1 + ], + [ + 5, + 118.93, + 30 + ], + [ + 0, + 25, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "label", + 10, + [ + [ + 42, + "支持但暂无演示", + 20, + 30, + 1, + 1, + 2, + 2, + 2, + [ + null + ], + -72 + ] + ], + [ + 0, + "fa0KdEmgxLTLA21ifSte4O", + 1 + ], + [ + 5, + 140, + 30 + ], + [ + 0, + -25, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "label", + 11, + [ + [ + 3, + "Label", + 20, + 30, + 1, + 1, + 2, + [ + null + ], + -73 + ] + ], + [ + 0, + "26oSD6Do9MCYDOTc44bG6i", + 1 + ], + [ + 5, + 48.945, + 30 + ], + [ + 0, + 25, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "label", + 11, + [ + [ + 43, + "Bitmap Font", + 20, + 30, + false, + 1, + 1, + 2, + 2, + -74, + [ + 10 + ], + 11 + ] + ], + [ + 0, + "ee5y9SLaRH4b+8eW/9BxZO", + 1 + ], + [ + 5, + 108.75, + 30 + ], + [ + 0, + -25, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "label", + 12, + [ + [ + 3, + "MotionSteak", + 20, + 30, + 1, + 1, + 2, + [ + null + ], + -75 + ] + ], + [ + 0, + "a05VJqHelIZKmFgVVSjXxs", + 1 + ], + [ + 5, + 111.18, + 30 + ], + [ + 0, + 20, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "motionsteak", + 12, + [ + [ + 46, + 16, + 2, + -76, + [ + 12 + ], + 13 + ] + ], + [ + 0, + "cf0tu0HYpMMJ2cS3Etl/Wv", + 1 + ], + [ + 5, + 20, + 20 + ], + [ + 0, + -25, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "label", + 13, + [ + [ + 3, + "Spine", + 20, + 30, + 1, + 1, + 2, + [ + null + ], + -77 + ] + ], + [ + 0, + "3chb4Q98dFOrLtbzdt+vhO", + 1 + ], + [ + 5, + 51.16, + 30 + ], + [ + 0, + 61, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "spine", + 13, + [ + [ + 47, + "default", + "run", + 0, + "run", + true, + 2, + 2, + -78, + [ + 14 + ], + 15 + ] + ], + [ + 0, + "beF60N4qtNPaFZgrsB4mgi", + 1 + ], + [ + 5, + 20, + 20 + ], + [ + 0, + -45, + 0, + 0, + 0, + 0, + 1, + 0.1, + 0.1, + 1 + ] + ], + [ + 1, + "label", + 14, + [ + [ + 3, + "Spine - Cache", + 20, + 30, + 1, + 1, + 2, + [ + null + ], + -79 + ] + ], + [ + 0, + "e7a+XFvHVE0aenyeyt0UcA", + 1 + ], + [ + 5, + 126.75, + 30 + ], + [ + 0, + 61, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "spine", + 14, + [ + [ + 48, + "default", + "run", + 1, + 1, + "run", + true, + 2, + 2, + -80, + [ + 16 + ], + 17 + ] + ], + [ + 0, + "74FJWuBu5AsYAnkRtrRG0O", + 1 + ], + [ + 5, + 20, + 20 + ], + [ + 0, + -45, + 0, + 0, + 0, + 0, + 1, + 0.1, + 0.1, + 1 + ] + ], + [ + 1, + "label", + 15, + [ + [ + 3, + "Custom Material", + 20, + 30, + 1, + 1, + 2, + [ + null + ], + -81 + ] + ], + [ + 0, + "17PBy+QStKu7/TNPYI4DCz", + 1 + ], + [ + 5, + 145.605, + 30 + ], + [ + 0, + 30, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "sprite", + 15, + [ + [ + 27, + 2, + false, + 2, + 2, + -82, + [ + 18 + ], + 19 + ] + ], + [ + 0, + "60a28hu/5I07CP6SkTvPTQ", + 1 + ], + [ + 5, + 40, + 40 + ], + [ + 0, + -25, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 17, + "bar", + 4, + [ + -83 + ], + [ + 0, + "29pI3SelxAU6ODrNe5LS2g", + 1 + ], + [ + 5, + 8, + 30 + ], + [ + 0, + 1, + 0 + ] + ], + [ + 26, + 1, + 0, + 39, + [ + 20 + ] + ], + [ + 31, + false, + 1, + 4, + 40 + ], + [ + 32, + false, + 0.75, + 0.23, + null, + 3, + 2, + 41 + ] + ], + 0, + [ + 0, + 7, + 1, + 0, + 0, + 1, + 0, + -1, + 3, + 0, + 0, + 2, + 0, + 0, + 2, + 0, + 0, + 2, + 0, + -1, + 5, + 0, + -2, + 6, + 0, + -3, + 7, + 0, + -4, + 8, + 0, + -5, + 9, + 0, + -6, + 10, + 0, + -7, + 11, + 0, + -8, + 12, + 0, + -9, + 13, + 0, + -10, + 14, + 0, + -11, + 15, + 0, + -1, + 42, + 0, + 0, + 3, + 0, + 0, + 3, + 0, + -1, + 16, + 0, + -2, + 4, + 0, + -1, + 41, + 0, + 0, + 4, + 0, + 0, + 4, + 0, + -1, + 39, + 0, + 0, + 5, + 0, + -1, + 17, + 0, + -2, + 18, + 0, + 0, + 6, + 0, + -1, + 19, + 0, + -2, + 20, + 0, + 0, + 7, + 0, + -1, + 21, + 0, + -2, + 22, + 0, + 0, + 8, + 0, + -1, + 23, + 0, + -2, + 24, + 0, + 0, + 9, + 0, + -1, + 25, + 0, + -2, + 26, + 0, + 0, + 10, + 0, + -1, + 27, + 0, + -2, + 28, + 0, + 0, + 11, + 0, + -1, + 29, + 0, + -2, + 30, + 0, + 0, + 12, + 0, + -1, + 31, + 0, + -2, + 32, + 0, + 0, + 13, + 0, + -1, + 33, + 0, + -2, + 34, + 0, + 0, + 14, + 0, + -1, + 35, + 0, + -2, + 36, + 0, + 0, + 15, + 0, + -1, + 37, + 0, + -2, + 38, + 0, + 0, + 16, + 0, + 0, + 17, + 0, + 0, + 18, + 0, + 0, + 19, + 0, + 0, + 20, + 0, + 0, + 21, + 0, + 0, + 22, + 0, + 0, + 23, + 0, + 0, + 24, + 0, + 0, + 25, + 0, + 0, + 26, + 0, + 0, + 27, + 0, + 0, + 28, + 0, + 0, + 29, + 0, + 0, + 30, + 0, + 0, + 31, + 0, + 0, + 32, + 0, + 0, + 33, + 0, + 0, + 34, + 0, + 0, + 35, + 0, + 0, + 36, + 0, + 0, + 37, + 0, + 0, + 38, + 0, + -1, + 40, + 0, + 8, + 1, + 2, + 3, + 16, + 41, + 9, + 42, + 83 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 40 + ], + [ + -1, + 1, + -1, + 1, + -1, + 1, + -1, + 1, + -1, + 1, + -1, + 22, + -1, + 23, + -1, + 14, + -1, + 14, + -1, + 1, + -1, + -1, + 1, + -1, + 1, + 1 + ], + [ + 1, + 14, + 1, + 36, + 1, + 4, + 1, + 4, + 1, + 4, + 0, + 37, + 1, + 3, + 1, + 15, + 1, + 15, + 38, + 14, + 0, + 0, + 11, + 0, + 12, + 13 + ] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + { + "name": "default_btn_pressed", + "rect": [ + 0, + 0, + 40, + 40 + ], + "offset": [ + 0, + 0 + ], + "originalSize": [ + 40, + 40 + ], + "capInsets": [ + 12, + 12, + 12, + 12 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 2 + ], + [ + 39 + ] + ], + [ + [ + { + "name": "etc1_rgb_a", + "rect": [ + 24, + 12, + 154, + 131 + ], + "offset": [ + -13, + 2 + ], + "originalSize": [ + 228, + 159 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 2 + ], + [ + 40 + ] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,0", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + { + "name": "default_btn_normal", + "rect": [ + 0, + 0, + 40, + 40 + ], + "offset": [ + 0, + 0 + ], + "originalSize": [ + 40, + 40 + ], + "capInsets": [ + 12, + 12, + 12, + 12 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 2 + ], + [ + 41 + ] + ] + ] +] \ No newline at end of file diff --git a/demo/web-desktop/assets/multi-render/index.f7eed.js b/demo/web-desktop/assets/multi-render/index.f7eed.js new file mode 100644 index 00000000..e7415848 --- /dev/null +++ b/demo/web-desktop/assets/multi-render/index.f7eed.js @@ -0,0 +1,100 @@ +window.__require = function e(t, n, r) { + function s(o, u) { + if (!n[o]) { + if (!t[o]) { + var b = o.split("/"); + b = b[b.length - 1]; + if (!t[b]) { + var a = "function" == typeof __require && __require; + if (!u && a) return a(b, !0); + if (i) return i(b, !0); + throw new Error("Cannot find module '" + o + "'"); + } + o = b; + } + var f = n[o] = { + exports: {} + }; + t[o][0].call(f.exports, function(e) { + var n = t[o][1][e]; + return s(n || e); + }, f, f.exports, e, t, n, r); + } + return n[o].exports; + } + var i = "function" == typeof __require && __require; + for (var o = 0; o < r.length; o++) s(r[o]); + return s; +}({ + "multi-batcher": [ function(require, module, exports) { + "use strict"; + cc._RF.push(module, "3e9188DEK9FCYlYeL+jvmrQ", "multi-batcher"); + "use strict"; + var __extends = this && this.__extends || function() { + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || { + __proto__: [] + } instanceof Array && function(d, b) { + d.__proto__ = b; + } || function(d, b) { + for (var p in b) Object.prototype.hasOwnProperty.call(b, p) && (d[p] = b[p]); + }; + return extendStatics(d, b); + }; + return function(d, b) { + extendStatics(d, b); + function __() { + this.constructor = d; + } + d.prototype = null === b ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + }(); + var __decorate = this && this.__decorate || function(decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : null === desc ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if ("object" === typeof Reflect && "function" === typeof Reflect.decorate) r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) (d = decorators[i]) && (r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r); + return c > 3 && r && Object.defineProperty(target, key, r), r; + }; + Object.defineProperty(exports, "__esModule", { + value: true + }); + var _a = cc._decorator, ccclass = _a.ccclass, property = _a.property; + var MultiBatcher = function(_super) { + __extends(MultiBatcher, _super); + function MultiBatcher() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.batchBtn = null; + _this.cancelBtn = null; + _this.textures = null; + return _this; + } + MultiBatcher.prototype.onLoad = function() { + var _this = this; + this.batchBtn.on("click", function() { + var batcher = new cc.sp.MultiBatcher(); + batcher.init(); + _this.textures.children.forEach(function(v) { + var sprite = v.getComponent(cc.Sprite); + batcher.requsetMaterial(sprite.spriteFrame.getTexture()); + sprite.setVertsDirty(); + }); + }); + this.cancelBtn.on("click", function() { + _this.textures.children.forEach(function(v) { + var sprite = v.getComponent(cc.Sprite); + sprite.spriteFrame.getTexture().unlinkMaterial(); + sprite.setMaterial(0, cc.Material.getBuiltinMaterial("2d-sprite")); + sprite.setVertsDirty(); + }); + }); + }; + __decorate([ property(cc.Node) ], MultiBatcher.prototype, "batchBtn", void 0); + __decorate([ property(cc.Node) ], MultiBatcher.prototype, "cancelBtn", void 0); + __decorate([ property(cc.Node) ], MultiBatcher.prototype, "textures", void 0); + MultiBatcher = __decorate([ ccclass ], MultiBatcher); + return MultiBatcher; + }(cc.Component); + exports.default = MultiBatcher; + cc._RF.pop(); + }, {} ] +}, {}, [ "multi-batcher" ]); +//# sourceMappingURL=index.js.map diff --git a/demo/web-desktop/assets/multi-render/index.js.map b/demo/web-desktop/assets/multi-render/index.js.map new file mode 100644 index 00000000..c774d1b4 --- /dev/null +++ b/demo/web-desktop/assets/multi-render/index.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["assets/multi-render/multi-batcher/multi-batcher.ts"],"names":["_a","cc","_decorator","ccclass","property","MultiBatcher","_super","__extends","_this","apply","this","arguments","batchBtn","cancelBtn","textures","prototype","onLoad","on","batcher","sp","init","children","forEach","v","sprite","getComponent","Sprite","requsetMaterial","spriteFrame","getTexture","setVertsDirty","unlinkMaterial","setMaterial","Material","getBuiltinMaterial","__decorate","Node","Component","exports","default"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IACM,IAAAA,KAAAC,GAAAC,YAAAC,UAAAH,GAAAG,SAAAC,WAAAJ,GAAAI;IAGN,IAAAC,eAAA,SAAAC;MAA0CC,UAAAF,cAAAC;MAA1C,SAAAD;QAAA,IAAAG,QAAA,SAAAF,UAAAA,OAAAG,MAAAC,MAAAC,cAAAD;QAGIF,MAAAI,WAAA;QAGAJ,MAAAK,YAAA;QAGAL,MAAAM,WAAA;;;MAGUT,aAAAU,UAAAC,SAAA;QAAV,IAAAR,QAAAE;QACIA,KAAAE,SAAAK,GAAA,SAAA;UACI,IAAAC,UAAA,IAAAjB,GAAAkB,GAAAd;UACAa,QAAAE;UACAZ,MAAAM,SAAAO,SAAAC,QAAA,SAAAC;YACI,IAAAC,SAAAD,EAAAE,aAAAxB,GAAAyB;YACAR,QAAAS,gBAAAH,OAAAI,YAAAC;YACAL,OAAAM;;;QAIRpB,KAAAG,UAAAI,GAAA,SAAA;UACIT,MAAAM,SAAAO,SAAAC,QAAA,SAAAC;YACI,IAAAC,SAAAD,EAAAE,aAAAxB,GAAAyB;YACAF,OAAAI,YAAAC,aAAAE;YACAP,OAAAQ,YAAA,GAAA/B,GAAAgC,SAAAC,mBAAA;YACAV,OAAAM;;;;MAzBZK,WAAA,EADC/B,SAAAH,GAAAmC,SACwB/B,aAAAU,WAAA,iBAAA;MAGzBoB,WAAA,EADC/B,SAAAH,GAAAmC,SACyB/B,aAAAU,WAAA,kBAAA;MAG1BoB,WAAA,EADC/B,SAAAH,GAAAmC,SACwB/B,aAAAU,WAAA,iBAAA;MATRV,eAAA8B,WAAA,EADpBhC,WACoBE;MAiCrB,OAAAA;KAjCA,CAAAJ,GAAAoC;IAAqBC,QAAAC,UAAAlC","sourcesContent":["\nconst { ccclass, property } = cc._decorator;\n\n@ccclass\nexport default class MultiBatcher extends cc.Component {\n\n @property(cc.Node)\n batchBtn: cc.Node = null;\n\n @property(cc.Node)\n cancelBtn: cc.Node = null;\n\n @property(cc.Node)\n textures: cc.Node = null;\n\n\n protected onLoad(): void {\n this.batchBtn.on('click', () => {\n const batcher = new cc.sp.MultiBatcher();\n batcher.init();\n this.textures.children.forEach(v => {\n const sprite = v.getComponent(cc.Sprite);\n batcher.requsetMaterial(sprite.spriteFrame.getTexture());\n sprite.setVertsDirty();\n });\n });\n\n this.cancelBtn.on('click', () => {\n this.textures.children.forEach(v => {\n const sprite = v.getComponent(cc.Sprite);\n sprite.spriteFrame.getTexture().unlinkMaterial();\n sprite.setMaterial(0, cc.Material.getBuiltinMaterial('2d-sprite'));\n sprite.setVertsDirty();\n });\n });\n }\n\n}\n"],"file":"index.js"} \ No newline at end of file diff --git a/demo/web-desktop/assets/multi-render/native/10/100eba2c-cfa2-4fb0-a5ac-a95f9b461fc0.eae97.png b/demo/web-desktop/assets/multi-render/native/10/100eba2c-cfa2-4fb0-a5ac-a95f9b461fc0.eae97.png new file mode 100644 index 0000000000000000000000000000000000000000..0b6e0ddb24d9e3a88e5c0f6dc018e70560d3686c GIT binary patch literal 6280 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¥8aOAU&74+jD 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 literal 0 HcmV?d00001 diff --git a/demo/web-desktop/assets/multi-render/native/22/22247785-ef30-4b66-a9d2-ebcaf6a7f6e8.2ecc6.png b/demo/web-desktop/assets/multi-render/native/22/22247785-ef30-4b66-a9d2-ebcaf6a7f6e8.2ecc6.png new file mode 100644 index 0000000000000000000000000000000000000000..89bfc60edd40a0b10a11c98727cee71335268c52 GIT binary patch literal 6694 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�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 literal 0 HcmV?d00001 diff --git a/demo/web-desktop/assets/multi-render/native/44/44999d18-51d1-4017-9ea6-98dcad8ecdf5.99af5.png b/demo/web-desktop/assets/multi-render/native/44/44999d18-51d1-4017-9ea6-98dcad8ecdf5.99af5.png new file mode 100644 index 0000000000000000000000000000000000000000..bfe479bc2882e69bc96dee3fa4bfdfee375d0416 GIT binary patch literal 6904 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�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%0A-v#qZhZ6e=9)WvYo)qg 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 literal 0 HcmV?d00001 diff --git a/demo/web-desktop/assets/multi-render/native/6e/6e056173-d285-473c-b206-40a7fff5386e.6d3cf.png b/demo/web-desktop/assets/multi-render/native/6e/6e056173-d285-473c-b206-40a7fff5386e.6d3cf.png new file mode 100644 index 0000000000000000000000000000000000000000..8050170ccf3fb7d031bc06928ce6f6b643d25d07 GIT binary patch literal 418 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU3?z3ec*Fy#oB*E?SD(znPoF-SnwolhdjlCC zKYj#~5b*#1e|vlT+qZAOfB(L*v2owNeQj-RPEJlCAt4VRK8%Tpv9z>&{rYujY3cLl z&zqW>y1ToRlaue>y*qdA+><9yUcY|*(xpoU1qEJSUYj;;%F4>xY$aL&w3n+S$S;@y zX!^U(32!H|HD~(V1&ZGGba4!+xOMl+O};}4BCdfJp_vP(+}e5W#sB|{nFTLL>^$=0 zNnKpxF3vaKQ&&Dn={8B$mb*Hs(?Ua{Ux(%D1e22sJR&^qOlD=A+Ty*+;7WyA%fhb) zoQIDces){*cC2|=ar%|u8~F@3m@8lJE4!W3S-$34!CGzosoQ$5UOt&Kx7f%ad+LMG zyY(&Z+yRsB#&%}TE)#pV_jBwgOO22BGL^pHWlmam?)0A+=J|?SlK-A#a^xsZW>;q9 zO49LT(0K7HIpUI^-GYS=E1H|0w?%9=(G~wFpE*tM(Y|N%%UM@U=ie2^p(+RTCWEJ| KpUXO@geCy3Aj$y% literal 0 HcmV?d00001 diff --git a/demo/web-desktop/assets/multi-render/native/71/71561142-4c83-4933-afca-cb7a17f67053.c06a9.png b/demo/web-desktop/assets/multi-render/native/71/71561142-4c83-4933-afca-cb7a17f67053.c06a9.png new file mode 100644 index 0000000000000000000000000000000000000000..0556b76119fa785e777d114f9e5489793ac2275a GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU3?z3ec*FxKxd5LK*Sfm8riO;v+S(d0s0V_& zIv}^Hu@T6;y&^0HsFJ-T$S?Ry|LLQCY&moH?~eltS$n!ThE&{oduAgqg96VH2X-OB zZ}Btw_&zf4c|CdMg8hQ7TS5-RIsM+XKPIUS1o%5%En`!+6sS|?-?Kn_Y0KYPEI?xz NJYD@<);T3K0RZ7fKqmkI literal 0 HcmV?d00001 diff --git a/demo/web-desktop/assets/multi-render/native/77/77844f44-c0da-4c94-a97f-fac1ab844551.92cfc.png b/demo/web-desktop/assets/multi-render/native/77/77844f44-c0da-4c94-a97f-fac1ab844551.92cfc.png new file mode 100644 index 0000000000000000000000000000000000000000..39098122d0ac87dced5d8fb41904eac2ba6958a2 GIT binary patch literal 6611 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 G!~O@ZgAly{ literal 0 HcmV?d00001 diff --git a/demo/web-desktop/assets/multi-render/native/7a/7a788430-6621-4bd5-86ce-0957a216dd69.9e7e3.png b/demo/web-desktop/assets/multi-render/native/7a/7a788430-6621-4bd5-86ce-0957a216dd69.9e7e3.png new file mode 100644 index 0000000000000000000000000000000000000000..83fb86dfc249d63c696fbaba5c57418b37d2f337 GIT binary patch literal 7299 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 literal 0 HcmV?d00001 diff --git a/demo/web-desktop/assets/multi-render/native/b6/b6161231-4d65-475c-a6bb-a8199e851e88.6159f.png b/demo/web-desktop/assets/multi-render/native/b6/b6161231-4d65-475c-a6bb-a8199e851e88.6159f.png new file mode 100644 index 0000000000000000000000000000000000000000..2be40f757c919fe05a5e133889cf9dcd49990fef GIT binary patch literal 6553 zcmV;K8D{2*P)Px%d{9hOMNDaNT^az+%En(C16&*cUmF2k8US@aDqS1^ zT^Rse8vuJoF@jAvUK;>j8UbD!0bd&dUK;|JZe3m*0cA@^pmbtxG#pk8vt&m&0ZP+X($n18UlAqI$slIS6Z8QXq{(M!lRaWp1EYf|GcZD>*3$2k%en`iR=3P_TJV1|NnEz|6d#d%Jl#J z#kcSL{lxSC$@Kr|`u_jIv-acKaLE7i{QbxC|Lywy_TAL}#I|O`|IhaScNG=&+tK#m z*lWfA+x`E{_5arT|NGCv()j=1`2J`p59Im&_1Mm1BnxXT6=5zM(e?k;_y5}W{`uL? zm2-6c$h&mQ|CZbTVZi@mJTJNI|N8XuVjl*k;{R6!!{`~s1 zosx6N{=~brzwiHQaen&J$C6`Fi*9LrR7d!fl#5?Zu9Ak{X?cp-$-?2N zm~4}=cQziAO*z%Wy7%ed_`$N||Nr>p+~wHNtbS}^1pt?VcVtC9=g-5@($H#vlXAxU zpy2;gSw^$T&GGB#e?cmwWl@CE|ICefduNMjTe5RsaS;yIv80!b zg~aOf?YXMAUsTxa@OO`;WxDg!aBFi~Rf@ypHPNn`~Cg?{tARR{%Ppa{-GNq?Ed}! z;^X_%;{M<0-q_mv`SR<(^;cQbOaK5DXGugsRCwC$orhbK*|x?4Ja)0>U67q9~}?>)6IAXWBXUAG&LQNq{uKdrlyD zd7XzuqVxFk-D~Z&*WUZ{gLSQIUF%xcy4JO>b*=0FqdxTU3k-Pgs5S%!`g~}8AF?qP zP&@rMyibS$yMUtd!}lRO0U-YKPd+)|4GwRQ*`tV3>BSb(t-2RP>wM;gYHT?C2+&!dwaVxRpIfmm zK^NUtLhCD=y{WMs?F?L-kiOt0q;E1qYQ3n}=@+jLH`48SGui)WLpRstpbdk6WLh9w zgQ%AdpzRF;(d`$N(4id ze;T24-r$4qH|LP3uOZBHAtT|I17tE>FBNB0m1H!-Ynu&y);iUaXFzpJm({rQJ4}u*aV?LKof$mW|c>mquvsRj`BGwCHJvZ+hwdeR7 zBr+I@heV%5BBQ-->AYM(o&oUjSjdBR81-?jA_jvYIssm(PSkPOMWuc(9z3<@ybWT@ z?I^T)4Add`I@OsP4mvkdm|qE~@U7cC2re|t*N;@^-ge8ZPIyZg^Gsi*rk0-^c7Qxf z+vGIw6#k@z(Z<6X0B>Ip8Mc8y6dUO04F_u)78(V+slmE02IG$grjP9*%V}QD7}L2o z;W;UY&b){t8%CbdV*TaxXUWJJ_jUbSh+g31ZYcxxl9UL00i09{UC*3FWFco%$3jS= z@3n}z%@dqVescQsXP_;=CXyy-NA|jDAnnrLsf`%Q9JgYfl8;xvw zZo%f)x|9b3;-poZIshVlR(;!};nwY%f1Z9a17nD0tGuqxR9EVZv0*I8FHmwh&$rxX zwY3XuR$?!ZGGKKFtLZF1Z(u~*|MclhAK#8qlvw$(OUU5EHa_MzaRgizrS`T$n|28f z_wWx_ld!yVZAqzMxtDe*HZI_$R0Cue+V^Fy? zk66YSIKS_9%^`*zWOS=b$cU7M-7O(qDVT%YOuLWYSg3~8>;3E?j8ZERf7l@=rTd~? zF_xQ-l=Z!=itHh7& z3LzS7T$R0@NcdQWjEgCHp9{wGa1*;*1-O|`ZBGjGIjnhAwsE=Xc9dQKeyh{d89>HG zwfnYIq7sE&X1CXj9at<76q5J zSosA762XG8dNajzA3spi?W}AB2wC}kkK}q0m2?&lN@wGBxDS4Cp6Y^JQtw}XtRZ0PVNOV<@F zSScI!S3(ml(QGWd)~NhMbs4I<+JMMb$dq;#wW-N= zz9ke7u|6x5cBYnLWa915ewmrwJ#aDxVp=1Hu#4=fEiwr~H_r@znikGve)9UOc#dUqlsT59+a=w&jQ8ARKA zfDw>5v?r>c@rV(_i+?Bo2sBq{7WE;#(+< zy;qo*YkQ2w$&9LsG8S%qVT`H;*vB%@Ag*<$YXt&xLoBTx|H#WoJcn+7hAp5cpWWVb zo=-6r@mlzn!5n1Lg5GFM=w_B=h~-svhKY#@LtT~8C{a>n-6FbI>3%Q$ptT$)kmXR0 z1@}KajhMgGM5CE9SsE{!Z~ZWD_yrhiF)GQxm5a?vfaaNW>gCf4lGZC&Wzcvm##B>^Zb@&P&F%TQ55!f@`#ZBllsm9`rX=n~Ba4-P`1v zvID~1-E7^vY)E3}?wURSd~*89@7fz#X|r##q)2HsGf#S;=zz#Pb6V%l&8n$64 z!)MP^I!ko^S!Z-`jY-qsj55OA+wQ(_OC*)aM9aq(Yf%>O@r(9tQ6=Ur# zTl#k+dY*Kk9{ZPPour-@tpI^;9j{Vp(X0jyS&ne(xY7DY!qwW}3><}eR6Cf)OUo`Q zV#xR?GptNT{lt-*&zFiWlt;X9glzC46N#TYEA)mueoKGN7=LLy(8fc1QpT@jlvXtj zrRNq3QfkuDvUt3-;_U3~mKOX{j3V!gibOI5wLvUu$u1tu+V2GN%snh)-P#m6pkqk+ zEw^C=|5QubI2-@pSksi&sWRE@Ox%I2)C{H(P6uTbBPkilbALVAS-im;Z{F;2b+CKd zod>uA;bb0Grgv*#1c%+C8RzF3V>cFV;<_QK0m&A!I4STdE6s_r2zYTe;UvG6frxi+ z>u7sBIvQLScKc*X@)#a6QSuTzz-&3AEZ`gi)65MEnAt;= zm6S&!mX9N~n0HqTTb{EQtz$oh$PMl*(x-OUWQk-g#jpC_x*DTjJ??|ir4K%T3A^05ri8mKe9W&! zEh1Mo7NzlOqL`FQD^lsGc}mviV-dk!I-O3VHEDH~H8sIA`ycZNB_`ft1kSn(G}4~r zaB>$f*AKXFMdAaH*dn7?7|tkVIREo_vl=sFhPVkK=P2n)q@*PHY4gpS&yO5=Fxo*g zfsVu~uNX5ZW5xUWUFzE8Xa2G*)E``EY%a*HWB?h(!BqsKjb8 z$i;Q)oC2i^#pN^=Qs!g|b8>PD3-WPH3T!EH#Lk$IvCzRq*H&(D=axux5yBxIffW@M zWoIKHBAPWDM1`YzLM%35C$6aiTUAX;O9KbZBofk*-e%~&*5F`0f{czfx{k^aw{HCO zlfsh{PIc6@K3BiIfj=lChbBtpcO+$X*iJ63QY!7P!XPU>Cx3yP_qFGO+uw;1D}qq> z9*&4V$0M@gBO2^_m=r}ID~8IjOI4Lont@HZGL@4i6=s(l<$Ssg?yKC)$w!ZuugFL@ z_a|Xy&{-YY7sc$=b|Y8ykm8O!L!Lo^@2I&>3m74$C4qI!?u8$%TX)MJuL16DHHQK8 z-#{Pd#Y4^Nnas;^3k(N5!u{Q1yVR2k5$#YvJiQJPU=se5o^$7ORoQ&>Pn=4Kdux50{PT!Bp>pRKzH zXpN??Pos;Aivs|2&1$@u!K}0RIN6Lt*QJvvw%N>4aC%QKJ$=!Z`qq`%VAr&_J<@zj zGfrOZo!qYPrNA!h6PR*~j~AmdGRo9~90IwBncN3Q$T^;O)AUL}2E@Xnwr{^})3mi; zlp|2D{xXwN?Kr-nbVWb8BqW+yh&7NP_Z=aHjS#W|`&_W)TOwV1TU;#(#*0ilA@?Z) zxkO6A2P+6TSOUHytxO4D%(yf?W0P$5%x7&F5D^1(=hIiLU ziU9=+DJ41N$oYRrLg8NUq7G69xc$&1^-Qxkh)+p5dH~>yS~Fis#^nTneTl``CD2{L zVqIlEQzt1X;1>QzI5Qhf$cT`g?yd){Pp6B7IVC4G_w@8UG=ga)PbMXc{mOBsyhtKsHUr(>tIm!)w{=OT1L;QAuMP0k8^AK3j7PlIypyVQ>60dVF zdp2BjTD^30%a7(E!H!$;N2CO72th<|)9z~`glyrFW{BxJS%wfRRfY-`%Q_vV|KIr7 zbRj8_ls79kQ{`}G(8}MtB#V=ezWGjbON849#Z=#TMvprp#7cEjsX>8b_TR9QotrBp zr-8YWGUJh4Hu=UD2wY)CA8+vf=9_Q6`>6FAWh7CS=?`p%C{<17h3V<< zh>Iulx%t#-U{#s%0X>t{5Th%8f;${-B>GNQFO#8>l+MAU>%Y}0REh~P3C_8*_Ch-L z<(554@e9^|0xtfC;jO699~;UPB6izKL;717alF2~P=t(DN`0@`pdK>d8A%leCkNr! zLLvGhSzh;%ot{gcut64{mcw}JKlRVmIhmR1%A+d{iDT6YIW>?y2YDmq6lU0}i8{F@ z&tm%+XY(8`7vHcQG0jHXUXm#&%;$2rTs5ajNsO$%uHUT2Z?XgjS2*$bz(-cdnrH?u zYYy@e6D22|0y$HlLP`uPj4iH`6bSb1a`Y|7jv99t%>8HyYl5R>aV6?IJ;pL@<|4MY z_liGu0DiDSqLEe&(k7V}m6X;|4?kg1v4x^A=?m;+k>Rb{BCni)l-zp|b zFD8|#S*RnhaTT8M8utU0c&3UMbSn4EFTpZOCx(!6p|D?9fSeYk7jikaeGoRC#Wgdk zo9b8+u4JfMd|7+7OhxL8gAlm#H-L5lgzrSimvfAVzDho>AD^eha$PN8*6y<+3CSZkcl7ZaVgV%#3Q4x=NgZ30j=N9M^W2$mLak zS=DE01cdm8#R4i8j0lOUz0RDMSYDx0pm`FtEviJNP*+e_4CdOCnYg7%756HR#865d zV8{O%TqSGr;}E;*x4Sp^_yk~m;BB*(whq}lWeSy~tO>s;i6rDOx=L9#Q6--+FFv_A zgW``|3B{;ZRG+FsK1#LJ(UJs!P|taGAO5vF3b*x|hMJg$GMx0(c+;n;ta`#wh1Vzy zLrSC~Ugqau9-^+TsTC5#U&V3@<8??v&?pE+8$CsV-VoL80Ev+)H*hL2uJbr@{z zjgwO`in&P`TCE!Cv=j`Y08F>4dHJHaG-3G-^!U#50%)dmu< zBuv$16^1HtsodKBdkA{V*#E-w9_Y6r6ae%|JqYSr&9I$-XBgBI@`)w^x2bFbx2fks z@ygYQ#wcr!?)AuL{01Ne0sLzuJ#Ye^mMPghZ4N&qd4OpC_xn$N|H?Ok}7uckDhsI`?wJxEWqQRv`x(X zVse2$-=@v$+^c@L*nG8{>8Nf!Pzv?5jN^JO7XL-Bg`^kePXrOppeUwO9f!!{2Yf@Q zcKMpX+z3R+6Ru8f?@fUIY>SEs=Fc#0PQEtTx7N7!{!xkzA)%2lr)a)ejBIjNyH#(_ zuf~MywcV$fm%D2x$D@E;++Kt73Gw$04c!<{D6Qu$^U`=lW0oVq<4JnZ>h*dp5N-Wn zP0JS%Myz*e%Liunn361mwHYjm+`8uf(W<~$ip>|lKcw3%sP@8X391sklb5*BuQ<-T?s(4u`84`_OL!NO|Ar%mpW=D%- zN04AbqjFRl4-C14WU_;1t$SRbbXS*aPqu(ypm0%tSv`VVKP43ncu+N@b60y)IDAz* zm~c~nRyvnwN~d*KiD5>YYfhADOq^{`b4)UzZcwClSB_#uZb&bKSUi?$OsRcelwm`o za8ZU^KZajKs&!SWdRvKIK#E#DmTgg>a8s;+Vy}W_rgmDVcw38JL9BOIlVnCC7ZR|1 zU8Q+jo@`CEpOdD1Uax*$q;yoWe_(@LLa29FtbJaxeO|JLX?;&KoNG(3e_@$xO`LO9 zuzFgqd0K!{HiK0-k!VYuXGgh3b5A!e z9TkyfN34EfXhkk!K`Vw>JW)0$cT+lzTt0?gLA8l&wT5Z1fn$(qO|XY@l4?++ZcZ{F z7+W$Mtb%2;f?{|~F}R0msefo_K`C85C_g3{I3X3fjdE^8E4_(pz_F-rOf{fuOQLvT zz>RRLgKfE^n7)yByoP3EIU%r>hFCZyhgLZ_B^*I3Af|g{NGlz>r=8Kv$`=g@zN?{h zNG;8sgqCAOPA?v_nT*K0wZ)Qk!IgbA8xBY@CY^O&d0R@Zj((bPS}qq1M8ktZ_`edr*^pbA3c1iDy%~ zZabcefSXk)$BJY9s16bU0W$ANL_t(|+H9TgPn&1H<_)Aq*se1UR^m`61sd!c#}47( zG=^9r!0}kZ#6fkK5Rwkl4I<4Zv_zY1=_o;Ids;P`k)~?9+c!}ooo!Dws#ZGc%#k{8 zj#fLb=GDB|KWMM(`hIU7qt2Da!C>s?xj)bM=Y8K#V;xhwoz2#uL?UrbQpIAnR%vyiR;89`Cpw)}uF20yN%dSV*K97YoY>yq|HJX)$NwOG3h^1IS71zoB$64$At$zrJDTIx zBp~6Zuj|aN=kPnlcC8X`5y@W7h^^!7L4w3E5&(pAeZ0NTbBT!HA4Ae4@g`o<1d+WK zfXvK%lj(vlu8evrMa)3M56Vho^Yz@dYbPE9$>n0UQ7M;7Wilzw&v%MCeTl<>Apmn7 zD~a$^_^c@=*YPxrJ|!UbwG&yzZv&KwKm?+r4&cHCYoCVqGbF$PCPfZr1#%<=VwVSB zugjT8U?%#WnCOC%gaj`tw)0TC+NrPiA|VsKQDDMz#dk#S3bmvgDHM!c1T zN^yK&?7q{>;*kYbb3M}7Z~p*GeAObBPL=I zi0G`hk3+H&K8T1Tk;mj!Q%tln835Uxo7)}EBwP6`#=efzld%X1PBJehxn+8;TzxEG zE)@!yLb6n8j8%&q2!1~P8WJ&q0j#=Kqe3xlYm67vnl>MP@VBU{s@UZMnp7%xE?A6@Yvm*`|?X7DOIv#oq9^jkqD7g;>M(Y z^&vf1uG)x~l9>#cl=JvDq$7|bA{0O{EI1MiH|tP%O+>_B9d#4-Sfzv4Es zEhe%QJz9=K2P)D8TPl1rEFv2lbHhu8QXGlK&ykd2Cx!%OvRt1Z%eRv9T>Lf?9iBlH z@Sw=+>yME1_n4~~NNFpX?3V1Xxm0Kqg zhZ!BF(dQ=#36+YF&|$4p4kVn02O+bY+TJq|5fTM>Q#eL<(vBpO2X=c~@PJyk5J-&3 z#!ebYm_~7og#=6vBY8+GK{SECD(QsU+{OneRL`*{Xj`5p|a$K!0Qjc3*X99WfA``b%jitLzmow=_BFBYS$xBLx zg!1ur$w;1cp`?&J;|cJOU#0F3T#@kypJkjKNs>sugn(q%&4d9E`Bl@I)NtWdSUA;} zS70S8EKSB5HJw&XOL*@e}E&_>s0!|O^7#VK32BS*uAfQIR znj^g!!^sIrHs9)IAh~oeO`5?gg&=CIEPwWJ<@EuOSSalTBu$InAzp_^w{`yKM)K?y zjf6-9g{ql*6Ot%`=t3Y3C*r5wgM^`d2T*o)(=&+JaXK!g?pJd>v;=D}8p-9{@(CeX z&ei8}HKH;>xhTIyD<=|NIPNXnX?fKfJ~vwn0uv=Pl9=%oP6Vgq#m-?j5#(>jvDGt2 z(n-)vkkms6jGhS#31r6VgKDINLNX-qej$()i{>kGG?5S*9Eox5QG!HnC2!F_Au*A3 z2=+mNh%r$Vleq^X&ZHtMk#=_G(!&`bp$o0&Q2Z}9a}0+(OE(fjA|_)E%fsejk^a!yD+>2Btz9|F@;JUfgHNZSk9upo?BkoKEA)dfBf+Z zkQ5OOI`nT+-8(OYQcQWH!Q-kD%M_3i2y82kW=xV^uQ4_@KY#ghia=5(7!ppeWmg%E z1KN8=$xO_H*ibkUN=SH#o8Kam8AoE}gIyZ3*{Jf7@rcR)6B0U;fFy`e(7bYmLnsQ2 z3BI@@Ag)%6HZGGvTmh4O7QLzF3YkdO9Ex%V3+p68BqW04A5NQ{EG(oq``60(p`oE_ z?%KnLVzOK>Hi#qzB9D*nfBNbE@$JXUs;AUam57KJOO}QLD+?XGrs+D*6CW2ZQzZ~d zl1U>=CZO_b{CY7UX|UjuLOPB*&#;gp~xNbt2*z znTZi05_$y{oLNey!f|R*7zK=O2Sj9gd~HIMke^JR2_r&SVV+g zX}r7MBHw{^A4Y@OEmBz`N$<{r2#^eK7QiIm0Fo1AvV0X*QmZg0ZN35|wDJ9InTdd` zKzMK@U_vNGZ|?*oFoF)7t2B?bwY6k&dU`s!wpNM{4ULVBRjag=V#I{k39c|ZL8!~q z?Q%pYHWl-Eh8IUt6DwE=kXYbL1|;!Huo8$xx-L#9A|!4lZX`m|skZYbav>f-rr4$t z5<=+-%C$TX(ZnOAnUIJ_H2hXOp$qyIW8%p+YIQpUV_wM%Nu0eZ9R4t%fXBk@YMPi$|1lxt=i**GG4l;3iTIm@@zoyVnB)sy3B;JaU#BoGc0fm-`6X~@Q zDU@w>9x0t`D-Hn*i%&)gL((p$1Vc=SL?asSV*Di@bxSrPByyiLE{2n+rziKREDgqA z6A_E8iiGHk!1IC$1SW7@OKb5SB=tH1xvT`okMxAI7sqKP5d0$~EO2kAU;IMOhFmB@ zlG2Hm)~5Tnwzm5F`zNQ@*2+X8jX|;!H_Lg_UUh6P0SqTaxw0HNR`i39-Xs#u;l z6N_jyl1yForb=kh5ebCZ6-Pp&Y|u(Fg@Tv}ijcr@4OI=vRb;sHM6#E#rqid?ad03K zc}G5RBo*^1kTKy{2np1w(kOxC?&e((0TRUbxPUZ1sx z#X2UY9A8#KFETT;KHbUazJf+Z4-gmwlbC8J(;BrP*iAZZtgL@3~&&Gq0j zE38hzgl2LJNMt5Sa>@Wn9-gZMGx5SW5J@OXf(0ZdSu)9&*%mP-q{3j*kAbSrBfJ}u z6e^I`GiP$#r!QnCN+S06?HPN@=ok}3kb<%A@qU@|b>zqz?dGl7*1#N#rPqrFUu z3h)(}Z?an|wU`Y6Nx4$d=zyx+wn6FIys8wt4iSlGTwub!sK&!vzd`~c9jl-^vSKf3 zo9e>}iS_p>cU`p#c~E&U!LKn2R4k6|wVt)v;E1A05=anC@YlX)d9aX>2OAqAqJlp# zsd=SF<(2<1o@{Q)P=;qRu#qZfbsuV0_j0jaX{nL6*o5a2kzOQZ!VD~dgi6He98F%_ zMM&~xAUStVOyIZ%frR1|nRk>y#E>W_D}jj8vvMVF(N+WQOjrm&W=S#CkDVgUs9P{3 zOGH9{(AMPcx~G1f(9uC+i1}Bm4j?7s#cDQ7@={*H+2B!ES{{7W;{_$FoAz+NN?sLj z%(8>^^0;_>3PEg8kx0~lRlSAeQVvlCNuEiUrWf*vr;I86h5r5}fGNdMljoMLC}F&9 zCD}1TZ+7)y*2R&42$?YB;>@#%D3&NAawhA!dQKVHP`*3@Bw%uPtG}=|P!34QgohI$ zDWh_6t-)aEIC-9t#c0A}wE zOiW2<3F2*~befW@<%1JKH;=Q_O5b4!=6T}|q|NElq6xepo|lWAc(01od11b(h+s%6 z75qoV6(m@gG=aopmLc&}kpsp<;};~tr7qd|RBDXFAXkkc5R$6^0?)-he7ulBf1=Q; zB$|Lks7+7?N|v%Si~q97LIPAmLIRq0cfT_Tsp%86jEgGR}aBSfMKr(*W^f8Y(MXaY!|e~S}|USI;dS6Fr=$&Fm9tT0g@7rcLu?7 zZ(TiRKzZy)AVd}ZHo5}5Ds%*7q6WK6Q*t7M10$2HOg4d}AD#kKy^6Q3dJzD4tcwnk7zx?0s1_zI^*EP zMql&SnT?Qm+b1BAn0M1%Sa*vTK9Il}!ApQid7uEtXquTJ6-$5tZ|m+Rq|k$U zA2!7ffbvRE$U-zeO|NBR$(9^vJ{vS-Oz{3|)6R*g|;EIy@=;1*jxkA|fPW!gMg?K}xmZB*+8~ z2qRWtlWkWT9$r%Jx<;=B1EJCom|#dX!U)=kz}}~A`}|rp2EHtdqU3c*Oq@u+HF2hi zdo2>I<}i|BcE;Rq<@~Y>Kpe~Cl_nI;PJ85MWM-0sWP?N;hCHcF|3!Yw_z`7J5|XBn zxQ9bYt`y4R1MT$0<85_(wL++ElJD}mpz_XSmmRs|w;^?4z=*AU!;2&cuXk)j7g zyxug&%{-NfH-XGayR22&mMj!tBZlKPI-+TMy6F;qAHo75NX%(176S>3eNJ?`Snv>u zh}@;n$LXg7G;`s<xI2Ar;aE6%# zD@kb**}-TWA*M*Q8$;)-*Ob`0j$0GnCaYM!WSLQorF;eMW0zIA&*OA3VUr0xSj5hk=?IEd!_I z^Grg*pQ*et$3-LIQ5Mm996Y1iQlnh2Q9)b@(WNX`m<+8~nF)KhI#olm z9l;2*!oNEZ`b*m@*Th64ODbVWk!HUw##$O2R-!W*0u#d~l1=8=$ih%sTeybwTFTtz zwvc#}SBo}^#KN?BnSC=7F;l&K`SN`A$k5TFh|@sAwAYcKQGI~L8bCqFI3w1p$7pz8cD``+ZA3!64waL;1WfC3?WQfEI zWKc2VrJ1M&A||1c=YIr5DE`$%DEr&)#aAHilJLO4ZZSr|#2PAO!s{6gL43=U2oVKH z)>AjNpLcs&k!>j4WYIsVaaB5y@bjJ+3`UL^RRqTtMXKNCK24 zO#Xw&4GOEtE@P&+xMA7hPmBq=TG>j_oY_-a!1*a((QfBD5$OQhM!-x#1H;M>}0dXWUlWRVohg=m!I;Fi# z^7?d8h9oSy1d=f$0>OhpT=8ukVq0Kzn259w$#F?1Le-);ww^O2wFbqSoTB6M8CWAi z&A9V&ATA>^2Z;(JiHHOy9JvJpGJ$W6jzhGR9T*CNKLdHU%jDnNHKY<__+C3=`?vjVj_vjT3)>@K#7B1n2jV8pJxFRlST$iNaSZs00Km$sD`mf?1jBz4aBL6 zlq12|dB=n8Sw~$&@~~ExH6-m-f5ZARoSAP2yj4rAe3Gp@()_9 zFDMXVdq6S{BNfftSotUZ@Hp3v6llX$U1c3+%X*d%X z>(8|~vV(exv%6(62}oKMIhC*(flh}`UPyiiAR_V?A+e}SXD{P5^6TO~fQ10RxvpJK`4K{NV{GG83R?GlK~vq{$W`=|Y@z#;D5% z=5~R`m=q*@5s(-Z2tufyT#2pPW4lBotwh6^ETdm?9LPa!ABxDJ1|@CJ>pS zHV-o)56i!>Y;6cLs9=)Ad^YDY4T-PXY7+@1D9$9rcL(Ak6)#r8!XOP^Q_`@B2)zq% zC>?B(h^>2B6cV)UZ9RZfB@z9_Y$W7N)c0Bu5?`{i9-x4UkkFH;hI1s091PhUZjSjb zncz%aFcZZO?w=5o;J0kx0p+!ENkFEap9PgC`iYxKdKe;TQ2~|;6ng+)XG}Jk#yOH1 z3H=+$dNby^LQZ@)8OQQ-boJQG6OurLNRVYalICGMk@xDUPWb0jB6$mc4;m-TiM$LH zldy+`^9MG&>AcQuOSf=-}U0A=8nrMbK+GRXHt$wC_pYFB$=_S)=M4`@#!ELiFn+AjESy3M^He+`jj zTT`ugAK&A@s5vAIH>Ku^q8{4fm6lDKa&ntU@FMLC5)#7@xh=^iGuapu;5PGSbSQy@ z1>|GxAGJqH;=*CA5tLVwiKs{Hi|9&SAc5j~s?|blIQl+vmjO`- z$rF$57bFoOa251;XLiYeL`*#2Vq>MzGBdI7s9`yRhP<`rC$&|suW7`gKd@ie6c;Ixm|mQin%hb0l{qn;6q}?VPQCF zln1S{En^z_t`HW0gm)uZ7LwIy7n~M*WqmKLkXY-2YFdw&LlR2G$CwoFWLw-&!j*EA z4|rCkVU<^J+<-U}mQ^`a^xbTK3Hx z(P7D)wqlq)0tqh)IHnmx0=K167ZaGt%wZ#OBrXuS_w+vX^d96$3<{jt==hBdR1+#I z<`77BHdxtjKt!@c%rQ+IYE3>fjXbRuu8Z=u7QTc?ViRa>5@B9Qct;E(f#{V35+z+g zLb2$MRM)hVGf^CQOd=>ZS^c*--&}EFz~foU%5`;mcuZmfDBk?hS}%~c=+17Jrao-G zQWVNI^8mCoH=GHO?8|lXiU{}K;FP;|C}{x=ORa7Q-V7x^=s==qq6*$(KXNPs_Q@yz zhra1K3EcmjB9*72a?g<<=YsP)ugIMy5`>T)T8bk{&yY!MU|?imfU78E1@K!O0T?*b z51%^5k3d60mvlgrjr|NeLu1NiKm@vONOV^4DC!D!Jnc6*7BbnVY&~who$qFt?y-}M zKdp+R;j#@}BVjcYASv}!IEf!DeX8)f$OR;+j)~Kf5Q*Rv;#?a%)*fPuJ3p3txc}Ct z!EdtihqT6zNgWSedv(lju|={$uZ64M&4ixI+Frv(Kor_&e0bjw2anxQHF4aL$7~@3>9)`o2h=G9*;_28EXn4gd;l3uoFG<8Umm zO1^y%L|8afdRFz%7lV|K@|H4+^RN-5Yn^;@30EVdruvpD|J&x+D{*B%vVW+^5KVHKw#ol5_vL&lQ;1OyJ9jY5-yaP>e#?>4V^r4gv*QL;6h@?>G!x%lkxNx^gmI{)WlpUAm`B2%4G9OlevN)pW+EgO02#lO zHy9H0TXQz#B*H?Ed9Kxqt`JMafOXbgyF#br(+~rm)({14x z#iV7o(V`F%s#%D!++3AYfWks_nn^7YkgVi7Lprvk3$I}ASSaVYhFWWHfMofEr(FB= zTtLF!k~YKiAYq{8fIE>03C-jmF%b<#^84^xMDi3F7R&d~rtU%aC4A4Q?($bfWERys znBY-u$W2EAH8j{b_G+<8COA3~;grtNqj&*dcyj0@FL)X;e#b*NGfPq5(}imUM7!Ktc(LnaTaB zv*V}%C&ot|3BG^-KFq|K7?QaK2`0kja6)oYj!Qan5)YUyEV`L+MIGXV+QkTzb~jS;na0YSx+ zFeoAto|PHkweK5luzhr3vhUbAbn65~dwjLaXpZl!IZ!8}_|%MT&0rI+VA%tT0PY(K7Y+gzu8bmZnSbnU$DjrUD2 zAi?4NR49x#oWNyl%u;)28$^U86K(a@<}Vlt1jp5j?t#0FcA?(5bv>b;T7j{4T(hx5%CLm%e*<>V5VD298nY^c?4OxRbKk;vQV-8XqHae)@>MBZ(R&8(1Lot>D)wUEIp zuDoYVJj8rLCgj1t5Di5e^@U_9CLEHGn0VwS7!EV6LDv9u>C&YEGNHia$V>1}6n>dS z%gvj8eSK(V_T7A+OpeSG32!dqjU?Yr`bw{YqL^hqW7NFgg2z_ z`0Ngw@=qWj^hWT+-0(M8vx-}{ZQh>1_YBF4cfa`j=_l%7dO>1wg{HFEPsLPo5DB0V z2=L&@RZ`%}f2qp!3T81V9B)I@dKekG1SHd9av&Iq6M5r}Hv$udn_wl`yprTwt!KT9 zpV@4ov^U@(HnT!m!Z=FnWT6N9yzX>_cU!mr!%P-l3|E$hIerZw`9=m zAZmt$O&%d36z!%8NQxIVF%ytr##;k-f%A1l;)@&(>drFyEV{QdJ_9+y+J&j#{uV5P z{zv#iR1m4}O##c)9TL%WpcBCkYt39Bex3spbq_7=1;Fv0-EVH~)wmgOt$*SCIJ)*v z5lrxgVDbryco@g7dXI2lkdSbpJ&;f&A@SchiW8(IS|WS$BnSHK5xFSS;VDjh@ z*?MHUk{OJ`=8^)6-wlgv z841N2^aM&CN}IJspM3%u6$Y0`-Z)JpYIj3qA|xta*`l%g1EHp8Rf@H2)q(WrhyU?| zv5-E3>?<(gRekTXsi&}&duLxeHIDf}5eY~z2w1+3?Y(JMdpio)U@|_Adw$;9vz6ZQ z>2nv(gA;w1#gnH~qc>n2LIR9BQXMB`NN609%IrT}h7d{Mw=PZIMD_&hAO^(t_krZ* zO+e8XeH5PJC(zsC1tt)Y^u2#+0A@lc%*vP&F$bZ*C1TQ5mv07D1eth1!9Xi&dyAP+ zY$v#FYDbEKc!)h_2-tS3FEnSS``$1s;pM!cyq|B!@J@C_0wATrFpZJjoAT>ZU%U_w z=OH2=e=IKFL2zWKCJXeeLf-ydEeEZ_NFsqN@%r!Y_Z;5M1urIlcB2lu2T z*{+wBrx!3e1!zlMSULnIUBE)7JU)5{-4$=FjCyNcIUJ6YMj|9x>u#Yc??IAp3&|M2 z%lL4NmLP9+DKL?3&_~^-lX_ioL;5SA(0Ng?799Fkp#QZW?@szl4GZm<(e67k~Tl{uiI!|NOnzPMta}FCZkU&U6D= zoQ5x?PjiLIaHa($x|%9Ux@62+!KuD?M_Dpcvh$FL1R%UxO0jv=3Ran0fF}}k>8dO= z#$Y68M*Nxw0-1^AE({PNny%*~tqNImByL!4OW?V~O3!*>9pzE~U9!YIf_&hhJm7>8C!%!v|k|_3>9<5sC2NQIx*I4?q4E zRDS#(Oy0ZqbP7+2ZFaOF|N%r&>cWL5W**B>h`nXY{$5xTS!J2K@>oBu3gzj4L!E?11~t15(MyyHTgSizcES+vNXjJQt4(36{Y&ZL^tmga|A67fr~}DYAAj%; zm_UZ%13vlK^pRfi^}GM~&i7w@_S)yaJxe>mIRi<*dU={8&f8`bO*!($P?=1Is1}8U^MyoGZ|Va=z<(bBg~&jp z^1-*?ek(iq?$3Yz@x8zQ?eBMg!7*Jtf zY-eKh&Ye3?jEVNiO_vZ6HP>8;apM5;-CzFlr6XRv!^Pm%BW@+}kx4^xTj2skh~!tl z0+Rz%cs(Eyk$~iwAvt~elrs4RnF{x;xO_RRXOmM_xqU@|vLY;8s6dV`MSm}OQH`eynXQP$eTsn8|(VhPwk*^HLJMX;w z@;mRqP=o|9AbeAn^X<1^zx(b--@W_iAHV%sq&^Xc#|0R-CWK68Um9eL-iZRoCXqjg*4Zku~-jCYA8!KXJ7x@ zhm7n5;zVA3`Q?{C5D9$aW$IOkpgu;)_~OSGFYf%?|NP%S{rms={a>%R=MoZ4S+*1H zgfnTW7#++Har3J$o#Fit!+un@)Mn35yf%sweu6f#)$cR3oTmm7nhDy1|MXve3FpPU zx1l>r`)ySR5lZ^f*c`0SCz3NR#du0kjsXe%7Jz_=8%aQ-UL7~?X(_&{EFe+62MGv! za4LOO;GJjBf~#{{+VSS=e2X=BEoA606ZH}%`N>QL9f=mFXaxYu1k`S*1$LB-Cf8&o z_%Vb`Iaxrs`P+|Q|49x@L44y&F_X=0SilVW?|<%3R+#N z^nMH#x{-G_DO+8%+F|*Php=U`mbta?`NKK;5VY?Hu z&UhBVJ!i$8rp1!8NDg6G^9Rl6`+eUZ8&jV|R8%he^LyUs{=7W>IEf|#6MN^*5XkGn zAqg+JoK8YQw#vl@=0iAq$&CQ)j6KkTQ`XSEDSHzek?^pFtX%orbI+x||NTcSXP=Xn ztUQZ6a&~=hX1w+GC%0e!mw)@?AOHAoe|&u!b0S+JBx{{>bp=8FWgr0vL=Gp56jbmO z5a(39S`)U^dx8MBphai!BJY8!fC%YHFU?e(SI9NlY zIw}K^!^h$jt*7gg8>N(H;MOkMa@3){`=FG>yQ4g;EL%d4v^uSK>^L2eY(z&EAn{sB z>U8Z8F%s;En9L&yIjx99a-U;MhMoTr!j^S>W`)wIiGY}h#G^$fq5%LWz(aXLOcdym zlOWvMrJSOtM==8A#|RXOM0|2lK;&h?%zGUUZn2X)Rw%uAxbG+sZ9&IZ}7%;J)pXk|KDE% zlh?Z|E4vjPqa+;oFbPOhS6GJdS{~+W(z;tlz%-??Ok=g`=27$7655g)H7#9v;iM7} zi2ku8r6$@n@Hn9V4;YCnic3O=G{tmwNnyt9+H_Zm2w9dyOO)oa*+?=f=m^KwJQDtZ z!zC<7FcIsBd+>|36!TE*bA|{>26vwUr7#skXJH-P!rm&(6(!C~U=N9z$b{i{Gl3s8ZC_-0X~X@lp56hF;7-YyTSEjS#rgGzlmuN7lCvT* z2$H_a#it+r*}r`F<^TPU|NWQ0eE84ry|!lyxmJ*rE_xXxrD{sjI-JL~f>bNosQ=-2 z$35Lf0uv$mu?Agsm9-th<(DN<{J$SxGD=FDkJhl3J2sQpl=yNEz6tVQq_PQ>iI87w zXdq53!IG@y;3_F`JsjsX!(bc3YM6T`(}o5Jx8CgPqNpqPn~ zr~xo;0`b1P6XEKGgNP}9-t5eIe z{JE89%^(l~i444d{Na)H4or~Dc;yO^{N{gs^X)r-`ufZN{@(0#>z*QrtcA#XJD&HM zzfm@R*^iN9$3Oxj?PZ8WeyRa`UjP9SA=z5@y@Px!BBBf+?SMg2-YP2yRGNHp`6~}r z%G>UvHFZF;I7lSY{aqx;gGg+Dh~-=kCG~?Gk`YlN7dfLMgA7SXS|frIkkq0iAo0ZJ zDkj6j`e3(&?yl(I898YrMqb=heH4FFXEsP$yc^k~j=)lgfFx)R7KZ4*uBfvIBEjRu ztgp1~Kub8L29{$(ESzQQub@h1GB`fH>E&Pl!$17&N5|iM^Y|MprnA}U>~uFe0+Lr= zdFAxWI%!Z0YLyzJ;AT@bUg}~Ko)skQp^%}+ z5)%AHxLd;EU<66ox?@P5JD(Xi8)HKl48zq6G2u8$q6G_ zvN4#9tt-lnuYE00~3+>;97`8!r7(G&Jc-6_DbCyy+cGQSYN)30aZ=R8wvb8nIR%- z)=;!n7KC?W9*c%X$7IrvPe^3+i`A?rd% zi0Df!k6O}pLXuK{x(#6&Wh)CKQB)-`zKH4(Ac09KI70I&M2amyv6cWN)(}-vvBQO% z)w;J`FBnB)fNZshintJugmjioJ49%0#*kQEjYu{ZkVs9IB0{3hX>ueTD5}$*%Flyj zwY9{(cpxF~=bfZUGgRn&f(FSLNG0!~JtKJ(`QcA4N>AjghRt5QQpi&JaF;QU&bS)K zSu&yQs8Y-7-PfyzWowD{0;gQ~6ikKmSd*|Vzn&*q(xI~s5Q4JSDh3j7{=9&kl;HMA zA`>GaC+0#4M4XeilUHr8osxii(!)Naq@7ks77#I#?a`Kq$C6QmMSE2C5n&^ zrRVEcFQYA4{+4%P^Z4mmawh?CJ&zMaG$*6t>58(F)}c`cBncBdE{N!-)Y;`dX+-7S zcf|%Iy*(RclV)6Q?Z92Pr)u52*=7Ele5wdN3+@v1YD-6G-!PisjOJHg-4 z61!bq0v-wuzaZkRqP-9J7!u93*5h%(Bi#N(f{VRXj$O!4@+LMhw<(RTS%>aR5CO^h z2n8AvBOy>nCwQ@^#`6>D@QqdFRbHKltM7Z%%P=ZvUsN6PYW^2hvmN%*6D2 z*mjWo@|VAS^oP&vcv&y53T1pE<)Yk)OG60VB`~o^cr;#siReP(ZHJ$CNa(vpB=srI z5pU#*H=|cz$g3Gk|>X#TUnq@BI4Tzxm>wyLWHi z>=_)mvi$tu)I=sddHa=DE{e#ne);#0{$$6?i%<_Q7UAicrBty6C}t9nJdV=U6)S7YS=}9(c+`i7O&S7`Ao#Ww?U#42 zTL+U$pCWcoVFs0?twz~v=L3|aZP|Z>n4QxnHUhw;fF#tUJ3B!_t}0kEY`VlN?Vx?31SXc{D={Qvz!)7H z{S+R@zc}^VQ(t_0{M&E8{nMMu!^nX~baaj14@&YYA$exU;YA7m~WY-`b0kut-u!V1dn--RHxiLmdl|B)d?KNJ&ftv7V?0S3opIMo}6fPIMKTZ&3>h zp$LwOyYqRS9hZ{dYLc8NYiUu&#glM+i8Lyl6Nm=rA$nsi;aFKTtMdpXNCC(~Rl&%M z$!B-(-hBXVK$5@n_}5>5{lynMPkr&$J8yD$z4L>sfr(X2Rjt{DNKPNdY~jx8MiV0; zfpw0rq0Nb2=S7be?llbK1|UH|(h@f`rxd+O+@-c3B>Xi}L1k^uZMRpTCNS}l#VZka z5EJmlpNgsdrZ|0%U~tuqqxUp1-aY?MD(o$+8It;&DK@E<0mM0XgQ-Nv*~2V1<>&w(B^;m z`O2ZONF)@i7V1g?%JR|A-udXOufEy&?VF$8?W+9bcI!W0N~>8I95)F`kjZQwM_?M4 z>lt=-L*&tmFVobn;}ZTn!(zdw<#oGI2NQ2*CY7SH3Atc`e8!nUf|@`?{Xov}gQQ5$ zkh?lP1I58bIFB35k>s>gqrIAQJd0kO9#;u2bxH;%7a9+OL@7dvn`MinCrl7Hn3>)JfzpZgrv83MnFDfZy`w#M-@JSG)6eb_6W;&bpKo`) zJJgGejrF9j_D#=r-$$~Ufr;6-7rneg>!joaA1+<7$*zQvX!2P>8RnPjf0_1Fc&Dzr z(_S=^W6O>z@Ng~$B+gt4iLJYs)Yb1|k{tmFU5QDiP~}V{Tr7YDg?d5@0XQn?Jdp2H zSb=Lbu@MmyFHAL)$3y=}P?F=;0{UVxDw{(S;J9=|KoTTE=8t$m-x+rox{l)pv;B7b z9G3WV_+V;lh#g5pNudA=l9DQQYoh8#Qu_An5Z*6&-{mArKteoXg}H((fTH)DA07Sd zv(F~7)6@6g&SkHrd)J@uJ->c5o$u?~^O_0~_h+Yir*4-nI(%9epamqZc)9};B*a4U z_guIM*EgsQ8734;eaS4zNuDr$N0Eq zP3-&vbsRpnkrd8I)Fp1GQsDa9xlKkQb;A3TvXaLxy`3NBWhZwsn4Zd95dc?toyWqp zJufB#v!0^+l}viDC!c%o*Kbc}Cng4$Td&5_+1A#|Zg=X;=123lm3O@O6JI=FBvFzC zt@f#cMB#!b`x&jFVNj)C;wVf+iwjic3nWE=4OARQPb1fRlgScRfQNQ!gRq1;wu3>&v8WB=iaNJuUw{4f{p>^!N^%z6=_UWj2Y=c~?q_edzO540>5D&+$d)K& z9)U1B6_%W+3h3&Dmnm~^GP^-h69rOu?GlpKDpa}e0VL<7YBZ#4!>5d>FU9kf67vf; zLyMJPoZ?_=s~!5`Sj#s%gV&Xq5?r+4Y{|nx>}vb7A`k(fa*amv);yBOU=ooak99pJ zc`2;gZAbB(!`3t^5|B_^mr{TN_bL$|Tci@yJOUGhXc0AuovO@RbdEv!`B~%D|Xm!KX5(fWXe37Vxd>jehII|~-NbDnUPK8Z^ipln~ z9il$D#m7kYTHH$NP=EE&u=*M2Onv;QkOU8nnx8FC2$n6?$>Lpy--jwFT6q8#HTka` zTtXr>L5##WqJSji1wzWIoUW$%Ze@8gjh0HK=`A>Y09i+mRb^2?f;c+i043tDOrs?9 zo{;6u3=RNCNHSBClliF$^kh&4tx!}%c?KtQzx&(cl?P!c2vM2rM$ORv74Sy~WyzIcThcY4E(5p-?nN?c!$6{f&ta_5nFJV0Va zLBhn78mE(^E3Tt$@;pq22K3+`)UD;TwT(;7m7lIaViCy{zvW`9_8sEgEyMV;O;R4m z>1OoMouSf)&}Oc@h4V=PiX`4whwDQIR}Kv zAvmeIDJ3~Okj~Eic_y2=68TKPC(qH9<|s?K#>>0MtR!#GPESv!2M3o6OWB? zBqu4WE4SO|A@K^|;RFw4mBmnYUO-#~Q(9MzeDQ{K3aeOn2a!J1&mcyE$9VuGr=J4J z*1~-TMp94{EV$O=TTLVdBoHwYsR=*~1%Zp8AQ6fzr;#Wn-6{>iGIfQ{H=Z`c7$L!=(=DhviK|&ASAtYE5bcE^&*^>P1?b}$3&d%}lfCe4XQ`yd|m$s-# z=jkU7LL6)bU{pQGbIZmViRTNf)LYw-rV9~?5_d2OP=31$?^8&0Rgh=EDPajobxMbV z1W!>0f!Pz7ND5G_TLKxZkes%oMiQ<#Vto@&0%41NQo!LTQ+uU**|~mfu_h4W-KJrJ z#7N>EIGEJ>-}&W!s9-_}%Vix~7tZNtI6A0ur^m66FX*jK_uB+ThLBVLR+>q1t(sg0~o^pE6o8Hp_uO!jGV z|M-T&wtSdKA`(+sh(t^bg?eQ>Ddz^CU5K7a>NAa%6%Y{;pIRFbGik4Mz^aq$V0+EG z=hfni;XZqX64lh;)J!&=v2Z5MU|WR59b6!p$Y;@!EUJ!^MXjw{wgfLm zzNa3C==I?A$QE=o5(UJJxL*m|I?8pCh-*a2$>pW(_*sGyt|FC^98DD!In+`a8=8(i zWX)lcTo>QQdO0HrbNgBG+{T!kd_w)KEu4QGKkwqn01;sbf0q=bJ575~QXe zh7u$oSw}Q(C~?#dbFWPxYYCg3d39L?C<~Fm1aq{my+cUU)=|_+y7aB%SYkx3hImXXTd5@Q6&jk3Zb+;+i&s z9mi{@S&FkqMB0S|5fO(ad&xa{>z$o0F$qM31cNOm5sCFAF!84_5<9~XA$3B>n6v{L z$0QeZH?)w%8#|W>iSCl)j37DbuNI`J3BpN76oHZ~5Ztc4+a;o+ndL-`q#!j>O<;l~ z6JH8Bq$Z`B<^u`h7NSZcfr*f~i?ybmjAau@noicf+e6gBzyesXCp2h{PUS$++}zyH zPcxGcTkp_a27dx4Y+`~+?$A*07(}w2m%8@ssom1PeQ$vYqBALOCh%{SiXc#JS5d>S zCL7EFVo@T(drysI)hRBLNtiJC=6%^ZyWU7?stzO)1;0XKRRoD*O5K$2%n2KwOyi<> z2ubX91&Os}Yl%}@4HsPDVuoF60uhy>eHBn}5)j^y)5qjdANJFO8X&DfptAY9NX(>w zMA;GzRe)rzdSR1QAwIc;6egV!Nm1x_EvmgbG{9>Pj`LU436JNMnat&8`mf)(-aj*w zn^ZRnNC@Z8<89?9ge2Y5JCxzacy_w4uZu5^=bbhK#LumWSPAs>w{t=<_vM3_SjwjD za@;8&g_NvJ4@88-x2>*5sM8CHu08inLMfatHvyT+7BS%y`gE*o@{)^qH?elu~P>`QC07%IQ0BqJ$nvlW4|L=K+}qa!$U ze4Sj~q;=Id0}&zFggcCy_}`n!2G{Smqb0H=m0co&mLON`_<|*!o#EK}xVafKGC?9( zOccz^*~(8$acE^YveG>_CuHcmvNa&tzVISG1R_bLh^7#T@Ofb(^M}>r-4FhYqB9}; zXj=jjkCgZlaV2kgw>I~sd_8hgvPMe*@MRc-q(cTv0e&2B+VKDpv(Q~UUL(GZj~Y*q z;tqRWc)Ofjz_56KJ4~!5zS^h?CY5Fq9;slvlfkVZd}|WF4Qj%f#oq{tUbl>UYB6ew zo0TGzE(}W7W3}6NH)>N%W#_v?197?s^#~Qku}pSuCYzuA{NpUqIUbm74LUTK&*Auv z=ksvFuH$JQlD#B-|yUGTyE!&<6#~( zmBbs*@Yo32?Zt_S(>Y>S1QQc+5-TqM2#Qi*VX>N+38JR4ILhi~*wBg+9w|YIMjq?V z>qbh6rtEindgqDgr}dKFe0C}`IG)Q*$-Tp=7hQ zeAGCvu8)l!cOQtvOi*k7+)Pj?J#97UyK)l(DI~;gEVVEbb*7!t;wx|27m~0}9cL`n zB8l70I(W{28)ij?MENX-hudu36DG$f<6C_Hy++BY^{Yb)(Jj6%h}oEsN}0d*8ZnbL zFjt4ue@pBDgNWLR!~PH372XKMJP{+|$%BZOQTU(Gy3ZG_gb*Lgk_@fJxMnkleB+kB zn-DP&BT+R`f?L&lesFx2mwz^wo9oZ_4rT@^-C|gBlcZSE+72OuGd(#C6Esgf0-j3R zU{xrH^%`QNAB2RXOYgBm8Ls>>6AYW8{m6uju)Ho+;*Z8{Kb{NNms)ZZ!B3TgUmSEF z@weRM9A7B0K;?j#xKaZWUzE#-(%2C{Qd3L8;3H5Fk}dGk@59WwRcnF7k#AY~nuvs_xMut&qwEkVAo0L)$$WIY9aJB#h1MxCW4X}2_aDwU4rFl zKO?Ci;y-!8!AjUv4HAmJ8gzJ^Rw^1fy$LF%=B{OQrIxx$lW);XjO1J>#>7jo-LV&t zT+{;JB~Z zE@De)hxR}qBgL$dMGjcJPy&W(aFa1FWcW2crF}Z|wxDp^2q=U^eUb?h-NT{Ki*5!d z5^d}+M?P!uTr~7q57+h>}h&B`(*k>r2~=m`FhqB+OX#4B}zsvvbXJ zm=oHwQJJ~xwQIuzO|`4MkK}K3hplF?Pp~>_pNe}aOaWSgn)nvygo&rB5+uaGf>O=2!w!%jM&i3A zwD5Qrw}aT&@L@cw;w)paeO{L)ZMeKbPDALPnjr2L5)9)5NF1v=3=1O?1`&Z+MPy=a zKl!~-K}2o7BzX5Fyp)8C0SS{ezREz!}JA$uVUd%%fV@p7R|rnfh(a!DRExL&uejWlCh`iboOKklE&5lZ$C z-fRSoW~^KA;aP~NJ>Sh>AyB}L_QMKj{$ zFG#j?a?u~VQB{;h<%@*`vv)b!tJMS&w1l9j;5-EpobMv>ktS=u*>Ql7oQtc%&=Q9x z<3po?fe*@|N{C4N& zE={>2^0`nGC47M43S4lvqHc_vhwt_=6T4jA0}<*;70y}h1c|nhe2ECjZ&4Gih4OAk zGI$`lcyZ0?1DIzAaXfP-VkE8M^xoH{dM z;WS9}s9;M#qPkX9hthO9x?rL-vZ}UDdn>p7Ad<=iijAp=$hMdWf;EXqybGa-#k4iq zz9ESGH52`s^D3i?2`XYqXZ!Emdw&GErZ@NIvi&1s(%j#Cz28VMC}=2svR0D5hy?QU z5?VGTfe6127yHCh4)gBD#3X-=nzV&=V-We99|;LLj*8unrRv=y2@`^I;&9m$A_fnG z1|)8{024EEE6NYU#7MZ8LamEtf_OIF7rx=a!Nf>*8i|`*!?HH3N!?b+x+}S)n0IZb0rUvHse;dwszfI{~aXJ%~Dzse^=vgQ&Zj= zI53rKzW4sUd*}xshOdp}ve!rM@yq7^;Tz4(!<=C^W+q!}Yw?5qYP(Uk%Sz&kv~9bH zm>6#Zm`gAzsEHToNt~@z%B%PYVTq0|?NDRAnhu?c-6;*l$h9i>O(d9l+4u&&{bT`$ z#YmbK$9PdtJiU#5w@c-ejW@~bhDs)HR8+>8xQ?&1JovF2-eOo>zk-j#{v41rlDq~< zY!C}MX%l%k5;KX*BqjL74hO=?B_tXIXF7|a;%s{K{6mz4+EspXrhjfmUGM66L`XE| zhTj*Gdn4DtaAP=|8@9?cH{ZB6e0})ZHGax=fut`Y=`@nf`s9g(;r$>m8JCt^0txmc zs!38Fbg~lJd#26{Ikj~cB>{<9yof=z4!eIZoE|Cm%s-X^^@z2XU_=l8rbNS}a8o&IJX&)V#JIwN_+35+wk-st_B;?7Q4D+(*263|{vuQ01%;c>k zhA`YbH^-mym;Afo8{m*!yEE5UTg%x5k)$mXGh&x~gGIP}O~%AktIBvl0u+dZVA174 zkhr9UX18Cc+xmpET-p}yZOM#}Hl(QEtIroE?nTmmn~iH~qhy*AJl79q=h-i!BOX1en1PNXm zMNeV^jr2=&wRjm)0un?$qgB2iMoWhdl$I{$+XqP$$HZWB&a2v$LcqwDBwAuMF%t4K zLV|_&nq|Gyt9kYEGolNUr9y%qQNFc_%-2CV>AugRK@yaZdk<^UDCM#$tfXG2~ut_0tZwC zB4(myZtDY=g~5I!2UnS|F4V%)ux`CcA}#?*XgP_+k`M^KW@P-4WZst41|;f|P$T!E zwVzD)$e5pffC#5nema}(AwnlMpPM3$qO#)LFg&Cr*Hp`*n8l7}iX`vm@wtoyCIGo} zW8~IkHuf%ide2B?OCk}pzaDB(A9OWO}I78;F_In}}s=2~~M&p^A{| zVUMP%M;V@pj?pvB`9^dSh!hqPI_TijSA~g5{+#NUl3)=DGLK|M3%C82&Zfr-EDC{P zPkJ&pgEU_od4Gg@I}rz(!J#F=viB1xPEK$ygIa`89>hql35nFCuZs{~Orpo7n==w5 zyfG53ls6KHB-6>3TNBnOP_ufA`ggiC#rnRHQ%^H*kJ^CSSAsF z$A8zed0JC@26_fjBy0(Ou$e?8_im96wvr?*{zf7u7BevtGZB)7lK>D=`zZ&)1veCt z1?Q}l1zlxP5`=7FOLa<(#4v#zOmKzQT+~J!a`jb}%04Dyj|aP}OBotCJmR#xo4Yx8 z0Bt1BdTGQMNp4S5O+diflVtkkd)^UAbpG!&%btL@6pV zl6&NxQB8~lmZa$WknsnQAkqV@ikT!xU;>hah`vN?2};5i6!kdqP!-u@LbfVZ=rx@< zMk(*y(x|w1>aW;Hbb`=uyoqZkg6u&OH`Ip;(ikOdz7`Q9QB42(j-%28(z>7cfnVcloHIez@)9gEp6_S$Gn?~^7Z)FhZlG5iK<-OT@)r4{Fk;rpW@4 zVBLk}B%NCzIf`Oy_75Z;qJc<^pEr}BXS}>+QDvIFz7q35!d8F%GBc5#yCDJ(B{DLH z4&|^m{kLvGWQ6w>koe@1nqWjC5!;ejGC`bvBW?+M#R^D*_fbQjjOXzMIe&-1@fv&&FF=GxQyHYiRvTtK=wD^K}iZoET~C;Hk-8fhdfS9 z?$9w5%4=p~97u>L<6rX~4BqbMfm)a-8{&qnqeqP-2zT`Atgq)6_5vyz>$d9JF6}-A ziMZ>NOHpDEXzVwrnYUSdp5OcKc${F}YPD2Iz8406Vd9Ff8h4~2a-k8cP82{y(XV(v z$?GI0iA?z1%3p=CxE6PFfCM6%1xA8PgOk6vqM_vJ&H;9wk;oDe>_R~@lQX%gEJ69h z)nuf3ZU!U>m8-eoh~!?PCHn8qy*s%qG(;okbkV5ffbo zwHN!4TrGy_KKv8{lU*mw!#m$oN0uU5-c!`bM?H9^?um{6nN-Q@{UsfjLEjwT<*0n^C^vjYI zklcx97b#*j4+S6yXJy&uomS6KB`H1wQE#1Ead1C9*GrP&@1kOQCl5LBWP|)5<<);o&2Tk#axt z*uXec?0(EeOEIyU7zs+Uj*@1qXA%tgy6rfBXElL|didkqB0%C&bM!=FUs$WhLx|*~ z%Q%pa&|T-Qad7n%xG4ppzlVs3GW13Q85L6Q%rLvSCkjO9Ia#6YZ#1IUopIN;4%4o} z1e4Xtub!F&V!_TEmq}Zbk)r~Il5o*qxY=YM-%=`GR)PNlL>{@#6?I3Byzzu`>p~L3 zo#a-Vq)BRnlWdkJHQR&%hInXRCxsJx^sILdi3nmM2uD~j_55l;RC@9x6d$4`_pZ&%-N+4P zn?nsNisN_0Zy<$NmYbb@E&82kZ%5Tu7G@F0l~=c+_>|QhEIC|?0m;0_3X|Bl8Y1s= zB{*CN>04Cbg!jAtoZiTku0=q?8KB0nb!W&G{#Ho#QnEp;Cb~jpI`)UwD26o;Z}s)| z8PvqB;K~ha=WIX{HW*k`QBP_j;=!LKy>>{QwKhnF7usz`1O*=aubmT)O>KhC1m?Pb zclUN934NbkS9{dqAb|$|t09{oLZkysywa01H~tEUf)awmnRE^#Vu?Q)Nfg6s&duJx zA2(F#?+pA)NHSxrR2aCkS3gSmuM8di*7!?t{ z$F&+(oxntWEDM0d^=Zd>#7xCa$`HmR=_*)H40$NY#&F-}4GEI2OG7qkQ^kIbO? zOOaEOo&L`MKV9ekoON~W|0i-Qf)P@V2paAnaIkuC1Cev{;&i4=czTWS>_Van7r*BPo@^BG9 zudKcHT6^uabQ_|iwm$%&5x?4$5#%gb50a0V61Z$NNFv;cAYPGMLgFBGaF98guggwe zI{Ajv^B`gWY$hfWcV4vT0E*h7=>GYua^D3LU0+PImrTWT)?WY#G8DAdI;k2~BqF*g z!PzL^Tqo^LZk(X5F^C9>QCg-t*U{X-AAMgD3zfGhHiBC*K1t)JL zoPTvZNpYyIw%q*y$Ez602lqYq*aHhEE8cQDA2O#Ng%D}%4M7C|zSvv#dVV79*N6|k zupWNn4f&6y3qbN?UcLkoI>YJ=Oh~q;mUJLlkat{CE@DsP8bQ)E*wqzGUO4Hd*C6qb zeYYW`GZDKY5uxy3^4%WG4LZZ?YrrMTl{{KvQW<@pRLP@qE@vojfP_PrO?X9F{1-pQ zpR5rOxpSLHDIxhYZTx-Fos~fT7mcdPn|X8eVnILfYEvRGs!>2Z4Hw!)*cZh=JKpnt+l0txec zH{LPLoko|fUfa6LNa}@E5)s30U6Tg@4|1x>wu>pVn*V~c6O;Q_fW$i@8;Mgvq+o(d z-1NyiF*^`7dlVGJZ-IzL%=jaEbAc$&NY}jB6`N>+=Q4s{d{Mih^~9C-W6?i86LI5> z`DrI??;dtSQ-Q$-R-s@LAtC9M?>_#V#Y-xz#MNBd1>;Xdg!ts+a?jRhpJnRd!d(w& z7|GMmc@l=}4OYn4O5S_XXIy5&$vtCAYo{@C zQSG-QRCx85lS%~q=chs(3 ztY}9CxZc#oeP{joi%G8;iL#ywPLz1w4ic?fAXx?y3nR!D zge!3?dMl_P&&UcSAGuIaOdg%p)_i^dAjqR(Dw8iF9h@u#i4B05U3rW1UHNzuv6XyI z?Qf1p0*Q%Gq*5T^EnfHaG(D!$D38AI%!L;jAk4Y~5s<*dr=n4t8BAPqCM0HJEoE^w z2kS!w5PWy(BaJ*DMv2v%NPOnxJKYq0^0L+I{by>sw4N+yv|>sTd~0IT6-YD^ZsTje z+$0l0E0!rEz`x1K2a?Rh5)(4~64*2_4k9)y;V}~ZgZ@kUkQO+>L~*H+{9iHIH>J7T zL~J4~RxuuC1_;7NjKXyMsh>hgCKPVRABZwdqaT%9oE8+9ij!FB4L>+&* zox?E&+|0SO8su!z;lW)eiG2X1e_N#+C` zvE8B;LT)4@@x!-iKm;V9$w+WQawZyqrok{6%2SxgM;`&ip`x3Cy3GodO5{f7E;FyIYgM=s#S#6N!nk!3UI^B~_K)qcNr{jsnTr zJlOR$*W@$mzCMm~n$uRB(|vV!kvx$`={QY|cKf4kzV#Wx)%p55Oae(7zo1RJnDAdq z{ymti$w(xS;7S-H;)UzZy03BT5GgUx$~2IP03jTSi2x`ITJ3$kmwNvq12K@Sw022} zNFd>rio8_$s8ZDOlBu&&H&^vD5fK)Dh`2z@)tmVQ+R=MeVbORfB4QvXP*ME_659!x zKceVmq-DAJo8FrFMM7dAD2)dd67^G}-UOdNZY%XBol13I%S=`xnDTA8VU-1eHx1i{2e!oN!(dBsTfajWcCUGtA=--}G-&&V^af(D;*iY47H zNk}d=4BZ_17$ns}VSZ&J5r;sMit8F!>I6wh?tX-)g#XZa4<-T-r0W4rPFv9pv8XGu zQd{aUn+OJf^XWOME1wUS;`z%x`9jru5*GQM@?iGO)kw6jdX2sjcrlpxd2Y<{AD-Xy zN*J)C%kG<)8cGBucP}P2xvV!SBXQ#wg(r~}p6MmjE0+u#B#0ZBK_rmKmB8eiN2j(9 z&?_Dyfy6}AbPgn0VIH~C&PZB@ZVle*#KC8i(1)3L-3k-IlQakkQfS|)l?)^o`!_xK z5pn|C=@5I(T*XLoE|j4xGLbb#(p-&XO@X8f!9+;NslyqmL-4Lg>{%pYd}7KVa?(gF zowU!4YIx2)P>uUX(Z#?>)CFk*C+lu8&tykkM4{(Rs`YhQueCvGcOwxGt(ft@r;Knd zb2*g$j=_s!aH?wY)aab&-)V_t85z2mJ$BGHjUx}-zKGDwWW;kg6C z0K}Jx2;v7rx%zD%Nc84#&!z{(!KZ*OI~a%LrFi0~wNg}%qFH#ccxk**fuu!H28HAc z4mvC>L{sEN#Q!a)|DthuC7LmkH(-Kr+!culit;WNuF2DlL@lG;NH7M8kZ6d5Fo=Kz zdGvx$P2!uwOBao6?f>lFkx-gnqV^kz zWLrW~W4pOS?K~-}pwT^2hZT0kYI@@-FfL{FL_|yTnNnHad&oO-+vm$R6MJ_%_;E;n z&T2dTc*iK+dm$3LEH7DJv!Ibx5HXTs48!{^-D8{*nh5t2F_OP@b|xI6gTh9#8peis zliQ08!*d>VET``g$?5wmtRccZTN3U`z3z)U!2|`;He%rI~!7qmhZB_7J z-sc4qjlf)#{?64%Jg?#91Cw`gfv;!m_OXK^Vg(Y6B-SjU$VBFg2+BZgC*4Ch4kIBT z1jE(uJ~ogbQaF+d5-45m>m2T%@}NxFM53+`x!eyV(WAq?j-o!HnDr$l{|br3%5|fp z#8+k#^S^R_W2qEGPKpu2Mj{#OK5dM}roWevB-fpq3A;hj146<$F04d_+jmQ}I;JfL zSD~>L={2;SVbf_w00C-YChLh8{ddk*f~kWLcBpa1YiP4AZaiX8H|v0a>IAH zTpnGs(M0quN>z-JER)Pz)r9eCUn_ zAsX1%lCN@Zm(mczYac+l=t0JU3yCiLd448+@UiD!Wj%cQh1#BPYL} zt-weMUy@_4L@caCNM0|ISVD$^oV*9W7wv>3hjRGs9GYO#IL1F?8QF6cZUC-XTZy#f_ zj3iqQvWEOVufkZjtYeOF!0Be&r zx1SqLfuvzPl7_2&4H(H#$L0Rz+w5)=5=B+735n;;(rk`u%~w-OFvb%WNMZtU@OVAT zW|EO~ohY$|3Wps?B=*1J;Rc2(A9bUL10YF_p~J;UODj{bsJ~r+kx`~jDPe!6qB<7K^ zWF(eR#Os`TZ2$J^RXK1Y;nDMhWJX~mPH@HRtDOy3%R}XkvuE43xn{%T)gJfKt!aCy zYnhtR9LU|X3nZ4@34ePl8Wr$QASukG1d;IX`YtyT6<KqLVvR<0`vNeVKQ={FOp)`zcg zi!I%)Qq8B!fFM$ZB!F0~U-BdnVYz|`Na&7F&8TM8)_80})I=z8Iad=V&{lxln~>;6 z{v#i;>C07*(T7)NsD7_Hx7J2}O9Rx-c%_8Id7Ni~=_jjw(;z_5@F^mg{) zKX}}F?2&sXj4S)M*b(PN$o zEhf&q7kjSQ7JvFFy}c3>{d|>`a4kr84VJm8GZE1s*Cav)g&4CKJvA-1-Svp4BPe{h zqpZ74y6pzLt;x>GBQn5z!7R=RbUUrHbwyDGm9(19>Z{s}EP}{BRxVq~I3x!&GtkF4 zs{7KpHLLJ%UT^L17`=Vz{Tbq6dHXxR8b(NMf2Hpev9oXKY#0U!id?S}TM$7G6Ol41 z`hZAZUtecuxu@LG-&V68Br+3Z@9qF?g7-AKYT<^vEHq}~BPupkmJyIu0f{N4uQ_rm zkaU4W*Me|P(-IP|R`jFwkqBbsC)?RHLGCd2Xe3d^=L1KlfpzHNnUn;H5J4WMHBC`` zy6#!08s%(Qo}fR00dVx4qS1trpr>?}$-)(4Q%+tp*ALsRv>M5157*Z&-NgZ71xd+B z3L;=I5L7{8IN|J3`?r7S9A+^JBYY5jL!_jevw~E=)8(CVYzID9`x39bfp<66Lf1-Y5aLy^F}@pesi^^jcwA9SdfI32#GQ(MiScY zDdv3Wn*q~Yu!`Ocy)?gM_{$7zqsmA?Qdo#F*!#~&RP>%zIQyG_`Ft2>VmpcSJ4k>a zKmhUke!)j)-!OJk?&;__+rMBjNK(L{yrY|&yXU<9iHyY49gQR=dTJ-HTLxaE@+Rxo zUdO^pQs^QeAd%Tw2Xcu!rK;YcDr%VEKEX(*gFM=e>R227;t*e`f!|6E3WEtFz#lXc z|8m{FqDod5VnCv5dpGA_3=*YWjKr?w#eG(Rge2&8BY_E8Nm1CFYZH>!TSta^2U{*3 z1Iaie2_z;WrRj+t;m+>ZfP`d5gz&e&`+H}(Jluza4q%>+yu41Wl03zPo6P_25#RvffWb&CsHj_4(e|b|MJ${N@|y|CcIxo?)4lwFgk{A@ zye$HWE3?wgb&mpDp2eYuwzRS+eu~Tj-hFBu?`nd-PgJz<_<9m@$DP{4(-M)b4@~D4 z5-DRD$%~IBB;ExREEGf|h z5)ly+AUG3`b@&S-@ym!#K+<;=PjdO}*>^iuEoBgr_UTB8pU_4pF6c`hHnJ`1Zc@rN z{q5yK@aa|{i7rub#&_e48+62t`+lArNE?6x@5)NGBD zUt$yLVaLitHz0ECr=00lkT^^X`ROD7D49!s%h4h^$==S7Wh6L=~3Pe8D&A99M6iwo@)hAw5>H0okW?5`^&hA$0009J)5aY@gr1|V7I(|Ih}y{L^2(A zHZQ7gWTFT}I4+}D&`74k!c|Hp0umo-!$tB1{hu#;xK^H${z{`G%urC8cLry=1rixT z!9$A`@Aze*uoVqeqCNA~kB7f44-W?t2@t|yBzi|gDp4Z8u-tDX?~c8xGBWha%xN5C z&}J+e(X0DjR<;u4@-&5(OJycz5nPg|k98{(p|s9_j610*r$jiuR_#P$n|7zz&Qq=I*}12Q#}_hr9`*u2U2ioO~{(gG0Jfai=N;A+qmh zELh1pbYNm}wmA#MwRlBEDgz*c@j`R+*ex11wTsBVjYAR-Jdi}qqZMzJs*tE@-PHz+ z1SFkC5;BUs-O5NDBbJBDLnA`+Zf8f0ki6#uaUtQG&2`Ief~MO6%Mnb31Rz4yom#+U=^Jfh~I3Ci75B7sQ8Dv(Usd-oi|3uzar6L)fi z2-yZUnA5p0n}z5T{Wd{D^bjN0)i3M61CkQj*GtsudT3=Lr<9cSNt_p85svUmF{QCBtdVW!)1sFMy4 z-0VM1zey99U=l}kf(Y8SmSa)}?#`<; z>nRg<8`BMxd$W|nHCed`%=ngS0Ion$zdOBDO+Pdc9x6y@0@FgeFMXJsd30Q&FWD{@ z|NH5nLJJj;y!4@0EsTW8$l4!jiJNLobW%%g2-Ud@Jz{^(Wg+@b{tO`ZNOWO;QA}hb z|Ad`hujnZcUWdu0yOeJ9x>aQhRjX7o2A89nm){67vJ%#=+vRE`<^c;!5CRD@l5+3Z zNPmA%&*h8HfA!b1r?$Hy)FrwH4s2sJ5)iLknaPHf&R8%1ZX(jgmlqic5)pX_*7OJ{(j?%KzUS__=a0Xa{`mVp-t){pTIU+bHJM)2!cpP(n$jN#%TYNo{4i5mvo-3x%UtK)buQkguVlTl&YW^rP7y-;{;SAOoD&tx{OQ|I8#?Ndd{CW&$K( zB(eyD@Q42eLW&=~a$O~Cztz>>F@=`nmoHyF+j+63cIGR;_=tXH_meX^T+27Io*Gsn zBGpLT-c?l!FyT;2}>L-vJVsK*Zx4Xj88RD>onj2}267k^e-2gcOUJ z{8Lb#dT_-jLzk|&Lr!xgG5GFExD`{nFh6(ZA+0lm0kb-;fyGKO+A4D|L10?qScm7j)^pTCr$F5UY z!ee$xBWSAJcLmA}t7@5wFY`Or{Q1|1gru5DwQIM3i347A_1l|c7w6tRX;Mc=Pshc+ zp5?36RcW%DxlGgeDBqt}z^H7jk%*FR`lsy0diQMRiUUl%cBwh~JX%Yr(UrSxKm;J6 zk~??>5EBU`E@rDfq;f5)?9fpRqIQ)3TCmcgV(4)pLF}Np9-&nWsWoY$LOWV$AkRp1 zj{A*_#8!fZXz)!+)~ly61;BSsn>Tv>t{L+WCL+Y?uFI}6l!)9j22{KbB$kl8ZzIWO zl7XODxr#G)y{jUKk(IPE~46(s}fSQIfolByMl?j7%zV^ifTub%BXUHbms6MY+PRI0x3ILJla8sf%KkIJ>uj zC>P9-@w+#{#QEf{NXLyv!WvhFWY@hP*tu)K%6-oXNZR^J+^AVJc6X;+5}73`3xFAG9ou?4u--ESctDgG8Q$j&<6bxp2&V2q*7)3?wXA@OUxV2Xcf+cb1t; zKfU>xOXud>NOC$$is$~Xk@yE=(`%4k8Z#1SxKQE|NU|ddB$ALE<}Sd*ri*B#xA9et zX7#luQsp2a<)_ykGH_`02*d7WSl zJ;C?Y)+R#5cgK2r=WRPMbJ~huazaP+tDytF3J{Gjvq#Rsg`W~kyr{+e6{knkxCxK| z5s~OTC_i6{yT5K3Xe1nf`M%J2BqmagMD&a6cV6wxM5ocX5ISxeN$Po~+Y0Q;#KgUl zIHhFu0tj2K)VO)_tY*}v|7!4Mct$*Ari9M#TRZ}pYd-ciWQIDWh6!BJyR%D zAQ>+cp*um#P)5>OAhCo*Z>2lD1(Lp@DI~(DPP}~a;@MGJ&#&M1+C#sj?uM3c^tVaQ zWJ4l?!XukX?%@UksTzq}t2inth^WUvYpF3i5fqD-6eH2(A&OdUuS#~~Ai)Adt=r}>%p6e z%kBs-)gqT7s9n!$$_BmJTn5Y5IEs`Xf8*h$CwgzpHL>g^VO(`$F27 zL1d)dUqp)ETe$e=a~BX5NT{eAxqI>okUY`TQNzQkXSYPH`9pI>gvlH_Wo6x}5D9+~ zNYawS@A8tCkq}S{iZ{S!LLKC)R+B3Em+>ykRrR1VAz{)i^*U^=QmM9!Q7sjW06YfV z$i%Xh5R-B}Zlw~wn7U?UE;AC$WIG4*n8w?J}uiXE;u3NW_gw|TpU1s1%?1B?1ElvL#iGDphwM(~1A(Ge?k+2fc$Xv8)>H1H! z;R1K^34Bo)flqv+LJDL+}RLlKf$>URhe z7Os;JdE?<_P!ctw3B#&GJf;5aGe#{nC@*W)U0b`61KUXJsD;<;wct^C2Pfh7|mG(=vs zEXSAH6EIGXX0?V9dIKVEs-+gro>w6(;j}y(*hD6Aev&R&Yq}D}E6W~y@R0{z)cDg6 zxZ|Lu%d`DGT3a}v!b{K3$oc|bLN;LesuMRTr8@``EnBQx2Y&>TSho(wJ;e0*3nV{u z@3xZb`1X!6GLkTpNHXdLMG;s>?pCK@(XNCV##0+u)fe*sd7R7hSSsy+@$8_m{4hi8 zk8CdBU;*MYSmI8vkpz>*V8V?5#ct$&s>JUKB2i_(DiLX2+L&9KuXfTz_4AgiA(eD= z`xffz_)|?qwU66^$RtnBl%=SYe6_|pKJe&MB;S=OVg3_MVL-z2#TXSaNg{2eUe7br zj7;sg-uUp`>%Gk_bpMr=L}f2X!X6HSNmq7-L@pCXyQGe@#P#a*p@|M8=HHw7;jh2EIdqF6A^DQh!K^?6 z3Ea#3rWD)Z;30jV2uLoC_Vo9Z&xUjN{;IhD=K2)vw=$Ach}v21=X-1Jh6`U`JJ&le z^*r-Dy}f&dguPbg(Hxe*5@RK2o*ea>LaW?Q3j@i4j9t8u)U*l7A|rWSNDNrQUnf_? z*h%TI(!L%YL&(AHP-bHJC~*$m^bTRWZba`P@g}mPsi|qd1QgB4R-OOC>ARoCMx^KH z8o`Q%AR-z+M=|h3`>z$$=h3N^UP5+)KyvnCu>(c`u|>cpkRXtx#jLMq4)#8!v1Q=ejo!u>6w#KEq_Nqpl4+O-aY&M} zwAxJ41%`C#N8Y4SNRU>&)HU5c%1FH4tw|PTpJe%T%t)eQ8*N9P2*aFlS`P1jtZ5R% z!0hB$!aPDW5!u0Do* zHfcQVW8ABow%|&4%dN3)xo{!T<|=Qn$anE+21wjK5EMDz6*PVTgmR%?S2diiMDF0I zT=j98d?2A_+wa(w^v~h@Y6(+Ox|@Y0p4<{N0uoQn&Pd|g8%Sbl5*GiAh@|@qHWQds zNBc&C_vQ~iRZ3k~nvq9sRI-q1K8D8S3db_yaMjnNX$)`Jf1Cm1jOyKde5auFYy4s= zjuerd>(=euxqsbpluTtIdf?t?jvl?|k7w?==jby}!z7RJM-1WYfY)6YIJtw(sptodG>f&)&Umxxx^hoVHq3NTPjUqt~S$Ao0VFKHFjvNDRBC z6!A+j{vme+%EK`{s?~E~5D8o=u|Wb4BU!g|5}G)XCars!GdTx80uq?4+kJfV=Ht7O zpipZ1G&wBN?`MvF@C;Lz=`fad!VnP>ZG<<010O$iVbi)JN6tR~*H7BceMv;p-A#KZ z*+pc6@$Fec;)Tmp5{LpxH5p&4{_K`+?3B+!#7HcGFcAa>kYpwR;or`V{yCH9^t84Q z4BYO;y~if_RNDwhG!8gFJTtMH6B2DoZ77SAw@y?2KoUOQYmuP^5}0TcoK`gBK(JMX-+<(NOo9k6Kq4}N6uJ4~wz(4y zKQS_R?O1zrZ)zjYF4$A0L9(1cCB2z)Ak{`v$Id4BS~fglC)bw z5l=>oCgG4wWD2Qu*Kx(j>c@6NL`*hYr%!L$a{361Ra4W>otOx30R$NQiY>Ee&)%|U z&+dD7@0mUOgAb0LIeK*VI~64E9KnJG=eQ`um6L^&E}ygSkgo?xFd=#eByu2`Yy%866}eE0 zLDxEba@$7b*SCU1!bl`N_UC7B*?j!Sk#*=eZ-^D<@eV)p_Sv-j+NnjOJA;K7ryWIajAqek`%1ApvKAcV`& zK2DD0V$X$7n=f?T7%Ja7|8-Z(0LvCg=Er8rS#~{U-T_E-+R7&)fux#=uLQLW=@u14 zge0F`=_A183vogM8WW*tzQ1kmlC}%&KbqgJ?N&lkZzP279#mnMV2Mc_g`k}K(vB;d z3|;W8IMp2fh75|gQ-MTABiM~XqC{p8@kls@CQmQi{@v=6jjzuw*MjBhRj`l*q?MC+O4 zh8z(s8U!DqgoNMTGDhGIlAK8i_pT4V1cd!LuhLDENJI9G%sbq+_{spfVI+&?hzlfo z?krl^L(c4ONI+yk-fcN7Nk~|pj3f%RS1oor#Yid>O+gX^iXkf?NR3UHE#TRSMlx}d z9{iDYLW1`tj58k#i#eW)aC4A5?P?guAGV4`<$DnUn4G>3w1(@}*DUTHXus6n-MieUg6@Xx%p+L~Gg+?fu3mYqs!_ng z_;2rzlkfJ)h|!!sQT>weTY@EK_oAtyF8ewrvAB(k>*Uy{3Oy~c_IP< z39}|4!guoVb&q8vn91{RS#KxHkc@=)K>`yYnSK1Rt@`!rKmt!pEEX?3$wKyUz(9Q7 z{K@le_09aXTTa{@JkLDpYnQsOcYk(lJ_}Ri+he~~LGsfoB4jemw>FX1xqLV*L$zU<@+NJxNG5UwsOQ!5q`<_E} zjf<6#=c73zk;UNMwHetb1TPA=Q2}Cru7bDqeBI}xV z5P2x0$fgQk;%CZtds?_+bwU7<|h7Ov%o_EL4Yq-LJBWKjmW7$lO2972&7(Oq?-cCLf$6_L}Y+2INaGLbFs zu;toq*_Xfsoq&A_) z-m$^WlTpN^;^!U4Wx^SMuOswom4J%O`u}A9BiatG|L*%|DYUDgA$y4+4@VFwSMIdkY?h7Uh z>TCAyJbn7~&Lwq=N&I@{VpS|1^5sME;7^)Ju2$7(XH0{_yMo~oA^9?`u0vDURH|f)VxK6jUuAX*1nUjp;f+X4G~U%L2{ZU z{m8_&`eY?8)hcN*Gma%_$`mfTAuNxNiC(i#Z*d^V(?kl*9fyz{!JA7MhQ0{GXVKGxJ+0Bkgb&EGNpF1(w{dITm@Yp4#8|^OuQ~I+O zE?Yu`8cG7^>QY;c6f_DVG$T6Lej*vk;5j?N(R-L20C7%{-9%=yN) zx>wUcD-=i&NPOn2)e6&K!J5;=Q)+DkK;xf73^e*WT-y?B#c;WMuU z+d^~fzDca3BN)hOhzNj~pa9}X+7d#2Qdhs>D9!xU(lH{e(8bqA?pmU_U_gcNO4Yy)_#~`#}PD?W-5s({sGi z)X_6~?#nAJ==%BYmYX9LBw-2ORRt2?bfZOMAW0E>5D6tBU>v|mgrvtvyb0E>D+?r6 zAZfrl5|PfK>y%b%kk)56PT3-aM4e*-iJ7oXU7}r(6#JjFJDq!&rA}tFa>^Y1%MP9P zt*m=9Pu}CyV| zb*@iYp6A+U^8h||L)^S&6AVFdhY2be4Mqjhtdb!HjVYLBS<#?~B6-{qtu?O%aAhbu zri+Tq^ux=VMsy@uUkIxoGM!n|I_-?p5BZbc-*H^m%?%+(Wa}n+|DN+YH`jTc7f5cC zJ%Z$Re>dN<(^BF&7;5=LKg`WfkB*LztB*|0=cebzrdFGSl_Eju{2(KWNURh|5&&Nq znY$_9j_gc~gEz@sERdK8+lY#}q`%|{wPb=9{`%Y*h>=)nnf5b?q)2-BVIT850P8IB-G;}!^g!)vZX?z@D1JW=UdsVJXd!=7@OsbhMx50a+9NvF%YiHAIMGR z=BJ3X79&Ao;x}K1L3eN@u?$J_T>{{Vrw+HIp@78VW6H&HLgJ5@h>QfY)1NT&L(Bxl zB#~Wvc&;VEyW2{%BC`f$N((uJE)yaKYismF?k!TfLhhmvw^lNcClw$ASKYdxJU=BD z*MmzA3OsBT0I=My4pI7)jcX9TUPuNZ4phWh@Iwg6)jVkKGIrFi2v^Wg-g-Q1~x= z8zMr2k(EdRdVNr6`qc*HKN#R6V^kPRT5`D;)F!sG}DH3_?+q{n;p0H#+ap>IB-dlF+)bYa^-^ZLH zarQx4&VS3id+JLh6FHB{f|1bp%diOgio}HeEtW5_uuP;|NO+|Ig=_>rXC(A{f#fhI zO_bJLvYGH#&ZK(w!b2lDqeF>4(-UMgzNc>iNvP9D4!lJkOLCHlSDrn)S!*OV5=aCG zkC705Ek*KQ{H7JX?9_u(Wkf;z@j?;-IP*&q@&t?Q!%8A96X7Sro_d0$L8q+> zXz_~0d-i!HN?R_(wE0!Tp0N@iz7!JPgv8;%scY>W!^%f+@3XXG&yLRL*l)KH7>Q*f zzB)0Tjlz$JWN9VEQcf~5od2x$;InZ9F%sl3_{O(4K;q?#ulyz=@+1zoR{Tj@m$MU} z^%Rzt6awOt%2+o+B`B^}6%k9~O%f#D<$wrr4GEd0JkQ1gm2oGQ{$0)v9z3{qxIM!k zlp@h{hRElk_XLH^5T)6opt!JWX;orP(gbOS+^qF6S2aR5c@G$2FQK~CMo3nuGG^Av zsE|lx@cP>TrR@3ecQZ3HBcnuIRIaKY=X?=H>|9(SIde~EJ_INzZjmgNsrfZNwYe4| zGLoTyMEX{SfF*nn5-|}a7wsuOiU?o){X(#^Z#HLoO35gYUQ$H4$Q+_eR~no!@lPS& zbB)|eQqV$PA^1 z&1BnpP<)oC9rdJ${Fy;j@bBeEY+PtobAqwRz23HLD*B^%1|Ylp;Li_E9oP3jqNRhh zj}9vlVQ0Lxt<5>TnV=XVOJ(V&CW50dlggDk9_k_ADzv+(i`uLr5eY~t%tZZn5JBDE z4m;etJ@*|;)?dQh{ZIt7td=yi%0-s-3Smw6B?yrK`LVzjz37m`E3N5Nu|)1 zVkCTrcchO!MLmsplIz#*e*N`>yVt}iFB(HYf^TR#dXy?)n+-(|K80{t(nl+nh7;$l zGt{xA7bvPEW~BOhz(52fRs~EB$CGyFP@Wk*DfFlreX#+>`O3@`*tuO5fD3)zkUDop_{^I z=bw+C7;n#H*zc~WDL#ak>a~4{{3^f4k&n(KqRx6 zNXcR({654o0GDTDv|^72-MUqsAVDdT80e;$7WJc8KZRsu?gtY|kiYS%Hnr&j0Xeyyy`LcVS^RliitRUz^Y;FyRrHNMvFtMuI@%=cm_PZ~y^`e0#4U zgh&aSF(3uA4a%Z))lM#8s3kmXNOB+^nMMv{B_L;g)|@g_*d z!$%=u*#ZO#NQjF)4Va~D=x=}5ycP{Dpoy5!C{sdy!NH|$D^?QC1i501%|s0BNAMn`@R*6y@N2FGIw_}6_4QpNu_p;g1_KggB#GMP!vYctAreT`rXKfe29#M@BZLrOU-ysGUG#!+AA6~Uc8u{9a1ik_|+(1 zYhfmip7hqP@GRXTZ-zp`q|80K0$k+HTBm$69CwX?1fAlEHs*y@&NdWMh&E?&7>O4u zubBX`!ZwG0F7Da(s|*bihH+$Lb7~`YhOHEtYz(yut;mE(MDRqVwFzs3$Ya7^q?ybQ zBN9p}OOT+SM)K1V76w6ZIA;OLqh1y+KJp$WaQNO<5|KbeNcif;UnX^oWp?0)C*wr9 z=meFKhA!2*k9iv*C{~P&BvG&w6S2q8{;Cfb1h2!-1I)O1>_#G1&cTfYdjpBTks^Uf zdwA-0AeKH!k(h|XVR94gPXVP+NZe>gyRc@{IWLLvFGRZhI*W#a)zFf3a~flAazj z0m)&Qz$F?9NSv2QeDUpHMpvAfoqqaUo40O#p&_j1cj+kVSgNqimnrC>SYH4q2d-iEhz zu^$BztXfrFA0-()4=`J8qnTJvXiJSG3d<_mpHtc{A|#35J$=$QdI1~}$&yUa@fKPP z<0qMT4rleuQ=P|TFIDT71ruo~N<zl8F5 z+2KZzsEHICIWH!hfpcGk!ag&xljl8qi&8dG%dzGYb0Yv5nH*t%gf`FTPp5G0KDw|B zNg!e?u$Ct!i|ppi=-ku3SN6w%3ntWFdAA74{Uu0P#$dvS=cBYnat_gDYlSwfH83gV zFWcJGd2G;I*zvI}MWUo5zUnRg^Bp0>0SGQK`UEr;OVuJJd4G(m3?%<8B$nG&}4rSb|%6PsJ8eBZ)-PZZ1D`?XI`r+_i8aH>8SJ1Pv1h zaZW~D^U@}7wgMf@?-=+_DLbncT0J|Tg9kr!wQd>&TLH=PR3z*- zl6wgg*My_Mg4MXm^~7fzFHL_pDurs}>d8?e;MH`TE=6K3An}Gt3MCL(jD#PvIhv#C zZ^yeQNHCQrMJW<7NQo#0GZLAx7n(&#R2|`KkZ{`13%ZpSWP<~VP=eBIoqw-O^&qi# z7ZU9eyKl~aJPTU;ZKdzm@LRQcZmsgZ6igGz7bU_W|G=T ziX@6PNsI{1g z7X4Vol3&*zn2@xKNo>QmOYuT}f{&O9rQl{tH+i@g6E)L>h!i|RY-@DJ6V|>!1Q3#K zS31@hkqlDdhl!Bfy?0NJ==`Aj>w`Xr3a0FM@Zk2Rm*?iEMu@mBT$rs!4<7;sB54-{ z@0Q0`X0oh#OB?Tz&`YDaIbA8F)9Eg7IU@-ldhAUil7PiFbNjx~^y=>>g~r8T-40<@ zZXg1VOShGvF_fsZClM+7ajz##T#OWO{5wPp1&@Wag^!usRj!x;iCVD}?6w4ZB%~Ze zOzhqv!rzQ<3Q0^#t!88-$AsiPF)wiNOMq^A){MF$2e6WB1x6H^=PrPJ?tP%v<_61QTiK zcJw9?aZucRpMU*OuPr!{OYE@>A-jeN-o#Q}B_`9cs*)S}vWk(ykqJ(uT~f&`T$fA{8is}`cq@zi>TjpEEVF)7)JL)%P+oOF>7 zm-d6iOpN3_f{B5IK5ii~5r#8=uE7K_S@*^7rl-7YDLDkmt(n;s)w+otTX{)Of2kbj zrk}j@(@6C57iI=@f|)*OBN35QegVQnNNgiQf_Rn?5fU*`MCd3BDDhiL=J6&{NT~bW z%r3=1HIWU)G7)ciX$zy&c?m>7!67=y=jwdOk>fuPzW(nAnf$!igQPf2f3S@dsn)?k z#7^Ax=cME9nNp-}%i!K<&eQg?lG@O2-_-phB={QOxSDvjrnj3Cl(rz8o=}9XwQU3$$#!4x{mRwP zGAgR{=I2%F#ArN|h>;kGlR22UYNgFz5^zEWwIp?m36hnl0?cm}`}$U7Byru6+%qgA z>9>nPG7~wM>t(0De(-EJcLh&RPfdeB}zElqG~GvNvBpXkRTx$>KVHG^`pyk!#+$x z>jOm4iWT6%r>OhdeJLrE)Q5-9mzqzablK8q8ISv0K$4WXAkvRD=v(&bLc-UQmzQWH zC3+1SiHY!ailiS!B5BdFcS%y`vU;a0eiV=O%H~C!EonH(#V;5JG8W;{*m+O*JzG(R z^C`^Z7HY0_$ge9THdYZ>wf0y)XO~tUO}kni(5TS5%}n$^BqxOvgA0I?F!4fXB0&if zm@q&^6U8TN6_G?i#y+)siz$^852p6@HAv2CSoLtPOYRC3~-fYeXNP& z9X@2+uT>%l)ABxn7#*0p^Ux;qVqYB)&uo5^_69roIi; zXR!z04ojs+k)Z!kcq>|wHDWL@fr^pXwa0kN2j}#cf(R0m{+`Ux{n|>M+Pkbu|H_Bc0#I9FC&o5A$<#Hs* zOP9^W!#EgR*H}_Fe&gd|N`Zt^q-lufGD1`>?~BuW^(ZUrK? zk&v>qFOit^H@4!9!w!=7ENImQNx^9Wx!BOK?&?{nU@lkjBg`!DJu{WK<80n0i_zKn z9D*!Tz$XHg_S@kvmEqaz_Hd^A*A<2rP6TpVS1)a6pm}9L!jRJxNy-Ey$1H|Mm0sOH ze*XqJ(cSx*e4URSn+Z*HtG%T-b1USFJ}$Zp$@2YOf04vn`oXewX^g|NIFfXyK7;9627m9l2! zHS4r)HGi9{Q3@IgBN7?v5+wE~M&glA^}9Av3LL+2ZGj@F3IK$r&mt zw}^qyco_3i_ntzKmLN&fk~0r;1G_!DJ>9!96nPRO!Hc)hNJESN5OJ!Jj2Cf5Jr;s% z6cPvfsl4d~EF7tN+EpAFr(d%L3cX5GOT6Qe%;#<|&9?Bl{DF))R$ zblpl6KK(iugmaWhRp@1t5xjf~&W&=dZ8;8np?TA(_ty@`lk~_+> z8~4$CXWh1*ST;11Xe2U|6p7n~yuN`)DFJES;2;ZDQ_CutT*pkZ#a%qqlH$^u4W%U~ zx%|(HL_Fs4BJ<$$e6)9u?k~eibiN?8oKyxgL3lbAGMtJ1dx```VcfZ|-i=YPnIz>D zu!OK{Fd{kDewKSszxc!MS37P#t2nrB^X87Rsad&>>W7^5nVGECv_Q-5-AI;eIg(If zA%>n|5Jng(=XxVZ9QX!_NT$YWE${CiV&g+u$@mj&r-i68yWl^&-8ATuk%`2op@mF6 zY%oD75%+P!!=rgc6*Kgy4!QO68t%4lV)f{3tS<(wqtk3*!@7-OKD}41K;-Ja{DNIq z^E{Q1FqmWUM&isrD@!#I-rUY0!>RN*4Q;)0Nkuv#@+++?U7cddNRAv4rkeEc;Bas&6{qc+)i8B&B ziI%OjH3jv61Y-aQMj|A3CXd)_>_KX#i6It54kICPUEOC0>y|KaYQi>ye+2;=Ya6Su ze%(2bf8Xg*J>@)%V=Yyh4_>p1*46fGNtciiI~3;c+5D=8b0wqEJj(uR{>8JeGRvp?PBq9P6auOg2357i|QNcG(7V$}NmhIZgI)(a-JR$AB!t%|Qhu8eVkvYX0e~ zujF+w8JN3Ca1`+KV(H@tD4PlvahwOztHQ<%6ugVw2qq#m$)+9iVJCqH3YABSEj|1H zFs#8;Hq$+?UK+@08l91FewRdkcE#jBJnj_lvcgIq`mzNp8i}(Nk0Y9#9^QS~M0}S; zGJZe`33^X<$039>@9uX+o>>{=6-J^O6a)g1ewXoL+aM>^l|AgrcU%r*}0p>?kfdx#hLKgEf*XWoLrUmA5533(SNl~$?^FMWb!7NfEi6Vv; zk%>!ew|4|0DH7Ec`4Ny57jsaoMo55y##K#3wD2OZK*va$+2_y>ps$`di+1_8dLLTS zVRD6AJqDtj!S@w2_a@98k7kNnOXQ zy9b6Xs9@ciPrHXpOF_cFz*isZa(qP^m}65DZ*4*mpy;pRFdbI0p#ej28K_v^is|tY z2}DvP-Yzi{>-zD71Jk+Txu@&)_g&)UJSQWe2yY~#)PrYoqika#-x2epF2)}RUjYZV zCmTsMv2$)>VC?cM`%UEe^XIimd5Z@Rjg}rozs&7s;mY7kdK<-xNjjbqM8@H4+@(h> z-RqXqfjZR%(c8WtJ(Rsb(n(<7-BM9nY#^?&Q@0}g)NLV!ibmJ3+_~YXZq6z0+In#f zw;t{)Eb47;?xmZDneK&k`?tI{Fd-rnqO#jew0LaHV-Su!5)Gsao6G&`vTQUHh*)h7 zErJo5iYykHnUL^4Sc!=UiJgg&Sh$zwb;Hvz8QXYyV0vPJmk3tD!}Wz1IubWI$$p6@ z3}~}=SrD9Lipe3kNW@59!pvqwM6nh`*g6%GXGzl*M2cDne-AOBy_g#}84umtO9j%q zt{@@oH4--ucE^)Ec%BkXR9s^uXV-zG5RdBiA^G<1mYUL?U0oi#7^f{CI6y{Fc%r01 zDcjZ^8;*Sdy^Mz`#C>z3kzH65F5CKD4A^TPv}3FFaKM`4g)U6@ao zZPC~`)od*mN->E(g8eORD<(V9yd@4tFplVbR=-lNBwe;*s>qvk{(9%SVTRTWaKq*R zuL~;kQx~cg0Bg~i9MQp1yb6FEa-CU*1o;Gmvh);*e923k+M3D@U+NPPmwzn=o?0NO zDa{&*CMJ-T07yuBw4Wp2xYN^x)t(}iRY{0h*wHQ_K|uL;&A9C>TIeh=02)dHjRA|twc=l^4JMT z9O~jM+L{0&B4rXxj?sQ)A}nM4ebf3{BVu7=zOR0ARs9iUdx}Wns%069=x`&$owAz) zQ_~YnY#X@5+W^fev+BoIm!qVP2u_!*0EUJ(1_~*W6bTR_5`gG)xps(*ZQd^+>fEwC z5CRcwWlKr{p$YA{5|CZMZK!9}F6pY%^$BP9?E^_&furDJkTh*OgeRA$A?UD`@KU8Cq@3?#V(**=if+|q z++&Kwrx(JKC6yr)aSNP@;II=U)SETV4L@h>wap!m8!sZ)_48LLfm- z+>6K#!&GA5rd`Tdq@m+O?hJ*9yLq%17#pY3<4oC7XB<4`h{OqV4Q9e^UT^&Njh`Wc znPT_nMTcyxsh=={_Bd$)NRAz?-?r*V)w?UV7VP4J*A7;& zm@#eyi3*#Yl6V-3h>apDr$ z-}&mxdta92|6yV}N2E11K%e8l^yt)F-`q@WK#jBfSNPs=8-X$KmVD4^2CYQ^fk1x0 zNb*$HA5|15Kcc!;v=KH!j0Cxs0+JqZ*o%;zbQQNAzkB0RvZ=1>yBlp{ON5Ua`=g*> zDMI2|P5}u--uvK}AN}GNZ~j7hbK4P>-DM@ZQTptDZqU7Yv8$c~>ox3Ju}Q@QZclsu zr1k{xo8IGsw(<{NX1;#;hS%SHeM7dm;Vk=kzGUfa2UF`zgePex2@zmw0}UccizN%0 zhAY$5pnj~B2|)!&WKdypN)usNd)(~=WWQU8+%ELxor>3nHF0)&xDO&EDP!wi3`{}9 z?WZtV!4I~xq7z>p1j9ru0utU{QouIJ7Rlufg<7@goKpl8FJKS>2{eoZ?Oa*X(tP)B z^SE1qT)%TyM?5o|%(c+rR?_(vRbd(AR1geBuB5e`r||O2zx?QPXl;1VP+zb_;(ah_-%p*H4D3YGHOLhm-ehfav1 zEtdu+rl#g0LWVSadENFo_10k_LIM*m86}^$oh(P9LcyZ1B+%sv_!e0O!<#&e}j=g+^_nk_6?cQzuCuCAk&*m_KBKQHJ`)~?ro z^~S1gRSoCP`aU!K4p!oPUDqHANvuaXM)z@}h~q`8*(T{vzk&Q*f3S z1Xk*LVzhF1LUcA2ZrnYLGnpHko0ys&*t~A@?%}D}5o|NzT#2qA^BKjZNTOfS8?hKf z_%+H9xuJ^o-&a_(?AI5F_z2<CVcG5x$y!s^|;h!TU5c$`?{`K46>stCX+_)|iac6^OmzOl1|M_53w(=Yc z*A}*I8OpqecUSWZy0S-C;gWfhy3KIIyCknwI~oey_9!IBtR`(sf`s_jOxzxxo-hdq zcTkhIs4&_EBoJZYO0s;n;5A6NERCAvQgo-H^{u*KKfC6YvD_5i1b6b?GzZtdxHLZv z66_;hYK4zaqb=T2MI@@8U_x>#|E3Md(aHI-S2wN;ULx$`C>*+VMIlPPu; z>}YL1PTDj`(NND{Ed+0KEwrv4E~uk+-oq!AqwbY1XxLemJwh(X zAJf^iZG*4-+}TB;%)O6!jfky#)I?Xdq`yKuBdL^c2@(Zd#99kTFcR5_&#{|Gu{Tms zKDEq~bsCeaeS9CmuBqG8(Kr1~ZpMwk(_bo? z!Q)O(U$a`UweV0)D-T~+72PT8tjX&BV0KrjnCtcR!3Q4%B73>s0Msf$@y=JnMeQ|GgJ4%a_PrLc1Z#Li*FH9Or<2hf z6A+mnVJ?JxiKXJ!8K>wgaNqz)kr+roa)!($&whQBeXnnZFL&(sdBpJ~KQs`#5);W} zY9R8?+8wWRfg?q!(%w^d@s9m1MOif`kVEfUgO$AH3)I(~hKBBkUauK^*h%ZLvQzgS z+`Cgo8M(M*XBX)Q{+ULHU&^`v>$ku8jez_++VZjbuP~CUpKySLmm)5syoDREeKkHL z$QD)QKS0F{i{w@7KdAf|ziL|(j}f=SrsT;wkdzCFS2vJ+g?Ra2k4naHdYc)+B&>n~ z2*KRZdKn#VF9_7&IFP*PFct0DW9`L<4xOg+0<(Y!2SrEc`}&4Q9uvV%PmV4iK}tUI zj3G=c50&1R{3T@mbVjp?sv$BmHKCxbV|!@Va-Y~)Snq%cD}irEJLX{)3LLx zIpx3p#hY*b3?upDzkmGk#~*(D;fJpxtx($!p3pW6W6kSZTS~hM^0(7M=ZbVa~4JfXcs6q&fRsHDRl zLrl)lyzT1mpI}nW?a=s(+l;Ms7U^;P2>Qly>PG z@-L=HuposI5lLX8^-C544z#cZjMri90?0>P5{`3HyBOAhG59VTYC;!xVV;g*EMV|~5O_zti!AMr??Cwaons0WLbDp`;MM&f)3<3sx>NyXSbaE3Mi^v5PU@mBABmF_7 zyf2=|QJM)61QIm#?9r3b(nGLV|LOXbTlel=yS1zI5q*9C`JdnRW^k!pzUbe=fm{TL z{>EED@+k`uRNh*%cWd#s_qZ~3kb0`x;CaOOpJJ`hU0c@z^U9S^KivZqh)58j7um|M zEWv@+yW{8}@`kZ(@oW^0aV#H2jb(1}tv= zRG_$}8^Vv0x2l6r3skZXuVh#MzSDdiu5j0cLA*`j)lGd9-^p{}4K7UOrhLNv@pRwQ ziN}0uC>pxtf}@eRNUuJ~Np^q3frruD%&4{x%{-_1xKQtq=$rE){%&D<|V|u zJ9g}S3nHvfYgZoX)&Luj6dlrEZ6&vwvzYygdhSY?$VRAduqB9b>%I7;XY!mPjT(i#^k#2Jva{*xT4k;qB?RP+X$sDt><)S2P8bS zx&{`n&g(vFd%m;$NMXU6s|gbP)dw%9NMHgHf?*VZBzbKn%V831ib9HZF*ksOOe+wn zQo!BBD+3I=@>=&&`wrgMtEx8Cm+Zg1d-}V_-Xmee>CEFaXf{g9QyxF$=vKYssFMNzScT={>z zn%D1Ld8qaFeGhKFQSy4R=j&Cy{w{jGN@ZEru(iZnTDnf--`BkT7J_53t`DxFfLva# zjYQUgPYQGdVc)0n>U(&|v>2+eh6rPzp1hBK`N0S8A#4OBV)DOV@lHtaIyz_cy%L0dxCc+AD7T+6?QH*C&E>)kBKnKbtTCOTZ31wtl5i? z=a;-ov<4gQ6BZMn3fZ&eLma!1s4*HjtQdvhBl({0^F`I`s6!AQ=yFvTEqu3mWjKbtpxv3pD3!2HaJm>3Bx zLcpbSp!3>X;S36!D&!zseL2DnSrFk0y#1d&e1QjaSO-1>ahrbI*W+x{fKOUJM$bC1lee)k)-S>Yl5gaS*I)g7s&s*Ww z=jX;Qu|17VF(4{8H(fnDIXW9^zx$ar>(xq5Bog`mT%G$<*7dsg5pF<~xI^7?&>|8~ zkYJD|iV9ll&a()bCrZOqQq;sOOheR0Yi$<`Q)U|0VvXT)DbMx?rDw)xbZ}>hiDQoZ zLC@>`{(NuAeW{3G2H)3xeXjHMxo`m_UbS`k8~U%)Q^vjr5QTDC(-vmdE#~0jK8*kO zM@lv4E;^k{(E_0aH<_JbYHgqyT1Z0oAQ+Oz&eV3-l4+b}*@T;%+BK;earfY6%|9@A zE`2^?VkE~TJH=(2kt~;%g=MuL>_gW)(#Jg?@Ax|2JEq%b3&gDU_L0e+gt zfPOO)9&TZnqYOFHKm@_WS95Eq7i(sO{voRO73_S%JAowL@#YbM36h)f$)3*MUiHZ{ zuyFeH)vo^jp1#ix&+b@LOs>mF;GtMCfrQ@2-%t{e^vFAF|E;IDfP!$Z>m$D(eGroH zQj`#~g9I%RA8-()Tz2~of!xIfoIe>2bxkZ4`X^VoKS-~xM5u~_gnWkDY(hg;X#cf9 z2fab+OK9?W4?NS-3acyD<*FD)>vTMy>R~V=SZwKqFC}>~Lak-<3>BuvjD*P^4lY}n zk;ue{S2?YAr7h}D_%ye$K0+b@0SG?zwb{p1|i4;Q>ot-SeC@74aUW{M~0-s+hB?y)sOvR7Jy2+5BD zi7ZKfr*DvhNpF7_9=XK*<;E38uLBP75HGd4~^rs45AN?BOFPQyDeY0xw% z2hzwL)7vP9Sb$OmoOHSy7xAw$iXeZBgd)ZSC`v!heOt*DCs?R;0X?lUM+Nb^>a>qQ z0u$?r$ry@tgy5WX314v<1c-SeAo^c=G|_cz#A_VY2t_B9YGAD7cBN5@5qKaVSwC@E zC`djC=R3j%Fb-lPF@x_u4Cq-VC}fWnl_>sdlyZwl{a4 zy0vG`A0lG0T@P{rB9`w6R{nA(#%aIh#EC5z7mOz;Osm;d@dfABfBo%2ReB*^ZA%%li$&qHMi7pyMdp-1+m%#%44uqAJ$}l8Pphej)2EeG2v_k?ri|nzNw)40l>`w(0m=GY zV)F<|qGLb0EeIqqL4*WRcZvqAH7~ica&4%AF15_#9h79!>g3NrQt*DkX+Es$?XGqx{plT`|;ys5>nD z^;mTnIZG~6-}JP2byI|d0xG-ThzRI-30=YB0S>8y5-7!0l=C??7B$6+LXMYGmV|!B zsTT2>nm|&Ir6Ze`Q=L+lv{_;<1CqZE5C3%-AOXpT)90j>q+v<`5Us#XcaM#F2i2uv zCMMzqAMTLXOV57qnCWW~y~)g7Hfhq=aSkqTO1ag~Xtk2Tw>ockGTp$%=buGL(2Z9k zEx~r&YHq*8Uj#}s-d0y1?r?Kw#|RMtz`Dc2Vj^nv<$`3Q^e<*~pM}YmiwBUbu?sU| zyEX{P|NK5~pIr7rzBIMhl&;G;`7KCJvdTeCwRvh*Hxy4f6OP668_UQKO)H7ja1bnF zRu>{lWmJc8e{QS~D};PE6Zu6QV_Yh=;mD_p7p10yBpPrR1sWQe;KlnwIL1Dq(ul`8 z7Crg)%9%y+#w5LpeZ&aLM5)KHf0)TKBUz}BNA=FQri`p4e4wF$$OI;;z=;WeCO4C* zkbVqAkX4c~V@zZ{NNQ&6KaIadbnzQX@)a)E-LBhh*FNj`?5)?-uCjLo2~b}Bs`>8S z{;SRXmwHcAVmbKx{yqVL2&Vm5Ao9Yj|NDjet18L$2S##yiip&1*-A`zU_90&J$3gN zI9&fT<@MLI8q4Vp=IbK}T)Qr433-zyJXRc~1QOpgDOb}cn!0qW>y%efbCml-JhY4C z)?mgr*|h6&CiUy-1}w(^a~20AW)hkBH%J&;TwEc9DaQ9Mss4J$l{-gb$w~BCAoHjp z1I2oRIMW4_WotnKlhPXER=!%x2okmYk!X#}viP>}Qi;A#$trW10Fp}LP>{65)->NJ zpjO`Bul{(#jQzKN-t$^p>nXarPIalHOT#7%mw2Vt)mwLO^>Y^~=7Ub+YYY;+kgJ^!NI9-&NY*a z2@ol*Odw%U3jfHLjYW3T+v9yJpBjiX;#lVjpBlYjVkAf~v{(fe8auPhgM23cdB1H*IhG7Dd^_g>s zTIt#3;d>lDtcnzpaKA1d8ET}p=4!dsZgg6@!~-s<%H+v}?I;Nu&DG1+f4#Wqv(tNj zxGEwHi*}vb)7jqn+M2f3=DsfGu_!OPL)+0w()(XEpF0PU{!2G*faJ6N?d<|`s-un0 zUz9{dBvO$J|NgU%{Oj1b2SV~i-do)#Fz#EGsy%RE%Zb_p@5GP)pa1^bAG}JZ&M!;O zSH_3Fe{Jv4!F8miLd(oq#N-zq;_sEVJ6eQwt8KMzZ5+GD(Sc~X%(VOw1^HKXqAC@K9GM^!-_FKFk1Pj zE03B>@ewf*`h*nMAZ5j|&#(Ob?>jP*zNB>g&OiRKefyU~OU1Dx!o3*&kcDDWK!3G)HdX(SA;2OOMkavA+~#j%VwiZlRB#&|+27VS`;9455}R>{B!5D385Joy_U@WS z94?YvSud1?WYpB|)>aT5YPxWyXezaF=4JDXH07j*0yRvjO-I9`K}AGF1BgDRb@iT# zs=5ULBrxH!Zk1VMx--T^@U>nb(Hs|&xDvmikk#nAo0X!I_cLkmcD`C9rl@a)eC1)6 zP|8v^T={R*B#FA1DmYdXTlw{qL`H2_$i$T}A%BgRMgV0Z#z9gv%BaC9O_?7AAfl#g zWk5o$QA`37%41Mjx9<99L>PO$a<;esm#*9U5576It?zbk!HqsC51-UECZ{i5#UtYn za(hvo8(r9-E*)BDwP$P8b&`!pw4^+Ns9YgonM^y-8UOHT%P(TC3*Ys)YjIs z_wS$Bc;xdqiy7YK0C!VXDWc;CA%`8d4p=$Dwo=f5q(VeM(h%nQ)oaMp_0~{jFEArV z5i!w8$4`UtL83t;b?d`Ky>S?&(zKF|lmMt`jLTZ`$r7*a(58s2q1%t-CJrFcIYg9O@nN=*_75Y02;ZlOkj~~vg9%;CFmc!F z>ZV<5dhA$fw`T92UvBs9VXU{a?>0NI$(sHB#a#rwUtesT9%);>zfT<km!)gaR}s*|n2I958i zZeQ!~?Rjm={+>QQ*51|E*WM%3!JAvZT>FKcj|xV*6ep5!yiFEGL_qSkmTUzi!4VEb zXh+$U&zRtWEpr@r zadcNrUvAZ0n~~1l{P@Yq={Z;K{QXXZL}D8s$(VU4%3r^~LKgqq)eE!f7f{m)#bO#} z+-v6Nk9y1V!#PATalZl*`HB)VsVCzC6KxY|YBl5+m$=%x^=0y^Yw$x0O{?M zGev;j+)3o|n~2;6PBTa#LO6oA)!M3KYj*dP8I6r2H^4<@T^(ARw6Ws71zWc=s2SgN z{PQn90SQ2KY|Urxq-aemOgioj4LsaF(>bi@20N649EI=1k(Rh|+dKSx&9NOQhJ8yV za(O8T`Gl~BB#>a;A>zDANOxIKH-1%Z8&wu%!F=m=d=*cZcH+!RuWCfr(SX-TaFWt= z;m#e9WP>Cy`G=rLKm(M`QWI5HGP4&fp~g0U$-eS5+RCtlx%36_mB~)oKZQn?5*m391Pf05_ zn#my{fr-Rmu=eXw6Xe^~X@{~@8dws}En-#rlX#sus{{Bv0!NREX&Q-rDpDF{z(Q?N zOl(i`rYNENgXTwQHQC!Nw|4fqW|HlkN^R5@_plHZ0>1&|H;CYwai9?(Hur(7gP$E| zyKCQ`8`%(Rb#WPa;QR-{dKJMYBEjapTooE&dBa^cQ}q*)uY@q&YvSVp*v**r0*$=dAk zhe#7GNlr5o61{~iAL4k_i(>>yX}G>Q1zT?_rj#=I`68qQnYdw7+8N500aPvAM1V3wY&|P;Z zf$|UDb{a>2z+uTld_2X;=U3#aogMK46<^H8$&fB2etEhJ1tFt?6a|5a@8Xwu?Wrb+ zxEM5rQh4QRkeEqbX-RonP2G+Q-zTkL=p;LPd$ws9PQ(N@=a&WxUsv*uI-5X3MuECd zW%Y!5-)1hUqMiu>O*q9l&Km;~bUW-`QNycBMAa#Klv&gam878gYC-!g=B(RqP%pgQ zIprYzCf8)vo86wuq#P9z)epOLuC#3eyPtQ_&B}Z%R+56om zwk!Zi?&8mEQ72lSwTf;G0Mhe4QFd&;f57QA{W%t_uM} zM7&VOcat@RIUEOq3^SS^Y623U;?|TAvmsl{CtblZk`Zy^8`?5?)zV2(J7Y^VTM|gB zfJC)^PA{0y&!jdp-T{u^OIzu&&z!<(;}4BJ#JQM2c1mpgC3@{VX2Eh_E{OHqM#1%uoo+Gf9=y?6{INi+Q^_lhe=?dS;9S zCRi7m!Rca3TlcBf(ljibrb%uUIy1@l)=Zy3YyUo>cXY&S%}Bx}=SG5;91BRKDe=5< zr$_>;SO^iAj6Qw!MnMln5`y*9bVl@?>b!-T=;*qoDJ{As7=!0?T@>AWh}tEsoLseK z`RUhb6oSZ6HCfZ^lf{cg4L(y(oCO?A4s9Q^{_C#~5hapNCnfKE18&oI*KmSsA3wSI zWZ+Zw9IFee1}9_!CQlvNO%OTxIdS>!)VLE|5*=L5BP~=<^~l^{SO5(Z4F9GVNF4U3 z6#4s(ZkQ4h9p_ZWg^_N3r{ie9Gl2 zUJ#9C;}K1xajv2yAc0Bk#qC3rCT>1-alW(~(dGc%*K>JX>(BSm5+Nb_#!4@DDqAiv zUF>d>7ZU1#BVr^xUH=7`07OK*empFQiV?j>0zec@4uZw8eVW2SkVFgd5I&31{bbGS zQ%O3Om8WG)&&A5C`=oH%%sP+|NUF80J~Wll(1AciNK|Gh$y}#eGxL4r(`NFpVM6K3 zixCiB4X*kIk1OV(WZ9Ag5^D*6<>+UpgBbyewB*%Gy&v!G>Fhd<1y?Qovrf$TZ>Y#` z%@9FLPKyYcF2yWXlCzv$t*vj-qqB`pq3ezFKN&SDix#T!2wyAxqP5-KZ=LPnXu9{# z`G=F{y^}q&W*1HpQ*6pEX>)1S+1C5_A3p-g#2k_vMnX)Yh}KL%0uv!gktC3KO&38) zg^sp>1oiM_t@e7P{s~F65Hi}CstzMwr}T(1EF>aw-@NpfYq4iAc0%6KV_9gR>fohTQ zvckk4!CS0h{@>K<^V7GnoK8e6`fc>3y`$;TYUinA!OvY|V{kuVyQ7h-Qj)ziW79D# zA{{0I5_Dj8?bO3n-(4%RY)-GO89!!3MKeI zA%RDTEW?U)cc5m(OVAPz-nsmeYDKD=@wyViG!czcLw5}|B`UI+)2nlmyd$-EXMWV` zO5b=^I0xPaiNdUD;igyJQ1h256 z<)p5_Tf8eye}j-jJ%zGGAaRBZQ9{=%{hjeuV~dbDHZ&4#Tk}S4AyIBwtxKU}+Dw9$ zFvDvkYK+{OuCCsdEx8EIfB*(c(f4MP-4e`nK>fX@>SFe7hOFl34P+mO8g2R4T zsLizflG?EMdRp#w4*~aCh(t&_x~FC}&OLF$o$a)Ks*!O^EkrcT!oHt1Z5`;r;Io^9 zgTvo`&(&$6kLd_CaP69_>OTAQ>ClrWPbO-3KrPPJ64!hlTn?L`c~9 z%!`9mWm(p?am@t=f^m<2OM3suy_dfFm?)madwbu0_8XpKe+L*?W_@FuyUs>}<#Vryv=8JgCAbC=k_>v>3OkC4&?s_WjB5 zz(m>xslYj`P~0IcsicLSBH*s{WCa%azQs=h60DAQnpWZ|U`JFS31is}8am;>SCmN3 zF7C=`Y#VuqJ_C(}sgo?)A3as7Vw#zR;oOr+tY;S!jg8YNL31ET#N_q2 z5nA#Q7SeN-b7-%V!x$upn4+@d33+FImD7h8&7yJWOP=ELXh(yn-AE()UX&*re~FDOO&_ ziaMQJQW6C(5t8b}GAte{NR&uURV7aq3dilEiXEjzImvMB#ZVGn=gckm3C1EM(j1y2 z5FRpnSE9xJD_d5dOwuI=UYW0kR>Dk>c>V8T%O|uPv-Jy0vneJ8t|=wZ4dR!8Ya|?* z6)v{rEYi-(PIE`EFvs`1s5n0>?#yhK|~^Dq$-l%$F-8D!iV9a}F8T|w__ z{P5Mi823vKJ@9?G$ix@$kM;(7(kboD{|gC!Y3D*!X>lvnJCaw^YdjlL?>vMH(@p$ZP)>Ako%e`oEMMG-(zWMVx z7~HQGYJ?z>(J293Ip3_Sjn)$Pfs~SZWM0&r@C47Y;_1#HYdilgwGJ~fob^$;nvo0y z@pf$f6VI&jnlJV)kdm}aQuRjirjRriA3K(h@YQ*i%_0>;+=Na3b9Ym2CB0iT&MOje zz1Pk~X#>@3)TBj=hgOLRMr|iZ-kmYy_x`=8#sAh4_Wb{cko-Wa3dWqmE%r42OsnCskDWm3Napmvu!$sd%WTlHWvLPew z0txZBP7KVe4=!s-=$H?&Wz3t@Vhj$BpT7VkaW#ZFVPx<#`3ujw$iTJFC&)!5q8yHW#qhk=7xIsBR@Bt*tig0PzPf@NcP$k!WN|^0egf zTQ&11CzOij7TXeO$-}jk8emrU-vp|pCNlBMr;ms3-P6gnRzO}5nTE^+NfVa4ylnnq zJq|fMmLlaJ+3@S7?|z(K)6CuiyiQT!pRp}*`O1U-HVsbwF*i)g2V(~k@8%X0BO&D2 zN3LGGLbOH}!B7|Gu1?Zi@D#Oo71L`h+Z3!=;VMLh4mAo;)h(^i0x_-G(!iX&${@b< zRLvb;ZC+<2o`&N>8y63*UHW*0h!sRX-`{H_T*@wmc$Hti42!p;c}GNUK*UOcS?8^Y zgg-)r;vz^$^UmFu!rsaQ$@M7?3{vvb7u=UExe1aXYBb~-_`7*J8Zm7Aa}z2-GKJ0+R^XK9Q?iZeauPL+ttCV+ zg$NmIo;Mx&6&rkYzbe04@{gRfFo-P!x~{=9rO_I@Rg>c&(HHr<4ao?T&=ddT`(M4E zBqT|syI$Gr-I`$0?;j()t09t8>R%xJ3k>UsegFg^BdpZ>+_L(Nw5$UkmFI_84Vyb{ zYi$AvFQ`Jg$uwO(XX&y@5E+;_4;6WQ@A2THD`QeNUDs=!Cu=0xMnWiF#1RCM2#L~o z)Cf&PEByKCQ;YEgAt@1*l6oNM1sI?-Zo~YBEjc)3r3>qmeYWPuV-XW)zXB5d&0<>_ z#h2+RlP8xiHl!A!p|<83(YIN_gs>eRKCXh;j)+ar5h2+!zdoL^ zaO_7}jZU(Hghw~?kdQnhwKz1#Ju>y0Jrokp%`D|md;EOx*^?*preTwh7Rx*!G~w8m zuLoGrz@`;;w7c+0W1qU;v4~5TW`5|=You-+k?-Oh&z&N? zl^6*jvf1GGi()0GSIf#=hI)%qj*dI}$8WE^jKcz=_g_I*MlPTpjRZatm~d<*khsQc z!yaW;&=ChC^OIv*ca}^!03<~bl8aC8KYe`DNYZA~eTEi{ojGRddXNkZOqzG^IhJ3a zp7i0^#zr2Ux0#fX*PfPEs`72>CMq5(1Zl#}YOm%MRO#i7A8`Vg%uG7`Iz%XfMI9})geQlIc*l`iIpP~KJ@ zXswtvX7i*0%foxhwmiD|=*jsnryb+Wp#4td2q952rpB-2{WuCSig@ zhReaGFYOZ%A6vQF0L=4}6Cv6B4oDvT`smT4Crf7?b0RCG8Ws|~*Qt8@L2Ogi%Sc=XK~2&F5)WEo z-Eo4cV$;P=239kt;lBb(*ik>jiXtZ(1%rx^h>7DwP>6`%GilWs$1Pb>rmrYTyKSm4 zBRaOiHMGH!n8`}Us_NuVVS7kAGd{-iHxhSvvDju3tDroK^5K{j6zpe>`EWgvGK)Wp zs~#MLNaCTtjAXRjEd)4!7LY*e$B!w-clG?-)7shD+Vis{0HGn+M^;v{!n!6e4r3RJ zUv|-xs@j%7^7wq_!V>KrOHN}{W3z!6$zvh836m8*TU6q0z{^x>9#@6tt&ux)k0M4w zbm$_XkpSNRD@t<<)o!G2H4Kek5@HfX$fL0NvOgB6;7UsbHVrL7;)r7y$2A&7{YVx) z2`sL538A6XAR3;UZp+Z(!Kwz&fGtF|VKp` zXL!r50&zBi*6_R_=Hi(*>j6{h}BXQ+Y{T5d0Lh`PXmc_wo|ef zlQ9yI92Aik5>BQUNN|0V{-fZly(~lfGZ7Ds1|YYQz90}m+GewxxlxNrnieuCqM9HP%g5xClUQBb<;vbOor}(1Odsf!{^8H#6ED~ zMG_b!Fxee*Q`{!WbumF1G_b(s6qFup-Xl@m;YSlI_07>CW%*_3h;lbcYUd6m7brs{I=a-bDsO8YL{vY<*vJrOQn)t~pIa!&cJ<=9 zY1K&h1Am&eF#X(VyHGD7iIVfA<$qK{<(2l|?p`WzLEd6}kFSNxD<*vyljhbQe#pMJ zy*ZBc@SAoWSHw!)PpNDaTGM%{u1VyBq>4!5VlCDJOF{I`0lgEeEF=#fK6%1KfRHFn z3=zqb^J%*OK$C4kauOuR?Qt0izf43kr1+aHzP)=yOZYe>V4{Xeh=k@x_tD#MTlhNt zg+>zAsw&e_N2Vhrrkwhy;R$=415Fx9AE<6-h9H5V%LAgfPDm6ty89a7aYl)9ZQ&E= zmXM$&+s|*@j?n!T`tnxHiof1&3YO?M>xcB<(%tqSA;J}i*B;zeD^Vm`GNi;7t}hUJ zG@00Hk^ej8Xc0NMO}l;D#3Ef|p=79&<4jRP1eZqxwL8a?SbXy9qbEa~*Sg7!W1Ie4 zW-$@C3{p(7HL;oueTj{9|GEyYBQhm`;9u9edbP1R3K>mAo^IRz4&)RxtSGH4kkGMoR7kX`e|bD4I2OXh?PET+^`cH6 zd+7P#lSjiOROY4Yv8jB+S{*YPdI*x|Bvc+jL^AN@)C!W`8?^xq}s;#BL! z(5S_Wf+O1pP!o`dN>CG|iPhoWr7S%%6B`am9^wj1hPMyv)KY>2lR$I<5iiozO7cuL zEpu_ZZhT5w6zxW_K-_{N0v__bODU9)E5#Q%8hh# zSF!2xaV^qYWF*9SH0i4|Bg9+Q^VGH5A1j?Q_;_ec+%r+$ErNyL{7@sZgU=tMC_cE% zWYuKm7j)Q1_a6H>hOr&JL^(n#yqH!DRRVwBR&Ka z5fn&dNJ4VGR2zRtj4Xo;NW4b&Yp0{uHFo&v?;FY8Gl(%ZSFYBp25x^VCJ>;GcDps&3h zOAeI+Dp_4!81puXfMD4LWJVE}zYxG3J(iNUYxg(DsVAp8#&UZS%VK>}gd3-0i&hRf zJb(7=$!1=id~c!cFLT-Y4~Gzn@`D^)FPKc4tXWZ)XT4O|ZHrP87~^H?iHEzv1Cr%n zf6-&AzoV+f27n+iQK?(@1eg&NBMH|rhc9^5TEq)8R8|9snczkFu6(Im(uO}V3FUwH zWS9w^SvH+cx#j6vE|3H!Z0lOTjNOi?$s8e(iMN(4nEx7g@i`EAnTq|}Tch$v^^7J5 ze;PwlRP;vhsJc(I-tO%qIAj(}sb8w>0;1W2*;A@$V3Vj7|o)gs^U#0PbPi60fizA)BwUVLMM#;5QYRrL62_2gX3#>URsJfo5dvcyI9e6 z5kca9Rm+Zqt6g%qKq{vxLSiPxvL_j-yN`bkk}DU!M@u%iN5^5lsF+9y2t5Ml^o_Ox zj0x)>_@azNduKxZNota$CWeuHbbin8`_4;2OOZjs3CM~kpb&%z$wq#G zWWn5n5HW$5nRo-ox%{-T*Lp$nO3xmw!>BenxE&Y2+UvE%J&%=1@2$zSX8qs1SVNs)@I71vKQF{a= zKDXom&}bI~U6DjMI9oN;Q$LeI0(ySER^~%C22Ko;$dYJEA_;rxu6!h+YKSZsqT@Nb zc~l>0z!fwTU%cxbPnDTtCSc;nW^deRB=e_q7K}hZ67Mlm(sgds#`F27v`wh})+kss1<#%#jfIP; zwfy~SzVXG{#sDI^wk zf5A$1F32!2J{YMnCe@qQwf3jFFm)HNF4}%$*xSq@!V<~A!1t_NJ_64cCYKaOMMP9i zc}Bn}Cgi&8d|B@NIy~_AiC<3Ou`3|psp<@K>qjOhJwA*@DO#O zNDF?jC+CCc$nt?jY6T>u=&9XsdDip~m#s(Kq>(te>U5J?sh)9?zPBAYyA>~nN zxpOa!tnkAUv-sxC90Wb{(B5Z+lQ8Y^+miesc`bh>p-H`zQuJ7 zo}OAd^cZ8}gX_xoY{AZ1$*jP)-w#j1*?JBSgk&)9D?G8Kx4r~l7+7EZ6k{_1(V4GSh@PDF%?;Bu;a(9jh;iCcT68x~J803_K+_5~!f*5khUGzP6g{rf!&>+M# z&2o*M(glH+nIw64{|~pW9cDRV$+#XVN&f@<)BH9O(8*;YLek^7U8$6_>Fda_(TX*K zq+vH#DDBGAkq{G-pMJW7t!Syyrxvm8+O!JCY=1t8b?0FZeEU5)lH&~vvmG#5LFftY z=%`h-_nGRweCRRGnH2_&apmjbn6W9~$TJf48|JIUi$Nzk5HMTeEO)@@YHz;0GTjoQ zNmR!VL6Z`qtBidwJL^2PhnRniQ!wm@U$z-0^qV;{ahk+P@+v;R@Y97I8&G@?-y17w zGb>7zH?V~<`VgH|_@*e$W@tELqi#Oi_g?mU*(+u=+mM)rnec;36=r15yPwd(yD|S@ z?`X{Y@Bb>=lsdN+QCBrQo^pD1NK4>>^mP=YAQoOg9_i+}GX%HGcO9mr=A60k6U!~G zoY|rDd})J5pKD|bGv}Rud{c&-M(yEmHyl5@XLeXYU?8oWjB>2I58b=@?D@T?_wRRy z8l<40S@d^5zqfs3u}4KVal@Z#z1ZZ*nJf7!d^Zc&b#kS+HlnJeuXhjb*>WT}6|Nm5-jaQR*w(sRF97qOk2#Z8~BfJChhq=9{j$B&rS?EYJ2Pj%`?t2!0SwZdMO2XPL3KB#`fP<&C zyoT8-KRl~cn+Dk#!a6IcV7k~tLydD2DhDpscZI`UmAW#kd9uCigETPdWwvSf^l>~% z+&ld3&5u2B*h)Pa9r^L~>#Y|s;xa<{Y?Yn%-W2!A|;2!1KkNZ;qy92zmB<0rWVfbgygMV zAaSJb0}@SCkqZ(1*slDDinmheJgSD;UZ!8v(M!yOf<%fb8X^=<`6YY9DjwqsQ#M@i z1{r#QhX^f^)<6nsvV@u_!;mT+Qy__x5i2^8xCqq?^1l9}w)pwi)doaH!q82shyM){ zgbDcPs|n|;1rocd@9OH!fB(bcFAE=?OIZ;mQE8#pqY}Tq_}~R>X)INj3}07Hgf%gB zFWThnYG7R&)|%RUXAv60YKdG(8R=%^u|Abez_RQn27o8Cov(k5_ovX4H}7WlJh&`1 zniYX9Z)_eMc}@!pHzj4b9|njYd~WD^KXUjLBeCzzYy#<=AeEjs2lL4=-! z*ESi21ykQCoW`wvmv#NXvZM|HyMWm5+Yow6)5`# zCOhHwJ5AkPEf;Ph@}@H6V#L8e$sYi@#+;)j#VD-_2Pivb|3pP$5|@8$v_OPUu~9)1 z_a?Y?dqKjJVcz^RP~D zO)CvGl$uKU4(h=|EhF(e(%n_m)wMSXNF1l69n`h;S}6(gCm{Lh2T$UzHSzBAi=rYx zvNluY3*LjZb8+qF@{1ccAOG&l8!O*GK$&L3CP|JOj1TqMNBo=K$>W_u1b!-=RNHd= zI>EMltCE8EF-WJ}tP+)?!)zyaDCO}Xq9kJS5Ls~rlD!I&6h`xLBoh=&KH6TWotfd| zY#q9tvM;Pk?-(vV^-A(bjeaH^X4}ycV3wAE21x>~RUko7kT@jq>I)KI{{j-ZP5X3N zjmX7)h>S0S$QYkS34LW-Dce}T8~uJ^A$eh?Y6gj`2Q(=x^s+b#BCIgnD9Jo!Kv*Ae zs1wJG=y&KHeKw3mrMiXyBy8*<)gGVEd0y6YbPhVxsllMu#RU-{0h8a3_=w+v;rTV; z!dr$dx_nm^`OghV5Lj!u{6`24M^_d`DNa8o4r6IP`12O2lHC=FZ2C#(I5DcKw#TLM zr(S&Gu2B-TEvkuha#^{SGHv{2s_I#26gs7DyJ(PX7bQ`UFq%|I%TtC~K#cPOJ5Onl zNE)(D+e6(yNvqH`*qZ_(alYFukxzhxg>elOg~&f4i8t)of2#zM*2O*lqmd}!EVfQ3 zvT+Y0a%ISt`u3ZDxw*OmwcJXHLPP@uEkS4@^2$X=_@9!b4RS&_k!7nzwkVi(&gjd{ zsI4u+a47*2jva)9GvT~&-j%(Xx>JVJS&Ko2dt z+3IGQo4xygTO3;%qNE_aAySmyaso}4&Kud-SQ4(}j};~si%=^73F{!068XltgtR&( zv(y*R5-y8K4Nl!8kMEZQ4vt=f1iN)jK_W93*r5b=ejq!q@3WoV3Fjwyg-Q%HNC0_K z$U28pBtbu?DTx|!{gm=6wLSu00YxFAK@#r;z-p1i2vSzorDe^N#6?1_(X1qWACPcq z<;s;T_|?Wf+w=UxhTCVc+AC-jAivDmhD8ClFDr2jxkrhSw`ht zPf|TQt!%@cuhqOsb(bg1Kx&?EWe|*D1&LIGB@$+f)c#_58B{oTlHXM{ zG`bd?zjvcN&o?i6f-#ewiTUYAW5VhwvA_#Ymq!9XUqWDGV||I*!7)XoEKB2ZK1}Xs z!27Jm9uNUVLBb0c^A0K!1OW+(8{2GU`8^~;g@@Y!5?Tb(7LfCS z?Pw>a5lB7(59Q!f$tT4^{j=pLct`^y&Lfx#*M5e~V=J?T#HUI3+{n`D?MI<61d!dk z>q-W$Uf%P?>H;cws6aV&L|&>Og2+2~;Ki!l=dr!A@_~cM>~EVen@I+xPyo$%Ml*^c z2kE*wDhaJChs}KYY-+3LJxLKcA}S-0uqv+@hN+K!${D7jJP*q~)e!IKP8R}duI*Z+@q0TBMO(tm!~V>WMNIO zj=O?TjzadoxaW^olc^ge1mlSCQWY9B4H2oPyeQvQU9ZB%i<{rdcm)jE$Fz?52vHIYrZBDV&KkS<_<5m@x>0_7I*ZUpW7O0j0gMGo6g!{QliOpR!6sk?l~tND6deIR9y@p(G;K&NPd4#AmEv5Z9%m)98cc0RGS?Z z=sJq>!U9QkvrR{!E#q8_+2e$^VMes6R~*VU^R@lSnX&)|J;FW-Dl~lGPyHz=d|zbg z=jzsUf^yy^*e%U$X>b1U#eb!?2$xhwZ9PQmaxb`G_uHq-%R_}p@CC%p);!nWAs%>e zQ=(vLTY(5W*&LHaxPp@eA{*-gcOwm4OqWoR3}kc*7Pa}F{MzObaVDOk{HhsoM>7Op z%y413l$H6tcO#=Nzz$&W38aLb9U+0^yNkPC1GP# zOq0MH&R>YFi^QTdX3QV9?^lor!y=K`F$O#Y%#Sah78-i&4^1#loG+>4h#HWzzJ309Z8a&kq^?R+63n?`Z$xA( zkOGE2hEn(>qip$v_~yFzKY~VQQq(flNFthnw9uR zAf!y9tcB|RAT6h0124LE1yyzvt4vlcXrT^V)sO;8b&Kg ziqwck9|;Nx(}D@{ng)q%Q#}1l8&=eCS$ z>-oz(9}SX43QaQlu={EP30Cf>C1co>f@?96Xe<_J?C*!k0!~Fo29Hq@3I)T}2?H5L zPQI_aOQXyGvV5tw-ZV}*g;49)9|aOByU-52QK(3B>bD=>-05EXh62hxVu9URCA--_ zt4#K7we0xnHmK{8H}T=y72P`&)|fBUf!&aO7UCT%Z$KfXKfjv9;iV+}NYm+*Gp2UtBtG%m#Tn;AeO{nvM2moBZF-qbtu4ED64~BM^5GhkTYP}&H-|`Cq zFNiz|!~*8S)?qTf8q3nWZD{yg(q zW`tN5mC-K5v%LHnq{9#sRzbi}P+gm-3!8QvNY{sbp?daK^i7ooLpRnaA3yV@cF(uA z1==Pk$woHTV{LQ&O($wTew>! z4kdEPgb=i{PZc%)ISGj`L5sHWl&8T&38VK-2alYpX*t`Xlf;0DSp~^eZ9ZRsAzx{& zE4j*e?jw{WzHoH)EqNl4sO3X+WG{0>0?DB{PE-5`mn9dz2l&;S%eV18nvwv?JrH@u zki0l|j`EG|+Ff)d0jtHS09@?o*nRgkcOWVGM?x1FQlz1CbDfAo~;|yEM6yAZzo|>7ghOA~>da zuA^y*QW0V6Fxh(q6CUVU9EvU88B5TB;0X=i5$1OefdUJfnr4%TZBW93%uV)V{L~X zx!uVFDQ(ms&Cs1$Sm$O0*4$JEN2oR1)}@hnynt^wZ)CjQscMecEt)10{`Sn^7NlSk ze9a&J{WUVPOgWgN%WDO91F`kkiaYw`iFeXkT5PB()o0k!Kd(4xNp{E9qq!cZHFy5X z(q=pVG*3GaiAl}tr?~up2unFj+=NR8neuWmpP{v9DZ9s~l#_+O?jIC*xe5|OEji?S zKCwg5G8$y^3Pj>0khq%n5mzCQa7UKIse(!R=Nh3ivKjNVL^}j~n7AE*`6RH9XBC10|t>Y<| zF4s7NESQX4x(OuTJh-$Fjd>5%Wfb{>p8CF~;-=$PtI^1Sht*=pE~apgSUZ}l#kFwP z#Mj*ra*EyhRc22#NPd(erX(6K=<`Z2CQ~rN*L`#J`v7sn`YV3&VhJ=FZJj+0obs*N zai^u-g_#N@gv0twU(r&;Tw%5Fv~g>jk*~yJDL~$du-XJucrm{Yl1$QbQiEe3_Dfkr z0Eu5W(;z`raeWkRJ&{w?bz#bdkIp63iEb1qNJK}*^1y^c zIRXi!QNL)AY@>%edYjM=isw_4uIM^|fCk@k6r%n>jQ_s-{cV{=KnQ;Y5>m3U)#q#K zQpSVDu`9cFUH(#nqMM_SqJijotiRgBR}?Z@E$M~|V`+mkWHhuJT8uSk&KyXWxqaQy z5f5vn^LcDv{X~AK!mVH9bJ(w!*Dm?ErnB3*B~jXzHc%N{h;9(q#(+eVSFuS$`Z2?? zoE(E;0=K~*&E-hvZ`(3Oc0TV?#qboy|gb%HLoBThD2UtQb(^>%oYM7>vy*w)@6Khcm2Cp(N)!9#gVLOh?Li@J}1DsDb&Dgx5+sl zJm%*3^785vc^O9n{njRjqkZ-(|5u$kXVSCbsKH=WkVIq1k5Hj4w$)?W=6&?x-+%&I zB3oAR{`+sinMzx>q2230Zg)DzvnMA9m>_yYQoaEsfhcd~`N!PWil+ABn&Ok@XdI>$ z&p7n%Efq@}k-@VD^JKv5c6$%+*rCi8^YrA{jCgOmM?=cy!sPPFYSWHKAX*lhOp72ptrS`!q<%$dkDKUaLU@WAlj*(vmJh zlZKk~Uq~suT9;p5RX(Qf%jf5niwGvIR~Mq%lmGhv{@XXJfBh>5q*wM<4op+gpL@dJ zD2W9E7qW}XOjqY(8!w;SUc84af(M=5%VVu$_nv)u6XE94V!`>W+smIRy1H*;fz6ng z5wp#uN$V^tMw`r#9!a;@#%*c3qg~E%Bi%kGYYn>Q=7M=&0ZM|c!j(uG5-+O!`nR4J zJv(k~3Uk8Xpnr)3gIM-1B@)TW-3xPW@=!s?tJ6*Tap9YhjrfG_2 z+esE`+9vTnw^&lqJPC(*5Vb5@T+u?zrS2ZX`7@QGQg^w)M44Wj>m}PJN7PsfnH+0*1!EF3N*<26Zey7v@K(QAi(djm=uWulLm)zr2bJ`^kwXq z+Yr>L;RlZBk6nI1#LF>DV0mzfIQzz)FNE6s!CQCRL;y%4F2W(d|Cqr~CpxFa(c$dw zt8Zusjf}S(5v4!v2-S{w@{2sq9t{%mkQYH%PT%~B8G9FW?zjaaKq5yjhSerWOjIN) zuX}ei5#w$deKK~K1g&y9KQ+kF$i{tRD+3z*;5s?l5NkBo~eXdCP)%tQp zi~cO5cldX&f0jl3G}SC&ibPsc>bMp`m&QepiePz!+b&5UF#yRK5>6|SC>ECv6lG`H zHY%JXjYuxu9)@6cc8(f#Tz}+5f2!L5#;jefE6~U~>!?G#SCd_ZQH&Bk99jQ5_GG~= zdZFPGyX%^8r0wV0PNSD#GvYNlyTd+Dc=vrb5&qZTJ_nH-Lj^-z{Q&{+kn6CkbtSD2 z9^>6P#ZZ^hj}?h*L}sm4^Wd?Nvy)DAj6WR@XydSDYVfdQ6Rd`heT;y~ojd5r0dhEoJ@pkISY%$#HOL$+ zYC=Y$dRj8GP0?0ys&UANk~jpL)z~ez+C)nZ9+MrNQ`T$^64XSFYHyor=RS;f8JHzzy~wU#EC1H3j%)g`m=?{X;<(;~#&^nhC3udvC{C_f)%&Ba~<%ReOgXl{e*(9}eP`c&_QiEE94 z#`@an0+^S(^<_!F5Zz27Eu>4O%ZlWenzvNcm>eX|(nYL=KV(hJNu(jhfEz%A* zadoKch0Nk9j>k~?j<0ggoVlLO85vm;>VEjsZ-098`o%MrA3uBiY>PFM|MxekHacg* zpMQ1B@UY9%kbT;chIjr8Nzv9qA#bJ^hZ| zo^ExtQJtUb8@HfTm;u*ywLJtRAkujxy~4<&EX{7R3=3-?TRSNXt}?Qatc_{WdS}Xq zn{)l!_cjY6MduS`@(3%X%RZr48)~?&*TEF8-7ft~N7^~I>F-%3e7-*BnT!$V?@-XjX>fnXxoTU5hQtdR8pN+UUxqrK9j&TfG4>-klgO-or_6b z+vV-m!Q{|(wW{j!y?gV%B6~}YztoL6zyJ2>gD+ug{!&Dcfid{;&DFxb((Lg>eK*Z1 zvP7F{ zf%xqm11I*JrQ$9Q_>E`#Z)KOZn+d{B+wBf(%h_zh@kzf@o2BpzUnuOc;)OP8Eb4ID{|%$hw=0J2aAL0 zrw>HE!!XA5ZZDaq%}%4KJjr1XrQeD~@TI>j#_blriGycc_vyKi@jz#>O)Nmw0FZX-w2hLPj_%z<$RBO@@BS-UgRWSLC0AcxA@GpOR^Cx}^ zMMn=rpiPM*AUri#@lbC-K`OWxCQSo|mbu;tj3mZdS`eNh59xm$S zoHS1o571g1tSOz0#MZsCsX2JO`0PW{k_s+~8F_lpt9>AoFE{W%BDPXbo*T=x) zfP#dvYwyIh?Fn+BJW&R=6NPA2U)It>g|}j7wiO0Q8)^b1Xvtx^b+$eer?ctw>nhR@ zbbgG-frJlM31LG@VabB>qACIJR%I0O&%C;}XpFMe-L{14zWPw;Xj6d60avfX)YUa^ z(hraDo%OlU5x1M#PylVq+|85$>EMma<+Vm46;}j@`tr~J`GAy!qoar#Kz){#WLe7T zEY9$B_wDO2njShVgZSGe|4G|;=wW)V&VxS4F=S8ZZ1J&!mdJ*v4ypwze`KFztiIEe+!*2MyMSpbwhooyTj6D;^%)T$+$jE8=P# z2+p8&p007L!_;y{ws8*Y=Ay)B7N}IYxf=<%WFKepc#RQ(H`OMxuR}YE;M(j@tgIH& zxe{K+JhhBk#y1jjf8Q41@iZpqLNK_UWF<}4!DxYSd6m)!k;7+cWy-(Hx#Mk3+3-O& zlc_UhVA8ipSf>aPljQnSFS|Wrx-^@(X+jx zi_=G;!wwA0(MdNG9#MYzy_3mFNp)58RI+5T-ATi7GTIn@`RZlt+y9g<7V1Gvyh!C^ z?=a^U#?$WE}P{5p%`_l9&95a@*k&xjCvh zbLlCk9iFXi+5i4VZSB5uh6e`n@~VJjB*&kFj^r#2I%i}G(sbgue>Qs(*Dh%zFQK-i zFwsL-qE&y?SV8}nJrHXdBctBo$*GzhIXjjlFo;o*KCCNsR5+|LDJCukNkz9p?&8jr)h)()edt;LE`n+-^WC{+MTlS8Q6931#D z$t4Du^i3M@vcglThV;0X)vnwL4U$w69+}*x-+twg+s#cw??RU|t!ZDEe%LB^{YV{L z7OOG5tMJl*z(p3FdPf$)XCXauua=in z6J}IpzG&pNeUO<{jqL&wpXuSlkZ&Yq#Z0aSD7X|hN*+DRs;dpx zPad;>yyJk;nePi%dpry4@|Yq~g~_IR<2O$=9c4rqc7b*m>Z9^Lx{vGby z$)*?Loi#Ic$iEYq%1-Y*aAYL(33+$Lkg7LRI-GV zJTarXs5WD7D$3C&B9K6pL~Pas3t@-;D6^9~IJp%h>ZZ0CNbI1{Fw#)ZuntHtIKgLh zs*Qo#jE-W<@zcH3FsD;fn6{VoNtDmcOEZ8nd+)>X?(>vdyb-@cUs0+vFD-Ec!HlkZ zX1e-0+m_kjskEAoa_H25dVk8H>AKrDX7a3Oa*X=^-27>7f!~e2eC58p792>Ez9n03CuhjfH^p%Q>pe*c9j$G8BZ$a#FA%A9<_%FSLBc|> z&nlbVVPHbJe>>a6+j}A6WNj#g444=1dJF^XP0H<~Fp|;AQmf*g!JMo7k1w);Mlt z+x6(YTu45D!9|nT8_}{jF)yMjOLVYorPgd?soaG;eA0hwQ(@xm9|;RRs>hc8@Tk#{ zbcq!!TKeF3lr8 zfux>xJ+%S@6@AK^xv3wpRCm}xiIX~Ybb~@F!k%MfDWl7j=31Jy>MRDE-ZFT+!sOfP z_Phv&x*erVTG^UHo^j5bR@}nyP)_k)&+%7u=jYGQROMIs%BN!+?)!6QOH=!#WB~h( z9StKMb!fD&!<3=7P6Z;HQtZN!D~~d0GZCz?;=>EwX6iD2{1p*E%{S08!zz*)dr^?6o63U3Xgmg2Fdwe9>s;wc-NAy+X>wry188A1mV z=Fsy6l1uZKeCo<)bKgKBX;8}nFlpizQ7Yc&v^Dh{uN-$${xZtD>;C#H#^=24 zCM&fL(*3qns#x9JD6l+87($jMRtX5np9NkGxtV8X7P4;c}7x3cgSXI7;ndNR8(YV=lIXG`#1d* zr_7c?OM}DjjYb+Xw#TAvZPX+ea(e?&w|Q=kJvJ1i4abM$iXzxF7gbAz5uPOyh@dX+ z``6|I>np7#-_P-p*b(4z-_@24WF#I6nhVz&hk-=nGn*BrSgz^oP8~cY2l#|?8$&g2 z+9n$`a%-lR11D0v;^L$hGmJ1|BzH^CQaCtR40Ywcw8Mtsrp!6MI&=TrL~3Qf*UKv@ z8fe-Ik2KgFau93SU}s>YyXNC`>Wro?kG{!a3bSnPdDt@ElXJZx+&ui@aOb!^}>9XOR@hRVbhHP4xoYU>k{ zQW`Jp9cCn>Dd=e)x1FAya_AiuCeO@T@bjN)0Do0 z`&C^+?*I1tM^B`cM3OeaOJ~+)?kVo|nr+P^-6OidD?DugW_y?PF%W9DP5N+mATSZY zzVIvJb(C778whEIIGO-d7v{_|8%3{%nq!tM_y4cz{9oGI&p7U48(9oW7RgDk?cmfl zE~J?qJ36mv@YqTg5MecS+f_^iYtNXyvMg~{yv>oqNuVCdl^w9ZH2!b`UgTD|vX$%E z51lZ$a2a$z><`-OIj0@lN19k0YVvu1p67W#-#*XZ{`}X^gFL_s=rKY`!nf(9Q~jEg z*-~4OFFUzORABUa>=Aj&=Q3_RlhZxCbq;|gV6frrxKHLSae>bE_V@WYrliY5mw%KO zbS#L}M(yI;H*ch9*6Mx?inBC05$RF zXUCC(!E~wB(1sWAD;#&^AqbsAaMJhJYk~mTMmEb@a52bYV*FGT&%lInt2}#M%EkNF z|8a6-#NVHO?nmd5I2a{I4L!jbvtf(Xo-yclH=qeUj}ZeyI6r-%U*+o zpMR8J&cU(v_k?O$sH_FS0>NeazqFxr+Fm`IR>S(aK!OB=6{V|!NdU?lrk@AJ?Q}3r zn^pjc$#lykE!N<|1fh&y3_;UC4_*yIA*uA6jAi=q1oytKugi=ddh*7|pU9$==p`8) z5(Gm->AW)CmkMnzO-(glPfbgpacoH`FNPYI{<{10?O}Z9x5JUNB3U+-QMtw8L~_0r zah#QCM01>n_LqjzC7dGl5)#QjxpB9ln}%&Xe6TW^u-y7j^9o$^3?b>_)d7iYxIn^5 zg;}7b%bD3^xxS6p23m4+2j~Z~)b)U}yB3dWvqz_Yy3)(MqiYnUgOXVyE{X6SM{(>Ewvi-RtCXinc9D0GB;z>`7Z>eqxQr@;vpEVvHaUu7 zTl_+oc0AEqjOt;fL*NxdV;GBDHOxO~1ob(byZxZR9#no#o<2at01^-hCXD36eZg%+ zJ(9b{8@cIwBFN3URBrj#q_2YsZavF!kdug{(jr60F+IFVYA^Jd{KxG*U9W_jo8ph; ztBp$n=Y*M__GXV?#x#A=Hu|-6HJ7ycu!%w>nrID=A7|$ZhUc-x@6ZE2Chh%uG>vGc zJ0C5WE*>*#zI}C2oGT2vFbFmqRFDW37+_=Dc zT;$|8>Nd-qmwBVXz5f1%O+(VIL)^aSkEp2$Ker;mBih&dJ~Rn)2}d9$GD@X* zYm26W?L?!)JKFK6?TOJ}&|%eNzWDxQ6$;Gt==9n5-=7{F?A6u=t=jbJ+Xlxdsn~Ta zy#qCjf0`T(KU#_P&$X1rvgu(*L>9;|i2a7S^R&GO{Jam|%fi7KycNVEL;8fw>cuFc7NRg+lS-ciwL3?u%f8jOZ{Q5?@qM(_nJ% z*2(F;D*+^lf?O~puzZjb8QLh{B$>`|7B0w29( z?fi4{K{nr&kLd@SesbsS?k{fczOL8mCcUSMuI8r>cN?lr_3TdRG71PF!3&iwlV{In zU=w)qAvT!cpj_DwnCl*QV^>0lhwqPF4@m6ITwdv%dllpprJ2i^t%s94JGQ5U`c(r_ zEQ^8X9blN|T|X9LVadv_TDoj(E;k!V6kAtMD;MY#mU!e6ud>kmsGNYH!LI{qzyqC% z3B#ltaWM3Q`=zl?S+{+LC+;5q$KJ%{;iYC%(WRD#vQE78Gevw93FmV*ktO7ZC)Du& zEQG>3Yag5ucS6ewN{Fh|?oc&yvNl~efyBR)q)?ax7^$7tLBwxC{SOiPJBul^W62UC`9vyYi)3H2&xovrh>$WN zOT>_@W1erne}DI%d(XM|+;i@8UhmiYbzkpupEOHzV@5hYIsgC|FPj)x0|4^h5C)(S z|2n?YeXf5U(p%R|7XTWv=*ezW|2G?KZL9~>jtOi400OWywJ|ikeUF`;9W5lp%F6n0 z!T)RGVq#28O#FO&m&0*vtgLb}(i$qt`Z}8Ye4@;B%%(`g14SUc9S&Y8({yp+5KD;`M=s&;9iRJc3&tG1!Yzt+k~;+EdqR zy?*`L8tAD0JJtDTvS_|G`kbIha&r24QAs~R^hG80ByW?pmbQa$?}p1`@wsld^c7T8 zw4yQCEHf)(Q_F%#o0??%$r4WmZM|0&uLJJ|m0h>Z&ns|KQ0^WYQMf3h!y~G7-C=$L z-{t0J;NhJTaC_@(N1>%fU|UNx24mvxwXr_t)N{RhwtUduHk>XOYRqw8uahUd>o zX{wu4)OLRj47hf`__yRG=yOl(rE6j$ay#l8#yLqg)*dcSfzpy{2si?o@4t9KNm)_X z!ps??ZOX;Yr{NqVA|(Bk?%HKzdjmb|8}`1Qx5DQl!sTVP7JR%F@7=x~_+OHgRa@V8 zXnTq>(fR$ZAL;UC=_@y&#nJzEcA%BF(8j<^Mw<)zR~IfRLMzkDp~1V>*0&K#7_aE? z&@@om{%?4=@16KbDGdcH_Z%s6ReRs=p=FY;?kB%HFQrX(6cm%wOAG^&_ix{}z&*{$ ztJ`yQyb_VUe@XIn!$3iKXH?wtgOn6#>j#BG;gOaj$m;$`h&$Tfw-?l`m(lkVy}bGS zaX3o*=;>2wCtK~9;OlAS1`p!?HdG#UHj=6ePlj85W~J7(Po~iue`+cJO8hlAFw*Jn zUe9rPW_qr>@UaC(+v57YJ^?-Rr3mBdScA* zd)La6JY48027#BqkpAuKwE3Me0b}KVppOZ$HopdN3$s(xqTn#3B#QvZD6gSUp_tja z-VTaM{;8X7sYr37+@mZ~b|{pu`DbTkS@8#y<>%A;Ge0})U)EMGw2u6m?2G--b?|w8 z>#S{Q?QDR&KR5T}{GCeZsQUUnhqBd6`S1I$rIEAh z6-EH~_Uf{Mu1&=JR_q;9o3$R*!}v!G9k#!3^9v+@pb6TG1JSfo+vt9S)E|lG8$yl8 zTU*x3=C|9zJ1#E|f3JA@w1;(2PVvoC2VSq_F@B|<0p_Hhf{Q$fTzYbFU&)yf?t9!5 zl0LZ!1@^(;pZXb+k8vD+4HsL;z<$9rU(W4aQW~eO4pon^W-?W= z<4S3!(`0%~h#6DFEB@}QIELp6>#P8t$))drUU4b-62jj9}e{SZsD;gAmq&Zc~0&Iv-kjyb;6&&RCk z#PtjfBd=dKyL&e_*6G^}rYG+|w|D(`_|EYoXExg)-FnND8*&N~zj>j*;p@>Hn(+-T z)d-J$Z{|kkKfaF~R?{QCz4XBDMQSAwMN*Aob41Th@hJ=6O|-a}-nO=e^hSa@9N&Jc*haH*d0^`>BM=e*EIPW5?UBt`G;E zc+bDy-gvD$AIIg~mQ)!vwu2^jPcvTnwT+_}Jf&RNs5Wdseik6Tm%o^8-}lkAOA+ru zZsG+vi6b8eutHUfn3VCf{%@}WzfTvKOn)UxM~ao>&IT8aldWlS?wdi+6Q+yeXlL^t z|NE=~PQc{R*#fHGgD|#rw&tm&O1pkqRWLy>brGQ4+3*IsI(G3!C_^m3QV9UN@jIY; z&~C0hfJtP|el7Dsg5oniL?U4&m6bH+zdk$JVH<7gu_0pK&Asqq>h0fweP&$KO5#sk z8kD_z#9iDC9PC@{9tNFE31!{3U|OIp<{G|4#MQ9uMZFho1-u%7iAO>tc~&q>7g$Ae zP0+#X+spRPJ`)IpA=0Cs;dq-Bw+}9MzHe7$5+N}5X$80Ik}AWMs9)qim*_a>TE67} zzOlDy;*xDkwWo|pPXqE`BaodJ!rqq!`X(#@*aL;|ohks7CCRG*K=_Uxihv>39@WFNv6?Q7%r3L$o6yyndVsYlu8yJfJQOo+umNuwCs2qA&`Gb%Xj=>zcebo;5Su0 zY#p(Zz)xjFQh@u0+LM0#HxIRQ!b{>zLV}q=2g(sVP!&cB->)!=?qfaf{vkri$8gb$ zTZ=sI>rN1O&+_Za-3`2@GK9zLd?Fq2S7+8Km7qtrrDW?Qq{kFQXfDJV-T_k}MmGpP z7Gdhgpcm71TUXH029R6)Q7OY}8Jlefzj~Wj@Z_H;e}zfJmM6HuhA z7}hum@rME%o12;n3!9v=R&a~E4W6_V1PDP|^OHd#XBDA!+?=(N_75mx*QYb>YHc(G zYJc7EPLuwJY8Pbgo!2D-Vus!hY=nT0KaW`rB-qA0^PZ3DO4V6 zZMuLD5_|>I)QHj~HFbnC#kbKJpLZ-pie7W7%!{ZhUf4}qt&1f61 z{^Zj5-|AaT*wZ)iGS~qegBLp~tA39W{&c#TVw`iEccS%fHUb&qx_!!y4RbK~{7QJ>zJJDszMT?C(yXFxcSFnNJ6j>qR&)?>ZC6=tR~{;pS~0e zM9=Z|=PH`aXm@2V?u0a#vJ-CXLqDSU4CL;Q(^y%T3C_s6b}Tm!lbScd0M+`%um0 zN?YPSx_lFp%|B}N`tZZHoNtmo30)$*{g%RX?u0^l@lEIncL6Vwy{?cFXqXWoOqGec`oWZ+R8;(fFSSS9t!nP+8>UE4Wx~aXi+Vv=I%Lk}&wtkr8)9XidJgEDo&HlPn31w23Ey%_*x?gaRe5UmxV2fV1$;NfAEFeka&6qP}hz~u`grS^|-QaLzT z52drRcF8{wH8{P$E=)=r4%FhJF%b5be`K8iNVb!Pg6`jsE!P~krtG|%!G%%_{^|O#X9@b=Ub6LSY}o` zDaM%zcTPa*9*q7Az_g76q?(1}>1VE%%pN;~dl=sI<@j&nGGlSfZ75w?8-&4Z@1YUS3=e-&WS+w6hQ%GgNgTfQ|`H zE%lCBTC#Idw)6J>7nhQR>fa86-~hxR)-#`4lzg(1okuSWh5(qH(Ly)uju;I(&b;G| zYtL&n@KE@6PW-WKRq#(yY6%m$*N8JQbDYSrA-I(p*>}#Z7(>W2jnz#6O68xvN4>Nz zHsvj&53{D+`r~rpJFf4;Kwv3Fz9p)XQms3^|EEY&ldyXjVR*zd<{pO9hgV?KV^Jz~eU} zD4*v#=8tiA2eX7AU)amYiVZb)%s_`0pK7HcHDS#J##Aj0Dr#%1ZZG07*ESlT-2>R` zWY`JVbN5E#yv{a-DH&v-KXf+OEzzw=0{Bkki>HHWu*uO9g|lq|DL#jiD}N{Th^9dl z*01E&4nBW7JNHzglx1jjj*sM@lUAUTLT`*>U) z^K}B*O3+(ox8?p!D#(GeFeg%h97MT(Kz;1*z9Vkm$31J}sMkeu>%HwW2Yw%SF;}0H zQP(8Jc}O7l?DNVi5glO+jbm`&dBBGOCYDI>B+N=N7<(1fm;D@lIl=kPkT7&+v6qWU zp_$EMhwBuHMtZyyF-4*Ud$Vt*fKVX+<@?AbO0>yUtPHJ!I|9gpmK@pFaP$jaTwz-Q zckX^9VBIl6wVX+Ll zABwQym~2{Hrf(CuSI@GLAn;p^OykN(LKyon&^0!aKJh|Exl}!&0(C`Qd;C1dnpX~C0Tj62hL(ib2x2hkv-PvVn zb^cOcf~&NW;o^Uv-~<^D`6~mOe$G$8!uY=rpY!Knff1|VVg&?cf)A32P~WwnSbKt% z05%otZ1LoBw#%v*6tR`JAfHdm!%Y#TQvck0B&3_2^yo4i1&_e$AK zK@vi`w%%*K=ik9-hg6>OzWKfEJfTh(V6i+$xcDEyz{GUm$b%2u?r-mUEVMTy@Nz31Z5S$qgoKipMWZy*Bw z2a41tTrH^|qj{;-OE06nggN+YsI`9UBvEsRw)p~E8A(+z&*S`))IKV15Y$q-Ecf|R zdJu;I0MDs*$%F$!XbPe)l$sE;yiaDgiZJECUSx`*88*63qT>Q2VJUd^ayBq{ZH$qr zQ0?B*tb7@a{cvz#yQ{N(%s=WM!*e}%N;--<6?&-k$M`I6B#w@MUSjbF!F(mbrNM5h zK3+q#@~H}z#+s$y?7zG%Mv1&nQh>j!;!+1sSt*{TQVRa8ymF9!-|k3gH?43+t`uWr zZR$qj8pL)Z!7$=dy1=}Z`l1d8z+rVbe(xL<|Az&hPu=qLJl%vr;aqA+6<;)93IK~2 z;er07g{QZ~&7UJcMu|`fC-}y~jUu!HNV!G@Hv>P{3b*o$4BLAnL+~3CjPPOs zpc!@>2?TaLlOQy(50Y2|8Gaay->2uU#f5IzntZ>b?9HgKyWm<{sTUR3Pt1&>Lmgl4 zVV?SuT!rVbE&qX`ng*Pt0M}1xpl`44YE31DO16?NHGq^+Ob>tj zVt+TROtMRcz{BA26!0&vG~9}Gt7a8Wf-du-_zjXVR0ex`I=wF@NEqQXJt>An4Almj zO-tW}1;&GgvrMB1J+iX64J?Q19{#QogS)E`NKc?vGQ7wP3uMQ>U{njvKxD)h8mr1U zw&6C|+ru&)&^}9sbhzVRU0k83Lgj@W3q^ETnLp&afr=AxoPI}1vTkc8;z*9>SU`o% zlXwq=n>oo*SJOoFa=Fpd0Vu(KKZA(C<6el{U>?q3^Dyw_@%N%ip1Yoj7{ehECI&{F zyn@0zB-jb47dcVfxOkZE=^*9{k?nvhh22l@8V6O~zdR-mfY&ytfOdp7Xq?wd-%@v0 z_(ZzJA^mrG`N5J@a6_{TZC5f=W@XHme#-38cqyc{$h@H1h`UH!o4SC?r8^&Mp8X)Z z;sTgZ$G`U+6!Mm(H$l2|OkdBF@yR04-sigt7+XD{laf zVK!9zeax9^fUCh*y==Y03)H|UJh#oj6xR)p>6CzAiQ0)-1FfUit8ub(AiTQi`}JgE z&~)C{k6NpBJtsmNoytk)y>QJP4R^QO!mfx&fbTUJrB6t-GOVQyN>d2iddp~|W zNOLC+0mTL(Gq?P+7~nu?k1m}QwX-V*^gOddp>qNi_t=w4mV9Iui+vkT#Nk4s+K}3 zM2wEdG7W=deLkE7*JYrelM9K3$@0J@!f1mgFQu{S-MyU50{Af~a031mgs2s2aDjo8 zm;O*kep)_3{(eA>B|O{aQ;x zyy{`Hdkt&2b>+y2-0mGPXA$mw_g7IA@x#6>!4vm}XiUR+Jf$D`{1QR(mNQGS5_9!) zpzGdBa2Mg-%cp-~7m-v1e}lWT`Xwv0MxHf*0nb?)5TRWn&I+4Mk;?(GK&DewKZ|bN zhgbk6Ep$>;4=3ER`g{|Rj!-CW7tfUVR$m+&hNv&LLBixD3AgW4&S;nf)^~O=AtsmL zmOOz=pX^IIe9H68>U;V`87>h*v%yi9xZ{nU>By_Gf7%aDKK>_eVe4Njt1NZ@i4!MB zmsVB~db?UdX^xm30{oyQhgrNXpwurSc96FxT}r6%w~Cm1<8vZ=@Hdp z^1meKLbtDXRR8NjIhJhD(d(*9;}pzarH6nsMEqaLnc z?YoqTEYK{yt~3K8XvX-(uni2=A#?gM2^d4gL%@2MYYXIN;FB_4)`Os;VELa0_3L@y| zx9_M3V1jnVLX@pu)Q2XC@fz%b2jLsPiMxUJk6EC%(qiB)QehoD_jG`tb=o^2(@X>2 zTbi{tSx&7or|^Ug?0bL&%tMPNm%d(G6xO=i##`wiFYfv`SxItQ?;9Wk8~C7~hB(U7 zD=A#J`SKgFW}*K42$G=Dx#1r>A;LO;hlLH%d6;{BMYi4MwZlep!bB?sd+D=V~`frv4_c{Ks!N5T5b6Tv8Z3T1nur9p*B^B>!g4~M=1_`Ho6Gm+KON^6B z#jFtpt{I5}B+?fWxL2V0wtte74ytipY+OVYFcRqk51N#@ULY(nRAlkv>`P8gEKOTs zxvQl^#f-1iOLH_Cb9(!q+}x4X_<8SPw^wj^(}WVMZ7Yk(O=MXU6ddu}LWZA0JE=yY zKH=u#nhf^(p`b+Yn(_si9^s>=5GPmdmD3`JrM8*45i2`4Nx~Hi#Dn6MFQM0P^*t`J+ZLP0w-oMFGNX-& zIvb*4q+@6fXl3~g+Yu1fcxaOF6)j7ez-`oCLVYksp$<^R+lj5f2#D4X~Bhz8h? zC5852E{G?&a6hDknp*6&8;{gnziXay8`3|Z5~eyLj%3X;&Ay^ty#C_(1M3LM&JOCA z*2j*X^6WsCvGw$|>^r)sHj&}=N6*fMPXE1~rz_Jwsr)lFOGZu6^o{7@52j7%Q|;k1 zgsMT@!mH9{%qx81i3h=jVV&y!F9N6{>~pISs8SUDp5oiCd$KE6`RUy;wDq0%JP5YC zSWVr6@q8pr0~gUzqKm#5)4l6~P8d3a%d7)F9%Ge;j?+4%+NwOyTKx1OcLMrBMu!21V*D=o>*3jre7 zV=#?>VoPG@9UaNRw#T>Ea|H;bFJ6Nazw&8>S0(EVH8t>>s@|&6f_4hDLm4$XNT~Xl)y>b5Inw z?>z)3u)0hdPv*lpx>N|3=kfO<#^ynpzMe5B@RFu3|tnK>9%8yc&s zqa%Odd_C;$mE_b&Cb(yD`l zgY7?x&+a@At8SNjH|hNaTRu7{}R&1>V?}!8{U;NgqM6H-IyH zv9pnh>P@v#8cAiwaTDaqXH*Ukwy*Q1F(j&sh2OzQM24ckV8S^-XcmYW&bF7Gz^e)b zsw@7ztfUt_bbOmFKKT>$@y%kf*(eqGOong}!h$QKE1m^7#oKAnEpMUmqodNRx7dXy zRtz4EEMQK+ zTje+svA6YO%UF)7qF|fw6e#HoY(iGAAehl9=9%7joDSt?`hzzPQ3Uq!Y(PJcB@5Zu zt~afSyeDT+;BS9Cy1R5v8sg{bN5dZGsi-WKPgVk!RQ4|{Zh`YG|0*weGTQS$%PL}8GAdj+ zs638oEc0)L*>dzEzRrBZt)|?h*Il$Qj+<8qTYKDpdOqCLS}WzlNo^R?_|H%Fwecbh ziO_H?d)++xa_t6_7KUT=Ulq|868e2I=Av=X*E@vkzomRi3)$VGlJf<+glniRRk6=l zKm2qCNVqigKLP&4msuvoQ7Ct(YAen>mdOK&@})JQ+Y=t8qI)J%b1wXG&U7bz#w7Ucwch@>TE9yqeraEd#WKaS{oc#t-47vsG1sn5k+tY(q?AU`fGKR~ z%LgRz3!L9!e3-R(5H$0;qtaY@yyjsZv_YBoq-^QpM+3ycMj6OR{TwdE&9r5X% z?kV#B-qrqd^<%t(FWlqHTSSMz$HREYl5y_awh2R4*;42X1N%752xr&rObG4-F~2zQ z9-hU|?2FgmNVg4!$?28D>~$pCkn41C(#oa@%nn4a!DRG;+X_&nm$LrzkY43OceR(u=@})ca zaQ>=-OV`UWTldAzFB?)TLX|$Om*Nt^0(I=SA2XmFlvlcz3!gezJ6MPZn_)-zh9klYC2EvL>@=m{`oK2X0gp`Yc z8L3MPHw_R^9wOI+V3GE~gc&ytF*GB@y{X()Hk=mbw{eTHcz-Y!!$&~qS>|#u6GZr) z&>QgLb4=+Cwl+u8@1}?LOBY@am_M2+$lHz?jtRbd+3>Ctueoz-Z{x3%*ONKi6JXc7 z9Q@hxj?0#Ls3^t0SLb@XBqJcr*t`Dt!u``gubRwkMzWwdyq%kEPsQ-EgdP^em^6Xo)mfj9-_2!Q7iCZ>QOd3j}!{N)BE=E#_dz$XkCz>YHY zAM?7tkJq4bO;7b%2Dompf;ydE<$zdcgPQk^3OKOk}@$mD#<3&wKdS7NBQCYkBOwu>yST3foeZMe8Cj!mqvQ>@iba-J6cC=JiMe z^xKG?MM}fzW1Bjm3D$>y%;B5VI`^vtp1;sB-%&Cf|DaT<1V|>d!DDPu_b4MWIn?`Y zH?P%)L=nfAm$jjQI~8om=XwU1{ZfG(^eXO@qvH=YV`!2v zr0^c|Lb|{VhXXI_Fmn~uVJog-ocV&}%659|%X6&ilMI#fU3tSf9i&7+4?nz;VyecR z9aAXbD0vk@rz1xb(@2=zd0ksq?=2l}w=*YXVPO*$9FFFcO z-gVzpjb7|-^4wZFJIxZ*?trEZOW@HtdZ8cp_Ad_JU|3kx&fOCy^GqDAgxb|u$Gzt> z#D^(S&rMeRQM3@m#4Tv4Hi^{0pGzA}bA4I={CariQBmtYW2eymA+DtPcxBqAHT+x8 zw`rch(-q>dOk41dbNLD*7EZiUzMe|0p=q4r`mp@RqnDq?K9!}%IE2|XhKJbwY*2h# zccP)GNuzP;YcCQ^UJg)wW(BUDJGp%Q zj``Pg(U%W`)i(n8kN;7A<5`fm@@GKrKbLa-&s2PL58fJSw)Rbea$;&6^Gw3eHN$Gx zG;T=xg}1%gf0}G)yZaqSj*W=$X?}~yuPdJZy?fo>UZ6hyKxX%;8NU}_!9>9Tqea1n zFOBpKs#)5O>*q1Z^M4~^5+qK=PfwCBjk_EuTgtO`b6oe}u&(11zF~D5YdrrBE@E zSHo4hE;y~x_(8{W&QKXSSWND2??^PWfYb&}0^lIyrpQ1JB|77=Lo%ZimQaf4B@?Tf zWywNnAh5=o!PZWK3UTakeW$zg=j80!=CY+ncsvQ}hb8Uw_!qV}o$@wqt>)!Y>b}Vl zm>9}HO6nnpTMlr;R;`mcw!1bEg#_*^usDVmx)Cug4&6zNC_O(0z960}#2aqaSigZ3u#l#Eq;)Rysz z7Zc%5F<|HjQ_EMc&u7i9c>+*Lab~~GM@|T!yR}C-C5D>kUtFIK6{C9McjsP>N#abe z0!?7IdByjhRBlwQ^hKFr$!5;3*<8L#@$AwcHP=UDy)U;!{3N=4fC74cZ^w0PKGwc@ zRi5APpl0WLd@qg+cO}0=KV_{K`Xdxh`&mXz;Ym(+wEx|9#rb$!?eeZysh0&gy1$O- zEWgGy7o*TcUs#656cdBZwsaSGlhy;A62IGS>gs?rV8-j=-@(z(ed~tP@HZTSQm}#j zu8p@`CB#Ig8Q+=W@@jrz-m9B2EK6FnFEk9tZmab+poPOVU^5BM@liBs*tFb?- zzf>PXMq_)gWEh>*GXOH?{wiDu7XpnHp5){tb762pA!L)DzLnv@zS)qoE8UuMl3#yMCwf&eQTs6rEF*H9Cs{~(uxE>La@%4r+LQE z@j5gAEewKGgd)r-_mGioZ+~CVh#C$emv4h5h+GV*KKSvp<<1WKip+ho1xFQ*6(%))ogl1G&dII5}+?fq9=#`SlhJ-4Ls zy6v5p9~%??_^M{FLmGD|!5LHURAotWMA@ur|(le22|MG1RC6;v0Srf(amTNytw@uXIq$9zgcW#}%5@sz|@KFEXs zJGUO0`)*Zxh_!&I#3Rpean_AR!(H2Bw>3*48`uE_chI9P@%oZWc*IaAdgCCTE9=7D z%Tnj~8|YaQGH;Z)#vml+@41_Xn3|1MJ;PP_zh^b8>Sg1ok2DeTmw(#s?wQ>VhsAgz zb!{@94%5G`^cagzvP$GMbGP;^A3KY?Q`7zBdv|AKgptLIB<9Y!Z`n@!>Ny;vtntRy&t%%($g^Nmg{s&OY%Ss|Ra zO0S4hnLc!GlT%i37g#ljP!IqfW_``QkIj>H+Bx0VovYcoX%7COQ-fqt6x>qt{b=ISGaHG8~#ZX>G`k{Km~JxL~A4TIv33Tn>++=w$~vzH0jN z10MKBSVh7{_SIv7+COXKxTm=O3^lilYB-8uTduUrIQ$ za}m%!=?fPx53U!W2Au)As)u_K4!QTF^sP33l-zOQ5|r;-t^BRNn3#t3A*5!7d$dJ$ zn674GdJeOqI~=`yj6B`V#^+A@X96nq)+IAt*Eia6+>H_Es6V|rNRuP>tpXlrLa{6% zyO`L&S)a&XIu9m+)aTSfSP4)Pek7U2w7!Qhk|praWIMqa6d16oZqTSda2rJ)H?SXg zWDz&MhI3~MOtb;%#bulV+B5R;9Kbo~W2>cXnuW1{Uix|+@{9$ZZDutzpbN`RQ@sqc zB=raTlU;iDQ1MR+rCq9Mnaf6&=U=jdw?5t*s5Mpm%dzTQ6Ql=s)Sfo}kjAfC@L{7N z-pZk+eDzsMZOqKxoOy~l5M|c#QG)M^6#vocZ`g`lFZ827T@+B&!IQ%W4WtR{+3bXj zbg)?jt3<)j5=^%7{AbfB;^!d~1z0ig07+!BJK{5>Az^Qdpw9qm*?25=k+-slsf2iM z;yZJb+R__ZTa`y5GviQEEIAuSpaGh6i77VVuRPd<%P6FuGC!7c20fbNBZ?j6O)W^R zyS!f?X9TT*$7bpDtaa7BhW8&g0*xFXOP7H>+35?@c!k+re0I#dbmim{ zrQ01aEfS}lw9gxvYj7fqPV!h zC&JJ67FF+4+~K#TfI4mP9r=q2z{>C*UoeXYn@QIZt|u8AQz3MOEa>*5M=Sgik6^d% z*M}e&{$k(3Ew3j0OqFYpl(W169POL@@ctIEy0CpgFWlSP+xXfyze=p>7RFnWJ8TVv z^niUG020l@)w}fJ#wqxs?qW_)OwL&`h8|!!yObeUzDY-Gc$M(>Fdq>3NsWE~Rvdq} zz5eNI(ECq~ftgv%2kZ}S7tUv|%jO*Dx}Tj(o&V3`>R0imB;)0e>5Sp?d@@>r$jKqO ztDZZL-0a35E*|+TC)eMll9jD@Z9^D5Nsc=X?n3q z+YK{wLv(%o&shSbe7|rVZ}$T)MV$i&QGgJ`{&X<0_rC+YGbJx%yNZ9h!&XIbyEqbZ4?X zK@X1ENiN=S6QO^FJ5Q1I!I9&g_t0CR!QCArTqAVV_0Lrft_SCh4|oQ|5}E6nF5~E6 z`G!cADf2Jq(MQr>BbZF5k;h97E;aTaY-{I!dclyhEN}stPW&DQ*ZnbX>&1%Qr!U^M z>duxwP#$}aeB|9O035E~2`<^G4{{G|g5+RecOcLfw5#_uy{@)dw8!^_y^IbuWpqy6 z{~55t0J0v*ZtT22StEN>V?*|z`;3LY1opMI;6QDBAOjLI{1528B`U`eXn`CW27<7a z`Lrbg)DcOjw;#VZd5^1;Tv7o=)tm3ldfw=3O3A$6`n7RecAjtK7IL+*_HBH? z%+^Q-=W92ptng3KB|t?q0mAtA`(!(79nL4g zZnLd}FWq0#ABWuH+J$Dy#;Ci)*-G__G>14{FX!9#)(1RwZvSxIvOv=#b>dW9?M_|y z*}?Qd4PCb?^$(ZbM!o1gK-v*FCAk&%wF#4%Xvye(zFHwRKO7kFF`&$ zJa8XWKl`a*u!P^InE6DxPkrnX@tGHjWN|%rGc3Y@uuqi$vH-O})ysLQin%l?p!JnL z?BUO~B;Eu8PHlr7*=lzKcjA9D)e-Jyan4d%Hwtc6NvCRGzeT_NG^0PN2HyOw#h&ld z#>Ej{Qzc{;gR+JZ$4iT3v0~T%gaKbDi-`XOux#T)&S1PS13Gk+^RF)TV4g3WAQU{w z0n6^yrM->J_=Oxwz`j7Pb5Ut?DH2rIJ{M|xhwbR3Jaa~9oNA7*h#u)UG7D5kKI z#87$Q%Ec#WctqRl&+o@0ot$=J2X>SVZLKPDt^YDUC967aP{{Xm?=s&&g0cae-pO)( z5~X&fK)4Fs$+Fuma=--!@Dr;9BS5~l2~(;CsMa#bU!FmG`*~}aOYrCN;>v${{o&}} zm`oO0%J@|?v+GD~H84^>K<&y$EJs`JEzWXQCc&EH#!C%8(?sXPKTrRD;!{%W%I+9n zF?TS#3)MX(1OxcsYrqSn$t}6*lXHyt~t}@Z~byx8Ed&zW6>93;)aik<(gp&D}d2ILUOjiG2Qw{T+2YpKOi!r zL(e0@i@@Oi#;4#_?WVxK@)O0og;B?RO`!n>#>=)j>o4qyzoMcYyq@hpXvgU4Ow-Wo2` zmpu5&I8#1Mu+fAGAUs5yQk^AaQtNS9q6i%<-vaKx2M(U>z4xu%N5?w9vrVK%FGa_h zqfgaqR^4>y$$eyw3tq6WKXOY+ew)5lF&VR44`2y&YagE&*aO|&A=(Y{Fv;Ss{RhZgI5kFviQMTOP81josq@r+hb*>4VGFZ# zssle<*Ca346JC z&$DL?Ql=6dglsyJEh7>+$^)J@TD~~`lj>GfqXzpqF9BwQ56{ldI)ew4>n;et&$#6z z38*3}FYp{)YC@m^#=AJ}(RoOkSA?Xdc3^Ve8?OY(AATM-hj!OPEx1o_9zGLvnc%^~t?C0`%K2E{S6g!G zWt=}RGQ13?aYaDgHl|AUPxIYh)I-McO7~l4@GBVI3g9P$>n&LJ8|cS`5M&KZTEF#+ z2ME-ba?E6xR=+ttK?GU|YsLh>21tPWu#76;Hhjnzy^Sz|0ZN_kgxK9#sL)huDbJ{L z>DOKL>hbs{8SNRIfIN1s6MwCE50ZX>WYMXJK(CLF;&d833?gvVy1j0@6}JkmuPgg~ zi>GZGcOUS6f;6H$Vup2`X}pH9{Ox1B2>v|kua__=icSsZ+V=bgn>?#|KQJ2V`_GI}{d{Ik zCqEC(1C!vzo|3PNTh`=+_}ciAT)BYc)V|5ob)ngSv1TLF37lWHc*#C|{mticAQT2* z25{~r=Mlv}@gA6UX3A9L!w5VJ0Egp7pU60Mh7FfouePg(15_;gH2KK-N#G)IzECr9 zw`sT#%?4z3>Q%|F%TvSNH6;Pr%&s;-8GM*=c5%_H)PE4Dwu2pYM~O}TqhD^a`2DiM zrbcb?Z{j!m1mmu-DpT>fWdLmCbH>e#$^P+C)$Pq(mwO6ro1{&4qo4OhBs9ipxAd8R zw6soa%>Mx|EB1CvI9uid4xIqv!vcg{E^s`NgL?^xkZ_G^6qw`zqGT8`Tkkn%?GD{A zpv)*xHmQJA(FVW-UIw73h}rPsbi`{nZ0NPheW0yB?eH|h27C>>ck*R;08Q%wx8ibS z5&_ui#n1oy2LLvq(A7fZYzGsyt{Ri$;-}}OV1U*U>pPiv^XNTbBvo`_3r>`_KKH&pq#X&ij1d=jL8WSo|PzyQ=>F%F5|y^9xt* z-&79>uxZZW&1ne;1G)T3NOGGZs1d>AWPz_P%>&?lXl&a-2gFV@RU-`qWrpKxN)*jZ z`%wQ1s^hW!+M0c@rNcQeS5Ex!^LZ7YXAiPPuQ!g`)$gLn7hW8lFn ze_8!IB~D$1fnP{~p-S#Gt?76au5q%m?>ueYtr(&I>(7)+4RsFD>v;Zt*D0BWPfcPD zrk<{#P%r-0fV=uns0KzdJ6Y{aKn2}!Y~`$hLK5$6%P%xoJwk!N>Umz+CQHuRZ>i;J z+{|8S0q!xqk>inS;N(pRkXO(G#~jPuTBjEG-h;9!Yz5z-cJ65hhOm3`4xh|S zPzRSe)L?%bdUh2@1tbI!F{{ZfW_<@fMN^(YfNruc4u(t~q^`|8*p5c=%;PTZ3o z;yL<_Yv3kP|K){9(MxB+k7&9x5Kwj~3#C!_ijtYGiNnDF?q#byU_z}9$V0d7(^}+U z%r7ij6Ioa!Au7ZN^5C0yv}_D9Mh4?|l``gaJ~x??8~nKG8g3>LF^O0VkA6f{#-8Mo zCf96gWbE4~8JUH)nPj3LDycU0-X`-GAy6ZY9qBs@aX(l8As8(7kZu^+8~KQC;z!Iv z0w!R2AVVRZbmiaWLQqmSDpQp`-~gi8io}K)sDR^aAT~4+J~sfN$ZG;<6adRV6HwoA9$?;iEZS+MB?qkIesim1)LRk zgzG8dP3V!NjJvSelY0pwNPkB@>D;-el;FXjj~4~Y(lq|~=-uA6d}w*4+G}rJ=G{$CLtqr?OR*8lw1edGCOr2khi zw}-RHq>-O|TdK!gb6=QyUGIC%v z8D8;$XkX8yol$&+fHf=Rd$xP}9Fyf40e}&Q%}6u>Z5UqeB2+)XG-52>RfIpL{Cnul zXtDl0#J_eC?@u|a<(exx*Trtq6U(7?{J#%--b_i$!4dfSlRy};DFcg-0T%iAQgPfjE{N7nH^P9|Xwnr~MU&XN8Q8B*1iD)Y zx~`{IK%W+3d{NTH;v6M-wGOQnX%}B zi*}vFpAvm~1?=nNE!fp~s&!B>zV7dm&>Yofglm6;iem*S*EEKShx_RopV6l0k08LQ zGPjPORk>>ZsA>AMH+=9+mA{BpZYg$OMD!;hj8c2Tgk<;mBz!1&s53X60cdP5Hr@fI z7nSV5|T(#y1tU_3e0KUD8^QC|2cUM()ZyXMt0kN<$kYDhLEc1lUCU6dc zXNGRafs!}yIUd+#g%p07Ia$1wfgh3{978g5a&1L@<3;6-dDj$-Ep6A5F= zAf`RC^e11k{i4oYNi4u}fI_H12>Tw?^P}eSqe&Lc?r%+mM(OJ1&9ubKhR`;7!AI+N zO)tvpos?B+z3-Cp?Ydc6r|T`Z;!>+suaVeXW>Nw)?Y48TKVD5?VRH zJpg9N3+Vlca5jec_yAk|^PljIfgZFP63om=9>EphcCFyh96h(g8DvH7-{1kxeI86? z_>^AMoE29}E5I}vxE%q$wL=!@)$c5Ld5WuDVN0Z$7gk2^`$*TWAW>FZOy}<1%HNP? z3TMW5?>m&D%a_2->#ilk4_9}k;R%S#C%jXW3;QBSjpj~~KjORngyKY*w?nl9t@nlD%E$0T61aX%7NzDhH4#&=7W%H;_Q#A zJZ#2PVjfm4Kly#;VY$a2ao_Q+>$Hp|`>3d>oE#?~{l>VW94D8OC?58iS=u)LqD8Pv z)<4PA#`2{LE)%mZ#KY086v=8Gx2{FlHCrAvu0IXLOt0Ml_lgiVon0>;awQ}o2QwdB zgs-|2B*=gNJJ#2-`H8Q;zX1k)BFcO~(^QYb9E=9&dmEnL_~2k)0|C0a?HlJlhv5$ox&uk#3UTuR>q=Y+xsN|eXvYxY9vkKLB|Eo~<=dMttc=j~c`L6o$# zpu`(F39mAbGMoNNx&i`4(XpG#^*qnBLK+Ld&nWWv*Tph_)T$BSuiD15`;RUv25PR< zR{i}^V(%8C8K8G_rx^(grFTBv!L2O#)CKBjxfatMgu_qlE|sc^yD7m}qy@C>XFVL{ zelmYdqLpfM!>)*vGLdgL0A3{&WYqXMR88)EJC7j~KtGfJ`?;eKt#MZCp1vRhL$xx4 z5vV2?z&21I!#}Ye2Y=sun`Fg4V{uah#YBb(<y|8tg%S8$_puOJJE1!*bMzTC z#4z$Sp0Xa)ACU#X_jX-l!qIpQ-5XE4{D=1{E{IIc|Es^<_-R?|eGA|7bUV}!dwYAyOOTH& zLglA%_{jHPLv2qGrpOZ{A9-Sirt_7{uSRaqV30rsG<|J0!;K$y^%jRDIH)Jw1Nakf?zfK^aUh=djniJ2XZeTab>y~Z92+>Inp|dP@udAFwzq! z9@afcBG>X`wND=YmtLQ25nj$Jrbwn-X3={IyG^NPv~|Uf_dj)pqI<=%xu5>(`Nicb ztO4_~*_-euO*Z`pL@BeW_;Ur{{*Lx1{~%I#q}Nj(#)n zoH%aO=Ek063obMD{9TBmg~6~~6c7KqZQFurTo~6AK$||W*|*yQr<^95gTM7ofPy2w zX!2%gpF;LDb4cf-X&MK{-kwQ#_`Y{%a-b3O1~-+ z@{2S6oXUs6vtPij)mLUyn0EeS%KK`j4UO<5)JZHDJ_jGy;BXfp+`G@r_pc%LR{CAx zbe70hLIk7Bx0afo7N}0VGgl7z&Y9XDnZ(G25!-iYc&NAgIqs`f7IotsMc&70f7HMa z%!zIb?pm(F0MN2S8@2TfZ*{j zEn)s%FEmfrk?ziY&GA`MYs>g7KT(x;qU*V6QZEvs(l5w@1AoMY#x4a!#Ny?y1Rty& zG>^CA-|gdre!&xts35+F+Yru7iOYHmTDf@NxKS7U>G+dlu%)HDHd5T>?D~_m=izSd z#q)RH*zMN!Us7&(}s)JetLgVGYBSsDs!x=?*&0`SX=}qkJ>}AUTFL&Z}a)zC-pp5Ov2D{ zI1lKMD-@7_|E^+99ESl3j|I7$M;)ktwPu4}U-vv8IR4{Si_z~k*#}28j+VafdD-yQ z&e8g849eE%ky*YX)G5hz!d9T>hugqz)j`Z0$8KTGdT%FEr#<+$&8mw$kfuC+BZXUd z2{MIqF%VV|F3$uxAdU0z6qxkst=@}|wQf%6y$lQ-L|AvxO$vNR%e(^y-*Yrpr>;{m zP+d?u=z0Aai4O&#s|iU61<-@U@ZhO}m1he4=guRlHU)EVU>S!bJE>#Uc-B0ao&B1g zqpdB2(Ra$HOW!@jv6c1pgQj=>*QF06=P>YojvBxvkGjQu*V({Yx-<|p zVpS95fy{WIFRh06iv7IGiY%;JPX`#>j8qoDf*0^+?b3*oWHBDuLfLD*U{BX ztnI|~R0JwK)s=5}5m|k-jGH6sr9Y~^H(Rps-v@gB&D#G4wbP`=uZC{6<}q3b^tPRJ z4xpSqMc4QS`*MRU_R|=DnMLeTTedL_r@j~WP4%=DoNNw#Q^l&uX+dAMaBMZj=N+>d z)lRr-oBQzHTq+yzo$5h%i-(%9lEacw(!2zzi$GHtqu?D~D?`q?B6hx{#px`gn(iC{ zI^zEAxq-K-F@w<)dOZFA4UC?XUJ~SP=L3N%iNZVJi_)*Rr#+)%bVx) zA9m7|hlkW%KjVbvLXo+!jkM8-sq0A?h(`sSLdCOf3dN|pqV*^isDyzd@V5XmMkb^R z*jv*r;kUyLdLgCQ2AM0fr9ZUUMvtfioJo1no=_kU{`2^&h=WJ-p24yYRxL^6VejFE zVq(R_WOiu7-VCi&8e?d{sG6Q=^tE?OQZFbg^5rza|rQ#Hr6rXA<<15tbeXaFpn^9bNhpbtl1e!J6kFAtGeIJ-VZK1z9d8K{jL#|?j7P@!BO^8Q` zfNlv}H`~5gZmD?@`YUet_l5Rrh0I~ZeK{MaAI znUw$`Ad06yo0g?53%0iCck5cFvxbq+o1RKcZWA#8rR zoDbiP=eKq<`b^#{I^dZ=trUqY-1EV(7B}46-_9rruJD&t#j(P$sL<>v7CR5A+TYoxpu&bjo*!bt|M~k(b<&AUblcm{??|InF~iA=#8pYW zl$y3G61b5i@Ssr3U%iYKiz4L^$Qph5>vp-1;N5XKVYG#vSolv414Vj(Xa+E^*l?xI zgd9&89{7EXkJQi*BaOF<;tY>Uhq$bb(a!#%j<)_`J4BMchnaHARIA3K!u6=~Z2Wu#_h!HPDfWHt( z;b*1s>$=`W@Kc^=Agmo&)o$N2jw+jqGiM$qF|kFP+xpuInYijP<2^(l!z4}()C`8u zyyJM~nhaY5YC*6~?QkrH1ZhM?M)Uo5$oE6wV>XU{yJ#lQD$Et*;CRp5$KqCjlfJk& z5rta|KDC_q4+&)ew4nJ0%f3!JJx~G?Im&h^8o)YjfGhXKZn_IcV9Qy!n#RG*Yz`3O zQoIB`2M~SH>H4$e)e{VoDf`NucvKOllPZ7BlIyxpw}%H(->%(=4%9QE5S*Z z5ZW(-BX^Y!EvoSyildvtf$kBhDl9ZDFKN=GY$!rnpo*u1pWpg(>CXd--a-4?fPe07)kye~3UxGO?_j3mY5Nw!4{WgIHiunlxzkG0ePewm7@nWRb9oY+2j>M@yq zAgY?_JKsRNLGz1Tdwk;6oX=TAGC; zGAIWe9{eqh6t*OvQ0%{mqP$sBopyS5J@BdN`CQqSjx&IKSTO&V8%pmW^r z$IIf$b|54c1A8T?Z4v@U(r41FU0^l{F;1jcLG;`LK+M=;S5||_GbYwnGq|ri+0WBY zO$S(wLIKQp-Z*-I>J{J>|BP*MB0p_dD&y3_j-dkk*xmH$O`~(fdd+wY)&u4&_5ojs zoGT&4d-Z*Gu^{!GfxREg0k1B&h~D1y_ZG-tEv;j<7vLpYXr4B@XExbspP%2gi}X$r z6dVSboxcJ~V9pDjgB&l^4tj*&beAUlhSqy&hdj!=^nNgOpqmd&yC61lwL{!SNIbtb z71?$b7rcLB&Wbv_XrChlno!X*>?#kBoPLjb!DdtE^!nb&4NI<l3e2j~s|xJnEwR+>zvK0DKR-_XLPGqxUTBCfpo`)Dwt<2@7KN(Y;O;F%LxF-7zAVs?Ozl<9!IpG2~=leWsxaO<_B zEaX`XXuyEuuxnBviXEsAgv06w5lyjN7m1&*&{APgkEeasxx!bwaZmyBluxUJ9fWX+}|OCZlv21Ed}8G-RUnTt=B zv7YU`Kd)iUL7g}!3?N*uhEP7 zk)3>KNu$#Tj)a4)m%NNjD}5Nv>;xr|f?Kso|5IN*m~!VYMV5tY)l324gKXk1|F-8m zuk^UF93PJPrs+AK-ehT}n#OKmSr!dy3kk=~R) zeL3HGnM@!(+uG7`D*dgsa!kQU2B2kVMm_!c5t^c+8T!umQfQSKPu~ppUZhmM-X-o# z#qp-<)5}%{Z!zP48r*^Tz$-@WU=r4^*}xEmb<%+BhE>QQABis3iPvQI z`x}7gW_}T8AdNT!{?mhg@rcOhD3VPt!rGP!3|UCsGhfvp??o*Gq~R)&N_ne~B*pll zuzwejB)#+0YqtfC@ri#5@Z@rC^q<5SQI~&-FN%vb-rKQ^(WA2n^qDj+etn**OlMp! z_1S3lIgd+6(uH$Fx151_M_XG;>%Q(SImhLwnO?(F*<)b_Jz1<~E8kkOJou3T*ZZHH zz?1T0FMe0@W@UY(WX}4Ot+MtXYHZd1ooTVKic)aJ@Uh9#_fipYu@4Og9UT{r{D$D0 zB{ydT@VC@iV^lMnH=8if4Wg|%80P>K9yo;`Eoia#kO}s3sNWhbT?CzA#Y7(mnX9Am zQ``@dXU57r8bpvu24s$N3olpjwuyzA?Wc*)z*~;YEyjiQ3>#9O9iYe$00(!MvP}w? z`8}4A#>)z5^3&y)QUJ64inhd?q`cZZWB0H}WtGS=( zMcHl5J4}l5wFC8W@OVeEkd#qITBU#Q7h;LvSm+nOvhwm&SoX?EuiXi!#lZ>}v&e`U zaS1k5k`*TDxvn`YIo1Du{_1qg`|5(S8XD)3q+!1dwnQgIrIi!T+5w}{JUQ)Os)tfl z4`0Dwx~BJ@F}QnoE)ip$_)`8)A>*mY@QFK`PfbLw4wA@OOEvEi55aKEln|xKnrKnz^|Z`tTgX z0E=U6pEyKRI93#4%E9A>Px=T0uLPLzK+Qb(Z%_JB8o-0lGkE!k3cfiw`88w>QV+3; zEZua%+N2JA4nr-CO-*FeoHVmQViZY6bfpGQfStE@QI(4x`n+-p6wkPYn6}wUPNth* zHR(Fsduk!??}=w?zpFrBJ^G0KkNqFn>qT$%BA=^%qoN!tOs@dr=QncMu4<(mUtWV`rNGxxk{eFSz>H1w-<1BdvwS+j zEKms#7I?-&BGlBHK3qgU>iNZnh5!uDJQ?onH2#rwm6&b{x4o4u%4Q*cz?uOd68+%A zw38ILqDWq<$wHIFV}9nF)#@Gs&#Oo8M#J}N#X^G^A>CuK0#rk_N2rdD09+a1h(b|p04q?1)R`e>|4T_IpaLl}C!tz9 z?-LT}A?ZkKCcKWt;`c{)(+@Iy?5Ywc-#c-GN3g&PITw(0Mm|4?RQK2W_wIz+g=+Z8 z$fn>ML&k4$(?N~p3982)(XM+JbvkPh;Mzn%yV((%%6)INoKrl#F#q#Db%B+c{3b6b zh^?#iAZ+yKlAT=QReguu{b9*7ES8zhLdNtJrnje(pC6}=Y`;!QdiLzqt5?sWi`orE zRJ^21!!?&qEDEM%3Zc`Fx{hgUtIH_Js1LZ+bZ1W&=R|vyiFyBd>DZWn!pq|=Iudag zS~k1lVb6f=w>R`Bcbd1pIQ?OQhAU)OA02+_VAqCSaeXp;>?iY|Or~qJqg;imC=WKg zJb4Mh&77(8FmOx5^#$$-J6Pr7l3)t$Tg_2zZebvPEUL}B#bWC^jv^rVCj!H`TqVI3 z0G|lNjjgpJYyLh*dk!ZQFeCBBY{mwVvlKH+5~9rkW^17~jPN&ug0w(ZN%c`}!n#{4 zJY5ddd5adj((TB%vg`sa5|Xks6DF^3kSuKXZSI-d{DA^x-mIT(={bI|SCVDN-Cf6K z{KkGZH~l(Q{@8)iuIu|bij;{`Q)ZH(HGGCwfK5q&BDuM^(I$(vererLPNsjCw*li3{nGx57 z$RDxoOSaDRGOt#;`?d7cY1Y?GP2G`In6fA~`Wv*hp8&Wk<|yd%u=QQkAhO$K7+KLE z4_bt6=57vY6bX0!2p5DA(t&lQkJ%P~r?qL+8zDIK?B}b*$t}NKMiR*CRtP@^dLJZr z4tSdal_t6^AAPv;?bOGDqc~0dFaN|TcisHMqop2u8cekc(;_3vuS>~mlU;~M$#UHy z{MpY4TsF8253BFGLX8(3#75DDt}r|gQ~@1iRX_42th%H^cS=5937>ua_=A13D2_Jv zb^20R1=4u@!Wu4!KS_#Pp7M*;lmM%>h~1a0Ti6L@htto_?|P8<Irt%l#7b^i9-FbZ8n|A>{^% z-w5D!UDJ>95KgYY8!6}_T+mQF$Bp6k=LZv^jS3U~u>rdN>g?`Xn3a>4)3(_EHZ<&s z?XfC@M+`c*u8dKcl9Zi<`&nwTk7MlE%uE5scC0Sqpjn~ralU}q>4%js2fCbkJU9Q% z4uz;cwX${y6nPT1&U4{tse5^pRW@0zSooZ2I}K&dVw$j+7u@j~S(q#fWMJL!k)7Bi zo0R~+8=)REqt)yI%Q1V?Drb>D1+v6bqeMN$g@V48pgvWeqE}%_suIh}&=>*U!y17U zinX#!EkJ@H{PG+AY%VteXc6@SPHrr)XKHCZ3F27B+o}d+cKsZW!p)DwZ$s$IFrcH< ztqiMYDxAbJqh3XWeAtyBD?fiWJB8L&ZB4bapN%5-J3XWIZb0!0 z!L;cik0T6}fE9a>CLvY$C7g+c(f=TCkY9qNnU-vw(vlI`P%F57@Hbh=pViO~l1BsM zhhHe@a|pe3n453mJ0oj(#wMpV9{E^g39_Zp->LD+O}t(LzWsZk0ua}yrU{tj*mPJZk}o2CoB zQy?qxzUGBU)Q%sO_RTWFySFD_e)V)x9e)qU>k-iSNKB6s%mMcCA!U$(R`;-?<{k>( zW`^jW7%j&n9w3Tm20W2;PaJ6|yVL<8^h&@~3yRu~+H{?F7Cqt3cTd1rSV+MRU&Z=f z-!%eX_!o^_CG@M@k9HiAhl5<*HOV}D{KF<+@ZaNmSM0S_)a0NutB;ieCi=0gNy(nm zl#xIGPAw&7;)DZa9?@m@MIQt|luLd1`riSH{t`G01u8HzPbE%-M&3T>DHnT$cNrvn z|ElwPZz;}#Us83f|4~4s7E^R)E|?J8-f%Ml3OmE=R@s9gRxPLX#fA9^WuTt-COh9q$rJZ1_j1J80N zVWeZ(5rIbZFwW7PTv*wy3}-fSGQQ10Ex#!GnE>03!e6o`D5tGcGx=R7kHtztS*f+P zPZi}>-^X!;S2M%H^C@{ZNu_}?|K-bt9UCD^N_Fef&K z)WE+A-rvCEUotVaH>*GT`RkP1YHOy5d@eF8kRvNIdNz8Q%HR#+CPI7KH%v{|GCX0e z_$EIvoLzNjXMV77%HOkal*gJAR)F?!BVSRsrpLV4owj*h^bwNGrZrsy_^ZrYFV#*| zbJJmVQl=+~G5ia-FE?&tS!|l*ITJ42J?|5Eb!|M(2@5Q2ncF$>hAatpczg1+fdC@B z<0-OxWj5z@U12c-{_OlIwl81)>5p9N`?j!{+3>2RW%c`;M<;&$Y^<`yE zH!F5RRM@w(Dyav11}$?Q{zsrFekpEl=My3A`a5&Y1uxA}n=L+b?Jdr_vYd@FSHQ3@ z;nuOTjZ11Ca6F8GW-37ne+p#pz;o7bg=M4g!CY$ey|$i+$h`tK48Lu6s47Ad-shpW z!=Ts(=JSN}{_t_4`twryb`KwN2w1nvxLs zLrL+&G50~&% zSR*AP((s$`@C9hTs7T0d;ei^Rb&|2im2eXm9GV1wZ-v}ju(ZP4^pF4kp1$;5sBX;n z#>Bzj`J0Uwe@LtZMI3aty{(~cF7E`vUmup1NqEEM;GsA|Y|gdZ0sZM!G1ZG*!>SJw zgZj3eS}^f_M7<&`5JW6o#=Fcmkul&B5Q60{3+kaiPbLL5L>4maJH~t=;R%C+<{?}{ zL<%j!^baR8nD-YLR~4aG`Y)u8!E}t~YP>_^1JY{GW3X!2!5C@K%Y#WX*2L+(w@;a! ziZ7XMYmo?FR9N*927MZ^>f!O@HyO2hTs_)nf2x-`mYZV zZ2oAQy0k}$X)+pJ+B33BB_FR{ZG9{Ay7Y3%SHvn;=1^n!-uem=?>oetJ<@rW?OriB z)aJ&Rd~Xl+D9*4yuGKkw!{E^lnfvTSy)1)St@(8Z{Kbhgyu80nBxP_O77VjKNhbFj z-1&V#X(Ps3adP0beg9ymoC`f+n4XE1huhSinx05bm_G(^LJ2uf4x-f4M6pZ{*k>mV z80SA@7?)iZ+=E@;zc?c*3@{+@+YQ%L-@};ls+WJ>@4R3bf|{_X@iD~(DOB;Xu+Xxs z`%k~!g}sBh`p2tMKk!taY0Rke7@u@awkcOXw^q(FGRcDK);s*0@JX3>^d<6Iz1zbq zu|L>W9w~5Fr|xreu5kRXNT<57XULu+C)Bnlr0$LBBipkIx@Kf1*-@^k6^X?bVZtp{W`^SKgbBm!u(Nj z?ctCx`Dh|$J>|+$!j-gWA9EJD^K!4R1D1QrR2J!g`Tmo`W>cvmFwjq~#~)S}sKGs$ z#+&ciTr{&yQX$`J-_kyay2UK#Tl9j46N8;bf|3ot53%XwIs+lrtYOq7QIG20XcOmG z{@~AR8s$^m={gy+;QQ{Y#tBoAS+Ml9q2#?+x2csEOwr&9H5Z}N6MZe`L(mHP0wX?n z@UrnR;V_m3eg4tc+s{FGK&bJ5A%|<1AJWC&Y~xV67OtT;7fK>F4#Q-)$;sSt9~QFH z$A_D6flhPrMZ0i!zYa^##M2MXN|DNW`jvqgGrM^3N<=%I1(K(VM{=1%)-iy+Wu;kN z8LUL@9$b0X7d$*g3V<;N#>~YG1>P~>Raj59ko6F1EU9cl4XRd4kPK7 zJ@9n3o1rLSMtw@^7vMiY^ZNK0apGr?H?kgxa44eVLsdkWa^Bq&iUD^U)#iby;Cn-d zS3*;~)ZtCk8QTdAu}brP%rQ0i`#Ys00XZrK($AB9oSKgGxoKESenhu)SeImG>TwDy z54=WMfVW{b%;c1babMN(Hn`g4{HF@>TG<~~+RyDSZNJ4ph{CcaiCFOm;Dn^|>j~BV zYw+F9;=Nr%t7Bl9IsV>n7F>(E>X)N};W5iXI$zw+Q(jI+UAd;=doW{B=kY>x%2vp_ z4nU=z3?^Lw=z)_!R!qN9l4o_Xt)KR!8Z;k-?Ie(|ti4xA6`FX-35-rm!Gmu9aYAHC&w zwbtLYi>IOSd3RNDXA=2{`N0D?wD#8!W*ftIVxS3DaE}v(y#b78f(~_WJVCSggGA?N;hlf{lOp&;r9DZN6N;vi3(M zF(8}VU+#M)s^>pk)BVYc6XNi@gTDd2`7M?d#i&AjjD+e%T==eGF zVQ{pSsLb4M>#u^k^haxLTx=oF7bqYe(XlN;f`&r|wOFC{2Mt!%GOddL3f77D?OOGl z9WRnZm?*_?n$0I5U+VcYW4GnJAyXP{>bEw5Z2W!i z-|-+b0y=Fs`y6TI;~ONe9ru=MVaWlW7g}_SWx#h8V+s_o z6LT}fTE=^X#$mOXa+EM}xc4&s=~S^b_X3v^wjHbZC!1_*41S7uq3W@ZILeofBFhZt(rgwuztR+ETj}iWNKWqfVZ5wK-Br z&vowlVH+TU)s;C-1h;5tt(% zzq~mnytP%|)Q`>N@BoITQwmY`M%H}AP!Espndpz-hqu?`ES5T!zGqn4yI(7f_1HnL z{(ji4dn$+5lqGPTt6vOt4Hn)W_M*49x8jrod-RUyRi&aKB;^T*8x{qmpoKWAv^RCr zwMX}N*Apa9ooXiT{9YmMOW73^5?ji$jDAPty|oK>K3j-KpY2H8cvh@G?2v>14l9kH zB)gj=Y+j>Iz@3c0rQ`1uwQfGddu!Hup(VOc1JYj81y~Ylce-*XaR3DvxQ4&v9FZGi|FQ9=t8uxaAmo=zV2$rQSZApPU@|4X*vRkH3?xmw0&LIVu4tCqzC( z$GM2pT3tWKoK-GczV+V?r;qo#p1FzrxK}2Q=H0smiOU`))Svz%`oi_6YAJOvFLqH* z`g6Zq^qaz)I|-)?;$UhqJj7t5+bti8efw@mf!vU_uqG(w?_f-o_^~%{Oj*QSXopr^ zi7l8y6OCt6B!$yaiJFn)dy>R=#6+ZlG zQQ`5QiwAs7tq);Cl|!jnpk%k*msjFVObDk6n77WtXuFH0WTIkE%Z^F{ELSRRmq@pU zEuscc_^(So5;)SbM~_Qhb8H&hzO;cQO5-IJp@(&F$7LV7;h=cxUxWI zIdJh0z4?Xk*rI2~h=>pHw6W0_3A-tvo-^h~T#BjRUZnEh8~^2$BIqXgwT1s9-hf?0 zv*W%@LqQx68@FX=gTRlz?$(1dfYW@ZITGfja4SK7+$M~cck$x+RD?fsbK=u=fnOH- z6;-UitxuoD6ND6{-THl=*q$wA*gQ6-)`$CoN1DNR@sU77vx^|=gv z+0%~#$hlMWRy3Vi&pap8cB1<@&;}HG|17Wov4wCn z$p=>=t7Q7i<8T6r)6c$4n90S_Wg7$+J>c!_)@}{aJ*3 zl)VlLF3${nNCvn=osz;cu-$0x88z@lGznQNfpl`GuwI)P)aU&AY|+iUtFKi;oaNwA z#kQp_J@>O5`rTQH8C6IPw!C`t@%L9pr*yyGUX1En?U+=pT;tW=mI8uFNK!1s2a$Yq zo;NkB3!8s!M>k`Zyym@hTCQ7kyi<6=C%@!yRphsrq!>m*!_VSd$!j8KOZi^VhM(}3 z{i+6@19cq%lBj}32A&C>-7Y-`oo?3b^G#+W0HjXbe{`N=K%tM=oX!5aJB!oEGDFkP zf#n}4^4#=>81@oO9{4eVP#cmM!&&w5Y+*aF=+O5*A~Z`i+O=A1DQbewg?nkG?e)R& zcY>+IzHg75KFRi0)h-|7JR*DrII&tgdt9BMaD9LB#rk|j(fhV)ysO#bBwh_}SC6eG=sl&X}I zx(Rob?--_5Yahu=P~MOI8=8d9@X$cQ!5YoG@~1L zl}|4v6)yiZyUq{W(n(xCxLAivO((tmPToBswTorLH!0Cu9qVcuDjF|oviwUXntc3# zoIcvz!S}F7EFLe&59#ugahmGjj>AI zTPe!F_$WSgpL8*TfqTX&JYp^6k*-U#e(y6Rv!7a$hWK#p<@8{wBMb|+`3Xz2$YI;_ z%A4tNbCTT(rqz$kBTm%OhJM^^B}DyrmXg3JMvq5pce3px4oWuXmvDDlB$5V8vv+PG zyk6a4eJfHhdVcVe@A9!cZ?)Q=oHxyp`;X2u(g?BL2Pb(zIWH6%zC&a|B_#v*J#h=R z{X^zjmiaRZbD}rCqJMx5cEa7|%9pBSR;)6t@y$!BO-JHGTCv){Kc4@1Lv=})LAU}< zHHQoFYytM$m#LEHd%GH@gDAl)FA^wC?|98i&kK^E|0{ixsK4*M9cuQmAR6$q)f#J) zWaSa>6PHTt<|hh>4t#IDAN1E=&1cHzfWG|%Ml2THpHe|A*A0v8Xf4_G`=|$_-KdfB z=@a4yd!LuoVDdt0O%vaP<-NTPYy#5p_x}F3H#uoDFk{Q1?e|qgM0xO6dE=;!qvKEK z!CL-{RMd~FPc~OPVun>oE}_}J>k|jtm)Cav9IQ7te-&KMOjmPlp0H^2cyWs`&LZpg z^szyBc&(5F3g!x9$H3K)hAE5#Y!Sug;q_lEh!>wa`w`_vIdLiG85hIc<=y3I>6iAu zD)NO@&F~U6;Ev>OpN|3m!S~O8vbb<_C<2sFdH-nbgPR+*zNqz%Q)*~7XpNd`+4zLL zL{ZD%p25Ps-r98;rrW`^`ozjjM6X2oBB-fM_*-;|tVlH`{8YZ}sa7T~&H;iaMBO(M zkkTL7>RvtnO=+ybeP{l6L7#b=?r$aK$aUThD;)Pd%?o=S4uSEsC)>p*oKkK{R3T1e zyKH_g*(yq{iJ!);FlQ21U8V*z$4|iKlGvDuw60lnu!(8YbqlMHs&~UWW82W%*$pSA z*Jrx8rRx43%OgLnV$|x@PjJ%DD4;3e>;aQ!!Xok78zk?%XRxS}Y^0cx_q0T;DIj#nfrM2MXiIgtBFZx}xh}z;w-3 zAPRBsx`E-^^$#N4#q3awjEnl=Q<2s0jm0qufp)zAF}x&N>hN&h?-D_LP<0F((f0ZA z(?^e=os zo}wcG^#4q~?2521uf%Jf`x{BTxpzkUHT?u(Y_2?6dbj zcT7-lmqBHG@|`)d%v&T?;tcE!#-#b$rr!&IS-Q(6bfp}Q>0f2L2)-P-4n@C%kn{c2I?DykaYjs?>?A%sHm{^Bc?RMuj{$6UL6jE!6#=Gt4-E}lWZC8si>>b>V(ZsO%v|X>8kQP;KuD{3GCJMC5l*oL$%Y3-ZE`|%Go;Bm+6tabK(Eo6 zzif~XMkj2}`UknPWs&Kb_BEgOw5Hm_>Ej2fdydnIC&WL!SbZ-jS!ao2PB`C_t~&`v zT;e|TG;khs{5VIKB^w;SB|M{|7f>PldOl?uGnxlbjcr~54)wE4COyXjddTWl|_M4~+QYb@FanVgT7zKhK5Ky%@ zs-Jjgsf~5?a0h}p7VD!?N$7kmn1RV9gCz7SWB8|+C!g;KHWq)2ITC+htUgNYR=Wad z87PK{CXX^jx2Kg3h#Wq+*pj#jybhr++v>kxxB4kaLedaFRD-BwxS7!YODk4}xN5za zML)Xd();=Ds-)^*PAPxt5h`vRaiAl#x*IA3bG|-zLXs>lVDfk;#{_CCUmD>Z*K#VY zv%ePT=onc1U03gz;0Kn9hoM|3aMkaNVvYqu2Q~0UTzv4r&-hsXuF->h_~Os1$;E6s zpRiEBPcFkPIvwLsKsC2O`EL$VAs>k=d?M+!Q$3TNVlsz+#e}}XGU~oLB}L;sL77LqLGJ8 zU`-qmEOHUVTLT3F(+0S~u6twtfH6q5b^j~gyH84HTyHgjNpW<8L`?_$C;_%Z>p9j-+#e`lUkwlsQqeNLOGYbiCv9xot#E*^%kvb zFG2d4zm%3C&BDC3Fv$MdQIW6`pYOf;o3*z&#Y;wx&(pi_X(JhkGTfPNw+R9>r{W$U zWS9ww5cCvd{}`M=ee)&qA{cP!cF#>cHg57N=6GxG_~cQCzbUhCiBgy*G?6yV()Fan zI07hvt*g`^)V=*D`%VZT7#%adbbPT47Kji0Cr{bMgA%S2v8(k3rodjB7%lzK_4T$i zZTjefV+*3w98lN(b;ZPlDMFj^j~J!_iZw4u(hI9{g@fL6q=4qP`s1@DHWB{cJo=X6 zB}nL@Z&|z|!xKx!!zJ9J>5r}yzC#+mBEDYfD!||`f$N^FXzMD|A*5~m7{4g}&f<2E zQG=+SQH)({X|m0n{;7LUKJRV(6tC6RmkP`yoSp7VPPUX){Ar}SH*#VjeDB(53UWSm z<)~dH2k+LayD$8x1dG^kgne0YUqNKUu3u>_I^gMNZ?%i~B}>^c7K z0a!$l`ID^Rx{JUnQ{Pd5v8#6BoG2KA$oD78pf~^o>c}YwbXl!pZz6St6Nabg-dd5 z!R0nW>GjX*HK0e5)${!69_f8jZ~LqGukW*Jk&Not*C^@f)5hF|zhtCa+BJ>6Irf^oM&oIHP^)baF`(NE3THqM^_QKSo^H^&-xD zi|BB=t1pWSM@oK0KFEO;P-(&Za7?KFw$fi{<#f)5+*%F;#QVZBDLoZ_H)DtJVUixa zj1i503Ko?Bh9wh)mqh-EYZQ~=g)I(Vygt#jZRgS`2N*ya3GIoZ`iNVlx!nmWzZJ9J za?(T$)o%M_>J+HDkEFO6C8<7$eN7>SSf-jNXB3NopvJrRbg7g?X1u)jMMcodOCHci z!S2G=u^4Z5x2JT~AC1I6D&msL<~nr&*bL5vI|NqEfX$ZgL*-;QPNiGYlkEcePMl-2 zbLl>E-KyPR$1Dv|g{-*(PyVjic>DP14~5p-6L+@mp?4zA&8xx{Kam?Qy}SZ{!$s*S z1vNazPPhT_=K?Xx16^?sG?`WYj5<}GrIM6UlfA+i_<}I-?OagY_CTxkk$ydnOG`?s z(eszZoXdEz2Xu#gacD=t;5;c~29u#ZN~47`C680$41GpiOemtxwJpFN%%aHR@Gm&; z6Ul$$V^Eiw5>VUZnv+Enp%b@(M}7q&iK~&Zx^u?i2RXNSD^0MY69+GnRaL?D>vr|*M3X?L)gHHAogmc(R=(6^L*D_-XPp^ztADVf>M7iBr)lkd^3YGIzc+gH&Rpu?${lvy7 z$p9hkd&p~E$Zasj>A!&C5LH{^eE4k&+JBx)vN|S<#<|2LVhJzzn~(SU6Su)+wF{Jy zVRFONS-8($dJ}y!MA0c-3p~P1^0mi}_7qj|rgz*w ztd9e2YiHE)&byFu4VuWO_gObkKSAF}v+0Hozue)}#U6z1`o%=bE6s;{u8$=yo^5Q| zaj(4kXQa{}L^+#DP?DUhEW2DRE}$lVZ72D#a7{E^y^Mt;E@cSB_dU$N({GDcMIpQn zXdM@uWnKUx9D}n|1f}`}1UU<6%Er>)OHv!&<`wA^!uHsjLxT8WfgBOtT?qb7Z(}s& z0VIQ!cs@!ZEt&oX{93*(-Av8nbi3KU@0EeZXKG&0WhPu%mE)#zPxL9Hp!Y3V&k#}Z zJB>8=oao)fS7!?ugUE^=JYt2Ha0D?~Ek$~tV6gd=y6^Bdv<-52MMd}#1G9J6` ze!BxjM3bKrK6z$x81NfW7Ou7IC4$NN!G3t?-`Zhw2BXs!f}Q_pK3FEr|1c_E5m4)M zHwTZ9_&s>rJ>Lxkh~-uQZxzCyE2)6n_i?MLY1{^y10(kAquV^a(dg)PZW5Nxbo#m8 zzeO)8h#s87+w#ihjjBL!HvZCw|57>so}j{|JK~QYe{GkwUyY3HIeS%?udI7;(I$rw zQy?v&{p~0@+!fR%GNsI16o*Xe@n}0+vOK}-^to(axRzNS48=}Q#CpM{8dn)7>}3V% z72!t?Lka;hDJ02X3R=(VxP5ZXZ0&tVxVC?9e!|>mVzPx*eO6*E^=Lv(P*LP#HaLRT zxyC3!*{ys6Lls&eKwC+JAQ%3Drs8SB#TbFfI%~_xW zt;GJbc@c#H3qA_&R|y*E%{hQz-K6pwg7xS+qz`Fc2zLc9*A-Zk$odFqIU1 z1wVpGHDw(6jwY#0VRu8@X4Ks8L8Z=RrL`GFeK}%@t*Wfc!|E>uT^p%hO}af+k@k0(f%^Lc!9LW+z%gan6Gg2!>nGXCXv*&vKRRwmWg`1LgFz(!|}>5 z^yr3I%6~%Y1yG_q*KuKik00iKe3lH^OiRcJ7SAavozhwy7v!e zwn2v@gzdFY4G7=fFU#Ev&3-id0k3y>lFka#>5j5Mi*O#wkw>dlv!u#uQXXRD&Jul7 zs&m@zXFja+=iIE8;rB(roL2N3Pv73$68pyB9lV5wpQb-5dhSbb&NV#Nb$AvsdwS$A zj^Vj{`qE@eaZU1>b z2oWEf)GH^kmS10bVN+nvYsk;D^CzKsZ$Kfc#((i!rnU#j4`unM;9}vFD#<$OMPxOF zB)pt{o=7CnzF?^RnX$ZVU%_WzB4HO~FzW?V0^)96VI?TQ#Y_(>ZZfWbN?_LZvXB)L zd}1WbjbCF7)wYeVe3Rk_!v{U=1O{2mvo5(3*9Cwo6dc79NTR{uU)= z$<2MWL1gKMxMLt?Yaw#!DV_1Nz~Y3ds$1N^2G%0z0Wrq8HR`y$(IacH__nS7pw2Zl zkzyP_MmwaMReqVr04iYkciTEYNaLOR@$fxC4@G&N$Im9G)FFA2@>-d5DIp&iTrYpb zNn%38h4@MR3s)XJcfI)E@_LUdW_2_`Ka?BpneKM-c0Q`oF{zw*OzAw50E}LptMWhh zqgC^)(pe7I!#(auhIbdhOx5HsrT5t}rX)fE);M75I=0=pI+o;O@s#5{FXg3pyDK|e zy8%V=UcyfmHt-UBz655GW9BdF>spfGreqdUX8>Me750OXk$L9H6t~8dc(eo>qF~~MU-H*qNuRQrWbP#$W z#7Le{Wrs+1;{C+7z=$~~osS)VkXIA*0PH-A?}o=UFjVs^@_dlmk@La*_XkhVNUisB zTqA{{Pv2u2#&yBIWHuWAD~sh&$(q85v0i=%JGAd^QFJ84hyJK`zN&1z)?_V*9jQcQeE9o$RO9#R1GKH$Uvb-|*!m(~ywG~M>_Th#sCAhf1 zxpoy>$%|DgO9Te%RWo!iS?ApgB|rx;mId{6iMgklAEwy;2fxn`7Vl~EKjjuiGAccN+TW)$eO22*e2?Az`O4)oa((xrLj?jz4EDu44|6R(<>a z@}S;Sd~=p)JIybR&ty0x$N!*Id8E&3EjB0h_-2dPQ^uWMAj1LKDiDXyT>$kwG!7aM zg%q2;cRIWN+SVvM=K=D}=`{%SzJU{Sjy-HG4e( zNm!yQG9Lx+lqmr|XhVbASjGbV5~t7@rW5Qdtg+6(8DT(q`!qS0Uy{Z9Hb?@KuSj(P z2XoFq8f8E!zmyD9TTBP-48)RtkRTu*v>dfabX@T$=#BigMB zIqiOLz^56XJD2E04s5ddn%9U9TanWb{5X7r>iK0uNL$AI~Qqxqd=wb*?ecOz^ z5UB!~mCiVFYIq^@CizfggFcpeV@#`qM7~twhMjq`u~nn31hhM)1|0t!y-}R3LArK) z&6w(*4}Nhwi2g-C?S-dpUe#Z-bd4-dk6>0F z+>FJRb>PJGShJ!Nze9nW4~>6|`=|?oVe=nfK=2Y4ci^OXAOTu`s3Ff>s+-25q`c0V zzS9^d=TFi@wv-7D*n!)O*Ie%JJMVSM^gQ?eL*x9G44U9$jBi|H#7W-df`b2a z+zOtr*H3Jf{wt{*bX#WE?%NplQzbIYS0kb+Rfd;|;AJJU8ad)G2B_$9&)nmd~0{7i-+FSMoS9SnBX` z=nXpdJ70=|kvy;kOo|xIpTN2ndGFqeq)<)Gil5r7=;sJ*A z0T`v%Y$y=;5K{m3e?M(*^7SQ!pob{u3HU^cTG9{7DF-@Y+QMMKmV!Nv{dG|lkznK` z*!aCdQ`qiXr+ocx>aEjYSo_(ia)YCdorwE z-VGP;Kp;i9lxMhmCbxO0crmo*ps2zp2-YuQWX>9DQDf|dnN|P{u`$JQC>L9tt6lV|Kv%kf#C(7 zu)Wm!iapnF*IZ)3V?;*JvH&8u03UnZ_{ZMGxgOmwfIZx6{4EHWiLf;Y}hd5nmb1ln9a^p#o?%RYJarrOGcd;jm(s|y}{-lghS z7~@wwr{&c)hSKL77Kr$|ce&9>n9~XtBXe8&1rkqFrVJPd4Q14yR zSOUm61Ezw6E;P1Y>0BtWXTf(cf+q1F8Ehv9wibo~`IL|~JgQyJcq9Cza&o-7A|wCg z`-WM7@%wc@iFOVwxi#*~l}RlE4Ac$+Gyr^rewQEquCur^nhBo9pZ^%-4Mi-`8>;(9 ztJU9wU>&?DdciFl_xaw}A51saG;D4ZR#txecqnu7`2D+ud;!KE4|Vfj<|48Vf&?%0 z`*2|}m}{sj8OXxybQnb$c9rZ~pq_<-3vbs!Z|%Up_QpWP_O5{Cml7uKrG(@7@^gL| z{?CL=Df)d~&i+g8=egd=T+CDf)BQFfH2UL3n|=Dyz&E{;&=-r55}?NnAfiA+Cmsla zo+I*#A!gMnKlkqw{=Uirj_Ao-_~}%FFOn#%LDxpf0ZWi%MdmQ60!egZCb1Y4t1;_YwxiX-yiC2BkQTk|Ska%UWP zAL;Q~yctH{$nrZ0cGdX=w_9?a+sPVPh>`mt+G}5UI%2+w_>)?Z)YcJ*Z}RJDv3ad7 z5tOk=@7vcWZNCm=cpQ*EJ`?LSvg{Y7=3E93w}B``u~~3uKEi3wYr6xq4vCUQy6yQ; zWI6ofX$|)H5fHw>LJD%^ToG{CmMS@zZ2g17&V2cGYM(|q!Sv(&x6tVJ63WTq9e^dg0_XY08@ov+f zj>&&{NS_UaFbGA&O#tx$t~m_o&mo(FK9)DZ4@W@7yZ*3Swv3vI2aaynq@hy~yvRy$!9Y~KqWPR1&J6-+YH2XN*N3nb?w!JFN~>wsRSn4dL8EGH&-&b_ zr)noJwboQu#iD`lr1TTbM&MxG8zD`dC4RF?iQm=y1}; z45a4&Ft%O=mQx1j6`^hQ*#p3`KVdV*jH2(H^<;@PWH4gb3;`GSoDoqOL9_#T2W1wq z&e8C^=?K7q+J*Uhje@T77O~fJ# zd>$Zlat+&GgbXZu^>09jgLH}^pTIBN3orAO^?r%4UcU$oI*s6y&`+IqisEf~1n~(X z>Ers;%X&eN&TqF@GynbJfd!YWfVMyqGcxu9gU!~hNiTT?plBmOLtGor`-XWVZaBw) z1qpBcH*s%?bn>kG(%#vFmaPm^aD_fGf&%R-1cWRQ6oqC^;;T-a(2k&mMITY)b_Qyk zC>HoMLxE)`$tHq7`pitHo68i4mc;FS!04_+V`Y^W(ok1Vnuov8G4lZ zZSUNL2J@v)Km64=p0*X=0w1LrGDHTkUIn;1=)ehw|3!1sR!MX$3hd7({sQYc0x=p1 z;^ZIDQ&DhMgzB%o?Q#pu3KD)WzmcNoAdAv8YcwArh$n0YuU;~vs)l_dkjv4)k$^!j zm=PHaEN8GhMcmZ8b`BJ50P}X=!jOcm- zXN+X;x5LrEwxOZwkLI7oDE%25RX#+pl>;hI4igMy$@i;8_fDn%dQS_S{J!LvE zng`dDrgHPy80m0fw);-jgksiq97HTKBDg9r5pQp!eO~Ypy)rWd<7#8OLo}dX)^eJK z93i|`@mZd7lX@-C;6gZbg-@2WoV^MeiK51DyU9wVSG&hRff6g>Oogz)duel=~pXR#Zl zI6drI1Ty=EtBBQ`X%zX4AA##{0G%oGvQj}{xr zJqNSc_u!2o!5_-7gohx;eP7IkE05Y@d77G?{>Hsm4$mm{R`s8RGp1DIyrqn6fFWPl z4mesQtgmN2)yD3{=Cbh6qpv`6u6YY(TIBa86-WwcXA>zC73~FtPig)#%K(CG=i^I_ z8@YifqnlE0Txl~RKexQ?$GYE+%#~cwb)VbPd+@EA%L7MP6K^yAYWY(?4B&X1XaNlI< zuDDC1ISU2HNQnRrbmf$7M|lDpg-!i5la?%k+ZpOY;H4<1A;6O(!Qdn?(w!JC<6E4j zB-+Dg$MI14l(8z}j5N&sd)uq%9O1=p|FiM42PKZsS2Sr$AXVcn|74mk6Q=Mm;}N@# zZ3&h0M|2sHo!T+`Uv5V2GJ$YKd5T-}&V)Ob#vB(FySr(c4jhE#I7sehfWCI-t)B*K zxZ@EN#pWM9M+h~!%)G$7>mNj)Sa*vw2!H&BYh=qa=3+o!$_$qS3ptg(L^o+84NkUW z{-OA6l-bf2{I+zD82n%HUSjmfic|a(rBR>tK`y(e<>>2)z)4vPa4O(RB6={M`TUUzFDlZQaq!1is6{W4rkZlo>=0YVnT(@p+ z09d>+x$=`0>BEt+3)`zp!X4WsJ<_Ro{hyb% zH$PmC(5hEjGY|oeV+^wi{)dbRIAXuq*0Gi-7Zj}F@!6h8@mK532~X&3sxdI^AJ#+ zGo(`LeZvpjuAZ5U?`CTJ?;s+Xl=o6Al3P|+|Hr6>GMw5o)L%%wNiMuq7sWzqZD^(jRWwGzEE2aSyMl2no~N9gjG((6m528MjH_*bp-W$QOGwV~j> zW60}4HgrOKr?*^ww;h7~4BSvChlo7nb0>_?yZ{dv;xZ~q$1u#MrTQg*+D}YDd0p4W z`~~3;oG>ecn(!ESUj(kP9l$}LXpre!6JD6x3K6_&=s~mm>#`8U%@qa^J3&goHjna^ ziI7r{e71_Y9+n?ATm?OiW)v5+Wj;H~N`Ik_wFy|}#mjabS-)l+j;xHEi+YD$nLhoM zRFccVd2##7%&+}FB}@ri07INow}k^@-Ze@ZIJ%-4PF1} z+7@HI((KC}TUunVyit*Be-SwSv^I46cFcYwdNt=BT_uA~a2iQu6`Hb^3Jfw0ANj&JJY0L68fPQdItPagwLE8TdXy26n@gFONhvefb;Gm29R+HM?iD zsb<|w=uv$3^Qhz{q^XQht#9P|VNj!I9moxu-v#RnCgs7&|1koaw3(du zLD+(iEuNQgxpOulaU7sx0@h>QQAWc9)}WlG4W$*ZsNTsQVhlwr<>S=XKxjw(_5Rw8lSaRnhL<(g$&m~fW6rDNO;mrMWuD!jej66B8{UH}Co0=Ty4o{3?T+=5u? z))4RnC+Omn`#EtJaYdzJsH_hwuo`jXr6zT*3YoU!`Q%`Gc18{F3r&O;pTQq}$Ls|6 z0rY~H4W|?BVW?RcQpng>Y2O2x_tOnLFODHJa~3Zh@vtD~49Jd=4Z9YKocUJ2glbyC_(P0!phCrpCVYGs9@t1YQwtLT6 z(qL=j`q6D;-|G{fjs80{ef3OkP@pjgJO%8H2?WbDXKuk)5>38HIqW16=4ODp4ae09 z{P5`Av>cn>_Mj=_3imblI5eJ&K5-Xf8N>$bTPep5rpK0(jr}O!EPXD0Z5-mEt>k>{ zd@(MF4Q@IOy#1b)Amp%^elVFW9=N9f)~db^sV~108>LXA+xYJ=KHX#~@{6j$N4!e@ z#N7&rvH+v5y`TI!<%ScN%Rf2%ALf-uZ&>fn`b5-hu#3et45W8OkCxNCW*lm=%+hc; z8~!xi)|7u-$pGB0K3C0X=!w;{@zD4fDcUlcB8JWmJ=! z!!@le45&tWQ+}2quWPwH{TCgg8^6Dws*dtbMcDc%uZeRG;|K`c8HkGM1y8a0*CB7D zDQ2>p0AViex-^m4%z&E7QJTKTMK>lwS_y$1Bbem+;L1#+>o!)*lHHlKc4p+Xn~;n! zVhY)N0=5oA;J%~E6)1l<%1OkGokOA-JhvEhJmk&0s?}EBt%eV=gpdv-)1&u$tjsBr z%{S1oUGv5&DwO8}- z{(gm5?@)|GLc^`iE5CGgBnkjq%E?-iZ5~!}4?F*(Ltlk@`J?XCs3; zr4Y6|UC67_JNm-T^P^rm2t==h*knT?k~%*mtkj`zUR#S6diauEv*K!KC`?%8r+GC>Q9Vao*9O#x!+$^? z$QVeFS7q=6%TK{~ndBfCi#Gs#^s`URV7e4>49JDU&W1pr>Dd|ZYhTw3T;jF=qKV4o ze<_cg+>n^uSj_8%&n`2$8stSdq$UKb;9Y|H4oDY#J-EG#|@y{h84an1CY ztLu!%g!?t#Cr>TDc70DJJ>?$yECZ&#R83!ejFh&&H2Ajqv=gZ2hH0v=A9meI$$TC? z&S6hCHYj}cN?uXj_Z@Bib`{be?Yd!&Ta_(lVYR%)A!cw?>)NL7LgR`wR?m|S{qw73 zhvTL^UNB80ToD7Cpe_xw60zhLfR zzl6F-m6)L+L=iI>a_eJ+XtMQ|W8}3ST<4)gf2b4LH@=Z61sq{p_@CFvhaptN(#Py( zDWE!xg1Vj+x=<2uI*8AGK4M0$UsopUwlWPD(1%y*J~G{cdvy@O@twF*{Rbx!tsJ%80vM`;eXczWoOuCz_Wk{^!KSl ze_jWrE&RzL2oVT4Lfih%`s`6R)$#0ZnYgPb8C1-ttktYZu9R6mW+5JF#lNqMUsHef zwon>AW~YIKpi+_$fVE|f$Iit819tGzS_U2x zk~s{*QQEY%_it&88%GR5wgAD{v{Uqsx&hWM76GQi+C1c?I|t+AE^Tdlr^O9f(0cj` ze8f)ARGv#(lQ&aCxZ#zD616=-&>h4xBNP%Ja;l`%JTS`+|30yK>4g=!IY5o|FY_{r zxbpBv>o<(E>k-adBr;d;XUoJl77R>_5FhWDGT_nufeVq=r`=@Plp;e>VIRCBX|{AZ z+OMQSh#xiwM{+GvA&T596@6#tkC&9h z(M)e*g3ItiP{_MKP3sVNZR zhM6#;Tx5IL8a&@jJdD?0u!M3hvL6f=&_fnE2;Z&v0aWp)=Tbq#*I=BgHJtst1P2V( zG|#)qNP~abGbp`{Mf~cKW4yS%oF+T4?pLohGjnQ?H~eSi$PDy0v-)H{7_a1r=d{(6 zKvTT_+kf1ZeRQki)~`bTJ90!EI>Tv7t%Uz)+Y&NG*tY+K%dJDYGBJ;bu8ShU5K7Gg z610&`+!p$5U!`@_Z;A2m{JhD~97nP9S~|D0z?iiWRoM3!Bzw!5X%g{>m*4U3tPO>2 zL7(|qZH*g-;95FKw-^A|;>YZfjC|TLZqYPs`6Hw^H-#UzL%fLr3`=oEkPO)OWk+06 zNzzdA{v0*uF9169HLWU8Q4rE-R>Oj8wu9HlO~Gz@c#z>W3^zch1ya&0Z+xQO@$o$B zZMNX;4V5#%8A@%JJU=YG7rzIdJ61b!Gn#$j#NCPq^?za!<#SJK6TD6-3aGlB#XvYt z$!=PdweQEs|7^Vsi-Ho$(oy8kH*{=*vTX+2$xiZcm5lT8(;h`fCO6N^_PO(b;}v44 zWubU57SR=Bs{p@Y9(hOm_3i4D!5BO1TJSl|iv5u*&&N363TN=5(i||vw$!z_bGrZS zKr9RlfZ;;MhD$|JgqhPkKh^N2Y%o7UjFsHmbsTe2drs3CHm+pGslbFuL1MpJa4NX< zA4*-QXo-7GJo-cQctXkStcwJc53YKhLpLqusH1ck&oi+cu%%sMmzu!}|>dobnls=ZBP_-R* zIX*tVO*RA}Ll1wTV8GE0;SyNMtQ4jipo{9eA427OpLD4y+IYqukJNGxTkD#w^m9td z_Ot{)2`B$O{g;wxTO4;66sh*m4<&)I4Z}~qgordXhFn7eI7-6O@QdxBcZf#_TLJub z*@GAvxxX%XqyhjBxw6S2ff^b>oknTF3HZdOD4*H5Etk%^aLl!>$I7yjjCi|Q)(jB; z?X;lM(k(3R8}no}KYA!s=H{IJA&>A2}oz< zgwd1IaunL*+X?Kjx6Nqx{O>R82`IhK9Vk7apK2hC;R0t6;`6(yv1PjI720w2ro+45 zeu-!}y-?{N$>tqU+bLn8b_pkQMjSO(FXN=j@A`4uUdu~%{#JdRorCE!R3@weJ!F|v zaL>j-TAKTT*5Js|o11pR!MjO!8>dShhVPvDI4>giZtLo_z+s(O1V0}v9n8K-A8I+) zQF~|9LBiI8!McBoJRn4#)O}2gdUZ&G01h4tP?}AwScsQV8CH-AMyh-#i0SME_ugPL zy_jwz0$sX*%#8wPnc&7wD(<01%|m6_EP8evZ+u~zmnn?}K1Oi5;O-tNCXDR=+m0%K zjn)`F@Rt*2i_;X;IqHya^^>zj1~y?oCPpM*y!#Scj=N2FMZZQoGWeJghd%db?jN*w zB#BEiE)Fl( zInL%+{U{R@IT8W<8`3ZDcC<=$ZLdgj25`zCY?NGX%!y8QY50IKvm=FA3ZssCQrPxW z18Hi-56?Kf@nx}{1?m3eyG&gS7AH4huCaBw`U5SY9Ud``#!{3BmLO9J7Su+<9cBJ> zsx=6Ms>DXlb8I4~J!hkfSRODA@(6i|_3yX8@77nU7~bVu-Vq3*BhcgN$2_m)hsRzJ zwV>S|ZoiufB}VX5+P)ewFi}aU>pC+V+mcU^9S7+BmKrqknewCZ>D5@t48EFxie)~w zer(Z(9v%?XpoP_w&l*OJFFV);TK;J1jV&|!S+O@O*(27GQe}^B{loz}N`?+g7)N;M zB!)7E0ADHQy5Z4!R}+SFdGVjQF}%noJt4s&P}5}&r9UH-UlD)BxyF*b&l0u&nrm{7 zpLoSs#SKYzjBRh@<;vFB7Cp01Sv2#sqCfe7m1C1Z>rJ2Nd{}4VZu+v9HG zrJ{H$^RwNf3%nyJ?@a}$s7IWv6tngVZ$vRLxP~r2MX02T$nknR!m%F@HQa!u$hi%l z2Gb*(b>=@8_+Lg6XMWF_w6$MJMgGpn7nLi{?OXDs`61vWG%JN!@j;=gWovi$+jwU8 zL(%MhogDqS@FTMO{-G_SrUuv?b@~}E3)MMcd(SaU=4HvgK>`fY7srXB-w7|ryM~K1S&`FA*p$XoxdXo<Tma$DSF!hLP}v!Lq~Bz0%0o!De~p z%)Xz?*PKxVPK3Snpw-C}C(X0zu{?Vd%yjzF<0tCYdWsz?X9P)GP2zzpc>1n&;prel zlYUe2)ago(=$5DsdIO`c&7vvTm2US~UD_2np72#;4za8S3or{>Lz0iK6DtqC)*7eM zUu`r#g2`r-;ZP{pX`=7DetO+mdxV%_EuRcwrzQy%_??fqapuCg>Re;oB^6xOKEzV) z8DP7YHAQWZTw1zhX+0I0ZF%W9`#a4b(p}^%h;bDGq9ZO_n#yMzML*A+HW* zsv%zsGdTF_1`ne$EFT^V@CV6?MC#Y!_(Xl(DvFHGg}ar_+hSQtHCK?FiT$zbA*)yUy*9uZE0? zAU*qZUu1Qls>!o;;*_5$?EOPf^l~twMw{XM{E1C8|s|K%UHV~Oy-cJ11q+J?V}gmr$I%TZp0{@I_1y@x$+q-+v`=RkC2K z)mn_{+Fo|xhsZGtaU%JuwVF8bxi$}lGxoRkDX2b{rT5O;i#ujNbRW>iWWya=KG{(ozPrsX0alyAHjcIRUcN;FZ)(k+_;`LC z986n%E)?MVTW*!#xdE>}$N$3Eyu$trKQkfB2ptet zxk6IogjHz#3r5x=c!iIhs!^ctz0*LonMn;qo%G;MTZRZ$Y?v&%fyu9~2MLRZ?hnU^ zpyia6Rg}%0;L-0~ld4^X8-}L4j^coEK#5p{;Bq3IOL)V7AZ6Srq510;UFL&|tKsQR zMEHfNegcvJP)MC0WTkpL49zP?eS69T?#+WycN(z1%KSKfTJvqJ=~q<~wYKZ&3Wj zoVc<*-JzC4+b9#xq}N=&|DslH?_|KqcGaHxGB`B{tk9D5oLTla68HLev=RX3+ z*xFmYQ@`SlR{mM?Kz4Xff`Cq_+pU?DL}#1 z?Jvk$L)-BWx<(66s{N;WBP&MNxWIVg#=j70GPR|{i`ATBLD=5j$p2US;)&VW^&@sfG z5VDfwfs5%J*Y8!ZgK&2YMM45#xSrWE(`7~>0^2_o&Ik3+OfO~Oa%N7Q?ruMEu64A! zS?I#TTQS;yb|WXbd9s|9&cxmjBYPlH0;;>wrAi*GlnmC4t^5~aMF`RfdHDEsrm78+ zhWh(l0M(X3n#qIrv1*|QyLgy9seV~-@`JU$t%vk^2#KZ)=K4aG3I)O?DRK+##?&?1 z0ofQe8DNM?%K6?XS0m+|h+t1+VPHTHz-xBO{#`AJ!>ALAf&&*-c;5RdYfZQLMc z?Dq4)!}{@RQ27DRI^n|$(CL0A7B)K9d>xYwL5X4v-d%0kdw3KKJhw@`n|c4iS=YCl zp$;8GL(XPHD!v-Ww|Nz;Z+Tcnoq8p~v9S16pc1}QQb{n*kX3hj;qkS{@|p-alND2Y zxG07&O}a?yJ$8I<(1G%xh7rKR$ljSsi5w%6f4ps*=+%PQS!P&Xq_90lHac0nx zgD}zj66Up`h7m^|^y`;b+q<)Ur#FoWEL0;Qz{r=bm#07IaxygGR(KUC##gFyYl@4{ z8`ay2g{~e;6Z>1>t*WYdZS(baak4ZWc|bz$+*NY`r#Vlai??S?A!rhEpCWcbzwe)f zq%$%Z|YBu+gib3kiC7 zUF^)g071DoM+XMRUjKWfD~%!a+uhOTq{`v6k|#bxw1FE0W?x8e<@i>J9EgN6c#f@8 zbj7r(bO*u-!U?GNmKiBzZcN}w_k}1#v56`@HPgcBw%<7m*}&_kEZAo>agC}lZ&k01%kI&5VcQBQLiUR%;|?)rDe*_SN@*hUj2}L z{iu@R(|_z3IOJM-279i0=NWc#a$N2ZyKO&0IWNBXmPO3vIh&<}7q=B?)g$y@ueBr9 z=*z3b!1Wy?TVossW6Ls`R`oA&hqIg=$B~}BbE!n)dW{dO_Fcy=Orzu5&q>6OQg2_Y z2~wuQj*ir)W~N46+o&|+lj5WzUnA_5nEEYWACsD7etGAsO#DqExzH;&|1b~p*x-LH z;pQqh9medpb?(`AECGb{13hIS_zgPA0|m#4iPs}%ocy+tIge-0&sg$%ULm+$P)RRclz4oxBSW5a+z_z&x;&rb38)K1PLybu)X7%c^Y|SP6M|c zU+I1xL%S+WxEK-`)RSDCyisNt&c`kbYRdnV{I9b!|A*>*|M)p$7=!GxGuiiDcw1(y zStI+BOqOUxku@{6%1*M25s@V$N~D++ktJo#I+mX9zOVbb zUa#kCzM#b@B>kfBzmGXpv9+$%;m;sYTz`)~AP&eUe4)JkW^DCK{csP|91Lir(hJFy|3-|_hX zF1@5A;ceBe52C?lCblH8Xfx~nM;S|&?$3Bm`hsYskgh9O2B?%D2ZVZqH^_9Hk3Lx9U~WP0iOY`ZOk z$?G|o@L5`EV6$yYdFx=O#|vh?LCv5Rf@lE(kitx%-dNMC3xyPxGyGTsh7&_0Mrfvn z1Sv3fNo|K@7YZ6&noZz1gk95BQj3#^45zqQ*v`GIp-xD`w;O+RjB#q!=Hf9IUtiaI zx?R(!ZOD6EVUOKI?oC_sK6ix38#@vZ|Y`%tIy%+Wd zw(-a>D#CKV`hrpUfTpps(h(qN3mjWyi$S$+J;-0AcpYp^;r$>aa*^(dHMWfdPkl>% zoWkH!z?Pns(Xjqm%zH+CgKNru^k#%5!e6capzBJ#mM#Of&oI=d;}Gsi7a?^PX_$EE z=34Wm3kl;S8S{ml!ngI-y1DynlH>f#G@N}P$-8M+g1>-&00#~uYjH>o%=p?zXg{`Y2c_cPiD+9Y}b`#F4EJj4aj^ZUQ<)+4){fjvcc89Hd zGfs~ZZoNSn_`z!eu6WfDHN=R&?L*ilMUP|NXctWjKGK(tPdKvRFaYntuQczgE6Ky~d@D^JRt*nO7yS z!D$va!9A1#n2Je|nny1cwCRdDL@p(O)e zIQb|_#j_q1@i?p=qkLz4ZJsa>cEecd2q6@`li>2uX2^T;+qF?V)s{`o^Pywb_!Et`=y5FDSNT8I|_>kL1)wNM@3hD|4K*pm_bJE zEeV#VS7q+SLF4!0l(rz%!D9SBc63Bg0digj*muBk_gkP6B;s9wMRb$xdaGvZz&i6+r5emGz{cSfF2&| z;x#a&-7Fmc3dkjy7ive8RR_aDuPMp+k4@D+L*w zGQ=<_$@E?~_WfKgsbq2Q8S^AEWJ6%3TOJJw-+oZ_cJf795F!mGYg-l5cLcbwV_`dv zRBB#Czz=KW9yRUtNIh4ZQU;KcT5+{*|Dd1vo_{j~TbTwyfPLmN9Mlve1fu$B*hw61 zkyZOn1-K318FetRV z41&W`QCt#tDJNftxg_u$;UWQtObGxlXpqsLA*%xD9;F2s5?)j+q5^+9VvQq|Sm5b5 zutUJh`~9amZfy#(*e4g_Bn=_-|K8A(2mcP2ygU|y;pl&^d{&G!J!ItuTuZIH5fW zRJJ@zKh-FvbacX#va|=WVd@XDEDWTRMFm4DVG+fAl-WV30shbfm*c>4o)a8Du>hu)oJAMA!{C_;MflNwsyLjMPti=Ug~N{@AHrHIf`=V@Rgy4I*LNS zA<9K29JPcjJ>e;|^*+GJbzV0+%0gS`iUaqsLz!;$(B31_jYux&uMV3VIkS-0#^7AL z7MP%NqXp5Dzsl{u-GsS!tjteYJ;Z38**Q{vb!_VlWXTdXk*iI;3^;dTKS+S%=K63( z7N8@+NHlTsU7Ad>gFKi@i7sqdE4szVP4KjL?^=RaUL=%1;&=JqhkZxLeA64P;{)lJ z9R>)ZQq&ov>xy;<3l-2|Vu&!mVC|;|kiJ(Gcgs9R%fZP7gjNkstkk6%?U!4W#v8y; zmUphy?82CX4=oXPlO__WsUCha_kI|}iBA21Qb)wRsf155>dxZDf~5_?$BQ18Z4=8~ zJz*vFJh-Pbyh5?`Jl|;(C2wPy7H|GrazwoxFDO zr2Ceu6z8OE8Va{c18_2+oiBkJpZDHy&9^7v;=)fQ#O3l}vRe+cmk@O1XeD?!&ho^wue zp3d0x)GLacttPya?P5gJ0*^g<)8b0Qo&sHL7npW3z<){nwAi1_XbUVNSN__0^b1@C zu5Hnf)UU{e$~*OyJ6%HHbm)y*I(E29)S@#Tdvj*NI>?|iT4aAQ}0tAAd#{3 zUWjseS#~XHQ~EbE*fnw?NSnqDd(jxA{&mUFA6Kvp;WyTjwiA~(UR`Rd0n%;}MBIVP zs}KT$gJ@xk-Gtt-E^oHmuvYHogfws?qOViI4}M*&$V<Ee{K_mV#r4pkDA6rF* zZ4Y+htxhsvQMu@Qr)=CebPXi{N19g&jSB2Q0!$77EC4k`4=X^L-?XtwwgvPABVUok zTMrLI-IUyNO4v_l8Y;MU9jOyB9yESVl7x@+I>RfwBk@wxjk_z}s5!OJ}JKn$#eUY7hp znh9-Ej-_0yluV>rk`ZynTCE!|lD>_V)6D1@7nC`3Y7V6cC3(WbpU~#l$ zROFGH_u$*{y^6MOJEkxwHuR07`F{f`vp{DiaD%$%5HOEaY|iKMvL&6yUjk})QX3x| zN!>2^B!Ys}RmeXuXj-J{GDWdefc7xlU-&AplQi%olY2y(0f_u)G=WL1V6TDz%U6It zYJL+-W#6?MZn0S)qMmevwn=dudrS2kmd?!ChszdwLi~sDfl3zy7%4~`7T@Z1?r*3O z6CB|LF2d!-ez4bGC2xkTJ)|?7whg(q7z_MnQ<9{~ElT9I@uXYY3+VWa{*U{p+mLLD zp7*G!&OWPOPt$(2>^sZ}kRRrZz|${+&H&HcznMEnEQOB(jwX5r6stTAN_K(salu&24e zCB*UW+mZWk$`GHN6}GaJ6%bVe53L$CwN)P^KoP}QY6bT2 z0yA1>13a=~M?Ha5?Rp?v&R+a^5mxN!VS7NjHmqyMgT0FlJ}4@tsCh~Q03*N!#q4cy zd%QRt6W%I|WprFTx$X#T&nZq*qN}#?NoFW>VRT$}U7YjmIF3o2A>hzo?tIo?WR+Ou zMXae6%FHH*be8cz6qDBh&CC9CfULeXvHxYJ^;+Y{64Z_SEuvDO4=LcDI46;fh3nI1 z!NaJuTPHp3#Z2D~O~jfPkjQ`$jU*RTaz=wUq?cI2h^lQGvd!5%sxJdt9MFE}&Q(6cG;ZpEhD&n*o>iEqI_rHNk?=(^5s-V1+yy zo)3!(7Qkz~_`y#c9l|BY1$5}UX(VeSW@Ezf>I8GR`Z!lPtRP;@j04crP}2c%67=VU zCamq%jbBtZ-&UfCKW|5~c=TS-_e3H+7;bzjS-AAc&shBs))dt6ZRlj_nu9fg>u!Fj zR*5b6^gs?=fGj*U%qenbRfMJVJZ zyjU?DH&RNU>DVmvE=v+P{po)v&U7a(iQ9?42<25_54_uX3!y*88v)Zvi^Z3V28!IN z1b$`Cu79ID(I*%4j%FH4rDwZNLbCdm`#`k;%29iJd_?9qj3s>zB;A%4HBdZl3KR{S zGdqnOzn!`v3L=V4K`B^F_71z^7G&36WReneh`;)_)cKiQTM{cU2E>W(ghXre$RZXQ zCz~g>qqr91-$)#E7&9}f8ZQLp=K9xiWM>)$`urXoURDXcx+~%AKYP-0WcB2FT=YB8 zkz;z5xoX;Kg4)iIog_yahCGBOZnNZs^eEs;&14AWMJc)xR7V%jQQL>le9imnvDz~I z^v@?KzaQL(BY>6<-EY*Q5Pvse_Mj%pUrpdw0L~PV{RW_hd!%a-?&J_{sNT3miq$a~ zN2yB6@z;FP#;ttcPMnW-p|u76lZ+LSxo7%Gd(Jj+aZaehd5QJ52Er?5;{DW6SRr zc=HU@0J;)n|2H1<9RFTqvIK*nyDRPOA0skWZes=rNad8KI8 zISo*`Vq_}b@#d8c2!LK|O$+nl#&7Klrv?hBX#^YKxFBm^O|Yi6Y-n&l-U0ck*|IhhNa9KG_ZLRkIt zHS+2i5b4J2m6=`_gZ!K7DXircecXh$>T;!eD{BNGqKg< zK$Y}cfD#&J#QD*O1tV9d0um!ogKU)s&GInXbO?@xfuEJ9$V3zE`R=cgRbAw;3}k^I zzYlFPd|L92mX>0%dx}%BokT@st}B)Z9rv_*@wvrWw9Yc`^>>>BlUOc3pdq+beZp4u zQ!2oTc6u;Qzr3Q%2d>RbKVL*bMsBBdZA_(wo_udcEzteDc3}0nJNo|c!NCcOGXr6T zW|6}`v~iqa7TTiu3V%tch1rWFBu@d8`qAz9{E-Q$h}TpD5cxHl}%&H zi*7osWOeFe&WF$_Oo^mB82#9s4|bsqTE6krrD&Vc3HRZ)Q71&0BH;_yj95DRmY+W& z^yGsk6p42FK%$u*qo+-eA{_5V6Wrad#v_0vi!|0m- zz#Y8DyxpR^9)4861gkI$+oj^}M%pfv)4mVh`|M~B(90E3IH%hv1s%qP%zC_vom=03 zTBn@_oa{?tQniCXLN~%(64+_$FXfqZaRUOTM0+Ow{i#KDQ_3oj6hm~QA(PJ;5I(3i z){pTL(V{e^n{Vdo5Fd`Nxq^$A^*>dUa*=iH&e1ugSw6FE;Tzmjc)`hj=n)w1Lz>T< zQ~_=mxO!<2*7hC~>4Pr%lZjT2*dSIc6!*EoKd0d}LJqrQk#sk~sPAjXtEqxmAI_&Y z`P;&;^scVRTeScVWUne1N*%Qf{%B3SH1&y!;`4TFg+8N1rMkF^l&vOI0RnV&?WE<9 z_a(#m?7b|pNE9(-u~K08HW+{CNQeFLC`axjbH>XmW!dJ_4rf2p;2UgS>7@pFaD4j5 zsfU*+RprCZKJe>P82%loNl#)CeDo+HlJ)|?xI}3N6)<6uYhni!SZ8g~FPS@JnTxvC z?idP4QSP8cv5~e0$uIIcKhOk+$P7C8HEZ{eR#`}KzGo2WWLH!@EWAp;TaO~%JyxBM zu1HMyh39jx{!6nQmk9?&#EW|EqcZ!k=J#$(HPHQTY#ZWzalEpYU#c=47AuBTRtdhy ze@^rGK)X(m6RN}2F#uH5K^hGpL9#d)h`m<^XPA%Jh@AdbF{c%~QX`yySB+tEgUdq& z9Fg49!F2P3P{4Uxkor z1MFU&71G)8McY<59AD8O&dN=NV9r^&yRESEocX*azcn!{?YO^qKSp(qDt#&7tG%7J z<}SZE^mtoEr7$J%vjl3sCGX_kdWkh_Lp^Nr)`v7RH*a+j!b+EczO)#6qdw4iAk9v- zCzp(j~ z5s>i;+gtQN7NO@w(RtWZ{kfSyxc&y!X2>rub@Pw=r~Anio#UEXZ-;s8v$I{a-YvE7 zDVM!U#r@fqGmD~3`h|;gDKV#qi0s9jQx#f>?>qh?tQmBm6G<+B+UBcjlp#v5XEW3h8={Z z%7;YNYnx6Tyd+Xq9oG0xtGlMf=k=2EYCIFpJmEFoK1i_!i@xT+I#{lGC836f?WYN+ z0wR8Qxci^}@eR<+TyMJ0Wn+G}a@mPH{*0C`M|FH+O6&W)K~N-Pdm24)(T!;0`@rj) z+fxkPR*22qPHQWSZ(ulKaG+%jl(PT!rK#XUJYb)6PH)Wm3ZeHVs=`|6M1T!NyRkh^ zIy@XZJS4w8=jAnzuF^^j;lU~;zk2rm%Cya!93El2?DW$#@%q9Ep{I8dW+Lof@b%Q| zzr~13ZQlxPl&MAiS%lk;S`$~~^LJ{&a8tkJii-ZgK=tOMZ6V}M*RN2zLh9OX*GLOVl}&k^BQ@!8J?9`)8b2Zw{eIbQjJ>?jjN#uRAz|;N+nyh% zslQiWp+mX3xkb3$UaNn?`|%OHZKl|A&X`ouUio}RSb|R#wN{6$wBK}=kDf^uw{?aH z3@b0D8P}_IO-(;0@qhv&E4|bOMVQ`yfR*{lmWUt4-JqtiobA;W<|Ubb2UWtjsgIT= z`jg$upMMd2ZTT^_oo8bhLIGUm50J}34(47^a22Y&EpA9u(dQRUmEE}48~jj1qm$;a z!sd{4DD#29jHMyDUI9zx#?L)_IYGt;-n-9CE6~wu8+nF8urfGgYe$MJ;?x0T=|oZ zyijir#|E5dCMMhj(>5oYRWqK_45O|Ziex;UlZ6`my<9Ok8>_g~KcD)=T4$G$;PiM1 zEEObZFeHnh1x#Mk+v>Nk?>rXSIv&|b?XT5}R>&Qk>N~f$W$N>`dYM8uX)k1RxoSOJ+Z}!& z*9}c$U$kXFbV9wQamY6qr;=4qYmFW*q8zo zy=7b|4&47G(){xKR&6&l-@TVsaldYepMloT@LasPQ=?JB&q~EB8{PVuPn9m-8LPYg j_3=6W|IbYdW%E$DZP6WujA&>AsF#`XWusaHbj<$&YWr{I literal 0 HcmV?d00001 diff --git a/demo/web-desktop/assets/multi-render/native/e8/e851e89b-faa2-4484-bea6-5c01dd9f06e2.90cf4.png b/demo/web-desktop/assets/multi-render/native/e8/e851e89b-faa2-4484-bea6-5c01dd9f06e2.90cf4.png new file mode 100644 index 0000000000000000000000000000000000000000..cb3c93f52c50bb9e8b259bfeaf3585e8422018ff GIT binary patch literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU3?z3ec*FxK#Q>iW*H^Dz-M)SM^XJcBzI^%n z_wWDz|AFjVw{8KsckbMI_UxISo=hZAF?&gnU+~AjpC&f3b!~Vb76BA;@N{tuskrs_ z%t28GMUEpE7 literal 0 HcmV?d00001 diff --git a/demo/web-desktop/assets/multi-render/native/eb/eb72a5a2-8837-4f45-a24a-2486eef5fb78.46cee.png b/demo/web-desktop/assets/multi-render/native/eb/eb72a5a2-8837-4f45-a24a-2486eef5fb78.46cee.png new file mode 100644 index 0000000000000000000000000000000000000000..c539ad9515d9bc34ec71ac2342f2ad71cbbd25e3 GIT binary patch literal 6959 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 0; i--) (d = decorators[i]) && (r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r); + return c > 3 && r && Object.defineProperty(target, key, r), r; + }; + Object.defineProperty(exports, "__esModule", { + value: true + }); + var _a = cc._decorator, ccclass = _a.ccclass, property = _a.property; + var SpineSkin = function(_super) { + __extends(SpineSkin, _super); + function SpineSkin() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.addBoyBtn = null; + _this.removeBoyBtn = null; + _this.randomChangeBtn = null; + _this.boy = null; + _this.heads = []; + _this.boys = []; + return _this; + } + SpineSkin.prototype.start = function() { + var _this = this; + var boySpine = this.boy.getComponentInChildren(sp.Skeleton); + var newSkeletonData = boySpine.skeletonData.clone(); + boySpine.skeletonData = newSkeletonData; + boySpine.animation = "attack"; + this.boys.push(this.boy); + this.addBoyBtn.on("click", function() { + var newBoy = cc.instantiate(_this.boy); + var newBoySpine = newBoy.getComponentInChildren(sp.Skeleton); + boySpine.skeletonData = newBoySpine.skeletonData.clone(); + boySpine.animation = "attack"; + _this.boy.parent.addChild(newBoy); + newBoy.setPosition(_this.boys[_this.boys.length - 1].position); + newBoy.x += 100; + if (_this.boys.length % 2 === 1) { + newBoy.getComponentInChildren(sp.Skeleton).setAnimationCacheMode(sp.Skeleton.AnimationCacheMode.PRIVATE_CACHE); + newBoy.getComponentInChildren(cc.Label).string = "Spine - Cache"; + } + _this.boys.push(newBoy); + }); + this.removeBoyBtn.on("click", function() { + if (_this.boys.length > 1) { + _this.boys[_this.boys.length - 1].destroy(); + _this.boys.length -= 1; + } + }); + this.randomChangeBtn.on("click", function() { + var boy = _this.boys[_this.boys.length - 1].getComponentInChildren(sp.Skeleton); + boy.setRegion("Head", "Head", sp.SkeletonData.createRegion(_this.heads[Math.floor(Math.random() * _this.heads.length)])); + }); + }; + __decorate([ property(cc.Node) ], SpineSkin.prototype, "addBoyBtn", void 0); + __decorate([ property(cc.Node) ], SpineSkin.prototype, "removeBoyBtn", void 0); + __decorate([ property(cc.Node) ], SpineSkin.prototype, "randomChangeBtn", void 0); + __decorate([ property(cc.Node) ], SpineSkin.prototype, "boy", void 0); + __decorate([ property([ cc.SpriteFrame ]) ], SpineSkin.prototype, "heads", void 0); + SpineSkin = __decorate([ ccclass ], SpineSkin); + return SpineSkin; + }(cc.Component); + exports.default = SpineSkin; + cc._RF.pop(); + }, {} ] +}, {}, [ "spine-skin" ]); +//# sourceMappingURL=index.js.map diff --git a/demo/web-desktop/assets/spine/index.js.map b/demo/web-desktop/assets/spine/index.js.map new file mode 100644 index 00000000..d9fdbe7c --- /dev/null +++ b/demo/web-desktop/assets/spine/index.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["assets/spine/skin/spine-skin.ts"],"names":["_a","cc","_decorator","ccclass","property","SpineSkin","_super","__extends","_this","apply","this","arguments","addBoyBtn","removeBoyBtn","randomChangeBtn","boy","heads","boys","prototype","start","boySpine","getComponentInChildren","sp","Skeleton","newSkeletonData","skeletonData","clone","animation","push","on","newBoy","instantiate","newBoySpine","parent","addChild","setPosition","length","position","x","setAnimationCacheMode","AnimationCacheMode","PRIVATE_CACHE","Label","string","destroy","setRegion","SkeletonData","createRegion","Math","floor","random","__decorate","Node","SpriteFrame","Component","exports","default"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAAM,IAAAA,KAAAC,GAAAC,YAAAC,UAAAH,GAAAG,SAAAC,WAAAJ,GAAAI;IAGN,IAAAC,YAAA,SAAAC;MAAuCC,UAAAF,WAAAC;MAAvC,SAAAD;QAAA,IAAAG,QAAA,SAAAF,UAAAA,OAAAG,MAAAC,MAAAC,cAAAD;QAGIF,MAAAI,YAAA;QAGAJ,MAAAK,eAAA;QAGAL,MAAAM,kBAAA;QAGAN,MAAAO,MAAA;QAGAP,MAAAQ,QAAA;QAEAR,MAAAS,OAAA;;;MAEUZ,UAAAa,UAAAC,QAAA;QAAV,IAAAX,QAAAE;QACI,IAAAU,WAAAV,KAAAK,IAAAM,uBAAAC,GAAAC;QACA,IAAAC,kBAAAJ,SAAAK,aAAAC;QACAN,SAAAK,eAAAD;QACAJ,SAAAO,YAAA;QAEAjB,KAAAO,KAAAW,KAAAlB,KAAAK;QAEAL,KAAAE,UAAAiB,GAAA,SAAA;UACI,IAAAC,SAAA7B,GAAA8B,YAAAvB,MAAAO;UACA,IAAAiB,cAAAF,OAAAT,uBAAAC,GAAAC;UACAH,SAAAK,eAAAO,YAAAP,aAAAC;UACAN,SAAAO,YAAA;UAEAnB,MAAAO,IAAAkB,OAAAC,SAAAJ;UACAA,OAAAK,YAAA3B,MAAAS,KAAAT,MAAAS,KAAAmB,SAAA,GAAAC;UACAP,OAAAQ,KAAA;UACA,IAAA9B,MAAAS,KAAAmB,SAAA,MAAA,GAAA;YACIN,OAAAT,uBAAAC,GAAAC,UAAAgB,sBAAAjB,GAAAC,SAAAiB,mBAAAC;YACAX,OAAAT,uBAAApB,GAAAyC,OAAAC,SAAA;;UAEJnC,MAAAS,KAAAW,KAAAE;;QAGJpB,KAAAG,aAAAgB,GAAA,SAAA;UACI,IAAArB,MAAAS,KAAAmB,SAAA,GAAA;YACI5B,MAAAS,KAAAT,MAAAS,KAAAmB,SAAA,GAAAQ;YACApC,MAAAS,KAAAmB,UAAA;;;QAIR1B,KAAAI,gBAAAe,GAAA,SAAA;UACI,IAAAd,MAAAP,MAAAS,KAAAT,MAAAS,KAAAmB,SAAA,GAAAf,uBAAAC,GAAAC;UACAR,IAAA8B,UAAA,QAAA,QAAAvB,GAAAwB,aAAAC,aAAAvC,MAAAQ,MAAAgC,KAAAC,MAAAD,KAAAE,WAAA1C,MAAAQ,MAAA;;;MAjDRmC,WAAA,EADC/C,SAAAH,GAAAmD,SACyB/C,UAAAa,WAAA,kBAAA;MAG1BiC,WAAA,EADC/C,SAAAH,GAAAmD,SAC4B/C,UAAAa,WAAA,qBAAA;MAG7BiC,WAAA,EADC/C,SAAAH,GAAAmD,SAC+B/C,UAAAa,WAAA,wBAAA;MAGhCiC,WAAA,EADC/C,SAAAH,GAAAmD,SACmB/C,UAAAa,WAAA,YAAA;MAGpBiC,WAAA,EADC/C,SAAA,EAAAH,GAAAoD,kBAC4BhD,UAAAa,WAAA,cAAA;MAfZb,YAAA8C,WAAA,EADpBhD,WACoBE;MAwDrB,OAAAA;KAxDA,CAAAJ,GAAAqD;IAAqBC,QAAAC,UAAAnD","sourcesContent":["const { ccclass, property } = cc._decorator;\n\n@ccclass\nexport default class SpineSkin extends cc.Component {\n\n @property(cc.Node)\n addBoyBtn: cc.Node = null;\n\n @property(cc.Node)\n removeBoyBtn: cc.Node = null;\n\n @property(cc.Node)\n randomChangeBtn: cc.Node = null;\n\n @property(cc.Node)\n boy: cc.Node = null;\n\n @property([cc.SpriteFrame])\n heads: cc.SpriteFrame[] = [];\n\n boys: cc.Node[] = [];\n\n protected start(): void {\n const boySpine = this.boy.getComponentInChildren(sp.Skeleton);\n const newSkeletonData = boySpine.skeletonData.clone();\n boySpine.skeletonData = newSkeletonData;\n boySpine.animation = 'attack';\n\n this.boys.push(this.boy);\n\n this.addBoyBtn.on('click', () => {\n const newBoy = cc.instantiate(this.boy);\n const newBoySpine = newBoy.getComponentInChildren(sp.Skeleton);\n boySpine.skeletonData = newBoySpine.skeletonData.clone();\n boySpine.animation = 'attack';\n\n this.boy.parent.addChild(newBoy);\n newBoy.setPosition(this.boys[this.boys.length - 1].position);\n newBoy.x += 100;\n if (this.boys.length % 2 === 1) {\n newBoy.getComponentInChildren(sp.Skeleton).setAnimationCacheMode(sp.Skeleton.AnimationCacheMode.PRIVATE_CACHE);\n newBoy.getComponentInChildren(cc.Label).string = `Spine - Cache`;\n }\n this.boys.push(newBoy);\n });\n\n this.removeBoyBtn.on('click', () => {\n if (this.boys.length > 1) {\n this.boys[this.boys.length - 1].destroy();\n this.boys.length -= 1;\n }\n });\n\n this.randomChangeBtn.on('click', () => {\n const boy = this.boys[this.boys.length - 1].getComponentInChildren(sp.Skeleton);\n boy.setRegion('Head', 'Head', sp.SkeletonData.createRegion(this.heads[Math.floor(Math.random() * (this.heads.length))]));\n });\n }\n\n}\n"],"file":"index.js"} \ No newline at end of file diff --git a/demo/web-desktop/assets/spine/native/39/398d85b3-4934-44c0-8d8e-3812b99f015e.2eb47.png b/demo/web-desktop/assets/spine/native/39/398d85b3-4934-44c0-8d8e-3812b99f015e.2eb47.png new file mode 100644 index 0000000000000000000000000000000000000000..1a3ad88fc3572c24af8bc54f6bb92e3aaa910cee GIT binary patch literal 285630 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 literal 0 HcmV?d00001 diff --git a/demo/web-desktop/assets/spine/native/62/6231041a-75a5-4af2-a40d-f27e9498901a.40d17.png b/demo/web-desktop/assets/spine/native/62/6231041a-75a5-4af2-a40d-f27e9498901a.40d17.png new file mode 100644 index 0000000000000000000000000000000000000000..15e145a04f8f58642e64a1cea2db2496e15ba5ef GIT binary patch literal 187127 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�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%0A-v#qZhZ6e=9)WvYo)qg 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 literal 0 HcmV?d00001 diff --git a/demo/web-desktop/assets/spine/native/68/6843f00b-0ef4-4b7c-aac0-42ee42635e55.9a531.png b/demo/web-desktop/assets/spine/native/68/6843f00b-0ef4-4b7c-aac0-42ee42635e55.9a531.png new file mode 100644 index 0000000000000000000000000000000000000000..18265803b0f78942dab8d949ce9d4c4d9762943d GIT binary patch literal 105052 zcmWKXc{mep0LPufY|fdPVXh3rFwB*?=FEMc8_J!t97QwCHD^R3cgaz%BIRa|29wXKs@j6q#WR*;^QStz{?x!VthR?7rm8;ZsF+Ux45$%bCk#9_}_8!DL^qk?>J zw&o~1Q!R`FLSIYH!A#u(ujX#6WNsp2ZH6^BR|g z+FP1k_Q&h1$wsE#_4X7u&{OjbjY%whl3elJ%iU)6(~g~$sJo$B%AF^0NrmW~`<|B~ zCg(SC@?wk2TM?8Zad{0{tiCFSU&FxG+)O(vRL9-gLSIkM!B+kK>TW~t0)z+LF|ugx z5^QAWXX_p5<6ssTm8fm*>3r#$K1RaO)GqW|hS%k!z=WGsPiA2-;k*a*5I>9Y{}z3( zWZro+-qq1_jaJq7a_#H(fs5xwLqh>uJJ-Rnx3hDLmjj$H1_YEp=xOYH;qPkS)i*=Q zzZVaL+dPY=H2w4pPQqGn=xTa zy$Np~dMZJ`Yc(rdoq?u*@BeNvqjRxkQ*b~v&&dVIu%!1b#`;f_N1 zgoGEzx6;y%0Z)P)^r|a_MLueFM{TaJOTG8|`*_py=(m4oyZnOVi@ryCiIEYPFGpXF zZhYvOb+hK*F!{Z-^YK|sjK$hfk2YIf>U7I@hr?=kxNWH?!ud|Q-Zl02+2=frJQ)}O zk#OyI=NX49)dk9dfO&zJBFOsj>i%i(tEWu?h`833f%b%}2a7#E;;_nqp||@~Gb1BI zA9F5lM z17O^tSG68gI5sx^W=or)?C@X$^dCP>)Q@C`tud|*aijKjB4>0Cz!RS(yD0qNEp^8Ne=wv3AbpkJ&UKfbN?J0l3o zB||Vp-xWGOTmJ2I-#IRpEHm*uO`>hYnCFq-eEk*9wr4&Q3BHBOfS?QR&~Y%O_2I) z!|uFFr*5?9G_gMp$zICKBfMpOIw9QU`#LT*uN$(6;W7W09RpFeMTx=}@$m6P~Q+smbdTAaUHxVBrF3ZyYJ2Z2Kgl5O-u zv~tw(AB*?)He=1VZX7%xDzQKyh~X~}q$5IRSbMmRh!K+)O~@(MAB1i$CaPuq+{w*l zqrG$0Z!w=>ph}0s*i*xi*A4RYVN>K%(_==DQ!xw|7R_TqDk;@ce*E%d zD>tH^$xiM1?g)Ei7>>tf46(s&4Ns#hSPCGx^p6<~WT#-oP;nAE$lJz~dU28i^*QK~ z|N4!YR-5YStLP{KE_vP4wCv-GtKPp8&!SaxstEHW5`vH_2Yaxg!<93L7^ zG~8qz(pf15!Nh@X|LVR)MhX_mh!gQ{t6#TyE6Clm8la}yh>tV}{C!dIkaJWB59 zPK=2^P!q79WT@t-?dzcVT;v`U0obg}i^;*X(>#T}+(%3Vn>ZE! zJ0dALdMQWb&TZRrvukr$iI%sIemMk-tQ!CHdGjsp)(W0v<8xiPUIp{xebN9F#4N0& zx>~5x_2TW9XIVE>g4P4iR~xk0T>fy43s&%H$4et6Fv!QeXz-0?(4yO~y4bD!_VVGo zh4w4n*a4t245#tz4N)qqBk3^#X|_|no1*_yiU&!|24vneRns-}f>&Lurf5<{2oY3` zCB>83+0B(01$1;=p4JXdsv069Tm7m9&(5YENM!ermQ0dPkEeA!zp+CBU{Z$SWee&+ z*WgD#mG(;&&c&A#4vaMBOH3ulhtNzMg`-loL`&O4ncFY2sdJ#0K-#*#vZHNgA3r2Y zdD0Z()7sK63hh^vDo8!Kpqff3@r{)Sl??ZeN>qGHQ~_$y4`>mW zpG*lA;Eb#pAYBqzVD39uhP<&OhG=`&AnegW9aGwS%Eu>@Yn4O`h1^ObWj(zL+&<0n z+b+ZAK<3JEeSj&Kq%EXQjbY%@!go3ksE96z#K0D=DT=j!9{!0FMV(u2cW9G z8G=>8X$5@b@eB0*;8LamS@W@d^*N#DjZ4dg6^>az&wG#qRovEZfgP&)Shd5r!y+s| zYh(|ADF9?IW=MwG8b6@f16bvJ$V{w3?|lp+ArG$o=!ZF$RG+BCH(pEQ91?8d0U03cTv;X*IA(K_p z;|?}eZC2>^6Mn!TRM7>-EyE7N-t&^da52{4lAqpopw@qTCtdtCx3vAW}yrdx{kGZH$Sxja`PGGjbIWT5y}?SHlDJ zvJ@DU@5_N_yo=(7+3@RF!>2YaQL8@7k zI6#&_>H`SMA;BtqI?%?Z-v;%n_U5L@CP3X@_kt^!3?4dusp?mtP+sNI2-${ez`ngr z9{f8Ko17Dzhu_Ye&QZv;U61HUB=>I4^rU&c>p6BMBHl@hDw(GmH5~dVm*=16u^4WQ znW~x3lBunqLtQL)O73!x3;iroGY`XF>hPVbyL&L>w_7QnkiTtH>yz`kJvL~P0>Mam zkWlB6SwJYoau5hFsnzvZsVRA}pG?5%>~*T|d~D#m#{{q&y<)`32~lLOlF`%EZBCXA zkJjcYi)r2IXLVhh_8N%YpUw9)$w^VJH>;h3p|bN$Dy+Hv>$&pOR$Z||L$;Mgl%YV- z8%(V1vkRX%lf|Ku^wkK#pSSg7(JD5)4TFLUsY)0CI)y1!wv4hVTNxk&zojCmn7$6z4 zlH;QNHW#=cri}+&#gjW*wV*QbRs>^YIE9OE z4%2jD7z&pHj>y8}olvmj`DD=jB+a?A-#o^z1R-@|_et6qOLc&LAgE^GYr~`G4|(pj zWa~<$+liN-13DIx#PxsGZ@gYwQi$8Lsie@oYFar3f}`Qg&}~|M!JleUl^mF+5`3Mk z*1}geDX5#1%x5+fP>3qR(pWiaNV`|wNWXbk!IJA*tfa(SRr*&!By!7=`I#JE8^Q~bYO~Y-_!ACGb~~v~BHOMyMBhi%@{YPIcG!B38IvBXRdsb+T^;Vn{Lnw`jV1#5)6k5 zI$d;lIEi?JDxhzPily1z9%Ym1k_*r$JaQ0IgynR&f8Ky_F#5}QxSIX@daE#3s8l>e~kxHu}pG@(3IiPUpX`>??acsVqtP#bKFo zpu-TpNtzUumVf2W%YGlwcPX|3fSmBn6g3IOPXLZ6`l)yf;Zaj-B9VrhH)Dn^Sbg=$ zctx$Av{arl91+ANUqBL)0jGq&N$NjlU^R5cEX3YCrcxY6dp@5iKfvU_4)hyLfA^rl z_XTath4;xn*aULASX(v_?3nt9K%vph(^4dj9p2ceZ1S*r{6=~M$= z42>!;8dvy56mIU%P-FS=Zu7&N;SmcSv=*4Adz~St>C1tJJFkA!#S-z%u<&|X{?@Y= z;%#{s217KER#Bo1q92oJCHsa={alrU%uuuvAWJ<5WZz;6Pj;}KzMS{QksUfJ37NOV zP>+*D&>pum24NpvBuVK8NxYjX1U<|XPd~fiVl{eO#zioo>6_5b3+_`b=-bE!_VN z6w2bb%g*jzViYz(vRNi!FHrzfcvVK;pljEdu@}LxQV%5wQ0;!TXQiQc&1x$*rUXLQ;Q{TJ33K_!tM6 z?Rt`Jb=X(m@O!UZ-;Dh>>Ck=SW_wgU4(pN#GWgM>JK4C-#6BA(ltf)CQTCsl6RJ_C zKa~92FmC2P7%Smx%E9bECo366wNwsi6zX%NRQ?8LEeLY3WElNDV$>ohL%*ubW~R=y zv7SP?3%a$2AJ?juR1Z-||PfUCL77Y!*N#N|k|6AHp% zD`1luZq7NGY>AzEMe{hvrK^sw#5&Jr5|sUWUBU;}%!N(1ZdZzJ2w5oHDZ~jp^&|eCCWW^pFAoW4)D||Wo zMYVCVdUN=?BjHBJ$Rm&J%g2-yPs;)7btCOy=e-4;k1*T6Z(Bo(jPgJJy`@A}w#sum zK3tO#V`hdk8b-)<+hw_#T!EM+Ge~nJ4=)a7BFxH|2o|Sq?65K0bsZ*ok&=)S`H4Td zL676GsK1z@j3=_>=$)-wYM-qF+dPaYsW1Fze~SeEcUM-yO8hRJDQInay*IfZQY;t> zSGaEL@cY3B!B2Y=4V}Ip6H4`5Q$PebGi162B@L_Ig~3OJQe>?KoAm*Gcoi7AUX3Dd zSfp$|!3W~Qp>@=YQt=(x#8cslf?q_ zI>_qZP_C;Pp{gCv?r!{e-t1;a;G`}I=`$ArJ1&13tvsE+qvL+DphT^Bg4o3$0MUf%HPaB}H@3pqD$zhHYFNk5dQJEZt zFkD}mlp}uG-POJ8q1#$lckH#@HeA4~zipf#fTAYu<^X{%5x9O7)o(hFU04fq@z_N^ zHh9eruhXderYo=T_`;BPpkfHQj1k3yF;!q@{lo;i-u?#FW?OR>Ggf@lXVK&P zM>5_;vW==rVg33+1dFUfrD6c38GR0~urCZ+FTuSyMM*i0s|=7`3^dQBcd9p5vdybp zS*tk-LHTZD5++CV5Trepv0euW|9V_DP_CFY@D|4%4Ui?qrWi;E&dI2tFhI^|8U;C! zYr4BcHr#@XDrcf@1z`CzUz9)1QDKJQ(JDoMvo}adc*ZOt?`rR7z4tD#!d1v|zE)DR zklRWQnQC{Ze4bCO{0X_q;V<&l-0jiZ9$XA7Y<5V-?jAUqk+ZDInXonIB!17&-Lz{? z#gR)1|BF9P`$c%gMRsmpG7LbUY`X~kVw&s=WTfck*Jn$vWe+SrqgSI3TAT8x*kM1% zXKJ?KbYYN5{emA*ap22 zBB!H_7rCHzEn_ozH@i#}rn(ei4tR!j^GamiI-s2ebQbfZ`U{G>N zYpM5=ZJ^dYy>2!BSr*yhi(Ra&YMPK_p8F3?kxv`Sfz8}9v2QiCZ7N@U}Jl= zIaA3AZH8-%zBy-JXqIGC$LBK_RqeBtH<%*oC*2*sa=xf;ZMypmQtqMqm3{V)n+B41 z3_l=lcRe{Lhy|uu$#LzML!G=^+kD;FM`+zfGAq`+@4cChGT%3(IP?v3Dy9VL@KJ~a zHk}Ks!TItc#wAy;Vb4oJX-3agnL7T;xeMHRbj81GOnCVa25TV$GG%FPurv@=+gA*k zBC*2+6}qFz6-esc=8cO6BIy!Wr;?fjCSom#5U5jy#N#N&0RVWgu*FiC2I*ZM{JRQb z$RZgz&SbiT;kPz2)j!gAH?+aQ! zHd=WU(ReO-Tq5vSpcFwU0@SVN^?t8yxkQymw%z^0mp>Y5si`Ifrt?zWj^~K_yxGkx zrTl^2{nLSZXsdG|ABW{J%d7vfCbJZnB|C8&PI~q+!Df;M;nD#unpu(jS0f0*fT*}+ z{UM9-g9pX~KUNOh_K^8mRAR@X**~1U;B)F>_cL6({)|2RbEDR+!-up5FwpbUmt8r2 z6g?n@yqRI!5rL1s(6u0Sn8?YhbmMA7Kg`nfo#B%OcqIl7_fBF)IvDEvkO8gc^H_hD z(kTeVXyPBm2PsThTE5Gm`^1BlH&ZUd(1Pl@$O7aQRGMDmp%MC@+`H93N*YMD`c3h1 z^A)!9;Ny~6!Ii$3zRp4i7ue6Kcr;q(>ul^~&~@hB7vk&7C`@T7U8Z4aiKaz0Rd@l~ zsSWp3_@^QvJOi`w=u}QK5QoIOV*JO%V{1UFa>!&^X{P{Wo>UeI%aFO8Pse99Z}u@T63M4{&l;R)5Df zw1yoXB6KB)Q~{-nreCHM_xBrXcD(z#aE!Pd+wb;uBE|MTZ2@jZ$+i+e zpro!mTY|#KrZ7Zyns!aq%D@8x=}C#x14ox=lv3j-CK2?Y5V|``!e}F(`C;Odt@vL* zRwTb`6nh;G`QNd55ctnfsu~B%J}dx=0;F~ZFF!&HKxJ=BRXbj~j@_K8cpQdv>A9O9 z^pfQ8&?Uq(Ef8g1)^^YTM+-X1=n0-ubvwhHX~CBVyrpscorVz7@LMnbvwI4p=7*_3fpn*EY95 z{-@X1{5go@77sPWaRiOJ9{1iw{I$Cf8XP{`^5Y;R$vBBxFiZwAF-aA?_}!90v@|DKx`ZDSha}oG z9-6|9^Ee>=^#LiWB`(=BZtr1274fIHoKk#05#HU?k2q{OW@10q{G8-8%*yN?QnLMm zM}Aj+DM&&|koq;M?j@ke0P%(R$V@jXxwwGGMMIU`J11;^O5>X!)<^ z!_}m#)WKW|W7f&BH6=+!3g$8PbjYR2hmG}|%k@lcb$ocmBL&`egvlV8(AM=*nA^%O z=e09-GsUKgk<+=I#+X5<4O6T~GQ^5!U8pVj z5`F>8G{iAKTVe1ka!6P?=T;Mc9WVpRx?kTn|&So=jhkGH%{&c^Ow^j~j*L(Zx+xi9< z7yE~g8t+X?5r&?mklx7}xN>dU@!my4z^!+Fj6b&_C6QNru87lx8?H4?21ga$No7u% zAnCov-U}n3m?I{tg(2cc%FMo-(;{`m0Xf!PN%eQSnS&wv_oT8{L3}1w3{jlfh%sHMC`I3B^uHG4=%G``U(ZsbLjU}om_)ZB zMR@E5+8qEIE@ugXTp+MGy&AtTvrc=Ilug&In=D%K`WuzQR+xvW0{?1T#FJDNXg+J6 zNu_SX*na6kuuECM(US!}!jJl5aSCBE)x_z^Pls_hj$Y6Sd~gS*_A9wc)li0^3Jh04 z$AmTi`6>pf-R@7)-c};18b zUHfMCE~MG*u7XLzgZnR|YGr6i6;}qsA>VvU#G!h)pUgk06!B|0(7H@ooPHla7@6JSgG@!yE>h^)zy8ZmS(B>4idk!8aPrv%vHqD65 z$O5=B?fO60CP~`0Fwk#5RNY7y_rs*yjXo@>aZYABcJDYV*gtq26^3%!GSWH!EdJv5 zekd&h0`p~JUR%A>*xfa$c$j7ip7ibi>?+}hc`>l z!&jO+7msdB{k`=f;r>|Xi}RR!jZpAjDS_(`q&&{ymP0YCzDgpFpLELPs*}qLWq>w zR$%sQWR4}%_K}JVW>PHGxZarZd^VCm`TUTC{r=+ht)b5lG=k29{rpi2LJ;EK_WVN= zJWZfpM^W$mIu%%G8+gLGN$`YVpllw)Tc#*{)22 ziGM|?*HfPz%+3xkO$N`%{P=^g;I%sbu_bnk_PH-^LLk|4ao9Af?V-|?DeUXMH=Hv? zd3eRS??^z#CG`NxWIXsIaQ3yTNt)w~elZcp^+4d>uTdYac>D70W&h@wB7DQr{F%lD zTk5Bla3L^3_`#M4cW-YuOIDqVLaHV@Xq<~hKFe!W0-7#%{0+D>7&kB*Y`Y_jG5ynC zy83A!Q1PuQ7Law_LO5+^6kA;8@SuUQx*vwIG;o&_KT-5ID1Y|PNS6IJ=> z0iTqe4qrtn!DB((y~7SLBEbGHe-XKNuZS{n^8T&OWBUvy|G6*zqldZY7uOy=y0-Cz z;FU`Kj>}}E@N-|jefmpAC7l>++PP66{VTEB;GdD#AB?8h{3fva?(+yCVC-VO*8{9ABgLyG*J@ez*?gwJd8Y89uOUo0&2g>PJR?DRt1cEG*P;6>ra2a zZ|~qgkznnZoP)SjzyGY^S=S$~`qg7yeT$`c=8|Hlm~SO#M_08&yllm=o|*n z7b%QoqU)pcQC^)v><%4$yWL;FYe|_JpC3-e#QdbU4canqNlBV?TQ(3Z7 zX8!fMSH%;udG>#IdMgiyhkj5FtuNJE7jR8}cV)1s^>CSae>rv~mlYuSuUELl$qB*2 zf{Zp_%NUiI2!h5zyfY+u77W=;3JH=_S%UB^l)gEeaOrwr__<`u)gD< zn=}UUGq-Ql)H;wYFQE9tKoDIahRP1d=#S$*c2%-U+|wz5fo9@RDZFe|k-$&}7nqtu<|#M&wn? z=~w2PGW_)Y&C>Zg#HkkUgHZo;2`H>AWb;QxCI`|DSCI06w7ZWB_G%k7k*PW_!GezQiZ(Qc{El}iLx zGWkAFWfICR22qif2aDHs%3~I1%w#}NYkmM~G1bsw=S#5J;8ni-FOWqPZthYZiavI) zf+^Kn!p^ZQKixQ;GGh6!?~NT3YdFs?n7$y`k1Jy3Vq72ST)KXce{><*zo>eIQ5!un zo2m}@sI@Q>s#T&!Nkwk0bH6b3mxG>-?_c6N;b@S`PT{R+kbnRrnF?e4g`sCcJx5mo*z70>X8iYuZCZj0V(*pl*GqyQo~I-99oD6Pd@M(>Ko9_Zdx;2wIdrdyGDE_ z@_q;eNO5!EA9Upaq3lQ>{qN$}?o$ZgIRlVcc9e*pQ|An|Tahr=YCQT&5=DRU9=i~T zR|Ub9%+}YZqbvnGuDC{s-+n5lwn#j8DR>Gs^`po+%f^nxm~r;t0>+D(iX$`i{PbdJ zSfzC>Q{^jJn4#r(d=)Sm{}0vui0@{GBl|nnu#RW$NPPI%e3X4#>|XzTP3hh@*XlxR z;9+cw*s%%>ZXcK{eIR!*8NA7MgCqUru_;7v=|V>~mB&HKi|pO@N=;TUA&gos8cFhxYu z0GY?N*vHDvl%c&TrW7Wu0xQVxhp_^%lfQ4N^3kmV3Kc_-m>>n=&;RaOJnFf6RNVLX zV!>gtPd3Q@J()2hg?GVRQg+>}B$;db!RO_{>dATyEYm1g`1B8v(o$Oi8W$W_(}H3$ z7ANcRynD9U3J}uJ7=Qg_ZQ|#hU!l8ctG8HKZk^%^h6ebt%Sm2cx*cNBBBs>;0<7=+ zNnqy!n(^DwFy}<*SBd>heE)PcIorlxkE$VW|rR1<75fDDen& z(1sO8jC<3k-QrsnAd=*81SwlROW31 zc=2;MnxQLKA|~`SIU(uXntfE&fX^%iSS{l-r;UDLsp)^I7bn;cv%d`Pex{Zw)Z@+T zKV?uu+hSUKG~G3`X1s@b>$N;6kV*%e?HK=@mn2Sqe!I+tR%czS$yMJomvyT^B>p^S zYmSg;HJNSU7*dU0D_p}hbuV4&p`;F_$A~QVFz!-a7<@H)O=00E47&rBiLus9`0Qm_ zM5~9zlt3r5XWdFU>oJRifeS&d@T2=WhZ9;$t*YQ7N|7EJVV+<5pU(iqYk67TgR6>} zwPAG*yh!xMREAq1TKvR;1vu1!+G{oa!!{FQT!f@95?9crLlPYLk zFxpBsxU69Asg4Knn;>Z7fN>>MzhlI`y`M>fA=6cMumDA-l;XJ5rBLI@*c9a!!XWYY z=X_#%${v%t&8WH8q3L%eru_cqkLA>;A72|V^FQCjmjrA62K`iEGiLT@S|b<^xyBy6 zenr==#>(y-_GCS!>0HI$OE0|o|2Gt6cYe74aOjCDitKZF9>}T_J@HkJMZa$S={H|ddxGg zAfrCCo;Ia5etYRdh5bQTrgPW6I&DIOIkXQ#R3R4C(sF^7s)`_}KgN_rmnL zMl2svKU;jU&mg3F&lCvrF6(1|A6tA*2yd3T**UxJm1}?By6>1<_XUSZ-O-oaL-U86t1Ui>&0Z8+ z4;FjyE#DmD760dxn8m+r;E^<^<@lf|5%kjKx-8dt0buzFe z;>$m|kdwXdE&wFscw6x$5{2)c=l9lDpj53y+N9%x1_pZlvem)FaP5kCtHxYWxnRA8 zmdBvUL5#Jt3K&!2q3ZFh?fY}yveK+W|~`1pI@-mxFXVLn9pq7`V*_R=`f5Rm-Z8fwgc+X6Di zqGUTg_4HB-K0m&vc|!fKO@Ay3)@YG?`Ab)oG?@2?ul>RI&S0uK zhhBQhwIL$ra9RLZZEF)=KdJnY8N31d{S+{&oHm2=uUNabt`?9^A-2e);c$>@y6u0Z zS9fk{oRbFRqDY0#y=vOp-EDIQtDE-|Pk;I+iXuWT^FtT(Mgy3k^F>D`HN9&p`6WvG zGPDiHCD4x+qXd#s8W6l=onUFNS0HOD(xec#0p&D!y>WK&+lPvF^nVFw6Z(w1JRa#I zhF56MA5&0JN*?tyl*P5sj@Q!0;nwALcVG>BN1KQ5Xo-N6kllp&Bq+`7((Jn@@6@%j zrSw8*vdkoeV9{;Ri=oK4`m14QStlnRZ?5zm{4DKu?)&fOT_3~Q&6_({J|0{VyW2?z z(_?o&A6BK?mo4r#*79^xD?`4;eew*jR0eURJ(8oTI8Fu(2~VtvHs0c-uRabAO9LFm z@e+({cRtY#SdE4TngPpsBv?wugf|$eCD&0Sg);@E`S2{t8Hv8DvPQ<5~tW#4WpgKThxWn&lF`7(}l zSsGlCMB0AEYu5V(R>Dq_maj{+G|$g!tKa*`dn8YPi}FoT<>R^$0dIW`3X|gEl<+Yt z<++SDGF;TS@UcxgV9uFns#lx{0=clzLTE=o+K7u}ZO~s2Vr@rLat2XO~ zd5?q$+>7Smx0^j|asKmE3>H1~8&i(ZyK-rH@?HCV!jWz$=t@jjNSMqG=42Dvp*U)I zK{eN*grvV*`KR2XW+O2i#;rQab$=k08#+_ad`TQudRr8;uRw>t>I~zCMJ44cbyE?V zQKY3u+TL^FwK<0l5Om3VCJxalU$u&HiT-q3Zm8e7=HwkFz@yWseqK@o4q1`03<@Aq zl$^_EWMFG2C$z63d);$lSG;iVv@zkAh|6>1i>I7xxSD(S(D3imrZ`m9GmYo&+gU0v z4EF#C+=<#ojp;Nw&0-q^|NZ;L{W#O3-Q2$Xk-blDlMw7a$7t`DYYH+jj~pIB-NL?D zGoSvi(x=krgtw*xd19xS0Hs}4mLfY6v|sH*!a{T--iJTZr|=N0L)ZLL?`iFe(wmY{ zQud6hKYdD6OnB?Nh}h0oxAxH4+GHYX`G=^OOJyaKK<0Bsa0p3;!WIdmCSRU+xb;ql zFc(QXF!W-(-W_#d5i&d;C@4jZJ*^DY|#P& zbcm+6**(GUHdxO|YyEsdvxuFdi0!ZPH~qZguaWM{H*9ZjGW)QbNVh8Vflc0C1p%_YVg*` zbMMh)ZAIfX7?;+Z{4(Dsnd)`)2U>54fX;$m+-1MJn z1-tJQ0}OH0H|G%fSQZi!ICJ}B=p%%uSbpJsv`g)3nS1S1p|Es1=YIxk&QH&yiW!)p zl{UF2cbZy5TxIbo90i9s`{EdbzpWOc6)hQe{Uv(0cZPHVCG5~mC4;a_0>CC-jv>t6 zqdk#vp~Ka%)hgWl8|CQq>s2g@*3)lV{*+DfXlllPnR^iBThmjKm~sAWr@}gJb!4Z9 zALntKTD4Mj#iqInFO6tfj%i-a7uX00Xuh@hgmvbhIHKf>9t&l9fMqFD4RXBA*tYH__8d-K)Z zN>=fhrWTVAbtp z*`mf5`h&zJXg>af>|KmBq+RgqfZHTlxyCKYSa5W{>0+1aFCNa;@lw|TCV@1beRAq! z7GjcJLRn`OXvo*$$b`h6eFNzHw-}YDbuL@PFdVnOVFNCXvx^sbLkQ{Vsp;vtPbZAV z>z&M<=^y24SU=kp8cI?fTb)j4x^_=_4wpK2lI_cRn+^N0`%JL!Fg3h|WjXc3!+2#E z(0l9y*CDCwPn6cTYQiu#RW6$QXXU6^edZzqw?ht)0P!~$wDF3=?iiDy&dl)M?GKk| z*yq-(>Ac(Zsjr#@4*7znZ3lxg=u2p#hxXfrxkIX+m7QUHEccJx$7>=o%-i=y6QL zPYi7f7l5I|05`0CW~QfGs!1c6R6t_=tHaU0a=^zQvgO~%Tp)cOP(@88d^}bUE+kI; zop?B~xvStYp>cn1>CoyP@7ij9fBwprD=XM=SHwZrtVTufuhofb5uCgd37g3)P}mqS z_-V+>9PBdXg0Qn4ZnkYp{jYW5R&!Z@o}$)2tfSS`katycK`9Oe@k@bw`Ng_%e1gU8 z{i%b*2G3TXExV|+YeU^J{HwDprgsZ&XyJ^qps-;XqRZ)dS)}AiJS+8Rr9uWad&Fw3 z<90!^S+E8FsqVw}fGig?v}<@r9k{vZ0|}jHeCc6>;=$2iaQTzL#vz;thCbixs977+bfc-WqS~~&szfsC?@7lo zQ<~LJKp5JsXqP(u`dinfY%1{5?F`LB*vL@n-Ibbs;eIClWVox5JQ1}%Wm6b0G0-JReBNIer9uBfaQD*@ zf{EU5Ao1KI^2*Jk+VKB=5hT$FsU}H&pr`*+bmrkueSaKhhOy1q8e@zl`!0jAtE^*} z-H@2EWQ6P`lznV7wve^#+gGwgQZ!?kkgO&9PEy&Dq~bTffA4euIL|%LIrrSp=kT$741Vu!t@w|z{tJfpk_si&BCD4`UGtwjZpm^qNOS%(1eXDi%b zNiCgB17uVmEBs!Gl6W%nmo;-(1RBxj^!=%u0!$$t+~3D>6`XPEm9gDDj-y;$?l*8} zhTpaNQeXdNdi<6qc2Mw6VBuBbuMDDJTqjmK$w18A%v^wt5Lo*Tr?XGMKY!z9u_FyMOl*{m@t}Lp0D6>=khOga=0D0I?XI_I3U_$!q&r;+ULsv zw!Ghm5GQ&6-eF3wHuCiHX_gX@R|d=Hv{yg(mWjG?J6l$zxc#a*h#o5RSib;L6JWE| z{#<@x1SR?fXX%!$_DP#vJe|()fK>ptW?D$-#a2P^{(z6E<>f`?MIq|6!Fr2XEq#Jt z%+^Hbs#4!xJvsWJ&gbCtLv75Z+xxBMD=-LU#ZRis&>$79YL{~%%WyIRFvsZWDsY-z zP8+k#-L{;`;zpujxmj7o1$N?ZOBRCa&2&9k%3#3UIf%_pH3PtEk_bS{D-iTySK>e_ zKbmaPqc*u)X5^un$^C|Huc3{(m#hBlF_~28{b3adtm&(@*JP8ddI2$2RZ^h8&RKIR zNXWn8QipIF+Y1e3sG0=nTzcRUU~fFgpFG^DA6Sj)R+??32fX0fBkN^(L^rO0c>;O$ zdi@U)lcirR8uO66XZb8G%~o&C=ZjA;D{Pizz1d{ZCHJaMAQ)k~>ltOubu|Zef&h<6 z|J#<0?iGUXn+Mk3^7@WGP_Ve27;>xAw>spa{}{TpNTidME_PD!#8SkeWQ#ZqrT_r1%@G@Q6zLL$dL z+>8fC72BI$vowE|Tm%%c{?6xS8#f`&Nc)Im8F3sJ_*s%T19k8o5IOtXz(Dk1K_w z{q-ZS8{Yw$K&#My-Wq>w&Qq!4>i%twoc{0f>nl8edIGyTf4?mDVy`TZ(Um@w7pkub z|5%*W#+(|Fpps54^Dbs&Wr1etzD|Gq1Y0K>Vu8FJ4iAmZ4p_~!&eAokk5>_31f;y- zA>}=MLFbV_vHvGA)Mujqum+=DjBXAA)8Nz22j(h2ufPKHvESLSDsPYTY*AMC>CoqvjP^017!97&&kY~xry zU|xziRT}>4dy}VP4O8EeLipmjSfhwt;iweh?3ZaQzmbKSzu;HKV9+&!@PA=(_xP0=SeX^WS)t6*>P=?$Sx8eULErGpQ)$(u ztbavuX9gKe!;H%lR3>!0zAE_KEPvKwa?tfEzePov&FJT+gIGB(+*z~bh+Vm5VWnes z8emP~rT8_OE4t%xFD|BAO;RW?!a$sU4o;HO|Sf;=%?E*CJcPn5*p{% zohf>_XF8sx+IUeK@ga^vX^V=#J~nQW{ttWQYz9x4;KRoNM|@~L{E*VJUt!|k*J%m> zhGKr|R0q$#@O5x5-XRsFM>XqL9$4b&;w4qPo)Q^V^;zvQ;(*^xf5!(zhVT2^We8F; zUVdvNUtB9P6#G-r(3o8=?kD_ODLYv=$RyZD6lUrpz+%#4*JC}%OBD^cgmgDnHf|g^ zT_UNoQpZ%SL6BSG?|T{(Y=fW)1)$igJM_kzl+vSButQU66F%69Jo14OIZC zl1vux)oS^=_e`({f!H7!OfPb#CzySmuDNw1TngoHBGZNypo6!=E7kZD2)TRQUo~8X zs*gvm-^s+H_=u{0w~E3Z{*C1tEgOYGm2*b)`Jw@7&H~)xM5C1ZbAhqOk~zCC=Y8+O z!f5l*BE56V9d>t}q<(hzsN$fGH2PtBxc$A`eXw)A(Xf2y>R+ad(F>o-w*v0|9=B$C zDtpR@*auPzC>j!>(RBhs#V1>-j5_~iMStHfx?!~*?)Z(3`QifqCdF^BD(RIBW&9UX z#Zca{Qzas{f=+CidCWS+D86O6`|!pisRJk4;MY3GPT}% z_X!_OUPTRqdu9EQ=YKhbMf{}EECZ&EtEk*4tgxQGJce0)0rf@j*{T)WRAbNMY_p^??{c&rgKT>je(JvhMjW7YYu@y_t$Z&K#c78Dg`R<}ZWPJ{BL zCsGHZG+79^(xuIdvod=QQ#x0uC*R3|Sv-6ESkl@eh|p3HcJWlmJoYh-0EET|gdPq% zwtf4@cOTw9edWQXrx)txzK|ZO(9?ANdc+i8b zz2NUFTHg5zoUZeug7VakxZnoYpB1*20s5pYaNwzbV~c@?M8aMhK~KD@0{h8W+!h(@$SYl{p$NL-@g`%k+!%A zbM^vb#Nl(X20t54^Y2B)1~axMjZ6&1%!}G{qmJYe_Cd-1bkq41Gbu)c_wx^T0=6O3 zS^lCy{{M|~rc>~@zxkJj!F^kv;B$@oa+vStX}8>pJAGWpXs{fM)Fh^<%*1oTdgeP{ z`*$?|6zF&m9eDvM9*Tz0DQ8yPoD=UD1}73dRC6W?ps?qJrPg<*M#1NE{A&7?dwN<4Bh z3p0p70GxIQWhy7`EUQEP(fB6#EEYbKacE*wWWDtU__GNJ$}ccw>e8V+1m>5_^8Uv{l-f~$#N`azAWyuz)F z;MgoOl0pa93Y|A=&Hj{UWW-)LkelqSaP2)K;awnHS_sytbMs5bJiQnuu`Da(9zn?z z`COtt?O&1BL_9~TRasEatr`gdhu{Vdc);*#4)@z+us<^)lHaokgKrPx=Qv-vF(gmV zCd)(Bcd{wp=(xmx-u7CAx#A#WV!SDUWQY2`%#gxpAJ?1{J zV@7;S*GI>ncoOI{K*;|22o7*#IV>-|Tr4>|Xd8m+{Jf=;`V>&oCxCfg#jk&<@b03{ zm}HKvy1W2-oXmZxEMhd)h>WjDk$f)q5sHM7o2hLR`??MR;5IZ9FlNz{H$AD%G zsn3fzGdU~SOluy#8f_N|!gBI+2D54>?h}Tr%TQk(ori->)N*pgxsSm_!F@MO7TUfP zB*0CKl6Ti2mZ)I4JeVvRl~_C%A~auGB9GpEeb8R9DzBTpC%{5%G+a-aB-BXfGOlM; zH4(a2YpJ89eEeKs%UcPcR~F{KI~d~WA({ril*14kkR++vUCCIb6A@i1rM&DDLN%);2OqtYg{T`rkkq`UBn?o4+&AC7&FoHU0 zA%Hf&e}5b!gd!TH2WfD2McyPn{+9vp3-W@3fPN`d68pO2T|y(*(~ZtQ&9_7RkXBxZ zA-I+|0;{% ztoE;KT^)p?z0DfsM9j()d&ND4RiBq6?uBKqw+zWM62+UC848Z7TNZoq0t8pRq5d>1rqm7gSl!%IH@aZ=;v}SXG#DV^LT&k{N9%;a<#9T+FJYh_ z<$bHd@!JP5pgb$TSWZp1asdA=SJh<%VI~8wynS`CJ6@&VgJeSPRo{Wo_N#!!k1vW< zFy4&mdquI7@3)`5d3@~+Ka~ay%owC0wkL zOV+^zg?Zh}KX61knzIOIfTrl?U8ab@;XoGZ&F4W0J+||$c1*{3r9k{tjuuuNHYye! zw+*BRA`I)pSHTqFKkh!=)UUg94d~fCt=+B%FM2}O7)A%>!#uzfWiMln9qBdKH~YG>-NHG?m*N8#Y34$43#&n{dgxsK=?$IG)sC; zTW29>^>i%CJWMZJovn|*tytPXT%fviWMFJ~niH7)NkmD~92KHRUTm?G5=R-?L4_jm znzo}^YW{V+tk`{Sbx#VMJ^`QF%gI$$mW^}mu|#gMp*c|E@*;wRbCH{Q*YCdLAD4z3 z^hC^ei2LD=|8d91jaqAzc|h=V+}!v+ z!sa^&m9RPL0enz5z&pza7xMvIsh}l1HQ17IR7`EZB>Yc#@QP5P!m*TQmc_auTOY^HU|D5Ft`8U-rla z)|z)q2U&2kXDHkNg*2)n!7y|Q*DcBV(ji%9v)X-R#QdeZaMjDMzq^3puBRhwra^RK z`0ZxSfq7YkT54J&CH5k+G53nHTF~)=W*Z?SgWAJjNHsy?e|CbHisK2it|Kc|xfp@UTmO&YC(cEoU^JkB{m3{M}de4V}S;$wL|xyACLVPy^alc2yK4srG-3r}@a zSg#oEl*S9KE06{dAAB^5#(EkSzXq3lpH`&R!34SxggH(oO+AmeyTCTgNtE!qn zvbT!0sftq^f&V|K?^mGG2wok{+Hnb&$$88`U`=W_!ae8#W|&M(M3RSxh}W zBTJY=!1sS2HMX4#=y6j#VQ+WEf=H`a$oA=yYf6b5AYynZOu5%@CUYLr~gYh%t z>0HclT%iY7@cutdl465Aeq}Fa4bn^lzt~GYH3Z3}m)Np9`K+J(4)p}B2dsSv*aE-t zj~9V{V`Bu@QZNxwFHCaZsa8yAX=qN-F|2ux!fQlHO|MWl{5b{c*agB8Yp?+n-nFYb(}}nK%8gdgO4T{E>K&W0)m`bh%y)=pxS+PtJu}9IwkIXk;pwXObUokQ z{Nwz6v-idsNqQ9KK!K{IBu#=#luL3R^f|OFM^k`7T3;_A{=3(+KX+M@eXU_EvPX$5 zPUM-guW8)u3)wsZurK|3<)=wuyET@;f%Tg9NPK={ki~Mcs%^`Def}f2TlZ*34F)u- zMs_r1{|Qdq^BXII|5M(}(?!27iKX9VEq$|@01)qa%7vAGjwH`7K&{}_-fR(ybrkFD zhJJPMHQIWMXLKSyXr0v;RGF}zOQNd%JYl!R%6zT;1!lFa#Y_987>n+dsN7+Qq6-@St0*U&|$++qljQ z_yDl_3;yBl@FHV^5qTwDGbW+e`8j_^xVQI6+VJLor37n+^jLb337zN%5TyFxikct4 z&-r!CiN&>dE5Ns7_3d)-Upq^ee%+c&{7{XH##;OUa8GBch(m~Prka+kYokbqPXFP- zKm$_*eKnTt)hCaIq|9A50Mky!##Uek$}`9Ghc24l(}31*dBJH|*B$IhI8ze8r<(k&$0#^ut*4Bh-PzM~R)TwR^S_@| zoPCRMQssXCPX}7*&4B7wO2FXV;(t*x*$9my@L$U5_i<#z&_55F3*<$(qyDR!1y;nV?o*GGn4yYa5?#dwS#q7#vPU`V?(NdapQq9=0j3dwc%{>iPTeh%0tm4N zYa5HV2+x1_?_d4){Ld@8zDj~DY{nxXz8v;3$m!F{$5)c=fpWi|LyAU2FA15-^_3#<&tsA_FdYt~I6Nc6Ey>IXZTZxP{YB97@v`_wUf#|a zX0&HE<(jHtuglYs$`tX2ujKs)7OOHqP~BA)_q)* zZ~OYr!>O6#ZoNNh)ucyfd3%dZ&$^VbxKZn|3+@}jjBLpw0uk$2ZC0UGuut~sveRuw zqsiM?lX0Z&#&L(3`|Dqy6-R@_=nD-dy^bc7!vEo~O-yZnTObv5ug!iiHY&zA<@yft zTUNB(w&Xx<7qNj*uB4nC!TSMBPx2zkQ({3l*(#;3Se)q1R0FhOk2IN% z5p@g@`=Xj||F#*lbmC~WdO8{ypayG$7&Yt8@;dpz#&kk8oGV$4op-H=w?XK3#g(jk zCf2cx(|A81)v0^omH~3xzu8Hsd%x{@?WN}qwxr6~Bon0j)hX*`4#dt0D%AjEprNHL z2)gSM%D_0phxkPD+D${=d@*_2<9ZkgKoln zzBl5^5R5T>-003-+1=&-&WFkMSs#&LlQR1LJ}m*`<^o9{owJjc?x+L;mYF5_%RCF3 z-L5PvM@7_UknJ{`HU!OT+srI*!M8xEE1hcMxtdk?+BFaWLhaW3eLb;9O3$9wB;{b6 zeY;D7k1h6+!~z1EQ&J5tn|Ue|uH9uoS16gxVZ`7!NfwoMhf$noV) z%ucM%0`F1ilxZ)8K>Yc>Q>X~9m~g3zla-4WG;({Z5yt=^j1{zN#%c$lE$A5tquUzk zMoEUvWtTTgFUvisixK&5xz=sfLI>g#Ai(>a=@K}NdmiMh7@oDuKDn}%4y{H~wIx02 zGj92~1}p|+6P2*pI4>AG(2s7t@7I!DXc|PE31kRBgb>IA=Nk{{DceZCbi`2O&S67K z_*s>A!aGp6`b^Q&iF{mhe0DNBCYI*iEi31jtSYT2bfqIYlkv`5NII@Z57;dLjC!)# zKpUWvUztC9_Yih#FHc3t=@|!{5MP^wF+lZ;+Ve?y90ykIjr0bW$-*ZtjL{U1)mQk9 z<5vNoN$hueY;l@sr9RR$0LH0~HK1xFS>|u1Uu`lFjTA-Ed4eO@dWMKrF%XD*#nAd}vbs6C}Fn;3*LekA91^>%qK`%~E_gs~; zx{s6g%4nO^Y_F2Gf|NKFW*Q9^tw*F)Nay*9xCxF_$n&UXyFa^p?B_6b z0n8$xz&3H`!m5lRW-yO4Ih(W^*FYAX8XO%&T6gx5f+fTSjQy6~X;CP)LhQ=l-zsK{ zhaj<)i1ly568jnD>~WkVVnw4shgAbjNEW$Wa=q-ZHDzwJx14{Al@Js}77ZhPWPKXS zo(=}WBti(+fpA#GaXpiWKxnR7=eE`jj(bB5kLQ}$?`AJsrZZu3rqj}dBHzLvUVyUP zOZW`oGcL7B8Dey69F`I5qhov<7?;g&XXNAGPK;Y2b0K>Oo_@)Z_s`E}$v#g?ug17- zA!&3$gP}Lp9%-R!K;LJbNPM%Zn+ggfF=}KmQ+F@9FU!H3$iYUt!R{MK<%}(6JMGU& zDqal!^sLq3hc0$E6YL+YHTrmQ2qfjMX*VI8av50txscH=<(U0$!a9ZN#V2|o=bbck z(jwq($@F$2wVCoVZ5)xesifrFc_t;C(_#Ch7eTguw)gMX`TDue`NV%u2Kng?Sk_ORm+GxNq$B8n z=K&j^e3Q|yf^xfqGGk)}$-SYFWs|9sro~jW9*)(iVpTla_{Ycb71nxR^H~F7jTTTx z&?*B?*LT0TR(e}flwzd9t<0;Qbi^&4BcE;VL|}LQVzMKEZZg+fM^XpB%m-Jw5mxJV z@FuAYT*J;9kOjT^{UhG1zlYAxrk-4h{Mq*7t=zP=otX(kh+6DZ}e z7}HB{Rpufk&)-a7VN4)ch)={dqtmy3s@&HxM+s1YLa=yr_CTN%K_>SpJ*kn7)~^ba z6Vy~bTiQGS6m#~LHl(w*YZ>Wi^0@YwlUS@_N(lVa=C86%!x1(~y=p!#PPCkj@SxH_ zFksmIujXHli9tY;U*>AFrLComNsIj0nd2s{bpRC)JhIO=l&^MfXu0s7*B9dghkpW} zu;zLU3EG`p&GLCIVmW)ydFr=ihQ3cJK|?1-8*KV-&nNBQ9!s?hChW5rPL=(SIJ;6+ zxgBz@C-PkCd>2{u#Cb{MD{{0UX#OiwnRQX09s24oSLGX%0WG0*mVN2l zT`3ORAVU#O%cV;CxsQy6G{Y{+4F*Yw)AgN&#!Y8 z?CaB=tAD@UePh?b$!2Q7P+7xSiH%dpd92xKj#AV26wGFY8(7GcuBly=PR(tX9OJAcZ6bloLIGz zSK`T?t{_pF-QkEm7juda#zram2v^#OXFJpN<@&|~C2A!Gv^ng|mfxJKV|C8|{&#IRmG|2>@u%k?D3N4g@5R2}e! z27~7tsi0)~OinshY1z>NUEtmAtdLJvnCpjI+6}(^QGE0J{a(yrpvOU~HSMWgm9}DG zIOW5PW>jU#_#0oUSU`7%x}KWreN`o=ZWcPC=WOn=T# zJ*)HC3Y4N3+M(Tnf;=#8zwe$1YfxOLgU7gTPe@@cra#dz!2vbPD}5&(Hzs2(oV?27 z>LL}uCd65oA{qpx&7hEo+%OaA{OzY%4QJ=azCC@?7e`HG90*Sf#S{8kWk`mLs+{4A z5+EO_gi=zgtkULWjciptu~M7sx}|1&b`qZ)5z}caY}8dgXxb0Q%HI>0h#)O zLP1Gk^8t^b7taUW-hAzO^5b>#o#V)>qniJ4gMYr#F6Ed#;ae0f0 zlrlJ6zI!e)PO;))Zt9WSFLKX58V=zOwXEEN+)jyq*5v#H_YkPAn6=C9LA5<&MUXKs zG)vpv40LNHh&_xbzP&HQopXDw>jOM=U6d}3A9ja&L)L{o9MlyE}Xw!!*8Kegj|9V`w!@9=Y_Dg;f$Iveh#D>lhQ(V}KYLE=F)-NXVEka#IGt)`G(c(YlSqgw$rcP}MT*L5d{ zrz+)|&sYZ0T#VCZ3%<+lqg&Z#yt(k@i4(kyXoLIUpJZWxJW_aXOMpjc4Hxn)7n{EVv z4Im18AwYrspnDA~WjmjWc9_@|e6J0cZF(D+X>dx1UCL90#}xscwpse%EPdVPLYE!- zXNX^~8@gC5sC}@uU15X{&(tRL(?KuY=t5QSzNAO3AhX(h{umP^9eVP#a|k&p?>YjK z>KlJJ!0NZoBgiL1{Jm9{RL08ZC>YPRWbF+I*0r`v7(A>j{Ym5$#*n}+(WNwr$ibTE zm@|;NL_%P-IgBWm_mbp!@<&@^4WN?Y*|mp^-HJRQ6eo~PQ|GPX&)De4Yj=DI!Z+NZQx@713cSlf+pQCDDNR&6UDI6WNk#!_z|NEq) zu{`QbTt%jITi zWmZOs%7Oq=d}U(2Yut4tmY!xReqi%```-{Y;~wwTNpj^z?6PQv%jR z0(|+r{=(#klMf$0Xzcw|HWK^Tj1QyPo9`c9jB)nkvqXGnsdPU7q_}+(ewCi^w_Gv# zqO17wOvA-$b^Dzgg{WqbogR(Seg4w(VC%XOz;kXzs=e&m%N>#nIsq)Nc<(zz*f@5If4uDyKb;4Dgt{qdXvx9y`JNsr&)X2f^~Hy8kK50)Ogtl}CmydX$}y=I=|R)FsUGae0#_ge0jGs|b?*JUIA(9-8mEPg(}XKKGzL2z zauOLPZRP{bvu;@mKG`I?!izS$Hs!2?M6?p=Z5ozw<8nCvz_oG8{SMYNLHV8N@~_am zRNMOTLU=@~(`tdZMV!a2TVWyArj=0RzZr@P!{Xbextuy6A$B(Q^mD8FDCMTCw!S_V< z9X58`ZWNBymh`?VrEX^R^eodSgcZv-Xh!7LtXu#mq1R^71gA+lG=KW%c%yM)t9yKL zd0*Y8Fn24*i^Fra=w6hR+ofIES5`Q@gpUZ<%QfG#uB9{bjvL;&pdz6!NaGN2u z+IzxM^g0Xw^b9*#*Pf3_wq<*eCBC~vy9k7q1RT!*4sIB zWd}JX1W6zWwUNznCIr*^ugr#+P1mq*w8rMuU(ebHS6)Zq_L<(cGMDGc^JT{*BcMwy zg~8s54Zn-OeBjKe(rb1(0D^5#`^vLRdD(4+s0k_~qJBI&5!N&OiSa8{7b(&6qhAHp^m@Z0Ob(lGo{vxyTnFyp2L3{838#F;kr zS+V{jkfMj&M|-8_Tv3jhiWTZ&fYfH$V8-8w1b+LoT=?c4jt3^0t(@^mWb62=n5ROf?mFvrZzESHO z?7&G)(17H9h^KfuYoC0Ys-uUSwK(w^BS*e!!|<+XrEY^WXSvl757|0jBaep^$I6W6 z>*O3A)KOM7V`V}=lSQ28ig)s63S*$2!f)u4as6W~RQ`Ao(KZr2(L#Hq*zaPTyEu2? zoBIhRw8fvTrc81gD4WN;s~GA{2mu5AI16oyHP#n>!a`yz-oxt{f$U#5!1SC<8D-gt z6>I^1?#B-oy-MH@tZ9EJ_P!pJZpUWLgn^Es74PnIvbJjlwIxoaC!s za+3Vw5+~YGGUFZF^b&_B^NYPD0)<94hgvb{Rp8*JB!S z@0Nr^p@>T^BoZt7BGT&Xs@=i*W2s(V&br7OQfDSU@L4sdUWn(NGb?J(`!NjR4YwFKUi@s zbBHTpFL1B5gpXxBWxDiayY*rx9}_bjeaVOfI$fNX~Fi={gyR94>SMn)Vxy+d|+ ziucJrFw;@?5zec@%R{q4V5_z|q|T2;4W0Jqmt183oqiJJ0m?NSvid|y7>00(sU_ds zJ`eb&dge3tZzO@qhf=0w9`$XG2li3>%F-(t8?Qf?dyuI`s*PBi`2aF~T9)JciRjx3 zMQ!0@Z_}&+bcErGt?y|Y1y_aE6>zdxA`}`~>lV!F5MRDq?Uk+3>HHD?Q6R&XrEhv4 z7}z_w3JyT(WKc9Xsm$E1N!D~?rm_0S;Sa2_WE%BX9^lyC^0_jea;Jw@>j~j`oR~eG zl~_j1nuFqJcBFodbF!7nm*2>%obqPwc?PnyzX3JBCy0wH3FW;cXivRe79<~U3~_jn zAY!QR(>mUEjT8U+KX>=?lzDX(F?eKGNsUeQ;F{L^SH>|G@2S*r83!LI+)O|`vaQV8bW>1FWDs&fPv4ts#-5Ch zA-x(o}nd;SD~aE5v8%)Edi|ihS~A6e&Zf z?dNArJcqq$8(43a&I2A|aBPN-fo|lSmPA1!QwGKJj-(O@Rgu0xO6<3$5PWibhht_A$cZ4rP0iQ_R&#*?hT@U;Y&KVA!P@rg_1b%{dJcE{Eon8 z@P27QWdd#il05!mivO9;u`;c5Vn(N%TZyGl4Fe&G2C1T3=?rXlY(L1P8heYFV~Nd4 z`n4yjZP3jjfZu@GfYaDPyb3HwcMgVD<|$0ry-56SWP+dUFj=&&-;c zotl{v&JIap{(4!;%-{FL6`^sWJV<#xGRzk&mEHhY|2RftwqP$m@*6A^v=^f|egANC zvgb21#@R!&B0T+OxU0Ay$$=to|1-FG^szdb64xVfJte{ZrYO%fdzfPx zv)?|!XX(=9y*0YY|3>%7DI&@G^bb8U#V$??7f47;d>!^!u;p%6V4y3+RE2-u!;6ZW zg3FaI1Wjg9-x4IHRQGI$*4H$J!oE;$`5d^oRKDjEmPSUn;}{?pzvOd|C3*%7OS1>+ zfSD6jdg3I)On-RBZ{Aq`6SqQq@Q~${H(NXUWqe+xb=Y(yP`GB^V#S1ltfES`L47 zg`QMca+3w(FskgW10mKBD|?$+!QUpTCtFru_EQi-QA;=a0Pc43yY1O{0bVqF zwz_$tJ>xEzUW~2Yus(RnBYoSg_5O(dlqb647CprNwGs?kwf;6U)9k{9%C}5RK303! z8e`}6;sMe(@Sloq{GU^QABM!axW~e>;8On3E`!p)&4y4};ud0Sj^i3~q&I3{NB^9r zYUF0QsVl)%m}ub9)(KG~TxT=_dKwOQ7CPImiM06XodP`8=u?d@#k7b*|tx9yg%Rw=aX#Gk>ID4)@nQb#2#J)+4U%O3m0EmmR$=SSVq>SN`bsIVF-F6j?=*K1Tqt@2tFy%xOekEoNlGOm%qEc1H5?#j?CyW%3?LFvG;{1 zQJ*`jI#MRgUrh_|FBw!m+>ous=l5mfUQVA78m|0v}yATUrUKeztN_5`kqcg<)(HWuCsj z?)&!_N6eqqq^2|gY@(Vp$g|5U`@{XzD51ekgBgBk{w4zQ((tR9QKF0$e!s^_qHd{Y z^a@2d=I${w33g4`x;{_#A?-gAq_d^V<16{75E1c+h#Oo``8i+czX5)a@(V(~kQ<@8 zEnOX!16n-flONmvRem$OC9Fmf#hOIM87UbLt)uC|8>_++TAT0Qv)b{MHIz{vDf>VX zsf|DV;<2lYjQ`dv4rT)-XJiR!oU=76i1(4az?`1 z+;7ooSMSD2KwgPSet+&``-DEQnf- zjrZ3LTlCk1?S~K9?F=4z4lgC-KF(nb`7TQ4tk@v(B}v~0uuT<2dO;>MVhnvfVPLC7 zbpUnFt6WR4MRqfiQ5>=U~VyhIh*!>7b!$B+cysS`IU@C<3veZAhXp=W9*Prh6+nl z=aNA69D=ij2b%=A53Ya=+XsMy>U6ag1aj~u*Er`Q^uyw)5`Y_p#D;vqU(7_V*G(n zf~r%NFgRYF8S1!fN||}Fw_$PjSAJ_Vo2IMj-x5~)C+zDMz57)M$Et;gSvh*%6T9Fb zx_)1SLpQcJ4|>*Heuwd=GPXI?(^zl{CZ7)o8v>#V#8h75Q08_}s%y)Z#Z_@=8#BiY zpVFzpqc;ctqv*Wj*?hY&ZY4%y6OX-X1+jN)#%PV0QB)#o)TT!LXsyHwMJY9E#I9Y{ z($ZPnRK6K>q_B}+8BCphhrluDZ>9X)#8!5$35+0Vq~BvWfo^v~ zUy^zNztnvhvt1l9mOE~UeLl%7S?@J%GU+%Wdu_I_02Z$)qOR>ftjrr60Stw)5Ft=D&(QPWayISJng zz7#>^qo@Y;%kW#@jfp=G+D8&22onmtxP+vQ(qJtnKLmEXj@D$_w>k(3Az4GnN5r=0 zx8l^V-KV%4SXixJJ)g(c_s4-0sc}8n7reSkK&sty{emQs?S5`@{A!$0)wD$U7@|OH zWX4uob7ML|De}+RafMAD!Um7!+l|MA1NEDi_&D+ocZs*sC*ORGGfb4%zuZMs%JK{9 zGYpL%Em_PXe+zzwx8_>5Ox(US?W9zE}R|!fjgYH~R%T=YroZ1@*9V@{OmF`a?Si$SEd3j;& zR5bm3ald1=aC)jYHfvRxSO-!NCO^OgPaI;d>|tQgrFfEih}_d*4`L@Rx5r*zD!lA- z@3`X`S@`HCMJrc_$0;dWJyaq#jr8|7WNKi>Z{t!gI~~VOFKT6UT#K9-zbzXO>5;Lq zYDM!fj)8oFEXa|CR^%3Er@wRZJ1{(^5%}E8n6a=JY~rYnL1Cl33NA&Z<9)YPp>)vl zs1e}qZIdPRY9Mn(?vd<*P4mg6rSXxClT@L56+UhHH^)E&r}L(s-~BOdf}zSp=Z|L3 zFdGj;@}C&vBIA`p4=V^J^WQ4L&>Uk6D;xGvF=Xp_KrgUxzhrsliQ~Yx)SuoReuq_# zG|486wvT$QxG>rATZ#$f1bk8kaiQyFQwj*m=0ns>vt}!zz+=>MdAKxsO%7Dxl^eYy znZ546HSNXBo9l~!UV)H1+36-l^S;W+}^=8@3 ztTSR)Ob&&Ch)W{~pVH)|Zh}+BQ$S-uI(PoN>3}v<_(6$MS*#P@DJr;Zcd0sG8kD0B zXp%aT;|xPbZH$#^o7ESGS0|qZw;S3A6mdW=ak|Un7{CICmry05eiz%OS*OX?GVApy zI#{P;lg;uQK)_$rr2mC84c;N3Z?#R*=Ft!}?|^kF8whf4C}P{oz~Q=FEx{}PBu0FW zhFyY&5J*jWpq(^mv3-kfT6?kp2SE%k<(BKdww{vqu4@g}xvIDUeR{CynJxKY6Ut5v zO7;bkBB}d;M=DDJtx9oa{?E7}ytLk`w=KhwGgM$W5%+x+#{4Xe3sz0d>ZGjsBv3&= z%G{~No>oO>Yyn}4Kx&FQe@vDTg=Ja~OCVCOLta`*5^;8%9PmqepN#~Vpr5E0c8f0? zqYD=-!}XY+MVX}KariSYB7N+2VbBh%bcBN|3ac6ht~L{Eg~&Rx;qR$uzTdIpW_HbH ziuO&9005Fg^p}Qdj}TUPnW#Ym#Jh~at_6{Le&dgZc1xm_0uZd3F+h`7ciOCU-yykS z!%{!OH(2GSz0ef|9StM(&Oj3|wys)r6%O?1Uape{K|8no?Z@<7AAs!2sabW59yvc0 zF~9bPc|?u@pfa-9I9t|IISg~GAoJ?@GvBUKS-5Q5kZmGc^{Mu71VSUq)!&PCPXVv2 zmklqk5bY#_(F|l=jJ+iDLJA#WzQJ#p&q>SM=F53>i#~DTD9>z$$Dsu?avCl-rW(U7 zc;)+_v|j=*5M|Y2Pq*vg+jxTk~$Mcb7xR>U}Ws>E9A~L&iK$CMwTZdw{&I%ou1c zYQ7GQ5q6>B{@ESzmGfbc(RlLv&H+7Z`thb*Fs8cNhz@Da0rZhu8 z{$M1sdRwlq`YaJO}bo) z_3(;i$%?Ao&SjOuRTQ{Y@2#c_CXV#^JA%Mur)=^>_a>i!g1JE=gd+k;@x;2=1lxm% zSM-$$Tu=NoY+v-x>G={dt?y(dU9L0rWGVr#osT;sQmFuVbw?AC`Dc}*odCj<$Y49I zv%#(*WG)BfG#aFGOC&0JoxK0nls(g-gQ!^2@WzS)?`dFj^3lQM+nDtV(NTHS=t_Z@ z?B{8(_cfJ=6Vn3AjKl=WYckivXzR#FJ9LB73do70>NgnWLCMbi+AH3e$-Qcup!BXE zsQl46y7Anu@cMlfeN;uR*&N@g@>42;m#~u5wR{%Z-@HcSdg(d*0&tt&UI=aPK)CCr zy}BQQk}_y2adLtLQ|s^z`-Hrwkyj9BGPkulGTiA1bCy|#S^9*H36d|1)vaikw!rDH z69+J8tROI}BTG!NvsJn2dGa|pd{UL|eyJ^&ew6U&QY2YMFy6x)E7~cdHW?@#pN41n zqQ1*J#3vc#Zqku5aoIa)q4VE2CNI|W_1p1zo!D2okA9iSjU>qgTBMRsQtXt$zG%cz zR38T%IRi8BxJIuG)frIfFFC3S#w*ONuo(UMpx0YwuVeK3L--Yo_TF_pDjLFNhMDp4 zA(in71aULt*UCRPTd?#D-(^Wsi+;Jw2Ajyzf65R2{ki-gP?8ytjX1J8L9k%-jXSS=3KwNzpvQVHm%s%=_uV|yiPgn zKStrRIbZb4=u+-v7_3*sDbXmo4Fn7?Ffas`6h4~%Wl4bEJv=(*22)JR2!AMErmMR= zUKUEEX4^T;IOT*X;sW#;-4QYh6ykKdzoYY1UEoxkMDoW>F zp(H7tu2yObF})ab;2>j@2jN=$qvgvclu@Wm-%lA zED$tCnx4Fm5zv17%>x}m`+UG^BFJSB=H4(X6C3Hq&j@>yIz&?6f?x)VT~3x*0E-QJ zs{+uDm}vub;%6B&9iB_VpSkKmHaofnzA@*CEl=3rZZW*qn`OqdL%ggdjxjzGyYpW& zm9xiE=gP{pl>rqVMd1Kr8LK^NNDc9Qi(FK@GP#(K!oH5lW~1|bcEjuXZjpl7m@r^Zt3x!VCy#R8WB?*BMew_b#V}Ek$99wR|B~gBz+}z!lnhi zGQJX7fSbN8zKfx_!zb9{pw>Zi zQ1(LFoZbW_Sr#-MRFkc=NsV}%oBvR+l}O2W33m3+zetk8r3~;84N_gYxaA3W4E#n` zw02}6nFA(0#fR3X0sKP1RliBbGWy0^vd)@`v)T-4mxz6}{?ay<8MLGxIn0!pf(ftM zE?ch|Y-FJ7`k>*Yy2;cIDIa&W`5x%)wbIK>kZO6!WDNWMmtN`m@XNCdC~7!!`;+|O zNAxpJ580|8zTgq3-!&6Ny?hbzP0z6WV_E;#)nx6tXVl4lU*3v`oBbH#9JgD-z*Z@q z(N$V4bc$i92nY3+Zy-JqlsXQBaDvT^!WtKk6AZqvlWf}77d%k3+#*?q^B-S0A3YWI zSi2ozU1>k*qb(knrJV3qv^z)D^(|2CFevSz<08g~0lr;qMCUju3_Y^5BrViZw* z$@J8``dOxBm)e5$tbVj#fh-M(CF^}P1yqrF1GRmW;=*iF^RcSq9QQj&);nd{m2{pZOPu6qnsd6BkSWfgH( zjmUbk4vDfCaQ;Hs)Oaz^B}7+`z+V$t33(%U^&1<@9U~6#Q?wZ|0bkO}383;0UeHPs zp|)wxy>XOt?gu`nLvxrb)uWaBF(U1G&ySAVWAdK#RI1M|Wl(ZU;y}MYTs6c%>jMkK zV%gzme%+_K%-r%go}j%t{fRE=JcVl7#&`K@=V=xZw z8vZ?)XJUYIE@08)`?G*v>)yEp*}Ws%V_RkPqF>BRrc6-VICqoYqsYnY$hj&+0=v#^ zZzE!1chRH7va-iKH@ME=fLcyDVuENcPp8=kWJOsZJ{!jKzik`KLufyQOzIXJY!>jq zTkv#Hv0N4|%LLOZteI?fUq5i)lf zk^fT8ap%ciCnLyDKpy8*9#R^eoO`L#{!hxfXZwQOCOj#+I7! z^Nr5QtbhmKdKo!B0qi{pe=F;VP*3N%@nSkUp7mbMWU_md0d$-uo`!m>=xgVrq1CE? z8|9y#n=0`DSY}D0Lod4BZ@NNb&GqnmA)F0v=!N1&2z@!xe}+6jq|^6=j%~>K%NFCb7dMzhWERudRnB745_S>q31~ z4`Tq%nTU~Y9iL!JRs~{K)U-lF{7=3P8@jemb#0M(Dy8IC|CA`~{H`yF-?aWKf!$8) zPW#ZjfbmZ2+!oTvPEv8i65U?H_M?AV%CCW-Ht-u5zWWgJR?F1W*S2hFORMsJ3o(n) zmv20dIWYLMv~@mNa&X2`-)Zs_Q#OSYk_C_@0~!QNykkupwZ4R zKKMpmZ4ns;2>x*pI-|c+^!X+JT-pWF0ZKJ9y4t^aRs}&%q8;7`k0hSqFaZSNdod$$vq2AP zCUc3b2S@&}!y6qbLcQB}cI}zSfYsc@TEbz`+8(Wy?oWX#q`X-0sodGPDsRJv@P`C32xFCD;3`fC7h zI@?uljY{1WE`&g%2l6j5bE!JgF@I;a_tCAL4TZ{XKH&y&q}3dKpXHlrco4FlG-gdG zPwzTnQ#DkIf9d(1X+Xlp4@8O~lNy6+eN-OW>D&oEE4%)jWCcxcB(qYP_CtjhqBubHLhn?ktHu{e1~nSJgCn+MzL+rXk$2 zXw1ju{$(;)@_s~|$7^iN=O<44ZhtK)d;GNAe=HK>Rmu*7(MD+}Yz@;yy8w$+yTFJ^_$ley^6A0kpZhI*bMcZ$6jEsF$E-(n~ZHuRW@cttwlpy16@d5^>vXOcYe2i`1b1O zry#|@2Qz)tXtQ1hn2-&B(-bIuCW57;S}x-1H2eG5+U8yaeQ1kpSRl)sT?ZXb6?2=T zsx6EA^oSJ7rrJCGq(3m|3;h)k5_IUb&Q=~TweKtXQ}S3(R+~k_Ut-rY)PYBR|AgJY{BxNP zZ@S}zIbf?;r6C#S?95BXY40``+o)O6irS}S30I73a^vW3Q<*>?mX&uI;tM0L=T^_x zCQ3_pKAKuzkRLG?O?BvWP(}re6`X3`(t6L`&w`8)c(DGL=V#30V}<6}&HBkj@6s@T zeXn~LufAXZe%9vH3{JjiW#CIVY?uWLtQ!p0*PDo_o3r{S(4UQ1&wSN*=5ko~TE}Yt zPw=--gZTl34^|sZ z$`33}txB|?y+ib}OGn)0jP&FRxT~5vDC{8oDsn8^PE?;-;^|a7n?}tyZs<-=)8A1i zS5ovlg!kq?Z2)y_As*U*~oaYzd6 zUjNs53-W-90RF9AV+tJrh0qJT`5Iaaz1!+H{rm0c7bmnOg(IWheu@cb{<^jk<8^Rm z($rI`=p`g^dwOd4bC9&2P5P5i{l5O}zUKn*1iFO!h+TFHY_i-FXpRYw4YOM!rzmrW zY9tyfcym#-t2KJ0scHX)(7K+32(qQqhXQygIyTy0PL)y*EZNJ2owM(}yG<`P1JK0I~h9%<`GK0by%F zcm8-UH7-Hn?+u;WQxZv3+;%kwzuDwO{5ySc_90`3Mu?!aptk8@w);Vg6Ch;tNyV_E zcf2_#ptP#JDVjqGeD|kp@0NB;0HZwpBI*`o*jdb3nK zSnR9IX*VFTL~ekQFz|?u0=%Jhy|od2BO&yys*LzGEJt?F+kWX~k40fyp3&DIekY~M zr_f#G_pvK8J=LV}g+K`P1k%pPkZ@1imu*h#%OhNZPuZwTa=VPi^EbU#6IvZO(i+oG z{Qq^IROPGdKA|UBGV7~H>e5tZhQEnI$7G36rx_(@t~66L-9aMFW-cxlOq#!P5K*WU zXwaw|aScQ@$wq5a;^rpqhFWe3)fpi*>(}-6GTuRYYl?TWdeeG>E^uUrGf=xvb*kFpx`vnA7@02PhpMM?nPRb zXDan5{O*$2r-|9WZoEcATtzfPs~Nor)-lAukf zJ5=&^l;*1~AFDt+RxaO?q=XhfH1J2)H00dYpY*=dYp9(5nO2y_$ijTtg_Xt#P98MG z_Z$pS_4CEz(uw*mw|v@@3QzCRdnpCpX?zN%GP|mrUcu`m?M%z05wmL(nmSr>VJ!t#n&-oZ)w?)7Gs~ATWh& z_9Nk?)z46V+q+Y|0qw)t)$H)U@hWsAQozdyi8<2N$Gqp=k>6??)-C1WKR`6}h&Hv3 zJ8KX3%b7D0@W(CRK2tGZr+?QzZU}>=IGj5+-ntz80nrAGtXt{6Yx4cda;!Kg=1>j% zBqjIViXV7&Seg-F9A{t@MF)6cIaMDOgsD zX75UJF0rm931xXER37rUS^gx9LBax($hgZjzg*H~@J-f=+9jEgPUA|IKAkWVJpo|w0PUFs;kSe?B0 z_qBVm-%Qo7BLQnnVtN=M?-KW}0&~vusgdg&=;J_;@l#1tDg!jsi?T1<{_?k7pLC(f zM=Ei((#irpwWc8tj^BosP5*eN$V1e)+92h{y8X(oIoMs=pfVqc4e0w9+Gsr1syFxv zlSn`LhEAw)?{;DLL<=ZEA2k-_3WU3P|9yVtH7e5L`MMSi5n)`)M5$p|MSFn*G$)yg z+!0_bkP+zmTMH4P#}2=}{pfZNMC_&B0B3;rENq&xxK6Qrag3bogNDTPgjw*WOzBmH z_rw4B(?W;t&59(dRA~iXh`GFCVhYmKRpZuB#^%dpO{qP4r7~dQfC=6=s-zlGAwg*! zuoB)3jH<)Dp@ioxHUT$1uQh8-TqyRPviA7OhzL|>-D+*2q6^KLcs@3Z60`RRx&ECK zq9MW z95C9e2y?d(U|{nR!XE)rbHg-1Gi6G)L{Pb0P#JrEHcoE^+qA(fpK-pR+F%X`;H8E3 z#?wEVInSP5IxxK>`}Vg~%@*X|G!CeHL!V-g{3tmj6UzYT5tM3ui`9`=KN7FeO1cL( zvO3F!bL}H?Xtr*vS)hb-xiQmCeU2MG5WRN`?NW7r8r^+Dj}%Y7Z;%1ksCL)nB$FJa z4j-e+@QP_snC|WL*Zci_gcIqtf)Nc64U)3qW|lg1|ND*5?+qH=MUhC4@|K@{?hcCY zoaJlKW1d`u^6z29BK(IN&$WNMRcotpgk97zM+f*x5Q`0l*{1vZNLn zO}CYUrAtppY*Q7dX<^{#6W^EuZGu=#7I_>4;~G(2K0)qJy)0>=+=V9s0aqq=+qMKt zy-7=P)9o+K0&&6kX=%G|LRjSRkiEC@qX_6X9zoVjfgOp7w<8iie#Hg8^I{QnyMArUt zZH9#`B}}Lr0+a2#%xQLj#|jjES1wt5u9%`5VWvq(XBQkSX66vfuDamCjA?(~sFa$K zu<@d2+sE(xuBE2`$|c}>XFi5v@o=^r;pH%>cS!&JSm*TBI94DbWKN_7j|uKA>*E~) zBIU02^@pa)R?Izf@t0Ce&-KsFICOevnq+9EACml9<9jWxB9tNia6D3nS-z2|4Ij%wr+ zN4Ga}XP!L!F=S<=S#baS12$eIN39S)zy&uELVM!cyQ!Gtbl=6> ztJ#|x^4z;>=crOTPH*T^c%p`dq5;Ag?_E_sqs1cs!(W(-5zeJR-(LY;yAMiK68dt6 zN36=XQH=O&d#d{VDVCKLhsG1@epdT^`eDplC3JmC=((@Gz}U2F)w zUd930uRu8NGqsx71BNR0gxL{(X1MBH*MlX-4m3%6$k)>Fuy}56VW|~6eX`K8&wpLV zF(zMfm1FGsCy4zkYG@}L4E`i$1JCmjDqP(s7|ET(1lh)Bc=bQDr~y75PlpE~F?x6D-`0YrNzIdQUwKVCH)cK_ z-CpKf*Hbrmp<-0L%W>cLty%5-IyLddK`$bmW+2_$Cuk>@PsH2H!N-4zGD6V!o25)g z2b;0cDD0TKBTdKh)C|FZLWvMRGN;0wJ>(@KcIcRY(*$s_^i7!=`(1sLmh9L7CaVYQ zwo(xiGhdlbx=Xw>t2o>rBpr8Vc4TJsRXpn9)?7|u;^L4lR9RcK z-qq|X{J#9a*`}aNO)uBu%P4>$rTo<=Lk?Q%C>P8K-WEAox<3<;#S!NeUnDCZq*B-Hp_4BTJ8O zYH4SMQj&+@^&zs#XQ46dWPNSF-4VH4C_IZ_&(BmB*X=qPOv``X(%*`7)U?DmGF|wV z#m&rJ4ckt~Robtm zVj^y&-+SRb>qT9gW?cj!dJ?Oy-fR2^T}5QfF0eeFUzS%|jFD$$u`i~EN&vQFoneiv zD>WIc-IcARfL)M<<R+JVepiD;;$`9f={2PbeRR3jpOqmA z^Ml*)BCeIL`jlgJC=K2jAQ$NBFHM;}ab`%gIjE>o4s6rb5{VX23Yc{)uL%H@MwqFM zsA!Qqh_09MN~dzpR8;h~dIC?t>_7HoG(h(~uX=v+M&J<|E0r<=pEFi@AO0D|TU}?M9zQ#p0&ft9HBnk}p zzu|SdF{}GUD*8;WH<%u=n-Vg`LUtiaAJY*xivIoG`;2Ru0(xJj(hCona=OwWKL*7I z=gKaie=qIKHsAC{1Te$S?{!`=)0Y^Nj>8JD*s(qnSZh}OTg5%f7nPW*DU0Y!crAgN z=e6QpcRNoIN(F_2dC2_IFn~Z6oC3FF{XJ29-*HA+>H(Ai=MIf^3)3_(ZW}WCn117Vj zPcK@3&r*tG=N13HTQSi|;(`vZWFG3-E3(=Bb4$8OrI@ebV`!qo1lYefqNcS_4YaOA z?zd$2T_uDZuFxhs1{(17PP1i(#L)m7#CLJ={gjWNy;IaIn3SQrPp2-+`!%ZqBu()r zJHr}(cRuDlaDVyT@7D@FRIM(qFJKcB&xd)@QG=!P9tkO{I=I+)$cY+4NP@##RacA^b|E1?C}s8%mX+34ZXWDK(Dee1?{=f zSqwk{b>#D`SGPrYJd03m1cY=f576m5hVu8#%O+$3i=myEBIZigc2ibvsh8?xNr@?+< zhOM_c3Ct(FV7Q?Ns<@R)puIYQ5=TK#jx$jv(4|3!1fuU4sHSPeg?v2ix%>4>EHmG& z6|ogo0q^BzV)jiwRtOlrWS1{ldaa;!xrJcBm9Ubpm!$zw_}B4+*OSg$gRXEl}R5@53N{c zmF0pnV_i5hyj6%9R_oJ~X3`HIW)jTNzyRXCkVL<|16hx<853T1~L$I{cwRQW24_Lh}CL^VZB4C z&zGd$FmDxJs%L)ZH(*ctNMt|nmmu33GWel=xt+h!@VOA!$9*o4GAojGG`IuOo5=Kp zc6-8t&as;kfn`g&u}+$^UzC(ZX~*9Kl;y2YRKlz;`&XcX8$^mzZ(B&wof9JHt_*!T z{Go2Q{lH8Jsp60PV03MQW|6bVp<6vX>-cOc~D;=n+)`po2f z8*MRW)=0_*hROkDHYx1gVBHl#chn`B8&p&dZW2%I3D;z_7548KycO}zbdF4KI z6OHDp_kmI1AH}VSGh89{Ts0QCqf7vP2#)@c>fRH#&nq@|(6x9vHzU zMDESLVc@zN3|@IbGF@p=BQnJ6zMeNshvmI|Ld~i&5~k(G4~H`mUk1*;8xU+MyQ!n2 zJu3K4D#i9&j&;VWZEVtx7|zJ(S)qb+K*3)j_WI;kC@GroJNS_6gV%}F&=ROPH%+S% z2)v_%fzl)%t;E`qQ_`v@>w{rHdv%4niJxp*he$ae$Aq+MXl}w_e=b(K3K9tLC=~04 z8W&OfRc@Cjo{&%Wzj?7eekj2UelVf4bi*eW%goj`VKAU+wo&x%CSD0Rig0Tg-5g6L zpE*nUmJ9;`&T*oEztr|Gc=m3^ z!u48hPmFGT-7Vrp>Y3DC^*GF530_b3;&=AhQ=vqQzy0a(A-1Ab)dxP#+air%%V)mA z6?72`m|l;kzJFd2K?=MLh$~X)GNWpKOzDP+g_RAhcW|ck%&vNG`#IS-hz&F!lUXkT zN8N8XJ22AL<8SNM`a1p@%M_QZc?yru(Ss?Ol(a_TU0nnvd-1bZ1{=jO6;m5txmwgVMKd0dFtw;WQtFyTwHNsh?mTE9hBa~x;1(w0y(-i z2?3)l&MHFV(TGEWZvZvU+z~|fCWe^&x%k5oU$0l~PRhHVtw=eR#&M$1uC-p9tbSgS zU6@^16h#tH-l44`inao~J+8A3c^bo?ji67vF4bo1G$}hGpq_wko_yD?f^MCb`V1~K zB2{l7o#~4@K>`PlK*x6V_5zHcTfu|`yX}j51X3;5u0R$cR?p)dtg5}$pZ727$Hx(I z_iX-p6L6#Ii(R28E3xDCPedV8x-3C4?C%fO9_=*R z8!)KbDGlzntNWuLPSvp_pzpSp0GvO+8FN>3_I?s178FfaczK! zBV(eMk9uqL5F#b%Ov`tl0nE7k`@dMq|4x}%&=4kC-w5fpFFfRZ{a>U7ehwpnCE@DbH4d3G-Bom;4?xcb(4Q%^(@1J=HW}uBg()g zr$_RWKZZEWxm$VLoo|mftY73s9bGBpOJa6+(2a|+P06!(evD6?$|uM|8;(eyqgJf4 z$7GW$E84_>gWpE#UY$T>K(`v@c)Aq;c{DA+AB5qAD0+y=XsNZi&9-0Kx}_ zM?Vq)oFGSSq(lSvs4K=m1x`a-`13FwN6h`}ODa-13qbaxN z>yhw`*oA_az3){6aCrHn9icxZ(a%-QSgcXINrBT@80Z4HDzMO&hv$k}cWp04`M|O@ zm@lbbnXCE1P0peL!L5?z$~IalZ{7vFuX(>hHcl?@|4>vlxHU`n(Pc~7=^deX6^HB~TIX~3b$8xt2L z>CILt;dZbVt{h*i@VMsfB`z%VKg@N+?bpmWI=*i?_kD#bOkKFU2Mv|3Az*%AY|(?0 zzCf~LmtMN0`u_Y@yg+qrK>^<3X1oSWn-p(|n+ev?#l#2#?$;0<`Gt*JxlUv7S+Pu# zY2JYxIpqWMg}#egl1f9wM%)nY&gdPI(oFdm*6(0KbYy3K2tP0*&>b8UbWI|f@G?%x zP6J%>kuCBcG%<4^C_Y|^BADBGv5y#R)LuG#qFCen4Qy+Ny`I_aZ>w7MaG9B?NJ*nm zrcjd;HCv))&S$7_RoL7@d!w#`2$9zy+|GwH5kj=!_52H+lAh+h7Ye^6&f0(PRupP zr2(^zSM;v`GhLCu*r?u*G5F=eD8P5lqaHva*rUw?Di1F`OFnUb|BvFy!D@QHfGDKm zJ-u}maTHS_vM*ILTo=>wfm<~~ncG2h{&ID|Oo~y3Qur?^&NSOafZ}qybdfi*s51)S zZdvavE^5gGG#mO3v;5Ee_KBSJaXyKr3YVKO?-U!bnn#xg)3ZrSl1U&lwrf%RKa#?b zxm^!@EaVq%#90^N-}1}glCkR$E>0$XY?30eLN$QDggtQm8FB2Ufa8PbcLS4J- z?&Kt^w3pdZawFcq<=@FDF8{MO`Z?KxUq^%5NLB2bgMlY3;czYRyt>>InviRpYrAA7 z-tu6UNl5Q;M>Q-Dt7(-z^tCrDZX?5wLYFR991zJj?R+?|m=NNI5Yw3J;{FmhZ4y7# zH2n5@UmPgCaMwp zCr&r^uzh6@%F~1=k~x{d_r%X_B0A4oqQP+E41 z?~@cBM-&TsW|m*imrqps2(*?tpO>9*q?MxVDGezV64Nrge(`Ite?l6Ol*n_1N1Ma| zEB?$qVfJncF&8{bbjH`s(Z6Frj++F3e@RlU5@FY+OBB3oEQ)D)XJ6E{F@7@@0m?wa z7KFW}#A2l=-47f=4*qrA9dBR>vtKH3^tE8cY`ZqIGS5jAc1%{LYOG#84_CZCIuOf@ z00&9{$~3;NpLer?6^Og*tJ4_|UhzTAKcq?`6Z9l!iwbP#`+H437-_)HsLR?(nOg@> zh_64QW7Q(b_r>AqCHA1Hz97ezDF2eBX90d`O0uY3*CiU3u)T^9$Xo_rtT~wt>T{qU zpMU^CZ3(fhQ^0K3ZQ4KY=;!%t({CA5*H7-(bzkO&nhOCYA)}nP!ZR&N`Wsg2%pX#0 zk2m_hYBWvikSOxIBZye^E)mZl!S~9|;x8CE)iP@P2v0$~-}iu0_@)!J)TTN=snS&* z(||dr3sNK6d-ccjZ#Hst`^2%McHK*q9=GN6EzuxD2rRQyCWOOQOf3_L_(77wz4W?c z^$U7yuCdwODJx_;nt=LhXIZHLI0^#(T$@jwHT8K38A_IL4&vXhE4+m3_D0W=#L%ui zcMmr=k6XpBs9tbEt2ZS2%$`W7 z?IXYQZVvE3NL$7EflsViVGH|en=;tjO zSszBp7GwF8&R-?f?IPSGz`A0QJPs(ItYO6C(epdX2Ar+;?QdGeUl!zMYL(_C4I_Ri zT$R_6m&O0Z%J6ss%;eM3;=gYK1_}TNRNCsVhK%ekAd-wABYHY+U77z688>}pYLdaO zvd`;}jP8N}h=7 z;_XKfQ9hdSYmYGul*bCvr>``jeW%7d*oJmyg*HD1%Q`nRBm^Ssx(VjgwazgD;}Z7&nKZFD~k z)gqE%x+KIuMjl4oN_-aom4L-TBR>EG80GZu3U_m4I2~kS5u>IP2x#QlT@Gnwq5}s4 zW@SQ!lqq}AhwIjVrVmVV)E8pn2XV#!?d*?4PUV@7tF8R5B4b=n%J#yPw9!<{#hCx(K~jnnh*gRc86$exeoc zKqeL8?#Oy+?Td`{%zUa~wxBZKWj{b9a> z0eF4Dhd5E#DNPtvB1>t7{lD`+w6QF9&*+Tu`o?;MYuy&sb7;Bsw|$7W>!AG^&8oGc zowtM#MAEnSp17$rK~)H&d#}gWKVPvFnL>41np3E69**0_{&y{?_aJ zn|B8M_AZI%Tk0TDl44{KfwYO7*jt|`#%uSKjnhoQ}A)fE@9uM6Zes4Agg|1ie!!g3AtVii9-U3Y&T(VjM7lj(f>&Vj9zL~&t_wonw(KISZxXw^jR&MDbYi2|-fA*feMZk-gu*XM97Cha_l>=T zJA`anhe-0e%5m1l0Z5JQ_ol+YsS=`1G6CN%TO2>k`(L_>$LFiWV_y0MFaoBH+c^43 zeoVkLw5vIOi=);J%@T71@CLzj(BJ}m+Os9l)$TaZldCPpJ`Ra@0|b;p>NSn*0={?| zhy)FbXpaHQSEJDZk{e|ss#)kVg`v8!-JoqqOzA5u05`92D=O(Tqvu&xk_{=i(i%5I zMi6;;0_I=a)ydJ)a%HG4x4%7Ra|#Hfk>dEWB9x=SG6Z8xqlj%Ui+esny}v)eq#U{J zd*xbNy2Qm_JaKE&Ap5l7(fYKM3)++T8l~W!V-Lo1jcK+0u!+jPHAm^_Hhb+5Ufwm; z@6XHBd*>aU5|-$dMt6C4zU~XwVl%jEjx6zY(fQa{8?GDDlF`{P4+h0$c0>j0N#?Kg zw=eTohLnA(Kk2@uCc^JtRL^`(G)c8%B>a;tXY%e9FGlfo499lsqXccQXQ{9Z1$um3 z#cU8M15H};4>t0tckKTFpg>>0@GYzzq-aR(%q$i!z{8h@(?)DpukAh z;Ln~<8|#=wUYcPkYo7$cKXOK^6ZlFtc7zW0$GwN#G_FnE|wvJ)+8^%c5 z+lYDT!XXsJ7_M!h2vYhKENDn={eJUqRwtDoEbZNpStJ^{98!w5Sfe-thg-vP*{e+DOl{OD`{!ZMoJufI9Rh+eM3|yNm0(bj(n~a?hA~DCQl@cT#dyZ@fHLok z)y>VsRvf%kb`2H<#wx4SrUFI7cm^;~wgxl;M&xhPz!-azOj_j?LR4II9EiKL{G{PHI9(OONku~z1|0m0bt+^NO>SUrlY~4E@`$pECPna3oHbM*ku-5o0|wK1x9X6CHd#4Xloe3 zqQJ=3DEP89GK^i}jA9JCqUsEes!iCT<&eV^ZCqFs7&rqO=Xh{~-XdyJWbZ~}q%|fP zMvw>@Mn!DJ_UgoFOza#SlrdbK8lRdO83Y_+&8o*3bnAP z%{N}n!pY*MhAq;tEB%X?wl?qPe@-_V7!}3;Ae?O&HU>1{Q3jU;Ljp!P162~ZZjJ~I zuf?}9k|}uM()0Mt;L>vaeI39si2}nkLfoYHJB5aB*Gp5XG9xFiyW(6z6mj4XD&|S< zNHAWWpfZRtf&~+wZ%q#+7}1_0X&8meu-a0U=$j6xmcTi ze*Oy;7(v5@+xa-Pyb%V?+f)z18M4MNRoAo3AkINyLDHzgz!<0Y798*p-5)6+>46Fp zMrvu+W@i)>%N1=i3Ul!8iQuTZLyPp+KR)|vEOLzwU+RBP_lg0RTrRLj`fCnRLzkrl zgGwQ9>75(K8^D0VF!Q1e!z>h$t}9o7;{6-4N1h3CuO=UDX$lsF2Blhw1;+&0?2KbO zvN4J^oGl9t({qSvfU)abAyE-wY9S57pd+vk7|=juj#EfDexyg%zvj~$V&-Qs5 zr=W1nhhzrHW36?;G7Oy2#q@(=QgeneoTsLdDM0b7FZ`c(Zh%6EzWCu^?x!~12*W&r zg?_}Q5Q{5wV`^UC1O~lbmY`TUdmDzwmof|#B-$&^5D?|;f`r%BCSSY)BkEMKL9PIY zcAjFh;_BT=)s(^*0Rv-XWxDg)5!T4&0LHT2AI?ooXbpx-gkr(MV{QFEdHL*F$EmZu zy4cdd*|U92d4`2y)MN~I(4D_&*lO}fn(_||!{7}pfN|r@7rp?CFvj3VA1+=`6k13l zjLk0#Au9H*4j6?6X(MuYqS0WCYMipPnJ^%Z#8pqu5Q~Ls^3{u^AweU;iUeb;-1INQ z(58v{qo;u(8rAlYH~)G^FwXX0?mhea-plJ74Q3er#{zG#$f0W4*4q<@#|1;V0v2Jc7^cvV;c!{1H)J(H;TA`8MLOa+YHACJzxJ>`Ce8c|9gYSzA~T_K0?z*#u( zv~CPu>etuIf?kG`x2LfYrFw`@z_?)``rwb3Xwr5M-Z&#$oO$0c;H2!WIZ}cVaZ05$ z1PeXW5{TVw35c3`8U{3ig=wU$;q_UF>K^w9KsZC$mRnS^y)z`Ls*nIdTU0_?bz~SN z;TlEh%#^LZBV48A0Sk@1OQ4Vz^z~LYDp2T%obmtZI{&A(uQT6^MUsh-%NX3kLWYei ziS!Otu@sj`whTCYO+&2WTVyQkU^-)i*){mvD&w)iC2`H&xUQ)aOs-KT?hJK)=q8=@ z4YBu!o1L`d_D+YpxbOFKp5r5x^sR5$!~}g_dOy!O&-s>J`|`_Q z=OKcLP50m8rGCJ^|n5@Wy-ToBG#BkbP&{LTWeJc@spFWeVvSQbD3?Z?a) z3kXs!N-gIJLuTP93W)&{q;&rvC1I3xNkiqbhMC@!Ad6Og)3V{S1R260jUpB#pK)pC= zpZZukAfK(|4GW1=gyAX&fB_n@2o(YnugJtHz`%UMvH}!z25Fe}EUi=+=3uB|y9xpf zs+fjcbcImhmp?(= zD0ogjN+C3c5a83V{~88a$Vdja5HT!}F>YPI4hn(-*7)Fq3m4`En@nVWT z%^B!sark^1gGA$hj)KL7SarKYlHPdO|~zheRhvDb7BZnd#iL`~r-z3m~Y=moF^L&CS(Rba|H--`}_I zI@7md!6mN0)25V78I-bE2Lngddy8OTc}6h|IrTd=I!r4q3%}|k z0KV`GTIjD}*y<%=xOJb-8%kq@B=`UYN@oleB#XFrvwgpg> z`_&pcL6&-KjS)p5)=&~v28Gk9?o-AW9-q1*;un?6`TMI6Kh^wAeS$MgKKbKsOjttl z#)I`IctQUP0vp1B5T=;Dc{0*19-sb_!kEK!&9+b-t|ee>qA`?3F$_}>bSMg)Q63Q> zvBxyJ2tx`YJBn$DGsZ_7Bxg*tGE%8A5_lqvFct_ChH_#+IoxhK2FT=l?|* zAKJJiESRZDLjspL0?z`2QRx(#`q{W8idM#wfA?U&X+CEVlf`KYp$- zv@!LkUx^KH>7}p2C zPDYwA@cqIh=|mW+SP_gIVHg^&HKjQNheble2vlkdswE+N2x7f9)F)0Tns_b@aFcV$ zcsH$JPvM*`fnoy{c)%DGNf;XT1eFm(LMVvb*}jA!V}+O#2^P#43PVZAi^4#V;+B!z zW*ak}{}b0+df%)~IT$kSmJnpVl)QokgA@~nvBvg>9IAS}%#!gUp~_ugamTPw7%&E4 zXqYPUg|aAyAv{dmHg`K^VK^M>3?8LwoG~G`APKT)#oxdikk|keWPcEeQg4t&kx0Wj z!{HFQLtvaU_$)LuYp5idyWA}-SV1F<@US=o4Jm~IWq8kIqS2MRpZ$mDf;*iovnHLE)Km8mq{#{^v`o$kGTIXP(F2yWS1j9rut=MA1+Ar^b1S%hk zi?U0UOh3kh3IYZ=-FGn1`F;RnoZVRrgB@_*U6{ffW_yn^y+4+12}5h>Zj6a3BSmB6 zI)MXO11f|;jS>dMo!0b5GE5a>3W5lSHB9vp2H%H+5d;j^4JVAVz@R+VSwm8HLDJYi zO%xQHwkAwvfuaz`*>pO+w04&;bZ7dzk7RgGXs~IElp!o22ZOT`5TC`i%xEvLMi6q|u+EsWI7nmj+e0I+bt|%Q3Yj|&YX}Un2Az>5 z4gXF(%zd%SA8a8K`9$ztx|5O;9AA;-+7#9fRK4FlCu9QHA5*YUd1}jqk z0T^HbV~~d6a5>U>!=_0*bO(4wDKpeZ7)pUJyLbNxEC@rLK^UC|#-P#=5WFc0dEuSD zz)f)wMHpW&Pd$QLq^SE4Hu-GGvewC!r%&6I)e>Pu&^+2MW&{f zme#)b5>w9qT{hsp`-m(^L;HASQ4B*C=CjkmuOxdfkOeOJ2aDc}ID?nizzEe-z2b1?l=wf`luplhp48jl^3L^j*U8tphY+&GrO7>nl ze0a*d4Zu(u&J~V@gMl9uP#AEA1}ImXl3oS{7<`%NWFvPFQW$gwpVo=K2!jDp#6g4J z!1xDX6geYkKFcby# zI8M5{5`mWpE@ArHG?- z0#Y1=K^h7}X>2Zp0qNV|Go6G;E4yBaEzHb+O&N{`(>G5{1PwM#^anW{YqZ9D+&tv& z!_OA)V_J<_0f}W9ro{vSf;`a@UOHJHI88m0h4;*|5S*bS2L&`jS&vwQr~B+sYbXmwspi{+;cz$> zcp?kjRn{3cXo1i~u@VXE3|%IuD6BEGXj{xfGrnoyZuSrc>JJdyQA7iS3&9|QRIogg z*|_s8y@8bTHegU^LF4Y1T(PE)oh&GlC`uV7wD1k^ zNw|Oo{*kuOWsQ%8(ZWa-CI@_&(8=%+28Yi!W{|%L7L_eWb!zD$cin#U2;QJT1APNd z?Bvo6F$Pdz%V!>Wg%|9@{qWIhgk|KNnTYQ;hrPuaOD>u59RSApZ#@0xn{WQ?XXt6% zpU;aa3!Fg_hu^@6I39o9*$CJ;l>&{&joYmnr2s>XQD50fB=s~!yKx2t8p5QA2eSq> zAv6X%Eemez?2hdai7^}t?SSh;tA&I?Yq$oO2Qqo1o70>D!k0y>HX8{D42)GVN`dU# z*Y@ywsLysTt*#juAIS_rByrN9IV5lJ7&x57{udl`{Fgrh#>0ne`SJ`y5-LcMQWOK} zjk)0h7(sziy6=ZSeER7hJpHr#(kIOD-&jqNgwi04BCYF&(;5k54die-gY8;n(a>yi zMm-LUR#()wL&PvBAlk(quz{0dfiQ&-1_+Ns6tzdKp?icl9Niy_U*P*&`Md#_jL@9bx>BH^E{tMo+p;;OKA>ondU@6cic` z2Ir(Z7)paMY6XUMMrnQhpt-jT3}*{5#*rcx8miz4@Q@KfaYj#%IzvmDBI^t-Oi}z$ zPa)=`qK^JLQBbB}y-}yvD-WU|6_UXF^h3sA=QfgsO&BCA-pH&ySXsdg^3N9G38q`L zr|zH}Vs<|e7CfsD`tzfet}OS!(H1}^RxyX6rOTK1oro!nJ^E?Nre6Hv({Iumw-y$= z6b4jijEot9wGaY9m7`HEDLlxw31EN*C$iBO0wX0+N^(YhX(?zxrS1Z4U_TEm{y-Llfzvb|KENs6LH3e)Q5iPV-qL5@ zzkGSqHx7gp2CWSRLS;Yv0a6BNy!gIXSvVN>Ejbq1pcCGBp*Of%!@<}J7Nnuh*xoD| z92DBy>)VS(9Fj1Eh01sX4}%6UD4=Ks4AYv@nS+ocA<{}K-whvbb85hFsfOmut&j zFRvbdfp2LRj)lgb*!TR?U)wgEw)H>B-*u%=yome_8ZW+(BMZJig`q~z;O3Vw^XGawr!3t*4| zB{@MTa)*Jh$gCF8tZd#%tFQVN}iM-VatP+jG|r^Ogg zzgQO9sR9a0T><&EVVi{lWQbg24*(KUbGM0b`H`WZJf+jWvxm?Useb zQBM}UTUi_ggSONW=5KX|44zAv!pD;`wMvx^&S$LrDtsfe(*Pj~%^iiN+N@=4zQ4#) z`6W!4=4FR9u3g$#*m)FZFxsFizOuad0b%U=$-iv6ys-G0?9qir?OmgXi?tPIjSE@> zuG+X14R1O5)7OumJdq&^)@=zR)YbgFF~$$Rb4oLo7z3rj5BakU$B%#9vY?|d&3X$2_&dkCWc8) zQTbHr!-gxQasnX+p}{9t2E|nwYKg>xLpXC2emJ*>zF=)d<$z#(BcETM|Nh+E)vLRn zed4=i=V6o29(?qOTP7%reJ>aoU}0cPQHRqx!1(FwClC0iNJD#Zk&0d4dvlYdjPLps zhMtH49=I76kcHuKV!fX<^dCJAQ^N+v6L1FPXpA>E;K=UA#zyB1F$q0^Tgj0lCAjsh zbH{}1g2NLDk%6J*ft~*KiWy-@*dBqb9~`;-bcOnZaJ1{Fsjp?kGcpw98pd<5!{Nhd zj}>*~Ef6$pVv(L4-ce<9Gfy<~`P#ac7aw2`D()wOR@CDAyK`RoU(>8)A;y?W`wj?< zEgnL)Eb3~Weg4f&r19d85I#Fjc&k?ajKDyIQWh<^QD#<=g|V^F8MSlkXpdLr4q`YR*u7C5qliEEeIq1rm`f;x^ z?e6vjJVVzuAZwsIahNT9MWHlo(|=>IDjqIvYZ$L-8%7!U(kZB|ZE@`(dm%@!Uf;4U z6^hs?4PcR`FQ(Gz>~~MT{?nhH+|~^|gdt<4b(LR#ev`oXhw%u088tnAIW-1R;4Uy& zeG(czKH0;biBR(j&%jb=qyz+wQO&HOJYbD_z-Xi|6a<|iJO;ml24M&aPw z6P@A=hk_p$!mx(uEr4Np_$m24&zXvr`S&tp!^V+O#vhG&x?4Q5Z2aE6YfI87RwFof z*g&;2*xl{R4$qEFSIP3tu7$7Z|bEY5p3ruQeYtG6$| zv=r<1Rg}%loE{Ev#&i@DL!*QN6o3)+edpxy*H50@;!9f?0dHG1SP;e&!vQoo%6AIA zrA$F%-JRyls;no=0u*5MK!6c3@lf962Aea+$G79!pFe*d)<7C343Wti;9yE376oZo zIUMf@3_Ov=J5t1DMXSA}q@;bYvq51v8j)Buzr4H*0$yQ}CyP*TDAd~<3gDw;X3H8F zU}1fK)<}E88NbI9$>*by>FLRPH->^$_mZr1?J2Z|dqxTmOecN5$(z$H$>a^3#5tMV z4<)OjOG}<x5C}E0+dX zI$gd&+Qr5gmIczFT0@F~iG;u?Q5ZtQ&&E^`AFBcwa0c(y)ec6dQ9Wzt^@E)T#b5yo zdf_n>e2oItJ76K|Y%i%ODe1)FpjQfDXpb`z%df7kE_cBTFhegC65&%s81jqm)W$7< zP_?&Yc9an@wlAL@<~240O#;t6 zX6IfJvzc3Ik<5mXkw6rwceT4JIUU5`1}|;CbZN868E%e-qq39^Bqx30vDvEWdj`gI z6)w?8AiXry9g5Tq-<-J__C^#2tQ*be^8zE*a2haPKlwrwNrCeBHeTO%9RiH)p>pG; zfF}_3^D_<_#G$PdvIx-?hDIVcNM`^>Oknt>mq8e)+K$s1q)`nRVhzjU&?smWfH1c~ z%R-zW^(X@1O=Yr4y?_vX^X~yeKiw1)pr@*@th#9wGv%<4@WKy)d+VME5h`NpO4Xddk+UsdflXr90r)6YmJ4_|PTZ4zn*v7_oRV zJTMy{Hc=`$-4f&l!DSrs0K)L(iGkT+UnqhW9%X=}`4l?Xas2nMpWNnKB8)Wh-L6fW z#2Nc)+q{8DI_gg^i7f&V4z57Kp`EFdnmzC591C%S6+eD+kL)*-vj7 zB8|;_7b2Maac>sJkO)QZgJ4fxC>E*0b~_$qObi;W#yrz4G5!ZASY5jY816JOh$Mgl zLX^r!Tl+^(oH!LGi)45A2tLDvkpWpBG=A{r&A2bi48}%<<$;fVsI24o>%afIZKnW( zR#~0L%1R1Rs?HmU<|ElyG~!|Z(;lfka$}?%wx9rl%f!f{fiT+Jn7|pQbnPEm$Xdx% zN^?dT1QtSLyP+}4v!ZcV8b%JoIuy_0cI2Hm%oc526)<7c>2b+h7FHrfBodWPyASRi z%_Y$A9@3dRrt585=_rbetTFr>ss;uoLW$O%o_G?rz-56k*78+JpPbNn4eeFHfMl+& z4l5j181MzdO=|1diP8Psj%`gC7{oyyQQQ!>QcoTK zJzz{Cr4z>T_s?Jd$@%kuQFhzw#ed>y4IuKef!*o}P#(0L`9`^lvMwTi+N`Zw7Q`)g}S;9$DI6XlWui{@Q3e52o7$kuj znHls&LhBsGVbl|Y(hCZjy@1O7T*_o%d<(XaIrzpH{=lVs$vCFzgni+-4}E0B3&2?N zAqxk%HyiuZSZ_uidWZ%G4%29yQt32cczyi`PoLO2ImttV2&0@mp6qlL>M)4v18CbG zOk|PE0mB=Uo9U5y8@3U~QwO{PBfm2DFIa8~7}w92dVvhF62UFVVgO(;TD2s{rUTM_ z1=~;$7RZ*A_$-Vf78}GERbU|nblb884#J=_s3u5Y7;9)*R;*Ek;SJpME21C?_W3BY z`fLI)Otxs9oov;)DfsIKtZvTvJV+Yc$I@*VZj8Y^tP^~s$b948Jp_Re4uI_s$I`Nh z5m_KRJ?+VMo74Nzk-L<<^!7QLLs|@H(-cS$23UA=1E){(@WuV9{y3&f`PhVA0kt0z-K4 z&j2`b@7|4|Kjuvg^oOegxV8-DftL7WcWd|Lq&a&QD=}|e!cYkCNqJb}J=#RL<150r zaud$z-@0{ge>}`h2C%(Id@LSfA35vme|e_kN@u991T-MC3Y8yhkEh{4$15`(Upu`W zFwj4m$F?rJ-hY4B^=B)+y;+Qza=!u{n8#oREE1o*IqA*E;Jem%cvzZJR&Ck?m%btk zA+kBIbH;guDaI+@EesH9N{KbtoDvXE;%1D2c{znBRPqNq?Apndv3N+%;QtpXIDG8l zK!opH41=SN0i(x54S5s>OXTKAZ-oJ)pikvV&Q1r)GttCAUtMo`1}K)&k!;KK>{xOd zyYMpfN@J{QBoK@GwPDHbLN9yw`Ft$Wi<(R6m5XCrQ{!6)aDa7R9D5CTB9Y12Vb~*! z&+q7!nU0qyLUrf`)By>Bl;E=UV5Bm4uw!PX;~%!|US6f zZL!;4@sl3zpY8Y7d3xacct64`+O!F@qeR@?h@B~-APZv*XdEn1n>tUGK`u;z1%%E9 zV9*#1I(}r+H=mS+;h|ZBG#IAH!K_n8m_qxz916dC@nA{Fut4hpPl*I;He5H%p;$A9 z#CUJT?2UjFn4X;u#n8c>jptXFq8Y}D7~<3H&B>}P@J8{`$FtX)nCPj~YGZGNfrbyh zgzCHk<4P^Jb!ysytpeis1wyTp@lXK5kOQyyyQ4iNJtZY|C3p^nN_u>WFviA0B|Emw z9G}^;<)9ZR)|R(FaefzJlx?q&9-}LUASYt>5-NHDpFpQe0QNm~jh-NW{@E{FTK_1&eNI=hNO~iyLmd=^JIc3MA z6Ng6MMPW1q77!@OA=DoBPc4gcMTe}TNu)5UW+$`x-dK0CC5kW+jpBJJ67$W@qD;uh z3mEuxV-Jqf&Nl4BVK)xqYgbnnzAOPFeD~n#vhi`emn`ESJKml@+M5-8_ac1z`rbcBWVD}cMgma z#?@+~s6Ah{BiAc1IADyBD5G5?2z?&p#CZSg*x1%#AKqRI+PtkjA*-HjR%Wufjgke1 znZ#C07?e7rT3HATu%IzSPx7uP90|vQLONjuofAPBqDFE0Jzyj}kiaj}56uI8i6eEcvj<&$IRE=2qi9grA8!(H=7=jZ2- zc2!i=wAYtn)VQLnrl#U(Ma^I*S(LPmpFTZWdb?pf1sK$!`hfu%>+wi|dk22KvOzin z!~MR&&fMd{%24jL4(K}v%1{kksV&8w-0w-Q9t_ z1ZW6xD&IXe3m9|;VdTAa4fFGjM*)KX8g^ef(@@`dw6PK8$kK2EEJ8hPsnb`+a}DDL z#z6n*q2`0Bo>l?DN9y!U$8NwVsem_12RqS@3{Ut<>O9!{?8LT?r#iMAI5EGrHeU^A zRC5q09Kt9Rn{0d#1_~)0l}8IK+`m6HaEj>x*B-40R;Af8%NkoK3kL(2f{Oxd+ZK0Y z3`@hXXr?998MaVf2!c0b4cz%eZ})bg7;L>pI6RfASvh*>`^%uw-d_3E z%(3Rm(wh33n)>ESq>&IZz{J4K)8lQqwo<_0KFOn_WdpfzE1i*LEwAB)j+xU9T_x=m z-ioe@_IixSz)|h-WcTK4(>E_Z)v;~M>6*0%bLRSh#xOdcC`!e$J*&&htKJBsF=AAN zr8i$)oiD-hRft_jQ@kY$XAHXswyI)srQwayYC=F%7 zK-I~mGNiG005m+NgVP;17V(Xp7@wW2i?xOr zrKoJEWp->fIXl~(U(K^(!A8?)&GO1~)wNI7W8l8>%uL6#m}*qtSl>|D+0#Q~_QcV$ zO`+e_klMRr0DD%aD$7dSe6jO^YdLLbuxC$)+`ieOEF@KTfkw*lmm~Gw>5?lSa7|} zsPrjp0yje%gdw6aT*e@hLx&1cs4p}|k%g}9!_|i?P(?r3)U?-wkcWbN zh!bRiJ-#7@!Cy0IXA3G00|VPOr!Jm;ZR>ENDp{BJ#^7|;E+!F?p;HkKY2?|0?HaGa z;9=vLm(Nr-*4H08Hgl%26VoCao~-OdTfx)f>*+szbF4p?3lE3ofZx7`zMMDYIjm?T+oD9jRO$`;_^*zJa|> z?G^2VU0wk3_9loTo}5G%2r-yLhWRv!P~}#5i%NsOV0Tdl!L>St)`6ixXYAVb-z|(M zHF4v?EB%JRz^gWEaT63)vPyq+6g1$90UY;MR(8fCT^7K2`IT3`!TE~7aVj1M3ieo) zhI&_FKx9E@48JyWad%xSdQj}Y;qqmDrzXe7X2D|r{$VfY`y*p`y$ysh|IAz8E<=E- ze0ki|$4<#xe(k)@Mwbe3%*HpAu9Ict3 zuW7_wr5;XnVv*(A?8R*tw`|!mw>DR1rZNGBuP&C)uX_72QZU-r-i2Xi#5Hd(=0)|Q zz08q$jP7Du7lxl8Qvr$DS(Ai;6 zwi}%&Bxx$tGrS)ymDv-MvtyH(PY?o*d~c|0zM*CwG`|1Vv6uH&wwIpiIM!6zJle#< zbAm^>geGv!X8V1u=x^>vNhH;f%JmF$U%ikQ0_4)|@4j-Zto~?wDSlE-DOhv@#^%j{ zaqjKp#ckWRY$;n=tR{?SfFsq==Jg^>4)$Lez)Gr;3N+^X!X-UmAsO9Y9yIF_W!r5t zJc3 z;NCL_J!h)H;>qtn_w|{XuT}3zfkqsv8rGeGHBg1JS}>#l143+V8Mt`yN5jL(fp|_j zadmB_TW?+*J243*S$>7^(XQyq85q@P4mD#f!y$Aqo0~@uvAC9#d3=3i1O2nfM60i* z8~d5;XvpEso9(*^bQQs_6xFFSXn)nPP1f02(}@BWeic-_&Yin)^Vqg6+vZlTmX*;M zSK*D)3NQZMV0dsMoQT(XTN6F;fpCwY$jHzUm$r%g=8v34BC=b96~K@)P2h~CS`pH> zO&X*jEW{RvBt9LocT<2e)=)VfCWawO?FEefy;n{T>^<{M&zXNZ^du&jJo8q^@u$iR z3^|HGV3PF^`U0uuI7eB3qG9_vtxZ>l#S7Ps$#RHv;w6LvOt*PMO|B6 zt~t{&^Hx22iBLs-O?yKaV;%xy&z_O7o7=X0cV(q|H()T*0)`jr8qL*(Jc06bwAItg z8Lfd>8q!HPcK-}KNJAwP?R7Ppr$r=(FD20KX3pS{h6_`GQS0*ep;vJu4m`0$NEk}P zMJN@Ex9r=RW-VZRbMM~0o_~7w&@;_VP5+;)^ZQNv%=bJE{>ESbsC^ckV;6T5Q!r;b zc5OnyG4MTxv>1Dal-egtO&ky~YSs*ji9;y}dDyYt%y15@j}TiMsfyKJRM{)vSm`WM zZgSD9m2Y#Ai;<#8x!C_=-|y%95R%TvCUM%v#k~0Zcs{?L>nEXuDfG+XN6}mY2F0*R zVHD2AO9DnpztL3mHV1MI4FS_){46&ShK!CH3l*@~!!u!oXptz00Y7V$a{AH zV|Qm~cY$^)OBks^doE`O479s$1(xhuKCHL|i!B=+4s4(;Xx!ZiogB5-*0#^jCq{#q zzvA9e>;=I5%`jjj+yCz;HA??Y8njXfUvY?;zKY_?m&1ch(ryi*c*sUwR+>3E+7*4+ zL2u6i51odALKFf`7;to{tT8jaE;{Fo@yjS3hOTD{I` z&_od*Ua-h0leUZkO5w0zG5MZyM=@s0J12L2+4XF8S-@~rnu~#|fMHf#+URK9Mej{Z ztxSf+B^E|MV5~ixS%do?ohU8eF>Jzn5yo%+$56H6R$sq<(uLvEI$;o8M8RtiEKr2u z`EU5~;jrGqF4E3D6o5e)0tX0-J920iqN@dSC>e)NV|=^^19s}hEj^t2%fek~gb1O) zLY7?#L%#n1z=F$#VWPwlV?ADJ0mfa!y?X<@yMS?NiZJ-L0t~HK#M+NH@f2%1R1LDB zwc@1DCqG}c#Tu0$VBlW|b;Ss3s&lVU@D?-h7jPOPE)6J?fWfq&$b3WYr+3QZ^Yhv| z@{uT)7~*F!n-cRbZQ`oay<}^k%d#*~gYTMDLb_A)Dv$K`OvSjnG3Wh#V)E zFqn}+(L;wJk9@k^!$E^Eq!0##1SAc7Md`uNagYUM12Durq0o#nU|cqQb?MTjUBt`- zQx8I(ywRvp2!j`<=s`Yl2pS?)#G_b1`Q+8Bo2wgVtssvVH$@5-DQHK@;V%@NMKNHh zPy`G>2=`5b1v4Kw;w^5#PR(oCb(lj#YEa3Yxoig4KFf+&4BMA&x|AjK`M~2)#R#J> z>}XwoX4*b)<l-tlJ6%pi+mpEh2@szeKKZ-d3Z9JtzDHNAHwAo-r0->xMDM#_`a9 z?f=*Jp+@+FoMNM(F@->=8K_z6ia{Dfk_JU#a_n6gU~yZTDaft6;&cGTz=OY%07XLS z!H{3ey6Xp`DKkdO7sf8l>aG2{sNy8psoey)8gn=BISSkt;&5*9eM__R$ zeijej1SOG(4I7Qi8p5ePP1%&9EZGz^+GK3RK(!zY$Q|0L`FTcdxa@W_fYuL`L(x~l zpL!BTYP6KG<9c(#pmK=6dwK2FhcC{J%M+OFUAzyc#(h^QF^uQR?VTSLAl%yz7>P}= zc=ZT})s_9!kT6v5qcRT{)8FO5-@Bswb3mYG=)zcDpip!gEC;>= z;uT$0Sh5c)i`w#gtBZG*TaC1W>JVX!IvhshhH9M2=gDGFhXEr4&B)N}2p~*E(Ew*p zc24IvvMxJVY}xE*&A{;HQgvUj=*zg2pxqUdEFggSUKnqE^~Ecsdq?jqk_A-C3@?DZ zI5O-7-?qPA2MoW3g?vYz(ilHxCiNg;C*nVKM^(kIEnwVTw#>Rw^&nUss(Z2J$ zyDwh$Ex*_I9`pj=11W;Tt-+xsGujl4`H4 zcKYA?*}Ww-d_L{e5Z-o5Mn#H*0STfcq!cfq&QC_Bk) zvXpgfY+PQ_v`V3v%iNVQGs_DdsJgzvK=ya?3*z>Ca*Pu}SqZTkuZ!ocQVW(kp} zH7s5H`3oN9ww8w3<|}q2AbSASct`XEG(}<%LKKn(f9H|}4ruf=1B#&=Djf!t0w`o2 zy{8#q(St!8f`w>bBMd5rkPklk1u(uf{7>OBAhV&G)#uw2FiLpM6})s1LBpm98U!Jx z2^V%}%jJP_z(5))p=Dy4S{}b#IYsh1&o)dZP;{q(K0tG3brLMl0RUkE5kQbfsc5eK z!T#@uZN~JOiyb*G7sCX5HD-rv%f_6s7-8_q;MjfH)NXIImizkdh-wR~UxOGkM@!Hu zo><4XS0@av4uk~H`&JQqV=_6_Mb}llR@aug9U5C*XCT;VC!O#{W zqbb6;M;NlAK@>tWE8qw^ZW}-k}o{GZf$Wz@@np&rTy509`<$zl}QM_LAmHSLQ!#m6H)wvnyc1 z1}yQHQ1+(-1`C3atEmF^_2faVu>bf^f9l_IMd7~z@8)U-{FN9y1uo&&kV#k74Y7L8 zwB5cu^YX=R1F_qx*yhKE%Ox?paMhr!hTA?%;cXZbZM2%cna|xi#3@x&?j?-3y|-?n zWHc+Kcl?$pSkB02vlgF(K@8LkT{Q#@NrD+e!uSj{KD`VWq(K({l^_HQTz}k!p$Ajk zg)Ta&{%ANk+4ZO!_=dCSKWa4U{!HGX^u5BNmse5PlqKoE6eIivOWAAN?X?@@H?Cd3 zBw!?4&5~mGr!DAQw^YhezkSgrs{@3QF$3u&zSXK6vqtj_FC>cA4szb_u?p;Yy@Gy! z+u+qlwnQdaDmI%)6y{<0*gY@>gTB=9NL%=9x@VjYGw`lV_}7zDw`*gGf$3}`aq7(Rq%SSVznYev^h zkp)pW@IhJrBc_)=g>n!EMS5@$`R>+t62&iop*wH<1{SP{e`h$|IW4!MfDx%3)M|}F z9%a`sv*8M1Y%cNge(Gt-2yZYEMzyZ}_h&Z-#&2A|bh6W^M3R+U%gQ(o>CMhn_vZ^R!U~jKf^6QL8J{NO&uD+*Fas?R7f-m?l_w zeAg_Ng_-mA<@SrVx>GgjJpS%MDC@9no&ZEDh z8Qpc)qSs!cfN*~cC4hu2ytf?CkcuH;@YqMipowDtno0Z$7?eML`WelX(2RdVdg_)Q zNJ$tR0$@Nz)gTN`2N-5gcXleI;RziaG?EFfN9^kh;#n|4)ice*2vQMW8S#1kq74|= zXXoawT)EtmNz{D6g)^?@zLB z&Q2xRD)#Q04fulP!Y+(0GZN+g+SAHP|DV3EBImCB{OS?@Z^c9@(ah6CX_^{Mr_)j2 zhbAOIwr5Z+zdNp8_E%c1Tmoi8VID95Q^Gr~5qD~qNIk-M3W~wp7#h%FCkaEZ!pK%5 zcn&5PF_=ygeDJu}gE0uv4U__Ru^0dgNM4E$B505W<*R{v*Kc)UP$e*#ahdZOoU)`3 zmoV6M{zg6^iC+*rfkh0T+=&hpq94?NNQyuBh98SS4JD|Jzf0%AU& zyNRh8W|zz9ej2K#E~cOwcCgrF^s7wbEnN~m!w=0+eQW1f^0EfE0lB+iNw%WtRyt-c z0fl1Muiqz(jL%8(8wM! z3@@$g8$AtrKl}Vf6un@LJrP*jTvhufXERVQ01Pyb^A$8NA;QJXGknJQj(Z24V>>%4 z2F+Z}!lKP}=AB060CE2vmz@JnpG>FBu;&*csjYrJuo;%OmePgWWAy{5271&BC8$MU zQ4vL?$xO^yjmLPOQQp*k0Rz=u^ZDl&P@tVLwaO|YJ-_AviG44dCJqISrA*#mk3Q6PuTiw)6h-b%mM}wjLCrnR6z(sZXxZl;Gr9)RKQ?=jII}56dF<7;EAtirKlJ; zKmsfv4xaX)8-Q^~Oy`4$IA_RHHw84_Xhs}1DvsbbyB>#TfCXUSPh51LRgGSzgYg z;MMJ)~GWVS{2vTAu-@GxZbKN*fS-15h3s6@AY5&V(81CzZjC`OvCU+ z1f@5_vj;VQW<@LHoIx#q=hZ8_E5kBKJkiX><9ns{k;UWjT)V~11*?;<;-93|OYmj0@>Tt!$hymh46-kl9QYLI6W6BqNkP^~n>p5Q)rLi&uxn zD1-q=MHZw%9{nl&P;W*~_>>TG>8U8869{G(1&l1z0%DOYV4^$_dD{ExD+ac@1J9C$ z1D~XEpEShADY4px*;}a?A3-y^GLLcwSs+OmzteXvq>b$!W^u#`H~}M?&)7}f%RKlsO-EbFWHRkoP~$4jE=GKm(tzR8XOrl+-=qcMxaH9z!z!!RMRDT> z{RQlkhb;I>JB7$roHK|cOX+%nKO)3>pclnVXw>zcWb)JC)knHzN`B9-bXxlm!gyPBI%nI>HdkrQx5A+iij4{ zg)ye4aKMX$ zMG+7{AQHKqw4%+EEDA-2P(L6X6aavL4^ZJ3V?sGa%cK;6g7K_m0ljc!rCvZWV4-B8 zRqfHB>!6tuqN@gdIB2}JWcae){7)1@H7NJ=c&ddH6V@Zd*#3-Icp3k#fl5JHftji$ z22+OpoYx@2ZdzR4RrwfiqktDrF{?q)nLBTFyF;}p_f8!Cd)1x>jI(qho-AnbW-i@q z+Id)kVvMEwSy^WD^P@*M!A((w%8U&Q*n^v~+JSp6Y$JkEh{|l)(a0 zh))l0A*Q~HRM}*hO`Vh5U_lx^y%0kgZ)ivuf`+tHUCro;K5_Z&8`bD)2ESnAS}T4Z zW0v~)dwIcdD8(EXFrdBO++$z>3&<8eADi*a_gyXrY537cFm82Eg+f#A$~s`!TRX{Q zy$~-{(`l!(kgJ>t7@I?E#{dk_V6MAwby4Aw3S(iz^qzo$deYfJ4FUC$DN^yRrIB^4 zxTDru(xbCLFFP7Qet5tC;wNa>#h8t0=DZKJEORPl-dZAxeE}nran=E&&LcQcB(0VD zO6u_Op=3b?Dk7yin*0K1}IRp_wqS=|NdZxDajv z1|+Lipc$Z%Mw4D9-asRIy@`Wbq3Ns^n$29np#;pZ0EF>A#`&kG(W}7@58KU2!_we1 zd^omfgSKI_T6Pbh^Ee_m_aajyT4{VF2@B}i34ix6M z_@t;8q){XcEjb4P3!uQ4gdrAW=tk-tOZ9`U8HeyYfFW)n;y0saWJD1X@ob)YL5=W9 z6om1nrZg^7wlbQMF!W&RS2P&rO2wey$afD$O7e)a+d0ltUv_ypi+IfBFkn~5A)DXr zYUpV#VZ%Gc3>wf42B9nZ4~@PVTqCFHFkG5{uWp?RJqWd2W_tlF(sUR(fQUPRqJa3= zWu`se;u!we5VGTF3W0I}2XZZhpu zK@_6etc1Z9+XVxf#`j$uu2rEKP8$LYsId3>KA!O*Z@=gCj$#(KA!c0^?tpBbHISQ1 zdiS9hbvE`O2CFt9g?ckxM{Ko}!q14=2_#9!fMHRwv3r>VjMD-JVjI#3G!I~?RCFx2 zU!FVIvV44WG#-g~JoMoH;O740F>F(~x@68M2|t<%gF(bR^xzQMDYH3&l2jh2JW`0j zT|guZN#oD>kUU63}tjpj}wG_MWE2%WY2RAlm)q7 z#bM8);|zgeA`Tk$y?FENtV&1p*n5Z$8F=bx@QP!TBA`l_4!fCPbD+^gRK^zMhBg3pvx`NC`bUe~%Kr?=R^$F}s*cfkm0prjd zC~3{Aoj*FH7cD*p4M-)}hrC@0sPKKD8?Ayfo;!Qak`xXo49NzEt||dr231wtq@tIF z`j)mt0nRY}>XmW!!NHZeIZxDo?DJc2wnqj;%J{SPDUJZSV0IF5dS-IEyAf?$gf~fpcxVdXc!11whkClH>8b9>oAZEp)#TM2~(O`ZG!_5 zF||b;=~hLv!M1Z!I^u zudvsT54RpaKO8g+q0Iz+AIJn}T=rlXZrl}Me48>n!r;X*RAb6Yn=o$a9FIp}prYzH zCyL&Jrcjm;R6xL%71*E!Fh+#y9=Y(~!PlRE?soPx<89#r z6rmZz?BQX#148euPu?>%2o}%_UuVX+02Y4z1P&aqQIMYZ1`OIM!l2;Al;V<^SMv&J zK;zi{K_QGT4Z@&e2pG$seYSx4F<#ETlCitAjdYnbqL^!VWXmMHFgVR7JUeJ)6ni`Y z7!3cm-b(QtdY|WVXO(6Q?Np zaRN$b;92YS>+_dCT{$?gsu29#$Er0l?t#}(kB=bF)}Gyn`b>VU{UVsx3YBD~Qeil? zsbJw7<5DWdB(zwiVi3p3=Tm_3hY@!nlS;iofi@kvCLBT-2(SnHIla^`&*B0`iCu#Z z2R#O^DKYsh;yLMJ!5?}oM1E?QLd}qpo!4y?XuyyJIA9`fXJgVsh=4(t0nuSlGvF~M zCL9}33|v9IVh0Q~eMW&}PIZL)6s!w$HJkgH{btq0=a`7wp%%ENQcnkQk(US*p&ieg zXgQk*mK-e&Q@}VG<%CxG>^IZc0~Uvgis(@PU>2OR!R6mW**Nbv{5AkWL3Q0K)=*4Hj=u z;Log2OA94rSEvSP&`3$mK$t4rs|z&DBm&Jqa+Y44T?azCFe-0chVipyr2I78lwX9n zw3s#@Jq?B2QDZnd(rEmT=FdMa)+F?fw17RiqS>r6qZ@9E?&X~ahyN^p5yn+!cK)9!- zW}o1;hu=MTFg0b>hR5DT0S;{Oie8x$-RmQOK25E3Lk^^Beb_p3o zW{hbL)fx)zMB*BhA-IUcFDm^oJ5|)o^TEkY`b^@01$z#86INZknTh4MkNjyTMyt0B za2vU^s?vYx1(~H4{D_JzV}t4QI(ZO*uH{jR%Hg113=F=0RCK6TPx~k9(}N4M1G8?o z+q1nrgO_96!*2W8-(UK8_WFWj#^_3HB9jHTk<>EcfU&vcTGD$MT*c0@fPs|2ljFI_ zU;htP!xeA@|%18mz`nXA=3fBTG76jTHlCz&Oj{g*X)1 z2KZKHL;LzL98N(AuVmNaEvJ^tRriO-woq2|wO{yZPoE;B3N_|#AA*}Iho7{6&GxjvJxvQedmuRONpZKNd!jf0`z*VojiDO0Wdxv z+2fR1m&I=+4ivrx470(UVhNI3V&IP@jT9}EZ#<2>aay1dVxe$y%;Px$gOBl{i;Slv z4ZPS8S6ARHM64`UwCJ}S_dLeQ?(Q$;G@EMgvOq||c|)@sc=m_E(tIk;8FS0`nS)KI zn>a+nG6fd37MiNEi_F}Z834Mxi9I)u7&$Kw6D+j3N=B1UMb4Io4W9g}-~W&Tv=y{y z*le8XD^}|gMrjmVI&%p>teF?GUo3TuevkFw>C@1N+w<_@@r*Hu)@q+;0R5xC|NVdY z>e9#2C>Duw>x#XA@XcRR#A+hwY`lb>VK@sKpUk<1VpzA&eWCvgx$rL|1*M-O(mfiz zz1IC(DW)*_wb(-_VQ>t$vtWrLOi02}iE%W-&`@{x>o7jP4H$yO2_K}PzM-MblLiV# zkagH8iG)u2zHk~n7{F0JC5-ubR0zfWa#_q;W(*Fvt9+K_cEBhvFFH4}TDpR0%C!h} zC}}tnHd=PV5Uc(Gqu@Tki+5Ii?%m?i?zz`)L?2CB&3B9_*;e6b#{O-{9P=uVc;qG_ zXQBWQfKf0`_;Za)VNWaKuT#s=#*f-u=-}zW$c-b9JGzZjxzQ9UkKgd1W%2j_@y)Yi zo{r#lZYq0d56R=;IE|%|N&-=|=1=6ETJXu-6kvQk6%F?puRH*Z|Mf2;$qZmf7E*K; zfRP#o41Edg5D(%ErFgN8(UkY6!6Jg$K)7&?$vD8!S-?hl$N`VHRAWFyytV0{;Gp&8{+sGMCyW7Ylp z#u<*oMDq?*KOFYvS<@8=2usC-$6f<04wBBgQ&9lJivx#q;$_=%{&HKzR+mik`Plng z)n?2dNDYr6lUK}iis*!ew(Ygg{b^3#>DH{Mbc`%nBPyM$J(zuHZ9K%xi|WU=Ka(0Y z9bLPAQoeR{%`vg`x8YF^ga)c!|>_Rr$^)ENOU|}Mr4^r(HVyk zM+r~umGuuT9~lJde?#nVvC4*UtS(w21_o&8;yo zs_rX;{bO6^1Wtt*xXYn2x%1-O7uAeG4RIB^r8*rr#<|&%(8!Osu@c})$a>sC3y5kQ zortP4zL~Y-0qaiG=a|_J+GADx6>ML~+cOw7!|3cedvM!rqqB4VaOA=WVRW#;XJU>{ z<3BG<6*k|08wP&oPDKHOP{f0p!DaV0r35Xwt47L658kb0(e>Y57z1DdrGT7>U+6SE zJs3jf(N`|E`o)BB!aL1v<#uppAC%;H33n-+5DFB`wIrL@t`?F`?44hp5?a{Sl z?VyY;LnXR%2a*8;J7~vI?HQbO_q}%ZcJZLGzfu=4as`C2nSC~BK5sTEI;9_2lT`6msby zE4^pbh-poD0!&X$oG+Y47mO3z6CFE3zdB0o`D)x1u=Rz{U%kNgix;okE&s%ipI?Ax zT(EW~@h?@S{NW8kJ;=dv&VMAzr2nQ%c{9Heft#A054XIRP_;#gIXzTIl3+?(wACJ$L)Z z*~r7+9Xx#y;(SPHv@aaDE1I#ikv%{6CDn0lV%um6_MMNamE@iyIJt_6g)o}oXWB1c zpZlG8%k4i17_)gAu>2HZ{5zZmuIVBJfkZqAL-YeL3z2aZwOs8fVAKma z(f|zaNo|L zOuT&ks+2c&9{%$mE_@C7G0!_Tl(`3h@t+rP(zvJ(E4^{#ygWj};5L_wUtsGi_q^Jm ziZD^M)z>8qI*p#0@~iL|Cqgv@5q_LV5|DRTkj(nLCU%&`c)muq12Ez!B|*x+U{Y)x z9{a<~M<3q3cJ0=62#%9bO1zg1m%h63&C$^}-y9v^t{qgE1{E-Z+uLxWj>%y!j(AA- z!umN%eXmCCj(i0crRKJDG%lv_B158eEYX1oVC=YSm2rRi3;?inLXzVm-ijge3454x}zHhP2SzzI^F?;N05oy{iJOub3N{#9>%FVa>+lmo3AN z&eTdRh<|07+-cmu9dVW+@TYHcvm&#fS%Wx->9^b`jQI&O>xN1=w!%sU)$u^`o_$FJ?Y z1D9`pl}=O>=q_;R;M8K57Ee;yJNbb?fP!NuwrKmCgyNof0K@4L466mnpc%j6>Oc3* zH%GgwR0C5+A~g8gk`87Az6Tq;nJniPlZHj2s1 zo^y7-nv4FtY!kkW;u4G+9bu*mwK!}ir((0CsoaH9B;sxx8~Gd-k_;PNOxb+%AQ?=> zy#3X@_~qynDMr^Ik@`$9(CHumKXz=$(Fknr?rP6hrUF>Q?e?uW?T%=X7%}83D}Tke zwMTD%`Q?}AD5+;$sur63mE>R;(6~L6WhRs)Zc9%&gD1EZ)GT0_ z5gy09Aqy6V&m$Fw4(n!4Rti{x^_>Emdf;|`xM>Z|~x5)1e@ zew<(=p;lQ*c+2q)_ApedpStqlNmt4UrLgIfp<<wZwYZbJGhD;|LNXRmS6E9l_Sf^scnd`f zhLluGMg1ljEpLibN|X|pBFh0U$X99pkj7$6)^h=rO#(xaSV;M)w-ei!^> z4!^T)uk_>ohA?6!SE&eV`2pm`pu zMPV5ctWUCTA9JrnOG>lls(RwwWYsl?EHt*a*c88+Iq~cF?H?Vb3c^{n_Pp-dGNMFT z_`{g>MsVWC2cC|F;!2W^xHvm*^VM3MJbye>4TrsP>b2Qor4VK%$j?8CMVPU4AjILBy_7FGh~PMkM4CiXO0}|w(9pR0e^I;5JMxlnBM|K z6NVwTpG-&-hO+0~z<77+`!q`XC)GN@0LA{o);5)2`T7E1d}YFzQC4tx)Y9o1Hd1(L z9ANCo0orM+?~QEfyrKa5?Xy*Be|fvbpOy|2@8DJ1}s;);x`H zV>=kF2*!O+H66Z>-6)3hHN3%)=Ti&a2ywMA68`IYnInhJov_}oRVUwy1v^?N{}|>7 zMidzTAZ@vVuce52 zdURwQY|xMi&yMcL-=d-1lxZ(oW@8_QUwZ0YQCr893KIrxK-$E5$vf5TO%ROKr!J}& zXsYy#fi|?q=z}Z}_wniUw;6>UzvKE(zy9*GQK1z|=}Ho*4wolu)wLmq{`Aq8Uw%Vv zjTnQ$)MT*XH(}Ve9G+}`l}XI7ePbhHTPZlUPL_5!u^BGU@|Mjilojj!I+)$sdj8V6 znLqtLy;#_EWl$*UW-WnOv9g)l-CPKvg*-mm3+>sQ(Mbg|9ZpjM9Zb7IyVYA76jA#+ zEzkYH{aGy7Y~S%7EG+rJ(1C{!Wg`OC*50^aOHal6Dd=%69Q_As!~=m=?YzaGWynl( zZrA=u4i2#Zs@0SXp1MH5qg8JONJ}*QvnVQT#cwcLM#IlHiG@(K+HW|p0D~?eV9w6l zgdl*Sqo=W1sgTRPpIeHwZh!_wrf zR&8@vglMomPPZ|2UHFs@8%EZugR79Hpr;d5)0AkKL$0m9LQu$F?4N(N8Shx=00Zky zHHSm#73r9|!~z>^h62G&mR?xb8Uh#UQUtlfQ4XmHs;beoFuc7hg}QyQRJtJr2|TNN6czGNe>)vBxG*lylchAdg$wn`XJd1IkW#@-qvH9rxHku^;PRf?x5HHi`L zQr8^0`WJNAwzYr%c9OwMQqE~BcMDi?H`WCM6R{q)a?C|!2B8Lce4+E_xrj{b7q}Wr zi=F2dE>f#~dS2U>+IUo`jUbk>2}9jd2mwc}Ap0;{Ta9q0{y(b$52>mDM@#W3iy_JA zGHTp7!~Qg?S9S1jJ7osNj#a1w%nL+y<1gtN?>zLns^AtoR$& zYlKFJQM-ToroBtL1sLU=Z)1XN2!2o4x;k$~GV-wp4-Oo2+tsbIOv+_sbTL&(aIf4& z6ganeld}znH%XiG8we>Wz;ZJ+!$P;tzwJ0^MI>k_nXdw4E?wL}G@>-2ZwAA><#bEu z%iP1EqKT{wrQfIDzdbm}mSIi#b)0BQ#`^Jx4$`pIE-=2HNcKNH zZSB&IJdxnetM`?D=ia_68o8&A5t<1Nu+OXsqa_AGBm)|b{rjzcTZ^C|+&pf5gM`wB z`_>yCd=O^~M%oLEeJ$12|Nf$tS#aH5%(iNk#OYlVj7oNn61O#%5H}^Gum8+|_2TKbPnpvn4Rj9P=?JT) z8wSRihYufq_TRJH*jj~2Sd?lS z;&RU`U#00zA5Ikt+OQ1^iddon9Hb*?M*XFtU^oJ*B8)gFMQ`xp7n2AI@1B(#xUEm$ z_K%l2FDM-A9Tp96>>l~@%a4xERd80a+!IUkIxvKjOl89h{ihkBAR|nh z$)lxexLlnd0pULmUF@>z3h@4$RL!bh4o$`0{1w4qIU^Ck_9&tui=oG|uci+v|dQbhoYL&ZFEl$G7tug zHdZNJ;(9Rt@5rH=h_b4JMR)_{GF@5-PS=Zz)_J{f)^q)dK#wEH#*91K&1Y5`o?ZRy z3@om04~AJ}Y@V>SG5g8G$B)0h>$9@04aV!qcf;)NHVG zi_QU$Czj)z@eCAa{`+^&o(qE}+c_Ouq}3lketdT#$R(CEeKAophiIsaVS%-mVo^+Z z`OjOqV90?$iAAFYBM^jzV2DO!Oma~|Gz0?%I&PhJB>aLQyJ02?n@1O_kqL<_`n!2E zok-1$j;hc{#+GeT1Qr6ZQ*n6Fr625hTP@M zjO#Mv2D;lDeZ?EPDa~H#`gaz0jd#s^lH`^0E=ILyW)ZjDY zu%JM_#GmZt-SS!wj@P27(CoG=7z^?U!|17($KSy)CFA+^9?SOn)z2OR<8HF!gmx5L zJ)Q*w9nZSz2@eJ+UXZK5ME@l+5isoATdex)?A(IJh-o8&tuQ>>#0YEOb=O_*WQv z^;*6DVaczW5io|EFc1&nfQM)hU=YuIh^e5?r-b_=c3db(5BlXC8%p5Q-k z1SWiYtC-AsGR65zttRI+?}a@1ooiR<>8fRWwnlpfN6}TUId?{m-#&BZcfWfHj7h%V zxlUSsWINE(Q+?aI82eiPLMTov14TU%Gkw-d-vVpG0i-3T-k|q2WLv$}ll7sJ11u(wR70n3fsCPv=U|70xeYz3G8$e!!D6 zHjAuJ%S?5>c!3EiDvjOb|QFFW(ykZegY}R7XxI4RE3H+Sjt!l;396j-?L`>WT#{yi;nWxb+7@%Lo zktIErO%mKleFu2piya6s0WGf3PV0?Sx-DHsaIRs;Y zgs7RElgZ#W%Vh7b2{D=(ZU_+F{RTrK0u0e8?A7WVSfG7cFd!jA&aZ?6KNli1GwKT| zHP7D8UVUe$w?5WAtw04Dx;0}_$%{6-!<8M@ZP!kmB*7>ep)zXN91fW76<*#A2x6b_)h0x-A&e>)NFa z45I`NEV?NlpTdXHF~L}d1wz4b|803%<=bVO%CIL#mnAiA>S#kY0$HuagGI$?gj`vU zV+IzE*vf=EmLeXdF~2hu9|*^jMO}IoEN*O)+9+4mjK*kJe?OY))ATT9pizS*l(B7G z_1%osilRb0tg6?8%={m35`n#UC9M}mgK0~&_D{8);HC?9^LQ|;hJk4GI$poNpIP-( zbD{b8f^~s#prgauePE(fydSoeKYMoOzyT!V zZeL@;jKEK; zlsHJn;-YdeOKn_A(Y#iICGW%{5usyN(v1y!M}MO)?bT0TZvKRv+Bc~gXaY=6X% zQr?TH`MVDohNYpa+F2rk#bSd|Hs6uIdEQ&&53Qsq{KV9-->^_!id;nk6!JYM@}MB@ zF#NM@T$!CUyA)(Jo>=Fn=J+Elfl^>=+g{)C5%PuxV6k*d!};^sEHkz`40vvjj6@>z z2((IYXPXTnUqC}2s1+Fy!4L>Ol6#1YXu!gRp)L^C43@YJL#4dZhX!JSJnS{iJzFkd z(L3G!?b&0!>NIKUDcO?xhs$jvEUy9vB}OCpKmoYJ5=u8LCJnr<=*mRzF_swo({7B| z9lD%&!$)>E8jJQl*eE8dw4)0~m(|KxU!3ynr#I91&nwFAqRCWYeS@LzVl*#g%!JhC z`zgkyHj2xfXGR}~dF{%<6F2keL@wb;kg#?lp*GrXSLe%gzNS2gMILpZey_h=E8^@G z0TxSw%^u)Hrh%bk$n!g4WRKV1KdW;U7^;ka?dPTl>#8?P5zH7FvAN~i2eT9~x=sc!Qct<4(o$xk0DpVa1RxF3#ciQ8hfdx0Z%Dm%K=7$Uk;lG zZH2XvSS&Ah?;#RUp!jc3ey1k!miH?6rb!Fa>>7kIwtlX#(Y>P{!EkgV|l zhA+0e0Sqj|nl;Q`TsXwFt;jW#>ggQ*w4;B`i`UAPk~h5x3dgil#6vOvu?Iie)+;gV zcqo*jZEfJI_g;r{p0@MX7+s>@t0>E2#HbPa*;_!YP2%ITt6PMDK+6X4INa{ptJBAu zZ3=gXEGWisn7|}vhlO*mLh7gT|zvesVDVtTAJF@NX z^Ep#Fl$5GS>dfg{3#DTv`!ZV5@AiQZY+|8*Jid_krfE+TiJNJpu!o@JD{q;ZTI+l9 zgqLO(wNMa+8$HAtya0i0bzn7@tR+GhxaPY$e(R7mkxKejiiMO}lp&Q6C51HmiLy|S z&um**in}1gfPI}l&N15*u;7D}{WO>kxIzTGtOM#E86iaK*6*$XAzRMQuwJ{z}8M%c9yOcg9`$_3c1;{OF&(wOZ6k8>Ff-iG=Dh z1Vpp9AH(AD@dgnIQ~L9s`!WAeuV6?|nMPxB?mfCBxyrY=<8!(h{9v*t#Ms@!l$LT3 zRRTk9)L5hmqDiCq*@W>eG;~zrdl!Ni#G}@N!P{YG&!NGA1ULw*fid%k;bl}+-9&=v z=1X>E?0Ykjh3`yEH(7LzxZY@!owf@rg}+ zRj>Z}gUuH44@Dq>nTw1>+(h4HsUaGqfH9Tt^mCU|y%ZT@2}RUC#ElM`n$?s{V&0Wc z^SX5EK6Y<<<@z9!M!f zP_h#io;WuvA|Y2z7+=qZ=h_ZGB5YZkPo&(vqS3P8UsH4n;~EbdYQoTD^H{{7q?GnD z(9lk+0x(E}{073lFC6dIN&&;hH^f5}S}cZ48p%2zdwyUTumFZP&gYB{CY&JvaGW$B z^m1JivV)S^5tcf!pM-3$G;*W9xBPGaHvAzlUO&0+awv_?9JO}kY|OW_U(srIy=0B8 z=YAzpkDVPG*&6E}iP*+$V_Vlh9hQ$`|BKp$lc^b25l|Geh723w1Tgy6PqZzye}{lBb$PTf5*(jMG9KT3Fw~jXSkg=Z zYZG%ABp~c#e!n9dTJ2i;eLJFI&9_!cjp;-p>-x!N68U!7hF}1rdB_kJ1OoHjI(%)y zKsFK_B|kpZ5ecM&dCEol2A37{0YNnOOy3ry9BI7LNNI2R#^N99e71Ft_Vm!_-Js*i z2@E7->AR)F8r^1fP%JQVj0!h@&&a)3_w-lYzV|V?gI8MwNMqd$5v(x4qG}wY0p(DP zt6S}Lznjj2V-xiAU^NKWtLh*2Ff(qrLa|^c7olIdJY%_>+D#1aEWktL`Af@Ixp$AFvXUlf+f!cl@z>3^KOfn`B5xHMg> zBePNMdeG8?T@{jUnN}m~P?uEiSOnX4Zz}*pK)k<#2flrMYsBV{{IGTX)izy;D|lbH z{uy$CUEa76J9%=ru+mE&ybrD{R-yMcML!7r(8(xCaY+|>G#uPfw$i=64u^Y@vCm~GY}0)cz3#{sPN1#Z zjW*&Gt4vL#JyCzezT7n_n<@$7IQG-Zo(jt+s#k z5ip=ZjhJhMBplQG&h5ySgH9N~8fbwLv7Pnf#u%Nf>@l}WT0?Q%$udWPs6Z-b6Au&1uR#J^>;koM}k~ryI>TU0=R2hF}nl z)Z3m64l;WkKrnzI8oLS|xPpYru*=S^SiSauAfT2$kB}MYosdCrNBnNaI%vUriaPM=$ zkYv~ug|`g48GiGXgagqiF!%`!ouN8MFvLPI)=VD5O)m-zuvjjM0KV(;hZK`|s6yEKrO$1}j_zrvO1eGmF<%AAcwwtk4%+_rl! zk5O@;O?hmr+g%^CuMmbOok#%r^MZ3{#~-jE7{|C-W783!gFi{UQE_ZJi~tpg2Fb=i zXyHiP8f}hWSxMTg6!0i^YVmkE{?$MNrxn{vH0MdO&ML{m!<;9>sE2B=FRJ%L+y|9H zbyah5ZUV|}8mzyWCH`h+to+TFO&I15!lg_3gl_G4c%VtCtNXo^O2 zv5SV2P*Xf+neP@A1fmI}KydFSQ@BEg3Zk$;*AaoUkPXR5nrdpdSVS^tkYRt_m5xDM z-^S2Lpb2BE-s`^ie7nzt5hZnCuiLscX~tAV!B`BCfn)hds*h~ru?fv@7zFg%N|hvl zk&~)ccx@i+V#gKhefsgGRv2k5XquxOCw4_7^w+3Va-L$v=SK>HDJ`#h^X5_ecqT`2 zFBHqMn^IRQS92bhW$PuGDUNRm7F-&m1#j()v!cP!Q?pn5V8J;6VDjNx*GC)yVBp5m zsZ_x9%y%IfM~|#>Cjo_|&jEmof=FN_u^%njST^JDZ!sZaQ82G@5e$808gM>S3Vq-J z3w1~CSUxy^-yb%4}c)A+!^9|Q(LA1U;+$5wjH>aAETlMdmcrvE&3((WH>Dk*eA zrYi5{y({6Yzu{h9H{QWQElpuolX^GrS%$H$Nz2C5GZM{5hN=ET0Fxs_9nm7IEQR29)5uI(p z;5Zp!U3YAc*zAHaLLrksh_=qvDZyy(GVig$WP?J7pD>Rw;rWvmSthy4`4$sNbiu)Z z3&s!_NTw@a7**&433Iwt1{@a4d@KV%(g6vONI06|xJ2VD2BUXnrMI^ULyD~JKTrPW zU$Hh0Ih8y#(GZZ;d_QG-e`$2Eb98a!haV!{HoZ7fQ#{=y9gvHsu7CW2U(quD!D8of zp=OWShd{;53p6+Y@ZlYy`ihxihN~G?6XhzI6D}}eo0WH=n!>+Y*(k;myzDNQdCig% zkQ2L)+SkhZogBnw{L!EOGM-6#LI#&ARm*}=&Uvzp?d|n5uy}Z2^BX1?mR?MCK?5Uj zx}T(=-#>f&fJpp<#d~fW7u;hj?5#^MQqdUcv*5tglD0xm#S28L8C@EA@VH#OLKCl@{1Vg@+s300GHAQ(36tdpr3KwrI-jKo)50l7#IinZJz%iHx zi<~ROrLcTsxzzT*7tN?W5;2^-!I*&Dre5Fqe3#<*Z4G|;mB z?32fmjQb`G3Wtxnj_B^KE99tbHeg6H(5ihysw1x(+M{G18o+JpUm3WlT})Hs_nZ5R z?CT~Bo0>qd6V2T1yCb161MndcNd8Oshm4z&AsCA~lrokPjSo(aN?ElEuA;#_{xrG@ z?+2^fyK?;OG%#R9R#){5{%vwvBM#C9f{_W$d!R9&Cs#4dEyIh8CkZmhfINQ{83PKp z>9Z0kOFn0K_|%hE+?fsy6keUe_j(^LDSnf)uTs>dViae&ARND6voqup-!zkk-w~`Y zSf`f8QHxB-#!^MaeJZb~&`ZvVO6J9*DZyZ?v@cVB@!elO`feP}1Orhm>*Qkh4adu8 zx0OJ@9b~}j-;oP;t{-ZRbq9_0XIFv20S47dm6A1Wq0*7MacmAFnOMDuiIJL;PKONpoAc$s%FMc-xuu;IVS;{Rd>n@vOKl z1J??Z0S?@;X?M3gAm!4@qStMJz~wsIw)}@1|4TX!k>rJDq0(>X-$uYV}r zxKS_N`{DV$2#()Be~LJbfdr{0M1vsn)b+7~YG!tJG@B~Ts9~3!;d!^ zj>&-!_VGMg;-b;&qu*zWNolDXAq71Y@mwZlBz;K?`qcQNvfd0tBUyg*_m6z8?q)!~0}S2k07|tWM2ozQyKIr4t{BbfCVv^3>(TYj115>h4-%^5$wuf1SA zd})nPZoIu(ixqZLDUu#kP*&sB%w{aPo7~Mz-J(FUyFrNHbCPWN3ou^rTS#%u)A$2Z z*$i0VOwnfh@Ob0PFOU9y>Ca#O$JDCXh0bCTyU~IHiv!eTqO*oQkfm3Lep;MX-O;)g zNF}=3S($J#ZrJK>KfIuU(Vp%-K5eq7qpDQyYn{5BDPUl3nlS2aeMM|9!SKKWn^-Fl zbzn5e58~NU4W~U{xfpZK)y&v7Qz&kvPb|<=G91&q0cYE|-C??Q)yBmu%v}ircO3lD=pv$3eQ# zB}fEkAI3N+$YE&&_KjHq{QX)cm8=nMtSGA+uaa+%AuPpm+wWNbo|)JX4E9#C^X;0irOgVr z0}C;-9n8%$EZ)8lG;H*3qNc=RR^7B>Ay3MLVIC6(ryh;AVCV=8a=`(HXjIiN!sMzw z(s|OsFe{6`W=gf%&Q7hsF~ja<>OpeJhTJ0D%hOxI!R?-&o^Jc=smmq|jk4u@KR(!H zA=LPV5Y=bT%&?*R-w;ilxnmPU>pzT)U&!Vn4_B!VLv{34^G(|1c56=X6M%6DaNnQ`RI{TzwGvbl)0N*IowDrVj=DWlHk zjBIzNJT=Zq#60$O!8m})aOck*zBqO6`_t8GC_f2|js};{&Ng8n82nodE%<{Ad0=Ga z-J0zN_H9JN%3hs?5Wn2Ni5oNByn|1NUrRkrgGWD;XVue(1qTq#1BrL`yP6^w%k`ei zj*(F&i%S$_kqcS_1Y=Jgt_?+q!gKawF{Y1eY1uK{tFvdX0>kvf>|~a0%$E@*_!^<= z+Ub0<7z<(3`+$bg;=6O=n2l7eov>@OlIx)-ZFF&PG?kKfb_@((AK>F|A29fd1gS zATWwmg9J-!t7i`0ad~+Ue_8sQK-^{L&j2YDuWQ==D$dl<0< zqb(BcWQC+|TzHV?ugDD`1<$fH;xl)V_WuZFOzjmIEL|E(67DcvXcbe9)L{X=$f4#| zYpK9rfiOKumr8^OH2V+Y?$Qt169Ofg5z0>Su)x1?W8@S|oFG1KdvUDsUA4Dfvwri| zhr7GwCx^vC3I%mbN~&Nx0l_vFIjJcvcqEdcAA*s5kYBDn?)NWTJ&K+X1NK5?97Bx4 zw7d4dzGCtMq5+J!Kg>KH%7uz!5kX(|8F(0bf+$XgIt;j6uFb5jT)w0?7u4kTba!E7XxrdY6O6pMv)F?Cxo zvaRekQnEw=@QB_OGT-ExfI-9@{^07kQ7BVaKuOVPh~=-0N`(>46IKv(L!6{|m&(=) z|4=`|6@9`VdkYvm#|7nXl;Mg715o_^G7}R{jlD<~RBo;fnUO^>Ob!MKiOQxsae8|0 z_qzIR7?X#O!YXGwJ5BZ-BN+Hjlr8f?pGmI=ma42;c(@f3Q-;R735-Njv6K~3l zTE(nW@rl7nv*q%9S?AqoXgaisO(nRYHiX+NeWEc{+7!%;nt7IZP=nImNOQwBxB^p;X=Jeaf8IBZ6pW zBfX!(V36)d^fY@phzHa8-;2d_0|E)rk&9H-%=E|o_@PHY8}>2az_|bMtM?xb=TTXm zihycN&qEJF@^u`(Myc(w`* zWTTZ5ixe>ErxJ{(>i<+sVR@C!I>Y&D9x!|f!xfTpcept$RXv8vld2eh70lU_72MdjO<__htD@H{VOsgOoegKZR1l5IL1(%Ui{~$zP_+;bSm5GzPai*G+$6SwidJ7o{-f#6@BjI$ zbN$K0*rph}WxG8Z-z&BRt{f?(XOT#kXSebDR*0+nWc2&Owc&BK+PRf$B{iFzQ!B`jEI3jNy+iy;Yt>ODr^Ig%T2;RIx$oHqGJf zXo+@?&9)SM$#=>{a^JRRH|%$;2<}Hm?_T-HI{tYc_lOj1)a{=d-6P33eXPqthLPuw zvbXoC?qM?^L8BZtq?FsN4;Z@hTsu)Z?Ye{V1ba+ej;cEMF@w^TrfRbD0 z%U2)0QU!)banACblJV**Dtsx%iu;{GNXn!eRA#f)FV;W!cfshr@wXT25G(m5r?TRE zz~Hk9jCJ%BG=QT=K`hGW`4L(~;EFy8w`is&J3Y+t{A7<^;J$ ziN%&oXabLZX=tb|zuqxO+&VCF`eGcrJ}@p3sbU8)d|c&x?HU&CotlKBVgfraDm$nW zOl|Rr7tEKaKYo@&z4)UMT1?`>#Do0jR`eFNyTj57Nsyl(@9IPbTdP?)Cc~~^K*OAF zUJv|@Td7;$d~^Hu-Eq3$e7W-LLW5YXVudjTL_>yxh@+#1&!A!e|!M#N(|!gD0Us3(3a8m7OH zt-l5VE!V(sjk#cjg3;@^=pz)>Zs2L&MXiR&bm}A`rh52*K|QR70z28HW2 zj(Pv9ou3_)(8%9>lWG-JH&9}DJ6&uPeNR3Wl|xgi0!9=ErUr}h=`d~K(OOkCyvG=g zDN+|rHMiSnzf89qc(jK)EWd)Z;siR>C=aRyti|6@09Ho{k1HK~yM?1!F`(R$FO-0^vF%rVA5^guinp`PMfqI zllH*2&-oJm#l5~tNAsXv!Cz?LOO$3K-*EuKk5UDl)n~fx!16F_JooEzrasv6y?Bov z_nIW4RB#mPNG$j{6OR4c`$kuxsgR6pdOux6bnQ}QkS8^A%>Ua51`FMVNtY9))a~md zx~On-KV2z3DPTi@LDawxvjoE>*wZb*(9qrfomz)grvpZu326`uuER02>P~NF*ai0v z#|hQ3U1l$$z_ZE2O|aqx$J<5U0psGPl4hJus@Gi!ZaAKN7JT;EWS2q4mBYi8|MTr< zN8@=_?K_$}c=NPt5*@}z9sc+ZeO3Di#;yHgD@B6p*H_+ty+|gA1j*RO_TY$(3FVrn zb6h1nIEU&+G(Wv*a!s0liyiL=K^(;Vt20Ans24_5Y|BN#C`#|>NiL@g>X$$=njF>` z1&-&hVlnpj*H@oCo7qG)@_hvZlb9|b7qD8D;lO^AoLYwj#>K!W?(d@+ijI$B*1?Qp zDA12!aM0FnY8v7|vJahwTx>gELTDir0-^Vk4Ve%=qFhM*!#dWx&U`HQ;cjw~*{1H& z0!FBr?@P_@^m_fLpEFb%J$6){gCmGg7m-a|&!5n_MDzC&S2t|F{n~5q?e&K}CZi4_ zD%|7E<8izFaPw_o{QPrf5O;@nI=oYu2&w_%=PME~lW&8`x)whB&P%B_hc%{uEhy?ktT^BFr>lf=V_9DzN`t#F;lYj>8Z^WQg(|4_hOm=)GI4%u4&3ne9vF%eu8#*Gc^ zclt2B;TOkf0=j4MGn5pZPOw!NEjOdFE^f^H&Nd0z?vQHtT&5m>O#xj@LX2epR+>Tt zDfBUtfm9H1&W=}{qZk;Gtlt&};{)t+ir1}^9xYV^!V8B70tIIrCKih7*=!3KaNunL zLve>$DAR%t)##%$7O@5v++VpujE*4}i;Bp|bmXbtZ60hYlKcB5<6&4B7$(qjcRBUL ziAZ5UPGsVlyYWhO-W|9h6N}uC5%gFXS6Ap!Opfub>dSkmhagxoS5#(hiiHHDdlwia zLnuE-yOk#@RvclZhM8A(hPsZLi_2rUSEW$$p`oOuAcFnI zHlWGo6I&KKmBMG$k9CJ!EDu_qfRFT=U|^&Z96ar_Y#I=Th>`=Ss(liNVuAb$hSrvU zwo1UbV)-W0s9-ZV0Q-*88y7XK{KNca!XWn?hs)+9FxI4?x zmi9>o^}ckz-UkNe$8*NT6fBDBYYXaiTN_?HgpkiFkBdbw;PJ=StaT=&AX$@XFP_ZH zafj4 zBT65%J0_4wZ?qUd>xf8{o~V(c9uAQ`$%)n?q`N7-vojYc$iGx(nd9v_SwzabSlO7@uRPp<$3O9 zrbrP`w+EqDo~YD%yNJ=BRBAy(?KP5(qEq6>*i2mLY83am%v>#Pto|M_crWpA>(~2h zkKj7#c3fRvjh>7f%Ji#rT`WqIhzutc4#7d&&dtjQ$D`8hsVW(u00z5h0Rzz>Q|OoF zB=9}jXCoXwq9Jh*i-LnaE2zv-G$up}P1zxqU|^|{2n@&ONDYVB?Zu6C7i$-x!B*Gn zx~5D%l$L0ipxpezzEtC5-`>@cJ5{q7KCVJ277t(NYTvRm%0!-#~(U16z{*!z{2;dm;d&IzMO#oSIK5H zuq0z#i9=3SK!d&0cB(#@1_t}c7N4G5Cel!Dohr3U4=KSp0XnD2=QqzOj0}6O^b|#; zcnko}f;WmS6coQUEcC4`+_L(}-+J%~S_%?8?tucrvY%^8lsR-2oZOaf!J2j*K(J)b+PV(3jmA{L4Y+GeNg zS|q8k^ZKn`E^$nL=W=z*pa}uw3^9O7#ULQW=4f4}HRwjAVYRo!1VFoUC^#fhSWW3rGdm$RWWg{nC zi`=Ys*MI?EC{&kwm}y)Ie%9L2y!vXBKdrOpiVsS34vYrzW08$YYn6+zu%qOgZ#LUb zcJ|4${oAPzU;z!%vX0k5Hb^mfj)Ggq1|Zg>4r3U$*?O{4BpI@3E@Rz&pN|L( zpXD=3p|2##Ts0hc7Wwb|JF*dVONo$cxKb!9I<8FW)(}b7H3LITSbVvbtKS+MqIjYC z%H{r)??X{B*PXaOU*o&uNF_IJ(EjO*Z!GDCLtxxzF{{X=RU=z4Y$rXoE6mincr-rz zsP^HBfM2>aeDvFY*2u4Ajm9e{FjU5nYKWIlfbk91c5K1}c-VfPqp`r~0%PaKRAEj) zu92Y$1Up!>Zoh^*cY5w7X)lhw#&fw-;T%gtla91qvM4y}4t>5|Jv`00(R%i5U15V! zQ!Qkp;MF=PhOq5vX~*q?%4oJ=u*+;c`wbd>svt9hTH>|jkgN4Kz@^`@1S4m8XsDpg zep#EEGfW&uT1rak8V;)jqw@d5VAt!eoZQ5Y8%vIwN+bgqOe%aOLst^@LEYtZQs*m? zx%M0lPST30eLs7dnhh6!A{khXj93t$6B!s7cEb_!+S5TIWf(ow_ko}hR{>|=K zYcffv=Io-)pWYjgM# zYG%VFjf|CCgoB_g8CM>|;aCPcx0}=C5Gzlx5~~<-%D^vN+xf)MkY1+c+#9IW!FNkZ z$q~hDNYyLO$Zv8qAIZ2mZ{Fy4b&b8c&tI;>owIuV0mmsP)Ly&PQqe*9R{g1qUyYyK z5Keiu;F3sLF-9sLzH+%5_AK6hiVIc0)ENX37MYt-n~Z2Y{{j}@H0BK@8P!uIRhijIqmA!y zEUCmZj*g~N?kH;K8GrJ^3mv7n>3L<4W>@Jy?NEUZ!XhbolCA?c5}pJGGzug~8g_6H zm+_&7H@n00L^bgB;&5-7(-&+p{3d!oTq7kiRpg<5TDMz9xEhJwHl~{u#cqhp!O6c~ zKY04}vlMH8!GeWpF0BYg#pwFc$k+AYNJkvVvL?h8r z%4+jxM4FR)QrB49JN33J7}{n{FO*A*a4cYm2AmQTk%W957Q1e~iv^i#6|2E@_nJDO zCd*;7Ln2KIn|@>6X6RB(=0W6_OFLAdyD_MOT2SP_fMe?Dl2x`F)e#K1WQtL9FD@%x z`Zqqc~RfHi7_GX`(Pwf+4R?&22=AWGR<>vHj=&yDAn!!2-p)Ov1(n zr6rsx@;+d(StWIQ;j&VE#6Yv4L?X)afpI*t1jDz`QoJRf6@obQNGY(x- zG_4H?0OigblhIICNpcc(>jCxC>e^}l2HFh|i))@kM1}?QqrO@Rfzc_KzWejSd@CJd1{7kT>5arT07GR0)dkT|C9wboi=J|P zCEiTE3K1buEf$nub9@P(;X@TIRaOHQFg8zW>Kd+}DALmiXk$^@35+u^QeC?3gqop& zG3c;(=N{C7aTOSgGYm9Yaz(eskrL5$>IZ}$nYEjz#M)fos!MO1)yEv^GDYa3?ct5w zC2A;a@Mx-ICkpyV!*q{9zV$%|yP~mbMnkdF%5igazSrvyg1Os?%G>EIjmFX|!4WOH zKwa^?NxUnE^xWz623_U1ZgZ5CdzCFxBW1UbLD#98Xy;Xl8}>tUcr>XMl%5q3yCrf# zG|1mD9X1&h=0GAnSgf4cLn!T&-2jML^%RyHex z4xu4Mx{!pMkZP>XHl2W?x`$F6SL>Tm}4axE_wz)*@XNlih+ zWSFFt9F(U@<+9)<-hhDEsPbL%D<;CGIo+@@Hhd-$ygr=?8gQ&q;8et-ZLY_+=#b)+ ztX7U?0WhJVvML`)Ou1+zK9yk95BBg~$<9!7MI_t~_8YTti2zR-Z{1PFFrOyDM~~}C zs$^fuMF68e1V+RR2xv@V%!)(YK+DbcgA@nzP@l8~as)fG(`0y#q7wHyxp>{TsrU}J zHaJc}IiT_5>qUr0G_b3EVGAVzK(q)k&Dy3%~wzOM+omi;z!0)ez*e+w3-V*s?g&#MY+h8uYXM#2Xi-={^| zE*}5}w!=sU1t+XF-FLJCVGS}>1A{zWlN;`plu1vc7SBz^}0R0LWq1l$|hRs z`?W3>+pH`*yCOre!iHxHt*j(sdv!*{$4@=_iUX-taTZ3pOF6=g*}Z$S4WNlv$%H2g zTCnDhgg__748i1_rC?~OIy)K(1;0X0Bu9d=h{ro&NV%^rxlo>_xlBAEUn;{yL^h8P zEB6#XjN7s%>Q&WEw_sViXwe%=G>CFjVdwT;U?BDzvro8!#L~@q!_3ZQImB{^#@#A| z{g&?J)6~5cS2d`R?1f%2b+?uFH^!z%7Z}jsCd5dybyV`cd5ULzRGHoT`mbNlW+iQL z91avxWnXM~COl)s>JzI)sEYR)Rt= zf>B$*zclw+1R{o^;w{gP+*xgt_&t%=UX@h%t@AIYm9C2nZBxC*kM%hZ+)|$+FDIDXl&ow zY8lZ;k17pVsu2_znNDPH&%XQa-qX)dJYYnqMx%pbnk!7M1f66H#yC}Q1OwN|*l(nf zFM`P6;KZS`<$D^c;7LU#ipp%b*-a!O%VrCadDACBQB>8C-}A-50EN~DB(_Lj2?m@B zTe9R{awY{7TFC%(qsa6oql60}=a?Wx&aPCJ?iNU3)bVpgqpysD2Eh(bhnNwKp3$u> zw6%2Ms>Gc+2%j^?7@sm!}jWGE7efHr*p-b&{H=wFqRK?%VqzQr~dIj z)=dwOR=FFi>c{2#WuvT}plm84;!+Y3-bZ+Fru~EI+*Y|kZHPr9;d2-T?Q>ciuDD$Z zsdTckgnLFh5>6(oz5rzMw)a+f)uIu6%Y26K*fMs-dA^`nfY$L0K(5 z(_vi-39J%o_UYGuoQ<})!zYNl^bPC``^%@*ufEdxqhZ%vH%YpPV_?kf{OQT=l}~}N z`su7dN6faomlO^a;{bbHg(cti@$#jR=Z#Fnv6AhRiGG%ydWX1@F2j%nDy`Rn$A}9s zM7EYtkU~)>u7SZJaZVrbHy9lIW~n#Q6h7GUMS<3AyFP^4Vvl+7wf|z)Dr6V-MJ!Bs zV&cU_aD-FE4vxB(crI9KpW9Y#N-%iizhz>{1q|Of1s-ZkT-p*6B`Rx`IKV+6@i`zV z65kuHq^;2(lmmB z+-VgJj25~j*-0@G3&bR$QP_}eE^TS4XaTh|eU_MTe$9)Pshac4q#YO2VO(QKgKA;$ z5i>rfh0a>I#|aLiMahSjRF*CuREa=YCND%y_m?~230Hm8DF&)jrz(&J%GC^Nnf;L@w4N*a1dHCFqsEcyf1E=q$bSbU2m|h5tsi(#j;`)K z3^YiSxq1^13)sMblZEoP5slKO8?@bNlYVv1t8&04_t}X>L-c^7`uU1tZiZM$j;k1r z#F>g>3$t!(PD0uQ`Wlmmg&{ovF5>#Eyfxuy>E922yZghXo1z`zIQ7XndWAvr9AVLPqtUO5ib_k#)a_mpYeEvA&qQ-L$bPMKU!zO9rXkx8HyRBfq#+A`$k3>Ct| z+%Y~veG7fQm~8WJE4I`ID1{Y$R@LN1YQ!7z%W*SVfoDmjlN2>+J>S< zZMzt2E&d4cu@fHwEWkKhC5Z8!x%zxgo|c^67ytI7 z%Y+?GU|`8!8poEd2{Ydzy)|oXeez%x$-q=MCT2xyD4D44%?wG+ zF0zgqg?8jG5* z2+KH6vxEjq93Utz{1gPrAvkB+07(*faQ0~FcmH+w3A)iA(XB*pKR)R# zl$Jg7WzSoLe=O2}JgK%zc7&q=W%v}Oju46M!VyB6yYk>3*C5~7s}rl>4A(X*&PG8n z4qS%2M7=dwOvBKlUbEN4%OfBi)Uh7AIh?Baa#Kx00Sk`}(I`0D*i>SMlN2ncwjG@u zaU8)&B!ec8Vj>xkFe`1B7agHeJ|p`x5(=>p7SOTuj*S+Ejgk+J z#ZQ__^l6;j1q>N+v7l%R3Lvp6D=h1ZquCfV9Jo{!G_yHEfpEvLj&_ntq^*bU5m=bp zDE6AYCPyHM%6a4P`_ixe@J}4U%occ}ZV3hbfh_;2Pq?u4tflrPwFkgr^jSTcvvha& z#3oeliDTNnJ7ITkRej#Y2~l)9gx@IOqWRK;fFmb(pV3Q0*8Lm zdY6QOd}{W(zv^#n%Yge54PY3{vA%w$r-&QHK}6&Y=<{+2Bo9zn1eD1;fzpxhiC88mXOO^)gLJ=p-Xf?$S^G z@SFdA@kOXV%tM#=7M2<&nuVhOGnSD* znh-4FjivtbU9~~rl4>3pf9+Uh*fuxI#l&oirH@WtT<*qu-27G#X~n5Lwc00lC_O@^ zb|Qbnb%Q93by|VeLtq5Nk4Hopi4Bl@s>R>V29$BBf`@^#GSiOoCbdGM;Hbhlx8fn0 zELLJ)6)tmxkB9fy>cKI>fMMQPRdkoADIt)?GD}4G`*_-4=L?KLw#@#2Poy9wNJc_K z0ND72o^ljet=xNewvyybbcE82+k@RWq^~EAf^Z;b792_NniOZnLpoyEQ^_@hTLp~Y z{mXy*1!E2xnt4L{jQM3_cR9YR(E^D%S7REmuu_8A@SUVbhD5`28Dxz z$JJZ(o)}+>WCJ_ez41mk{>xu( zbI1h6rJ&qYQMYDTN8KeV7}P>_)eqO7T_*`oCk@TW`?naUFtR9?*#<^2=bmrIC+FYD z?A604@QCQp*4vLe|4rTELLi_9W(UV zpRuhhj>0Hujt0x+@VJtQxgZ#hbViA#CtWHF6p3Ig^whf1b1YzNNiYPRz>3VQ{wiP) z1hNXPGxt^?^rl&nyb1IMx%(|V}NZ13RC zvS5%X(Y&9%^Gnx$@~aC>&fKjWweY2wwSk$q{L7c7cQGBQ^?kw6VFn4x*7~j6V@=hT zvVsOorrdLVp&w%^#`14;U|g+{9(zNT$gTv-opHFl)9m%?nDk>-?UK2QoF^Wz*7jD5-oZ~kd2o*>E}Ld_&tx}5GVGF$!a#xSH#qzXF!H>V zOjFd6XgC#(7esroJBys`wzx`~#A311sl;4l6XV0q!q7+tt97;nK}7VECERB)oQ>HT zjk2*`PQppih#fGL5>Eyyc!@k@`cLu`f#JDhxd;fip`LKV9mD$1FJHKGe#!dqSDFCI zg??E|nduZ24ezC2-k8Xcr(l8k=1tRS)>rYXV39&mVF17Zj7yh)e0kV^SjzGRzz_|I zF8`V$S*BoqdHL=8bF&(osdhSpD?D zr}tLzh0r0`LBa4qrTCdaH~+7z^Lvf+Iur0PX_`^DOi>+=gL^SEq##76--=`gt$&b> z7EvP)Bg&G}e#WENA`mdFu_Ze~7iN_(NNDWXri+AGZOL31-}T05ZNuK|wdrja5-9Xy zd(r=5pXWVilx$yHGxF${b)N72dEWDW6ENu=Xze-^dk^i9<`#vn(M;^RX4fl>SpcTW z$RLXfpnimAT&Cr@?9HneAsWfdB2)1BL^?~$^=BS-EE9g*94&e#=*gP)({vjh^6jupV^r&Gc+9s-`_5x&etJU(j|0| z)icoG3@k%6+e)WAb0#i`Wab-5Gr+JCLM18%vc4fE7?&p_lgC0Er6eA($Xb!*#A$@v zF63>R6Q@TCCs3dgQ<&IWYXbeVHBUCuR`0i+%&53EM4QY>Hx{nq$FVv_#4Utp z@|LAu8`JB8khVqnF1#aCl)4zlRW!W6 zmS)59XZ__0CJf*45cLp8HdN1ONqoG~tuqH6Ge`DGgBbtGW%o1Ae)j$EbJXC=Qy;u{ zwO>12-QKx*apT_SpPpm)mU8aGnC9DIuM2nkQ)~yMlYpvR6a(uhTkJ|Sjc{8SJz)H{ zKXimy$tSTObm64kp0npYDubvRZdx19bnB@!KA7670g_Yg`2Ns92JUMv&e&a8Bo@9U zL!}5qp4ot%7_4An(n*DTvN-9X(=A{$>K+%eN0`tjgl9~+2hm|sS3QnLP8{e#WW-?{ zdAvGbTew-_KuZ52t!TY|OMIKn`OCMq@S|mNOzF&(8>xd?k5Y0|ylT*qyCxqRU!LOB6^qH&KQE_q-bC$aVBtXsO6GlE?A zkjntvt?57Kb=@7Yx-BJ#gu-CT#}J-QG^MH7S)E`Yq<@TYw6~}!3k4P-*|6vWh!9)1 z@g1eTL28Ewo_S=V_N(*6Sd}WBW!zPPZl@++gR7oDee2qV{(V#pRWa8f7j(?P?Cd6P zWRCd|G%QuC1`x2obDX2cdQ4GBZq-I~cC+2mbQV}|`1lU_<+Cq;aOx_@d~q4$AybOn zPT4ToxaSs^?LWQR3~`3Gl;e%1ZX&IgEIKBAID#2l@o|Qoj<1>ax)$>;`_?LLH5`CQ zEUZ8p(PT+5B#@<{WJa?SN4TI!hz3%2A%pMwiK#~iNh7m}id8aG!k9ri;U-!M#hwB4 z77XbL8r3D$VpGK+t-)Pc^(RPF4xwQaU2cdYBdM^~d;JSza)l!DzFQAYH_x0&_ZAJL zn?CaJWDeW3J{#jYbk_I<_9J$@#q=|VMs-^H9M91`8X4o)9ke_%9^awtVvEW~joBm) z%@{kK){fu}hPuRI&G8Q2Hzv09X}e@b=tMuN4Z$M0NC>~QO|Za-UMS4A?E{FFB;5Zh z+iYk}2rx8Pxppx)fpJoS(siW0^Z5r$OKT%djP<2t%BC!$q7tqq6AA<&IoMV534?j9 zl`y8K;HOF&-KfqiT`qcsSYE#d z>uWgh$UoO@<9Wg{cu*+ybu9h0JMTp+@36~^FjV$(eIS0E07kFgIkU=PZ(!WRSD!sB z_PWB@xkz!J=Ew2ayRX}{(%&ZPATEzNI<sv+Iz`Hr~s^2xzcgj z-oj5X%IVq|84jbBd`p6^V1|KcofO_VX{+L(F>~8&LoAXG@q6j1B-3$kgJ3skByC7I zp2uMd(mBO|*bgH5)%$ z8{a#1j*UEuGowR_DFs`qJJit5uWsyE*SC^C_Kbn!gokm;qN86ULcwunztE0Zt_bUF z$6&fDeGU>4igkLXjnWu$KuF)=wQh|mTy&^G)S!|__O*2Bm&|vhi`GDjhRC?e(&wO) zl(#~m^ccx^@DTQke+7w?t_92z1N%T(#G`0kq|_O!MKdGG)vt) zeD%&dl}<79;}74sx#~{ymbW9CzkGUa(!j)pF#-a=TrznKn0JD+U_j0D z_+WQbT4~Y*O{02YByZqKHIwM+6AW{B`gxF{C`bW?0gdD{;J~9R9WVqV9jok)t7rB= zJ8K4#?PD%R@uEPJ%MePMlN2JM>{DQ&=r5!ZtEGBaQIZBQG*#J5X{UA%c8?FapDb^l zrv2H^D%^18$K1E>0(W8CGH)Wgy8K|jF`%mUXm-W_++4KagGLIz(}+2Y17+QkZhN>u zQTD=)-Gkf2hrq!0k>n6T?sYGHDvUc9pB@^kaI$_I8WHxyF-ywH8x}KHO@l5tZ-|iZ z;KlAFX?}}^DNY0!o#Z?V%M#K`FihaBh*G101|p2Y4@OFtlp@P?9V1wC2V&KO76fsq zQNVDeLno5UQD80*MX;%r#9dkyMYT{=jwHfBtXF(NzMQV*>R=8MkC5HnBRGHq7oK4_ z`Q?1&>#yJ6+On$_7(^?-cY|$U^-SN-(lhQM#%Os8f^Td8H{!Qfv}N>z^e)oBxG{F# z5~ssGqmKvULSWL)-aRyfhSQq|BNwNQE!r`oC~PqH49L!%1*^&n=|BoXaG@og*h-!| zp_&;;2h*M+*5pRm(Xmj%w=Dt&!I?1ZBteqT$Xk0SELc))f9kR#btZ;$%xy_9WUy;! z!i^M?0n$3L(%((WC6%985uql%Fc->dVab&h0ES`#j8B|%vdo0?CJ(5Fp_DLofq|h4 z8CCwU`1?A$bUh~FDqVJuFQbSd`Ua7r9Bjs*4_4F_lfIOGRINqVTNkbptdhxHf0xM- zs~+QW2=stD?(*}`pD~E`A~4!k2Xq-|hDWyTbe6_~yGw5K^)JBU>3k?45GPfBy?hx=Uu~9+R+yl=fKza$2C%khTYz}Yqt3~X$z!=qscC~FPz#P5r!T%n zgNGv{=qJBHn=N+g)xoG=56xgxiC)e)y6l-gDu>i?wOx!3sCht=Txh262{1>n$G)p# ztlC!UO8g^Ar=T*~8Vchcc1jrisEZ^R*(kA`*-9Z15Tzugpyey}ADXjivqN^7g-Q_u z3}~bRiVp$}-QW)|t*7!$eKTFCu|&vbSP&#l9t#!>6nOda5pB%sg)l-hj+c&ko2hIP zb)W8WflM`npVn$MqPP(*D8UHd{iuqT@DuY37S}^Tc-rf_sYpo1CieoF!^VA@N^B)j1weep%0gfGE=!_m&L8t z*6KApD>S&wH1-s*2~q!eM+d!Np%_0+4V8M5 zf`Ndc9;q38n3XbSNf?%^d%{3$M|+KEMI6eMr;s(u5kfe1gkq=@!J;;*d@^9^ogjpr z^3176?+|9l4ZhJ0gU-;#8uFYuA}27<JSWzkJy-vbSO#s)ea_)BjcR!n;9(~a-Z|qs!fTZ45c!SUG?u_@^Uzp zSy&`rwu0n>wS=Kwh({|941_iFsI-QvoTwSFNXcJPj7eEpJngnn>(<`=b8o#(6uNys ztXCMv_= z)$}Q@wBojp3g&kcPt$3y^lmXd$qk|+7nn*$MZQ0x7MYWYTvS)|9dT)hC(}qRzQ`W> z5R1iFI%9jSxSMhM4Ia@CtcxswF+qf(3&(vgO_ifk4|B(j$R7VIH{@j6(LJm^>P9bA zeWjHwA9}X=@)1U=DmZ9tuD9^xxqhYH;xp(Bxxmew-#=?x2o2)_!-i~cE3ohiRaq`e zujC%5w7mK!6WS7?0Sb5gVwshw3Kn+2mZes}s8Oro+HS|LI*wCL?HS?&nS+|9aUXN1Q{ zF!+@n-Vs)cmhDJ;WkH=ABknQ@1I-WzFr@JG>5*nC1S>T{GbqRag9&N>{?7@8B1rI85NQ_9io*YoM`6@4`FVNMRURyGJ==DsKtxWf{iGV0 z!ETZk19|fOgSiN_h|-8W(q*UOVA{!DhN#cm+pkcM>@2RW9o^lJzL6kslJfEFKvodJ zB6#>>z+f^H53LwTK>z%dh0BME0EfkLD}u4eFCVe|2Tzrhg(EtRPUW)XmpRk=RoqWI z-T5W%m&CU1V8z)_Y6q3B+b+14FRJRe42f^9H|lF45Zr0uNDqK1S@Qn$1 zS4WOiz=4F_H!>=${3jTQFURCfJVIlo6Gga{fIfn3xKVC2xOJtTEA zWUv%Jg~2xuglW7|hH)#m#*ydYyMX}Z`BN3*^glR4q|yNjFbqkztr|CrL2uPY#+HDLmW%b*N<^l-9$mN_+ z7VDi+6l7DipqPaB_MQwj)ddWPcobQL2*mB;u+Hxu zT`tNSI20;ZLE;x0GEeK<{?~tAF!~r;& zqdhEn(PWCCO$a(75(fdq^D z!hnXwb-j~X*$N(f+#=9P$-T$-=#bq|xcKD1|N8aX{wHdOopKgWPGD%JLX4D&nUj@L z1;Z+0jO)wcEmC}A=?LR4g(vuLgQ-VH7%8hDJhT0ZkdX_c@259O{!hGBZoU9*;;Y8LVm(vv)b<0R^wWz?k}BLbWHEs?mYESU{IK*hpXK`Jhq!< z1PxETTj#Kx8o^YGQ>WQ&GdE$x+~1WZPjPHaJ0*g2t%q?)2B_^a770e|eJ2JvG~>gj z_}hrPy9j0pmqEoLR3nAPY@I7Pc4#6i^PfEU%m4oAXiXGhsB$IUt0YxGQV)?Zl4__K zavv79wJys-7>R}@BPq-YgSsu5cVMuT4u?<v%s|ptfcznk}PIZwljn3Lu8U zP&G7EVInvR%0)t=3-F07fB}mm^Z^GB5p_fsqf!{pkW(N0@XD3%{l`x@?07Ej z+lgwNdpu;buHNE;H^hv=ymQs875OPDww@m<9FsDOaory^JXK!U2izohR}*Tz$#K7K zWMyk(iJ7YBC8@eoTQ3W%Z%KS^2%{8+dXhB*udDcF0Rt)_z=)*7bj?Xq5hT~sumzG& z$MQuYE+mV>sTR&RqdD#8#23nU7KXJ9<}D0%NA^9%Ih=*3e-9dVXS(XGhh6iv`?{^%EP zyn5q06TQ9r-l4$si#EJ~5cWSe`!ca59X(;xMKUrZ0r4!t1sY-Ufq?oWK7D_m2jS`n@ftrVYj1 z%wjg3_-z1VMPudhv;Jt*PZ_X_#*-`cEsSOTLgR>hbaov{wqRwVWma0D6@ddR--Qvb zzeu}C1u`v?L~%kGUZ|=>)LK-KuA!~pA+a$1yvE@lrHyJ>5RrvFZIjeFIna;vn`PO0{V>6Zuy*s|CUI1n@y_*9z0A!K8n~z`TC%cx zT(5G7eBjEd3NfxOe5$Uti)0W=S35O0{^rl$9L=TH3}jH2QGv_rA4BAoj4#DrrjD^M z-VYQ`ywL9FPm)D%HDEYoK|wFFVz8jHU@yaJKgV;njK+dR0gBTM+bLtp&OB|Oz_8&o z=yL`!Bhpq|T}_ z!Ce#og<;WFArVnxOD6q@bD}1dU_|X?<>_Dl`sbs$fiV1!fHJj%!yWls7@-~b=zyVd zN~v8unAnR6Aq_+sgdvJOVOXpPW8^N zeqAv5wse>t;)j8r;qb%fLEM|@SWtEGthQ>V<^~uK`$7%^gq|A?{sD+p5n;3qWZX>R zPqTgDv+HlZd-XThqNwJ4P7(@w(%QJ;f^~82txoYZ97v(n-5<0}FjW#e@6OIuqkLti zrY~+<;BciPsWZ|vWbohK)*(yXD|O`?U_8ogGPxQWEP%nUm1txb=|Ry-Wu*uV*{N$c zWWnu2`}&EtR!Rv|zNe*+PcSjDcH$nCT0!a^7RvL0^A8s1>+N*-#Wb*(Y6dJ6nIt6n zn;F)Px3z^($FP81AvM^{J%9st;!0qM0~SQLPebGpW~wYJ6vJcl$&Q|xng`6TU!laB z`d_+4M)QqUy>@oN1KnSkhtn+5>BSt^RYye8$V&p-868`^uyY3vElnAVYQJ&|4{lbM z>*EHTpvi`68XYyBe)A2(2SWlzZWI^B|5puBBp8`SC-qc`!q?>yXkfs&@o4tcR;d_X zv?`4mqhT1R=set_GR2`-CmDGfiVkSD3V5gwcu?jGZ%{tx$ZPE%(p@B9D&002ovPDHLk FV1kJ4Ed~Gp literal 0 HcmV?d00001 diff --git a/demo/web-desktop/assets/spine/native/69/69163ff4-f84e-4d78-8ea7-946f62007fcd.b8970.atlas b/demo/web-desktop/assets/spine/native/69/69163ff4-f84e-4d78-8ea7-946f62007fcd.b8970.atlas new file mode 100644 index 00000000..30e87476 --- /dev/null +++ b/demo/web-desktop/assets/spine/native/69/69163ff4-f84e-4d78-8ea7-946f62007fcd.b8970.atlas @@ -0,0 +1,209 @@ + +huatuo.png +size: 701,208 +format: RGBA8888 +filter: Linear,Linear +repeat: none +Body + rotate: false + xy: 487, 72 + size: 90, 91 + orig: 90, 91 + offset: 0, 0 + index: -1 +Eye + rotate: false + xy: 473, 44 + size: 45, 24 + orig: 45, 24 + offset: 0, 0 + index: -1 +Eye-beiji + rotate: false + xy: 360, 60 + size: 57, 23 + orig: 57, 23 + offset: 0, 0 + index: -1 +Eye-fennu + rotate: false + xy: 570, 39 + size: 39, 21 + orig: 39, 21 + offset: 0, 0 + index: -1 +Eye-shengli + rotate: false + xy: 421, 64 + size: 45, 19 + orig: 45, 19 + offset: 0, 0 + index: -1 +Eye-siwang + rotate: false + xy: 522, 48 + size: 44, 20 + orig: 44, 20 + offset: 0, 0 + index: -1 +Head + rotate: false + xy: 581, 64 + size: 89, 99 + orig: 89, 99 + offset: 0, 0 + index: -1 +L-Forearm + rotate: false + xy: 613, 29 + size: 32, 31 + orig: 32, 31 + offset: 0, 0 + index: -1 +L-Hand + rotate: false + xy: 674, 150 + size: 27, 26 + orig: 27, 26 + offset: 0, 0 + index: -1 +L-Lowerleg + rotate: false + xy: 674, 117 + size: 26, 29 + orig: 26, 29 + offset: 0, 0 + index: -1 +L-Thigh + rotate: false + xy: 649, 25 + size: 29, 35 + orig: 29, 35 + offset: 0, 0 + index: -1 +L-Upperarm + rotate: false + xy: 318, 7 + size: 50, 49 + orig: 50, 49 + offset: 0, 0 + index: -1 +Mouth + rotate: false + xy: 682, 36 + size: 18, 10 + orig: 18, 10 + offset: 0, 0 + index: -1 +Mouth-beiji + rotate: false + xy: 470, 72 + size: 13, 11 + orig: 13, 11 + offset: 0, 0 + index: -1 +Mouth-fennu + rotate: false + xy: 674, 66 + size: 22, 17 + orig: 22, 17 + offset: 0, 0 + index: -1 +Mouth-shengli + rotate: false + xy: 581, 17 + size: 20, 18 + orig: 20, 18 + offset: 0, 0 + index: -1 +Mouth-siwang + rotate: false + xy: 682, 50 + size: 18, 12 + orig: 18, 12 + offset: 0, 0 + index: -1 +Pelvis + rotate: false + xy: 641, 180 + size: 43, 28 + orig: 43, 28 + offset: 0, 0 + index: -1 +R-Forearm + rotate: false + xy: 473, 9 + size: 38, 31 + orig: 38, 31 + offset: 0, 0 + index: -1 +R-Hand + rotate: false + xy: 549, 12 + size: 28, 23 + orig: 28, 23 + offset: 0, 0 + index: -1 +R-Lowerleg + rotate: false + xy: 674, 87 + size: 26, 26 + orig: 26, 26 + offset: 0, 0 + index: -1 +R-Thigh + rotate: false + xy: 515, 4 + size: 30, 36 + orig: 30, 36 + offset: 0, 0 + index: -1 +R-Upperarm + rotate: false + xy: 431, 12 + size: 38, 48 + orig: 38, 48 + offset: 0, 0 + index: -1 +SE-daoguang + rotate: false + xy: 0, 0 + size: 239, 208 + orig: 239, 208 + offset: 0, 0 + index: -1 +SE-guang + rotate: false + xy: 360, 87 + size: 123, 121 + orig: 123, 121 + offset: 0, 0 + index: -1 +Weapon + rotate: false + xy: 243, 10 + size: 71, 46 + orig: 71, 46 + offset: 0, 0 + index: -1 +beilou + rotate: false + xy: 243, 60 + size: 113, 148 + orig: 113, 148 + offset: 0, 0 + index: -1 +hulu + rotate: false + xy: 372, 4 + size: 55, 52 + orig: 55, 52 + offset: 0, 0 + index: -1 +shadow + rotate: false + xy: 487, 167 + size: 150, 41 + orig: 150, 41 + offset: 0, 0 + index: -1 diff --git a/demo/web-desktop/assets/spine/native/70/702455ac-9b92-4dd7-b143-cb02342dbe48.7b3fa.png b/demo/web-desktop/assets/spine/native/70/702455ac-9b92-4dd7-b143-cb02342dbe48.7b3fa.png new file mode 100644 index 0000000000000000000000000000000000000000..791d8fad6ad84d74c27b8f1ee1a2f3b5423ffd94 GIT binary patch literal 138343 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

JQ>TSG8IePfoDI)`4 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 z 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 VxEs7{IamMy002ovPDHLkV1lM^cN+iz literal 0 HcmV?d00001 diff --git a/demo/web-desktop/assets/spine/native/71/71561142-4c83-4933-afca-cb7a17f67053.c06a9.png b/demo/web-desktop/assets/spine/native/71/71561142-4c83-4933-afca-cb7a17f67053.c06a9.png new file mode 100644 index 0000000000000000000000000000000000000000..0556b76119fa785e777d114f9e5489793ac2275a GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU3?z3ec*FxKxd5LK*Sfm8riO;v+S(d0s0V_& zIv}^Hu@T6;y&^0HsFJ-T$S?Ry|LLQCY&moH?~eltS$n!ThE&{oduAgqg96VH2X-OB zZ}Btw_&zf4c|CdMg8hQ7TS5-RIsM+XKPIUS1o%5%En`!+6sS|?-?Kn_Y0KYPEI?xz NJYD@<);T3K0RZ7fKqmkI literal 0 HcmV?d00001 diff --git a/demo/web-desktop/assets/spine/native/80/804e11b5-bf4f-4a78-ac4a-8443e7166be1.fd38c.png b/demo/web-desktop/assets/spine/native/80/804e11b5-bf4f-4a78-ac4a-8443e7166be1.fd38c.png new file mode 100644 index 0000000000000000000000000000000000000000..15141211846bb82c1130e24586e4a3a20526c6a5 GIT binary patch literal 32648 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

1Qq*^8k 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 literal 0 HcmV?d00001 diff --git a/demo/web-desktop/assets/spine/native/c1/c11dfdd2-97c6-409c-9c0f-fdfa681f16a9.d86d7.png b/demo/web-desktop/assets/spine/native/c1/c11dfdd2-97c6-409c-9c0f-fdfa681f16a9.d86d7.png new file mode 100644 index 0000000000000000000000000000000000000000..5c3b67dbb2ff22e772988276bd9ea50393414dfa GIT binary patch literal 79283 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 xrlqaVvvZwiO#aXJiW*H^Dz-M)SM^XJcBzI^%n z_wWDz|AFjVw{8KsckbMI_UxISo=hZAF?&gnU+~AjpC&f3b!~Vb76BA;@N{tuskrs_ z%t28GMUEpE7 literal 0 HcmV?d00001 diff --git a/demo/web-desktop/assets/text-render/config.697bc.json b/demo/web-desktop/assets/text-render/config.697bc.json new file mode 100644 index 00000000..69996f47 --- /dev/null +++ b/demo/web-desktop/assets/text-render/config.697bc.json @@ -0,0 +1,54 @@ +{ + "paths": { + "f4jvTRdINIaICWEVrgQxx2": [ + "char-mode/char-mode", + "cc.Prefab" + ], + "e2Z8EqOaxB256X3o4ZbClt": [ + "high-dpi/high-dpi", + "cc.Prefab" + ] + }, + "uuids": [ + "f4jvTRdINIaICWEVrgQxx2", + "e2Z8EqOaxB256X3o4ZbClt", + "ecpdLyjvZBwrvm+cedCcQy", + "5cO7kybDxGj4ipyMYdRYZB", + "5f5dyqtRNNxaFmVzYns6FZ", + "a2MjXRFdtLlYQ5ouAFv/+R" + ], + "scenes": {}, + "redirect": [ + "ecpdLyjvZBwrvm+cedCcQy", + 0, + "5cO7kybDxGj4ipyMYdRYZB", + 1, + "5f5dyqtRNNxaFmVzYns6FZ", + 1, + "a2MjXRFdtLlYQ5ouAFv/+R", + 1 + ], + "deps": [ + "internal", + "main" + ], + "packs": { + "0dccb646b": [ + "e2Z8EqOaxB256X3o4ZbClt", + "f4jvTRdINIaICWEVrgQxx2" + ] + }, + "name": "text-render", + "importBase": "import", + "nativeBase": "native", + "debug": true, + "isZip": false, + "encrypted": false, + "versions": { + "import": [ + "0dccb646b", + "af549" + ], + "native": [] + } +} \ No newline at end of file diff --git a/demo/web-desktop/assets/text-render/import/0d/0dccb646b.af549.json b/demo/web-desktop/assets/text-render/import/0d/0dccb646b.af549.json new file mode 100644 index 00000000..0820e7af --- /dev/null +++ b/demo/web-desktop/assets/text-render/import/0d/0dccb646b.af549.json @@ -0,0 +1,2059 @@ +[ + 1, + [ + "ecpdLyjvZBwrvm+cedCcQy", + "5f5dyqtRNNxaFmVzYns6FZ", + "a2MjXRFdtLlYQ5ouAFv/+R", + "5cO7kybDxGj4ipyMYdRYZB" + ], + [ + "node", + "_spriteFrame", + "root", + "data", + "_parent", + "_scrollView", + "charFont3", + "charFont2", + "charFont1", + "bitmapFont3", + "bitmapFont2", + "bitmapFont1" + ], + [ + [ + "cc.Node", + [ + "_name", + "_prefab", + "_children", + "_components", + "_contentSize", + "_trs", + "_parent", + "_anchorPoint" + ], + 2, + 4, + 2, + 9, + 5, + 7, + 1, + 5 + ], + [ + "cc.Widget", + [ + "_alignFlags", + "_left", + "_originalWidth", + "_originalHeight", + "_right", + "alignMode", + "_top", + "node" + ], + -4, + 1 + ], + [ + "cc.Label", + [ + "_string", + "_fontSize", + "_N$horizontalAlign", + "_N$verticalAlign", + "_N$cacheMode", + "_lineHeight", + "_N$enableRetina", + "_N$overflow", + "node", + "_materials" + ], + -5, + 1, + 3 + ], + [ + "cc.Sprite", + [ + "_sizeMode", + "_type", + "_isTrimmedMode", + "node", + "_materials", + "_spriteFrame" + ], + 0, + 1, + 3, + 6 + ], + [ + "cc.Label", + [ + "_string", + "_fontSize", + "_N$horizontalAlign", + "_N$verticalAlign", + "_N$cacheMode", + "_materials", + "_lineHeight", + "_N$overflow", + "node" + ], + -5, + 1 + ], + [ + "cc.Node", + [ + "_name", + "_parent", + "_children", + "_components", + "_prefab", + "_contentSize", + "_color", + "_anchorPoint", + "_trs" + ], + 2, + 1, + 2, + 12, + 4, + 5, + 5, + 5, + 7 + ], + [ + "cc.Node", + [ + "_name", + "_parent", + "_components", + "_prefab", + "_contentSize", + "_anchorPoint", + "_trs" + ], + 2, + 1, + 2, + 4, + 5, + 5, + 7 + ], + [ + "cc.PrefabInfo", + [ + "fileId", + "root" + ], + 2, + 1 + ], + [ + "cc.Prefab", + [ + "_name" + ], + 2 + ], + [ + "cc.ToggleContainer", + [ + "node" + ], + 3, + 1 + ], + [ + "cc.Layout", + [ + "_resize", + "_N$layoutType", + "_N$startAxis", + "_N$paddingTop", + "_N$spacingY", + "node", + "_layoutSize" + ], + -2, + 1, + 5 + ], + [ + "cc.Scrollbar", + [ + "enableAutoHide", + "_N$direction", + "node", + "_N$handle" + ], + 1, + 1, + 1 + ], + [ + "cc.ScrollView", + [ + "horizontal", + "brake", + "bounceDuration", + "_N$horizontalScrollBar", + "node", + "_N$content", + "_N$verticalScrollBar" + ], + -1, + 1, + 1, + 1 + ], + [ + "59d30IUYIJAq5bVJwTwWxC1", + [ + "node", + "bitmapFont1", + "bitmapFont2", + "bitmapFont3", + "charFont1", + "charFont2", + "charFont3" + ], + 3, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ] + ], + [ + [ + 7, + 0, + 1, + 2 + ], + [ + 0, + 0, + 6, + 3, + 1, + 4, + 5, + 2 + ], + [ + 6, + 0, + 1, + 2, + 3, + 4, + 6, + 2 + ], + [ + 1, + 0, + 2, + 3, + 7, + 4 + ], + [ + 4, + 0, + 1, + 6, + 2, + 3, + 4, + 5, + 8, + 8 + ], + [ + 2, + 0, + 1, + 5, + 2, + 3, + 4, + 8, + 9, + 7 + ], + [ + 1, + 0, + 1, + 6, + 7, + 4 + ], + [ + 8, + 0, + 2 + ], + [ + 0, + 0, + 2, + 3, + 1, + 4, + 5, + 2 + ], + [ + 0, + 0, + 2, + 3, + 1, + 4, + 7, + 5, + 2 + ], + [ + 0, + 0, + 6, + 2, + 3, + 1, + 4, + 2 + ], + [ + 5, + 0, + 1, + 2, + 3, + 4, + 6, + 5, + 2 + ], + [ + 5, + 0, + 1, + 2, + 3, + 4, + 5, + 7, + 8, + 2 + ], + [ + 6, + 0, + 1, + 2, + 3, + 4, + 5, + 2 + ], + [ + 1, + 0, + 7, + 2 + ], + [ + 1, + 0, + 1, + 4, + 2, + 7, + 5 + ], + [ + 1, + 5, + 0, + 1, + 3, + 7, + 5 + ], + [ + 7, + 1, + 1 + ], + [ + 9, + 0, + 1 + ], + [ + 10, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 6 + ], + [ + 3, + 0, + 2, + 3, + 4, + 5, + 3 + ], + [ + 3, + 1, + 0, + 3, + 4, + 5, + 3 + ], + [ + 3, + 1, + 0, + 3, + 4, + 3 + ], + [ + 11, + 0, + 1, + 2, + 3, + 3 + ], + [ + 12, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 5 + ], + [ + 0, + 0, + 6, + 2, + 1, + 5, + 2 + ], + [ + 4, + 0, + 1, + 2, + 3, + 4, + 5, + 8, + 7 + ], + [ + 4, + 0, + 1, + 6, + 2, + 3, + 7, + 4, + 5, + 8, + 9 + ], + [ + 2, + 0, + 1, + 5, + 2, + 3, + 4, + 6, + 8, + 9, + 8 + ], + [ + 2, + 0, + 1, + 2, + 3, + 7, + 4, + 6, + 8, + 9, + 8 + ], + [ + 2, + 0, + 1, + 2, + 3, + 7, + 4, + 8, + 9, + 7 + ], + [ + 13, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 1 + ] + ], + [ + [ + [ + [ + 7, + "high-dpi" + ], + [ + 8, + "high-dpi", + [ + -3 + ], + [ + [ + 14, + 45, + -2 + ] + ], + [ + 17, + -1 + ], + [ + 5, + 960, + 600 + ], + [ + 480, + 300, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 9, + "content", + [ + -7, + -8 + ], + [ + [ + 18, + -4 + ], + [ + 19, + 1, + 2, + 1, + 30, + 20, + -5, + [ + 5, + 785.815, + 90 + ] + ], + [ + 15, + 41, + 87.09249999999997, + 87.09249999999997, + 220, + -6 + ] + ], + [ + 0, + "98B5382ANHgKQw5BkMsWAq", + 1 + ], + [ + 5, + 785.815, + 90 + ], + [ + 0, + 0.5, + 1 + ], + [ + 0, + 300, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 11, + "sv", + 1, + [ + -12, + -13 + ], + [ + [ + -9, + [ + 3, + 45, + 240, + 250, + -10 + ], + [ + 20, + 0, + false, + -11, + [ + 7 + ], + 8 + ] + ], + 1, + 4, + 4 + ], + [ + 0, + "b5RxDsAgFOW6xOyBdbz2rI", + 1 + ], + [ + 4, + 4279834905 + ], + [ + 5, + 960, + 600 + ] + ], + [ + 25, + "texts", + 2, + [ + -14, + -15, + -16, + -17 + ], + [ + 0, + "fewdQzAVFIpoQlwtbBswLJ", + 1 + ], + [ + 0, + -90, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 12, + "scrollBar", + 3, + [ + -21 + ], + [ + [ + -18, + [ + 16, + 0, + 37, + 350.07654921020657, + 237, + -19 + ], + [ + 21, + 1, + 0, + -20, + [ + 5 + ], + 6 + ] + ], + 1, + 4, + 4 + ], + [ + 0, + "c2cC2kA1NNeozY+5ZzkcSY", + 1 + ], + [ + 5, + 8, + 600 + ], + [ + 0, + 1, + 0.5 + ], + [ + 480, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 10, + "view", + 3, + [ + 2 + ], + [ + [ + 3, + 45, + 240, + 250, + -22 + ] + ], + [ + 0, + "645yltQ0dFpbIcIgDazPDc", + 1 + ], + [ + 5, + 960, + 600 + ] + ], + [ + 1, + "tips", + 2, + [ + [ + 26, + "左:未开启高 DPI 右:已开启高 DPI", + 16, + 1, + 1, + 2, + [ + null + ], + -23 + ], + [ + 6, + 17, + 95.11500000000001, + 30, + -24 + ] + ], + [ + 0, + "fbSLTYNutL174TDvzvU3nT", + 1 + ], + [ + 5, + 418.695, + 40 + ], + [ + 0, + -50, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "no", + 4, + [ + [ + 28, + "字", + 23, + 26, + 1, + 1, + 1, + 2, + -25, + [ + 0 + ] + ] + ], + [ + 0, + "0dRy5RFi9LTbsFqysUyw1W", + 1 + ], + [ + 5, + 23, + 32.76 + ], + [ + -145.912, + -105.262, + 0, + 0, + 0, + 0, + 1, + 10, + 10, + 1 + ] + ], + [ + 1, + "yes", + 4, + [ + [ + 5, + "字", + 23, + 26, + 1, + 1, + 1, + -26, + [ + 1 + ] + ] + ], + [ + 0, + "2d2KxVjshJJrHLV3IcXHEI", + 1 + ], + [ + 5, + 23, + 32.76 + ], + [ + 145.832, + -107.456, + 0, + 0, + 0, + 0, + 1, + 10, + 10, + 1 + ] + ], + [ + 1, + "no", + 4, + [ + [ + 29, + "诗歌(英語:Poetry)是用于反映生活和表达情感的文学体裁。", + 30, + 1, + 1, + 3, + 1, + 2, + -27, + [ + 2 + ] + ] + ], + [ + 0, + "faGaA/+ptFuZ3KY1Kamr/n", + 1 + ], + [ + 5, + 280.47, + 170.39999999999998 + ], + [ + -154.684, + -369.515, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "no", + 4, + [ + [ + 30, + "诗歌(英語:Poetry)是用于反映生活和表达情感的文学体裁。", + 30, + 1, + 1, + 3, + 1, + -28, + [ + 3 + ] + ] + ], + [ + 0, + "5fSeoF6Q9MZpcaQU2RV1Er", + 1 + ], + [ + 5, + 280.47, + 170.39999999999998 + ], + [ + 147.945, + -369.515, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 13, + "bar", + 5, + [ + -29 + ], + [ + 0, + "29pI3SelxAU6ODrNe5LS2g", + 1 + ], + [ + 5, + 8, + 30 + ], + [ + 0, + 1, + 0 + ] + ], + [ + 22, + 1, + 0, + 12, + [ + 4 + ] + ], + [ + 23, + false, + 1, + 5, + 13 + ], + [ + 24, + false, + 0.75, + 0.23, + null, + 3, + 2, + 14 + ] + ], + 0, + [ + 0, + 2, + 1, + 0, + 0, + 1, + 0, + -1, + 3, + 0, + 0, + 2, + 0, + 0, + 2, + 0, + 0, + 2, + 0, + -1, + 7, + 0, + -2, + 4, + 0, + -1, + 15, + 0, + 0, + 3, + 0, + 0, + 3, + 0, + -1, + 6, + 0, + -2, + 5, + 0, + -1, + 8, + 0, + -2, + 9, + 0, + -3, + 10, + 0, + -4, + 11, + 0, + -1, + 14, + 0, + 0, + 5, + 0, + 0, + 5, + 0, + -1, + 12, + 0, + 0, + 6, + 0, + 0, + 7, + 0, + 0, + 7, + 0, + 0, + 8, + 0, + 0, + 9, + 0, + 0, + 10, + 0, + 0, + 11, + 0, + -1, + 13, + 0, + 3, + 1, + 2, + 4, + 6, + 14, + 5, + 15, + 29 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + 1, + -1, + 1, + 1 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 2, + 3 + ] + ], + [ + [ + [ + 7, + "char-mode" + ], + [ + 8, + "char-mode", + [ + -10 + ], + [ + [ + 14, + 45, + -2 + ], + [ + 31, + -9, + -8, + -7, + -6, + -5, + -4, + -3 + ] + ], + [ + 17, + -1 + ], + [ + 5, + 960, + 600 + ], + [ + 480, + 300, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 9, + "content", + [ + -14, + -15, + -16, + -17, + -18, + -19, + -20, + -21 + ], + [ + [ + 18, + -11 + ], + [ + 19, + 1, + 2, + 1, + 30, + 20, + -12, + [ + 5, + 785.815, + 503.4 + ] + ], + [ + 15, + 41, + 87.09249999999997, + 87.09249999999997, + 220, + -13 + ] + ], + [ + 0, + "98B5382ANHgKQw5BkMsWAq", + 1 + ], + [ + 5, + 785.815, + 503.4 + ], + [ + 0, + 0.5, + 1 + ], + [ + 0, + 300, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 11, + "sv", + 1, + [ + -25, + -26 + ], + [ + [ + -22, + [ + 3, + 45, + 240, + 250, + -23 + ], + [ + 20, + 0, + false, + -24, + [ + 6 + ], + 7 + ] + ], + 1, + 4, + 4 + ], + [ + 0, + "b5RxDsAgFOW6xOyBdbz2rI", + 1 + ], + [ + 4, + 4279834905 + ], + [ + 5, + 960, + 600 + ] + ], + [ + 12, + "scrollBar", + 3, + [ + -30 + ], + [ + [ + -27, + [ + 16, + 0, + 37, + 350.07654921020657, + 237, + -28 + ], + [ + 21, + 1, + 0, + -29, + [ + 4 + ], + 5 + ] + ], + 1, + 4, + 4 + ], + [ + 0, + "c2cC2kA1NNeozY+5ZzkcSY", + 1 + ], + [ + 5, + 8, + 600 + ], + [ + 0, + 1, + 0.5 + ], + [ + 480, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 10, + "view", + 3, + [ + 2 + ], + [ + [ + 3, + 45, + 240, + 250, + -31 + ] + ], + [ + 0, + "645yltQ0dFpbIcIgDazPDc", + 1 + ], + [ + 5, + 960, + 600 + ] + ], + [ + 1, + "tips", + 2, + [ + [ + 4, + "使用 Bitmap 缓存模式不断显示随机的 3000 个常用字\n动态图集会回收废弃空间,Draw Call 依旧不变", + 16, + 20, + 1, + 1, + 2, + [ + null + ], + -32 + ], + [ + 6, + 17, + 95.11500000000001, + 30, + -33 + ] + ], + [ + 0, + "fbSLTYNutL174TDvzvU3nT", + 1 + ], + [ + 5, + 375.18, + 40 + ], + [ + 0, + -50, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "tips", + 2, + [ + [ + 27, + "使用 Char 缓存模式不断显示随机的 3000 个常用字\n字符图集会回收废弃空间,Draw Call 依旧不变", + 16, + 20, + 1, + 2, + 1, + 2, + [ + null + ], + -34 + ], + [ + 6, + 17, + 95.11500000000001, + 263.40000000000003, + -35 + ] + ], + [ + 0, + "bdNnnna5tPoKRQC8z61Php", + 1 + ], + [ + 5, + 375.18, + 90 + ], + [ + 0, + -308.40000000000003, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 2, + "label1", + 2, + [ + -36 + ], + [ + 0, + "fbPuhihjlPergAoZdl2Bch", + 1 + ], + [ + 5, + 58.725, + 37.8 + ], + [ + 0, + -108.9, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 5, + "Label", + 24, + 30, + 1, + 1, + 1, + 8, + [ + 0 + ] + ], + [ + 2, + "label2", + 2, + [ + -37 + ], + [ + 0, + "7cjLO2MhtBp4iz/iW57i6X", + 1 + ], + [ + 5, + 58.725, + 37.8 + ], + [ + 0, + -166.70000000000002, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 5, + "Label", + 24, + 30, + 1, + 1, + 1, + 10, + [ + 1 + ] + ], + [ + 2, + "label3", + 2, + [ + -38 + ], + [ + 0, + "53kEDs2ONGbrTwZ/3fkrnr", + 1 + ], + [ + 5, + 58.725, + 37.8 + ], + [ + 0, + -224.50000000000003, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 5, + "Label", + 24, + 30, + 1, + 1, + 1, + 12, + [ + 2 + ] + ], + [ + 2, + "label1", + 2, + [ + -39 + ], + [ + 0, + "53ohPrY4VPPaTL8Y+GWL2b", + 1 + ], + [ + 5, + 58.73, + 30 + ], + [ + 0, + -388.40000000000003, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 4, + "Label", + 24, + 30, + 1, + 1, + 2, + [ + null + ], + 14 + ], + [ + 2, + "label2", + 2, + [ + -40 + ], + [ + 0, + "ecP5qke91J8JmKY2vRuQZb", + 1 + ], + [ + 5, + 58.73, + 30 + ], + [ + 0, + -438.40000000000003, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 4, + "Label", + 24, + 30, + 1, + 1, + 2, + [ + null + ], + 16 + ], + [ + 2, + "label3", + 2, + [ + -41 + ], + [ + 0, + "f0KGVrovlF0qoYJg33NKVZ", + 1 + ], + [ + 5, + 58.73, + 30 + ], + [ + 0, + -488.40000000000003, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 4, + "Label", + 24, + 30, + 1, + 1, + 2, + [ + null + ], + 18 + ], + [ + 13, + "bar", + 4, + [ + -42 + ], + [ + 0, + "29pI3SelxAU6ODrNe5LS2g", + 1 + ], + [ + 5, + 8, + 30 + ], + [ + 0, + 1, + 0 + ] + ], + [ + 22, + 1, + 0, + 20, + [ + 3 + ] + ], + [ + 23, + false, + 1, + 4, + 21 + ], + [ + 24, + false, + 0.75, + 0.23, + null, + 3, + 2, + 22 + ] + ], + 0, + [ + 0, + 2, + 1, + 0, + 0, + 1, + 0, + 6, + 19, + 0, + 7, + 17, + 0, + 8, + 15, + 0, + 9, + 13, + 0, + 10, + 11, + 0, + 11, + 9, + 0, + 0, + 1, + 0, + -1, + 3, + 0, + 0, + 2, + 0, + 0, + 2, + 0, + 0, + 2, + 0, + -1, + 6, + 0, + -2, + 8, + 0, + -3, + 10, + 0, + -4, + 12, + 0, + -5, + 7, + 0, + -6, + 14, + 0, + -7, + 16, + 0, + -8, + 18, + 0, + -1, + 23, + 0, + 0, + 3, + 0, + 0, + 3, + 0, + -1, + 5, + 0, + -2, + 4, + 0, + -1, + 22, + 0, + 0, + 4, + 0, + 0, + 4, + 0, + -1, + 20, + 0, + 0, + 5, + 0, + 0, + 6, + 0, + 0, + 6, + 0, + 0, + 7, + 0, + 0, + 7, + 0, + -1, + 9, + 0, + -1, + 11, + 0, + -1, + 13, + 0, + -1, + 15, + 0, + -1, + 17, + 0, + -1, + 19, + 0, + -1, + 21, + 0, + 3, + 1, + 2, + 4, + 5, + 22, + 5, + 23, + 42 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21 + ], + [ + -1, + -1, + -1, + -1, + -1, + 1, + -1, + 1, + 1 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 2, + 3 + ] + ] + ] +] \ No newline at end of file diff --git a/demo/web-desktop/assets/text-render/index.697bc.js b/demo/web-desktop/assets/text-render/index.697bc.js new file mode 100644 index 00000000..0eae7191 --- /dev/null +++ b/demo/web-desktop/assets/text-render/index.697bc.js @@ -0,0 +1,122 @@ +window.__require = function e(t, n, r) { + function s(o, u) { + if (!n[o]) { + if (!t[o]) { + var b = o.split("/"); + b = b[b.length - 1]; + if (!t[b]) { + var a = "function" == typeof __require && __require; + if (!u && a) return a(b, !0); + if (i) return i(b, !0); + throw new Error("Cannot find module '" + o + "'"); + } + o = b; + } + var f = n[o] = { + exports: {} + }; + t[o][0].call(f.exports, function(e) { + var n = t[o][1][e]; + return s(n || e); + }, f, f.exports, e, t, n, r); + } + return n[o].exports; + } + var i = "function" == typeof __require && __require; + for (var o = 0; o < r.length; o++) s(r[o]); + return s; +}({ + "char-mode": [ function(require, module, exports) { + "use strict"; + cc._RF.push(module, "59d30IUYIJAq5bVJwTwWxC1", "char-mode"); + "use strict"; + var __extends = this && this.__extends || function() { + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || { + __proto__: [] + } instanceof Array && function(d, b) { + d.__proto__ = b; + } || function(d, b) { + for (var p in b) Object.prototype.hasOwnProperty.call(b, p) && (d[p] = b[p]); + }; + return extendStatics(d, b); + }; + return function(d, b) { + extendStatics(d, b); + function __() { + this.constructor = d; + } + d.prototype = null === b ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + }(); + var __decorate = this && this.__decorate || function(decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : null === desc ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if ("object" === typeof Reflect && "function" === typeof Reflect.decorate) r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) (d = decorators[i]) && (r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r); + return c > 3 && r && Object.defineProperty(target, key, r), r; + }; + Object.defineProperty(exports, "__esModule", { + value: true + }); + var chars_1 = require("../chars"); + var _a = cc._decorator, ccclass = _a.ccclass, property = _a.property; + var CharMode = function(_super) { + __extends(CharMode, _super); + function CharMode() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.bitmapFont1 = null; + _this.bitmapFont2 = null; + _this.bitmapFont3 = null; + _this.charFont1 = null; + _this.charFont2 = null; + _this.charFont3 = null; + return _this; + } + CharMode.prototype.onLoad = function() { + var _this = this; + this.bitmapFont1.string = this.getRandomText(15); + this.bitmapFont2.string = this.getRandomText(15); + this.bitmapFont3.string = this.getRandomText(15); + this.charFont1.string = this.getRandomText(15); + this.charFont2.string = this.getRandomText(15); + this.charFont3.string = this.getRandomText(15); + this.schedule(function() { + _this.bitmapFont1.string = _this.getRandomText(15); + _this.bitmapFont2.string = _this.getRandomText(15); + _this.bitmapFont3.string = _this.getRandomText(15); + _this.charFont1.string = _this.getRandomText(15); + _this.charFont2.string = _this.getRandomText(15); + _this.charFont3.string = _this.getRandomText(15); + }, .1); + }; + CharMode.prototype.getRandomText = function(length) { + var str = ""; + while (str.length < length) str += chars_1.chars[Math.floor(Math.random() * chars_1.chars.length)]; + return str; + }; + __decorate([ property(cc.Label) ], CharMode.prototype, "bitmapFont1", void 0); + __decorate([ property(cc.Label) ], CharMode.prototype, "bitmapFont2", void 0); + __decorate([ property(cc.Label) ], CharMode.prototype, "bitmapFont3", void 0); + __decorate([ property(cc.Label) ], CharMode.prototype, "charFont1", void 0); + __decorate([ property(cc.Label) ], CharMode.prototype, "charFont2", void 0); + __decorate([ property(cc.Label) ], CharMode.prototype, "charFont3", void 0); + CharMode = __decorate([ ccclass ], CharMode); + return CharMode; + }(cc.Component); + exports.default = CharMode; + cc._RF.pop(); + }, { + "../chars": "chars" + } ], + chars: [ function(require, module, exports) { + "use strict"; + cc._RF.push(module, "0f373c9jcRAy6NDXndhSRxT", "chars"); + "use strict"; + Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.chars = void 0; + exports.chars = "\u7684\u4e00\u662f\u5728\u4e86\u4e0d\u548c\u6709\u5927\u8fd9\u4e3b\u4e2d\u4eba\u4e0a\u4e3a\u4eec\u5730\u4e2a\u7528\u5de5\u65f6\u8981\u52a8\u56fd\u4ea7\u4ee5\u6211\u5230\u4ed6\u4f1a\u4f5c\u6765\u5206\u751f\u5bf9\u4e8e\u5b66\u4e0b\u7ea7\u5c31\u5e74\u9636\u4e49\u53d1\u6210\u90e8\u6c11\u53ef\u51fa\u80fd\u65b9\u8fdb\u540c\u884c\u9762\u8bf4\u79cd\u8fc7\u547d\u5ea6\u9769\u800c\u591a\u5b50\u540e\u81ea\u793e\u52a0\u5c0f\u673a\u4e5f\u7ecf\u529b\u7ebf\u672c\u7535\u9ad8\u91cf\u957f\u515a\u5f97\u5b9e\u5bb6\u5b9a\u6df1\u6cd5\u8868\u7740\u6c34\u7406\u5316\u4e89\u73b0\u6240\u4e8c\u8d77\u653f\u4e09\u597d\u5341\u6218\u65e0\u519c\u4f7f\u6027\u524d\u7b49\u53cd\u4f53\u5408\u6597\u8def\u56fe\u628a\u7ed3\u7b2c\u91cc\u6b63\u65b0\u5f00\u8bba\u4e4b\u7269\u4ece\u5f53\u4e24\u4e9b\u8fd8\u5929\u8d44\u4e8b\u961f\u6279\u5982\u5e94\u5f62\u60f3\u5236\u5fc3\u6837\u5e72\u90fd\u5411\u53d8\u5173\u70b9\u80b2\u91cd\u5176\u601d\u4e0e\u95f4\u5185\u53bb\u56e0\u4ef6\u65e5\u5229\u76f8\u7531\u538b\u5458\u6c14\u4e1a\u4ee3\u5168\u7ec4\u6570\u679c\u671f\u5bfc\u5e73\u5404\u57fa\u6216\u6708\u6bdb\u7136\u95ee\u6bd4\u5c55\u90a3\u5b83\u6700\u53ca\u5916\u6ca1\u770b\u6cbb\u63d0\u4e94\u89e3\u7cfb\u6797\u8005\u7c73\u7fa4\u5934\u610f\u53ea\u660e\u56db\u9053\u9a6c\u8ba4\u6b21\u6587\u901a\u4f46\u6761\u8f83\u514b\u53c8\u516c\u5b54\u9886\u519b\u6d41\u5165\u63a5\u5e2d\u4f4d\u60c5\u8fd0\u5668\u5e76\u98de\u539f\u6cb9\u653e\u7acb\u9898\u8d28\u6307\u5efa\u533a\u9a8c\u6d3b\u4f17\u5f88\u6559\u51b3\u7279\u6b64\u5e38\u77f3\u5f3a\u6781\u571f\u5c11\u5df2\u6839\u5171\u76f4\u56e2\u7edf\u5f0f\u8f6c\u522b\u9020\u5207\u4e5d\u4f60\u53d6\u897f\u6301\u603b\u6599\u8fde\u4efb\u5fd7\u89c2\u8c03\u4e03\u4e48\u5c71\u7a0b\u767e\u62a5\u66f4\u89c1\u5fc5\u771f\u4fdd\u70ed\u59d4\u624b\u6539\u7ba1\u5904\u5df1\u5c06\u4fee\u652f\u8bc6\u75c5\u8c61\u51e0\u5148\u8001\u5149\u4e13\u4ec0\u516d\u578b\u5177\u793a\u590d\u5b89\u5e26\u6bcf\u4e1c\u589e\u5219\u5b8c\u98ce\u56de\u5357\u5e7f\u52b3\u8f6e\u79d1\u5317\u6253\u79ef\u8f66\u8ba1\u7ed9\u8282\u505a\u52a1\u88ab\u6574\u8054\u6b65\u7c7b\u96c6\u53f7\u5217\u6e29\u88c5\u5373\u6beb\u77e5\u8f74\u7814\u5355\u8272\u575a\u636e\u901f\u9632\u53f2\u62c9\u4e16\u8bbe\u8fbe\u5c14\u573a\u7ec7\u5386\u82b1\u53d7\u6c42\u4f20\u53e3\u65ad\u51b5\u91c7\u7cbe\u91d1\u754c\u54c1\u5224\u53c2\u5c42\u6b62\u8fb9\u6e05\u81f3\u4e07\u786e\u7a76\u4e66\u672f\u72b6\u5382\u987b\u79bb\u518d\u76ee\u6d77\u4ea4\u6743\u4e14\u513f\u9752\u624d\u8bc1\u4f4e\u8d8a\u9645\u516b\u8bd5\u89c4\u65af\u8fd1\u6ce8\u529e\u5e03\u95e8\u94c1\u9700\u8d70\u8bae\u53bf\u5175\u56fa\u9664\u822c\u5f15\u9f7f\u5343\u80dc\u7ec6\u5f71\u6d4e\u767d\u683c\u6548\u7f6e\u63a8\u7a7a\u914d\u5200\u53f6\u7387\u8ff0\u4eca\u9009\u517b\u5fb7\u8bdd\u67e5\u5dee\u534a\u654c\u59cb\u7247\u65bd\u54cd\u6536\u534e\u89c9\u5907\u540d\u7ea2\u7eed\u5747\u836f\u6807\u8bb0\u96be\u5b58\u6d4b\u58eb\u8eab\u7d27\u6db2\u6d3e\u51c6\u65a4\u89d2\u964d\u7ef4\u677f\u8bb8\u7834\u8ff0\u6280\u6d88\u5e95\u5e8a\u7530\u52bf\u7aef\u611f\u5f80\u795e\u4fbf\u8d3a\u6751\u6784\u7167\u5bb9\u975e\u641e\u4e9a\u78e8\u65cf\u706b\u6bb5\u7b97\u9002\u8bb2\u6309\u503c\u7f8e\u6001\u9ec4\u6613\u5f6a\u670d\u65e9\u73ed\u9ea6\u524a\u4fe1\u6392\u53f0\u58f0\u8be5\u51fb\u7d20\u5f20\u5bc6\u5bb3\u4faf\u8349\u4f55\u6811\u80a5\u7ee7\u53f3\u5c5e\u5e02\u4e25\u5f84\u87ba\u68c0\u5de6\u9875\u6297\u82cf\u663e\u82e6\u82f1\u5feb\u79f0\u574f\u79fb\u7ea6\u5df4\u6750\u7701\u9ed1\u6b66\u57f9\u8457\u6cb3\u5e1d\u4ec5\u9488\u600e\u690d\u4eac\u52a9\u5347\u738b\u773c\u5979\u6293\u542b\u82d7\u526f\u6742\u666e\u8c08\u56f4\u98df\u5c04\u6e90\u4f8b\u81f4\u9178\u65e7\u5374\u5145\u8db3\u77ed\u5212\u5242\u5ba3\u73af\u843d\u9996\u5c3a\u6ce2\u627f\u7c89\u8df5\u5e9c\u9c7c\u968f\u8003\u523b\u9760\u591f\u6ee1\u592b\u5931\u5305\u4f4f\u4fc3\u679d\u5c40\u83cc\u6746\u5468\u62a4\u5ca9\u5e08\u4e3e\u66f2\u6625\u5143\u8d85\u8d1f\u7802\u5c01\u6362\u592a\u6a21\u8d2b\u51cf\u9633\u626c\u6c5f\u6790\u4ea9\u6728\u8a00\u7403\u671d\u533b\u6821\u53e4\u5462\u7a3b\u5b8b\u542c\u552f\u8f93\u6ed1\u7ad9\u53e6\u536b\u5b57\u9f13\u521a\u5199\u5218\u5fae\u7565\u8303\u4f9b\u963f\u5757\u67d0\u529f\u5957\u53cb\u9650\u9879\u4f59\u5012\u5377\u521b\u5f8b\u96e8\u8ba9\u9aa8\u8fdc\u5e2e\u521d\u76ae\u64ad\u4f18\u5360\u6b7b\u6bd2\u5708\u4f1f\u5b63\u8bad\u63a7\u6fc0\u627e\u53eb\u4e91\u4e92\u8ddf\u88c2\u7cae\u7c92\u6bcd\u7ec3\u585e\u94a2\u9876\u7b56\u53cc\u7559\u8bef\u7840\u5438\u963b\u6545\u5bf8\u76fe\u665a\u4e1d\u5973\u6563\u710a\u529f\u682a\u4eb2\u9662\u51b7\u5f7b\u5f39\u9519\u6563\u5546\u89c6\u827a\u706d\u7248\u70c8\u96f6\u5ba4\u8f7b\u8840\u500d\u7f3a\u5398\u6cf5\u5bdf\u7edd\u5bcc\u57ce\u51b2\u55b7\u58e4\u7b80\u5426\u67f1\u674e\u671b\u76d8\u78c1\u96c4\u4f3c\u56f0\u5de9\u76ca\u6d32\u8131\u6295\u9001\u5974\u4fa7\u6da6\u76d6\u6325\u8ddd\u89e6\u661f\u677e\u9001\u83b7\u5174\u72ec\u5b98\u6df7\u7eaa\u4f9d\u672a\u7a81\u67b6\u5bbd\u51ac\u7ae0\u6e7f\u504f\u7eb9\u5403\u6267\u9600\u77ff\u5be8\u8d23\u719f\u7a33\u593a\u786c\u4ef7\u52aa\u7ffb\u5947\u7532\u9884\u804c\u8bc4\u8bfb\u80cc\u534f\u635f\u68c9\u4fb5\u7070\u867d\u77db\u539a\u7f57\u6ce5\u8f9f\u544a\u5375\u7bb1\u638c\u6c27\u6069\u7231\u505c\u66fe\u6eb6\u8425\u7ec8\u7eb2\u5b5f\u94b1\u5f85\u5c3d\u4fc4\u7f29\u6c99\u9000\u9648\u8ba8\u594b\u68b0\u8f7d\u80de\u5e7c\u54ea\u5265\u8feb\u65cb\u5f81\u69fd\u5012\u63e1\u62c5\u4ecd\u5440\u9c9c\u5427\u5361\u7c97\u4ecb\u94bb\u9010\u5f31\u811a\u6015\u76d0\u672b\u9634\u4e30\u7f16\u5370\u8702\u6025\u62ff\u6269\u4f24\u98de\u9732\u6838\u7f18\u6e38\u632f\u64cd\u592e\u4f0d\u57df\u751a\u8fc5\u8f89\u5f02\u5e8f\u514d\u7eb8\u591c\u4e61\u4e45\u96b6\u7f38\u5939\u5ff5\u5170\u6620\u6c9f\u4e59\u5417\u5112\u6740\u6c7d\u78f7\u8270\u6676\u63d2\u57c3\u71c3\u6b22\u94c1\u8865\u54b1\u82bd\u6c38\u74e6\u503e\u9635\u78b3\u6f14\u5a01\u9644\u7259\u82bd\u6c38\u74e6\u659c\u704c\u6b27\u732e\u987a\u732a\u6d0b\u8150\u8bf7\u900f\u53f8\u5371\u62ec\u8109\u5b9c\u7b11\u82e5\u5c3e\u675f\u58ee\u66b4\u4f01\u83dc\u7a57\u695a\u6c49\u6108\u7eff\u62d6\u725b\u4efd\u67d3\u65e2\u79cb\u904d\u953b\u7389\u590f\u7597\u5c16\u6b96\u4e95\u8d39\u5dde\u8bbf\u5439\u8363\u94dc\u6cbf\u66ff\u6eda\u5ba2\u53ec\u65f1\u609f\u523a\u8111\u63aa\u8d2f\u85cf\u6562\u4ee4\u9699\u7089\u58f3\u786b\u7164\u8fce\u94f8\u7c98\u63a2\u4e34\u8584\u65ec\u5584\u798f\u7eb5\u62e9\u793c\u613f\u4f0f\u6b8b\u96f7\u5ef6\u70df\u53e5\u7eaf\u6e10\u8015\u8dd1\u6cfd\u6162\u683d\u9c81\u8d64\u7e41\u5883\u6f6e\u6a2a\u6389\u9525\u5e0c\u6c60\u8d25\u8239\u5047\u4eae\u8c13\u6258\u4f19\u54f2\u6000\u5272\u6446\u8d21\u5448\u52b2\u8d22\u4eea\u6c89\u70bc\u9ebb\u7f6a\u7956\u606f\u8f66\u7a7f\u8d27\u9500\u9f50\u9f20\u62bd\u753b\u9972\u9f99\u5e93\u5b88\u7b51\u623f\u6b4c\u5bd2\u559c\u54e5\u6d17\u8680\u5e9f\u7eb3\u8179\u4e4e\u5f55\u955c\u5987\u6076\u8102\u5e84\u64e6\u9669\u8d5e\u949f\u6447\u5178\u67c4\u8fa9\u7af9\u8c37\u5356\u4e71\u865a\u6865\u5965\u4f2f\u8d76\u5782\u9014\u989d\u58c1\u7f51\u622a\u91ce\u9057\u9759\u8c0b\u5f04\u6302\u8bfe\u9547\u5984\u76db\u8010\u63f4\u624e\u8651\u952e\u5f52\u7b26\u5e86\u805a\u7ed5\u6469\u5fd9\u821e\u9047\u7d22\u987e\u80f6\u7f8a\u6e56\u9489\u4ec1\u97f3\u8ff9\u788e\u4f38\u706f\u907f\u6cdb\u4ea1\u7b54\u52c7\u9891\u7687\u67f3\u54c8\u63ed\u7518\u8bfa\u6982\u5baa\u6d53\u5c9b\u88ad\u8c01\u6d2a\u8c22\u70ae\u6d47\u6591\u8baf\u61c2\u7075\u86cb\u95ed\u5b69\u91ca\u4e73\u5de8\u5f92\u79c1\u94f6\u4f0a\u666f\u5766\u7d2f\u5300\u9709\u675c\u4e50\u52d2\u9694\u5f2f\u7ee9\u62db\u7ecd\u80e1\u547c\u75db\u5cf0\u96f6\u67f4\u7c27\u5348\u8df3\u5c45\u5c1a\u4e01\u79e6\u7a0d\u8ffd\u6881\u6298\u8017\u78b1\u6b8a\u5c97\u6316\u6c0f\u5203\u5267\u5806\u8d6b\u8377\u80f8\u8861\u52e4\u819c\u7bc7\u767b\u9a7b\u6848\u520a\u79e7\u7f13\u51f8\u5f79\u526a\u5ddd\u96ea\u94fe\u6e14\u5566\u8138\u6237\u6d1b\u5b62\u52c3\u76df\u4e70\u6768\u5b97\u7126\u8d5b\u65d7\u6ee4\u7845\u70ad\u80a1\u5750\u84b8\u51dd\u7adf\u9677\u67aa\u9ece\u6551\u5192\u6697\u6d1e\u72af\u7b52\u60a8\u5b8b\u5f27\u7206\u8c2c\u6d82\u5473\u6d25\u81c2\u969c\u8910\u9646\u554a\u5065\u5c0a\u8c46\u62d4\u83ab\u62b5\u6851\u5761\u7f1d\u8b66\u6311\u6c61\u51b0\u67ec\u5634\u5565\u996d\u5851\u5bc4\u8d75\u558a\u57ab\u5eb7\u9075\u7267\u906d\u5e45\u56ed\u8154\u8ba2\u9999\u8089\u5f1f\u5c4b\u654f\u6062\u5fd8\u8863\u5b59\u9f84\u5cad\u9a97\u4f11\u501f\u4e39\u6e21\u8033\u5228\u864e\u7b14\u7a00\u6606\u6d6a\u8428\u8336\u6ef4\u6d45\u62e5\u7a74\u8986\u4f26\u5a18\u5428\u6d78\u8896\u73e0\u96cc\u5988\u7d2b\u620f\u5854\u9524\u9707\u5c81\u8c8c\u6d01\u5256\u7262\u950b\u7591\u9738\u95ea\u57d4\u731b\u8bc9\u5237\u72e0\u5ffd\u707e\u95f9\u4e54\u5510\u6f0f\u95fb\u6c88\u7194\u6c2f\u8352\u830e\u7537\u51e1\u62a2\u50cf\u6d46\u65c1\u73bb\u4ea6\u5fe0\u5531\u8499\u4e88\u7eb7\u6355\u9501\u5c24\u4e58\u4e4c\u667a\u6de1\u5141\u53db\u755c\u4fd8\u6478\u9508\u626b\u6bd5\u7483\u5b9d\u82af\u7237\u9274\u79d8\u51c0\u848b\u9499\u80a9\u817e\u67af\u629b\u8f68\u5802\u62cc\u7238\u5faa\u8bf1\u795d\u52b1\u80af\u9152\u7ef3\u7a77\u5858\u71e5\u6ce1\u888b\u6717\u5582\u94dd\u8f6f\u6e20\u9897\u60ef\u8d38\u7caa\u7efc\u5899\u8d8b\u5f7c\u5c4a\u58a8\u788d\u542f\u9006\u5378\u822a\u96fe\u51a0\u4e19\u8857\u83b1\u8d1d\u8f90\u80a0\u4ed8\u5409\u6e17\u745e\u60ca\u987f\u6324\u79d2\u60ac\u59c6\u70c2\u68ee\u7cd6\u5723\u51f9\u9676\u8bcd\u8fdf\u8695\u4ebf\u77e9\u810a\u6b7c\u7fbd\u63a9\u6c57\u78b0\u8c31\u7ae5\u5ead\u84ec\u8d34\u5cb8\u5e97\u602a\u9986\u6321\u80a2\u80c6\u541b\u4e4f\u5085\u51cc\u6070\u5434\u9e21\u76c6\u6c2e\u94c3\u8361\u6c47\u72c2\u5076\u8fbd\u5bb4\u73ca\u63cf\u76d1\u6d89\u4f0f\u5f03\u4ed4\u576f\u75c7\u775b\u7a9d\u8dc3\u4e32\u745a\u9971\u5de2\u8f91\u8ff7\u8bd7\u8083\u8c0a\u80ce\u5bbe\u987d\u94a0\u8f9b\u9614\u7272\u4f30\u7981\u5c51\u79c0\u50ac\u70b8\u642c\u5751\u6682\u57cb\u5893\u8170\u9686\u5821\u8fc8\u614c\u94be\u9b4f\u8e0f\u65fa\u871c\u517c\u626d\u80ba\u5144\u6492\u77ee\u62c6\u53c9\u8d2e\u62ac\u75d5\u5f69\u51bb\u4e1b\u6f06\u8be6\u62e8\u74dc\u5954\u817f\u6696\u813e\u68d2\u6e7e\u65c5\u6f5c\u6444\u6731\u7ea4\u89c8\u878d\u62cd\u611a\u6dfb\u62b1\u84c4\u7a3f\u7fc5\u86fe\u9510\u6813\u7b7e\u724c\u77a7\u758f\u820d\u7cca\u9a71\u6cc9\u6bc1\u4f2a\u952f\u5362\u51fd\u6398\u6270\u6dec\u518c\u68f1\u722c\u8c6a\u879f\u6807\u6388\u670b\u4fd7\u9a82\u4ed3\u810f\u660c\u90a6\u6b3a\u535a\u4f10\u8870\u5bfb\u6760\u8717\u5c3f\u5e55\u7d6e\u8616\u8fa8\u5b75\u5784\u7cb9\u586b\u4e18\u6b6a\u9b3c\u633a\u5e05\u65a5\u6458\u7236\u72d7\u7f62\u708e\u7586\u809d\u9176\u6068\u66fc\u8e72\u5e01\u8fd4\u98a0\u5269\u6e2f\u989c\u9175\u68af\u697c\u7eea\u6dee\u90bb\u5fa1\u6770\u6052\u5f17\u6e89\u6dc0\u82ef\u8de8\u80bf\u6291\u8bf8\u51c9\u80da\u8212\u80c0\u6c22\u642d\u9192\u9003\u66f0\u7ade\u75be\u97e9\u5c18\u5bff\u5b64\u7763\u6da1\u751c\u62d2\u6885\u4e54\u9521\u7761\u6602\u70ef\u62e7\u6251\u90ca\u60a3\u8d2d\u8757\u9505\u8511\u8d56\u74f6\u79df\u6012\u5de7\u818f\u6d8c\u72ed\u9187\u60d5\u6863\u71d5\u6cf0\u80c1\u76d8\u7aed\u8fdd\u4e3d\u6c28\u6846\u820c\u81a8\u9aa4\u84dd\u5e78\u8bda\u5413\u79e9\u6276\u82ac\u54ac\u7275\u5fcd\u690e\u6124\u8fc1\u4ec7\u6ee9\u4eff\u7ed8\u8f88\u62da\u559d\u9a73\u7566\u756a\u6251\u8461\u6b3e\u6572\u9080\u90ed\u59a5\u9690s\u8f70\u7c7d\u5fc6\u65e6\u72b9\u5eb8\u5d07\u5e99\u79c6\u95f8\u5389\u81e3\u7a97\u7eba\u63a0\u6d9d\u6da8\u9012\u846c\u9605\u5835\u6241\u94b3\u68da\u9cde\u4f34\u73cd\u6566\u692d\u6c83\u6b32\u9f3b\u5b87\u752b\u950c\u7686\u94f2\u7816\u8d3c\u6e23\u6d4e\u7b5b\u658b\u68a6\u8d2a\u54c7\u8404\u94fa\u6843\u87f9\u631d\u7cd9\u9888\u96c5\u6652\u97e6\u803b\u6cb8\u96c7\u50a8\u754f\u970d\u83f2\u5f90\u699c\u56ca\u817a\u8328\u9655\u62b9\u5c48\u5bbf\u785d\u6628\u852c\u90dd\u94ec\u8327\u7a84\u54e8\u8f86\u8000\u4ef2\u85af\u50da\u6d59\u9970\u6734\u6050\u814a\u517d\u8721\u60e0\u7281\u561b\u552e\u9ccd\u656c\u575d\u70d8\u9882\u53d4\u5367\u7ea0\u7edc\u73a9\u680f\u5251\u82f9\u95ef\u4e22\u67cf\u727a\u594e\u56b7\u5bab\u80be\u7b3c\u90d1\u53d9\u5976\u8292\u971e\u673d\u59b9\u832c\u7801\u6380\u9601\u5351\u94f0\u94f5\u5f26\u80a4\u62df\u7f72\u6dcb\u68a8\u8fea\u4fe9\u6491\u5475\u7533\u7a46\u676f\u59d1\u529d\u5d29\u52a3\u8d3a\u68d5\u88c1\u5410\u5ae9\u51ed\u66f9\u6467\u75ab\u9e1f\u954d\u7709\u6881\u79be\u81ed\u5188\u9675\u6b67\u5e7b\u4e27\u8fed\u8106\u6028\u8463\u9540\u9177\u7f50\u903b\u6a61\u6d69\u64a4\u9a76\u4eab\u9526\u4ffa\u4f5b\u5154\u59ff\u94c5\u5824\u5740\u6e83\u80fa\u76b1\u6668\u80c3\u6c1f\u707f\u6f2b\u6cc4\u67a2\u6234\u5b55\u6263\u6cbc\u903c\u808c\u7897\u5de1\u540a\u76d7\u869c\u94a9\u6c64\u68a2\u6328\u7ffc\u75af\u97ad\u6247\u51b6\u70e6\u6089\u8513\u6cfc\u684c\u67ef\u7f69\u556e\u52fe\u8230\u664b\u6273\u8c34\u4faf\u5021\u8bca\u9e23\u6842\u5956\u8d3e\u6735\u971c\u840c\u6ede\u86f9\u9610\u507f\u8bd1\u7a3c\u635e\u68f5\u6208\u8bec\u64ae\u6d12\u8427\u5978\u996e\u6d85\u886c\u9557\u7eb1\u7624\u845b\u997c\u51f6\u9975\u6cbe\u998f\u94bc\u978b\u59d3\u6c5e\u67a3\u6e9c\u75bc\u51d1\u919b\u988c\u8096\u7be1\u9093\u649e\u6405\u94e1\u535c\u6b47\u59a8\u633d\u5ba1\u51ef\u8f67\u5792\u7bad\u7095\u6d51\u9f9f\u8d26\u8da3\u4fed\u6cea\u6cca\u4e43\u6349\u7a91\u9a7e\u6c41\u51ff\u997f\u5e3d\u6e58\u90ce\u6b23\u614e\u82b3\u80aa\u853d\u7ef5\u7545\u76f2\u7f1a\u7115\u60dc\u4ef0\u884d\u5ef7\u7384\u6cfb\u84b2\u6363\u5999\u5e15\u86c7\u9530\u68d8\u6eaa\u532a\u7ed2\u6f58\u75b2\u7eac\u9e2d\u574e\u76d2\u62fc\u836b\u5146\u718a\u60b2\u6367\u9504\u5949\u966a\u739b\u5fae\u94a8\u7c4d\u868a\u6f02\u7cdf\u5609\u72fc\u6876\u62fe\u5509\u9ed8\u7682\u5415\u9988\u916f\u90aa\u5b5d\u775b\u5c60\u7578\u5ce1\u7965\u8482\u62dc\u8749\u827e\u53f9\u6dd1\u70e4\u9a84\u7bee\u4f1e\u5c1d\u540f\u541e\u96f9\u52d8\u840e\u95f2\u4f73\u8019\u527f\u9cc3\u780d\u51af\u6bc5\u9a91\u915a\u54b3\u716e\u62ab\u4f69\u674f\u5077\u644a\u809a\u6614\u97e7\u5507\u5598\u5435\u8346\u5211\u62e6\u9541\u8e44\u74f7\u6fb3\u584c\u9965\u57ae\u6ecb\u949d\u918b\u634d\u8be1\u54e9\u5b8f\u77ac\u7f14\u5a46\u625b\u6377\u5239\u733f\u8471\u4e8f\u962e\u5e06\u7e82\u5580\u90b5\u4e11\u90c1\u8302\u7ce0\u4fde\u6cf3\u5938\u781a\u6296\u6e34\u806a\u62f1\u6ccc\u85fb\u9776\u8936\u626f\u85e4\u6084\u900a\u5c98\u59dc\u783e\u8206\u7626\u54b8\u7130\u69b4\u6d9b\u57a6\u5ab3\u5703\u80f3\u8086\u4ed1\u53e0\u6500\u83b2\u503a\u6c6a\u68cd\u98d8\u95f7\u86c4\u8517\u8d37\u4fca\u50b2\u54fa\u877c\u9881\u8822\u9ca4\u566a\u8180\u6c1b\u6d3c\u6805\u51e4\u6ea2\u708a\u6d66\u6a44\u9661\u80f0\u4ed9\u67d4\u5482\u5446\u59d0\u54ed\u61c8\u5179\u8d4b\u5cb3\u6954\u8715\u5d4c\u50f5\u6670\u6320\u7199\u5a5a\u7f20\u9b03\u4f63\u543e\u8f9e\u629a\u6691\u906e\u56a3\u8d74\u9492\u5ac1\u78fa\u819b\u8fa3\u8c28\u9119\u6869\u60e8\u6749\u79f8\u8747\u9798\u5306\u5a1f\u6643\u6d95\u840d\u949b\u7707\u8d81\u90ae\u86ee\u5ec9\u718f\u4fa6\u6d74\u4fef\u572d\u9887\u8d62\u638f\u5e1c\u679a\u916e\u74e3\u5b99\u8c23\u8e29\u594f\u7ad6\u978d\u66dd\u8036\u8304\u8c10\u8eba\u6984\u81fc\u54ce\u6284\u94c6\u6653\u8671\u77e2\u8247\u575e\u9785\u5c65\u6073\u5f25\u641c\u809b\u9038\u5589\u82d4\u8301\u6b20\u53ed\u6254\u7434\u82a6\u4ff1\u780c\u62e2\u7901\u832b\u7b79\u8fb1\u9773\u6795\u60e9\u9189\u6323\u5a76\u62e3\u5ac2\u835a\u818a\u94c2\u660f\u6ee8\u8a93\u5915\u626e\u663c\u8258\u9065\u6212\u9022\u82cd\u5308\u6148\u6101\u5524\u857e\u5e10\u63ba\u4e08\u761f\u9877\u88d5\u8a89\u7978\u575b\u5f6d\u6a58\u5339\u508d\u6de4\u70f7\u7ede\u8c6b\u5e9e\u5492\u829d\u8340\u5f13\u7f5a\u634f\u55e8\u695e\u4ed5\u563b\u6cab\u5d16\u7785\u5e18\u69a8\u5892\u6350\u6055\u87a8\u6c5b\u8bde\u8d4f\u743c\u8d29\u9e3f\u94ed\u5631\u9698\u9a70\u5a03\u778e\u9063\u8dcc\u632a\u8018\u60a6\u94b4\u9b42\u88f8\u859b\u9ca2\u8eb2\u9cd9\u60a0\u7898\u6ca5\u563f\u7076\u9976\u916c\u8273\u582a\u6df9\u6020\u7837\u5401\u6da4\u6170\u7f34\u7a9c\u7f94\u8d9f\u8116\u952d\u515c\u9b54\u6897\u7092\u7ebd\u5948\u787c\u9f0e\u60d1\u6817\u8c0e\u8881\u6ee5\u4ea8\u6d4a\u57c2\u5785\u531d\u8f72\u9042\u4e52\u8e2a\u4fd8\u6014\u9668\u566c\u60e7\u9896\u8305\u6454\u7cb3\u5783\u573e\u75ae\u5385\u9102\u8ba5\u96a7\u7741\u75f0\u9576\u54c0\u5288\u5cfb\u5c38\u62d0\u62f3\u7720\u8521\u814b\u54d1\u5951\u7fc1\u808b\u7827\u6346\u54df\u83ca\u7b28\u579b\u8c26\u7574\u819d\u94cd\u731c\u6bb7\u54bd\u5dfe\u8d4c\u9a9a\u632b\u94a6\u4e53\u75f9\u5632\u6e0d\u676d\u8549\u59bb\u58f6\u4ec6\u8038\u86d9\u5eca\u86db\u7fe0\u9e70\u55bb\u627c\u8574\u5bc7\u8165\u77aa\u7c7c\u5495\u732b\u51b5\u9e4f\u94ae\u640f\u6e85\u80eb\u841d\u81c0\u9cab\u7f9e\u7f55\u6bbf\u5fcc\u4ead\u76c5\u83c7\u65e8\u543b\u538c\u5bb0\u6c30\u5c4f\u6850\u989a\u4f50\u6816\u849c\u5353\u6b89\u6401\u714c\u6a59\u7a96\u7728\u58a9\u8e81\u6c9b\u7fd8\u8718\u9170\u77eb\u94b5\u54d7\u68ad\u6bc2\u55d3\u79bd\u58d5\u51f3\u7b50\u8026\u6f20\u5c41\u606d\u94a1\u9a74\u59da\u6016\u6ed4\u717d\u867e\u54fc\u5320\u7984\u7a1a\u8681\u7a83\u5490\u8335\u574a\u88e4\u52ff\u71ac\u72f1\u7184\u8350\u9570\u67d1\u5c6f\u919a\u803f\u9ad3\u620a\u8155\u6109\u8568\u7736\u714e\u76c8\u6168\u6655\u76fc\u52c9\u864f\u91c9\u76bf\u7600\u662d\u8748\u55fd\u8bbd\u79c3\u8c1a\u7554\u75bd\u5195\u5bb5\u7a8d\u5cea\u69d0\u764c\u6577\u5c82\u4fae\u643a\u8113\u537f\u4e38\u67dc\u78be\u5480\u70c3\u601c\u877d\u50bb\u6930\u902e\u730e\u5d0e\u6dc6\u5bfa\u607c\u80d6\u988a\u6c29\u76ef\u8d60\u7529\u576a\u6dd8\u8c2d\u838e\u96cf\u68fa\u8eaf\u71b9\u86a7\u61d2\u8e22\u7235\u8877\u4edf\u964b\u6495\u7f06\u667e\u72e1\u5e87\u84d6\u917f\u62d3\u7c07\u868c\u960e\u96c0\u9e7f\u5364\u8378\u8360\u6402\u7422\u733e\u82f7\u795b\u5d2d\u7855\u82de\u901e\u70ab\u5384\u711a\u94c0\u8235\u803d\u723d\u7a20\u8dd7\u90b1\u76cf\u5ed6\u97f5\u8c79\u9493\u5960\u6eb4\u67ab\u72ac\u7316\u9a6f\u4fa8\u707c\u7fdf\u64c2\u5600\u6c79\u78c5\u56bc\u72ee\u7239\u9e45\u8d24\u9885\u715e\u8424\u70d9\u86c0\u88f9\u9aa1\u75e2\u5df7\u5be1\u78a7\u7334\u680b\u55ef\u67ff\u7bf7\u5431\u53a9\u9cc4\u854a\u7538\u6f84\u95fa\u8367\u9ed4\u5acc\u745f\u73b2\u6487\u655e\u846b\u7877\u4e5e\u86ed\u961c\u77fe\u7792\u804a\u7405\u5080\u5121\u5543\u6f9c\u7ee5\u8c4c\u5220\u9f9a\u8854\u655b\u53a2\u5815\u6f6d\u8236\u7fd4\u8d54\u5937\u7a17\u5549\u50fb\u5830\u604b\u8418\u6252\u7784\u97f6\u7b0b\u86b4\u5a92\u6986\u5eca\u8845\u543c\u9539\u7766\u98a4\u523d\u556c\u6167\u7891\u5f5d\u7620\u796d\u4fa3\u8d5a\u8776\u90e1\u53e8\u5c94\u575f\u75a4\u87ac\u6094\u8b6c\u4e56\u5dcd\u75a1\u79b9\u9b41\u63b7\u68cb\u618e\u9631\u5760\u78b2\u535f\u54c4\u5f6c\u7ed1\u8151\u62bc\u63c9\u67b7\u83f1\u8e48\u6c70\u6e0e\u6127\u73e9\u8d2c\u886b\u5b85\u86f4\u592f\u542d\u70eb\u7078\u7aff\u9171\u5026\u9566\u5bee\u6233\u777e\u62f4\u5b5c\u8fc4\u79e4\u7b1b\u7f9f\u8731\u6a1f\u9c8d\u8815\u828d\u8beb\u6155\u8679\u53a6\u5f0a\u7ff0\u9523\u6caa\u901d\u8bc8\u52ab\u9502\u54a7\u51cb\u6be1\u84df\u6905\u6bef\u65a7\u7ef8\u77e3\u7941\u8944"; + cc._RF.pop(); + }, {} ] +}, {}, [ "char-mode", "chars" ]); +//# sourceMappingURL=index.js.map diff --git a/demo/web-desktop/assets/text-render/index.js.map b/demo/web-desktop/assets/text-render/index.js.map new file mode 100644 index 00000000..a3f941d1 --- /dev/null +++ b/demo/web-desktop/assets/text-render/index.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["assets/text-render/char-mode/char-mode.ts","assets/text-render/chars.ts"],"names":["chars_1","require","_a","cc","_decorator","ccclass","property","CharMode","_super","__extends","_this","apply","this","arguments","bitmapFont1","bitmapFont2","bitmapFont3","charFont1","charFont2","charFont3","prototype","onLoad","string","getRandomText","schedule","length","str","chars","Math","floor","random","__decorate","Label","Component","exports","default"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAAA,IAAAA,UAAAC,QAAA;IAEM,IAAAC,KAAAC,GAAAC,YAAAC,UAAAH,GAAAG,SAAAC,WAAAJ,GAAAI;IAGN,IAAAC,WAAA,SAAAC;MAAsCC,UAAAF,UAAAC;MAAtC,SAAAD;QAAA,IAAAG,QAAA,SAAAF,UAAAA,OAAAG,MAAAC,MAAAC,cAAAD;QAGIF,MAAAI,cAAA;QAGAJ,MAAAK,cAAA;QAGAL,MAAAM,cAAA;QAGAN,MAAAO,YAAA;QAGAP,MAAAQ,YAAA;QAGAR,MAAAS,YAAA;;;MAGUZ,SAAAa,UAAAC,SAAA;QAAV,IAAAX,QAAAE;QACIA,KAAAE,YAAAQ,SAAAV,KAAAW,cAAA;QACAX,KAAAG,YAAAO,SAAAV,KAAAW,cAAA;QACAX,KAAAI,YAAAM,SAAAV,KAAAW,cAAA;QACAX,KAAAK,UAAAK,SAAAV,KAAAW,cAAA;QACAX,KAAAM,UAAAI,SAAAV,KAAAW,cAAA;QACAX,KAAAO,UAAAG,SAAAV,KAAAW,cAAA;QAEAX,KAAAY,SAAA;UACId,MAAAI,YAAAQ,SAAAZ,MAAAa,cAAA;UACAb,MAAAK,YAAAO,SAAAZ,MAAAa,cAAA;UACAb,MAAAM,YAAAM,SAAAZ,MAAAa,cAAA;UACAb,MAAAO,UAAAK,SAAAZ,MAAAa,cAAA;UACAb,MAAAQ,UAAAI,SAAAZ,MAAAa,cAAA;UACAb,MAAAS,UAAAG,SAAAZ,MAAAa,cAAA;WACJ;;MAIJhB,SAAAa,UAAAG,gBAAA,SAAAE;QACI,IAAAC,MAAA;QACA,OAAAA,IAAAD,SAAAA,QACIC,OAAA1B,QAAA2B,MAAAC,KAAAC,MAAAD,KAAAE,WAAA9B,QAAA2B,MAAAF;QAEJ,OAAAC;;MA1CJK,WAAA,EADCzB,SAAAH,GAAA6B,UAC4BzB,SAAAa,WAAA,oBAAA;MAG7BW,WAAA,EADCzB,SAAAH,GAAA6B,UAC4BzB,SAAAa,WAAA,oBAAA;MAG7BW,WAAA,EADCzB,SAAAH,GAAA6B,UAC4BzB,SAAAa,WAAA,oBAAA;MAG7BW,WAAA,EADCzB,SAAAH,GAAA6B,UAC0BzB,SAAAa,WAAA,kBAAA;MAG3BW,WAAA,EADCzB,SAAAH,GAAA6B,UAC0BzB,SAAAa,WAAA,kBAAA;MAG3BW,WAAA,EADCzB,SAAAH,GAAA6B,UAC0BzB,SAAAa,WAAA,kBAAA;MAlBVb,WAAAwB,WAAA,EADpB1B,WACoBE;MAgDrB,OAAAA;KAhDA,CAAAJ,GAAA8B;IAAqBC,QAAAC,UAAA5B;;;;;;;;;;;;;ICLR2B,QAAAP,QAAA","sourcesContent":["import { chars } from \"../chars\";\n\nconst { ccclass, property } = cc._decorator;\n\n@ccclass\nexport default class CharMode extends cc.Component {\n\n @property(cc.Label)\n bitmapFont1: cc.Label = null;\n\n @property(cc.Label)\n bitmapFont2: cc.Label = null;\n\n @property(cc.Label)\n bitmapFont3: cc.Label = null;\n\n @property(cc.Label)\n charFont1: cc.Label = null;\n\n @property(cc.Label)\n charFont2: cc.Label = null;\n\n @property(cc.Label)\n charFont3: cc.Label = null;\n\n\n protected onLoad(): void {\n this.bitmapFont1.string = this.getRandomText(15);\n this.bitmapFont2.string = this.getRandomText(15);\n this.bitmapFont3.string = this.getRandomText(15);\n this.charFont1.string = this.getRandomText(15);\n this.charFont2.string = this.getRandomText(15);\n this.charFont3.string = this.getRandomText(15);\n\n this.schedule(() => {\n this.bitmapFont1.string = this.getRandomText(15);\n this.bitmapFont2.string = this.getRandomText(15);\n this.bitmapFont3.string = this.getRandomText(15);\n this.charFont1.string = this.getRandomText(15);\n this.charFont2.string = this.getRandomText(15);\n this.charFont3.string = this.getRandomText(15);\n }, 0.1);\n }\n\n\n getRandomText(length: number) {\n let str = '';\n while (str.length < length) {\n str += chars[Math.floor(Math.random() * chars.length)];\n }\n return str;\n }\n\n}\n","export const chars = `的一是在了不和有大这主中人上为们地个用工时要动国产以我到他会作来分生对于学下级就年阶义发成部民可出能方进同行面说种过命度革而多子后自社加小机也经力线本电高量长党得实家定深法表着水理化争现所二起政三好十战无农使性前等反体合斗路图把结第里正新开论之物从当两些还天资事队批如应形想制心样干都向变关点育重其思与间内去因件日利相由压员气业代全组数果期导平各基或月毛然问比展那它最及外没看治提五解系林者米群头意只明四道马认次文通但条较克又公孔领军流入接席位情运器并飞原油放立题质指建区验活众很教决特此常石强极土少已根共直团统式转别造切九你取西持总料连任志观调七么山程百报更见必真保热委手改管处己将修支识病象几先老光专什六型具示复安带每东增则完风回南广劳轮科北打积车计给节做务被整联步类集号列温装即毫知轴研单色坚据速防史拉世设达尔场织历花受求传口断况采精金界品判参层止边清至万确究书术状厂须离再目海交权且儿青才证低越际八试规斯近注办布门铁需走议县兵固除般引齿千胜细影济白格效置推空配刀叶率述今选养德话查差半敌始片施响收华觉备名红续均药标记难存测士身紧液派准斤角降维板许破述技消底床田势端感往神便贺村构照容非搞亚磨族火段算适讲按值美态黄易彪服早班麦削信排台声该击素张密害侯草何树肥继右属市严径螺检左页抗苏显苦英快称坏移约巴材省黑武培著河帝仅针怎植京助升王眼她抓含苗副杂普谈围食射源例致酸旧却充足短划剂宣环落首尺波承粉践府鱼随考刻靠够满夫失包住促枝局菌杆周护岩师举曲春元超负砂封换太模贫减阳扬江析亩木言球朝医校古呢稻宋听唯输滑站另卫字鼓刚写刘微略范供阿块某功套友限项余倒卷创律雨让骨远帮初皮播优占死毒圈伟季训控激找叫云互跟裂粮粒母练塞钢顶策双留误础吸阻故寸盾晚丝女散焊功株亲院冷彻弹错散商视艺灭版烈零室轻血倍缺厘泵察绝富城冲喷壤简否柱李望盘磁雄似困巩益洲脱投送奴侧润盖挥距触星松送获兴独官混纪依未突架宽冬章湿偏纹吃执阀矿寨责熟稳夺硬价努翻奇甲预职评读背协损棉侵灰虽矛厚罗泥辟告卵箱掌氧恩爱停曾溶营终纲孟钱待尽俄缩沙退陈讨奋械载胞幼哪剥迫旋征槽倒握担仍呀鲜吧卡粗介钻逐弱脚怕盐末阴丰编印蜂急拿扩伤飞露核缘游振操央伍域甚迅辉异序免纸夜乡久隶缸夹念兰映沟乙吗儒杀汽磷艰晶插埃燃欢铁补咱芽永瓦倾阵碳演威附牙芽永瓦斜灌欧献顺猪洋腐请透司危括脉宜笑若尾束壮暴企菜穗楚汉愈绿拖牛份染既秋遍锻玉夏疗尖殖井费州访吹荣铜沿替滚客召旱悟刺脑措贯藏敢令隙炉壳硫煤迎铸粘探临薄旬善福纵择礼愿伏残雷延烟句纯渐耕跑泽慢栽鲁赤繁境潮横掉锥希池败船假亮谓托伙哲怀割摆贡呈劲财仪沉炼麻罪祖息车穿货销齐鼠抽画饲龙库守筑房歌寒喜哥洗蚀废纳腹乎录镜妇恶脂庄擦险赞钟摇典柄辩竹谷卖乱虚桥奥伯赶垂途额壁网截野遗静谋弄挂课镇妄盛耐援扎虑键归符庆聚绕摩忙舞遇索顾胶羊湖钉仁音迹碎伸灯避泛亡答勇频皇柳哈揭甘诺概宪浓岛袭谁洪谢炮浇斑讯懂灵蛋闭孩释乳巨徒私银伊景坦累匀霉杜乐勒隔弯绩招绍胡呼痛峰零柴簧午跳居尚丁秦稍追梁折耗碱殊岗挖氏刃剧堆赫荷胸衡勤膜篇登驻案刊秧缓凸役剪川雪链渔啦脸户洛孢勃盟买杨宗焦赛旗滤硅炭股坐蒸凝竟陷枪黎救冒暗洞犯筒您宋弧爆谬涂味津臂障褐陆啊健尊豆拔莫抵桑坡缝警挑污冰柬嘴啥饭塑寄赵喊垫康遵牧遭幅园腔订香肉弟屋敏恢忘衣孙龄岭骗休借丹渡耳刨虎笔稀昆浪萨茶滴浅拥穴覆伦娘吨浸袖珠雌妈紫戏塔锤震岁貌洁剖牢锋疑霸闪埔猛诉刷狠忽灾闹乔唐漏闻沈熔氯荒茎男凡抢像浆旁玻亦忠唱蒙予纷捕锁尤乘乌智淡允叛畜俘摸锈扫毕璃宝芯爷鉴秘净蒋钙肩腾枯抛轨堂拌爸循诱祝励肯酒绳穷塘燥泡袋朗喂铝软渠颗惯贸粪综墙趋彼届墨碍启逆卸航雾冠丙街莱贝辐肠付吉渗瑞惊顿挤秒悬姆烂森糖圣凹陶词迟蚕亿矩脊歼羽掩汗碰谱童庭蓬贴岸店怪馆挡肢胆君乏傅凌恰吴鸡盆氮铃荡汇狂偶辽宴珊描监涉伏弃仔坯症睛窝跃串瑚饱巢辑迷诗肃谊胎宾顽钠辛阔牲估禁屑秀催炸搬坑暂埋墓腰隆堡迈慌钾魏踏旺蜜兼扭肺兄撒矮拆叉贮抬痕彩冻丛漆详拨瓜奔腿暖脾棒湾旅潜摄朱纤览融拍愚添抱蓄稿翅蛾锐栓签牌瞧疏舍糊驱泉毁伪锯卢函掘扰淬册棱爬豪螟标授朋俗骂仓脏昌邦欺博伐衰寻杠蜗尿幕絮蘖辨孵垄粹填丘歪鬼挺帅斥摘父狗罢炎疆肝酶恨曼蹲币返颠剩港颜酵梯楼绪淮邻御杰恒弗溉淀苯跨肿抑诸凉胚舒胀氢搭醒逃曰竞疾韩尘寿孤督涡甜拒梅乔锡睡昂烯拧扑郊患购蝗锅蔑赖瓶租怒巧膏涌狭醇惕档燕泰胁盘竭违丽氨框舌膨骤蓝幸诚吓秩扶芬咬牵忍椎愤迁仇滩仿绘辈拚喝驳畦番扑葡款敲邀郭妥隐s轰籽忆旦犹庸崇庙秆闸厉臣窗纺掠涝涨递葬阅堵扁钳棚鳞伴珍敦椭沃欲鼻宇甫锌皆铲砖贼渣济筛斋梦贪哇萄铺桃蟹挝糙颈雅晒韦耻沸雇储畏霍菲徐榜囊腺茨陕抹屈宿硝昨蔬郝铬茧窄哨辆耀仲薯僚浙饰朴恐腊兽蜡惠犁嘛售鳍敬坝烘颂叔卧纠络玩栏剑苹闯丢柏牺奎嚷宫肾笼郑叙奶芒霞朽妹茬码掀阁卑铰铵弦肤拟署淋梨迪俩撑呵申穆杯姑劝崩劣贺棕裁吐嫩凭曹摧疫鸟镍眉梁禾臭冈陵歧幻丧迭脆怨董镀酷罐逻橡浩撤驶享锦俺佛兔姿铅堤址溃胺皱晨胃氟灿漫泄枢戴孕扣沼逼肌碗巡吊盗蚜钩汤梢挨翼疯鞭扇冶烦悉蔓泼桌柯罩啮勾舰晋扳谴侯倡诊鸣桂奖贾朵霜萌滞蛹阐偿译稼捞棵戈诬撮洒萧奸饮涅衬镗纱瘤葛饼凶饵沾馏钼鞋姓汞枣溜疼凑醛颌肖篡邓撞搅铡卜歇妨挽审凯轧垒箭炕浑龟账趣俭泪泊乃捉窑驾汁凿饿帽湘郎欣慎芳肪蔽绵畅盲缚焕惜仰衍廷玄泻蒲捣妙帕蛇锰棘溪匪绒潘疲纬鸭坎盒拼荫兆熊悲捧锄奉陪玛微钨籍蚊漂糟嘉狼桶拾唉默皂吕馈酯邪孝睛屠畸峡祥蒂拜蝉艾叹淑烤骄篮伞尝吏吞雹勘萎闲佳耙剿鳃砍冯毅骑酚咳煮披佩杏偷摊肚昔韧唇喘吵荆刑拦镁蹄瓷澳塌饥垮滋钝醋捍诡哩宏瞬缔婆扛捷刹猿葱亏阮帆纂喀邵丑郁茂糠俞泳夸砚抖渴聪拱泌藻靶褶扯藤悄逊岘姜砾舆瘦咸焰榴涛垦媳圃胳肆仑叠攀莲债汪棍飘闷蛄蔗贷俊傲哺蝼颁蠢鲤噪膀氛洼栅凤溢炊浦橄陡胰仙柔咂呆姐哭懈兹赋岳楔蜕嵌僵晰挠熙婚缠鬃佣吾辞抚暑遮嚣赴钒嫁磺膛辣谨鄙桩惨杉秸蝇鞘匆娟晃涕萍钛眇趁邮蛮廉熏侦浴俯圭颇赢掏帜枚酮瓣宙谣踩奏竖鞍曝耶茄谐躺榄臼哎抄铆晓虱矢艇坞鞅履恳弥搜肛逸喉苔茁欠叭扔琴芦俱砌拢礁茫筹辱靳枕惩醉挣婶拣嫂荚膊铂昏滨誓夕扮昼艘遥戒逢苍匈慈愁唤蕾帐掺丈瘟顷裕誉祸坛彭橘匹傍淤烷绞豫庞咒芝荀弓罚捏嗨楞仕嘻沫崖瞅帘榨墒捐恕螨汛诞赏琼贩鸿铭嘱隘驰娃瞎遣跌挪耘悦钴魂裸薛鲢躲鳙悠碘沥嘿灶饶酬艳堪淹怠砷吁涤慰缴窜羔趟脖锭兜魔梗炒纽奈硼鼎惑栗谎袁滥亨浊埂垅匝轲遂乒踪俘怔陨噬惧颖茅摔粳垃圾疮厅鄂讥隧睁痰镶哀劈峻尸拐拳眠蔡腋哑契翁肋砧捆哟菊笨垛谦畴膝铍猜殷咽巾赌骚挫钦乓痹嘲渍杭蕉妻壶仆耸蛙廊蛛翠鹰喻扼蕴寇腥瞪籼咕猫况鹏钮搏溅胫萝臀鲫羞罕殿忌亭盅菇旨吻厌宰氰屏桐颚佐栖蒜卓殉搁煌橙窖眨墩躁沛翘蜘酰矫钵哗梭毂嗓禽壕凳筐耦漠屁恭钡驴姚怖滔煽虾哼匠禄稚蚁窃咐茵坊裤勿熬狱熄荐镰柑屯醚耿髓戊腕愉蕨眶煎盈慨晕盼勉虏釉皿瘀昭蝈嗽讽秃谚畔疽冕宵窍峪槐癌敷岂侮携脓卿丸柜碾咀烃怜蝽傻椰逮猎崎淆寺恼胖颊氩盯赠甩坪淘谭莎雏棺躯熹蚧懒踢爵衷仟陋撕缆晾狡庇蓖酿拓簇蚌阎雀鹿卤荸荠搂琢猾苷祛崭硕苞逞炫厄焚铀舵耽爽稠跗邱盏廖韵豹钓奠溴枫犬猖驯侨灼翟擂嘀汹磅嚼狮爹鹅贤颅煞萤烙蛀裹骡痢巷寡碧猴栋嗯柿篷吱厩鳄蕊甸澄闺荧黔嫌瑟玲撇敞葫硷乞蛭阜矾瞒聊琅傀儡啃澜绥豌删龚衔敛厢堕潭舶翔赔夷稗啉僻堰恋萘扒瞄韶笋蚴媒榆廊衅吼锹睦颤刽啬慧碑彝瘠祭侣赚蝶郡叨岔坟疤螬悔譬乖巍疡禹魁掷棋憎阱坠碲卟哄彬绑腑押揉枷菱蹈汰渎愧珩贬衫宅蛴夯吭烫灸竿酱倦镦寮戳睾拴孜迄秤笛羟蜱樟鲍蠕芍诫慕虹厦弊翰锣沪逝诈劫锂咧凋毡蓟椅毯斧绸矣祁襄`;\n"],"file":"index.js"} \ No newline at end of file diff --git a/demo/web-desktop/cocos2d-js.931db.js b/demo/web-desktop/cocos2d-js.931db.js new file mode 100644 index 00000000..9f55adc6 --- /dev/null +++ b/demo/web-desktop/cocos2d-js.931db.js @@ -0,0 +1,55118 @@ +(function outer(modules, cache, entry) { + function newRequire(name, jumped) { + var module = cache[name]; + if (!module) { + var moduleData = modules[name]; + if (!moduleData) return; + var exports = {}; + module = cache[name] = { + exports: exports + }; + moduleData[0]((function(x) { + return newRequire(moduleData[1][x] || x); + }), module, exports); + } + return module.exports; + } + for (var i = 0; i < entry.length; i++) newRequire(entry[i]); + return newRequire; +})({ + 1: [ (function(require, module, exports) { + module.exports = { + 1001: "cocos2d: removeAction: Target not found", + 1002: "cc.ActionManager.removeActionByTag(): an invalid tag", + 1003: "cc.ActionManager.removeActionByTag(): target must be non-null", + 1004: "cc.ActionManager.getActionByTag(): an invalid tag", + 1005: "cocos2d : getActionByTag(tag = %s): Action not found", + 1006: "[Action step]. override me", + 1007: "[Action update]. override me", + 1008: "cocos2d: FiniteTimeAction#reverse: Implement me", + 1009: "cc.EaseElastic.reverse(): it should be overridden in subclass.", + 1010: "cc.IntervalAction: reverse not implemented.", + 1011: "cc.ActionInterval.setAmplitudeRate(): it should be overridden in subclass.", + 1012: "cc.ActionInterval.getAmplitudeRate(): it should be overridden in subclass.", + 1013: "The speed parameter error", + 1014: "The repeat parameter error", + 1015: "parameters should not be ending with null in Javascript", + 1016: "cc.RotateTo.reverse(): it should be overridden in subclass.", + 1019: "Failed to construct, Sequence construction needs two or more actions.", + 1020: "Failed to construct, Spawn construction needs two or more actions.", + 1021: "cc.Speed.initWithAction(): action must be non nil", + 1022: "cc.Follow.initWithAction(): followedNode must be non nil", + 1023: "cc.ActionEase.initWithAction(): action must be non nil", + 1024: "Invalid configuration. It must at least have one control point", + 1025: "cc.Sequence.initWithTwoActions(): arguments must all be non nil", + 1026: "cc.RepeatForever.initWithAction(): action must be non null", + 1027: "cc.Spawn.initWithTwoActions(): arguments must all be non null", + 1028: "cc.ReverseTime.initWithAction(): action must be non null", + 1029: "cc.ReverseTime.initWithAction(): the action was already passed in.", + 1030: "cc.Animate.initWithAnimation(): animation must be non-NULL", + 1031: "Illegal parameter get passed in cc.tween: %s.", + 1100: "Expected 'data' dict, but not found. Config file: %s", + 1101: "Please load the resource first : %s", + 1200: "cocos2d: Director: Error in gettimeofday", + 1201: "cocos2d: Director: unrecognized projection", + 1203: "cocos2d: Director: Error in gettimeofday", + 1204: "running scene should not null", + 1205: "the scene should not null", + 1206: "loadScene: The scene index to load (%s) is out of range.", + 1207: "loadScene: Unknown name type to load: '%s'", + 1208: "loadScene: Failed to load scene '%s' because '%s' is already being loaded.", + 1209: "loadScene: Can not load the scene '%s' because it was not in the build settings before playing.", + 1210: "Failed to preload '%s', %s", + 1211: "loadScene: The scene index to load (%s) is out of range.", + 1212: "loadScene: Unknown name type to load: '%s'", + 1213: "loadScene: Failed to load scene '%s' because '%s' is already loading", + 1214: "loadScene: Can not load the scene '%s' because it was not in the build settings before playing.", + 1215: "Failed to preload '%s', %s", + 1216: "Director.runSceneImmediate: scene is not valid", + 1300: "element type is wrong!", + 1400: "'%s' is deprecated, please use '%s' instead.", + 1404: "cc.spriteFrameCache is removed, please use cc.loader to load and cache sprite frames of atlas format.", + 1405: "The '%s' has been removed, please use '%s' instead.", + 1406: "'%s.%s' is removed", + 1408: "'%s' is not support in the '%s', please use '%s' instead.", + 1502: "cc.scheduler.scheduleCallbackForTarget(): target should be non-null.", + 1503: "cc.Scheduler.pauseTarget():target should be non-null", + 1504: "cc.Scheduler.resumeTarget():target should be non-null", + 1505: "cc.Scheduler.isTargetPaused():target should be non-null", + 1506: "warning: you CANNOT change update priority in scheduled function", + 1507: 'CCScheduler#scheduleSelector. Selector already scheduled. Updating interval from: %s to %s"', + 1508: "Argument callback must not be empty", + 1509: "Argument target must be non-nullptr", + 1510: "cc.Scheduler: Illegal target which doesn't have uuid or instanceId.", + 1511: "cc.Scheduler: pause state of the scheduled task doesn't match the element pause state in Scheduler, the given paused state will be ignored.", + 1513: "cc.Scheduler: scheduler stopped using `__instanceId` as id since v2.0, you should do scheduler.enableForTarget(target) before all scheduler API usage on target", + 1605: "child already added. It can't be added again", + 1606: "child must be non-null", + 1610: "cocos2d: removeChildByTag(tag = %s): child not found!", + 1612: "cc.Node.stopActionBy(): argument tag an invalid tag", + 1613: "cc.Node.getActionByTag(): argument tag is an invalid tag", + 1617: "child must be non-null", + 1618: "cc.Node.runAction(): action must be non-null", + 1619: "callback function must be non-null", + 1620: "interval must be positive", + 1623: "Set '%s' to normal node (not persist root node).", + 1624: "Replacing with the same sgNode", + 1625: "The replacement sgNode should not contain any child.", + 1626: "Should not set alpha via 'color', set 'opacity' please.", + 1627: "Not support for asynchronous creating node in SG", + 1632: "Node name can not include '/'.", + 1633: "Internal error, should not remove unknown node from parent.", + 1634: "addChild: The child to add must be instance of cc.Node, not %s.", + 1635: "reorderChild: this child is not in children list.", + 1636: "Node's zIndex value can't be greater than cc.macro.MAX_ZINDEX, setting to the maximum value", + 1637: "Node's zIndex value can't be smaller than cc.macro.MIN_ZINDEX, setting to the minimum value", + 1638: "Private node's zIndex can't be set, it will keep cc.macro.MIN_ZINDEX as its value", + 1639: "cc.Action is deprecated, please use cc.Tween instead", + 1800: "cc._EventListenerKeyboard.checkAvailable(): Invalid EventListenerKeyboard!", + 1801: "cc._EventListenerTouchOneByOne.checkAvailable(): Invalid EventListenerTouchOneByOne!", + 1802: "cc._EventListenerTouchAllAtOnce.checkAvailable(): Invalid EventListenerTouchAllAtOnce!", + 1803: "cc._EventListenerAcceleration.checkAvailable(): _onAccelerationEvent must be non-nil", + 1900: "Invalid parameter.", + 2e3: "Don't call this method if the event is for touch.", + 2200: "Design resolution not valid", + 2201: "should set resolutionPolicy", + 2300: "The touches is more than MAX_TOUCHES, nUnusedIndex = %s", + 2400: "WebGL error %s", + 2602: "cc.Sprite.setDisplayFrameWithAnimationName(): Frame not found", + 2603: "cc.Sprite.setDisplayFrameWithAnimationName(): Invalid frame index", + 2606: "cc.Sprite.initWithSpriteFrame(): spriteFrame should be non-null", + 2607: "cc.Sprite.initWithSpriteFrameName(): spriteFrameName should be non-null", + 2608: "%s is null, please check.", + 2609: "cc.Sprite.initWithFile(): filename should be non-null", + 2610: "cc.Sprite.setDisplayFrameWithAnimationName(): animationName must be non-null", + 2614: "cc.Sprite.addChild(): child should be non-null", + 2616: "cc.SpriteBatchNode.updateQuadFromSprite(): cc.SpriteBatchNode only supports cc.Sprites as children", + 2617: "cc.SpriteBatchNode.insertQuadFromSprite(): cc.SpriteBatchNode only supports cc.Sprites as children", + 2618: "cc.SpriteBatchNode.addChild(): cc.SpriteBatchNode only supports cc.Sprites as children", + 2619: "cc.SpriteBatchNode.addChild(): cc.Sprite is not using the same texture", + 2623: "cc.SpriteBatchNode.updateQuadFromSprite(): sprite should be non-null", + 2625: "too many tiles, only 16384 tiles will be show", + 2626: "Unrecognized fill type in bar fill", + 2627: "Can not generate quad", + 2628: "%s does not exist", + 2712: "Invalid spriteFrameName", + 3005: "cocos2d: '%s' id=%s %s x %s", + 3006: "cocos2d: '%s' id= HTMLCanvasElement %s x %s", + 3007: "cocos2d: TextureCache dumpDebugInfo: %s textures, HTMLCanvasElement for %s KB (%s MB)", + 3103: "cc.Texture.addImage(): path should be non-null", + 3112: "cc.Texture.addImage(): path should be non-null", + 3113: "NSInternalInconsistencyException", + 3116: "WebGLRenderingContext.CLAMP_TO_EDGE should be used in NPOT textures", + 3117: "Mimpap texture only works in POT textures", + 3119: "Lazy init texture with image element failed due to image loading failure: %s", + 3120: "Loading texture with unsupported type: '%s'. Add '%s' into 'cc.macro.SUPPORT_TEXTURE_FORMATS' please.", + 3121: "Can't find a texture format supported by the current platform! Please add a fallback format in the editor.", + 3300: "Rect width exceeds maximum margin: %s", + 3400: "Rect height exceeds maximum margin: %s", + 3401: "Set texture with a url of image is not supported anymore. Please use cc.assetManager.loadRemote to load a texture first.", + 3500: "0 priority is forbidden for fixed priority since it's used for scene graph based priority.", + 3501: "Invalid listener type!", + 3502: "Can't set fixed priority with scene graph based listener.", + 3503: "Invalid parameters.", + 3504: "listener must be a cc.EventListener object when adding a fixed priority listener", + 3505: "The listener has been registered, please don't register it again.", + 3506: "Unsupported listener target.", + 3507: "Invalid scene graph priority!", + 3508: "If program goes here, there should be event in dispatch.", + 3509: "_inDispatch should be 1 here.", + 3510: "%s's scene graph node not contains in the parent's children", + 3511: "event is undefined", + 3600: "cc.Class will automatically call super constructor of %s, you should not call it manually.", + 3601: "The editor property 'playOnFocus' should be used with 'executeInEditMode' in class '%s'", + 3602: "Unknown editor property '%s' in class '%s'.", + 3603: "Use 'cc.Float' or 'cc.Integer' instead of 'cc.Number' please.", + 3604: "Can only indicate one type attribute for %s.", + 3605: "The default value of %s is not instance of %s.", + 3606: "No needs to indicate the '%s' attribute for %s, which its default value is type of %s.", + 3607: "The default value of %s must be an empty string.", + 3608: "The type of %s must be cc.String, not String.", + 3609: "The type of %s must be cc.Boolean, not Boolean.", + 3610: "The type of %s must be cc.Float or cc.Integer, not Number.", + 3611: "Can not indicate the '%s' attribute for %s, which its default value is type of %s.", + 3612: "%s Just set the default value to 'new %s()' and it will be handled properly.", + 3613: "'No need to use 'serializable: false' or 'editorOnly: true' for the getter of '%s.%s', every getter is actually non-serialized.", + 3614: "Should not define constructor for cc.Component %s.", + 3615: "Each script can have at most one Component.", + 3616: "Should not specify class name %s for Component which defines in project.", + 3617: "Can not instantiate CCClass '%s' with arguments.", + 3618: "ctor of '%s' can not be another CCClass", + 3619: "ctor of '%s' must be function type", + 3620: "this._super declared in '%s.%s' but no super method defined", + 3621: "Unknown type of %s.%s, maybe you want is '%s'.", + 3622: "Unknown type of %s.%s, property should be defined in 'properties' or 'ctor'", + 3623: "Can not use 'editor' attribute, '%s' not inherits from Components.", + 3624: "'%s' overrided '%s' but '%s' is defined as 'false' so the super method will not be called. You can set '%s' to null to disable this warning.", + 3625: "[isChildClassOf] superclass should be function type, not", + 3626: "Can't remove '%s' because '%s' depends on it.", + 3627: "Should not add renderer component (%s) to a Canvas node.", + 3628: "Should not add %s to a node which size is already used by its other component.", + 3633: "Properties function of '%s' should return an object!", + 3634: "Disallow to use '.' in property name", + 3635: "Default array must be empty, set default value of %s.%s to [], and initialize in 'onLoad' or 'ctor' please. (just like 'this.%s = [...];')", + 3636: "Do not set default value to non-empty object, unless the object defines its own 'clone' function. Set default value of %s.%s to null or {}, and initialize in 'onLoad' or 'ctor' please. (just like 'this.%s = {foo: bar};')", + 3637: "Can not declare %s.%s, it is already defined in the prototype of %s", + 3638: "'%s': the getter of '%s' is already defined!", + 3639: "Can not apply the specified attribute to the getter of '%s.%s', attribute index: %s", + 3640: "'%s': the setter of '%s' is already defined!", + 3641: "Can not construct %s because it contains object property.", + 3642: "Cannot define %s.%s because static member name can not be '%s'.", + 3643: "Can not define a member called 'constructor' in the class '%s', please use 'ctor' instead.", + 3644: "Please define 'type' parameter of %s.%s as the actual constructor.", + 3645: "Please define 'type' parameter of %s.%s as the constructor of %s.", + 3646: "Unknown 'type' parameter of %s.%s\uff1a%s", + 3647: "The length of range array must be equal or greater than 2", + 3648: "Can not declare %s.%s method, it is already defined in the properties of %s.", + 3649: "CCClass %s have conflict between its ctor and __ctor__.", + 3651: 'Can not call `_super` or `prototype.ctor` in ES6 Classes "%s", use `super` instead please.', + 3652: "Failed to `new %s()` under the hood, %s\nIt is used for getting default values declared in TypeScript in the first place.\nPlease ensure the constructor can be called during the script's initialization.", + 3653: 'Please do not specifiy "default" attribute in decorator of "%s" property in "%s" class. \nDefault value must be initialized at their declaration:\n \n// Before:\n@property({\n type: cc.SpriteFrame\n default: null // <--\n})\nmyProp;\n// After:\n@property({\n type: cc.SpriteFrame\n})\nmyProp = null; // <--', + 3654: 'Please specifiy a default value for "%s.%s" at its declaration:\n \n// Before:\n@property(...)\nmyProp;\n// After:\n@property(...)\nmyProp = 0;', + 3655: 'Can not specifiy "get" or "set" attribute in decorator for "%s" property in "%s" class. \nPlease use:\n \n@property(...)\nget %s () {\n ...\n}\n@property\nset %s (value) {\n ...\n}', + 3700: "internal error: _prefab is undefined", + 3701: "Failed to load prefab asset for node '%s'", + 3800: "The target can not be made persist because it's not a cc.Node or it doesn't have _id property.", + 3801: "The node can not be made persist because it's not under root node.", + 3802: "The node can not be made persist because it's not in current scene.", + 3803: "The target can not be made persist because it's not a cc.Node or it doesn't have _id property.", + 3804: "getComponent: Type must be non-nil", + 3805: "Can't add component '%s' because %s already contains the same component.", + 3806: "Can't add component '%s' to %s because it conflicts with the existing '%s' derived component.", + 3807: "addComponent: Failed to get class '%s'", + 3808: "addComponent: Should not add component ('%s') when the scripts are still loading.", + 3809: "addComponent: The component to add must be a constructor", + 3810: "addComponent: The component to add must be child class of cc.Component", + 3811: "_addComponentAt: The component to add must be a constructor", + 3812: "_addComponentAt: Index out of range", + 3813: "removeComponent: Component must be non-nil", + 3814: "Argument must be non-nil", + 3815: "Component not owned by this entity", + 3816: "Node '%s' is already activating", + 3817: "Sorry, the component of '%s' which with an index of %s is corrupted! It has been removed.", + 3818: "Failed to read or parse project.json", + 3819: "Warning: target element is not a DIV or CANVAS", + 3820: "The renderer doesn't support the renderMode %s", + 3821: "Cannot change hierarchy while activating or deactivating the parent.", + 3900: "Invalid clip to add", + 3901: "Invalid clip to remove", + 3902: "clip is defaultClip, set force to true to force remove clip and animation state", + 3903: "animation state is playing, set force to true to force stop and remove clip and animation state", + 3904: "motion path of target [%s] in prop [%s] frame [%s] is not valid", + 3905: "sprite frames must be an Array.", + 3906: "Can't find easing type [%s]", + 3907: "animator not added or already removed", + 3912: "already-playing", + 4003: "Label font size can't be shirnked less than 0!", + 4004: "force notify all fonts loaded!", + 4011: "Property spriteFrame of Font '%s' is invalid. Using system font instead.", + 4012: "The texture of Font '%s' must be already loaded on JSB. Using system font instead.", + 4013: "Sorry, lineHeight of system font not supported on JSB.", + 4200: "MaskType: IMAGE_STENCIL only support WebGL mode.", + 4201: "The alphaThreshold invalid in Canvas Mode.", + 4202: "The inverted invalid in Canvas Mode.", + 4300: "can not found the %s page.", + 4400: "Invalid RichText img tag! The sprite frame name can't be found in the ImageAtlas!", + 4600: "Script attached to '%s' is missing or invalid.", + 4700: "The dom control is not created!", + 4800: "unknown asset type", + 4901: "loadRes: should not specify the extname in %s %s", + 4902: "No need to release non-cached asset.", + 4914: "Resources url '%s' does not exist.", + 4915: "Pack indices and data do not match in size", + 4916: "Failed to download package for %s", + 4921: "Invalid pipe or invalid index provided!", + 4922: "The pipe to be inserted is already in the pipeline!", + 4923: "Uuid Loader: Parse asset [ %s ] failed : %s", + 4924: "JSON Loader: Input item doesn't contain string content", + 4925: "Uuid Loader: Deserialize asset [ %s ] failed : %s", + 4926: "Audio Downloader: no web audio context.", + 4927: "Audio Downloader: audio not supported on this browser!", + 4928: "Load %s failed!", + 4929: "Load Webp ( %s ) failed", + 4930: "Load image ( %s ) failed", + 4932: 'Since v1.10, for any atlas ("%s") in the "resources" directory, it is not possible to find the contained SpriteFrames via `loadRes`, `getRes` or `releaseRes`. Load the SpriteAtlas first and then use `spriteAtlas.getSpriteFrame(name)` instead please.', + 4933: "Download Font [ %s ] failed, using Arial or system default font instead", + 5e3: "object already destroyed", + 5001: "object not yet destroyed", + 5100: "Not a plist file!", + 5200: "Warning: localStorage isn't enabled. Please confirm browser cookie or privacy option", + 5201: "browser don't support web audio", + 5202: "This feature supports WebGL render mode only.", + 5300: "Type of target to deserialize not matched with data: target is %s, data is %s", + 5301: "Can not find script '%s'", + 5302: "Can not find class '%s'", + 5303: "Failed to deserialize %s, missing _deserialize function.", + 5304: "Unable to deserialize version %s data.", + 5402: "cc.js.addon called on non-object:", + 5403: "cc.js.mixin: arguments must be type object:", + 5404: "The base class to extend from must be non-nil", + 5405: "The class to extend must be non-nil", + 5406: "Class should be extended before assigning any prototype members.", + 5500: "'notify' can not be used in 'get/set' !", + 5501: "'notify' must be used with 'default' !", + 5507: "The 'default' attribute of '%s.%s' must be an array", + 5508: "Invalid type of %s.%s", + 5510: "The 'type' attribute of '%s.%s' can not be 'Number', use cc.Float or cc.Integer instead please.", + 5511: "The 'type' attribute of '%s.%s' is undefined when loading script", + 5512: "Can not serialize '%s.%s' because the specified type is anonymous, please provide a class name or set the 'serializable' attribute of '%s.%s' to 'false'.", + 5513: "The 'default' value of '%s.%s' should not be used with a 'get' function.", + 5514: "The 'default' value of '%s.%s' should not be used with a 'set' function.", + 5515: "The 'default' value of '%s.%s' can not be an constructor. Set default to null please.", + 5516: "Property '%s.%s' must define at least one of 'default', 'get' or 'set'.", + 5517: "'%s.%s' hides inherited property '%s.%s'. To make the current property override that implementation, add the `override: true` attribute please.", + 5601: "Can not get current scene.", + 5602: "Scene is destroyed", + 5603: "reference node is destroyed", + 5700: "no %s or %s on %s", + 5800: "%s.lerp not yet implemented.", + 5801: "%s.clone not yet implemented.", + 5802: "%s.equals not yet implemented.", + 5900: "MotionStreak only support WebGL mode.", + 5901: "cc.MotionStreak.getOpacity has not been supported.", + 5902: "cc.MotionStreak.setOpacity has not been supported.", + 6e3: "Custom should not be false if file is not specified.", + 6001: "The new %s must not be NaN", + 6017: "Incomplete or corrupt PNG file", + 6018: "Invalid filter algorithm: %s", + 6019: "Invalid byte order value.", + 6020: "You forgot your towel!", + 6021: "Unknown Field Tag: %s", + 6022: "Too many bits requested", + 6023: "No bits requested", + 6024: "Cannot recover from missing StripByteCounts", + 6025: "Cannot handle sub-byte bits per sample", + 6026: "Cannot handle sub-byte bits per pixel", + 6027: "Palette image missing color map", + 6028: "Unknown Photometric Interpretation: %s", + 6029: "Unkown error", + 6030: "cc.ParticleSystem: error decoding or ungzipping textureImageData in plist '%s'", + 6031: "cc.ParticleSystem: unknown image format with Data in plist %s", + 6032: "cc.ParticleSystem.initWithDictionary() : error loading the texture in plist '%s'", + 6400: "asset.url is not usable in core process", + 6402: "AssetLibrary has already been initialized!", + 6500: "Widget target must be one of the parent nodes of it", + 6600: "collider not added or already removed", + 6601: "Can't find testFunc for (%s, $s).", + 6700: "Can't init canvas '%s' because it conflicts with the existing '%s', the scene should only have one active canvas at the same time.", + 6800: "Callback of event must be non-nil", + 6801: "The message must be provided", + 6900: "The thing you want to instantiate must be an object", + 6901: "The thing you want to instantiate is nil", + 6902: "The thing you want to instantiate is destroyed", + 6903: "The instantiate method for given asset do not implemented", + 6904: "Can not instantiate array", + 6905: "Can not instantiate DOM element", + 7100: "%s already defined in Enum.", + 7101: "Sorry, 'cc.Enum' not available on this platform, please report this error here: https://github.com/cocos-creator/engine/issues/new", + 7200: "Method 'initWithTMXFile' is no effect now, please set property 'tmxAsset' instead.", + 7201: "Method 'initWithXML' is no effect now, please set property 'tmxAsset' instead.", + 7202: "Add component TiledLayer into node failed.", + 7203: "Property 'mapLoaded' is unused now. Please write the logic to the callback 'start'.", + 7210: "TMX Hexa zOrder not supported", + 7211: "TMX invalid value", + 7215: "cocos2d: Warning: TMX Layer %s has no tiles", + 7216: "cocos2d: TMXFormat: Unsupported TMX version: %s", + 7217: "cocos2d: TMXFomat: Unsupported orientation: %s", + 7218: "cc.TMXMapInfo.parseXMLFile(): unsupported compression method", + 7219: "cc.TMXMapInfo.parseXMLFile(): Only base64 and/or gzip/zlib maps are supported", + 7221: "cc.TMXMapInfo.parseXMLFile(): Texture '%s' not found.", + 7222: "Parse %s failed.", + 7236: "cc.TMXLayer.getTileAt(): TMXLayer: the tiles map has been released", + 7237: "cc.TMXLayer.getTileGIDAt(): TMXLayer: the tiles map has been released", + 7238: "cc.TMXLayer.setTileGID(): TMXLayer: the tiles map has been released", + 7239: "cc.TMXLayer.setTileGID(): invalid gid: %s", + 7240: "cc.TMXLayer.getTileFlagsAt(): TMXLayer: the tiles map has been released", + 7241: "cc.TiledMap.initWithXML(): Map not found. Please check the filename.", + 7401: "Failed to set _defaultArmatureIndex for '%s' because the index is out of range.", + 7402: "Failed to set _animationIndex for '%s' because the index is out of range.", + 7501: "Failed to set _defaultSkinIndex for '%s' because the index is out of range.", + 7502: "Failed to set _animationIndex for '%s' because its skeletonData is invalid.", + 7503: "Failed to set _animationIndex for '%s' because the index is out of range.", + 7504: "Can not render dynamic created SkeletonData", + 7506: "Failed to load spine atlas '$s'", + 7507: "Please re-import '%s' because its textures is not initialized! (This workflow will be improved in the future.)", + 7508: "The atlas asset of '%s' is not exists!", + 7509: "Spine: Animation not found: %s", + 7510: "Spine: Animation not found: %s", + 7600: "The context of RenderTexture is invalid.", + 7601: "cc.RenderTexture._initWithWidthAndHeightForWebGL() : only RGB and RGBA formats are valid for a render texture;", + 7602: "Could not attach texture to the framebuffer", + 7603: "clearDepth isn't supported on Cocos2d-Html5", + 7604: "saveToFile isn't supported on Cocos2d-Html5", + 7605: "newCCImage isn't supported on Cocos2d-Html5", + 7700: "On the web is always keep the aspect ratio", + 7701: "Can't know status", + 7702: "Video player's duration is not ready to get now!", + 7800: "Web does not support loading", + 7801: "Web does not support query history", + 7802: "Web does not support query history", + 7803: "The current browser does not support the GoBack", + 7804: "The current browser does not support the GoForward", + 7805: "Web does not support zoom", + 7900: "cc.math.Matrix3.assign(): current matrix equals matIn", + 7901: "cc.math.mat4Assign(): pOut equals pIn", + 7902: "cc.mat.Matrix4.assignFrom(): mat4 equals current matrix", + 7903: "cc.math.Matrix4 equal: pMat1 and pMat2 are same object.", + 7904: "cc.math.Matrix4.extractPlane: Invalid plane index", + 7905: "cc.math.mat4Assign(): pOut equals pIn", + 7906: "cc.mat.Matrix4.assignFrom(): mat4 equals current matrix", + 7907: "cc.math.Matrix4 equals: pMat1 and pMat2 are same object.", + 7908: "Invalid matrix mode specified", + 7909: "current quaternion is an invalid value", + 8e3: "Can't handle this field type or size", + 8001: "No bytes requested", + 8002: "Too many bytes requested", + 8003: "Missing StripByteCounts!", + 8103: "cc.GLProgram.link(): Cannot link invalid program", + 8104: "cocos2d: ERROR: Failed to link program: %s", + 8105: "cocos2d: cc.shaderCache._loadDefaultShader, error shader type", + 8106: "Please load the resource firset : %s", + 8107: "cc.GLProgram.getUniformLocationForName(): uniform name should be non-null", + 8108: "cc.GLProgram.getUniformLocationForName(): Invalid operation. Cannot get uniform location when program is not initialized", + 8109: "modelView matrix is undefined.", + 8200: "Please set node's active instead of rigidbody's enabled.", + 8300: "Should only one camera exists, please check your project.", + 8301: "Camera does not support Canvas Mode.", + 8400: "Wrong type arguments, 'filePath' must be a String.", + 8401: "Since 1.10, `%s` accept %s instance directly, not a URL string. Please directly reference the %s object in your script, or load %s by loader first. Don't use %s's URL anymore.", + 9e3: "Stencil manager does not support level bigger than %d in this device.", + 9001: "Stencil manager is already empty, cannot pop any mask.", + 9100: "LabelAtlas '%s' cannot be loaded, raw texture does not exist.", + 9101: "LabelAtlas '%s' cannot be loaded, fnt data does not exist.", + 9102: "Program not support highp precision, will change to mediump.", + 9103: "%s : Failed to set property [%s], property not found.", + 9104: "%s : Failed to define [%s], define not found.", + 9105: "%s : Failed to set property [%s], property length not correct.", + 9106: "%s : Set property [%s] warning : should transform object to ArrayBuffer.", + 9107: "%s : illegal property: [%s], myabe defined an unused property;", + 9200: "cc.view.enableAntiAlias is deprecated, please use cc.Texture2D.setFilters instead", + "0100": "%s not yet implemented." + }; + }), {} ], + 2: [ (function(require, module, exports) { + "use strict"; + require("../core/platform/CCClass"); + var misc = require("../core/utils/misc"); + cc.Action = cc.Class({ + name: "cc.Action", + ctor: function ctor() { + this.originalTarget = null; + this.target = null; + this.tag = cc.Action.TAG_INVALID; + }, + clone: function clone() { + var action = new cc.Action(); + action.originalTarget = null; + action.target = null; + action.tag = this.tag; + return action; + }, + isDone: function isDone() { + return true; + }, + startWithTarget: function startWithTarget(target) { + this.originalTarget = target; + this.target = target; + }, + stop: function stop() { + this.target = null; + }, + step: function step(dt) { + cc.logID(1006); + }, + update: function update(dt) { + cc.logID(1007); + }, + getTarget: function getTarget() { + return this.target; + }, + setTarget: function setTarget(target) { + this.target = target; + }, + getOriginalTarget: function getOriginalTarget() { + return this.originalTarget; + }, + setOriginalTarget: function setOriginalTarget(originalTarget) { + this.originalTarget = originalTarget; + }, + getTag: function getTag() { + return this.tag; + }, + setTag: function setTag(tag) { + this.tag = tag; + }, + retain: function retain() {}, + release: function release() {} + }); + cc.Action.TAG_INVALID = -1; + cc.FiniteTimeAction = cc.Class({ + name: "cc.FiniteTimeAction", + extends: cc.Action, + ctor: function ctor() { + this._duration = 0; + }, + getDuration: function getDuration() { + return this._duration * (this._timesForRepeat || 1); + }, + setDuration: function setDuration(duration) { + this._duration = duration; + }, + reverse: function reverse() { + cc.logID(1008); + return null; + }, + clone: function clone() { + return new cc.FiniteTimeAction(); + } + }); + cc.Speed = cc.Class({ + name: "cc.Speed", + extends: cc.Action, + ctor: function ctor(action, speed) { + this._speed = 0; + this._innerAction = null; + action && this.initWithAction(action, speed); + }, + getSpeed: function getSpeed() { + return this._speed; + }, + setSpeed: function setSpeed(speed) { + this._speed = speed; + }, + initWithAction: function initWithAction(action, speed) { + if (!action) { + cc.errorID(1021); + return false; + } + this._innerAction = action; + this._speed = speed; + return true; + }, + clone: function clone() { + var action = new cc.Speed(); + action.initWithAction(this._innerAction.clone(), this._speed); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.Action.prototype.startWithTarget.call(this, target); + this._innerAction.startWithTarget(target); + }, + stop: function stop() { + this._innerAction.stop(); + cc.Action.prototype.stop.call(this); + }, + step: function step(dt) { + this._innerAction.step(dt * this._speed); + }, + isDone: function isDone() { + return this._innerAction.isDone(); + }, + reverse: function reverse() { + return new cc.Speed(this._innerAction.reverse(), this._speed); + }, + setInnerAction: function setInnerAction(action) { + this._innerAction !== action && (this._innerAction = action); + }, + getInnerAction: function getInnerAction() { + return this._innerAction; + } + }); + cc.speed = function(action, speed) { + return new cc.Speed(action, speed); + }; + cc.Follow = cc.Class({ + name: "cc.Follow", + extends: cc.Action, + ctor: function ctor(followedNode, rect) { + this._followedNode = null; + this._boundarySet = false; + this._boundaryFullyCovered = false; + this._halfScreenSize = null; + this._fullScreenSize = null; + this.leftBoundary = 0; + this.rightBoundary = 0; + this.topBoundary = 0; + this.bottomBoundary = 0; + this._worldRect = cc.rect(0, 0, 0, 0); + followedNode && (rect ? this.initWithTarget(followedNode, rect) : this.initWithTarget(followedNode)); + }, + clone: function clone() { + var action = new cc.Follow(); + var locRect = this._worldRect; + var rect = new cc.Rect(locRect.x, locRect.y, locRect.width, locRect.height); + action.initWithTarget(this._followedNode, rect); + return action; + }, + isBoundarySet: function isBoundarySet() { + return this._boundarySet; + }, + setBoudarySet: function setBoudarySet(value) { + this._boundarySet = value; + }, + initWithTarget: function initWithTarget(followedNode, rect) { + if (!followedNode) { + cc.errorID(1022); + return false; + } + var _this = this; + rect = rect || cc.rect(0, 0, 0, 0); + _this._followedNode = followedNode; + _this._worldRect = rect; + _this._boundarySet = !(0 === rect.width && 0 === rect.height); + _this._boundaryFullyCovered = false; + var winSize = cc.winSize; + _this._fullScreenSize = cc.v2(winSize.width, winSize.height); + _this._halfScreenSize = _this._fullScreenSize.mul(.5); + if (_this._boundarySet) { + _this.leftBoundary = -(rect.x + rect.width - _this._fullScreenSize.x); + _this.rightBoundary = -rect.x; + _this.topBoundary = -rect.y; + _this.bottomBoundary = -(rect.y + rect.height - _this._fullScreenSize.y); + _this.rightBoundary < _this.leftBoundary && (_this.rightBoundary = _this.leftBoundary = (_this.leftBoundary + _this.rightBoundary) / 2); + _this.topBoundary < _this.bottomBoundary && (_this.topBoundary = _this.bottomBoundary = (_this.topBoundary + _this.bottomBoundary) / 2); + _this.topBoundary === _this.bottomBoundary && _this.leftBoundary === _this.rightBoundary && (_this._boundaryFullyCovered = true); + } + return true; + }, + step: function step(dt) { + var targetWorldPos = this.target.convertToWorldSpaceAR(cc.Vec2.ZERO); + var followedWorldPos = this._followedNode.convertToWorldSpaceAR(cc.Vec2.ZERO); + var delta = targetWorldPos.sub(followedWorldPos); + var tempPos = this.target.parent.convertToNodeSpaceAR(delta.add(this._halfScreenSize)); + if (this._boundarySet) { + if (this._boundaryFullyCovered) return; + this.target.setPosition(misc.clampf(tempPos.x, this.leftBoundary, this.rightBoundary), misc.clampf(tempPos.y, this.bottomBoundary, this.topBoundary)); + } else this.target.setPosition(tempPos.x, tempPos.y); + }, + isDone: function isDone() { + return !this._followedNode.activeInHierarchy; + }, + stop: function stop() { + this.target = null; + cc.Action.prototype.stop.call(this); + } + }); + cc.follow = function(followedNode, rect) { + return new cc.Follow(followedNode, rect); + }; + }), { + "../core/platform/CCClass": 121, + "../core/utils/misc": 205 + } ], + 3: [ (function(require, module, exports) { + "use strict"; + function cardinalSplineAt(p0, p1, p2, p3, tension, t) { + var t2 = t * t; + var t3 = t2 * t; + var s = (1 - tension) / 2; + var b1 = s * (2 * t2 - t3 - t); + var b2 = s * (-t3 + t2) + (2 * t3 - 3 * t2 + 1); + var b3 = s * (t3 - 2 * t2 + t) + (-2 * t3 + 3 * t2); + var b4 = s * (t3 - t2); + var x = p0.x * b1 + p1.x * b2 + p2.x * b3 + p3.x * b4; + var y = p0.y * b1 + p1.y * b2 + p2.y * b3 + p3.y * b4; + return cc.v2(x, y); + } + function getControlPointAt(controlPoints, pos) { + var p = Math.min(controlPoints.length - 1, Math.max(pos, 0)); + return controlPoints[p]; + } + function reverseControlPoints(controlPoints) { + var newArray = []; + for (var i = controlPoints.length - 1; i >= 0; i--) newArray.push(cc.v2(controlPoints[i].x, controlPoints[i].y)); + return newArray; + } + function cloneControlPoints(controlPoints) { + var newArray = []; + for (var i = 0; i < controlPoints.length; i++) newArray.push(cc.v2(controlPoints[i].x, controlPoints[i].y)); + return newArray; + } + cc.CardinalSplineTo = cc.Class({ + name: "cc.CardinalSplineTo", + extends: cc.ActionInterval, + ctor: function ctor(duration, points, tension) { + this._points = []; + this._deltaT = 0; + this._tension = 0; + this._previousPosition = null; + this._accumulatedDiff = null; + void 0 !== tension && cc.CardinalSplineTo.prototype.initWithDuration.call(this, duration, points, tension); + }, + initWithDuration: function initWithDuration(duration, points, tension) { + if (!points || 0 === points.length) { + cc.errorID(1024); + return false; + } + if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) { + this.setPoints(points); + this._tension = tension; + return true; + } + return false; + }, + clone: function clone() { + var action = new cc.CardinalSplineTo(); + action.initWithDuration(this._duration, cloneControlPoints(this._points), this._tension); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.ActionInterval.prototype.startWithTarget.call(this, target); + this._deltaT = 1 / (this._points.length - 1); + this._previousPosition = cc.v2(this.target.x, this.target.y); + this._accumulatedDiff = cc.v2(0, 0); + }, + update: function update(dt) { + dt = this._computeEaseTime(dt); + var p, lt; + var ps = this._points; + if (1 === dt) { + p = ps.length - 1; + lt = 1; + } else { + var locDT = this._deltaT; + p = 0 | dt / locDT; + lt = (dt - locDT * p) / locDT; + } + var newPos = cardinalSplineAt(getControlPointAt(ps, p - 1), getControlPointAt(ps, p - 0), getControlPointAt(ps, p + 1), getControlPointAt(ps, p + 2), this._tension, lt); + if (cc.macro.ENABLE_STACKABLE_ACTIONS) { + var tempX, tempY; + tempX = this.target.x - this._previousPosition.x; + tempY = this.target.y - this._previousPosition.y; + if (0 !== tempX || 0 !== tempY) { + var locAccDiff = this._accumulatedDiff; + tempX = locAccDiff.x + tempX; + tempY = locAccDiff.y + tempY; + locAccDiff.x = tempX; + locAccDiff.y = tempY; + newPos.x += tempX; + newPos.y += tempY; + } + } + this.updatePosition(newPos); + }, + reverse: function reverse() { + var reversePoints = reverseControlPoints(this._points); + return cc.cardinalSplineTo(this._duration, reversePoints, this._tension); + }, + updatePosition: function updatePosition(newPos) { + this.target.setPosition(newPos); + this._previousPosition = newPos; + }, + getPoints: function getPoints() { + return this._points; + }, + setPoints: function setPoints(points) { + this._points = points; + } + }); + cc.cardinalSplineTo = function(duration, points, tension) { + return new cc.CardinalSplineTo(duration, points, tension); + }; + cc.CardinalSplineBy = cc.Class({ + name: "cc.CardinalSplineBy", + extends: cc.CardinalSplineTo, + ctor: function ctor(duration, points, tension) { + this._startPosition = cc.v2(0, 0); + void 0 !== tension && this.initWithDuration(duration, points, tension); + }, + startWithTarget: function startWithTarget(target) { + cc.CardinalSplineTo.prototype.startWithTarget.call(this, target); + this._startPosition.x = target.x; + this._startPosition.y = target.y; + }, + reverse: function reverse() { + var copyConfig = this._points.slice(); + var current; + var p = copyConfig[0]; + for (var i = 1; i < copyConfig.length; ++i) { + current = copyConfig[i]; + copyConfig[i] = current.sub(p); + p = current; + } + var reverseArray = reverseControlPoints(copyConfig); + p = reverseArray[reverseArray.length - 1]; + reverseArray.pop(); + p.x = -p.x; + p.y = -p.y; + reverseArray.unshift(p); + for (var i = 1; i < reverseArray.length; ++i) { + current = reverseArray[i]; + current.x = -current.x; + current.y = -current.y; + current.x += p.x; + current.y += p.y; + reverseArray[i] = current; + p = current; + } + return cc.cardinalSplineBy(this._duration, reverseArray, this._tension); + }, + updatePosition: function updatePosition(newPos) { + var pos = this._startPosition; + var posX = newPos.x + pos.x; + var posY = newPos.y + pos.y; + this._previousPosition.x = posX; + this._previousPosition.y = posY; + this.target.setPosition(posX, posY); + }, + clone: function clone() { + var a = new cc.CardinalSplineBy(); + a.initWithDuration(this._duration, cloneControlPoints(this._points), this._tension); + return a; + } + }); + cc.cardinalSplineBy = function(duration, points, tension) { + return new cc.CardinalSplineBy(duration, points, tension); + }; + cc.CatmullRomTo = cc.Class({ + name: "cc.CatmullRomTo", + extends: cc.CardinalSplineTo, + ctor: function ctor(dt, points) { + points && this.initWithDuration(dt, points); + }, + initWithDuration: function initWithDuration(dt, points) { + return cc.CardinalSplineTo.prototype.initWithDuration.call(this, dt, points, .5); + }, + clone: function clone() { + var action = new cc.CatmullRomTo(); + action.initWithDuration(this._duration, cloneControlPoints(this._points)); + return action; + } + }); + cc.catmullRomTo = function(dt, points) { + return new cc.CatmullRomTo(dt, points); + }; + cc.CatmullRomBy = cc.Class({ + name: "cc.CatmullRomBy", + extends: cc.CardinalSplineBy, + ctor: function ctor(dt, points) { + points && this.initWithDuration(dt, points); + }, + initWithDuration: function initWithDuration(dt, points) { + return cc.CardinalSplineTo.prototype.initWithDuration.call(this, dt, points, .5); + }, + clone: function clone() { + var action = new cc.CatmullRomBy(); + action.initWithDuration(this._duration, cloneControlPoints(this._points)); + return action; + } + }); + cc.catmullRomBy = function(dt, points) { + return new cc.CatmullRomBy(dt, points); + }; + }), {} ], + 4: [ (function(require, module, exports) { + "use strict"; + cc.easeIn = function(rate) { + return { + _rate: rate, + easing: function easing(dt) { + return Math.pow(dt, this._rate); + }, + reverse: function reverse() { + return cc.easeIn(1 / this._rate); + } + }; + }; + cc.easeOut = function(rate) { + return { + _rate: rate, + easing: function easing(dt) { + return Math.pow(dt, 1 / this._rate); + }, + reverse: function reverse() { + return cc.easeOut(1 / this._rate); + } + }; + }; + cc.easeInOut = function(rate) { + return { + _rate: rate, + easing: function easing(dt) { + dt *= 2; + return dt < 1 ? .5 * Math.pow(dt, this._rate) : 1 - .5 * Math.pow(2 - dt, this._rate); + }, + reverse: function reverse() { + return cc.easeInOut(this._rate); + } + }; + }; + var _easeExponentialInObj = { + easing: function easing(dt) { + return 0 === dt ? 0 : Math.pow(2, 10 * (dt - 1)); + }, + reverse: function reverse() { + return _easeExponentialOutObj; + } + }; + cc.easeExponentialIn = function() { + return _easeExponentialInObj; + }; + var _easeExponentialOutObj = { + easing: function easing(dt) { + return 1 === dt ? 1 : 1 - Math.pow(2, -10 * dt); + }, + reverse: function reverse() { + return _easeExponentialInObj; + } + }; + cc.easeExponentialOut = function() { + return _easeExponentialOutObj; + }; + var _easeExponentialInOutObj = { + easing: function easing(dt) { + if (1 !== dt && 0 !== dt) { + dt *= 2; + return dt < 1 ? .5 * Math.pow(2, 10 * (dt - 1)) : .5 * (2 - Math.pow(2, -10 * (dt - 1))); + } + return dt; + }, + reverse: function reverse() { + return _easeExponentialInOutObj; + } + }; + cc.easeExponentialInOut = function() { + return _easeExponentialInOutObj; + }; + var _easeSineInObj = { + easing: function easing(dt) { + return 0 === dt || 1 === dt ? dt : -1 * Math.cos(dt * Math.PI / 2) + 1; + }, + reverse: function reverse() { + return _easeSineOutObj; + } + }; + cc.easeSineIn = function() { + return _easeSineInObj; + }; + var _easeSineOutObj = { + easing: function easing(dt) { + return 0 === dt || 1 === dt ? dt : Math.sin(dt * Math.PI / 2); + }, + reverse: function reverse() { + return _easeSineInObj; + } + }; + cc.easeSineOut = function() { + return _easeSineOutObj; + }; + var _easeSineInOutObj = { + easing: function easing(dt) { + return 0 === dt || 1 === dt ? dt : -.5 * (Math.cos(Math.PI * dt) - 1); + }, + reverse: function reverse() { + return _easeSineInOutObj; + } + }; + cc.easeSineInOut = function() { + return _easeSineInOutObj; + }; + var _easeElasticInObj = { + easing: function easing(dt) { + if (0 === dt || 1 === dt) return dt; + dt -= 1; + return -Math.pow(2, 10 * dt) * Math.sin((dt - .075) * Math.PI * 2 / .3); + }, + reverse: function reverse() { + return _easeElasticOutObj; + } + }; + cc.easeElasticIn = function(period) { + if (period && .3 !== period) return { + _period: period, + easing: function easing(dt) { + if (0 === dt || 1 === dt) return dt; + dt -= 1; + return -Math.pow(2, 10 * dt) * Math.sin((dt - this._period / 4) * Math.PI * 2 / this._period); + }, + reverse: function reverse() { + return cc.easeElasticOut(this._period); + } + }; + return _easeElasticInObj; + }; + var _easeElasticOutObj = { + easing: function easing(dt) { + return 0 === dt || 1 === dt ? dt : Math.pow(2, -10 * dt) * Math.sin((dt - .075) * Math.PI * 2 / .3) + 1; + }, + reverse: function reverse() { + return _easeElasticInObj; + } + }; + cc.easeElasticOut = function(period) { + if (period && .3 !== period) return { + _period: period, + easing: function easing(dt) { + return 0 === dt || 1 === dt ? dt : Math.pow(2, -10 * dt) * Math.sin((dt - this._period / 4) * Math.PI * 2 / this._period) + 1; + }, + reverse: function reverse() { + return cc.easeElasticIn(this._period); + } + }; + return _easeElasticOutObj; + }; + cc.easeElasticInOut = function(period) { + period = period || .3; + return { + _period: period, + easing: function easing(dt) { + var newT = 0; + var locPeriod = this._period; + if (0 === dt || 1 === dt) newT = dt; else { + dt *= 2; + locPeriod || (locPeriod = this._period = .3 * 1.5); + var s = locPeriod / 4; + dt -= 1; + newT = dt < 0 ? -.5 * Math.pow(2, 10 * dt) * Math.sin((dt - s) * Math.PI * 2 / locPeriod) : Math.pow(2, -10 * dt) * Math.sin((dt - s) * Math.PI * 2 / locPeriod) * .5 + 1; + } + return newT; + }, + reverse: function reverse() { + return cc.easeElasticInOut(this._period); + } + }; + }; + function _bounceTime(time1) { + if (time1 < 1 / 2.75) return 7.5625 * time1 * time1; + if (time1 < 2 / 2.75) { + time1 -= 1.5 / 2.75; + return 7.5625 * time1 * time1 + .75; + } + if (time1 < 2.5 / 2.75) { + time1 -= 2.25 / 2.75; + return 7.5625 * time1 * time1 + .9375; + } + time1 -= 2.625 / 2.75; + return 7.5625 * time1 * time1 + .984375; + } + var _easeBounceInObj = { + easing: function easing(dt) { + return 1 - _bounceTime(1 - dt); + }, + reverse: function reverse() { + return _easeBounceOutObj; + } + }; + cc.easeBounceIn = function() { + return _easeBounceInObj; + }; + var _easeBounceOutObj = { + easing: function easing(dt) { + return _bounceTime(dt); + }, + reverse: function reverse() { + return _easeBounceInObj; + } + }; + cc.easeBounceOut = function() { + return _easeBounceOutObj; + }; + var _easeBounceInOutObj = { + easing: function easing(time1) { + var newT; + if (time1 < .5) { + time1 *= 2; + newT = .5 * (1 - _bounceTime(1 - time1)); + } else newT = .5 * _bounceTime(2 * time1 - 1) + .5; + return newT; + }, + reverse: function reverse() { + return _easeBounceInOutObj; + } + }; + cc.easeBounceInOut = function() { + return _easeBounceInOutObj; + }; + var _easeBackInObj = { + easing: function easing(time1) { + var overshoot = 1.70158; + return 0 === time1 || 1 === time1 ? time1 : time1 * time1 * ((overshoot + 1) * time1 - overshoot); + }, + reverse: function reverse() { + return _easeBackOutObj; + } + }; + cc.easeBackIn = function() { + return _easeBackInObj; + }; + var _easeBackOutObj = { + easing: function easing(time1) { + if (0 === time1) return 0; + var overshoot = 1.70158; + time1 -= 1; + return time1 * time1 * ((overshoot + 1) * time1 + overshoot) + 1; + }, + reverse: function reverse() { + return _easeBackInObj; + } + }; + cc.easeBackOut = function() { + return _easeBackOutObj; + }; + var _easeBackInOutObj = { + easing: function easing(time1) { + var overshoot = 2.5949095; + time1 *= 2; + if (time1 < 1) return time1 * time1 * ((overshoot + 1) * time1 - overshoot) / 2; + time1 -= 2; + return time1 * time1 * ((overshoot + 1) * time1 + overshoot) / 2 + 1; + }, + reverse: function reverse() { + return _easeBackInOutObj; + } + }; + cc.easeBackInOut = function() { + return _easeBackInOutObj; + }; + cc.easeBezierAction = function(a, b, c, d) { + return { + easing: function easing(t) { + return Math.pow(1 - t, 3) * a + 3 * t * Math.pow(1 - t, 2) * b + 3 * Math.pow(t, 2) * (1 - t) * c + Math.pow(t, 3) * d; + }, + reverse: function reverse() { + return cc.easeBezierAction(d, c, b, a); + } + }; + }; + var _easeQuadraticActionIn = { + easing: function easing(time) { + return Math.pow(time, 2); + }, + reverse: function reverse() { + return _easeQuadraticActionIn; + } + }; + cc.easeQuadraticActionIn = function() { + return _easeQuadraticActionIn; + }; + var _easeQuadraticActionOut = { + easing: function easing(time) { + return -time * (time - 2); + }, + reverse: function reverse() { + return _easeQuadraticActionOut; + } + }; + cc.easeQuadraticActionOut = function() { + return _easeQuadraticActionOut; + }; + var _easeQuadraticActionInOut = { + easing: function easing(time) { + var resultTime = time; + time *= 2; + if (time < 1) resultTime = time * time * .5; else { + --time; + resultTime = -.5 * (time * (time - 2) - 1); + } + return resultTime; + }, + reverse: function reverse() { + return _easeQuadraticActionInOut; + } + }; + cc.easeQuadraticActionInOut = function() { + return _easeQuadraticActionInOut; + }; + var _easeQuarticActionIn = { + easing: function easing(time) { + return time * time * time * time; + }, + reverse: function reverse() { + return _easeQuarticActionIn; + } + }; + cc.easeQuarticActionIn = function() { + return _easeQuarticActionIn; + }; + var _easeQuarticActionOut = { + easing: function easing(time) { + time -= 1; + return -(time * time * time * time - 1); + }, + reverse: function reverse() { + return _easeQuarticActionOut; + } + }; + cc.easeQuarticActionOut = function() { + return _easeQuarticActionOut; + }; + var _easeQuarticActionInOut = { + easing: function easing(time) { + time *= 2; + if (time < 1) return .5 * time * time * time * time; + time -= 2; + return -.5 * (time * time * time * time - 2); + }, + reverse: function reverse() { + return _easeQuarticActionInOut; + } + }; + cc.easeQuarticActionInOut = function() { + return _easeQuarticActionInOut; + }; + var _easeQuinticActionIn = { + easing: function easing(time) { + return time * time * time * time * time; + }, + reverse: function reverse() { + return _easeQuinticActionIn; + } + }; + cc.easeQuinticActionIn = function() { + return _easeQuinticActionIn; + }; + var _easeQuinticActionOut = { + easing: function easing(time) { + time -= 1; + return time * time * time * time * time + 1; + }, + reverse: function reverse() { + return _easeQuinticActionOut; + } + }; + cc.easeQuinticActionOut = function() { + return _easeQuinticActionOut; + }; + var _easeQuinticActionInOut = { + easing: function easing(time) { + time *= 2; + if (time < 1) return .5 * time * time * time * time * time; + time -= 2; + return .5 * (time * time * time * time * time + 2); + }, + reverse: function reverse() { + return _easeQuinticActionInOut; + } + }; + cc.easeQuinticActionInOut = function() { + return _easeQuinticActionInOut; + }; + var _easeCircleActionIn = { + easing: function easing(time) { + return -1 * (Math.sqrt(1 - time * time) - 1); + }, + reverse: function reverse() { + return _easeCircleActionIn; + } + }; + cc.easeCircleActionIn = function() { + return _easeCircleActionIn; + }; + var _easeCircleActionOut = { + easing: function easing(time) { + time -= 1; + return Math.sqrt(1 - time * time); + }, + reverse: function reverse() { + return _easeCircleActionOut; + } + }; + cc.easeCircleActionOut = function() { + return _easeCircleActionOut; + }; + var _easeCircleActionInOut = { + easing: function easing(time) { + time *= 2; + if (time < 1) return -.5 * (Math.sqrt(1 - time * time) - 1); + time -= 2; + return .5 * (Math.sqrt(1 - time * time) + 1); + }, + reverse: function reverse() { + return _easeCircleActionInOut; + } + }; + cc.easeCircleActionInOut = function() { + return _easeCircleActionInOut; + }; + var _easeCubicActionIn = { + easing: function easing(time) { + return time * time * time; + }, + reverse: function reverse() { + return _easeCubicActionIn; + } + }; + cc.easeCubicActionIn = function() { + return _easeCubicActionIn; + }; + var _easeCubicActionOut = { + easing: function easing(time) { + time -= 1; + return time * time * time + 1; + }, + reverse: function reverse() { + return _easeCubicActionOut; + } + }; + cc.easeCubicActionOut = function() { + return _easeCubicActionOut; + }; + var _easeCubicActionInOut = { + easing: function easing(time) { + time *= 2; + if (time < 1) return .5 * time * time * time; + time -= 2; + return .5 * (time * time * time + 2); + }, + reverse: function reverse() { + return _easeCubicActionInOut; + } + }; + cc.easeCubicActionInOut = function() { + return _easeCubicActionInOut; + }; + }), {} ], + 5: [ (function(require, module, exports) { + "use strict"; + cc.ActionInstant = cc.Class({ + name: "cc.ActionInstant", + extends: cc.FiniteTimeAction, + isDone: function isDone() { + return true; + }, + step: function step(dt) { + this.update(1); + }, + update: function update(dt) {}, + reverse: function reverse() { + return this.clone(); + }, + clone: function clone() { + return new cc.ActionInstant(); + } + }); + cc.Show = cc.Class({ + name: "cc.Show", + extends: cc.ActionInstant, + update: function update(dt) { + var _renderComps = this.target.getComponentsInChildren(cc.RenderComponent); + for (var i = 0; i < _renderComps.length; ++i) { + var render = _renderComps[i]; + render.enabled = true; + } + }, + reverse: function reverse() { + return new cc.Hide(); + }, + clone: function clone() { + return new cc.Show(); + } + }); + cc.show = function() { + return new cc.Show(); + }; + cc.Hide = cc.Class({ + name: "cc.Hide", + extends: cc.ActionInstant, + update: function update(dt) { + var _renderComps = this.target.getComponentsInChildren(cc.RenderComponent); + for (var i = 0; i < _renderComps.length; ++i) { + var render = _renderComps[i]; + render.enabled = false; + } + }, + reverse: function reverse() { + return new cc.Show(); + }, + clone: function clone() { + return new cc.Hide(); + } + }); + cc.hide = function() { + return new cc.Hide(); + }; + cc.ToggleVisibility = cc.Class({ + name: "cc.ToggleVisibility", + extends: cc.ActionInstant, + update: function update(dt) { + var _renderComps = this.target.getComponentsInChildren(cc.RenderComponent); + for (var i = 0; i < _renderComps.length; ++i) { + var render = _renderComps[i]; + render.enabled = !render.enabled; + } + }, + reverse: function reverse() { + return new cc.ToggleVisibility(); + }, + clone: function clone() { + return new cc.ToggleVisibility(); + } + }); + cc.toggleVisibility = function() { + return new cc.ToggleVisibility(); + }; + cc.RemoveSelf = cc.Class({ + name: "cc.RemoveSelf", + extends: cc.ActionInstant, + ctor: function ctor(isNeedCleanUp) { + this._isNeedCleanUp = true; + void 0 !== isNeedCleanUp && this.init(isNeedCleanUp); + }, + update: function update(dt) { + this.target.removeFromParent(this._isNeedCleanUp); + }, + init: function init(isNeedCleanUp) { + this._isNeedCleanUp = isNeedCleanUp; + return true; + }, + reverse: function reverse() { + return new cc.RemoveSelf(this._isNeedCleanUp); + }, + clone: function clone() { + return new cc.RemoveSelf(this._isNeedCleanUp); + } + }); + cc.removeSelf = function(isNeedCleanUp) { + return new cc.RemoveSelf(isNeedCleanUp); + }; + cc.DestroySelf = cc.Class({ + name: "cc.DestroySelf", + extends: cc.ActionInstant, + update: function update() { + this.target.destroy(); + }, + reverse: function reverse() { + return new cc.DestroySelf(); + }, + clone: function clone() { + return new cc.DestroySelf(); + } + }); + cc.destroySelf = function() { + return new cc.DestroySelf(); + }; + cc.FlipX = cc.Class({ + name: "cc.FlipX", + extends: cc.ActionInstant, + ctor: function ctor(flip) { + this._flippedX = false; + void 0 !== flip && this.initWithFlipX(flip); + }, + initWithFlipX: function initWithFlipX(flip) { + this._flippedX = flip; + return true; + }, + update: function update(dt) { + this.target.scaleX = Math.abs(this.target.scaleX) * (this._flippedX ? -1 : 1); + }, + reverse: function reverse() { + return new cc.FlipX(!this._flippedX); + }, + clone: function clone() { + var action = new cc.FlipX(); + action.initWithFlipX(this._flippedX); + return action; + } + }); + cc.flipX = function(flip) { + return new cc.FlipX(flip); + }; + cc.FlipY = cc.Class({ + name: "cc.FlipY", + extends: cc.ActionInstant, + ctor: function ctor(flip) { + this._flippedY = false; + void 0 !== flip && this.initWithFlipY(flip); + }, + initWithFlipY: function initWithFlipY(flip) { + this._flippedY = flip; + return true; + }, + update: function update(dt) { + this.target.scaleY = Math.abs(this.target.scaleY) * (this._flippedY ? -1 : 1); + }, + reverse: function reverse() { + return new cc.FlipY(!this._flippedY); + }, + clone: function clone() { + var action = new cc.FlipY(); + action.initWithFlipY(this._flippedY); + return action; + } + }); + cc.flipY = function(flip) { + return new cc.FlipY(flip); + }; + cc.Place = cc.Class({ + name: "cc.Place", + extends: cc.ActionInstant, + ctor: function ctor(pos, y) { + this._x = 0; + this._y = 0; + if (void 0 !== pos) { + if (void 0 !== pos.x) { + y = pos.y; + pos = pos.x; + } + this.initWithPosition(pos, y); + } + }, + initWithPosition: function initWithPosition(x, y) { + this._x = x; + this._y = y; + return true; + }, + update: function update(dt) { + this.target.setPosition(this._x, this._y); + }, + clone: function clone() { + var action = new cc.Place(); + action.initWithPosition(this._x, this._y); + return action; + } + }); + cc.place = function(pos, y) { + return new cc.Place(pos, y); + }; + cc.CallFunc = cc.Class({ + name: "cc.CallFunc", + extends: cc.ActionInstant, + ctor: function ctor(selector, selectorTarget, data) { + this._selectorTarget = null; + this._function = null; + this._data = null; + this.initWithFunction(selector, selectorTarget, data); + }, + initWithFunction: function initWithFunction(selector, selectorTarget, data) { + selector && (this._function = selector); + selectorTarget && (this._selectorTarget = selectorTarget); + void 0 !== data && (this._data = data); + return true; + }, + execute: function execute() { + this._function && this._function.call(this._selectorTarget, this.target, this._data); + }, + update: function update(dt) { + this.execute(); + }, + getTargetCallback: function getTargetCallback() { + return this._selectorTarget; + }, + setTargetCallback: function setTargetCallback(sel) { + if (sel !== this._selectorTarget) { + this._selectorTarget && (this._selectorTarget = null); + this._selectorTarget = sel; + } + }, + clone: function clone() { + var action = new cc.CallFunc(); + action.initWithFunction(this._function, this._selectorTarget, this._data); + return action; + } + }); + cc.callFunc = function(selector, selectorTarget, data) { + return new cc.CallFunc(selector, selectorTarget, data); + }; + }), {} ], + 6: [ (function(require, module, exports) { + "use strict"; + cc.ActionInterval = cc.Class({ + name: "cc.ActionInterval", + extends: cc.FiniteTimeAction, + ctor: function ctor(d) { + this.MAX_VALUE = 2; + this._elapsed = 0; + this._firstTick = false; + this._easeList = null; + this._speed = 1; + this._timesForRepeat = 1; + this._repeatForever = false; + this._repeatMethod = false; + this._speedMethod = false; + void 0 !== d && cc.ActionInterval.prototype.initWithDuration.call(this, d); + }, + getElapsed: function getElapsed() { + return this._elapsed; + }, + initWithDuration: function initWithDuration(d) { + this._duration = 0 === d ? cc.macro.FLT_EPSILON : d; + this._elapsed = 0; + this._firstTick = true; + return true; + }, + isDone: function isDone() { + return this._elapsed >= this._duration; + }, + _cloneDecoration: function _cloneDecoration(action) { + action._repeatForever = this._repeatForever; + action._speed = this._speed; + action._timesForRepeat = this._timesForRepeat; + action._easeList = this._easeList; + action._speedMethod = this._speedMethod; + action._repeatMethod = this._repeatMethod; + }, + _reverseEaseList: function _reverseEaseList(action) { + if (this._easeList) { + action._easeList = []; + for (var i = 0; i < this._easeList.length; i++) action._easeList.push(this._easeList[i].reverse()); + } + }, + clone: function clone() { + var action = new cc.ActionInterval(this._duration); + this._cloneDecoration(action); + return action; + }, + easing: function easing(easeObj) { + this._easeList ? this._easeList.length = 0 : this._easeList = []; + for (var i = 0; i < arguments.length; i++) this._easeList.push(arguments[i]); + return this; + }, + _computeEaseTime: function _computeEaseTime(dt) { + var locList = this._easeList; + if (!locList || 0 === locList.length) return dt; + for (var i = 0, n = locList.length; i < n; i++) dt = locList[i].easing(dt); + return dt; + }, + step: function step(dt) { + if (this._firstTick) { + this._firstTick = false; + this._elapsed = 0; + } else this._elapsed += dt; + var t = this._elapsed / (this._duration > 1.192092896e-7 ? this._duration : 1.192092896e-7); + t = 1 > t ? t : 1; + this.update(t > 0 ? t : 0); + if (this._repeatMethod && this._timesForRepeat > 1 && this.isDone()) { + this._repeatForever || this._timesForRepeat--; + this.startWithTarget(this.target); + this.step(this._elapsed - this._duration); + } + }, + startWithTarget: function startWithTarget(target) { + cc.Action.prototype.startWithTarget.call(this, target); + this._elapsed = 0; + this._firstTick = true; + }, + reverse: function reverse() { + cc.logID(1010); + return null; + }, + setAmplitudeRate: function setAmplitudeRate(amp) { + cc.logID(1011); + }, + getAmplitudeRate: function getAmplitudeRate() { + cc.logID(1012); + return 0; + }, + speed: function speed(_speed) { + if (_speed <= 0) { + cc.logID(1013); + return this; + } + this._speedMethod = true; + this._speed *= _speed; + return this; + }, + getSpeed: function getSpeed() { + return this._speed; + }, + setSpeed: function setSpeed(speed) { + this._speed = speed; + return this; + }, + repeat: function repeat(times) { + times = Math.round(times); + if (isNaN(times) || times < 1) { + cc.logID(1014); + return this; + } + this._repeatMethod = true; + this._timesForRepeat *= times; + return this; + }, + repeatForever: function repeatForever() { + this._repeatMethod = true; + this._timesForRepeat = this.MAX_VALUE; + this._repeatForever = true; + return this; + } + }); + cc.actionInterval = function(d) { + return new cc.ActionInterval(d); + }; + cc.Sequence = cc.Class({ + name: "cc.Sequence", + extends: cc.ActionInterval, + ctor: function ctor(tempArray) { + this._actions = []; + this._split = null; + this._last = 0; + this._reversed = false; + var paramArray = tempArray instanceof Array ? tempArray : arguments; + if (1 === paramArray.length) { + cc.errorID(1019); + return; + } + var last = paramArray.length - 1; + last >= 0 && null == paramArray[last] && cc.logID(1015); + if (last >= 0) { + var prev = paramArray[0], action1; + for (var i = 1; i < last; i++) if (paramArray[i]) { + action1 = prev; + prev = cc.Sequence._actionOneTwo(action1, paramArray[i]); + } + this.initWithTwoActions(prev, paramArray[last]); + } + }, + initWithTwoActions: function initWithTwoActions(actionOne, actionTwo) { + if (!actionOne || !actionTwo) { + cc.errorID(1025); + return false; + } + var durationOne = actionOne._duration, durationTwo = actionTwo._duration; + durationOne *= actionOne._repeatMethod ? actionOne._timesForRepeat : 1; + durationTwo *= actionTwo._repeatMethod ? actionTwo._timesForRepeat : 1; + var d = durationOne + durationTwo; + this.initWithDuration(d); + this._actions[0] = actionOne; + this._actions[1] = actionTwo; + return true; + }, + clone: function clone() { + var action = new cc.Sequence(); + this._cloneDecoration(action); + action.initWithTwoActions(this._actions[0].clone(), this._actions[1].clone()); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.ActionInterval.prototype.startWithTarget.call(this, target); + this._split = this._actions[0]._duration / this._duration; + this._split *= this._actions[0]._repeatMethod ? this._actions[0]._timesForRepeat : 1; + this._last = -1; + }, + stop: function stop() { + -1 !== this._last && this._actions[this._last].stop(); + cc.Action.prototype.stop.call(this); + }, + update: function update(dt) { + var new_t, found = 0; + var locSplit = this._split, locActions = this._actions, locLast = this._last, actionFound; + dt = this._computeEaseTime(dt); + if (dt < locSplit) { + new_t = 0 !== locSplit ? dt / locSplit : 1; + if (0 === found && 1 === locLast && this._reversed) { + locActions[1].update(0); + locActions[1].stop(); + } + } else { + found = 1; + new_t = 1 === locSplit ? 1 : (dt - locSplit) / (1 - locSplit); + if (-1 === locLast) { + locActions[0].startWithTarget(this.target); + locActions[0].update(1); + locActions[0].stop(); + } + if (0 === locLast) { + locActions[0].update(1); + locActions[0].stop(); + } + } + actionFound = locActions[found]; + if (locLast === found && actionFound.isDone()) return; + locLast !== found && actionFound.startWithTarget(this.target); + new_t *= actionFound._timesForRepeat; + actionFound.update(new_t > 1 ? new_t % 1 : new_t); + this._last = found; + }, + reverse: function reverse() { + var action = cc.Sequence._actionOneTwo(this._actions[1].reverse(), this._actions[0].reverse()); + this._cloneDecoration(action); + this._reverseEaseList(action); + action._reversed = true; + return action; + } + }); + cc.sequence = function(tempArray) { + var paramArray = tempArray instanceof Array ? tempArray : arguments; + if (1 === paramArray.length) { + cc.errorID(1019); + return null; + } + var last = paramArray.length - 1; + last >= 0 && null == paramArray[last] && cc.logID(1015); + var result = null; + if (last >= 0) { + result = paramArray[0]; + for (var i = 1; i <= last; i++) paramArray[i] && (result = cc.Sequence._actionOneTwo(result, paramArray[i])); + } + return result; + }; + cc.Sequence._actionOneTwo = function(actionOne, actionTwo) { + var sequence = new cc.Sequence(); + sequence.initWithTwoActions(actionOne, actionTwo); + return sequence; + }; + cc.Repeat = cc.Class({ + name: "cc.Repeat", + extends: cc.ActionInterval, + ctor: function ctor(action, times) { + this._times = 0; + this._total = 0; + this._nextDt = 0; + this._actionInstant = false; + this._innerAction = null; + void 0 !== times && this.initWithAction(action, times); + }, + initWithAction: function initWithAction(action, times) { + var duration = action._duration * times; + if (this.initWithDuration(duration)) { + this._times = times; + this._innerAction = action; + if (action instanceof cc.ActionInstant) { + this._actionInstant = true; + this._times -= 1; + } + this._total = 0; + return true; + } + return false; + }, + clone: function clone() { + var action = new cc.Repeat(); + this._cloneDecoration(action); + action.initWithAction(this._innerAction.clone(), this._times); + return action; + }, + startWithTarget: function startWithTarget(target) { + this._total = 0; + this._nextDt = this._innerAction._duration / this._duration; + cc.ActionInterval.prototype.startWithTarget.call(this, target); + this._innerAction.startWithTarget(target); + }, + stop: function stop() { + this._innerAction.stop(); + cc.Action.prototype.stop.call(this); + }, + update: function update(dt) { + dt = this._computeEaseTime(dt); + var locInnerAction = this._innerAction; + var locDuration = this._duration; + var locTimes = this._times; + var locNextDt = this._nextDt; + if (dt >= locNextDt) { + while (dt > locNextDt && this._total < locTimes) { + locInnerAction.update(1); + this._total++; + locInnerAction.stop(); + locInnerAction.startWithTarget(this.target); + locNextDt += locInnerAction._duration / locDuration; + this._nextDt = locNextDt > 1 ? 1 : locNextDt; + } + if (dt >= 1 && this._total < locTimes) { + locInnerAction.update(1); + this._total++; + } + this._actionInstant || (this._total === locTimes ? locInnerAction.stop() : locInnerAction.update(dt - (locNextDt - locInnerAction._duration / locDuration))); + } else locInnerAction.update(dt * locTimes % 1); + }, + isDone: function isDone() { + return this._total === this._times; + }, + reverse: function reverse() { + var action = new cc.Repeat(this._innerAction.reverse(), this._times); + this._cloneDecoration(action); + this._reverseEaseList(action); + return action; + }, + setInnerAction: function setInnerAction(action) { + this._innerAction !== action && (this._innerAction = action); + }, + getInnerAction: function getInnerAction() { + return this._innerAction; + } + }); + cc.repeat = function(action, times) { + return new cc.Repeat(action, times); + }; + cc.RepeatForever = cc.Class({ + name: "cc.RepeatForever", + extends: cc.ActionInterval, + ctor: function ctor(action) { + this._innerAction = null; + action && this.initWithAction(action); + }, + initWithAction: function initWithAction(action) { + if (!action) { + cc.errorID(1026); + return false; + } + this._innerAction = action; + return true; + }, + clone: function clone() { + var action = new cc.RepeatForever(); + this._cloneDecoration(action); + action.initWithAction(this._innerAction.clone()); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.ActionInterval.prototype.startWithTarget.call(this, target); + this._innerAction.startWithTarget(target); + }, + step: function step(dt) { + var locInnerAction = this._innerAction; + locInnerAction.step(dt); + if (locInnerAction.isDone()) { + locInnerAction.startWithTarget(this.target); + locInnerAction.step(locInnerAction.getElapsed() - locInnerAction._duration); + } + }, + isDone: function isDone() { + return false; + }, + reverse: function reverse() { + var action = new cc.RepeatForever(this._innerAction.reverse()); + this._cloneDecoration(action); + this._reverseEaseList(action); + return action; + }, + setInnerAction: function setInnerAction(action) { + this._innerAction !== action && (this._innerAction = action); + }, + getInnerAction: function getInnerAction() { + return this._innerAction; + } + }); + cc.repeatForever = function(action) { + return new cc.RepeatForever(action); + }; + cc.Spawn = cc.Class({ + name: "cc.Spawn", + extends: cc.ActionInterval, + ctor: function ctor(tempArray) { + this._one = null; + this._two = null; + var paramArray = tempArray instanceof Array ? tempArray : arguments; + if (1 === paramArray.length) { + cc.errorID(1020); + return; + } + var last = paramArray.length - 1; + last >= 0 && null == paramArray[last] && cc.logID(1015); + if (last >= 0) { + var prev = paramArray[0], action1; + for (var i = 1; i < last; i++) if (paramArray[i]) { + action1 = prev; + prev = cc.Spawn._actionOneTwo(action1, paramArray[i]); + } + this.initWithTwoActions(prev, paramArray[last]); + } + }, + initWithTwoActions: function initWithTwoActions(action1, action2) { + if (!action1 || !action2) { + cc.errorID(1027); + return false; + } + var ret = false; + var d1 = action1._duration; + var d2 = action2._duration; + if (this.initWithDuration(Math.max(d1, d2))) { + this._one = action1; + this._two = action2; + d1 > d2 ? this._two = cc.Sequence._actionOneTwo(action2, cc.delayTime(d1 - d2)) : d1 < d2 && (this._one = cc.Sequence._actionOneTwo(action1, cc.delayTime(d2 - d1))); + ret = true; + } + return ret; + }, + clone: function clone() { + var action = new cc.Spawn(); + this._cloneDecoration(action); + action.initWithTwoActions(this._one.clone(), this._two.clone()); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.ActionInterval.prototype.startWithTarget.call(this, target); + this._one.startWithTarget(target); + this._two.startWithTarget(target); + }, + stop: function stop() { + this._one.stop(); + this._two.stop(); + cc.Action.prototype.stop.call(this); + }, + update: function update(dt) { + dt = this._computeEaseTime(dt); + this._one && this._one.update(dt); + this._two && this._two.update(dt); + }, + reverse: function reverse() { + var action = cc.Spawn._actionOneTwo(this._one.reverse(), this._two.reverse()); + this._cloneDecoration(action); + this._reverseEaseList(action); + return action; + } + }); + cc.spawn = function(tempArray) { + var paramArray = tempArray instanceof Array ? tempArray : arguments; + if (1 === paramArray.length) { + cc.errorID(1020); + return null; + } + paramArray.length > 0 && null == paramArray[paramArray.length - 1] && cc.logID(1015); + var prev = paramArray[0]; + for (var i = 1; i < paramArray.length; i++) null != paramArray[i] && (prev = cc.Spawn._actionOneTwo(prev, paramArray[i])); + return prev; + }; + cc.Spawn._actionOneTwo = function(action1, action2) { + var pSpawn = new cc.Spawn(); + pSpawn.initWithTwoActions(action1, action2); + return pSpawn; + }; + cc.RotateTo = cc.Class({ + name: "cc.RotateTo", + extends: cc.ActionInterval, + statics: { + _reverse: false + }, + ctor: function ctor(duration, dstAngle) { + this._startAngle = 0; + this._dstAngle = 0; + this._angle = 0; + void 0 !== dstAngle && this.initWithDuration(duration, dstAngle); + }, + initWithDuration: function initWithDuration(duration, dstAngle) { + if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) { + this._dstAngle = dstAngle; + return true; + } + return false; + }, + clone: function clone() { + var action = new cc.RotateTo(); + this._cloneDecoration(action); + action.initWithDuration(this._duration, this._dstAngle); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.ActionInterval.prototype.startWithTarget.call(this, target); + var startAngle = target.angle % 360; + var angle = cc.RotateTo._reverse ? this._dstAngle - startAngle : this._dstAngle + startAngle; + angle > 180 && (angle -= 360); + angle < -180 && (angle += 360); + this._startAngle = startAngle; + this._angle = cc.RotateTo._reverse ? angle : -angle; + }, + reverse: function reverse() { + cc.logID(1016); + }, + update: function update(dt) { + dt = this._computeEaseTime(dt); + this.target && (this.target.angle = this._startAngle + this._angle * dt); + } + }); + cc.rotateTo = function(duration, dstAngle) { + return new cc.RotateTo(duration, dstAngle); + }; + cc.RotateBy = cc.Class({ + name: "cc.RotateBy", + extends: cc.ActionInterval, + statics: { + _reverse: false + }, + ctor: function ctor(duration, deltaAngle) { + deltaAngle *= cc.RotateBy._reverse ? 1 : -1; + this._deltaAngle = 0; + this._startAngle = 0; + void 0 !== deltaAngle && this.initWithDuration(duration, deltaAngle); + }, + initWithDuration: function initWithDuration(duration, deltaAngle) { + if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) { + this._deltaAngle = deltaAngle; + return true; + } + return false; + }, + clone: function clone() { + var action = new cc.RotateBy(); + this._cloneDecoration(action); + action.initWithDuration(this._duration, this._deltaAngle); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.ActionInterval.prototype.startWithTarget.call(this, target); + this._startAngle = target.angle; + }, + update: function update(dt) { + dt = this._computeEaseTime(dt); + this.target && (this.target.angle = this._startAngle + this._deltaAngle * dt); + }, + reverse: function reverse() { + var action = new cc.RotateBy(); + action.initWithDuration(this._duration, -this._deltaAngle); + this._cloneDecoration(action); + this._reverseEaseList(action); + return action; + } + }); + cc.rotateBy = function(duration, deltaAngle) { + return new cc.RotateBy(duration, deltaAngle); + }; + cc.MoveBy = cc.Class({ + name: "cc.MoveBy", + extends: cc.ActionInterval, + ctor: function ctor(duration, deltaPos, deltaY) { + this._positionDelta = cc.v2(0, 0); + this._startPosition = cc.v2(0, 0); + this._previousPosition = cc.v2(0, 0); + void 0 !== deltaPos && cc.MoveBy.prototype.initWithDuration.call(this, duration, deltaPos, deltaY); + }, + initWithDuration: function initWithDuration(duration, position, y) { + if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) { + if (void 0 !== position.x) { + y = position.y; + position = position.x; + } + this._positionDelta.x = position; + this._positionDelta.y = y; + return true; + } + return false; + }, + clone: function clone() { + var action = new cc.MoveBy(); + this._cloneDecoration(action); + action.initWithDuration(this._duration, this._positionDelta); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.ActionInterval.prototype.startWithTarget.call(this, target); + var locPosX = target.x; + var locPosY = target.y; + this._previousPosition.x = locPosX; + this._previousPosition.y = locPosY; + this._startPosition.x = locPosX; + this._startPosition.y = locPosY; + }, + update: function update(dt) { + dt = this._computeEaseTime(dt); + if (this.target) { + var x = this._positionDelta.x * dt; + var y = this._positionDelta.y * dt; + var locStartPosition = this._startPosition; + if (cc.macro.ENABLE_STACKABLE_ACTIONS) { + var targetX = this.target.x; + var targetY = this.target.y; + var locPreviousPosition = this._previousPosition; + locStartPosition.x = locStartPosition.x + targetX - locPreviousPosition.x; + locStartPosition.y = locStartPosition.y + targetY - locPreviousPosition.y; + x += locStartPosition.x; + y += locStartPosition.y; + locPreviousPosition.x = x; + locPreviousPosition.y = y; + this.target.setPosition(x, y); + } else this.target.setPosition(locStartPosition.x + x, locStartPosition.y + y); + } + }, + reverse: function reverse() { + var action = new cc.MoveBy(this._duration, cc.v2(-this._positionDelta.x, -this._positionDelta.y)); + this._cloneDecoration(action); + this._reverseEaseList(action); + return action; + } + }); + cc.moveBy = function(duration, deltaPos, deltaY) { + return new cc.MoveBy(duration, deltaPos, deltaY); + }; + cc.MoveTo = cc.Class({ + name: "cc.MoveTo", + extends: cc.MoveBy, + ctor: function ctor(duration, position, y) { + this._endPosition = cc.v2(0, 0); + void 0 !== position && this.initWithDuration(duration, position, y); + }, + initWithDuration: function initWithDuration(duration, position, y) { + if (cc.MoveBy.prototype.initWithDuration.call(this, duration, position, y)) { + if (void 0 !== position.x) { + y = position.y; + position = position.x; + } + this._endPosition.x = position; + this._endPosition.y = y; + return true; + } + return false; + }, + clone: function clone() { + var action = new cc.MoveTo(); + this._cloneDecoration(action); + action.initWithDuration(this._duration, this._endPosition); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.MoveBy.prototype.startWithTarget.call(this, target); + this._positionDelta.x = this._endPosition.x - target.x; + this._positionDelta.y = this._endPosition.y - target.y; + } + }); + cc.moveTo = function(duration, position, y) { + return new cc.MoveTo(duration, position, y); + }; + cc.SkewTo = cc.Class({ + name: "cc.SkewTo", + extends: cc.ActionInterval, + ctor: function ctor(t, sx, sy) { + this._skewX = 0; + this._skewY = 0; + this._startSkewX = 0; + this._startSkewY = 0; + this._endSkewX = 0; + this._endSkewY = 0; + this._deltaX = 0; + this._deltaY = 0; + void 0 !== sy && cc.SkewTo.prototype.initWithDuration.call(this, t, sx, sy); + }, + initWithDuration: function initWithDuration(t, sx, sy) { + var ret = false; + if (cc.ActionInterval.prototype.initWithDuration.call(this, t)) { + this._endSkewX = sx; + this._endSkewY = sy; + ret = true; + } + return ret; + }, + clone: function clone() { + var action = new cc.SkewTo(); + this._cloneDecoration(action); + action.initWithDuration(this._duration, this._endSkewX, this._endSkewY); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.ActionInterval.prototype.startWithTarget.call(this, target); + this._startSkewX = target.skewX % 180; + this._deltaX = this._endSkewX - this._startSkewX; + this._deltaX > 180 && (this._deltaX -= 360); + this._deltaX < -180 && (this._deltaX += 360); + this._startSkewY = target.skewY % 360; + this._deltaY = this._endSkewY - this._startSkewY; + this._deltaY > 180 && (this._deltaY -= 360); + this._deltaY < -180 && (this._deltaY += 360); + }, + update: function update(dt) { + dt = this._computeEaseTime(dt); + this.target.skewX = this._startSkewX + this._deltaX * dt; + this.target.skewY = this._startSkewY + this._deltaY * dt; + } + }); + cc.skewTo = function(t, sx, sy) { + return new cc.SkewTo(t, sx, sy); + }; + cc.SkewBy = cc.Class({ + name: "cc.SkewBy", + extends: cc.SkewTo, + ctor: function ctor(t, sx, sy) { + void 0 !== sy && this.initWithDuration(t, sx, sy); + }, + initWithDuration: function initWithDuration(t, deltaSkewX, deltaSkewY) { + var ret = false; + if (cc.SkewTo.prototype.initWithDuration.call(this, t, deltaSkewX, deltaSkewY)) { + this._skewX = deltaSkewX; + this._skewY = deltaSkewY; + ret = true; + } + return ret; + }, + clone: function clone() { + var action = new cc.SkewBy(); + this._cloneDecoration(action); + action.initWithDuration(this._duration, this._skewX, this._skewY); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.SkewTo.prototype.startWithTarget.call(this, target); + this._deltaX = this._skewX; + this._deltaY = this._skewY; + this._endSkewX = this._startSkewX + this._deltaX; + this._endSkewY = this._startSkewY + this._deltaY; + }, + reverse: function reverse() { + var action = new cc.SkewBy(this._duration, -this._skewX, -this._skewY); + this._cloneDecoration(action); + this._reverseEaseList(action); + return action; + } + }); + cc.skewBy = function(t, sx, sy) { + return new cc.SkewBy(t, sx, sy); + }; + cc.JumpBy = cc.Class({ + name: "cc.JumpBy", + extends: cc.ActionInterval, + ctor: function ctor(duration, position, y, height, jumps) { + this._startPosition = cc.v2(0, 0); + this._previousPosition = cc.v2(0, 0); + this._delta = cc.v2(0, 0); + this._height = 0; + this._jumps = 0; + void 0 !== height && cc.JumpBy.prototype.initWithDuration.call(this, duration, position, y, height, jumps); + }, + initWithDuration: function initWithDuration(duration, position, y, height, jumps) { + if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) { + if (void 0 === jumps) { + jumps = height; + height = y; + y = position.y; + position = position.x; + } + this._delta.x = position; + this._delta.y = y; + this._height = height; + this._jumps = jumps; + return true; + } + return false; + }, + clone: function clone() { + var action = new cc.JumpBy(); + this._cloneDecoration(action); + action.initWithDuration(this._duration, this._delta, this._height, this._jumps); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.ActionInterval.prototype.startWithTarget.call(this, target); + var locPosX = target.x; + var locPosY = target.y; + this._previousPosition.x = locPosX; + this._previousPosition.y = locPosY; + this._startPosition.x = locPosX; + this._startPosition.y = locPosY; + }, + update: function update(dt) { + dt = this._computeEaseTime(dt); + if (this.target) { + var frac = dt * this._jumps % 1; + var y = 4 * this._height * frac * (1 - frac); + y += this._delta.y * dt; + var x = this._delta.x * dt; + var locStartPosition = this._startPosition; + if (cc.macro.ENABLE_STACKABLE_ACTIONS) { + var targetX = this.target.x; + var targetY = this.target.y; + var locPreviousPosition = this._previousPosition; + locStartPosition.x = locStartPosition.x + targetX - locPreviousPosition.x; + locStartPosition.y = locStartPosition.y + targetY - locPreviousPosition.y; + x += locStartPosition.x; + y += locStartPosition.y; + locPreviousPosition.x = x; + locPreviousPosition.y = y; + this.target.setPosition(x, y); + } else this.target.setPosition(locStartPosition.x + x, locStartPosition.y + y); + } + }, + reverse: function reverse() { + var action = new cc.JumpBy(this._duration, cc.v2(-this._delta.x, -this._delta.y), this._height, this._jumps); + this._cloneDecoration(action); + this._reverseEaseList(action); + return action; + } + }); + cc.jumpBy = function(duration, position, y, height, jumps) { + return new cc.JumpBy(duration, position, y, height, jumps); + }; + cc.JumpTo = cc.Class({ + name: "cc.JumpTo", + extends: cc.JumpBy, + ctor: function ctor(duration, position, y, height, jumps) { + this._endPosition = cc.v2(0, 0); + void 0 !== height && this.initWithDuration(duration, position, y, height, jumps); + }, + initWithDuration: function initWithDuration(duration, position, y, height, jumps) { + if (cc.JumpBy.prototype.initWithDuration.call(this, duration, position, y, height, jumps)) { + if (void 0 === jumps) { + y = position.y; + position = position.x; + } + this._endPosition.x = position; + this._endPosition.y = y; + return true; + } + return false; + }, + startWithTarget: function startWithTarget(target) { + cc.JumpBy.prototype.startWithTarget.call(this, target); + this._delta.x = this._endPosition.x - this._startPosition.x; + this._delta.y = this._endPosition.y - this._startPosition.y; + }, + clone: function clone() { + var action = new cc.JumpTo(); + this._cloneDecoration(action); + action.initWithDuration(this._duration, this._endPosition, this._height, this._jumps); + return action; + } + }); + cc.jumpTo = function(duration, position, y, height, jumps) { + return new cc.JumpTo(duration, position, y, height, jumps); + }; + function bezierAt(a, b, c, d, t) { + return Math.pow(1 - t, 3) * a + 3 * t * Math.pow(1 - t, 2) * b + 3 * Math.pow(t, 2) * (1 - t) * c + Math.pow(t, 3) * d; + } + cc.BezierBy = cc.Class({ + name: "cc.BezierBy", + extends: cc.ActionInterval, + ctor: function ctor(t, c) { + this._config = []; + this._startPosition = cc.v2(0, 0); + this._previousPosition = cc.v2(0, 0); + c && cc.BezierBy.prototype.initWithDuration.call(this, t, c); + }, + initWithDuration: function initWithDuration(t, c) { + if (cc.ActionInterval.prototype.initWithDuration.call(this, t)) { + this._config = c; + return true; + } + return false; + }, + clone: function clone() { + var action = new cc.BezierBy(); + this._cloneDecoration(action); + var newConfigs = []; + for (var i = 0; i < this._config.length; i++) { + var selConf = this._config[i]; + newConfigs.push(cc.v2(selConf.x, selConf.y)); + } + action.initWithDuration(this._duration, newConfigs); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.ActionInterval.prototype.startWithTarget.call(this, target); + var locPosX = target.x; + var locPosY = target.y; + this._previousPosition.x = locPosX; + this._previousPosition.y = locPosY; + this._startPosition.x = locPosX; + this._startPosition.y = locPosY; + }, + update: function update(dt) { + dt = this._computeEaseTime(dt); + if (this.target) { + var locConfig = this._config; + var xa = 0; + var xb = locConfig[0].x; + var xc = locConfig[1].x; + var xd = locConfig[2].x; + var ya = 0; + var yb = locConfig[0].y; + var yc = locConfig[1].y; + var yd = locConfig[2].y; + var x = bezierAt(xa, xb, xc, xd, dt); + var y = bezierAt(ya, yb, yc, yd, dt); + var locStartPosition = this._startPosition; + if (cc.macro.ENABLE_STACKABLE_ACTIONS) { + var targetX = this.target.x; + var targetY = this.target.y; + var locPreviousPosition = this._previousPosition; + locStartPosition.x = locStartPosition.x + targetX - locPreviousPosition.x; + locStartPosition.y = locStartPosition.y + targetY - locPreviousPosition.y; + x += locStartPosition.x; + y += locStartPosition.y; + locPreviousPosition.x = x; + locPreviousPosition.y = y; + this.target.setPosition(x, y); + } else this.target.setPosition(locStartPosition.x + x, locStartPosition.y + y); + } + }, + reverse: function reverse() { + var locConfig = this._config; + var x0 = locConfig[0].x, y0 = locConfig[0].y; + var x1 = locConfig[1].x, y1 = locConfig[1].y; + var x2 = locConfig[2].x, y2 = locConfig[2].y; + var r = [ cc.v2(x1 - x2, y1 - y2), cc.v2(x0 - x2, y0 - y2), cc.v2(-x2, -y2) ]; + var action = new cc.BezierBy(this._duration, r); + this._cloneDecoration(action); + this._reverseEaseList(action); + return action; + } + }); + cc.bezierBy = function(t, c) { + return new cc.BezierBy(t, c); + }; + cc.BezierTo = cc.Class({ + name: "cc.BezierTo", + extends: cc.BezierBy, + ctor: function ctor(t, c) { + this._toConfig = []; + c && this.initWithDuration(t, c); + }, + initWithDuration: function initWithDuration(t, c) { + if (cc.ActionInterval.prototype.initWithDuration.call(this, t)) { + this._toConfig = c; + return true; + } + return false; + }, + clone: function clone() { + var action = new cc.BezierTo(); + this._cloneDecoration(action); + action.initWithDuration(this._duration, this._toConfig); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.BezierBy.prototype.startWithTarget.call(this, target); + var locStartPos = this._startPosition; + var locToConfig = this._toConfig; + var locConfig = this._config; + locConfig[0] = locToConfig[0].sub(locStartPos); + locConfig[1] = locToConfig[1].sub(locStartPos); + locConfig[2] = locToConfig[2].sub(locStartPos); + } + }); + cc.bezierTo = function(t, c) { + return new cc.BezierTo(t, c); + }; + cc.ScaleTo = cc.Class({ + name: "cc.ScaleTo", + extends: cc.ActionInterval, + ctor: function ctor(duration, sx, sy) { + this._scaleX = 1; + this._scaleY = 1; + this._startScaleX = 1; + this._startScaleY = 1; + this._endScaleX = 0; + this._endScaleY = 0; + this._deltaX = 0; + this._deltaY = 0; + void 0 !== sx && cc.ScaleTo.prototype.initWithDuration.call(this, duration, sx, sy); + }, + initWithDuration: function initWithDuration(duration, sx, sy) { + if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) { + this._endScaleX = sx; + this._endScaleY = null != sy ? sy : sx; + return true; + } + return false; + }, + clone: function clone() { + var action = new cc.ScaleTo(); + this._cloneDecoration(action); + action.initWithDuration(this._duration, this._endScaleX, this._endScaleY); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.ActionInterval.prototype.startWithTarget.call(this, target); + this._startScaleX = target.scaleX; + this._startScaleY = target.scaleY; + this._deltaX = this._endScaleX - this._startScaleX; + this._deltaY = this._endScaleY - this._startScaleY; + }, + update: function update(dt) { + dt = this._computeEaseTime(dt); + if (this.target) { + this.target.scaleX = this._startScaleX + this._deltaX * dt; + this.target.scaleY = this._startScaleY + this._deltaY * dt; + } + } + }); + cc.scaleTo = function(duration, sx, sy) { + return new cc.ScaleTo(duration, sx, sy); + }; + cc.ScaleBy = cc.Class({ + name: "cc.ScaleBy", + extends: cc.ScaleTo, + startWithTarget: function startWithTarget(target) { + cc.ScaleTo.prototype.startWithTarget.call(this, target); + this._deltaX = this._startScaleX * this._endScaleX - this._startScaleX; + this._deltaY = this._startScaleY * this._endScaleY - this._startScaleY; + }, + reverse: function reverse() { + var action = new cc.ScaleBy(this._duration, 1 / this._endScaleX, 1 / this._endScaleY); + this._cloneDecoration(action); + this._reverseEaseList(action); + return action; + }, + clone: function clone() { + var action = new cc.ScaleBy(); + this._cloneDecoration(action); + action.initWithDuration(this._duration, this._endScaleX, this._endScaleY); + return action; + } + }); + cc.scaleBy = function(duration, sx, sy) { + return new cc.ScaleBy(duration, sx, sy); + }; + cc.Blink = cc.Class({ + name: "cc.Blink", + extends: cc.ActionInterval, + ctor: function ctor(duration, blinks) { + this._times = 0; + this._originalState = false; + void 0 !== blinks && this.initWithDuration(duration, blinks); + }, + initWithDuration: function initWithDuration(duration, blinks) { + if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) { + this._times = blinks; + return true; + } + return false; + }, + clone: function clone() { + var action = new cc.Blink(); + this._cloneDecoration(action); + action.initWithDuration(this._duration, this._times); + return action; + }, + update: function update(dt) { + dt = this._computeEaseTime(dt); + if (this.target && !this.isDone()) { + var slice = 1 / this._times; + var m = dt % slice; + this.target.opacity = m > slice / 2 ? 255 : 0; + } + }, + startWithTarget: function startWithTarget(target) { + cc.ActionInterval.prototype.startWithTarget.call(this, target); + this._originalState = target.opacity; + }, + stop: function stop() { + this.target.opacity = this._originalState; + cc.ActionInterval.prototype.stop.call(this); + }, + reverse: function reverse() { + var action = new cc.Blink(this._duration, this._times); + this._cloneDecoration(action); + this._reverseEaseList(action); + return action; + } + }); + cc.blink = function(duration, blinks) { + return new cc.Blink(duration, blinks); + }; + cc.FadeTo = cc.Class({ + name: "cc.FadeTo", + extends: cc.ActionInterval, + ctor: function ctor(duration, opacity) { + this._toOpacity = 0; + this._fromOpacity = 0; + void 0 !== opacity && cc.FadeTo.prototype.initWithDuration.call(this, duration, opacity); + }, + initWithDuration: function initWithDuration(duration, opacity) { + if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) { + this._toOpacity = opacity; + return true; + } + return false; + }, + clone: function clone() { + var action = new cc.FadeTo(); + this._cloneDecoration(action); + action.initWithDuration(this._duration, this._toOpacity); + return action; + }, + update: function update(time) { + time = this._computeEaseTime(time); + var fromOpacity = void 0 !== this._fromOpacity ? this._fromOpacity : 255; + this.target.opacity = fromOpacity + (this._toOpacity - fromOpacity) * time; + }, + startWithTarget: function startWithTarget(target) { + cc.ActionInterval.prototype.startWithTarget.call(this, target); + this._fromOpacity = target.opacity; + } + }); + cc.fadeTo = function(duration, opacity) { + return new cc.FadeTo(duration, opacity); + }; + cc.FadeIn = cc.Class({ + name: "cc.FadeIn", + extends: cc.FadeTo, + ctor: function ctor(duration) { + null == duration && (duration = 0); + this._reverseAction = null; + this.initWithDuration(duration, 255); + }, + reverse: function reverse() { + var action = new cc.FadeOut(); + action.initWithDuration(this._duration, 0); + this._cloneDecoration(action); + this._reverseEaseList(action); + return action; + }, + clone: function clone() { + var action = new cc.FadeIn(); + this._cloneDecoration(action); + action.initWithDuration(this._duration, this._toOpacity); + return action; + }, + startWithTarget: function startWithTarget(target) { + this._reverseAction && (this._toOpacity = this._reverseAction._fromOpacity); + cc.FadeTo.prototype.startWithTarget.call(this, target); + } + }); + cc.fadeIn = function(duration) { + return new cc.FadeIn(duration); + }; + cc.FadeOut = cc.Class({ + name: "cc.FadeOut", + extends: cc.FadeTo, + ctor: function ctor(duration) { + null == duration && (duration = 0); + this._reverseAction = null; + this.initWithDuration(duration, 0); + }, + reverse: function reverse() { + var action = new cc.FadeIn(); + action._reverseAction = this; + action.initWithDuration(this._duration, 255); + this._cloneDecoration(action); + this._reverseEaseList(action); + return action; + }, + clone: function clone() { + var action = new cc.FadeOut(); + this._cloneDecoration(action); + action.initWithDuration(this._duration, this._toOpacity); + return action; + } + }); + cc.fadeOut = function(d) { + return new cc.FadeOut(d); + }; + cc.TintTo = cc.Class({ + name: "cc.TintTo", + extends: cc.ActionInterval, + ctor: function ctor(duration, red, green, blue) { + this._to = cc.color(0, 0, 0); + this._from = cc.color(0, 0, 0); + if (red instanceof cc.Color) { + blue = red.b; + green = red.g; + red = red.r; + } + void 0 !== blue && this.initWithDuration(duration, red, green, blue); + }, + initWithDuration: function initWithDuration(duration, red, green, blue) { + if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) { + this._to = cc.color(red, green, blue); + return true; + } + return false; + }, + clone: function clone() { + var action = new cc.TintTo(); + this._cloneDecoration(action); + var locTo = this._to; + action.initWithDuration(this._duration, locTo.r, locTo.g, locTo.b); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.ActionInterval.prototype.startWithTarget.call(this, target); + this._from = this.target.color; + }, + update: function update(dt) { + dt = this._computeEaseTime(dt); + var locFrom = this._from, locTo = this._to; + locFrom && (this.target.color = cc.color(locFrom.r + (locTo.r - locFrom.r) * dt, locFrom.g + (locTo.g - locFrom.g) * dt, locFrom.b + (locTo.b - locFrom.b) * dt)); + } + }); + cc.tintTo = function(duration, red, green, blue) { + return new cc.TintTo(duration, red, green, blue); + }; + cc.TintBy = cc.Class({ + name: "cc.TintBy", + extends: cc.ActionInterval, + ctor: function ctor(duration, deltaRed, deltaGreen, deltaBlue) { + this._deltaR = 0; + this._deltaG = 0; + this._deltaB = 0; + this._fromR = 0; + this._fromG = 0; + this._fromB = 0; + void 0 !== deltaBlue && this.initWithDuration(duration, deltaRed, deltaGreen, deltaBlue); + }, + initWithDuration: function initWithDuration(duration, deltaRed, deltaGreen, deltaBlue) { + if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) { + this._deltaR = deltaRed; + this._deltaG = deltaGreen; + this._deltaB = deltaBlue; + return true; + } + return false; + }, + clone: function clone() { + var action = new cc.TintBy(); + this._cloneDecoration(action); + action.initWithDuration(this._duration, this._deltaR, this._deltaG, this._deltaB); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.ActionInterval.prototype.startWithTarget.call(this, target); + var color = target.color; + this._fromR = color.r; + this._fromG = color.g; + this._fromB = color.b; + }, + update: function update(dt) { + dt = this._computeEaseTime(dt); + this.target.color = cc.color(this._fromR + this._deltaR * dt, this._fromG + this._deltaG * dt, this._fromB + this._deltaB * dt); + }, + reverse: function reverse() { + var action = new cc.TintBy(this._duration, -this._deltaR, -this._deltaG, -this._deltaB); + this._cloneDecoration(action); + this._reverseEaseList(action); + return action; + } + }); + cc.tintBy = function(duration, deltaRed, deltaGreen, deltaBlue) { + return new cc.TintBy(duration, deltaRed, deltaGreen, deltaBlue); + }; + cc.DelayTime = cc.Class({ + name: "cc.DelayTime", + extends: cc.ActionInterval, + update: function update(dt) {}, + reverse: function reverse() { + var action = new cc.DelayTime(this._duration); + this._cloneDecoration(action); + this._reverseEaseList(action); + return action; + }, + clone: function clone() { + var action = new cc.DelayTime(); + this._cloneDecoration(action); + action.initWithDuration(this._duration); + return action; + } + }); + cc.delayTime = function(d) { + return new cc.DelayTime(d); + }; + cc.ReverseTime = cc.Class({ + name: "cc.ReverseTime", + extends: cc.ActionInterval, + ctor: function ctor(action) { + this._other = null; + action && this.initWithAction(action); + }, + initWithAction: function initWithAction(action) { + if (!action) { + cc.errorID(1028); + return false; + } + if (action === this._other) { + cc.errorID(1029); + return false; + } + if (cc.ActionInterval.prototype.initWithDuration.call(this, action._duration)) { + this._other = action; + return true; + } + return false; + }, + clone: function clone() { + var action = new cc.ReverseTime(); + this._cloneDecoration(action); + action.initWithAction(this._other.clone()); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.ActionInterval.prototype.startWithTarget.call(this, target); + this._other.startWithTarget(target); + }, + update: function update(dt) { + dt = this._computeEaseTime(dt); + this._other && this._other.update(1 - dt); + }, + reverse: function reverse() { + return this._other.clone(); + }, + stop: function stop() { + this._other.stop(); + cc.Action.prototype.stop.call(this); + } + }); + cc.reverseTime = function(action) { + return new cc.ReverseTime(action); + }; + cc.TargetedAction = cc.Class({ + name: "cc.TargetedAction", + extends: cc.ActionInterval, + ctor: function ctor(target, action) { + this._action = null; + this._forcedTarget = null; + action && this.initWithTarget(target, action); + }, + initWithTarget: function initWithTarget(target, action) { + if (this.initWithDuration(action._duration)) { + this._forcedTarget = target; + this._action = action; + return true; + } + return false; + }, + clone: function clone() { + var action = new cc.TargetedAction(); + this._cloneDecoration(action); + action.initWithTarget(this._forcedTarget, this._action.clone()); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.ActionInterval.prototype.startWithTarget.call(this, target); + this._action.startWithTarget(this._forcedTarget); + }, + stop: function stop() { + this._action.stop(); + }, + update: function update(dt) { + dt = this._computeEaseTime(dt); + this._action.update(dt); + }, + getForcedTarget: function getForcedTarget() { + return this._forcedTarget; + }, + setForcedTarget: function setForcedTarget(forcedTarget) { + this._forcedTarget !== forcedTarget && (this._forcedTarget = forcedTarget); + } + }); + cc.targetedAction = function(target, action) { + return new cc.TargetedAction(target, action); + }; + }), {} ], + 7: [ (function(require, module, exports) { + "use strict"; + require("../core/platform/CCClass"); + var js = require("../core/platform/js"); + var HashElement = function HashElement() { + this.actions = []; + this.target = null; + this.actionIndex = 0; + this.currentAction = null; + this.paused = false; + this.lock = false; + }; + cc.ActionManager = function() { + this._hashTargets = js.createMap(true); + this._arrayTargets = []; + this._currentTarget = null; + cc.director._scheduler && cc.director._scheduler.enableForTarget(this); + }; + cc.ActionManager.prototype = { + constructor: cc.ActionManager, + _elementPool: [], + _searchElementByTarget: function _searchElementByTarget(arr, target) { + for (var k = 0; k < arr.length; k++) if (target === arr[k].target) return arr[k]; + return null; + }, + _getElement: function _getElement(target, paused) { + var element = this._elementPool.pop(); + element || (element = new HashElement()); + element.target = target; + element.paused = !!paused; + return element; + }, + _putElement: function _putElement(element) { + element.actions.length = 0; + element.actionIndex = 0; + element.currentAction = null; + element.paused = false; + element.target = null; + element.lock = false; + this._elementPool.push(element); + }, + addAction: function addAction(action, target, paused) { + if (!action || !target) { + cc.errorID(1e3); + return; + } + var element = this._hashTargets[target._id]; + if (element) element.actions || (element.actions = []); else { + element = this._getElement(target, paused); + this._hashTargets[target._id] = element; + this._arrayTargets.push(element); + } + element.actions.push(action); + action.startWithTarget(target); + }, + removeAllActions: function removeAllActions() { + var locTargets = this._arrayTargets; + for (var i = 0; i < locTargets.length; i++) { + var element = locTargets[i]; + element && this._putElement(element); + } + this._arrayTargets.length = 0; + this._hashTargets = js.createMap(true); + }, + removeAllActionsFromTarget: function removeAllActionsFromTarget(target, forceDelete) { + if (null == target) return; + var element = this._hashTargets[target._id]; + if (element) { + element.actions.length = 0; + this._deleteHashElement(element); + } + }, + removeAction: function removeAction(action) { + if (!action) return; + var target = action.getOriginalTarget(); + var element = this._hashTargets[target._id]; + if (!element) return; + for (var i = 0; i < element.actions.length; i++) if (element.actions[i] === action) { + element.actions.splice(i, 1); + element.actionIndex >= i && element.actionIndex--; + break; + } + }, + _removeActionByTag: function _removeActionByTag(tag, element, target) { + for (var i = 0, l = element.actions.length; i < l; ++i) { + var action = element.actions[i]; + if (action && action.getTag() === tag) { + if (target && action.getOriginalTarget() !== target) continue; + this._removeActionAtIndex(i, element); + break; + } + } + }, + removeActionByTag: function removeActionByTag(tag, target) { + tag === cc.Action.TAG_INVALID && cc.logID(1002); + var hashTargets = this._hashTargets; + if (target) { + var element = hashTargets[target._id]; + element && this._removeActionByTag(tag, element, target); + } else for (var name in hashTargets) { + var _element = hashTargets[name]; + this._removeActionByTag(tag, _element); + } + }, + getActionByTag: function getActionByTag(tag, target) { + tag === cc.Action.TAG_INVALID && cc.logID(1004); + var element = this._hashTargets[target._id]; + if (element) { + if (null != element.actions) for (var i = 0; i < element.actions.length; ++i) { + var action = element.actions[i]; + if (action && action.getTag() === tag) return action; + } + cc.logID(1005, tag); + } + return null; + }, + getNumberOfRunningActionsInTarget: function getNumberOfRunningActionsInTarget(target) { + var element = this._hashTargets[target._id]; + if (element) return element.actions ? element.actions.length : 0; + return 0; + }, + pauseTarget: function pauseTarget(target) { + var element = this._hashTargets[target._id]; + element && (element.paused = true); + }, + resumeTarget: function resumeTarget(target) { + var element = this._hashTargets[target._id]; + element && (element.paused = false); + }, + pauseAllRunningActions: function pauseAllRunningActions() { + var idsWithActions = []; + var locTargets = this._arrayTargets; + for (var i = 0; i < locTargets.length; i++) { + var element = locTargets[i]; + if (element && !element.paused) { + element.paused = true; + idsWithActions.push(element.target); + } + } + return idsWithActions; + }, + resumeTargets: function resumeTargets(targetsToResume) { + if (!targetsToResume) return; + for (var i = 0; i < targetsToResume.length; i++) targetsToResume[i] && this.resumeTarget(targetsToResume[i]); + }, + pauseTargets: function pauseTargets(targetsToPause) { + if (!targetsToPause) return; + for (var i = 0; i < targetsToPause.length; i++) targetsToPause[i] && this.pauseTarget(targetsToPause[i]); + }, + purgeSharedManager: function purgeSharedManager() { + cc.director.getScheduler().unscheduleUpdate(this); + }, + _removeActionAtIndex: function _removeActionAtIndex(index, element) { + var action = element.actions[index]; + element.actions.splice(index, 1); + element.actionIndex >= index && element.actionIndex--; + 0 === element.actions.length && this._deleteHashElement(element); + }, + _deleteHashElement: function _deleteHashElement(element) { + var ret = false; + if (element && !element.lock && this._hashTargets[element.target._id]) { + delete this._hashTargets[element.target._id]; + var targets = this._arrayTargets; + for (var i = 0, l = targets.length; i < l; i++) if (targets[i] === element) { + targets.splice(i, 1); + break; + } + this._putElement(element); + ret = true; + } + return ret; + }, + update: function update(dt) { + var locTargets = this._arrayTargets, locCurrTarget; + for (var elt = 0; elt < locTargets.length; elt++) { + this._currentTarget = locTargets[elt]; + locCurrTarget = this._currentTarget; + if (!locCurrTarget.paused && locCurrTarget.actions) { + locCurrTarget.lock = true; + for (locCurrTarget.actionIndex = 0; locCurrTarget.actionIndex < locCurrTarget.actions.length; locCurrTarget.actionIndex++) { + locCurrTarget.currentAction = locCurrTarget.actions[locCurrTarget.actionIndex]; + if (!locCurrTarget.currentAction) continue; + locCurrTarget.currentAction.step(dt * (locCurrTarget.currentAction._speedMethod ? locCurrTarget.currentAction._speed : 1)); + if (locCurrTarget.currentAction && locCurrTarget.currentAction.isDone()) { + locCurrTarget.currentAction.stop(); + var action = locCurrTarget.currentAction; + locCurrTarget.currentAction = null; + this.removeAction(action); + } + locCurrTarget.currentAction = null; + } + locCurrTarget.lock = false; + } + 0 === locCurrTarget.actions.length && this._deleteHashElement(locCurrTarget) && elt--; + } + } + }; + false; + }), { + "../core/platform/CCClass": 121, + "../core/platform/js": 142 + } ], + 8: [ (function(require, module, exports) { + "use strict"; + require("./CCActionManager"); + require("./CCAction"); + require("./CCActionInterval"); + require("./CCActionInstant"); + require("./CCActionEase"); + require("./CCActionCatmullRom"); + require("./tween"); + }), { + "./CCAction": 2, + "./CCActionCatmullRom": 3, + "./CCActionEase": 4, + "./CCActionInstant": 5, + "./CCActionInterval": 6, + "./CCActionManager": 7, + "./tween": 9 + } ], + 9: [ (function(require, module, exports) { + "use strict"; + var _bezier = require("../animation/bezier"); + var _tweenID = 0; + var TweenAction = cc.Class({ + name: "cc.TweenAction", + extends: cc.ActionInterval, + ctor: function ctor(duration, props, opts) { + this._opts = opts = opts || Object.create(null); + this._props = Object.create(null); + opts.progress = opts.progress || this.progress; + if (opts.easing && "string" === typeof opts.easing) { + var easingName = opts.easing; + opts.easing = cc.easing[easingName]; + !opts.easing && cc.warnID(1031, easingName); + } + var relative = this._opts.relative; + for (var name in props) { + var value = props[name]; + var easing = void 0, progress = void 0; + if (void 0 !== value.value && (value.easing || value.progress)) { + if ("string" === typeof value.easing) { + easing = cc.easing[value.easing]; + !easing && cc.warnID(1031, value.easing); + } else easing = value.easing; + progress = value.progress; + value = value.value; + } + var isNumber = "number" === typeof value; + if (!isNumber && (!value.lerp || relative && !value.add && !value.mul || !value.clone)) { + cc.warn("Can not animate " + name + " property, because it do not have [lerp, (add|mul), clone] function."); + continue; + } + var prop = Object.create(null); + prop.value = value; + prop.easing = easing; + prop.progress = progress; + this._props[name] = prop; + } + this._originProps = props; + this.initWithDuration(duration); + }, + clone: function clone() { + var action = new TweenAction(this._duration, this._originProps, this._opts); + this._cloneDecoration(action); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.ActionInterval.prototype.startWithTarget.call(this, target); + var relative = !!this._opts.relative; + var props = this._props; + for (var name in props) { + var value = target[name]; + var prop = props[name]; + if ("number" === typeof value) { + prop.start = value; + prop.current = value; + prop.end = relative ? value + prop.value : prop.value; + } else { + prop.start = value.clone(); + prop.current = value.clone(); + prop.end = relative ? (value.add || value.mul).call(value, prop.value) : prop.value; + } + } + }, + update: function update(t) { + var opts = this._opts; + var easingTime = t; + opts.easing && (easingTime = opts.easing(t)); + var target = this.target; + if (!target) return; + var props = this._props; + var progress = opts.progress; + for (var name in props) { + var prop = props[name]; + var time = prop.easing ? prop.easing(t) : easingTime; + var current = prop.current = (prop.progress || progress)(prop.start, prop.end, prop.current, time); + target[name] = current; + } + var onUpdate = opts.onUpdate; + onUpdate && onUpdate(target, t); + }, + progress: function progress(start, end, current, t) { + "number" === typeof start ? current = start + (end - start) * t : start.lerp(end, t, current); + return current; + } + }); + var SetAction = cc.Class({ + name: "cc.SetAction", + extends: cc.ActionInstant, + ctor: function ctor(props) { + this._props = {}; + void 0 !== props && this.init(props); + }, + init: function init(props) { + for (var name in props) this._props[name] = props[name]; + return true; + }, + update: function update() { + var props = this._props; + var target = this.target; + for (var name in props) target[name] = props[name]; + }, + clone: function clone() { + var action = new SetAction(); + action.init(this._props); + return action; + } + }); + function Tween(target) { + this._actions = []; + this._finalAction = null; + this._target = target; + this._tag = cc.Action.TAG_INVALID; + } + Tween.stopAll = function() { + cc.director.getActionManager().removeAllActions(); + }; + Tween.stopAllByTag = function(tag) { + cc.director.getActionManager().removeActionByTag(tag); + }; + Tween.stopAllByTarget = function(target) { + cc.director.getActionManager().removeAllActionsFromTarget(target); + }; + Tween.prototype.then = function(other) { + other instanceof cc.Action ? this._actions.push(other.clone()) : this._actions.push(other._union()); + return this; + }; + Tween.prototype.target = function(target) { + this._target = target; + return this; + }; + Tween.prototype.start = function() { + var target = this._target; + if (!target) { + cc.warn("Please set target to tween first"); + return this; + } + if (target instanceof cc.Object && !target.isValid) return; + this._finalAction && cc.director.getActionManager().removeAction(this._finalAction); + this._finalAction = this._union(); + void 0 === target._id && (target._id = ++_tweenID); + this._finalAction.setTag(this._tag); + cc.director.getActionManager().addAction(this._finalAction, target, false); + return this; + }; + Tween.prototype.stop = function() { + this._finalAction && cc.director.getActionManager().removeAction(this._finalAction); + return this; + }; + Tween.prototype.tag = function(tag) { + this._tag = tag; + return this; + }; + Tween.prototype.clone = function(target) { + var action = this._union(); + return cc.tween(target).then(action.clone()); + }; + Tween.prototype.union = function() { + var action = this._union(); + this._actions.length = 0; + this._actions.push(action); + return this; + }; + Tween.prototype._union = function() { + var actions = this._actions; + actions = 1 === actions.length ? actions[0] : cc.sequence(actions); + return actions; + }; + Object.assign(Tween.prototype, { + bezierTo: function bezierTo(duration, c1, c2, to, opts) { + var c0x = c1.x, c0y = c1.y, c1x = c2.x, c1y = c2.y; + opts = opts || Object.create(null); + opts.progress = function(start, end, current, t) { + current.x = (0, _bezier.bezier)(start.x, c0x, c1x, end.x, t); + current.y = (0, _bezier.bezier)(start.y, c0y, c1y, end.y, t); + return current; + }; + return this.to(duration, { + position: to + }, opts); + }, + bezierBy: function bezierBy(duration, c1, c2, to, opts) { + var c0x = c1.x, c0y = c1.y, c1x = c2.x, c1y = c2.y; + opts = opts || Object.create(null); + opts.progress = function(start, end, current, t) { + var sx = start.x, sy = start.y; + current.x = (0, _bezier.bezier)(sx, c0x + sx, c1x + sx, end.x, t); + current.y = (0, _bezier.bezier)(sy, c0y + sy, c1y + sy, end.y, t); + return current; + }; + return this.by(duration, { + position: to + }, opts); + }, + flipX: function flipX() { + var _this = this; + return this.call((function() { + _this._target.scaleX *= -1; + }), this); + }, + flipY: function flipY() { + var _this2 = this; + return this.call((function() { + _this2._target.scaleY *= -1; + }), this); + }, + blink: function blink(duration, times, opts) { + var slice = 1 / times; + opts = opts || Object.create(null); + opts.progress = function(start, end, current, t) { + if (t >= 1) return start; + var m = t % slice; + return m > slice / 2 ? 255 : 0; + }; + return this.to(duration, { + opacity: 1 + }, opts); + } + }); + var tmp_args = []; + function wrapAction(action) { + return function() { + tmp_args.length = 0; + for (var l = arguments.length, i = 0; i < l; i++) { + var arg = tmp_args[i] = arguments[i]; + arg instanceof Tween && (tmp_args[i] = arg._union()); + } + return action.apply(this, tmp_args); + }; + } + var actions = { + to: function to(duration, props, opts) { + opts = opts || Object.create(null); + opts.relative = false; + return new TweenAction(duration, props, opts); + }, + by: function by(duration, props, opts) { + opts = opts || Object.create(null); + opts.relative = true; + return new TweenAction(duration, props, opts); + }, + set: function set(props) { + return new SetAction(props); + }, + delay: cc.delayTime, + call: cc.callFunc, + hide: cc.hide, + show: cc.show, + removeSelf: cc.removeSelf, + sequence: wrapAction(cc.sequence), + parallel: wrapAction(cc.spawn) + }; + var previousAsInputActions = { + repeat: cc.repeat, + repeatForever: function repeatForever(action) { + return cc.repeat(action, 1e9); + }, + reverseTime: cc.reverseTime + }; + var keys = Object.keys(actions); + var _loop = function _loop(i) { + var key = keys[i]; + Tween.prototype[key] = function() { + var action = actions[key].apply(this, arguments); + this._actions.push(action); + return this; + }; + }; + for (var i = 0; i < keys.length; i++) _loop(i); + keys = Object.keys(previousAsInputActions); + var _loop2 = function _loop2(_i) { + var key = keys[_i]; + Tween.prototype[key] = function() { + var actions = this._actions; + var action = arguments[arguments.length - 1]; + var length = arguments.length - 1; + if (action instanceof cc.Tween) action = action._union(); else if (!(action instanceof cc.Action)) { + action = actions[actions.length - 1]; + actions.length -= 1; + length += 1; + } + var args = [ action ]; + for (var _i2 = 0; _i2 < length; _i2++) args.push(arguments[_i2]); + action = previousAsInputActions[key].apply(this, args); + actions.push(action); + return this; + }; + }; + for (var _i = 0; _i < keys.length; _i++) _loop2(_i); + cc.tween = function(target) { + return new Tween(target); + }; + cc.Tween = Tween; + }), { + "../animation/bezier": 15 + } ], + 10: [ (function(require, module, exports) { + "use strict"; + var js = cc.js; + var Playable = require("./playable"); + var _require = require("./animation-curves"), EventAnimCurve = _require.EventAnimCurve, EventInfo = _require.EventInfo; + var WrapModeMask = require("./types").WrapModeMask; + var binarySearch = require("../core/utils/binary-search").binarySearchEpsilon; + function AnimationAnimator(target, animation) { + Playable.call(this); + this.target = target; + this.animation = animation; + this._anims = new js.array.MutableForwardIterator([]); + } + js.extend(AnimationAnimator, Playable); + var p = AnimationAnimator.prototype; + p.playState = function(state, startTime) { + if (!state.clip) return; + state.curveLoaded || initClipData(this.target, state); + state.animator = this; + state.play(); + "number" === typeof startTime && state.setTime(startTime); + this.play(); + }; + p.stopStatesExcept = function(state) { + var iterator = this._anims; + var array = iterator.array; + for (iterator.i = 0; iterator.i < array.length; ++iterator.i) { + var anim = array[iterator.i]; + if (anim === state) continue; + this.stopState(anim); + } + }; + p.addAnimation = function(anim) { + var index = this._anims.array.indexOf(anim); + -1 === index && this._anims.push(anim); + anim._setEventTarget(this.animation); + }; + p.removeAnimation = function(anim) { + var index = this._anims.array.indexOf(anim); + if (index >= 0) { + this._anims.fastRemoveAt(index); + 0 === this._anims.array.length && this.stop(); + } else cc.errorID(3907); + anim.animator = null; + }; + p.sample = function() { + var iterator = this._anims; + var array = iterator.array; + for (iterator.i = 0; iterator.i < array.length; ++iterator.i) { + var anim = array[iterator.i]; + anim.sample(); + } + }; + p.stopState = function(state) { + state && state.stop(); + }; + p.pauseState = function(state) { + state && state.pause(); + }; + p.resumeState = function(state) { + state && state.resume(); + this.isPaused && this.resume(); + }; + p.setStateTime = function(state, time) { + if (void 0 !== time) { + if (state) { + state.setTime(time); + state.sample(); + } + } else { + time = state; + var array = this._anims.array; + for (var i = 0; i < array.length; ++i) { + var anim = array[i]; + anim.setTime(time); + anim.sample(); + } + } + }; + p.onStop = function() { + var iterator = this._anims; + var array = iterator.array; + for (iterator.i = 0; iterator.i < array.length; ++iterator.i) { + var anim = array[iterator.i]; + anim.stop(); + } + }; + p.onPause = function() { + var array = this._anims.array; + for (var i = 0; i < array.length; ++i) { + var anim = array[i]; + anim.pause(); + anim.animator = null; + } + }; + p.onResume = function() { + var array = this._anims.array; + for (var i = 0; i < array.length; ++i) { + var anim = array[i]; + anim.animator = this; + anim.resume(); + } + }; + p._reloadClip = function(state) { + initClipData(this.target, state); + }; + function createBatchedProperty(propPath, firstDotIndex, mainValue, animValue) { + mainValue = mainValue.clone(); + var nextValue = mainValue; + var leftIndex = firstDotIndex + 1; + var rightIndex = propPath.indexOf(".", leftIndex); + while (-1 !== rightIndex) { + var nextName = propPath.slice(leftIndex, rightIndex); + nextValue = nextValue[nextName]; + leftIndex = rightIndex + 1; + rightIndex = propPath.indexOf(".", leftIndex); + } + var lastPropName = propPath.slice(leftIndex); + nextValue[lastPropName] = animValue; + return mainValue; + } + false; + function initClipData(root, state) { + var clip = state.clip; + state.duration = clip.duration; + state.speed = clip.speed; + state.wrapMode = clip.wrapMode; + state.frameRate = clip.sample; + (state.wrapMode & WrapModeMask.Loop) === WrapModeMask.Loop ? state.repeatCount = Infinity : state.repeatCount = 1; + var curves = state.curves = clip.createCurves(state, root); + var events = clip.events; + if (true, events) { + var curve; + for (var i = 0, l = events.length; i < l; i++) { + if (!curve) { + curve = new EventAnimCurve(); + curve.target = root; + curves.push(curve); + } + var eventData = events[i]; + var ratio = eventData.frame / state.duration; + var eventInfo = void 0; + var index = binarySearch(curve.ratios, ratio); + if (index >= 0) eventInfo = curve.events[index]; else { + eventInfo = new EventInfo(); + curve.ratios.push(ratio); + curve.events.push(eventInfo); + } + eventInfo.add(eventData.func, eventData.params); + } + } + } + false; + module.exports = AnimationAnimator; + }), { + "../core/utils/binary-search": 198, + "./animation-curves": 12, + "./playable": 19, + "./types": 20 + } ], + 11: [ (function(require, module, exports) { + "use strict"; + var WrapMode = require("./types").WrapMode; + var _require = require("./animation-curves"), DynamicAnimCurve = _require.DynamicAnimCurve, quickFindIndex = _require.quickFindIndex; + var sampleMotionPaths = require("./motion-path-helper").sampleMotionPaths; + var binarySearch = require("../core/utils/binary-search").binarySearchEpsilon; + var AnimationClip = cc.Class({ + name: "cc.AnimationClip", + extends: cc.Asset, + properties: { + _duration: { + default: 0, + type: cc.Float + }, + duration: { + get: function get() { + return this._duration; + } + }, + sample: { + default: 60 + }, + speed: { + default: 1 + }, + wrapMode: { + default: WrapMode.Normal + }, + curveData: { + default: {}, + visible: false + }, + events: { + default: [], + visible: false + } + }, + statics: { + createWithSpriteFrames: function createWithSpriteFrames(spriteFrames, sample) { + if (!Array.isArray(spriteFrames)) { + cc.errorID(3905); + return null; + } + var clip = new AnimationClip(); + clip.sample = sample || clip.sample; + clip._duration = spriteFrames.length / clip.sample; + var frames = []; + var step = 1 / clip.sample; + for (var i = 0, l = spriteFrames.length; i < l; i++) frames[i] = { + frame: i * step, + value: spriteFrames[i] + }; + clip.curveData = { + comps: { + "cc.Sprite": { + spriteFrame: frames + } + } + }; + return clip; + } + }, + onLoad: function onLoad() { + this._duration = Number.parseFloat(this.duration); + this.speed = Number.parseFloat(this.speed); + this.wrapMode = Number.parseInt(this.wrapMode); + this.frameRate = Number.parseFloat(this.sample); + }, + createPropCurve: function createPropCurve(target, propPath, keyframes) { + var motionPaths = []; + var isMotionPathProp = target instanceof cc.Node && "position" === propPath; + var curve = new DynamicAnimCurve(); + curve.target = target; + curve.prop = propPath; + for (var i = 0, l = keyframes.length; i < l; i++) { + var keyframe = keyframes[i]; + var ratio = keyframe.frame / this.duration; + curve.ratios.push(ratio); + isMotionPathProp && motionPaths.push(keyframe.motionPath); + var curveValue = keyframe.value; + curve.values.push(curveValue); + var curveTypes = keyframe.curve; + if (curveTypes) { + if ("string" === typeof curveTypes) { + curve.types.push(curveTypes); + continue; + } + if (Array.isArray(curveTypes)) { + curveTypes[0] === curveTypes[1] && curveTypes[2] === curveTypes[3] ? curve.types.push(DynamicAnimCurve.Linear) : curve.types.push(DynamicAnimCurve.Bezier(curveTypes)); + continue; + } + } + curve.types.push(DynamicAnimCurve.Linear); + } + isMotionPathProp && sampleMotionPaths(motionPaths, curve, this.duration, this.sample, target); + var ratios = curve.ratios; + var currRatioDif, lastRatioDif; + var canOptimize = true; + var EPSILON = 1e-6; + for (var _i = 1, _l = ratios.length; _i < _l; _i++) { + currRatioDif = ratios[_i] - ratios[_i - 1]; + if (1 === _i) lastRatioDif = currRatioDif; else if (Math.abs(currRatioDif - lastRatioDif) > EPSILON) { + canOptimize = false; + break; + } + } + curve._findFrameIndex = canOptimize ? quickFindIndex : binarySearch; + var firstValue = curve.values[0]; + void 0 === firstValue || null === firstValue || curve._lerp || ("number" === typeof firstValue ? curve._lerp = DynamicAnimCurve.prototype._lerpNumber : firstValue instanceof cc.Quat ? curve._lerp = DynamicAnimCurve.prototype._lerpQuat : firstValue instanceof cc.Vec2 ? curve._lerp = DynamicAnimCurve.prototype._lerpVector2 : firstValue instanceof cc.Vec3 ? curve._lerp = DynamicAnimCurve.prototype._lerpVector3 : firstValue.lerp && (curve._lerp = DynamicAnimCurve.prototype._lerpObject)); + return curve; + }, + createTargetCurves: function createTargetCurves(target, curveData, curves) { + var propsData = curveData.props; + var compsData = curveData.comps; + if (propsData) for (var propPath in propsData) { + var data = propsData[propPath]; + var curve = this.createPropCurve(target, propPath, data); + curves.push(curve); + } + if (compsData) for (var compName in compsData) { + var comp = target.getComponent(compName); + if (!comp) continue; + var compData = compsData[compName]; + for (var _propPath in compData) { + var _data = compData[_propPath]; + var _curve = this.createPropCurve(comp, _propPath, _data); + curves.push(_curve); + } + } + }, + createCurves: function createCurves(state, root) { + var curveData = this.curveData; + var childrenCurveDatas = curveData.paths; + var curves = []; + this.createTargetCurves(root, curveData, curves); + for (var namePath in childrenCurveDatas) { + var target = cc.find(namePath, root); + if (!target) continue; + var childCurveDatas = childrenCurveDatas[namePath]; + this.createTargetCurves(target, childCurveDatas, curves); + } + return curves; + } + }); + cc.AnimationClip = module.exports = AnimationClip; + }), { + "../core/utils/binary-search": 198, + "./animation-curves": 12, + "./motion-path-helper": 18, + "./types": 20 + } ], + 12: [ (function(require, module, exports) { + "use strict"; + var bezierByTime = require("./bezier").bezierByTime; + var binarySearch = require("../core/utils/binary-search").binarySearchEpsilon; + var WrapModeMask = require("./types").WrapModeMask; + var WrappedInfo = require("./types").WrappedInfo; + function computeRatioByType(ratio, type) { + if ("string" === typeof type) { + var func = cc.easing[type]; + func ? ratio = func(ratio) : cc.errorID(3906, type); + } else Array.isArray(type) && (ratio = bezierByTime(type, ratio)); + return ratio; + } + var AnimCurve = cc.Class({ + name: "cc.AnimCurve", + sample: function sample(time, ratio, state) {}, + onTimeChangedManually: void 0 + }); + function quickFindIndex(ratios, ratio) { + var length = ratios.length - 1; + if (0 === length) return 0; + var start = ratios[0]; + if (ratio < start) return 0; + var end = ratios[length]; + if (ratio > end) return ~ratios.length; + ratio = (ratio - start) / (end - start); + var eachLength = 1 / length; + var index = ratio / eachLength; + var floorIndex = 0 | index; + var EPSILON = 1e-6; + if (index - floorIndex < EPSILON) return floorIndex; + if (floorIndex + 1 - index < EPSILON) return floorIndex + 1; + return ~(floorIndex + 1); + } + var DynamicAnimCurve = cc.Class({ + name: "cc.DynamicAnimCurve", + extends: AnimCurve, + ctor: function ctor() { + this._cachedIndex = 0; + }, + properties: { + target: null, + prop: "", + values: [], + ratios: [], + types: [] + }, + _findFrameIndex: binarySearch, + _lerp: void 0, + _lerpNumber: function _lerpNumber(from, to, t) { + return from + (to - from) * t; + }, + _lerpObject: function _lerpObject(from, to, t) { + return from.lerp(to, t); + }, + _lerpQuat: (function() { + var out = cc.quat(); + return function(from, to, t) { + return from.lerp(to, t, out); + }; + })(), + _lerpVector2: (function() { + var out = cc.v2(); + return function(from, to, t) { + return from.lerp(to, t, out); + }; + })(), + _lerpVector3: (function() { + var out = cc.v3(); + return function(from, to, t) { + return from.lerp(to, t, out); + }; + })(), + sample: function sample(time, ratio, state) { + var values = this.values; + var ratios = this.ratios; + var frameCount = ratios.length; + if (0 === frameCount) return; + var shoudRefind = true; + var cachedIndex = this._cachedIndex; + if (cachedIndex < 0) { + cachedIndex = ~cachedIndex; + if (cachedIndex > 0 && cachedIndex < ratios.length) { + var _fromRatio = ratios[cachedIndex - 1]; + var _toRatio = ratios[cachedIndex]; + ratio > _fromRatio && ratio < _toRatio && (shoudRefind = false); + } + } + shoudRefind && (this._cachedIndex = this._findFrameIndex(ratios, ratio)); + var value; + var index = this._cachedIndex; + if (index < 0) { + index = ~index; + if (index <= 0) value = values[0]; else if (index >= frameCount) value = values[frameCount - 1]; else { + var fromVal = values[index - 1]; + if (this._lerp) { + var fromRatio = ratios[index - 1]; + var toRatio = ratios[index]; + var type = this.types[index - 1]; + var ratioBetweenFrames = (ratio - fromRatio) / (toRatio - fromRatio); + type && (ratioBetweenFrames = computeRatioByType(ratioBetweenFrames, type)); + var toVal = values[index]; + value = this._lerp(fromVal, toVal, ratioBetweenFrames); + } else value = fromVal; + } + } else value = values[index]; + this.target[this.prop] = value; + } + }); + DynamicAnimCurve.Linear = null; + DynamicAnimCurve.Bezier = function(controlPoints) { + return controlPoints; + }; + var EventInfo = function EventInfo() { + this.events = []; + }; + EventInfo.prototype.add = function(func, params) { + this.events.push({ + func: func || "", + params: params || [] + }); + }; + var EventAnimCurve = cc.Class({ + name: "cc.EventAnimCurve", + extends: AnimCurve, + properties: { + target: null, + ratios: [], + events: [], + _wrappedInfo: { + default: function _default() { + return new WrappedInfo(); + } + }, + _lastWrappedInfo: null, + _ignoreIndex: NaN + }, + _wrapIterations: function _wrapIterations(iterations) { + iterations - (0 | iterations) === 0 && (iterations -= 1); + return 0 | iterations; + }, + sample: function sample(time, ratio, state) { + var length = this.ratios.length; + var currentWrappedInfo = state.getWrappedInfo(state.time, this._wrappedInfo); + var direction = currentWrappedInfo.direction; + var currentIndex = binarySearch(this.ratios, currentWrappedInfo.ratio); + if (currentIndex < 0) { + currentIndex = ~currentIndex - 1; + direction < 0 && (currentIndex += 1); + } + this._ignoreIndex !== currentIndex && (this._ignoreIndex = NaN); + currentWrappedInfo.frameIndex = currentIndex; + if (!this._lastWrappedInfo) { + this._fireEvent(currentIndex); + this._lastWrappedInfo = new WrappedInfo(currentWrappedInfo); + return; + } + var wrapMode = state.wrapMode; + var currentIterations = this._wrapIterations(currentWrappedInfo.iterations); + var lastWrappedInfo = this._lastWrappedInfo; + var lastIterations = this._wrapIterations(lastWrappedInfo.iterations); + var lastIndex = lastWrappedInfo.frameIndex; + var lastDirection = lastWrappedInfo.direction; + var interationsChanged = -1 !== lastIterations && currentIterations !== lastIterations; + if (lastIndex === currentIndex && interationsChanged && 1 === length) this._fireEvent(0); else if (lastIndex !== currentIndex || interationsChanged) { + direction = lastDirection; + do { + if (lastIndex !== currentIndex) { + if (-1 === direction && 0 === lastIndex && currentIndex > 0) { + (wrapMode & WrapModeMask.PingPong) === WrapModeMask.PingPong ? direction *= -1 : lastIndex = length; + lastIterations++; + } else if (1 === direction && lastIndex === length - 1 && currentIndex < length - 1) { + (wrapMode & WrapModeMask.PingPong) === WrapModeMask.PingPong ? direction *= -1 : lastIndex = -1; + lastIterations++; + } + if (lastIndex === currentIndex) break; + if (lastIterations > currentIterations) break; + } + lastIndex += direction; + cc.director.getAnimationManager().pushDelayEvent(this, "_fireEvent", [ lastIndex ]); + } while (lastIndex !== currentIndex && lastIndex > -1 && lastIndex < length); + } + this._lastWrappedInfo.set(currentWrappedInfo); + }, + _fireEvent: function _fireEvent(index) { + if (index < 0 || index >= this.events.length || this._ignoreIndex === index) return; + var eventInfo = this.events[index]; + var events = eventInfo.events; + if (!this.target.isValid) return; + var components = this.target._components; + for (var i = 0; i < events.length; i++) { + var event = events[i]; + var funcName = event.func; + for (var j = 0; j < components.length; j++) { + var component = components[j]; + var func = component[funcName]; + func && func.apply(component, event.params); + } + } + }, + onTimeChangedManually: function onTimeChangedManually(time, state) { + this._lastWrappedInfo = null; + this._ignoreIndex = NaN; + var info = state.getWrappedInfo(time, this._wrappedInfo); + var direction = info.direction; + var frameIndex = binarySearch(this.ratios, info.ratio); + if (frameIndex < 0) { + frameIndex = ~frameIndex - 1; + direction < 0 && (frameIndex += 1); + this._ignoreIndex = frameIndex; + } + } + }); + false; + module.exports = { + AnimCurve: AnimCurve, + DynamicAnimCurve: DynamicAnimCurve, + EventAnimCurve: EventAnimCurve, + EventInfo: EventInfo, + computeRatioByType: computeRatioByType, + quickFindIndex: quickFindIndex + }; + }), { + "../core/utils/binary-search": 198, + "./bezier": 15, + "./types": 20 + } ], + 13: [ (function(require, module, exports) { + "use strict"; + var js = cc.js; + var AnimationManager = cc.Class({ + ctor: function ctor() { + this._anims = new js.array.MutableForwardIterator([]); + this._delayEvents = []; + cc.director._scheduler && cc.director._scheduler.enableForTarget(this); + }, + update: function update(dt) { + var iterator = this._anims; + var array = iterator.array; + for (iterator.i = 0; iterator.i < array.length; ++iterator.i) { + var anim = array[iterator.i]; + anim._isPlaying && !anim._isPaused && anim.update(dt); + } + var events = this._delayEvents; + for (var i = 0; i < events.length; i++) { + var event = events[i]; + event.target[event.func].apply(event.target, event.args); + } + events.length = 0; + }, + destruct: function destruct() {}, + addAnimation: function addAnimation(anim) { + var index = this._anims.array.indexOf(anim); + -1 === index && this._anims.push(anim); + }, + removeAnimation: function removeAnimation(anim) { + var index = this._anims.array.indexOf(anim); + index >= 0 ? this._anims.fastRemoveAt(index) : cc.errorID(3907); + }, + pushDelayEvent: function pushDelayEvent(target, func, args) { + this._delayEvents.push({ + target: target, + func: func, + args: args + }); + } + }); + cc.AnimationManager = module.exports = AnimationManager; + }), {} ], + 14: [ (function(require, module, exports) { + "use strict"; + var js = cc.js; + var Playable = require("./playable"); + var Types = require("./types"); + var WrappedInfo = Types.WrappedInfo; + var WrapMode = Types.WrapMode; + var WrapModeMask = Types.WrapModeMask; + function AnimationState(clip, name) { + Playable.call(this); + this._currentFramePlayed = false; + this._delay = 0; + this._delayTime = 0; + this._wrappedInfo = new WrappedInfo(); + this._lastWrappedInfo = null; + this._process = process; + this._clip = clip; + this._name = name || clip && clip.name; + this.animator = null; + this.curves = []; + this.delay = 0; + this.repeatCount = 1; + this.duration = 1; + this.speed = 1; + this.wrapMode = WrapMode.Normal; + this.time = 0; + this._target = null; + this._lastframeEventOn = false; + this.emit = function() { + var args = new Array(arguments.length); + for (var i = 0, l = args.length; i < l; i++) args[i] = arguments[i]; + cc.director.getAnimationManager().pushDelayEvent(this, "_emit", args); + }; + } + js.extend(AnimationState, Playable); + var proto = AnimationState.prototype; + proto._emit = function(type, state) { + this._target && this._target.isValid && this._target.emit(type, type, state); + }; + proto.on = function(type, callback, target) { + if (this._target && this._target.isValid) { + "lastframe" === type && (this._lastframeEventOn = true); + return this._target.on(type, callback, target); + } + return null; + }; + proto.once = function(type, callback, target) { + if (this._target && this._target.isValid) { + "lastframe" === type && (this._lastframeEventOn = true); + var self = this; + return this._target.once(type, (function(event) { + callback.call(target, event); + self._lastframeEventOn = false; + })); + } + return null; + }; + proto.off = function(type, callback, target) { + if (this._target && this._target.isValid) { + "lastframe" === type && (this._target.hasEventListener(type) || (this._lastframeEventOn = false)); + this._target.off(type, callback, target); + } + }; + proto._setEventTarget = function(target) { + this._target = target; + }; + proto.onPlay = function() { + this.setTime(0); + this._delayTime = this._delay; + cc.director.getAnimationManager().addAnimation(this); + this.animator && this.animator.addAnimation(this); + this.emit("play", this); + }; + proto.onStop = function() { + this.isPaused || cc.director.getAnimationManager().removeAnimation(this); + this.animator && this.animator.removeAnimation(this); + this.emit("stop", this); + }; + proto.onResume = function() { + cc.director.getAnimationManager().addAnimation(this); + this.emit("resume", this); + }; + proto.onPause = function() { + cc.director.getAnimationManager().removeAnimation(this); + this.emit("pause", this); + }; + proto.setTime = function(time) { + this._currentFramePlayed = false; + this.time = time || 0; + var curves = this.curves; + for (var i = 0, l = curves.length; i < l; i++) { + var curve = curves[i]; + curve.onTimeChangedManually && curve.onTimeChangedManually(time, this); + } + }; + function process() { + var info = this.sample(); + if (this._lastframeEventOn) { + var lastInfo; + lastInfo = this._lastWrappedInfo ? this._lastWrappedInfo : this._lastWrappedInfo = new WrappedInfo(info); + this.repeatCount > 1 && (0 | info.iterations) > (0 | lastInfo.iterations) && this.emit("lastframe", this); + lastInfo.set(info); + } + if (info.stopped) { + this.stop(); + this.emit("finished", this); + } + } + function simpleProcess() { + var time = this.time; + var duration = this.duration; + if (time > duration) { + time %= duration; + 0 === time && (time = duration); + } else if (time < 0) { + time %= duration; + 0 !== time && (time += duration); + } + var ratio = time / duration; + var curves = this.curves; + for (var i = 0, len = curves.length; i < len; i++) { + var curve = curves[i]; + curve.sample(time, ratio, this); + } + if (this._lastframeEventOn) { + void 0 === this._lastIterations && (this._lastIterations = ratio); + (this.time > 0 && this._lastIterations > ratio || this.time < 0 && this._lastIterations < ratio) && this.emit("lastframe", this); + this._lastIterations = ratio; + } + } + proto.update = function(delta) { + if (this._delayTime > 0) { + this._delayTime -= delta; + if (this._delayTime > 0) return; + } + this._currentFramePlayed ? this.time += delta * this.speed : this._currentFramePlayed = true; + this._process(); + }; + proto._needRevers = function(currentIterations) { + var wrapMode = this.wrapMode; + var needRevers = false; + if ((wrapMode & WrapModeMask.PingPong) === WrapModeMask.PingPong) { + var isEnd = currentIterations - (0 | currentIterations) === 0; + isEnd && currentIterations > 0 && (currentIterations -= 1); + var isOddIteration = 1 & currentIterations; + isOddIteration && (needRevers = !needRevers); + } + (wrapMode & WrapModeMask.Reverse) === WrapModeMask.Reverse && (needRevers = !needRevers); + return needRevers; + }; + proto.getWrappedInfo = function(time, info) { + info = info || new WrappedInfo(); + var stopped = false; + var duration = this.duration; + var repeatCount = this.repeatCount; + var currentIterations = time > 0 ? time / duration : -time / duration; + if (currentIterations >= repeatCount) { + currentIterations = repeatCount; + stopped = true; + var tempRatio = repeatCount - (0 | repeatCount); + 0 === tempRatio && (tempRatio = 1); + time = tempRatio * duration * (time > 0 ? 1 : -1); + } + if (time > duration) { + var tempTime = time % duration; + time = 0 === tempTime ? duration : tempTime; + } else if (time < 0) { + time %= duration; + 0 !== time && (time += duration); + } + var needRevers = false; + var shouldWrap = this._wrapMode & WrapModeMask.ShouldWrap; + shouldWrap && (needRevers = this._needRevers(currentIterations)); + var direction = needRevers ? -1 : 1; + this.speed < 0 && (direction *= -1); + shouldWrap && needRevers && (time = duration - time); + info.ratio = time / duration; + info.time = time; + info.direction = direction; + info.stopped = stopped; + info.iterations = currentIterations; + return info; + }; + proto.sample = function() { + var info = this.getWrappedInfo(this.time, this._wrappedInfo); + var curves = this.curves; + for (var i = 0, len = curves.length; i < len; i++) { + var curve = curves[i]; + curve.sample(info.time, info.ratio, this); + } + return info; + }; + js.get(proto, "clip", (function() { + return this._clip; + })); + js.get(proto, "name", (function() { + return this._name; + })); + js.obsolete(proto, "AnimationState.length", "duration"); + js.getset(proto, "curveLoaded", (function() { + return this.curves.length > 0; + }), (function() { + this.curves.length = 0; + })); + js.getset(proto, "wrapMode", (function() { + return this._wrapMode; + }), (function(value) { + this._wrapMode = value; + false; + this.time = 0; + value & WrapModeMask.Loop ? this.repeatCount = Infinity : this.repeatCount = 1; + })); + js.getset(proto, "repeatCount", (function() { + return this._repeatCount; + }), (function(value) { + this._repeatCount = value; + var shouldWrap = this._wrapMode & WrapModeMask.ShouldWrap; + var reverse = (this.wrapMode & WrapModeMask.Reverse) === WrapModeMask.Reverse; + this._process = Infinity !== value || shouldWrap || reverse ? process : simpleProcess; + })); + js.getset(proto, "delay", (function() { + return this._delay; + }), (function(value) { + this._delayTime = this._delay = value; + })); + cc.AnimationState = module.exports = AnimationState; + }), { + "./playable": 19, + "./types": 20 + } ], + 15: [ (function(require, module, exports) { + "use strict"; + function bezier(C1, C2, C3, C4, t) { + var t1 = 1 - t; + return t1 * (t1 * (C1 + (3 * C2 - C1) * t) + 3 * C3 * t * t) + C4 * t * t * t; + } + var cos = Math.cos, acos = Math.acos, max = Math.max, pi = Math.PI, tau = 2 * pi, sqrt = Math.sqrt; + function crt(v) { + return v < 0 ? -Math.pow(-v, 1 / 3) : Math.pow(v, 1 / 3); + } + function cardano(curve, x) { + var pa = x - 0; + var pb = x - curve[0]; + var pc = x - curve[2]; + var pd = x - 1; + var pa3 = 3 * pa; + var pb3 = 3 * pb; + var pc3 = 3 * pc; + var d = -pa + pb3 - pc3 + pd, rd = 1 / d, r3 = 1 / 3, a = (pa3 - 6 * pb + pc3) * rd, a3 = a * r3, b = (-pa3 + pb3) * rd, c = pa * rd, p = (3 * b - a * a) * r3, p3 = p * r3, q = (2 * a * a * a - 9 * a * b + 27 * c) / 27, q2 = q / 2, discriminant = q2 * q2 + p3 * p3 * p3, u1, v1, x1, x2, x3; + if (discriminant < 0) { + var mp3 = -p * r3, mp33 = mp3 * mp3 * mp3, r = sqrt(mp33), t = -q / (2 * r), cosphi = t < -1 ? -1 : t > 1 ? 1 : t, phi = acos(cosphi), crtr = crt(r), t1 = 2 * crtr; + x1 = t1 * cos(phi * r3) - a3; + x2 = t1 * cos((phi + tau) * r3) - a3; + x3 = t1 * cos((phi + 2 * tau) * r3) - a3; + return 0 <= x1 && x1 <= 1 ? 0 <= x2 && x2 <= 1 ? 0 <= x3 && x3 <= 1 ? max(x1, x2, x3) : max(x1, x2) : 0 <= x3 && x3 <= 1 ? max(x1, x3) : x1 : 0 <= x2 && x2 <= 1 ? 0 <= x3 && x3 <= 1 ? max(x2, x3) : x2 : x3; + } + if (0 === discriminant) { + u1 = q2 < 0 ? crt(-q2) : -crt(q2); + x1 = 2 * u1 - a3; + x2 = -u1 - a3; + return 0 <= x1 && x1 <= 1 ? 0 <= x2 && x2 <= 1 ? max(x1, x2) : x1 : x2; + } + var sd = sqrt(discriminant); + u1 = crt(-q2 + sd); + v1 = crt(q2 + sd); + x1 = u1 - v1 - a3; + return x1; + } + function bezierByTime(controlPoints, x) { + var percent = cardano(controlPoints, x); + var p1y = controlPoints[1]; + var p2y = controlPoints[3]; + return ((1 - percent) * (p1y + (p2y - p1y) * percent) * 3 + percent * percent) * percent; + } + false; + module.exports = { + bezier: bezier, + bezierByTime: bezierByTime + }; + }), {} ], + 16: [ (function(require, module, exports) { + "use strict"; + var easing = { + constant: function constant() { + return 0; + }, + linear: function linear(k) { + return k; + }, + quadIn: function quadIn(k) { + return k * k; + }, + quadOut: function quadOut(k) { + return k * (2 - k); + }, + quadInOut: function quadInOut(k) { + if ((k *= 2) < 1) return .5 * k * k; + return -.5 * (--k * (k - 2) - 1); + }, + cubicIn: function cubicIn(k) { + return k * k * k; + }, + cubicOut: function cubicOut(k) { + return --k * k * k + 1; + }, + cubicInOut: function cubicInOut(k) { + if ((k *= 2) < 1) return .5 * k * k * k; + return .5 * ((k -= 2) * k * k + 2); + }, + quartIn: function quartIn(k) { + return k * k * k * k; + }, + quartOut: function quartOut(k) { + return 1 - --k * k * k * k; + }, + quartInOut: function quartInOut(k) { + if ((k *= 2) < 1) return .5 * k * k * k * k; + return -.5 * ((k -= 2) * k * k * k - 2); + }, + quintIn: function quintIn(k) { + return k * k * k * k * k; + }, + quintOut: function quintOut(k) { + return --k * k * k * k * k + 1; + }, + quintInOut: function quintInOut(k) { + if ((k *= 2) < 1) return .5 * k * k * k * k * k; + return .5 * ((k -= 2) * k * k * k * k + 2); + }, + sineIn: function sineIn(k) { + return 1 - Math.cos(k * Math.PI / 2); + }, + sineOut: function sineOut(k) { + return Math.sin(k * Math.PI / 2); + }, + sineInOut: function sineInOut(k) { + return .5 * (1 - Math.cos(Math.PI * k)); + }, + expoIn: function expoIn(k) { + return 0 === k ? 0 : Math.pow(1024, k - 1); + }, + expoOut: function expoOut(k) { + return 1 === k ? 1 : 1 - Math.pow(2, -10 * k); + }, + expoInOut: function expoInOut(k) { + if (0 === k) return 0; + if (1 === k) return 1; + if ((k *= 2) < 1) return .5 * Math.pow(1024, k - 1); + return .5 * (2 - Math.pow(2, -10 * (k - 1))); + }, + circIn: function circIn(k) { + return 1 - Math.sqrt(1 - k * k); + }, + circOut: function circOut(k) { + return Math.sqrt(1 - --k * k); + }, + circInOut: function circInOut(k) { + if ((k *= 2) < 1) return -.5 * (Math.sqrt(1 - k * k) - 1); + return .5 * (Math.sqrt(1 - (k -= 2) * k) + 1); + }, + elasticIn: function elasticIn(k) { + var s, a = .1, p = .4; + if (0 === k) return 0; + if (1 === k) return 1; + if (!a || a < 1) { + a = 1; + s = p / 4; + } else s = p * Math.asin(1 / a) / (2 * Math.PI); + return -a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p); + }, + elasticOut: function elasticOut(k) { + var s, a = .1, p = .4; + if (0 === k) return 0; + if (1 === k) return 1; + if (!a || a < 1) { + a = 1; + s = p / 4; + } else s = p * Math.asin(1 / a) / (2 * Math.PI); + return a * Math.pow(2, -10 * k) * Math.sin((k - s) * (2 * Math.PI) / p) + 1; + }, + elasticInOut: function elasticInOut(k) { + var s, a = .1, p = .4; + if (0 === k) return 0; + if (1 === k) return 1; + if (!a || a < 1) { + a = 1; + s = p / 4; + } else s = p * Math.asin(1 / a) / (2 * Math.PI); + if ((k *= 2) < 1) return a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p) * -.5; + return a * Math.pow(2, -10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p) * .5 + 1; + }, + backIn: function backIn(k) { + var s = 1.70158; + return k * k * ((s + 1) * k - s); + }, + backOut: function backOut(k) { + var s = 1.70158; + return --k * k * ((s + 1) * k + s) + 1; + }, + backInOut: function backInOut(k) { + var s = 2.5949095; + if ((k *= 2) < 1) return k * k * ((s + 1) * k - s) * .5; + return .5 * ((k -= 2) * k * ((s + 1) * k + s) + 2); + }, + bounceIn: function bounceIn(k) { + return 1 - easing.bounceOut(1 - k); + }, + bounceOut: function bounceOut(k) { + return k < 1 / 2.75 ? 7.5625 * k * k : k < 2 / 2.75 ? 7.5625 * (k -= 1.5 / 2.75) * k + .75 : k < 2.5 / 2.75 ? 7.5625 * (k -= 2.25 / 2.75) * k + .9375 : 7.5625 * (k -= 2.625 / 2.75) * k + .984375; + }, + bounceInOut: function bounceInOut(k) { + if (k < .5) return .5 * easing.bounceIn(2 * k); + return .5 * easing.bounceOut(2 * k - 1) + .5; + }, + smooth: function smooth(t) { + if (t <= 0) return 0; + if (t >= 1) return 1; + return t * t * (3 - 2 * t); + }, + fade: function fade(t) { + if (t <= 0) return 0; + if (t >= 1) return 1; + return t * t * t * (t * (6 * t - 15) + 10); + } + }; + function _makeOutIn(fnIn, fnOut) { + return function(k) { + if (k < .5) return fnOut(2 * k) / 2; + return fnIn(2 * k - 1) / 2 + .5; + }; + } + easing.quadOutIn = _makeOutIn(easing.quadIn, easing.quadOut); + easing.cubicOutIn = _makeOutIn(easing.cubicIn, easing.cubicOut); + easing.quartOutIn = _makeOutIn(easing.quartIn, easing.quartOut); + easing.quintOutIn = _makeOutIn(easing.quintIn, easing.quintOut); + easing.sineOutIn = _makeOutIn(easing.sineIn, easing.sineOut); + easing.expoOutIn = _makeOutIn(easing.expoIn, easing.expoOut); + easing.circOutIn = _makeOutIn(easing.circIn, easing.circOut); + easing.backOutIn = _makeOutIn(easing.backIn, easing.backOut); + easing.bounceIn = function(k) { + return 1 - easing.bounceOut(1 - k); + }; + easing.bounceInOut = function(k) { + if (k < .5) return .5 * easing.bounceIn(2 * k); + return .5 * easing.bounceOut(2 * k - 1) + .5; + }; + easing.bounceOutIn = _makeOutIn(easing.bounceIn, easing.bounceOut); + cc.easing = module.exports = easing; + }), {} ], + 17: [ (function(require, module, exports) { + "use strict"; + require("./bezier"); + require("./easing"); + require("./types"); + require("./motion-path-helper"); + require("./animation-curves"); + require("./animation-clip"); + require("./animation-manager"); + require("./animation-state"); + require("./animation-animator"); + }), { + "./animation-animator": 10, + "./animation-clip": 11, + "./animation-curves": 12, + "./animation-manager": 13, + "./animation-state": 14, + "./bezier": 15, + "./easing": 16, + "./motion-path-helper": 18, + "./types": 20 + } ], + 18: [ (function(require, module, exports) { + "use strict"; + var DynamicAnimCurve = require("./animation-curves").DynamicAnimCurve; + var computeRatioByType = require("./animation-curves").computeRatioByType; + var bezier = require("./bezier").bezier; + var binarySearch = require("../core/utils/binary-search").binarySearchEpsilon; + var v2 = cc.v2; + function Curve(points) { + this.points = points || []; + this.beziers = []; + this.ratios = []; + this.progresses = []; + this.length = 0; + this.computeBeziers(); + } + Curve.prototype.computeBeziers = function() { + this.beziers.length = 0; + this.ratios.length = 0; + this.progresses.length = 0; + this.length = 0; + var bezier; + for (var i = 1; i < this.points.length; i++) { + var startPoint = this.points[i - 1]; + var endPoint = this.points[i]; + bezier = new Bezier(); + bezier.start = startPoint.pos; + bezier.startCtrlPoint = startPoint.out; + bezier.end = endPoint.pos; + bezier.endCtrlPoint = endPoint["in"]; + this.beziers.push(bezier); + this.length += bezier.getLength(); + } + var current = 0; + for (var i = 0; i < this.beziers.length; i++) { + bezier = this.beziers[i]; + this.ratios[i] = bezier.getLength() / this.length; + this.progresses[i] = current += this.ratios[i]; + } + return this.beziers; + }; + function Bezier() { + this.start = v2(); + this.end = v2(); + this.startCtrlPoint = v2(); + this.endCtrlPoint = v2(); + } + Bezier.prototype.getPointAt = function(u) { + var t = this.getUtoTmapping(u); + return this.getPoint(t); + }; + Bezier.prototype.getPoint = function(t) { + var x = bezier(this.start.x, this.startCtrlPoint.x, this.endCtrlPoint.x, this.end.x, t); + var y = bezier(this.start.y, this.startCtrlPoint.y, this.endCtrlPoint.y, this.end.y, t); + return new v2(x, y); + }; + Bezier.prototype.getLength = function() { + var lengths = this.getLengths(); + return lengths[lengths.length - 1]; + }; + Bezier.prototype.getLengths = function(divisions) { + divisions || (divisions = this.__arcLengthDivisions ? this.__arcLengthDivisions : 200); + if (this.cacheArcLengths && this.cacheArcLengths.length === divisions + 1) return this.cacheArcLengths; + var cache = []; + var current, last = this.getPoint(0), vector = v2(); + var p, sum = 0; + cache.push(0); + for (p = 1; p <= divisions; p++) { + current = this.getPoint(p / divisions); + vector.x = last.x - current.x; + vector.y = last.y - current.y; + sum += vector.mag(); + cache.push(sum); + last = current; + } + this.cacheArcLengths = cache; + return cache; + }; + Bezier.prototype.getUtoTmapping = function(u, distance) { + var arcLengths = this.getLengths(); + var i = 0, il = arcLengths.length; + var targetArcLength; + targetArcLength = distance || u * arcLengths[il - 1]; + var low = 0, high = il - 1, comparison; + while (low <= high) { + i = Math.floor(low + (high - low) / 2); + comparison = arcLengths[i] - targetArcLength; + if (comparison < 0) { + low = i + 1; + continue; + } + if (comparison > 0) { + high = i - 1; + continue; + } + high = i; + break; + } + i = high; + if (arcLengths[i] === targetArcLength) { + var t = i / (il - 1); + return t; + } + var lengthBefore = arcLengths[i]; + var lengthAfter = arcLengths[i + 1]; + var segmentLength = lengthAfter - lengthBefore; + var segmentFraction = (targetArcLength - lengthBefore) / segmentLength; + var t = (i + segmentFraction) / (il - 1); + return t; + }; + function checkMotionPath(motionPath) { + if (!Array.isArray(motionPath)) return false; + for (var i = 0, l = motionPath.length; i < l; i++) { + var controls = motionPath[i]; + if (!Array.isArray(controls) || 6 !== controls.length) return false; + } + return true; + } + function sampleMotionPaths(motionPaths, data, duration, fps, target) { + function createControlPoints(array) { + if (array instanceof cc.Vec2) return { + in: array, + pos: array, + out: array + }; + if (Array.isArray(array) && 6 === array.length) return { + in: v2(array[2], array[3]), + pos: v2(array[0], array[1]), + out: v2(array[4], array[5]) + }; + return { + in: cc.Vec2.ZERO, + pos: cc.Vec2.ZERO, + out: cc.Vec2.ZERO + }; + } + var values = data.values = data.values.map((function(value) { + Array.isArray(value) && (value = 2 === value.length ? cc.v2(value[0], value[1]) : cc.v3(value[0], value[1], value[2])); + return value; + })); + if (0 === motionPaths.length || 0 === values.length) return; + var motionPathValid = false; + for (var _i = 0; _i < motionPaths.length; _i++) { + var _motionPath = motionPaths[_i]; + if (_motionPath && !checkMotionPath(_motionPath)) { + cc.errorID(3904, target ? target.name : "", "position", _i); + _motionPath = null; + } + if (_motionPath && _motionPath.length > 0) { + motionPathValid = true; + break; + } + } + if (!motionPathValid) return; + if (1 === values.length) return; + var types = data.types; + var ratios = data.ratios; + var newValues = data.values = []; + var newTypes = data.types = []; + var newRatios = data.ratios = []; + function addNewDatas(value, type, ratio) { + newValues.push(value); + newTypes.push(type); + newRatios.push(ratio); + } + var startRatioOffset = 0; + var EPSILON = 1e-6; + var newType = DynamicAnimCurve.Linear; + for (var i = 0, l = motionPaths.length; i < l - 1; i++) { + var motionPath = motionPaths[i]; + var ratio = ratios[i]; + var nextRatio = ratios[i + 1]; + var betweenRatio = nextRatio - ratio; + var value = values[i]; + var nextValue = values[i + 1]; + var type = types[i]; + var results = []; + var progress = startRatioOffset / betweenRatio; + var speed = 1 / (betweenRatio * duration * fps); + var finalProgress; + if (motionPath && motionPath.length > 0) { + var points = []; + points.push(createControlPoints(value)); + for (var j = 0, l2 = motionPath.length; j < l2; j++) { + var controlPoints = createControlPoints(motionPath[j]); + points.push(controlPoints); + } + points.push(createControlPoints(nextValue)); + var curve = new Curve(points); + curve.computeBeziers(); + var progresses = curve.progresses; + while (1 - progress > EPSILON) { + finalProgress = progress; + finalProgress = computeRatioByType(finalProgress, type); + var pos, bezier, normal, length; + if (finalProgress < 0) { + bezier = curve.beziers[0]; + length = (0 - finalProgress) * bezier.getLength(); + normal = bezier.start.sub(bezier.endCtrlPoint).normalize(); + pos = bezier.start.add(normal.mul(length)); + } else if (finalProgress > 1) { + bezier = curve.beziers[curve.beziers.length - 1]; + length = (finalProgress - 1) * bezier.getLength(); + normal = bezier.end.sub(bezier.startCtrlPoint).normalize(); + pos = bezier.end.add(normal.mul(length)); + } else { + var bezierIndex = binarySearch(progresses, finalProgress); + bezierIndex < 0 && (bezierIndex = ~bezierIndex); + finalProgress -= bezierIndex > 0 ? progresses[bezierIndex - 1] : 0; + finalProgress /= curve.ratios[bezierIndex]; + pos = curve.beziers[bezierIndex].getPointAt(finalProgress); + } + results.push(pos); + progress += speed; + } + } else while (1 - progress > EPSILON) { + finalProgress = progress; + finalProgress = computeRatioByType(finalProgress, type); + results.push(value.lerp(nextValue, finalProgress)); + progress += speed; + } + newType = "constant" === type ? type : DynamicAnimCurve.Linear; + for (var j = 0, l2 = results.length; j < l2; j++) { + var newRatio = ratio + startRatioOffset + speed * j * betweenRatio; + addNewDatas(results[j], newType, newRatio); + } + startRatioOffset = Math.abs(progress - 1) > EPSILON ? (progress - 1) * betweenRatio : 0; + } + ratios[ratios.length - 1] !== newRatios[newRatios.length - 1] && addNewDatas(values[values.length - 1], newType, ratios[ratios.length - 1]); + } + false; + module.exports = { + sampleMotionPaths: sampleMotionPaths, + Curve: Curve, + Bezier: Bezier + }; + }), { + "../core/utils/binary-search": 198, + "./animation-curves": 12, + "./bezier": 15 + } ], + 19: [ (function(require, module, exports) { + "use strict"; + var js = cc.js; + var debug = require("../core/CCDebug"); + function Playable() { + this._isPlaying = false; + this._isPaused = false; + this._stepOnce = false; + } + var prototype = Playable.prototype; + js.get(prototype, "isPlaying", (function() { + return this._isPlaying; + }), true); + js.get(prototype, "isPaused", (function() { + return this._isPaused; + }), true); + var virtual = function virtual() {}; + prototype.onPlay = virtual; + prototype.onPause = virtual; + prototype.onResume = virtual; + prototype.onStop = virtual; + prototype.onError = virtual; + prototype.play = function() { + if (this._isPlaying) if (this._isPaused) { + this._isPaused = false; + this.onResume(); + } else this.onError(debug.getError(3912)); else { + this._isPlaying = true; + this.onPlay(); + } + }; + prototype.stop = function() { + if (this._isPlaying) { + this._isPlaying = false; + this.onStop(); + this._isPaused = false; + } + }; + prototype.pause = function() { + if (this._isPlaying && !this._isPaused) { + this._isPaused = true; + this.onPause(); + } + }; + prototype.resume = function() { + if (this._isPlaying && this._isPaused) { + this._isPaused = false; + this.onResume(); + } + }; + prototype.step = function() { + this.pause(); + this._stepOnce = true; + this._isPlaying || this.play(); + }; + module.exports = Playable; + }), { + "../core/CCDebug": 21 + } ], + 20: [ (function(require, module, exports) { + "use strict"; + var WrapModeMask = { + Loop: 2, + ShouldWrap: 4, + PingPong: 22, + Reverse: 36 + }; + var WrapMode = cc.Enum({ + Default: 0, + Normal: 1, + Reverse: WrapModeMask.Reverse, + Loop: WrapModeMask.Loop, + LoopReverse: WrapModeMask.Loop | WrapModeMask.Reverse, + PingPong: WrapModeMask.PingPong, + PingPongReverse: WrapModeMask.PingPong | WrapModeMask.Reverse + }); + cc.WrapMode = WrapMode; + function WrappedInfo(info) { + if (info) { + this.set(info); + return; + } + this.ratio = 0; + this.time = 0; + this.direction = 1; + this.stopped = true; + this.iterations = 0; + this.frameIndex = void 0; + } + WrappedInfo.prototype.set = function(info) { + this.ratio = info.ratio; + this.time = info.time; + this.direction = info.direction; + this.stopped = info.stopped; + this.iterations = info.iterations; + this.frameIndex = info.frameIndex; + }; + module.exports = { + WrapModeMask: WrapModeMask, + WrapMode: WrapMode, + WrappedInfo: WrappedInfo + }; + }), {} ], + 21: [ (function(require, module, exports) { + "use strict"; + var utils = require("./platform/utils"); + var debugInfos = require("../../DebugInfos") || {}; + var ERROR_MAP_URL = "https://github.com/cocos-creator/engine/blob/master/EngineErrorMap.md"; + var logList; + cc.log = cc.warn = cc.error = cc.assert = console.log.bind ? console.log.bind(console) : console.log; + var resetDebugSetting = function resetDebugSetting(mode) { + cc.log = cc.warn = cc.error = cc.assert = function() {}; + if (mode === DebugMode.NONE) return; + if (mode > DebugMode.ERROR) { + var logToWebPage = function logToWebPage(msg) { + if (!cc.game.canvas) return; + if (!logList) { + var logDiv = document.createElement("Div"); + logDiv.setAttribute("id", "logInfoDiv"); + logDiv.setAttribute("width", "200"); + logDiv.setAttribute("height", cc.game.canvas.height); + var logDivStyle = logDiv.style; + logDivStyle.zIndex = "99999"; + logDivStyle.position = "absolute"; + logDivStyle.top = logDivStyle.left = "0"; + logList = document.createElement("textarea"); + logList.setAttribute("rows", "20"); + logList.setAttribute("cols", "30"); + logList.setAttribute("disabled", "true"); + var logListStyle = logList.style; + logListStyle.backgroundColor = "transparent"; + logListStyle.borderBottom = "1px solid #cccccc"; + logListStyle.borderTopWidth = logListStyle.borderLeftWidth = logListStyle.borderRightWidth = "0px"; + logListStyle.borderTopStyle = logListStyle.borderLeftStyle = logListStyle.borderRightStyle = "none"; + logListStyle.padding = "0px"; + logListStyle.margin = 0; + logDiv.appendChild(logList); + cc.game.canvas.parentNode.appendChild(logDiv); + } + logList.value = logList.value + msg + "\r\n"; + logList.scrollTop = logList.scrollHeight; + }; + cc.error = function() { + logToWebPage("ERROR : " + cc.js.formatStr.apply(null, arguments)); + }; + cc.assert = function(cond, msg) { + if (!cond && msg) { + msg = cc.js.formatStr.apply(null, cc.js.shiftArguments.apply(null, arguments)); + logToWebPage("ASSERT: " + msg); + } + }; + mode !== DebugMode.ERROR_FOR_WEB_PAGE && (cc.warn = function() { + logToWebPage("WARN : " + cc.js.formatStr.apply(null, arguments)); + }); + mode === DebugMode.INFO_FOR_WEB_PAGE && (cc.log = function() { + logToWebPage(cc.js.formatStr.apply(null, arguments)); + }); + } else if (console && console.log.apply) { + console.error || (console.error = console.log); + console.warn || (console.warn = console.log); + false; + console.error.bind ? cc.error = console.error.bind(console) : cc.error = (false, + function() { + return console.error.apply(console, arguments); + }); + cc.assert = function(cond, msg) { + if (!cond) { + msg && (msg = cc.js.formatStr.apply(null, cc.js.shiftArguments.apply(null, arguments))); + false; + false; + throw new Error(msg); + } + }; + } + if (mode !== DebugMode.ERROR) { + false; + console.warn.bind ? cc.warn = console.warn.bind(console) : cc.warn = (false, function() { + return console.warn.apply(console, arguments); + }); + } + false; + if (mode === DebugMode.INFO) { + false, false; + console.log.bind ? cc.log = console.log.bind(console) : cc.log = function() { + return console.log.apply(console, arguments); + }; + } + }; + cc._throw = function(error) { + utils.callInNextTick((function() { + throw error; + })); + }; + function getTypedFormatter(type) { + return function() { + var id = arguments[0]; + var msg = debugInfos[id] || "unknown id"; + if (1 === arguments.length) return msg; + if (2 === arguments.length) return cc.js.formatStr(msg, arguments[1]); + var argsArray = cc.js.shiftArguments.apply(null, arguments); + return cc.js.formatStr.apply(null, [ msg ].concat(argsArray)); + }; + } + var logFormatter = getTypedFormatter("Log"); + cc.logID = function() { + cc.log(logFormatter.apply(null, arguments)); + }; + var warnFormatter = getTypedFormatter("Warning"); + cc.warnID = function() { + cc.warn(warnFormatter.apply(null, arguments)); + }; + var errorFormatter = getTypedFormatter("Error"); + cc.errorID = function() { + cc.error(errorFormatter.apply(null, arguments)); + }; + var assertFormatter = getTypedFormatter("Assert"); + cc.assertID = function(cond) { + if (cond) return; + cc.assert(false, assertFormatter.apply(null, cc.js.shiftArguments.apply(null, arguments))); + }; + var DebugMode = cc.Enum({ + NONE: 0, + INFO: 1, + WARN: 2, + ERROR: 3, + INFO_FOR_WEB_PAGE: 4, + WARN_FOR_WEB_PAGE: 5, + ERROR_FOR_WEB_PAGE: 6 + }); + module.exports = cc.debug = { + DebugMode: DebugMode, + _resetDebugSetting: resetDebugSetting, + getError: getTypedFormatter("ERROR"), + isDisplayStats: function isDisplayStats() { + return !!cc.profiler && cc.profiler.isShowingStats(); + }, + setDisplayStats: function setDisplayStats(displayStats) { + if (cc.profiler && cc.game.renderType !== cc.game.RENDER_TYPE_CANVAS) { + displayStats ? cc.profiler.showStats() : cc.profiler.hideStats(); + cc.game.config.showFPS = !!displayStats; + } + } + }; + }), { + "../../DebugInfos": 1, + "./platform/utils": 145 + } ], + 22: [ (function(require, module, exports) { + "use strict"; + var EventTarget = require("./event/event-target"); + var ComponentScheduler = require("./component-scheduler"); + var NodeActivator = require("./node-activator"); + var Obj = require("./platform/CCObject"); + var game = require("./CCGame"); + var renderer = require("./renderer"); + var eventManager = require("./event-manager"); + var Scheduler = require("./CCScheduler"); + cc.Director = function() { + EventTarget.call(this); + this._paused = false; + this._purgeDirectorInNextLoop = false; + this._winSizeInPoints = null; + this._scene = null; + this._loadingScene = ""; + this._totalFrames = 0; + this._lastUpdate = 0; + this._deltaTime = 0; + this._startTime = 0; + this._maxParticleDeltaTime = 0; + this._scheduler = null; + this._compScheduler = null; + this._nodeActivator = null; + this._actionManager = null; + var self = this; + game.on(game.EVENT_SHOW, (function() { + self._lastUpdate = performance.now(); + })); + game.once(game.EVENT_ENGINE_INITED, this.init, this); + }; + cc.Director.prototype = { + constructor: cc.Director, + init: function init() { + this._totalFrames = 0; + this._lastUpdate = performance.now(); + this._startTime = this._lastUpdate; + this._paused = false; + this._purgeDirectorInNextLoop = false; + this._winSizeInPoints = cc.size(0, 0); + this._scheduler = new Scheduler(); + if (cc.ActionManager) { + this._actionManager = new cc.ActionManager(); + this._scheduler.scheduleUpdate(this._actionManager, Scheduler.PRIORITY_SYSTEM, false); + } else this._actionManager = null; + this.sharedInit(); + return true; + }, + sharedInit: function sharedInit() { + this._compScheduler = new ComponentScheduler(); + this._nodeActivator = new NodeActivator(); + eventManager && eventManager.setEnabled(true); + if (cc.AnimationManager) { + this._animationManager = new cc.AnimationManager(); + this._scheduler.scheduleUpdate(this._animationManager, Scheduler.PRIORITY_SYSTEM, false); + } else this._animationManager = null; + if (cc.CollisionManager) { + this._collisionManager = new cc.CollisionManager(); + this._scheduler.scheduleUpdate(this._collisionManager, Scheduler.PRIORITY_SYSTEM, false); + } else this._collisionManager = null; + if (cc.PhysicsManager) { + this._physicsManager = new cc.PhysicsManager(); + this._scheduler.scheduleUpdate(this._physicsManager, Scheduler.PRIORITY_SYSTEM, false); + } else this._physicsManager = null; + if (cc.Physics3DManager && (false, false)) { + this._physics3DManager = new cc.Physics3DManager(); + this._scheduler.scheduleUpdate(this._physics3DManager, Scheduler.PRIORITY_SYSTEM, false); + } else this._physics3DManager = null; + cc._widgetManager && cc._widgetManager.init(this); + }, + calculateDeltaTime: function calculateDeltaTime(now) { + now || (now = performance.now()); + this._deltaTime = now > this._lastUpdate ? (now - this._lastUpdate) / 1e3 : 0; + (true, this._deltaTime > 1) && (this._deltaTime = 1 / 60); + this._lastUpdate = now; + }, + convertToGL: function convertToGL(uiPoint) { + var container = game.container; + var view = cc.view; + var box = container.getBoundingClientRect(); + var left = box.left + window.pageXOffset - container.clientLeft; + var top = box.top + window.pageYOffset - container.clientTop; + var x = view._devicePixelRatio * (uiPoint.x - left); + var y = view._devicePixelRatio * (top + box.height - uiPoint.y); + return view._isRotated ? cc.v2(view._viewportRect.width - y, x) : cc.v2(x, y); + }, + convertToUI: function convertToUI(glPoint) { + var container = game.container; + var view = cc.view; + var box = container.getBoundingClientRect(); + var left = box.left + window.pageXOffset - container.clientLeft; + var top = box.top + window.pageYOffset - container.clientTop; + var uiPoint = cc.v2(0, 0); + if (view._isRotated) { + uiPoint.x = left + glPoint.y / view._devicePixelRatio; + uiPoint.y = top + box.height - (view._viewportRect.width - glPoint.x) / view._devicePixelRatio; + } else { + uiPoint.x = left + glPoint.x * view._devicePixelRatio; + uiPoint.y = top + box.height - glPoint.y * view._devicePixelRatio; + } + return uiPoint; + }, + end: function end() { + this._purgeDirectorInNextLoop = true; + }, + getWinSize: function getWinSize() { + return cc.size(cc.winSize); + }, + getWinSizeInPixels: function getWinSizeInPixels() { + return cc.size(cc.winSize); + }, + pause: function pause() { + if (this._paused) return; + this._paused = true; + }, + purgeCachedData: function purgeCachedData() { + cc.assetManager.releaseAll(); + }, + purgeDirector: function purgeDirector() { + this._scheduler.unscheduleAll(); + this._compScheduler.unscheduleAll(); + this._nodeActivator.reset(); + eventManager && eventManager.setEnabled(false); + true; + cc.isValid(this._scene) && this._scene.destroy(); + this._scene = null; + cc.renderer.clear(); + cc.assetManager.builtins.clear(); + cc.game.pause(); + cc.assetManager.releaseAll(); + }, + reset: function reset() { + this.purgeDirector(); + eventManager && eventManager.setEnabled(true); + this._actionManager && this._scheduler.scheduleUpdate(this._actionManager, cc.Scheduler.PRIORITY_SYSTEM, false); + this._animationManager && this._scheduler.scheduleUpdate(this._animationManager, cc.Scheduler.PRIORITY_SYSTEM, false); + this._collisionManager && this._scheduler.scheduleUpdate(this._collisionManager, cc.Scheduler.PRIORITY_SYSTEM, false); + this._physicsManager && this._scheduler.scheduleUpdate(this._physicsManager, cc.Scheduler.PRIORITY_SYSTEM, false); + cc.game.resume(); + }, + runSceneImmediate: function runSceneImmediate(scene, onBeforeLoadScene, onLaunched) { + cc.assertID(scene instanceof cc.Scene || scene instanceof cc.SceneAsset, 1216); + scene instanceof cc.SceneAsset && (scene = scene.scene); + (true, true) && console.time("InitScene"); + scene._load(); + (true, true) && console.timeEnd("InitScene"); + (true, true) && console.time("AttachPersist"); + var persistNodeList = Object.keys(game._persistRootNodes).map((function(x) { + return game._persistRootNodes[x]; + })); + for (var i = 0; i < persistNodeList.length; i++) { + var node = persistNodeList[i]; + var existNode = scene.getChildByUuid(node.uuid); + if (existNode) { + var index = existNode.getSiblingIndex(); + existNode._destroyImmediate(); + scene.insertChild(node, index); + } else node.parent = scene; + } + (true, true) && console.timeEnd("AttachPersist"); + var oldScene = this._scene; + true; + (true, true) && console.time("AutoRelease"); + cc.assetManager._releaseManager._autoRelease(oldScene, scene, game._persistRootNodes); + (true, true) && console.timeEnd("AutoRelease"); + (true, true) && console.time("Destroy"); + cc.isValid(oldScene) && oldScene.destroy(); + this._scene = null; + Obj._deferredDestroy(); + (true, true) && console.timeEnd("Destroy"); + onBeforeLoadScene && onBeforeLoadScene(); + this.emit(cc.Director.EVENT_BEFORE_SCENE_LAUNCH, scene); + this._scene = scene; + (true, true) && console.time("Activate"); + scene._activate(); + (true, true) && console.timeEnd("Activate"); + cc.game.resume(); + onLaunched && onLaunched(null, scene); + this.emit(cc.Director.EVENT_AFTER_SCENE_LAUNCH, scene); + }, + runScene: function runScene(scene, onBeforeLoadScene, onLaunched) { + cc.assertID(scene, 1205); + cc.assertID(scene instanceof cc.Scene || scene instanceof cc.SceneAsset, 1216); + scene instanceof cc.SceneAsset && (scene = scene.scene); + scene._load(); + this.once(cc.Director.EVENT_AFTER_DRAW, (function() { + this.runSceneImmediate(scene, onBeforeLoadScene, onLaunched); + }), this); + }, + loadScene: function loadScene(sceneName, onLaunched, _onUnloaded) { + if (this._loadingScene) { + cc.warnID(1208, sceneName, this._loadingScene); + return false; + } + var bundle = cc.assetManager.bundles.find((function(bundle) { + return bundle.getSceneInfo(sceneName); + })); + if (bundle) { + this.emit(cc.Director.EVENT_BEFORE_SCENE_LOADING, sceneName); + this._loadingScene = sceneName; + var self = this; + console.time("LoadScene " + sceneName); + bundle.loadScene(sceneName, (function(err, scene) { + console.timeEnd("LoadScene " + sceneName); + self._loadingScene = ""; + if (err) { + err = "Failed to load scene: " + err; + cc.error(err); + onLaunched && onLaunched(err); + } else self.runSceneImmediate(scene, _onUnloaded, onLaunched); + })); + return true; + } + cc.errorID(1209, sceneName); + return false; + }, + preloadScene: function preloadScene(sceneName, onProgress, onLoaded) { + var bundle = cc.assetManager.bundles.find((function(bundle) { + return bundle.getSceneInfo(sceneName); + })); + if (!bundle) { + cc.errorID(1209, sceneName); + return null; + } + bundle.preloadScene(sceneName, null, onProgress, onLoaded); + }, + resume: function resume() { + if (!this._paused) return; + this._lastUpdate = performance.now(); + this._lastUpdate || cc.logID(1200); + this._paused = false; + this._deltaTime = 0; + }, + setDepthTest: function setDepthTest(value) { + if (!cc.Camera.main) return; + cc.Camera.main.depth = !!value; + }, + setClearColor: function setClearColor(clearColor) { + if (!cc.Camera.main) return; + cc.Camera.main.backgroundColor = clearColor; + }, + getRunningScene: function getRunningScene() { + return this._scene; + }, + getScene: function getScene() { + return this._scene; + }, + getAnimationInterval: function getAnimationInterval() { + return 1e3 / game.getFrameRate(); + }, + setAnimationInterval: function setAnimationInterval(value) { + game.setFrameRate(Math.round(1e3 / value)); + }, + getDeltaTime: function getDeltaTime() { + return this._deltaTime; + }, + getTotalTime: function getTotalTime() { + return performance.now() - this._startTime; + }, + getTotalFrames: function getTotalFrames() { + return this._totalFrames; + }, + isPaused: function isPaused() { + return this._paused; + }, + getScheduler: function getScheduler() { + return this._scheduler; + }, + setScheduler: function setScheduler(scheduler) { + this._scheduler !== scheduler && (this._scheduler = scheduler); + }, + getActionManager: function getActionManager() { + return this._actionManager; + }, + setActionManager: function setActionManager(actionManager) { + if (this._actionManager !== actionManager) { + this._actionManager && this._scheduler.unscheduleUpdate(this._actionManager); + this._actionManager = actionManager; + this._scheduler.scheduleUpdate(this._actionManager, cc.Scheduler.PRIORITY_SYSTEM, false); + } + }, + getAnimationManager: function getAnimationManager() { + return this._animationManager; + }, + getCollisionManager: function getCollisionManager() { + return this._collisionManager; + }, + getPhysicsManager: function getPhysicsManager() { + return this._physicsManager; + }, + getPhysics3DManager: function getPhysics3DManager() { + return this._physics3DManager; + }, + startAnimation: function startAnimation() { + cc.game.resume(); + }, + stopAnimation: function stopAnimation() { + cc.game.pause(); + }, + _resetDeltaTime: function _resetDeltaTime() { + this._lastUpdate = performance.now(); + this._deltaTime = 0; + }, + mainLoop: function(now) { + if (this._purgeDirectorInNextLoop) { + this._purgeDirectorInNextLoop = false; + this.purgeDirector(); + } else { + this.calculateDeltaTime(now); + if (!this._paused) { + this.emit(cc.Director.EVENT_BEFORE_UPDATE); + this._compScheduler.startPhase(); + this._compScheduler.updatePhase(this._deltaTime); + this._scheduler.update(this._deltaTime); + this._compScheduler.lateUpdatePhase(this._deltaTime); + this.emit(cc.Director.EVENT_AFTER_UPDATE); + Obj._deferredDestroy(); + } + this.emit(cc.Director.EVENT_BEFORE_DRAW); + renderer.render(this._scene, this._deltaTime); + this.emit(cc.Director.EVENT_AFTER_DRAW); + eventManager.frameUpdateListeners(); + this._totalFrames++; + } + }, + __fastOn: function __fastOn(type, callback, target) { + this.on(type, callback, target); + }, + __fastOff: function __fastOff(type, callback, target) { + this.off(type, callback, target); + } + }; + cc.js.addon(cc.Director.prototype, EventTarget.prototype); + cc.Director.EVENT_PROJECTION_CHANGED = "director_projection_changed"; + cc.Director.EVENT_BEFORE_SCENE_LOADING = "director_before_scene_loading"; + cc.Director.EVENT_BEFORE_SCENE_LAUNCH = "director_before_scene_launch"; + cc.Director.EVENT_AFTER_SCENE_LAUNCH = "director_after_scene_launch"; + cc.Director.EVENT_BEFORE_UPDATE = "director_before_update"; + cc.Director.EVENT_AFTER_UPDATE = "director_after_update"; + cc.Director.EVENT_BEFORE_VISIT = "director_before_draw"; + cc.Director.EVENT_AFTER_VISIT = "director_before_draw"; + cc.Director.EVENT_BEFORE_DRAW = "director_before_draw"; + cc.Director.EVENT_AFTER_DRAW = "director_after_draw"; + cc.Director.PROJECTION_2D = 0; + cc.Director.PROJECTION_3D = 1; + cc.Director.PROJECTION_CUSTOM = 3; + cc.Director.PROJECTION_DEFAULT = cc.Director.PROJECTION_2D; + cc.Director.EVENT_BEFORE_PHYSICS = "director_before_physics"; + cc.Director.EVENT_AFTER_PHYSICS = "director_after_physics"; + cc.director = new cc.Director(); + module.exports = cc.director; + }), { + "./CCGame": 23, + "./CCScheduler": 27, + "./component-scheduler": 86, + "./event-manager": 112, + "./event/event-target": 114, + "./node-activator": 120, + "./platform/CCObject": 127, + "./renderer": 152 + } ], + 23: [ (function(require, module, exports) { + "use strict"; + var EventTarget = require("./event/event-target"); + require("../audio/CCAudioEngine"); + var debug = require("./CCDebug"); + var renderer = require("./renderer/index.js"); + var dynamicAtlasManager = require("../core/renderer/utils/dynamic-atlas/manager"); + var game = { + EVENT_HIDE: "game_on_hide", + EVENT_SHOW: "game_on_show", + EVENT_RESTART: "game_on_restart", + EVENT_GAME_INITED: "game_inited", + EVENT_ENGINE_INITED: "engine_inited", + EVENT_RENDERER_INITED: "engine_inited", + RENDER_TYPE_CANVAS: 0, + RENDER_TYPE_WEBGL: 1, + RENDER_TYPE_OPENGL: 2, + _persistRootNodes: {}, + _paused: true, + _configLoaded: false, + _isCloning: false, + _prepared: false, + _rendererInitialized: false, + _renderContext: null, + _intervalId: null, + _lastTime: null, + _frameTime: null, + frame: null, + container: null, + canvas: null, + renderType: -1, + config: null, + onStart: null, + setFrameRate: function setFrameRate(frameRate) { + var config = this.config; + config.frameRate = frameRate; + this._intervalId && window.cancelAnimFrame(this._intervalId); + this._intervalId = 0; + this._paused = true; + this._setAnimFrame(); + this._runMainLoop(); + }, + getFrameRate: function getFrameRate() { + return this.config.frameRate; + }, + step: function step() { + cc.director.mainLoop(); + }, + pause: function pause() { + if (this._paused) return; + this._paused = true; + cc.audioEngine && cc.audioEngine._break(); + this._intervalId && window.cancelAnimFrame(this._intervalId); + this._intervalId = 0; + }, + resume: function resume() { + if (!this._paused) return; + this._paused = false; + cc.audioEngine && cc.audioEngine._restore(); + cc.director._resetDeltaTime(); + this._runMainLoop(); + }, + isPaused: function isPaused() { + return this._paused; + }, + restart: function restart() { + cc.director.once(cc.Director.EVENT_AFTER_DRAW, (function() { + for (var id in game._persistRootNodes) game.removePersistRootNode(game._persistRootNodes[id]); + cc.director.getScene().destroy(); + cc.Object._deferredDestroy(); + cc.audioEngine && cc.audioEngine.uncacheAll(); + cc.director.reset(); + game.pause(); + cc.assetManager.builtins.init((function() { + game.onStart(); + game.emit(game.EVENT_RESTART); + })); + })); + }, + end: function end() { + close(); + }, + _initEngine: function _initEngine() { + if (this._rendererInitialized) return; + this._initRenderer(); + true; + this._initEvents(); + this.emit(this.EVENT_ENGINE_INITED); + }, + _loadPreviewScript: function _loadPreviewScript(cb) { + false; + cb(); + }, + _prepareFinished: function _prepareFinished(cb) { + var _this = this; + this._initEngine(); + this._setAnimFrame(); + cc.assetManager.builtins.init((function() { + console.log("Cocos Creator SP v" + cc.ENGINE_VERSION); + _this._prepared = true; + _this._runMainLoop(); + _this.emit(_this.EVENT_GAME_INITED); + cb && cb(); + })); + }, + eventTargetOn: EventTarget.prototype.on, + eventTargetOnce: EventTarget.prototype.once, + on: function on(type, callback, target, once) { + this._prepared && type === this.EVENT_ENGINE_INITED || !this._paused && type === this.EVENT_GAME_INITED ? callback.call(target) : this.eventTargetOn(type, callback, target, once); + }, + once: function once(type, callback, target) { + this._prepared && type === this.EVENT_ENGINE_INITED || !this._paused && type === this.EVENT_GAME_INITED ? callback.call(target) : this.eventTargetOnce(type, callback, target); + }, + prepare: function prepare(cb) { + var _this2 = this; + if (this._prepared) { + cb && cb(); + return; + } + this._loadPreviewScript((function() { + _this2._prepareFinished(cb); + })); + }, + run: function run(config, onStart) { + this._initConfig(config); + this.onStart = onStart; + this.prepare(game.onStart && game.onStart.bind(game)); + }, + addPersistRootNode: function addPersistRootNode(node) { + if (!cc.Node.isNode(node) || !node.uuid) { + cc.warnID(3800); + return; + } + var id = node.uuid; + if (!this._persistRootNodes[id]) { + var scene = cc.director._scene; + if (cc.isValid(scene)) if (node.parent) { + if (!(node.parent instanceof cc.Scene)) { + cc.warnID(3801); + return; + } + if (node.parent !== scene) { + cc.warnID(3802); + return; + } + } else node.parent = scene; + this._persistRootNodes[id] = node; + node._persistNode = true; + cc.assetManager._releaseManager._addPersistNodeRef(node); + } + }, + removePersistRootNode: function removePersistRootNode(node) { + var id = node.uuid || ""; + if (node === this._persistRootNodes[id]) { + delete this._persistRootNodes[id]; + node._persistNode = false; + cc.assetManager._releaseManager._removePersistNodeRef(node); + } + }, + isPersistRootNode: function isPersistRootNode(node) { + return node._persistNode; + }, + _setAnimFrame: function _setAnimFrame() { + this._lastTime = performance.now(); + var frameRate = game.config.frameRate; + this._frameTime = 1e3 / frameRate; + cc.director._maxParticleDeltaTime = this._frameTime / 1e3 * 2; + false, false; + var rAF = window.requestAnimationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame; + if (60 !== frameRate && 30 !== frameRate) { + window.requestAnimFrame = rAF ? this._stTimeWithRAF : this._stTime; + window.cancelAnimFrame = this._ctTime; + } else { + window.requestAnimFrame = rAF || this._stTime; + window.cancelAnimFrame = window.cancelAnimationFrame || window.cancelRequestAnimationFrame || window.msCancelRequestAnimationFrame || window.mozCancelRequestAnimationFrame || window.oCancelRequestAnimationFrame || window.webkitCancelRequestAnimationFrame || window.msCancelAnimationFrame || window.mozCancelAnimationFrame || window.webkitCancelAnimationFrame || window.oCancelAnimationFrame || this._ctTime; + } + }, + _stTimeWithRAF: function _stTimeWithRAF(callback) { + var currTime = performance.now(); + var timeToCall = Math.max(0, game._frameTime - (currTime - game._lastTime)); + var id = window.setTimeout((function() { + window.requestAnimationFrame(callback); + }), timeToCall); + game._lastTime = currTime + timeToCall; + return id; + }, + _stTime: function _stTime(callback) { + var currTime = performance.now(); + var timeToCall = Math.max(0, game._frameTime - (currTime - game._lastTime)); + var id = window.setTimeout((function() { + callback(); + }), timeToCall); + game._lastTime = currTime + timeToCall; + return id; + }, + _ctTime: function _ctTime(id) { + window.clearTimeout(id); + }, + _runMainLoop: function _runMainLoop() { + false; + if (!this._prepared) return; + var self = this, _callback, config = self.config, director = cc.director, skip = true, frameRate = config.frameRate; + debug.setDisplayStats(config.showFPS); + _callback = function callback(now) { + if (!self._paused) { + self._intervalId = window.requestAnimFrame(_callback); + if ((true, true) && 30 === frameRate && (skip = !skip)) return; + director.mainLoop(now); + } + }; + self._intervalId = window.requestAnimFrame(_callback); + self._paused = false; + }, + _initConfig: function _initConfig(config) { + "number" !== typeof config.debugMode && (config.debugMode = 0); + config.exposeClassName = !!config.exposeClassName; + "number" !== typeof config.frameRate && (config.frameRate = 60); + var renderMode = config.renderMode; + ("number" !== typeof renderMode || renderMode > 2 || renderMode < 0) && (config.renderMode = 0); + "boolean" !== typeof config.registerSystemEvent && (config.registerSystemEvent = true); + config.showFPS = 1 !== renderMode && !!config.showFPS; + this.collisionMatrix = config.collisionMatrix || []; + this.groupList = config.groupList || []; + debug._resetDebugSetting(config.debugMode); + this.config = config; + this._configLoaded = true; + }, + _determineRenderType: function _determineRenderType() { + var config = this.config, userRenderMode = parseInt(config.renderMode) || 0; + this.renderType = this.RENDER_TYPE_CANVAS; + var supportRender = false; + if (0 === userRenderMode) { + if (cc.sys.capabilities["opengl"]) { + this.renderType = this.RENDER_TYPE_WEBGL; + supportRender = true; + } else if (cc.sys.capabilities["canvas"]) { + this.renderType = this.RENDER_TYPE_CANVAS; + supportRender = true; + } + } else if (1 === userRenderMode && cc.sys.capabilities["canvas"]) { + this.renderType = this.RENDER_TYPE_CANVAS; + supportRender = true; + } else if (2 === userRenderMode && cc.sys.capabilities["opengl"]) { + this.renderType = this.RENDER_TYPE_WEBGL; + supportRender = true; + } + if (!supportRender) throw new Error(debug.getError(3820, userRenderMode)); + }, + _initRenderer: function _initRenderer() { + if (this._rendererInitialized) return; + var el = this.config.id, width, height, localCanvas, localContainer; + false, false; + var addClass = function addClass(element, name) { + var hasClass = (" " + element.className + " ").indexOf(" " + name + " ") > -1; + if (!hasClass) { + element.className && (element.className += " "); + element.className += name; + } + }; + var element = el instanceof HTMLElement ? el : document.querySelector(el) || document.querySelector("#" + el); + if ("CANVAS" === element.tagName) { + width = element.width; + height = element.height; + this.canvas = localCanvas = element; + this.container = localContainer = document.createElement("DIV"); + localCanvas.parentNode && localCanvas.parentNode.insertBefore(localContainer, localCanvas); + } else { + "DIV" !== element.tagName && cc.warnID(3819); + width = element.clientWidth; + height = element.clientHeight; + this.canvas = localCanvas = document.createElement("CANVAS"); + this.container = localContainer = document.createElement("DIV"); + element.appendChild(localContainer); + } + localContainer.setAttribute("id", "Cocos2dGameContainer"); + localContainer.appendChild(localCanvas); + this.frame = localContainer.parentNode === document.body ? document.documentElement : localContainer.parentNode; + addClass(localCanvas, "gameCanvas"); + localCanvas.setAttribute("width", width || 480); + localCanvas.setAttribute("height", height || 320); + localCanvas.setAttribute("tabindex", 99); + this._determineRenderType(); + if (this.renderType === this.RENDER_TYPE_WEBGL) { + var opts = { + stencil: true, + antialias: cc.macro.ENABLE_WEBGL_ANTIALIAS, + alpha: cc.macro.ENABLE_TRANSPARENT_CANVAS + }; + renderer.initWebGL(localCanvas, opts); + this._renderContext = renderer.device._gl; + !cc.macro.CLEANUP_IMAGE_CACHE && dynamicAtlasManager && (dynamicAtlasManager.enabled = true); + } + if (!this._renderContext) { + this.renderType = this.RENDER_TYPE_CANVAS; + renderer.initCanvas(localCanvas); + this._renderContext = renderer.device._ctx; + } + this.canvas.oncontextmenu = function() { + if (!cc._isContextMenuEnable) return false; + }; + this._rendererInitialized = true; + }, + _initEvents: function _initEvents() { + var win = window, hiddenPropName; + this.config.registerSystemEvent && cc.internal.inputManager.registerSystemEvent(this.canvas); + "undefined" !== typeof document.hidden ? hiddenPropName = "hidden" : "undefined" !== typeof document.mozHidden ? hiddenPropName = "mozHidden" : "undefined" !== typeof document.msHidden ? hiddenPropName = "msHidden" : "undefined" !== typeof document.webkitHidden && (hiddenPropName = "webkitHidden"); + var hidden = false; + function onHidden() { + if (!hidden) { + hidden = true; + game.emit(game.EVENT_HIDE); + } + } + function onShown(arg0, arg1, arg2, arg3, arg4) { + if (hidden) { + hidden = false; + game.emit(game.EVENT_SHOW, arg0, arg1, arg2, arg3, arg4); + } + } + if (hiddenPropName) { + var changeList = [ "visibilitychange", "mozvisibilitychange", "msvisibilitychange", "webkitvisibilitychange", "qbrowserVisibilityChange" ]; + for (var i = 0; i < changeList.length; i++) document.addEventListener(changeList[i], (function(event) { + var visible = document[hiddenPropName]; + visible = visible || event["hidden"]; + visible ? onHidden() : onShown(); + })); + } else { + win.addEventListener("blur", onHidden); + win.addEventListener("focus", onShown); + } + navigator.userAgent.indexOf("MicroMessenger") > -1 && (win.onfocus = onShown); + if ("onpageshow" in window && "onpagehide" in window) { + win.addEventListener("pagehide", onHidden); + win.addEventListener("pageshow", onShown); + document.addEventListener("pagehide", onHidden); + document.addEventListener("pageshow", onShown); + } + this.on(game.EVENT_HIDE, (function() { + game.pause(); + })); + this.on(game.EVENT_SHOW, (function() { + game.resume(); + })); + } + }; + EventTarget.call(game); + cc.js.addon(game, EventTarget.prototype); + cc.game = module.exports = game; + }), { + "../audio/CCAudioEngine": void 0, + "../core/renderer/utils/dynamic-atlas/manager": 154, + "./CCDebug": 21, + "./event/event-target": 114, + "./renderer/index.js": 152 + } ], + 24: [ (function(require, module, exports) { + "use strict"; + var _valueTypes = require("./value-types"); + var BaseNode = require("./utils/base-node"); + var PrefabHelper = require("./utils/prefab-helper"); + var nodeMemPool = require("./utils/trans-pool").NodeMemPool; + var AffineTrans = require("./utils/affine-transform"); + var eventManager = require("./event-manager"); + var macro = require("./platform/CCMacro"); + var js = require("./platform/js"); + var Event = require("./event/event"); + var EventTarget = require("./event/event-target"); + var RenderFlow = require("./renderer/render-flow"); + var Flags = cc.Object.Flags; + var Destroying = Flags.Destroying; + var ERR_INVALID_NUMBER = false; + var ONE_DEGREE = Math.PI / 180; + var ActionManagerExist = !!cc.ActionManager; + var emptyFunc = function emptyFunc() {}; + var _gwpVec3 = new _valueTypes.Vec3(); + var _gwpQuat = new _valueTypes.Quat(); + var _tpVec3a = new _valueTypes.Vec3(); + var _tpVec3b = new _valueTypes.Vec3(); + var _tpQuata = new _valueTypes.Quat(); + var _tpQuatb = new _valueTypes.Quat(); + var _swpVec3 = new _valueTypes.Vec3(); + var _gwsVec3 = new _valueTypes.Vec3(); + var _swsVec3 = new _valueTypes.Vec3(); + var _gwrtVec3a = new _valueTypes.Vec3(); + var _gwrtVec3b = new _valueTypes.Vec3(); + var _gwrtQuata = new _valueTypes.Quat(); + var _gwrtQuatb = new _valueTypes.Quat(); + var _laVec3 = new _valueTypes.Vec3(); + var _laQuat = new _valueTypes.Quat(); + var _urfVec3 = new _valueTypes.Vec3(); + var _urfQuat = new _valueTypes.Quat(); + var _htVec3a = new _valueTypes.Vec3(); + var _htVec3b = new _valueTypes.Vec3(); + var _gwrQuat = new _valueTypes.Quat(); + var _swrQuat = new _valueTypes.Quat(); + var _quata = new _valueTypes.Quat(); + var _mat4_temp = cc.mat4(); + var _vec3_temp = new _valueTypes.Vec3(); + var _cachedArray = new Array(16); + _cachedArray.length = 0; + var POSITION_ON = 1; + var SCALE_ON = 2; + var ROTATION_ON = 4; + var SIZE_ON = 8; + var ANCHOR_ON = 16; + var COLOR_ON = 32; + var BuiltinGroupIndex = cc.Enum({ + DEBUG: 31 + }); + var LocalDirtyFlag = cc.Enum({ + POSITION: 1, + SCALE: 2, + ROTATION: 4, + SKEW: 8, + TRS: 7, + RS: 6, + TRSS: 15, + PHYSICS_POSITION: 16, + PHYSICS_SCALE: 32, + PHYSICS_ROTATION: 64, + PHYSICS_TRS: 112, + PHYSICS_RS: 96, + ALL_POSITION: 17, + ALL_SCALE: 34, + ALL_ROTATION: 68, + ALL_TRS: 119, + ALL: 65535 + }); + var EventType = cc.Enum({ + TOUCH_START: "touchstart", + TOUCH_MOVE: "touchmove", + TOUCH_END: "touchend", + TOUCH_CANCEL: "touchcancel", + MOUSE_DOWN: "mousedown", + MOUSE_MOVE: "mousemove", + MOUSE_ENTER: "mouseenter", + MOUSE_LEAVE: "mouseleave", + MOUSE_UP: "mouseup", + MOUSE_WHEEL: "mousewheel", + POSITION_CHANGED: "position-changed", + ROTATION_CHANGED: "rotation-changed", + SCALE_CHANGED: "scale-changed", + SIZE_CHANGED: "size-changed", + ANCHOR_CHANGED: "anchor-changed", + COLOR_CHANGED: "color-changed", + CHILD_ADDED: "child-added", + CHILD_REMOVED: "child-removed", + CHILD_REORDER: "child-reorder", + GROUP_CHANGED: "group-changed", + SIBLING_ORDER_CHANGED: "sibling-order-changed" + }); + var _touchEvents = [ EventType.TOUCH_START, EventType.TOUCH_MOVE, EventType.TOUCH_END, EventType.TOUCH_CANCEL ]; + var _mouseEvents = [ EventType.MOUSE_DOWN, EventType.MOUSE_ENTER, EventType.MOUSE_MOVE, EventType.MOUSE_LEAVE, EventType.MOUSE_UP, EventType.MOUSE_WHEEL ]; + var _skewNeedWarn = true; + var _skewWarn = function _skewWarn(value, node) { + if (0 !== value) { + var nodePath = ""; + var NodeUtils; + false; + _skewNeedWarn && cc.warn("`cc.Node.skewX/Y` is deprecated since v2.2.1, please use 3D node instead.", nodePath); + true, _skewNeedWarn = false; + } + }; + var _currentHovered = null; + var _touchStartHandler = function _touchStartHandler(touch, event) { + var pos = touch.getLocation(); + var node = this.owner; + if (node._hitTest(pos, this)) { + event.type = EventType.TOUCH_START; + event.touch = touch; + event.bubbles = true; + node.dispatchEvent(event); + return true; + } + return false; + }; + var _touchMoveHandler = function _touchMoveHandler(touch, event) { + var node = this.owner; + event.type = EventType.TOUCH_MOVE; + event.touch = touch; + event.bubbles = true; + node.dispatchEvent(event); + }; + var _touchEndHandler = function _touchEndHandler(touch, event) { + var pos = touch.getLocation(); + var node = this.owner; + node._hitTest(pos, this) ? event.type = EventType.TOUCH_END : event.type = EventType.TOUCH_CANCEL; + event.touch = touch; + event.bubbles = true; + node.dispatchEvent(event); + }; + var _touchCancelHandler = function _touchCancelHandler(touch, event) { + var pos = touch.getLocation(); + var node = this.owner; + event.type = EventType.TOUCH_CANCEL; + event.touch = touch; + event.bubbles = true; + node.dispatchEvent(event); + }; + var _mouseDownHandler = function _mouseDownHandler(event) { + var pos = event.getLocation(); + var node = this.owner; + if (node._hitTest(pos, this)) { + event.type = EventType.MOUSE_DOWN; + event.bubbles = true; + node.dispatchEvent(event); + } + }; + var _mouseMoveHandler = function _mouseMoveHandler(event) { + var pos = event.getLocation(); + var node = this.owner; + var hit = node._hitTest(pos, this); + if (hit) { + if (!this._previousIn) { + if (_currentHovered && _currentHovered._mouseListener) { + event.type = EventType.MOUSE_LEAVE; + _currentHovered.dispatchEvent(event); + _currentHovered._mouseListener._previousIn = false; + } + _currentHovered = this.owner; + event.type = EventType.MOUSE_ENTER; + node.dispatchEvent(event); + this._previousIn = true; + } + event.type = EventType.MOUSE_MOVE; + event.bubbles = true; + node.dispatchEvent(event); + } else { + if (!this._previousIn) return; + event.type = EventType.MOUSE_LEAVE; + node.dispatchEvent(event); + this._previousIn = false; + _currentHovered = null; + } + event.stopPropagation(); + }; + var _mouseUpHandler = function _mouseUpHandler(event) { + var pos = event.getLocation(); + var node = this.owner; + if (node._hitTest(pos, this)) { + event.type = EventType.MOUSE_UP; + event.bubbles = true; + node.dispatchEvent(event); + event.stopPropagation(); + } + }; + var _mouseWheelHandler = function _mouseWheelHandler(event) { + var pos = event.getLocation(); + var node = this.owner; + if (node._hitTest(pos, this)) { + event.type = EventType.MOUSE_WHEEL; + event.bubbles = true; + node.dispatchEvent(event); + event.stopPropagation(); + } + }; + function _searchComponentsInParent(node, comp) { + if (comp) { + var index = 0; + var list = null; + for (var curr = node; curr && cc.Node.isNode(curr); curr = curr._parent, ++index) if (curr.getComponent(comp)) { + var next = { + index: index, + node: curr + }; + list ? list.push(next) : list = [ next ]; + } + return list; + } + return null; + } + function _checkListeners(node, events) { + if (!(node._objFlags & Destroying)) { + if (node._bubblingListeners) for (var i = 0, l = events.length; i < l; ++i) if (node._bubblingListeners.hasEventListener(events[i])) return true; + if (node._capturingListeners) for (var _i = 0, _l = events.length; _i < _l; ++_i) if (node._capturingListeners.hasEventListener(events[_i])) return true; + return false; + } + return true; + } + function _doDispatchEvent(owner, event) { + var target, i; + event.target = owner; + _cachedArray.length = 0; + owner._getCapturingTargets(event.type, _cachedArray); + event.eventPhase = 1; + for (i = _cachedArray.length - 1; i >= 0; --i) { + target = _cachedArray[i]; + if (target._capturingListeners) { + event.currentTarget = target; + target._capturingListeners.emit(event.type, event, _cachedArray); + if (event._propagationStopped) { + _cachedArray.length = 0; + return; + } + } + } + _cachedArray.length = 0; + event.eventPhase = 2; + event.currentTarget = owner; + owner._capturingListeners && owner._capturingListeners.emit(event.type, event); + !event._propagationImmediateStopped && owner._bubblingListeners && owner._bubblingListeners.emit(event.type, event); + if (!event._propagationStopped && event.bubbles) { + owner._getBubblingTargets(event.type, _cachedArray); + event.eventPhase = 3; + for (i = 0; i < _cachedArray.length; ++i) { + target = _cachedArray[i]; + if (target._bubblingListeners) { + event.currentTarget = target; + target._bubblingListeners.emit(event.type, event); + if (event._propagationStopped) { + _cachedArray.length = 0; + return; + } + } + } + } + _cachedArray.length = 0; + } + function _getActualGroupIndex(node) { + var groupIndex = node.groupIndex; + 0 === groupIndex && node.parent && (groupIndex = _getActualGroupIndex(node.parent)); + return groupIndex; + } + function _updateCullingMask(node) { + var index = _getActualGroupIndex(node); + node._cullingMask = 1 << index; + false; + for (var i = 0; i < node._children.length; i++) _updateCullingMask(node._children[i]); + } + function updateLocalMatrix3D() { + if (this._localMatDirty & LocalDirtyFlag.TRSS) { + var t = this._matrix; + var tm = t.m; + _valueTypes.Trs.toMat4(t, this._trs); + if (this._skewX || this._skewY) { + var a = tm[0], b = tm[1], c = tm[4], d = tm[5]; + var skx = Math.tan(this._skewX * ONE_DEGREE); + var sky = Math.tan(this._skewY * ONE_DEGREE); + Infinity === skx && (skx = 99999999); + Infinity === sky && (sky = 99999999); + tm[0] = a + c * sky; + tm[1] = b + d * sky; + tm[4] = c + a * skx; + tm[5] = d + b * skx; + } + this._localMatDirty &= ~LocalDirtyFlag.TRSS; + this._worldMatDirty = true; + } + } + function updateLocalMatrix2D() { + var dirtyFlag = this._localMatDirty; + if (!(dirtyFlag & LocalDirtyFlag.TRSS)) return; + var t = this._matrix; + var tm = t.m; + var trs = this._trs; + if (dirtyFlag & (LocalDirtyFlag.RS | LocalDirtyFlag.SKEW)) { + var rotation = -this._eulerAngles.z; + var hasSkew = this._skewX || this._skewY; + var sx = trs[7], sy = trs[8]; + if (rotation || hasSkew) { + var a = 1, b = 0, c = 0, d = 1; + if (rotation) { + var rotationRadians = rotation * ONE_DEGREE; + c = Math.sin(rotationRadians); + d = Math.cos(rotationRadians); + a = d; + b = -c; + } + tm[0] = a *= sx; + tm[1] = b *= sx; + tm[4] = c *= sy; + tm[5] = d *= sy; + if (hasSkew) { + var _a = tm[0], _b = tm[1], _c = tm[4], _d = tm[5]; + var skx = Math.tan(this._skewX * ONE_DEGREE); + var sky = Math.tan(this._skewY * ONE_DEGREE); + Infinity === skx && (skx = 99999999); + Infinity === sky && (sky = 99999999); + tm[0] = _a + _c * sky; + tm[1] = _b + _d * sky; + tm[4] = _c + _a * skx; + tm[5] = _d + _b * skx; + } + } else { + tm[0] = sx; + tm[1] = 0; + tm[4] = 0; + tm[5] = sy; + } + } + tm[12] = trs[0]; + tm[13] = trs[1]; + this._localMatDirty &= ~LocalDirtyFlag.TRSS; + this._worldMatDirty = true; + } + function calculWorldMatrix3D() { + this._localMatDirty & LocalDirtyFlag.TRSS && this._updateLocalMatrix(); + if (this._parent) { + var parentMat = this._parent._worldMatrix; + _valueTypes.Mat4.mul(this._worldMatrix, parentMat, this._matrix); + } else _valueTypes.Mat4.copy(this._worldMatrix, this._matrix); + this._worldMatDirty = false; + } + function calculWorldMatrix2D() { + this._localMatDirty & LocalDirtyFlag.TRSS && this._updateLocalMatrix(); + var parent = this._parent; + parent ? this._mulMat(this._worldMatrix, parent._worldMatrix, this._matrix) : _valueTypes.Mat4.copy(this._worldMatrix, this._matrix); + this._worldMatDirty = false; + } + function mulMat2D(out, a, b) { + var am = a.m, bm = b.m, outm = out.m; + var aa = am[0], ab = am[1], ac = am[4], ad = am[5], atx = am[12], aty = am[13]; + var ba = bm[0], bb = bm[1], bc = bm[4], bd = bm[5], btx = bm[12], bty = bm[13]; + if (0 !== ab || 0 !== ac) { + outm[0] = ba * aa + bb * ac; + outm[1] = ba * ab + bb * ad; + outm[4] = bc * aa + bd * ac; + outm[5] = bc * ab + bd * ad; + outm[12] = aa * btx + ac * bty + atx; + outm[13] = ab * btx + ad * bty + aty; + } else { + outm[0] = ba * aa; + outm[1] = bb * ad; + outm[4] = bc * aa; + outm[5] = bd * ad; + outm[12] = aa * btx + atx; + outm[13] = ad * bty + aty; + } + } + var mulMat3D = _valueTypes.Mat4.mul; + var NodeDefines = { + name: "cc.Node", + extends: BaseNode, + properties: { + _opacity: 255, + _color: cc.Color.WHITE, + _contentSize: cc.Size, + _anchorPoint: cc.v2(.5, .5), + _position: void 0, + _scale: void 0, + _trs: null, + _eulerAngles: cc.Vec3, + _skewX: 0, + _skewY: 0, + _zIndex: { + default: void 0, + type: cc.Integer + }, + _localZOrder: { + default: 0, + serializable: false + }, + _is3DNode: false, + _groupIndex: { + default: 0, + formerlySerializedAs: "groupIndex" + }, + groupIndex: { + get: function get() { + return this._groupIndex; + }, + set: function set(value) { + this._groupIndex = value; + _updateCullingMask(this); + this.emit(EventType.GROUP_CHANGED, this); + } + }, + group: { + get: function get() { + return cc.game.groupList[this.groupIndex] || ""; + }, + set: function set(value) { + this.groupIndex = cc.game.groupList.indexOf(value); + } + }, + x: { + get: function get() { + return this._trs[0]; + }, + set: function set(value) { + var trs = this._trs; + if (value !== trs[0]) { + true; + var oldValue; + false; + trs[0] = value; + this.setLocalDirty(LocalDirtyFlag.ALL_POSITION); + if (this._eventMask & POSITION_ON) { + false; + this.emit(EventType.POSITION_CHANGED); + } + } + } + }, + y: { + get: function get() { + return this._trs[1]; + }, + set: function set(value) { + var trs = this._trs; + if (value !== trs[1]) { + true; + var oldValue; + false; + trs[1] = value; + this.setLocalDirty(LocalDirtyFlag.ALL_POSITION); + if (this._eventMask & POSITION_ON) { + false; + this.emit(EventType.POSITION_CHANGED); + } + } + } + }, + z: { + get: function get() { + return this._trs[2]; + }, + set: function set(value) { + var trs = this._trs; + if (value !== trs[2]) { + true; + var oldValue; + false; + trs[2] = value; + this.setLocalDirty(LocalDirtyFlag.ALL_POSITION); + true, this._renderFlag |= RenderFlow.FLAG_WORLD_TRANSFORM; + if (this._eventMask & POSITION_ON) { + false; + this.emit(EventType.POSITION_CHANGED); + } + } + } + }, + rotation: { + get: function get() { + true; + cc.warn("`cc.Node.rotation` is deprecated since v2.1.0, please use `-angle` instead. (`this.node.rotation` -> `-this.node.angle`)"); + return -this.angle; + }, + set: function set(value) { + true; + cc.warn("`cc.Node.rotation` is deprecated since v2.1.0, please set `-angle` instead. (`this.node.rotation = x` -> `this.node.angle = -x`)"); + this.angle = -value; + } + }, + angle: { + get: function get() { + return this._eulerAngles.z; + }, + set: function set(value) { + _valueTypes.Vec3.set(this._eulerAngles, 0, 0, value); + _valueTypes.Trs.fromAngleZ(this._trs, value); + this.setLocalDirty(LocalDirtyFlag.ALL_ROTATION); + this._eventMask & ROTATION_ON && this.emit(EventType.ROTATION_CHANGED); + } + }, + rotationX: { + get: function get() { + true; + cc.warn("`cc.Node.rotationX` is deprecated since v2.1.0, please use `eulerAngles.x` instead. (`this.node.rotationX` -> `this.node.eulerAngles.x`)"); + return this._eulerAngles.x; + }, + set: function set(value) { + true; + cc.warn("`cc.Node.rotationX` is deprecated since v2.1.0, please set `eulerAngles` instead. (`this.node.rotationX = x` -> `this.node.is3DNode = true; this.node.eulerAngles = cc.v3(x, 0, 0)`"); + if (this._eulerAngles.x !== value) { + this._eulerAngles.x = value; + this._eulerAngles.x === this._eulerAngles.y ? _valueTypes.Trs.fromAngleZ(this._trs, -value) : _valueTypes.Trs.fromEulerNumber(this._trs, value, this._eulerAngles.y, 0); + this.setLocalDirty(LocalDirtyFlag.ALL_ROTATION); + this._eventMask & ROTATION_ON && this.emit(EventType.ROTATION_CHANGED); + } + } + }, + rotationY: { + get: function get() { + true; + cc.warn("`cc.Node.rotationY` is deprecated since v2.1.0, please use `eulerAngles.y` instead. (`this.node.rotationY` -> `this.node.eulerAngles.y`)"); + return this._eulerAngles.y; + }, + set: function set(value) { + true; + cc.warn("`cc.Node.rotationY` is deprecated since v2.1.0, please set `eulerAngles` instead. (`this.node.rotationY = y` -> `this.node.is3DNode = true; this.node.eulerAngles = cc.v3(0, y, 0)`"); + if (this._eulerAngles.y !== value) { + this._eulerAngles.y = value; + this._eulerAngles.x === this._eulerAngles.y ? _valueTypes.Trs.fromAngleZ(this._trs, -value) : _valueTypes.Trs.fromEulerNumber(this._trs, this._eulerAngles.x, value, 0); + this.setLocalDirty(LocalDirtyFlag.ALL_ROTATION); + this._eventMask & ROTATION_ON && this.emit(EventType.ROTATION_CHANGED); + } + } + }, + eulerAngles: { + get: function get() { + false; + return _valueTypes.Trs.toEuler(this._eulerAngles, this._trs); + }, + set: function set(v) { + false; + _valueTypes.Trs.fromEuler(this._trs, v); + this.setLocalDirty(LocalDirtyFlag.ALL_ROTATION); + true, this._renderFlag |= RenderFlow.FLAG_TRANSFORM; + this._eventMask & ROTATION_ON && this.emit(EventType.ROTATION_CHANGED); + } + }, + quat: { + get: function get() { + var trs = this._trs; + return new _valueTypes.Quat(trs[3], trs[4], trs[5], trs[6]); + }, + set: function set(v) { + this.setRotation(v); + } + }, + scale: { + get: function get() { + return this._trs[7]; + }, + set: function set(v) { + this.setScale(v); + } + }, + scaleX: { + get: function get() { + return this._trs[7]; + }, + set: function set(value) { + if (this._trs[7] !== value) { + this._trs[7] = value; + this.setLocalDirty(LocalDirtyFlag.ALL_SCALE); + this._eventMask & SCALE_ON && this.emit(EventType.SCALE_CHANGED); + } + } + }, + scaleY: { + get: function get() { + return this._trs[8]; + }, + set: function set(value) { + if (this._trs[8] !== value) { + this._trs[8] = value; + this.setLocalDirty(LocalDirtyFlag.ALL_SCALE); + this._eventMask & SCALE_ON && this.emit(EventType.SCALE_CHANGED); + } + } + }, + scaleZ: { + get: function get() { + return this._trs[9]; + }, + set: function set(value) { + if (this._trs[9] !== value) { + this._trs[9] = value; + this.setLocalDirty(LocalDirtyFlag.ALL_SCALE); + true, this._renderFlag |= RenderFlow.FLAG_TRANSFORM; + this._eventMask & SCALE_ON && this.emit(EventType.SCALE_CHANGED); + } + } + }, + skewX: { + get: function get() { + return this._skewX; + }, + set: function set(value) { + _skewWarn(value, this); + this._skewX = value; + this.setLocalDirty(LocalDirtyFlag.SKEW); + false; + } + }, + skewY: { + get: function get() { + return this._skewY; + }, + set: function set(value) { + _skewWarn(value, this); + this._skewY = value; + this.setLocalDirty(LocalDirtyFlag.SKEW); + false; + } + }, + opacity: { + get: function get() { + return this._opacity; + }, + set: function set(value) { + value = cc.misc.clampf(value, 0, 255); + if (this._opacity !== value) { + this._opacity = value; + false; + this._renderFlag |= RenderFlow.FLAG_OPACITY_COLOR; + } + }, + range: [ 0, 255 ] + }, + color: { + get: function get() { + return this._color.clone(); + }, + set: function set(value) { + if (!this._color.equals(value)) { + this._color.set(value); + false; + this._renderFlag |= RenderFlow.FLAG_COLOR; + this._eventMask & COLOR_ON && this.emit(EventType.COLOR_CHANGED, value); + } + } + }, + anchorX: { + get: function get() { + return this._anchorPoint.x; + }, + set: function set(value) { + var anchorPoint = this._anchorPoint; + if (anchorPoint.x !== value) { + anchorPoint.x = value; + this._eventMask & ANCHOR_ON && this.emit(EventType.ANCHOR_CHANGED); + } + } + }, + anchorY: { + get: function get() { + return this._anchorPoint.y; + }, + set: function set(value) { + var anchorPoint = this._anchorPoint; + if (anchorPoint.y !== value) { + anchorPoint.y = value; + this._eventMask & ANCHOR_ON && this.emit(EventType.ANCHOR_CHANGED); + } + } + }, + width: { + get: function get() { + return this._contentSize.width; + }, + set: function set(value) { + if (value !== this._contentSize.width) { + var clone; + false; + this._contentSize.width = value; + if (this._eventMask & SIZE_ON) { + false; + this.emit(EventType.SIZE_CHANGED); + } + } + } + }, + height: { + get: function get() { + return this._contentSize.height; + }, + set: function set(value) { + if (value !== this._contentSize.height) { + var clone; + false; + this._contentSize.height = value; + if (this._eventMask & SIZE_ON) { + false; + this.emit(EventType.SIZE_CHANGED); + } + } + } + }, + zIndex: { + get: function get() { + return this._localZOrder >> 16; + }, + set: function set(value) { + if (value > macro.MAX_ZINDEX) { + cc.warnID(1636); + value = macro.MAX_ZINDEX; + } else if (value < macro.MIN_ZINDEX) { + cc.warnID(1637); + value = macro.MIN_ZINDEX; + } + if (this.zIndex !== value) { + this._localZOrder = 65535 & this._localZOrder | value << 16; + this.emit(EventType.SIBLING_ORDER_CHANGED); + this._onSiblingIndexChanged(); + } + } + }, + is3DNode: { + get: function get() { + return this._is3DNode; + }, + set: function set(v) { + this._is3DNode = v; + this._update3DFunction(); + } + }, + up: { + get: function get() { + var _up = _valueTypes.Vec3.transformQuat(_urfVec3, _valueTypes.Vec3.UP, this.getWorldRotation(_urfQuat)); + return _up.clone(); + } + }, + right: { + get: function get() { + var _right = _valueTypes.Vec3.transformQuat(_urfVec3, _valueTypes.Vec3.RIGHT, this.getWorldRotation(_urfQuat)); + return _right.clone(); + } + }, + forward: { + get: function get() { + var _forward = _valueTypes.Vec3.transformQuat(_urfVec3, _valueTypes.Vec3.FORWARD, this.getWorldRotation(_urfQuat)); + return _forward.clone(); + } + } + }, + ctor: function ctor() { + this._reorderChildDirty = false; + this._widget = null; + this._renderComponent = null; + this._capturingListeners = null; + this._bubblingListeners = null; + this._touchListener = null; + this._mouseListener = null; + this._initDataFromPool(); + this._eventMask = 0; + this._cullingMask = 1; + this._childArrivalOrder = 1; + false; + this._renderFlag = RenderFlow.FLAG_TRANSFORM | RenderFlow.FLAG_OPACITY_COLOR; + }, + statics: { + EventType: EventType, + _LocalDirtyFlag: LocalDirtyFlag, + isNode: function isNode(obj) { + return obj instanceof Node && (obj.constructor === Node || !(obj instanceof cc.Scene)); + }, + BuiltinGroupIndex: BuiltinGroupIndex + }, + _onSiblingIndexChanged: function _onSiblingIndexChanged() { + this._parent && this._parent._delaySort(); + }, + _onPreDestroy: function _onPreDestroy() { + var destroyByParent = this._onPreDestroyBase(); + ActionManagerExist && cc.director.getActionManager().removeAllActionsFromTarget(this); + _currentHovered === this && (_currentHovered = null); + this._bubblingListeners && this._bubblingListeners.clear(); + this._capturingListeners && this._capturingListeners.clear(); + if (this._touchListener || this._mouseListener) { + eventManager.removeListeners(this); + if (this._touchListener) { + this._touchListener.owner = null; + this._touchListener.mask = null; + this._touchListener = null; + } + if (this._mouseListener) { + this._mouseListener.owner = null; + this._mouseListener.mask = null; + this._mouseListener = null; + } + } + false; + this._backDataIntoPool(); + this._reorderChildDirty && cc.director.__fastOff(cc.Director.EVENT_AFTER_UPDATE, this.sortAllChildren, this); + destroyByParent || false; + }, + _onPostActivated: function _onPostActivated(active) { + var actionManager = ActionManagerExist ? cc.director.getActionManager() : null; + if (active) { + this._renderFlag |= RenderFlow.FLAG_WORLD_TRANSFORM; + actionManager && actionManager.resumeTarget(this); + eventManager.resumeTarget(this); + this._checkListenerMask(); + } else { + actionManager && actionManager.pauseTarget(this); + eventManager.pauseTarget(this); + } + }, + _onHierarchyChanged: function _onHierarchyChanged(oldParent) { + this._updateOrderOfArrival(); + _updateCullingMask(this); + this._parent && this._parent._delaySort(); + this._renderFlag |= RenderFlow.FLAG_WORLD_TRANSFORM; + this._onHierarchyChangedBase(oldParent); + cc._widgetManager && (cc._widgetManager._nodesOrderDirty = true); + oldParent && this._activeInHierarchy && this._checkListenerMask(); + false; + }, + _update3DFunction: function _update3DFunction() { + if (this._is3DNode) { + this._updateLocalMatrix = updateLocalMatrix3D; + this._calculWorldMatrix = calculWorldMatrix3D; + this._mulMat = mulMat3D; + } else { + this._updateLocalMatrix = updateLocalMatrix2D; + this._calculWorldMatrix = calculWorldMatrix2D; + this._mulMat = mulMat2D; + } + this._renderComponent && this._renderComponent._on3DNodeChanged && this._renderComponent._on3DNodeChanged(); + this._renderFlag |= RenderFlow.FLAG_TRANSFORM; + this._localMatDirty = LocalDirtyFlag.ALL; + false; + }, + _initDataFromPool: function _initDataFromPool() { + if (!this._spaceInfo) { + false, false; + this._spaceInfo = nodeMemPool.pop(); + } + var spaceInfo = this._spaceInfo; + this._matrix = cc.mat4(spaceInfo.localMat); + _valueTypes.Mat4.identity(this._matrix); + this._worldMatrix = cc.mat4(spaceInfo.worldMat); + _valueTypes.Mat4.identity(this._worldMatrix); + this._localMatDirty = LocalDirtyFlag.ALL; + this._worldMatDirty = true; + var trs = this._trs = spaceInfo.trs; + trs[0] = 0; + trs[1] = 0; + trs[2] = 0; + trs[3] = 0; + trs[4] = 0; + trs[5] = 0; + trs[6] = 1; + trs[7] = 1; + trs[8] = 1; + trs[9] = 1; + }, + _backDataIntoPool: function _backDataIntoPool() { + if (!(false, false)) { + nodeMemPool.push(this._spaceInfo); + this._matrix = null; + this._worldMatrix = null; + this._trs = null; + this._spaceInfo = null; + } + }, + _toEuler: function _toEuler() { + if (this.is3DNode) _valueTypes.Trs.toEuler(this._eulerAngles, this._trs); else { + var z = Math.asin(this._trs[5]) / ONE_DEGREE * 2; + _valueTypes.Vec3.set(this._eulerAngles, 0, 0, z); + } + }, + _fromEuler: function _fromEuler() { + this.is3DNode ? _valueTypes.Trs.fromEuler(this._trs, this._eulerAngles) : _valueTypes.Trs.fromAngleZ(this._trs, this._eulerAngles.z); + }, + _initProperties: function _initProperties() { + this._is3DNode && this._update3DFunction(); + var trs = this._trs; + if (trs) { + var desTrs = trs; + trs = this._trs = this._spaceInfo.trs; + 11 === desTrs.length ? trs.set(desTrs.subarray(1)) : trs.set(desTrs); + } else trs = this._trs = this._spaceInfo.trs; + var NodeUtils; + false; + this._fromEuler(); + false; + }, + _onBatchCreated: function _onBatchCreated(dontSyncChildPrefab) { + this._initProperties(); + this._cullingMask = 1 << _getActualGroupIndex(this); + false; + if (!this._activeInHierarchy) { + ActionManagerExist && cc.director.getActionManager().pauseTarget(this); + eventManager.pauseTarget(this); + } + var children = this._children; + for (var i = 0, len = children.length; i < len; i++) { + var child = children[i]; + if (!dontSyncChildPrefab) { + var prefabInfo = child._prefab; + prefabInfo && prefabInfo.sync && prefabInfo.root === child && PrefabHelper.syncWithPrefab(child); + child._updateOrderOfArrival(); + } + child._onBatchCreated(dontSyncChildPrefab); + } + children.length > 0 && (this._renderFlag |= RenderFlow.FLAG_CHILDREN); + false; + }, + _checkListenerMask: function _checkListenerMask() { + if (this._touchListener) { + var mask = this._touchListener.mask = _searchComponentsInParent(this, cc.Mask); + this._mouseListener && (this._mouseListener.mask = mask); + } else this._mouseListener && (this._mouseListener.mask = _searchComponentsInParent(this, cc.Mask)); + }, + _checknSetupSysEvent: function _checknSetupSysEvent(type) { + var newAdded = false; + var forDispatch = false; + if (-1 !== _touchEvents.indexOf(type)) { + if (!this._touchListener) { + this._touchListener = cc.EventListener.create({ + event: cc.EventListener.TOUCH_ONE_BY_ONE, + swallowTouches: true, + owner: this, + mask: _searchComponentsInParent(this, cc.Mask), + onTouchBegan: _touchStartHandler, + onTouchMoved: _touchMoveHandler, + onTouchEnded: _touchEndHandler, + onTouchCancelled: _touchCancelHandler + }); + eventManager.addListener(this._touchListener, this); + newAdded = true; + } + forDispatch = true; + } else if (-1 !== _mouseEvents.indexOf(type)) { + if (!this._mouseListener) { + this._mouseListener = cc.EventListener.create({ + event: cc.EventListener.MOUSE, + _previousIn: false, + owner: this, + mask: _searchComponentsInParent(this, cc.Mask), + onMouseDown: _mouseDownHandler, + onMouseMove: _mouseMoveHandler, + onMouseUp: _mouseUpHandler, + onMouseScroll: _mouseWheelHandler + }); + eventManager.addListener(this._mouseListener, this); + newAdded = true; + } + forDispatch = true; + } + newAdded && !this._activeInHierarchy && cc.director.getScheduler().schedule((function() { + this._activeInHierarchy || eventManager.pauseTarget(this); + }), this, 0, 0, 0, false); + return forDispatch; + }, + on: function on(type, callback, target, useCapture) { + var forDispatch = this._checknSetupSysEvent(type); + if (forDispatch) return this._onDispatch(type, callback, target, useCapture); + switch (type) { + case EventType.POSITION_CHANGED: + this._eventMask |= POSITION_ON; + break; + + case EventType.SCALE_CHANGED: + this._eventMask |= SCALE_ON; + break; + + case EventType.ROTATION_CHANGED: + this._eventMask |= ROTATION_ON; + break; + + case EventType.SIZE_CHANGED: + this._eventMask |= SIZE_ON; + break; + + case EventType.ANCHOR_CHANGED: + this._eventMask |= ANCHOR_ON; + break; + + case EventType.COLOR_CHANGED: + this._eventMask |= COLOR_ON; + } + this._bubblingListeners || (this._bubblingListeners = new EventTarget()); + return this._bubblingListeners.on(type, callback, target); + }, + once: function once(type, callback, target, useCapture) { + var _this = this; + var forDispatch = this._checknSetupSysEvent(type); + var listeners = null; + listeners = forDispatch && useCapture ? this._capturingListeners = this._capturingListeners || new EventTarget() : this._bubblingListeners = this._bubblingListeners || new EventTarget(); + listeners.once(type, callback, target); + listeners.once(type, (function() { + _this.off(type, callback, target); + }), void 0); + }, + _onDispatch: function _onDispatch(type, callback, target, useCapture) { + if ("boolean" === typeof target) { + useCapture = target; + target = void 0; + } else useCapture = !!useCapture; + if (!callback) { + cc.errorID(6800); + return; + } + var listeners = null; + listeners = useCapture ? this._capturingListeners = this._capturingListeners || new EventTarget() : this._bubblingListeners = this._bubblingListeners || new EventTarget(); + if (!listeners.hasEventListener(type, callback, target)) { + listeners.on(type, callback, target); + target && target.__eventTargets && target.__eventTargets.push(this); + } + return callback; + }, + off: function off(type, callback, target, useCapture) { + var touchEvent = -1 !== _touchEvents.indexOf(type); + var mouseEvent = !touchEvent && -1 !== _mouseEvents.indexOf(type); + if (touchEvent || mouseEvent) { + this._offDispatch(type, callback, target, useCapture); + if (touchEvent) { + if (this._touchListener && !_checkListeners(this, _touchEvents)) { + eventManager.removeListener(this._touchListener); + this._touchListener = null; + } + } else if (mouseEvent && this._mouseListener && !_checkListeners(this, _mouseEvents)) { + eventManager.removeListener(this._mouseListener); + this._mouseListener = null; + } + } else if (this._bubblingListeners) { + this._bubblingListeners.off(type, callback, target); + var hasListeners = this._bubblingListeners.hasEventListener(type); + if (!hasListeners) switch (type) { + case EventType.POSITION_CHANGED: + this._eventMask &= ~POSITION_ON; + break; + + case EventType.SCALE_CHANGED: + this._eventMask &= ~SCALE_ON; + break; + + case EventType.ROTATION_CHANGED: + this._eventMask &= ~ROTATION_ON; + break; + + case EventType.SIZE_CHANGED: + this._eventMask &= ~SIZE_ON; + break; + + case EventType.ANCHOR_CHANGED: + this._eventMask &= ~ANCHOR_ON; + break; + + case EventType.COLOR_CHANGED: + this._eventMask &= ~COLOR_ON; + } + } + }, + _offDispatch: function _offDispatch(type, callback, target, useCapture) { + if ("boolean" === typeof target) { + useCapture = target; + target = void 0; + } else useCapture = !!useCapture; + if (callback) { + var listeners = useCapture ? this._capturingListeners : this._bubblingListeners; + if (listeners) { + listeners.off(type, callback, target); + target && target.__eventTargets && js.array.fastRemove(target.__eventTargets, this); + } + } else { + this._capturingListeners && this._capturingListeners.removeAll(type); + this._bubblingListeners && this._bubblingListeners.removeAll(type); + } + }, + targetOff: function targetOff(target) { + var listeners = this._bubblingListeners; + if (listeners) { + listeners.targetOff(target); + this._eventMask & POSITION_ON && !listeners.hasEventListener(EventType.POSITION_CHANGED) && (this._eventMask &= ~POSITION_ON); + this._eventMask & SCALE_ON && !listeners.hasEventListener(EventType.SCALE_CHANGED) && (this._eventMask &= ~SCALE_ON); + this._eventMask & ROTATION_ON && !listeners.hasEventListener(EventType.ROTATION_CHANGED) && (this._eventMask &= ~ROTATION_ON); + this._eventMask & SIZE_ON && !listeners.hasEventListener(EventType.SIZE_CHANGED) && (this._eventMask &= ~SIZE_ON); + this._eventMask & ANCHOR_ON && !listeners.hasEventListener(EventType.ANCHOR_CHANGED) && (this._eventMask &= ~ANCHOR_ON); + this._eventMask & COLOR_ON && !listeners.hasEventListener(EventType.COLOR_CHANGED) && (this._eventMask &= ~COLOR_ON); + } + this._capturingListeners && this._capturingListeners.targetOff(target); + target && target.__eventTargets && js.array.fastRemove(target.__eventTargets, this); + if (this._touchListener && !_checkListeners(this, _touchEvents)) { + eventManager.removeListener(this._touchListener); + this._touchListener = null; + } + if (this._mouseListener && !_checkListeners(this, _mouseEvents)) { + eventManager.removeListener(this._mouseListener); + this._mouseListener = null; + } + }, + hasEventListener: function hasEventListener(type) { + var has = false; + this._bubblingListeners && (has = this._bubblingListeners.hasEventListener(type)); + !has && this._capturingListeners && (has = this._capturingListeners.hasEventListener(type)); + return has; + }, + emit: function emit(type, arg1, arg2, arg3, arg4, arg5) { + this._bubblingListeners && this._bubblingListeners.emit(type, arg1, arg2, arg3, arg4, arg5); + }, + dispatchEvent: function dispatchEvent(event) { + _doDispatchEvent(this, event); + _cachedArray.length = 0; + }, + pauseSystemEvents: function pauseSystemEvents(recursive) { + eventManager.pauseTarget(this, recursive); + }, + resumeSystemEvents: function resumeSystemEvents(recursive) { + eventManager.resumeTarget(this, recursive); + }, + _hitTest: function _hitTest(point, listener) { + var w = this._contentSize.width, h = this._contentSize.height, cameraPt = _htVec3a, testPt = _htVec3b; + var camera = cc.Camera.findCamera(this); + camera ? camera.getScreenToWorldPoint(point, cameraPt) : cameraPt.set(point); + this._updateWorldMatrix(); + if (!_valueTypes.Mat4.invert(_mat4_temp, this._worldMatrix)) return false; + _valueTypes.Vec2.transformMat4(testPt, cameraPt, _mat4_temp); + testPt.x += this._anchorPoint.x * w; + testPt.y += this._anchorPoint.y * h; + var hit = false; + if (testPt.x >= 0 && testPt.y >= 0 && testPt.x <= w && testPt.y <= h) { + hit = true; + if (listener && listener.mask) { + var mask = listener.mask; + var parent = this; + var length = mask ? mask.length : 0; + for (var i = 0, j = 0; parent && j < length; ++i, parent = parent.parent) { + var temp = mask[j]; + if (i === temp.index) { + if (parent !== temp.node) { + mask.length = j; + break; + } + var comp = parent.getComponent(cc.Mask); + if (comp && comp._enabled && !comp._hitTest(cameraPt)) { + hit = false; + break; + } + j++; + } else if (i > temp.index) { + mask.length = j; + break; + } + } + } + } + return hit; + }, + _getCapturingTargets: function _getCapturingTargets(type, array) { + var parent = this.parent; + while (parent) { + parent._capturingListeners && parent._capturingListeners.hasEventListener(type) && array.push(parent); + parent = parent.parent; + } + }, + _getBubblingTargets: function _getBubblingTargets(type, array) { + var parent = this.parent; + while (parent) { + parent._bubblingListeners && parent._bubblingListeners.hasEventListener(type) && array.push(parent); + parent = parent.parent; + } + }, + runAction: ActionManagerExist ? function(action) { + if (!this.active) return; + cc.assertID(action, 1618); + var am = cc.director.getActionManager(); + if (!am._suppressDeprecation) { + am._suppressDeprecation = true; + cc.warnID(1639); + } + am.addAction(action, this, false); + return action; + } : emptyFunc, + pauseAllActions: ActionManagerExist ? function() { + cc.director.getActionManager().pauseTarget(this); + } : emptyFunc, + resumeAllActions: ActionManagerExist ? function() { + cc.director.getActionManager().resumeTarget(this); + } : emptyFunc, + stopAllActions: ActionManagerExist ? function() { + cc.director.getActionManager().removeAllActionsFromTarget(this); + } : emptyFunc, + stopAction: ActionManagerExist ? function(action) { + cc.director.getActionManager().removeAction(action); + } : emptyFunc, + stopActionByTag: ActionManagerExist ? function(tag) { + if (tag === cc.Action.TAG_INVALID) { + cc.logID(1612); + return; + } + cc.director.getActionManager().removeActionByTag(tag, this); + } : emptyFunc, + getActionByTag: ActionManagerExist ? function(tag) { + if (tag === cc.Action.TAG_INVALID) { + cc.logID(1613); + return null; + } + return cc.director.getActionManager().getActionByTag(tag, this); + } : function() { + return null; + }, + getNumberOfRunningActions: ActionManagerExist ? function() { + return cc.director.getActionManager().getNumberOfRunningActionsInTarget(this); + } : function() { + return 0; + }, + getPosition: function getPosition(out) { + out = out || new _valueTypes.Vec3(); + return _valueTypes.Trs.toPosition(out, this._trs); + }, + setPosition: function setPosition(newPosOrX, y, z) { + var x; + if (void 0 === y) { + x = newPosOrX.x; + y = newPosOrX.y; + z = newPosOrX.z; + } else x = newPosOrX; + var trs = this._trs; + void 0 === z && (z = trs[2]); + if (trs[0] === x && trs[1] === y && trs[2] === z) return; + var oldPosition; + false; + trs[0] = x; + trs[1] = y; + trs[2] = z; + this.setLocalDirty(LocalDirtyFlag.ALL_POSITION); + true, this._renderFlag |= RenderFlow.FLAG_WORLD_TRANSFORM; + if (this._eventMask & POSITION_ON) { + false; + this.emit(EventType.POSITION_CHANGED); + } + }, + getScale: function getScale(out) { + if (void 0 !== out) return _valueTypes.Trs.toScale(out, this._trs); + cc.errorID(1400, "cc.Node.getScale", "cc.Node.scale or cc.Node.getScale(cc.Vec3)"); + return this._trs[7]; + }, + setScale: function setScale(newScaleOrX, y, z) { + var x; + if (newScaleOrX && "number" !== typeof newScaleOrX) { + x = newScaleOrX.x; + y = newScaleOrX.y; + z = newScaleOrX.z; + } else if (void 0 !== newScaleOrX && void 0 === y) { + x = newScaleOrX; + y = newScaleOrX; + z = newScaleOrX; + } else x = newScaleOrX; + var trs = this._trs; + void 0 === z && (z = trs[9]); + if (trs[7] !== x || trs[8] !== y || trs[9] !== z) { + trs[7] = x; + trs[8] = y; + trs[9] = z; + this.setLocalDirty(LocalDirtyFlag.ALL_SCALE); + true, this._renderFlag |= RenderFlow.FLAG_TRANSFORM; + this._eventMask & SCALE_ON && this.emit(EventType.SCALE_CHANGED); + } + }, + getRotation: function getRotation(out) { + if (out instanceof _valueTypes.Quat) return _valueTypes.Trs.toRotation(out, this._trs); + true; + cc.warn("`cc.Node.getRotation()` is deprecated since v2.1.0, please use `-cc.Node.angle` instead. (`this.node.getRotation()` -> `-this.node.angle`)"); + return -this.angle; + }, + setRotation: function setRotation(rotation, y, z, w) { + if ("number" === typeof rotation && void 0 === y) { + true; + cc.warn("`cc.Node.setRotation(degree)` is deprecated since v2.1.0, please set `-cc.Node.angle` instead. (`this.node.setRotation(x)` -> `this.node.angle = -x`)"); + this.angle = -rotation; + } else { + var x = rotation; + if (void 0 === y) { + x = rotation.x; + y = rotation.y; + z = rotation.z; + w = rotation.w; + } + var trs = this._trs; + if (trs[3] !== x || trs[4] !== y || trs[5] !== z || trs[6] !== w) { + trs[3] = x; + trs[4] = y; + trs[5] = z; + trs[6] = w; + this.setLocalDirty(LocalDirtyFlag.ALL_ROTATION); + this._eventMask & ROTATION_ON && this.emit(EventType.ROTATION_CHANGED); + false; + } + } + }, + getContentSize: function getContentSize() { + return cc.size(this._contentSize.width, this._contentSize.height); + }, + setContentSize: function setContentSize(size, height) { + var locContentSize = this._contentSize; + var clone; + if (void 0 === height) { + if (size.width === locContentSize.width && size.height === locContentSize.height) return; + false; + locContentSize.width = size.width; + locContentSize.height = size.height; + } else { + if (size === locContentSize.width && height === locContentSize.height) return; + false; + locContentSize.width = size; + locContentSize.height = height; + } + if (this._eventMask & SIZE_ON) { + false; + this.emit(EventType.SIZE_CHANGED); + } + }, + getAnchorPoint: function getAnchorPoint() { + return cc.v2(this._anchorPoint); + }, + setAnchorPoint: function setAnchorPoint(point, y) { + var locAnchorPoint = this._anchorPoint; + if (void 0 === y) { + if (point.x === locAnchorPoint.x && point.y === locAnchorPoint.y) return; + locAnchorPoint.x = point.x; + locAnchorPoint.y = point.y; + } else { + if (point === locAnchorPoint.x && y === locAnchorPoint.y) return; + locAnchorPoint.x = point; + locAnchorPoint.y = y; + } + this.setLocalDirty(LocalDirtyFlag.ALL_POSITION); + this._eventMask & ANCHOR_ON && this.emit(EventType.ANCHOR_CHANGED); + }, + _invTransformPoint: function _invTransformPoint(out, pos) { + this._parent ? this._parent._invTransformPoint(out, pos) : _valueTypes.Vec3.copy(out, pos); + var ltrs = this._trs; + _valueTypes.Trs.toPosition(_tpVec3a, ltrs); + _valueTypes.Vec3.sub(out, out, _tpVec3a); + _valueTypes.Trs.toRotation(_tpQuata, ltrs); + _valueTypes.Quat.conjugate(_tpQuatb, _tpQuata); + _valueTypes.Vec3.transformQuat(out, out, _tpQuatb); + _valueTypes.Trs.toScale(_tpVec3a, ltrs); + _valueTypes.Vec3.inverseSafe(_tpVec3b, _tpVec3a); + _valueTypes.Vec3.mul(out, out, _tpVec3b); + return out; + }, + getWorldPosition: function getWorldPosition(out) { + _valueTypes.Trs.toPosition(out, this._trs); + var curr = this._parent; + var ltrs; + while (curr) { + ltrs = curr._trs; + _valueTypes.Trs.toScale(_gwpVec3, ltrs); + _valueTypes.Vec3.mul(out, out, _gwpVec3); + _valueTypes.Trs.toRotation(_gwpQuat, ltrs); + _valueTypes.Vec3.transformQuat(out, out, _gwpQuat); + _valueTypes.Trs.toPosition(_gwpVec3, ltrs); + _valueTypes.Vec3.add(out, out, _gwpVec3); + curr = curr._parent; + } + return out; + }, + setWorldPosition: function setWorldPosition(pos) { + var ltrs = this._trs; + var oldPosition; + false; + this._parent ? this._parent._invTransformPoint(_swpVec3, pos) : _valueTypes.Vec3.copy(_swpVec3, pos); + _valueTypes.Trs.fromPosition(ltrs, _swpVec3); + this.setLocalDirty(LocalDirtyFlag.ALL_POSITION); + if (this._eventMask & POSITION_ON) { + false; + this.emit(EventType.POSITION_CHANGED); + } + }, + getWorldRotation: function getWorldRotation(out) { + _valueTypes.Trs.toRotation(_gwrQuat, this._trs); + _valueTypes.Quat.copy(out, _gwrQuat); + var curr = this._parent; + while (curr) { + _valueTypes.Trs.toRotation(_gwrQuat, curr._trs); + _valueTypes.Quat.mul(out, _gwrQuat, out); + curr = curr._parent; + } + return out; + }, + setWorldRotation: function setWorldRotation(val) { + if (this._parent) { + this._parent.getWorldRotation(_swrQuat); + _valueTypes.Quat.conjugate(_swrQuat, _swrQuat); + _valueTypes.Quat.mul(_swrQuat, _swrQuat, val); + } else _valueTypes.Quat.copy(_swrQuat, val); + _valueTypes.Trs.fromRotation(this._trs, _swrQuat); + false; + this.setLocalDirty(LocalDirtyFlag.ALL_ROTATION); + }, + getWorldScale: function getWorldScale(out) { + _valueTypes.Trs.toScale(_gwsVec3, this._trs); + _valueTypes.Vec3.copy(out, _gwsVec3); + var curr = this._parent; + while (curr) { + _valueTypes.Trs.toScale(_gwsVec3, curr._trs); + _valueTypes.Vec3.mul(out, out, _gwsVec3); + curr = curr._parent; + } + return out; + }, + setWorldScale: function setWorldScale(scale) { + if (this._parent) { + this._parent.getWorldScale(_swsVec3); + _valueTypes.Vec3.div(_swsVec3, scale, _swsVec3); + } else _valueTypes.Vec3.copy(_swsVec3, scale); + _valueTypes.Trs.fromScale(this._trs, _swsVec3); + this.setLocalDirty(LocalDirtyFlag.ALL_SCALE); + }, + getWorldRT: function getWorldRT(out) { + var opos = _gwrtVec3a; + var orot = _gwrtQuata; + var ltrs = this._trs; + _valueTypes.Trs.toPosition(opos, ltrs); + _valueTypes.Trs.toRotation(orot, ltrs); + var curr = this._parent; + while (curr) { + ltrs = curr._trs; + _valueTypes.Trs.toScale(_gwrtVec3b, ltrs); + _valueTypes.Vec3.mul(opos, opos, _gwrtVec3b); + _valueTypes.Trs.toRotation(_gwrtQuatb, ltrs); + _valueTypes.Vec3.transformQuat(opos, opos, _gwrtQuatb); + _valueTypes.Trs.toPosition(_gwrtVec3b, ltrs); + _valueTypes.Vec3.add(opos, opos, _gwrtVec3b); + _valueTypes.Quat.mul(orot, _gwrtQuatb, orot); + curr = curr._parent; + } + _valueTypes.Mat4.fromRT(out, orot, opos); + return out; + }, + lookAt: function lookAt(pos, up) { + this.getWorldPosition(_laVec3); + _valueTypes.Vec3.sub(_laVec3, _laVec3, pos); + _valueTypes.Vec3.normalize(_laVec3, _laVec3); + _valueTypes.Quat.fromViewUp(_laQuat, _laVec3, up); + this.setWorldRotation(_laQuat); + }, + _updateLocalMatrix: updateLocalMatrix2D, + _calculWorldMatrix: function _calculWorldMatrix() { + this._localMatDirty & LocalDirtyFlag.TRSS && this._updateLocalMatrix(); + var parent = this._parent; + parent ? this._mulMat(this._worldMatrix, parent._worldMatrix, this._matrix) : _valueTypes.Mat4.copy(this._worldMatrix, this._matrix); + this._worldMatDirty = false; + }, + _mulMat: mulMat2D, + _updateWorldMatrix: function _updateWorldMatrix() { + this._parent && this._parent._updateWorldMatrix(); + if (this._worldMatDirty) { + this._calculWorldMatrix(); + var children = this._children; + for (var i = 0, l = children.length; i < l; i++) children[i]._worldMatDirty = true; + } + }, + setLocalDirty: function setLocalDirty(flag) { + this._localMatDirty |= flag; + this._worldMatDirty = true; + flag === LocalDirtyFlag.ALL_POSITION || flag === LocalDirtyFlag.POSITION ? this._renderFlag |= RenderFlow.FLAG_WORLD_TRANSFORM : this._renderFlag |= RenderFlow.FLAG_TRANSFORM; + }, + setWorldDirty: function setWorldDirty() { + this._worldMatDirty = true; + }, + getLocalMatrix: function getLocalMatrix(out) { + this._updateLocalMatrix(); + return _valueTypes.Mat4.copy(out, this._matrix); + }, + getWorldMatrix: function getWorldMatrix(out) { + this._updateWorldMatrix(); + return _valueTypes.Mat4.copy(out, this._worldMatrix); + }, + convertToNodeSpaceAR: function convertToNodeSpaceAR(worldPoint, out) { + this._updateWorldMatrix(); + _valueTypes.Mat4.invert(_mat4_temp, this._worldMatrix); + if (worldPoint instanceof cc.Vec2) { + out = out || new cc.Vec2(); + return _valueTypes.Vec2.transformMat4(out, worldPoint, _mat4_temp); + } + out = out || new cc.Vec3(); + return _valueTypes.Vec3.transformMat4(out, worldPoint, _mat4_temp); + }, + convertToWorldSpaceAR: function convertToWorldSpaceAR(nodePoint, out) { + this._updateWorldMatrix(); + if (nodePoint instanceof cc.Vec2) { + out = out || new cc.Vec2(); + return _valueTypes.Vec2.transformMat4(out, nodePoint, this._worldMatrix); + } + out = out || new cc.Vec3(); + return _valueTypes.Vec3.transformMat4(out, nodePoint, this._worldMatrix); + }, + convertToNodeSpace: function convertToNodeSpace(worldPoint) { + this._updateWorldMatrix(); + _valueTypes.Mat4.invert(_mat4_temp, this._worldMatrix); + var out = new cc.Vec2(); + _valueTypes.Vec2.transformMat4(out, worldPoint, _mat4_temp); + out.x += this._anchorPoint.x * this._contentSize.width; + out.y += this._anchorPoint.y * this._contentSize.height; + return out; + }, + convertToWorldSpace: function convertToWorldSpace(nodePoint) { + this._updateWorldMatrix(); + var out = new cc.Vec2(nodePoint.x - this._anchorPoint.x * this._contentSize.width, nodePoint.y - this._anchorPoint.y * this._contentSize.height); + return _valueTypes.Vec2.transformMat4(out, out, this._worldMatrix); + }, + getNodeToParentTransform: function getNodeToParentTransform(out) { + out || (out = AffineTrans.identity()); + this._updateLocalMatrix(); + var contentSize = this._contentSize; + _vec3_temp.x = -this._anchorPoint.x * contentSize.width; + _vec3_temp.y = -this._anchorPoint.y * contentSize.height; + _valueTypes.Mat4.copy(_mat4_temp, this._matrix); + _valueTypes.Mat4.transform(_mat4_temp, _mat4_temp, _vec3_temp); + return AffineTrans.fromMat4(out, _mat4_temp); + }, + getNodeToParentTransformAR: function getNodeToParentTransformAR(out) { + out || (out = AffineTrans.identity()); + this._updateLocalMatrix(); + return AffineTrans.fromMat4(out, this._matrix); + }, + getNodeToWorldTransform: function getNodeToWorldTransform(out) { + out || (out = AffineTrans.identity()); + this._updateWorldMatrix(); + var contentSize = this._contentSize; + _vec3_temp.x = -this._anchorPoint.x * contentSize.width; + _vec3_temp.y = -this._anchorPoint.y * contentSize.height; + _valueTypes.Mat4.copy(_mat4_temp, this._worldMatrix); + _valueTypes.Mat4.transform(_mat4_temp, _mat4_temp, _vec3_temp); + return AffineTrans.fromMat4(out, _mat4_temp); + }, + getNodeToWorldTransformAR: function getNodeToWorldTransformAR(out) { + out || (out = AffineTrans.identity()); + this._updateWorldMatrix(); + return AffineTrans.fromMat4(out, this._worldMatrix); + }, + getParentToNodeTransform: function getParentToNodeTransform(out) { + out || (out = AffineTrans.identity()); + this._updateLocalMatrix(); + _valueTypes.Mat4.invert(_mat4_temp, this._matrix); + return AffineTrans.fromMat4(out, _mat4_temp); + }, + getWorldToNodeTransform: function getWorldToNodeTransform(out) { + out || (out = AffineTrans.identity()); + this._updateWorldMatrix(); + _valueTypes.Mat4.invert(_mat4_temp, this._worldMatrix); + return AffineTrans.fromMat4(out, _mat4_temp); + }, + convertTouchToNodeSpace: function convertTouchToNodeSpace(touch) { + return this.convertToNodeSpace(touch.getLocation()); + }, + convertTouchToNodeSpaceAR: function convertTouchToNodeSpaceAR(touch) { + return this.convertToNodeSpaceAR(touch.getLocation()); + }, + getBoundingBox: function getBoundingBox() { + this._updateLocalMatrix(); + var width = this._contentSize.width; + var height = this._contentSize.height; + var rect = cc.rect(-this._anchorPoint.x * width, -this._anchorPoint.y * height, width, height); + return rect.transformMat4(rect, this._matrix); + }, + getBoundingBoxToWorld: function getBoundingBoxToWorld() { + if (this._parent) { + this._parent._updateWorldMatrix(); + return this._getBoundingBoxTo(); + } + return this.getBoundingBox(); + }, + _getBoundingBoxTo: function _getBoundingBoxTo() { + var width = this._contentSize.width; + var height = this._contentSize.height; + var rect = cc.rect(-this._anchorPoint.x * width, -this._anchorPoint.y * height, width, height); + this._calculWorldMatrix(); + rect.transformMat4(rect, this._worldMatrix); + if (!this._children) return rect; + var locChildren = this._children; + for (var i = 0; i < locChildren.length; i++) { + var child = locChildren[i]; + if (child && child.active) { + var childRect = child._getBoundingBoxTo(); + childRect && rect.union(rect, childRect); + } + } + return rect; + }, + _updateOrderOfArrival: function _updateOrderOfArrival() { + var arrivalOrder = this._parent ? ++this._parent._childArrivalOrder : 0; + this._localZOrder = 4294901760 & this._localZOrder | arrivalOrder; + this.emit(EventType.SIBLING_ORDER_CHANGED); + }, + addChild: function addChild(child, zIndex, name) { + false; + cc.assertID(child, 1606); + cc.assertID(null === child._parent, 1605); + child.parent = this; + void 0 !== zIndex && (child.zIndex = zIndex); + void 0 !== name && (child.name = name); + }, + cleanup: function cleanup() { + ActionManagerExist && cc.director.getActionManager().removeAllActionsFromTarget(this); + eventManager.removeListeners(this); + var i, len = this._children.length, node; + for (i = 0; i < len; ++i) { + node = this._children[i]; + node && node.cleanup(); + } + }, + sortAllChildren: function sortAllChildren() { + if (this._reorderChildDirty) { + this._reorderChildDirty = false; + var _children = this._children, child; + this._childArrivalOrder = 1; + for (var i = 0, len = _children.length; i < len; i++) { + child = _children[i]; + child._updateOrderOfArrival(); + } + eventManager._setDirtyForNode(this); + if (_children.length > 1) { + var _child, child2; + for (var _i2 = 1, count = _children.length; _i2 < count; _i2++) { + _child = _children[_i2]; + var j = _i2; + for (;j > 0 && (child2 = _children[j - 1])._localZOrder > _child._localZOrder; j--) _children[j] = child2; + _children[j] = _child; + } + this.emit(EventType.CHILD_REORDER, this); + } + cc.director.__fastOff(cc.Director.EVENT_AFTER_UPDATE, this.sortAllChildren, this); + } + }, + _delaySort: function _delaySort() { + if (!this._reorderChildDirty) { + this._reorderChildDirty = true; + cc.director.__fastOn(cc.Director.EVENT_AFTER_UPDATE, this.sortAllChildren, this); + } + }, + _restoreProperties: false, + onRestore: false + }; + false; + var Node = cc.Class(NodeDefines); + var _p = Node.prototype; + js.getset(_p, "position", _p.getPosition, _p.setPosition, false, true); + var vec3_tmp; + false; + cc.Node = module.exports = Node; + }), { + "./event-manager": 112, + "./event/event": 115, + "./event/event-target": 114, + "./platform/CCMacro": 126, + "./platform/js": 142, + "./renderer/render-flow": 153, + "./utils/affine-transform": 196, + "./utils/base-node": 197, + "./utils/prefab-helper": 208, + "./utils/trans-pool": 214, + "./value-types": 220 + } ], + 25: [ (function(require, module, exports) { + "use strict"; + function _createForOfIteratorHelperLoose(o, allowArrayLike) { + var it = "undefined" !== typeof Symbol && o[Symbol.iterator] || o["@@iterator"]; + if (it) return (it = it.call(o)).next.bind(it); + if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && "number" === typeof o.length) { + it && (o = it); + var i = 0; + return function() { + if (i >= o.length) return { + done: true + }; + return { + done: false, + value: o[i++] + }; + }; + } + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if ("string" === typeof o) return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + "Object" === n && o.constructor && (n = o.constructor.name); + if ("Map" === n || "Set" === n) return Array.from(o); + if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); + } + function _arrayLikeToArray(arr, len) { + (null == len || len > arr.length) && (len = arr.length); + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + return arr2; + } + var Node = require("./CCNode"); + var RenderFlow = require("./renderer/render-flow"); + var HideInHierarchy = cc.Object.Flags.HideInHierarchy; + var LocalDirtyFlag = Node._LocalDirtyFlag; + var POSITION_ON = 1; + var PrivateNode = cc.Class({ + name: "cc.PrivateNode", + extends: Node, + properties: { + x: { + get: function get() { + return this._originPos.x; + }, + set: function set(value) { + var localPosition = this._originPos; + if (value !== localPosition.x) { + localPosition.x = value; + this._posDirty(true); + } + }, + override: true + }, + y: { + get: function get() { + return this._originPos.y; + }, + set: function set(value) { + var localPosition = this._originPos; + if (value !== localPosition.y) { + localPosition.y = value; + this._posDirty(true); + } + }, + override: true + }, + zIndex: { + get: function get() { + return cc.macro.MIN_ZINDEX; + }, + set: function set() {}, + override: true + }, + showInEditor: { + default: false, + editorOnly: true, + override: true + } + }, + ctor: function ctor(name) { + this._localZOrder = cc.macro.MIN_ZINDEX << 16; + this._originPos = cc.v2(); + false; + }, + _posDirty: function _posDirty(sendEvent) { + this.setLocalDirty(LocalDirtyFlag.POSITION); + true, this._renderFlag |= RenderFlow.FLAG_TRANSFORM; + true === sendEvent && this._eventMask & POSITION_ON && this.emit(Node.EventType.POSITION_CHANGED); + }, + _updateLocalMatrix: function _updateLocalMatrix() { + if (!this._localMatDirty) return; + var parent = this.parent; + if (parent) { + this._trs[0] = this._originPos.x - (parent._anchorPoint.x - .5) * parent._contentSize.width; + this._trs[1] = this._originPos.y - (parent._anchorPoint.y - .5) * parent._contentSize.height; + } + this._super(); + }, + getPosition: function getPosition() { + return new cc.Vec2(this._originPos); + }, + setPosition: function setPosition(x, y) { + if (void 0 === y) { + x = x.x; + y = x.y; + } + var pos = this._originPos; + if (pos.x === x && pos.y === y) return; + pos.x = x; + pos.y = y; + this._posDirty(true); + }, + setParent: function setParent(value) { + var oldParent = this._parent; + this._super(value); + if (oldParent !== value) { + oldParent && oldParent.off(Node.EventType.ANCHOR_CHANGED, this._posDirty, this); + value && value.on(Node.EventType.ANCHOR_CHANGED, this._posDirty, this); + } + }, + _updateOrderOfArrival: function _updateOrderOfArrival() {} + }); + var proto = PrivateNode.prototype; + cc.js.getset(proto, "parent", proto.getParent, proto.setParent); + cc.js.getset(proto, "position", proto.getPosition, proto.setPosition); + false; + cc.PrivateNode = module.exports = PrivateNode; + }), { + "./CCNode": 24, + "./renderer/render-flow": 153 + } ], + 26: [ (function(require, module, exports) { + "use strict"; + var NIL = function NIL() {}; + cc.Scene = cc.Class({ + name: "cc.Scene", + extends: require("./CCNode"), + properties: { + _is3DNode: { + default: true, + override: true + }, + autoReleaseAssets: false + }, + ctor: function ctor() { + this._anchorPoint.x = 0; + this._anchorPoint.y = 0; + this._activeInHierarchy = false; + this._inited = !cc.game._isCloning; + false; + this.dependAssets = null; + }, + destroy: function destroy() { + if (cc.Object.prototype.destroy.call(this)) { + var children = this._children; + for (var i = 0; i < children.length; ++i) children[i].active = false; + } + this._active = false; + this._activeInHierarchy = false; + }, + _onHierarchyChanged: NIL, + _instantiate: null, + _load: function _load() { + if (!this._inited) { + false; + this._onBatchCreated(false); + this._inited = true; + } + }, + _activate: function _activate(active) { + active = false !== active; + false, false; + cc.director._nodeActivator.activateNode(this, active); + } + }); + module.exports = cc.Scene; + }), { + "./CCNode": 24 + } ], + 27: [ (function(require, module, exports) { + "use strict"; + var js = require("./platform/js"); + var IdGenerater = require("./platform/id-generater"); + var MAX_POOL_SIZE = 20; + var idGenerater = new IdGenerater("Scheduler"); + var ListEntry = function ListEntry(target, priority, paused, markedForDeletion) { + this.target = target; + this.priority = priority; + this.paused = paused; + this.markedForDeletion = markedForDeletion; + }; + var _listEntries = []; + ListEntry.get = function(target, priority, paused, markedForDeletion) { + var result = _listEntries.pop(); + if (result) { + result.target = target; + result.priority = priority; + result.paused = paused; + result.markedForDeletion = markedForDeletion; + } else result = new ListEntry(target, priority, paused, markedForDeletion); + return result; + }; + ListEntry.put = function(entry) { + if (_listEntries.length < MAX_POOL_SIZE) { + entry.target = null; + _listEntries.push(entry); + } + }; + var HashUpdateEntry = function HashUpdateEntry(list, entry, target, callback) { + this.list = list; + this.entry = entry; + this.target = target; + this.callback = callback; + }; + var _hashUpdateEntries = []; + HashUpdateEntry.get = function(list, entry, target, callback) { + var result = _hashUpdateEntries.pop(); + if (result) { + result.list = list; + result.entry = entry; + result.target = target; + result.callback = callback; + } else result = new HashUpdateEntry(list, entry, target, callback); + return result; + }; + HashUpdateEntry.put = function(entry) { + if (_hashUpdateEntries.length < MAX_POOL_SIZE) { + entry.list = entry.entry = entry.target = entry.callback = null; + _hashUpdateEntries.push(entry); + } + }; + var HashTimerEntry = function HashTimerEntry(timers, target, timerIndex, currentTimer, currentTimerSalvaged, paused) { + var _t = this; + _t.timers = timers; + _t.target = target; + _t.timerIndex = timerIndex; + _t.currentTimer = currentTimer; + _t.currentTimerSalvaged = currentTimerSalvaged; + _t.paused = paused; + }; + var _hashTimerEntries = []; + HashTimerEntry.get = function(timers, target, timerIndex, currentTimer, currentTimerSalvaged, paused) { + var result = _hashTimerEntries.pop(); + if (result) { + result.timers = timers; + result.target = target; + result.timerIndex = timerIndex; + result.currentTimer = currentTimer; + result.currentTimerSalvaged = currentTimerSalvaged; + result.paused = paused; + } else result = new HashTimerEntry(timers, target, timerIndex, currentTimer, currentTimerSalvaged, paused); + return result; + }; + HashTimerEntry.put = function(entry) { + if (_hashTimerEntries.length < MAX_POOL_SIZE) { + entry.timers = entry.target = entry.currentTimer = null; + _hashTimerEntries.push(entry); + } + }; + function CallbackTimer() { + this._lock = false; + this._scheduler = null; + this._elapsed = -1; + this._runForever = false; + this._useDelay = false; + this._timesExecuted = 0; + this._repeat = 0; + this._delay = 0; + this._interval = 0; + this._target = null; + this._callback = null; + } + var proto = CallbackTimer.prototype; + proto.initWithCallback = function(scheduler, callback, target, seconds, repeat, delay) { + this._lock = false; + this._scheduler = scheduler; + this._target = target; + this._callback = callback; + this._elapsed = -1; + this._interval = seconds; + this._delay = delay; + this._useDelay = this._delay > 0; + this._repeat = repeat; + this._runForever = this._repeat === cc.macro.REPEAT_FOREVER; + return true; + }; + proto.getInterval = function() { + return this._interval; + }; + proto.setInterval = function(interval) { + this._interval = interval; + }; + proto.update = function(dt) { + if (-1 === this._elapsed) { + this._elapsed = 0; + this._timesExecuted = 0; + } else { + this._elapsed += dt; + if (this._runForever && !this._useDelay) { + if (this._elapsed >= this._interval) { + this.trigger(); + this._elapsed = 0; + } + } else { + if (this._useDelay) { + if (this._elapsed >= this._delay) { + this.trigger(); + this._elapsed -= this._delay; + this._timesExecuted += 1; + this._useDelay = false; + } + } else if (this._elapsed >= this._interval) { + this.trigger(); + this._elapsed = 0; + this._timesExecuted += 1; + } + this._callback && !this._runForever && this._timesExecuted > this._repeat && this.cancel(); + } + } + }; + proto.getCallback = function() { + return this._callback; + }; + proto.trigger = function() { + if (this._target && this._callback) { + this._lock = true; + this._callback.call(this._target, this._elapsed); + this._lock = false; + } + }; + proto.cancel = function() { + this._scheduler.unschedule(this._callback, this._target); + }; + var _timers = []; + CallbackTimer.get = function() { + return _timers.pop() || new CallbackTimer(); + }; + CallbackTimer.put = function(timer) { + if (_timers.length < MAX_POOL_SIZE && !timer._lock) { + timer._scheduler = timer._target = timer._callback = null; + _timers.push(timer); + } + }; + cc.Scheduler = function() { + this._timeScale = 1; + this._updatesNegList = []; + this._updates0List = []; + this._updatesPosList = []; + this._hashForUpdates = js.createMap(true); + this._hashForTimers = js.createMap(true); + this._currentTarget = null; + this._currentTargetSalvaged = false; + this._updateHashLocked = false; + this._arrayForTimers = []; + }; + cc.Scheduler.prototype = { + constructor: cc.Scheduler, + _removeHashElement: function _removeHashElement(element) { + delete this._hashForTimers[element.target._id]; + var arr = this._arrayForTimers; + for (var i = 0, l = arr.length; i < l; i++) if (arr[i] === element) { + arr.splice(i, 1); + break; + } + HashTimerEntry.put(element); + }, + _removeUpdateFromHash: function _removeUpdateFromHash(entry) { + var targetId = entry.target._id; + var self = this, element = self._hashForUpdates[targetId]; + if (element) { + var list = element.list, listEntry = element.entry; + for (var i = 0, l = list.length; i < l; i++) if (list[i] === listEntry) { + list.splice(i, 1); + break; + } + delete self._hashForUpdates[targetId]; + ListEntry.put(listEntry); + HashUpdateEntry.put(element); + } + }, + _priorityIn: function _priorityIn(ppList, listElement, priority) { + for (var i = 0; i < ppList.length; i++) if (priority < ppList[i].priority) { + ppList.splice(i, 0, listElement); + return; + } + ppList.push(listElement); + }, + _appendIn: function _appendIn(ppList, listElement) { + ppList.push(listElement); + }, + enableForTarget: function enableForTarget(target) { + target._id || (target.__instanceId ? cc.warnID(1513) : target._id = idGenerater.getNewId()); + }, + setTimeScale: function setTimeScale(timeScale) { + this._timeScale = timeScale; + }, + getTimeScale: function getTimeScale() { + return this._timeScale; + }, + update: function update(dt) { + this._updateHashLocked = true; + 1 !== this._timeScale && (dt *= this._timeScale); + var i, list, len, entry; + for (i = 0, list = this._updatesNegList, len = list.length; i < len; i++) { + entry = list[i]; + entry.paused || entry.markedForDeletion || entry.target.update(dt); + } + for (i = 0, list = this._updates0List, len = list.length; i < len; i++) { + entry = list[i]; + entry.paused || entry.markedForDeletion || entry.target.update(dt); + } + for (i = 0, list = this._updatesPosList, len = list.length; i < len; i++) { + entry = list[i]; + entry.paused || entry.markedForDeletion || entry.target.update(dt); + } + var elt, arr = this._arrayForTimers; + for (i = 0; i < arr.length; i++) { + elt = arr[i]; + this._currentTarget = elt; + this._currentTargetSalvaged = false; + if (!elt.paused) for (elt.timerIndex = 0; elt.timerIndex < elt.timers.length; ++elt.timerIndex) { + elt.currentTimer = elt.timers[elt.timerIndex]; + elt.currentTimerSalvaged = false; + elt.currentTimer.update(dt); + elt.currentTimer = null; + } + if (this._currentTargetSalvaged && 0 === this._currentTarget.timers.length) { + this._removeHashElement(this._currentTarget); + --i; + } + } + for (i = 0, list = this._updatesNegList; i < list.length; ) { + entry = list[i]; + entry.markedForDeletion ? this._removeUpdateFromHash(entry) : i++; + } + for (i = 0, list = this._updates0List; i < list.length; ) { + entry = list[i]; + entry.markedForDeletion ? this._removeUpdateFromHash(entry) : i++; + } + for (i = 0, list = this._updatesPosList; i < list.length; ) { + entry = list[i]; + entry.markedForDeletion ? this._removeUpdateFromHash(entry) : i++; + } + this._updateHashLocked = false; + this._currentTarget = null; + }, + schedule: function schedule(callback, target, interval, repeat, delay, paused) { + if ("function" !== typeof callback) { + var tmp = callback; + callback = target; + target = tmp; + } + if (4 === arguments.length || 5 === arguments.length) { + paused = !!repeat; + repeat = cc.macro.REPEAT_FOREVER; + delay = 0; + } + cc.assertID(target, 1502); + var targetId = target._id; + if (!targetId) if (target.__instanceId) { + cc.warnID(1513); + targetId = target._id = target.__instanceId; + } else cc.errorID(1510); + var element = this._hashForTimers[targetId]; + if (element) element.paused !== paused && cc.warnID(1511); else { + element = HashTimerEntry.get(null, target, 0, null, null, paused); + this._arrayForTimers.push(element); + this._hashForTimers[targetId] = element; + } + var timer, i; + if (null == element.timers) element.timers = []; else for (i = 0; i < element.timers.length; ++i) { + timer = element.timers[i]; + if (timer && callback === timer._callback) { + cc.logID(1507, timer.getInterval(), interval); + timer._interval = interval; + return; + } + } + timer = CallbackTimer.get(); + timer.initWithCallback(this, callback, target, interval, repeat, delay); + element.timers.push(timer); + this._currentTarget === element && this._currentTargetSalvaged && (this._currentTargetSalvaged = false); + }, + scheduleUpdate: function scheduleUpdate(target, priority, paused) { + var targetId = target._id; + if (!targetId) if (target.__instanceId) { + cc.warnID(1513); + targetId = target._id = target.__instanceId; + } else cc.errorID(1510); + var hashElement = this._hashForUpdates[targetId]; + if (hashElement && hashElement.entry) { + if (hashElement.entry.priority === priority) { + hashElement.entry.markedForDeletion = false; + hashElement.entry.paused = paused; + return; + } + if (this._updateHashLocked) { + cc.logID(1506); + hashElement.entry.markedForDeletion = false; + hashElement.entry.paused = paused; + return; + } + this.unscheduleUpdate(target); + } + var listElement = ListEntry.get(target, priority, paused, false); + var ppList; + if (0 === priority) { + ppList = this._updates0List; + this._appendIn(ppList, listElement); + } else { + ppList = priority < 0 ? this._updatesNegList : this._updatesPosList; + this._priorityIn(ppList, listElement, priority); + } + this._hashForUpdates[targetId] = HashUpdateEntry.get(ppList, listElement, target, null); + }, + unschedule: function unschedule(callback, target) { + if (!target || !callback) return; + var targetId = target._id; + if (!targetId) if (target.__instanceId) { + cc.warnID(1513); + targetId = target._id = target.__instanceId; + } else cc.errorID(1510); + var self = this, element = self._hashForTimers[targetId]; + if (element) { + var timers = element.timers; + for (var i = 0, li = timers.length; i < li; i++) { + var timer = timers[i]; + if (callback === timer._callback) { + timer !== element.currentTimer || element.currentTimerSalvaged || (element.currentTimerSalvaged = true); + timers.splice(i, 1); + CallbackTimer.put(timer); + element.timerIndex >= i && element.timerIndex--; + 0 === timers.length && (self._currentTarget === element ? self._currentTargetSalvaged = true : self._removeHashElement(element)); + return; + } + } + } + }, + unscheduleUpdate: function unscheduleUpdate(target) { + if (!target) return; + var targetId = target._id; + if (!targetId) if (target.__instanceId) { + cc.warnID(1513); + targetId = target._id = target.__instanceId; + } else cc.errorID(1510); + var element = this._hashForUpdates[targetId]; + element && (this._updateHashLocked ? element.entry.markedForDeletion = true : this._removeUpdateFromHash(element.entry)); + }, + unscheduleAllForTarget: function unscheduleAllForTarget(target) { + if (!target) return; + var targetId = target._id; + if (!targetId) if (target.__instanceId) { + cc.warnID(1513); + targetId = target._id = target.__instanceId; + } else cc.errorID(1510); + var element = this._hashForTimers[targetId]; + if (element) { + var timers = element.timers; + timers.indexOf(element.currentTimer) > -1 && !element.currentTimerSalvaged && (element.currentTimerSalvaged = true); + for (var i = 0, l = timers.length; i < l; i++) CallbackTimer.put(timers[i]); + timers.length = 0; + this._currentTarget === element ? this._currentTargetSalvaged = true : this._removeHashElement(element); + } + this.unscheduleUpdate(target); + }, + unscheduleAll: function unscheduleAll() { + this.unscheduleAllWithMinPriority(cc.Scheduler.PRIORITY_SYSTEM); + }, + unscheduleAllWithMinPriority: function unscheduleAllWithMinPriority(minPriority) { + var i, element, arr = this._arrayForTimers; + for (i = arr.length - 1; i >= 0; i--) { + element = arr[i]; + this.unscheduleAllForTarget(element.target); + } + var entry; + var temp_length = 0; + if (minPriority < 0) for (i = 0; i < this._updatesNegList.length; ) { + temp_length = this._updatesNegList.length; + entry = this._updatesNegList[i]; + entry && entry.priority >= minPriority && this.unscheduleUpdate(entry.target); + temp_length == this._updatesNegList.length && i++; + } + if (minPriority <= 0) for (i = 0; i < this._updates0List.length; ) { + temp_length = this._updates0List.length; + entry = this._updates0List[i]; + entry && this.unscheduleUpdate(entry.target); + temp_length == this._updates0List.length && i++; + } + for (i = 0; i < this._updatesPosList.length; ) { + temp_length = this._updatesPosList.length; + entry = this._updatesPosList[i]; + entry && entry.priority >= minPriority && this.unscheduleUpdate(entry.target); + temp_length == this._updatesPosList.length && i++; + } + }, + isScheduled: function isScheduled(callback, target) { + cc.assertID(callback, 1508); + cc.assertID(target, 1509); + var targetId = target._id; + if (!targetId) if (target.__instanceId) { + cc.warnID(1513); + targetId = target._id = target.__instanceId; + } else cc.errorID(1510); + var element = this._hashForTimers[targetId]; + if (!element) return false; + if (null == element.timers) return false; + var timers = element.timers; + for (var i = 0; i < timers.length; ++i) { + var timer = timers[i]; + if (callback === timer._callback) return true; + } + return false; + }, + pauseAllTargets: function pauseAllTargets() { + return this.pauseAllTargetsWithMinPriority(cc.Scheduler.PRIORITY_SYSTEM); + }, + pauseAllTargetsWithMinPriority: function pauseAllTargetsWithMinPriority(minPriority) { + var idsWithSelectors = []; + var self = this, element, locArrayForTimers = self._arrayForTimers; + var i, li; + for (i = 0, li = locArrayForTimers.length; i < li; i++) { + element = locArrayForTimers[i]; + if (element) { + element.paused = true; + idsWithSelectors.push(element.target); + } + } + var entry; + if (minPriority < 0) for (i = 0; i < this._updatesNegList.length; i++) { + entry = this._updatesNegList[i]; + if (entry && entry.priority >= minPriority) { + entry.paused = true; + idsWithSelectors.push(entry.target); + } + } + if (minPriority <= 0) for (i = 0; i < this._updates0List.length; i++) { + entry = this._updates0List[i]; + if (entry) { + entry.paused = true; + idsWithSelectors.push(entry.target); + } + } + for (i = 0; i < this._updatesPosList.length; i++) { + entry = this._updatesPosList[i]; + if (entry && entry.priority >= minPriority) { + entry.paused = true; + idsWithSelectors.push(entry.target); + } + } + return idsWithSelectors; + }, + resumeTargets: function resumeTargets(targetsToResume) { + if (!targetsToResume) return; + for (var i = 0; i < targetsToResume.length; i++) this.resumeTarget(targetsToResume[i]); + }, + pauseTarget: function pauseTarget(target) { + cc.assertID(target, 1503); + var targetId = target._id; + if (!targetId) if (target.__instanceId) { + cc.warnID(1513); + targetId = target._id = target.__instanceId; + } else cc.errorID(1510); + var self = this, element = self._hashForTimers[targetId]; + element && (element.paused = true); + var elementUpdate = self._hashForUpdates[targetId]; + elementUpdate && (elementUpdate.entry.paused = true); + }, + resumeTarget: function resumeTarget(target) { + cc.assertID(target, 1504); + var targetId = target._id; + if (!targetId) if (target.__instanceId) { + cc.warnID(1513); + targetId = target._id = target.__instanceId; + } else cc.errorID(1510); + var self = this, element = self._hashForTimers[targetId]; + element && (element.paused = false); + var elementUpdate = self._hashForUpdates[targetId]; + elementUpdate && (elementUpdate.entry.paused = false); + }, + isTargetPaused: function isTargetPaused(target) { + cc.assertID(target, 1505); + var targetId = target._id; + if (!targetId) if (target.__instanceId) { + cc.warnID(1513); + targetId = target._id = target.__instanceId; + } else cc.errorID(1510); + var element = this._hashForTimers[targetId]; + if (element) return element.paused; + var elementUpdate = this._hashForUpdates[targetId]; + if (elementUpdate) return elementUpdate.entry.paused; + return false; + } + }; + cc.Scheduler.PRIORITY_SYSTEM = 1 << 31; + cc.Scheduler.PRIORITY_NON_SYSTEM = cc.Scheduler.PRIORITY_SYSTEM + 1; + module.exports = cc.Scheduler; + }), { + "./platform/id-generater": 138, + "./platform/js": 142 + } ], + 28: [ (function(require, module, exports) { + "use strict"; + var preprocess = require("./preprocess"); + var fetch = require("./fetch"); + var Cache = require("./cache"); + var helper = require("./helper"); + var releaseManager = require("./releaseManager"); + var dependUtil = require("./depend-util"); + var load = require("./load"); + var Pipeline = require("./pipeline"); + var Task = require("./task"); + var RequestItem = require("./request-item"); + var downloader = require("./downloader"); + var parser = require("./parser"); + var packManager = require("./pack-manager"); + var Bundle = require("./bundle"); + var builtins = require("./builtins"); + var factory = require("./factory"); + var _require = require("./urlTransformer"), parse = _require.parse, combine = _require.combine; + var _require2 = require("./utilities"), parseParameters = _require2.parseParameters, asyncify = _require2.asyncify; + var _require3 = require("./shared"), assets = _require3.assets, files = _require3.files, parsed = _require3.parsed, pipeline = _require3.pipeline, transformPipeline = _require3.transformPipeline, fetchPipeline = _require3.fetchPipeline, RequestType = _require3.RequestType, bundles = _require3.bundles, BuiltinBundleName = _require3.BuiltinBundleName; + function AssetManager() { + this._preprocessPipe = preprocess; + this._fetchPipe = fetch; + this._loadPipe = load; + this.pipeline = pipeline.append(preprocess).append(load); + this.fetchPipeline = fetchPipeline.append(preprocess).append(fetch); + this.transformPipeline = transformPipeline.append(parse).append(combine); + this.bundles = bundles; + this.assets = assets; + this._files = files; + this._parsed = parsed; + this.generalImportBase = ""; + this.generalNativeBase = ""; + this.dependUtil = dependUtil; + this._releaseManager = releaseManager; + this.cacheAsset = true; + this.force = false; + this.utils = helper; + this.downloader = downloader; + this.parser = parser; + this.builtins = builtins; + this.packManager = packManager; + this.factory = factory; + this.cacheManager = null; + this.presets = { + default: { + priority: 0 + }, + preload: { + maxConcurrency: 2, + maxRequestsPerFrame: 2, + priority: -1 + }, + scene: { + maxConcurrency: 8, + maxRequestsPerFrame: 8, + priority: 1 + }, + bundle: { + maxConcurrency: 8, + maxRequestsPerFrame: 8, + priority: 2 + }, + remote: { + maxRetryCount: 4 + }, + script: { + maxConcurrency: 1024, + maxRequestsPerFrame: 1024, + priority: 2 + } + }; + } + AssetManager.Pipeline = Pipeline; + AssetManager.Task = Task; + AssetManager.Cache = Cache; + AssetManager.RequestItem = RequestItem; + AssetManager.Bundle = Bundle; + AssetManager.BuiltinBundleName = BuiltinBundleName; + AssetManager.prototype = { + constructor: AssetManager, + get main() { + return bundles.get(BuiltinBundleName.MAIN); + }, + get resources() { + return bundles.get(BuiltinBundleName.RESOURCES); + }, + get internal() { + return bundles.get(BuiltinBundleName.INTERNAL); + }, + init: function init(options) { + options = options || Object.create(null); + this._files.clear(); + this._parsed.clear(); + this._releaseManager.init(); + this.assets.clear(); + this.bundles.clear(); + this.packManager.init(); + this.downloader.init(options.bundleVers, options.server); + this.parser.init(); + this.dependUtil.init(); + this.generalImportBase = options.importBase; + this.generalNativeBase = options.nativeBase; + }, + getBundle: function getBundle(name) { + return bundles.get(name); + }, + removeBundle: function removeBundle(bundle) { + bundle._destroy(); + bundles.remove(bundle.name); + }, + loadAny: function loadAny(requests, options, onProgress, onComplete) { + var _parseParameters = parseParameters(options, onProgress, onComplete), options = _parseParameters.options, onProgress = _parseParameters.onProgress, onComplete = _parseParameters.onComplete; + options.preset = options.preset || "default"; + requests = Array.isArray(requests) ? requests.concat() : requests; + var task = new Task({ + input: requests, + onProgress: onProgress, + onComplete: asyncify(onComplete), + options: options + }); + pipeline.async(task); + }, + preloadAny: function preloadAny(requests, options, onProgress, onComplete) { + var _parseParameters2 = parseParameters(options, onProgress, onComplete), options = _parseParameters2.options, onProgress = _parseParameters2.onProgress, onComplete = _parseParameters2.onComplete; + options.preset = options.preset || "preload"; + requests = Array.isArray(requests) ? requests.concat() : requests; + var task = new Task({ + input: requests, + onProgress: onProgress, + onComplete: asyncify(onComplete), + options: options + }); + fetchPipeline.async(task); + }, + postLoadNative: function postLoadNative(asset, options, onComplete) { + if (!(asset instanceof cc.Asset)) throw new Error("input is not asset"); + var _parseParameters3 = parseParameters(options, void 0, onComplete), options = _parseParameters3.options, onComplete = _parseParameters3.onComplete; + if (!asset._native || asset._nativeAsset) return asyncify(onComplete)(null); + var depend = dependUtil.getNativeDep(asset._uuid); + if (depend) { + if (!bundles.has(depend.bundle)) { + var bundle = bundles.find((function(bundle) { + return bundle.getAssetInfo(asset._uuid); + })); + bundle && (depend.bundle = bundle.name); + } + this.loadAny(depend, options, (function(err, _native) { + err ? cc.error(err.message, err.stack) : asset.isValid && !asset._nativeAsset && (asset._nativeAsset = _native); + onComplete && onComplete(err); + })); + } + }, + loadRemote: function loadRemote(url, options, onComplete) { + var _parseParameters4 = parseParameters(options, void 0, onComplete), options = _parseParameters4.options, onComplete = _parseParameters4.onComplete; + if (this.assets.has(url)) return asyncify(onComplete)(null, this.assets.get(url)); + options.__isNative__ = true; + options.preset = options.preset || "remote"; + this.loadAny({ + url: url + }, options, null, (function(err, data) { + if (err) { + cc.error(err.message, err.stack); + onComplete && onComplete(err, null); + } else factory.create(url, data, options.ext || cc.path.extname(url), options, (function(err, out) { + onComplete && onComplete(err, out); + })); + })); + }, + loadScript: function loadScript(url, options, onComplete) { + var _parseParameters5 = parseParameters(options, void 0, onComplete), options = _parseParameters5.options, onComplete = _parseParameters5.onComplete; + options.__requestType__ = RequestType.URL; + options.preset = options.preset || "script"; + this.loadAny(url, options, onComplete); + }, + loadBundle: function loadBundle(nameOrUrl, options, onComplete) { + var _parseParameters6 = parseParameters(options, void 0, onComplete), options = _parseParameters6.options, onComplete = _parseParameters6.onComplete; + var bundleName = cc.path.basename(nameOrUrl); + if (this.bundles.has(bundleName)) return asyncify(onComplete)(null, this.getBundle(bundleName)); + options.preset = options.preset || "bundle"; + options.ext = "bundle"; + this.loadRemote(nameOrUrl, options, onComplete); + }, + releaseAsset: function releaseAsset(asset) { + releaseManager.tryRelease(asset, true); + }, + releaseUnusedAssets: function releaseUnusedAssets() { + assets.forEach((function(asset) { + releaseManager.tryRelease(asset); + })); + }, + releaseAll: function releaseAll() { + assets.forEach((function(asset) { + releaseManager.tryRelease(asset, true); + })); + }, + _transform: function _transform(input, options) { + var subTask = Task.create({ + input: input, + options: options + }); + var urls = []; + try { + var result = transformPipeline.sync(subTask); + for (var i = 0, l = result.length; i < l; i++) { + var item = result[i]; + var url = item.url; + item.recycle(); + urls.push(url); + } + } catch (e) { + for (var i = 0, l = subTask.output.length; i < l; i++) subTask.output[i].recycle(); + cc.error(e.message, e.stack); + } + subTask.recycle(); + return urls.length > 1 ? urls : urls[0]; + } + }; + cc.AssetManager = AssetManager; + cc.assetManager = new AssetManager(); + Object.defineProperty(cc, "resources", { + get: function get() { + return bundles.get(BuiltinBundleName.RESOURCES); + } + }); + module.exports = cc.assetManager; + }), { + "./builtins": 29, + "./bundle": 30, + "./cache": 31, + "./depend-util": 33, + "./downloader": 40, + "./factory": 41, + "./fetch": 42, + "./helper": 44, + "./load": 46, + "./pack-manager": 47, + "./parser": 48, + "./pipeline": 49, + "./preprocess": 50, + "./releaseManager": 51, + "./request-item": 52, + "./shared": 53, + "./task": 54, + "./urlTransformer": 55, + "./utilities": 56 + } ], + 29: [ (function(require, module, exports) { + "use strict"; + var Cache = require("./cache"); + var releaseManager = require("./releaseManager"); + var _require = require("./shared"), BuiltinBundleName = _require.BuiltinBundleName; + var builtins = { + _assets: new Cache({ + material: new Cache(), + effect: new Cache() + }), + _loadBuiltins: function _loadBuiltins(name, cb) { + var dirname = name + "s"; + var builtin = this._assets.get(name); + return cc.assetManager.internal.loadDir(dirname, null, null, (function(err, assets) { + if (err) cc.error(err.message, err.stack); else for (var i = 0; i < assets.length; i++) { + var asset = assets[i]; + builtin.add(asset.name, asset.addRef()); + } + cb(); + })); + }, + init: function init(cb) { + var _this = this; + this.clear(); + if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS || !cc.assetManager.bundles.has(BuiltinBundleName.INTERNAL)) return cb && cb(); + this._loadBuiltins("effect", (function() { + _this._loadBuiltins("material", (function() { + _this._loadBuiltinsSP(cb); + })); + })); + }, + _loadBuiltinsSP: function _loadBuiltinsSP(cb) { + cc.sp.MAX_MULTITEXTURE_NUM = 8; + this._loadMultiEffect("multi-2d-sprite", (function(effect) { + cc.sp.multi2dSpriteEffectAsset = effect; + effect.addRef(); + cc.sp.inited = true; + cc.sp.multiBatcher.init(); + -1 === cc.dynamicAtlasManager.maxAtlasCount && (cc.dynamicAtlasManager.maxAtlasCount = Math.max(0, cc.sp.MAX_MULTITEXTURE_NUM - cc.sp.charAtlasAutoBatchCount)); + cb(); + })); + }, + _loadMultiEffect: function _loadMultiEffect(name, cb) { + false; + cc.assetManager.loadBundle("sp", (function(err, bundle) { + err ? cc.error(err) : bundle.load("effects/" + name, cc.EffectAsset, (function(err, effect) { + err ? cc.error(err) : cb(effect); + })); + })); + }, + getBuiltin: function getBuiltin(type, name) { + return 0 === arguments.length ? this._assets : 1 === arguments.length ? this._assets.get(type) : this._assets.get(type).get(name); + }, + clear: function clear() { + this._assets.forEach((function(assets) { + assets.forEach((function(asset) { + releaseManager.tryRelease(asset, true); + })); + assets.clear(); + })); + } + }; + module.exports = builtins; + }), { + "./cache": 31, + "./releaseManager": 51, + "./shared": 53 + } ], + 30: [ (function(require, module, exports) { + "use strict"; + var Config = require("./config"); + var releaseManager = require("./releaseManager"); + var _require = require("./utilities"), parseParameters = _require.parseParameters, parseLoadResArgs = _require.parseLoadResArgs; + var _require2 = require("./shared"), RequestType = _require2.RequestType, assets = _require2.assets, bundles = _require2.bundles; + function Bundle() { + this._config = new Config(); + } + Bundle.prototype = { + constructor: Bundle, + get name() { + return this._config.name; + }, + get deps() { + return this._config.deps; + }, + get base() { + return this._config.base; + }, + getInfoWithPath: function getInfoWithPath(path, type) { + return this._config.getInfoWithPath(path, type); + }, + getDirWithPath: function getDirWithPath(path, type, out) { + return this._config.getDirWithPath(path, type, out); + }, + getAssetInfo: function getAssetInfo(uuid) { + return this._config.getAssetInfo(uuid); + }, + getSceneInfo: function getSceneInfo(name) { + return this._config.getSceneInfo(name); + }, + init: function init(options) { + this._config.init(options); + bundles.add(options.name, this); + }, + load: function load(paths, type, onProgress, onComplete) { + var _parseLoadResArgs = parseLoadResArgs(type, onProgress, onComplete), type = _parseLoadResArgs.type, onProgress = _parseLoadResArgs.onProgress, onComplete = _parseLoadResArgs.onComplete; + cc.assetManager.loadAny(paths, { + __requestType__: RequestType.PATH, + type: type, + bundle: this.name, + __outputAsArray__: Array.isArray(paths) + }, onProgress, onComplete); + }, + preload: function preload(paths, type, onProgress, onComplete) { + var _parseLoadResArgs2 = parseLoadResArgs(type, onProgress, onComplete), type = _parseLoadResArgs2.type, onProgress = _parseLoadResArgs2.onProgress, onComplete = _parseLoadResArgs2.onComplete; + cc.assetManager.preloadAny(paths, { + __requestType__: RequestType.PATH, + type: type, + bundle: this.name + }, onProgress, onComplete); + }, + loadDir: function loadDir(dir, type, onProgress, onComplete) { + var _parseLoadResArgs3 = parseLoadResArgs(type, onProgress, onComplete), type = _parseLoadResArgs3.type, onProgress = _parseLoadResArgs3.onProgress, onComplete = _parseLoadResArgs3.onComplete; + cc.assetManager.loadAny(dir, { + __requestType__: RequestType.DIR, + type: type, + bundle: this.name, + __outputAsArray__: true + }, onProgress, onComplete); + }, + preloadDir: function preloadDir(dir, type, onProgress, onComplete) { + var _parseLoadResArgs4 = parseLoadResArgs(type, onProgress, onComplete), type = _parseLoadResArgs4.type, onProgress = _parseLoadResArgs4.onProgress, onComplete = _parseLoadResArgs4.onComplete; + cc.assetManager.preloadAny(dir, { + __requestType__: RequestType.DIR, + type: type, + bundle: this.name + }, onProgress, onComplete); + }, + loadScene: function loadScene(sceneName, options, onProgress, onComplete) { + var _parseParameters = parseParameters(options, onProgress, onComplete), options = _parseParameters.options, onProgress = _parseParameters.onProgress, onComplete = _parseParameters.onComplete; + options.preset = options.preset || "scene"; + options.bundle = this.name; + cc.assetManager.loadAny({ + scene: sceneName + }, options, onProgress, (function(err, sceneAsset) { + if (err) { + cc.error(err.message, err.stack); + onComplete && onComplete(err); + } else if (sceneAsset instanceof cc.SceneAsset) { + var scene = sceneAsset.scene; + scene._id = sceneAsset._uuid; + scene._name = sceneAsset._name; + onComplete && onComplete(null, sceneAsset); + } else onComplete && onComplete(new Error("The asset " + sceneAsset._uuid + " is not a scene")); + })); + }, + preloadScene: function preloadScene(sceneName, options, onProgress, onComplete) { + var _parseParameters2 = parseParameters(options, onProgress, onComplete), options = _parseParameters2.options, onProgress = _parseParameters2.onProgress, onComplete = _parseParameters2.onComplete; + options.bundle = this.name; + cc.assetManager.preloadAny({ + scene: sceneName + }, options, onProgress, (function(err) { + err && cc.errorID(1210, sceneName, err.message); + onComplete && onComplete(err); + })); + }, + get: function get(path, type) { + var info = this.getInfoWithPath(path, type); + return assets.get(info && info.uuid); + }, + release: function release(path, type) { + releaseManager.tryRelease(this.get(path, type), true); + }, + releaseUnusedAssets: function releaseUnusedAssets() { + var self = this; + assets.forEach((function(asset) { + var info = self.getAssetInfo(asset._uuid); + info && !info.redirect && releaseManager.tryRelease(asset); + })); + }, + releaseAll: function releaseAll() { + var self = this; + assets.forEach((function(asset) { + var info = self.getAssetInfo(asset._uuid); + info && !info.redirect && releaseManager.tryRelease(asset, true); + })); + }, + _destroy: function _destroy() { + this._config.destroy(); + } + }; + module.exports = Bundle; + }), { + "./config": 32, + "./releaseManager": 51, + "./shared": 53, + "./utilities": 56 + } ], + 31: [ (function(require, module, exports) { + "use strict"; + var js = require("../platform/js"); + function Cache(map) { + if (map) { + this._map = map; + this._count = Object.keys(map).length; + } else { + this._map = js.createMap(true); + this._count = 0; + } + } + Cache.prototype = { + constructor: Cache, + add: function add(key, val) { + key in this._map || this._count++; + return this._map[key] = val; + }, + get: function get(key) { + return this._map[key]; + }, + has: function has(key) { + return key in this._map; + }, + remove: function remove(key) { + var out = this._map[key]; + if (key in this._map) { + delete this._map[key]; + this._count--; + } + return out; + }, + clear: function clear() { + if (0 !== this._count) { + this._map = js.createMap(true); + this._count = 0; + } + }, + forEach: function forEach(func) { + for (var key in this._map) func(this._map[key], key); + }, + find: function find(predicate) { + for (var key in this._map) if (predicate(this._map[key], key)) return this._map[key]; + return null; + }, + get count() { + return this._count; + }, + destroy: function destroy() { + this._map = null; + } + }; + module.exports = Cache; + }), { + "../platform/js": 142 + } ], + 32: [ (function(require, module, exports) { + "use strict"; + var js = require("../platform/js"); + var Cache = require("./cache"); + var _require = require("./helper"), normalize = _require.normalize; + var _require2 = require("./utilities"), processOptions = _require2.processOptions; + function Config() { + this.name = ""; + this.base = ""; + this.importBase = ""; + this.nativeBase = ""; + this.deps = null; + this.assetInfos = new Cache(); + this.scenes = new Cache(); + this.paths = new Cache(); + } + Config.prototype = { + constructor: Config, + init: function init(options) { + processOptions(options); + this.importBase = options.importBase || ""; + this.nativeBase = options.nativeBase || ""; + this.base = options.base || ""; + this.name = options.name || ""; + this.deps = options.deps || []; + this._initUuid(options.uuids); + this._initPath(options.paths); + this._initScene(options.scenes); + this._initPackage(options.packs); + this._initVersion(options.versions); + this._initRedirect(options.redirect); + }, + _initUuid: function _initUuid(uuidList) { + if (!uuidList) return; + this.assetInfos.clear(); + for (var i = 0, l = uuidList.length; i < l; i++) { + var uuid = uuidList[i]; + this.assetInfos.add(uuid, { + uuid: uuid + }); + } + }, + _initPath: function _initPath(pathList) { + if (!pathList) return; + var paths = this.paths; + paths.clear(); + for (var uuid in pathList) { + var info = pathList[uuid]; + var path = info[0]; + var type = info[1]; + var isSubAsset = 3 === info.length; + var assetInfo = this.assetInfos.get(uuid); + assetInfo.path = path; + assetInfo.ctor = js._getClassById(type); + paths.has(path) ? isSubAsset ? paths.get(path).push(assetInfo) : paths.get(path).splice(0, 0, assetInfo) : paths.add(path, [ assetInfo ]); + } + }, + _initScene: function _initScene(sceneList) { + if (!sceneList) return; + var scenes = this.scenes; + scenes.clear(); + var assetInfos = this.assetInfos; + for (var sceneName in sceneList) { + var uuid = sceneList[sceneName]; + var assetInfo = assetInfos.get(uuid); + assetInfo.url = sceneName; + scenes.add(sceneName, assetInfo); + } + }, + _initPackage: function _initPackage(packageList) { + if (!packageList) return; + var assetInfos = this.assetInfos; + for (var packUuid in packageList) { + var uuids = packageList[packUuid]; + var pack = { + uuid: packUuid, + packs: uuids, + ext: ".json" + }; + assetInfos.add(packUuid, pack); + for (var i = 0, l = uuids.length; i < l; i++) { + var uuid = uuids[i]; + var assetInfo = assetInfos.get(uuid); + var assetPacks = assetInfo.packs; + assetPacks ? 1 === l ? assetPacks.splice(0, 0, pack) : assetPacks.push(pack) : assetInfo.packs = [ pack ]; + } + } + }, + _initVersion: function _initVersion(versions) { + if (!versions) return; + var assetInfos = this.assetInfos; + var entries = versions["import"]; + if (entries) for (var i = 0, l = entries.length; i < l; i += 2) { + var uuid = entries[i]; + var assetInfo = assetInfos.get(uuid); + assetInfo.ver = entries[i + 1]; + } + entries = versions["native"]; + if (entries) for (var i = 0, l = entries.length; i < l; i += 2) { + var uuid = entries[i]; + var assetInfo = assetInfos.get(uuid); + assetInfo.nativeVer = entries[i + 1]; + } + }, + _initRedirect: function _initRedirect(redirect) { + if (!redirect) return; + var assetInfos = this.assetInfos; + for (var i = 0, l = redirect.length; i < l; i += 2) { + var uuid = redirect[i]; + var assetInfo = assetInfos.get(uuid); + assetInfo.redirect = redirect[i + 1]; + } + }, + getInfoWithPath: function getInfoWithPath(path, type) { + if (!path) return null; + path = normalize(path); + var items = this.paths.get(path); + if (items) { + if (!type) return items[0]; + for (var i = 0, l = items.length; i < l; i++) { + var assetInfo = items[i]; + if (js.isChildClassOf(assetInfo.ctor, type)) return assetInfo; + } + } + return null; + }, + getDirWithPath: function getDirWithPath(path, type, out) { + path = normalize(path); + "/" === path[path.length - 1] && (path = path.slice(0, -1)); + var infos = out || []; + function isMatchByWord(path, test) { + if (path.length > test.length) { + var nextAscii = path.charCodeAt(test.length); + return 47 === nextAscii; + } + return true; + } + this.paths.forEach((function(items, p) { + if (p.startsWith(path) && isMatchByWord(p, path) || !path) for (var i = 0, l = items.length; i < l; i++) { + var entry = items[i]; + type && !js.isChildClassOf(entry.ctor, type) || infos.push(entry); + } + })); + return infos; + }, + getAssetInfo: function getAssetInfo(uuid) { + return this.assetInfos.get(uuid); + }, + getSceneInfo: function getSceneInfo(name) { + name.endsWith(".fire") || (name += ".fire"); + "/" === name[0] || name.startsWith("db://") || (name = "/" + name); + var info = this.scenes.find((function(val, key) { + return key.endsWith(name); + })); + return info; + }, + destroy: function destroy() { + this.paths.destroy(); + this.scenes.destroy(); + this.assetInfos.destroy(); + } + }; + false; + module.exports = Config; + }), { + "../platform/js": 142, + "./cache": 31, + "./helper": 44, + "./utilities": 56 + } ], + 33: [ (function(require, module, exports) { + "use strict"; + var _deserializeCompiled = _interopRequireWildcard(require("../platform/deserialize-compiled")); + function _getRequireWildcardCache(nodeInterop) { + if ("function" !== typeof WeakMap) return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); + } + function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) return obj; + if (null === obj || "object" !== typeof obj && "function" !== typeof obj) return { + default: obj + }; + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) return cache.get(obj); + var newObj = {}; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) if ("default" !== key && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + desc && (desc.get || desc.set) ? Object.defineProperty(newObj, key, desc) : newObj[key] = obj[key]; + } + newObj["default"] = obj; + cache && cache.set(obj, newObj); + return newObj; + } + var Cache = require("./cache"); + var deserialize = require("./deserialize"); + var _require = require("./shared"), files = _require.files, parsed = _require.parsed; + var dependUtil = { + _depends: new Cache(), + init: function init() { + this._depends.clear(); + }, + getNativeDep: function getNativeDep(uuid) { + var depend = this._depends.get(uuid); + if (depend) return depend.nativeDep && Object.assign({}, depend.nativeDep); + return null; + }, + getDeps: function getDeps(uuid) { + if (this._depends.has(uuid)) return this._depends.get(uuid).deps; + return []; + }, + getDepsRecursively: function getDepsRecursively(uuid) { + var exclude = Object.create(null), depends = []; + this._descend(uuid, exclude, depends); + return depends; + }, + _descend: function _descend(uuid, exclude, depends) { + var deps = this.getDeps(uuid); + for (var i = 0; i < deps.length; i++) { + var depend = deps[i]; + if (!exclude[depend]) { + exclude[depend] = true; + depends.push(depend); + this._descend(depend, exclude, depends); + } + } + }, + remove: function remove(uuid) { + this._depends.remove(uuid); + }, + parse: function parse(uuid, json) { + var out = null; + if (Array.isArray(json) || json.__type__) { + if (out = this._depends.get(uuid)) return out; + if (Array.isArray(json) && (false, !(0, _deserializeCompiled.hasNativeDep)(json))) out = { + deps: this._parseDepsFromJson(json) + }; else try { + var asset = deserialize(json); + out = this._parseDepsFromAsset(asset); + out.nativeDep && (out.nativeDep.uuid = uuid); + parsed.add(uuid + "@import", asset); + } catch (e) { + files.remove(uuid + "@import"); + out = { + deps: [] + }; + } + } else { + if ((true, out = this._depends.get(uuid)) && out.parsedFromExistAsset) return out; + out = this._parseDepsFromAsset(json); + } + this._depends.add(uuid, out); + return out; + }, + _parseDepsFromAsset: function _parseDepsFromAsset(asset) { + var out = { + deps: [], + parsedFromExistAsset: true, + preventPreloadNativeObject: asset.constructor.preventPreloadNativeObject, + preventDeferredLoadDependents: asset.constructor.preventDeferredLoadDependents + }; + var deps = asset.__depends__; + for (var i = 0, l = deps.length; i < l; i++) { + var dep = deps[i].uuid; + out.deps.push(dep); + } + asset.__nativeDepend__ && (out.nativeDep = asset._nativeDep); + return out; + }, + _parseDepsFromJson: (false, function(json) { + var depends = (0, _deserializeCompiled.getDependUuidList)(json); + depends.forEach((function(uuid, index) { + return depends[index] = cc.assetManager.utils.decodeUuid(uuid); + })); + return depends; + }) + }; + module.exports = dependUtil; + }), { + "../platform/deserialize-compiled": 136, + "./cache": 31, + "./deserialize": 35, + "./shared": 53 + } ], + 34: [ (function(require, module, exports) { + "use strict"; + var js = require("../platform/js"); + require("../CCDirector"); + var utilities = require("./utilities"); + var dependUtil = require("./depend-util"); + var releaseManager = require("./releaseManager"); + var downloader = require("./downloader"); + var factory = require("./factory"); + var helper = require("./helper"); + var ImageFmts = [ ".png", ".jpg", ".bmp", ".jpeg", ".gif", ".ico", ".tiff", ".webp", ".image", ".pvr", ".pkm" ]; + var AudioFmts = [ ".mp3", ".ogg", ".wav", ".m4a" ]; + function GetTrue() { + return true; + } + var md5Pipe = { + transformURL: function transformURL(url) { + var uuid = helper.getUuidFromURL(url); + if (!uuid) return url; + var bundle = cc.assetManager.bundles.find((function(b) { + return !!b.getAssetInfo(uuid); + })); + if (!bundle) return url; + var hashValue = ""; + var info = bundle.getAssetInfo(uuid); + hashValue = url.startsWith(bundle.base + bundle._config.nativeBase) ? info.nativeVer || "" : info.ver || ""; + if (!hashValue || -1 !== url.indexOf(hashValue)) return url; + var hashPatchInFolder = false; + ".ttf" === cc.path.extname(url) && (hashPatchInFolder = true); + if (hashPatchInFolder) { + var dirname = cc.path.dirname(url); + var basename = cc.path.basename(url); + url = dirname + "." + hashValue + "/" + basename; + } else url = url.replace(/.*[/\\][0-9a-fA-F]{2}[/\\]([0-9a-fA-F-]{8,})/, (function(match, uuid) { + return match + "." + hashValue; + })); + return url; + } + }; + var loader = { + onProgress: null, + _autoReleaseSetting: Object.create(null), + get _cache() { + return cc.assetManager.assets._map; + }, + load: function load(resources, progressCallback, completeCallback) { + if (void 0 === completeCallback && void 0 !== progressCallback) { + completeCallback = progressCallback; + progressCallback = null; + } + resources = Array.isArray(resources) ? resources : [ resources ]; + for (var i = 0; i < resources.length; i++) { + var item = resources[i]; + if ("string" === typeof item) resources[i] = { + url: item, + __isNative__: true + }; else { + if (item.type) { + item.ext = "." + item.type; + item.type = void 0; + } + item.url && (item.__isNative__ = true); + } + } + var images = []; + var audios = []; + cc.assetManager.loadAny(resources, null, (function(finish, total, item) { + item.content && (ImageFmts.includes(item.ext) ? images.push(item.content) : AudioFmts.includes(item.ext) && audios.push(item.content)); + progressCallback && progressCallback(finish, total, item); + }), (function(err, _native) { + var res = null; + if (!err) { + _native = Array.isArray(_native) ? _native : [ _native ]; + for (var i = 0; i < _native.length; i++) { + var item = _native[i]; + if (!(item instanceof cc.Asset)) { + var asset = item; + var url = resources[i].url; + images.includes(asset) ? factory.create(url, item, ".png", null, (function(err, image) { + asset = _native[i] = image; + })) : audios.includes(asset) && factory.create(url, item, ".mp3", null, (function(err, audio) { + asset = _native[i] = audio; + })); + cc.assetManager.assets.add(url, asset); + } + } + if (_native.length > 1) { + var map = Object.create(null); + _native.forEach((function(asset) { + map[asset._uuid] = asset; + })); + res = { + isCompleted: GetTrue, + _map: map + }; + } else res = _native[0]; + } + completeCallback && completeCallback(err, res); + })); + }, + getXMLHttpRequest: function getXMLHttpRequest() { + return new XMLHttpRequest(); + }, + _parseLoadResArgs: utilities.parseLoadResArgs, + getItem: function getItem(key) { + return cc.assetManager.assets.has(key) ? { + content: cc.assetManager.assets.get(key) + } : null; + }, + loadRes: function loadRes(url, type, progressCallback, completeCallback) { + var _this$_parseLoadResAr = this._parseLoadResArgs(type, progressCallback, completeCallback), type = _this$_parseLoadResAr.type, onProgress = _this$_parseLoadResAr.onProgress, onComplete = _this$_parseLoadResAr.onComplete; + var extname = cc.path.extname(url); + extname && (url = url.slice(0, -extname.length)); + cc.resources.load(url, type, onProgress, onComplete); + }, + loadResArray: function loadResArray(urls, type, progressCallback, completeCallback) { + var _this$_parseLoadResAr2 = this._parseLoadResArgs(type, progressCallback, completeCallback), type = _this$_parseLoadResAr2.type, onProgress = _this$_parseLoadResAr2.onProgress, onComplete = _this$_parseLoadResAr2.onComplete; + urls.forEach((function(url, i) { + var extname = cc.path.extname(url); + extname && (urls[i] = url.slice(0, -extname.length)); + })); + cc.resources.load(urls, type, onProgress, onComplete); + }, + loadResDir: function loadResDir(url, type, progressCallback, completeCallback) { + var _this$_parseLoadResAr3 = this._parseLoadResArgs(type, progressCallback, completeCallback), type = _this$_parseLoadResAr3.type, onProgress = _this$_parseLoadResAr3.onProgress, onComplete = _this$_parseLoadResAr3.onComplete; + cc.resources.loadDir(url, type, onProgress, (function(err, assets) { + var urls = []; + if (!err) { + var infos = cc.resources.getDirWithPath(url, type); + urls = infos.map((function(info) { + return info.path; + })); + } + onComplete && onComplete(err, assets, urls); + })); + }, + getRes: function getRes(url, type) { + return cc.assetManager.assets.has(url) ? cc.assetManager.assets.get(url) : cc.resources.get(url, type); + }, + getResCount: function getResCount() { + return cc.assetManager.assets.count; + }, + getDependsRecursively: function getDependsRecursively(owner) { + if (!owner) return []; + return dependUtil.getDepsRecursively("string" === typeof owner ? owner : owner._uuid).concat([ owner._uuid ]); + }, + get assetLoader() { + true; + cc.error("cc.loader.assetLoader was removed, assetLoader and md5Pipe were merged into cc.assetManager.transformPipeline"); + }, + get md5Pipe() { + return md5Pipe; + }, + get downloader() { + return cc.assetManager.downloader; + }, + get loader() { + return cc.assetManager.parser; + }, + addDownloadHandlers: function addDownloadHandlers(extMap) { + true; + cc.warn("`cc.loader.addDownloadHandlers` is deprecated, please use `cc.assetManager.downloader.register` instead"); + var handler = Object.create(null); + for (var type in extMap) { + var func = extMap[type]; + handler["." + type] = function(url, options, onComplete) { + func({ + url: url + }, onComplete); + }; + } + cc.assetManager.downloader.register(handler); + }, + addLoadHandlers: function addLoadHandlers(extMap) { + true; + cc.warn("`cc.loader.addLoadHandlers` is deprecated, please use `cc.assetManager.parser.register` instead"); + var handler = Object.create(null); + for (var type in extMap) { + var func = extMap[type]; + handler["." + type] = function(file, options, onComplete) { + func({ + content: file + }, onComplete); + }; + } + cc.assetManager.parser.register(handler); + }, + flowInDeps: function flowInDeps() { + true; + cc.error("cc.loader.flowInDeps was removed"); + }, + release: function release(asset) { + if (Array.isArray(asset)) for (var i = 0; i < asset.length; i++) { + var key = asset[i]; + "string" === typeof key && (key = cc.assetManager.assets.get(key)); + var isBuiltin = cc.assetManager.builtins._assets.find((function(assets) { + return assets.find((function(builtinAsset) { + return builtinAsset === key; + })); + })); + if (isBuiltin) continue; + cc.assetManager.releaseAsset(key); + } else if (asset) { + "string" === typeof asset && (asset = cc.assetManager.assets.get(asset)); + var _isBuiltin = cc.assetManager.builtins._assets.find((function(assets) { + return assets.find((function(builtinAsset) { + return builtinAsset === asset; + })); + })); + if (_isBuiltin) return; + cc.assetManager.releaseAsset(asset); + } + }, + releaseAsset: function releaseAsset(asset) { + cc.assetManager.releaseAsset(asset); + }, + releaseRes: function releaseRes(url, type) { + cc.resources.release(url, type); + }, + releaseResDir: function releaseResDir() { + true; + cc.error("cc.loader.releaseResDir was removed, please use cc.assetManager.releaseAsset instead"); + }, + releaseAll: function releaseAll() { + cc.assetManager.releaseAll(); + cc.assetManager.assets.clear(); + }, + removeItem: function removeItem(key) { + cc.assetManager.assets.remove(key); + }, + setAutoRelease: function setAutoRelease(asset, autoRelease) { + "object" === typeof asset && (asset = asset._uuid); + this._autoReleaseSetting[asset] = !!autoRelease; + }, + setAutoReleaseRecursively: function setAutoReleaseRecursively(asset, autoRelease) { + "object" === typeof asset && (asset = asset._uuid); + autoRelease = !!autoRelease; + this._autoReleaseSetting[asset] = autoRelease; + var depends = dependUtil.getDepsRecursively(asset); + for (var i = 0; i < depends.length; i++) { + var depend = depends[i]; + this._autoReleaseSetting[depend] = autoRelease; + } + }, + isAutoRelease: function isAutoRelease(asset) { + "object" === typeof asset && (asset = asset._uuid); + return !!this._autoReleaseSetting[asset]; + } + }; + downloader.loadSubpackage = function(name, completeCallback) { + cc.assetManager.loadBundle(name, null, completeCallback); + }; + var AssetLibrary = { + init: function init(options) { + options.importBase = options.libraryPath; + options.nativeBase = options.rawAssetsBase; + cc.assetManager.init(options); + if (options.rawAssets) { + var resources = new cc.AssetManager.Bundle(); + resources.init({ + name: cc.AssetManager.BuiltinBundleName.RESOURCES, + importBase: options.importBase, + nativeBase: options.nativeBase, + paths: options.rawAssets.assets, + uuids: Object.keys(options.rawAssets.assets) + }); + } + }, + loadAsset: function loadAsset(uuid, onComplete) { + cc.assetManager.loadAny(uuid, onComplete); + }, + getLibUrlNoExt: function getLibUrlNoExt() { + true; + cc.error("cc.AssetLibrary.getLibUrlNoExt was removed, if you want to transform url, please use cc.assetManager.utils.getUrlWithUuid instead"); + }, + queryAssetInfo: function queryAssetInfo() { + true; + cc.error("cc.AssetLibrary.queryAssetInfo was removed, only available in the editor by using cc.assetManager.editorExtend.queryAssetInfo"); + } + }; + cc.url = { + normalize: function normalize(url) { + cc.warnID(1400, "cc.url.normalize", "cc.assetManager.utils.normalize"); + return cc.assetManager.utils.normalize(url); + }, + raw: function raw(url) { + cc.warnID(1400, "cc.url.raw", "cc.resources.load"); + if (url.startsWith("resources/")) return cc.assetManager._transform({ + path: cc.path.changeExtname(url.substr(10)), + bundle: cc.AssetManager.BuiltinBundleName.RESOURCES, + __isNative__: true, + ext: cc.path.extname(url) + }); + return ""; + } + }; + var onceWarns = { + loader: true, + assetLibrary: true + }; + Object.defineProperties(cc, { + loader: { + get: function get() { + true; + if (onceWarns.loader) { + onceWarns.loader = false; + cc.log("cc.loader is deprecated, use cc.assetManager instead please. See https://docs.cocos.com/creator/manual/zh/release-notes/asset-manager-upgrade-guide.html"); + } + return loader; + } + }, + AssetLibrary: { + get: function get() { + true; + if (onceWarns.assetLibrary) { + onceWarns.assetLibrary = false; + cc.log("cc.AssetLibrary is deprecated, use cc.assetManager instead please. See https://docs.cocos.com/creator/manual/zh/release-notes/asset-manager-upgrade-guide.html"); + } + return AssetLibrary; + } + }, + LoadingItems: { + get: function get() { + cc.warnID(1400, "cc.LoadingItems", "cc.AssetManager.Task"); + return cc.AssetManager.Task; + } + }, + Pipeline: { + get: function get() { + cc.warnID(1400, "cc.Pipeline", "cc.AssetManager.Pipeline"); + return cc.AssetManager.Pipeline; + } + } + }); + js.obsolete(cc, "cc.RawAsset", "cc.Asset"); + js.obsolete(cc.Asset.prototype, "cc.Asset.url", "nativeUrl"); + Object.defineProperties(cc.macro, { + DOWNLOAD_MAX_CONCURRENT: { + get: function get() { + return cc.assetManager.downloader.maxConcurrency; + }, + set: function set(val) { + cc.assetManager.downloader.maxConcurrency = val; + } + } + }); + Object.assign(cc.director, { + _getSceneUuid: function _getSceneUuid(sceneName) { + cc.assetManager.main.getSceneInfo(sceneName); + } + }); + Object.defineProperties(cc.game, { + _sceneInfos: { + get: function get() { + var scenes = []; + cc.assetManager.main._config.scenes.forEach((function(val) { + scenes.push(val); + })); + return scenes; + } + } + }); + var parseParameters = utilities.parseParameters; + utilities.parseParameters = function(options, onProgress, onComplete) { + var result = parseParameters(options, onProgress, onComplete); + result.onProgress = result.onProgress || loader.onProgress; + return result; + }; + var autoRelease = releaseManager._autoRelease; + releaseManager._autoRelease = function() { + autoRelease.apply(this, arguments); + var releaseSettings = loader._autoReleaseSetting; + var keys = Object.keys(releaseSettings); + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (true === releaseSettings[key]) { + var asset = cc.assetManager.assets.get(key); + asset && releaseManager.tryRelease(asset); + } + } + }; + }), { + "../CCDirector": 22, + "../platform/js": 142, + "./depend-util": 33, + "./downloader": 40, + "./factory": 41, + "./helper": 44, + "./releaseManager": 51, + "./utilities": 56 + } ], + 35: [ (function(require, module, exports) { + "use strict"; + var helper = require("./helper"); + var MissingClass = false; + require("../platform/deserialize"); + function deserialize(json, options) { + var classFinder, missingClass; + false; + classFinder = cc._MissingScript.safeFindClass; + var pool = null; + var _require, deserializeForCompiled; + var deserializeForEditor; + true; + pool = cc.deserialize.Details.pool; + var tdInfo = pool.get(); + var asset; + try { + asset = cc.deserialize(json, tdInfo, { + classFinder: classFinder, + customEnv: options + }); + } catch (e) { + pool.put(tdInfo); + throw e; + } + false; + var uuidList = tdInfo.uuidList; + var objList = tdInfo.uuidObjList; + var propList = tdInfo.uuidPropList; + var depends = []; + for (var i = 0; i < uuidList.length; i++) { + var dependUuid = uuidList[i]; + depends[i] = { + uuid: helper.decodeUuid(dependUuid), + owner: objList[i], + prop: propList[i] + }; + } + asset.__depends__ = depends; + asset._native && (asset.__nativeDepend__ = true); + pool.put(tdInfo); + return asset; + } + module.exports = deserialize; + }), { + "../platform/deserialize": 137, + "../platform/deserialize-compiled": 136, + "../platform/deserialize-editor": void 0, + "./helper": 44 + } ], + 36: [ (function(require, module, exports) { + "use strict"; + var __audioSupport = cc.sys.__audioSupport; + var _require = require("./utilities"), parseParameters = _require.parseParameters; + function downloadDomAudio(url, options, onComplete) { + var _parseParameters = parseParameters(options, void 0, onComplete), options = _parseParameters.options, onComplete = _parseParameters.onComplete; + var dom = document.createElement("audio"); + dom.src = url; + var clearEvent = function clearEvent() { + clearTimeout(timer); + dom.removeEventListener("canplaythrough", success, false); + dom.removeEventListener("error", failure, false); + __audioSupport.USE_LOADER_EVENT && dom.removeEventListener(__audioSupport.USE_LOADER_EVENT, success, false); + }; + var timer = setTimeout((function() { + 0 === dom.readyState ? failure() : success(); + }), 8e3); + var success = function success() { + clearEvent(); + onComplete && onComplete(null, dom); + }; + var failure = function failure() { + clearEvent(); + var message = "load audio failure - " + url; + cc.log(message); + onComplete && onComplete(new Error(message)); + }; + dom.addEventListener("canplaythrough", success, false); + dom.addEventListener("error", failure, false); + __audioSupport.USE_LOADER_EVENT && dom.addEventListener(__audioSupport.USE_LOADER_EVENT, success, false); + return dom; + } + module.exports = downloadDomAudio; + }), { + "./utilities": 56 + } ], + 37: [ (function(require, module, exports) { + "use strict"; + var _require = require("./utilities"), parseParameters = _require.parseParameters; + function downloadDomImage(url, options, onComplete) { + var _parseParameters = parseParameters(options, void 0, onComplete), options = _parseParameters.options, onComplete = _parseParameters.onComplete; + var img = new Image(); + "file:" !== window.location.protocol && (img.crossOrigin = "anonymous"); + function loadCallback() { + img.removeEventListener("load", loadCallback); + img.removeEventListener("error", errorCallback); + onComplete && onComplete(null, img); + } + function errorCallback() { + img.removeEventListener("load", loadCallback); + img.removeEventListener("error", errorCallback); + onComplete && onComplete(new Error(cc.debug.getError(4930, url))); + } + img.addEventListener("load", loadCallback); + img.addEventListener("error", errorCallback); + img.src = url; + return img; + } + module.exports = downloadDomImage; + }), { + "./utilities": 56 + } ], + 38: [ (function(require, module, exports) { + "use strict"; + var _require = require("./utilities"), parseParameters = _require.parseParameters; + function downloadFile(url, options, onProgress, onComplete) { + var _parseParameters = parseParameters(options, onProgress, onComplete), options = _parseParameters.options, onProgress = _parseParameters.onProgress, onComplete = _parseParameters.onComplete; + var xhr = new XMLHttpRequest(), errInfo = "download failed: " + url + ", status: "; + xhr.open("GET", url, true); + void 0 !== options.responseType && (xhr.responseType = options.responseType); + void 0 !== options.withCredentials && (xhr.withCredentials = options.withCredentials); + void 0 !== options.mimeType && xhr.overrideMimeType && xhr.overrideMimeType(options.mimeType); + void 0 !== options.timeout && (xhr.timeout = options.timeout); + if (options.header) for (var header in options.header) xhr.setRequestHeader(header, options.header[header]); + xhr.onload = function() { + 200 === xhr.status || 0 === xhr.status ? onComplete && onComplete(null, xhr.response) : onComplete && onComplete(new Error(errInfo + xhr.status + "(no response)")); + }; + onProgress && (xhr.onprogress = function(e) { + e.lengthComputable && onProgress(e.loaded, e.total); + }); + xhr.onerror = function() { + onComplete && onComplete(new Error(errInfo + xhr.status + "(error)")); + }; + xhr.ontimeout = function() { + onComplete && onComplete(new Error(errInfo + xhr.status + "(time out)")); + }; + xhr.onabort = function() { + onComplete && onComplete(new Error(errInfo + xhr.status + "(abort)")); + }; + xhr.send(null); + return xhr; + } + module.exports = downloadFile; + }), { + "./utilities": 56 + } ], + 39: [ (function(require, module, exports) { + "use strict"; + var _require = require("./utilities"), parseParameters = _require.parseParameters; + var downloaded = {}; + function downloadScript(url, options, onComplete) { + var _parseParameters = parseParameters(options, void 0, onComplete), options = _parseParameters.options, onComplete = _parseParameters.onComplete; + if (downloaded[url]) return onComplete && onComplete(null); + var d = document, s = document.createElement("script"); + "file:" !== window.location.protocol && (s.crossOrigin = "anonymous"); + s.async = options.async; + s.src = url; + function loadHandler() { + s.parentNode.removeChild(s); + s.removeEventListener("load", loadHandler, false); + s.removeEventListener("error", errorHandler, false); + downloaded[url] = true; + onComplete && onComplete(null); + } + function errorHandler() { + s.parentNode.removeChild(s); + s.removeEventListener("load", loadHandler, false); + s.removeEventListener("error", errorHandler, false); + onComplete && onComplete(new Error(cc.debug.getError(4928, url))); + } + s.addEventListener("load", loadHandler, false); + s.addEventListener("error", errorHandler, false); + d.body.appendChild(s); + } + module.exports = downloadScript; + }), { + "./utilities": 56 + } ], + 40: [ (function(require, module, exports) { + "use strict"; + var js = require("../platform/js"); + var debug = require("../CCDebug"); + var _require = require("./font-loader"), loadFont = _require.loadFont; + var callInNextTick = require("../platform/utils").callInNextTick; + var downloadDomImage = require("./download-dom-image"); + var downloadDomAudio = require("./download-dom-audio"); + var downloadFile = require("./download-file"); + var downloadScript = require("./download-script.js"); + var Cache = require("./cache"); + var _require2 = require("./shared"), files = _require2.files; + var _require3 = require("../platform/CCSys"), __audioSupport = _require3.__audioSupport, capabilities = _require3.capabilities; + var _require4 = require("./utilities"), urlAppendTimestamp = _require4.urlAppendTimestamp, retry = _require4.retry; + var REGEX = /^(?:\w+:\/\/|\.+\/).+/; + var formatSupport = __audioSupport.format || []; + var unsupported = function unsupported(url, options, onComplete) { + onComplete(new Error(debug.getError(4927))); + }; + var downloadAudio = function downloadAudio(url, options, onComplete) { + options.audioLoadMode !== cc.AudioClip.LoadMode.DOM_AUDIO ? downloadArrayBuffer(url, options, onComplete) : downloadDomAudio(url, options, onComplete); + }; + var downloadAudio = 0 === formatSupport.length ? unsupported : __audioSupport.WEB_AUDIO ? downloadAudio : downloadDomAudio; + var downloadImage = function downloadImage(url, options, onComplete) { + var func = capabilities.imageBitmap && cc.macro.ALLOW_IMAGE_BITMAP ? downloadBlob : downloadDomImage; + func.apply(this, arguments); + }; + var downloadBlob = function downloadBlob(url, options, onComplete) { + options.responseType = "blob"; + downloadFile(url, options, options.onFileProgress, onComplete); + }; + var downloadJson = function downloadJson(url, options, onComplete) { + options.responseType = "json"; + downloadFile(url, options, options.onFileProgress, (function(err, data) { + if (!err && "string" === typeof data) try { + data = JSON.parse(data); + } catch (e) { + err = e; + } + onComplete && onComplete(err, data); + })); + }; + var downloadArrayBuffer = function downloadArrayBuffer(url, options, onComplete) { + options.responseType = "arraybuffer"; + downloadFile(url, options, options.onFileProgress, onComplete); + }; + var downloadText = function downloadText(url, options, onComplete) { + options.responseType = "text"; + downloadFile(url, options, options.onFileProgress, onComplete); + }; + var downloadVideo = function downloadVideo(url, options, onComplete) { + onComplete(null, url); + }; + var downloadBundle = function downloadBundle(nameOrUrl, options, onComplete) { + var bundleName = cc.path.basename(nameOrUrl); + var url = nameOrUrl; + REGEX.test(url) || (url = "assets/" + bundleName); + var version = options.version || downloader.bundleVers[bundleName]; + var count = 0; + var config = url + "/config." + (version ? version + "." : "") + "json"; + var out = null, error = null; + downloadJson(config, options, (function(err, response) { + err && (error = err); + out = response; + out && (out.base = url + "/"); + count++; + 2 === count && onComplete(error, out); + })); + var js = url + "/index." + (version ? version + "." : "") + "js"; + downloadScript(js, options, (function(err) { + err && (error = err); + count++; + 2 === count && onComplete(error, out); + })); + }; + var _downloading = new Cache(); + var _queue = []; + var _queueDirty = false; + var _totalNum = 0; + var _totalNumThisPeriod = 0; + var _lastDate = -1; + var _checkNextPeriod = false; + var updateTime = function updateTime() { + var now = Date.now(); + var interval = cc.director._deltaTime > downloader._maxInterval ? downloader._maxInterval : cc.director._deltaTime; + if (now - _lastDate > 1e3 * interval) { + _totalNumThisPeriod = 0; + _lastDate = now; + } + }; + var handleQueue = function handleQueue(maxConcurrency, maxRequestsPerFrame) { + _checkNextPeriod = false; + updateTime(); + while (_queue.length > 0 && _totalNum < maxConcurrency && _totalNumThisPeriod < maxRequestsPerFrame) { + if (_queueDirty) { + _queue.sort((function(a, b) { + return a.priority - b.priority; + })); + _queueDirty = false; + } + var nextOne = _queue.pop(); + if (!nextOne) break; + _totalNum++; + _totalNumThisPeriod++; + nextOne.invoke(); + } + if (_queue.length > 0 && _totalNum < maxConcurrency) { + callInNextTick(handleQueue, maxConcurrency, maxRequestsPerFrame); + _checkNextPeriod = true; + } + }; + var downloader = { + _remoteServerAddress: "", + _maxInterval: 1 / 30, + get remoteServerAddress() { + return this._remoteServerAddress; + }, + maxConcurrency: 6, + maxRequestsPerFrame: 6, + maxRetryCount: 3, + appendTimeStamp: false, + limited: true, + retryInterval: 2e3, + bundleVers: null, + downloadDomImage: downloadDomImage, + downloadDomAudio: downloadDomAudio, + downloadFile: downloadFile, + downloadScript: downloadScript, + init: function init(bundleVers, remoteServerAddress) { + _downloading.clear(); + _queue.length = 0; + this._remoteServerAddress = remoteServerAddress || ""; + this.bundleVers = bundleVers || Object.create(null); + }, + register: function register(type, handler) { + "object" === typeof type ? js.mixin(downloaders, type) : downloaders[type] = handler; + }, + download: function download(id, url, type, options, onComplete) { + var func = downloaders[type] || downloaders["default"]; + var self = this; + var file, downloadCallbacks; + if (file = files.get(id)) onComplete(null, file); else if (downloadCallbacks = _downloading.get(id)) { + downloadCallbacks.push(onComplete); + for (var i = 0, l = _queue.length; i < l; i++) { + var item = _queue[i]; + if (item.id === id) { + var priority = options.priority || 0; + if (item.priority < priority) { + item.priority = priority; + _queueDirty = true; + } + return; + } + } + } else { + var process = function process(index, callback) { + 0 === index && _downloading.add(id, [ onComplete ]); + if (!self.limited) return func(urlAppendTimestamp(url), options, callback); + updateTime(); + function invoke() { + func(urlAppendTimestamp(url), options, (function() { + _totalNum--; + if (!_checkNextPeriod && _queue.length > 0) { + callInNextTick(handleQueue, maxConcurrency, maxRequestsPerFrame); + _checkNextPeriod = true; + } + callback.apply(this, arguments); + })); + } + if (_totalNum < maxConcurrency && _totalNumThisPeriod < maxRequestsPerFrame) { + invoke(); + _totalNum++; + _totalNumThisPeriod++; + } else { + _queue.push({ + id: id, + priority: options.priority || 0, + invoke: invoke + }); + _queueDirty = true; + if (!_checkNextPeriod && _totalNum < maxConcurrency) { + callInNextTick(handleQueue, maxConcurrency, maxRequestsPerFrame); + _checkNextPeriod = true; + } + } + }; + var finale = function finale(err, result) { + err || files.add(id, result); + var callbacks = _downloading.remove(id); + for (var _i = 0, _l = callbacks.length; _i < _l; _i++) callbacks[_i](err, result); + }; + var maxRetryCount = "undefined" !== typeof options.maxRetryCount ? options.maxRetryCount : this.maxRetryCount; + var maxConcurrency = "undefined" !== typeof options.maxConcurrency ? options.maxConcurrency : this.maxConcurrency; + var maxRequestsPerFrame = "undefined" !== typeof options.maxRequestsPerFrame ? options.maxRequestsPerFrame : this.maxRequestsPerFrame; + retry(process, maxRetryCount, this.retryInterval, finale); + } + } + }; + var downloaders = { + ".png": downloadImage, + ".jpg": downloadImage, + ".bmp": downloadImage, + ".jpeg": downloadImage, + ".gif": downloadImage, + ".ico": downloadImage, + ".tiff": downloadImage, + ".webp": downloadImage, + ".image": downloadImage, + ".pvr": downloadArrayBuffer, + ".pkm": downloadArrayBuffer, + ".mp3": downloadAudio, + ".ogg": downloadAudio, + ".wav": downloadAudio, + ".m4a": downloadAudio, + ".txt": downloadText, + ".xml": downloadText, + ".vsh": downloadText, + ".fsh": downloadText, + ".atlas": downloadText, + ".tmx": downloadText, + ".tsx": downloadText, + ".json": downloadJson, + ".ExportJson": downloadJson, + ".plist": downloadText, + ".fnt": downloadText, + ".font": loadFont, + ".eot": loadFont, + ".ttf": loadFont, + ".woff": loadFont, + ".svg": loadFont, + ".ttc": loadFont, + ".mp4": downloadVideo, + ".avi": downloadVideo, + ".mov": downloadVideo, + ".mpg": downloadVideo, + ".mpeg": downloadVideo, + ".rm": downloadVideo, + ".rmvb": downloadVideo, + ".binary": downloadArrayBuffer, + ".bin": downloadArrayBuffer, + ".dbbin": downloadArrayBuffer, + ".skel": downloadArrayBuffer, + ".js": downloadScript, + bundle: downloadBundle, + default: downloadText + }; + downloader._downloaders = downloaders; + module.exports = downloader; + }), { + "../CCDebug": 21, + "../platform/CCSys": 130, + "../platform/js": 142, + "../platform/utils": 145, + "./cache": 31, + "./download-dom-audio": 36, + "./download-dom-image": 37, + "./download-file": 38, + "./download-script.js": 39, + "./font-loader": 43, + "./shared": 53, + "./utilities": 56 + } ], + 41: [ (function(require, module, exports) { + "use strict"; + var Bundle = require("./bundle"); + var Cache = require("./cache"); + var _require = require("./shared"), assets = _require.assets, bundles = _require.bundles; + var _creating = new Cache(); + function createTexture(id, data, options, onComplete) { + var out = null, err = null; + try { + out = new cc.Texture2D(); + out._nativeUrl = id; + out._nativeAsset = data; + } catch (e) { + err = e; + } + onComplete && onComplete(err, out); + } + function createAudioClip(id, data, options, onComplete) { + var out = new cc.AudioClip(); + out._nativeUrl = id; + out._nativeAsset = data; + out.duration = data.duration; + onComplete && onComplete(null, out); + } + function createJsonAsset(id, data, options, onComplete) { + var out = new cc.JsonAsset(); + out.json = data; + onComplete && onComplete(null, out); + } + function createTextAsset(id, data, options, onComplete) { + var out = new cc.TextAsset(); + out.text = data; + onComplete && onComplete(null, out); + } + function createFont(id, data, options, onComplete) { + var out = new cc.TTFFont(); + out._nativeUrl = id; + out._nativeAsset = data; + onComplete && onComplete(null, out); + } + function createBufferAsset(id, data, options, onComplete) { + var out = new cc.BufferAsset(); + out._nativeUrl = id; + out._nativeAsset = data; + onComplete && onComplete(null, out); + } + function createAsset(id, data, options, onComplete) { + var out = new cc.Asset(); + out._nativeUrl = id; + out._nativeAsset = data; + onComplete && onComplete(null, out); + } + function createBundle(id, data, options, onComplete) { + var bundle = bundles.get(data.name); + if (!bundle) { + bundle = new Bundle(); + data.base = data.base || id + "/"; + bundle.init(data); + } + onComplete && onComplete(null, bundle); + } + var factory = { + register: function register(type, handler) { + "object" === typeof type ? cc.js.mixin(producers, type) : producers[type] = handler; + }, + create: function create(id, data, type, options, onComplete) { + var func = producers[type] || producers["default"]; + var asset, creating; + if (asset = assets.get(id)) onComplete(null, asset); else if (creating = _creating.get(id)) creating.push(onComplete); else { + _creating.add(id, [ onComplete ]); + func(id, data, options, (function(err, data) { + if (!err && data instanceof cc.Asset) { + data._uuid = id; + assets.add(id, data); + } + var callbacks = _creating.remove(id); + for (var i = 0, l = callbacks.length; i < l; i++) callbacks[i](err, data); + })); + } + } + }; + var producers = { + ".png": createTexture, + ".jpg": createTexture, + ".bmp": createTexture, + ".jpeg": createTexture, + ".gif": createTexture, + ".ico": createTexture, + ".tiff": createTexture, + ".webp": createTexture, + ".image": createTexture, + ".pvr": createTexture, + ".pkm": createTexture, + ".mp3": createAudioClip, + ".ogg": createAudioClip, + ".wav": createAudioClip, + ".m4a": createAudioClip, + ".txt": createTextAsset, + ".xml": createTextAsset, + ".vsh": createTextAsset, + ".fsh": createTextAsset, + ".atlas": createTextAsset, + ".tmx": createTextAsset, + ".tsx": createTextAsset, + ".fnt": createTextAsset, + ".json": createJsonAsset, + ".ExportJson": createJsonAsset, + ".font": createFont, + ".eot": createFont, + ".ttf": createFont, + ".woff": createFont, + ".svg": createFont, + ".ttc": createFont, + ".binary": createBufferAsset, + ".bin": createBufferAsset, + ".dbbin": createBufferAsset, + ".skel": createBufferAsset, + bundle: createBundle, + default: createAsset + }; + module.exports = factory; + }), { + "./bundle": 30, + "./cache": 31, + "./shared": 53 + } ], + 42: [ (function(require, module, exports) { + "use strict"; + var packManager = require("./pack-manager"); + var Task = require("./task"); + var _require = require("./utilities"), getDepends = _require.getDepends, clear = _require.clear, forEach = _require.forEach; + var _require2 = require("./shared"), assets = _require2.assets, fetchPipeline = _require2.fetchPipeline; + function fetch(task, done) { + var firstTask = false; + if (!task.progress) { + task.progress = { + finish: 0, + total: task.input.length, + canInvoke: true + }; + firstTask = true; + } + var options = task.options, depends = [], progress = task.progress, total = progress.total; + options.__exclude__ = options.__exclude__ || Object.create(null); + task.output = []; + forEach(task.input, (function(item, cb) { + if (!item.isNative && assets.has(item.uuid)) { + var asset = assets.get(item.uuid); + asset.addRef(); + handle(item, task, asset, null, asset.__asyncLoadAssets__, depends, total, done); + return cb(); + } + packManager.load(item, task.options, (function(err, data) { + if (err) { + if (!task.isFinish) if (!cc.assetManager.force || firstTask) { + cc.error(err.message, err.stack); + progress.canInvoke = false; + done(err); + } else handle(item, task, null, null, false, depends, total, done); + } else task.isFinish || handle(item, task, null, data, !item.isNative, depends, total, done); + cb(); + })); + }), (function() { + if (task.isFinish) { + clear(task, true); + return task.dispatch("error"); + } + if (depends.length > 0) { + var subTask = Task.create({ + name: task.name + " dependencies", + input: depends, + progress: progress, + options: options, + onProgress: task.onProgress, + onError: Task.prototype.recycle, + onComplete: function onComplete(err) { + if (!err) { + task.output.push.apply(task.output, this.output); + subTask.recycle(); + } + firstTask && decreaseRef(task); + done(err); + } + }); + fetchPipeline.async(subTask); + return; + } + firstTask && decreaseRef(task); + done(); + })); + } + function decreaseRef(task) { + var output = task.output; + for (var i = 0, l = output.length; i < l; i++) output[i].content && output[i].content.decRef(false); + } + function handle(item, task, content, file, loadDepends, depends, last, done) { + var exclude = task.options.__exclude__; + var progress = task.progress; + item.content = content; + item.file = file; + task.output.push(item); + if (loadDepends) { + exclude[item.uuid] = true; + getDepends(item.uuid, file || content, exclude, depends, true, false, item.config); + progress.total = last + depends.length; + } + progress.canInvoke && task.dispatch("progress", ++progress.finish, progress.total, item); + } + module.exports = fetch; + }), { + "./pack-manager": 47, + "./shared": 53, + "./task": 54, + "./utilities": 56 + } ], + 43: [ (function(require, module, exports) { + "use strict"; + var textUtils = require("../utils/text-utils"); + var _canvasContext = null; + var _testString = "BES bswy:->@123\u4e01\u3041\u1101"; + var _fontFaces = Object.create(null); + var _intervalId = -1; + var _loadingFonts = []; + var _timeout = 3e3; + var useNativeCheck = (function() { + var nativeCheck = void 0; + return function() { + if (void 0 === nativeCheck) if (!window.FontFace) nativeCheck = false; else { + var match = /Gecko.*Firefox\/(\d+)/.exec(window.navigator.userAgent); + var safari10Match = /OS X.*Version\/10\..*Safari/.exec(window.navigator.userAgent) && /Apple/.exec(window.navigator.vendor); + nativeCheck = match ? parseInt(match[1], 10) > 42 : !safari10Match; + } + return nativeCheck; + }; + })(); + function _checkFontLoaded() { + var allFontsLoaded = true; + var now = Date.now(); + for (var i = _loadingFonts.length - 1; i >= 0; i--) { + var fontLoadHandle = _loadingFonts[i]; + var fontFamily = fontLoadHandle.fontFamilyName; + if (now - fontLoadHandle.startTime > _timeout) { + cc.warnID(4933, fontFamily); + fontLoadHandle.onComplete(null, fontFamily); + _loadingFonts.splice(i, 1); + continue; + } + var oldWidth = fontLoadHandle.refWidth; + var fontDesc = "40px " + fontFamily; + _canvasContext.font = fontDesc; + var newWidth = textUtils.safeMeasureText(_canvasContext, _testString, fontDesc); + if (oldWidth !== newWidth) { + _loadingFonts.splice(i, 1); + fontLoadHandle.onComplete(null, fontFamily); + } else allFontsLoaded = false; + } + if (allFontsLoaded) { + clearInterval(_intervalId); + _intervalId = -1; + } + } + function nativeCheckFontLoaded(start, font, callback) { + var loader = new Promise(function(resolve, reject) { + var check = function check() { + var now = Date.now(); + now - start >= _timeout ? reject() : document.fonts.load("40px " + font).then((function(fonts) { + fonts.length >= 1 ? resolve() : setTimeout(check, 100); + }), (function() { + reject(); + })); + }; + check(); + }); + var timeoutId = null, timer = new Promise(function(resolve, reject) { + timeoutId = setTimeout(reject, _timeout); + }); + Promise.race([ timer, loader ]).then((function() { + if (timeoutId) { + clearTimeout(timeoutId); + timeoutId = null; + } + callback(null, font); + }), (function() { + cc.warnID(4933, font); + callback(null, font); + })); + } + var fontLoader = { + loadFont: function loadFont(url, options, onComplete) { + var fontFamilyName = fontLoader._getFontFamily(url); + if (_fontFaces[fontFamilyName]) return onComplete(null, fontFamilyName); + if (!_canvasContext) { + var labelCanvas = document.createElement("canvas"); + labelCanvas.width = 100; + labelCanvas.height = 100; + _canvasContext = labelCanvas.getContext("2d"); + } + var fontDesc = "40px " + fontFamilyName; + _canvasContext.font = fontDesc; + var refWidth = textUtils.safeMeasureText(_canvasContext, _testString, fontDesc); + var fontStyle = document.createElement("style"); + fontStyle.type = "text/css"; + var fontStr = ""; + isNaN(fontFamilyName - 0) ? fontStr += "@font-face { font-family:" + fontFamilyName + "; src:" : fontStr += "@font-face { font-family:'" + fontFamilyName + "'; src:"; + fontStr += "url('" + url + "');"; + fontStyle.textContent = fontStr + "}"; + document.body.appendChild(fontStyle); + var preloadDiv = document.createElement("div"); + var divStyle = preloadDiv.style; + divStyle.fontFamily = fontFamilyName; + preloadDiv.innerHTML = "."; + divStyle.position = "absolute"; + divStyle.left = "-100px"; + divStyle.top = "-100px"; + document.body.appendChild(preloadDiv); + if (useNativeCheck()) nativeCheckFontLoaded(Date.now(), fontFamilyName, onComplete); else { + var fontLoadHandle = { + fontFamilyName: fontFamilyName, + refWidth: refWidth, + onComplete: onComplete, + startTime: Date.now() + }; + _loadingFonts.push(fontLoadHandle); + -1 === _intervalId && (_intervalId = setInterval(_checkFontLoaded, 100)); + } + _fontFaces[fontFamilyName] = fontStyle; + }, + _getFontFamily: function _getFontFamily(fontHandle) { + var ttfIndex = fontHandle.lastIndexOf(".ttf"); + if (-1 === ttfIndex) return fontHandle; + var slashPos = fontHandle.lastIndexOf("/"); + var fontFamilyName; + fontFamilyName = -1 === slashPos ? fontHandle.substring(0, ttfIndex) + "_LABEL" : fontHandle.substring(slashPos + 1, ttfIndex) + "_LABEL"; + -1 !== fontFamilyName.indexOf(" ") && (fontFamilyName = '"' + fontFamilyName + '"'); + return fontFamilyName; + } + }; + module.exports = fontLoader; + }), { + "../utils/text-utils": 212 + } ], + 44: [ (function(require, module, exports) { + "use strict"; + var _require = require("./shared"), bundles = _require.bundles; + var helper = { + decodeUuid: require("../utils/decode-uuid"), + getUuidFromURL: (function() { + var _uuidRegex = /.*[/\\][0-9a-fA-F]{2}[/\\]([0-9a-fA-F-]{8,})/; + return function(url) { + var matches = url.match(_uuidRegex); + if (matches) return matches[1]; + return ""; + }; + })(), + getUrlWithUuid: function getUrlWithUuid(uuid, options) { + options = options || Object.create(null); + options.__isNative__ = options.isNative; + options.ext = options.nativeExt; + var bundle = bundles.find((function(bundle) { + return bundle.getAssetInfo(uuid); + })); + bundle && (options.bundle = bundle.name); + return cc.assetManager._transform(uuid, options); + }, + isScene: function isScene(asset) { + return asset && (asset.constructor === cc.SceneAsset || asset instanceof cc.Scene); + }, + normalize: function normalize(url) { + url && (46 === url.charCodeAt(0) && 47 === url.charCodeAt(1) ? url = url.slice(2) : 47 === url.charCodeAt(0) && (url = url.slice(1))); + return url; + } + }; + module.exports = helper; + }), { + "../utils/decode-uuid": 200, + "./shared": 53 + } ], + 45: [ (function(require, module, exports) { + "use strict"; + require("./deprecated"); + require("./CCAssetManager"); + }), { + "./CCAssetManager": 28, + "./deprecated": 34 + } ], + 46: [ (function(require, module, exports) { + "use strict"; + var packManager = require("./pack-manager"); + var Pipeline = require("./pipeline"); + var parser = require("./parser"); + var _require = require("./utilities"), getDepends = _require.getDepends, cache = _require.cache, gatherAsset = _require.gatherAsset, setProperties = _require.setProperties, forEach = _require.forEach, clear = _require.clear, checkCircleReference = _require.checkCircleReference; + var _require2 = require("./shared"), assets = _require2.assets, files = _require2.files, parsed = _require2.parsed, pipeline = _require2.pipeline; + var Task = require("./task"); + function load(task, done) { + var firstTask = false; + if (!task.progress) { + task.progress = { + finish: 0, + total: task.input.length, + canInvoke: true + }; + firstTask = true; + } + var options = task.options, progress = task.progress; + options.__exclude__ = options.__exclude__ || Object.create(null); + task.output = []; + forEach(task.input, (function(item, cb) { + var subTask = Task.create({ + input: item, + onProgress: task.onProgress, + options: options, + progress: progress, + onComplete: function onComplete(err, item) { + if (err && !task.isFinish) if (!cc.assetManager.force || firstTask) { + true; + cc.error(err.message, err.stack); + progress.canInvoke = false; + done(err); + } else progress.canInvoke && task.dispatch("progress", ++progress.finish, progress.total, item); + task.output.push(item); + subTask.recycle(); + cb(); + } + }); + loadOneAssetPipeline.async(subTask); + }), (function() { + options.__exclude__ = null; + if (task.isFinish) { + clear(task, true); + return task.dispatch("error"); + } + gatherAsset(task); + clear(task, true); + done(); + })); + } + var loadOneAssetPipeline = new Pipeline("loadOneAsset", [ function fetch(task, done) { + var item = task.output = task.input; + var options = item.options, isNative = item.isNative, uuid = item.uuid, file = item.file; + var reload = options.reload; + if (file || !reload && !isNative && assets.has(uuid)) return done(); + packManager.load(item, task.options, (function(err, data) { + item.file = data; + done(err); + })); + }, function parse(task, done) { + var item = task.output = task.input, progress = task.progress, exclude = task.options.__exclude__; + var id = item.id, file = item.file, options = item.options; + if (item.isNative) parser.parse(id, file, item.ext, options, (function(err, asset) { + if (err) return done(err); + item.content = asset; + progress.canInvoke && task.dispatch("progress", ++progress.finish, progress.total, item); + files.remove(id); + parsed.remove(id); + done(); + })); else { + var uuid = item.uuid; + if (uuid in exclude) { + var _exclude$uuid = exclude[uuid], finish = _exclude$uuid.finish, content = _exclude$uuid.content, err = _exclude$uuid.err, callbacks = _exclude$uuid.callbacks; + progress.canInvoke && task.dispatch("progress", ++progress.finish, progress.total, item); + if (finish || checkCircleReference(uuid, uuid, exclude)) { + content && content.addRef && content.addRef(); + item.content = content; + done(err); + } else callbacks.push({ + done: done, + item: item + }); + } else if (!options.reload && assets.has(uuid)) { + var asset = assets.get(uuid); + if (options.__asyncLoadAssets__ || !asset.__asyncLoadAssets__) { + item.content = asset.addRef(); + progress.canInvoke && task.dispatch("progress", ++progress.finish, progress.total, item); + done(); + } else loadDepends(task, asset, done, false); + } else parser.parse(id, file, "import", options, (function(err, asset) { + if (err) return done(err); + asset._uuid = uuid; + loadDepends(task, asset, done, true); + })); + } + } ]); + function loadDepends(task, asset, done, init) { + var item = task.input, progress = task.progress; + var uuid = item.uuid, id = item.id, options = item.options, config = item.config; + var __asyncLoadAssets__ = options.__asyncLoadAssets__, cacheAsset = options.cacheAsset; + var depends = []; + asset.addRef && asset.addRef(); + getDepends(uuid, asset, Object.create(null), depends, false, __asyncLoadAssets__, config); + progress.canInvoke && task.dispatch("progress", ++progress.finish, progress.total += depends.length, item); + var repeatItem = task.options.__exclude__[uuid] = { + content: asset, + finish: false, + callbacks: [ { + done: done, + item: item + } ] + }; + var subTask = Task.create({ + input: depends, + options: task.options, + onProgress: task.onProgress, + onError: Task.prototype.recycle, + progress: progress, + onComplete: function onComplete(err) { + asset.decRef && asset.decRef(false); + asset.__asyncLoadAssets__ = __asyncLoadAssets__; + repeatItem.finish = true; + repeatItem.err = err; + if (!err) { + var assets = Array.isArray(subTask.output) ? subTask.output : [ subTask.output ]; + var map = Object.create(null); + for (var _i = 0, _l = assets.length; _i < _l; _i++) { + var dependAsset = assets[_i]; + dependAsset && (map[dependAsset instanceof cc.Asset ? dependAsset._uuid + "@import" : uuid + "@native"] = dependAsset); + } + if (init) { + var missingAsset = setProperties(uuid, asset, map); + if (!missingAsset && !asset.__onLoadInvoked__) try { + asset.onLoad && asset.onLoad(); + asset.__onLoadInvoked__ = true; + } catch (e) { + cc.error(e.message, e.stack); + } + files.remove(id); + parsed.remove(id); + cache(uuid, asset, void 0 !== cacheAsset ? cacheAsset : cc.assetManager.cacheAsset); + } else if (asset.__nativeDepend__ && !asset._nativeAsset) { + var missingAsset = setProperties(uuid, asset, map); + if (!missingAsset && !asset.__onLoadInvoked__) try { + asset.onLoad && asset.onLoad(); + asset.__onLoadInvoked__ = true; + } catch (e) { + cc.error(e.message, e.stack); + } + } + subTask.recycle(); + } + var callbacks = repeatItem.callbacks; + for (var i = 0, l = callbacks.length; i < l; i++) { + var cb = callbacks[i]; + asset.addRef && asset.addRef(); + cb.item.content = asset; + cb.done(err); + } + callbacks.length = 0; + } + }); + pipeline.async(subTask); + } + module.exports = load; + }), { + "./pack-manager": 47, + "./parser": 48, + "./pipeline": 49, + "./shared": 53, + "./task": 54, + "./utilities": 56 + } ], + 47: [ (function(require, module, exports) { + "use strict"; + var _deserializeCompiled = require("../platform/deserialize-compiled"); + var downloader = require("./downloader"); + var Cache = require("./cache"); + var js = require("../platform/js"); + var _require = require("./shared"), files = _require.files; + var _loading = new Cache(); + function isLoading(val) { + return _loading.has(val.uuid); + } + var packManager = { + unpackJson: function unpackJson(pack, json, options, onComplete) { + var out = js.createMap(true), err = null; + if (Array.isArray(json)) { + json = (0, _deserializeCompiled.unpackJSONs)(json); + json.length !== pack.length && cc.errorID(4915); + for (var i = 0; i < pack.length; i++) { + var key = pack[i] + "@import"; + out[key] = json[i]; + } + } else { + var textureType = js._getClassId(cc.Texture2D); + if (json.type === textureType) { + if (json.data) { + var datas = json.data.split("|"); + datas.length !== pack.length && cc.errorID(4915); + for (var _i = 0; _i < pack.length; _i++) out[pack[_i] + "@import"] = (0, _deserializeCompiled.packCustomObjData)(textureType, datas[_i], true); + } + } else { + err = new Error("unmatched type pack!"); + out = null; + } + } + onComplete && onComplete(err, out); + }, + init: function init() { + _loading.clear(); + }, + register: function register(type, handler) { + "object" === typeof type ? js.mixin(unpackers, type) : unpackers[type] = handler; + }, + unpack: function unpack(pack, data, type, options, onComplete) { + if (!data) { + onComplete && onComplete(new Error("package data is wrong!")); + return; + } + var unpacker = unpackers[type]; + unpacker(pack, data, options, onComplete); + }, + load: function load(item, options, onComplete) { + if (item.isNative || !item.info || !item.info.packs) return downloader.download(item.id, item.url, item.ext, item.options, onComplete); + if (files.has(item.id)) return onComplete(null, files.get(item.id)); + var packs = item.info.packs; + var pack = packs.find(isLoading); + if (pack) return _loading.get(pack.uuid).push({ + onComplete: onComplete, + id: item.id + }); + pack = packs[0]; + _loading.add(pack.uuid, [ { + onComplete: onComplete, + id: item.id + } ]); + var url = cc.assetManager._transform(pack.uuid, { + ext: pack.ext, + bundle: item.config.name + }); + downloader.download(pack.uuid, url, pack.ext, item.options, (function(err, data) { + files.remove(pack.uuid); + err && cc.error(err.message, err.stack); + packManager.unpack(pack.packs, data, pack.ext, item.options, (function(err, result) { + if (!err) for (var id in result) files.add(id, result[id]); + var callbacks = _loading.remove(pack.uuid); + for (var i = 0, l = callbacks.length; i < l; i++) { + var cb = callbacks[i]; + if (err) { + cb.onComplete(err); + continue; + } + var data = result[cb.id]; + data ? cb.onComplete(null, data) : cb.onComplete(new Error("can not retrieve data from package")); + } + })); + })); + } + }; + var unpackers = { + ".json": packManager.unpackJson + }; + module.exports = packManager; + }), { + "../platform/deserialize-compiled": 136, + "../platform/js": 142, + "./cache": 31, + "./downloader": 40, + "./shared": 53 + } ], + 48: [ (function(require, module, exports) { + "use strict"; + var plistParser = require("../platform/CCSAXParser").plistParser; + var js = require("../platform/js"); + var deserialize = require("./deserialize"); + var Cache = require("./cache"); + var _require = require("./helper"), isScene = _require.isScene; + var _require2 = require("./shared"), parsed = _require2.parsed, files = _require2.files; + var _require3 = require("../platform/CCSys"), __audioSupport = _require3.__audioSupport, capabilities = _require3.capabilities; + var _parsing = new Cache(); + var parser = { + parseImage: function parseImage(file, options, onComplete) { + if (capabilities.imageBitmap && file instanceof Blob) { + var imageOptions = {}; + imageOptions.imageOrientation = options.__flipY__ ? "flipY" : "none"; + imageOptions.premultiplyAlpha = options.__premultiplyAlpha__ ? "premultiply" : "none"; + createImageBitmap(file, imageOptions).then((function(result) { + result.flipY = !!options.__flipY__; + result.premultiplyAlpha = !!options.__premultiplyAlpha__; + onComplete && onComplete(null, result); + }), (function(err) { + onComplete && onComplete(err, null); + })); + } else onComplete && onComplete(null, file); + }, + parseAudio: function parseAudio(file, options, onComplete) { + file instanceof ArrayBuffer ? __audioSupport.context.decodeAudioData(file, (function(buffer) { + onComplete && onComplete(null, buffer); + }), (function(e) { + onComplete && onComplete(e, null); + })) : onComplete && onComplete(null, file); + }, + parsePVRTex: (function() { + var PVR_HEADER_LENGTH = 13; + var PVR_MAGIC = 55727696; + var PVR_HEADER_MAGIC = 0; + var PVR_HEADER_FORMAT = 2; + var PVR_HEADER_HEIGHT = 6; + var PVR_HEADER_WIDTH = 7; + var PVR_HEADER_MIPMAPCOUNT = 11; + var PVR_HEADER_METADATA = 12; + return function(file, options, onComplete) { + var err = null, out = null; + try { + var buffer = file instanceof ArrayBuffer ? file : file.buffer; + var header = new Int32Array(buffer, 0, PVR_HEADER_LENGTH); + if (header[PVR_HEADER_MAGIC] != PVR_MAGIC) throw new Error("Invalid magic number in PVR header"); + var width = header[PVR_HEADER_WIDTH]; + var height = header[PVR_HEADER_HEIGHT]; + var dataOffset = header[PVR_HEADER_METADATA] + 52; + var pvrtcData = new Uint8Array(buffer, dataOffset); + out = { + _data: pvrtcData, + _compressed: true, + width: width, + height: height + }; + } catch (e) { + err = e; + } + onComplete && onComplete(err, out); + }; + })(), + parsePKMTex: (function() { + var ETC_PKM_HEADER_SIZE = 16; + var ETC_PKM_FORMAT_OFFSET = 6; + var ETC_PKM_ENCODED_WIDTH_OFFSET = 8; + var ETC_PKM_ENCODED_HEIGHT_OFFSET = 10; + var ETC_PKM_WIDTH_OFFSET = 12; + var ETC_PKM_HEIGHT_OFFSET = 14; + var ETC1_RGB_NO_MIPMAPS = 0; + var ETC2_RGB_NO_MIPMAPS = 1; + var ETC2_RGBA_NO_MIPMAPS = 3; + function readBEUint16(header, offset) { + return header[offset] << 8 | header[offset + 1]; + } + return function(file, options, onComplete) { + var err = null, out = null; + try { + var buffer = file instanceof ArrayBuffer ? file : file.buffer; + var header = new Uint8Array(buffer); + var format = readBEUint16(header, ETC_PKM_FORMAT_OFFSET); + if (format !== ETC1_RGB_NO_MIPMAPS && format !== ETC2_RGB_NO_MIPMAPS && format !== ETC2_RGBA_NO_MIPMAPS) return new Error("Invalid magic number in ETC header"); + var width = readBEUint16(header, ETC_PKM_WIDTH_OFFSET); + var height = readBEUint16(header, ETC_PKM_HEIGHT_OFFSET); + var encodedWidth = readBEUint16(header, ETC_PKM_ENCODED_WIDTH_OFFSET); + var encodedHeight = readBEUint16(header, ETC_PKM_ENCODED_HEIGHT_OFFSET); + var etcData = new Uint8Array(buffer, ETC_PKM_HEADER_SIZE); + out = { + _data: etcData, + _compressed: true, + width: width, + height: height + }; + } catch (e) { + err = e; + } + onComplete && onComplete(err, out); + }; + })(), + parsePlist: function parsePlist(file, options, onComplete) { + var err = null; + var result = plistParser.parse(file); + result || (err = new Error("parse failed")); + onComplete && onComplete(err, result); + }, + parseImport: function parseImport(file, options, onComplete) { + if (!file) return onComplete && onComplete(new Error("Json is empty")); + var result, err = null; + try { + result = deserialize(file, options); + } catch (e) { + err = e; + } + onComplete && onComplete(err, result); + }, + init: function init() { + _parsing.clear(); + }, + register: function register(type, handler) { + "object" === typeof type ? js.mixin(parsers, type) : parsers[type] = handler; + }, + parse: function parse(id, file, type, options, onComplete) { + var parsedAsset, parsing, parseHandler; + if (parsedAsset = parsed.get(id)) onComplete(null, parsedAsset); else if (parsing = _parsing.get(id)) parsing.push(onComplete); else if (parseHandler = parsers[type]) { + _parsing.add(id, [ onComplete ]); + parseHandler(file, options, (function(err, data) { + err ? files.remove(id) : isScene(data) || parsed.add(id, data); + var callbacks = _parsing.remove(id); + for (var i = 0, l = callbacks.length; i < l; i++) callbacks[i](err, data); + })); + } else onComplete(null, file); + } + }; + var parsers = { + ".png": parser.parseImage, + ".jpg": parser.parseImage, + ".bmp": parser.parseImage, + ".jpeg": parser.parseImage, + ".gif": parser.parseImage, + ".ico": parser.parseImage, + ".tiff": parser.parseImage, + ".webp": parser.parseImage, + ".image": parser.parseImage, + ".pvr": parser.parsePVRTex, + ".pkm": parser.parsePKMTex, + ".mp3": parser.parseAudio, + ".ogg": parser.parseAudio, + ".wav": parser.parseAudio, + ".m4a": parser.parseAudio, + ".plist": parser.parsePlist, + import: parser.parseImport + }; + module.exports = parser; + }), { + "../platform/CCSAXParser": 128, + "../platform/CCSys": 130, + "../platform/js": 142, + "./cache": 31, + "./deserialize": 35, + "./helper": 44, + "./shared": 53 + } ], + 49: [ (function(require, module, exports) { + "use strict"; + var Task = require("./task"); + var _pipelineId = 0; + function Pipeline(name, funcs) { + if (!Array.isArray(funcs)) { + cc.warn("funcs must be an array"); + return; + } + this.id = _pipelineId++; + this.name = name; + this.pipes = []; + for (var i = 0, l = funcs.length; i < l; i++) "function" === typeof funcs[i] && this.pipes.push(funcs[i]); + } + Pipeline.prototype = { + constructor: Pipeline, + insert: function insert(func, index) { + if ("function" !== typeof func || index > this.pipes.length) { + cc.warnID(4921); + return; + } + this.pipes.splice(index, 0, func); + return this; + }, + append: function append(func) { + if ("function" !== typeof func) return; + this.pipes.push(func); + return this; + }, + remove: function remove(index) { + if ("number" !== typeof index) return; + this.pipes.splice(index, 1); + return this; + }, + sync: function sync(task) { + var pipes = this.pipes; + if (!(task instanceof Task) || 0 === pipes.length) return; + if (null != task.output) { + task.input = task.output; + task.output = null; + } + task._isFinish = false; + for (var i = 0, l = pipes.length; i < l; ) { + var pipe = pipes[i]; + var result = pipe(task); + if (result) { + task._isFinish = true; + return result; + } + i++; + if (i !== l) { + task.input = task.output; + task.output = null; + } + } + task._isFinish = true; + return task.output; + }, + async: function async(task) { + var pipes = this.pipes; + if (!(task instanceof Task) || 0 === pipes.length) return; + if (null != task.output) { + task.input = task.output; + task.output = null; + } + task._isFinish = false; + this._flow(0, task); + }, + _flow: function _flow(index, task) { + var self = this; + var pipe = this.pipes[index]; + pipe(task, (function(result) { + if (result) { + task._isFinish = true; + task.onComplete && task.onComplete(result); + } else { + index++; + if (index < self.pipes.length) { + task.input = task.output; + task.output = null; + self._flow(index, task); + } else { + task._isFinish = true; + task.onComplete && task.onComplete(result, task.output); + } + } + })); + } + }; + module.exports = Pipeline; + }), { + "./task": 54 + } ], + 50: [ (function(require, module, exports) { + "use strict"; + var Task = require("./task"); + var _require = require("./shared"), transformPipeline = _require.transformPipeline, RequestType = _require.RequestType; + function preprocess(task, done) { + var options = task.options, subOptions = Object.create(null), leftOptions = Object.create(null); + for (var op in options) switch (op) { + case RequestType.PATH: + case RequestType.UUID: + case RequestType.DIR: + case RequestType.SCENE: + case RequestType.URL: + break; + + case "__requestType__": + case "__isNative__": + case "ext": + case "type": + case "__nativeName__": + case "audioLoadMode": + case "bundle": + subOptions[op] = options[op]; + break; + + case "__exclude__": + case "__outputAsArray__": + leftOptions[op] = options[op]; + break; + + default: + subOptions[op] = options[op]; + leftOptions[op] = options[op]; + } + task.options = leftOptions; + var subTask = Task.create({ + input: task.input, + options: subOptions + }); + var err = null; + try { + task.output = task.source = transformPipeline.sync(subTask); + } catch (e) { + err = e; + for (var i = 0, l = subTask.output.length; i < l; i++) subTask.output[i].recycle(); + } + subTask.recycle(); + done(err); + } + module.exports = preprocess; + }), { + "./shared": 53, + "./task": 54 + } ], + 51: [ (function(require, module, exports) { + "use strict"; + var dependUtil = require("./depend-util"); + var Cache = require("./cache"); + require("../assets/CCAsset"); + var _require = require("./shared"), assets = _require.assets; + var _require2 = require("../platform/utils"), callInNextTick = _require2.callInNextTick; + function visitAsset(asset, deps) { + if (!asset._uuid) return; + deps.push(asset._uuid); + } + function visitComponent(comp, deps) { + var props = Object.getOwnPropertyNames(comp); + for (var i = 0; i < props.length; i++) { + var propName = props[i]; + if ("node" === propName || "__eventTargets" === propName) continue; + var value = comp[propName]; + if ("object" === typeof value && value) if (Array.isArray(value)) for (var j = 0; j < value.length; j++) { + var val = value[j]; + val instanceof cc.Asset && visitAsset(val, deps); + } else if (value.constructor && value.constructor !== Object) value instanceof cc.Asset && visitAsset(value, deps); else { + var keys = Object.getOwnPropertyNames(value); + for (var _j = 0; _j < keys.length; _j++) { + var _val = value[keys[_j]]; + _val instanceof cc.Asset && visitAsset(_val, deps); + } + } + } + } + var _temp = []; + function visitNode(node, deps) { + for (var i = 0; i < node._components.length; i++) visitComponent(node._components[i], deps); + for (var _i = 0; _i < node._children.length; _i++) visitNode(node._children[_i], deps); + } + function descendOpRef(asset, refs, exclude, op) { + exclude.push(asset._uuid); + var depends = dependUtil.getDeps(asset._uuid); + for (var i = 0, l = depends.length; i < l; i++) { + var dependAsset = assets.get(depends[i]); + if (dependAsset) { + var uuid = dependAsset._uuid; + uuid in refs ? refs[uuid] += op : refs[uuid] = dependAsset.refCount + op; + if (exclude.includes(uuid)) continue; + descendOpRef(dependAsset, refs, exclude, op); + } + } + } + function checkCircularReference(asset) { + var refs = Object.create(null); + refs[asset._uuid] = asset.refCount; + descendOpRef(asset, refs, _temp, -1); + _temp.length = 0; + if (0 !== refs[asset._uuid]) return refs[asset._uuid]; + for (var uuid in refs) 0 !== refs[uuid] && descendOpRef(assets.get(uuid), refs, _temp, 1); + _temp.length = 0; + return refs[asset._uuid]; + } + var _persistNodeDeps = new Cache(); + var _toDelete = new Cache(); + var eventListener = false; + function freeAssets() { + eventListener = false; + _toDelete.forEach((function(asset) { + releaseManager._free(asset); + })); + _toDelete.clear(); + } + var releaseManager = { + init: function init() { + _persistNodeDeps.clear(); + _toDelete.clear(); + }, + _addPersistNodeRef: function _addPersistNodeRef(node) { + var deps = []; + visitNode(node, deps); + for (var i = 0, l = deps.length; i < l; i++) { + var dependAsset = assets.get(deps[i]); + dependAsset && dependAsset.addRef(); + } + _persistNodeDeps.add(node.uuid, deps); + }, + _removePersistNodeRef: function _removePersistNodeRef(node) { + if (_persistNodeDeps.has(node.uuid)) { + var deps = _persistNodeDeps.get(node.uuid); + for (var i = 0, l = deps.length; i < l; i++) { + var dependAsset = assets.get(deps[i]); + dependAsset && dependAsset.decRef(); + } + _persistNodeDeps.remove(node.uuid); + } + }, + _autoRelease: function _autoRelease(oldScene, newScene, persistNodes) { + if (oldScene) { + var childs = dependUtil.getDeps(oldScene._id); + for (var i = 0, l = childs.length; i < l; i++) { + var asset = assets.get(childs[i]); + asset && asset.decRef((false, oldScene.autoReleaseAssets)); + } + var dependencies = dependUtil._depends.get(oldScene._id); + if (dependencies && dependencies.persistDeps) { + var persistDeps = dependencies.persistDeps; + for (var _i2 = 0, _l = persistDeps.length; _i2 < _l; _i2++) { + var _asset = assets.get(persistDeps[_i2]); + _asset && _asset.decRef((false, oldScene.autoReleaseAssets)); + } + } + oldScene._id !== newScene._id && dependUtil.remove(oldScene._id); + } + var sceneDeps = dependUtil._depends.get(newScene._id); + sceneDeps && (sceneDeps.persistDeps = []); + for (var key in persistNodes) { + var node = persistNodes[key]; + var deps = _persistNodeDeps.get(node.uuid); + for (var _i3 = 0, _l2 = deps.length; _i3 < _l2; _i3++) { + var dependAsset = assets.get(deps[_i3]); + dependAsset && dependAsset.addRef(); + } + sceneDeps && sceneDeps.persistDeps.push.apply(sceneDeps.persistDeps, deps); + } + }, + _free: function _free(asset, force) { + _toDelete.remove(asset._uuid); + if (!cc.isValid(asset, true)) return; + if (!force && asset.refCount > 0 && checkCircularReference(asset) > 0) return; + assets.remove(asset._uuid); + var depends = dependUtil.getDeps(asset._uuid); + for (var i = 0, l = depends.length; i < l; i++) { + var dependAsset = assets.get(depends[i]); + if (dependAsset) { + dependAsset.decRef(false); + releaseManager._free(dependAsset, false); + } + } + asset.destroy(); + dependUtil.remove(asset._uuid); + }, + tryRelease: function tryRelease(asset, force) { + if (!(asset instanceof cc.Asset)) return; + if (force) releaseManager._free(asset, force); else { + _toDelete.add(asset._uuid, asset); + if (!eventListener) { + eventListener = true; + callInNextTick(freeAssets); + } + } + } + }; + module.exports = releaseManager; + }), { + "../assets/CCAsset": 57, + "../platform/utils": 145, + "./cache": 31, + "./depend-util": 33, + "./shared": 53 + } ], + 52: [ (function(require, module, exports) { + "use strict"; + var MAX_DEAD_NUM = 500; + var _deadPool = []; + function RequestItem() { + this._id = ""; + this.uuid = ""; + this.url = ""; + this.ext = ".json"; + this.content = null; + this.file = null; + this.info = null; + this.config = null; + this.isNative = false; + this.options = Object.create(null); + } + RequestItem.prototype = { + constructor: RequestItem, + get id() { + this._id || (this._id = this.uuid + "@" + (this.isNative ? "native" : "import")); + return this._id; + }, + recycle: function recycle() { + if (_deadPool.length === MAX_DEAD_NUM) return; + this._id = ""; + this.uuid = ""; + this.url = ""; + this.ext = ".json"; + this.content = null; + this.file = null; + this.info = null; + this.config = null; + this.isNative = false; + this.options = Object.create(null); + _deadPool.push(this); + } + }; + RequestItem.create = function() { + var out = null; + out = 0 !== _deadPool.length ? _deadPool.pop() : new RequestItem(); + return out; + }; + module.exports = RequestItem; + }), {} ], + 53: [ (function(require, module, exports) { + "use strict"; + var Cache = require("./cache"); + var Pipeline = require("./pipeline"); + var assets = new Cache(); + var files = new Cache(); + var parsed = new Cache(); + var bundles = new Cache(); + var pipeline = new Pipeline("normal load", []); + var fetchPipeline = new Pipeline("fetch", []); + var transformPipeline = new Pipeline("transform url", []); + var RequestType = { + UUID: "uuid", + PATH: "path", + DIR: "dir", + URL: "url", + SCENE: "scene" + }; + var BuiltinBundleName = { + RESOURCES: "resources", + INTERNAL: "internal", + MAIN: "main", + START_SCENE: "start-scene" + }; + module.exports = { + assets: assets, + files: files, + parsed: parsed, + pipeline: pipeline, + fetchPipeline: fetchPipeline, + transformPipeline: transformPipeline, + RequestType: RequestType, + bundles: bundles, + BuiltinBundleName: BuiltinBundleName + }; + }), { + "./cache": 31, + "./pipeline": 49 + } ], + 54: [ (function(require, module, exports) { + "use strict"; + var _taskId = 0; + var MAX_DEAD_NUM = 500; + var _deadPool = []; + function Task(options) { + this.id = _taskId++; + this._isFinish = true; + this.onComplete = null; + this.onProgress = null; + this.onError = null; + this.source = null; + this.output = null; + this.input = null; + this.progress = null; + this.options = null; + this.set(options); + } + Task.prototype = { + constructor: Task, + set: function set(options) { + options = options || Object.create(null); + this.onComplete = options.onComplete; + this.onProgress = options.onProgress; + this.onError = options.onError; + this.source = this.input = options.input; + this.output = null; + this.progress = options.progress; + this.options = options.options || Object.create(null); + }, + dispatch: function dispatch(event, param1, param2, param3, param4) { + switch (event) { + case "complete": + this.onComplete && this.onComplete(param1, param2, param3, param4); + break; + + case "progress": + this.onProgress && this.onProgress(param1, param2, param3, param4); + break; + + case "error": + this.onError && this.onError(param1, param2, param3, param4); + break; + + default: + var str = "on" + event[0].toUpperCase() + event.substr(1); + "function" === typeof this[str] && this[str](param1, param2, param3, param4); + } + }, + recycle: function recycle() { + if (_deadPool.length === MAX_DEAD_NUM) return; + this.onComplete = null; + this.onProgress = null; + this.onError = null; + this.source = this.output = this.input = null; + this.progress = null; + this.options = null; + _deadPool.push(this); + }, + get isFinish() { + return this._isFinish; + } + }; + Task.create = function(options) { + var out = null; + if (0 !== _deadPool.length) { + out = _deadPool.pop(); + out.set(options); + } else out = new Task(options); + return out; + }; + module.exports = Task; + }), {} ], + 55: [ (function(require, module, exports) { + "use strict"; + var _require = require("./helper"), decodeUuid = _require.decodeUuid; + var RequestItem = require("./request-item"); + var _require2 = require("./shared"), RequestType = _require2.RequestType, bundles = _require2.bundles; + function parse(task) { + var input = task.input, options = task.options; + input = Array.isArray(input) ? input : [ input ]; + task.output = []; + for (var i = 0; i < input.length; i++) { + var item = input[i]; + var out = RequestItem.create(); + if ("string" === typeof item) { + item = Object.create(null); + item[options.__requestType__ || RequestType.UUID] = input[i]; + } + if ("object" === typeof item) { + cc.js.addon(item, options); + item.preset && cc.js.addon(item, cc.assetManager.presets[item.preset]); + for (var key in item) { + switch (key) { + case RequestType.UUID: + var uuid = out.uuid = decodeUuid(item.uuid); + if (bundles.has(item.bundle)) { + var config = bundles.get(item.bundle)._config; + var info = config.getAssetInfo(uuid); + if (info && info.redirect) { + if (!bundles.has(info.redirect)) throw new Error("Please load bundle " + info.redirect + " first"); + config = bundles.get(info.redirect)._config; + info = config.getAssetInfo(uuid); + } + out.config = config; + out.info = info; + } + out.ext = item.ext || ".json"; + break; + + case "__requestType__": + case "ext": + case "bundle": + case "preset": + case "type": + break; + + case RequestType.DIR: + if (bundles.has(item.bundle)) { + var infos = []; + bundles.get(item.bundle)._config.getDirWithPath(item.dir, item.type, infos); + for (var _i = 0, l = infos.length; _i < l; _i++) { + var info = infos[_i]; + input.push({ + uuid: info.uuid, + __isNative__: false, + ext: ".json", + bundle: item.bundle + }); + } + } + out.recycle(); + out = null; + break; + + case RequestType.PATH: + if (bundles.has(item.bundle)) { + var config = bundles.get(item.bundle)._config; + var info = config.getInfoWithPath(item.path, item.type); + if (info && info.redirect) { + if (!bundles.has(info.redirect)) throw new Error("you need to load bundle " + info.redirect + " first"); + config = bundles.get(info.redirect)._config; + info = config.getAssetInfo(info.uuid); + } + if (!info) { + out.recycle(); + throw new Error("Bundle " + item.bundle + " doesn't contain " + item.path); + } + out.config = config; + out.uuid = info.uuid; + out.info = info; + } + out.ext = item.ext || ".json"; + break; + + case RequestType.SCENE: + if (bundles.has(item.bundle)) { + var config = bundles.get(item.bundle)._config; + var info = config.getSceneInfo(item.scene); + if (info && info.redirect) { + if (!bundles.has(info.redirect)) throw new Error("you need to load bundle " + info.redirect + " first"); + config = bundles.get(info.redirect)._config; + info = config.getAssetInfo(info.uuid); + } + if (!info) { + out.recycle(); + throw new Error("Bundle " + config.name + " doesn't contain scene " + item.scene); + } + out.config = config; + out.uuid = info.uuid; + out.info = info; + } + break; + + case "__isNative__": + out.isNative = item.__isNative__; + break; + + case RequestType.URL: + out.url = item.url; + out.uuid = item.uuid || item.url; + out.ext = item.ext || cc.path.extname(item.url); + out.isNative = void 0 === item.__isNative__ || item.__isNative__; + break; + + default: + out.options[key] = item[key]; + } + if (!out) break; + } + } + if (!out) continue; + task.output.push(out); + if (!out.uuid && !out.url) throw new Error("Can not parse this input:" + JSON.stringify(item)); + } + return null; + } + function combine(task) { + var input = task.output = task.input; + for (var i = 0; i < input.length; i++) { + var item = input[i]; + if (item.url) continue; + var url = "", base = ""; + var config = item.config; + base = item.isNative ? config && config.nativeBase ? config.base + config.nativeBase : cc.assetManager.generalNativeBase : config && config.importBase ? config.base + config.importBase : cc.assetManager.generalImportBase; + var uuid = item.uuid; + var ver = ""; + item.info && (ver = item.isNative ? item.info.nativeVer ? "." + item.info.nativeVer : "" : item.info.ver ? "." + item.info.ver : ""); + url = ".ttf" === item.ext ? base + "/" + uuid.slice(0, 2) + "/" + uuid + ver + "/" + item.options.__nativeName__ : base + "/" + uuid.slice(0, 2) + "/" + uuid + ver + item.ext; + item.url = url; + } + return null; + } + module.exports = { + parse: parse, + combine: combine + }; + }), { + "./helper": 44, + "./request-item": 52, + "./shared": 53 + } ], + 56: [ (function(require, module, exports) { + "use strict"; + var dependUtil = require("./depend-util"); + var _require = require("./helper"), isScene = _require.isScene, decodeUuid = _require.decodeUuid; + var _require2 = require("./shared"), assets = _require2.assets; + var _require3 = require("../platform/utils"), callInNextTick = _require3.callInNextTick; + var MissingObjectReporter = false; + require("../assets/CCAsset"); + var utils = { + processOptions: function processOptions(options) { + false; + var uuids = options.uuids; + var paths = options.paths; + var types = options.types; + var bundles = options.deps; + var realEntries = options.paths = Object.create(null); + if (false === options.debug) { + for (var i = 0, l = uuids.length; i < l; i++) uuids[i] = decodeUuid(uuids[i]); + for (var id in paths) { + var entry = paths[id]; + var type = entry[1]; + entry[1] = types[type]; + } + } else { + var out = Object.create(null); + for (var _i = 0, _l = uuids.length; _i < _l; _i++) { + var uuid = uuids[_i]; + uuids[_i] = out[uuid] = decodeUuid(uuid); + } + uuids = out; + } + for (var _id in paths) { + var _entry = paths[_id]; + realEntries[uuids[_id]] = _entry; + } + var scenes = options.scenes; + for (var name in scenes) { + var _uuid = scenes[name]; + scenes[name] = uuids[_uuid]; + } + var packs = options.packs; + for (var packId in packs) { + var packedIds = packs[packId]; + for (var j = 0; j < packedIds.length; ++j) packedIds[j] = uuids[packedIds[j]]; + } + var versions = options.versions; + if (versions) for (var folder in versions) { + var entries = versions[folder]; + for (var _i2 = 0; _i2 < entries.length; _i2 += 2) { + var _uuid2 = entries[_i2]; + entries[_i2] = uuids[_uuid2] || _uuid2; + } + } + var redirect = options.redirect; + if (redirect) for (var _i3 = 0; _i3 < redirect.length; _i3 += 2) { + redirect[_i3] = uuids[redirect[_i3]]; + redirect[_i3 + 1] = bundles[redirect[_i3 + 1]]; + } + }, + clear: function clear(task, clearRef) { + for (var i = 0, l = task.input.length; i < l; i++) { + var item = task.input[i]; + clearRef && !item.isNative && item.content && item.content.decRef && item.content.decRef(false); + item.recycle(); + } + task.input = null; + }, + urlAppendTimestamp: function urlAppendTimestamp(url) { + if (cc.assetManager.downloader.appendTimeStamp && "string" === typeof url) return /\?/.test(url) ? url + "&_t=" + (new Date() - 0) : url + "?_t=" + (new Date() - 0); + return url; + }, + retry: function retry(process, times, wait, onComplete, index) { + index = index || 0; + process(index, (function(err, result) { + index++; + !err || index > times ? onComplete && onComplete(err, result) : setTimeout((function() { + utils.retry(process, times, wait, onComplete, index); + }), wait); + })); + }, + getDepends: function getDepends(uuid, data, exclude, depends, preload, asyncLoadAssets, config) { + try { + var info = dependUtil.parse(uuid, data); + var includeNative = true; + data instanceof cc.Asset && (!data.__nativeDepend__ || data._nativeAsset) && (includeNative = false); + if (preload) { + for (var _i4 = 0, _l2 = info.deps.length; _i4 < _l2; _i4++) { + var _dep = info.deps[_i4]; + if (!(_dep in exclude)) { + exclude[_dep] = true; + depends.push({ + uuid: _dep, + bundle: config && config.name + }); + } + } + if (includeNative && info.nativeDep) { + config && (info.nativeDep.bundle = config.name); + depends.push(Object.assign({}, info.nativeDep)); + } + } else { + asyncLoadAssets = (true, !!data.asyncLoadAssets || asyncLoadAssets && !info.preventDeferredLoadDependents); + for (var i = 0, l = info.deps.length; i < l; i++) { + var dep = info.deps[i]; + if (!(dep in exclude)) { + exclude[dep] = true; + depends.push({ + uuid: dep, + __asyncLoadAssets__: asyncLoadAssets, + bundle: config && config.name + }); + } + } + if (includeNative && !asyncLoadAssets && !info.preventPreloadNativeObject && info.nativeDep) { + config && (info.nativeDep.bundle = config.name); + depends.push(Object.assign({}, info.nativeDep)); + } + } + } catch (e) { + cc.error(e.message, e.stack); + } + }, + cache: function cache(id, asset, cacheAsset) { + if (!asset) return; + var _isScene = isScene(asset); + !_isScene && cacheAsset && assets.add(id, asset); + _isScene && false; + }, + setProperties: function setProperties(uuid, asset, assetsMap) { + var missingAsset = false; + var depends = asset.__depends__; + if (depends) { + var missingAssetReporter = null; + for (var i = 0, l = depends.length; i < l; i++) { + var depend = depends[i]; + var dependAsset = assetsMap[depend.uuid + "@import"]; + if (dependAsset) depend.owner[depend.prop] = dependAsset.addRef(); else { + false; + cc.error("The asset " + depend.uuid + " is missing!"); + missingAsset = true; + } + } + missingAssetReporter && missingAssetReporter.reportByOwner(); + asset.__depends__ = void 0; + } + if (asset.__nativeDepend__) { + if (!asset._nativeAsset) if (assetsMap[uuid + "@native"]) asset._nativeAsset = assetsMap[uuid + "@native"]; else { + missingAsset = true; + false; + } + asset.__nativeDepend__ = void 0; + } + return missingAsset; + }, + gatherAsset: function gatherAsset(task) { + var source = task.source; + if (task.options.__outputAsArray__ || 1 !== source.length) { + var output = task.output = []; + for (var i = 0, l = source.length; i < l; i++) output.push(source[i].content); + } else task.output = source[0].content; + }, + forEach: function forEach(array, process, onComplete) { + var count = 0; + var errs = []; + 0 === array.length && onComplete && onComplete(errs); + for (var i = 0, l = array.length; i < l; i++) process(array[i], (function(err) { + err && errs.push(err); + count++; + count === l && onComplete && onComplete(errs); + })); + }, + parseParameters: function parseParameters(options, onProgress, onComplete) { + if (void 0 === onComplete) { + var isCallback = "function" === typeof options; + if (onProgress) { + onComplete = onProgress; + isCallback || (onProgress = null); + } else if (void 0 === onProgress && isCallback) { + onComplete = options; + options = null; + onProgress = null; + } + if (void 0 !== onProgress && isCallback) { + onProgress = options; + options = null; + } + } + options = options || Object.create(null); + return { + options: options, + onProgress: onProgress, + onComplete: onComplete + }; + }, + parseLoadResArgs: function parseLoadResArgs(type, onProgress, onComplete) { + if (void 0 === onComplete) { + var isValidType = cc.js.isChildClassOf(type, cc.Asset); + if (onProgress) { + onComplete = onProgress; + isValidType && (onProgress = null); + } else if (void 0 === onProgress && !isValidType) { + onComplete = type; + onProgress = null; + type = null; + } + if (void 0 !== onProgress && !isValidType) { + onProgress = type; + type = null; + } + } + return { + type: type, + onProgress: onProgress, + onComplete: onComplete + }; + }, + checkCircleReference: function checkCircleReference(owner, uuid, map, checked) { + checked || (checked = Object.create(null)); + var item = map[uuid]; + if (!item || checked[uuid]) return false; + checked[uuid] = true; + var result = false; + var deps = dependUtil.getDeps(uuid); + if (deps) for (var i = 0, l = deps.length; i < l; i++) { + var dep = deps[i]; + if (dep === owner || utils.checkCircleReference(owner, dep, map, checked)) { + result = true; + break; + } + } + return result; + }, + asyncify: function asyncify(cb) { + return function(p1, p2) { + if (!cb) return; + var refs = []; + Array.isArray(p2) ? p2.forEach((function(x) { + return x instanceof cc.Asset && refs.push(x.addRef()); + })) : p2 instanceof cc.Asset && refs.push(p2.addRef()); + callInNextTick((function() { + refs.forEach((function(x) { + return x.decRef(false); + })); + cb(p1, p2); + })); + }; + } + }; + module.exports = utils; + }), { + "../assets/CCAsset": 57, + "../platform/utils": 145, + "./depend-util": 33, + "./helper": 44, + "./shared": 53 + } ], + 57: [ (function(require, module, exports) { + "use strict"; + var CCObject = require("../platform/CCObject"); + cc.Asset = cc.Class({ + name: "cc.Asset", + extends: CCObject, + ctor: function ctor() { + Object.defineProperty(this, "_uuid", { + value: "", + writable: true + }); + this.loaded = true; + this._nativeUrl = ""; + this._ref = 0; + }, + properties: { + nativeUrl: { + get: function get() { + if (!this._nativeUrl && this._native) { + var name = this._native; + if (47 === name.charCodeAt(0)) return name.slice(1); + 46 === name.charCodeAt(0) ? this._nativeUrl = cc.assetManager.utils.getUrlWithUuid(this._uuid, { + nativeExt: name, + isNative: true + }) : this._nativeUrl = cc.assetManager.utils.getUrlWithUuid(this._uuid, { + __nativeName__: name, + nativeExt: cc.path.extname(name), + isNative: true + }); + } + return this._nativeUrl; + }, + visible: false + }, + refCount: { + get: function get() { + return this._ref; + } + }, + _native: "", + _nativeAsset: { + get: function get() { + return this._$nativeAsset; + }, + set: function set(obj) { + this._$nativeAsset = obj; + } + }, + _nativeDep: { + get: function get() { + if (this._native) return { + __isNative__: true, + uuid: this._uuid, + ext: this._native + }; + } + } + }, + statics: { + deserialize: false, + preventDeferredLoadDependents: false, + preventPreloadNativeObject: false + }, + toString: function toString() { + return this.nativeUrl; + }, + serialize: false, + createNode: null, + _setRawAsset: function _setRawAsset(filename, inLibrary) { + this._native = false !== inLibrary ? filename || void 0 : "/" + filename; + }, + addRef: function addRef() { + this._ref++; + return this; + }, + decRef: function decRef(autoRelease) { + this._ref > 0 && this._ref--; + false !== autoRelease && cc.assetManager._releaseManager.tryRelease(this); + return this; + } + }); + module.exports = cc.Asset; + }), { + "../platform/CCObject": 127 + } ], + 58: [ (function(require, module, exports) { + "use strict"; + var Asset = require("./CCAsset"); + var EventTarget = require("../event/event-target"); + var LoadMode = cc.Enum({ + WEB_AUDIO: 0, + DOM_AUDIO: 1 + }); + var AudioClip = cc.Class({ + name: "cc.AudioClip", + extends: Asset, + mixins: [ EventTarget ], + ctor: function ctor() { + this._loading = false; + this.loaded = false; + this._audio = null; + }, + properties: { + duration: 0, + loadMode: { + default: LoadMode.WEB_AUDIO, + type: LoadMode + }, + _nativeAsset: { + get: function get() { + return this._audio; + }, + set: function set(value) { + value instanceof cc.AudioClip ? this._audio = value._nativeAsset : this._audio = value; + if (this._audio) { + this.loaded = true; + this.emit("load"); + } + }, + override: true + }, + _nativeDep: { + get: function get() { + return { + uuid: this._uuid, + audioLoadMode: this.loadMode, + ext: cc.path.extname(this._native), + __isNative__: true + }; + }, + override: true + } + }, + statics: { + LoadMode: LoadMode, + _loadByUrl: function _loadByUrl(url, callback) { + var audioClip = cc.assetManager.assets.get(url); + audioClip ? callback(null, audioClip) : cc.assetManager.loadRemote(url, (function(error, data) { + if (error) return callback(error); + callback(null, data); + })); + } + }, + _ensureLoaded: function _ensureLoaded(onComplete) { + if (this.loaded) return onComplete && onComplete(); + onComplete && this.once("load", onComplete); + if (!this._loading) { + this._loading = true; + var self = this; + cc.assetManager.postLoadNative(this, (function(err) { + self._loading = false; + })); + } + }, + destroy: function destroy() { + cc.audioEngine.uncache(this); + this._super(); + } + }); + cc.AudioClip = AudioClip; + module.exports = AudioClip; + }), { + "../event/event-target": 114, + "./CCAsset": 57 + } ], + 59: [ (function(require, module, exports) { + "use strict"; + var FontLetterDefinition = function FontLetterDefinition() { + this.u = 0; + this.v = 0; + this.w = 0; + this.h = 0; + this.offsetX = 0; + this.offsetY = 0; + this.textureID = 0; + this.valid = false; + this.xAdvance = 0; + }; + var FontAtlas = function FontAtlas(texture) { + this._letterDefinitions = {}; + this._texture = texture; + }; + FontAtlas.prototype = { + constructor: FontAtlas, + addLetterDefinitions: function addLetterDefinitions(letter, letterDefinition) { + this._letterDefinitions[letter] = letterDefinition; + }, + cloneLetterDefinition: function cloneLetterDefinition() { + var copyLetterDefinitions = {}; + for (var key in this._letterDefinitions) { + var value = new FontLetterDefinition(); + cc.js.mixin(value, this._letterDefinitions[key]); + copyLetterDefinitions[key] = value; + } + return copyLetterDefinitions; + }, + getTexture: function getTexture() { + return this._texture; + }, + getLetter: function getLetter(key) { + return this._letterDefinitions[key]; + }, + getLetterDefinitionForChar: function getLetterDefinitionForChar(_char) { + var key = _char.charCodeAt(0); + var hasKey = this._letterDefinitions.hasOwnProperty(key); + var letter; + letter = hasKey ? this._letterDefinitions[key] : null; + return letter; + }, + clear: function clear() { + this._letterDefinitions = {}; + } + }; + var BitmapFont = cc.Class({ + name: "cc.BitmapFont", + extends: cc.Font, + properties: { + fntDataStr: { + default: "" + }, + spriteFrame: { + default: null, + type: cc.SpriteFrame + }, + fontSize: { + default: -1 + }, + _fntConfig: null, + _fontDefDictionary: null + }, + onLoad: function onLoad() { + var spriteFrame = this.spriteFrame; + if (!this._fontDefDictionary) { + this._fontDefDictionary = new FontAtlas(); + spriteFrame && (this._fontDefDictionary._texture = spriteFrame._texture); + } + var fntConfig = this._fntConfig; + if (!fntConfig) return; + var fontDict = fntConfig.fontDefDictionary; + for (var fontDef in fontDict) { + var letter = new FontLetterDefinition(); + var rect = fontDict[fontDef].rect; + letter.offsetX = fontDict[fontDef].xOffset; + letter.offsetY = fontDict[fontDef].yOffset; + letter.w = rect.width; + letter.h = rect.height; + letter.u = rect.x; + letter.v = rect.y; + letter.textureID = 0; + letter.valid = true; + letter.xAdvance = fontDict[fontDef].xAdvance; + this._fontDefDictionary.addLetterDefinitions(fontDef, letter); + } + } + }); + cc.BitmapFont = BitmapFont; + cc.BitmapFont.FontLetterDefinition = FontLetterDefinition; + cc.BitmapFont.FontAtlas = FontAtlas; + module.exports = BitmapFont; + }), {} ], + 60: [ (function(require, module, exports) { + "use strict"; + var BufferAsset = cc.Class({ + name: "cc.BufferAsset", + extends: cc.Asset, + ctor: function ctor() { + this._buffer = null; + }, + properties: { + _nativeAsset: { + get: function get() { + return this._buffer; + }, + set: function set(bin) { + this._buffer = bin.buffer || bin; + }, + override: true + }, + buffer: function buffer() { + return this._buffer; + } + } + }); + cc.BufferAsset = module.exports = BufferAsset; + }), {} ], + 61: [ (function(require, module, exports) { + "use strict"; + var Font = cc.Class({ + name: "cc.Font", + extends: cc.Asset + }); + cc.Font = module.exports = Font; + }), {} ], + 62: [ (function(require, module, exports) { + "use strict"; + var JsonAsset = cc.Class({ + name: "cc.JsonAsset", + extends: cc.Asset, + properties: { + json: null + } + }); + module.exports = cc.JsonAsset = JsonAsset; + }), {} ], + 63: [ (function(require, module, exports) { + "use strict"; + var LabelAtlas = cc.Class({ + name: "cc.LabelAtlas", + extends: cc.BitmapFont, + onLoad: function onLoad() { + if (!this.spriteFrame) { + cc.warnID(9100, this.name); + return; + } + if (!this._fntConfig) { + cc.warnID(9101, this.name); + return; + } + this._super(); + } + }); + cc.LabelAtlas = LabelAtlas; + module.exports = LabelAtlas; + }), {} ], + 64: [ (function(require, module, exports) { + "use strict"; + var OptimizationPolicy = cc.Enum({ + AUTO: 0, + SINGLE_INSTANCE: 1, + MULTI_INSTANCE: 2 + }); + var Prefab = cc.Class({ + name: "cc.Prefab", + extends: cc.Asset, + ctor: function ctor() { + this._createFunction = null; + this._instantiatedTimes = 0; + }, + properties: { + data: null, + optimizationPolicy: OptimizationPolicy.AUTO, + asyncLoadAssets: false, + readonly: { + default: false, + editorOnly: true + } + }, + statics: { + OptimizationPolicy: OptimizationPolicy, + OptimizationPolicyThreshold: 3 + }, + createNode: false, + compileCreateFunction: function compileCreateFunction() { + var jit = require("../platform/instantiate-jit"); + this._createFunction = jit.compile(this.data); + }, + _doInstantiate: function _doInstantiate(rootToRedirect) { + this.data._prefab || cc.warnID(3700); + this._createFunction || this.compileCreateFunction(); + return this._createFunction(rootToRedirect); + }, + _instantiate: function _instantiate() { + var node, useJit = false; + true; + useJit = this.optimizationPolicy !== OptimizationPolicy.SINGLE_INSTANCE && (this.optimizationPolicy === OptimizationPolicy.MULTI_INSTANCE || this._instantiatedTimes + 1 >= Prefab.OptimizationPolicyThreshold); + if (useJit) { + node = this._doInstantiate(); + this.data._instantiate(node); + } else node = this.data._instantiate(); + ++this._instantiatedTimes; + var PrefabUtils; + false, false; + return node; + }, + destroy: function destroy() { + this.data && this.data.destroy(); + this._super(); + } + }); + cc.Prefab = module.exports = Prefab; + cc.js.obsolete(cc, "cc._Prefab", "Prefab"); + }), { + "../platform/instantiate-jit": 140 + } ], + 65: [ (function(require, module, exports) { + "use strict"; + var _gfx = _interopRequireDefault(require("../../renderer/gfx")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var renderer = require("../renderer"); + var Texture2D = require("./CCTexture2D"); + var DepthStencilFormat = cc.Enum({ + RB_FMT_D24S8: _gfx["default"].RB_FMT_D24S8, + RB_FMT_S8: _gfx["default"].RB_FMT_S8, + RB_FMT_D16: _gfx["default"].RB_FMT_D16 + }); + var RenderTexture = cc.Class({ + name: "cc.RenderTexture", + extends: Texture2D, + statics: { + DepthStencilFormat: DepthStencilFormat + }, + ctor: function ctor() { + this._framebuffer = null; + }, + initWithSize: function initWithSize(width, height, depthStencilFormat) { + this.width = Math.floor(width || cc.visibleRect.width); + this.height = Math.floor(height || cc.visibleRect.height); + this._resetUnderlyingMipmaps(); + var opts = { + colors: [ this._texture ] + }; + this._depthStencilBuffer && this._depthStencilBuffer.destroy(); + var depthStencilBuffer; + if (depthStencilFormat) { + depthStencilBuffer = new _gfx["default"].RenderBuffer(renderer.device, depthStencilFormat, width, height); + depthStencilFormat === _gfx["default"].RB_FMT_D24S8 ? opts.depthStencil = depthStencilBuffer : depthStencilFormat === _gfx["default"].RB_FMT_S8 ? opts.stencil = depthStencilBuffer : depthStencilFormat === _gfx["default"].RB_FMT_D16 && (opts.depth = depthStencilBuffer); + } + this._depthStencilBuffer = depthStencilBuffer; + this._framebuffer && this._framebuffer.destroy(); + this._framebuffer = new _gfx["default"].FrameBuffer(renderer.device, width, height, opts); + this._packable = false; + this.loaded = true; + this.emit("load"); + }, + updateSize: function updateSize(width, height) { + this.width = Math.floor(width || cc.visibleRect.width); + this.height = Math.floor(height || cc.visibleRect.height); + this._resetUnderlyingMipmaps(); + var rbo = this._depthStencilBuffer; + rbo && rbo.update(this.width, this.height); + this._framebuffer._width = width; + this._framebuffer._height = height; + }, + drawTextureAt: function drawTextureAt(texture, x, y) { + if (!texture._image || 0 === texture._image.width) return; + this._texture.updateSubImage({ + x: x, + y: y, + image: texture._image, + width: texture.width, + height: texture.height, + level: 0, + flipY: false, + premultiplyAlpha: texture._premultiplyAlpha + }); + }, + readPixels: function readPixels(data, x, y, w, h) { + if (!this._framebuffer || !this._texture) return data; + x = x || 0; + y = y || 0; + var width = w || this.width; + var height = h || this.height; + data = data || new Uint8Array(width * height * 4); + var gl = cc.game._renderContext; + var oldFBO = gl.getParameter(gl.FRAMEBUFFER_BINDING); + gl.bindFramebuffer(gl.FRAMEBUFFER, this._framebuffer.getHandle()); + gl.readPixels(x, y, width, height, gl.RGBA, gl.UNSIGNED_BYTE, data); + gl.bindFramebuffer(gl.FRAMEBUFFER, oldFBO); + return data; + }, + destroy: function destroy() { + this._super(); + if (this._framebuffer) { + this._framebuffer.destroy(); + this._framebuffer = null; + } + } + }); + cc.RenderTexture = module.exports = RenderTexture; + }), { + "../../renderer/gfx": 247, + "../renderer": 152, + "./CCTexture2D": 72 + } ], + 66: [ (function(require, module, exports) { + "use strict"; + var Scene = cc.Class({ + name: "cc.SceneAsset", + extends: cc.Asset, + properties: { + scene: null, + asyncLoadAssets: void 0 + } + }); + cc.SceneAsset = Scene; + module.exports = Scene; + }), {} ], + 67: [ (function(require, module, exports) { + "use strict"; + var Script = cc.Class({ + name: "cc.Script", + extends: cc.Asset + }); + cc._Script = Script; + var JavaScript = cc.Class({ + name: "cc.JavaScript", + extends: Script + }); + cc._JavaScript = JavaScript; + var TypeScript = cc.Class({ + name: "cc.TypeScript", + extends: Script + }); + cc._TypeScript = TypeScript; + }), {} ], + 68: [ (function(require, module, exports) { + "use strict"; + var SpriteAtlas = cc.Class({ + name: "cc.SpriteAtlas", + extends: cc.Asset, + properties: { + _spriteFrames: { + default: {} + } + }, + getTexture: function getTexture() { + var keys = Object.keys(this._spriteFrames); + if (keys.length > 0) { + var spriteFrame = this._spriteFrames[keys[0]]; + return spriteFrame ? spriteFrame.getTexture() : null; + } + return null; + }, + getSpriteFrame: function getSpriteFrame(key) { + var sf = this._spriteFrames[key]; + if (!sf) return null; + sf.name || (sf.name = key); + return sf; + }, + getSpriteFrames: function getSpriteFrames() { + var frames = []; + var spriteFrames = this._spriteFrames; + for (var key in spriteFrames) frames.push(this.getSpriteFrame(key)); + return frames; + } + }); + cc.SpriteAtlas = SpriteAtlas; + module.exports = SpriteAtlas; + }), {} ], + 69: [ (function(require, module, exports) { + "use strict"; + var EventTarget = require("../event/event-target"); + var INSET_LEFT = 0; + var INSET_TOP = 1; + var INSET_RIGHT = 2; + var INSET_BOTTOM = 3; + var temp_uvs = [ { + u: 0, + v: 0 + }, { + u: 0, + v: 0 + }, { + u: 0, + v: 0 + }, { + u: 0, + v: 0 + } ]; + var SpriteFrame = cc.Class({ + name: "cc.SpriteFrame", + extends: require("../assets/CCAsset"), + mixins: [ EventTarget ], + properties: { + _textureSetter: { + set: function set(texture) { + if (texture) { + false; + this._texture !== texture && this._refreshTexture(texture); + } + } + }, + insetTop: { + get: function get() { + return this._capInsets[INSET_TOP]; + }, + set: function set(value) { + this._capInsets[INSET_TOP] = value; + this._texture && this._calculateSlicedUV(); + } + }, + insetBottom: { + get: function get() { + return this._capInsets[INSET_BOTTOM]; + }, + set: function set(value) { + this._capInsets[INSET_BOTTOM] = value; + this._texture && this._calculateSlicedUV(); + } + }, + insetLeft: { + get: function get() { + return this._capInsets[INSET_LEFT]; + }, + set: function set(value) { + this._capInsets[INSET_LEFT] = value; + this._texture && this._calculateSlicedUV(); + } + }, + insetRight: { + get: function get() { + return this._capInsets[INSET_RIGHT]; + }, + set: function set(value) { + this._capInsets[INSET_RIGHT] = value; + this._texture && this._calculateSlicedUV(); + } + } + }, + ctor: function ctor() { + EventTarget.call(this); + var filename = arguments[0]; + var rect = arguments[1]; + var rotated = arguments[2]; + var offset = arguments[3]; + var originalSize = arguments[4]; + this._rect = null; + this.uv = []; + this._texture = null; + this._original = null; + this._offset = null; + this._originalSize = null; + this._rotated = false; + this._flipX = false; + this._flipY = false; + this.vertices = null; + this._capInsets = [ 0, 0, 0, 0 ]; + this.uvSliced = []; + false; + void 0 !== filename && this.setTexture(filename, rect, rotated, offset, originalSize); + }, + textureLoaded: function textureLoaded() { + return this._texture && this._texture.loaded; + }, + onTextureLoaded: function onTextureLoaded(callback, target) { + if (!this.textureLoaded()) { + this.once("load", callback, target); + this.ensureLoadTexture(); + return false; + } + callback.call(target); + return true; + }, + isRotated: function isRotated() { + return this._rotated; + }, + setRotated: function setRotated(bRotated) { + this._rotated = bRotated; + this._texture && this._calculateUV(); + }, + isFlipX: function isFlipX() { + return this._flipX; + }, + isFlipY: function isFlipY() { + return this._flipY; + }, + setFlipX: function setFlipX(flipX) { + this._flipX = flipX; + this._texture && this._calculateUV(); + }, + setFlipY: function setFlipY(flipY) { + this._flipY = flipY; + this._texture && this._calculateUV(); + }, + getRect: function getRect() { + return cc.rect(this._rect); + }, + setRect: function setRect(rect) { + this._rect = rect; + this._texture && this._calculateUV(); + }, + getOriginalSize: function getOriginalSize() { + return cc.size(this._originalSize); + }, + setOriginalSize: function setOriginalSize(size) { + if (this._originalSize) { + this._originalSize.width = size.width; + this._originalSize.height = size.height; + } else this._originalSize = cc.size(size); + }, + getTexture: function getTexture() { + return this._texture; + }, + _textureLoadedCallback: function _textureLoadedCallback() { + var self = this; + var texture = this._texture; + if (!texture) return; + var w = texture.width, h = texture.height; + self._rect ? self._checkRect(self._texture) : self._rect = cc.rect(0, 0, w, h); + self._originalSize || self.setOriginalSize(cc.size(w, h)); + self._offset || self.setOffset(cc.v2(0, 0)); + self._calculateUV(); + self.emit("load"); + }, + _refreshTexture: function _refreshTexture(texture) { + this._texture = texture; + texture.loaded ? this._textureLoadedCallback() : texture.once("load", this._textureLoadedCallback, this); + }, + getOffset: function getOffset() { + return cc.v2(this._offset); + }, + setOffset: function setOffset(offsets) { + this._offset = cc.v2(offsets); + }, + clone: function clone() { + return new SpriteFrame(this._texture, this.getRect(), this._rotated, this.getOffset(), this.getOriginalSize()); + }, + setTexture: function setTexture(texture, rect, rotated, offset, originalSize) { + if (1 === arguments.length && texture === this._texture) return; + this._rect = rect || null; + offset ? this.setOffset(offset) : this._offset = null; + originalSize ? this.setOriginalSize(originalSize) : this._originalSize = null; + this._rotated = rotated || false; + if ("string" === typeof texture) { + cc.errorID(3401); + return; + } + texture instanceof cc.Texture2D && this._refreshTexture(texture); + return true; + }, + ensureLoadTexture: function ensureLoadTexture() { + if (this._texture && !this._texture.loaded) { + this._refreshTexture(this._texture); + cc.assetManager.postLoadNative(this._texture); + } + }, + _checkRect: function _checkRect(texture) { + var rect = this._rect; + var maxX = rect.x, maxY = rect.y; + if (this._rotated) { + maxX += rect.height; + maxY += rect.width; + } else { + maxX += rect.width; + maxY += rect.height; + } + maxX > texture.width && cc.errorID(3300, texture.nativeUrl + "/" + this.name, maxX, texture.width); + maxY > texture.height && cc.errorID(3400, texture.nativeUrl + "/" + this.name, maxY, texture.height); + }, + _flipXY: function _flipXY(uvs) { + if (this._flipX) { + var tempVal = uvs[0]; + uvs[0] = uvs[1]; + uvs[1] = tempVal; + tempVal = uvs[2]; + uvs[2] = uvs[3]; + uvs[3] = tempVal; + } + if (this._flipY) { + var _tempVal = uvs[0]; + uvs[0] = uvs[2]; + uvs[2] = _tempVal; + _tempVal = uvs[1]; + uvs[1] = uvs[3]; + uvs[3] = _tempVal; + } + }, + _calculateSlicedUV: function _calculateSlicedUV() { + var rect = this._rect; + var atlasWidth = this._texture.width; + var atlasHeight = this._texture.height; + var leftWidth = this._capInsets[INSET_LEFT]; + var rightWidth = this._capInsets[INSET_RIGHT]; + var centerWidth = rect.width - leftWidth - rightWidth; + var topHeight = this._capInsets[INSET_TOP]; + var bottomHeight = this._capInsets[INSET_BOTTOM]; + var centerHeight = rect.height - topHeight - bottomHeight; + var uvSliced = this.uvSliced; + uvSliced.length = 0; + if (this._rotated) { + temp_uvs[0].u = rect.x / atlasWidth; + temp_uvs[1].u = (rect.x + bottomHeight) / atlasWidth; + temp_uvs[2].u = (rect.x + bottomHeight + centerHeight) / atlasWidth; + temp_uvs[3].u = (rect.x + rect.height) / atlasWidth; + temp_uvs[3].v = rect.y / atlasHeight; + temp_uvs[2].v = (rect.y + leftWidth) / atlasHeight; + temp_uvs[1].v = (rect.y + leftWidth + centerWidth) / atlasHeight; + temp_uvs[0].v = (rect.y + rect.width) / atlasHeight; + this._flipXY(temp_uvs); + for (var row = 0; row < 4; ++row) { + var rowD = temp_uvs[row]; + for (var col = 0; col < 4; ++col) { + var colD = temp_uvs[3 - col]; + uvSliced.push({ + u: rowD.u, + v: colD.v + }); + } + } + } else { + temp_uvs[0].u = rect.x / atlasWidth; + temp_uvs[1].u = (rect.x + leftWidth) / atlasWidth; + temp_uvs[2].u = (rect.x + leftWidth + centerWidth) / atlasWidth; + temp_uvs[3].u = (rect.x + rect.width) / atlasWidth; + temp_uvs[3].v = rect.y / atlasHeight; + temp_uvs[2].v = (rect.y + topHeight) / atlasHeight; + temp_uvs[1].v = (rect.y + topHeight + centerHeight) / atlasHeight; + temp_uvs[0].v = (rect.y + rect.height) / atlasHeight; + this._flipXY(temp_uvs); + for (var _row = 0; _row < 4; ++_row) { + var _rowD = temp_uvs[_row]; + for (var _col = 0; _col < 4; ++_col) { + var _colD = temp_uvs[_col]; + uvSliced.push({ + u: _colD.u, + v: _rowD.v + }); + } + } + } + }, + _setDynamicAtlasFrame: function _setDynamicAtlasFrame(frame) { + if (!frame) return; + this._original = { + _texture: this._texture, + _x: this._rect.x, + _y: this._rect.y + }; + this._texture = frame.texture; + this._rect.x = frame.x; + this._rect.y = frame.y; + this._calculateUV(); + }, + _resetDynamicAtlasFrame: function _resetDynamicAtlasFrame() { + if (!this._original) return; + this._rect.x = this._original._x; + this._rect.y = this._original._y; + this._texture = this._original._texture; + this._original = null; + this._calculateUV(); + this.emit("_resetDynamicAtlasFrame"); + }, + _calculateUV: function _calculateUV() { + var rect = this._rect, texture = this._texture, uv = this.uv, texw = texture.width, texh = texture.height; + if (this._rotated) { + var l = 0 === texw ? 0 : rect.x / texw; + var r = 0 === texw ? 0 : (rect.x + rect.height) / texw; + var b = 0 === texh ? 0 : (rect.y + rect.width) / texh; + var t = 0 === texh ? 0 : rect.y / texh; + uv[0] = l; + uv[1] = t; + uv[2] = l; + uv[3] = b; + uv[4] = r; + uv[5] = t; + uv[6] = r; + uv[7] = b; + } else { + var _l = 0 === texw ? 0 : rect.x / texw; + var _r = 0 === texw ? 0 : (rect.x + rect.width) / texw; + var _b = 0 === texh ? 0 : (rect.y + rect.height) / texh; + var _t = 0 === texh ? 0 : rect.y / texh; + uv[0] = _l; + uv[1] = _b; + uv[2] = _r; + uv[3] = _b; + uv[4] = _l; + uv[5] = _t; + uv[6] = _r; + uv[7] = _t; + } + if (this._flipX) { + var tempVal = uv[0]; + uv[0] = uv[2]; + uv[2] = tempVal; + tempVal = uv[1]; + uv[1] = uv[3]; + uv[3] = tempVal; + tempVal = uv[4]; + uv[4] = uv[6]; + uv[6] = tempVal; + tempVal = uv[5]; + uv[5] = uv[7]; + uv[7] = tempVal; + } + if (this._flipY) { + var _tempVal2 = uv[0]; + uv[0] = uv[4]; + uv[4] = _tempVal2; + _tempVal2 = uv[1]; + uv[1] = uv[5]; + uv[5] = _tempVal2; + _tempVal2 = uv[2]; + uv[2] = uv[6]; + uv[6] = _tempVal2; + _tempVal2 = uv[3]; + uv[3] = uv[7]; + uv[7] = _tempVal2; + } + var vertices = this.vertices; + if (vertices) { + vertices.nu.length = 0; + vertices.nv.length = 0; + for (var i = 0; i < vertices.u.length; i++) { + vertices.nu[i] = vertices.u[i] / texw; + vertices.nv[i] = vertices.v[i] / texh; + } + } + this._calculateSlicedUV(); + }, + _serialize: (false, false) && function(exporting, ctx) { + var rect = this._rect; + var offset = this._offset; + var size = this._originalSize; + var uuid; + var texture = this._texture; + texture && (uuid = texture._uuid); + if (!uuid) { + var url = this._textureFilename; + url && (uuid = Editor.Utils.UuidCache.urlToUuid(url)); + } + if (uuid && exporting) { + uuid = Editor.Utils.UuidUtils.compressUuid(uuid, true); + ctx.dependsOn("_textureSetter", uuid); + } + var vertices; + this.vertices && (vertices = { + triangles: this.vertices.triangles, + x: this.vertices.x, + y: this.vertices.y, + u: this.vertices.u, + v: this.vertices.v + }); + return { + name: this._name, + texture: !exporting && uuid || void 0, + atlas: exporting ? void 0 : this._atlasUuid, + rect: rect ? [ rect.x, rect.y, rect.width, rect.height ] : void 0, + offset: offset ? [ offset.x, offset.y ] : void 0, + originalSize: size ? [ size.width, size.height ] : void 0, + rotated: this._rotated ? 1 : void 0, + capInsets: this._capInsets, + vertices: vertices + }; + }, + _deserialize: function _deserialize(data, handle) { + var rect = data.rect; + rect && (this._rect = new cc.Rect(rect[0], rect[1], rect[2], rect[3])); + data.offset && this.setOffset(new cc.Vec2(data.offset[0], data.offset[1])); + data.originalSize && this.setOriginalSize(new cc.Size(data.originalSize[0], data.originalSize[1])); + this._rotated = 1 === data.rotated; + this._name = data.name; + var capInsets = data.capInsets; + if (capInsets) { + this._capInsets[INSET_LEFT] = capInsets[INSET_LEFT]; + this._capInsets[INSET_TOP] = capInsets[INSET_TOP]; + this._capInsets[INSET_RIGHT] = capInsets[INSET_RIGHT]; + this._capInsets[INSET_BOTTOM] = capInsets[INSET_BOTTOM]; + } + false; + this.vertices = data.vertices; + if (this.vertices) { + this.vertices.nu = []; + this.vertices.nv = []; + } + var textureUuid; + false; + }, + destroy: function destroy() { + cc.dynamicAtlasManager && cc.dynamicAtlasManager.deleteSpriteFrame(this); + this._super(); + } + }); + var proto = SpriteFrame.prototype; + proto.copyWithZone = proto.clone; + proto.copy = proto.clone; + proto.initWithTexture = proto.setTexture; + cc.SpriteFrame = SpriteFrame; + module.exports = SpriteFrame; + }), { + "../assets/CCAsset": 57, + "../event/event-target": 114 + } ], + 70: [ (function(require, module, exports) { + "use strict"; + var Font = require("./CCFont"); + var TTFFont = cc.Class({ + name: "cc.TTFFont", + extends: Font, + properties: { + _fontFamily: null, + _nativeAsset: { + type: cc.String, + get: function get() { + return this._fontFamily; + }, + set: function set(value) { + this._fontFamily = value || "Arial"; + }, + override: true + }, + _nativeDep: { + get: function get() { + return { + uuid: this._uuid, + __nativeName__: this._native, + ext: cc.path.extname(this._native), + __isNative__: true + }; + }, + override: true + } + } + }); + cc.TTFFont = module.exports = TTFFont; + }), { + "./CCFont": 61 + } ], + 71: [ (function(require, module, exports) { + "use strict"; + var TextAsset = cc.Class({ + name: "cc.TextAsset", + extends: cc.Asset, + properties: { + text: "" + }, + toString: function toString() { + return this.text; + } + }); + module.exports = cc.TextAsset = TextAsset; + }), {} ], + 72: [ (function(require, module, exports) { + "use strict"; + var _gfx = _interopRequireDefault(require("../../renderer/gfx")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var EventTarget = require("../event/event-target"); + var renderer = require("../renderer"); + require("../platform/CCClass"); + var GL_NEAREST = 9728; + var GL_LINEAR = 9729; + var GL_REPEAT = 10497; + var GL_CLAMP_TO_EDGE = 33071; + var GL_MIRRORED_REPEAT = 33648; + var GL_RGBA = 6408; + var CHAR_CODE_0 = 48; + var CHAR_CODE_1 = 49; + var idGenerater = new (require("../platform/id-generater"))("Tex"); + var CUSTOM_PIXEL_FORMAT = 1024; + var PixelFormat = cc.Enum({ + RGB565: _gfx["default"].TEXTURE_FMT_R5_G6_B5, + RGB5A1: _gfx["default"].TEXTURE_FMT_R5_G5_B5_A1, + RGBA4444: _gfx["default"].TEXTURE_FMT_R4_G4_B4_A4, + RGB888: _gfx["default"].TEXTURE_FMT_RGB8, + RGBA8888: _gfx["default"].TEXTURE_FMT_RGBA8, + RGBA32F: _gfx["default"].TEXTURE_FMT_RGBA32F, + A8: _gfx["default"].TEXTURE_FMT_A8, + I8: _gfx["default"].TEXTURE_FMT_L8, + AI8: _gfx["default"].TEXTURE_FMT_L8_A8, + RGB_PVRTC_2BPPV1: _gfx["default"].TEXTURE_FMT_RGB_PVRTC_2BPPV1, + RGBA_PVRTC_2BPPV1: _gfx["default"].TEXTURE_FMT_RGBA_PVRTC_2BPPV1, + RGB_A_PVRTC_2BPPV1: CUSTOM_PIXEL_FORMAT++, + RGB_PVRTC_4BPPV1: _gfx["default"].TEXTURE_FMT_RGB_PVRTC_4BPPV1, + RGBA_PVRTC_4BPPV1: _gfx["default"].TEXTURE_FMT_RGBA_PVRTC_4BPPV1, + RGB_A_PVRTC_4BPPV1: CUSTOM_PIXEL_FORMAT++, + RGB_ETC1: _gfx["default"].TEXTURE_FMT_RGB_ETC1, + RGBA_ETC1: CUSTOM_PIXEL_FORMAT++, + RGB_ETC2: _gfx["default"].TEXTURE_FMT_RGB_ETC2, + RGBA_ETC2: _gfx["default"].TEXTURE_FMT_RGBA_ETC2 + }); + var WrapMode = cc.Enum({ + REPEAT: GL_REPEAT, + CLAMP_TO_EDGE: GL_CLAMP_TO_EDGE, + MIRRORED_REPEAT: GL_MIRRORED_REPEAT + }); + var Filter = cc.Enum({ + LINEAR: GL_LINEAR, + NEAREST: GL_NEAREST + }); + var FilterIndex = { + 9728: 0, + 9729: 1 + }; + var _images = []; + var _sharedOpts = { + width: void 0, + height: void 0, + minFilter: void 0, + magFilter: void 0, + wrapS: void 0, + wrapT: void 0, + format: void 0, + genMipmaps: void 0, + images: void 0, + image: void 0, + flipY: void 0, + premultiplyAlpha: void 0 + }; + function _getSharedOptions() { + for (var key in _sharedOpts) _sharedOpts[key] = void 0; + _images.length = 0; + _sharedOpts.images = _images; + return _sharedOpts; + } + var Texture2D = cc.Class({ + name: "cc.Texture2D", + extends: require("../assets/CCAsset"), + mixins: [ EventTarget ], + properties: { + _nativeAsset: { + get: function get() { + return this._image; + }, + set: function set(data) { + data._compressed && data._data ? this.initWithData(data._data, this._format, data.width, data.height) : this.initWithElement(data); + }, + override: true + }, + _format: PixelFormat.RGBA8888, + _premultiplyAlpha: false, + _flipY: false, + _minFilter: Filter.LINEAR, + _magFilter: Filter.LINEAR, + _mipFilter: Filter.LINEAR, + _wrapS: WrapMode.CLAMP_TO_EDGE, + _wrapT: WrapMode.CLAMP_TO_EDGE, + _isAlphaAtlas: false, + _genMipmaps: false, + genMipmaps: { + get: function get() { + return this._genMipmaps; + }, + set: function set(genMipmaps) { + if (this._genMipmaps !== genMipmaps) { + var opts = _getSharedOptions(); + opts.genMipmaps = genMipmaps; + this.update(opts); + } + } + }, + _packable: true, + packable: { + get: function get() { + return this._packable; + }, + set: function set(val) { + this._packable = val; + } + }, + _nativeDep: { + get: function get() { + return { + __isNative__: true, + uuid: this._uuid, + ext: this._native, + __flipY__: this._flipY, + __premultiplyAlpha__: this._premultiplyAlpha + }; + }, + override: true + } + }, + statics: { + PixelFormat: PixelFormat, + WrapMode: WrapMode, + Filter: Filter, + _FilterIndex: FilterIndex, + extnames: [ ".png", ".jpg", ".jpeg", ".bmp", ".webp", ".pvr", ".pkm" ], + _parseExt: function _parseExt(extIdStr, defaultFormat) { + var device = cc.renderer.device; + var extIds = extIdStr.split("_"); + var defaultExt = ""; + var bestExt = ""; + var bestIndex = 999; + var bestFormat = defaultFormat; + var SupportTextureFormats = cc.macro.SUPPORT_TEXTURE_FORMATS; + for (var i = 0; i < extIds.length; i++) { + var extFormat = extIds[i].split("@"); + var tmpExt = extFormat[0]; + tmpExt = Texture2D.extnames[tmpExt.charCodeAt(0) - CHAR_CODE_0] || tmpExt; + var index = SupportTextureFormats.indexOf(tmpExt); + if (-1 !== index && index < bestIndex) { + var tmpFormat = extFormat[1] ? parseInt(extFormat[1]) : defaultFormat; + if (".pvr" === tmpExt && !device.ext("WEBGL_compressed_texture_pvrtc")) continue; + if (!(tmpFormat !== PixelFormat.RGB_ETC1 && tmpFormat !== PixelFormat.RGBA_ETC1 || device.ext("WEBGL_compressed_texture_etc1"))) continue; + if (!(tmpFormat !== PixelFormat.RGB_ETC2 && tmpFormat !== PixelFormat.RGBA_ETC2 || device.ext("WEBGL_compressed_texture_etc"))) continue; + if (".webp" === tmpExt && !cc.sys.capabilities.webp) continue; + bestIndex = index; + bestExt = tmpExt; + bestFormat = tmpFormat; + } else defaultExt || (defaultExt = tmpExt); + } + return { + bestExt: bestExt, + bestFormat: bestFormat, + defaultExt: defaultExt + }; + } + }, + ctor: function ctor() { + this._id = idGenerater.getNewId(); + this.loaded = false; + this.width = 0; + this.height = 0; + this._hashDirty = true; + this._hash = 0; + this._texture = null; + false; + this._multiMaterial = null; + }, + getImpl: function getImpl() { + this._texture || (this._texture = new renderer.Texture2D(renderer.device, {})); + return this._texture; + }, + getId: function getId() { + return this._id; + }, + toString: function toString() { + return this.nativeUrl || ""; + }, + update: function update(options) { + if (options) { + var updateImg = false; + void 0 !== options.width && (this.width = options.width); + void 0 !== options.height && (this.height = options.height); + if (void 0 !== options.minFilter) { + this._minFilter = options.minFilter; + options.minFilter = FilterIndex[options.minFilter]; + } + if (void 0 !== options.magFilter) { + this._magFilter = options.magFilter; + options.magFilter = FilterIndex[options.magFilter]; + } + if (void 0 !== options.mipFilter) { + this._mipFilter = options.mipFilter; + options.mipFilter = FilterIndex[options.mipFilter]; + } + void 0 !== options.wrapS && (this._wrapS = options.wrapS); + void 0 !== options.wrapT && (this._wrapT = options.wrapT); + void 0 !== options.format && (this._format = options.format); + if (void 0 !== options.flipY) { + this._flipY = options.flipY; + updateImg = true; + } + if (void 0 !== options.premultiplyAlpha) { + this._premultiplyAlpha = options.premultiplyAlpha; + updateImg = true; + } + void 0 !== options.genMipmaps && (this._genMipmaps = options.genMipmaps); + cc.sys.capabilities.imageBitmap && this._image instanceof ImageBitmap ? this._checkImageBitmap(this._upload.bind(this, options, updateImg)) : this._upload(options, updateImg); + } + }, + _upload: function _upload(options, updateImg) { + updateImg && this._image && (options.image = this._image); + if (options.images && options.images.length > 0) this._image = options.images[0]; else if (void 0 !== options.image) { + this._image = options.image; + if (!options.images) { + _images.length = 0; + options.images = _images; + } + options.images.push(options.image); + } + this._texture && this._texture.update(options); + this._hashDirty = true; + }, + initWithElement: function initWithElement(element) { + if (!element) return; + this._image = element; + if (element.complete || element instanceof HTMLCanvasElement) this.handleLoadedTexture(); else if (cc.sys.capabilities.imageBitmap && element instanceof ImageBitmap) this._checkImageBitmap(this.handleLoadedTexture.bind(this)); else { + var self = this; + element.addEventListener("load", (function() { + self.handleLoadedTexture(); + })); + element.addEventListener("error", (function(err) { + cc.warnID(3119, err.message); + })); + } + }, + initWithData: function initWithData(data, pixelFormat, pixelsWidth, pixelsHeight) { + var opts = _getSharedOptions(); + opts.image = data; + opts.images = [ opts.image ]; + opts.genMipmaps = this._genMipmaps; + opts.premultiplyAlpha = this._premultiplyAlpha; + opts.flipY = this._flipY; + opts.minFilter = FilterIndex[this._minFilter]; + opts.magFilter = FilterIndex[this._magFilter]; + opts.wrapS = this._wrapS; + opts.wrapT = this._wrapT; + opts.format = this._getGFXPixelFormat(pixelFormat); + opts.width = pixelsWidth; + opts.height = pixelsHeight; + this._texture ? this._texture.update(opts) : this._texture = new renderer.Texture2D(renderer.device, opts); + this.width = pixelsWidth; + this.height = pixelsHeight; + this._updateFormat(); + this._checkPackable(); + this.loaded = true; + this.emit("load"); + return true; + }, + getHtmlElementObj: function getHtmlElementObj() { + return this._image; + }, + destroy: function destroy() { + cc.sys.capabilities.imageBitmap && this._image instanceof ImageBitmap && this._image.close && this._image.close(); + this._packable && cc.dynamicAtlasManager && cc.dynamicAtlasManager.deleteAtlasTexture(this); + this.unlinkMaterial(); + this._image = null; + this._texture && this._texture.destroy(); + this._super(); + }, + getPixelFormat: function getPixelFormat() { + return this._format; + }, + hasPremultipliedAlpha: function hasPremultipliedAlpha() { + return this._premultiplyAlpha || false; + }, + isAlphaAtlas: function isAlphaAtlas() { + return this._isAlphaAtlas; + }, + handleLoadedTexture: function handleLoadedTexture() { + if (!this._image || !this._image.width || !this._image.height) return; + this.width = this._image.width; + this.height = this._image.height; + var opts = _getSharedOptions(); + opts.image = this._image; + opts.images = [ opts.image ]; + opts.width = this.width; + opts.height = this.height; + opts.genMipmaps = this._genMipmaps; + opts.format = this._getGFXPixelFormat(this._format); + opts.premultiplyAlpha = this._premultiplyAlpha; + opts.flipY = this._flipY; + opts.minFilter = FilterIndex[this._minFilter]; + opts.magFilter = FilterIndex[this._magFilter]; + opts.wrapS = this._wrapS; + opts.wrapT = this._wrapT; + this._texture ? this._texture.update(opts) : this._texture = new renderer.Texture2D(renderer.device, opts); + this._updateFormat(); + this._checkPackable(); + this.loaded = true; + this.emit("load"); + cc.macro.CLEANUP_IMAGE_CACHE && (this._image instanceof HTMLImageElement ? this._clearImage() : cc.sys.capabilities.imageBitmap && this._image instanceof ImageBitmap && this._image.close && this._image.close()); + }, + description: function description() { + return ""; + }, + releaseTexture: function releaseTexture() { + this._image = null; + this._texture && this._texture.destroy(); + }, + setWrapMode: function setWrapMode(wrapS, wrapT) { + if (this._wrapS !== wrapS || this._wrapT !== wrapT) { + var opts = _getSharedOptions(); + opts.wrapS = wrapS; + opts.wrapT = wrapT; + this.update(opts); + } + }, + setFilters: function setFilters(minFilter, magFilter) { + if (this._minFilter !== minFilter || this._magFilter !== magFilter) { + var opts = _getSharedOptions(); + opts.minFilter = minFilter; + opts.magFilter = magFilter; + this.update(opts); + } + }, + setFlipY: function setFlipY(flipY) { + if (this._flipY !== flipY) { + var opts = _getSharedOptions(); + opts.flipY = flipY; + opts.premultiplyAlpha = this._premultiplyAlpha; + this.update(opts); + } + }, + setPremultiplyAlpha: function setPremultiplyAlpha(premultiply) { + if (this._premultiplyAlpha !== premultiply) { + var opts = _getSharedOptions(); + opts.flipY = this._flipY; + opts.premultiplyAlpha = premultiply; + this.update(opts); + } + }, + _updateFormat: function _updateFormat() { + this._isAlphaAtlas = this._format === PixelFormat.RGBA_ETC1 || this._format === PixelFormat.RGB_A_PVRTC_4BPPV1 || this._format === PixelFormat.RGB_A_PVRTC_2BPPV1; + false; + }, + _checkPackable: function _checkPackable() { + var dynamicAtlas = cc.dynamicAtlasManager; + if (!dynamicAtlas) return; + if (this._isCompressed()) { + this._packable = false; + return; + } + var w = this.width, h = this.height; + if (!this._image || w > dynamicAtlas.maxFrameSize || h > dynamicAtlas.maxFrameSize || this._getHash() !== dynamicAtlas.Atlas.DEFAULT_HASH) { + this._packable = false; + return; + } + this._image && this._image instanceof HTMLCanvasElement && (this._packable = true); + }, + _getOpts: function _getOpts() { + var opts = _getSharedOptions(); + opts.width = this.width; + opts.height = this.height; + opts.genMipmaps = this._genMipmaps; + opts.format = this._format; + opts.premultiplyAlpha = this._premultiplyAlpha; + opts.anisotropy = this._anisotropy; + opts.flipY = this._flipY; + opts.minFilter = FilterIndex[this._minFilter]; + opts.magFilter = FilterIndex[this._magFilter]; + opts.mipFilter = FilterIndex[this._mipFilter]; + opts.wrapS = this._wrapS; + opts.wrapT = this._wrapT; + return opts; + }, + _getGFXPixelFormat: function _getGFXPixelFormat(format) { + format === PixelFormat.RGBA_ETC1 ? format = PixelFormat.RGB_ETC1 : format === PixelFormat.RGB_A_PVRTC_4BPPV1 ? format = PixelFormat.RGB_PVRTC_4BPPV1 : format === PixelFormat.RGB_A_PVRTC_2BPPV1 && (format = PixelFormat.RGB_PVRTC_2BPPV1); + return format; + }, + _resetUnderlyingMipmaps: function _resetUnderlyingMipmaps(mipmapSources) { + var opts = this._getOpts(); + opts.images = mipmapSources || [ null ]; + this._texture ? this._texture.update(opts) : this._texture = new renderer.Texture2D(renderer.device, opts); + }, + _serialize: (false, false) && function() { + var extId = ""; + var exportedExts = this._exportedExts; + !exportedExts && this._native && (exportedExts = [ this._native ]); + if (exportedExts) { + var exts = []; + for (var i = 0; i < exportedExts.length; i++) { + var _extId = ""; + var ext = exportedExts[i]; + if (ext) { + var extFormat = ext.split("@"); + _extId = Texture2D.extnames.indexOf(extFormat[0]); + _extId < 0 && (_extId = ext); + extFormat[1] && (_extId += "@" + extFormat[1]); + } + exts.push(_extId); + } + extId = exts.join("_"); + } + var asset = extId + "," + this._minFilter + "," + this._magFilter + "," + this._wrapS + "," + this._wrapT + "," + (this._premultiplyAlpha ? 1 : 0) + "," + (this._genMipmaps ? 1 : 0) + "," + (this._packable ? 1 : 0); + return asset; + }, + _deserialize: function _deserialize(data) { + var fields = data.split(","); + var extIdStr = fields[0]; + if (extIdStr) { + var result = Texture2D._parseExt(extIdStr, this._format); + if (result.bestExt) { + this._setRawAsset(result.bestExt); + this._format = result.bestFormat; + } else { + if (!result.defaultExt) throw new Error(cc.debug.getError(3121)); + this._setRawAsset(result.defaultExt); + cc.warnID(3120, result.defaultExt, result.defaultExt); + } + } + if (8 === fields.length) { + this._minFilter = parseInt(fields[1]); + this._magFilter = parseInt(fields[2]); + this._wrapS = parseInt(fields[3]); + this._wrapT = parseInt(fields[4]); + this._premultiplyAlpha = fields[5].charCodeAt(0) === CHAR_CODE_1; + this._genMipmaps = fields[6].charCodeAt(0) === CHAR_CODE_1; + this._packable = fields[7].charCodeAt(0) === CHAR_CODE_1; + } + }, + _getHash: function _getHash() { + if (!this._hashDirty) return this._hash; + var genMipmaps = this._genMipmaps ? 1 : 0; + var premultiplyAlpha = this._premultiplyAlpha ? 1 : 0; + var flipY = this._flipY ? 1 : 0; + var minFilter = this._minFilter === Filter.LINEAR ? 1 : 2; + var magFilter = this._magFilter === Filter.LINEAR ? 1 : 2; + var wrapS = this._wrapS === WrapMode.REPEAT ? 1 : this._wrapS === WrapMode.CLAMP_TO_EDGE ? 2 : 3; + var wrapT = this._wrapT === WrapMode.REPEAT ? 1 : this._wrapT === WrapMode.CLAMP_TO_EDGE ? 2 : 3; + var pixelFormat = this._format; + var image = this._image; + false; + this._hash = Number("" + minFilter + magFilter + pixelFormat + wrapS + wrapT + genMipmaps + premultiplyAlpha + flipY); + this._hashDirty = false; + return this._hash; + }, + _isCompressed: function _isCompressed() { + return this._format < PixelFormat.A8 || this._format > PixelFormat.RGBA32F; + }, + _clearImage: function _clearImage() { + this._image.src = ""; + }, + _checkImageBitmap: function _checkImageBitmap(cb) { + var _this = this; + var image = this._image; + var flipY = this._flipY; + var premultiplyAlpha = this._premultiplyAlpha; + this._flipY !== image.flipY || this._premultiplyAlpha !== image.premultiplyAlpha ? createImageBitmap(image, { + imageOrientation: flipY !== image.flipY ? "flipY" : "none", + premultiplyAlpha: premultiplyAlpha ? "premultiply" : "none" + }).then((function(result) { + image.close && image.close(); + result.flipY = flipY; + result.premultiplyAlpha = premultiplyAlpha; + _this._image = result; + cb(); + }), (function(err) { + cc.error(err.message); + })) : cb(); + }, + linkMaterial: function linkMaterial(material, index) { + var handler = material.getMultiHandler(); + if (handler) { + if (null == index) { + if (-1 === handler.autoSetTexture(this)) return false; + } else handler.setTexture(index, this); + this.unlinkMaterial(); + this._multiMaterial = material; + return true; + } + return false; + }, + unlinkMaterial: function unlinkMaterial() { + if (this._multiMaterial) { + var handler = this._multiMaterial.getMultiHandler(); + var _texture = this.getImpl(); + handler.removeTexture(_texture); + this._multiMaterial = null; + } + }, + getLinkedMaterial: function getLinkedMaterial() { + return this._multiMaterial; + }, + hasLinkedMaterial: function hasLinkedMaterial() { + return !!this._multiMaterial; + } + }); + cc.Texture2D = module.exports = Texture2D; + }), { + "../../renderer/gfx": 247, + "../assets/CCAsset": 57, + "../event/event-target": 114, + "../platform/CCClass": 121, + "../platform/id-generater": 138, + "../renderer": 152 + } ], + 73: [ (function(require, module, exports) { + "use strict"; + require("./CCAsset"); + require("./CCFont"); + require("./CCPrefab"); + require("./CCAudioClip"); + require("./CCScripts"); + require("./CCSceneAsset"); + require("./CCSpriteFrame"); + require("./CCTexture2D"); + require("./CCRenderTexture"); + require("./CCTTFFont"); + require("./CCSpriteAtlas"); + require("./CCBitmapFont"); + require("./CCLabelAtlas"); + require("./CCTextAsset"); + require("./CCJsonAsset"); + require("./CCBufferAsset"); + require("./material"); + }), { + "./CCAsset": 57, + "./CCAudioClip": 58, + "./CCBitmapFont": 59, + "./CCBufferAsset": 60, + "./CCFont": 61, + "./CCJsonAsset": 62, + "./CCLabelAtlas": 63, + "./CCPrefab": 64, + "./CCRenderTexture": 65, + "./CCSceneAsset": 66, + "./CCScripts": 67, + "./CCSpriteAtlas": 68, + "./CCSpriteFrame": 69, + "./CCTTFFont": 70, + "./CCTextAsset": 71, + "./CCTexture2D": 72, + "./material": 80 + } ], + 74: [ (function(require, module, exports) { + "use strict"; + var _CCAsset = _interopRequireDefault(require("../CCAsset")); + var _effectParser = require("./effect-parser"); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var EffectAsset = cc.Class({ + name: "cc.EffectAsset", + extends: _CCAsset["default"], + ctor: function ctor() { + this._effect = null; + }, + properties: { + properties: Object, + techniques: [], + shaders: [] + }, + onLoad: function onLoad() { + if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS) return; + var lib = cc.renderer._forward._programLib; + for (var i = 0; i < this.shaders.length; i++) lib.define(this.shaders[i]); + this._initEffect(); + }, + _initEffect: function _initEffect() { + if (this._effect) return; + this._effect = (0, _effectParser.parseEffect)(this); + Object.freeze(this._effect); + }, + getInstantiatedEffect: function getInstantiatedEffect() { + this._initEffect(); + return this._effect.clone(); + }, + getEffect: function getEffect() { + this._initEffect(); + return this._effect; + } + }); + module.exports = cc.EffectAsset = EffectAsset; + }), { + "../CCAsset": 57, + "./effect-parser": 77 + } ], + 75: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var Asset = require("../CCAsset"); + var Texture = require("../CCTexture2D"); + var PixelFormat = Texture.PixelFormat; + var EffectAsset = require("./CCEffectAsset"); + var textureUtil = require("../../utils/texture-util"); + var gfx = cc.gfx; + var BUILTIN_NAME = cc.Enum({ + SPRITE: "2d-sprite", + GRAY_SPRITE: "2d-gray-sprite", + UNLIT: "unlit" + }); + var Material = cc.Class({ + name: "cc.Material", + extends: Asset, + ctor: function ctor() { + this.loaded = false; + this._manualHash = false; + this._dirty = true; + this._effect = null; + this._multiHandler = null; + }, + properties: { + _defines: { + default: void 0, + type: Object + }, + _props: { + default: void 0, + type: Object + }, + _effectAsset: { + type: EffectAsset, + default: null + }, + _techniqueIndex: 0, + _techniqueData: Object, + effectName: void 0, + effectAsset: { + get: function get() { + return this._effectAsset; + }, + set: function set(asset) { + if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS) return; + this._effectAsset = asset; + if (!asset) { + cc.error("Can not set an empty effect asset."); + return; + } + this._effect = this._effectAsset.getInstantiatedEffect(); + this.updateMultiSupport(); + } + }, + effect: { + get: function get() { + return this._effect; + } + }, + techniqueIndex: { + get: function get() { + return this._techniqueIndex; + }, + set: function set(v) { + this._techniqueIndex = v; + this._effect.switchTechnique(v); + this.updateMultiSupport(); + } + } + }, + statics: { + getBuiltinMaterial: function getBuiltinMaterial(name) { + if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS) return new cc.Material(); + return cc.assetManager.builtins.getBuiltin("material", "builtin-" + name); + }, + BUILTIN_NAME: BUILTIN_NAME, + createWithBuiltin: function createWithBuiltin(effectName, techniqueIndex) { + void 0 === techniqueIndex && (techniqueIndex = 0); + var effectAsset = cc.assetManager.builtins.getBuiltin("effect", "builtin-" + effectName); + return Material.create(effectAsset, techniqueIndex); + }, + create: function create(effectAsset, techniqueIndex) { + void 0 === techniqueIndex && (techniqueIndex = 0); + if (!effectAsset) return null; + var material = new Material(); + material.effectAsset = effectAsset; + material.techniqueIndex = techniqueIndex; + return material; + } + }, + setProperty: function setProperty(name, val, passIdx, directly) { + if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS) return; + "string" === typeof passIdx && (passIdx = parseInt(passIdx)); + if (val instanceof Texture) { + var isAlphaAtlas = val.isAlphaAtlas(); + var key = "CC_USE_ALPHA_ATLAS_" + name; + var def = this.getDefine(key, passIdx); + (isAlphaAtlas || def) && this.define(key, isAlphaAtlas); + val.loaded || cc.assetManager.postLoadNative(val); + } + this._effect.setProperty(name, val, passIdx, directly); + }, + getProperty: function getProperty(name, passIdx) { + "string" === typeof passIdx && (passIdx = parseInt(passIdx)); + return this._effect.getProperty(name, passIdx); + }, + define: function define(name, val, passIdx, force) { + if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS) return; + "string" === typeof passIdx && (passIdx = parseInt(passIdx)); + this._effect.define(name, val, passIdx, force); + }, + getDefine: function getDefine(name, passIdx) { + "string" === typeof passIdx && (passIdx = parseInt(passIdx)); + return this._effect.getDefine(name, passIdx); + }, + setCullMode: function setCullMode(cullMode, passIdx) { + void 0 === cullMode && (cullMode = gfx.CULL_BACK); + this._effect.setCullMode(cullMode, passIdx); + }, + setDepth: function setDepth(depthTest, depthWrite, depthFunc, passIdx) { + void 0 === depthTest && (depthTest = false); + void 0 === depthWrite && (depthWrite = false); + void 0 === depthFunc && (depthFunc = gfx.DS_FUNC_LESS); + this._effect.setDepth(depthTest, depthWrite, depthFunc, passIdx); + }, + setBlend: function setBlend(enabled, blendEq, blendSrc, blendDst, blendAlphaEq, blendSrcAlpha, blendDstAlpha, blendColor, passIdx) { + void 0 === enabled && (enabled = false); + void 0 === blendEq && (blendEq = gfx.BLEND_FUNC_ADD); + void 0 === blendSrc && (blendSrc = gfx.BLEND_SRC_ALPHA); + void 0 === blendDst && (blendDst = gfx.BLEND_ONE_MINUS_SRC_ALPHA); + void 0 === blendAlphaEq && (blendAlphaEq = gfx.BLEND_FUNC_ADD); + void 0 === blendSrcAlpha && (blendSrcAlpha = gfx.BLEND_SRC_ALPHA); + void 0 === blendDstAlpha && (blendDstAlpha = gfx.BLEND_ONE_MINUS_SRC_ALPHA); + void 0 === blendColor && (blendColor = 4294967295); + this._effect.setBlend(enabled, blendEq, blendSrc, blendDst, blendAlphaEq, blendSrcAlpha, blendDstAlpha, blendColor, passIdx); + }, + setStencilEnabled: function setStencilEnabled(stencilTest, passIdx) { + void 0 === stencilTest && (stencilTest = gfx.STENCIL_INHERIT); + this._effect.setStencilEnabled(stencilTest, passIdx); + }, + setStencil: function setStencil(stencilTest, stencilFunc, stencilRef, stencilMask, stencilFailOp, stencilZFailOp, stencilZPassOp, stencilWriteMask, passIdx) { + void 0 === stencilTest && (stencilTest = gfx.STENCIL_INHERIT); + void 0 === stencilFunc && (stencilFunc = gfx.DS_FUNC_ALWAYS); + void 0 === stencilRef && (stencilRef = 0); + void 0 === stencilMask && (stencilMask = 255); + void 0 === stencilFailOp && (stencilFailOp = gfx.STENCIL_OP_KEEP); + void 0 === stencilZFailOp && (stencilZFailOp = gfx.STENCIL_OP_KEEP); + void 0 === stencilZPassOp && (stencilZPassOp = gfx.STENCIL_OP_KEEP); + void 0 === stencilWriteMask && (stencilWriteMask = 255); + this._effect.setStencil(stencilTest, stencilFunc, stencilRef, stencilMask, stencilFailOp, stencilZFailOp, stencilZPassOp, stencilWriteMask, passIdx); + }, + updateHash: function updateHash(hash) { + this._manualHash = hash; + this._effect && this._effect.updateHash(hash); + }, + getHash: function getHash() { + return this._manualHash || this._effect && this._effect.getHash(); + }, + onLoad: function onLoad() { + this.effectAsset = this._effectAsset; + if (!this._effect) return; + this._techniqueIndex && this._effect.switchTechnique(this._techniqueIndex); + this._techniqueData = this._techniqueData || {}; + var passDatas = this._techniqueData; + for (var index in passDatas) { + index = parseInt(index); + var passData = passDatas[index]; + if (!passData) continue; + for (var def in passData.defines) this.define(def, passData.defines[def], index); + for (var prop in passData.props) this.setProperty(prop, passData.props[prop], index); + } + this.updateMultiSupport(); + this._multiHandler && this._multiHandler.syncTextures(); + }, + updateMultiSupport: function updateMultiSupport() { + var passes = this._effect.technique.passes; + passes.length > 0 && passes[0].getDefine("USE_MULTI_TEXTURE") ? this.setMultiSupport(true) : this.setMultiSupport(false); + }, + isMultiSupport: function isMultiSupport() { + return !!this._multiHandler; + }, + setMultiSupport: function setMultiSupport(bool) { + bool ? this._multiHandler ? this._multiHandler.syncTextures() : this._multiHandler = new cc.sp.MultiHandler(this) : bool || (this._multiHandler = null); + }, + getMultiHandler: function getMultiHandler() { + return this._multiHandler; + } + }); + var _default = Material; + exports["default"] = _default; + cc.Material = Material; + module.exports = exports["default"]; + }), { + "../../utils/texture-util": 213, + "../CCAsset": 57, + "../CCTexture2D": 72, + "./CCEffectAsset": 74 + } ], + 76: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _pass = _interopRequireDefault(require("../../../renderer/core/pass")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + var gfx = cc.gfx; + var EffectBase = (function() { + function EffectBase() { + this._dirty = true; + this._dirtyCode = 0; + this._name = ""; + this._technique = null; + } + var _proto = EffectBase.prototype; + _proto._createPassProp = function _createPassProp(name, pass) { + var prop = pass._properties[name]; + if (!prop) return; + var uniform = Object.create(null); + uniform.name = name; + uniform.type = prop.type; + prop.value instanceof Float32Array ? uniform.value = new Float32Array(prop.value) : prop.value instanceof Float64Array ? uniform.value = new Float64Array(prop.value) : uniform.value = prop.value; + pass._properties[name] = uniform; + return uniform; + }; + _proto._setPassProperty = function _setPassProperty(name, value, pass, directly) { + var properties = pass._properties; + properties.hasOwnProperty(name) || this._createPassProp(name, pass); + if (properties[name].value === value) return true; + this._dirty = true; + this._dirtyCode++; + return _pass["default"].prototype.setProperty.call(pass, name, value, directly); + }; + _proto.setProperty = function setProperty(name, value, passIdx, directly) { + var success = false; + var passes = this.passes; + var start = 0, end = passes.length; + void 0 !== passIdx && (start = passIdx, end = passIdx + 1); + for (var i = start; i < end; i++) this._setPassProperty(name, value, passes[i], directly) && (success = true); + success || cc.warnID(9103, this.name, name); + }; + _proto.getProperty = function getProperty(name, passIdx) { + var passes = this.passes; + if (passIdx >= passes.length) return; + var start = 0, end = passes.length; + void 0 !== passIdx && (start = passIdx, end = passIdx + 1); + for (var i = start; i < end; i++) { + var value = passes[i].getProperty(name); + if (void 0 !== value) return value; + } + }; + _proto.define = function define(name, value, passIdx, force) { + var success = false; + var passes = this.passes; + var start = 0, end = passes.length; + void 0 !== passIdx && (start = passIdx, end = passIdx + 1); + for (var i = start; i < end; i++) passes[i].define(name, value, force) && (success = true); + success || cc.warnID(9104, this.name, name); + }; + _proto.getDefine = function getDefine(name, passIdx) { + var passes = this.passes; + if (passIdx >= passes.length) return; + var start = 0, end = passes.length; + void 0 !== passIdx && (start = passIdx, end = passIdx + 1); + for (var i = start; i < end; i++) { + var value = passes[i].getDefine(name); + if (void 0 !== value) return value; + } + }; + _proto.setCullMode = function setCullMode(cullMode, passIdx) { + void 0 === cullMode && (cullMode = gfx.CULL_BACK); + var passes = this.passes; + var start = 0, end = passes.length; + void 0 !== passIdx && (start = passIdx, end = passIdx + 1); + for (var i = start; i < end; i++) passes[i].setCullMode(cullMode); + this._dirty = true; + this._dirtyCode++; + }; + _proto.setDepth = function setDepth(depthTest, depthWrite, depthFunc, passIdx) { + var passes = this.passes; + var start = 0, end = passes.length; + void 0 !== passIdx && (start = passIdx, end = passIdx + 1); + for (var i = start; i < end; i++) passes[i].setDepth(depthTest, depthWrite, depthFunc); + this._dirty = true; + this._dirtyCode++; + }; + _proto.setBlend = function setBlend(enabled, blendEq, blendSrc, blendDst, blendAlphaEq, blendSrcAlpha, blendDstAlpha, blendColor, passIdx) { + var passes = this.passes; + var start = 0, end = passes.length; + void 0 !== passIdx && (start = passIdx, end = passIdx + 1); + for (var i = start; i < end; i++) passes[i].setBlend(enabled, blendEq, blendSrc, blendDst, blendAlphaEq, blendSrcAlpha, blendDstAlpha, blendColor); + this._dirty = true; + this._dirtyCode++; + }; + _proto.setStencilEnabled = function setStencilEnabled(stencilTest, passIdx) { + void 0 === stencilTest && (stencilTest = gfx.STENCIL_INHERIT); + var passes = this.passes; + var start = 0, end = passes.length; + void 0 !== passIdx && (start = passIdx, end = passIdx + 1); + for (var i = start; i < end; i++) passes[i].setStencilEnabled(stencilTest); + this._dirty = true; + this._dirtyCode++; + }; + _proto.setStencil = function setStencil(enabled, stencilFunc, stencilRef, stencilMask, stencilFailOp, stencilZFailOp, stencilZPassOp, stencilWriteMask, passIdx) { + var passes = this.passes; + var start = 0, end = passes.length; + void 0 !== passIdx && (start = passIdx, end = passIdx + 1); + for (var i = start; i < end; i++) { + var pass = passes[i]; + pass.setStencilFront(enabled, stencilFunc, stencilRef, stencilMask, stencilFailOp, stencilZFailOp, stencilZPassOp, stencilWriteMask); + pass.setStencilBack(enabled, stencilFunc, stencilRef, stencilMask, stencilFailOp, stencilZFailOp, stencilZPassOp, stencilWriteMask); + } + this._dirty = true; + this._dirtyCode++; + }; + _createClass(EffectBase, [ { + key: "name", + get: function get() { + return this._name; + } + }, { + key: "technique", + get: function get() { + return this._technique; + } + }, { + key: "passes", + get: function get() { + return []; + } + } ]); + return EffectBase; + })(); + exports["default"] = EffectBase; + cc.EffectBase = EffectBase; + module.exports = exports["default"]; + }), { + "../../../renderer/core/pass": 238 + } ], + 77: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.parseEffect = parseEffect; + var _pass = _interopRequireDefault(require("../../../renderer/core/pass")); + var _types = require("../../../renderer/types"); + var _enums = _interopRequireDefault(require("../../../renderer/enums")); + var _effect = _interopRequireDefault(require("./effect")); + var _technique = _interopRequireDefault(require("../../../renderer/core/technique")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function getInvolvedProgram(programName) { + var lib = cc.renderer._forward._programLib; + return lib.getTemplate(programName); + } + function parseProperties(effectAsset, passJson) { + var propertiesJson = passJson.properties || {}; + var program = getInvolvedProgram(passJson.program); + var _loop = function _loop(prop) { + var uniformInfo = program.uniforms.find((function(u) { + return u.name === prop; + })); + if (!uniformInfo) { + cc.warnID(9107, effectAsset.name, prop); + return "continue"; + } + }; + for (var prop in propertiesJson) { + var _ret = _loop(prop); + if ("continue" === _ret) continue; + } + var properties = {}; + program.uniforms.forEach((function(u) { + var name = u.name, prop = properties[name] = Object.assign({}, u), propInfo = propertiesJson[name]; + var value; + value = propInfo ? propInfo.type === _enums["default"].PARAM_TEXTURE_2D ? null : propInfo.type === _enums["default"].PARAM_INT || propInfo.type === _enums["default"].PARAM_FLOAT ? Array.isArray(propInfo.value) ? propInfo.value[0] : propInfo.value : new Float32Array(propInfo.value) : _types.enums2default[u.type]; + void 0 === value && (value = null); + prop.value = value; + })); + return properties; + } + function passDefines(pass) { + var defines = {}; + var program = getInvolvedProgram(pass.program); + program.defines.forEach((function(d) { + defines[d.name] = _types.enums2default[d.type]; + })); + return defines; + } + function parseTechniques(effectAsset) { + var techNum = effectAsset.techniques.length; + var techniques = new Array(techNum); + for (var j = 0; j < techNum; ++j) { + var tech = effectAsset.techniques[j]; + var techName = tech.name || j; + var passNum = tech.passes.length; + var passes = new Array(passNum); + for (var k = 0; k < passNum; ++k) { + var pass = tech.passes[k]; + var passName = pass.name || k; + var detailName = effectAsset.name + "-" + techName + "-" + passName; + var stage = pass.stage || "opaque"; + var properties = parseProperties(effectAsset, pass); + var defines = passDefines(pass); + var newPass = passes[k] = new _pass["default"](passName, detailName, pass.program, stage, properties, defines); + pass.rasterizerState && newPass.setCullMode(pass.rasterizerState.cullMode); + var blendState = pass.blendState && pass.blendState.targets[0]; + blendState && newPass.setBlend(blendState.blend, blendState.blendEq, blendState.blendSrc, blendState.blendDst, blendState.blendAlphaEq, blendState.blendSrcAlpha, blendState.blendDstAlpha, blendState.blendColor); + var depthStencilState = pass.depthStencilState; + if (depthStencilState) { + newPass.setDepth(depthStencilState.depthTest, depthStencilState.depthWrite, depthStencilState.depthFunc); + newPass.setStencilFront(depthStencilState.stencilTest, depthStencilState.stencilFuncFront, depthStencilState.stencilRefFront, depthStencilState.stencilMaskFront, depthStencilState.stencilFailOpFront, depthStencilState.stencilZFailOpFront, depthStencilState.stencilZPassOpFront, depthStencilState.stencilWriteMaskFront); + newPass.setStencilBack(depthStencilState.stencilTest, depthStencilState.stencilFuncBack, depthStencilState.stencilRefBack, depthStencilState.stencilMaskBack, depthStencilState.stencilFailOpBack, depthStencilState.stencilZFailOpBack, depthStencilState.stencilZPassOpBack, depthStencilState.stencilWriteMaskBack); + } + } + techniques[j] = new _technique["default"](techName, passes); + } + return techniques; + } + function parseEffect(effect) { + var techniques = parseTechniques(effect); + return new _effect["default"](effect.name, techniques, 0, effect); + } + false; + }), { + "../../../renderer/core/pass": 238, + "../../../renderer/core/technique": 240, + "../../../renderer/enums": 242, + "../../../renderer/types": 270, + "./effect": 79 + } ], + 78: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _murmurhash2_gc = _interopRequireDefault(require("../../../renderer/murmurhash2_gc")); + var _utils = _interopRequireDefault(require("./utils")); + var _effectBase = _interopRequireDefault(require("./effect-base")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var gfx = cc.gfx; + var EffectVariant = (function(_EffectBase) { + _inheritsLoose(EffectVariant, _EffectBase); + function EffectVariant(effect) { + var _this; + _this = _EffectBase.call(this) || this; + _this._effect = void 0; + _this._passes = []; + _this._stagePasses = {}; + _this._hash = 0; + _this._effectDirtyCode = 0; + _this.init(effect); + return _this; + } + var _proto = EffectVariant.prototype; + _proto._onEffectChanged = function _onEffectChanged() {}; + _proto.init = function init(effect) { + effect instanceof EffectVariant && (effect = effect.effect); + this._effect = effect; + this._dirty = true; + if (effect) { + var passes = effect.passes; + var variantPasses = this._passes; + variantPasses.length = 0; + var stagePasses = this._stagePasses = {}; + for (var i = 0; i < passes.length; i++) { + var variant = variantPasses[i] = Object.setPrototypeOf({}, passes[i]); + variant._properties = Object.setPrototypeOf({}, passes[i]._properties); + variant._defines = Object.setPrototypeOf({}, passes[i]._defines); + stagePasses[variant._stage] || (stagePasses[variant._stage] = []); + stagePasses[variant._stage].push(variant); + } + } + }; + _proto.updateHash = function updateHash(hash) {}; + _proto.getHash = function getHash() { + var effect = this._effect; + if (!this._dirty && (!effect || this._effectDirtyCode === effect._dirtyCode)) return this._hash; + this._dirty = false; + var hash = ""; + hash += _utils["default"].serializePasses(this._passes); + if (effect) { + this._effectDirtyCode = effect._dirtyCode; + hash += _utils["default"].serializePasses(effect.passes); + } + this._hash = (0, _murmurhash2_gc["default"])(hash, 666); + this.updateHash(this._hash); + return this._hash; + }; + _createClass(EffectVariant, [ { + key: "effect", + get: function get() { + return this._effect; + } + }, { + key: "name", + get: function get() { + return this._effect && this._effect.name + " (variant)"; + } + }, { + key: "passes", + get: function get() { + return this._passes; + } + }, { + key: "stagePasses", + get: function get() { + return this._stagePasses; + } + } ]); + return EffectVariant; + })(_effectBase["default"]); + exports["default"] = EffectVariant; + cc.EffectVariant = EffectVariant; + module.exports = exports["default"]; + }), { + "../../../renderer/murmurhash2_gc": 265, + "./effect-base": 76, + "./utils": 83 + } ], + 79: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _effectBase = _interopRequireDefault(require("./effect-base")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var Effect = (function(_EffectBase) { + _inheritsLoose(Effect, _EffectBase); + function Effect(name, techniques, techniqueIndex, asset) { + var _this; + _this = _EffectBase.call(this) || this; + _this._techniques = []; + _this._asset = null; + _this.init(name, techniques, techniqueIndex, asset, true); + return _this; + } + var _proto = Effect.prototype; + _proto.init = function init(name, techniques, techniqueIndex, asset, createNative) { + this._name = name; + this._techniques = techniques; + this._technique = techniques[techniqueIndex]; + this._asset = asset; + }; + _proto.switchTechnique = function switchTechnique(index) { + if (index >= this._techniques.length) { + cc.warn("Can not switch to technique with index [" + index + "]"); + return; + } + this._technique = this._techniques[index]; + }; + _proto.clear = function clear() { + this._techniques = []; + }; + _proto.clone = function clone() { + var techniques = []; + for (var i = 0; i < this._techniques.length; i++) techniques.push(this._techniques[i].clone()); + var techniqueIndex = this._techniques.indexOf(this._technique); + return new Effect(this._name, techniques, techniqueIndex, this._asset); + }; + _createClass(Effect, [ { + key: "technique", + get: function get() { + return this._technique; + } + }, { + key: "passes", + get: function get() { + return this._technique.passes; + } + } ]); + return Effect; + })(_effectBase["default"]); + exports["default"] = Effect; + cc.Effect = Effect; + module.exports = exports["default"]; + }), { + "./effect-base": 76 + } ], + 80: [ (function(require, module, exports) { + "use strict"; + require("./CCEffectAsset"); + require("./CCMaterial"); + require("./material-variant"); + }), { + "./CCEffectAsset": 74, + "./CCMaterial": 75, + "./material-variant": 82 + } ], + 81: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _utils = _interopRequireDefault(require("./utils")); + var _pool = _interopRequireDefault(require("../../utils/pool")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var MaterialPool = (function(_Pool) { + _inheritsLoose(MaterialPool, _Pool); + function MaterialPool() { + var _this; + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) args[_key] = arguments[_key]; + _this = _Pool.call.apply(_Pool, [ this ].concat(args)) || this; + _this.enabled = false; + _this._pool = {}; + return _this; + } + var _proto = MaterialPool.prototype; + _proto.get = function get(exampleMat, renderComponent) { + var pool = this._pool; + if (exampleMat instanceof cc.MaterialVariant) { + if (!exampleMat._owner) { + exampleMat._owner = renderComponent; + return exampleMat; + } + if (exampleMat._owner === renderComponent) return exampleMat; + exampleMat = exampleMat.material; + } + var instance; + if (this.enabled) { + var uuid = exampleMat.effectAsset._uuid; + if (pool[uuid]) { + var key = _utils["default"].serializeDefines(exampleMat._effect._defines) + _utils["default"].serializeTechniques(exampleMat._effect._techniques); + instance = pool[uuid][key] && pool[uuid][key].pop(); + } + } + if (instance) this.count--; else { + instance = new cc.MaterialVariant(exampleMat); + instance._name = exampleMat._name + " (Instance)"; + instance._uuid = exampleMat._uuid; + } + instance._owner = renderComponent; + return instance; + }; + _proto.put = function put(mat) { + if (!this.enabled || !mat._owner) return; + var pool = this._pool; + var uuid = mat.effectAsset._uuid; + pool[uuid] || (pool[uuid] = {}); + var key = _utils["default"].serializeDefines(mat._effect._defines) + _utils["default"].serializeTechniques(mat._effect._techniques); + pool[uuid][key] || (pool[uuid][key] = []); + if (this.count > this.maxSize) return; + this._clean(mat); + pool[uuid][key].push(mat); + this.count++; + }; + _proto.clear = function clear() { + this._pool = {}; + this.count = 0; + }; + _proto._clean = function _clean(mat) { + mat._owner = null; + }; + return MaterialPool; + })(_pool["default"]); + var materialPool = new MaterialPool(); + _pool["default"].register("material", materialPool); + var _default = materialPool; + exports["default"] = _default; + module.exports = exports["default"]; + }), { + "../../utils/pool": 207, + "./utils": 83 + } ], + 82: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _CCMaterial = _interopRequireDefault(require("./CCMaterial")); + var _effectVariant = _interopRequireDefault(require("./effect-variant")); + var _materialPool = _interopRequireDefault(require("./material-pool")); + var _dec, _class; + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var ccclass = cc._decorator.ccclass; + var MaterialVariant = (_dec = ccclass("cc.MaterialVariant"), _dec(_class = (function(_Material) { + _inheritsLoose(MaterialVariant, _Material); + MaterialVariant.createWithBuiltin = function createWithBuiltin(materialName, owner) { + return MaterialVariant.create(_CCMaterial["default"].getBuiltinMaterial(materialName), owner); + }; + MaterialVariant.create = function create(material, owner) { + if (!material) return null; + return _materialPool["default"].get(material, owner); + }; + function MaterialVariant(material) { + var _this; + _this = _Material.call(this) || this; + _this._owner = null; + _this._material = null; + _this.init(material); + return _this; + } + var _proto = MaterialVariant.prototype; + _proto.init = function init(material) { + this._effect = new _effectVariant["default"](material.effect); + this._effectAsset = material._effectAsset; + this._material = material; + }; + _createClass(MaterialVariant, [ { + key: "uuid", + get: function get() { + return this._material._uuid; + } + }, { + key: "owner", + get: function get() { + return this._owner; + } + }, { + key: "material", + get: function get() { + return this._material; + } + } ]); + return MaterialVariant; + })(_CCMaterial["default"])) || _class); + exports["default"] = MaterialVariant; + cc.MaterialVariant = MaterialVariant; + module.exports = exports["default"]; + }), { + "./CCMaterial": 75, + "./effect-variant": 78, + "./material-pool": 81 + } ], + 83: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _enums = _interopRequireDefault(require("../../../renderer/enums")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function serializeDefines(defines) { + var str = ""; + for (var name in defines) str += name + defines[name]; + return str; + } + function serializePass(pass, excludeProperties) { + var str = pass._programName + pass._cullMode; + pass._blend && (str += pass._blendEq + pass._blendAlphaEq + pass._blendSrc + pass._blendDst + pass._blendSrcAlpha + pass._blendDstAlpha + pass._blendColor); + pass._depthTest && (str += pass._depthWrite + pass._depthFunc); + pass._stencilTest && (str += pass._stencilFuncFront + pass._stencilRefFront + pass._stencilMaskFront + pass._stencilFailOpFront + pass._stencilZFailOpFront + pass._stencilZPassOpFront + pass._stencilWriteMaskFront + pass._stencilFuncBack + pass._stencilRefBack + pass._stencilMaskBack + pass._stencilFailOpBack + pass._stencilZFailOpBack + pass._stencilZPassOpBack + pass._stencilWriteMaskBack); + excludeProperties || (str += serializeUniforms(pass._properties)); + str += serializeDefines(pass._defines); + return str; + } + function serializePasses(passes) { + var hashData = ""; + for (var i = 0; i < passes.length; i++) hashData += serializePass(passes[i]); + return hashData; + } + function serializeUniforms(uniforms) { + var hashData = ""; + for (var name in uniforms) { + var param = uniforms[name]; + var prop = param.value; + if (!prop) continue; + param.type === _enums["default"].PARAM_TEXTURE_2D || param.type === _enums["default"].PARAM_TEXTURE_CUBE ? hashData += prop._id + ";" : hashData += prop.toString() + ";"; + } + return hashData; + } + var _default = { + serializeDefines: serializeDefines, + serializePasses: serializePasses, + serializeUniforms: serializeUniforms + }; + exports["default"] = _default; + module.exports = exports["default"]; + }), { + "../../../renderer/enums": 242 + } ], + 84: [ (function(require, module, exports) { + "use strict"; + var Event; + true; + Event = require("../CCNode").EventType; + var TOP = 1; + var MID = 2; + var BOT = 4; + var LEFT = 8; + var CENTER = 16; + var RIGHT = 32; + var HORIZONTAL = LEFT | CENTER | RIGHT; + var VERTICAL = TOP | MID | BOT; + var AlignMode = cc.Enum({ + ONCE: 0, + ON_WINDOW_RESIZE: 1, + ALWAYS: 2 + }); + function getReadonlyNodeSize(parent) { + return parent instanceof cc.Scene ? cc.visibleRect : parent._contentSize; + } + function computeInverseTransForTarget(widgetNode, target, out_inverseTranslate, out_inverseScale) { + var scaleX = widgetNode._parent.scaleX; + var scaleY = widgetNode._parent.scaleY; + var translateX = 0; + var translateY = 0; + for (var node = widgetNode._parent; ;) { + translateX += node.x; + translateY += node.y; + node = node._parent; + if (!node) { + out_inverseTranslate.x = out_inverseTranslate.y = 0; + out_inverseScale.x = out_inverseScale.y = 1; + return; + } + if (node === target) break; + var sx = node.scaleX; + var sy = node.scaleY; + translateX *= sx; + translateY *= sy; + scaleX *= sx; + scaleY *= sy; + } + out_inverseScale.x = 0 !== scaleX ? 1 / scaleX : 1; + out_inverseScale.y = 0 !== scaleY ? 1 / scaleY : 1; + out_inverseTranslate.x = -translateX; + out_inverseTranslate.y = -translateY; + } + var tInverseTranslate = cc.Vec2.ZERO; + var tInverseScale = cc.Vec2.ONE; + function align(node, widget) { + var hasTarget = widget._target; + var target; + var inverseTranslate, inverseScale; + if (hasTarget) { + target = hasTarget; + inverseTranslate = tInverseTranslate; + inverseScale = tInverseScale; + computeInverseTransForTarget(node, target, inverseTranslate, inverseScale); + } else target = node._parent; + var targetSize = getReadonlyNodeSize(target); + var targetAnchor = target._anchorPoint; + var isRoot = (true, target instanceof cc.Scene); + var x = node.x, y = node.y; + var anchor = node._anchorPoint; + if (widget._alignFlags & HORIZONTAL) { + var localLeft, localRight, targetWidth = targetSize.width; + if (isRoot) { + localLeft = cc.visibleRect.left.x; + localRight = cc.visibleRect.right.x; + } else { + localLeft = -targetAnchor.x * targetWidth; + localRight = localLeft + targetWidth; + } + localLeft += widget._isAbsLeft ? widget._left : widget._left * targetWidth; + localRight -= widget._isAbsRight ? widget._right : widget._right * targetWidth; + if (hasTarget) { + localLeft += inverseTranslate.x; + localLeft *= inverseScale.x; + localRight += inverseTranslate.x; + localRight *= inverseScale.x; + } + var width, anchorX = anchor.x, scaleX = node.scaleX; + if (scaleX < 0) { + anchorX = 1 - anchorX; + scaleX = -scaleX; + } + if (widget.isStretchWidth) { + width = localRight - localLeft; + 0 !== scaleX && (node.width = width / scaleX); + x = localLeft + anchorX * width; + } else { + width = node.width * scaleX; + if (widget.isAlignHorizontalCenter) { + var localHorizontalCenter = widget._isAbsHorizontalCenter ? widget._horizontalCenter : widget._horizontalCenter * targetWidth; + var targetCenter = (.5 - targetAnchor.x) * targetSize.width; + if (hasTarget) { + localHorizontalCenter *= inverseScale.x; + targetCenter += inverseTranslate.x; + targetCenter *= inverseScale.x; + } + x = targetCenter + (anchorX - .5) * width + localHorizontalCenter; + } else x = widget.isAlignLeft ? localLeft + anchorX * width : localRight + (anchorX - 1) * width; + } + } + if (widget._alignFlags & VERTICAL) { + var localTop, localBottom, targetHeight = targetSize.height; + if (isRoot) { + localBottom = cc.visibleRect.bottom.y; + localTop = cc.visibleRect.top.y; + } else { + localBottom = -targetAnchor.y * targetHeight; + localTop = localBottom + targetHeight; + } + localBottom += widget._isAbsBottom ? widget._bottom : widget._bottom * targetHeight; + localTop -= widget._isAbsTop ? widget._top : widget._top * targetHeight; + if (hasTarget) { + localBottom += inverseTranslate.y; + localBottom *= inverseScale.y; + localTop += inverseTranslate.y; + localTop *= inverseScale.y; + } + var height, anchorY = anchor.y, scaleY = node.scaleY; + if (scaleY < 0) { + anchorY = 1 - anchorY; + scaleY = -scaleY; + } + if (widget.isStretchHeight) { + height = localTop - localBottom; + 0 !== scaleY && (node.height = height / scaleY); + y = localBottom + anchorY * height; + } else { + height = node.height * scaleY; + if (widget.isAlignVerticalCenter) { + var localVerticalCenter = widget._isAbsVerticalCenter ? widget._verticalCenter : widget._verticalCenter * targetHeight; + var targetMiddle = (.5 - targetAnchor.y) * targetSize.height; + if (hasTarget) { + localVerticalCenter *= inverseScale.y; + targetMiddle += inverseTranslate.y; + targetMiddle *= inverseScale.y; + } + y = targetMiddle + (anchorY - .5) * height + localVerticalCenter; + } else y = widget.isAlignBottom ? localBottom + anchorY * height : localTop + (anchorY - 1) * height; + } + } + node.setPosition(x, y); + } + function visitNode(node) { + var widget = node._widget; + if (widget) { + false; + align(node, widget); + true, widget.alignMode !== AlignMode.ALWAYS ? widgetManager.remove(widget) : activeWidgets.push(widget); + } + var children = node._children; + for (var i = 0; i < children.length; i++) { + var child = children[i]; + child._active && visitNode(child); + } + } + var animationState; + false; + function refreshScene() { + var AnimUtils; + var EditMode; + var nowPreviewing; + var component; + var animation; + var _component; + var _animation; + false; + var scene = cc.director.getScene(); + if (scene) { + widgetManager.isAligning = true; + if (widgetManager._nodesOrderDirty) { + activeWidgets.length = 0; + visitNode(scene); + widgetManager._nodesOrderDirty = false; + } else { + var i, widget, iterator = widgetManager._activeWidgetsIterator; + var AnimUtils; + var editingNode; + var node; + false; + for (iterator.i = 0; iterator.i < activeWidgets.length; ++iterator.i) { + widget = activeWidgets[iterator.i]; + align(widget.node, widget); + } + } + widgetManager.isAligning = false; + } + false; + } + var adjustWidgetToAllowMovingInEditor = false; + var adjustWidgetToAllowResizingInEditor = false; + var activeWidgets = []; + function updateAlignment(node) { + var parent = node._parent; + cc.Node.isNode(parent) && updateAlignment(parent); + var widget = node._widget || node.getComponent(cc.Widget); + widget && parent && align(node, widget); + } + var widgetManager = cc._widgetManager = module.exports = { + _AlignFlags: { + TOP: TOP, + MID: MID, + BOT: BOT, + LEFT: LEFT, + CENTER: CENTER, + RIGHT: RIGHT + }, + isAligning: false, + _nodesOrderDirty: false, + _activeWidgetsIterator: new cc.js.array.MutableForwardIterator(activeWidgets), + init: function init(director) { + director.on(cc.Director.EVENT_AFTER_UPDATE, refreshScene); + false; + var thisOnResized = this.onResized.bind(this); + cc.view.on("canvas-resize", thisOnResized); + window.addEventListener("orientationchange", thisOnResized); + }, + add: function add(widget) { + widget.node._widget = widget; + this._nodesOrderDirty = true; + false; + }, + remove: function remove(widget) { + widget.node._widget = null; + this._activeWidgetsIterator.remove(widget); + false; + }, + onResized: function onResized() { + var scene = cc.director.getScene(); + scene && this.refreshWidgetOnResized(scene); + }, + refreshWidgetOnResized: function refreshWidgetOnResized(node) { + var widget = cc.Node.isNode(node) && node.getComponent(cc.Widget); + widget && widget.enabled && widget.alignMode === AlignMode.ON_WINDOW_RESIZE && this.add(widget); + var children = node._children; + for (var i = 0; i < children.length; i++) { + var child = children[i]; + this.refreshWidgetOnResized(child); + } + }, + updateAlignment: updateAlignment, + AlignMode: AlignMode + }; + false; + }), { + "../CCNode": 24 + } ], + 85: [ (function(require, module, exports) { + "use strict"; + var _valueTypes = require("../value-types"); + var _geomUtils = require("../geom-utils"); + var AffineTrans = require("../utils/affine-transform"); + var renderer = require("../renderer/index"); + var RenderFlow = require("../renderer/render-flow"); + var game = require("../CCGame"); + var RendererCamera = null; + false; + RendererCamera = require("../../renderer/scene/camera"); + var _mat4_temp_1 = cc.mat4(); + var _mat4_temp_2 = cc.mat4(); + var _v3_temp_1 = cc.v3(); + var _v3_temp_2 = cc.v3(); + var _v3_temp_3 = cc.v3(); + var _cameras = []; + function updateMainCamera() { + for (var i = 0, minDepth = Number.MAX_VALUE; i < _cameras.length; i++) { + var camera = _cameras[i]; + if (camera._depth < minDepth) { + Camera.main = camera; + minDepth = camera._depth; + } + } + } + var _debugCamera = null; + function repositionDebugCamera() { + if (!_debugCamera) return; + var node = _debugCamera.getNode(); + var canvas = cc.game.canvas; + node.z = canvas.height / 1.1566; + node.x = canvas.width / 2; + node.y = canvas.height / 2; + } + var ClearFlags = cc.Enum({ + COLOR: 1, + DEPTH: 2, + STENCIL: 4 + }); + var StageFlags = cc.Enum({ + OPAQUE: 1, + TRANSPARENT: 2 + }); + var Camera = cc.Class({ + name: "cc.Camera", + extends: cc.Component, + ctor: function ctor() { + if (game.renderType !== game.RENDER_TYPE_CANVAS) { + var camera = new RendererCamera(); + camera.setStages([ "opaque" ]); + camera.dirty = true; + this._inited = false; + this._camera = camera; + } else this._inited = true; + }, + editor: false, + properties: { + _cullingMask: 4294967295, + _clearFlags: ClearFlags.DEPTH | ClearFlags.STENCIL, + _backgroundColor: cc.color(0, 0, 0, 255), + _depth: 0, + _zoomRatio: 1, + _targetTexture: null, + _fov: 60, + _orthoSize: 10, + _nearClip: 1, + _farClip: 4096, + _ortho: true, + _rect: cc.rect(0, 0, 1, 1), + _renderStages: 1, + _alignWithScreen: true, + zoomRatio: { + get: function get() { + return this._zoomRatio; + }, + set: function set(value) { + this._zoomRatio = value; + }, + tooltip: false + }, + fov: { + get: function get() { + return this._fov; + }, + set: function set(v) { + this._fov = v; + }, + tooltip: false + }, + orthoSize: { + get: function get() { + return this._orthoSize; + }, + set: function set(v) { + this._orthoSize = v; + }, + tooltip: false + }, + nearClip: { + get: function get() { + return this._nearClip; + }, + set: function set(v) { + this._nearClip = v; + this._updateClippingpPlanes(); + }, + tooltip: false + }, + farClip: { + get: function get() { + return this._farClip; + }, + set: function set(v) { + this._farClip = v; + this._updateClippingpPlanes(); + }, + tooltip: false + }, + ortho: { + get: function get() { + return this._ortho; + }, + set: function set(v) { + this._ortho = v; + this._updateProjection(); + }, + tooltip: false + }, + rect: { + get: function get() { + return this._rect; + }, + set: function set(v) { + this._rect = v; + this._updateRect(); + }, + tooltip: false + }, + cullingMask: { + get: function get() { + return this._cullingMask; + }, + set: function set(value) { + this._cullingMask = value; + this._updateCameraMask(); + }, + tooltip: false + }, + clearFlags: { + get: function get() { + return this._clearFlags; + }, + set: function set(value) { + this._clearFlags = value; + this._camera && this._camera.setClearFlags(value); + }, + tooltip: false + }, + backgroundColor: { + get: function get() { + return this._backgroundColor; + }, + set: function set(value) { + if (!this._backgroundColor.equals(value)) { + this._backgroundColor.set(value); + this._updateBackgroundColor(); + } + }, + tooltip: false + }, + depth: { + get: function get() { + return this._depth; + }, + set: function set(value) { + Camera.main === this ? this._depth < value && updateMainCamera() : Camera.main && value < Camera.main._depth && _cameras.includes(this) && (Camera.main = this); + this._depth = value; + this._camera && this._camera.setPriority(value); + }, + tooltip: false + }, + targetTexture: { + get: function get() { + return this._targetTexture; + }, + set: function set(value) { + this._targetTexture = value; + this._updateTargetTexture(); + }, + tooltip: false + }, + renderStages: { + get: function get() { + return this._renderStages; + }, + set: function set(val) { + this._renderStages = val; + this._updateStages(); + }, + tooltip: false + }, + alignWithScreen: { + get: function get() { + return this._alignWithScreen; + }, + set: function set(v) { + this._alignWithScreen = v; + } + }, + _is3D: { + get: function get() { + return this.node && this.node._is3DNode; + } + } + }, + statics: { + main: null, + cameras: _cameras, + ClearFlags: ClearFlags, + findCamera: function findCamera(node) { + for (var i = 0, l = _cameras.length; i < l; i++) { + var camera = _cameras[i]; + if (camera.containsNode(node)) return camera; + } + return null; + }, + _findRendererCamera: function _findRendererCamera(node) { + var cameras = renderer.scene._cameras; + for (var i = 0; i < cameras._count; i++) if (cameras._data[i]._cullingMask & node._cullingMask) return cameras._data[i]; + return null; + }, + _setupDebugCamera: function _setupDebugCamera() { + if (_debugCamera) return; + if (game.renderType === game.RENDER_TYPE_CANVAS) return; + var camera = new RendererCamera(); + _debugCamera = camera; + camera.setStages([ "opaque" ]); + camera.setFov(60 * Math.PI / 180); + camera.setNear(.1); + camera.setFar(4096); + camera.dirty = true; + camera.cullingMask = 1 << cc.Node.BuiltinGroupIndex.DEBUG; + camera.setPriority(cc.macro.MAX_ZINDEX); + camera.setClearFlags(0); + camera.setColor(0, 0, 0, 0); + var node = new cc.Node(); + camera.setNode(node); + repositionDebugCamera(); + cc.view.on("design-resolution-changed", repositionDebugCamera); + renderer.scene.addCamera(camera); + } + }, + _updateCameraMask: function _updateCameraMask() { + if (this._camera) { + var mask = this._cullingMask & ~(1 << cc.Node.BuiltinGroupIndex.DEBUG); + this._camera.cullingMask = mask; + } + }, + _updateBackgroundColor: function _updateBackgroundColor() { + if (!this._camera) return; + var color = this._backgroundColor; + this._camera.setColor(color.r / 255, color.g / 255, color.b / 255, color.a / 255); + }, + _updateTargetTexture: function _updateTargetTexture() { + if (!this._camera) return; + var texture = this._targetTexture; + this._camera.setFrameBuffer(texture ? texture._framebuffer : null); + }, + _updateClippingpPlanes: function _updateClippingpPlanes() { + if (!this._camera) return; + this._camera.setNear(this._nearClip); + this._camera.setFar(this._farClip); + }, + _updateProjection: function _updateProjection() { + if (!this._camera) return; + var type = this._ortho ? 1 : 0; + this._camera.setType(type); + }, + _updateRect: function _updateRect() { + if (!this._camera) return; + var rect = this._rect; + this._camera.setRect(rect.x, rect.y, rect.width, rect.height); + }, + _updateStages: function _updateStages() { + var flags = this._renderStages; + var stages = []; + flags & StageFlags.OPAQUE && stages.push("opaque"); + flags & StageFlags.TRANSPARENT && stages.push("transparent"); + this._camera.setStages(stages); + }, + _init: function _init() { + if (this._inited) return; + this._inited = true; + var camera = this._camera; + if (!camera) return; + camera.setNode(this.node); + camera.setClearFlags(this._clearFlags); + camera.setPriority(this._depth); + this._updateBackgroundColor(); + this._updateCameraMask(); + this._updateTargetTexture(); + this._updateClippingpPlanes(); + this._updateProjection(); + this._updateStages(); + this._updateRect(); + true; + this.beforeDraw(); + }, + __preload: function __preload() { + this._init(); + }, + onEnable: function onEnable() { + if (true, game.renderType !== game.RENDER_TYPE_CANVAS) { + cc.director.on(cc.Director.EVENT_BEFORE_DRAW, this.beforeDraw, this); + renderer.scene.addCamera(this._camera); + } + _cameras.push(this); + (!Camera.main || this._depth < Camera.main._depth) && (Camera.main = this); + }, + onDisable: function onDisable() { + if (true, game.renderType !== game.RENDER_TYPE_CANVAS) { + cc.director.off(cc.Director.EVENT_BEFORE_DRAW, this.beforeDraw, this); + renderer.scene.removeCamera(this._camera); + } + cc.js.array.fastRemove(_cameras, this); + if (Camera.main === this) { + Camera.main = null; + updateMainCamera(); + } + }, + getScreenToWorldMatrix2D: function getScreenToWorldMatrix2D(out) { + this.getWorldToScreenMatrix2D(out); + _valueTypes.Mat4.invert(out, out); + return out; + }, + getWorldToScreenMatrix2D: function getWorldToScreenMatrix2D(out) { + this.node.getWorldRT(_mat4_temp_1); + var zoomRatio = this.zoomRatio; + var _mat4_temp_1m = _mat4_temp_1.m; + _mat4_temp_1m[0] *= zoomRatio; + _mat4_temp_1m[1] *= zoomRatio; + _mat4_temp_1m[4] *= zoomRatio; + _mat4_temp_1m[5] *= zoomRatio; + var m12 = _mat4_temp_1m[12]; + var m13 = _mat4_temp_1m[13]; + var center = cc.visibleRect.center; + _mat4_temp_1m[12] = center.x - (_mat4_temp_1m[0] * m12 + _mat4_temp_1m[4] * m13); + _mat4_temp_1m[13] = center.y - (_mat4_temp_1m[1] * m12 + _mat4_temp_1m[5] * m13); + out !== _mat4_temp_1 && _valueTypes.Mat4.copy(out, _mat4_temp_1); + return out; + }, + getScreenToWorldPoint: function getScreenToWorldPoint(screenPosition, out) { + if (this.node.is3DNode) { + out = out || new cc.Vec3(); + this._camera.screenToWorld(out, screenPosition, cc.visibleRect.width, cc.visibleRect.height); + } else { + out = out || new cc.Vec2(); + this.getScreenToWorldMatrix2D(_mat4_temp_1); + _valueTypes.Vec2.transformMat4(out, screenPosition, _mat4_temp_1); + } + return out; + }, + getWorldToScreenPoint: function getWorldToScreenPoint(worldPosition, out) { + if (this.node.is3DNode) { + out = out || new cc.Vec3(); + this._camera.worldToScreen(out, worldPosition, cc.visibleRect.width, cc.visibleRect.height); + } else { + out = out || new cc.Vec2(); + this.getWorldToScreenMatrix2D(_mat4_temp_1); + _valueTypes.Vec2.transformMat4(out, worldPosition, _mat4_temp_1); + } + return out; + }, + getRay: function getRay(screenPos) { + if (!cc.geomUtils) return screenPos; + _valueTypes.Vec3.set(_v3_temp_3, screenPos.x, screenPos.y, 1); + this._camera.screenToWorld(_v3_temp_2, _v3_temp_3, cc.visibleRect.width, cc.visibleRect.height); + if (this.ortho) { + _valueTypes.Vec3.set(_v3_temp_3, screenPos.x, screenPos.y, -1); + this._camera.screenToWorld(_v3_temp_1, _v3_temp_3, cc.visibleRect.width, cc.visibleRect.height); + } else this.node.getWorldPosition(_v3_temp_1); + return _geomUtils.Ray.fromPoints(new _geomUtils.Ray(), _v3_temp_1, _v3_temp_2); + }, + containsNode: function containsNode(node) { + return (node._cullingMask & this.cullingMask) > 0; + }, + render: function render(rootNode) { + rootNode = rootNode || cc.director.getScene(); + if (!rootNode) return null; + this.node.getWorldMatrix(_mat4_temp_1); + this.beforeDraw(); + RenderFlow.renderCamera(this._camera, rootNode); + }, + _onAlignWithScreen: function _onAlignWithScreen() { + var height = cc.game.canvas.height / cc.view._scaleY; + var targetTexture = this._targetTexture; + if (targetTexture) { + false; + height = cc.visibleRect.height; + } + var fov = this._fov * cc.macro.RAD; + this.node.z = height / (2 * Math.tan(fov / 2)); + fov = 2 * Math.atan(Math.tan(fov / 2) / this.zoomRatio); + this._camera.setFov(fov); + this._camera.setOrthoHeight(height / 2 / this.zoomRatio); + this.node.setRotation(0, 0, 0, 1); + }, + beforeDraw: function beforeDraw() { + if (!this._camera) return; + if (this._alignWithScreen) this._onAlignWithScreen(); else { + var fov = this._fov * cc.macro.RAD; + fov = 2 * Math.atan(Math.tan(fov / 2) / this.zoomRatio); + this._camera.setFov(fov); + this._camera.setOrthoHeight(this._orthoSize / this.zoomRatio); + } + this._camera.dirty = true; + } + }); + cc.js.mixin(Camera.prototype, { + getNodeToCameraTransform: function getNodeToCameraTransform(node) { + var out = AffineTrans.identity(); + node.getWorldMatrix(_mat4_temp_2); + if (this.containsNode(node)) { + this.getWorldToCameraMatrix(_mat4_temp_1); + _valueTypes.Mat4.mul(_mat4_temp_2, _mat4_temp_2, _mat4_temp_1); + } + AffineTrans.fromMat4(out, _mat4_temp_2); + return out; + }, + getCameraToWorldPoint: function getCameraToWorldPoint(point, out) { + return this.getScreenToWorldPoint(point, out); + }, + getWorldToCameraPoint: function getWorldToCameraPoint(point, out) { + return this.getWorldToScreenPoint(point, out); + }, + getCameraToWorldMatrix: function getCameraToWorldMatrix(out) { + return this.getScreenToWorldMatrix2D(out); + }, + getWorldToCameraMatrix: function getWorldToCameraMatrix(out) { + return this.getWorldToScreenMatrix2D(out); + } + }); + module.exports = cc.Camera = Camera; + }), { + "../../renderer/scene/camera": 267, + "../CCGame": 23, + "../geom-utils": void 0, + "../renderer/index": 152, + "../renderer/render-flow": 153, + "../utils/affine-transform": 196, + "../value-types": 220 + } ], + 86: [ (function(require, module, exports) { + "use strict"; + require("./platform/CCClass"); + var Flags = require("./platform/CCObject").Flags; + var jsArray = require("./platform/js").array; + var IsStartCalled = Flags.IsStartCalled; + var IsOnEnableCalled = Flags.IsOnEnableCalled; + var IsEditorOnEnableCalled = Flags.IsEditorOnEnableCalled; + var callerFunctor = false; + var callOnEnableInTryCatch = false; + var callOnDisableInTryCatch = false; + function sortedIndex(array, comp) { + var order = comp.constructor._executionOrder; + var id = comp._id; + for (var l = 0, h = array.length - 1, m = h >>> 1; l <= h; m = l + h >>> 1) { + var test = array[m]; + var testOrder = test.constructor._executionOrder; + if (testOrder > order) h = m - 1; else if (testOrder < order) l = m + 1; else { + var testId = test._id; + if (testId > id) h = m - 1; else { + if (!(testId < id)) return m; + l = m + 1; + } + } + } + return ~l; + } + function stableRemoveInactive(iterator, flagToClear) { + var array = iterator.array; + var next = iterator.i + 1; + while (next < array.length) { + var comp = array[next]; + if (comp._enabled && comp.node._activeInHierarchy) ++next; else { + iterator.removeAt(next); + flagToClear && (comp._objFlags &= ~flagToClear); + } + } + } + var LifeCycleInvoker = cc.Class({ + __ctor__: function __ctor__(invokeFunc) { + var Iterator = jsArray.MutableForwardIterator; + this._zero = new Iterator([]); + this._neg = new Iterator([]); + this._pos = new Iterator([]); + false; + this._invoke = invokeFunc; + }, + statics: { + stableRemoveInactive: stableRemoveInactive + }, + add: null, + remove: null, + invoke: null + }); + function compareOrder(a, b) { + return a.constructor._executionOrder - b.constructor._executionOrder; + } + var OneOffInvoker = cc.Class({ + extends: LifeCycleInvoker, + add: function add(comp) { + var order = comp.constructor._executionOrder; + (0 === order ? this._zero : order < 0 ? this._neg : this._pos).array.push(comp); + }, + remove: function remove(comp) { + var order = comp.constructor._executionOrder; + (0 === order ? this._zero : order < 0 ? this._neg : this._pos).fastRemove(comp); + }, + cancelInactive: function cancelInactive(flagToClear) { + stableRemoveInactive(this._zero, flagToClear); + stableRemoveInactive(this._neg, flagToClear); + stableRemoveInactive(this._pos, flagToClear); + }, + invoke: function invoke() { + var compsNeg = this._neg; + if (compsNeg.array.length > 0) { + compsNeg.array.sort(compareOrder); + this._invoke(compsNeg); + compsNeg.array.length = 0; + } + this._invoke(this._zero); + this._zero.array.length = 0; + var compsPos = this._pos; + if (compsPos.array.length > 0) { + compsPos.array.sort(compareOrder); + this._invoke(compsPos); + compsPos.array.length = 0; + } + } + }); + var ReusableInvoker = cc.Class({ + extends: LifeCycleInvoker, + add: function add(comp) { + var order = comp.constructor._executionOrder; + if (0 === order) this._zero.array.push(comp); else { + var array = order < 0 ? this._neg.array : this._pos.array; + var i = sortedIndex(array, comp); + i < 0 && array.splice(~i, 0, comp); + } + }, + remove: function remove(comp) { + var order = comp.constructor._executionOrder; + if (0 === order) this._zero.fastRemove(comp); else { + var iterator = order < 0 ? this._neg : this._pos; + var i = sortedIndex(iterator.array, comp); + i >= 0 && iterator.removeAt(i); + } + }, + invoke: function invoke(dt) { + this._neg.array.length > 0 && this._invoke(this._neg, dt); + this._invoke(this._zero, dt); + this._pos.array.length > 0 && this._invoke(this._pos, dt); + } + }); + function enableInEditor(comp) { + if (!(comp._objFlags & IsEditorOnEnableCalled)) { + cc.engine.emit("component-enabled", comp.uuid); + comp._objFlags |= IsEditorOnEnableCalled; + } + } + function createInvokeImpl(indiePath, useDt, ensureFlag, fastPath) { + true; + var body = "var a=it.array;for(it.i=0;it.i= 0) { + jsArray.fastRemoveAt(this._deferredComps, index); + return; + } + !comp.start || comp._objFlags & IsStartCalled || this.startInvoker.remove(comp); + comp.update && this.updateInvoker.remove(comp); + comp.lateUpdate && this.lateUpdateInvoker.remove(comp); + }, + enableComp: function(comp, invoker) { + if (!(comp._objFlags & IsOnEnableCalled)) { + if (comp.onEnable) { + if (invoker) { + invoker.add(comp); + return; + } + comp.onEnable(); + var deactivatedDuringOnEnable = !comp.node._activeInHierarchy; + if (deactivatedDuringOnEnable) return; + } + this._onEnabled(comp); + } + }, + disableComp: function(comp) { + if (comp._objFlags & IsOnEnableCalled) { + comp.onDisable && comp.onDisable(); + this._onDisabled(comp); + } + }, + _scheduleImmediate: function _scheduleImmediate(comp) { + "function" !== typeof comp.start || comp._objFlags & IsStartCalled || this.startInvoker.add(comp); + "function" === typeof comp.update && this.updateInvoker.add(comp); + "function" === typeof comp.lateUpdate && this.lateUpdateInvoker.add(comp); + }, + _deferredSchedule: function _deferredSchedule() { + var comps = this._deferredComps; + for (var i = 0, len = comps.length; i < len; i++) this._scheduleImmediate(comps[i]); + comps.length = 0; + }, + _startForNewComps: function _startForNewComps() { + if (this._deferredComps.length > 0) { + this._deferredSchedule(); + this.startInvoker.invoke(); + } + }, + startPhase: function startPhase() { + this._updating = true; + this.startInvoker.invoke(); + this._startForNewComps(); + }, + updatePhase: function updatePhase(dt) { + this.updateInvoker.invoke(dt); + }, + lateUpdatePhase: function lateUpdatePhase(dt) { + this.lateUpdateInvoker.invoke(dt); + this._updating = false; + this._startForNewComps(); + } + }); + module.exports = ComponentScheduler; + }), { + "./platform/CCClass": 121, + "./platform/CCObject": 127, + "./platform/js": 142, + "./utils/misc": 205 + } ], + 87: [ (function(require, module, exports) { + "use strict"; + var AnimationAnimator = require("../../animation/animation-animator"); + var AnimationClip = require("../../animation/animation-clip"); + var EventTarget = require("../event/event-target"); + var js = require("../platform/js"); + var equalClips = function(clip1, clip2) { + return clip1 === clip2; + }; + var EventType = cc.Enum({ + PLAY: "play", + STOP: "stop", + PAUSE: "pause", + RESUME: "resume", + LASTFRAME: "lastframe", + FINISHED: "finished" + }); + var Animation = cc.Class({ + name: "cc.Animation", + extends: require("./CCComponent"), + mixins: [ EventTarget ], + editor: false, + statics: { + EventType: EventType + }, + ctor: function ctor() { + cc.EventTarget.call(this); + this._animator = null; + this._nameToState = js.createMap(true); + this._didInit = false; + this._currentClip = null; + }, + properties: { + _defaultClip: { + default: null, + type: AnimationClip + }, + defaultClip: { + type: AnimationClip, + get: function get() { + return this._defaultClip; + }, + set: function set(value) { + true; + return; + var contain; + }, + tooltip: false + }, + currentClip: { + get: function get() { + return this._currentClip; + }, + set: function set(value) { + this._currentClip = value; + }, + type: AnimationClip, + visible: false + }, + _writableClips: { + get: function get() { + return this._clips; + }, + set: function set(val) { + this._didInit = false; + this._clips = val; + this._init(); + }, + type: [ AnimationClip ] + }, + _clips: { + default: [], + type: [ AnimationClip ], + tooltip: false, + visible: true + }, + playOnLoad: { + default: false, + tooltip: false + } + }, + start: function start() { + if ((true, this.playOnLoad) && this._defaultClip) { + var isPlaying = this._animator && this._animator.isPlaying; + if (!isPlaying) { + var state = this.getAnimationState(this._defaultClip.name); + this._animator.playState(state); + } + } + }, + onEnable: function onEnable() { + this._animator && this._animator.resume(); + }, + onDisable: function onDisable() { + this._animator && this._animator.pause(); + }, + onDestroy: function onDestroy() { + this.stop(); + }, + getClips: function getClips() { + return this._clips; + }, + play: function play(name, startTime) { + var state = this.playAdditive(name, startTime); + this._animator.stopStatesExcept(state); + return state; + }, + playAdditive: function playAdditive(name, startTime) { + this._init(); + var state = this.getAnimationState(name || this._defaultClip && this._defaultClip.name); + if (state) { + this.enabled = true; + var animator = this._animator; + if (animator.isPlaying && state.isPlaying) if (state.isPaused) animator.resumeState(state); else { + animator.stopState(state); + animator.playState(state, startTime); + } else animator.playState(state, startTime); + this.enabledInHierarchy || animator.pause(); + this.currentClip = state.clip; + } + return state; + }, + stop: function stop(name) { + if (!this._didInit) return; + if (name) { + var state = this._nameToState[name]; + state && this._animator.stopState(state); + } else this._animator.stop(); + }, + pause: function pause(name) { + if (!this._didInit) return; + if (name) { + var state = this._nameToState[name]; + state && this._animator.pauseState(state); + } else this.enabled = false; + }, + resume: function resume(name) { + if (!this._didInit) return; + if (name) { + var state = this.getAnimationState(name); + state && this._animator.resumeState(state); + } else this.enabled = true; + }, + setCurrentTime: function setCurrentTime(time, name) { + this._init(); + if (name) { + var state = this.getAnimationState(name); + state && this._animator.setStateTime(state, time); + } else this._animator.setStateTime(time); + }, + getAnimationState: function getAnimationState(name) { + this._init(); + var state = this._nameToState[name]; + false; + state && !state.curveLoaded && this._animator._reloadClip(state); + return state || null; + }, + addClip: function addClip(clip, newName) { + if (!clip) { + cc.warnID(3900); + return; + } + this._init(); + cc.js.array.contains(this._clips, clip) || this._clips.push(clip); + newName = newName || clip.name; + var oldState = this._nameToState[newName]; + if (oldState) { + if (oldState.clip === clip) return oldState; + var index = this._clips.indexOf(oldState.clip); + -1 !== index && this._clips.splice(index, 1); + } + var newState = new cc.AnimationState(clip, newName); + this._nameToState[newName] = newState; + return newState; + }, + removeClip: function removeClip(clip, force) { + if (!clip) { + cc.warnID(3901); + return; + } + this._init(); + var state; + for (var name in this._nameToState) { + state = this._nameToState[name]; + if (equalClips(state.clip, clip)) break; + } + if (clip === this._defaultClip) { + if (!force) { + true; + cc.warnID(3902); + return; + } + this._defaultClip = null; + } + if (state && state.isPlaying) { + if (!force) { + true; + cc.warnID(3903); + return; + } + this.stop(state.name); + } + this._clips = this._clips.filter((function(item) { + return !equalClips(item, clip); + })); + state && delete this._nameToState[state.name]; + }, + sample: function sample(name) { + this._init(); + if (name) { + var state = this.getAnimationState(name); + state && state.sample(); + } else this._animator.sample(); + }, + on: function on(type, callback, target, useCapture) { + this._init(); + var ret = this._EventTargetOn(type, callback, target, useCapture); + if ("lastframe" === type) { + var states = this._nameToState; + for (var name in states) states[name]._lastframeEventOn = true; + } + return ret; + }, + off: function off(type, callback, target, useCapture) { + this._init(); + if ("lastframe" === type) { + var states = this._nameToState; + for (var name in states) states[name]._lastframeEventOn = false; + } + this._EventTargetOff(type, callback, target, useCapture); + }, + _init: function _init() { + if (this._didInit) return; + this._didInit = true; + this._animator = new AnimationAnimator(this.node, this); + this._createStates(); + }, + _createStates: function _createStates() { + this._nameToState = js.createMap(true); + var state = null; + var defaultClipState = false; + for (var i = 0; i < this._clips.length; ++i) { + var clip = this._clips[i]; + if (clip) { + state = new cc.AnimationState(clip); + false; + this._nameToState[state.name] = state; + equalClips(this._defaultClip, clip) && (defaultClipState = state); + } + } + if (this._defaultClip && !defaultClipState) { + state = new cc.AnimationState(this._defaultClip); + false; + this._nameToState[state.name] = state; + } + } + }); + Animation.prototype._EventTargetOn = EventTarget.prototype.on; + Animation.prototype._EventTargetOff = EventTarget.prototype.off; + cc.Animation = module.exports = Animation; + }), { + "../../animation/animation-animator": 10, + "../../animation/animation-clip": 11, + "../event/event-target": 114, + "../platform/js": 142, + "./CCComponent": 91 + } ], + 88: [ (function(require, module, exports) { + "use strict"; + var BlockEvents = [ "touchstart", "touchmove", "touchend", "mousedown", "mousemove", "mouseup", "mouseenter", "mouseleave", "mousewheel" ]; + function stopPropagation(event) { + event.stopPropagation(); + } + var BlockInputEvents = cc.Class({ + name: "cc.BlockInputEvents", + extends: require("./CCComponent"), + editor: { + menu: "i18n:MAIN_MENU.component.ui/Block Input Events", + inspector: "packages://inspector/inspectors/comps/block-input-events.js", + help: "i18n:COMPONENT.help_url.block_input_events" + }, + onEnable: function onEnable() { + for (var i = 0; i < BlockEvents.length; i++) this.node.on(BlockEvents[i], stopPropagation, this); + }, + onDisable: function onDisable() { + for (var i = 0; i < BlockEvents.length; i++) this.node.off(BlockEvents[i], stopPropagation, this); + } + }); + cc.BlockInputEvents = module.exports = BlockInputEvents; + }), { + "./CCComponent": 91 + } ], + 89: [ (function(require, module, exports) { + "use strict"; + var Component = require("./CCComponent"); + var GraySpriteState = require("../utils/gray-sprite-state"); + var Transition = cc.Enum({ + NONE: 0, + COLOR: 1, + SPRITE: 2, + SCALE: 3 + }); + var State = cc.Enum({ + NORMAL: 0, + HOVER: 1, + PRESSED: 2, + DISABLED: 3 + }); + var Button = cc.Class({ + name: "cc.Button", + extends: Component, + mixins: [ GraySpriteState ], + ctor: function ctor() { + this._pressed = false; + this._hovered = false; + this._fromColor = null; + this._toColor = null; + this._time = 0; + this._transitionFinished = true; + this._fromScale = cc.Vec2.ZERO; + this._toScale = cc.Vec2.ZERO; + this._originalScale = null; + this._graySpriteMaterial = null; + this._spriteMaterial = null; + this._sprite = null; + }, + editor: false, + properties: { + interactable: { + default: true, + tooltip: false, + notify: function notify() { + this._updateState(); + this.interactable || this._resetState(); + }, + animatable: false + }, + _resizeToTarget: { + animatable: false, + set: function set(value) { + value && this._resizeNodeToTargetNode(); + } + }, + enableAutoGrayEffect: { + default: false, + tooltip: false, + notify: function notify() { + this._updateDisabledState(true); + } + }, + transition: { + default: Transition.NONE, + tooltip: false, + type: Transition, + animatable: false, + notify: function notify(oldValue) { + this._updateTransition(oldValue); + }, + formerlySerializedAs: "transition" + }, + normalColor: { + default: cc.Color.WHITE, + displayName: "Normal", + tooltip: false, + notify: function notify() { + this.transition === Transition.Color && this._getButtonState() === State.NORMAL && (this._getTarget().opacity = this.normalColor.a); + this._updateState(); + } + }, + pressedColor: { + default: cc.color(211, 211, 211), + displayName: "Pressed", + tooltip: false, + notify: function notify() { + this.transition === Transition.Color && this._getButtonState() === State.PRESSED && (this._getTarget().opacity = this.pressedColor.a); + this._updateState(); + }, + formerlySerializedAs: "pressedColor" + }, + hoverColor: { + default: cc.Color.WHITE, + displayName: "Hover", + tooltip: false, + notify: function notify() { + this.transition === Transition.Color && this._getButtonState() === State.HOVER && (this._getTarget().opacity = this.hoverColor.a); + this._updateState(); + }, + formerlySerializedAs: "hoverColor" + }, + disabledColor: { + default: cc.color(124, 124, 124), + displayName: "Disabled", + tooltip: false, + notify: function notify() { + this.transition === Transition.Color && this._getButtonState() === State.DISABLED && (this._getTarget().opacity = this.disabledColor.a); + this._updateState(); + } + }, + duration: { + default: .1, + range: [ 0, 10 ], + tooltip: false + }, + zoomScale: { + default: 1.2, + tooltip: false + }, + normalSprite: { + default: null, + type: cc.SpriteFrame, + displayName: "Normal", + tooltip: false, + notify: function notify() { + this._updateState(); + } + }, + pressedSprite: { + default: null, + type: cc.SpriteFrame, + displayName: "Pressed", + tooltip: false, + formerlySerializedAs: "pressedSprite", + notify: function notify() { + this._updateState(); + } + }, + hoverSprite: { + default: null, + type: cc.SpriteFrame, + displayName: "Hover", + tooltip: false, + formerlySerializedAs: "hoverSprite", + notify: function notify() { + this._updateState(); + } + }, + disabledSprite: { + default: null, + type: cc.SpriteFrame, + displayName: "Disabled", + tooltip: false, + notify: function notify() { + this._updateState(); + } + }, + target: { + default: null, + type: cc.Node, + tooltip: false, + notify: function notify(oldValue) { + this._applyTarget(); + oldValue && this.target !== oldValue && this._unregisterTargetEvent(oldValue); + } + }, + clickEvents: { + default: [], + type: cc.Component.EventHandler, + tooltip: false + } + }, + statics: { + Transition: Transition + }, + __preload: function __preload() { + this._applyTarget(); + this._resetState(); + }, + _resetState: function _resetState() { + this._pressed = false; + this._hovered = false; + var target = this._getTarget(); + var transition = this.transition; + var originalScale = this._originalScale; + transition === Transition.COLOR && this.interactable ? this._setTargetColor(this.normalColor) : transition === Transition.SCALE && originalScale && target.setScale(originalScale.x, originalScale.y); + this._transitionFinished = true; + }, + onEnable: function onEnable() { + this.normalSprite && this.normalSprite.ensureLoadTexture(); + this.hoverSprite && this.hoverSprite.ensureLoadTexture(); + this.pressedSprite && this.pressedSprite.ensureLoadTexture(); + this.disabledSprite && this.disabledSprite.ensureLoadTexture(); + true; + this._registerNodeEvent(); + this._updateState(); + }, + onDisable: function onDisable() { + this._resetState(); + true; + this._unregisterNodeEvent(); + }, + _getTarget: function _getTarget() { + return this.target ? this.target : this.node; + }, + _onTargetSpriteFrameChanged: function _onTargetSpriteFrameChanged(comp) { + this.transition === Transition.SPRITE && this._setCurrentStateSprite(comp.spriteFrame); + }, + _onTargetColorChanged: function _onTargetColorChanged(color) { + this.transition === Transition.COLOR && this._setCurrentStateColor(color); + }, + _onTargetScaleChanged: function _onTargetScaleChanged() { + var target = this._getTarget(); + if (this._originalScale && (this.transition !== Transition.SCALE || this._transitionFinished)) { + this._originalScale.x = target.scaleX; + this._originalScale.y = target.scaleY; + } + }, + _setTargetColor: function _setTargetColor(color) { + var target = this._getTarget(); + var cloneColor = color.clone(); + target.opacity = cloneColor.a; + cloneColor.a = 255; + target.color = cloneColor; + }, + _getStateColor: function _getStateColor(state) { + switch (state) { + case State.NORMAL: + return this.normalColor; + + case State.HOVER: + return this.hoverColor; + + case State.PRESSED: + return this.pressedColor; + + case State.DISABLED: + return this.disabledColor; + } + }, + _getStateSprite: function _getStateSprite(state) { + switch (state) { + case State.NORMAL: + return this.normalSprite; + + case State.HOVER: + return this.hoverSprite; + + case State.PRESSED: + return this.pressedSprite; + + case State.DISABLED: + return this.disabledSprite; + } + }, + _setCurrentStateColor: function _setCurrentStateColor(color) { + switch (this._getButtonState()) { + case State.NORMAL: + this.normalColor = color; + break; + + case State.HOVER: + this.hoverColor = color; + break; + + case State.PRESSED: + this.pressedColor = color; + break; + + case State.DISABLED: + this.disabledColor = color; + } + }, + _setCurrentStateSprite: function _setCurrentStateSprite(spriteFrame) { + switch (this._getButtonState()) { + case State.NORMAL: + this.normalSprite = spriteFrame; + break; + + case State.HOVER: + this.hoverSprite = spriteFrame; + break; + + case State.PRESSED: + this.pressedSprite = spriteFrame; + break; + + case State.DISABLED: + this.disabledSprite = spriteFrame; + } + }, + update: function update(dt) { + var target = this._getTarget(); + if (this._transitionFinished) return; + if (this.transition !== Transition.COLOR && this.transition !== Transition.SCALE) return; + this.time += dt; + var ratio = 1; + this.duration > 0 && (ratio = this.time / this.duration); + ratio >= 1 && (ratio = 1); + if (this.transition === Transition.COLOR) { + var color = this._fromColor.lerp(this._toColor, ratio); + this._setTargetColor(color); + } else this.transition === Transition.SCALE && this._originalScale && (target.scale = this._fromScale.lerp(this._toScale, ratio)); + 1 === ratio && (this._transitionFinished = true); + }, + _registerNodeEvent: function _registerNodeEvent() { + this.node.on(cc.Node.EventType.TOUCH_START, this._onTouchBegan, this); + this.node.on(cc.Node.EventType.TOUCH_MOVE, this._onTouchMove, this); + this.node.on(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this); + this.node.on(cc.Node.EventType.TOUCH_CANCEL, this._onTouchCancel, this); + this.node.on(cc.Node.EventType.MOUSE_ENTER, this._onMouseMoveIn, this); + this.node.on(cc.Node.EventType.MOUSE_LEAVE, this._onMouseMoveOut, this); + }, + _unregisterNodeEvent: function _unregisterNodeEvent() { + this.node.off(cc.Node.EventType.TOUCH_START, this._onTouchBegan, this); + this.node.off(cc.Node.EventType.TOUCH_MOVE, this._onTouchMove, this); + this.node.off(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this); + this.node.off(cc.Node.EventType.TOUCH_CANCEL, this._onTouchCancel, this); + this.node.off(cc.Node.EventType.MOUSE_ENTER, this._onMouseMoveIn, this); + this.node.off(cc.Node.EventType.MOUSE_LEAVE, this._onMouseMoveOut, this); + }, + _registerTargetEvent: function _registerTargetEvent(target) { + false; + target.on(cc.Node.EventType.SCALE_CHANGED, this._onTargetScaleChanged, this); + }, + _unregisterTargetEvent: function _unregisterTargetEvent(target) { + false; + target.off(cc.Node.EventType.SCALE_CHANGED, this._onTargetScaleChanged, this); + }, + _getTargetSprite: function _getTargetSprite(target) { + var sprite = null; + target && (sprite = target.getComponent(cc.Sprite)); + return sprite; + }, + _applyTarget: function _applyTarget() { + var target = this._getTarget(); + this._sprite = this._getTargetSprite(target); + this._originalScale || (this._originalScale = cc.Vec2.ZERO); + this._originalScale.x = target.scaleX; + this._originalScale.y = target.scaleY; + this._registerTargetEvent(target); + }, + _onTouchBegan: function _onTouchBegan(event) { + if (!this.interactable || !this.enabledInHierarchy) return; + this._pressed = true; + this._updateState(); + event.stopPropagation(); + }, + _onTouchMove: function _onTouchMove(event) { + if (!this.interactable || !this.enabledInHierarchy || !this._pressed) return; + var touch = event.touch; + var hit = this.node._hitTest(touch.getLocation()); + var target = this._getTarget(); + var originalScale = this._originalScale; + if (this.transition === Transition.SCALE && originalScale) if (hit) { + this._fromScale.x = originalScale.x; + this._fromScale.y = originalScale.y; + this._toScale.x = originalScale.x * this.zoomScale; + this._toScale.y = originalScale.y * this.zoomScale; + this._transitionFinished = false; + } else { + this.time = 0; + this._transitionFinished = true; + target.setScale(originalScale.x, originalScale.y); + } else { + var state; + state = hit ? State.PRESSED : State.NORMAL; + this._applyTransition(state); + } + event.stopPropagation(); + }, + _onTouchEnded: function _onTouchEnded(event) { + if (!this.interactable || !this.enabledInHierarchy) return; + if (this._pressed) { + cc.Component.EventHandler.emitEvents(this.clickEvents, event); + this.node.emit("click", this); + } + this._pressed = false; + this._updateState(); + event.stopPropagation(); + }, + _onTouchCancel: function _onTouchCancel() { + if (!this.interactable || !this.enabledInHierarchy) return; + this._pressed = false; + this._updateState(); + }, + _onMouseMoveIn: function _onMouseMoveIn() { + if (this._pressed || !this.interactable || !this.enabledInHierarchy) return; + if (this.transition === Transition.SPRITE && !this.hoverSprite) return; + if (!this._hovered) { + this._hovered = true; + this._updateState(); + } + }, + _onMouseMoveOut: function _onMouseMoveOut() { + if (this._hovered) { + this._hovered = false; + this._updateState(); + } + }, + _updateState: function _updateState() { + var state = this._getButtonState(); + this._applyTransition(state); + this._updateDisabledState(); + }, + _getButtonState: function _getButtonState() { + var state; + state = this.interactable ? this._pressed ? State.PRESSED : this._hovered ? State.HOVER : State.NORMAL : State.DISABLED; + return state; + }, + _updateColorTransitionImmediately: function _updateColorTransitionImmediately(state) { + var color = this._getStateColor(state); + this._setTargetColor(color); + this._fromColor = color.clone(); + this._toColor = color; + }, + _updateColorTransition: function _updateColorTransition(state) { + if (false, state === State.DISABLED) this._updateColorTransitionImmediately(state); else { + var target = this._getTarget(); + var color = this._getStateColor(state); + this._fromColor = target.color.clone(); + this._toColor = color; + this.time = 0; + this._transitionFinished = false; + } + }, + _updateSpriteTransition: function _updateSpriteTransition(state) { + var sprite = this._getStateSprite(state); + this._sprite && sprite && (this._sprite.spriteFrame = sprite); + }, + _updateScaleTransition: function _updateScaleTransition(state) { + state === State.PRESSED ? this._zoomUp() : this._zoomBack(); + }, + _zoomUp: function _zoomUp() { + if (!this._originalScale) return; + this._fromScale.x = this._originalScale.x; + this._fromScale.y = this._originalScale.y; + this._toScale.x = this._originalScale.x * this.zoomScale; + this._toScale.y = this._originalScale.y * this.zoomScale; + this.time = 0; + this._transitionFinished = false; + }, + _zoomBack: function _zoomBack() { + if (!this._originalScale) return; + var target = this._getTarget(); + this._fromScale.x = target.scaleX; + this._fromScale.y = target.scaleY; + this._toScale.x = this._originalScale.x; + this._toScale.y = this._originalScale.y; + this.time = 0; + this._transitionFinished = false; + }, + _updateTransition: function _updateTransition(oldTransition) { + oldTransition === Transition.COLOR ? this._updateColorTransitionImmediately(State.NORMAL) : oldTransition === Transition.SPRITE && this._updateSpriteTransition(State.NORMAL); + this._updateState(); + }, + _applyTransition: function _applyTransition(state) { + var transition = this.transition; + transition === Transition.COLOR ? this._updateColorTransition(state) : transition === Transition.SPRITE ? this._updateSpriteTransition(state) : transition === Transition.SCALE && this._updateScaleTransition(state); + }, + _resizeNodeToTargetNode: false, + _updateDisabledState: function _updateDisabledState(force) { + if (!this._sprite) return; + if (this.enableAutoGrayEffect || force) { + var useGrayMaterial = false; + this.transition === Transition.SPRITE && this.disabledSprite || (useGrayMaterial = this.enableAutoGrayEffect && !this.interactable); + this._switchGrayMaterial(useGrayMaterial, this._sprite); + } + } + }); + cc.Button = module.exports = Button; + }), { + "../utils/gray-sprite-state": 202, + "./CCComponent": 91 + } ], + 90: [ (function(require, module, exports) { + "use strict"; + var Camera = require("../camera/CCCamera"); + var Component = require("./CCComponent"); + function resetWidgetComponent(canvas) { + var widget = canvas.node.getComponent(cc.Widget); + widget || (widget = canvas.node.addComponent(cc.Widget)); + widget.isAlignTop = true; + widget.isAlignBottom = true; + widget.isAlignLeft = true; + widget.isAlignRight = true; + widget.top = 0; + widget.bottom = 0; + widget.left = 0; + widget.right = 0; + } + var Canvas = cc.Class({ + name: "cc.Canvas", + extends: Component, + editor: false, + resetInEditor: false, + statics: { + instance: null + }, + properties: { + _designResolution: cc.size(960, 640), + designResolution: { + get: function get() { + return cc.size(this._designResolution); + }, + set: function set(value) { + this._designResolution.width = value.width; + this._designResolution.height = value.height; + this.applySettings(); + }, + tooltip: false + }, + _fitWidth: false, + _fitHeight: true, + fitHeight: { + get: function get() { + return this._fitHeight; + }, + set: function set(value) { + if (this._fitHeight !== value) { + this._fitHeight = value; + this.applySettings(); + } + }, + tooltip: false + }, + fitWidth: { + get: function get() { + return this._fitWidth; + }, + set: function set(value) { + if (this._fitWidth !== value) { + this._fitWidth = value; + this.applySettings(); + } + }, + tooltip: false + } + }, + _fitDesignResolution: false, + __preload: function __preload() { + var Flags; + false; + if (Canvas.instance) return cc.warnID(6700, this.node.name, Canvas.instance.node.name); + Canvas.instance = this; + this.applySettings(); + var widget = this.getComponent(cc.Widget); + !!widget && widget.updateAlignment(); + false; + }, + start: function start() { + if (!Camera.main && cc.game.renderType !== cc.game.RENDER_TYPE_CANVAS) { + var cameraNode = new cc.Node("Main Camera"); + cameraNode.parent = this.node; + cameraNode.setSiblingIndex(0); + var camera = cameraNode.addComponent(Camera); + var ClearFlags = Camera.ClearFlags; + camera.clearFlags = ClearFlags.COLOR | ClearFlags.DEPTH | ClearFlags.STENCIL; + camera.depth = -1; + } + }, + onDestroy: function onDestroy() { + false; + Canvas.instance === this && (Canvas.instance = null); + }, + applySettings: function applySettings() { + var ResolutionPolicy = cc.ResolutionPolicy; + var policy; + policy = this.fitHeight && this.fitWidth ? ResolutionPolicy.SHOW_ALL : this.fitHeight || this.fitWidth ? this.fitWidth ? ResolutionPolicy.FIXED_WIDTH : ResolutionPolicy.FIXED_HEIGHT : ResolutionPolicy.NO_BORDER; + var designRes = this._designResolution; + false; + cc.view.setDesignResolutionSize(designRes.width, designRes.height, policy); + } + }); + cc.Canvas = module.exports = Canvas; + }), { + "../camera/CCCamera": 85, + "./CCComponent": 91 + } ], + 91: [ (function(require, module, exports) { + "use strict"; + var CCObject = require("../platform/CCObject"); + var js = require("../platform/js"); + var idGenerater = new (require("../platform/id-generater"))("Comp"); + var IsOnEnableCalled = CCObject.Flags.IsOnEnableCalled; + var IsOnLoadCalled = CCObject.Flags.IsOnLoadCalled; + var ActionManagerExist = !!cc.ActionManager; + var Component = cc.Class({ + name: "cc.Component", + extends: CCObject, + ctor: function() { + this._id = idGenerater.getNewId(); + this.__eventTargets = []; + }, + properties: { + node: { + default: null, + visible: false + }, + name: { + get: function get() { + if (this._name) return this._name; + var className = cc.js.getClassName(this); + var trimLeft = className.lastIndexOf("."); + trimLeft >= 0 && (className = className.slice(trimLeft + 1)); + return this.node.name + "<" + className + ">"; + }, + set: function set(value) { + this._name = value; + }, + visible: false + }, + uuid: { + get: function get() { + return this._id; + }, + visible: false + }, + __scriptAsset: false, + _enabled: true, + enabled: { + get: function get() { + return this._enabled; + }, + set: function set(value) { + if (this._enabled !== value) { + this._enabled = value; + if (this.node._activeInHierarchy) { + var compScheduler = cc.director._compScheduler; + value ? compScheduler.enableComp(this) : compScheduler.disableComp(this); + } + } + }, + visible: false, + animatable: true + }, + enabledInHierarchy: { + get: function get() { + return this._enabled && this.node._activeInHierarchy; + }, + visible: false + }, + _isOnLoadCalled: { + get: function get() { + return this._objFlags & IsOnLoadCalled; + } + } + }, + update: null, + lateUpdate: null, + __preload: null, + onLoad: null, + start: null, + onEnable: null, + onDisable: null, + onDestroy: null, + onFocusInEditor: null, + onLostFocusInEditor: null, + resetInEditor: null, + addComponent: function addComponent(typeOrClassName) { + return this.node.addComponent(typeOrClassName); + }, + getComponent: function getComponent(typeOrClassName) { + return this.node.getComponent(typeOrClassName); + }, + getComponents: function getComponents(typeOrClassName) { + return this.node.getComponents(typeOrClassName); + }, + getComponentInChildren: function getComponentInChildren(typeOrClassName) { + return this.node.getComponentInChildren(typeOrClassName); + }, + getComponentsInChildren: function getComponentsInChildren(typeOrClassName) { + return this.node.getComponentsInChildren(typeOrClassName); + }, + _getLocalBounds: null, + onRestore: null, + destroy: function destroy() { + var depend; + false; + this._super() && this._enabled && this.node._activeInHierarchy && cc.director._compScheduler.disableComp(this); + }, + _onPreDestroy: function _onPreDestroy() { + ActionManagerExist && cc.director.getActionManager().removeAllActionsFromTarget(this); + this.unscheduleAllCallbacks(); + var eventTargets = this.__eventTargets; + for (var i = eventTargets.length - 1; i >= 0; --i) { + var target = eventTargets[i]; + target && target.targetOff(this); + } + eventTargets.length = 0; + false; + cc.director._nodeActivator.destroyComp(this); + this.node._removeComponent(this); + }, + _instantiate: function _instantiate(cloned) { + cloned || (cloned = cc.instantiate._clone(this, this)); + cloned.node = null; + return cloned; + }, + schedule: function schedule(callback, interval, repeat, delay) { + cc.assertID(callback, 1619); + interval = interval || 0; + cc.assertID(interval >= 0, 1620); + repeat = isNaN(repeat) ? cc.macro.REPEAT_FOREVER : repeat; + delay = delay || 0; + var scheduler = cc.director.getScheduler(); + var paused = scheduler.isTargetPaused(this); + scheduler.schedule(callback, this, interval, repeat, delay, paused); + }, + scheduleOnce: function scheduleOnce(callback, delay) { + this.schedule(callback, 0, 0, delay); + }, + unschedule: function unschedule(callback_fn) { + if (!callback_fn) return; + cc.director.getScheduler().unschedule(callback_fn, this); + }, + unscheduleAllCallbacks: function unscheduleAllCallbacks() { + cc.director.getScheduler().unscheduleAllForTarget(this); + } + }); + Component._requireComponent = null; + Component._executionOrder = 0; + false; + false, false; + js.value(Component, "_registerEditorProps", (function(cls, props) { + var reqComp = props.requireComponent; + reqComp && (cls._requireComponent = reqComp); + var order = props.executionOrder; + order && "number" === typeof order && (cls._executionOrder = order); + (false, false) && "disallowMultiple" in props && (cls._disallowMultiple = cls); + var name; + var key; + var val; + var willExecuteInEditMode; + false, false; + })); + Component.prototype.__scriptUuid = ""; + cc.Component = module.exports = Component; + }), { + "../platform/CCObject": 127, + "../platform/id-generater": 138, + "../platform/js": 142 + } ], + 92: [ (function(require, module, exports) { + "use strict"; + cc.Component.EventHandler = cc.Class({ + name: "cc.ClickEvent", + properties: { + target: { + default: null, + type: cc.Node + }, + component: "", + _componentId: "", + _componentName: { + get: function get() { + this._genCompIdIfNeeded(); + return this._compId2Name(this._componentId); + }, + set: function set(value) { + this._componentId = this._compName2Id(value); + } + }, + handler: { + default: "" + }, + customEventData: { + default: "" + } + }, + statics: { + emitEvents: function emitEvents(events) { + var args; + if (arguments.length > 0) { + args = new Array(arguments.length - 1); + for (var i = 0, l = args.length; i < l; i++) args[i] = arguments[i + 1]; + } + for (var _i = 0, _l = events.length; _i < _l; _i++) { + var event = events[_i]; + if (!(event instanceof cc.Component.EventHandler)) continue; + event.emit(args); + } + } + }, + emit: function emit(params) { + var target = this.target; + if (!cc.isValid(target)) return; + this._genCompIdIfNeeded(); + var compType = cc.js._getClassById(this._componentId); + var comp = target.getComponent(compType); + if (!cc.isValid(comp)) return; + var handler = comp[this.handler]; + if ("function" !== typeof handler) return; + if (null != this.customEventData && "" !== this.customEventData) { + params = params.slice(); + params.push(this.customEventData); + } + handler.apply(comp, params); + }, + _compName2Id: function _compName2Id(compName) { + var comp = cc.js.getClassByName(compName); + return cc.js._getClassId(comp); + }, + _compId2Name: function _compId2Name(compId) { + var comp = cc.js._getClassById(compId); + return cc.js.getClassName(comp); + }, + _genCompIdIfNeeded: function _genCompIdIfNeeded() { + if (!this._componentId) { + this._componentName = this.component; + this.component = ""; + } + } + }); + }), {} ], + 93: [ (function(require, module, exports) { + "use strict"; + var macro = require("../platform/CCMacro"); + var RenderComponent = require("./CCRenderComponent"); + var Material = require("../assets/material/CCMaterial"); + var LabelFrame = require("../renderer/utils/label/label-frame"); + var BlendFunc = require("../utils/blend-func"); + var deleteFromDynamicAtlas = require("../renderer/utils/utils").deleteFromDynamicAtlas; + var HorizontalAlign = macro.TextAlignment; + var VerticalAlign = macro.VerticalTextAlignment; + var Overflow = cc.Enum({ + NONE: 0, + CLAMP: 1, + SHRINK: 2, + RESIZE_HEIGHT: 3 + }); + var CacheMode = cc.Enum({ + NONE: 0, + BITMAP: 1, + CHAR: 2 + }); + var BOLD_FLAG = 1; + var ITALIC_FLAG = 2; + var UNDERLINE_FLAG = 4; + var Label = cc.Class({ + name: "cc.Label", + extends: RenderComponent, + mixins: [ BlendFunc ], + ctor: function ctor() { + false; + this._actualFontSize = 0; + this._assemblerData = null; + this._frame = null; + this._ttfTexture = null; + this._letterTexture = null; + cc.game.renderType === cc.game.RENDER_TYPE_CANVAS ? this._updateMaterial = this._updateMaterialCanvas : this._updateMaterial = this._updateMaterialWebgl; + }, + editor: false, + properties: { + _string: { + default: "", + formerlySerializedAs: "_N$string" + }, + string: { + get: function get() { + return this._string; + }, + set: function set(value) { + var oldValue = this._string; + this._string = "" + value; + this.string !== oldValue && this.setVertsDirty(); + this._checkStringEmpty(); + }, + multiline: true, + tooltip: false + }, + horizontalAlign: { + default: HorizontalAlign.LEFT, + type: HorizontalAlign, + tooltip: false, + notify: function notify(oldValue) { + if (this.horizontalAlign === oldValue) return; + this.setVertsDirty(); + }, + animatable: false + }, + verticalAlign: { + default: VerticalAlign.TOP, + type: VerticalAlign, + tooltip: false, + notify: function notify(oldValue) { + if (this.verticalAlign === oldValue) return; + this.setVertsDirty(); + }, + animatable: false + }, + actualFontSize: { + displayName: "Actual Font Size", + animatable: false, + readonly: true, + get: function get() { + return this._actualFontSize; + }, + tooltip: false + }, + _fontSize: 40, + fontSize: { + get: function get() { + return this._fontSize; + }, + set: function set(value) { + if (this._fontSize === value) return; + this._fontSize = value; + this.setVertsDirty(); + }, + range: [ 0, 512 ], + tooltip: false + }, + fontFamily: { + default: "Arial", + tooltip: false, + notify: function notify(oldValue) { + if (this.fontFamily === oldValue) return; + this.setVertsDirty(); + }, + animatable: false + }, + _lineHeight: 40, + lineHeight: { + get: function get() { + return this._lineHeight; + }, + set: function set(value) { + if (this._lineHeight === value) return; + this._lineHeight = value; + this.setVertsDirty(); + }, + tooltip: false + }, + overflow: { + default: Overflow.NONE, + type: Overflow, + tooltip: false, + notify: function notify(oldValue) { + if (this.overflow === oldValue) return; + this.setVertsDirty(); + }, + animatable: false + }, + _enableWrapText: true, + enableWrapText: { + get: function get() { + return this._enableWrapText; + }, + set: function set(value) { + if (this._enableWrapText === value) return; + this._enableWrapText = value; + this.setVertsDirty(); + }, + animatable: false, + tooltip: false + }, + _N$file: null, + font: { + get: function get() { + return this._N$file; + }, + set: function set(value) { + if (this.font === value) return; + value || (this._isSystemFontUsed = true); + false; + this._N$file = value; + value && this._isSystemFontUsed && (this._isSystemFontUsed = false); + if (!this.enabledInHierarchy) return; + this._forceUpdateRenderData(); + }, + type: cc.Font, + tooltip: false, + animatable: false + }, + _isSystemFontUsed: true, + useSystemFont: { + get: function get() { + return this._isSystemFontUsed; + }, + set: function set(value) { + if (this._isSystemFontUsed === value) return; + this._isSystemFontUsed = !!value; + false; + if (value) { + this.font = null; + if (!this.enabledInHierarchy) return; + this._forceUpdateRenderData(); + } + this.markForValidate(); + }, + animatable: false, + tooltip: false + }, + _bmFontOriginalSize: { + displayName: "BMFont Original Size", + get: function get() { + return this._N$file instanceof cc.BitmapFont ? this._N$file.fontSize : -1; + }, + visible: true, + animatable: false + }, + _spacingX: 0, + spacingX: { + get: function get() { + return this._spacingX; + }, + set: function set(value) { + this._spacingX = value; + this.setVertsDirty(); + }, + tooltip: false + }, + _batchAsBitmap: false, + cacheMode: { + default: CacheMode.NONE, + type: CacheMode, + tooltip: false, + notify: function notify(oldValue) { + if (this.cacheMode === oldValue) return; + oldValue !== CacheMode.BITMAP || this.font instanceof cc.BitmapFont || this._frame && this._frame._resetDynamicAtlasFrame(); + if (oldValue === CacheMode.CHAR) { + this._ttfTexture = null; + var material = this._materials[0]; + material && material.material && cc.Label._shareAtlas.material === material.material && this.setMaterial(0, this._getDefaultMaterial()); + } + if (!this.enabledInHierarchy) return; + this._forceUpdateRenderData(); + }, + animatable: false + }, + _styleFlags: 0, + enableBold: { + get: function get() { + return !!(this._styleFlags & BOLD_FLAG); + }, + set: function set(value) { + value ? this._styleFlags |= BOLD_FLAG : this._styleFlags &= ~BOLD_FLAG; + this.setVertsDirty(); + }, + animatable: false, + tooltip: false + }, + enableItalic: { + get: function get() { + return !!(this._styleFlags & ITALIC_FLAG); + }, + set: function set(value) { + value ? this._styleFlags |= ITALIC_FLAG : this._styleFlags &= ~ITALIC_FLAG; + this.setVertsDirty(); + }, + animatable: false, + tooltip: false + }, + enableUnderline: { + get: function get() { + return !!(this._styleFlags & UNDERLINE_FLAG); + }, + set: function set(value) { + value ? this._styleFlags |= UNDERLINE_FLAG : this._styleFlags &= ~UNDERLINE_FLAG; + this.setVertsDirty(); + }, + animatable: false, + tooltip: false + }, + _underlineHeight: 0, + underlineHeight: { + get: function get() { + return this._underlineHeight; + }, + set: function set(value) { + if (this._underlineHeight === value) return; + this._underlineHeight = value; + this.setVertsDirty(); + }, + tooltip: false + }, + autoSwitchMaterial: { + type: RenderComponent.EnableType, + default: RenderComponent.EnableType.GLOBAL, + notify: function notify(oldValue) { + if (this.autoSwitchMaterial === oldValue) return; + this.setVertsDirty(); + } + }, + allowDynamicAtlas: { + type: RenderComponent.EnableType, + default: RenderComponent.EnableType.GLOBAL, + notify: function notify(oldValue) { + if (this.allowDynamicAtlas === oldValue) return; + this.setVertsDirty(); + } + }, + enableRetina: { + type: RenderComponent.EnableType, + default: RenderComponent.EnableType.GLOBAL, + notify: function notify(oldValue) { + if (this.enableRetina === oldValue) return; + this.setVertsDirty(); + } + } + }, + statics: { + HorizontalAlign: HorizontalAlign, + VerticalAlign: VerticalAlign, + Overflow: Overflow, + CacheMode: CacheMode, + _shareAtlas: null, + clearCharCache: function clearCharCache() { + Label._shareAtlas && Label._shareAtlas.clearAllCache(); + } + }, + onLoad: function onLoad() { + if (this._batchAsBitmap && this.cacheMode === CacheMode.NONE) { + this.cacheMode = CacheMode.BITMAP; + this._batchAsBitmap = false; + } + cc.game.renderType === cc.game.RENDER_TYPE_CANVAS && (this.cacheMode = CacheMode.NONE); + }, + onEnable: function onEnable() { + this._super(); + this.node.on(cc.Node.EventType.SIZE_CHANGED, this._nodeSizeChanged, this); + this.node.on(cc.Node.EventType.ANCHOR_CHANGED, this.setVertsDirty, this); + this.node.on(cc.Node.EventType.COLOR_CHANGED, this._nodeColorChanged, this); + this._forceUpdateRenderData(); + }, + onDisable: function onDisable() { + this._super(); + this.node.off(cc.Node.EventType.SIZE_CHANGED, this._nodeSizeChanged, this); + this.node.off(cc.Node.EventType.ANCHOR_CHANGED, this.setVertsDirty, this); + this.node.off(cc.Node.EventType.COLOR_CHANGED, this._nodeColorChanged, this); + }, + onDestroy: function onDestroy() { + this._assembler && this._assembler._resetAssemblerData && this._assembler._resetAssemblerData(this._assemblerData); + this._assemblerData = null; + this._letterTexture = null; + if (this._ttfTexture) { + this._ttfTexture.destroy(); + this._ttfTexture = null; + } + this._super(); + }, + _nodeSizeChanged: function _nodeSizeChanged() { + (false, this.overflow !== Overflow.NONE) && this.setVertsDirty(); + }, + _nodeColorChanged: function _nodeColorChanged() { + this.font instanceof cc.BitmapFont || this.setVertsDirty(); + }, + setVertsDirty: function setVertsDirty() { + false; + this._super(); + }, + _updateColor: function _updateColor() { + this.font instanceof cc.BitmapFont || this._srcBlendFactor === cc.macro.BlendFactor.SRC_ALPHA && this.node._renderFlag & cc.RenderFlow.FLAG_OPACITY || this.setVertsDirty(); + RenderComponent.prototype._updateColor.call(this); + }, + _validateRender: function _validateRender() { + if (!this.string) { + this.disableRender(); + return; + } + if (this._materials[0]) { + var font = this.font; + if (!(font instanceof cc.BitmapFont)) return; + var spriteFrame = font.spriteFrame; + if (spriteFrame && spriteFrame.textureLoaded() && font._fntConfig) return; + } + this.disableRender(); + }, + _resetAssembler: function _resetAssembler() { + this._resetFrame(); + RenderComponent.prototype._resetAssembler.call(this); + }, + _resetFrame: function _resetFrame() { + if (this._frame && !(this.font instanceof cc.BitmapFont)) { + deleteFromDynamicAtlas(this, this._frame); + this._frame = null; + } + }, + _checkStringEmpty: function _checkStringEmpty() { + this.markForRender(!!this.string); + }, + _on3DNodeChanged: function _on3DNodeChanged() { + this._resetAssembler(); + this._applyFontTexture(); + }, + _onBMFontTextureLoaded: function _onBMFontTextureLoaded() { + this._frame._texture = this.font.spriteFrame._texture; + this.markForRender(true); + this._updateMaterial(); + this._assembler && this._assembler.updateRenderData(this); + }, + _onBlendChanged: function _onBlendChanged() { + if (!this.useSystemFont || !this.enabledInHierarchy) return; + this._forceUpdateRenderData(); + }, + _applyFontTexture: function _applyFontTexture() { + var font = this.font; + if (font instanceof cc.BitmapFont) { + var spriteFrame = font.spriteFrame; + this._frame = spriteFrame; + spriteFrame && spriteFrame.onTextureLoaded(this._onBMFontTextureLoaded, this); + } else { + if (!this._nativeTTF()) { + this._frame || (this._frame = new LabelFrame()); + if (this.cacheMode === CacheMode.CHAR) { + this._letterTexture = this._assembler._getAssemblerData(); + this._frame._refreshTexture(this._letterTexture); + } else if (!this._ttfTexture) { + this._ttfTexture = new cc.Texture2D(); + this._assemblerData = this._assembler._getAssemblerData(); + this._ttfTexture.initWithElement(this._assemblerData.canvas); + } + if (this.cacheMode !== CacheMode.CHAR) { + this._frame._resetDynamicAtlasFrame(); + this._frame._refreshTexture(this._ttfTexture); + this._srcBlendFactor === cc.macro.BlendFactor.ONE && true && this._ttfTexture.setPremultiplyAlpha(true); + } + this._updateMaterial(); + } + this._assembler && this._assembler.updateRenderData(this); + } + this.markForValidate(); + }, + _updateMaterialCanvas: function _updateMaterialCanvas() { + if (!this._frame) return; + this._frame._texture._nativeUrl = this.uuid + "_texture"; + }, + _updateMaterialWebgl: function _updateMaterialWebgl() { + var material = this.getMaterial(0); + if (this._nativeTTF()) { + material && this._assembler._updateTTFMaterial(this); + return; + } + if (!this._frame) return; + if (material) { + var isMultiMaterial = material.material.isMultiSupport(); + isMultiMaterial ? this._texIdDirty = true : material.setProperty("texture", this._frame._texture); + this._assembler && (isMultiMaterial && !this._assembler.isMulti || !isMultiMaterial && this._assembler.isMulti) && RenderComponent.prototype._resetAssembler.call(this); + } + BlendFunc.prototype._updateMaterial.call(this); + }, + _forceUseCanvas: false, + _useNativeTTF: function _useNativeTTF() { + return cc.macro.ENABLE_NATIVE_TTF_RENDERER && !this._forceUseCanvas; + }, + _nativeTTF: function _nativeTTF() { + return this._useNativeTTF() && !!this._assembler && !!this._assembler._updateTTFMaterial; + }, + _forceUpdateRenderData: function _forceUpdateRenderData() { + this.setVertsDirty(); + this._resetAssembler(); + this._applyFontTexture(); + }, + _enableBold: function _enableBold(enabled) { + true; + cc.warn("`label._enableBold` is deprecated, use `label.enableBold = true` instead please"); + this.enableBold = !!enabled; + }, + _enableItalics: function _enableItalics(enabled) { + true; + cc.warn("`label._enableItalics` is deprecated, use `label.enableItalics = true` instead please"); + this.enableItalic = !!enabled; + }, + _enableUnderline: function _enableUnderline(enabled) { + true; + cc.warn("`label._enableUnderline` is deprecated, use `label.enableUnderline = true` instead please"); + this.enableUnderline = !!enabled; + } + }); + cc.Label = module.exports = Label; + }), { + "../assets/material/CCMaterial": 75, + "../platform/CCMacro": 126, + "../renderer/utils/label/label-frame": 157, + "../renderer/utils/utils": 160, + "../utils/blend-func": 199, + "./CCRenderComponent": 98 + } ], + 94: [ (function(require, module, exports) { + "use strict"; + var LabelOutline = cc.Class({ + name: "cc.LabelOutline", + extends: require("./CCComponent"), + editor: false, + properties: { + _color: cc.Color.WHITE, + _width: 1, + color: { + tooltip: false, + get: function get() { + return this._color.clone(); + }, + set: function set(value) { + this._color.equals(value) || this._color.set(value); + this._updateRenderData(); + } + }, + width: { + tooltip: false, + get: function get() { + return this._width; + }, + set: function set(value) { + if (this._width === value) return; + this._width = value; + this._updateRenderData(); + }, + range: [ 0, 512 ] + } + }, + onEnable: function onEnable() { + this._updateRenderData(); + }, + onDisable: function onDisable() { + this._updateRenderData(); + }, + _updateRenderData: function _updateRenderData() { + var label = this.node.getComponent(cc.Label); + label && label.setVertsDirty(); + } + }); + cc.LabelOutline = module.exports = LabelOutline; + }), { + "./CCComponent": 91 + } ], + 95: [ (function(require, module, exports) { + "use strict"; + var LabelShadow = cc.Class({ + name: "cc.LabelShadow", + extends: require("./CCComponent"), + editor: false, + properties: { + _color: cc.Color.WHITE, + _offset: cc.v2(2, 2), + _blur: 2, + color: { + tooltip: false, + get: function get() { + return this._color.clone(); + }, + set: function set(value) { + this._color.equals(value) || this._color.set(value); + this._updateRenderData(); + } + }, + offset: { + tooltip: false, + get: function get() { + return this._offset; + }, + set: function set(value) { + this._offset = value; + this._updateRenderData(); + } + }, + blur: { + tooltip: false, + get: function get() { + return this._blur; + }, + set: function set(value) { + this._blur = value; + this._updateRenderData(); + }, + range: [ 0, 1024 ] + } + }, + onEnable: function onEnable() { + this._updateRenderData(); + }, + onDisable: function onDisable() { + this._updateRenderData(); + }, + _updateRenderData: function _updateRenderData() { + var label = this.node.getComponent(cc.Label); + label && label.markForRender(true); + } + }); + cc.LabelShadow = module.exports = LabelShadow; + }), { + "./CCComponent": 91 + } ], + 96: [ (function(require, module, exports) { + "use strict"; + var NodeEvent = require("../CCNode").EventType; + var Type = cc.Enum({ + NONE: 0, + HORIZONTAL: 1, + VERTICAL: 2, + GRID: 3 + }); + var ResizeMode = cc.Enum({ + NONE: 0, + CONTAINER: 1, + CHILDREN: 2 + }); + var AxisDirection = cc.Enum({ + HORIZONTAL: 0, + VERTICAL: 1 + }); + var VerticalDirection = cc.Enum({ + BOTTOM_TO_TOP: 0, + TOP_TO_BOTTOM: 1 + }); + var HorizontalDirection = cc.Enum({ + LEFT_TO_RIGHT: 0, + RIGHT_TO_LEFT: 1 + }); + var Layout = cc.Class({ + name: "cc.Layout", + extends: require("./CCComponent"), + editor: false, + properties: { + _layoutSize: cc.size(300, 200), + _layoutDirty: { + default: true, + serializable: false + }, + _resize: ResizeMode.NONE, + _N$layoutType: Type.NONE, + type: { + type: Type, + get: function get() { + return this._N$layoutType; + }, + set: function set(value) { + this._N$layoutType = value; + var reLayouted; + false; + this._doLayoutDirty(); + }, + tooltip: false, + animatable: false + }, + resizeMode: { + type: ResizeMode, + tooltip: false, + animatable: false, + get: function get() { + return this._resize; + }, + set: function set(value) { + if (this.type === Type.NONE && value === ResizeMode.CHILDREN) return; + this._resize = value; + var reLayouted; + false; + this._doLayoutDirty(); + } + }, + cellSize: { + default: cc.size(40, 40), + tooltip: false, + type: cc.Size, + notify: function notify() { + this._doLayoutDirty(); + } + }, + startAxis: { + default: AxisDirection.HORIZONTAL, + tooltip: false, + type: AxisDirection, + notify: function notify() { + var reLayouted; + false; + this._doLayoutDirty(); + }, + animatable: false + }, + paddingLeft: { + default: 0, + tooltip: false, + notify: function notify() { + this._doLayoutDirty(); + } + }, + paddingRight: { + default: 0, + tooltip: false, + notify: function notify() { + this._doLayoutDirty(); + } + }, + paddingTop: { + default: 0, + tooltip: false, + notify: function notify() { + this._doLayoutDirty(); + } + }, + paddingBottom: { + default: 0, + tooltip: false, + notify: function notify() { + this._doLayoutDirty(); + } + }, + spacingX: { + default: 0, + notify: function notify() { + this._doLayoutDirty(); + }, + tooltip: false + }, + spacingY: { + default: 0, + notify: function notify() { + this._doLayoutDirty(); + }, + tooltip: false + }, + verticalDirection: { + default: VerticalDirection.TOP_TO_BOTTOM, + type: VerticalDirection, + notify: function notify() { + this._doLayoutDirty(); + }, + tooltip: false, + animatable: false + }, + horizontalDirection: { + default: HorizontalDirection.LEFT_TO_RIGHT, + type: HorizontalDirection, + notify: function notify() { + this._doLayoutDirty(); + }, + tooltip: false, + animatable: false + }, + affectedByScale: { + default: false, + notify: function notify() { + this._doLayoutDirty(); + }, + animatable: false, + tooltip: false + } + }, + statics: { + Type: Type, + VerticalDirection: VerticalDirection, + HorizontalDirection: HorizontalDirection, + ResizeMode: ResizeMode, + AxisDirection: AxisDirection + }, + onEnable: function onEnable() { + this._addEventListeners(); + this.node.getContentSize().equals(cc.size(0, 0)) && this.node.setContentSize(this._layoutSize); + this._doLayoutDirty(); + }, + onDisable: function onDisable() { + this._removeEventListeners(); + }, + _doLayoutDirty: function _doLayoutDirty() { + this._layoutDirty = true; + }, + _doScaleDirty: function _doScaleDirty() { + this._layoutDirty = this._layoutDirty || this.affectedByScale; + }, + _addEventListeners: function _addEventListeners() { + cc.director.on(cc.Director.EVENT_AFTER_UPDATE, this.updateLayout, this); + this.node.on(NodeEvent.SIZE_CHANGED, this._resized, this); + this.node.on(NodeEvent.ANCHOR_CHANGED, this._doLayoutDirty, this); + this.node.on(NodeEvent.CHILD_ADDED, this._childAdded, this); + this.node.on(NodeEvent.CHILD_REMOVED, this._childRemoved, this); + this.node.on(NodeEvent.CHILD_REORDER, this._doLayoutDirty, this); + this._addChildrenEventListeners(); + }, + _removeEventListeners: function _removeEventListeners() { + cc.director.off(cc.Director.EVENT_AFTER_UPDATE, this.updateLayout, this); + this.node.off(NodeEvent.SIZE_CHANGED, this._resized, this); + this.node.off(NodeEvent.ANCHOR_CHANGED, this._doLayoutDirty, this); + this.node.off(NodeEvent.CHILD_ADDED, this._childAdded, this); + this.node.off(NodeEvent.CHILD_REMOVED, this._childRemoved, this); + this.node.off(NodeEvent.CHILD_REORDER, this._doLayoutDirty, this); + this._removeChildrenEventListeners(); + }, + _addChildrenEventListeners: function _addChildrenEventListeners() { + var children = this.node.children; + for (var i = 0; i < children.length; ++i) { + var child = children[i]; + child.on(NodeEvent.SCALE_CHANGED, this._doScaleDirty, this); + child.on(NodeEvent.SIZE_CHANGED, this._doLayoutDirty, this); + child.on(NodeEvent.POSITION_CHANGED, this._doLayoutDirty, this); + child.on(NodeEvent.ANCHOR_CHANGED, this._doLayoutDirty, this); + child.on("active-in-hierarchy-changed", this._doLayoutDirty, this); + } + }, + _removeChildrenEventListeners: function _removeChildrenEventListeners() { + var children = this.node.children; + for (var i = 0; i < children.length; ++i) { + var child = children[i]; + child.off(NodeEvent.SCALE_CHANGED, this._doScaleDirty, this); + child.off(NodeEvent.SIZE_CHANGED, this._doLayoutDirty, this); + child.off(NodeEvent.POSITION_CHANGED, this._doLayoutDirty, this); + child.off(NodeEvent.ANCHOR_CHANGED, this._doLayoutDirty, this); + child.off("active-in-hierarchy-changed", this._doLayoutDirty, this); + } + }, + _childAdded: function _childAdded(child) { + child.on(NodeEvent.SCALE_CHANGED, this._doScaleDirty, this); + child.on(NodeEvent.SIZE_CHANGED, this._doLayoutDirty, this); + child.on(NodeEvent.POSITION_CHANGED, this._doLayoutDirty, this); + child.on(NodeEvent.ANCHOR_CHANGED, this._doLayoutDirty, this); + child.on("active-in-hierarchy-changed", this._doLayoutDirty, this); + this._doLayoutDirty(); + }, + _childRemoved: function _childRemoved(child) { + child.off(NodeEvent.SCALE_CHANGED, this._doScaleDirty, this); + child.off(NodeEvent.SIZE_CHANGED, this._doLayoutDirty, this); + child.off(NodeEvent.POSITION_CHANGED, this._doLayoutDirty, this); + child.off(NodeEvent.ANCHOR_CHANGED, this._doLayoutDirty, this); + child.off("active-in-hierarchy-changed", this._doLayoutDirty, this); + this._doLayoutDirty(); + }, + _resized: function _resized() { + this._layoutSize = this.node.getContentSize(); + this._doLayoutDirty(); + }, + _doLayoutHorizontally: function _doLayoutHorizontally(baseWidth, rowBreak, fnPositionY, applyChildren) { + var layoutAnchor = this.node.getAnchorPoint(); + var children = this.node.children; + var sign = 1; + var paddingX = this.paddingLeft; + var leftBoundaryOfLayout = -layoutAnchor.x * baseWidth; + if (this.horizontalDirection === HorizontalDirection.RIGHT_TO_LEFT) { + sign = -1; + leftBoundaryOfLayout = (1 - layoutAnchor.x) * baseWidth; + paddingX = this.paddingRight; + } + var nextX = leftBoundaryOfLayout + sign * paddingX - sign * this.spacingX; + var rowMaxHeight = 0; + var tempMaxHeight = 0; + var secondMaxHeight = 0; + var row = 0; + var containerResizeBoundary = 0; + var maxHeightChildAnchorY = 0; + var activeChildCount = 0; + for (var i = 0; i < children.length; ++i) { + var child = children[i]; + child.activeInHierarchy && activeChildCount++; + } + var newChildWidth = this.cellSize.width; + this.type !== Type.GRID && this.resizeMode === ResizeMode.CHILDREN && (newChildWidth = (baseWidth - (this.paddingLeft + this.paddingRight) - (activeChildCount - 1) * this.spacingX) / activeChildCount); + for (var i = 0; i < children.length; ++i) { + var child = children[i]; + var childScaleX = this._getUsedScaleValue(child.scaleX); + var childScaleY = this._getUsedScaleValue(child.scaleY); + if (!child.activeInHierarchy) continue; + if (this._resize === ResizeMode.CHILDREN) { + child.width = newChildWidth / childScaleX; + this.type === Type.GRID && (child.height = this.cellSize.height / childScaleY); + } + var anchorX = child.anchorX; + var childBoundingBoxWidth = child.width * childScaleX; + var childBoundingBoxHeight = child.height * childScaleY; + secondMaxHeight > tempMaxHeight && (tempMaxHeight = secondMaxHeight); + if (childBoundingBoxHeight >= tempMaxHeight) { + secondMaxHeight = tempMaxHeight; + tempMaxHeight = childBoundingBoxHeight; + maxHeightChildAnchorY = child.getAnchorPoint().y; + } + this.horizontalDirection === HorizontalDirection.RIGHT_TO_LEFT && (anchorX = 1 - child.anchorX); + nextX = nextX + sign * anchorX * childBoundingBoxWidth + sign * this.spacingX; + var rightBoundaryOfChild = sign * (1 - anchorX) * childBoundingBoxWidth; + if (rowBreak) { + var rowBreakBoundary = nextX + rightBoundaryOfChild + sign * (sign > 0 ? this.paddingRight : this.paddingLeft); + var leftToRightRowBreak = this.horizontalDirection === HorizontalDirection.LEFT_TO_RIGHT && rowBreakBoundary > (1 - layoutAnchor.x) * baseWidth; + var rightToLeftRowBreak = this.horizontalDirection === HorizontalDirection.RIGHT_TO_LEFT && rowBreakBoundary < -layoutAnchor.x * baseWidth; + if (leftToRightRowBreak || rightToLeftRowBreak) { + if (childBoundingBoxHeight >= tempMaxHeight) { + 0 === secondMaxHeight && (secondMaxHeight = tempMaxHeight); + rowMaxHeight += secondMaxHeight; + secondMaxHeight = tempMaxHeight; + } else { + rowMaxHeight += tempMaxHeight; + secondMaxHeight = childBoundingBoxHeight; + tempMaxHeight = 0; + } + nextX = leftBoundaryOfLayout + sign * (paddingX + anchorX * childBoundingBoxWidth); + row++; + } + } + var finalPositionY = fnPositionY(child, rowMaxHeight, row); + baseWidth >= childBoundingBoxWidth + this.paddingLeft + this.paddingRight && applyChildren && child.setPosition(cc.v2(nextX, finalPositionY)); + var signX = 1; + var tempFinalPositionY; + var topMarign = 0 === tempMaxHeight ? childBoundingBoxHeight : tempMaxHeight; + if (this.verticalDirection === VerticalDirection.TOP_TO_BOTTOM) { + containerResizeBoundary = containerResizeBoundary || this.node._contentSize.height; + signX = -1; + tempFinalPositionY = finalPositionY + signX * (topMarign * maxHeightChildAnchorY + this.paddingBottom); + tempFinalPositionY < containerResizeBoundary && (containerResizeBoundary = tempFinalPositionY); + } else { + containerResizeBoundary = containerResizeBoundary || -this.node._contentSize.height; + tempFinalPositionY = finalPositionY + signX * (topMarign * maxHeightChildAnchorY + this.paddingTop); + tempFinalPositionY > containerResizeBoundary && (containerResizeBoundary = tempFinalPositionY); + } + nextX += rightBoundaryOfChild; + } + return containerResizeBoundary; + }, + _getVerticalBaseHeight: function _getVerticalBaseHeight(children) { + var newHeight = 0; + var activeChildCount = 0; + if (this.resizeMode === ResizeMode.CONTAINER) { + for (var i = 0; i < children.length; ++i) { + var child = children[i]; + if (child.activeInHierarchy) { + activeChildCount++; + newHeight += child.height * this._getUsedScaleValue(child.scaleY); + } + } + newHeight += (activeChildCount - 1) * this.spacingY + this.paddingBottom + this.paddingTop; + } else newHeight = this.node.getContentSize().height; + return newHeight; + }, + _doLayoutVertically: function _doLayoutVertically(baseHeight, columnBreak, fnPositionX, applyChildren) { + var layoutAnchor = this.node.getAnchorPoint(); + var children = this.node.children; + var sign = 1; + var paddingY = this.paddingBottom; + var bottomBoundaryOfLayout = -layoutAnchor.y * baseHeight; + if (this.verticalDirection === VerticalDirection.TOP_TO_BOTTOM) { + sign = -1; + bottomBoundaryOfLayout = (1 - layoutAnchor.y) * baseHeight; + paddingY = this.paddingTop; + } + var nextY = bottomBoundaryOfLayout + sign * paddingY - sign * this.spacingY; + var columnMaxWidth = 0; + var tempMaxWidth = 0; + var secondMaxWidth = 0; + var column = 0; + var containerResizeBoundary = 0; + var maxWidthChildAnchorX = 0; + var activeChildCount = 0; + for (var i = 0; i < children.length; ++i) { + var child = children[i]; + child.activeInHierarchy && activeChildCount++; + } + var newChildHeight = this.cellSize.height; + this.type !== Type.GRID && this.resizeMode === ResizeMode.CHILDREN && (newChildHeight = (baseHeight - (this.paddingTop + this.paddingBottom) - (activeChildCount - 1) * this.spacingY) / activeChildCount); + for (var i = 0; i < children.length; ++i) { + var child = children[i]; + var childScaleX = this._getUsedScaleValue(child.scaleX); + var childScaleY = this._getUsedScaleValue(child.scaleY); + if (!child.activeInHierarchy) continue; + if (this.resizeMode === ResizeMode.CHILDREN) { + child.height = newChildHeight / childScaleY; + this.type === Type.GRID && (child.width = this.cellSize.width / childScaleX); + } + var anchorY = child.anchorY; + var childBoundingBoxWidth = child.width * childScaleX; + var childBoundingBoxHeight = child.height * childScaleY; + secondMaxWidth > tempMaxWidth && (tempMaxWidth = secondMaxWidth); + if (childBoundingBoxWidth >= tempMaxWidth) { + secondMaxWidth = tempMaxWidth; + tempMaxWidth = childBoundingBoxWidth; + maxWidthChildAnchorX = child.getAnchorPoint().x; + } + this.verticalDirection === VerticalDirection.TOP_TO_BOTTOM && (anchorY = 1 - child.anchorY); + nextY = nextY + sign * anchorY * childBoundingBoxHeight + sign * this.spacingY; + var topBoundaryOfChild = sign * (1 - anchorY) * childBoundingBoxHeight; + if (columnBreak) { + var columnBreakBoundary = nextY + topBoundaryOfChild + sign * (sign > 0 ? this.paddingTop : this.paddingBottom); + var bottomToTopColumnBreak = this.verticalDirection === VerticalDirection.BOTTOM_TO_TOP && columnBreakBoundary > (1 - layoutAnchor.y) * baseHeight; + var topToBottomColumnBreak = this.verticalDirection === VerticalDirection.TOP_TO_BOTTOM && columnBreakBoundary < -layoutAnchor.y * baseHeight; + if (bottomToTopColumnBreak || topToBottomColumnBreak) { + if (childBoundingBoxWidth >= tempMaxWidth) { + 0 === secondMaxWidth && (secondMaxWidth = tempMaxWidth); + columnMaxWidth += secondMaxWidth; + secondMaxWidth = tempMaxWidth; + } else { + columnMaxWidth += tempMaxWidth; + secondMaxWidth = childBoundingBoxWidth; + tempMaxWidth = 0; + } + nextY = bottomBoundaryOfLayout + sign * (paddingY + anchorY * childBoundingBoxHeight); + column++; + } + } + var finalPositionX = fnPositionX(child, columnMaxWidth, column); + baseHeight >= childBoundingBoxHeight + (this.paddingTop + this.paddingBottom) && applyChildren && child.setPosition(cc.v2(finalPositionX, nextY)); + var signX = 1; + var tempFinalPositionX; + var rightMarign = 0 === tempMaxWidth ? childBoundingBoxWidth : tempMaxWidth; + if (this.horizontalDirection === HorizontalDirection.RIGHT_TO_LEFT) { + signX = -1; + containerResizeBoundary = containerResizeBoundary || this.node._contentSize.width; + tempFinalPositionX = finalPositionX + signX * (rightMarign * maxWidthChildAnchorX + this.paddingLeft); + tempFinalPositionX < containerResizeBoundary && (containerResizeBoundary = tempFinalPositionX); + } else { + containerResizeBoundary = containerResizeBoundary || -this.node._contentSize.width; + tempFinalPositionX = finalPositionX + signX * (rightMarign * maxWidthChildAnchorX + this.paddingRight); + tempFinalPositionX > containerResizeBoundary && (containerResizeBoundary = tempFinalPositionX); + } + nextY += topBoundaryOfChild; + } + return containerResizeBoundary; + }, + _doLayoutBasic: function _doLayoutBasic() { + var children = this.node.children; + var allChildrenBoundingBox = null; + for (var i = 0; i < children.length; ++i) { + var child = children[i]; + child.activeInHierarchy && (allChildrenBoundingBox ? allChildrenBoundingBox.union(allChildrenBoundingBox, child.getBoundingBoxToWorld()) : allChildrenBoundingBox = child.getBoundingBoxToWorld()); + } + if (allChildrenBoundingBox) { + var leftBottomSpace = this.node.convertToNodeSpaceAR(cc.v2(allChildrenBoundingBox.x, allChildrenBoundingBox.y)); + leftBottomSpace = cc.v2(leftBottomSpace.x - this.paddingLeft, leftBottomSpace.y - this.paddingBottom); + var rightTopSpace = this.node.convertToNodeSpaceAR(cc.v2(allChildrenBoundingBox.xMax, allChildrenBoundingBox.yMax)); + rightTopSpace = cc.v2(rightTopSpace.x + this.paddingRight, rightTopSpace.y + this.paddingTop); + var newSize = rightTopSpace.sub(leftBottomSpace); + newSize = cc.size(parseFloat(newSize.x.toFixed(2)), parseFloat(newSize.y.toFixed(2))); + if (0 !== newSize.width) { + var newAnchorX = -leftBottomSpace.x / newSize.width; + this.node.anchorX = parseFloat(newAnchorX.toFixed(2)); + } + if (0 !== newSize.height) { + var newAnchorY = -leftBottomSpace.y / newSize.height; + this.node.anchorY = parseFloat(newAnchorY.toFixed(2)); + } + this.node.setContentSize(newSize); + } + }, + _doLayoutGridAxisHorizontal: function _doLayoutGridAxisHorizontal(layoutAnchor, layoutSize) { + var baseWidth = layoutSize.width; + var sign = 1; + var bottomBoundaryOfLayout = -layoutAnchor.y * layoutSize.height; + var paddingY = this.paddingBottom; + if (this.verticalDirection === VerticalDirection.TOP_TO_BOTTOM) { + sign = -1; + bottomBoundaryOfLayout = (1 - layoutAnchor.y) * layoutSize.height; + paddingY = this.paddingTop; + } + var fnPositionY = function(child, topOffset, row) { + return bottomBoundaryOfLayout + sign * (topOffset + child.anchorY * child.height * this._getUsedScaleValue(child.scaleY) + paddingY + row * this.spacingY); + }.bind(this); + var newHeight = 0; + if (this.resizeMode === ResizeMode.CONTAINER) { + var boundary = this._doLayoutHorizontally(baseWidth, true, fnPositionY, false); + newHeight = bottomBoundaryOfLayout - boundary; + newHeight < 0 && (newHeight *= -1); + bottomBoundaryOfLayout = -layoutAnchor.y * newHeight; + if (this.verticalDirection === VerticalDirection.TOP_TO_BOTTOM) { + sign = -1; + bottomBoundaryOfLayout = (1 - layoutAnchor.y) * newHeight; + } + } + this._doLayoutHorizontally(baseWidth, true, fnPositionY, true); + this.resizeMode === ResizeMode.CONTAINER && this.node.setContentSize(baseWidth, newHeight); + }, + _doLayoutGridAxisVertical: function _doLayoutGridAxisVertical(layoutAnchor, layoutSize) { + var baseHeight = layoutSize.height; + var sign = 1; + var leftBoundaryOfLayout = -layoutAnchor.x * layoutSize.width; + var paddingX = this.paddingLeft; + if (this.horizontalDirection === HorizontalDirection.RIGHT_TO_LEFT) { + sign = -1; + leftBoundaryOfLayout = (1 - layoutAnchor.x) * layoutSize.width; + paddingX = this.paddingRight; + } + var fnPositionX = function(child, leftOffset, column) { + return leftBoundaryOfLayout + sign * (leftOffset + child.anchorX * child.width * this._getUsedScaleValue(child.scaleX) + paddingX + column * this.spacingX); + }.bind(this); + var newWidth = 0; + if (this.resizeMode === ResizeMode.CONTAINER) { + var boundary = this._doLayoutVertically(baseHeight, true, fnPositionX, false); + newWidth = leftBoundaryOfLayout - boundary; + newWidth < 0 && (newWidth *= -1); + leftBoundaryOfLayout = -layoutAnchor.x * newWidth; + if (this.horizontalDirection === HorizontalDirection.RIGHT_TO_LEFT) { + sign = -1; + leftBoundaryOfLayout = (1 - layoutAnchor.x) * newWidth; + } + } + this._doLayoutVertically(baseHeight, true, fnPositionX, true); + this.resizeMode === ResizeMode.CONTAINER && this.node.setContentSize(newWidth, baseHeight); + }, + _doLayoutGrid: function _doLayoutGrid() { + var layoutAnchor = this.node.getAnchorPoint(); + var layoutSize = this.node.getContentSize(); + this.startAxis === AxisDirection.HORIZONTAL ? this._doLayoutGridAxisHorizontal(layoutAnchor, layoutSize) : this.startAxis === AxisDirection.VERTICAL && this._doLayoutGridAxisVertical(layoutAnchor, layoutSize); + }, + _getHorizontalBaseWidth: function _getHorizontalBaseWidth(children) { + var newWidth = 0; + var activeChildCount = 0; + if (this.resizeMode === ResizeMode.CONTAINER) { + for (var i = 0; i < children.length; ++i) { + var child = children[i]; + if (child.activeInHierarchy) { + activeChildCount++; + newWidth += child.width * this._getUsedScaleValue(child.scaleX); + } + } + newWidth += (activeChildCount - 1) * this.spacingX + this.paddingLeft + this.paddingRight; + } else newWidth = this.node.getContentSize().width; + return newWidth; + }, + _doLayout: function _doLayout() { + if (this.type === Type.HORIZONTAL) { + var newWidth = this._getHorizontalBaseWidth(this.node.children); + var fnPositionY = function fnPositionY(child) { + return child.y; + }; + this._doLayoutHorizontally(newWidth, false, fnPositionY, true); + this.node.width = newWidth; + } else if (this.type === Type.VERTICAL) { + var newHeight = this._getVerticalBaseHeight(this.node.children); + var fnPositionX = function fnPositionX(child) { + return child.x; + }; + this._doLayoutVertically(newHeight, false, fnPositionX, true); + this.node.height = newHeight; + } else this.type === Type.NONE ? this.resizeMode === ResizeMode.CONTAINER && this._doLayoutBasic() : this.type === Type.GRID && this._doLayoutGrid(); + }, + _getUsedScaleValue: function _getUsedScaleValue(value) { + return this.affectedByScale ? Math.abs(value) : 1; + }, + updateLayout: function updateLayout() { + if (this._layoutDirty && this.node.children.length > 0) { + this._doLayout(); + this._layoutDirty = false; + } + } + }); + cc.Layout = module.exports = Layout; + }), { + "../CCNode": 24, + "./CCComponent": 91 + } ], + 97: [ (function(require, module, exports) { + "use strict"; + var RenderComponent = require("../components/CCRenderComponent"); + var BlendFunc = require("../../core/utils/blend-func"); + var MotionStreak = cc.Class({ + name: "cc.MotionStreak", + extends: RenderComponent, + mixins: [ BlendFunc ], + editor: false, + ctor: function ctor() { + this._points = []; + }, + properties: { + preview: { + default: false, + editorOnly: true, + notify: false, + animatable: false + }, + _fadeTime: 1, + fadeTime: { + get: function get() { + return this._fadeTime; + }, + set: function set(value) { + this._fadeTime = value; + this.reset(); + }, + animatable: false, + tooltip: false + }, + _minSeg: 1, + minSeg: { + get: function get() { + return this._minSeg; + }, + set: function set(value) { + this._minSeg = value; + }, + animatable: false, + tooltip: false + }, + _stroke: 64, + stroke: { + get: function get() { + return this._stroke; + }, + set: function set(value) { + this._stroke = value; + }, + animatable: false, + tooltip: false + }, + _texture: { + default: null, + type: cc.Texture2D + }, + texture: { + get: function get() { + return this._texture; + }, + set: function set(value) { + if (this._texture === value) return; + this._texture = value; + this._checkSwitchMaterial(); + this._updateMaterial(); + }, + type: cc.Texture2D, + animatable: false, + tooltip: false + }, + _color: cc.Color.WHITE, + color: { + get: function get() { + return this._color.clone(); + }, + set: function set(value) { + this._color.equals(value) || this._color.set(value); + }, + type: cc.Color, + tooltip: false + }, + _fastMode: false, + fastMode: { + get: function get() { + return this._fastMode; + }, + set: function set(value) { + this._fastMode = value; + }, + animatable: false, + tooltip: false + }, + autoSwitchMaterial: { + type: RenderComponent.EnableType, + default: RenderComponent.EnableType.GLOBAL, + notify: function notify(oldValue) { + if (this.autoSwitchMaterial === oldValue) return; + this.setVertsDirty(); + } + } + }, + setVertsDirty: function setVertsDirty() { + this._checkSwitchMaterial(); + this._updateMaterial(); + this._super(); + }, + __preload: function __preload() { + this._super(); + this._checkSwitchMaterial(); + }, + _checkSwitchMaterial: function _checkSwitchMaterial() { + if (this._assembler) { + var material = this._materials[0]; + if (!material) return; + if (!this._texture) return; + this._assembler.checkAndSwitchMaterial(this, this._texture, material); + } + }, + onEnable: function onEnable() { + this._super(); + this.reset(); + }, + _updateMaterial: function _updateMaterial() { + var material = this.getMaterial(0); + var isMultiMaterial = material.material.isMultiSupport(); + if (isMultiMaterial) { + if (!this._texture) return; + this._updateMultiTexId(material, this._texture); + } else material.getProperty("texture") !== this._texture && material.setProperty("texture", this._texture); + this._assembler && (isMultiMaterial && !this._assembler.isMulti || !isMultiMaterial && this._assembler.isMulti) && this._resetAssembler(); + if (isMultiMaterial && this._texIdDirty && this._assembler) { + if (!this._texture) return; + this._assembler.updateTexId(this); + this._texIdDirty = false; + } + BlendFunc.prototype._updateMaterial.call(this); + }, + onFocusInEditor: false, + onLostFocusInEditor: false, + reset: function reset() { + this._points.length = 0; + this._assembler && this._assembler._renderData.clear(); + false; + }, + lateUpdate: function lateUpdate(dt) { + this._assembler && this._assembler.update(this, dt); + } + }); + cc.MotionStreak = module.exports = MotionStreak; + }), { + "../../core/utils/blend-func": 199, + "../components/CCRenderComponent": 98 + } ], + 98: [ (function(require, module, exports) { + "use strict"; + var _assembler = _interopRequireDefault(require("../renderer/assembler")); + var _materialVariant = _interopRequireDefault(require("../assets/material/material-variant")); + var _valueTypes = require("../value-types"); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var Component = require("./CCComponent"); + var RenderFlow = require("../renderer/render-flow"); + var Material = require("../assets/material/CCMaterial"); + var _temp_color = new _valueTypes.Color(); + var EnableType = cc.Enum({ + GLOBAL: 0, + ENABLE: 1, + DISABLE: 2 + }); + var RenderComponent = cc.Class({ + name: "RenderComponent", + extends: Component, + editor: false, + statics: { + EnableType: EnableType + }, + properties: { + _materials: { + default: [], + type: Material + }, + materials: { + get: function get() { + return this._materials; + }, + set: function set(val) { + this._materials = val; + this._activateMaterial(); + }, + type: [ Material ], + displayName: "Materials", + animatable: false + } + }, + ctor: function ctor() { + this._vertsDirty = true; + this._texIdDirty = true; + this._texId = 0; + this._assembler = null; + }, + _resetAssembler: function _resetAssembler() { + _assembler["default"].init(this); + this._updateColor(); + this._texId = 0; + this.setVertsDirty(); + }, + __preload: function __preload() { + this._resetAssembler(); + this._activateMaterial(); + }, + onEnable: function onEnable() { + this.node._renderComponent && (this.node._renderComponent.enabled = false); + this.node._renderComponent = this; + this.node._renderFlag |= RenderFlow.FLAG_OPACITY_COLOR; + this.setVertsDirty(); + }, + onDisable: function onDisable() { + this.node._renderComponent = null; + this.disableRender(); + }, + onDestroy: function onDestroy() { + var materials = this._materials; + for (var i = 0; i < materials.length; i++) cc.pool.material.put(materials[i]); + materials.length = 0; + cc.pool.assembler.put(this._assembler); + }, + setVertsDirty: function setVertsDirty() { + this._vertsDirty = true; + this.markForRender(true); + }, + _on3DNodeChanged: function _on3DNodeChanged() { + this._resetAssembler(); + }, + _validateRender: function _validateRender() {}, + markForValidate: function markForValidate() { + cc.RenderFlow.registerValidate(this); + }, + markForRender: function markForRender(enable) { + var flag = RenderFlow.FLAG_RENDER | RenderFlow.FLAG_UPDATE_RENDER_DATA; + if (enable) { + this.node._renderFlag |= flag; + this.markForValidate(); + } else this.node._renderFlag &= ~flag; + }, + disableRender: function disableRender() { + this.node._renderFlag &= ~(RenderFlow.FLAG_RENDER | RenderFlow.FLAG_UPDATE_RENDER_DATA); + }, + getMaterial: function getMaterial(index) { + if (index < 0 || index >= this._materials.length) return null; + var material = this._materials[index]; + if (!material) return null; + var instantiated = _materialVariant["default"].create(material, this); + instantiated !== material && this.setMaterial(index, instantiated); + return instantiated; + }, + getMaterials: function getMaterials() { + var materials = this._materials; + for (var i = 0; i < materials.length; i++) materials[i] = _materialVariant["default"].create(materials[i], this); + return materials; + }, + setMaterial: function setMaterial(index, material) { + if (material !== this._materials[index]) { + material = _materialVariant["default"].create(material, this); + this._materials[index] = material; + } + this._updateMaterial(); + this.markForRender(true); + return material; + }, + _getDefaultMaterial: function _getDefaultMaterial() { + return Material.getBuiltinMaterial("2d-sprite"); + }, + _activateMaterial: function _activateMaterial() { + var materials = this._materials; + if (!materials[0]) { + var material = this._getDefaultMaterial(); + materials[0] = material; + } + for (var i = 0; i < materials.length; i++) materials[i] = _materialVariant["default"].create(materials[i], this); + this._updateMaterial(); + }, + _updateMaterial: function _updateMaterial() {}, + _updateColor: function _updateColor() { + if (this._assembler.updateColor) { + var premultiply = this.srcBlendFactor === cc.macro.BlendFactor.ONE; + premultiply && _valueTypes.Color.premultiplyAlpha(_temp_color, this.node._color); + var color = premultiply ? _temp_color._val : null; + this._assembler.updateColor(this, color); + } + }, + _checkBacth: function _checkBacth(renderer, cullingMask) { + var material = this._materials[0]; + if (material && material.getHash() !== renderer.material.getHash() || renderer.cullingMask !== cullingMask) { + renderer._flush(); + renderer.node = material.getDefine("CC_USE_MODEL") ? this.node : renderer._dummyNode; + renderer.material = material; + renderer.cullingMask = cullingMask; + } + }, + _updateMultiTexId: function _updateMultiTexId(material, texture) { + var multi = material.material.getMultiHandler(); + var spTexture = texture; + var nSpTexture = spTexture.getImpl(); + var same = 0 === this._texId ? material.getProperty("texture") !== nSpTexture : multi.getTexture(this._texId) !== nSpTexture; + if (same) { + var isChanged = Object.prototype.hasOwnProperty.call(material._effect._passes["0"]._properties, "texture"); + var texId = isChanged ? -1 : multi.getIndex(nSpTexture); + if (-1 !== texId) { + this._texId = texId; + this._texIdDirty = true; + } else { + material.setProperty("texture", spTexture); + if (0 !== this._texId) { + this._texId = 0; + this._texIdDirty = true; + } + } + } else this._texIdDirty = false; + } + }); + cc.RenderComponent = module.exports = RenderComponent; + }), { + "../assets/material/CCMaterial": 75, + "../assets/material/material-variant": 82, + "../renderer/assembler": 149, + "../renderer/render-flow": 153, + "../value-types": 220, + "./CCComponent": 91 + } ], + 99: [ (function(require, module, exports) { + "use strict"; + var _materialVariant = _interopRequireDefault(require("../assets/material/material-variant")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var js = require("../platform/js"); + var macro = require("../platform/CCMacro"); + var textUtils = require("../utils/text-utils"); + var HtmlTextParser = require("../utils/html-text-parser"); + var _htmlTextParser = new HtmlTextParser(); + var HorizontalAlign = macro.TextAlignment; + var VerticalAlign = macro.VerticalTextAlignment; + var RichTextChildName = "RICHTEXT_CHILD"; + var RichTextChildImageName = "RICHTEXT_Image_CHILD"; + var CacheMode = cc.Label.CacheMode; + var RenderComponent = require("./CCRenderComponent"); + function debounce(func, wait, immediate) { + var timeout; + return function() { + var context = this; + var later = function later() { + timeout = null; + immediate || func.apply(context, arguments); + }; + var callNow = immediate && !timeout; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + callNow && func.apply(context, arguments); + }; + } + var pool = new js.Pool(function(node) { + false; + false; + if (!cc.isValid(node)) return false; + var outline = node.getComponent(cc.LabelOutline); + outline && (outline.width = 0); + return true; + }, 20); + pool.get = function(string, richtext) { + var labelNode = this._get(); + labelNode || (labelNode = new cc.PrivateNode(RichTextChildName)); + labelNode.setPosition(0, 0); + labelNode.setAnchorPoint(.5, .5); + labelNode.skewX = 0; + var labelComponent = labelNode.getComponent(cc.Label); + labelComponent || (labelComponent = labelNode.addComponent(cc.Label)); + labelComponent.string = ""; + labelComponent.horizontalAlign = HorizontalAlign.LEFT; + labelComponent.verticalAlign = VerticalAlign.CENTER; + labelComponent._forceUseCanvas = true; + return labelNode; + }; + var RichText = cc.Class({ + name: "cc.RichText", + extends: cc.Component, + ctor: function ctor() { + this._textArray = null; + this._labelSegments = []; + this._labelSegmentsCache = []; + this._linesWidth = []; + false; + this._updateRichTextStatus = this._updateRichText; + }, + editor: false, + properties: { + string: { + default: "RichText", + multiline: true, + tooltip: false, + notify: function notify() { + this._updateRichTextStatus(); + } + }, + horizontalAlign: { + default: HorizontalAlign.LEFT, + type: HorizontalAlign, + tooltip: false, + animatable: false, + notify: function notify(oldValue) { + if (this.horizontalAlign === oldValue) return; + this._layoutDirty = true; + this._updateRichTextStatus(); + } + }, + fontSize: { + default: 40, + tooltip: false, + notify: function notify(oldValue) { + if (this.fontSize === oldValue) return; + this._layoutDirty = true; + this._updateRichTextStatus(); + } + }, + _fontFamily: "Arial", + fontFamily: { + tooltip: false, + get: function get() { + return this._fontFamily; + }, + set: function set(value) { + if (this._fontFamily === value) return; + this._fontFamily = value; + this._layoutDirty = true; + this._updateRichTextStatus(); + }, + animatable: false + }, + font: { + default: null, + type: cc.TTFFont, + tooltip: false, + notify: function notify(oldValue) { + if (this.font === oldValue) return; + this._layoutDirty = true; + if (this.font) { + false; + this.useSystemFont = false; + this._onTTFLoaded(); + } else this.useSystemFont = true; + this._updateRichTextStatus(); + } + }, + _isSystemFontUsed: true, + useSystemFont: { + get: function get() { + return this._isSystemFontUsed; + }, + set: function set(value) { + if (this._isSystemFontUsed === value) return; + this._isSystemFontUsed = value; + false; + this._layoutDirty = true; + this._updateRichTextStatus(); + }, + animatable: false, + tooltip: false + }, + cacheMode: { + default: CacheMode.NONE, + type: CacheMode, + tooltip: false, + notify: function notify(oldValue) { + if (this.cacheMode === oldValue) return; + this._updateRichTextStatus(); + }, + animatable: false + }, + maxWidth: { + default: 0, + tooltip: false, + notify: function notify(oldValue) { + if (this.maxWidth === oldValue) return; + this._layoutDirty = true; + this._updateRichTextStatus(); + } + }, + lineHeight: { + default: 40, + tooltip: false, + notify: function notify(oldValue) { + if (this.lineHeight === oldValue) return; + this._layoutDirty = true; + this._updateRichTextStatus(); + } + }, + imageAtlas: { + default: null, + type: cc.SpriteAtlas, + tooltip: false, + notify: function notify(oldValue) { + if (this.imageAtlas === oldValue) return; + this._layoutDirty = true; + this._updateRichTextStatus(); + } + }, + handleTouchEvent: { + default: true, + tooltip: false, + notify: function notify(oldValue) { + if (this.handleTouchEvent === oldValue) return; + this.enabledInHierarchy && (this.handleTouchEvent ? this._addEventListeners() : this._removeEventListeners()); + } + }, + customMaterial: { + default: null, + type: cc.Material, + notify: function notify(oldValue) { + if (this.customMaterial === oldValue) return; + var material = null == this.customMaterial ? this._getDefaultMaterial() : this.customMaterial; + for (var i = 0; i < this._labelSegments.length; i++) { + var labelComponent = this._labelSegments[i].getComponent(cc.Label); + labelComponent && (0 === labelComponent._materials.length ? labelComponent._materials[0] = _materialVariant["default"].create(material, labelComponent) : labelComponent.setMaterial(0, material)); + var spriteComponent = this._labelSegments[i].getComponent(cc.Sprite); + spriteComponent && (0 === spriteComponent._materials.length ? spriteComponent._materials[0] = _materialVariant["default"].create(material, spriteComponent) : spriteComponent.setMaterial(0, material)); + } + for (var _i = 0; _i < this._labelSegmentsCache.length; _i++) { + var _labelComponent = this._labelSegmentsCache[_i].getComponent(cc.Label); + _labelComponent && (0 === _labelComponent._materials.length ? _labelComponent._materials[0] = _materialVariant["default"].create(material, _labelComponent) : _labelComponent.setMaterial(0, material)); + } + } + }, + autoSwitchMaterial: { + type: RenderComponent.EnableType, + default: RenderComponent.EnableType.GLOBAL, + notify: function notify(oldValue) { + if (this.autoSwitchMaterial === oldValue) return; + for (var i = 0; i < this._labelSegments.length; i++) { + var labelComponent = this._labelSegments[i].getComponent(cc.Label); + labelComponent && (labelComponent.autoSwitchMaterial = this.autoSwitchMaterial); + var spriteComponent = this._labelSegments[i].getComponent(cc.Sprite); + spriteComponent && (spriteComponent.autoSwitchMaterial = this.autoSwitchMaterial); + } + for (var _i2 = 0; _i2 < this._labelSegmentsCache.length; _i2++) { + var _labelComponent2 = this._labelSegmentsCache[_i2].getComponent(cc.Label); + _labelComponent2 && (_labelComponent2.autoSwitchMaterial = this.autoSwitchMaterial); + } + } + }, + allowDynamicAtlas: { + type: RenderComponent.EnableType, + default: RenderComponent.EnableType.GLOBAL, + notify: function notify(oldValue) { + if (this.allowDynamicAtlas === oldValue) return; + for (var i = 0; i < this._labelSegments.length; i++) { + var labelComponent = this._labelSegments[i].getComponent(cc.Label); + labelComponent && (labelComponent.allowDynamicAtlas = this.allowDynamicAtlas); + var spriteComponent = this._labelSegments[i].getComponent(cc.Sprite); + spriteComponent && (spriteComponent.allowDynamicAtlas = this.allowDynamicAtlas); + } + for (var _i3 = 0; _i3 < this._labelSegmentsCache.length; _i3++) { + var _labelComponent3 = this._labelSegmentsCache[_i3].getComponent(cc.Label); + _labelComponent3 && (_labelComponent3.allowDynamicAtlas = this.allowDynamicAtlas); + } + } + }, + enableRetina: { + type: RenderComponent.EnableType, + default: RenderComponent.EnableType.GLOBAL, + notify: function notify(oldValue) { + if (this.enableRetina === oldValue) return; + for (var i = 0; i < this._labelSegments.length; i++) { + var labelComponent = this._labelSegments[i].getComponent(cc.Label); + labelComponent && (labelComponent.enableRetina = this.enableRetina); + } + for (var _i4 = 0; _i4 < this._labelSegmentsCache.length; _i4++) { + var _labelComponent4 = this._labelSegmentsCache[_i4].getComponent(cc.Label); + _labelComponent4 && (_labelComponent4.enableRetina = this.enableRetina); + } + } + } + }, + statics: { + HorizontalAlign: HorizontalAlign, + VerticalAlign: VerticalAlign + }, + onEnable: function onEnable() { + this.handleTouchEvent && this._addEventListeners(); + this._updateRichText(); + this._activateChildren(true); + }, + onDisable: function onDisable() { + this.handleTouchEvent && this._removeEventListeners(); + this._activateChildren(false); + }, + start: function start() { + this._onTTFLoaded(); + }, + _onColorChanged: function _onColorChanged(parentColor) { + var children = this.node.children; + children.forEach((function(childNode) { + childNode.color = parentColor; + })); + }, + _addEventListeners: function _addEventListeners() { + this.node.on(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this); + this.node.on(cc.Node.EventType.COLOR_CHANGED, this._onColorChanged, this); + }, + _removeEventListeners: function _removeEventListeners() { + this.node.off(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this); + this.node.off(cc.Node.EventType.COLOR_CHANGED, this._onColorChanged, this); + }, + _updateLabelSegmentTextAttributes: function _updateLabelSegmentTextAttributes() { + this._labelSegments.forEach(function(item) { + this._applyTextAttribute(item, null, true); + }.bind(this)); + }, + _createFontLabel: function _createFontLabel(string) { + return pool.get(string, this); + }, + _onTTFLoaded: function _onTTFLoaded() { + if (this.font instanceof cc.TTFFont) if (this.font._nativeAsset) { + this._layoutDirty = true; + this._updateRichText(); + } else { + var self = this; + cc.assetManager.postLoadNative(this.font, (function(err) { + self._layoutDirty = true; + self._updateRichText(); + })); + } else { + this._layoutDirty = true; + this._updateRichText(); + } + }, + _measureText: function _measureText(styleIndex, string) { + var self = this; + var func = function func(string) { + var label; + if (0 === self._labelSegmentsCache.length) { + label = self._createFontLabel(string); + self._labelSegmentsCache.push(label); + } else label = self._labelSegmentsCache[0]; + label._styleIndex = styleIndex; + self._applyTextAttribute(label, string, true); + var labelSize = label.getContentSize(); + return labelSize.width; + }; + return string ? func(string) : func; + }, + _onTouchEnded: function _onTouchEnded(event) { + var _this = this; + var components = this.node.getComponents(cc.Component); + var _loop = function _loop(i) { + var labelSegment = _this._labelSegments[i]; + var clickHandler = labelSegment._clickHandler; + var clickParam = labelSegment._clickParam; + if (clickHandler && _this._containsTouchLocation(labelSegment, event.touch.getLocation())) { + components.forEach((function(component) { + component.enabledInHierarchy && component[clickHandler] && component[clickHandler](event, clickParam); + })); + event.stopPropagation(); + } + }; + for (var i = 0; i < this._labelSegments.length; ++i) _loop(i); + }, + _containsTouchLocation: function _containsTouchLocation(label, point) { + var myRect = label.getBoundingBoxToWorld(); + return myRect.contains(point); + }, + _resetState: function _resetState() { + var children = this.node.children; + for (var i = children.length - 1; i >= 0; i--) { + var child = children[i]; + if (child.name === RichTextChildName || child.name === RichTextChildImageName) { + child.parent === this.node ? child.parent = null : children.splice(i, 1); + child.name === RichTextChildName && pool.put(child); + } + } + this._labelSegments.length = 0; + this._labelSegmentsCache.length = 0; + this._linesWidth.length = 0; + this._lineOffsetX = 0; + this._lineCount = 1; + this._labelWidth = 0; + this._labelHeight = 0; + this._layoutDirty = true; + }, + onRestore: false, + _activateChildren: function _activateChildren(active) { + for (var i = this.node.children.length - 1; i >= 0; i--) { + var child = this.node.children[i]; + child.name !== RichTextChildName && child.name !== RichTextChildImageName || (child.active = active); + } + }, + _addLabelSegment: function _addLabelSegment(stringToken, styleIndex) { + var labelSegment; + labelSegment = 0 === this._labelSegmentsCache.length ? this._createFontLabel(stringToken) : this._labelSegmentsCache.pop(); + labelSegment._styleIndex = styleIndex; + labelSegment._lineCount = this._lineCount; + labelSegment.active = this.node.active; + labelSegment.setAnchorPoint(0, 0); + this._applyTextAttribute(labelSegment, stringToken); + this.node.addChild(labelSegment); + this._labelSegments.push(labelSegment); + return labelSegment; + }, + _updateRichTextWithMaxWidth: function _updateRichTextWithMaxWidth(labelString, labelWidth, styleIndex) { + var fragmentWidth = labelWidth; + var labelSegment; + if (this._lineOffsetX > 0 && fragmentWidth + this._lineOffsetX > this.maxWidth) { + var checkStartIndex = 0; + while (this._lineOffsetX <= this.maxWidth) { + var checkEndIndex = this._getFirstWordLen(labelString, checkStartIndex, labelString.length); + var checkString = labelString.substr(checkStartIndex, checkEndIndex); + var checkStringWidth = this._measureText(styleIndex, checkString); + if (!(this._lineOffsetX + checkStringWidth <= this.maxWidth)) { + if (checkStartIndex > 0) { + var remainingString = labelString.substr(0, checkStartIndex); + this._addLabelSegment(remainingString, styleIndex); + labelString = labelString.substr(checkStartIndex, labelString.length); + fragmentWidth = this._measureText(styleIndex, labelString); + } + this._updateLineInfo(); + break; + } + this._lineOffsetX += checkStringWidth; + checkStartIndex += checkEndIndex; + } + } + if (fragmentWidth > this.maxWidth) { + var fragments = textUtils.fragmentText(labelString, fragmentWidth, this.maxWidth, this._measureText(styleIndex)); + for (var k = 0; k < fragments.length; ++k) { + var splitString = fragments[k]; + labelSegment = this._addLabelSegment(splitString, styleIndex); + var labelSize = labelSegment.getContentSize(); + this._lineOffsetX += labelSize.width; + fragments.length > 1 && k < fragments.length - 1 && this._updateLineInfo(); + } + } else { + this._lineOffsetX += fragmentWidth; + this._addLabelSegment(labelString, styleIndex); + } + }, + _isLastComponentCR: function _isLastComponentCR(stringToken) { + return stringToken.length - 1 === stringToken.lastIndexOf("\n"); + }, + _updateLineInfo: function _updateLineInfo() { + this._linesWidth.push(this._lineOffsetX); + this._lineOffsetX = 0; + this._lineCount++; + }, + _needsUpdateTextLayout: function _needsUpdateTextLayout(newTextArray) { + if (this._layoutDirty || !this._textArray || !newTextArray) return true; + if (this._textArray.length !== newTextArray.length) return true; + for (var i = 0; i < this._textArray.length; ++i) { + var oldItem = this._textArray[i]; + var newItem = newTextArray[i]; + if (oldItem.text !== newItem.text) return true; + var oldStyle = oldItem.style, newStyle = newItem.style; + if (oldStyle) { + if (newStyle) { + if (!oldStyle.outline !== !newStyle.outline) return true; + if (oldStyle.size !== newStyle.size || !oldStyle.italic !== !newStyle.italic || oldStyle.isImage !== newStyle.isImage) return true; + if (oldStyle.src !== newStyle.src || oldStyle.imageAlign !== newStyle.imageAlign || oldStyle.imageHeight !== newStyle.imageHeight || oldStyle.imageWidth !== newStyle.imageWidth || oldStyle.imageOffset !== newStyle.imageOffset) return true; + } else if (oldStyle.size || oldStyle.italic || oldStyle.isImage || oldStyle.outline) return true; + } else if (newStyle && (newStyle.size || newStyle.italic || newStyle.isImage || newStyle.outline)) return true; + } + return false; + }, + _addRichTextImageElement: function _addRichTextImageElement(richTextElement) { + var spriteFrameName = richTextElement.style.src; + var spriteFrame = this.imageAtlas.getSpriteFrame(spriteFrameName); + if (spriteFrame) { + var spriteNode = new cc.PrivateNode(RichTextChildImageName); + var spriteComponent = spriteNode.addComponent(cc.Sprite); + spriteComponent.autoSwitchMaterial = this.autoSwitchMaterial; + spriteComponent.allowDynamicAtlas = this.allowDynamicAtlas; + this.customMaterial && (0 === spriteComponent._materials.length ? spriteComponent._materials[0] = _materialVariant["default"].create(this.customMaterial, spriteComponent) : spriteComponent._materials[0].material !== this.customMaterial && spriteComponent.setMaterial(0, this.customMaterial)); + switch (richTextElement.style.imageAlign) { + case "top": + spriteNode.setAnchorPoint(0, 1); + break; + + case "center": + spriteNode.setAnchorPoint(0, .5); + break; + + default: + spriteNode.setAnchorPoint(0, 0); + } + richTextElement.style.imageOffset && (spriteNode._imageOffset = richTextElement.style.imageOffset); + spriteComponent.type = cc.Sprite.Type.SLICED; + spriteComponent.sizeMode = cc.Sprite.SizeMode.CUSTOM; + this.node.addChild(spriteNode); + this._labelSegments.push(spriteNode); + var spriteRect = spriteFrame.getRect(); + var scaleFactor = 1; + var spriteWidth = spriteRect.width; + var spriteHeight = spriteRect.height; + var expectWidth = richTextElement.style.imageWidth; + var expectHeight = richTextElement.style.imageHeight; + if (expectHeight > 0) { + scaleFactor = expectHeight / spriteHeight; + spriteWidth *= scaleFactor; + spriteHeight *= scaleFactor; + } else { + scaleFactor = this.lineHeight / spriteHeight; + spriteWidth *= scaleFactor; + spriteHeight *= scaleFactor; + } + expectWidth > 0 && (spriteWidth = expectWidth); + if (this.maxWidth > 0) { + this._lineOffsetX + spriteWidth > this.maxWidth && this._updateLineInfo(); + this._lineOffsetX += spriteWidth; + } else { + this._lineOffsetX += spriteWidth; + this._lineOffsetX > this._labelWidth && (this._labelWidth = this._lineOffsetX); + } + spriteComponent.spriteFrame = spriteFrame; + spriteNode.setContentSize(spriteWidth, spriteHeight); + spriteNode._lineCount = this._lineCount; + if (richTextElement.style.event) { + richTextElement.style.event.click && (spriteNode._clickHandler = richTextElement.style.event.click); + richTextElement.style.event.param ? spriteNode._clickParam = richTextElement.style.event.param : spriteNode._clickParam = ""; + } else spriteNode._clickHandler = null; + } else cc.warnID(4400); + }, + _updateRichText: function _updateRichText() { + if (!this.enabledInHierarchy) return; + var newTextArray = _htmlTextParser.parse(this.string); + if (!this._needsUpdateTextLayout(newTextArray)) { + this._textArray = newTextArray; + this._updateLabelSegmentTextAttributes(); + return; + } + this._textArray = newTextArray; + this._resetState(); + var lastEmptyLine = false; + var label; + var labelSize; + for (var i = 0; i < this._textArray.length; ++i) { + var richTextElement = this._textArray[i]; + var text = richTextElement.text; + if ("" === text) { + if (richTextElement.style && richTextElement.style.newline) { + this._updateLineInfo(); + continue; + } + if (richTextElement.style && richTextElement.style.isImage && this.imageAtlas) { + this._addRichTextImageElement(richTextElement); + continue; + } + } + var multilineTexts = text.split("\n"); + for (var j = 0; j < multilineTexts.length; ++j) { + var labelString = multilineTexts[j]; + if ("" === labelString) { + if (this._isLastComponentCR(text) && j === multilineTexts.length - 1) continue; + this._updateLineInfo(); + lastEmptyLine = true; + continue; + } + lastEmptyLine = false; + if (this.maxWidth > 0) { + var labelWidth = this._measureText(i, labelString); + this._updateRichTextWithMaxWidth(labelString, labelWidth, i); + multilineTexts.length > 1 && j < multilineTexts.length - 1 && this._updateLineInfo(); + } else { + label = this._addLabelSegment(labelString, i); + labelSize = label.getContentSize(); + this._lineOffsetX += labelSize.width; + this._lineOffsetX > this._labelWidth && (this._labelWidth = this._lineOffsetX); + multilineTexts.length > 1 && j < multilineTexts.length - 1 && this._updateLineInfo(); + } + } + } + lastEmptyLine || this._linesWidth.push(this._lineOffsetX); + this.maxWidth > 0 && (this._labelWidth = this.maxWidth); + this._labelHeight = (this._lineCount + textUtils.BASELINE_RATIO) * this.lineHeight; + this.node.setContentSize(this._labelWidth, this._labelHeight); + this._updateRichTextPosition(); + this._layoutDirty = false; + }, + _getFirstWordLen: function _getFirstWordLen(text, startIndex, textLen) { + var character = text.charAt(startIndex); + if (textUtils.isUnicodeCJK(character) || textUtils.isUnicodeSpace(character)) return 1; + var len = 1; + for (var index = startIndex + 1; index < textLen; ++index) { + character = text.charAt(index); + if (textUtils.isUnicodeSpace(character) || textUtils.isUnicodeCJK(character)) break; + len++; + } + return len; + }, + _updateRichTextPosition: function _updateRichTextPosition() { + var nextTokenX = 0; + var nextLineIndex = 1; + var totalLineCount = this._lineCount; + for (var i = 0; i < this._labelSegments.length; ++i) { + var label = this._labelSegments[i]; + var lineCount = label._lineCount; + if (lineCount > nextLineIndex) { + nextTokenX = 0; + nextLineIndex = lineCount; + } + var lineOffsetX = 0; + switch (this.horizontalAlign) { + case HorizontalAlign.LEFT: + lineOffsetX = -this._labelWidth / 2; + break; + + case HorizontalAlign.CENTER: + lineOffsetX = -this._linesWidth[lineCount - 1] / 2; + break; + + case HorizontalAlign.RIGHT: + lineOffsetX = this._labelWidth / 2 - this._linesWidth[lineCount - 1]; + } + label.x = nextTokenX + lineOffsetX; + var labelSize = label.getContentSize(); + label.y = this.lineHeight * (totalLineCount - lineCount) - this._labelHeight / 2; + lineCount === nextLineIndex && (nextTokenX += labelSize.width); + var sprite = label.getComponent(cc.Sprite); + if (sprite) { + var lineHeightSet = this.lineHeight; + var lineHeightReal = this.lineHeight * (1 + textUtils.BASELINE_RATIO); + switch (label.anchorY) { + case 1: + label.y += lineHeightSet + (lineHeightReal - lineHeightSet) / 2; + break; + + case .5: + label.y += lineHeightReal / 2; + break; + + default: + label.y += (lineHeightReal - lineHeightSet) / 2; + } + if (label._imageOffset) { + var offsets = label._imageOffset.split(","); + if (1 === offsets.length && offsets[0]) { + var offsetY = parseFloat(offsets[0]); + Number.isInteger(offsetY) && (label.y += offsetY); + } else if (2 === offsets.length) { + var offsetX = parseFloat(offsets[0]); + var _offsetY = parseFloat(offsets[1]); + Number.isInteger(offsetX) && (label.x += offsetX); + Number.isInteger(_offsetY) && (label.y += _offsetY); + } + } + } + var outline = label.getComponent(cc.LabelOutline); + outline && outline.width && (label.y = label.y - outline.width); + } + }, + _convertLiteralColorValue: function _convertLiteralColorValue(color) { + var colorValue = color.toUpperCase(); + if (cc.Color[colorValue]) return cc.Color[colorValue]; + var out = cc.color(); + return out.fromHEX(color); + }, + _applyTextAttribute: function _applyTextAttribute(labelNode, string, force) { + var labelComponent = labelNode.getComponent(cc.Label); + if (!labelComponent) return; + var index = labelNode._styleIndex; + var textStyle = null; + this._textArray[index] && (textStyle = this._textArray[index].style); + textStyle && textStyle.color ? labelNode.color = this._convertLiteralColorValue(textStyle.color) : labelNode.color = this.node.color; + labelComponent.cacheMode = this.cacheMode; + labelComponent.autoSwitchMaterial = this.autoSwitchMaterial; + labelComponent.allowDynamicAtlas = this.allowDynamicAtlas; + labelComponent.enableRetina = this.enableRetina; + this.customMaterial && (0 === labelComponent._materials.length ? labelComponent._materials[0] = _materialVariant["default"].create(this.customMaterial, labelComponent) : labelComponent._materials[0].material !== this.customMaterial && labelComponent.setMaterial(0, this.customMaterial)); + var isAsset = this.font instanceof cc.Font; + isAsset && !this._isSystemFontUsed ? labelComponent.font = this.font : labelComponent.fontFamily = this.fontFamily; + labelComponent.useSystemFont = this._isSystemFontUsed; + labelComponent.lineHeight = this.lineHeight; + labelComponent.enableBold = textStyle && textStyle.bold; + labelComponent.enableItalics = textStyle && textStyle.italic; + textStyle && textStyle.italic && (labelNode.skewX = 12); + labelComponent.enableUnderline = textStyle && textStyle.underline; + if (textStyle && textStyle.outline) { + var labelOutlineComponent = labelNode.getComponent(cc.LabelOutline); + labelOutlineComponent || (labelOutlineComponent = labelNode.addComponent(cc.LabelOutline)); + labelOutlineComponent.color = this._convertLiteralColorValue(textStyle.outline.color); + labelOutlineComponent.width = textStyle.outline.width; + } + textStyle && textStyle.size ? labelComponent.fontSize = textStyle.size : labelComponent.fontSize = this.fontSize; + if (null !== string) { + "string" !== typeof string && (string = "" + string); + labelComponent.string = string; + } + force && labelComponent._forceUpdateRenderData(); + if (textStyle && textStyle.event) { + textStyle.event.click && (labelNode._clickHandler = textStyle.event.click); + textStyle.event.param ? labelNode._clickParam = textStyle.event.param : labelNode._clickParam = ""; + } else labelNode._clickHandler = null; + }, + onDestroy: function onDestroy() { + for (var i = 0; i < this._labelSegments.length; ++i) { + this._labelSegments[i].removeFromParent(); + pool.put(this._labelSegments[i]); + } + } + }); + cc.RichText = module.exports = RichText; + }), { + "../assets/material/material-variant": 82, + "../platform/CCMacro": 126, + "../platform/js": 142, + "../utils/html-text-parser": 203, + "../utils/text-utils": 212, + "./CCRenderComponent": 98 + } ], + 100: [ (function(require, module, exports) { + "use strict"; + var misc = require("../utils/misc"); + var Component = require("./CCComponent"); + var GETTINGSHORTERFACTOR = 20; + var Direction = cc.Enum({ + HORIZONTAL: 0, + VERTICAL: 1 + }); + var Scrollbar = cc.Class({ + name: "cc.Scrollbar", + extends: require("./CCComponent"), + editor: false, + properties: { + _scrollView: null, + _touching: false, + _autoHideRemainingTime: { + default: 0, + serializable: false + }, + _opacity: 255, + handle: { + default: null, + type: cc.Sprite, + tooltip: false, + notify: function notify() { + this._onScroll(cc.v2(0, 0)); + }, + animatable: false + }, + direction: { + default: Direction.HORIZONTAL, + type: Direction, + tooltip: false, + notify: function notify() { + this._onScroll(cc.v2(0, 0)); + }, + animatable: false + }, + enableAutoHide: { + default: true, + animatable: false, + tooltip: false + }, + autoHideTime: { + default: 1, + animatable: false, + tooltip: false + } + }, + statics: { + Direction: Direction + }, + setTargetScrollView: function setTargetScrollView(scrollView) { + this._scrollView = scrollView; + }, + _convertToScrollViewSpace: function _convertToScrollViewSpace(content) { + var scrollViewNode = this._scrollView.node; + var worldSpacePos = content.convertToWorldSpaceAR(cc.v2(-content.anchorX * content.width, -content.anchorY * content.height)); + var scrollViewSpacePos = scrollViewNode.convertToNodeSpaceAR(worldSpacePos); + scrollViewSpacePos.x += scrollViewNode.anchorX * scrollViewNode.width; + scrollViewSpacePos.y += scrollViewNode.anchorY * scrollViewNode.height; + return scrollViewSpacePos; + }, + _setOpacity: function _setOpacity(opacity) { + if (this.handle) { + this.node.opacity = opacity; + this.handle.node.opacity = opacity; + } + }, + _onScroll: function _onScroll(outOfBoundary) { + if (this._scrollView) { + var content = this._scrollView.content; + if (content) { + var contentSize = content.getContentSize(); + var scrollViewSize = this._scrollView.node.getContentSize(); + var handleNodeSize = this.node.getContentSize(); + if (this._conditionalDisableScrollBar(contentSize, scrollViewSize)) return; + if (this.enableAutoHide) { + this._autoHideRemainingTime = this.autoHideTime; + this._setOpacity(this._opacity); + } + var contentMeasure = 0; + var scrollViewMeasure = 0; + var outOfBoundaryValue = 0; + var contentPosition = 0; + var handleNodeMeasure = 0; + if (this.direction === Direction.HORIZONTAL) { + contentMeasure = contentSize.width; + scrollViewMeasure = scrollViewSize.width; + handleNodeMeasure = handleNodeSize.width; + outOfBoundaryValue = outOfBoundary.x; + contentPosition = -this._convertToScrollViewSpace(content).x; + } else if (this.direction === Direction.VERTICAL) { + contentMeasure = contentSize.height; + scrollViewMeasure = scrollViewSize.height; + handleNodeMeasure = handleNodeSize.height; + outOfBoundaryValue = outOfBoundary.y; + contentPosition = -this._convertToScrollViewSpace(content).y; + } + var length = this._calculateLength(contentMeasure, scrollViewMeasure, handleNodeMeasure, outOfBoundaryValue); + var position = this._calculatePosition(contentMeasure, scrollViewMeasure, handleNodeMeasure, contentPosition, outOfBoundaryValue, length); + this._updateLength(length); + this._updateHanlderPosition(position); + } + } + }, + _updateHanlderPosition: function _updateHanlderPosition(position) { + if (this.handle) { + var oldPosition = this._fixupHandlerPosition(); + this.handle.node.setPosition(position.x + oldPosition.x, position.y + oldPosition.y); + } + }, + _fixupHandlerPosition: function _fixupHandlerPosition() { + var barSize = this.node.getContentSize(); + var barAnchor = this.node.getAnchorPoint(); + var handleSize = this.handle.node.getContentSize(); + var handleParent = this.handle.node.parent; + var leftBottomWorldPosition = this.node.convertToWorldSpaceAR(cc.v2(-barSize.width * barAnchor.x, -barSize.height * barAnchor.y)); + var fixupPosition = handleParent.convertToNodeSpaceAR(leftBottomWorldPosition); + this.direction === Direction.HORIZONTAL ? fixupPosition = cc.v2(fixupPosition.x, fixupPosition.y + (barSize.height - handleSize.height) / 2) : this.direction === Direction.VERTICAL && (fixupPosition = cc.v2(fixupPosition.x + (barSize.width - handleSize.width) / 2, fixupPosition.y)); + this.handle.node.setPosition(fixupPosition); + return fixupPosition; + }, + _onTouchBegan: function _onTouchBegan() { + if (!this.enableAutoHide) return; + this._touching = true; + }, + _conditionalDisableScrollBar: function _conditionalDisableScrollBar(contentSize, scrollViewSize) { + if (contentSize.width <= scrollViewSize.width && this.direction === Direction.HORIZONTAL) return true; + if (contentSize.height <= scrollViewSize.height && this.direction === Direction.VERTICAL) return true; + return false; + }, + _onTouchEnded: function _onTouchEnded() { + if (!this.enableAutoHide) return; + this._touching = false; + if (this.autoHideTime <= 0) return; + if (this._scrollView) { + var content = this._scrollView.content; + if (content) { + var contentSize = content.getContentSize(); + var scrollViewSize = this._scrollView.node.getContentSize(); + if (this._conditionalDisableScrollBar(contentSize, scrollViewSize)) return; + } + } + this._autoHideRemainingTime = this.autoHideTime; + }, + _calculateLength: function _calculateLength(contentMeasure, scrollViewMeasure, handleNodeMeasure, outOfBoundary) { + var denominatorValue = contentMeasure; + outOfBoundary && (denominatorValue += (outOfBoundary > 0 ? outOfBoundary : -outOfBoundary) * GETTINGSHORTERFACTOR); + var lengthRation = scrollViewMeasure / denominatorValue; + return handleNodeMeasure * lengthRation; + }, + _calculatePosition: function _calculatePosition(contentMeasure, scrollViewMeasure, handleNodeMeasure, contentPosition, outOfBoundary, actualLenth) { + var denominatorValue = contentMeasure - scrollViewMeasure; + outOfBoundary && (denominatorValue += Math.abs(outOfBoundary)); + var positionRatio = 0; + if (denominatorValue) { + positionRatio = contentPosition / denominatorValue; + positionRatio = misc.clamp01(positionRatio); + } + var position = (handleNodeMeasure - actualLenth) * positionRatio; + return this.direction === Direction.VERTICAL ? cc.v2(0, position) : cc.v2(position, 0); + }, + _updateLength: function _updateLength(length) { + if (this.handle) { + var handleNode = this.handle.node; + var handleNodeSize = handleNode.getContentSize(); + handleNode.setAnchorPoint(cc.v2(0, 0)); + this.direction === Direction.HORIZONTAL ? handleNode.setContentSize(length, handleNodeSize.height) : handleNode.setContentSize(handleNodeSize.width, length); + } + }, + _processAutoHide: function _processAutoHide(deltaTime) { + if (!this.enableAutoHide || this._autoHideRemainingTime <= 0) return; + if (this._touching) return; + this._autoHideRemainingTime -= deltaTime; + if (this._autoHideRemainingTime <= this.autoHideTime) { + this._autoHideRemainingTime = Math.max(0, this._autoHideRemainingTime); + var opacity = this._opacity * (this._autoHideRemainingTime / this.autoHideTime); + this._setOpacity(opacity); + } + }, + start: function start() { + this.enableAutoHide && this._setOpacity(0); + }, + hide: function hide() { + this._autoHideRemainingTime = 0; + this._setOpacity(0); + }, + show: function show() { + this._autoHideRemainingTime = this.autoHideTime; + this._setOpacity(this._opacity); + }, + update: function update(dt) { + this._processAutoHide(dt); + } + }); + cc.Scrollbar = module.exports = Scrollbar; + }), { + "../utils/misc": 205, + "./CCComponent": 91 + } ], + 101: [ (function(require, module, exports) { + "use strict"; + var misc = require("../utils/misc"); + var NodeEvent = require("../CCNode").EventType; + var RenderComponent = require("./CCRenderComponent"); + var BlendFunc = require("../utils/blend-func"); + var SpriteType = cc.Enum({ + SIMPLE: 0, + SLICED: 1, + TILED: 2, + FILLED: 3, + MESH: 4 + }); + var FillType = cc.Enum({ + HORIZONTAL: 0, + VERTICAL: 1, + RADIAL: 2 + }); + var SizeMode = cc.Enum({ + CUSTOM: 0, + TRIMMED: 1, + RAW: 2 + }); + var State = cc.Enum({ + NORMAL: 0, + GRAY: 1 + }); + var Sprite = cc.Class({ + name: "cc.Sprite", + extends: RenderComponent, + mixins: [ BlendFunc ], + editor: false, + properties: { + _spriteFrame: { + default: null, + type: cc.SpriteFrame + }, + _type: SpriteType.SIMPLE, + _sizeMode: SizeMode.TRIMMED, + _fillType: 0, + _fillCenter: cc.v2(0, 0), + _fillStart: 0, + _fillRange: 0, + _isTrimmedMode: true, + _atlas: { + default: null, + type: cc.SpriteAtlas, + tooltip: false, + editorOnly: true, + visible: true, + animatable: false + }, + spriteFrame: { + get: function get() { + return this._spriteFrame; + }, + set: function set(value, force) { + var lastSprite = this._spriteFrame; + false; + if (lastSprite === value) return; + this._spriteFrame = value; + this._applySpriteFrame(lastSprite); + false; + }, + type: cc.SpriteFrame + }, + type: { + get: function get() { + return this._type; + }, + set: function set(value) { + if (this._type !== value) { + this._type = value; + this.setVertsDirty(); + this._resetAssembler(); + } + }, + type: SpriteType, + animatable: false, + tooltip: false + }, + fillType: { + get: function get() { + return this._fillType; + }, + set: function set(value) { + if (value !== this._fillType) { + this._fillType = value; + this.setVertsDirty(); + this._resetAssembler(); + } + }, + type: FillType, + tooltip: false + }, + fillCenter: { + get: function get() { + return this._fillCenter; + }, + set: function set(value) { + this._fillCenter.x = value.x; + this._fillCenter.y = value.y; + this._type === SpriteType.FILLED && this.setVertsDirty(); + }, + tooltip: false + }, + fillStart: { + get: function get() { + return this._fillStart; + }, + set: function set(value) { + this._fillStart = misc.clampf(value, -1, 1); + this._type === SpriteType.FILLED && this.setVertsDirty(); + }, + tooltip: false + }, + fillRange: { + get: function get() { + return this._fillRange; + }, + set: function set(value) { + this._fillRange = misc.clampf(value, -1, 1); + this._type === SpriteType.FILLED && this.setVertsDirty(); + }, + tooltip: false + }, + trim: { + get: function get() { + return this._isTrimmedMode; + }, + set: function set(value) { + if (this._isTrimmedMode !== value) { + this._isTrimmedMode = value; + this._type !== SpriteType.SIMPLE && this._type !== SpriteType.MESH || this.setVertsDirty(); + } + }, + animatable: false, + tooltip: false + }, + sizeMode: { + get: function get() { + return this._sizeMode; + }, + set: function set(value) { + this._sizeMode = value; + value !== SizeMode.CUSTOM && this._applySpriteSize(); + }, + animatable: false, + type: SizeMode, + tooltip: false + }, + autoSwitchMaterial: { + type: RenderComponent.EnableType, + default: RenderComponent.EnableType.GLOBAL, + notify: function notify(oldValue) { + if (this.autoSwitchMaterial === oldValue) return; + this.setVertsDirty(); + } + }, + allowDynamicAtlas: { + type: RenderComponent.EnableType, + default: RenderComponent.EnableType.GLOBAL, + notify: function notify(oldValue) { + if (this.allowDynamicAtlas === oldValue) return; + this.setVertsDirty(); + } + } + }, + statics: { + FillType: FillType, + Type: SpriteType, + SizeMode: SizeMode, + State: State + }, + setVisible: function setVisible(visible) { + this.enabled = visible; + }, + setState: function setState() {}, + getState: function getState() {}, + __preload: function __preload() { + this._super(); + false; + this._applySpriteFrame(); + }, + onEnable: function onEnable() { + this._super(); + this._spriteFrame && this._spriteFrame.ensureLoadTexture(); + this.node.on(cc.Node.EventType.SIZE_CHANGED, this.setVertsDirty, this); + this.node.on(cc.Node.EventType.ANCHOR_CHANGED, this.setVertsDirty, this); + }, + onDisable: function onDisable() { + this._super(); + this.node.off(cc.Node.EventType.SIZE_CHANGED, this.setVertsDirty, this); + this.node.off(cc.Node.EventType.ANCHOR_CHANGED, this.setVertsDirty, this); + }, + _updateMaterial: function _updateMaterial() { + var texture = null; + this._spriteFrame && (texture = this._spriteFrame.getTexture()); + var material = this.getMaterial(0); + if (material) { + void 0 !== material.getDefine("USE_TEXTURE") && material.define("USE_TEXTURE", true); + var isMultiMaterial = material.material.isMultiSupport(); + isMultiMaterial ? this._texIdDirty = true : material.getProperty("texture") !== texture && material.setProperty("texture", texture); + this._assembler && (isMultiMaterial && !this._assembler.isMulti || !isMultiMaterial && this._assembler.isMulti) && this._resetAssembler(); + } + BlendFunc.prototype._updateMaterial.call(this); + }, + _applyAtlas: false, + _validateRender: function _validateRender() { + var spriteFrame = this._spriteFrame; + if (this._materials[0] && spriteFrame && spriteFrame.textureLoaded()) return; + this.disableRender(); + }, + _applySpriteSize: function _applySpriteSize() { + if (!this._spriteFrame || !this.isValid) return; + if (SizeMode.RAW === this._sizeMode) { + var size = this._spriteFrame._originalSize; + this.node.setContentSize(size); + } else if (SizeMode.TRIMMED === this._sizeMode) { + var rect = this._spriteFrame._rect; + this.node.setContentSize(rect.width, rect.height); + } + this.setVertsDirty(); + }, + _applySpriteFrame: function _applySpriteFrame(oldFrame) { + if (!this.isValid) return; + var oldTexture = oldFrame && oldFrame.getTexture(); + oldTexture && !oldTexture.loaded && oldFrame.off("load", this._applySpriteSize, this); + this._updateMaterial(); + var spriteFrame = this._spriteFrame; + if (spriteFrame) { + var newTexture = spriteFrame.getTexture(); + if (newTexture && newTexture.loaded) this._applySpriteSize(); else { + this.disableRender(); + spriteFrame.once("load", this._applySpriteSize, this); + } + } else this.disableRender(); + false; + } + }); + false; + cc.Sprite = module.exports = Sprite; + }), { + "../CCNode": 24, + "../utils/blend-func": 199, + "../utils/misc": 205, + "./CCRenderComponent": 98 + } ], + 102: [ (function(require, module, exports) { + "use strict"; + var GraySpriteState = require("../utils/gray-sprite-state"); + var Toggle = cc.Class({ + name: "cc.Toggle", + extends: require("./CCButton"), + mixins: [ GraySpriteState ], + editor: false, + properties: { + _N$isChecked: true, + isChecked: { + get: function get() { + return this._N$isChecked; + }, + set: function set(value) { + if (value === this._N$isChecked) return; + var group = this.toggleGroup || this._toggleContainer; + if (group && group.enabled && this._N$isChecked && !group.allowSwitchOff) return; + this._N$isChecked = value; + this._updateCheckMark(); + group && group.enabled && group.updateToggles(this); + cc.Toggle._triggerEventInScript_isChecked && this._emitToggleEvents(); + }, + tooltip: false + }, + toggleGroup: { + default: null, + tooltip: false, + type: require("./CCToggleGroup") + }, + checkMark: { + default: null, + type: cc.Sprite, + tooltip: false + }, + checkEvents: { + default: [], + type: cc.Component.EventHandler + }, + _resizeToTarget: { + animatable: false, + set: function set(value) { + value && this._resizeNodeToTargetNode(); + } + } + }, + statics: { + _triggerEventInScript_check: false, + _triggerEventInScript_isChecked: false + }, + onEnable: function onEnable() { + this._super(); + true; + this._registerToggleEvent(); + this.toggleGroup && this.toggleGroup.enabledInHierarchy && this.toggleGroup.addToggle(this); + }, + onDisable: function onDisable() { + this._super(); + true; + this._unregisterToggleEvent(); + this.toggleGroup && this.toggleGroup.enabledInHierarchy && this.toggleGroup.removeToggle(this); + }, + _hideCheckMark: function _hideCheckMark() { + this._N$isChecked = false; + this._updateCheckMark(); + }, + toggle: function toggle(event) { + this.isChecked = !this.isChecked; + cc.Toggle._triggerEventInScript_isChecked || !cc.Toggle._triggerEventInScript_check && !event || this._emitToggleEvents(); + }, + check: function check() { + this.isChecked = true; + !cc.Toggle._triggerEventInScript_isChecked && cc.Toggle._triggerEventInScript_check && this._emitToggleEvents(); + }, + uncheck: function uncheck() { + this.isChecked = false; + !cc.Toggle._triggerEventInScript_isChecked && cc.Toggle._triggerEventInScript_check && this._emitToggleEvents(); + }, + _updateCheckMark: function _updateCheckMark() { + this.checkMark && (this.checkMark.node.active = !!this.isChecked); + }, + _updateDisabledState: function _updateDisabledState() { + this._super(); + if (this.enableAutoGrayEffect && this.checkMark) { + var useGrayMaterial = !this.interactable; + this._switchGrayMaterial(useGrayMaterial, this.checkMark); + } + }, + _registerToggleEvent: function _registerToggleEvent() { + this.node.on("click", this.toggle, this); + }, + _unregisterToggleEvent: function _unregisterToggleEvent() { + this.node.off("click", this.toggle, this); + }, + _emitToggleEvents: function _emitToggleEvents() { + this.node.emit("toggle", this); + this.checkEvents && cc.Component.EventHandler.emitEvents(this.checkEvents, this); + } + }); + cc.Toggle = module.exports = Toggle; + var js = require("../platform/js"); + js.get(Toggle.prototype, "_toggleContainer", (function() { + var parent = this.node.parent; + if (cc.Node.isNode(parent)) return parent.getComponent(cc.ToggleContainer); + return null; + })); + }), { + "../platform/js": 142, + "../utils/gray-sprite-state": 202, + "./CCButton": 89, + "./CCToggleGroup": 104 + } ], + 103: [ (function(require, module, exports) { + "use strict"; + var ToggleContainer = cc.Class({ + name: "cc.ToggleContainer", + extends: cc.Component, + editor: false, + properties: { + allowSwitchOff: { + tooltip: false, + default: false + }, + checkEvents: { + default: [], + type: cc.Component.EventHandler + } + }, + updateToggles: function updateToggles(toggle) { + if (!this.enabledInHierarchy) return; + if (toggle.isChecked) { + this.toggleItems.forEach((function(item) { + item !== toggle && item.isChecked && item.enabled && item._hideCheckMark(); + })); + this.checkEvents && cc.Component.EventHandler.emitEvents(this.checkEvents, toggle); + } + }, + _allowOnlyOneToggleChecked: function _allowOnlyOneToggleChecked() { + var isChecked = false; + this.toggleItems.forEach((function(item) { + isChecked ? item._hideCheckMark() : item.isChecked && (isChecked = true); + })); + return isChecked; + }, + _makeAtLeastOneToggleChecked: function _makeAtLeastOneToggleChecked() { + var isChecked = this._allowOnlyOneToggleChecked(); + if (!isChecked && !this.allowSwitchOff) { + var toggleItems = this.toggleItems; + toggleItems.length > 0 && toggleItems[0].check(); + } + }, + onEnable: function onEnable() { + this._makeAtLeastOneToggleChecked(); + this.node.on("child-added", this._allowOnlyOneToggleChecked, this); + this.node.on("child-removed", this._makeAtLeastOneToggleChecked, this); + }, + onDisable: function onDisable() { + this.node.off("child-added", this._allowOnlyOneToggleChecked, this); + this.node.off("child-removed", this._makeAtLeastOneToggleChecked, this); + } + }); + var js = require("../platform/js"); + js.get(ToggleContainer.prototype, "toggleItems", (function() { + return this.node._children.map((function(item) { + return item.getComponent(cc.Toggle); + })).filter(Boolean); + })); + cc.ToggleContainer = module.exports = ToggleContainer; + }), { + "../platform/js": 142 + } ], + 104: [ (function(require, module, exports) { + "use strict"; + var ToggleGroup = cc.Class({ + name: "cc.ToggleGroup", + extends: cc.Component, + ctor: function ctor() { + this._toggleItems = []; + }, + editor: false, + properties: { + allowSwitchOff: { + tooltip: false, + default: false + }, + toggleItems: { + get: function get() { + return this._toggleItems; + } + } + }, + updateToggles: function updateToggles(toggle) { + if (!this.enabledInHierarchy) return; + this._toggleItems.forEach((function(item) { + toggle.isChecked && item !== toggle && item.isChecked && item.enabled && item._hideCheckMark(); + })); + }, + addToggle: function addToggle(toggle) { + var index = this._toggleItems.indexOf(toggle); + -1 === index && this._toggleItems.push(toggle); + this._allowOnlyOneToggleChecked(); + }, + removeToggle: function removeToggle(toggle) { + var index = this._toggleItems.indexOf(toggle); + index > -1 && this._toggleItems.splice(index, 1); + this._makeAtLeastOneToggleChecked(); + }, + _allowOnlyOneToggleChecked: function _allowOnlyOneToggleChecked() { + var isChecked = false; + this._toggleItems.forEach((function(item) { + isChecked && item.enabled && item._hideCheckMark(); + item.isChecked && item.enabled && (isChecked = true); + })); + return isChecked; + }, + _makeAtLeastOneToggleChecked: function _makeAtLeastOneToggleChecked() { + var isChecked = this._allowOnlyOneToggleChecked(); + isChecked || this.allowSwitchOff || this._toggleItems.length > 0 && (this._toggleItems[0].isChecked = true); + }, + start: function start() { + this._makeAtLeastOneToggleChecked(); + } + }); + var js = require("../platform/js"); + var showed = false; + js.get(cc, "ToggleGroup", (function() { + if (!showed) { + cc.errorID(1405, "cc.ToggleGroup", "cc.ToggleContainer"); + showed = true; + } + return ToggleGroup; + })); + module.exports = ToggleGroup; + }), { + "../platform/js": 142 + } ], + 105: [ (function(require, module, exports) { + "use strict"; + var WidgetManager = require("../base-ui/CCWidgetManager"); + var AlignMode = WidgetManager.AlignMode; + var AlignFlags = WidgetManager._AlignFlags; + var TOP = AlignFlags.TOP; + var MID = AlignFlags.MID; + var BOT = AlignFlags.BOT; + var LEFT = AlignFlags.LEFT; + var CENTER = AlignFlags.CENTER; + var RIGHT = AlignFlags.RIGHT; + var TOP_BOT = TOP | BOT; + var LEFT_RIGHT = LEFT | RIGHT; + var Widget = cc.Class({ + name: "cc.Widget", + extends: require("./CCComponent"), + editor: false, + properties: { + target: { + get: function get() { + return this._target; + }, + set: function set(value) { + this._target = value; + false; + }, + type: cc.Node, + tooltip: false + }, + isAlignTop: { + get: function get() { + return (this._alignFlags & TOP) > 0; + }, + set: function set(value) { + this._setAlign(TOP, value); + }, + animatable: false, + tooltip: false + }, + isAlignVerticalCenter: { + get: function get() { + return (this._alignFlags & MID) > 0; + }, + set: function set(value) { + if (value) { + this.isAlignTop = false; + this.isAlignBottom = false; + this._alignFlags |= MID; + } else this._alignFlags &= ~MID; + }, + animatable: false, + tooltip: false + }, + isAlignBottom: { + get: function get() { + return (this._alignFlags & BOT) > 0; + }, + set: function set(value) { + this._setAlign(BOT, value); + }, + animatable: false, + tooltip: false + }, + isAlignLeft: { + get: function get() { + return (this._alignFlags & LEFT) > 0; + }, + set: function set(value) { + this._setAlign(LEFT, value); + }, + animatable: false, + tooltip: false + }, + isAlignHorizontalCenter: { + get: function get() { + return (this._alignFlags & CENTER) > 0; + }, + set: function set(value) { + if (value) { + this.isAlignLeft = false; + this.isAlignRight = false; + this._alignFlags |= CENTER; + } else this._alignFlags &= ~CENTER; + }, + animatable: false, + tooltip: false + }, + isAlignRight: { + get: function get() { + return (this._alignFlags & RIGHT) > 0; + }, + set: function set(value) { + this._setAlign(RIGHT, value); + }, + animatable: false, + tooltip: false + }, + isStretchWidth: { + get: function get() { + return (this._alignFlags & LEFT_RIGHT) === LEFT_RIGHT; + }, + visible: false + }, + isStretchHeight: { + get: function get() { + return (this._alignFlags & TOP_BOT) === TOP_BOT; + }, + visible: false + }, + top: { + get: function get() { + return this._top; + }, + set: function set(value) { + this._top = value; + }, + tooltip: false + }, + bottom: { + get: function get() { + return this._bottom; + }, + set: function set(value) { + this._bottom = value; + }, + tooltip: false + }, + left: { + get: function get() { + return this._left; + }, + set: function set(value) { + this._left = value; + }, + tooltip: false + }, + right: { + get: function get() { + return this._right; + }, + set: function set(value) { + this._right = value; + }, + tooltip: false + }, + horizontalCenter: { + get: function get() { + return this._horizontalCenter; + }, + set: function set(value) { + this._horizontalCenter = value; + }, + tooltip: false + }, + verticalCenter: { + get: function get() { + return this._verticalCenter; + }, + set: function set(value) { + this._verticalCenter = value; + }, + tooltip: false + }, + isAbsoluteHorizontalCenter: { + get: function get() { + return this._isAbsHorizontalCenter; + }, + set: function set(value) { + this._isAbsHorizontalCenter = value; + }, + animatable: false + }, + isAbsoluteVerticalCenter: { + get: function get() { + return this._isAbsVerticalCenter; + }, + set: function set(value) { + this._isAbsVerticalCenter = value; + }, + animatable: false + }, + isAbsoluteTop: { + get: function get() { + return this._isAbsTop; + }, + set: function set(value) { + this._isAbsTop = value; + }, + animatable: false + }, + isAbsoluteBottom: { + get: function get() { + return this._isAbsBottom; + }, + set: function set(value) { + this._isAbsBottom = value; + }, + animatable: false + }, + isAbsoluteLeft: { + get: function get() { + return this._isAbsLeft; + }, + set: function set(value) { + this._isAbsLeft = value; + }, + animatable: false + }, + isAbsoluteRight: { + get: function get() { + return this._isAbsRight; + }, + set: function set(value) { + this._isAbsRight = value; + }, + animatable: false + }, + alignMode: { + default: AlignMode.ON_WINDOW_RESIZE, + type: AlignMode, + tooltip: false + }, + _wasAlignOnce: { + default: void 0, + formerlySerializedAs: "isAlignOnce" + }, + _target: null, + _alignFlags: 0, + _left: 0, + _right: 0, + _top: 0, + _bottom: 0, + _verticalCenter: 0, + _horizontalCenter: 0, + _isAbsLeft: true, + _isAbsRight: true, + _isAbsTop: true, + _isAbsBottom: true, + _isAbsHorizontalCenter: true, + _isAbsVerticalCenter: true, + _originalWidth: 0, + _originalHeight: 0 + }, + statics: { + AlignMode: AlignMode + }, + onLoad: function onLoad() { + if (void 0 !== this._wasAlignOnce) { + this.alignMode = this._wasAlignOnce ? AlignMode.ONCE : AlignMode.ALWAYS; + this._wasAlignOnce = void 0; + } + }, + onEnable: function onEnable() { + WidgetManager.add(this); + }, + onDisable: function onDisable() { + WidgetManager.remove(this); + }, + _validateTargetInDEV: false, + _setAlign: function _setAlign(flag, isAlign) { + var current = (this._alignFlags & flag) > 0; + if (isAlign === current) return; + var isHorizontal = (flag & LEFT_RIGHT) > 0; + if (isAlign) { + this._alignFlags |= flag; + if (isHorizontal) { + this.isAlignHorizontalCenter = false; + if (this.isStretchWidth) { + this._originalWidth = this.node.width; + false; + } + } else { + this.isAlignVerticalCenter = false; + if (this.isStretchHeight) { + this._originalHeight = this.node.height; + false; + } + } + false; + } else { + isHorizontal ? this.isStretchWidth && (this.node.width = this._originalWidth) : this.isStretchHeight && (this.node.height = this._originalHeight); + this._alignFlags &= ~flag; + } + }, + updateAlignment: function updateAlignment() { + WidgetManager.updateAlignment(this.node); + } + }); + Object.defineProperty(Widget.prototype, "isAlignOnce", { + get: function get() { + true; + cc.warn("`widget.isAlignOnce` is deprecated, use `widget.alignMode === cc.Widget.AlignMode.ONCE` instead please."); + return this.alignMode === AlignMode.ONCE; + }, + set: function set(value) { + true; + cc.warn("`widget.isAlignOnce` is deprecated, use `widget.alignMode = cc.Widget.AlignMode.*` instead please."); + this.alignMode = value ? AlignMode.ONCE : AlignMode.ALWAYS; + } + }); + cc.Widget = module.exports = Widget; + }), { + "../base-ui/CCWidgetManager": 84, + "./CCComponent": 91 + } ], + 106: [ (function(require, module, exports) { + "use strict"; + require("./CCComponent"); + require("./CCComponentEventHandler"); + require("./missing-script"); + var SubContextView = require("./SubContextView"); + if (!SubContextView) { + SubContextView = cc.Class({ + name: "cc.SubContextView", + extends: cc.Component + }); + cc.SubContextView = cc.WXSubContextView = cc.SwanSubContextView = SubContextView; + } + var components = [ require("./CCSprite"), require("./CCWidget"), require("./CCCanvas"), require("./CCAudioSource"), require("./CCAnimation"), require("./CCButton"), require("./CCLabel"), require("./CCProgressBar"), require("./CCMask"), require("./CCScrollBar"), require("./CCScrollView"), require("./CCPageViewIndicator"), require("./CCPageView"), require("./CCSlider"), require("./CCLayout"), require("./editbox/CCEditBox"), require("./CCLabelOutline"), require("./CCLabelShadow"), require("./CCRichText"), require("./CCToggleContainer"), require("./CCToggleGroup"), require("./CCToggle"), require("./CCBlockInputEvents"), require("./CCMotionStreak"), require("./CCSafeArea"), SubContextView ]; + module.exports = components; + }), { + "./CCAnimation": 87, + "./CCAudioSource": void 0, + "./CCBlockInputEvents": 88, + "./CCButton": 89, + "./CCCanvas": 90, + "./CCComponent": 91, + "./CCComponentEventHandler": 92, + "./CCLabel": 93, + "./CCLabelOutline": 94, + "./CCLabelShadow": 95, + "./CCLayout": 96, + "./CCMask": void 0, + "./CCMotionStreak": 97, + "./CCPageView": void 0, + "./CCPageViewIndicator": void 0, + "./CCProgressBar": void 0, + "./CCRichText": 99, + "./CCSafeArea": void 0, + "./CCScrollBar": 100, + "./CCScrollView": void 0, + "./CCSlider": void 0, + "./CCSprite": 101, + "./CCToggle": 102, + "./CCToggleContainer": 103, + "./CCToggleGroup": 104, + "./CCWidget": 105, + "./SubContextView": void 0, + "./editbox/CCEditBox": void 0, + "./missing-script": 107 + } ], + 107: [ (function(require, module, exports) { + "use strict"; + var js = cc.js; + var MissingScript = cc.Class({ + name: "cc.MissingScript", + extends: cc.Component, + editor: { + inspector: "packages://inspector/inspectors/comps/missing-script.js" + }, + properties: { + compiled: { + default: false, + serializable: false + }, + _$erialized: { + default: null, + visible: false, + editorOnly: true + } + }, + ctor: false, + statics: { + safeFindClass: function safeFindClass(id) { + var cls = js._getClassById(id); + if (cls) return cls; + cc.deserialize.reportMissingClass(id); + return MissingScript; + } + }, + onLoad: function onLoad() { + cc.warnID(4600, this.node.name); + } + }); + cc._MissingScript = module.exports = MissingScript; + }), {} ], + 108: [ (function(require, module, exports) { + "use strict"; + var js = cc.js; + require("../event/event"); + var EventMouse = function EventMouse(eventType, bubbles) { + cc.Event.call(this, cc.Event.MOUSE, bubbles); + this._eventType = eventType; + this._button = 0; + this._x = 0; + this._y = 0; + this._prevX = 0; + this._prevY = 0; + this._scrollX = 0; + this._scrollY = 0; + }; + js.extend(EventMouse, cc.Event); + var proto = EventMouse.prototype; + proto.setScrollData = function(scrollX, scrollY) { + this._scrollX = scrollX; + this._scrollY = scrollY; + }; + proto.getScrollX = function() { + return this._scrollX; + }; + proto.getScrollY = function() { + return this._scrollY; + }; + proto.setLocation = function(x, y) { + this._x = x; + this._y = y; + }; + proto.getLocation = function() { + return cc.v2(this._x, this._y); + }; + proto.getLocationInView = function() { + return cc.v2(this._x, cc.view._designResolutionSize.height - this._y); + }; + proto._setPrevCursor = function(x, y) { + this._prevX = x; + this._prevY = y; + }; + proto.getPreviousLocation = function() { + return cc.v2(this._prevX, this._prevY); + }; + proto.getDelta = function() { + return cc.v2(this._x - this._prevX, this._y - this._prevY); + }; + proto.getDeltaX = function() { + return this._x - this._prevX; + }; + proto.getDeltaY = function() { + return this._y - this._prevY; + }; + proto.setButton = function(button) { + this._button = button; + }; + proto.getButton = function() { + return this._button; + }; + proto.getLocationX = function() { + return this._x; + }; + proto.getLocationY = function() { + return this._y; + }; + EventMouse.NONE = 0; + EventMouse.DOWN = 1; + EventMouse.UP = 2; + EventMouse.MOVE = 3; + EventMouse.SCROLL = 4; + EventMouse.BUTTON_LEFT = 0; + EventMouse.BUTTON_RIGHT = 2; + EventMouse.BUTTON_MIDDLE = 1; + EventMouse.BUTTON_4 = 3; + EventMouse.BUTTON_5 = 4; + EventMouse.BUTTON_6 = 5; + EventMouse.BUTTON_7 = 6; + EventMouse.BUTTON_8 = 7; + var EventTouch = function EventTouch(touchArr, bubbles) { + cc.Event.call(this, cc.Event.TOUCH, bubbles); + this._eventCode = 0; + this._touches = touchArr || []; + this.touch = null; + this.currentTouch = null; + }; + js.extend(EventTouch, cc.Event); + proto = EventTouch.prototype; + proto.getEventCode = function() { + return this._eventCode; + }; + proto.getTouches = function() { + return this._touches; + }; + proto._setEventCode = function(eventCode) { + this._eventCode = eventCode; + }; + proto._setTouches = function(touches) { + this._touches = touches; + }; + proto.setLocation = function(x, y) { + this.touch && this.touch.setTouchInfo(this.touch.getID(), x, y); + }; + proto.getLocation = function() { + return this.touch ? this.touch.getLocation() : cc.v2(); + }; + proto.getLocationInView = function() { + return this.touch ? this.touch.getLocationInView() : cc.v2(); + }; + proto.getPreviousLocation = function() { + return this.touch ? this.touch.getPreviousLocation() : cc.v2(); + }; + proto.getStartLocation = function() { + return this.touch ? this.touch.getStartLocation() : cc.v2(); + }; + proto.getID = function() { + return this.touch ? this.touch.getID() : null; + }; + proto.getDelta = function() { + return this.touch ? this.touch.getDelta() : cc.v2(); + }; + proto.getDeltaX = function() { + return this.touch ? this.touch.getDelta().x : 0; + }; + proto.getDeltaY = function() { + return this.touch ? this.touch.getDelta().y : 0; + }; + proto.getLocationX = function() { + return this.touch ? this.touch.getLocationX() : 0; + }; + proto.getLocationY = function() { + return this.touch ? this.touch.getLocationY() : 0; + }; + EventTouch.MAX_TOUCHES = 5; + EventTouch.BEGAN = 0; + EventTouch.MOVED = 1; + EventTouch.ENDED = 2; + EventTouch.CANCELED = 3; + var EventAcceleration = function EventAcceleration(acc, bubbles) { + cc.Event.call(this, cc.Event.ACCELERATION, bubbles); + this.acc = acc; + }; + js.extend(EventAcceleration, cc.Event); + var EventKeyboard = function EventKeyboard(keyCode, isPressed, bubbles) { + cc.Event.call(this, cc.Event.KEYBOARD, bubbles); + this.keyCode = keyCode; + this.isPressed = isPressed; + }; + js.extend(EventKeyboard, cc.Event); + cc.Event.EventMouse = EventMouse; + cc.Event.EventTouch = EventTouch; + cc.Event.EventAcceleration = EventAcceleration; + cc.Event.EventKeyboard = EventKeyboard; + module.exports = cc.Event; + }), { + "../event/event": 115 + } ], + 109: [ (function(require, module, exports) { + "use strict"; + var js = require("../platform/js"); + cc.EventListener = function(type, listenerID, callback) { + this._onEvent = callback; + this._type = type || 0; + this._listenerID = listenerID || ""; + this._registered = false; + this._fixedPriority = 0; + this._node = null; + this._target = null; + this._paused = true; + this._isEnabled = true; + }; + cc.EventListener.prototype = { + constructor: cc.EventListener, + _setPaused: function _setPaused(paused) { + this._paused = paused; + }, + _isPaused: function _isPaused() { + return this._paused; + }, + _setRegistered: function _setRegistered(registered) { + this._registered = registered; + }, + _isRegistered: function _isRegistered() { + return this._registered; + }, + _getType: function _getType() { + return this._type; + }, + _getListenerID: function _getListenerID() { + return this._listenerID; + }, + _setFixedPriority: function _setFixedPriority(fixedPriority) { + this._fixedPriority = fixedPriority; + }, + _getFixedPriority: function _getFixedPriority() { + return this._fixedPriority; + }, + _setSceneGraphPriority: function _setSceneGraphPriority(node) { + this._target = node; + this._node = node; + }, + _getSceneGraphPriority: function _getSceneGraphPriority() { + return this._node; + }, + checkAvailable: function checkAvailable() { + return null !== this._onEvent; + }, + clone: function clone() { + return null; + }, + setEnabled: function setEnabled(enabled) { + this._isEnabled = enabled; + }, + isEnabled: function isEnabled() { + return this._isEnabled; + }, + retain: function retain() {}, + release: function release() {} + }; + cc.EventListener.UNKNOWN = 0; + cc.EventListener.TOUCH_ONE_BY_ONE = 1; + cc.EventListener.TOUCH_ALL_AT_ONCE = 2; + cc.EventListener.KEYBOARD = 3; + cc.EventListener.MOUSE = 4; + cc.EventListener.ACCELERATION = 6; + cc.EventListener.CUSTOM = 8; + var ListenerID = cc.EventListener.ListenerID = { + MOUSE: "__cc_mouse", + TOUCH_ONE_BY_ONE: "__cc_touch_one_by_one", + TOUCH_ALL_AT_ONCE: "__cc_touch_all_at_once", + KEYBOARD: "__cc_keyboard", + ACCELERATION: "__cc_acceleration" + }; + var Custom = function Custom(listenerId, callback) { + this._onCustomEvent = callback; + cc.EventListener.call(this, cc.EventListener.CUSTOM, listenerId, this._callback); + }; + js.extend(Custom, cc.EventListener); + js.mixin(Custom.prototype, { + _onCustomEvent: null, + _callback: function _callback(event) { + null !== this._onCustomEvent && this._onCustomEvent(event); + }, + checkAvailable: function checkAvailable() { + return cc.EventListener.prototype.checkAvailable.call(this) && null !== this._onCustomEvent; + }, + clone: function clone() { + return new Custom(this._listenerID, this._onCustomEvent); + } + }); + var Mouse = function Mouse() { + cc.EventListener.call(this, cc.EventListener.MOUSE, ListenerID.MOUSE, this._callback); + }; + js.extend(Mouse, cc.EventListener); + js.mixin(Mouse.prototype, { + onMouseDown: null, + onMouseUp: null, + onMouseMove: null, + onMouseScroll: null, + _callback: function _callback(event) { + var eventType = cc.Event.EventMouse; + switch (event._eventType) { + case eventType.DOWN: + this.onMouseDown && this.onMouseDown(event); + break; + + case eventType.UP: + this.onMouseUp && this.onMouseUp(event); + break; + + case eventType.MOVE: + this.onMouseMove && this.onMouseMove(event); + break; + + case eventType.SCROLL: + this.onMouseScroll && this.onMouseScroll(event); + } + }, + clone: function clone() { + var eventListener = new Mouse(); + eventListener.onMouseDown = this.onMouseDown; + eventListener.onMouseUp = this.onMouseUp; + eventListener.onMouseMove = this.onMouseMove; + eventListener.onMouseScroll = this.onMouseScroll; + return eventListener; + }, + checkAvailable: function checkAvailable() { + return true; + } + }); + var TouchOneByOne = function TouchOneByOne() { + cc.EventListener.call(this, cc.EventListener.TOUCH_ONE_BY_ONE, ListenerID.TOUCH_ONE_BY_ONE, null); + this._claimedTouches = []; + }; + js.extend(TouchOneByOne, cc.EventListener); + js.mixin(TouchOneByOne.prototype, { + constructor: TouchOneByOne, + _claimedTouches: null, + swallowTouches: false, + onTouchBegan: null, + onTouchMoved: null, + onTouchEnded: null, + onTouchCancelled: null, + setSwallowTouches: function setSwallowTouches(needSwallow) { + this.swallowTouches = needSwallow; + }, + isSwallowTouches: function isSwallowTouches() { + return this.swallowTouches; + }, + clone: function clone() { + var eventListener = new TouchOneByOne(); + eventListener.onTouchBegan = this.onTouchBegan; + eventListener.onTouchMoved = this.onTouchMoved; + eventListener.onTouchEnded = this.onTouchEnded; + eventListener.onTouchCancelled = this.onTouchCancelled; + eventListener.swallowTouches = this.swallowTouches; + return eventListener; + }, + checkAvailable: function checkAvailable() { + if (!this.onTouchBegan) { + cc.logID(1801); + return false; + } + return true; + } + }); + var TouchAllAtOnce = function TouchAllAtOnce() { + cc.EventListener.call(this, cc.EventListener.TOUCH_ALL_AT_ONCE, ListenerID.TOUCH_ALL_AT_ONCE, null); + }; + js.extend(TouchAllAtOnce, cc.EventListener); + js.mixin(TouchAllAtOnce.prototype, { + constructor: TouchAllAtOnce, + onTouchesBegan: null, + onTouchesMoved: null, + onTouchesEnded: null, + onTouchesCancelled: null, + clone: function clone() { + var eventListener = new TouchAllAtOnce(); + eventListener.onTouchesBegan = this.onTouchesBegan; + eventListener.onTouchesMoved = this.onTouchesMoved; + eventListener.onTouchesEnded = this.onTouchesEnded; + eventListener.onTouchesCancelled = this.onTouchesCancelled; + return eventListener; + }, + checkAvailable: function checkAvailable() { + if (null === this.onTouchesBegan && null === this.onTouchesMoved && null === this.onTouchesEnded && null === this.onTouchesCancelled) { + cc.logID(1802); + return false; + } + return true; + } + }); + var Acceleration = function Acceleration(callback) { + this._onAccelerationEvent = callback; + cc.EventListener.call(this, cc.EventListener.ACCELERATION, ListenerID.ACCELERATION, this._callback); + }; + js.extend(Acceleration, cc.EventListener); + js.mixin(Acceleration.prototype, { + constructor: Acceleration, + _onAccelerationEvent: null, + _callback: function _callback(event) { + this._onAccelerationEvent(event.acc, event); + }, + checkAvailable: function checkAvailable() { + cc.assertID(this._onAccelerationEvent, 1803); + return true; + }, + clone: function clone() { + return new Acceleration(this._onAccelerationEvent); + } + }); + var Keyboard = function Keyboard() { + cc.EventListener.call(this, cc.EventListener.KEYBOARD, ListenerID.KEYBOARD, this._callback); + }; + js.extend(Keyboard, cc.EventListener); + js.mixin(Keyboard.prototype, { + constructor: Keyboard, + onKeyPressed: null, + onKeyReleased: null, + _callback: function _callback(event) { + event.isPressed ? this.onKeyPressed && this.onKeyPressed(event.keyCode, event) : this.onKeyReleased && this.onKeyReleased(event.keyCode, event); + }, + clone: function clone() { + var eventListener = new Keyboard(); + eventListener.onKeyPressed = this.onKeyPressed; + eventListener.onKeyReleased = this.onKeyReleased; + return eventListener; + }, + checkAvailable: function checkAvailable() { + if (null === this.onKeyPressed && null === this.onKeyReleased) { + cc.logID(1800); + return false; + } + return true; + } + }); + cc.EventListener.create = function(argObj) { + cc.assertID(argObj && argObj.event, 1900); + var listenerType = argObj.event; + delete argObj.event; + var listener = null; + if (listenerType === cc.EventListener.TOUCH_ONE_BY_ONE) listener = new TouchOneByOne(); else if (listenerType === cc.EventListener.TOUCH_ALL_AT_ONCE) listener = new TouchAllAtOnce(); else if (listenerType === cc.EventListener.MOUSE) listener = new Mouse(); else if (listenerType === cc.EventListener.CUSTOM) { + listener = new Custom(argObj.eventName, argObj.callback); + delete argObj.eventName; + delete argObj.callback; + } else if (listenerType === cc.EventListener.KEYBOARD) listener = new Keyboard(); else if (listenerType === cc.EventListener.ACCELERATION) { + listener = new Acceleration(argObj.callback); + delete argObj.callback; + } + for (var key in argObj) listener[key] = argObj[key]; + return listener; + }; + module.exports = cc.EventListener; + }), { + "../platform/js": 142 + } ], + 110: [ (function(require, module, exports) { + "use strict"; + var js = require("../platform/js"); + require("./CCEventListener"); + var ListenerID = cc.EventListener.ListenerID; + var _EventListenerVector = function _EventListenerVector() { + this._fixedListeners = []; + this._sceneGraphListeners = []; + this.gt0Index = 0; + }; + _EventListenerVector.prototype = { + constructor: _EventListenerVector, + size: function size() { + return this._fixedListeners.length + this._sceneGraphListeners.length; + }, + empty: function empty() { + return 0 === this._fixedListeners.length && 0 === this._sceneGraphListeners.length; + }, + push: function push(listener) { + 0 === listener._getFixedPriority() ? this._sceneGraphListeners.push(listener) : this._fixedListeners.push(listener); + }, + clearSceneGraphListeners: function clearSceneGraphListeners() { + this._sceneGraphListeners.length = 0; + }, + clearFixedListeners: function clearFixedListeners() { + this._fixedListeners.length = 0; + }, + clear: function clear() { + this._sceneGraphListeners.length = 0; + this._fixedListeners.length = 0; + }, + getFixedPriorityListeners: function getFixedPriorityListeners() { + return this._fixedListeners; + }, + getSceneGraphPriorityListeners: function getSceneGraphPriorityListeners() { + return this._sceneGraphListeners; + } + }; + var __getListenerID = function __getListenerID(event) { + var eventType = cc.Event, type = event.type; + if (type === eventType.ACCELERATION) return ListenerID.ACCELERATION; + if (type === eventType.KEYBOARD) return ListenerID.KEYBOARD; + if (type.startsWith(eventType.MOUSE)) return ListenerID.MOUSE; + type.startsWith(eventType.TOUCH) && cc.logID(2e3); + return ""; + }; + var eventManager = { + DIRTY_NONE: 0, + DIRTY_FIXED_PRIORITY: 1, + DIRTY_SCENE_GRAPH_PRIORITY: 2, + DIRTY_ALL: 3, + _listenersMap: {}, + _priorityDirtyFlagMap: {}, + _nodeListenersMap: {}, + _toAddedListeners: [], + _toRemovedListeners: [], + _dirtyListeners: {}, + _inDispatch: 0, + _isEnabled: false, + _currentTouch: null, + _currentTouchListener: null, + _internalCustomListenerIDs: [], + _setDirtyForNode: function _setDirtyForNode(node) { + var selListeners = this._nodeListenersMap[node._id]; + if (void 0 !== selListeners) for (var j = 0, len = selListeners.length; j < len; j++) { + var selListener = selListeners[j]; + var listenerID = selListener._getListenerID(); + null == this._dirtyListeners[listenerID] && (this._dirtyListeners[listenerID] = true); + } + if (node.childrenCount > 0) { + var children = node._children; + for (var i = 0, _len = children.length; i < _len; i++) this._setDirtyForNode(children[i]); + } + }, + pauseTarget: function pauseTarget(node, recursive) { + if (!(node instanceof cc._BaseNode)) { + cc.warnID(3506); + return; + } + var listeners = this._nodeListenersMap[node._id], i, len; + if (listeners) for (i = 0, len = listeners.length; i < len; i++) listeners[i]._setPaused(true); + if (true === recursive) { + var locChildren = node._children; + for (i = 0, len = locChildren ? locChildren.length : 0; i < len; i++) this.pauseTarget(locChildren[i], true); + } + }, + resumeTarget: function resumeTarget(node, recursive) { + if (!(node instanceof cc._BaseNode)) { + cc.warnID(3506); + return; + } + var listeners = this._nodeListenersMap[node._id], i, len; + if (listeners) for (i = 0, len = listeners.length; i < len; i++) listeners[i]._setPaused(false); + this._setDirtyForNode(node); + if (true === recursive) { + var locChildren = node._children; + for (i = 0, len = locChildren ? locChildren.length : 0; i < len; i++) this.resumeTarget(locChildren[i], true); + } + }, + _addListener: function _addListener(listener) { + 0 === this._inDispatch ? this._forceAddEventListener(listener) : this._toAddedListeners.push(listener); + }, + _forceAddEventListener: function _forceAddEventListener(listener) { + var listenerID = listener._getListenerID(); + var listeners = this._listenersMap[listenerID]; + if (!listeners) { + listeners = new _EventListenerVector(); + this._listenersMap[listenerID] = listeners; + } + listeners.push(listener); + if (0 === listener._getFixedPriority()) { + this._setDirty(listenerID, this.DIRTY_SCENE_GRAPH_PRIORITY); + var node = listener._getSceneGraphPriority(); + null === node && cc.logID(3507); + this._associateNodeAndEventListener(node, listener); + node.activeInHierarchy && this.resumeTarget(node); + } else this._setDirty(listenerID, this.DIRTY_FIXED_PRIORITY); + }, + _getListeners: function _getListeners(listenerID) { + return this._listenersMap[listenerID]; + }, + _updateDirtyFlagForSceneGraph: function _updateDirtyFlagForSceneGraph() { + var locDirtyListeners = this._dirtyListeners; + for (var selKey in locDirtyListeners) this._setDirty(selKey, this.DIRTY_SCENE_GRAPH_PRIORITY); + this._dirtyListeners = {}; + }, + _removeAllListenersInVector: function _removeAllListenersInVector(listenerVector) { + if (!listenerVector) return; + var selListener; + for (var i = listenerVector.length - 1; i >= 0; i--) { + selListener = listenerVector[i]; + selListener._setRegistered(false); + if (null != selListener._getSceneGraphPriority()) { + this._dissociateNodeAndEventListener(selListener._getSceneGraphPriority(), selListener); + selListener._setSceneGraphPriority(null); + } + 0 === this._inDispatch && cc.js.array.removeAt(listenerVector, i); + } + }, + _removeListenersForListenerID: function _removeListenersForListenerID(listenerID) { + var listeners = this._listenersMap[listenerID], i; + if (listeners) { + var fixedPriorityListeners = listeners.getFixedPriorityListeners(); + var sceneGraphPriorityListeners = listeners.getSceneGraphPriorityListeners(); + this._removeAllListenersInVector(sceneGraphPriorityListeners); + this._removeAllListenersInVector(fixedPriorityListeners); + delete this._priorityDirtyFlagMap[listenerID]; + if (!this._inDispatch) { + listeners.clear(); + delete this._listenersMap[listenerID]; + } + } + var locToAddedListeners = this._toAddedListeners, listener; + for (i = locToAddedListeners.length - 1; i >= 0; i--) { + listener = locToAddedListeners[i]; + listener && listener._getListenerID() === listenerID && cc.js.array.removeAt(locToAddedListeners, i); + } + }, + _sortEventListeners: function _sortEventListeners(listenerID) { + var dirtyFlag = this.DIRTY_NONE, locFlagMap = this._priorityDirtyFlagMap; + locFlagMap[listenerID] && (dirtyFlag = locFlagMap[listenerID]); + if (dirtyFlag !== this.DIRTY_NONE) { + locFlagMap[listenerID] = this.DIRTY_NONE; + dirtyFlag & this.DIRTY_FIXED_PRIORITY && this._sortListenersOfFixedPriority(listenerID); + if (dirtyFlag & this.DIRTY_SCENE_GRAPH_PRIORITY) { + var rootEntity = cc.director.getScene(); + rootEntity && this._sortListenersOfSceneGraphPriority(listenerID); + } + } + }, + _sortListenersOfSceneGraphPriority: function _sortListenersOfSceneGraphPriority(listenerID) { + var listeners = this._getListeners(listenerID); + if (!listeners) return; + var sceneGraphListener = listeners.getSceneGraphPriorityListeners(); + if (!sceneGraphListener || 0 === sceneGraphListener.length) return; + listeners.getSceneGraphPriorityListeners().sort(this._sortEventListenersOfSceneGraphPriorityDes); + }, + _sortEventListenersOfSceneGraphPriorityDes: function _sortEventListenersOfSceneGraphPriorityDes(l1, l2) { + var node1 = l1._getSceneGraphPriority(), node2 = l2._getSceneGraphPriority(); + if (!(l2 && node2 && node2._activeInHierarchy && null !== node2._parent)) return -1; + if (!l1 || !node1 || !node1._activeInHierarchy || null === node1._parent) return 1; + var p1 = node1, p2 = node2, ex = false; + while (p1._parent._id !== p2._parent._id) { + p1 = null === p1._parent._parent ? (ex = true) && node2 : p1._parent; + p2 = null === p2._parent._parent ? (ex = true) && node1 : p2._parent; + } + if (p1._id === p2._id) { + if (p1._id === node2._id) return -1; + if (p1._id === node1._id) return 1; + } + return ex ? p1._localZOrder - p2._localZOrder : p2._localZOrder - p1._localZOrder; + }, + _sortListenersOfFixedPriority: function _sortListenersOfFixedPriority(listenerID) { + var listeners = this._listenersMap[listenerID]; + if (!listeners) return; + var fixedListeners = listeners.getFixedPriorityListeners(); + if (!fixedListeners || 0 === fixedListeners.length) return; + fixedListeners.sort(this._sortListenersOfFixedPriorityAsc); + var index = 0; + for (var len = fixedListeners.length; index < len; ) { + if (fixedListeners[index]._getFixedPriority() >= 0) break; + ++index; + } + listeners.gt0Index = index; + }, + _sortListenersOfFixedPriorityAsc: function _sortListenersOfFixedPriorityAsc(l1, l2) { + return l1._getFixedPriority() - l2._getFixedPriority(); + }, + _onUpdateListeners: function _onUpdateListeners(listeners) { + var fixedPriorityListeners = listeners.getFixedPriorityListeners(); + var sceneGraphPriorityListeners = listeners.getSceneGraphPriorityListeners(); + var i, selListener, idx, toRemovedListeners = this._toRemovedListeners; + if (sceneGraphPriorityListeners) for (i = sceneGraphPriorityListeners.length - 1; i >= 0; i--) { + selListener = sceneGraphPriorityListeners[i]; + if (!selListener._isRegistered()) { + cc.js.array.removeAt(sceneGraphPriorityListeners, i); + idx = toRemovedListeners.indexOf(selListener); + -1 !== idx && toRemovedListeners.splice(idx, 1); + } + } + if (fixedPriorityListeners) for (i = fixedPriorityListeners.length - 1; i >= 0; i--) { + selListener = fixedPriorityListeners[i]; + if (!selListener._isRegistered()) { + cc.js.array.removeAt(fixedPriorityListeners, i); + idx = toRemovedListeners.indexOf(selListener); + -1 !== idx && toRemovedListeners.splice(idx, 1); + } + } + sceneGraphPriorityListeners && 0 === sceneGraphPriorityListeners.length && listeners.clearSceneGraphListeners(); + fixedPriorityListeners && 0 === fixedPriorityListeners.length && listeners.clearFixedListeners(); + }, + frameUpdateListeners: function frameUpdateListeners() { + var locListenersMap = this._listenersMap, locPriorityDirtyFlagMap = this._priorityDirtyFlagMap; + for (var selKey in locListenersMap) if (locListenersMap[selKey].empty()) { + delete locPriorityDirtyFlagMap[selKey]; + delete locListenersMap[selKey]; + } + var locToAddedListeners = this._toAddedListeners; + if (0 !== locToAddedListeners.length) { + for (var i = 0, len = locToAddedListeners.length; i < len; i++) this._forceAddEventListener(locToAddedListeners[i]); + locToAddedListeners.length = 0; + } + 0 !== this._toRemovedListeners.length && this._cleanToRemovedListeners(); + }, + _updateTouchListeners: function _updateTouchListeners(event) { + var locInDispatch = this._inDispatch; + cc.assertID(locInDispatch > 0, 3508); + if (locInDispatch > 1) return; + var listeners; + listeners = this._listenersMap[ListenerID.TOUCH_ONE_BY_ONE]; + listeners && this._onUpdateListeners(listeners); + listeners = this._listenersMap[ListenerID.TOUCH_ALL_AT_ONCE]; + listeners && this._onUpdateListeners(listeners); + cc.assertID(1 === locInDispatch, 3509); + var locToAddedListeners = this._toAddedListeners; + if (0 !== locToAddedListeners.length) { + for (var i = 0, len = locToAddedListeners.length; i < len; i++) this._forceAddEventListener(locToAddedListeners[i]); + this._toAddedListeners.length = 0; + } + 0 !== this._toRemovedListeners.length && this._cleanToRemovedListeners(); + }, + _cleanToRemovedListeners: function _cleanToRemovedListeners() { + var toRemovedListeners = this._toRemovedListeners; + for (var i = 0; i < toRemovedListeners.length; i++) { + var selListener = toRemovedListeners[i]; + var listeners = this._listenersMap[selListener._getListenerID()]; + if (!listeners) continue; + var idx, fixedPriorityListeners = listeners.getFixedPriorityListeners(), sceneGraphPriorityListeners = listeners.getSceneGraphPriorityListeners(); + if (sceneGraphPriorityListeners) { + idx = sceneGraphPriorityListeners.indexOf(selListener); + -1 !== idx && sceneGraphPriorityListeners.splice(idx, 1); + } + if (fixedPriorityListeners) { + idx = fixedPriorityListeners.indexOf(selListener); + -1 !== idx && fixedPriorityListeners.splice(idx, 1); + } + } + toRemovedListeners.length = 0; + }, + _onTouchEventCallback: function _onTouchEventCallback(listener, argsObj) { + if (!listener._isRegistered()) return false; + var event = argsObj.event, selTouch = event.currentTouch; + event.currentTarget = listener._node; + var isClaimed = false, removedIdx; + var getCode = event.getEventCode(), EventTouch = cc.Event.EventTouch; + if (getCode === EventTouch.BEGAN) { + if (!cc.macro.ENABLE_MULTI_TOUCH && eventManager._currentTouch) { + var node = eventManager._currentTouchListener._node; + if (node && node.activeInHierarchy) return false; + } + if (listener.onTouchBegan) { + isClaimed = listener.onTouchBegan(selTouch, event); + if (isClaimed && listener._registered) { + listener._claimedTouches.push(selTouch); + eventManager._currentTouchListener = listener; + eventManager._currentTouch = selTouch; + } + } + } else if (listener._claimedTouches.length > 0 && -1 !== (removedIdx = listener._claimedTouches.indexOf(selTouch))) { + isClaimed = true; + if (!cc.macro.ENABLE_MULTI_TOUCH && eventManager._currentTouch && eventManager._currentTouch !== selTouch) return false; + if (getCode === EventTouch.MOVED && listener.onTouchMoved) listener.onTouchMoved(selTouch, event); else if (getCode === EventTouch.ENDED) { + listener.onTouchEnded && listener.onTouchEnded(selTouch, event); + listener._registered && listener._claimedTouches.splice(removedIdx, 1); + eventManager._clearCurTouch(); + } else if (getCode === EventTouch.CANCELED) { + listener.onTouchCancelled && listener.onTouchCancelled(selTouch, event); + listener._registered && listener._claimedTouches.splice(removedIdx, 1); + eventManager._clearCurTouch(); + } + } + if (event.isStopped()) { + eventManager._updateTouchListeners(event); + return true; + } + if (isClaimed && listener.swallowTouches) { + argsObj.needsMutableSet && argsObj.touches.splice(selTouch, 1); + return true; + } + return false; + }, + _dispatchTouchEvent: function _dispatchTouchEvent(event) { + this._sortEventListeners(ListenerID.TOUCH_ONE_BY_ONE); + this._sortEventListeners(ListenerID.TOUCH_ALL_AT_ONCE); + var oneByOneListeners = this._getListeners(ListenerID.TOUCH_ONE_BY_ONE); + var allAtOnceListeners = this._getListeners(ListenerID.TOUCH_ALL_AT_ONCE); + if (null === oneByOneListeners && null === allAtOnceListeners) return; + var originalTouches = event.getTouches(), mutableTouches = cc.js.array.copy(originalTouches); + var oneByOneArgsObj = { + event: event, + needsMutableSet: oneByOneListeners && allAtOnceListeners, + touches: mutableTouches, + selTouch: null + }; + if (oneByOneListeners) for (var i = 0; i < originalTouches.length; i++) { + event.currentTouch = originalTouches[i]; + event._propagationStopped = event._propagationImmediateStopped = false; + this._dispatchEventToListeners(oneByOneListeners, this._onTouchEventCallback, oneByOneArgsObj); + } + if (allAtOnceListeners && mutableTouches.length > 0) { + this._dispatchEventToListeners(allAtOnceListeners, this._onTouchesEventCallback, { + event: event, + touches: mutableTouches + }); + if (event.isStopped()) return; + } + this._updateTouchListeners(event); + }, + _onTouchesEventCallback: function _onTouchesEventCallback(listener, callbackParams) { + if (!listener._registered) return false; + var EventTouch = cc.Event.EventTouch, event = callbackParams.event, touches = callbackParams.touches, getCode = event.getEventCode(); + event.currentTarget = listener._node; + getCode === EventTouch.BEGAN && listener.onTouchesBegan ? listener.onTouchesBegan(touches, event) : getCode === EventTouch.MOVED && listener.onTouchesMoved ? listener.onTouchesMoved(touches, event) : getCode === EventTouch.ENDED && listener.onTouchesEnded ? listener.onTouchesEnded(touches, event) : getCode === EventTouch.CANCELED && listener.onTouchesCancelled && listener.onTouchesCancelled(touches, event); + if (event.isStopped()) { + eventManager._updateTouchListeners(event); + return true; + } + return false; + }, + _associateNodeAndEventListener: function _associateNodeAndEventListener(node, listener) { + var listeners = this._nodeListenersMap[node._id]; + if (!listeners) { + listeners = []; + this._nodeListenersMap[node._id] = listeners; + } + listeners.push(listener); + }, + _dissociateNodeAndEventListener: function _dissociateNodeAndEventListener(node, listener) { + var listeners = this._nodeListenersMap[node._id]; + if (listeners) { + cc.js.array.remove(listeners, listener); + 0 === listeners.length && delete this._nodeListenersMap[node._id]; + } + }, + _dispatchEventToListeners: function _dispatchEventToListeners(listeners, onEvent, eventOrArgs) { + var shouldStopPropagation = false; + var fixedPriorityListeners = listeners.getFixedPriorityListeners(); + var sceneGraphPriorityListeners = listeners.getSceneGraphPriorityListeners(); + var i = 0, j, selListener; + if (fixedPriorityListeners && 0 !== fixedPriorityListeners.length) for (;i < listeners.gt0Index; ++i) { + selListener = fixedPriorityListeners[i]; + if (selListener.isEnabled() && !selListener._isPaused() && selListener._isRegistered() && onEvent(selListener, eventOrArgs)) { + shouldStopPropagation = true; + break; + } + } + if (sceneGraphPriorityListeners && !shouldStopPropagation) for (j = 0; j < sceneGraphPriorityListeners.length; j++) { + selListener = sceneGraphPriorityListeners[j]; + if (selListener.isEnabled() && !selListener._isPaused() && selListener._isRegistered() && onEvent(selListener, eventOrArgs)) { + shouldStopPropagation = true; + break; + } + } + if (fixedPriorityListeners && !shouldStopPropagation) for (;i < fixedPriorityListeners.length; ++i) { + selListener = fixedPriorityListeners[i]; + if (selListener.isEnabled() && !selListener._isPaused() && selListener._isRegistered() && onEvent(selListener, eventOrArgs)) { + shouldStopPropagation = true; + break; + } + } + }, + _setDirty: function _setDirty(listenerID, flag) { + var locDirtyFlagMap = this._priorityDirtyFlagMap; + null == locDirtyFlagMap[listenerID] ? locDirtyFlagMap[listenerID] = flag : locDirtyFlagMap[listenerID] = flag | locDirtyFlagMap[listenerID]; + }, + _sortNumberAsc: function _sortNumberAsc(a, b) { + return a - b; + }, + hasEventListener: function hasEventListener(listenerID) { + return !!this._getListeners(listenerID); + }, + addListener: function addListener(listener, nodeOrPriority) { + cc.assertID(listener && nodeOrPriority, 3503); + if (!(cc.js.isNumber(nodeOrPriority) || nodeOrPriority instanceof cc._BaseNode)) { + cc.warnID(3506); + return; + } + if (listener instanceof cc.EventListener) { + if (listener._isRegistered()) { + cc.logID(3505); + return; + } + } else { + cc.assertID(!cc.js.isNumber(nodeOrPriority), 3504); + listener = cc.EventListener.create(listener); + } + if (!listener.checkAvailable()) return; + if (cc.js.isNumber(nodeOrPriority)) { + if (0 === nodeOrPriority) { + cc.logID(3500); + return; + } + listener._setSceneGraphPriority(null); + listener._setFixedPriority(nodeOrPriority); + listener._setRegistered(true); + listener._setPaused(false); + this._addListener(listener); + } else { + listener._setSceneGraphPriority(nodeOrPriority); + listener._setFixedPriority(0); + listener._setRegistered(true); + this._addListener(listener); + } + return listener; + }, + addCustomListener: function addCustomListener(eventName, callback) { + var listener = new cc.EventListener.create({ + event: cc.EventListener.CUSTOM, + eventName: eventName, + callback: callback + }); + this.addListener(listener, 1); + return listener; + }, + removeListener: function removeListener(listener) { + if (null == listener) return; + var isFound, locListener = this._listenersMap; + for (var selKey in locListener) { + var listeners = locListener[selKey]; + var fixedPriorityListeners = listeners.getFixedPriorityListeners(), sceneGraphPriorityListeners = listeners.getSceneGraphPriorityListeners(); + isFound = this._removeListenerInVector(sceneGraphPriorityListeners, listener); + if (isFound) this._setDirty(listener._getListenerID(), this.DIRTY_SCENE_GRAPH_PRIORITY); else { + isFound = this._removeListenerInVector(fixedPriorityListeners, listener); + isFound && this._setDirty(listener._getListenerID(), this.DIRTY_FIXED_PRIORITY); + } + if (listeners.empty()) { + delete this._priorityDirtyFlagMap[listener._getListenerID()]; + delete locListener[selKey]; + } + if (isFound) break; + } + if (!isFound) { + var locToAddedListeners = this._toAddedListeners; + for (var i = locToAddedListeners.length - 1; i >= 0; i--) { + var selListener = locToAddedListeners[i]; + if (selListener === listener) { + cc.js.array.removeAt(locToAddedListeners, i); + selListener._setRegistered(false); + break; + } + } + } + this._currentTouchListener === listener && this._clearCurTouch(); + }, + _clearCurTouch: function _clearCurTouch() { + this._currentTouchListener = null; + this._currentTouch = null; + }, + _removeListenerInCallback: function _removeListenerInCallback(listeners, callback) { + if (null == listeners) return false; + for (var i = listeners.length - 1; i >= 0; i--) { + var selListener = listeners[i]; + if (selListener._onCustomEvent === callback || selListener._onEvent === callback) { + selListener._setRegistered(false); + if (null != selListener._getSceneGraphPriority()) { + this._dissociateNodeAndEventListener(selListener._getSceneGraphPriority(), selListener); + selListener._setSceneGraphPriority(null); + } + 0 === this._inDispatch ? cc.js.array.removeAt(listeners, i) : this._toRemovedListeners.push(selListener); + return true; + } + } + return false; + }, + _removeListenerInVector: function _removeListenerInVector(listeners, listener) { + if (null == listeners) return false; + for (var i = listeners.length - 1; i >= 0; i--) { + var selListener = listeners[i]; + if (selListener === listener) { + selListener._setRegistered(false); + if (null != selListener._getSceneGraphPriority()) { + this._dissociateNodeAndEventListener(selListener._getSceneGraphPriority(), selListener); + selListener._setSceneGraphPriority(null); + } + 0 === this._inDispatch ? cc.js.array.removeAt(listeners, i) : this._toRemovedListeners.push(selListener); + return true; + } + } + return false; + }, + removeListeners: function removeListeners(listenerType, recursive) { + var i, _t = this; + if (!(cc.js.isNumber(listenerType) || listenerType instanceof cc._BaseNode)) { + cc.warnID(3506); + return; + } + if (void 0 !== listenerType._id) { + var listeners = _t._nodeListenersMap[listenerType._id], i; + if (listeners) { + var listenersCopy = cc.js.array.copy(listeners); + for (i = 0; i < listenersCopy.length; i++) _t.removeListener(listenersCopy[i]); + delete _t._nodeListenersMap[listenerType._id]; + } + var locToAddedListeners = _t._toAddedListeners; + for (i = 0; i < locToAddedListeners.length; ) { + var listener = locToAddedListeners[i]; + if (listener._getSceneGraphPriority() === listenerType) { + listener._setSceneGraphPriority(null); + listener._setRegistered(false); + locToAddedListeners.splice(i, 1); + } else ++i; + } + if (true === recursive) { + var locChildren = listenerType.children, len; + for (i = 0, len = locChildren.length; i < len; i++) _t.removeListeners(locChildren[i], true); + } + } else listenerType === cc.EventListener.TOUCH_ONE_BY_ONE ? _t._removeListenersForListenerID(ListenerID.TOUCH_ONE_BY_ONE) : listenerType === cc.EventListener.TOUCH_ALL_AT_ONCE ? _t._removeListenersForListenerID(ListenerID.TOUCH_ALL_AT_ONCE) : listenerType === cc.EventListener.MOUSE ? _t._removeListenersForListenerID(ListenerID.MOUSE) : listenerType === cc.EventListener.ACCELERATION ? _t._removeListenersForListenerID(ListenerID.ACCELERATION) : listenerType === cc.EventListener.KEYBOARD ? _t._removeListenersForListenerID(ListenerID.KEYBOARD) : cc.logID(3501); + }, + removeCustomListeners: function removeCustomListeners(customEventName) { + this._removeListenersForListenerID(customEventName); + }, + removeAllListeners: function removeAllListeners() { + var locListeners = this._listenersMap, locInternalCustomEventIDs = this._internalCustomListenerIDs; + for (var selKey in locListeners) -1 === locInternalCustomEventIDs.indexOf(selKey) && this._removeListenersForListenerID(selKey); + }, + setPriority: function setPriority(listener, fixedPriority) { + if (null == listener) return; + var locListeners = this._listenersMap; + for (var selKey in locListeners) { + var selListeners = locListeners[selKey]; + var fixedPriorityListeners = selListeners.getFixedPriorityListeners(); + if (fixedPriorityListeners) { + var found = fixedPriorityListeners.indexOf(listener); + if (-1 !== found) { + null != listener._getSceneGraphPriority() && cc.logID(3502); + if (listener._getFixedPriority() !== fixedPriority) { + listener._setFixedPriority(fixedPriority); + this._setDirty(listener._getListenerID(), this.DIRTY_FIXED_PRIORITY); + } + return; + } + } + } + }, + setEnabled: function setEnabled(enabled) { + this._isEnabled = enabled; + }, + isEnabled: function isEnabled() { + return this._isEnabled; + }, + dispatchEvent: function dispatchEvent(event) { + if (!this._isEnabled) return; + this._updateDirtyFlagForSceneGraph(); + this._inDispatch++; + if (!event || !event.getType) { + cc.errorID(3511); + return; + } + if (event.getType().startsWith(cc.Event.TOUCH)) { + this._dispatchTouchEvent(event); + this._inDispatch--; + return; + } + var listenerID = __getListenerID(event); + this._sortEventListeners(listenerID); + var selListeners = this._listenersMap[listenerID]; + if (null != selListeners) { + this._dispatchEventToListeners(selListeners, this._onListenerCallback, event); + this._onUpdateListeners(selListeners); + } + this._inDispatch--; + }, + _onListenerCallback: function _onListenerCallback(listener, event) { + event.currentTarget = listener._target; + listener._onEvent(event); + return event.isStopped(); + }, + dispatchCustomEvent: function dispatchCustomEvent(eventName, optionalUserData) { + var ev = new cc.Event.EventCustom(eventName); + ev.setUserData(optionalUserData); + this.dispatchEvent(ev); + } + }; + js.get(cc, "eventManager", (function() { + cc.errorID(1405, "cc.eventManager", "cc.EventTarget or cc.systemEvent"); + return eventManager; + })); + module.exports = cc.internal.eventManager = eventManager; + }), { + "../platform/js": 142, + "./CCEventListener": 109 + } ], + 111: [ (function(require, module, exports) { + "use strict"; + cc.Touch = function(x, y, id) { + this._lastModified = 0; + this.setTouchInfo(id, x, y); + }; + cc.Touch.prototype = { + constructor: cc.Touch, + getLocation: function getLocation() { + return cc.v2(this._point.x, this._point.y); + }, + getLocationX: function getLocationX() { + return this._point.x; + }, + getLocationY: function getLocationY() { + return this._point.y; + }, + getPreviousLocation: function getPreviousLocation() { + return cc.v2(this._prevPoint.x, this._prevPoint.y); + }, + getStartLocation: function getStartLocation() { + return cc.v2(this._startPoint.x, this._startPoint.y); + }, + getDelta: function getDelta() { + return this._point.sub(this._prevPoint); + }, + getLocationInView: function getLocationInView() { + return cc.v2(this._point.x, cc.view._designResolutionSize.height - this._point.y); + }, + getPreviousLocationInView: function getPreviousLocationInView() { + return cc.v2(this._prevPoint.x, cc.view._designResolutionSize.height - this._prevPoint.y); + }, + getStartLocationInView: function getStartLocationInView() { + return cc.v2(this._startPoint.x, cc.view._designResolutionSize.height - this._startPoint.y); + }, + getID: function getID() { + return this._id; + }, + setTouchInfo: function setTouchInfo(id, x, y) { + this._prevPoint = this._point; + this._point = cc.v2(x || 0, y || 0); + this._id = id; + if (!this._startPointCaptured) { + this._startPoint = cc.v2(this._point); + cc.view._convertPointWithScale(this._startPoint); + this._startPointCaptured = true; + } + }, + _setPoint: function _setPoint(x, y) { + if (void 0 === y) { + this._point.x = x.x; + this._point.y = x.y; + } else { + this._point.x = x; + this._point.y = y; + } + }, + _setPrevPoint: function _setPrevPoint(x, y) { + this._prevPoint = void 0 === y ? cc.v2(x.x, x.y) : cc.v2(x || 0, y || 0); + } + }; + }), {} ], + 112: [ (function(require, module, exports) { + "use strict"; + require("./CCEvent"); + require("./CCTouch"); + require("./CCEventListener"); + var eventManager = require("./CCEventManager"); + module.exports = eventManager; + false; + }), { + "./CCEvent": 108, + "./CCEventListener": 109, + "./CCEventManager": 110, + "./CCTouch": 111 + } ], + 113: [ (function(require, module, exports) { + "use strict"; + var js = cc.js; + var CallbacksInvoker = require("../platform/callbacks-invoker"); + function EventListeners() { + CallbacksInvoker.call(this); + } + js.extend(EventListeners, CallbacksInvoker); + EventListeners.prototype.emit = function(event, captureListeners) { + var key = event.type; + var list = this._callbackTable[key]; + if (list) { + var rootInvoker = !list.isInvoking; + list.isInvoking = true; + var infos = list.callbackInfos; + for (var i = 0, len = infos.length; i < len; ++i) { + var info = infos[i]; + if (info && info.callback) { + info.callback.call(info.target, event, captureListeners); + if (event._propagationImmediateStopped) break; + } + } + if (rootInvoker) { + list.isInvoking = false; + list.containCanceled && list.purgeCanceled(); + } + } + }; + module.exports = EventListeners; + false; + }), { + "../platform/callbacks-invoker": 134 + } ], + 114: [ (function(require, module, exports) { + "use strict"; + var js = require("../platform/js"); + var CallbacksInvoker = require("../platform/callbacks-invoker"); + var fastRemove = js.array.fastRemove; + function EventTarget() { + CallbacksInvoker.call(this); + } + js.extend(EventTarget, CallbacksInvoker); + var proto = EventTarget.prototype; + proto.__on = proto.on; + proto.on = function(type, callback, target, once) { + if (!callback) { + cc.errorID(6800); + return; + } + if (!this.hasEventListener(type, callback, target)) { + this.__on(type, callback, target, once); + target && target.__eventTargets && target.__eventTargets.push(this); + } + return callback; + }; + proto.__off = proto.off; + proto.off = function(type, callback, target) { + if (callback) { + this.__off(type, callback, target); + target && target.__eventTargets && fastRemove(target.__eventTargets, this); + } else { + var list = this._callbackTable[type]; + if (!list) return; + var infos = list.callbackInfos; + for (var i = 0; i < infos.length; ++i) { + var _target = infos[i] && infos[i].target; + _target && _target.__eventTargets && fastRemove(_target.__eventTargets, this); + } + this.removeAll(type); + } + }; + proto.targetOff = function(target) { + this.removeAll(target); + target && target.__eventTargets && fastRemove(target.__eventTargets, this); + }; + proto.once = function(type, callback, target) { + this.on(type, callback, target, true); + }; + proto.dispatchEvent = function(event) { + this.emit(event.type, event); + }; + proto.clear = function() { + for (var key in this._callbackTable) { + var list = this._callbackTable[key]; + var infos = list.callbackInfos; + for (var i = infos.length - 1; i >= 0; i--) { + var info = infos[i]; + info && this.off(key, info.callback, info.target); + } + } + }; + cc.EventTarget = module.exports = EventTarget; + }), { + "../platform/callbacks-invoker": 134, + "../platform/js": 142 + } ], + 115: [ (function(require, module, exports) { + "use strict"; + var js = require("../platform/js"); + cc.Event = function(type, bubbles) { + this.type = type; + this.bubbles = !!bubbles; + this.target = null; + this.currentTarget = null; + this.eventPhase = 0; + this._propagationStopped = false; + this._propagationImmediateStopped = false; + }; + cc.Event.prototype = { + constructor: cc.Event, + unuse: function unuse() { + this.type = cc.Event.NO_TYPE; + this.target = null; + this.currentTarget = null; + this.eventPhase = cc.Event.NONE; + this._propagationStopped = false; + this._propagationImmediateStopped = false; + }, + reuse: function reuse(type, bubbles) { + this.type = type; + this.bubbles = bubbles || false; + }, + stopPropagation: function stopPropagation() { + this._propagationStopped = true; + }, + stopPropagationImmediate: function stopPropagationImmediate() { + this._propagationImmediateStopped = true; + }, + isStopped: function isStopped() { + return this._propagationStopped || this._propagationImmediateStopped; + }, + getCurrentTarget: function getCurrentTarget() { + return this.currentTarget; + }, + getType: function getType() { + return this.type; + } + }; + cc.Event.NO_TYPE = "no_type"; + cc.Event.TOUCH = "touch"; + cc.Event.MOUSE = "mouse"; + cc.Event.KEYBOARD = "keyboard"; + cc.Event.ACCELERATION = "acceleration"; + cc.Event.NONE = 0; + cc.Event.CAPTURING_PHASE = 1; + cc.Event.AT_TARGET = 2; + cc.Event.BUBBLING_PHASE = 3; + var EventCustom = function EventCustom(type, bubbles) { + cc.Event.call(this, type, bubbles); + this.detail = null; + }; + js.extend(EventCustom, cc.Event); + EventCustom.prototype.reset = EventCustom; + EventCustom.prototype.setUserData = function(data) { + this.detail = data; + }; + EventCustom.prototype.getUserData = function() { + return this.detail; + }; + EventCustom.prototype.getEventName = cc.Event.prototype.getType; + var MAX_POOL_SIZE = 10; + var _eventPool = new js.Pool(MAX_POOL_SIZE); + EventCustom.put = function(event) { + _eventPool.put(event); + }; + EventCustom.get = function(type, bubbles) { + var event = _eventPool._get(); + event ? event.reset(type, bubbles) : event = new EventCustom(type, bubbles); + return event; + }; + cc.Event.EventCustom = EventCustom; + module.exports = cc.Event; + }), { + "../platform/js": 142 + } ], + 116: [ (function(require, module, exports) { + "use strict"; + require("./event"); + require("./event-listeners"); + require("./event-target"); + require("./system-event"); + }), { + "./event": 115, + "./event-listeners": 113, + "./event-target": 114, + "./system-event": 117 + } ], + 117: [ (function(require, module, exports) { + "use strict"; + var EventTarget = require("../event/event-target"); + var eventManager = require("../event-manager"); + var inputManger = require("../platform/CCInputManager"); + var EventType = cc.Enum({ + KEY_DOWN: "keydown", + KEY_UP: "keyup", + DEVICEMOTION: "devicemotion" + }); + var keyboardListener = null; + var accelerationListener = null; + var SystemEvent = cc.Class({ + name: "SystemEvent", + extends: EventTarget, + statics: { + EventType: EventType + }, + setAccelerometerEnabled: function setAccelerometerEnabled(isEnable) { + false; + isEnable && window.DeviceMotionEvent && "function" === typeof DeviceMotionEvent.requestPermission ? DeviceMotionEvent.requestPermission().then((function(response) { + console.log("Device Motion Event request permission: " + response); + inputManger.setAccelerometerEnabled("granted" === response); + })) : inputManger.setAccelerometerEnabled(isEnable); + }, + setAccelerometerInterval: function setAccelerometerInterval(interval) { + false; + inputManger.setAccelerometerInterval(interval); + }, + on: function on(type, callback, target, once) { + false; + this._super(type, callback, target, once); + if (type === EventType.KEY_DOWN || type === EventType.KEY_UP) { + keyboardListener || (keyboardListener = cc.EventListener.create({ + event: cc.EventListener.KEYBOARD, + onKeyPressed: function onKeyPressed(keyCode, event) { + event.type = EventType.KEY_DOWN; + cc.systemEvent.dispatchEvent(event); + }, + onKeyReleased: function onKeyReleased(keyCode, event) { + event.type = EventType.KEY_UP; + cc.systemEvent.dispatchEvent(event); + } + })); + eventManager.hasEventListener(cc.EventListener.ListenerID.KEYBOARD) || eventManager.addListener(keyboardListener, 1); + } + if (type === EventType.DEVICEMOTION) { + accelerationListener || (accelerationListener = cc.EventListener.create({ + event: cc.EventListener.ACCELERATION, + callback: function callback(acc, event) { + event.type = EventType.DEVICEMOTION; + cc.systemEvent.dispatchEvent(event); + } + })); + eventManager.hasEventListener(cc.EventListener.ListenerID.ACCELERATION) || eventManager.addListener(accelerationListener, 1); + } + }, + off: function off(type, callback, target) { + false; + this._super(type, callback, target); + if (keyboardListener && (type === EventType.KEY_DOWN || type === EventType.KEY_UP)) { + var hasKeyDownEventListener = this.hasEventListener(EventType.KEY_DOWN); + var hasKeyUpEventListener = this.hasEventListener(EventType.KEY_UP); + hasKeyDownEventListener || hasKeyUpEventListener || eventManager.removeListener(keyboardListener); + } + accelerationListener && type === EventType.DEVICEMOTION && eventManager.removeListener(accelerationListener); + } + }); + cc.SystemEvent = module.exports = SystemEvent; + cc.systemEvent = new cc.SystemEvent(); + }), { + "../event-manager": 112, + "../event/event-target": 114, + "../platform/CCInputManager": 125 + } ], + 118: [ (function(require, module, exports) { + "use strict"; + require("./graphics"); + }), { + "./graphics": void 0 + } ], + 119: [ (function(require, module, exports) { + "use strict"; + require("./platform"); + require("./assets"); + true; + require("./CCNode"); + require("./CCPrivateNode"); + require("./CCScene"); + require("./components"); + require("./graphics"); + require("./collider"); + require("./collider/CCIntersection"); + require("./physics"); + require("./camera/CCCamera"); + require("./geom-utils"); + require("./sp"); + require("./mesh"); + require("./3d"); + require("./base-ui/CCWidgetManager"); + }), { + "./3d": void 0, + "./CCNode": 24, + "./CCPrivateNode": 25, + "./CCScene": 26, + "./assets": 73, + "./base-ui/CCWidgetManager": 84, + "./camera/CCCamera": 85, + "./collider": void 0, + "./collider/CCIntersection": void 0, + "./components": 106, + "./geom-utils": void 0, + "./graphics": 118, + "./mesh": void 0, + "./physics": void 0, + "./platform": 139, + "./sp": 191 + } ], + 120: [ (function(require, module, exports) { + "use strict"; + var CompScheduler = require("./component-scheduler"); + var Flags = require("./platform/CCObject").Flags; + var js = require("./platform/js"); + var callerFunctor = false; + var MAX_POOL_SIZE = 4; + var IsPreloadStarted = Flags.IsPreloadStarted; + var IsOnLoadStarted = Flags.IsOnLoadStarted; + var IsOnLoadCalled = Flags.IsOnLoadCalled; + var Deactivating = Flags.Deactivating; + var callPreloadInTryCatch = false; + var callOnLoadInTryCatch = false; + var callOnDestroyInTryCatch = false; + var callOnFocusInTryCatch = false; + var callOnLostFocusInTryCatch = false; + var UnsortedInvoker = cc.Class({ + extends: CompScheduler.LifeCycleInvoker, + add: function add(comp) { + this._zero.array.push(comp); + }, + remove: function remove(comp) { + this._zero.fastRemove(comp); + }, + cancelInactive: function cancelInactive(flagToClear) { + CompScheduler.LifeCycleInvoker.stableRemoveInactive(this._zero, flagToClear); + }, + invoke: function invoke() { + this._invoke(this._zero); + this._zero.array.length = 0; + } + }); + var invokePreload = CompScheduler.createInvokeImpl("c.__preload();"); + var invokeOnLoad = CompScheduler.createInvokeImpl("c.onLoad();c._objFlags|=" + IsOnLoadCalled, false, IsOnLoadCalled); + var activateTasksPool = new js.Pool(MAX_POOL_SIZE); + activateTasksPool.get = function getActivateTask() { + var task = this._get() || { + preload: new UnsortedInvoker(invokePreload), + onLoad: new CompScheduler.OneOffInvoker(invokeOnLoad), + onEnable: new CompScheduler.OneOffInvoker(CompScheduler.invokeOnEnable) + }; + task.preload._zero.i = -1; + var invoker = task.onLoad; + invoker._zero.i = -1; + invoker._neg.i = -1; + invoker._pos.i = -1; + invoker = task.onEnable; + invoker._zero.i = -1; + invoker._neg.i = -1; + invoker._pos.i = -1; + return task; + }; + function _componentCorrupted(node, comp, index) { + false; + comp ? node._removeComponent(comp) : js.array.removeAt(node._components, index); + } + function _onLoadInEditor(comp) { + if (comp.onLoad && !cc.engine._isPlaying) { + var focused = Editor.Selection.curActivate("node") === comp.node.uuid; + focused ? comp.onFocusInEditor && callOnFocusInTryCatch(comp) : comp.onLostFocusInEditor && callOnLostFocusInTryCatch(comp); + } + true; + _Scene.AssetsWatcher.start(comp); + } + function ctor() { + this._activatingStack = []; + } + var NodeActivator = cc.Class({ + ctor: ctor, + reset: ctor, + _activateNodeRecursively: function _activateNodeRecursively(node, preloadInvoker, onLoadInvoker, onEnableInvoker) { + if (node._objFlags & Deactivating) { + cc.errorID(3816, node.name); + return; + } + node._activeInHierarchy = true; + var originCount = node._components.length; + for (var i = 0; i < originCount; ++i) { + var component = node._components[i]; + if (component instanceof cc.Component) this.activateComp(component, preloadInvoker, onLoadInvoker, onEnableInvoker); else { + _componentCorrupted(node, component, i); + --i; + --originCount; + } + } + node._childArrivalOrder = node._children.length; + for (var _i = 0, len = node._children.length; _i < len; ++_i) { + var child = node._children[_i]; + child._localZOrder = 4294901760 & child._localZOrder | _i + 1; + child._active && this._activateNodeRecursively(child, preloadInvoker, onLoadInvoker, onEnableInvoker); + } + node._onPostActivated(true); + }, + _deactivateNodeRecursively: function _deactivateNodeRecursively(node) { + false; + node._objFlags |= Deactivating; + node._activeInHierarchy = false; + var originCount = node._components.length; + for (var c = 0; c < originCount; ++c) { + var component = node._components[c]; + if (component._enabled) { + cc.director._compScheduler.disableComp(component); + if (node._activeInHierarchy) { + node._objFlags &= ~Deactivating; + return; + } + } + } + for (var i = 0, len = node._children.length; i < len; ++i) { + var child = node._children[i]; + if (child._activeInHierarchy) { + this._deactivateNodeRecursively(child); + if (node._activeInHierarchy) { + node._objFlags &= ~Deactivating; + return; + } + } + } + node._onPostActivated(false); + node._objFlags &= ~Deactivating; + }, + activateNode: function activateNode(node, active) { + if (active) { + var task = activateTasksPool.get(); + this._activatingStack.push(task); + this._activateNodeRecursively(node, task.preload, task.onLoad, task.onEnable); + task.preload.invoke(); + task.onLoad.invoke(); + task.onEnable.invoke(); + this._activatingStack.pop(); + activateTasksPool.put(task); + } else { + this._deactivateNodeRecursively(node); + var stack = this._activatingStack; + for (var i = 0; i < stack.length; i++) { + var lastTask = stack[i]; + lastTask.preload.cancelInactive(IsPreloadStarted); + lastTask.onLoad.cancelInactive(IsOnLoadStarted); + lastTask.onEnable.cancelInactive(); + } + } + node.emit("active-in-hierarchy-changed", node); + }, + activateComp: function(comp, preloadInvoker, onLoadInvoker, onEnableInvoker) { + if (!cc.isValid(comp, true)) return; + if (!(comp._objFlags & IsPreloadStarted)) { + comp._objFlags |= IsPreloadStarted; + comp.__preload && (preloadInvoker ? preloadInvoker.add(comp) : comp.__preload()); + } + if (!(comp._objFlags & IsOnLoadStarted)) { + comp._objFlags |= IsOnLoadStarted; + if (comp.onLoad) if (onLoadInvoker) onLoadInvoker.add(comp); else { + comp.onLoad(); + comp._objFlags |= IsOnLoadCalled; + } else comp._objFlags |= IsOnLoadCalled; + } + if (comp._enabled) { + var deactivatedOnLoading = !comp.node._activeInHierarchy; + if (deactivatedOnLoading) return; + cc.director._compScheduler.enableComp(comp, onEnableInvoker); + } + }, + destroyComp: function(comp) { + cc.director._compScheduler.disableComp(comp); + comp.onDestroy && comp._objFlags & IsOnLoadCalled && comp.onDestroy(); + }, + resetComp: false + }); + module.exports = NodeActivator; + }), { + "./component-scheduler": 86, + "./platform/CCObject": 127, + "./platform/js": 142, + "./utils/misc": 205 + } ], + 121: [ (function(require, module, exports) { + "use strict"; + var js = require("./js"); + var Enum = require("./CCEnum"); + var utils = require("./utils"); + var _isPlainEmptyObj_DEV = utils.isPlainEmptyObj_DEV; + var _cloneable_DEV = utils.cloneable_DEV; + var Attr = require("./attribute"); + var DELIMETER = Attr.DELIMETER; + var preprocess = require("./preprocess-class"); + require("./requiring-frame"); + var BUILTIN_ENTRIES = [ "name", "extends", "mixins", "ctor", "__ctor__", "properties", "statics", "editor", "__ES6__" ]; + var INVALID_STATICS_DEV = false; + function pushUnique(array, item) { + array.indexOf(item) < 0 && array.push(item); + } + var deferredInitializer = { + datas: null, + push: function push(data) { + if (this.datas) this.datas.push(data); else { + this.datas = [ data ]; + var self = this; + setTimeout((function() { + self.init(); + }), 0); + } + }, + init: function init() { + var datas = this.datas; + if (datas) { + for (var i = 0; i < datas.length; ++i) { + var data = datas[i]; + var cls = data.cls; + var properties = data.props; + "function" === typeof properties && (properties = properties()); + var name = js.getClassName(cls); + properties ? declareProperties(cls, name, properties, cls.$super, data.mixins) : cc.errorID(3633, name); + } + this.datas = null; + } + } + }; + function appendProp(cls, name) { + false; + pushUnique(cls.__props__, name); + } + function defineProp(cls, className, propName, val, es6) { + var defaultValue = val["default"]; + false; + Attr.setClassAttr(cls, propName, "default", defaultValue); + appendProp(cls, propName); + parseAttributes(cls, val, className, propName, false); + var i; + false, false; + } + function defineGetSet(cls, name, propName, val, es6) { + var getter = val.get; + var setter = val.set; + var proto = cls.prototype; + var d = Object.getOwnPropertyDescriptor(proto, propName); + var setterUndefined = !d; + if (getter) { + false; + parseAttributes(cls, val, name, propName, true); + false, false; + Attr.setClassAttr(cls, propName, "serializable", false); + false; + es6 || js.get(proto, propName, getter, setterUndefined, setterUndefined); + false, false; + } + if (setter) { + if (!es6) { + false; + js.set(proto, propName, setter, setterUndefined, setterUndefined); + } + false, false; + } + } + function getDefault(defaultVal) { + if ("function" === typeof defaultVal) { + false; + return defaultVal(); + } + return defaultVal; + } + function mixinWithInherited(dest, src, filter) { + for (var prop in src) dest.hasOwnProperty(prop) || filter && !filter(prop) || Object.defineProperty(dest, prop, js.getPropertyDescriptor(src, prop)); + } + function doDefine(className, baseClass, mixins, options) { + var shouldAddProtoCtor; + var __ctor__ = options.__ctor__; + var ctor = options.ctor; + var __es6__ = options.__ES6__; + var ctorToUse; + false; + var ctors; + var fireClass; + if (__es6__) { + ctors = [ ctor ]; + fireClass = ctor; + } else { + ctors = __ctor__ ? [ __ctor__ ] : _getAllCtors(baseClass, mixins, options); + fireClass = _createCtor(ctors, baseClass, className, options); + js.value(fireClass, "extend", (function(options) { + options["extends"] = this; + return CCClass(options); + }), true); + } + js.value(fireClass, "__ctors__", ctors.length > 0 ? ctors : null, true); + var prototype = fireClass.prototype; + if (baseClass) { + if (!__es6__) { + js.extend(fireClass, baseClass); + prototype = fireClass.prototype; + } + fireClass.$super = baseClass; + false; + } + if (mixins) { + for (var m = mixins.length - 1; m >= 0; m--) { + var mixin = mixins[m]; + mixinWithInherited(prototype, mixin.prototype); + mixinWithInherited(fireClass, mixin, (function(prop) { + return mixin.hasOwnProperty(prop) && true; + })); + CCClass._isCCClass(mixin) && mixinWithInherited(Attr.getClassAttrs(fireClass), Attr.getClassAttrs(mixin)); + } + prototype.constructor = fireClass; + } + __es6__ || (prototype.__initProps__ = compileProps); + js.setClassName(className, fireClass); + return fireClass; + } + function define(className, baseClass, mixins, options) { + var Component = cc.Component; + var frame = cc._RF.peek(); + if (frame && js.isChildClassOf(baseClass, Component)) { + if (js.isChildClassOf(frame.cls, Component)) { + cc.errorID(3615); + return null; + } + false; + className = className || frame.script; + } + var cls = doDefine(className, baseClass, mixins, options); + if (frame) if (js.isChildClassOf(baseClass, Component)) { + var uuid = frame.uuid; + if (uuid) { + js._setClassId(uuid, cls); + false; + } + frame.cls = cls; + } else js.isChildClassOf(frame.cls, Component) || (frame.cls = cls); + return cls; + } + function normalizeClassName_DEV(className) { + var DefaultName = "CCClass"; + if (className) { + className = className.replace(/^[^$A-Za-z_]/, "_").replace(/[^0-9A-Za-z_$]/g, "_"); + try { + Function("function " + className + "(){}")(); + return className; + } catch (e) {} + } + return DefaultName; + } + function getNewValueTypeCodeJit(value) { + var clsName = js.getClassName(value); + var type = value.constructor; + var res = "new " + clsName + "("; + for (var i = 0; i < type.__props__.length; i++) { + var prop = type.__props__[i]; + var propVal = value[prop]; + false; + res += propVal; + i < type.__props__.length - 1 && (res += ","); + } + return res + ")"; + } + function escapeForJS(s) { + return JSON.stringify(s).replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029"); + } + function getInitPropsJit(attrs, propList) { + var F = []; + var func = ""; + for (var i = 0; i < propList.length; i++) { + var prop = propList[i]; + var attrKey = prop + DELIMETER + "default"; + if (attrKey in attrs) { + var statement; + statement = IDENTIFIER_RE.test(prop) ? "this." + prop + "=" : "this[" + escapeForJS(prop) + "]="; + var expression; + var def = attrs[attrKey]; + if ("object" === typeof def && def) expression = def instanceof cc.ValueType ? getNewValueTypeCodeJit(def) : Array.isArray(def) ? "[]" : "{}"; else if ("function" === typeof def) { + var index = F.length; + F.push(def); + expression = "F[" + index + "]()"; + false; + } else expression = "string" === typeof def ? escapeForJS(def) : def; + statement = statement + expression + ";\n"; + func += statement; + } + } + var initProps; + initProps = 0 === F.length ? Function(func) : Function("F", "return (function(){\n" + func + "})")(F); + return initProps; + } + function getInitProps(attrs, propList) { + var props = null; + var simpleEnd = 0; + var valueTypeEnd = 0; + (function() { + var simples = null; + var valueTypes = null; + var advanceds = null; + for (var i = 0; i < propList.length; ++i) { + var prop = propList[i]; + var attrKey = prop + DELIMETER + "default"; + if (attrKey in attrs) { + var def = attrs[attrKey]; + if ("object" === typeof def && def || "function" === typeof def) if (def instanceof cc.ValueType) { + valueTypes || (valueTypes = []); + valueTypes.push(prop, def); + } else { + advanceds || (advanceds = []); + advanceds.push(prop, def); + } else { + simples || (simples = []); + simples.push(prop, def); + } + } + } + simpleEnd = simples ? simples.length : 0; + valueTypeEnd = simpleEnd + (valueTypes ? valueTypes.length : 0); + var totalLength = valueTypeEnd + (advanceds ? advanceds.length : 0); + props = new Array(totalLength); + for (var _i = 0; _i < simpleEnd; ++_i) props[_i] = simples[_i]; + for (var _i2 = simpleEnd; _i2 < valueTypeEnd; ++_i2) props[_i2] = valueTypes[_i2 - simpleEnd]; + for (var _i3 = valueTypeEnd; _i3 < totalLength; ++_i3) props[_i3] = advanceds[_i3 - valueTypeEnd]; + })(); + return function() { + var i = 0; + for (;i < simpleEnd; i += 2) this[props[i]] = props[i + 1]; + for (;i < valueTypeEnd; i += 2) this[props[i]] = props[i + 1].clone(); + for (;i < props.length; i += 2) { + var def = props[i + 1]; + if (Array.isArray(def)) this[props[i]] = []; else { + var value; + if ("object" === typeof def) value = {}; else { + false; + value = def(); + } + this[props[i]] = value; + } + } + }; + } + var IDENTIFIER_RE = /^[A-Za-z_$][0-9A-Za-z_$]*$/; + function compileProps(actualClass) { + var attrs = Attr.getClassAttrs(actualClass); + var propList = actualClass.__props__; + if (null === propList) { + deferredInitializer.init(); + propList = actualClass.__props__; + } + var initProps = getInitPropsJit(attrs, propList); + actualClass.prototype.__initProps__ = initProps; + initProps.call(this); + } + var _createCtor = function(ctors, baseClass, className, options) { + var superCallBounded = baseClass && boundSuperCalls(baseClass, options, className); + var ctorName = "CCClass"; + var body = "return function " + ctorName + "(){\n"; + superCallBounded && (body += "this._super=null;\n"); + body += "this.__initProps__(" + ctorName + ");\n"; + var ctorLen = ctors.length; + if (ctorLen > 0) { + var useTryCatch = false; + useTryCatch && (body += "try{\n"); + var SNIPPET = "].apply(this,arguments);\n"; + if (1 === ctorLen) body += ctorName + ".__ctors__[0" + SNIPPET; else { + body += "var cs=" + ctorName + ".__ctors__;\n"; + for (var i = 0; i < ctorLen; i++) body += "cs[" + i + SNIPPET; + } + useTryCatch && (body += "}catch(e){\ncc._throw(e);\n}\n"); + } + body += "}"; + return Function(body)(); + }; + function _validateCtor_DEV(ctor, baseClass, className, options) { + var originCtor; + false; + !(ctor.length > 0) || className && className.startsWith("cc.") || cc.warnID(3617, className); + return ctor; + } + function _getAllCtors(baseClass, mixins, options) { + function getCtors(cls) { + return CCClass._isCCClass(cls) ? cls.__ctors__ || [] : [ cls ]; + } + var ctors = []; + var baseOrMixins = [ baseClass ].concat(mixins); + for (var b = 0; b < baseOrMixins.length; b++) { + var baseOrMixin = baseOrMixins[b]; + if (baseOrMixin) { + var baseCtors = getCtors(baseOrMixin); + for (var c = 0; c < baseCtors.length; c++) pushUnique(ctors, baseCtors[c]); + } + } + var ctor = options.ctor; + ctor && ctors.push(ctor); + return ctors; + } + var SuperCallReg = /xyz/.test((function() { + xyz; + })) ? /\b\._super\b/ : /.*/; + var SuperCallRegStrict = /xyz/.test((function() { + xyz; + })) ? /this\._super\s*\(/ : /(NONE){99}/; + function boundSuperCalls(baseClass, options, className) { + var hasSuperCall = false; + for (var funcName in options) { + if (BUILTIN_ENTRIES.indexOf(funcName) >= 0) continue; + var func = options[funcName]; + if ("function" !== typeof func) continue; + var pd = js.getPropertyDescriptor(baseClass.prototype, funcName); + if (pd) { + var superFunc = pd.value; + if ("function" === typeof superFunc) { + if (SuperCallReg.test(func)) { + hasSuperCall = true; + options[funcName] = (function(superFunc, func) { + return function() { + var tmp = this._super; + this._super = superFunc; + var ret = func.apply(this, arguments); + this._super = tmp; + return ret; + }; + })(superFunc, func); + } + continue; + } + } + false; + } + return hasSuperCall; + } + function declareProperties(cls, className, properties, baseClass, mixins, es6) { + cls.__props__ = []; + baseClass && baseClass.__props__ && (cls.__props__ = baseClass.__props__.slice()); + if (mixins) for (var m = 0; m < mixins.length; ++m) { + var mixin = mixins[m]; + mixin.__props__ && (cls.__props__ = cls.__props__.concat(mixin.__props__.filter((function(x) { + return cls.__props__.indexOf(x) < 0; + })))); + } + if (properties) { + preprocess.preprocessAttrs(properties, className, cls, es6); + for (var propName in properties) { + var val = properties[propName]; + "default" in val ? defineProp(cls, className, propName, val, es6) : defineGetSet(cls, className, propName, val, es6); + } + } + var attrs = Attr.getClassAttrs(cls); + cls.__values__ = cls.__props__.filter((function(prop) { + return false !== attrs[prop + DELIMETER + "serializable"]; + })); + } + function CCClass(options) { + options = options || {}; + var name = options.name; + var base = options["extends"]; + var mixins = options.mixins; + var cls = define(name, base, mixins, options); + name || (name = cc.js.getClassName(cls)); + cls._sealed = true; + base && (base._sealed = false); + var properties = options.properties; + if ("function" === typeof properties || base && null === base.__props__ || mixins && mixins.some((function(x) { + return null === x.__props__; + }))) { + false; + deferredInitializer.push({ + cls: cls, + props: properties, + mixins: mixins + }); + cls.__props__ = cls.__values__ = null; + } else declareProperties(cls, name, properties, base, options.mixins, options.__ES6__); + var statics = options.statics; + if (statics) { + var staticPropName; + false; + for (staticPropName in statics) cls[staticPropName] = statics[staticPropName]; + } + for (var funcName in options) { + if (BUILTIN_ENTRIES.indexOf(funcName) >= 0) continue; + var func = options[funcName]; + if (!preprocess.validateMethodWithProps(func, funcName, name, cls, base)) continue; + js.value(cls.prototype, funcName, func, true, true); + } + var editor = options.editor; + editor && cc.Component._registerEditorProps(cls, editor); + return cls; + } + CCClass._isCCClass = function(constructor) { + return constructor && constructor.hasOwnProperty("__ctors__"); + }; + CCClass._fastDefine = function(className, constructor, serializableFields) { + js.setClassName(className, constructor); + var props = constructor.__props__ = constructor.__values__ = Object.keys(serializableFields); + var attrs = Attr.getClassAttrs(constructor); + for (var i = 0; i < props.length; i++) { + var key = props[i]; + attrs[key + DELIMETER + "visible"] = false; + attrs[key + DELIMETER + "default"] = serializableFields[key]; + } + }; + CCClass.Attr = Attr; + CCClass.attr = Attr.attr; + CCClass.getInheritanceChain = function(klass) { + var chain = []; + for (;;) { + klass = js.getSuper(klass); + if (!klass) break; + klass !== Object && chain.push(klass); + } + return chain; + }; + var PrimitiveTypes = { + Integer: "Number", + Float: "Number", + Boolean: "Boolean", + String: "String" + }; + var onAfterProps_ET = []; + function parseAttributes(cls, attributes, className, propName, usedInGetter) { + var ERR_Type = ""; + var attrs = null; + var propNamePrefix = ""; + function initAttrs() { + propNamePrefix = propName + DELIMETER; + return attrs = Attr.getClassAttrs(cls); + } + false, false; + var type = attributes.type; + if (type) { + var primitiveType = PrimitiveTypes[type]; + if (primitiveType) { + (attrs || initAttrs())[propNamePrefix + "type"] = type; + (false, false) && !attributes._short && onAfterProps_ET.push(Attr.getTypeChecker_ET(primitiveType, "cc." + type)); + } else if ("Object" === type) false; else if (type === Attr.ScriptUuid) { + (attrs || initAttrs())[propNamePrefix + "type"] = "Script"; + attrs[propNamePrefix + "ctor"] = cc.ScriptAsset; + } else if ("object" === typeof type) if (Enum.isEnum(type)) { + (attrs || initAttrs())[propNamePrefix + "type"] = "Enum"; + attrs[propNamePrefix + "enumList"] = Enum.getList(type); + } else false; else if ("function" === typeof type) { + (attrs || initAttrs())[propNamePrefix + "type"] = "Object"; + attrs[propNamePrefix + "ctor"] = type; + (false, false) && !attributes._short && onAfterProps_ET.push(Attr.getObjTypeChecker_ET(type)); + } else false; + } + function parseSimpleAttr(attrName, expectType) { + if (attrName in attributes) { + var val = attributes[attrName]; + typeof val === expectType && ((attrs || initAttrs())[propNamePrefix + attrName] = val); + } + } + if (attributes.editorOnly) { + false; + (attrs || initAttrs())[propNamePrefix + "editorOnly"] = true; + } + false; + if (false === attributes.serializable) { + false; + (attrs || initAttrs())[propNamePrefix + "serializable"] = false; + } + parseSimpleAttr("formerlySerializedAs", "string"); + false; + var visible; + var startsWithUS; + false; + var range = attributes.range; + if (range) if (Array.isArray(range)) if (range.length >= 2) { + (attrs || initAttrs())[propNamePrefix + "min"] = range[0]; + attrs[propNamePrefix + "max"] = range[1]; + range.length > 2 && (attrs[propNamePrefix + "step"] = range[2]); + } else false; else false; + parseSimpleAttr("min", "number"); + parseSimpleAttr("max", "number"); + parseSimpleAttr("step", "number"); + parseSimpleAttr("userData", "object"); + } + cc.Class = CCClass; + module.exports = { + isArray: function isArray(defaultVal) { + defaultVal = getDefault(defaultVal); + return Array.isArray(defaultVal); + }, + fastDefine: CCClass._fastDefine, + getNewValueTypeCode: (true, getNewValueTypeCodeJit), + IDENTIFIER_RE: IDENTIFIER_RE, + escapeForJS: escapeForJS, + getDefault: getDefault + }; + false; + }), { + "./CCEnum": 123, + "./attribute": 133, + "./js": 142, + "./preprocess-class": 143, + "./requiring-frame": 144, + "./utils": 145 + } ], + 122: [ (function(require, module, exports) { + "use strict"; + require("./CCClass"); + var Preprocess = require("./preprocess-class"); + var js = require("./js"); + var isPlainEmptyObj_DEV = false; + var CACHE_KEY = "__ccclassCache__"; + function fNOP(ctor) { + return ctor; + } + function getSubDict(obj, key) { + return obj[key] || (obj[key] = {}); + } + function checkCtorArgument(decorate) { + return function(target) { + if ("function" === typeof target) return decorate(target); + return function(ctor) { + return decorate(ctor, target); + }; + }; + } + function _checkNormalArgument(validator_DEV, decorate, decoratorName) { + return function(target) { + false; + return function(ctor) { + return decorate(ctor, target); + }; + }; + } + var checkCompArgument = _checkNormalArgument.bind(null, false); + function _argumentChecker(type) { + return _checkNormalArgument.bind(null, false); + } + var checkStringArgument = _argumentChecker("string"); + var checkNumberArgument = _argumentChecker("number"); + function getClassCache(ctor, decoratorName) { + false; + return getSubDict(ctor, CACHE_KEY); + } + function getDefaultFromInitializer(initializer) { + var value; + try { + value = initializer(); + } catch (e) { + return initializer; + } + return "object" !== typeof value || null === value ? value : initializer; + } + function extractActualDefaultValues(ctor) { + var dummyObj; + try { + dummyObj = new ctor(); + } catch (e) { + false; + return {}; + } + return dummyObj; + } + function genProperty(ctor, properties, propName, options, desc, cache) { + var fullOptions; + var isGetset = desc && (desc.get || desc.set); + options && (fullOptions = Preprocess.getFullFormOfProperty(options, isGetset)); + var existsProperty = properties[propName]; + var prop = js.mixin(existsProperty || {}, fullOptions || options || {}); + if (isGetset) { + var errorProps; + false; + desc.get && (prop.get = desc.get); + desc.set && (prop.set = desc.set); + } else { + false; + var defaultValue = void 0; + var isDefaultValueSpecified = false; + if (desc) { + if (desc.initializer) { + defaultValue = getDefaultFromInitializer(desc.initializer); + isDefaultValueSpecified = true; + } + } else { + var actualDefaultValues = cache["default"] || (cache["default"] = extractActualDefaultValues(ctor)); + if (actualDefaultValues.hasOwnProperty(propName)) { + defaultValue = actualDefaultValues[propName]; + isDefaultValueSpecified = true; + } + } + false, false; + prop["default"] = defaultValue; + } + properties[propName] = prop; + } + var ccclass = checkCtorArgument((function(ctor, name) { + var base = js.getSuper(ctor); + base === Object && (base = null); + var proto = { + name: name, + extends: base, + ctor: ctor, + __ES6__: true + }; + var cache = ctor[CACHE_KEY]; + if (cache) { + var decoratedProto = cache.proto; + decoratedProto && js.mixin(proto, decoratedProto); + ctor[CACHE_KEY] = void 0; + } + var res = cc.Class(proto); + var propNames; + var i; + var prop; + var desc; + var func; + false; + return res; + })); + function property(ctorProtoOrOptions, propName, desc) { + var options = null; + function normalized(ctorProto, propName, desc) { + var cache = getClassCache(ctorProto.constructor); + if (cache) { + var ccclassProto = getSubDict(cache, "proto"); + var properties = getSubDict(ccclassProto, "properties"); + genProperty(ctorProto.constructor, properties, propName, options, desc, cache); + } + } + if ("undefined" === typeof propName) { + options = ctorProtoOrOptions; + return normalized; + } + normalized(ctorProtoOrOptions, propName, desc); + } + function createEditorDecorator(argCheckFunc, editorPropName, staticValue) { + return argCheckFunc((function(ctor, decoratedValue) { + var cache = getClassCache(ctor, editorPropName); + if (cache) { + var value = void 0 !== staticValue ? staticValue : decoratedValue; + var proto = getSubDict(cache, "proto"); + getSubDict(proto, "editor")[editorPropName] = value; + } + }), editorPropName); + } + function createDummyDecorator(argCheckFunc) { + return argCheckFunc(fNOP); + } + var executeInEditMode = createDummyDecorator(checkCtorArgument, "executeInEditMode", true); + var requireComponent = createEditorDecorator(checkCompArgument, "requireComponent"); + var menu = createDummyDecorator(checkStringArgument, "menu"); + var executionOrder = createEditorDecorator(checkNumberArgument, "executionOrder"); + var disallowMultiple = createDummyDecorator(checkCtorArgument, "disallowMultiple"); + var playOnFocus = createDummyDecorator(checkCtorArgument, "playOnFocus", true); + var inspector = createDummyDecorator(checkStringArgument, "inspector"); + var icon = createDummyDecorator(checkStringArgument, "icon"); + var help = createDummyDecorator(checkStringArgument, "help"); + function mixins() { + var mixins = []; + for (var i = 0; i < arguments.length; i++) mixins[i] = arguments[i]; + return function(ctor) { + var cache = getClassCache(ctor, "mixins"); + cache && (getSubDict(cache, "proto").mixins = mixins); + }; + } + cc._decorator = module.exports = { + ccclass: ccclass, + property: property, + executeInEditMode: executeInEditMode, + requireComponent: requireComponent, + menu: menu, + executionOrder: executionOrder, + disallowMultiple: disallowMultiple, + playOnFocus: playOnFocus, + inspector: inspector, + icon: icon, + help: help, + mixins: mixins + }; + }), { + "./CCClass": 121, + "./js": 142, + "./preprocess-class": 143, + "./utils": 145 + } ], + 123: [ (function(require, module, exports) { + "use strict"; + var js = require("./js"); + function Enum(obj) { + if ("__enums__" in obj) return obj; + js.value(obj, "__enums__", null, true); + var lastIndex = -1; + var keys = Object.keys(obj); + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + var val = obj[key]; + if (-1 === val) { + val = ++lastIndex; + obj[key] = val; + } else if ("number" === typeof val) lastIndex = val; else if ("string" === typeof val && Number.isInteger(parseFloat(key))) continue; + var reverseKey = "" + val; + if (key !== reverseKey) { + if ((false, false) && reverseKey in obj && obj[reverseKey] !== key) { + cc.errorID(7100, reverseKey); + continue; + } + js.value(obj, reverseKey, key); + } + } + return obj; + } + Enum.isEnum = function(enumType) { + return enumType && enumType.hasOwnProperty("__enums__"); + }; + Enum.getList = function(enumDef) { + if (enumDef.__enums__) return enumDef.__enums__; + var enums = enumDef.__enums__ = []; + for (var name in enumDef) { + var value = enumDef[name]; + Number.isInteger(value) && enums.push({ + name: name, + value: value + }); + } + enums.sort((function(a, b) { + return a.value - b.value; + })); + return enums; + }; + var _TestEnum; + false; + module.exports = cc.Enum = Enum; + }), { + "./js": 142 + } ], + 124: [ (function(require, module, exports) { + "use strict"; + var eventManager = require("../event-manager"); + var inputManager = require("./CCInputManager"); + var PORTRAIT = 0; + var LANDSCAPE_LEFT = -90; + var PORTRAIT_UPSIDE_DOWN = 180; + var LANDSCAPE_RIGHT = 90; + var _didAccelerateFun; + cc.Acceleration = function(x, y, z, timestamp) { + this.x = x || 0; + this.y = y || 0; + this.z = z || 0; + this.timestamp = timestamp || 0; + }; + inputManager.setAccelerometerEnabled = function(isEnable) { + var _t = this; + if (_t._accelEnabled === isEnable) return; + _t._accelEnabled = isEnable; + var scheduler = cc.director.getScheduler(); + scheduler.enableForTarget(_t); + if (_t._accelEnabled) { + _t._registerAccelerometerEvent(); + _t._accelCurTime = 0; + scheduler.scheduleUpdate(_t); + } else { + _t._unregisterAccelerometerEvent(); + _t._accelCurTime = 0; + scheduler.unscheduleUpdate(_t); + } + false, false; + }; + inputManager.setAccelerometerInterval = function(interval) { + if (this._accelInterval !== interval) { + this._accelInterval = interval; + false, false; + } + }; + inputManager._registerKeyboardEvent = function() { + cc.game.canvas.addEventListener("keydown", (function(e) { + eventManager.dispatchEvent(new cc.Event.EventKeyboard(e.keyCode, true)); + e.stopPropagation(); + e.preventDefault(); + }), false); + cc.game.canvas.addEventListener("keyup", (function(e) { + eventManager.dispatchEvent(new cc.Event.EventKeyboard(e.keyCode, false)); + e.stopPropagation(); + e.preventDefault(); + }), false); + }; + inputManager._registerAccelerometerEvent = function() { + var w = window, _t = this; + _t._acceleration = new cc.Acceleration(); + _t._accelDeviceEvent = w.DeviceMotionEvent || w.DeviceOrientationEvent; + cc.sys.browserType === cc.sys.BROWSER_TYPE_MOBILE_QQ && (_t._accelDeviceEvent = window.DeviceOrientationEvent); + var _deviceEventType = _t._accelDeviceEvent === w.DeviceMotionEvent ? "devicemotion" : "deviceorientation"; + var ua = navigator.userAgent; + (/Android/.test(ua) || /Adr/.test(ua) && cc.sys.browserType === cc.BROWSER_TYPE_UC) && (_t._minus = -1); + _didAccelerateFun = _t.didAccelerate.bind(_t); + w.addEventListener(_deviceEventType, _didAccelerateFun, false); + }; + inputManager._unregisterAccelerometerEvent = function() { + var w = window, _t = this; + var _deviceEventType = _t._accelDeviceEvent === w.DeviceMotionEvent ? "devicemotion" : "deviceorientation"; + _didAccelerateFun && w.removeEventListener(_deviceEventType, _didAccelerateFun, false); + }; + inputManager.didAccelerate = function(eventData) { + var _t = this, w = window; + if (!_t._accelEnabled) return; + var mAcceleration = _t._acceleration; + var x, y, z; + if (_t._accelDeviceEvent === window.DeviceMotionEvent) { + var eventAcceleration = eventData["accelerationIncludingGravity"]; + x = _t._accelMinus * eventAcceleration.x * .1; + y = _t._accelMinus * eventAcceleration.y * .1; + z = .1 * eventAcceleration.z; + } else { + x = eventData["gamma"] / 90 * .981; + y = -eventData["beta"] / 90 * .981; + z = eventData["alpha"] / 90 * .981; + } + if (cc.view._isRotated) { + var tmp = x; + x = -y; + y = tmp; + } + mAcceleration.x = x; + mAcceleration.y = y; + mAcceleration.z = z; + mAcceleration.timestamp = eventData.timeStamp || Date.now(); + var tmpX = mAcceleration.x; + if (w.orientation === LANDSCAPE_RIGHT) { + mAcceleration.x = -mAcceleration.y; + mAcceleration.y = tmpX; + } else if (w.orientation === LANDSCAPE_LEFT) { + mAcceleration.x = mAcceleration.y; + mAcceleration.y = -tmpX; + } else if (w.orientation === PORTRAIT_UPSIDE_DOWN) { + mAcceleration.x = -mAcceleration.x; + mAcceleration.y = -mAcceleration.y; + } + if (cc.sys.os === cc.sys.OS_ANDROID && cc.sys.browserType !== cc.sys.BROWSER_TYPE_MOBILE_QQ) { + mAcceleration.x = -mAcceleration.x; + mAcceleration.y = -mAcceleration.y; + } + }; + }), { + "../event-manager": 112, + "./CCInputManager": 125 + } ], + 125: [ (function(require, module, exports) { + "use strict"; + var macro = require("./CCMacro"); + var sys = require("./CCSys"); + var eventManager = require("../event-manager"); + var TOUCH_TIMEOUT = macro.TOUCH_TIMEOUT; + var _vec2 = cc.v2(); + var inputManager = { + _mousePressed: false, + _isRegisterEvent: false, + _preTouchPoint: cc.v2(0, 0), + _prevMousePoint: cc.v2(0, 0), + _preTouchPool: [], + _preTouchPoolPointer: 0, + _touches: [], + _touchesIntegerDict: {}, + _indexBitsUsed: 0, + _maxTouches: 8, + _accelEnabled: false, + _accelInterval: .2, + _accelMinus: 1, + _accelCurTime: 0, + _acceleration: null, + _accelDeviceEvent: null, + _canvasBoundingRect: { + left: 0, + top: 0, + adjustedLeft: 0, + adjustedTop: 0, + width: 0, + height: 0 + }, + _getUnUsedIndex: function _getUnUsedIndex() { + var temp = this._indexBitsUsed; + var now = cc.sys.now(); + for (var i = 0; i < this._maxTouches; i++) { + if (!(1 & temp)) { + this._indexBitsUsed |= 1 << i; + return i; + } + var touch = this._touches[i]; + if (now - touch._lastModified > TOUCH_TIMEOUT) { + this._removeUsedIndexBit(i); + delete this._touchesIntegerDict[touch.getID()]; + return i; + } + temp >>= 1; + } + return -1; + }, + _removeUsedIndexBit: function _removeUsedIndexBit(index) { + if (index < 0 || index >= this._maxTouches) return; + var temp = 1 << index; + temp = ~temp; + this._indexBitsUsed &= temp; + }, + _glView: null, + _updateCanvasBoundingRect: function _updateCanvasBoundingRect() { + var element = cc.game.canvas; + var canvasBoundingRect = this._canvasBoundingRect; + var docElem = document.documentElement; + var leftOffset = window.pageXOffset - docElem.clientLeft; + var topOffset = window.pageYOffset - docElem.clientTop; + if (element.getBoundingClientRect) { + var box = element.getBoundingClientRect(); + canvasBoundingRect.left = box.left + leftOffset; + canvasBoundingRect.top = box.top + topOffset; + canvasBoundingRect.width = box.width; + canvasBoundingRect.height = box.height; + } else if (element instanceof HTMLCanvasElement) { + canvasBoundingRect.left = leftOffset; + canvasBoundingRect.top = topOffset; + canvasBoundingRect.width = element.width; + canvasBoundingRect.height = element.height; + } else { + canvasBoundingRect.left = leftOffset; + canvasBoundingRect.top = topOffset; + canvasBoundingRect.width = parseInt(element.style.width); + canvasBoundingRect.height = parseInt(element.style.height); + } + }, + handleTouchesBegin: function handleTouchesBegin(touches) { + var selTouch, index, curTouch, touchID, handleTouches = [], locTouchIntDict = this._touchesIntegerDict, now = sys.now(); + for (var i = 0, len = touches.length; i < len; i++) { + selTouch = touches[i]; + touchID = selTouch.getID(); + index = locTouchIntDict[touchID]; + if (null == index) { + var unusedIndex = this._getUnUsedIndex(); + if (-1 === unusedIndex) { + cc.logID(2300, unusedIndex); + continue; + } + curTouch = this._touches[unusedIndex] = new cc.Touch(selTouch._point.x, selTouch._point.y, selTouch.getID()); + curTouch._lastModified = now; + curTouch._setPrevPoint(selTouch._prevPoint); + locTouchIntDict[touchID] = unusedIndex; + handleTouches.push(curTouch); + } + } + if (handleTouches.length > 0) { + this._glView._convertTouchesWithScale(handleTouches); + var touchEvent = new cc.Event.EventTouch(handleTouches); + touchEvent._eventCode = cc.Event.EventTouch.BEGAN; + eventManager.dispatchEvent(touchEvent); + } + }, + handleTouchesMove: function handleTouchesMove(touches) { + var selTouch, index, touchID, handleTouches = [], locTouches = this._touches, now = sys.now(); + for (var i = 0, len = touches.length; i < len; i++) { + selTouch = touches[i]; + touchID = selTouch.getID(); + index = this._touchesIntegerDict[touchID]; + if (null == index) continue; + if (locTouches[index]) { + locTouches[index]._setPoint(selTouch._point); + locTouches[index]._setPrevPoint(selTouch._prevPoint); + locTouches[index]._lastModified = now; + handleTouches.push(locTouches[index]); + } + } + if (handleTouches.length > 0) { + this._glView._convertTouchesWithScale(handleTouches); + var touchEvent = new cc.Event.EventTouch(handleTouches); + touchEvent._eventCode = cc.Event.EventTouch.MOVED; + eventManager.dispatchEvent(touchEvent); + } + }, + handleTouchesEnd: function handleTouchesEnd(touches) { + var handleTouches = this.getSetOfTouchesEndOrCancel(touches); + if (handleTouches.length > 0) { + this._glView._convertTouchesWithScale(handleTouches); + var touchEvent = new cc.Event.EventTouch(handleTouches); + touchEvent._eventCode = cc.Event.EventTouch.ENDED; + eventManager.dispatchEvent(touchEvent); + } + this._preTouchPool.length = 0; + }, + handleTouchesCancel: function handleTouchesCancel(touches) { + var handleTouches = this.getSetOfTouchesEndOrCancel(touches); + if (handleTouches.length > 0) { + this._glView._convertTouchesWithScale(handleTouches); + var touchEvent = new cc.Event.EventTouch(handleTouches); + touchEvent._eventCode = cc.Event.EventTouch.CANCELED; + eventManager.dispatchEvent(touchEvent); + } + this._preTouchPool.length = 0; + }, + getSetOfTouchesEndOrCancel: function getSetOfTouchesEndOrCancel(touches) { + var selTouch, index, touchID, handleTouches = [], locTouches = this._touches, locTouchesIntDict = this._touchesIntegerDict; + for (var i = 0, len = touches.length; i < len; i++) { + selTouch = touches[i]; + touchID = selTouch.getID(); + index = locTouchesIntDict[touchID]; + if (null == index) continue; + if (locTouches[index]) { + locTouches[index]._setPoint(selTouch._point); + locTouches[index]._setPrevPoint(selTouch._prevPoint); + handleTouches.push(locTouches[index]); + this._removeUsedIndexBit(index); + delete locTouchesIntDict[touchID]; + } + } + return handleTouches; + }, + getPreTouch: function getPreTouch(touch) { + var preTouch = null; + var locPreTouchPool = this._preTouchPool; + var id = touch.getID(); + for (var i = locPreTouchPool.length - 1; i >= 0; i--) if (locPreTouchPool[i].getID() === id) { + preTouch = locPreTouchPool[i]; + break; + } + preTouch || (preTouch = touch); + return preTouch; + }, + setPreTouch: function setPreTouch(touch) { + var find = false; + var locPreTouchPool = this._preTouchPool; + var id = touch.getID(); + for (var i = locPreTouchPool.length - 1; i >= 0; i--) if (locPreTouchPool[i].getID() === id) { + locPreTouchPool[i] = touch; + find = true; + break; + } + if (!find) if (locPreTouchPool.length <= 50) locPreTouchPool.push(touch); else { + locPreTouchPool[this._preTouchPoolPointer] = touch; + this._preTouchPoolPointer = (this._preTouchPoolPointer + 1) % 50; + } + }, + getTouchByXY: function getTouchByXY(tx, ty, pos) { + var locPreTouch = this._preTouchPoint; + var location = this._glView.convertToLocationInView(tx, ty, pos); + var touch = new cc.Touch(location.x, location.y, 0); + touch._setPrevPoint(locPreTouch.x, locPreTouch.y); + locPreTouch.x = location.x; + locPreTouch.y = location.y; + return touch; + }, + getMouseEvent: function getMouseEvent(location, pos, eventType) { + var locPreMouse = this._prevMousePoint; + var mouseEvent = new cc.Event.EventMouse(eventType); + mouseEvent._setPrevCursor(locPreMouse.x, locPreMouse.y); + locPreMouse.x = location.x; + locPreMouse.y = location.y; + this._glView._convertMouseToLocationInView(locPreMouse, pos); + mouseEvent.setLocation(locPreMouse.x, locPreMouse.y); + return mouseEvent; + }, + getPointByEvent: function getPointByEvent(event, pos) { + cc.sys.browserType !== cc.sys.BROWSER_TYPE_QQ && cc.sys.browserType !== cc.sys.BROWSER_TYPE_UC && cc.sys.browserType !== cc.sys.BROWSER_TYPE_SAFARI || this._updateCanvasBoundingRect(); + if (null != event.pageX) return { + x: event.pageX, + y: event.pageY + }; + pos.left -= document.body.scrollLeft; + pos.top -= document.body.scrollTop; + return { + x: event.clientX, + y: event.clientY + }; + }, + getTouchesByEvent: function getTouchesByEvent(event, pos) { + var touchArr = [], locView = this._glView; + var touch_event, touch, preLocation; + var locPreTouch = this._preTouchPoint; + var length = event.changedTouches.length; + for (var i = 0; i < length; i++) { + touch_event = event.changedTouches[i]; + if (touch_event) { + var location = void 0; + location = sys.BROWSER_TYPE_FIREFOX === sys.browserType ? locView.convertToLocationInView(touch_event.pageX, touch_event.pageY, pos, _vec2) : locView.convertToLocationInView(touch_event.clientX, touch_event.clientY, pos, _vec2); + if (null != touch_event.identifier) { + touch = new cc.Touch(location.x, location.y, touch_event.identifier); + preLocation = this.getPreTouch(touch).getLocation(); + touch._setPrevPoint(preLocation.x, preLocation.y); + this.setPreTouch(touch); + } else { + touch = new cc.Touch(location.x, location.y); + touch._setPrevPoint(locPreTouch.x, locPreTouch.y); + } + locPreTouch.x = location.x; + locPreTouch.y = location.y; + touchArr.push(touch); + } + } + return touchArr; + }, + registerSystemEvent: function registerSystemEvent(element) { + if (this._isRegisterEvent) return; + this._glView = cc.view; + var selfPointer = this; + var canvasBoundingRect = this._canvasBoundingRect; + window.addEventListener("resize", this._updateCanvasBoundingRect.bind(this)); + var prohibition = sys.isMobile; + var supportMouse = "mouse" in sys.capabilities; + var supportTouches = "touches" in sys.capabilities; + if (supportMouse) { + if (!prohibition) { + window.addEventListener("mousedown", (function() { + selfPointer._mousePressed = true; + }), false); + window.addEventListener("mouseup", (function(event) { + if (!selfPointer._mousePressed) return; + selfPointer._mousePressed = false; + var location = selfPointer.getPointByEvent(event, canvasBoundingRect); + if (!cc.rect(canvasBoundingRect.left, canvasBoundingRect.top, canvasBoundingRect.width, canvasBoundingRect.height).contains(location)) { + selfPointer.handleTouchesEnd([ selfPointer.getTouchByXY(location.x, location.y, canvasBoundingRect) ]); + var mouseEvent = selfPointer.getMouseEvent(location, canvasBoundingRect, cc.Event.EventMouse.UP); + mouseEvent.setButton(event.button); + eventManager.dispatchEvent(mouseEvent); + } + }), false); + } + var EventMouse = cc.Event.EventMouse; + var _mouseEventsOnElement = [ !prohibition && [ "mousedown", EventMouse.DOWN, function(event, mouseEvent, location, canvasBoundingRect) { + selfPointer._mousePressed = true; + selfPointer.handleTouchesBegin([ selfPointer.getTouchByXY(location.x, location.y, canvasBoundingRect) ]); + element.focus(); + } ], !prohibition && [ "mouseup", EventMouse.UP, function(event, mouseEvent, location, canvasBoundingRect) { + selfPointer._mousePressed = false; + selfPointer.handleTouchesEnd([ selfPointer.getTouchByXY(location.x, location.y, canvasBoundingRect) ]); + } ], !prohibition && [ "mousemove", EventMouse.MOVE, function(event, mouseEvent, location, canvasBoundingRect) { + selfPointer.handleTouchesMove([ selfPointer.getTouchByXY(location.x, location.y, canvasBoundingRect) ]); + selfPointer._mousePressed || mouseEvent.setButton(null); + } ], [ "mousewheel", EventMouse.SCROLL, function(event, mouseEvent) { + mouseEvent.setScrollData(0, event.wheelDelta); + } ], [ "DOMMouseScroll", EventMouse.SCROLL, function(event, mouseEvent) { + mouseEvent.setScrollData(0, -120 * event.detail); + } ] ]; + for (var i = 0; i < _mouseEventsOnElement.length; ++i) { + var entry = _mouseEventsOnElement[i]; + entry && (function() { + var name = entry[0]; + var type = entry[1]; + var handler = entry[2]; + element.addEventListener(name, (function(event) { + var location = selfPointer.getPointByEvent(event, canvasBoundingRect); + var mouseEvent = selfPointer.getMouseEvent(location, canvasBoundingRect, type); + mouseEvent.setButton(event.button); + handler(event, mouseEvent, location, canvasBoundingRect); + eventManager.dispatchEvent(mouseEvent); + event.stopPropagation(); + event.preventDefault(); + }), false); + })(); + } + } + if (window.navigator.msPointerEnabled) { + var _pointerEventsMap = { + MSPointerDown: selfPointer.handleTouchesBegin, + MSPointerMove: selfPointer.handleTouchesMove, + MSPointerUp: selfPointer.handleTouchesEnd, + MSPointerCancel: selfPointer.handleTouchesCancel + }; + var _loop = function _loop(eventName) { + var touchEvent = _pointerEventsMap[eventName]; + element.addEventListener(eventName, (function(event) { + var documentElement = document.documentElement; + canvasBoundingRect.adjustedLeft = canvasBoundingRect.left - documentElement.scrollLeft; + canvasBoundingRect.adjustedTop = canvasBoundingRect.top - documentElement.scrollTop; + touchEvent.call(selfPointer, [ selfPointer.getTouchByXY(event.clientX, event.clientY, canvasBoundingRect) ]); + event.stopPropagation(); + }), false); + }; + for (var eventName in _pointerEventsMap) _loop(eventName); + } + if (supportTouches) { + var _touchEventsMap = { + touchstart: function touchstart(touchesToHandle) { + selfPointer.handleTouchesBegin(touchesToHandle); + element.focus(); + }, + touchmove: function touchmove(touchesToHandle) { + selfPointer.handleTouchesMove(touchesToHandle); + }, + touchend: function touchend(touchesToHandle) { + selfPointer.handleTouchesEnd(touchesToHandle); + }, + touchcancel: function touchcancel(touchesToHandle) { + selfPointer.handleTouchesCancel(touchesToHandle); + } + }; + var registerTouchEvent = function registerTouchEvent(eventName) { + var handler = _touchEventsMap[eventName]; + element.addEventListener(eventName, (function(event) { + if (!event.changedTouches) return; + var body = document.body; + canvasBoundingRect.adjustedLeft = canvasBoundingRect.left - (body.scrollLeft || window.scrollX || 0); + canvasBoundingRect.adjustedTop = canvasBoundingRect.top - (body.scrollTop || window.scrollY || 0); + handler(selfPointer.getTouchesByEvent(event, canvasBoundingRect)); + event.stopPropagation(); + event.preventDefault(); + }), false); + }; + for (var _eventName in _touchEventsMap) registerTouchEvent(_eventName); + } + this._registerKeyboardEvent(); + this._isRegisterEvent = true; + }, + _registerKeyboardEvent: function _registerKeyboardEvent() {}, + _registerAccelerometerEvent: function _registerAccelerometerEvent() {}, + update: function update(dt) { + if (this._accelCurTime > this._accelInterval) { + this._accelCurTime -= this._accelInterval; + eventManager.dispatchEvent(new cc.Event.EventAcceleration(this._acceleration)); + } + this._accelCurTime += dt; + } + }; + module.exports = cc.internal.inputManager = inputManager; + }), { + "../event-manager": 112, + "./CCMacro": 126, + "./CCSys": 130 + } ], + 126: [ (function(require, module, exports) { + "use strict"; + cc.macro = { + RAD: Math.PI / 180, + DEG: 180 / Math.PI, + REPEAT_FOREVER: Number.MAX_VALUE - 1, + FLT_EPSILON: 1.192092896e-7, + MIN_ZINDEX: -Math.pow(2, 15), + MAX_ZINDEX: Math.pow(2, 15) - 1, + ONE: 1, + ZERO: 0, + SRC_ALPHA: 770, + SRC_ALPHA_SATURATE: 776, + SRC_COLOR: 768, + DST_ALPHA: 772, + DST_COLOR: 774, + ONE_MINUS_SRC_ALPHA: 771, + ONE_MINUS_SRC_COLOR: 769, + ONE_MINUS_DST_ALPHA: 773, + ONE_MINUS_DST_COLOR: 775, + ONE_MINUS_CONSTANT_ALPHA: 32772, + ONE_MINUS_CONSTANT_COLOR: 32770, + ORIENTATION_PORTRAIT: 1, + ORIENTATION_LANDSCAPE: 2, + ORIENTATION_AUTO: 3, + DENSITYDPI_DEVICE: "device-dpi", + DENSITYDPI_HIGH: "high-dpi", + DENSITYDPI_MEDIUM: "medium-dpi", + DENSITYDPI_LOW: "low-dpi", + FIX_ARTIFACTS_BY_STRECHING_TEXEL_TMX: true, + DIRECTOR_STATS_POSITION: cc.v2(0, 0), + ENABLE_STACKABLE_ACTIONS: true, + TOUCH_TIMEOUT: 5e3, + BATCH_VERTEX_COUNT: 2e4, + ENABLE_TILEDMAP_CULLING: true, + ENABLE_TRANSPARENT_CANVAS: false, + ENABLE_WEBGL_ANTIALIAS: false, + ENABLE_CULLING: false, + CLEANUP_IMAGE_CACHE: false, + SHOW_MESH_WIREFRAME: false, + SHOW_MESH_NORMAL: false, + ENABLE_MULTI_TOUCH: true, + ALLOW_IMAGE_BITMAP: !cc.sys.isMobile, + ENABLE_NATIVE_TTF_RENDERER: false + }; + Object.defineProperty(cc.macro, "ROTATE_ACTION_CCW", { + set: function set(value) { + cc.RotateTo && cc.RotateBy && (cc.RotateTo._reverse = cc.RotateBy._reverse = value); + } + }); + var SUPPORT_TEXTURE_FORMATS = [ ".pkm", ".pvr", ".webp", ".jpg", ".jpeg", ".bmp", ".png" ]; + cc.macro.SUPPORT_TEXTURE_FORMATS = SUPPORT_TEXTURE_FORMATS; + cc.macro.KEY = { + none: 0, + back: 6, + menu: 18, + backspace: 8, + tab: 9, + enter: 13, + shift: 16, + ctrl: 17, + alt: 18, + pause: 19, + capslock: 20, + escape: 27, + space: 32, + pageup: 33, + pagedown: 34, + end: 35, + home: 36, + left: 37, + up: 38, + right: 39, + down: 40, + select: 41, + insert: 45, + Delete: 46, + 0: 48, + 1: 49, + 2: 50, + 3: 51, + 4: 52, + 5: 53, + 6: 54, + 7: 55, + 8: 56, + 9: 57, + a: 65, + b: 66, + c: 67, + d: 68, + e: 69, + f: 70, + g: 71, + h: 72, + i: 73, + j: 74, + k: 75, + l: 76, + m: 77, + n: 78, + o: 79, + p: 80, + q: 81, + r: 82, + s: 83, + t: 84, + u: 85, + v: 86, + w: 87, + x: 88, + y: 89, + z: 90, + num0: 96, + num1: 97, + num2: 98, + num3: 99, + num4: 100, + num5: 101, + num6: 102, + num7: 103, + num8: 104, + num9: 105, + "*": 106, + "+": 107, + "-": 109, + numdel: 110, + "/": 111, + f1: 112, + f2: 113, + f3: 114, + f4: 115, + f5: 116, + f6: 117, + f7: 118, + f8: 119, + f9: 120, + f10: 121, + f11: 122, + f12: 123, + numlock: 144, + scrolllock: 145, + ";": 186, + semicolon: 186, + equal: 187, + "=": 187, + ",": 188, + comma: 188, + dash: 189, + ".": 190, + period: 190, + forwardslash: 191, + grave: 192, + "[": 219, + openbracket: 219, + backslash: 220, + "]": 221, + closebracket: 221, + quote: 222, + dpadLeft: 1e3, + dpadRight: 1001, + dpadUp: 1003, + dpadDown: 1004, + dpadCenter: 1005 + }; + cc.macro.ImageFormat = cc.Enum({ + JPG: 0, + PNG: 1, + TIFF: 2, + WEBP: 3, + PVR: 4, + ETC: 5, + S3TC: 6, + ATITC: 7, + TGA: 8, + RAWDATA: 9, + UNKNOWN: 10 + }); + cc.macro.BlendFactor = cc.Enum({ + ONE: 1, + ZERO: 0, + SRC_ALPHA: 770, + SRC_COLOR: 768, + DST_ALPHA: 772, + DST_COLOR: 774, + ONE_MINUS_SRC_ALPHA: 771, + ONE_MINUS_SRC_COLOR: 769, + ONE_MINUS_DST_ALPHA: 773, + ONE_MINUS_DST_COLOR: 775 + }); + cc.macro.TextAlignment = cc.Enum({ + LEFT: 0, + CENTER: 1, + RIGHT: 2 + }); + cc.macro.VerticalTextAlignment = cc.Enum({ + TOP: 0, + CENTER: 1, + BOTTOM: 2 + }); + module.exports = cc.macro; + }), {} ], + 127: [ (function(require, module, exports) { + "use strict"; + var js = require("./js"); + var CCClass = require("./CCClass"); + var Destroyed = 1; + var RealDestroyed = 2; + var ToDestroy = 4; + var DontSave = 8; + var EditorOnly = 16; + var Dirty = 32; + var DontDestroy = 64; + var Destroying = 128; + var Deactivating = 256; + var LockedInEditor = 512; + var HideInHierarchy = 1024; + var IsOnEnableCalled = 2048; + var IsEditorOnEnableCalled = 4096; + var IsPreloadStarted = 8192; + var IsOnLoadCalled = 16384; + var IsOnLoadStarted = 32768; + var IsStartCalled = 65536; + var IsRotationLocked = 1 << 17; + var IsScaleLocked = 1 << 18; + var IsAnchorLocked = 1 << 19; + var IsSizeLocked = 1 << 20; + var IsPositionLocked = 1 << 21; + var PersistentMask = ~(ToDestroy | Dirty | Destroying | DontDestroy | Deactivating | IsPreloadStarted | IsOnLoadStarted | IsOnLoadCalled | IsStartCalled | IsOnEnableCalled | IsEditorOnEnableCalled | IsRotationLocked | IsScaleLocked | IsAnchorLocked | IsSizeLocked | IsPositionLocked); + function CCObject() { + this._name = ""; + this._objFlags = 0; + } + CCClass.fastDefine("cc.Object", CCObject, { + _name: "", + _objFlags: 0 + }); + js.value(CCObject, "Flags", { + Destroyed: Destroyed, + DontSave: DontSave, + EditorOnly: EditorOnly, + Dirty: Dirty, + DontDestroy: DontDestroy, + PersistentMask: PersistentMask, + Destroying: Destroying, + Deactivating: Deactivating, + LockedInEditor: LockedInEditor, + HideInHierarchy: HideInHierarchy, + IsPreloadStarted: IsPreloadStarted, + IsOnLoadStarted: IsOnLoadStarted, + IsOnLoadCalled: IsOnLoadCalled, + IsOnEnableCalled: IsOnEnableCalled, + IsStartCalled: IsStartCalled, + IsEditorOnEnableCalled: IsEditorOnEnableCalled, + IsPositionLocked: IsPositionLocked, + IsRotationLocked: IsRotationLocked, + IsScaleLocked: IsScaleLocked, + IsAnchorLocked: IsAnchorLocked, + IsSizeLocked: IsSizeLocked + }); + var objectsToDestroy = []; + function deferredDestroy() { + var deleteCount = objectsToDestroy.length; + for (var i = 0; i < deleteCount; ++i) { + var obj = objectsToDestroy[i]; + obj._objFlags & Destroyed || obj._destroyImmediate(); + } + deleteCount === objectsToDestroy.length ? objectsToDestroy.length = 0 : objectsToDestroy.splice(0, deleteCount); + false; + } + js.value(CCObject, "_deferredDestroy", deferredDestroy); + false; + var prototype = CCObject.prototype; + js.getset(prototype, "name", (function() { + return this._name; + }), (function(value) { + this._name = value; + }), true); + js.get(prototype, "isValid", (function() { + return !(this._objFlags & Destroyed); + }), true); + false, false; + var deferredDestroyTimer = null; + prototype.destroy = function() { + if (this._objFlags & Destroyed) { + cc.warnID(5e3); + return false; + } + if (this._objFlags & ToDestroy) return false; + this._objFlags |= ToDestroy; + objectsToDestroy.push(this); + false; + return true; + }; + false, false; + function compileDestruct(obj, ctor) { + var shouldSkipId = obj instanceof cc._BaseNode || obj instanceof cc.Component; + var idToSkip = shouldSkipId ? "_id" : null; + var key, propsToReset = {}; + for (key in obj) if (obj.hasOwnProperty(key)) { + if (key === idToSkip) continue; + switch (typeof obj[key]) { + case "string": + propsToReset[key] = ""; + break; + + case "object": + case "function": + propsToReset[key] = null; + } + } + if (cc.Class._isCCClass(ctor)) { + var attrs = cc.Class.Attr.getClassAttrs(ctor); + var propList = ctor.__props__; + for (var i = 0; i < propList.length; i++) { + key = propList[i]; + var attrKey = key + cc.Class.Attr.DELIMETER + "default"; + if (attrKey in attrs) { + if (shouldSkipId && "_id" === key) continue; + switch (typeof attrs[attrKey]) { + case "string": + propsToReset[key] = ""; + break; + + case "object": + case "function": + propsToReset[key] = null; + break; + + case "undefined": + propsToReset[key] = void 0; + } + } + } + } + true; + var func = ""; + for (key in propsToReset) { + var statement; + statement = CCClass.IDENTIFIER_RE.test(key) ? "o." + key + "=" : "o[" + CCClass.escapeForJS(key) + "]="; + var val = propsToReset[key]; + "" === val && (val = '""'); + func += statement + val + ";\n"; + } + return Function("o", func); + } + prototype._destruct = function() { + var ctor = this.constructor; + var destruct = ctor.__destruct__; + if (!destruct) { + destruct = compileDestruct(this, ctor); + js.value(ctor, "__destruct__", destruct, true); + } + destruct(this); + }; + prototype._onPreDestroy = null; + prototype._destroyImmediate = function() { + if (this._objFlags & Destroyed) { + cc.errorID(5e3); + return; + } + this._onPreDestroy && this._onPreDestroy(); + true; + this._destruct(); + this._objFlags |= Destroyed; + }; + false; + prototype._deserialize = null; + cc.isValid = function(value, strictMode) { + return "object" === typeof value ? !!value && !(value._objFlags & (strictMode ? Destroyed | ToDestroy : Destroyed)) : "undefined" !== typeof value; + }; + false, false; + cc.Object = module.exports = CCObject; + }), { + "./CCClass": 121, + "./js": 142 + } ], + 128: [ (function(require, module, exports) { + "use strict"; + var js = require("../platform/js"); + cc.SAXParser = function() { + if (true, window.DOMParser) { + this._isSupportDOMParser = true; + this._parser = new DOMParser(); + } else { + this._isSupportDOMParser = false; + this._parser = null; + } + }; + cc.SAXParser.prototype = { + constructor: cc.SAXParser, + parse: function parse(xmlTxt) { + return this._parseXML(xmlTxt); + }, + _parseXML: function _parseXML(textxml) { + var xmlDoc; + if (this._isSupportDOMParser) xmlDoc = this._parser.parseFromString(textxml, "text/xml"); else { + xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); + xmlDoc.async = "false"; + xmlDoc.loadXML(textxml); + } + return xmlDoc; + } + }; + cc.PlistParser = function() { + cc.SAXParser.call(this); + }; + js.extend(cc.PlistParser, cc.SAXParser); + js.mixin(cc.PlistParser.prototype, { + parse: function parse(xmlTxt) { + var xmlDoc = this._parseXML(xmlTxt); + var plist = xmlDoc.documentElement; + if ("plist" !== plist.tagName) { + cc.warnID(5100); + return {}; + } + var node = null; + for (var i = 0, len = plist.childNodes.length; i < len; i++) { + node = plist.childNodes[i]; + if (1 === node.nodeType) break; + } + xmlDoc = null; + return this._parseNode(node); + }, + _parseNode: function _parseNode(node) { + var data = null, tagName = node.tagName; + if ("dict" === tagName) data = this._parseDict(node); else if ("array" === tagName) data = this._parseArray(node); else if ("string" === tagName) if (1 === node.childNodes.length) data = node.firstChild.nodeValue; else { + data = ""; + for (var i = 0; i < node.childNodes.length; i++) data += node.childNodes[i].nodeValue; + } else "false" === tagName ? data = false : "true" === tagName ? data = true : "real" === tagName ? data = parseFloat(node.firstChild.nodeValue) : "integer" === tagName && (data = parseInt(node.firstChild.nodeValue, 10)); + return data; + }, + _parseArray: function _parseArray(node) { + var data = []; + for (var i = 0, len = node.childNodes.length; i < len; i++) { + var child = node.childNodes[i]; + if (1 !== child.nodeType) continue; + data.push(this._parseNode(child)); + } + return data; + }, + _parseDict: function _parseDict(node) { + var data = {}; + var key = null; + for (var i = 0, len = node.childNodes.length; i < len; i++) { + var child = node.childNodes[i]; + if (1 !== child.nodeType) continue; + "key" === child.tagName ? key = child.firstChild.nodeValue : data[key] = this._parseNode(child); + } + return data; + } + }); + cc.saxParser = new cc.SAXParser(); + cc.plistParser = new cc.PlistParser(); + module.exports = { + saxParser: cc.saxParser, + plistParser: cc.plistParser + }; + }), { + "../platform/js": 142 + } ], + 129: [ (function(require, module, exports) { + "use strict"; + cc.screen = { + _supportsFullScreen: false, + _onfullscreenchange: null, + _onfullscreenerror: null, + _preOnFullScreenChange: null, + _preOnFullScreenError: null, + _preOnTouch: null, + _touchEvent: "", + _fn: null, + _fnMap: [ [ "requestFullscreen", "exitFullscreen", "fullscreenchange", "fullscreenEnabled", "fullscreenElement", "fullscreenerror" ], [ "requestFullScreen", "exitFullScreen", "fullScreenchange", "fullScreenEnabled", "fullScreenElement", "fullscreenerror" ], [ "webkitRequestFullScreen", "webkitCancelFullScreen", "webkitfullscreenchange", "webkitIsFullScreen", "webkitCurrentFullScreenElement", "webkitfullscreenerror" ], [ "mozRequestFullScreen", "mozCancelFullScreen", "mozfullscreenchange", "mozFullScreen", "mozFullScreenElement", "mozfullscreenerror" ], [ "msRequestFullscreen", "msExitFullscreen", "MSFullscreenChange", "msFullscreenEnabled", "msFullscreenElement", "msfullscreenerror" ] ], + init: function init() { + this._fn = {}; + var i, l, val, map = this._fnMap, valL; + for (i = 0, l = map.length; i < l; i++) { + val = map[i]; + if (val && "undefined" !== typeof document[val[1]]) { + for (i = 0, valL = val.length; i < valL; i++) this._fn[map[0][i]] = val[i]; + break; + } + } + this._supportsFullScreen = void 0 !== this._fn.requestFullscreen; + this._touchEvent = "ontouchend" in window ? "touchend" : "mousedown"; + }, + fullScreen: function fullScreen() { + return !!this._supportsFullScreen && !!(document[this._fn.fullscreenElement] || document[this._fn.webkitFullscreenElement] || document[this._fn.mozFullScreenElement]); + }, + requestFullScreen: function requestFullScreen(element, onFullScreenChange, onFullScreenError) { + if (element && "video" === element.tagName.toLowerCase()) { + if (cc.sys.os === cc.sys.OS_IOS && cc.sys.isBrowser && element.readyState > 0) { + element.webkitEnterFullscreen && element.webkitEnterFullscreen(); + return; + } + element.setAttribute("x5-video-player-fullscreen", "true"); + } + if (!this._supportsFullScreen) return; + element = element || document.documentElement; + if (onFullScreenChange) { + var eventName = this._fn.fullscreenchange; + this._onfullscreenchange && document.removeEventListener(eventName, this._onfullscreenchange); + this._onfullscreenchange = onFullScreenChange; + document.addEventListener(eventName, onFullScreenChange, false); + } + if (onFullScreenError) { + var _eventName = this._fn.fullscreenerror; + this._onfullscreenerror && document.removeEventListener(_eventName, this._onfullscreenerror); + this._onfullscreenerror = onFullScreenError; + document.addEventListener(_eventName, onFullScreenError, { + once: true + }); + } + var requestPromise = element[this._fn.requestFullscreen](); + "undefined" === typeof document[this._fn.fullscreenerror] && window.Promise && requestPromise instanceof Promise && requestPromise["catch"]((function(err) {})); + }, + exitFullScreen: function exitFullScreen(element) { + if (element && "video" === element.tagName.toLowerCase()) { + if (cc.sys.os === cc.sys.OS_IOS && cc.sys.isBrowser) { + element.webkitExitFullscreen && element.webkitExitFullscreen(); + return; + } + element.setAttribute("x5-video-player-fullscreen", "false"); + } + return !this._supportsFullScreen || document[this._fn.exitFullscreen](); + }, + autoFullScreen: function autoFullScreen(element, onFullScreenChange) { + element = element || document.body; + this._ensureFullScreen(element, onFullScreenChange); + this.requestFullScreen(element, onFullScreenChange); + }, + disableAutoFullScreen: function disableAutoFullScreen(element) { + var touchTarget = cc.game.canvas || element; + var touchEventName = this._touchEvent; + if (this._preOnTouch) { + touchTarget.removeEventListener(touchEventName, this._preOnTouch); + this._preOnTouch = null; + } + }, + _ensureFullScreen: function _ensureFullScreen(element, onFullScreenChange) { + var self = this; + var touchTarget = cc.game.canvas || element; + var fullScreenErrorEventName = this._fn.fullscreenerror; + var touchEventName = this._touchEvent; + function onFullScreenError() { + self._preOnFullScreenError = null; + function onTouch() { + self._preOnTouch = null; + self.requestFullScreen(element, onFullScreenChange); + } + self._preOnTouch && touchTarget.removeEventListener(touchEventName, self._preOnTouch); + self._preOnTouch = onTouch; + touchTarget.addEventListener(touchEventName, self._preOnTouch, { + once: true + }); + } + this._preOnFullScreenError && element.removeEventListener(fullScreenErrorEventName, this._preOnFullScreenError); + this._preOnFullScreenError = onFullScreenError; + element.addEventListener(fullScreenErrorEventName, onFullScreenError, { + once: true + }); + } + }; + cc.screen.init(); + }), {} ], + 130: [ (function(require, module, exports) { + "use strict"; + var settingPlatform; + true; + settingPlatform = window._CCSettings ? _CCSettings.platform : void 0; + var isVivoGame = "qgame" === settingPlatform; + var isOppoGame = "quickgame" === settingPlatform; + var isHuaweiGame = "huawei" === settingPlatform; + var isJKWGame = "jkw-game" === settingPlatform; + var isQttGame = "qtt-game" === settingPlatform; + var isLinkSure = "link-sure" === settingPlatform; + var _global = "undefined" === typeof window ? global : window; + function initSys() { + cc.sys = {}; + var sys = cc.sys; + sys.LANGUAGE_ENGLISH = "en"; + sys.LANGUAGE_CHINESE = "zh"; + sys.LANGUAGE_FRENCH = "fr"; + sys.LANGUAGE_ITALIAN = "it"; + sys.LANGUAGE_GERMAN = "de"; + sys.LANGUAGE_SPANISH = "es"; + sys.LANGUAGE_DUTCH = "du"; + sys.LANGUAGE_RUSSIAN = "ru"; + sys.LANGUAGE_KOREAN = "ko"; + sys.LANGUAGE_JAPANESE = "ja"; + sys.LANGUAGE_HUNGARIAN = "hu"; + sys.LANGUAGE_PORTUGUESE = "pt"; + sys.LANGUAGE_ARABIC = "ar"; + sys.LANGUAGE_NORWEGIAN = "no"; + sys.LANGUAGE_POLISH = "pl"; + sys.LANGUAGE_TURKISH = "tr"; + sys.LANGUAGE_UKRAINIAN = "uk"; + sys.LANGUAGE_ROMANIAN = "ro"; + sys.LANGUAGE_BULGARIAN = "bg"; + sys.LANGUAGE_UNKNOWN = "unknown"; + sys.OS_IOS = "iOS"; + sys.OS_ANDROID = "Android"; + sys.OS_WINDOWS = "Windows"; + sys.OS_MARMALADE = "Marmalade"; + sys.OS_LINUX = "Linux"; + sys.OS_BADA = "Bada"; + sys.OS_BLACKBERRY = "Blackberry"; + sys.OS_OSX = "OS X"; + sys.OS_WP8 = "WP8"; + sys.OS_WINRT = "WINRT"; + sys.OS_UNKNOWN = "Unknown"; + sys.UNKNOWN = -1; + sys.WIN32 = 0; + sys.LINUX = 1; + sys.MACOS = 2; + sys.ANDROID = 3; + sys.IPHONE = 4; + sys.IPAD = 5; + sys.BLACKBERRY = 6; + sys.NACL = 7; + sys.EMSCRIPTEN = 8; + sys.TIZEN = 9; + sys.WINRT = 10; + sys.WP8 = 11; + sys.MOBILE_BROWSER = 100; + sys.DESKTOP_BROWSER = 101; + sys.EDITOR_PAGE = 102; + sys.EDITOR_CORE = 103; + sys.WECHAT_GAME = 104; + sys.QQ_PLAY = 105; + sys.FB_PLAYABLE_ADS = 106; + sys.BAIDU_GAME = 107; + sys.VIVO_GAME = 108; + sys.OPPO_GAME = 109; + sys.HUAWEI_GAME = 110; + sys.XIAOMI_GAME = 111; + sys.JKW_GAME = 112; + sys.ALIPAY_GAME = 113; + sys.WECHAT_GAME_SUB = 114; + sys.BAIDU_GAME_SUB = 115; + sys.QTT_GAME = 116; + sys.BYTEDANCE_GAME = 117; + sys.BYTEDANCE_GAME_SUB = 118; + sys.LINKSURE = 119; + sys.BROWSER_TYPE_WECHAT = "wechat"; + sys.BROWSER_TYPE_ANDROID = "androidbrowser"; + sys.BROWSER_TYPE_IE = "ie"; + sys.BROWSER_TYPE_EDGE = "edge"; + sys.BROWSER_TYPE_QQ = "qqbrowser"; + sys.BROWSER_TYPE_MOBILE_QQ = "mqqbrowser"; + sys.BROWSER_TYPE_UC = "ucbrowser"; + sys.BROWSER_TYPE_UCBS = "ucbs"; + sys.BROWSER_TYPE_360 = "360browser"; + sys.BROWSER_TYPE_BAIDU_APP = "baiduboxapp"; + sys.BROWSER_TYPE_BAIDU = "baidubrowser"; + sys.BROWSER_TYPE_MAXTHON = "maxthon"; + sys.BROWSER_TYPE_OPERA = "opera"; + sys.BROWSER_TYPE_OUPENG = "oupeng"; + sys.BROWSER_TYPE_MIUI = "miuibrowser"; + sys.BROWSER_TYPE_FIREFOX = "firefox"; + sys.BROWSER_TYPE_SAFARI = "safari"; + sys.BROWSER_TYPE_CHROME = "chrome"; + sys.BROWSER_TYPE_LIEBAO = "liebao"; + sys.BROWSER_TYPE_QZONE = "qzone"; + sys.BROWSER_TYPE_SOUGOU = "sogou"; + sys.BROWSER_TYPE_HUAWEI = "huawei"; + sys.BROWSER_TYPE_UNKNOWN = "unknown"; + sys.isNative = (false, false); + sys.isBrowser = "object" === typeof window && "object" === typeof document && true; + sys.glExtension = function(name) { + return !!cc.renderer.device.ext(name); + }; + sys.getMaxJointMatrixSize = function() { + if (!sys._maxJointMatrixSize) { + var JOINT_MATRICES_SIZE = 50; + var LEFT_UNIFORM_SIZE = 10; + var gl = cc.game._renderContext; + var maxUniforms = Math.floor(gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS) / 4) - LEFT_UNIFORM_SIZE; + sys._maxJointMatrixSize = maxUniforms < JOINT_MATRICES_SIZE ? 0 : JOINT_MATRICES_SIZE; + } + return sys._maxJointMatrixSize; + }; + sys.getSafeAreaRect = function() { + var visibleSize = cc.view.getVisibleSize(); + return cc.rect(0, 0, visibleSize.width, visibleSize.height); + }; + if (_global.__globalAdapter && _global.__globalAdapter.adaptSys) _global.__globalAdapter.adaptSys(sys); else { + false; + var platform; + var languageCode; + var w; + var h; + var ratio; + var capabilities; + false, false; + var win = window, nav = win.navigator, doc = document, docEle = doc.documentElement; + var ua = nav.userAgent.toLowerCase(); + false; + sys.isMobile = /mobile|android|iphone|ipad/.test(ua); + "undefined" !== typeof FbPlayableAd ? sys.platform = sys.FB_PLAYABLE_ADS : sys.platform = sys.isMobile ? sys.MOBILE_BROWSER : sys.DESKTOP_BROWSER; + var currLanguage = nav.language; + currLanguage = currLanguage || nav.browserLanguage; + sys.languageCode = currLanguage.toLowerCase(); + currLanguage = currLanguage ? currLanguage.split("-")[0] : sys.LANGUAGE_ENGLISH; + sys.language = currLanguage; + var isAndroid = false, iOS = false, osVersion = "", osMainVersion = 0; + var uaResult = /android\s*(\d+(?:\.\d+)*)/i.exec(ua) || /android\s*(\d+(?:\.\d+)*)/i.exec(nav.platform); + if (uaResult) { + isAndroid = true; + osVersion = uaResult[1] || ""; + osMainVersion = parseInt(osVersion) || 0; + } + uaResult = /(iPad|iPhone|iPod).*OS ((\d+_?){2,3})/i.exec(ua); + if (uaResult) { + iOS = true; + osVersion = uaResult[2] || ""; + osMainVersion = parseInt(osVersion) || 0; + } else if (/(iPhone|iPad|iPod)/.exec(nav.platform) || "MacIntel" === nav.platform && nav.maxTouchPoints && nav.maxTouchPoints > 1) { + iOS = true; + osVersion = ""; + osMainVersion = 0; + } + var osName = sys.OS_UNKNOWN; + -1 !== nav.appVersion.indexOf("Win") ? osName = sys.OS_WINDOWS : iOS ? osName = sys.OS_IOS : -1 !== nav.appVersion.indexOf("Mac") ? osName = sys.OS_OSX : -1 !== nav.appVersion.indexOf("X11") && -1 === nav.appVersion.indexOf("Linux") ? osName = sys.OS_UNIX : isAndroid ? osName = sys.OS_ANDROID : -1 === nav.appVersion.indexOf("Linux") && -1 === ua.indexOf("ubuntu") || (osName = sys.OS_LINUX); + sys.os = osName; + sys.osVersion = osVersion; + sys.osMainVersion = osMainVersion; + sys.browserType = sys.BROWSER_TYPE_UNKNOWN; + (function() { + var typeReg1 = /mqqbrowser|micromessenger|qqbrowser|sogou|qzone|liebao|maxthon|ucbs|360 aphone|360browser|baiduboxapp|baidubrowser|maxthon|mxbrowser|miuibrowser/i; + var typeReg2 = /qq|ucbrowser|ubrowser|edge|HuaweiBrowser/i; + var typeReg3 = /chrome|safari|firefox|trident|opera|opr\/|oupeng/i; + var browserTypes = typeReg1.exec(ua) || typeReg2.exec(ua) || typeReg3.exec(ua); + var browserType = browserTypes ? browserTypes[0].toLowerCase() : sys.BROWSER_TYPE_UNKNOWN; + "safari" === browserType && isAndroid ? browserType = sys.BROWSER_TYPE_ANDROID : "qq" === browserType && ua.match(/android.*applewebkit/i) && (browserType = sys.BROWSER_TYPE_ANDROID); + var typeMap = { + micromessenger: sys.BROWSER_TYPE_WECHAT, + trident: sys.BROWSER_TYPE_IE, + edge: sys.BROWSER_TYPE_EDGE, + "360 aphone": sys.BROWSER_TYPE_360, + mxbrowser: sys.BROWSER_TYPE_MAXTHON, + "opr/": sys.BROWSER_TYPE_OPERA, + ubrowser: sys.BROWSER_TYPE_UC, + huaweibrowser: sys.BROWSER_TYPE_HUAWEI + }; + "qqbrowser" !== browserType && "mqqbrowser" !== browserType || ua.match(/wechat|micromessenger/i) && (browserType = sys.BROWSER_TYPE_WECHAT); + sys.browserType = typeMap[browserType] || browserType; + })(); + sys.browserVersion = ""; + (function() { + var versionReg1 = /(mqqbrowser|micromessenger|qqbrowser|sogou|qzone|liebao|maxthon|uc|ucbs|360 aphone|360|baiduboxapp|baidu|maxthon|mxbrowser|miui(?:.hybrid)?)(mobile)?(browser)?\/?([\d.]+)/i; + var versionReg2 = /(qq|chrome|safari|firefox|trident|opera|opr\/|oupeng)(mobile)?(browser)?\/?([\d.]+)/i; + var tmp = ua.match(versionReg1); + tmp || (tmp = ua.match(versionReg2)); + sys.browserVersion = tmp ? tmp[4] : ""; + })(); + var w = window.innerWidth || document.documentElement.clientWidth; + var h = window.innerHeight || document.documentElement.clientHeight; + var ratio = window.devicePixelRatio || 1; + sys.windowPixelResolution = { + width: ratio * w, + height: ratio * h + }; + sys._checkWebGLRenderMode = function() { + if (cc.game.renderType !== cc.game.RENDER_TYPE_WEBGL) throw new Error("This feature supports WebGL render mode only."); + }; + var _tmpCanvas1 = document.createElement("canvas"); + var create3DContext = function create3DContext(canvas, opt_attribs, opt_contextType) { + if (!opt_contextType) return create3DContext(canvas, opt_attribs, "webgl") || create3DContext(canvas, opt_attribs, "experimental-webgl") || create3DContext(canvas, opt_attribs, "webkit-3d") || create3DContext(canvas, opt_attribs, "moz-webgl") || null; + try { + return canvas.getContext(opt_contextType, opt_attribs); + } catch (e) { + return null; + } + }; + try { + var localStorage = sys.localStorage = win.localStorage; + localStorage.setItem("storage", ""); + localStorage.removeItem("storage"); + localStorage = null; + } catch (e) { + var warn = function warn() { + cc.warnID(5200); + }; + sys.localStorage = { + getItem: warn, + setItem: warn, + removeItem: warn, + clear: warn + }; + } + var _supportWebp = _tmpCanvas1.toDataURL("image/webp").startsWith("data:image/webp"); + var _supportCanvas = !!_tmpCanvas1.getContext("2d"); + var _supportWebGL = false; + false; + win.WebGLRenderingContext && (_supportWebGL = true); + var capabilities = sys.capabilities = { + canvas: _supportCanvas, + opengl: _supportWebGL, + webp: _supportWebp, + imageBitmap: false + }; + if ("undefined" !== typeof createImageBitmap && "undefined" !== typeof Blob) { + _tmpCanvas1.width = _tmpCanvas1.height = 2; + createImageBitmap(_tmpCanvas1, {}).then((function(imageBitmap) { + capabilities.imageBitmap = true; + imageBitmap.close && imageBitmap.close(); + }))["catch"]((function(err) {})); + } + (void 0 !== docEle["ontouchstart"] || void 0 !== doc["ontouchstart"] || nav.msPointerEnabled) && (capabilities["touches"] = true); + void 0 !== docEle["onmouseup"] && (capabilities["mouse"] = true); + void 0 !== docEle["onkeyup"] && (capabilities["keyboard"] = true); + (win.DeviceMotionEvent || win.DeviceOrientationEvent) && (capabilities["accelerometer"] = true); + var __audioSupport; + (function() { + var DEBUG = false; + var version = sys.browserVersion; + var supportWebAudio = !!(window.AudioContext || window.webkitAudioContext || window.mozAudioContext); + __audioSupport = { + ONLY_ONE: false, + WEB_AUDIO: supportWebAudio, + DELAY_CREATE_CTX: false + }; + sys.os === sys.OS_IOS && (__audioSupport.USE_LOADER_EVENT = "loadedmetadata"); + if (sys.browserType === sys.BROWSER_TYPE_FIREFOX) { + __audioSupport.DELAY_CREATE_CTX = true; + __audioSupport.USE_LOADER_EVENT = "canplay"; + } + sys.os === sys.OS_ANDROID && sys.browserType === sys.BROWSER_TYPE_UC && (__audioSupport.ONE_SOURCE = true); + DEBUG && setTimeout((function() { + cc.log("browse type: " + sys.browserType); + cc.log("browse version: " + version); + cc.log("MULTI_CHANNEL: " + __audioSupport.MULTI_CHANNEL); + cc.log("WEB_AUDIO: " + __audioSupport.WEB_AUDIO); + cc.log("AUTOPLAY: " + __audioSupport.AUTOPLAY); + }), 0); + })(); + try { + if (__audioSupport.WEB_AUDIO) { + __audioSupport.context = new (window.AudioContext || window.webkitAudioContext || window.mozAudioContext)(); + __audioSupport.DELAY_CREATE_CTX && setTimeout((function() { + __audioSupport.context = new (window.AudioContext || window.webkitAudioContext || window.mozAudioContext)(); + }), 0); + } + } catch (error) { + __audioSupport.WEB_AUDIO = false; + cc.logID(5201); + } + var formatSupport = []; + (function() { + var audio = document.createElement("audio"); + if (audio.canPlayType) { + var ogg = audio.canPlayType('audio/ogg; codecs="vorbis"'); + ogg && formatSupport.push(".ogg"); + var mp3 = audio.canPlayType("audio/mpeg"); + mp3 && formatSupport.push(".mp3"); + var wav = audio.canPlayType('audio/wav; codecs="1"'); + wav && formatSupport.push(".wav"); + var mp4 = audio.canPlayType("audio/mp4"); + mp4 && formatSupport.push(".mp4"); + var m4a = audio.canPlayType("audio/x-m4a"); + m4a && formatSupport.push(".m4a"); + } + })(); + __audioSupport.format = formatSupport; + sys.__audioSupport = __audioSupport; + } + sys.NetworkType = { + NONE: 0, + LAN: 1, + WWAN: 2 + }; + sys.getNetworkType = function() { + return sys.NetworkType.LAN; + }; + sys.getBatteryLevel = function() { + return 1; + }; + sys.garbageCollect = function() {}; + sys.restartVM = function() {}; + sys.isObjectValid = function(obj) { + if (obj) return true; + return false; + }; + sys.dump = function() { + var self = this; + var str = ""; + str += "isMobile : " + self.isMobile + "\r\n"; + str += "language : " + self.language + "\r\n"; + str += "browserType : " + self.browserType + "\r\n"; + str += "browserVersion : " + self.browserVersion + "\r\n"; + str += "capabilities : " + JSON.stringify(self.capabilities) + "\r\n"; + str += "os : " + self.os + "\r\n"; + str += "osVersion : " + self.osVersion + "\r\n"; + str += "platform : " + self.platform + "\r\n"; + str += "Using " + (cc.game.renderType === cc.game.RENDER_TYPE_WEBGL ? "WEBGL" : "CANVAS") + " renderer.\r\n"; + cc.log(str); + }; + sys.openURL = function(url) { + false, false; + window.open(url); + }; + sys.now = function() { + return Date.now ? Date.now() : +new Date(); + }; + return sys; + } + var sys = cc && cc.sys ? cc.sys : initSys(); + module.exports = sys; + }), {} ], + 131: [ (function(require, module, exports) { + "use strict"; + var EventTarget = require("../event/event-target"); + var js = require("../platform/js"); + var renderer = require("../renderer"); + require("../platform/CCClass"); + var __BrowserGetter = { + init: function init() { + this.html = document.getElementsByTagName("html")[0]; + }, + availWidth: function availWidth(frame) { + return frame && frame !== this.html ? frame.clientWidth : window.innerWidth; + }, + availHeight: function availHeight(frame) { + return frame && frame !== this.html ? frame.clientHeight : window.innerHeight; + }, + meta: { + width: "device-width" + }, + adaptationType: cc.sys.browserType + }; + cc.sys.os === cc.sys.OS_IOS && (__BrowserGetter.adaptationType = cc.sys.BROWSER_TYPE_SAFARI); + switch (__BrowserGetter.adaptationType) { + case cc.sys.BROWSER_TYPE_SAFARI: + case cc.sys.BROWSER_TYPE_SOUGOU: + case cc.sys.BROWSER_TYPE_UC: + __BrowserGetter.meta["minimal-ui"] = "true"; + __BrowserGetter.availWidth = function(frame) { + return frame.clientWidth; + }; + __BrowserGetter.availHeight = function(frame) { + return frame.clientHeight; + }; + } + var _scissorRect = null; + var View = function View() { + EventTarget.call(this); + var _t = this, _strategyer = cc.ContainerStrategy, _strategy = cc.ContentStrategy; + __BrowserGetter.init(this); + _t._frameSize = cc.size(0, 0); + _t._designResolutionSize = cc.size(0, 0); + _t._originalDesignResolutionSize = cc.size(0, 0); + _t._scaleX = 1; + _t._scaleY = 1; + _t._viewportRect = cc.rect(0, 0, 0, 0); + _t._visibleRect = cc.rect(0, 0, 0, 0); + _t._autoFullScreen = false; + _t._devicePixelRatio = 1; + false; + _t._maxPixelRatio = 2; + _t._retinaEnabled = false; + _t._resizeCallback = null; + _t._resizing = false; + _t._resizeWithBrowserSize = false; + _t._orientationChanging = true; + _t._isRotated = false; + _t._orientation = cc.macro.ORIENTATION_AUTO; + _t._isAdjustViewport = true; + _t._antiAliasEnabled = false; + _t._resolutionPolicy = null; + _t._rpExactFit = new cc.ResolutionPolicy(_strategyer.EQUAL_TO_FRAME, _strategy.EXACT_FIT); + _t._rpShowAll = new cc.ResolutionPolicy(_strategyer.EQUAL_TO_FRAME, _strategy.SHOW_ALL); + _t._rpNoBorder = new cc.ResolutionPolicy(_strategyer.EQUAL_TO_FRAME, _strategy.NO_BORDER); + _t._rpFixedHeight = new cc.ResolutionPolicy(_strategyer.EQUAL_TO_FRAME, _strategy.FIXED_HEIGHT); + _t._rpFixedWidth = new cc.ResolutionPolicy(_strategyer.EQUAL_TO_FRAME, _strategy.FIXED_WIDTH); + cc.game.once(cc.game.EVENT_ENGINE_INITED, this.init, this); + }; + cc.js.extend(View, EventTarget); + cc.js.mixin(View.prototype, { + init: function init() { + this._initFrameSize(); + var w = cc.game.canvas.width, h = cc.game.canvas.height; + this._designResolutionSize.width = w; + this._designResolutionSize.height = h; + this._originalDesignResolutionSize.width = w; + this._originalDesignResolutionSize.height = h; + this._viewportRect.width = w; + this._viewportRect.height = h; + this._visibleRect.width = w; + this._visibleRect.height = h; + cc.winSize.width = this._visibleRect.width; + cc.winSize.height = this._visibleRect.height; + cc.visibleRect && cc.visibleRect.init(this._visibleRect); + }, + _resizeEvent: function _resizeEvent(forceOrEvent) { + var view; + view = this.setDesignResolutionSize ? this : cc.view; + var sys = cc.sys; + if (sys.browserType === sys.BROWSER_TYPE_UC && sys.os === sys.OS_IOS) { + setTimeout((function() { + view._resizeEvent(forceOrEvent); + }), 0); + return; + } + var prevFrameW = view._frameSize.width, prevFrameH = view._frameSize.height, prevRotated = view._isRotated; + if (cc.sys.isMobile) { + var containerStyle = cc.game.container.style, margin = containerStyle.margin; + containerStyle.margin = "0"; + containerStyle.display = "none"; + view._initFrameSize(); + containerStyle.margin = margin; + containerStyle.display = "block"; + } else view._initFrameSize(); + if (true !== forceOrEvent && view._isRotated === prevRotated && view._frameSize.width === prevFrameW && view._frameSize.height === prevFrameH) return; + var width = view._originalDesignResolutionSize.width; + var height = view._originalDesignResolutionSize.height; + view._resizing = true; + width > 0 && view.setDesignResolutionSize(width, height, view._resolutionPolicy); + view._resizing = false; + view.emit("canvas-resize"); + view._resizeCallback && view._resizeCallback.call(); + }, + _orientationChange: function _orientationChange() { + cc.view._orientationChanging = true; + cc.view._resizeEvent(); + cc.sys.browserType === cc.sys.BROWSER_TYPE_SAFARI && cc.sys.isMobile && setTimeout((function() { + window.innerHeight > window.innerWidth && window.scrollTo(0, 1); + }), 500); + }, + _resize: function _resize() { + cc.view._resizeEvent(false); + }, + resizeWithBrowserSize: function resizeWithBrowserSize(enabled) { + if (enabled) { + if (!this._resizeWithBrowserSize) { + this._resizeWithBrowserSize = true; + window.addEventListener("resize", this._resize); + window.addEventListener("orientationchange", this._orientationChange); + } + } else if (this._resizeWithBrowserSize) { + this._resizeWithBrowserSize = false; + window.removeEventListener("resize", this._resize); + window.removeEventListener("orientationchange", this._orientationChange); + } + }, + setResizeCallback: function setResizeCallback(callback) { + false; + "function" !== typeof callback && null != callback || (this._resizeCallback = callback); + }, + setOrientation: function setOrientation(orientation) { + orientation &= cc.macro.ORIENTATION_AUTO; + if (orientation && this._orientation !== orientation) { + this._orientation = orientation; + var designWidth = this._originalDesignResolutionSize.width; + var designHeight = this._originalDesignResolutionSize.height; + this.setDesignResolutionSize(designWidth, designHeight, this._resolutionPolicy); + } + }, + _initFrameSize: function _initFrameSize() { + var locFrameSize = this._frameSize; + var w = __BrowserGetter.availWidth(cc.game.frame); + var h = __BrowserGetter.availHeight(cc.game.frame); + var isLandscape = w >= h; + if ((false, !cc.sys.isMobile) || isLandscape && this._orientation & cc.macro.ORIENTATION_LANDSCAPE || !isLandscape && this._orientation & cc.macro.ORIENTATION_PORTRAIT) { + locFrameSize.width = w; + locFrameSize.height = h; + cc.game.container.style["-webkit-transform"] = "rotate(0deg)"; + cc.game.container.style.transform = "rotate(0deg)"; + this._isRotated = false; + } else { + locFrameSize.width = h; + locFrameSize.height = w; + cc.game.container.style["-webkit-transform"] = "rotate(90deg)"; + cc.game.container.style.transform = "rotate(90deg)"; + cc.game.container.style["-webkit-transform-origin"] = "0px 0px 0px"; + cc.game.container.style.transformOrigin = "0px 0px 0px"; + this._isRotated = true; + } + this._orientationChanging && setTimeout((function() { + cc.view._orientationChanging = false; + }), 1e3); + }, + _setViewportMeta: function _setViewportMeta(metas, overwrite) { + var vp = document.getElementById("cocosMetaElement"); + vp && overwrite && document.head.removeChild(vp); + var elems = document.getElementsByName("viewport"), currentVP = elems ? elems[0] : null, content, key, pattern; + content = currentVP ? currentVP.content : ""; + vp = vp || document.createElement("meta"); + vp.id = "cocosMetaElement"; + vp.name = "viewport"; + vp.content = ""; + for (key in metas) if (-1 == content.indexOf(key)) content += "," + key + "=" + metas[key]; else if (overwrite) { + pattern = new RegExp(key + "s*=s*[^,]+"); + content = content.replace(pattern, key + "=" + metas[key]); + } + /^,/.test(content) && (content = content.substr(1)); + vp.content = content; + currentVP && (currentVP.content = content); + document.head.appendChild(vp); + }, + _adjustViewportMeta: function _adjustViewportMeta() { + if (this._isAdjustViewport && true) { + this._setViewportMeta(__BrowserGetter.meta, false); + this._isAdjustViewport = false; + } + }, + adjustViewportMeta: function adjustViewportMeta(enabled) { + this._isAdjustViewport = enabled; + }, + enableRetina: function enableRetina(enabled) { + false; + this._retinaEnabled = !!enabled; + }, + isRetinaEnabled: function isRetinaEnabled() { + false; + return this._retinaEnabled; + }, + enableAntiAlias: function enableAntiAlias(enabled) { + cc.warnID(9200); + if (this._antiAliasEnabled === enabled) return; + this._antiAliasEnabled = enabled; + if (cc.game.renderType === cc.game.RENDER_TYPE_WEBGL) { + var cache = cc.assetManager.assets; + cache.forEach((function(asset) { + if (asset instanceof cc.Texture2D) { + var Filter = cc.Texture2D.Filter; + enabled ? asset.setFilters(Filter.LINEAR, Filter.LINEAR) : asset.setFilters(Filter.NEAREST, Filter.NEAREST); + } + })); + } else if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS) { + var ctx = cc.game.canvas.getContext("2d"); + ctx.imageSmoothingEnabled = enabled; + ctx.mozImageSmoothingEnabled = enabled; + } + }, + isAntiAliasEnabled: function isAntiAliasEnabled() { + return this._antiAliasEnabled; + }, + enableAutoFullScreen: function enableAutoFullScreen(enabled) { + if (enabled && enabled !== this._autoFullScreen && cc.sys.isMobile) { + this._autoFullScreen = true; + cc.screen.autoFullScreen(cc.game.frame); + } else { + this._autoFullScreen = false; + cc.screen.disableAutoFullScreen(cc.game.frame); + } + }, + isAutoFullScreenEnabled: function isAutoFullScreenEnabled() { + return this._autoFullScreen; + }, + setCanvasSize: function setCanvasSize(width, height) { + var canvas = cc.game.canvas; + var container = cc.game.container; + canvas.width = width * this._devicePixelRatio; + canvas.height = height * this._devicePixelRatio; + canvas.style.width = width + "px"; + canvas.style.height = height + "px"; + container.style.width = width + "px"; + container.style.height = height + "px"; + this._resizeEvent(); + }, + getCanvasSize: function getCanvasSize() { + return cc.size(cc.game.canvas.width, cc.game.canvas.height); + }, + getFrameSize: function getFrameSize() { + return cc.size(this._frameSize.width, this._frameSize.height); + }, + setFrameSize: function setFrameSize(width, height) { + this._frameSize.width = width; + this._frameSize.height = height; + cc.game.frame.style.width = width + "px"; + cc.game.frame.style.height = height + "px"; + this._resizeEvent(true); + }, + getVisibleSize: function getVisibleSize() { + return cc.size(this._visibleRect.width, this._visibleRect.height); + }, + getVisibleSizeInPixel: function getVisibleSizeInPixel() { + return cc.size(this._visibleRect.width * this._scaleX, this._visibleRect.height * this._scaleY); + }, + getVisibleOrigin: function getVisibleOrigin() { + return cc.v2(this._visibleRect.x, this._visibleRect.y); + }, + getVisibleOriginInPixel: function getVisibleOriginInPixel() { + return cc.v2(this._visibleRect.x * this._scaleX, this._visibleRect.y * this._scaleY); + }, + getResolutionPolicy: function getResolutionPolicy() { + return this._resolutionPolicy; + }, + setResolutionPolicy: function setResolutionPolicy(resolutionPolicy) { + var _t = this; + if (resolutionPolicy instanceof cc.ResolutionPolicy) _t._resolutionPolicy = resolutionPolicy; else { + var _locPolicy = cc.ResolutionPolicy; + resolutionPolicy === _locPolicy.EXACT_FIT && (_t._resolutionPolicy = _t._rpExactFit); + resolutionPolicy === _locPolicy.SHOW_ALL && (_t._resolutionPolicy = _t._rpShowAll); + resolutionPolicy === _locPolicy.NO_BORDER && (_t._resolutionPolicy = _t._rpNoBorder); + resolutionPolicy === _locPolicy.FIXED_HEIGHT && (_t._resolutionPolicy = _t._rpFixedHeight); + resolutionPolicy === _locPolicy.FIXED_WIDTH && (_t._resolutionPolicy = _t._rpFixedWidth); + } + }, + setDesignResolutionSize: function setDesignResolutionSize(width, height, resolutionPolicy) { + if (!(width > 0 && height > 0)) { + cc.errorID(2200); + return; + } + this.setResolutionPolicy(resolutionPolicy); + var policy = this._resolutionPolicy; + policy && policy.preApply(this); + cc.sys.isMobile && this._adjustViewportMeta(); + this._orientationChanging = true; + this._resizing || this._initFrameSize(); + if (!policy) { + cc.logID(2201); + return; + } + this._originalDesignResolutionSize.width = this._designResolutionSize.width = width; + this._originalDesignResolutionSize.height = this._designResolutionSize.height = height; + var result = policy.apply(this, this._designResolutionSize); + if (result.scale && 2 === result.scale.length) { + this._scaleX = result.scale[0]; + this._scaleY = result.scale[1]; + } + if (result.viewport) { + var vp = this._viewportRect, vb = this._visibleRect, rv = result.viewport; + vp.x = rv.x; + vp.y = rv.y; + vp.width = rv.width; + vp.height = rv.height; + vb.x = 0; + vb.y = 0; + vb.width = rv.width / this._scaleX; + vb.height = rv.height / this._scaleY; + } + policy.postApply(this); + cc.winSize.width = this._visibleRect.width; + cc.winSize.height = this._visibleRect.height; + cc.visibleRect && cc.visibleRect.init(this._visibleRect); + renderer.updateCameraViewport(); + cc.internal.inputManager._updateCanvasBoundingRect(); + this.emit("design-resolution-changed"); + }, + getDesignResolutionSize: function getDesignResolutionSize() { + return cc.size(this._designResolutionSize.width, this._designResolutionSize.height); + }, + setRealPixelResolution: function setRealPixelResolution(width, height, resolutionPolicy) { + true, true; + this._setViewportMeta({ + width: width + }, true); + document.documentElement.style.width = width + "px"; + document.body.style.width = width + "px"; + document.body.style.left = "0px"; + document.body.style.top = "0px"; + this.setDesignResolutionSize(width, height, resolutionPolicy); + }, + setViewportInPoints: function setViewportInPoints(x, y, w, h) { + var locScaleX = this._scaleX, locScaleY = this._scaleY; + cc.game._renderContext.viewport(x * locScaleX + this._viewportRect.x, y * locScaleY + this._viewportRect.y, w * locScaleX, h * locScaleY); + }, + setScissorInPoints: function setScissorInPoints(x, y, w, h) { + var scaleX = this._scaleX, scaleY = this._scaleY; + var sx = Math.ceil(x * scaleX + this._viewportRect.x); + var sy = Math.ceil(y * scaleY + this._viewportRect.y); + var sw = Math.ceil(w * scaleX); + var sh = Math.ceil(h * scaleY); + var gl = cc.game._renderContext; + if (!_scissorRect) { + var boxArr = gl.getParameter(gl.SCISSOR_BOX); + _scissorRect = cc.rect(boxArr[0], boxArr[1], boxArr[2], boxArr[3]); + } + if (_scissorRect.x !== sx || _scissorRect.y !== sy || _scissorRect.width !== sw || _scissorRect.height !== sh) { + _scissorRect.x = sx; + _scissorRect.y = sy; + _scissorRect.width = sw; + _scissorRect.height = sh; + gl.scissor(sx, sy, sw, sh); + } + }, + isScissorEnabled: function isScissorEnabled() { + return cc.game._renderContext.isEnabled(gl.SCISSOR_TEST); + }, + getScissorRect: function getScissorRect() { + if (!_scissorRect) { + var boxArr = gl.getParameter(gl.SCISSOR_BOX); + _scissorRect = cc.rect(boxArr[0], boxArr[1], boxArr[2], boxArr[3]); + } + var scaleXFactor = 1 / this._scaleX; + var scaleYFactor = 1 / this._scaleY; + return cc.rect((_scissorRect.x - this._viewportRect.x) * scaleXFactor, (_scissorRect.y - this._viewportRect.y) * scaleYFactor, _scissorRect.width * scaleXFactor, _scissorRect.height * scaleYFactor); + }, + getViewportRect: function getViewportRect() { + return this._viewportRect; + }, + getScaleX: function getScaleX() { + return this._scaleX; + }, + getScaleY: function getScaleY() { + return this._scaleY; + }, + getDevicePixelRatio: function getDevicePixelRatio() { + return this._devicePixelRatio; + }, + convertToLocationInView: function convertToLocationInView(tx, ty, relatedPos, out) { + var result = out || cc.v2(); + var posLeft = relatedPos.adjustedLeft ? relatedPos.adjustedLeft : relatedPos.left; + var posTop = relatedPos.adjustedTop ? relatedPos.adjustedTop : relatedPos.top; + var x = this._devicePixelRatio * (tx - posLeft); + var y = this._devicePixelRatio * (posTop + relatedPos.height - ty); + if (this._isRotated) { + result.x = cc.game.canvas.width - y; + result.y = x; + } else { + result.x = x; + result.y = y; + } + return result; + }, + _convertMouseToLocationInView: function _convertMouseToLocationInView(in_out_point, relatedPos) { + var viewport = this._viewportRect, _t = this; + in_out_point.x = (_t._devicePixelRatio * (in_out_point.x - relatedPos.left) - viewport.x) / _t._scaleX; + in_out_point.y = (_t._devicePixelRatio * (relatedPos.top + relatedPos.height - in_out_point.y) - viewport.y) / _t._scaleY; + }, + _convertPointWithScale: function _convertPointWithScale(point) { + var viewport = this._viewportRect; + point.x = (point.x - viewport.x) / this._scaleX; + point.y = (point.y - viewport.y) / this._scaleY; + }, + _convertTouchesWithScale: function _convertTouchesWithScale(touches) { + var viewport = this._viewportRect, scaleX = this._scaleX, scaleY = this._scaleY, selTouch, selPoint, selPrePoint; + for (var i = 0; i < touches.length; i++) { + selTouch = touches[i]; + selPoint = selTouch._point; + selPrePoint = selTouch._prevPoint; + selPoint.x = (selPoint.x - viewport.x) / scaleX; + selPoint.y = (selPoint.y - viewport.y) / scaleY; + selPrePoint.x = (selPrePoint.x - viewport.x) / scaleX; + selPrePoint.y = (selPrePoint.y - viewport.y) / scaleY; + } + } + }); + cc.ContainerStrategy = cc.Class({ + name: "ContainerStrategy", + preApply: function preApply(view) {}, + apply: function apply(view, designedResolution) {}, + postApply: function postApply(view) {}, + _setupContainer: function _setupContainer(view, w, h) { + var locCanvas = cc.game.canvas; + this._setupStyle(view, w, h); + var devicePixelRatio = view._devicePixelRatio = 1; + false; + view.isRetinaEnabled() && (devicePixelRatio = view._devicePixelRatio = Math.min(view._maxPixelRatio, window.devicePixelRatio || 1)); + locCanvas.width = w * devicePixelRatio; + locCanvas.height = h * devicePixelRatio; + }, + _setupStyle: function _setupStyle(view, w, h) { + var locCanvas = cc.game.canvas; + var locContainer = cc.game.container; + if (cc.sys.os === cc.sys.OS_ANDROID) { + document.body.style.width = (view._isRotated ? h : w) + "px"; + document.body.style.height = (view._isRotated ? w : h) + "px"; + } + locContainer.style.width = locCanvas.style.width = w + "px"; + locContainer.style.height = locCanvas.style.height = h + "px"; + }, + _fixContainer: function _fixContainer() { + document.body.insertBefore(cc.game.container, document.body.firstChild); + var bs = document.body.style; + bs.width = window.innerWidth + "px"; + bs.height = window.innerHeight + "px"; + bs.overflow = "hidden"; + var contStyle = cc.game.container.style; + contStyle.position = "fixed"; + contStyle.left = contStyle.top = "0px"; + document.body.scrollTop = 0; + } + }); + cc.ContentStrategy = cc.Class({ + name: "ContentStrategy", + ctor: function ctor() { + this._result = { + scale: [ 1, 1 ], + viewport: null + }; + }, + _buildResult: function _buildResult(containerW, containerH, contentW, contentH, scaleX, scaleY) { + Math.abs(containerW - contentW) < 2 && (contentW = containerW); + Math.abs(containerH - contentH) < 2 && (contentH = containerH); + var viewport = cc.rect((containerW - contentW) / 2, (containerH - contentH) / 2, contentW, contentH); + cc.game.renderType === cc.game.RENDER_TYPE_CANVAS; + this._result.scale = [ scaleX, scaleY ]; + this._result.viewport = viewport; + return this._result; + }, + preApply: function preApply(view) {}, + apply: function apply(view, designedResolution) { + return { + scale: [ 1, 1 ] + }; + }, + postApply: function postApply(view) {} + }); + (function() { + var EqualToFrame = cc.Class({ + name: "EqualToFrame", + extends: cc.ContainerStrategy, + apply: function apply(view) { + var frameH = view._frameSize.height, containerStyle = cc.game.container.style; + this._setupContainer(view, view._frameSize.width, view._frameSize.height); + view._isRotated ? containerStyle.margin = "0 0 0 " + frameH + "px" : containerStyle.margin = "0px"; + containerStyle.padding = "0px"; + } + }); + var ProportionalToFrame = cc.Class({ + name: "ProportionalToFrame", + extends: cc.ContainerStrategy, + apply: function apply(view, designedResolution) { + var frameW = view._frameSize.width, frameH = view._frameSize.height, containerStyle = cc.game.container.style, designW = designedResolution.width, designH = designedResolution.height, scaleX = frameW / designW, scaleY = frameH / designH, containerW, containerH; + scaleX < scaleY ? (containerW = frameW, containerH = designH * scaleX) : (containerW = designW * scaleY, + containerH = frameH); + var offx = Math.round((frameW - containerW) / 2); + var offy = Math.round((frameH - containerH) / 2); + containerW = frameW - 2 * offx; + containerH = frameH - 2 * offy; + this._setupContainer(view, containerW, containerH); + true; + view._isRotated ? containerStyle.margin = "0 0 0 " + frameH + "px" : containerStyle.margin = "0px"; + containerStyle.paddingLeft = offx + "px"; + containerStyle.paddingRight = offx + "px"; + containerStyle.paddingTop = offy + "px"; + containerStyle.paddingBottom = offy + "px"; + } + }); + var EqualToWindow = cc.Class({ + name: "EqualToWindow", + extends: EqualToFrame, + preApply: function preApply(view) { + this._super(view); + cc.game.frame = document.documentElement; + }, + apply: function apply(view) { + this._super(view); + this._fixContainer(); + } + }); + var ProportionalToWindow = cc.Class({ + name: "ProportionalToWindow", + extends: ProportionalToFrame, + preApply: function preApply(view) { + this._super(view); + cc.game.frame = document.documentElement; + }, + apply: function apply(view, designedResolution) { + this._super(view, designedResolution); + this._fixContainer(); + } + }); + var OriginalContainer = cc.Class({ + name: "OriginalContainer", + extends: cc.ContainerStrategy, + apply: function apply(view) { + this._setupContainer(view, cc.game.canvas.width, cc.game.canvas.height); + } + }); + var _global = "undefined" === typeof window ? global : window; + var globalAdapter = _global.__globalAdapter; + if (globalAdapter) { + globalAdapter.adaptContainerStrategy && globalAdapter.adaptContainerStrategy(cc.ContainerStrategy.prototype); + globalAdapter.adaptView && globalAdapter.adaptView(View.prototype); + } + cc.ContainerStrategy.EQUAL_TO_FRAME = new EqualToFrame(); + cc.ContainerStrategy.PROPORTION_TO_FRAME = new ProportionalToFrame(); + cc.ContainerStrategy.ORIGINAL_CONTAINER = new OriginalContainer(); + var ExactFit = cc.Class({ + name: "ExactFit", + extends: cc.ContentStrategy, + apply: function apply(view, designedResolution) { + var containerW = cc.game.canvas.width, containerH = cc.game.canvas.height, scaleX = containerW / designedResolution.width, scaleY = containerH / designedResolution.height; + return this._buildResult(containerW, containerH, containerW, containerH, scaleX, scaleY); + } + }); + var ShowAll = cc.Class({ + name: "ShowAll", + extends: cc.ContentStrategy, + apply: function apply(view, designedResolution) { + var containerW = cc.game.canvas.width, containerH = cc.game.canvas.height, designW = designedResolution.width, designH = designedResolution.height, scaleX = containerW / designW, scaleY = containerH / designH, scale = 0, contentW, contentH; + scaleX < scaleY ? (scale = scaleX, contentW = containerW, contentH = designH * scale) : (scale = scaleY, + contentW = designW * scale, contentH = containerH); + return this._buildResult(containerW, containerH, contentW, contentH, scale, scale); + } + }); + var NoBorder = cc.Class({ + name: "NoBorder", + extends: cc.ContentStrategy, + apply: function apply(view, designedResolution) { + var containerW = cc.game.canvas.width, containerH = cc.game.canvas.height, designW = designedResolution.width, designH = designedResolution.height, scaleX = containerW / designW, scaleY = containerH / designH, scale, contentW, contentH; + scaleX < scaleY ? (scale = scaleY, contentW = designW * scale, contentH = containerH) : (scale = scaleX, + contentW = containerW, contentH = designH * scale); + return this._buildResult(containerW, containerH, contentW, contentH, scale, scale); + } + }); + var FixedHeight = cc.Class({ + name: "FixedHeight", + extends: cc.ContentStrategy, + apply: function apply(view, designedResolution) { + var containerW = cc.game.canvas.width, containerH = cc.game.canvas.height, designH = designedResolution.height, scale = containerH / designH, contentW = containerW, contentH = containerH; + return this._buildResult(containerW, containerH, contentW, contentH, scale, scale); + } + }); + var FixedWidth = cc.Class({ + name: "FixedWidth", + extends: cc.ContentStrategy, + apply: function apply(view, designedResolution) { + var containerW = cc.game.canvas.width, containerH = cc.game.canvas.height, designW = designedResolution.width, scale = containerW / designW, contentW = containerW, contentH = containerH; + return this._buildResult(containerW, containerH, contentW, contentH, scale, scale); + } + }); + cc.ContentStrategy.EXACT_FIT = new ExactFit(); + cc.ContentStrategy.SHOW_ALL = new ShowAll(); + cc.ContentStrategy.NO_BORDER = new NoBorder(); + cc.ContentStrategy.FIXED_HEIGHT = new FixedHeight(); + cc.ContentStrategy.FIXED_WIDTH = new FixedWidth(); + })(); + cc.ResolutionPolicy = cc.Class({ + name: "cc.ResolutionPolicy", + ctor: function ctor(containerStg, contentStg) { + this._containerStrategy = null; + this._contentStrategy = null; + this.setContainerStrategy(containerStg); + this.setContentStrategy(contentStg); + }, + preApply: function preApply(view) { + this._containerStrategy.preApply(view); + this._contentStrategy.preApply(view); + }, + apply: function apply(view, designedResolution) { + this._containerStrategy.apply(view, designedResolution); + return this._contentStrategy.apply(view, designedResolution); + }, + postApply: function postApply(view) { + this._containerStrategy.postApply(view); + this._contentStrategy.postApply(view); + }, + setContainerStrategy: function setContainerStrategy(containerStg) { + containerStg instanceof cc.ContainerStrategy && (this._containerStrategy = containerStg); + }, + setContentStrategy: function setContentStrategy(contentStg) { + contentStg instanceof cc.ContentStrategy && (this._contentStrategy = contentStg); + } + }); + js.get(cc.ResolutionPolicy.prototype, "canvasSize", (function() { + return cc.v2(cc.game.canvas.width, cc.game.canvas.height); + })); + cc.ResolutionPolicy.EXACT_FIT = 0; + cc.ResolutionPolicy.NO_BORDER = 1; + cc.ResolutionPolicy.SHOW_ALL = 2; + cc.ResolutionPolicy.FIXED_HEIGHT = 3; + cc.ResolutionPolicy.FIXED_WIDTH = 4; + cc.ResolutionPolicy.UNKNOWN = 5; + cc.view = new View(); + cc.winSize = cc.size(); + module.exports = cc.view; + }), { + "../event/event-target": 114, + "../platform/CCClass": 121, + "../platform/js": 142, + "../renderer": 152 + } ], + 132: [ (function(require, module, exports) { + "use strict"; + cc.visibleRect = { + topLeft: cc.v2(0, 0), + topRight: cc.v2(0, 0), + top: cc.v2(0, 0), + bottomLeft: cc.v2(0, 0), + bottomRight: cc.v2(0, 0), + bottom: cc.v2(0, 0), + center: cc.v2(0, 0), + left: cc.v2(0, 0), + right: cc.v2(0, 0), + width: 0, + height: 0, + init: function init(visibleRect) { + var w = this.width = visibleRect.width; + var h = this.height = visibleRect.height; + var l = visibleRect.x, b = visibleRect.y, t = b + h, r = l + w; + this.topLeft.x = l; + this.topLeft.y = t; + this.topRight.x = r; + this.topRight.y = t; + this.top.x = l + w / 2; + this.top.y = t; + this.bottomLeft.x = l; + this.bottomLeft.y = b; + this.bottomRight.x = r; + this.bottomRight.y = b; + this.bottom.x = l + w / 2; + this.bottom.y = b; + this.center.x = l + w / 2; + this.center.y = b + h / 2; + this.left.x = l; + this.left.y = b + h / 2; + this.right.x = r; + this.right.y = b + h / 2; + } + }; + }), {} ], + 133: [ (function(require, module, exports) { + "use strict"; + var js = require("./js"); + var isPlainEmptyObj = require("./utils").isPlainEmptyObj_DEV; + var DELIMETER = "$_$"; + function createAttrsSingle(owner, superAttrs) { + var attrs = superAttrs ? Object.create(superAttrs) : {}; + js.value(owner, "__attrs__", attrs); + return attrs; + } + function createAttrs(subclass) { + if ("function" !== typeof subclass) { + var instance = subclass; + return createAttrsSingle(instance, getClassAttrs(instance.constructor)); + } + var superClass; + var chains = cc.Class.getInheritanceChain(subclass); + for (var i = chains.length - 1; i >= 0; i--) { + var cls = chains[i]; + var attrs = cls.hasOwnProperty("__attrs__") && cls.__attrs__; + if (!attrs) { + superClass = chains[i + 1]; + createAttrsSingle(cls, superClass && superClass.__attrs__); + } + } + superClass = chains[0]; + createAttrsSingle(subclass, superClass && superClass.__attrs__); + return subclass.__attrs__; + } + function attr(ctor, propName, newAttrs) { + var attrs = getClassAttrs(ctor); + var _key; + true; + var prefix = propName + DELIMETER; + var ret = {}; + for (var key in attrs) key.startsWith(prefix) && (ret[key.slice(prefix.length)] = attrs[key]); + return ret; + } + function getClassAttrs(ctor) { + return ctor.hasOwnProperty("__attrs__") && ctor.__attrs__ || createAttrs(ctor); + } + function setClassAttr(ctor, propName, key, value) { + getClassAttrs(ctor)[propName + DELIMETER + key] = value; + } + function PrimitiveType(name, def) { + this.name = name; + this["default"] = def; + } + PrimitiveType.prototype.toString = function() { + return this.name; + }; + cc.Integer = new PrimitiveType("Integer", 0); + cc.Float = new PrimitiveType("Float", 0); + false; + cc.Boolean = new PrimitiveType("Boolean", false); + cc.String = new PrimitiveType("String", ""); + function getTypeChecker(type, attrName) { + return function(constructor, mainPropName) { + var propInfo = '"' + js.getClassName(constructor) + "." + mainPropName + '"'; + var mainPropAttrs = attr(constructor, mainPropName); + var mainPropAttrsType = mainPropAttrs.type; + mainPropAttrsType === cc.Integer || mainPropAttrsType === cc.Float ? mainPropAttrsType = "Number" : mainPropAttrsType !== cc.String && mainPropAttrsType !== cc.Boolean || (mainPropAttrsType = "" + mainPropAttrsType); + if (mainPropAttrsType !== type) { + cc.warnID(3604, propInfo); + return; + } + if (!mainPropAttrs.hasOwnProperty("default")) return; + var defaultVal = mainPropAttrs["default"]; + if ("undefined" === typeof defaultVal) return; + var isContainer = Array.isArray(defaultVal) || isPlainEmptyObj(defaultVal); + if (isContainer) return; + var defaultType = typeof defaultVal; + var type_lowerCase = type.toLowerCase(); + if (defaultType === type_lowerCase) if ("object" === type_lowerCase) { + if (!defaultVal || defaultVal instanceof mainPropAttrs.ctor) return; + cc.warnID(3605, propInfo, js.getClassName(mainPropAttrs.ctor)); + } else "Number" !== type && cc.warnID(3606, attrName, propInfo, type); else { + if ("function" === defaultType) return; + type === cc.String && null == defaultVal ? cc.warnID(3607, propInfo) : cc.warnID(3611, attrName, propInfo, defaultType); + } + delete mainPropAttrs.type; + }; + } + function getObjTypeChecker(typeCtor) { + return function(classCtor, mainPropName) { + getTypeChecker("Object", "type")(classCtor, mainPropName); + var defaultDef = getClassAttrs(classCtor)[mainPropName + DELIMETER + "default"]; + var defaultVal = require("./CCClass").getDefault(defaultDef); + if (!Array.isArray(defaultVal) && js.isChildClassOf(typeCtor, cc.ValueType)) { + var typename = js.getClassName(typeCtor); + var info = cc.js.formatStr('No need to specify the "type" of "%s.%s" because %s is a child class of ValueType.', js.getClassName(classCtor), mainPropName, typename); + defaultDef ? cc.log(info) : cc.warnID(3612, info, typename, js.getClassName(classCtor), mainPropName, typename); + } + }; + } + module.exports = { + PrimitiveType: PrimitiveType, + attr: attr, + getClassAttrs: getClassAttrs, + setClassAttr: setClassAttr, + DELIMETER: DELIMETER, + getTypeChecker_ET: (false, false) && getTypeChecker, + getObjTypeChecker_ET: (false, false) && getObjTypeChecker, + ScriptUuid: {} + }; + }), { + "./CCClass": 121, + "./js": 142, + "./utils": 145 + } ], + 134: [ (function(require, module, exports) { + "use strict"; + var js = require("./js"); + var fastRemoveAt = js.array.fastRemoveAt; + function empty() {} + function CallbackInfo() { + this.callback = empty; + this.target = void 0; + this.once = false; + } + CallbackInfo.prototype.set = function(callback, target, once) { + this.callback = callback; + this.target = target; + this.once = !!once; + }; + var callbackInfoPool = new js.Pool(function(info) { + info.callback = empty; + info.target = void 0; + info.once = false; + return true; + }, 32); + callbackInfoPool.get = function() { + return this._get() || new CallbackInfo(); + }; + function CallbackList() { + this.callbackInfos = []; + this.isInvoking = false; + this.containCanceled = false; + } + var proto = CallbackList.prototype; + proto.removeByCallback = function(cb) { + for (var i = 0; i < this.callbackInfos.length; ++i) { + var info = this.callbackInfos[i]; + if (info && info.callback === cb) { + callbackInfoPool.put(info); + fastRemoveAt(this.callbackInfos, i); + --i; + } + } + }; + proto.removeByTarget = function(target) { + for (var i = 0; i < this.callbackInfos.length; ++i) { + var info = this.callbackInfos[i]; + if (info && info.target === target) { + callbackInfoPool.put(info); + fastRemoveAt(this.callbackInfos, i); + --i; + } + } + }; + proto.cancel = function(index) { + var info = this.callbackInfos[index]; + if (info) { + callbackInfoPool.put(info); + this.callbackInfos[index] = null; + } + this.containCanceled = true; + }; + proto.cancelAll = function() { + for (var i = 0; i < this.callbackInfos.length; i++) { + var info = this.callbackInfos[i]; + if (info) { + callbackInfoPool.put(info); + this.callbackInfos[i] = null; + } + } + this.containCanceled = true; + }; + proto.purgeCanceled = function() { + for (var i = this.callbackInfos.length - 1; i >= 0; --i) { + var info = this.callbackInfos[i]; + info || fastRemoveAt(this.callbackInfos, i); + } + this.containCanceled = false; + }; + proto.clear = function() { + this.cancelAll(); + this.callbackInfos.length = 0; + this.isInvoking = false; + this.containCanceled = false; + }; + var MAX_SIZE = 16; + var callbackListPool = new js.Pool(function(info) { + info.callbackInfos = []; + info.isInvoking = false; + info.containCanceled = false; + return true; + }, MAX_SIZE); + callbackListPool.get = function() { + return this._get() || new CallbackList(); + }; + function CallbacksInvoker() { + this._callbackTable = js.createMap(true); + } + proto = CallbacksInvoker.prototype; + proto.on = function(key, callback, target, once) { + var list = this._callbackTable[key]; + list || (list = this._callbackTable[key] = callbackListPool.get()); + var info = callbackInfoPool.get(); + info.set(callback, target, once); + list.callbackInfos.push(info); + }; + proto.hasEventListener = function(key, callback, target) { + var list = this._callbackTable[key]; + if (!list) return false; + var infos = list.callbackInfos; + if (!callback) { + if (list.isInvoking) { + for (var i = 0; i < infos.length; ++i) if (infos[i]) return true; + return false; + } + return infos.length > 0; + } + for (var _i = 0; _i < infos.length; ++_i) { + var info = infos[_i]; + if (info && info.callback === callback && info.target === target) return true; + } + return false; + }; + proto.removeAll = function(keyOrTarget) { + if ("string" === typeof keyOrTarget) { + var list = this._callbackTable[keyOrTarget]; + if (list) if (list.isInvoking) list.cancelAll(); else { + list.clear(); + callbackListPool.put(list); + delete this._callbackTable[keyOrTarget]; + } + } else if (keyOrTarget) for (var key in this._callbackTable) { + var _list = this._callbackTable[key]; + if (_list.isInvoking) { + var infos = _list.callbackInfos; + for (var i = 0; i < infos.length; ++i) { + var info = infos[i]; + info && info.target === keyOrTarget && _list.cancel(i); + } + } else _list.removeByTarget(keyOrTarget); + } + }; + proto.off = function(key, callback, target) { + var list = this._callbackTable[key]; + if (list) { + var infos = list.callbackInfos; + for (var i = 0; i < infos.length; ++i) { + var info = infos[i]; + if (info && info.callback === callback && info.target === target) { + if (list.isInvoking) list.cancel(i); else { + fastRemoveAt(infos, i); + callbackInfoPool.put(info); + } + break; + } + } + } + }; + proto.emit = function(key, arg1, arg2, arg3, arg4, arg5) { + var list = this._callbackTable[key]; + if (list) { + var rootInvoker = !list.isInvoking; + list.isInvoking = true; + var infos = list.callbackInfos; + for (var i = 0, len = infos.length; i < len; ++i) { + var info = infos[i]; + if (info) { + var target = info.target; + var callback = info.callback; + info.once && this.off(key, callback, target); + target ? callback.call(target, arg1, arg2, arg3, arg4, arg5) : callback(arg1, arg2, arg3, arg4, arg5); + } + } + if (rootInvoker) { + list.isInvoking = false; + list.containCanceled && list.purgeCanceled(); + } + } + }; + false; + module.exports = CallbacksInvoker; + }), { + "./js": 142 + } ], + 135: [ (function(require, module, exports) { + "use strict"; + function deepFlatten(strList, array) { + for (var i = 0; i < array.length; i++) { + var item = array[i]; + Array.isArray(item) ? deepFlatten(strList, item) : strList.push(item); + } + } + function flattenCodeArray(array) { + var separator = ""; + var strList = []; + deepFlatten(strList, array); + return strList.join(separator); + } + module.exports = { + flattenCodeArray: flattenCodeArray + }; + }), {} ], + 136: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = deserialize; + exports.getDependUuidList = getDependUuidList; + exports.hasNativeDep = hasNativeDep; + exports.packCustomObjData = packCustomObjData; + exports.unpackJSONs = unpackJSONs; + var _js = _interopRequireDefault(require("./js")); + var _vec = _interopRequireDefault(require("../value-types/vec2")); + var _vec2 = _interopRequireDefault(require("../value-types/vec3")); + var _vec3 = _interopRequireDefault(require("../value-types/vec4")); + var _color = _interopRequireDefault(require("../value-types/color")); + var _size = _interopRequireDefault(require("../value-types/size")); + var _rect = _interopRequireDefault(require("../value-types/rect")); + var _quat = _interopRequireDefault(require("../value-types/quat")); + var _mat = _interopRequireDefault(require("../value-types/mat4")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var SUPPORT_MIN_FORMAT_VERSION = 1; + var EMPTY_PLACEHOLDER = 0; + var BuiltinValueTypes = [ _vec["default"], _vec2["default"], _vec3["default"], _quat["default"], _color["default"], _size["default"], _rect["default"], _mat["default"] ]; + function BuiltinValueTypeParsers_xyzw(obj, data) { + obj.x = data[1]; + obj.y = data[2]; + obj.z = data[3]; + obj.w = data[4]; + } + var BuiltinValueTypeSetters = [ function(obj, data) { + obj.x = data[1]; + obj.y = data[2]; + }, function(obj, data) { + obj.x = data[1]; + obj.y = data[2]; + obj.z = data[3]; + }, BuiltinValueTypeParsers_xyzw, BuiltinValueTypeParsers_xyzw, function(obj, data) { + obj._val = data[1]; + }, function(obj, data) { + obj.width = data[1]; + obj.height = data[2]; + }, function(obj, data) { + obj.x = data[1]; + obj.y = data[2]; + obj.width = data[3]; + obj.height = data[4]; + }, function(obj, data) { + _mat["default"].fromArray(obj, data, 1); + } ]; + function serializeBuiltinValueTypes(obj) { + var ctor = obj.constructor; + var typeId = BuiltinValueTypes.indexOf(ctor); + switch (ctor) { + case _vec["default"]: + return [ typeId, obj.x, obj.y ]; + + case _vec2["default"]: + return [ typeId, obj.x, obj.y, obj.z ]; + + case _vec3["default"]: + case _quat["default"]: + return [ typeId, obj.x, obj.y, obj.z, obj.w ]; + + case _color["default"]: + return [ typeId, obj._val ]; + + case _size["default"]: + return [ typeId, obj.width, obj.height ]; + + case _rect["default"]: + return [ typeId, obj.x, obj.y, obj.width, obj.height ]; + + case _mat["default"]: + var res = new Array(17); + res[0] = typeId; + _mat["default"].toArray(res, obj, 1); + return res; + + default: + return null; + } + } + var DataTypeID = { + SimpleType: 0, + InstanceRef: 1, + Array_InstanceRef: 2, + Array_AssetRefByInnerObj: 3, + Class: 4, + ValueTypeCreated: 5, + AssetRefByInnerObj: 6, + TRS: 7, + ValueType: 8, + Array_Class: 9, + CustomizedClass: 10, + Dict: 11, + Array: 12, + ARRAY_LENGTH: 13 + }; + var CLASS_TYPE = 0; + var CLASS_KEYS = 1; + var CLASS_PROP_TYPE_OFFSET = 2; + var MASK_CLASS = 0; + var OBJ_DATA_MASK = 0; + var CUSTOM_OBJ_DATA_CLASS = 0; + var CUSTOM_OBJ_DATA_CONTENT = 1; + var VALUETYPE_SETTER = 0; + var DICT_JSON_LAYOUT = 0; + var ARRAY_ITEM_VALUES = 0; + var Refs = { + EACH_RECORD_LENGTH: 3, + OWNER_OFFSET: 0, + KEY_OFFSET: 1, + TARGET_OFFSET: 2 + }; + var File = { + Version: 0, + Context: 0, + SharedUuids: 1, + SharedStrings: 2, + SharedClasses: 3, + SharedMasks: 4, + Instances: 5, + InstanceTypes: 6, + Refs: 7, + DependObjs: 8, + DependKeys: 9, + DependUuidIndices: 10, + ARRAY_LENGTH: 11 + }; + var PACKED_SECTIONS = 5; + var Details = (function() { + function Details() { + this.uuidObjList = null; + this.uuidPropList = null; + this.uuidList = null; + } + var _proto = Details.prototype; + _proto.init = function init(data) { + this.uuidObjList = data[8]; + this.uuidPropList = data[9]; + this.uuidList = data[10]; + }; + _proto.reset = function reset() { + this.uuidList = null; + this.uuidObjList = null; + this.uuidPropList = null; + }; + _proto.push = function push(obj, propName, uuid) { + this.uuidObjList.push(obj); + this.uuidPropList.push(propName); + this.uuidList.push(uuid); + }; + return Details; + })(); + Details.pool = new _js["default"].Pool(function(obj) { + obj.reset(); + }, 5); + Details.pool.get = function() { + return this._get() || new Details(); + }; + false, false; + function dereference(refs, instances, strings) { + var dataLength = refs.length - 1; + var i = 0; + var instanceOffset = 3 * refs[dataLength]; + for (;i < instanceOffset; i += 3) { + var _owner = refs[i]; + var target = instances[refs[i + 2]]; + var keyIndex = refs[i + 1]; + keyIndex >= 0 ? _owner[strings[keyIndex]] = target : _owner[~keyIndex] = target; + } + for (;i < dataLength; i += 3) { + var _owner2 = instances[refs[i]]; + var _target = instances[refs[i + 2]]; + var _keyIndex = refs[i + 1]; + _keyIndex >= 0 ? _owner2[strings[_keyIndex]] = _target : _owner2[~_keyIndex] = _target; + } + } + function deserializeCCObject(data, objectData) { + var mask = data[4][objectData[0]]; + var clazz = mask[0]; + var ctor = clazz[0]; + var obj = new ctor(); + var keys = clazz[1]; + var classTypeOffset = clazz[2]; + var maskTypeOffset = mask[mask.length - 1]; + var i = 1; + for (;i < maskTypeOffset; ++i) { + var _key = keys[mask[i]]; + obj[_key] = objectData[i]; + } + for (;i < objectData.length; ++i) { + var _key2 = keys[mask[i]]; + var _type = clazz[mask[i] + classTypeOffset]; + var op = ASSIGNMENTS[_type]; + op(data, obj, _key2, objectData[i]); + } + return obj; + } + function deserializeCustomCCObject(data, ctor, value) { + var obj = new ctor(); + obj._deserialize ? obj._deserialize(value, data[0]) : cc.errorID(5303, _js["default"].getClassName(ctor)); + return obj; + } + function assignSimple(data, owner, key, value) { + owner[key] = value; + } + function assignInstanceRef(data, owner, key, value) { + value >= 0 ? owner[key] = data[5][value] : data[7][3 * ~value] = owner; + } + function genArrayParser(parser) { + return function(data, owner, key, value) { + owner[key] = value; + for (var i = 0; i < value.length; ++i) parser(data, value, i, value[i]); + }; + } + function parseAssetRefByInnerObj(data, owner, key, value) { + owner[key] = null; + data[8][value] = owner; + } + function parseClass(data, owner, key, value) { + owner[key] = deserializeCCObject(data, value); + } + function parseCustomClass(data, owner, key, value) { + var ctor = data[3][value[0]]; + owner[key] = deserializeCustomCCObject(data, ctor, value[1]); + } + function parseValueTypeCreated(data, owner, key, value) { + BuiltinValueTypeSetters[value[0]](owner[key], value); + } + function parseValueType(data, owner, key, value) { + var val = new BuiltinValueTypes[value[0]](); + BuiltinValueTypeSetters[value[0]](val, value); + owner[key] = val; + } + function parseTRS(data, owner, key, value) { + var typedArray = owner[key]; + typedArray.set(value); + } + function parseDict(data, owner, key, value) { + var dict = value[0]; + owner[key] = dict; + for (var i = 1; i < value.length; i += 3) { + var _key3 = value[i]; + var _type2 = value[i + 1]; + var subValue = value[i + 2]; + var op = ASSIGNMENTS[_type2]; + op(data, dict, _key3, subValue); + } + } + function parseArray(data, owner, key, value) { + var array = value[0]; + owner[key] = array; + for (var i = 0; i < array.length; ++i) { + var subValue = array[i]; + var _type3 = value[i + 1]; + if (0 !== _type3) { + var op = ASSIGNMENTS[_type3]; + op(data, array, i, subValue); + } + } + } + var ASSIGNMENTS = new Array(13); + ASSIGNMENTS[0] = assignSimple; + ASSIGNMENTS[1] = assignInstanceRef; + ASSIGNMENTS[2] = genArrayParser(assignInstanceRef); + ASSIGNMENTS[3] = genArrayParser(parseAssetRefByInnerObj); + ASSIGNMENTS[4] = parseClass; + ASSIGNMENTS[5] = parseValueTypeCreated; + ASSIGNMENTS[6] = parseAssetRefByInnerObj; + ASSIGNMENTS[7] = parseTRS; + ASSIGNMENTS[8] = parseValueType; + ASSIGNMENTS[9] = genArrayParser(parseClass); + ASSIGNMENTS[10] = parseCustomClass; + ASSIGNMENTS[11] = parseDict; + ASSIGNMENTS[12] = parseArray; + function parseInstances(data) { + var instances = data[5]; + var instanceTypes = data[6]; + var instanceTypesLen = 0 === instanceTypes ? 0 : instanceTypes.length; + var rootIndex = instances[instances.length - 1]; + var normalObjectCount = instances.length - instanceTypesLen; + if ("number" !== typeof rootIndex) rootIndex = 0; else { + rootIndex < 0 && (rootIndex = ~rootIndex); + --normalObjectCount; + } + var insIndex = 0; + for (;insIndex < normalObjectCount; ++insIndex) instances[insIndex] = deserializeCCObject(data, instances[insIndex]); + var classes = data[3]; + for (var typeIndex = 0; typeIndex < instanceTypesLen; ++typeIndex, ++insIndex) { + var _type4 = instanceTypes[typeIndex]; + var eachData = instances[insIndex]; + if (_type4 >= 0) { + var ctor = classes[_type4]; + instances[insIndex] = deserializeCustomCCObject(data, ctor, eachData); + } else { + _type4 = ~_type4; + var op = ASSIGNMENTS[_type4]; + op(data, instances, insIndex, eachData); + } + } + return rootIndex; + } + function getMissingClass(hasCustomFinder, type) { + hasCustomFinder || deserialize.reportMissingClass(type); + return Object; + } + function doLookupClass(classFinder, type, container, index, silent, hasCustomFinder) { + var klass = classFinder(type); + if (!klass) { + if (silent) { + container[index] = (function(container, index, type) { + return function proxy() { + var klass = classFinder(type) || getMissingClass(hasCustomFinder, type); + container[index] = klass; + return new klass(); + }; + })(container, index, type); + return; + } + klass = getMissingClass(hasCustomFinder, type); + } + container[index] = klass; + } + function lookupClasses(data, silent, customFinder) { + var classFinder = customFinder || _js["default"]._getClassById; + var classes = data[3]; + for (var i = 0; i < classes.length; ++i) { + var klassLayout = classes[i]; + if ("string" !== typeof klassLayout) { + true; + if ("function" === typeof klassLayout[0]) throw new Error("Can not deserialize the same JSON data again."); + var _type5 = klassLayout[0]; + doLookupClass(classFinder, _type5, klassLayout, CLASS_TYPE, silent, customFinder); + } else doLookupClass(classFinder, klassLayout, classes, i, silent, customFinder); + } + } + function cacheMasks(data) { + var masks = data[4]; + if (masks) { + var classes = data[3]; + for (var i = 0; i < masks.length; ++i) { + var mask = masks[i]; + mask[0] = classes[mask[0]]; + } + } + } + function parseResult(data) { + var instances = data[5]; + var sharedStrings = data[2]; + var dependSharedUuids = data[1]; + var dependObjs = data[8]; + var dependKeys = data[9]; + var dependUuids = data[10]; + for (var i = 0; i < dependObjs.length; ++i) { + var _obj = dependObjs[i]; + "number" === typeof _obj && (dependObjs[i] = instances[_obj]); + var _key4 = dependKeys[i]; + if ("number" === typeof _key4) { + _key4 = _key4 >= 0 ? sharedStrings[_key4] : ~_key4; + dependKeys[i] = _key4; + } + var uuid = dependUuids[i]; + "number" === typeof uuid && (dependUuids[i] = dependSharedUuids[uuid]); + } + } + function deserialize(data, details, options) { + false; + "string" === typeof data && (data = JSON.parse(data)); + var borrowDetails = !details; + details = details || Details.pool.get(); + details.init(data); + options = options || {}; + var version = data[0]; + var preprocessed = false; + if ("object" === typeof version) { + preprocessed = version.preprocessed; + version = version.version; + } + if (version < 1) throw new Error(cc.debug.getError(5304, version)); + options._version = version; + options.result = details; + data[0] = options; + if (!preprocessed) { + lookupClasses(data, false, options.classFinder); + cacheMasks(data); + } + cc.game._isCloning = true; + var instances = data[5]; + var rootIndex = parseInstances(data); + cc.game._isCloning = false; + data[7] && dereference(data[7], instances, data[2]); + parseResult(data); + borrowDetails && Details.pool.put(details); + return instances[rootIndex]; + } + deserialize.Details = Details; + var FileInfo = function FileInfo(version) { + this.preprocessed = true; + this.version = version; + }; + function unpackJSONs(data, classFinder) { + if (data[0] < 1) throw new Error(cc.debug.getError(5304, data[0])); + lookupClasses(data, true, classFinder); + cacheMasks(data); + var version = new FileInfo(data[0]); + var sharedUuids = data[1]; + var sharedStrings = data[2]; + var sharedClasses = data[3]; + var sharedMasks = data[4]; + var sections = data[PACKED_SECTIONS]; + for (var i = 0; i < sections.length; ++i) sections[i].unshift(version, sharedUuids, sharedStrings, sharedClasses, sharedMasks); + return sections; + } + function packCustomObjData(type, data, hasNativeDep) { + return [ 1, EMPTY_PLACEHOLDER, EMPTY_PLACEHOLDER, [ type ], EMPTY_PLACEHOLDER, hasNativeDep ? [ data, -1 ] : [ data ], [ 0 ], EMPTY_PLACEHOLDER, [], [], [] ]; + } + function hasNativeDep(data) { + var instances = data[5]; + var rootInfo = instances[instances.length - 1]; + return "number" === typeof rootInfo && rootInfo < 0; + } + false; + function getDependUuidList(json) { + var sharedUuids = json[1]; + return json[10].map((function(index) { + return sharedUuids[index]; + })); + } + false, false; + false; + }), { + "../value-types/color": 219, + "../value-types/mat4": 222, + "../value-types/quat": 223, + "../value-types/rect": 224, + "../value-types/size": 225, + "../value-types/vec2": 229, + "../value-types/vec3": 230, + "../value-types/vec4": 231, + "./js": 142 + } ], + 137: [ (function(require, module, exports) { + "use strict"; + var _deserializeCompiled = _interopRequireDefault(require("./deserialize-compiled")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + _deserializeCompiled["default"].reportMissingClass = function(id) { + false; + cc.warnID(5302, id); + }; + var deserializeForEditor; + true; + cc.deserialize = _deserializeCompiled["default"]; + }), { + "./deserialize-compiled": 136, + "./deserialize-editor": void 0 + } ], + 138: [ (function(require, module, exports) { + "use strict"; + var NonUuidMark = "."; + function IdGenerater(category) { + this.id = 0 | 998 * Math.random(); + this.prefix = category ? category + NonUuidMark : ""; + } + IdGenerater.prototype.getNewId = function() { + return this.prefix + ++this.id; + }; + IdGenerater.global = new IdGenerater("global"); + module.exports = IdGenerater; + }), {} ], + 139: [ (function(require, module, exports) { + "use strict"; + require("./js"); + require("./CCClass"); + require("./CCClassDecorator"); + require("./CCEnum"); + require("./CCObject"); + require("./callbacks-invoker"); + require("./deserialize"); + require("./instantiate"); + require("./instantiate-jit"); + require("./requiring-frame"); + require("./CCSys"); + require("./CCMacro"); + true; + require("./CCVisibleRect"); + }), { + "./CCClass": 121, + "./CCClassDecorator": 122, + "./CCEnum": 123, + "./CCMacro": 126, + "./CCObject": 127, + "./CCSys": 130, + "./CCVisibleRect": 132, + "./callbacks-invoker": 134, + "./deserialize": 137, + "./instantiate": 141, + "./instantiate-jit": 140, + "./js": 142, + "./requiring-frame": 144 + } ], + 140: [ (function(require, module, exports) { + "use strict"; + var CCObject = require("./CCObject"); + var Destroyed = CCObject.Flags.Destroyed; + var PersistentMask = CCObject.Flags.PersistentMask; + var Attr = require("./attribute"); + var js = require("./js"); + var CCClass = require("./CCClass"); + var Compiler = require("./compiler"); + var DEFAULT = Attr.DELIMETER + "default"; + var IDENTIFIER_RE = CCClass.IDENTIFIER_RE; + var escapeForJS = CCClass.escapeForJS; + var VAR = "var "; + var LOCAL_OBJ = "o"; + var LOCAL_TEMP_OBJ = "t"; + var LOCAL_ARRAY = "a"; + var LINE_INDEX_OF_NEW_OBJ = 0; + var DEFAULT_MODULE_CACHE = { + "cc.Node": "cc.Node", + "cc.Sprite": "cc.Sprite", + "cc.Label": "cc.Label", + "cc.Button": "cc.Button", + "cc.Widget": "cc.Widget", + "cc.Animation": "cc.Animation", + "cc.ClickEvent": false, + "cc.PrefabInfo": false + }; + try { + !Float32Array.name && (Float32Array.name = "Float32Array"); + !Float64Array.name && (Float64Array.name = "Float64Array"); + !Int8Array.name && (Int8Array.name = "Int8Array"); + !Int16Array.name && (Int16Array.name = "Int16Array"); + !Int32Array.name && (Int32Array.name = "Int32Array"); + !Uint8Array.name && (Uint8Array.name = "Uint8Array"); + !Uint16Array.name && (Uint16Array.name = "Uint16Array"); + !Uint32Array.name && (Uint32Array.name = "Uint32Array"); + !Uint8ClampedArray.name && (Uint8ClampedArray.name = "Uint8ClampedArray"); + } catch (e) {} + function getTypedArrayName(constructor) { + if (constructor === Float32Array) return "Float32Array"; + if (constructor === Float64Array) return "Float64Array"; + if (constructor === Int8Array) return "Int8Array"; + if (constructor === Int16Array) return "Int16Array"; + if (constructor === Int32Array) return "Int32Array"; + if (constructor === Uint8Array) return "Uint8Array"; + if (constructor === Uint16Array) return "Uint16Array"; + if (constructor === Uint32Array) return "Uint32Array"; + if (constructor === Uint8ClampedArray) return "Uint8ClampedArray"; + throw new Error("Unknown TypedArray to instantiate: " + constructor); + } + function Declaration(varName, expression) { + this.varName = varName; + this.expression = expression; + } + Declaration.prototype.toString = function() { + return VAR + this.varName + "=" + this.expression + ";"; + }; + function mergeDeclaration(statement, expression) { + return expression instanceof Declaration ? new Declaration(expression.varName, statement + expression.expression) : statement + expression; + } + function writeAssignment(codeArray, statement, expression) { + if (Array.isArray(expression)) { + expression[0] = mergeDeclaration(statement, expression[0]); + codeArray.push(expression); + } else codeArray.push(mergeDeclaration(statement, expression) + ";"); + } + function Assignments(targetExpression) { + this._exps = []; + this._targetExp = targetExpression; + } + Assignments.prototype.append = function(key, expression) { + this._exps.push([ key, expression ]); + }; + Assignments.prototype.writeCode = function(codeArray) { + var targetVar; + if (this._exps.length > 1) { + codeArray.push(LOCAL_TEMP_OBJ + "=" + this._targetExp + ";"); + targetVar = LOCAL_TEMP_OBJ; + } else { + if (1 !== this._exps.length) return; + targetVar = this._targetExp; + } + for (var i = 0; i < this._exps.length; i++) { + var pair = this._exps[i]; + writeAssignment(codeArray, targetVar + getPropAccessor(pair[0]) + "=", pair[1]); + } + }; + Assignments.pool = new js.Pool(function(obj) { + obj._exps.length = 0; + obj._targetExp = null; + }, 1); + Assignments.pool.get = function(targetExpression) { + var cache = this._get() || new Assignments(); + cache._targetExp = targetExpression; + return cache; + }; + function equalsToDefault(def, value) { + if ("function" === typeof def) try { + def = def(); + } catch (e) { + return false; + } + if (def === value) return true; + if (def && value && "object" === typeof def && "object" === typeof value && def.constructor === value.constructor) if (def instanceof cc.ValueType) { + if (def.equals(value)) return true; + } else { + if (Array.isArray(def)) return 0 === def.length && 0 === value.length; + if (def.constructor === Object) return js.isEmptyObject(def) && js.isEmptyObject(value); + } + return false; + } + function getPropAccessor(key) { + return IDENTIFIER_RE.test(key) ? "." + key : "[" + escapeForJS(key) + "]"; + } + function Parser(obj, parent) { + this.parent = parent; + this.objsToClear_iN$t = []; + this.codeArray = []; + this.objs = []; + this.funcs = []; + this.funcModuleCache = js.createMap(); + js.mixin(this.funcModuleCache, DEFAULT_MODULE_CACHE); + this.globalVariables = []; + this.globalVariableId = 0; + this.localVariableId = 0; + this.codeArray.push(VAR + LOCAL_OBJ + "," + LOCAL_TEMP_OBJ + ";", "if(R){", LOCAL_OBJ + "=R;", "}else{", LOCAL_OBJ + "=R=new " + this.getFuncModule(obj.constructor, true) + "();", "}"); + js.value(obj, "_iN$t", { + globalVar: "R" + }, true); + this.objsToClear_iN$t.push(obj); + this.enumerateObject(this.codeArray, obj); + var globalVariablesDeclaration; + this.globalVariables.length > 0 && (globalVariablesDeclaration = VAR + this.globalVariables.join(",") + ";"); + var code = Compiler.flattenCodeArray([ "return (function(R){", globalVariablesDeclaration || [], this.codeArray, "return o;", "})" ]); + this.result = Function("O", "F", code)(this.objs, this.funcs); + for (var i = 0, len = this.objsToClear_iN$t.length; i < len; ++i) this.objsToClear_iN$t[i]._iN$t = null; + this.objsToClear_iN$t.length = 0; + } + var proto = Parser.prototype; + proto.getFuncModule = function(func, usedInNew) { + var clsName = js.getClassName(func); + if (clsName) { + var cache = this.funcModuleCache[clsName]; + if (cache) return cache; + if (void 0 === cache) { + var clsNameIsModule = -1 !== clsName.indexOf("."); + if (clsNameIsModule) try { + clsNameIsModule = func === Function("return " + clsName)(); + if (clsNameIsModule) { + this.funcModuleCache[clsName] = clsName; + return clsName; + } + } catch (e) {} + } + } + var index = this.funcs.indexOf(func); + if (index < 0) { + index = this.funcs.length; + this.funcs.push(func); + } + var res = "F[" + index + "]"; + usedInNew && (res = "(" + res + ")"); + this.funcModuleCache[clsName] = res; + return res; + }; + proto.getObjRef = function(obj) { + var index = this.objs.indexOf(obj); + if (index < 0) { + index = this.objs.length; + this.objs.push(obj); + } + return "O[" + index + "]"; + }; + proto.setValueType = function(codeArray, defaultValue, srcValue, targetExpression) { + var assignments = Assignments.pool.get(targetExpression); + var fastDefinedProps = defaultValue.constructor.__props__; + fastDefinedProps || (fastDefinedProps = Object.keys(defaultValue)); + for (var i = 0; i < fastDefinedProps.length; i++) { + var propName = fastDefinedProps[i]; + var prop = srcValue[propName]; + if (defaultValue[propName] === prop) continue; + var expression = this.enumerateField(srcValue, propName, prop); + assignments.append(propName, expression); + } + assignments.writeCode(codeArray); + Assignments.pool.put(assignments); + }; + proto.enumerateCCClass = function(codeArray, obj, klass) { + var props = klass.__values__; + var attrs = Attr.getClassAttrs(klass); + for (var p = 0; p < props.length; p++) { + var key = props[p]; + var val = obj[key]; + var defaultValue = attrs[key + DEFAULT]; + if (equalsToDefault(defaultValue, val)) continue; + if ("object" === typeof val && val instanceof cc.ValueType) { + defaultValue = CCClass.getDefault(defaultValue); + if (defaultValue && defaultValue.constructor === val.constructor) { + var targetExpression = LOCAL_OBJ + getPropAccessor(key); + this.setValueType(codeArray, defaultValue, val, targetExpression); + continue; + } + } + this.setObjProp(codeArray, obj, key, val); + } + }; + proto.instantiateArray = function(value) { + if (0 === value.length) return "[]"; + var arrayVar = LOCAL_ARRAY + ++this.localVariableId; + var declaration = new Declaration(arrayVar, "new Array(" + value.length + ")"); + var codeArray = [ declaration ]; + js.value(value, "_iN$t", { + globalVar: "", + source: codeArray + }, true); + this.objsToClear_iN$t.push(value); + for (var i = 0; i < value.length; ++i) { + var statement = arrayVar + "[" + i + "]="; + var expression = this.enumerateField(value, i, value[i]); + writeAssignment(codeArray, statement, expression); + } + return codeArray; + }; + proto.instantiateTypedArray = function(value) { + var type = value.constructor.name || getTypedArrayName(value.constructor); + if (0 === value.length) return "new " + type; + var arrayVar = LOCAL_ARRAY + ++this.localVariableId; + var declaration = new Declaration(arrayVar, "new " + type + "(" + value.length + ")"); + var codeArray = [ declaration ]; + value._iN$t = { + globalVar: "", + source: codeArray + }; + this.objsToClear_iN$t.push(value); + for (var i = 0; i < value.length; ++i) if (0 !== value[i]) { + var statement = arrayVar + "[" + i + "]="; + writeAssignment(codeArray, statement, value[i]); + } + return codeArray; + }; + proto.enumerateField = function(obj, key, value) { + if ("object" === typeof value && value) { + var _iN$t = value._iN$t; + if (_iN$t) { + var globalVar = _iN$t.globalVar; + if (!globalVar) { + globalVar = _iN$t.globalVar = "v" + ++this.globalVariableId; + this.globalVariables.push(globalVar); + var line = _iN$t.source[LINE_INDEX_OF_NEW_OBJ]; + _iN$t.source[LINE_INDEX_OF_NEW_OBJ] = mergeDeclaration(globalVar + "=", line); + } + return globalVar; + } + return ArrayBuffer.isView(value) ? this.instantiateTypedArray(value) : Array.isArray(value) ? this.instantiateArray(value) : this.instantiateObj(value); + } + if ("function" === typeof value) return this.getFuncModule(value); + if ("string" === typeof value) return escapeForJS(value); + "_objFlags" === key && obj instanceof CCObject && (value &= PersistentMask); + return value; + }; + proto.setObjProp = function(codeArray, obj, key, value) { + var statement = LOCAL_OBJ + getPropAccessor(key) + "="; + var expression = this.enumerateField(obj, key, value); + writeAssignment(codeArray, statement, expression); + }; + proto.enumerateObject = function(codeArray, obj) { + var klass = obj.constructor; + if (cc.Class._isCCClass(klass)) this.enumerateCCClass(codeArray, obj, klass); else for (var key in obj) { + if (!obj.hasOwnProperty(key) || 95 === key.charCodeAt(0) && 95 === key.charCodeAt(1) && "__type__" !== key) continue; + var value = obj[key]; + if ("object" === typeof value && value && value === obj._iN$t) continue; + this.setObjProp(codeArray, obj, key, value); + } + }; + proto.instantiateObj = function(obj) { + if (obj instanceof cc.ValueType) return CCClass.getNewValueTypeCode(obj); + if (obj instanceof cc.Asset) return this.getObjRef(obj); + if (obj._objFlags & Destroyed) return null; + var createCode; + var ctor = obj.constructor; + if (cc.Class._isCCClass(ctor)) { + if (this.parent) if (this.parent instanceof cc.Component) { + if (obj instanceof cc._BaseNode || obj instanceof cc.Component) return this.getObjRef(obj); + } else if (this.parent instanceof cc._BaseNode) if (obj instanceof cc._BaseNode) { + if (!obj.isChildOf(this.parent)) return this.getObjRef(obj); + } else if (obj instanceof cc.Component && !obj.node.isChildOf(this.parent)) return this.getObjRef(obj); + createCode = new Declaration(LOCAL_OBJ, "new " + this.getFuncModule(ctor, true) + "()"); + } else if (ctor === Object) createCode = new Declaration(LOCAL_OBJ, "{}"); else { + if (ctor) return this.getObjRef(obj); + createCode = new Declaration(LOCAL_OBJ, "Object.create(null)"); + } + var codeArray = [ createCode ]; + js.value(obj, "_iN$t", { + globalVar: "", + source: codeArray + }, true); + this.objsToClear_iN$t.push(obj); + this.enumerateObject(codeArray, obj); + return [ "(function(){", codeArray, "return o;})();" ]; + }; + function compile(node) { + var root = node instanceof cc._BaseNode && node; + var parser = new Parser(node, root); + return parser.result; + } + module.exports = { + compile: compile, + equalsToDefault: equalsToDefault + }; + false; + }), { + "./CCClass": 121, + "./CCObject": 127, + "./attribute": 133, + "./compiler": 135, + "./js": 142 + } ], + 141: [ (function(require, module, exports) { + "use strict"; + var CCObject = require("./CCObject"); + var CCValueType = require("../value-types/value-type"); + var Destroyed = CCObject.Flags.Destroyed; + var PersistentMask = CCObject.Flags.PersistentMask; + var _isDomNode = require("./utils").isDomNode; + var js = require("./js"); + function instantiate(original, internal_force) { + if (!internal_force) { + if ("object" !== typeof original || Array.isArray(original)) { + false; + return null; + } + if (!original) { + false; + return null; + } + if (!cc.isValid(original)) { + false; + return null; + } + false; + } + var clone; + if (original instanceof CCObject) { + if (original._instantiate) { + cc.game._isCloning = true; + clone = original._instantiate(null, true); + cc.game._isCloning = false; + return clone; + } + if (original instanceof cc.Asset) { + false; + return null; + } + } + cc.game._isCloning = true; + clone = doInstantiate(original); + cc.game._isCloning = false; + return clone; + } + var objsToClearTmpVar = []; + function doInstantiate(obj, parent) { + if (Array.isArray(obj)) { + false; + return null; + } + if (_isDomNode && _isDomNode(obj)) { + false; + return null; + } + var clone; + if (obj._iN$t) clone = obj._iN$t; else if (obj.constructor) { + var klass = obj.constructor; + clone = new klass(); + } else clone = Object.create(null); + enumerateObject(obj, clone, parent); + for (var i = 0, len = objsToClearTmpVar.length; i < len; ++i) objsToClearTmpVar[i]._iN$t = null; + objsToClearTmpVar.length = 0; + return clone; + } + function enumerateCCClass(klass, obj, clone, parent) { + var props = klass.__values__; + for (var p = 0; p < props.length; p++) { + var key = props[p]; + var value = obj[key]; + if ("object" === typeof value && value) { + var initValue = clone[key]; + initValue instanceof CCValueType && initValue.constructor === value.constructor ? initValue.set(value) : clone[key] = value._iN$t || instantiateObj(value, parent); + } else clone[key] = value; + } + } + function enumerateObject(obj, clone, parent) { + js.value(obj, "_iN$t", clone, true); + objsToClearTmpVar.push(obj); + var klass = obj.constructor; + if (cc.Class._isCCClass(klass)) enumerateCCClass(klass, obj, clone, parent); else for (var key in obj) { + if (!obj.hasOwnProperty(key) || 95 === key.charCodeAt(0) && 95 === key.charCodeAt(1) && "__type__" !== key) continue; + var value = obj[key]; + if ("object" === typeof value && value) { + if (value === clone) continue; + clone[key] = value._iN$t || instantiateObj(value, parent); + } else clone[key] = value; + } + obj instanceof CCObject && (clone._objFlags &= PersistentMask); + } + function instantiateObj(obj, parent) { + if (obj instanceof CCValueType) return obj.clone(); + if (obj instanceof cc.Asset) return obj; + var clone; + if (ArrayBuffer.isView(obj)) { + var len = obj.length; + clone = new obj.constructor(len); + obj._iN$t = clone; + objsToClearTmpVar.push(obj); + for (var i = 0; i < len; ++i) clone[i] = obj[i]; + return clone; + } + if (Array.isArray(obj)) { + var _len = obj.length; + clone = new Array(_len); + js.value(obj, "_iN$t", clone, true); + objsToClearTmpVar.push(obj); + for (var _i = 0; _i < _len; ++_i) { + var value = obj[_i]; + clone[_i] = "object" === typeof value && value ? value._iN$t || instantiateObj(value, parent) : value; + } + return clone; + } + if (obj._objFlags & Destroyed) return null; + var ctor = obj.constructor; + if (cc.Class._isCCClass(ctor)) { + if (parent) if (parent instanceof cc.Component) { + if (obj instanceof cc._BaseNode || obj instanceof cc.Component) return obj; + } else if (parent instanceof cc._BaseNode) if (obj instanceof cc._BaseNode) { + if (!obj.isChildOf(parent)) return obj; + } else if (obj instanceof cc.Component && !obj.node.isChildOf(parent)) return obj; + clone = new ctor(); + } else if (ctor === Object) clone = {}; else { + if (ctor) return obj; + clone = Object.create(null); + } + enumerateObject(obj, clone, parent); + return clone; + } + instantiate._clone = doInstantiate; + cc.instantiate = instantiate; + module.exports = instantiate; + }), { + "../value-types/value-type": 228, + "./CCObject": 127, + "./js": 142, + "./utils": 145 + } ], + 142: [ (function(require, module, exports) { + "use strict"; + var tempCIDGenerater = new (require("./id-generater"))("TmpCId."); + function _getPropertyDescriptor(obj, name) { + while (obj) { + var pd = Object.getOwnPropertyDescriptor(obj, name); + if (pd) return pd; + obj = Object.getPrototypeOf(obj); + } + return null; + } + function _copyprop(name, source, target) { + var pd = _getPropertyDescriptor(source, name); + Object.defineProperty(target, name, pd); + } + var js = { + isNumber: function isNumber(obj) { + return "number" === typeof obj || obj instanceof Number; + }, + isString: function isString(obj) { + return "string" === typeof obj || obj instanceof String; + }, + addon: function addon(obj) { + obj = obj || {}; + for (var i = 1, length = arguments.length; i < length; i++) { + var source = arguments[i]; + if (source) { + if ("object" !== typeof source) { + cc.errorID(5402, source); + continue; + } + for (var name in source) name in obj || _copyprop(name, source, obj); + } + } + return obj; + }, + mixin: function mixin(obj) { + obj = obj || {}; + for (var i = 1, length = arguments.length; i < length; i++) { + var source = arguments[i]; + if (source) { + if ("object" !== typeof source) { + cc.errorID(5403, source); + continue; + } + for (var name in source) _copyprop(name, source, obj); + } + } + return obj; + }, + extend: function extend(cls, base) { + false; + for (var p in base) base.hasOwnProperty(p) && (cls[p] = base[p]); + cls.prototype = Object.create(base.prototype, { + constructor: { + value: cls, + writable: true, + configurable: true + } + }); + return cls; + }, + getSuper: function getSuper(ctor) { + var proto = ctor.prototype; + var dunderProto = proto && Object.getPrototypeOf(proto); + return dunderProto && dunderProto.constructor; + }, + isChildClassOf: function isChildClassOf(subclass, superclass) { + if (subclass && superclass) { + if ("function" !== typeof subclass) return false; + if ("function" !== typeof superclass) { + false; + return false; + } + if (subclass === superclass) return true; + for (;;) { + subclass = js.getSuper(subclass); + if (!subclass) return false; + if (subclass === superclass) return true; + } + } + return false; + }, + clear: function clear(obj) { + var keys = Object.keys(obj); + for (var i = 0; i < keys.length; i++) delete obj[keys[i]]; + }, + isEmptyObject: function isEmptyObject(obj) { + for (var key in obj) return false; + return true; + }, + getPropertyDescriptor: _getPropertyDescriptor + }; + var tmpValueDesc = { + value: void 0, + enumerable: false, + writable: false, + configurable: true + }; + js.value = function(obj, prop, value, writable, enumerable) { + tmpValueDesc.value = value; + tmpValueDesc.writable = writable; + tmpValueDesc.enumerable = enumerable; + Object.defineProperty(obj, prop, tmpValueDesc); + tmpValueDesc.value = void 0; + }; + var tmpGetSetDesc = { + get: null, + set: null, + enumerable: false + }; + js.getset = function(obj, prop, getter, setter, enumerable, configurable) { + if ("function" !== typeof setter) { + enumerable = setter; + setter = void 0; + } + tmpGetSetDesc.get = getter; + tmpGetSetDesc.set = setter; + tmpGetSetDesc.enumerable = enumerable; + tmpGetSetDesc.configurable = configurable; + Object.defineProperty(obj, prop, tmpGetSetDesc); + tmpGetSetDesc.get = null; + tmpGetSetDesc.set = null; + }; + var tmpGetDesc = { + get: null, + enumerable: false, + configurable: false + }; + js.get = function(obj, prop, getter, enumerable, configurable) { + tmpGetDesc.get = getter; + tmpGetDesc.enumerable = enumerable; + tmpGetDesc.configurable = configurable; + Object.defineProperty(obj, prop, tmpGetDesc); + tmpGetDesc.get = null; + }; + var tmpSetDesc = { + set: null, + enumerable: false, + configurable: false + }; + js.set = function(obj, prop, setter, enumerable, configurable) { + tmpSetDesc.set = setter; + tmpSetDesc.enumerable = enumerable; + tmpSetDesc.configurable = configurable; + Object.defineProperty(obj, prop, tmpSetDesc); + tmpSetDesc.set = null; + }; + js.getClassName = function(objOrCtor) { + if ("function" === typeof objOrCtor) { + var prototype = objOrCtor.prototype; + if (prototype && prototype.hasOwnProperty("__classname__") && prototype.__classname__) return prototype.__classname__; + var retval = ""; + objOrCtor.name && (retval = objOrCtor.name); + if (objOrCtor.toString) { + var arr, str = objOrCtor.toString(); + arr = "[" === str.charAt(0) ? str.match(/\[\w+\s*(\w+)\]/) : str.match(/function\s*(\w+)/); + arr && 2 === arr.length && (retval = arr[1]); + } + return "Object" !== retval ? retval : ""; + } + if (objOrCtor && objOrCtor.constructor) return js.getClassName(objOrCtor.constructor); + return ""; + }; + function isTempClassId(id) { + return "string" !== typeof id || id.startsWith(tempCIDGenerater.prefix); + } + (function() { + var _idToClass = {}; + var _nameToClass = {}; + function setup(key, publicName, table) { + js.getset(js, publicName, (function() { + return Object.assign({}, table); + }), (function(value) { + js.clear(table); + Object.assign(table, value); + })); + return function(id, constructor) { + constructor.prototype.hasOwnProperty(key) && delete table[constructor.prototype[key]]; + js.value(constructor.prototype, key, id); + if (id) { + var registered = table[id]; + if (registered && registered !== constructor) { + var error = "A Class already exists with the same " + key + ' : "' + id + '".'; + false; + cc.error(error); + } else table[id] = constructor; + } + }; + } + js._setClassId = setup("__cid__", "_registeredClassIds", _idToClass); + var doSetClassName = setup("__classname__", "_registeredClassNames", _nameToClass); + js.setClassName = function(className, constructor) { + doSetClassName(className, constructor); + if (!constructor.prototype.hasOwnProperty("__cid__")) { + var id = className || tempCIDGenerater.getNewId(); + id && js._setClassId(id, constructor); + } + }; + js.unregisterClass = function() { + for (var i = 0; i < arguments.length; i++) { + var p = arguments[i].prototype; + var classId = p.__cid__; + classId && delete _idToClass[classId]; + var classname = p.__classname__; + classname && delete _nameToClass[classname]; + } + }; + js._getClassById = function(classId) { + return _idToClass[classId]; + }; + js.getClassByName = function(classname) { + return _nameToClass[classname]; + }; + js._getClassId = function(obj, allowTempId) { + allowTempId = "undefined" === typeof allowTempId || allowTempId; + var res; + if ("function" === typeof obj && obj.prototype.hasOwnProperty("__cid__")) { + res = obj.prototype.__cid__; + if (!allowTempId && (false, false) && isTempClassId(res)) return ""; + return res; + } + if (obj && obj.constructor) { + var prototype = obj.constructor.prototype; + if (prototype && prototype.hasOwnProperty("__cid__")) { + res = obj.__cid__; + if (!allowTempId && (false, false) && isTempClassId(res)) return ""; + return res; + } + } + return ""; + }; + })(); + js.obsolete = function(obj, obsoleted, newExpr, writable) { + var extractPropName = /([^.]+)$/; + var oldProp = extractPropName.exec(obsoleted)[0]; + var newProp = extractPropName.exec(newExpr)[0]; + function get() { + false; + return this[newProp]; + } + writable ? js.getset(obj, oldProp, get, (function(value) { + false; + this[newProp] = value; + })) : js.get(obj, oldProp, get); + }; + js.obsoletes = function(obj, objName, props, writable) { + for (var obsoleted in props) { + var newName = props[obsoleted]; + js.obsolete(obj, objName + "." + obsoleted, newName, writable); + } + }; + var REGEXP_NUM_OR_STR = /(%d)|(%s)/; + var REGEXP_STR = /%s/; + js.formatStr = function() { + var argLen = arguments.length; + if (0 === argLen) return ""; + var msg = arguments[0]; + if (1 === argLen) return "" + msg; + var hasSubstitution = "string" === typeof msg && REGEXP_NUM_OR_STR.test(msg); + if (hasSubstitution) for (var i = 1; i < argLen; ++i) { + var arg = arguments[i]; + var regExpToTest = "number" === typeof arg ? REGEXP_NUM_OR_STR : REGEXP_STR; + if (regExpToTest.test(msg)) { + var notReplaceFunction = "" + arg; + msg = msg.replace(regExpToTest, notReplaceFunction); + } else msg += " " + arg; + } else for (var _i = 1; _i < argLen; ++_i) msg += " " + arguments[_i]; + return msg; + }; + js.shiftArguments = function() { + var len = arguments.length - 1; + var args = new Array(len); + for (var i = 0; i < len; ++i) args[i] = arguments[i + 1]; + return args; + }; + js.createMap = function(forceDictMode) { + var map = Object.create(null); + if (forceDictMode) { + var INVALID_IDENTIFIER_1 = "."; + var INVALID_IDENTIFIER_2 = "/"; + map[INVALID_IDENTIFIER_1] = true; + map[INVALID_IDENTIFIER_2] = true; + delete map[INVALID_IDENTIFIER_1]; + delete map[INVALID_IDENTIFIER_2]; + } + return map; + }; + function removeAt(array, index) { + array.splice(index, 1); + } + function fastRemoveAt(array, index) { + var length = array.length; + if (index < 0 || index >= length) return; + array[index] = array[length - 1]; + array.length = length - 1; + } + function remove(array, value) { + var index = array.indexOf(value); + if (index >= 0) { + removeAt(array, index); + return true; + } + return false; + } + function fastRemove(array, value) { + var index = array.indexOf(value); + if (index >= 0) { + array[index] = array[array.length - 1]; + --array.length; + } + } + function verifyType(array, type) { + if (array && array.length > 0) for (var i = 0; i < array.length; i++) if (!(array[i] instanceof type)) { + cc.logID(1300); + return false; + } + return true; + } + function removeArray(array, minusArr) { + for (var i = 0, l = minusArr.length; i < l; i++) remove(array, minusArr[i]); + } + function appendObjectsAt(array, addObjs, index) { + array.splice.apply(array, [ index, 0 ].concat(addObjs)); + return array; + } + function contains(array, value) { + return array.indexOf(value) >= 0; + } + function copy(array) { + var i, len = array.length, arr_clone = new Array(len); + for (i = 0; i < len; i += 1) arr_clone[i] = array[i]; + return arr_clone; + } + js.array = { + remove: remove, + fastRemove: fastRemove, + removeAt: removeAt, + fastRemoveAt: fastRemoveAt, + contains: contains, + verifyType: verifyType, + removeArray: removeArray, + appendObjectsAt: appendObjectsAt, + copy: copy, + MutableForwardIterator: require("../utils/mutable-forward-iterator") + }; + function Pool(cleanupFunc, size) { + if (void 0 === size) { + size = cleanupFunc; + cleanupFunc = null; + } + this.get = null; + this.count = 0; + this._pool = new Array(size); + this._cleanup = cleanupFunc; + } + Pool.prototype._get = function() { + if (this.count > 0) { + --this.count; + var cache = this._pool[this.count]; + this._pool[this.count] = null; + return cache; + } + return null; + }; + Pool.prototype.put = function(obj) { + var pool = this._pool; + if (this.count < pool.length) { + if (this._cleanup && false === this._cleanup(obj)) return; + pool[this.count] = obj; + ++this.count; + } + }; + Pool.prototype.resize = function(length) { + if (length >= 0) { + this._pool.length = length; + this.count > length && (this.count = length); + } + }; + js.Pool = Pool; + cc.js = js; + module.exports = js; + }), { + "../utils/mutable-forward-iterator": 206, + "./id-generater": 138 + } ], + 143: [ (function(require, module, exports) { + "use strict"; + var js = require("./js"); + var Attrs = require("./attribute"); + var SerializableAttrs = { + default: {}, + serializable: {}, + editorOnly: {}, + formerlySerializedAs: {} + }; + var TYPO_TO_CORRECT_DEV = false; + function parseNotify(val, propName, notify, properties) { + if (val.get || val.set) { + false; + return; + } + if (val.hasOwnProperty("default")) { + var newKey = "_N$" + propName; + val.get = function() { + return this[newKey]; + }; + val.set = function(value) { + var oldValue = this[newKey]; + this[newKey] = value; + notify.call(this, oldValue); + }; + false; + var newValue = {}; + properties[newKey] = newValue; + for (var attr in SerializableAttrs) { + var v = SerializableAttrs[attr]; + if (val.hasOwnProperty(attr)) { + newValue[attr] = val[attr]; + v.canUsedInGet || delete val[attr]; + } + } + } else false; + } + function parseType(val, type, className, propName) { + var STATIC_CHECK = (false, false); + if (Array.isArray(type)) { + if (STATIC_CHECK && "default" in val) { + var isArray = require("./CCClass").isArray; + isArray(val["default"]) || cc.warnID(5507, className, propName); + } + if (!(type.length > 0)) return cc.errorID(5508, className, propName); + val.type = type = type[0]; + } + if ("function" === typeof type) { + if (type === String) { + val.type = cc.String; + STATIC_CHECK && cc.warnID(3608, '"' + className + "." + propName + '"'); + } else if (type === Boolean) { + val.type = cc.Boolean; + STATIC_CHECK && cc.warnID(3609, '"' + className + "." + propName + '"'); + } else if (type === Number) { + val.type = cc.Float; + STATIC_CHECK && cc.warnID(3610, '"' + className + "." + propName + '"'); + } + } else if (STATIC_CHECK) switch (type) { + case "Number": + cc.warnID(5510, className, propName); + break; + + case "String": + cc.warn('The type of "' + className + "." + propName + '" must be cc.String, not "String".'); + break; + + case "Boolean": + cc.warn('The type of "' + className + "." + propName + '" must be cc.Boolean, not "Boolean".'); + break; + + case "Float": + cc.warn('The type of "' + className + "." + propName + '" must be cc.Float, not "Float".'); + break; + + case "Integer": + cc.warn('The type of "' + className + "." + propName + '" must be cc.Integer, not "Integer".'); + break; + + case null: + cc.warnID(5511, className, propName); + } + false; + } + function getBaseClassWherePropertyDefined_DEV(propName, cls) { + var res; + false; + } + function _wrapOptions(isES6Getset, _default, type) { + var res = isES6Getset ? { + _short: true + } : { + _short: true, + default: _default + }; + type && (res.type = type); + return res; + } + exports.getFullFormOfProperty = function(options, isES6Getset) { + var isLiteral = options && options.constructor === Object; + if (isLiteral) return null; + return Array.isArray(options) && options.length > 0 ? _wrapOptions(isES6Getset, [], options) : "function" === typeof options ? _wrapOptions(isES6Getset, js.isChildClassOf(options, cc.ValueType) ? new options() : null, options) : options instanceof Attrs.PrimitiveType ? _wrapOptions(isES6Getset, options["default"]) : _wrapOptions(isES6Getset, options); + }; + exports.preprocessAttrs = function(properties, className, cls, es6) { + for (var propName in properties) { + var val = properties[propName]; + var fullForm = exports.getFullFormOfProperty(val, false); + fullForm && (val = properties[propName] = fullForm); + if (val) { + var maybeTypeScript; + false; + var baseClass; + false; + var notify = val.notify; + if (notify) { + false; + parseNotify(val, propName, notify, properties); + } + "type" in val && parseType(val, val.type, className, propName); + } + } + }; + var CALL_SUPER_DESTROY_REG_DEV; + false; + exports.validateMethodWithProps = function(func, funcName, className, cls, base) { + false; + if ("function" !== typeof func && null !== func) { + var overrided; + var baseFuc; + var subFuc; + var correct; + false; + return false; + } + false; + return true; + }; + }), { + "./CCClass": 121, + "./attribute": 133, + "./js": 142 + } ], + 144: [ (function(require, module, exports) { + "use strict"; + var requiringFrames = []; + cc._RF = { + push: function push(module, uuid, script) { + if (void 0 === script) { + script = uuid; + uuid = ""; + } + requiringFrames.push({ + uuid: uuid, + script: script, + module: module, + exports: module.exports, + beh: null + }); + }, + pop: function pop() { + var frameInfo = requiringFrames.pop(); + var module = frameInfo.module; + var exports = module.exports; + if (exports === frameInfo.exports) { + for (var anyKey in exports) return; + module.exports = exports = frameInfo.cls; + } + }, + peek: function peek() { + return requiringFrames[requiringFrames.length - 1]; + } + }; + false; + }), {} ], + 145: [ (function(require, module, exports) { + "use strict"; + var js = require("./js"); + module.exports = { + contains: function contains(refNode, otherNode) { + if ("function" == typeof refNode.contains) return refNode.contains(otherNode); + if ("function" == typeof refNode.compareDocumentPosition) return !!(16 & refNode.compareDocumentPosition(otherNode)); + var node = otherNode.parentNode; + if (node) do { + if (node === refNode) return true; + node = node.parentNode; + } while (null !== node); + return false; + }, + isDomNode: "object" === typeof window && ("function" === typeof Node ? function(obj) { + return obj instanceof Node; + } : function(obj) { + return obj && "object" === typeof obj && "number" === typeof obj.nodeType && "string" === typeof obj.nodeName; + }), + callInNextTick: function(callback, p1, p2) { + callback && setTimeout((function() { + callback(p1, p2); + }), 0); + } + }; + false; + false; + }), { + "./js": 142 + } ], + 146: [ (function(require, module, exports) { + "use strict"; + require("./platform/js"); + require("./value-types"); + require("./utils"); + require("./platform/CCInputManager"); + require("./platform/CCInputExtension"); + require("./event"); + require("./platform/CCSys"); + require("./platform/CCMacro"); + require("./asset-manager"); + require("./CCDirector"); + require("./renderer"); + true; + require("./platform/CCView"); + require("./platform/CCScreen"); + require("./CCScheduler"); + require("./event-manager"); + }), { + "./CCDirector": 22, + "./CCScheduler": 27, + "./asset-manager": 45, + "./event": 116, + "./event-manager": 112, + "./platform/CCInputExtension": 124, + "./platform/CCInputManager": 125, + "./platform/CCMacro": 126, + "./platform/CCScreen": 129, + "./platform/CCSys": 130, + "./platform/CCView": 131, + "./platform/js": 142, + "./renderer": 152, + "./utils": 204, + "./value-types": 220 + } ], + 147: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _assembler = _interopRequireDefault(require("./assembler")); + var _manager = _interopRequireDefault(require("./utils/dynamic-atlas/manager")); + var _renderData = _interopRequireDefault(require("./webgl/render-data")); + var _valueTypes = require("../value-types"); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + function _assertThisInitialized(self) { + if (void 0 === self) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return self; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var Assembler2D = (function(_Assembler) { + _inheritsLoose(Assembler2D, _Assembler); + function Assembler2D() { + var _this; + _this = _Assembler.call(this) || this; + _this._renderData = new _renderData["default"](); + _this._renderData.init(_assertThisInitialized(_this)); + _this.initData(); + _this.initLocal(); + return _this; + } + var _proto = Assembler2D.prototype; + _proto.initData = function initData() { + var data = this._renderData; + data.createQuadData(0, this.verticesFloats, this.indicesCount); + }; + _proto.initLocal = function initLocal() { + this._local = []; + this._local.length = 4; + }; + _proto.updateColor = function updateColor(comp, color) { + var uintVerts = this._renderData.uintVDatas[0]; + if (!uintVerts) return; + color = null != color ? color : comp.node.color._val; + var floatsPerVert = this.floatsPerVert; + var colorOffset = this.colorOffset; + for (var i = colorOffset, l = uintVerts.length; i < l; i += floatsPerVert) uintVerts[i] = color; + }; + _proto.getBuffer = function getBuffer() { + return cc.renderer._handle._meshBuffer; + }; + _proto.updateWorldVerts = function updateWorldVerts(comp) { + var local = this._local; + var verts = this._renderData.vDatas[0]; + var matrix = comp.node._worldMatrix; + var matrixm = matrix.m, a = matrixm[0], b = matrixm[1], c = matrixm[4], d = matrixm[5], tx = matrixm[12], ty = matrixm[13]; + var vl = local[0], vr = local[2], vb = local[1], vt = local[3]; + var floatsPerVert = this.floatsPerVert; + var vertexOffset = 0; + var justTranslate = 1 === a && 0 === b && 0 === c && 1 === d; + if (justTranslate) { + verts[vertexOffset] = vl + tx; + verts[vertexOffset + 1] = vb + ty; + vertexOffset += floatsPerVert; + verts[vertexOffset] = vr + tx; + verts[vertexOffset + 1] = vb + ty; + vertexOffset += floatsPerVert; + verts[vertexOffset] = vl + tx; + verts[vertexOffset + 1] = vt + ty; + vertexOffset += floatsPerVert; + verts[vertexOffset] = vr + tx; + verts[vertexOffset + 1] = vt + ty; + } else { + var al = a * vl, ar = a * vr, bl = b * vl, br = b * vr, cb = c * vb, ct = c * vt, db = d * vb, dt = d * vt; + verts[vertexOffset] = al + cb + tx; + verts[vertexOffset + 1] = bl + db + ty; + vertexOffset += floatsPerVert; + verts[vertexOffset] = ar + cb + tx; + verts[vertexOffset + 1] = br + db + ty; + vertexOffset += floatsPerVert; + verts[vertexOffset] = al + ct + tx; + verts[vertexOffset + 1] = bl + dt + ty; + vertexOffset += floatsPerVert; + verts[vertexOffset] = ar + ct + tx; + verts[vertexOffset + 1] = br + dt + ty; + } + }; + _proto.fillBuffers = function fillBuffers(comp, renderer) { + renderer.worldMatDirty && this.updateWorldVerts(comp); + var renderData = this._renderData; + var vData = renderData.vDatas[0]; + var iData = renderData.iDatas[0]; + var buffer = this.getBuffer(renderer); + var offsetInfo = buffer.request(this.verticesCount, this.indicesCount); + var vertexOffset = offsetInfo.byteOffset >> 2, vbuf = buffer._vData; + vData.length + vertexOffset > vbuf.length ? vbuf.set(vData.subarray(0, vbuf.length - vertexOffset), vertexOffset) : vbuf.set(vData, vertexOffset); + var ibuf = buffer._iData, indiceOffset = offsetInfo.indiceOffset, vertexId = offsetInfo.vertexOffset; + for (var i = 0, l = iData.length; i < l; i++) ibuf[indiceOffset++] = vertexId + iData[i]; + }; + _proto.updateTexId = function updateTexId(comp) { + var texId = comp._texId; + var texIdOffset = this.texIdOffset; + var floatsPerVert = this.floatsPerVert; + var verts = this._renderData.vDatas[0]; + for (var i = 0, l = verts.length; i < l; i++) verts[floatsPerVert * i + texIdOffset] = texId; + }; + _createClass(Assembler2D, [ { + key: "verticesFloats", + get: function get() { + return this.verticesCount * this.floatsPerVert; + } + } ]); + return Assembler2D; + })(_assembler["default"]); + exports["default"] = Assembler2D; + cc.js.addon(Assembler2D.prototype, { + floatsPerVert: 5, + verticesCount: 4, + indicesCount: 6, + uvOffset: 2, + colorOffset: 4, + isMulti: false + }); + cc.Assembler2D = Assembler2D; + module.exports = exports["default"]; + }), { + "../value-types": 220, + "./assembler": 149, + "./utils/dynamic-atlas/manager": 154, + "./webgl/render-data": 188 + } ], + 148: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _pool3 = _interopRequireDefault(require("../utils/pool")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var _assemblerId = 0; + function getAssemblerId(assemblerCtor) { + Object.getOwnPropertyDescriptor(assemblerCtor, "__assemblerId__") || (assemblerCtor.__assemblerId__ = ++_assemblerId); + return assemblerCtor.__assemblerId__; + } + var AssemblerPool = (function(_Pool) { + _inheritsLoose(AssemblerPool, _Pool); + function AssemblerPool() { + var _this; + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) args[_key] = arguments[_key]; + _this = _Pool.call.apply(_Pool, [ this ].concat(args)) || this; + _this._pool = {}; + return _this; + } + var _proto = AssemblerPool.prototype; + _proto.put = function put(assembler) { + if (!assembler) return; + if (!this.enabled) { + false; + return; + } + var id = getAssemblerId(assembler.constructor); + var pool = this._pool; + pool[id] || (pool[id] = []); + if (this.count > this.maxSize) return; + this._clean(assembler); + pool[id].push(assembler); + this.count++; + }; + _proto.get = function get(assemblerCtor) { + var assembler; + if (this.enabled) { + var _pool = this._pool; + var id = getAssemblerId(assemblerCtor); + assembler = _pool[id] && _pool[id].pop(); + } + assembler ? this.count-- : assembler = new assemblerCtor(); + return assembler; + }; + _proto.clear = function clear() { + var _pool2; + var name; + var assemblers; + var i; + false; + this._pool = {}; + this.count = 0; + }; + _proto._clean = function _clean(assembler) { + false; + assembler._renderComp = null; + }; + return AssemblerPool; + })(_pool3["default"]); + var pool = new AssemblerPool(); + _pool3["default"].register("assembler", pool); + var _default = pool; + exports["default"] = _default; + module.exports = exports["default"]; + }), { + "../utils/pool": 207 + } ], + 149: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _vertexFormat = require("./webgl/vertex-format"); + var _assemblerPool = _interopRequireDefault(require("./assembler-pool")); + var _manager = _interopRequireDefault(require("./utils/dynamic-atlas/manager")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var Assembler = (function() { + function Assembler() { + this._extendNative && this._extendNative(); + } + var _proto = Assembler.prototype; + _proto.init = function init(renderComp) { + this._renderComp = renderComp; + }; + _proto.updateRenderData = function updateRenderData(comp) {}; + _proto.updateRenderDataForSwitchMaterial = function updateRenderDataForSwitchMaterial(comp) {}; + _proto.fillBuffers = function fillBuffers(comp, renderer) {}; + _proto.getVfmt = function getVfmt() { + return _vertexFormat.vfmtPosUvColor; + }; + _proto.packDynamicAtlasAndCheckMaterial = function packDynamicAtlasAndCheckMaterial(comp, frame) { + false; + var allowDynamicAtlas = comp.allowDynamicAtlas; + if ((cc.sp.allowDynamicAtlas && 0 === allowDynamicAtlas || 1 === allowDynamicAtlas) && !frame._original && _manager["default"] && frame._texture.packable) { + var packedFrame = _manager["default"].insertSpriteFrame(frame); + packedFrame && frame._setDynamicAtlasFrame(packedFrame); + } + var material = comp._materials[0]; + if (!material) return false; + if (this.checkAndSwitchMaterial(comp, frame._texture, material)) return true; + if (material.material.isMultiSupport()) comp._texIdDirty = true; else if (material.getProperty("texture") !== frame._texture) { + comp._vertsDirty = true; + comp._updateMaterial(); + } + return false; + }; + _proto.checkAndSwitchMaterial = function checkAndSwitchMaterial(comp, texture, material) { + var autoSwitchMaterial = comp.autoSwitchMaterial; + if ((cc.sp.autoSwitchMaterial && 0 === autoSwitchMaterial || 1 === autoSwitchMaterial) && texture._multiMaterial && material.material !== texture._multiMaterial) { + comp.setMaterial(0, texture._multiMaterial); + if (!this.isMulti) { + comp._assembler.updateRenderDataForSwitchMaterial(comp); + return true; + } + } + }; + return Assembler; + })(); + exports["default"] = Assembler; + Assembler.register = function(renderCompCtor, assembler) { + renderCompCtor.__assembler__ = assembler; + }; + Assembler.init = function(renderComp) { + var renderCompCtor = renderComp.constructor; + var assemblerCtor = renderCompCtor.__assembler__; + while (!assemblerCtor) { + renderCompCtor = renderCompCtor.$super; + if (!renderCompCtor) { + cc.warn("Can not find assembler for render component : [" + cc.js.getClassName(renderComp) + "]"); + return; + } + assemblerCtor = renderCompCtor.__assembler__; + } + assemblerCtor.getConstructor && (assemblerCtor = assemblerCtor.getConstructor(renderComp)); + if (!renderComp._assembler || renderComp._assembler.constructor !== assemblerCtor) { + var assembler = _assemblerPool["default"].get(assemblerCtor); + assembler.init(renderComp); + renderComp._assembler = assembler; + } + }; + cc.Assembler = Assembler; + module.exports = exports["default"]; + }), { + "./assembler-pool": 148, + "./utils/dynamic-atlas/manager": 154, + "./webgl/vertex-format": 190 + } ], + 150: [ (function(require, module, exports) { + "use strict"; + var Device = function Device(canvasEL) { + var ctx; + try { + ctx = canvasEL.getContext("2d"); + } catch (err) { + console.error(err); + return; + } + this._canvas = canvasEL; + this._ctx = ctx; + this._caps = {}; + this._stats = { + drawcalls: 0 + }; + this._vx = this._vy = this._vw = this._vh = 0; + this._sx = this._sy = this._sw = this._sh = 0; + }; + Device.prototype._restoreTexture = function _restoreTexture(unit) {}; + Device.prototype.setViewport = function setViewport(x, y, w, h) { + if (this._vx !== x || this._vy !== y || this._vw !== w || this._vh !== h) { + this._vx = x; + this._vy = y; + this._vw = w; + this._vh = h; + } + }; + Device.prototype.setScissor = function setScissor(x, y, w, h) { + if (this._sx !== x || this._sy !== y || this._sw !== w || this._sh !== h) { + this._sx = x; + this._sy = y; + this._sw = w; + this._sh = h; + } + }; + Device.prototype.clear = function clear(color) { + var ctx = this._ctx; + ctx.clearRect(this._vx, this._vy, this._vw, this._vh); + if (color && (0 !== color[0] || 0 !== color[1] || 0 !== color[2])) { + ctx.fillStyle = "rgb(" + color[0] + "," + color[1] + "," + color[2] + ")"; + ctx.globalAlpha = color[3]; + ctx.fillRect(this._vx, this._vy, this._vw, this._vh); + } + }; + Device.prototype.resetDrawCalls = function() { + this._stats.drawcalls = 0; + }; + Device.prototype.getDrawCalls = function() { + return this._stats.drawcalls; + }; + module.exports = Device; + }), {} ], + 151: [ (function(require, module, exports) { + "use strict"; + var Texture2D = function Texture2D(device, options) { + this._device = device; + this._width = 4; + this._height = 4; + this._image = null; + if (options) { + void 0 !== options.width && (this._width = options.width); + void 0 !== options.height && (this._height = options.height); + this.updateImage(options); + } + }; + Texture2D.prototype.update = function update(options) { + this.updateImage(options); + }; + Texture2D.prototype.updateImage = function updateImage(options) { + if (options.images && options.images[0]) { + var image = options.images[0]; + image && image !== this._image && (this._image = image); + } + }; + Texture2D.prototype.destroy = function destroy() { + this._image = null; + }; + module.exports = Texture2D; + }), {} ], + 152: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _gfx = _interopRequireDefault(require("../../renderer/gfx")); + var _inputAssembler = _interopRequireDefault(require("../../renderer/core/input-assembler")); + var _pass = _interopRequireDefault(require("../../renderer/core/pass")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _initBuiltins(device) { + var defaultTexture = new _gfx["default"].Texture2D(device, { + images: [], + width: 128, + height: 128, + wrapS: _gfx["default"].WRAP_REPEAT, + wrapT: _gfx["default"].WRAP_REPEAT, + format: _gfx["default"].TEXTURE_FMT_RGB8, + genMipmaps: false + }); + return { + defaultTexture: defaultTexture, + programTemplates: [], + programChunks: {} + }; + } + var _default = cc.renderer = { + Texture2D: null, + InputAssembler: _inputAssembler["default"], + Pass: _pass["default"], + renderEngine: null, + canvas: null, + device: null, + scene: null, + drawCalls: 0, + _handle: null, + _cameraNode: null, + _camera: null, + _forward: null, + _flow: null, + initWebGL: function initWebGL(canvas, opts) { + require("./webgl/assemblers"); + var ModelBatcher = require("./webgl/model-batcher"); + this.Texture2D = _gfx["default"].Texture2D; + this.canvas = canvas; + this._flow = cc.RenderFlow; + var builtins; + var nativeFlow; + false; + var Scene = require("../../renderer/scene/scene"); + var ForwardRenderer = require("../../renderer/renderers/forward-renderer"); + this.device = new _gfx["default"].Device(canvas, opts); + this.scene = new Scene(); + var _builtins = _initBuiltins(this.device); + this._forward = new ForwardRenderer(this.device, _builtins); + this._handle = new ModelBatcher(this.device, this.scene); + this._flow.init(this._handle, this._forward); + }, + initCanvas: function initCanvas(canvas) { + var canvasRenderer = require("./canvas"); + var Texture2D = require("./canvas/Texture2D"); + var Device = require("./canvas/Device"); + this.Device = Device; + this.Texture2D = Texture2D; + this.canvas = canvas; + this.device = new Device(canvas); + this._camera = { + a: 1, + b: 0, + c: 0, + d: 1, + tx: 0, + ty: 0 + }; + this._handle = new canvasRenderer.RenderComponentHandle(this.device, this._camera); + this._forward = new canvasRenderer.ForwardRenderer(); + this._flow = cc.RenderFlow; + this._flow.init(this._handle, this._forward); + }, + updateCameraViewport: function updateCameraViewport() { + if (true, cc.director) { + var ecScene = cc.director.getScene(); + ecScene && ecScene.setScale(1, 1, 1); + } + if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS) { + var vp = cc.view.getViewportRect(); + this.device.setViewport(vp.x, vp.y, vp.width, vp.height); + this._camera.a = cc.view.getScaleX(); + this._camera.d = cc.view.getScaleY(); + this._camera.tx = vp.x; + this._camera.ty = vp.y + vp.height; + } + }, + render: function render(ecScene, dt) { + this.device.resetDrawCalls(); + if (ecScene) { + this._flow.render(ecScene, dt); + this.drawCalls = this.device.getDrawCalls(); + } + }, + clear: function clear() { + this._handle.reset(); + this._forward.clear(); + } + }; + exports["default"] = _default; + module.exports = exports["default"]; + }), { + "../../renderer/core/input-assembler": 237, + "../../renderer/core/pass": 238, + "../../renderer/gfx": 247, + "../../renderer/renderers/forward-renderer": 266, + "../../renderer/scene/scene": 269, + "./canvas": void 0, + "./canvas/Device": 150, + "./canvas/Texture2D": 151, + "./webgl/assemblers": 161, + "./webgl/model-batcher": 186 + } ], + 153: [ (function(require, module, exports) { + "use strict"; + var FlagOfset = 0; + var DONOTHING = 1 << FlagOfset++; + var BREAK_FLOW = 1 << FlagOfset++; + var LOCAL_TRANSFORM = 1 << FlagOfset++; + var WORLD_TRANSFORM = 1 << FlagOfset++; + var TRANSFORM = LOCAL_TRANSFORM | WORLD_TRANSFORM; + var UPDATE_RENDER_DATA = 1 << FlagOfset++; + var OPACITY = 1 << FlagOfset++; + var COLOR = 1 << FlagOfset++; + var OPACITY_COLOR = OPACITY | COLOR; + var RENDER = 1 << FlagOfset++; + var CHILDREN = 1 << FlagOfset++; + var POST_RENDER = 1 << FlagOfset++; + var FINAL = 1 << FlagOfset++; + var _batcher, _forward; + var _cullingMask = 0; + function RenderFlow() { + this._func = init; + this._next = null; + } + var _proto = RenderFlow.prototype; + _proto._doNothing = function() {}; + _proto._localTransform = function(node) { + node._updateLocalMatrix(); + node._renderFlag &= ~LOCAL_TRANSFORM; + this._next._func(node); + }; + _proto._worldTransform = function(node) { + _batcher.worldMatDirty++; + var t = node._matrix; + var trs = node._trs; + var tm = t.m; + tm[12] = trs[0]; + tm[13] = trs[1]; + tm[14] = trs[2]; + node._mulMat(node._worldMatrix, node._parent._worldMatrix, t); + node._renderFlag &= ~WORLD_TRANSFORM; + this._next._func(node); + _batcher.worldMatDirty--; + }; + _proto._opacity = function(node) { + _batcher.parentOpacityDirty++; + this._next._func(node); + node._renderFlag &= ~OPACITY; + _batcher.parentOpacityDirty--; + }; + _proto._color = function(node) { + var comp = node._renderComponent; + comp && comp._updateColor(); + node._renderFlag &= ~COLOR; + this._next._func(node); + }; + _proto._updateRenderData = function(node) { + var comp = node._renderComponent; + comp._assembler.updateRenderData(comp); + node._renderFlag &= ~UPDATE_RENDER_DATA; + this._next._func(node); + }; + _proto._render = function(node) { + var comp = node._renderComponent; + comp._checkBacth(_batcher, node._cullingMask); + comp._assembler.fillBuffers(comp, _batcher); + this._next._func(node); + }; + _proto._children = function(node) { + var cullingMask = _cullingMask; + var batcher = _batcher; + var parentOpacity = batcher.parentOpacity; + var opacity = batcher.parentOpacity *= node._opacity / 255; + var worldTransformFlag = batcher.worldMatDirty ? WORLD_TRANSFORM : 0; + var worldOpacityFlag = batcher.parentOpacityDirty ? OPACITY_COLOR : 0; + var worldDirtyFlag = worldTransformFlag | worldOpacityFlag; + var children = node._children; + for (var i = 0, l = children.length; i < l; i++) { + var c = children[i]; + c._renderFlag |= worldDirtyFlag; + if (!c._activeInHierarchy || 0 === c._opacity) continue; + _cullingMask = c._cullingMask = 0 === c.groupIndex ? cullingMask : 1 << c.groupIndex; + var colorVal = c._color._val; + c._color._fastSetA(c._opacity * opacity); + flows[c._renderFlag]._func(c); + c._color._val = colorVal; + } + batcher.parentOpacity = parentOpacity; + this._next._func(node); + }; + _proto._postRender = function(node) { + var comp = node._renderComponent; + comp._checkBacth(_batcher, node._cullingMask); + comp._assembler.postFillBuffers(comp, _batcher); + this._next._func(node); + }; + var EMPTY_FLOW = new RenderFlow(); + EMPTY_FLOW._func = EMPTY_FLOW._doNothing; + EMPTY_FLOW._next = EMPTY_FLOW; + var flows = {}; + function createFlow(flag, next) { + var flow = new RenderFlow(); + flow._next = next || EMPTY_FLOW; + switch (flag) { + case DONOTHING: + case BREAK_FLOW: + flow._func = flow._doNothing; + break; + + case LOCAL_TRANSFORM: + flow._func = flow._localTransform; + break; + + case WORLD_TRANSFORM: + flow._func = flow._worldTransform; + break; + + case OPACITY: + flow._func = flow._opacity; + break; + + case COLOR: + flow._func = flow._color; + break; + + case UPDATE_RENDER_DATA: + flow._func = flow._updateRenderData; + break; + + case RENDER: + flow._func = flow._render; + break; + + case CHILDREN: + flow._func = flow._children; + break; + + case POST_RENDER: + flow._func = flow._postRender; + } + return flow; + } + function getFlow(flag) { + var flow = null; + var tFlag = FINAL; + while (tFlag > 0) { + tFlag & flag && (flow = createFlow(tFlag, flow)); + tFlag >>= 1; + } + return flow; + } + function init(node) { + var flag = node._renderFlag; + var r = flows[flag] = getFlow(flag); + r._func(node); + } + RenderFlow.flows = flows; + RenderFlow.createFlow = createFlow; + var _validateList = []; + RenderFlow.registerValidate = function(renderComp) { + if (renderComp._inValidateList) return; + _validateList.push(renderComp); + renderComp._inValidateList = true; + }; + RenderFlow.validateRenderers = function() { + for (var i = 0, l = _validateList.length; i < l; i++) { + var renderComp = _validateList[i]; + if (!renderComp.isValid) continue; + renderComp.enabledInHierarchy ? renderComp._validateRender() : renderComp.disableRender(); + renderComp._inValidateList = false; + } + _validateList.length = 0; + }; + RenderFlow.visitRootNode = function(rootNode) { + RenderFlow.validateRenderers(); + var preCullingMask = _cullingMask; + _cullingMask = rootNode._cullingMask; + if (rootNode._renderFlag & WORLD_TRANSFORM) { + _batcher.worldMatDirty++; + rootNode._calculWorldMatrix(); + rootNode._renderFlag &= ~WORLD_TRANSFORM; + flows[rootNode._renderFlag]._func(rootNode); + _batcher.worldMatDirty--; + } else flows[rootNode._renderFlag]._func(rootNode); + _cullingMask = preCullingMask; + }; + RenderFlow.render = function(rootNode, dt) { + _batcher.reset(); + _batcher.walking = true; + RenderFlow.visitRootNode(rootNode); + _batcher.terminate(); + _batcher.walking = false; + _forward.render(_batcher._renderScene, dt); + }; + RenderFlow.renderCamera = function(camera, rootNode) { + _batcher.reset(); + _batcher.walking = true; + RenderFlow.visitRootNode(rootNode); + _batcher.terminate(); + _batcher.walking = false; + _forward.renderCamera(camera, _batcher._renderScene); + }; + RenderFlow.init = function(batcher, forwardRenderer) { + _batcher = batcher; + _forward = forwardRenderer; + flows[0] = EMPTY_FLOW; + for (var i = 1; i < FINAL; i++) flows[i] = new RenderFlow(); + }; + RenderFlow.getBachther = function() { + return _batcher; + }; + RenderFlow.FLAG_DONOTHING = DONOTHING; + RenderFlow.FLAG_BREAK_FLOW = BREAK_FLOW; + RenderFlow.FLAG_LOCAL_TRANSFORM = LOCAL_TRANSFORM; + RenderFlow.FLAG_WORLD_TRANSFORM = WORLD_TRANSFORM; + RenderFlow.FLAG_TRANSFORM = TRANSFORM; + RenderFlow.FLAG_OPACITY = OPACITY; + RenderFlow.FLAG_COLOR = COLOR; + RenderFlow.FLAG_OPACITY_COLOR = OPACITY_COLOR; + RenderFlow.FLAG_UPDATE_RENDER_DATA = UPDATE_RENDER_DATA; + RenderFlow.FLAG_RENDER = RENDER; + RenderFlow.FLAG_CHILDREN = CHILDREN; + RenderFlow.FLAG_POST_RENDER = POST_RENDER; + RenderFlow.FLAG_FINAL = FINAL; + module.exports = cc.RenderFlow = RenderFlow; + }), {} ], + 154: [ (function(require, module, exports) { + "use strict"; + var _reusableAtlas = require("./reusable-atlas"); + var _atlases = []; + var _atlasIndex = -1; + var _maxAtlasCount = -1; + var _textureSize = 2048; + var _maxFrameSize = 512; + var _textureBleeding = true; + var _autoMultiBatch = true; + var _autoResetBeforeSceneLoad = true; + var _debugNode = null; + function newAtlas() { + var atlas = _atlases[++_atlasIndex]; + if (!atlas) { + atlas = new _reusableAtlas.Atlas(_textureSize, _textureSize); + _atlases.push(atlas); + dynamicAtlasManager.autoMultiBatch && cc.sp.multiBatcher.requsetMaterial(atlas._texture); + } + return atlas; + } + function beforeSceneLoad() { + _autoResetBeforeSceneLoad && dynamicAtlasManager.reset(); + } + var _enabled = false; + var dynamicAtlasManager = { + Atlas: _reusableAtlas.Atlas, + Rect: _reusableAtlas.Rect, + get enabled() { + return _enabled; + }, + set enabled(value) { + if (_enabled === value) return; + if (value) { + this.reset(); + cc.director.on(cc.Director.EVENT_BEFORE_SCENE_LAUNCH, beforeSceneLoad); + } else cc.director.off(cc.Director.EVENT_BEFORE_SCENE_LAUNCH, beforeSceneLoad); + _enabled = value; + }, + get maxAtlasCount() { + return _maxAtlasCount; + }, + set maxAtlasCount(value) { + _maxAtlasCount = value; + }, + get atlasCount() { + return _atlases.length; + }, + get textureBleeding() { + return _textureBleeding; + }, + set textureBleeding(enable) { + _textureBleeding = enable; + }, + get textureSize() { + return _textureSize; + }, + set textureSize(value) { + _textureSize = value; + }, + get maxFrameSize() { + return _maxFrameSize; + }, + set maxFrameSize(value) { + _maxFrameSize = value; + }, + get autoMultiBatch() { + return _autoMultiBatch; + }, + set autoMultiBatch(enable) { + if (_autoMultiBatch === enable) return; + if (enable) for (var i = 0, l = _atlases.length; i < l; i++) cc.sp.multiBatcher.requsetMaterial(_atlases[i]._texture); + _autoMultiBatch = enable; + }, + get autoResetBeforeSceneLoad() { + return _autoResetBeforeSceneLoad; + }, + set autoResetBeforeSceneLoad(enable) { + if (_autoResetBeforeSceneLoad === enable) return; + _autoResetBeforeSceneLoad = enable; + }, + get atlases() { + return _atlases; + }, + rects: Object.create(null), + insertSpriteFrame: function insertSpriteFrame(spriteFrame) { + false; + if (!_enabled || !spriteFrame || spriteFrame._original) return null; + var atlas, frame; + var rect = spriteFrame._rect, texture = spriteFrame._texture, info = this.rects[texture._uuid]; + var sx = rect.x, sy = rect.y; + if (info) { + sx += info.x; + sy += info.y; + info.spriteFrames.push(spriteFrame); + frame = { + x: sx, + y: sy, + texture: info.atlas._texture + }; + return frame; + } + for (var i = 0; i <= _atlasIndex; i++) { + atlas = _atlases[i]; + frame = atlas.insertSpriteFrame(spriteFrame); + if (frame) return frame; + } + if (_atlasIndex + 1 < _maxAtlasCount) { + atlas = newAtlas(); + return atlas.insertSpriteFrame(spriteFrame); + } + return frame; + }, + deleteSpriteFrame: function deleteSpriteFrame(spriteFrame) { + if (spriteFrame && true && spriteFrame._original) { + this.deleteAtlasSpriteFrame(spriteFrame); + spriteFrame._resetDynamicAtlasFrame(); + } + }, + deleteTexture: function deleteTexture(texture) { + this.deleteAtlasTexture(texture); + }, + reset: function reset() { + for (var i = 0, l = _atlases.length; i < l; i++) _atlases[i].destroy(); + _atlases.length = 0; + _atlasIndex = -1; + }, + deleteAtlasSpriteFrame: function deleteAtlasSpriteFrame(spriteFrame) { + if (!spriteFrame._original) return; + var texture = spriteFrame._original._texture; + for (var i = _atlases.length - 1; i >= 0; i--) if (_atlases[i].deleteSpriteFrame(texture, spriteFrame)) return; + }, + deleteAtlasTexture: function deleteAtlasTexture(texture) { + if (texture) for (var i = _atlases.length - 1; i >= 0; i--) if (_atlases[i].deleteInnerTexture(texture, true)) return; + }, + showDebug: (true, function(show) { + if (show) { + if (!_debugNode || !_debugNode.isValid) { + var width = cc.visibleRect.width; + var height = cc.visibleRect.height; + _debugNode = new cc.Node("DYNAMIC_ATLAS_DEBUG_NODE"); + _debugNode.width = width; + _debugNode.height = height; + _debugNode.x = width / 2; + _debugNode.y = height / 2; + _debugNode.zIndex = cc.macro.MAX_ZINDEX; + _debugNode.parent = cc.director.getScene(); + _debugNode.groupIndex = cc.Node.BuiltinGroupIndex.DEBUG; + cc.Camera._setupDebugCamera(); + var scroll = _debugNode.addComponent(cc.ScrollView); + var content = new cc.Node("CONTENT"); + var layout = content.addComponent(cc.Layout); + layout.type = cc.Layout.Type.VERTICAL; + layout.resizeMode = cc.Layout.ResizeMode.CONTAINER; + content.parent = _debugNode; + content.width = _textureSize; + content.anchorY = 1; + content.x = _textureSize; + scroll.content = content; + for (var i = 0; i <= _atlasIndex; i++) { + var node = new cc.Node("ATLAS"); + var texture = _atlases[i]._texture; + var spriteFrame = new cc.SpriteFrame(); + spriteFrame.setTexture(_atlases[i]._texture); + var sprite = node.addComponent(cc.Sprite); + sprite.spriteFrame = spriteFrame; + node.parent = content; + } + } + return _debugNode; + } + if (_debugNode) { + _debugNode.parent = null; + _debugNode = null; + } + }), + update: function update() { + if (!this.enabled) return; + for (var i = 0; i <= _atlasIndex; i++) _atlases[i].update(); + } + }; + module.exports = cc.dynamicAtlasManager = dynamicAtlasManager; + }), { + "./reusable-atlas": 155 + } ], + 155: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.Rect = exports.Atlas = void 0; + function _createForOfIteratorHelperLoose(o, allowArrayLike) { + var it = "undefined" !== typeof Symbol && o[Symbol.iterator] || o["@@iterator"]; + if (it) return (it = it.call(o)).next.bind(it); + if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && "number" === typeof o.length) { + it && (o = it); + var i = 0; + return function() { + if (i >= o.length) return { + done: true + }; + return { + done: false, + value: o[i++] + }; + }; + } + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if ("string" === typeof o) return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + "Object" === n && o.constructor && (n = o.constructor.name); + if ("Map" === n || "Set" === n) return Array.from(o); + if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); + } + function _arrayLikeToArray(arr, len) { + (null == len || len > arr.length) && (len = arr.length); + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + return arr2; + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + var RenderTexture = require("../../../assets/CCRenderTexture"); + var Rect = (function() { + Rect.reuse = function reuse(atlas, width, height, x, y) { + if (0 === this.pointer) { + for (var i = 0; i < 128; i++) Rect.pool[i] = new Rect(atlas, 0, 0, 0, 0); + this.pointer += 128; + } + this.pointer--; + var rect = this.pool[this.pointer]; + rect.atlas = atlas; + rect.width = width; + rect.height = height; + rect.x = x; + rect.y = y; + return rect; + }; + Rect.recycle = function recycle(rect) { + rect.atlas = void 0; + rect.uuid = ""; + rect.spriteFrames.length = 0; + rect.parentRect = void 0; + rect.subRectA = void 0; + rect.subRectB = void 0; + rect.subRectC = void 0; + rect.cacheIndex = -1; + this.pool[this.pointer] = rect; + this.pointer++; + }; + function Rect(atlas, width, height, x, y) { + this.atlas = void 0; + this.width = 0; + this.height = 0; + this.x = 0; + this.y = 0; + this.cacheIndex = -1; + this.uuid = ""; + this.spriteFrames = []; + this.parentRect = void 0; + this.subRectA = void 0; + this.subRectB = void 0; + this.subRectC = void 0; + this.used = 0; + this.atlas = atlas; + this.width = width; + this.height = height; + this.x = x; + this.y = y; + } + _createClass(Rect, [ { + key: "sizes", + get: function get() { + return this.width * this.height; + } + } ]); + return Rect; + })(); + exports.Rect = Rect; + Rect.pool = []; + Rect.pointer = 0; + var Atlas = (function() { + function Atlas(width, height, padding, border) { + void 0 === padding && (padding = 2); + void 0 === border && (border = 2); + this.width = 0; + this.height = 0; + this.padding = 0; + this.border = 0; + this.rootRect = void 0; + this.freeRects = []; + this._count = 0; + this._texture = void 0; + this._dirty = false; + var texture = new RenderTexture(); + texture.initWithSize(width, height); + texture.update(); + this._texture = texture; + this.width = width; + this.height = height; + this.padding = padding; + this.border = border; + this.rootRect = Rect.reuse(this, this.width + this.padding - 2 * this.border, this.height + this.padding - 2 * this.border, this.border, this.border); + this.pushFreeRect(this.rootRect); + } + var _proto = Atlas.prototype; + _proto.pushFreeRect = function pushFreeRect(rect) { + var i = this.freeRects.push(rect) - 1; + rect.cacheIndex = i; + }; + _proto.removeFreeRect = function removeFreeRect(index) { + var temp = this.freeRects[index]; + var temp2 = this.freeRects[this.freeRects.length - 1]; + temp2.cacheIndex = index; + temp.cacheIndex = -1; + this.freeRects[index] = temp2; + this.freeRects.pop(); + }; + _proto.replaceFreeRect = function replaceFreeRect(index, rect) { + this.freeRects[index].cacheIndex = -1; + rect.cacheIndex = index; + this.freeRects[index] = rect; + }; + _proto.insertSpriteFrame = function insertSpriteFrame(spriteFrame) { + var rect = spriteFrame._rect, texture = spriteFrame._texture; + var sx = rect.x, sy = rect.y; + var width = texture.width, height = texture.height; + var result = this.insert(texture); + if (!result) return null; + if (cc.dynamicAtlasManager.textureBleeding) { + if (width <= 8 || height <= 8) { + this._texture.drawTextureAt(texture, result.x - 1, result.y - 1); + this._texture.drawTextureAt(texture, result.x - 1, result.y + 1); + this._texture.drawTextureAt(texture, result.x + 1, result.y - 1); + this._texture.drawTextureAt(texture, result.x + 1, result.y + 1); + } + this._texture.drawTextureAt(texture, result.x - 1, result.y); + this._texture.drawTextureAt(texture, result.x + 1, result.y); + this._texture.drawTextureAt(texture, result.x, result.y - 1); + this._texture.drawTextureAt(texture, result.x, result.y + 1); + } + this._texture.drawTextureAt(texture, result.x, result.y); + this._count++; + sx += result.x; + sy += result.y; + result.spriteFrames.push(spriteFrame); + this._dirty = true; + var frame = { + x: sx, + y: sy, + texture: this._texture + }; + return frame; + }; + _proto.insert = function insert(texture) { + var width = texture.width + this.padding, height = texture.height + this.padding; + var score = Number.MAX_VALUE; + var areaFit = 0; + var original = void 0; + var originalIndex = 0; + for (var i = 0; i < this.freeRects.length; i++) { + var rect = this.freeRects[i]; + if (rect.width >= width && rect.height >= height) { + areaFit = rect.sizes - width * height; + if (areaFit < score) { + original = rect; + originalIndex = i; + score = areaFit; + } + } + } + if (original) { + if (original.width === width && original.height === height) { + original.uuid = texture._uuid; + original.used++; + original.parentRect && original.parentRect.used++; + cc.dynamicAtlasManager.rects[texture._uuid] = original; + this.removeFreeRect(originalIndex); + return original; + } + var best = Rect.reuse(this, width, height, original.x, original.y); + var tmp; + if (best.y + best.height < original.y + original.height) { + tmp = Rect.reuse(this, original.width, original.y + original.height - (best.y + best.height), original.x, best.y + best.height); + tmp.parentRect = original; + original.subRectB = tmp; + if (tmp.width > Atlas.ignoreRectSize && tmp.height > Atlas.ignoreRectSize) { + this.replaceFreeRect(originalIndex, tmp); + originalIndex = -1; + } + } + if (best.x + best.width < original.x + original.width) { + tmp = Rect.reuse(this, original.x + original.width - (best.x + best.width), original.height - (original.y + original.height - (best.y + best.height)), best.x + best.width, original.y); + tmp.parentRect = original; + original.subRectC = tmp; + if (tmp.width > Atlas.ignoreRectSize && tmp.height > Atlas.ignoreRectSize) if (-1 !== originalIndex) { + this.replaceFreeRect(originalIndex, tmp); + originalIndex = -1; + } else this.pushFreeRect(tmp); + } + -1 !== originalIndex && this.removeFreeRect(originalIndex); + best.parentRect = original; + original.subRectA = best; + best.used++; + original.used++; + 1 === original.used && original.parentRect && original.parentRect.used++; + best.uuid = texture._uuid; + cc.dynamicAtlasManager.rects[texture._uuid] = best; + return best; + } + return; + }; + _proto.update = function update() { + if (!this._dirty) return; + this._texture.update(); + this._dirty = false; + }; + _proto.deleteSpriteFrame = function deleteSpriteFrame(texture, frame) { + if (texture) { + var rect = cc.dynamicAtlasManager.rects[texture._uuid]; + if (rect) { + var index = rect.spriteFrames.indexOf(frame); + if (-1 !== index) { + rect.spriteFrames.splice(index, 1); + 0 === rect.spriteFrames.length && rect.atlas.deleteInnerRect(rect); + } else cc.warn("[Dynamic Atlas] can't find spriteFrame in Rect."); + return true; + } + } + return false; + }; + _proto.deleteInnerRect = function deleteInnerRect(rect) { + delete cc.dynamicAtlasManager.rects[rect.uuid]; + rect.uuid = ""; + this._count--; + for (var _iterator = _createForOfIteratorHelperLoose(rect.spriteFrames), _step; !(_step = _iterator()).done; ) { + var spriteFrame = _step.value; + spriteFrame.isValid && spriteFrame._resetDynamicAtlasFrame(); + } + rect.spriteFrames.length = 0; + this.tryMergeRecycle(rect); + }; + _proto.deleteInnerTexture = function deleteInnerTexture(texture) { + if (texture) { + var rect = cc.dynamicAtlasManager.rects[texture._uuid]; + if (rect) { + rect.atlas.deleteInnerRect(rect); + return true; + } + } + return false; + }; + _proto.tryMergeRecycle = function tryMergeRecycle(rect) { + var old = void 0; + var parent = rect; + while (parent) { + parent.used--; + if (0 === parent.used) { + if (parent.subRectA) { + var i = parent.subRectA.cacheIndex; + -1 !== i && this.removeFreeRect(i); + Rect.recycle(parent.subRectA); + parent.subRectA = void 0; + } + if (parent.subRectB) { + var _i = parent.subRectB.cacheIndex; + -1 !== _i && this.removeFreeRect(_i); + Rect.recycle(parent.subRectB); + parent.subRectB = void 0; + } + if (parent.subRectC) { + var _i2 = parent.subRectC.cacheIndex; + -1 !== _i2 && this.removeFreeRect(_i2); + Rect.recycle(parent.subRectC); + parent.subRectC = void 0; + } + old = parent; + parent = parent.parentRect; + } else { + old && old.width > Atlas.ignoreRectSize && old.height > Atlas.ignoreRectSize && this.pushFreeRect(old); + old = parent; + parent = void 0; + } + } + old === this.rootRect && 0 === old.used && this.pushFreeRect(old); + }; + _proto.isEmpty = function isEmpty() { + return this._count <= 0; + }; + _proto.reset = function reset() { + var rects = cc.dynamicAtlasManager.rects; + for (var key in rects) { + var rect = rects[key]; + if (rect.atlas === this) { + delete rects[key]; + for (var _iterator2 = _createForOfIteratorHelperLoose(rect.spriteFrames), _step2; !(_step2 = _iterator2()).done; ) { + var spriteFrame = _step2.value; + spriteFrame.isValid && spriteFrame._resetDynamicAtlasFrame(); + } + Rect.recycle(rect); + } + } + for (var _iterator3 = _createForOfIteratorHelperLoose(this.freeRects), _step3; !(_step3 = _iterator3()).done; ) { + var _rect = _step3.value; + Rect.recycle(_rect); + } + this.freeRects.length = 0; + this._count = 0; + this.rootRect = Rect.reuse(this, this.width + this.padding - 2 * this.border, this.height + this.padding - 2 * this.border, this.border, this.border); + this.pushFreeRect(this.rootRect); + }; + _proto.destroy = function destroy() { + this.reset(); + this._texture.destroy(); + }; + return Atlas; + })(); + exports.Atlas = Atlas; + Atlas.ignoreRectSize = 10; + Atlas.DEFAULT_HASH = new RenderTexture()._getHash(); + }), { + "../../../assets/CCRenderTexture": 65 + } ], + 156: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _assembler2d = _interopRequireDefault(require("../../assembler-2d")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var textUtils = require("../../../utils/text-utils"); + var macro = require("../../../platform/CCMacro"); + var Label = require("../../../components/CCLabel"); + var Overflow = Label.Overflow; + var shareLabelInfo = require("../utils").shareLabelInfo; + var LetterInfo = function LetterInfo() { + this["char"] = ""; + this.valid = true; + this.x = 0; + this.y = 0; + this.line = 0; + this.hash = ""; + }; + var _tmpRect = cc.rect(); + var _comp = null; + var _horizontalKernings = []; + var _lettersInfo = []; + var _linesWidth = []; + var _linesOffsetX = []; + var _fntConfig = null; + var _numberOfLines = 0; + var _textDesiredHeight = 0; + var _letterOffsetY = 0; + var _tailoredTopY = 0; + var _tailoredBottomY = 0; + var _bmfontScale = 1; + var _lineBreakWithoutSpaces = false; + var _spriteFrame = null; + var _lineSpacing = 0; + var _contentSize = cc.size(); + var _string = ""; + var _fontSize = 0; + var _originFontSize = 0; + var _hAlign = 0; + var _vAlign = 0; + var _spacingX = 0; + var _lineHeight = 0; + var _overflow = 0; + var _isWrapText = false; + var _labelWidth = 0; + var _labelHeight = 0; + var _maxLineWidth = 0; + var _isRetina = false; + var _retinaScale = 1; + var BmfontAssembler = (function(_Assembler2D) { + _inheritsLoose(BmfontAssembler, _Assembler2D); + function BmfontAssembler() { + return _Assembler2D.apply(this, arguments) || this; + } + var _proto = BmfontAssembler.prototype; + _proto.updateRenderData = function updateRenderData(comp) { + if (!comp._vertsDirty) return; + if (_comp === comp) return; + _comp = comp; + this._reserveQuads(comp, comp.string.toString().length); + var assemblerChanged = this._updateFontFamily(comp); + assemblerChanged || this._updateRenderData(comp); + }; + _proto._preUpdateRenderData = function _preUpdateRenderData(comp) { + _comp = comp; + this._reserveQuads(comp, comp.string.toString().length); + var fontAsset = comp.font; + _spriteFrame = fontAsset.spriteFrame; + _fntConfig = fontAsset._fntConfig; + shareLabelInfo.fontAtlas = fontAsset._fontDefDictionary; + }; + _proto._updateRenderData = function _updateRenderData(comp) { + this._updateProperties(comp); + this._updateLabelInfo(comp); + this._updateContent(); + this.updateWorldVerts(comp); + if (_isRetina) { + _contentSize.width /= _retinaScale; + _contentSize.height /= _retinaScale; + _fontSize /= _retinaScale; + } + _comp._actualFontSize = _fontSize; + _comp.node.setContentSize(_contentSize); + _comp._vertsDirty = false; + _comp = null; + this._resetProperties(); + }; + _proto._updateFontScale = function _updateFontScale() { + _bmfontScale = _fontSize / _originFontSize; + }; + _proto._updateFontFamily = function _updateFontFamily(comp) { + var fontAsset = comp.font; + _spriteFrame = fontAsset.spriteFrame; + _fntConfig = fontAsset._fntConfig; + shareLabelInfo.fontAtlas = fontAsset._fontDefDictionary; + return this.packDynamicAtlasAndCheckMaterial(comp, _spriteFrame); + }; + _proto._updateLabelInfo = function _updateLabelInfo() { + shareLabelInfo.hash = ""; + shareLabelInfo.margin = 0; + }; + _proto.getTTFTextureSizeScale = function getTTFTextureSizeScale() { + return _isRetina ? _retinaScale : 1; + }; + _proto._updateProperties = function _updateProperties(comp) { + _string = comp.string.toString(); + _isRetina = !(comp.font instanceof cc.BitmapFont) && cc.sp.enableLabelRetina && 0 === comp.enableRetina || 1 === comp.enableRetina; + _retinaScale = cc.sp.labelRetinaScale; + _fontSize = comp.fontSize; + _originFontSize = _fntConfig ? _fntConfig.fontSize : comp.fontSize; + _hAlign = comp.horizontalAlign; + _vAlign = comp.verticalAlign; + _spacingX = comp.spacingX; + _overflow = comp.overflow; + _lineHeight = comp._lineHeight; + _contentSize.width = comp.node.width; + _contentSize.height = comp.node.height; + if (_isRetina) { + _fontSize *= _retinaScale; + _fntConfig || (_originFontSize *= _retinaScale); + _contentSize.width *= _retinaScale; + _contentSize.height *= _retinaScale; + _lineHeight *= _retinaScale; + shareLabelInfo.margin *= _retinaScale; + } + if (_overflow === Overflow.NONE) { + _isWrapText = false; + _contentSize.width += 2 * shareLabelInfo.margin; + _contentSize.height += 2 * shareLabelInfo.margin; + } else if (_overflow === Overflow.RESIZE_HEIGHT) { + _isWrapText = true; + _contentSize.height += 2 * shareLabelInfo.margin; + } else _isWrapText = comp.enableWrapText; + shareLabelInfo.lineHeight = _lineHeight; + shareLabelInfo.fontSize = _fontSize; + this._setupBMFontOverflowMetrics(); + }; + _proto._resetProperties = function _resetProperties() { + _fntConfig = null; + _spriteFrame = null; + shareLabelInfo.hash = ""; + shareLabelInfo.margin = 0; + }; + _proto._updateContent = function _updateContent() { + this._updateFontScale(); + this._computeHorizontalKerningForText(); + this._alignText(); + }; + _proto._computeHorizontalKerningForText = function _computeHorizontalKerningForText() { + var string = _string; + var stringLen = string.length; + var horizontalKernings = _horizontalKernings; + var kerningDict; + _fntConfig && (kerningDict = _fntConfig.kerningDict); + if (kerningDict && !cc.js.isEmptyObject(kerningDict)) { + var prev = -1; + for (var i = 0; i < stringLen; ++i) { + var key = string.charCodeAt(i); + var kerningAmount = kerningDict[prev << 16 | 65535 & key] || 0; + horizontalKernings[i] = i < stringLen - 1 ? kerningAmount : 0; + prev = key; + } + } else horizontalKernings.length = 0; + }; + _proto._multilineTextWrap = function _multilineTextWrap(nextTokenFunc) { + var textLen = _string.length; + var lineIndex = 0; + var nextTokenX = 0; + var nextTokenY = 0; + var longestLine = 0; + var letterRight = 0; + var highestY = 0; + var lowestY = 0; + var letterDef = null; + var letterPosition = cc.v2(0, 0); + for (var index = 0; index < textLen; ) { + var character = _string.charAt(index); + if ("\n" === character) { + _linesWidth.push(letterRight); + letterRight = 0; + lineIndex++; + nextTokenX = 0; + nextTokenY -= _lineHeight * this._getFontScale() + _lineSpacing; + this._recordPlaceholderInfo(index, character); + index++; + continue; + } + var tokenLen = nextTokenFunc(_string, index, textLen); + var tokenHighestY = highestY; + var tokenLowestY = lowestY; + var tokenRight = letterRight; + var nextLetterX = nextTokenX; + var newLine = false; + for (var tmp = 0; tmp < tokenLen; ++tmp) { + var letterIndex = index + tmp; + character = _string.charAt(letterIndex); + if ("\r" === character) { + this._recordPlaceholderInfo(letterIndex, character); + continue; + } + letterDef = shareLabelInfo.fontAtlas.getLetterDefinitionForChar(character, shareLabelInfo); + if (!letterDef) { + this._recordPlaceholderInfo(letterIndex, character); + var atlasName = ""; + _fntConfig && (atlasName = _fntConfig.atlasName); + console.log("Can't find letter definition in texture atlas " + atlasName + " for letter:" + character); + continue; + } + var letterX = nextLetterX + letterDef.offsetX * _bmfontScale - shareLabelInfo.margin; + if (_isWrapText && _maxLineWidth > 0 && nextTokenX > 0 && letterX + letterDef.w * _bmfontScale > _maxLineWidth && !textUtils.isUnicodeSpace(character)) { + _linesWidth.push(letterRight); + letterRight = 0; + lineIndex++; + nextTokenX = 0; + nextTokenY -= _lineHeight * this._getFontScale() + _lineSpacing; + newLine = true; + break; + } + letterPosition.x = letterX; + letterPosition.y = nextTokenY - letterDef.offsetY * _bmfontScale + shareLabelInfo.margin; + this._recordLetterInfo(letterPosition, character, letterIndex, lineIndex); + letterIndex + 1 < _horizontalKernings.length && letterIndex < textLen - 1 && (nextLetterX += _horizontalKernings[letterIndex + 1]); + nextLetterX += letterDef.xAdvance * _bmfontScale + _spacingX - 2 * shareLabelInfo.margin; + tokenRight = letterPosition.x + letterDef.w * _bmfontScale - shareLabelInfo.margin; + tokenHighestY < letterPosition.y && (tokenHighestY = letterPosition.y); + tokenLowestY > letterPosition.y - letterDef.h * _bmfontScale && (tokenLowestY = letterPosition.y - letterDef.h * _bmfontScale); + } + if (newLine) continue; + nextTokenX = nextLetterX; + letterRight = tokenRight; + highestY < tokenHighestY && (highestY = tokenHighestY); + lowestY > tokenLowestY && (lowestY = tokenLowestY); + longestLine < letterRight && (longestLine = letterRight); + index += tokenLen; + } + this._finishMultilineTextWrap(); + _linesWidth.push(letterRight); + _numberOfLines = lineIndex + 1; + _textDesiredHeight = _numberOfLines * _lineHeight * this._getFontScale(); + _numberOfLines > 1 && (_textDesiredHeight += (_numberOfLines - 1) * _lineSpacing); + _contentSize.width = _labelWidth; + _contentSize.height = _labelHeight; + _labelWidth <= 0 && (_contentSize.width = parseFloat(longestLine.toFixed(2)) + 2 * shareLabelInfo.margin); + _labelHeight <= 0 && (_contentSize.height = parseFloat(_textDesiredHeight.toFixed(2)) + 2 * shareLabelInfo.margin); + _tailoredTopY = _contentSize.height; + _tailoredBottomY = 0; + if (_overflow !== Overflow.CLAMP) { + highestY > 0 && (_tailoredTopY = _contentSize.height + highestY); + lowestY < -_textDesiredHeight && (_tailoredBottomY = _textDesiredHeight + lowestY); + } + return true; + }; + _proto._getFirstCharLen = function _getFirstCharLen() { + return 1; + }; + _proto._getFontScale = function _getFontScale() { + return _overflow === Overflow.SHRINK ? _bmfontScale : 1; + }; + _proto._getFirstWordLen = function _getFirstWordLen(text, startIndex, textLen) { + var character = text.charAt(startIndex); + if (textUtils.isUnicodeCJK(character) || "\n" === character || textUtils.isUnicodeSpace(character)) return 1; + var len = 1; + var letterDef = shareLabelInfo.fontAtlas.getLetterDefinitionForChar(character, shareLabelInfo); + if (!letterDef) return len; + var nextLetterX = letterDef.xAdvance * _bmfontScale + _spacingX; + var letterX; + for (var index = startIndex + 1; index < textLen; ++index) { + character = text.charAt(index); + letterDef = shareLabelInfo.fontAtlas.getLetterDefinitionForChar(character, shareLabelInfo); + if (!letterDef) break; + letterX = nextLetterX + letterDef.offsetX * _bmfontScale; + if (letterX + letterDef.w * _bmfontScale > _maxLineWidth && !textUtils.isUnicodeSpace(character) && _maxLineWidth > 0) return len; + nextLetterX += letterDef.xAdvance * _bmfontScale + _spacingX; + if ("\n" === character || textUtils.isUnicodeSpace(character) || textUtils.isUnicodeCJK(character)) break; + len++; + } + return len; + }; + _proto._multilineTextWrapByWord = function _multilineTextWrapByWord() { + return this._multilineTextWrap(this._getFirstWordLen); + }; + _proto._multilineTextWrapByChar = function _multilineTextWrapByChar() { + return this._multilineTextWrap(this._getFirstCharLen); + }; + _proto._recordPlaceholderInfo = function _recordPlaceholderInfo(letterIndex, _char) { + if (letterIndex >= _lettersInfo.length) { + var tmpInfo = new LetterInfo(); + _lettersInfo.push(tmpInfo); + } + _lettersInfo[letterIndex]["char"] = _char; + _lettersInfo[letterIndex].hash = _char.charCodeAt(0) + shareLabelInfo.hash; + _lettersInfo[letterIndex].valid = false; + }; + _proto._recordLetterInfo = function _recordLetterInfo(letterPosition, character, letterIndex, lineIndex) { + if (letterIndex >= _lettersInfo.length) { + var tmpInfo = new LetterInfo(); + _lettersInfo.push(tmpInfo); + } + var _char2 = character.charCodeAt(0); + var key = _char2 + shareLabelInfo.hash; + _lettersInfo[letterIndex].line = lineIndex; + _lettersInfo[letterIndex]["char"] = character; + _lettersInfo[letterIndex].hash = key; + _lettersInfo[letterIndex].valid = shareLabelInfo.fontAtlas.getLetter(key).valid; + _lettersInfo[letterIndex].x = letterPosition.x; + _lettersInfo[letterIndex].y = letterPosition.y; + }; + _proto._alignText = function _alignText() { + _textDesiredHeight = 0; + _linesWidth.length = 0; + _lineBreakWithoutSpaces ? this._multilineTextWrapByChar() : this._multilineTextWrapByWord(); + this._computeAlignmentOffset(); + _overflow === Overflow.SHRINK && _fontSize > 0 && this._isVerticalClamp() && this._shrinkLabelToContentSize(this._isVerticalClamp); + this._updateQuads() || _overflow === Overflow.SHRINK && this._shrinkLabelToContentSize(this._isHorizontalClamp); + }; + _proto._scaleFontSizeDown = function _scaleFontSizeDown(fontSize) { + var shouldUpdateContent = true; + if (!fontSize) { + fontSize = .1; + shouldUpdateContent = false; + } + _fontSize = fontSize; + shouldUpdateContent && this._updateContent(); + }; + _proto._shrinkLabelToContentSize = function _shrinkLabelToContentSize(lambda) { + var fontSize = _fontSize; + var left = 0, right = 0 | fontSize, mid = 0; + while (left < right) { + mid = left + right + 1 >> 1; + var newFontSize = mid; + if (newFontSize <= 0) break; + _bmfontScale = newFontSize / _originFontSize; + _lineBreakWithoutSpaces ? this._multilineTextWrapByChar() : this._multilineTextWrapByWord(); + this._computeAlignmentOffset(); + lambda() ? right = mid - 1 : left = mid; + } + var actualFontSize = left; + actualFontSize >= 0 && this._scaleFontSizeDown(actualFontSize); + }; + _proto._isVerticalClamp = function _isVerticalClamp() { + return _textDesiredHeight > _contentSize.height; + }; + _proto._isHorizontalClamp = function _isHorizontalClamp() { + var letterClamp = false; + for (var ctr = 0, l = _string.length; ctr < l; ++ctr) { + var letterInfo = _lettersInfo[ctr]; + if (letterInfo.valid) { + var letterDef = shareLabelInfo.fontAtlas.getLetter(letterInfo.hash); + var px = letterInfo.x + letterDef.w * _bmfontScale; + var lineIndex = letterInfo.line; + if (_labelWidth > 0) if (_isWrapText) { + var wordWidth = _linesWidth[lineIndex]; + if (wordWidth > _contentSize.width && (px > _contentSize.width || px < 0)) { + letterClamp = true; + break; + } + } else if (px > _contentSize.width) { + letterClamp = true; + break; + } + } + } + return letterClamp; + }; + _proto._isHorizontalClamped = function _isHorizontalClamped(px, lineIndex) { + var wordWidth = _linesWidth[lineIndex]; + var letterOverClamp = px > _contentSize.width || px < 0; + return _isWrapText ? wordWidth > _contentSize.width && letterOverClamp : letterOverClamp; + }; + _proto._updateQuads = function _updateQuads() { + var texture = _spriteFrame ? _spriteFrame._texture : shareLabelInfo.fontAtlas.getTexture(); + var node = _comp.node; + this.verticesCount = this.indicesCount = 0; + this._renderData && (this._renderData.dataLength = 0); + var contentSize = _contentSize, appx = node._anchorPoint.x * contentSize.width, appy = node._anchorPoint.y * contentSize.height; + var ret = true; + for (var ctr = 0, l = _string.length; ctr < l; ++ctr) { + var letterInfo = _lettersInfo[ctr]; + if (!letterInfo.valid) continue; + var letterDef = shareLabelInfo.fontAtlas.getLetter(letterInfo.hash); + _tmpRect.height = letterDef.h; + _tmpRect.width = letterDef.w; + _tmpRect.x = letterDef.u; + _tmpRect.y = letterDef.v; + var py = letterInfo.y + _letterOffsetY; + if (_labelHeight > 0) { + if (py > _tailoredTopY) { + var clipTop = py - _tailoredTopY; + _tmpRect.y += clipTop; + _tmpRect.height -= clipTop; + py -= clipTop; + } + py - letterDef.h * _bmfontScale < _tailoredBottomY && _overflow === Overflow.CLAMP && (_tmpRect.height = py < _tailoredBottomY ? 0 : (py - _tailoredBottomY) / _bmfontScale); + } + var lineIndex = letterInfo.line; + var px = letterInfo.x + letterDef.w / 2 * _bmfontScale + _linesOffsetX[lineIndex]; + if (_labelWidth > 0 && this._isHorizontalClamped(px, lineIndex)) if (_overflow === Overflow.CLAMP) _tmpRect.width = 0; else if (_overflow === Overflow.SHRINK) { + if (_contentSize.width > letterDef.w) { + ret = false; + break; + } + _tmpRect.width = 0; + } + if (_tmpRect.height > 0 && _tmpRect.width > 0) { + var isRotated = this._determineRect(_tmpRect); + var letterPositionX = letterInfo.x + _linesOffsetX[letterInfo.line]; + this.appendQuad(_comp, texture, _tmpRect, isRotated, letterPositionX - appx, py - appy, _bmfontScale, letterDef); + } + } + this._quadsUpdated(_comp); + return ret; + }; + _proto._determineRect = function _determineRect(tempRect) { + var isRotated = _spriteFrame.isRotated(); + var originalSize = _spriteFrame._originalSize; + var rect = _spriteFrame._rect; + var offset = _spriteFrame._offset; + var trimmedLeft = offset.x + (originalSize.width - rect.width) / 2; + var trimmedTop = offset.y - (originalSize.height - rect.height) / 2; + if (isRotated) { + var originalX = tempRect.x; + tempRect.x = rect.x + rect.height - tempRect.y - tempRect.height - trimmedTop; + tempRect.y = originalX + rect.y - trimmedLeft; + tempRect.y < 0 && (tempRect.height = tempRect.height + trimmedTop); + } else { + tempRect.x += rect.x - trimmedLeft; + tempRect.y += rect.y + trimmedTop; + } + return isRotated; + }; + _proto._computeAlignmentOffset = function _computeAlignmentOffset() { + _linesOffsetX.length = 0; + switch (_hAlign) { + case macro.TextAlignment.LEFT: + for (var i = 0; i < _numberOfLines; ++i) _linesOffsetX.push(0); + break; + + case macro.TextAlignment.CENTER: + for (var _i = 0, l = _linesWidth.length; _i < l; _i++) _linesOffsetX.push((_contentSize.width - _linesWidth[_i]) / 2); + break; + + case macro.TextAlignment.RIGHT: + for (var _i2 = 0, _l = _linesWidth.length; _i2 < _l; _i2++) _linesOffsetX.push(_contentSize.width - _linesWidth[_i2]); + } + _letterOffsetY = _contentSize.height; + if (_vAlign !== macro.VerticalTextAlignment.TOP) { + var blank = _contentSize.height - _textDesiredHeight + _lineHeight * this._getFontScale() - _originFontSize * _bmfontScale; + _vAlign === macro.VerticalTextAlignment.BOTTOM ? _letterOffsetY -= blank : _letterOffsetY -= blank / 2; + } + }; + _proto._setupBMFontOverflowMetrics = function _setupBMFontOverflowMetrics() { + var newWidth = _contentSize.width, newHeight = _contentSize.height; + _overflow === Overflow.RESIZE_HEIGHT && (newHeight = 0); + if (_overflow === Overflow.NONE) { + newWidth = 0; + newHeight = 0; + } + _labelWidth = newWidth; + _labelHeight = newHeight; + _maxLineWidth = newWidth; + }; + _proto.updateWorldVerts = function updateWorldVerts() {}; + _proto.appendQuad = function appendQuad(comp, texture, rect, rotated, x, y, scale, letter) {}; + _proto._quadsUpdated = function _quadsUpdated(comp) {}; + _proto._reserveQuads = function _reserveQuads() {}; + _proto._finishMultilineTextWrap = function _finishMultilineTextWrap() {}; + return BmfontAssembler; + })(_assembler2d["default"]); + exports["default"] = BmfontAssembler; + module.exports = exports["default"]; + }), { + "../../../components/CCLabel": 93, + "../../../platform/CCMacro": 126, + "../../../utils/text-utils": 212, + "../../assembler-2d": 147, + "../utils": 160 + } ], + 157: [ (function(require, module, exports) { + "use strict"; + function LabelFrame() { + this._rect = null; + this.uv = []; + this._texture = null; + this._original = null; + } + LabelFrame.prototype = { + constructor: LabelFrame, + getRect: function getRect() { + return cc.rect(this._rect); + }, + setRect: function setRect(rect) { + this._rect = rect; + this._texture && this._calculateUV(); + }, + _setDynamicAtlasFrame: function _setDynamicAtlasFrame(frame) { + if (!frame) return; + this._original = { + _texture: this._texture, + _x: this._rect.x, + _y: this._rect.y + }; + this._texture = frame.texture; + this._rect.x = frame.x; + this._rect.y = frame.y; + this._calculateUV(); + }, + _resetDynamicAtlasFrame: function _resetDynamicAtlasFrame() { + if (!this._original) return; + this._rect.x = this._original._x; + this._rect.y = this._original._y; + this._texture = this._original._texture; + this._original = null; + this._calculateUV(); + }, + _refreshTexture: function _refreshTexture(texture) { + this._texture = texture; + this._rect = cc.rect(0, 0, texture.width, texture.height); + this._calculateUV(); + }, + _calculateUV: function _calculateUV() { + var rect = this._rect, texture = this._texture, uv = this.uv, texw = texture.width, texh = texture.height; + var l = 0 === texw ? 0 : rect.x / texw; + var r = 0 === texw ? 0 : (rect.x + rect.width) / texw; + var b = 0 === texh ? 0 : (rect.y + rect.height) / texh; + var t = 0 === texh ? 0 : rect.y / texh; + uv[0] = l; + uv[1] = b; + uv[2] = r; + uv[3] = b; + uv[4] = l; + uv[5] = t; + uv[6] = r; + uv[7] = t; + } + }; + module.exports = LabelFrame; + }), {} ], + 158: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _bmfont = _interopRequireDefault(require("../../webgl/assemblers/label/2d/bmfont")); + var _vertexFormat = require("../../webgl/vertex-format"); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + function _createForOfIteratorHelperLoose(o, allowArrayLike) { + var it = "undefined" !== typeof Symbol && o[Symbol.iterator] || o["@@iterator"]; + if (it) return (it = it.call(o)).next.bind(it); + if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && "number" === typeof o.length) { + it && (o = it); + var i = 0; + return function() { + if (i >= o.length) return { + done: true + }; + return { + done: false, + value: o[i++] + }; + }; + } + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if ("string" === typeof o) return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + "Object" === n && o.constructor && (n = o.constructor.name); + if ("Map" === n || "Set" === n) return Array.from(o); + if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); + } + function _arrayLikeToArray(arr, len) { + (null == len || len > arr.length) && (len = arr.length); + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + return arr2; + } + var Label = require("../../../components/CCLabel"); + var LabelOutline = require("../../../components/CCLabelOutline"); + var textUtils = require("../../../utils/text-utils"); + var Component = require("../../../components/CCComponent"); + var RenderTexture = require("../../../assets/CCRenderTexture"); + var OUTLINE_SUPPORTED = cc.js.isChildClassOf(LabelOutline, Component); + var getFontFamily = require("../utils").getFontFamily; + var shareLabelInfo = require("../utils").shareLabelInfo; + var FontLetterDefinition = cc.BitmapFont.FontLetterDefinition; + var FontAtlas = cc.BitmapFont.FontAtlas; + var WHITE = cc.Color.WHITE; + var space = 0; + var bleed = 2; + var _invisibleAlpha = (1 / 255).toFixed(3); + function LetterTexture(_char, labelInfo) { + this._texture = null; + this._labelInfo = labelInfo; + this._char = _char; + this._hash = null; + this._data = null; + this._canvas = null; + this._context = null; + this._width = 0; + this._height = 0; + this._offsetY = 0; + this._hash = _char.charCodeAt(0) + labelInfo.hash; + } + LetterTexture.prototype = { + constructor: LetterTexture, + updateRenderData: function updateRenderData() { + this._updateProperties(); + this._updateTexture(); + }, + _updateProperties: function _updateProperties() { + this._texture = new cc.Texture2D(); + this._data = Label._canvasPool.get(); + this._canvas = this._data.canvas; + this._context = this._data.context; + this._context.font = this._labelInfo.fontDesc; + var width = textUtils.safeMeasureText(this._context, this._char, this._labelInfo.fontDesc); + var blank = 2 * this._labelInfo.margin + bleed; + this._width = parseFloat(width.toFixed(2)) + blank; + this._height = (1 + textUtils.BASELINE_RATIO) * this._labelInfo.fontSize + blank; + this._offsetY = -this._labelInfo.fontSize * textUtils.BASELINE_RATIO / 2; + this._canvas.width !== this._width && (this._canvas.width = this._width); + this._canvas.height !== this._height && (this._canvas.height = this._height); + this._texture.initWithElement(this._canvas); + }, + _updateTexture: function _updateTexture() { + var context = this._context; + var labelInfo = this._labelInfo, width = this._canvas.width, height = this._canvas.height; + var fontSize = this._labelInfo.fontSize; + var startX = width / 2; + var startY = height / 2 + fontSize * textUtils.MIDDLE_RATIO + fontSize * textUtils.BASELINE_OFFSET; + var color = labelInfo.color; + context.lineJoin = "round"; + context.textAlign = "center"; + context.clearRect(0, 0, width, height); + context.fillStyle = "rgba(" + color.r + ", " + color.g + ", " + color.b + ", " + _invisibleAlpha + ")"; + context.fillRect(0, 0, width, height); + context.font = labelInfo.fontDesc; + context.fillStyle = "rgba(" + color.r + ", " + color.g + ", " + color.b + ", 1)"; + if (labelInfo.isOutlined && labelInfo.margin > 0) { + var strokeColor = labelInfo.out || WHITE; + context.strokeStyle = "rgba(" + strokeColor.r + ", " + strokeColor.g + ", " + strokeColor.b + ", " + strokeColor.a / 255 + ")"; + context.lineWidth = 2 * labelInfo.margin; + context.strokeText(this._char, startX, startY); + } + context.fillText(this._char, startX, startY); + this._texture.handleLoadedTexture(); + }, + destroy: function destroy() { + this._texture.destroy(); + this._texture = null; + Label._canvasPool.put(this._data); + } + }; + function LetterAtlas(atlases, width, height) { + var texture = new RenderTexture(); + texture.initWithSize(width, height); + texture.update(); + this._atlases = atlases; + this._texture = texture; + this._id = 0; + this._tmpId = -1; + this._x = space; + this._y = space; + this._nexty = space; + this.frees = []; + this.waitCleans = []; + this._width = width; + this._height = height; + } + cc.js.mixin(LetterAtlas.prototype, { + insertLetterTexture: function insertLetterTexture(letterTexture) { + var texture = letterTexture._texture; + var width = texture.width, height = texture.height; + if (this.frees.length > 0) { + var score = Number.MAX_VALUE; + var areaFit = 0; + var original = null; + var originalIndex = 0; + for (var i = 0; i < this.frees.length; i++) { + var freeLetter = this.frees[i]; + if (freeLetter._width >= width && freeLetter._height >= height) { + areaFit = freeLetter._width * freeLetter._height - width * height; + if (areaFit < score) { + original = freeLetter; + originalIndex = i; + score = areaFit; + } + } + } + if (original) { + original._hash = letterTexture._hash; + original.w = letterTexture._width - bleed; + original.h = letterTexture._height - bleed; + original.xAdvance = original.w; + original.offsetY = letterTexture._offsetY; + this._texture.drawTextureAt(texture, original.u - bleed / 2, original.v - bleed / 2); + this._dirty = true; + this.removeFreeLetter(originalIndex); + this._atlases._fontDefDictionary.addLetterDefinitions(letterTexture._hash, original); + return original; + } + } + width <= .75 * height ? width = .75 * height : width <= height && (width = height); + var oldx = this._x, oldy = this._y, oldnexty = this._nexty; + if (this._x + width + space > this._width) { + this._x = space; + this._y = this._nexty; + } + this._y + height > this._nexty && (this._nexty = this._y + height + space); + if (this._nexty > this._height) { + this._x = oldx; + this._y = oldy; + this._nexty = oldnexty; + if (this.waitCleans.length > 0) { + for (var _iterator = _createForOfIteratorHelperLoose(this.waitCleans), _step; !(_step = _iterator()).done; ) { + var _letter = _step.value; + _letter._inCleans = false; + if (0 === _letter.ref) { + delete this._atlases._fontDefDictionary._letterDefinitions[_letter._hash]; + this.frees.push(_letter); + } + } + this.waitCleans.length = 0; + return this.insertLetterTexture(letterTexture); + } + return null; + } + this._texture.drawTextureAt(texture, this._x, this._y); + this._dirty = true; + var letter = new FontLetterDefinition(); + letter.u = this._x + bleed / 2; + letter.v = this._y + bleed / 2; + letter.texture = this._texture; + letter.atlas = this; + letter.ref = 0; + letter.valid = true; + letter.w = letterTexture._width - bleed; + letter.h = letterTexture._height - bleed; + letter._inCleans = false; + letter._hash = letterTexture._hash; + letter._width = width; + letter._height = height; + letter.xAdvance = letter.w; + letter.offsetY = letterTexture._offsetY; + this._x += width + space; + this._atlases._fontDefDictionary.addLetterDefinitions(letterTexture._hash, letter); + return letter; + }, + pushFreeLetter: function pushFreeLetter(letter) { + var i = this.frees.push(letter) - 1; + }, + removeFreeLetter: function removeFreeLetter(index) { + var temp = this.frees[index]; + var temp2 = this.frees[this.frees.length - 1]; + this.frees[index] = temp2; + this.frees.pop(); + }, + update: function update() { + if (!this._dirty) return; + this._texture.update(); + this._dirty = false; + }, + reset: function reset() { + this._x = space; + this._y = space; + this._nexty = space; + var defs = this._atlases._fontDefDictionary._letterDefinitions; + for (var key in defs) { + var def = defs[key]; + def.atlas === this && delete defs[key]; + } + this.frees.length = 0; + this.waitCleans.length = 0; + }, + destroy: function destroy() { + this.reset(); + var handler = this._atlases.material.getMultiHandler(); + handler.removeTexture(this._texture); + this._texture.destroy(); + this._texture = null; + } + }); + var LetterAtlases = (function() { + function LetterAtlases() { + this.atlases = []; + this.material = null; + this.fakeMaterial = { + material: null + }; + this._fontDefDictionary = new FontAtlas(null); + var handler = new cc.sp.MultiHandler(); + this.material = handler.material; + this.fakeMaterial.material = this.material; + cc.director.on(cc.Director.EVENT_BEFORE_SCENE_LAUNCH, this.beforeSceneLoad, this); + } + var _proto = LetterAtlases.prototype; + _proto.insertLetterTexture = function insertLetterTexture(letterTexture) { + for (var _iterator2 = _createForOfIteratorHelperLoose(this.atlases), _step2; !(_step2 = _iterator2()).done; ) { + var _atlas = _step2.value; + var letter = _atlas.insertLetterTexture(letterTexture); + if (letter) return letter; + } + if (this.atlases.length >= 8) return null; + var atlas = new LetterAtlas(this, _atlasWidth, _atlasHeight); + var len = this.atlases.push(atlas); + atlas._id = len - 1; + var handler = this.material.getMultiHandler(); + handler.setTexture(atlas._id, atlas._texture); + (true, cc.sp.charAtlasAutoBatchCount >= len) && cc.sp.multiBatcher.requsetMaterial(atlas._texture); + return atlas.insertLetterTexture(letterTexture); + }; + _proto.deleteLetter = function deleteLetter(letter) { + letter.ref--; + if (0 === letter.ref && !letter._inCleans) { + letter._inCleans = true; + letter.atlas.waitCleans.push(letter); + } + }; + _proto.update = function update() { + for (var _iterator3 = _createForOfIteratorHelperLoose(this.atlases), _step3; !(_step3 = _iterator3()).done; ) { + var atlas = _step3.value; + atlas.update(); + } + }; + _proto.reset = function reset() { + this._fontDefDictionary.clear(); + for (var _iterator4 = _createForOfIteratorHelperLoose(this.atlases), _step4; !(_step4 = _iterator4()).done; ) { + var atlas = _step4.value; + atlas.reset(); + } + }; + _proto.destroy = function destroy() { + this._fontDefDictionary.clear(); + for (var _iterator5 = _createForOfIteratorHelperLoose(this.atlases), _step5; !(_step5 = _iterator5()).done; ) { + var atlas = _step5.value; + atlas.destroy(); + } + this.atlases.length = 0; + }; + _proto.beforeSceneLoad = function beforeSceneLoad() { + cc.sp.charAtlasAutoResetBeforeSceneLoad && this.clearAllCache(); + }; + _proto.clearAllCache = function clearAllCache() { + this.reset(); + }; + _proto.getTexture = function getTexture() { + if (!_emptyTexture) { + _emptyTexture = new RenderTexture(); + _emptyTexture.initWithSize(_atlasWidth, _atlasHeight); + _emptyTexture.update(); + } + return _emptyTexture; + }; + _proto.getLetter = function getLetter(key) { + return this._fontDefDictionary._letterDefinitions[key]; + }; + _proto.getLetterDefinitionForChar = function getLetterDefinitionForChar(_char2, labelInfo) { + var hash = _char2.charCodeAt(0) + labelInfo.hash; + var letter = this._fontDefDictionary._letterDefinitions[hash]; + if (!letter) { + var temp = new LetterTexture(_char2, labelInfo); + temp.updateRenderData(); + letter = this.insertLetterTexture(temp); + temp.destroy(); + } + if (letter && _firstTraverse) { + letter.ref++; + _assembler._letterRefs.push(letter); + this.checkMaterialAndUpdateTexId(letter); + } + return letter; + }; + _proto.checkMaterialAndUpdateTexId = function checkMaterialAndUpdateTexId(letter) { + var atlas = letter.atlas; + var comp = _assembler._renderComp; + if (_needCheckMaterial) { + _needCheckMaterial = false; + if (_usedMaterial.material !== _shareAtlas.material) { + _assembler.checkAndSwitchMaterial(comp, atlas._texture, _usedMaterial); + _usedMaterial = comp._materials[0]; + } + } + if (_usedMaterial.material !== _shareAtlas.material && -1 === atlas._tmpId) { + var handler = _usedMaterial.material.getMultiHandler(); + if (handler) { + var index = handler.getIndex(atlas._texture.getImpl()); + if (-1 !== index) { + atlas._tmpId = index; + return; + } + } + comp.setMaterial(0, _shareAtlas.material); + _usedMaterial = _shareAtlas.fakeMaterial; + } + }; + return LetterAtlases; + })(); + function computeHash(labelInfo) { + var hashData = "|"; + var color = labelInfo.color.toHEX(); + var out = ""; + labelInfo.isOutlined && labelInfo.margin > 0 && (out = out + labelInfo.margin + labelInfo.out.toHEX()); + return hashData + labelInfo.fontSize + labelInfo.fontFamily + color + out; + } + var _shareAtlas = null; + var _atlasWidth = 2048; + var _atlasHeight = 2048; + var _isBold = false; + var _usedMaterial = null; + var _needCheckMaterial = false; + var _firstTraverse = false; + var _assembler = null; + var _emptyTexture = null; + var LetterFontAssembler = (function(_WebglBmfontAssembler) { + _inheritsLoose(LetterFontAssembler, _WebglBmfontAssembler); + function LetterFontAssembler() { + var _this; + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) args[_key] = arguments[_key]; + _this = _WebglBmfontAssembler.call.apply(_WebglBmfontAssembler, [ this ].concat(args)) || this; + _this._letterRefs = []; + return _this; + } + var _proto2 = LetterFontAssembler.prototype; + _proto2.initData = function initData() { + var data = this._renderData; + data.createFlexData(0, this.verticesCount, this.indicesCount, this.getVfmt()); + }; + _proto2.getVfmt = function getVfmt() { + return _vertexFormat.vfmtPosUvColorTexId; + }; + _proto2.getBuffer = function getBuffer() { + return cc.renderer._handle.getBuffer("mesh", this.getVfmt()); + }; + _proto2._getAssemblerData = function _getAssemblerData() { + if (!_shareAtlas) { + _shareAtlas = new LetterAtlases(); + cc.Label._shareAtlas = _shareAtlas; + } + return _shareAtlas.getTexture(); + }; + _proto2._updateFontFamily = function _updateFontFamily(comp) { + shareLabelInfo.fontAtlas = _shareAtlas; + shareLabelInfo.fontFamily = getFontFamily(comp); + var outline = OUTLINE_SUPPORTED && comp.getComponent(LabelOutline); + if (outline && outline.enabled) { + shareLabelInfo.isOutlined = true; + shareLabelInfo.margin = outline.width; + shareLabelInfo.out = outline.color.clone(); + shareLabelInfo.out.a = outline.color.a * comp.node.color.a / 255; + } else { + shareLabelInfo.isOutlined = false; + shareLabelInfo.margin = 0; + } + }; + _proto2._updateLabelInfo = function _updateLabelInfo(comp) { + shareLabelInfo.fontDesc = this._getFontDesc(); + shareLabelInfo.color = comp.node.color; + shareLabelInfo.hash = computeHash(shareLabelInfo); + }; + _proto2._getFontDesc = function _getFontDesc() { + var fontDesc = shareLabelInfo.fontSize.toString() + "px "; + fontDesc += shareLabelInfo.fontFamily; + _isBold && (fontDesc = "bold " + fontDesc); + return fontDesc; + }; + _proto2._computeHorizontalKerningForText = function _computeHorizontalKerningForText() {}; + _proto2._determineRect = function _determineRect(tempRect) { + return false; + }; + _proto2._updateRenderData = function _updateRenderData(comp) { + _assembler = this; + _usedMaterial = _assembler._renderComp._materials[0]; + _needCheckMaterial = true; + _firstTraverse = true; + for (var _iterator6 = _createForOfIteratorHelperLoose(_shareAtlas.atlases), _step6; !(_step6 = _iterator6()).done; ) { + var atlas = _step6.value; + atlas._tmpId = -1; + } + this._recycleLetterRef(); + _WebglBmfontAssembler.prototype._updateRenderData.call(this, comp); + _usedMaterial = null; + _assembler = null; + }; + _proto2._finishMultilineTextWrap = function _finishMultilineTextWrap() { + _firstTraverse = false; + }; + _proto2._recycleLetterRef = function _recycleLetterRef() { + for (var _iterator7 = _createForOfIteratorHelperLoose(this._letterRefs), _step7; !(_step7 = _iterator7()).done; ) { + var letter = _step7.value; + _shareAtlas.deleteLetter(letter); + } + this._letterRefs.length = 0; + }; + _proto2._resetAssemblerData = function _resetAssemblerData(assemblerData) { + 0 !== this._letterRefs.length && this._recycleLetterRef(); + }; + _proto2.appendVerts = function appendVerts(comp, offset, l, r, b, t, letter) { + _WebglBmfontAssembler.prototype.appendVerts.call(this, comp, offset, l, r, b, t, letter); + var renderData = this._renderData; + var verts = renderData.vDatas[0]; + var floatsPerVert = this.floatsPerVert; + var texIdOffset = offset + this.texIdOffset; + var id = _usedMaterial.material !== _shareAtlas.material ? letter.atlas._tmpId : letter.atlas._id; + verts[texIdOffset] = id; + texIdOffset += floatsPerVert; + verts[texIdOffset] = id; + texIdOffset += floatsPerVert; + verts[texIdOffset] = id; + texIdOffset += floatsPerVert; + verts[texIdOffset] = id; + }; + return LetterFontAssembler; + })(_bmfont["default"]); + exports["default"] = LetterFontAssembler; + LetterFontAssembler.prototype.floatsPerVert = 6; + LetterFontAssembler.prototype.texIdOffset = 5; + LetterFontAssembler.prototype.isMulti = true; + module.exports = exports["default"]; + }), { + "../../../assets/CCRenderTexture": 65, + "../../../components/CCComponent": 91, + "../../../components/CCLabel": 93, + "../../../components/CCLabelOutline": 94, + "../../../utils/text-utils": 212, + "../../webgl/assemblers/label/2d/bmfont": 164, + "../../webgl/vertex-format": 190, + "../utils": 160 + } ], + 159: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _assembler2d = _interopRequireDefault(require("../../assembler-2d")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var textUtils = require("../../../utils/text-utils"); + var macro = require("../../../platform/CCMacro"); + var Label = require("../../../components/CCLabel"); + var LabelOutline = require("../../../components/CCLabelOutline"); + var LabelShadow = require("../../../components/CCLabelShadow"); + var Overflow = Label.Overflow; + var deleteFromDynamicAtlas = require("../utils").deleteFromDynamicAtlas; + var getFontFamily = require("../utils").getFontFamily; + var MAX_SIZE = 2048; + var _invisibleAlpha = (1 / 255).toFixed(3); + var _context = null; + var _canvas = null; + var _texture = null; + var _fontDesc = ""; + var _string = ""; + var _fontSize = 0; + var _drawFontSize = 0; + var _splitedStrings = []; + var _canvasSize = cc.Size.ZERO; + var _lineHeight = 0; + var _hAlign = 0; + var _vAlign = 0; + var _color = null; + var _fontFamily = ""; + var _overflow = Overflow.NONE; + var _isWrapText = false; + var _premultiply = false; + var _isRetina = false; + var _retinaScale = 1; + var _outlineComp = null; + var _outlineColor = cc.Color.WHITE; + var _shadowComp = null; + var _shadowColor = cc.Color.BLACK; + var _canvasPadding = cc.rect(); + var _contentSizeExtend = cc.Size.ZERO; + var _nodeContentSize = cc.Size.ZERO; + var _enableBold = false; + var _enableItalic = false; + var _enableUnderline = false; + var _underlineThickness = 0; + var _drawUnderlinePos = cc.Vec2.ZERO; + var _drawUnderlineWidth = 0; + var _sharedLabelData; + var Alignment = [ "left", "center", "right" ]; + var TTFAssembler = (function(_Assembler2D) { + _inheritsLoose(TTFAssembler, _Assembler2D); + function TTFAssembler() { + return _Assembler2D.apply(this, arguments) || this; + } + var _proto = TTFAssembler.prototype; + _proto._getAssemblerData = function _getAssemblerData() { + _sharedLabelData = Label._canvasPool.get(); + _sharedLabelData.canvas.width = _sharedLabelData.canvas.height = 1; + return _sharedLabelData; + }; + _proto._resetAssemblerData = function _resetAssemblerData(assemblerData) { + assemblerData && Label._canvasPool.put(assemblerData); + }; + _proto.updateRenderData = function updateRenderData(comp) { + _Assembler2D.prototype.updateRenderData.call(this, comp); + if (!comp._vertsDirty) return; + this._updateProperties(comp); + this._calculateLabelFont(); + this._updateLabelDimensions(); + this._updateTexture(comp); + var assemblerChanged = this._calDynamicAtlas(comp); + assemblerChanged || this._updateRenderData(comp); + }; + _proto._updateRenderData = function _updateRenderData(comp) { + if (_isRetina) { + _fontSize /= _retinaScale; + _nodeContentSize.width /= _retinaScale; + _nodeContentSize.height /= _retinaScale; + } + comp._actualFontSize = _fontSize; + comp.node.setContentSize(_nodeContentSize); + this.updateVerts(comp); + comp._vertsDirty = false; + _context = null; + _canvas = null; + _texture = null; + }; + _proto.getTTFTextureSizeScale = function getTTFTextureSizeScale() { + return _isRetina ? _retinaScale : 1; + }; + _proto.updateVerts = function updateVerts() {}; + _proto._updatePaddingRect = function _updatePaddingRect() { + var top = 0, bottom = 0, left = 0, right = 0; + var outlineWidth = 0; + _contentSizeExtend.width = _contentSizeExtend.height = 0; + if (_outlineComp) { + outlineWidth = _outlineComp.width; + _isRetina && (outlineWidth *= _retinaScale); + top = bottom = left = right = outlineWidth; + _contentSizeExtend.width = _contentSizeExtend.height = 2 * outlineWidth; + } + if (_shadowComp) { + var shadowWidth = _shadowComp.blur + outlineWidth; + left = Math.max(left, -_shadowComp._offset.x + shadowWidth); + right = Math.max(right, _shadowComp._offset.x + shadowWidth); + top = Math.max(top, _shadowComp._offset.y + shadowWidth); + bottom = Math.max(bottom, -_shadowComp._offset.y + shadowWidth); + } + if (_enableItalic) { + var offset = _drawFontSize * Math.tan(.20943951); + right += offset; + _contentSizeExtend.width += offset; + } + _canvasPadding.x = left; + _canvasPadding.y = top; + _canvasPadding.width = left + right; + _canvasPadding.height = top + bottom; + }; + _proto._updateProperties = function _updateProperties(comp) { + var assemblerData = comp._assemblerData; + _context = assemblerData.context; + _canvas = assemblerData.canvas; + _texture = comp._frame._original ? comp._frame._original._texture : comp._frame._texture; + _isRetina = cc.sp.enableLabelRetina && 0 === comp.enableRetina || 1 === comp.enableRetina; + _retinaScale = cc.sp.labelRetinaScale; + _string = comp.string.toString(); + _fontSize = comp._fontSize; + _nodeContentSize = comp.node.getContentSize(); + _lineHeight = comp._lineHeight; + _drawFontSize = _fontSize; + _underlineThickness = comp.underlineHeight || _drawFontSize / 8; + if (_isRetina) { + _fontSize *= _retinaScale; + _nodeContentSize.width *= _retinaScale; + _nodeContentSize.height *= _retinaScale; + _lineHeight *= _retinaScale; + comp.underlineHeight && (_underlineThickness *= _retinaScale); + _drawFontSize = _fontSize; + } + _overflow = comp.overflow; + _canvasSize.width = _nodeContentSize.width; + _canvasSize.height = _nodeContentSize.height; + _hAlign = comp.horizontalAlign; + _vAlign = comp.verticalAlign; + _color = comp.node.color; + _enableBold = comp.enableBold; + _enableItalic = comp.enableItalic; + _enableUnderline = comp.enableUnderline; + _fontFamily = getFontFamily(comp); + _premultiply = comp.srcBlendFactor === cc.macro.BlendFactor.ONE; + false; + _isWrapText = _overflow !== Overflow.NONE && (_overflow === Overflow.RESIZE_HEIGHT || comp.enableWrapText); + _outlineComp = LabelOutline && comp.getComponent(LabelOutline); + _outlineComp = _outlineComp && _outlineComp.enabled && _outlineComp.width > 0 ? _outlineComp : null; + _outlineComp && _outlineColor.set(_outlineComp.color); + _shadowComp = LabelShadow && comp.getComponent(LabelShadow); + _shadowComp = _shadowComp && _shadowComp.enabled ? _shadowComp : null; + if (_shadowComp) { + _shadowColor.set(_shadowComp.color); + _shadowColor.a = _shadowColor.a * comp.node.color.a / 255; + } + this._updatePaddingRect(); + }; + _proto._calculateFillTextStartPosition = function _calculateFillTextStartPosition() { + var labelX = 0; + _hAlign === macro.TextAlignment.RIGHT ? labelX = _canvasSize.width - _canvasPadding.width : _hAlign === macro.TextAlignment.CENTER && (labelX = (_canvasSize.width - _canvasPadding.width) / 2); + var lineHeight = this._getLineHeight(); + var drawStartY = lineHeight * (_splitedStrings.length - 1); + var firstLinelabelY = _fontSize * (1 - textUtils.BASELINE_RATIO / 2); + if (_vAlign !== macro.VerticalTextAlignment.TOP) { + var blank = drawStartY + _canvasPadding.height + _fontSize - _canvasSize.height; + if (_vAlign === macro.VerticalTextAlignment.BOTTOM) { + blank += textUtils.BASELINE_RATIO / 2 * _fontSize; + firstLinelabelY -= blank; + } else firstLinelabelY -= blank / 2; + } + firstLinelabelY += textUtils.BASELINE_OFFSET * _fontSize; + return cc.v2(labelX + _canvasPadding.x, firstLinelabelY + _canvasPadding.y); + }; + _proto._setupOutline = function _setupOutline() { + _context.strokeStyle = "rgba(" + _outlineColor.r + ", " + _outlineColor.g + ", " + _outlineColor.b + ", " + _outlineColor.a / 255 + ")"; + _context.lineWidth = 2 * _outlineComp.width * (_isRetina ? _retinaScale : 1); + }; + _proto._setupShadow = function _setupShadow() { + _context.shadowColor = "rgba(" + _shadowColor.r + ", " + _shadowColor.g + ", " + _shadowColor.b + ", " + _shadowColor.a / 255 + ")"; + _context.shadowBlur = _shadowComp.blur * (_isRetina ? _retinaScale : 1); + _context.shadowOffsetX = _shadowComp.offset.x * (_isRetina ? _retinaScale : 1); + _context.shadowOffsetY = -_shadowComp.offset.y * (_isRetina ? _retinaScale : 1); + }; + _proto._drawTextEffect = function _drawTextEffect(startPosition, lineHeight) { + if (!_shadowComp && !_outlineComp && !_enableUnderline) return; + var isMultiple = _splitedStrings.length > 1 && _shadowComp; + var measureText = this._measureText(_context, _fontDesc); + var drawTextPosX = 0, drawTextPosY = 0; + _shadowComp && this._setupShadow(); + _outlineComp && this._setupOutline(); + for (var i = 0; i < _splitedStrings.length; ++i) { + drawTextPosX = startPosition.x; + drawTextPosY = startPosition.y + i * lineHeight; + if (isMultiple) { + _outlineComp && _context.strokeText(_splitedStrings[i], drawTextPosX, drawTextPosY); + _context.fillText(_splitedStrings[i], drawTextPosX, drawTextPosY); + } + if (_enableUnderline) { + _drawUnderlineWidth = measureText(_splitedStrings[i]); + _hAlign === macro.TextAlignment.RIGHT ? _drawUnderlinePos.x = startPosition.x - _drawUnderlineWidth : _hAlign === macro.TextAlignment.CENTER ? _drawUnderlinePos.x = startPosition.x - _drawUnderlineWidth / 2 : _drawUnderlinePos.x = startPosition.x; + _drawUnderlinePos.y = drawTextPosY + _drawFontSize / 8; + _context.fillRect(_drawUnderlinePos.x, _drawUnderlinePos.y, _drawUnderlineWidth, _underlineThickness); + } + } + isMultiple && (_context.shadowColor = "transparent"); + }; + _proto._updateTexture = function _updateTexture() { + _context.clearRect(0, 0, _canvas.width, _canvas.height); + _context.lineJoin = "round"; + if (_premultiply) _context.fillStyle = "rgba(" + _color.r + ", " + _color.g + ", " + _color.b + ", " + _color.a / 255 + ")"; else { + var _fillColor = _outlineComp ? _outlineColor : _color; + _context.fillStyle = "rgba(" + _fillColor.r + ", " + _fillColor.g + ", " + _fillColor.b + ", " + _invisibleAlpha + ")"; + _context.fillRect(0, 0, _canvas.width, _canvas.height); + _context.fillStyle = "rgba(" + _color.r + ", " + _color.g + ", " + _color.b + ", 1)"; + } + var startPosition = this._calculateFillTextStartPosition(); + var lineHeight = this._getLineHeight(); + var drawTextPosX = startPosition.x, drawTextPosY = 0; + this._drawTextEffect(startPosition, lineHeight); + for (var i = 0; i < _splitedStrings.length; ++i) { + drawTextPosY = startPosition.y + i * lineHeight; + _outlineComp && _context.strokeText(_splitedStrings[i], drawTextPosX, drawTextPosY); + _context.fillText(_splitedStrings[i], drawTextPosX, drawTextPosY); + } + _shadowComp && (_context.shadowColor = "transparent"); + _texture.handleLoadedTexture(); + }; + _proto._calDynamicAtlas = function _calDynamicAtlas(comp) { + if (comp.cacheMode !== Label.CacheMode.BITMAP) return false; + var frame = comp._frame; + deleteFromDynamicAtlas(comp, frame); + frame._original || frame.setRect(cc.rect(0, 0, _canvas.width, _canvas.height)); + return this.packDynamicAtlasAndCheckMaterial(comp, frame); + }; + _proto.packDynamicAtlasAndCheckMaterial = function packDynamicAtlasAndCheckMaterial(comp, frame) { + var allowDynamicAtlas = comp.allowDynamicAtlas; + if (cc.sp.allowDynamicAtlas && 0 === allowDynamicAtlas || 1 === allowDynamicAtlas) { + frame._texture._uuid = _fontDesc + _overflow + (_premultiply ? "P" : "NP") + (_enableUnderline ? "UL" : "NUL") + _string; + _outlineComp && (frame._texture._uuid += _outlineComp.color.toHEX() + "," + _outlineComp.width + ","); + _shadowComp && (frame._texture._uuid += _shadowComp.color.toHEX() + _shadowComp.offset.x + "," + _shadowComp.offset.y + "," + _shadowComp.blur); + } + return _Assembler2D.prototype.packDynamicAtlasAndCheckMaterial.call(this, comp, frame); + }; + _proto._updateLabelDimensions = function _updateLabelDimensions() { + _canvasSize.width = Math.min(_canvasSize.width, MAX_SIZE); + _canvasSize.height = Math.min(_canvasSize.height, MAX_SIZE); + var recreate = false; + if (_canvas.width !== _canvasSize.width) { + _canvas.width = _canvasSize.width; + recreate = true; + } + if (_canvas.height !== _canvasSize.height) { + _canvas.height = _canvasSize.height; + recreate = true; + } + recreate && (_context.font = _fontDesc); + _context.textAlign = Alignment[_hAlign]; + }; + _proto._getFontDesc = function _getFontDesc() { + var fontDesc = _fontSize.toString() + "px "; + fontDesc += _fontFamily; + _enableBold && (fontDesc = "bold " + fontDesc); + _enableItalic && (fontDesc = "italic " + fontDesc); + return fontDesc; + }; + _proto._getLineHeight = function _getLineHeight() { + var nodeSpacingY = _lineHeight; + nodeSpacingY = 0 === nodeSpacingY ? _fontSize : nodeSpacingY * _fontSize / _drawFontSize; + return 0 | nodeSpacingY; + }; + _proto._calculateParagraphLength = function _calculateParagraphLength(paragraphedStrings, ctx) { + var paragraphLength = []; + for (var i = 0; i < paragraphedStrings.length; ++i) { + var width = textUtils.safeMeasureText(ctx, paragraphedStrings[i], _fontDesc); + paragraphLength.push(width); + } + return paragraphLength; + }; + _proto._measureText = function _measureText(ctx, fontDesc) { + return function(string) { + return textUtils.safeMeasureText(ctx, string, fontDesc); + }; + }; + _proto._calculateShrinkFont = function _calculateShrinkFont(paragraphedStrings) { + var paragraphLength = this._calculateParagraphLength(paragraphedStrings, _context); + var i = 0; + var totalHeight = 0; + var maxLength = 0; + if (_isWrapText) { + var canvasWidthNoMargin = _nodeContentSize.width; + var canvasHeightNoMargin = _nodeContentSize.height; + if (canvasWidthNoMargin < 0 || canvasHeightNoMargin < 0) return; + totalHeight = canvasHeightNoMargin + 1; + var actualFontSize = _fontSize + 1; + var textFragment = ""; + var left = 0, right = 0 | actualFontSize, mid = 0; + while (left < right) { + mid = left + right + 1 >> 1; + if (mid <= 0) { + cc.logID(4003); + break; + } + _fontSize = mid; + _fontDesc = this._getFontDesc(); + _context.font = _fontDesc; + var lineHeight = this._getLineHeight(); + totalHeight = 0; + for (i = 0; i < paragraphedStrings.length; ++i) { + var allWidth = textUtils.safeMeasureText(_context, paragraphedStrings[i], _fontDesc); + textFragment = textUtils.fragmentText(paragraphedStrings[i], allWidth, canvasWidthNoMargin, this._measureText(_context, _fontDesc)); + totalHeight += textFragment.length * lineHeight; + } + totalHeight > canvasHeightNoMargin ? right = mid - 1 : left = mid; + } + if (0 === left) cc.logID(4003); else { + _fontSize = left; + _fontDesc = this._getFontDesc(); + _context.font = _fontDesc; + } + } else { + totalHeight = paragraphedStrings.length * this._getLineHeight(); + for (i = 0; i < paragraphedStrings.length; ++i) maxLength < paragraphLength[i] && (maxLength = paragraphLength[i]); + var scaleX = (_canvasSize.width - _canvasPadding.width) / maxLength; + var scaleY = _canvasSize.height / totalHeight; + _fontSize = _drawFontSize * Math.min(1, scaleX, scaleY) | 0; + _fontDesc = this._getFontDesc(); + _context.font = _fontDesc; + } + }; + _proto._calculateWrapText = function _calculateWrapText(paragraphedStrings) { + if (!_isWrapText) return; + _splitedStrings = []; + var canvasWidthNoMargin = _nodeContentSize.width; + for (var i = 0; i < paragraphedStrings.length; ++i) { + var allWidth = textUtils.safeMeasureText(_context, paragraphedStrings[i], _fontDesc); + var textFragment = textUtils.fragmentText(paragraphedStrings[i], allWidth, canvasWidthNoMargin, this._measureText(_context, _fontDesc)); + _splitedStrings = _splitedStrings.concat(textFragment); + } + }; + _proto._calculateLabelFont = function _calculateLabelFont() { + var paragraphedStrings = _string.split("\n"); + _splitedStrings = paragraphedStrings; + _fontDesc = this._getFontDesc(); + _context.font = _fontDesc; + switch (_overflow) { + case Overflow.NONE: + var canvasSizeX = 0; + var canvasSizeY = 0; + for (var i = 0; i < paragraphedStrings.length; ++i) { + var paraLength = textUtils.safeMeasureText(_context, paragraphedStrings[i], _fontDesc); + canvasSizeX = canvasSizeX > paraLength ? canvasSizeX : paraLength; + } + canvasSizeY = (_splitedStrings.length + textUtils.BASELINE_RATIO) * this._getLineHeight(); + var rawWidth = parseFloat(canvasSizeX.toFixed(2)); + var rawHeight = parseFloat(canvasSizeY.toFixed(2)); + _canvasSize.width = rawWidth + _canvasPadding.width; + _canvasSize.height = rawHeight + _canvasPadding.height; + _nodeContentSize.width = rawWidth + _contentSizeExtend.width; + _nodeContentSize.height = rawHeight + _contentSizeExtend.height; + break; + + case Overflow.SHRINK: + this._calculateShrinkFont(paragraphedStrings); + this._calculateWrapText(paragraphedStrings); + break; + + case Overflow.CLAMP: + this._calculateWrapText(paragraphedStrings); + break; + + case Overflow.RESIZE_HEIGHT: + this._calculateWrapText(paragraphedStrings); + var _rawHeight = (_splitedStrings.length + textUtils.BASELINE_RATIO) * this._getLineHeight(); + _canvasSize.height = _rawHeight + _canvasPadding.height; + _nodeContentSize.height = _rawHeight + _contentSizeExtend.height; + } + }; + return TTFAssembler; + })(_assembler2d["default"]); + exports["default"] = TTFAssembler; + module.exports = exports["default"]; + }), { + "../../../components/CCLabel": 93, + "../../../components/CCLabelOutline": 94, + "../../../components/CCLabelShadow": 95, + "../../../platform/CCMacro": 126, + "../../../utils/text-utils": 212, + "../../assembler-2d": 147, + "../utils": 160 + } ], + 160: [ (function(require, module, exports) { + "use strict"; + var dynamicAtlasManager = require("./dynamic-atlas/manager"); + var WHITE = cc.Color.WHITE; + var shareLabelInfo = { + fontAtlas: null, + fontSize: 0, + lineHeight: 0, + hAlign: 0, + vAlign: 0, + hash: "", + fontFamily: "", + fontDesc: "Arial", + color: WHITE, + isOutlined: false, + out: WHITE, + margin: 0 + }; + module.exports = { + deleteFromDynamicAtlas: function deleteFromDynamicAtlas(comp, frame) { + if (frame && true && frame._original && dynamicAtlasManager) { + dynamicAtlasManager.deleteAtlasSpriteFrame(frame); + frame._resetDynamicAtlasFrame(); + } + }, + getFontFamily: function getFontFamily(comp) { + if (comp.useSystemFont) return comp.fontFamily || "Arial"; + if (comp.font) { + if (comp.font._nativeAsset) return comp.font._nativeAsset; + cc.assetManager.postLoadNative(comp.font, (function(err) { + comp.isValid && comp.setVertsDirty(); + })); + return "Arial"; + } + return "Arial"; + }, + shareLabelInfo: shareLabelInfo + }; + }), { + "./dynamic-atlas/manager": 154 + } ], + 161: [ (function(require, module, exports) { + "use strict"; + cc.assemblers = {}; + require("./sprite"); + require("./mask-assembler"); + require("./graphics"); + require("./label"); + require("./motion-streak"); + require("./motion-streak-multi"); + }), { + "./graphics": void 0, + "./label": 168, + "./mask-assembler": void 0, + "./motion-streak": 170, + "./motion-streak-multi": 169, + "./sprite": 183 + } ], + 162: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _bmfont = _interopRequireDefault(require("../2d/bmfont")); + var _vertexFormat = require("../../../../webgl/vertex-format"); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var MultiWebglBmfontAssembler = (function(_WebglBmfontAssembler) { + _inheritsLoose(MultiWebglBmfontAssembler, _WebglBmfontAssembler); + function MultiWebglBmfontAssembler() { + return _WebglBmfontAssembler.apply(this, arguments) || this; + } + var _proto = MultiWebglBmfontAssembler.prototype; + _proto.initData = function initData() { + var data = this._renderData; + data.createFlexData(0, this.verticesCount, this.indicesCount, this.getVfmt()); + }; + _proto.getVfmt = function getVfmt() { + return _vertexFormat.vfmtPosUvColorTexId; + }; + _proto.getBuffer = function getBuffer() { + return cc.renderer._handle.getBuffer("mesh", this.getVfmt()); + }; + _proto.updateRenderData = function updateRenderData(comp) { + _WebglBmfontAssembler.prototype.updateRenderData.call(this, comp); + comp._texIdDirty && comp._updateMultiTexId(comp.getMaterial(0), comp._frame._texture); + this.updateTexId(comp); + comp._texIdDirty = false; + }; + _proto.updateRenderDataForSwitchMaterial = function updateRenderDataForSwitchMaterial(comp) { + _WebglBmfontAssembler.prototype._preUpdateRenderData.call(this, comp); + _WebglBmfontAssembler.prototype._updateRenderData.call(this, comp); + comp._texIdDirty && comp._updateMultiTexId(comp.getMaterial(0), comp._frame._texture); + this.updateTexId(comp); + comp._texIdDirty = false; + }; + return MultiWebglBmfontAssembler; + })(_bmfont["default"]); + exports["default"] = MultiWebglBmfontAssembler; + MultiWebglBmfontAssembler.prototype.floatsPerVert = 6; + MultiWebglBmfontAssembler.prototype.texIdOffset = 5; + MultiWebglBmfontAssembler.prototype.isMulti = true; + module.exports = exports["default"]; + }), { + "../../../../webgl/vertex-format": 190, + "../2d/bmfont": 164 + } ], + 163: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _ttf = _interopRequireDefault(require("../2d/ttf")); + var _vertexFormat = require("../../../../webgl/vertex-format"); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var MultiWebglTTFAssembler = (function(_WebglTTFAssembler) { + _inheritsLoose(MultiWebglTTFAssembler, _WebglTTFAssembler); + function MultiWebglTTFAssembler() { + return _WebglTTFAssembler.apply(this, arguments) || this; + } + var _proto = MultiWebglTTFAssembler.prototype; + _proto.initData = function initData() { + var data = this._renderData; + data.createFlexData(0, this.verticesCount, this.indicesCount, this.getVfmt()); + var indices = data.iDatas[0]; + data.initQuadIndices(indices); + }; + _proto.getVfmt = function getVfmt() { + return _vertexFormat.vfmtPosUvColorTexId; + }; + _proto.getBuffer = function getBuffer() { + return cc.renderer._handle.getBuffer("mesh", this.getVfmt()); + }; + _proto.updateRenderData = function updateRenderData(comp) { + _WebglTTFAssembler.prototype.updateRenderData.call(this, comp); + comp._texIdDirty && comp._updateMultiTexId(comp.getMaterial(0), comp._frame._texture); + this.updateTexId(comp); + comp._texIdDirty = false; + }; + _proto.updateRenderDataForSwitchMaterial = function updateRenderDataForSwitchMaterial(comp) { + _WebglTTFAssembler.prototype._updateRenderData.call(this, comp); + comp._texIdDirty && comp._updateMultiTexId(comp.getMaterial(0), comp._frame._texture); + this.updateTexId(comp); + comp._texIdDirty = false; + }; + return MultiWebglTTFAssembler; + })(_ttf["default"]); + exports["default"] = MultiWebglTTFAssembler; + MultiWebglTTFAssembler.prototype.floatsPerVert = 6; + MultiWebglTTFAssembler.prototype.texIdOffset = 5; + MultiWebglTTFAssembler.prototype.isMulti = true; + module.exports = exports["default"]; + }), { + "../../../../webgl/vertex-format": 190, + "../2d/ttf": 167 + } ], + 164: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _bmfont = _interopRequireDefault(require("../../../../utils/label/bmfont")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var _dataOffset = 0; + var WebglBmfontAssembler = (function(_BmfontAssembler) { + _inheritsLoose(WebglBmfontAssembler, _BmfontAssembler); + function WebglBmfontAssembler() { + return _BmfontAssembler.apply(this, arguments) || this; + } + var _proto = WebglBmfontAssembler.prototype; + _proto.initData = function initData() { + this._renderData.createFlexData(0, 4, 6, this.getVfmt()); + }; + _proto._reserveQuads = function _reserveQuads(comp, count) { + var verticesCount = 4 * count; + var indicesCount = 6 * count; + var flexBuffer = this._renderData._flexBuffer; + flexBuffer.reserve(verticesCount, indicesCount); + flexBuffer.used(verticesCount, indicesCount); + var iData = this._renderData.iDatas[0]; + for (var i = 0, vid = 0, l = indicesCount; i < l; i += 6, vid += 4) { + iData[i] = vid; + iData[i + 1] = vid + 1; + iData[i + 2] = vid + 2; + iData[i + 3] = vid + 1; + iData[i + 4] = vid + 3; + iData[i + 5] = vid + 2; + } + _dataOffset = 0; + }; + _proto._quadsUpdated = function _quadsUpdated(comp) { + _dataOffset = 0; + var flexBuffer = this._renderData._flexBuffer; + flexBuffer.used(this.verticesCount, this.indicesCount); + }; + _proto._getColor = function _getColor(comp) { + return comp.node._color._val; + }; + _proto.appendQuad = function appendQuad(comp, texture, rect, rotated, x, y, scale, letter) { + var renderData = this._renderData; + var verts = renderData.vDatas[0], uintVerts = renderData.uintVDatas[0]; + this.verticesCount += 4; + this.indicesCount = this.verticesCount / 2 * 3; + var texw = texture.width, texh = texture.height, rectWidth = rect.width, rectHeight = rect.height, color = this._getColor(comp); + var l, b, r, t; + var floatsPerVert = this.floatsPerVert; + var uvDataOffset = _dataOffset + this.uvOffset; + if (rotated) { + l = rect.x / texw; + r = (rect.x + rectHeight) / texw; + b = (rect.y + rectWidth) / texh; + t = rect.y / texh; + verts[uvDataOffset] = l; + verts[uvDataOffset + 1] = t; + uvDataOffset += floatsPerVert; + verts[uvDataOffset] = l; + verts[uvDataOffset + 1] = b; + uvDataOffset += floatsPerVert; + verts[uvDataOffset] = r; + verts[uvDataOffset + 1] = t; + uvDataOffset += floatsPerVert; + verts[uvDataOffset] = r; + verts[uvDataOffset + 1] = b; + } else { + l = rect.x / texw; + r = (rect.x + rectWidth) / texw; + b = (rect.y + rectHeight) / texh; + t = rect.y / texh; + verts[uvDataOffset] = l; + verts[uvDataOffset + 1] = b; + uvDataOffset += floatsPerVert; + verts[uvDataOffset] = r; + verts[uvDataOffset + 1] = b; + uvDataOffset += floatsPerVert; + verts[uvDataOffset] = l; + verts[uvDataOffset + 1] = t; + uvDataOffset += floatsPerVert; + verts[uvDataOffset] = r; + verts[uvDataOffset + 1] = t; + } + var retinaScale = this.getTTFTextureSizeScale(); + x /= retinaScale; + y /= retinaScale; + rectWidth /= retinaScale; + rectHeight /= retinaScale; + l = x; + r = x + rectWidth * scale; + b = y - rectHeight * scale; + t = y; + this.appendVerts(comp, _dataOffset, l, r, b, t, letter); + var colorOffset = _dataOffset + this.colorOffset; + for (var i = 0; i < 4; i++) { + uintVerts[colorOffset] = color; + colorOffset += floatsPerVert; + } + _dataOffset += 4 * this.floatsPerVert; + }; + _proto.appendVerts = function appendVerts(comp, offset, l, r, b, t, letter) { + var local = this._local; + var floatsPerVert = this.floatsPerVert; + local[offset] = l; + local[offset + 1] = b; + offset += floatsPerVert; + local[offset] = r; + local[offset + 1] = b; + offset += floatsPerVert; + local[offset] = l; + local[offset + 1] = t; + offset += floatsPerVert; + local[offset] = r; + local[offset + 1] = t; + }; + _proto.updateWorldVerts = function updateWorldVerts(comp) { + var node = comp.node; + var matrix = node._worldMatrix; + var matrixm = matrix.m, a = matrixm[0], b = matrixm[1], c = matrixm[4], d = matrixm[5], tx = matrixm[12], ty = matrixm[13]; + var local = this._local; + var world = this._renderData.vDatas[0]; + var floatsPerVert = this.floatsPerVert; + for (var offset = 0; offset < local.length; offset += floatsPerVert) { + var x = local[offset]; + var y = local[offset + 1]; + world[offset] = x * a + y * c + tx; + world[offset + 1] = x * b + y * d + ty; + } + }; + return WebglBmfontAssembler; + })(_bmfont["default"]); + exports["default"] = WebglBmfontAssembler; + module.exports = exports["default"]; + }), { + "../../../../utils/label/bmfont": 156 + } ], + 165: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var js = require("../../../../../platform/js"); + var WebglBmfontAssembler = require("./bmfont"); + var LetterFontAssembler = require("../../../../utils/label/letter-font"); + var WHITE = cc.color(255, 255, 255, 255); + var WebglLetterFontAssembler = (function(_LetterFontAssembler) { + _inheritsLoose(WebglLetterFontAssembler, _LetterFontAssembler); + function WebglLetterFontAssembler() { + return _LetterFontAssembler.apply(this, arguments) || this; + } + var _proto = WebglLetterFontAssembler.prototype; + _proto.createData = function createData(comp) { + return comp.requestRenderData(); + }; + _proto._getColor = function _getColor(comp) { + WHITE._fastSetA(comp.node._color.a); + return WHITE._val; + }; + _proto.updateColor = function updateColor(comp) { + var color = this._getColor(comp); + _LetterFontAssembler.prototype.updateColor.call(this, comp, color); + }; + return WebglLetterFontAssembler; + })(LetterFontAssembler); + exports["default"] = WebglLetterFontAssembler; + module.exports = exports["default"]; + }), { + "../../../../../platform/js": 142, + "../../../../utils/label/letter-font": 158, + "./bmfont": 164 + } ], + 166: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _materialVariant = _interopRequireDefault(require("../../../../../assets/material/material-variant")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var Label = require("../../../../../components/CCLabel"); + var LabelShadow = require("../../../../../components/CCLabelShadow"); + var LabelOutline = require("../../../../../components/CCLabelOutline"); + var Material = require("../../../../../assets/material/CCMaterial"); + var UPDATE_CONTENT = 1; + var UPDATE_FONT = 2; + var UPDATE_EFFECT = 4; + var NativeTTF = (function() { + function NativeTTF() {} + var _proto = NativeTTF.prototype; + _proto.init = function init(comp) { + this.labelMaterial = null; + this._label = this._renderComp = comp; + renderer.CustomAssembler.prototype.ctor.call(this); + comp.node._proxy.setAssembler(this); + this._layout = new jsb.LabelRenderer(); + this._layout.init(comp); + this._cfg = new DataView(this._layout._cfg); + this._layoutInfo = new DataView(this._layout._layout); + this._cfgFields = jsb.LabelRenderer._cfgFields; + this._layoutFields = jsb.LabelRenderer._layoutFields; + this._layout.bindNodeProxy(comp.node._proxy); + this._bindMaterial(comp); + }; + _proto._setBufferFlag = function _setBufferFlag(dv, offset, size, type, flag) { + if ("int8" == type && 1 == size) { + var v = dv.getInt8(offset); + dv.setInt8(offset, flag | v); + } else if ("int32" == type && 4 == size) { + var _v = dv.getInt32(offset, jsb.__isLittleEndian__); + dv.setInt32(offset, flag | _v, jsb.__isLittleEndian__); + } else cc.warn("flag storage type should be int8/int32 only, type/size -> " + type + "/" + size + "."); + }; + _proto._updateCfgFlag = function _updateCfgFlag(flag) { + var field = this._cfgFields.updateFlags; + this._setBufferFlag(this._cfg, field.offset, field.size, field.type, flag); + }; + _proto._setBufferValue = function _setBufferValue(dv, offset, size, type, value) { + if ("float" == type && 4 == size) dv.setFloat32(offset, value, jsb.__isLittleEndian__); else if ("int32" == type && 4 == size) dv.setInt32(offset, value, jsb.__isLittleEndian__); else if ("bool" == type && 1 == size) dv.setInt8(offset, !value ? 0 : 1, jsb.__isLittleEndian__); else if ("Color4B" == type && 4 == size) { + dv.setUint8(offset, value.r); + dv.setUint8(offset + 1, value.g); + dv.setUint8(offset + 2, value.b); + dv.setUint8(offset + 3, value.a); + } else "int8" == type && 1 == size ? dv.setUint8(offset, value) : cc.warn("dont know how to set value to buffer, type/size -> " + type + "/" + size + "."); + }; + _proto._setFieldValue = function _setFieldValue(dv, desc, field_name, value) { + var field = desc[field_name]; + this._setBufferValue(dv, field.offset, field.size, field.type, value); + }; + _proto._getBufferValue = function _getBufferValue(dv, offset, size, type) { + if ("float" == type && 4 == size) return dv.getFloat32(offset, jsb.__isLittleEndian__); + if ("int32" == type && 4 == size) return dv.getInt32(offset, jsb.__isLittleEndian__); + if ("bool" == type && 1 == size) return 0 != dv.getInt8(offset, jsb.__isLittleEndian__); + if ("Color4B" == type && 4 == size) { + var r = dv.getUint8(offset); + var g = dv.getUint8(offset + 1); + var b = dv.getUint8(offset + 2); + var a = dv.getUint8(offset + 3); + return { + r: r, + g: g, + b: b, + a: a + }; + } + if ("int8" == type && 1 == size) return dv.getUint8(offset); + cc.warn("dont know how to get value from buffer, type/size -> " + type + "/" + size + "."); + return; + }; + _proto._getFieldValue = function _getFieldValue(dv, desc, field_name) { + var field = desc[field_name]; + return this._getBufferValue(dv, field.offset, field.size, field.type); + }; + _proto._getLayoutValue = function _getLayoutValue(field_name) { + return this._getFieldValue(this._layoutInfo, this._layoutFields, field_name); + }; + _proto._setLayoutValue = function _setLayoutValue(field_name, value) { + return this._setFieldValue(this._layoutInfo, this._layoutFields, field_name, value); + }; + _proto._updateCfgFlag_Content = function _updateCfgFlag_Content() { + this._updateCfgFlag(UPDATE_CONTENT); + }; + _proto._updateCfgFlag_Font = function _updateCfgFlag_Font() { + this._updateCfgFlag(UPDATE_FONT); + }; + _proto._colorEqual = function _colorEqual(a, b) { + return a.r == b.r && a.g == b.g && a.b == b.b && a.a == b.a; + }; + _proto._colorToObj = function _colorToObj(r, g, b, a) { + return { + r: r, + g: g, + b: b, + a: a + }; + }; + _proto.setString = function setString(str) { + if (str != this._layout.string) { + this._layout.string = str; + this._updateCfgFlag_Content(); + } + }; + _proto.setFontPath = function setFontPath(path) { + if (path != this._layout.fontPath) { + this._layout.fontPath = path; + this._updateCfgFlag_Font(); + } + }; + _proto.setFontSize = function setFontSize(fontSize, fontSizeRetina) { + var oldfontsize = this._getFieldValue(this._cfg, this._cfgFields, "fontSize"); + if (oldfontsize != fontSize) { + this._setFieldValue(this._cfg, this._cfgFields, "fontSize", fontSize); + this._setFieldValue(this._cfg, this._cfgFields, "fontSizeRetina", fontSizeRetina); + this._updateCfgFlag_Font(); + } + }; + _proto.setOutline = function setOutline(outline) { + var oldOutline = this._getLayoutValue("outlineSize"); + oldOutline > 0 != outline > 0 && this._updateCfgFlag_Font(); + if (oldOutline != outline) { + this._updateCfgFlag_Content(); + this._setLayoutValue("outlineSize", outline); + } + }; + _proto.setOutlineColor = function setOutlineColor(color) { + var oldColor = this._getLayoutValue("outlineColor"); + if (!this._colorEqual(oldColor, color)) { + this._setLayoutValue("outlineColor", color); + this._updateCfgFlag_Content(); + } + }; + _proto.setLineHeight = function setLineHeight(lineHeight) { + var oldLineHeight = this._getLayoutValue("lineHeight"); + if (oldLineHeight != lineHeight) { + this._setLayoutValue("lineHeight", lineHeight); + this._updateCfgFlag_Content(); + } + }; + _proto.setOverFlow = function setOverFlow(overflow) { + var oldValue = this._getLayoutValue("overflow"); + if (oldValue != overflow) { + this._setLayoutValue("overflow", overflow); + this._updateCfgFlag_Content(); + } + }; + _proto.setEnableWrap = function setEnableWrap(value) { + var oldValue = this._getLayoutValue("wrap"); + if (oldValue != value) { + this._setLayoutValue("wrap", value); + this._updateCfgFlag_Content(); + } + }; + _proto.setVerticalAlign = function setVerticalAlign(value) { + var oldValue = this._getLayoutValue("valign"); + if (oldValue != value) { + this._setLayoutValue("valign", value); + this._updateCfgFlag_Content(); + } + }; + _proto.setHorizontalAlign = function setHorizontalAlign(value) { + var oldValue = this._getLayoutValue("halign"); + if (oldValue != value) { + this._setLayoutValue("halign", value); + this._updateCfgFlag_Content(); + } + }; + _proto.setContentSize = function setContentSize(width, height) { + var oldWidth = this._getLayoutValue("width"); + var oldHeight = this._getLayoutValue("height"); + if (oldWidth != width || oldHeight != height) { + this._setLayoutValue("height", height); + this._setLayoutValue("width", width); + this._updateCfgFlag_Content(); + } + }; + _proto.setAnchorPoint = function setAnchorPoint(x, y) { + var oldX = this._getLayoutValue("anchorX"); + var oldY = this._getLayoutValue("anchorY"); + if (oldX != x || oldY != y) { + this._setLayoutValue("anchorX", x); + this._setLayoutValue("anchorY", y); + this._updateCfgFlag_Content(); + } + }; + _proto.setColor = function setColor(color) { + var oldColor = this._getLayoutValue("color"); + if (!this._colorEqual(oldColor, color)) { + this._setLayoutValue("color", color); + this._updateCfgFlag_Content(); + } + }; + _proto.setShadow = function setShadow(x, y, blur) { + var oldBlur = this._getLayoutValue("shadowBlur"); + var oldX = this._getLayoutValue("shadowX"); + var oldY = this._getLayoutValue("shadowY"); + oldBlur > 0 != blur > 0 && this._updateCfgFlag_Font(); + var updateContent = false; + if (oldBlur != blur) { + this._setLayoutValue("shadowBlur", blur); + updateContent = true; + } + if (oldX != x) { + this._setLayoutValue("shadowX", x); + updateContent = true; + } + if (oldY != y) { + this._setLayoutValue("shadowY", y); + updateContent = true; + } + updateContent && this._updateCfgFlag_Content(); + }; + _proto.setShadowColor = function setShadowColor(color) { + var oldColor = this._getLayoutValue("shadowColor"); + if (!this._colorEqual(oldColor, color)) { + this._setLayoutValue("shadowColor", color); + this._updateCfgFlag_Content(); + } + }; + _proto.setItalic = function setItalic(enabled) { + var oldItalic = this._getLayoutValue("italic"); + if (oldItalic != enabled) { + this._setLayoutValue("italic", enabled); + this._updateCfgFlag_Content(); + } + }; + _proto.setBold = function setBold(bold) { + var oldBold = this._getLayoutValue("bold"); + if (oldBold != bold) { + this._setLayoutValue("bold", bold); + this._updateCfgFlag_Content(); + this._updateCfgFlag_Font(); + } + }; + _proto.setUnderline = function setUnderline(underline) { + var oldBold = this._getLayoutValue("underline"); + if (oldBold != underline) { + this._setLayoutValue("underline", underline); + this._updateCfgFlag_Content(); + } + }; + _proto.setSpacingX = function setSpacingX(x) { + var oldX = this._getLayoutValue("spaceX"); + if (oldX != x && "number" == typeof x && !isNaN(x)) { + this._setLayoutValue("spaceX", x); + this._updateCfgFlag_Content(); + } + }; + _proto.updateRenderData = function updateRenderData(comp) { + if (!comp._vertsDirty) return; + comp.font && comp.font.nativeUrl && this.setFontPath(cc.assetManager.cacheManager.getCache(comp.font.nativeUrl) || comp.font.nativeUrl); + var layout = this._layout; + var c = comp.node.color; + var node = comp.node; + var retinaSize = comp.fontSize; + this.setString(comp.string); + this.setFontSize(comp.fontSize, retinaSize / 72 * comp.fontSize); + this.setLineHeight(comp.lineHeight); + this.setEnableWrap(comp.enableWrapText); + this.setItalic(comp.enableItalic); + this.setUnderline(comp.enableUnderline); + this.setBold(comp.enableBold); + this.setOverFlow(comp.overflow); + this.setVerticalAlign(comp.verticalAlign); + this.setHorizontalAlign(comp.horizontalAlign); + this.setSpacingX(comp.spacingX); + this.setContentSize(node.getContentSize().width, node.getContentSize().height); + this.setAnchorPoint(node.anchorX, node.anchorY); + this.setColor(this._colorToObj(c.getR(), c.getG(), c.getB(), Math.ceil(c.getA() * node.opacity / 255))); + var shadow = node.getComponent(cc.LabelShadow); + if (shadow && shadow.enabled) { + var shadowColor = shadow.color; + this.setShadow(shadow.offset.x, shadow.offset.y, shadow.blur); + this.setShadowColor(this._colorToObj(shadowColor.getR(), shadowColor.getG(), shadowColor.getB(), Math.ceil(shadowColor.getA() * node.opacity / 255))); + } else this.setShadow(0, 0, -1); + this._updateTTFMaterial(comp); + layout.render(); + }; + _proto._bindMaterial = function _bindMaterial(comp) { + var material = this.labelMaterial; + if (!material) { + material = _materialVariant["default"].createWithBuiltin("2d-label", comp); + this.labelMaterial = material; + } + return material; + }; + _proto._updateTTFMaterial = function _updateTTFMaterial(comp) { + var material = this._bindMaterial(comp); + var node = this._label.node; + var layout = this._layout; + var outline = node.getComponent(cc.LabelOutline); + var outlineSize = 0; + if (outline && outline.enabled && outline.width > 0) { + outlineSize = Math.max(Math.min(outline.width / 10, .4), .1); + var c = outline.color; + this.setOutlineColor(this._colorToObj(c.getR(), c.getG(), c.getB(), Math.ceil(c.getA() * node.opacity / 255))); + } + this.setOutline(outlineSize); + material.define("CC_USE_MODEL", true); + material.define("USE_TEXTURE_ALPHAONLY", true); + material.define("USE_SDF", outlineSize > 0 || comp.enableBold); + material.define("USE_SDF_EXTEND", comp.enableBold ? 1 : 0); + void 0 !== material.getDefine("CC_SUPPORT_standard_derivatives") && cc.sys.glExtension("OES_standard_derivatives") && material.define("CC_SUPPORT_standard_derivatives", true); + layout.setEffect(material.effect._nativeObj); + }; + _proto.fillBuffers = function fillBuffers(comp, renderer) { + this._layout.render(); + }; + _proto.getVfmt = function getVfmt() {}; + return NativeTTF; + })(); + exports["default"] = NativeTTF; + module.exports = exports["default"]; + }), { + "../../../../../assets/material/CCMaterial": 75, + "../../../../../assets/material/material-variant": 82, + "../../../../../components/CCLabel": 93, + "../../../../../components/CCLabelOutline": 94, + "../../../../../components/CCLabelShadow": 95 + } ], + 167: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _ttf = _interopRequireDefault(require("../../../../utils/label/ttf")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var LabelShadow = require("../../../../../components/CCLabelShadow"); + var WHITE = cc.color(255, 255, 255, 255); + var WebglTTFAssembler = (function(_TTFAssembler) { + _inheritsLoose(WebglTTFAssembler, _TTFAssembler); + function WebglTTFAssembler() { + return _TTFAssembler.apply(this, arguments) || this; + } + var _proto = WebglTTFAssembler.prototype; + _proto.updateUVs = function updateUVs(comp) { + var verts = this._renderData.vDatas[0]; + var uv = comp._frame.uv; + var uvOffset = this.uvOffset; + var floatsPerVert = this.floatsPerVert; + for (var i = 0; i < 4; i++) { + var srcOffset = 2 * i; + var dstOffset = floatsPerVert * i + uvOffset; + verts[dstOffset] = uv[srcOffset]; + verts[dstOffset + 1] = uv[srcOffset + 1]; + } + }; + _proto.updateColor = function updateColor(comp) { + WHITE._fastSetA(comp.node._color.a); + var color = WHITE._val; + _TTFAssembler.prototype.updateColor.call(this, comp, color); + }; + _proto.updateVerts = function updateVerts(comp) { + var scale = this.getTTFTextureSizeScale(); + var node = comp.node, canvasWidth = comp._ttfTexture.width / scale, canvasHeight = comp._ttfTexture.height / scale, appx = node.anchorX * node.width, appy = node.anchorY * node.height; + var shadow = LabelShadow && comp.getComponent(LabelShadow); + if (shadow && shadow._enabled) { + var offsetX = (canvasWidth - node.width) / 2; + var offsetY = (canvasHeight - node.height) / 2; + var shadowOffset = shadow.offset; + -shadowOffset.x > offsetX ? appx += canvasWidth - node.width : offsetX > shadowOffset.x && (appx += offsetX - shadowOffset.x); + -shadowOffset.y > offsetY ? appy += canvasHeight - node.height : offsetY > shadowOffset.y && (appy += offsetY - shadowOffset.y); + } + var local = this._local; + local[0] = -appx; + local[1] = -appy; + local[2] = canvasWidth - appx; + local[3] = canvasHeight - appy; + this.updateUVs(comp); + this.updateWorldVerts(comp); + }; + return WebglTTFAssembler; + })(_ttf["default"]); + exports["default"] = WebglTTFAssembler; + module.exports = exports["default"]; + }), { + "../../../../../components/CCLabelShadow": 95, + "../../../../utils/label/ttf": 159 + } ], + 168: [ (function(require, module, exports) { + "use strict"; + var _assembler = _interopRequireDefault(require("../../../assembler")); + var _CCLabel = _interopRequireDefault(require("../../../../components/CCLabel")); + var _ttf = _interopRequireDefault(require("./2d/ttf")); + var _bmfont = _interopRequireDefault(require("./2d/bmfont")); + var _letter = _interopRequireDefault(require("./2d/letter")); + var _ttf2 = _interopRequireDefault(require("./3d/ttf")); + var _bmfont2 = _interopRequireDefault(require("./3d/bmfont")); + var _letter2 = _interopRequireDefault(require("./3d/letter")); + var _ttf3 = _interopRequireDefault(require("./2d-multi/ttf")); + var _bmfont3 = _interopRequireDefault(require("./2d-multi/bmfont")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var NativeTTF = void 0; + false; + _CCLabel["default"]._canvasPool = { + pool: [], + get: function get() { + var data = this.pool.pop(); + if (!data) { + var canvas = document.createElement("canvas"); + var context = canvas.getContext("2d"); + data = { + canvas: canvas, + context: context + }; + context.textBaseline = "alphabetic"; + } + return data; + }, + put: function put(canvas) { + if (this.pool.length >= 32) return; + this.pool.push(canvas); + } + }; + _assembler["default"].register(cc.Label, { + getConstructor: function getConstructor(label) { + var is3DNode = label.node.is3DNode; + var material = label.getMaterials()[0]; + var isMultiMaterial = material && material.material.isMultiSupport(); + var ctor = is3DNode ? _ttf2["default"] : isMultiMaterial ? _ttf3["default"] : _ttf["default"]; + if (label.font instanceof cc.BitmapFont) ctor = is3DNode ? _bmfont2["default"] : isMultiMaterial ? _bmfont3["default"] : _bmfont["default"]; else if (label.cacheMode === _CCLabel["default"].CacheMode.CHAR) { + false; + cc.sys.platform === cc.sys.WECHAT_GAME_SUB ? cc.warn("sorry, subdomain does not support CHAR mode currently!") : ctor = is3DNode ? _letter2["default"] : _letter["default"]; + } + return ctor; + }, + TTF: _ttf["default"], + Bmfont: _bmfont["default"], + Letter: _letter["default"], + TTF3D: _ttf2["default"], + Bmfont3D: _bmfont2["default"], + Letter3D: _letter2["default"], + NativeTTF: NativeTTF, + TTFMulti: _ttf3["default"], + BmfontMulti: _bmfont3["default"] + }); + }), { + "../../../../components/CCLabel": 93, + "../../../assembler": 149, + "./2d-multi/bmfont": 162, + "./2d-multi/ttf": 163, + "./2d/bmfont": 164, + "./2d/letter": 165, + "./2d/nativeTTF": 166, + "./2d/ttf": 167, + "./3d/bmfont": void 0, + "./3d/letter": void 0, + "./3d/ttf": void 0 + } ], + 169: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _motionStreak = _interopRequireDefault(require("./motion-streak")); + var _vertexFormat = require("../../webgl/vertex-format"); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var MotionStreak = require("../../../components/CCMotionStreak"); + var RenderFlow = require("../../render-flow"); + function Point(point, dir) { + this.point = point || cc.v2(); + this.dir = dir || cc.v2(); + this.distance = 0; + this.time = 0; + } + Point.prototype.setPoint = function(x, y) { + this.point.x = x; + this.point.y = y; + }; + Point.prototype.setDir = function(x, y) { + this.dir.x = x; + this.dir.y = y; + }; + var _normal = cc.v2(); + var _vec2 = cc.v2(); + function normal(out, dir) { + out.x = -dir.y; + out.y = dir.x; + return out; + } + var MultiMotionStreakAssembler = (function(_MotionStreakAssemble) { + _inheritsLoose(MultiMotionStreakAssembler, _MotionStreakAssemble); + function MultiMotionStreakAssembler() { + return _MotionStreakAssemble.apply(this, arguments) || this; + } + var _proto = MultiMotionStreakAssembler.prototype; + _proto.initData = function initData() { + this._renderData.createFlexData(0, 16, 42, this.getVfmt()); + }; + _proto.getVfmt = function getVfmt() { + return _vertexFormat.vfmtPosUvColorTexId; + }; + _proto.getBuffer = function getBuffer() { + return cc.renderer._handle.getBuffer("mesh", this.getVfmt()); + }; + _proto.update = function update(comp, dt) { + false; + var stroke = comp._stroke / 2; + var node = comp.node; + var matrix = node._worldMatrix.m; + var tx = matrix[12], ty = matrix[13]; + var points = comp._points; + var cur; + if (points.length > 1) { + var difx = points[0].point.x - tx; + var dify = points[0].point.y - ty; + difx * difx + dify * dify < comp.minSeg && (cur = points[0]); + } + if (!cur) { + cur = new Point(); + points.splice(0, 0, cur); + } + cur.setPoint(tx, ty); + cur.time = comp._fadeTime + dt; + var verticesCount = 0; + var indicesCount = 0; + if (points.length < 2) return; + var color = comp._color, cr = color.r, cg = color.g, cb = color.b, ca = color.a; + var prev = points[1]; + prev.distance = cur.point.sub(prev.point, _vec2).mag(); + _vec2.normalizeSelf(); + prev.setDir(_vec2.x, _vec2.y); + cur.setDir(_vec2.x, _vec2.y); + var flexBuffer = this._renderData._flexBuffer; + flexBuffer.reserve(2 * points.length, 6 * (points.length - 1)); + var vData = flexBuffer.vData; + var uintVData = flexBuffer.uintVData; + var vertsOffset = 6; + var fadeTime = comp._fadeTime; + var findLast = false; + for (var i = points.length - 1; i >= 0; i--) { + var p = points[i]; + var point = p.point; + var dir = p.dir; + p.time -= dt; + if (p.time < 0) { + points.splice(i, 1); + continue; + } + var progress = p.time / fadeTime; + var next = points[i - 1]; + if (!findLast) { + if (!next) { + points.splice(i, 1); + continue; + } + point.x = next.point.x - dir.x * progress; + point.y = next.point.y - dir.y * progress; + } + findLast = true; + normal(_normal, dir); + var da = progress * ca; + var c = (da << 24 >>> 0) + (cb << 16) + (cg << 8) + cr; + var offset = verticesCount * vertsOffset; + vData[offset] = point.x + _normal.x * stroke; + vData[offset + 1] = point.y + _normal.y * stroke; + vData[offset + 2] = 1; + vData[offset + 3] = progress; + uintVData[offset + 4] = c; + vData[offset + 5] = comp._texId; + offset += vertsOffset; + vData[offset] = point.x - _normal.x * stroke; + vData[offset + 1] = point.y - _normal.y * stroke; + vData[offset + 2] = 0; + vData[offset + 3] = progress; + uintVData[offset + 4] = c; + vData[offset + 5] = comp._texId; + verticesCount += 2; + } + indicesCount = verticesCount <= 2 ? 0 : 3 * (verticesCount - 2); + flexBuffer.used(verticesCount, indicesCount); + }; + _proto.fillBuffers = function fillBuffers(comp, renderer) { + var _this$_renderData$_fl = this._renderData._flexBuffer, vData = _this$_renderData$_fl.vData, usedVertices = _this$_renderData$_fl.usedVertices, usedIndices = _this$_renderData$_fl.usedIndices, usedVerticesFloats = _this$_renderData$_fl.usedVerticesFloats; + var buffer = this.getBuffer(renderer); + var offsetInfo = buffer.request(usedVertices, usedIndices); + var vertexOffset = offsetInfo.byteOffset >> 2, vbuf = buffer._vData; + vData.length + vertexOffset > vbuf.length ? vbuf.set(vData.subarray(0, usedVerticesFloats), vertexOffset) : vbuf.set(vData, vertexOffset); + var ibuf = buffer._iData, indiceOffset = offsetInfo.indiceOffset, vertexId = offsetInfo.vertexOffset; + for (var i = 0, l = usedVertices; i < l; i += 2) { + var start = vertexId + i; + ibuf[indiceOffset++] = start; + ibuf[indiceOffset++] = start + 2; + ibuf[indiceOffset++] = start + 1; + ibuf[indiceOffset++] = start + 1; + ibuf[indiceOffset++] = start + 2; + ibuf[indiceOffset++] = start + 3; + } + comp.node._renderFlag |= RenderFlow.FLAG_UPDATE_RENDER_DATA; + }; + return MultiMotionStreakAssembler; + })(_motionStreak["default"]); + exports["default"] = MultiMotionStreakAssembler; + _motionStreak["default"].register(MotionStreak, { + getConstructor: function getConstructor(comp) { + var material = comp.getMaterials()[0]; + var isMultiMaterial = material && material.material.isMultiSupport(); + return isMultiMaterial ? MultiMotionStreakAssembler : _motionStreak["default"]; + }, + MotionStreakAssembler: _motionStreak["default"], + MultiMotionStreakAssembler: MultiMotionStreakAssembler + }); + MultiMotionStreakAssembler.prototype.floatsPerVert = 6; + MultiMotionStreakAssembler.prototype.texIdOffset = 5; + MultiMotionStreakAssembler.prototype.isMulti = true; + module.exports = exports["default"]; + }), { + "../../../components/CCMotionStreak": 97, + "../../render-flow": 153, + "../../webgl/vertex-format": 190, + "./motion-streak": 170 + } ], + 170: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _assembler2d = _interopRequireDefault(require("../../assembler-2d")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var RenderFlow = require("../../render-flow"); + function Point(point, dir) { + this.point = point || cc.v2(); + this.dir = dir || cc.v2(); + this.distance = 0; + this.time = 0; + } + Point.prototype.setPoint = function(x, y) { + this.point.x = x; + this.point.y = y; + }; + Point.prototype.setDir = function(x, y) { + this.dir.x = x; + this.dir.y = y; + }; + var _tangent = cc.v2(); + var _miter = cc.v2(); + var _normal = cc.v2(); + var _vec2 = cc.v2(); + function normal(out, dir) { + out.x = -dir.y; + out.y = dir.x; + return out; + } + function computeMiter(miter, lineA, lineB, halfThick, maxMultiple) { + lineA.add(lineB, _tangent); + _tangent.normalizeSelf(); + miter.x = -_tangent.y; + miter.y = _tangent.x; + _vec2.x = -lineA.y; + _vec2.y = lineA.x; + var multiple = 1 / miter.dot(_vec2); + maxMultiple && (multiple = Math.min(multiple, maxMultiple)); + return halfThick * multiple; + } + var MotionStreakAssembler = (function(_Assembler2D) { + _inheritsLoose(MotionStreakAssembler, _Assembler2D); + function MotionStreakAssembler() { + return _Assembler2D.apply(this, arguments) || this; + } + var _proto = MotionStreakAssembler.prototype; + _proto.initData = function initData() { + this._renderData.createFlexData(0, 16, 42); + }; + _proto.update = function update(comp, dt) { + false; + var stroke = comp._stroke / 2; + var node = comp.node; + var matrix = node._worldMatrix.m; + var tx = matrix[12], ty = matrix[13]; + var points = comp._points; + var cur; + if (points.length > 1) { + var difx = points[0].point.x - tx; + var dify = points[0].point.y - ty; + difx * difx + dify * dify < comp.minSeg && (cur = points[0]); + } + if (!cur) { + cur = new Point(); + points.splice(0, 0, cur); + } + cur.setPoint(tx, ty); + cur.time = comp._fadeTime + dt; + var verticesCount = 0; + var indicesCount = 0; + if (points.length < 2) return; + var color = comp._color, cr = color.r, cg = color.g, cb = color.b, ca = color.a; + var prev = points[1]; + prev.distance = cur.point.sub(prev.point, _vec2).mag(); + _vec2.normalizeSelf(); + prev.setDir(_vec2.x, _vec2.y); + cur.setDir(_vec2.x, _vec2.y); + var flexBuffer = this._renderData._flexBuffer; + flexBuffer.reserve(2 * points.length, 6 * (points.length - 1)); + var vData = flexBuffer.vData; + var uintVData = flexBuffer.uintVData; + var vertsOffset = 5; + var fadeTime = comp._fadeTime; + var findLast = false; + for (var i = points.length - 1; i >= 0; i--) { + var p = points[i]; + var point = p.point; + var dir = p.dir; + p.time -= dt; + if (p.time < 0) { + points.splice(i, 1); + continue; + } + var progress = p.time / fadeTime; + var next = points[i - 1]; + if (!findLast) { + if (!next) { + points.splice(i, 1); + continue; + } + point.x = next.point.x - dir.x * progress; + point.y = next.point.y - dir.y * progress; + } + findLast = true; + normal(_normal, dir); + var da = progress * ca; + var c = (da << 24 >>> 0) + (cb << 16) + (cg << 8) + cr; + var offset = verticesCount * vertsOffset; + vData[offset] = point.x + _normal.x * stroke; + vData[offset + 1] = point.y + _normal.y * stroke; + vData[offset + 2] = 1; + vData[offset + 3] = progress; + uintVData[offset + 4] = c; + offset += vertsOffset; + vData[offset] = point.x - _normal.x * stroke; + vData[offset + 1] = point.y - _normal.y * stroke; + vData[offset + 2] = 0; + vData[offset + 3] = progress; + uintVData[offset + 4] = c; + verticesCount += 2; + } + indicesCount = verticesCount <= 2 ? 0 : 3 * (verticesCount - 2); + flexBuffer.used(verticesCount, indicesCount); + }; + _proto.fillBuffers = function fillBuffers(comp, renderer) { + var _this$_renderData$_fl = this._renderData._flexBuffer, vData = _this$_renderData$_fl.vData, usedVertices = _this$_renderData$_fl.usedVertices, usedIndices = _this$_renderData$_fl.usedIndices, usedVerticesFloats = _this$_renderData$_fl.usedVerticesFloats; + var buffer = renderer._meshBuffer; + var offsetInfo = buffer.request(usedVertices, usedIndices); + var vertexOffset = offsetInfo.byteOffset >> 2, vbuf = buffer._vData; + vData.length + vertexOffset > vbuf.length ? vbuf.set(vData.subarray(0, usedVerticesFloats), vertexOffset) : vbuf.set(vData, vertexOffset); + var ibuf = buffer._iData, indiceOffset = offsetInfo.indiceOffset, vertexId = offsetInfo.vertexOffset; + for (var i = 0, l = usedVertices; i < l; i += 2) { + var start = vertexId + i; + ibuf[indiceOffset++] = start; + ibuf[indiceOffset++] = start + 2; + ibuf[indiceOffset++] = start + 1; + ibuf[indiceOffset++] = start + 1; + ibuf[indiceOffset++] = start + 2; + ibuf[indiceOffset++] = start + 3; + } + comp.node._renderFlag |= RenderFlow.FLAG_UPDATE_RENDER_DATA; + }; + return MotionStreakAssembler; + })(_assembler2d["default"]); + exports["default"] = MotionStreakAssembler; + module.exports = exports["default"]; + }), { + "../../assembler-2d": 147, + "../../render-flow": 153 + } ], + 171: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _vertexFormat = require("../../../../webgl/vertex-format"); + var _barFilled = _interopRequireDefault(require("../2d/bar-filled")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var BarFilledAssemblerMulti = (function(_BarFilledAssembler) { + _inheritsLoose(BarFilledAssemblerMulti, _BarFilledAssembler); + function BarFilledAssemblerMulti() { + return _BarFilledAssembler.apply(this, arguments) || this; + } + var _proto = BarFilledAssemblerMulti.prototype; + _proto.initData = function initData() { + var data = this._renderData; + data.createFlexData(0, this.verticesCount, this.indicesCount, this.getVfmt()); + var indices = data.iDatas[0]; + data.initQuadIndices(indices); + }; + _proto.getVfmt = function getVfmt() { + return _vertexFormat.vfmtPosUvColorTexId; + }; + _proto.getBuffer = function getBuffer() { + return cc.renderer._handle.getBuffer("mesh", this.getVfmt()); + }; + _proto.updateRenderData = function updateRenderData(sprite) { + _BarFilledAssembler.prototype.updateRenderData.call(this, sprite); + if (sprite._texIdDirty) { + sprite._updateMultiTexId(sprite.getMaterial(0), sprite._spriteFrame._texture); + if (sprite._texIdDirty) { + this.updateTexId(sprite); + sprite._texIdDirty = false; + } + } + }; + _proto.updateRenderDataForSwitchMaterial = function updateRenderDataForSwitchMaterial(sprite) { + if (sprite._vertsDirty) { + var fillStart = sprite._fillStart; + var fillRange = sprite._fillRange; + if (fillRange < 0) { + fillStart += fillRange; + fillRange = -fillRange; + } + fillRange = fillStart + fillRange; + fillStart = fillStart > 1 ? 1 : fillStart; + fillStart = fillStart < 0 ? 0 : fillStart; + fillRange = fillRange > 1 ? 1 : fillRange; + fillRange = fillRange < 0 ? 0 : fillRange; + fillRange -= fillStart; + fillRange = fillRange < 0 ? 0 : fillRange; + var fillEnd = fillStart + fillRange; + fillEnd = fillEnd > 1 ? 1 : fillEnd; + this.updateUVs(sprite, fillStart, fillEnd); + this.updateVerts(sprite, fillStart, fillEnd); + sprite._vertsDirty = false; + } + if (sprite._texIdDirty) { + sprite._updateMultiTexId(sprite.getMaterial(0), sprite._spriteFrame._texture); + if (sprite._texIdDirty) { + this.updateTexId(sprite); + sprite._texIdDirty = false; + } + } + }; + return BarFilledAssemblerMulti; + })(_barFilled["default"]); + exports["default"] = BarFilledAssemblerMulti; + BarFilledAssemblerMulti.prototype.floatsPerVert = 6; + BarFilledAssemblerMulti.prototype.texIdOffset = 5; + BarFilledAssemblerMulti.prototype.isMulti = true; + module.exports = exports["default"]; + }), { + "../../../../webgl/vertex-format": 190, + "../2d/bar-filled": 177 + } ], + 172: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _vertexFormat = require("../../../../webgl/vertex-format"); + var _mesh = _interopRequireDefault(require("../2d/mesh")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var MultiMeshSpriteAssembler = (function(_MeshSpriteAssembler) { + _inheritsLoose(MultiMeshSpriteAssembler, _MeshSpriteAssembler); + function MultiMeshSpriteAssembler() { + return _MeshSpriteAssembler.apply(this, arguments) || this; + } + var _proto = MultiMeshSpriteAssembler.prototype; + _proto.getVfmt = function getVfmt() { + return _vertexFormat.vfmtPosUvColorTexId; + }; + _proto.getBuffer = function getBuffer() { + return cc.renderer._handle.getBuffer("mesh", this.getVfmt()); + }; + _proto.updateRenderData = function updateRenderData(sprite) { + var frame = sprite.spriteFrame; + _MeshSpriteAssembler.prototype.updateRenderData.call(this, sprite); + if (frame) { + sprite._texIdDirty && sprite._updateMultiTexId(sprite.getMaterial(0), frame._texture); + this.updateTexId(sprite); + sprite._texIdDirty = false; + } + }; + _proto.updateRenderDataForSwitchMaterial = function updateRenderDataForSwitchMaterial(sprite) { + var frame = sprite.spriteFrame; + if (frame) { + var vertices = frame.vertices; + if (vertices) { + this.verticesCount = vertices.x.length; + this.indicesCount = vertices.triangles.length; + var renderData = this._renderData; + var flexBuffer = renderData._flexBuffer; + if (flexBuffer.reserve(this.verticesCount, this.indicesCount)) { + this.updateColor(sprite); + sprite._vertsDirty = true; + } + flexBuffer.used(this.verticesCount, this.indicesCount); + this.updateIndices(vertices.triangles); + if (sprite._vertsDirty) { + this.updateUVs(sprite); + this.updateVerts(sprite); + this.updateWorldVerts(sprite); + sprite._vertsDirty = false; + } + } + } + sprite._texIdDirty && sprite._updateMultiTexId(sprite.getMaterial(0), frame._texture); + this.updateTexId(sprite); + sprite._texIdDirty = false; + }; + return MultiMeshSpriteAssembler; + })(_mesh["default"]); + exports["default"] = MultiMeshSpriteAssembler; + MultiMeshSpriteAssembler.prototype.floatsPerVert = 6; + MultiMeshSpriteAssembler.prototype.texIdOffset = 5; + MultiMeshSpriteAssembler.prototype.isMulti = true; + module.exports = exports["default"]; + }), { + "../../../../webgl/vertex-format": 190, + "../2d/mesh": 178 + } ], + 173: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _vertexFormat = require("../../../../webgl/vertex-format"); + var _radialFilled = _interopRequireDefault(require("../2d/radial-filled")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var MultiRadialFilledAssembler = (function(_RadialFilledAssemble) { + _inheritsLoose(MultiRadialFilledAssembler, _RadialFilledAssemble); + function MultiRadialFilledAssembler() { + return _RadialFilledAssemble.apply(this, arguments) || this; + } + var _proto = MultiRadialFilledAssembler.prototype; + _proto.initData = function initData(sprite) { + this._renderData.createFlexData(0, 4, 6, this.getVfmt()); + this.updateIndices(); + }; + _proto.getVfmt = function getVfmt() { + return _vertexFormat.vfmtPosUvColorTexId; + }; + _proto.getBuffer = function getBuffer() { + return cc.renderer._handle.getBuffer("mesh", this.getVfmt()); + }; + _proto.updateRenderData = function updateRenderData(sprite) { + _RadialFilledAssemble.prototype.updateRenderData.call(this, sprite); + sprite._texIdDirty && sprite._updateMultiTexId(sprite.getMaterial(0), sprite.spriteFrame._texture); + this.updateTexId(sprite); + sprite._texIdDirty = false; + }; + _proto.updateRenderDataForSwitchMaterial = function updateRenderDataForSwitchMaterial(sprite) { + this._updateRenderData(sprite); + sprite._texIdDirty && sprite._updateMultiTexId(sprite.getMaterial(0), sprite.spriteFrame._texture); + this.updateTexId(sprite); + sprite._texIdDirty = false; + }; + return MultiRadialFilledAssembler; + })(_radialFilled["default"]); + exports["default"] = MultiRadialFilledAssembler; + MultiRadialFilledAssembler.prototype.floatsPerVert = 6; + MultiRadialFilledAssembler.prototype.texIdOffset = 5; + MultiRadialFilledAssembler.prototype.isMulti = true; + module.exports = exports["default"]; + }), { + "../../../../webgl/vertex-format": 190, + "../2d/radial-filled": 179 + } ], + 174: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _vertexFormat = require("../../../../webgl/vertex-format"); + var _simple = _interopRequireDefault(require("../2d/simple")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var MultiSimpleSpriteAssembler = (function(_SimpleSpriteAssemble) { + _inheritsLoose(MultiSimpleSpriteAssembler, _SimpleSpriteAssemble); + function MultiSimpleSpriteAssembler() { + return _SimpleSpriteAssemble.apply(this, arguments) || this; + } + var _proto = MultiSimpleSpriteAssembler.prototype; + _proto.initData = function initData() { + var data = this._renderData; + data.createFlexData(0, this.verticesCount, this.indicesCount, this.getVfmt()); + var indices = data.iDatas[0]; + data.initQuadIndices(indices); + }; + _proto.getVfmt = function getVfmt() { + return _vertexFormat.vfmtPosUvColorTexId; + }; + _proto.getBuffer = function getBuffer() { + return cc.renderer._handle.getBuffer("mesh", this.getVfmt()); + }; + _proto.updateRenderData = function updateRenderData(sprite) { + _SimpleSpriteAssemble.prototype.updateRenderData.call(this, sprite); + if (sprite._texIdDirty) { + sprite._updateMultiTexId(sprite.getMaterial(0), sprite._spriteFrame._texture); + if (sprite._texIdDirty) { + this.updateTexId(sprite); + sprite._texIdDirty = false; + } + } + }; + _proto.updateRenderDataForSwitchMaterial = function updateRenderDataForSwitchMaterial(sprite) { + if (sprite._vertsDirty) { + this.updateUVs(sprite); + this.updateVerts(sprite); + sprite._vertsDirty = false; + } + if (sprite._texIdDirty) { + sprite._updateMultiTexId(sprite.getMaterial(0), sprite._spriteFrame._texture); + if (sprite._texIdDirty) { + this.updateTexId(sprite); + sprite._texIdDirty = false; + } + } + }; + return MultiSimpleSpriteAssembler; + })(_simple["default"]); + exports["default"] = MultiSimpleSpriteAssembler; + MultiSimpleSpriteAssembler.prototype.floatsPerVert = 6; + MultiSimpleSpriteAssembler.prototype.texIdOffset = 5; + MultiSimpleSpriteAssembler.prototype.isMulti = true; + module.exports = exports["default"]; + }), { + "../../../../webgl/vertex-format": 190, + "../2d/simple": 180 + } ], + 175: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _vertexFormat = require("../../../../webgl/vertex-format"); + var _sliced = _interopRequireDefault(require("../2d/sliced")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var MultiSlicedAssembler = (function(_SlicedAssembler) { + _inheritsLoose(MultiSlicedAssembler, _SlicedAssembler); + function MultiSlicedAssembler() { + return _SlicedAssembler.apply(this, arguments) || this; + } + var _proto = MultiSlicedAssembler.prototype; + _proto.initData = function initData(sprite) { + if (this._renderData.meshCount > 0) return; + this._renderData.createFlexData(0, this.verticesCount, this.indicesCount, this.getVfmt()); + var indices = this._renderData.iDatas[0]; + var indexOffset = 0; + for (var r = 0; r < 3; ++r) for (var c = 0; c < 3; ++c) { + var start = 4 * r + c; + indices[indexOffset++] = start; + indices[indexOffset++] = start + 1; + indices[indexOffset++] = start + 4; + indices[indexOffset++] = start + 1; + indices[indexOffset++] = start + 5; + indices[indexOffset++] = start + 4; + } + }; + _proto.getVfmt = function getVfmt() { + return _vertexFormat.vfmtPosUvColorTexId; + }; + _proto.getBuffer = function getBuffer() { + return cc.renderer._handle.getBuffer("mesh", this.getVfmt()); + }; + _proto.updateRenderData = function updateRenderData(sprite) { + _SlicedAssembler.prototype.updateRenderData.call(this, sprite); + if (sprite._texIdDirty) { + sprite._updateMultiTexId(sprite.getMaterial(0), sprite._spriteFrame._texture); + if (sprite._texIdDirty) { + this.updateTexId(sprite); + sprite._texIdDirty = false; + } + } + }; + _proto.updateRenderDataForSwitchMaterial = function updateRenderDataForSwitchMaterial(sprite) { + if (sprite._vertsDirty) { + this.updateUVs(sprite); + this.updateVerts(sprite); + sprite._vertsDirty = false; + } + if (sprite._texIdDirty) { + sprite._updateMultiTexId(sprite.getMaterial(0), sprite._spriteFrame._texture); + if (sprite._texIdDirty) { + this.updateTexId(sprite); + sprite._texIdDirty = false; + } + } + }; + return MultiSlicedAssembler; + })(_sliced["default"]); + exports["default"] = MultiSlicedAssembler; + MultiSlicedAssembler.prototype.floatsPerVert = 6; + MultiSlicedAssembler.prototype.texIdOffset = 5; + MultiSlicedAssembler.prototype.isMulti = true; + module.exports = exports["default"]; + }), { + "../../../../webgl/vertex-format": 190, + "../2d/sliced": 181 + } ], + 176: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _vertexFormat = require("../../../../webgl/vertex-format"); + var _tiled = _interopRequireDefault(require("../2d/tiled")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var MultiTiledAssembler = (function(_TiledAssembler) { + _inheritsLoose(MultiTiledAssembler, _TiledAssembler); + function MultiTiledAssembler() { + return _TiledAssembler.apply(this, arguments) || this; + } + var _proto = MultiTiledAssembler.prototype; + _proto.getVfmt = function getVfmt() { + return _vertexFormat.vfmtPosUvColorTexId; + }; + _proto.getBuffer = function getBuffer() { + return cc.renderer._handle.getBuffer("mesh", this.getVfmt()); + }; + _proto.updateRenderData = function updateRenderData(sprite) { + _TiledAssembler.prototype.updateRenderData.call(this, sprite); + sprite._texIdDirty && sprite._updateMultiTexId(sprite.getMaterial(0), sprite.spriteFrame._texture); + this.updateTexId(sprite); + sprite._texIdDirty = false; + }; + _proto.updateRenderDataForSwitchMaterial = function updateRenderDataForSwitchMaterial(sprite) { + var frame = sprite._spriteFrame; + var node = sprite.node; + var contentWidth = this.contentWidth = Math.abs(node.width); + var contentHeight = this.contentHeight = Math.abs(node.height); + var rect = frame._rect; + var leftWidth = frame.insetLeft, rightWidth = frame.insetRight, centerWidth = rect.width - leftWidth - rightWidth, topHeight = frame.insetTop, bottomHeight = frame.insetBottom, centerHeight = rect.height - topHeight - bottomHeight; + this.sizableWidth = contentWidth - leftWidth - rightWidth; + this.sizableHeight = contentHeight - topHeight - bottomHeight; + this.sizableWidth = this.sizableWidth > 0 ? this.sizableWidth : 0; + this.sizableHeight = this.sizableHeight > 0 ? this.sizableHeight : 0; + var hRepeat = this.hRepeat = 0 === centerWidth ? this.sizableWidth : this.sizableWidth / centerWidth; + var vRepeat = this.vRepeat = 0 === centerHeight ? this.sizableHeight : this.sizableHeight / centerHeight; + var row = this.row = Math.ceil(vRepeat + 2); + var col = this.col = Math.ceil(hRepeat + 2); + var count = row * col; + this.verticesCount = 4 * count; + this.indicesCount = 6 * count; + var renderData = this._renderData; + var flexBuffer = renderData._flexBuffer; + if (flexBuffer.reserve(this.verticesCount, this.indicesCount)) { + this._updateIndices(); + this.updateColor(sprite); + } + flexBuffer.used(this.verticesCount, this.indicesCount); + if (sprite._vertsDirty) { + this.updateUVs(sprite); + this.updateVerts(sprite); + sprite._vertsDirty = false; + } + sprite._texIdDirty && sprite._updateMultiTexId(sprite.getMaterial(0), sprite.spriteFrame._texture); + this.updateTexId(sprite); + sprite._texIdDirty = false; + }; + return MultiTiledAssembler; + })(_tiled["default"]); + exports["default"] = MultiTiledAssembler; + MultiTiledAssembler.prototype.floatsPerVert = 6; + MultiTiledAssembler.prototype.texIdOffset = 5; + MultiTiledAssembler.prototype.isMulti = true; + module.exports = exports["default"]; + }), { + "../../../../webgl/vertex-format": 190, + "../2d/tiled": 182 + } ], + 177: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _assembler2d = _interopRequireDefault(require("../../../../assembler-2d")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var Sprite = require("../../../../../components/CCSprite"); + var FillType = Sprite.FillType; + var BarFilledAssembler = (function(_Assembler2D) { + _inheritsLoose(BarFilledAssembler, _Assembler2D); + function BarFilledAssembler() { + return _Assembler2D.apply(this, arguments) || this; + } + var _proto = BarFilledAssembler.prototype; + _proto.updateRenderData = function updateRenderData(sprite) { + var frame = sprite._spriteFrame; + var assemblerChanged = this.packDynamicAtlasAndCheckMaterial(sprite, frame); + if (!assemblerChanged && sprite._vertsDirty) { + var fillStart = sprite._fillStart; + var fillRange = sprite._fillRange; + if (fillRange < 0) { + fillStart += fillRange; + fillRange = -fillRange; + } + fillRange = fillStart + fillRange; + fillStart = fillStart > 1 ? 1 : fillStart; + fillStart = fillStart < 0 ? 0 : fillStart; + fillRange = fillRange > 1 ? 1 : fillRange; + fillRange = fillRange < 0 ? 0 : fillRange; + fillRange -= fillStart; + fillRange = fillRange < 0 ? 0 : fillRange; + var fillEnd = fillStart + fillRange; + fillEnd = fillEnd > 1 ? 1 : fillEnd; + this.updateUVs(sprite, fillStart, fillEnd); + this.updateVerts(sprite, fillStart, fillEnd); + sprite._vertsDirty = false; + } + }; + _proto.updateUVs = function updateUVs(sprite, fillStart, fillEnd) { + var spriteFrame = sprite._spriteFrame; + var atlasWidth = spriteFrame._texture.width; + var atlasHeight = spriteFrame._texture.height; + var textureRect = spriteFrame._rect; + var ul, vb, ur, vt; + var quadUV0, quadUV1, quadUV2, quadUV3, quadUV4, quadUV5, quadUV6, quadUV7; + if (spriteFrame._rotated) { + ul = textureRect.x / atlasWidth; + vb = (textureRect.y + textureRect.width) / atlasHeight; + ur = (textureRect.x + textureRect.height) / atlasWidth; + vt = textureRect.y / atlasHeight; + quadUV0 = quadUV2 = ul; + quadUV4 = quadUV6 = ur; + quadUV3 = quadUV7 = vb; + quadUV1 = quadUV5 = vt; + } else { + ul = textureRect.x / atlasWidth; + vb = (textureRect.y + textureRect.height) / atlasHeight; + ur = (textureRect.x + textureRect.width) / atlasWidth; + vt = textureRect.y / atlasHeight; + quadUV0 = quadUV4 = ul; + quadUV2 = quadUV6 = ur; + quadUV1 = quadUV3 = vb; + quadUV5 = quadUV7 = vt; + } + var verts = this._renderData.vDatas[0]; + var uvOffset = this.uvOffset; + var floatsPerVert = this.floatsPerVert; + switch (sprite._fillType) { + case FillType.HORIZONTAL: + verts[uvOffset] = quadUV0 + (quadUV2 - quadUV0) * fillStart; + verts[uvOffset + 1] = quadUV1 + (quadUV3 - quadUV1) * fillStart; + verts[uvOffset + floatsPerVert] = quadUV0 + (quadUV2 - quadUV0) * fillEnd; + verts[uvOffset + floatsPerVert + 1] = quadUV1 + (quadUV3 - quadUV1) * fillEnd; + verts[uvOffset + 2 * floatsPerVert] = quadUV4 + (quadUV6 - quadUV4) * fillStart; + verts[uvOffset + 2 * floatsPerVert + 1] = quadUV5 + (quadUV7 - quadUV5) * fillStart; + verts[uvOffset + 3 * floatsPerVert] = quadUV4 + (quadUV6 - quadUV4) * fillEnd; + verts[uvOffset + 3 * floatsPerVert + 1] = quadUV5 + (quadUV7 - quadUV5) * fillEnd; + break; + + case FillType.VERTICAL: + verts[uvOffset] = quadUV0 + (quadUV4 - quadUV0) * fillStart; + verts[uvOffset + 1] = quadUV1 + (quadUV5 - quadUV1) * fillStart; + verts[uvOffset + floatsPerVert] = quadUV2 + (quadUV6 - quadUV2) * fillStart; + verts[uvOffset + floatsPerVert + 1] = quadUV3 + (quadUV7 - quadUV3) * fillStart; + verts[uvOffset + 2 * floatsPerVert] = quadUV0 + (quadUV4 - quadUV0) * fillEnd; + verts[uvOffset + 2 * floatsPerVert + 1] = quadUV1 + (quadUV5 - quadUV1) * fillEnd; + verts[uvOffset + 3 * floatsPerVert] = quadUV2 + (quadUV6 - quadUV2) * fillEnd; + verts[uvOffset + 3 * floatsPerVert + 1] = quadUV3 + (quadUV7 - quadUV3) * fillEnd; + break; + + default: + cc.errorID(2626); + } + }; + _proto.updateVerts = function updateVerts(sprite, fillStart, fillEnd) { + var node = sprite.node, width = node.width, height = node.height, appx = node.anchorX * width, appy = node.anchorY * height; + var l = -appx, b = -appy, r = width - appx, t = height - appy; + var progressStart, progressEnd; + switch (sprite._fillType) { + case FillType.HORIZONTAL: + progressStart = l + (r - l) * fillStart; + progressEnd = l + (r - l) * fillEnd; + l = progressStart; + r = progressEnd; + break; + + case FillType.VERTICAL: + progressStart = b + (t - b) * fillStart; + progressEnd = b + (t - b) * fillEnd; + b = progressStart; + t = progressEnd; + break; + + default: + cc.errorID(2626); + } + var local = this._local; + local[0] = l; + local[1] = b; + local[2] = r; + local[3] = t; + this.updateWorldVerts(sprite); + }; + return BarFilledAssembler; + })(_assembler2d["default"]); + exports["default"] = BarFilledAssembler; + module.exports = exports["default"]; + }), { + "../../../../../components/CCSprite": 101, + "../../../../assembler-2d": 147 + } ], + 178: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _assembler2d = _interopRequireDefault(require("../../../../assembler-2d")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var MeshSpriteAssembler = (function(_Assembler2D) { + _inheritsLoose(MeshSpriteAssembler, _Assembler2D); + function MeshSpriteAssembler() { + return _Assembler2D.apply(this, arguments) || this; + } + var _proto = MeshSpriteAssembler.prototype; + _proto.initData = function initData(sprite) { + this._renderData.createFlexData(0, 4, 6, this.getVfmt()); + }; + _proto.updateRenderData = function updateRenderData(sprite) { + var frame = sprite.spriteFrame; + var assemblerChanged = this.packDynamicAtlasAndCheckMaterial(sprite, frame); + if (!assemblerChanged && frame) { + var vertices = frame.vertices; + if (vertices) { + this.verticesCount = vertices.x.length; + this.indicesCount = vertices.triangles.length; + var renderData = this._renderData; + var flexBuffer = renderData._flexBuffer; + if (flexBuffer.reserve(this.verticesCount, this.indicesCount)) { + this.updateColor(sprite); + sprite._vertsDirty = true; + } + flexBuffer.used(this.verticesCount, this.indicesCount); + this.updateIndices(vertices.triangles); + if (sprite._vertsDirty) { + this.updateUVs(sprite); + this.updateVerts(sprite); + this.updateWorldVerts(sprite); + sprite._vertsDirty = false; + } + } + } + }; + _proto.updateIndices = function updateIndices(triangles) { + this._renderData.iDatas[0].set(triangles); + }; + _proto.updateUVs = function updateUVs(sprite) { + var vertices = sprite.spriteFrame.vertices, u = vertices.nu, v = vertices.nv; + var uvOffset = this.uvOffset; + var floatsPerVert = this.floatsPerVert; + var verts = this._renderData.vDatas[0]; + for (var i = 0; i < u.length; i++) { + var dstOffset = floatsPerVert * i + uvOffset; + verts[dstOffset] = u[i]; + verts[dstOffset + 1] = v[i]; + } + }; + _proto.updateVerts = function updateVerts(sprite) { + var node = sprite.node, contentWidth = Math.abs(node.width), contentHeight = Math.abs(node.height), appx = node.anchorX * contentWidth, appy = node.anchorY * contentHeight; + var frame = sprite.spriteFrame, vertices = frame.vertices, x = vertices.x, y = vertices.y, originalWidth = frame._originalSize.width, originalHeight = frame._originalSize.height, rectWidth = frame._rect.width, rectHeight = frame._rect.height, offsetX = frame._offset.x, offsetY = frame._offset.y, trimX = offsetX + (originalWidth - rectWidth) / 2, trimY = offsetY + (originalHeight - rectHeight) / 2; + var scaleX = contentWidth / (sprite.trim ? rectWidth : originalWidth), scaleY = contentHeight / (sprite.trim ? rectHeight : originalHeight); + var local = this._local; + if (sprite.trim) for (var _i = 0, _l = x.length; _i < _l; _i++) { + var _offset = 2 * _i; + local[_offset] = (x[_i] - trimX) * scaleX - appx; + local[_offset + 1] = (originalHeight - y[_i] - trimY) * scaleY - appy; + } else for (var i = 0, l = x.length; i < l; i++) { + var offset = 2 * i; + local[offset] = x[i] * scaleX - appx; + local[offset + 1] = (originalHeight - y[i]) * scaleY - appy; + } + if (frame._flipX) for (var _i2 = 0, _l2 = this.verticesCount; _i2 < _l2; _i2++) local[2 * _i2] = contentWidth - local[2 * _i2] - 2 * appx; + if (frame._flipY) for (var _i3 = 0, _l3 = this.verticesCount; _i3 < _l3; _i3++) local[2 * _i3 + 1] = contentHeight - local[2 * _i3 + 1] - 2 * appy; + }; + _proto.updateWorldVerts = function updateWorldVerts(sprite) { + var node = sprite.node; + var matrix = node._worldMatrix; + var matrixm = matrix.m; + var a = matrixm[0], b = matrixm[1], c = matrixm[4], d = matrixm[5], tx = matrixm[12], ty = matrixm[13]; + var local = this._local; + var world = this._renderData.vDatas[0]; + var floatsPerVert = this.floatsPerVert; + for (var i = 0, l = this.verticesCount; i < l; i++) { + var lx = local[2 * i]; + var ly = local[2 * i + 1]; + world[floatsPerVert * i] = lx * a + ly * c + tx; + world[floatsPerVert * i + 1] = lx * b + ly * d + ty; + } + }; + return MeshSpriteAssembler; + })(_assembler2d["default"]); + exports["default"] = MeshSpriteAssembler; + module.exports = exports["default"]; + }), { + "../../../../assembler-2d": 147 + } ], + 179: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _assembler2d = _interopRequireDefault(require("../../../../assembler-2d")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var PI_2 = 2 * Math.PI; + var _vertPos = [ cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0) ]; + var _vertices = [ 0, 0, 0, 0 ]; + var _uvs = [ 0, 0, 0, 0, 0, 0, 0, 0 ]; + var _intersectPoint_1 = [ cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0) ]; + var _intersectPoint_2 = [ cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0) ]; + var _center = cc.v2(0, 0); + var _triangles = []; + function _calcInsectedPoints(left, right, bottom, top, center, angle, intersectPoints) { + var sinAngle = Math.sin(angle); + var cosAngle = Math.cos(angle); + var tanAngle, cotAngle; + if (0 !== Math.cos(angle)) { + tanAngle = sinAngle / cosAngle; + if ((left - center.x) * cosAngle > 0) { + var yleft = center.y + tanAngle * (left - center.x); + intersectPoints[0].x = left; + intersectPoints[0].y = yleft; + } + if ((right - center.x) * cosAngle > 0) { + var yright = center.y + tanAngle * (right - center.x); + intersectPoints[2].x = right; + intersectPoints[2].y = yright; + } + } + if (0 !== Math.sin(angle)) { + cotAngle = cosAngle / sinAngle; + if ((top - center.y) * sinAngle > 0) { + var xtop = center.x + cotAngle * (top - center.y); + intersectPoints[3].x = xtop; + intersectPoints[3].y = top; + } + if ((bottom - center.y) * sinAngle > 0) { + var xbottom = center.x + cotAngle * (bottom - center.y); + intersectPoints[1].x = xbottom; + intersectPoints[1].y = bottom; + } + } + } + function _calculateVertices(sprite) { + var node = sprite.node, width = node.width, height = node.height, appx = node.anchorX * width, appy = node.anchorY * height; + var l = -appx, b = -appy, r = width - appx, t = height - appy; + var vertices = _vertices; + vertices[0] = l; + vertices[1] = b; + vertices[2] = r; + vertices[3] = t; + var fillCenter = sprite._fillCenter, cx = _center.x = Math.min(Math.max(0, fillCenter.x), 1) * (r - l) + l, cy = _center.y = Math.min(Math.max(0, fillCenter.y), 1) * (t - b) + b; + _vertPos[0].x = _vertPos[3].x = l; + _vertPos[1].x = _vertPos[2].x = r; + _vertPos[0].y = _vertPos[1].y = b; + _vertPos[2].y = _vertPos[3].y = t; + _triangles.length = 0; + cx !== vertices[0] && (_triangles[0] = [ 3, 0 ]); + cx !== vertices[2] && (_triangles[2] = [ 1, 2 ]); + cy !== vertices[1] && (_triangles[1] = [ 0, 1 ]); + cy !== vertices[3] && (_triangles[3] = [ 2, 3 ]); + } + function _calculateUVs(spriteFrame) { + var atlasWidth = spriteFrame._texture.width; + var atlasHeight = spriteFrame._texture.height; + var textureRect = spriteFrame._rect; + var u0, u1, v0, v1; + var uvs = _uvs; + if (spriteFrame._rotated) { + u0 = textureRect.x / atlasWidth; + u1 = (textureRect.x + textureRect.height) / atlasWidth; + v0 = textureRect.y / atlasHeight; + v1 = (textureRect.y + textureRect.width) / atlasHeight; + uvs[0] = uvs[2] = u0; + uvs[4] = uvs[6] = u1; + uvs[3] = uvs[7] = v1; + uvs[1] = uvs[5] = v0; + } else { + u0 = textureRect.x / atlasWidth; + u1 = (textureRect.x + textureRect.width) / atlasWidth; + v0 = textureRect.y / atlasHeight; + v1 = (textureRect.y + textureRect.height) / atlasHeight; + uvs[0] = uvs[4] = u0; + uvs[2] = uvs[6] = u1; + uvs[1] = uvs[3] = v1; + uvs[5] = uvs[7] = v0; + } + } + function _getVertAngle(start, end) { + var placementX, placementY; + placementX = end.x - start.x; + placementY = end.y - start.y; + if (0 === placementX && 0 === placementY) return; + if (0 === placementX) return placementY > 0 ? .5 * Math.PI : 1.5 * Math.PI; + var angle = Math.atan(placementY / placementX); + placementX < 0 && (angle += Math.PI); + return angle; + } + var RadialFilledAssembler = (function(_Assembler2D) { + _inheritsLoose(RadialFilledAssembler, _Assembler2D); + function RadialFilledAssembler() { + return _Assembler2D.apply(this, arguments) || this; + } + var _proto = RadialFilledAssembler.prototype; + _proto.initData = function initData(sprite) { + this._renderData.createFlexData(0, 4, 6, this.getVfmt()); + this.updateIndices(); + }; + _proto.updateRenderData = function updateRenderData(sprite) { + _Assembler2D.prototype.updateRenderData.call(this, sprite); + var frame = sprite.spriteFrame; + var assemblerChanged = this.packDynamicAtlasAndCheckMaterial(sprite, frame); + assemblerChanged || this._updateRenderData(sprite); + }; + _proto._updateRenderData = function _updateRenderData(sprite) { + var frame = sprite.spriteFrame; + if (sprite._vertsDirty) { + var fillStart = sprite._fillStart; + var fillRange = sprite._fillRange; + if (fillRange < 0) { + fillStart += fillRange; + fillRange = -fillRange; + } + while (fillStart >= 1) fillStart -= 1; + while (fillStart < 0) fillStart += 1; + fillStart *= PI_2; + fillRange *= PI_2; + _calculateVertices(sprite); + _calculateUVs(frame); + _calcInsectedPoints(_vertices[0], _vertices[2], _vertices[1], _vertices[3], _center, fillStart, _intersectPoint_1); + _calcInsectedPoints(_vertices[0], _vertices[2], _vertices[1], _vertices[3], _center, fillStart + fillRange, _intersectPoint_2); + this.updateVerts(sprite, fillStart, fillRange); + sprite._vertsDirty = false; + } + }; + _proto.updateVerts = function updateVerts(sprite, fillStart, fillRange) { + var fillEnd = fillStart + fillRange; + var local = this._local; + local.length = 0; + var offset = 0; + var floatsPerTriangle = 3 * this.floatsPerVert; + for (var triangleIndex = 0; triangleIndex < 4; ++triangleIndex) { + var triangle = _triangles[triangleIndex]; + if (!triangle) continue; + if (fillRange >= PI_2) { + local.length = offset + floatsPerTriangle; + this._generateTriangle(local, offset, _center, _vertPos[triangle[0]], _vertPos[triangle[1]]); + offset += floatsPerTriangle; + continue; + } + var startAngle = _getVertAngle(_center, _vertPos[triangle[0]]); + var endAngle = _getVertAngle(_center, _vertPos[triangle[1]]); + endAngle < startAngle && (endAngle += PI_2); + startAngle -= PI_2; + endAngle -= PI_2; + for (var testIndex = 0; testIndex < 3; ++testIndex) { + if (startAngle >= fillEnd) ; else if (startAngle >= fillStart) { + local.length = offset + floatsPerTriangle; + endAngle >= fillEnd ? this._generateTriangle(local, offset, _center, _vertPos[triangle[0]], _intersectPoint_2[triangleIndex]) : this._generateTriangle(local, offset, _center, _vertPos[triangle[0]], _vertPos[triangle[1]]); + offset += floatsPerTriangle; + } else if (endAngle <= fillStart) ; else if (endAngle <= fillEnd) { + local.length = offset + floatsPerTriangle; + this._generateTriangle(local, offset, _center, _intersectPoint_1[triangleIndex], _vertPos[triangle[1]]); + offset += floatsPerTriangle; + } else { + local.length = offset + floatsPerTriangle; + this._generateTriangle(local, offset, _center, _intersectPoint_1[triangleIndex], _intersectPoint_2[triangleIndex]); + offset += floatsPerTriangle; + } + startAngle += PI_2; + endAngle += PI_2; + } + } + this.allocWorldVerts(sprite); + this.updateWorldVerts(sprite); + }; + _proto.allocWorldVerts = function allocWorldVerts(sprite) { + var color = sprite.node._color._val; + var renderData = this._renderData; + var floatsPerVert = this.floatsPerVert; + var local = this._local; + var verticesCount = local.length / floatsPerVert; + this.verticesCount = this.indicesCount = verticesCount; + var flexBuffer = renderData._flexBuffer; + flexBuffer.reserve(verticesCount, verticesCount) && this.updateIndices(); + flexBuffer.used(this.verticesCount, this.indicesCount); + var verts = renderData.vDatas[0], uintVerts = renderData.uintVDatas[0]; + var uvOffset = this.uvOffset; + for (var offset = 0; offset < local.length; offset += floatsPerVert) { + var start = offset + uvOffset; + verts[start] = local[start]; + verts[start + 1] = local[start + 1]; + uintVerts[start + 2] = color; + } + }; + _proto.updateIndices = function updateIndices() { + var iData = this._renderData.iDatas[0]; + for (var i = 0; i < iData.length; i++) iData[i] = i; + }; + _proto.updateWorldVerts = function updateWorldVerts(sprite) { + var node = sprite.node; + var matrix = node._worldMatrix; + var matrixm = matrix.m, a = matrixm[0], b = matrixm[1], c = matrixm[4], d = matrixm[5], tx = matrixm[12], ty = matrixm[13]; + var local = this._local; + var world = this._renderData.vDatas[0]; + var floatsPerVert = this.floatsPerVert; + for (var offset = 0; offset < local.length; offset += floatsPerVert) { + var x = local[offset]; + var y = local[offset + 1]; + world[offset] = x * a + y * c + tx; + world[offset + 1] = x * b + y * d + ty; + } + }; + _proto._generateTriangle = function _generateTriangle(verts, offset, vert0, vert1, vert2) { + var vertices = _vertices; + var v0x = vertices[0]; + var v0y = vertices[1]; + var v1x = vertices[2]; + var v1y = vertices[3]; + var floatsPerVert = this.floatsPerVert; + verts[offset] = vert0.x; + verts[offset + 1] = vert0.y; + verts[offset + floatsPerVert] = vert1.x; + verts[offset + floatsPerVert + 1] = vert1.y; + verts[offset + 2 * floatsPerVert] = vert2.x; + verts[offset + 2 * floatsPerVert + 1] = vert2.y; + var uvOffset = this.uvOffset; + var progressX, progressY; + progressX = (vert0.x - v0x) / (v1x - v0x); + progressY = (vert0.y - v0y) / (v1y - v0y); + this._generateUV(progressX, progressY, verts, offset + uvOffset); + progressX = (vert1.x - v0x) / (v1x - v0x); + progressY = (vert1.y - v0y) / (v1y - v0y); + this._generateUV(progressX, progressY, verts, offset + floatsPerVert + uvOffset); + progressX = (vert2.x - v0x) / (v1x - v0x); + progressY = (vert2.y - v0y) / (v1y - v0y); + this._generateUV(progressX, progressY, verts, offset + 2 * floatsPerVert + uvOffset); + }; + _proto._generateUV = function _generateUV(progressX, progressY, verts, offset) { + var uvs = _uvs; + var px1 = uvs[0] + (uvs[2] - uvs[0]) * progressX; + var px2 = uvs[4] + (uvs[6] - uvs[4]) * progressX; + var py1 = uvs[1] + (uvs[3] - uvs[1]) * progressX; + var py2 = uvs[5] + (uvs[7] - uvs[5]) * progressX; + verts[offset] = px1 + (px2 - px1) * progressY; + verts[offset + 1] = py1 + (py2 - py1) * progressY; + }; + return RadialFilledAssembler; + })(_assembler2d["default"]); + exports["default"] = RadialFilledAssembler; + module.exports = exports["default"]; + }), { + "../../../../assembler-2d": 147 + } ], + 180: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _assembler2d = _interopRequireDefault(require("../../../../assembler-2d")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var SimpleSpriteAssembler = (function(_Assembler2D) { + _inheritsLoose(SimpleSpriteAssembler, _Assembler2D); + function SimpleSpriteAssembler() { + return _Assembler2D.apply(this, arguments) || this; + } + var _proto = SimpleSpriteAssembler.prototype; + _proto.updateRenderData = function updateRenderData(sprite) { + var assemblerChanged = this.packDynamicAtlasAndCheckMaterial(sprite, sprite._spriteFrame); + if (!assemblerChanged && sprite._vertsDirty) { + this.updateUVs(sprite); + this.updateVerts(sprite); + sprite._vertsDirty = false; + } + }; + _proto.updateUVs = function updateUVs(sprite) { + var uv = sprite._spriteFrame.uv; + var uvOffset = this.uvOffset; + var floatsPerVert = this.floatsPerVert; + var verts = this._renderData.vDatas[0]; + for (var i = 0; i < 4; i++) { + var srcOffset = 2 * i; + var dstOffset = floatsPerVert * i + uvOffset; + verts[dstOffset] = uv[srcOffset]; + verts[dstOffset + 1] = uv[srcOffset + 1]; + } + }; + _proto.updateVerts = function updateVerts(sprite) { + var node = sprite.node, cw = node.width, ch = node.height, appx = node.anchorX * cw, appy = node.anchorY * ch, l, b, r, t; + if (sprite.trim) { + l = -appx; + b = -appy; + r = cw - appx; + t = ch - appy; + } else { + var frame = sprite.spriteFrame, ow = frame._originalSize.width, oh = frame._originalSize.height, rw = frame._rect.width, rh = frame._rect.height, offset = frame._offset, scaleX = cw / ow, scaleY = ch / oh; + var trimLeft = offset.x + (ow - rw) / 2; + var trimRight = offset.x - (ow - rw) / 2; + var trimBottom = offset.y + (oh - rh) / 2; + var trimTop = offset.y - (oh - rh) / 2; + l = trimLeft * scaleX - appx; + b = trimBottom * scaleY - appy; + r = cw + trimRight * scaleX - appx; + t = ch + trimTop * scaleY - appy; + } + var local = this._local; + local[0] = l; + local[1] = b; + local[2] = r; + local[3] = t; + this.updateWorldVerts(sprite); + }; + return SimpleSpriteAssembler; + })(_assembler2d["default"]); + exports["default"] = SimpleSpriteAssembler; + module.exports = exports["default"]; + }), { + "../../../../assembler-2d": 147 + } ], + 181: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _assembler2d = _interopRequireDefault(require("../../../../assembler-2d")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var SlicedAssembler = (function(_Assembler2D) { + _inheritsLoose(SlicedAssembler, _Assembler2D); + function SlicedAssembler() { + return _Assembler2D.apply(this, arguments) || this; + } + var _proto = SlicedAssembler.prototype; + _proto.initData = function initData(sprite) { + if (this._renderData.meshCount > 0) return; + this._renderData.createData(0, this.verticesFloats, this.indicesCount); + var indices = this._renderData.iDatas[0]; + var indexOffset = 0; + for (var r = 0; r < 3; ++r) for (var c = 0; c < 3; ++c) { + var start = 4 * r + c; + indices[indexOffset++] = start; + indices[indexOffset++] = start + 1; + indices[indexOffset++] = start + 4; + indices[indexOffset++] = start + 1; + indices[indexOffset++] = start + 5; + indices[indexOffset++] = start + 4; + } + }; + _proto.initLocal = function initLocal() { + this._local = []; + this._local.length = 8; + }; + _proto.updateRenderData = function updateRenderData(sprite) { + var frame = sprite._spriteFrame; + var assemblerChanged = this.packDynamicAtlasAndCheckMaterial(sprite, frame); + if (!assemblerChanged && sprite._vertsDirty) { + this.updateUVs(sprite); + this.updateVerts(sprite); + sprite._vertsDirty = false; + } + }; + _proto.updateVerts = function updateVerts(sprite) { + var node = sprite.node, width = node.width, height = node.height, appx = node.anchorX * width, appy = node.anchorY * height; + var frame = sprite.spriteFrame; + var leftWidth = frame.insetLeft; + var rightWidth = frame.insetRight; + var topHeight = frame.insetTop; + var bottomHeight = frame.insetBottom; + var sizableWidth = width - leftWidth - rightWidth; + var sizableHeight = height - topHeight - bottomHeight; + var xScale = width / (leftWidth + rightWidth); + var yScale = height / (topHeight + bottomHeight); + xScale = isNaN(xScale) || xScale > 1 ? 1 : xScale; + yScale = isNaN(yScale) || yScale > 1 ? 1 : yScale; + sizableWidth = sizableWidth < 0 ? 0 : sizableWidth; + sizableHeight = sizableHeight < 0 ? 0 : sizableHeight; + var local = this._local; + local[0] = -appx; + local[1] = -appy; + local[2] = leftWidth * xScale - appx; + local[3] = bottomHeight * yScale - appy; + local[4] = local[2] + sizableWidth; + local[5] = local[3] + sizableHeight; + local[6] = width - appx; + local[7] = height - appy; + this.updateWorldVerts(sprite); + }; + _proto.updateUVs = function updateUVs(sprite) { + var verts = this._renderData.vDatas[0]; + var uvSliced = sprite.spriteFrame.uvSliced; + var uvOffset = this.uvOffset; + var floatsPerVert = this.floatsPerVert; + for (var row = 0; row < 4; ++row) for (var col = 0; col < 4; ++col) { + var vid = 4 * row + col; + var uv = uvSliced[vid]; + var voffset = vid * floatsPerVert; + verts[voffset + uvOffset] = uv.u; + verts[voffset + uvOffset + 1] = uv.v; + } + }; + _proto.updateWorldVerts = function updateWorldVerts(sprite) { + var matrix = sprite.node._worldMatrix; + var matrixm = matrix.m, a = matrixm[0], b = matrixm[1], c = matrixm[4], d = matrixm[5], tx = matrixm[12], ty = matrixm[13]; + var local = this._local; + var world = this._renderData.vDatas[0]; + var floatsPerVert = this.floatsPerVert; + for (var row = 0; row < 4; ++row) { + var localRowY = local[2 * row + 1]; + for (var col = 0; col < 4; ++col) { + var localColX = local[2 * col]; + var worldIndex = (4 * row + col) * floatsPerVert; + world[worldIndex] = localColX * a + localRowY * c + tx; + world[worldIndex + 1] = localColX * b + localRowY * d + ty; + } + } + }; + return SlicedAssembler; + })(_assembler2d["default"]); + exports["default"] = SlicedAssembler; + Object.assign(SlicedAssembler.prototype, { + verticesCount: 16, + indicesCount: 54 + }); + module.exports = exports["default"]; + }), { + "../../../../assembler-2d": 147 + } ], + 182: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _assembler2d = _interopRequireDefault(require("../../../../assembler-2d")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var TiledAssembler = (function(_Assembler2D) { + _inheritsLoose(TiledAssembler, _Assembler2D); + function TiledAssembler() { + return _Assembler2D.apply(this, arguments) || this; + } + var _proto = TiledAssembler.prototype; + _proto.initData = function initData(sprite) { + this.verticesCount = 0; + this.contentWidth = 0; + this.contentHeight = 0; + this.rectWidth = 0; + this.rectHeight = 0; + this.hRepeat = 0; + this.vRepeat = 0; + this.row = 0; + this.col = 0; + this._renderData.createFlexData(0, 4, 6, this.getVfmt()); + this._updateIndices(); + }; + _proto.initLocal = function initLocal() { + this._local = { + x: [], + y: [] + }; + }; + _proto._updateIndices = function _updateIndices() { + var iData = this._renderData.iDatas[0]; + for (var i = 0, vid = 0, l = iData.length; i < l; i += 6, vid += 4) { + iData[i] = vid; + iData[i + 1] = vid + 1; + iData[i + 2] = vid + 2; + iData[i + 3] = vid + 1; + iData[i + 4] = vid + 3; + iData[i + 5] = vid + 2; + } + }; + _proto.updateRenderData = function updateRenderData(sprite) { + var frame = sprite._spriteFrame; + var assemblerChanged = this.packDynamicAtlasAndCheckMaterial(sprite, frame); + if (!assemblerChanged) { + var node = sprite.node; + var contentWidth = this.contentWidth = Math.abs(node.width); + var contentHeight = this.contentHeight = Math.abs(node.height); + var rect = frame._rect; + var leftWidth = frame.insetLeft, rightWidth = frame.insetRight, centerWidth = rect.width - leftWidth - rightWidth, topHeight = frame.insetTop, bottomHeight = frame.insetBottom, centerHeight = rect.height - topHeight - bottomHeight; + this.sizableWidth = contentWidth - leftWidth - rightWidth; + this.sizableHeight = contentHeight - topHeight - bottomHeight; + this.sizableWidth = this.sizableWidth > 0 ? this.sizableWidth : 0; + this.sizableHeight = this.sizableHeight > 0 ? this.sizableHeight : 0; + var hRepeat = this.hRepeat = 0 === centerWidth ? this.sizableWidth : this.sizableWidth / centerWidth; + var vRepeat = this.vRepeat = 0 === centerHeight ? this.sizableHeight : this.sizableHeight / centerHeight; + var row = this.row = Math.ceil(vRepeat + 2); + var col = this.col = Math.ceil(hRepeat + 2); + var count = row * col; + this.verticesCount = 4 * count; + this.indicesCount = 6 * count; + var renderData = this._renderData; + var flexBuffer = renderData._flexBuffer; + if (flexBuffer.reserve(this.verticesCount, this.indicesCount)) { + this._updateIndices(); + this.updateColor(sprite); + } + flexBuffer.used(this.verticesCount, this.indicesCount); + if (sprite._vertsDirty) { + this.updateUVs(sprite); + this.updateVerts(sprite); + sprite._vertsDirty = false; + } + } + }; + _proto.updateVerts = function updateVerts(sprite) { + var frame = sprite._spriteFrame; + var rect = frame._rect; + var node = sprite.node, appx = node.anchorX * node.width, appy = node.anchorY * node.height; + var row = this.row, col = this.col, contentWidth = this.contentWidth, contentHeight = this.contentHeight; + var _this$_local = this._local, x = _this$_local.x, y = _this$_local.y; + x.length = y.length = 0; + var leftWidth = frame.insetLeft, rightWidth = frame.insetRight, centerWidth = rect.width - leftWidth - rightWidth, topHeight = frame.insetTop, bottomHeight = frame.insetBottom, centerHeight = rect.height - topHeight - bottomHeight; + var xScale = node.width / (leftWidth + rightWidth) > 1 ? 1 : node.width / (leftWidth + rightWidth); + var yScale = node.height / (topHeight + bottomHeight) > 1 ? 1 : node.height / (topHeight + bottomHeight); + var offsetWidth = 0, offsetHeight = 0; + offsetWidth = centerWidth > 0 ? Math.floor(1e3 * this.sizableWidth) / 1e3 % centerWidth === 0 ? centerWidth : this.sizableWidth % centerWidth : this.sizableWidth; + offsetHeight = centerHeight > 0 ? Math.floor(1e3 * this.sizableHeight) / 1e3 % centerHeight === 0 ? centerHeight : this.sizableHeight % centerHeight : this.sizableHeight; + for (var i = 0; i <= col; i++) 0 === i ? x[i] = -appx : i > 0 && i < col ? x[i] = 1 === i ? leftWidth * xScale + Math.min(centerWidth, this.sizableWidth) - appx : centerWidth > 0 ? i === col - 1 ? leftWidth + offsetWidth + centerWidth * (i - 2) - appx : leftWidth + Math.min(centerWidth, this.sizableWidth) + centerWidth * (i - 2) - appx : leftWidth + this.sizableWidth - appx : i === col && (x[i] = Math.min(leftWidth + this.sizableWidth + rightWidth, contentWidth) - appx); + for (var _i = 0; _i <= row; _i++) 0 === _i ? y[_i] = -appy : _i > 0 && _i < row ? y[_i] = 1 === _i ? bottomHeight * yScale + Math.min(centerHeight, this.sizableHeight) - appy : centerHeight > 0 ? _i === row - 1 ? bottomHeight + offsetHeight + (_i - 2) * centerHeight - appy : bottomHeight + Math.min(centerHeight, this.sizableHeight) + (_i - 2) * centerHeight - appy : bottomHeight + this.sizableHeight - appy : _i === row && (y[_i] = Math.min(bottomHeight + this.sizableHeight + topHeight, contentHeight) - appy); + this.updateWorldVerts(sprite); + }; + _proto.updateWorldVerts = function updateWorldVerts(sprite) { + var renderData = this._renderData; + var local = this._local; + var localX = local.x, localY = local.y; + var world = renderData.vDatas[0]; + var row = this.row, col = this.col; + var matrix = sprite.node._worldMatrix; + var matrixm = matrix.m; + var a = matrixm[0], b = matrixm[1], c = matrixm[4], d = matrixm[5], tx = matrixm[12], ty = matrixm[13]; + var x, x1, y, y1; + var floatsPerVert = this.floatsPerVert; + var vertexOffset = 0; + for (var yindex = 0, ylength = row; yindex < ylength; ++yindex) { + y = localY[yindex]; + y1 = localY[yindex + 1]; + for (var xindex = 0, xlength = col; xindex < xlength; ++xindex) { + x = localX[xindex]; + x1 = localX[xindex + 1]; + world[vertexOffset] = x * a + y * c + tx; + world[vertexOffset + 1] = x * b + y * d + ty; + vertexOffset += floatsPerVert; + world[vertexOffset] = x1 * a + y * c + tx; + world[vertexOffset + 1] = x1 * b + y * d + ty; + vertexOffset += floatsPerVert; + world[vertexOffset] = x * a + y1 * c + tx; + world[vertexOffset + 1] = x * b + y1 * d + ty; + vertexOffset += floatsPerVert; + world[vertexOffset] = x1 * a + y1 * c + tx; + world[vertexOffset + 1] = x1 * b + y1 * d + ty; + vertexOffset += floatsPerVert; + } + } + }; + _proto.updateUVs = function updateUVs(sprite) { + var verts = this._renderData.vDatas[0]; + if (!verts) return; + var frame = sprite._spriteFrame; + var rect = frame._rect; + var leftWidth = frame.insetLeft, rightWidth = frame.insetRight, centerWidth = rect.width - leftWidth - rightWidth, topHeight = frame.insetTop, bottomHeight = frame.insetBottom, centerHeight = rect.height - topHeight - bottomHeight; + var row = this.row, col = this.col, hRepeat = this.hRepeat, vRepeat = this.vRepeat; + var coefu = 0, coefv = 0; + var uv = sprite.spriteFrame.uv; + var uvSliced = sprite.spriteFrame.uvSliced; + var rotated = sprite.spriteFrame._rotated; + var floatsPerVert = this.floatsPerVert, uvOffset = this.uvOffset; + var tempXVerts = [], tempYVerts = []; + for (var yindex = 0, ylength = row; yindex < ylength; ++yindex) { + coefv = this.sizableHeight > centerHeight ? this.sizableHeight >= yindex * centerHeight ? 1 : vRepeat % 1 : vRepeat; + for (var xindex = 0, xlength = col; xindex < xlength; ++xindex) { + coefu = this.sizableWidth > centerWidth ? this.sizableWidth >= xindex * centerWidth ? 1 : hRepeat % 1 : hRepeat; + if (rotated) { + if (0 === yindex) { + tempXVerts[0] = uvSliced[0].u; + tempXVerts[1] = uvSliced[0].u; + tempXVerts[2] = uvSliced[4].u + (uvSliced[8].u - uvSliced[4].u) * coefv; + } else if (yindex < row - 1) { + tempXVerts[0] = uvSliced[4].u; + tempXVerts[1] = uvSliced[4].u; + tempXVerts[2] = uvSliced[4].u + (uvSliced[8].u - uvSliced[4].u) * coefv; + } else if (yindex === row - 1) { + tempXVerts[0] = uvSliced[8].u; + tempXVerts[1] = uvSliced[8].u; + tempXVerts[2] = uvSliced[12].u; + } + if (0 === xindex) { + tempYVerts[0] = uvSliced[0].v; + tempYVerts[1] = uvSliced[1].v + (uvSliced[2].v - uvSliced[1].v) * coefu; + tempYVerts[2] = uvSliced[0].v; + } else if (xindex < col - 1) { + tempYVerts[0] = uvSliced[1].v; + tempYVerts[1] = uvSliced[1].v + (uvSliced[2].v - uvSliced[1].v) * coefu; + tempYVerts[2] = uvSliced[1].v; + } else if (xindex === col - 1) { + tempYVerts[0] = uvSliced[2].v; + tempYVerts[1] = uvSliced[3].v; + tempYVerts[2] = uvSliced[2].v; + } + tempXVerts[3] = tempXVerts[2]; + tempYVerts[3] = tempYVerts[1]; + } else { + if (0 === xindex) { + tempXVerts[0] = uvSliced[0].u; + tempXVerts[1] = uvSliced[1].u + (uvSliced[2].u - uvSliced[1].u) * coefu; + tempXVerts[2] = uv[0]; + } else if (xindex < col - 1) { + tempXVerts[0] = uvSliced[1].u; + tempXVerts[1] = uvSliced[1].u + (uvSliced[2].u - uvSliced[1].u) * coefu; + tempXVerts[2] = uvSliced[1].u; + } else if (xindex === col - 1) { + tempXVerts[0] = uvSliced[2].u; + tempXVerts[1] = uvSliced[3].u; + tempXVerts[2] = uvSliced[2].u; + } + if (0 === yindex) { + tempYVerts[0] = uvSliced[0].v; + tempYVerts[1] = uvSliced[0].v; + tempYVerts[2] = uvSliced[4].v + (uvSliced[8].v - uvSliced[4].v) * coefv; + } else if (yindex < row - 1) { + tempYVerts[0] = uvSliced[4].v; + tempYVerts[1] = uvSliced[4].v; + tempYVerts[2] = uvSliced[4].v + (uvSliced[8].v - uvSliced[4].v) * coefv; + } else if (yindex === row - 1) { + tempYVerts[0] = uvSliced[8].v; + tempYVerts[1] = uvSliced[8].v; + tempYVerts[2] = uvSliced[12].v; + } + tempXVerts[3] = tempXVerts[1]; + tempYVerts[3] = tempYVerts[2]; + } + verts[uvOffset] = tempXVerts[0]; + verts[uvOffset + 1] = tempYVerts[0]; + uvOffset += floatsPerVert; + verts[uvOffset] = tempXVerts[1]; + verts[uvOffset + 1] = tempYVerts[1]; + uvOffset += floatsPerVert; + verts[uvOffset] = tempXVerts[2]; + verts[uvOffset + 1] = tempYVerts[2]; + uvOffset += floatsPerVert; + verts[uvOffset] = tempXVerts[3]; + verts[uvOffset + 1] = tempYVerts[3]; + uvOffset += floatsPerVert; + } + } + }; + return TiledAssembler; + })(_assembler2d["default"]); + exports["default"] = TiledAssembler; + module.exports = exports["default"]; + }), { + "../../../../assembler-2d": 147 + } ], + 183: [ (function(require, module, exports) { + "use strict"; + var _assembler = _interopRequireDefault(require("../../../assembler")); + var _CCSprite = require("../../../../components/CCSprite"); + var _simple = _interopRequireDefault(require("./2d/simple")); + var _sliced = _interopRequireDefault(require("./2d/sliced")); + var _tiled = _interopRequireDefault(require("./2d/tiled")); + var _radialFilled = _interopRequireDefault(require("./2d/radial-filled")); + var _barFilled = _interopRequireDefault(require("./2d/bar-filled")); + var _mesh = _interopRequireDefault(require("./2d/mesh")); + var _simple2 = _interopRequireDefault(require("./3d/simple")); + var _sliced2 = _interopRequireDefault(require("./3d/sliced")); + var _tiled2 = _interopRequireDefault(require("./3d/tiled")); + var _radialFilled2 = _interopRequireDefault(require("./3d/radial-filled")); + var _barFilled2 = _interopRequireDefault(require("./3d/bar-filled")); + var _mesh2 = _interopRequireDefault(require("./3d/mesh")); + var _simple3 = _interopRequireDefault(require("./2d-multi/simple")); + var _sliced3 = _interopRequireDefault(require("./2d-multi/sliced")); + var _tiled3 = _interopRequireDefault(require("./2d-multi/tiled")); + var _radialFilled3 = _interopRequireDefault(require("./2d-multi/radial-filled")); + var _barFilled3 = _interopRequireDefault(require("./2d-multi/bar-filled")); + var _mesh3 = _interopRequireDefault(require("./2d-multi/mesh")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var ctor = { + getConstructor: function getConstructor(sprite) { + var is3DNode = sprite.node.is3DNode; + var material = sprite.getMaterials()[0]; + var isMultiMaterial = material && material.material.isMultiSupport(); + var ctor = is3DNode ? _simple2["default"] : isMultiMaterial ? _simple3["default"] : _simple["default"]; + switch (sprite.type) { + case _CCSprite.Type.SLICED: + ctor = is3DNode ? _sliced2["default"] : isMultiMaterial ? _sliced3["default"] : _sliced["default"]; + break; + + case _CCSprite.Type.TILED: + ctor = is3DNode ? _tiled2["default"] : isMultiMaterial ? _tiled3["default"] : _tiled["default"]; + break; + + case _CCSprite.Type.FILLED: + ctor = sprite._fillType === _CCSprite.FillType.RADIAL ? is3DNode ? _radialFilled2["default"] : isMultiMaterial ? _radialFilled3["default"] : _radialFilled["default"] : is3DNode ? _barFilled2["default"] : isMultiMaterial ? _barFilled3["default"] : _barFilled["default"]; + break; + + case _CCSprite.Type.MESH: + ctor = is3DNode ? _mesh2["default"] : isMultiMaterial ? _mesh3["default"] : _mesh["default"]; + } + return ctor; + }, + Simple: _simple["default"], + Sliced: _sliced["default"], + Tiled: _tiled["default"], + RadialFilled: _radialFilled["default"], + BarFilled: _barFilled["default"], + Mesh: _mesh["default"], + Simple3D: _simple2["default"], + Sliced3D: _sliced2["default"], + Tiled3D: _tiled2["default"], + RadialFilled3D: _radialFilled2["default"], + BarFilled3D: _barFilled2["default"], + Mesh3D: _mesh2["default"], + SimpleMulti: _simple3["default"], + SlicedMulti: _sliced3["default"], + TiledMulti: _tiled3["default"], + RadialFilledMulti: _radialFilled3["default"], + BarFilledMulti: _barFilled3["default"], + MeshMulti: _mesh3["default"] + }; + _assembler["default"].register(cc.Sprite, ctor); + }), { + "../../../../components/CCSprite": 101, + "../../../assembler": 149, + "./2d-multi/bar-filled": 171, + "./2d-multi/mesh": 172, + "./2d-multi/radial-filled": 173, + "./2d-multi/simple": 174, + "./2d-multi/sliced": 175, + "./2d-multi/tiled": 176, + "./2d/bar-filled": 177, + "./2d/mesh": 178, + "./2d/radial-filled": 179, + "./2d/simple": 180, + "./2d/sliced": 181, + "./2d/tiled": 182, + "./3d/bar-filled": void 0, + "./3d/mesh": void 0, + "./3d/radial-filled": void 0, + "./3d/simple": void 0, + "./3d/sliced": void 0, + "./3d/tiled": void 0 + } ], + 184: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var FlexBuffer = (function() { + function FlexBuffer(handler, index, verticesCount, indicesCount, vfmt) { + this._handler = handler; + this._index = index; + this._vfmt = vfmt; + this._verticesBytes = vfmt._bytes; + this._initVerticesCount = verticesCount; + this._initIndicesCount = indicesCount; + this.reset(); + } + var _proto = FlexBuffer.prototype; + _proto._reallocVData = function _reallocVData(floatsCount, oldData) { + this.vData = new Float32Array(floatsCount); + this.uintVData = new Uint32Array(this.vData.buffer); + oldData && this.vData.set(oldData); + this._handler.updateMesh(this._index, this.vData, this.iData); + }; + _proto._reallocIData = function _reallocIData(indicesCount, oldData) { + this.iData = new Uint16Array(indicesCount); + oldData && this.iData.set(oldData); + this._handler.updateMesh(this._index, this.vData, this.iData); + }; + _proto.reserve = function reserve(verticesCount, indicesCount) { + var floatsCount = verticesCount * this._verticesBytes >> 2; + var newFloatsCount = this.vData.length; + var realloced = false; + if (floatsCount > newFloatsCount) { + while (newFloatsCount < floatsCount) newFloatsCount *= 2; + this._reallocVData(newFloatsCount, this.vData); + realloced = true; + } + var newIndicesCount = this.iData.length; + if (indicesCount > newIndicesCount) { + while (newIndicesCount < indicesCount) newIndicesCount *= 2; + this._reallocIData(indicesCount, this.iData); + realloced = true; + } + return realloced; + }; + _proto.used = function used(verticesCount, indicesCount) { + this.usedVertices = verticesCount; + this.usedIndices = indicesCount; + this.usedVerticesFloats = verticesCount * this._verticesBytes >> 2; + this._handler.updateMeshRange(verticesCount, indicesCount); + }; + _proto.reset = function reset() { + var floatsCount = this._initVerticesCount * this._verticesBytes >> 2; + this._reallocVData(floatsCount); + this._reallocIData(this._initIndicesCount); + this.usedVertices = 0; + this.usedVerticesFloats = 0; + this.usedIndices = 0; + }; + return FlexBuffer; + })(); + exports["default"] = FlexBuffer; + cc.FlexBuffer = FlexBuffer; + module.exports = exports["default"]; + }), {} ], + 185: [ (function(require, module, exports) { + "use strict"; + var _gfx = _interopRequireDefault(require("../../../renderer/gfx")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var FIX_IOS14_BUFFER = (cc.sys.os === cc.sys.OS_IOS || cc.sys.os === cc.sys.OS_OSX) && cc.sys.isBrowser && /(OS 1[4-9])|(Version\/1[4-9])/.test(window.navigator.userAgent); + var MeshBuffer = cc.Class({ + name: "cc.MeshBuffer", + ctor: function ctor(batcher, vertexFormat) { + this.init(batcher, vertexFormat); + }, + init: function init(batcher, vertexFormat) { + this.byteOffset = 0; + this.indiceOffset = 0; + this.vertexOffset = 0; + this.indiceStart = 0; + this._dirty = false; + this._vertexFormat = vertexFormat; + this._vertexBytes = this._vertexFormat._bytes; + this._arrOffset = 0; + this._vbArr = []; + this._vb = new _gfx["default"].VertexBuffer(batcher._device, vertexFormat, _gfx["default"].USAGE_DYNAMIC, new ArrayBuffer(), 0); + this._vbArr[0] = this._vb; + this._ibArr = []; + this._ib = new _gfx["default"].IndexBuffer(batcher._device, _gfx["default"].INDEX_FMT_UINT16, _gfx["default"].USAGE_STATIC, new ArrayBuffer(), 0); + this._ibArr[0] = this._ib; + this._vData = null; + this._uintVData = null; + this._iData = null; + this._batcher = batcher; + this._initVDataCount = 256 * vertexFormat._bytes; + this._initIDataCount = 1536; + this._offsetInfo = { + byteOffset: 0, + vertexOffset: 0, + indiceOffset: 0 + }; + this._reallocBuffer(); + }, + uploadData: function uploadData() { + if (0 === this.byteOffset || !this._dirty) return; + var vertexsData = new Float32Array(this._vData.buffer, 0, this.byteOffset >> 2); + var indicesData = new Uint16Array(this._iData.buffer, 0, this.indiceOffset); + var vb = this._vb; + vb.update(0, vertexsData); + var ib = this._ib; + ib.update(0, indicesData); + this._dirty = false; + }, + switchBuffer: function switchBuffer() { + var offset = ++this._arrOffset; + this.byteOffset = 0; + this.vertexOffset = 0; + this.indiceOffset = 0; + this.indiceStart = 0; + if (offset < this._vbArr.length) { + this._vb = this._vbArr[offset]; + this._ib = this._ibArr[offset]; + } else { + this._vb = new _gfx["default"].VertexBuffer(this._batcher._device, this._vertexFormat, _gfx["default"].USAGE_DYNAMIC, new ArrayBuffer(), 0); + this._vbArr[offset] = this._vb; + this._ib = new _gfx["default"].IndexBuffer(this._batcher._device, _gfx["default"].INDEX_FMT_UINT16, _gfx["default"].USAGE_STATIC, new ArrayBuffer(), 0); + this._ibArr[offset] = this._ib; + } + }, + checkAndSwitchBuffer: function checkAndSwitchBuffer(vertexCount) { + if (this.vertexOffset + vertexCount > 65535) { + this.uploadData(); + this._batcher._flush(); + this.switchBuffer(); + } + }, + requestStatic: function requestStatic(vertexCount, indiceCount) { + this.checkAndSwitchBuffer(vertexCount); + var byteOffset = this.byteOffset + vertexCount * this._vertexBytes; + var indiceOffset = this.indiceOffset + indiceCount; + var byteLength = this._vData.byteLength; + var indiceLength = this._iData.length; + if (byteOffset > byteLength || indiceOffset > indiceLength) { + while (byteLength < byteOffset || indiceLength < indiceOffset) { + this._initVDataCount *= 2; + this._initIDataCount *= 2; + byteLength = 4 * this._initVDataCount; + indiceLength = this._initIDataCount; + } + this._reallocBuffer(); + } + this._updateOffset(vertexCount, indiceCount, byteOffset); + }, + _updateOffset: function _updateOffset(vertexCount, indiceCount, byteOffset) { + var offsetInfo = this._offsetInfo; + offsetInfo.vertexOffset = this.vertexOffset; + this.vertexOffset += vertexCount; + offsetInfo.indiceOffset = this.indiceOffset; + this.indiceOffset += indiceCount; + offsetInfo.byteOffset = this.byteOffset; + this.byteOffset = byteOffset; + this._dirty = true; + }, + request: function request(vertexCount, indiceCount) { + if (this._batcher._buffer !== this) { + this._batcher._flush(); + this._batcher._buffer = this; + } + this.requestStatic(vertexCount, indiceCount); + return this._offsetInfo; + }, + requestForSpine: function requestForSpine(vertexCount, indiceCount) { + if (this._batcher._buffer !== this) { + this._batcher._flush(); + this._batcher._buffer = this; + } + this.requestStaticForSpine(vertexCount, indiceCount); + return this._offsetInfo; + }, + requestStaticForSpine: function requestStaticForSpine(vertexCount, indiceCount) { + this.checkAndSwitchBuffer(vertexCount); + var byteOffset = this.byteOffset + vertexCount * this._vertexBytes; + var indiceOffset = this.indiceOffset + indiceCount; + var byteLength = this._vData.byteLength; + var indiceLength = this._iData.length; + if (byteOffset > byteLength || indiceOffset > indiceLength) { + while (byteLength < byteOffset || indiceLength < indiceOffset) { + this._initVDataCount *= 2; + this._initIDataCount *= 2; + byteLength = 4 * this._initVDataCount; + indiceLength = this._initIDataCount; + } + this._reallocBuffer(); + } + var offsetInfo = this._offsetInfo; + offsetInfo.vertexOffset = this.vertexOffset; + offsetInfo.indiceOffset = this.indiceOffset; + offsetInfo.byteOffset = this.byteOffset; + }, + adjustForSpine: function adjustForSpine(vertexCount, indiceCount) { + this.vertexOffset += vertexCount; + this.indiceOffset += indiceCount; + this.byteOffset = this.byteOffset + vertexCount * this._vertexBytes; + this._dirty = true; + }, + _reallocBuffer: function _reallocBuffer() { + this._reallocVData(true); + this._reallocIData(true); + }, + _reallocVData: function _reallocVData(copyOldData) { + var oldVData; + this._vData && (oldVData = new Uint8Array(this._vData.buffer)); + this._vData = new Float32Array(this._initVDataCount); + this._uintVData = new Uint32Array(this._vData.buffer); + var newData = new Uint8Array(this._uintVData.buffer); + if (oldVData && copyOldData) for (var i = 0, l = oldVData.length; i < l; i++) newData[i] = oldVData[i]; + }, + _reallocIData: function _reallocIData(copyOldData) { + var oldIData = this._iData; + this._iData = new Uint16Array(this._initIDataCount); + if (oldIData && copyOldData) { + var iData = this._iData; + for (var i = 0, l = oldIData.length; i < l; i++) iData[i] = oldIData[i]; + } + }, + reset: function reset() { + this._arrOffset = 0; + this._vb = this._vbArr[0]; + this._ib = this._ibArr[0]; + this.byteOffset = 0; + this.indiceOffset = 0; + this.vertexOffset = 0; + this.indiceStart = 0; + this._dirty = false; + }, + destroy: function destroy() { + this.reset(); + for (var i = 0; i < this._vbArr.length; i++) { + var vb = this._vbArr[i]; + vb.destroy(); + } + this._vbArr = null; + for (var _i = 0; _i < this._ibArr.length; _i++) { + var ib = this._ibArr[_i]; + ib.destroy(); + } + this._ibArr = null; + this._ib = null; + this._vb = null; + }, + forwardIndiceStartToOffset: function forwardIndiceStartToOffset() { + this.indiceStart = this.indiceOffset; + } + }); + if (FIX_IOS14_BUFFER) { + MeshBuffer.prototype.checkAndSwitchBuffer = function(vertexCount) { + if (this.vertexOffset + vertexCount > 65535) { + this.uploadData(); + this._batcher._flush(); + } + }; + MeshBuffer.prototype.forwardIndiceStartToOffset = function() { + this.uploadData(); + this.switchBuffer(); + }; + } + cc.MeshBuffer = module.exports = MeshBuffer; + }), { + "../../../renderer/gfx": 247 + } ], + 186: [ (function(require, module, exports) { + "use strict"; + var _inputAssembler = _interopRequireDefault(require("../../../renderer/core/input-assembler")); + var _recyclePool = _interopRequireDefault(require("../../../renderer/memop/recycle-pool")); + var _model = _interopRequireDefault(require("../../../renderer/scene/model")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var _require = require("./vertex-format"), vfmtPosUvColor = _require.vfmtPosUvColor, vfmt3D = _require.vfmt3D; + var QuadBuffer = require("./quad-buffer"); + var MeshBuffer = require("./mesh-buffer"); + var SpineBuffer = require("./spine-buffer"); + var Material = require("../../assets/material/CCMaterial"); + var idGenerater = new (require("../../platform/id-generater"))("VertextFormat"); + var _buffers = {}; + var empty_material = new Material(); + var empty_ia = new _inputAssembler["default"](); + empty_ia._count = 0; + var ModelBatcher = function ModelBatcher(device, renderScene) { + this._renderScene = renderScene; + this._device = device; + this.walking = false; + this.material = empty_material; + this.cullingMask = 1; + this._iaPool = new _recyclePool["default"](function() { + return new _inputAssembler["default"](); + }, 16); + this._modelPool = new _recyclePool["default"](function() { + return new _model["default"](); + }, 16); + this._quadBuffer = this.getBuffer("quad", vfmtPosUvColor); + this._meshBuffer = this.getBuffer("mesh", vfmtPosUvColor); + this._quadBuffer3D = this.getBuffer("quad", vfmt3D); + this._meshBuffer3D = this.getBuffer("mesh", vfmt3D); + this._buffer = this._meshBuffer; + this._batchedModels = []; + this._dummyNode = new cc.Node(); + this._sortKey = 0; + this.node = this._dummyNode; + this.parentOpacity = 1; + this.parentOpacityDirty = 0; + this.worldMatDirty = 0; + }; + ModelBatcher.prototype = { + constructor: ModelBatcher, + reset: function reset() { + this._iaPool.reset(); + var scene = this._renderScene; + var models = this._batchedModels; + for (var i = 0; i < models.length; ++i) { + models[i].setInputAssembler(null); + models[i].setEffect(null); + scene.removeModel(models[i]); + } + this._modelPool.reset(); + models.length = 0; + this._sortKey = 0; + for (var key in _buffers) _buffers[key].reset(); + this._buffer = this._meshBuffer; + this.node = this._dummyNode; + this.material = empty_material; + this.cullingMask = 1; + this.parentOpacity = 1; + this.parentOpacityDirty = 0; + this.worldMatDirty = 0; + }, + _flushMaterial: function _flushMaterial(material) { + if (!material) return; + this.material = material; + var effect = material.effect; + if (!effect) return; + var model = this._modelPool.add(); + this._batchedModels.push(model); + model.sortKey = this._sortKey++; + model._cullingMask = this.cullingMask; + model.setNode(this.node); + model.setEffect(effect, null); + model.setInputAssembler(empty_ia); + this._renderScene.addModel(model); + }, + _flush: function _flush() { + var material = this.material, buffer = this._buffer, indiceCount = buffer.indiceOffset - buffer.indiceStart; + if (!this.walking || !material || indiceCount <= 0) return; + var effect = material.effect; + if (!effect) return; + var ia = this._iaPool.add(); + ia._vertexBuffer = buffer._vb; + ia._indexBuffer = buffer._ib; + ia._start = buffer.indiceStart; + ia._count = indiceCount; + var model = this._modelPool.add(); + this._batchedModels.push(model); + model.sortKey = this._sortKey++; + model._cullingMask = this.cullingMask; + model.setNode(this.node); + model.setEffect(effect); + model.setInputAssembler(ia); + this._renderScene.addModel(model); + buffer.forwardIndiceStartToOffset(); + }, + _flushIA: function _flushIA(ia) { + if (!ia) return; + var material = this.material; + var effect = material.effect; + if (!effect) return; + var model = this._modelPool.add(); + this._batchedModels.push(model); + model.sortKey = this._sortKey++; + model._cullingMask = this.cullingMask; + model.setNode(this.node); + model.setEffect(effect); + model.setInputAssembler(ia); + this._renderScene.addModel(model); + }, + terminate: function terminate() { + cc.dynamicAtlasManager && cc.dynamicAtlasManager.enabled && cc.dynamicAtlasManager.update(); + this._flush(); + for (var key in _buffers) _buffers[key].uploadData(); + this.walking = false; + }, + getBuffer: function getBuffer(type, vertextFormat) { + var key = type + vertextFormat.getHash(); + var buffer = _buffers[key]; + if (!buffer) { + if ("mesh" === type) buffer = new MeshBuffer(this, vertextFormat); else if ("quad" === type) buffer = new QuadBuffer(this, vertextFormat); else { + if ("spine" !== type) { + cc.error("Not support buffer type [" + type + "]"); + return null; + } + buffer = new SpineBuffer(this, vertextFormat); + } + _buffers[key] = buffer; + } + return buffer; + } + }; + module.exports = ModelBatcher; + }), { + "../../../renderer/core/input-assembler": 237, + "../../../renderer/memop/recycle-pool": 262, + "../../../renderer/scene/model": 268, + "../../assets/material/CCMaterial": 75, + "../../platform/id-generater": 138, + "./mesh-buffer": 185, + "./quad-buffer": 187, + "./spine-buffer": 189, + "./vertex-format": 190 + } ], + 187: [ (function(require, module, exports) { + "use strict"; + var MeshBuffer = require("./mesh-buffer"); + var QuadBuffer = cc.Class({ + name: "cc.QuadBuffer", + extends: MeshBuffer, + _fillQuadBuffer: function _fillQuadBuffer() { + var count = this._initIDataCount / 6; + var buffer = this._iData; + for (var i = 0, idx = 0; i < count; i++) { + var vertextID = 4 * i; + buffer[idx++] = vertextID; + buffer[idx++] = vertextID + 1; + buffer[idx++] = vertextID + 2; + buffer[idx++] = vertextID + 1; + buffer[idx++] = vertextID + 3; + buffer[idx++] = vertextID + 2; + } + var indicesData = new Uint16Array(this._iData.buffer, 0, 6 * count); + this._ib.update(0, indicesData); + }, + uploadData: function uploadData() { + if (0 === this.byteOffset || !this._dirty) return; + var vertexsData = new Float32Array(this._vData.buffer, 0, this.byteOffset >> 2); + this._vb.update(0, vertexsData); + this._dirty = false; + }, + switchBuffer: function switchBuffer() { + this._super(); + var indicesData = new Uint16Array(this._iData.buffer, 0, this._initIDataCount); + this._ib.update(0, indicesData); + }, + _reallocBuffer: function _reallocBuffer() { + this._reallocVData(true); + this._reallocIData(); + this._fillQuadBuffer(); + } + }); + cc.QuadBuffer = module.exports = QuadBuffer; + }), { + "./mesh-buffer": 185 + } ], + 188: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = RenderData; + var _flexBuffer = _interopRequireDefault(require("./flex-buffer")); + var _vertexFormat = require("./vertex-format"); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function RenderData() { + this.vDatas = []; + this.uintVDatas = []; + this.iDatas = []; + this.meshCount = 0; + this._infos = null; + this._flexBuffer = null; + } + cc.js.mixin(RenderData.prototype, { + init: function init(assembler) {}, + clear: function clear() { + this.vDatas.length = 0; + this.iDatas.length = 0; + this.uintVDatas.length = 0; + this.meshCount = 0; + this._infos = null; + this._flexBuffer && this._flexBuffer.reset(); + }, + updateMesh: function updateMesh(index, vertices, indices) { + this.vDatas[index] = vertices; + this.uintVDatas[index] = new Uint32Array(vertices.buffer, 0, vertices.length); + this.iDatas[index] = indices; + this.meshCount = this.vDatas.length; + }, + updateMeshRange: function updateMeshRange(verticesCount, indicesCount) {}, + createData: function createData(index, verticesFloats, indicesCount) { + var vertices = new Float32Array(verticesFloats); + var indices = new Uint16Array(indicesCount); + this.updateMesh(index, vertices, indices); + }, + createQuadData: function createQuadData(index, verticesFloats, indicesCount) { + this.createData(index, verticesFloats, indicesCount); + this.initQuadIndices(this.iDatas[index]); + }, + createFlexData: function createFlexData(index, verticesFloats, indicesCount, vfmt) { + vfmt = vfmt || _vertexFormat.vfmtPosUvColor; + this._flexBuffer = new _flexBuffer["default"](this, index, verticesFloats, indicesCount, vfmt); + }, + initQuadIndices: function initQuadIndices(indices) { + var count = indices.length / 6; + for (var i = 0, idx = 0; i < count; i++) { + var vertextID = 4 * i; + indices[idx++] = vertextID; + indices[idx++] = vertextID + 1; + indices[idx++] = vertextID + 2; + indices[idx++] = vertextID + 1; + indices[idx++] = vertextID + 3; + indices[idx++] = vertextID + 2; + } + } + }); + cc.RenderData = RenderData; + module.exports = exports["default"]; + }), { + "./flex-buffer": 184, + "./vertex-format": 190 + } ], + 189: [ (function(require, module, exports) { + "use strict"; + var SpineBuffer = cc.Class({ + name: "cc.SpineBuffer", + extends: require("./mesh-buffer"), + requestStatic: function requestStatic(vertexCount, indiceCount) { + this.checkAndSwitchBuffer(vertexCount); + var byteOffset = this.byteOffset + vertexCount * this._vertexBytes; + var indiceOffset = this.indiceOffset + indiceCount; + var byteLength = this._vData.byteLength; + var indiceLength = this._iData.length; + if (byteOffset > byteLength || indiceOffset > indiceLength) { + while (byteLength < byteOffset || indiceLength < indiceOffset) { + this._initVDataCount *= 2; + this._initIDataCount *= 2; + byteLength = 4 * this._initVDataCount; + indiceLength = this._initIDataCount; + } + this._reallocBuffer(); + } + var offsetInfo = this._offsetInfo; + offsetInfo.vertexOffset = this.vertexOffset; + offsetInfo.indiceOffset = this.indiceOffset; + offsetInfo.byteOffset = this.byteOffset; + }, + adjust: function adjust(vertexCount, indiceCount) { + this.vertexOffset += vertexCount; + this.indiceOffset += indiceCount; + this.byteOffset = this.byteOffset + vertexCount * this._vertexBytes; + this._dirty = true; + } + }); + cc.SpineBuffer = module.exports = SpineBuffer; + }), { + "./mesh-buffer": 185 + } ], + 190: [ (function(require, module, exports) { + "use strict"; + var _gfx = _interopRequireDefault(require("../../../renderer/gfx")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var vfmt3D = new _gfx["default"].VertexFormat([ { + name: _gfx["default"].ATTR_POSITION, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 3 + }, { + name: _gfx["default"].ATTR_UV0, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 2 + }, { + name: _gfx["default"].ATTR_COLOR, + type: _gfx["default"].ATTR_TYPE_UINT8, + num: 4, + normalize: true + } ]); + vfmt3D.name = "vfmt3D"; + _gfx["default"].VertexFormat.XYZ_UV_Color = vfmt3D; + var vfmtPosUvColor = new _gfx["default"].VertexFormat([ { + name: _gfx["default"].ATTR_POSITION, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 2 + }, { + name: _gfx["default"].ATTR_UV0, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 2 + }, { + name: _gfx["default"].ATTR_COLOR, + type: _gfx["default"].ATTR_TYPE_UINT8, + num: 4, + normalize: true + } ]); + vfmtPosUvColor.name = "vfmtPosUvColor"; + _gfx["default"].VertexFormat.XY_UV_Color = vfmtPosUvColor; + var vfmtPosUvColorTexId = new _gfx["default"].VertexFormat([ { + name: _gfx["default"].ATTR_POSITION, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 2 + }, { + name: _gfx["default"].ATTR_UV0, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 2 + }, { + name: _gfx["default"].ATTR_COLOR, + type: _gfx["default"].ATTR_TYPE_UINT8, + num: 4, + normalize: true + }, { + name: _gfx["default"].ATTR_TEX_ID, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 1 + } ]); + vfmtPosUvColorTexId.name = "vfmtPosUvColorTexId"; + _gfx["default"].VertexFormat.XY_UV_Color_TexId = vfmtPosUvColorTexId; + var vfmtPosUvTwoColor = new _gfx["default"].VertexFormat([ { + name: _gfx["default"].ATTR_POSITION, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 2 + }, { + name: _gfx["default"].ATTR_UV0, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 2 + }, { + name: _gfx["default"].ATTR_COLOR, + type: _gfx["default"].ATTR_TYPE_UINT8, + num: 4, + normalize: true + }, { + name: _gfx["default"].ATTR_COLOR0, + type: _gfx["default"].ATTR_TYPE_UINT8, + num: 4, + normalize: true + } ]); + vfmtPosUvTwoColor.name = "vfmtPosUvTwoColor"; + _gfx["default"].VertexFormat.XY_UV_Two_Color = vfmtPosUvTwoColor; + var vfmtPosUv = new _gfx["default"].VertexFormat([ { + name: _gfx["default"].ATTR_POSITION, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 2 + }, { + name: _gfx["default"].ATTR_UV0, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 2 + } ]); + vfmtPosUv.name = "vfmtPosUv"; + _gfx["default"].VertexFormat.XY_UV = vfmtPosUv; + var vfmtPosColor = new _gfx["default"].VertexFormat([ { + name: _gfx["default"].ATTR_POSITION, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 2 + }, { + name: _gfx["default"].ATTR_COLOR, + type: _gfx["default"].ATTR_TYPE_UINT8, + num: 4, + normalize: true + } ]); + vfmtPosColor.name = "vfmtPosColor"; + _gfx["default"].VertexFormat.XY_Color = vfmtPosColor; + var vfmtPos = new _gfx["default"].VertexFormat([ { + name: _gfx["default"].ATTR_POSITION, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 2 + } ]); + vfmtPos.name = "vfmtPos"; + _gfx["default"].VertexFormat.XY = vfmtPos; + module.exports = { + vfmt3D: vfmt3D, + vfmtPosUvColor: vfmtPosUvColor, + vfmtPosUvTwoColor: vfmtPosUvTwoColor, + vfmtPosUv: vfmtPosUv, + vfmtPosColor: vfmtPosColor, + vfmtPos: vfmtPos, + vfmtPosUvColorTexId: vfmtPosUvColorTexId + }; + }), { + "../../../renderer/gfx": 247 + } ], + 191: [ (function(require, module, exports) { + "use strict"; + require("./sp"); + require("./multi-handler"); + require("./multi-batcher"); + }), { + "./multi-batcher": 192, + "./multi-handler": 193, + "./sp": 194 + } ], + 192: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.MultiBatcher = void 0; + var _multiHandler = require("./multi-handler"); + function _createForOfIteratorHelperLoose(o, allowArrayLike) { + var it = "undefined" !== typeof Symbol && o[Symbol.iterator] || o["@@iterator"]; + if (it) return (it = it.call(o)).next.bind(it); + if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && "number" === typeof o.length) { + it && (o = it); + var i = 0; + return function() { + if (i >= o.length) return { + done: true + }; + return { + done: false, + value: o[i++] + }; + }; + } + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if ("string" === typeof o) return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + "Object" === n && o.constructor && (n = o.constructor.name); + if ("Map" === n || "Set" === n) return Array.from(o); + if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); + } + function _arrayLikeToArray(arr, len) { + (null == len || len > arr.length) && (len = arr.length); + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + return arr2; + } + var MultiBatcher = (function() { + function MultiBatcher() { + this.handlers = []; + this.nextHandler = void 0; + } + var _proto = MultiBatcher.prototype; + _proto.init = function init() { + var handler = new _multiHandler.MultiHandler(); + this.handlers.push(handler); + this.nextHandler = handler; + }; + _proto.requsetMaterial = function requsetMaterial(texture) { + if (!texture._multiMaterial) { + var handler = this.nextHandler; + var index = handler.getEmptyIndex(); + if (-1 === index) { + for (var _iterator = _createForOfIteratorHelperLoose(this.handlers), _step; !(_step = _iterator()).done; ) { + var _handler = _step.value; + index = _handler.getEmptyIndex(); + if (-1 !== index) { + handler = _handler; + this.nextHandler = handler; + break; + } + } + if (-1 === index) { + handler = new _multiHandler.MultiHandler(); + this.handlers.push(handler); + this.nextHandler = handler; + index = 0; + } + } + texture.linkMaterial(handler.material, index); + } + return texture._multiMaterial; + }; + _proto.reset = function reset() { + this.handlers.length = 0; + }; + return MultiBatcher; + })(); + exports.MultiBatcher = MultiBatcher; + cc.sp.multiBatcher = new MultiBatcher(); + cc.sp.MultiBatcher = MultiBatcher; + }), { + "./multi-handler": 193 + } ], + 193: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.MultiHandler = void 0; + var MultiHandler = (function() { + function MultiHandler(material) { + this.material = void 0; + this.textures = []; + this.hasEmptySlot = false; + if (material) this.material = material; else { + this.material = cc.Material.create(cc.sp.multi2dSpriteEffectAsset); + this.material.name = "multi-2d-sprite"; + this.material.define("USE_TEXTURE", true); + this.material.define("USE_MULTI_TEXTURE", true); + } + this.material._multiHandler = this; + this.syncTextures(); + } + var _proto = MultiHandler.prototype; + _proto.syncTextures = function syncTextures() { + var effect = this.material["effect"]; + var properties = effect.passes[0]._properties; + this.textures[0] = properties.texture.value; + this.textures[1] = properties.texture2.value; + this.textures[2] = properties.texture3.value; + this.textures[3] = properties.texture4.value; + this.textures[4] = properties.texture5.value; + this.textures[5] = properties.texture6.value; + this.textures[6] = properties.texture7.value; + this.textures[7] = properties.texture8.value; + this.hasEmptySlot = true; + this.getEmptyIndex(); + }; + _proto.setTexture = function setTexture(index, texture) { + this.textures[index] = texture ? texture.getImpl() : null; + this.material.setProperty(cc.sp.propertyIndex2Name(index), texture); + null == texture && (this.hasEmptySlot = true); + }; + _proto.removeTexture = function removeTexture(texture) { + var index = this.getIndex(texture); + -1 !== index && this.setTexture(index, null); + }; + _proto.hasTexture = function hasTexture(texture) { + return -1 !== this.textures.indexOf(texture); + }; + _proto.getIndex = function getIndex(texture) { + return this.textures.indexOf(texture); + }; + _proto.getTexture = function getTexture(index) { + return this.textures[index]; + }; + _proto.getEmptyIndex = function getEmptyIndex() { + if (!this.hasEmptySlot) return -1; + var index = this.textures.indexOf(null); + if (-1 !== index) return index; + this.hasEmptySlot = false; + return -1; + }; + _proto.autoSetTexture = function autoSetTexture(texture) { + var index = this.getEmptyIndex(); + if (-1 === index) return -1; + this.setTexture(index, texture); + return index; + }; + return MultiHandler; + })(); + exports.MultiHandler = MultiHandler; + cc.sp.MultiHandler = MultiHandler; + }), {} ], + 194: [ (function(require, module, exports) { + "use strict"; + cc.sp = { + inited: false, + version: "1.0.0", + MAX_MULTITEXTURE_NUM: -1, + autoSwitchMaterial: true, + allowDynamicAtlas: true, + enableLabelRetina: true, + labelRetinaScale: 1, + charAtlasAutoBatchCount: 1, + charAtlasAutoResetBeforeSceneLoad: true, + multi2dSpriteEffectAsset: null, + i2nMap: [ "texture" ], + n2iMap: { + texture: 0 + }, + propertyIndex2Name: function propertyIndex2Name(index) { + return this.i2nMap[index]; + }, + propertyName2Index: function propertyName2Index(name) { + return this.n2iMap[name]; + } + }; + for (var i = 1; i < 8; i++) { + var name = "texture" + (i + 1); + cc.sp.i2nMap[i] = name; + cc.sp.n2iMap[name] = i; + } + }), {} ], + 195: [ (function(require, module, exports) { + "use strict"; + require("../platform/CCSys"); + var EXTNAME_RE = /(\.[^\.\/\?\\]*)(\?.*)?$/; + var DIRNAME_RE = /((.*)(\/|\\|\\\\))?(.*?\..*$)?/; + var NORMALIZE_RE = /[^\.\/]+\/\.\.\//; + cc.path = { + join: function join() { + var l = arguments.length; + var result = ""; + for (var i = 0; i < l; i++) result = (result + ("" === result ? "" : "/") + arguments[i]).replace(/(\/|\\\\)$/, ""); + return result; + }, + extname: function extname(pathStr) { + var temp = EXTNAME_RE.exec(pathStr); + return temp ? temp[1] : ""; + }, + mainFileName: function mainFileName(fileName) { + if (fileName) { + var idx = fileName.lastIndexOf("."); + if (-1 !== idx) return fileName.substring(0, idx); + } + return fileName; + }, + basename: function basename(pathStr, extname) { + var index = pathStr.indexOf("?"); + index > 0 && (pathStr = pathStr.substring(0, index)); + var reg = /(\/|\\)([^\/\\]+)$/g; + var result = reg.exec(pathStr.replace(/(\/|\\)$/, "")); + if (!result) return pathStr; + var baseName = result[2]; + if (extname && pathStr.substring(pathStr.length - extname.length).toLowerCase() === extname.toLowerCase()) return baseName.substring(0, baseName.length - extname.length); + return baseName; + }, + dirname: function dirname(pathStr) { + var temp = DIRNAME_RE.exec(pathStr); + return temp ? temp[2] : ""; + }, + changeExtname: function changeExtname(pathStr, extname) { + extname = extname || ""; + var index = pathStr.indexOf("?"); + var tempStr = ""; + if (index > 0) { + tempStr = pathStr.substring(index); + pathStr = pathStr.substring(0, index); + } + index = pathStr.lastIndexOf("."); + if (index < 0) return pathStr + extname + tempStr; + return pathStr.substring(0, index) + extname + tempStr; + }, + changeBasename: function changeBasename(pathStr, basename, isSameExt) { + if (0 === basename.indexOf(".")) return this.changeExtname(pathStr, basename); + var index = pathStr.indexOf("?"); + var tempStr = ""; + var ext = isSameExt ? this.extname(pathStr) : ""; + if (index > 0) { + tempStr = pathStr.substring(index); + pathStr = pathStr.substring(0, index); + } + index = pathStr.lastIndexOf("/"); + index = index <= 0 ? 0 : index + 1; + return pathStr.substring(0, index) + basename + ext + tempStr; + }, + _normalize: function _normalize(url) { + var oldUrl = url = String(url); + do { + oldUrl = url; + url = url.replace(NORMALIZE_RE, ""); + } while (oldUrl.length !== url.length); + return url; + }, + sep: cc.sys.os === cc.sys.OS_WINDOWS ? "\\" : "/", + stripSep: function stripSep(path) { + return path.replace(/[\/\\]$/, ""); + } + }; + module.exports = cc.path; + }), { + "../platform/CCSys": 130 + } ], + 196: [ (function(require, module, exports) { + "use strict"; + var AffineTransform = function AffineTransform(a, b, c, d, tx, ty) { + this.a = a; + this.b = b; + this.c = c; + this.d = d; + this.tx = tx; + this.ty = ty; + }; + AffineTransform.create = function(a, b, c, d, tx, ty) { + return { + a: a, + b: b, + c: c, + d: d, + tx: tx, + ty: ty + }; + }; + AffineTransform.identity = function() { + return { + a: 1, + b: 0, + c: 0, + d: 1, + tx: 0, + ty: 0 + }; + }; + AffineTransform.clone = function(t) { + return { + a: t.a, + b: t.b, + c: t.c, + d: t.d, + tx: t.tx, + ty: t.ty + }; + }; + AffineTransform.concat = function(out, t1, t2) { + var a = t1.a, b = t1.b, c = t1.c, d = t1.d, tx = t1.tx, ty = t1.ty; + out.a = a * t2.a + b * t2.c; + out.b = a * t2.b + b * t2.d; + out.c = c * t2.a + d * t2.c; + out.d = c * t2.b + d * t2.d; + out.tx = tx * t2.a + ty * t2.c + t2.tx; + out.ty = tx * t2.b + ty * t2.d + t2.ty; + return out; + }; + AffineTransform.invert = function(out, t) { + var a = t.a, b = t.b, c = t.c, d = t.d; + var determinant = 1 / (a * d - b * c); + var tx = t.tx, ty = t.ty; + out.a = determinant * d; + out.b = -determinant * b; + out.c = -determinant * c; + out.d = determinant * a; + out.tx = determinant * (c * ty - d * tx); + out.ty = determinant * (b * tx - a * ty); + return out; + }; + AffineTransform.fromMat4 = function(out, mat) { + var matm = mat.m; + out.a = matm[0]; + out.b = matm[1]; + out.c = matm[4]; + out.d = matm[5]; + out.tx = matm[12]; + out.ty = matm[13]; + return out; + }; + AffineTransform.transformVec2 = function(out, point, transOrY, t) { + var x, y; + if (void 0 === t) { + t = transOrY; + x = point.x; + y = point.y; + } else { + x = point; + y = transOrY; + } + out.x = t.a * x + t.c * y + t.tx; + out.y = t.b * x + t.d * y + t.ty; + return out; + }; + AffineTransform.transformSize = function(out, size, t) { + out.width = t.a * size.width + t.c * size.height; + out.height = t.b * size.width + t.d * size.height; + return out; + }; + AffineTransform.transformRect = function(out, rect, t) { + var ol = rect.x; + var ob = rect.y; + var or = ol + rect.width; + var ot = ob + rect.height; + var lbx = t.a * ol + t.c * ob + t.tx; + var lby = t.b * ol + t.d * ob + t.ty; + var rbx = t.a * or + t.c * ob + t.tx; + var rby = t.b * or + t.d * ob + t.ty; + var ltx = t.a * ol + t.c * ot + t.tx; + var lty = t.b * ol + t.d * ot + t.ty; + var rtx = t.a * or + t.c * ot + t.tx; + var rty = t.b * or + t.d * ot + t.ty; + var minX = Math.min(lbx, rbx, ltx, rtx); + var maxX = Math.max(lbx, rbx, ltx, rtx); + var minY = Math.min(lby, rby, lty, rty); + var maxY = Math.max(lby, rby, lty, rty); + out.x = minX; + out.y = minY; + out.width = maxX - minX; + out.height = maxY - minY; + return out; + }; + AffineTransform.transformObb = function(out_bl, out_tl, out_tr, out_br, rect, anAffineTransform) { + var x = rect.x; + var y = rect.y; + var width = rect.width; + var height = rect.height; + var tx = anAffineTransform.a * x + anAffineTransform.c * y + anAffineTransform.tx; + var ty = anAffineTransform.b * x + anAffineTransform.d * y + anAffineTransform.ty; + var xa = anAffineTransform.a * width; + var xb = anAffineTransform.b * width; + var yc = anAffineTransform.c * height; + var yd = anAffineTransform.d * height; + out_tl.x = tx; + out_tl.y = ty; + out_tr.x = xa + tx; + out_tr.y = xb + ty; + out_bl.x = yc + tx; + out_bl.y = yd + ty; + out_br.x = xa + yc + tx; + out_br.y = xb + yd + ty; + }; + cc.AffineTransform = module.exports = AffineTransform; + }), {} ], + 197: [ (function(require, module, exports) { + "use strict"; + var Flags = require("../platform/CCObject").Flags; + var misc = require("./misc"); + var js = require("../platform/js"); + var IdGenerater = require("../platform/id-generater"); + var eventManager = require("../event-manager"); + var RenderFlow = require("../renderer/render-flow"); + var Destroying = Flags.Destroying; + var DontDestroy = Flags.DontDestroy; + var Deactivating = Flags.Deactivating; + var CHILD_ADDED = "child-added"; + var CHILD_REMOVED = "child-removed"; + var idGenerater = new IdGenerater("Node"); + function getConstructor(typeOrClassName) { + if (!typeOrClassName) { + cc.errorID(3804); + return null; + } + if ("string" === typeof typeOrClassName) return js.getClassByName(typeOrClassName); + return typeOrClassName; + } + function findComponent(node, constructor) { + if (constructor._sealed) for (var i = 0; i < node._components.length; ++i) { + var comp = node._components[i]; + if (comp.constructor === constructor) return comp; + } else for (var _i = 0; _i < node._components.length; ++_i) { + var _comp = node._components[_i]; + if (_comp instanceof constructor) return _comp; + } + return null; + } + function findComponents(node, constructor, components) { + if (constructor._sealed) for (var i = 0; i < node._components.length; ++i) { + var comp = node._components[i]; + comp.constructor === constructor && components.push(comp); + } else for (var _i2 = 0; _i2 < node._components.length; ++_i2) { + var _comp2 = node._components[_i2]; + _comp2 instanceof constructor && components.push(_comp2); + } + } + function findChildComponent(children, constructor) { + for (var i = 0; i < children.length; ++i) { + var node = children[i]; + var comp = findComponent(node, constructor); + if (comp) return comp; + if (node._children.length > 0) { + comp = findChildComponent(node._children, constructor); + if (comp) return comp; + } + } + return null; + } + function findChildComponents(children, constructor, components) { + for (var i = 0; i < children.length; ++i) { + var node = children[i]; + findComponents(node, constructor, components); + node._children.length > 0 && findChildComponents(node._children, constructor, components); + } + } + var BaseNode = cc.Class({ + name: "cc._BaseNode", + extends: cc.Object, + properties: { + _parent: null, + _children: [], + _active: true, + _components: [], + _prefab: null, + _persistNode: { + get: function get() { + return (this._objFlags & DontDestroy) > 0; + }, + set: function set(value) { + value ? this._objFlags |= DontDestroy : this._objFlags &= ~DontDestroy; + } + }, + name: { + get: function get() { + return this._name; + }, + set: function set(value) { + false; + this._name = value; + false; + } + }, + uuid: { + get: function get() { + return this._id; + } + }, + children: { + get: function get() { + return this._children; + } + }, + childrenCount: { + get: function get() { + return this._children.length; + } + }, + active: { + get: function get() { + return this._active; + }, + set: function set(value) { + value = !!value; + if (this._active !== value) { + this._active = value; + var parent = this._parent; + if (parent) { + var couldActiveInScene = parent._activeInHierarchy; + couldActiveInScene && cc.director._nodeActivator.activateNode(this, value); + } + } + } + }, + activeInHierarchy: { + get: function get() { + return this._activeInHierarchy; + } + } + }, + ctor: function ctor(name) { + this._name = void 0 !== name ? name : "New Node"; + this._activeInHierarchy = false; + this._id = idGenerater.getNewId(); + cc.director._scheduler && cc.director._scheduler.enableForTarget(this); + this.__eventTargets = []; + }, + getParent: function getParent() { + return this._parent; + }, + setParent: function setParent(value) { + if (this._parent === value) return; + false; + var oldParent = this._parent; + (true, oldParent) && oldParent._objFlags & Deactivating && cc.errorID(3821); + this._parent = value || null; + this._onSetParent(value); + if (value) { + (true, value._objFlags & Deactivating) && cc.errorID(3821); + eventManager._setDirtyForNode(this); + value._children.push(this); + value.emit && value.emit(CHILD_ADDED, this); + value._renderFlag |= RenderFlow.FLAG_CHILDREN; + } + if (oldParent) { + if (!(oldParent._objFlags & Destroying)) { + var removeAt = oldParent._children.indexOf(this); + false; + oldParent._children.splice(removeAt, 1); + oldParent.emit && oldParent.emit(CHILD_REMOVED, this); + this._onHierarchyChanged(oldParent); + 0 === oldParent._children.length && (oldParent._renderFlag &= ~RenderFlow.FLAG_CHILDREN); + } + } else value && this._onHierarchyChanged(null); + }, + attr: function attr(attrs) { + js.mixin(this, attrs); + }, + getChildByUuid: function getChildByUuid(uuid) { + if (!uuid) { + cc.log("Invalid uuid"); + return null; + } + var locChildren = this._children; + for (var i = 0, len = locChildren.length; i < len; i++) if (locChildren[i]._id === uuid) return locChildren[i]; + return null; + }, + getChildByName: function getChildByName(name) { + if (!name) { + cc.log("Invalid name"); + return null; + } + var locChildren = this._children; + for (var i = 0, len = locChildren.length; i < len; i++) if (locChildren[i]._name === name) return locChildren[i]; + return null; + }, + addChild: function addChild(child) { + false; + cc.assertID(child, 1606); + cc.assertID(null === child._parent, 1605); + child.setParent(this); + }, + insertChild: function insertChild(child, siblingIndex) { + child.parent = this; + child.setSiblingIndex(siblingIndex); + }, + getSiblingIndex: function getSiblingIndex() { + return this._parent ? this._parent._children.indexOf(this) : 0; + }, + setSiblingIndex: function setSiblingIndex(index) { + if (!this._parent) return; + if (this._parent._objFlags & Deactivating) { + cc.errorID(3821); + return; + } + var siblings = this._parent._children; + index = -1 !== index ? index : siblings.length - 1; + var oldIndex = siblings.indexOf(this); + if (index !== oldIndex) { + siblings.splice(oldIndex, 1); + index < siblings.length ? siblings.splice(index, 0, this) : siblings.push(this); + this._onSiblingIndexChanged && this._onSiblingIndexChanged(index); + } + }, + walk: function walk(prefunc, postfunc) { + var BaseNode = cc._BaseNode; + var index = 1; + var children, child, curr, i, afterChildren; + var stack = BaseNode._stacks[BaseNode._stackId]; + if (!stack) { + stack = []; + BaseNode._stacks.push(stack); + } + BaseNode._stackId++; + stack.length = 0; + stack[0] = this; + var parent = null; + afterChildren = false; + while (index) { + index--; + curr = stack[index]; + if (!curr) continue; + !afterChildren && prefunc ? prefunc(curr) : afterChildren && postfunc && postfunc(curr); + stack[index] = null; + if (!afterChildren) { + if (curr._children.length > 0) { + parent = curr; + children = curr._children; + i = 0; + stack[index] = children[i]; + index++; + } else { + stack[index] = curr; + index++; + afterChildren = true; + } + continue; + } + if (parent === this._parent) break; + afterChildren = false; + if (children) { + i++; + if (children[i]) { + stack[index] = children[i]; + index++; + } else if (parent) { + stack[index] = parent; + index++; + afterChildren = true; + if (parent._parent) { + children = parent._parent._children; + i = children.indexOf(parent); + parent = parent._parent; + } else { + parent = null; + children = null; + } + if (i < 0) break; + } + } + } + stack.length = 0; + BaseNode._stackId--; + }, + cleanup: function cleanup() {}, + removeFromParent: function removeFromParent(cleanup) { + if (this._parent) { + void 0 === cleanup && (cleanup = true); + this._parent.removeChild(this, cleanup); + } + }, + removeChild: function removeChild(child, cleanup) { + if (this._children.indexOf(child) > -1) { + (cleanup || void 0 === cleanup) && child.cleanup(); + child.parent = null; + } + }, + removeAllChildren: function removeAllChildren(cleanup) { + var children = this._children; + void 0 === cleanup && (cleanup = true); + for (var i = children.length - 1; i >= 0; i--) { + var node = children[i]; + if (node) { + cleanup && node.cleanup(); + node.parent = null; + } + } + this._children.length = 0; + }, + isChildOf: function isChildOf(parent) { + var child = this; + do { + if (child === parent) return true; + child = child._parent; + } while (child); + return false; + }, + getComponent: function getComponent(typeOrClassName) { + var constructor = getConstructor(typeOrClassName); + if (constructor) return findComponent(this, constructor); + return null; + }, + getComponents: function getComponents(typeOrClassName) { + var constructor = getConstructor(typeOrClassName), components = []; + constructor && findComponents(this, constructor, components); + return components; + }, + getComponentInChildren: function getComponentInChildren(typeOrClassName) { + var constructor = getConstructor(typeOrClassName); + if (constructor) return findChildComponent(this._children, constructor); + return null; + }, + getComponentsInChildren: function getComponentsInChildren(typeOrClassName) { + var constructor = getConstructor(typeOrClassName), components = []; + if (constructor) { + findComponents(this, constructor, components); + findChildComponents(this._children, constructor, components); + } + return components; + }, + _checkMultipleComp: (false, false) && function(ctor) { + var existing = this.getComponent(ctor._disallowMultiple); + if (existing) { + existing.constructor === ctor ? cc.errorID(3805, js.getClassName(ctor), this._name) : cc.errorID(3806, js.getClassName(ctor), this._name, js.getClassName(existing)); + return false; + } + return true; + }, + addComponent: function addComponent(typeOrClassName) { + false; + var constructor; + if ("string" === typeof typeOrClassName) { + constructor = js.getClassByName(typeOrClassName); + if (!constructor) { + cc.errorID(3807, typeOrClassName); + cc._RFpeek() && cc.errorID(3808, typeOrClassName); + return null; + } + } else { + if (!typeOrClassName) { + cc.errorID(3804); + return null; + } + constructor = typeOrClassName; + } + if ("function" !== typeof constructor) { + cc.errorID(3809); + return null; + } + if (!js.isChildClassOf(constructor, cc.Component)) { + cc.errorID(3810); + return null; + } + if ((false, false) && constructor._disallowMultiple && !this._checkMultipleComp(constructor)) return null; + var ReqComp = constructor._requireComponent; + if (ReqComp && !this.getComponent(ReqComp)) { + var depended = this.addComponent(ReqComp); + if (!depended) return null; + } + var component = new constructor(); + component.node = this; + this._components.push(component); + (false, false) && cc.engine && this._id in cc.engine.attachedObjsForEditor && (cc.engine.attachedObjsForEditor[component._id] = component); + this._activeInHierarchy && cc.director._nodeActivator.activateComp(component); + return component; + }, + _addComponentAt: false, + removeComponent: function removeComponent(component) { + if (!component) { + cc.errorID(3813); + return; + } + component instanceof cc.Component || (component = this.getComponent(component)); + component && component.destroy(); + }, + _getDependComponent: false, + _removeComponent: function _removeComponent(component) { + if (!component) { + cc.errorID(3814); + return; + } + if (!(this._objFlags & Destroying)) { + var i = this._components.indexOf(component); + if (-1 !== i) { + this._components.splice(i, 1); + (false, false) && cc.engine && delete cc.engine.attachedObjsForEditor[component._id]; + } else component.node !== this && cc.errorID(3815); + } + }, + destroy: function destroy() { + cc.Object.prototype.destroy.call(this) && (this.active = false); + }, + destroyAllChildren: function destroyAllChildren() { + var children = this._children; + for (var i = 0; i < children.length; ++i) children[i].destroy(); + }, + _onSetParent: function _onSetParent(value) {}, + _onPostActivated: function _onPostActivated() {}, + _onBatchCreated: function _onBatchCreated(dontSyncChildPrefab) {}, + _onHierarchyChanged: function _onHierarchyChanged(oldParent) { + var newParent = this._parent; + if (this._persistNode && !(newParent instanceof cc.Scene)) { + cc.game.removePersistRootNode(this); + false; + } + var scene; + var inCurrentSceneBefore; + var inCurrentSceneNow; + var newPrefabRoot; + var myPrefabInfo; + var PrefabUtils; + false, false; + var shouldActiveNow = this._active && !!(newParent && newParent._activeInHierarchy); + this._activeInHierarchy !== shouldActiveNow && cc.director._nodeActivator.activateNode(this, shouldActiveNow); + }, + _instantiate: function _instantiate(cloned, isSyncedNode) { + cloned || (cloned = cc.instantiate._clone(this, this)); + var newPrefabInfo = cloned._prefab; + var PrefabUtils; + false; + var syncing; + false; + cloned._parent = null; + cloned._onBatchCreated(isSyncedNode); + return cloned; + }, + _registerIfAttached: (false, false) && function(register) { + var attachedObjsForEditor = cc.engine.attachedObjsForEditor; + if (register) { + attachedObjsForEditor[this._id] = this; + for (var i = 0; i < this._components.length; i++) { + var comp = this._components[i]; + attachedObjsForEditor[comp._id] = comp; + } + cc.engine.emit("node-attach-to-scene", this); + } else { + cc.engine.emit("node-detach-from-scene", this); + delete attachedObjsForEditor[this._id]; + for (var _i3 = 0; _i3 < this._components.length; _i3++) { + var _comp3 = this._components[_i3]; + delete attachedObjsForEditor[_comp3._id]; + } + } + var children = this._children; + for (var _i4 = 0, len = children.length; _i4 < len; ++_i4) { + var child = children[_i4]; + child._registerIfAttached(register); + } + }, + _onPreDestroy: function _onPreDestroy() { + var i, len; + this._objFlags |= Destroying; + var parent = this._parent; + var destroyByParent = parent && parent._objFlags & Destroying; + !destroyByParent && (false, false) && this._registerIfAttached(false); + var children = this._children; + for (i = 0, len = children.length; i < len; ++i) children[i]._destroyImmediate(); + for (i = 0, len = this._components.length; i < len; ++i) { + var component = this._components[i]; + component._destroyImmediate(); + } + var eventTargets = this.__eventTargets; + for (i = 0, len = eventTargets.length; i < len; ++i) { + var target = eventTargets[i]; + target && target.targetOff(this); + } + eventTargets.length = 0; + this._persistNode && cc.game.removePersistRootNode(this); + if (!destroyByParent && parent) { + var childIndex = parent._children.indexOf(this); + parent._children.splice(childIndex, 1); + parent.emit && parent.emit("child-removed", this); + } + return destroyByParent; + }, + onRestore: false + }); + BaseNode.idGenerater = idGenerater; + BaseNode._stacks = [ [] ]; + BaseNode._stackId = 0; + BaseNode.prototype._onPreDestroyBase = BaseNode.prototype._onPreDestroy; + false; + BaseNode.prototype._onHierarchyChangedBase = BaseNode.prototype._onHierarchyChanged; + false; + var SameNameGetSets = [ "parent", "name", "children", "childrenCount" ]; + misc.propertyDefine(BaseNode, SameNameGetSets, {}); + false; + cc._BaseNode = module.exports = BaseNode; + }), { + "../event-manager": 112, + "../platform/CCObject": 127, + "../platform/id-generater": 138, + "../platform/js": 142, + "../renderer/render-flow": 153, + "./misc": 205 + } ], + 198: [ (function(require, module, exports) { + "use strict"; + var EPSILON = 1e-6; + function binarySearchEpsilon(array, value) { + for (var l = 0, h = array.length - 1, m = h >>> 1; l <= h; m = l + h >>> 1) { + var test = array[m]; + if (test > value + EPSILON) h = m - 1; else { + if (!(test < value - EPSILON)) return m; + l = m + 1; + } + } + return ~l; + } + module.exports = { + binarySearchEpsilon: binarySearchEpsilon + }; + }), {} ], + 199: [ (function(require, module, exports) { + "use strict"; + var RenderComponent = require("../components/CCRenderComponent"); + var BlendFactor = require("../platform/CCMacro").BlendFactor; + var gfx = require("../../renderer/gfx"); + var BlendFunc = cc.Class({ + properties: { + _srcBlendFactor: BlendFactor.SRC_ALPHA, + _dstBlendFactor: BlendFactor.ONE_MINUS_SRC_ALPHA, + srcBlendFactor: { + get: function get() { + return this._srcBlendFactor; + }, + set: function set(value) { + if (this._srcBlendFactor === value) return; + this._srcBlendFactor = value; + this._updateBlendFunc(true); + this._onBlendChanged && this._onBlendChanged(); + }, + animatable: false, + type: BlendFactor, + tooltip: false, + visible: true + }, + dstBlendFactor: { + get: function get() { + return this._dstBlendFactor; + }, + set: function set(value) { + if (this._dstBlendFactor === value) return; + this._dstBlendFactor = value; + this._updateBlendFunc(true); + }, + animatable: false, + type: BlendFactor, + tooltip: false, + visible: true + } + }, + setMaterial: function setMaterial(index, material) { + var materialVar = RenderComponent.prototype.setMaterial.call(this, index, material); + this._srcBlendFactor === BlendFactor.SRC_ALPHA && this._dstBlendFactor === BlendFactor.ONE_MINUS_SRC_ALPHA || this._updateMaterialBlendFunc(materialVar); + return materialVar; + }, + _updateMaterial: function _updateMaterial() { + this._updateBlendFunc(); + }, + _updateBlendFunc: function _updateBlendFunc(force) { + if (!force && this._srcBlendFactor === BlendFactor.SRC_ALPHA && this._dstBlendFactor === BlendFactor.ONE_MINUS_SRC_ALPHA) return; + var materials = this.getMaterials(); + for (var i = 0; i < materials.length; i++) { + var material = materials[i]; + this._updateMaterialBlendFunc(material); + } + }, + _updateMaterialBlendFunc: function _updateMaterialBlendFunc(material) { + material.setBlend(true, gfx.BLEND_FUNC_ADD, this._srcBlendFactor, this._dstBlendFactor, gfx.BLEND_FUNC_ADD, this._srcBlendFactor, this._dstBlendFactor); + false; + } + }); + module.exports = cc.BlendFunc = BlendFunc; + }), { + "../../renderer/gfx": 247, + "../components/CCRenderComponent": 98, + "../platform/CCMacro": 126 + } ], + 200: [ (function(require, module, exports) { + "use strict"; + var Base64Values = require("./misc").BASE64_VALUES; + var HexChars = "0123456789abcdef".split(""); + var _t = [ "", "", "", "" ]; + var UuidTemplate = _t.concat(_t, "-", _t, "-", _t, "-", _t, "-", _t, _t, _t); + var Indices = UuidTemplate.map((function(x, i) { + return "-" === x ? NaN : i; + })).filter(isFinite); + module.exports = function(base64) { + if (22 !== base64.length) return base64; + UuidTemplate[0] = base64[0]; + UuidTemplate[1] = base64[1]; + for (var i = 2, j = 2; i < 22; i += 2) { + var lhs = Base64Values[base64.charCodeAt(i)]; + var rhs = Base64Values[base64.charCodeAt(i + 1)]; + UuidTemplate[Indices[j++]] = HexChars[lhs >> 2]; + UuidTemplate[Indices[j++]] = HexChars[(3 & lhs) << 2 | rhs >> 4]; + UuidTemplate[Indices[j++]] = HexChars[15 & rhs]; + } + return UuidTemplate.join(""); + }; + false; + }), { + "./misc": 205 + } ], + 201: [ (function(require, module, exports) { + "use strict"; + cc.find = module.exports = function(path, referenceNode) { + if (null == path) { + cc.errorID(3814); + return null; + } + if (referenceNode) false; else { + var scene = cc.director.getScene(); + if (!scene) { + false; + return null; + } + false; + referenceNode = scene; + } + var match = referenceNode; + var startIndex = "/" !== path[0] ? 0 : 1; + var nameList = path.split("/"); + for (var n = startIndex; n < nameList.length; n++) { + var name = nameList[n]; + var children = match._children; + match = null; + for (var t = 0, len = children.length; t < len; ++t) { + var subChild = children[t]; + if (subChild.name === name) { + match = subChild; + break; + } + } + if (!match) return null; + } + return match; + }; + }), {} ], + 202: [ (function(require, module, exports) { + "use strict"; + var _materialVariant = _interopRequireDefault(require("../assets/material/material-variant")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var Material = require("../assets/material/CCMaterial"); + var GraySpriteState = cc.Class({ + properties: { + _normalMaterial: null, + normalMaterial: { + get: function get() { + return this._normalMaterial; + }, + set: function set(val) { + this._normalMaterial = val; + this._updateDisabledState && this._updateDisabledState(); + }, + type: Material, + tooltip: false, + animatable: false + }, + _grayMaterial: null, + grayMaterial: { + get: function get() { + return this._grayMaterial; + }, + set: function set(val) { + this._grayMaterial = val; + this._updateDisabledState && this._updateDisabledState(); + }, + type: Material, + tooltip: false, + animatable: false + } + }, + _switchGrayMaterial: function _switchGrayMaterial(useGrayMaterial, renderComp) { + var material; + if (useGrayMaterial) { + material = this._grayMaterial; + material || (material = Material.getBuiltinMaterial("2d-gray-sprite")); + material = this._grayMaterial = _materialVariant["default"].create(material, renderComp); + } else { + material = this._normalMaterial; + material || (material = Material.getBuiltinMaterial("2d-sprite", renderComp)); + material = this._normalMaterial = _materialVariant["default"].create(material, renderComp); + } + renderComp.setMaterial(0, material); + } + }); + module.exports = GraySpriteState; + }), { + "../assets/material/CCMaterial": 75, + "../assets/material/material-variant": 82 + } ], + 203: [ (function(require, module, exports) { + "use strict"; + var eventRegx = /^(click)(\s)*=|(param)(\s)*=/; + var imageAttrReg = /(\s)*src(\s)*=|(\s)*height(\s)*=|(\s)*width(\s)*=|(\s)*align(\s)*=|(\s)*offset(\s)*=|(\s)*click(\s)*=|(\s)*param(\s)*=/; + var HtmlTextParser = function HtmlTextParser() { + this._parsedObject = {}; + this._specialSymbolArray = []; + this._specialSymbolArray.push([ /</g, "<" ]); + this._specialSymbolArray.push([ />/g, ">" ]); + this._specialSymbolArray.push([ /&/g, "&" ]); + this._specialSymbolArray.push([ /"/g, '"' ]); + this._specialSymbolArray.push([ /'/g, "'" ]); + this._specialSymbolArray.push([ / /g, " " ]); + }; + HtmlTextParser.prototype = { + constructor: HtmlTextParser, + parse: function parse(htmlString) { + this._resultObjectArray = []; + this._stack = []; + var startIndex = 0; + var length = htmlString.length; + while (startIndex < length) { + var tagEndIndex = htmlString.indexOf(">", startIndex); + var tagBeginIndex = -1; + if (tagEndIndex >= 0) { + tagBeginIndex = htmlString.lastIndexOf("<", tagEndIndex); + var noTagBegin = tagBeginIndex < startIndex - 1; + if (noTagBegin) { + tagBeginIndex = htmlString.indexOf("<", tagEndIndex + 1); + tagEndIndex = htmlString.indexOf(">", tagBeginIndex + 1); + } + } + if (tagBeginIndex < 0) { + this._stack.pop(); + this._processResult(htmlString.substring(startIndex)); + startIndex = length; + } else { + var newStr = htmlString.substring(startIndex, tagBeginIndex); + var tagStr = htmlString.substring(tagBeginIndex + 1, tagEndIndex); + "" === tagStr && (newStr = htmlString.substring(startIndex, tagEndIndex + 1)); + this._processResult(newStr); + -1 === tagEndIndex ? tagEndIndex = tagBeginIndex : "/" === htmlString.charAt(tagBeginIndex + 1) ? this._stack.pop() : this._addToStack(tagStr); + startIndex = tagEndIndex + 1; + } + } + return this._resultObjectArray; + }, + _attributeToObject: function _attributeToObject(attribute) { + attribute = attribute.trim(); + var obj = {}; + var header = attribute.match(/^(color|size)(\s)*=/); + var tagName; + var nextSpace; + var eventObj; + var eventHanlderString; + if (header) { + tagName = header[0]; + attribute = attribute.substring(tagName.length).trim(); + if ("" === attribute) return obj; + nextSpace = attribute.indexOf(" "); + switch (tagName[0]) { + case "c": + obj.color = nextSpace > -1 ? attribute.substring(0, nextSpace).trim() : attribute; + break; + + case "s": + obj.size = parseInt(attribute); + } + if (nextSpace > -1) { + eventHanlderString = attribute.substring(nextSpace + 1).trim(); + eventObj = this._processEventHandler(eventHanlderString); + obj.event = eventObj; + } + return obj; + } + header = attribute.match(/^(br(\s)*\/)/); + if (header && header[0].length > 0) { + tagName = header[0].trim(); + if (tagName.startsWith("br") && "/" === tagName[tagName.length - 1]) { + obj.isNewLine = true; + this._resultObjectArray.push({ + text: "", + style: { + newline: true + } + }); + return obj; + } + } + header = attribute.match(/^(img(\s)*src(\s)*=[^>]+\/)/); + if (header && header[0].length > 0) { + tagName = header[0].trim(); + if (tagName.startsWith("img") && "/" === tagName[tagName.length - 1]) { + header = attribute.match(imageAttrReg); + var tagValue; + var remainingArgument; + var isValidImageTag = false; + while (header) { + attribute = attribute.substring(attribute.indexOf(header[0])); + tagName = attribute.substr(0, header[0].length); + remainingArgument = attribute.substring(tagName.length).trim(); + nextSpace = remainingArgument.indexOf(" "); + tagValue = nextSpace > -1 ? remainingArgument.substr(0, nextSpace) : remainingArgument; + tagName = tagName.replace(/[^a-zA-Z]/g, "").trim(); + tagName = tagName.toLocaleLowerCase(); + attribute = remainingArgument.substring(nextSpace).trim(); + tagValue.endsWith("/") && (tagValue = tagValue.slice(0, -1)); + if ("src" === tagName) { + switch (tagValue.charCodeAt(0)) { + case 34: + case 39: + isValidImageTag = true; + tagValue = tagValue.slice(1, -1); + } + obj.isImage = true; + obj.src = tagValue; + } else if ("height" === tagName) obj.imageHeight = parseInt(tagValue); else if ("width" === tagName) obj.imageWidth = parseInt(tagValue); else if ("align" === tagName) { + switch (tagValue.charCodeAt(0)) { + case 34: + case 39: + tagValue = tagValue.slice(1, -1); + } + obj.imageAlign = tagValue.toLocaleLowerCase(); + } else "offset" === tagName ? obj.imageOffset = tagValue : "click" === tagName && (obj.event = this._processEventHandler(tagName + "=" + tagValue)); + obj.event && "param" === tagName && (obj.event.param = tagValue.replace(/^\"|\"$/g, "")); + header = attribute.match(imageAttrReg); + } + isValidImageTag && obj.isImage && this._resultObjectArray.push({ + text: "", + style: obj + }); + return {}; + } + } + header = attribute.match(/^(outline(\s)*[^>]*)/); + if (header) { + attribute = header[0].substring("outline".length).trim(); + var defaultOutlineObject = { + color: "#ffffff", + width: 1 + }; + if (attribute) { + var outlineAttrReg = /(\s)*color(\s)*=|(\s)*width(\s)*=|(\s)*click(\s)*=|(\s)*param(\s)*=/; + header = attribute.match(outlineAttrReg); + var tagValue; + while (header) { + attribute = attribute.substring(attribute.indexOf(header[0])); + tagName = attribute.substr(0, header[0].length); + remainingArgument = attribute.substring(tagName.length).trim(); + nextSpace = remainingArgument.indexOf(" "); + tagValue = nextSpace > -1 ? remainingArgument.substr(0, nextSpace) : remainingArgument; + tagName = tagName.replace(/[^a-zA-Z]/g, "").trim(); + tagName = tagName.toLocaleLowerCase(); + attribute = remainingArgument.substring(nextSpace).trim(); + "click" === tagName ? obj.event = this._processEventHandler(tagName + "=" + tagValue) : "color" === tagName ? defaultOutlineObject.color = tagValue : "width" === tagName && (defaultOutlineObject.width = parseInt(tagValue)); + obj.event && "param" === tagName && (obj.event.param = tagValue.replace(/^\"|\"$/g, "")); + header = attribute.match(outlineAttrReg); + } + } + obj.outline = defaultOutlineObject; + } + header = attribute.match(/^(on|u|b|i)(\s)*/); + if (header && header[0].length > 0) { + tagName = header[0]; + attribute = attribute.substring(tagName.length).trim(); + switch (tagName[0]) { + case "u": + obj.underline = true; + break; + + case "i": + obj.italic = true; + break; + + case "b": + obj.bold = true; + } + if ("" === attribute) return obj; + eventObj = this._processEventHandler(attribute); + obj.event = eventObj; + } + return obj; + }, + _processEventHandler: function _processEventHandler(eventString) { + var index = 0; + var obj = {}; + var eventNames = eventString.match(eventRegx); + var isValidTag = false; + while (eventNames) { + var eventName = eventNames[0]; + var eventValue = ""; + isValidTag = false; + eventString = eventString.substring(eventName.length).trim(); + if ('"' === eventString.charAt(0)) { + index = eventString.indexOf('"', 1); + if (index > -1) { + eventValue = eventString.substring(1, index).trim(); + isValidTag = true; + } + index++; + } else if ("'" === eventString.charAt(0)) { + index = eventString.indexOf("'", 1); + if (index > -1) { + eventValue = eventString.substring(1, index).trim(); + isValidTag = true; + } + index++; + } else { + var match = eventString.match(/(\S)+/); + eventValue = match ? match[0] : ""; + index = eventValue.length; + } + if (isValidTag) { + eventName = eventName.substring(0, eventName.length - 1).trim(); + obj[eventName] = eventValue; + } + eventString = eventString.substring(index).trim(); + eventNames = eventString.match(eventRegx); + } + return obj; + }, + _addToStack: function _addToStack(attribute) { + var obj = this._attributeToObject(attribute); + if (0 === this._stack.length) this._stack.push(obj); else { + if (obj.isNewLine || obj.isImage) return; + var previousTagObj = this._stack[this._stack.length - 1]; + for (var key in previousTagObj) obj[key] || (obj[key] = previousTagObj[key]); + this._stack.push(obj); + } + }, + _processResult: function _processResult(value) { + if ("" === value) return; + value = this._escapeSpecialSymbol(value); + this._stack.length > 0 ? this._resultObjectArray.push({ + text: value, + style: this._stack[this._stack.length - 1] + }) : this._resultObjectArray.push({ + text: value + }); + }, + _escapeSpecialSymbol: function _escapeSpecialSymbol(str) { + for (var i = 0; i < this._specialSymbolArray.length; ++i) { + var key = this._specialSymbolArray[i][0]; + var value = this._specialSymbolArray[i][1]; + str = str.replace(key, value); + } + return str; + } + }; + false; + module.exports = HtmlTextParser; + }), {} ], + 204: [ (function(require, module, exports) { + "use strict"; + require("./CCPath"); + true; + require("./profiler/CCProfiler"); + require("./find"); + require("./mutable-forward-iterator"); + }), { + "./CCPath": 195, + "./find": 201, + "./mutable-forward-iterator": 206, + "./profiler/CCProfiler": 209 + } ], + 205: [ (function(require, module, exports) { + "use strict"; + var js = require("../platform/js"); + var misc = {}; + misc.propertyDefine = function(ctor, sameNameGetSets, diffNameGetSets) { + function define(np, propName, getter, setter) { + var pd = Object.getOwnPropertyDescriptor(np, propName); + if (pd) { + pd.get && (np[getter] = pd.get); + pd.set && setter && (np[setter] = pd.set); + } else { + var getterFunc = np[getter]; + var clsName; + false; + js.getset(np, propName, getterFunc, np[setter]); + } + } + var propName, np = ctor.prototype; + for (var i = 0; i < sameNameGetSets.length; i++) { + propName = sameNameGetSets[i]; + var suffix = propName[0].toUpperCase() + propName.slice(1); + define(np, propName, "get" + suffix, "set" + suffix); + } + for (propName in diffNameGetSets) { + var getset = diffNameGetSets[propName]; + define(np, propName, getset[0], getset[1]); + } + }; + misc.NextPOT = function(x) { + x -= 1; + x |= x >> 1; + x |= x >> 2; + x |= x >> 4; + x |= x >> 8; + x |= x >> 16; + return x + 1; + }; + false; + misc.BUILTIN_CLASSID_RE = /^(?:cc|dragonBones|sp|ccsg)\..+/; + var BASE64_KEYS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + var BASE64_VALUES = new Array(123); + for (var i = 0; i < 123; ++i) BASE64_VALUES[i] = 64; + for (var _i = 0; _i < 64; ++_i) BASE64_VALUES[BASE64_KEYS.charCodeAt(_i)] = _i; + misc.BASE64_VALUES = BASE64_VALUES; + misc.pushToMap = function(map, key, value, pushFront) { + var exists = map[key]; + if (exists) if (Array.isArray(exists)) if (pushFront) { + exists.push(exists[0]); + exists[0] = value; + } else exists.push(value); else map[key] = pushFront ? [ value, exists ] : [ exists, value ]; else map[key] = value; + }; + misc.clampf = function(value, min_inclusive, max_inclusive) { + if (min_inclusive > max_inclusive) { + var temp = min_inclusive; + min_inclusive = max_inclusive; + max_inclusive = temp; + } + return value < min_inclusive ? min_inclusive : value < max_inclusive ? value : max_inclusive; + }; + misc.clamp01 = function(value) { + return value < 0 ? 0 : value < 1 ? value : 1; + }; + misc.lerp = function(a, b, r) { + return a + (b - a) * r; + }; + misc.degreesToRadians = function(angle) { + return angle * cc.macro.RAD; + }; + misc.radiansToDegrees = function(angle) { + return angle * cc.macro.DEG; + }; + cc.misc = module.exports = misc; + }), { + "../platform/js": 142 + } ], + 206: [ (function(require, module, exports) { + "use strict"; + function MutableForwardIterator(array) { + this.i = 0; + this.array = array; + } + var proto = MutableForwardIterator.prototype; + proto.remove = function(value) { + var index = this.array.indexOf(value); + index >= 0 && this.removeAt(index); + }; + proto.removeAt = function(i) { + this.array.splice(i, 1); + i <= this.i && --this.i; + }; + proto.fastRemove = function(value) { + var index = this.array.indexOf(value); + index >= 0 && this.fastRemoveAt(index); + }; + proto.fastRemoveAt = function(i) { + var array = this.array; + array[i] = array[array.length - 1]; + --array.length; + i <= this.i && --this.i; + }; + proto.push = function(item) { + this.array.push(item); + }; + module.exports = MutableForwardIterator; + }), {} ], + 207: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var Pool = (function() { + function Pool() { + this.enabled = false; + this.count = 0; + this.maxSize = 1024; + } + var _proto = Pool.prototype; + _proto.get = function get() {}; + _proto.put = function put() {}; + _proto.clear = function clear() {}; + return Pool; + })(); + exports["default"] = Pool; + cc.pool = {}; + Pool.register = function(name, pool) { + cc.pool[name] = pool; + }; + module.exports = exports["default"]; + }), {} ], + 208: [ (function(require, module, exports) { + "use strict"; + cc._PrefabInfo = cc.Class({ + name: "cc.PrefabInfo", + properties: { + root: null, + asset: null, + fileId: "", + sync: false + } + }); + module.exports = { + syncWithPrefab: function syncWithPrefab(node) { + var _prefab = node._prefab; + if (!_prefab.asset) { + var NodeUtils; + var PrefabUtils; + false; + cc.errorID(3701, node.name); + node._prefab = null; + return; + } + var _objFlags = node._objFlags; + var _parent = node._parent; + var _id = node._id; + var _name = node._name; + var _active = node._active; + var eulerAnglesX = node._eulerAngles.x; + var eulerAnglesY = node._eulerAngles.y; + var eulerAnglesZ = node._eulerAngles.z; + var _localZOrder = node._localZOrder; + var trs = node._trs; + var x = trs[0]; + var y = trs[1]; + var z = trs[2]; + cc.game._isCloning = true; + var prefabRoot; + true; + _prefab.asset._doInstantiate(node); + cc.game._isCloning = false; + node._objFlags = _objFlags; + node._parent = _parent; + node._id = _id; + node._prefab = _prefab; + node._name = _name; + node._active = _active; + node._localZOrder = _localZOrder; + trs = node._trs; + trs[0] = x; + trs[1] = y; + trs[2] = z; + node._eulerAngles.x = eulerAnglesX; + node._eulerAngles.y = eulerAnglesY; + node._eulerAngles.z = eulerAnglesZ; + } + }; + }), {} ], + 209: [ (function(require, module, exports) { + "use strict"; + var macro = require("../../platform/CCMacro"); + var PerfCounter = require("./perf-counter"); + var _showFPS = false; + var _fontSize = 15; + var _stats = null; + var _rootNode = null; + var _label = null; + function generateStats() { + if (_stats) return; + _stats = { + fps: { + desc: "Framerate (FPS)", + below: 30, + average: 500 + }, + draws: { + desc: "Draw Call" + }, + frame: { + desc: "Frame time (ms)", + min: 0, + max: 50, + average: 500 + }, + logic: { + desc: "Game Logic (ms)", + min: 0, + max: 50, + average: 500, + color: "#080" + }, + render: { + desc: "Renderer (ms)", + min: 0, + max: 50, + average: 500, + color: "#f90" + }, + mode: { + desc: cc.game.renderType === cc.game.RENDER_TYPE_WEBGL ? "WebGL" : "Canvas", + min: 1 + } + }; + var now = performance.now(); + for (var id in _stats) _stats[id]._counter = new PerfCounter(id, _stats[id], now); + } + function generateNode() { + if (_rootNode && _rootNode.isValid) return; + _rootNode = new cc.Node("PROFILER-NODE"); + _rootNode.x = _rootNode.y = 10; + _rootNode.groupIndex = cc.Node.BuiltinGroupIndex.DEBUG; + cc.Camera._setupDebugCamera(); + _rootNode.zIndex = macro.MAX_ZINDEX; + cc.game.addPersistRootNode(_rootNode); + var left = new cc.Node("LEFT-PANEL"); + left.anchorX = left.anchorY = 0; + var leftLabel = left.addComponent(cc.Label); + leftLabel.fontSize = _fontSize; + leftLabel.lineHeight = _fontSize; + left.parent = _rootNode; + var right = new cc.Node("RIGHT-PANEL"); + right.anchorX = 1; + right.anchorY = 0; + right.x = 200; + var rightLabel = right.addComponent(cc.Label); + rightLabel.horizontalAlign = cc.Label.HorizontalAlign.RIGHT; + rightLabel.fontSize = _fontSize; + rightLabel.lineHeight = _fontSize; + right.parent = _rootNode; + if (cc.sys.platform !== cc.sys.BAIDU_GAME_SUB && cc.sys.platform !== cc.sys.WECHAT_GAME_SUB) { + leftLabel.cacheMode = cc.Label.CacheMode.CHAR; + rightLabel.cacheMode = cc.Label.CacheMode.CHAR; + } + _label = { + left: leftLabel, + right: rightLabel + }; + } + function beforeUpdate() { + generateNode(); + var now = cc.director._lastUpdate; + _stats["frame"]._counter.start(now); + _stats["logic"]._counter.start(now); + } + function afterUpdate() { + var now = performance.now(); + cc.director.isPaused() ? _stats["frame"]._counter.start(now) : _stats["logic"]._counter.end(now); + _stats["render"]._counter.start(now); + } + function updateLabel(stat) { + var length = 20; + var desc = stat.desc; + var value = stat._counter.human() + ""; + stat.label.string = stat.desc + " " + stat._counter.human(); + } + function afterDraw() { + var now = performance.now(); + _stats["render"]._counter.end(now); + _stats["draws"]._counter.value = cc.renderer.drawCalls; + _stats["frame"]._counter.end(now); + _stats["fps"]._counter.frame(now); + var left = ""; + var right = ""; + for (var id in _stats) { + var stat = _stats[id]; + stat._counter.sample(now); + left += stat.desc + "\n"; + right += stat._counter.human() + "\n"; + } + if (_label) { + _label.left.string = left; + _label.right.string = right; + } + } + cc.profiler = module.exports = { + isShowingStats: function isShowingStats() { + return _showFPS; + }, + hideStats: function hideStats() { + if (_showFPS) { + _rootNode && (_rootNode.active = false); + cc.director.off(cc.Director.EVENT_BEFORE_UPDATE, beforeUpdate); + cc.director.off(cc.Director.EVENT_AFTER_UPDATE, afterUpdate); + cc.director.off(cc.Director.EVENT_AFTER_DRAW, afterDraw); + _showFPS = false; + } + }, + showStats: function showStats() { + if (!_showFPS) { + generateStats(); + _rootNode && (_rootNode.active = true); + cc.director.on(cc.Director.EVENT_BEFORE_UPDATE, beforeUpdate); + cc.director.on(cc.Director.EVENT_AFTER_UPDATE, afterUpdate); + cc.director.on(cc.Director.EVENT_AFTER_DRAW, afterDraw); + _showFPS = true; + } + } + }; + }), { + "../../platform/CCMacro": 126, + "./perf-counter": 211 + } ], + 210: [ (function(require, module, exports) { + "use strict"; + var Counter = cc.Class({ + name: "cc.Counter", + ctor: function ctor(id, opts, now) { + this._id = id; + this._opts = opts || {}; + this._value = 0; + this._total = 0; + this._averageValue = 0; + this._accumValue = 0; + this._accumSamples = 0; + this._accumStart = now; + }, + properties: { + value: { + get: function get() { + return this._value; + }, + set: function set(v) { + this._value = v; + } + } + }, + _average: function _average(v, now) { + if (this._opts.average) { + this._accumValue += v; + ++this._accumSamples; + var t = now; + if (t - this._accumStart >= this._opts.average) { + this._averageValue = this._accumValue / this._accumSamples; + this._accumValue = 0; + this._accumStart = t; + this._accumSamples = 0; + } + } + }, + sample: function sample(now) { + this._average(this._value, now); + }, + human: function human() { + var v = this._opts.average ? this._averageValue : this._value; + return Math.round(100 * v) / 100; + }, + alarm: function alarm() { + return this._opts.below && this._value < this._opts.below || this._opts.over && this._value > this._opts.over; + } + }); + module.exports = Counter; + }), {} ], + 211: [ (function(require, module, exports) { + "use strict"; + var Counter = require("./counter"); + var PerfCounter = cc.Class({ + name: "cc.PerfCounter", + extends: Counter, + ctor: function ctor(id, opts, now) { + this._time = now; + }, + start: function start(now) { + this._time = now; + }, + end: function end(now) { + this._value = now - this._time; + this._average(this._value); + }, + tick: function tick() { + this.end(); + this.start(); + }, + frame: function frame(now) { + var t = now; + var e = t - this._time; + this._total++; + var avg = this._opts.average || 1e3; + if (e > avg) { + this._value = 1e3 * this._total / e; + this._total = 0; + this._time = t; + this._average(this._value); + } + } + }); + module.exports = PerfCounter; + }), { + "./counter": 210 + } ], + 212: [ (function(require, module, exports) { + "use strict"; + var _js = _interopRequireDefault(require("../platform/js")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var _BASELINE_RATIO = .26; + var _BASELINE_OFFSET = 0; + false; + var MAX_CACHE_SIZE = 100; + var pool = new _js["default"].Pool(2); + pool.get = function() { + var node = this._get() || { + key: null, + value: null, + prev: null, + next: null + }; + return node; + }; + function LRUCache(size) { + this.count = 0; + this.limit = size; + this.datas = {}; + this.head = null; + this.tail = null; + } + LRUCache.prototype.moveToHead = function(node) { + node.next = this.head; + node.prev = null; + null !== this.head && (this.head.prev = node); + this.head = node; + null === this.tail && (this.tail = node); + this.count++; + this.datas[node.key] = node; + }; + LRUCache.prototype.put = function(key, value) { + var node = pool.get(); + node.key = key; + node.value = value; + if (this.count >= this.limit) { + var discard = this.tail; + delete this.datas[discard.key]; + this.count--; + this.tail = discard.prev; + this.tail.next = null; + discard.prev = null; + discard.next = null; + pool.put(discard); + } + this.moveToHead(node); + }; + LRUCache.prototype.remove = function(node) { + null !== node.prev ? node.prev.next = node.next : this.head = node.next; + null !== node.next ? node.next.prev = node.prev : this.tail = node.prev; + delete this.datas[node.key]; + this.count--; + }; + LRUCache.prototype.get = function(key) { + var node = this.datas[key]; + if (node) { + this.remove(node); + this.moveToHead(node); + return node.value; + } + return null; + }; + LRUCache.prototype.clear = function() { + this.count = 0; + this.datas = {}; + this.head = null; + this.tail = null; + }; + LRUCache.prototype.has = function(key) { + return !!this.datas[key]; + }; + LRUCache.prototype["delete"] = function(key) { + var node = this.datas[key]; + this.remove(node); + }; + var measureCache = new LRUCache(MAX_CACHE_SIZE); + var textUtils = { + BASELINE_RATIO: _BASELINE_RATIO, + MIDDLE_RATIO: (_BASELINE_RATIO + 1) / 2 - _BASELINE_RATIO, + BASELINE_OFFSET: _BASELINE_OFFSET, + label_wordRex: /([a-zA-Z0-9\xc4\xd6\xdc\xe4\xf6\xfc\xdf\xe9\xe8\xe7\xe0\xf9\xea\xe2\xee\xf4\xfb\u0430-\u044f\u0410-\u042f\u0401\u0451]+|\S)/, + label_symbolRex: /^[!,.:;'}\]%\?>\u3001\u2018\u201c\u300b\uff1f\u3002\uff0c\uff01]/, + label_lastWordRex: /([a-zA-Z0-9\xc4\xd6\xdc\xe4\xf6\xfc\xdf\xe9\xe8\xe7\xe0\xf9\xea\xe2\xee\xf4\xfb\u0430\xed\xec\xcd\xcc\xef\xc1\xc0\xe1\xe0\xc9\xc8\xd2\xd3\xf2\xf3\u0150\u0151\xd9\xda\u0170\xfa\u0171\xf1\xd1\xe6\xc6\u0153\u0152\xc3\xc2\xe3\xd4\xf5\u011b\u0161\u010d\u0159\u017e\xfd\xe1\xed\xe9\xf3\xfa\u016f\u0165\u010f\u0148\u011a\u0160\u010c\u0158\u017d\xc1\xcd\xc9\xd3\xda\u0164\u017c\u017a\u015b\xf3\u0144\u0142\u0119\u0107\u0105\u017b\u0179\u015a\xd3\u0143\u0141\u0118\u0106\u0104-\u044f\u0410-\u042f\u0401\u0451]+|\S)$/, + label_lastEnglish: /[a-zA-Z0-9\xc4\xd6\xdc\xe4\xf6\xfc\xdf\xe9\xe8\xe7\xe0\xf9\xea\xe2\xee\xf4\xfb\u0430\xed\xec\xcd\xcc\xef\xc1\xc0\xe1\xe0\xc9\xc8\xd2\xd3\xf2\xf3\u0150\u0151\xd9\xda\u0170\xfa\u0171\xf1\xd1\xe6\xc6\u0153\u0152\xc3\xc2\xe3\xd4\xf5\u011b\u0161\u010d\u0159\u017e\xfd\xe1\xed\xe9\xf3\xfa\u016f\u0165\u010f\u0148\u011a\u0160\u010c\u0158\u017d\xc1\xcd\xc9\xd3\xda\u0164\u017c\u017a\u015b\xf3\u0144\u0142\u0119\u0107\u0105\u017b\u0179\u015a\xd3\u0143\u0141\u0118\u0106\u0104-\u044f\u0410-\u042f\u0401\u0451]+$/, + label_firstEnglish: /^[a-zA-Z0-9\xc4\xd6\xdc\xe4\xf6\xfc\xdf\xe9\xe8\xe7\xe0\xf9\xea\xe2\xee\xf4\xfb\u0430\xed\xec\xcd\xcc\xef\xc1\xc0\xe1\xe0\xc9\xc8\xd2\xd3\xf2\xf3\u0150\u0151\xd9\xda\u0170\xfa\u0171\xf1\xd1\xe6\xc6\u0153\u0152\xc3\xc2\xe3\xd4\xf5\u011b\u0161\u010d\u0159\u017e\xfd\xe1\xed\xe9\xf3\xfa\u016f\u0165\u010f\u0148\u011a\u0160\u010c\u0158\u017d\xc1\xcd\xc9\xd3\xda\u0164\u017c\u017a\u015b\xf3\u0144\u0142\u0119\u0107\u0105\u017b\u0179\u015a\xd3\u0143\u0141\u0118\u0106\u0104-\u044f\u0410-\u042f\u0401\u0451]/, + highSurrogateRex: /[\uD800-\uDBFF]/, + lowSurrogateRex: /[\uDC00-\uDFFF]/, + label_wrapinspection: true, + __CHINESE_REG: /^[\u4E00-\u9FFF\u3400-\u4DFF]+$/, + __JAPANESE_REG: /[\u3000-\u303F]|[\u3040-\u309F]|[\u30A0-\u30FF]|[\uFF00-\uFFEF]|[\u4E00-\u9FAF]|[\u2605-\u2606]|[\u2190-\u2195]|\u203B/g, + __KOREAN_REG: /^[\u1100-\u11FF]|[\u3130-\u318F]|[\uA960-\uA97F]|[\uAC00-\uD7AF]|[\uD7B0-\uD7FF]+$/, + isUnicodeCJK: function isUnicodeCJK(ch) { + return this.__CHINESE_REG.test(ch) || this.__JAPANESE_REG.test(ch) || this.__KOREAN_REG.test(ch); + }, + isUnicodeSpace: function isUnicodeSpace(ch) { + ch = ch.charCodeAt(0); + return ch >= 9 && ch <= 13 || 32 === ch || 133 === ch || 160 === ch || 5760 === ch || ch >= 8192 && ch <= 8202 || 8232 === ch || 8233 === ch || 8239 === ch || 8287 === ch || 12288 === ch; + }, + safeMeasureText: function safeMeasureText(ctx, string, desc) { + var font = desc || ctx.font; + var key = font + "\ud83c\udfae" + string; + var cache = measureCache.get(key); + if (null !== cache) return cache; + var metric = ctx.measureText(string); + var width = metric && metric.width || 0; + measureCache.put(key, width); + return width; + }, + _safeSubstring: function _safeSubstring(targetString, startIndex, endIndex) { + var newStartIndex = startIndex, newEndIndex = endIndex; + var startChar = targetString[startIndex]; + this.lowSurrogateRex.test(startChar) && newStartIndex--; + if (void 0 !== endIndex) if (endIndex - 1 !== startIndex) { + var endChar = targetString[endIndex - 1]; + this.highSurrogateRex.test(endChar) && newEndIndex--; + } else this.highSurrogateRex.test(startChar) && newEndIndex++; + return targetString.substring(newStartIndex, newEndIndex); + }, + fragmentText: function fragmentText(stringToken, allWidth, maxWidth, measureText) { + var wrappedWords = []; + if (0 === stringToken.length || maxWidth < 0) { + wrappedWords.push(""); + return wrappedWords; + } + var text = stringToken; + while (allWidth > maxWidth && text.length > 1) { + var fuzzyLen = text.length * (maxWidth / allWidth) | 0; + var tmpText = this._safeSubstring(text, fuzzyLen); + var width = allWidth - measureText(tmpText); + var sLine = tmpText; + var pushNum = 0; + var checkWhile = 0; + var checkCount = 10; + while (width > maxWidth && checkWhile++ < checkCount) { + fuzzyLen *= maxWidth / width; + fuzzyLen |= 0; + tmpText = this._safeSubstring(text, fuzzyLen); + width = allWidth - measureText(tmpText); + } + checkWhile = 0; + while (width <= maxWidth && checkWhile++ < checkCount) { + if (tmpText) { + var exec = this.label_wordRex.exec(tmpText); + pushNum = exec ? exec[0].length : 1; + sLine = tmpText; + } + fuzzyLen += pushNum; + tmpText = this._safeSubstring(text, fuzzyLen); + width = allWidth - measureText(tmpText); + } + fuzzyLen -= pushNum; + if (0 === fuzzyLen) { + fuzzyLen = 1; + sLine = this._safeSubstring(text, 1); + } else if (1 === fuzzyLen && this.highSurrogateRex.test(text[0])) { + fuzzyLen = 2; + sLine = this._safeSubstring(text, 2); + } + var sText = this._safeSubstring(text, 0, fuzzyLen), result; + if (this.label_wrapinspection && this.label_symbolRex.test(sLine || tmpText)) { + result = this.label_lastWordRex.exec(sText); + fuzzyLen -= result ? result[0].length : 0; + 0 === fuzzyLen && (fuzzyLen = 1); + sLine = this._safeSubstring(text, fuzzyLen); + sText = this._safeSubstring(text, 0, fuzzyLen); + } + if (this.label_firstEnglish.test(sLine)) { + result = this.label_lastEnglish.exec(sText); + if (result && sText !== result[0]) { + fuzzyLen -= result[0].length; + sLine = this._safeSubstring(text, fuzzyLen); + sText = this._safeSubstring(text, 0, fuzzyLen); + } + } + if (0 === wrappedWords.length) wrappedWords.push(sText); else { + sText = sText.trimLeft(); + sText.length > 0 && wrappedWords.push(sText); + } + text = sLine || tmpText; + allWidth = measureText(text); + } + if (0 === wrappedWords.length) wrappedWords.push(text); else { + text = text.trimLeft(); + text.length > 0 && wrappedWords.push(text); + } + return wrappedWords; + } + }; + cc.textUtils = module.exports = textUtils; + }), { + "../platform/js": 142 + } ], + 213: [ (function(require, module, exports) { + "use strict"; + var Texture2D = require("../assets/CCTexture2D"); + var textureUtil = { + loadImage: function loadImage(url, cb, target) { + cc.assertID(url, 3103); + var tex = cc.assetManager.assets.get(url); + if (tex) { + if (tex.loaded) { + cb && cb.call(target, null, tex); + return tex; + } + tex.once("load", (function() { + cb && cb.call(target, null, tex); + }), target); + return tex; + } + cc.assetManager.loadRemote(url, (function(err, texture) { + cb && cb.call(target, err, texture); + })); + }, + cacheImage: function cacheImage(url, image) { + if (url && image) { + var tex = new Texture2D(); + tex.initWithElement(image); + cc.assetManager.assets.add(url, tex); + return tex; + } + }, + postLoadTexture: function postLoadTexture(texture, callback) { + if (texture.loaded) { + callback && callback(); + return; + } + if (!texture.nativeUrl) { + callback && callback(); + return; + } + cc.assetManager.postLoadNative(texture, callback); + } + }; + module.exports = textureUtil; + }), { + "../assets/CCTexture2D": 72 + } ], + 214: [ (function(require, module, exports) { + "use strict"; + var NodeUnit = require("./node-unit"); + var NodeMemPool = require("./node-mem-pool"); + module.exports = { + NodeMemPool: new NodeMemPool(NodeUnit) + }; + }), { + "./node-mem-pool": 216, + "./node-unit": 217 + } ], + 215: [ (function(require, module, exports) { + "use strict"; + var MemPool = function MemPool(unitClass) { + this._unitClass = unitClass; + this._pool = []; + this._findOrder = []; + false; + }; + var proto = MemPool.prototype; + proto._initNative = function() { + this._nativeMemPool = new renderer.MemPool(); + }; + proto._buildUnit = function(unitID) { + var unit = new this._unitClass(unitID, this); + false; + return unit; + }; + proto._destroyUnit = function(unitID) { + this._pool[unitID] = null; + for (var idx = 0, n = this._findOrder.length; idx < n; idx++) { + var unit = this._findOrder[idx]; + if (unit && unit.unitID == unitID) { + this._findOrder.splice(idx, 1); + break; + } + } + false; + }; + proto._findUnitID = function() { + var unitID = 0; + var pool = this._pool; + while (pool[unitID]) unitID++; + return unitID; + }; + proto.pop = function() { + var findUnit = null; + var idx = 0; + var findOrder = this._findOrder; + var pool = this._pool; + for (var n = findOrder.length; idx < n; idx++) { + var unit = findOrder[idx]; + if (unit && unit.hasSpace()) { + findUnit = unit; + break; + } + } + if (!findUnit) { + var unitID = this._findUnitID(); + findUnit = this._buildUnit(unitID); + pool[unitID] = findUnit; + findOrder.push(findUnit); + idx = findOrder.length - 1; + } + var firstUnit = findOrder[0]; + if (firstUnit !== findUnit) { + findOrder[0] = findUnit; + findOrder[idx] = firstUnit; + } + return findUnit.pop(); + }; + proto.push = function(info) { + var unit = this._pool[info.unitID]; + unit.push(info.index); + this._findOrder.length > 1 && unit.isAllFree() && this._destroyUnit(info.unitID); + return unit; + }; + module.exports = MemPool; + }), {} ], + 216: [ (function(require, module, exports) { + "use strict"; + var MemPool = require("./mem-pool"); + var NodeMemPool = function NodeMemPool(unitClass) { + MemPool.call(this, unitClass); + }; + (function() { + var Super = function Super() {}; + Super.prototype = MemPool.prototype; + NodeMemPool.prototype = new Super(); + })(); + var proto = NodeMemPool.prototype; + proto._initNative = function() { + this._nativeMemPool = new renderer.NodeMemPool(); + }; + proto._destroyUnit = function(unitID) { + MemPool.prototype._destroyUnit.call(this, unitID); + false; + }; + module.exports = NodeMemPool; + }), { + "./mem-pool": 215 + } ], + 217: [ (function(require, module, exports) { + "use strict"; + var _utils = require("../../value-types/utils"); + var Uint32_Bytes = 4; + var Uint8_Bytes = 1; + var Dirty_Type = Uint32Array; + var Dirty_Members = 1; + var Dirty_Stride = Dirty_Members * Uint32_Bytes; + var TRS_Members = 10; + var TRS_Stride = TRS_Members * _utils.FLOAT_BYTES; + var LocalMatrix_Members = 16; + var LocalMatrix_Stride = LocalMatrix_Members * _utils.FLOAT_BYTES; + var WorldMatrix_Members = 16; + var WorldMatrix_Stride = WorldMatrix_Members * _utils.FLOAT_BYTES; + var Parent_Type = Uint32Array; + var Parent_Members = 2; + var Parent_Stride = Parent_Members * Uint32_Bytes; + var ZOrder_Type = Uint32Array; + var ZOrder_Members = 1; + var ZOrder_Stride = ZOrder_Members * Uint32_Bytes; + var CullingMask_Type = Int32Array; + var CullingMask_Members = 1; + var CullingMask_Stride = CullingMask_Members * Uint32_Bytes; + var Opacity_Type = Uint8Array; + var Opacity_Members = 1; + var Opacity_Stride = Opacity_Members * Uint8_Bytes; + var Is3D_Type = Uint8Array; + var Is3D_Members = 1; + var Is3D_Stride = Is3D_Members * Uint8_Bytes; + var Node_Type = Uint32Array; + var Node_Members = 2; + var Skew_Members = 2; + var Skew_Stride = Skew_Members * _utils.FLOAT_BYTES; + var UnitBase = require("./unit-base"); + var NodeUnit = function NodeUnit(unitID, memPool) { + UnitBase.call(this, unitID, memPool); + var contentNum = this._contentNum; + this.trsList = new _utils.FLOAT_ARRAY_TYPE(contentNum * TRS_Members); + this.localMatList = new _utils.FLOAT_ARRAY_TYPE(contentNum * LocalMatrix_Members); + this.worldMatList = new _utils.FLOAT_ARRAY_TYPE(contentNum * WorldMatrix_Members); + false; + for (var i = 0; i < contentNum; i++) { + var space = this._spacesData[i]; + space.trs = new _utils.FLOAT_ARRAY_TYPE(this.trsList.buffer, i * TRS_Stride, TRS_Members); + space.localMat = new _utils.FLOAT_ARRAY_TYPE(this.localMatList.buffer, i * LocalMatrix_Stride, LocalMatrix_Members); + space.worldMat = new _utils.FLOAT_ARRAY_TYPE(this.worldMatList.buffer, i * WorldMatrix_Stride, WorldMatrix_Members); + false; + } + }; + (function() { + var Super = function Super() {}; + Super.prototype = UnitBase.prototype; + NodeUnit.prototype = new Super(); + })(); + module.exports = NodeUnit; + }), { + "../../value-types/utils": 227, + "./unit-base": 218 + } ], + 218: [ (function(require, module, exports) { + "use strict"; + var POINTER_INVALID_FLAG = 65535; + var SPACE_FREE_FLAG = 0; + var SPACE_USE_FLAG = 1; + var POS_NEXT_FREE = 0; + var POS_FREE_FLAG = 1; + var UnitBase = function UnitBase(unitID, memPool, contentNum) { + contentNum = contentNum || 128; + this.unitID = unitID; + this._memPool = memPool; + this._data = new Uint16Array(2); + this._data[0] = 0; + this._data[1] = 0; + this._contentNum = contentNum; + this._signData = new Uint16Array(2 * this._contentNum); + this._spacesData = []; + for (var i = 0; i < contentNum; i++) { + var signIndex = 2 * i; + this._signData[signIndex + POS_NEXT_FREE] = i + 1; + this._signData[signIndex + POS_FREE_FLAG] = SPACE_FREE_FLAG; + this._spacesData[i] = { + index: i, + unitID: unitID + }; + } + this._signData[2 * (contentNum - 1)] = POINTER_INVALID_FLAG; + }; + var UnitBaseProto = UnitBase.prototype; + UnitBaseProto.hasSpace = function() { + return this._data[0] !== POINTER_INVALID_FLAG; + }; + UnitBaseProto.isAllFree = function() { + return 0 == this._data[1]; + }; + UnitBaseProto.pop = function() { + var headFreeIndex = this._data[0]; + if (headFreeIndex === POINTER_INVALID_FLAG) return null; + var index = headFreeIndex; + var signIndex = 2 * index; + var space = this._spacesData[index]; + this._signData[signIndex + POS_FREE_FLAG] = SPACE_USE_FLAG; + this._data[0] = this._signData[signIndex + POS_NEXT_FREE]; + this._data[1]++; + return space; + }; + UnitBaseProto.push = function(index) { + var signIndex = 2 * index; + this._signData[signIndex + POS_FREE_FLAG] = SPACE_FREE_FLAG; + this._signData[signIndex + POS_NEXT_FREE] = this._data[0]; + this._data[0] = index; + this._data[1]--; + }; + UnitBaseProto.dump = function() { + var spaceNum = 0; + var index = this._data[0]; + var freeStr = ""; + while (index != POINTER_INVALID_FLAG) { + spaceNum++; + freeStr += index + "->"; + index = this._signData[2 * index + POS_NEXT_FREE]; + } + var usingNum = 0; + var usingStr = ""; + var contentNum = this._contentNum; + for (var i = 0; i < contentNum; i++) { + var freeFlag = this._signData[2 * i + POS_FREE_FLAG]; + if (freeFlag == SPACE_USE_FLAG) { + usingNum++; + usingStr += i + "->"; + } + } + var totalNum = spaceNum + usingNum; + console.log("unitID:", this.unitID, "spaceNum:", spaceNum, "calc using num:", usingNum, "store using num:", this._data[1], "calc total num:", totalNum, "actually total num:", this._contentNum); + console.log("free info:", freeStr); + console.log("using info:", usingStr); + usingNum != this._data[1] && cc.error("using num error", "calc using num:", usingNum, "store using num:", this._data[1]); + spaceNum + usingNum != this._contentNum && cc.error("total num error", "calc total num:", totalNum, "actually total num:", this._contentNum); + }; + module.exports = UnitBase; + }), {} ], + 219: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _valueType = _interopRequireDefault(require("./value-type")); + var _CCClass = _interopRequireDefault(require("../platform/CCClass")); + var _misc = _interopRequireDefault(require("../utils/misc")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var Color = (function(_ValueType) { + _inheritsLoose(Color, _ValueType); + Color.copy = function copy(out, a) { + out.r = a.r; + out.g = a.g; + out.b = a.b; + out.a = a.a; + return out; + }; + Color.clone = function clone(a) { + return new Color(a.r, a.g, a.b, a.a); + }; + Color.set = function set(out, r, g, b, a) { + void 0 === r && (r = 255); + void 0 === g && (g = 255); + void 0 === b && (b = 255); + void 0 === a && (a = 255); + out.r = r; + out.g = g; + out.b = b; + out.a = a; + return out; + }; + Color.fromHex = function fromHex(out, hex) { + var r = (hex >> 24) / 255; + var g = (hex >> 16 & 255) / 255; + var b = (hex >> 8 & 255) / 255; + var a = (255 & hex) / 255; + out.r = r; + out.g = g; + out.b = b; + out.a = a; + return out; + }; + Color.fromHEX = function fromHEX(out, hexString) { + hexString = 0 === hexString.indexOf("#") ? hexString.substring(1) : hexString; + out.r = parseInt(hexString.substr(0, 2), 16) || 0; + out.g = parseInt(hexString.substr(2, 2), 16) || 0; + out.b = parseInt(hexString.substr(4, 2), 16) || 0; + out.a = parseInt(hexString.substr(6, 2), 16) || 255; + out._val = (out.a << 24 >>> 0) + (out.b << 16) + (out.g << 8) + out.r; + return out; + }; + Color.add = function add(out, a, b) { + out.r = a.r + b.r; + out.g = a.g + b.g; + out.b = a.b + b.b; + out.a = a.a + b.a; + return out; + }; + Color.subtract = function subtract(out, a, b) { + out.r = a.r - b.r; + out.g = a.g - b.g; + out.b = a.b - b.b; + out.a = a.a - b.a; + return out; + }; + Color.multiply = function multiply(out, a, b) { + out.r = a.r * b.r; + out.g = a.g * b.g; + out.b = a.b * b.b; + out.a = a.a * b.a; + return out; + }; + Color.divide = function divide(out, a, b) { + out.r = a.r / b.r; + out.g = a.g / b.g; + out.b = a.b / b.b; + out.a = a.a / b.a; + return out; + }; + Color.scale = function scale(out, a, b) { + out.r = a.r * b; + out.g = a.g * b; + out.b = a.b * b; + out.a = a.a * b; + return out; + }; + Color.lerp = function lerp(out, a, b, t) { + var ar = a.r, ag = a.g, ab = a.b, aa = a.a; + out.r = ar + t * (b.r - ar); + out.g = ag + t * (b.g - ag); + out.b = ab + t * (b.b - ab); + out.a = aa + t * (b.a - aa); + return out; + }; + Color.toArray = function toArray(out, a, ofs) { + void 0 === ofs && (ofs = 0); + var scale = a instanceof Color || a.a > 1 ? 1 / 255 : 1; + out[ofs + 0] = a.r * scale; + out[ofs + 1] = a.g * scale; + out[ofs + 2] = a.b * scale; + out[ofs + 3] = a.a * scale; + return out; + }; + Color.fromArray = function fromArray(arr, out, ofs) { + void 0 === ofs && (ofs = 0); + out.r = 255 * arr[ofs + 0]; + out.g = 255 * arr[ofs + 1]; + out.b = 255 * arr[ofs + 2]; + out.a = 255 * arr[ofs + 3]; + return out; + }; + Color.premultiplyAlpha = function premultiplyAlpha(out, color) { + var alpha = color.a / 255; + out.r = color.r * alpha; + out.g = color.g * alpha; + out.b = color.b * alpha; + out._fastSetA(color.a); + return out; + }; + function Color(r, g, b, a) { + var _this; + void 0 === r && (r = 0); + void 0 === g && (g = 0); + void 0 === b && (b = 0); + void 0 === a && (a = 255); + _this = _ValueType.call(this) || this; + _this._val = 0; + if ("object" === typeof r) { + g = r.g; + b = r.b; + a = r.a; + r = r.r; + } + _this._val = (a << 24 >>> 0) + (b << 16) + (g << 8) + (0 | r); + return _this; + } + var _proto = Color.prototype; + _proto.clone = function clone() { + var ret = new Color(); + ret._val = this._val; + return ret; + }; + _proto.equals = function equals(other) { + return other && this._val === other._val; + }; + _proto.lerp = function lerp(to, ratio, out) { + out = out || new Color(); + var r = this.r; + var g = this.g; + var b = this.b; + var a = this.a; + out.r = r + (to.r - r) * ratio; + out.g = g + (to.g - g) * ratio; + out.b = b + (to.b - b) * ratio; + out.a = a + (to.a - a) * ratio; + return out; + }; + _proto.toString = function toString() { + return "rgba(" + this.r.toFixed() + ", " + this.g.toFixed() + ", " + this.b.toFixed() + ", " + this.a.toFixed() + ")"; + }; + _proto.getR = function getR() { + return 255 & this._val; + }; + _proto.setR = function setR(red) { + red = ~~_misc["default"].clampf(red, 0, 255); + this._val = (4294967040 & this._val | red) >>> 0; + return this; + }; + _proto.getG = function getG() { + return (65280 & this._val) >> 8; + }; + _proto.setG = function setG(green) { + green = ~~_misc["default"].clampf(green, 0, 255); + this._val = (4294902015 & this._val | green << 8) >>> 0; + return this; + }; + _proto.getB = function getB() { + return (16711680 & this._val) >> 16; + }; + _proto.setB = function setB(blue) { + blue = ~~_misc["default"].clampf(blue, 0, 255); + this._val = (4278255615 & this._val | blue << 16) >>> 0; + return this; + }; + _proto.getA = function getA() { + return (4278190080 & this._val) >>> 24; + }; + _proto.setA = function setA(alpha) { + alpha = ~~_misc["default"].clampf(alpha, 0, 255); + this._val = (16777215 & this._val | alpha << 24) >>> 0; + return this; + }; + _proto.toCSS = function toCSS(opt) { + return opt && "rgba" !== opt ? "rgb" === opt ? "rgb(" + this.r + "," + this.g + "," + this.b + ")" : "#" + this.toHEX(opt) : "rgba(" + this.r + "," + this.g + "," + this.b + "," + (this.a / 255).toFixed(2) + ")"; + }; + _proto.fromHEX = function fromHEX(hexString) { + hexString = 0 === hexString.indexOf("#") ? hexString.substring(1) : hexString; + var r = parseInt(hexString.substr(0, 2), 16) || 0; + var g = parseInt(hexString.substr(2, 2), 16) || 0; + var b = parseInt(hexString.substr(4, 2), 16) || 0; + var a = parseInt(hexString.substr(6, 2), 16) || 255; + this._val = (a << 24 >>> 0) + (b << 16) + (g << 8) + r; + return this; + }; + _proto.toHEX = function toHEX(fmt) { + var prefix = "0"; + var hex = [ (this.r < 16 ? prefix : "") + this.r.toString(16), (this.g < 16 ? prefix : "") + this.g.toString(16), (this.b < 16 ? prefix : "") + this.b.toString(16) ]; + if ("#rgb" === fmt) { + hex[0] = hex[0][0]; + hex[1] = hex[1][0]; + hex[2] = hex[2][0]; + } else "#rrggbbaa" === fmt && hex.push((this.a < 16 ? prefix : "") + this.a.toString(16)); + return hex.join(""); + }; + _proto.toRGBValue = function toRGBValue() { + return 16777215 & this._val; + }; + _proto.fromHSV = function fromHSV(h, s, v) { + var r, g, b; + if (0 === s) r = g = b = v; else if (0 === v) r = g = b = 0; else { + 1 === h && (h = 0); + h *= 6; + var i = Math.floor(h); + var f = h - i; + var p = v * (1 - s); + var q = v * (1 - s * f); + var t = v * (1 - s * (1 - f)); + switch (i) { + case 0: + r = v; + g = t; + b = p; + break; + + case 1: + r = q; + g = v; + b = p; + break; + + case 2: + r = p; + g = v; + b = t; + break; + + case 3: + r = p; + g = q; + b = v; + break; + + case 4: + r = t; + g = p; + b = v; + break; + + case 5: + r = v; + g = p; + b = q; + } + } + r *= 255; + g *= 255; + b *= 255; + this._val = (this.a << 24 >>> 0) + (b << 16) + (g << 8) + (0 | r); + return this; + }; + _proto.toHSV = function toHSV() { + var r = this.r / 255; + var g = this.g / 255; + var b = this.b / 255; + var hsv = { + h: 0, + s: 0, + v: 0 + }; + var max = Math.max(r, g, b); + var min = Math.min(r, g, b); + var delta = 0; + hsv.v = max; + hsv.s = max ? (max - min) / max : 0; + if (hsv.s) { + delta = max - min; + hsv.h = r === max ? (g - b) / delta : g === max ? 2 + (b - r) / delta : 4 + (r - g) / delta; + hsv.h /= 6; + hsv.h < 0 && (hsv.h += 1); + } else hsv.h = 0; + return hsv; + }; + _proto.set = function set(color) { + if (color._val) this._val = color._val; else { + this.r = color.r; + this.g = color.g; + this.b = color.b; + this.a = color.a; + } + return this; + }; + _proto._fastSetA = function _fastSetA(alpha) { + this._val = (16777215 & this._val | alpha << 24) >>> 0; + }; + _proto.multiply = function multiply(other) { + var r = (255 & this._val) * other.r >> 8; + var g = (65280 & this._val) * other.g >> 8; + var b = (16711680 & this._val) * other.b >> 8; + var a = ((4278190080 & this._val) >>> 8) * other.a; + this._val = 4278190080 & a | 16711680 & b | 65280 & g | 255 & r; + return this; + }; + _createClass(Color, [ { + key: "r", + get: function get() { + return this.getR(); + }, + set: function set(v) { + this.setR(v); + } + }, { + key: "g", + get: function get() { + return this.getG(); + }, + set: function set(v) { + this.setG(v); + } + }, { + key: "b", + get: function get() { + return this.getB(); + }, + set: function set(v) { + this.setB(v); + } + }, { + key: "a", + get: function get() { + return this.getA(); + }, + set: function set(v) { + this.setA(v); + } + } ], [ { + key: "WHITE", + get: function get() { + return new Color(255, 255, 255, 255); + } + }, { + key: "BLACK", + get: function get() { + return new Color(0, 0, 0, 255); + } + }, { + key: "TRANSPARENT", + get: function get() { + return new Color(0, 0, 0, 0); + } + }, { + key: "GRAY", + get: function get() { + return new Color(127.5, 127.5, 127.5); + } + }, { + key: "RED", + get: function get() { + return new Color(255, 0, 0); + } + }, { + key: "GREEN", + get: function get() { + return new Color(0, 255, 0); + } + }, { + key: "BLUE", + get: function get() { + return new Color(0, 0, 255); + } + }, { + key: "YELLOW", + get: function get() { + return new Color(255, 235, 4); + } + }, { + key: "ORANGE", + get: function get() { + return new Color(255, 127, 0); + } + }, { + key: "CYAN", + get: function get() { + return new Color(0, 255, 255); + } + }, { + key: "MAGENTA", + get: function get() { + return new Color(255, 0, 255); + } + } ]); + return Color; + })(_valueType["default"]); + exports["default"] = Color; + Color.div = Color.divide; + Color.sub = Color.subtract; + Color.mul = Color.multiply; + Color.WHITE_R = Color.WHITE; + Color.BLACK_R = Color.BLACK; + Color.TRANSPARENT_R = Color.TRANSPARENT; + Color.GRAY_R = Color.GRAY; + Color.RED_R = Color.RED; + Color.GREEN_R = Color.GREEN; + Color.BLUE_R = Color.BLUE; + Color.YELLOW_R = Color.YELLOW; + Color.ORANGE_R = Color.ORANGE; + Color.CYAN_R = Color.CYAN; + Color.MAGENTA_R = Color.MAGENTA; + _CCClass["default"].fastDefine("cc.Color", Color, { + r: 0, + g: 0, + b: 0, + a: 255 + }); + cc.Color = Color; + cc.color = function color(r, g, b, a) { + if ("string" === typeof r) { + var result = new Color(); + return result.fromHEX(r); + } + if ("object" === typeof r) return new Color(r.r, r.g, r.b, r.a); + return new Color(r, g, b, a); + }; + module.exports = exports["default"]; + }), { + "../platform/CCClass": 121, + "../utils/misc": 205, + "./value-type": 228 + } ], + 220: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + var _exportNames = { + Vec2: true, + Vec3: true, + Vec4: true, + Mat4: true, + Mat3: true, + Rect: true, + Size: true, + Color: true, + Quat: true, + Trs: true + }; + exports.Vec4 = exports.Vec3 = exports.Vec2 = exports.Trs = exports.Size = exports.Rect = exports.Quat = exports.Mat4 = exports.Mat3 = exports.Color = void 0; + var _vec = _interopRequireDefault(require("./vec2")); + exports.Vec2 = _vec["default"]; + var _vec2 = _interopRequireDefault(require("./vec3")); + exports.Vec3 = _vec2["default"]; + var _vec3 = _interopRequireDefault(require("./vec4")); + exports.Vec4 = _vec3["default"]; + var _mat = _interopRequireDefault(require("./mat4")); + exports.Mat4 = _mat["default"]; + var _mat2 = _interopRequireDefault(require("./mat3")); + exports.Mat3 = _mat2["default"]; + var _rect = _interopRequireDefault(require("./rect")); + exports.Rect = _rect["default"]; + var _size = _interopRequireDefault(require("./size")); + exports.Size = _size["default"]; + var _color = _interopRequireDefault(require("./color")); + exports.Color = _color["default"]; + var _quat = _interopRequireDefault(require("./quat")); + exports.Quat = _quat["default"]; + var _trs = _interopRequireDefault(require("./trs")); + exports.Trs = _trs["default"]; + var _utils = require("./utils"); + Object.keys(_utils).forEach((function(key) { + if ("default" === key || "__esModule" === key) return; + if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; + if (key in exports && exports[key] === _utils[key]) return; + exports[key] = _utils[key]; + })); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + cc.math = module.exports; + }), { + "./color": 219, + "./mat3": 221, + "./mat4": 222, + "./quat": 223, + "./rect": 224, + "./size": 225, + "./trs": 226, + "./utils": 227, + "./vec2": 229, + "./vec3": 230, + "./vec4": 231 + } ], + 221: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _utils = require("../value-types/utils"); + var _vec = _interopRequireDefault(require("./vec3")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var Mat3 = (function() { + Mat3.create = function create(m00, m01, m02, m03, m04, m05, m06, m07, m08) { + void 0 === m00 && (m00 = 1); + void 0 === m01 && (m01 = 0); + void 0 === m02 && (m02 = 0); + void 0 === m03 && (m03 = 0); + void 0 === m04 && (m04 = 1); + void 0 === m05 && (m05 = 0); + void 0 === m06 && (m06 = 0); + void 0 === m07 && (m07 = 0); + void 0 === m08 && (m08 = 1); + return new Mat3(m00, m01, m02, m03, m04, m05, m06, m07, m08); + }; + Mat3.clone = function clone(a) { + var am = a.m; + return new Mat3(am[0], am[1], am[2], am[3], am[4], am[5], am[6], am[7], am[8]); + }; + Mat3.copy = function copy(out, a) { + out.m.set(a.m); + return out; + }; + Mat3.set = function set(out, m00, m01, m02, m10, m11, m12, m20, m21, m22) { + var outm = out.m; + outm[0] = m00; + outm[1] = m01; + outm[2] = m02; + outm[3] = m10; + outm[4] = m11; + outm[5] = m12; + outm[6] = m20; + outm[7] = m21; + outm[8] = m22; + return out; + }; + Mat3.identity = function identity(out) { + var outm = out.m; + outm[0] = 1; + outm[1] = 0; + outm[2] = 0; + outm[3] = 0; + outm[4] = 1; + outm[5] = 0; + outm[6] = 0; + outm[7] = 0; + outm[8] = 1; + return out; + }; + Mat3.transpose = function transpose(out, a) { + var am = a.m, outm = out.m; + if (out === a) { + var a01 = am[1], a02 = am[2], a12 = am[5]; + outm[1] = am[3]; + outm[2] = am[6]; + outm[3] = a01; + outm[5] = am[7]; + outm[6] = a02; + outm[7] = a12; + } else { + outm[0] = am[0]; + outm[1] = am[3]; + outm[2] = am[6]; + outm[3] = am[1]; + outm[4] = am[4]; + outm[5] = am[7]; + outm[6] = am[2]; + outm[7] = am[5]; + outm[8] = am[8]; + } + return out; + }; + Mat3.invert = function invert(out, a) { + var am = a.m, outm = out.m; + var a00 = am[0], a01 = am[1], a02 = am[2], a10 = am[3], a11 = am[4], a12 = am[5], a20 = am[6], a21 = am[7], a22 = am[8]; + var b01 = a22 * a11 - a12 * a21; + var b11 = -a22 * a10 + a12 * a20; + var b21 = a21 * a10 - a11 * a20; + var det = a00 * b01 + a01 * b11 + a02 * b21; + if (!det) return out; + det = 1 / det; + outm[0] = b01 * det; + outm[1] = (-a22 * a01 + a02 * a21) * det; + outm[2] = (a12 * a01 - a02 * a11) * det; + outm[3] = b11 * det; + outm[4] = (a22 * a00 - a02 * a20) * det; + outm[5] = (-a12 * a00 + a02 * a10) * det; + outm[6] = b21 * det; + outm[7] = (-a21 * a00 + a01 * a20) * det; + outm[8] = (a11 * a00 - a01 * a10) * det; + return out; + }; + Mat3.adjoint = function adjoint(out, a) { + var am = a.m, outm = out.m; + var a00 = am[0], a01 = am[1], a02 = am[2], a10 = am[3], a11 = am[4], a12 = am[5], a20 = am[6], a21 = am[7], a22 = am[8]; + outm[0] = a11 * a22 - a12 * a21; + outm[1] = a02 * a21 - a01 * a22; + outm[2] = a01 * a12 - a02 * a11; + outm[3] = a12 * a20 - a10 * a22; + outm[4] = a00 * a22 - a02 * a20; + outm[5] = a02 * a10 - a00 * a12; + outm[6] = a10 * a21 - a11 * a20; + outm[7] = a01 * a20 - a00 * a21; + outm[8] = a00 * a11 - a01 * a10; + return out; + }; + Mat3.determinant = function determinant(a) { + var am = a.m; + var a00 = am[0], a01 = am[1], a02 = am[2], a10 = am[3], a11 = am[4], a12 = am[5], a20 = am[6], a21 = am[7], a22 = am[8]; + return a00 * (a22 * a11 - a12 * a21) + a01 * (-a22 * a10 + a12 * a20) + a02 * (a21 * a10 - a11 * a20); + }; + Mat3.multiply = function multiply(out, a, b) { + var am = a.m, bm = b.m, outm = out.m; + var a00 = am[0], a01 = am[1], a02 = am[2], a10 = am[3], a11 = am[4], a12 = am[5], a20 = am[6], a21 = am[7], a22 = am[8]; + var b00 = bm[0], b01 = bm[1], b02 = bm[2]; + var b10 = bm[3], b11 = bm[4], b12 = bm[5]; + var b20 = bm[6], b21 = bm[7], b22 = bm[8]; + outm[0] = b00 * a00 + b01 * a10 + b02 * a20; + outm[1] = b00 * a01 + b01 * a11 + b02 * a21; + outm[2] = b00 * a02 + b01 * a12 + b02 * a22; + outm[3] = b10 * a00 + b11 * a10 + b12 * a20; + outm[4] = b10 * a01 + b11 * a11 + b12 * a21; + outm[5] = b10 * a02 + b11 * a12 + b12 * a22; + outm[6] = b20 * a00 + b21 * a10 + b22 * a20; + outm[7] = b20 * a01 + b21 * a11 + b22 * a21; + outm[8] = b20 * a02 + b21 * a12 + b22 * a22; + return out; + }; + Mat3.multiplyMat4 = function multiplyMat4(out, a, b) { + var am = a.m, bm = b.m, outm = out.m; + var a00 = am[0], a01 = am[1], a02 = am[2], a10 = am[3], a11 = am[4], a12 = am[5], a20 = am[6], a21 = am[7], a22 = am[8]; + var b00 = bm[0], b01 = bm[1], b02 = bm[2]; + var b10 = bm[4], b11 = bm[5], b12 = bm[6]; + var b20 = bm[8], b21 = bm[9], b22 = bm[10]; + outm[0] = b00 * a00 + b01 * a10 + b02 * a20; + outm[1] = b00 * a01 + b01 * a11 + b02 * a21; + outm[2] = b00 * a02 + b01 * a12 + b02 * a22; + outm[3] = b10 * a00 + b11 * a10 + b12 * a20; + outm[4] = b10 * a01 + b11 * a11 + b12 * a21; + outm[5] = b10 * a02 + b11 * a12 + b12 * a22; + outm[6] = b20 * a00 + b21 * a10 + b22 * a20; + outm[7] = b20 * a01 + b21 * a11 + b22 * a21; + outm[8] = b20 * a02 + b21 * a12 + b22 * a22; + return out; + }; + Mat3.translate = function translate(out, a, v) { + var am = a.m, outm = out.m; + var a00 = am[0], a01 = am[1], a02 = am[2], a10 = am[3], a11 = am[4], a12 = am[5], a20 = am[6], a21 = am[7], a22 = am[8]; + var x = v.x, y = v.y; + outm[0] = a00; + outm[1] = a01; + outm[2] = a02; + outm[3] = a10; + outm[4] = a11; + outm[5] = a12; + outm[6] = x * a00 + y * a10 + a20; + outm[7] = x * a01 + y * a11 + a21; + outm[8] = x * a02 + y * a12 + a22; + return out; + }; + Mat3.rotate = function rotate(out, a, rad) { + var am = a.m, outm = out.m; + var a00 = am[0], a01 = am[1], a02 = am[2], a10 = am[3], a11 = am[4], a12 = am[5], a20 = am[6], a21 = am[7], a22 = am[8]; + var s = Math.sin(rad); + var c = Math.cos(rad); + outm[0] = c * a00 + s * a10; + outm[1] = c * a01 + s * a11; + outm[2] = c * a02 + s * a12; + outm[3] = c * a10 - s * a00; + outm[4] = c * a11 - s * a01; + outm[5] = c * a12 - s * a02; + outm[6] = a20; + outm[7] = a21; + outm[8] = a22; + return out; + }; + Mat3.scale = function scale(out, a, v) { + var x = v.x, y = v.y; + var am = a.m, outm = out.m; + outm[0] = x * am[0]; + outm[1] = x * am[1]; + outm[2] = x * am[2]; + outm[3] = y * am[3]; + outm[4] = y * am[4]; + outm[5] = y * am[5]; + outm[6] = am[6]; + outm[7] = am[7]; + outm[8] = am[8]; + return out; + }; + Mat3.fromMat4 = function fromMat4(out, a) { + var am = a.m, outm = out.m; + outm[0] = am[0]; + outm[1] = am[1]; + outm[2] = am[2]; + outm[3] = am[4]; + outm[4] = am[5]; + outm[5] = am[6]; + outm[6] = am[8]; + outm[7] = am[9]; + outm[8] = am[10]; + return out; + }; + Mat3.fromTranslation = function fromTranslation(out, v) { + var outm = out.m; + outm[0] = 1; + outm[1] = 0; + outm[2] = 0; + outm[3] = 0; + outm[4] = 1; + outm[5] = 0; + outm[6] = v.x; + outm[7] = v.y; + outm[8] = 1; + return out; + }; + Mat3.fromRotation = function fromRotation(out, rad) { + var s = Math.sin(rad), c = Math.cos(rad); + var outm = out.m; + outm[0] = c; + outm[1] = s; + outm[2] = 0; + outm[3] = -s; + outm[4] = c; + outm[5] = 0; + outm[6] = 0; + outm[7] = 0; + outm[8] = 1; + return out; + }; + Mat3.fromScaling = function fromScaling(out, v) { + var outm = out.m; + outm[0] = v.x; + outm[1] = 0; + outm[2] = 0; + outm[3] = 0; + outm[4] = v.y; + outm[5] = 0; + outm[6] = 0; + outm[7] = 0; + outm[8] = 1; + return out; + }; + Mat3.fromQuat = function fromQuat(out, q) { + var outm = out.m; + var x = q.x, y = q.y, z = q.z, w = q.w; + var x2 = x + x; + var y2 = y + y; + var z2 = z + z; + var xx = x * x2; + var yx = y * x2; + var yy = y * y2; + var zx = z * x2; + var zy = z * y2; + var zz = z * z2; + var wx = w * x2; + var wy = w * y2; + var wz = w * z2; + outm[0] = 1 - yy - zz; + outm[3] = yx - wz; + outm[6] = zx + wy; + outm[1] = yx + wz; + outm[4] = 1 - xx - zz; + outm[7] = zy - wx; + outm[2] = zx - wy; + outm[5] = zy + wx; + outm[8] = 1 - xx - yy; + return out; + }; + Mat3.fromViewUp = function fromViewUp(out, view, up) { + var _fromViewUpIIFE = (function() { + var default_up = new _vec["default"](0, 1, 0); + var x = new _vec["default"](); + var y = new _vec["default"](); + return function(out, view, up) { + if (_vec["default"].lengthSqr(view) < _utils.EPSILON * _utils.EPSILON) { + Mat3.identity(out); + return out; + } + up = up || default_up; + _vec["default"].normalize(x, _vec["default"].cross(x, up, view)); + if (_vec["default"].lengthSqr(x) < _utils.EPSILON * _utils.EPSILON) { + Mat3.identity(out); + return out; + } + _vec["default"].cross(y, view, x); + Mat3.set(out, x.x, x.y, x.z, y.x, y.y, y.z, view.x, view.y, view.z); + return out; + }; + })(); + return _fromViewUpIIFE(out, view, up); + }; + Mat3.normalFromMat4 = function normalFromMat4(out, a) { + var am = a.m, outm = out.m; + var a00 = am[0], a01 = am[1], a02 = am[2], a03 = am[3], a10 = am[4], a11 = am[5], a12 = am[6], a13 = am[7], a20 = am[8], a21 = am[9], a22 = am[10], a23 = am[11], a30 = am[12], a31 = am[13], a32 = am[14], a33 = am[15]; + var b00 = a00 * a11 - a01 * a10; + var b01 = a00 * a12 - a02 * a10; + var b02 = a00 * a13 - a03 * a10; + var b03 = a01 * a12 - a02 * a11; + var b04 = a01 * a13 - a03 * a11; + var b05 = a02 * a13 - a03 * a12; + var b06 = a20 * a31 - a21 * a30; + var b07 = a20 * a32 - a22 * a30; + var b08 = a20 * a33 - a23 * a30; + var b09 = a21 * a32 - a22 * a31; + var b10 = a21 * a33 - a23 * a31; + var b11 = a22 * a33 - a23 * a32; + var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06; + if (!det) return out; + det = 1 / det; + outm[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det; + outm[1] = (a12 * b08 - a10 * b11 - a13 * b07) * det; + outm[2] = (a10 * b10 - a11 * b08 + a13 * b06) * det; + outm[3] = (a02 * b10 - a01 * b11 - a03 * b09) * det; + outm[4] = (a00 * b11 - a02 * b08 + a03 * b07) * det; + outm[5] = (a01 * b08 - a00 * b10 - a03 * b06) * det; + outm[6] = (a31 * b05 - a32 * b04 + a33 * b03) * det; + outm[7] = (a32 * b02 - a30 * b05 - a33 * b01) * det; + outm[8] = (a30 * b04 - a31 * b02 + a33 * b00) * det; + return out; + }; + Mat3.frob = function frob(a) { + var am = a.m; + return Math.sqrt(Math.pow(am[0], 2) + Math.pow(am[1], 2) + Math.pow(am[2], 2) + Math.pow(am[3], 2) + Math.pow(am[4], 2) + Math.pow(am[5], 2) + Math.pow(am[6], 2) + Math.pow(am[7], 2) + Math.pow(am[8], 2)); + }; + Mat3.add = function add(out, a, b) { + var am = a.m, bm = b.m, outm = out.m; + outm[0] = am[0] + bm[0]; + outm[1] = am[1] + bm[1]; + outm[2] = am[2] + bm[2]; + outm[3] = am[3] + bm[3]; + outm[4] = am[4] + bm[4]; + outm[5] = am[5] + bm[5]; + outm[6] = am[6] + bm[6]; + outm[7] = am[7] + bm[7]; + outm[8] = am[8] + bm[8]; + return out; + }; + Mat3.subtract = function subtract(out, a, b) { + var am = a.m, bm = b.m, outm = out.m; + outm[0] = am[0] - bm[0]; + outm[1] = am[1] - bm[1]; + outm[2] = am[2] - bm[2]; + outm[3] = am[3] - bm[3]; + outm[4] = am[4] - bm[4]; + outm[5] = am[5] - bm[5]; + outm[6] = am[6] - bm[6]; + outm[7] = am[7] - bm[7]; + outm[8] = am[8] - bm[8]; + return out; + }; + Mat3.multiplyScalar = function multiplyScalar(out, a, b) { + var am = a.m, outm = out.m; + outm[0] = am[0] * b; + outm[1] = am[1] * b; + outm[2] = am[2] * b; + outm[3] = am[3] * b; + outm[4] = am[4] * b; + outm[5] = am[5] * b; + outm[6] = am[6] * b; + outm[7] = am[7] * b; + outm[8] = am[8] * b; + return out; + }; + Mat3.multiplyScalarAndAdd = function multiplyScalarAndAdd(out, a, b, scale) { + var am = a.m, bm = b.m, outm = out.m; + outm[0] = am[0] + bm[0] * scale; + outm[1] = am[1] + bm[1] * scale; + outm[2] = am[2] + bm[2] * scale; + outm[3] = am[3] + bm[3] * scale; + outm[4] = am[4] + bm[4] * scale; + outm[5] = am[5] + bm[5] * scale; + outm[6] = am[6] + bm[6] * scale; + outm[7] = am[7] + bm[7] * scale; + outm[8] = am[8] + bm[8] * scale; + return out; + }; + Mat3.exactEquals = function exactEquals(a, b) { + var am = a.m, bm = b.m; + return am[0] === bm[0] && am[1] === bm[1] && am[2] === bm[2] && am[3] === bm[3] && am[4] === bm[4] && am[5] === bm[5] && am[6] === bm[6] && am[7] === bm[7] && am[8] === bm[8]; + }; + Mat3.equals = function equals(a, b) { + var am = a.m, bm = b.m; + var a0 = am[0], a1 = am[1], a2 = am[2], a3 = am[3], a4 = am[4], a5 = am[5], a6 = am[6], a7 = am[7], a8 = am[8]; + var b0 = bm[0], b1 = bm[1], b2 = bm[2], b3 = bm[3], b4 = bm[4], b5 = bm[5], b6 = bm[6], b7 = bm[7], b8 = bm[8]; + return Math.abs(a0 - b0) <= _utils.EPSILON * Math.max(1, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= _utils.EPSILON * Math.max(1, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= _utils.EPSILON * Math.max(1, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= _utils.EPSILON * Math.max(1, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= _utils.EPSILON * Math.max(1, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= _utils.EPSILON * Math.max(1, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= _utils.EPSILON * Math.max(1, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= _utils.EPSILON * Math.max(1, Math.abs(a7), Math.abs(b7)) && Math.abs(a8 - b8) <= _utils.EPSILON * Math.max(1, Math.abs(a8), Math.abs(b8)); + }; + Mat3.toArray = function toArray(out, mat, ofs) { + void 0 === ofs && (ofs = 0); + var m = mat.m; + for (var i = 0; i < 9; i++) out[ofs + i] = m[i]; + return out; + }; + Mat3.fromArray = function fromArray(out, arr, ofs) { + void 0 === ofs && (ofs = 0); + var m = out.m; + for (var i = 0; i < 9; i++) m[i] = arr[ofs + i]; + return out; + }; + function Mat3(m00, m01, m02, m03, m04, m05, m06, m07, m08) { + void 0 === m00 && (m00 = 1); + void 0 === m01 && (m01 = 0); + void 0 === m02 && (m02 = 0); + void 0 === m03 && (m03 = 0); + void 0 === m04 && (m04 = 1); + void 0 === m05 && (m05 = 0); + void 0 === m06 && (m06 = 0); + void 0 === m07 && (m07 = 0); + void 0 === m08 && (m08 = 1); + this.m = void 0; + if (m00 instanceof _utils.FLOAT_ARRAY_TYPE) this.m = m00; else { + this.m = new _utils.FLOAT_ARRAY_TYPE(9); + var m = this.m; + m[0] = m00; + m[1] = m01; + m[2] = m02; + m[3] = m03; + m[4] = m04; + m[5] = m05; + m[6] = m06; + m[7] = m07; + m[8] = m08; + } + } + var _proto = Mat3.prototype; + _proto.toString = function toString() { + var am = this.m; + return "mat3(" + am[0] + ", " + am[1] + ", " + am[2] + ", " + am[3] + ", " + am[4] + ", " + am[5] + ", " + am[6] + ", " + am[7] + ", " + am[8] + ")"; + }; + return Mat3; + })(); + exports["default"] = Mat3; + Mat3.sub = Mat3.subtract; + Mat3.mul = Mat3.multiply; + Mat3.IDENTITY = Object.freeze(new Mat3()); + cc.Mat3 = Mat3; + module.exports = exports["default"]; + }), { + "../value-types/utils": 227, + "./vec3": 230 + } ], + 222: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _valueType = _interopRequireDefault(require("./value-type")); + var _CCClass = _interopRequireDefault(require("../platform/CCClass")); + var _vec = _interopRequireDefault(require("./vec3")); + var _quat = _interopRequireDefault(require("./quat")); + var _utils = require("./utils"); + var _mat = _interopRequireDefault(require("./mat3")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var _a00 = 0; + var _a01 = 0; + var _a02 = 0; + var _a03 = 0; + var _a10 = 0; + var _a11 = 0; + var _a12 = 0; + var _a13 = 0; + var _a20 = 0; + var _a21 = 0; + var _a22 = 0; + var _a23 = 0; + var _a30 = 0; + var _a31 = 0; + var _a32 = 0; + var _a33 = 0; + var Mat4 = (function(_ValueType) { + _inheritsLoose(Mat4, _ValueType); + var _proto = Mat4.prototype; + _proto.mul = function mul(m, out) { + return Mat4.multiply(out || new Mat4(), this, m); + }; + _proto.mulScalar = function mulScalar(num, out) { + Mat4.multiplyScalar(out || new Mat4(), this, num); + }; + _proto.sub = function sub(m, out) { + Mat4.subtract(out || new Mat4(), this, m); + }; + Mat4.clone = function clone(a) { + var m = a.m; + return new Mat4(m[0], m[1], m[2], m[3], m[4], m[5], m[6], m[7], m[8], m[9], m[10], m[11], m[12], m[13], m[14], m[15]); + }; + Mat4.copy = function copy(out, a) { + var m = out.m, am = a.m; + m[0] = am[0]; + m[1] = am[1]; + m[2] = am[2]; + m[3] = am[3]; + m[4] = am[4]; + m[5] = am[5]; + m[6] = am[6]; + m[7] = am[7]; + m[8] = am[8]; + m[9] = am[9]; + m[10] = am[10]; + m[11] = am[11]; + m[12] = am[12]; + m[13] = am[13]; + m[14] = am[14]; + m[15] = am[15]; + return out; + }; + Mat4.set = function set(out, m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) { + var m = out.m; + m[0] = m00; + m[1] = m01; + m[2] = m02; + m[3] = m03; + m[4] = m10; + m[5] = m11; + m[6] = m12; + m[7] = m13; + m[8] = m20; + m[9] = m21; + m[10] = m22; + m[11] = m23; + m[12] = m30; + m[13] = m31; + m[14] = m32; + m[15] = m33; + return out; + }; + Mat4.identity = function identity(out) { + var m = out.m; + m[0] = 1; + m[1] = 0; + m[2] = 0; + m[3] = 0; + m[4] = 0; + m[5] = 1; + m[6] = 0; + m[7] = 0; + m[8] = 0; + m[9] = 0; + m[10] = 1; + m[11] = 0; + m[12] = 0; + m[13] = 0; + m[14] = 0; + m[15] = 1; + return out; + }; + Mat4.transpose = function transpose(out, a) { + var m = out.m, am = a.m; + if (out === a) { + var a01 = am[1], a02 = am[2], a03 = am[3], a12 = am[6], a13 = am[7], a23 = am[11]; + m[1] = am[4]; + m[2] = am[8]; + m[3] = am[12]; + m[4] = a01; + m[6] = am[9]; + m[7] = am[13]; + m[8] = a02; + m[9] = a12; + m[11] = am[14]; + m[12] = a03; + m[13] = a13; + m[14] = a23; + } else { + m[0] = am[0]; + m[1] = am[4]; + m[2] = am[8]; + m[3] = am[12]; + m[4] = am[1]; + m[5] = am[5]; + m[6] = am[9]; + m[7] = am[13]; + m[8] = am[2]; + m[9] = am[6]; + m[10] = am[10]; + m[11] = am[14]; + m[12] = am[3]; + m[13] = am[7]; + m[14] = am[11]; + m[15] = am[15]; + } + return out; + }; + Mat4.invert = function invert(out, a) { + var am = a.m; + _a00 = am[0]; + _a01 = am[1]; + _a02 = am[2]; + _a03 = am[3]; + _a10 = am[4]; + _a11 = am[5]; + _a12 = am[6]; + _a13 = am[7]; + _a20 = am[8]; + _a21 = am[9]; + _a22 = am[10]; + _a23 = am[11]; + _a30 = am[12]; + _a31 = am[13]; + _a32 = am[14]; + _a33 = am[15]; + var b00 = _a00 * _a11 - _a01 * _a10; + var b01 = _a00 * _a12 - _a02 * _a10; + var b02 = _a00 * _a13 - _a03 * _a10; + var b03 = _a01 * _a12 - _a02 * _a11; + var b04 = _a01 * _a13 - _a03 * _a11; + var b05 = _a02 * _a13 - _a03 * _a12; + var b06 = _a20 * _a31 - _a21 * _a30; + var b07 = _a20 * _a32 - _a22 * _a30; + var b08 = _a20 * _a33 - _a23 * _a30; + var b09 = _a21 * _a32 - _a22 * _a31; + var b10 = _a21 * _a33 - _a23 * _a31; + var b11 = _a22 * _a33 - _a23 * _a32; + var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06; + if (0 === det) return null; + det = 1 / det; + var m = out.m; + m[0] = (_a11 * b11 - _a12 * b10 + _a13 * b09) * det; + m[1] = (_a02 * b10 - _a01 * b11 - _a03 * b09) * det; + m[2] = (_a31 * b05 - _a32 * b04 + _a33 * b03) * det; + m[3] = (_a22 * b04 - _a21 * b05 - _a23 * b03) * det; + m[4] = (_a12 * b08 - _a10 * b11 - _a13 * b07) * det; + m[5] = (_a00 * b11 - _a02 * b08 + _a03 * b07) * det; + m[6] = (_a32 * b02 - _a30 * b05 - _a33 * b01) * det; + m[7] = (_a20 * b05 - _a22 * b02 + _a23 * b01) * det; + m[8] = (_a10 * b10 - _a11 * b08 + _a13 * b06) * det; + m[9] = (_a01 * b08 - _a00 * b10 - _a03 * b06) * det; + m[10] = (_a30 * b04 - _a31 * b02 + _a33 * b00) * det; + m[11] = (_a21 * b02 - _a20 * b04 - _a23 * b00) * det; + m[12] = (_a11 * b07 - _a10 * b09 - _a12 * b06) * det; + m[13] = (_a00 * b09 - _a01 * b07 + _a02 * b06) * det; + m[14] = (_a31 * b01 - _a30 * b03 - _a32 * b00) * det; + m[15] = (_a20 * b03 - _a21 * b01 + _a22 * b00) * det; + return out; + }; + Mat4.determinant = function determinant(a) { + var m = a.m; + _a00 = m[0]; + _a01 = m[1]; + _a02 = m[2]; + _a03 = m[3]; + _a10 = m[4]; + _a11 = m[5]; + _a12 = m[6]; + _a13 = m[7]; + _a20 = m[8]; + _a21 = m[9]; + _a22 = m[10]; + _a23 = m[11]; + _a30 = m[12]; + _a31 = m[13]; + _a32 = m[14]; + _a33 = m[15]; + var b00 = _a00 * _a11 - _a01 * _a10; + var b01 = _a00 * _a12 - _a02 * _a10; + var b02 = _a00 * _a13 - _a03 * _a10; + var b03 = _a01 * _a12 - _a02 * _a11; + var b04 = _a01 * _a13 - _a03 * _a11; + var b05 = _a02 * _a13 - _a03 * _a12; + var b06 = _a20 * _a31 - _a21 * _a30; + var b07 = _a20 * _a32 - _a22 * _a30; + var b08 = _a20 * _a33 - _a23 * _a30; + var b09 = _a21 * _a32 - _a22 * _a31; + var b10 = _a21 * _a33 - _a23 * _a31; + var b11 = _a22 * _a33 - _a23 * _a32; + return b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06; + }; + Mat4.multiply = function multiply(out, a, b) { + var m = out.m, am = a.m, bm = b.m; + _a00 = am[0]; + _a01 = am[1]; + _a02 = am[2]; + _a03 = am[3]; + _a10 = am[4]; + _a11 = am[5]; + _a12 = am[6]; + _a13 = am[7]; + _a20 = am[8]; + _a21 = am[9]; + _a22 = am[10]; + _a23 = am[11]; + _a30 = am[12]; + _a31 = am[13]; + _a32 = am[14]; + _a33 = am[15]; + var b0 = bm[0], b1 = bm[1], b2 = bm[2], b3 = bm[3]; + m[0] = b0 * _a00 + b1 * _a10 + b2 * _a20 + b3 * _a30; + m[1] = b0 * _a01 + b1 * _a11 + b2 * _a21 + b3 * _a31; + m[2] = b0 * _a02 + b1 * _a12 + b2 * _a22 + b3 * _a32; + m[3] = b0 * _a03 + b1 * _a13 + b2 * _a23 + b3 * _a33; + b0 = bm[4]; + b1 = bm[5]; + b2 = bm[6]; + b3 = bm[7]; + m[4] = b0 * _a00 + b1 * _a10 + b2 * _a20 + b3 * _a30; + m[5] = b0 * _a01 + b1 * _a11 + b2 * _a21 + b3 * _a31; + m[6] = b0 * _a02 + b1 * _a12 + b2 * _a22 + b3 * _a32; + m[7] = b0 * _a03 + b1 * _a13 + b2 * _a23 + b3 * _a33; + b0 = bm[8]; + b1 = bm[9]; + b2 = bm[10]; + b3 = bm[11]; + m[8] = b0 * _a00 + b1 * _a10 + b2 * _a20 + b3 * _a30; + m[9] = b0 * _a01 + b1 * _a11 + b2 * _a21 + b3 * _a31; + m[10] = b0 * _a02 + b1 * _a12 + b2 * _a22 + b3 * _a32; + m[11] = b0 * _a03 + b1 * _a13 + b2 * _a23 + b3 * _a33; + b0 = bm[12]; + b1 = bm[13]; + b2 = bm[14]; + b3 = bm[15]; + m[12] = b0 * _a00 + b1 * _a10 + b2 * _a20 + b3 * _a30; + m[13] = b0 * _a01 + b1 * _a11 + b2 * _a21 + b3 * _a31; + m[14] = b0 * _a02 + b1 * _a12 + b2 * _a22 + b3 * _a32; + m[15] = b0 * _a03 + b1 * _a13 + b2 * _a23 + b3 * _a33; + return out; + }; + Mat4.transform = function transform(out, a, v) { + var x = v.x, y = v.y, z = v.z; + var m = out.m, am = a.m; + if (a === out) { + m[12] = am[0] * x + am[4] * y + am[8] * z + am[12]; + m[13] = am[1] * x + am[5] * y + am[9] * z + am[13]; + m[14] = am[2] * x + am[6] * y + am[10] * z + am[14]; + m[15] = am[3] * x + am[7] * y + am[11] * z + am[15]; + } else { + _a00 = am[0]; + _a01 = am[1]; + _a02 = am[2]; + _a03 = am[3]; + _a10 = am[4]; + _a11 = am[5]; + _a12 = am[6]; + _a13 = am[7]; + _a20 = am[8]; + _a21 = am[9]; + _a22 = am[10]; + _a23 = am[11]; + _a30 = am[12]; + _a31 = am[13]; + _a32 = am[14]; + _a33 = am[15]; + m[0] = _a00; + m[1] = _a01; + m[2] = _a02; + m[3] = _a03; + m[4] = _a10; + m[5] = _a11; + m[6] = _a12; + m[7] = _a13; + m[8] = _a20; + m[9] = _a21; + m[10] = _a22; + m[11] = _a23; + m[12] = _a00 * x + _a10 * y + _a20 * z + am[12]; + m[13] = _a01 * x + _a11 * y + _a21 * z + am[13]; + m[14] = _a02 * x + _a12 * y + _a22 * z + am[14]; + m[15] = _a03 * x + _a13 * y + _a23 * z + am[15]; + } + return out; + }; + Mat4.translate = function translate(out, a, v) { + var m = out.m, am = a.m; + if (a === out) { + m[12] += v.x; + m[13] += v.y; + m[14] += v.z; + } else { + m[0] = am[0]; + m[1] = am[1]; + m[2] = am[2]; + m[3] = am[3]; + m[4] = am[4]; + m[5] = am[5]; + m[6] = am[6]; + m[7] = am[7]; + m[8] = am[8]; + m[9] = am[9]; + m[10] = am[10]; + m[11] = am[11]; + m[12] += v.x; + m[13] += v.y; + m[14] += v.z; + m[15] = am[15]; + } + return out; + }; + Mat4.scale = function scale(out, a, v) { + var x = v.x, y = v.y, z = v.z; + var m = out.m, am = a.m; + m[0] = am[0] * x; + m[1] = am[1] * x; + m[2] = am[2] * x; + m[3] = am[3] * x; + m[4] = am[4] * y; + m[5] = am[5] * y; + m[6] = am[6] * y; + m[7] = am[7] * y; + m[8] = am[8] * z; + m[9] = am[9] * z; + m[10] = am[10] * z; + m[11] = am[11] * z; + m[12] = am[12]; + m[13] = am[13]; + m[14] = am[14]; + m[15] = am[15]; + return out; + }; + Mat4.rotate = function rotate(out, a, rad, axis) { + var x = axis.x, y = axis.y, z = axis.z; + var len = Math.sqrt(x * x + y * y + z * z); + if (Math.abs(len) < _utils.EPSILON) return null; + len = 1 / len; + x *= len; + y *= len; + z *= len; + var s = Math.sin(rad); + var c = Math.cos(rad); + var t = 1 - c; + var am = a.m; + _a00 = am[0]; + _a01 = am[1]; + _a02 = am[2]; + _a03 = am[3]; + _a10 = am[4]; + _a11 = am[5]; + _a12 = am[6]; + _a13 = am[7]; + _a20 = am[8]; + _a21 = am[9]; + _a22 = am[10]; + _a23 = am[11]; + var b00 = x * x * t + c, b01 = y * x * t + z * s, b02 = z * x * t - y * s; + var b10 = x * y * t - z * s, b11 = y * y * t + c, b12 = z * y * t + x * s; + var b20 = x * z * t + y * s, b21 = y * z * t - x * s, b22 = z * z * t + c; + var m = out.m; + m[0] = _a00 * b00 + _a10 * b01 + _a20 * b02; + m[1] = _a01 * b00 + _a11 * b01 + _a21 * b02; + m[2] = _a02 * b00 + _a12 * b01 + _a22 * b02; + m[3] = _a03 * b00 + _a13 * b01 + _a23 * b02; + m[4] = _a00 * b10 + _a10 * b11 + _a20 * b12; + m[5] = _a01 * b10 + _a11 * b11 + _a21 * b12; + m[6] = _a02 * b10 + _a12 * b11 + _a22 * b12; + m[7] = _a03 * b10 + _a13 * b11 + _a23 * b12; + m[8] = _a00 * b20 + _a10 * b21 + _a20 * b22; + m[9] = _a01 * b20 + _a11 * b21 + _a21 * b22; + m[10] = _a02 * b20 + _a12 * b21 + _a22 * b22; + m[11] = _a03 * b20 + _a13 * b21 + _a23 * b22; + if (a !== out) { + m[12] = am[12]; + m[13] = am[13]; + m[14] = am[14]; + m[15] = am[15]; + } + return out; + }; + Mat4.rotateX = function rotateX(out, a, rad) { + var m = out.m, am = a.m; + var s = Math.sin(rad), c = Math.cos(rad), a10 = am[4], a11 = am[5], a12 = am[6], a13 = am[7], a20 = am[8], a21 = am[9], a22 = am[10], a23 = am[11]; + if (a !== out) { + m[0] = am[0]; + m[1] = am[1]; + m[2] = am[2]; + m[3] = am[3]; + m[12] = am[12]; + m[13] = am[13]; + m[14] = am[14]; + m[15] = am[15]; + } + m[4] = a10 * c + a20 * s; + m[5] = a11 * c + a21 * s; + m[6] = a12 * c + a22 * s; + m[7] = a13 * c + a23 * s; + m[8] = a20 * c - a10 * s; + m[9] = a21 * c - a11 * s; + m[10] = a22 * c - a12 * s; + m[11] = a23 * c - a13 * s; + return out; + }; + Mat4.rotateY = function rotateY(out, a, rad) { + var m = out.m, am = a.m; + var s = Math.sin(rad), c = Math.cos(rad), a00 = am[0], a01 = am[1], a02 = am[2], a03 = am[3], a20 = am[8], a21 = am[9], a22 = am[10], a23 = am[11]; + if (a !== out) { + m[4] = am[4]; + m[5] = am[5]; + m[6] = am[6]; + m[7] = am[7]; + m[12] = am[12]; + m[13] = am[13]; + m[14] = am[14]; + m[15] = am[15]; + } + m[0] = a00 * c - a20 * s; + m[1] = a01 * c - a21 * s; + m[2] = a02 * c - a22 * s; + m[3] = a03 * c - a23 * s; + m[8] = a00 * s + a20 * c; + m[9] = a01 * s + a21 * c; + m[10] = a02 * s + a22 * c; + m[11] = a03 * s + a23 * c; + return out; + }; + Mat4.rotateZ = function rotateZ(out, a, rad) { + var am = a.m; + var m = out.m; + var s = Math.sin(rad), c = Math.cos(rad), a00 = a.m[0], a01 = a.m[1], a02 = a.m[2], a03 = a.m[3], a10 = a.m[4], a11 = a.m[5], a12 = a.m[6], a13 = a.m[7]; + if (a !== out) { + m[8] = am[8]; + m[9] = am[9]; + m[10] = am[10]; + m[11] = am[11]; + m[12] = am[12]; + m[13] = am[13]; + m[14] = am[14]; + m[15] = am[15]; + } + m[0] = a00 * c + a10 * s; + m[1] = a01 * c + a11 * s; + m[2] = a02 * c + a12 * s; + m[3] = a03 * c + a13 * s; + m[4] = a10 * c - a00 * s; + m[5] = a11 * c - a01 * s; + m[6] = a12 * c - a02 * s; + m[7] = a13 * c - a03 * s; + return out; + }; + Mat4.fromTranslation = function fromTranslation(out, v) { + var m = out.m; + m[0] = 1; + m[1] = 0; + m[2] = 0; + m[3] = 0; + m[4] = 0; + m[5] = 1; + m[6] = 0; + m[7] = 0; + m[8] = 0; + m[9] = 0; + m[10] = 1; + m[11] = 0; + m[12] = v.x; + m[13] = v.y; + m[14] = v.z; + m[15] = 1; + return out; + }; + Mat4.fromScaling = function fromScaling(out, v) { + var m = out.m; + m[0] = v.x; + m[1] = 0; + m[2] = 0; + m[3] = 0; + m[4] = 0; + m[5] = v.y; + m[6] = 0; + m[7] = 0; + m[8] = 0; + m[9] = 0; + m[10] = v.z; + m[11] = 0; + m[12] = 0; + m[13] = 0; + m[14] = 0; + m[15] = 1; + return out; + }; + Mat4.fromRotation = function fromRotation(out, rad, axis) { + var x = axis.x, y = axis.y, z = axis.z; + var len = Math.sqrt(x * x + y * y + z * z); + if (Math.abs(len) < _utils.EPSILON) return null; + len = 1 / len; + x *= len; + y *= len; + z *= len; + var s = Math.sin(rad); + var c = Math.cos(rad); + var t = 1 - c; + var m = out.m; + m[0] = x * x * t + c; + m[1] = y * x * t + z * s; + m[2] = z * x * t - y * s; + m[3] = 0; + m[4] = x * y * t - z * s; + m[5] = y * y * t + c; + m[6] = z * y * t + x * s; + m[7] = 0; + m[8] = x * z * t + y * s; + m[9] = y * z * t - x * s; + m[10] = z * z * t + c; + m[11] = 0; + m[12] = 0; + m[13] = 0; + m[14] = 0; + m[15] = 1; + return out; + }; + Mat4.fromXRotation = function fromXRotation(out, rad) { + var s = Math.sin(rad), c = Math.cos(rad); + var m = out.m; + m[0] = 1; + m[1] = 0; + m[2] = 0; + m[3] = 0; + m[4] = 0; + m[5] = c; + m[6] = s; + m[7] = 0; + m[8] = 0; + m[9] = -s; + m[10] = c; + m[11] = 0; + m[12] = 0; + m[13] = 0; + m[14] = 0; + m[15] = 1; + return out; + }; + Mat4.fromYRotation = function fromYRotation(out, rad) { + var s = Math.sin(rad), c = Math.cos(rad); + var m = out.m; + m[0] = c; + m[1] = 0; + m[2] = -s; + m[3] = 0; + m[4] = 0; + m[5] = 1; + m[6] = 0; + m[7] = 0; + m[8] = s; + m[9] = 0; + m[10] = c; + m[11] = 0; + m[12] = 0; + m[13] = 0; + m[14] = 0; + m[15] = 1; + return out; + }; + Mat4.fromZRotation = function fromZRotation(out, rad) { + var s = Math.sin(rad), c = Math.cos(rad); + var m = out.m; + m[0] = c; + m[1] = s; + m[2] = 0; + m[3] = 0; + m[4] = -s; + m[5] = c; + m[6] = 0; + m[7] = 0; + m[8] = 0; + m[9] = 0; + m[10] = 1; + m[11] = 0; + m[12] = 0; + m[13] = 0; + m[14] = 0; + m[15] = 1; + return out; + }; + Mat4.fromRT = function fromRT(out, q, v) { + var x = q.x, y = q.y, z = q.z, w = q.w; + var x2 = x + x; + var y2 = y + y; + var z2 = z + z; + var xx = x * x2; + var xy = x * y2; + var xz = x * z2; + var yy = y * y2; + var yz = y * z2; + var zz = z * z2; + var wx = w * x2; + var wy = w * y2; + var wz = w * z2; + var m = out.m; + m[0] = 1 - (yy + zz); + m[1] = xy + wz; + m[2] = xz - wy; + m[3] = 0; + m[4] = xy - wz; + m[5] = 1 - (xx + zz); + m[6] = yz + wx; + m[7] = 0; + m[8] = xz + wy; + m[9] = yz - wx; + m[10] = 1 - (xx + yy); + m[11] = 0; + m[12] = v.x; + m[13] = v.y; + m[14] = v.z; + m[15] = 1; + return out; + }; + Mat4.getTranslation = function getTranslation(out, mat) { + var m = mat.m; + out.x = m[12]; + out.y = m[13]; + out.z = m[14]; + return out; + }; + Mat4.getScaling = function getScaling(out, mat) { + var m = mat.m; + var m3 = m3_1.m; + var m00 = m3[0] = m[0]; + var m01 = m3[1] = m[1]; + var m02 = m3[2] = m[2]; + var m04 = m3[3] = m[4]; + var m05 = m3[4] = m[5]; + var m06 = m3[5] = m[6]; + var m08 = m3[6] = m[8]; + var m09 = m3[7] = m[9]; + var m10 = m3[8] = m[10]; + out.x = Math.sqrt(m00 * m00 + m01 * m01 + m02 * m02); + out.y = Math.sqrt(m04 * m04 + m05 * m05 + m06 * m06); + out.z = Math.sqrt(m08 * m08 + m09 * m09 + m10 * m10); + _mat["default"].determinant(m3_1) < 0 && (out.x *= -1); + return out; + }; + Mat4.getRotation = function getRotation(out, mat) { + var m = mat.m; + var trace = m[0] + m[5] + m[10]; + var S = 0; + if (trace > 0) { + S = 2 * Math.sqrt(trace + 1); + out.w = .25 * S; + out.x = (m[6] - m[9]) / S; + out.y = (m[8] - m[2]) / S; + out.z = (m[1] - m[4]) / S; + } else if (m[0] > m[5] && m[0] > m[10]) { + S = 2 * Math.sqrt(1 + m[0] - m[5] - m[10]); + out.w = (m[6] - m[9]) / S; + out.x = .25 * S; + out.y = (m[1] + m[4]) / S; + out.z = (m[8] + m[2]) / S; + } else if (m[5] > m[10]) { + S = 2 * Math.sqrt(1 + m[5] - m[0] - m[10]); + out.w = (m[8] - m[2]) / S; + out.x = (m[1] + m[4]) / S; + out.y = .25 * S; + out.z = (m[6] + m[9]) / S; + } else { + S = 2 * Math.sqrt(1 + m[10] - m[0] - m[5]); + out.w = (m[1] - m[4]) / S; + out.x = (m[8] + m[2]) / S; + out.y = (m[6] + m[9]) / S; + out.z = .25 * S; + } + return out; + }; + Mat4.toRTS = function toRTS(mat, q, v, s) { + var m = mat.m; + var m3 = m3_1.m; + s.x = _vec["default"].set(v3_1, m[0], m[1], m[2]).mag(); + m3[0] = m[0] / s.x; + m3[1] = m[1] / s.x; + m3[2] = m[2] / s.x; + s.y = _vec["default"].set(v3_1, m[4], m[5], m[6]).mag(); + m3[3] = m[4] / s.y; + m3[4] = m[5] / s.y; + m3[5] = m[6] / s.y; + s.z = _vec["default"].set(v3_1, m[8], m[9], m[10]).mag(); + m3[6] = m[8] / s.z; + m3[7] = m[9] / s.z; + m3[8] = m[10] / s.z; + var det = _mat["default"].determinant(m3_1); + if (det < 0) { + s.x *= -1; + m3[0] *= -1; + m3[1] *= -1; + m3[2] *= -1; + } + _quat["default"].fromMat3(q, m3_1); + _vec["default"].set(v, m[12], m[13], m[14]); + }; + Mat4.fromRTS = function fromRTS(out, q, v, s) { + var x = q.x, y = q.y, z = q.z, w = q.w; + var x2 = x + x; + var y2 = y + y; + var z2 = z + z; + var xx = x * x2; + var xy = x * y2; + var xz = x * z2; + var yy = y * y2; + var yz = y * z2; + var zz = z * z2; + var wx = w * x2; + var wy = w * y2; + var wz = w * z2; + var sx = s.x; + var sy = s.y; + var sz = s.z; + var m = out.m; + m[0] = (1 - (yy + zz)) * sx; + m[1] = (xy + wz) * sx; + m[2] = (xz - wy) * sx; + m[3] = 0; + m[4] = (xy - wz) * sy; + m[5] = (1 - (xx + zz)) * sy; + m[6] = (yz + wx) * sy; + m[7] = 0; + m[8] = (xz + wy) * sz; + m[9] = (yz - wx) * sz; + m[10] = (1 - (xx + yy)) * sz; + m[11] = 0; + m[12] = v.x; + m[13] = v.y; + m[14] = v.z; + m[15] = 1; + return out; + }; + Mat4.fromRTSOrigin = function fromRTSOrigin(out, q, v, s, o) { + var x = q.x, y = q.y, z = q.z, w = q.w; + var x2 = x + x; + var y2 = y + y; + var z2 = z + z; + var xx = x * x2; + var xy = x * y2; + var xz = x * z2; + var yy = y * y2; + var yz = y * z2; + var zz = z * z2; + var wx = w * x2; + var wy = w * y2; + var wz = w * z2; + var sx = s.x; + var sy = s.y; + var sz = s.z; + var ox = o.x; + var oy = o.y; + var oz = o.z; + var m = out.m; + m[0] = (1 - (yy + zz)) * sx; + m[1] = (xy + wz) * sx; + m[2] = (xz - wy) * sx; + m[3] = 0; + m[4] = (xy - wz) * sy; + m[5] = (1 - (xx + zz)) * sy; + m[6] = (yz + wx) * sy; + m[7] = 0; + m[8] = (xz + wy) * sz; + m[9] = (yz - wx) * sz; + m[10] = (1 - (xx + yy)) * sz; + m[11] = 0; + m[12] = v.x + ox - (m[0] * ox + m[4] * oy + m[8] * oz); + m[13] = v.y + oy - (m[1] * ox + m[5] * oy + m[9] * oz); + m[14] = v.z + oz - (m[2] * ox + m[6] * oy + m[10] * oz); + m[15] = 1; + return out; + }; + Mat4.fromQuat = function fromQuat(out, q) { + var x = q.x, y = q.y, z = q.z, w = q.w; + var x2 = x + x; + var y2 = y + y; + var z2 = z + z; + var xx = x * x2; + var yx = y * x2; + var yy = y * y2; + var zx = z * x2; + var zy = z * y2; + var zz = z * z2; + var wx = w * x2; + var wy = w * y2; + var wz = w * z2; + var m = out.m; + m[0] = 1 - yy - zz; + m[1] = yx + wz; + m[2] = zx - wy; + m[3] = 0; + m[4] = yx - wz; + m[5] = 1 - xx - zz; + m[6] = zy + wx; + m[7] = 0; + m[8] = zx + wy; + m[9] = zy - wx; + m[10] = 1 - xx - yy; + m[11] = 0; + m[12] = 0; + m[13] = 0; + m[14] = 0; + m[15] = 1; + return out; + }; + Mat4.frustum = function frustum(out, left, right, bottom, top, near, far) { + var rl = 1 / (right - left); + var tb = 1 / (top - bottom); + var nf = 1 / (near - far); + var m = out.m; + m[0] = 2 * near * rl; + m[1] = 0; + m[2] = 0; + m[3] = 0; + m[4] = 0; + m[5] = 2 * near * tb; + m[6] = 0; + m[7] = 0; + m[8] = (right + left) * rl; + m[9] = (top + bottom) * tb; + m[10] = (far + near) * nf; + m[11] = -1; + m[12] = 0; + m[13] = 0; + m[14] = far * near * 2 * nf; + m[15] = 0; + return out; + }; + Mat4.perspective = function perspective(out, fovy, aspect, near, far) { + var f = 1 / Math.tan(fovy / 2); + var nf = 1 / (near - far); + var m = out.m; + m[0] = f / aspect; + m[1] = 0; + m[2] = 0; + m[3] = 0; + m[4] = 0; + m[5] = f; + m[6] = 0; + m[7] = 0; + m[8] = 0; + m[9] = 0; + m[10] = (far + near) * nf; + m[11] = -1; + m[12] = 0; + m[13] = 0; + m[14] = 2 * far * near * nf; + m[15] = 0; + return out; + }; + Mat4.ortho = function ortho(out, left, right, bottom, top, near, far) { + var lr = 1 / (left - right); + var bt = 1 / (bottom - top); + var nf = 1 / (near - far); + var m = out.m; + m[0] = -2 * lr; + m[1] = 0; + m[2] = 0; + m[3] = 0; + m[4] = 0; + m[5] = -2 * bt; + m[6] = 0; + m[7] = 0; + m[8] = 0; + m[9] = 0; + m[10] = 2 * nf; + m[11] = 0; + m[12] = (left + right) * lr; + m[13] = (top + bottom) * bt; + m[14] = (far + near) * nf; + m[15] = 1; + return out; + }; + Mat4.lookAt = function lookAt(out, eye, center, up) { + var eyex = eye.x; + var eyey = eye.y; + var eyez = eye.z; + var upx = up.x; + var upy = up.y; + var upz = up.z; + var centerx = center.x; + var centery = center.y; + var centerz = center.z; + var z0 = eyex - centerx; + var z1 = eyey - centery; + var z2 = eyez - centerz; + var len = 1 / Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2); + z0 *= len; + z1 *= len; + z2 *= len; + var x0 = upy * z2 - upz * z1; + var x1 = upz * z0 - upx * z2; + var x2 = upx * z1 - upy * z0; + len = 1 / Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2); + x0 *= len; + x1 *= len; + x2 *= len; + var y0 = z1 * x2 - z2 * x1; + var y1 = z2 * x0 - z0 * x2; + var y2 = z0 * x1 - z1 * x0; + var m = out.m; + m[0] = x0; + m[1] = y0; + m[2] = z0; + m[3] = 0; + m[4] = x1; + m[5] = y1; + m[6] = z1; + m[7] = 0; + m[8] = x2; + m[9] = y2; + m[10] = z2; + m[11] = 0; + m[12] = -(x0 * eyex + x1 * eyey + x2 * eyez); + m[13] = -(y0 * eyex + y1 * eyey + y2 * eyez); + m[14] = -(z0 * eyex + z1 * eyey + z2 * eyez); + m[15] = 1; + return out; + }; + Mat4.inverseTranspose = function inverseTranspose(out, a) { + var m = a.m; + _a00 = m[0]; + _a01 = m[1]; + _a02 = m[2]; + _a03 = m[3]; + _a10 = m[4]; + _a11 = m[5]; + _a12 = m[6]; + _a13 = m[7]; + _a20 = m[8]; + _a21 = m[9]; + _a22 = m[10]; + _a23 = m[11]; + _a30 = m[12]; + _a31 = m[13]; + _a32 = m[14]; + _a33 = m[15]; + var b00 = _a00 * _a11 - _a01 * _a10; + var b01 = _a00 * _a12 - _a02 * _a10; + var b02 = _a00 * _a13 - _a03 * _a10; + var b03 = _a01 * _a12 - _a02 * _a11; + var b04 = _a01 * _a13 - _a03 * _a11; + var b05 = _a02 * _a13 - _a03 * _a12; + var b06 = _a20 * _a31 - _a21 * _a30; + var b07 = _a20 * _a32 - _a22 * _a30; + var b08 = _a20 * _a33 - _a23 * _a30; + var b09 = _a21 * _a32 - _a22 * _a31; + var b10 = _a21 * _a33 - _a23 * _a31; + var b11 = _a22 * _a33 - _a23 * _a32; + var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06; + if (!det) return null; + det = 1 / det; + m = out.m; + m[0] = (_a11 * b11 - _a12 * b10 + _a13 * b09) * det; + m[1] = (_a12 * b08 - _a10 * b11 - _a13 * b07) * det; + m[2] = (_a10 * b10 - _a11 * b08 + _a13 * b06) * det; + m[3] = 0; + m[4] = (_a02 * b10 - _a01 * b11 - _a03 * b09) * det; + m[5] = (_a00 * b11 - _a02 * b08 + _a03 * b07) * det; + m[6] = (_a01 * b08 - _a00 * b10 - _a03 * b06) * det; + m[7] = 0; + m[8] = (_a31 * b05 - _a32 * b04 + _a33 * b03) * det; + m[9] = (_a32 * b02 - _a30 * b05 - _a33 * b01) * det; + m[10] = (_a30 * b04 - _a31 * b02 + _a33 * b00) * det; + m[11] = 0; + m[12] = 0; + m[13] = 0; + m[14] = 0; + m[15] = 1; + return out; + }; + Mat4.add = function add(out, a, b) { + var m = out.m, am = a.m, bm = b.m; + m[0] = am[0] + bm[0]; + m[1] = am[1] + bm[1]; + m[2] = am[2] + bm[2]; + m[3] = am[3] + bm[3]; + m[4] = am[4] + bm[4]; + m[5] = am[5] + bm[5]; + m[6] = am[6] + bm[6]; + m[7] = am[7] + bm[7]; + m[8] = am[8] + bm[8]; + m[9] = am[9] + bm[9]; + m[10] = am[10] + bm[10]; + m[11] = am[11] + bm[11]; + m[12] = am[12] + bm[12]; + m[13] = am[13] + bm[13]; + m[14] = am[14] + bm[14]; + m[15] = am[15] + bm[15]; + return out; + }; + Mat4.subtract = function subtract(out, a, b) { + var m = out.m, am = a.m, bm = b.m; + m[0] = am[0] - bm[0]; + m[1] = am[1] - bm[1]; + m[2] = am[2] - bm[2]; + m[3] = am[3] - bm[3]; + m[4] = am[4] - bm[4]; + m[5] = am[5] - bm[5]; + m[6] = am[6] - bm[6]; + m[7] = am[7] - bm[7]; + m[8] = am[8] - bm[8]; + m[9] = am[9] - bm[9]; + m[10] = am[10] - bm[10]; + m[11] = am[11] - bm[11]; + m[12] = am[12] - bm[12]; + m[13] = am[13] - bm[13]; + m[14] = am[14] - bm[14]; + m[15] = am[15] - bm[15]; + return out; + }; + Mat4.multiplyScalar = function multiplyScalar(out, a, b) { + var m = out.m, am = a.m; + m[0] = am[0] * b; + m[1] = am[1] * b; + m[2] = am[2] * b; + m[3] = am[3] * b; + m[4] = am[4] * b; + m[5] = am[5] * b; + m[6] = am[6] * b; + m[7] = am[7] * b; + m[8] = am[8] * b; + m[9] = am[9] * b; + m[10] = am[10] * b; + m[11] = am[11] * b; + m[12] = am[12] * b; + m[13] = am[13] * b; + m[14] = am[14] * b; + m[15] = am[15] * b; + return out; + }; + Mat4.multiplyScalarAndAdd = function multiplyScalarAndAdd(out, a, b, scale) { + var m = out.m, am = a.m, bm = b.m; + m[0] = am[0] + bm[0] * scale; + m[1] = am[1] + bm[1] * scale; + m[2] = am[2] + bm[2] * scale; + m[3] = am[3] + bm[3] * scale; + m[4] = am[4] + bm[4] * scale; + m[5] = am[5] + bm[5] * scale; + m[6] = am[6] + bm[6] * scale; + m[7] = am[7] + bm[7] * scale; + m[8] = am[8] + bm[8] * scale; + m[9] = am[9] + bm[9] * scale; + m[10] = am[10] + bm[10] * scale; + m[11] = am[11] + bm[11] * scale; + m[12] = am[12] + bm[12] * scale; + m[13] = am[13] + bm[13] * scale; + m[14] = am[14] + bm[14] * scale; + m[15] = am[15] + bm[15] * scale; + return out; + }; + Mat4.strictEquals = function strictEquals(a, b) { + var am = a.m, bm = b.m; + return am[0] === bm[0] && am[1] === bm[1] && am[2] === bm[2] && am[3] === bm[3] && am[4] === bm[4] && am[5] === bm[5] && am[6] === bm[6] && am[7] === bm[7] && am[8] === bm[8] && am[9] === bm[9] && am[10] === bm[10] && am[11] === bm[11] && am[12] === bm[12] && am[13] === bm[13] && am[14] === bm[14] && am[15] === bm[15]; + }; + Mat4.equals = function equals(a, b, epsilon) { + void 0 === epsilon && (epsilon = _utils.EPSILON); + var am = a.m, bm = b.m; + return Math.abs(am[0] - bm[0]) <= epsilon * Math.max(1, Math.abs(am[0]), Math.abs(bm[0])) && Math.abs(am[1] - bm[1]) <= epsilon * Math.max(1, Math.abs(am[1]), Math.abs(bm[1])) && Math.abs(am[2] - bm[2]) <= epsilon * Math.max(1, Math.abs(am[2]), Math.abs(bm[2])) && Math.abs(am[3] - bm[3]) <= epsilon * Math.max(1, Math.abs(am[3]), Math.abs(bm[3])) && Math.abs(am[4] - bm[4]) <= epsilon * Math.max(1, Math.abs(am[4]), Math.abs(bm[4])) && Math.abs(am[5] - bm[5]) <= epsilon * Math.max(1, Math.abs(am[5]), Math.abs(bm[5])) && Math.abs(am[6] - bm[6]) <= epsilon * Math.max(1, Math.abs(am[6]), Math.abs(bm[6])) && Math.abs(am[7] - bm[7]) <= epsilon * Math.max(1, Math.abs(am[7]), Math.abs(bm[7])) && Math.abs(am[8] - bm[8]) <= epsilon * Math.max(1, Math.abs(am[8]), Math.abs(bm[8])) && Math.abs(am[9] - bm[9]) <= epsilon * Math.max(1, Math.abs(am[9]), Math.abs(bm[9])) && Math.abs(am[10] - bm[10]) <= epsilon * Math.max(1, Math.abs(am[10]), Math.abs(bm[10])) && Math.abs(am[11] - bm[11]) <= epsilon * Math.max(1, Math.abs(am[11]), Math.abs(bm[11])) && Math.abs(am[12] - bm[12]) <= epsilon * Math.max(1, Math.abs(am[12]), Math.abs(bm[12])) && Math.abs(am[13] - bm[13]) <= epsilon * Math.max(1, Math.abs(am[13]), Math.abs(bm[13])) && Math.abs(am[14] - bm[14]) <= epsilon * Math.max(1, Math.abs(am[14]), Math.abs(bm[14])) && Math.abs(am[15] - bm[15]) <= epsilon * Math.max(1, Math.abs(am[15]), Math.abs(bm[15])); + }; + Mat4.adjoint = function adjoint(out, a) { + var am = a.m, outm = out.m; + var a00 = am[0], a01 = am[1], a02 = am[2], a03 = am[3], a10 = am[4], a11 = am[5], a12 = am[6], a13 = am[7], a20 = am[8], a21 = am[9], a22 = am[10], a23 = am[11], a30 = am[12], a31 = am[13], a32 = am[14], a33 = am[15]; + outm[0] = a11 * (a22 * a33 - a23 * a32) - a21 * (a12 * a33 - a13 * a32) + a31 * (a12 * a23 - a13 * a22); + outm[1] = -(a01 * (a22 * a33 - a23 * a32) - a21 * (a02 * a33 - a03 * a32) + a31 * (a02 * a23 - a03 * a22)); + outm[2] = a01 * (a12 * a33 - a13 * a32) - a11 * (a02 * a33 - a03 * a32) + a31 * (a02 * a13 - a03 * a12); + outm[3] = -(a01 * (a12 * a23 - a13 * a22) - a11 * (a02 * a23 - a03 * a22) + a21 * (a02 * a13 - a03 * a12)); + outm[4] = -(a10 * (a22 * a33 - a23 * a32) - a20 * (a12 * a33 - a13 * a32) + a30 * (a12 * a23 - a13 * a22)); + outm[5] = a00 * (a22 * a33 - a23 * a32) - a20 * (a02 * a33 - a03 * a32) + a30 * (a02 * a23 - a03 * a22); + outm[6] = -(a00 * (a12 * a33 - a13 * a32) - a10 * (a02 * a33 - a03 * a32) + a30 * (a02 * a13 - a03 * a12)); + outm[7] = a00 * (a12 * a23 - a13 * a22) - a10 * (a02 * a23 - a03 * a22) + a20 * (a02 * a13 - a03 * a12); + outm[8] = a10 * (a21 * a33 - a23 * a31) - a20 * (a11 * a33 - a13 * a31) + a30 * (a11 * a23 - a13 * a21); + outm[9] = -(a00 * (a21 * a33 - a23 * a31) - a20 * (a01 * a33 - a03 * a31) + a30 * (a01 * a23 - a03 * a21)); + outm[10] = a00 * (a11 * a33 - a13 * a31) - a10 * (a01 * a33 - a03 * a31) + a30 * (a01 * a13 - a03 * a11); + outm[11] = -(a00 * (a11 * a23 - a13 * a21) - a10 * (a01 * a23 - a03 * a21) + a20 * (a01 * a13 - a03 * a11)); + outm[12] = -(a10 * (a21 * a32 - a22 * a31) - a20 * (a11 * a32 - a12 * a31) + a30 * (a11 * a22 - a12 * a21)); + outm[13] = a00 * (a21 * a32 - a22 * a31) - a20 * (a01 * a32 - a02 * a31) + a30 * (a01 * a22 - a02 * a21); + outm[14] = -(a00 * (a11 * a32 - a12 * a31) - a10 * (a01 * a32 - a02 * a31) + a30 * (a01 * a12 - a02 * a11)); + outm[15] = a00 * (a11 * a22 - a12 * a21) - a10 * (a01 * a22 - a02 * a21) + a20 * (a01 * a12 - a02 * a11); + return out; + }; + Mat4.toArray = function toArray(out, mat, ofs) { + void 0 === ofs && (ofs = 0); + var m = mat.m; + for (var i = 0; i < 16; i++) out[ofs + i] = m[i]; + return out; + }; + Mat4.fromArray = function fromArray(out, arr, ofs) { + void 0 === ofs && (ofs = 0); + var m = out.m; + for (var i = 0; i < 16; i++) m[i] = arr[ofs + i]; + return out; + }; + function Mat4(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) { + var _this; + void 0 === m00 && (m00 = 1); + void 0 === m01 && (m01 = 0); + void 0 === m02 && (m02 = 0); + void 0 === m03 && (m03 = 0); + void 0 === m10 && (m10 = 0); + void 0 === m11 && (m11 = 1); + void 0 === m12 && (m12 = 0); + void 0 === m13 && (m13 = 0); + void 0 === m20 && (m20 = 0); + void 0 === m21 && (m21 = 0); + void 0 === m22 && (m22 = 1); + void 0 === m23 && (m23 = 0); + void 0 === m30 && (m30 = 0); + void 0 === m31 && (m31 = 0); + void 0 === m32 && (m32 = 0); + void 0 === m33 && (m33 = 1); + _this = _ValueType.call(this) || this; + _this.m = void 0; + if (m00 instanceof _utils.FLOAT_ARRAY_TYPE) _this.m = m00; else { + _this.m = new _utils.FLOAT_ARRAY_TYPE(16); + var tm = _this.m; + tm[0] = m00; + tm[1] = m01; + tm[2] = m02; + tm[3] = m03; + tm[4] = m10; + tm[5] = m11; + tm[6] = m12; + tm[7] = m13; + tm[8] = m20; + tm[9] = m21; + tm[10] = m22; + tm[11] = m23; + tm[12] = m30; + tm[13] = m31; + tm[14] = m32; + tm[15] = m33; + } + return _this; + } + _proto.clone = function clone() { + var t = this; + var tm = t.m; + return new Mat4(tm[0], tm[1], tm[2], tm[3], tm[4], tm[5], tm[6], tm[7], tm[8], tm[9], tm[10], tm[11], tm[12], tm[13], tm[14], tm[15]); + }; + _proto.set = function set(s) { + var t = this; + var tm = t.m, sm = s.m; + tm[0] = sm[0]; + tm[1] = sm[1]; + tm[2] = sm[2]; + tm[3] = sm[3]; + tm[4] = sm[4]; + tm[5] = sm[5]; + tm[6] = sm[6]; + tm[7] = sm[7]; + tm[8] = sm[8]; + tm[9] = sm[9]; + tm[10] = sm[10]; + tm[11] = sm[11]; + tm[12] = sm[12]; + tm[13] = sm[13]; + tm[14] = sm[14]; + tm[15] = sm[15]; + return this; + }; + _proto.equals = function equals(other) { + return Mat4.strictEquals(this, other); + }; + _proto.fuzzyEquals = function fuzzyEquals(other) { + return Mat4.equals(this, other); + }; + _proto.toString = function toString() { + var tm = this.m; + return tm ? "[\n" + tm[0] + ", " + tm[1] + ", " + tm[2] + ", " + tm[3] + ",\n" + tm[4] + ", " + tm[5] + ", " + tm[6] + ", " + tm[7] + ",\n" + tm[8] + ", " + tm[9] + ", " + tm[10] + ", " + tm[11] + ",\n" + tm[12] + ", " + tm[13] + ", " + tm[14] + ", " + tm[15] + "\n]" : "[\n1, 0, 0, 0\n0, 1, 0, 0\n0, 0, 1, 0\n0, 0, 0, 1\n]"; + }; + _proto.identity = function identity() { + return Mat4.identity(this); + }; + _proto.transpose = function transpose(out) { + out = out || new Mat4(); + return Mat4.transpose(out, this); + }; + _proto.invert = function invert(out) { + out = out || new Mat4(); + return Mat4.invert(out, this); + }; + _proto.adjoint = function adjoint(out) { + out = out || new Mat4(); + return Mat4.adjoint(out, this); + }; + _proto.determinant = function determinant() { + return Mat4.determinant(this); + }; + _proto.add = function add(other, out) { + out = out || new Mat4(); + return Mat4.add(out, this, other); + }; + _proto.subtract = function subtract(other) { + return Mat4.subtract(this, this, other); + }; + _proto.multiply = function multiply(other) { + return Mat4.multiply(this, this, other); + }; + _proto.multiplyScalar = function multiplyScalar(number) { + return Mat4.multiplyScalar(this, this, number); + }; + _proto.translate = function translate(v, out) { + out = out || new Mat4(); + return Mat4.translate(out, this, v); + }; + _proto.scale = function scale(v, out) { + out = out || new Mat4(); + return Mat4.scale(out, this, v); + }; + _proto.rotate = function rotate(rad, axis, out) { + out = out || new Mat4(); + return Mat4.rotate(out, this, rad, axis); + }; + _proto.getTranslation = function getTranslation(out) { + out = out || new _vec["default"](); + return Mat4.getTranslation(out, this); + }; + _proto.getScale = function getScale(out) { + out = out || new _vec["default"](); + return Mat4.getScaling(out, this); + }; + _proto.getRotation = function getRotation(out) { + out = out || new _quat["default"](); + return Mat4.getRotation(out, this); + }; + _proto.fromRTS = function fromRTS(q, v, s) { + return Mat4.fromRTS(this, q, v, s); + }; + _proto.fromQuat = function fromQuat(quat) { + return Mat4.fromQuat(this, quat); + }; + return Mat4; + })(_valueType["default"]); + exports["default"] = Mat4; + Mat4.mul = Mat4.multiply; + Mat4.sub = Mat4.subtract; + Mat4.IDENTITY = Object.freeze(new Mat4()); + var v3_1 = new _vec["default"](); + var m3_1 = new _mat["default"](); + _CCClass["default"].fastDefine("cc.Mat4", Mat4, { + m00: 1, + m01: 0, + m02: 0, + m03: 0, + m04: 0, + m05: 1, + m06: 0, + m07: 0, + m08: 0, + m09: 0, + m10: 1, + m11: 0, + m12: 0, + m13: 0, + m14: 0, + m15: 1 + }); + var _loop = function _loop(i) { + Object.defineProperty(Mat4.prototype, "m" + i, { + get: function get() { + return this.m[i]; + }, + set: function set(value) { + this.m[i] = value; + } + }); + }; + for (var i = 0; i < 16; i++) _loop(i); + cc.mat4 = function(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) { + var mat = new Mat4(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33); + void 0 === m00 && Mat4.identity(mat); + return mat; + }; + cc.Mat4 = Mat4; + module.exports = exports["default"]; + }), { + "../platform/CCClass": 121, + "./mat3": 221, + "./quat": 223, + "./utils": 227, + "./value-type": 228, + "./vec3": 230 + } ], + 223: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _valueType = _interopRequireDefault(require("./value-type")); + var _CCClass = _interopRequireDefault(require("../platform/CCClass")); + var _vec = _interopRequireDefault(require("./vec3")); + var _mat = _interopRequireDefault(require("./mat3")); + var _utils = require("./utils"); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var _x = 0; + var _y = 0; + var _z = 0; + var _w = 0; + var Quat = (function(_ValueType) { + _inheritsLoose(Quat, _ValueType); + var _proto = Quat.prototype; + _proto.mul = function mul(other, out) { + return Quat.multiply(out || new Quat(), this, other); + }; + Quat.clone = function clone(a) { + return new Quat(a.x, a.y, a.z, a.w); + }; + Quat.copy = function copy(out, a) { + out.x = a.x; + out.y = a.y; + out.z = a.z; + out.w = a.w; + return out; + }; + Quat.set = function set(out, x, y, z, w) { + out.x = x; + out.y = y; + out.z = z; + out.w = w; + return out; + }; + Quat.identity = function identity(out) { + out.x = 0; + out.y = 0; + out.z = 0; + out.w = 1; + return out; + }; + Quat.rotationTo = function rotationTo(out, a, b) { + var dot = _vec["default"].dot(a, b); + if (dot < -.999999) { + _vec["default"].cross(v3_1, _vec["default"].RIGHT, a); + v3_1.mag() < 1e-6 && _vec["default"].cross(v3_1, _vec["default"].UP, a); + _vec["default"].normalize(v3_1, v3_1); + Quat.fromAxisAngle(out, v3_1, Math.PI); + return out; + } + if (dot > .999999) { + out.x = 0; + out.y = 0; + out.z = 0; + out.w = 1; + return out; + } + _vec["default"].cross(v3_1, a, b); + out.x = v3_1.x; + out.y = v3_1.y; + out.z = v3_1.z; + out.w = 1 + dot; + return Quat.normalize(out, out); + }; + Quat.getAxisAngle = function getAxisAngle(outAxis, q) { + var rad = 2 * Math.acos(q.w); + var s = Math.sin(rad / 2); + if (0 !== s) { + outAxis.x = q.x / s; + outAxis.y = q.y / s; + outAxis.z = q.z / s; + } else { + outAxis.x = 1; + outAxis.y = 0; + outAxis.z = 0; + } + return rad; + }; + Quat.multiply = function multiply(out, a, b) { + _x = a.x * b.w + a.w * b.x + a.y * b.z - a.z * b.y; + _y = a.y * b.w + a.w * b.y + a.z * b.x - a.x * b.z; + _z = a.z * b.w + a.w * b.z + a.x * b.y - a.y * b.x; + _w = a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z; + out.x = _x; + out.y = _y; + out.z = _z; + out.w = _w; + return out; + }; + Quat.multiplyScalar = function multiplyScalar(out, a, b) { + out.x = a.x * b; + out.y = a.y * b; + out.z = a.z * b; + out.w = a.w * b; + return out; + }; + Quat.scaleAndAdd = function scaleAndAdd(out, a, b, scale) { + out.x = a.x + b.x * scale; + out.y = a.y + b.y * scale; + out.z = a.z + b.z * scale; + out.w = a.w + b.w * scale; + return out; + }; + Quat.rotateX = function rotateX(out, a, rad) { + rad *= .5; + var bx = Math.sin(rad); + var bw = Math.cos(rad); + _x = a.x * bw + a.w * bx; + _y = a.y * bw + a.z * bx; + _z = a.z * bw - a.y * bx; + _w = a.w * bw - a.x * bx; + out.x = _x; + out.y = _y; + out.z = _z; + out.w = _w; + return out; + }; + Quat.rotateY = function rotateY(out, a, rad) { + rad *= .5; + var by = Math.sin(rad); + var bw = Math.cos(rad); + _x = a.x * bw - a.z * by; + _y = a.y * bw + a.w * by; + _z = a.z * bw + a.x * by; + _w = a.w * bw - a.y * by; + out.x = _x; + out.y = _y; + out.z = _z; + out.w = _w; + return out; + }; + Quat.rotateZ = function rotateZ(out, a, rad) { + rad *= .5; + var bz = Math.sin(rad); + var bw = Math.cos(rad); + _x = a.x * bw + a.y * bz; + _y = a.y * bw - a.x * bz; + _z = a.z * bw + a.w * bz; + _w = a.w * bw - a.z * bz; + out.x = _x; + out.y = _y; + out.z = _z; + out.w = _w; + return out; + }; + Quat.rotateAround = function rotateAround(out, rot, axis, rad) { + Quat.invert(qt_1, rot); + _vec["default"].transformQuat(v3_1, axis, qt_1); + Quat.fromAxisAngle(qt_1, v3_1, rad); + Quat.multiply(out, rot, qt_1); + return out; + }; + Quat.rotateAroundLocal = function rotateAroundLocal(out, rot, axis, rad) { + Quat.fromAxisAngle(qt_1, axis, rad); + Quat.multiply(out, rot, qt_1); + return out; + }; + Quat.calculateW = function calculateW(out, a) { + out.x = a.x; + out.y = a.y; + out.z = a.z; + out.w = Math.sqrt(Math.abs(1 - a.x * a.x - a.y * a.y - a.z * a.z)); + return out; + }; + Quat.dot = function dot(a, b) { + return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w; + }; + Quat.lerp = function lerp(out, a, b, t) { + out.x = a.x + t * (b.x - a.x); + out.y = a.y + t * (b.y - a.y); + out.z = a.z + t * (b.z - a.z); + out.w = a.w + t * (b.w - a.w); + return out; + }; + Quat.slerp = function slerp(out, a, b, t) { + var scale0 = 0; + var scale1 = 0; + var cosom = a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w; + if (cosom < 0) { + cosom = -cosom; + b.x = -b.x; + b.y = -b.y; + b.z = -b.z; + b.w = -b.w; + } + if (1 - cosom > 1e-6) { + var omega = Math.acos(cosom); + var sinom = Math.sin(omega); + scale0 = Math.sin((1 - t) * omega) / sinom; + scale1 = Math.sin(t * omega) / sinom; + } else { + scale0 = 1 - t; + scale1 = t; + } + out.x = scale0 * a.x + scale1 * b.x; + out.y = scale0 * a.y + scale1 * b.y; + out.z = scale0 * a.z + scale1 * b.z; + out.w = scale0 * a.w + scale1 * b.w; + return out; + }; + Quat.sqlerp = function sqlerp(out, a, b, c, d, t) { + Quat.slerp(qt_1, a, d, t); + Quat.slerp(qt_2, b, c, t); + Quat.slerp(out, qt_1, qt_2, 2 * t * (1 - t)); + return out; + }; + Quat.invert = function invert(out, a) { + var dot = a.x * a.x + a.y * a.y + a.z * a.z + a.w * a.w; + var invDot = dot ? 1 / dot : 0; + out.x = -a.x * invDot; + out.y = -a.y * invDot; + out.z = -a.z * invDot; + out.w = a.w * invDot; + return out; + }; + Quat.conjugate = function conjugate(out, a) { + out.x = -a.x; + out.y = -a.y; + out.z = -a.z; + out.w = a.w; + return out; + }; + Quat.len = function len(a) { + return Math.sqrt(a.x * a.x + a.y * a.y + a.z * a.z + a.w * a.w); + }; + Quat.lengthSqr = function lengthSqr(a) { + return a.x * a.x + a.y * a.y + a.z * a.z + a.w * a.w; + }; + Quat.normalize = function normalize(out, a) { + var len = a.x * a.x + a.y * a.y + a.z * a.z + a.w * a.w; + if (len > 0) { + len = 1 / Math.sqrt(len); + out.x = a.x * len; + out.y = a.y * len; + out.z = a.z * len; + out.w = a.w * len; + } + return out; + }; + Quat.fromAxes = function fromAxes(out, xAxis, yAxis, zAxis) { + _mat["default"].set(m3_1, xAxis.x, xAxis.y, xAxis.z, yAxis.x, yAxis.y, yAxis.z, zAxis.x, zAxis.y, zAxis.z); + return Quat.normalize(out, Quat.fromMat3(out, m3_1)); + }; + Quat.fromViewUp = function fromViewUp(out, view, up) { + _mat["default"].fromViewUp(m3_1, view, up); + return Quat.normalize(out, Quat.fromMat3(out, m3_1)); + }; + Quat.fromAxisAngle = function fromAxisAngle(out, axis, rad) { + rad *= .5; + var s = Math.sin(rad); + out.x = s * axis.x; + out.y = s * axis.y; + out.z = s * axis.z; + out.w = Math.cos(rad); + return out; + }; + Quat.fromAngleZ = function fromAngleZ(out, z) { + z *= halfToRad; + out.x = out.y = 0; + out.z = Math.sin(z); + out.w = Math.cos(z); + return out; + }; + Quat.fromMat3 = function fromMat3(out, mat) { + var m = mat.m; + var m00 = m[0], m10 = m[1], m20 = m[2], m01 = m[3], m11 = m[4], m21 = m[5], m02 = m[6], m12 = m[7], m22 = m[8]; + var trace = m00 + m11 + m22; + if (trace > 0) { + var s = .5 / Math.sqrt(trace + 1); + out.w = .25 / s; + out.x = (m21 - m12) * s; + out.y = (m02 - m20) * s; + out.z = (m10 - m01) * s; + } else if (m00 > m11 && m00 > m22) { + var _s = 2 * Math.sqrt(1 + m00 - m11 - m22); + out.w = (m21 - m12) / _s; + out.x = .25 * _s; + out.y = (m01 + m10) / _s; + out.z = (m02 + m20) / _s; + } else if (m11 > m22) { + var _s2 = 2 * Math.sqrt(1 + m11 - m00 - m22); + out.w = (m02 - m20) / _s2; + out.x = (m01 + m10) / _s2; + out.y = .25 * _s2; + out.z = (m12 + m21) / _s2; + } else { + var _s3 = 2 * Math.sqrt(1 + m22 - m00 - m11); + out.w = (m10 - m01) / _s3; + out.x = (m02 + m20) / _s3; + out.y = (m12 + m21) / _s3; + out.z = .25 * _s3; + } + return out; + }; + Quat.fromEuler = function fromEuler(out, x, y, z) { + x *= halfToRad; + y *= halfToRad; + z *= halfToRad; + var sx = Math.sin(x); + var cx = Math.cos(x); + var sy = Math.sin(y); + var cy = Math.cos(y); + var sz = Math.sin(z); + var cz = Math.cos(z); + out.x = sx * cy * cz + cx * sy * sz; + out.y = cx * sy * cz + sx * cy * sz; + out.z = cx * cy * sz - sx * sy * cz; + out.w = cx * cy * cz - sx * sy * sz; + return out; + }; + Quat.toAxisX = function toAxisX(out, q) { + var fy = 2 * q.y; + var fz = 2 * q.z; + out.x = 1 - fy * q.y - fz * q.z; + out.y = fy * q.x + fz * q.w; + out.z = fz * q.x + fy * q.w; + return out; + }; + Quat.toAxisY = function toAxisY(out, q) { + var fx = 2 * q.x; + var fy = 2 * q.y; + var fz = 2 * q.z; + out.x = fy * q.x - fz * q.w; + out.y = 1 - fx * q.x - fz * q.z; + out.z = fz * q.y + fx * q.w; + return out; + }; + Quat.toAxisZ = function toAxisZ(out, q) { + var fx = 2 * q.x; + var fy = 2 * q.y; + var fz = 2 * q.z; + out.x = fz * q.x - fy * q.w; + out.y = fz * q.y - fx * q.w; + out.z = 1 - fx * q.x - fy * q.y; + return out; + }; + Quat.toEuler = function toEuler(out, q, outerZ) { + var x = q.x, y = q.y, z = q.z, w = q.w; + var bank = 0; + var heading = 0; + var attitude = 0; + var test = x * y + z * w; + if (test > .499999) { + bank = 0; + heading = (0, _utils.toDegree)(2 * Math.atan2(x, w)); + attitude = 90; + } else if (test < -.499999) { + bank = 0; + heading = -(0, _utils.toDegree)(2 * Math.atan2(x, w)); + attitude = -90; + } else { + var sqx = x * x; + var sqy = y * y; + var sqz = z * z; + bank = (0, _utils.toDegree)(Math.atan2(2 * x * w - 2 * y * z, 1 - 2 * sqx - 2 * sqz)); + heading = (0, _utils.toDegree)(Math.atan2(2 * y * w - 2 * x * z, 1 - 2 * sqy - 2 * sqz)); + attitude = (0, _utils.toDegree)(Math.asin(2 * test)); + if (outerZ) { + bank = -180 * Math.sign(bank + 1e-6) + bank; + heading = -180 * Math.sign(heading + 1e-6) + heading; + attitude = 180 * Math.sign(attitude + 1e-6) - attitude; + } + } + out.x = bank; + out.y = heading; + out.z = attitude; + return out; + }; + Quat.strictEquals = function strictEquals(a, b) { + return a.x === b.x && a.y === b.y && a.z === b.z && a.w === b.w; + }; + Quat.equals = function equals(a, b, epsilon) { + void 0 === epsilon && (epsilon = _utils.EPSILON); + return Math.abs(a.x - b.x) <= epsilon * Math.max(1, Math.abs(a.x), Math.abs(b.x)) && Math.abs(a.y - b.y) <= epsilon * Math.max(1, Math.abs(a.y), Math.abs(b.y)) && Math.abs(a.z - b.z) <= epsilon * Math.max(1, Math.abs(a.z), Math.abs(b.z)) && Math.abs(a.w - b.w) <= epsilon * Math.max(1, Math.abs(a.w), Math.abs(b.w)); + }; + Quat.toArray = function toArray(out, q, ofs) { + void 0 === ofs && (ofs = 0); + out[ofs + 0] = q.x; + out[ofs + 1] = q.y; + out[ofs + 2] = q.z; + out[ofs + 3] = q.w; + return out; + }; + Quat.fromArray = function fromArray(out, arr, ofs) { + void 0 === ofs && (ofs = 0); + out.x = arr[ofs + 0]; + out.y = arr[ofs + 1]; + out.z = arr[ofs + 2]; + out.w = arr[ofs + 3]; + return out; + }; + function Quat(x, y, z, w) { + var _this; + void 0 === x && (x = 0); + void 0 === y && (y = 0); + void 0 === z && (z = 0); + void 0 === w && (w = 1); + _this = _ValueType.call(this) || this; + _this.x = void 0; + _this.y = void 0; + _this.z = void 0; + _this.w = void 0; + if (x && "object" === typeof x) { + _this.x = x.x; + _this.y = x.y; + _this.z = x.z; + _this.w = x.w; + } else { + _this.x = x; + _this.y = y; + _this.z = z; + _this.w = w; + } + return _this; + } + _proto.clone = function clone() { + return new Quat(this.x, this.y, this.z, this.w); + }; + _proto.set = function set(newValue) { + this.x = newValue.x; + this.y = newValue.y; + this.z = newValue.z; + this.w = newValue.w; + return this; + }; + _proto.equals = function equals(other) { + return other && this.x === other.x && this.y === other.y && this.z === other.z && this.w === other.w; + }; + _proto.toEuler = function toEuler(out) { + return Quat.toEuler(out, this); + }; + _proto.fromEuler = function fromEuler(euler) { + return Quat.fromEuler(this, euler.x, euler.y, euler.z); + }; + _proto.lerp = function lerp(to, ratio, out) { + out = out || new Quat(); + Quat.slerp(out, this, to, ratio); + return out; + }; + _proto.multiply = function multiply(other) { + return Quat.multiply(this, this, other); + }; + _proto.rotateAround = function rotateAround(rot, axis, rad, out) { + out = out || new Quat(); + return Quat.rotateAround(out, rot, axis, rad); + }; + return Quat; + })(_valueType["default"]); + exports["default"] = Quat; + Quat.mul = Quat.multiply; + Quat.scale = Quat.multiplyScalar; + Quat.mag = Quat.len; + Quat.IDENTITY = Object.freeze(new Quat()); + var qt_1 = new Quat(); + var qt_2 = new Quat(); + var v3_1 = new _vec["default"](); + var m3_1 = new _mat["default"](); + var halfToRad = .5 * Math.PI / 180; + _CCClass["default"].fastDefine("cc.Quat", Quat, { + x: 0, + y: 0, + z: 0, + w: 1 + }); + cc.quat = function quat(x, y, z, w) { + return new Quat(x, y, z, w); + }; + cc.Quat = Quat; + module.exports = exports["default"]; + }), { + "../platform/CCClass": 121, + "./mat3": 221, + "./utils": 227, + "./value-type": 228, + "./vec3": 230 + } ], + 224: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _valueType = _interopRequireDefault(require("./value-type")); + var _CCClass = _interopRequireDefault(require("../platform/CCClass")); + var _vec = _interopRequireDefault(require("./vec2")); + var _size = _interopRequireDefault(require("./size")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var Rect = (function(_ValueType) { + _inheritsLoose(Rect, _ValueType); + Rect.fromMinMax = function fromMinMax(v1, v2) { + var min_x = Math.min(v1.x, v2.x); + var min_y = Math.min(v1.y, v2.y); + var max_x = Math.max(v1.x, v2.x); + var max_y = Math.max(v1.y, v2.y); + return new Rect(min_x, min_y, max_x - min_x, max_y - min_y); + }; + function Rect(x, y, w, h) { + var _this; + void 0 === x && (x = 0); + void 0 === y && (y = 0); + void 0 === w && (w = 0); + void 0 === h && (h = 0); + _this = _ValueType.call(this) || this; + _this.x = void 0; + _this.y = void 0; + _this.width = void 0; + _this.height = void 0; + if (x && "object" === typeof x) { + y = x.y; + w = x.width; + h = x.height; + x = x.x; + } + _this.x = x || 0; + _this.y = y || 0; + _this.width = w || 0; + _this.height = h || 0; + return _this; + } + var _proto = Rect.prototype; + _proto.clone = function clone() { + return new Rect(this.x, this.y, this.width, this.height); + }; + _proto.equals = function equals(other) { + return other && this.x === other.x && this.y === other.y && this.width === other.width && this.height === other.height; + }; + _proto.lerp = function lerp(to, ratio, out) { + out = out || new Rect(); + var x = this.x; + var y = this.y; + var width = this.width; + var height = this.height; + out.x = x + (to.x - x) * ratio; + out.y = y + (to.y - y) * ratio; + out.width = width + (to.width - width) * ratio; + out.height = height + (to.height - height) * ratio; + return out; + }; + _proto.set = function set(source) { + this.x = source.x; + this.y = source.y; + this.width = source.width; + this.height = source.height; + return this; + }; + _proto.intersects = function intersects(rect) { + var maxax = this.x + this.width, maxay = this.y + this.height, maxbx = rect.x + rect.width, maxby = rect.y + rect.height; + return !(maxax < rect.x || maxbx < this.x || maxay < rect.y || maxby < this.y); + }; + _proto.intersection = function intersection(out, rectB) { + var axMin = this.x, ayMin = this.y, axMax = this.x + this.width, ayMax = this.y + this.height; + var bxMin = rectB.x, byMin = rectB.y, bxMax = rectB.x + rectB.width, byMax = rectB.y + rectB.height; + out.x = Math.max(axMin, bxMin); + out.y = Math.max(ayMin, byMin); + out.width = Math.min(axMax, bxMax) - out.x; + out.height = Math.min(ayMax, byMax) - out.y; + return out; + }; + _proto.contains = function contains(point) { + return this.x <= point.x && this.x + this.width >= point.x && this.y <= point.y && this.y + this.height >= point.y; + }; + _proto.containsRect = function containsRect(rect) { + return this.x <= rect.x && this.x + this.width >= rect.x + rect.width && this.y <= rect.y && this.y + this.height >= rect.y + rect.height; + }; + _proto.union = function union(out, rectB) { + var ax = this.x, ay = this.y, aw = this.width, ah = this.height; + var bx = rectB.x, by = rectB.y, bw = rectB.width, bh = rectB.height; + out.x = Math.min(ax, bx); + out.y = Math.min(ay, by); + out.width = Math.max(ax + aw, bx + bw) - out.x; + out.height = Math.max(ay + ah, by + bh) - out.y; + return out; + }; + _proto.transformMat4 = function transformMat4(out, mat) { + var ol = this.x; + var ob = this.y; + var or = ol + this.width; + var ot = ob + this.height; + var matm = mat.m; + var lbx = matm[0] * ol + matm[4] * ob + matm[12]; + var lby = matm[1] * ol + matm[5] * ob + matm[13]; + var rbx = matm[0] * or + matm[4] * ob + matm[12]; + var rby = matm[1] * or + matm[5] * ob + matm[13]; + var ltx = matm[0] * ol + matm[4] * ot + matm[12]; + var lty = matm[1] * ol + matm[5] * ot + matm[13]; + var rtx = matm[0] * or + matm[4] * ot + matm[12]; + var rty = matm[1] * or + matm[5] * ot + matm[13]; + var minX = Math.min(lbx, rbx, ltx, rtx); + var maxX = Math.max(lbx, rbx, ltx, rtx); + var minY = Math.min(lby, rby, lty, rty); + var maxY = Math.max(lby, rby, lty, rty); + out.x = minX; + out.y = minY; + out.width = maxX - minX; + out.height = maxY - minY; + return out; + }; + _proto.toString = function toString() { + return "(" + this.x.toFixed(2) + ", " + this.y.toFixed(2) + ", " + this.width.toFixed(2) + ", " + this.height.toFixed(2) + ")"; + }; + _createClass(Rect, [ { + key: "xMin", + get: function get() { + return this.x; + }, + set: function set(v) { + this.width += this.x - v; + this.x = v; + } + }, { + key: "yMin", + get: function get() { + return this.y; + }, + set: function set(v) { + this.height += this.y - v; + this.y = v; + } + }, { + key: "xMax", + get: function get() { + return this.x + this.width; + }, + set: function set(value) { + this.width = value - this.x; + } + }, { + key: "yMax", + get: function get() { + return this.y + this.height; + }, + set: function set(value) { + this.height = value - this.y; + } + }, { + key: "center", + get: function get() { + return new _vec["default"](this.x + .5 * this.width, this.y + .5 * this.height); + }, + set: function set(value) { + this.x = value.x - .5 * this.width; + this.y = value.y - .5 * this.height; + } + }, { + key: "origin", + get: function get() { + return new _vec["default"](this.x, this.y); + }, + set: function set(value) { + this.x = value.x; + this.y = value.y; + } + }, { + key: "size", + get: function get() { + return new _size["default"](this.width, this.height); + }, + set: function set(value) { + this.width = value.width; + this.height = value.height; + } + } ]); + return Rect; + })(_valueType["default"]); + exports["default"] = Rect; + _CCClass["default"].fastDefine("cc.Rect", Rect, { + x: 0, + y: 0, + width: 0, + height: 0 + }); + cc.Rect = Rect; + cc.rect = function rect(x, y, w, h) { + return new Rect(x, y, w, h); + }; + module.exports = exports["default"]; + }), { + "../platform/CCClass": 121, + "./size": 225, + "./value-type": 228, + "./vec2": 229 + } ], + 225: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _valueType = _interopRequireDefault(require("./value-type")); + var _CCClass = _interopRequireDefault(require("../platform/CCClass")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var Size = (function(_ValueType) { + _inheritsLoose(Size, _ValueType); + function Size(width, height) { + var _this; + void 0 === width && (width = 0); + void 0 === height && (height = 0); + _this = _ValueType.call(this) || this; + _this.width = void 0; + _this.height = void 0; + if (width && "object" === typeof width) { + _this.width = width.width; + _this.height = width.height; + } else { + _this.width = width || 0; + _this.height = height || 0; + } + return _this; + } + var _proto = Size.prototype; + _proto.clone = function clone() { + return new Size(this.width, this.height); + }; + _proto.equals = function equals(other) { + return other && this.width === other.width && this.height === other.height; + }; + _proto.lerp = function lerp(to, ratio, out) { + out = out || new Size(); + var width = this.width; + var height = this.height; + out.width = width + (to.width - width) * ratio; + out.height = height + (to.height - height) * ratio; + return out; + }; + _proto.set = function set(source) { + this.width = source.width; + this.height = source.height; + return this; + }; + _proto.toString = function toString() { + return "(" + this.width.toFixed(2) + ", " + this.height.toFixed(2) + ")"; + }; + _createClass(Size, null, [ { + key: "ZERO", + get: function get() { + return new Size(); + } + } ]); + return Size; + })(_valueType["default"]); + exports["default"] = Size; + Size.ZERO_R = Size.ZERO; + _CCClass["default"].fastDefine("cc.Size", Size, { + width: 0, + height: 0 + }); + cc.size = function(w, h) { + return new Size(w, h); + }; + cc.Size = Size; + module.exports = exports["default"]; + }), { + "../platform/CCClass": 121, + "./value-type": 228 + } ], + 226: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _quat = _interopRequireDefault(require("./quat")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var tmp_quat = new _quat["default"](); + var Trs = (function() { + function Trs() {} + Trs.toRotation = function toRotation(out, a) { + out.x = a[3]; + out.y = a[4]; + out.z = a[5]; + out.w = a[6]; + return out; + }; + Trs.fromRotation = function fromRotation(out, a) { + out[3] = a.x; + out[4] = a.y; + out[5] = a.z; + out[6] = a.w; + return out; + }; + Trs.toEuler = function toEuler(out, a) { + Trs.toRotation(tmp_quat, a); + _quat["default"].toEuler(out, tmp_quat); + return out; + }; + Trs.fromEuler = function fromEuler(out, a) { + _quat["default"].fromEuler(tmp_quat, a.x, a.y, a.z); + Trs.fromRotation(out, tmp_quat); + return out; + }; + Trs.fromEulerNumber = function fromEulerNumber(out, x, y, z) { + _quat["default"].fromEuler(tmp_quat, x, y, z); + Trs.fromRotation(out, tmp_quat); + return out; + }; + Trs.toScale = function toScale(out, a) { + out.x = a[7]; + out.y = a[8]; + out.z = a[9]; + return out; + }; + Trs.fromScale = function fromScale(out, a) { + out[7] = a.x; + out[8] = a.y; + out[9] = a.z; + return out; + }; + Trs.toPosition = function toPosition(out, a) { + out.x = a[0]; + out.y = a[1]; + out.z = a[2]; + return out; + }; + Trs.fromPosition = function fromPosition(out, a) { + out[0] = a.x; + out[1] = a.y; + out[2] = a.z; + return out; + }; + Trs.fromAngleZ = function fromAngleZ(out, a) { + _quat["default"].fromAngleZ(tmp_quat, a); + Trs.fromRotation(out, tmp_quat); + return out; + }; + Trs.toMat4 = function toMat4(out, trs) { + var x = trs[3], y = trs[4], z = trs[5], w = trs[6]; + var x2 = x + x; + var y2 = y + y; + var z2 = z + z; + var xx = x * x2; + var xy = x * y2; + var xz = x * z2; + var yy = y * y2; + var yz = y * z2; + var zz = z * z2; + var wx = w * x2; + var wy = w * y2; + var wz = w * z2; + var sx = trs[7]; + var sy = trs[8]; + var sz = trs[9]; + var m = out.m; + m[0] = (1 - (yy + zz)) * sx; + m[1] = (xy + wz) * sx; + m[2] = (xz - wy) * sx; + m[3] = 0; + m[4] = (xy - wz) * sy; + m[5] = (1 - (xx + zz)) * sy; + m[6] = (yz + wx) * sy; + m[7] = 0; + m[8] = (xz + wy) * sz; + m[9] = (yz - wx) * sz; + m[10] = (1 - (xx + yy)) * sz; + m[11] = 0; + m[12] = trs[0]; + m[13] = trs[1]; + m[14] = trs[2]; + m[15] = 1; + return out; + }; + return Trs; + })(); + exports["default"] = Trs; + cc.Trs = Trs; + module.exports = exports["default"]; + }), { + "./quat": 223 + } ], + 227: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.INT_MIN = exports.INT_MAX = exports.INT_BITS = exports.FLOAT_BYTES = exports.FLOAT_ARRAY_TYPE = exports.EPSILON = void 0; + exports.approx = approx; + exports.clamp = clamp; + exports.clamp01 = clamp01; + exports.equals = equals; + exports.inverseLerp = inverseLerp; + exports.lerp = lerp; + exports.nextPow2 = nextPow2; + exports.pingPong = pingPong; + exports.pseudoRandom = pseudoRandom; + exports.pseudoRandomRange = pseudoRandomRange; + exports.pseudoRandomRangeInt = pseudoRandomRangeInt; + exports.random = void 0; + exports.randomRange = randomRange; + exports.randomRangeInt = randomRangeInt; + exports.repeat = repeat; + exports.sign = sign; + exports.toDegree = toDegree; + exports.toRadian = toRadian; + var _d2r = Math.PI / 180; + var _r2d = 180 / Math.PI; + var EPSILON = 1e-6; + exports.EPSILON = EPSILON; + var INT_BITS = 32; + exports.INT_BITS = INT_BITS; + var INT_MAX = 2147483647; + exports.INT_MAX = INT_MAX; + var INT_MIN = -1 << INT_BITS - 1; + exports.INT_MIN = INT_MIN; + var FLOAT_ARRAY_TYPE = Float64Array; + exports.FLOAT_ARRAY_TYPE = FLOAT_ARRAY_TYPE; + var FLOAT_BYTES = 8; + exports.FLOAT_BYTES = FLOAT_BYTES; + function equals(a, b) { + return Math.abs(a - b) <= EPSILON * Math.max(1, Math.abs(a), Math.abs(b)); + } + function approx(a, b, maxDiff) { + maxDiff = maxDiff || EPSILON; + return Math.abs(a - b) <= maxDiff; + } + function clamp(val, min, max) { + return val < min ? min : val > max ? max : val; + } + function clamp01(val) { + return val < 0 ? 0 : val > 1 ? 1 : val; + } + function lerp(from, to, ratio) { + return from + (to - from) * ratio; + } + function toRadian(a) { + return a * _d2r; + } + function toDegree(a) { + return a * _r2d; + } + var random = Math.random; + exports.random = random; + function randomRange(min, max) { + return Math.random() * (max - min) + min; + } + function randomRangeInt(min, max) { + return Math.floor(randomRange(min, max)); + } + function pseudoRandom(seed) { + seed = (9301 * seed + 49297) % 233280; + return seed / 233280; + } + function pseudoRandomRange(seed, min, max) { + return pseudoRandom(seed) * (max - min) + min; + } + function pseudoRandomRangeInt(seed, min, max) { + return Math.floor(pseudoRandomRange(seed, min, max)); + } + function nextPow2(val) { + --val; + val |= val >> 1; + val |= val >> 2; + val |= val >> 4; + val |= val >> 8; + val |= val >> 16; + ++val; + return val; + } + function repeat(t, length) { + return t - Math.floor(t / length) * length; + } + function pingPong(t, length) { + t = repeat(t, 2 * length); + t = length - Math.abs(t - length); + return t; + } + function inverseLerp(from, to, value) { + return (value - from) / (to - from); + } + function sign(v) { + return (v > 0) - (v < 0); + } + }), {} ], + 228: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _js = _interopRequireDefault(require("../platform/js")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var ValueType = (function() { + function ValueType() {} + var _proto = ValueType.prototype; + _proto.clone = function clone() { + cc.errorID("0100", _js["default"].getClassName(this) + ".clone"); + return null; + }; + _proto.equals = function equals(other) { + cc.errorID("0100", _js["default"].getClassName(this) + ".equals"); + return false; + }; + _proto.lerp = function lerp(to, ratio) { + cc.errorID("0100", _js["default"].getClassName(this) + ".lerp"); + return this.clone(); + }; + _proto.set = function set(source) { + cc.errorID("0100", _js["default"].getClassName(this) + ".set"); + }; + _proto.toString = function toString() { + return "" + {}; + }; + return ValueType; + })(); + exports["default"] = ValueType; + _js["default"].setClassName("cc.ValueType", ValueType); + cc.ValueType = ValueType; + module.exports = exports["default"]; + }), { + "../platform/js": 142 + } ], + 229: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _valueType = _interopRequireDefault(require("./value-type")); + var _CCClass = _interopRequireDefault(require("../platform/CCClass")); + var _misc = _interopRequireDefault(require("../utils/misc")); + var _utils = require("./utils"); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var _x = 0; + var _y = 0; + var Vec2 = (function(_ValueType) { + _inheritsLoose(Vec2, _ValueType); + var _proto = Vec2.prototype; + _proto.sub = function sub(vector, out) { + return Vec2.subtract(out || new Vec2(), this, vector); + }; + _proto.mul = function mul(num, out) { + return Vec2.multiplyScalar(out || new Vec2(), this, num); + }; + _proto.div = function div(num, out) { + return Vec2.multiplyScalar(out || new Vec2(), this, 1 / num); + }; + _proto.scale = function scale(vector, out) { + return Vec2.multiply(out || new Vec2(), this, vector); + }; + _proto.neg = function neg(out) { + return Vec2.negate(out || new Vec2(), this); + }; + Vec2.clone = function clone(a) { + return new Vec2(a.x, a.y); + }; + Vec2.copy = function copy(out, a) { + out.x = a.x; + out.y = a.y; + return out; + }; + Vec2.set = function set(out, x, y) { + out.x = x; + out.y = y; + return out; + }; + Vec2.add = function add(out, a, b) { + out.x = a.x + b.x; + out.y = a.y + b.y; + return out; + }; + Vec2.subtract = function subtract(out, a, b) { + out.x = a.x - b.x; + out.y = a.y - b.y; + return out; + }; + Vec2.multiply = function multiply(out, a, b) { + out.x = a.x * b.x; + out.y = a.y * b.y; + return out; + }; + Vec2.divide = function divide(out, a, b) { + out.x = a.x / b.x; + out.y = a.y / b.y; + return out; + }; + Vec2.ceil = function ceil(out, a) { + out.x = Math.ceil(a.x); + out.y = Math.ceil(a.y); + return out; + }; + Vec2.floor = function floor(out, a) { + out.x = Math.floor(a.x); + out.y = Math.floor(a.y); + return out; + }; + Vec2.min = function min(out, a, b) { + out.x = Math.min(a.x, b.x); + out.y = Math.min(a.y, b.y); + return out; + }; + Vec2.max = function max(out, a, b) { + out.x = Math.max(a.x, b.x); + out.y = Math.max(a.y, b.y); + return out; + }; + Vec2.round = function round(out, a) { + out.x = Math.round(a.x); + out.y = Math.round(a.y); + return out; + }; + Vec2.multiplyScalar = function multiplyScalar(out, a, b) { + out.x = a.x * b; + out.y = a.y * b; + return out; + }; + Vec2.scaleAndAdd = function scaleAndAdd(out, a, b, scale) { + out.x = a.x + b.x * scale; + out.y = a.y + b.y * scale; + return out; + }; + Vec2.distance = function distance(a, b) { + _x = b.x - a.x; + _y = b.y - a.y; + return Math.sqrt(_x * _x + _y * _y); + }; + Vec2.squaredDistance = function squaredDistance(a, b) { + _x = b.x - a.x; + _y = b.y - a.y; + return _x * _x + _y * _y; + }; + Vec2.len = function len(a) { + _x = a.x; + _y = a.y; + return Math.sqrt(_x * _x + _y * _y); + }; + Vec2.lengthSqr = function lengthSqr(a) { + _x = a.x; + _y = a.y; + return _x * _x + _y * _y; + }; + Vec2.negate = function negate(out, a) { + out.x = -a.x; + out.y = -a.y; + return out; + }; + Vec2.inverse = function inverse(out, a) { + out.x = 1 / a.x; + out.y = 1 / a.y; + return out; + }; + Vec2.inverseSafe = function inverseSafe(out, a) { + _x = a.x; + _y = a.y; + Math.abs(_x) < _utils.EPSILON ? out.x = 0 : out.x = 1 / _x; + Math.abs(_y) < _utils.EPSILON ? out.y = 0 : out.y = 1 / _y; + return out; + }; + Vec2.normalize = function normalize(out, a) { + _x = a.x; + _y = a.y; + var len = _x * _x + _y * _y; + if (len > 0) { + len = 1 / Math.sqrt(len); + out.x = _x * len; + out.y = _y * len; + } + return out; + }; + Vec2.dot = function dot(a, b) { + return a.x * b.x + a.y * b.y; + }; + Vec2.cross = function cross(out, a, b) { + out.x = out.y = 0; + out.z = a.x * b.y - a.y * b.x; + return out; + }; + Vec2.lerp = function lerp(out, a, b, t) { + _x = a.x; + _y = a.y; + out.x = _x + t * (b.x - _x); + out.y = _y + t * (b.y - _y); + return out; + }; + Vec2.random = function random(out, scale) { + scale = scale || 1; + var r = 2 * (0, _utils.random)() * Math.PI; + out.x = Math.cos(r) * scale; + out.y = Math.sin(r) * scale; + return out; + }; + Vec2.transformMat3 = function transformMat3(out, a, mat) { + _x = a.x; + _y = a.y; + var m = mat.m; + out.x = m[0] * _x + m[3] * _y + m[6]; + out.y = m[1] * _x + m[4] * _y + m[7]; + return out; + }; + Vec2.transformMat4 = function transformMat4(out, a, mat) { + _x = a.x; + _y = a.y; + var m = mat.m; + out.x = m[0] * _x + m[4] * _y + m[12]; + out.y = m[1] * _x + m[5] * _y + m[13]; + return out; + }; + Vec2.strictEquals = function strictEquals(a, b) { + return a.x === b.x && a.y === b.y; + }; + Vec2.equals = function equals(a, b, epsilon) { + void 0 === epsilon && (epsilon = _utils.EPSILON); + return Math.abs(a.x - b.x) <= epsilon * Math.max(1, Math.abs(a.x), Math.abs(b.x)) && Math.abs(a.y - b.y) <= epsilon * Math.max(1, Math.abs(a.y), Math.abs(b.y)); + }; + Vec2.angle = function angle(a, b) { + Vec2.normalize(v2_1, a); + Vec2.normalize(v2_2, b); + var cosine = Vec2.dot(v2_1, v2_2); + if (cosine > 1) return 0; + if (cosine < -1) return Math.PI; + return Math.acos(cosine); + }; + Vec2.toArray = function toArray(out, v, ofs) { + void 0 === ofs && (ofs = 0); + out[ofs + 0] = v.x; + out[ofs + 1] = v.y; + return out; + }; + Vec2.fromArray = function fromArray(out, arr, ofs) { + void 0 === ofs && (ofs = 0); + out.x = arr[ofs + 0]; + out.y = arr[ofs + 1]; + return out; + }; + function Vec2(x, y) { + var _this; + void 0 === x && (x = 0); + void 0 === y && (y = 0); + _this = _ValueType.call(this) || this; + _this.mag = Vec2.prototype.len; + _this.magSqr = Vec2.prototype.lengthSqr; + _this.subSelf = Vec2.prototype.subtract; + _this.mulSelf = Vec2.prototype.multiplyScalar; + _this.divSelf = Vec2.prototype.divide; + _this.scaleSelf = Vec2.prototype.multiply; + _this.negSelf = Vec2.prototype.negate; + _this.x = void 0; + _this.y = void 0; + _this.z = 0; + if (x && "object" === typeof x) { + _this.x = x.x || 0; + _this.y = x.y || 0; + } else { + _this.x = x || 0; + _this.y = y || 0; + } + return _this; + } + _proto.clone = function clone() { + return new Vec2(this.x, this.y); + }; + _proto.set = function set(newValue) { + this.x = newValue.x; + this.y = newValue.y; + return this; + }; + _proto.equals = function equals(other) { + return other && this.x === other.x && this.y === other.y; + }; + _proto.fuzzyEquals = function fuzzyEquals(other, variance) { + if (this.x - variance <= other.x && other.x <= this.x + variance && this.y - variance <= other.y && other.y <= this.y + variance) return true; + return false; + }; + _proto.toString = function toString() { + return "(" + this.x.toFixed(2) + ", " + this.y.toFixed(2) + ")"; + }; + _proto.lerp = function lerp(to, ratio, out) { + out = out || new Vec2(); + var x = this.x; + var y = this.y; + out.x = x + (to.x - x) * ratio; + out.y = y + (to.y - y) * ratio; + return out; + }; + _proto.clampf = function clampf(min_inclusive, max_inclusive) { + this.x = _misc["default"].clampf(this.x, min_inclusive.x, max_inclusive.x); + this.y = _misc["default"].clampf(this.y, min_inclusive.y, max_inclusive.y); + return this; + }; + _proto.add = function add(vector, out) { + out = out || new Vec2(); + out.x = this.x + vector.x; + out.y = this.y + vector.y; + return out; + }; + _proto.addSelf = function addSelf(vector) { + this.x += vector.x; + this.y += vector.y; + return this; + }; + _proto.subtract = function subtract(vector) { + this.x -= vector.x; + this.y -= vector.y; + return this; + }; + _proto.multiplyScalar = function multiplyScalar(num) { + this.x *= num; + this.y *= num; + return this; + }; + _proto.multiply = function multiply(vector) { + this.x *= vector.x; + this.y *= vector.y; + return this; + }; + _proto.divide = function divide(num) { + this.x /= num; + this.y /= num; + return this; + }; + _proto.negate = function negate() { + this.x = -this.x; + this.y = -this.y; + return this; + }; + _proto.dot = function dot(vector) { + return this.x * vector.x + this.y * vector.y; + }; + _proto.cross = function cross(vector) { + return this.x * vector.y - this.y * vector.x; + }; + _proto.len = function len() { + return Math.sqrt(this.x * this.x + this.y * this.y); + }; + _proto.lengthSqr = function lengthSqr() { + return this.x * this.x + this.y * this.y; + }; + _proto.normalizeSelf = function normalizeSelf() { + var magSqr = this.x * this.x + this.y * this.y; + if (1 === magSqr) return this; + if (0 === magSqr) return this; + var invsqrt = 1 / Math.sqrt(magSqr); + this.x *= invsqrt; + this.y *= invsqrt; + return this; + }; + _proto.normalize = function normalize(out) { + out = out || new Vec2(); + out.x = this.x; + out.y = this.y; + out.normalizeSelf(); + return out; + }; + _proto.angle = function angle(vector) { + var magSqr1 = this.magSqr(); + var magSqr2 = vector.magSqr(); + if (0 === magSqr1 || 0 === magSqr2) { + console.warn("Can't get angle between zero vector"); + return 0; + } + var dot = this.dot(vector); + var theta = dot / Math.sqrt(magSqr1 * magSqr2); + theta = _misc["default"].clampf(theta, -1, 1); + return Math.acos(theta); + }; + _proto.signAngle = function signAngle(vector) { + var angle = this.angle(vector); + return this.cross(vector) < 0 ? -angle : angle; + }; + _proto.rotate = function rotate(radians, out) { + out = out || new Vec2(); + out.x = this.x; + out.y = this.y; + return out.rotateSelf(radians); + }; + _proto.rotateSelf = function rotateSelf(radians) { + var sin = Math.sin(radians); + var cos = Math.cos(radians); + var x = this.x; + this.x = cos * x - sin * this.y; + this.y = sin * x + cos * this.y; + return this; + }; + _proto.project = function project(vector) { + return vector.multiplyScalar(this.dot(vector) / vector.dot(vector)); + }; + _proto.transformMat4 = function transformMat4(m, out) { + out = out || new Vec2(); + Vec2.transformMat4(out, this, m); + return out; + }; + _proto.maxAxis = function maxAxis() { + return Math.max(this.x, this.y); + }; + _createClass(Vec2, null, [ { + key: "ONE", + get: function get() { + return new Vec2(1, 1); + } + }, { + key: "ZERO", + get: function get() { + return new Vec2(0, 0); + } + }, { + key: "UP", + get: function get() { + return new Vec2(0, 1); + } + }, { + key: "RIGHT", + get: function get() { + return new Vec2(1, 0); + } + } ]); + return Vec2; + })(_valueType["default"]); + exports["default"] = Vec2; + Vec2.sub = Vec2.subtract; + Vec2.mul = Vec2.multiply; + Vec2.scale = Vec2.multiplyScalar; + Vec2.mag = Vec2.len; + Vec2.squaredMagnitude = Vec2.lengthSqr; + Vec2.div = Vec2.divide; + Vec2.ONE_R = Vec2.ONE; + Vec2.ZERO_R = Vec2.ZERO; + Vec2.UP_R = Vec2.UP; + Vec2.RIGHT_R = Vec2.RIGHT; + var v2_1 = new Vec2(); + var v2_2 = new Vec2(); + _CCClass["default"].fastDefine("cc.Vec2", Vec2, { + x: 0, + y: 0 + }); + cc.v2 = function v2(x, y) { + return new Vec2(x, y); + }; + cc.Vec2 = Vec2; + module.exports = exports["default"]; + }), { + "../platform/CCClass": 121, + "../utils/misc": 205, + "./utils": 227, + "./value-type": 228 + } ], + 230: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _valueType = _interopRequireDefault(require("./value-type")); + var _CCClass = _interopRequireDefault(require("../platform/CCClass")); + var _misc = _interopRequireDefault(require("../utils/misc")); + var _vec = _interopRequireDefault(require("./vec2")); + var _utils = require("./utils"); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var _x = 0; + var _y = 0; + var _z = 0; + var Vec3 = (function(_ValueType) { + _inheritsLoose(Vec3, _ValueType); + var _proto = Vec3.prototype; + _proto.sub = function sub(vector, out) { + return Vec3.subtract(out || new Vec3(), this, vector); + }; + _proto.mul = function mul(num, out) { + return Vec3.multiplyScalar(out || new Vec3(), this, num); + }; + _proto.div = function div(num, out) { + return Vec3.multiplyScalar(out || new Vec3(), this, 1 / num); + }; + _proto.scale = function scale(vector, out) { + return Vec3.multiply(out || new Vec3(), this, vector); + }; + _proto.neg = function neg(out) { + return Vec3.negate(out || new Vec3(), this); + }; + Vec3.zero = function zero(out) { + out.x = 0; + out.y = 0; + out.z = 0; + return out; + }; + Vec3.clone = function clone(a) { + return new Vec3(a.x, a.y, a.z); + }; + Vec3.copy = function copy(out, a) { + out.x = a.x; + out.y = a.y; + out.z = a.z; + return out; + }; + Vec3.set = function set(out, x, y, z) { + out.x = x; + out.y = y; + out.z = z; + return out; + }; + Vec3.add = function add(out, a, b) { + out.x = a.x + b.x; + out.y = a.y + b.y; + out.z = a.z + b.z; + return out; + }; + Vec3.subtract = function subtract(out, a, b) { + out.x = a.x - b.x; + out.y = a.y - b.y; + out.z = a.z - b.z; + return out; + }; + Vec3.multiply = function multiply(out, a, b) { + out.x = a.x * b.x; + out.y = a.y * b.y; + out.z = a.z * b.z; + return out; + }; + Vec3.divide = function divide(out, a, b) { + out.x = a.x / b.x; + out.y = a.y / b.y; + out.z = a.z / b.z; + return out; + }; + Vec3.ceil = function ceil(out, a) { + out.x = Math.ceil(a.x); + out.y = Math.ceil(a.y); + out.z = Math.ceil(a.z); + return out; + }; + Vec3.floor = function floor(out, a) { + out.x = Math.floor(a.x); + out.y = Math.floor(a.y); + out.z = Math.floor(a.z); + return out; + }; + Vec3.min = function min(out, a, b) { + out.x = Math.min(a.x, b.x); + out.y = Math.min(a.y, b.y); + out.z = Math.min(a.z, b.z); + return out; + }; + Vec3.max = function max(out, a, b) { + out.x = Math.max(a.x, b.x); + out.y = Math.max(a.y, b.y); + out.z = Math.max(a.z, b.z); + return out; + }; + Vec3.round = function round(out, a) { + out.x = Math.round(a.x); + out.y = Math.round(a.y); + out.z = Math.round(a.z); + return out; + }; + Vec3.multiplyScalar = function multiplyScalar(out, a, b) { + out.x = a.x * b; + out.y = a.y * b; + out.z = a.z * b; + return out; + }; + Vec3.scaleAndAdd = function scaleAndAdd(out, a, b, scale) { + out.x = a.x + b.x * scale; + out.y = a.y + b.y * scale; + out.z = a.z + b.z * scale; + return out; + }; + Vec3.distance = function distance(a, b) { + _x = b.x - a.x; + _y = b.y - a.y; + _z = b.z - a.z; + return Math.sqrt(_x * _x + _y * _y + _z * _z); + }; + Vec3.squaredDistance = function squaredDistance(a, b) { + _x = b.x - a.x; + _y = b.y - a.y; + _z = b.z - a.z; + return _x * _x + _y * _y + _z * _z; + }; + Vec3.len = function len(a) { + _x = a.x; + _y = a.y; + _z = a.z; + return Math.sqrt(_x * _x + _y * _y + _z * _z); + }; + Vec3.lengthSqr = function lengthSqr(a) { + _x = a.x; + _y = a.y; + _z = a.z; + return _x * _x + _y * _y + _z * _z; + }; + Vec3.negate = function negate(out, a) { + out.x = -a.x; + out.y = -a.y; + out.z = -a.z; + return out; + }; + Vec3.inverse = function inverse(out, a) { + out.x = 1 / a.x; + out.y = 1 / a.y; + out.z = 1 / a.z; + return out; + }; + Vec3.inverseSafe = function inverseSafe(out, a) { + _x = a.x; + _y = a.y; + _z = a.z; + Math.abs(_x) < _utils.EPSILON ? out.x = 0 : out.x = 1 / _x; + Math.abs(_y) < _utils.EPSILON ? out.y = 0 : out.y = 1 / _y; + Math.abs(_z) < _utils.EPSILON ? out.z = 0 : out.z = 1 / _z; + return out; + }; + Vec3.normalize = function normalize(out, a) { + _x = a.x; + _y = a.y; + _z = a.z; + var len = _x * _x + _y * _y + _z * _z; + if (len > 0) { + len = 1 / Math.sqrt(len); + out.x = _x * len; + out.y = _y * len; + out.z = _z * len; + } + return out; + }; + Vec3.dot = function dot(a, b) { + return a.x * b.x + a.y * b.y + a.z * b.z; + }; + Vec3.cross = function cross(out, a, b) { + var ax = a.x, ay = a.y, az = a.z; + var bx = b.x, by = b.y, bz = b.z; + out.x = ay * bz - az * by; + out.y = az * bx - ax * bz; + out.z = ax * by - ay * bx; + return out; + }; + Vec3.lerp = function lerp(out, a, b, t) { + out.x = a.x + t * (b.x - a.x); + out.y = a.y + t * (b.y - a.y); + out.z = a.z + t * (b.z - a.z); + return out; + }; + Vec3.random = function random(out, scale) { + scale = scale || 1; + var phi = 2 * (0, _utils.random)() * Math.PI; + var cosTheta = 2 * (0, _utils.random)() - 1; + var sinTheta = Math.sqrt(1 - cosTheta * cosTheta); + out.x = sinTheta * Math.cos(phi) * scale; + out.y = sinTheta * Math.sin(phi) * scale; + out.z = cosTheta * scale; + return out; + }; + Vec3.transformMat4 = function transformMat4(out, a, mat) { + _x = a.x; + _y = a.y; + _z = a.z; + var m = mat.m; + var rhw = m[3] * _x + m[7] * _y + m[11] * _z + m[15]; + rhw = rhw ? 1 / rhw : 1; + out.x = (m[0] * _x + m[4] * _y + m[8] * _z + m[12]) * rhw; + out.y = (m[1] * _x + m[5] * _y + m[9] * _z + m[13]) * rhw; + out.z = (m[2] * _x + m[6] * _y + m[10] * _z + m[14]) * rhw; + return out; + }; + Vec3.transformMat4Normal = function transformMat4Normal(out, a, mat) { + _x = a.x; + _y = a.y; + _z = a.z; + var m = mat.m; + var rhw = m[3] * _x + m[7] * _y + m[11] * _z; + rhw = rhw ? 1 / rhw : 1; + out.x = (m[0] * _x + m[4] * _y + m[8] * _z) * rhw; + out.y = (m[1] * _x + m[5] * _y + m[9] * _z) * rhw; + out.z = (m[2] * _x + m[6] * _y + m[10] * _z) * rhw; + return out; + }; + Vec3.transformMat3 = function transformMat3(out, a, mat) { + _x = a.x; + _y = a.y; + _z = a.z; + var m = mat.m; + out.x = _x * m[0] + _y * m[3] + _z * m[6]; + out.y = _x * m[1] + _y * m[4] + _z * m[7]; + out.z = _x * m[2] + _y * m[5] + _z * m[8]; + return out; + }; + Vec3.transformAffine = function transformAffine(out, v, mat) { + _x = v.x; + _y = v.y; + _z = v.z; + var m = mat.m; + out.x = m[0] * _x + m[1] * _y + m[2] * _z + m[3]; + out.y = m[4] * _x + m[5] * _y + m[6] * _z + m[7]; + out.x = m[8] * _x + m[9] * _y + m[10] * _z + m[11]; + return out; + }; + Vec3.transformQuat = function transformQuat(out, a, q) { + var ix = q.w * a.x + q.y * a.z - q.z * a.y; + var iy = q.w * a.y + q.z * a.x - q.x * a.z; + var iz = q.w * a.z + q.x * a.y - q.y * a.x; + var iw = -q.x * a.x - q.y * a.y - q.z * a.z; + out.x = ix * q.w + iw * -q.x + iy * -q.z - iz * -q.y; + out.y = iy * q.w + iw * -q.y + iz * -q.x - ix * -q.z; + out.z = iz * q.w + iw * -q.z + ix * -q.y - iy * -q.x; + return out; + }; + Vec3.transformRTS = function transformRTS(out, a, r, t, s) { + var x = a.x * s.x; + var y = a.y * s.y; + var z = a.z * s.z; + var ix = r.w * x + r.y * z - r.z * y; + var iy = r.w * y + r.z * x - r.x * z; + var iz = r.w * z + r.x * y - r.y * x; + var iw = -r.x * x - r.y * y - r.z * z; + out.x = ix * r.w + iw * -r.x + iy * -r.z - iz * -r.y + t.x; + out.y = iy * r.w + iw * -r.y + iz * -r.x - ix * -r.z + t.y; + out.z = iz * r.w + iw * -r.z + ix * -r.y - iy * -r.x + t.z; + return out; + }; + Vec3.transformInverseRTS = function transformInverseRTS(out, a, r, t, s) { + var x = a.x - t.x; + var y = a.y - t.y; + var z = a.z - t.z; + var ix = r.w * x - r.y * z + r.z * y; + var iy = r.w * y - r.z * x + r.x * z; + var iz = r.w * z - r.x * y + r.y * x; + var iw = r.x * x + r.y * y + r.z * z; + out.x = (ix * r.w + iw * r.x + iy * r.z - iz * r.y) / s.x; + out.y = (iy * r.w + iw * r.y + iz * r.x - ix * r.z) / s.y; + out.z = (iz * r.w + iw * r.z + ix * r.y - iy * r.x) / s.z; + return out; + }; + Vec3.rotateX = function rotateX(out, v, o, a) { + _x = v.x - o.x; + _y = v.y - o.y; + _z = v.z - o.z; + var cos = Math.cos(a); + var sin = Math.sin(a); + var rx = _x; + var ry = _y * cos - _z * sin; + var rz = _y * sin + _z * cos; + out.x = rx + o.x; + out.y = ry + o.y; + out.z = rz + o.z; + return out; + }; + Vec3.rotateY = function rotateY(out, v, o, a) { + _x = v.x - o.x; + _y = v.y - o.y; + _z = v.z - o.z; + var cos = Math.cos(a); + var sin = Math.sin(a); + var rx = _z * sin + _x * cos; + var ry = _y; + var rz = _z * cos - _x * sin; + out.x = rx + o.x; + out.y = ry + o.y; + out.z = rz + o.z; + return out; + }; + Vec3.rotateZ = function rotateZ(out, v, o, a) { + _x = v.x - o.x; + _y = v.y - o.y; + _z = v.z - o.z; + var cos = Math.cos(a); + var sin = Math.sin(a); + var rx = _x * cos - _y * sin; + var ry = _x * sin + _y * cos; + var rz = _z; + out.x = rx + o.x; + out.y = ry + o.y; + out.z = rz + o.z; + return out; + }; + Vec3.strictEquals = function strictEquals(a, b) { + return a.x === b.x && a.y === b.y && a.z === b.z; + }; + Vec3.equals = function equals(a, b, epsilon) { + void 0 === epsilon && (epsilon = _utils.EPSILON); + var a0 = a.x, a1 = a.y, a2 = a.z; + var b0 = b.x, b1 = b.y, b2 = b.z; + return Math.abs(a0 - b0) <= epsilon * Math.max(1, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= epsilon * Math.max(1, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= epsilon * Math.max(1, Math.abs(a2), Math.abs(b2)); + }; + Vec3.angle = function angle(a, b) { + Vec3.normalize(v3_1, a); + Vec3.normalize(v3_2, b); + var cosine = Vec3.dot(v3_1, v3_2); + if (cosine > 1) return 0; + if (cosine < -1) return Math.PI; + return Math.acos(cosine); + }; + Vec3.projectOnPlane = function projectOnPlane(out, a, n) { + return Vec3.subtract(out, a, Vec3.project(out, a, n)); + }; + Vec3.project = function project(out, a, b) { + var sqrLen = Vec3.lengthSqr(b); + return sqrLen < 1e-6 ? Vec3.set(out, 0, 0, 0) : Vec3.multiplyScalar(out, b, Vec3.dot(a, b) / sqrLen); + }; + Vec3.toArray = function toArray(out, v, ofs) { + void 0 === ofs && (ofs = 0); + out[ofs + 0] = v.x; + out[ofs + 1] = v.y; + out[ofs + 2] = v.z; + return out; + }; + Vec3.fromArray = function fromArray(out, arr, ofs) { + void 0 === ofs && (ofs = 0); + out.x = arr[ofs + 0]; + out.y = arr[ofs + 1]; + out.z = arr[ofs + 2]; + return out; + }; + function Vec3(x, y, z) { + var _this; + void 0 === x && (x = 0); + void 0 === y && (y = 0); + void 0 === z && (z = 0); + _this = _ValueType.call(this) || this; + _this.mag = Vec3.prototype.len; + _this.magSqr = Vec3.prototype.lengthSqr; + _this.subSelf = Vec3.prototype.subtract; + _this.mulSelf = Vec3.prototype.multiplyScalar; + _this.divSelf = Vec3.prototype.divide; + _this.scaleSelf = Vec3.prototype.multiply; + _this.negSelf = Vec3.prototype.negate; + _this.x = void 0; + _this.y = void 0; + _this.z = void 0; + _this.angle = _vec["default"].prototype.angle; + _this.project = _vec["default"].prototype.project; + if (x && "object" === typeof x) { + _this.x = x.x; + _this.y = x.y; + _this.z = x.z; + } else { + _this.x = x; + _this.y = y; + _this.z = z; + } + return _this; + } + _proto.clone = function clone() { + return new Vec3(this.x, this.y, this.z); + }; + _proto.set = function set(newValue) { + this.x = newValue.x; + this.y = newValue.y; + this.z = newValue.z; + return this; + }; + _proto.equals = function equals(other) { + return other && this.x === other.x && this.y === other.y && this.z === other.z; + }; + _proto.fuzzyEquals = function fuzzyEquals(other, variance) { + if (this.x - variance <= other.x && other.x <= this.x + variance && this.y - variance <= other.y && other.y <= this.y + variance && this.z - variance <= other.z && other.z <= this.z + variance) return true; + return false; + }; + _proto.toString = function toString() { + return "(" + this.x.toFixed(2) + ", " + this.y.toFixed(2) + ", " + this.z.toFixed(2) + ")"; + }; + _proto.lerp = function lerp(to, ratio, out) { + out = out || new Vec3(); + Vec3.lerp(out, this, to, ratio); + return out; + }; + _proto.clampf = function clampf(min_inclusive, max_inclusive) { + this.x = _misc["default"].clampf(this.x, min_inclusive.x, max_inclusive.x); + this.y = _misc["default"].clampf(this.y, min_inclusive.y, max_inclusive.y); + this.z = _misc["default"].clampf(this.z, min_inclusive.z, max_inclusive.z); + return this; + }; + _proto.addSelf = function addSelf(vector) { + this.x += vector.x; + this.y += vector.y; + this.z += vector.z; + return this; + }; + _proto.add = function add(vector, out) { + out = out || new Vec3(); + out.x = this.x + vector.x; + out.y = this.y + vector.y; + out.z = this.z + vector.z; + return out; + }; + _proto.subtract = function subtract(vector) { + this.x -= vector.x; + this.y -= vector.y; + this.z -= vector.z; + return this; + }; + _proto.multiplyScalar = function multiplyScalar(num) { + this.x *= num; + this.y *= num; + this.z *= num; + return this; + }; + _proto.multiply = function multiply(vector) { + this.x *= vector.x; + this.y *= vector.y; + this.z *= vector.z; + return this; + }; + _proto.divide = function divide(num) { + this.x /= num; + this.y /= num; + this.z /= num; + return this; + }; + _proto.negate = function negate() { + this.x = -this.x; + this.y = -this.y; + this.z = -this.z; + return this; + }; + _proto.dot = function dot(vector) { + return this.x * vector.x + this.y * vector.y + this.z * vector.z; + }; + _proto.cross = function cross(vector, out) { + out = out || new Vec3(); + Vec3.cross(out, this, vector); + return out; + }; + _proto.len = function len() { + return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z); + }; + _proto.lengthSqr = function lengthSqr() { + return this.x * this.x + this.y * this.y + this.z * this.z; + }; + _proto.normalizeSelf = function normalizeSelf() { + Vec3.normalize(this, this); + return this; + }; + _proto.normalize = function normalize(out) { + out = out || new Vec3(); + Vec3.normalize(out, this); + return out; + }; + _proto.transformMat4 = function transformMat4(m, out) { + out = out || new Vec3(); + Vec3.transformMat4(out, this, m); + return out; + }; + _proto.maxAxis = function maxAxis() { + return Math.max(this.x, this.y, this.z); + }; + _proto.signAngle = function signAngle(vector) { + cc.warnID(1408, "vec3.signAngle", "v2.1", "cc.v2(selfVector).signAngle(vector)"); + var vec1 = new _vec["default"](this.x, this.y); + var vec2 = new _vec["default"](vector.x, vector.y); + return vec1.signAngle(vec2); + }; + _proto.rotate = function rotate(radians, out) { + cc.warnID(1408, "vec3.rotate", "v2.1", "cc.v2(selfVector).rotate(radians, out)"); + return _vec["default"].prototype.rotate.call(this, radians, out); + }; + _proto.rotateSelf = function rotateSelf(radians) { + cc.warnID(1408, "vec3.rotateSelf", "v2.1", "cc.v2(selfVector).rotateSelf(radians)"); + return _vec["default"].prototype.rotateSelf.call(this, radians); + }; + _createClass(Vec3, null, [ { + key: "ONE", + get: function get() { + return new Vec3(1, 1, 1); + } + }, { + key: "ZERO", + get: function get() { + return new Vec3(); + } + }, { + key: "UP", + get: function get() { + return new Vec3(0, 1, 0); + } + }, { + key: "RIGHT", + get: function get() { + return new Vec3(1, 0, 0); + } + }, { + key: "FORWARD", + get: function get() { + return new Vec3(0, 0, 1); + } + } ]); + return Vec3; + })(_valueType["default"]); + exports["default"] = Vec3; + Vec3.sub = Vec3.subtract; + Vec3.mul = Vec3.multiply; + Vec3.scale = Vec3.multiplyScalar; + Vec3.mag = Vec3.len; + Vec3.squaredMagnitude = Vec3.lengthSqr; + Vec3.div = Vec3.divide; + Vec3.ONE_R = Vec3.ONE; + Vec3.ZERO_R = Vec3.ZERO; + Vec3.UP_R = Vec3.UP; + Vec3.RIGHT_R = Vec3.RIGHT; + Vec3.FRONT_R = Vec3.FORWARD; + var v3_1 = new Vec3(); + var v3_2 = new Vec3(); + _CCClass["default"].fastDefine("cc.Vec3", Vec3, { + x: 0, + y: 0, + z: 0 + }); + cc.v3 = function v3(x, y, z) { + return new Vec3(x, y, z); + }; + cc.Vec3 = Vec3; + module.exports = exports["default"]; + }), { + "../platform/CCClass": 121, + "../utils/misc": 205, + "./utils": 227, + "./value-type": 228, + "./vec2": 229 + } ], + 231: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + exports.v4 = v4; + var _CCClass = _interopRequireDefault(require("../platform/CCClass")); + var _valueType = _interopRequireDefault(require("./value-type")); + var _utils = require("./utils"); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var _x = 0; + var _y = 0; + var _z = 0; + var _w = 0; + var Vec4 = (function(_ValueType) { + _inheritsLoose(Vec4, _ValueType); + var _proto = Vec4.prototype; + _proto.sub = function sub(vector, out) { + return Vec4.subtract(out || new Vec4(), this, vector); + }; + _proto.mul = function mul(num, out) { + return Vec4.multiplyScalar(out || new Vec4(), this, num); + }; + _proto.div = function div(num, out) { + return Vec4.multiplyScalar(out || new Vec4(), this, 1 / num); + }; + _proto.scale = function scale(vector, out) { + return Vec4.multiply(out || new Vec4(), this, vector); + }; + _proto.neg = function neg(out) { + return Vec4.negate(out || new Vec4(), this); + }; + Vec4.clone = function clone(a) { + return new Vec4(a.x, a.y, a.z, a.w); + }; + Vec4.copy = function copy(out, a) { + out.x = a.x; + out.y = a.y; + out.z = a.z; + out.w = a.w; + return out; + }; + Vec4.set = function set(out, x, y, z, w) { + out.x = x; + out.y = y; + out.z = z; + out.w = w; + return out; + }; + Vec4.add = function add(out, a, b) { + out.x = a.x + b.x; + out.y = a.y + b.y; + out.z = a.z + b.z; + out.w = a.w + b.w; + return out; + }; + Vec4.subtract = function subtract(out, a, b) { + out.x = a.x - b.x; + out.y = a.y - b.y; + out.z = a.z - b.z; + out.w = a.w - b.w; + return out; + }; + Vec4.multiply = function multiply(out, a, b) { + out.x = a.x * b.x; + out.y = a.y * b.y; + out.z = a.z * b.z; + out.w = a.w * b.w; + return out; + }; + Vec4.divide = function divide(out, a, b) { + out.x = a.x / b.x; + out.y = a.y / b.y; + out.z = a.z / b.z; + out.w = a.w / b.w; + return out; + }; + Vec4.ceil = function ceil(out, a) { + out.x = Math.ceil(a.x); + out.y = Math.ceil(a.y); + out.z = Math.ceil(a.z); + out.w = Math.ceil(a.w); + return out; + }; + Vec4.floor = function floor(out, a) { + out.x = Math.floor(a.x); + out.y = Math.floor(a.y); + out.z = Math.floor(a.z); + out.w = Math.floor(a.w); + return out; + }; + Vec4.min = function min(out, a, b) { + out.x = Math.min(a.x, b.x); + out.y = Math.min(a.y, b.y); + out.z = Math.min(a.z, b.z); + out.w = Math.min(a.w, b.w); + return out; + }; + Vec4.max = function max(out, a, b) { + out.x = Math.max(a.x, b.x); + out.y = Math.max(a.y, b.y); + out.z = Math.max(a.z, b.z); + out.w = Math.max(a.w, b.w); + return out; + }; + Vec4.round = function round(out, a) { + out.x = Math.round(a.x); + out.y = Math.round(a.y); + out.z = Math.round(a.z); + out.w = Math.round(a.w); + return out; + }; + Vec4.multiplyScalar = function multiplyScalar(out, a, b) { + out.x = a.x * b; + out.y = a.y * b; + out.z = a.z * b; + out.w = a.w * b; + return out; + }; + Vec4.scaleAndAdd = function scaleAndAdd(out, a, b, scale) { + out.x = a.x + b.x * scale; + out.y = a.y + b.y * scale; + out.z = a.z + b.z * scale; + out.w = a.w + b.w * scale; + return out; + }; + Vec4.distance = function distance(a, b) { + var x = b.x - a.x; + var y = b.y - a.y; + var z = b.z - a.z; + var w = b.w - a.w; + return Math.sqrt(x * x + y * y + z * z + w * w); + }; + Vec4.squaredDistance = function squaredDistance(a, b) { + var x = b.x - a.x; + var y = b.y - a.y; + var z = b.z - a.z; + var w = b.w - a.w; + return x * x + y * y + z * z + w * w; + }; + Vec4.len = function len(a) { + _x = a.x; + _y = a.y; + _z = a.z; + _w = a.w; + return Math.sqrt(_x * _x + _y * _y + _z * _z + _w * _w); + }; + Vec4.lengthSqr = function lengthSqr(a) { + _x = a.x; + _y = a.y; + _z = a.z; + _w = a.w; + return _x * _x + _y * _y + _z * _z + _w * _w; + }; + Vec4.negate = function negate(out, a) { + out.x = -a.x; + out.y = -a.y; + out.z = -a.z; + out.w = -a.w; + return out; + }; + Vec4.inverse = function inverse(out, a) { + out.x = 1 / a.x; + out.y = 1 / a.y; + out.z = 1 / a.z; + out.w = 1 / a.w; + return out; + }; + Vec4.inverseSafe = function inverseSafe(out, a) { + _x = a.x; + _y = a.y; + _z = a.z; + _w = a.w; + Math.abs(_x) < _utils.EPSILON ? out.x = 0 : out.x = 1 / _x; + Math.abs(_y) < _utils.EPSILON ? out.y = 0 : out.y = 1 / _y; + Math.abs(_z) < _utils.EPSILON ? out.z = 0 : out.z = 1 / _z; + Math.abs(_w) < _utils.EPSILON ? out.w = 0 : out.w = 1 / _w; + return out; + }; + Vec4.normalize = function normalize(out, a) { + _x = a.x; + _y = a.y; + _z = a.z; + _w = a.w; + var len = _x * _x + _y * _y + _z * _z + _w * _w; + if (len > 0) { + len = 1 / Math.sqrt(len); + out.x = _x * len; + out.y = _y * len; + out.z = _z * len; + out.w = _w * len; + } + return out; + }; + Vec4.dot = function dot(a, b) { + return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w; + }; + Vec4.lerp = function lerp(out, a, b, t) { + out.x = a.x + t * (b.x - a.x); + out.y = a.y + t * (b.y - a.y); + out.z = a.z + t * (b.z - a.z); + out.w = a.w + t * (b.w - a.w); + return out; + }; + Vec4.random = function random(out, scale) { + scale = scale || 1; + var phi = 2 * (0, _utils.random)() * Math.PI; + var cosTheta = 2 * (0, _utils.random)() - 1; + var sinTheta = Math.sqrt(1 - cosTheta * cosTheta); + out.x = sinTheta * Math.cos(phi) * scale; + out.y = sinTheta * Math.sin(phi) * scale; + out.z = cosTheta * scale; + out.w = 0; + return out; + }; + Vec4.transformMat4 = function transformMat4(out, a, mat) { + _x = a.x; + _y = a.y; + _z = a.z; + _w = a.w; + var m = mat.m; + out.x = m[0] * _x + m[4] * _y + m[8] * _z + m[12] * _w; + out.y = m[1] * _x + m[5] * _y + m[9] * _z + m[13] * _w; + out.z = m[2] * _x + m[6] * _y + m[10] * _z + m[14] * _w; + out.w = m[3] * _x + m[7] * _y + m[11] * _z + m[15] * _w; + return out; + }; + Vec4.transformAffine = function transformAffine(out, v, mat) { + _x = v.x; + _y = v.y; + _z = v.z; + _w = v.w; + var m = mat.m; + out.x = m[0] * _x + m[1] * _y + m[2] * _z + m[3] * _w; + out.y = m[4] * _x + m[5] * _y + m[6] * _z + m[7] * _w; + out.x = m[8] * _x + m[9] * _y + m[10] * _z + m[11] * _w; + out.w = v.w; + return out; + }; + Vec4.transformQuat = function transformQuat(out, a, q) { + var x = a.x, y = a.y, z = a.z; + _x = q.x; + _y = q.y; + _z = q.z; + _w = q.w; + var ix = _w * x + _y * z - _z * y; + var iy = _w * y + _z * x - _x * z; + var iz = _w * z + _x * y - _y * x; + var iw = -_x * x - _y * y - _z * z; + out.x = ix * _w + iw * -_x + iy * -_z - iz * -_y; + out.y = iy * _w + iw * -_y + iz * -_x - ix * -_z; + out.z = iz * _w + iw * -_z + ix * -_y - iy * -_x; + out.w = a.w; + return out; + }; + Vec4.strictEquals = function strictEquals(a, b) { + return a.x === b.x && a.y === b.y && a.z === b.z && a.w === b.w; + }; + Vec4.equals = function equals(a, b, epsilon) { + void 0 === epsilon && (epsilon = _utils.EPSILON); + return Math.abs(a.x - b.x) <= epsilon * Math.max(1, Math.abs(a.x), Math.abs(b.x)) && Math.abs(a.y - b.y) <= epsilon * Math.max(1, Math.abs(a.y), Math.abs(b.y)) && Math.abs(a.z - b.z) <= epsilon * Math.max(1, Math.abs(a.z), Math.abs(b.z)) && Math.abs(a.w - b.w) <= epsilon * Math.max(1, Math.abs(a.w), Math.abs(b.w)); + }; + Vec4.toArray = function toArray(out, v, ofs) { + void 0 === ofs && (ofs = 0); + out[ofs + 0] = v.x; + out[ofs + 1] = v.y; + out[ofs + 2] = v.z; + out[ofs + 3] = v.w; + return out; + }; + Vec4.fromArray = function fromArray(out, arr, ofs) { + void 0 === ofs && (ofs = 0); + out.x = arr[ofs + 0]; + out.y = arr[ofs + 1]; + out.z = arr[ofs + 2]; + out.w = arr[ofs + 3]; + return out; + }; + function Vec4(x, y, z, w) { + var _this; + void 0 === x && (x = 0); + void 0 === y && (y = 0); + void 0 === z && (z = 0); + void 0 === w && (w = 0); + _this = _ValueType.call(this) || this; + _this.mag = Vec4.prototype.len; + _this.magSqr = Vec4.prototype.lengthSqr; + _this.subSelf = Vec4.prototype.subtract; + _this.mulSelf = Vec4.prototype.multiplyScalar; + _this.divSelf = Vec4.prototype.divide; + _this.scaleSelf = Vec4.prototype.multiply; + _this.negSelf = Vec4.prototype.negate; + _this.x = void 0; + _this.y = void 0; + _this.z = void 0; + _this.w = void 0; + if (x && "object" === typeof x) { + _this.x = x.x; + _this.y = x.y; + _this.z = x.z; + _this.w = x.w; + } else { + _this.x = x; + _this.y = y; + _this.z = z; + _this.w = w; + } + return _this; + } + _proto.clone = function clone() { + return new Vec4(this.x, this.y, this.z, this.w); + }; + _proto.set = function set(x, y, z, w) { + if (x && "object" === typeof x) { + this.x = x.x; + this.y = x.y; + this.z = x.z; + this.w = x.w; + } else { + this.x = x || 0; + this.y = y || 0; + this.z = z || 0; + this.w = w || 0; + } + return this; + }; + _proto.equals = function equals(other, epsilon) { + void 0 === epsilon && (epsilon = _utils.EPSILON); + return Math.abs(this.x - other.x) <= epsilon * Math.max(1, Math.abs(this.x), Math.abs(other.x)) && Math.abs(this.y - other.y) <= epsilon * Math.max(1, Math.abs(this.y), Math.abs(other.y)) && Math.abs(this.z - other.z) <= epsilon * Math.max(1, Math.abs(this.z), Math.abs(other.z)) && Math.abs(this.w - other.w) <= epsilon * Math.max(1, Math.abs(this.w), Math.abs(other.w)); + }; + _proto.equals4f = function equals4f(x, y, z, w, epsilon) { + void 0 === epsilon && (epsilon = _utils.EPSILON); + return Math.abs(this.x - x) <= epsilon * Math.max(1, Math.abs(this.x), Math.abs(x)) && Math.abs(this.y - y) <= epsilon * Math.max(1, Math.abs(this.y), Math.abs(y)) && Math.abs(this.z - z) <= epsilon * Math.max(1, Math.abs(this.z), Math.abs(z)) && Math.abs(this.w - w) <= epsilon * Math.max(1, Math.abs(this.w), Math.abs(w)); + }; + _proto.strictEquals = function strictEquals(other) { + return this.x === other.x && this.y === other.y && this.z === other.z && this.w === other.w; + }; + _proto.strictEquals4f = function strictEquals4f(x, y, z, w) { + return this.x === x && this.y === y && this.z === z && this.w === w; + }; + _proto.lerp = function lerp(to, ratio) { + _x = this.x; + _y = this.y; + _z = this.z; + _w = this.w; + this.x = _x + ratio * (to.x - _x); + this.y = _y + ratio * (to.y - _y); + this.z = _z + ratio * (to.z - _z); + this.w = _w + ratio * (to.w - _w); + return this; + }; + _proto.toString = function toString() { + return "(" + this.x.toFixed(2) + ", " + this.y.toFixed(2) + ", " + this.z.toFixed(2) + ", " + this.w.toFixed(2) + ")"; + }; + _proto.clampf = function clampf(minInclusive, maxInclusive) { + this.x = (0, _utils.clamp)(this.x, minInclusive.x, maxInclusive.x); + this.y = (0, _utils.clamp)(this.y, minInclusive.y, maxInclusive.y); + this.z = (0, _utils.clamp)(this.z, minInclusive.z, maxInclusive.z); + this.w = (0, _utils.clamp)(this.w, minInclusive.w, maxInclusive.w); + return this; + }; + _proto.addSelf = function addSelf(vector) { + this.x += vector.x; + this.y += vector.y; + this.z += vector.z; + this.w += vector.w; + return this; + }; + _proto.add = function add(vector, out) { + out = out || new Vec4(); + out.x = this.x + vector.x; + out.y = this.y + vector.y; + out.z = this.z + vector.z; + out.w = this.w + vector.w; + return out; + }; + _proto.subtract = function subtract(vector, out) { + out = out || new Vec4(); + out.x = this.x - vector.x; + out.y = this.y - vector.y; + out.z = this.z - vector.z; + out.w = this.w - vector.w; + return out; + }; + _proto.multiplyScalar = function multiplyScalar(num) { + this.x *= num; + this.y *= num; + this.z *= num; + this.w *= num; + return this; + }; + _proto.multiply = function multiply(vector) { + this.x *= vector.x; + this.y *= vector.y; + this.z *= vector.z; + this.w *= vector.w; + return this; + }; + _proto.divide = function divide(num) { + this.x /= num; + this.y /= num; + this.z /= num; + this.w /= num; + return this; + }; + _proto.negate = function negate() { + this.x = -this.x; + this.y = -this.y; + this.z = -this.z; + this.w = -this.w; + return this; + }; + _proto.dot = function dot(vector) { + return this.x * vector.x + this.y * vector.y + this.z * vector.z + this.w * vector.w; + }; + _proto.cross = function cross(vector, out) { + out = out || new Vec4(); + var ax = this.x, ay = this.y, az = this.z; + var bx = vector.x, by = vector.y, bz = vector.z; + out.x = ay * bz - az * by; + out.y = az * bx - ax * bz; + out.z = ax * by - ay * bx; + return out; + }; + _proto.len = function len() { + var x = this.x, y = this.y, z = this.z, w = this.w; + return Math.sqrt(x * x + y * y + z * z + w * w); + }; + _proto.lengthSqr = function lengthSqr() { + var x = this.x, y = this.y, z = this.z, w = this.w; + return x * x + y * y + z * z + w * w; + }; + _proto.normalizeSelf = function normalizeSelf() { + this.normalize(this); + return this; + }; + _proto.normalize = function normalize(out) { + out = out || new Vec4(); + _x = this.x; + _y = this.y; + _z = this.z; + _w = this.w; + var len = _x * _x + _y * _y + _z * _z + _w * _w; + if (len > 0) { + len = 1 / Math.sqrt(len); + out.x = _x * len; + out.y = _y * len; + out.z = _z * len; + out.w = _w * len; + } + return out; + }; + _proto.transformMat4 = function transformMat4(matrix, out) { + out = out || new Vec4(); + _x = this.x; + _y = this.y; + _z = this.z; + _w = this.w; + var m = matrix.m; + out.x = m[0] * _x + m[4] * _y + m[8] * _z + m[12] * _w; + out.y = m[1] * _x + m[5] * _y + m[9] * _z + m[13] * _w; + out.z = m[2] * _x + m[6] * _y + m[10] * _z + m[14] * _w; + out.w = m[3] * _x + m[7] * _y + m[11] * _z + m[15] * _w; + return out; + }; + _proto.maxAxis = function maxAxis() { + return Math.max(this.x, this.y, this.z, this.w); + }; + _createClass(Vec4, null, [ { + key: "ZERO", + get: function get() { + return new Vec4(0, 0, 0, 0); + } + }, { + key: "ONE", + get: function get() { + return new Vec4(1, 1, 1, 1); + } + }, { + key: "NEG_ONE", + get: function get() { + return new Vec4(-1, -1, -1, -1); + } + } ]); + return Vec4; + })(_valueType["default"]); + exports["default"] = Vec4; + Vec4.sub = Vec4.subtract; + Vec4.mul = Vec4.multiply; + Vec4.div = Vec4.divide; + Vec4.scale = Vec4.multiplyScalar; + Vec4.mag = Vec4.len; + Vec4.squaredMagnitude = Vec4.lengthSqr; + Vec4.ZERO_R = Vec4.ZERO; + Vec4.ONE_R = Vec4.ONE; + Vec4.NEG_ONE_R = Vec4.NEG_ONE; + _CCClass["default"].fastDefine("cc.Vec4", Vec4, { + x: 0, + y: 0, + z: 0, + w: 0 + }); + function v4(x, y, z, w) { + return new Vec4(x, y, z, w); + } + cc.v4 = v4; + cc.Vec4 = Vec4; + }), { + "../platform/CCClass": 121, + "./utils": 227, + "./value-type": 228 + } ], + 232: [ (function(require, module, exports) { + "use strict"; + var js = cc.js; + true; + var deprecateEnum = function deprecateEnum(obj, oldPath, newPath, hasTypePrefixBefore) { + false; + hasTypePrefixBefore = false !== hasTypePrefixBefore; + var enumDef = Function("return " + newPath)(); + var entries = cc.Enum.getList(enumDef); + var delimiter = hasTypePrefixBefore ? "_" : "."; + for (var i = 0; i < entries.length; i++) { + var entry = entries[i].name; + var oldPropName; + if (hasTypePrefixBefore) { + var oldTypeName = oldPath.split(".").slice(-1)[0]; + oldPropName = oldTypeName + "_" + entry; + } else oldPropName = entry; + js.get(obj, oldPropName, function(entry) { + cc.errorID(1400, oldPath + delimiter + entry, newPath + "." + entry); + return enumDef[entry]; + }.bind(null, entry)); + } + }; + var markAsRemoved = function markAsRemoved(ownerCtor, removedProps, ownerName) { + if (!ownerCtor) return; + ownerName = ownerName || js.getClassName(ownerCtor); + removedProps.forEach((function(prop) { + function error() { + cc.errorID(1406, ownerName, prop); + } + js.getset(ownerCtor.prototype, prop, error, error); + })); + }; + var markAsDeprecated = function markAsDeprecated(ownerCtor, deprecatedProps, ownerName) { + if (!ownerCtor) return; + ownerName = ownerName || js.getClassName(ownerCtor); + var descriptors = Object.getOwnPropertyDescriptors(ownerCtor.prototype); + deprecatedProps.forEach((function(prop) { + var deprecatedProp = prop[0]; + var newProp = prop[1]; + var descriptor = descriptors[deprecatedProp]; + js.getset(ownerCtor.prototype, deprecatedProp, (function() { + cc.warnID(1400, ownerName + "." + deprecatedProp, ownerName + "." + newProp); + return descriptor.get.call(this); + }), (function(v) { + cc.warnID(1400, ownerName + "." + deprecatedProp, ownerName + "." + newProp); + descriptor.set.call(this, v); + })); + })); + }; + var markAsRemovedInObject = function markAsRemovedInObject(ownerObj, removedProps, ownerName) { + if (!ownerObj) return; + removedProps.forEach((function(prop) { + function error() { + cc.errorID(1406, ownerName, prop); + } + js.getset(ownerObj, prop, error); + })); + }; + var provideClearError = function provideClearError(owner, obj, ownerName) { + if (!owner) return; + var className = ownerName || cc.js.getClassName(owner); + var Info = "Sorry, " + className + ".%s is removed, please use %s instead."; + var _loop = function _loop() { + function define(prop, getset) { + function accessor(newProp) { + cc.error(Info, prop, newProp); + } + Array.isArray(getset) || (getset = getset.split(",").map((function(x) { + return x.trim(); + }))); + try { + js.getset(owner, prop, accessor.bind(null, getset[0]), getset[1] && accessor.bind(null, getset[1])); + } catch (e) {} + } + getset = obj[prop]; + if ("*" === prop[0]) { + etProp = prop.slice(1); + define("g" + etProp, getset); + define("s" + etProp, getset); + } else prop.split(",").map((function(x) { + return x.trim(); + })).forEach((function(x) { + define(x, getset); + })); + }; + for (var prop in obj) { + var getset; + var etProp; + _loop(); + } + }; + var markFunctionWarning = function markFunctionWarning(ownerCtor, obj, ownerName) { + if (!ownerCtor) return; + ownerName = ownerName || js.getClassName(ownerCtor); + for (var prop in obj) (function() { + var propName = prop; + var originFunc = ownerCtor[propName]; + if (!originFunc) return; + function warn() { + cc.warn("Sorry, %s.%s is deprecated. Please use %s instead", ownerName, propName, obj[propName]); + return originFunc.apply(this, arguments); + } + ownerCtor[propName] = warn; + })(); + }; + js.get(cc, "info", (function() { + cc.errorID(1400, "cc.info", "cc.log"); + return cc.log; + })); + js.get(cc, "spriteFrameCache", (function() { + cc.errorID(1404); + })); + js.get(cc, "vmath", (function() { + cc.warnID(1400, "cc.vmath", "cc.math"); + return cc.math; + })); + js.get(cc.math, "vec2", (function() { + cc.warnID(1400, "cc.vmath.vec2", "cc.Vec2"); + return cc.Vec2; + })); + js.get(cc.math, "vec3", (function() { + cc.warnID(1400, "cc.vmath.vec3", "cc.Vec3"); + return cc.Vec3; + })); + js.get(cc.math, "vec4", (function() { + cc.warnID(1400, "cc.vmath.vec4", "cc.Vec4"); + return cc.Vec4; + })); + js.get(cc.math, "mat4", (function() { + cc.warnID(1400, "cc.vmath.mat4", "cc.Mat4"); + return cc.Mat4; + })); + js.get(cc.math, "mat3", (function() { + cc.warnID(1400, "cc.vmath.mat3", "cc.Mat3"); + return cc.Mat3; + })); + js.get(cc.math, "quat", (function() { + cc.warnID(1400, "cc.vmath.quat", "cc.Quat"); + return cc.Quat; + })); + js.get(cc.SpriteFrame.prototype, "_textureLoaded", (function() { + cc.errorID(1400, "spriteFrame._textureLoaded", "spriteFrame.textureLoaded()"); + return this.textureLoaded(); + })); + markAsRemoved(cc.SpriteFrame, [ "addLoadedEventListener" ]); + markFunctionWarning(cc.Sprite.prototype, { + setState: "cc.Sprite.setMaterial", + getState: "cc.Sprite.getMaterial" + }, "cc.Sprite"); + js.get(cc.SpriteFrame.prototype, "clearTexture", (function() { + cc.errorID(1406, "cc.SpriteFrame", "clearTexture"); + return function() {}; + })); + js.get(cc, "textureCache", (function() { + cc.errorID(1406, "cc", "textureCache"); + })); + var Texture2D = cc.Texture2D; + js.get(Texture2D.prototype, "releaseTexture", (function() { + cc.errorID(1400, "texture.releaseTexture()", "texture.destroy()"); + return this.destroy; + })); + js.get(Texture2D.prototype, "getName", (function() { + cc.errorID(1400, "texture.getName()", "texture._glID"); + return function() { + return this._glID || null; + }; + })); + js.get(Texture2D.prototype, "isLoaded", (function() { + cc.errorID(1400, "texture.isLoaded function", "texture.loaded property"); + return function() { + return this.loaded; + }; + })); + js.get(Texture2D.prototype, "setAntiAliasTexParameters", (function() { + cc.errorID(1400, "texture.setAntiAliasTexParameters()", "texture.setFilters(cc.Texture2D.Filter.LINEAR, cc.Texture2D.Filter.LINEAR)"); + return function() { + this.setFilters(Texture2D.Filter.LINEAR, Texture2D.Filter.LINEAR); + }; + })); + js.get(Texture2D.prototype, "setAliasTexParameters", (function() { + cc.errorID(1400, "texture.setAntiAliasTexParameters()", "texture.setFilters(cc.Texture2D.Filter.NEAREST, cc.Texture2D.Filter.NEAREST)"); + return function() { + this.setFilters(Texture2D.Filter.NEAREST, Texture2D.Filter.NEAREST); + }; + })); + markAsRemovedInObject(cc.macro, [ "ENABLE_GL_STATE_CACHE", "FIX_ARTIFACTS_BY_STRECHING_TEXEL" ], "cc.macro"); + provideClearError(cc.macro, { + PI: "Math.PI", + PI2: "Math.PI * 2", + FLT_MAX: "Number.MAX_VALUE", + FLT_MIN: "Number.MIN_VALUE", + UINT_MAX: "Number.MAX_SAFE_INTEGER" + }, "cc.macro"); + markAsRemovedInObject(cc.game, [ "CONFIG_KEY" ], "cc.game"); + markAsRemovedInObject(cc.sys, [ "dumpRoot", "cleanScript", "BROWSER_TYPE_WECHAT_GAME", "BROWSER_TYPE_WECHAT_GAME_SUB", "BROWSER_TYPE_BAIDU_GAME", "BROWSER_TYPE_BAIDU_GAME_SUB", "BROWSER_TYPE_XIAOMI_GAME", "BROWSER_TYPE_ALIPAY_GAME" ], "cc.sys"); + provideClearError(cc.Director, { + EVENT_PROJECTION_CHANGED: "", + EVENT_BEFORE_VISIT: "EVENT_AFTER_UPDATE", + EVENT_AFTER_VISIT: "EVENT_BEFORE_DRAW" + }, "cc.Director"); + markFunctionWarning(cc.Director.prototype, { + convertToGL: "cc.view.convertToLocationInView", + convertToUI: "", + getWinSize: "cc.winSize", + getWinSizeInPixels: "cc.winSize", + getVisibleSize: "cc.view.getVisibleSize", + getVisibleOrigin: "cc.view.getVisibleOrigin", + purgeCachedData: "cc.assetManager.releaseAll", + setDepthTest: "cc.Camera.main.depth", + setClearColor: "cc.Camera.main.backgroundColor", + getRunningScene: "cc.director.getScene", + getAnimationInterval: "cc.game.getFrameRate", + setAnimationInterval: "cc.game.setFrameRate", + isDisplayStats: "cc.debug.isDisplayStats", + setDisplayStats: "cc.debug.setDisplayStats", + stopAnimation: "cc.game.pause", + startAnimation: "cc.game.resume" + }, "cc.Director"); + markAsRemoved(cc.Director, [ "pushScene", "popScene", "popToRootScene", "popToSceneStackLevel", "setProjection", "getProjection" ], "cc.Director"); + provideClearError(cc.Scheduler, { + scheduleCallbackForTarget: "schedule", + scheduleUpdateForTarget: "scheduleUpdate", + unscheduleCallbackForTarget: "unschedule", + unscheduleUpdateForTarget: "unscheduleUpdate", + unscheduleAllCallbacksForTarget: "unscheduleAllForTarget", + unscheduleAllCallbacks: "unscheduleAll", + unscheduleAllCallbacksWithMinPriority: "unscheduleAllWithMinPriority" + }, "cc.Scheduler"); + provideClearError(cc.view, { + adjustViewPort: "adjustViewportMeta", + setViewPortInPoints: "setViewportInPoints", + getViewPortRect: "getViewportRect" + }, "cc.view"); + markAsRemovedInObject(cc.view, [ "isViewReady", "setTargetDensityDPI", "getTargetDensityDPI", "setFrameZoomFactor", "canSetContentScaleFactor", "setContentTranslateLeftTop", "getContentTranslateLeftTop", "setViewName", "getViewName" ], "cc.view"); + markAsRemoved(cc.PhysicsManager, [ "attachDebugDrawToCamera", "detachDebugDrawFromCamera" ]); + markAsRemoved(cc.CollisionManager, [ "attachDebugDrawToCamera", "detachDebugDrawFromCamera" ]); + provideClearError(cc._BaseNode.prototype, { + tag: "name", + getTag: "name", + setTag: "name", + getChildByTag: "getChildByName", + removeChildByTag: "getChildByName(name).destroy()" + }); + markAsRemoved(cc.Node, [ "_cascadeColorEnabled", "cascadeColor", "isCascadeColorEnabled", "setCascadeColorEnabled", "_cascadeOpacityEnabled", "cascadeOpacity", "isCascadeOpacityEnabled", "setCascadeOpacityEnabled", "opacityModifyRGB", "isOpacityModifyRGB", "setOpacityModifyRGB", "ignoreAnchor", "isIgnoreAnchorPointForPosition", "ignoreAnchorPointForPosition", "isRunning", "_sgNode" ]); + markFunctionWarning(cc.Node.prototype, { + getNodeToParentTransform: "getLocalMatrix", + getNodeToParentTransformAR: "getLocalMatrix", + getNodeToWorldTransform: "getWorldMatrix", + getNodeToWorldTransformAR: "getWorldMatrix", + getParentToNodeTransform: "getLocalMatrix", + getWorldToNodeTransform: "getWorldMatrix", + convertTouchToNodeSpace: "convertToNodeSpaceAR", + convertTouchToNodeSpaceAR: "convertToNodeSpaceAR", + convertToWorldSpace: "convertToWorldSpaceAR", + convertToNodeSpace: "convertToNodeSpaceAR" + }); + provideClearError(cc.Node.prototype, { + getRotationX: "rotationX", + setRotationX: "rotationX", + getRotationY: "rotationY", + setRotationY: "rotationY", + getPositionX: "x", + setPositionX: "x", + getPositionY: "y", + setPositionY: "y", + getSkewX: "skewX", + setSkewX: "skewX", + getSkewY: "skewY", + setSkewY: "skewY", + getScaleX: "scaleX", + setScaleX: "scaleX", + getScaleY: "scaleY", + setScaleY: "scaleY", + getOpacity: "opacity", + setOpacity: "opacity", + getColor: "color", + setColor: "color", + getLocalZOrder: "zIndex", + setLocalZOrder: "zIndex" + }); + provideClearError(cc.Sprite.prototype, { + setInsetLeft: "cc.SpriteFrame insetLeft", + setInsetRight: "cc.SpriteFrame insetRight", + setInsetTop: "cc.SpriteFrame insetTop", + setInsetBottom: "cc.SpriteFrame insetBottom" + }); + cc.Material.getInstantiatedBuiltinMaterial = cc.MaterialVariant.createWithBuiltin; + cc.Material.getInstantiatedMaterial = cc.MaterialVariant.create; + markFunctionWarning(cc.Material, { + getInstantiatedBuiltinMaterial: "cc.MaterialVariant.createWithBuiltin", + getInstantiatedMaterial: "cc.MaterialVariant.create" + }); + cc.js.getset(cc.RenderComponent.prototype, "sharedMaterials", (function() { + cc.warnID(1400, "sharedMaterials", "getMaterials"); + return this.materials; + }), (function(v) { + cc.warnID(1400, "sharedMaterials", "setMaterial"); + this.materials = v; + })); + markFunctionWarning(cc.Camera.prototype, { + getNodeToCameraTransform: "getWorldToScreenMatrix2D", + getCameraToWorldPoint: "getScreenToWorldPoint", + getWorldToCameraPoint: "getWorldToScreenPoint", + getCameraToWorldMatrix: "getScreenToWorldMatrix2D", + getWorldToCameraMatrix: "getWorldToScreenMatrix2D" + }); + markAsRemoved(cc.Camera, [ "addTarget", "removeTarget", "getTargets" ]); + var ERR = '"%s" is not defined in the Scene, it is only defined in normal nodes.'; + false, Object.defineProperties(cc.Scene.prototype, { + active: { + get: function get() { + cc.error(ERR, "active"); + return true; + }, + set: function set() { + cc.error(ERR, "active"); + } + }, + activeInHierarchy: { + get: function get() { + cc.error(ERR, "activeInHierarchy"); + return true; + } + }, + getComponent: { + get: function get() { + cc.error(ERR, "getComponent"); + return function() { + return null; + }; + } + }, + addComponent: { + get: function get() { + cc.error(ERR, "addComponent"); + return function() { + return null; + }; + } + } + }); + markAsRemovedInObject(cc.dynamicAtlasManager, [ "minFrameSize" ], "cc.dynamicAtlasManager"); + cc.Light && markAsRemovedInObject(cc.Light.prototype, [ "shadowDepthScale" ], "cc.Light.prototype"); + provideClearError(cc, { + affineTransformMake: "cc.AffineTransform.create", + affineTransformMakeIdentity: "cc.AffineTransform.identity", + affineTransformClone: "cc.AffineTransform.clone", + affineTransformConcat: "cc.AffineTransform.concat", + affineTransformConcatIn: "cc.AffineTransform.concat", + affineTransformInvert: "cc.AffineTransform.invert", + affineTransformInvertIn: "cc.AffineTransform.invert", + affineTransformInvertOut: "cc.AffineTransform.invert", + affineTransformEqualToTransform: "cc.AffineTransform.equal", + pointApplyAffineTransform: "cc.AffineTransform.transformVec2", + sizeApplyAffineTransform: "cc.AffineTransform.transformSize", + rectApplyAffineTransform: "cc.AffineTransform.transformRect", + obbApplyAffineTransform: "cc.AffineTransform.transformObb", + pointEqualToPoint: "cc.Vec2 equals", + sizeEqualToSize: "cc.Size equals", + rectEqualToRect: "rectA.equals(rectB)", + rectContainsRect: "rectA.containsRect(rectB)", + rectContainsPoint: "rect.contains(vec2)", + rectOverlapsRect: "rectA.intersects(rectB)", + rectIntersectsRect: "rectA.intersects(rectB)", + rectIntersection: "rectA.intersection(intersection, rectB)", + rectUnion: "rectA.union(union, rectB)", + rectGetMaxX: "rect.xMax", + rectGetMidX: "rect.center.x", + rectGetMinX: "rect.xMin", + rectGetMaxY: "rect.yMax", + rectGetMidY: "rect.center.y", + rectGetMinY: "rect.yMin", + colorEqual: "colorA.equals(colorB)", + hexToColor: "color.fromHEX(hexColor)", + colorToHex: "color.toHEX()", + TextAlignment: "cc.macro.TextAlignment", + VerticalTextAlignment: "cc.macro.VerticalTextAlignment", + pNeg: "p.neg()", + pAdd: "p1.add(p2)", + pSub: "p1.sub(p2)", + pMult: "p.mul(factor)", + pMidpoint: "p1.add(p2).mul(0.5)", + pDot: "p1.dot(p2)", + pCross: "p1.cross(p2)", + pPerp: "p.rotate(-90 * Math.PI / 180)", + pRPerp: "p.rotate(90 * Math.PI / 180)", + pProject: "p1.project(p2)", + pLengthSQ: "p.magSqr()", + pDistanceSQ: "p1.sub(p2).magSqr()", + pLength: "p.mag()", + pDistance: "p1.sub(p2).mag()", + pNormalize: "p.normalize()", + pForAngle: "cc.v2(Math.cos(a), Math.sin(a))", + pToAngle: "Math.atan2(v.y, v.x)", + pZeroIn: "p.x = p.y = 0", + pIn: "p1.set(p2)", + pMultIn: "p.mulSelf(factor)", + pSubIn: "p1.subSelf(p2)", + pAddIn: "p1.addSelf(p2)", + pNormalizeIn: "p.normalizeSelf()", + pSameAs: "p1.equals(p2)", + pAngle: "v1.angle(v2)", + pAngleSigned: "v1.signAngle(v2)", + pRotateByAngle: "p.rotate(radians)", + pCompMult: "v1.multiply(v2)", + pFuzzyEqual: "v1.fuzzyEquals(v2, tolerance)", + pLerp: "p.lerp(endPoint, ratio)", + pClamp: "p.clampf(min_inclusive, max_inclusive)", + rand: "Math.random() * 0xffffff", + randomMinus1To1: "(Math.random() - 0.5) * 2", + container: "cc.game.container", + _canvas: "cc.game.canvas", + _renderType: "cc.game.renderType", + _getError: "cc.debug.getError", + _initDebugSetting: "cc.debug._resetDebugSetting", + DebugMode: "cc.debug.DebugMode" + }, "cc"); + markAsRemovedInObject(cc, [ "blendFuncDisable", "pFromSize", "pCompOp", "pIntersectPoint", "pSegmentIntersect", "pLineIntersect", "obbApplyMatrix", "getImageFormatByData", "initEngine" ], "cc"); + markFunctionWarning(cc, { + p: "cc.v2" + }, "cc"); + provideClearError(cc.Rect, { + contain: "rectA.contains(rectB)", + transformMat4: "rect.transformMat4(out, mat4)" + }); + provideClearError(cc.Color, { + rgb2hsv: "color.toHSV()", + hsv2rgb: "color.fromHSV(h, s, v)" + }); + markFunctionWarning(cc.Color, { + fromHex: "cc.Color.fromHEX" + }); + js.get(cc, "lerp", (function() { + cc.errorID(1400, "cc.lerp", "cc.misc.lerp"); + return cc.misc.lerp; + })); + js.get(cc, "random0To1", (function() { + cc.errorID(1400, "cc.random0To1", "Math.random"); + return Math.random; + })); + js.get(cc, "degreesToRadians", (function() { + cc.errorID(1400, "cc.degreesToRadians", "cc.misc.degreesToRadians"); + return cc.misc.degreesToRadians; + })); + js.get(cc, "radiansToDegrees", (function() { + cc.errorID(1400, "cc.radiansToDegrees", "cc.misc.radiansToDegrees"); + return cc.misc.radiansToDegrees; + })); + js.get(cc, "clampf", (function() { + cc.errorID(1400, "cc.clampf", "cc.misc.clampf"); + return cc.misc.clampf; + })); + js.get(cc, "clamp01", (function() { + cc.errorID(1400, "cc.clamp01", "cc.misc.clamp01"); + return cc.misc.clamp01; + })); + js.get(cc, "ImageFormat", (function() { + cc.errorID(1400, "cc.ImageFormat", "cc.macro.ImageFormat"); + return cc.macro.ImageFormat; + })); + js.get(cc, "KEY", (function() { + cc.errorID(1400, "cc.KEY", "cc.macro.KEY"); + return cc.macro.KEY; + })); + js.get(cc, "Easing", (function() { + cc.errorID(1400, "cc.Easing", "cc.easing"); + return cc.easing; + })); + js.get(cc, "isChildClassOf", (function() { + cc.errorID(1400, "cc.isChildClassOf", "cc.js.isChildClassOf"); + return cc.js.isChildClassOf; + })); + "undefined" !== typeof dragonBones && js.get(dragonBones.CCFactory, "getFactory", (function() { + cc.errorID(1400, "dragonBones.CCFactory.getFactory", "dragonBones.CCFactory.getInstance"); + return dragonBones.CCFactory.getInstance; + })); + cc.renderer.renderEngine = { + get gfx() { + cc.warnID(1400, "cc.renderer.renderEngine.gfx", "cc.gfx"); + return cc.gfx; + }, + get math() { + cc.warnID(1400, "cc.renderer.renderEngine.math", "cc.math"); + return cc.vmath; + }, + get InputAssembler() { + cc.warnID(1400, "cc.renderer.renderEngine.InputAssembler", "cc.renderer.InputAssembler"); + return cc.renderer.InputAssembler; + } + }; + markAsRemovedInObject(cc.audioEngine, [ "getProfile", "preload", "setMaxWebAudioSize" ], "cc.audioEngine"); + }), {} ], + 233: [ (function(require, module, exports) { + "use strict"; + require("./core/CCGame"); + require("./actions"); + }), { + "./actions": 8, + "./core/CCGame": 23 + } ], + 234: [ (function(require, module, exports) { + "use strict"; + var Asset = require("../core/assets/CCAsset"); + var CCSpriteFrame = require("../core/assets/CCSpriteFrame"); + var ParticleAsset = cc.Class({ + name: "cc.ParticleAsset", + extends: Asset, + properties: { + spriteFrame: { + default: null, + type: CCSpriteFrame + } + } + }); + cc.ParticleAsset = module.exports = ParticleAsset; + }), { + "../core/assets/CCAsset": 57, + "../core/assets/CCSpriteFrame": 69 + } ], + 235: [ (function(require, module, exports) { + "use strict"; + var enums = { + USAGE_STATIC: 35044, + USAGE_DYNAMIC: 35048, + USAGE_STREAM: 35040, + INDEX_FMT_UINT8: 5121, + INDEX_FMT_UINT16: 5123, + INDEX_FMT_UINT32: 5125, + ATTR_POSITION: "a_position", + ATTR_NORMAL: "a_normal", + ATTR_TANGENT: "a_tangent", + ATTR_BITANGENT: "a_bitangent", + ATTR_WEIGHTS: "a_weights", + ATTR_JOINTS: "a_joints", + ATTR_COLOR: "a_color", + ATTR_COLOR0: "a_color0", + ATTR_COLOR1: "a_color1", + ATTR_UV: "a_uv", + ATTR_UV0: "a_uv0", + ATTR_UV1: "a_uv1", + ATTR_UV2: "a_uv2", + ATTR_UV3: "a_uv3", + ATTR_UV4: "a_uv4", + ATTR_UV5: "a_uv5", + ATTR_UV6: "a_uv6", + ATTR_UV7: "a_uv7", + ATTR_TYPE_INT8: 5120, + ATTR_TYPE_UINT8: 5121, + ATTR_TYPE_INT16: 5122, + ATTR_TYPE_UINT16: 5123, + ATTR_TYPE_INT32: 5124, + ATTR_TYPE_UINT32: 5125, + ATTR_TYPE_FLOAT32: 5126, + FILTER_NEAREST: 0, + FILTER_LINEAR: 1, + WRAP_REPEAT: 10497, + WRAP_CLAMP: 33071, + WRAP_MIRROR: 33648, + TEXTURE_FMT_RGB_DXT1: 0, + TEXTURE_FMT_RGBA_DXT1: 1, + TEXTURE_FMT_RGBA_DXT3: 2, + TEXTURE_FMT_RGBA_DXT5: 3, + TEXTURE_FMT_RGB_ETC1: 4, + TEXTURE_FMT_RGB_PVRTC_2BPPV1: 5, + TEXTURE_FMT_RGBA_PVRTC_2BPPV1: 6, + TEXTURE_FMT_RGB_PVRTC_4BPPV1: 7, + TEXTURE_FMT_RGBA_PVRTC_4BPPV1: 8, + TEXTURE_FMT_A8: 9, + TEXTURE_FMT_L8: 10, + TEXTURE_FMT_L8_A8: 11, + TEXTURE_FMT_R5_G6_B5: 12, + TEXTURE_FMT_R5_G5_B5_A1: 13, + TEXTURE_FMT_R4_G4_B4_A4: 14, + TEXTURE_FMT_RGB8: 15, + TEXTURE_FMT_RGBA8: 16, + TEXTURE_FMT_RGB16F: 17, + TEXTURE_FMT_RGBA16F: 18, + TEXTURE_FMT_RGB32F: 19, + TEXTURE_FMT_RGBA32F: 20, + TEXTURE_FMT_R32F: 21, + TEXTURE_FMT_111110F: 22, + TEXTURE_FMT_SRGB: 23, + TEXTURE_FMT_SRGBA: 24, + TEXTURE_FMT_D16: 25, + TEXTURE_FMT_D32: 26, + TEXTURE_FMT_D24S8: 27, + TEXTURE_FMT_RGB_ETC2: 28, + TEXTURE_FMT_RGBA_ETC2: 29, + DS_FUNC_NEVER: 512, + DS_FUNC_LESS: 513, + DS_FUNC_EQUAL: 514, + DS_FUNC_LEQUAL: 515, + DS_FUNC_GREATER: 516, + DS_FUNC_NOTEQUAL: 517, + DS_FUNC_GEQUAL: 518, + DS_FUNC_ALWAYS: 519, + RB_FMT_RGBA4: 32854, + RB_FMT_RGB5_A1: 32855, + RB_FMT_RGB565: 36194, + RB_FMT_D16: 33189, + RB_FMT_S8: 36168, + RB_FMT_D24S8: 34041, + BLEND_FUNC_ADD: 32774, + BLEND_FUNC_SUBTRACT: 32778, + BLEND_FUNC_REVERSE_SUBTRACT: 32779, + BLEND_ZERO: 0, + BLEND_ONE: 1, + BLEND_SRC_COLOR: 768, + BLEND_ONE_MINUS_SRC_COLOR: 769, + BLEND_DST_COLOR: 774, + BLEND_ONE_MINUS_DST_COLOR: 775, + BLEND_SRC_ALPHA: 770, + BLEND_ONE_MINUS_SRC_ALPHA: 771, + BLEND_DST_ALPHA: 772, + BLEND_ONE_MINUS_DST_ALPHA: 773, + BLEND_CONSTANT_COLOR: 32769, + BLEND_ONE_MINUS_CONSTANT_COLOR: 32770, + BLEND_CONSTANT_ALPHA: 32771, + BLEND_ONE_MINUS_CONSTANT_ALPHA: 32772, + BLEND_SRC_ALPHA_SATURATE: 776, + STENCIL_DISABLE: 0, + STENCIL_ENABLE: 1, + STENCIL_INHERIT: 2, + STENCIL_OP_KEEP: 7680, + STENCIL_OP_ZERO: 0, + STENCIL_OP_REPLACE: 7681, + STENCIL_OP_INCR: 7682, + STENCIL_OP_INCR_WRAP: 34055, + STENCIL_OP_DECR: 7683, + STENCIL_OP_DECR_WRAP: 34056, + STENCIL_OP_INVERT: 5386, + CULL_NONE: 0, + CULL_FRONT: 1028, + CULL_BACK: 1029, + CULL_FRONT_AND_BACK: 1032, + PT_POINTS: 0, + PT_LINES: 1, + PT_LINE_LOOP: 2, + PT_LINE_STRIP: 3, + PT_TRIANGLES: 4, + PT_TRIANGLE_STRIP: 5, + PT_TRIANGLE_FAN: 6 + }; + var RenderQueue = { + OPAQUE: 0, + TRANSPARENT: 1, + OVERLAY: 2 + }; + function murmurhash2_32_gc(str, seed) { + var l = str.length, h = seed ^ l, i = 0, k; + while (l >= 4) { + k = 255 & str.charCodeAt(i) | (255 & str.charCodeAt(++i)) << 8 | (255 & str.charCodeAt(++i)) << 16 | (255 & str.charCodeAt(++i)) << 24; + k = 1540483477 * (65535 & k) + ((1540483477 * (k >>> 16) & 65535) << 16); + k ^= k >>> 24; + k = 1540483477 * (65535 & k) + ((1540483477 * (k >>> 16) & 65535) << 16); + h = 1540483477 * (65535 & h) + ((1540483477 * (h >>> 16) & 65535) << 16) ^ k; + l -= 4; + ++i; + } + switch (l) { + case 3: + h ^= (255 & str.charCodeAt(i + 2)) << 16; + + case 2: + h ^= (255 & str.charCodeAt(i + 1)) << 8; + + case 1: + h ^= 255 & str.charCodeAt(i); + h = 1540483477 * (65535 & h) + ((1540483477 * (h >>> 16) & 65535) << 16); + } + h ^= h >>> 13; + h = 1540483477 * (65535 & h) + ((1540483477 * (h >>> 16) & 65535) << 16); + h ^= h >>> 15; + return h >>> 0; + } + var WebGLEXT; + (function(WebGLEXT) { + WebGLEXT[WebGLEXT["COMPRESSED_RGB_S3TC_DXT1_EXT"] = 33776] = "COMPRESSED_RGB_S3TC_DXT1_EXT"; + WebGLEXT[WebGLEXT["COMPRESSED_RGBA_S3TC_DXT1_EXT"] = 33777] = "COMPRESSED_RGBA_S3TC_DXT1_EXT"; + WebGLEXT[WebGLEXT["COMPRESSED_RGBA_S3TC_DXT3_EXT"] = 33778] = "COMPRESSED_RGBA_S3TC_DXT3_EXT"; + WebGLEXT[WebGLEXT["COMPRESSED_RGBA_S3TC_DXT5_EXT"] = 33779] = "COMPRESSED_RGBA_S3TC_DXT5_EXT"; + WebGLEXT[WebGLEXT["COMPRESSED_SRGB_S3TC_DXT1_EXT"] = 35916] = "COMPRESSED_SRGB_S3TC_DXT1_EXT"; + WebGLEXT[WebGLEXT["COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT"] = 35917] = "COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT"; + WebGLEXT[WebGLEXT["COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT"] = 35918] = "COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT"; + WebGLEXT[WebGLEXT["COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT"] = 35919] = "COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT"; + WebGLEXT[WebGLEXT["COMPRESSED_RGB_PVRTC_4BPPV1_IMG"] = 35840] = "COMPRESSED_RGB_PVRTC_4BPPV1_IMG"; + WebGLEXT[WebGLEXT["COMPRESSED_RGB_PVRTC_2BPPV1_IMG"] = 35841] = "COMPRESSED_RGB_PVRTC_2BPPV1_IMG"; + WebGLEXT[WebGLEXT["COMPRESSED_RGBA_PVRTC_4BPPV1_IMG"] = 35842] = "COMPRESSED_RGBA_PVRTC_4BPPV1_IMG"; + WebGLEXT[WebGLEXT["COMPRESSED_RGBA_PVRTC_2BPPV1_IMG"] = 35843] = "COMPRESSED_RGBA_PVRTC_2BPPV1_IMG"; + WebGLEXT[WebGLEXT["COMPRESSED_RGB_ETC1_WEBGL"] = 36196] = "COMPRESSED_RGB_ETC1_WEBGL"; + })(WebGLEXT || (WebGLEXT = {})); + var GFXObjectType; + (function(GFXObjectType) { + GFXObjectType[GFXObjectType["UNKNOWN"] = 0] = "UNKNOWN"; + GFXObjectType[GFXObjectType["BUFFER"] = 1] = "BUFFER"; + GFXObjectType[GFXObjectType["TEXTURE"] = 2] = "TEXTURE"; + GFXObjectType[GFXObjectType["TEXTURE_VIEW"] = 3] = "TEXTURE_VIEW"; + GFXObjectType[GFXObjectType["RENDER_PASS"] = 4] = "RENDER_PASS"; + GFXObjectType[GFXObjectType["FRAMEBUFFER"] = 5] = "FRAMEBUFFER"; + GFXObjectType[GFXObjectType["SAMPLER"] = 6] = "SAMPLER"; + GFXObjectType[GFXObjectType["SHADER"] = 7] = "SHADER"; + GFXObjectType[GFXObjectType["PIPELINE_LAYOUT"] = 8] = "PIPELINE_LAYOUT"; + GFXObjectType[GFXObjectType["PIPELINE_STATE"] = 9] = "PIPELINE_STATE"; + GFXObjectType[GFXObjectType["BINDING_LAYOUT"] = 10] = "BINDING_LAYOUT"; + GFXObjectType[GFXObjectType["INPUT_ASSEMBLER"] = 11] = "INPUT_ASSEMBLER"; + GFXObjectType[GFXObjectType["COMMAND_ALLOCATOR"] = 12] = "COMMAND_ALLOCATOR"; + GFXObjectType[GFXObjectType["COMMAND_BUFFER"] = 13] = "COMMAND_BUFFER"; + GFXObjectType[GFXObjectType["QUEUE"] = 14] = "QUEUE"; + GFXObjectType[GFXObjectType["WINDOW"] = 15] = "WINDOW"; + })(GFXObjectType || (GFXObjectType = {})); + var GFXStatus; + (function(GFXStatus) { + GFXStatus[GFXStatus["UNREADY"] = 0] = "UNREADY"; + GFXStatus[GFXStatus["FAILED"] = 1] = "FAILED"; + GFXStatus[GFXStatus["SUCCESS"] = 2] = "SUCCESS"; + })(GFXStatus || (GFXStatus = {})); + var GFXObject = (function() { + function GFXObject(gfxType) { + this._gfxType = GFXObjectType.UNKNOWN; + this._status = GFXStatus.UNREADY; + this._gfxType = gfxType; + } + Object.defineProperty(GFXObject.prototype, "gfxType", { + get: function get() { + return this._gfxType; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(GFXObject.prototype, "status", { + get: function get() { + return this._status; + }, + enumerable: true, + configurable: true + }); + return GFXObject; + })(); + var GFXAttributeName; + (function(GFXAttributeName) { + GFXAttributeName["ATTR_POSITION"] = "a_position"; + GFXAttributeName["ATTR_NORMAL"] = "a_normal"; + GFXAttributeName["ATTR_TANGENT"] = "a_tangent"; + GFXAttributeName["ATTR_BITANGENT"] = "a_bitangent"; + GFXAttributeName["ATTR_WEIGHTS"] = "a_weights"; + GFXAttributeName["ATTR_JOINTS"] = "a_joints"; + GFXAttributeName["ATTR_COLOR"] = "a_color"; + GFXAttributeName["ATTR_COLOR1"] = "a_color1"; + GFXAttributeName["ATTR_COLOR2"] = "a_color2"; + GFXAttributeName["ATTR_TEX_COORD"] = "a_texCoord"; + GFXAttributeName["ATTR_TEX_COORD1"] = "a_texCoord1"; + GFXAttributeName["ATTR_TEX_COORD2"] = "a_texCoord2"; + GFXAttributeName["ATTR_TEX_COORD3"] = "a_texCoord3"; + GFXAttributeName["ATTR_TEX_COORD4"] = "a_texCoord4"; + GFXAttributeName["ATTR_TEX_COORD5"] = "a_texCoord5"; + GFXAttributeName["ATTR_TEX_COORD6"] = "a_texCoord6"; + GFXAttributeName["ATTR_TEX_COORD7"] = "a_texCoord7"; + GFXAttributeName["ATTR_TEX_COORD8"] = "a_texCoord8"; + })(GFXAttributeName || (GFXAttributeName = {})); + var GFXType; + (function(GFXType) { + GFXType[GFXType["UNKNOWN"] = 0] = "UNKNOWN"; + GFXType[GFXType["BOOL"] = 1] = "BOOL"; + GFXType[GFXType["BOOL2"] = 2] = "BOOL2"; + GFXType[GFXType["BOOL3"] = 3] = "BOOL3"; + GFXType[GFXType["BOOL4"] = 4] = "BOOL4"; + GFXType[GFXType["INT"] = 5] = "INT"; + GFXType[GFXType["INT2"] = 6] = "INT2"; + GFXType[GFXType["INT3"] = 7] = "INT3"; + GFXType[GFXType["INT4"] = 8] = "INT4"; + GFXType[GFXType["UINT"] = 9] = "UINT"; + GFXType[GFXType["UINT2"] = 10] = "UINT2"; + GFXType[GFXType["UINT3"] = 11] = "UINT3"; + GFXType[GFXType["UINT4"] = 12] = "UINT4"; + GFXType[GFXType["FLOAT"] = 13] = "FLOAT"; + GFXType[GFXType["FLOAT2"] = 14] = "FLOAT2"; + GFXType[GFXType["FLOAT3"] = 15] = "FLOAT3"; + GFXType[GFXType["FLOAT4"] = 16] = "FLOAT4"; + GFXType[GFXType["COLOR4"] = 17] = "COLOR4"; + GFXType[GFXType["MAT2"] = 18] = "MAT2"; + GFXType[GFXType["MAT2X3"] = 19] = "MAT2X3"; + GFXType[GFXType["MAT2X4"] = 20] = "MAT2X4"; + GFXType[GFXType["MAT3X2"] = 21] = "MAT3X2"; + GFXType[GFXType["MAT3"] = 22] = "MAT3"; + GFXType[GFXType["MAT3X4"] = 23] = "MAT3X4"; + GFXType[GFXType["MAT4X2"] = 24] = "MAT4X2"; + GFXType[GFXType["MAT4X3"] = 25] = "MAT4X3"; + GFXType[GFXType["MAT4"] = 26] = "MAT4"; + GFXType[GFXType["SAMPLER1D"] = 27] = "SAMPLER1D"; + GFXType[GFXType["SAMPLER1D_ARRAY"] = 28] = "SAMPLER1D_ARRAY"; + GFXType[GFXType["SAMPLER2D"] = 29] = "SAMPLER2D"; + GFXType[GFXType["SAMPLER2D_ARRAY"] = 30] = "SAMPLER2D_ARRAY"; + GFXType[GFXType["SAMPLER3D"] = 31] = "SAMPLER3D"; + GFXType[GFXType["SAMPLER_CUBE"] = 32] = "SAMPLER_CUBE"; + GFXType[GFXType["COUNT"] = 33] = "COUNT"; + })(GFXType || (GFXType = {})); + var GFXFormat; + (function(GFXFormat) { + GFXFormat[GFXFormat["UNKNOWN"] = 0] = "UNKNOWN"; + GFXFormat[GFXFormat["A8"] = 1] = "A8"; + GFXFormat[GFXFormat["L8"] = 2] = "L8"; + GFXFormat[GFXFormat["LA8"] = 3] = "LA8"; + GFXFormat[GFXFormat["R8"] = 4] = "R8"; + GFXFormat[GFXFormat["R8SN"] = 5] = "R8SN"; + GFXFormat[GFXFormat["R8UI"] = 6] = "R8UI"; + GFXFormat[GFXFormat["R8I"] = 7] = "R8I"; + GFXFormat[GFXFormat["R16F"] = 8] = "R16F"; + GFXFormat[GFXFormat["R16UI"] = 9] = "R16UI"; + GFXFormat[GFXFormat["R16I"] = 10] = "R16I"; + GFXFormat[GFXFormat["R32F"] = 11] = "R32F"; + GFXFormat[GFXFormat["R32UI"] = 12] = "R32UI"; + GFXFormat[GFXFormat["R32I"] = 13] = "R32I"; + GFXFormat[GFXFormat["RG8"] = 14] = "RG8"; + GFXFormat[GFXFormat["RG8SN"] = 15] = "RG8SN"; + GFXFormat[GFXFormat["RG8UI"] = 16] = "RG8UI"; + GFXFormat[GFXFormat["RG8I"] = 17] = "RG8I"; + GFXFormat[GFXFormat["RG16F"] = 18] = "RG16F"; + GFXFormat[GFXFormat["RG16UI"] = 19] = "RG16UI"; + GFXFormat[GFXFormat["RG16I"] = 20] = "RG16I"; + GFXFormat[GFXFormat["RG32F"] = 21] = "RG32F"; + GFXFormat[GFXFormat["RG32UI"] = 22] = "RG32UI"; + GFXFormat[GFXFormat["RG32I"] = 23] = "RG32I"; + GFXFormat[GFXFormat["RGB8"] = 24] = "RGB8"; + GFXFormat[GFXFormat["SRGB8"] = 25] = "SRGB8"; + GFXFormat[GFXFormat["RGB8SN"] = 26] = "RGB8SN"; + GFXFormat[GFXFormat["RGB8UI"] = 27] = "RGB8UI"; + GFXFormat[GFXFormat["RGB8I"] = 28] = "RGB8I"; + GFXFormat[GFXFormat["RGB16F"] = 29] = "RGB16F"; + GFXFormat[GFXFormat["RGB16UI"] = 30] = "RGB16UI"; + GFXFormat[GFXFormat["RGB16I"] = 31] = "RGB16I"; + GFXFormat[GFXFormat["RGB32F"] = 32] = "RGB32F"; + GFXFormat[GFXFormat["RGB32UI"] = 33] = "RGB32UI"; + GFXFormat[GFXFormat["RGB32I"] = 34] = "RGB32I"; + GFXFormat[GFXFormat["RGBA8"] = 35] = "RGBA8"; + GFXFormat[GFXFormat["SRGB8_A8"] = 36] = "SRGB8_A8"; + GFXFormat[GFXFormat["RGBA8SN"] = 37] = "RGBA8SN"; + GFXFormat[GFXFormat["RGBA8UI"] = 38] = "RGBA8UI"; + GFXFormat[GFXFormat["RGBA8I"] = 39] = "RGBA8I"; + GFXFormat[GFXFormat["RGBA16F"] = 40] = "RGBA16F"; + GFXFormat[GFXFormat["RGBA16UI"] = 41] = "RGBA16UI"; + GFXFormat[GFXFormat["RGBA16I"] = 42] = "RGBA16I"; + GFXFormat[GFXFormat["RGBA32F"] = 43] = "RGBA32F"; + GFXFormat[GFXFormat["RGBA32UI"] = 44] = "RGBA32UI"; + GFXFormat[GFXFormat["RGBA32I"] = 45] = "RGBA32I"; + GFXFormat[GFXFormat["R5G6B5"] = 46] = "R5G6B5"; + GFXFormat[GFXFormat["R11G11B10F"] = 47] = "R11G11B10F"; + GFXFormat[GFXFormat["RGB5A1"] = 48] = "RGB5A1"; + GFXFormat[GFXFormat["RGBA4"] = 49] = "RGBA4"; + GFXFormat[GFXFormat["RGB10A2"] = 50] = "RGB10A2"; + GFXFormat[GFXFormat["RGB10A2UI"] = 51] = "RGB10A2UI"; + GFXFormat[GFXFormat["RGB9E5"] = 52] = "RGB9E5"; + GFXFormat[GFXFormat["D16"] = 53] = "D16"; + GFXFormat[GFXFormat["D16S8"] = 54] = "D16S8"; + GFXFormat[GFXFormat["D24"] = 55] = "D24"; + GFXFormat[GFXFormat["D24S8"] = 56] = "D24S8"; + GFXFormat[GFXFormat["D32F"] = 57] = "D32F"; + GFXFormat[GFXFormat["D32F_S8"] = 58] = "D32F_S8"; + GFXFormat[GFXFormat["BC1"] = 59] = "BC1"; + GFXFormat[GFXFormat["BC1_ALPHA"] = 60] = "BC1_ALPHA"; + GFXFormat[GFXFormat["BC1_SRGB"] = 61] = "BC1_SRGB"; + GFXFormat[GFXFormat["BC1_SRGB_ALPHA"] = 62] = "BC1_SRGB_ALPHA"; + GFXFormat[GFXFormat["BC2"] = 63] = "BC2"; + GFXFormat[GFXFormat["BC2_SRGB"] = 64] = "BC2_SRGB"; + GFXFormat[GFXFormat["BC3"] = 65] = "BC3"; + GFXFormat[GFXFormat["BC3_SRGB"] = 66] = "BC3_SRGB"; + GFXFormat[GFXFormat["BC4"] = 67] = "BC4"; + GFXFormat[GFXFormat["BC4_SNORM"] = 68] = "BC4_SNORM"; + GFXFormat[GFXFormat["BC5"] = 69] = "BC5"; + GFXFormat[GFXFormat["BC5_SNORM"] = 70] = "BC5_SNORM"; + GFXFormat[GFXFormat["BC6H_UF16"] = 71] = "BC6H_UF16"; + GFXFormat[GFXFormat["BC6H_SF16"] = 72] = "BC6H_SF16"; + GFXFormat[GFXFormat["BC7"] = 73] = "BC7"; + GFXFormat[GFXFormat["BC7_SRGB"] = 74] = "BC7_SRGB"; + GFXFormat[GFXFormat["ETC_RGB8"] = 75] = "ETC_RGB8"; + GFXFormat[GFXFormat["ETC2_RGB8"] = 76] = "ETC2_RGB8"; + GFXFormat[GFXFormat["ETC2_SRGB8"] = 77] = "ETC2_SRGB8"; + GFXFormat[GFXFormat["ETC2_RGB8_A1"] = 78] = "ETC2_RGB8_A1"; + GFXFormat[GFXFormat["ETC2_SRGB8_A1"] = 79] = "ETC2_SRGB8_A1"; + GFXFormat[GFXFormat["ETC2_RGBA8"] = 80] = "ETC2_RGBA8"; + GFXFormat[GFXFormat["ETC2_SRGB8_A8"] = 81] = "ETC2_SRGB8_A8"; + GFXFormat[GFXFormat["EAC_R11"] = 82] = "EAC_R11"; + GFXFormat[GFXFormat["EAC_R11SN"] = 83] = "EAC_R11SN"; + GFXFormat[GFXFormat["EAC_RG11"] = 84] = "EAC_RG11"; + GFXFormat[GFXFormat["EAC_RG11SN"] = 85] = "EAC_RG11SN"; + GFXFormat[GFXFormat["PVRTC_RGB2"] = 86] = "PVRTC_RGB2"; + GFXFormat[GFXFormat["PVRTC_RGBA2"] = 87] = "PVRTC_RGBA2"; + GFXFormat[GFXFormat["PVRTC_RGB4"] = 88] = "PVRTC_RGB4"; + GFXFormat[GFXFormat["PVRTC_RGBA4"] = 89] = "PVRTC_RGBA4"; + GFXFormat[GFXFormat["PVRTC2_2BPP"] = 90] = "PVRTC2_2BPP"; + GFXFormat[GFXFormat["PVRTC2_4BPP"] = 91] = "PVRTC2_4BPP"; + })(GFXFormat || (GFXFormat = {})); + var GFXBufferUsageBit; + (function(GFXBufferUsageBit) { + GFXBufferUsageBit[GFXBufferUsageBit["NONE"] = 0] = "NONE"; + GFXBufferUsageBit[GFXBufferUsageBit["TRANSFER_SRC"] = 1] = "TRANSFER_SRC"; + GFXBufferUsageBit[GFXBufferUsageBit["TRANSFER_DST"] = 2] = "TRANSFER_DST"; + GFXBufferUsageBit[GFXBufferUsageBit["INDEX"] = 4] = "INDEX"; + GFXBufferUsageBit[GFXBufferUsageBit["VERTEX"] = 8] = "VERTEX"; + GFXBufferUsageBit[GFXBufferUsageBit["UNIFORM"] = 16] = "UNIFORM"; + GFXBufferUsageBit[GFXBufferUsageBit["STORAGE"] = 32] = "STORAGE"; + GFXBufferUsageBit[GFXBufferUsageBit["INDIRECT"] = 64] = "INDIRECT"; + })(GFXBufferUsageBit || (GFXBufferUsageBit = {})); + var GFXMemoryUsageBit; + (function(GFXMemoryUsageBit) { + GFXMemoryUsageBit[GFXMemoryUsageBit["NONE"] = 0] = "NONE"; + GFXMemoryUsageBit[GFXMemoryUsageBit["DEVICE"] = 1] = "DEVICE"; + GFXMemoryUsageBit[GFXMemoryUsageBit["HOST"] = 2] = "HOST"; + })(GFXMemoryUsageBit || (GFXMemoryUsageBit = {})); + var GFXBufferAccessBit; + (function(GFXBufferAccessBit) { + GFXBufferAccessBit[GFXBufferAccessBit["NONE"] = 0] = "NONE"; + GFXBufferAccessBit[GFXBufferAccessBit["READ"] = 1] = "READ"; + GFXBufferAccessBit[GFXBufferAccessBit["WRITE"] = 2] = "WRITE"; + })(GFXBufferAccessBit || (GFXBufferAccessBit = {})); + var GFXPrimitiveMode; + (function(GFXPrimitiveMode) { + GFXPrimitiveMode[GFXPrimitiveMode["POINT_LIST"] = 0] = "POINT_LIST"; + GFXPrimitiveMode[GFXPrimitiveMode["LINE_LIST"] = 1] = "LINE_LIST"; + GFXPrimitiveMode[GFXPrimitiveMode["LINE_STRIP"] = 2] = "LINE_STRIP"; + GFXPrimitiveMode[GFXPrimitiveMode["LINE_LOOP"] = 3] = "LINE_LOOP"; + GFXPrimitiveMode[GFXPrimitiveMode["LINE_LIST_ADJACENCY"] = 4] = "LINE_LIST_ADJACENCY"; + GFXPrimitiveMode[GFXPrimitiveMode["LINE_STRIP_ADJACENCY"] = 5] = "LINE_STRIP_ADJACENCY"; + GFXPrimitiveMode[GFXPrimitiveMode["ISO_LINE_LIST"] = 6] = "ISO_LINE_LIST"; + GFXPrimitiveMode[GFXPrimitiveMode["TRIANGLE_LIST"] = 7] = "TRIANGLE_LIST"; + GFXPrimitiveMode[GFXPrimitiveMode["TRIANGLE_STRIP"] = 8] = "TRIANGLE_STRIP"; + GFXPrimitiveMode[GFXPrimitiveMode["TRIANGLE_FAN"] = 9] = "TRIANGLE_FAN"; + GFXPrimitiveMode[GFXPrimitiveMode["TRIANGLE_LIST_ADJACENCY"] = 10] = "TRIANGLE_LIST_ADJACENCY"; + GFXPrimitiveMode[GFXPrimitiveMode["TRIANGLE_STRIP_ADJACENCY"] = 11] = "TRIANGLE_STRIP_ADJACENCY"; + GFXPrimitiveMode[GFXPrimitiveMode["TRIANGLE_PATCH_ADJACENCY"] = 12] = "TRIANGLE_PATCH_ADJACENCY"; + GFXPrimitiveMode[GFXPrimitiveMode["QUAD_PATCH_LIST"] = 13] = "QUAD_PATCH_LIST"; + })(GFXPrimitiveMode || (GFXPrimitiveMode = {})); + var GFXPolygonMode; + (function(GFXPolygonMode) { + GFXPolygonMode[GFXPolygonMode["FILL"] = 0] = "FILL"; + GFXPolygonMode[GFXPolygonMode["POINT"] = 1] = "POINT"; + GFXPolygonMode[GFXPolygonMode["LINE"] = 2] = "LINE"; + })(GFXPolygonMode || (GFXPolygonMode = {})); + var GFXShadeModel; + (function(GFXShadeModel) { + GFXShadeModel[GFXShadeModel["GOURAND"] = 0] = "GOURAND"; + GFXShadeModel[GFXShadeModel["FLAT"] = 1] = "FLAT"; + })(GFXShadeModel || (GFXShadeModel = {})); + var GFXCullMode; + (function(GFXCullMode) { + GFXCullMode[GFXCullMode["NONE"] = 0] = "NONE"; + GFXCullMode[GFXCullMode["FRONT"] = 1] = "FRONT"; + GFXCullMode[GFXCullMode["BACK"] = 2] = "BACK"; + })(GFXCullMode || (GFXCullMode = {})); + var GFXComparisonFunc; + (function(GFXComparisonFunc) { + GFXComparisonFunc[GFXComparisonFunc["NEVER"] = 0] = "NEVER"; + GFXComparisonFunc[GFXComparisonFunc["LESS"] = 1] = "LESS"; + GFXComparisonFunc[GFXComparisonFunc["EQUAL"] = 2] = "EQUAL"; + GFXComparisonFunc[GFXComparisonFunc["LESS_EQUAL"] = 3] = "LESS_EQUAL"; + GFXComparisonFunc[GFXComparisonFunc["GREATER"] = 4] = "GREATER"; + GFXComparisonFunc[GFXComparisonFunc["NOT_EQUAL"] = 5] = "NOT_EQUAL"; + GFXComparisonFunc[GFXComparisonFunc["GREATER_EQUAL"] = 6] = "GREATER_EQUAL"; + GFXComparisonFunc[GFXComparisonFunc["ALWAYS"] = 7] = "ALWAYS"; + })(GFXComparisonFunc || (GFXComparisonFunc = {})); + var GFXStencilOp; + (function(GFXStencilOp) { + GFXStencilOp[GFXStencilOp["ZERO"] = 0] = "ZERO"; + GFXStencilOp[GFXStencilOp["KEEP"] = 1] = "KEEP"; + GFXStencilOp[GFXStencilOp["REPLACE"] = 2] = "REPLACE"; + GFXStencilOp[GFXStencilOp["INCR"] = 3] = "INCR"; + GFXStencilOp[GFXStencilOp["DECR"] = 4] = "DECR"; + GFXStencilOp[GFXStencilOp["INVERT"] = 5] = "INVERT"; + GFXStencilOp[GFXStencilOp["INCR_WRAP"] = 6] = "INCR_WRAP"; + GFXStencilOp[GFXStencilOp["DECR_WRAP"] = 7] = "DECR_WRAP"; + })(GFXStencilOp || (GFXStencilOp = {})); + var GFXBlendOp; + (function(GFXBlendOp) { + GFXBlendOp[GFXBlendOp["ADD"] = 0] = "ADD"; + GFXBlendOp[GFXBlendOp["SUB"] = 1] = "SUB"; + GFXBlendOp[GFXBlendOp["REV_SUB"] = 2] = "REV_SUB"; + GFXBlendOp[GFXBlendOp["MIN"] = 3] = "MIN"; + GFXBlendOp[GFXBlendOp["MAX"] = 4] = "MAX"; + })(GFXBlendOp || (GFXBlendOp = {})); + var GFXBlendFactor; + (function(GFXBlendFactor) { + GFXBlendFactor[GFXBlendFactor["ZERO"] = 0] = "ZERO"; + GFXBlendFactor[GFXBlendFactor["ONE"] = 1] = "ONE"; + GFXBlendFactor[GFXBlendFactor["SRC_ALPHA"] = 2] = "SRC_ALPHA"; + GFXBlendFactor[GFXBlendFactor["DST_ALPHA"] = 3] = "DST_ALPHA"; + GFXBlendFactor[GFXBlendFactor["ONE_MINUS_SRC_ALPHA"] = 4] = "ONE_MINUS_SRC_ALPHA"; + GFXBlendFactor[GFXBlendFactor["ONE_MINUS_DST_ALPHA"] = 5] = "ONE_MINUS_DST_ALPHA"; + GFXBlendFactor[GFXBlendFactor["SRC_COLOR"] = 6] = "SRC_COLOR"; + GFXBlendFactor[GFXBlendFactor["DST_COLOR"] = 7] = "DST_COLOR"; + GFXBlendFactor[GFXBlendFactor["ONE_MINUS_SRC_COLOR"] = 8] = "ONE_MINUS_SRC_COLOR"; + GFXBlendFactor[GFXBlendFactor["ONE_MINUS_DST_COLOR"] = 9] = "ONE_MINUS_DST_COLOR"; + GFXBlendFactor[GFXBlendFactor["SRC_ALPHA_SATURATE"] = 10] = "SRC_ALPHA_SATURATE"; + GFXBlendFactor[GFXBlendFactor["CONSTANT_COLOR"] = 11] = "CONSTANT_COLOR"; + GFXBlendFactor[GFXBlendFactor["ONE_MINUS_CONSTANT_COLOR"] = 12] = "ONE_MINUS_CONSTANT_COLOR"; + GFXBlendFactor[GFXBlendFactor["CONSTANT_ALPHA"] = 13] = "CONSTANT_ALPHA"; + GFXBlendFactor[GFXBlendFactor["ONE_MINUS_CONSTANT_ALPHA"] = 14] = "ONE_MINUS_CONSTANT_ALPHA"; + })(GFXBlendFactor || (GFXBlendFactor = {})); + var GFXColorMask; + (function(GFXColorMask) { + GFXColorMask[GFXColorMask["NONE"] = 0] = "NONE"; + GFXColorMask[GFXColorMask["R"] = 1] = "R"; + GFXColorMask[GFXColorMask["G"] = 2] = "G"; + GFXColorMask[GFXColorMask["B"] = 4] = "B"; + GFXColorMask[GFXColorMask["A"] = 8] = "A"; + GFXColorMask[GFXColorMask["ALL"] = 15] = "ALL"; + })(GFXColorMask || (GFXColorMask = {})); + var GFXFilter; + (function(GFXFilter) { + GFXFilter[GFXFilter["NONE"] = 0] = "NONE"; + GFXFilter[GFXFilter["POINT"] = 1] = "POINT"; + GFXFilter[GFXFilter["LINEAR"] = 2] = "LINEAR"; + GFXFilter[GFXFilter["ANISOTROPIC"] = 3] = "ANISOTROPIC"; + })(GFXFilter || (GFXFilter = {})); + var GFXAddress; + (function(GFXAddress) { + GFXAddress[GFXAddress["WRAP"] = 0] = "WRAP"; + GFXAddress[GFXAddress["MIRROR"] = 1] = "MIRROR"; + GFXAddress[GFXAddress["CLAMP"] = 2] = "CLAMP"; + GFXAddress[GFXAddress["BORDER"] = 3] = "BORDER"; + })(GFXAddress || (GFXAddress = {})); + var GFXTextureType; + (function(GFXTextureType) { + GFXTextureType[GFXTextureType["TEX1D"] = 0] = "TEX1D"; + GFXTextureType[GFXTextureType["TEX2D"] = 1] = "TEX2D"; + GFXTextureType[GFXTextureType["TEX3D"] = 2] = "TEX3D"; + })(GFXTextureType || (GFXTextureType = {})); + var GFXTextureUsageBit; + (function(GFXTextureUsageBit) { + GFXTextureUsageBit[GFXTextureUsageBit["NONE"] = 0] = "NONE"; + GFXTextureUsageBit[GFXTextureUsageBit["TRANSFER_SRC"] = 1] = "TRANSFER_SRC"; + GFXTextureUsageBit[GFXTextureUsageBit["TRANSFER_DST"] = 2] = "TRANSFER_DST"; + GFXTextureUsageBit[GFXTextureUsageBit["SAMPLED"] = 4] = "SAMPLED"; + GFXTextureUsageBit[GFXTextureUsageBit["STORAGE"] = 8] = "STORAGE"; + GFXTextureUsageBit[GFXTextureUsageBit["COLOR_ATTACHMENT"] = 16] = "COLOR_ATTACHMENT"; + GFXTextureUsageBit[GFXTextureUsageBit["DEPTH_STENCIL_ATTACHMENT"] = 32] = "DEPTH_STENCIL_ATTACHMENT"; + GFXTextureUsageBit[GFXTextureUsageBit["TRANSIENT_ATTACHMENT"] = 64] = "TRANSIENT_ATTACHMENT"; + GFXTextureUsageBit[GFXTextureUsageBit["INPUT_ATTACHMENT"] = 128] = "INPUT_ATTACHMENT"; + })(GFXTextureUsageBit || (GFXTextureUsageBit = {})); + var GFXSampleCount; + (function(GFXSampleCount) { + GFXSampleCount[GFXSampleCount["X1"] = 0] = "X1"; + GFXSampleCount[GFXSampleCount["X2"] = 1] = "X2"; + GFXSampleCount[GFXSampleCount["X4"] = 2] = "X4"; + GFXSampleCount[GFXSampleCount["X8"] = 3] = "X8"; + GFXSampleCount[GFXSampleCount["X16"] = 4] = "X16"; + GFXSampleCount[GFXSampleCount["X32"] = 5] = "X32"; + GFXSampleCount[GFXSampleCount["X64"] = 6] = "X64"; + })(GFXSampleCount || (GFXSampleCount = {})); + var GFXTextureFlagBit; + (function(GFXTextureFlagBit) { + GFXTextureFlagBit[GFXTextureFlagBit["NONE"] = 0] = "NONE"; + GFXTextureFlagBit[GFXTextureFlagBit["GEN_MIPMAP"] = 1] = "GEN_MIPMAP"; + GFXTextureFlagBit[GFXTextureFlagBit["CUBEMAP"] = 2] = "CUBEMAP"; + GFXTextureFlagBit[GFXTextureFlagBit["BAKUP_BUFFER"] = 4] = "BAKUP_BUFFER"; + })(GFXTextureFlagBit || (GFXTextureFlagBit = {})); + var GFXTextureViewType; + (function(GFXTextureViewType) { + GFXTextureViewType[GFXTextureViewType["TV1D"] = 0] = "TV1D"; + GFXTextureViewType[GFXTextureViewType["TV2D"] = 1] = "TV2D"; + GFXTextureViewType[GFXTextureViewType["TV3D"] = 2] = "TV3D"; + GFXTextureViewType[GFXTextureViewType["CUBE"] = 3] = "CUBE"; + GFXTextureViewType[GFXTextureViewType["TV1D_ARRAY"] = 4] = "TV1D_ARRAY"; + GFXTextureViewType[GFXTextureViewType["TV2D_ARRAY"] = 5] = "TV2D_ARRAY"; + })(GFXTextureViewType || (GFXTextureViewType = {})); + var GFXShaderType; + (function(GFXShaderType) { + GFXShaderType[GFXShaderType["VERTEX"] = 0] = "VERTEX"; + GFXShaderType[GFXShaderType["HULL"] = 1] = "HULL"; + GFXShaderType[GFXShaderType["DOMAIN"] = 2] = "DOMAIN"; + GFXShaderType[GFXShaderType["GEOMETRY"] = 3] = "GEOMETRY"; + GFXShaderType[GFXShaderType["FRAGMENT"] = 4] = "FRAGMENT"; + GFXShaderType[GFXShaderType["COMPUTE"] = 5] = "COMPUTE"; + GFXShaderType[GFXShaderType["COUNT"] = 6] = "COUNT"; + })(GFXShaderType || (GFXShaderType = {})); + var GFXBindingType; + (function(GFXBindingType) { + GFXBindingType[GFXBindingType["UNKNOWN"] = 0] = "UNKNOWN"; + GFXBindingType[GFXBindingType["UNIFORM_BUFFER"] = 1] = "UNIFORM_BUFFER"; + GFXBindingType[GFXBindingType["SAMPLER"] = 2] = "SAMPLER"; + GFXBindingType[GFXBindingType["STORAGE_BUFFER"] = 3] = "STORAGE_BUFFER"; + })(GFXBindingType || (GFXBindingType = {})); + var GFXCommandBufferType; + (function(GFXCommandBufferType) { + GFXCommandBufferType[GFXCommandBufferType["PRIMARY"] = 0] = "PRIMARY"; + GFXCommandBufferType[GFXCommandBufferType["SECONDARY"] = 1] = "SECONDARY"; + })(GFXCommandBufferType || (GFXCommandBufferType = {})); + var GFXLoadOp; + (function(GFXLoadOp) { + GFXLoadOp[GFXLoadOp["LOAD"] = 0] = "LOAD"; + GFXLoadOp[GFXLoadOp["CLEAR"] = 1] = "CLEAR"; + GFXLoadOp[GFXLoadOp["DISCARD"] = 2] = "DISCARD"; + })(GFXLoadOp || (GFXLoadOp = {})); + var GFXStoreOp; + (function(GFXStoreOp) { + GFXStoreOp[GFXStoreOp["STORE"] = 0] = "STORE"; + GFXStoreOp[GFXStoreOp["DISCARD"] = 1] = "DISCARD"; + })(GFXStoreOp || (GFXStoreOp = {})); + var GFXTextureLayout; + (function(GFXTextureLayout) { + GFXTextureLayout[GFXTextureLayout["UNDEFINED"] = 0] = "UNDEFINED"; + GFXTextureLayout[GFXTextureLayout["GENERAL"] = 1] = "GENERAL"; + GFXTextureLayout[GFXTextureLayout["COLOR_ATTACHMENT_OPTIMAL"] = 2] = "COLOR_ATTACHMENT_OPTIMAL"; + GFXTextureLayout[GFXTextureLayout["DEPTH_STENCIL_ATTACHMENT_OPTIMAL"] = 3] = "DEPTH_STENCIL_ATTACHMENT_OPTIMAL"; + GFXTextureLayout[GFXTextureLayout["DEPTH_STENCIL_READONLY_OPTIMAL"] = 4] = "DEPTH_STENCIL_READONLY_OPTIMAL"; + GFXTextureLayout[GFXTextureLayout["SHADER_READONLY_OPTIMAL"] = 5] = "SHADER_READONLY_OPTIMAL"; + GFXTextureLayout[GFXTextureLayout["TRANSFER_SRC_OPTIMAL"] = 6] = "TRANSFER_SRC_OPTIMAL"; + GFXTextureLayout[GFXTextureLayout["TRANSFER_DST_OPTIMAL"] = 7] = "TRANSFER_DST_OPTIMAL"; + GFXTextureLayout[GFXTextureLayout["PREINITIALIZED"] = 8] = "PREINITIALIZED"; + GFXTextureLayout[GFXTextureLayout["PRESENT_SRC"] = 9] = "PRESENT_SRC"; + })(GFXTextureLayout || (GFXTextureLayout = {})); + var GFXPipelineBindPoint; + (function(GFXPipelineBindPoint) { + GFXPipelineBindPoint[GFXPipelineBindPoint["GRAPHICS"] = 0] = "GRAPHICS"; + GFXPipelineBindPoint[GFXPipelineBindPoint["COMPUTE"] = 1] = "COMPUTE"; + GFXPipelineBindPoint[GFXPipelineBindPoint["RAY_TRACING"] = 2] = "RAY_TRACING"; + })(GFXPipelineBindPoint || (GFXPipelineBindPoint = {})); + var GFXDynamicState; + (function(GFXDynamicState) { + GFXDynamicState[GFXDynamicState["VIEWPORT"] = 0] = "VIEWPORT"; + GFXDynamicState[GFXDynamicState["SCISSOR"] = 1] = "SCISSOR"; + GFXDynamicState[GFXDynamicState["LINE_WIDTH"] = 2] = "LINE_WIDTH"; + GFXDynamicState[GFXDynamicState["DEPTH_BIAS"] = 3] = "DEPTH_BIAS"; + GFXDynamicState[GFXDynamicState["BLEND_CONSTANTS"] = 4] = "BLEND_CONSTANTS"; + GFXDynamicState[GFXDynamicState["DEPTH_BOUNDS"] = 5] = "DEPTH_BOUNDS"; + GFXDynamicState[GFXDynamicState["STENCIL_WRITE_MASK"] = 6] = "STENCIL_WRITE_MASK"; + GFXDynamicState[GFXDynamicState["STENCIL_COMPARE_MASK"] = 7] = "STENCIL_COMPARE_MASK"; + })(GFXDynamicState || (GFXDynamicState = {})); + var GFXStencilFace; + (function(GFXStencilFace) { + GFXStencilFace[GFXStencilFace["FRONT"] = 0] = "FRONT"; + GFXStencilFace[GFXStencilFace["BACK"] = 1] = "BACK"; + GFXStencilFace[GFXStencilFace["ALL"] = 2] = "ALL"; + })(GFXStencilFace || (GFXStencilFace = {})); + var GFXQueueType; + (function(GFXQueueType) { + GFXQueueType[GFXQueueType["GRAPHICS"] = 0] = "GRAPHICS"; + GFXQueueType[GFXQueueType["COMPUTE"] = 1] = "COMPUTE"; + GFXQueueType[GFXQueueType["TRANSFER"] = 2] = "TRANSFER"; + })(GFXQueueType || (GFXQueueType = {})); + var GFXClearFlag; + (function(GFXClearFlag) { + GFXClearFlag[GFXClearFlag["NONE"] = 0] = "NONE"; + GFXClearFlag[GFXClearFlag["COLOR"] = 1] = "COLOR"; + GFXClearFlag[GFXClearFlag["DEPTH"] = 2] = "DEPTH"; + GFXClearFlag[GFXClearFlag["STENCIL"] = 4] = "STENCIL"; + GFXClearFlag[GFXClearFlag["DEPTH_STENCIL"] = 6] = "DEPTH_STENCIL"; + GFXClearFlag[GFXClearFlag["ALL"] = 7] = "ALL"; + })(GFXClearFlag || (GFXClearFlag = {})); + function GFXGetTypeSize(type) { + switch (type) { + case GFXType.BOOL: + case GFXType.INT: + case GFXType.UINT: + case GFXType.FLOAT: + return 4; + + case GFXType.BOOL2: + case GFXType.INT2: + case GFXType.UINT2: + case GFXType.FLOAT2: + return 8; + + case GFXType.BOOL3: + case GFXType.INT3: + case GFXType.UINT3: + case GFXType.FLOAT3: + return 12; + + case GFXType.BOOL4: + case GFXType.INT4: + case GFXType.UINT4: + case GFXType.FLOAT4: + case GFXType.MAT2: + return 16; + + case GFXType.MAT2X3: + return 24; + + case GFXType.MAT2X4: + return 32; + + case GFXType.MAT3X2: + return 24; + + case GFXType.MAT3: + return 36; + + case GFXType.MAT3X4: + return 48; + + case GFXType.MAT4X2: + case GFXType.MAT4X2: + return 32; + + case GFXType.MAT4: + return 64; + + case GFXType.SAMPLER1D: + case GFXType.SAMPLER1D_ARRAY: + case GFXType.SAMPLER2D: + case GFXType.SAMPLER2D_ARRAY: + case GFXType.SAMPLER3D: + case GFXType.SAMPLER_CUBE: + return 4; + + default: + return 0; + } + } + var RenderPassStage; + (function(RenderPassStage) { + RenderPassStage[RenderPassStage["DEFAULT"] = 100] = "DEFAULT"; + })(RenderPassStage || (RenderPassStage = {})); + var RenderPriority; + (function(RenderPriority) { + RenderPriority[RenderPriority["MIN"] = 0] = "MIN"; + RenderPriority[RenderPriority["MAX"] = 255] = "MAX"; + RenderPriority[RenderPriority["DEFAULT"] = 128] = "DEFAULT"; + })(RenderPriority || (RenderPriority = {})); + var MAX_BINDING_SUPPORTED = 24; + var UniformBinding; + (function(UniformBinding) { + UniformBinding[UniformBinding["UBO_GLOBAL"] = MAX_BINDING_SUPPORTED - 1] = "UBO_GLOBAL"; + UniformBinding[UniformBinding["UBO_SHADOW"] = MAX_BINDING_SUPPORTED - 2] = "UBO_SHADOW"; + UniformBinding[UniformBinding["UBO_LOCAL"] = MAX_BINDING_SUPPORTED - 3] = "UBO_LOCAL"; + UniformBinding[UniformBinding["UBO_FORWARD_LIGHTS"] = MAX_BINDING_SUPPORTED - 4] = "UBO_FORWARD_LIGHTS"; + UniformBinding[UniformBinding["UBO_SKINNING"] = MAX_BINDING_SUPPORTED - 5] = "UBO_SKINNING"; + UniformBinding[UniformBinding["UBO_SKINNING_TEXTURE"] = MAX_BINDING_SUPPORTED - 6] = "UBO_SKINNING_TEXTURE"; + UniformBinding[UniformBinding["UBO_UI"] = MAX_BINDING_SUPPORTED - 7] = "UBO_UI"; + UniformBinding[UniformBinding["SAMPLER_JOINTS"] = MAX_BINDING_SUPPORTED + 1] = "SAMPLER_JOINTS"; + UniformBinding[UniformBinding["SAMPLER_ENVIRONMENT"] = MAX_BINDING_SUPPORTED + 2] = "SAMPLER_ENVIRONMENT"; + UniformBinding[UniformBinding["CUSTUM_UBO_BINDING_END_POINT"] = MAX_BINDING_SUPPORTED - 7] = "CUSTUM_UBO_BINDING_END_POINT"; + UniformBinding[UniformBinding["CUSTOM_SAMPLER_BINDING_START_POINT"] = MAX_BINDING_SUPPORTED + 6] = "CUSTOM_SAMPLER_BINDING_START_POINT"; + })(UniformBinding || (UniformBinding = {})); + var _a, _b; + var SamplerInfoIndex; + (function(SamplerInfoIndex) { + SamplerInfoIndex[SamplerInfoIndex["minFilter"] = 0] = "minFilter"; + SamplerInfoIndex[SamplerInfoIndex["magFilter"] = 1] = "magFilter"; + SamplerInfoIndex[SamplerInfoIndex["mipFilter"] = 2] = "mipFilter"; + SamplerInfoIndex[SamplerInfoIndex["addressU"] = 3] = "addressU"; + SamplerInfoIndex[SamplerInfoIndex["addressV"] = 4] = "addressV"; + SamplerInfoIndex[SamplerInfoIndex["addressW"] = 5] = "addressW"; + SamplerInfoIndex[SamplerInfoIndex["maxAnisotropy"] = 6] = "maxAnisotropy"; + SamplerInfoIndex[SamplerInfoIndex["cmpFunc"] = 7] = "cmpFunc"; + SamplerInfoIndex[SamplerInfoIndex["minLOD"] = 8] = "minLOD"; + SamplerInfoIndex[SamplerInfoIndex["maxLOD"] = 9] = "maxLOD"; + SamplerInfoIndex[SamplerInfoIndex["mipLODBias"] = 10] = "mipLODBias"; + SamplerInfoIndex[SamplerInfoIndex["borderColor"] = 11] = "borderColor"; + SamplerInfoIndex[SamplerInfoIndex["total"] = 15] = "total"; + })(SamplerInfoIndex || (SamplerInfoIndex = {})); + var typeMap = {}; + typeMap[typeMap["bool"] = GFXType.BOOL] = "bool"; + typeMap[typeMap["int"] = GFXType.INT] = "int"; + typeMap[typeMap["ivec2"] = GFXType.INT2] = "ivec2invTypeParams"; + typeMap[typeMap["ivec3"] = GFXType.INT3] = "ivec3"; + typeMap[typeMap["ivec4"] = GFXType.INT4] = "ivec4"; + typeMap[typeMap["float"] = GFXType.FLOAT] = "float"; + typeMap[typeMap["vec2"] = GFXType.FLOAT2] = "vec2"; + typeMap[typeMap["vec3"] = GFXType.FLOAT3] = "vec3"; + typeMap[typeMap["vec4"] = GFXType.FLOAT4] = "vec4"; + typeMap[typeMap["mat2"] = GFXType.MAT2] = "mat2"; + typeMap[typeMap["mat3"] = GFXType.MAT3] = "mat3"; + typeMap[typeMap["mat4"] = GFXType.MAT4] = "mat4"; + typeMap[typeMap["sampler2D"] = GFXType.SAMPLER2D] = "sampler2D"; + typeMap[typeMap["samplerCube"] = GFXType.SAMPLER_CUBE] = "samplerCube"; + var sizeMap = (_a = {}, _a[GFXType.BOOL] = 4, _a[GFXType.INT] = 4, _a[GFXType.INT2] = 8, + _a[GFXType.INT3] = 12, _a[GFXType.INT4] = 16, _a[GFXType.FLOAT] = 4, _a[GFXType.FLOAT2] = 8, + _a[GFXType.FLOAT3] = 12, _a[GFXType.FLOAT4] = 16, _a[GFXType.MAT2] = 16, _a[GFXType.MAT3] = 36, + _a[GFXType.MAT4] = 64, _a[GFXType.SAMPLER2D] = 4, _a[GFXType.SAMPLER_CUBE] = 4, + _a); + var formatMap = (_b = {}, _b[GFXType.BOOL] = GFXFormat.R32I, _b[GFXType.INT] = GFXFormat.R32I, + _b[GFXType.INT2] = GFXFormat.RG32I, _b[GFXType.INT3] = GFXFormat.RGB32I, _b[GFXType.INT4] = GFXFormat.RGBA32I, + _b[GFXType.FLOAT] = GFXFormat.R32F, _b[GFXType.FLOAT2] = GFXFormat.RG32F, _b[GFXType.FLOAT3] = GFXFormat.RGB32F, + _b[GFXType.FLOAT4] = GFXFormat.RGBA32F, _b); + var passParams = { + BACK: enums.CULL_BACK, + FRONT: enums.CULL_FRONT, + NONE: enums.CULL_NONE, + ADD: enums.BLEND_FUNC_ADD, + SUB: enums.BLEND_FUNC_SUBTRACT, + REV_SUB: enums.BLEND_FUNC_REVERSE_SUBTRACT, + ZERO: enums.BLEND_ZERO, + ONE: enums.BLEND_ONE, + SRC_COLOR: enums.BLEND_SRC_COLOR, + ONE_MINUS_SRC_COLOR: enums.BLEND_ONE_MINUS_SRC_COLOR, + DST_COLOR: enums.BLEND_DST_COLOR, + ONE_MINUS_DST_COLOR: enums.BLEND_ONE_MINUS_DST_COLOR, + SRC_ALPHA: enums.BLEND_SRC_ALPHA, + ONE_MINUS_SRC_ALPHA: enums.BLEND_ONE_MINUS_SRC_ALPHA, + DST_ALPHA: enums.BLEND_DST_ALPHA, + ONE_MINUS_DST_ALPHA: enums.BLEND_ONE_MINUS_DST_ALPHA, + CONSTANT_COLOR: enums.BLEND_CONSTANT_COLOR, + ONE_MINUS_CONSTANT_COLOR: enums.BLEND_ONE_MINUS_CONSTANT_COLOR, + CONSTANT_ALPHA: enums.BLEND_CONSTANT_ALPHA, + ONE_MINUS_CONSTANT_ALPHA: enums.BLEND_ONE_MINUS_CONSTANT_ALPHA, + SRC_ALPHA_SATURATE: enums.BLEND_SRC_ALPHA_SATURATE, + NEVER: enums.DS_FUNC_NEVER, + LESS: enums.DS_FUNC_LESS, + EQUAL: enums.DS_FUNC_EQUAL, + LEQUAL: enums.DS_FUNC_LEQUAL, + GREATER: enums.DS_FUNC_GREATER, + NOTEQUAL: enums.DS_FUNC_NOTEQUAL, + GEQUAL: enums.DS_FUNC_GEQUAL, + ALWAYS: enums.DS_FUNC_ALWAYS, + KEEP: enums.STENCIL_OP_KEEP, + REPLACE: enums.STENCIL_OP_REPLACE, + INCR: enums.STENCIL_OP_INCR, + INCR_WRAP: enums.STENCIL_OP_INCR_WRAP, + DECR: enums.STENCIL_OP_DECR, + DECR_WRAP: enums.STENCIL_OP_DECR_WRAP, + INVERT: enums.STENCIL_OP_INVERT + }; + Object.assign(passParams, RenderPassStage); + var effectStructure = { + $techniques: [ { + $passes: [ { + depthStencilState: {}, + rasterizerState: {}, + blendState: { + targets: [ {} ] + }, + properties: { + any: { + sampler: {}, + inspector: {} + } + } + } ] + } ] + }; + var mappings = { + murmurhash2_32_gc: murmurhash2_32_gc, + SamplerInfoIndex: SamplerInfoIndex, + effectStructure: effectStructure, + typeMap: typeMap, + sizeMap: sizeMap, + formatMap: formatMap, + passParams: passParams, + RenderQueue: RenderQueue, + RenderPriority: RenderPriority, + GFXGetTypeSize: GFXGetTypeSize, + UniformBinding: UniformBinding + }; + module.exports = mappings; + }), {} ], + 236: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _memop = require("../memop"); + var _enums = _interopRequireDefault(require("../enums")); + var _valueTypes = require("../../core/value-types"); + var _programLib = _interopRequireDefault(require("./program-lib")); + var _view = _interopRequireDefault(require("./view")); + var _gfx = _interopRequireDefault(require("../gfx")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var _m4_tmp = new _valueTypes.Mat4(); + var _stageInfos = new _memop.RecyclePool(function() { + return { + stage: null, + items: null + }; + }, 8); + var _float2_pool = new _memop.RecyclePool(function() { + return new Float32Array(2); + }, 8); + var _float3_pool = new _memop.RecyclePool(function() { + return new Float32Array(3); + }, 8); + var _float4_pool = new _memop.RecyclePool(function() { + return new Float32Array(4); + }, 8); + var _float9_pool = new _memop.RecyclePool(function() { + return new Float32Array(9); + }, 8); + var _float16_pool = new _memop.RecyclePool(function() { + return new Float32Array(16); + }, 8); + var _float64_pool = new _memop.RecyclePool(function() { + return new Float32Array(64); + }, 8); + var _int2_pool = new _memop.RecyclePool(function() { + return new Int32Array(2); + }, 8); + var _int3_pool = new _memop.RecyclePool(function() { + return new Int32Array(3); + }, 8); + var _int4_pool = new _memop.RecyclePool(function() { + return new Int32Array(4); + }, 8); + var _int64_pool = new _memop.RecyclePool(function() { + return new Int32Array(64); + }, 8); + var Base = (function() { + function Base(device, opts) { + var _this$_type2defaultVa; + this._device = device; + this._programLib = new _programLib["default"](device); + this._opts = opts; + this._type2defaultValue = (_this$_type2defaultVa = {}, _this$_type2defaultVa[_enums["default"].PARAM_INT] = 0, + _this$_type2defaultVa[_enums["default"].PARAM_INT2] = new _valueTypes.Vec2(0, 0), + _this$_type2defaultVa[_enums["default"].PARAM_INT3] = new _valueTypes.Vec3(0, 0, 0), + _this$_type2defaultVa[_enums["default"].PARAM_INT4] = new _valueTypes.Vec4(0, 0, 0, 0), + _this$_type2defaultVa[_enums["default"].PARAM_FLOAT] = 0, _this$_type2defaultVa[_enums["default"].PARAM_FLOAT2] = new _valueTypes.Vec2(0, 0), + _this$_type2defaultVa[_enums["default"].PARAM_FLOAT3] = new _valueTypes.Vec3(0, 0, 0), + _this$_type2defaultVa[_enums["default"].PARAM_FLOAT4] = new _valueTypes.Vec4(0, 0, 0, 0), + _this$_type2defaultVa[_enums["default"].PARAM_COLOR4] = new _valueTypes.Color(0, 0, 0, 1), + _this$_type2defaultVa[_enums["default"].PARAM_MAT3] = new _valueTypes.Mat3(), _this$_type2defaultVa[_enums["default"].PARAM_MAT4] = new _valueTypes.Mat4(), + _this$_type2defaultVa[_enums["default"].PARAM_TEXTURE_2D] = opts.defaultTexture, + _this$_type2defaultVa[_enums["default"].PARAM_TEXTURE_CUBE] = opts.defaultTextureCube, + _this$_type2defaultVa); + this._stage2fn = {}; + this._usedTextureUnits = 0; + this._viewPools = new _memop.RecyclePool(function() { + return new _view["default"](); + }, 8); + this._drawItemsPools = new _memop.RecyclePool(function() { + return { + model: null, + node: null, + ia: null, + effect: null, + defines: null, + uniforms: null + }; + }, 100); + this._stageItemsPools = new _memop.RecyclePool(function() { + return new _memop.RecyclePool(function() { + return { + model: null, + node: null, + ia: null, + effect: null, + defines: null, + passes: [], + sortKey: -1, + uniforms: null + }; + }, 100); + }, 16); + this._definesChanged = false; + } + var _proto = Base.prototype; + _proto._resetTextuerUnit = function _resetTextuerUnit() { + this._usedTextureUnits = 0; + }; + _proto._allocTextureUnit = function _allocTextureUnit() { + var device = this._device; + var unit = this._usedTextureUnits; + unit >= device._caps.maxTextureUnits && console.warn("Trying to use " + unit + " texture units while this GPU supports only " + device._caps.maxTextureUnits); + this._usedTextureUnits += 1; + return unit; + }; + _proto._registerStage = function _registerStage(name, fn) { + this._stage2fn[name] = fn; + }; + _proto.clear = function clear() { + this._programLib.clear(); + this.reset(); + }; + _proto.reset = function reset() { + this._viewPools.reset(); + this._stageItemsPools.reset(); + this._definesChanged = false; + }; + _proto._requestView = function _requestView() { + return this._viewPools.add(); + }; + _proto._render = function _render(view, scene) { + var device = this._device; + device.setFrameBuffer(view._framebuffer); + device.setViewport(view._rect.x, view._rect.y, view._rect.w, view._rect.h); + var clearOpts = {}; + view._clearFlags & _enums["default"].CLEAR_COLOR && (clearOpts.color = _valueTypes.Vec4.toArray([], view._color)); + view._clearFlags & _enums["default"].CLEAR_DEPTH && (clearOpts.depth = view._depth); + view._clearFlags & _enums["default"].CLEAR_STENCIL && (clearOpts.stencil = view._stencil); + device.clear(clearOpts); + this._drawItemsPools.reset(); + for (var i = 0; i < scene._models.length; ++i) { + var model = scene._models.data[i]; + if (0 === (model._cullingMask & view._cullingMask)) continue; + var drawItem = this._drawItemsPools.add(); + model.extractDrawItem(drawItem); + } + _stageInfos.reset(); + for (var _i = 0; _i < view._stages.length; ++_i) { + var stage = view._stages[_i]; + var stageItems = this._stageItemsPools.add(); + stageItems.reset(); + for (var j = 0; j < this._drawItemsPools.length; ++j) { + var _drawItem = this._drawItemsPools.data[j]; + var passes = _drawItem.effect.stagePasses[stage]; + if (!passes || 0 === passes.length) continue; + var stageItem = stageItems.add(); + stageItem.passes = passes; + stageItem.model = _drawItem.model; + stageItem.node = _drawItem.node; + stageItem.ia = _drawItem.ia; + stageItem.effect = _drawItem.effect; + stageItem.defines = _drawItem.defines; + stageItem.sortKey = -1; + stageItem.uniforms = _drawItem.uniforms; + } + var stageInfo = _stageInfos.add(); + stageInfo.stage = stage; + stageInfo.items = stageItems; + } + for (var _i2 = 0; _i2 < _stageInfos.length; ++_i2) { + var info = _stageInfos.data[_i2]; + var fn = this._stage2fn[info.stage]; + fn(view, info.items); + } + }; + _proto._setProperty = function _setProperty(prop) { + var device = this._device; + var param = prop.value; + void 0 === param && (param = prop.val); + void 0 === param && (param = this._type2defaultValue[prop.type]); + if (void 0 === param) { + console.warn("Failed to set technique property " + prop.name + ", value not found."); + return; + } + if (prop.type === _enums["default"].PARAM_TEXTURE_2D || prop.type === _enums["default"].PARAM_TEXTURE_CUBE) if (Array.isArray(param)) { + if (param.length > prop.count) { + console.error("Failed to set property [" + prop.name + "] : The length of texture array [" + param.length + "] is bigger than [" + prop.count + "]."); + return; + } + var slots = _int64_pool.add(); + for (var index = 0; index < param.length; ++index) slots[index] = this._allocTextureUnit(); + device.setTextureArray(prop.name, param, slots); + } else device.setTexture(prop.name, param, this._allocTextureUnit()); else prop.directly ? device.setUniformDirectly(prop.name, param) : device.setUniform(prop.name, param); + }; + _proto._draw = function _draw(item) { + var device = this._device; + var programLib = this._programLib; + var node = item.node, ia = item.ia, passes = item.passes, effect = item.effect; + _float2_pool.reset(); + _float3_pool.reset(); + _float4_pool.reset(); + _float9_pool.reset(); + _float16_pool.reset(); + _float64_pool.reset(); + _int2_pool.reset(); + _int3_pool.reset(); + _int4_pool.reset(); + _int64_pool.reset(); + node.getWorldMatrix(_m4_tmp); + device.setUniform("cc_matWorld", _valueTypes.Mat4.toArray(_float16_pool.add(), _m4_tmp)); + _valueTypes.Mat4.invert(_m4_tmp, _m4_tmp); + _valueTypes.Mat4.transpose(_m4_tmp, _m4_tmp); + device.setUniform("cc_matWorldIT", _valueTypes.Mat4.toArray(_float16_pool.add(), _m4_tmp)); + var defines = this._defines; + for (var i = 0; i < passes.length; ++i) { + var pass = passes[i]; + this._definesChanged && (pass._programKey = null); + var count = ia.count; + ia._vertexBuffer && device.setVertexBuffer(0, ia._vertexBuffer); + ia._indexBuffer && device.setIndexBuffer(ia._indexBuffer); + device.setPrimitiveType(ia._primitiveType); + Object.setPrototypeOf(defines, pass._defines); + var program = programLib.getProgram(pass, defines, effect.name); + device.setProgram(program); + var uniforms = program._uniforms; + var variants = pass._properties; + for (var j = 0; j < uniforms.length; j++) { + var prop = variants[uniforms[j].name]; + void 0 !== prop && this._setProperty(prop); + } + device.setCullMode(pass._cullMode); + if (pass._blend) { + device.enableBlend(); + device.setBlendFuncSep(pass._blendSrc, pass._blendDst, pass._blendSrcAlpha, pass._blendDstAlpha); + device.setBlendEqSep(pass._blendEq, pass._blendAlphaEq); + device.setBlendColor32(pass._blendColor); + } + if (pass._depthTest) { + device.enableDepthTest(); + device.setDepthFunc(pass._depthFunc); + } + pass._depthWrite && device.enableDepthWrite(); + device.setStencilTest(pass._stencilTest); + if (pass._stencilTest === _gfx["default"].STENCIL_ENABLE) { + device.setStencilFuncFront(pass._stencilFuncFront, pass._stencilRefFront, pass._stencilMaskFront); + device.setStencilOpFront(pass._stencilFailOpFront, pass._stencilZFailOpFront, pass._stencilZPassOpFront, pass._stencilWriteMaskFront); + device.setStencilFuncBack(pass._stencilFuncBack, pass._stencilRefBack, pass._stencilMaskBack); + device.setStencilOpBack(pass._stencilFailOpBack, pass._stencilZFailOpBack, pass._stencilZPassOpBack, pass._stencilWriteMaskBack); + } + device.draw(ia._start, count); + this._resetTextuerUnit(); + } + }; + return Base; + })(); + exports["default"] = Base; + module.exports = exports["default"]; + }), { + "../../core/value-types": 220, + "../enums": 242, + "../gfx": 247, + "../memop": 259, + "./program-lib": 239, + "./view": 241 + } ], + 237: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _gfx = _interopRequireDefault(require("../gfx")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + var InputAssembler = (function() { + function InputAssembler(vb, ib, pt) { + void 0 === pt && (pt = _gfx["default"].PT_TRIANGLES); + this._vertexBuffer = vb; + this._indexBuffer = ib; + this._primitiveType = pt; + this._start = 0; + this._count = -1; + } + _createClass(InputAssembler, [ { + key: "count", + get: function get() { + if (-1 !== this._count) return this._count; + if (this._indexBuffer) return this._indexBuffer.count; + if (this._vertexBuffer) return this._vertexBuffer.count; + return 0; + } + } ]); + return InputAssembler; + })(); + exports["default"] = InputAssembler; + module.exports = exports["default"]; + }), { + "../gfx": 247 + } ], + 238: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _gfx = _interopRequireDefault(require("../gfx")); + var _enums = _interopRequireDefault(require("../enums")); + var _valueType = _interopRequireDefault(require("../../core/value-types/value-type")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var Pass = (function() { + function Pass(name, detailName, programName, stage, properties, defines) { + void 0 === properties && (properties = {}); + void 0 === defines && (defines = {}); + this._name = name; + this._detailName = detailName; + this._programName = programName; + this._programKey = null; + this._stage = stage; + this._properties = properties; + this._defines = defines; + this._cullMode = _gfx["default"].CULL_BACK; + this._blend = false; + this._blendEq = _gfx["default"].BLEND_FUNC_ADD; + this._blendAlphaEq = _gfx["default"].BLEND_FUNC_ADD; + this._blendSrc = _gfx["default"].BLEND_SRC_ALPHA; + this._blendDst = _gfx["default"].BLEND_ONE_MINUS_SRC_ALPHA; + this._blendSrcAlpha = _gfx["default"].BLEND_SRC_ALPHA; + this._blendDstAlpha = _gfx["default"].BLEND_ONE_MINUS_SRC_ALPHA; + this._blendColor = 4294967295; + this._depthTest = false; + this._depthWrite = false; + this._depthFunc = _gfx["default"].DS_FUNC_LESS, this._stencilTest = _gfx["default"].STENCIL_INHERIT; + this._stencilFuncFront = _gfx["default"].DS_FUNC_ALWAYS; + this._stencilRefFront = 0; + this._stencilMaskFront = 255; + this._stencilFailOpFront = _gfx["default"].STENCIL_OP_KEEP; + this._stencilZFailOpFront = _gfx["default"].STENCIL_OP_KEEP; + this._stencilZPassOpFront = _gfx["default"].STENCIL_OP_KEEP; + this._stencilWriteMaskFront = 255; + this._stencilFuncBack = _gfx["default"].DS_FUNC_ALWAYS; + this._stencilRefBack = 0; + this._stencilMaskBack = 255; + this._stencilFailOpBack = _gfx["default"].STENCIL_OP_KEEP; + this._stencilZFailOpBack = _gfx["default"].STENCIL_OP_KEEP; + this._stencilZPassOpBack = _gfx["default"].STENCIL_OP_KEEP; + this._stencilWriteMaskBack = 255; + } + var _proto = Pass.prototype; + _proto.setCullMode = function setCullMode(cullMode) { + void 0 === cullMode && (cullMode = _gfx["default"].CULL_BACK); + this._cullMode = cullMode; + }; + _proto.setBlend = function setBlend(enabled, blendEq, blendSrc, blendDst, blendAlphaEq, blendSrcAlpha, blendDstAlpha, blendColor) { + void 0 === enabled && (enabled = false); + void 0 === blendEq && (blendEq = _gfx["default"].BLEND_FUNC_ADD); + void 0 === blendSrc && (blendSrc = _gfx["default"].BLEND_SRC_ALPHA); + void 0 === blendDst && (blendDst = _gfx["default"].BLEND_ONE_MINUS_SRC_ALPHA); + void 0 === blendAlphaEq && (blendAlphaEq = _gfx["default"].BLEND_FUNC_ADD); + void 0 === blendSrcAlpha && (blendSrcAlpha = _gfx["default"].BLEND_SRC_ALPHA); + void 0 === blendDstAlpha && (blendDstAlpha = _gfx["default"].BLEND_ONE_MINUS_SRC_ALPHA); + void 0 === blendColor && (blendColor = 4294967295); + this._blend = enabled; + this._blendEq = blendEq; + this._blendSrc = blendSrc; + this._blendDst = blendDst; + this._blendAlphaEq = blendAlphaEq; + this._blendSrcAlpha = blendSrcAlpha; + this._blendDstAlpha = blendDstAlpha; + this._blendColor = blendColor; + }; + _proto.setDepth = function setDepth(depthTest, depthWrite, depthFunc) { + void 0 === depthTest && (depthTest = false); + void 0 === depthWrite && (depthWrite = false); + void 0 === depthFunc && (depthFunc = _gfx["default"].DS_FUNC_LESS); + this._depthTest = depthTest; + this._depthWrite = depthWrite; + this._depthFunc = depthFunc; + }; + _proto.setStencilFront = function setStencilFront(enabled, stencilFunc, stencilRef, stencilMask, stencilFailOp, stencilZFailOp, stencilZPassOp, stencilWriteMask) { + void 0 === enabled && (enabled = _gfx["default"].STENCIL_INHERIT); + void 0 === stencilFunc && (stencilFunc = _gfx["default"].DS_FUNC_ALWAYS); + void 0 === stencilRef && (stencilRef = 0); + void 0 === stencilMask && (stencilMask = 255); + void 0 === stencilFailOp && (stencilFailOp = _gfx["default"].STENCIL_OP_KEEP); + void 0 === stencilZFailOp && (stencilZFailOp = _gfx["default"].STENCIL_OP_KEEP); + void 0 === stencilZPassOp && (stencilZPassOp = _gfx["default"].STENCIL_OP_KEEP); + void 0 === stencilWriteMask && (stencilWriteMask = 255); + this._stencilTest = enabled; + this._stencilFuncFront = stencilFunc; + this._stencilRefFront = stencilRef; + this._stencilMaskFront = stencilMask; + this._stencilFailOpFront = stencilFailOp; + this._stencilZFailOpFront = stencilZFailOp; + this._stencilZPassOpFront = stencilZPassOp; + this._stencilWriteMaskFront = stencilWriteMask; + }; + _proto.setStencilEnabled = function setStencilEnabled(stencilTest) { + void 0 === stencilTest && (stencilTest = _gfx["default"].STENCIL_INHERIT); + this._stencilTest = stencilTest; + }; + _proto.setStencilBack = function setStencilBack(stencilTest, stencilFunc, stencilRef, stencilMask, stencilFailOp, stencilZFailOp, stencilZPassOp, stencilWriteMask) { + void 0 === stencilTest && (stencilTest = _gfx["default"].STENCIL_INHERIT); + void 0 === stencilFunc && (stencilFunc = _gfx["default"].DS_FUNC_ALWAYS); + void 0 === stencilRef && (stencilRef = 0); + void 0 === stencilMask && (stencilMask = 255); + void 0 === stencilFailOp && (stencilFailOp = _gfx["default"].STENCIL_OP_KEEP); + void 0 === stencilZFailOp && (stencilZFailOp = _gfx["default"].STENCIL_OP_KEEP); + void 0 === stencilZPassOp && (stencilZPassOp = _gfx["default"].STENCIL_OP_KEEP); + void 0 === stencilWriteMask && (stencilWriteMask = 255); + this._stencilTest = stencilTest; + this._stencilFuncBack = stencilFunc; + this._stencilRefBack = stencilRef; + this._stencilMaskBack = stencilMask; + this._stencilFailOpBack = stencilFailOp; + this._stencilZFailOpBack = stencilZFailOp; + this._stencilZPassOpBack = stencilZPassOp; + this._stencilWriteMaskBack = stencilWriteMask; + }; + _proto.setStage = function setStage(stage) { + this._stage = stage; + }; + _proto.setProperties = function setProperties(properties) { + this._properties = properties; + }; + _proto.getProperty = function getProperty(name) { + if (!this._properties[name]) return; + return this._properties[name].value; + }; + _proto.setProperty = function setProperty(name, value, directly) { + var prop = this._properties[name]; + if (!prop) return false; + prop.directly = directly; + if (Array.isArray(value)) { + var array = prop.value; + if (array.length !== value.length) { + cc.warnID(9105, this._name, name); + return; + } + for (var i = 0; i < value.length; i++) array[i] = value[i]; + } else if (value && !ArrayBuffer.isView(value)) if (prop.type === _enums["default"].PARAM_TEXTURE_2D) prop.value = value.getImpl(); else if (value instanceof _valueType["default"]) value.constructor.toArray(prop.value, value); else { + "object" === typeof value && cc.warnID(9106, this._name, name); + prop.value = value; + } else prop.value = value; + return true; + }; + _proto.getDefine = function getDefine(name) { + return this._defines[name]; + }; + _proto.define = function define(name, value, force) { + var oldValue = this._defines[name]; + if (!force && void 0 === oldValue) return false; + if (oldValue !== value) { + this._defines[name] = value; + this._programKey = null; + } + return true; + }; + _proto.clone = function clone() { + var pass = new Pass(this._programName); + Object.assign(pass, this); + var newProperties = {}; + var properties = this._properties; + for (var name in properties) { + var prop = properties[name]; + var newProp = newProperties[name] = {}; + var value = prop.value; + Array.isArray(value) ? newProp.value = value.concat() : ArrayBuffer.isView(value) ? newProp.value = new value.__proto__.constructor(value) : newProp.value = value; + for (var _name in prop) { + if ("value" === _name) continue; + newProp[_name] = prop[_name]; + } + } + pass._properties = newProperties; + pass._defines = Object.assign({}, this._defines); + return pass; + }; + return Pass; + })(); + exports["default"] = Pass; + module.exports = exports["default"]; + }), { + "../../core/value-types/value-type": 228, + "../enums": 242, + "../gfx": 247 + } ], + 239: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _gfx = _interopRequireDefault(require("../gfx")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var _shdID = 0; + function _generateDefines(tmpDefines, defines) { + var results = []; + for (var i = 0; i < tmpDefines.length; i++) { + var name = tmpDefines[i].name; + var value = defines[name]; + "number" !== typeof value && (value = value ? 1 : 0); + results.push("#define " + name + " " + value); + } + return results.join("\n") + "\n"; + } + function _replaceMacroNums(string, tmpDefines, defines) { + var tmp = string; + for (var i = 0; i < tmpDefines.length; i++) { + var name = tmpDefines[i].name; + var value = defines[name]; + if (Number.isInteger(value)) { + var reg = new RegExp(name, "g"); + tmp = tmp.replace(reg, value); + } + } + return tmp; + } + function _unrollLoops(string) { + var pattern = /#pragma for (\w+) in range\(\s*(\d+)\s*,\s*(\d+)\s*\)([\s\S]+?)#pragma endFor/g; + function replace(match, index, begin, end, snippet) { + var unroll = ""; + var parsedBegin = parseInt(begin); + var parsedEnd = parseInt(end); + (parsedBegin.isNaN || parsedEnd.isNaN) && console.error("Unroll For Loops Error: begin and end of range must be an int num."); + for (var i = parsedBegin; i < parsedEnd; ++i) unroll += snippet.replace(new RegExp("{" + index + "}", "g"), i); + return unroll; + } + return string.replace(pattern, replace); + } + function _replaceHighp(string) { + return string.replace(/\bhighp\b/g, "mediump"); + } + var ProgramLib = (function() { + function ProgramLib(device) { + this._device = device; + this._templates = {}; + this._cache = {}; + this._checkPrecision(); + } + var _proto = ProgramLib.prototype; + _proto.clear = function clear() { + this._templates = {}; + this._cache = {}; + }; + _proto.define = function define(prog) { + var name = prog.name, defines = prog.defines, glsl1 = prog.glsl1; + var _ref = glsl1 || prog, vert = _ref.vert, frag = _ref.frag; + if (this._templates[name]) return; + var id = ++_shdID; + var offset = 0; + for (var i = 0; i < defines.length; ++i) { + var def = defines[i]; + var cnt = 1; + if ("number" === def.type) { + var range = def.range || []; + def.min = range[0] || 0; + def.max = range[1] || 4; + cnt = Math.ceil(Math.log2(def.max - def.min)); + def._map = function(value) { + return value - this.min << this._offset; + }.bind(def); + } else def._map = function(value) { + if (value) return 1 << this._offset; + return 0; + }.bind(def); + def._offset = offset; + offset += cnt; + } + var uniforms = prog.uniforms || []; + if (prog.samplers) for (var _i = 0; _i < prog.samplers.length; _i++) uniforms.push(prog.samplers[_i]); + if (prog.blocks) for (var _i2 = 0; _i2 < prog.blocks.length; _i2++) { + var _defines = prog.blocks[_i2].defines; + var members = prog.blocks[_i2].members; + for (var j = 0; j < members.length; j++) uniforms.push({ + defines: _defines, + name: members[j].name, + type: members[j].type + }); + } + this._templates[name] = { + id: id, + name: name, + vert: vert, + frag: frag, + defines: defines, + attributes: prog.attributes, + uniforms: uniforms, + extensions: prog.extensions + }; + }; + _proto.getTemplate = function getTemplate(name) { + return this._templates[name]; + }; + _proto.hasProgram = function hasProgram(name) { + return void 0 !== this._templates[name]; + }; + _proto.getKey = function getKey(name, defines) { + var tmpl = this._templates[name]; + var key = 0; + for (var i = 0; i < tmpl.defines.length; ++i) { + var tmplDefs = tmpl.defines[i]; + var value = defines[tmplDefs.name]; + if (void 0 === value) continue; + key |= tmplDefs._map(value); + } + return tmpl.id + ":" + key; + }; + _proto.getProgram = function getProgram(pass, defines, errPrefix) { + var key = pass._programKey = pass._programKey || this.getKey(pass._programName, defines); + var program = this._cache[key]; + if (program) return program; + var tmpl = this._templates[pass._programName]; + var customDef = _generateDefines(tmpl.defines, defines); + var vert = _replaceMacroNums(tmpl.vert, tmpl.defines, defines); + vert = customDef + _unrollLoops(vert); + this._highpSupported || (vert = _replaceHighp(vert)); + var frag = _replaceMacroNums(tmpl.frag, tmpl.defines, defines); + frag = customDef + _unrollLoops(frag); + this._highpSupported || (frag = _replaceHighp(frag)); + program = new _gfx["default"].Program(this._device, { + vert: vert, + frag: frag + }); + var errors = program.link(); + if (errors) { + var vertLines = vert.split("\n"); + var fragLines = frag.split("\n"); + var defineLength = tmpl.defines.length; + errors.forEach((function(err) { + var line = err.line - 1; + var originLine = err.line - defineLength; + var lines = "vs" === err.type ? vertLines : fragLines; + var source = lines[line]; + var info = err.info || "Failed to compile " + err.type + " " + err.fileID + " (ln " + originLine + "): \n " + err.message + ": \n " + source; + cc.error(errPrefix + " : " + info); + })); + } + this._cache[key] = program; + return program; + }; + _proto._checkPrecision = function _checkPrecision() { + var gl = this._device._gl; + var highpSupported = false; + if (gl.getShaderPrecisionFormat) { + var vertHighp = gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_FLOAT); + var fragHighp = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT); + highpSupported = vertHighp && vertHighp.precision > 0 && fragHighp && fragHighp.precision > 0; + } + highpSupported || cc.warnID(9102); + this._highpSupported = highpSupported; + }; + return ProgramLib; + })(); + exports["default"] = ProgramLib; + module.exports = exports["default"]; + }), { + "../gfx": 247 + } ], + 240: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + var Technique = (function() { + function Technique(name, passes) { + this._name = name; + this._passes = passes; + } + var _proto = Technique.prototype; + _proto.clone = function clone() { + var passes = []; + for (var i = 0; i < this._passes.length; i++) passes.push(this._passes[i].clone()); + return new Technique(this._name, passes); + }; + _createClass(Technique, [ { + key: "name", + get: function get() { + return this._name; + } + }, { + key: "passes", + get: function get() { + return this._passes; + } + } ]); + return Technique; + })(); + exports["default"] = Technique; + module.exports = exports["default"]; + }), {} ], + 241: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _valueTypes = require("../../core/value-types"); + var _enums = _interopRequireDefault(require("../enums")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var _m4_tmp = new _valueTypes.Mat4(); + var _genID = 0; + var View = (function() { + function View() { + this._id = _genID++; + this._priority = 0; + this._rect = { + x: 0, + y: 0, + w: 1, + h: 1 + }; + this._color = new _valueTypes.Vec4(.3, .3, .3, 1); + this._depth = 1; + this._stencil = 0; + this._clearFlags = _enums["default"].CLEAR_COLOR | _enums["default"].CLEAR_DEPTH; + this._clearModel = null; + this._matView = cc.mat4(); + this._matViewInv = cc.mat4(); + this._matProj = cc.mat4(); + this._matViewProj = cc.mat4(); + this._matInvViewProj = cc.mat4(); + this._stages = []; + this._cullingByID = false; + this._framebuffer = null; + this._shadowLight = null; + this._cullingMask = 4294967295; + } + var _proto = View.prototype; + _proto.getForward = function getForward(out) { + var m = this._matView.m; + return _valueTypes.Vec3.set(out, -m[2], -m[6], -m[10]); + }; + _proto.getPosition = function getPosition(out) { + _valueTypes.Mat4.invert(_m4_tmp, this._matView); + return _valueTypes.Mat4.getTranslation(out, _m4_tmp); + }; + return View; + })(); + exports["default"] = View; + module.exports = exports["default"]; + }), { + "../../core/value-types": 220, + "../enums": 242 + } ], + 242: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _mappings = require("./build/mappings"); + var _default = { + PROJ_PERSPECTIVE: 0, + PROJ_ORTHO: 1, + LIGHT_DIRECTIONAL: 0, + LIGHT_POINT: 1, + LIGHT_SPOT: 2, + LIGHT_AMBIENT: 3, + SHADOW_NONE: 0, + SHADOW_HARD: 1, + SHADOW_SOFT: 2, + PARAM_INT: _mappings.typeMap["int"], + PARAM_INT2: _mappings.typeMap.ivec2, + PARAM_INT3: _mappings.typeMap.ivec3, + PARAM_INT4: _mappings.typeMap.ivec4, + PARAM_FLOAT: _mappings.typeMap["float"], + PARAM_FLOAT2: _mappings.typeMap.vec2, + PARAM_FLOAT3: _mappings.typeMap.vec3, + PARAM_FLOAT4: _mappings.typeMap.vec4, + PARAM_MAT2: _mappings.typeMap.mat2, + PARAM_MAT3: _mappings.typeMap.mat3, + PARAM_MAT4: _mappings.typeMap.mat4, + PARAM_TEXTURE_2D: _mappings.typeMap.sampler2D, + PARAM_TEXTURE_CUBE: _mappings.typeMap.samplerCube, + CLEAR_COLOR: 1, + CLEAR_DEPTH: 2, + CLEAR_STENCIL: 4, + CLEAR_SKYBOX: 8, + BUFFER_VIEW_INT8: 0, + BUFFER_VIEW_UINT8: 1, + BUFFER_VIEW_INT16: 2, + BUFFER_VIEW_UINT16: 3, + BUFFER_VIEW_INT32: 4, + BUFFER_VIEW_UINT32: 5, + BUFFER_VIEW_FLOAT32: 6 + }; + exports["default"] = _default; + module.exports = exports["default"]; + }), { + "./build/mappings": 235 + } ], + 243: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _state = _interopRequireDefault(require("./state")); + var _enums = require("./enums"); + var _texture2d = _interopRequireDefault(require("./texture-2d")); + var _textureCube = _interopRequireDefault(require("./texture-cube")); + var _type2uniformCommit2, _type2uniformArrayCom; + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + var GL_INT = 5124; + var GL_FLOAT = 5126; + var GL_FLOAT_VEC2 = 35664; + var GL_FLOAT_VEC3 = 35665; + var GL_FLOAT_VEC4 = 35666; + var GL_INT_VEC2 = 35667; + var GL_INT_VEC3 = 35668; + var GL_INT_VEC4 = 35669; + var GL_BOOL = 35670; + var GL_BOOL_VEC2 = 35671; + var GL_BOOL_VEC3 = 35672; + var GL_BOOL_VEC4 = 35673; + var GL_FLOAT_MAT2 = 35674; + var GL_FLOAT_MAT3 = 35675; + var GL_FLOAT_MAT4 = 35676; + var GL_SAMPLER_2D = 35678; + var GL_SAMPLER_CUBE = 35680; + var _type2uniformCommit = (_type2uniformCommit2 = {}, _type2uniformCommit2[GL_INT] = function(gl, id, value) { + gl.uniform1i(id, value); + }, _type2uniformCommit2[GL_FLOAT] = function(gl, id, value) { + gl.uniform1f(id, value); + }, _type2uniformCommit2[GL_FLOAT_VEC2] = function(gl, id, value) { + gl.uniform2fv(id, value); + }, _type2uniformCommit2[GL_FLOAT_VEC3] = function(gl, id, value) { + gl.uniform3fv(id, value); + }, _type2uniformCommit2[GL_FLOAT_VEC4] = function(gl, id, value) { + gl.uniform4fv(id, value); + }, _type2uniformCommit2[GL_INT_VEC2] = function(gl, id, value) { + gl.uniform2iv(id, value); + }, _type2uniformCommit2[GL_INT_VEC3] = function(gl, id, value) { + gl.uniform3iv(id, value); + }, _type2uniformCommit2[GL_INT_VEC4] = function(gl, id, value) { + gl.uniform4iv(id, value); + }, _type2uniformCommit2[GL_BOOL] = function(gl, id, value) { + gl.uniform1i(id, value); + }, _type2uniformCommit2[GL_BOOL_VEC2] = function(gl, id, value) { + gl.uniform2iv(id, value); + }, _type2uniformCommit2[GL_BOOL_VEC3] = function(gl, id, value) { + gl.uniform3iv(id, value); + }, _type2uniformCommit2[GL_BOOL_VEC4] = function(gl, id, value) { + gl.uniform4iv(id, value); + }, _type2uniformCommit2[GL_FLOAT_MAT2] = function(gl, id, value) { + gl.uniformMatrix2fv(id, false, value); + }, _type2uniformCommit2[GL_FLOAT_MAT3] = function(gl, id, value) { + gl.uniformMatrix3fv(id, false, value); + }, _type2uniformCommit2[GL_FLOAT_MAT4] = function(gl, id, value) { + gl.uniformMatrix4fv(id, false, value); + }, _type2uniformCommit2[GL_SAMPLER_2D] = function(gl, id, value) { + gl.uniform1i(id, value); + }, _type2uniformCommit2[GL_SAMPLER_CUBE] = function(gl, id, value) { + gl.uniform1i(id, value); + }, _type2uniformCommit2); + var _type2uniformArrayCommit = (_type2uniformArrayCom = {}, _type2uniformArrayCom[GL_INT] = function(gl, id, value) { + gl.uniform1iv(id, value); + }, _type2uniformArrayCom[GL_FLOAT] = function(gl, id, value) { + gl.uniform1fv(id, value); + }, _type2uniformArrayCom[GL_FLOAT_VEC2] = function(gl, id, value) { + gl.uniform2fv(id, value); + }, _type2uniformArrayCom[GL_FLOAT_VEC3] = function(gl, id, value) { + gl.uniform3fv(id, value); + }, _type2uniformArrayCom[GL_FLOAT_VEC4] = function(gl, id, value) { + gl.uniform4fv(id, value); + }, _type2uniformArrayCom[GL_INT_VEC2] = function(gl, id, value) { + gl.uniform2iv(id, value); + }, _type2uniformArrayCom[GL_INT_VEC3] = function(gl, id, value) { + gl.uniform3iv(id, value); + }, _type2uniformArrayCom[GL_INT_VEC4] = function(gl, id, value) { + gl.uniform4iv(id, value); + }, _type2uniformArrayCom[GL_BOOL] = function(gl, id, value) { + gl.uniform1iv(id, value); + }, _type2uniformArrayCom[GL_BOOL_VEC2] = function(gl, id, value) { + gl.uniform2iv(id, value); + }, _type2uniformArrayCom[GL_BOOL_VEC3] = function(gl, id, value) { + gl.uniform3iv(id, value); + }, _type2uniformArrayCom[GL_BOOL_VEC4] = function(gl, id, value) { + gl.uniform4iv(id, value); + }, _type2uniformArrayCom[GL_FLOAT_MAT2] = function(gl, id, value) { + gl.uniformMatrix2fv(id, false, value); + }, _type2uniformArrayCom[GL_FLOAT_MAT3] = function(gl, id, value) { + gl.uniformMatrix3fv(id, false, value); + }, _type2uniformArrayCom[GL_FLOAT_MAT4] = function(gl, id, value) { + gl.uniformMatrix4fv(id, false, value); + }, _type2uniformArrayCom[GL_SAMPLER_2D] = function(gl, id, value) { + gl.uniform1iv(id, value); + }, _type2uniformArrayCom[GL_SAMPLER_CUBE] = function(gl, id, value) { + gl.uniform1iv(id, value); + }, _type2uniformArrayCom); + function _commitBlendStates(gl, cur, next) { + if (cur.blend !== next.blend) { + if (!next.blend) { + gl.disable(gl.BLEND); + return; + } + gl.enable(gl.BLEND); + next.blendSrc !== _enums.enums.BLEND_CONSTANT_COLOR && next.blendSrc !== _enums.enums.BLEND_ONE_MINUS_CONSTANT_COLOR && next.blendDst !== _enums.enums.BLEND_CONSTANT_COLOR && next.blendDst !== _enums.enums.BLEND_ONE_MINUS_CONSTANT_COLOR || gl.blendColor((next.blendColor >> 24) / 255, (next.blendColor >> 16 & 255) / 255, (next.blendColor >> 8 & 255) / 255, (255 & next.blendColor) / 255); + if (next.blendSep) { + gl.blendFuncSeparate(next.blendSrc, next.blendDst, next.blendSrcAlpha, next.blendDstAlpha); + gl.blendEquationSeparate(next.blendEq, next.blendAlphaEq); + } else { + gl.blendFunc(next.blendSrc, next.blendDst); + gl.blendEquation(next.blendEq); + } + return; + } + if (false === next.blend) return; + cur.blendColor !== next.blendColor && gl.blendColor((next.blendColor >> 24) / 255, (next.blendColor >> 16 & 255) / 255, (next.blendColor >> 8 & 255) / 255, (255 & next.blendColor) / 255); + if (cur.blendSep !== next.blendSep) { + if (next.blendSep) { + gl.blendFuncSeparate(next.blendSrc, next.blendDst, next.blendSrcAlpha, next.blendDstAlpha); + gl.blendEquationSeparate(next.blendEq, next.blendAlphaEq); + } else { + gl.blendFunc(next.blendSrc, next.blendDst); + gl.blendEquation(next.blendEq); + } + return; + } + if (next.blendSep) { + cur.blendSrc === next.blendSrc && cur.blendDst === next.blendDst && cur.blendSrcAlpha === next.blendSrcAlpha && cur.blendDstAlpha === next.blendDstAlpha || gl.blendFuncSeparate(next.blendSrc, next.blendDst, next.blendSrcAlpha, next.blendDstAlpha); + cur.blendEq === next.blendEq && cur.blendAlphaEq === next.blendAlphaEq || gl.blendEquationSeparate(next.blendEq, next.blendAlphaEq); + } else { + cur.blendSrc === next.blendSrc && cur.blendDst === next.blendDst || gl.blendFunc(next.blendSrc, next.blendDst); + cur.blendEq !== next.blendEq && gl.blendEquation(next.blendEq); + } + } + function _commitDepthStates(gl, cur, next) { + if (cur.depthTest !== next.depthTest) { + if (!next.depthTest) { + gl.disable(gl.DEPTH_TEST); + return; + } + gl.enable(gl.DEPTH_TEST); + gl.depthFunc(next.depthFunc); + gl.depthMask(next.depthWrite); + return; + } + cur.depthWrite !== next.depthWrite && gl.depthMask(next.depthWrite); + if (false === next.depthTest) { + if (next.depthWrite) { + next.depthTest = true; + next.depthFunc = _enums.enums.DS_FUNC_ALWAYS; + gl.enable(gl.DEPTH_TEST); + gl.depthFunc(next.depthFunc); + } + return; + } + cur.depthFunc !== next.depthFunc && gl.depthFunc(next.depthFunc); + } + function _commitStencilStates(gl, cur, next) { + if (next.stencilTest === _enums.enums.STENCIL_INHERIT) return; + if (next.stencilTest !== cur.stencilTest) { + if (next.stencilTest === _enums.enums.STENCIL_DISABLE) { + gl.disable(gl.STENCIL_TEST); + return; + } + gl.enable(gl.STENCIL_TEST); + if (next.stencilSep) { + gl.stencilFuncSeparate(gl.FRONT, next.stencilFuncFront, next.stencilRefFront, next.stencilMaskFront); + gl.stencilMaskSeparate(gl.FRONT, next.stencilWriteMaskFront); + gl.stencilOpSeparate(gl.FRONT, next.stencilFailOpFront, next.stencilZFailOpFront, next.stencilZPassOpFront); + gl.stencilFuncSeparate(gl.BACK, next.stencilFuncBack, next.stencilRefBack, next.stencilMaskBack); + gl.stencilMaskSeparate(gl.BACK, next.stencilWriteMaskBack); + gl.stencilOpSeparate(gl.BACK, next.stencilFailOpBack, next.stencilZFailOpBack, next.stencilZPassOpBack); + } else { + gl.stencilFunc(next.stencilFuncFront, next.stencilRefFront, next.stencilMaskFront); + gl.stencilMask(next.stencilWriteMaskFront); + gl.stencilOp(next.stencilFailOpFront, next.stencilZFailOpFront, next.stencilZPassOpFront); + } + return; + } + if (next.stencilTest === _enums.enums.STENCIL_DISABLE) return; + if (cur.stencilSep !== next.stencilSep) { + if (next.stencilSep) { + gl.stencilFuncSeparate(gl.FRONT, next.stencilFuncFront, next.stencilRefFront, next.stencilMaskFront); + gl.stencilMaskSeparate(gl.FRONT, next.stencilWriteMaskFront); + gl.stencilOpSeparate(gl.FRONT, next.stencilFailOpFront, next.stencilZFailOpFront, next.stencilZPassOpFront); + gl.stencilFuncSeparate(gl.BACK, next.stencilFuncBack, next.stencilRefBack, next.stencilMaskBack); + gl.stencilMaskSeparate(gl.BACK, next.stencilWriteMaskBack); + gl.stencilOpSeparate(gl.BACK, next.stencilFailOpBack, next.stencilZFailOpBack, next.stencilZPassOpBack); + } else { + gl.stencilFunc(next.stencilFuncFront, next.stencilRefFront, next.stencilMaskFront); + gl.stencilMask(next.stencilWriteMaskFront); + gl.stencilOp(next.stencilFailOpFront, next.stencilZFailOpFront, next.stencilZPassOpFront); + } + return; + } + if (next.stencilSep) { + cur.stencilFuncFront === next.stencilFuncFront && cur.stencilRefFront === next.stencilRefFront && cur.stencilMaskFront === next.stencilMaskFront || gl.stencilFuncSeparate(gl.FRONT, next.stencilFuncFront, next.stencilRefFront, next.stencilMaskFront); + cur.stencilWriteMaskFront !== next.stencilWriteMaskFront && gl.stencilMaskSeparate(gl.FRONT, next.stencilWriteMaskFront); + cur.stencilFailOpFront === next.stencilFailOpFront && cur.stencilZFailOpFront === next.stencilZFailOpFront && cur.stencilZPassOpFront === next.stencilZPassOpFront || gl.stencilOpSeparate(gl.FRONT, next.stencilFailOpFront, next.stencilZFailOpFront, next.stencilZPassOpFront); + cur.stencilFuncBack === next.stencilFuncBack && cur.stencilRefBack === next.stencilRefBack && cur.stencilMaskBack === next.stencilMaskBack || gl.stencilFuncSeparate(gl.BACK, next.stencilFuncBack, next.stencilRefBack, next.stencilMaskBack); + cur.stencilWriteMaskBack !== next.stencilWriteMaskBack && gl.stencilMaskSeparate(gl.BACK, next.stencilWriteMaskBack); + cur.stencilFailOpBack === next.stencilFailOpBack && cur.stencilZFailOpBack === next.stencilZFailOpBack && cur.stencilZPassOpBack === next.stencilZPassOpBack || gl.stencilOpSeparate(gl.BACK, next.stencilFailOpBack, next.stencilZFailOpBack, next.stencilZPassOpBack); + } else { + cur.stencilFuncFront === next.stencilFuncFront && cur.stencilRefFront === next.stencilRefFront && cur.stencilMaskFront === next.stencilMaskFront || gl.stencilFunc(next.stencilFuncFront, next.stencilRefFront, next.stencilMaskFront); + cur.stencilWriteMaskFront !== next.stencilWriteMaskFront && gl.stencilMask(next.stencilWriteMaskFront); + cur.stencilFailOpFront === next.stencilFailOpFront && cur.stencilZFailOpFront === next.stencilZFailOpFront && cur.stencilZPassOpFront === next.stencilZPassOpFront || gl.stencilOp(next.stencilFailOpFront, next.stencilZFailOpFront, next.stencilZPassOpFront); + } + } + function _commitCullMode(gl, cur, next) { + if (cur.cullMode === next.cullMode) return; + if (next.cullMode === _enums.enums.CULL_NONE) { + gl.disable(gl.CULL_FACE); + return; + } + gl.enable(gl.CULL_FACE); + gl.cullFace(next.cullMode); + } + function _commitVertexBuffers(device, gl, cur, next) { + var attrsDirty = false; + if (-1 === next.maxStream) return; + if (cur.maxStream !== next.maxStream) attrsDirty = true; else if (cur.program !== next.program) attrsDirty = true; else for (var i = 0; i < next.maxStream + 1; ++i) if (cur.vertexBuffers[i] !== next.vertexBuffers[i] || cur.vertexBufferOffsets[i] !== next.vertexBufferOffsets[i]) { + attrsDirty = true; + break; + } + if (attrsDirty) { + for (var _i = 0; _i < device._caps.maxVertexAttribs; ++_i) device._newAttributes[_i] = 0; + for (var _i2 = 0; _i2 < next.maxStream + 1; ++_i2) { + var vb = next.vertexBuffers[_i2]; + var vbOffset = next.vertexBufferOffsets[_i2]; + if (!vb || -1 === vb._glID) continue; + gl.bindBuffer(gl.ARRAY_BUFFER, vb._glID); + for (var j = 0; j < next.program._attributes.length; ++j) { + var attr = next.program._attributes[j]; + var el = vb._format.element(attr.name); + if (!el) { + console.warn("Can not find vertex attribute: " + attr.name); + continue; + } + if (0 === device._enabledAttributes[attr.location]) { + gl.enableVertexAttribArray(attr.location); + device._enabledAttributes[attr.location] = 1; + } + device._newAttributes[attr.location] = 1; + gl.vertexAttribPointer(attr.location, el.num, el.type, el.normalize, el.stride, el.offset + vbOffset * el.stride); + } + } + for (var _i3 = 0; _i3 < device._caps.maxVertexAttribs; ++_i3) if (device._enabledAttributes[_i3] !== device._newAttributes[_i3]) { + gl.disableVertexAttribArray(_i3); + device._enabledAttributes[_i3] = 0; + } + } + } + function _commitTextures(gl, cur, next) { + for (var i = 0; i < next.maxTextureSlot + 1; ++i) if (cur.textureUnits[i] !== next.textureUnits[i]) { + var texture = next.textureUnits[i]; + if (texture && -1 !== texture._glID) { + gl.activeTexture(gl.TEXTURE0 + i); + gl.bindTexture(texture._target, texture._glID); + } + } + } + function _attach(gl, location, attachment, face) { + void 0 === face && (face = 0); + attachment instanceof _texture2d["default"] ? gl.framebufferTexture2D(gl.FRAMEBUFFER, location, gl.TEXTURE_2D, attachment._glID, 0) : attachment instanceof _textureCube["default"] ? gl.framebufferTexture2D(gl.FRAMEBUFFER, location, gl.TEXTURE_CUBE_MAP_POSITIVE_X + face, attachment._glID, 0) : gl.framebufferRenderbuffer(gl.FRAMEBUFFER, location, gl.RENDERBUFFER, attachment._glID); + } + var Device = (function() { + function Device(canvasEL, opts) { + var gl; + opts = opts || {}; + void 0 === opts.alpha && (opts.alpha = false); + void 0 === opts.stencil && (opts.stencil = true); + void 0 === opts.depth && (opts.depth = true); + void 0 === opts.antialias && (opts.antialias = false); + void 0 === opts.preserveDrawingBuffer && (opts.preserveDrawingBuffer = false); + try { + gl = canvasEL.getContext("webgl", opts) || canvasEL.getContext("experimental-webgl", opts) || canvasEL.getContext("webkit-3d", opts) || canvasEL.getContext("moz-webgl", opts); + } catch (err) { + console.error(err); + return; + } + gl || console.error("This device does not support webgl"); + this._gl = gl; + this._extensions = {}; + this._caps = {}; + this._stats = { + texture: 0, + vb: 0, + ib: 0, + drawcalls: 0 + }; + this._initExtensions([ "EXT_texture_filter_anisotropic", "EXT_shader_texture_lod", "OES_standard_derivatives", "OES_texture_float", "OES_texture_float_linear", "OES_texture_half_float", "OES_texture_half_float_linear", "OES_vertex_array_object", "WEBGL_compressed_texture_atc", "WEBGL_compressed_texture_etc", "WEBGL_compressed_texture_etc1", "WEBGL_compressed_texture_pvrtc", "WEBGL_compressed_texture_s3tc", "WEBGL_depth_texture", "WEBGL_draw_buffers" ]); + this._initCaps(); + this._initStates(); + _state["default"].initDefault(this); + this._current = new _state["default"](this); + this._next = new _state["default"](this); + this._uniforms = {}; + this._vx = this._vy = this._vw = this._vh = 0; + this._sx = this._sy = this._sw = this._sh = 0; + this._framebuffer = null; + this._enabledAttributes = new Array(this._caps.maxVertexAttribs); + this._newAttributes = new Array(this._caps.maxVertexAttribs); + for (var i = 0; i < this._caps.maxVertexAttribs; ++i) { + this._enabledAttributes[i] = 0; + this._newAttributes[i] = 0; + } + } + var _proto = Device.prototype; + _proto._initExtensions = function _initExtensions(extensions) { + var gl = this._gl; + for (var i = 0; i < extensions.length; ++i) { + var name = extensions[i]; + var vendorPrefixes = [ "", "WEBKIT_", "MOZ_" ]; + for (var j = 0; j < vendorPrefixes.length; j++) try { + var ext = gl.getExtension(vendorPrefixes[j] + name); + if (ext) { + this._extensions[name] = ext; + break; + } + } catch (e) { + console.error(e); + } + } + }; + _proto._initCaps = function _initCaps() { + var gl = this._gl; + var extDrawBuffers = this.ext("WEBGL_draw_buffers"); + this._caps.maxVertexStreams = 4; + this._caps.maxVertexTextures = gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS); + this._caps.maxFragUniforms = gl.getParameter(gl.MAX_FRAGMENT_UNIFORM_VECTORS); + this._caps.maxTextureUnits = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS); + this._caps.maxVertexAttribs = gl.getParameter(gl.MAX_VERTEX_ATTRIBS); + this._caps.maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE); + this._caps.maxDrawBuffers = extDrawBuffers ? gl.getParameter(extDrawBuffers.MAX_DRAW_BUFFERS_WEBGL) : 1; + this._caps.maxColorAttachments = extDrawBuffers ? gl.getParameter(extDrawBuffers.MAX_COLOR_ATTACHMENTS_WEBGL) : 1; + }; + _proto._initStates = function _initStates() { + var gl = this._gl; + gl.disable(gl.BLEND); + gl.blendFunc(gl.ONE, gl.ZERO); + gl.blendEquation(gl.FUNC_ADD); + gl.blendColor(1, 1, 1, 1); + gl.colorMask(true, true, true, true); + gl.enable(gl.CULL_FACE); + gl.cullFace(gl.BACK); + gl.disable(gl.DEPTH_TEST); + gl.depthFunc(gl.LESS); + gl.depthMask(false); + gl.disable(gl.POLYGON_OFFSET_FILL); + gl.depthRange(0, 1); + gl.disable(gl.STENCIL_TEST); + gl.stencilFunc(gl.ALWAYS, 0, 255); + gl.stencilMask(255); + gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP); + gl.clearDepth(1); + gl.clearColor(0, 0, 0, 0); + gl.clearStencil(0); + gl.disable(gl.SCISSOR_TEST); + }; + _proto._restoreTexture = function _restoreTexture(unit) { + var gl = this._gl; + var texture = this._current.textureUnits[unit]; + texture && -1 !== texture._glID ? gl.bindTexture(texture._target, texture._glID) : gl.bindTexture(gl.TEXTURE_2D, null); + }; + _proto._restoreIndexBuffer = function _restoreIndexBuffer() { + var gl = this._gl; + var ib = this._current.indexBuffer; + ib && -1 !== ib._glID ? gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ib._glID) : gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null); + }; + _proto.ext = function ext(name) { + return this._extensions[name]; + }; + _proto.allowFloatTexture = function allowFloatTexture() { + return null != this.ext("OES_texture_float"); + }; + _proto.setFrameBuffer = function setFrameBuffer(fb) { + if (this._framebuffer === fb) return; + this._framebuffer = fb; + var gl = this._gl; + if (!fb) { + gl.bindFramebuffer(gl.FRAMEBUFFER, null); + return; + } + gl.bindFramebuffer(gl.FRAMEBUFFER, fb._glID); + var numColors = fb._colors.length; + for (var i = 0; i < numColors; ++i) { + var colorBuffer = fb._colors[i]; + _attach(gl, gl.COLOR_ATTACHMENT0 + i, colorBuffer); + } + for (var _i4 = numColors; _i4 < this._caps.maxColorAttachments; ++_i4) gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0 + _i4, gl.TEXTURE_2D, null, 0); + fb._depth && _attach(gl, gl.DEPTH_ATTACHMENT, fb._depth); + fb._stencil && _attach(gl, gl.STENCIL_ATTACHMENT, fb._stencil); + fb._depthStencil && _attach(gl, gl.DEPTH_STENCIL_ATTACHMENT, fb._depthStencil); + }; + _proto.setViewport = function setViewport(x, y, w, h) { + if (this._vx !== x || this._vy !== y || this._vw !== w || this._vh !== h) { + this._gl.viewport(x, y, w, h); + this._vx = x; + this._vy = y; + this._vw = w; + this._vh = h; + } + }; + _proto.setScissor = function setScissor(x, y, w, h) { + if (this._sx !== x || this._sy !== y || this._sw !== w || this._sh !== h) { + this._gl.scissor(x, y, w, h); + this._sx = x; + this._sy = y; + this._sw = w; + this._sh = h; + } + }; + _proto.clear = function clear(opts) { + if (void 0 === opts.color && void 0 === opts.depth && void 0 === opts.stencil) return; + var gl = this._gl; + var flags = 0; + if (void 0 !== opts.color) { + flags |= gl.COLOR_BUFFER_BIT; + gl.clearColor(opts.color[0], opts.color[1], opts.color[2], opts.color[3]); + } + if (void 0 !== opts.depth) { + flags |= gl.DEPTH_BUFFER_BIT; + gl.clearDepth(opts.depth); + gl.enable(gl.DEPTH_TEST); + gl.depthMask(true); + gl.depthFunc(gl.ALWAYS); + } + if (void 0 !== opts.stencil) { + flags |= gl.STENCIL_BUFFER_BIT; + gl.clearStencil(opts.stencil); + } + gl.clear(flags); + if (void 0 !== opts.depth) if (false === this._current.depthTest) gl.disable(gl.DEPTH_TEST); else { + false === this._current.depthWrite && gl.depthMask(false); + this._current.depthFunc !== _enums.enums.DS_FUNC_ALWAYS && gl.depthFunc(this._current.depthFunc); + } + }; + _proto.enableBlend = function enableBlend() { + this._next.blend = true; + }; + _proto.enableDepthTest = function enableDepthTest() { + this._next.depthTest = true; + }; + _proto.enableDepthWrite = function enableDepthWrite() { + this._next.depthWrite = true; + }; + _proto.setStencilTest = function setStencilTest(stencilTest) { + this._next.stencilTest = stencilTest; + }; + _proto.setStencilFunc = function setStencilFunc(func, ref, mask) { + this._next.stencilSep = false; + this._next.stencilFuncFront = this._next.stencilFuncBack = func; + this._next.stencilRefFront = this._next.stencilRefBack = ref; + this._next.stencilMaskFront = this._next.stencilMaskBack = mask; + }; + _proto.setStencilFuncFront = function setStencilFuncFront(func, ref, mask) { + this._next.stencilSep = true; + this._next.stencilFuncFront = func; + this._next.stencilRefFront = ref; + this._next.stencilMaskFront = mask; + }; + _proto.setStencilFuncBack = function setStencilFuncBack(func, ref, mask) { + this._next.stencilSep = true; + this._next.stencilFuncBack = func; + this._next.stencilRefBack = ref; + this._next.stencilMaskBack = mask; + }; + _proto.setStencilOp = function setStencilOp(failOp, zFailOp, zPassOp, writeMask) { + this._next.stencilFailOpFront = this._next.stencilFailOpBack = failOp; + this._next.stencilZFailOpFront = this._next.stencilZFailOpBack = zFailOp; + this._next.stencilZPassOpFront = this._next.stencilZPassOpBack = zPassOp; + this._next.stencilWriteMaskFront = this._next.stencilWriteMaskBack = writeMask; + }; + _proto.setStencilOpFront = function setStencilOpFront(failOp, zFailOp, zPassOp, writeMask) { + this._next.stencilSep = true; + this._next.stencilFailOpFront = failOp; + this._next.stencilZFailOpFront = zFailOp; + this._next.stencilZPassOpFront = zPassOp; + this._next.stencilWriteMaskFront = writeMask; + }; + _proto.setStencilOpBack = function setStencilOpBack(failOp, zFailOp, zPassOp, writeMask) { + this._next.stencilSep = true; + this._next.stencilFailOpBack = failOp; + this._next.stencilZFailOpBack = zFailOp; + this._next.stencilZPassOpBack = zPassOp; + this._next.stencilWriteMaskBack = writeMask; + }; + _proto.setDepthFunc = function setDepthFunc(depthFunc) { + this._next.depthFunc = depthFunc; + }; + _proto.setBlendColor32 = function setBlendColor32(rgba) { + this._next.blendColor = rgba; + }; + _proto.setBlendColor = function setBlendColor(r, g, b, a) { + this._next.blendColor = (255 * r << 24 | 255 * g << 16 | 255 * b << 8 | 255 * a) >>> 0; + }; + _proto.setBlendFunc = function setBlendFunc(src, dst) { + this._next.blendSep = false; + this._next.blendSrc = src; + this._next.blendDst = dst; + }; + _proto.setBlendFuncSep = function setBlendFuncSep(src, dst, srcAlpha, dstAlpha) { + this._next.blendSep = true; + this._next.blendSrc = src; + this._next.blendDst = dst; + this._next.blendSrcAlpha = srcAlpha; + this._next.blendDstAlpha = dstAlpha; + }; + _proto.setBlendEq = function setBlendEq(eq) { + this._next.blendSep = false; + this._next.blendEq = eq; + }; + _proto.setBlendEqSep = function setBlendEqSep(eq, alphaEq) { + this._next.blendSep = true; + this._next.blendEq = eq; + this._next.blendAlphaEq = alphaEq; + }; + _proto.setCullMode = function setCullMode(mode) { + this._next.cullMode = mode; + }; + _proto.setVertexBuffer = function setVertexBuffer(stream, buffer, start) { + void 0 === start && (start = 0); + this._next.vertexBuffers[stream] = buffer; + this._next.vertexBufferOffsets[stream] = start; + this._next.maxStream < stream && (this._next.maxStream = stream); + }; + _proto.setIndexBuffer = function setIndexBuffer(buffer) { + this._next.indexBuffer = buffer; + }; + _proto.setProgram = function setProgram(program) { + this._next.program = program; + }; + _proto.setTexture = function setTexture(name, texture, slot) { + if (slot >= this._caps.maxTextureUnits) { + console.warn("Can not set texture " + name + " at stage " + slot + ", max texture exceed: " + this._caps.maxTextureUnits); + return; + } + this._next.textureUnits[slot] = texture; + this.setUniform(name, slot); + this._next.maxTextureSlot < slot && (this._next.maxTextureSlot = slot); + }; + _proto.setTextureArray = function setTextureArray(name, textures, slots) { + var len = textures.length; + if (len >= this._caps.maxTextureUnits) { + console.warn("Can not set " + len + " textures for " + name + ", max texture exceed: " + this._caps.maxTextureUnits); + return; + } + for (var i = 0; i < len; ++i) { + var slot = slots[i]; + this._next.textureUnits[slot] = textures[i]; + this._next.maxTextureSlot < slot && (this._next.maxTextureSlot = slot); + } + this.setUniform(name, slots); + }; + _proto.setUniform = function setUniform(name, value) { + var uniform = this._uniforms[name]; + var sameType = false; + var isArray = false, isFloat32Array = false, isInt32Array = false; + do { + if (!uniform) break; + isFloat32Array = Array.isArray(value) || value instanceof Float32Array; + isInt32Array = value instanceof Int32Array; + isArray = isFloat32Array || isInt32Array; + if (uniform.isArray !== isArray) break; + if (uniform.isArray && uniform.value.length !== value.length) break; + sameType = true; + } while (false); + if (sameType) { + var oldValue = uniform.value; + var dirty = false; + if (uniform.isArray) { + for (var i = 0, l = oldValue.length; i < l; i++) if (oldValue[i] !== value[i]) { + dirty = true; + oldValue[i] = value[i]; + } + } else if (oldValue !== value) { + dirty = true; + uniform.value = value; + } + dirty && (uniform.dirty = true); + } else { + var newValue = value; + isFloat32Array ? newValue = new Float32Array(value) : isInt32Array && (newValue = new Int32Array(value)); + uniform = { + dirty: true, + value: newValue, + isArray: isArray + }; + } + this._uniforms[name] = uniform; + }; + _proto.setUniformDirectly = function setUniformDirectly(name, value) { + var uniform = this._uniforms[name]; + uniform || (this._uniforms[name] = uniform = {}); + uniform.dirty = true; + uniform.value = value; + }; + _proto.setPrimitiveType = function setPrimitiveType(type) { + this._next.primitiveType = type; + }; + _proto.resetDrawCalls = function resetDrawCalls() { + this._stats.drawcalls = 0; + }; + _proto.getDrawCalls = function getDrawCalls() { + return this._stats.drawcalls; + }; + _proto.draw = function draw(base, count) { + var gl = this._gl; + var cur = this._current; + var next = this._next; + _commitBlendStates(gl, cur, next); + _commitDepthStates(gl, cur, next); + _commitStencilStates(gl, cur, next); + _commitCullMode(gl, cur, next); + _commitVertexBuffers(this, gl, cur, next); + cur.indexBuffer !== next.indexBuffer && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, next.indexBuffer && -1 !== next.indexBuffer._glID ? next.indexBuffer._glID : null); + var programDirty = false; + if (cur.program !== next.program) { + next.program._linked ? gl.useProgram(next.program._glID) : console.warn("Failed to use program: has not linked yet."); + programDirty = true; + } + _commitTextures(gl, cur, next); + for (var i = 0; i < next.program._uniforms.length; ++i) { + var uniformInfo = next.program._uniforms[i]; + var uniform = this._uniforms[uniformInfo.name]; + if (!uniform) continue; + if (!programDirty && !uniform.dirty) continue; + uniform.dirty = false; + var commitFunc = void 0 === uniformInfo.size ? _type2uniformCommit[uniformInfo.type] : _type2uniformArrayCommit[uniformInfo.type]; + if (!commitFunc) { + console.warn("Can not find commit function for uniform " + uniformInfo.name); + continue; + } + commitFunc(gl, uniformInfo.location, uniform.value); + } + if (count) { + next.indexBuffer ? gl.drawElements(this._next.primitiveType, count, next.indexBuffer._format, base * next.indexBuffer._bytesPerIndex) : gl.drawArrays(this._next.primitiveType, base, count); + this._stats.drawcalls++; + } + cur.set(next); + next.reset(); + }; + _createClass(Device, [ { + key: "caps", + get: function get() { + return this._caps; + } + } ]); + return Device; + })(); + exports["default"] = Device; + module.exports = exports["default"]; + }), { + "./enums": 244, + "./state": 251, + "./texture-2d": 252, + "./texture-cube": 253 + } ], + 244: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.attrTypeBytes = attrTypeBytes; + exports.enums = void 0; + exports.glFilter = glFilter; + exports.glTextureFmt = glTextureFmt; + var GL_NEAREST = 9728; + var GL_LINEAR = 9729; + var GL_NEAREST_MIPMAP_NEAREST = 9984; + var GL_LINEAR_MIPMAP_NEAREST = 9985; + var GL_NEAREST_MIPMAP_LINEAR = 9986; + var GL_LINEAR_MIPMAP_LINEAR = 9987; + var GL_UNSIGNED_BYTE = 5121; + var GL_UNSIGNED_SHORT = 5123; + var GL_UNSIGNED_INT = 5125; + var GL_FLOAT = 5126; + var GL_UNSIGNED_SHORT_5_6_5 = 33635; + var GL_UNSIGNED_SHORT_4_4_4_4 = 32819; + var GL_UNSIGNED_SHORT_5_5_5_1 = 32820; + var GL_HALF_FLOAT_OES = 36193; + var GL_DEPTH_COMPONENT = 6402; + var GL_ALPHA = 6406; + var GL_RGB = 6407; + var GL_RGBA = 6408; + var GL_LUMINANCE = 6409; + var GL_LUMINANCE_ALPHA = 6410; + var GL_COMPRESSED_RGB_S3TC_DXT1_EXT = 33776; + var GL_COMPRESSED_RGBA_S3TC_DXT1_EXT = 33777; + var GL_COMPRESSED_RGBA_S3TC_DXT3_EXT = 33778; + var GL_COMPRESSED_RGBA_S3TC_DXT5_EXT = 33779; + var GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG = 35840; + var GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG = 35841; + var GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG = 35842; + var GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG = 35843; + var GL_COMPRESSED_RGB_ETC1_WEBGL = 36196; + var GL_COMPRESSED_RGB8_ETC2 = 37492; + var GL_COMPRESSED_RGBA8_ETC2_EAC = 37496; + var _filterGL = [ [ GL_NEAREST, GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST_MIPMAP_LINEAR ], [ GL_LINEAR, GL_LINEAR_MIPMAP_NEAREST, GL_LINEAR_MIPMAP_LINEAR ] ]; + var _textureFmtGL = [ { + format: GL_RGB, + internalFormat: GL_COMPRESSED_RGB_S3TC_DXT1_EXT, + pixelType: null + }, { + format: GL_RGBA, + internalFormat: GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, + pixelType: null + }, { + format: GL_RGBA, + internalFormat: GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, + pixelType: null + }, { + format: GL_RGBA, + internalFormat: GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, + pixelType: null + }, { + format: GL_RGB, + internalFormat: GL_COMPRESSED_RGB_ETC1_WEBGL, + pixelType: null + }, { + format: GL_RGB, + internalFormat: GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG, + pixelType: null + }, { + format: GL_RGBA, + internalFormat: GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG, + pixelType: null + }, { + format: GL_RGB, + internalFormat: GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG, + pixelType: null + }, { + format: GL_RGBA, + internalFormat: GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG, + pixelType: null + }, { + format: GL_ALPHA, + internalFormat: GL_ALPHA, + pixelType: GL_UNSIGNED_BYTE + }, { + format: GL_LUMINANCE, + internalFormat: GL_LUMINANCE, + pixelType: GL_UNSIGNED_BYTE + }, { + format: GL_LUMINANCE_ALPHA, + internalFormat: GL_LUMINANCE_ALPHA, + pixelType: GL_UNSIGNED_BYTE + }, { + format: GL_RGB, + internalFormat: GL_RGB, + pixelType: GL_UNSIGNED_SHORT_5_6_5 + }, { + format: GL_RGBA, + internalFormat: GL_RGBA, + pixelType: GL_UNSIGNED_SHORT_5_5_5_1 + }, { + format: GL_RGBA, + internalFormat: GL_RGBA, + pixelType: GL_UNSIGNED_SHORT_4_4_4_4 + }, { + format: GL_RGB, + internalFormat: GL_RGB, + pixelType: GL_UNSIGNED_BYTE + }, { + format: GL_RGBA, + internalFormat: GL_RGBA, + pixelType: GL_UNSIGNED_BYTE + }, { + format: GL_RGB, + internalFormat: GL_RGB, + pixelType: GL_HALF_FLOAT_OES + }, { + format: GL_RGBA, + internalFormat: GL_RGBA, + pixelType: GL_HALF_FLOAT_OES + }, { + format: GL_RGB, + internalFormat: GL_RGB, + pixelType: GL_FLOAT + }, { + format: GL_RGBA, + internalFormat: GL_RGBA, + pixelType: GL_FLOAT + }, { + format: null, + internalFormat: null, + pixelType: null + }, { + format: null, + internalFormat: null, + pixelType: null + }, { + format: null, + internalFormat: null, + pixelType: null + }, { + format: null, + internalFormat: null, + pixelType: null + }, { + format: GL_DEPTH_COMPONENT, + internalFormat: GL_DEPTH_COMPONENT, + pixelType: GL_UNSIGNED_SHORT + }, { + format: GL_DEPTH_COMPONENT, + internalFormat: GL_DEPTH_COMPONENT, + pixelType: GL_UNSIGNED_INT + }, { + format: GL_DEPTH_COMPONENT, + internalFormat: GL_DEPTH_COMPONENT, + pixelType: GL_UNSIGNED_INT + }, { + format: GL_RGB, + internalFormat: GL_COMPRESSED_RGB8_ETC2, + pixelType: null + }, { + format: GL_RGBA, + internalFormat: GL_COMPRESSED_RGBA8_ETC2_EAC, + pixelType: null + } ]; + var enums = { + USAGE_STATIC: 35044, + USAGE_DYNAMIC: 35048, + USAGE_STREAM: 35040, + INDEX_FMT_UINT8: 5121, + INDEX_FMT_UINT16: 5123, + INDEX_FMT_UINT32: 5125, + ATTR_POSITION: "a_position", + ATTR_NORMAL: "a_normal", + ATTR_TANGENT: "a_tangent", + ATTR_BITANGENT: "a_bitangent", + ATTR_WEIGHTS: "a_weights", + ATTR_JOINTS: "a_joints", + ATTR_COLOR: "a_color", + ATTR_COLOR0: "a_color0", + ATTR_COLOR1: "a_color1", + ATTR_UV: "a_uv", + ATTR_UV0: "a_uv0", + ATTR_UV1: "a_uv1", + ATTR_UV2: "a_uv2", + ATTR_UV3: "a_uv3", + ATTR_UV4: "a_uv4", + ATTR_UV5: "a_uv5", + ATTR_UV6: "a_uv6", + ATTR_UV7: "a_uv7", + ATTR_TEX_COORD: "a_texCoord", + ATTR_TEX_COORD1: "a_texCoord1", + ATTR_TEX_COORD2: "a_texCoord2", + ATTR_TEX_COORD3: "a_texCoord3", + ATTR_TEX_COORD4: "a_texCoord4", + ATTR_TEX_COORD5: "a_texCoord5", + ATTR_TEX_COORD6: "a_texCoord6", + ATTR_TEX_COORD7: "a_texCoord7", + ATTR_TEX_COORD8: "a_texCoord8", + ATTR_TEX_ID: "a_texId", + ATTR_TYPE_INT8: 5120, + ATTR_TYPE_UINT8: 5121, + ATTR_TYPE_INT16: 5122, + ATTR_TYPE_UINT16: 5123, + ATTR_TYPE_INT32: 5124, + ATTR_TYPE_UINT32: 5125, + ATTR_TYPE_FLOAT32: 5126, + FILTER_NEAREST: 0, + FILTER_LINEAR: 1, + WRAP_REPEAT: 10497, + WRAP_CLAMP: 33071, + WRAP_MIRROR: 33648, + TEXTURE_FMT_RGB_DXT1: 0, + TEXTURE_FMT_RGBA_DXT1: 1, + TEXTURE_FMT_RGBA_DXT3: 2, + TEXTURE_FMT_RGBA_DXT5: 3, + TEXTURE_FMT_RGB_ETC1: 4, + TEXTURE_FMT_RGB_PVRTC_2BPPV1: 5, + TEXTURE_FMT_RGBA_PVRTC_2BPPV1: 6, + TEXTURE_FMT_RGB_PVRTC_4BPPV1: 7, + TEXTURE_FMT_RGBA_PVRTC_4BPPV1: 8, + TEXTURE_FMT_A8: 9, + TEXTURE_FMT_L8: 10, + TEXTURE_FMT_L8_A8: 11, + TEXTURE_FMT_R5_G6_B5: 12, + TEXTURE_FMT_R5_G5_B5_A1: 13, + TEXTURE_FMT_R4_G4_B4_A4: 14, + TEXTURE_FMT_RGB8: 15, + TEXTURE_FMT_RGBA8: 16, + TEXTURE_FMT_RGB16F: 17, + TEXTURE_FMT_RGBA16F: 18, + TEXTURE_FMT_RGB32F: 19, + TEXTURE_FMT_RGBA32F: 20, + TEXTURE_FMT_R32F: 21, + TEXTURE_FMT_111110F: 22, + TEXTURE_FMT_SRGB: 23, + TEXTURE_FMT_SRGBA: 24, + TEXTURE_FMT_D16: 25, + TEXTURE_FMT_D32: 26, + TEXTURE_FMT_D24S8: 27, + TEXTURE_FMT_RGB_ETC2: 28, + TEXTURE_FMT_RGBA_ETC2: 29, + DS_FUNC_NEVER: 512, + DS_FUNC_LESS: 513, + DS_FUNC_EQUAL: 514, + DS_FUNC_LEQUAL: 515, + DS_FUNC_GREATER: 516, + DS_FUNC_NOTEQUAL: 517, + DS_FUNC_GEQUAL: 518, + DS_FUNC_ALWAYS: 519, + RB_FMT_RGBA4: 32854, + RB_FMT_RGB5_A1: 32855, + RB_FMT_RGB565: 36194, + RB_FMT_D16: 33189, + RB_FMT_S8: 36168, + RB_FMT_D24S8: 34041, + BLEND_FUNC_ADD: 32774, + BLEND_FUNC_SUBTRACT: 32778, + BLEND_FUNC_REVERSE_SUBTRACT: 32779, + BLEND_ZERO: 0, + BLEND_ONE: 1, + BLEND_SRC_COLOR: 768, + BLEND_ONE_MINUS_SRC_COLOR: 769, + BLEND_DST_COLOR: 774, + BLEND_ONE_MINUS_DST_COLOR: 775, + BLEND_SRC_ALPHA: 770, + BLEND_ONE_MINUS_SRC_ALPHA: 771, + BLEND_DST_ALPHA: 772, + BLEND_ONE_MINUS_DST_ALPHA: 773, + BLEND_CONSTANT_COLOR: 32769, + BLEND_ONE_MINUS_CONSTANT_COLOR: 32770, + BLEND_CONSTANT_ALPHA: 32771, + BLEND_ONE_MINUS_CONSTANT_ALPHA: 32772, + BLEND_SRC_ALPHA_SATURATE: 776, + STENCIL_DISABLE: 0, + STENCIL_ENABLE: 1, + STENCIL_INHERIT: 2, + STENCIL_OP_KEEP: 7680, + STENCIL_OP_ZERO: 0, + STENCIL_OP_REPLACE: 7681, + STENCIL_OP_INCR: 7682, + STENCIL_OP_INCR_WRAP: 34055, + STENCIL_OP_DECR: 7683, + STENCIL_OP_DECR_WRAP: 34056, + STENCIL_OP_INVERT: 5386, + CULL_NONE: 0, + CULL_FRONT: 1028, + CULL_BACK: 1029, + CULL_FRONT_AND_BACK: 1032, + PT_POINTS: 0, + PT_LINES: 1, + PT_LINE_LOOP: 2, + PT_LINE_STRIP: 3, + PT_TRIANGLES: 4, + PT_TRIANGLE_STRIP: 5, + PT_TRIANGLE_FAN: 6 + }; + exports.enums = enums; + function attrTypeBytes(attrType) { + if (attrType === enums.ATTR_TYPE_INT8) return 1; + if (attrType === enums.ATTR_TYPE_UINT8) return 1; + if (attrType === enums.ATTR_TYPE_INT16) return 2; + if (attrType === enums.ATTR_TYPE_UINT16) return 2; + if (attrType === enums.ATTR_TYPE_INT32) return 4; + if (attrType === enums.ATTR_TYPE_UINT32) return 4; + if (attrType === enums.ATTR_TYPE_FLOAT32) return 4; + console.warn("Unknown ATTR_TYPE: " + attrType); + return 0; + } + function glFilter(gl, filter, mipFilter) { + void 0 === mipFilter && (mipFilter = -1); + var result = _filterGL[filter][mipFilter + 1]; + if (void 0 === result) { + console.warn("Unknown FILTER: " + filter); + return -1 === mipFilter ? gl.LINEAR : gl.LINEAR_MIPMAP_LINEAR; + } + return result; + } + function glTextureFmt(fmt) { + var result = _textureFmtGL[fmt]; + if (void 0 === result) { + console.warn("Unknown TEXTURE_FMT: " + fmt); + return _textureFmtGL[enums.TEXTURE_FMT_RGBA8]; + } + return result; + } + }), {} ], + 245: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var FrameBuffer = (function() { + function FrameBuffer(device, width, height, options) { + this._device = device; + this._width = width; + this._height = height; + this._colors = options.colors || []; + this._depth = options.depth || null; + this._stencil = options.stencil || null; + this._depthStencil = options.depthStencil || null; + this._glID = device._gl.createFramebuffer(); + } + var _proto = FrameBuffer.prototype; + _proto.destroy = function destroy() { + if (null === this._glID) { + console.error("The frame-buffer already destroyed"); + return; + } + var gl = this._device._gl; + gl.deleteFramebuffer(this._glID); + this._glID = null; + }; + _proto.getHandle = function getHandle() { + return this._glID; + }; + return FrameBuffer; + })(); + exports["default"] = FrameBuffer; + module.exports = exports["default"]; + }), {} ], + 246: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _enums = require("./enums"); + var _BYTES_PER_INDEX; + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + var BYTES_PER_INDEX = (_BYTES_PER_INDEX = {}, _BYTES_PER_INDEX[_enums.enums.INDEX_FMT_UINT8] = 1, + _BYTES_PER_INDEX[_enums.enums.INDEX_FMT_UINT16] = 2, _BYTES_PER_INDEX[_enums.enums.INDEX_FMT_UINT32] = 4, + _BYTES_PER_INDEX); + var IndexBuffer = (function() { + function IndexBuffer(device, format, usage, data) { + this._device = device; + this._format = format; + this._usage = usage; + this._bytesPerIndex = BYTES_PER_INDEX[format]; + this._bytes = data.byteLength; + this._numIndices = this._bytes / this._bytesPerIndex; + this._needExpandDataStore = true; + this._glID = device._gl.createBuffer(); + this.update(0, data); + device._stats.ib += this._bytes; + } + var _proto = IndexBuffer.prototype; + _proto.destroy = function destroy() { + if (-1 === this._glID) { + console.error("The buffer already destroyed"); + return; + } + var gl = this._device._gl; + gl.deleteBuffer(this._glID); + this._device._stats.ib -= this.bytes; + this._glID = -1; + }; + _proto.update = function update(byteOffset, data) { + if (-1 === this._glID) { + console.error("The buffer is destroyed"); + return; + } + if (0 === data.byteLength) return; + if (byteOffset + data.byteLength > this._bytes) { + if (byteOffset) { + console.error("Failed to update data, bytes exceed."); + return; + } + this._needExpandDataStore = true; + this._bytes = byteOffset + data.byteLength; + this._numIndices = this._bytes / this._bytesPerIndex; + } + var gl = this._device._gl; + var glUsage = this._usage; + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._glID); + if (this._needExpandDataStore) { + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, data, glUsage); + this._needExpandDataStore = false; + } else gl.bufferSubData(gl.ELEMENT_ARRAY_BUFFER, byteOffset, data); + this._device._restoreIndexBuffer(); + }; + _proto.setUsage = function setUsage(usage) { + this._usage = usage; + }; + _createClass(IndexBuffer, [ { + key: "count", + get: function get() { + return this._numIndices; + } + } ]); + return IndexBuffer; + })(); + IndexBuffer.BYTES_PER_INDEX = BYTES_PER_INDEX; + var _default = IndexBuffer; + exports["default"] = _default; + module.exports = exports["default"]; + }), { + "./enums": 244 + } ], + 247: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _enums = require("./enums"); + var gfx = null; + false; + var VertexFormat = require("./vertex-format"); + var IndexBuffer = require("./index-buffer"); + var VertexBuffer = require("./vertex-buffer"); + var Program = require("./program"); + var Texture = require("./texture"); + var Texture2D = require("./texture-2d"); + var TextureCube = require("./texture-cube"); + var RenderBuffer = require("./render-buffer"); + var FrameBuffer = require("./frame-buffer"); + var Device = require("./device"); + gfx = { + VertexFormat: VertexFormat, + IndexBuffer: IndexBuffer, + VertexBuffer: VertexBuffer, + Program: Program, + Texture: Texture, + Texture2D: Texture2D, + TextureCube: TextureCube, + RenderBuffer: RenderBuffer, + FrameBuffer: FrameBuffer, + Device: Device, + attrTypeBytes: _enums.attrTypeBytes, + glFilter: _enums.glFilter, + glTextureFmt: _enums.glTextureFmt + }; + Object.assign(gfx, _enums.enums); + var _default = gfx; + exports["default"] = _default; + cc.gfx = gfx; + module.exports = exports["default"]; + }), { + "./device": 243, + "./enums": 244, + "./frame-buffer": 245, + "./index-buffer": 246, + "./program": 249, + "./render-buffer": 250, + "./texture": 254, + "./texture-2d": 252, + "./texture-cube": 253, + "./vertex-buffer": 255, + "./vertex-format": 256 + } ], + 248: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.isPow2 = isPow2; + function isPow2(v) { + return !(v & v - 1) && !!v; + } + }), {} ], + 249: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + var _genID = 0; + function _parseError(out, type, errorLog) { + if (!errorLog) return; + errorLog.split("\n").forEach((function(msg) { + if (msg.length < 5) return; + var parts = /^ERROR:\s+(\d+):(\d+):\s*(.*)$/.exec(msg); + parts ? out.push({ + type: type, + fileID: 0 | parts[1], + line: 0 | parts[2], + message: parts[3].trim() + }) : msg.length > 0 && out.push({ + type: type, + fileID: -1, + line: 0, + message: msg + }); + })); + } + var Program = (function() { + function Program(device, options) { + this._device = device; + this._attributes = []; + this._uniforms = []; + this._samplers = []; + this._errors = []; + this._linked = false; + this._vertSource = options.vert; + this._fragSource = options.frag; + this._glID = null; + this._id = _genID++; + } + var _proto = Program.prototype; + _proto.link = function link() { + if (this._linked) return; + var gl = this._device._gl; + var vertShader = _createShader(gl, gl.VERTEX_SHADER, this._vertSource); + var fragShader = _createShader(gl, gl.FRAGMENT_SHADER, this._fragSource); + var program = gl.createProgram(); + gl.attachShader(program, vertShader); + gl.attachShader(program, fragShader); + gl.linkProgram(program); + var failed = false; + var errors = this._errors; + if (!gl.getShaderParameter(vertShader, gl.COMPILE_STATUS)) { + _parseError(errors, "vs", gl.getShaderInfoLog(vertShader)); + failed = true; + } + if (!gl.getShaderParameter(fragShader, gl.COMPILE_STATUS)) { + _parseError(errors, "fs", gl.getShaderInfoLog(fragShader)); + failed = true; + } + gl.deleteShader(vertShader); + gl.deleteShader(fragShader); + if (failed) return errors; + if (!gl.getProgramParameter(program, gl.LINK_STATUS)) { + errors.push({ + info: "Failed to link shader program: " + gl.getProgramInfoLog(program) + }); + return errors; + } + this._glID = program; + var numAttributes = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES); + for (var i = 0; i < numAttributes; ++i) { + var info = gl.getActiveAttrib(program, i); + var location = gl.getAttribLocation(program, info.name); + this._attributes.push({ + name: info.name, + location: location, + type: info.type + }); + } + var numUniforms = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS); + for (var _i = 0; _i < numUniforms; ++_i) { + var _info = gl.getActiveUniform(program, _i); + var name = _info.name; + var _location = gl.getUniformLocation(program, name); + var isArray = "[0]" === name.substr(name.length - 3); + isArray && (name = name.substr(0, name.length - 3)); + var uniform = { + name: name, + location: _location, + type: _info.type, + size: isArray ? _info.size : void 0 + }; + this._uniforms.push(uniform); + } + this._linked = true; + }; + _proto.destroy = function destroy() { + var gl = this._device._gl; + gl.deleteProgram(this._glID); + this._linked = false; + this._glID = null; + this._attributes = []; + this._uniforms = []; + this._samplers = []; + }; + _createClass(Program, [ { + key: "id", + get: function get() { + return this._id; + } + } ]); + return Program; + })(); + exports["default"] = Program; + function _createShader(gl, type, src) { + var shader = gl.createShader(type); + gl.shaderSource(shader, src); + gl.compileShader(shader); + return shader; + } + module.exports = exports["default"]; + }), {} ], + 250: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var RenderBuffer = (function() { + function RenderBuffer(device, format, width, height) { + this._device = device; + this._format = format; + this._glID = device._gl.createRenderbuffer(); + this.update(width, height); + } + var _proto = RenderBuffer.prototype; + _proto.update = function update(width, height) { + this._width = width; + this._height = height; + var gl = this._device._gl; + gl.bindRenderbuffer(gl.RENDERBUFFER, this._glID); + gl.renderbufferStorage(gl.RENDERBUFFER, this._format, width, height); + gl.bindRenderbuffer(gl.RENDERBUFFER, null); + }; + _proto.destroy = function destroy() { + if (null === this._glID) { + console.error("The render-buffer already destroyed"); + return; + } + var gl = this._device._gl; + gl.bindRenderbuffer(gl.RENDERBUFFER, null); + gl.deleteRenderbuffer(this._glID); + this._glID = null; + }; + return RenderBuffer; + })(); + exports["default"] = RenderBuffer; + module.exports = exports["default"]; + }), {} ], + 251: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _enums = require("./enums"); + var _default = { + blend: false, + blendSep: false, + blendColor: 4294967295, + blendEq: _enums.enums.BLEND_FUNC_ADD, + blendAlphaEq: _enums.enums.BLEND_FUNC_ADD, + blendSrc: _enums.enums.BLEND_ONE, + blendDst: _enums.enums.BLEND_ZERO, + blendSrcAlpha: _enums.enums.BLEND_ONE, + blendDstAlpha: _enums.enums.BLEND_ZERO, + depthTest: false, + depthWrite: false, + depthFunc: _enums.enums.DS_FUNC_LESS, + stencilTest: false, + stencilSep: false, + stencilFuncFront: _enums.enums.DS_FUNC_ALWAYS, + stencilRefFront: 0, + stencilMaskFront: 255, + stencilFailOpFront: _enums.enums.STENCIL_OP_KEEP, + stencilZFailOpFront: _enums.enums.STENCIL_OP_KEEP, + stencilZPassOpFront: _enums.enums.STENCIL_OP_KEEP, + stencilWriteMaskFront: 255, + stencilFuncBack: _enums.enums.DS_FUNC_ALWAYS, + stencilRefBack: 0, + stencilMaskBack: 255, + stencilFailOpBack: _enums.enums.STENCIL_OP_KEEP, + stencilZFailOpBack: _enums.enums.STENCIL_OP_KEEP, + stencilZPassOpBack: _enums.enums.STENCIL_OP_KEEP, + stencilWriteMaskBack: 255, + cullMode: _enums.enums.CULL_BACK, + primitiveType: _enums.enums.PT_TRIANGLES, + maxStream: -1, + vertexBuffers: [], + vertexBufferOffsets: [], + indexBuffer: null, + maxTextureSlot: -1, + textureUnits: [], + program: null + }; + var State = (function() { + function State(device) { + this.vertexBuffers = new Array(device._caps.maxVertexStreams); + this.vertexBufferOffsets = new Array(device._caps.maxVertexStreams); + this.textureUnits = new Array(device._caps.maxTextureUnits); + this.set(_default); + } + State.initDefault = function initDefault(device) { + _default.vertexBuffers = new Array(device._caps.maxVertexStreams); + _default.vertexBufferOffsets = new Array(device._caps.maxVertexStreams); + _default.textureUnits = new Array(device._caps.maxTextureUnits); + }; + var _proto = State.prototype; + _proto.reset = function reset() { + this.set(_default); + }; + _proto.set = function set(cpy) { + this.blend = cpy.blend; + this.blendSep = cpy.blendSep; + this.blendColor = cpy.blendColor; + this.blendEq = cpy.blendEq; + this.blendAlphaEq = cpy.blendAlphaEq; + this.blendSrc = cpy.blendSrc; + this.blendDst = cpy.blendDst; + this.blendSrcAlpha = cpy.blendSrcAlpha; + this.blendDstAlpha = cpy.blendDstAlpha; + this.depthTest = cpy.depthTest; + this.depthWrite = cpy.depthWrite; + this.depthFunc = cpy.depthFunc; + this.stencilTest = cpy.stencilTest; + this.stencilSep = cpy.stencilSep; + this.stencilFuncFront = cpy.stencilFuncFront; + this.stencilRefFront = cpy.stencilRefFront; + this.stencilMaskFront = cpy.stencilMaskFront; + this.stencilFailOpFront = cpy.stencilFailOpFront; + this.stencilZFailOpFront = cpy.stencilZFailOpFront; + this.stencilZPassOpFront = cpy.stencilZPassOpFront; + this.stencilWriteMaskFront = cpy.stencilWriteMaskFront; + this.stencilFuncBack = cpy.stencilFuncBack; + this.stencilRefBack = cpy.stencilRefBack; + this.stencilMaskBack = cpy.stencilMaskBack; + this.stencilFailOpBack = cpy.stencilFailOpBack; + this.stencilZFailOpBack = cpy.stencilZFailOpBack; + this.stencilZPassOpBack = cpy.stencilZPassOpBack; + this.stencilWriteMaskBack = cpy.stencilWriteMaskBack; + this.cullMode = cpy.cullMode; + this.primitiveType = cpy.primitiveType; + this.maxStream = cpy.maxStream; + for (var i = 0; i < cpy.vertexBuffers.length; ++i) this.vertexBuffers[i] = cpy.vertexBuffers[i]; + for (var _i = 0; _i < cpy.vertexBufferOffsets.length; ++_i) this.vertexBufferOffsets[_i] = cpy.vertexBufferOffsets[_i]; + this.indexBuffer = cpy.indexBuffer; + this.maxTextureSlot = cpy.maxTextureSlot; + for (var _i2 = 0; _i2 < cpy.textureUnits.length; ++_i2) this.textureUnits[_i2] = cpy.textureUnits[_i2]; + this.program = cpy.program; + }; + return State; + })(); + exports["default"] = State; + module.exports = exports["default"]; + }), { + "./enums": 244 + } ], + 252: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _texture = _interopRequireDefault(require("./texture")); + var _enums = require("./enums"); + var _misc = require("./misc"); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var Texture2D = (function(_Texture) { + _inheritsLoose(Texture2D, _Texture); + function Texture2D(device, options) { + var _this; + _this = _Texture.call(this, device) || this; + var gl = _this._device._gl; + _this._target = gl.TEXTURE_2D; + _this._glID = gl.createTexture(); + options.images = options.images || [ null ]; + _this.update(options); + return _this; + } + var _proto = Texture2D.prototype; + _proto.update = function update(options) { + var gl = this._device._gl; + var genMipmaps = this._genMipmap; + if (options) { + void 0 !== options.width && (this._width = options.width); + void 0 !== options.height && (this._height = options.height); + void 0 !== options.anisotropy && (this._anisotropy = options.anisotropy); + void 0 !== options.minFilter && (this._minFilter = options.minFilter); + void 0 !== options.magFilter && (this._magFilter = options.magFilter); + void 0 !== options.mipFilter && (this._mipFilter = options.mipFilter); + void 0 !== options.wrapS && (this._wrapS = options.wrapS); + void 0 !== options.wrapT && (this._wrapT = options.wrapT); + if (void 0 !== options.format) { + this._format = options.format; + this._compressed = this._format >= _enums.enums.TEXTURE_FMT_RGB_DXT1 && this._format <= _enums.enums.TEXTURE_FMT_RGBA_PVRTC_4BPPV1 || this._format >= _enums.enums.TEXTURE_FMT_RGB_ETC2 && this._format <= _enums.enums.TEXTURE_FMT_RGBA_ETC2; + } + if (void 0 !== options.genMipmaps) { + this._genMipmap = options.genMipmaps; + genMipmaps = options.genMipmaps; + } + var maxSize = this._device.caps.maxTextureSize || Number.MAX_VALUE; + var textureMaxSize = Math.max(options.width || 0, options.height || 0); + maxSize < textureMaxSize && console.warn("The current texture size " + textureMaxSize + " exceeds the maximum size [" + maxSize + "] supported on the device."); + if (void 0 !== options.images && options.images.length > 1) { + genMipmaps = false; + var maxLength = options.width > options.height ? options.width : options.height; + maxLength >> options.images.length - 1 !== 1 && console.error("texture-2d mipmap is invalid, should have a 1x1 mipmap."); + } + } + var pot = (0, _misc.isPow2)(this._width) && (0, _misc.isPow2)(this._height); + pot || (genMipmaps = false); + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, this._glID); + if (void 0 !== options.images && options.images.length > 0) { + this._setMipmap(options.images, options.flipY, options.premultiplyAlpha); + options.images.length > 1 && (this._genMipmap = true); + } + if (genMipmaps) { + gl.hint(gl.GENERATE_MIPMAP_HINT, gl.NICEST); + gl.generateMipmap(gl.TEXTURE_2D); + this._genMipmap = true; + } + this._setTexInfo(); + this._device._restoreTexture(0); + }; + _proto.updateSubImage = function updateSubImage(options) { + var gl = this._device._gl; + var glFmt = (0, _enums.glTextureFmt)(this._format); + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, this._glID); + this._setSubImage(glFmt, options); + this._device._restoreTexture(0); + }; + _proto.updateImage = function updateImage(options) { + var gl = this._device._gl; + var glFmt = (0, _enums.glTextureFmt)(this._format); + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, this._glID); + this._setImage(glFmt, options); + this._device._restoreTexture(0); + }; + _proto._setSubImage = function _setSubImage(glFmt, options) { + var gl = this._device._gl; + var flipY = options.flipY; + var premultiplyAlpha = options.premultiplyAlpha; + var img = options.image; + if (!img || ArrayBuffer.isView(img) || img instanceof ArrayBuffer) { + void 0 === flipY ? gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false) : gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY); + void 0 === premultiplyAlpha ? gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false) : gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultiplyAlpha); + this._compressed ? gl.compressedTexSubImage2D(gl.TEXTURE_2D, options.level, options.x, options.y, options.width, options.height, glFmt.format, img) : gl.texSubImage2D(gl.TEXTURE_2D, options.level, options.x, options.y, options.width, options.height, glFmt.format, glFmt.pixelType, img); + } else { + void 0 === flipY ? gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true) : gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY); + void 0 === premultiplyAlpha ? gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false) : gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultiplyAlpha); + gl.texSubImage2D(gl.TEXTURE_2D, options.level, options.x, options.y, glFmt.format, glFmt.pixelType, img); + } + }; + _proto._setImage = function _setImage(glFmt, options) { + var gl = this._device._gl; + var flipY = options.flipY; + var premultiplyAlpha = options.premultiplyAlpha; + var img = options.image; + if (!img || ArrayBuffer.isView(img) || img instanceof ArrayBuffer) { + void 0 === flipY ? gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false) : gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY); + void 0 === premultiplyAlpha ? gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false) : gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultiplyAlpha); + this._compressed ? gl.compressedTexImage2D(gl.TEXTURE_2D, options.level, glFmt.internalFormat, options.width, options.height, 0, img) : gl.texImage2D(gl.TEXTURE_2D, options.level, glFmt.internalFormat, options.width, options.height, 0, glFmt.format, glFmt.pixelType, img); + } else { + void 0 === flipY ? gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true) : gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY); + void 0 === premultiplyAlpha ? gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false) : gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultiplyAlpha); + gl.texImage2D(gl.TEXTURE_2D, options.level, glFmt.internalFormat, glFmt.format, glFmt.pixelType, img); + } + }; + _proto._setMipmap = function _setMipmap(images, flipY, premultiplyAlpha) { + var glFmt = (0, _enums.glTextureFmt)(this._format); + var options = { + width: this._width, + height: this._height, + flipY: flipY, + premultiplyAlpha: premultiplyAlpha, + level: 0, + image: null + }; + for (var i = 0; i < images.length; ++i) { + options.level = i; + options.width = this._width >> i; + options.height = this._height >> i; + options.image = images[i]; + this._setImage(glFmt, options); + } + }; + _proto._setTexInfo = function _setTexInfo() { + var gl = this._device._gl; + var pot = (0, _misc.isPow2)(this._width) && (0, _misc.isPow2)(this._height); + if (!pot && (this._wrapS !== _enums.enums.WRAP_CLAMP || this._wrapT !== _enums.enums.WRAP_CLAMP)) { + console.warn("WebGL1 doesn't support all wrap modes with NPOT textures"); + this._wrapS = _enums.enums.WRAP_CLAMP; + this._wrapT = _enums.enums.WRAP_CLAMP; + } + var mipFilter = this._genMipmap ? this._mipFilter : -1; + if (!pot && -1 !== mipFilter) { + console.warn("NPOT textures do not support mipmap filter"); + mipFilter = -1; + } + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, (0, _enums.glFilter)(gl, this._minFilter, mipFilter)); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, (0, _enums.glFilter)(gl, this._magFilter, -1)); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, this._wrapS); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, this._wrapT); + var ext = this._device.ext("EXT_texture_filter_anisotropic"); + ext && gl.texParameteri(gl.TEXTURE_2D, ext.TEXTURE_MAX_ANISOTROPY_EXT, this._anisotropy); + }; + return Texture2D; + })(_texture["default"]); + exports["default"] = Texture2D; + module.exports = exports["default"]; + }), { + "./enums": 244, + "./misc": 248, + "./texture": 254 + } ], + 253: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _texture = _interopRequireDefault(require("./texture")); + var _enums = require("./enums"); + var _misc = require("./misc"); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var TextureCube = (function(_Texture) { + _inheritsLoose(TextureCube, _Texture); + function TextureCube(device, options) { + var _this; + _this = _Texture.call(this, device) || this; + var gl = _this._device._gl; + _this._target = gl.TEXTURE_CUBE_MAP; + _this._glID = gl.createTexture(); + _this.update(options); + return _this; + } + var _proto = TextureCube.prototype; + _proto.update = function update(options) { + var gl = this._device._gl; + var genMipmaps = this._genMipmaps; + if (options) { + void 0 !== options.width && (this._width = options.width); + void 0 !== options.height && (this._height = options.height); + void 0 !== options.anisotropy && (this._anisotropy = options.anisotropy); + void 0 !== options.minFilter && (this._minFilter = options.minFilter); + void 0 !== options.magFilter && (this._magFilter = options.magFilter); + void 0 !== options.mipFilter && (this._mipFilter = options.mipFilter); + void 0 !== options.wrapS && (this._wrapS = options.wrapS); + void 0 !== options.wrapT && (this._wrapT = options.wrapT); + if (void 0 !== options.format) { + this._format = options.format; + this._compressed = this._format >= _enums.enums.TEXTURE_FMT_RGB_DXT1 && this._format <= _enums.enums.TEXTURE_FMT_RGBA_PVRTC_4BPPV1 || this._format >= _enums.enums.TEXTURE_FMT_RGB_ETC2 && this._format <= _enums.enums.TEXTURE_FMT_RGBA_ETC2; + } + if (void 0 !== options.genMipmaps) { + this._genMipmaps = options.genMipmaps; + genMipmaps = options.genMipmaps; + } + if (void 0 !== options.images && options.images.length > 1) { + genMipmaps = false; + options.width !== options.height && console.warn("texture-cube width and height should be identical."); + options.width >> options.images.length - 1 !== 1 && console.error("texture-cube mipmap is invalid. please set mipmap as 1x1, 2x2, 4x4 ... nxn"); + } + } + var pot = (0, _misc.isPow2)(this._width) && (0, _misc.isPow2)(this._height); + pot || (genMipmaps = false); + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_CUBE_MAP, this._glID); + if (void 0 !== options.images && options.images.length > 0) { + this._setMipmap(options.images, options.flipY, options.premultiplyAlpha); + options.images.length > 1 && (this._genMipmaps = true); + } + if (genMipmaps) { + gl.hint(gl.GENERATE_MIPMAP_HINT, gl.NICEST); + gl.generateMipmap(gl.TEXTURE_CUBE_MAP); + this._genMipmaps = true; + } + this._setTexInfo(); + this._device._restoreTexture(0); + }; + _proto.updateSubImage = function updateSubImage(options) { + var gl = this._device._gl; + var glFmt = (0, _enums.glTextureFmt)(this._format); + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_CUBE_MAP, this._glID); + this._setSubImage(glFmt, options); + this._device._restoreTexture(0); + }; + _proto.updateImage = function updateImage(options) { + var gl = this._device._gl; + var glFmt = (0, _enums.glTextureFmt)(this._format); + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_CUBE_MAP, this._glID); + this._setImage(glFmt, options); + this._device._restoreTexture(0); + }; + _proto._setSubImage = function _setSubImage(glFmt, options) { + var gl = this._device._gl; + var flipY = options.flipY; + var premultiplyAlpha = options.premultiplyAlpha; + var faceIndex = options.faceIndex; + var img = options.image; + void 0 === flipY ? gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false) : gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY); + void 0 === premultiplyAlpha ? gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false) : gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultiplyAlpha); + !img || ArrayBuffer.isView(img) || img instanceof ArrayBuffer ? this._compressed ? gl.compressedTexSubImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex, options.level, options.x, options.y, options.width, options.height, glFmt.format, img) : gl.texSubImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex, options.level, options.x, options.y, options.width, options.height, glFmt.format, glFmt.pixelType, img) : gl.texSubImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex, options.level, options.x, options.y, glFmt.format, glFmt.pixelType, img); + }; + _proto._setImage = function _setImage(glFmt, options) { + var gl = this._device._gl; + var flipY = options.flipY; + var premultiplyAlpha = options.premultiplyAlpha; + var faceIndex = options.faceIndex; + var img = options.image; + void 0 === flipY ? gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false) : gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY); + void 0 === premultiplyAlpha ? gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false) : gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultiplyAlpha); + !img || ArrayBuffer.isView(img) || img instanceof ArrayBuffer ? this._compressed ? gl.compressedTexImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex, options.level, glFmt.internalFormat, options.width, options.height, 0, img) : gl.texImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex, options.level, glFmt.internalFormat, options.width, options.height, 0, glFmt.format, glFmt.pixelType, img) : gl.texImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex, options.level, glFmt.internalFormat, glFmt.format, glFmt.pixelType, img); + }; + _proto._setMipmap = function _setMipmap(images, flipY, premultiplyAlpha) { + var glFmt = (0, _enums.glTextureFmt)(this._format); + var options = { + width: this._width, + height: this._height, + faceIndex: 0, + flipY: flipY, + premultiplyAlpha: premultiplyAlpha, + level: 0, + image: null + }; + for (var i = 0; i < images.length; ++i) { + var levelImages = images[i]; + options.level = i; + options.width = this._width >> i; + options.height = this._height >> i; + for (var face = 0; face < 6; ++face) { + options.faceIndex = face; + options.image = levelImages[face]; + this._setImage(glFmt, options); + } + } + }; + _proto._setTexInfo = function _setTexInfo() { + var gl = this._device._gl; + var pot = (0, _misc.isPow2)(this._width) && (0, _misc.isPow2)(this._height); + if (!pot && (this._wrapS !== _enums.enums.WRAP_CLAMP || this._wrapT !== _enums.enums.WRAP_CLAMP)) { + console.warn("WebGL1 doesn't support all wrap modes with NPOT textures"); + this._wrapS = _enums.enums.WRAP_CLAMP; + this._wrapT = _enums.enums.WRAP_CLAMP; + } + var mipFilter = this._genMipmaps ? this._mipFilter : -1; + if (!pot && -1 !== mipFilter) { + console.warn("NPOT textures do not support mipmap filter"); + mipFilter = -1; + } + gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MIN_FILTER, (0, _enums.glFilter)(gl, this._minFilter, mipFilter)); + gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MAG_FILTER, (0, _enums.glFilter)(gl, this._magFilter, -1)); + gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_S, this._wrapS); + gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_T, this._wrapT); + var ext = this._device.ext("EXT_texture_filter_anisotropic"); + ext && gl.texParameteri(gl.TEXTURE_CUBE_MAP, ext.TEXTURE_MAX_ANISOTROPY_EXT, this._anisotropy); + }; + return TextureCube; + })(_texture["default"]); + exports["default"] = TextureCube; + module.exports = exports["default"]; + }), { + "./enums": 244, + "./misc": 248, + "./texture": 254 + } ], + 254: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _enums = require("./enums"); + var _nullWebGLTexture = null; + var _textureID = 0; + var Texture = (function() { + function Texture(device) { + this._device = device; + this._width = 4; + this._height = 4; + this._genMipmaps = false; + this._compressed = false; + this._anisotropy = 1; + this._minFilter = _enums.enums.FILTER_LINEAR; + this._magFilter = _enums.enums.FILTER_LINEAR; + this._mipFilter = _enums.enums.FILTER_LINEAR; + this._wrapS = _enums.enums.WRAP_REPEAT; + this._wrapT = _enums.enums.WRAP_REPEAT; + this._format = _enums.enums.TEXTURE_FMT_RGBA8; + this._target = -1; + this._id = _textureID++; + } + var _proto = Texture.prototype; + _proto.destroy = function destroy() { + if (this._glID === _nullWebGLTexture) { + console.error("The texture already destroyed"); + return; + } + var gl = this._device._gl; + gl.deleteTexture(this._glID); + this._device._stats.tex -= this.bytes; + this._glID = _nullWebGLTexture; + }; + return Texture; + })(); + exports["default"] = Texture; + module.exports = exports["default"]; + }), { + "./enums": 244 + } ], + 255: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _enums = require("./enums"); + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + var VertexBuffer = (function() { + function VertexBuffer(device, format, usage, data) { + this._device = device; + this._format = format; + this._usage = usage; + this._bytesPerVertex = this._format._bytes; + this._bytes = data.byteLength; + this._numVertices = this._bytes / this._bytesPerVertex; + this._needExpandDataStore = true; + this._glID = device._gl.createBuffer(); + this.update(0, data); + device._stats.vb += this._bytes; + } + var _proto = VertexBuffer.prototype; + _proto.destroy = function destroy() { + if (-1 === this._glID) { + console.error("The buffer already destroyed"); + return; + } + var gl = this._device._gl; + gl.deleteBuffer(this._glID); + this._device._stats.vb -= this.bytes; + this._glID = -1; + }; + _proto.update = function update(byteOffset, data) { + if (-1 === this._glID) { + console.error("The buffer is destroyed"); + return; + } + if (0 === data.byteLength) return; + if (byteOffset + data.byteLength > this._bytes) { + if (byteOffset) { + console.error("Failed to update data, bytes exceed."); + return; + } + this._needExpandDataStore = true; + this._bytes = byteOffset + data.byteLength; + this._numVertices = this._bytes / this._bytesPerVertex; + } + var gl = this._device._gl; + var glUsage = this._usage; + gl.bindBuffer(gl.ARRAY_BUFFER, this._glID); + if (this._needExpandDataStore) { + gl.bufferData(gl.ARRAY_BUFFER, data, glUsage); + this._needExpandDataStore = false; + } else gl.bufferSubData(gl.ARRAY_BUFFER, byteOffset, data); + gl.bindBuffer(gl.ARRAY_BUFFER, null); + }; + _proto.getFormat = function getFormat(name) { + return this._format.element(name); + }; + _proto.setUsage = function setUsage(usage) { + this._usage = usage; + }; + _createClass(VertexBuffer, [ { + key: "count", + get: function get() { + return this._numVertices; + } + } ]); + return VertexBuffer; + })(); + var _default = VertexBuffer; + exports["default"] = _default; + module.exports = exports["default"]; + }), { + "./enums": 244 + } ], + 256: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _enums = require("./enums"); + var _murmurhash2_gc = _interopRequireDefault(require("../murmurhash2_gc")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var VertexFormat = (function() { + function VertexFormat(infos) { + this._attr2el = {}; + this._elements = []; + this._bytes = 0; + var hash = ""; + for (var i = 0, len = infos.length; i < len; ++i) { + var info = infos[i]; + var el = { + name: info.name, + offset: this._bytes, + stride: 0, + stream: -1, + type: info.type, + num: info.num, + normalize: void 0 !== info.normalize && info.normalize, + bytes: info.num * (0, _enums.attrTypeBytes)(info.type) + }; + this._attr2el[el.name] = el; + this._elements.push(el); + this._bytes += el.bytes; + hash += el.name + ":" + el.num + ":" + el.type + ":" + el.normalize; + } + for (var _i = 0, _len = this._elements.length; _i < _len; ++_i) { + var _el = this._elements[_i]; + _el.stride = this._bytes; + } + this._hash = (0, _murmurhash2_gc["default"])(hash, 666); + } + var _proto = VertexFormat.prototype; + _proto.element = function element(attrName) { + return this._attr2el[attrName]; + }; + _proto.getHash = function getHash() { + return this._hash; + }; + return VertexFormat; + })(); + exports["default"] = VertexFormat; + module.exports = exports["default"]; + }), { + "../murmurhash2_gc": 265, + "./enums": 244 + } ], + 257: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var CircularPool = (function() { + function CircularPool(fn, size) { + this._cursor = 0; + this._data = new Array(size); + for (var i = 0; i < size; ++i) this._data[i] = fn(); + } + var _proto = CircularPool.prototype; + _proto.request = function request() { + var item = this._data[this._cursor]; + this._cursor = (this._cursor + 1) % this._data.length; + return item; + }; + return CircularPool; + })(); + exports["default"] = CircularPool; + module.exports = exports["default"]; + }), {} ], + 258: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _timsort = _interopRequireDefault(require("./timsort")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + var FixedArray = (function() { + function FixedArray(size) { + this._count = 0; + this._data = new Array(size); + } + var _proto = FixedArray.prototype; + _proto._resize = function _resize(size) { + if (size > this._data.length) for (var i = this._data.length; i < size; ++i) this._data[i] = void 0; + }; + _proto.reset = function reset() { + for (var i = 0; i < this._count; ++i) this._data[i] = void 0; + this._count = 0; + }; + _proto.push = function push(val) { + this._count >= this._data.length && this._resize(2 * this._data.length); + this._data[this._count] = val; + ++this._count; + }; + _proto.pop = function pop() { + --this._count; + this._count < 0 && (this._count = 0); + var ret = this._data[this._count]; + this._data[this._count] = void 0; + return ret; + }; + _proto.fastRemove = function fastRemove(idx) { + if (idx >= this._count || idx < 0) return; + var last = this._count - 1; + this._data[idx] = this._data[last]; + this._data[last] = void 0; + this._count -= 1; + }; + _proto.indexOf = function indexOf(val) { + return this._data.indexOf(val); + }; + _proto.sort = function sort(cmp) { + return (0, _timsort["default"])(this._data, 0, this._count, cmp); + }; + _createClass(FixedArray, [ { + key: "length", + get: function get() { + return this._count; + } + }, { + key: "data", + get: function get() { + return this._data; + } + } ]); + return FixedArray; + })(); + exports["default"] = FixedArray; + module.exports = exports["default"]; + }), { + "./timsort": 263 + } ], + 259: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.TypedArrayPool = exports.RecyclePool = exports.Pool = exports.LinkedArray = exports.FixedArray = exports.CircularPool = void 0; + var _circularPool = _interopRequireDefault(require("./circular-pool")); + exports.CircularPool = _circularPool["default"]; + var _fixedArray = _interopRequireDefault(require("./fixed-array")); + exports.FixedArray = _fixedArray["default"]; + var _linkedArray = _interopRequireDefault(require("./linked-array")); + exports.LinkedArray = _linkedArray["default"]; + var _pool = _interopRequireDefault(require("./pool")); + exports.Pool = _pool["default"]; + var _recyclePool = _interopRequireDefault(require("./recycle-pool")); + exports.RecyclePool = _recyclePool["default"]; + var _typedArrayPool = _interopRequireDefault(require("./typed-array-pool")); + exports.TypedArrayPool = _typedArrayPool["default"]; + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + }), { + "./circular-pool": 257, + "./fixed-array": 258, + "./linked-array": 260, + "./pool": 261, + "./recycle-pool": 262, + "./typed-array-pool": 264 + } ], + 260: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _pool = _interopRequireDefault(require("./pool")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + var LinkedArray = (function() { + function LinkedArray(fn, size) { + this._fn = fn; + this._count = 0; + this._head = null; + this._tail = null; + this._pool = new _pool["default"](fn, size); + } + var _proto = LinkedArray.prototype; + _proto.add = function add() { + var node = this._pool.alloc(); + if (this._tail) { + this._tail._next = node; + node._prev = this._tail; + } else this._head = node; + this._tail = node; + this._count += 1; + return node; + }; + _proto.remove = function remove(node) { + node._prev ? node._prev._next = node._next : this._head = node._next; + node._next ? node._next._prev = node._prev : this._tail = node._prev; + node._next = null; + node._prev = null; + this._pool.free(node); + this._count -= 1; + }; + _proto.forEach = function forEach(fn, binder) { + var cursor = this._head; + if (!cursor) return; + binder && (fn = fn.bind(binder)); + var idx = 0; + var next = cursor; + while (cursor) { + next = cursor._next; + fn(cursor, idx, this); + cursor = next; + ++idx; + } + }; + _createClass(LinkedArray, [ { + key: "head", + get: function get() { + return this._head; + } + }, { + key: "tail", + get: function get() { + return this._tail; + } + }, { + key: "length", + get: function get() { + return this._count; + } + } ]); + return LinkedArray; + })(); + exports["default"] = LinkedArray; + module.exports = exports["default"]; + }), { + "./pool": 261 + } ], + 261: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var Pool = (function() { + function Pool(fn, size) { + this._fn = fn; + this._idx = size - 1; + this._frees = new Array(size); + for (var i = 0; i < size; ++i) this._frees[i] = fn(); + } + var _proto = Pool.prototype; + _proto._expand = function _expand(size) { + var old = this._frees; + this._frees = new Array(size); + var len = size - old.length; + for (var i = 0; i < len; ++i) this._frees[i] = this._fn(); + for (var _i = len, j = 0; _i < size; ++_i, ++j) this._frees[_i] = old[j]; + this._idx += len; + }; + _proto.alloc = function alloc() { + this._idx < 0 && this._expand(Math.round(1.2 * this._frees.length) + 1); + var ret = this._frees[this._idx]; + this._frees[this._idx] = null; + --this._idx; + return ret; + }; + _proto.free = function free(obj) { + ++this._idx; + this._frees[this._idx] = obj; + }; + _proto.clear = function clear(fn) { + for (var i = 0; i <= this._idx; i++) fn && fn(this._frees[i]); + this._frees.length = 0; + this._idx = -1; + }; + return Pool; + })(); + exports["default"] = Pool; + module.exports = exports["default"]; + }), {} ], + 262: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _timsort = _interopRequireDefault(require("./timsort")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + var RecyclePool = (function() { + function RecyclePool(fn, size) { + this._fn = fn; + this._count = 0; + this._data = new Array(size); + for (var i = 0; i < size; ++i) this._data[i] = fn(); + } + var _proto = RecyclePool.prototype; + _proto.reset = function reset() { + this._count = 0; + }; + _proto.resize = function resize(size) { + if (size > this._data.length) for (var i = this._data.length; i < size; ++i) this._data[i] = this._fn(); + }; + _proto.add = function add() { + this._count >= this._data.length && this.resize(2 * this._data.length); + return this._data[this._count++]; + }; + _proto.remove = function remove(idx) { + if (idx >= this._count) return; + var last = this._count - 1; + var tmp = this._data[idx]; + this._data[idx] = this._data[last]; + this._data[last] = tmp; + this._count -= 1; + }; + _proto.sort = function sort(cmp) { + return (0, _timsort["default"])(this._data, 0, this._count, cmp); + }; + _createClass(RecyclePool, [ { + key: "length", + get: function get() { + return this._count; + } + }, { + key: "data", + get: function get() { + return this._data; + } + } ]); + return RecyclePool; + })(); + exports["default"] = RecyclePool; + cc.RecyclePool = RecyclePool; + module.exports = exports["default"]; + }), { + "./timsort": 263 + } ], + 263: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = _default; + var DEFAULT_MIN_MERGE = 32; + var DEFAULT_MIN_GALLOPING = 7; + var DEFAULT_TMP_STORAGE_LENGTH = 256; + var POWERS_OF_TEN = [ 1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9 ]; + function log10(x) { + if (x < 1e5) { + if (x < 100) return x < 10 ? 0 : 1; + if (x < 1e4) return x < 1e3 ? 2 : 3; + return 4; + } + if (x < 1e7) return x < 1e6 ? 5 : 6; + if (x < 1e9) return x < 1e8 ? 7 : 8; + return 9; + } + function alphabeticalCompare(a, b) { + if (a === b) return 0; + if (~~a === a && ~~b === b) { + if (0 === a || 0 === b) return a < b ? -1 : 1; + if (a < 0 || b < 0) { + if (b >= 0) return -1; + if (a >= 0) return 1; + a = -a; + b = -b; + } + var al = log10(a); + var bl = log10(b); + var t = 0; + if (al < bl) { + a *= POWERS_OF_TEN[bl - al - 1]; + b /= 10; + t = -1; + } else if (al > bl) { + b *= POWERS_OF_TEN[al - bl - 1]; + a /= 10; + t = 1; + } + if (a === b) return t; + return a < b ? -1 : 1; + } + var aStr = String(a); + var bStr = String(b); + if (aStr === bStr) return 0; + return aStr < bStr ? -1 : 1; + } + function minRunLength(n) { + var r = 0; + while (n >= DEFAULT_MIN_MERGE) { + r |= 1 & n; + n >>= 1; + } + return n + r; + } + function makeAscendingRun(array, lo, hi, compare) { + var runHi = lo + 1; + if (runHi === hi) return 1; + if (compare(array[runHi++], array[lo]) < 0) { + while (runHi < hi && compare(array[runHi], array[runHi - 1]) < 0) runHi++; + reverseRun(array, lo, runHi); + } else while (runHi < hi && compare(array[runHi], array[runHi - 1]) >= 0) runHi++; + return runHi - lo; + } + function reverseRun(array, lo, hi) { + hi--; + while (lo < hi) { + var t = array[lo]; + array[lo++] = array[hi]; + array[hi--] = t; + } + } + function binaryInsertionSort(array, lo, hi, start, compare) { + start === lo && start++; + for (;start < hi; start++) { + var pivot = array[start]; + var left = lo; + var right = start; + while (left < right) { + var mid = left + right >>> 1; + compare(pivot, array[mid]) < 0 ? right = mid : left = mid + 1; + } + var n = start - left; + switch (n) { + case 3: + array[left + 3] = array[left + 2]; + + case 2: + array[left + 2] = array[left + 1]; + + case 1: + array[left + 1] = array[left]; + break; + + default: + while (n > 0) { + array[left + n] = array[left + n - 1]; + n--; + } + } + array[left] = pivot; + } + } + function gallopLeft(value, array, start, length, hint, compare) { + var lastOffset = 0; + var maxOffset = 0; + var offset = 1; + if (compare(value, array[start + hint]) > 0) { + maxOffset = length - hint; + while (offset < maxOffset && compare(value, array[start + hint + offset]) > 0) { + lastOffset = offset; + offset = 1 + (offset << 1); + offset <= 0 && (offset = maxOffset); + } + offset > maxOffset && (offset = maxOffset); + lastOffset += hint; + offset += hint; + } else { + maxOffset = hint + 1; + while (offset < maxOffset && compare(value, array[start + hint - offset]) <= 0) { + lastOffset = offset; + offset = 1 + (offset << 1); + offset <= 0 && (offset = maxOffset); + } + offset > maxOffset && (offset = maxOffset); + var tmp = lastOffset; + lastOffset = hint - offset; + offset = hint - tmp; + } + lastOffset++; + while (lastOffset < offset) { + var m = lastOffset + (offset - lastOffset >>> 1); + compare(value, array[start + m]) > 0 ? lastOffset = m + 1 : offset = m; + } + return offset; + } + function gallopRight(value, array, start, length, hint, compare) { + var lastOffset = 0; + var maxOffset = 0; + var offset = 1; + if (compare(value, array[start + hint]) < 0) { + maxOffset = hint + 1; + while (offset < maxOffset && compare(value, array[start + hint - offset]) < 0) { + lastOffset = offset; + offset = 1 + (offset << 1); + offset <= 0 && (offset = maxOffset); + } + offset > maxOffset && (offset = maxOffset); + var tmp = lastOffset; + lastOffset = hint - offset; + offset = hint - tmp; + } else { + maxOffset = length - hint; + while (offset < maxOffset && compare(value, array[start + hint + offset]) >= 0) { + lastOffset = offset; + offset = 1 + (offset << 1); + offset <= 0 && (offset = maxOffset); + } + offset > maxOffset && (offset = maxOffset); + lastOffset += hint; + offset += hint; + } + lastOffset++; + while (lastOffset < offset) { + var m = lastOffset + (offset - lastOffset >>> 1); + compare(value, array[start + m]) < 0 ? offset = m : lastOffset = m + 1; + } + return offset; + } + var TimSort = (function() { + function TimSort(array, compare) { + this.array = array; + this.compare = compare; + this.minGallop = DEFAULT_MIN_GALLOPING; + this.length = array.length; + this.tmpStorageLength = DEFAULT_TMP_STORAGE_LENGTH; + this.length < 2 * DEFAULT_TMP_STORAGE_LENGTH && (this.tmpStorageLength = this.length >>> 1); + this.tmp = new Array(this.tmpStorageLength); + this.stackLength = this.length < 120 ? 5 : this.length < 1542 ? 10 : this.length < 119151 ? 19 : 40; + this.runStart = new Array(this.stackLength); + this.runLength = new Array(this.stackLength); + this.stackSize = 0; + } + var _proto = TimSort.prototype; + _proto.pushRun = function pushRun(runStart, runLength) { + this.runStart[this.stackSize] = runStart; + this.runLength[this.stackSize] = runLength; + this.stackSize += 1; + }; + _proto.mergeRuns = function mergeRuns() { + while (this.stackSize > 1) { + var n = this.stackSize - 2; + if (n >= 1 && this.runLength[n - 1] <= this.runLength[n] + this.runLength[n + 1] || n >= 2 && this.runLength[n - 2] <= this.runLength[n] + this.runLength[n - 1]) this.runLength[n - 1] < this.runLength[n + 1] && n--; else if (this.runLength[n] > this.runLength[n + 1]) break; + this.mergeAt(n); + } + }; + _proto.forceMergeRuns = function forceMergeRuns() { + while (this.stackSize > 1) { + var n = this.stackSize - 2; + n > 0 && this.runLength[n - 1] < this.runLength[n + 1] && n--; + this.mergeAt(n); + } + }; + _proto.mergeAt = function mergeAt(i) { + var compare = this.compare; + var array = this.array; + var start1 = this.runStart[i]; + var length1 = this.runLength[i]; + var start2 = this.runStart[i + 1]; + var length2 = this.runLength[i + 1]; + this.runLength[i] = length1 + length2; + if (i === this.stackSize - 3) { + this.runStart[i + 1] = this.runStart[i + 2]; + this.runLength[i + 1] = this.runLength[i + 2]; + } + this.stackSize--; + var k = gallopRight(array[start2], array, start1, length1, 0, compare); + start1 += k; + length1 -= k; + if (0 === length1) return; + length2 = gallopLeft(array[start1 + length1 - 1], array, start2, length2, length2 - 1, compare); + if (0 === length2) return; + length1 <= length2 ? this.mergeLow(start1, length1, start2, length2) : this.mergeHigh(start1, length1, start2, length2); + }; + _proto.mergeLow = function mergeLow(start1, length1, start2, length2) { + var compare = this.compare; + var array = this.array; + var tmp = this.tmp; + var i = 0; + for (i = 0; i < length1; i++) tmp[i] = array[start1 + i]; + var cursor1 = 0; + var cursor2 = start2; + var dest = start1; + array[dest++] = array[cursor2++]; + if (0 === --length2) { + for (i = 0; i < length1; i++) array[dest + i] = tmp[cursor1 + i]; + return; + } + if (1 === length1) { + for (i = 0; i < length2; i++) array[dest + i] = array[cursor2 + i]; + array[dest + length2] = tmp[cursor1]; + return; + } + var minGallop = this.minGallop; + while (true) { + var count1 = 0; + var count2 = 0; + var exit = false; + do { + if (compare(array[cursor2], tmp[cursor1]) < 0) { + array[dest++] = array[cursor2++]; + count2++; + count1 = 0; + if (0 === --length2) { + exit = true; + break; + } + } else { + array[dest++] = tmp[cursor1++]; + count1++; + count2 = 0; + if (1 === --length1) { + exit = true; + break; + } + } + } while ((count1 | count2) < minGallop); + if (exit) break; + do { + count1 = gallopRight(array[cursor2], tmp, cursor1, length1, 0, compare); + if (0 !== count1) { + for (i = 0; i < count1; i++) array[dest + i] = tmp[cursor1 + i]; + dest += count1; + cursor1 += count1; + length1 -= count1; + if (length1 <= 1) { + exit = true; + break; + } + } + array[dest++] = array[cursor2++]; + if (0 === --length2) { + exit = true; + break; + } + count2 = gallopLeft(tmp[cursor1], array, cursor2, length2, 0, compare); + if (0 !== count2) { + for (i = 0; i < count2; i++) array[dest + i] = array[cursor2 + i]; + dest += count2; + cursor2 += count2; + length2 -= count2; + if (0 === length2) { + exit = true; + break; + } + } + array[dest++] = tmp[cursor1++]; + if (1 === --length1) { + exit = true; + break; + } + minGallop--; + } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING); + if (exit) break; + minGallop < 0 && (minGallop = 0); + minGallop += 2; + } + this.minGallop = minGallop; + minGallop < 1 && (this.minGallop = 1); + if (1 === length1) { + for (i = 0; i < length2; i++) array[dest + i] = array[cursor2 + i]; + array[dest + length2] = tmp[cursor1]; + } else { + if (0 === length1) throw new Error("mergeLow preconditions were not respected"); + for (i = 0; i < length1; i++) array[dest + i] = tmp[cursor1 + i]; + } + }; + _proto.mergeHigh = function mergeHigh(start1, length1, start2, length2) { + var compare = this.compare; + var array = this.array; + var tmp = this.tmp; + var i = 0; + for (i = 0; i < length2; i++) tmp[i] = array[start2 + i]; + var cursor1 = start1 + length1 - 1; + var cursor2 = length2 - 1; + var dest = start2 + length2 - 1; + var customCursor = 0; + var customDest = 0; + array[dest--] = array[cursor1--]; + if (0 === --length1) { + customCursor = dest - (length2 - 1); + for (i = 0; i < length2; i++) array[customCursor + i] = tmp[i]; + return; + } + if (1 === length2) { + dest -= length1; + cursor1 -= length1; + customDest = dest + 1; + customCursor = cursor1 + 1; + for (i = length1 - 1; i >= 0; i--) array[customDest + i] = array[customCursor + i]; + array[dest] = tmp[cursor2]; + return; + } + var minGallop = this.minGallop; + while (true) { + var count1 = 0; + var count2 = 0; + var exit = false; + do { + if (compare(tmp[cursor2], array[cursor1]) < 0) { + array[dest--] = array[cursor1--]; + count1++; + count2 = 0; + if (0 === --length1) { + exit = true; + break; + } + } else { + array[dest--] = tmp[cursor2--]; + count2++; + count1 = 0; + if (1 === --length2) { + exit = true; + break; + } + } + } while ((count1 | count2) < minGallop); + if (exit) break; + do { + count1 = length1 - gallopRight(tmp[cursor2], array, start1, length1, length1 - 1, compare); + if (0 !== count1) { + dest -= count1; + cursor1 -= count1; + length1 -= count1; + customDest = dest + 1; + customCursor = cursor1 + 1; + for (i = count1 - 1; i >= 0; i--) array[customDest + i] = array[customCursor + i]; + if (0 === length1) { + exit = true; + break; + } + } + array[dest--] = tmp[cursor2--]; + if (1 === --length2) { + exit = true; + break; + } + count2 = length2 - gallopLeft(array[cursor1], tmp, 0, length2, length2 - 1, compare); + if (0 !== count2) { + dest -= count2; + cursor2 -= count2; + length2 -= count2; + customDest = dest + 1; + customCursor = cursor2 + 1; + for (i = 0; i < count2; i++) array[customDest + i] = tmp[customCursor + i]; + if (length2 <= 1) { + exit = true; + break; + } + } + array[dest--] = array[cursor1--]; + if (0 === --length1) { + exit = true; + break; + } + minGallop--; + } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING); + if (exit) break; + minGallop < 0 && (minGallop = 0); + minGallop += 2; + } + this.minGallop = minGallop; + minGallop < 1 && (this.minGallop = 1); + if (1 === length2) { + dest -= length1; + cursor1 -= length1; + customDest = dest + 1; + customCursor = cursor1 + 1; + for (i = length1 - 1; i >= 0; i--) array[customDest + i] = array[customCursor + i]; + array[dest] = tmp[cursor2]; + } else { + if (0 === length2) throw new Error("mergeHigh preconditions were not respected"); + customCursor = dest - (length2 - 1); + for (i = 0; i < length2; i++) array[customCursor + i] = tmp[i]; + } + }; + return TimSort; + })(); + function _default(array, lo, hi, compare) { + if (!Array.isArray(array)) throw new TypeError("Can only sort arrays"); + void 0 === lo && (lo = 0); + void 0 === hi && (hi = array.length); + void 0 === compare && (compare = alphabeticalCompare); + var remaining = hi - lo; + if (remaining < 2) return; + var runLength = 0; + if (remaining < DEFAULT_MIN_MERGE) { + runLength = makeAscendingRun(array, lo, hi, compare); + binaryInsertionSort(array, lo, hi, lo + runLength, compare); + return; + } + var ts = new TimSort(array, compare); + var minRun = minRunLength(remaining); + do { + runLength = makeAscendingRun(array, lo, hi, compare); + if (runLength < minRun) { + var force = remaining; + force > minRun && (force = minRun); + binaryInsertionSort(array, lo, lo + force, lo + runLength, compare); + runLength = force; + } + ts.pushRun(lo, runLength); + ts.mergeRuns(); + remaining -= runLength; + lo += runLength; + } while (0 !== remaining); + ts.forceMergeRuns(); + } + module.exports = exports["default"]; + }), {} ], + 264: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _bufferPools = Array(8); + for (var i = 0; i < 8; ++i) _bufferPools[i] = []; + function _nextPow16(v) { + for (var _i = 16; _i <= 1 << 28; _i *= 16) if (v <= _i) return _i; + return 0; + } + function _log2(v) { + var r, shift; + r = (v > 65535) << 4; + v >>>= r; + shift = (v > 255) << 3; + v >>>= shift; + r |= shift; + shift = (v > 15) << 2; + v >>>= shift; + r |= shift; + shift = (v > 3) << 1; + v >>>= shift; + r |= shift; + return r | v >> 1; + } + function _alloc(n) { + var sz = _nextPow16(n); + var bin = _bufferPools[_log2(sz) >> 2]; + if (bin.length > 0) return bin.pop(); + return new ArrayBuffer(sz); + } + function _free(buf) { + _bufferPools[_log2(buf.byteLength) >> 2].push(buf); + } + var _default = { + alloc_int8: function alloc_int8(n) { + var result = new Int8Array(_alloc(n), 0, n); + if (result.length !== n) return result.subarray(0, n); + return result; + }, + alloc_uint8: function alloc_uint8(n) { + var result = new Uint8Array(_alloc(n), 0, n); + if (result.length !== n) return result.subarray(0, n); + return result; + }, + alloc_int16: function alloc_int16(n) { + var result = new Int16Array(_alloc(2 * n), 0, n); + if (result.length !== n) return result.subarray(0, n); + return result; + }, + alloc_uint16: function alloc_uint16(n) { + var result = new Uint16Array(_alloc(2 * n), 0, n); + if (result.length !== n) return result.subarray(0, n); + return result; + }, + alloc_int32: function alloc_int32(n) { + var result = new Int32Array(_alloc(4 * n), 0, n); + if (result.length !== n) return result.subarray(0, n); + return result; + }, + alloc_uint32: function alloc_uint32(n) { + var result = new Uint32Array(_alloc(4 * n), 0, n); + if (result.length !== n) return result.subarray(0, n); + return result; + }, + alloc_float32: function alloc_float32(n) { + var result = new Float32Array(_alloc(4 * n), 0, n); + if (result.length !== n) return result.subarray(0, n); + return result; + }, + alloc_float64: function alloc_float64(n) { + var result = new Float64Array(_alloc(8 * n), 0, n); + if (result.length !== n) return result.subarray(0, n); + return result; + }, + alloc_dataview: function alloc_dataview(n) { + var result = new DataView(_alloc(n), 0, n); + if (result.length !== n) return result.subarray(0, n); + return result; + }, + free: function free(array) { + _free(array.buffer); + }, + reset: function reset() { + var _bufferPools = Array(8); + for (var _i2 = 0; _i2 < 8; ++_i2) _bufferPools[_i2] = []; + } + }; + exports["default"] = _default; + module.exports = exports["default"]; + }), {} ], + 265: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = murmurhash2_32_gc; + function murmurhash2_32_gc(str, seed) { + var l = str.length, h = seed ^ l, i = 0, k; + while (l >= 4) { + k = 255 & str.charCodeAt(i) | (255 & str.charCodeAt(++i)) << 8 | (255 & str.charCodeAt(++i)) << 16 | (255 & str.charCodeAt(++i)) << 24; + k = 1540483477 * (65535 & k) + ((1540483477 * (k >>> 16) & 65535) << 16); + k ^= k >>> 24; + k = 1540483477 * (65535 & k) + ((1540483477 * (k >>> 16) & 65535) << 16); + h = 1540483477 * (65535 & h) + ((1540483477 * (h >>> 16) & 65535) << 16) ^ k; + l -= 4; + ++i; + } + switch (l) { + case 3: + h ^= (255 & str.charCodeAt(i + 2)) << 16; + + case 2: + h ^= (255 & str.charCodeAt(i + 1)) << 8; + + case 1: + h ^= 255 & str.charCodeAt(i); + h = 1540483477 * (65535 & h) + ((1540483477 * (h >>> 16) & 65535) << 16); + } + h ^= h >>> 13; + h = 1540483477 * (65535 & h) + ((1540483477 * (h >>> 16) & 65535) << 16); + h ^= h >>> 15; + return h >>> 0; + } + module.exports = exports["default"]; + }), {} ], + 266: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _valueTypes = require("../../core/value-types"); + var _baseRenderer = _interopRequireDefault(require("../core/base-renderer")); + var _enums = _interopRequireDefault(require("../enums")); + var _memop = require("../memop"); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _assertThisInitialized(self) { + if (void 0 === self) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return self; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var _a16_view = new Float32Array(16); + var _a16_view_inv = new Float32Array(16); + var _a16_proj = new Float32Array(16); + var _a16_viewProj = new Float32Array(16); + var _a4_camPos = new Float32Array(4); + var _a64_shadow_lightViewProj = new Float32Array(64); + var _a16_shadow_lightViewProjs = []; + var _a4_shadow_info = new Float32Array(4); + var _camPos = new _valueTypes.Vec4(0, 0, 0, 0); + var _camFwd = new _valueTypes.Vec3(0, 0, 0); + var _v3_tmp1 = new _valueTypes.Vec3(0, 0, 0); + var CC_MAX_LIGHTS = 4; + var CC_MAX_SHADOW_LIGHTS = 2; + var _float16_pool = new _memop.RecyclePool(function() { + return new Float32Array(16); + }, 8); + function sortView(a, b) { + return a._priority - b._priority; + } + var ForwardRenderer = (function(_BaseRenderer) { + _inheritsLoose(ForwardRenderer, _BaseRenderer); + function ForwardRenderer(device, builtin) { + var _this; + _this = _BaseRenderer.call(this, device, builtin) || this; + _this._time = new Float32Array(4); + _this._lights = []; + _this._shadowLights = []; + _this._numLights = 0; + _this._defines = {}; + _this._registerStage("shadowcast", _this._shadowStage.bind(_assertThisInitialized(_this))); + _this._registerStage("opaque", _this._opaqueStage.bind(_assertThisInitialized(_this))); + _this._registerStage("transparent", _this._transparentStage.bind(_assertThisInitialized(_this))); + return _this; + } + var _proto = ForwardRenderer.prototype; + _proto.reset = function reset() { + _float16_pool.reset(); + _BaseRenderer.prototype.reset.call(this); + }; + _proto.render = function render(scene, dt) { + this.reset(); + true; + if (dt) { + this._time[0] += dt; + this._time[1] = dt; + this._time[2]++; + } + this._device.setUniform("cc_time", this._time); + this._updateLights(scene); + var canvas = this._device._gl.canvas; + for (var i = 0; i < scene._cameras.length; ++i) { + var view = this._requestView(); + var width = canvas.width; + var height = canvas.height; + var camera = scene._cameras.data[i]; + camera.extractView(view, width, height); + } + this._viewPools.sort(sortView); + for (var _i = 0; _i < this._viewPools.length; ++_i) { + var _view = this._viewPools.data[_i]; + this._render(_view, scene); + } + }; + _proto.renderCamera = function renderCamera(camera, scene) { + this.reset(); + this._updateLights(scene); + var canvas = this._device._gl.canvas; + var width = canvas.width; + var height = canvas.height; + var view = this._requestView(); + camera.extractView(view, width, height); + this._viewPools.sort(sortView); + for (var i = 0; i < this._viewPools.length; ++i) { + var _view2 = this._viewPools.data[i]; + this._render(_view2, scene); + } + }; + _proto._updateLights = function _updateLights(scene) { + this._lights.length = 0; + this._shadowLights.length = 0; + var lights = scene._lights; + for (var i = 0; i < lights.length; ++i) { + var light = lights.data[i]; + light.update(this._device); + if (light.shadowType !== _enums["default"].SHADOW_NONE) { + this._shadowLights.length < CC_MAX_SHADOW_LIGHTS && this._shadowLights.splice(0, 0, light); + var view = this._requestView(); + light.extractView(view, [ "shadowcast" ]); + this._lights.splice(0, 0, light); + } else this._lights.push(light); + } + this._updateLightDefines(); + this._numLights = lights._count; + }; + _proto._updateLightDefines = function _updateLightDefines() { + var defines = this._defines; + for (var i = 0; i < this._lights.length; ++i) { + var light = this._lights[i]; + var lightKey = "CC_LIGHT_" + i + "_TYPE"; + var shadowKey = "CC_SHADOW_" + i + "_TYPE"; + if (defines[lightKey] !== light._type) { + defines[lightKey] = light._type; + this._definesChanged = true; + } + if (defines[shadowKey] !== light._shadowType) { + defines[shadowKey] = light._shadowType; + this._definesChanged = true; + } + } + var newCount = Math.min(CC_MAX_LIGHTS, this._lights.length); + if (defines.CC_NUM_LIGHTS !== newCount) { + defines.CC_NUM_LIGHTS = newCount; + this._definesChanged = true; + } + newCount = Math.min(CC_MAX_LIGHTS, this._shadowLights.length); + if (defines.CC_NUM_SHADOW_LIGHTS !== newCount) { + defines.CC_NUM_SHADOW_LIGHTS = newCount; + this._definesChanged = true; + } + }; + _proto._submitLightsUniforms = function _submitLightsUniforms() { + var device = this._device; + if (this._lights.length > 0) { + var positionAndRanges = _float16_pool.add(); + var directions = _float16_pool.add(); + var colors = _float16_pool.add(); + var lightNum = Math.min(CC_MAX_LIGHTS, this._lights.length); + for (var i = 0; i < lightNum; ++i) { + var light = this._lights[i]; + var index = 4 * i; + colors.set(light._colorUniform, index); + directions.set(light._directionUniform, index); + positionAndRanges.set(light._positionUniform, index); + positionAndRanges[index + 3] = light._range; + if (light._type === _enums["default"].LIGHT_SPOT) { + directions[index + 3] = light._spotUniform[0]; + colors[index + 3] = light._spotUniform[1]; + } else { + directions[index + 3] = 0; + colors[index + 3] = 0; + } + } + device.setUniform("cc_lightDirection", directions); + device.setUniform("cc_lightColor", colors); + device.setUniform("cc_lightPositionAndRange", positionAndRanges); + } + }; + _proto._submitShadowStageUniforms = function _submitShadowStageUniforms(view) { + var light = view._shadowLight; + var shadowInfo = _a4_shadow_info; + shadowInfo[0] = light.shadowMinDepth; + shadowInfo[1] = light.shadowMaxDepth; + shadowInfo[2] = light.shadowDepthScale; + shadowInfo[3] = light.shadowDarkness; + this._device.setUniform("cc_shadow_map_lightViewProjMatrix", _valueTypes.Mat4.toArray(_a16_viewProj, view._matViewProj)); + this._device.setUniform("cc_shadow_map_info", shadowInfo); + this._device.setUniform("cc_shadow_map_bias", light.shadowBias); + this._defines.CC_SHADOW_TYPE = light._shadowType; + }; + _proto._submitOtherStagesUniforms = function _submitOtherStagesUniforms() { + var shadowInfo = _float16_pool.add(); + for (var i = 0; i < this._shadowLights.length; ++i) { + var light = this._shadowLights[i]; + var view = _a16_shadow_lightViewProjs[i]; + view || (view = _a16_shadow_lightViewProjs[i] = new Float32Array(_a64_shadow_lightViewProj.buffer, 64 * i, 16)); + _valueTypes.Mat4.toArray(view, light.viewProjMatrix); + var index = 4 * i; + shadowInfo[index] = light.shadowMinDepth; + shadowInfo[index + 1] = light.shadowMaxDepth; + shadowInfo[index + 2] = light._shadowResolution; + shadowInfo[index + 3] = light.shadowDarkness; + } + this._device.setUniform("cc_shadow_lightViewProjMatrix", _a64_shadow_lightViewProj); + this._device.setUniform("cc_shadow_info", shadowInfo); + }; + _proto._sortItems = function _sortItems(items) { + items.sort((function(a, b) { + if (a.passes.length !== b.passes.length) return a.passes.length - b.passes.length; + return a.sortKey - b.sortKey; + })); + }; + _proto._shadowStage = function _shadowStage(view, items) { + this._submitShadowStageUniforms(view); + for (var i = 0; i < items.length; ++i) { + var item = items.data[i]; + item.effect.getDefine("CC_CASTING_SHADOW") && this._draw(item); + } + }; + _proto._drawItems = function _drawItems(view, items) { + var shadowLights = this._shadowLights; + if (0 === shadowLights.length && 0 === this._numLights) for (var i = 0; i < items.length; ++i) { + var item = items.data[i]; + this._draw(item); + } else for (var _i2 = 0; _i2 < items.length; ++_i2) { + var _item = items.data[_i2]; + for (var shadowIdx = 0; shadowIdx < shadowLights.length; ++shadowIdx) this._device.setTexture("cc_shadow_map_" + shadowIdx, shadowLights[shadowIdx].shadowMap, this._allocTextureUnit()); + this._draw(_item); + } + }; + _proto._opaqueStage = function _opaqueStage(view, items) { + view.getPosition(_camPos); + this._device.setUniform("cc_matView", _valueTypes.Mat4.toArray(_a16_view, view._matView)); + this._device.setUniform("cc_matViewInv", _valueTypes.Mat4.toArray(_a16_view_inv, view._matViewInv)); + this._device.setUniform("cc_matProj", _valueTypes.Mat4.toArray(_a16_proj, view._matProj)); + this._device.setUniform("cc_matViewProj", _valueTypes.Mat4.toArray(_a16_viewProj, view._matViewProj)); + this._device.setUniform("cc_cameraPos", _valueTypes.Vec4.toArray(_a4_camPos, _camPos)); + this._submitLightsUniforms(); + this._submitOtherStagesUniforms(); + this._drawItems(view, items); + }; + _proto._transparentStage = function _transparentStage(view, items) { + view.getPosition(_camPos); + view.getForward(_camFwd); + this._device.setUniform("cc_matView", _valueTypes.Mat4.toArray(_a16_view, view._matView)); + this._device.setUniform("cc_matViewInv", _valueTypes.Mat4.toArray(_a16_view_inv, view._matViewInv)); + this._device.setUniform("cc_matProj", _valueTypes.Mat4.toArray(_a16_proj, view._matProj)); + this._device.setUniform("cc_matViewProj", _valueTypes.Mat4.toArray(_a16_viewProj, view._matViewProj)); + this._device.setUniform("cc_cameraPos", _valueTypes.Vec4.toArray(_a4_camPos, _camPos)); + this._submitLightsUniforms(); + this._submitOtherStagesUniforms(); + for (var i = 0; i < items.length; ++i) { + var item = items.data[i]; + item.node.getWorldPosition(_v3_tmp1); + _valueTypes.Vec3.sub(_v3_tmp1, _v3_tmp1, _camPos); + item.sortKey = -_valueTypes.Vec3.dot(_v3_tmp1, _camFwd); + } + this._sortItems(items); + this._drawItems(view, items); + }; + return ForwardRenderer; + })(_baseRenderer["default"]); + exports["default"] = ForwardRenderer; + module.exports = exports["default"]; + }), { + "../../core/value-types": 220, + "../core/base-renderer": 236, + "../enums": 242, + "../memop": 259 + } ], + 267: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _valueTypes = require("../../core/value-types"); + var _geomUtils = require("../../core/geom-utils"); + var _enums = _interopRequireDefault(require("../enums")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + var _tmp_mat4 = new _valueTypes.Mat4(); + var _matView = new _valueTypes.Mat4(); + var _matViewInv = new _valueTypes.Mat4(); + var _matProj = new _valueTypes.Mat4(); + var _matViewProj = new _valueTypes.Mat4(); + var _matInvViewProj = new _valueTypes.Mat4(); + var _tmp_v3 = new _valueTypes.Vec3(); + var _tmp2_v3 = new _valueTypes.Vec3(); + var Camera = (function() { + function Camera() { + this._poolID = -1; + this._node = null; + this._projection = _enums["default"].PROJ_PERSPECTIVE; + this._priority = 0; + this._color = new _valueTypes.Vec4(.2, .3, .47, 1); + this._depth = 1; + this._stencil = 0; + this._clearFlags = _enums["default"].CLEAR_COLOR | _enums["default"].CLEAR_DEPTH; + this._clearModel = null; + this._stages = []; + this._framebuffer = null; + this._near = .01; + this._far = 1e3; + this._fov = Math.PI / 4; + this._rect = { + x: 0, + y: 0, + w: 1, + h: 1 + }; + this._orthoHeight = 10; + this._cullingMask = 4294967295; + } + var _proto = Camera.prototype; + _proto.setCullingMask = function setCullingMask(mask) { + this._cullingMask = mask; + }; + _proto.getNode = function getNode() { + return this._node; + }; + _proto.setNode = function setNode(node) { + this._node = node; + }; + _proto.getType = function getType() { + return this._projection; + }; + _proto.setType = function setType(type) { + this._projection = type; + }; + _proto.getPriority = function getPriority() { + return this._priority; + }; + _proto.setPriority = function setPriority(priority) { + this._priority = priority; + }; + _proto.getOrthoHeight = function getOrthoHeight() { + return this._orthoHeight; + }; + _proto.setOrthoHeight = function setOrthoHeight(val) { + this._orthoHeight = val; + }; + _proto.getFov = function getFov() { + return this._fov; + }; + _proto.setFov = function setFov(fov) { + this._fov = fov; + }; + _proto.getNear = function getNear() { + return this._near; + }; + _proto.setNear = function setNear(near) { + this._near = near; + }; + _proto.getFar = function getFar() { + return this._far; + }; + _proto.setFar = function setFar(far) { + this._far = far; + }; + _proto.getColor = function getColor(out) { + return _valueTypes.Vec4.copy(out, this._color); + }; + _proto.setColor = function setColor(r, g, b, a) { + _valueTypes.Vec4.set(this._color, r, g, b, a); + }; + _proto.getDepth = function getDepth() { + return this._depth; + }; + _proto.setDepth = function setDepth(depth) { + this._depth = depth; + }; + _proto.getStencil = function getStencil() { + return this._stencil; + }; + _proto.setStencil = function setStencil(stencil) { + this._stencil = stencil; + }; + _proto.getClearFlags = function getClearFlags() { + return this._clearFlags; + }; + _proto.setClearFlags = function setClearFlags(flags) { + this._clearFlags = flags; + }; + _proto.getRect = function getRect(out) { + out.x = this._rect.x; + out.y = this._rect.y; + out.w = this._rect.w; + out.h = this._rect.h; + return out; + }; + _proto.setRect = function setRect(x, y, w, h) { + this._rect.x = x; + this._rect.y = y; + this._rect.w = w; + this._rect.h = h; + }; + _proto.getStages = function getStages() { + return this._stages; + }; + _proto.setStages = function setStages(stages) { + this._stages = stages; + }; + _proto.getFramebuffer = function getFramebuffer() { + return this._framebuffer; + }; + _proto.setFrameBuffer = function setFrameBuffer(framebuffer) { + this._framebuffer = framebuffer; + }; + _proto._calcMatrices = function _calcMatrices(width, height) { + this._node.getWorldRT(_matViewInv); + _valueTypes.Mat4.invert(_matView, _matViewInv); + var aspect = width / height; + if (this._projection === _enums["default"].PROJ_PERSPECTIVE) _valueTypes.Mat4.perspective(_matProj, this._fov, aspect, this._near, this._far); else { + var x = this._orthoHeight * aspect; + var y = this._orthoHeight; + _valueTypes.Mat4.ortho(_matProj, -x, x, -y, y, this._near, this._far); + } + _valueTypes.Mat4.mul(_matViewProj, _matProj, _matView); + _valueTypes.Mat4.invert(_matInvViewProj, _matViewProj); + }; + _proto.extractView = function extractView(out, width, height) { + if (this._framebuffer) { + width = this._framebuffer._width; + height = this._framebuffer._height; + } + out._priority = this._priority; + out._rect.x = this._rect.x * width; + out._rect.y = this._rect.y * height; + out._rect.w = this._rect.w * width; + out._rect.h = this._rect.h * height; + this.getColor(out._color); + out._depth = this._depth; + out._stencil = this._stencil; + out._clearFlags = this._clearFlags; + out._clearModel = this._clearModel; + out._stages = this._stages; + out._framebuffer = this._framebuffer; + this._calcMatrices(width, height); + _valueTypes.Mat4.copy(out._matView, _matView); + _valueTypes.Mat4.copy(out._matViewInv, _matViewInv); + _valueTypes.Mat4.copy(out._matProj, _matProj); + _valueTypes.Mat4.copy(out._matViewProj, _matViewProj); + _valueTypes.Mat4.copy(out._matInvViewProj, _matInvViewProj); + out._cullingMask = this._cullingMask; + }; + _proto.screenPointToRay = function screenPointToRay(x, y, width, height, out) { + if (!cc.geomUtils) return out; + out = out || new _geomUtils.Ray(); + this._calcMatrices(width, height); + var cx = this._rect.x * width; + var cy = this._rect.y * height; + var cw = this._rect.w * width; + var ch = this._rect.h * height; + _valueTypes.Vec3.set(_tmp2_v3, (x - cx) / cw * 2 - 1, (y - cy) / ch * 2 - 1, 1); + _valueTypes.Vec3.transformMat4(_tmp2_v3, _tmp2_v3, _matInvViewProj); + if (this._projection === _enums["default"].PROJ_PERSPECTIVE) this._node.getWorldPosition(_tmp_v3); else { + _valueTypes.Vec3.set(_tmp_v3, (x - cx) / cw * 2 - 1, (y - cy) / ch * 2 - 1, -1); + _valueTypes.Vec3.transformMat4(_tmp_v3, _tmp_v3, _matInvViewProj); + } + return _geomUtils.Ray.fromPoints(out, _tmp_v3, _tmp2_v3); + }; + _proto.screenToWorld = function screenToWorld(out, screenPos, width, height) { + this._calcMatrices(width, height); + var cx = this._rect.x * width; + var cy = this._rect.y * height; + var cw = this._rect.w * width; + var ch = this._rect.h * height; + if (this._projection === _enums["default"].PROJ_PERSPECTIVE) { + _valueTypes.Vec3.set(out, (screenPos.x - cx) / cw * 2 - 1, (screenPos.y - cy) / ch * 2 - 1, .9999); + _valueTypes.Vec3.transformMat4(out, out, _matInvViewProj); + this._node.getWorldPosition(_tmp_v3); + _valueTypes.Vec3.lerp(out, _tmp_v3, out, (0, _valueTypes.lerp)(this._near / this._far, 1, screenPos.z)); + } else { + _valueTypes.Vec3.set(out, (screenPos.x - cx) / cw * 2 - 1, (screenPos.y - cy) / ch * 2 - 1, 2 * screenPos.z - 1); + _valueTypes.Vec3.transformMat4(out, out, _matInvViewProj); + } + return out; + }; + _proto.worldToScreen = function worldToScreen(out, worldPos, width, height) { + this._calcMatrices(width, height); + var cx = this._rect.x * width; + var cy = this._rect.y * height; + var cw = this._rect.w * width; + var ch = this._rect.h * height; + _valueTypes.Vec3.transformMat4(out, worldPos, _matViewProj); + out.x = cx + .5 * (out.x + 1) * cw; + out.y = cy + .5 * (out.y + 1) * ch; + out.z = .5 * out.z + .5; + return out; + }; + _proto.worldMatrixToScreen = function worldMatrixToScreen(out, worldMatrix, width, height) { + this._calcMatrices(width, height); + _valueTypes.Mat4.mul(out, _matViewProj, worldMatrix); + var halfWidth = width / 2; + var halfHeight = height / 2; + _valueTypes.Mat4.identity(_tmp_mat4); + _valueTypes.Mat4.transform(_tmp_mat4, _tmp_mat4, _valueTypes.Vec3.set(_tmp_v3, halfWidth, halfHeight, 0)); + _valueTypes.Mat4.scale(_tmp_mat4, _tmp_mat4, _valueTypes.Vec3.set(_tmp_v3, halfWidth, halfHeight, 1)); + _valueTypes.Mat4.mul(out, _tmp_mat4, out); + return out; + }; + _createClass(Camera, [ { + key: "cullingMask", + get: function get() { + return this._cullingMask; + }, + set: function set(mask) { + this._cullingMask = mask; + } + } ]); + return Camera; + })(); + exports["default"] = Camera; + module.exports = exports["default"]; + }), { + "../../core/geom-utils": void 0, + "../../core/value-types": 220, + "../enums": 242 + } ], + 268: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var Model = (function() { + function Model() { + this._type = "default"; + this._poolID = -1; + this._node = null; + this._inputAssembler = null; + this._effect = null; + this._viewID = -1; + this._cameraID = -1; + this._userKey = -1; + this._castShadow = false; + this._boundingShape = null; + } + var _proto = Model.prototype; + _proto.setNode = function setNode(node) { + this._node = node; + }; + _proto.setInputAssembler = function setInputAssembler(ia) { + this._inputAssembler = ia; + }; + _proto.setEffect = function setEffect(effect) { + this._effect = effect; + }; + _proto.setUserKey = function setUserKey(key) { + this._userKey = key; + }; + _proto.extractDrawItem = function extractDrawItem(out) { + out.model = this; + out.node = this._node; + out.ia = this._inputAssembler; + out.effect = this._effect; + }; + return Model; + })(); + exports["default"] = Model; + module.exports = exports["default"]; + }), {} ], + 269: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _memop = require("../memop"); + var Scene = (function() { + function Scene(app) { + this._lights = new _memop.FixedArray(16); + this._models = new _memop.FixedArray(16); + this._cameras = new _memop.FixedArray(16); + this._debugCamera = null; + this._app = app; + this._views = []; + } + var _proto = Scene.prototype; + _proto._add = function _add(pool, item) { + if (-1 !== item._poolID) return; + pool.push(item); + item._poolID = pool.length - 1; + }; + _proto._remove = function _remove(pool, item) { + if (-1 === item._poolID) return; + pool.data[pool.length - 1]._poolID = item._poolID; + pool.fastRemove(item._poolID); + item._poolID = -1; + }; + _proto.reset = function reset() { + for (var i = 0; i < this._models.length; ++i) { + var model = this._models.data[i]; + model._viewID = -1; + } + }; + _proto.setDebugCamera = function setDebugCamera(cam) { + this._debugCamera = cam; + }; + _proto.getCameraCount = function getCameraCount() { + return this._cameras.length; + }; + _proto.getCamera = function getCamera(idx) { + return this._cameras.data[idx]; + }; + _proto.addCamera = function addCamera(camera) { + this._add(this._cameras, camera); + }; + _proto.removeCamera = function removeCamera(camera) { + this._remove(this._cameras, camera); + }; + _proto.getModelCount = function getModelCount() { + return this._models.length; + }; + _proto.getModel = function getModel(idx) { + return this._models.data[idx]; + }; + _proto.addModel = function addModel(model) { + this._add(this._models, model); + }; + _proto.removeModel = function removeModel(model) { + this._remove(this._models, model); + }; + _proto.getLightCount = function getLightCount() { + return this._lights.length; + }; + _proto.getLight = function getLight(idx) { + return this._lights.data[idx]; + }; + _proto.addLight = function addLight(light) { + this._add(this._lights, light); + }; + _proto.removeLight = function removeLight(light) { + this._remove(this._lights, light); + }; + _proto.addView = function addView(view) { + -1 === this._views.indexOf(view) && this._views.push(view); + }; + _proto.removeView = function removeView(view) { + var idx = this._views.indexOf(view); + -1 !== idx && this._views.splice(idx, 1); + }; + return Scene; + })(); + var _default = Scene; + exports["default"] = _default; + module.exports = exports["default"]; + }), { + "../memop": 259 + } ], + 270: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.getClassName = exports.enums2default = exports.ctor2enums = void 0; + exports.getInspectorProps = getInspectorProps; + exports.getInstanceType = exports.getInstanceCtor = void 0; + var _enums = _interopRequireDefault(require("./enums")); + var _valueTypes = require("../core/value-types"); + var _CCTexture2D = _interopRequireDefault(require("../core/assets/CCTexture2D")); + var _ctor2default, _enums2ctor, _ctor2enums, _enums2default; + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var gfxTexture2D = null, gfxTextureCube = null; + false; + gfxTexture2D = require("./gfx/texture-2d"); + var CCObject = cc.Object; + var ctor2default = (_ctor2default = {}, _ctor2default[Boolean] = function(v) { + return v || false; + }, _ctor2default[Number] = function(v) { + return v ? ArrayBuffer.isView(v) ? v[0] : v : 0; + }, _ctor2default[_valueTypes.Vec2] = function(v) { + return v ? cc.v2(v[0], v[1]) : cc.v2(); + }, _ctor2default[_valueTypes.Vec3] = function(v) { + return v ? cc.v3(v[0], v[1], v[2]) : cc.v3(); + }, _ctor2default[_valueTypes.Vec4] = function(v) { + return v ? cc.v4(v[0], v[1], v[2], v[3]) : cc.v4(); + }, _ctor2default[_valueTypes.Color] = function(v) { + return v ? cc.color(255 * v[0], 255 * v[1], 255 * v[2], 255 * (v[3] || 1)) : cc.color(); + }, _ctor2default[_valueTypes.Mat4] = function(v) { + return v ? cc.mat4(v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9], v[10], v[11], v[12], v[13], v[14], v[15]) : cc.mat4(); + }, _ctor2default[_CCTexture2D["default"]] = function() { + return null; + }, _ctor2default[CCObject] = function() { + return null; + }, _ctor2default); + var enums2ctor = (_enums2ctor = {}, _enums2ctor[_enums["default"].PARAM_INT] = Number, + _enums2ctor[_enums["default"].PARAM_INT2] = _valueTypes.Vec2, _enums2ctor[_enums["default"].PARAM_INT3] = _valueTypes.Vec3, + _enums2ctor[_enums["default"].PARAM_INT4] = _valueTypes.Vec4, _enums2ctor[_enums["default"].PARAM_FLOAT] = Number, + _enums2ctor[_enums["default"].PARAM_FLOAT2] = _valueTypes.Vec2, _enums2ctor[_enums["default"].PARAM_FLOAT3] = _valueTypes.Vec3, + _enums2ctor[_enums["default"].PARAM_FLOAT4] = _valueTypes.Vec4, _enums2ctor[_enums["default"].PARAM_MAT4] = _valueTypes.Mat4, + _enums2ctor[_enums["default"].PARAM_TEXTURE_2D] = _CCTexture2D["default"], _enums2ctor.color = _valueTypes.Color, + _enums2ctor.number = Number, _enums2ctor["boolean"] = Boolean, _enums2ctor["default"] = CCObject, + _enums2ctor); + var ctor2enums = (_ctor2enums = {}, _ctor2enums[Number] = _enums["default"].PARAM_FLOAT, + _ctor2enums[_valueTypes.Vec2] = _enums["default"].PARAM_FLOAT2, _ctor2enums[_valueTypes.Vec3] = _enums["default"].PARAM_FLOAT3, + _ctor2enums[_valueTypes.Vec4] = _enums["default"].PARAM_FLOAT4, _ctor2enums[_valueTypes.Color] = _enums["default"].PARAM_COLOR3, + _ctor2enums[_valueTypes.Color] = _enums["default"].PARAM_COLOR4, _ctor2enums[_valueTypes.Mat4] = _enums["default"].PARAM_MAT4, + _ctor2enums[_CCTexture2D["default"]] = _enums["default"].PARAM_TEXTURE_2D, _ctor2enums[gfxTexture2D] = _enums["default"].PARAM_TEXTURE_2D, + _ctor2enums); + exports.ctor2enums = ctor2enums; + var enums2default = (_enums2default = {}, _enums2default[_enums["default"].PARAM_INT] = new Uint32Array([ 0 ]), + _enums2default[_enums["default"].PARAM_INT2] = new Uint32Array([ 0, 0 ]), _enums2default[_enums["default"].PARAM_INT3] = new Uint32Array([ 0, 0, 0 ]), + _enums2default[_enums["default"].PARAM_INT4] = new Uint32Array([ 0, 0, 0, 0 ]), + _enums2default[_enums["default"].PARAM_FLOAT] = new Float32Array([ 0 ]), _enums2default[_enums["default"].PARAM_FLOAT2] = new Float32Array([ 0, 0 ]), + _enums2default[_enums["default"].PARAM_FLOAT3] = new Float32Array([ 0, 0, 0 ]), + _enums2default[_enums["default"].PARAM_FLOAT4] = new Float32Array([ 0, 0, 0, 0 ]), + _enums2default[_enums["default"].PARAM_MAT4] = cc.mat4().m, _enums2default[_enums["default"].PARAM_TEXTURE_2D] = null, + _enums2default.number = 0, _enums2default["boolean"] = false, _enums2default); + exports.enums2default = enums2default; + var getInstanceType = function getInstanceType(t) { + return enums2ctor[t] || enums2ctor["default"]; + }; + exports.getInstanceType = getInstanceType; + var getInstanceCtor = function getInstanceCtor(t) { + return ctor2default[getInstanceType(t)]; + }; + exports.getInstanceCtor = getInstanceCtor; + var getClassName = function getClassName(t) { + return cc.js.getClassName(getInstanceType(t)); + }; + exports.getClassName = getClassName; + var className2InspectorName = { + Number: "number", + Boolean: "boolean" + }; + function getInspectorProps(prop) { + var editor = { + type: prop.type + }; + Object.assign(editor, prop.editor || prop.inspector); + editor.defines = prop.defines; + editor.value = getInstanceCtor(editor.type)(prop.value); + prop.range && (editor.range = prop.range); + var className = getClassName(editor.type); + editor.typeName = className2InspectorName[className] || className; + editor.valueCtor = enums2ctor[editor.type]; + if ("cc.Texture2D" == editor.typeName) { + editor.typeName = "cc.Asset"; + editor.assetType = "cc.Texture2D"; + } + return editor; + } + }), { + "../core/assets/CCTexture2D": 72, + "../core/value-types": 220, + "./enums": 242, + "./gfx/texture-2d": 252 + } ], + 271: [ (function(require, module, exports) { + "use strict"; + var TiledMapAsset = cc.Class({ + name: "cc.TiledMapAsset", + extends: cc.Asset, + properties: { + tmxXmlStr: "", + textures: { + default: [], + type: [ cc.Texture2D ] + }, + textureNames: [ cc.String ], + textureSizes: { + default: [], + type: [ cc.Size ] + }, + imageLayerTextures: { + default: [], + type: [ cc.Texture2D ] + }, + imageLayerTextureNames: [ cc.String ], + tsxFiles: [ cc.TextAsset ], + tsxFileNames: [ cc.String ] + }, + statics: { + preventDeferredLoadDependents: true + }, + createNode: false + }); + cc.TiledMapAsset = TiledMapAsset; + module.exports = TiledMapAsset; + }), {} ], + 272: [ (function(require, module, exports) { + "use strict"; + require("./cocos2d/core"); + require("./cocos2d/animation"); + false; + require("./cocos2d/particle"); + require("./cocos2d/tilemap"); + require("./cocos2d/videoplayer/CCVideoPlayer"); + require("./cocos2d/webview/CCWebView"); + require("./cocos2d/core/components/CCStudioComponent"); + require("./extensions/ccpool/CCNodePool"); + require("./cocos2d/actions"); + require("./extensions/spine"); + require("./extensions/dragonbones"); + true; + require("./cocos2d/deprecated"); + }), { + "./cocos2d/actions": 8, + "./cocos2d/animation": 17, + "./cocos2d/core": 119, + "./cocos2d/core/components/CCStudioComponent": void 0, + "./cocos2d/deprecated": 232, + "./cocos2d/particle": void 0, + "./cocos2d/particle/CCParticleAsset": 234, + "./cocos2d/tilemap": void 0, + "./cocos2d/tilemap/CCTiledMapAsset": 271, + "./cocos2d/videoplayer/CCVideoPlayer": void 0, + "./cocos2d/webview/CCWebView": void 0, + "./extensions/ccpool/CCNodePool": void 0, + "./extensions/dragonbones": void 0, + "./extensions/spine": 275 + } ], + 273: [ (function(require, module, exports) { + "use strict"; + var _mat = _interopRequireDefault(require("../../cocos2d/core/value-types/mat4")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var RenderFlow = require("../../cocos2d/core/renderer/render-flow"); + var FLAG_TRANSFORM = RenderFlow.FLAG_TRANSFORM; + var EmptyHandle = function EmptyHandle() {}; + var ATTACHED_ROOT_NAME = "ATTACHED_NODE_TREE"; + var ATTACHED_PRE_NAME = "ATTACHED_NODE:"; + var limitNode = function limitNode(node) { + Object.defineProperty(node, "_worldMatDirty", { + get: function get() { + return true; + }, + set: function set(value) {} + }); + node._calculWorldMatrix = EmptyHandle; + node._mulMat = EmptyHandle; + }; + var _tempMat4 = new _mat["default"](); + var AttachUtil = cc.Class({ + name: "sp.AttachUtil", + ctor: function ctor() { + this._inited = false; + this._skeleton = null; + this._skeletonNode = null; + this._skeletonComp = null; + this._attachedRootNode = null; + this._attachedNodeArray = []; + this._boneIndexToNode = {}; + }, + init: function init(skeletonComp) { + this._inited = true; + this._skeleton = skeletonComp._skeleton; + this._skeletonNode = skeletonComp.node; + this._skeletonComp = skeletonComp; + }, + reset: function reset() { + this._inited = false; + this._skeleton = null; + this._skeletonNode = null; + this._skeletonComp = null; + }, + _prepareAttachNode: function _prepareAttachNode() { + var armature = this._skeleton; + if (!armature) return; + var rootNode = this._skeletonNode.getChildByName(ATTACHED_ROOT_NAME); + if (!rootNode || !rootNode.isValid) { + rootNode = new cc.Node(ATTACHED_ROOT_NAME); + limitNode(rootNode); + this._skeletonNode.addChild(rootNode); + } + var isCached = this._skeletonComp.isAnimationCached(); + isCached && this._skeletonComp._frameCache && this._skeletonComp._frameCache.enableCacheAttachedInfo(); + this._attachedRootNode = rootNode; + return rootNode; + }, + _buildBoneAttachedNode: function _buildBoneAttachedNode(bone, boneIndex) { + var boneNodeName = ATTACHED_PRE_NAME + bone.data.name; + var boneNode = new cc.Node(boneNodeName); + this._buildBoneRelation(boneNode, bone, boneIndex); + return boneNode; + }, + _buildBoneRelation: function _buildBoneRelation(boneNode, bone, boneIndex) { + limitNode(boneNode); + boneNode._bone = bone; + boneNode._boneIndex = boneIndex; + this._attachedNodeArray.push(boneNode); + this._boneIndexToNode[boneIndex] = boneNode; + }, + getAttachedRootNode: function getAttachedRootNode() { + return this._attachedRootNode; + }, + getAttachedNodes: function getAttachedNodes(boneName) { + var nodeArray = this._attachedNodeArray; + var res = []; + if (!this._inited) return res; + for (var i = 0, n = nodeArray.length; i < n; i++) { + var boneNode = nodeArray[i]; + if (!boneNode || !boneNode.isValid) continue; + boneNode.name === ATTACHED_PRE_NAME + boneName && res.push(boneNode); + } + return res; + }, + _rebuildNodeArray: function _rebuildNodeArray() { + var findMap = this._boneIndexToNode = {}; + var oldNodeArray = this._attachedNodeArray; + var nodeArray = this._attachedNodeArray = []; + for (var i = 0, n = oldNodeArray.length; i < n; i++) { + var boneNode = oldNodeArray[i]; + if (!boneNode || !boneNode.isValid || boneNode._toRemove) continue; + nodeArray.push(boneNode); + findMap[boneNode._boneIndex] = boneNode; + } + }, + _sortNodeArray: function _sortNodeArray() { + var nodeArray = this._attachedNodeArray; + nodeArray.sort((function(a, b) { + return a._boneIndex < b._boneIndex ? -1 : 1; + })); + }, + _getNodeByBoneIndex: function _getNodeByBoneIndex(boneIndex) { + var findMap = this._boneIndexToNode; + var boneNode = findMap[boneIndex]; + if (!boneNode || !boneNode.isValid) return null; + return boneNode; + }, + destroyAttachedNodes: function destroyAttachedNodes(boneName) { + if (!this._inited) return; + var nodeArray = this._attachedNodeArray; + var markTree = function markTree(rootNode) { + var children = rootNode.children; + for (var i = 0, n = children.length; i < n; i++) { + var c = children[i]; + c && markTree(c); + } + rootNode._toRemove = true; + }; + for (var i = 0, n = nodeArray.length; i < n; i++) { + var boneNode = nodeArray[i]; + if (!boneNode || !boneNode.isValid) continue; + var delName = boneNode.name.split(ATTACHED_PRE_NAME)[1]; + if (delName === boneName) { + markTree(boneNode); + boneNode.removeFromParent(true); + boneNode.destroy(); + nodeArray[i] = null; + } + } + this._rebuildNodeArray(); + }, + generateAttachedNodes: function generateAttachedNodes(boneName) { + var targetNodes = []; + if (!this._inited) return targetNodes; + var rootNode = this._prepareAttachNode(); + if (!rootNode) return targetNodes; + var res = []; + var bones = this._skeleton.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + var boneData = bone.data; + boneData.name == boneName && res.push(bone); + } + var buildBoneTree = function(bone) { + if (!bone) return; + var boneData = bone.data; + var boneNode = this._getNodeByBoneIndex(boneData.index); + if (boneNode) return boneNode; + boneNode = this._buildBoneAttachedNode(bone, boneData.index); + var parentBoneNode = buildBoneTree(bone.parent) || rootNode; + boneNode.parent = parentBoneNode; + return boneNode; + }.bind(this); + for (var _i = 0, _n = res.length; _i < _n; _i++) { + var targetNode = buildBoneTree(res[_i]); + targetNodes.push(targetNode); + } + this._sortNodeArray(); + return targetNodes; + }, + destroyAllAttachedNodes: function destroyAllAttachedNodes() { + this._attachedRootNode = null; + this._attachedNodeArray.length = 0; + this._boneIndexToNode = {}; + if (!this._inited) return; + var rootNode = this._skeletonNode.getChildByName(ATTACHED_ROOT_NAME); + if (rootNode) { + rootNode.removeFromParent(true); + rootNode.destroy(); + rootNode = null; + } + }, + generateAllAttachedNodes: function generateAllAttachedNodes() { + if (!this._inited) return; + this._boneIndexToNode = {}; + this._attachedNodeArray.length = 0; + var rootNode = this._prepareAttachNode(); + if (!rootNode) return; + var bones = this._skeleton.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + var boneData = bone.data; + var parentNode = null; + if (bone.parent) { + var parentIndex = bone.parent.data.index; + parentNode = this._boneIndexToNode[parentIndex]; + } else parentNode = rootNode; + if (parentNode) { + var boneNode = parentNode.getChildByName(ATTACHED_PRE_NAME + boneData.name); + if (boneNode && boneNode.isValid) this._buildBoneRelation(boneNode, bone, boneData.index); else { + boneNode = this._buildBoneAttachedNode(bone, boneData.index); + parentNode.addChild(boneNode); + } + } + } + return rootNode; + }, + _hasAttachedNode: function _hasAttachedNode() { + if (!this._inited) return false; + var attachedRootNode = this._skeletonNode.getChildByName(ATTACHED_ROOT_NAME); + return !!attachedRootNode; + }, + _associateAttachedNode: function _associateAttachedNode() { + if (!this._inited) return; + var rootNode = this._skeletonNode.getChildByName(ATTACHED_ROOT_NAME); + if (!rootNode || !rootNode.isValid) return; + this._attachedRootNode = rootNode; + this._boneIndexToNode = {}; + var nodeArray = this._attachedNodeArray; + nodeArray.length = 0; + limitNode(rootNode); + true; + var isCached = this._skeletonComp.isAnimationCached(); + isCached && this._skeletonComp._frameCache && this._skeletonComp._frameCache.enableCacheAttachedInfo(); + var bones = this._skeleton.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + var boneData = bone.data; + var parentNode = null; + if (bone.parent) { + var parentIndex = bone.parent.data.index; + parentNode = this._boneIndexToNode[parentIndex]; + } else parentNode = rootNode; + if (parentNode) { + var boneNode = parentNode.getChildByName(ATTACHED_PRE_NAME + boneData.name); + boneNode && boneNode.isValid && this._buildBoneRelation(boneNode, bone, boneData.index); + } + } + }, + _syncAttachedNode: function _syncAttachedNode() { + if (!this._inited) return; + var rootNode = this._attachedRootNode; + var nodeArray = this._attachedNodeArray; + if (!rootNode || !rootNode.isValid) { + this._attachedRootNode = null; + nodeArray.length = 0; + return; + } + var rootMatrix = this._skeletonNode._worldMatrix; + _mat["default"].copy(rootNode._worldMatrix, rootMatrix); + rootNode._renderFlag &= ~FLAG_TRANSFORM; + var boneInfos = null; + var isCached = this._skeletonComp.isAnimationCached(); + boneInfos = isCached ? this._skeletonComp._curFrame && this._skeletonComp._curFrame.boneInfos : this._skeleton.bones; + if (!boneInfos) return; + var mulMat = this._skeletonNode._mulMat; + var matrixHandle = function matrixHandle(nodeMat, parentMat, bone) { + var tm = _tempMat4.m; + tm[0] = bone.a; + tm[1] = bone.c; + tm[4] = bone.b; + tm[5] = bone.d; + tm[12] = bone.worldX; + tm[13] = bone.worldY; + mulMat(nodeMat, parentMat, _tempMat4); + }; + var nodeArrayDirty = false; + for (var i = 0, n = nodeArray.length; i < n; i++) { + var boneNode = nodeArray[i]; + if (!boneNode || !boneNode.isValid) { + nodeArray[i] = null; + nodeArrayDirty = true; + continue; + } + var bone = boneInfos[boneNode._boneIndex]; + if (!bone) { + boneNode.removeFromParent(true); + boneNode.destroy(); + nodeArray[i] = null; + nodeArrayDirty = true; + continue; + } + matrixHandle(boneNode._worldMatrix, rootNode._worldMatrix, bone); + boneNode._renderFlag &= ~FLAG_TRANSFORM; + } + nodeArrayDirty && this._rebuildNodeArray(); + } + }); + module.exports = sp.AttachUtil = AttachUtil; + }), { + "../../cocos2d/core/renderer/render-flow": 153, + "../../cocos2d/core/value-types/mat4": 222 + } ], + 274: [ (function(require, module, exports) { + "use strict"; + var TrackEntryListeners = require("./track-entry-listeners"); + var RenderComponent = require("../../cocos2d/core/components/CCRenderComponent"); + var spine = require("./lib/spine"); + var Graphics = require("../../cocos2d/core/graphics/graphics"); + var RenderFlow = require("../../cocos2d/core/renderer/render-flow"); + var FLAG_POST_RENDER = RenderFlow.FLAG_POST_RENDER; + var SkeletonCache = require("./skeleton-cache"); + var AttachUtil = require("./AttachUtil"); + var DefaultSkinsEnum = cc.Enum({ + default: -1 + }); + var DefaultAnimsEnum = cc.Enum({ + "": 0 + }); + var AnimationCacheMode = cc.Enum({ + REALTIME: 0, + SHARED_CACHE: 1, + PRIVATE_CACHE: 2 + }); + function setEnumAttr(obj, propName, enumDef) { + cc.Class.Attr.setClassAttr(obj, propName, "type", "Enum"); + cc.Class.Attr.setClassAttr(obj, propName, "enumList", cc.Enum.getList(enumDef)); + } + sp.Skeleton = cc.Class({ + name: "sp.Skeleton", + extends: RenderComponent, + editor: false, + statics: { + AnimationCacheMode: AnimationCacheMode + }, + properties: { + paused: { + default: false, + visible: false + }, + skeletonData: { + default: null, + type: sp.SkeletonData, + notify: function notify() { + this.defaultSkin = ""; + this.defaultAnimation = ""; + false; + this._updateSkeletonData(); + }, + tooltip: false + }, + defaultSkin: { + default: "", + visible: false + }, + defaultAnimation: { + default: "", + visible: false + }, + animation: { + get: function get() { + if (this.isAnimationCached()) return this._animationName; + var entry = this.getCurrent(0); + return entry && entry.animation.name || ""; + }, + set: function set(value) { + this.defaultAnimation = value; + if (value) this.setAnimation(0, value, this.loop); else if (!this.isAnimationCached()) { + this.clearTrack(0); + this.setToSetupPose(); + } + }, + visible: false + }, + _defaultSkinIndex: { + get: function get() { + if (this.skeletonData) { + var skinsEnum = this.skeletonData.getSkinsEnum(); + if (skinsEnum) if ("" === this.defaultSkin) { + if (skinsEnum.hasOwnProperty(0)) { + this._defaultSkinIndex = 0; + return 0; + } + } else { + var skinIndex = skinsEnum[this.defaultSkin]; + if (void 0 !== skinIndex) return skinIndex; + } + } + return 0; + }, + set: function set(value) { + var skinsEnum; + this.skeletonData && (skinsEnum = this.skeletonData.getSkinsEnum()); + if (!skinsEnum) return cc.errorID("", this.name); + var skinName = skinsEnum[value]; + if (void 0 !== skinName) { + this.defaultSkin = skinName; + this.setSkin(this.defaultSkin); + false; + } else cc.errorID(7501, this.name); + }, + type: DefaultSkinsEnum, + visible: true, + animatable: false, + displayName: "Default Skin", + tooltip: false + }, + _animationIndex: { + get: function get() { + var animationName = this.animation; + if (this.skeletonData && animationName) { + var animsEnum = this.skeletonData.getAnimsEnum(); + if (animsEnum) { + var animIndex = animsEnum[animationName]; + if (void 0 !== animIndex) return animIndex; + } + } + return 0; + }, + set: function set(value) { + if (0 === value) { + this.animation = ""; + return; + } + var animsEnum; + this.skeletonData && (animsEnum = this.skeletonData.getAnimsEnum()); + if (!animsEnum) return cc.errorID(7502, this.name); + var animName = animsEnum[value]; + void 0 !== animName ? this.animation = animName : cc.errorID(7503, this.name); + }, + type: DefaultAnimsEnum, + visible: true, + animatable: false, + displayName: "Animation", + tooltip: false + }, + _preCacheMode: -1, + _cacheMode: AnimationCacheMode.REALTIME, + _defaultCacheMode: { + default: 0, + type: AnimationCacheMode, + notify: function notify() { + this.setAnimationCacheMode(this._defaultCacheMode); + }, + editorOnly: true, + visible: true, + animatable: false, + displayName: "Animation Cache Mode", + tooltip: false + }, + loop: { + default: true, + tooltip: false + }, + premultipliedAlpha: { + default: true, + tooltip: false + }, + timeScale: { + default: 1, + tooltip: false + }, + debugSlots: { + default: false, + editorOnly: true, + tooltip: false, + notify: function notify() { + this._updateDebugDraw(); + } + }, + debugBones: { + default: false, + editorOnly: true, + tooltip: false, + notify: function notify() { + this._updateDebugDraw(); + } + }, + debugMesh: { + default: false, + editorOnly: true, + tooltip: false, + notify: function notify() { + this._updateDebugDraw(); + } + }, + useTint: { + default: false, + tooltip: false, + notify: function notify() { + this._updateUseTint(); + } + }, + enableBatch: { + default: false, + notify: function notify() { + this._updateBatch(); + }, + tooltip: false + }, + _accTime: 0, + _playCount: 0, + _frameCache: null, + _curFrame: null, + _skeletonCache: null, + _animationName: "", + _animationQueue: [], + _headAniInfo: null, + _playTimes: 0, + _isAniComplete: true, + autoSwitchMaterial: { + type: RenderComponent.EnableType, + default: RenderComponent.EnableType.GLOBAL, + notify: function notify(oldValue) { + if (this.autoSwitchMaterial === oldValue) return; + this.setVertsDirty(); + } + }, + allowDynamicAtlas: { + type: RenderComponent.EnableType, + default: RenderComponent.EnableType.GLOBAL, + notify: function notify(oldValue) { + if (this.allowDynamicAtlas === oldValue) return; + this.setVertsDirty(); + } + } + }, + ctor: function ctor() { + this._effectDelegate = null; + this._skeleton = null; + this._rootBone = null; + this._listener = null; + this._materialCache = {}; + this._debugRenderer = null; + this._startSlotIndex = -1; + this._endSlotIndex = -1; + this._startEntry = { + animation: { + name: "" + }, + trackIndex: 0 + }; + this._endEntry = { + animation: { + name: "" + }, + trackIndex: 0 + }; + this.attachUtil = new AttachUtil(); + this._dataDirty = true; + }, + setVertsDirty: function setVertsDirty() { + this.invalidAnimationCache(); + this._dataDirty = true; + this._materialCache = {}; + this._super(); + }, + _getDefaultMaterial: function _getDefaultMaterial() { + return cc.Material.getBuiltinMaterial("2d-spine"); + }, + _updateMaterial: function _updateMaterial() { + var useTint = this.useTint || this.isAnimationCached() && true; + var baseMaterial = this.getMaterial(0); + if (baseMaterial) { + var isMultiSupport = baseMaterial.material.isMultiSupport(); + if (!isMultiSupport) { + baseMaterial.define("USE_TINT", useTint); + baseMaterial.define("CC_USE_MODEL", !this.enableBatch); + } + var srcBlendFactor = this.premultipliedAlpha ? cc.gfx.BLEND_ONE : cc.gfx.BLEND_SRC_ALPHA; + var dstBlendFactor = cc.gfx.BLEND_ONE_MINUS_SRC_ALPHA; + baseMaterial.setBlend(true, cc.gfx.BLEND_FUNC_ADD, srcBlendFactor, srcBlendFactor, cc.gfx.BLEND_FUNC_ADD, dstBlendFactor, dstBlendFactor); + if (isMultiSupport) { + this.useTint && (this.useTint = false); + this.enableBatch || (this.enableBatch = true); + } + } + this._materialCache = {}; + }, + disableRender: function disableRender() { + this._super(); + this.node._renderFlag &= ~FLAG_POST_RENDER; + }, + markForRender: function markForRender(enable) { + this._super(enable); + enable ? this.node._renderFlag |= FLAG_POST_RENDER : this.node._renderFlag &= ~FLAG_POST_RENDER; + }, + _updateUseTint: function _updateUseTint() { + var baseMaterial = this.getMaterial(0); + if (baseMaterial) { + var useTint = this.useTint || this.isAnimationCached() && true; + baseMaterial.material.isMultiSupport() ? this.useTint && (this.useTint = false) : baseMaterial.define("USE_TINT", useTint); + } + this._materialCache = {}; + }, + _updateBatch: function _updateBatch() { + var baseMaterial = this.getMaterial(0); + baseMaterial && (baseMaterial.material.isMultiSupport() ? this.enableBatch || (this.enableBatch = true) : baseMaterial.define("CC_USE_MODEL", !this.enableBatch)); + this._materialCache = {}; + }, + _validateRender: function _validateRender() { + var skeletonData = this.skeletonData; + if (!skeletonData || !skeletonData.isTexturesLoaded()) { + this.disableRender(); + return; + } + this._super(); + }, + setSkeletonData: function setSkeletonData(skeletonData) { + null != skeletonData.width && null != skeletonData.height && this.node.setContentSize(skeletonData.width, skeletonData.height); + true; + if (this._cacheMode === AnimationCacheMode.SHARED_CACHE) this._skeletonCache = SkeletonCache.sharedCache; else if (this._cacheMode === AnimationCacheMode.PRIVATE_CACHE) { + this._skeletonCache = new SkeletonCache(); + this._skeletonCache.enablePrivateMode(); + } + if (this.isAnimationCached()) { + (this.debugBones || this.debugSlots) && cc.warn("Debug bones or slots is invalid in cached mode"); + var skeletonInfo = this._skeletonCache.getSkeletonCache(this.skeletonData._uuid, skeletonData); + this._skeleton = skeletonInfo.skeleton; + this._clipper = skeletonInfo.clipper; + this._rootBone = this._skeleton.getRootBone(); + } else { + this._skeleton = new spine.Skeleton(skeletonData); + this._clipper = new spine.SkeletonClipping(); + this._rootBone = this._skeleton.getRootBone(); + } + this.markForRender(true); + }, + setSlotsRange: function setSlotsRange(startSlotIndex, endSlotIndex) { + if (this.isAnimationCached()) cc.warn("Slots visible range can not be modified in cached mode."); else { + this._startSlotIndex = startSlotIndex; + this._endSlotIndex = endSlotIndex; + } + }, + setAnimationStateData: function setAnimationStateData(stateData) { + if (this.isAnimationCached()) cc.warn("'setAnimationStateData' interface can not be invoked in cached mode."); else { + var state = new spine.AnimationState(stateData); + if (this._listener) { + this._state && this._state.removeListener(this._listener); + state.addListener(this._listener); + } + this._state = state; + } + }, + __preload: function __preload() { + this._super(); + var Flags; + false; + var children = this.node.children; + for (var i = 0, n = children.length; i < n; i++) { + var child = children[i]; + child && "DEBUG_DRAW_NODE" === child._name && child.destroy(); + } + this._updateSkeletonData(); + this._updateDebugDraw(); + this._updateUseTint(); + this._updateBatch(); + }, + setAnimationCacheMode: function setAnimationCacheMode(cacheMode) { + if (this._preCacheMode !== cacheMode) { + this._cacheMode = cacheMode; + this._updateSkeletonData(); + this._updateUseTint(); + } + }, + isAnimationCached: function isAnimationCached() { + false; + return this._cacheMode !== AnimationCacheMode.REALTIME; + }, + update: function update(dt) { + false; + if (this.paused) return; + dt *= this.timeScale * sp.timeScale; + if (this.isAnimationCached()) { + if (this._isAniComplete) { + if (0 === this._animationQueue.length && !this._headAniInfo) { + var frameCache = this._frameCache; + if (frameCache && frameCache.isInvalid()) { + frameCache.updateToFrame(); + var frames = frameCache.frames; + this._curFrame = frames[frames.length - 1]; + } + return; + } + this._headAniInfo || (this._headAniInfo = this._animationQueue.shift()); + this._accTime += dt; + if (this._accTime > this._headAniInfo.delay) { + var aniInfo = this._headAniInfo; + this._headAniInfo = null; + this.setAnimation(0, aniInfo.animationName, aniInfo.loop); + } + return; + } + this._updateCache(dt); + } else this._updateRealtime(dt); + }, + _emitCacheCompleteEvent: function _emitCacheCompleteEvent() { + if (!this._listener) return; + this._endEntry.animation.name = this._animationName; + this._listener.complete && this._listener.complete(this._endEntry); + this._listener.end && this._listener.end(this._endEntry); + }, + _updateCache: function _updateCache(dt) { + var frameCache = this._frameCache; + if (!frameCache.isInited()) return; + var frames = frameCache.frames; + var frameTime = SkeletonCache.FrameTime; + if (0 == this._accTime && 0 == this._playCount) { + this._startEntry.animation.name = this._animationName; + this._listener && this._listener.start && this._listener.start(this._startEntry); + } + this._accTime += dt; + var frameIdx = Math.floor(this._accTime / frameTime); + frameCache.isCompleted || frameCache.updateToFrame(frameIdx); + if (frameCache.isCompleted && frameIdx >= frames.length) { + this._playCount++; + if (this._playTimes > 0 && this._playCount >= this._playTimes) { + this._curFrame = frames[frames.length - 1]; + this._accTime = 0; + this._playCount = 0; + this._isAniComplete = true; + this._emitCacheCompleteEvent(); + return; + } + this._accTime = 0; + frameIdx = 0; + this._emitCacheCompleteEvent(); + } + this._curFrame = frames[frameIdx]; + }, + _updateRealtime: function _updateRealtime(dt) { + var skeleton = this._skeleton; + var state = this._state; + if (skeleton) { + skeleton.update(dt); + if (state) { + state.update(dt); + state.apply(skeleton); + } + } + }, + setVertexEffectDelegate: function setVertexEffectDelegate(effectDelegate) { + this._effectDelegate = effectDelegate; + }, + updateWorldTransform: function updateWorldTransform() { + if (!this.isAnimationCached()) return; + this._skeleton && this._skeleton.updateWorldTransform(); + }, + setToSetupPose: function setToSetupPose() { + this._skeleton && this._skeleton.setToSetupPose(); + }, + setBonesToSetupPose: function setBonesToSetupPose() { + this._skeleton && this._skeleton.setBonesToSetupPose(); + }, + setSlotsToSetupPose: function setSlotsToSetupPose() { + this._skeleton && this._skeleton.setSlotsToSetupPose(); + }, + updateAnimationCache: function updateAnimationCache(animName) { + if (!this.isAnimationCached()) return; + var uuid = this.skeletonData._uuid; + this._skeletonCache && this._skeletonCache.updateAnimationCache(uuid, animName); + }, + invalidAnimationCache: function invalidAnimationCache() { + if (!this.isAnimationCached()) return; + this._skeletonCache && this._skeletonCache.invalidAnimationCache(this.skeletonData._uuid); + }, + findBone: function findBone(boneName) { + if (this._skeleton) return this._skeleton.findBone(boneName); + return null; + }, + findSlot: function findSlot(slotName) { + if (this._skeleton) return this._skeleton.findSlot(slotName); + return null; + }, + setSkin: function setSkin(skinName) { + if (this._skeleton) { + this._skeleton.setSkinByName(skinName); + this._skeleton.setSlotsToSetupPose(); + } + this.invalidAnimationCache(); + }, + getAttachment: function getAttachment(slotName, attachmentName) { + if (this._skeleton) return this._skeleton.getAttachmentByName(slotName, attachmentName); + return null; + }, + setAttachment: function setAttachment(slotName, attachmentName) { + this._skeleton && this._skeleton.setAttachment(slotName, attachmentName); + this.invalidAnimationCache(); + }, + getRegion: function getRegion(slotName, attachmentName) { + var attachment = this.getAttachment(slotName, attachmentName); + if (attachment) return attachment.region; + return null; + }, + setRegion: function setRegion(slotName, attachmentName, region) { + var attachment = this.getAttachment(slotName, attachmentName); + if (attachment) { + attachment.region = region; + if (attachment instanceof sp.spine.MeshAttachment) attachment.updateUVs(); else if (attachment instanceof sp.spine.RegionAttachment) { + attachment.setRegion(region); + attachment.updateOffset(); + } + this.setVertsDirty(); + return true; + } + return false; + }, + getTextureAtlas: function getTextureAtlas(regionAttachment) { + return regionAttachment.region; + }, + setMix: function setMix(fromAnimation, toAnimation, duration) { + this._state && this._state.data.setMix(fromAnimation, toAnimation, duration); + }, + setAnimation: function setAnimation(trackIndex, name, loop) { + this._playTimes = loop ? 0 : 1; + this._animationName = name; + if (this.isAnimationCached()) { + 0 !== trackIndex && cc.warn("Track index can not greater than 0 in cached mode."); + if (!this._skeletonCache) return null; + var cache = this._skeletonCache.getAnimationCache(this.skeletonData._uuid, name); + cache || (cache = this._skeletonCache.initAnimationCache(this.skeletonData._uuid, name)); + if (cache) { + this._isAniComplete = false; + this._accTime = 0; + this._playCount = 0; + this._frameCache = cache; + this.attachUtil._hasAttachedNode() && this._frameCache.enableCacheAttachedInfo(); + this._frameCache.updateToFrame(0); + this._curFrame = this._frameCache.frames[0]; + } + } else if (this._skeleton) { + var animation = this._skeleton.data.findAnimation(name); + if (!animation) { + cc.logID(7509, name); + return null; + } + var res = this._state.setAnimationWith(trackIndex, animation, loop); + this._state.apply(this._skeleton); + return res; + } + return null; + }, + addAnimation: function addAnimation(trackIndex, name, loop, delay) { + delay = delay || 0; + if (this.isAnimationCached()) { + 0 !== trackIndex && cc.warn("Track index can not greater than 0 in cached mode."); + this._animationQueue.push({ + animationName: name, + loop: loop, + delay: delay + }); + } else if (this._skeleton) { + var animation = this._skeleton.data.findAnimation(name); + if (!animation) { + cc.logID(7510, name); + return null; + } + return this._state.addAnimationWith(trackIndex, animation, loop, delay); + } + return null; + }, + findAnimation: function findAnimation(name) { + if (this._skeleton) return this._skeleton.data.findAnimation(name); + return null; + }, + getCurrent: function getCurrent(trackIndex) { + if (this.isAnimationCached()) cc.warn("'getCurrent' interface can not be invoked in cached mode."); else if (this._state) return this._state.getCurrent(trackIndex); + return null; + }, + clearTracks: function clearTracks() { + this.isAnimationCached() ? cc.warn("'clearTracks' interface can not be invoked in cached mode.") : this._state && this._state.clearTracks(); + }, + clearTrack: function clearTrack(trackIndex) { + if (this.isAnimationCached()) cc.warn("'clearTrack' interface can not be invoked in cached mode."); else if (this._state) { + this._state.clearTrack(trackIndex); + false; + } + }, + setStartListener: function setStartListener(listener) { + this._ensureListener(); + this._listener.start = listener; + }, + setInterruptListener: function setInterruptListener(listener) { + this._ensureListener(); + this._listener.interrupt = listener; + }, + setEndListener: function setEndListener(listener) { + this._ensureListener(); + this._listener.end = listener; + }, + setDisposeListener: function setDisposeListener(listener) { + this._ensureListener(); + this._listener.dispose = listener; + }, + setCompleteListener: function setCompleteListener(listener) { + this._ensureListener(); + this._listener.complete = listener; + }, + setEventListener: function setEventListener(listener) { + this._ensureListener(); + this._listener.event = listener; + }, + setTrackStartListener: function setTrackStartListener(entry, listener) { + TrackEntryListeners.getListeners(entry).start = listener; + }, + setTrackInterruptListener: function setTrackInterruptListener(entry, listener) { + TrackEntryListeners.getListeners(entry).interrupt = listener; + }, + setTrackEndListener: function setTrackEndListener(entry, listener) { + TrackEntryListeners.getListeners(entry).end = listener; + }, + setTrackDisposeListener: function setTrackDisposeListener(entry, listener) { + TrackEntryListeners.getListeners(entry).dispose = listener; + }, + setTrackCompleteListener: function setTrackCompleteListener(entry, listener) { + TrackEntryListeners.getListeners(entry).complete = function(trackEntry) { + var loopCount = Math.floor(trackEntry.trackTime / trackEntry.animationEnd); + listener(trackEntry, loopCount); + }; + }, + setTrackEventListener: function setTrackEventListener(entry, listener) { + TrackEntryListeners.getListeners(entry).event = listener; + }, + getState: function getState() { + return this._state; + }, + _updateAnimEnum: false, + _updateSkinEnum: false, + _ensureListener: function _ensureListener() { + if (!this._listener) { + this._listener = new TrackEntryListeners(); + this._state && this._state.addListener(this._listener); + } + }, + _updateSkeletonData: function _updateSkeletonData() { + if (!this.skeletonData) { + this.disableRender(); + return; + } + var data = this.skeletonData.getRuntimeData(); + if (!data) { + this.disableRender(); + return; + } + try { + this.setSkeletonData(data); + this.isAnimationCached() || this.setAnimationStateData(new spine.AnimationStateData(this._skeleton.data)); + this.defaultSkin && this.setSkin(this.defaultSkin); + } catch (e) { + cc.warn(e); + } + this.attachUtil.init(this); + this.attachUtil._associateAttachedNode(); + this._preCacheMode = this._cacheMode; + this.animation = this.defaultAnimation; + this._dataDirty = true; + }, + _refreshInspector: function _refreshInspector() { + this._updateAnimEnum(); + this._updateSkinEnum(); + Editor.Utils.refreshSelectedInspector("node", this.node.uuid); + }, + _updateDebugDraw: function _updateDebugDraw() { + if (this.debugBones || this.debugSlots) { + if (!this._debugRenderer) { + var debugDrawNode = new cc.PrivateNode(); + debugDrawNode.name = "DEBUG_DRAW_NODE"; + var debugDraw = debugDrawNode.addComponent(Graphics); + debugDraw.lineWidth = 1; + debugDraw.strokeColor = cc.color(255, 0, 0, 255); + this._debugRenderer = debugDraw; + } + this._debugRenderer.node.parent = this.node; + this.isAnimationCached() && cc.warn("Debug bones or slots is invalid in cached mode"); + } else this._debugRenderer && (this._debugRenderer.node.parent = null); + } + }); + module.exports = sp.Skeleton; + }), { + "../../cocos2d/core/components/CCRenderComponent": 98, + "../../cocos2d/core/graphics/graphics": void 0, + "../../cocos2d/core/renderer/render-flow": 153, + "./AttachUtil": 273, + "./lib/spine": 276, + "./skeleton-cache": 277, + "./track-entry-listeners": 281 + } ], + 275: [ (function(require, module, exports) { + "use strict"; + var _global = "undefined" === typeof window ? global : window; + var _isUseSpine = true; + true; + _global.spine = require("./lib/spine"); + if (_isUseSpine) { + _global.sp = {}; + sp._timeScale = 1; + Object.defineProperty(sp, "timeScale", { + get: function get() { + return this._timeScale; + }, + set: function set(value) { + this._timeScale = value; + }, + configurable: true + }); + sp.ATTACHMENT_TYPE = { + REGION: 0, + BOUNDING_BOX: 1, + MESH: 2, + SKINNED_MESH: 3 + }; + sp.AnimationEventType = cc.Enum({ + START: 0, + INTERRUPT: 1, + END: 2, + DISPOSE: 3, + COMPLETE: 4, + EVENT: 5 + }); + true; + sp.spine = _global.spine; + true; + require("./skeleton-texture"); + require("./skeleton-data"); + require("./vertex-effect-delegate"); + require("./Skeleton"); + require("./spine-assembler"); + } + }), { + "./Skeleton": 274, + "./lib/spine": 276, + "./skeleton-data": 278, + "./skeleton-texture": 279, + "./spine-assembler": 280, + "./vertex-effect-delegate": 282 + } ], + 276: [ (function(require, module, exports) { + "use strict"; + var __extends = (void 0, (function() { + var _extendStatics = function extendStatics(d, b) { + _extendStatics = Object.setPrototypeOf || { + __proto__: [] + } instanceof Array && function(d, b) { + d.__proto__ = b; + } || function(d, b) { + for (var p in b) b.hasOwnProperty(p) && (d[p] = b[p]); + }; + return _extendStatics(d, b); + }; + return function(d, b) { + _extendStatics(d, b); + function __() { + this.constructor = d; + } + d.prototype = null === b ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })()); + var spine; + (function(spine) { + var Animation = (function() { + function Animation(name, timelines, duration) { + if (null == name) throw new Error("name cannot be null."); + if (null == timelines) throw new Error("timelines cannot be null."); + this.name = name; + this.timelines = timelines; + this.timelineIds = []; + for (var i = 0; i < timelines.length; i++) this.timelineIds[timelines[i].getPropertyId()] = true; + this.duration = duration; + } + Animation.prototype.hasTimeline = function(id) { + return true == this.timelineIds[id]; + }; + Animation.prototype.apply = function(skeleton, lastTime, time, loop, events, alpha, blend, direction) { + if (null == skeleton) throw new Error("skeleton cannot be null."); + if (loop && 0 != this.duration) { + time %= this.duration; + lastTime > 0 && (lastTime %= this.duration); + } + var timelines = this.timelines; + for (var i = 0, n = timelines.length; i < n; i++) timelines[i].apply(skeleton, lastTime, time, events, alpha, blend, direction); + }; + Animation.binarySearch = function(values, target, step) { + void 0 === step && (step = 1); + var low = 0; + var high = values.length / step - 2; + if (0 == high) return step; + var current = high >>> 1; + while (true) { + values[(current + 1) * step] <= target ? low = current + 1 : high = current; + if (low == high) return (low + 1) * step; + current = low + high >>> 1; + } + }; + Animation.linearSearch = function(values, target, step) { + for (var i = 0, last = values.length - step; i <= last; i += step) if (values[i] > target) return i; + return -1; + }; + return Animation; + })(); + spine.Animation = Animation; + var MixBlend; + (function(MixBlend) { + MixBlend[MixBlend["setup"] = 0] = "setup"; + MixBlend[MixBlend["first"] = 1] = "first"; + MixBlend[MixBlend["replace"] = 2] = "replace"; + MixBlend[MixBlend["add"] = 3] = "add"; + })(MixBlend = spine.MixBlend || (spine.MixBlend = {})); + var MixDirection; + (function(MixDirection) { + MixDirection[MixDirection["mixIn"] = 0] = "mixIn"; + MixDirection[MixDirection["mixOut"] = 1] = "mixOut"; + })(MixDirection = spine.MixDirection || (spine.MixDirection = {})); + var TimelineType; + (function(TimelineType) { + TimelineType[TimelineType["rotate"] = 0] = "rotate"; + TimelineType[TimelineType["translate"] = 1] = "translate"; + TimelineType[TimelineType["scale"] = 2] = "scale"; + TimelineType[TimelineType["shear"] = 3] = "shear"; + TimelineType[TimelineType["attachment"] = 4] = "attachment"; + TimelineType[TimelineType["color"] = 5] = "color"; + TimelineType[TimelineType["deform"] = 6] = "deform"; + TimelineType[TimelineType["event"] = 7] = "event"; + TimelineType[TimelineType["drawOrder"] = 8] = "drawOrder"; + TimelineType[TimelineType["ikConstraint"] = 9] = "ikConstraint"; + TimelineType[TimelineType["transformConstraint"] = 10] = "transformConstraint"; + TimelineType[TimelineType["pathConstraintPosition"] = 11] = "pathConstraintPosition"; + TimelineType[TimelineType["pathConstraintSpacing"] = 12] = "pathConstraintSpacing"; + TimelineType[TimelineType["pathConstraintMix"] = 13] = "pathConstraintMix"; + TimelineType[TimelineType["twoColor"] = 14] = "twoColor"; + })(TimelineType = spine.TimelineType || (spine.TimelineType = {})); + var CurveTimeline = (function() { + function CurveTimeline(frameCount) { + if (frameCount <= 0) throw new Error("frameCount must be > 0: " + frameCount); + this.curves = spine.Utils.newFloatArray((frameCount - 1) * CurveTimeline.BEZIER_SIZE); + } + CurveTimeline.prototype.getFrameCount = function() { + return this.curves.length / CurveTimeline.BEZIER_SIZE + 1; + }; + CurveTimeline.prototype.setLinear = function(frameIndex) { + this.curves[frameIndex * CurveTimeline.BEZIER_SIZE] = CurveTimeline.LINEAR; + }; + CurveTimeline.prototype.setStepped = function(frameIndex) { + this.curves[frameIndex * CurveTimeline.BEZIER_SIZE] = CurveTimeline.STEPPED; + }; + CurveTimeline.prototype.getCurveType = function(frameIndex) { + var index = frameIndex * CurveTimeline.BEZIER_SIZE; + if (index == this.curves.length) return CurveTimeline.LINEAR; + var type = this.curves[index]; + if (type == CurveTimeline.LINEAR) return CurveTimeline.LINEAR; + if (type == CurveTimeline.STEPPED) return CurveTimeline.STEPPED; + return CurveTimeline.BEZIER; + }; + CurveTimeline.prototype.setCurve = function(frameIndex, cx1, cy1, cx2, cy2) { + var tmpx = .03 * (2 * -cx1 + cx2), tmpy = .03 * (2 * -cy1 + cy2); + var dddfx = .006 * (3 * (cx1 - cx2) + 1), dddfy = .006 * (3 * (cy1 - cy2) + 1); + var ddfx = 2 * tmpx + dddfx, ddfy = 2 * tmpy + dddfy; + var dfx = .3 * cx1 + tmpx + .16666667 * dddfx, dfy = .3 * cy1 + tmpy + .16666667 * dddfy; + var i = frameIndex * CurveTimeline.BEZIER_SIZE; + var curves = this.curves; + curves[i++] = CurveTimeline.BEZIER; + var x = dfx, y = dfy; + for (var n = i + CurveTimeline.BEZIER_SIZE - 1; i < n; i += 2) { + curves[i] = x; + curves[i + 1] = y; + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + x += dfx; + y += dfy; + } + }; + CurveTimeline.prototype.getCurvePercent = function(frameIndex, percent) { + percent = spine.MathUtils.clamp(percent, 0, 1); + var curves = this.curves; + var i = frameIndex * CurveTimeline.BEZIER_SIZE; + var type = curves[i]; + if (type == CurveTimeline.LINEAR) return percent; + if (type == CurveTimeline.STEPPED) return 0; + i++; + var x = 0; + for (var start = i, n = i + CurveTimeline.BEZIER_SIZE - 1; i < n; i += 2) { + x = curves[i]; + if (x >= percent) { + var prevX = void 0, prevY = void 0; + if (i == start) { + prevX = 0; + prevY = 0; + } else { + prevX = curves[i - 2]; + prevY = curves[i - 1]; + } + return prevY + (curves[i + 1] - prevY) * (percent - prevX) / (x - prevX); + } + } + var y = curves[i - 1]; + return y + (1 - y) * (percent - x) / (1 - x); + }; + CurveTimeline.LINEAR = 0; + CurveTimeline.STEPPED = 1; + CurveTimeline.BEZIER = 2; + CurveTimeline.BEZIER_SIZE = 19; + return CurveTimeline; + })(); + spine.CurveTimeline = CurveTimeline; + var RotateTimeline = (function(_super) { + __extends(RotateTimeline, _super); + function RotateTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount << 1); + return _this; + } + RotateTimeline.prototype.getPropertyId = function() { + return (TimelineType.rotate << 24) + this.boneIndex; + }; + RotateTimeline.prototype.setFrame = function(frameIndex, time, degrees) { + frameIndex <<= 1; + this.frames[frameIndex] = time; + this.frames[frameIndex + RotateTimeline.ROTATION] = degrees; + }; + RotateTimeline.prototype.apply = function(skeleton, lastTime, time, events, alpha, blend, direction) { + var frames = this.frames; + var bone = skeleton.bones[this.boneIndex]; + if (!bone.active) return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.rotation = bone.data.rotation; + return; + + case MixBlend.first: + var r_1 = bone.data.rotation - bone.rotation; + bone.rotation += (r_1 - 360 * (16384 - (16384.499999999996 - r_1 / 360 | 0))) * alpha; + } + return; + } + if (time >= frames[frames.length - RotateTimeline.ENTRIES]) { + var r_2 = frames[frames.length + RotateTimeline.PREV_ROTATION]; + switch (blend) { + case MixBlend.setup: + bone.rotation = bone.data.rotation + r_2 * alpha; + break; + + case MixBlend.first: + case MixBlend.replace: + r_2 += bone.data.rotation - bone.rotation; + r_2 -= 360 * (16384 - (16384.499999999996 - r_2 / 360 | 0)); + + case MixBlend.add: + bone.rotation += r_2 * alpha; + } + return; + } + var frame = Animation.binarySearch(frames, time, RotateTimeline.ENTRIES); + var prevRotation = frames[frame + RotateTimeline.PREV_ROTATION]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent((frame >> 1) - 1, 1 - (time - frameTime) / (frames[frame + RotateTimeline.PREV_TIME] - frameTime)); + var r = frames[frame + RotateTimeline.ROTATION] - prevRotation; + r = prevRotation + (r - 360 * (16384 - (16384.499999999996 - r / 360 | 0))) * percent; + switch (blend) { + case MixBlend.setup: + bone.rotation = bone.data.rotation + (r - 360 * (16384 - (16384.499999999996 - r / 360 | 0))) * alpha; + break; + + case MixBlend.first: + case MixBlend.replace: + r += bone.data.rotation - bone.rotation; + + case MixBlend.add: + bone.rotation += (r - 360 * (16384 - (16384.499999999996 - r / 360 | 0))) * alpha; + } + }; + RotateTimeline.ENTRIES = 2; + RotateTimeline.PREV_TIME = -2; + RotateTimeline.PREV_ROTATION = -1; + RotateTimeline.ROTATION = 1; + return RotateTimeline; + })(CurveTimeline); + spine.RotateTimeline = RotateTimeline; + var TranslateTimeline = (function(_super) { + __extends(TranslateTimeline, _super); + function TranslateTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * TranslateTimeline.ENTRIES); + return _this; + } + TranslateTimeline.prototype.getPropertyId = function() { + return (TimelineType.translate << 24) + this.boneIndex; + }; + TranslateTimeline.prototype.setFrame = function(frameIndex, time, x, y) { + frameIndex *= TranslateTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + TranslateTimeline.X] = x; + this.frames[frameIndex + TranslateTimeline.Y] = y; + }; + TranslateTimeline.prototype.apply = function(skeleton, lastTime, time, events, alpha, blend, direction) { + var frames = this.frames; + var bone = skeleton.bones[this.boneIndex]; + if (!bone.active) return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.x = bone.data.x; + bone.y = bone.data.y; + return; + + case MixBlend.first: + bone.x += (bone.data.x - bone.x) * alpha; + bone.y += (bone.data.y - bone.y) * alpha; + } + return; + } + var x = 0, y = 0; + if (time >= frames[frames.length - TranslateTimeline.ENTRIES]) { + x = frames[frames.length + TranslateTimeline.PREV_X]; + y = frames[frames.length + TranslateTimeline.PREV_Y]; + } else { + var frame = Animation.binarySearch(frames, time, TranslateTimeline.ENTRIES); + x = frames[frame + TranslateTimeline.PREV_X]; + y = frames[frame + TranslateTimeline.PREV_Y]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / TranslateTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + TranslateTimeline.PREV_TIME] - frameTime)); + x += (frames[frame + TranslateTimeline.X] - x) * percent; + y += (frames[frame + TranslateTimeline.Y] - y) * percent; + } + switch (blend) { + case MixBlend.setup: + bone.x = bone.data.x + x * alpha; + bone.y = bone.data.y + y * alpha; + break; + + case MixBlend.first: + case MixBlend.replace: + bone.x += (bone.data.x + x - bone.x) * alpha; + bone.y += (bone.data.y + y - bone.y) * alpha; + break; + + case MixBlend.add: + bone.x += x * alpha; + bone.y += y * alpha; + } + }; + TranslateTimeline.ENTRIES = 3; + TranslateTimeline.PREV_TIME = -3; + TranslateTimeline.PREV_X = -2; + TranslateTimeline.PREV_Y = -1; + TranslateTimeline.X = 1; + TranslateTimeline.Y = 2; + return TranslateTimeline; + })(CurveTimeline); + spine.TranslateTimeline = TranslateTimeline; + var ScaleTimeline = (function(_super) { + __extends(ScaleTimeline, _super); + function ScaleTimeline(frameCount) { + return _super.call(this, frameCount) || this; + } + ScaleTimeline.prototype.getPropertyId = function() { + return (TimelineType.scale << 24) + this.boneIndex; + }; + ScaleTimeline.prototype.apply = function(skeleton, lastTime, time, events, alpha, blend, direction) { + var frames = this.frames; + var bone = skeleton.bones[this.boneIndex]; + if (!bone.active) return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.scaleX = bone.data.scaleX; + bone.scaleY = bone.data.scaleY; + return; + + case MixBlend.first: + bone.scaleX += (bone.data.scaleX - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - bone.scaleY) * alpha; + } + return; + } + var x = 0, y = 0; + if (time >= frames[frames.length - ScaleTimeline.ENTRIES]) { + x = frames[frames.length + ScaleTimeline.PREV_X] * bone.data.scaleX; + y = frames[frames.length + ScaleTimeline.PREV_Y] * bone.data.scaleY; + } else { + var frame = Animation.binarySearch(frames, time, ScaleTimeline.ENTRIES); + x = frames[frame + ScaleTimeline.PREV_X]; + y = frames[frame + ScaleTimeline.PREV_Y]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / ScaleTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + ScaleTimeline.PREV_TIME] - frameTime)); + x = (x + (frames[frame + ScaleTimeline.X] - x) * percent) * bone.data.scaleX; + y = (y + (frames[frame + ScaleTimeline.Y] - y) * percent) * bone.data.scaleY; + } + if (1 == alpha) if (blend == MixBlend.add) { + bone.scaleX += x - bone.data.scaleX; + bone.scaleY += y - bone.data.scaleY; + } else { + bone.scaleX = x; + bone.scaleY = y; + } else { + var bx = 0, by = 0; + if (direction == MixDirection.mixOut) switch (blend) { + case MixBlend.setup: + bx = bone.data.scaleX; + by = bone.data.scaleY; + bone.scaleX = bx + (Math.abs(x) * spine.MathUtils.signum(bx) - bx) * alpha; + bone.scaleY = by + (Math.abs(y) * spine.MathUtils.signum(by) - by) * alpha; + break; + + case MixBlend.first: + case MixBlend.replace: + bx = bone.scaleX; + by = bone.scaleY; + bone.scaleX = bx + (Math.abs(x) * spine.MathUtils.signum(bx) - bx) * alpha; + bone.scaleY = by + (Math.abs(y) * spine.MathUtils.signum(by) - by) * alpha; + break; + + case MixBlend.add: + bx = bone.scaleX; + by = bone.scaleY; + bone.scaleX = bx + (Math.abs(x) * spine.MathUtils.signum(bx) - bone.data.scaleX) * alpha; + bone.scaleY = by + (Math.abs(y) * spine.MathUtils.signum(by) - bone.data.scaleY) * alpha; + } else switch (blend) { + case MixBlend.setup: + bx = Math.abs(bone.data.scaleX) * spine.MathUtils.signum(x); + by = Math.abs(bone.data.scaleY) * spine.MathUtils.signum(y); + bone.scaleX = bx + (x - bx) * alpha; + bone.scaleY = by + (y - by) * alpha; + break; + + case MixBlend.first: + case MixBlend.replace: + bx = Math.abs(bone.scaleX) * spine.MathUtils.signum(x); + by = Math.abs(bone.scaleY) * spine.MathUtils.signum(y); + bone.scaleX = bx + (x - bx) * alpha; + bone.scaleY = by + (y - by) * alpha; + break; + + case MixBlend.add: + bx = spine.MathUtils.signum(x); + by = spine.MathUtils.signum(y); + bone.scaleX = Math.abs(bone.scaleX) * bx + (x - Math.abs(bone.data.scaleX) * bx) * alpha; + bone.scaleY = Math.abs(bone.scaleY) * by + (y - Math.abs(bone.data.scaleY) * by) * alpha; + } + } + }; + return ScaleTimeline; + })(TranslateTimeline); + spine.ScaleTimeline = ScaleTimeline; + var ShearTimeline = (function(_super) { + __extends(ShearTimeline, _super); + function ShearTimeline(frameCount) { + return _super.call(this, frameCount) || this; + } + ShearTimeline.prototype.getPropertyId = function() { + return (TimelineType.shear << 24) + this.boneIndex; + }; + ShearTimeline.prototype.apply = function(skeleton, lastTime, time, events, alpha, blend, direction) { + var frames = this.frames; + var bone = skeleton.bones[this.boneIndex]; + if (!bone.active) return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.shearX = bone.data.shearX; + bone.shearY = bone.data.shearY; + return; + + case MixBlend.first: + bone.shearX += (bone.data.shearX - bone.shearX) * alpha; + bone.shearY += (bone.data.shearY - bone.shearY) * alpha; + } + return; + } + var x = 0, y = 0; + if (time >= frames[frames.length - ShearTimeline.ENTRIES]) { + x = frames[frames.length + ShearTimeline.PREV_X]; + y = frames[frames.length + ShearTimeline.PREV_Y]; + } else { + var frame = Animation.binarySearch(frames, time, ShearTimeline.ENTRIES); + x = frames[frame + ShearTimeline.PREV_X]; + y = frames[frame + ShearTimeline.PREV_Y]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / ShearTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + ShearTimeline.PREV_TIME] - frameTime)); + x += (frames[frame + ShearTimeline.X] - x) * percent; + y += (frames[frame + ShearTimeline.Y] - y) * percent; + } + switch (blend) { + case MixBlend.setup: + bone.shearX = bone.data.shearX + x * alpha; + bone.shearY = bone.data.shearY + y * alpha; + break; + + case MixBlend.first: + case MixBlend.replace: + bone.shearX += (bone.data.shearX + x - bone.shearX) * alpha; + bone.shearY += (bone.data.shearY + y - bone.shearY) * alpha; + break; + + case MixBlend.add: + bone.shearX += x * alpha; + bone.shearY += y * alpha; + } + }; + return ShearTimeline; + })(TranslateTimeline); + spine.ShearTimeline = ShearTimeline; + var ColorTimeline = (function(_super) { + __extends(ColorTimeline, _super); + function ColorTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * ColorTimeline.ENTRIES); + return _this; + } + ColorTimeline.prototype.getPropertyId = function() { + return (TimelineType.color << 24) + this.slotIndex; + }; + ColorTimeline.prototype.setFrame = function(frameIndex, time, r, g, b, a) { + frameIndex *= ColorTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + ColorTimeline.R] = r; + this.frames[frameIndex + ColorTimeline.G] = g; + this.frames[frameIndex + ColorTimeline.B] = b; + this.frames[frameIndex + ColorTimeline.A] = a; + }; + ColorTimeline.prototype.apply = function(skeleton, lastTime, time, events, alpha, blend, direction) { + var slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) return; + var frames = this.frames; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + slot.color.setFromColor(slot.data.color); + return; + + case MixBlend.first: + var color = slot.color, setup = slot.data.color; + color.add((setup.r - color.r) * alpha, (setup.g - color.g) * alpha, (setup.b - color.b) * alpha, (setup.a - color.a) * alpha); + } + return; + } + var r = 0, g = 0, b = 0, a = 0; + if (time >= frames[frames.length - ColorTimeline.ENTRIES]) { + var i = frames.length; + r = frames[i + ColorTimeline.PREV_R]; + g = frames[i + ColorTimeline.PREV_G]; + b = frames[i + ColorTimeline.PREV_B]; + a = frames[i + ColorTimeline.PREV_A]; + } else { + var frame = Animation.binarySearch(frames, time, ColorTimeline.ENTRIES); + r = frames[frame + ColorTimeline.PREV_R]; + g = frames[frame + ColorTimeline.PREV_G]; + b = frames[frame + ColorTimeline.PREV_B]; + a = frames[frame + ColorTimeline.PREV_A]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / ColorTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + ColorTimeline.PREV_TIME] - frameTime)); + r += (frames[frame + ColorTimeline.R] - r) * percent; + g += (frames[frame + ColorTimeline.G] - g) * percent; + b += (frames[frame + ColorTimeline.B] - b) * percent; + a += (frames[frame + ColorTimeline.A] - a) * percent; + } + if (1 == alpha) slot.color.set(r, g, b, a); else { + var color = slot.color; + blend == MixBlend.setup && color.setFromColor(slot.data.color); + color.add((r - color.r) * alpha, (g - color.g) * alpha, (b - color.b) * alpha, (a - color.a) * alpha); + } + }; + ColorTimeline.ENTRIES = 5; + ColorTimeline.PREV_TIME = -5; + ColorTimeline.PREV_R = -4; + ColorTimeline.PREV_G = -3; + ColorTimeline.PREV_B = -2; + ColorTimeline.PREV_A = -1; + ColorTimeline.R = 1; + ColorTimeline.G = 2; + ColorTimeline.B = 3; + ColorTimeline.A = 4; + return ColorTimeline; + })(CurveTimeline); + spine.ColorTimeline = ColorTimeline; + var TwoColorTimeline = (function(_super) { + __extends(TwoColorTimeline, _super); + function TwoColorTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * TwoColorTimeline.ENTRIES); + return _this; + } + TwoColorTimeline.prototype.getPropertyId = function() { + return (TimelineType.twoColor << 24) + this.slotIndex; + }; + TwoColorTimeline.prototype.setFrame = function(frameIndex, time, r, g, b, a, r2, g2, b2) { + frameIndex *= TwoColorTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + TwoColorTimeline.R] = r; + this.frames[frameIndex + TwoColorTimeline.G] = g; + this.frames[frameIndex + TwoColorTimeline.B] = b; + this.frames[frameIndex + TwoColorTimeline.A] = a; + this.frames[frameIndex + TwoColorTimeline.R2] = r2; + this.frames[frameIndex + TwoColorTimeline.G2] = g2; + this.frames[frameIndex + TwoColorTimeline.B2] = b2; + }; + TwoColorTimeline.prototype.apply = function(skeleton, lastTime, time, events, alpha, blend, direction) { + var slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) return; + var frames = this.frames; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + slot.color.setFromColor(slot.data.color); + slot.darkColor.setFromColor(slot.data.darkColor); + return; + + case MixBlend.first: + var light = slot.color, dark = slot.darkColor, setupLight = slot.data.color, setupDark = slot.data.darkColor; + light.add((setupLight.r - light.r) * alpha, (setupLight.g - light.g) * alpha, (setupLight.b - light.b) * alpha, (setupLight.a - light.a) * alpha); + dark.add((setupDark.r - dark.r) * alpha, (setupDark.g - dark.g) * alpha, (setupDark.b - dark.b) * alpha, 0); + } + return; + } + var r = 0, g = 0, b = 0, a = 0, r2 = 0, g2 = 0, b2 = 0; + if (time >= frames[frames.length - TwoColorTimeline.ENTRIES]) { + var i = frames.length; + r = frames[i + TwoColorTimeline.PREV_R]; + g = frames[i + TwoColorTimeline.PREV_G]; + b = frames[i + TwoColorTimeline.PREV_B]; + a = frames[i + TwoColorTimeline.PREV_A]; + r2 = frames[i + TwoColorTimeline.PREV_R2]; + g2 = frames[i + TwoColorTimeline.PREV_G2]; + b2 = frames[i + TwoColorTimeline.PREV_B2]; + } else { + var frame = Animation.binarySearch(frames, time, TwoColorTimeline.ENTRIES); + r = frames[frame + TwoColorTimeline.PREV_R]; + g = frames[frame + TwoColorTimeline.PREV_G]; + b = frames[frame + TwoColorTimeline.PREV_B]; + a = frames[frame + TwoColorTimeline.PREV_A]; + r2 = frames[frame + TwoColorTimeline.PREV_R2]; + g2 = frames[frame + TwoColorTimeline.PREV_G2]; + b2 = frames[frame + TwoColorTimeline.PREV_B2]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / TwoColorTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + TwoColorTimeline.PREV_TIME] - frameTime)); + r += (frames[frame + TwoColorTimeline.R] - r) * percent; + g += (frames[frame + TwoColorTimeline.G] - g) * percent; + b += (frames[frame + TwoColorTimeline.B] - b) * percent; + a += (frames[frame + TwoColorTimeline.A] - a) * percent; + r2 += (frames[frame + TwoColorTimeline.R2] - r2) * percent; + g2 += (frames[frame + TwoColorTimeline.G2] - g2) * percent; + b2 += (frames[frame + TwoColorTimeline.B2] - b2) * percent; + } + if (1 == alpha) { + slot.color.set(r, g, b, a); + slot.darkColor.set(r2, g2, b2, 1); + } else { + var light = slot.color, dark = slot.darkColor; + if (blend == MixBlend.setup) { + light.setFromColor(slot.data.color); + dark.setFromColor(slot.data.darkColor); + } + light.add((r - light.r) * alpha, (g - light.g) * alpha, (b - light.b) * alpha, (a - light.a) * alpha); + dark.add((r2 - dark.r) * alpha, (g2 - dark.g) * alpha, (b2 - dark.b) * alpha, 0); + } + }; + TwoColorTimeline.ENTRIES = 8; + TwoColorTimeline.PREV_TIME = -8; + TwoColorTimeline.PREV_R = -7; + TwoColorTimeline.PREV_G = -6; + TwoColorTimeline.PREV_B = -5; + TwoColorTimeline.PREV_A = -4; + TwoColorTimeline.PREV_R2 = -3; + TwoColorTimeline.PREV_G2 = -2; + TwoColorTimeline.PREV_B2 = -1; + TwoColorTimeline.R = 1; + TwoColorTimeline.G = 2; + TwoColorTimeline.B = 3; + TwoColorTimeline.A = 4; + TwoColorTimeline.R2 = 5; + TwoColorTimeline.G2 = 6; + TwoColorTimeline.B2 = 7; + return TwoColorTimeline; + })(CurveTimeline); + spine.TwoColorTimeline = TwoColorTimeline; + var AttachmentTimeline = (function() { + function AttachmentTimeline(frameCount) { + this.frames = spine.Utils.newFloatArray(frameCount); + this.attachmentNames = new Array(frameCount); + } + AttachmentTimeline.prototype.getPropertyId = function() { + return (TimelineType.attachment << 24) + this.slotIndex; + }; + AttachmentTimeline.prototype.getFrameCount = function() { + return this.frames.length; + }; + AttachmentTimeline.prototype.setFrame = function(frameIndex, time, attachmentName) { + this.frames[frameIndex] = time; + this.attachmentNames[frameIndex] = attachmentName; + }; + AttachmentTimeline.prototype.apply = function(skeleton, lastTime, time, events, alpha, blend, direction) { + var slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) return; + if (direction == MixDirection.mixOut && blend == MixBlend.setup) { + var attachmentName_1 = slot.data.attachmentName; + slot.setAttachment(null == attachmentName_1 ? null : skeleton.getAttachment(this.slotIndex, attachmentName_1)); + return; + } + var frames = this.frames; + if (time < frames[0]) { + if (blend == MixBlend.setup || blend == MixBlend.first) { + var attachmentName_2 = slot.data.attachmentName; + slot.setAttachment(null == attachmentName_2 ? null : skeleton.getAttachment(this.slotIndex, attachmentName_2)); + } + return; + } + var frameIndex = 0; + frameIndex = time >= frames[frames.length - 1] ? frames.length - 1 : Animation.binarySearch(frames, time, 1) - 1; + var attachmentName = this.attachmentNames[frameIndex]; + skeleton.slots[this.slotIndex].setAttachment(null == attachmentName ? null : skeleton.getAttachment(this.slotIndex, attachmentName)); + }; + return AttachmentTimeline; + })(); + spine.AttachmentTimeline = AttachmentTimeline; + var zeros = null; + var DeformTimeline = (function(_super) { + __extends(DeformTimeline, _super); + function DeformTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount); + _this.frameVertices = new Array(frameCount); + null == zeros && (zeros = spine.Utils.newFloatArray(64)); + return _this; + } + DeformTimeline.prototype.getPropertyId = function() { + return (TimelineType.deform << 27) + +this.attachment.id + this.slotIndex; + }; + DeformTimeline.prototype.setFrame = function(frameIndex, time, vertices) { + this.frames[frameIndex] = time; + this.frameVertices[frameIndex] = vertices; + }; + DeformTimeline.prototype.apply = function(skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) return; + var slotAttachment = slot.getAttachment(); + if (!(slotAttachment instanceof spine.VertexAttachment) || !(slotAttachment.deformAttachment == this.attachment)) return; + var deformArray = slot.deform; + 0 == deformArray.length && (blend = MixBlend.setup); + var frameVertices = this.frameVertices; + var vertexCount = frameVertices[0].length; + var frames = this.frames; + if (time < frames[0]) { + var vertexAttachment = slotAttachment; + switch (blend) { + case MixBlend.setup: + deformArray.length = 0; + return; + + case MixBlend.first: + if (1 == alpha) { + deformArray.length = 0; + break; + } + var deform_1 = spine.Utils.setArraySize(deformArray, vertexCount); + if (null == vertexAttachment.bones) { + var setupVertices = vertexAttachment.vertices; + for (var i = 0; i < vertexCount; i++) deform_1[i] += (setupVertices[i] - deform_1[i]) * alpha; + } else { + alpha = 1 - alpha; + for (var i = 0; i < vertexCount; i++) deform_1[i] *= alpha; + } + } + return; + } + var deform = spine.Utils.setArraySize(deformArray, vertexCount); + if (time >= frames[frames.length - 1]) { + var lastVertices = frameVertices[frames.length - 1]; + if (1 == alpha) if (blend == MixBlend.add) { + var vertexAttachment = slotAttachment; + if (null == vertexAttachment.bones) { + var setupVertices = vertexAttachment.vertices; + for (var i_1 = 0; i_1 < vertexCount; i_1++) deform[i_1] += lastVertices[i_1] - setupVertices[i_1]; + } else for (var i_2 = 0; i_2 < vertexCount; i_2++) deform[i_2] += lastVertices[i_2]; + } else spine.Utils.arrayCopy(lastVertices, 0, deform, 0, vertexCount); else switch (blend) { + case MixBlend.setup: + var vertexAttachment_1 = slotAttachment; + if (null == vertexAttachment_1.bones) { + var setupVertices = vertexAttachment_1.vertices; + for (var i_3 = 0; i_3 < vertexCount; i_3++) { + var setup = setupVertices[i_3]; + deform[i_3] = setup + (lastVertices[i_3] - setup) * alpha; + } + } else for (var i_4 = 0; i_4 < vertexCount; i_4++) deform[i_4] = lastVertices[i_4] * alpha; + break; + + case MixBlend.first: + case MixBlend.replace: + for (var i_5 = 0; i_5 < vertexCount; i_5++) deform[i_5] += (lastVertices[i_5] - deform[i_5]) * alpha; + + case MixBlend.add: + var vertexAttachment = slotAttachment; + if (null == vertexAttachment.bones) { + var setupVertices = vertexAttachment.vertices; + for (var i_6 = 0; i_6 < vertexCount; i_6++) deform[i_6] += (lastVertices[i_6] - setupVertices[i_6]) * alpha; + } else for (var i_7 = 0; i_7 < vertexCount; i_7++) deform[i_7] += lastVertices[i_7] * alpha; + } + return; + } + var frame = Animation.binarySearch(frames, time); + var prevVertices = frameVertices[frame - 1]; + var nextVertices = frameVertices[frame]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame - 1, 1 - (time - frameTime) / (frames[frame - 1] - frameTime)); + if (1 == alpha) if (blend == MixBlend.add) { + var vertexAttachment = slotAttachment; + if (null == vertexAttachment.bones) { + var setupVertices = vertexAttachment.vertices; + for (var i_8 = 0; i_8 < vertexCount; i_8++) { + var prev = prevVertices[i_8]; + deform[i_8] += prev + (nextVertices[i_8] - prev) * percent - setupVertices[i_8]; + } + } else for (var i_9 = 0; i_9 < vertexCount; i_9++) { + var prev = prevVertices[i_9]; + deform[i_9] += prev + (nextVertices[i_9] - prev) * percent; + } + } else for (var i_10 = 0; i_10 < vertexCount; i_10++) { + var prev = prevVertices[i_10]; + deform[i_10] = prev + (nextVertices[i_10] - prev) * percent; + } else switch (blend) { + case MixBlend.setup: + var vertexAttachment_2 = slotAttachment; + if (null == vertexAttachment_2.bones) { + var setupVertices = vertexAttachment_2.vertices; + for (var i_11 = 0; i_11 < vertexCount; i_11++) { + var prev = prevVertices[i_11], setup = setupVertices[i_11]; + deform[i_11] = setup + (prev + (nextVertices[i_11] - prev) * percent - setup) * alpha; + } + } else for (var i_12 = 0; i_12 < vertexCount; i_12++) { + var prev = prevVertices[i_12]; + deform[i_12] = (prev + (nextVertices[i_12] - prev) * percent) * alpha; + } + break; + + case MixBlend.first: + case MixBlend.replace: + for (var i_13 = 0; i_13 < vertexCount; i_13++) { + var prev = prevVertices[i_13]; + deform[i_13] += (prev + (nextVertices[i_13] - prev) * percent - deform[i_13]) * alpha; + } + break; + + case MixBlend.add: + var vertexAttachment = slotAttachment; + if (null == vertexAttachment.bones) { + var setupVertices = vertexAttachment.vertices; + for (var i_14 = 0; i_14 < vertexCount; i_14++) { + var prev = prevVertices[i_14]; + deform[i_14] += (prev + (nextVertices[i_14] - prev) * percent - setupVertices[i_14]) * alpha; + } + } else for (var i_15 = 0; i_15 < vertexCount; i_15++) { + var prev = prevVertices[i_15]; + deform[i_15] += (prev + (nextVertices[i_15] - prev) * percent) * alpha; + } + } + }; + return DeformTimeline; + })(CurveTimeline); + spine.DeformTimeline = DeformTimeline; + var EventTimeline = (function() { + function EventTimeline(frameCount) { + this.frames = spine.Utils.newFloatArray(frameCount); + this.events = new Array(frameCount); + } + EventTimeline.prototype.getPropertyId = function() { + return TimelineType.event << 24; + }; + EventTimeline.prototype.getFrameCount = function() { + return this.frames.length; + }; + EventTimeline.prototype.setFrame = function(frameIndex, event) { + this.frames[frameIndex] = event.time; + this.events[frameIndex] = event; + }; + EventTimeline.prototype.apply = function(skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + if (null == firedEvents) return; + var frames = this.frames; + var frameCount = this.frames.length; + if (lastTime > time) { + this.apply(skeleton, lastTime, Number.MAX_VALUE, firedEvents, alpha, blend, direction); + lastTime = -1; + } else if (lastTime >= frames[frameCount - 1]) return; + if (time < frames[0]) return; + var frame = 0; + if (lastTime < frames[0]) frame = 0; else { + frame = Animation.binarySearch(frames, lastTime); + var frameTime = frames[frame]; + while (frame > 0) { + if (frames[frame - 1] != frameTime) break; + frame--; + } + } + for (;frame < frameCount && time >= frames[frame]; frame++) firedEvents.push(this.events[frame]); + }; + return EventTimeline; + })(); + spine.EventTimeline = EventTimeline; + var DrawOrderTimeline = (function() { + function DrawOrderTimeline(frameCount) { + this.frames = spine.Utils.newFloatArray(frameCount); + this.drawOrders = new Array(frameCount); + } + DrawOrderTimeline.prototype.getPropertyId = function() { + return TimelineType.drawOrder << 24; + }; + DrawOrderTimeline.prototype.getFrameCount = function() { + return this.frames.length; + }; + DrawOrderTimeline.prototype.setFrame = function(frameIndex, time, drawOrder) { + this.frames[frameIndex] = time; + this.drawOrders[frameIndex] = drawOrder; + }; + DrawOrderTimeline.prototype.apply = function(skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var drawOrder = skeleton.drawOrder; + var slots = skeleton.slots; + if (direction == MixDirection.mixOut && blend == MixBlend.setup) { + spine.Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length); + return; + } + var frames = this.frames; + if (time < frames[0]) { + blend != MixBlend.setup && blend != MixBlend.first || spine.Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length); + return; + } + var frame = 0; + frame = time >= frames[frames.length - 1] ? frames.length - 1 : Animation.binarySearch(frames, time) - 1; + var drawOrderToSetupIndex = this.drawOrders[frame]; + if (null == drawOrderToSetupIndex) spine.Utils.arrayCopy(slots, 0, drawOrder, 0, slots.length); else for (var i = 0, n = drawOrderToSetupIndex.length; i < n; i++) drawOrder[i] = slots[drawOrderToSetupIndex[i]]; + }; + return DrawOrderTimeline; + })(); + spine.DrawOrderTimeline = DrawOrderTimeline; + var IkConstraintTimeline = (function(_super) { + __extends(IkConstraintTimeline, _super); + function IkConstraintTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * IkConstraintTimeline.ENTRIES); + return _this; + } + IkConstraintTimeline.prototype.getPropertyId = function() { + return (TimelineType.ikConstraint << 24) + this.ikConstraintIndex; + }; + IkConstraintTimeline.prototype.setFrame = function(frameIndex, time, mix, softness, bendDirection, compress, stretch) { + frameIndex *= IkConstraintTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + IkConstraintTimeline.MIX] = mix; + this.frames[frameIndex + IkConstraintTimeline.SOFTNESS] = softness; + this.frames[frameIndex + IkConstraintTimeline.BEND_DIRECTION] = bendDirection; + this.frames[frameIndex + IkConstraintTimeline.COMPRESS] = compress ? 1 : 0; + this.frames[frameIndex + IkConstraintTimeline.STRETCH] = stretch ? 1 : 0; + }; + IkConstraintTimeline.prototype.apply = function(skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.ikConstraints[this.ikConstraintIndex]; + if (!constraint.active) return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.mix = constraint.data.mix; + constraint.softness = constraint.data.softness; + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + return; + + case MixBlend.first: + constraint.mix += (constraint.data.mix - constraint.mix) * alpha; + constraint.softness += (constraint.data.softness - constraint.softness) * alpha; + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + } + return; + } + if (time >= frames[frames.length - IkConstraintTimeline.ENTRIES]) { + if (blend == MixBlend.setup) { + constraint.mix = constraint.data.mix + (frames[frames.length + IkConstraintTimeline.PREV_MIX] - constraint.data.mix) * alpha; + constraint.softness = constraint.data.softness + (frames[frames.length + IkConstraintTimeline.PREV_SOFTNESS] - constraint.data.softness) * alpha; + if (direction == MixDirection.mixOut) { + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + } else { + constraint.bendDirection = frames[frames.length + IkConstraintTimeline.PREV_BEND_DIRECTION]; + constraint.compress = 0 != frames[frames.length + IkConstraintTimeline.PREV_COMPRESS]; + constraint.stretch = 0 != frames[frames.length + IkConstraintTimeline.PREV_STRETCH]; + } + } else { + constraint.mix += (frames[frames.length + IkConstraintTimeline.PREV_MIX] - constraint.mix) * alpha; + constraint.softness += (frames[frames.length + IkConstraintTimeline.PREV_SOFTNESS] - constraint.softness) * alpha; + if (direction == MixDirection.mixIn) { + constraint.bendDirection = frames[frames.length + IkConstraintTimeline.PREV_BEND_DIRECTION]; + constraint.compress = 0 != frames[frames.length + IkConstraintTimeline.PREV_COMPRESS]; + constraint.stretch = 0 != frames[frames.length + IkConstraintTimeline.PREV_STRETCH]; + } + } + return; + } + var frame = Animation.binarySearch(frames, time, IkConstraintTimeline.ENTRIES); + var mix = frames[frame + IkConstraintTimeline.PREV_MIX]; + var softness = frames[frame + IkConstraintTimeline.PREV_SOFTNESS]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / IkConstraintTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + IkConstraintTimeline.PREV_TIME] - frameTime)); + if (blend == MixBlend.setup) { + constraint.mix = constraint.data.mix + (mix + (frames[frame + IkConstraintTimeline.MIX] - mix) * percent - constraint.data.mix) * alpha; + constraint.softness = constraint.data.softness + (softness + (frames[frame + IkConstraintTimeline.SOFTNESS] - softness) * percent - constraint.data.softness) * alpha; + if (direction == MixDirection.mixOut) { + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + } else { + constraint.bendDirection = frames[frame + IkConstraintTimeline.PREV_BEND_DIRECTION]; + constraint.compress = 0 != frames[frame + IkConstraintTimeline.PREV_COMPRESS]; + constraint.stretch = 0 != frames[frame + IkConstraintTimeline.PREV_STRETCH]; + } + } else { + constraint.mix += (mix + (frames[frame + IkConstraintTimeline.MIX] - mix) * percent - constraint.mix) * alpha; + constraint.softness += (softness + (frames[frame + IkConstraintTimeline.SOFTNESS] - softness) * percent - constraint.softness) * alpha; + if (direction == MixDirection.mixIn) { + constraint.bendDirection = frames[frame + IkConstraintTimeline.PREV_BEND_DIRECTION]; + constraint.compress = 0 != frames[frame + IkConstraintTimeline.PREV_COMPRESS]; + constraint.stretch = 0 != frames[frame + IkConstraintTimeline.PREV_STRETCH]; + } + } + }; + IkConstraintTimeline.ENTRIES = 6; + IkConstraintTimeline.PREV_TIME = -6; + IkConstraintTimeline.PREV_MIX = -5; + IkConstraintTimeline.PREV_SOFTNESS = -4; + IkConstraintTimeline.PREV_BEND_DIRECTION = -3; + IkConstraintTimeline.PREV_COMPRESS = -2; + IkConstraintTimeline.PREV_STRETCH = -1; + IkConstraintTimeline.MIX = 1; + IkConstraintTimeline.SOFTNESS = 2; + IkConstraintTimeline.BEND_DIRECTION = 3; + IkConstraintTimeline.COMPRESS = 4; + IkConstraintTimeline.STRETCH = 5; + return IkConstraintTimeline; + })(CurveTimeline); + spine.IkConstraintTimeline = IkConstraintTimeline; + var TransformConstraintTimeline = (function(_super) { + __extends(TransformConstraintTimeline, _super); + function TransformConstraintTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * TransformConstraintTimeline.ENTRIES); + return _this; + } + TransformConstraintTimeline.prototype.getPropertyId = function() { + return (TimelineType.transformConstraint << 24) + this.transformConstraintIndex; + }; + TransformConstraintTimeline.prototype.setFrame = function(frameIndex, time, rotateMix, translateMix, scaleMix, shearMix) { + frameIndex *= TransformConstraintTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + TransformConstraintTimeline.ROTATE] = rotateMix; + this.frames[frameIndex + TransformConstraintTimeline.TRANSLATE] = translateMix; + this.frames[frameIndex + TransformConstraintTimeline.SCALE] = scaleMix; + this.frames[frameIndex + TransformConstraintTimeline.SHEAR] = shearMix; + }; + TransformConstraintTimeline.prototype.apply = function(skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.transformConstraints[this.transformConstraintIndex]; + if (!constraint.active) return; + if (time < frames[0]) { + var data = constraint.data; + switch (blend) { + case MixBlend.setup: + constraint.rotateMix = data.rotateMix; + constraint.translateMix = data.translateMix; + constraint.scaleMix = data.scaleMix; + constraint.shearMix = data.shearMix; + return; + + case MixBlend.first: + constraint.rotateMix += (data.rotateMix - constraint.rotateMix) * alpha; + constraint.translateMix += (data.translateMix - constraint.translateMix) * alpha; + constraint.scaleMix += (data.scaleMix - constraint.scaleMix) * alpha; + constraint.shearMix += (data.shearMix - constraint.shearMix) * alpha; + } + return; + } + var rotate = 0, translate = 0, scale = 0, shear = 0; + if (time >= frames[frames.length - TransformConstraintTimeline.ENTRIES]) { + var i = frames.length; + rotate = frames[i + TransformConstraintTimeline.PREV_ROTATE]; + translate = frames[i + TransformConstraintTimeline.PREV_TRANSLATE]; + scale = frames[i + TransformConstraintTimeline.PREV_SCALE]; + shear = frames[i + TransformConstraintTimeline.PREV_SHEAR]; + } else { + var frame = Animation.binarySearch(frames, time, TransformConstraintTimeline.ENTRIES); + rotate = frames[frame + TransformConstraintTimeline.PREV_ROTATE]; + translate = frames[frame + TransformConstraintTimeline.PREV_TRANSLATE]; + scale = frames[frame + TransformConstraintTimeline.PREV_SCALE]; + shear = frames[frame + TransformConstraintTimeline.PREV_SHEAR]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / TransformConstraintTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + TransformConstraintTimeline.PREV_TIME] - frameTime)); + rotate += (frames[frame + TransformConstraintTimeline.ROTATE] - rotate) * percent; + translate += (frames[frame + TransformConstraintTimeline.TRANSLATE] - translate) * percent; + scale += (frames[frame + TransformConstraintTimeline.SCALE] - scale) * percent; + shear += (frames[frame + TransformConstraintTimeline.SHEAR] - shear) * percent; + } + if (blend == MixBlend.setup) { + var data = constraint.data; + constraint.rotateMix = data.rotateMix + (rotate - data.rotateMix) * alpha; + constraint.translateMix = data.translateMix + (translate - data.translateMix) * alpha; + constraint.scaleMix = data.scaleMix + (scale - data.scaleMix) * alpha; + constraint.shearMix = data.shearMix + (shear - data.shearMix) * alpha; + } else { + constraint.rotateMix += (rotate - constraint.rotateMix) * alpha; + constraint.translateMix += (translate - constraint.translateMix) * alpha; + constraint.scaleMix += (scale - constraint.scaleMix) * alpha; + constraint.shearMix += (shear - constraint.shearMix) * alpha; + } + }; + TransformConstraintTimeline.ENTRIES = 5; + TransformConstraintTimeline.PREV_TIME = -5; + TransformConstraintTimeline.PREV_ROTATE = -4; + TransformConstraintTimeline.PREV_TRANSLATE = -3; + TransformConstraintTimeline.PREV_SCALE = -2; + TransformConstraintTimeline.PREV_SHEAR = -1; + TransformConstraintTimeline.ROTATE = 1; + TransformConstraintTimeline.TRANSLATE = 2; + TransformConstraintTimeline.SCALE = 3; + TransformConstraintTimeline.SHEAR = 4; + return TransformConstraintTimeline; + })(CurveTimeline); + spine.TransformConstraintTimeline = TransformConstraintTimeline; + var PathConstraintPositionTimeline = (function(_super) { + __extends(PathConstraintPositionTimeline, _super); + function PathConstraintPositionTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * PathConstraintPositionTimeline.ENTRIES); + return _this; + } + PathConstraintPositionTimeline.prototype.getPropertyId = function() { + return (TimelineType.pathConstraintPosition << 24) + this.pathConstraintIndex; + }; + PathConstraintPositionTimeline.prototype.setFrame = function(frameIndex, time, value) { + frameIndex *= PathConstraintPositionTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + PathConstraintPositionTimeline.VALUE] = value; + }; + PathConstraintPositionTimeline.prototype.apply = function(skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.pathConstraints[this.pathConstraintIndex]; + if (!constraint.active) return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.position = constraint.data.position; + return; + + case MixBlend.first: + constraint.position += (constraint.data.position - constraint.position) * alpha; + } + return; + } + var position = 0; + if (time >= frames[frames.length - PathConstraintPositionTimeline.ENTRIES]) position = frames[frames.length + PathConstraintPositionTimeline.PREV_VALUE]; else { + var frame = Animation.binarySearch(frames, time, PathConstraintPositionTimeline.ENTRIES); + position = frames[frame + PathConstraintPositionTimeline.PREV_VALUE]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / PathConstraintPositionTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PathConstraintPositionTimeline.PREV_TIME] - frameTime)); + position += (frames[frame + PathConstraintPositionTimeline.VALUE] - position) * percent; + } + blend == MixBlend.setup ? constraint.position = constraint.data.position + (position - constraint.data.position) * alpha : constraint.position += (position - constraint.position) * alpha; + }; + PathConstraintPositionTimeline.ENTRIES = 2; + PathConstraintPositionTimeline.PREV_TIME = -2; + PathConstraintPositionTimeline.PREV_VALUE = -1; + PathConstraintPositionTimeline.VALUE = 1; + return PathConstraintPositionTimeline; + })(CurveTimeline); + spine.PathConstraintPositionTimeline = PathConstraintPositionTimeline; + var PathConstraintSpacingTimeline = (function(_super) { + __extends(PathConstraintSpacingTimeline, _super); + function PathConstraintSpacingTimeline(frameCount) { + return _super.call(this, frameCount) || this; + } + PathConstraintSpacingTimeline.prototype.getPropertyId = function() { + return (TimelineType.pathConstraintSpacing << 24) + this.pathConstraintIndex; + }; + PathConstraintSpacingTimeline.prototype.apply = function(skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.pathConstraints[this.pathConstraintIndex]; + if (!constraint.active) return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.spacing = constraint.data.spacing; + return; + + case MixBlend.first: + constraint.spacing += (constraint.data.spacing - constraint.spacing) * alpha; + } + return; + } + var spacing = 0; + if (time >= frames[frames.length - PathConstraintSpacingTimeline.ENTRIES]) spacing = frames[frames.length + PathConstraintSpacingTimeline.PREV_VALUE]; else { + var frame = Animation.binarySearch(frames, time, PathConstraintSpacingTimeline.ENTRIES); + spacing = frames[frame + PathConstraintSpacingTimeline.PREV_VALUE]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / PathConstraintSpacingTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PathConstraintSpacingTimeline.PREV_TIME] - frameTime)); + spacing += (frames[frame + PathConstraintSpacingTimeline.VALUE] - spacing) * percent; + } + blend == MixBlend.setup ? constraint.spacing = constraint.data.spacing + (spacing - constraint.data.spacing) * alpha : constraint.spacing += (spacing - constraint.spacing) * alpha; + }; + return PathConstraintSpacingTimeline; + })(PathConstraintPositionTimeline); + spine.PathConstraintSpacingTimeline = PathConstraintSpacingTimeline; + var PathConstraintMixTimeline = (function(_super) { + __extends(PathConstraintMixTimeline, _super); + function PathConstraintMixTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * PathConstraintMixTimeline.ENTRIES); + return _this; + } + PathConstraintMixTimeline.prototype.getPropertyId = function() { + return (TimelineType.pathConstraintMix << 24) + this.pathConstraintIndex; + }; + PathConstraintMixTimeline.prototype.setFrame = function(frameIndex, time, rotateMix, translateMix) { + frameIndex *= PathConstraintMixTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + PathConstraintMixTimeline.ROTATE] = rotateMix; + this.frames[frameIndex + PathConstraintMixTimeline.TRANSLATE] = translateMix; + }; + PathConstraintMixTimeline.prototype.apply = function(skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.pathConstraints[this.pathConstraintIndex]; + if (!constraint.active) return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.rotateMix = constraint.data.rotateMix; + constraint.translateMix = constraint.data.translateMix; + return; + + case MixBlend.first: + constraint.rotateMix += (constraint.data.rotateMix - constraint.rotateMix) * alpha; + constraint.translateMix += (constraint.data.translateMix - constraint.translateMix) * alpha; + } + return; + } + var rotate = 0, translate = 0; + if (time >= frames[frames.length - PathConstraintMixTimeline.ENTRIES]) { + rotate = frames[frames.length + PathConstraintMixTimeline.PREV_ROTATE]; + translate = frames[frames.length + PathConstraintMixTimeline.PREV_TRANSLATE]; + } else { + var frame = Animation.binarySearch(frames, time, PathConstraintMixTimeline.ENTRIES); + rotate = frames[frame + PathConstraintMixTimeline.PREV_ROTATE]; + translate = frames[frame + PathConstraintMixTimeline.PREV_TRANSLATE]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / PathConstraintMixTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PathConstraintMixTimeline.PREV_TIME] - frameTime)); + rotate += (frames[frame + PathConstraintMixTimeline.ROTATE] - rotate) * percent; + translate += (frames[frame + PathConstraintMixTimeline.TRANSLATE] - translate) * percent; + } + if (blend == MixBlend.setup) { + constraint.rotateMix = constraint.data.rotateMix + (rotate - constraint.data.rotateMix) * alpha; + constraint.translateMix = constraint.data.translateMix + (translate - constraint.data.translateMix) * alpha; + } else { + constraint.rotateMix += (rotate - constraint.rotateMix) * alpha; + constraint.translateMix += (translate - constraint.translateMix) * alpha; + } + }; + PathConstraintMixTimeline.ENTRIES = 3; + PathConstraintMixTimeline.PREV_TIME = -3; + PathConstraintMixTimeline.PREV_ROTATE = -2; + PathConstraintMixTimeline.PREV_TRANSLATE = -1; + PathConstraintMixTimeline.ROTATE = 1; + PathConstraintMixTimeline.TRANSLATE = 2; + return PathConstraintMixTimeline; + })(CurveTimeline); + spine.PathConstraintMixTimeline = PathConstraintMixTimeline; + })(spine || (spine = {})); + var spine; + (function(spine) { + var AnimationState = (function() { + function AnimationState(data) { + this.tracks = new Array(); + this.timeScale = 1; + this.events = new Array(); + this.listeners = new Array(); + this.queue = new EventQueue(this); + this.propertyIDs = new spine.IntSet(); + this.animationsChanged = false; + this.trackEntryPool = new spine.Pool(function() { + return new TrackEntry(); + }); + this.data = data; + } + AnimationState.prototype.update = function(delta) { + delta *= this.timeScale; + var tracks = this.tracks; + for (var i = 0, n = tracks.length; i < n; i++) { + var current = tracks[i]; + if (null == current) continue; + current.animationLast = current.nextAnimationLast; + current.trackLast = current.nextTrackLast; + var currentDelta = delta * current.timeScale; + if (current.delay > 0) { + current.delay -= currentDelta; + if (current.delay > 0) continue; + currentDelta = -current.delay; + current.delay = 0; + } + var next = current.next; + if (null != next) { + var nextTime = current.trackLast - next.delay; + if (nextTime >= 0) { + next.delay = 0; + next.trackTime += 0 == current.timeScale ? 0 : (nextTime / current.timeScale + delta) * next.timeScale; + current.trackTime += currentDelta; + this.setCurrent(i, next, true); + while (null != next.mixingFrom) { + next.mixTime += delta; + next = next.mixingFrom; + } + continue; + } + } else if (current.trackLast >= current.trackEnd && null == current.mixingFrom) { + tracks[i] = null; + this.queue.end(current); + this.disposeNext(current); + continue; + } + if (null != current.mixingFrom && this.updateMixingFrom(current, delta)) { + var from = current.mixingFrom; + current.mixingFrom = null; + null != from && (from.mixingTo = null); + while (null != from) { + this.queue.end(from); + from = from.mixingFrom; + } + } + current.trackTime += currentDelta; + } + this.queue.drain(); + }; + AnimationState.prototype.updateMixingFrom = function(to, delta) { + var from = to.mixingFrom; + if (null == from) return true; + var finished = this.updateMixingFrom(from, delta); + from.animationLast = from.nextAnimationLast; + from.trackLast = from.nextTrackLast; + if (to.mixTime > 0 && to.mixTime >= to.mixDuration) { + if (0 == from.totalAlpha || 0 == to.mixDuration) { + to.mixingFrom = from.mixingFrom; + null != from.mixingFrom && (from.mixingFrom.mixingTo = to); + to.interruptAlpha = from.interruptAlpha; + this.queue.end(from); + } + return finished; + } + from.trackTime += delta * from.timeScale; + to.mixTime += delta; + return false; + }; + AnimationState.prototype.apply = function(skeleton) { + if (null == skeleton) throw new Error("skeleton cannot be null."); + this.animationsChanged && this._animationsChanged(); + var events = this.events; + var tracks = this.tracks; + var applied = false; + for (var i = 0, n = tracks.length; i < n; i++) { + var current = tracks[i]; + if (null == current || current.delay > 0) continue; + applied = true; + var blend = 0 == i ? spine.MixBlend.first : current.mixBlend; + var mix = current.alpha; + null != current.mixingFrom ? mix *= this.applyMixingFrom(current, skeleton, blend) : current.trackTime >= current.trackEnd && null == current.next && (mix = 0); + var animationLast = current.animationLast, animationTime = current.getAnimationTime(); + var timelineCount = current.animation.timelines.length; + var timelines = current.animation.timelines; + if (0 == i && 1 == mix || blend == spine.MixBlend.add) for (var ii = 0; ii < timelineCount; ii++) { + spine.Utils.webkit602BugfixHelper(mix, blend); + timelines[ii].apply(skeleton, animationLast, animationTime, events, mix, blend, spine.MixDirection.mixIn); + } else { + var timelineMode = current.timelineMode; + var firstFrame = 0 == current.timelinesRotation.length; + firstFrame && spine.Utils.setArraySize(current.timelinesRotation, timelineCount << 1, null); + var timelinesRotation = current.timelinesRotation; + for (var ii = 0; ii < timelineCount; ii++) { + var timeline = timelines[ii]; + var timelineBlend = (timelineMode[ii] & AnimationState.NOT_LAST - 1) == AnimationState.SUBSEQUENT ? blend : spine.MixBlend.setup; + if (timeline instanceof spine.RotateTimeline) this.applyRotateTimeline(timeline, skeleton, animationTime, mix, timelineBlend, timelinesRotation, ii << 1, firstFrame); else { + spine.Utils.webkit602BugfixHelper(mix, blend); + timeline.apply(skeleton, animationLast, animationTime, events, mix, timelineBlend, spine.MixDirection.mixIn); + } + } + } + this.queueEvents(current, animationTime); + events.length = 0; + current.nextAnimationLast = animationTime; + current.nextTrackLast = current.trackTime; + } + this.queue.drain(); + return applied; + }; + AnimationState.prototype.applyMixingFrom = function(to, skeleton, blend) { + var from = to.mixingFrom; + null != from.mixingFrom && this.applyMixingFrom(from, skeleton, blend); + var mix = 0; + if (0 == to.mixDuration) { + mix = 1; + blend == spine.MixBlend.first && (blend = spine.MixBlend.setup); + } else { + mix = to.mixTime / to.mixDuration; + mix > 1 && (mix = 1); + blend != spine.MixBlend.first && (blend = from.mixBlend); + } + var events = mix < from.eventThreshold ? this.events : null; + var attachments = mix < from.attachmentThreshold, drawOrder = mix < from.drawOrderThreshold; + var animationLast = from.animationLast, animationTime = from.getAnimationTime(); + var timelineCount = from.animation.timelines.length; + var timelines = from.animation.timelines; + var alphaHold = from.alpha * to.interruptAlpha, alphaMix = alphaHold * (1 - mix); + if (blend == spine.MixBlend.add) for (var i = 0; i < timelineCount; i++) timelines[i].apply(skeleton, animationLast, animationTime, events, alphaMix, blend, spine.MixDirection.mixOut); else { + var timelineMode = from.timelineMode; + var timelineHoldMix = from.timelineHoldMix; + var firstFrame = 0 == from.timelinesRotation.length; + firstFrame && spine.Utils.setArraySize(from.timelinesRotation, timelineCount << 1, null); + var timelinesRotation = from.timelinesRotation; + from.totalAlpha = 0; + for (var i = 0; i < timelineCount; i++) { + var timeline = timelines[i]; + var direction = spine.MixDirection.mixOut; + var timelineBlend = void 0; + var alpha = 0; + switch (timelineMode[i] & AnimationState.NOT_LAST - 1) { + case AnimationState.SUBSEQUENT: + timelineBlend = blend; + if (!attachments && timeline instanceof spine.AttachmentTimeline) { + if ((timelineMode[i] & AnimationState.NOT_LAST) == AnimationState.NOT_LAST) continue; + timelineBlend = spine.MixBlend.setup; + } + if (!drawOrder && timeline instanceof spine.DrawOrderTimeline) continue; + alpha = alphaMix; + break; + + case AnimationState.FIRST: + timelineBlend = spine.MixBlend.setup; + alpha = alphaMix; + break; + + case AnimationState.HOLD: + timelineBlend = spine.MixBlend.setup; + alpha = alphaHold; + break; + + default: + timelineBlend = spine.MixBlend.setup; + var holdMix = timelineHoldMix[i]; + alpha = alphaHold * Math.max(0, 1 - holdMix.mixTime / holdMix.mixDuration); + } + from.totalAlpha += alpha; + if (timeline instanceof spine.RotateTimeline) this.applyRotateTimeline(timeline, skeleton, animationTime, alpha, timelineBlend, timelinesRotation, i << 1, firstFrame); else { + spine.Utils.webkit602BugfixHelper(alpha, blend); + timelineBlend == spine.MixBlend.setup && (timeline instanceof spine.AttachmentTimeline ? (attachments || (timelineMode[i] & AnimationState.NOT_LAST) == AnimationState.NOT_LAST) && (direction = spine.MixDirection.mixIn) : timeline instanceof spine.DrawOrderTimeline && drawOrder && (direction = spine.MixDirection.mixIn)); + timeline.apply(skeleton, animationLast, animationTime, events, alpha, timelineBlend, direction); + } + } + } + to.mixDuration > 0 && this.queueEvents(from, animationTime); + this.events.length = 0; + from.nextAnimationLast = animationTime; + from.nextTrackLast = from.trackTime; + return mix; + }; + AnimationState.prototype.applyRotateTimeline = function(timeline, skeleton, time, alpha, blend, timelinesRotation, i, firstFrame) { + firstFrame && (timelinesRotation[i] = 0); + if (1 == alpha) { + timeline.apply(skeleton, 0, time, null, 1, blend, spine.MixDirection.mixIn); + return; + } + var rotateTimeline = timeline; + var frames = rotateTimeline.frames; + var bone = skeleton.bones[rotateTimeline.boneIndex]; + if (!bone.active) return; + var r1 = 0, r2 = 0; + if (time < frames[0]) switch (blend) { + case spine.MixBlend.setup: + bone.rotation = bone.data.rotation; + + default: + return; + + case spine.MixBlend.first: + r1 = bone.rotation; + r2 = bone.data.rotation; + } else { + r1 = blend == spine.MixBlend.setup ? bone.data.rotation : bone.rotation; + if (time >= frames[frames.length - spine.RotateTimeline.ENTRIES]) r2 = bone.data.rotation + frames[frames.length + spine.RotateTimeline.PREV_ROTATION]; else { + var frame = spine.Animation.binarySearch(frames, time, spine.RotateTimeline.ENTRIES); + var prevRotation = frames[frame + spine.RotateTimeline.PREV_ROTATION]; + var frameTime = frames[frame]; + var percent = rotateTimeline.getCurvePercent((frame >> 1) - 1, 1 - (time - frameTime) / (frames[frame + spine.RotateTimeline.PREV_TIME] - frameTime)); + r2 = frames[frame + spine.RotateTimeline.ROTATION] - prevRotation; + r2 -= 360 * (16384 - (16384.499999999996 - r2 / 360 | 0)); + r2 = prevRotation + r2 * percent + bone.data.rotation; + r2 -= 360 * (16384 - (16384.499999999996 - r2 / 360 | 0)); + } + } + var total = 0, diff = r2 - r1; + diff -= 360 * (16384 - (16384.499999999996 - diff / 360 | 0)); + if (0 == diff) total = timelinesRotation[i]; else { + var lastTotal = 0, lastDiff = 0; + if (firstFrame) { + lastTotal = 0; + lastDiff = diff; + } else { + lastTotal = timelinesRotation[i]; + lastDiff = timelinesRotation[i + 1]; + } + var current = diff > 0, dir = lastTotal >= 0; + if (spine.MathUtils.signum(lastDiff) != spine.MathUtils.signum(diff) && Math.abs(lastDiff) <= 90) { + Math.abs(lastTotal) > 180 && (lastTotal += 360 * spine.MathUtils.signum(lastTotal)); + dir = current; + } + total = diff + lastTotal - lastTotal % 360; + dir != current && (total += 360 * spine.MathUtils.signum(lastTotal)); + timelinesRotation[i] = total; + } + timelinesRotation[i + 1] = diff; + r1 += total * alpha; + bone.rotation = r1 - 360 * (16384 - (16384.499999999996 - r1 / 360 | 0)); + }; + AnimationState.prototype.queueEvents = function(entry, animationTime) { + var animationStart = entry.animationStart, animationEnd = entry.animationEnd; + var duration = animationEnd - animationStart; + var trackLastWrapped = entry.trackLast % duration; + var events = this.events; + var i = 0, n = events.length; + for (;i < n; i++) { + var event_1 = events[i]; + if (event_1.time < trackLastWrapped) break; + if (event_1.time > animationEnd) continue; + this.queue.event(entry, event_1); + } + var complete = false; + complete = entry.loop ? 0 == duration || trackLastWrapped > entry.trackTime % duration : animationTime >= animationEnd && entry.animationLast < animationEnd; + complete && this.queue.complete(entry); + for (;i < n; i++) { + var event_2 = events[i]; + if (event_2.time < animationStart) continue; + this.queue.event(entry, events[i]); + } + }; + AnimationState.prototype.clearTracks = function() { + var oldDrainDisabled = this.queue.drainDisabled; + this.queue.drainDisabled = true; + for (var i = 0, n = this.tracks.length; i < n; i++) this.clearTrack(i); + this.tracks.length = 0; + this.queue.drainDisabled = oldDrainDisabled; + this.queue.drain(); + }; + AnimationState.prototype.clearTrack = function(trackIndex) { + if (trackIndex >= this.tracks.length) return; + var current = this.tracks[trackIndex]; + if (null == current) return; + this.queue.end(current); + this.disposeNext(current); + var entry = current; + while (true) { + var from = entry.mixingFrom; + if (null == from) break; + this.queue.end(from); + entry.mixingFrom = null; + entry.mixingTo = null; + entry = from; + } + this.tracks[current.trackIndex] = null; + this.queue.drain(); + }; + AnimationState.prototype.setCurrent = function(index, current, interrupt) { + var from = this.expandToIndex(index); + this.tracks[index] = current; + if (null != from) { + interrupt && this.queue.interrupt(from); + current.mixingFrom = from; + from.mixingTo = current; + current.mixTime = 0; + null != from.mixingFrom && from.mixDuration > 0 && (current.interruptAlpha *= Math.min(1, from.mixTime / from.mixDuration)); + from.timelinesRotation.length = 0; + } + this.queue.start(current); + }; + AnimationState.prototype.setAnimation = function(trackIndex, animationName, loop) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (null == animation) throw new Error("Animation not found: " + animationName); + return this.setAnimationWith(trackIndex, animation, loop); + }; + AnimationState.prototype.setAnimationWith = function(trackIndex, animation, loop) { + if (null == animation) throw new Error("animation cannot be null."); + var interrupt = true; + var current = this.expandToIndex(trackIndex); + if (null != current) if (-1 == current.nextTrackLast) { + this.tracks[trackIndex] = current.mixingFrom; + this.queue.interrupt(current); + this.queue.end(current); + this.disposeNext(current); + current = current.mixingFrom; + interrupt = false; + } else this.disposeNext(current); + var entry = this.trackEntry(trackIndex, animation, loop, current); + this.setCurrent(trackIndex, entry, interrupt); + this.queue.drain(); + return entry; + }; + AnimationState.prototype.addAnimation = function(trackIndex, animationName, loop, delay) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (null == animation) throw new Error("Animation not found: " + animationName); + return this.addAnimationWith(trackIndex, animation, loop, delay); + }; + AnimationState.prototype.addAnimationWith = function(trackIndex, animation, loop, delay) { + if (null == animation) throw new Error("animation cannot be null."); + var last = this.expandToIndex(trackIndex); + if (null != last) while (null != last.next) last = last.next; + var entry = this.trackEntry(trackIndex, animation, loop, last); + if (null == last) { + this.setCurrent(trackIndex, entry, true); + this.queue.drain(); + } else { + last.next = entry; + if (delay <= 0) { + var duration = last.animationEnd - last.animationStart; + if (0 != duration) { + last.loop ? delay += duration * (1 + (last.trackTime / duration | 0)) : delay += Math.max(duration, last.trackTime); + delay -= this.data.getMix(last.animation, animation); + } else delay = last.trackTime; + } + } + entry.delay = delay; + return entry; + }; + AnimationState.prototype.setEmptyAnimation = function(trackIndex, mixDuration) { + var entry = this.setAnimationWith(trackIndex, AnimationState.emptyAnimation, false); + entry.mixDuration = mixDuration; + entry.trackEnd = mixDuration; + return entry; + }; + AnimationState.prototype.addEmptyAnimation = function(trackIndex, mixDuration, delay) { + delay <= 0 && (delay -= mixDuration); + var entry = this.addAnimationWith(trackIndex, AnimationState.emptyAnimation, false, delay); + entry.mixDuration = mixDuration; + entry.trackEnd = mixDuration; + return entry; + }; + AnimationState.prototype.setEmptyAnimations = function(mixDuration) { + var oldDrainDisabled = this.queue.drainDisabled; + this.queue.drainDisabled = true; + for (var i = 0, n = this.tracks.length; i < n; i++) { + var current = this.tracks[i]; + null != current && this.setEmptyAnimation(current.trackIndex, mixDuration); + } + this.queue.drainDisabled = oldDrainDisabled; + this.queue.drain(); + }; + AnimationState.prototype.expandToIndex = function(index) { + if (index < this.tracks.length) return this.tracks[index]; + spine.Utils.ensureArrayCapacity(this.tracks, index + 1, null); + this.tracks.length = index + 1; + return null; + }; + AnimationState.prototype.trackEntry = function(trackIndex, animation, loop, last) { + var entry = this.trackEntryPool.obtain(); + entry.trackIndex = trackIndex; + entry.animation = animation; + entry.loop = loop; + entry.holdPrevious = false; + entry.eventThreshold = 0; + entry.attachmentThreshold = 0; + entry.drawOrderThreshold = 0; + entry.animationStart = 0; + entry.animationEnd = animation.duration; + entry.animationLast = -1; + entry.nextAnimationLast = -1; + entry.delay = 0; + entry.trackTime = 0; + entry.trackLast = -1; + entry.nextTrackLast = -1; + entry.trackEnd = Number.MAX_VALUE; + entry.timeScale = 1; + entry.alpha = 1; + entry.interruptAlpha = 1; + entry.mixTime = 0; + entry.mixDuration = null == last ? 0 : this.data.getMix(last.animation, animation); + return entry; + }; + AnimationState.prototype.disposeNext = function(entry) { + var next = entry.next; + while (null != next) { + this.queue.dispose(next); + next = next.next; + } + entry.next = null; + }; + AnimationState.prototype._animationsChanged = function() { + this.animationsChanged = false; + this.propertyIDs.clear(); + for (var i = 0, n = this.tracks.length; i < n; i++) { + var entry = this.tracks[i]; + if (null == entry) continue; + while (null != entry.mixingFrom) entry = entry.mixingFrom; + do { + null != entry.mixingFrom && entry.mixBlend == spine.MixBlend.add || this.computeHold(entry); + entry = entry.mixingTo; + } while (null != entry); + } + this.propertyIDs.clear(); + for (var i = this.tracks.length - 1; i >= 0; i--) { + var entry = this.tracks[i]; + while (null != entry) { + this.computeNotLast(entry); + entry = entry.mixingFrom; + } + } + }; + AnimationState.prototype.computeHold = function(entry) { + var to = entry.mixingTo; + var timelines = entry.animation.timelines; + var timelinesCount = entry.animation.timelines.length; + var timelineMode = spine.Utils.setArraySize(entry.timelineMode, timelinesCount); + entry.timelineHoldMix.length = 0; + var timelineDipMix = spine.Utils.setArraySize(entry.timelineHoldMix, timelinesCount); + var propertyIDs = this.propertyIDs; + if (null != to && to.holdPrevious) { + for (var i = 0; i < timelinesCount; i++) { + propertyIDs.add(timelines[i].getPropertyId()); + timelineMode[i] = AnimationState.HOLD; + } + return; + } + outer: for (var i = 0; i < timelinesCount; i++) { + var timeline = timelines[i]; + var id = timeline.getPropertyId(); + if (propertyIDs.add(id)) if (null == to || timeline instanceof spine.AttachmentTimeline || timeline instanceof spine.DrawOrderTimeline || timeline instanceof spine.EventTimeline || !to.animation.hasTimeline(id)) timelineMode[i] = AnimationState.FIRST; else { + for (var next = to.mixingTo; null != next; next = next.mixingTo) { + if (next.animation.hasTimeline(id)) continue; + if (entry.mixDuration > 0) { + timelineMode[i] = AnimationState.HOLD_MIX; + timelineDipMix[i] = next; + continue outer; + } + break; + } + timelineMode[i] = AnimationState.HOLD; + } else timelineMode[i] = AnimationState.SUBSEQUENT; + } + }; + AnimationState.prototype.computeNotLast = function(entry) { + var timelines = entry.animation.timelines; + var timelinesCount = entry.animation.timelines.length; + var timelineMode = entry.timelineMode; + var propertyIDs = this.propertyIDs; + for (var i = 0; i < timelinesCount; i++) if (timelines[i] instanceof spine.AttachmentTimeline) { + var timeline = timelines[i]; + propertyIDs.add(timeline.slotIndex) || (timelineMode[i] |= AnimationState.NOT_LAST); + } + }; + AnimationState.prototype.getCurrent = function(trackIndex) { + if (trackIndex >= this.tracks.length) return null; + return this.tracks[trackIndex]; + }; + AnimationState.prototype.addListener = function(listener) { + if (null == listener) throw new Error("listener cannot be null."); + this.listeners.push(listener); + }; + AnimationState.prototype.removeListener = function(listener) { + var index = this.listeners.indexOf(listener); + index >= 0 && this.listeners.splice(index, 1); + }; + AnimationState.prototype.clearListeners = function() { + this.listeners.length = 0; + }; + AnimationState.prototype.clearListenerNotifications = function() { + this.queue.clear(); + }; + AnimationState.emptyAnimation = new spine.Animation("", [], 0); + AnimationState.SUBSEQUENT = 0; + AnimationState.FIRST = 1; + AnimationState.HOLD = 2; + AnimationState.HOLD_MIX = 3; + AnimationState.NOT_LAST = 4; + return AnimationState; + })(); + spine.AnimationState = AnimationState; + var TrackEntry = (function() { + function TrackEntry() { + this.mixBlend = spine.MixBlend.replace; + this.timelineMode = new Array(); + this.timelineHoldMix = new Array(); + this.timelinesRotation = new Array(); + } + TrackEntry.prototype.reset = function() { + this.next = null; + this.mixingFrom = null; + this.mixingTo = null; + this.animation = null; + this.listener = null; + this.timelineMode.length = 0; + this.timelineHoldMix.length = 0; + this.timelinesRotation.length = 0; + }; + TrackEntry.prototype.getAnimationTime = function() { + if (this.loop) { + var duration = this.animationEnd - this.animationStart; + if (0 == duration) return this.animationStart; + return this.trackTime % duration + this.animationStart; + } + return Math.min(this.trackTime + this.animationStart, this.animationEnd); + }; + TrackEntry.prototype.setAnimationLast = function(animationLast) { + this.animationLast = animationLast; + this.nextAnimationLast = animationLast; + }; + TrackEntry.prototype.isComplete = function() { + return this.trackTime >= this.animationEnd - this.animationStart; + }; + TrackEntry.prototype.resetRotationDirections = function() { + this.timelinesRotation.length = 0; + }; + return TrackEntry; + })(); + spine.TrackEntry = TrackEntry; + var EventQueue = (function() { + function EventQueue(animState) { + this.objects = []; + this.drainDisabled = false; + this.animState = animState; + } + EventQueue.prototype.start = function(entry) { + this.objects.push(EventType.start); + this.objects.push(entry); + this.animState.animationsChanged = true; + }; + EventQueue.prototype.interrupt = function(entry) { + this.objects.push(EventType.interrupt); + this.objects.push(entry); + }; + EventQueue.prototype.end = function(entry) { + this.objects.push(EventType.end); + this.objects.push(entry); + this.animState.animationsChanged = true; + }; + EventQueue.prototype.dispose = function(entry) { + this.objects.push(EventType.dispose); + this.objects.push(entry); + }; + EventQueue.prototype.complete = function(entry) { + this.objects.push(EventType.complete); + this.objects.push(entry); + }; + EventQueue.prototype.event = function(entry, event) { + this.objects.push(EventType.event); + this.objects.push(entry); + this.objects.push(event); + }; + EventQueue.prototype.drain = function() { + if (this.drainDisabled) return; + this.drainDisabled = true; + var objects = this.objects; + var listeners = this.animState.listeners; + for (var i = 0; i < objects.length; i += 2) { + var type = objects[i]; + var entry = objects[i + 1]; + switch (type) { + case EventType.start: + null != entry.listener && entry.listener.start && entry.listener.start(entry); + for (var ii = 0; ii < listeners.length; ii++) listeners[ii].start && listeners[ii].start(entry); + break; + + case EventType.interrupt: + null != entry.listener && entry.listener.interrupt && entry.listener.interrupt(entry); + for (var ii = 0; ii < listeners.length; ii++) listeners[ii].interrupt && listeners[ii].interrupt(entry); + break; + + case EventType.end: + null != entry.listener && entry.listener.end && entry.listener.end(entry); + for (var ii = 0; ii < listeners.length; ii++) listeners[ii].end && listeners[ii].end(entry); + + case EventType.dispose: + null != entry.listener && entry.listener.dispose && entry.listener.dispose(entry); + for (var ii = 0; ii < listeners.length; ii++) listeners[ii].dispose && listeners[ii].dispose(entry); + this.animState.trackEntryPool.free(entry); + break; + + case EventType.complete: + null != entry.listener && entry.listener.complete && entry.listener.complete(entry); + for (var ii = 0; ii < listeners.length; ii++) listeners[ii].complete && listeners[ii].complete(entry); + break; + + case EventType.event: + var event_3 = objects[2 + i++]; + null != entry.listener && entry.listener.event && entry.listener.event(entry, event_3); + for (var ii = 0; ii < listeners.length; ii++) listeners[ii].event && listeners[ii].event(entry, event_3); + } + } + this.clear(); + this.drainDisabled = false; + }; + EventQueue.prototype.clear = function() { + this.objects.length = 0; + }; + return EventQueue; + })(); + spine.EventQueue = EventQueue; + var EventType; + (function(EventType) { + EventType[EventType["start"] = 0] = "start"; + EventType[EventType["interrupt"] = 1] = "interrupt"; + EventType[EventType["end"] = 2] = "end"; + EventType[EventType["dispose"] = 3] = "dispose"; + EventType[EventType["complete"] = 4] = "complete"; + EventType[EventType["event"] = 5] = "event"; + })(EventType = spine.EventType || (spine.EventType = {})); + var AnimationStateAdapter = (function() { + function AnimationStateAdapter() {} + AnimationStateAdapter.prototype.start = function(entry) {}; + AnimationStateAdapter.prototype.interrupt = function(entry) {}; + AnimationStateAdapter.prototype.end = function(entry) {}; + AnimationStateAdapter.prototype.dispose = function(entry) {}; + AnimationStateAdapter.prototype.complete = function(entry) {}; + AnimationStateAdapter.prototype.event = function(entry, event) {}; + return AnimationStateAdapter; + })(); + spine.AnimationStateAdapter = AnimationStateAdapter; + })(spine || (spine = {})); + var spine; + (function(spine) { + var AnimationStateData = (function() { + function AnimationStateData(skeletonData) { + this.animationToMixTime = {}; + this.defaultMix = 0; + if (null == skeletonData) throw new Error("skeletonData cannot be null."); + this.skeletonData = skeletonData; + } + AnimationStateData.prototype.setMix = function(fromName, toName, duration) { + var from = this.skeletonData.findAnimation(fromName); + if (null == from) throw new Error("Animation not found: " + fromName); + var to = this.skeletonData.findAnimation(toName); + if (null == to) throw new Error("Animation not found: " + toName); + this.setMixWith(from, to, duration); + }; + AnimationStateData.prototype.setMixWith = function(from, to, duration) { + if (null == from) throw new Error("from cannot be null."); + if (null == to) throw new Error("to cannot be null."); + var key = from.name + "." + to.name; + this.animationToMixTime[key] = duration; + }; + AnimationStateData.prototype.getMix = function(from, to) { + var key = from.name + "." + to.name; + var value = this.animationToMixTime[key]; + return void 0 === value ? this.defaultMix : value; + }; + return AnimationStateData; + })(); + spine.AnimationStateData = AnimationStateData; + })(spine || (spine = {})); + var spine; + (function(spine) { + var AssetManager = (function() { + function AssetManager(textureLoader, pathPrefix) { + void 0 === pathPrefix && (pathPrefix = ""); + this.assets = {}; + this.errors = {}; + this.toLoad = 0; + this.loaded = 0; + this.textureLoader = textureLoader; + this.pathPrefix = pathPrefix; + } + AssetManager.downloadText = function(url, success, error) { + var request = new XMLHttpRequest(); + request.open("GET", url, true); + request.onload = function() { + 200 == request.status ? success(request.responseText) : error(request.status, request.responseText); + }; + request.onerror = function() { + error(request.status, request.responseText); + }; + request.send(); + }; + AssetManager.downloadBinary = function(url, success, error) { + var request = new XMLHttpRequest(); + request.open("GET", url, true); + request.responseType = "arraybuffer"; + request.onload = function() { + 200 == request.status ? success(new Uint8Array(request.response)) : error(request.status, request.responseText); + }; + request.onerror = function() { + error(request.status, request.responseText); + }; + request.send(); + }; + AssetManager.prototype.loadBinary = function(path, success, error) { + var _this = this; + void 0 === success && (success = null); + void 0 === error && (error = null); + path = this.pathPrefix + path; + this.toLoad++; + AssetManager.downloadBinary(path, (function(data) { + _this.assets[path] = data; + success && success(path, data); + _this.toLoad--; + _this.loaded++; + }), (function(state, responseText) { + _this.errors[path] = "Couldn't load binary " + path + ": status " + status + ", " + responseText; + error && error(path, "Couldn't load binary " + path + ": status " + status + ", " + responseText); + _this.toLoad--; + _this.loaded++; + })); + }; + AssetManager.prototype.loadText = function(path, success, error) { + var _this = this; + void 0 === success && (success = null); + void 0 === error && (error = null); + path = this.pathPrefix + path; + this.toLoad++; + AssetManager.downloadText(path, (function(data) { + _this.assets[path] = data; + success && success(path, data); + _this.toLoad--; + _this.loaded++; + }), (function(state, responseText) { + _this.errors[path] = "Couldn't load text " + path + ": status " + status + ", " + responseText; + error && error(path, "Couldn't load text " + path + ": status " + status + ", " + responseText); + _this.toLoad--; + _this.loaded++; + })); + }; + AssetManager.prototype.loadTexture = function(path, success, error) { + var _this = this; + void 0 === success && (success = null); + void 0 === error && (error = null); + path = this.pathPrefix + path; + this.toLoad++; + var img = new Image(); + img.crossOrigin = "anonymous"; + img.onload = function(ev) { + var texture = _this.textureLoader(img); + _this.assets[path] = texture; + _this.toLoad--; + _this.loaded++; + success && success(path, img); + }; + img.onerror = function(ev) { + _this.errors[path] = "Couldn't load image " + path; + _this.toLoad--; + _this.loaded++; + error && error(path, "Couldn't load image " + path); + }; + img.src = path; + }; + AssetManager.prototype.loadTextureData = function(path, data, success, error) { + var _this = this; + void 0 === success && (success = null); + void 0 === error && (error = null); + path = this.pathPrefix + path; + this.toLoad++; + var img = new Image(); + img.onload = function(ev) { + var texture = _this.textureLoader(img); + _this.assets[path] = texture; + _this.toLoad--; + _this.loaded++; + success && success(path, img); + }; + img.onerror = function(ev) { + _this.errors[path] = "Couldn't load image " + path; + _this.toLoad--; + _this.loaded++; + error && error(path, "Couldn't load image " + path); + }; + img.src = data; + }; + AssetManager.prototype.loadTextureAtlas = function(path, success, error) { + var _this = this; + void 0 === success && (success = null); + void 0 === error && (error = null); + var parent = path.lastIndexOf("/") >= 0 ? path.substring(0, path.lastIndexOf("/")) : ""; + path = this.pathPrefix + path; + this.toLoad++; + AssetManager.downloadText(path, (function(atlasData) { + var pagesLoaded = { + count: 0 + }; + var atlasPages = new Array(); + try { + var atlas = new spine.TextureAtlas(atlasData, function(path) { + atlasPages.push(parent + "/" + path); + var image = document.createElement("img"); + image.width = 16; + image.height = 16; + return new spine.FakeTexture(image); + }); + } catch (e) { + var ex = e; + _this.errors[path] = "Couldn't load texture atlas " + path + ": " + ex.message; + error && error(path, "Couldn't load texture atlas " + path + ": " + ex.message); + _this.toLoad--; + _this.loaded++; + return; + } + var _loop_1 = function _loop_1(atlasPage) { + var pageLoadError = false; + _this.loadTexture(atlasPage, (function(imagePath, image) { + pagesLoaded.count++; + if (pagesLoaded.count == atlasPages.length) if (pageLoadError) { + _this.errors[path] = "Couldn't load texture atlas page " + imagePath + "} of atlas " + path; + error && error(path, "Couldn't load texture atlas page " + imagePath + " of atlas " + path); + _this.toLoad--; + _this.loaded++; + } else try { + var atlas = new spine.TextureAtlas(atlasData, function(path) { + return _this.get(parent + "/" + path); + }); + _this.assets[path] = atlas; + success && success(path, atlas); + _this.toLoad--; + _this.loaded++; + } catch (e) { + var ex = e; + _this.errors[path] = "Couldn't load texture atlas " + path + ": " + ex.message; + error && error(path, "Couldn't load texture atlas " + path + ": " + ex.message); + _this.toLoad--; + _this.loaded++; + } + }), (function(imagePath, errorMessage) { + pageLoadError = true; + pagesLoaded.count++; + if (pagesLoaded.count == atlasPages.length) { + _this.errors[path] = "Couldn't load texture atlas page " + imagePath + "} of atlas " + path; + error && error(path, "Couldn't load texture atlas page " + imagePath + " of atlas " + path); + _this.toLoad--; + _this.loaded++; + } + })); + }; + for (var _i = 0, atlasPages_1 = atlasPages; _i < atlasPages_1.length; _i++) { + var atlasPage = atlasPages_1[_i]; + _loop_1(atlasPage); + } + }), (function(state, responseText) { + _this.errors[path] = "Couldn't load texture atlas " + path + ": status " + status + ", " + responseText; + error && error(path, "Couldn't load texture atlas " + path + ": status " + status + ", " + responseText); + _this.toLoad--; + _this.loaded++; + })); + }; + AssetManager.prototype.get = function(path) { + path = this.pathPrefix + path; + return this.assets[path]; + }; + AssetManager.prototype.remove = function(path) { + path = this.pathPrefix + path; + var asset = this.assets[path]; + asset.dispose && asset.dispose(); + this.assets[path] = null; + }; + AssetManager.prototype.removeAll = function() { + for (var key in this.assets) { + var asset = this.assets[key]; + asset.dispose && asset.dispose(); + } + this.assets = {}; + }; + AssetManager.prototype.isLoadingComplete = function() { + return 0 == this.toLoad; + }; + AssetManager.prototype.getToLoad = function() { + return this.toLoad; + }; + AssetManager.prototype.getLoaded = function() { + return this.loaded; + }; + AssetManager.prototype.dispose = function() { + this.removeAll(); + }; + AssetManager.prototype.hasErrors = function() { + return Object.keys(this.errors).length > 0; + }; + AssetManager.prototype.getErrors = function() { + return this.errors; + }; + return AssetManager; + })(); + spine.AssetManager = AssetManager; + })(spine || (spine = {})); + var spine; + (function(spine) { + var AtlasAttachmentLoader = (function() { + function AtlasAttachmentLoader(atlas) { + this.atlas = atlas; + } + AtlasAttachmentLoader.prototype.newRegionAttachment = function(skin, name, path) { + var region = this.atlas.findRegion(path); + if (null == region) return null; + region.renderObject = region; + var attachment = new spine.RegionAttachment(name); + attachment.setRegion(region); + return attachment; + }; + AtlasAttachmentLoader.prototype.newMeshAttachment = function(skin, name, path) { + var region = this.atlas.findRegion(path); + if (null == region) return null; + region.renderObject = region; + var attachment = new spine.MeshAttachment(name); + attachment.region = region; + return attachment; + }; + AtlasAttachmentLoader.prototype.newBoundingBoxAttachment = function(skin, name) { + return new spine.BoundingBoxAttachment(name); + }; + AtlasAttachmentLoader.prototype.newPathAttachment = function(skin, name) { + return new spine.PathAttachment(name); + }; + AtlasAttachmentLoader.prototype.newPointAttachment = function(skin, name) { + return new spine.PointAttachment(name); + }; + AtlasAttachmentLoader.prototype.newClippingAttachment = function(skin, name) { + return new spine.ClippingAttachment(name); + }; + return AtlasAttachmentLoader; + })(); + spine.AtlasAttachmentLoader = AtlasAttachmentLoader; + })(spine || (spine = {})); + var spine; + (function(spine) { + var BlendMode; + (function(BlendMode) { + BlendMode[BlendMode["Normal"] = 0] = "Normal"; + BlendMode[BlendMode["Additive"] = 1] = "Additive"; + BlendMode[BlendMode["Multiply"] = 2] = "Multiply"; + BlendMode[BlendMode["Screen"] = 3] = "Screen"; + })(BlendMode = spine.BlendMode || (spine.BlendMode = {})); + })(spine || (spine = {})); + var spine; + (function(spine) { + var Bone = (function() { + function Bone(data, skeleton, parent) { + this.children = new Array(); + this.x = 0; + this.y = 0; + this.rotation = 0; + this.scaleX = 0; + this.scaleY = 0; + this.shearX = 0; + this.shearY = 0; + this.ax = 0; + this.ay = 0; + this.arotation = 0; + this.ascaleX = 0; + this.ascaleY = 0; + this.ashearX = 0; + this.ashearY = 0; + this.appliedValid = false; + this.a = 0; + this.b = 0; + this.c = 0; + this.d = 0; + this.worldY = 0; + this.worldX = 0; + this.sorted = false; + this.active = false; + if (null == data) throw new Error("data cannot be null."); + if (null == skeleton) throw new Error("skeleton cannot be null."); + this.data = data; + this.skeleton = skeleton; + this.parent = parent; + this.setToSetupPose(); + } + Bone.prototype.isActive = function() { + return this.active; + }; + Bone.prototype.update = function() { + this.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY); + }; + Bone.prototype.updateWorldTransform = function() { + this.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY); + }; + Bone.prototype.updateWorldTransformWith = function(x, y, rotation, scaleX, scaleY, shearX, shearY) { + this.ax = x; + this.ay = y; + this.arotation = rotation; + this.ascaleX = scaleX; + this.ascaleY = scaleY; + this.ashearX = shearX; + this.ashearY = shearY; + this.appliedValid = true; + var parent = this.parent; + if (null == parent) { + var skeleton = this.skeleton; + var rotationY = rotation + 90 + shearY; + var sx = skeleton.scaleX; + var sy = skeleton.scaleY; + this.a = spine.MathUtils.cosDeg(rotation + shearX) * scaleX * sx; + this.b = spine.MathUtils.cosDeg(rotationY) * scaleY * sx; + this.c = spine.MathUtils.sinDeg(rotation + shearX) * scaleX * sy; + this.d = spine.MathUtils.sinDeg(rotationY) * scaleY * sy; + this.worldX = x * sx + skeleton.x; + this.worldY = y * sy + skeleton.y; + return; + } + var pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d; + this.worldX = pa * x + pb * y + parent.worldX; + this.worldY = pc * x + pd * y + parent.worldY; + switch (this.data.transformMode) { + case spine.TransformMode.Normal: + var rotationY = rotation + 90 + shearY; + var la = spine.MathUtils.cosDeg(rotation + shearX) * scaleX; + var lb = spine.MathUtils.cosDeg(rotationY) * scaleY; + var lc = spine.MathUtils.sinDeg(rotation + shearX) * scaleX; + var ld = spine.MathUtils.sinDeg(rotationY) * scaleY; + this.a = pa * la + pb * lc; + this.b = pa * lb + pb * ld; + this.c = pc * la + pd * lc; + this.d = pc * lb + pd * ld; + return; + + case spine.TransformMode.OnlyTranslation: + var rotationY = rotation + 90 + shearY; + this.a = spine.MathUtils.cosDeg(rotation + shearX) * scaleX; + this.b = spine.MathUtils.cosDeg(rotationY) * scaleY; + this.c = spine.MathUtils.sinDeg(rotation + shearX) * scaleX; + this.d = spine.MathUtils.sinDeg(rotationY) * scaleY; + break; + + case spine.TransformMode.NoRotationOrReflection: + var s = pa * pa + pc * pc; + var prx = 0; + if (s > 1e-4) { + s = Math.abs(pa * pd - pb * pc) / s; + pb = pc * s; + pd = pa * s; + prx = Math.atan2(pc, pa) * spine.MathUtils.radDeg; + } else { + pa = 0; + pc = 0; + prx = 90 - Math.atan2(pd, pb) * spine.MathUtils.radDeg; + } + var rx = rotation + shearX - prx; + var ry = rotation + shearY - prx + 90; + var la = spine.MathUtils.cosDeg(rx) * scaleX; + var lb = spine.MathUtils.cosDeg(ry) * scaleY; + var lc = spine.MathUtils.sinDeg(rx) * scaleX; + var ld = spine.MathUtils.sinDeg(ry) * scaleY; + this.a = pa * la - pb * lc; + this.b = pa * lb - pb * ld; + this.c = pc * la + pd * lc; + this.d = pc * lb + pd * ld; + break; + + case spine.TransformMode.NoScale: + case spine.TransformMode.NoScaleOrReflection: + var cos = spine.MathUtils.cosDeg(rotation); + var sin = spine.MathUtils.sinDeg(rotation); + var za = (pa * cos + pb * sin) / this.skeleton.scaleX; + var zc = (pc * cos + pd * sin) / this.skeleton.scaleY; + var s = Math.sqrt(za * za + zc * zc); + s > 1e-5 && (s = 1 / s); + za *= s; + zc *= s; + s = Math.sqrt(za * za + zc * zc); + this.data.transformMode == spine.TransformMode.NoScale && pa * pd - pb * pc < 0 != (this.skeleton.scaleX < 0 != this.skeleton.scaleY < 0) && (s = -s); + var r = Math.PI / 2 + Math.atan2(zc, za); + var zb = Math.cos(r) * s; + var zd = Math.sin(r) * s; + var la = spine.MathUtils.cosDeg(shearX) * scaleX; + var lb = spine.MathUtils.cosDeg(90 + shearY) * scaleY; + var lc = spine.MathUtils.sinDeg(shearX) * scaleX; + var ld = spine.MathUtils.sinDeg(90 + shearY) * scaleY; + this.a = za * la + zb * lc; + this.b = za * lb + zb * ld; + this.c = zc * la + zd * lc; + this.d = zc * lb + zd * ld; + } + this.a *= this.skeleton.scaleX; + this.b *= this.skeleton.scaleX; + this.c *= this.skeleton.scaleY; + this.d *= this.skeleton.scaleY; + }; + Bone.prototype.setToSetupPose = function() { + var data = this.data; + this.x = data.x; + this.y = data.y; + this.rotation = data.rotation; + this.scaleX = data.scaleX; + this.scaleY = data.scaleY; + this.shearX = data.shearX; + this.shearY = data.shearY; + }; + Bone.prototype.getWorldRotationX = function() { + return Math.atan2(this.c, this.a) * spine.MathUtils.radDeg; + }; + Bone.prototype.getWorldRotationY = function() { + return Math.atan2(this.d, this.b) * spine.MathUtils.radDeg; + }; + Bone.prototype.getWorldScaleX = function() { + return Math.sqrt(this.a * this.a + this.c * this.c); + }; + Bone.prototype.getWorldScaleY = function() { + return Math.sqrt(this.b * this.b + this.d * this.d); + }; + Bone.prototype.updateAppliedTransform = function() { + this.appliedValid = true; + var parent = this.parent; + if (null == parent) { + this.ax = this.worldX; + this.ay = this.worldY; + this.arotation = Math.atan2(this.c, this.a) * spine.MathUtils.radDeg; + this.ascaleX = Math.sqrt(this.a * this.a + this.c * this.c); + this.ascaleY = Math.sqrt(this.b * this.b + this.d * this.d); + this.ashearX = 0; + this.ashearY = Math.atan2(this.a * this.b + this.c * this.d, this.a * this.d - this.b * this.c) * spine.MathUtils.radDeg; + return; + } + var pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d; + var pid = 1 / (pa * pd - pb * pc); + var dx = this.worldX - parent.worldX, dy = this.worldY - parent.worldY; + this.ax = dx * pd * pid - dy * pb * pid; + this.ay = dy * pa * pid - dx * pc * pid; + var ia = pid * pd; + var id = pid * pa; + var ib = pid * pb; + var ic = pid * pc; + var ra = ia * this.a - ib * this.c; + var rb = ia * this.b - ib * this.d; + var rc = id * this.c - ic * this.a; + var rd = id * this.d - ic * this.b; + this.ashearX = 0; + this.ascaleX = Math.sqrt(ra * ra + rc * rc); + if (this.ascaleX > 1e-4) { + var det = ra * rd - rb * rc; + this.ascaleY = det / this.ascaleX; + this.ashearY = Math.atan2(ra * rb + rc * rd, det) * spine.MathUtils.radDeg; + this.arotation = Math.atan2(rc, ra) * spine.MathUtils.radDeg; + } else { + this.ascaleX = 0; + this.ascaleY = Math.sqrt(rb * rb + rd * rd); + this.ashearY = 0; + this.arotation = 90 - Math.atan2(rd, rb) * spine.MathUtils.radDeg; + } + }; + Bone.prototype.worldToLocal = function(world) { + var a = this.a, b = this.b, c = this.c, d = this.d; + var invDet = 1 / (a * d - b * c); + var x = world.x - this.worldX, y = world.y - this.worldY; + world.x = x * d * invDet - y * b * invDet; + world.y = y * a * invDet - x * c * invDet; + return world; + }; + Bone.prototype.localToWorld = function(local) { + var x = local.x, y = local.y; + local.x = x * this.a + y * this.b + this.worldX; + local.y = x * this.c + y * this.d + this.worldY; + return local; + }; + Bone.prototype.worldToLocalRotation = function(worldRotation) { + var sin = spine.MathUtils.sinDeg(worldRotation), cos = spine.MathUtils.cosDeg(worldRotation); + return Math.atan2(this.a * sin - this.c * cos, this.d * cos - this.b * sin) * spine.MathUtils.radDeg + this.rotation - this.shearX; + }; + Bone.prototype.localToWorldRotation = function(localRotation) { + localRotation -= this.rotation - this.shearX; + var sin = spine.MathUtils.sinDeg(localRotation), cos = spine.MathUtils.cosDeg(localRotation); + return Math.atan2(cos * this.c + sin * this.d, cos * this.a + sin * this.b) * spine.MathUtils.radDeg; + }; + Bone.prototype.rotateWorld = function(degrees) { + var a = this.a, b = this.b, c = this.c, d = this.d; + var cos = spine.MathUtils.cosDeg(degrees), sin = spine.MathUtils.sinDeg(degrees); + this.a = cos * a - sin * c; + this.b = cos * b - sin * d; + this.c = sin * a + cos * c; + this.d = sin * b + cos * d; + this.appliedValid = false; + }; + return Bone; + })(); + spine.Bone = Bone; + })(spine || (spine = {})); + var spine; + (function(spine) { + var BoneData = (function() { + function BoneData(index, name, parent) { + this.x = 0; + this.y = 0; + this.rotation = 0; + this.scaleX = 1; + this.scaleY = 1; + this.shearX = 0; + this.shearY = 0; + this.transformMode = TransformMode.Normal; + this.skinRequired = false; + this.color = new spine.Color(); + if (index < 0) throw new Error("index must be >= 0."); + if (null == name) throw new Error("name cannot be null."); + this.index = index; + this.name = name; + this.parent = parent; + } + return BoneData; + })(); + spine.BoneData = BoneData; + var TransformMode; + (function(TransformMode) { + TransformMode[TransformMode["Normal"] = 0] = "Normal"; + TransformMode[TransformMode["OnlyTranslation"] = 1] = "OnlyTranslation"; + TransformMode[TransformMode["NoRotationOrReflection"] = 2] = "NoRotationOrReflection"; + TransformMode[TransformMode["NoScale"] = 3] = "NoScale"; + TransformMode[TransformMode["NoScaleOrReflection"] = 4] = "NoScaleOrReflection"; + })(TransformMode = spine.TransformMode || (spine.TransformMode = {})); + })(spine || (spine = {})); + var spine; + (function(spine) { + var ConstraintData = (function() { + function ConstraintData(name, order, skinRequired) { + this.name = name; + this.order = order; + this.skinRequired = skinRequired; + } + return ConstraintData; + })(); + spine.ConstraintData = ConstraintData; + })(spine || (spine = {})); + var spine; + (function(spine) { + var Event = (function() { + function Event(time, data) { + if (null == data) throw new Error("data cannot be null."); + this.time = time; + this.data = data; + } + return Event; + })(); + spine.Event = Event; + })(spine || (spine = {})); + var spine; + (function(spine) { + var EventData = (function() { + function EventData(name) { + this.name = name; + } + return EventData; + })(); + spine.EventData = EventData; + })(spine || (spine = {})); + var spine; + (function(spine) { + var IkConstraint = (function() { + function IkConstraint(data, skeleton) { + this.bendDirection = 0; + this.compress = false; + this.stretch = false; + this.mix = 1; + this.softness = 0; + this.active = false; + if (null == data) throw new Error("data cannot be null."); + if (null == skeleton) throw new Error("skeleton cannot be null."); + this.data = data; + this.mix = data.mix; + this.softness = data.softness; + this.bendDirection = data.bendDirection; + this.compress = data.compress; + this.stretch = data.stretch; + this.bones = new Array(); + for (var i = 0; i < data.bones.length; i++) this.bones.push(skeleton.findBone(data.bones[i].name)); + this.target = skeleton.findBone(data.target.name); + } + IkConstraint.prototype.isActive = function() { + return this.active; + }; + IkConstraint.prototype.apply = function() { + this.update(); + }; + IkConstraint.prototype.update = function() { + var target = this.target; + var bones = this.bones; + switch (bones.length) { + case 1: + this.apply1(bones[0], target.worldX, target.worldY, this.compress, this.stretch, this.data.uniform, this.mix); + break; + + case 2: + this.apply2(bones[0], bones[1], target.worldX, target.worldY, this.bendDirection, this.stretch, this.softness, this.mix); + } + }; + IkConstraint.prototype.apply1 = function(bone, targetX, targetY, compress, stretch, uniform, alpha) { + bone.appliedValid || bone.updateAppliedTransform(); + var p = bone.parent; + var id = 1 / (p.a * p.d - p.b * p.c); + var x = targetX - p.worldX, y = targetY - p.worldY; + var tx = (x * p.d - y * p.b) * id - bone.ax, ty = (y * p.a - x * p.c) * id - bone.ay; + var rotationIK = Math.atan2(ty, tx) * spine.MathUtils.radDeg - bone.ashearX - bone.arotation; + bone.ascaleX < 0 && (rotationIK += 180); + rotationIK > 180 ? rotationIK -= 360 : rotationIK < -180 && (rotationIK += 360); + var sx = bone.ascaleX, sy = bone.ascaleY; + if (compress || stretch) { + var b = bone.data.length * sx, dd = Math.sqrt(tx * tx + ty * ty); + if (compress && dd < b || stretch && dd > b && b > 1e-4) { + var s = (dd / b - 1) * alpha + 1; + sx *= s; + uniform && (sy *= s); + } + } + bone.updateWorldTransformWith(bone.ax, bone.ay, bone.arotation + rotationIK * alpha, sx, sy, bone.ashearX, bone.ashearY); + }; + IkConstraint.prototype.apply2 = function(parent, child, targetX, targetY, bendDir, stretch, softness, alpha) { + if (0 == alpha) { + child.updateWorldTransform(); + return; + } + parent.appliedValid || parent.updateAppliedTransform(); + child.appliedValid || child.updateAppliedTransform(); + var px = parent.ax, py = parent.ay, psx = parent.ascaleX, sx = psx, psy = parent.ascaleY, csx = child.ascaleX; + var os1 = 0, os2 = 0, s2 = 0; + if (psx < 0) { + psx = -psx; + os1 = 180; + s2 = -1; + } else { + os1 = 0; + s2 = 1; + } + if (psy < 0) { + psy = -psy; + s2 = -s2; + } + if (csx < 0) { + csx = -csx; + os2 = 180; + } else os2 = 0; + var cx = child.ax, cy = 0, cwx = 0, cwy = 0, a = parent.a, b = parent.b, c = parent.c, d = parent.d; + var u = Math.abs(psx - psy) <= 1e-4; + if (u) { + cy = child.ay; + cwx = a * cx + b * cy + parent.worldX; + cwy = c * cx + d * cy + parent.worldY; + } else { + cy = 0; + cwx = a * cx + parent.worldX; + cwy = c * cx + parent.worldY; + } + var pp = parent.parent; + a = pp.a; + b = pp.b; + c = pp.c; + d = pp.d; + var id = 1 / (a * d - b * c), x = cwx - pp.worldX, y = cwy - pp.worldY; + var dx = (x * d - y * b) * id - px, dy = (y * a - x * c) * id - py; + var l1 = Math.sqrt(dx * dx + dy * dy), l2 = child.data.length * csx, a1, a2; + if (l1 < 1e-4) { + this.apply1(parent, targetX, targetY, false, stretch, false, alpha); + child.updateWorldTransformWith(cx, cy, 0, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY); + return; + } + x = targetX - pp.worldX; + y = targetY - pp.worldY; + var tx = (x * d - y * b) * id - px, ty = (y * a - x * c) * id - py; + var dd = tx * tx + ty * ty; + if (0 != softness) { + softness *= psx * (csx + 1) / 2; + var td = Math.sqrt(dd), sd = td - l1 - l2 * psx + softness; + if (sd > 0) { + var p = Math.min(1, sd / (2 * softness)) - 1; + p = (sd - softness * (1 - p * p)) / td; + tx -= p * tx; + ty -= p * ty; + dd = tx * tx + ty * ty; + } + } + outer: if (u) { + l2 *= psx; + var cos = (dd - l1 * l1 - l2 * l2) / (2 * l1 * l2); + if (cos < -1) cos = -1; else if (cos > 1) { + cos = 1; + stretch && (sx *= (Math.sqrt(dd) / (l1 + l2) - 1) * alpha + 1); + } + a2 = Math.acos(cos) * bendDir; + a = l1 + l2 * cos; + b = l2 * Math.sin(a2); + a1 = Math.atan2(ty * a - tx * b, tx * a + ty * b); + } else { + a = psx * l2; + b = psy * l2; + var aa = a * a, bb = b * b, ta = Math.atan2(ty, tx); + c = bb * l1 * l1 + aa * dd - aa * bb; + var c1 = -2 * bb * l1, c2 = bb - aa; + d = c1 * c1 - 4 * c2 * c; + if (d >= 0) { + var q = Math.sqrt(d); + c1 < 0 && (q = -q); + q = -(c1 + q) / 2; + var r0 = q / c2, r1 = c / q; + var r = Math.abs(r0) < Math.abs(r1) ? r0 : r1; + if (r * r <= dd) { + y = Math.sqrt(dd - r * r) * bendDir; + a1 = ta - Math.atan2(y, r); + a2 = Math.atan2(y / psy, (r - l1) / psx); + break outer; + } + } + var minAngle = spine.MathUtils.PI, minX = l1 - a, minDist = minX * minX, minY = 0; + var maxAngle = 0, maxX = l1 + a, maxDist = maxX * maxX, maxY = 0; + c = -a * l1 / (aa - bb); + if (c >= -1 && c <= 1) { + c = Math.acos(c); + x = a * Math.cos(c) + l1; + y = b * Math.sin(c); + d = x * x + y * y; + if (d < minDist) { + minAngle = c; + minDist = d; + minX = x; + minY = y; + } + if (d > maxDist) { + maxAngle = c; + maxDist = d; + maxX = x; + maxY = y; + } + } + if (dd <= (minDist + maxDist) / 2) { + a1 = ta - Math.atan2(minY * bendDir, minX); + a2 = minAngle * bendDir; + } else { + a1 = ta - Math.atan2(maxY * bendDir, maxX); + a2 = maxAngle * bendDir; + } + } + var os = Math.atan2(cy, cx) * s2; + var rotation = parent.arotation; + a1 = (a1 - os) * spine.MathUtils.radDeg + os1 - rotation; + a1 > 180 ? a1 -= 360 : a1 < -180 && (a1 += 360); + parent.updateWorldTransformWith(px, py, rotation + a1 * alpha, sx, parent.ascaleY, 0, 0); + rotation = child.arotation; + a2 = ((a2 + os) * spine.MathUtils.radDeg - child.ashearX) * s2 + os2 - rotation; + a2 > 180 ? a2 -= 360 : a2 < -180 && (a2 += 360); + child.updateWorldTransformWith(cx, cy, rotation + a2 * alpha, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY); + }; + return IkConstraint; + })(); + spine.IkConstraint = IkConstraint; + })(spine || (spine = {})); + var spine; + (function(spine) { + var IkConstraintData = (function(_super) { + __extends(IkConstraintData, _super); + function IkConstraintData(name) { + var _this = _super.call(this, name, 0, false) || this; + _this.bones = new Array(); + _this.bendDirection = 1; + _this.compress = false; + _this.stretch = false; + _this.uniform = false; + _this.mix = 1; + _this.softness = 0; + return _this; + } + return IkConstraintData; + })(spine.ConstraintData); + spine.IkConstraintData = IkConstraintData; + })(spine || (spine = {})); + var spine; + (function(spine) { + var PathConstraint = (function() { + function PathConstraint(data, skeleton) { + this.position = 0; + this.spacing = 0; + this.rotateMix = 0; + this.translateMix = 0; + this.spaces = new Array(); + this.positions = new Array(); + this.world = new Array(); + this.curves = new Array(); + this.lengths = new Array(); + this.segments = new Array(); + this.active = false; + if (null == data) throw new Error("data cannot be null."); + if (null == skeleton) throw new Error("skeleton cannot be null."); + this.data = data; + this.bones = new Array(); + for (var i = 0, n = data.bones.length; i < n; i++) this.bones.push(skeleton.findBone(data.bones[i].name)); + this.target = skeleton.findSlot(data.target.name); + this.position = data.position; + this.spacing = data.spacing; + this.rotateMix = data.rotateMix; + this.translateMix = data.translateMix; + } + PathConstraint.prototype.isActive = function() { + return this.active; + }; + PathConstraint.prototype.apply = function() { + this.update(); + }; + PathConstraint.prototype.update = function() { + var attachment = this.target.getAttachment(); + if (!(attachment instanceof spine.PathAttachment)) return; + var rotateMix = this.rotateMix, translateMix = this.translateMix; + var translate = translateMix > 0, rotate = rotateMix > 0; + if (!translate && !rotate) return; + var data = this.data; + var percentSpacing = data.spacingMode == spine.SpacingMode.Percent; + var rotateMode = data.rotateMode; + var tangents = rotateMode == spine.RotateMode.Tangent, scale = rotateMode == spine.RotateMode.ChainScale; + var boneCount = this.bones.length, spacesCount = tangents ? boneCount : boneCount + 1; + var bones = this.bones; + var spaces = spine.Utils.setArraySize(this.spaces, spacesCount), lengths = null; + var spacing = this.spacing; + if (scale || !percentSpacing) { + scale && (lengths = spine.Utils.setArraySize(this.lengths, boneCount)); + var lengthSpacing = data.spacingMode == spine.SpacingMode.Length; + for (var i = 0, n = spacesCount - 1; i < n; ) { + var bone = bones[i]; + var setupLength = bone.data.length; + if (setupLength < PathConstraint.epsilon) { + scale && (lengths[i] = 0); + spaces[++i] = 0; + } else if (percentSpacing) { + if (scale) { + var x = setupLength * bone.a, y = setupLength * bone.c; + var length_1 = Math.sqrt(x * x + y * y); + lengths[i] = length_1; + } + spaces[++i] = spacing; + } else { + var x = setupLength * bone.a, y = setupLength * bone.c; + var length_2 = Math.sqrt(x * x + y * y); + scale && (lengths[i] = length_2); + spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length_2 / setupLength; + } + } + } else for (var i = 1; i < spacesCount; i++) spaces[i] = spacing; + var positions = this.computeWorldPositions(attachment, spacesCount, tangents, data.positionMode == spine.PositionMode.Percent, percentSpacing); + var boneX = positions[0], boneY = positions[1], offsetRotation = data.offsetRotation; + var tip = false; + if (0 == offsetRotation) tip = rotateMode == spine.RotateMode.Chain; else { + tip = false; + var p = this.target.bone; + offsetRotation *= p.a * p.d - p.b * p.c > 0 ? spine.MathUtils.degRad : -spine.MathUtils.degRad; + } + for (var i = 0, p = 3; i < boneCount; i++, p += 3) { + var bone = bones[i]; + bone.worldX += (boneX - bone.worldX) * translateMix; + bone.worldY += (boneY - bone.worldY) * translateMix; + var x = positions[p], y = positions[p + 1], dx = x - boneX, dy = y - boneY; + if (scale) { + var length_3 = lengths[i]; + if (0 != length_3) { + var s = (Math.sqrt(dx * dx + dy * dy) / length_3 - 1) * rotateMix + 1; + bone.a *= s; + bone.c *= s; + } + } + boneX = x; + boneY = y; + if (rotate) { + var a = bone.a, b = bone.b, c = bone.c, d = bone.d, r = 0, cos = 0, sin = 0; + r = tangents ? positions[p - 1] : 0 == spaces[i + 1] ? positions[p + 2] : Math.atan2(dy, dx); + r -= Math.atan2(c, a); + if (tip) { + cos = Math.cos(r); + sin = Math.sin(r); + var length_4 = bone.data.length; + boneX += (length_4 * (cos * a - sin * c) - dx) * rotateMix; + boneY += (length_4 * (sin * a + cos * c) - dy) * rotateMix; + } else r += offsetRotation; + r > spine.MathUtils.PI ? r -= spine.MathUtils.PI2 : r < -spine.MathUtils.PI && (r += spine.MathUtils.PI2); + r *= rotateMix; + cos = Math.cos(r); + sin = Math.sin(r); + bone.a = cos * a - sin * c; + bone.b = cos * b - sin * d; + bone.c = sin * a + cos * c; + bone.d = sin * b + cos * d; + } + bone.appliedValid = false; + } + }; + PathConstraint.prototype.computeWorldPositions = function(path, spacesCount, tangents, percentPosition, percentSpacing) { + var target = this.target; + var position = this.position; + var spaces = this.spaces, out = spine.Utils.setArraySize(this.positions, 3 * spacesCount + 2), world = null; + var closed = path.closed; + var verticesLength = path.worldVerticesLength, curveCount = verticesLength / 6, prevCurve = PathConstraint.NONE; + if (!path.constantSpeed) { + var lengths = path.lengths; + curveCount -= closed ? 1 : 2; + var pathLength_1 = lengths[curveCount]; + percentPosition && (position *= pathLength_1); + if (percentSpacing) for (var i = 1; i < spacesCount; i++) spaces[i] *= pathLength_1; + world = spine.Utils.setArraySize(this.world, 8); + for (var i = 0, o = 0, curve = 0; i < spacesCount; i++, o += 3) { + var space = spaces[i]; + position += space; + var p = position; + if (closed) { + p %= pathLength_1; + p < 0 && (p += pathLength_1); + curve = 0; + } else { + if (p < 0) { + if (prevCurve != PathConstraint.BEFORE) { + prevCurve = PathConstraint.BEFORE; + path.computeWorldVertices(target, 2, 4, world, 0, 2); + } + this.addBeforePosition(p, world, 0, out, o); + continue; + } + if (p > pathLength_1) { + if (prevCurve != PathConstraint.AFTER) { + prevCurve = PathConstraint.AFTER; + path.computeWorldVertices(target, verticesLength - 6, 4, world, 0, 2); + } + this.addAfterPosition(p - pathLength_1, world, 0, out, o); + continue; + } + } + for (;;curve++) { + var length_5 = lengths[curve]; + if (p > length_5) continue; + if (0 == curve) p /= length_5; else { + var prev = lengths[curve - 1]; + p = (p - prev) / (length_5 - prev); + } + break; + } + if (curve != prevCurve) { + prevCurve = curve; + if (closed && curve == curveCount) { + path.computeWorldVertices(target, verticesLength - 4, 4, world, 0, 2); + path.computeWorldVertices(target, 0, 4, world, 4, 2); + } else path.computeWorldVertices(target, 6 * curve + 2, 8, world, 0, 2); + } + this.addCurvePosition(p, world[0], world[1], world[2], world[3], world[4], world[5], world[6], world[7], out, o, tangents || i > 0 && 0 == space); + } + return out; + } + if (closed) { + verticesLength += 2; + world = spine.Utils.setArraySize(this.world, verticesLength); + path.computeWorldVertices(target, 2, verticesLength - 4, world, 0, 2); + path.computeWorldVertices(target, 0, 2, world, verticesLength - 4, 2); + world[verticesLength - 2] = world[0]; + world[verticesLength - 1] = world[1]; + } else { + curveCount--; + verticesLength -= 4; + world = spine.Utils.setArraySize(this.world, verticesLength); + path.computeWorldVertices(target, 2, verticesLength, world, 0, 2); + } + var curves = spine.Utils.setArraySize(this.curves, curveCount); + var pathLength = 0; + var x1 = world[0], y1 = world[1], cx1 = 0, cy1 = 0, cx2 = 0, cy2 = 0, x2 = 0, y2 = 0; + var tmpx = 0, tmpy = 0, dddfx = 0, dddfy = 0, ddfx = 0, ddfy = 0, dfx = 0, dfy = 0; + for (var i = 0, w = 2; i < curveCount; i++, w += 6) { + cx1 = world[w]; + cy1 = world[w + 1]; + cx2 = world[w + 2]; + cy2 = world[w + 3]; + x2 = world[w + 4]; + y2 = world[w + 5]; + tmpx = .1875 * (x1 - 2 * cx1 + cx2); + tmpy = .1875 * (y1 - 2 * cy1 + cy2); + dddfx = .09375 * (3 * (cx1 - cx2) - x1 + x2); + dddfy = .09375 * (3 * (cy1 - cy2) - y1 + y2); + ddfx = 2 * tmpx + dddfx; + ddfy = 2 * tmpy + dddfy; + dfx = .75 * (cx1 - x1) + tmpx + .16666667 * dddfx; + dfy = .75 * (cy1 - y1) + tmpy + .16666667 * dddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx; + dfy += ddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx + dddfx; + dfy += ddfy + dddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + curves[i] = pathLength; + x1 = x2; + y1 = y2; + } + position *= percentPosition ? pathLength : pathLength / path.lengths[curveCount - 1]; + if (percentSpacing) for (var i = 1; i < spacesCount; i++) spaces[i] *= pathLength; + var segments = this.segments; + var curveLength = 0; + for (var i = 0, o = 0, curve = 0, segment = 0; i < spacesCount; i++, o += 3) { + var space = spaces[i]; + position += space; + var p = position; + if (closed) { + p %= pathLength; + p < 0 && (p += pathLength); + curve = 0; + } else { + if (p < 0) { + this.addBeforePosition(p, world, 0, out, o); + continue; + } + if (p > pathLength) { + this.addAfterPosition(p - pathLength, world, verticesLength - 4, out, o); + continue; + } + } + for (;;curve++) { + var length_6 = curves[curve]; + if (p > length_6) continue; + if (0 == curve) p /= length_6; else { + var prev = curves[curve - 1]; + p = (p - prev) / (length_6 - prev); + } + break; + } + if (curve != prevCurve) { + prevCurve = curve; + var ii = 6 * curve; + x1 = world[ii]; + y1 = world[ii + 1]; + cx1 = world[ii + 2]; + cy1 = world[ii + 3]; + cx2 = world[ii + 4]; + cy2 = world[ii + 5]; + x2 = world[ii + 6]; + y2 = world[ii + 7]; + tmpx = .03 * (x1 - 2 * cx1 + cx2); + tmpy = .03 * (y1 - 2 * cy1 + cy2); + dddfx = .006 * (3 * (cx1 - cx2) - x1 + x2); + dddfy = .006 * (3 * (cy1 - cy2) - y1 + y2); + ddfx = 2 * tmpx + dddfx; + ddfy = 2 * tmpy + dddfy; + dfx = .3 * (cx1 - x1) + tmpx + .16666667 * dddfx; + dfy = .3 * (cy1 - y1) + tmpy + .16666667 * dddfy; + curveLength = Math.sqrt(dfx * dfx + dfy * dfy); + segments[0] = curveLength; + for (ii = 1; ii < 8; ii++) { + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[ii] = curveLength; + } + dfx += ddfx; + dfy += ddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[8] = curveLength; + dfx += ddfx + dddfx; + dfy += ddfy + dddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[9] = curveLength; + segment = 0; + } + p *= curveLength; + for (;;segment++) { + var length_7 = segments[segment]; + if (p > length_7) continue; + if (0 == segment) p /= length_7; else { + var prev = segments[segment - 1]; + p = segment + (p - prev) / (length_7 - prev); + } + break; + } + this.addCurvePosition(.1 * p, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents || i > 0 && 0 == space); + } + return out; + }; + PathConstraint.prototype.addBeforePosition = function(p, temp, i, out, o) { + var x1 = temp[i], y1 = temp[i + 1], dx = temp[i + 2] - x1, dy = temp[i + 3] - y1, r = Math.atan2(dy, dx); + out[o] = x1 + p * Math.cos(r); + out[o + 1] = y1 + p * Math.sin(r); + out[o + 2] = r; + }; + PathConstraint.prototype.addAfterPosition = function(p, temp, i, out, o) { + var x1 = temp[i + 2], y1 = temp[i + 3], dx = x1 - temp[i], dy = y1 - temp[i + 1], r = Math.atan2(dy, dx); + out[o] = x1 + p * Math.cos(r); + out[o + 1] = y1 + p * Math.sin(r); + out[o + 2] = r; + }; + PathConstraint.prototype.addCurvePosition = function(p, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents) { + if (0 == p || isNaN(p)) { + out[o] = x1; + out[o + 1] = y1; + out[o + 2] = Math.atan2(cy1 - y1, cx1 - x1); + return; + } + var tt = p * p, ttt = tt * p, u = 1 - p, uu = u * u, uuu = uu * u; + var ut = u * p, ut3 = 3 * ut, uut3 = u * ut3, utt3 = ut3 * p; + var x = x1 * uuu + cx1 * uut3 + cx2 * utt3 + x2 * ttt, y = y1 * uuu + cy1 * uut3 + cy2 * utt3 + y2 * ttt; + out[o] = x; + out[o + 1] = y; + tangents && (out[o + 2] = p < .001 ? Math.atan2(cy1 - y1, cx1 - x1) : Math.atan2(y - (y1 * uu + cy1 * ut * 2 + cy2 * tt), x - (x1 * uu + cx1 * ut * 2 + cx2 * tt))); + }; + PathConstraint.NONE = -1; + PathConstraint.BEFORE = -2; + PathConstraint.AFTER = -3; + PathConstraint.epsilon = 1e-5; + return PathConstraint; + })(); + spine.PathConstraint = PathConstraint; + })(spine || (spine = {})); + var spine; + (function(spine) { + var PathConstraintData = (function(_super) { + __extends(PathConstraintData, _super); + function PathConstraintData(name) { + var _this = _super.call(this, name, 0, false) || this; + _this.bones = new Array(); + return _this; + } + return PathConstraintData; + })(spine.ConstraintData); + spine.PathConstraintData = PathConstraintData; + var PositionMode; + (function(PositionMode) { + PositionMode[PositionMode["Fixed"] = 0] = "Fixed"; + PositionMode[PositionMode["Percent"] = 1] = "Percent"; + })(PositionMode = spine.PositionMode || (spine.PositionMode = {})); + var SpacingMode; + (function(SpacingMode) { + SpacingMode[SpacingMode["Length"] = 0] = "Length"; + SpacingMode[SpacingMode["Fixed"] = 1] = "Fixed"; + SpacingMode[SpacingMode["Percent"] = 2] = "Percent"; + })(SpacingMode = spine.SpacingMode || (spine.SpacingMode = {})); + var RotateMode; + (function(RotateMode) { + RotateMode[RotateMode["Tangent"] = 0] = "Tangent"; + RotateMode[RotateMode["Chain"] = 1] = "Chain"; + RotateMode[RotateMode["ChainScale"] = 2] = "ChainScale"; + })(RotateMode = spine.RotateMode || (spine.RotateMode = {})); + })(spine || (spine = {})); + var spine; + (function(spine) { + var Assets = (function() { + function Assets(clientId) { + this.toLoad = new Array(); + this.assets = {}; + this.clientId = clientId; + } + Assets.prototype.loaded = function() { + var i = 0; + for (var v in this.assets) i++; + return i; + }; + return Assets; + })(); + var SharedAssetManager = (function() { + function SharedAssetManager(pathPrefix) { + void 0 === pathPrefix && (pathPrefix = ""); + this.clientAssets = {}; + this.queuedAssets = {}; + this.rawAssets = {}; + this.errors = {}; + this.pathPrefix = pathPrefix; + } + SharedAssetManager.prototype.queueAsset = function(clientId, textureLoader, path) { + var clientAssets = this.clientAssets[clientId]; + if (null === clientAssets || void 0 === clientAssets) { + clientAssets = new Assets(clientId); + this.clientAssets[clientId] = clientAssets; + } + null !== textureLoader && (clientAssets.textureLoader = textureLoader); + clientAssets.toLoad.push(path); + if (this.queuedAssets[path] === path) return false; + this.queuedAssets[path] = path; + return true; + }; + SharedAssetManager.prototype.loadText = function(clientId, path) { + var _this = this; + path = this.pathPrefix + path; + if (!this.queueAsset(clientId, null, path)) return; + var request = new XMLHttpRequest(); + request.onreadystatechange = function() { + request.readyState == XMLHttpRequest.DONE && (request.status >= 200 && request.status < 300 ? _this.rawAssets[path] = request.responseText : _this.errors[path] = "Couldn't load text " + path + ": status " + request.status + ", " + request.responseText); + }; + request.open("GET", path, true); + request.send(); + }; + SharedAssetManager.prototype.loadJson = function(clientId, path) { + var _this = this; + path = this.pathPrefix + path; + if (!this.queueAsset(clientId, null, path)) return; + var request = new XMLHttpRequest(); + request.onreadystatechange = function() { + request.readyState == XMLHttpRequest.DONE && (request.status >= 200 && request.status < 300 ? _this.rawAssets[path] = JSON.parse(request.responseText) : _this.errors[path] = "Couldn't load text " + path + ": status " + request.status + ", " + request.responseText); + }; + request.open("GET", path, true); + request.send(); + }; + SharedAssetManager.prototype.loadTexture = function(clientId, textureLoader, path) { + var _this = this; + path = this.pathPrefix + path; + if (!this.queueAsset(clientId, textureLoader, path)) return; + var img = new Image(); + img.src = path; + img.crossOrigin = "anonymous"; + img.onload = function(ev) { + _this.rawAssets[path] = img; + }; + img.onerror = function(ev) { + _this.errors[path] = "Couldn't load image " + path; + }; + }; + SharedAssetManager.prototype.get = function(clientId, path) { + path = this.pathPrefix + path; + var clientAssets = this.clientAssets[clientId]; + if (null === clientAssets || void 0 === clientAssets) return true; + return clientAssets.assets[path]; + }; + SharedAssetManager.prototype.updateClientAssets = function(clientAssets) { + for (var i = 0; i < clientAssets.toLoad.length; i++) { + var path = clientAssets.toLoad[i]; + var asset = clientAssets.assets[path]; + if (null === asset || void 0 === asset) { + var rawAsset = this.rawAssets[path]; + if (null === rawAsset || void 0 === rawAsset) continue; + rawAsset instanceof HTMLImageElement ? clientAssets.assets[path] = clientAssets.textureLoader(rawAsset) : clientAssets.assets[path] = rawAsset; + } + } + }; + SharedAssetManager.prototype.isLoadingComplete = function(clientId) { + var clientAssets = this.clientAssets[clientId]; + if (null === clientAssets || void 0 === clientAssets) return true; + this.updateClientAssets(clientAssets); + return clientAssets.toLoad.length == clientAssets.loaded(); + }; + SharedAssetManager.prototype.dispose = function() {}; + SharedAssetManager.prototype.hasErrors = function() { + return Object.keys(this.errors).length > 0; + }; + SharedAssetManager.prototype.getErrors = function() { + return this.errors; + }; + return SharedAssetManager; + })(); + spine.SharedAssetManager = SharedAssetManager; + })(spine || (spine = {})); + var spine; + (function(spine) { + var Skeleton = (function() { + function Skeleton(data) { + this._updateCache = new Array(); + this.updateCacheReset = new Array(); + this.time = 0; + this.scaleX = 1; + this.scaleY = 1; + this.x = 0; + this.y = 0; + if (null == data) throw new Error("data cannot be null."); + this.data = data; + this.bones = new Array(); + for (var i = 0; i < data.bones.length; i++) { + var boneData = data.bones[i]; + var bone = void 0; + if (null == boneData.parent) bone = new spine.Bone(boneData, this, null); else { + var parent_1 = this.bones[boneData.parent.index]; + bone = new spine.Bone(boneData, this, parent_1); + parent_1.children.push(bone); + } + this.bones.push(bone); + } + this.slots = new Array(); + this.drawOrder = new Array(); + for (var i = 0; i < data.slots.length; i++) { + var slotData = data.slots[i]; + var bone = this.bones[slotData.boneData.index]; + var slot = new spine.Slot(slotData, bone); + this.slots.push(slot); + this.drawOrder.push(slot); + } + this.ikConstraints = new Array(); + for (var i = 0; i < data.ikConstraints.length; i++) { + var ikConstraintData = data.ikConstraints[i]; + this.ikConstraints.push(new spine.IkConstraint(ikConstraintData, this)); + } + this.transformConstraints = new Array(); + for (var i = 0; i < data.transformConstraints.length; i++) { + var transformConstraintData = data.transformConstraints[i]; + this.transformConstraints.push(new spine.TransformConstraint(transformConstraintData, this)); + } + this.pathConstraints = new Array(); + for (var i = 0; i < data.pathConstraints.length; i++) { + var pathConstraintData = data.pathConstraints[i]; + this.pathConstraints.push(new spine.PathConstraint(pathConstraintData, this)); + } + this.color = new spine.Color(1, 1, 1, 1); + this.updateCache(); + } + Skeleton.prototype.updateCache = function() { + var updateCache = this._updateCache; + updateCache.length = 0; + this.updateCacheReset.length = 0; + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + bone.sorted = bone.data.skinRequired; + bone.active = !bone.sorted; + } + if (null != this.skin) { + var skinBones = this.skin.bones; + for (var i = 0, n = this.skin.bones.length; i < n; i++) { + var bone = this.bones[skinBones[i].index]; + do { + bone.sorted = false; + bone.active = true; + bone = bone.parent; + } while (null != bone); + } + } + var ikConstraints = this.ikConstraints; + var transformConstraints = this.transformConstraints; + var pathConstraints = this.pathConstraints; + var ikCount = ikConstraints.length, transformCount = transformConstraints.length, pathCount = pathConstraints.length; + var constraintCount = ikCount + transformCount + pathCount; + outer: for (var i = 0; i < constraintCount; i++) { + for (var ii = 0; ii < ikCount; ii++) { + var constraint = ikConstraints[ii]; + if (constraint.data.order == i) { + this.sortIkConstraint(constraint); + continue outer; + } + } + for (var ii = 0; ii < transformCount; ii++) { + var constraint = transformConstraints[ii]; + if (constraint.data.order == i) { + this.sortTransformConstraint(constraint); + continue outer; + } + } + for (var ii = 0; ii < pathCount; ii++) { + var constraint = pathConstraints[ii]; + if (constraint.data.order == i) { + this.sortPathConstraint(constraint); + continue outer; + } + } + } + for (var i = 0, n = bones.length; i < n; i++) this.sortBone(bones[i]); + }; + Skeleton.prototype.sortIkConstraint = function(constraint) { + constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || null != this.skin && spine.Utils.contains(this.skin.constraints, constraint.data, true)); + if (!constraint.active) return; + var target = constraint.target; + this.sortBone(target); + var constrained = constraint.bones; + var parent = constrained[0]; + this.sortBone(parent); + if (constrained.length > 1) { + var child = constrained[constrained.length - 1]; + this._updateCache.indexOf(child) > -1 || this.updateCacheReset.push(child); + } + this._updateCache.push(constraint); + this.sortReset(parent.children); + constrained[constrained.length - 1].sorted = true; + }; + Skeleton.prototype.sortPathConstraint = function(constraint) { + constraint.active = constraint.target.bone.isActive() && (!constraint.data.skinRequired || null != this.skin && spine.Utils.contains(this.skin.constraints, constraint.data, true)); + if (!constraint.active) return; + var slot = constraint.target; + var slotIndex = slot.data.index; + var slotBone = slot.bone; + null != this.skin && this.sortPathConstraintAttachment(this.skin, slotIndex, slotBone); + null != this.data.defaultSkin && this.data.defaultSkin != this.skin && this.sortPathConstraintAttachment(this.data.defaultSkin, slotIndex, slotBone); + for (var i = 0, n = this.data.skins.length; i < n; i++) this.sortPathConstraintAttachment(this.data.skins[i], slotIndex, slotBone); + var attachment = slot.getAttachment(); + attachment instanceof spine.PathAttachment && this.sortPathConstraintAttachmentWith(attachment, slotBone); + var constrained = constraint.bones; + var boneCount = constrained.length; + for (var i = 0; i < boneCount; i++) this.sortBone(constrained[i]); + this._updateCache.push(constraint); + for (var i = 0; i < boneCount; i++) this.sortReset(constrained[i].children); + for (var i = 0; i < boneCount; i++) constrained[i].sorted = true; + }; + Skeleton.prototype.sortTransformConstraint = function(constraint) { + constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || null != this.skin && spine.Utils.contains(this.skin.constraints, constraint.data, true)); + if (!constraint.active) return; + this.sortBone(constraint.target); + var constrained = constraint.bones; + var boneCount = constrained.length; + if (constraint.data.local) for (var i = 0; i < boneCount; i++) { + var child = constrained[i]; + this.sortBone(child.parent); + this._updateCache.indexOf(child) > -1 || this.updateCacheReset.push(child); + } else for (var i = 0; i < boneCount; i++) this.sortBone(constrained[i]); + this._updateCache.push(constraint); + for (var ii = 0; ii < boneCount; ii++) this.sortReset(constrained[ii].children); + for (var ii = 0; ii < boneCount; ii++) constrained[ii].sorted = true; + }; + Skeleton.prototype.sortPathConstraintAttachment = function(skin, slotIndex, slotBone) { + var attachments = skin.attachments[slotIndex]; + if (!attachments) return; + for (var key in attachments) this.sortPathConstraintAttachmentWith(attachments[key], slotBone); + }; + Skeleton.prototype.sortPathConstraintAttachmentWith = function(attachment, slotBone) { + if (!(attachment instanceof spine.PathAttachment)) return; + var pathBones = attachment.bones; + if (null == pathBones) this.sortBone(slotBone); else { + var bones = this.bones; + var i = 0; + while (i < pathBones.length) { + var boneCount = pathBones[i++]; + for (var n = i + boneCount; i < n; i++) { + var boneIndex = pathBones[i]; + this.sortBone(bones[boneIndex]); + } + } + } + }; + Skeleton.prototype.sortBone = function(bone) { + if (bone.sorted) return; + var parent = bone.parent; + null != parent && this.sortBone(parent); + bone.sorted = true; + this._updateCache.push(bone); + }; + Skeleton.prototype.sortReset = function(bones) { + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (!bone.active) continue; + bone.sorted && this.sortReset(bone.children); + bone.sorted = false; + } + }; + Skeleton.prototype.updateWorldTransform = function() { + var updateCacheReset = this.updateCacheReset; + for (var i = 0, n = updateCacheReset.length; i < n; i++) { + var bone = updateCacheReset[i]; + bone.ax = bone.x; + bone.ay = bone.y; + bone.arotation = bone.rotation; + bone.ascaleX = bone.scaleX; + bone.ascaleY = bone.scaleY; + bone.ashearX = bone.shearX; + bone.ashearY = bone.shearY; + bone.appliedValid = true; + } + var updateCache = this._updateCache; + for (var i = 0, n = updateCache.length; i < n; i++) updateCache[i].update(); + }; + Skeleton.prototype.setToSetupPose = function() { + this.setBonesToSetupPose(); + this.setSlotsToSetupPose(); + }; + Skeleton.prototype.setBonesToSetupPose = function() { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) bones[i].setToSetupPose(); + var ikConstraints = this.ikConstraints; + for (var i = 0, n = ikConstraints.length; i < n; i++) { + var constraint = ikConstraints[i]; + constraint.mix = constraint.data.mix; + constraint.softness = constraint.data.softness; + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + } + var transformConstraints = this.transformConstraints; + for (var i = 0, n = transformConstraints.length; i < n; i++) { + var constraint = transformConstraints[i]; + var data = constraint.data; + constraint.rotateMix = data.rotateMix; + constraint.translateMix = data.translateMix; + constraint.scaleMix = data.scaleMix; + constraint.shearMix = data.shearMix; + } + var pathConstraints = this.pathConstraints; + for (var i = 0, n = pathConstraints.length; i < n; i++) { + var constraint = pathConstraints[i]; + var data = constraint.data; + constraint.position = data.position; + constraint.spacing = data.spacing; + constraint.rotateMix = data.rotateMix; + constraint.translateMix = data.translateMix; + } + }; + Skeleton.prototype.setSlotsToSetupPose = function() { + var slots = this.slots; + spine.Utils.arrayCopy(slots, 0, this.drawOrder, 0, slots.length); + for (var i = 0, n = slots.length; i < n; i++) slots[i].setToSetupPose(); + }; + Skeleton.prototype.getRootBone = function() { + if (0 == this.bones.length) return null; + return this.bones[0]; + }; + Skeleton.prototype.findBone = function(boneName) { + if (null == boneName) throw new Error("boneName cannot be null."); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (bone.data.name == boneName) return bone; + } + return null; + }; + Skeleton.prototype.findBoneIndex = function(boneName) { + if (null == boneName) throw new Error("boneName cannot be null."); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) if (bones[i].data.name == boneName) return i; + return -1; + }; + Skeleton.prototype.findSlot = function(slotName) { + if (null == slotName) throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + if (slot.data.name == slotName) return slot; + } + return null; + }; + Skeleton.prototype.findSlotIndex = function(slotName) { + if (null == slotName) throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) if (slots[i].data.name == slotName) return i; + return -1; + }; + Skeleton.prototype.setSkinByName = function(skinName) { + var skin = this.data.findSkin(skinName); + if (null == skin) throw new Error("Skin not found: " + skinName); + this.setSkin(skin); + }; + Skeleton.prototype.setSkin = function(newSkin) { + if (newSkin == this.skin) return; + if (null != newSkin) if (null != this.skin) newSkin.attachAll(this, this.skin); else { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + var name_1 = slot.data.attachmentName; + if (null != name_1) { + var attachment = newSkin.getAttachment(i, name_1); + null != attachment && slot.setAttachment(attachment); + } + } + } + this.skin = newSkin; + this.updateCache(); + }; + Skeleton.prototype.getAttachmentByName = function(slotName, attachmentName) { + return this.getAttachment(this.data.findSlotIndex(slotName), attachmentName); + }; + Skeleton.prototype.getAttachment = function(slotIndex, attachmentName) { + if (null == attachmentName) throw new Error("attachmentName cannot be null."); + if (null != this.skin) { + var attachment = this.skin.getAttachment(slotIndex, attachmentName); + if (null != attachment) return attachment; + } + if (null != this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName); + return null; + }; + Skeleton.prototype.setAttachment = function(slotName, attachmentName) { + if (null == slotName) throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + if (slot.data.name == slotName) { + var attachment = null; + if (null != attachmentName) { + attachment = this.getAttachment(i, attachmentName); + if (null == attachment) throw new Error("Attachment not found: " + attachmentName + ", for slot: " + slotName); + } + slot.setAttachment(attachment); + return; + } + } + throw new Error("Slot not found: " + slotName); + }; + Skeleton.prototype.findIkConstraint = function(constraintName) { + if (null == constraintName) throw new Error("constraintName cannot be null."); + var ikConstraints = this.ikConstraints; + for (var i = 0, n = ikConstraints.length; i < n; i++) { + var ikConstraint = ikConstraints[i]; + if (ikConstraint.data.name == constraintName) return ikConstraint; + } + return null; + }; + Skeleton.prototype.findTransformConstraint = function(constraintName) { + if (null == constraintName) throw new Error("constraintName cannot be null."); + var transformConstraints = this.transformConstraints; + for (var i = 0, n = transformConstraints.length; i < n; i++) { + var constraint = transformConstraints[i]; + if (constraint.data.name == constraintName) return constraint; + } + return null; + }; + Skeleton.prototype.findPathConstraint = function(constraintName) { + if (null == constraintName) throw new Error("constraintName cannot be null."); + var pathConstraints = this.pathConstraints; + for (var i = 0, n = pathConstraints.length; i < n; i++) { + var constraint = pathConstraints[i]; + if (constraint.data.name == constraintName) return constraint; + } + return null; + }; + Skeleton.prototype.getBounds = function(offset, size, temp) { + void 0 === temp && (temp = new Array(2)); + if (null == offset) throw new Error("offset cannot be null."); + if (null == size) throw new Error("size cannot be null."); + var drawOrder = this.drawOrder; + var minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY; + for (var i = 0, n = drawOrder.length; i < n; i++) { + var slot = drawOrder[i]; + if (!slot.bone.active) continue; + var verticesLength = 0; + var vertices = null; + var attachment = slot.getAttachment(); + if (attachment instanceof spine.RegionAttachment) { + verticesLength = 8; + vertices = spine.Utils.setArraySize(temp, verticesLength, 0); + attachment.computeWorldVertices(slot.bone, vertices, 0, 2); + } else if (attachment instanceof spine.MeshAttachment) { + var mesh = attachment; + verticesLength = mesh.worldVerticesLength; + vertices = spine.Utils.setArraySize(temp, verticesLength, 0); + mesh.computeWorldVertices(slot, 0, verticesLength, vertices, 0, 2); + } + if (null != vertices) for (var ii = 0, nn = vertices.length; ii < nn; ii += 2) { + var x = vertices[ii], y = vertices[ii + 1]; + minX = Math.min(minX, x); + minY = Math.min(minY, y); + maxX = Math.max(maxX, x); + maxY = Math.max(maxY, y); + } + } + offset.set(minX, minY); + size.set(maxX - minX, maxY - minY); + }; + Skeleton.prototype.update = function(delta) { + this.time += delta; + }; + return Skeleton; + })(); + spine.Skeleton = Skeleton; + })(spine || (spine = {})); + var spine; + (function(spine) { + var SkeletonBinary = (function() { + function SkeletonBinary(attachmentLoader) { + this.scale = 1; + this.linkedMeshes = new Array(); + this.attachmentLoader = attachmentLoader; + } + SkeletonBinary.prototype.readSkeletonData = function(binary) { + var scale = this.scale; + var skeletonData = new spine.SkeletonData(); + skeletonData.name = ""; + var input = new BinaryInput(binary); + skeletonData.hash = input.readString(); + skeletonData.version = input.readString(); + skeletonData.x = input.readFloat(); + skeletonData.y = input.readFloat(); + skeletonData.width = input.readFloat(); + skeletonData.height = input.readFloat(); + var nonessential = input.readBoolean(); + if (nonessential) { + skeletonData.fps = input.readFloat(); + skeletonData.imagesPath = input.readString(); + skeletonData.audioPath = input.readString(); + } + var n = 0; + n = input.readInt(true); + for (var i = 0; i < n; i++) input.strings.push(input.readString()); + n = input.readInt(true); + for (var i = 0; i < n; i++) { + var name_2 = input.readString(); + var parent_2 = 0 == i ? null : skeletonData.bones[input.readInt(true)]; + var data = new spine.BoneData(i, name_2, parent_2); + data.rotation = input.readFloat(); + data.x = input.readFloat() * scale; + data.y = input.readFloat() * scale; + data.scaleX = input.readFloat(); + data.scaleY = input.readFloat(); + data.shearX = input.readFloat(); + data.shearY = input.readFloat(); + data.length = input.readFloat() * scale; + data.transformMode = SkeletonBinary.TransformModeValues[input.readInt(true)]; + data.skinRequired = input.readBoolean(); + nonessential && spine.Color.rgba8888ToColor(data.color, input.readInt32()); + skeletonData.bones.push(data); + } + n = input.readInt(true); + for (var i = 0; i < n; i++) { + var slotName = input.readString(); + var boneData = skeletonData.bones[input.readInt(true)]; + var data = new spine.SlotData(i, slotName, boneData); + spine.Color.rgba8888ToColor(data.color, input.readInt32()); + var darkColor = input.readInt32(); + -1 != darkColor && spine.Color.rgb888ToColor(data.darkColor = new spine.Color(), darkColor); + data.attachmentName = input.readStringRef(); + data.blendMode = SkeletonBinary.BlendModeValues[input.readInt(true)]; + skeletonData.slots.push(data); + } + n = input.readInt(true); + for (var i = 0, nn = void 0; i < n; i++) { + var data = new spine.IkConstraintData(input.readString()); + data.order = input.readInt(true); + data.skinRequired = input.readBoolean(); + nn = input.readInt(true); + for (var ii = 0; ii < nn; ii++) data.bones.push(skeletonData.bones[input.readInt(true)]); + data.target = skeletonData.bones[input.readInt(true)]; + data.mix = input.readFloat(); + data.softness = input.readFloat() * scale; + data.bendDirection = input.readByte(); + data.compress = input.readBoolean(); + data.stretch = input.readBoolean(); + data.uniform = input.readBoolean(); + skeletonData.ikConstraints.push(data); + } + n = input.readInt(true); + for (var i = 0, nn = void 0; i < n; i++) { + var data = new spine.TransformConstraintData(input.readString()); + data.order = input.readInt(true); + data.skinRequired = input.readBoolean(); + nn = input.readInt(true); + for (var ii = 0; ii < nn; ii++) data.bones.push(skeletonData.bones[input.readInt(true)]); + data.target = skeletonData.bones[input.readInt(true)]; + data.local = input.readBoolean(); + data.relative = input.readBoolean(); + data.offsetRotation = input.readFloat(); + data.offsetX = input.readFloat() * scale; + data.offsetY = input.readFloat() * scale; + data.offsetScaleX = input.readFloat(); + data.offsetScaleY = input.readFloat(); + data.offsetShearY = input.readFloat(); + data.rotateMix = input.readFloat(); + data.translateMix = input.readFloat(); + data.scaleMix = input.readFloat(); + data.shearMix = input.readFloat(); + skeletonData.transformConstraints.push(data); + } + n = input.readInt(true); + for (var i = 0, nn = void 0; i < n; i++) { + var data = new spine.PathConstraintData(input.readString()); + data.order = input.readInt(true); + data.skinRequired = input.readBoolean(); + nn = input.readInt(true); + for (var ii = 0; ii < nn; ii++) data.bones.push(skeletonData.bones[input.readInt(true)]); + data.target = skeletonData.slots[input.readInt(true)]; + data.positionMode = SkeletonBinary.PositionModeValues[input.readInt(true)]; + data.spacingMode = SkeletonBinary.SpacingModeValues[input.readInt(true)]; + data.rotateMode = SkeletonBinary.RotateModeValues[input.readInt(true)]; + data.offsetRotation = input.readFloat(); + data.position = input.readFloat(); + data.positionMode == spine.PositionMode.Fixed && (data.position *= scale); + data.spacing = input.readFloat(); + data.spacingMode != spine.SpacingMode.Length && data.spacingMode != spine.SpacingMode.Fixed || (data.spacing *= scale); + data.rotateMix = input.readFloat(); + data.translateMix = input.readFloat(); + skeletonData.pathConstraints.push(data); + } + var defaultSkin = this.readSkin(input, skeletonData, true, nonessential); + if (null != defaultSkin) { + skeletonData.defaultSkin = defaultSkin; + skeletonData.skins.push(defaultSkin); + } + var i = skeletonData.skins.length; + spine.Utils.setArraySize(skeletonData.skins, n = i + input.readInt(true)); + for (;i < n; i++) skeletonData.skins[i] = this.readSkin(input, skeletonData, false, nonessential); + n = this.linkedMeshes.length; + for (var i = 0; i < n; i++) { + var linkedMesh = this.linkedMeshes[i]; + var skin = null == linkedMesh.skin ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin); + if (null == skin) throw new Error("Skin not found: " + linkedMesh.skin); + var parent_3 = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent); + if (null == parent_3) throw new Error("Parent mesh not found: " + linkedMesh.parent); + linkedMesh.mesh.deformAttachment = linkedMesh.inheritDeform ? parent_3 : linkedMesh.mesh; + linkedMesh.mesh.setParentMesh(parent_3); + linkedMesh.mesh.updateUVs(); + } + this.linkedMeshes.length = 0; + n = input.readInt(true); + for (var i = 0; i < n; i++) { + var data = new spine.EventData(input.readStringRef()); + data.intValue = input.readInt(false); + data.floatValue = input.readFloat(); + data.stringValue = input.readString(); + data.audioPath = input.readString(); + if (null != data.audioPath) { + data.volume = input.readFloat(); + data.balance = input.readFloat(); + } + skeletonData.events.push(data); + } + n = input.readInt(true); + for (var i = 0; i < n; i++) skeletonData.animations.push(this.readAnimation(input, input.readString(), skeletonData)); + return skeletonData; + }; + SkeletonBinary.prototype.readSkin = function(input, skeletonData, defaultSkin, nonessential) { + var skin = null; + var slotCount = 0; + if (defaultSkin) { + slotCount = input.readInt(true); + if (0 == slotCount) return null; + skin = new spine.Skin("default"); + } else { + skin = new spine.Skin(input.readStringRef()); + skin.bones.length = input.readInt(true); + for (var i = 0, n = skin.bones.length; i < n; i++) skin.bones[i] = skeletonData.bones[input.readInt(true)]; + for (var i = 0, n = input.readInt(true); i < n; i++) skin.constraints.push(skeletonData.ikConstraints[input.readInt(true)]); + for (var i = 0, n = input.readInt(true); i < n; i++) skin.constraints.push(skeletonData.transformConstraints[input.readInt(true)]); + for (var i = 0, n = input.readInt(true); i < n; i++) skin.constraints.push(skeletonData.pathConstraints[input.readInt(true)]); + slotCount = input.readInt(true); + } + for (var i = 0; i < slotCount; i++) { + var slotIndex = input.readInt(true); + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var name_3 = input.readStringRef(); + var attachment = this.readAttachment(input, skeletonData, skin, slotIndex, name_3, nonessential); + null != attachment && skin.setAttachment(slotIndex, name_3, attachment); + } + } + return skin; + }; + SkeletonBinary.prototype.readAttachment = function(input, skeletonData, skin, slotIndex, attachmentName, nonessential) { + var scale = this.scale; + var name = input.readStringRef(); + null == name && (name = attachmentName); + var typeIndex = input.readByte(); + var type = SkeletonBinary.AttachmentTypeValues[typeIndex]; + switch (type) { + case spine.AttachmentType.Region: + var path = input.readStringRef(); + var rotation = input.readFloat(); + var x = input.readFloat(); + var y = input.readFloat(); + var scaleX = input.readFloat(); + var scaleY = input.readFloat(); + var width = input.readFloat(); + var height = input.readFloat(); + var color = input.readInt32(); + null == path && (path = name); + var region = this.attachmentLoader.newRegionAttachment(skin, name, path); + if (null == region) return null; + region.path = path; + region.x = x * scale; + region.y = y * scale; + region.scaleX = scaleX; + region.scaleY = scaleY; + region.rotation = rotation; + region.width = width * scale; + region.height = height * scale; + spine.Color.rgba8888ToColor(region.color, color); + region.updateOffset(); + return region; + + case spine.AttachmentType.BoundingBox: + var vertexCount = input.readInt(true); + var vertices = this.readVertices(input, vertexCount); + var color = nonessential ? input.readInt32() : 0; + var box = this.attachmentLoader.newBoundingBoxAttachment(skin, name); + if (null == box) return null; + box.worldVerticesLength = vertexCount << 1; + box.vertices = vertices.vertices; + box.bones = vertices.bones; + nonessential && spine.Color.rgba8888ToColor(box.color, color); + return box; + + case spine.AttachmentType.Mesh: + var path = input.readStringRef(); + var color = input.readInt32(); + var vertexCount = input.readInt(true); + var uvs = this.readFloatArray(input, vertexCount << 1, 1); + var triangles = this.readShortArray(input); + var vertices = this.readVertices(input, vertexCount); + var hullLength = input.readInt(true); + var edges = null; + var width = 0, height = 0; + if (nonessential) { + edges = this.readShortArray(input); + width = input.readFloat(); + height = input.readFloat(); + } + null == path && (path = name); + var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path); + if (null == mesh) return null; + mesh.path = path; + spine.Color.rgba8888ToColor(mesh.color, color); + mesh.bones = vertices.bones; + mesh.vertices = vertices.vertices; + mesh.worldVerticesLength = vertexCount << 1; + mesh.triangles = triangles; + mesh.regionUVs = uvs; + mesh.updateUVs(); + mesh.hullLength = hullLength << 1; + if (nonessential) { + mesh.edges = edges; + mesh.width = width * scale; + mesh.height = height * scale; + } + return mesh; + + case spine.AttachmentType.LinkedMesh: + var path = input.readStringRef(); + var color = input.readInt32(); + var skinName = input.readStringRef(); + var parent_4 = input.readStringRef(); + var inheritDeform = input.readBoolean(); + var width = 0, height = 0; + if (nonessential) { + width = input.readFloat(); + height = input.readFloat(); + } + null == path && (path = name); + var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path); + if (null == mesh) return null; + mesh.path = path; + spine.Color.rgba8888ToColor(mesh.color, color); + if (nonessential) { + mesh.width = width * scale; + mesh.height = height * scale; + } + this.linkedMeshes.push(new LinkedMesh(mesh, skinName, slotIndex, parent_4, inheritDeform)); + return mesh; + + case spine.AttachmentType.Path: + var closed_1 = input.readBoolean(); + var constantSpeed = input.readBoolean(); + var vertexCount = input.readInt(true); + var vertices = this.readVertices(input, vertexCount); + var lengths = spine.Utils.newArray(vertexCount / 3, 0); + for (var i = 0, n = lengths.length; i < n; i++) lengths[i] = input.readFloat() * scale; + var color = nonessential ? input.readInt32() : 0; + var path = this.attachmentLoader.newPathAttachment(skin, name); + if (null == path) return null; + path.closed = closed_1; + path.constantSpeed = constantSpeed; + path.worldVerticesLength = vertexCount << 1; + path.vertices = vertices.vertices; + path.bones = vertices.bones; + path.lengths = lengths; + nonessential && spine.Color.rgba8888ToColor(path.color, color); + return path; + + case spine.AttachmentType.Point: + var rotation = input.readFloat(); + var x = input.readFloat(); + var y = input.readFloat(); + var color = nonessential ? input.readInt32() : 0; + var point = this.attachmentLoader.newPointAttachment(skin, name); + if (null == point) return null; + point.x = x * scale; + point.y = y * scale; + point.rotation = rotation; + nonessential && spine.Color.rgba8888ToColor(point.color, color); + return point; + + case spine.AttachmentType.Clipping: + var endSlotIndex = input.readInt(true); + var vertexCount = input.readInt(true); + var vertices = this.readVertices(input, vertexCount); + var color = nonessential ? input.readInt32() : 0; + var clip = this.attachmentLoader.newClippingAttachment(skin, name); + if (null == clip) return null; + clip.endSlot = skeletonData.slots[endSlotIndex]; + clip.worldVerticesLength = vertexCount << 1; + clip.vertices = vertices.vertices; + clip.bones = vertices.bones; + nonessential && spine.Color.rgba8888ToColor(clip.color, color); + return clip; + } + return null; + }; + SkeletonBinary.prototype.readVertices = function(input, vertexCount) { + var verticesLength = vertexCount << 1; + var vertices = new Vertices(); + var scale = this.scale; + if (!input.readBoolean()) { + vertices.vertices = this.readFloatArray(input, verticesLength, scale); + return vertices; + } + var weights = new Array(); + var bonesArray = new Array(); + for (var i = 0; i < vertexCount; i++) { + var boneCount = input.readInt(true); + bonesArray.push(boneCount); + for (var ii = 0; ii < boneCount; ii++) { + bonesArray.push(input.readInt(true)); + weights.push(input.readFloat() * scale); + weights.push(input.readFloat() * scale); + weights.push(input.readFloat()); + } + } + vertices.vertices = spine.Utils.toFloatArray(weights); + vertices.bones = bonesArray; + return vertices; + }; + SkeletonBinary.prototype.readFloatArray = function(input, n, scale) { + var array = new Array(n); + if (1 == scale) for (var i = 0; i < n; i++) array[i] = input.readFloat(); else for (var i = 0; i < n; i++) array[i] = input.readFloat() * scale; + return array; + }; + SkeletonBinary.prototype.readShortArray = function(input) { + var n = input.readInt(true); + var array = new Array(n); + for (var i = 0; i < n; i++) array[i] = input.readShort(); + return array; + }; + SkeletonBinary.prototype.readAnimation = function(input, name, skeletonData) { + var timelines = new Array(); + var scale = this.scale; + var duration = 0; + var tempColor1 = new spine.Color(); + var tempColor2 = new spine.Color(); + for (var i = 0, n = input.readInt(true); i < n; i++) { + var slotIndex = input.readInt(true); + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var timelineType = input.readByte(); + var frameCount = input.readInt(true); + switch (timelineType) { + case SkeletonBinary.SLOT_ATTACHMENT: + var timeline = new spine.AttachmentTimeline(frameCount); + timeline.slotIndex = slotIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) timeline.setFrame(frameIndex, input.readFloat(), input.readStringRef()); + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[frameCount - 1]); + break; + + case SkeletonBinary.SLOT_COLOR: + var timeline = new spine.ColorTimeline(frameCount); + timeline.slotIndex = slotIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + var time = input.readFloat(); + spine.Color.rgba8888ToColor(tempColor1, input.readInt32()); + timeline.setFrame(frameIndex, time, tempColor1.r, tempColor1.g, tempColor1.b, tempColor1.a); + frameIndex < frameCount - 1 && this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.ColorTimeline.ENTRIES]); + break; + + case SkeletonBinary.SLOT_TWO_COLOR: + var timeline = new spine.TwoColorTimeline(frameCount); + timeline.slotIndex = slotIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + var time = input.readFloat(); + spine.Color.rgba8888ToColor(tempColor1, input.readInt32()); + spine.Color.rgb888ToColor(tempColor2, input.readInt32()); + timeline.setFrame(frameIndex, time, tempColor1.r, tempColor1.g, tempColor1.b, tempColor1.a, tempColor2.r, tempColor2.g, tempColor2.b); + frameIndex < frameCount - 1 && this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.TwoColorTimeline.ENTRIES]); + } + } + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var boneIndex = input.readInt(true); + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var timelineType = input.readByte(); + var frameCount = input.readInt(true); + switch (timelineType) { + case SkeletonBinary.BONE_ROTATE: + var timeline = new spine.RotateTimeline(frameCount); + timeline.boneIndex = boneIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat()); + frameIndex < frameCount - 1 && this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.RotateTimeline.ENTRIES]); + break; + + case SkeletonBinary.BONE_TRANSLATE: + case SkeletonBinary.BONE_SCALE: + case SkeletonBinary.BONE_SHEAR: + var timeline = void 0; + var timelineScale = 1; + if (timelineType == SkeletonBinary.BONE_SCALE) timeline = new spine.ScaleTimeline(frameCount); else if (timelineType == SkeletonBinary.BONE_SHEAR) timeline = new spine.ShearTimeline(frameCount); else { + timeline = new spine.TranslateTimeline(frameCount); + timelineScale = scale; + } + timeline.boneIndex = boneIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat() * timelineScale, input.readFloat() * timelineScale); + frameIndex < frameCount - 1 && this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.TranslateTimeline.ENTRIES]); + } + } + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var index = input.readInt(true); + var frameCount = input.readInt(true); + var timeline = new spine.IkConstraintTimeline(frameCount); + timeline.ikConstraintIndex = index; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat() * scale, input.readByte(), input.readBoolean(), input.readBoolean()); + frameIndex < frameCount - 1 && this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.IkConstraintTimeline.ENTRIES]); + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var index = input.readInt(true); + var frameCount = input.readInt(true); + var timeline = new spine.TransformConstraintTimeline(frameCount); + timeline.transformConstraintIndex = index; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat(), input.readFloat(), input.readFloat()); + frameIndex < frameCount - 1 && this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.TransformConstraintTimeline.ENTRIES]); + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var index = input.readInt(true); + var data = skeletonData.pathConstraints[index]; + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var timelineType = input.readByte(); + var frameCount = input.readInt(true); + switch (timelineType) { + case SkeletonBinary.PATH_POSITION: + case SkeletonBinary.PATH_SPACING: + var timeline = void 0; + var timelineScale = 1; + if (timelineType == SkeletonBinary.PATH_SPACING) { + timeline = new spine.PathConstraintSpacingTimeline(frameCount); + data.spacingMode != spine.SpacingMode.Length && data.spacingMode != spine.SpacingMode.Fixed || (timelineScale = scale); + } else { + timeline = new spine.PathConstraintPositionTimeline(frameCount); + data.positionMode == spine.PositionMode.Fixed && (timelineScale = scale); + } + timeline.pathConstraintIndex = index; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat() * timelineScale); + frameIndex < frameCount - 1 && this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.PathConstraintPositionTimeline.ENTRIES]); + break; + + case SkeletonBinary.PATH_MIX: + var timeline = new spine.PathConstraintMixTimeline(frameCount); + timeline.pathConstraintIndex = index; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat()); + frameIndex < frameCount - 1 && this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.PathConstraintMixTimeline.ENTRIES]); + } + } + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var skin = skeletonData.skins[input.readInt(true)]; + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var slotIndex = input.readInt(true); + for (var iii = 0, nnn = input.readInt(true); iii < nnn; iii++) { + var attachment = skin.getAttachment(slotIndex, input.readStringRef()); + var weighted = null != attachment.bones; + var vertices = attachment.vertices; + var deformLength = weighted ? vertices.length / 3 * 2 : vertices.length; + var frameCount = input.readInt(true); + var timeline = new spine.DeformTimeline(frameCount); + timeline.slotIndex = slotIndex; + timeline.attachment = attachment; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + var time = input.readFloat(); + var deform = void 0; + var end = input.readInt(true); + if (0 == end) deform = weighted ? spine.Utils.newFloatArray(deformLength) : vertices; else { + deform = spine.Utils.newFloatArray(deformLength); + var start = input.readInt(true); + end += start; + if (1 == scale) for (var v = start; v < end; v++) deform[v] = input.readFloat(); else for (var v = start; v < end; v++) deform[v] = input.readFloat() * scale; + if (!weighted) for (var v = 0, vn = deform.length; v < vn; v++) deform[v] += vertices[v]; + } + timeline.setFrame(frameIndex, time, deform); + frameIndex < frameCount - 1 && this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[frameCount - 1]); + } + } + } + var drawOrderCount = input.readInt(true); + if (drawOrderCount > 0) { + var timeline = new spine.DrawOrderTimeline(drawOrderCount); + var slotCount = skeletonData.slots.length; + for (var i = 0; i < drawOrderCount; i++) { + var time = input.readFloat(); + var offsetCount = input.readInt(true); + var drawOrder = spine.Utils.newArray(slotCount, 0); + for (var ii = slotCount - 1; ii >= 0; ii--) drawOrder[ii] = -1; + var unchanged = spine.Utils.newArray(slotCount - offsetCount, 0); + var originalIndex = 0, unchangedIndex = 0; + for (var ii = 0; ii < offsetCount; ii++) { + var slotIndex = input.readInt(true); + while (originalIndex != slotIndex) unchanged[unchangedIndex++] = originalIndex++; + drawOrder[originalIndex + input.readInt(true)] = originalIndex++; + } + while (originalIndex < slotCount) unchanged[unchangedIndex++] = originalIndex++; + for (var ii = slotCount - 1; ii >= 0; ii--) -1 == drawOrder[ii] && (drawOrder[ii] = unchanged[--unchangedIndex]); + timeline.setFrame(i, time, drawOrder); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[drawOrderCount - 1]); + } + var eventCount = input.readInt(true); + if (eventCount > 0) { + var timeline = new spine.EventTimeline(eventCount); + for (var i = 0; i < eventCount; i++) { + var time = input.readFloat(); + var eventData = skeletonData.events[input.readInt(true)]; + var event_4 = new spine.Event(time, eventData); + event_4.intValue = input.readInt(false); + event_4.floatValue = input.readFloat(); + event_4.stringValue = input.readBoolean() ? input.readString() : eventData.stringValue; + if (null != event_4.data.audioPath) { + event_4.volume = input.readFloat(); + event_4.balance = input.readFloat(); + } + timeline.setFrame(i, event_4); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[eventCount - 1]); + } + return new spine.Animation(name, timelines, duration); + }; + SkeletonBinary.prototype.readCurve = function(input, frameIndex, timeline) { + switch (input.readByte()) { + case SkeletonBinary.CURVE_STEPPED: + timeline.setStepped(frameIndex); + break; + + case SkeletonBinary.CURVE_BEZIER: + this.setCurve(timeline, frameIndex, input.readFloat(), input.readFloat(), input.readFloat(), input.readFloat()); + } + }; + SkeletonBinary.prototype.setCurve = function(timeline, frameIndex, cx1, cy1, cx2, cy2) { + timeline.setCurve(frameIndex, cx1, cy1, cx2, cy2); + }; + SkeletonBinary.AttachmentTypeValues = [ 0, 1, 2, 3, 4, 5, 6 ]; + SkeletonBinary.TransformModeValues = [ spine.TransformMode.Normal, spine.TransformMode.OnlyTranslation, spine.TransformMode.NoRotationOrReflection, spine.TransformMode.NoScale, spine.TransformMode.NoScaleOrReflection ]; + SkeletonBinary.PositionModeValues = [ spine.PositionMode.Fixed, spine.PositionMode.Percent ]; + SkeletonBinary.SpacingModeValues = [ spine.SpacingMode.Length, spine.SpacingMode.Fixed, spine.SpacingMode.Percent ]; + SkeletonBinary.RotateModeValues = [ spine.RotateMode.Tangent, spine.RotateMode.Chain, spine.RotateMode.ChainScale ]; + SkeletonBinary.BlendModeValues = [ spine.BlendMode.Normal, spine.BlendMode.Additive, spine.BlendMode.Multiply, spine.BlendMode.Screen ]; + SkeletonBinary.BONE_ROTATE = 0; + SkeletonBinary.BONE_TRANSLATE = 1; + SkeletonBinary.BONE_SCALE = 2; + SkeletonBinary.BONE_SHEAR = 3; + SkeletonBinary.SLOT_ATTACHMENT = 0; + SkeletonBinary.SLOT_COLOR = 1; + SkeletonBinary.SLOT_TWO_COLOR = 2; + SkeletonBinary.PATH_POSITION = 0; + SkeletonBinary.PATH_SPACING = 1; + SkeletonBinary.PATH_MIX = 2; + SkeletonBinary.CURVE_LINEAR = 0; + SkeletonBinary.CURVE_STEPPED = 1; + SkeletonBinary.CURVE_BEZIER = 2; + return SkeletonBinary; + })(); + spine.SkeletonBinary = SkeletonBinary; + var BinaryInput = (function() { + function BinaryInput(data, strings, index, buffer) { + void 0 === strings && (strings = new Array()); + void 0 === index && (index = 0); + void 0 === buffer && (buffer = new DataView(data.buffer)); + this.strings = strings; + this.index = index; + this.buffer = buffer; + } + BinaryInput.prototype.readByte = function() { + return this.buffer.getInt8(this.index++); + }; + BinaryInput.prototype.readShort = function() { + var value = this.buffer.getInt16(this.index); + this.index += 2; + return value; + }; + BinaryInput.prototype.readInt32 = function() { + var value = this.buffer.getInt32(this.index); + this.index += 4; + return value; + }; + BinaryInput.prototype.readInt = function(optimizePositive) { + var b = this.readByte(); + var result = 127 & b; + if (0 != (128 & b)) { + b = this.readByte(); + result |= (127 & b) << 7; + if (0 != (128 & b)) { + b = this.readByte(); + result |= (127 & b) << 14; + if (0 != (128 & b)) { + b = this.readByte(); + result |= (127 & b) << 21; + if (0 != (128 & b)) { + b = this.readByte(); + result |= (127 & b) << 28; + } + } + } + } + return optimizePositive ? result : result >>> 1 ^ -(1 & result); + }; + BinaryInput.prototype.readStringRef = function() { + var index = this.readInt(true); + return 0 == index ? null : this.strings[index - 1]; + }; + BinaryInput.prototype.readString = function() { + var byteCount = this.readInt(true); + switch (byteCount) { + case 0: + return null; + + case 1: + return ""; + } + byteCount--; + var chars = ""; + var charCount = 0; + for (var i = 0; i < byteCount; ) { + var b = this.readByte(); + switch (b >> 4) { + case 12: + case 13: + chars += String.fromCharCode((31 & b) << 6 | 63 & this.readByte()); + i += 2; + break; + + case 14: + chars += String.fromCharCode((15 & b) << 12 | (63 & this.readByte()) << 6 | 63 & this.readByte()); + i += 3; + break; + + default: + chars += String.fromCharCode(b); + i++; + } + } + return chars; + }; + BinaryInput.prototype.readFloat = function() { + var value = this.buffer.getFloat32(this.index); + this.index += 4; + return value; + }; + BinaryInput.prototype.readBoolean = function() { + return 0 != this.readByte(); + }; + return BinaryInput; + })(); + var LinkedMesh = (function() { + function LinkedMesh(mesh, skin, slotIndex, parent, inheritDeform) { + this.mesh = mesh; + this.skin = skin; + this.slotIndex = slotIndex; + this.parent = parent; + this.inheritDeform = inheritDeform; + } + return LinkedMesh; + })(); + var Vertices = (function() { + function Vertices(bones, vertices) { + void 0 === bones && (bones = null); + void 0 === vertices && (vertices = null); + this.bones = bones; + this.vertices = vertices; + } + return Vertices; + })(); + })(spine || (spine = {})); + var spine; + (function(spine) { + var SkeletonBounds = (function() { + function SkeletonBounds() { + this.minX = 0; + this.minY = 0; + this.maxX = 0; + this.maxY = 0; + this.boundingBoxes = new Array(); + this.polygons = new Array(); + this.polygonPool = new spine.Pool(function() { + return spine.Utils.newFloatArray(16); + }); + } + SkeletonBounds.prototype.update = function(skeleton, updateAabb) { + if (null == skeleton) throw new Error("skeleton cannot be null."); + var boundingBoxes = this.boundingBoxes; + var polygons = this.polygons; + var polygonPool = this.polygonPool; + var slots = skeleton.slots; + var slotCount = slots.length; + boundingBoxes.length = 0; + polygonPool.freeAll(polygons); + polygons.length = 0; + for (var i = 0; i < slotCount; i++) { + var slot = slots[i]; + if (!slot.bone.active) continue; + var attachment = slot.getAttachment(); + if (attachment instanceof spine.BoundingBoxAttachment) { + var boundingBox = attachment; + boundingBoxes.push(boundingBox); + var polygon = polygonPool.obtain(); + polygon.length != boundingBox.worldVerticesLength && (polygon = spine.Utils.newFloatArray(boundingBox.worldVerticesLength)); + polygons.push(polygon); + boundingBox.computeWorldVertices(slot, 0, boundingBox.worldVerticesLength, polygon, 0, 2); + } + } + if (updateAabb) this.aabbCompute(); else { + this.minX = Number.POSITIVE_INFINITY; + this.minY = Number.POSITIVE_INFINITY; + this.maxX = Number.NEGATIVE_INFINITY; + this.maxY = Number.NEGATIVE_INFINITY; + } + }; + SkeletonBounds.prototype.aabbCompute = function() { + var minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY; + var polygons = this.polygons; + for (var i = 0, n = polygons.length; i < n; i++) { + var polygon = polygons[i]; + var vertices = polygon; + for (var ii = 0, nn = polygon.length; ii < nn; ii += 2) { + var x = vertices[ii]; + var y = vertices[ii + 1]; + minX = Math.min(minX, x); + minY = Math.min(minY, y); + maxX = Math.max(maxX, x); + maxY = Math.max(maxY, y); + } + } + this.minX = minX; + this.minY = minY; + this.maxX = maxX; + this.maxY = maxY; + }; + SkeletonBounds.prototype.aabbContainsPoint = function(x, y) { + return x >= this.minX && x <= this.maxX && y >= this.minY && y <= this.maxY; + }; + SkeletonBounds.prototype.aabbIntersectsSegment = function(x1, y1, x2, y2) { + var minX = this.minX; + var minY = this.minY; + var maxX = this.maxX; + var maxY = this.maxY; + if (x1 <= minX && x2 <= minX || y1 <= minY && y2 <= minY || x1 >= maxX && x2 >= maxX || y1 >= maxY && y2 >= maxY) return false; + var m = (y2 - y1) / (x2 - x1); + var y = m * (minX - x1) + y1; + if (y > minY && y < maxY) return true; + y = m * (maxX - x1) + y1; + if (y > minY && y < maxY) return true; + var x = (minY - y1) / m + x1; + if (x > minX && x < maxX) return true; + x = (maxY - y1) / m + x1; + if (x > minX && x < maxX) return true; + return false; + }; + SkeletonBounds.prototype.aabbIntersectsSkeleton = function(bounds) { + return this.minX < bounds.maxX && this.maxX > bounds.minX && this.minY < bounds.maxY && this.maxY > bounds.minY; + }; + SkeletonBounds.prototype.containsPoint = function(x, y) { + var polygons = this.polygons; + for (var i = 0, n = polygons.length; i < n; i++) if (this.containsPointPolygon(polygons[i], x, y)) return this.boundingBoxes[i]; + return null; + }; + SkeletonBounds.prototype.containsPointPolygon = function(polygon, x, y) { + var vertices = polygon; + var nn = polygon.length; + var prevIndex = nn - 2; + var inside = false; + for (var ii = 0; ii < nn; ii += 2) { + var vertexY = vertices[ii + 1]; + var prevY = vertices[prevIndex + 1]; + if (vertexY < y && prevY >= y || prevY < y && vertexY >= y) { + var vertexX = vertices[ii]; + vertexX + (y - vertexY) / (prevY - vertexY) * (vertices[prevIndex] - vertexX) < x && (inside = !inside); + } + prevIndex = ii; + } + return inside; + }; + SkeletonBounds.prototype.intersectsSegment = function(x1, y1, x2, y2) { + var polygons = this.polygons; + for (var i = 0, n = polygons.length; i < n; i++) if (this.intersectsSegmentPolygon(polygons[i], x1, y1, x2, y2)) return this.boundingBoxes[i]; + return null; + }; + SkeletonBounds.prototype.intersectsSegmentPolygon = function(polygon, x1, y1, x2, y2) { + var vertices = polygon; + var nn = polygon.length; + var width12 = x1 - x2, height12 = y1 - y2; + var det1 = x1 * y2 - y1 * x2; + var x3 = vertices[nn - 2], y3 = vertices[nn - 1]; + for (var ii = 0; ii < nn; ii += 2) { + var x4 = vertices[ii], y4 = vertices[ii + 1]; + var det2 = x3 * y4 - y3 * x4; + var width34 = x3 - x4, height34 = y3 - y4; + var det3 = width12 * height34 - height12 * width34; + var x = (det1 * width34 - width12 * det2) / det3; + if ((x >= x3 && x <= x4 || x >= x4 && x <= x3) && (x >= x1 && x <= x2 || x >= x2 && x <= x1)) { + var y = (det1 * height34 - height12 * det2) / det3; + if ((y >= y3 && y <= y4 || y >= y4 && y <= y3) && (y >= y1 && y <= y2 || y >= y2 && y <= y1)) return true; + } + x3 = x4; + y3 = y4; + } + return false; + }; + SkeletonBounds.prototype.getPolygon = function(boundingBox) { + if (null == boundingBox) throw new Error("boundingBox cannot be null."); + var index = this.boundingBoxes.indexOf(boundingBox); + return -1 == index ? null : this.polygons[index]; + }; + SkeletonBounds.prototype.getWidth = function() { + return this.maxX - this.minX; + }; + SkeletonBounds.prototype.getHeight = function() { + return this.maxY - this.minY; + }; + return SkeletonBounds; + })(); + spine.SkeletonBounds = SkeletonBounds; + })(spine || (spine = {})); + var spine; + (function(spine) { + var SkeletonClipping = (function() { + function SkeletonClipping() { + this.triangulator = new spine.Triangulator(); + this.clippingPolygon = new Array(); + this.clipOutput = new Array(); + this.clippedVertices = new Array(); + this.clippedTriangles = new Array(); + this.scratch = new Array(); + } + SkeletonClipping.prototype.clipStart = function(slot, clip) { + if (null != this.clipAttachment) return 0; + this.clipAttachment = clip; + var n = clip.worldVerticesLength; + var vertices = spine.Utils.setArraySize(this.clippingPolygon, n); + clip.computeWorldVertices(slot, 0, n, vertices, 0, 2); + var clippingPolygon = this.clippingPolygon; + SkeletonClipping.makeClockwise(clippingPolygon); + var clippingPolygons = this.clippingPolygons = this.triangulator.decompose(clippingPolygon, this.triangulator.triangulate(clippingPolygon)); + for (var i = 0, n_1 = clippingPolygons.length; i < n_1; i++) { + var polygon = clippingPolygons[i]; + SkeletonClipping.makeClockwise(polygon); + polygon.push(polygon[0]); + polygon.push(polygon[1]); + } + return clippingPolygons.length; + }; + SkeletonClipping.prototype.clipEndWithSlot = function(slot) { + null != this.clipAttachment && this.clipAttachment.endSlot == slot.data && this.clipEnd(); + }; + SkeletonClipping.prototype.clipEnd = function() { + if (null == this.clipAttachment) return; + this.clipAttachment = null; + this.clippingPolygons = null; + this.clippedVertices.length = 0; + this.clippedTriangles.length = 0; + this.clippingPolygon.length = 0; + }; + SkeletonClipping.prototype.isClipping = function() { + return null != this.clipAttachment; + }; + SkeletonClipping.prototype.clipTriangles = function(vertices, verticesLength, triangles, trianglesLength, uvs, light, dark, twoColor, stride, originIndexOffset, originVertOffset, originUVSOffset) { + var clipOutput = this.clipOutput, clippedVertices = this.clippedVertices; + var clippedTriangles = this.clippedTriangles; + var polygons = this.clippingPolygons; + var polygonsCount = this.clippingPolygons.length; + var vertexSize = twoColor ? 12 : 8; + var index = 0; + originIndexOffset = originIndexOffset || 0; + originVertOffset = originVertOffset || 0; + originUVSOffset = originUVSOffset || 0; + clippedVertices.length = 0; + clippedTriangles.length = 0; + outer: for (var i = originIndexOffset, n = originIndexOffset + trianglesLength; i < n; i += 3) { + var vertexOffset = triangles[i] * stride; + var xyOffset = vertexOffset + originVertOffset; + var uvOffset = vertexOffset + originUVSOffset; + var x1 = vertices[xyOffset], y1 = vertices[xyOffset + 1]; + var u1 = uvs[uvOffset], v1 = uvs[uvOffset + 1]; + vertexOffset = triangles[i + 1] * stride; + xyOffset = vertexOffset + originVertOffset; + uvOffset = vertexOffset + originUVSOffset; + var x2 = vertices[xyOffset], y2 = vertices[xyOffset + 1]; + var u2 = uvs[uvOffset], v2 = uvs[uvOffset + 1]; + vertexOffset = triangles[i + 2] * stride; + xyOffset = vertexOffset + originVertOffset; + uvOffset = vertexOffset + originUVSOffset; + var x3 = vertices[xyOffset], y3 = vertices[xyOffset + 1]; + var u3 = uvs[uvOffset], v3 = uvs[uvOffset + 1]; + for (var p = 0; p < polygonsCount; p++) { + var s = clippedVertices.length; + if (!this.clip(x1, y1, x2, y2, x3, y3, polygons[p], clipOutput)) { + var clippedVerticesItems = spine.Utils.setArraySize(clippedVertices, s + 3 * vertexSize); + clippedVerticesItems[s] = x1; + clippedVerticesItems[s + 1] = y1; + clippedVerticesItems[s + 2] = light.r; + clippedVerticesItems[s + 3] = light.g; + clippedVerticesItems[s + 4] = light.b; + clippedVerticesItems[s + 5] = light.a; + if (twoColor) { + clippedVerticesItems[s + 6] = u1; + clippedVerticesItems[s + 7] = v1; + clippedVerticesItems[s + 8] = dark.r; + clippedVerticesItems[s + 9] = dark.g; + clippedVerticesItems[s + 10] = dark.b; + clippedVerticesItems[s + 11] = dark.a; + clippedVerticesItems[s + 12] = x2; + clippedVerticesItems[s + 13] = y2; + clippedVerticesItems[s + 14] = light.r; + clippedVerticesItems[s + 15] = light.g; + clippedVerticesItems[s + 16] = light.b; + clippedVerticesItems[s + 17] = light.a; + clippedVerticesItems[s + 18] = u2; + clippedVerticesItems[s + 19] = v2; + clippedVerticesItems[s + 20] = dark.r; + clippedVerticesItems[s + 21] = dark.g; + clippedVerticesItems[s + 22] = dark.b; + clippedVerticesItems[s + 23] = dark.a; + clippedVerticesItems[s + 24] = x3; + clippedVerticesItems[s + 25] = y3; + clippedVerticesItems[s + 26] = light.r; + clippedVerticesItems[s + 27] = light.g; + clippedVerticesItems[s + 28] = light.b; + clippedVerticesItems[s + 29] = light.a; + clippedVerticesItems[s + 30] = u3; + clippedVerticesItems[s + 31] = v3; + clippedVerticesItems[s + 32] = dark.r; + clippedVerticesItems[s + 33] = dark.g; + clippedVerticesItems[s + 34] = dark.b; + clippedVerticesItems[s + 35] = dark.a; + } else { + clippedVerticesItems[s + 6] = u1; + clippedVerticesItems[s + 7] = v1; + clippedVerticesItems[s + 8] = x2; + clippedVerticesItems[s + 9] = y2; + clippedVerticesItems[s + 10] = light.r; + clippedVerticesItems[s + 11] = light.g; + clippedVerticesItems[s + 12] = light.b; + clippedVerticesItems[s + 13] = light.a; + clippedVerticesItems[s + 14] = u2; + clippedVerticesItems[s + 15] = v2; + clippedVerticesItems[s + 16] = x3; + clippedVerticesItems[s + 17] = y3; + clippedVerticesItems[s + 18] = light.r; + clippedVerticesItems[s + 19] = light.g; + clippedVerticesItems[s + 20] = light.b; + clippedVerticesItems[s + 21] = light.a; + clippedVerticesItems[s + 22] = u3; + clippedVerticesItems[s + 23] = v3; + } + s = clippedTriangles.length; + var clippedTrianglesItems = spine.Utils.setArraySize(clippedTriangles, s + 3); + clippedTrianglesItems[s] = index; + clippedTrianglesItems[s + 1] = index + 1; + clippedTrianglesItems[s + 2] = index + 2; + index += 3; + continue outer; + } + var clipOutputLength = clipOutput.length; + if (0 == clipOutputLength) continue; + var d0 = y2 - y3, d1 = x3 - x2, d2 = x1 - x3, d4 = y3 - y1; + var d = 1 / (d0 * d2 + d1 * (y1 - y3)); + var clipOutputCount = clipOutputLength >> 1; + var clipOutputItems = this.clipOutput; + var clippedVerticesItems = spine.Utils.setArraySize(clippedVertices, s + clipOutputCount * vertexSize); + for (var ii = 0; ii < clipOutputLength; ii += 2) { + var x = clipOutputItems[ii], y = clipOutputItems[ii + 1]; + clippedVerticesItems[s] = x; + clippedVerticesItems[s + 1] = y; + clippedVerticesItems[s + 2] = light.r; + clippedVerticesItems[s + 3] = light.g; + clippedVerticesItems[s + 4] = light.b; + clippedVerticesItems[s + 5] = light.a; + var c0 = x - x3, c1 = y - y3; + var a = (d0 * c0 + d1 * c1) * d; + var b = (d4 * c0 + d2 * c1) * d; + var c = 1 - a - b; + clippedVerticesItems[s + 6] = u1 * a + u2 * b + u3 * c; + clippedVerticesItems[s + 7] = v1 * a + v2 * b + v3 * c; + if (twoColor) { + clippedVerticesItems[s + 8] = dark.r; + clippedVerticesItems[s + 9] = dark.g; + clippedVerticesItems[s + 10] = dark.b; + clippedVerticesItems[s + 11] = dark.a; + } + s += vertexSize; + } + s = clippedTriangles.length; + var clippedTrianglesItems = spine.Utils.setArraySize(clippedTriangles, s + 3 * (clipOutputCount - 2)); + clipOutputCount--; + for (var ii = 1; ii < clipOutputCount; ii++) { + clippedTrianglesItems[s] = index; + clippedTrianglesItems[s + 1] = index + ii; + clippedTrianglesItems[s + 2] = index + ii + 1; + s += 3; + } + index += clipOutputCount + 1; + } + } + }; + SkeletonClipping.prototype.clip = function(x1, y1, x2, y2, x3, y3, clippingArea, output) { + var originalOutput = output; + var clipped = false; + var input = null; + if (clippingArea.length % 4 >= 2) { + input = output; + output = this.scratch; + } else input = this.scratch; + input.length = 0; + input.push(x1); + input.push(y1); + input.push(x2); + input.push(y2); + input.push(x3); + input.push(y3); + input.push(x1); + input.push(y1); + output.length = 0; + var clippingVertices = clippingArea; + var clippingVerticesLast = clippingArea.length - 4; + for (var i = 0; ;i += 2) { + var edgeX = clippingVertices[i], edgeY = clippingVertices[i + 1]; + var edgeX2 = clippingVertices[i + 2], edgeY2 = clippingVertices[i + 3]; + var deltaX = edgeX - edgeX2, deltaY = edgeY - edgeY2; + var inputVertices = input; + var inputVerticesLength = input.length - 2, outputStart = output.length; + for (var ii = 0; ii < inputVerticesLength; ii += 2) { + var inputX = inputVertices[ii], inputY = inputVertices[ii + 1]; + var inputX2 = inputVertices[ii + 2], inputY2 = inputVertices[ii + 3]; + var side2 = deltaX * (inputY2 - edgeY2) - deltaY * (inputX2 - edgeX2) > 0; + if (deltaX * (inputY - edgeY2) - deltaY * (inputX - edgeX2) > 0) { + if (side2) { + output.push(inputX2); + output.push(inputY2); + continue; + } + var c0 = inputY2 - inputY, c2 = inputX2 - inputX; + var s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY); + if (Math.abs(s) > 1e-6) { + var ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s; + output.push(edgeX + (edgeX2 - edgeX) * ua); + output.push(edgeY + (edgeY2 - edgeY) * ua); + } else { + output.push(edgeX); + output.push(edgeY); + } + } else if (side2) { + var c0 = inputY2 - inputY, c2 = inputX2 - inputX; + var s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY); + if (Math.abs(s) > 1e-6) { + var ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s; + output.push(edgeX + (edgeX2 - edgeX) * ua); + output.push(edgeY + (edgeY2 - edgeY) * ua); + } else { + output.push(edgeX); + output.push(edgeY); + } + output.push(inputX2); + output.push(inputY2); + } + clipped = true; + } + if (outputStart == output.length) { + originalOutput.length = 0; + return true; + } + output.push(output[0]); + output.push(output[1]); + if (i == clippingVerticesLast) break; + var temp = output; + output = input; + output.length = 0; + input = temp; + } + if (originalOutput != output) { + originalOutput.length = 0; + for (var i = 0, n = output.length - 2; i < n; i++) originalOutput[i] = output[i]; + } else originalOutput.length = originalOutput.length - 2; + return clipped; + }; + SkeletonClipping.makeClockwise = function(polygon) { + var vertices = polygon; + var verticeslength = polygon.length; + var area = vertices[verticeslength - 2] * vertices[1] - vertices[0] * vertices[verticeslength - 1], p1x = 0, p1y = 0, p2x = 0, p2y = 0; + for (var i = 0, n = verticeslength - 3; i < n; i += 2) { + p1x = vertices[i]; + p1y = vertices[i + 1]; + p2x = vertices[i + 2]; + p2y = vertices[i + 3]; + area += p1x * p2y - p2x * p1y; + } + if (area < 0) return; + for (var i = 0, lastX = verticeslength - 2, n = verticeslength >> 1; i < n; i += 2) { + var x = vertices[i], y = vertices[i + 1]; + var other = lastX - i; + vertices[i] = vertices[other]; + vertices[i + 1] = vertices[other + 1]; + vertices[other] = x; + vertices[other + 1] = y; + } + }; + return SkeletonClipping; + })(); + spine.SkeletonClipping = SkeletonClipping; + })(spine || (spine = {})); + var spine; + (function(spine) { + var SkeletonData = (function() { + function SkeletonData() { + this.bones = new Array(); + this.slots = new Array(); + this.skins = new Array(); + this.events = new Array(); + this.animations = new Array(); + this.ikConstraints = new Array(); + this.transformConstraints = new Array(); + this.pathConstraints = new Array(); + this.fps = 0; + } + SkeletonData.prototype.findBone = function(boneName) { + if (null == boneName) throw new Error("boneName cannot be null."); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (bone.name == boneName) return bone; + } + return null; + }; + SkeletonData.prototype.findBoneIndex = function(boneName) { + if (null == boneName) throw new Error("boneName cannot be null."); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) if (bones[i].name == boneName) return i; + return -1; + }; + SkeletonData.prototype.findSlot = function(slotName) { + if (null == slotName) throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + if (slot.name == slotName) return slot; + } + return null; + }; + SkeletonData.prototype.findSlotIndex = function(slotName) { + if (null == slotName) throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) if (slots[i].name == slotName) return i; + return -1; + }; + SkeletonData.prototype.findSkin = function(skinName) { + if (null == skinName) throw new Error("skinName cannot be null."); + var skins = this.skins; + for (var i = 0, n = skins.length; i < n; i++) { + var skin = skins[i]; + if (skin.name == skinName) return skin; + } + return null; + }; + SkeletonData.prototype.findEvent = function(eventDataName) { + if (null == eventDataName) throw new Error("eventDataName cannot be null."); + var events = this.events; + for (var i = 0, n = events.length; i < n; i++) { + var event_5 = events[i]; + if (event_5.name == eventDataName) return event_5; + } + return null; + }; + SkeletonData.prototype.findAnimation = function(animationName) { + if (null == animationName) throw new Error("animationName cannot be null."); + var animations = this.animations; + for (var i = 0, n = animations.length; i < n; i++) { + var animation = animations[i]; + if (animation.name == animationName) return animation; + } + return null; + }; + SkeletonData.prototype.findIkConstraint = function(constraintName) { + if (null == constraintName) throw new Error("constraintName cannot be null."); + var ikConstraints = this.ikConstraints; + for (var i = 0, n = ikConstraints.length; i < n; i++) { + var constraint = ikConstraints[i]; + if (constraint.name == constraintName) return constraint; + } + return null; + }; + SkeletonData.prototype.findTransformConstraint = function(constraintName) { + if (null == constraintName) throw new Error("constraintName cannot be null."); + var transformConstraints = this.transformConstraints; + for (var i = 0, n = transformConstraints.length; i < n; i++) { + var constraint = transformConstraints[i]; + if (constraint.name == constraintName) return constraint; + } + return null; + }; + SkeletonData.prototype.findPathConstraint = function(constraintName) { + if (null == constraintName) throw new Error("constraintName cannot be null."); + var pathConstraints = this.pathConstraints; + for (var i = 0, n = pathConstraints.length; i < n; i++) { + var constraint = pathConstraints[i]; + if (constraint.name == constraintName) return constraint; + } + return null; + }; + SkeletonData.prototype.findPathConstraintIndex = function(pathConstraintName) { + if (null == pathConstraintName) throw new Error("pathConstraintName cannot be null."); + var pathConstraints = this.pathConstraints; + for (var i = 0, n = pathConstraints.length; i < n; i++) if (pathConstraints[i].name == pathConstraintName) return i; + return -1; + }; + return SkeletonData; + })(); + spine.SkeletonData = SkeletonData; + })(spine || (spine = {})); + var spine; + (function(spine) { + var SkeletonJson = (function() { + function SkeletonJson(attachmentLoader) { + this.scale = 1; + this.linkedMeshes = new Array(); + this.attachmentLoader = attachmentLoader; + } + SkeletonJson.prototype.readSkeletonData = function(json) { + var scale = this.scale; + var skeletonData = new spine.SkeletonData(); + var root = "string" === typeof json ? JSON.parse(json) : json; + var skeletonMap = root.skeleton; + if (null != skeletonMap) { + skeletonData.hash = skeletonMap.hash; + skeletonData.version = skeletonMap.spine; + skeletonData.x = skeletonMap.x; + skeletonData.y = skeletonMap.y; + skeletonData.width = skeletonMap.width; + skeletonData.height = skeletonMap.height; + skeletonData.fps = skeletonMap.fps; + skeletonData.imagesPath = skeletonMap.images; + } + if (root.bones) for (var i = 0; i < root.bones.length; i++) { + var boneMap = root.bones[i]; + var parent_5 = null; + var parentName = this.getValue(boneMap, "parent", null); + if (null != parentName) { + parent_5 = skeletonData.findBone(parentName); + if (null == parent_5) throw new Error("Parent bone not found: " + parentName); + } + var data = new spine.BoneData(skeletonData.bones.length, boneMap.name, parent_5); + data.length = this.getValue(boneMap, "length", 0) * scale; + data.x = this.getValue(boneMap, "x", 0) * scale; + data.y = this.getValue(boneMap, "y", 0) * scale; + data.rotation = this.getValue(boneMap, "rotation", 0); + data.scaleX = this.getValue(boneMap, "scaleX", 1); + data.scaleY = this.getValue(boneMap, "scaleY", 1); + data.shearX = this.getValue(boneMap, "shearX", 0); + data.shearY = this.getValue(boneMap, "shearY", 0); + data.transformMode = SkeletonJson.transformModeFromString(this.getValue(boneMap, "transform", "normal")); + data.skinRequired = this.getValue(boneMap, "skin", false); + skeletonData.bones.push(data); + } + if (root.slots) for (var i = 0; i < root.slots.length; i++) { + var slotMap = root.slots[i]; + var slotName = slotMap.name; + var boneName = slotMap.bone; + var boneData = skeletonData.findBone(boneName); + if (null == boneData) throw new Error("Slot bone not found: " + boneName); + var data = new spine.SlotData(skeletonData.slots.length, slotName, boneData); + var color = this.getValue(slotMap, "color", null); + null != color && data.color.setFromString(color); + var dark = this.getValue(slotMap, "dark", null); + if (null != dark) { + data.darkColor = new spine.Color(1, 1, 1, 1); + data.darkColor.setFromString(dark); + } + data.attachmentName = this.getValue(slotMap, "attachment", null); + data.blendMode = SkeletonJson.blendModeFromString(this.getValue(slotMap, "blend", "normal")); + skeletonData.slots.push(data); + } + if (root.ik) for (var i = 0; i < root.ik.length; i++) { + var constraintMap = root.ik[i]; + var data = new spine.IkConstraintData(constraintMap.name); + data.order = this.getValue(constraintMap, "order", 0); + data.skinRequired = this.getValue(constraintMap, "skin", false); + for (var j = 0; j < constraintMap.bones.length; j++) { + var boneName = constraintMap.bones[j]; + var bone = skeletonData.findBone(boneName); + if (null == bone) throw new Error("IK bone not found: " + boneName); + data.bones.push(bone); + } + var targetName = constraintMap.target; + data.target = skeletonData.findBone(targetName); + if (null == data.target) throw new Error("IK target bone not found: " + targetName); + data.mix = this.getValue(constraintMap, "mix", 1); + data.softness = this.getValue(constraintMap, "softness", 0) * scale; + data.bendDirection = this.getValue(constraintMap, "bendPositive", true) ? 1 : -1; + data.compress = this.getValue(constraintMap, "compress", false); + data.stretch = this.getValue(constraintMap, "stretch", false); + data.uniform = this.getValue(constraintMap, "uniform", false); + skeletonData.ikConstraints.push(data); + } + if (root.transform) for (var i = 0; i < root.transform.length; i++) { + var constraintMap = root.transform[i]; + var data = new spine.TransformConstraintData(constraintMap.name); + data.order = this.getValue(constraintMap, "order", 0); + data.skinRequired = this.getValue(constraintMap, "skin", false); + for (var j = 0; j < constraintMap.bones.length; j++) { + var boneName = constraintMap.bones[j]; + var bone = skeletonData.findBone(boneName); + if (null == bone) throw new Error("Transform constraint bone not found: " + boneName); + data.bones.push(bone); + } + var targetName = constraintMap.target; + data.target = skeletonData.findBone(targetName); + if (null == data.target) throw new Error("Transform constraint target bone not found: " + targetName); + data.local = this.getValue(constraintMap, "local", false); + data.relative = this.getValue(constraintMap, "relative", false); + data.offsetRotation = this.getValue(constraintMap, "rotation", 0); + data.offsetX = this.getValue(constraintMap, "x", 0) * scale; + data.offsetY = this.getValue(constraintMap, "y", 0) * scale; + data.offsetScaleX = this.getValue(constraintMap, "scaleX", 0); + data.offsetScaleY = this.getValue(constraintMap, "scaleY", 0); + data.offsetShearY = this.getValue(constraintMap, "shearY", 0); + data.rotateMix = this.getValue(constraintMap, "rotateMix", 1); + data.translateMix = this.getValue(constraintMap, "translateMix", 1); + data.scaleMix = this.getValue(constraintMap, "scaleMix", 1); + data.shearMix = this.getValue(constraintMap, "shearMix", 1); + skeletonData.transformConstraints.push(data); + } + if (root.path) for (var i = 0; i < root.path.length; i++) { + var constraintMap = root.path[i]; + var data = new spine.PathConstraintData(constraintMap.name); + data.order = this.getValue(constraintMap, "order", 0); + data.skinRequired = this.getValue(constraintMap, "skin", false); + for (var j = 0; j < constraintMap.bones.length; j++) { + var boneName = constraintMap.bones[j]; + var bone = skeletonData.findBone(boneName); + if (null == bone) throw new Error("Transform constraint bone not found: " + boneName); + data.bones.push(bone); + } + var targetName = constraintMap.target; + data.target = skeletonData.findSlot(targetName); + if (null == data.target) throw new Error("Path target slot not found: " + targetName); + data.positionMode = SkeletonJson.positionModeFromString(this.getValue(constraintMap, "positionMode", "percent")); + data.spacingMode = SkeletonJson.spacingModeFromString(this.getValue(constraintMap, "spacingMode", "length")); + data.rotateMode = SkeletonJson.rotateModeFromString(this.getValue(constraintMap, "rotateMode", "tangent")); + data.offsetRotation = this.getValue(constraintMap, "rotation", 0); + data.position = this.getValue(constraintMap, "position", 0); + data.positionMode == spine.PositionMode.Fixed && (data.position *= scale); + data.spacing = this.getValue(constraintMap, "spacing", 0); + data.spacingMode != spine.SpacingMode.Length && data.spacingMode != spine.SpacingMode.Fixed || (data.spacing *= scale); + data.rotateMix = this.getValue(constraintMap, "rotateMix", 1); + data.translateMix = this.getValue(constraintMap, "translateMix", 1); + skeletonData.pathConstraints.push(data); + } + if (root.skins) { + var skins = root.skins; + var isArray = skins instanceof Array; + if (!isArray) { + var skinArr = []; + for (var skinName in skins) skinArr.push({ + name: skinName, + attachments: skins[skinName] + }); + skins = skinArr; + } + for (var i = 0; i < skins.length; i++) { + var skinMap = skins[i]; + var skin = new spine.Skin(skinMap.name); + if (skinMap.bones) for (var ii = 0; ii < skinMap.bones.length; ii++) { + var bone = skeletonData.findBone(skinMap.bones[ii]); + if (null == bone) throw new Error("Skin bone not found: " + skinMap.bones[i]); + skin.bones.push(bone); + } + if (skinMap.ik) for (var ii = 0; ii < skinMap.ik.length; ii++) { + var constraint = skeletonData.findIkConstraint(skinMap.ik[ii]); + if (null == constraint) throw new Error("Skin IK constraint not found: " + skinMap.ik[i]); + skin.constraints.push(constraint); + } + if (skinMap.transform) for (var ii = 0; ii < skinMap.transform.length; ii++) { + var constraint = skeletonData.findTransformConstraint(skinMap.transform[ii]); + if (null == constraint) throw new Error("Skin transform constraint not found: " + skinMap.transform[i]); + skin.constraints.push(constraint); + } + if (skinMap.path) for (var ii = 0; ii < skinMap.path.length; ii++) { + var constraint = skeletonData.findPathConstraint(skinMap.path[ii]); + if (null == constraint) throw new Error("Skin path constraint not found: " + skinMap.path[i]); + skin.constraints.push(constraint); + } + for (var slotName in skinMap.attachments) { + var slot = skeletonData.findSlot(slotName); + if (null == slot) throw new Error("Slot not found: " + slotName); + var slotMap = skinMap.attachments[slotName]; + for (var entryName in slotMap) { + var attachment = this.readAttachment(slotMap[entryName], skin, slot.index, entryName, skeletonData); + null != attachment && skin.setAttachment(slot.index, entryName, attachment); + } + } + skeletonData.skins.push(skin); + "default" == skin.name && (skeletonData.defaultSkin = skin); + } + } + for (var i = 0, n = this.linkedMeshes.length; i < n; i++) { + var linkedMesh = this.linkedMeshes[i]; + var skin = null == linkedMesh.skin ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin); + if (null == skin) throw new Error("Skin not found: " + linkedMesh.skin); + var parent_6 = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent); + if (null == parent_6) throw new Error("Parent mesh not found: " + linkedMesh.parent); + linkedMesh.mesh.deformAttachment = linkedMesh.inheritDeform ? parent_6 : linkedMesh.mesh; + linkedMesh.mesh.setParentMesh(parent_6); + linkedMesh.mesh.updateUVs(); + } + this.linkedMeshes.length = 0; + if (root.events) for (var eventName in root.events) { + var eventMap = root.events[eventName]; + var data = new spine.EventData(eventName); + data.intValue = this.getValue(eventMap, "int", 0); + data.floatValue = this.getValue(eventMap, "float", 0); + data.stringValue = this.getValue(eventMap, "string", ""); + data.audioPath = this.getValue(eventMap, "audio", null); + if (null != data.audioPath) { + data.volume = this.getValue(eventMap, "volume", 1); + data.balance = this.getValue(eventMap, "balance", 0); + } + skeletonData.events.push(data); + } + if (root.animations) for (var animationName in root.animations) { + var animationMap = root.animations[animationName]; + this.readAnimation(animationMap, animationName, skeletonData); + } + return skeletonData; + }; + SkeletonJson.prototype.readAttachment = function(map, skin, slotIndex, name, skeletonData) { + var scale = this.scale; + name = this.getValue(map, "name", name); + var type = this.getValue(map, "type", "region"); + switch (type) { + case "region": + var path = this.getValue(map, "path", name); + var region = this.attachmentLoader.newRegionAttachment(skin, name, path); + if (null == region) return null; + region.path = path; + region.x = this.getValue(map, "x", 0) * scale; + region.y = this.getValue(map, "y", 0) * scale; + region.scaleX = this.getValue(map, "scaleX", 1); + region.scaleY = this.getValue(map, "scaleY", 1); + region.rotation = this.getValue(map, "rotation", 0); + region.width = map.width * scale; + region.height = map.height * scale; + var color = this.getValue(map, "color", null); + null != color && region.color.setFromString(color); + region.updateOffset(); + return region; + + case "boundingbox": + var box = this.attachmentLoader.newBoundingBoxAttachment(skin, name); + if (null == box) return null; + this.readVertices(map, box, map.vertexCount << 1); + var color = this.getValue(map, "color", null); + null != color && box.color.setFromString(color); + return box; + + case "mesh": + case "linkedmesh": + var path = this.getValue(map, "path", name); + var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path); + if (null == mesh) return null; + mesh.path = path; + var color = this.getValue(map, "color", null); + null != color && mesh.color.setFromString(color); + mesh.width = this.getValue(map, "width", 0) * scale; + mesh.height = this.getValue(map, "height", 0) * scale; + var parent_7 = this.getValue(map, "parent", null); + if (null != parent_7) { + this.linkedMeshes.push(new LinkedMesh(mesh, this.getValue(map, "skin", null), slotIndex, parent_7, this.getValue(map, "deform", true))); + return mesh; + } + var uvs = map.uvs; + this.readVertices(map, mesh, uvs.length); + mesh.triangles = map.triangles; + mesh.regionUVs = uvs; + mesh.updateUVs(); + mesh.edges = this.getValue(map, "edges", null); + mesh.hullLength = 2 * this.getValue(map, "hull", 0); + return mesh; + + case "path": + var path = this.attachmentLoader.newPathAttachment(skin, name); + if (null == path) return null; + path.closed = this.getValue(map, "closed", false); + path.constantSpeed = this.getValue(map, "constantSpeed", true); + var vertexCount = map.vertexCount; + this.readVertices(map, path, vertexCount << 1); + var lengths = spine.Utils.newArray(vertexCount / 3, 0); + for (var i = 0; i < map.lengths.length; i++) lengths[i] = map.lengths[i] * scale; + path.lengths = lengths; + var color = this.getValue(map, "color", null); + null != color && path.color.setFromString(color); + return path; + + case "point": + var point = this.attachmentLoader.newPointAttachment(skin, name); + if (null == point) return null; + point.x = this.getValue(map, "x", 0) * scale; + point.y = this.getValue(map, "y", 0) * scale; + point.rotation = this.getValue(map, "rotation", 0); + var color = this.getValue(map, "color", null); + null != color && point.color.setFromString(color); + return point; + + case "clipping": + var clip = this.attachmentLoader.newClippingAttachment(skin, name); + if (null == clip) return null; + var end = this.getValue(map, "end", null); + if (null != end) { + var slot = skeletonData.findSlot(end); + if (null == slot) throw new Error("Clipping end slot not found: " + end); + clip.endSlot = slot; + } + var vertexCount = map.vertexCount; + this.readVertices(map, clip, vertexCount << 1); + var color = this.getValue(map, "color", null); + null != color && clip.color.setFromString(color); + return clip; + } + return null; + }; + SkeletonJson.prototype.readVertices = function(map, attachment, verticesLength) { + var scale = this.scale; + attachment.worldVerticesLength = verticesLength; + var vertices = map.vertices; + if (verticesLength == vertices.length) { + var scaledVertices = spine.Utils.toFloatArray(vertices); + if (1 != scale) for (var i = 0, n = vertices.length; i < n; i++) scaledVertices[i] *= scale; + attachment.vertices = scaledVertices; + return; + } + var weights = new Array(); + var bones = new Array(); + for (var i = 0, n = vertices.length; i < n; ) { + var boneCount = vertices[i++]; + bones.push(boneCount); + for (var nn = i + 4 * boneCount; i < nn; i += 4) { + bones.push(vertices[i]); + weights.push(vertices[i + 1] * scale); + weights.push(vertices[i + 2] * scale); + weights.push(vertices[i + 3]); + } + } + attachment.bones = bones; + attachment.vertices = spine.Utils.toFloatArray(weights); + }; + SkeletonJson.prototype.readAnimation = function(map, name, skeletonData) { + var scale = this.scale; + var timelines = new Array(); + var duration = 0; + if (map.slots) for (var slotName in map.slots) { + var slotMap = map.slots[slotName]; + var slotIndex = skeletonData.findSlotIndex(slotName); + if (-1 == slotIndex) throw new Error("Slot not found: " + slotName); + for (var timelineName in slotMap) { + var timelineMap = slotMap[timelineName]; + if ("attachment" == timelineName) { + var timeline = new spine.AttachmentTimeline(timelineMap.length); + timeline.slotIndex = slotIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + timeline.setFrame(frameIndex++, this.getValue(valueMap, "time", 0), valueMap.name); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } else if ("color" == timelineName) { + var timeline = new spine.ColorTimeline(timelineMap.length); + timeline.slotIndex = slotIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + var color = new spine.Color(); + color.setFromString(valueMap.color); + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), color.r, color.g, color.b, color.a); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.ColorTimeline.ENTRIES]); + } else { + if ("twoColor" != timelineName) throw new Error("Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")"); + var timeline = new spine.TwoColorTimeline(timelineMap.length); + timeline.slotIndex = slotIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + var light = new spine.Color(); + var dark = new spine.Color(); + light.setFromString(valueMap.light); + dark.setFromString(valueMap.dark); + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), light.r, light.g, light.b, light.a, dark.r, dark.g, dark.b); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.TwoColorTimeline.ENTRIES]); + } + } + } + if (map.bones) for (var boneName in map.bones) { + var boneMap = map.bones[boneName]; + var boneIndex = skeletonData.findBoneIndex(boneName); + if (-1 == boneIndex) throw new Error("Bone not found: " + boneName); + for (var timelineName in boneMap) { + var timelineMap = boneMap[timelineName]; + if ("rotate" === timelineName) { + var timeline = new spine.RotateTimeline(timelineMap.length); + timeline.boneIndex = boneIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "angle", 0)); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.RotateTimeline.ENTRIES]); + } else { + if ("translate" !== timelineName && "scale" !== timelineName && "shear" !== timelineName) throw new Error("Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")"); + var timeline = null; + var timelineScale = 1, defaultValue = 0; + if ("scale" === timelineName) { + timeline = new spine.ScaleTimeline(timelineMap.length); + defaultValue = 1; + } else if ("shear" === timelineName) timeline = new spine.ShearTimeline(timelineMap.length); else { + timeline = new spine.TranslateTimeline(timelineMap.length); + timelineScale = scale; + } + timeline.boneIndex = boneIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + var x = this.getValue(valueMap, "x", defaultValue), y = this.getValue(valueMap, "y", defaultValue); + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), x * timelineScale, y * timelineScale); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.TranslateTimeline.ENTRIES]); + } + } + } + if (map.ik) for (var constraintName in map.ik) { + var constraintMap = map.ik[constraintName]; + var constraint = skeletonData.findIkConstraint(constraintName); + var timeline = new spine.IkConstraintTimeline(constraintMap.length); + timeline.ikConstraintIndex = skeletonData.ikConstraints.indexOf(constraint); + var frameIndex = 0; + for (var i = 0; i < constraintMap.length; i++) { + var valueMap = constraintMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "mix", 1), this.getValue(valueMap, "softness", 0) * scale, this.getValue(valueMap, "bendPositive", true) ? 1 : -1, this.getValue(valueMap, "compress", false), this.getValue(valueMap, "stretch", false)); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.IkConstraintTimeline.ENTRIES]); + } + if (map.transform) for (var constraintName in map.transform) { + var constraintMap = map.transform[constraintName]; + var constraint = skeletonData.findTransformConstraint(constraintName); + var timeline = new spine.TransformConstraintTimeline(constraintMap.length); + timeline.transformConstraintIndex = skeletonData.transformConstraints.indexOf(constraint); + var frameIndex = 0; + for (var i = 0; i < constraintMap.length; i++) { + var valueMap = constraintMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "rotateMix", 1), this.getValue(valueMap, "translateMix", 1), this.getValue(valueMap, "scaleMix", 1), this.getValue(valueMap, "shearMix", 1)); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.TransformConstraintTimeline.ENTRIES]); + } + var mapPath = map.path || map.paths; + if (mapPath) for (var constraintName in mapPath) { + var constraintMap = mapPath[constraintName]; + var index = skeletonData.findPathConstraintIndex(constraintName); + if (-1 == index) throw new Error("Path constraint not found: " + constraintName); + var data = skeletonData.pathConstraints[index]; + for (var timelineName in constraintMap) { + var timelineMap = constraintMap[timelineName]; + if ("position" === timelineName || "spacing" === timelineName) { + var timeline = null; + var timelineScale = 1; + if ("spacing" === timelineName) { + timeline = new spine.PathConstraintSpacingTimeline(timelineMap.length); + data.spacingMode != spine.SpacingMode.Length && data.spacingMode != spine.SpacingMode.Fixed || (timelineScale = scale); + } else { + timeline = new spine.PathConstraintPositionTimeline(timelineMap.length); + data.positionMode == spine.PositionMode.Fixed && (timelineScale = scale); + } + timeline.pathConstraintIndex = index; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, timelineName, 0) * timelineScale); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.PathConstraintPositionTimeline.ENTRIES]); + } else if ("mix" === timelineName) { + var timeline = new spine.PathConstraintMixTimeline(timelineMap.length); + timeline.pathConstraintIndex = index; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "rotateMix", 1), this.getValue(valueMap, "translateMix", 1)); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.PathConstraintMixTimeline.ENTRIES]); + } + } + } + if (map.deform) for (var deformName in map.deform) { + var deformMap = map.deform[deformName]; + var skin = skeletonData.findSkin(deformName); + if (null == skin) throw new Error("Skin not found: " + deformName); + for (var slotName in deformMap) { + var slotMap = deformMap[slotName]; + var slotIndex = skeletonData.findSlotIndex(slotName); + if (-1 == slotIndex) throw new Error("Slot not found: " + slotMap.name); + for (var timelineName in slotMap) { + var timelineMap = slotMap[timelineName]; + var attachment = skin.getAttachment(slotIndex, timelineName); + if (null == attachment) continue; + var weighted = null != attachment.bones; + var vertices = attachment.vertices; + var deformLength = weighted ? vertices.length / 3 * 2 : vertices.length; + var timeline = new spine.DeformTimeline(timelineMap.length); + timeline.slotIndex = slotIndex; + timeline.attachment = attachment; + var frameIndex = 0; + for (var j = 0; j < timelineMap.length; j++) { + var valueMap = timelineMap[j]; + var deform = void 0; + var verticesValue = this.getValue(valueMap, "vertices", null); + if (null == verticesValue) deform = weighted ? spine.Utils.newFloatArray(deformLength) : vertices; else { + deform = spine.Utils.newFloatArray(deformLength); + var start = this.getValue(valueMap, "offset", 0); + spine.Utils.arrayCopy(verticesValue, 0, deform, start, verticesValue.length); + if (1 != scale) for (var i = start, n = i + verticesValue.length; i < n; i++) deform[i] *= scale; + if (!weighted) for (var i = 0; i < deformLength; i++) deform[i] += vertices[i]; + } + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), deform); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } + } + } + var drawOrderNode = map.drawOrder; + null == drawOrderNode && (drawOrderNode = map.draworder); + if (null != drawOrderNode) { + var timeline = new spine.DrawOrderTimeline(drawOrderNode.length); + var slotCount = skeletonData.slots.length; + var frameIndex = 0; + for (var j = 0; j < drawOrderNode.length; j++) { + var drawOrderMap = drawOrderNode[j]; + var drawOrder = null; + var offsets = this.getValue(drawOrderMap, "offsets", null); + if (null != offsets) { + drawOrder = spine.Utils.newArray(slotCount, -1); + var unchanged = spine.Utils.newArray(slotCount - offsets.length, 0); + var originalIndex = 0, unchangedIndex = 0; + for (var i = 0; i < offsets.length; i++) { + var offsetMap = offsets[i]; + var slotIndex = skeletonData.findSlotIndex(offsetMap.slot); + if (-1 == slotIndex) throw new Error("Slot not found: " + offsetMap.slot); + while (originalIndex != slotIndex) unchanged[unchangedIndex++] = originalIndex++; + drawOrder[originalIndex + offsetMap.offset] = originalIndex++; + } + while (originalIndex < slotCount) unchanged[unchangedIndex++] = originalIndex++; + for (var i = slotCount - 1; i >= 0; i--) -1 == drawOrder[i] && (drawOrder[i] = unchanged[--unchangedIndex]); + } + timeline.setFrame(frameIndex++, this.getValue(drawOrderMap, "time", 0), drawOrder); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } + if (map.events) { + var timeline = new spine.EventTimeline(map.events.length); + var frameIndex = 0; + for (var i = 0; i < map.events.length; i++) { + var eventMap = map.events[i]; + var eventData = skeletonData.findEvent(eventMap.name); + if (null == eventData) throw new Error("Event not found: " + eventMap.name); + var event_6 = new spine.Event(spine.Utils.toSinglePrecision(this.getValue(eventMap, "time", 0)), eventData); + event_6.intValue = this.getValue(eventMap, "int", eventData.intValue); + event_6.floatValue = this.getValue(eventMap, "float", eventData.floatValue); + event_6.stringValue = this.getValue(eventMap, "string", eventData.stringValue); + if (null != event_6.data.audioPath) { + event_6.volume = this.getValue(eventMap, "volume", 1); + event_6.balance = this.getValue(eventMap, "balance", 0); + } + timeline.setFrame(frameIndex++, event_6); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } + if (isNaN(duration)) throw new Error("Error while parsing animation, duration is NaN"); + skeletonData.animations.push(new spine.Animation(name, timelines, duration)); + }; + SkeletonJson.prototype.readCurve = function(map, timeline, frameIndex) { + var curve = map.curve; + if (!curve) return; + "stepped" == curve ? timeline.setStepped(frameIndex) : "[object Array]" === Object.prototype.toString.call(curve) ? timeline.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]) : timeline.setCurve(frameIndex, curve, this.getValue(map, "c2", 0), this.getValue(map, "c3", 1), this.getValue(map, "c4", 1)); + }; + SkeletonJson.prototype.getValue = function(map, prop, defaultValue) { + return void 0 !== map[prop] ? map[prop] : defaultValue; + }; + SkeletonJson.blendModeFromString = function(str) { + str = str.toLowerCase(); + if ("normal" == str) return spine.BlendMode.Normal; + if ("additive" == str) return spine.BlendMode.Additive; + if ("multiply" == str) return spine.BlendMode.Multiply; + if ("screen" == str) return spine.BlendMode.Screen; + throw new Error("Unknown blend mode: " + str); + }; + SkeletonJson.positionModeFromString = function(str) { + str = str.toLowerCase(); + if ("fixed" == str) return spine.PositionMode.Fixed; + if ("percent" == str) return spine.PositionMode.Percent; + throw new Error("Unknown position mode: " + str); + }; + SkeletonJson.spacingModeFromString = function(str) { + str = str.toLowerCase(); + if ("length" == str) return spine.SpacingMode.Length; + if ("fixed" == str) return spine.SpacingMode.Fixed; + if ("percent" == str) return spine.SpacingMode.Percent; + throw new Error("Unknown position mode: " + str); + }; + SkeletonJson.rotateModeFromString = function(str) { + str = str.toLowerCase(); + if ("tangent" == str) return spine.RotateMode.Tangent; + if ("chain" == str) return spine.RotateMode.Chain; + if ("chainscale" == str) return spine.RotateMode.ChainScale; + throw new Error("Unknown rotate mode: " + str); + }; + SkeletonJson.transformModeFromString = function(str) { + str = str.toLowerCase(); + if ("normal" == str) return spine.TransformMode.Normal; + if ("onlytranslation" == str) return spine.TransformMode.OnlyTranslation; + if ("norotationorreflection" == str) return spine.TransformMode.NoRotationOrReflection; + if ("noscale" == str) return spine.TransformMode.NoScale; + if ("noscaleorreflection" == str) return spine.TransformMode.NoScaleOrReflection; + throw new Error("Unknown transform mode: " + str); + }; + return SkeletonJson; + })(); + spine.SkeletonJson = SkeletonJson; + var LinkedMesh = (function() { + function LinkedMesh(mesh, skin, slotIndex, parent, inheritDeform) { + this.mesh = mesh; + this.skin = skin; + this.slotIndex = slotIndex; + this.parent = parent; + this.inheritDeform = inheritDeform; + } + return LinkedMesh; + })(); + })(spine || (spine = {})); + var spine; + (function(spine) { + var SkinEntry = (function() { + function SkinEntry(slotIndex, name, attachment) { + this.slotIndex = slotIndex; + this.name = name; + this.attachment = attachment; + } + return SkinEntry; + })(); + spine.SkinEntry = SkinEntry; + var Skin = (function() { + function Skin(name) { + this.attachments = new Array(); + this.bones = Array(); + this.constraints = new Array(); + if (null == name) throw new Error("name cannot be null."); + this.name = name; + } + Skin.prototype.setAttachment = function(slotIndex, name, attachment) { + if (null == attachment) throw new Error("attachment cannot be null."); + var attachments = this.attachments; + slotIndex >= attachments.length && (attachments.length = slotIndex + 1); + attachments[slotIndex] || (attachments[slotIndex] = {}); + attachments[slotIndex][name] = attachment; + }; + Skin.prototype.addSkin = function(skin) { + for (var i = 0; i < skin.bones.length; i++) { + var bone = skin.bones[i]; + var contained = false; + for (var j = 0; j < this.bones.length; j++) if (this.bones[j] == bone) { + contained = true; + break; + } + contained || this.bones.push(bone); + } + for (var i = 0; i < skin.constraints.length; i++) { + var constraint = skin.constraints[i]; + var contained = false; + for (var j = 0; j < this.constraints.length; j++) if (this.constraints[j] == constraint) { + contained = true; + break; + } + contained || this.constraints.push(constraint); + } + var attachments = skin.getAttachments(); + for (var i = 0; i < attachments.length; i++) { + var attachment = attachments[i]; + this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment); + } + }; + Skin.prototype.copySkin = function(skin) { + for (var i = 0; i < skin.bones.length; i++) { + var bone = skin.bones[i]; + var contained = false; + for (var j = 0; j < this.bones.length; j++) if (this.bones[j] == bone) { + contained = true; + break; + } + contained || this.bones.push(bone); + } + for (var i = 0; i < skin.constraints.length; i++) { + var constraint = skin.constraints[i]; + var contained = false; + for (var j = 0; j < this.constraints.length; j++) if (this.constraints[j] == constraint) { + contained = true; + break; + } + contained || this.constraints.push(constraint); + } + var attachments = skin.getAttachments(); + for (var i = 0; i < attachments.length; i++) { + var attachment = attachments[i]; + if (null == attachment.attachment) continue; + if (attachment.attachment instanceof spine.MeshAttachment) { + attachment.attachment = attachment.attachment.newLinkedMesh(); + this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment); + } else { + attachment.attachment = attachment.attachment.copy(); + this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment); + } + } + }; + Skin.prototype.getAttachment = function(slotIndex, name) { + var dictionary = this.attachments[slotIndex]; + return dictionary ? dictionary[name] : null; + }; + Skin.prototype.removeAttachment = function(slotIndex, name) { + var dictionary = this.attachments[slotIndex]; + dictionary && (dictionary[name] = null); + }; + Skin.prototype.getAttachments = function() { + var entries = new Array(); + for (var i = 0; i < this.attachments.length; i++) { + var slotAttachments = this.attachments[i]; + if (slotAttachments) for (var name_4 in slotAttachments) { + var attachment = slotAttachments[name_4]; + attachment && entries.push(new SkinEntry(i, name_4, attachment)); + } + } + return entries; + }; + Skin.prototype.getAttachmentsForSlot = function(slotIndex, attachments) { + var slotAttachments = this.attachments[slotIndex]; + if (slotAttachments) for (var name_5 in slotAttachments) { + var attachment = slotAttachments[name_5]; + attachment && attachments.push(new SkinEntry(slotIndex, name_5, attachment)); + } + }; + Skin.prototype.clear = function() { + this.attachments.length = 0; + this.bones.length = 0; + this.constraints.length = 0; + }; + Skin.prototype.attachAll = function(skeleton, oldSkin) { + var slotIndex = 0; + for (var i = 0; i < skeleton.slots.length; i++) { + var slot = skeleton.slots[i]; + var slotAttachment = slot.getAttachment(); + if (slotAttachment && slotIndex < oldSkin.attachments.length) { + var dictionary = oldSkin.attachments[slotIndex]; + for (var key in dictionary) { + var skinAttachment = dictionary[key]; + if (slotAttachment == skinAttachment) { + var attachment = this.getAttachment(slotIndex, key); + null != attachment && slot.setAttachment(attachment); + break; + } + } + } + slotIndex++; + } + }; + return Skin; + })(); + spine.Skin = Skin; + })(spine || (spine = {})); + var spine; + (function(spine) { + var Slot = (function() { + function Slot(data, bone) { + this.deform = new Array(); + if (null == data) throw new Error("data cannot be null."); + if (null == bone) throw new Error("bone cannot be null."); + this.data = data; + this.bone = bone; + this.color = new spine.Color(); + this.darkColor = null == data.darkColor ? null : new spine.Color(); + this.setToSetupPose(); + } + Slot.prototype.getSkeleton = function() { + return this.bone.skeleton; + }; + Slot.prototype.getAttachment = function() { + return this.attachment; + }; + Slot.prototype.setAttachment = function(attachment) { + if (this.attachment == attachment) return; + this.attachment = attachment; + this.attachmentTime = this.bone.skeleton.time; + this.deform.length = 0; + }; + Slot.prototype.setAttachmentTime = function(time) { + this.attachmentTime = this.bone.skeleton.time - time; + }; + Slot.prototype.getAttachmentTime = function() { + return this.bone.skeleton.time - this.attachmentTime; + }; + Slot.prototype.setToSetupPose = function() { + this.color.setFromColor(this.data.color); + null != this.darkColor && this.darkColor.setFromColor(this.data.darkColor); + if (null == this.data.attachmentName) this.attachment = null; else { + this.attachment = null; + this.setAttachment(this.bone.skeleton.getAttachment(this.data.index, this.data.attachmentName)); + } + }; + return Slot; + })(); + spine.Slot = Slot; + })(spine || (spine = {})); + var spine; + (function(spine) { + var SlotData = (function() { + function SlotData(index, name, boneData) { + this.color = new spine.Color(1, 1, 1, 1); + if (index < 0) throw new Error("index must be >= 0."); + if (null == name) throw new Error("name cannot be null."); + if (null == boneData) throw new Error("boneData cannot be null."); + this.index = index; + this.name = name; + this.boneData = boneData; + } + return SlotData; + })(); + spine.SlotData = SlotData; + })(spine || (spine = {})); + var spine; + (function(spine) { + var Texture = (function() { + function Texture(image) { + this._image = image; + } + Texture.prototype.getImage = function() { + return this._image; + }; + Texture.filterFromString = function(text) { + switch (text.toLowerCase()) { + case "nearest": + return TextureFilter.Nearest; + + case "linear": + return TextureFilter.Linear; + + case "mipmap": + return TextureFilter.MipMap; + + case "mipmapnearestnearest": + return TextureFilter.MipMapNearestNearest; + + case "mipmaplinearnearest": + return TextureFilter.MipMapLinearNearest; + + case "mipmapnearestlinear": + return TextureFilter.MipMapNearestLinear; + + case "mipmaplinearlinear": + return TextureFilter.MipMapLinearLinear; + + default: + throw new Error("Unknown texture filter " + text); + } + }; + Texture.wrapFromString = function(text) { + switch (text.toLowerCase()) { + case "mirroredtepeat": + return TextureWrap.MirroredRepeat; + + case "clamptoedge": + return TextureWrap.ClampToEdge; + + case "repeat": + return TextureWrap.Repeat; + + default: + throw new Error("Unknown texture wrap " + text); + } + }; + return Texture; + })(); + spine.Texture = Texture; + var TextureFilter; + (function(TextureFilter) { + TextureFilter[TextureFilter["Nearest"] = 9728] = "Nearest"; + TextureFilter[TextureFilter["Linear"] = 9729] = "Linear"; + TextureFilter[TextureFilter["MipMap"] = 9987] = "MipMap"; + TextureFilter[TextureFilter["MipMapNearestNearest"] = 9984] = "MipMapNearestNearest"; + TextureFilter[TextureFilter["MipMapLinearNearest"] = 9985] = "MipMapLinearNearest"; + TextureFilter[TextureFilter["MipMapNearestLinear"] = 9986] = "MipMapNearestLinear"; + TextureFilter[TextureFilter["MipMapLinearLinear"] = 9987] = "MipMapLinearLinear"; + })(TextureFilter = spine.TextureFilter || (spine.TextureFilter = {})); + var TextureWrap; + (function(TextureWrap) { + TextureWrap[TextureWrap["MirroredRepeat"] = 33648] = "MirroredRepeat"; + TextureWrap[TextureWrap["ClampToEdge"] = 33071] = "ClampToEdge"; + TextureWrap[TextureWrap["Repeat"] = 10497] = "Repeat"; + })(TextureWrap = spine.TextureWrap || (spine.TextureWrap = {})); + var TextureRegion = (function() { + function TextureRegion() { + this.u = 0; + this.v = 0; + this.u2 = 0; + this.v2 = 0; + this.width = 0; + this.height = 0; + this.rotate = false; + this.offsetX = 0; + this.offsetY = 0; + this.originalWidth = 0; + this.originalHeight = 0; + } + return TextureRegion; + })(); + spine.TextureRegion = TextureRegion; + var FakeTexture = (function(_super) { + __extends(FakeTexture, _super); + function FakeTexture() { + return null !== _super && _super.apply(this, arguments) || this; + } + FakeTexture.prototype.setFilters = function(minFilter, magFilter) {}; + FakeTexture.prototype.setWraps = function(uWrap, vWrap) {}; + FakeTexture.prototype.dispose = function() {}; + return FakeTexture; + })(Texture); + spine.FakeTexture = FakeTexture; + })(spine || (spine = {})); + var spine; + (function(spine) { + var TextureAtlas = (function() { + function TextureAtlas(atlasText, textureLoader) { + this.pages = new Array(); + this.regions = new Array(); + this.load(atlasText, textureLoader); + } + TextureAtlas.prototype.load = function(atlasText, textureLoader) { + if (null == textureLoader) throw new Error("textureLoader cannot be null."); + var reader = new TextureAtlasReader(atlasText); + var tuple = new Array(4); + var page = null; + while (true) { + var line = reader.readLine(); + if (null == line) break; + line = line.trim(); + if (0 == line.length) page = null; else if (page) { + var region = new TextureAtlasRegion(); + region.name = line; + region.page = page; + var rotateValue = reader.readValue(); + "true" == rotateValue.toLocaleLowerCase() ? region.degrees = 90 : "false" == rotateValue.toLocaleLowerCase() ? region.degrees = 0 : region.degrees = parseFloat(rotateValue); + region.rotate = 90 == region.degrees; + reader.readTuple(tuple); + var x = parseInt(tuple[0]); + var y = parseInt(tuple[1]); + reader.readTuple(tuple); + var width = parseInt(tuple[0]); + var height = parseInt(tuple[1]); + region.u = x / page.width; + region.v = y / page.height; + if (region.rotate) { + region.u2 = (x + height) / page.width; + region.v2 = (y + width) / page.height; + } else { + region.u2 = (x + width) / page.width; + region.v2 = (y + height) / page.height; + } + region.x = x; + region.y = y; + region.width = Math.abs(width); + region.height = Math.abs(height); + 4 == reader.readTuple(tuple) && 4 == reader.readTuple(tuple) && reader.readTuple(tuple); + region.originalWidth = parseInt(tuple[0]); + region.originalHeight = parseInt(tuple[1]); + reader.readTuple(tuple); + region.offsetX = parseInt(tuple[0]); + region.offsetY = parseInt(tuple[1]); + region.index = parseInt(reader.readValue()); + region.texture = page.texture; + this.regions.push(region); + } else { + page = new TextureAtlasPage(); + page.name = line; + if (2 == reader.readTuple(tuple)) { + page.width = parseInt(tuple[0]); + page.height = parseInt(tuple[1]); + reader.readTuple(tuple); + } + reader.readTuple(tuple); + page.minFilter = spine.Texture.filterFromString(tuple[0]); + page.magFilter = spine.Texture.filterFromString(tuple[1]); + var direction = reader.readValue(); + page.uWrap = spine.TextureWrap.ClampToEdge; + page.vWrap = spine.TextureWrap.ClampToEdge; + "x" == direction ? page.uWrap = spine.TextureWrap.Repeat : "y" == direction ? page.vWrap = spine.TextureWrap.Repeat : "xy" == direction && (page.uWrap = page.vWrap = spine.TextureWrap.Repeat); + page.texture = textureLoader(line); + page.texture.setFilters(page.minFilter, page.magFilter); + page.texture.setWraps(page.uWrap, page.vWrap); + page.width = page.texture.getImage().width; + page.height = page.texture.getImage().height; + this.pages.push(page); + } + } + }; + TextureAtlas.prototype.findRegion = function(name) { + for (var i = 0; i < this.regions.length; i++) if (this.regions[i].name == name) return this.regions[i]; + return null; + }; + TextureAtlas.prototype.dispose = function() { + for (var i = 0; i < this.pages.length; i++) this.pages[i].texture.dispose(); + }; + return TextureAtlas; + })(); + spine.TextureAtlas = TextureAtlas; + var TextureAtlasReader = (function() { + function TextureAtlasReader(text) { + this.index = 0; + this.lines = text.split(/\r\n|\r|\n/); + } + TextureAtlasReader.prototype.readLine = function() { + if (this.index >= this.lines.length) return null; + return this.lines[this.index++]; + }; + TextureAtlasReader.prototype.readValue = function() { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (-1 == colon) throw new Error("Invalid line: " + line); + return line.substring(colon + 1).trim(); + }; + TextureAtlasReader.prototype.readTuple = function(tuple) { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (-1 == colon) throw new Error("Invalid line: " + line); + var i = 0, lastMatch = colon + 1; + for (;i < 3; i++) { + var comma = line.indexOf(",", lastMatch); + if (-1 == comma) break; + tuple[i] = line.substr(lastMatch, comma - lastMatch).trim(); + lastMatch = comma + 1; + } + tuple[i] = line.substring(lastMatch).trim(); + return i + 1; + }; + return TextureAtlasReader; + })(); + var TextureAtlasPage = (function() { + function TextureAtlasPage() {} + return TextureAtlasPage; + })(); + spine.TextureAtlasPage = TextureAtlasPage; + var TextureAtlasRegion = (function(_super) { + __extends(TextureAtlasRegion, _super); + function TextureAtlasRegion() { + return null !== _super && _super.apply(this, arguments) || this; + } + return TextureAtlasRegion; + })(spine.TextureRegion); + spine.TextureAtlasRegion = TextureAtlasRegion; + })(spine || (spine = {})); + var spine; + (function(spine) { + var TransformConstraint = (function() { + function TransformConstraint(data, skeleton) { + this.rotateMix = 0; + this.translateMix = 0; + this.scaleMix = 0; + this.shearMix = 0; + this.temp = new spine.Vector2(); + this.active = false; + if (null == data) throw new Error("data cannot be null."); + if (null == skeleton) throw new Error("skeleton cannot be null."); + this.data = data; + this.rotateMix = data.rotateMix; + this.translateMix = data.translateMix; + this.scaleMix = data.scaleMix; + this.shearMix = data.shearMix; + this.bones = new Array(); + for (var i = 0; i < data.bones.length; i++) this.bones.push(skeleton.findBone(data.bones[i].name)); + this.target = skeleton.findBone(data.target.name); + } + TransformConstraint.prototype.isActive = function() { + return this.active; + }; + TransformConstraint.prototype.apply = function() { + this.update(); + }; + TransformConstraint.prototype.update = function() { + this.data.local ? this.data.relative ? this.applyRelativeLocal() : this.applyAbsoluteLocal() : this.data.relative ? this.applyRelativeWorld() : this.applyAbsoluteWorld(); + }; + TransformConstraint.prototype.applyAbsoluteWorld = function() { + var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix; + var target = this.target; + var ta = target.a, tb = target.b, tc = target.c, td = target.d; + var degRadReflect = ta * td - tb * tc > 0 ? spine.MathUtils.degRad : -spine.MathUtils.degRad; + var offsetRotation = this.data.offsetRotation * degRadReflect; + var offsetShearY = this.data.offsetShearY * degRadReflect; + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + var modified = false; + if (0 != rotateMix) { + var a = bone.a, b = bone.b, c = bone.c, d = bone.d; + var r = Math.atan2(tc, ta) - Math.atan2(c, a) + offsetRotation; + r > spine.MathUtils.PI ? r -= spine.MathUtils.PI2 : r < -spine.MathUtils.PI && (r += spine.MathUtils.PI2); + r *= rotateMix; + var cos = Math.cos(r), sin = Math.sin(r); + bone.a = cos * a - sin * c; + bone.b = cos * b - sin * d; + bone.c = sin * a + cos * c; + bone.d = sin * b + cos * d; + modified = true; + } + if (0 != translateMix) { + var temp = this.temp; + target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY)); + bone.worldX += (temp.x - bone.worldX) * translateMix; + bone.worldY += (temp.y - bone.worldY) * translateMix; + modified = true; + } + if (scaleMix > 0) { + var s = Math.sqrt(bone.a * bone.a + bone.c * bone.c); + var ts = Math.sqrt(ta * ta + tc * tc); + s > 1e-5 && (s = (s + (ts - s + this.data.offsetScaleX) * scaleMix) / s); + bone.a *= s; + bone.c *= s; + s = Math.sqrt(bone.b * bone.b + bone.d * bone.d); + ts = Math.sqrt(tb * tb + td * td); + s > 1e-5 && (s = (s + (ts - s + this.data.offsetScaleY) * scaleMix) / s); + bone.b *= s; + bone.d *= s; + modified = true; + } + if (shearMix > 0) { + var b = bone.b, d = bone.d; + var by = Math.atan2(d, b); + var r = Math.atan2(td, tb) - Math.atan2(tc, ta) - (by - Math.atan2(bone.c, bone.a)); + r > spine.MathUtils.PI ? r -= spine.MathUtils.PI2 : r < -spine.MathUtils.PI && (r += spine.MathUtils.PI2); + r = by + (r + offsetShearY) * shearMix; + var s = Math.sqrt(b * b + d * d); + bone.b = Math.cos(r) * s; + bone.d = Math.sin(r) * s; + modified = true; + } + modified && (bone.appliedValid = false); + } + }; + TransformConstraint.prototype.applyRelativeWorld = function() { + var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix; + var target = this.target; + var ta = target.a, tb = target.b, tc = target.c, td = target.d; + var degRadReflect = ta * td - tb * tc > 0 ? spine.MathUtils.degRad : -spine.MathUtils.degRad; + var offsetRotation = this.data.offsetRotation * degRadReflect, offsetShearY = this.data.offsetShearY * degRadReflect; + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + var modified = false; + if (0 != rotateMix) { + var a = bone.a, b = bone.b, c = bone.c, d = bone.d; + var r = Math.atan2(tc, ta) + offsetRotation; + r > spine.MathUtils.PI ? r -= spine.MathUtils.PI2 : r < -spine.MathUtils.PI && (r += spine.MathUtils.PI2); + r *= rotateMix; + var cos = Math.cos(r), sin = Math.sin(r); + bone.a = cos * a - sin * c; + bone.b = cos * b - sin * d; + bone.c = sin * a + cos * c; + bone.d = sin * b + cos * d; + modified = true; + } + if (0 != translateMix) { + var temp = this.temp; + target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY)); + bone.worldX += temp.x * translateMix; + bone.worldY += temp.y * translateMix; + modified = true; + } + if (scaleMix > 0) { + var s = (Math.sqrt(ta * ta + tc * tc) - 1 + this.data.offsetScaleX) * scaleMix + 1; + bone.a *= s; + bone.c *= s; + s = (Math.sqrt(tb * tb + td * td) - 1 + this.data.offsetScaleY) * scaleMix + 1; + bone.b *= s; + bone.d *= s; + modified = true; + } + if (shearMix > 0) { + var r = Math.atan2(td, tb) - Math.atan2(tc, ta); + r > spine.MathUtils.PI ? r -= spine.MathUtils.PI2 : r < -spine.MathUtils.PI && (r += spine.MathUtils.PI2); + var b = bone.b, d = bone.d; + r = Math.atan2(d, b) + (r - spine.MathUtils.PI / 2 + offsetShearY) * shearMix; + var s = Math.sqrt(b * b + d * d); + bone.b = Math.cos(r) * s; + bone.d = Math.sin(r) * s; + modified = true; + } + modified && (bone.appliedValid = false); + } + }; + TransformConstraint.prototype.applyAbsoluteLocal = function() { + var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix; + var target = this.target; + target.appliedValid || target.updateAppliedTransform(); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + bone.appliedValid || bone.updateAppliedTransform(); + var rotation = bone.arotation; + if (0 != rotateMix) { + var r = target.arotation - rotation + this.data.offsetRotation; + r -= 360 * (16384 - (16384.499999999996 - r / 360 | 0)); + rotation += r * rotateMix; + } + var x = bone.ax, y = bone.ay; + if (0 != translateMix) { + x += (target.ax - x + this.data.offsetX) * translateMix; + y += (target.ay - y + this.data.offsetY) * translateMix; + } + var scaleX = bone.ascaleX, scaleY = bone.ascaleY; + if (0 != scaleMix) { + scaleX > 1e-5 && (scaleX = (scaleX + (target.ascaleX - scaleX + this.data.offsetScaleX) * scaleMix) / scaleX); + scaleY > 1e-5 && (scaleY = (scaleY + (target.ascaleY - scaleY + this.data.offsetScaleY) * scaleMix) / scaleY); + } + var shearY = bone.ashearY; + if (0 != shearMix) { + var r = target.ashearY - shearY + this.data.offsetShearY; + r -= 360 * (16384 - (16384.499999999996 - r / 360 | 0)); + bone.shearY += r * shearMix; + } + bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY); + } + }; + TransformConstraint.prototype.applyRelativeLocal = function() { + var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix; + var target = this.target; + target.appliedValid || target.updateAppliedTransform(); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + bone.appliedValid || bone.updateAppliedTransform(); + var rotation = bone.arotation; + 0 != rotateMix && (rotation += (target.arotation + this.data.offsetRotation) * rotateMix); + var x = bone.ax, y = bone.ay; + if (0 != translateMix) { + x += (target.ax + this.data.offsetX) * translateMix; + y += (target.ay + this.data.offsetY) * translateMix; + } + var scaleX = bone.ascaleX, scaleY = bone.ascaleY; + if (0 != scaleMix) { + scaleX > 1e-5 && (scaleX *= (target.ascaleX - 1 + this.data.offsetScaleX) * scaleMix + 1); + scaleY > 1e-5 && (scaleY *= (target.ascaleY - 1 + this.data.offsetScaleY) * scaleMix + 1); + } + var shearY = bone.ashearY; + 0 != shearMix && (shearY += (target.ashearY + this.data.offsetShearY) * shearMix); + bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY); + } + }; + return TransformConstraint; + })(); + spine.TransformConstraint = TransformConstraint; + })(spine || (spine = {})); + var spine; + (function(spine) { + var TransformConstraintData = (function(_super) { + __extends(TransformConstraintData, _super); + function TransformConstraintData(name) { + var _this = _super.call(this, name, 0, false) || this; + _this.bones = new Array(); + _this.rotateMix = 0; + _this.translateMix = 0; + _this.scaleMix = 0; + _this.shearMix = 0; + _this.offsetRotation = 0; + _this.offsetX = 0; + _this.offsetY = 0; + _this.offsetScaleX = 0; + _this.offsetScaleY = 0; + _this.offsetShearY = 0; + _this.relative = false; + _this.local = false; + return _this; + } + return TransformConstraintData; + })(spine.ConstraintData); + spine.TransformConstraintData = TransformConstraintData; + })(spine || (spine = {})); + var spine; + (function(spine) { + var Triangulator = (function() { + function Triangulator() { + this.convexPolygons = new Array(); + this.convexPolygonsIndices = new Array(); + this.indicesArray = new Array(); + this.isConcaveArray = new Array(); + this.triangles = new Array(); + this.polygonPool = new spine.Pool(function() { + return new Array(); + }); + this.polygonIndicesPool = new spine.Pool(function() { + return new Array(); + }); + } + Triangulator.prototype.triangulate = function(verticesArray) { + var vertices = verticesArray; + var vertexCount = verticesArray.length >> 1; + var indices = this.indicesArray; + indices.length = 0; + for (var i = 0; i < vertexCount; i++) indices[i] = i; + var isConcave = this.isConcaveArray; + isConcave.length = 0; + for (var i = 0, n = vertexCount; i < n; ++i) isConcave[i] = Triangulator.isConcave(i, vertexCount, vertices, indices); + var triangles = this.triangles; + triangles.length = 0; + while (vertexCount > 3) { + var previous = vertexCount - 1, i = 0, next = 1; + while (true) { + outer: if (!isConcave[i]) { + var p1 = indices[previous] << 1, p2 = indices[i] << 1, p3 = indices[next] << 1; + var p1x = vertices[p1], p1y = vertices[p1 + 1]; + var p2x = vertices[p2], p2y = vertices[p2 + 1]; + var p3x = vertices[p3], p3y = vertices[p3 + 1]; + for (var ii = (next + 1) % vertexCount; ii != previous; ii = (ii + 1) % vertexCount) { + if (!isConcave[ii]) continue; + var v = indices[ii] << 1; + var vx = vertices[v], vy = vertices[v + 1]; + if (Triangulator.positiveArea(p3x, p3y, p1x, p1y, vx, vy) && Triangulator.positiveArea(p1x, p1y, p2x, p2y, vx, vy) && Triangulator.positiveArea(p2x, p2y, p3x, p3y, vx, vy)) break outer; + } + break; + } + if (0 == next) { + do { + if (!isConcave[i]) break; + i--; + } while (i > 0); + break; + } + previous = i; + i = next; + next = (next + 1) % vertexCount; + } + triangles.push(indices[(vertexCount + i - 1) % vertexCount]); + triangles.push(indices[i]); + triangles.push(indices[(i + 1) % vertexCount]); + indices.splice(i, 1); + isConcave.splice(i, 1); + vertexCount--; + var previousIndex = (vertexCount + i - 1) % vertexCount; + var nextIndex = i == vertexCount ? 0 : i; + isConcave[previousIndex] = Triangulator.isConcave(previousIndex, vertexCount, vertices, indices); + isConcave[nextIndex] = Triangulator.isConcave(nextIndex, vertexCount, vertices, indices); + } + if (3 == vertexCount) { + triangles.push(indices[2]); + triangles.push(indices[0]); + triangles.push(indices[1]); + } + return triangles; + }; + Triangulator.prototype.decompose = function(verticesArray, triangles) { + var vertices = verticesArray; + var convexPolygons = this.convexPolygons; + this.polygonPool.freeAll(convexPolygons); + convexPolygons.length = 0; + var convexPolygonsIndices = this.convexPolygonsIndices; + this.polygonIndicesPool.freeAll(convexPolygonsIndices); + convexPolygonsIndices.length = 0; + var polygonIndices = this.polygonIndicesPool.obtain(); + polygonIndices.length = 0; + var polygon = this.polygonPool.obtain(); + polygon.length = 0; + var fanBaseIndex = -1, lastWinding = 0; + for (var i = 0, n = triangles.length; i < n; i += 3) { + var t1 = triangles[i] << 1, t2 = triangles[i + 1] << 1, t3 = triangles[i + 2] << 1; + var x1 = vertices[t1], y1 = vertices[t1 + 1]; + var x2 = vertices[t2], y2 = vertices[t2 + 1]; + var x3 = vertices[t3], y3 = vertices[t3 + 1]; + var merged = false; + if (fanBaseIndex == t1) { + var o = polygon.length - 4; + var winding1 = Triangulator.winding(polygon[o], polygon[o + 1], polygon[o + 2], polygon[o + 3], x3, y3); + var winding2 = Triangulator.winding(x3, y3, polygon[0], polygon[1], polygon[2], polygon[3]); + if (winding1 == lastWinding && winding2 == lastWinding) { + polygon.push(x3); + polygon.push(y3); + polygonIndices.push(t3); + merged = true; + } + } + if (!merged) { + if (polygon.length > 0) { + convexPolygons.push(polygon); + convexPolygonsIndices.push(polygonIndices); + } else { + this.polygonPool.free(polygon); + this.polygonIndicesPool.free(polygonIndices); + } + polygon = this.polygonPool.obtain(); + polygon.length = 0; + polygon.push(x1); + polygon.push(y1); + polygon.push(x2); + polygon.push(y2); + polygon.push(x3); + polygon.push(y3); + polygonIndices = this.polygonIndicesPool.obtain(); + polygonIndices.length = 0; + polygonIndices.push(t1); + polygonIndices.push(t2); + polygonIndices.push(t3); + lastWinding = Triangulator.winding(x1, y1, x2, y2, x3, y3); + fanBaseIndex = t1; + } + } + if (polygon.length > 0) { + convexPolygons.push(polygon); + convexPolygonsIndices.push(polygonIndices); + } + for (var i = 0, n = convexPolygons.length; i < n; i++) { + polygonIndices = convexPolygonsIndices[i]; + if (0 == polygonIndices.length) continue; + var firstIndex = polygonIndices[0]; + var lastIndex = polygonIndices[polygonIndices.length - 1]; + polygon = convexPolygons[i]; + var o = polygon.length - 4; + var prevPrevX = polygon[o], prevPrevY = polygon[o + 1]; + var prevX = polygon[o + 2], prevY = polygon[o + 3]; + var firstX = polygon[0], firstY = polygon[1]; + var secondX = polygon[2], secondY = polygon[3]; + var winding = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, firstX, firstY); + for (var ii = 0; ii < n; ii++) { + if (ii == i) continue; + var otherIndices = convexPolygonsIndices[ii]; + if (3 != otherIndices.length) continue; + var otherFirstIndex = otherIndices[0]; + var otherSecondIndex = otherIndices[1]; + var otherLastIndex = otherIndices[2]; + var otherPoly = convexPolygons[ii]; + var x3 = otherPoly[otherPoly.length - 2], y3 = otherPoly[otherPoly.length - 1]; + if (otherFirstIndex != firstIndex || otherSecondIndex != lastIndex) continue; + var winding1 = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, x3, y3); + var winding2 = Triangulator.winding(x3, y3, firstX, firstY, secondX, secondY); + if (winding1 == winding && winding2 == winding) { + otherPoly.length = 0; + otherIndices.length = 0; + polygon.push(x3); + polygon.push(y3); + polygonIndices.push(otherLastIndex); + prevPrevX = prevX; + prevPrevY = prevY; + prevX = x3; + prevY = y3; + ii = 0; + } + } + } + for (var i = convexPolygons.length - 1; i >= 0; i--) { + polygon = convexPolygons[i]; + if (0 == polygon.length) { + convexPolygons.splice(i, 1); + this.polygonPool.free(polygon); + polygonIndices = convexPolygonsIndices[i]; + convexPolygonsIndices.splice(i, 1); + this.polygonIndicesPool.free(polygonIndices); + } + } + return convexPolygons; + }; + Triangulator.isConcave = function(index, vertexCount, vertices, indices) { + var previous = indices[(vertexCount + index - 1) % vertexCount] << 1; + var current = indices[index] << 1; + var next = indices[(index + 1) % vertexCount] << 1; + return !this.positiveArea(vertices[previous], vertices[previous + 1], vertices[current], vertices[current + 1], vertices[next], vertices[next + 1]); + }; + Triangulator.positiveArea = function(p1x, p1y, p2x, p2y, p3x, p3y) { + return p1x * (p3y - p2y) + p2x * (p1y - p3y) + p3x * (p2y - p1y) >= 0; + }; + Triangulator.winding = function(p1x, p1y, p2x, p2y, p3x, p3y) { + var px = p2x - p1x, py = p2y - p1y; + return p3x * py - p3y * px + px * p1y - p1x * py >= 0 ? 1 : -1; + }; + return Triangulator; + })(); + spine.Triangulator = Triangulator; + })(spine || (spine = {})); + var spine; + (function(spine) { + var IntSet = (function() { + function IntSet() { + this.array = new Array(); + } + IntSet.prototype.add = function(value) { + var contains = this.contains(value); + this.array[0 | value] = 0 | value; + return !contains; + }; + IntSet.prototype.contains = function(value) { + return void 0 != this.array[0 | value]; + }; + IntSet.prototype.remove = function(value) { + this.array[0 | value] = void 0; + }; + IntSet.prototype.clear = function() { + this.array.length = 0; + }; + return IntSet; + })(); + spine.IntSet = IntSet; + var Color = (function() { + function Color(r, g, b, a) { + void 0 === r && (r = 0); + void 0 === g && (g = 0); + void 0 === b && (b = 0); + void 0 === a && (a = 0); + this.r = r; + this.g = g; + this.b = b; + this.a = a; + } + Color.prototype.set = function(r, g, b, a) { + this.r = r; + this.g = g; + this.b = b; + this.a = a; + this.clamp(); + return this; + }; + Color.prototype.setFromColor = function(c) { + this.r = c.r; + this.g = c.g; + this.b = c.b; + this.a = c.a; + return this; + }; + Color.prototype.setFromString = function(hex) { + hex = "#" == hex.charAt(0) ? hex.substr(1) : hex; + this.r = parseInt(hex.substr(0, 2), 16) / 255; + this.g = parseInt(hex.substr(2, 2), 16) / 255; + this.b = parseInt(hex.substr(4, 2), 16) / 255; + this.a = (8 != hex.length ? 255 : parseInt(hex.substr(6, 2), 16)) / 255; + return this; + }; + Color.prototype.add = function(r, g, b, a) { + this.r += r; + this.g += g; + this.b += b; + this.a += a; + this.clamp(); + return this; + }; + Color.prototype.clamp = function() { + this.r < 0 ? this.r = 0 : this.r > 1 && (this.r = 1); + this.g < 0 ? this.g = 0 : this.g > 1 && (this.g = 1); + this.b < 0 ? this.b = 0 : this.b > 1 && (this.b = 1); + this.a < 0 ? this.a = 0 : this.a > 1 && (this.a = 1); + return this; + }; + Color.rgba8888ToColor = function(color, value) { + color.r = ((4278190080 & value) >>> 24) / 255; + color.g = ((16711680 & value) >>> 16) / 255; + color.b = ((65280 & value) >>> 8) / 255; + color.a = (255 & value) / 255; + }; + Color.rgb888ToColor = function(color, value) { + color.r = ((16711680 & value) >>> 16) / 255; + color.g = ((65280 & value) >>> 8) / 255; + color.b = (255 & value) / 255; + }; + Color.WHITE = new Color(1, 1, 1, 1); + Color.RED = new Color(1, 0, 0, 1); + Color.GREEN = new Color(0, 1, 0, 1); + Color.BLUE = new Color(0, 0, 1, 1); + Color.MAGENTA = new Color(1, 0, 1, 1); + return Color; + })(); + spine.Color = Color; + var MathUtils = (function() { + function MathUtils() {} + MathUtils.clamp = function(value, min, max) { + if (value < min) return min; + if (value > max) return max; + return value; + }; + MathUtils.cosDeg = function(degrees) { + return Math.cos(degrees * MathUtils.degRad); + }; + MathUtils.sinDeg = function(degrees) { + return Math.sin(degrees * MathUtils.degRad); + }; + MathUtils.signum = function(value) { + return value > 0 ? 1 : value < 0 ? -1 : 0; + }; + MathUtils.toInt = function(x) { + return x > 0 ? Math.floor(x) : Math.ceil(x); + }; + MathUtils.cbrt = function(x) { + var y = Math.pow(Math.abs(x), 1 / 3); + return x < 0 ? -y : y; + }; + MathUtils.randomTriangular = function(min, max) { + return MathUtils.randomTriangularWith(min, max, .5 * (min + max)); + }; + MathUtils.randomTriangularWith = function(min, max, mode) { + var u = Math.random(); + var d = max - min; + if (u <= (mode - min) / d) return min + Math.sqrt(u * d * (mode - min)); + return max - Math.sqrt((1 - u) * d * (max - mode)); + }; + MathUtils.PI = 3.1415927; + MathUtils.PI2 = 2 * MathUtils.PI; + MathUtils.radiansToDegrees = 180 / MathUtils.PI; + MathUtils.radDeg = MathUtils.radiansToDegrees; + MathUtils.degreesToRadians = MathUtils.PI / 180; + MathUtils.degRad = MathUtils.degreesToRadians; + return MathUtils; + })(); + spine.MathUtils = MathUtils; + var Interpolation = (function() { + function Interpolation() {} + Interpolation.prototype.apply = function(start, end, a) { + return start + (end - start) * this.applyInternal(a); + }; + return Interpolation; + })(); + spine.Interpolation = Interpolation; + var Pow = (function(_super) { + __extends(Pow, _super); + function Pow(power) { + var _this = _super.call(this) || this; + _this.power = 2; + _this.power = power; + return _this; + } + Pow.prototype.applyInternal = function(a) { + if (a <= .5) return Math.pow(2 * a, this.power) / 2; + return Math.pow(2 * (a - 1), this.power) / (this.power % 2 == 0 ? -2 : 2) + 1; + }; + return Pow; + })(Interpolation); + spine.Pow = Pow; + var PowOut = (function(_super) { + __extends(PowOut, _super); + function PowOut(power) { + return _super.call(this, power) || this; + } + PowOut.prototype.applyInternal = function(a) { + return Math.pow(a - 1, this.power) * (this.power % 2 == 0 ? -1 : 1) + 1; + }; + return PowOut; + })(Pow); + spine.PowOut = PowOut; + var Utils = (function() { + function Utils() {} + Utils.arrayCopy = function(source, sourceStart, dest, destStart, numElements) { + for (var i = sourceStart, j = destStart; i < sourceStart + numElements; i++, j++) dest[j] = source[i]; + }; + Utils.setArraySize = function(array, size, value) { + void 0 === value && (value = 0); + var oldSize = array.length; + if (oldSize == size) return array; + array.length = size; + if (oldSize < size) for (var i = oldSize; i < size; i++) array[i] = value; + return array; + }; + Utils.ensureArrayCapacity = function(array, size, value) { + void 0 === value && (value = 0); + if (array.length >= size) return array; + return Utils.setArraySize(array, size, value); + }; + Utils.newArray = function(size, defaultValue) { + var array = new Array(size); + for (var i = 0; i < size; i++) array[i] = defaultValue; + return array; + }; + Utils.newFloatArray = function(size) { + if (Utils.SUPPORTS_TYPED_ARRAYS) return new Float32Array(size); + var array = new Array(size); + for (var i = 0; i < array.length; i++) array[i] = 0; + return array; + }; + Utils.newShortArray = function(size) { + if (Utils.SUPPORTS_TYPED_ARRAYS) return new Int16Array(size); + var array = new Array(size); + for (var i = 0; i < array.length; i++) array[i] = 0; + return array; + }; + Utils.toFloatArray = function(array) { + return Utils.SUPPORTS_TYPED_ARRAYS ? new Float32Array(array) : array; + }; + Utils.toSinglePrecision = function(value) { + return Utils.SUPPORTS_TYPED_ARRAYS ? Math.fround(value) : value; + }; + Utils.webkit602BugfixHelper = function(alpha, blend) {}; + Utils.contains = function(array, element, identity) { + void 0 === identity && (identity = true); + for (var i = 0; i < array.length; i++) if (array[i] == element) return true; + return false; + }; + Utils.SUPPORTS_TYPED_ARRAYS = "undefined" !== typeof Float32Array; + return Utils; + })(); + spine.Utils = Utils; + var DebugUtils = (function() { + function DebugUtils() {} + DebugUtils.logBones = function(skeleton) { + for (var i = 0; i < skeleton.bones.length; i++) { + var bone = skeleton.bones[i]; + console.log(bone.data.name + ", " + bone.a + ", " + bone.b + ", " + bone.c + ", " + bone.d + ", " + bone.worldX + ", " + bone.worldY); + } + }; + return DebugUtils; + })(); + spine.DebugUtils = DebugUtils; + var Pool = (function() { + function Pool(instantiator) { + this.items = new Array(); + this.instantiator = instantiator; + } + Pool.prototype.obtain = function() { + return this.items.length > 0 ? this.items.pop() : this.instantiator(); + }; + Pool.prototype.free = function(item) { + item.reset && item.reset(); + this.items.push(item); + }; + Pool.prototype.freeAll = function(items) { + for (var i = 0; i < items.length; i++) { + items[i].reset && items[i].reset(); + this.items[i] = items[i]; + } + }; + Pool.prototype.clear = function() { + this.items.length = 0; + }; + return Pool; + })(); + spine.Pool = Pool; + var Vector2 = (function() { + function Vector2(x, y) { + void 0 === x && (x = 0); + void 0 === y && (y = 0); + this.x = x; + this.y = y; + } + Vector2.prototype.set = function(x, y) { + this.x = x; + this.y = y; + return this; + }; + Vector2.prototype.length = function() { + var x = this.x; + var y = this.y; + return Math.sqrt(x * x + y * y); + }; + Vector2.prototype.normalize = function() { + var len = this.length(); + if (0 != len) { + this.x /= len; + this.y /= len; + } + return this; + }; + return Vector2; + })(); + spine.Vector2 = Vector2; + var TimeKeeper = (function() { + function TimeKeeper() { + this.maxDelta = .064; + this.framesPerSecond = 0; + this.delta = 0; + this.totalTime = 0; + this.lastTime = Date.now() / 1e3; + this.frameCount = 0; + this.frameTime = 0; + } + TimeKeeper.prototype.update = function() { + var now = Date.now() / 1e3; + this.delta = now - this.lastTime; + this.frameTime += this.delta; + this.totalTime += this.delta; + this.delta > this.maxDelta && (this.delta = this.maxDelta); + this.lastTime = now; + this.frameCount++; + if (this.frameTime > 1) { + this.framesPerSecond = this.frameCount / this.frameTime; + this.frameTime = 0; + this.frameCount = 0; + } + }; + return TimeKeeper; + })(); + spine.TimeKeeper = TimeKeeper; + var WindowedMean = (function() { + function WindowedMean(windowSize) { + void 0 === windowSize && (windowSize = 32); + this.addedValues = 0; + this.lastValue = 0; + this.mean = 0; + this.dirty = true; + this.values = new Array(windowSize); + } + WindowedMean.prototype.hasEnoughData = function() { + return this.addedValues >= this.values.length; + }; + WindowedMean.prototype.addValue = function(value) { + this.addedValues < this.values.length && this.addedValues++; + this.values[this.lastValue++] = value; + this.lastValue > this.values.length - 1 && (this.lastValue = 0); + this.dirty = true; + }; + WindowedMean.prototype.getMean = function() { + if (this.hasEnoughData()) { + if (this.dirty) { + var mean = 0; + for (var i = 0; i < this.values.length; i++) mean += this.values[i]; + this.mean = mean / this.values.length; + this.dirty = false; + } + return this.mean; + } + return 0; + }; + return WindowedMean; + })(); + spine.WindowedMean = WindowedMean; + })(spine || (spine = {})); + (function() { + Math.fround || (Math.fround = (function(array) { + return function(x) { + return array[0] = x, array[0]; + }; + })(new Float32Array(1))); + })(); + var spine; + (function(spine) { + var Attachment = (function() { + function Attachment(name) { + if (null == name) throw new Error("name cannot be null."); + this.name = name; + } + return Attachment; + })(); + spine.Attachment = Attachment; + var VertexAttachment = (function(_super) { + __extends(VertexAttachment, _super); + function VertexAttachment(name) { + var _this = _super.call(this, name) || this; + _this.id = (65535 & VertexAttachment.nextID++) << 11; + _this.worldVerticesLength = 0; + _this.deformAttachment = _this; + return _this; + } + VertexAttachment.prototype.computeWorldVertices = function(slot, start, count, worldVertices, offset, stride) { + count = offset + (count >> 1) * stride; + var skeleton = slot.bone.skeleton; + var deformArray = slot.deform; + var vertices = this.vertices; + var bones = this.bones; + if (null == bones) { + deformArray.length > 0 && (vertices = deformArray); + var bone = slot.bone; + var x = bone.worldX; + var y = bone.worldY; + var a = bone.a, b = bone.b, c = bone.c, d = bone.d; + for (var v_1 = start, w = offset; w < count; v_1 += 2, w += stride) { + var vx = vertices[v_1], vy = vertices[v_1 + 1]; + worldVertices[w] = vx * a + vy * b + x; + worldVertices[w + 1] = vx * c + vy * d + y; + } + return; + } + var v = 0, skip = 0; + for (var i = 0; i < start; i += 2) { + var n = bones[v]; + v += n + 1; + skip += n; + } + var skeletonBones = skeleton.bones; + if (0 == deformArray.length) for (var w = offset, b = 3 * skip; w < count; w += stride) { + var wx = 0, wy = 0; + var n = bones[v++]; + n += v; + for (;v < n; v++, b += 3) { + var bone = skeletonBones[bones[v]]; + var vx = vertices[b], vy = vertices[b + 1], weight = vertices[b + 2]; + wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight; + wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight; + } + worldVertices[w] = wx; + worldVertices[w + 1] = wy; + } else { + var deform = deformArray; + for (var w = offset, b = 3 * skip, f = skip << 1; w < count; w += stride) { + var wx = 0, wy = 0; + var n = bones[v++]; + n += v; + for (;v < n; v++, b += 3, f += 2) { + var bone = skeletonBones[bones[v]]; + var vx = vertices[b] + deform[f], vy = vertices[b + 1] + deform[f + 1], weight = vertices[b + 2]; + wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight; + wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight; + } + worldVertices[w] = wx; + worldVertices[w + 1] = wy; + } + } + }; + VertexAttachment.prototype.copyTo = function(attachment) { + if (null != this.bones) { + attachment.bones = new Array(this.bones.length); + spine.Utils.arrayCopy(this.bones, 0, attachment.bones, 0, this.bones.length); + } else attachment.bones = null; + if (null != this.vertices) { + attachment.vertices = spine.Utils.newFloatArray(this.vertices.length); + spine.Utils.arrayCopy(this.vertices, 0, attachment.vertices, 0, this.vertices.length); + } else attachment.vertices = null; + attachment.worldVerticesLength = this.worldVerticesLength; + attachment.deformAttachment = this.deformAttachment; + }; + VertexAttachment.nextID = 0; + return VertexAttachment; + })(Attachment); + spine.VertexAttachment = VertexAttachment; + })(spine || (spine = {})); + var spine; + (function(spine) { + var AttachmentType; + (function(AttachmentType) { + AttachmentType[AttachmentType["Region"] = 0] = "Region"; + AttachmentType[AttachmentType["BoundingBox"] = 1] = "BoundingBox"; + AttachmentType[AttachmentType["Mesh"] = 2] = "Mesh"; + AttachmentType[AttachmentType["LinkedMesh"] = 3] = "LinkedMesh"; + AttachmentType[AttachmentType["Path"] = 4] = "Path"; + AttachmentType[AttachmentType["Point"] = 5] = "Point"; + AttachmentType[AttachmentType["Clipping"] = 6] = "Clipping"; + })(AttachmentType = spine.AttachmentType || (spine.AttachmentType = {})); + })(spine || (spine = {})); + var spine; + (function(spine) { + var BoundingBoxAttachment = (function(_super) { + __extends(BoundingBoxAttachment, _super); + function BoundingBoxAttachment(name) { + var _this = _super.call(this, name) || this; + _this.color = new spine.Color(1, 1, 1, 1); + return _this; + } + BoundingBoxAttachment.prototype.copy = function() { + var copy = new BoundingBoxAttachment(name); + this.copyTo(copy); + copy.color.setFromColor(this.color); + return copy; + }; + return BoundingBoxAttachment; + })(spine.VertexAttachment); + spine.BoundingBoxAttachment = BoundingBoxAttachment; + })(spine || (spine = {})); + var spine; + (function(spine) { + var ClippingAttachment = (function(_super) { + __extends(ClippingAttachment, _super); + function ClippingAttachment(name) { + var _this = _super.call(this, name) || this; + _this.color = new spine.Color(.2275, .2275, .8078, 1); + return _this; + } + ClippingAttachment.prototype.copy = function() { + var copy = new ClippingAttachment(name); + this.copyTo(copy); + copy.endSlot = this.endSlot; + copy.color.setFromColor(this.color); + return copy; + }; + return ClippingAttachment; + })(spine.VertexAttachment); + spine.ClippingAttachment = ClippingAttachment; + })(spine || (spine = {})); + var spine; + (function(spine) { + var MeshAttachment = (function(_super) { + __extends(MeshAttachment, _super); + function MeshAttachment(name) { + var _this = _super.call(this, name) || this; + _this.color = new spine.Color(1, 1, 1, 1); + _this.tempColor = new spine.Color(0, 0, 0, 0); + return _this; + } + MeshAttachment.prototype.updateUVs = function() { + var regionUVs = this.regionUVs; + null != this.uvs && this.uvs.length == regionUVs.length || (this.uvs = spine.Utils.newFloatArray(regionUVs.length)); + var uvs = this.uvs; + var n = this.uvs.length; + var u = this.region.u, v = this.region.v, width = 0, height = 0; + if (this.region instanceof spine.TextureAtlasRegion) { + var region = this.region; + var textureWidth = region.texture.getImage().width, textureHeight = region.texture.getImage().height; + switch (region.degrees) { + case 90: + u -= (region.originalHeight - region.offsetY - region.height) / textureWidth; + v -= (region.originalWidth - region.offsetX - region.width) / textureHeight; + width = region.originalHeight / textureWidth; + height = region.originalWidth / textureHeight; + for (var i = 0; i < n; i += 2) { + uvs[i] = u + regionUVs[i + 1] * width; + uvs[i + 1] = v + (1 - regionUVs[i]) * height; + } + return; + + case 180: + u -= (region.originalWidth - region.offsetX - region.width) / textureWidth; + v -= region.offsetY / textureHeight; + width = region.originalWidth / textureWidth; + height = region.originalHeight / textureHeight; + for (var i = 0; i < n; i += 2) { + uvs[i] = u + (1 - regionUVs[i]) * width; + uvs[i + 1] = v + (1 - regionUVs[i + 1]) * height; + } + return; + + case 270: + u -= region.offsetY / textureWidth; + v -= region.offsetX / textureHeight; + width = region.originalHeight / textureWidth; + height = region.originalWidth / textureHeight; + for (var i = 0; i < n; i += 2) { + uvs[i] = u + (1 - regionUVs[i + 1]) * width; + uvs[i + 1] = v + regionUVs[i] * height; + } + return; + } + u -= region.offsetX / textureWidth; + v -= (region.originalHeight - region.offsetY - region.height) / textureHeight; + width = region.originalWidth / textureWidth; + height = region.originalHeight / textureHeight; + } else if (null == this.region) { + u = v = 0; + width = height = 1; + } else { + width = this.region.u2 - u; + height = this.region.v2 - v; + } + for (var i = 0; i < n; i += 2) { + uvs[i] = u + regionUVs[i] * width; + uvs[i + 1] = v + regionUVs[i + 1] * height; + } + }; + MeshAttachment.prototype.getParentMesh = function() { + return this.parentMesh; + }; + MeshAttachment.prototype.setParentMesh = function(parentMesh) { + this.parentMesh = parentMesh; + if (null != parentMesh) { + this.bones = parentMesh.bones; + this.vertices = parentMesh.vertices; + this.worldVerticesLength = parentMesh.worldVerticesLength; + this.regionUVs = parentMesh.regionUVs; + this.triangles = parentMesh.triangles; + this.hullLength = parentMesh.hullLength; + this.worldVerticesLength = parentMesh.worldVerticesLength; + } + }; + MeshAttachment.prototype.copy = function() { + if (null != this.parentMesh) return this.newLinkedMesh(); + var copy = new MeshAttachment(this.name); + copy.region = this.region; + copy.path = this.path; + copy.color.setFromColor(this.color); + this.copyTo(copy); + copy.regionUVs = new Array(this.regionUVs.length); + spine.Utils.arrayCopy(this.regionUVs, 0, copy.regionUVs, 0, this.regionUVs.length); + copy.uvs = new Array(this.uvs.length); + spine.Utils.arrayCopy(this.uvs, 0, copy.uvs, 0, this.uvs.length); + copy.triangles = new Array(this.triangles.length); + spine.Utils.arrayCopy(this.triangles, 0, copy.triangles, 0, this.triangles.length); + copy.hullLength = this.hullLength; + if (null != this.edges) { + copy.edges = new Array(this.edges.length); + spine.Utils.arrayCopy(this.edges, 0, copy.edges, 0, this.edges.length); + } + copy.width = this.width; + copy.height = this.height; + return copy; + }; + MeshAttachment.prototype.newLinkedMesh = function() { + var copy = new MeshAttachment(this.name); + copy.region = this.region; + copy.path = this.path; + copy.color.setFromColor(this.color); + copy.deformAttachment = this.deformAttachment; + copy.setParentMesh(null != this.parentMesh ? this.parentMesh : this); + copy.updateUVs(); + return copy; + }; + return MeshAttachment; + })(spine.VertexAttachment); + spine.MeshAttachment = MeshAttachment; + })(spine || (spine = {})); + var spine; + (function(spine) { + var PathAttachment = (function(_super) { + __extends(PathAttachment, _super); + function PathAttachment(name) { + var _this = _super.call(this, name) || this; + _this.closed = false; + _this.constantSpeed = false; + _this.color = new spine.Color(1, 1, 1, 1); + return _this; + } + PathAttachment.prototype.copy = function() { + var copy = new PathAttachment(name); + this.copyTo(copy); + copy.lengths = new Array(this.lengths.length); + spine.Utils.arrayCopy(this.lengths, 0, copy.lengths, 0, this.lengths.length); + copy.closed = closed; + copy.constantSpeed = this.constantSpeed; + copy.color.setFromColor(this.color); + return copy; + }; + return PathAttachment; + })(spine.VertexAttachment); + spine.PathAttachment = PathAttachment; + })(spine || (spine = {})); + var spine; + (function(spine) { + var PointAttachment = (function(_super) { + __extends(PointAttachment, _super); + function PointAttachment(name) { + var _this = _super.call(this, name) || this; + _this.color = new spine.Color(.38, .94, 0, 1); + return _this; + } + PointAttachment.prototype.computeWorldPosition = function(bone, point) { + point.x = this.x * bone.a + this.y * bone.b + bone.worldX; + point.y = this.x * bone.c + this.y * bone.d + bone.worldY; + return point; + }; + PointAttachment.prototype.computeWorldRotation = function(bone) { + var cos = spine.MathUtils.cosDeg(this.rotation), sin = spine.MathUtils.sinDeg(this.rotation); + var x = cos * bone.a + sin * bone.b; + var y = cos * bone.c + sin * bone.d; + return Math.atan2(y, x) * spine.MathUtils.radDeg; + }; + PointAttachment.prototype.copy = function() { + var copy = new PointAttachment(name); + copy.x = this.x; + copy.y = this.y; + copy.rotation = this.rotation; + copy.color.setFromColor(this.color); + return copy; + }; + return PointAttachment; + })(spine.VertexAttachment); + spine.PointAttachment = PointAttachment; + })(spine || (spine = {})); + var spine; + (function(spine) { + var RegionAttachment = (function(_super) { + __extends(RegionAttachment, _super); + function RegionAttachment(name) { + var _this = _super.call(this, name) || this; + _this.x = 0; + _this.y = 0; + _this.scaleX = 1; + _this.scaleY = 1; + _this.rotation = 0; + _this.width = 0; + _this.height = 0; + _this.color = new spine.Color(1, 1, 1, 1); + _this.offset = spine.Utils.newFloatArray(8); + _this.uvs = spine.Utils.newFloatArray(8); + _this.tempColor = new spine.Color(1, 1, 1, 1); + return _this; + } + RegionAttachment.prototype.updateOffset = function() { + var regionScaleX = this.width / this.region.originalWidth * this.scaleX; + var regionScaleY = this.height / this.region.originalHeight * this.scaleY; + var localX = -this.width / 2 * this.scaleX + this.region.offsetX * regionScaleX; + var localY = -this.height / 2 * this.scaleY + this.region.offsetY * regionScaleY; + var localX2 = localX + this.region.width * regionScaleX; + var localY2 = localY + this.region.height * regionScaleY; + var radians = this.rotation * Math.PI / 180; + var cos = Math.cos(radians); + var sin = Math.sin(radians); + var localXCos = localX * cos + this.x; + var localXSin = localX * sin; + var localYCos = localY * cos + this.y; + var localYSin = localY * sin; + var localX2Cos = localX2 * cos + this.x; + var localX2Sin = localX2 * sin; + var localY2Cos = localY2 * cos + this.y; + var localY2Sin = localY2 * sin; + var offset = this.offset; + offset[RegionAttachment.OX1] = localXCos - localYSin; + offset[RegionAttachment.OY1] = localYCos + localXSin; + offset[RegionAttachment.OX2] = localXCos - localY2Sin; + offset[RegionAttachment.OY2] = localY2Cos + localXSin; + offset[RegionAttachment.OX3] = localX2Cos - localY2Sin; + offset[RegionAttachment.OY3] = localY2Cos + localX2Sin; + offset[RegionAttachment.OX4] = localX2Cos - localYSin; + offset[RegionAttachment.OY4] = localYCos + localX2Sin; + }; + RegionAttachment.prototype.setRegion = function(region) { + this.region = region; + var uvs = this.uvs; + if (90 === region.degrees) { + uvs[2] = region.u; + uvs[3] = region.v2; + uvs[4] = region.u; + uvs[5] = region.v; + uvs[6] = region.u2; + uvs[7] = region.v; + uvs[0] = region.u2; + uvs[1] = region.v2; + } else if (270 === region.degrees) { + uvs[6] = region.u; + uvs[7] = region.v2; + uvs[0] = region.u; + uvs[1] = region.v; + uvs[2] = region.u2; + uvs[3] = region.v; + uvs[4] = region.u2; + uvs[5] = region.v2; + } else { + uvs[0] = region.u; + uvs[1] = region.v2; + uvs[2] = region.u; + uvs[3] = region.v; + uvs[4] = region.u2; + uvs[5] = region.v; + uvs[6] = region.u2; + uvs[7] = region.v2; + } + }; + RegionAttachment.prototype.computeWorldVertices = function(bone, worldVertices, offset, stride) { + var vertexOffset = this.offset; + var x = bone.worldX, y = bone.worldY; + var a = bone.a, b = bone.b, c = bone.c, d = bone.d; + var offsetX = 0, offsetY = 0; + offsetX = vertexOffset[RegionAttachment.OX1]; + offsetY = vertexOffset[RegionAttachment.OY1]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + offsetX = vertexOffset[RegionAttachment.OX2]; + offsetY = vertexOffset[RegionAttachment.OY2]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + offsetX = vertexOffset[RegionAttachment.OX3]; + offsetY = vertexOffset[RegionAttachment.OY3]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + offsetX = vertexOffset[RegionAttachment.OX4]; + offsetY = vertexOffset[RegionAttachment.OY4]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + }; + RegionAttachment.prototype.copy = function() { + var copy = new RegionAttachment(name); + copy.region = this.region; + copy.rendererObject = this.rendererObject; + copy.path = this.path; + copy.x = this.x; + copy.y = this.y; + copy.scaleX = this.scaleX; + copy.scaleY = this.scaleY; + copy.rotation = this.rotation; + copy.width = this.width; + copy.height = this.height; + spine.Utils.arrayCopy(this.uvs, 0, copy.uvs, 0, 8); + spine.Utils.arrayCopy(this.offset, 0, copy.offset, 0, 8); + copy.color.setFromColor(this.color); + return copy; + }; + RegionAttachment.OX1 = 0; + RegionAttachment.OY1 = 1; + RegionAttachment.OX2 = 2; + RegionAttachment.OY2 = 3; + RegionAttachment.OX3 = 4; + RegionAttachment.OY3 = 5; + RegionAttachment.OX4 = 6; + RegionAttachment.OY4 = 7; + RegionAttachment.X1 = 0; + RegionAttachment.Y1 = 1; + RegionAttachment.C1R = 2; + RegionAttachment.C1G = 3; + RegionAttachment.C1B = 4; + RegionAttachment.C1A = 5; + RegionAttachment.U1 = 6; + RegionAttachment.V1 = 7; + RegionAttachment.X2 = 8; + RegionAttachment.Y2 = 9; + RegionAttachment.C2R = 10; + RegionAttachment.C2G = 11; + RegionAttachment.C2B = 12; + RegionAttachment.C2A = 13; + RegionAttachment.U2 = 14; + RegionAttachment.V2 = 15; + RegionAttachment.X3 = 16; + RegionAttachment.Y3 = 17; + RegionAttachment.C3R = 18; + RegionAttachment.C3G = 19; + RegionAttachment.C3B = 20; + RegionAttachment.C3A = 21; + RegionAttachment.U3 = 22; + RegionAttachment.V3 = 23; + RegionAttachment.X4 = 24; + RegionAttachment.Y4 = 25; + RegionAttachment.C4R = 26; + RegionAttachment.C4G = 27; + RegionAttachment.C4B = 28; + RegionAttachment.C4A = 29; + RegionAttachment.U4 = 30; + RegionAttachment.V4 = 31; + return RegionAttachment; + })(spine.Attachment); + spine.RegionAttachment = RegionAttachment; + })(spine || (spine = {})); + var spine; + (function(spine) { + var JitterEffect = (function() { + function JitterEffect(jitterX, jitterY) { + this.jitterX = 0; + this.jitterY = 0; + this.jitterX = jitterX; + this.jitterY = jitterY; + } + JitterEffect.prototype.begin = function(skeleton) {}; + JitterEffect.prototype.transform = function(position, uv, light, dark) { + position.x += spine.MathUtils.randomTriangular(-this.jitterX, this.jitterY); + position.y += spine.MathUtils.randomTriangular(-this.jitterX, this.jitterY); + }; + JitterEffect.prototype.end = function() {}; + return JitterEffect; + })(); + spine.JitterEffect = JitterEffect; + })(spine || (spine = {})); + var spine; + (function(spine) { + var SwirlEffect = (function() { + function SwirlEffect(radius, interpolation) { + this.centerX = 0; + this.centerY = 0; + this.radius = 0; + this.angle = 0; + this.worldX = 0; + this.worldY = 0; + this.radius = radius; + this.interpolation = interpolation; + } + SwirlEffect.prototype.begin = function(skeleton) { + this.worldX = skeleton.x + this.centerX; + this.worldY = skeleton.y + this.centerY; + }; + SwirlEffect.prototype.transform = function(position, uv, light, dark) { + var radAngle = this.angle * spine.MathUtils.degreesToRadians; + var x = position.x - this.worldX; + var y = position.y - this.worldY; + var dist = Math.sqrt(x * x + y * y); + if (dist < this.radius) { + var theta = this.interpolation.apply(0, radAngle, (this.radius - dist) / this.radius); + var cos = Math.cos(theta); + var sin = Math.sin(theta); + position.x = cos * x - sin * y + this.worldX; + position.y = sin * x + cos * y + this.worldY; + } + }; + SwirlEffect.prototype.end = function() {}; + SwirlEffect.interpolation = new spine.PowOut(2); + return SwirlEffect; + })(); + spine.SwirlEffect = SwirlEffect; + })(spine || (spine = {})); + module.exports = spine; + }), {} ], + 277: [ (function(require, module, exports) { + "use strict"; + var TrackEntryListeners = require("./track-entry-listeners"); + var spine = require("./lib/spine"); + var MaxCacheTime = 30; + var FrameTime = 1 / 60; + var _vertices = []; + var _indices = []; + var _boneInfoOffset = 0; + var _vertexOffset = 0; + var _indexOffset = 0; + var _vfOffset = 0; + var _preTexUrl = null; + var _preBlendMode = null; + var _segVCount = 0; + var _segICount = 0; + var _segOffset = 0; + var _colorOffset = 0; + var _preFinalColor = null; + var _preDarkColor = null; + var _perVertexSize = 6; + var _perClipVertexSize = 12; + var _vfCount = 0, _indexCount = 0; + var _tempr, _tempg, _tempb, _tempa; + var _finalColor32, _darkColor32; + var _finalColor = new spine.Color(1, 1, 1, 1); + var _darkColor = new spine.Color(1, 1, 1, 1); + var _quadTriangles = [ 0, 1, 2, 2, 3, 0 ]; + var AnimationCache = cc.Class({ + ctor: function ctor() { + this._privateMode = false; + this._inited = false; + this._invalid = true; + this._enableCacheAttachedInfo = false; + this.frames = []; + this.totalTime = 0; + this._frameIdx = -1; + this.isCompleted = false; + this._skeletonInfo = null; + this._animationName = null; + this._tempSegments = null; + this._tempColors = null; + this._tempBoneInfos = null; + }, + init: function init(skeletonInfo, animationName) { + this._inited = true; + this._animationName = animationName; + this._skeletonInfo = skeletonInfo; + }, + clear: function clear() { + this._inited = false; + for (var i = 0, n = this.frames.length; i < n; i++) { + var frame = this.frames[i]; + frame.segments.length = 0; + } + this.invalidAllFrame(); + }, + bind: function bind(listener) { + var completeHandle = function(entry) { + entry && entry.animation.name === this._animationName && (this.isCompleted = true); + }.bind(this); + listener.complete = completeHandle; + }, + unbind: function unbind(listener) { + listener.complete = null; + }, + begin: function begin() { + if (!this._invalid) return; + var skeletonInfo = this._skeletonInfo; + var preAnimationCache = skeletonInfo.curAnimationCache; + preAnimationCache && preAnimationCache !== this && (this._privateMode ? preAnimationCache.invalidAllFrame() : preAnimationCache.updateToFrame()); + var skeleton = skeletonInfo.skeleton; + var listener = skeletonInfo.listener; + var state = skeletonInfo.state; + var animation = skeleton.data.findAnimation(this._animationName); + state.setAnimationWith(0, animation, false); + this.bind(listener); + skeletonInfo.curAnimationCache = this; + this._frameIdx = -1; + this.isCompleted = false; + this.totalTime = 0; + this._invalid = false; + }, + end: function end() { + if (!this._needToUpdate()) { + this._skeletonInfo.curAnimationCache = null; + this.frames.length = this._frameIdx + 1; + this.isCompleted = true; + this.unbind(this._skeletonInfo.listener); + } + }, + _needToUpdate: function _needToUpdate(toFrameIdx) { + return !this.isCompleted && this.totalTime < MaxCacheTime && (void 0 == toFrameIdx || this._frameIdx < toFrameIdx); + }, + updateToFrame: function updateToFrame(toFrameIdx) { + if (!this._inited) return; + this.begin(); + if (!this._needToUpdate(toFrameIdx)) return; + var skeletonInfo = this._skeletonInfo; + var skeleton = skeletonInfo.skeleton; + var clipper = skeletonInfo.clipper; + var state = skeletonInfo.state; + do { + skeleton.update(FrameTime); + state.update(FrameTime); + state.apply(skeleton); + skeleton.updateWorldTransform(); + this._frameIdx++; + this._updateFrame(skeleton, clipper, this._frameIdx); + this.totalTime += FrameTime; + } while (this._needToUpdate(toFrameIdx)); + this.end(); + }, + isInited: function isInited() { + return this._inited; + }, + isInvalid: function isInvalid() { + return this._invalid; + }, + invalidAllFrame: function invalidAllFrame() { + this.isCompleted = false; + this._invalid = true; + }, + updateAllFrame: function updateAllFrame() { + this.invalidAllFrame(); + this.updateToFrame(); + }, + enableCacheAttachedInfo: function enableCacheAttachedInfo() { + if (!this._enableCacheAttachedInfo) { + this._enableCacheAttachedInfo = true; + this.invalidAllFrame(); + } + }, + _updateFrame: function _updateFrame(skeleton, clipper, index) { + _vfOffset = 0; + _boneInfoOffset = 0; + _indexOffset = 0; + _vertexOffset = 0; + _preTexUrl = null; + _preBlendMode = null; + _segVCount = 0; + _segICount = 0; + _segOffset = 0; + _colorOffset = 0; + _preFinalColor = null; + _preDarkColor = null; + this.frames[index] = this.frames[index] || { + segments: [], + colors: [], + boneInfos: [], + vertices: null, + uintVert: null, + indices: null + }; + var frame = this.frames[index]; + var segments = this._tempSegments = frame.segments; + var colors = this._tempColors = frame.colors; + var boneInfos = this._tempBoneInfos = frame.boneInfos; + this._traverseSkeleton(skeleton, clipper); + _colorOffset > 0 && (colors[_colorOffset - 1].vfOffset = _vfOffset); + colors.length = _colorOffset; + boneInfos.length = _boneInfoOffset; + var preSegOffset = _segOffset - 1; + if (preSegOffset >= 0) if (_segICount > 0) { + var preSegInfo = segments[preSegOffset]; + preSegInfo.indexCount = _segICount; + preSegInfo.vfCount = _segVCount * _perVertexSize; + preSegInfo.vertexCount = _segVCount; + segments.length = _segOffset; + } else segments.length = _segOffset - 1; + if (0 == segments.length) return; + var vertices = frame.vertices; + var uintVert = frame.uintVert; + if (!vertices || vertices.length < _vfOffset) { + vertices = frame.vertices = new Float32Array(_vfOffset); + uintVert = frame.uintVert = new Uint32Array(vertices.buffer); + } + for (var i = 0, j = 0; i < _vfOffset; ) { + vertices[i++] = _vertices[j++]; + vertices[i++] = _vertices[j++]; + vertices[i++] = _vertices[j++]; + vertices[i++] = _vertices[j++]; + uintVert[i++] = _vertices[j++]; + uintVert[i++] = _vertices[j++]; + } + var indices = frame.indices; + (!indices || indices.length < _indexOffset) && (indices = frame.indices = new Uint16Array(_indexOffset)); + for (var _i = 0; _i < _indexOffset; _i++) indices[_i] = _indices[_i]; + frame.vertices = vertices; + frame.uintVert = uintVert; + frame.indices = indices; + }, + fillVertices: function fillVertices(skeletonColor, attachmentColor, slotColor, clipper, slot) { + _tempa = slotColor.a * attachmentColor.a * skeletonColor.a * 255; + _tempr = attachmentColor.r * skeletonColor.r * 255; + _tempg = attachmentColor.g * skeletonColor.g * 255; + _tempb = attachmentColor.b * skeletonColor.b * 255; + _finalColor.r = _tempr * slotColor.r; + _finalColor.g = _tempg * slotColor.g; + _finalColor.b = _tempb * slotColor.b; + _finalColor.a = _tempa; + if (null == slot.darkColor) _darkColor.set(0, 0, 0, 1); else { + _darkColor.r = slot.darkColor.r * _tempr; + _darkColor.g = slot.darkColor.g * _tempg; + _darkColor.b = slot.darkColor.b * _tempb; + } + _darkColor.a = 0; + _finalColor32 = (_finalColor.a << 24 >>> 0) + (_finalColor.b << 16) + (_finalColor.g << 8) + _finalColor.r; + _darkColor32 = (_darkColor.a << 24 >>> 0) + (_darkColor.b << 16) + (_darkColor.g << 8) + _darkColor.r; + if (_preFinalColor !== _finalColor32 || _preDarkColor !== _darkColor32) { + var colors = this._tempColors; + _preFinalColor = _finalColor32; + _preDarkColor = _darkColor32; + _colorOffset > 0 && (colors[_colorOffset - 1].vfOffset = _vfOffset); + colors[_colorOffset++] = { + fr: _finalColor.r, + fg: _finalColor.g, + fb: _finalColor.b, + fa: _finalColor.a, + dr: _darkColor.r, + dg: _darkColor.g, + db: _darkColor.b, + da: _darkColor.a, + vfOffset: 0 + }; + } + if (clipper.isClipping()) { + clipper.clipTriangles(_vertices, _vfCount, _indices, _indexCount, _vertices, _finalColor, _darkColor, true, _perVertexSize, _indexOffset, _vfOffset, _vfOffset + 2); + var clippedVertices = clipper.clippedVertices; + var clippedTriangles = clipper.clippedTriangles; + _indexCount = clippedTriangles.length; + _vfCount = clippedVertices.length / _perClipVertexSize * _perVertexSize; + for (var ii = 0, jj = _indexOffset, nn = clippedTriangles.length; ii < nn; ) _indices[jj++] = clippedTriangles[ii++]; + for (var _v = 0, _n = clippedVertices.length, offset = _vfOffset; _v < _n; _v += 12, + offset += _perVertexSize) { + _vertices[offset] = clippedVertices[_v]; + _vertices[offset + 1] = clippedVertices[_v + 1]; + _vertices[offset + 2] = clippedVertices[_v + 6]; + _vertices[offset + 3] = clippedVertices[_v + 7]; + _vertices[offset + 4] = _finalColor32; + _vertices[offset + 5] = _darkColor32; + } + } else for (var v = _vfOffset, n = _vfOffset + _vfCount; v < n; v += _perVertexSize) { + _vertices[v + 4] = _finalColor32; + _vertices[v + 5] = _darkColor32; + } + }, + _traverseSkeleton: function _traverseSkeleton(skeleton, clipper) { + var segments = this._tempSegments; + var boneInfos = this._tempBoneInfos; + var skeletonColor = skeleton.color; + var attachment, attachmentColor, slotColor, uvs, triangles; + var isRegion, isMesh, isClip; + var texture; + var preSegOffset, preSegInfo; + var blendMode; + var slot; + var bones = skeleton.bones; + if (this._enableCacheAttachedInfo) for (var i = 0, l = bones.length; i < l; i++, + _boneInfoOffset++) { + var bone = bones[i]; + var boneInfo = boneInfos[_boneInfoOffset]; + boneInfo || (boneInfo = boneInfos[_boneInfoOffset] = {}); + boneInfo.a = bone.a; + boneInfo.b = bone.b; + boneInfo.c = bone.c; + boneInfo.d = bone.d; + boneInfo.worldX = bone.worldX; + boneInfo.worldY = bone.worldY; + } + for (var slotIdx = 0, slotCount = skeleton.drawOrder.length; slotIdx < slotCount; slotIdx++) { + slot = skeleton.drawOrder[slotIdx]; + _vfCount = 0; + _indexCount = 0; + attachment = slot.getAttachment(); + if (!attachment) { + clipper.clipEndWithSlot(slot); + continue; + } + isRegion = attachment instanceof spine.RegionAttachment; + isMesh = attachment instanceof spine.MeshAttachment; + isClip = attachment instanceof spine.ClippingAttachment; + if (isClip) { + clipper.clipStart(slot, attachment); + continue; + } + if (!isRegion && !isMesh) { + clipper.clipEndWithSlot(slot); + continue; + } + texture = attachment.region.texture._texture; + if (!texture) { + clipper.clipEndWithSlot(slot); + continue; + } + blendMode = slot.data.blendMode; + if (_preTexUrl !== texture.nativeUrl || _preBlendMode !== blendMode) { + _preTexUrl = texture.nativeUrl; + _preBlendMode = blendMode; + preSegOffset = _segOffset - 1; + if (preSegOffset >= 0) if (_segICount > 0) { + preSegInfo = segments[preSegOffset]; + preSegInfo.indexCount = _segICount; + preSegInfo.vertexCount = _segVCount; + preSegInfo.vfCount = _segVCount * _perVertexSize; + } else _segOffset--; + segments[_segOffset] = { + tex: texture, + blendMode: blendMode, + indexCount: 0, + vertexCount: 0, + vfCount: 0 + }; + _segOffset++; + _segICount = 0; + _segVCount = 0; + } + if (isRegion) { + triangles = _quadTriangles; + _vfCount = 4 * _perVertexSize; + _indexCount = 6; + attachment.computeWorldVertices(slot.bone, _vertices, _vfOffset, _perVertexSize); + } else if (isMesh) { + triangles = attachment.triangles; + _vfCount = (attachment.worldVerticesLength >> 1) * _perVertexSize; + _indexCount = triangles.length; + attachment.computeWorldVertices(slot, 0, attachment.worldVerticesLength, _vertices, _vfOffset, _perVertexSize); + } + if (0 == _vfCount || 0 == _indexCount) { + clipper.clipEndWithSlot(slot); + continue; + } + for (var ii = 0, jj = _indexOffset, nn = triangles.length; ii < nn; ) _indices[jj++] = triangles[ii++]; + uvs = attachment.uvs; + for (var v = _vfOffset, n = _vfOffset + _vfCount, u = 0; v < n; v += _perVertexSize, + u += 2) { + _vertices[v + 2] = uvs[u]; + _vertices[v + 3] = uvs[u + 1]; + } + attachmentColor = attachment.color; + slotColor = slot.color; + this.fillVertices(skeletonColor, attachmentColor, slotColor, clipper, slot); + if (_indexCount > 0) { + for (var _ii = _indexOffset, _nn = _indexOffset + _indexCount; _ii < _nn; _ii++) _indices[_ii] += _segVCount; + _indexOffset += _indexCount; + _vfOffset += _vfCount; + _vertexOffset = _vfOffset / _perVertexSize; + _segICount += _indexCount; + _segVCount += _vfCount / _perVertexSize; + } + clipper.clipEndWithSlot(slot); + } + clipper.clipEnd(); + } + }); + var SkeletonCache = cc.Class({ + ctor: function ctor() { + this._privateMode = false; + this._animationPool = {}; + this._skeletonCache = {}; + }, + enablePrivateMode: function enablePrivateMode() { + this._privateMode = true; + }, + clear: function clear() { + this._animationPool = {}; + this._skeletonCache = {}; + }, + removeSkeleton: function removeSkeleton(uuid) { + var skeletonInfo = this._skeletonCache[uuid]; + if (!skeletonInfo) return; + var animationsCache = skeletonInfo.animationsCache; + for (var aniKey in animationsCache) { + var animationCache = animationsCache[aniKey]; + if (!animationCache) continue; + this._animationPool[uuid + "#" + aniKey] = animationCache; + animationCache.clear(); + } + delete this._skeletonCache[uuid]; + }, + getSkeletonCache: function getSkeletonCache(uuid, skeletonData) { + var skeletonInfo = this._skeletonCache[uuid]; + if (!skeletonInfo) { + var skeleton = new spine.Skeleton(skeletonData); + var clipper = new spine.SkeletonClipping(); + var stateData = new spine.AnimationStateData(skeleton.data); + var state = new spine.AnimationState(stateData); + var listener = new TrackEntryListeners(); + state.addListener(listener); + this._skeletonCache[uuid] = skeletonInfo = { + skeleton: skeleton, + clipper: clipper, + state: state, + listener: listener, + animationsCache: {}, + curAnimationCache: null + }; + } + return skeletonInfo; + }, + getAnimationCache: function getAnimationCache(uuid, animationName) { + var skeletonInfo = this._skeletonCache[uuid]; + if (!skeletonInfo) return null; + var animationsCache = skeletonInfo.animationsCache; + return animationsCache[animationName]; + }, + invalidAnimationCache: function invalidAnimationCache(uuid) { + var skeletonInfo = this._skeletonCache[uuid]; + var skeleton = skeletonInfo && skeletonInfo.skeleton; + if (!skeleton) return; + var animationsCache = skeletonInfo.animationsCache; + for (var aniKey in animationsCache) { + var animationCache = animationsCache[aniKey]; + animationCache.invalidAllFrame(); + } + }, + initAnimationCache: function initAnimationCache(uuid, animationName) { + if (!animationName) return null; + var skeletonInfo = this._skeletonCache[uuid]; + var skeleton = skeletonInfo && skeletonInfo.skeleton; + if (!skeleton) return null; + var animation = skeleton.data.findAnimation(animationName); + if (!animation) return null; + var animationsCache = skeletonInfo.animationsCache; + var animationCache = animationsCache[animationName]; + if (!animationCache) { + var poolKey = uuid + "#" + animationName; + animationCache = this._animationPool[poolKey]; + if (animationCache) delete this._animationPool[poolKey]; else { + animationCache = new AnimationCache(); + animationCache._privateMode = this._privateMode; + } + animationCache.init(skeletonInfo, animationName); + animationsCache[animationName] = animationCache; + } + return animationCache; + }, + updateAnimationCache: function updateAnimationCache(uuid, animationName) { + if (animationName) { + var animationCache = this.initAnimationCache(uuid, animationName); + if (!animationCache) return null; + animationCache.updateAllFrame(); + } else { + var skeletonInfo = this._skeletonCache[uuid]; + var skeleton = skeletonInfo && skeletonInfo.skeleton; + if (!skeleton) return; + var animationsCache = skeletonInfo.animationsCache; + for (var aniKey in animationsCache) { + var _animationCache = animationsCache[aniKey]; + _animationCache.updateAllFrame(); + } + } + } + }); + SkeletonCache.FrameTime = FrameTime; + SkeletonCache.sharedCache = new SkeletonCache(); + module.exports = SkeletonCache; + }), { + "./lib/spine": 276, + "./track-entry-listeners": 281 + } ], + 278: [ (function(require, module, exports) { + "use strict"; + function _createForOfIteratorHelperLoose(o, allowArrayLike) { + var it = "undefined" !== typeof Symbol && o[Symbol.iterator] || o["@@iterator"]; + if (it) return (it = it.call(o)).next.bind(it); + if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && "number" === typeof o.length) { + it && (o = it); + var i = 0; + return function() { + if (i >= o.length) return { + done: true + }; + return { + done: false, + value: o[i++] + }; + }; + } + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if ("string" === typeof o) return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + "Object" === n && o.constructor && (n = o.constructor.name); + if ("Map" === n || "Set" === n) return Array.from(o); + if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); + } + function _arrayLikeToArray(arr, len) { + (null == len || len > arr.length) && (len = arr.length); + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + return arr2; + } + var SkeletonCache = (true, require("./skeleton-cache").sharedCache); + var SkeletonData = cc.Class({ + name: "sp.SkeletonData", + extends: cc.Asset, + ctor: function ctor() { + this.reset(); + }, + properties: { + _skeletonJson: null, + skeletonJsonStr: { + get: function get() { + return this._skeletonJson ? JSON.stringify(this._skeletonJson) : ""; + } + }, + skeletonJson: { + get: function get() { + return this._skeletonJson; + }, + set: function set(value) { + this.reset(); + this._skeletonJson = "string" == typeof value ? JSON.parse(value) : value; + !this._uuid && value.skeleton && (this._uuid = value.skeleton.hash); + } + }, + _atlasText: "", + atlasText: { + get: function get() { + return this._atlasText; + }, + set: function set(value) { + this._atlasText = value; + this.reset(); + } + }, + textures: { + default: [], + type: [ cc.Texture2D ] + }, + textureNames: { + default: [], + type: [ cc.String ] + }, + scale: 1, + _nativeAsset: { + get: function get() { + return this._buffer; + }, + set: function set(bin) { + this._buffer = bin.buffer || bin; + this.reset(); + }, + override: true + } + }, + statics: { + preventDeferredLoadDependents: true, + createRegion: function createRegion(spriteFrame, original) { + void 0 === original && (original = void 0); + var region = new sp.spine.TextureAtlasRegion(); + var texture = spriteFrame.getTexture(); + var rect = spriteFrame.getRect(); + var origSize = spriteFrame.getOriginalSize(); + var _offset = spriteFrame.getOffset(); + var rotate = spriteFrame.isRotated(); + var offset = cc.v2(.5 * (origSize.width - rect.width) + _offset.x, .5 * (origSize.height - rect.height) + _offset.y); + var degrees = rotate ? 270 : 0; + if (original) { + region.name = original.name; + region.page = original.page; + } + region.x = rect.x; + region.y = rect.y; + region.width = rect.width; + region.height = rect.height; + region.originalWidth = origSize.width; + region.originalHeight = origSize.height; + region.offsetX = offset.x; + region.offsetY = offset.y; + region.rotate = 0 != degrees; + region.degrees = degrees; + var skelTex = new sp.SkeletonTexture({ + width: texture.width, + height: texture.height + }); + skelTex.setRealTexture(texture); + region.texture = skelTex; + this.updateRegionUV(region); + return region; + }, + updateRegionUV: function updateRegionUV(region) { + var texture = region.texture._texture; + if (region.rotate) { + region.u = region.x / texture.width; + region.v = region.y / texture.height; + region.u2 = (region.x + region.height) / texture.width; + region.v2 = (region.y + region.width) / texture.height; + } else { + region.u = region.x / texture.width; + region.v = region.y / texture.height; + region.u2 = (region.x + region.width) / texture.width; + region.v2 = (region.y + region.height) / texture.height; + } + }, + createSpriteFrame: function createSpriteFrame(region) { + var frame = new cc.SpriteFrame(region.texture._texture, cc.rect(region.x, region.y, region.width, region.height), region.rotate, cc.v2(region.offsetX - .5 * (region.originalWidth - region.width), region.offsetY - .5 * (region.originalHeight - region.height)), cc.size(region.originalWidth, region.originalHeight)); + return frame; + } + }, + createNode: false, + reset: function reset() { + this._skeletonCache = null; + this._atlasCache = null; + false; + this._cloneId = 0; + }, + ensureTexturesLoaded: function ensureTexturesLoaded(loaded, caller) { + var textures = this.textures; + var texsLen = textures.length; + if (0 == texsLen) { + loaded.call(caller, false); + return; + } + var loadedCount = 0; + var loadedItem = function loadedItem() { + loadedCount++; + if (loadedCount >= texsLen) { + loaded && loaded.call(caller, true); + loaded = null; + } + }; + for (var i = 0; i < texsLen; i++) { + var tex = textures[i]; + tex.loaded ? loadedItem() : tex.once("load", loadedItem); + } + }, + isTexturesLoaded: function isTexturesLoaded() { + var textures = this.textures; + var texsLen = textures.length; + for (var i = 0; i < texsLen; i++) { + var tex = textures[i]; + if (!tex.loaded) return false; + } + return true; + }, + getRuntimeData: function getRuntimeData(quiet) { + if (this._skeletonCache) return this._skeletonCache; + if (!(this.textures && this.textures.length > 0) && this.textureNames && this.textureNames.length > 0) { + quiet || cc.errorID(7507, this.name); + return null; + } + var atlas = this._getAtlas(quiet); + if (!atlas) return null; + var attachmentLoader = new sp.spine.AtlasAttachmentLoader(atlas); + var resData = null; + var reader = null; + if (this.skeletonJson) { + reader = new sp.spine.SkeletonJson(attachmentLoader); + resData = this.skeletonJson; + } else { + reader = new sp.spine.SkeletonBinary(attachmentLoader); + resData = new Uint8Array(this._nativeAsset); + } + reader.scale = this.scale; + this._skeletonCache = reader.readSkeletonData(resData); + atlas.dispose(); + return this._skeletonCache; + }, + getSkinsEnum: false, + getAnimsEnum: false, + _getTexture: function _getTexture(line) { + var names = this.textureNames; + for (var i = 0; i < names.length; i++) if (names[i] === line) { + var texture = this.textures[i]; + var tex = new sp.SkeletonTexture({ + width: texture.width, + height: texture.height + }); + tex.setRealTexture(texture); + return tex; + } + cc.errorID(7506, line); + return null; + }, + _getAtlas: function _getAtlas(quiet) { + if (this._atlasCache) return this._atlasCache; + if (!this.atlasText) { + quiet || cc.errorID(7508, this.name); + return null; + } + return this._atlasCache = new sp.spine.TextureAtlas(this.atlasText, this._getTexture.bind(this)); + }, + clone: function clone() { + var cloned = new SkeletonData(); + cloned._cloneId = this._cloneId + 1; + var suffix = "(clone " + String(cloned._cloneId) + ")"; + cloned._uuid = this._uuid + suffix; + cloned.name = this.name + suffix; + cloned.scale = this.scale; + cloned.textureNames = this.textureNames; + cloned.textures = this.textures; + cloned._atlasText = this._atlasText; + cloned._skeletonJson = this._skeletonJson; + cloned._buffer = this._buffer; + return cloned; + }, + destroy: function destroy() { + if (this._atlasCache) { + var regions = this._atlasCache.regions; + for (var _iterator = _createForOfIteratorHelperLoose(regions), _step; !(_step = _iterator()).done; ) { + var region = _step.value; + if (region._spriteFrame) { + region._spriteFrame.destroy(); + region._spriteFrame = null; + } + } + } + if (this._skeletonCache) { + var skins = this._skeletonCache.skins; + for (var _iterator2 = _createForOfIteratorHelperLoose(skins), _step2; !(_step2 = _iterator2()).done; ) { + var skin = _step2.value; + for (var _iterator3 = _createForOfIteratorHelperLoose(skin.attachments), _step3; !(_step3 = _iterator3()).done; ) { + var attachments = _step3.value; + for (var key in attachments) { + var _region = attachments[key].region; + if (_region && _region._spriteFrame) { + _region._spriteFrame.destroy(); + _region._spriteFrame = null; + } + } + } + } + } + SkeletonCache.removeSkeleton(this._uuid); + this._super(); + } + }); + sp.SkeletonData = module.exports = SkeletonData; + }), { + "./skeleton-cache": 277 + } ], + 279: [ (function(require, module, exports) { + "use strict"; + sp.SkeletonTexture = cc.Class({ + name: "sp.SkeletonTexture", + extends: sp.spine.Texture, + _texture: null, + _material: null, + setRealTexture: function setRealTexture(tex) { + this._texture = tex; + }, + getRealTexture: function getRealTexture() { + return this._texture; + }, + setFilters: function setFilters(minFilter, magFilter) { + this._texture && this._texture.setFilters(minFilter, magFilter); + }, + setWraps: function setWraps(uWrap, vWrap) { + this._texture && this._texture.setWrapMode(uWrap, vWrap); + }, + dispose: function dispose() {} + }); + }), {} ], + 280: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _assembler = _interopRequireDefault(require("../../cocos2d/core/renderer/assembler")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _createForOfIteratorHelperLoose(o, allowArrayLike) { + var it = "undefined" !== typeof Symbol && o[Symbol.iterator] || o["@@iterator"]; + if (it) return (it = it.call(o)).next.bind(it); + if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && "number" === typeof o.length) { + it && (o = it); + var i = 0; + return function() { + if (i >= o.length) return { + done: true + }; + return { + done: false, + value: o[i++] + }; + }; + } + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if ("string" === typeof o) return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + "Object" === n && o.constructor && (n = o.constructor.name); + if ("Map" === n || "Set" === n) return Array.from(o); + if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); + } + function _arrayLikeToArray(arr, len) { + (null == len || len > arr.length) && (len = arr.length); + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + return arr2; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var Skeleton = require("./Skeleton"); + var spine = require("./lib/spine"); + var RenderFlow = require("../../cocos2d/core/renderer/render-flow"); + var VertexFormat = require("../../cocos2d/core/renderer/webgl/vertex-format"); + var VFOneColor = VertexFormat.vfmtPosUvColor; + var VFOneColorTexId = VertexFormat.vfmtPosUvColorTexId; + var VFTwoColor = VertexFormat.vfmtPosUvTwoColor; + var gfx = cc.gfx; + var FLAG_BATCH = 16; + var FLAG_TWO_COLOR = 1; + var _handleVal = 0; + var _quadTriangles = [ 0, 1, 2, 2, 3, 0 ]; + var _slotColor = cc.color(0, 0, 255, 255); + var _boneColor = cc.color(255, 0, 0, 255); + var _originColor = cc.color(0, 255, 0, 255); + var _meshColor = cc.color(255, 255, 0, 255); + var _finalColor = null; + var _darkColor = null; + var _tempPos = null, _tempUv = null; + true; + _finalColor = new spine.Color(1, 1, 1, 1); + _darkColor = new spine.Color(1, 1, 1, 1); + _tempPos = new spine.Vector2(); + _tempUv = new spine.Vector2(); + var _premultipliedAlpha; + var _multiplier; + var _slotRangeStart; + var _slotRangeEnd; + var _useTint; + var _useMulti; + var _texId; + var _debugSlots; + var _debugBones; + var _debugMesh; + var _nodeR, _nodeG, _nodeB, _nodeA; + var _finalColor32, _darkColor32; + var _vertexFormat; + var _perVertexSize; + var _perClipVertexSize; + var _vertexFloatCount = 0, _vertexCount = 0, _vertexFloatOffset = 0, _vertexOffset = 0, _indexCount = 0, _indexOffset = 0, _vfOffset = 0; + var _tempr, _tempg, _tempb; + var _inRange; + var _mustFlush; + var _x, _y, _m00, _m04, _m12, _m01, _m05, _m13; + var _r, _g, _b, _fr, _fg, _fb, _fa, _dr, _dg, _db, _da; + var _comp, _buffer, _renderer, _node, _needColor, _vertexEffect; + function _getSlotMaterial(tex, blendMode) { + var src, dst; + switch (blendMode) { + case spine.BlendMode.Additive: + src = _premultipliedAlpha ? cc.macro.ONE : cc.macro.SRC_ALPHA; + dst = cc.macro.ONE; + break; + + case spine.BlendMode.Multiply: + src = cc.macro.DST_COLOR; + dst = cc.macro.ONE_MINUS_SRC_ALPHA; + break; + + case spine.BlendMode.Screen: + src = cc.macro.ONE; + dst = cc.macro.ONE_MINUS_SRC_COLOR; + break; + + case spine.BlendMode.Normal: + default: + src = _premultipliedAlpha ? cc.macro.ONE : cc.macro.SRC_ALPHA; + dst = cc.macro.ONE_MINUS_SRC_ALPHA; + } + var useModel = !_comp.enableBatch; + var baseMaterial = _comp._materials[0]; + if (!baseMaterial) return null; + if (_useMulti) { + var key = tex.getId() + src + dst; + var materialCache = _comp._materialCache; + var materialInfo = materialCache[key]; + if (!materialInfo) { + var texId = baseMaterial.material.getMultiHandler().getIndex(tex.getImpl()); + if (materialCache.baseMaterial) materialInfo = { + material: cc.MaterialVariant.create(baseMaterial), + texId: texId + }; else { + materialInfo = { + material: baseMaterial, + texId: texId + }; + materialCache.baseMaterial = materialInfo; + } + if (-1 === texId) { + materialInfo.material.setProperty("texture", tex); + materialInfo.texId = 0; + } + materialInfo.material.setBlend(true, gfx.BLEND_FUNC_ADD, src, dst, gfx.BLEND_FUNC_ADD, src, dst); + materialCache[key] = materialInfo; + } + _texId = materialInfo.texId; + return materialInfo.material; + } + var _key = tex.getId() + src + dst + _useTint + useModel; + var _materialCache = _comp._materialCache; + var material = _materialCache[_key]; + if (!material) { + if (_materialCache.baseMaterial) material = cc.MaterialVariant.create(baseMaterial); else { + material = baseMaterial; + _materialCache.baseMaterial = baseMaterial; + } + material.define("CC_USE_MODEL", useModel); + material.define("USE_TINT", _useTint); + material.setProperty("texture", tex); + material.setBlend(true, gfx.BLEND_FUNC_ADD, src, dst, gfx.BLEND_FUNC_ADD, src, dst); + _materialCache[_key] = material; + } + return material; + } + function _handleColor(color) { + _fa = color.fa * _nodeA; + _multiplier = _premultipliedAlpha ? _fa / 255 : 1; + _r = _nodeR * _multiplier; + _g = _nodeG * _multiplier; + _b = _nodeB * _multiplier; + _fr = color.fr * _r; + _fg = color.fg * _g; + _fb = color.fb * _b; + _finalColor32 = (_fa << 24 >>> 0) + (_fb << 16) + (_fg << 8) + _fr; + _dr = color.dr * _r; + _dg = color.dg * _g; + _db = color.db * _b; + _da = _premultipliedAlpha ? 255 : 0; + _darkColor32 = (_da << 24 >>> 0) + (_db << 16) + (_dg << 8) + _dr; + } + function _spineColorToInt32(spineColor) { + return (spineColor.a << 24 >>> 0) + (spineColor.b << 16) + (spineColor.g << 8) + spineColor.r; + } + var SpineAssembler = (function(_Assembler) { + _inheritsLoose(SpineAssembler, _Assembler); + function SpineAssembler() { + return _Assembler.apply(this, arguments) || this; + } + var _proto = SpineAssembler.prototype; + _proto.updateRenderData = function updateRenderData(comp) { + if (comp.isAnimationCached()) return; + if (comp._dataDirty) { + this.packDynamicAtlasForSpine(comp); + var autoSwitchMaterial = comp.autoSwitchMaterial; + if (cc.sp.autoSwitchMaterial && 0 === autoSwitchMaterial || 1 === autoSwitchMaterial) { + var material = comp._materials[0]; + if (!material) return false; + var skins = comp.skeletonData._skeletonCache.skins; + for (var _iterator = _createForOfIteratorHelperLoose(skins), _step; !(_step = _iterator()).done; ) { + var skin = _step.value; + for (var _iterator2 = _createForOfIteratorHelperLoose(skin.attachments), _step2; !(_step2 = _iterator2()).done; ) { + var attachment = _step2.value; + for (var key in attachment) { + var region = attachment[key].region; + if (region && region.texture) { + this.checkAndSwitchMaterial(comp, region.texture._texture, material); + break; + } + } + } + } + } + comp._dataDirty = false; + } + var skeleton = comp._skeleton; + skeleton && skeleton.updateWorldTransform(); + }; + _proto.packDynamicAtlasForSpine = function packDynamicAtlasForSpine(comp) { + false; + var allowDynamicAtlas = comp.allowDynamicAtlas; + if ((cc.sp.allowDynamicAtlas && 0 === allowDynamicAtlas || 1 === allowDynamicAtlas) && cc.dynamicAtlasManager) { + var skins = comp.skeletonData._skeletonCache.skins; + for (var _iterator3 = _createForOfIteratorHelperLoose(skins), _step3; !(_step3 = _iterator3()).done; ) { + var skin = _step3.value; + for (var _iterator4 = _createForOfIteratorHelperLoose(skin.attachments), _step4; !(_step4 = _iterator4()).done; ) { + var attachments = _step4.value; + var _loop = function _loop(key) { + var attachment = attachments[key]; + var region = attachment.region; + if (region && !region._original && region.texture && region.texture._texture.packable) { + if (region._spriteFrame) { + region._spriteFrame.destroy(); + region._spriteFrame = null; + } + var frame = sp.SkeletonData.createSpriteFrame(region); + var packedFrame = cc.dynamicAtlasManager.insertSpriteFrame(frame); + if (packedFrame) { + frame._setDynamicAtlasFrame(packedFrame); + region._original = { + _texture: region.texture, + _x: region.x, + _y: region.y + }; + region.texture = new sp.SkeletonTexture({ + width: packedFrame.texture.width, + height: packedFrame.texture.height + }); + region.texture.setRealTexture(packedFrame.texture); + region.x = packedFrame.x; + region.y = packedFrame.y; + sp.SkeletonData.updateRegionUV(region); + if (attachment instanceof sp.spine.MeshAttachment) attachment.updateUVs(); else { + attachment.setRegion(region); + attachment.updateOffset(); + } + frame.once("_resetDynamicAtlasFrame", (function() { + region.x = region._original._x; + region.y = region._original._y; + region.texture = region._original._texture; + region._original = null; + sp.SkeletonData.updateRegionUV(region); + if (attachment instanceof sp.spine.MeshAttachment) attachment.updateUVs(); else { + attachment.setRegion(region); + attachment.updateOffset(); + } + })); + region._spriteFrame = frame; + } else frame.destroy(); + } + }; + for (var key in attachments) _loop(key); + } + } + } + }; + _proto.fillVertices = function fillVertices(skeletonColor, attachmentColor, slotColor, clipper, slot) { + var vbuf = _buffer._vData, ibuf = _buffer._iData, uintVData = _buffer._uintVData; + var offsetInfo; + _finalColor.a = slotColor.a * attachmentColor.a * skeletonColor.a * _nodeA * 255; + _multiplier = _premultipliedAlpha ? _finalColor.a : 255; + _tempr = _nodeR * attachmentColor.r * skeletonColor.r * _multiplier; + _tempg = _nodeG * attachmentColor.g * skeletonColor.g * _multiplier; + _tempb = _nodeB * attachmentColor.b * skeletonColor.b * _multiplier; + _finalColor.r = _tempr * slotColor.r; + _finalColor.g = _tempg * slotColor.g; + _finalColor.b = _tempb * slotColor.b; + if (null == slot.darkColor) _darkColor.set(0, 0, 0, 1); else { + _darkColor.r = slot.darkColor.r * _tempr; + _darkColor.g = slot.darkColor.g * _tempg; + _darkColor.b = slot.darkColor.b * _tempb; + } + _darkColor.a = _premultipliedAlpha ? 255 : 0; + if (clipper.isClipping()) { + var uvs = vbuf.subarray(_vertexFloatOffset + 2); + clipper.clipTriangles(vbuf.subarray(_vertexFloatOffset), _vertexFloatCount, ibuf.subarray(_indexOffset), _indexCount, uvs, _finalColor, _darkColor, _useTint, _perVertexSize); + var clippedVertices = new Float32Array(clipper.clippedVertices); + var clippedTriangles = clipper.clippedTriangles; + _indexCount = clippedTriangles.length; + _vertexFloatCount = clippedVertices.length / _perClipVertexSize * _perVertexSize; + offsetInfo = _buffer.requestForSpine(_vertexFloatCount / _perVertexSize, _indexCount); + _indexOffset = offsetInfo.indiceOffset, _vertexOffset = offsetInfo.vertexOffset, + _vertexFloatOffset = offsetInfo.byteOffset >> 2; + vbuf = _buffer._vData, ibuf = _buffer._iData; + uintVData = _buffer._uintVData; + ibuf.set(clippedTriangles, _indexOffset); + if (_vertexEffect) for (var _v2 = 0, _n2 = clippedVertices.length, offset = _vertexFloatOffset; _v2 < _n2; _v2 += _perClipVertexSize, + offset += _perVertexSize) { + _tempPos.x = clippedVertices[_v2]; + _tempPos.y = clippedVertices[_v2 + 1]; + _finalColor.set(clippedVertices[_v2 + 2], clippedVertices[_v2 + 3], clippedVertices[_v2 + 4], clippedVertices[_v2 + 5]); + _tempUv.x = clippedVertices[_v2 + 6]; + _tempUv.y = clippedVertices[_v2 + 7]; + _useTint ? _darkColor.set(clippedVertices[_v2 + 8], clippedVertices[_v2 + 9], clippedVertices[_v2 + 10], clippedVertices[_v2 + 11]) : _darkColor.set(0, 0, 0, 0); + _vertexEffect.transform(_tempPos, _tempUv, _finalColor, _darkColor); + vbuf[offset] = _tempPos.x; + vbuf[offset + 1] = _tempPos.y; + vbuf[offset + 2] = _tempUv.x; + vbuf[offset + 3] = _tempUv.y; + uintVData[offset + 4] = _spineColorToInt32(_finalColor); + _useMulti ? vbuf[offset + 5] = _texId : _useTint && (uintVData[offset + 5] = _spineColorToInt32(_darkColor)); + } else for (var _v3 = 0, _n3 = clippedVertices.length, _offset = _vertexFloatOffset; _v3 < _n3; _v3 += _perClipVertexSize, + _offset += _perVertexSize) { + vbuf[_offset] = clippedVertices[_v3]; + vbuf[_offset + 1] = clippedVertices[_v3 + 1]; + vbuf[_offset + 2] = clippedVertices[_v3 + 6]; + vbuf[_offset + 3] = clippedVertices[_v3 + 7]; + _finalColor32 = (clippedVertices[_v3 + 5] << 24 >>> 0) + (clippedVertices[_v3 + 4] << 16) + (clippedVertices[_v3 + 3] << 8) + clippedVertices[_v3 + 2]; + uintVData[_offset + 4] = _finalColor32; + if (_useMulti) vbuf[_offset + 5] = _texId; else if (_useTint) { + _darkColor32 = (clippedVertices[_v3 + 11] << 24 >>> 0) + (clippedVertices[_v3 + 10] << 16) + (clippedVertices[_v3 + 9] << 8) + clippedVertices[_v3 + 8]; + uintVData[_offset + 5] = _darkColor32; + } + } + } else if (_vertexEffect) for (var v = _vertexFloatOffset, n = _vertexFloatOffset + _vertexFloatCount; v < n; v += _perVertexSize) { + _tempPos.x = vbuf[v]; + _tempPos.y = vbuf[v + 1]; + _tempUv.x = vbuf[v + 2]; + _tempUv.y = vbuf[v + 3]; + _vertexEffect.transform(_tempPos, _tempUv, _finalColor, _darkColor); + vbuf[v] = _tempPos.x; + vbuf[v + 1] = _tempPos.y; + vbuf[v + 2] = _tempUv.x; + vbuf[v + 3] = _tempUv.y; + uintVData[v + 4] = _spineColorToInt32(_finalColor); + _useMulti ? vbuf[v + 5] = _texId : _useTint && (uintVData[v + 5] = _spineColorToInt32(_darkColor)); + } else { + _finalColor32 = _spineColorToInt32(_finalColor); + _darkColor32 = _spineColorToInt32(_darkColor); + for (var _v = _vertexFloatOffset, _n = _vertexFloatOffset + _vertexFloatCount; _v < _n; _v += _perVertexSize) { + uintVData[_v + 4] = _finalColor32; + _useMulti ? vbuf[_v + 5] = _texId : _useTint && (uintVData[_v + 5] = _darkColor32); + } + } + }; + _proto.realTimeTraverse = function realTimeTraverse(worldMat) { + var vbuf; + var ibuf; + var locSkeleton = _comp._skeleton; + var skeletonColor = locSkeleton.color; + var graphics = _comp._debugRenderer; + var clipper = _comp._clipper; + var material = null; + var attachment, attachmentColor, slotColor, uvs, triangles; + var isRegion, isMesh, isClip; + var offsetInfo; + var slot; + var worldMatm; + _slotRangeStart = _comp._startSlotIndex; + _slotRangeEnd = _comp._endSlotIndex; + _inRange = false; + -1 == _slotRangeStart && (_inRange = true); + _debugSlots = _comp.debugSlots; + _debugBones = _comp.debugBones; + _debugMesh = _comp.debugMesh; + if (graphics && (_debugBones || _debugSlots || _debugMesh)) { + graphics.clear(); + graphics.lineWidth = 2; + } + _perClipVertexSize = _useMulti ? 12 : _useTint ? 12 : 8; + _vertexFloatCount = 0; + _vertexFloatOffset = 0; + _vertexOffset = 0; + _indexCount = 0; + _indexOffset = 0; + for (var slotIdx = 0, slotCount = locSkeleton.drawOrder.length; slotIdx < slotCount; slotIdx++) { + slot = locSkeleton.drawOrder[slotIdx]; + if (void 0 == slot) continue; + _slotRangeStart >= 0 && _slotRangeStart == slot.data.index && (_inRange = true); + if (!_inRange) { + clipper.clipEndWithSlot(slot); + continue; + } + _slotRangeEnd >= 0 && _slotRangeEnd == slot.data.index && (_inRange = false); + _vertexFloatCount = 0; + _indexCount = 0; + attachment = slot.getAttachment(); + if (!attachment) { + clipper.clipEndWithSlot(slot); + continue; + } + isRegion = attachment instanceof spine.RegionAttachment; + isMesh = attachment instanceof spine.MeshAttachment; + isClip = attachment instanceof spine.ClippingAttachment; + if (isClip) { + clipper.clipStart(slot, attachment); + continue; + } + if (!isRegion && !isMesh) { + clipper.clipEndWithSlot(slot); + continue; + } + material = _getSlotMaterial(attachment.region.texture._texture, slot.data.blendMode); + if (!material) { + clipper.clipEndWithSlot(slot); + continue; + } + if (_mustFlush || material.getHash() !== _renderer.material.getHash()) { + _mustFlush = false; + _renderer._flush(); + _renderer.node = _node; + _renderer.material = material; + } + if (isRegion) { + triangles = _quadTriangles; + _vertexFloatCount = 4 * _perVertexSize; + _indexCount = 6; + offsetInfo = _buffer.requestForSpine(4, 6); + _indexOffset = offsetInfo.indiceOffset, _vertexOffset = offsetInfo.vertexOffset, + _vertexFloatOffset = offsetInfo.byteOffset >> 2; + vbuf = _buffer._vData, ibuf = _buffer._iData; + attachment.computeWorldVertices(slot.bone, vbuf, _vertexFloatOffset, _perVertexSize); + if (graphics && _debugSlots) { + graphics.strokeColor = _slotColor; + graphics.moveTo(vbuf[_vertexFloatOffset], vbuf[_vertexFloatOffset + 1]); + for (var ii = _vertexFloatOffset + _perVertexSize, nn = _vertexFloatOffset + _vertexFloatCount; ii < nn; ii += _perVertexSize) graphics.lineTo(vbuf[ii], vbuf[ii + 1]); + graphics.close(); + graphics.stroke(); + } + } else if (isMesh) { + triangles = attachment.triangles; + _vertexFloatCount = (attachment.worldVerticesLength >> 1) * _perVertexSize; + _indexCount = triangles.length; + offsetInfo = _buffer.requestForSpine(_vertexFloatCount / _perVertexSize, _indexCount); + _indexOffset = offsetInfo.indiceOffset, _vertexOffset = offsetInfo.vertexOffset, + _vertexFloatOffset = offsetInfo.byteOffset >> 2; + vbuf = _buffer._vData, ibuf = _buffer._iData; + attachment.computeWorldVertices(slot, 0, attachment.worldVerticesLength, vbuf, _vertexFloatOffset, _perVertexSize); + if (graphics && _debugMesh) { + graphics.strokeColor = _meshColor; + for (var _ii = 0, _nn = triangles.length; _ii < _nn; _ii += 3) { + var v1 = triangles[_ii] * _perVertexSize + _vertexFloatOffset; + var v2 = triangles[_ii + 1] * _perVertexSize + _vertexFloatOffset; + var v3 = triangles[_ii + 2] * _perVertexSize + _vertexFloatOffset; + graphics.moveTo(vbuf[v1], vbuf[v1 + 1]); + graphics.lineTo(vbuf[v2], vbuf[v2 + 1]); + graphics.lineTo(vbuf[v3], vbuf[v3 + 1]); + graphics.close(); + graphics.stroke(); + } + } + } + if (0 == _vertexFloatCount || 0 == _indexCount) { + clipper.clipEndWithSlot(slot); + continue; + } + ibuf.set(triangles, _indexOffset); + uvs = attachment.uvs; + for (var v = _vertexFloatOffset, n = _vertexFloatOffset + _vertexFloatCount, u = 0; v < n; v += _perVertexSize, + u += 2) { + vbuf[v + 2] = uvs[u]; + vbuf[v + 3] = uvs[u + 1]; + } + attachmentColor = attachment.color, slotColor = slot.color; + this.fillVertices(skeletonColor, attachmentColor, slotColor, clipper, slot); + vbuf = _buffer._vData, ibuf = _buffer._iData; + if (_indexCount > 0) { + for (var _ii2 = _indexOffset, _nn2 = _indexOffset + _indexCount; _ii2 < _nn2; _ii2++) ibuf[_ii2] += _vertexOffset; + if (worldMat) { + worldMatm = worldMat.m; + _m00 = worldMatm[0]; + _m04 = worldMatm[4]; + _m12 = worldMatm[12]; + _m01 = worldMatm[1]; + _m05 = worldMatm[5]; + _m13 = worldMatm[13]; + for (var _ii3 = _vertexFloatOffset, _nn3 = _vertexFloatOffset + _vertexFloatCount; _ii3 < _nn3; _ii3 += _perVertexSize) { + _x = vbuf[_ii3]; + _y = vbuf[_ii3 + 1]; + vbuf[_ii3] = _x * _m00 + _y * _m04 + _m12; + vbuf[_ii3 + 1] = _x * _m01 + _y * _m05 + _m13; + } + } + _buffer.adjustForSpine(_vertexFloatCount / _perVertexSize, _indexCount); + } + clipper.clipEndWithSlot(slot); + } + clipper.clipEnd(); + if (graphics && _debugBones) { + var bone; + graphics.strokeColor = _boneColor; + graphics.fillColor = _slotColor; + for (var i = 0, _n4 = locSkeleton.bones.length; i < _n4; i++) { + bone = locSkeleton.bones[i]; + var x = bone.data.length * bone.a + bone.worldX; + var y = bone.data.length * bone.c + bone.worldY; + graphics.moveTo(bone.worldX, bone.worldY); + graphics.lineTo(x, y); + graphics.stroke(); + graphics.circle(bone.worldX, bone.worldY, 1.5 * Math.PI); + graphics.fill(); + 0 === i && (graphics.fillColor = _originColor); + } + } + }; + _proto.cacheTraverse = function cacheTraverse(worldMat) { + var frame = _comp._curFrame; + if (!frame) return; + var segments = frame.segments; + if (0 == segments.length) return; + var vbuf, ibuf, uintbuf; + var material; + var offsetInfo; + var vertices = frame.vertices; + var indices = frame.indices; + var worldMatm; + var frameVFOffset = 0, frameIndexOffset = 0, segVFCount = 0; + if (worldMat) { + worldMatm = worldMat.m; + _m00 = worldMatm[0]; + _m01 = worldMatm[1]; + _m04 = worldMatm[4]; + _m05 = worldMatm[5]; + _m12 = worldMatm[12]; + _m13 = worldMatm[13]; + } + var justTranslate = 1 === _m00 && 0 === _m01 && 0 === _m04 && 1 === _m05; + var needBatch = _handleVal & FLAG_BATCH; + var calcTranslate = needBatch && justTranslate; + var colorOffset = 0; + var colors = frame.colors; + var nowColor = colors[colorOffset++]; + var maxVFOffset = nowColor.vfOffset; + _handleColor(nowColor); + for (var i = 0, n = segments.length; i < n; i++) { + var segInfo = segments[i]; + material = _getSlotMaterial(segInfo.tex, segInfo.blendMode); + if (!material) continue; + if (_mustFlush || material.getHash() !== _renderer.material.getHash()) { + _mustFlush = false; + _renderer._flush(); + _renderer.node = _node; + _renderer.material = material; + } + _vertexCount = segInfo.vertexCount; + _indexCount = segInfo.indexCount; + offsetInfo = _buffer.requestForSpine(_vertexCount, _indexCount); + _indexOffset = offsetInfo.indiceOffset; + _vertexOffset = offsetInfo.vertexOffset; + _vfOffset = offsetInfo.byteOffset >> 2; + vbuf = _buffer._vData; + ibuf = _buffer._iData; + uintbuf = _buffer._uintVData; + for (var ii = _indexOffset, il = _indexOffset + _indexCount; ii < il; ii++) ibuf[ii] = _vertexOffset + indices[frameIndexOffset++]; + segVFCount = segInfo.vfCount; + vbuf.set(vertices.subarray(frameVFOffset, frameVFOffset + segVFCount), _vfOffset); + frameVFOffset += segVFCount; + if (calcTranslate) for (var _ii4 = _vfOffset, _il = _vfOffset + segVFCount; _ii4 < _il; _ii4 += 6) { + vbuf[_ii4] += _m12; + vbuf[_ii4 + 1] += _m13; + } else if (needBatch) for (var _ii5 = _vfOffset, _il2 = _vfOffset + segVFCount; _ii5 < _il2; _ii5 += 6) { + _x = vbuf[_ii5]; + _y = vbuf[_ii5 + 1]; + vbuf[_ii5] = _x * _m00 + _y * _m04 + _m12; + vbuf[_ii5 + 1] = _x * _m01 + _y * _m05 + _m13; + } + _buffer.adjustForSpine(_vertexCount, _indexCount); + if (!_needColor) continue; + var frameColorOffset = frameVFOffset - segVFCount; + for (var _ii6 = _vfOffset + 4, _il3 = _vfOffset + 4 + segVFCount; _ii6 < _il3; _ii6 += 6, + frameColorOffset += 6) { + if (frameColorOffset >= maxVFOffset) { + nowColor = colors[colorOffset++]; + _handleColor(nowColor); + maxVFOffset = nowColor.vfOffset; + } + uintbuf[_ii6] = _finalColor32; + uintbuf[_ii6 + 1] = _darkColor32; + } + } + }; + _proto.fillBuffers = function fillBuffers(comp, renderer) { + var node = comp.node; + node._renderFlag |= RenderFlow.FLAG_UPDATE_RENDER_DATA; + if (!comp._skeleton) return; + var nodeColor = node._color; + _nodeR = nodeColor.r / 255; + _nodeG = nodeColor.g / 255; + _nodeB = nodeColor.b / 255; + _nodeA = nodeColor.a / 255; + var baseMaterial = comp._materials[0]; + if (!baseMaterial) return; + _useMulti = baseMaterial.material.isMultiSupport(); + _useTint = !_useMulti && (comp.useTint || comp.isAnimationCached()); + _vertexFormat = _useMulti ? VFOneColorTexId : _useTint ? VFTwoColor : VFOneColor; + _perVertexSize = _useMulti ? 6 : _useTint ? 6 : 5; + _node = comp.node; + _buffer = renderer.getBuffer("mesh", _vertexFormat); + _renderer = renderer; + _comp = comp; + _mustFlush = true; + _premultipliedAlpha = comp.premultipliedAlpha; + _multiplier = 1; + _handleVal = 0; + _needColor = false; + _vertexEffect = comp._effectDelegate && comp._effectDelegate._vertexEffect; + (4294967295 !== nodeColor._val || _premultipliedAlpha) && (_needColor = true); + _useTint && (_handleVal |= FLAG_TWO_COLOR); + var worldMat = void 0; + if (_comp.enableBatch) { + worldMat = _node._worldMatrix; + _mustFlush = false; + _handleVal |= FLAG_BATCH; + } + if (comp.isAnimationCached()) this.cacheTraverse(worldMat); else { + _vertexEffect && _vertexEffect.begin(comp._skeleton); + this.realTimeTraverse(worldMat); + _vertexEffect && _vertexEffect.end(); + } + renderer.worldMatDirty++; + comp.attachUtil._syncAttachedNode(); + _node = void 0; + _buffer = void 0; + _renderer = void 0; + _comp = void 0; + _vertexEffect = null; + }; + _proto.postFillBuffers = function postFillBuffers(comp, renderer) { + renderer.worldMatDirty--; + }; + return SpineAssembler; + })(_assembler["default"]); + exports["default"] = SpineAssembler; + _assembler["default"].register(Skeleton, SpineAssembler); + module.exports = exports["default"]; + }), { + "../../cocos2d/core/renderer/assembler": 149, + "../../cocos2d/core/renderer/render-flow": 153, + "../../cocos2d/core/renderer/webgl/vertex-format": 190, + "./Skeleton": 274, + "./lib/spine": 276 + } ], + 281: [ (function(require, module, exports) { + "use strict"; + var TrackEntryListeners = function TrackEntryListeners() { + this.start = null; + this.end = null; + this.complete = null; + this.event = null; + this.interrupt = null; + this.dispose = null; + }; + TrackEntryListeners.getListeners = function(entry) { + entry.listener || (entry.listener = new TrackEntryListeners()); + return entry.listener; + }; + module.exports = TrackEntryListeners; + }), {} ], + 282: [ (function(require, module, exports) { + "use strict"; + var spine = require("./lib/spine"); + sp.VertexEffectDelegate = cc.Class({ + name: "sp.VertexEffectDelegate", + ctor: function ctor() { + this._vertexEffect = null; + this._interpolation = null; + this._effectType = "none"; + }, + clear: function clear() { + this._vertexEffect = null; + this._interpolation = null; + this._effectType = "none"; + }, + initJitter: function initJitter(jitterX, jitterY) { + this._effectType = "jitter"; + this._vertexEffect = new spine.JitterEffect(jitterX, jitterY); + return this._vertexEffect; + }, + initSwirlWithPow: function initSwirlWithPow(radius, power) { + this._interpolation = new spine.Pow(power); + this._vertexEffect = new spine.SwirlEffect(radius, this._interpolation); + return this._vertexEffect; + }, + initSwirlWithPowOut: function initSwirlWithPowOut(radius, power) { + this._interpolation = new spine.PowOut(power); + this._vertexEffect = new spine.SwirlEffect(radius, this._interpolation); + return this._vertexEffect; + }, + getJitterVertexEffect: function getJitterVertexEffect() { + return this._vertexEffect; + }, + getSwirlVertexEffect: function getSwirlVertexEffect() { + return this._vertexEffect; + }, + getVertexEffect: function getVertexEffect() { + return this._vertexEffect; + }, + getEffectType: function getEffectType() { + return this._effectType; + } + }); + module.exports = sp.VertexEffectDelegate; + }), { + "./lib/spine": 276 + } ], + 283: [ (function(require, module, exports) { + "use strict"; + var _global = "undefined" === typeof window ? global : window; + _global.cc = _global.cc || {}; + cc.internal = cc.internal || {}; + require("./predefine"); + require("./polyfill/string"); + require("./polyfill/misc"); + require("./polyfill/array"); + require("./polyfill/object"); + require("./polyfill/array-buffer"); + require("./polyfill/number"); + true; + require("./polyfill/typescript"); + require("./cocos2d/core/predefine"); + true; + require("./cocos2d"); + require("./extends"); + false; + module.exports = _global.cc; + }), { + "./cocos2d": 233, + "./cocos2d/core/predefine": 146, + "./extends": 272, + "./package": void 0, + "./polyfill/array": 285, + "./polyfill/array-buffer": 284, + "./polyfill/misc": 286, + "./polyfill/number": 287, + "./polyfill/object": 288, + "./polyfill/string": 289, + "./polyfill/typescript": 290, + "./predefine": 291 + } ], + 284: [ (function(require, module, exports) { + "use strict"; + if (!ArrayBuffer.isView) { + var TypedArray = Object.getPrototypeOf(Int8Array); + ArrayBuffer.isView = "function" === typeof TypedArray ? function(obj) { + return obj instanceof TypedArray; + } : function(obj) { + if ("object" !== typeof obj) return false; + var ctor = obj.constructor; + return ctor === Float64Array || ctor === Float32Array || ctor === Uint8Array || ctor === Uint32Array || ctor === Int8Array; + }; + } + }), {} ], + 285: [ (function(require, module, exports) { + "use strict"; + Array.isArray || (Array.isArray = function(arg) { + return "[object Array]" === Object.prototype.toString.call(arg); + }); + Array.prototype.find || (Array.prototype.find = function(callback) { + var length = this.length; + for (var i = 0; i < length; i++) { + var element = this[i]; + if (callback.call(this, element, i, this)) return element; + } + return; + }); + Array.prototype.includes || (Array.prototype.includes = function(value) { + return -1 !== this.indexOf(value); + }); + }), {} ], + 286: [ (function(require, module, exports) { + "use strict"; + Math.sign || (Math.sign = function(x) { + x = +x; + if (0 === x || isNaN(x)) return x; + return x > 0 ? 1 : -1; + }); + Math.log2 || (Math.log2 = function(x) { + return Math.log(x) * Math.LOG2E; + }); + Number.isInteger || (Number.isInteger = function(value) { + return "number" === typeof value && isFinite(value) && Math.floor(value) === value; + }); + if ((false, false) || !console.time) { + var Timer = window.performance || Date; + var _timerTable = Object.create(null); + console.time = function(label) { + _timerTable[label] = Timer.now(); + }; + console.timeEnd = function(label) { + var startTime = _timerTable[label]; + var duration = Timer.now() - startTime; + console.log(label + ": " + duration + "ms"); + }; + } + }), {} ], + 287: [ (function(require, module, exports) { + "use strict"; + Number.parseFloat = Number.parseFloat || parseFloat; + Number.parseInt = Number.parseInt || parseInt; + }), {} ], + 288: [ (function(require, module, exports) { + "use strict"; + Object.assign || (Object.assign = function(target, source) { + return cc.js.mixin(target, source); + }); + Object.getOwnPropertyDescriptors || (Object.getOwnPropertyDescriptors = function(obj) { + var descriptors = {}; + var ownKeys = Object.getOwnPropertyNames(obj); + Object.getOwnPropertySymbols && (ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(obj))); + for (var i = 0; i < ownKeys.length; ++i) { + var key = ownKeys[i]; + descriptors[key] = Object.getOwnPropertyDescriptor(obj, key); + } + return descriptors; + }); + }), {} ], + 289: [ (function(require, module, exports) { + "use strict"; + String.prototype.startsWith || (String.prototype.startsWith = function(searchString, position) { + position = position || 0; + return this.lastIndexOf(searchString, position) === position; + }); + String.prototype.endsWith || (String.prototype.endsWith = function(searchString, position) { + ("undefined" === typeof position || position > this.length) && (position = this.length); + position -= searchString.length; + var lastIndex = this.indexOf(searchString, position); + return -1 !== lastIndex && lastIndex === position; + }); + String.prototype.trimLeft || (String.prototype.trimLeft = function() { + return this.replace(/^\s+/, ""); + }); + }), {} ], + 290: [ (function(require, module, exports) { + "use strict"; + var extendStatics = Object.setPrototypeOf || { + __proto__: [] + } instanceof Array && function(d, b) { + d.__proto__ = b; + } || function(d, b) { + for (var p in b) b.hasOwnProperty(p) && (d[p] = b[p]); + }; + window.__extends = function(d, b) { + extendStatics(d, b); + function __() { + this.constructor = d; + } + d.prototype = null === b ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + window.__assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) Object.prototype.hasOwnProperty.call(s, p) && (t[p] = s[p]); + } + return t; + }; + window.__rest = function(s, e) { + var t = {}; + for (var p in s) Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0 && (t[p] = s[p]); + if (null != s && "function" === typeof Object.getOwnPropertySymbols) for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]) && (t[p[i]] = s[p[i]]); + return t; + }; + window.__decorate = function(decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : null === desc ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if ("object" === typeof Reflect && "function" === typeof Reflect.decorate) r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) (d = decorators[i]) && (r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r); + return c > 3 && r && Object.defineProperty(target, key, r), r; + }; + window.__param = function(paramIndex, decorator) { + return function(target, key) { + decorator(target, key, paramIndex); + }; + }; + window.__metadata = function(metadataKey, metadataValue) { + if ("object" === typeof Reflect && "function" === typeof Reflect.metadata) return Reflect.metadata(metadataKey, metadataValue); + }; + window.__awaiter = function(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function(resolve) { + resolve(value); + }); + } + return new (P || (P = Promise))(function(resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + } + function rejected(value) { + try { + step(generator["throw"](value)); + } catch (e) { + reject(e); + } + } + function step(result) { + result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); + }; + window.__generator = function(thisArg, body) { + var _ = { + label: 0, + sent: function sent() { + if (1 & t[0]) throw t[1]; + return t[1]; + }, + trys: [], + ops: [] + }, f, y, t, g; + return g = { + next: verb(0), + throw: verb(1), + return: verb(2) + }, "function" === typeof Symbol && (g[Symbol.iterator] = function() { + return this; + }), g; + function verb(n) { + return function(v) { + return step([ n, v ]); + }; + } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = 2 & op[0] ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), + 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + (y = 0, t) && (op = [ 2 & op[0], t.value ]); + switch (op[0]) { + case 0: + case 1: + t = op; + break; + + case 4: + _.label++; + return { + value: op[1], + done: false + }; + + case 5: + _.label++; + y = op[1]; + op = [ 0 ]; + continue; + + case 7: + op = _.ops.pop(); + _.trys.pop(); + continue; + + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (6 === op[0] || 2 === op[0])) { + _ = 0; + continue; + } + if (3 === op[0] && (!t || op[1] > t[0] && op[1] < t[3])) { + _.label = op[1]; + break; + } + if (6 === op[0] && _.label < t[1]) { + _.label = t[1]; + t = op; + break; + } + if (t && _.label < t[2]) { + _.label = t[2]; + _.ops.push(op); + break; + } + t[2] && _.ops.pop(); + _.trys.pop(); + continue; + } + op = body.call(thisArg, _); + } catch (e) { + op = [ 6, e ]; + y = 0; + } finally { + f = t = 0; + } + if (5 & op[0]) throw op[1]; + return { + value: op[0] ? op[1] : void 0, + done: true + }; + } + }; + window.__exportStar = function(m, o) { + for (var p in m) "default" === p || Object.prototype.hasOwnProperty.call(o, p) || __createBinding(o, m, p); + }; + window.__createBinding = Object.create ? function(o, m, k, k2) { + void 0 === k2 && (k2 = k); + Object.defineProperty(o, k2, { + enumerable: true, + get: function get() { + return m[k]; + } + }); + } : function(o, m, k, k2) { + void 0 === k2 && (k2 = k); + o[k2] = m[k]; + }; + window.__values = function(o) { + var s = "function" === typeof Symbol && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && "number" === typeof o.length) return { + next: function next() { + o && i >= o.length && (o = void 0); + return { + value: o && o[i++], + done: !o + }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); + }; + window.__read = function(o, n) { + var m = "function" === typeof Symbol && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((void 0 === n || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } catch (error) { + e = { + error: error + }; + } finally { + try { + r && !r.done && (m = i["return"]) && m.call(i); + } finally { + if (e) throw e.error; + } + } + return ar; + }; + window.__spread = function() { + for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i])); + return ar; + }; + window.__spreadArrays = function() { + for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; + for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, + k++) r[k] = a[j]; + return r; + }; + window.__await = function(v) { + return this instanceof __await ? (this.v = v, this) : new __await(v); + }; + window.__asyncGenerator = function(thisArg, _arguments, generator) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function() { + return this; + }, i; + function verb(n) { + g[n] && (i[n] = function(v) { + return new Promise(function(a, b) { + q.push([ n, v, a, b ]) > 1 || resume(n, v); + }); + }); + } + function resume(n, v) { + try { + step(g[n](v)); + } catch (e) { + settle(q[0][3], e); + } + } + function step(r) { + r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); + } + function fulfill(value) { + resume("next", value); + } + function reject(value) { + resume("throw", value); + } + function settle(f, v) { + (f(v), q.shift(), q.length) && resume(q[0][0], q[0][1]); + } + }; + window.__asyncDelegator = function(o) { + var i, p; + return i = {}, verb("next"), verb("throw", (function(e) { + throw e; + })), verb("return"), i[Symbol.iterator] = function() { + return this; + }, i; + function verb(n, f) { + i[n] = o[n] ? function(v) { + return (p = !p) ? { + value: __await(o[n](v)), + done: "return" === n + } : f ? f(v) : v; + } : f; + } + }; + window.__asyncValues = function(o) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = "function" === typeof __values ? __values(o) : o[Symbol.iterator](), + i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function() { + return this; + }, i); + function verb(n) { + i[n] = o[n] && function(v) { + return new Promise(function(resolve, reject) { + v = o[n](v), settle(resolve, reject, v.done, v.value); + }); + }; + } + function settle(resolve, reject, d, v) { + Promise.resolve(v).then((function(v) { + resolve({ + value: v, + done: d + }); + }), reject); + } + }; + window.__makeTemplateObject = function(cooked, raw) { + Object.defineProperty ? Object.defineProperty(cooked, "raw", { + value: raw + }) : cooked.raw = raw; + return cooked; + }; + var __setModuleDefault = Object.create ? function(o, v) { + Object.defineProperty(o, "default", { + enumerable: true, + value: v + }); + } : function(o, v) { + o["default"] = v; + }; + window.__importStar = function(mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (null != mod) for (var k in mod) "default" !== k && Object.prototype.hasOwnProperty.call(mod, k) && __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; + }; + window.__importDefault = function(mod) { + return mod && mod.__esModule ? mod : { + default: mod + }; + }; + window.__classPrivateFieldGet = function(receiver, privateMap) { + if (!privateMap.has(receiver)) throw new TypeError("attempted to get private field on non-instance"); + return privateMap.get(receiver); + }; + window.__classPrivateFieldSet = function(receiver, privateMap, value) { + if (!privateMap.has(receiver)) throw new TypeError("attempted to set private field on non-instance"); + privateMap.set(receiver, value); + return value; + }; + }), {} ], + 291: [ (function(require, module, exports) { + "use strict"; + var _global = "undefined" === typeof window ? global : window; + function defineMacro(name, defaultValue) { + "undefined" === typeof _global[name] && (_global[name] = defaultValue); + } + function defineDeprecatedMacroGetter(name, defaultValue) { + "undefined" === typeof _global[name] && Object.defineProperty(_global, name, { + get: function get() { + var recommandedUsage; + "CC_WECHATGAMESUB" === name ? recommandedUsage = "cc.sys.platform === cc.sys.WECHAT_GAME_SUB" : "CC_WECHATGAME" === name ? recommandedUsage = "cc.sys.platform === cc.sys.WECHAT_GAME" : "CC_QQPLAY" === name && (recommandedUsage = "cc.sys.platform === cc.sys.QQ_PLAY"); + cc.warnID(1400, name, recommandedUsage); + return defaultValue; + } + }); + } + function defined(name) { + return "object" === typeof _global[name]; + } + defineMacro("CC_BUILD", false); + true; + _global.CC_BUILD = true; + _global.CC_DEV = false; + _global.CC_DEBUG = true; + _global.CC_JSB = false; + _global.CC_NATIVERENDERER = false; + _global.CC_SUPPORT_JIT = true; + _global.CC_PHYSICS_BUILTIN = false; + _global.CC_PHYSICS_CANNON = false; + _global.CC_EDITOR = false; + _global.CC_PREVIEW = false; + _global.CC_TEST = false; + _global.CC_RUNTIME = false; + _global.CC_JSB = false; + var WECHATGAMESUB = !!(defined("wx") && wx.getSharedCanvas); + var WECHATGAME = !!(defined("wx") && (wx.getSystemInfoSync || wx.getSharedCanvas)); + var QQPLAY = defined("bk"); + defineDeprecatedMacroGetter("CC_WECHATGAMESUB", WECHATGAMESUB); + defineDeprecatedMacroGetter("CC_WECHATGAME", WECHATGAME); + defineDeprecatedMacroGetter("CC_QQPLAY", QQPLAY); + false; + var engineVersion = "2.4.5"; + _global["CocosEngine"] = cc.ENGINE_VERSION = engineVersion; + }), {} ] +}, {}, [ 283 ]); +//# sourceMappingURL=cocos2d-js.js.map diff --git a/demo/web-desktop/cocos2d-js.js.e63e9.map b/demo/web-desktop/cocos2d-js.js.e63e9.map new file mode 100644 index 00000000..913f2da3 --- /dev/null +++ b/demo/web-desktop/cocos2d-js.js.e63e9.map @@ -0,0 +1 @@ +{"version":3,"sources":["Users/smallmain/Documents/Work/test/engine/gulp/browserify_prelude.js","Users/smallmain/Documents/Work/test/engine/DebugInfos.json","cocos2d-js.931db.js","Users/smallmain/Documents/Work/test/engine/cocos2d/actions/CCAction.js","Users/smallmain/Documents/Work/test/engine/cocos2d/actions/CCActionCatmullRom.js","Users/smallmain/Documents/Work/test/engine/cocos2d/actions/CCActionEase.js","Users/smallmain/Documents/Work/test/engine/cocos2d/actions/CCActionInstant.js","Users/smallmain/Documents/Work/test/engine/cocos2d/actions/CCActionInterval.js","Users/smallmain/Documents/Work/test/engine/cocos2d/actions/CCActionManager.js","Users/smallmain/Documents/Work/test/engine/cocos2d/actions/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/actions/tween.js","Users/smallmain/Documents/Work/test/engine/cocos2d/animation/animation-animator.js","Users/smallmain/Documents/Work/test/engine/cocos2d/animation/animation-clip.js","Users/smallmain/Documents/Work/test/engine/cocos2d/animation/animation-curves.js","Users/smallmain/Documents/Work/test/engine/cocos2d/animation/animation-manager.js","Users/smallmain/Documents/Work/test/engine/cocos2d/animation/animation-state.js","Users/smallmain/Documents/Work/test/engine/cocos2d/animation/bezier.js","Users/smallmain/Documents/Work/test/engine/cocos2d/animation/easing.js","Users/smallmain/Documents/Work/test/engine/cocos2d/animation/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/animation/motion-path-helper.js","Users/smallmain/Documents/Work/test/engine/cocos2d/animation/playable.js","Users/smallmain/Documents/Work/test/engine/cocos2d/animation/types.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/CCDebug.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/CCDirector.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/CCGame.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/CCNode.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/CCPrivateNode.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/CCScene.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/CCScheduler.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/CCAssetManager.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/builtins.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/bundle.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/cache.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/config.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/depend-util.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/deprecated.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/deserialize.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/download-dom-audio.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/download-dom-image.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/download-file.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/download-script.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/downloader.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/factory.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/fetch.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/font-loader.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/helper.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/load.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/pack-manager.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/parser.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/pipeline.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/preprocess.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/releaseManager.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/request-item.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/shared.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/task.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/urlTransformer.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/utilities.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/CCAsset.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/CCAudioClip.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/CCBitmapFont.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/CCBufferAsset.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/CCFont.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/CCJsonAsset.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/CCLabelAtlas.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/CCPrefab.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/CCRenderTexture.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/CCSceneAsset.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/CCScripts.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/CCSpriteAtlas.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/CCSpriteFrame.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/CCTTFFont.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/CCTextAsset.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/CCTexture2D.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/material/CCEffectAsset.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/material/CCMaterial.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/material/effect-base.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/material/effect-parser.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/material/effect-variant.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/material/effect.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/material/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/material/material-pool.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/material/material-variant.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/material/utils.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/base-ui/CCWidgetManager.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/camera/CCCamera.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/component-scheduler.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/CCAnimation.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/CCBlockInputEvents.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/CCButton.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/CCCanvas.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/CCComponent.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/CCComponentEventHandler.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/CCLabel.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/CCLabelOutline.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/CCLabelShadow.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/CCLayout.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/CCMotionStreak.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/CCRenderComponent.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/CCRichText.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/CCScrollBar.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/CCSprite.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/CCToggle.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/CCToggleContainer.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/CCToggleGroup.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/CCWidget.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/missing-script.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/event-manager/CCEvent.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/event-manager/CCEventListener.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/event-manager/CCEventManager.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/event-manager/CCTouch.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/event-manager/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/event/event-listeners.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/event/event-target.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/event/event.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/event/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/event/system-event.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/graphics/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/node-activator.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/CCClass.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/CCClassDecorator.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/CCEnum.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/CCInputExtension.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/CCInputManager.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/CCMacro.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/CCObject.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/CCSAXParser.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/CCScreen.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/CCSys.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/CCView.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/CCVisibleRect.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/attribute.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/callbacks-invoker.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/compiler.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/deserialize-compiled.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/deserialize.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/id-generater.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/instantiate-jit.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/instantiate.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/js.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/preprocess-class.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/requiring-frame.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/utils.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/predefine.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/assembler-2d.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/assembler-pool.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/assembler.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/canvas/Device.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/canvas/Texture2D.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/render-flow.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/utils/dynamic-atlas/manager.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/utils/dynamic-atlas/reusable-atlas.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/utils/label/bmfont.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/utils/label/label-frame.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/utils/label/letter-font.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/utils/label/ttf.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/utils/utils.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/label/2d-multi/bmfont.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/label/2d-multi/ttf.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/label/2d/bmfont.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/label/2d/letter.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/label/2d/nativeTTF.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/label/2d/ttf.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/label/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/motion-streak-multi.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/motion-streak.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/sprite/2d-multi/bar-filled.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/sprite/2d-multi/mesh.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/sprite/2d-multi/radial-filled.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/sprite/2d-multi/simple.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/sprite/2d-multi/sliced.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/sprite/2d-multi/tiled.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/sprite/2d/bar-filled.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/sprite/2d/mesh.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/sprite/2d/radial-filled.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/sprite/2d/simple.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/sprite/2d/sliced.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/sprite/2d/tiled.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/sprite/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/flex-buffer.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/mesh-buffer.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/model-batcher.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/quad-buffer.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/render-data.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/spine-buffer.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/vertex-format.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/sp/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/sp/multi-batcher.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/sp/multi-handler.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/sp/sp.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/CCPath.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/affine-transform.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/base-node.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/binary-search.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/blend-func.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/decode-uuid.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/find.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/gray-sprite-state.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/html-text-parser.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/misc.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/mutable-forward-iterator.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/pool.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/prefab-helper.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/profiler/CCProfiler.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/profiler/counter.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/profiler/perf-counter.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/text-utils.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/texture-util.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/trans-pool/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/trans-pool/mem-pool.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/trans-pool/node-mem-pool.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/trans-pool/node-unit.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/trans-pool/unit-base.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/value-types/color.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/value-types/index.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/value-types/mat3.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/value-types/mat4.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/value-types/quat.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/value-types/rect.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/value-types/size.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/value-types/trs.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/value-types/utils.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/value-types/value-type.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/value-types/vec2.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/value-types/vec3.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/value-types/vec4.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/deprecated.js","Users/smallmain/Documents/Work/test/engine/cocos2d/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/particle/CCParticleAsset.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/build/mappings/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/core/base-renderer.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/core/input-assembler.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/core/pass.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/core/program-lib.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/core/technique.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/core/view.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/enums.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/gfx/device.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/gfx/enums.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/gfx/frame-buffer.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/gfx/index-buffer.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/gfx/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/gfx/misc.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/gfx/program.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/gfx/render-buffer.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/gfx/state.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/gfx/texture-2d.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/gfx/texture-cube.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/gfx/texture.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/gfx/vertex-buffer.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/gfx/vertex-format.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/memop/circular-pool.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/memop/fixed-array.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/memop/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/memop/linked-array.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/memop/pool.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/memop/recycle-pool.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/memop/timsort.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/memop/typed-array-pool.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/murmurhash2_gc.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/renderers/forward-renderer.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/scene/camera.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/scene/model.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/scene/scene.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/types.js","Users/smallmain/Documents/Work/test/engine/cocos2d/tilemap/CCTiledMapAsset.js","Users/smallmain/Documents/Work/test/engine/extends.js","Users/smallmain/Documents/Work/test/engine/extensions/spine/AttachUtil.js","Users/smallmain/Documents/Work/test/engine/extensions/spine/Skeleton.js","Users/smallmain/Documents/Work/test/engine/extensions/spine/index.js","Users/smallmain/Documents/Work/test/engine/extensions/spine/lib/spine.js","Users/smallmain/Documents/Work/test/engine/extensions/spine/skeleton-cache.js","Users/smallmain/Documents/Work/test/engine/extensions/spine/skeleton-data.js","Users/smallmain/Documents/Work/test/engine/extensions/spine/skeleton-texture.js","Users/smallmain/Documents/Work/test/engine/extensions/spine/spine-assembler.js","Users/smallmain/Documents/Work/test/engine/extensions/spine/track-entry-listeners.js","Users/smallmain/Documents/Work/test/engine/extensions/spine/vertex-effect-delegate.js","Users/smallmain/Documents/Work/test/engine/index.js","Users/smallmain/Documents/Work/test/engine/polyfill/array-buffer.js","Users/smallmain/Documents/Work/test/engine/polyfill/array.js","Users/smallmain/Documents/Work/test/engine/polyfill/misc.js","Users/smallmain/Documents/Work/test/engine/polyfill/number.js","Users/smallmain/Documents/Work/test/engine/polyfill/object.js","Users/smallmain/Documents/Work/test/engine/polyfill/string.js","Users/smallmain/Documents/Work/test/engine/polyfill/typescript.js","Users/smallmain/Documents/Work/test/engine/predefine.js"],"names":["outer","modules","cache","entry","newRequire","name","jumped","module","moduleData","exports","x","i","length","1","require","1001","1002","1003","1004","1005","1006","1007","1008","1009","1010","1011","1012","1013","1014","1015","1016","1019","1020","1021","1022","1023","1024","1025","1026","1027","1028","1029","1030","1031","1100","1101","1200","1201","1203","1204","1205","1206","1207","1208","1209","1210","1211","1212","1213","1214","1215","1216","1300","1400","1404","1405","1406","1408","1502","1503","1504","1505","1506","1507","1508","1509","1510","1511","1513","1605","1606","1610","1612","1613","1617","1618","1619","1620","1623","1624","1625","1626","1627","1632","1633","1634","1635","1636","1637","1638","1639","1800","1801","1802","1803","1900","2000","2200","2201","2300","2400","2602","2603","2606","2607","2608","2609","2610","2614","2616","2617","2618","2619","2623","2625","2626","2627","2628","2712","3005","3006","3007","3103","3112","3113","3116","3117","3119","3120","3121","3300","3400","3401","3500","3501","3502","3503","3504","3505","3506","3507","3508","3509","3510","3511","3600","3601","3602","3603","3604","3605","3606","3607","3608","3609","3610","3611","3612","3613","3614","3615","3616","3617","3618","3619","3620","3621","3622","3623","3624","3625","3626","3627","3628","3633","3634","3635","3636","3637","3638","3639","3640","3641","3642","3643","3644","3645","3646","3647","3648","3649","3651","3652","3653","3654","3655","3700","3701","3800","3801","3802","3803","3804","3805","3806","3807","3808","3809","3810","3811","3812","3813","3814","3815","3816","3817","3818","3819","3820","3821","3900","3901","3902","3903","3904","3905","3906","3907","3912","4003","4004","4011","4012","4013","4200","4201","4202","4300","4400","4600","4700","4800","4901","4902","4914","4915","4916","4921","4922","4923","4924","4925","4926","4927","4928","4929","4930","4932","4933","5000","5001","5100","5200","5201","5202","5300","5301","5302","5303","5304","5402","5403","5404","5405","5406","5500","5501","5507","5508","5510","5511","5512","5513","5514","5515","5516","5517","5601","5602","5603","5700","5800","5801","5802","5900","5901","5902","6000","6001","6017","6018","6019","6020","6021","6022","6023","6024","6025","6026","6027","6028","6029","6030","6031","6032","6400","6402","6500","6600","6601","6700","6800","6801","6900","6901","6902","6903","6904","6905","7100","7101","7200","7201","7202","7203","7210","7211","7215","7216","7217","7218","7219","7221","7222","7236","7237","7238","7239","7240","7241","7401","7402","7501","7502","7503","7504","7506","7507","7508","7509","7510","7600","7601","7602","7603","7604","7605","7700","7701","7702","7800","7801","7802","7803","7804","7805","7900","7901","7902","7903","7904","7905","7906","7907","7908","7909","8000","8001","8002","8003","8103","8104","8105","8106","8107","8108","8109","8200","8300","8301","8400","8401","9000","9001","9100","9101","9102","9103","9104","9105","9106","9107","9200","0100","2","misc","cc","Action","Class","ctor","this","originalTarget","target","tag","TAG_INVALID","clone","action","isDone","startWithTarget","stop","step","dt","logID","update","getTarget","setTarget","getOriginalTarget","setOriginalTarget","getTag","setTag","retain","release","FiniteTimeAction","extends","_duration","getDuration","_timesForRepeat","setDuration","duration","reverse","Speed","speed","_speed","_innerAction","initWithAction","getSpeed","setSpeed","errorID","prototype","call","setInnerAction","getInnerAction","Follow","followedNode","rect","_followedNode","_boundarySet","_boundaryFullyCovered","_halfScreenSize","_fullScreenSize","leftBoundary","rightBoundary","topBoundary","bottomBoundary","_worldRect","initWithTarget","locRect","Rect","y","width","height","isBoundarySet","setBoudarySet","value","_this","winSize","v2","mul","targetWorldPos","convertToWorldSpaceAR","Vec2","ZERO","followedWorldPos","delta","sub","tempPos","parent","convertToNodeSpaceAR","add","setPosition","clampf","activeInHierarchy","follow","../core/platform/CCClass","../core/utils/misc","3","cardinalSplineAt","p0","p1","p2","p3","tension","t","t2","t3","s","b1","b2","b3","b4","getControlPointAt","controlPoints","pos","p","Math","min","max","reverseControlPoints","newArray","push","cloneControlPoints","CardinalSplineTo","ActionInterval","points","_points","_deltaT","_tension","_previousPosition","_accumulatedDiff","undefined","initWithDuration","setPoints","_computeEaseTime","lt","ps","locDT","newPos","macro","ENABLE_STACKABLE_ACTIONS","tempX","tempY","locAccDiff","updatePosition","reversePoints","cardinalSplineTo","getPoints","CardinalSplineBy","_startPosition","copyConfig","slice","current","reverseArray","pop","unshift","cardinalSplineBy","posX","posY","a","CatmullRomTo","catmullRomTo","CatmullRomBy","catmullRomBy","4","easeIn","rate","_rate","easing","pow","easeOut","easeInOut","_easeExponentialInObj","_easeExponentialOutObj","easeExponentialIn","easeExponentialOut","_easeExponentialInOutObj","easeExponentialInOut","_easeSineInObj","cos","PI","_easeSineOutObj","easeSineIn","sin","easeSineOut","_easeSineInOutObj","easeSineInOut","_easeElasticInObj","_easeElasticOutObj","easeElasticIn","period","_period","easeElasticOut","easeElasticInOut","newT","locPeriod","_bounceTime","time1","_easeBounceInObj","_easeBounceOutObj","easeBounceIn","easeBounceOut","_easeBounceInOutObj","easeBounceInOut","_easeBackInObj","overshoot","_easeBackOutObj","easeBackIn","easeBackOut","_easeBackInOutObj","easeBackInOut","easeBezierAction","b","c","d","_easeQuadraticActionIn","time","easeQuadraticActionIn","_easeQuadraticActionOut","easeQuadraticActionOut","_easeQuadraticActionInOut","resultTime","easeQuadraticActionInOut","_easeQuarticActionIn","easeQuarticActionIn","_easeQuarticActionOut","easeQuarticActionOut","_easeQuarticActionInOut","easeQuarticActionInOut","_easeQuinticActionIn","easeQuinticActionIn","_easeQuinticActionOut","easeQuinticActionOut","_easeQuinticActionInOut","easeQuinticActionInOut","_easeCircleActionIn","sqrt","easeCircleActionIn","_easeCircleActionOut","easeCircleActionOut","_easeCircleActionInOut","easeCircleActionInOut","_easeCubicActionIn","easeCubicActionIn","_easeCubicActionOut","easeCubicActionOut","_easeCubicActionInOut","easeCubicActionInOut","5","ActionInstant","Show","_renderComps","getComponentsInChildren","RenderComponent","render","enabled","Hide","show","hide","ToggleVisibility","toggleVisibility","RemoveSelf","isNeedCleanUp","_isNeedCleanUp","init","removeFromParent","removeSelf","DestroySelf","destroy","destroySelf","FlipX","flip","_flippedX","initWithFlipX","scaleX","abs","flipX","FlipY","_flippedY","initWithFlipY","scaleY","flipY","Place","_x","_y","initWithPosition","place","CallFunc","selector","selectorTarget","data","_selectorTarget","_function","_data","initWithFunction","execute","getTargetCallback","setTargetCallback","sel","callFunc","6","MAX_VALUE","_elapsed","_firstTick","_easeList","_repeatForever","_repeatMethod","_speedMethod","getElapsed","FLT_EPSILON","_cloneDecoration","_reverseEaseList","easeObj","arguments","locList","n","setAmplitudeRate","amp","getAmplitudeRate","repeat","times","round","isNaN","repeatForever","actionInterval","Sequence","tempArray","_actions","_split","_last","_reversed","paramArray","Array","last","prev","action1","_actionOneTwo","initWithTwoActions","actionOne","actionTwo","durationOne","durationTwo","new_t","found","locSplit","locActions","locLast","actionFound","sequence","result","Repeat","_times","_total","_nextDt","_actionInstant","locInnerAction","locDuration","locTimes","locNextDt","RepeatForever","Spawn","_one","_two","action2","ret","d1","d2","delayTime","spawn","pSpawn","RotateTo","statics","_reverse","dstAngle","_startAngle","_dstAngle","_angle","startAngle","angle","rotateTo","RotateBy","deltaAngle","_deltaAngle","rotateBy","MoveBy","deltaPos","deltaY","_positionDelta","position","locPosX","locPosY","locStartPosition","targetX","targetY","locPreviousPosition","moveBy","MoveTo","_endPosition","moveTo","SkewTo","sx","sy","_skewX","_skewY","_startSkewX","_startSkewY","_endSkewX","_endSkewY","_deltaX","_deltaY","skewX","skewY","skewTo","SkewBy","deltaSkewX","deltaSkewY","skewBy","JumpBy","jumps","_delta","_height","_jumps","frac","jumpBy","JumpTo","jumpTo","bezierAt","BezierBy","_config","newConfigs","selConf","locConfig","xa","xb","xc","xd","ya","yb","yc","yd","x0","y0","x1","y1","x2","y2","r","bezierBy","BezierTo","_toConfig","locStartPos","locToConfig","bezierTo","ScaleTo","_scaleX","_scaleY","_startScaleX","_startScaleY","_endScaleX","_endScaleY","scaleTo","ScaleBy","scaleBy","Blink","blinks","_originalState","m","opacity","blink","FadeTo","_toOpacity","_fromOpacity","fromOpacity","fadeTo","FadeIn","_reverseAction","FadeOut","fadeIn","fadeOut","TintTo","red","green","blue","_to","color","_from","Color","g","locTo","locFrom","tintTo","TintBy","deltaRed","deltaGreen","deltaBlue","_deltaR","_deltaG","_deltaB","_fromR","_fromG","_fromB","tintBy","DelayTime","ReverseTime","_other","reverseTime","TargetedAction","_action","_forcedTarget","getForcedTarget","setForcedTarget","forcedTarget","targetedAction","7","js","HashElement","actions","actionIndex","currentAction","paused","lock","ActionManager","_hashTargets","createMap","_arrayTargets","_currentTarget","director","_scheduler","enableForTarget","constructor","_elementPool","_searchElementByTarget","arr","k","_getElement","element","_putElement","addAction","_id","removeAllActions","locTargets","removeAllActionsFromTarget","forceDelete","_deleteHashElement","removeAction","splice","_removeActionByTag","l","_removeActionAtIndex","removeActionByTag","hashTargets","_element","getActionByTag","getNumberOfRunningActionsInTarget","pauseTarget","resumeTarget","pauseAllRunningActions","idsWithActions","resumeTargets","targetsToResume","pauseTargets","targetsToPause","purgeSharedManager","getScheduler","unscheduleUpdate","index","targets","locCurrTarget","elt","CC_TEST","../core/platform/js","8","./CCAction","./CCActionCatmullRom","./CCActionEase","./CCActionInstant","./CCActionInterval","./CCActionManager","./tween","9","_bezier","_tweenID","TweenAction","props","opts","_opts","Object","create","_props","progress","easingName","warnID","relative","isNumber","lerp","warn","prop","_originProps","start","end","easingTime","onUpdate","SetAction","Tween","_finalAction","_target","_tag","stopAll","getActionManager","stopAllByTag","stopAllByTarget","then","other","_union","isValid","tween","union","assign","c1","c2","to","c0x","c0y","c1x","c1y","bezier","by","_this2","tmp_args","wrapAction","arg","apply","set","delay","parallel","previousAsInputActions","keys","_loop","key","_loop2","_i","args","_i2","../animation/bezier","10","Playable","_require","EventAnimCurve","EventInfo","WrapModeMask","binarySearch","binarySearchEpsilon","AnimationAnimator","animation","_anims","array","MutableForwardIterator","extend","playState","state","startTime","clip","curveLoaded","initClipData","animator","play","setTime","stopStatesExcept","iterator","anim","stopState","addAnimation","indexOf","_setEventTarget","removeAnimation","fastRemoveAt","sample","pauseState","pause","resumeState","resume","isPaused","setStateTime","onStop","onPause","onResume","_reloadClip","createBatchedProperty","propPath","firstDotIndex","mainValue","animValue","nextValue","leftIndex","rightIndex","nextName","lastPropName","root","wrapMode","frameRate","Loop","repeatCount","Infinity","curves","createCurves","events","curve","eventData","ratio","frame","eventInfo","ratios","func","params","../core/utils/binary-search","./animation-curves","./playable","./types","11","WrapMode","DynamicAnimCurve","quickFindIndex","sampleMotionPaths","AnimationClip","Asset","properties","default","type","Float","get","Normal","curveData","visible","createWithSpriteFrames","spriteFrames","isArray","frames","comps","cc.Sprite","spriteFrame","onLoad","Number","parseFloat","parseInt","createPropCurve","keyframes","motionPaths","isMotionPathProp","Node","keyframe","motionPath","curveValue","values","curveTypes","types","Linear","Bezier","currRatioDif","lastRatioDif","canOptimize","EPSILON","_l","_findFrameIndex","firstValue","_lerp","_lerpNumber","Quat","_lerpQuat","_lerpVector2","Vec3","_lerpVector3","_lerpObject","createTargetCurves","propsData","compsData","compName","comp","getComponent","compData","_propPath","_curve","childrenCurveDatas","paths","namePath","find","childCurveDatas","./motion-path-helper","12","bezierByTime","WrappedInfo","computeRatioByType","AnimCurve","onTimeChangedManually","eachLength","floorIndex","_cachedIndex","from","out","quat","v3","frameCount","shoudRefind","cachedIndex","_fromRatio","_toRatio","fromVal","fromRatio","toRatio","ratioBetweenFrames","toVal","_wrappedInfo","_default","_lastWrappedInfo","_ignoreIndex","NaN","_wrapIterations","iterations","currentWrappedInfo","getWrappedInfo","direction","currentIndex","frameIndex","_fireEvent","currentIterations","lastWrappedInfo","lastIterations","lastIndex","lastDirection","interationsChanged","PingPong","getAnimationManager","pushDelayEvent","components","_components","event","funcName","j","component","info","./bezier","13","AnimationManager","_delayEvents","_isPlaying","_isPaused","destruct","14","Types","AnimationState","_currentFramePlayed","_delay","_delayTime","_process","process","_clip","_name","_lastframeEventOn","emit","proto","_emit","on","callback","once","self","off","hasEventListener","onPlay","lastInfo","stopped","simpleProcess","len","_lastIterations","_needRevers","needRevers","isEnd","isOddIteration","Reverse","tempRatio","tempTime","shouldWrap","_wrapMode","ShouldWrap","obsolete","getset","CC_EDITOR","_repeatCount","15","C1","C2","C3","C4","t1","acos","pi","tau","crt","v","cardano","pa","pb","pc","pd","pa3","pb3","pc3","rd","r3","a3","q","q2","discriminant","u1","v1","x3","mp3","mp33","cosphi","phi","crtr","sd","percent","p1y","p2y","16","constant","linear","quadIn","quadOut","quadInOut","cubicIn","cubicOut","cubicInOut","quartIn","quartOut","quartInOut","quintIn","quintOut","quintInOut","sineIn","sineOut","sineInOut","expoIn","expoOut","expoInOut","circIn","circOut","circInOut","elasticIn","asin","elasticOut","elasticInOut","backIn","backOut","backInOut","bounceIn","bounceOut","bounceInOut","smooth","fade","_makeOutIn","fnIn","fnOut","quadOutIn","cubicOutIn","quartOutIn","quintOutIn","sineOutIn","expoOutIn","circOutIn","backOutIn","bounceOutIn","17","./animation-animator","./animation-clip","./animation-manager","./animation-state","./easing","18","Curve","beziers","progresses","computeBeziers","startPoint","endPoint","startCtrlPoint","endCtrlPoint","getLength","getPointAt","u","getUtoTmapping","getPoint","lengths","getLengths","divisions","__arcLengthDivisions","cacheArcLengths","vector","sum","mag","distance","arcLengths","il","targetArcLength","low","high","comparison","floor","lengthBefore","lengthAfter","segmentLength","segmentFraction","checkMotionPath","controls","fps","createControlPoints","in","map","motionPathValid","_motionPath","newValues","newTypes","newRatios","addNewDatas","startRatioOffset","newType","nextRatio","betweenRatio","results","finalProgress","l2","normal","normalize","bezierIndex","newRatio","19","debug","_stepOnce","virtual","onError","getError","../core/CCDebug","20","Enum","Default","LoopReverse","PingPongReverse","21","utils","debugInfos","ERROR_MAP_URL","logList","log","error","assert","console","bind","resetDebugSetting","mode","DebugMode","NONE","ERROR","logToWebPage","msg","game","canvas","logDiv","document","createElement","setAttribute","logDivStyle","style","zIndex","top","left","logListStyle","backgroundColor","borderBottom","borderTopWidth","borderLeftWidth","borderRightWidth","borderTopStyle","borderLeftStyle","borderRightStyle","padding","margin","appendChild","parentNode","scrollTop","scrollHeight","formatStr","cond","shiftArguments","ERROR_FOR_WEB_PAGE","INFO_FOR_WEB_PAGE","CC_JSB","CC_DEV","Error","INFO","CC_RUNTIME","_throw","callInNextTick","getTypedFormatter","id","argsArray","concat","logFormatter","warnFormatter","errorFormatter","assertFormatter","assertID","WARN","WARN_FOR_WEB_PAGE","_resetDebugSetting","isDisplayStats","profiler","isShowingStats","setDisplayStats","displayStats","renderType","RENDER_TYPE_CANVAS","showStats","hideStats","config","showFPS","../../DebugInfos","./platform/utils","22","EventTarget","ComponentScheduler","NodeActivator","Obj","renderer","eventManager","Scheduler","Director","_paused","_purgeDirectorInNextLoop","_winSizeInPoints","_scene","_loadingScene","_totalFrames","_lastUpdate","_deltaTime","_startTime","_maxParticleDeltaTime","_compScheduler","_nodeActivator","_actionManager","EVENT_SHOW","performance","now","EVENT_ENGINE_INITED","size","scheduleUpdate","PRIORITY_SYSTEM","sharedInit","setEnabled","_animationManager","CollisionManager","_collisionManager","PhysicsManager","_physicsManager","Physics3DManager","CC_PHYSICS_BUILTIN","CC_PHYSICS_CANNON","_physics3DManager","_widgetManager","calculateDeltaTime","CC_DEBUG","convertToGL","uiPoint","container","view","box","getBoundingClientRect","window","pageXOffset","clientLeft","pageYOffset","clientTop","_devicePixelRatio","_isRotated","_viewportRect","convertToUI","glPoint","getWinSize","getWinSizeInPixels","purgeCachedData","assetManager","releaseAll","purgeDirector","unscheduleAll","reset","clear","builtins","runSceneImmediate","scene","onBeforeLoadScene","onLaunched","Scene","SceneAsset","CC_BUILD","_load","timeEnd","persistNodeList","_persistRootNodes","node","existNode","getChildByUuid","uuid","getSiblingIndex","_destroyImmediate","insertChild","oldScene","_releaseManager","_autoRelease","_deferredDestroy","EVENT_BEFORE_SCENE_LAUNCH","_activate","EVENT_AFTER_SCENE_LAUNCH","runScene","EVENT_AFTER_DRAW","loadScene","sceneName","_onUnloaded","bundle","bundles","getSceneInfo","EVENT_BEFORE_SCENE_LOADING","err","preloadScene","onProgress","onLoaded","setDepthTest","Camera","main","depth","setClearColor","clearColor","getRunningScene","getScene","getAnimationInterval","getFrameRate","setAnimationInterval","setFrameRate","getDeltaTime","getTotalTime","getTotalFrames","setScheduler","scheduler","setActionManager","actionManager","getCollisionManager","getPhysicsManager","getPhysics3DManager","startAnimation","stopAnimation","_resetDeltaTime","mainLoop","EVENT_BEFORE_UPDATE","startPhase","updatePhase","lateUpdatePhase","EVENT_AFTER_UPDATE","EVENT_BEFORE_DRAW","frameUpdateListeners","__fastOn","__fastOff","addon","EVENT_PROJECTION_CHANGED","EVENT_BEFORE_VISIT","EVENT_AFTER_VISIT","PROJECTION_2D","PROJECTION_3D","PROJECTION_CUSTOM","PROJECTION_DEFAULT","EVENT_BEFORE_PHYSICS","EVENT_AFTER_PHYSICS","./CCGame","./CCScheduler","./component-scheduler","./event-manager","./event/event-target","./node-activator","./platform/CCObject","./renderer","23","dynamicAtlasManager","EVENT_HIDE","EVENT_RESTART","EVENT_GAME_INITED","EVENT_RENDERER_INITED","RENDER_TYPE_WEBGL","RENDER_TYPE_OPENGL","_configLoaded","_isCloning","_prepared","_rendererInitialized","_renderContext","_intervalId","_lastTime","_frameTime","onStart","cancelAnimFrame","_setAnimFrame","_runMainLoop","audioEngine","_break","_restore","restart","removePersistRootNode","uncacheAll","close","_initEngine","_initRenderer","_initEvents","_loadPreviewScript","cb","CC_PREVIEW","_prepareFinished","ENGINE_VERSION","eventTargetOn","eventTargetOnce","prepare","run","_initConfig","addPersistRootNode","isNode","_persistNode","_addPersistNodeRef","_removePersistNodeRef","isPersistRootNode","rAF","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","requestAnimFrame","_stTimeWithRAF","_stTime","_ctTime","cancelAnimationFrame","cancelRequestAnimationFrame","msCancelRequestAnimationFrame","mozCancelRequestAnimationFrame","oCancelRequestAnimationFrame","webkitCancelRequestAnimationFrame","msCancelAnimationFrame","mozCancelAnimationFrame","webkitCancelAnimationFrame","oCancelAnimationFrame","currTime","timeToCall","setTimeout","clearTimeout","_callback","skip","debugMode","exposeClassName","renderMode","registerSystemEvent","collisionMatrix","groupList","_determineRenderType","userRenderMode","supportRender","sys","capabilities","el","localCanvas","localContainer","addClass","hasClass","className","HTMLElement","querySelector","tagName","insertBefore","clientWidth","clientHeight","body","documentElement","stencil","antialias","ENABLE_WEBGL_ANTIALIAS","alpha","ENABLE_TRANSPARENT_CANVAS","initWebGL","device","_gl","CLEANUP_IMAGE_CACHE","initCanvas","_ctx","oncontextmenu","_isContextMenuEnable","win","hiddenPropName","internal","inputManager","hidden","mozHidden","msHidden","webkitHidden","onHidden","onShown","arg0","arg1","arg2","arg3","arg4","changeList","addEventListener","navigator","userAgent","onfocus","../audio/CCAudioEngine","../core/renderer/utils/dynamic-atlas/manager","./CCDebug","./renderer/index.js","24","_valueTypes","BaseNode","PrefabHelper","nodeMemPool","NodeMemPool","AffineTrans","Event","RenderFlow","Flags","Destroying","ERR_INVALID_NUMBER","ONE_DEGREE","ActionManagerExist","emptyFunc","_gwpVec3","_gwpQuat","_tpVec3a","_tpVec3b","_tpQuata","_tpQuatb","_swpVec3","_gwsVec3","_swsVec3","_gwrtVec3a","_gwrtVec3b","_gwrtQuata","_gwrtQuatb","_laVec3","_laQuat","_urfVec3","_urfQuat","_htVec3a","_htVec3b","_gwrQuat","_swrQuat","_quata","_mat4_temp","mat4","_vec3_temp","_cachedArray","POSITION_ON","SCALE_ON","ROTATION_ON","SIZE_ON","ANCHOR_ON","COLOR_ON","BuiltinGroupIndex","DEBUG","LocalDirtyFlag","POSITION","SCALE","ROTATION","SKEW","TRS","RS","TRSS","PHYSICS_POSITION","PHYSICS_SCALE","PHYSICS_ROTATION","PHYSICS_TRS","PHYSICS_RS","ALL_POSITION","ALL_SCALE","ALL_ROTATION","ALL_TRS","ALL","EventType","TOUCH_START","TOUCH_MOVE","TOUCH_END","TOUCH_CANCEL","MOUSE_DOWN","MOUSE_MOVE","MOUSE_ENTER","MOUSE_LEAVE","MOUSE_UP","MOUSE_WHEEL","POSITION_CHANGED","ROTATION_CHANGED","SCALE_CHANGED","SIZE_CHANGED","ANCHOR_CHANGED","COLOR_CHANGED","CHILD_ADDED","CHILD_REMOVED","CHILD_REORDER","GROUP_CHANGED","SIBLING_ORDER_CHANGED","_touchEvents","_mouseEvents","_skewNeedWarn","_skewWarn","nodePath","NodeUtils","_currentHovered","_touchStartHandler","touch","getLocation","owner","_hitTest","bubbles","dispatchEvent","_touchMoveHandler","_touchEndHandler","_touchCancelHandler","_mouseDownHandler","_mouseMoveHandler","hit","_previousIn","_mouseListener","stopPropagation","_mouseUpHandler","_mouseWheelHandler","_searchComponentsInParent","list","curr","_parent","next","_checkListeners","_objFlags","_bubblingListeners","_capturingListeners","_doDispatchEvent","_getCapturingTargets","eventPhase","currentTarget","_propagationStopped","_propagationImmediateStopped","_getBubblingTargets","_getActualGroupIndex","groupIndex","_updateCullingMask","_cullingMask","_children","updateLocalMatrix3D","_localMatDirty","_matrix","tm","Trs","toMat4","_trs","skx","tan","sky","_worldMatDirty","updateLocalMatrix2D","dirtyFlag","trs","rotation","_eulerAngles","z","hasSkew","rotationRadians","_a","_b","_c","_d","calculWorldMatrix3D","_updateLocalMatrix","parentMat","_worldMatrix","Mat4","copy","calculWorldMatrix2D","_mulMat","mulMat2D","am","bm","outm","aa","ab","ac","ad","atx","aty","ba","bb","bc","bd","btx","bty","mulMat3D","NodeDefines","_opacity","_color","WHITE","_contentSize","Size","_anchorPoint","_position","_scale","_zIndex","Integer","_localZOrder","serializable","_is3DNode","_groupIndex","formerlySerializedAs","group","oldValue","setLocalDirty","_eventMask","_renderFlag","FLAG_WORLD_TRANSFORM","fromAngleZ","rotationX","fromEulerNumber","rotationY","eulerAngles","toEuler","fromEuler","FLAG_TRANSFORM","setRotation","scale","setScale","scaleZ","FLAG_OPACITY_COLOR","range","equals","FLAG_COLOR","anchorX","anchorPoint","anchorY","MAX_ZINDEX","MIN_ZINDEX","_onSiblingIndexChanged","is3DNode","_update3DFunction","up","_up","transformQuat","UP","getWorldRotation","right","_right","RIGHT","forward","_forward","FORWARD","_reorderChildDirty","_widget","_renderComponent","_touchListener","_initDataFromPool","_childArrivalOrder","_LocalDirtyFlag","obj","_delaySort","_onPreDestroy","destroyByParent","_onPreDestroyBase","removeListeners","mask","_backDataIntoPool","sortAllChildren","_onPostActivated","active","_checkListenerMask","_onHierarchyChanged","oldParent","_updateOrderOfArrival","_onHierarchyChangedBase","_nodesOrderDirty","_activeInHierarchy","_calculWorldMatrix","_on3DNodeChanged","_spaceInfo","spaceInfo","localMat","identity","worldMat","_toEuler","_fromEuler","_initProperties","desTrs","subarray","_onBatchCreated","dontSyncChildPrefab","children","child","prefabInfo","_prefab","sync","syncWithPrefab","FLAG_CHILDREN","Mask","_checknSetupSysEvent","newAdded","forDispatch","EventListener","TOUCH_ONE_BY_ONE","swallowTouches","onTouchBegan","onTouchMoved","onTouchEnded","onTouchCancelled","addListener","MOUSE","onMouseDown","onMouseMove","onMouseUp","onMouseScroll","schedule","useCapture","_onDispatch","listeners","__eventTargets","touchEvent","mouseEvent","_offDispatch","removeListener","hasListeners","fastRemove","removeAll","targetOff","has","arg5","pauseSystemEvents","recursive","resumeSystemEvents","point","listener","w","h","cameraPt","testPt","camera","findCamera","getScreenToWorldPoint","_updateWorldMatrix","invert","transformMat4","temp","_enabled","runAction","_suppressDeprecation","pauseAllActions","resumeAllActions","stopAllActions","stopAction","stopActionByTag","getNumberOfRunningActions","getPosition","toPosition","newPosOrX","oldPosition","getScale","toScale","newScaleOrX","getRotation","toRotation","getContentSize","setContentSize","locContentSize","getAnchorPoint","setAnchorPoint","locAnchorPoint","_invTransformPoint","ltrs","conjugate","inverseSafe","getWorldPosition","setWorldPosition","fromPosition","setWorldRotation","val","fromRotation","getWorldScale","setWorldScale","div","fromScale","getWorldRT","opos","orot","fromRT","lookAt","fromViewUp","flag","setWorldDirty","getLocalMatrix","getWorldMatrix","worldPoint","nodePoint","convertToNodeSpace","convertToWorldSpace","getNodeToParentTransform","contentSize","transform","fromMat4","getNodeToParentTransformAR","getNodeToWorldTransform","getNodeToWorldTransformAR","getParentToNodeTransform","getWorldToNodeTransform","convertTouchToNodeSpace","convertTouchToNodeSpaceAR","getBoundingBox","getBoundingBoxToWorld","_getBoundingBoxTo","locChildren","childRect","arrivalOrder","addChild","cleanup","_setDirtyForNode","_child","child2","count","_restoreProperties","onRestore","_p","vec3_tmp","./event/event","./platform/CCMacro","./platform/js","./renderer/render-flow","./utils/affine-transform","./utils/base-node","./utils/prefab-helper","./utils/trans-pool","./value-types","25","_createForOfIteratorHelperLoose","o","allowArrayLike","it","Symbol","_unsupportedIterableToArray","done","TypeError","minLen","_arrayLikeToArray","toString","test","arr2","HideInHierarchy","PrivateNode","_originPos","localPosition","_posDirty","override","showInEditor","editorOnly","sendEvent","_super","setParent","getParent","./CCNode","26","NIL","autoReleaseAssets","_inited","dependAssets","_active","_instantiate","activateNode","27","IdGenerater","MAX_POOL_SIZE","idGenerater","ListEntry","priority","markedForDeletion","_listEntries","put","HashUpdateEntry","_hashUpdateEntries","HashTimerEntry","timers","timerIndex","currentTimer","currentTimerSalvaged","_t","_hashTimerEntries","CallbackTimer","_lock","_runForever","_useDelay","_timesExecuted","_repeat","_interval","initWithCallback","seconds","REPEAT_FOREVER","getInterval","setInterval","interval","trigger","cancel","getCallback","unschedule","_timers","timer","_timeScale","_updatesNegList","_updates0List","_updatesPosList","_hashForUpdates","_hashForTimers","_currentTargetSalvaged","_updateHashLocked","_arrayForTimers","_removeHashElement","_removeUpdateFromHash","targetId","listEntry","_priorityIn","ppList","listElement","_appendIn","__instanceId","getNewId","setTimeScale","timeScale","getTimeScale","tmp","hashElement","li","unscheduleAllForTarget","unscheduleAllWithMinPriority","minPriority","temp_length","isScheduled","pauseAllTargets","pauseAllTargetsWithMinPriority","idsWithSelectors","locArrayForTimers","elementUpdate","isTargetPaused","PRIORITY_NON_SYSTEM","./platform/id-generater","28","preprocess","fetch","Cache","helper","releaseManager","dependUtil","load","Pipeline","Task","RequestItem","downloader","parser","packManager","Bundle","factory","parse","combine","_require2","parseParameters","asyncify","_require3","assets","files","parsed","pipeline","transformPipeline","fetchPipeline","RequestType","BuiltinBundleName","AssetManager","_preprocessPipe","_fetchPipe","_loadPipe","append","_files","_parsed","generalImportBase","generalNativeBase","cacheAsset","force","cacheManager","presets","preload","maxConcurrency","maxRequestsPerFrame","remote","maxRetryCount","script","MAIN","resources","RESOURCES","INTERNAL","options","bundleVers","server","importBase","nativeBase","getBundle","removeBundle","_destroy","remove","loadAny","requests","onComplete","_parseParameters","preset","task","input","async","preloadAny","_parseParameters2","postLoadNative","asset","_parseParameters3","_native","_nativeAsset","depend","getNativeDep","_uuid","getAssetInfo","message","stack","loadRemote","url","_parseParameters4","__isNative__","ext","path","extname","loadScript","_parseParameters5","__requestType__","URL","loadBundle","nameOrUrl","_parseParameters6","bundleName","basename","releaseAsset","tryRelease","releaseUnusedAssets","forEach","_transform","subTask","urls","item","recycle","e","output","defineProperty","./builtins","./bundle","./cache","./depend-util","./downloader","./factory","./fetch","./helper","./load","./pack-manager","./parser","./pipeline","./preprocess","./releaseManager","./request-item","./shared","./task","./urlTransformer","./utilities","29","_assets","material","effect","_loadBuiltins","dirname","builtin","loadDir","addRef","_loadBuiltinsSP","sp","MAX_MULTITEXTURE_NUM","_loadMultiEffect","multi2dSpriteEffectAsset","inited","multiBatcher","maxAtlasCount","charAtlasAutoBatchCount","EffectAsset","getBuiltin","30","Config","parseLoadResArgs","deps","base","getInfoWithPath","getDirWithPath","_parseLoadResArgs","PATH","__outputAsArray__","_parseLoadResArgs2","dir","_parseLoadResArgs3","DIR","preloadDir","_parseLoadResArgs4","sceneAsset","redirect","./config","31","_map","_count","predicate","../platform/js","32","processOptions","assetInfos","scenes","_initUuid","uuids","_initPath","_initScene","_initPackage","packs","_initVersion","versions","_initRedirect","uuidList","pathList","isSubAsset","assetInfo","_getClassById","sceneList","packageList","packUuid","pack","assetPacks","entries","ver","nativeVer","items","isChildClassOf","infos","isMatchByWord","nextAscii","charCodeAt","startsWith","endsWith","33","_deserializeCompiled","_interopRequireWildcard","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","__esModule","newObj","hasPropertyDescriptor","getOwnPropertyDescriptor","hasOwnProperty","desc","deserialize","_depends","nativeDep","getDeps","getDepsRecursively","exclude","depends","_descend","json","__type__","hasNativeDep","_parseDepsFromJson","_parseDepsFromAsset","parsedFromExistAsset","preventPreloadNativeObject","preventDeferredLoadDependents","__depends__","dep","__nativeDepend__","_nativeDep","getDependUuidList","decodeUuid","../platform/deserialize-compiled","./deserialize","34","utilities","ImageFmts","AudioFmts","GetTrue","md5Pipe","transformURL","getUuidFromURL","hashValue","hashPatchInFolder","replace","match","loader","_autoReleaseSetting","_cache","progressCallback","completeCallback","images","audios","finish","total","content","includes","res","image","audio","isCompleted","getXMLHttpRequest","XMLHttpRequest","getItem","loadRes","_this$_parseLoadResAr","loadResArray","_this$_parseLoadResAr2","loadResDir","_this$_parseLoadResAr3","getRes","getResCount","getDependsRecursively","assetLoader","addDownloadHandlers","extMap","handler","register","addLoadHandlers","file","flowInDeps","isBuiltin","builtinAsset","_isBuiltin","releaseRes","releaseResDir","removeItem","setAutoRelease","autoRelease","setAutoReleaseRecursively","isAutoRelease","loadSubpackage","AssetLibrary","libraryPath","rawAssetsBase","rawAssets","loadAsset","getLibUrlNoExt","queryAssetInfo","raw","changeExtname","substr","onceWarns","assetLibrary","defineProperties","LoadingItems","DOWNLOAD_MAX_CONCURRENT","_getSceneUuid","_sceneInfos","releaseSettings","../CCDirector","35","MissingClass","classFinder","missingClass","_MissingScript","safeFindClass","pool","deserializeForCompiled","deserializeForEditor","Details","tdInfo","customEnv","objList","uuidObjList","propList","uuidPropList","dependUuid","../platform/deserialize","../platform/deserialize-editor","36","__audioSupport","downloadDomAudio","dom","src","clearEvent","removeEventListener","success","failure","USE_LOADER_EVENT","readyState","37","downloadDomImage","img","Image","location","protocol","crossOrigin","loadCallback","errorCallback","38","downloadFile","xhr","errInfo","open","responseType","withCredentials","mimeType","overrideMimeType","timeout","header","setRequestHeader","onload","status","response","onprogress","lengthComputable","loaded","onerror","ontimeout","onabort","send","39","downloaded","downloadScript","loadHandler","removeChild","errorHandler","40","loadFont","_require4","urlAppendTimestamp","retry","REGEX","formatSupport","format","unsupported","downloadAudio","audioLoadMode","AudioClip","LoadMode","DOM_AUDIO","downloadArrayBuffer","WEB_AUDIO","downloadImage","imageBitmap","ALLOW_IMAGE_BITMAP","downloadBlob","onFileProgress","downloadJson","JSON","downloadText","downloadVideo","downloadBundle","version","_downloading","_queue","_queueDirty","_totalNum","_totalNumThisPeriod","_lastDate","_checkNextPeriod","updateTime","Date","_maxInterval","handleQueue","sort","nextOne","invoke","_remoteServerAddress","remoteServerAddress","appendTimeStamp","limited","retryInterval","mixin","downloaders","download","downloadCallbacks","finale","callbacks",".png",".jpg",".bmp",".jpeg",".gif",".ico",".tiff",".webp",".image",".pvr",".pkm",".mp3",".ogg",".wav",".m4a",".txt",".xml",".vsh",".fsh",".atlas",".tmx",".tsx",".json",".ExportJson",".plist",".fnt",".font",".eot",".ttf",".woff",".svg",".ttc",".mp4",".avi",".mov",".mpg",".mpeg",".rm",".rmvb",".binary",".bin",".dbbin",".skel",".js","_downloaders","../CCDebug","../platform/CCSys","../platform/utils","./download-dom-audio","./download-dom-image","./download-file","./download-script.js","./font-loader","41","_creating","createTexture","Texture2D","_nativeUrl","createAudioClip","createJsonAsset","JsonAsset","createTextAsset","TextAsset","text","createFont","TTFFont","createBufferAsset","BufferAsset","createAsset","createBundle","producers","creating","42","getDepends","firstTask","canInvoke","__exclude__","isNative","handle","__asyncLoadAssets__","isFinish","dispatch","decreaseRef","decRef","loadDepends","43","textUtils","_canvasContext","_testString","_fontFaces","_loadingFonts","_timeout","useNativeCheck","nativeCheck","FontFace","exec","safari10Match","vendor","_checkFontLoaded","allFontsLoaded","fontLoadHandle","fontFamily","fontFamilyName","oldWidth","refWidth","fontDesc","font","newWidth","safeMeasureText","clearInterval","nativeCheckFontLoaded","Promise","resolve","reject","check","fonts","timeoutId","race","fontLoader","_getFontFamily","labelCanvas","getContext","fontStyle","fontStr","textContent","preloadDiv","divStyle","innerHTML","fontHandle","ttfIndex","lastIndexOf","slashPos","substring","../utils/text-utils","44","_uuidRegex","matches","getUrlWithUuid","nativeExt","isScene","../utils/decode-uuid","45","./CCAssetManager","./deprecated","46","gatherAsset","setProperties","checkCircleReference","loadOneAssetPipeline","reload","_exclude$uuid","repeatItem","dependAsset","missingAsset","__onLoadInvoked__","47","_loading","isLoading","unpackJson","unpackJSONs","textureType","_getClassId","datas","split","packCustomObjData","unpackers","unpack","unpacker","48","plistParser","_parsing","parseImage","Blob","imageOptions","imageOrientation","__flipY__","premultiplyAlpha","__premultiplyAlpha__","createImageBitmap","parseAudio","ArrayBuffer","context","decodeAudioData","buffer","parsePVRTex","PVR_HEADER_LENGTH","PVR_MAGIC","PVR_HEADER_MAGIC","PVR_HEADER_FORMAT","PVR_HEADER_HEIGHT","PVR_HEADER_WIDTH","PVR_HEADER_MIPMAPCOUNT","PVR_HEADER_METADATA","Int32Array","dataOffset","pvrtcData","Uint8Array","_compressed","parsePKMTex","ETC_PKM_HEADER_SIZE","ETC_PKM_FORMAT_OFFSET","ETC_PKM_ENCODED_WIDTH_OFFSET","ETC_PKM_ENCODED_HEIGHT_OFFSET","ETC_PKM_WIDTH_OFFSET","ETC_PKM_HEIGHT_OFFSET","ETC1_RGB_NO_MIPMAPS","ETC2_RGB_NO_MIPMAPS","ETC2_RGBA_NO_MIPMAPS","readBEUint16","offset","encodedWidth","encodedHeight","etcData","parsePlist","parseImport","parsers","parsedAsset","parsing","parseHandler","import","../platform/CCSAXParser","49","_pipelineId","funcs","pipes","insert","_isFinish","pipe","_flow","50","subOptions","leftOptions","op","UUID","SCENE","source","51","visitAsset","visitComponent","getOwnPropertyNames","propName","_j","_val","_temp","visitNode","descendOpRef","refs","refCount","checkCircularReference","_persistNodeDeps","_toDelete","eventListener","freeAssets","_free","newScene","persistNodes","childs","dependencies","persistDeps","_asset","sceneDeps","_i3","_l2","../assets/CCAsset","52","MAX_DEAD_NUM","_deadPool","53","START_SCENE","54","_taskId","param1","param2","param3","param4","str","toUpperCase","55","stringify","__nativeName__","56","MissingObjectReporter","realEntries","_entry","packId","packedIds","folder","_uuid2","clearRef","wait","asyncLoadAssets","includeNative","_i4","_dep","_isScene","assetsMap","missingAssetReporter","reportByOwner","errs","isCallback","isValidType","checked","57","CCObject","writable","_ref","nativeUrl","_$nativeAsset","serialize","createNode","_setRawAsset","filename","inLibrary","../platform/CCObject","58","mixins","_audio","loadMode","_loadByUrl","audioClip","_ensureLoaded","uncache","../event/event-target","./CCAsset","59","FontLetterDefinition","offsetX","offsetY","textureID","valid","xAdvance","FontAtlas","texture","_letterDefinitions","_texture","addLetterDefinitions","letter","letterDefinition","cloneLetterDefinition","copyLetterDefinitions","getTexture","getLetter","getLetterDefinitionForChar","_char","hasKey","BitmapFont","Font","fntDataStr","SpriteFrame","fontSize","_fntConfig","_fontDefDictionary","fntConfig","fontDict","fontDefDictionary","fontDef","xOffset","yOffset","60","_buffer","bin","61","62","63","LabelAtlas","64","OptimizationPolicy","AUTO","SINGLE_INSTANCE","MULTI_INSTANCE","Prefab","_createFunction","_instantiatedTimes","optimizationPolicy","readonly","OptimizationPolicyThreshold","compileCreateFunction","jit","compile","_doInstantiate","rootToRedirect","useJit","CC_SUPPORT_JIT","PrefabUtils","../platform/instantiate-jit","65","_gfx","_interopRequireDefault","DepthStencilFormat","RB_FMT_D24S8","RB_FMT_S8","RB_FMT_D16","RenderTexture","_framebuffer","initWithSize","depthStencilFormat","visibleRect","_resetUnderlyingMipmaps","colors","_depthStencilBuffer","depthStencilBuffer","RenderBuffer","depthStencil","FrameBuffer","_packable","updateSize","rbo","_width","drawTextureAt","_image","updateSubImage","level","_premultiplyAlpha","readPixels","gl","oldFBO","getParameter","FRAMEBUFFER_BINDING","bindFramebuffer","FRAMEBUFFER","getHandle","RGBA","UNSIGNED_BYTE","../../renderer/gfx","../renderer","./CCTexture2D","66","67","Script","_Script","JavaScript","_JavaScript","TypeScript","_TypeScript","68","SpriteAtlas","_spriteFrames","getSpriteFrame","sf","getSpriteFrames","69","INSET_LEFT","INSET_TOP","INSET_RIGHT","INSET_BOTTOM","temp_uvs","_textureSetter","_refreshTexture","insetTop","_capInsets","_calculateSlicedUV","insetBottom","insetLeft","insetRight","rotated","originalSize","_rect","uv","_original","_offset","_originalSize","_rotated","_flipX","_flipY","vertices","uvSliced","setTexture","textureLoaded","onTextureLoaded","ensureLoadTexture","isRotated","setRotated","bRotated","_calculateUV","isFlipX","isFlipY","setFlipX","setFlipY","getRect","setRect","getOriginalSize","setOriginalSize","_textureLoadedCallback","_checkRect","setOffset","getOffset","offsets","maxX","maxY","_flipXY","uvs","tempVal","_tempVal","atlasWidth","atlasHeight","leftWidth","rightWidth","centerWidth","topHeight","bottomHeight","centerHeight","row","rowD","col","colD","_row","_rowD","_col","_colD","_setDynamicAtlasFrame","_resetDynamicAtlasFrame","texw","texh","_r","_tempVal2","nu","nv","_serialize","exporting","ctx","_textureFilename","Editor","Utils","UuidCache","urlToUuid","UuidUtils","compressUuid","dependsOn","triangles","atlas","_atlasUuid","capInsets","_deserialize","textureUuid","deleteSpriteFrame","copyWithZone","initWithTexture","70","_fontFamily","String","./CCFont","71","72","GL_NEAREST","GL_LINEAR","GL_REPEAT","GL_CLAMP_TO_EDGE","GL_MIRRORED_REPEAT","GL_RGBA","CHAR_CODE_0","CHAR_CODE_1","CUSTOM_PIXEL_FORMAT","PixelFormat","RGB565","TEXTURE_FMT_R5_G6_B5","RGB5A1","TEXTURE_FMT_R5_G5_B5_A1","RGBA4444","TEXTURE_FMT_R4_G4_B4_A4","RGB888","TEXTURE_FMT_RGB8","RGBA8888","TEXTURE_FMT_RGBA8","RGBA32F","TEXTURE_FMT_RGBA32F","A8","TEXTURE_FMT_A8","I8","TEXTURE_FMT_L8","AI8","TEXTURE_FMT_L8_A8","RGB_PVRTC_2BPPV1","TEXTURE_FMT_RGB_PVRTC_2BPPV1","RGBA_PVRTC_2BPPV1","TEXTURE_FMT_RGBA_PVRTC_2BPPV1","RGB_A_PVRTC_2BPPV1","RGB_PVRTC_4BPPV1","TEXTURE_FMT_RGB_PVRTC_4BPPV1","RGBA_PVRTC_4BPPV1","TEXTURE_FMT_RGBA_PVRTC_4BPPV1","RGB_A_PVRTC_4BPPV1","RGB_ETC1","TEXTURE_FMT_RGB_ETC1","RGBA_ETC1","RGB_ETC2","TEXTURE_FMT_RGB_ETC2","RGBA_ETC2","TEXTURE_FMT_RGBA_ETC2","REPEAT","CLAMP_TO_EDGE","MIRRORED_REPEAT","Filter","LINEAR","NEAREST","FilterIndex","9728","9729","_images","_sharedOpts","minFilter","magFilter","wrapS","wrapT","genMipmaps","_getSharedOptions","initWithData","_format","initWithElement","_minFilter","_magFilter","_mipFilter","_wrapS","_wrapT","_isAlphaAtlas","_genMipmaps","packable","_FilterIndex","extnames","_parseExt","extIdStr","defaultFormat","extIds","defaultExt","bestExt","bestIndex","bestFormat","SupportTextureFormats","SUPPORT_TEXTURE_FORMATS","extFormat","tmpExt","tmpFormat","webp","_hashDirty","_hash","_multiMaterial","getImpl","getId","updateImg","mipFilter","ImageBitmap","_checkImageBitmap","_upload","complete","HTMLCanvasElement","handleLoadedTexture","pixelFormat","pixelsWidth","pixelsHeight","_getGFXPixelFormat","_updateFormat","_checkPackable","getHtmlElementObj","deleteAtlasTexture","unlinkMaterial","getPixelFormat","hasPremultipliedAlpha","isAlphaAtlas","HTMLImageElement","_clearImage","description","releaseTexture","setWrapMode","setFilters","setPremultiplyAlpha","premultiply","dynamicAtlas","_isCompressed","maxFrameSize","_getHash","Atlas","DEFAULT_HASH","_getOpts","anisotropy","_anisotropy","mipmapSources","extId","exportedExts","_exportedExts","exts","_extId","join","fields","linkMaterial","getMultiHandler","autoSetTexture","removeTexture","getLinkedMaterial","hasLinkedMaterial","../platform/CCClass","../platform/id-generater","73","./CCAudioClip","./CCBitmapFont","./CCBufferAsset","./CCJsonAsset","./CCLabelAtlas","./CCPrefab","./CCRenderTexture","./CCSceneAsset","./CCScripts","./CCSpriteAtlas","./CCSpriteFrame","./CCTTFFont","./CCTextAsset","./material","74","_CCAsset","_effectParser","_effect","techniques","shaders","lib","_programLib","define","_initEffect","parseEffect","freeze","getInstantiatedEffect","getEffect","../CCAsset","./effect-parser","75","Texture","textureUtil","gfx","BUILTIN_NAME","SPRITE","GRAY_SPRITE","UNLIT","Material","_manualHash","_dirty","_multiHandler","_defines","_effectAsset","_techniqueIndex","_techniqueData","effectName","effectAsset","updateMultiSupport","techniqueIndex","switchTechnique","getBuiltinMaterial","createWithBuiltin","setProperty","passIdx","directly","def","getDefine","getProperty","setCullMode","cullMode","CULL_BACK","setDepth","depthTest","depthWrite","depthFunc","DS_FUNC_LESS","setBlend","blendEq","blendSrc","blendDst","blendAlphaEq","blendSrcAlpha","blendDstAlpha","blendColor","BLEND_FUNC_ADD","BLEND_SRC_ALPHA","BLEND_ONE_MINUS_SRC_ALPHA","setStencilEnabled","stencilTest","STENCIL_INHERIT","setStencil","stencilFunc","stencilRef","stencilMask","stencilFailOp","stencilZFailOp","stencilZPassOp","stencilWriteMask","DS_FUNC_ALWAYS","STENCIL_OP_KEEP","updateHash","hash","getHash","passDatas","passData","defines","syncTextures","passes","technique","setMultiSupport","isMultiSupport","bool","MultiHandler","../../utils/texture-util","../CCTexture2D","./CCEffectAsset","76","_pass","_defineProperties","descriptor","enumerable","configurable","_createClass","Constructor","protoProps","staticProps","EffectBase","_dirtyCode","_technique","_proto","_createPassProp","pass","_properties","uniform","Float32Array","Float64Array","_setPassProperty","setStencilFront","setStencilBack","../../../renderer/core/pass","77","_types","_enums","getInvolvedProgram","programName","getTemplate","parseProperties","passJson","propertiesJson","program","uniformInfo","uniforms","_ret","propInfo","PARAM_TEXTURE_2D","PARAM_INT","PARAM_FLOAT","enums2default","passDefines","parseTechniques","techNum","tech","techName","passNum","passName","detailName","stage","newPass","rasterizerState","blendState","blend","depthStencilState","stencilFuncFront","stencilRefFront","stencilMaskFront","stencilFailOpFront","stencilZFailOpFront","stencilZPassOpFront","stencilWriteMaskFront","stencilFuncBack","stencilRefBack","stencilMaskBack","stencilFailOpBack","stencilZFailOpBack","stencilZPassOpBack","stencilWriteMaskBack","../../../renderer/core/technique","../../../renderer/enums","../../../renderer/types","./effect","78","_murmurhash2_gc","_utils","_effectBase","_inheritsLoose","subClass","superClass","_setPrototypeOf","setPrototypeOf","__proto__","EffectVariant","_EffectBase","_passes","_stagePasses","_effectDirtyCode","_onEffectChanged","variantPasses","stagePasses","variant","_stage","serializePasses","../../../renderer/murmurhash2_gc","./effect-base","./utils","79","Effect","_techniques","createNative","80","./CCMaterial","./material-variant","81","_pool","MaterialPool","_Pool","_len","_key","exampleMat","renderComponent","MaterialVariant","_owner","instance","serializeDefines","serializeTechniques","mat","maxSize","_clean","materialPool","../../utils/pool","82","_CCMaterial","_effectVariant","_materialPool","_dec","_class","ccclass","_decorator","_Material","materialName","_material","./effect-variant","./material-pool","83","serializePass","excludeProperties","_programName","_cullMode","_blend","_blendEq","_blendAlphaEq","_blendSrc","_blendDst","_blendSrcAlpha","_blendDstAlpha","_blendColor","_depthTest","_depthWrite","_depthFunc","_stencilTest","_stencilFuncFront","_stencilRefFront","_stencilMaskFront","_stencilFailOpFront","_stencilZFailOpFront","_stencilZPassOpFront","_stencilWriteMaskFront","_stencilFuncBack","_stencilRefBack","_stencilMaskBack","_stencilFailOpBack","_stencilZFailOpBack","_stencilZPassOpBack","_stencilWriteMaskBack","serializeUniforms","hashData","param","PARAM_TEXTURE_CUBE","84","TOP","MID","BOT","LEFT","CENTER","HORIZONTAL","VERTICAL","AlignMode","ONCE","ON_WINDOW_RESIZE","ALWAYS","getReadonlyNodeSize","computeInverseTransForTarget","widgetNode","out_inverseTranslate","out_inverseScale","translateX","translateY","tInverseTranslate","tInverseScale","ONE","align","widget","hasTarget","inverseTranslate","inverseScale","targetSize","targetAnchor","isRoot","anchor","_alignFlags","localLeft","localRight","targetWidth","_isAbsLeft","_left","_isAbsRight","isStretchWidth","isAlignHorizontalCenter","localHorizontalCenter","_isAbsHorizontalCenter","_horizontalCenter","targetCenter","isAlignLeft","localTop","localBottom","targetHeight","bottom","_isAbsBottom","_bottom","_isAbsTop","_top","isStretchHeight","isAlignVerticalCenter","localVerticalCenter","_isAbsVerticalCenter","_verticalCenter","targetMiddle","isAlignBottom","alignMode","widgetManager","activeWidgets","animationState","refreshScene","AnimUtils","EditMode","nowPreviewing","_component","_animation","isAligning","_activeWidgetsIterator","editingNode","adjustWidgetToAllowMovingInEditor","adjustWidgetToAllowResizingInEditor","updateAlignment","Widget","_AlignFlags","thisOnResized","onResized","refreshWidgetOnResized","../CCNode","85","_geomUtils","RendererCamera","_mat4_temp_1","_mat4_temp_2","_v3_temp_1","_v3_temp_2","_v3_temp_3","_cameras","updateMainCamera","minDepth","_depth","_debugCamera","repositionDebugCamera","getNode","ClearFlags","COLOR","DEPTH","STENCIL","StageFlags","OPAQUE","TRANSPARENT","Component","setStages","dirty","_camera","editor","_clearFlags","_backgroundColor","_zoomRatio","_targetTexture","_fov","_orthoSize","_nearClip","_farClip","_ortho","_renderStages","_alignWithScreen","zoomRatio","tooltip","fov","orthoSize","nearClip","_updateClippingpPlanes","farClip","ortho","_updateProjection","_updateRect","cullingMask","_updateCameraMask","clearFlags","setClearFlags","_updateBackgroundColor","setPriority","targetTexture","_updateTargetTexture","renderStages","_updateStages","alignWithScreen","_is3D","cameras","containsNode","_findRendererCamera","_setupDebugCamera","setFov","setNear","setFar","setColor","setNode","addCamera","setFrameBuffer","setType","flags","stages","_init","beforeDraw","__preload","onEnable","onDisable","removeCamera","getScreenToWorldMatrix2D","getWorldToScreenMatrix2D","_mat4_temp_1m","m12","m13","center","screenPosition","screenToWorld","getWorldToScreenPoint","worldPosition","worldToScreen","getRay","screenPos","geomUtils","Ray","fromPoints","rootNode","renderCamera","_onAlignWithScreen","RAD","atan","setOrthoHeight","getNodeToCameraTransform","getWorldToCameraMatrix","getCameraToWorldPoint","getWorldToCameraPoint","getCameraToWorldMatrix","../../renderer/scene/camera","../CCGame","../geom-utils","../renderer/index","../renderer/render-flow","../utils/affine-transform","../value-types","86","jsArray","IsStartCalled","IsOnEnableCalled","IsEditorOnEnableCalled","callerFunctor","callOnEnableInTryCatch","callOnDisableInTryCatch","sortedIndex","order","_executionOrder","testOrder","testId","stableRemoveInactive","flagToClear","removeAt","LifeCycleInvoker","__ctor__","invokeFunc","Iterator","_zero","_neg","_pos","_invoke","compareOrder","OneOffInvoker","cancelInactive","compsNeg","compsPos","ReusableInvoker","enableInEditor","engine","createInvokeImpl","indiePath","useDt","ensureFlag","fastPath","Function","invokeStart","invokeUpdate","invokeLateUpdate","startInvoker","updateInvoker","lateUpdateInvoker","_deferredComps","_updating","invokeOnEnable","compScheduler","deactivatedDuringOnEnable","_onEnabled","_scheduleImmediate","_onDisabled","lateUpdate","enableComp","invoker","disableComp","_deferredSchedule","_startForNewComps","./platform/CCClass","./utils/misc","87","equalClips","clip1","clip2","PLAY","STOP","PAUSE","RESUME","LASTFRAME","FINISHED","Animation","_animator","_nameToState","_didInit","_currentClip","_defaultClip","defaultClip","contain","currentClip","_writableClips","_clips","playOnLoad","isPlaying","getAnimationState","onDestroy","getClips","playAdditive","enabledInHierarchy","setCurrentTime","addClip","newName","contains","oldState","newState","removeClip","filter","_EventTargetOn","states","_EventTargetOff","_createStates","defaultClipState","../../animation/animation-animator","../../animation/animation-clip","./CCComponent","88","BlockEvents","BlockInputEvents","menu","inspector","help","89","GraySpriteState","Transition","State","NORMAL","HOVER","PRESSED","DISABLED","Button","_pressed","_hovered","_fromColor","_toColor","_time","_transitionFinished","_fromScale","_toScale","_originalScale","_graySpriteMaterial","_spriteMaterial","_sprite","interactable","notify","_updateState","_resetState","animatable","_resizeToTarget","_resizeNodeToTargetNode","enableAutoGrayEffect","_updateDisabledState","transition","_updateTransition","normalColor","displayName","_getButtonState","_getTarget","pressedColor","hoverColor","disabledColor","zoomScale","normalSprite","pressedSprite","hoverSprite","disabledSprite","_applyTarget","_unregisterTargetEvent","clickEvents","EventHandler","originalScale","_setTargetColor","_registerNodeEvent","_unregisterNodeEvent","_onTargetSpriteFrameChanged","_setCurrentStateSprite","_onTargetColorChanged","_setCurrentStateColor","_onTargetScaleChanged","cloneColor","_getStateColor","_getStateSprite","_onTouchBegan","_onTouchMove","_onTouchEnded","_onTouchCancel","_onMouseMoveIn","_onMouseMoveOut","_registerTargetEvent","_getTargetSprite","sprite","Sprite","_applyTransition","emitEvents","_updateColorTransitionImmediately","_updateColorTransition","_updateSpriteTransition","_updateScaleTransition","_zoomUp","_zoomBack","oldTransition","useGrayMaterial","_switchGrayMaterial","../utils/gray-sprite-state","90","resetWidgetComponent","addComponent","isAlignTop","isAlignRight","Canvas","resetInEditor","_designResolution","designResolution","applySettings","_fitWidth","_fitHeight","fitHeight","fitWidth","_fitDesignResolution","cameraNode","setSiblingIndex","ResolutionPolicy","policy","SHOW_ALL","FIXED_WIDTH","FIXED_HEIGHT","NO_BORDER","designRes","setDesignResolutionSize","../camera/CCCamera","91","IsOnLoadCalled","getClassName","trimLeft","__scriptAsset","_isOnLoadCalled","onFocusInEditor","onLostFocusInEditor","typeOrClassName","getComponents","getComponentInChildren","_getLocalBounds","unscheduleAllCallbacks","eventTargets","destroyComp","_removeComponent","cloned","instantiate","_clone","scheduleOnce","callback_fn","_requireComponent","cls","reqComp","requireComponent","executionOrder","_disallowMultiple","willExecuteInEditMode","__scriptUuid","92","_componentId","_componentName","_genCompIdIfNeeded","_compId2Name","_compName2Id","customEventData","compType","getClassByName","compId","93","LabelFrame","BlendFunc","deleteFromDynamicAtlas","HorizontalAlign","TextAlignment","VerticalAlign","VerticalTextAlignment","Overflow","CLAMP","SHRINK","RESIZE_HEIGHT","CacheMode","BITMAP","CHAR","BOLD_FLAG","ITALIC_FLAG","UNDERLINE_FLAG","Label","_actualFontSize","_assemblerData","_frame","_ttfTexture","_letterTexture","_updateMaterial","_updateMaterialCanvas","_updateMaterialWebgl","_string","string","setVertsDirty","_checkStringEmpty","multiline","horizontalAlign","verticalAlign","actualFontSize","_fontSize","_lineHeight","lineHeight","overflow","_enableWrapText","enableWrapText","_N$file","_isSystemFontUsed","_forceUpdateRenderData","useSystemFont","markForValidate","_bmFontOriginalSize","_spacingX","spacingX","_batchAsBitmap","cacheMode","_materials","_shareAtlas","setMaterial","_getDefaultMaterial","_styleFlags","enableBold","enableItalic","enableUnderline","_underlineHeight","underlineHeight","autoSwitchMaterial","EnableType","GLOBAL","allowDynamicAtlas","enableRetina","clearCharCache","clearAllCache","_nodeSizeChanged","_nodeColorChanged","_assembler","_resetAssemblerData","_updateColor","_srcBlendFactor","BlendFactor","SRC_ALPHA","FLAG_OPACITY","_validateRender","disableRender","_resetAssembler","_resetFrame","markForRender","_applyFontTexture","_onBMFontTextureLoaded","updateRenderData","_onBlendChanged","_nativeTTF","_getAssemblerData","getMaterial","_updateTTFMaterial","isMultiMaterial","_texIdDirty","isMulti","_forceUseCanvas","_useNativeTTF","ENABLE_NATIVE_TTF_RENDERER","_enableBold","_enableItalics","_enableUnderline","../assets/material/CCMaterial","../platform/CCMacro","../renderer/utils/label/label-frame","../renderer/utils/utils","../utils/blend-func","./CCRenderComponent","94","LabelOutline","_updateRenderData","label","95","LabelShadow","_blur","blur","96","NodeEvent","Type","GRID","ResizeMode","CONTAINER","CHILDREN","AxisDirection","VerticalDirection","BOTTOM_TO_TOP","TOP_TO_BOTTOM","HorizontalDirection","LEFT_TO_RIGHT","RIGHT_TO_LEFT","Layout","_layoutSize","_layoutDirty","_resize","_N$layoutType","reLayouted","_doLayoutDirty","resizeMode","cellSize","startAxis","paddingLeft","paddingRight","paddingTop","paddingBottom","spacingY","verticalDirection","horizontalDirection","affectedByScale","_addEventListeners","_removeEventListeners","_doScaleDirty","updateLayout","_resized","_childAdded","_childRemoved","_addChildrenEventListeners","_removeChildrenEventListeners","_doLayoutHorizontally","baseWidth","rowBreak","fnPositionY","applyChildren","layoutAnchor","sign","paddingX","leftBoundaryOfLayout","nextX","rowMaxHeight","tempMaxHeight","secondMaxHeight","containerResizeBoundary","maxHeightChildAnchorY","activeChildCount","newChildWidth","childScaleX","_getUsedScaleValue","childScaleY","childBoundingBoxWidth","childBoundingBoxHeight","rightBoundaryOfChild","rowBreakBoundary","leftToRightRowBreak","rightToLeftRowBreak","finalPositionY","signX","tempFinalPositionY","topMarign","_getVerticalBaseHeight","newHeight","_doLayoutVertically","baseHeight","columnBreak","fnPositionX","paddingY","bottomBoundaryOfLayout","nextY","columnMaxWidth","tempMaxWidth","secondMaxWidth","column","maxWidthChildAnchorX","newChildHeight","topBoundaryOfChild","columnBreakBoundary","bottomToTopColumnBreak","topToBottomColumnBreak","finalPositionX","tempFinalPositionX","rightMarign","_doLayoutBasic","allChildrenBoundingBox","leftBottomSpace","rightTopSpace","xMax","yMax","newSize","toFixed","newAnchorX","newAnchorY","_doLayoutGridAxisHorizontal","layoutSize","topOffset","boundary","_doLayoutGridAxisVertical","leftOffset","_doLayoutGrid","_getHorizontalBaseWidth","_doLayout","97","MotionStreak","preview","_fadeTime","fadeTime","_minSeg","minSeg","_stroke","stroke","_checkSwitchMaterial","_fastMode","fastMode","checkAndSwitchMaterial","_updateMultiTexId","updateTexId","_renderData","../../core/utils/blend-func","../components/CCRenderComponent","98","_materialVariant","_temp_color","ENABLE","DISABLE","materials","_activateMaterial","_vertsDirty","_texId","assembler","registerValidate","enable","FLAG_RENDER","FLAG_UPDATE_RENDER_DATA","instantiated","getMaterials","updateColor","srcBlendFactor","_checkBacth","_flush","_dummyNode","multi","spTexture","nSpTexture","same","isChanged","texId","getIndex","../assets/material/material-variant","../renderer/assembler","99","HtmlTextParser","_htmlTextParser","RichTextChildName","RichTextChildImageName","debounce","immediate","later","callNow","Pool","outline","richtext","labelNode","_get","labelComponent","RichText","_textArray","_labelSegments","_labelSegmentsCache","_linesWidth","_updateRichTextStatus","_updateRichText","_onTTFLoaded","maxWidth","imageAtlas","handleTouchEvent","customMaterial","spriteComponent","_labelComponent","_labelComponent2","_labelComponent3","_labelComponent4","_activateChildren","_onColorChanged","parentColor","childNode","_updateLabelSegmentTextAttributes","_applyTextAttribute","_createFontLabel","_measureText","styleIndex","_styleIndex","labelSize","labelSegment","clickHandler","_clickHandler","clickParam","_clickParam","_containsTouchLocation","myRect","_lineOffsetX","_lineCount","_labelWidth","_labelHeight","_addLabelSegment","stringToken","_updateRichTextWithMaxWidth","labelString","labelWidth","fragmentWidth","checkStartIndex","checkEndIndex","_getFirstWordLen","checkString","checkStringWidth","remainingString","_updateLineInfo","fragments","fragmentText","splitString","_isLastComponentCR","_needsUpdateTextLayout","newTextArray","oldItem","newItem","oldStyle","newStyle","italic","isImage","imageAlign","imageHeight","imageWidth","imageOffset","_addRichTextImageElement","richTextElement","spriteFrameName","spriteNode","_imageOffset","SLICED","sizeMode","SizeMode","CUSTOM","spriteRect","scaleFactor","spriteWidth","spriteHeight","expectWidth","expectHeight","click","lastEmptyLine","newline","multilineTexts","BASELINE_RATIO","_updateRichTextPosition","startIndex","textLen","character","charAt","isUnicodeCJK","isUnicodeSpace","nextTokenX","nextLineIndex","totalLineCount","lineCount","lineOffsetX","lineHeightSet","lineHeightReal","isInteger","_offsetY","_convertLiteralColorValue","colorValue","fromHEX","textStyle","isAsset","bold","enableItalics","underline","labelOutlineComponent","../utils/html-text-parser","100","GETTINGSHORTERFACTOR","Direction","Scrollbar","_scrollView","_touching","_autoHideRemainingTime","_onScroll","enableAutoHide","autoHideTime","setTargetScrollView","scrollView","_convertToScrollViewSpace","scrollViewNode","worldSpacePos","scrollViewSpacePos","_setOpacity","outOfBoundary","scrollViewSize","handleNodeSize","_conditionalDisableScrollBar","contentMeasure","scrollViewMeasure","outOfBoundaryValue","contentPosition","handleNodeMeasure","_calculateLength","_calculatePosition","_updateLength","_updateHanlderPosition","_fixupHandlerPosition","barSize","barAnchor","handleSize","handleParent","leftBottomWorldPosition","fixupPosition","denominatorValue","lengthRation","actualLenth","positionRatio","clamp01","handleNode","_processAutoHide","deltaTime","../utils/misc","101","SpriteType","SIMPLE","TILED","FILLED","MESH","FillType","RADIAL","TRIMMED","RAW","GRAY","_spriteFrame","_type","_sizeMode","_fillType","_fillCenter","_fillStart","_fillRange","_isTrimmedMode","_atlas","lastSprite","_applySpriteFrame","fillType","fillCenter","fillStart","fillRange","trim","_applySpriteSize","setVisible","setState","getState","_applyAtlas","oldFrame","oldTexture","newTexture","102","Toggle","_N$isChecked","isChecked","toggleGroup","_toggleContainer","allowSwitchOff","_updateCheckMark","updateToggles","_triggerEventInScript_isChecked","_emitToggleEvents","checkMark","checkEvents","_triggerEventInScript_check","_registerToggleEvent","addToggle","_unregisterToggleEvent","removeToggle","_hideCheckMark","toggle","uncheck","ToggleContainer","./CCButton","./CCToggleGroup","103","toggleItems","_allowOnlyOneToggleChecked","_makeAtLeastOneToggleChecked","Boolean","104","ToggleGroup","_toggleItems","showed","105","WidgetManager","AlignFlags","TOP_BOT","LEFT_RIGHT","_setAlign","horizontalCenter","verticalCenter","isAbsoluteHorizontalCenter","isAbsoluteVerticalCenter","isAbsoluteTop","isAbsoluteBottom","isAbsoluteLeft","isAbsoluteRight","_wasAlignOnce","_originalWidth","_originalHeight","_validateTargetInDEV","isAlign","isHorizontal","../base-ui/CCWidgetManager","106","SubContextView","WXSubContextView","SwanSubContextView","./CCAnimation","./CCAudioSource","./CCBlockInputEvents","./CCCanvas","./CCComponentEventHandler","./CCLabel","./CCLabelOutline","./CCLabelShadow","./CCLayout","./CCMask","./CCMotionStreak","./CCPageView","./CCPageViewIndicator","./CCProgressBar","./CCRichText","./CCSafeArea","./CCScrollBar","./CCScrollView","./CCSlider","./CCSprite","./CCToggle","./CCToggleContainer","./CCWidget","./SubContextView","./editbox/CCEditBox","./missing-script","107","MissingScript","compiled","_$erialized","reportMissingClass","108","EventMouse","eventType","_eventType","_button","_prevX","_prevY","_scrollX","_scrollY","setScrollData","scrollX","scrollY","getScrollX","getScrollY","setLocation","getLocationInView","_designResolutionSize","_setPrevCursor","getPreviousLocation","getDelta","getDeltaX","getDeltaY","setButton","button","getButton","getLocationX","getLocationY","DOWN","MOVE","SCROLL","BUTTON_LEFT","BUTTON_RIGHT","BUTTON_MIDDLE","BUTTON_4","BUTTON_5","BUTTON_6","BUTTON_7","BUTTON_8","EventTouch","touchArr","TOUCH","_eventCode","_touches","currentTouch","getEventCode","getTouches","_setEventCode","eventCode","_setTouches","touches","setTouchInfo","getID","getStartLocation","MAX_TOUCHES","BEGAN","MOVED","ENDED","CANCELED","EventAcceleration","acc","ACCELERATION","EventKeyboard","keyCode","isPressed","KEYBOARD","../event/event","109","listenerID","_onEvent","_listenerID","_registered","_fixedPriority","_node","_isEnabled","_setPaused","_setRegistered","registered","_isRegistered","_getType","_getListenerID","_setFixedPriority","fixedPriority","_getFixedPriority","_setSceneGraphPriority","_getSceneGraphPriority","checkAvailable","isEnabled","UNKNOWN","TOUCH_ALL_AT_ONCE","ListenerID","Custom","listenerId","_onCustomEvent","Mouse","TouchOneByOne","_claimedTouches","setSwallowTouches","needSwallow","isSwallowTouches","TouchAllAtOnce","onTouchesBegan","onTouchesMoved","onTouchesEnded","onTouchesCancelled","Acceleration","_onAccelerationEvent","Keyboard","onKeyPressed","onKeyReleased","argObj","listenerType","eventName","110","_EventListenerVector","_fixedListeners","_sceneGraphListeners","gt0Index","empty","clearSceneGraphListeners","clearFixedListeners","getFixedPriorityListeners","getSceneGraphPriorityListeners","__getListenerID","DIRTY_NONE","DIRTY_FIXED_PRIORITY","DIRTY_SCENE_GRAPH_PRIORITY","DIRTY_ALL","_listenersMap","_priorityDirtyFlagMap","_nodeListenersMap","_toAddedListeners","_toRemovedListeners","_dirtyListeners","_inDispatch","_currentTouch","_currentTouchListener","_internalCustomListenerIDs","selListeners","selListener","childrenCount","_BaseNode","_addListener","_forceAddEventListener","_setDirty","_associateNodeAndEventListener","_getListeners","_updateDirtyFlagForSceneGraph","locDirtyListeners","selKey","_removeAllListenersInVector","listenerVector","_dissociateNodeAndEventListener","_removeListenersForListenerID","fixedPriorityListeners","sceneGraphPriorityListeners","locToAddedListeners","_sortEventListeners","locFlagMap","_sortListenersOfFixedPriority","rootEntity","_sortListenersOfSceneGraphPriority","sceneGraphListener","_sortEventListenersOfSceneGraphPriorityDes","l1","node1","node2","ex","fixedListeners","_sortListenersOfFixedPriorityAsc","_onUpdateListeners","idx","toRemovedListeners","locListenersMap","locPriorityDirtyFlagMap","_cleanToRemovedListeners","_updateTouchListeners","locInDispatch","_onTouchEventCallback","argsObj","selTouch","isClaimed","removedIdx","getCode","ENABLE_MULTI_TOUCH","_clearCurTouch","isStopped","needsMutableSet","_dispatchTouchEvent","oneByOneListeners","allAtOnceListeners","originalTouches","mutableTouches","oneByOneArgsObj","_dispatchEventToListeners","_onTouchesEventCallback","callbackParams","onEvent","eventOrArgs","shouldStopPropagation","locDirtyFlagMap","_sortNumberAsc","nodeOrPriority","addCustomListener","isFound","locListener","_removeListenerInVector","_removeListenerInCallback","listenersCopy","removeCustomListeners","customEventName","removeAllListeners","locListeners","locInternalCustomEventIDs","getType","_onListenerCallback","dispatchCustomEvent","optionalUserData","ev","EventCustom","setUserData","./CCEventListener","111","Touch","_lastModified","_point","_prevPoint","_startPoint","getPreviousLocationInView","getStartLocationInView","_startPointCaptured","_convertPointWithScale","_setPoint","_setPrevPoint","112","./CCEvent","./CCEventManager","./CCTouch","113","CallbacksInvoker","EventListeners","captureListeners","_callbackTable","rootInvoker","isInvoking","callbackInfos","containCanceled","purgeCanceled","../platform/callbacks-invoker","114","__on","__off","115","unuse","NO_TYPE","reuse","stopPropagationImmediate","getCurrentTarget","CAPTURING_PHASE","AT_TARGET","BUBBLING_PHASE","detail","getUserData","getEventName","_eventPool","116","./event","./event-listeners","./event-target","./system-event","117","inputManger","KEY_DOWN","KEY_UP","DEVICEMOTION","keyboardListener","accelerationListener","SystemEvent","setAccelerometerEnabled","isEnable","DeviceMotionEvent","requestPermission","setAccelerometerInterval","systemEvent","hasKeyDownEventListener","hasKeyUpEventListener","../event-manager","../platform/CCInputManager","118","./graphics","119","./3d","./CCPrivateNode","./CCScene","./assets","./base-ui/CCWidgetManager","./camera/CCCamera","./collider","./collider/CCIntersection","./components","./geom-utils","./mesh","./physics","./platform","./sp","120","CompScheduler","IsPreloadStarted","IsOnLoadStarted","Deactivating","callPreloadInTryCatch","callOnLoadInTryCatch","callOnDestroyInTryCatch","callOnFocusInTryCatch","callOnLostFocusInTryCatch","UnsortedInvoker","invokePreload","invokeOnLoad","activateTasksPool","getActivateTask","_componentCorrupted","_onLoadInEditor","focused","Selection","curActivate","_Scene","AssetsWatcher","_activatingStack","_activateNodeRecursively","preloadInvoker","onLoadInvoker","onEnableInvoker","originCount","activateComp","_deactivateNodeRecursively","lastTask","deactivatedOnLoading","resetComp","121","_isPlainEmptyObj_DEV","isPlainEmptyObj_DEV","_cloneable_DEV","cloneable_DEV","Attr","DELIMETER","BUILTIN_ENTRIES","INVALID_STATICS_DEV","pushUnique","deferredInitializer","declareProperties","$super","appendProp","__props__","defineProp","es6","defaultValue","setClassAttr","parseAttributes","defineGetSet","getter","setter","setterUndefined","getDefault","defaultVal","mixinWithInherited","dest","getPropertyDescriptor","doDefine","baseClass","shouldAddProtoCtor","__es6__","__ES6__","ctorToUse","ctors","fireClass","_getAllCtors","_createCtor","CCClass","_isCCClass","getClassAttrs","__initProps__","compileProps","setClassName","_RF","peek","_setClassId","normalizeClassName_DEV","DefaultName","getNewValueTypeCodeJit","clsName","propVal","escapeForJS","getInitPropsJit","attrs","F","attrKey","statement","IDENTIFIER_RE","expression","ValueType","initProps","getInitProps","simpleEnd","valueTypeEnd","simples","valueTypes","advanceds","totalLength","actualClass","superCallBounded","boundSuperCalls","ctorName","ctorLen","useTryCatch","SNIPPET","_validateCtor_DEV","originCtor","getCtors","__ctors__","baseOrMixins","baseOrMixin","baseCtors","SuperCallReg","xyz","SuperCallRegStrict","hasSuperCall","superFunc","preprocessAttrs","__values__","_sealed","some","staticPropName","validateMethodWithProps","_registerEditorProps","_fastDefine","serializableFields","attr","getInheritanceChain","klass","chain","getSuper","PrimitiveTypes","onAfterProps_ET","attributes","usedInGetter","ERR_Type","propNamePrefix","initAttrs","primitiveType","_short","getTypeChecker_ET","ScriptUuid","ScriptAsset","isEnum","getList","getObjTypeChecker_ET","parseSimpleAttr","attrName","expectType","startsWithUS","fastDefine","getNewValueTypeCode","./CCEnum","./attribute","./js","./preprocess-class","./requiring-frame","122","Preprocess","CACHE_KEY","fNOP","getSubDict","checkCtorArgument","decorate","_checkNormalArgument","validator_DEV","decoratorName","checkCompArgument","_argumentChecker","checkStringArgument","checkNumberArgument","getClassCache","getDefaultFromInitializer","initializer","extractActualDefaultValues","dummyObj","genProperty","fullOptions","isGetset","getFullFormOfProperty","existsProperty","errorProps","isDefaultValueSpecified","actualDefaultValues","decoratedProto","propNames","property","ctorProtoOrOptions","normalized","ctorProto","ccclassProto","createEditorDecorator","argCheckFunc","editorPropName","staticValue","decoratedValue","createDummyDecorator","executeInEditMode","disallowMultiple","playOnFocus","icon","./CCClass","123","reverseKey","enumType","enumDef","__enums__","enums","_TestEnum","124","PORTRAIT","LANDSCAPE_LEFT","PORTRAIT_UPSIDE_DOWN","LANDSCAPE_RIGHT","_didAccelerateFun","timestamp","_accelEnabled","_registerAccelerometerEvent","_accelCurTime","_unregisterAccelerometerEvent","_accelInterval","_registerKeyboardEvent","preventDefault","_acceleration","_accelDeviceEvent","DeviceOrientationEvent","browserType","BROWSER_TYPE_MOBILE_QQ","_deviceEventType","ua","BROWSER_TYPE_UC","_minus","didAccelerate","mAcceleration","eventAcceleration","_accelMinus","timeStamp","tmpX","orientation","os","OS_ANDROID","./CCInputManager","125","TOUCH_TIMEOUT","_vec2","_mousePressed","_isRegisterEvent","_preTouchPoint","_prevMousePoint","_preTouchPool","_preTouchPoolPointer","_touchesIntegerDict","_indexBitsUsed","_maxTouches","_canvasBoundingRect","adjustedLeft","adjustedTop","_getUnUsedIndex","_removeUsedIndexBit","_glView","_updateCanvasBoundingRect","canvasBoundingRect","docElem","handleTouchesBegin","curTouch","touchID","handleTouches","locTouchIntDict","unusedIndex","_convertTouchesWithScale","handleTouchesMove","locTouches","handleTouchesEnd","getSetOfTouchesEndOrCancel","handleTouchesCancel","locTouchesIntDict","getPreTouch","preTouch","locPreTouchPool","setPreTouch","getTouchByXY","tx","ty","locPreTouch","convertToLocationInView","getMouseEvent","locPreMouse","_convertMouseToLocationInView","getPointByEvent","BROWSER_TYPE_QQ","BROWSER_TYPE_SAFARI","pageX","pageY","scrollLeft","clientX","clientY","getTouchesByEvent","locView","touch_event","preLocation","changedTouches","BROWSER_TYPE_FIREFOX","identifier","selfPointer","prohibition","isMobile","supportMouse","supportTouches","_mouseEventsOnElement","focus","wheelDelta","msPointerEnabled","_pointerEventsMap","MSPointerDown","MSPointerMove","MSPointerUp","MSPointerCancel","_touchEventsMap","touchstart","touchesToHandle","touchmove","touchend","touchcancel","registerTouchEvent","_eventName","./CCMacro","./CCSys","126","DEG","SRC_ALPHA_SATURATE","SRC_COLOR","DST_ALPHA","DST_COLOR","ONE_MINUS_SRC_ALPHA","ONE_MINUS_SRC_COLOR","ONE_MINUS_DST_ALPHA","ONE_MINUS_DST_COLOR","ONE_MINUS_CONSTANT_ALPHA","ONE_MINUS_CONSTANT_COLOR","ORIENTATION_PORTRAIT","ORIENTATION_LANDSCAPE","ORIENTATION_AUTO","DENSITYDPI_DEVICE","DENSITYDPI_HIGH","DENSITYDPI_MEDIUM","DENSITYDPI_LOW","FIX_ARTIFACTS_BY_STRECHING_TEXEL_TMX","DIRECTOR_STATS_POSITION","BATCH_VERTEX_COUNT","ENABLE_TILEDMAP_CULLING","ENABLE_CULLING","SHOW_MESH_WIREFRAME","SHOW_MESH_NORMAL","KEY","none","back","backspace","tab","enter","shift","ctrl","alt","capslock","escape","space","pageup","pagedown","home","down","select","Delete","0","f","num0","num1","num2","num3","num4","num5","num6","num7","num8","num9","*","+","-","numdel","/","f1","f2","f3","f4","f5","f6","f7","f8","f9","f10","f11","f12","numlock","scrolllock",";","semicolon","equal","=",",","comma","dash",".","forwardslash","grave","[","openbracket","backslash","]","closebracket","quote","dpadLeft","dpadRight","dpadUp","dpadDown","dpadCenter","ImageFormat","JPG","PNG","TIFF","WEBP","PVR","ETC","S3TC","ATITC","TGA","RAWDATA","BOTTOM","127","Destroyed","RealDestroyed","ToDestroy","DontSave","EditorOnly","Dirty","DontDestroy","LockedInEditor","IsRotationLocked","IsScaleLocked","IsAnchorLocked","IsSizeLocked","IsPositionLocked","PersistentMask","objectsToDestroy","deferredDestroy","deleteCount","deferredDestroyTimer","compileDestruct","shouldSkipId","idToSkip","propsToReset","_destruct","__destruct__","strictMode","128","SAXParser","DOMParser","_isSupportDOMParser","_parser","xmlTxt","_parseXML","textxml","xmlDoc","parseFromString","ActiveXObject","loadXML","PlistParser","plist","childNodes","nodeType","_parseNode","_parseDict","_parseArray","firstChild","nodeValue","saxParser","129","screen","_supportsFullScreen","_onfullscreenchange","_onfullscreenerror","_preOnFullScreenChange","_preOnFullScreenError","_preOnTouch","_touchEvent","_fn","_fnMap","valL","requestFullscreen","fullScreen","fullscreenElement","webkitFullscreenElement","mozFullScreenElement","requestFullScreen","onFullScreenChange","onFullScreenError","toLowerCase","OS_IOS","isBrowser","webkitEnterFullscreen","fullscreenchange","fullscreenerror","requestPromise","exitFullScreen","webkitExitFullscreen","exitFullscreen","autoFullScreen","_ensureFullScreen","disableAutoFullScreen","touchTarget","touchEventName","fullScreenErrorEventName","onTouch","130","settingPlatform","_CCSettings","platform","isVivoGame","isOppoGame","isHuaweiGame","isJKWGame","isQttGame","isLinkSure","_global","global","initSys","LANGUAGE_ENGLISH","LANGUAGE_CHINESE","LANGUAGE_FRENCH","LANGUAGE_ITALIAN","LANGUAGE_GERMAN","LANGUAGE_SPANISH","LANGUAGE_DUTCH","LANGUAGE_RUSSIAN","LANGUAGE_KOREAN","LANGUAGE_JAPANESE","LANGUAGE_HUNGARIAN","LANGUAGE_PORTUGUESE","LANGUAGE_ARABIC","LANGUAGE_NORWEGIAN","LANGUAGE_POLISH","LANGUAGE_TURKISH","LANGUAGE_UKRAINIAN","LANGUAGE_ROMANIAN","LANGUAGE_BULGARIAN","LANGUAGE_UNKNOWN","OS_WINDOWS","OS_MARMALADE","OS_LINUX","OS_BADA","OS_BLACKBERRY","OS_OSX","OS_WP8","OS_WINRT","OS_UNKNOWN","WIN32","LINUX","MACOS","ANDROID","IPHONE","IPAD","BLACKBERRY","NACL","EMSCRIPTEN","TIZEN","WINRT","WP8","MOBILE_BROWSER","DESKTOP_BROWSER","EDITOR_PAGE","EDITOR_CORE","WECHAT_GAME","QQ_PLAY","FB_PLAYABLE_ADS","BAIDU_GAME","VIVO_GAME","OPPO_GAME","HUAWEI_GAME","XIAOMI_GAME","JKW_GAME","ALIPAY_GAME","WECHAT_GAME_SUB","BAIDU_GAME_SUB","QTT_GAME","BYTEDANCE_GAME","BYTEDANCE_GAME_SUB","LINKSURE","BROWSER_TYPE_WECHAT","BROWSER_TYPE_ANDROID","BROWSER_TYPE_IE","BROWSER_TYPE_EDGE","BROWSER_TYPE_UCBS","BROWSER_TYPE_360","BROWSER_TYPE_BAIDU_APP","BROWSER_TYPE_BAIDU","BROWSER_TYPE_MAXTHON","BROWSER_TYPE_OPERA","BROWSER_TYPE_OUPENG","BROWSER_TYPE_MIUI","BROWSER_TYPE_CHROME","BROWSER_TYPE_LIEBAO","BROWSER_TYPE_QZONE","BROWSER_TYPE_SOUGOU","BROWSER_TYPE_HUAWEI","BROWSER_TYPE_UNKNOWN","glExtension","getMaxJointMatrixSize","_maxJointMatrixSize","JOINT_MATRICES_SIZE","LEFT_UNIFORM_SIZE","maxUniforms","MAX_VERTEX_UNIFORM_VECTORS","getSafeAreaRect","visibleSize","getVisibleSize","__globalAdapter","adaptSys","languageCode","nav","doc","docEle","FbPlayableAd","currLanguage","language","browserLanguage","isAndroid","iOS","osVersion","osMainVersion","uaResult","maxTouchPoints","osName","appVersion","OS_UNIX","typeReg1","typeReg2","typeReg3","browserTypes","typeMap","micromessenger","trident","edge","360 aphone","mxbrowser","opr/","ubrowser","huaweibrowser","browserVersion","versionReg1","versionReg2","innerWidth","innerHeight","devicePixelRatio","windowPixelResolution","_checkWebGLRenderMode","_tmpCanvas1","create3DContext","opt_attribs","opt_contextType","localStorage","setItem","_supportWebp","toDataURL","_supportCanvas","_supportWebGL","WebGLRenderingContext","opengl","supportWebAudio","AudioContext","webkitAudioContext","mozAudioContext","ONLY_ONE","DELAY_CREATE_CTX","ONE_SOURCE","MULTI_CHANNEL","AUTOPLAY","canPlayType","ogg","wav","mp4","m4a","NetworkType","LAN","WWAN","getNetworkType","getBatteryLevel","garbageCollect","restartVM","isObjectValid","dump","openURL","131","__BrowserGetter","html","getElementsByTagName","availWidth","availHeight","meta","adaptationType","_scissorRect","View","_strategyer","ContainerStrategy","_strategy","ContentStrategy","_frameSize","_originalDesignResolutionSize","_visibleRect","_autoFullScreen","_maxPixelRatio","_retinaEnabled","_resizeCallback","_resizing","_resizeWithBrowserSize","_orientationChanging","_orientation","_isAdjustViewport","_antiAliasEnabled","_resolutionPolicy","_rpExactFit","EQUAL_TO_FRAME","EXACT_FIT","_rpShowAll","_rpNoBorder","_rpFixedHeight","_rpFixedWidth","_initFrameSize","_resizeEvent","forceOrEvent","prevFrameW","prevFrameH","prevRotated","containerStyle","display","_orientationChange","scrollTo","resizeWithBrowserSize","setResizeCallback","setOrientation","designWidth","designHeight","locFrameSize","isLandscape","transformOrigin","_setViewportMeta","metas","overwrite","vp","getElementById","head","elems","getElementsByName","currentVP","pattern","RegExp","_adjustViewportMeta","adjustViewportMeta","isRetinaEnabled","enableAntiAlias","imageSmoothingEnabled","mozImageSmoothingEnabled","isAntiAliasEnabled","enableAutoFullScreen","isAutoFullScreenEnabled","setCanvasSize","getCanvasSize","getFrameSize","setFrameSize","getVisibleSizeInPixel","getVisibleOrigin","getVisibleOriginInPixel","getResolutionPolicy","setResolutionPolicy","resolutionPolicy","_locPolicy","preApply","viewport","vb","rv","postApply","updateCameraViewport","getDesignResolutionSize","setRealPixelResolution","setViewportInPoints","locScaleX","locScaleY","setScissorInPoints","ceil","sw","sh","boxArr","SCISSOR_BOX","scissor","isScissorEnabled","SCISSOR_TEST","getScissorRect","scaleXFactor","scaleYFactor","getViewportRect","getScaleX","getScaleY","getDevicePixelRatio","relatedPos","posLeft","posTop","in_out_point","selPoint","selPrePoint","designedResolution","_setupContainer","locCanvas","_setupStyle","locContainer","_fixContainer","bs","contStyle","_result","_buildResult","containerW","containerH","contentW","contentH","EqualToFrame","frameH","ProportionalToFrame","frameW","designW","designH","offx","offy","EqualToWindow","ProportionalToWindow","OriginalContainer","globalAdapter","adaptContainerStrategy","adaptView","PROPORTION_TO_FRAME","ORIGINAL_CONTAINER","ExactFit","ShowAll","NoBorder","FixedHeight","FixedWidth","containerStg","contentStg","_containerStrategy","_contentStrategy","setContainerStrategy","setContentStrategy","132","topLeft","topRight","bottomLeft","bottomRight","133","isPlainEmptyObj","createAttrsSingle","superAttrs","createAttrs","subclass","chains","__attrs__","newAttrs","prefix","PrimitiveType","getTypeChecker","mainPropName","mainPropAttrs","mainPropAttrsType","isContainer","defaultType","type_lowerCase","getObjTypeChecker","typeCtor","classCtor","defaultDef","typename","134","CallbackInfo","callbackInfoPool","CallbackList","removeByCallback","removeByTarget","cancelAll","MAX_SIZE","callbackListPool","keyOrTarget","_list","135","deepFlatten","strList","flattenCodeArray","separator","136","_js","_vec","_vec3","_size","_quat","_mat","SUPPORT_MIN_FORMAT_VERSION","EMPTY_PLACEHOLDER","BuiltinValueTypes","BuiltinValueTypeParsers_xyzw","BuiltinValueTypeSetters","fromArray","serializeBuiltinValueTypes","typeId","toArray","DataTypeID","SimpleType","InstanceRef","Array_InstanceRef","Array_AssetRefByInnerObj","ValueTypeCreated","AssetRefByInnerObj","Array_Class","CustomizedClass","Dict","ARRAY_LENGTH","CLASS_TYPE","CLASS_KEYS","CLASS_PROP_TYPE_OFFSET","MASK_CLASS","OBJ_DATA_MASK","CUSTOM_OBJ_DATA_CLASS","CUSTOM_OBJ_DATA_CONTENT","VALUETYPE_SETTER","DICT_JSON_LAYOUT","ARRAY_ITEM_VALUES","Refs","EACH_RECORD_LENGTH","OWNER_OFFSET","KEY_OFFSET","TARGET_OFFSET","File","Version","Context","SharedUuids","SharedStrings","SharedClasses","SharedMasks","Instances","InstanceTypes","DependObjs","DependKeys","DependUuidIndices","PACKED_SECTIONS","dereference","instances","strings","dataLength","instanceOffset","keyIndex","_owner2","_keyIndex","deserializeCCObject","objectData","clazz","classTypeOffset","maskTypeOffset","_key2","ASSIGNMENTS","deserializeCustomCCObject","assignSimple","assignInstanceRef","genArrayParser","parseAssetRefByInnerObj","parseClass","parseCustomClass","parseValueTypeCreated","parseValueType","parseTRS","typedArray","parseDict","dict","_key3","_type2","subValue","parseArray","_type3","parseInstances","instanceTypes","instanceTypesLen","rootIndex","normalObjectCount","insIndex","classes","typeIndex","_type4","eachData","getMissingClass","hasCustomFinder","doLookupClass","silent","proxy","lookupClasses","customFinder","klassLayout","_type5","cacheMasks","masks","parseResult","sharedStrings","dependSharedUuids","dependObjs","dependKeys","dependUuids","_obj","_key4","details","borrowDetails","preprocessed","_version","FileInfo","sharedUuids","sharedClasses","sharedMasks","sections","rootInfo","../value-types/color","../value-types/mat4","../value-types/quat","../value-types/rect","../value-types/size","../value-types/vec2","../value-types/vec3","../value-types/vec4","137","./deserialize-compiled","./deserialize-editor","138","NonUuidMark","category","random","139","./CCClassDecorator","./CCObject","./CCVisibleRect","./callbacks-invoker","./instantiate","./instantiate-jit","140","Compiler","DEFAULT","VAR","LOCAL_OBJ","LOCAL_TEMP_OBJ","LOCAL_ARRAY","LINE_INDEX_OF_NEW_OBJ","DEFAULT_MODULE_CACHE","cc.Node","cc.Label","cc.Button","cc.Widget","cc.Animation","cc.ClickEvent","cc.PrefabInfo","Int8Array","Int16Array","Uint16Array","Uint32Array","Uint8ClampedArray","getTypedArrayName","Declaration","varName","mergeDeclaration","writeAssignment","codeArray","Assignments","targetExpression","_exps","_targetExp","writeCode","targetVar","pair","getPropAccessor","equalsToDefault","isEmptyObject","Parser","objsToClear_iN$t","objs","funcModuleCache","globalVariables","globalVariableId","localVariableId","getFuncModule","globalVar","enumerateObject","globalVariablesDeclaration","code","_iN$t","usedInNew","clsNameIsModule","getObjRef","setValueType","srcValue","assignments","fastDefinedProps","enumerateField","enumerateCCClass","setObjProp","instantiateArray","arrayVar","declaration","instantiateTypedArray","line","isView","instantiateObj","createCode","isChildOf","./compiler","141","CCValueType","_isDomNode","isDomNode","original","internal_force","doInstantiate","objsToClearTmpVar","initValue","../value-types/value-type","142","tempCIDGenerater","_getPropertyDescriptor","getPrototypeOf","_copyprop","isString","dunderProto","superclass","tmpValueDesc","tmpGetSetDesc","tmpGetDesc","tmpSetDesc","objOrCtor","__classname__","retval","isTempClassId","_idToClass","_nameToClass","setup","publicName","table","doSetClassName","unregisterClass","classId","__cid__","classname","allowTempId","obsoleted","newExpr","extractPropName","oldProp","newProp","obsoletes","objName","REGEXP_NUM_OR_STR","REGEXP_STR","argLen","hasSubstitution","regExpToTest","notReplaceFunction","forceDictMode","INVALID_IDENTIFIER_1","INVALID_IDENTIFIER_2","verifyType","removeArray","minusArr","appendObjectsAt","addObjs","arr_clone","cleanupFunc","_cleanup","resize","../utils/mutable-forward-iterator","./id-generater","143","Attrs","SerializableAttrs","TYPO_TO_CORRECT_DEV","parseNotify","newKey","newValue","canUsedInGet","parseType","STATIC_CHECK","getBaseClassWherePropertyDefined_DEV","_wrapOptions","isES6Getset","isLiteral","fullForm","maybeTypeScript","CALL_SUPER_DESTROY_REG_DEV","overrided","baseFuc","subFuc","correct","144","requiringFrames","beh","frameInfo","anyKey","145","refNode","otherNode","compareDocumentPosition","nodeName","146","./CCDirector","./asset-manager","./platform/CCInputExtension","./platform/CCInputManager","./platform/CCScreen","./platform/CCSys","./platform/CCView","147","_manager","_assertThisInitialized","ReferenceError","Assembler2D","_Assembler","initData","initLocal","createQuadData","verticesFloats","indicesCount","_local","uintVerts","uintVDatas","floatsPerVert","colorOffset","getBuffer","_handle","_meshBuffer","updateWorldVerts","local","verts","vDatas","matrix","matrixm","vl","vr","vt","vertexOffset","justTranslate","al","ar","bl","br","ct","db","fillBuffers","worldMatDirty","renderData","vData","iData","iDatas","offsetInfo","request","verticesCount","byteOffset","vbuf","_vData","ibuf","_iData","indiceOffset","vertexId","texIdOffset","uvOffset","./assembler","./utils/dynamic-atlas/manager","./webgl/render-data","148","_pool3","_assemblerId","getAssemblerId","assemblerCtor","__assemblerId__","AssemblerPool","_pool2","assemblers","_renderComp","../utils/pool","149","_vertexFormat","_assemblerPool","Assembler","_extendNative","renderComp","updateRenderDataForSwitchMaterial","getVfmt","vfmtPosUvColor","packDynamicAtlasAndCheckMaterial","packedFrame","insertSpriteFrame","renderCompCtor","__assembler__","getConstructor","./assembler-pool","./webgl/vertex-format","150","Device","canvasEL","_canvas","_caps","_stats","drawcalls","_vx","_vy","_vw","_vh","_sx","_sy","_sw","_sh","_restoreTexture","unit","setViewport","setScissor","clearRect","fillStyle","globalAlpha","fillRect","resetDrawCalls","getDrawCalls","151","_device","updateImage","152","_inputAssembler","_initBuiltins","defaultTexture","WRAP_REPEAT","programTemplates","programChunks","InputAssembler","Pass","renderEngine","drawCalls","_cameraNode","ModelBatcher","nativeFlow","ForwardRenderer","_builtins","canvasRenderer","RenderComponentHandle","ecScene","../../renderer/core/input-assembler","../../renderer/core/pass","../../renderer/renderers/forward-renderer","../../renderer/scene/scene","./canvas","./canvas/Device","./canvas/Texture2D","./webgl/assemblers","./webgl/model-batcher","153","FlagOfset","DONOTHING","BREAK_FLOW","LOCAL_TRANSFORM","WORLD_TRANSFORM","TRANSFORM","UPDATE_RENDER_DATA","OPACITY","OPACITY_COLOR","RENDER","POST_RENDER","FINAL","_batcher","_func","_next","_doNothing","_localTransform","_worldTransform","parentOpacityDirty","_render","batcher","parentOpacity","worldTransformFlag","worldOpacityFlag","worldDirtyFlag","colorVal","_fastSetA","flows","_postRender","postFillBuffers","EMPTY_FLOW","createFlow","flow","getFlow","tFlag","_validateList","_inValidateList","validateRenderers","visitRootNode","preCullingMask","walking","terminate","_renderScene","forwardRenderer","getBachther","FLAG_DONOTHING","FLAG_BREAK_FLOW","FLAG_LOCAL_TRANSFORM","FLAG_POST_RENDER","FLAG_FINAL","154","_reusableAtlas","_atlases","_atlasIndex","_maxAtlasCount","_textureSize","_maxFrameSize","_textureBleeding","_autoMultiBatch","_autoResetBeforeSceneLoad","_debugNode","newAtlas","autoMultiBatch","requsetMaterial","beforeSceneLoad","atlasCount","textureBleeding","textureSize","autoResetBeforeSceneLoad","atlases","rects","deleteAtlasSpriteFrame","deleteTexture","deleteInnerTexture","showDebug","scroll","ScrollView","layout","./reusable-atlas","155","pointer","parentRect","subRectA","subRectB","subRectC","cacheIndex","used","border","rootRect","freeRects","pushFreeRect","removeFreeRect","temp2","replaceFreeRect","score","areaFit","originalIndex","sizes","best","ignoreRectSize","deleteInnerRect","_iterator","_step","tryMergeRecycle","old","isEmpty","_iterator2","_step2","_iterator3","_step3","../../../assets/CCRenderTexture","156","_assembler2d","shareLabelInfo","LetterInfo","_tmpRect","_comp","_horizontalKernings","_lettersInfo","_linesOffsetX","_numberOfLines","_textDesiredHeight","_letterOffsetY","_tailoredTopY","_tailoredBottomY","_bmfontScale","_lineBreakWithoutSpaces","_lineSpacing","_originFontSize","_hAlign","_vAlign","_overflow","_isWrapText","_maxLineWidth","_isRetina","_retinaScale","BmfontAssembler","_Assembler2D","_reserveQuads","assemblerChanged","_updateFontFamily","_preUpdateRenderData","fontAsset","fontAtlas","_updateProperties","_updateLabelInfo","_updateContent","_resetProperties","_updateFontScale","getTTFTextureSizeScale","enableLabelRetina","labelRetinaScale","_setupBMFontOverflowMetrics","_computeHorizontalKerningForText","_alignText","stringLen","horizontalKernings","kerningDict","kerningAmount","_multilineTextWrap","nextTokenFunc","lineIndex","nextTokenY","longestLine","letterRight","highestY","lowestY","letterDef","letterPosition","_getFontScale","_recordPlaceholderInfo","tokenLen","tokenHighestY","tokenLowestY","tokenRight","nextLetterX","newLine","letterIndex","atlasName","letterX","_recordLetterInfo","_finishMultilineTextWrap","_getFirstCharLen","_multilineTextWrapByWord","_multilineTextWrapByChar","tmpInfo","_char2","_computeAlignmentOffset","_isVerticalClamp","_shrinkLabelToContentSize","_updateQuads","_isHorizontalClamp","_scaleFontSizeDown","shouldUpdateContent","lambda","mid","newFontSize","letterClamp","ctr","letterInfo","px","wordWidth","_isHorizontalClamped","letterOverClamp","appx","appy","py","clipTop","_determineRect","letterPositionX","appendQuad","_quadsUpdated","tempRect","trimmedLeft","trimmedTop","originalX","blank","../../../components/CCLabel","../../../platform/CCMacro","../../../utils/text-utils","../../assembler-2d","../utils","157","158","_bmfont","OUTLINE_SUPPORTED","getFontFamily","bleed","_invisibleAlpha","LetterTexture","labelInfo","_labelInfo","_context","_updateTexture","_canvasPool","startX","startY","MIDDLE_RATIO","BASELINE_OFFSET","lineJoin","textAlign","isOutlined","strokeColor","strokeStyle","lineWidth","strokeText","fillText","LetterAtlas","_tmpId","_nexty","frees","waitCleans","insertLetterTexture","letterTexture","freeLetter","removeFreeLetter","oldx","oldy","oldnexty","_letter","_inCleans","ref","pushFreeLetter","defs","LetterAtlases","fakeMaterial","_atlasWidth","_atlasHeight","deleteLetter","_iterator4","_step4","_iterator5","_step5","charAtlasAutoResetBeforeSceneLoad","_emptyTexture","_firstTraverse","_letterRefs","checkMaterialAndUpdateTexId","_needCheckMaterial","_usedMaterial","computeHash","toHEX","_isBold","LetterFontAssembler","_WebglBmfontAssembler","_proto2","createFlexData","vfmtPosUvColorTexId","_getFontDesc","_iterator6","_step6","_recycleLetterRef","_iterator7","_step7","assemblerData","appendVerts","../../../components/CCComponent","../../../components/CCLabelOutline","../../webgl/assemblers/label/2d/bmfont","../../webgl/vertex-format","159","_fontDesc","_drawFontSize","_splitedStrings","_canvasSize","_premultiply","_outlineComp","_outlineColor","_shadowComp","_shadowColor","BLACK","_canvasPadding","_contentSizeExtend","_nodeContentSize","_enableItalic","_underlineThickness","_drawUnderlinePos","_drawUnderlineWidth","_sharedLabelData","Alignment","TTFAssembler","_calculateLabelFont","_updateLabelDimensions","_calDynamicAtlas","updateVerts","_updatePaddingRect","outlineWidth","shadowWidth","CC_NATIVERENDERER","_calculateFillTextStartPosition","labelX","_getLineHeight","drawStartY","firstLinelabelY","_setupOutline","_setupShadow","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY","_drawTextEffect","startPosition","isMultiple","measureText","drawTextPosX","drawTextPosY","_fillColor","recreate","nodeSpacingY","_calculateParagraphLength","paragraphedStrings","paragraphLength","_calculateShrinkFont","totalHeight","maxLength","canvasWidthNoMargin","canvasHeightNoMargin","textFragment","allWidth","_calculateWrapText","canvasSizeX","canvasSizeY","paraLength","rawWidth","rawHeight","_rawHeight","../../../components/CCLabelShadow","160","hAlign","vAlign","./dynamic-atlas/manager","161","./label","./mask-assembler","./motion-streak","./motion-streak-multi","./sprite","162","MultiWebglBmfontAssembler","../../../../webgl/vertex-format","../2d/bmfont","163","_ttf","MultiWebglTTFAssembler","_WebglTTFAssembler","indices","initQuadIndices","../2d/ttf","164","_dataOffset","WebglBmfontAssembler","_BmfontAssembler","flexBuffer","_flexBuffer","reserve","vid","_getColor","rectWidth","rectHeight","uvDataOffset","retinaScale","world","../../../../utils/label/bmfont","165","WebglLetterFontAssembler","_LetterFontAssembler","createData","requestRenderData","../../../../../platform/js","../../../../utils/label/letter-font","./bmfont","166","UPDATE_CONTENT","UPDATE_FONT","UPDATE_EFFECT","NativeTTF","labelMaterial","_label","CustomAssembler","_proxy","setAssembler","_layout","jsb","LabelRenderer","_cfg","DataView","_layoutInfo","_cfgFields","_layoutFields","bindNodeProxy","_bindMaterial","_setBufferFlag","dv","getInt8","setInt8","_v","getInt32","__isLittleEndian__","setInt32","_updateCfgFlag","field","updateFlags","_setBufferValue","setFloat32","setUint8","_setFieldValue","field_name","_getBufferValue","getFloat32","getUint8","_getFieldValue","_getLayoutValue","_setLayoutValue","_updateCfgFlag_Content","_updateCfgFlag_Font","_colorEqual","_colorToObj","setString","setFontPath","fontPath","setFontSize","fontSizeRetina","oldfontsize","setOutline","oldOutline","setOutlineColor","oldColor","setLineHeight","oldLineHeight","setOverFlow","setEnableWrap","setVerticalAlign","setHorizontalAlign","oldHeight","oldX","oldY","setShadow","oldBlur","updateContent","setShadowColor","setItalic","oldItalic","setBold","oldBold","setUnderline","setSpacingX","getCache","retinaSize","getR","getG","getB","getA","shadow","outlineSize","setEffect","_nativeObj","../../../../../assets/material/CCMaterial","../../../../../assets/material/material-variant","../../../../../components/CCLabel","../../../../../components/CCLabelOutline","../../../../../components/CCLabelShadow","167","WebglTTFAssembler","_TTFAssembler","updateUVs","srcOffset","dstOffset","canvasWidth","canvasHeight","shadowOffset","../../../../utils/label/ttf","168","_CCLabel","_ttf2","_bmfont2","_letter2","_ttf3","_bmfont3","textBaseline","TTF","Bmfont","Letter","TTF3D","Bmfont3D","Letter3D","TTFMulti","BmfontMulti","../../../../components/CCLabel","../../../assembler","./2d-multi/bmfont","./2d-multi/ttf","./2d/bmfont","./2d/letter","./2d/nativeTTF","./2d/ttf","./3d/bmfont","./3d/letter","./3d/ttf","169","_motionStreak","Point","setPoint","setDir","_normal","MultiMotionStreakAssembler","_MotionStreakAssemble","cur","difx","dify","cr","cg","ca","normalizeSelf","uintVData","vertsOffset","findLast","da","_this$_renderData$_fl","usedVertices","usedIndices","usedVerticesFloats","MotionStreakAssembler","../../../components/CCMotionStreak","../../render-flow","170","_tangent","_miter","computeMiter","miter","lineA","lineB","halfThick","maxMultiple","multiple","dot","171","_barFilled","BarFilledAssemblerMulti","_BarFilledAssembler","fillEnd","../2d/bar-filled","172","_mesh","MultiMeshSpriteAssembler","_MeshSpriteAssembler","updateIndices","../2d/mesh","173","_radialFilled","MultiRadialFilledAssembler","_RadialFilledAssemble","../2d/radial-filled","174","_simple","MultiSimpleSpriteAssembler","_SimpleSpriteAssemble","../2d/simple","175","_sliced","MultiSlicedAssembler","_SlicedAssembler","meshCount","indexOffset","../2d/sliced","176","_tiled","MultiTiledAssembler","_TiledAssembler","contentWidth","contentHeight","sizableWidth","sizableHeight","hRepeat","vRepeat","_updateIndices","../2d/tiled","177","BarFilledAssembler","textureRect","ul","ur","quadUV0","quadUV1","quadUV2","quadUV3","quadUV4","quadUV5","quadUV6","quadUV7","progressStart","progressEnd","../../../../../components/CCSprite","../../../../assembler-2d","178","MeshSpriteAssembler","originalWidth","originalHeight","trimX","trimY","_l3","lx","ly","179","PI_2","_vertPos","_vertices","_uvs","_intersectPoint_1","_intersectPoint_2","_center","_triangles","_calcInsectedPoints","intersectPoints","sinAngle","cosAngle","tanAngle","cotAngle","yleft","yright","xtop","xbottom","_calculateVertices","cx","cy","_calculateUVs","u0","v0","_getVertAngle","placementX","placementY","RadialFilledAssembler","floatsPerTriangle","triangleIndex","triangle","_generateTriangle","endAngle","testIndex","allocWorldVerts","vert0","vert1","vert2","v0x","v0y","v1x","v1y","progressX","progressY","_generateUV","px1","px2","py1","py2","180","SimpleSpriteAssembler","cw","ch","ow","oh","rw","rh","trimRight","trimBottom","trimTop","181","SlicedAssembler","xScale","yScale","voffset","localRowY","localColX","worldIndex","182","TiledAssembler","_this$_local","offsetWidth","offsetHeight","localX","localY","yindex","ylength","xindex","xlength","coefu","coefv","tempXVerts","tempYVerts","183","_CCSprite","_simple2","_sliced2","_tiled2","_radialFilled2","_barFilled2","_mesh2","_simple3","_sliced3","_tiled3","_radialFilled3","_barFilled3","_mesh3","Simple","Sliced","Tiled","RadialFilled","BarFilled","Mesh","Simple3D","Sliced3D","Tiled3D","RadialFilled3D","BarFilled3D","Mesh3D","SimpleMulti","SlicedMulti","TiledMulti","RadialFilledMulti","BarFilledMulti","MeshMulti","../../../../components/CCSprite","./2d-multi/bar-filled","./2d-multi/mesh","./2d-multi/radial-filled","./2d-multi/simple","./2d-multi/sliced","./2d-multi/tiled","./2d/bar-filled","./2d/mesh","./2d/radial-filled","./2d/simple","./2d/sliced","./2d/tiled","./3d/bar-filled","./3d/mesh","./3d/radial-filled","./3d/simple","./3d/sliced","./3d/tiled","184","FlexBuffer","vfmt","_handler","_index","_vfmt","_verticesBytes","_bytes","_initVerticesCount","_initIndicesCount","_reallocVData","floatsCount","oldData","updateMesh","_reallocIData","newFloatsCount","realloced","newIndicesCount","updateMeshRange","185","FIX_IOS14_BUFFER","MeshBuffer","vertexFormat","indiceStart","_vertexBytes","_arrOffset","_vbArr","_vb","VertexBuffer","USAGE_DYNAMIC","_ibArr","_ib","IndexBuffer","INDEX_FMT_UINT16","USAGE_STATIC","_uintVData","_initVDataCount","_initIDataCount","_offsetInfo","_reallocBuffer","uploadData","vertexsData","indicesData","ib","switchBuffer","checkAndSwitchBuffer","vertexCount","requestStatic","indiceCount","byteLength","indiceLength","_updateOffset","requestForSpine","requestStaticForSpine","adjustForSpine","copyOldData","oldVData","newData","oldIData","forwardIndiceStartToOffset","../../../renderer/gfx","186","_recyclePool","_model","vfmt3D","QuadBuffer","SpineBuffer","_buffers","empty_material","empty_ia","renderScene","_iaPool","_modelPool","_quadBuffer","_quadBuffer3D","_meshBuffer3D","_batchedModels","_sortKey","models","setInputAssembler","removeModel","_flushMaterial","model","sortKey","addModel","ia","_vertexBuffer","_indexBuffer","_start","_flushIA","vertextFormat","../../../renderer/core/input-assembler","../../../renderer/memop/recycle-pool","../../../renderer/scene/model","../../assets/material/CCMaterial","../../platform/id-generater","./mesh-buffer","./quad-buffer","./spine-buffer","./vertex-format","187","_fillQuadBuffer","vertextID","188","RenderData","_infos","./flex-buffer","189","adjust","190","VertexFormat","ATTR_POSITION","ATTR_TYPE_FLOAT32","num","ATTR_UV0","ATTR_COLOR","ATTR_TYPE_UINT8","XYZ_UV_Color","XY_UV_Color","ATTR_TEX_ID","XY_UV_Color_TexId","vfmtPosUvTwoColor","ATTR_COLOR0","XY_UV_Two_Color","vfmtPosUv","XY_UV","vfmtPosColor","XY_Color","vfmtPos","XY","191","./multi-batcher","./multi-handler","192","MultiBatcher","handlers","nextHandler","getEmptyIndex","193","textures","hasEmptySlot","texture2","texture3","texture4","texture5","texture6","texture7","texture8","propertyIndex2Name","hasTexture","194","i2nMap","n2iMap","propertyName2Index","195","EXTNAME_RE","DIRNAME_RE","NORMALIZE_RE","pathStr","mainFileName","fileName","reg","baseName","tempStr","changeBasename","isSameExt","_normalize","oldUrl","sep","stripSep","196","AffineTransform","determinant","matm","transformVec2","transOrY","transformSize","transformRect","ol","ob","or","ot","lbx","lby","rbx","rby","ltx","lty","rtx","rty","minX","minY","transformObb","out_bl","out_tl","out_tr","out_br","anAffineTransform","197","findComponent","findComponents","_comp2","findChildComponent","findChildComponents","couldActiveInScene","_onSetParent","getChildByName","siblingIndex","siblings","oldIndex","walk","prefunc","postfunc","afterChildren","_stacks","_stackId","removeAllChildren","_checkMultipleComp","existing","_RFpeek","ReqComp","depended","attachedObjsForEditor","_addComponentAt","removeComponent","_getDependComponent","destroyAllChildren","newParent","inCurrentSceneBefore","inCurrentSceneNow","newPrefabRoot","myPrefabInfo","shouldActiveNow","isSyncedNode","newPrefabInfo","syncing","_registerIfAttached","_comp3","childIndex","SameNameGetSets","propertyDefine","./misc","198","199","_dstBlendFactor","_updateBlendFunc","dstBlendFactor","materialVar","_updateMaterialBlendFunc","200","Base64Values","BASE64_VALUES","HexChars","UuidTemplate","Indices","isFinite","base64","lhs","rhs","201","referenceNode","nameList","subChild","202","_normalMaterial","normalMaterial","_grayMaterial","grayMaterial","203","eventRegx","imageAttrReg","_parsedObject","_specialSymbolArray","htmlString","_resultObjectArray","_stack","tagEndIndex","tagBeginIndex","noTagBegin","_processResult","newStr","tagStr","_addToStack","_attributeToObject","attribute","nextSpace","eventObj","eventHanlderString","_processEventHandler","isNewLine","tagValue","remainingArgument","isValidImageTag","toLocaleLowerCase","defaultOutlineObject","outlineAttrReg","eventString","eventNames","isValidTag","eventValue","previousTagObj","_escapeSpecialSymbol","204","./CCPath","./find","./mutable-forward-iterator","./profiler/CCProfiler","205","sameNameGetSets","diffNameGetSets","np","getterFunc","suffix","NextPOT","BUILTIN_CLASSID_RE","BASE64_KEYS","pushToMap","pushFront","exists","min_inclusive","max_inclusive","degreesToRadians","radiansToDegrees","206","207","208","_PrefabInfo","fileId","eulerAnglesX","eulerAnglesY","eulerAnglesZ","prefabRoot","209","PerfCounter","_showFPS","_rootNode","generateStats","below","average","draws","logic","_counter","generateNode","leftLabel","rightLabel","beforeUpdate","afterUpdate","updateLabel","stat","human","afterDraw","../../platform/CCMacro","./perf-counter","210","Counter","_value","_averageValue","_accumValue","_accumSamples","_accumStart","_average","alarm","over","211","tick","avg","./counter","212","_BASELINE_RATIO","_BASELINE_OFFSET","MAX_CACHE_SIZE","LRUCache","limit","tail","moveToHead","discard","measureCache","label_wordRex","label_symbolRex","label_lastWordRex","label_lastEnglish","label_firstEnglish","highSurrogateRex","lowSurrogateRex","label_wrapinspection","__CHINESE_REG","__JAPANESE_REG","__KOREAN_REG","metric","_safeSubstring","targetString","endIndex","newStartIndex","newEndIndex","startChar","endChar","wrappedWords","fuzzyLen","tmpText","sLine","pushNum","checkWhile","checkCount","sText","213","loadImage","tex","cacheImage","postLoadTexture","../assets/CCTexture2D","214","NodeUnit","./node-mem-pool","./node-unit","215","MemPool","unitClass","_unitClass","_findOrder","_initNative","_nativeMemPool","_buildUnit","unitID","_destroyUnit","_findUnitID","findUnit","findOrder","hasSpace","firstUnit","isAllFree","216","Super","./mem-pool","217","Uint32_Bytes","Uint8_Bytes","Dirty_Type","Dirty_Members","Dirty_Stride","TRS_Members","TRS_Stride","FLOAT_BYTES","LocalMatrix_Members","LocalMatrix_Stride","WorldMatrix_Members","WorldMatrix_Stride","Parent_Type","Parent_Members","Parent_Stride","ZOrder_Type","ZOrder_Members","ZOrder_Stride","CullingMask_Type","CullingMask_Members","CullingMask_Stride","Opacity_Type","Opacity_Members","Opacity_Stride","Is3D_Type","Is3D_Members","Is3D_Stride","Node_Type","Node_Members","Skew_Members","Skew_Stride","UnitBase","memPool","contentNum","_contentNum","trsList","FLOAT_ARRAY_TYPE","localMatList","worldMatList","_spacesData","../../value-types/utils","./unit-base","218","POINTER_INVALID_FLAG","SPACE_FREE_FLAG","SPACE_USE_FLAG","POS_NEXT_FREE","POS_FREE_FLAG","_memPool","_signData","signIndex","UnitBaseProto","headFreeIndex","spaceNum","freeStr","usingNum","usingStr","freeFlag","totalNum","219","_valueType","_CCClass","_misc","_ValueType","fromHex","hex","hexString","subtract","multiply","divide","ag","ofs","setR","setG","setB","setA","toCSS","opt","fmt","toRGBValue","fromHSV","toHSV","hsv","WHITE_R","BLACK_R","TRANSPARENT_R","GRAY_R","RED_R","RED","GREEN_R","GREEN","BLUE_R","BLUE","YELLOW_R","YELLOW","ORANGE_R","ORANGE","CYAN_R","CYAN","MAGENTA_R","MAGENTA","./value-type","220","_exportNames","Vec4","Mat3","_mat2","math","./color","./mat3","./mat4","./quat","./rect","./size","./trs","./vec2","./vec3","./vec4","221","m00","m01","m02","m03","m04","m05","m06","m07","m08","m10","m11","m20","m21","m22","transpose","a01","a02","a12","a00","a10","a11","a20","a21","a22","b01","b11","b21","det","adjoint","b00","b02","b10","b12","b20","b22","multiplyMat4","translate","rotate","rad","fromTranslation","fromScaling","fromQuat","z2","xx","yx","yy","zx","zy","zz","wx","wy","wz","_fromViewUpIIFE","default_up","lengthSqr","cross","normalFromMat4","a03","a13","a23","a30","a31","a32","a33","b03","b04","b05","b06","b07","b08","b09","frob","multiplyScalar","multiplyScalarAndAdd","exactEquals","a0","a1","a2","a4","a5","a6","a7","a8","b0","b5","b6","b7","b8","IDENTITY","../value-types/utils","222","_a00","_a01","_a02","_a03","_a10","_a11","_a12","_a13","_a20","_a21","_a22","_a23","_a30","_a31","_a32","_a33","mulScalar","m23","m30","m31","m32","m33","axis","rotateX","rotateY","rotateZ","fromXRotation","fromYRotation","fromZRotation","xy","xz","yz","getTranslation","getScaling","m3","m3_1","m09","trace","S","toRTS","v3_1","fromMat3","fromRTS","sz","fromRTSOrigin","ox","oy","oz","frustum","near","far","rl","tb","nf","perspective","fovy","aspect","lr","bt","eye","eyex","eyey","eyez","upx","upy","upz","centerx","centery","centerz","z0","z1","inverseTranspose","strictEquals","epsilon","sm","fuzzyEquals","number","m14","m15","223","_z","_w","rotationTo","fromAxisAngle","getAxisAngle","outAxis","scaleAndAdd","bx","bw","bz","rotateAround","rot","qt_1","rotateAroundLocal","calculateW","slerp","scale0","scale1","cosom","omega","sinom","sqlerp","qt_2","invDot","fromAxes","xAxis","yAxis","zAxis","halfToRad","_s","_s2","_s3","cz","toAxisX","fy","fz","toAxisY","fx","toAxisZ","outerZ","bank","heading","attitude","toDegree","atan2","sqx","sqy","sqz","euler","224","fromMinMax","min_x","min_y","max_x","max_y","intersects","maxax","maxay","maxbx","maxby","intersection","rectB","axMin","ayMin","axMax","ayMax","bxMin","byMin","bxMax","byMax","containsRect","ax","ay","aw","ah","bh","225","ZERO_R","226","tmp_quat","227","INT_MIN","INT_MAX","INT_BITS","approx","clamp","inverseLerp","nextPow2","pingPong","pseudoRandom","pseudoRandomRange","pseudoRandomRangeInt","randomRange","randomRangeInt","toRadian","_d2r","_r2d","maxDiff","seed","228","229","neg","negate","squaredDistance","inverse","transformMat3","v2_1","v2_2","cosine","magSqr","subSelf","mulSelf","divSelf","scaleSelf","negSelf","variance","addSelf","invsqrt","magSqr1","magSqr2","theta","signAngle","radians","rotateSelf","project","maxAxis","squaredMagnitude","ONE_R","UP_R","RIGHT_R","230","zero","az","cosTheta","sinTheta","rhw","transformMat4Normal","transformAffine","ix","iy","iz","iw","transformRTS","transformInverseRTS","rx","ry","rz","v3_2","projectOnPlane","sqrLen","vec1","vec2","FRONT_R","231","v4","equals4f","strictEquals4f","minInclusive","maxInclusive","NEG_ONE_R","NEG_ONE","232","deprecateEnum","oldPath","newPath","hasTypePrefixBefore","delimiter","oldPropName","oldTypeName","markAsRemoved","ownerCtor","removedProps","ownerName","markAsDeprecated","deprecatedProps","descriptors","getOwnPropertyDescriptors","deprecatedProp","markAsRemovedInObject","ownerObj","provideClearError","Info","accessor","etProp","markFunctionWarning","originFunc","_glID","PI2","FLT_MAX","FLT_MIN","UINT_MAX","scheduleCallbackForTarget","scheduleUpdateForTarget","unscheduleCallbackForTarget","unscheduleUpdateForTarget","unscheduleAllCallbacksForTarget","unscheduleAllCallbacksWithMinPriority","adjustViewPort","setViewPortInPoints","getViewPortRect","getChildByTag","removeChildByTag","getRotationX","setRotationX","getRotationY","setRotationY","getPositionX","setPositionX","getPositionY","setPositionY","getSkewX","setSkewX","getSkewY","setSkewY","setScaleX","setScaleY","getOpacity","setOpacity","getColor","getLocalZOrder","setLocalZOrder","setInsetLeft","setInsetRight","setInsetTop","setInsetBottom","getInstantiatedBuiltinMaterial","getInstantiatedMaterial","ERR","Light","affineTransformMake","affineTransformMakeIdentity","affineTransformClone","affineTransformConcat","affineTransformConcatIn","affineTransformInvert","affineTransformInvertIn","affineTransformInvertOut","affineTransformEqualToTransform","pointApplyAffineTransform","sizeApplyAffineTransform","rectApplyAffineTransform","obbApplyAffineTransform","pointEqualToPoint","sizeEqualToSize","rectEqualToRect","rectContainsRect","rectContainsPoint","rectOverlapsRect","rectIntersectsRect","rectIntersection","rectUnion","rectGetMaxX","rectGetMidX","rectGetMinX","rectGetMaxY","rectGetMidY","rectGetMinY","colorEqual","hexToColor","colorToHex","pNeg","pAdd","pSub","pMult","pMidpoint","pDot","pCross","pPerp","pRPerp","pProject","pLengthSQ","pDistanceSQ","pLength","pDistance","pNormalize","pForAngle","pToAngle","pZeroIn","pIn","pMultIn","pSubIn","pAddIn","pNormalizeIn","pSameAs","pAngle","pAngleSigned","pRotateByAngle","pCompMult","pFuzzyEqual","pLerp","pClamp","rand","randomMinus1To1","_renderType","_getError","_initDebugSetting","rgb2hsv","hsv2rgb","dragonBones","CCFactory","getInstance","vmath","233","./actions","./core/CCGame","234","CCSpriteFrame","ParticleAsset","../core/assets/CCAsset","../core/assets/CCSpriteFrame","235","USAGE_STREAM","INDEX_FMT_UINT8","INDEX_FMT_UINT32","ATTR_NORMAL","ATTR_TANGENT","ATTR_BITANGENT","ATTR_WEIGHTS","ATTR_JOINTS","ATTR_COLOR1","ATTR_UV","ATTR_UV1","ATTR_UV2","ATTR_UV3","ATTR_UV4","ATTR_UV5","ATTR_UV6","ATTR_UV7","ATTR_TYPE_INT8","ATTR_TYPE_INT16","ATTR_TYPE_UINT16","ATTR_TYPE_INT32","ATTR_TYPE_UINT32","FILTER_NEAREST","FILTER_LINEAR","WRAP_CLAMP","WRAP_MIRROR","TEXTURE_FMT_RGB_DXT1","TEXTURE_FMT_RGBA_DXT1","TEXTURE_FMT_RGBA_DXT3","TEXTURE_FMT_RGBA_DXT5","TEXTURE_FMT_RGB16F","TEXTURE_FMT_RGBA16F","TEXTURE_FMT_RGB32F","TEXTURE_FMT_R32F","TEXTURE_FMT_111110F","TEXTURE_FMT_SRGB","TEXTURE_FMT_SRGBA","TEXTURE_FMT_D16","TEXTURE_FMT_D32","TEXTURE_FMT_D24S8","DS_FUNC_NEVER","DS_FUNC_EQUAL","DS_FUNC_LEQUAL","DS_FUNC_GREATER","DS_FUNC_NOTEQUAL","DS_FUNC_GEQUAL","RB_FMT_RGBA4","RB_FMT_RGB5_A1","RB_FMT_RGB565","BLEND_FUNC_SUBTRACT","BLEND_FUNC_REVERSE_SUBTRACT","BLEND_ZERO","BLEND_ONE","BLEND_SRC_COLOR","BLEND_ONE_MINUS_SRC_COLOR","BLEND_DST_COLOR","BLEND_ONE_MINUS_DST_COLOR","BLEND_DST_ALPHA","BLEND_ONE_MINUS_DST_ALPHA","BLEND_CONSTANT_COLOR","BLEND_ONE_MINUS_CONSTANT_COLOR","BLEND_CONSTANT_ALPHA","BLEND_ONE_MINUS_CONSTANT_ALPHA","BLEND_SRC_ALPHA_SATURATE","STENCIL_DISABLE","STENCIL_ENABLE","STENCIL_OP_ZERO","STENCIL_OP_REPLACE","STENCIL_OP_INCR","STENCIL_OP_INCR_WRAP","STENCIL_OP_DECR","STENCIL_OP_DECR_WRAP","STENCIL_OP_INVERT","CULL_NONE","CULL_FRONT","CULL_FRONT_AND_BACK","PT_POINTS","PT_LINES","PT_LINE_LOOP","PT_LINE_STRIP","PT_TRIANGLES","PT_TRIANGLE_STRIP","PT_TRIANGLE_FAN","RenderQueue","OVERLAY","murmurhash2_32_gc","WebGLEXT","GFXObjectType","GFXStatus","GFXObject","gfxType","_gfxType","_status","UNREADY","GFXAttributeName","GFXType","GFXFormat","GFXBufferUsageBit","GFXMemoryUsageBit","GFXBufferAccessBit","GFXPrimitiveMode","GFXPolygonMode","GFXShadeModel","GFXCullMode","GFXComparisonFunc","GFXStencilOp","GFXBlendOp","GFXBlendFactor","GFXColorMask","GFXFilter","GFXAddress","GFXTextureType","GFXTextureUsageBit","GFXSampleCount","GFXTextureFlagBit","GFXTextureViewType","GFXShaderType","GFXBindingType","GFXCommandBufferType","GFXLoadOp","GFXStoreOp","GFXTextureLayout","GFXPipelineBindPoint","GFXDynamicState","GFXStencilFace","GFXQueueType","GFXClearFlag","GFXGetTypeSize","BOOL","INT","UINT","FLOAT","BOOL2","INT2","UINT2","FLOAT2","BOOL3","INT3","UINT3","FLOAT3","BOOL4","INT4","UINT4","FLOAT4","MAT2","MAT2X3","MAT2X4","MAT3X2","MAT3","MAT3X4","MAT4X2","MAT4","SAMPLER1D","SAMPLER1D_ARRAY","SAMPLER2D","SAMPLER2D_ARRAY","SAMPLER3D","SAMPLER_CUBE","RenderPassStage","RenderPriority","MAX_BINDING_SUPPORTED","UniformBinding","SamplerInfoIndex","sizeMap","formatMap","R32I","RG32I","RGB32I","RGBA32I","R32F","RG32F","RGB32F","passParams","BACK","FRONT","ADD","SUB","REV_SUB","CONSTANT_COLOR","CONSTANT_ALPHA","NEVER","LESS","EQUAL","LEQUAL","GREATER","NOTEQUAL","GEQUAL","KEEP","REPLACE","INCR","INCR_WRAP","DECR","DECR_WRAP","INVERT","effectStructure","$techniques","$passes","any","sampler","mappings","236","_memop","_view","_m4_tmp","_stageInfos","RecyclePool","_float2_pool","_float3_pool","_float4_pool","_float9_pool","_float16_pool","_float64_pool","_int2_pool","_int3_pool","_int4_pool","_int64_pool","Base","_this$_type2defaultVa","_type2defaultValue","PARAM_INT2","PARAM_INT3","PARAM_INT4","PARAM_FLOAT2","PARAM_FLOAT3","PARAM_FLOAT4","PARAM_COLOR4","PARAM_MAT3","PARAM_MAT4","defaultTextureCube","_stage2fn","_usedTextureUnits","_viewPools","_drawItemsPools","_stageItemsPools","_definesChanged","_resetTextuerUnit","_allocTextureUnit","maxTextureUnits","_registerStage","fn","_requestView","clearOpts","CLEAR_COLOR","CLEAR_DEPTH","CLEAR_STENCIL","_stencil","_models","drawItem","extractDrawItem","_stages","stageItems","_drawItem","stageItem","stageInfo","_setProperty","slots","setTextureArray","setUniformDirectly","setUniform","_draw","programLib","_programKey","setVertexBuffer","setIndexBuffer","setPrimitiveType","_primitiveType","getProgram","setProgram","_uniforms","variants","enableBlend","setBlendFuncSep","setBlendEqSep","setBlendColor32","enableDepthTest","setDepthFunc","enableDepthWrite","setStencilTest","setStencilFuncFront","setStencilOpFront","setStencilFuncBack","setStencilOpBack","draw","../../core/value-types","../enums","../gfx","../memop","./program-lib","./view","237","pt","238","_detailName","setStage","newProperties","../../core/value-types/value-type","239","_shdID","_generateDefines","tmpDefines","_replaceMacroNums","_unrollLoops","begin","snippet","unroll","parsedBegin","parsedEnd","_replaceHighp","ProgramLib","_templates","_checkPrecision","prog","glsl1","vert","frag","cnt","log2","samplers","blocks","members","extensions","hasProgram","getKey","tmpl","tmplDefs","errPrefix","customDef","_highpSupported","Program","errors","link","vertLines","fragLines","defineLength","originLine","lines","fileID","highpSupported","getShaderPrecisionFormat","vertHighp","VERTEX_SHADER","HIGH_FLOAT","fragHighp","FRAGMENT_SHADER","precision","240","Technique","241","_genID","_priority","_clearModel","_matView","_matViewInv","_matProj","_matViewProj","_matInvViewProj","_cullingByID","_shadowLight","getForward","242","_mappings","PROJ_PERSPECTIVE","PROJ_ORTHO","LIGHT_DIRECTIONAL","LIGHT_POINT","LIGHT_SPOT","LIGHT_AMBIENT","SHADOW_NONE","SHADOW_HARD","SHADOW_SOFT","ivec2","ivec3","ivec4","vec3","vec4","PARAM_MAT2","mat2","mat3","sampler2D","samplerCube","CLEAR_SKYBOX","BUFFER_VIEW_INT8","BUFFER_VIEW_UINT8","BUFFER_VIEW_INT16","BUFFER_VIEW_UINT16","BUFFER_VIEW_INT32","BUFFER_VIEW_UINT32","BUFFER_VIEW_FLOAT32","./build/mappings","243","_state","_texture2d","_textureCube","_type2uniformCommit2","_type2uniformArrayCom","GL_INT","GL_FLOAT","GL_FLOAT_VEC2","GL_FLOAT_VEC3","GL_FLOAT_VEC4","GL_INT_VEC2","GL_INT_VEC3","GL_INT_VEC4","GL_BOOL","GL_BOOL_VEC2","GL_BOOL_VEC3","GL_BOOL_VEC4","GL_FLOAT_MAT2","GL_FLOAT_MAT3","GL_FLOAT_MAT4","GL_SAMPLER_2D","GL_SAMPLER_CUBE","_type2uniformCommit","uniform1i","uniform1f","uniform2fv","uniform3fv","uniform4fv","uniform2iv","uniform3iv","uniform4iv","uniformMatrix2fv","uniformMatrix3fv","uniformMatrix4fv","_type2uniformArrayCommit","uniform1iv","uniform1fv","_commitBlendStates","disable","BLEND","blendSep","blendFuncSeparate","blendEquationSeparate","blendFunc","blendEquation","_commitDepthStates","DEPTH_TEST","depthMask","_commitStencilStates","STENCIL_TEST","stencilSep","stencilFuncSeparate","stencilMaskSeparate","stencilOpSeparate","stencilOp","_commitCullMode","CULL_FACE","cullFace","_commitVertexBuffers","attrsDirty","maxStream","vertexBuffers","vertexBufferOffsets","maxVertexAttribs","_newAttributes","vbOffset","bindBuffer","ARRAY_BUFFER","_attributes","_enabledAttributes","enableVertexAttribArray","vertexAttribPointer","stride","disableVertexAttribArray","_commitTextures","maxTextureSlot","textureUnits","activeTexture","TEXTURE0","bindTexture","_attach","attachment","face","framebufferTexture2D","TEXTURE_2D","TEXTURE_CUBE_MAP_POSITIVE_X","framebufferRenderbuffer","RENDERBUFFER","preserveDrawingBuffer","_extensions","_initExtensions","_initCaps","_initStates","initDefault","_current","vendorPrefixes","getExtension","extDrawBuffers","maxVertexStreams","maxVertexTextures","MAX_VERTEX_TEXTURE_IMAGE_UNITS","maxFragUniforms","MAX_FRAGMENT_UNIFORM_VECTORS","MAX_TEXTURE_IMAGE_UNITS","MAX_VERTEX_ATTRIBS","maxTextureSize","MAX_TEXTURE_SIZE","maxDrawBuffers","MAX_DRAW_BUFFERS_WEBGL","maxColorAttachments","MAX_COLOR_ATTACHMENTS_WEBGL","FUNC_ADD","colorMask","POLYGON_OFFSET_FILL","depthRange","clearDepth","clearStencil","_restoreIndexBuffer","indexBuffer","ELEMENT_ARRAY_BUFFER","allowFloatTexture","fb","numColors","_colors","colorBuffer","COLOR_ATTACHMENT0","DEPTH_ATTACHMENT","STENCIL_ATTACHMENT","_depthStencil","DEPTH_STENCIL_ATTACHMENT","COLOR_BUFFER_BIT","DEPTH_BUFFER_BIT","STENCIL_BUFFER_BIT","setStencilFunc","setStencilOp","failOp","zFailOp","zPassOp","writeMask","rgba","setBlendColor","setBlendFunc","dst","srcAlpha","dstAlpha","setBlendEq","eq","alphaEq","stream","slot","sameType","isFloat32Array","isInt32Array","programDirty","_linked","useProgram","commitFunc","drawElements","_bytesPerIndex","drawArrays","./enums","./state","./texture-2d","./texture-cube","244","attrTypeBytes","glFilter","glTextureFmt","GL_NEAREST_MIPMAP_NEAREST","GL_LINEAR_MIPMAP_NEAREST","GL_NEAREST_MIPMAP_LINEAR","GL_LINEAR_MIPMAP_LINEAR","GL_UNSIGNED_BYTE","GL_UNSIGNED_SHORT","GL_UNSIGNED_INT","GL_UNSIGNED_SHORT_5_6_5","GL_UNSIGNED_SHORT_4_4_4_4","GL_UNSIGNED_SHORT_5_5_5_1","GL_HALF_FLOAT_OES","GL_DEPTH_COMPONENT","GL_ALPHA","GL_RGB","GL_LUMINANCE","GL_LUMINANCE_ALPHA","GL_COMPRESSED_RGB_S3TC_DXT1_EXT","GL_COMPRESSED_RGBA_S3TC_DXT1_EXT","GL_COMPRESSED_RGBA_S3TC_DXT3_EXT","GL_COMPRESSED_RGBA_S3TC_DXT5_EXT","GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG","GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG","GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG","GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG","GL_COMPRESSED_RGB_ETC1_WEBGL","GL_COMPRESSED_RGB8_ETC2","GL_COMPRESSED_RGBA8_ETC2_EAC","_filterGL","_textureFmtGL","internalFormat","pixelType","ATTR_TEX_COORD","ATTR_TEX_COORD1","ATTR_TEX_COORD2","ATTR_TEX_COORD3","ATTR_TEX_COORD4","ATTR_TEX_COORD5","ATTR_TEX_COORD6","ATTR_TEX_COORD7","ATTR_TEX_COORD8","attrType","LINEAR_MIPMAP_LINEAR","245","createFramebuffer","deleteFramebuffer","246","_BYTES_PER_INDEX","BYTES_PER_INDEX","usage","_usage","_numIndices","_needExpandDataStore","createBuffer","deleteBuffer","bytes","glUsage","bufferData","bufferSubData","setUsage","247","TextureCube","./device","./frame-buffer","./index-buffer","./program","./render-buffer","./texture","./vertex-buffer","248","isPow2","249","_parseError","errorLog","parts","_samplers","_errors","_vertSource","_fragSource","vertShader","_createShader","fragShader","createProgram","attachShader","linkProgram","failed","getShaderParameter","COMPILE_STATUS","getShaderInfoLog","deleteShader","getProgramParameter","LINK_STATUS","getProgramInfoLog","numAttributes","ACTIVE_ATTRIBUTES","getActiveAttrib","getAttribLocation","numUniforms","ACTIVE_UNIFORMS","_info","getActiveUniform","_location","getUniformLocation","deleteProgram","shader","createShader","shaderSource","compileShader","250","createRenderbuffer","bindRenderbuffer","renderbufferStorage","deleteRenderbuffer","251","cpy","252","_Texture","_genMipmap","caps","textureMaxSize","pot","_setMipmap","hint","GENERATE_MIPMAP_HINT","NICEST","generateMipmap","_setTexInfo","glFmt","_setSubImage","_setImage","pixelStorei","UNPACK_FLIP_Y_WEBGL","UNPACK_PREMULTIPLY_ALPHA_WEBGL","compressedTexSubImage2D","texSubImage2D","compressedTexImage2D","texImage2D","texParameteri","TEXTURE_MIN_FILTER","TEXTURE_MAG_FILTER","TEXTURE_WRAP_S","TEXTURE_WRAP_T","TEXTURE_MAX_ANISOTROPY_EXT","253","TEXTURE_CUBE_MAP","faceIndex","levelImages","254","_nullWebGLTexture","_textureID","255","_bytesPerVertex","_numVertices","getFormat","256","_attr2el","_elements","_el","../murmurhash2_gc","257","CircularPool","_cursor","258","_timsort","FixedArray","cmp","./timsort","259","TypedArrayPool","LinkedArray","_circularPool","_fixedArray","_linkedArray","_typedArrayPool","./circular-pool","./fixed-array","./linked-array","./pool","./recycle-pool","./typed-array-pool","260","_head","_tail","alloc","_prev","free","binder","cursor","261","_idx","_frees","_expand","262","263","DEFAULT_MIN_MERGE","DEFAULT_MIN_GALLOPING","DEFAULT_TMP_STORAGE_LENGTH","POWERS_OF_TEN","log10","alphabeticalCompare","aStr","bStr","minRunLength","makeAscendingRun","lo","hi","compare","runHi","reverseRun","binaryInsertionSort","pivot","gallopLeft","lastOffset","maxOffset","gallopRight","TimSort","minGallop","tmpStorageLength","stackLength","runStart","runLength","stackSize","pushRun","mergeRuns","mergeAt","forceMergeRuns","start1","length1","start2","length2","mergeLow","mergeHigh","cursor1","cursor2","count1","count2","exit","customCursor","customDest","remaining","ts","minRun","264","_bufferPools","_nextPow16","_log2","_alloc","buf","alloc_int8","alloc_uint8","alloc_int16","alloc_uint16","alloc_int32","alloc_uint32","alloc_float32","alloc_float64","alloc_dataview","265","266","_baseRenderer","_a16_view","_a16_view_inv","_a16_proj","_a16_viewProj","_a4_camPos","_a64_shadow_lightViewProj","_a16_shadow_lightViewProjs","_a4_shadow_info","_camPos","_camFwd","_v3_tmp1","CC_MAX_LIGHTS","CC_MAX_SHADOW_LIGHTS","sortView","_BaseRenderer","_lights","_shadowLights","_numLights","_shadowStage","_opaqueStage","_transparentStage","_updateLights","extractView","_view2","lights","light","shadowType","_updateLightDefines","lightKey","shadowKey","_shadowType","newCount","CC_NUM_LIGHTS","CC_NUM_SHADOW_LIGHTS","_submitLightsUniforms","positionAndRanges","directions","lightNum","_colorUniform","_directionUniform","_positionUniform","_range","_spotUniform","_submitShadowStageUniforms","shadowInfo","shadowMinDepth","shadowMaxDepth","shadowDepthScale","shadowDarkness","shadowBias","CC_SHADOW_TYPE","_submitOtherStagesUniforms","viewProjMatrix","_shadowResolution","_sortItems","_drawItems","shadowLights","_item","shadowIdx","shadowMap","../core/base-renderer","267","_tmp_mat4","_tmp_v3","_tmp2_v3","_poolID","_projection","_near","_far","_orthoHeight","setCullingMask","getPriority","getOrthoHeight","getFov","getNear","getFar","getDepth","getStencil","getClearFlags","getStages","getFramebuffer","framebuffer","_calcMatrices","screenPointToRay","worldPos","worldMatrixToScreen","worldMatrix","halfWidth","halfHeight","../../core/geom-utils","268","Model","_viewID","_cameraID","_userKey","_castShadow","_boundingShape","setUserKey","269","app","_app","_views","_add","_remove","setDebugCamera","cam","getCameraCount","getCamera","getModelCount","getModel","getLightCount","getLight","addLight","removeLight","addView","removeView","270","ctor2enums","getInspectorProps","getInstanceType","getInstanceCtor","_CCTexture2D","_ctor2default","_enums2ctor","_ctor2enums","_enums2default","gfxTexture2D","gfxTextureCube","ctor2default","enums2ctor","PARAM_COLOR3","className2InspectorName","typeName","valueCtor","assetType","../core/assets/CCTexture2D","../core/value-types","./gfx/texture-2d","271","TiledMapAsset","tmxXmlStr","textureNames","textureSizes","imageLayerTextures","imageLayerTextureNames","tsxFiles","tsxFileNames","272","./cocos2d/actions","./cocos2d/animation","./cocos2d/core","./cocos2d/core/components/CCStudioComponent","./cocos2d/deprecated","./cocos2d/particle","./cocos2d/particle/CCParticleAsset","./cocos2d/tilemap","./cocos2d/tilemap/CCTiledMapAsset","./cocos2d/videoplayer/CCVideoPlayer","./cocos2d/webview/CCWebView","./extensions/ccpool/CCNodePool","./extensions/dragonbones","./extensions/spine","273","EmptyHandle","ATTACHED_ROOT_NAME","ATTACHED_PRE_NAME","limitNode","_tempMat4","AttachUtil","_skeleton","_skeletonNode","_skeletonComp","_attachedRootNode","_attachedNodeArray","_boneIndexToNode","skeletonComp","_prepareAttachNode","armature","isCached","isAnimationCached","_frameCache","enableCacheAttachedInfo","_buildBoneAttachedNode","bone","boneIndex","boneNodeName","boneNode","_buildBoneRelation","_bone","_boneIndex","getAttachedRootNode","getAttachedNodes","boneName","nodeArray","_rebuildNodeArray","findMap","oldNodeArray","_toRemove","_sortNodeArray","_getNodeByBoneIndex","destroyAttachedNodes","markTree","delName","generateAttachedNodes","targetNodes","bones","boneData","buildBoneTree","parentBoneNode","_n","targetNode","destroyAllAttachedNodes","generateAllAttachedNodes","parentIndex","_hasAttachedNode","attachedRootNode","_associateAttachedNode","_syncAttachedNode","rootMatrix","boneInfos","_curFrame","mulMat","matrixHandle","nodeMat","worldX","worldY","nodeArrayDirty","../../cocos2d/core/renderer/render-flow","../../cocos2d/core/value-types/mat4","274","TrackEntryListeners","spine","Graphics","SkeletonCache","DefaultSkinsEnum","DefaultAnimsEnum","","AnimationCacheMode","REALTIME","SHARED_CACHE","PRIVATE_CACHE","setEnumAttr","Skeleton","skeletonData","SkeletonData","defaultSkin","defaultAnimation","_updateSkeletonData","_animationName","getCurrent","setAnimation","loop","clearTrack","setToSetupPose","_defaultSkinIndex","skinsEnum","getSkinsEnum","skinIndex","skinName","setSkin","_animationIndex","animationName","animsEnum","getAnimsEnum","animIndex","animName","_preCacheMode","_cacheMode","_defaultCacheMode","setAnimationCacheMode","premultipliedAlpha","debugSlots","_updateDebugDraw","debugBones","debugMesh","useTint","_updateUseTint","enableBatch","_updateBatch","_accTime","_playCount","_skeletonCache","_animationQueue","_headAniInfo","_playTimes","_isAniComplete","_effectDelegate","_rootBone","_listener","_materialCache","_debugRenderer","_startSlotIndex","_endSlotIndex","_startEntry","trackIndex","_endEntry","attachUtil","_dataDirty","invalidAnimationCache","baseMaterial","isTexturesLoaded","setSkeletonData","sharedCache","enablePrivateMode","skeletonInfo","getSkeletonCache","skeleton","_clipper","clipper","getRootBone","SkeletonClipping","setSlotsRange","startSlotIndex","endSlotIndex","setAnimationStateData","stateData","frameCache","isInvalid","updateToFrame","aniInfo","_updateCache","_updateRealtime","_emitCacheCompleteEvent","isInited","frameTime","FrameTime","frameIdx","setVertexEffectDelegate","effectDelegate","updateWorldTransform","setBonesToSetupPose","setSlotsToSetupPose","updateAnimationCache","findBone","findSlot","slotName","setSkinByName","getAttachment","attachmentName","getAttachmentByName","setAttachment","getRegion","region","setRegion","MeshAttachment","RegionAttachment","updateOffset","getTextureAtlas","regionAttachment","setMix","fromAnimation","toAnimation","getAnimationCache","initAnimationCache","findAnimation","setAnimationWith","addAnimationWith","clearTracks","setStartListener","_ensureListener","setInterruptListener","interrupt","setEndListener","setDisposeListener","dispose","setCompleteListener","setEventListener","setTrackStartListener","getListeners","setTrackInterruptListener","setTrackEndListener","setTrackDisposeListener","setTrackCompleteListener","trackEntry","loopCount","trackTime","animationEnd","setTrackEventListener","_updateAnimEnum","_updateSkinEnum","getRuntimeData","AnimationStateData","_refreshInspector","refreshSelectedInspector","debugDrawNode","debugDraw","../../cocos2d/core/components/CCRenderComponent","../../cocos2d/core/graphics/graphics","./AttachUtil","./lib/spine","./skeleton-cache","./track-entry-listeners","275","_isUseSpine","ATTACHMENT_TYPE","REGION","BOUNDING_BOX","SKINNED_MESH","AnimationEventType","START","INTERRUPT","END","DISPOSE","COMPLETE","EVENT","./Skeleton","./skeleton-data","./skeleton-texture","./spine-assembler","./vertex-effect-delegate","276","__extends","_extendStatics","extendStatics","__","timelines","timelineIds","getPropertyId","hasTimeline","lastTime","linearSearch","MixBlend","MixDirection","TimelineType","CurveTimeline","newFloatArray","BEZIER_SIZE","getFrameCount","setLinear","setStepped","STEPPED","getCurveType","BEZIER","setCurve","cx1","cy1","cx2","cy2","tmpx","tmpy","dddfx","dddfy","ddfx","ddfy","dfx","dfy","getCurvePercent","MathUtils","prevX","prevY","RotateTimeline","setFrame","degrees","first","r_1","ENTRIES","r_2","PREV_ROTATION","prevRotation","PREV_TIME","TranslateTimeline","X","Y","PREV_X","PREV_Y","ScaleTimeline","mixOut","signum","ShearTimeline","shear","shearX","shearY","ColorTimeline","slotIndex","R","G","B","A","setFromColor","PREV_R","PREV_G","PREV_B","PREV_A","TwoColorTimeline","twoColor","r2","g2","R2","G2","B2","darkColor","dark","setupLight","setupDark","PREV_R2","PREV_G2","PREV_B2","AttachmentTimeline","attachmentNames","attachmentName_1","attachmentName_2","zeros","DeformTimeline","frameVertices","deform","firedEvents","slotAttachment","VertexAttachment","deformAttachment","deformArray","vertexAttachment","deform_1","setArraySize","setupVertices","lastVertices","i_1","i_2","arrayCopy","vertexAttachment_1","i_3","i_4","i_5","i_6","i_7","prevVertices","nextVertices","i_8","i_9","i_10","vertexAttachment_2","i_11","i_12","i_13","i_14","i_15","EventTimeline","DrawOrderTimeline","drawOrders","drawOrder","drawOrderToSetupIndex","IkConstraintTimeline","ikConstraint","ikConstraintIndex","mix","softness","bendDirection","compress","stretch","MIX","SOFTNESS","BEND_DIRECTION","COMPRESS","STRETCH","constraint","ikConstraints","PREV_MIX","PREV_SOFTNESS","PREV_BEND_DIRECTION","PREV_COMPRESS","PREV_STRETCH","mixIn","TransformConstraintTimeline","transformConstraint","transformConstraintIndex","rotateMix","translateMix","scaleMix","shearMix","ROTATE","TRANSLATE","SHEAR","transformConstraints","PREV_ROTATE","PREV_TRANSLATE","PREV_SCALE","PREV_SHEAR","PathConstraintPositionTimeline","pathConstraintPosition","pathConstraintIndex","VALUE","pathConstraints","PREV_VALUE","PathConstraintSpacingTimeline","pathConstraintSpacing","spacing","PathConstraintMixTimeline","pathConstraintMix","tracks","queue","EventQueue","propertyIDs","IntSet","animationsChanged","trackEntryPool","TrackEntry","animationLast","nextAnimationLast","trackLast","nextTrackLast","currentDelta","nextTime","setCurrent","mixingFrom","mixTime","trackEnd","disposeNext","updateMixingFrom","mixingTo","drain","finished","mixDuration","totalAlpha","interruptAlpha","_animationsChanged","applied","mixBlend","applyMixingFrom","animationTime","getAnimationTime","timelineCount","ii","webkit602BugfixHelper","timelineMode","firstFrame","timelinesRotation","timeline","timelineBlend","NOT_LAST","SUBSEQUENT","applyRotateTimeline","queueEvents","eventThreshold","attachments","attachmentThreshold","drawOrderThreshold","alphaHold","alphaMix","timelineHoldMix","FIRST","HOLD","holdMix","rotateTimeline","r1","diff","lastTotal","lastDiff","animationStart","trackLastWrapped","event_1","event_2","oldDrainDisabled","drainDisabled","expandToIndex","getMix","setEmptyAnimation","emptyAnimation","addEmptyAnimation","setEmptyAnimations","ensureArrayCapacity","obtain","holdPrevious","computeHold","computeNotLast","timelinesCount","timelineDipMix","HOLD_MIX","clearListeners","clearListenerNotifications","setAnimationLast","isComplete","resetRotationDirections","animState","objects","event_3","AnimationStateAdapter","animationToMixTime","defaultMix","fromName","toName","setMixWith","textureLoader","pathPrefix","toLoad","responseText","downloadBinary","loadBinary","loadText","loadTexture","loadTextureData","loadTextureAtlas","atlasData","pagesLoaded","atlasPages","TextureAtlas","FakeTexture","_loop_1","atlasPage","pageLoadError","imagePath","errorMessage","atlasPages_1","isLoadingComplete","getToLoad","getLoaded","hasErrors","getErrors","AtlasAttachmentLoader","newRegionAttachment","skin","findRegion","renderObject","newMeshAttachment","newBoundingBoxAttachment","BoundingBoxAttachment","newPathAttachment","PathAttachment","newPointAttachment","PointAttachment","newClippingAttachment","ClippingAttachment","BlendMode","Bone","arotation","ascaleX","ascaleY","ashearX","ashearY","appliedValid","sorted","isActive","updateWorldTransformWith","cosDeg","sinDeg","transformMode","TransformMode","la","lb","lc","ld","OnlyTranslation","NoRotationOrReflection","prx","radDeg","NoScale","NoScaleOrReflection","za","zc","zb","zd","getWorldRotationX","getWorldRotationY","getWorldScaleX","getWorldScaleY","updateAppliedTransform","pid","dx","dy","ic","ra","rb","rc","worldToLocal","invDet","localToWorld","worldToLocalRotation","worldRotation","localToWorldRotation","localRotation","rotateWorld","BoneData","skinRequired","ConstraintData","EventData","IkConstraint","apply1","apply2","rotationIK","dd","bendDir","psx","psy","csx","os1","os2","s2","cwx","cwy","pp","td","ta","r0","minAngle","minDist","maxAngle","maxDist","IkConstraintData","PathConstraint","spaces","positions","segments","percentSpacing","spacingMode","SpacingMode","Percent","rotateMode","tangents","RotateMode","Tangent","ChainScale","boneCount","spacesCount","lengthSpacing","Length","setupLength","length_1","length_2","computeWorldPositions","positionMode","PositionMode","boneX","boneY","offsetRotation","tip","Chain","degRad","length_3","length_4","percentPosition","closed","verticesLength","worldVerticesLength","curveCount","prevCurve","constantSpeed","pathLength_1","BEFORE","computeWorldVertices","addBeforePosition","AFTER","addAfterPosition","length_5","addCurvePosition","pathLength","curveLength","segment","length_6","length_7","tt","ttt","uu","uuu","ut","ut3","uut3","utt3","PathConstraintData","Assets","clientId","SharedAssetManager","clientAssets","queuedAssets","queueAsset","onreadystatechange","DONE","loadJson","updateClientAssets","rawAsset","updateCacheReset","parent_1","slotData","Slot","ikConstraintData","transformConstraintData","TransformConstraint","pathConstraintData","updateCache","skinBones","ikCount","transformCount","pathCount","constraintCount","sortIkConstraint","sortTransformConstraint","sortPathConstraint","sortBone","constraints","constrained","sortReset","slotBone","sortPathConstraintAttachment","skins","sortPathConstraintAttachmentWith","pathBones","findBoneIndex","findSlotIndex","findSkin","newSkin","attachAll","name_1","findIkConstraint","constraintName","findTransformConstraint","findPathConstraint","getBounds","POSITIVE_INFINITY","NEGATIVE_INFINITY","mesh","nn","SkeletonBinary","attachmentLoader","linkedMeshes","readSkeletonData","binary","BinaryInput","readString","readFloat","nonessential","readBoolean","imagesPath","audioPath","readInt","name_2","parent_2","TransformModeValues","rgba8888ToColor","readInt32","SlotData","rgb888ToColor","readStringRef","blendMode","BlendModeValues","readByte","TransformConstraintData","offsetScaleX","offsetScaleY","offsetShearY","PositionModeValues","SpacingModeValues","RotateModeValues","Fixed","readSkin","linkedMesh","parent_3","inheritDeform","setParentMesh","intValue","floatValue","stringValue","volume","balance","animations","readAnimation","slotCount","Skin","name_3","readAttachment","AttachmentTypeValues","AttachmentType","Region","BoundingBox","readVertices","readFloatArray","readShortArray","hullLength","edges","regionUVs","LinkedMesh","parent_4","Path","closed_1","Clipping","endSlot","Vertices","weights","bonesArray","toFloatArray","readShort","tempColor1","tempColor2","timelineType","SLOT_ATTACHMENT","SLOT_COLOR","readCurve","SLOT_TWO_COLOR","BONE_ROTATE","BONE_TRANSLATE","BONE_SCALE","BONE_SHEAR","timelineScale","PATH_POSITION","PATH_SPACING","PATH_MIX","iii","nnn","weighted","deformLength","vn","drawOrderCount","offsetCount","unchanged","unchangedIndex","eventCount","event_4","CURVE_STEPPED","CURVE_BEZIER","Additive","Multiply","Screen","CURVE_LINEAR","getInt16","optimizePositive","byteCount","chars","charCount","fromCharCode","SkeletonBounds","boundingBoxes","polygons","polygonPool","updateAabb","freeAll","boundingBox","polygon","aabbCompute","aabbContainsPoint","aabbIntersectsSegment","aabbIntersectsSkeleton","bounds","containsPoint","containsPointPolygon","prevIndex","inside","vertexY","vertexX","intersectsSegment","intersectsSegmentPolygon","width12","height12","det1","y3","x4","y4","det2","width34","height34","det3","getPolygon","getWidth","getHeight","triangulator","Triangulator","clippingPolygon","clipOutput","clippedVertices","clippedTriangles","scratch","clipStart","clipAttachment","makeClockwise","clippingPolygons","decompose","triangulate","n_1","clipEndWithSlot","clipEnd","isClipping","clipTriangles","trianglesLength","originIndexOffset","originVertOffset","originUVSOffset","polygonsCount","vertexSize","xyOffset","u2","u3","clippedVerticesItems","clippedTrianglesItems","clipOutputLength","d0","d4","clipOutputCount","clipOutputItems","c0","clippingArea","originalOutput","clipped","clippingVertices","clippingVerticesLast","edgeX","edgeY","edgeX2","edgeY2","deltaX","inputVertices","inputVerticesLength","outputStart","inputX","inputY","inputX2","inputY2","side2","verticeslength","area","p1x","p2x","lastX","findEvent","eventDataName","event_5","findPathConstraintIndex","pathConstraintName","SkeletonJson","skeletonMap","boneMap","parent_5","parentName","getValue","transformModeFromString","slotMap","setFromString","blendModeFromString","ik","constraintMap","targetName","positionModeFromString","spacingModeFromString","rotateModeFromString","skinArr","skinMap","entryName","parent_6","eventMap","animationMap","parent_7","scaledVertices","timelineName","timelineMap","valueMap","mapPath","deformName","deformMap","verticesValue","drawOrderNode","draworder","drawOrderMap","offsetMap","event_6","toSinglePrecision","SkinEntry","addSkin","contained","getAttachments","copySkin","newLinkedMesh","dictionary","removeAttachment","slotAttachments","name_4","getAttachmentsForSlot","name_5","oldSkin","skinAttachment","getSkeleton","attachmentTime","setAttachmentTime","getAttachmentTime","getImage","filterFromString","TextureFilter","Nearest","MipMap","MipMapNearestNearest","MipMapLinearNearest","MipMapNearestLinear","MipMapLinearLinear","wrapFromString","TextureWrap","MirroredRepeat","ClampToEdge","TextureRegion","setWraps","uWrap","vWrap","atlasText","pages","regions","reader","TextureAtlasReader","tuple","page","readLine","TextureAtlasRegion","rotateValue","readValue","readTuple","TextureAtlasPage","colon","lastMatch","Vector2","applyRelativeLocal","applyAbsoluteLocal","applyRelativeWorld","applyAbsoluteWorld","tc","degRadReflect","modified","convexPolygons","convexPolygonsIndices","indicesArray","isConcaveArray","polygonIndicesPool","verticesArray","isConcave","previous","p3x","p3y","vx","vy","positiveArea","previousIndex","nextIndex","polygonIndices","fanBaseIndex","lastWinding","merged","winding1","winding","winding2","firstIndex","prevPrevX","prevPrevY","firstX","firstY","secondX","secondY","otherIndices","otherFirstIndex","otherSecondIndex","otherLastIndex","otherPoly","toInt","cbrt","randomTriangular","randomTriangularWith","Interpolation","applyInternal","Pow","power","PowOut","sourceStart","destStart","numElements","oldSize","SUPPORTS_TYPED_ARRAYS","newShortArray","fround","DebugUtils","logBones","instantiator","TimeKeeper","maxDelta","framesPerSecond","totalTime","WindowedMean","windowSize","addedValues","lastValue","mean","hasEnoughData","addValue","getMean","Attachment","nextID","worldVertices","v_1","skeletonBones","weight","copyTo","tempColor","textureWidth","textureHeight","getParentMesh","parentMesh","computeWorldPosition","computeWorldRotation","regionScaleX","regionScaleY","localX2","localY2","localXCos","localXSin","localYCos","localYSin","localX2Cos","localX2Sin","localY2Cos","localY2Sin","OX1","OY1","OX2","OY2","OX3","OY3","OX4","OY4","rendererObject","X1","Y1","C1R","C1G","C1B","C1A","U1","V1","X2","Y2","C2R","C2G","C2B","C2A","U2","V2","X3","Y3","C3R","C3G","C3B","C3A","U3","V3","X4","Y4","C4R","C4G","C4B","C4A","U4","V4","JitterEffect","jitterX","jitterY","SwirlEffect","radius","interpolation","centerX","centerY","radAngle","dist","277","MaxCacheTime","_indices","_boneInfoOffset","_vertexOffset","_indexOffset","_vfOffset","_preTexUrl","_preBlendMode","_segVCount","_segICount","_segOffset","_colorOffset","_preFinalColor","_preDarkColor","_perVertexSize","_perClipVertexSize","_vfCount","_indexCount","_tempr","_tempg","_tempb","_tempa","_finalColor32","_darkColor32","_finalColor","_darkColor","_quadTriangles","AnimationCache","_privateMode","_invalid","_enableCacheAttachedInfo","_frameIdx","_skeletonInfo","_tempSegments","_tempColors","_tempBoneInfos","invalidAllFrame","completeHandle","unbind","preAnimationCache","curAnimationCache","_needToUpdate","toFrameIdx","_updateFrame","updateAllFrame","uintVert","_traverseSkeleton","vfOffset","preSegOffset","preSegInfo","indexCount","vfCount","fillVertices","skeletonColor","attachmentColor","slotColor","fr","fg","fa","dr","dg","jj","isRegion","isMesh","isClip","boneInfo","slotIdx","_ii","_nn","_animationPool","removeSkeleton","animationsCache","aniKey","animationCache","poolKey","_animationCache","278","_skeletonJson","skeletonJsonStr","skeletonJson","_atlasText","createRegion","origSize","skelTex","SkeletonTexture","setRealTexture","updateRegionUV","createSpriteFrame","_atlasCache","_cloneId","ensureTexturesLoaded","caller","texsLen","loadedCount","loadedItem","quiet","_getAtlas","resData","_getTexture","names","_region","279","getRealTexture","280","VFOneColor","VFOneColorTexId","VFTwoColor","FLAG_BATCH","FLAG_TWO_COLOR","_handleVal","_slotColor","_boneColor","_originColor","_meshColor","_tempPos","_tempUv","_premultipliedAlpha","_multiplier","_slotRangeStart","_slotRangeEnd","_useTint","_useMulti","_debugSlots","_debugBones","_debugMesh","_nodeR","_nodeG","_nodeB","_nodeA","_vertexFloatCount","_vertexCount","_vertexFloatOffset","_inRange","_mustFlush","_m00","_m04","_m12","_m01","_m05","_m13","_g","_fr","_fg","_fb","_fa","_dr","_dg","_db","_da","_renderer","_needColor","_vertexEffect","_getSlotMaterial","useModel","materialCache","materialInfo","_handleColor","_spineColorToInt32","spineColor","SpineAssembler","packDynamicAtlasForSpine","_v2","_n2","_v3","_n3","realTimeTraverse","locSkeleton","graphics","worldMatm","lineTo","_ii2","_nn2","_ii3","_nn3","fillColor","_n4","circle","fill","cacheTraverse","uintbuf","frameVFOffset","frameIndexOffset","segVFCount","needBatch","calcTranslate","nowColor","maxVFOffset","segInfo","_ii4","_il","_ii5","_il2","frameColorOffset","_ii6","_il3","nodeColor","../../cocos2d/core/renderer/assembler","../../cocos2d/core/renderer/webgl/vertex-format","281","282","VertexEffectDelegate","_interpolation","_effectType","initJitter","initSwirlWithPow","initSwirlWithPowOut","getJitterVertexEffect","getSwirlVertexEffect","getVertexEffect","getEffectType","283","./cocos2d","./cocos2d/core/predefine","./extends","./package","./polyfill/array","./polyfill/array-buffer","./polyfill/misc","./polyfill/number","./polyfill/object","./polyfill/string","./polyfill/typescript","./predefine","284","TypedArray","285","286","LOG2E","Timer","_timerTable","287","288","ownKeys","getOwnPropertySymbols","289","searchString","290","__assign","__rest","propertyIsEnumerable","__decorate","decorators","Reflect","__param","paramIndex","decorator","__metadata","metadataKey","metadataValue","metadata","__awaiter","thisArg","_arguments","P","generator","adopt","fulfilled","rejected","__generator","_","sent","trys","ops","verb","throw","return","__exportStar","__createBinding","k2","__values","__read","__spread","__spreadArrays","jl","__await","__asyncGenerator","asyncIterator","settle","fulfill","__asyncDelegator","__asyncValues","__makeTemplateObject","cooked","__setModuleDefault","__importStar","mod","__importDefault","__classPrivateFieldGet","receiver","privateMap","__classPrivateFieldSet","291","defineMacro","defineDeprecatedMacroGetter","recommandedUsage","defined","WECHATGAMESUB","getSharedCanvas","WECHATGAME","getSystemInfoSync","QQPLAY","engineVersion"],"mappings":"CAWA,SAAAA,MAAAC,SAAAC,OAAAC;EACA,SAAAC,WAAAC,MAAAC;IACA,IAAAC,SAAAL,MAAAG;IACA,KAAAE,QAAA;MACA,IAAAC,aAAAP,QAAAI;MACA,KAAAG,YAEA;MAEA,IAAAC,UAAA;MACAF,SAAAL,MAAAG,QAAA;QAAAI,SAAAA;;MACAD,WAAA,GAAA,SAAAE;QACA,OAAAN,WAAAI,WAAA,GAAAE,MAAAA;SACAH,QAAAE;;IAEA,OAAAF,OAAAE;;EAEA,KAAA,IAAAE,IAAA,GAAAA,IAAAR,MAAAS,QAAAD,KAAAP,WAAAD,MAAAQ;EAGA,OAAAP;EApBA,CAsBA;EAAAS,GAAA,EAAA,SAAAC,SAAAP,QAAAE;ICjCAF,OAAAE,UAAA;MACAM,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,KAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,KAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,KAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,KAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,KAAA;MACAC,MAAA;MACA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","file":"cocos2d-js.931db.js","sourcesContent":["\n// Based on https://github.com/substack/browser-pack/blob/master/prelude.js\n\n// modules are defined as an array\n// [ module function, map of requireuires ]\n//\n// map of requireuires is short require name -> numeric require\n//\n// anything defined in a previous bundle is accessed via the\n// orig method which is the requireuire for previous bundles\n\n(function outer (modules, cache, entry) {\n function newRequire(name, jumped){\n var module = cache[name];\n if(!module) {\n var moduleData = modules[name];\n if(!moduleData) {\n // this module is excluded from engine\n return undefined;\n }\n var exports = {};\n module = cache[name] = {exports: exports};\n moduleData[0](function(x){\n return newRequire(moduleData[1][x] || x);\n },module,exports);\n }\n return module.exports;\n }\n for(var i=0;i\n step:function (dt) {\n cc.logID(1006);\n },\n\n // Called once per frame. Time is the number of seconds of a frame interval.\n update:function (dt) {\n cc.logID(1007);\n },\n\n /**\n * !#en get the target.\n * !#zh 获取当前目标节点。\n * @method getTarget\n * @return {Node}\n */\n getTarget:function () {\n return this.target;\n },\n\n /**\n * !#en The action will modify the target properties.\n * !#zh 设置目标节点。\n * @method setTarget\n * @param {Node} target\n */\n setTarget:function (target) {\n this.target = target;\n },\n\n /**\n * !#en get the original target.\n * !#zh 获取原始目标节点。\n * @method getOriginalTarget\n * @return {Node}\n */\n getOriginalTarget:function () {\n return this.originalTarget;\n },\n\n // Set the original target, since target can be nil.\n // Is the target that were used to run the action.\n // Unless you are doing something complex, like cc.ActionManager, you should NOT call this method.\n setOriginalTarget:function (originalTarget) {\n this.originalTarget = originalTarget;\n },\n\n /**\n * !#en get tag number.\n * !#zh 获取用于识别动作的标签。\n * @method getTag\n * @return {Number}\n */\n getTag:function () {\n return this.tag;\n },\n\n /**\n * !#en set tag number.\n * !#zh 设置标签,用于识别动作。\n * @method setTag\n * @param {Number} tag\n */\n setTag:function (tag) {\n this.tag = tag;\n },\n\n // Currently JavaScript Bindigns (JSB), in some cases, needs to use retain and release. This is a bug in JSB,\n // and the ugly workaround is to use retain/release. So, these 2 methods were added to be compatible with JSB.\n // This is a hack, and should be removed once JSB fixes the retain/release bug.\n retain:function () {\n },\n\n // Currently JavaScript Bindigns (JSB), in some cases, needs to use retain and release. This is a bug in JSB,\n // and the ugly workaround is to use retain/release. So, these 2 methods were added to be compatible with JSB.\n // This is a hack, and should be removed once JSB fixes the retain/release bug.\n release:function () {\n }\n});\n\n/**\n * !#en Default Action tag.\n * !#zh 默认动作标签。\n * @property TAG_INVALID\n * @constant\n * @static\n * @type {Number}\n * @default -1\n */\ncc.Action.TAG_INVALID = -1;\n\n\n/**\n * !#en\n * Base class actions that do have a finite time duration.
\n * Possible actions:
\n * - An action with a duration of 0 seconds.
\n * - An action with a duration of 35.5 seconds.\n *\n * Infinite time actions are valid\n * !#zh 有限时间动作,这种动作拥有时长 duration 属性。\n * @class FiniteTimeAction\n * @extends Action\n */\ncc.FiniteTimeAction = cc.Class({\n name: 'cc.FiniteTimeAction',\n extends: cc.Action,\n\n ctor:function () {\n //! duration in seconds\n this._duration = 0;\n },\n\n /**\n * !#en get duration of the action. (seconds).\n * !#zh 获取动作以秒为单位的持续时间。\n * @method getDuration\n * @return {Number}\n */\n getDuration:function () {\n return this._duration * (this._timesForRepeat || 1);\n },\n\n /**\n * !#en set duration of the action. (seconds).\n * !#zh 设置动作以秒为单位的持续时间。\n * @method setDuration\n * @param {Number} duration\n */\n setDuration:function (duration) {\n this._duration = duration;\n },\n\n /**\n * !#en\n * Returns a reversed action.
\n * For example:
\n * - The action will be x coordinates of 0 move to 100.
\n * - The reversed action will be x of 100 move to 0.\n * - Will be rewritten\n * !#zh 返回一个新的动作,执行与原动作完全相反的动作。\n * @method reverse\n * @return {Null}\n */\n reverse:function () {\n cc.logID(1008);\n return null;\n },\n\n /**\n * !#en\n * to copy object with deep copy.\n * returns a clone of action.\n * !#zh 返回一个克隆的动作。\n * @method clone\n * @return {FiniteTimeAction}\n */\n clone:function () {\n return new cc.FiniteTimeAction();\n }\n});\n\n/**\n * @module cc\n */\n\n/*\n * Changes the speed of an action, making it take longer (speed > 1)\n * or less (speed < 1) time.
\n * Useful to simulate 'slow motion' or 'fast forward' effect.\n *\n * @warning This action can't be Sequenceable because it is not an cc.IntervalAction\n * @class Speed\n * @extends Action\n *\n * @param {ActionInterval} action\n * @param {Number} speed\n */\ncc.Speed = cc.Class({\n name: 'cc.Speed',\n extends: cc.Action,\n\n ctor:function (action, speed) {\n this._speed = 0;\n this._innerAction = null;\n\n\t\taction && this.initWithAction(action, speed);\n },\n\n /*\n * Gets the current running speed.
\n * Will get a percentage number, compared to the original speed.\n *\n * @method getSpeed\n * @return {Number}\n */\n getSpeed:function () {\n return this._speed;\n },\n\n /*\n * alter the speed of the inner function in runtime.\n * @method setSpeed\n * @param {Number} speed\n */\n setSpeed:function (speed) {\n this._speed = speed;\n },\n\n /*\n * initializes the action.\n * @method initWithAction\n * @param {ActionInterval} action\n * @param {Number} speed\n * @return {Boolean}\n */\n initWithAction:function (action, speed) {\n if (!action) {\n cc.errorID(1021);\n return false;\n }\n\n this._innerAction = action;\n this._speed = speed;\n return true;\n },\n\n clone:function () {\n var action = new cc.Speed();\n action.initWithAction(this._innerAction.clone(), this._speed);\n return action;\n },\n\n startWithTarget:function (target) {\n cc.Action.prototype.startWithTarget.call(this, target);\n this._innerAction.startWithTarget(target);\n },\n\n stop:function () {\n this._innerAction.stop();\n cc.Action.prototype.stop.call(this);\n },\n\n step:function (dt) {\n this._innerAction.step(dt * this._speed);\n },\n\n isDone:function () {\n return this._innerAction.isDone();\n },\n\n reverse:function () {\n return new cc.Speed(this._innerAction.reverse(), this._speed);\n },\n\n /*\n * Set inner Action.\n * @method setInnerAction\n * @param {ActionInterval} action\n */\n setInnerAction:function (action) {\n if (this._innerAction !== action) {\n this._innerAction = action;\n }\n },\n\n /*\n * Get inner Action.\n * @method getInnerAction\n * @return {ActionInterval}\n */\n getInnerAction:function () {\n return this._innerAction;\n }\n});\n\n/**\n * @module cc\n */\n\n/**\n * !#en\n * Creates the speed action which changes the speed of an action, making it take longer (speed > 1)\n * or less (speed < 1) time.
\n * Useful to simulate 'slow motion' or 'fast forward' effect.\n * !#zh 修改目标动作的速率。\n * @warning This action can't be Sequenceable because it is not an cc.IntervalAction\n *\n * @method speed\n * @param {ActionInterval} action\n * @param {Number} speed\n * @return {Action}\n * @example\n * // change the target action speed;\n * var action = cc.scaleTo(0.2, 1, 0.6);\n * var newAction = cc.speed(action, 0.5);\n */\ncc.speed = function (action, speed) {\n return new cc.Speed(action, speed);\n};\n\n/*\n * cc.Follow is a follow action which makes its target follows another node.\n *\n * @example\n * //example\n * //Instead of using cc.Camera as a \"follower\", use this action instead.\n * layer.runAction(cc.follow(hero));\n *\n * @property {Number} leftBoundary - world leftBoundary.\n * @property {Number} rightBoundary - world rightBoundary.\n * @property {Number} topBoundary - world topBoundary.\n * @property {Number} bottomBoundary - world bottomBoundary.\n *\n * @param {cc.Node} followedNode\n * @param {Rect} rect\n * @example\n * // creates the action with a set boundary\n * var followAction = new cc.Follow(node, cc.rect(0, 0, s.width * 2 - 100, s.height));\n * this.runAction(followAction);\n *\n * // creates the action with no boundary set\n * var followAction = new cc.Follow(node);\n * this.runAction(followAction);\n *\n * @class\n * @extends Action\n */\ncc.Follow = cc.Class({\n name: 'cc.Follow',\n extends: cc.Action,\n\n\t/*\n * Constructor function, override it to extend the construction behavior, remember to call \"this._super()\" in the extended \"ctor\" function.
\n\t * creates the action with a set boundary.
\n\t * creates the action with no boundary set.\n * @param {cc.Node} followedNode\n * @param {Rect} rect\n\t */\n ctor:function (followedNode, rect) {\n // node to follow\n this._followedNode = null;\n // whether camera should be limited to certain area\n this._boundarySet = false;\n // if screen size is bigger than the boundary - update not needed\n this._boundaryFullyCovered = false;\n // fast access to the screen dimensions\n this._halfScreenSize = null;\n this._fullScreenSize = null;\n\n this.leftBoundary = 0.0;\n this.rightBoundary = 0.0;\n this.topBoundary = 0.0;\n this.bottomBoundary = 0.0;\n this._worldRect = cc.rect(0, 0, 0, 0);\n\n\t\tif(followedNode)\n\t\t\trect ? this.initWithTarget(followedNode, rect)\n\t\t\t\t : this.initWithTarget(followedNode);\n },\n\n clone:function () {\n var action = new cc.Follow();\n var locRect = this._worldRect;\n var rect = new cc.Rect(locRect.x, locRect.y, locRect.width, locRect.height);\n action.initWithTarget(this._followedNode, rect);\n return action;\n },\n\n /*\n * Get whether camera should be limited to certain area.\n *\n * @return {Boolean}\n */\n isBoundarySet:function () {\n return this._boundarySet;\n },\n\n /*\n * alter behavior - turn on/off boundary.\n *\n * @param {Boolean} value\n */\n setBoudarySet:function (value) {\n this._boundarySet = value;\n },\n\n /*\n * initializes the action with a set boundary.\n *\n * @param {cc.Node} followedNode\n * @param {Rect} [rect=]\n * @return {Boolean}\n */\n initWithTarget:function (followedNode, rect) {\n if (!followedNode) {\n cc.errorID(1022);\n return false;\n }\n\n var _this = this;\n rect = rect || cc.rect(0, 0, 0, 0);\n _this._followedNode = followedNode;\n _this._worldRect = rect;\n\n _this._boundarySet = !(rect.width === 0 && rect.height === 0);\n\n _this._boundaryFullyCovered = false;\n\n var winSize = cc.winSize;\n _this._fullScreenSize = cc.v2(winSize.width, winSize.height);\n _this._halfScreenSize = _this._fullScreenSize.mul(0.5);\n\n if (_this._boundarySet) {\n _this.leftBoundary = -((rect.x + rect.width) - _this._fullScreenSize.x);\n _this.rightBoundary = -rect.x;\n _this.topBoundary = -rect.y;\n _this.bottomBoundary = -((rect.y + rect.height) - _this._fullScreenSize.y);\n\n if (_this.rightBoundary < _this.leftBoundary) {\n // screen width is larger than world's boundary width\n //set both in the middle of the world\n _this.rightBoundary = _this.leftBoundary = (_this.leftBoundary + _this.rightBoundary) / 2;\n }\n if (_this.topBoundary < _this.bottomBoundary) {\n // screen width is larger than world's boundary width\n //set both in the middle of the world\n _this.topBoundary = _this.bottomBoundary = (_this.topBoundary + _this.bottomBoundary) / 2;\n }\n\n if ((_this.topBoundary === _this.bottomBoundary) && (_this.leftBoundary === _this.rightBoundary))\n _this._boundaryFullyCovered = true;\n }\n return true;\n },\n\n step:function (dt) {\n var targetWorldPos = this.target.convertToWorldSpaceAR(cc.Vec2.ZERO);\n var followedWorldPos = this._followedNode.convertToWorldSpaceAR(cc.Vec2.ZERO);\n // compute the offset between followed and target node\n var delta = targetWorldPos.sub(followedWorldPos);\n var tempPos = this.target.parent.convertToNodeSpaceAR(delta.add(this._halfScreenSize));\n\n if (this._boundarySet) {\n // whole map fits inside a single screen, no need to modify the position - unless map boundaries are increased\n if (this._boundaryFullyCovered)\n return;\n\n\t this.target.setPosition(misc.clampf(tempPos.x, this.leftBoundary, this.rightBoundary), misc.clampf(tempPos.y, this.bottomBoundary, this.topBoundary));\n } else {\n this.target.setPosition(tempPos.x, tempPos.y);\n }\n },\n\n isDone:function () {\n return ( !this._followedNode.activeInHierarchy );\n },\n\n stop:function () {\n this.target = null;\n cc.Action.prototype.stop.call(this);\n }\n});\n\n/**\n * !#en Create a follow action which makes its target follows another node.\n * !#zh 追踪目标节点的位置。\n * @method follow\n * @param {Node} followedNode\n * @param {Rect} rect\n * @return {Action|Null} returns the cc.Follow object on success\n * @example\n * // example\n * // creates the action with a set boundary\n * var followAction = cc.follow(targetNode, cc.rect(0, 0, screenWidth * 2 - 100, screenHeight));\n * node.runAction(followAction);\n *\n * // creates the action with no boundary set\n * var followAction = cc.follow(targetNode);\n * node.runAction(followAction);\n */\ncc.follow = function (followedNode, rect) {\n return new cc.Follow(followedNode, rect);\n};\n","/****************************************************************************\n Copyright (c) 2008 Radu Gruian\n Copyright (c) 2008-2010 Ricardo Quesada\n Copyright (c) 2011 Vit Valentin\n Copyright (c) 2011-2012 cocos2d-x.org\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos2d-x.org\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n\n Orignal code by Radu Gruian: http://www.codeproject.com/Articles/30838/Overhauser-Catmull-Rom-Splines-for-Camera-Animatio.So\n\n Adapted to cocos2d-x by Vit Valentin\n\n Adapted from cocos2d-x to cocos2d-iphone by Ricardo Quesada\n ****************************************************************************/\n\n/**\n * @module cc\n */\n\n/*\n * Returns the Cardinal Spline position for a given set of control points, tension and time.
\n * CatmullRom Spline formula.
\n * s(-ttt + 2tt - t)P1 + s(-ttt + tt)P2 + (2ttt - 3tt + 1)P2 + s(ttt - 2tt + t)P3 + (-2ttt + 3tt)P3 + s(ttt - tt)P4\n *\n * @method cardinalSplineAt\n * @param {Vec2} p0\n * @param {Vec2} p1\n * @param {Vec2} p2\n * @param {Vec2} p3\n * @param {Number} tension\n * @param {Number} t\n * @return {Vec2}\n */\nfunction cardinalSplineAt (p0, p1, p2, p3, tension, t) {\n var t2 = t * t;\n var t3 = t2 * t;\n\n /*\n * Formula: s(-ttt + 2tt - t)P1 + s(-ttt + tt)P2 + (2ttt - 3tt + 1)P2 + s(ttt - 2tt + t)P3 + (-2ttt + 3tt)P3 + s(ttt - tt)P4\n */\n var s = (1 - tension) / 2;\n\n var b1 = s * ((-t3 + (2 * t2)) - t); // s(-t3 + 2 t2 - t)P1\n var b2 = s * (-t3 + t2) + (2 * t3 - 3 * t2 + 1); // s(-t3 + t2)P2 + (2 t3 - 3 t2 + 1)P2\n var b3 = s * (t3 - 2 * t2 + t) + (-2 * t3 + 3 * t2); // s(t3 - 2 t2 + t)P3 + (-2 t3 + 3 t2)P3\n var b4 = s * (t3 - t2); // s(t3 - t2)P4\n\n var x = (p0.x * b1 + p1.x * b2 + p2.x * b3 + p3.x * b4);\n var y = (p0.y * b1 + p1.y * b2 + p2.y * b3 + p3.y * b4);\n return cc.v2(x, y);\n};\n\n/*\n * returns a point from the array\n * @method getControlPointAt\n * @param {Array} controlPoints\n * @param {Number} pos\n * @return {Array}\n */\nfunction getControlPointAt (controlPoints, pos) {\n var p = Math.min(controlPoints.length - 1, Math.max(pos, 0));\n return controlPoints[p];\n};\n\nfunction reverseControlPoints (controlPoints) {\n var newArray = [];\n for (var i = controlPoints.length - 1; i >= 0; i--) {\n newArray.push(cc.v2(controlPoints[i].x, controlPoints[i].y));\n }\n return newArray;\n}\n\nfunction cloneControlPoints (controlPoints) {\n var newArray = [];\n for (var i = 0; i < controlPoints.length; i++)\n newArray.push(cc.v2(controlPoints[i].x, controlPoints[i].y));\n return newArray;\n}\n\n\n/*\n * Cardinal Spline path. http://en.wikipedia.org/wiki/Cubic_Hermite_spline#Cardinal_spline\n * Absolute coordinates.\n *\n * @class CardinalSplineTo\n * @extends ActionInterval\n *\n * @param {Number} duration\n * @param {Array} points array of control points\n * @param {Number} tension\n *\n * @example\n * //create a cc.CardinalSplineTo\n * var action1 = cc.cardinalSplineTo(3, array, 0);\n */\ncc.CardinalSplineTo = cc.Class({\n name: 'cc.CardinalSplineTo',\n extends: cc.ActionInterval,\n\n ctor: function (duration, points, tension) {\n /* Array of control points */\n this._points = [];\n this._deltaT = 0;\n this._tension = 0;\n this._previousPosition = null;\n this._accumulatedDiff = null;\n tension !== undefined && cc.CardinalSplineTo.prototype.initWithDuration.call(this, duration, points, tension);\n },\n\n initWithDuration:function (duration, points, tension) {\n if (!points || points.length === 0) {\n cc.errorID(1024);\n return false;\n }\n\n if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) {\n this.setPoints(points);\n this._tension = tension;\n return true;\n }\n return false;\n },\n\n clone:function () {\n var action = new cc.CardinalSplineTo();\n action.initWithDuration(this._duration, cloneControlPoints(this._points), this._tension);\n return action;\n },\n\n startWithTarget:function (target) {\n cc.ActionInterval.prototype.startWithTarget.call(this, target);\n // Issue #1441 from cocos2d-iphone\n this._deltaT = 1 / (this._points.length - 1);\n this._previousPosition = cc.v2(this.target.x, this.target.y);\n this._accumulatedDiff = cc.v2(0, 0);\n },\n\n update:function (dt) {\n dt = this._computeEaseTime(dt);\n var p, lt;\n var ps = this._points;\n // eg.\n // p..p..p..p..p..p..p\n // 1..2..3..4..5..6..7\n // want p to be 1, 2, 3, 4, 5, 6\n if (dt === 1) {\n p = ps.length - 1;\n lt = 1;\n } else {\n var locDT = this._deltaT;\n p = 0 | (dt / locDT);\n lt = (dt - locDT * p) / locDT;\n }\n\n var newPos = cardinalSplineAt(\n getControlPointAt(ps, p - 1),\n getControlPointAt(ps, p - 0),\n getControlPointAt(ps, p + 1),\n getControlPointAt(ps, p + 2),\n this._tension, lt);\n\n if (cc.macro.ENABLE_STACKABLE_ACTIONS) {\n var tempX, tempY;\n tempX = this.target.x - this._previousPosition.x;\n tempY = this.target.y - this._previousPosition.y;\n if (tempX !== 0 || tempY !== 0) {\n var locAccDiff = this._accumulatedDiff;\n tempX = locAccDiff.x + tempX;\n tempY = locAccDiff.y + tempY;\n locAccDiff.x = tempX;\n locAccDiff.y = tempY;\n newPos.x += tempX;\n newPos.y += tempY;\n }\n }\n this.updatePosition(newPos);\n },\n\n reverse:function () {\n var reversePoints = reverseControlPoints(this._points);\n return cc.cardinalSplineTo(this._duration, reversePoints, this._tension);\n },\n\n /*\n * update position of target\n * @method updatePosition\n * @param {Vec2} newPos\n */\n updatePosition:function (newPos) {\n this.target.setPosition(newPos);\n this._previousPosition = newPos;\n },\n\n /*\n * Points getter\n * @method getPoints\n * @return {Array}\n */\n getPoints:function () {\n return this._points;\n },\n\n /**\n * Points setter\n * @method setPoints\n * @param {Array} points\n */\n setPoints:function (points) {\n this._points = points;\n }\n});\n\n/**\n * !#en Creates an action with a Cardinal Spline array of points and tension.\n * !#zh 按基数样条曲线轨迹移动到目标位置。\n * @method cardinalSplineTo\n * @param {Number} duration\n * @param {Array} points array of control points\n * @param {Number} tension\n * @return {ActionInterval}\n *\n * @example\n * //create a cc.CardinalSplineTo\n * var action1 = cc.cardinalSplineTo(3, array, 0);\n */\ncc.cardinalSplineTo = function (duration, points, tension) {\n return new cc.CardinalSplineTo(duration, points, tension);\n};\n\n/*\n * Cardinal Spline path. http://en.wikipedia.org/wiki/Cubic_Hermite_spline#Cardinal_spline\n * Relative coordinates.\n *\n * @class CardinalSplineBy\n * @extends CardinalSplineTo\n *\n * @param {Number} duration\n * @param {Array} points\n * @param {Number} tension\n *\n * @example\n * //create a cc.CardinalSplineBy\n * var action1 = cc.cardinalSplineBy(3, array, 0);\n */\ncc.CardinalSplineBy = cc.Class({\n name: 'cc.CardinalSplineBy',\n extends: cc.CardinalSplineTo,\n\n ctor:function (duration, points, tension) {\n this._startPosition = cc.v2(0, 0);\n tension !== undefined && this.initWithDuration(duration, points, tension);\n },\n\n startWithTarget:function (target) {\n cc.CardinalSplineTo.prototype.startWithTarget.call(this, target);\n this._startPosition.x = target.x;\n this._startPosition.y = target.y;\n },\n\n reverse:function () {\n var copyConfig = this._points.slice();\n var current;\n //\n // convert \"absolutes\" to \"diffs\"\n //\n var p = copyConfig[0];\n for (var i = 1; i < copyConfig.length; ++i) {\n current = copyConfig[i];\n copyConfig[i] = current.sub(p);\n p = current;\n }\n\n // convert to \"diffs\" to \"reverse absolute\"\n var reverseArray = reverseControlPoints(copyConfig);\n\n // 1st element (which should be 0,0) should be here too\n p = reverseArray[ reverseArray.length - 1 ];\n reverseArray.pop();\n\n p.x = -p.x;\n p.y = -p.y;\n\n reverseArray.unshift(p);\n for (var i = 1; i < reverseArray.length; ++i) {\n current = reverseArray[i];\n current.x = -current.x;\n current.y = -current.y;\n current.x += p.x;\n current.y += p.y;\n reverseArray[i] = current;\n p = current;\n }\n return cc.cardinalSplineBy(this._duration, reverseArray, this._tension);\n },\n\n /**\n * update position of target\n * @method updatePosition\n * @param {Vec2} newPos\n */\n updatePosition:function (newPos) {\n var pos = this._startPosition;\n var posX = newPos.x + pos.x;\n var posY = newPos.y + pos.y;\n this._previousPosition.x = posX;\n this._previousPosition.y = posY;\n this.target.setPosition(posX, posY);\n },\n\n clone:function () {\n var a = new cc.CardinalSplineBy();\n a.initWithDuration(this._duration, cloneControlPoints(this._points), this._tension);\n return a;\n }\n});\n\n/**\n * !#en Creates an action with a Cardinal Spline array of points and tension.\n * !#zh 按基数样条曲线轨迹移动指定的距离。\n * @method cardinalSplineBy\n * @param {Number} duration\n * @param {Array} points\n * @param {Number} tension\n *\n * @return {ActionInterval}\n */\ncc.cardinalSplineBy = function (duration, points, tension) {\n return new cc.CardinalSplineBy(duration, points, tension);\n};\n\n/*\n * An action that moves the target with a CatmullRom curve to a destination point.
\n * A Catmull Rom is a Cardinal Spline with a tension of 0.5.
\n * http://en.wikipedia.org/wiki/Cubic_Hermite_spline#Catmull.E2.80.93Rom_spline\n * Absolute coordinates.\n *\n * @class CatmullRomTo\n * @extends CardinalSplineTo\n *\n * @param {Number} dt\n * @param {Array} points\n *\n * @example\n * var action1 = cc.catmullRomTo(3, array);\n */\ncc.CatmullRomTo = cc.Class({\n name: 'cc.CatmullRomTo',\n extends: cc.CardinalSplineTo,\n\n ctor: function(dt, points) {\n points && this.initWithDuration(dt, points);\n },\n\n initWithDuration:function (dt, points) {\n return cc.CardinalSplineTo.prototype.initWithDuration.call(this, dt, points, 0.5);\n },\n\n clone:function () {\n var action = new cc.CatmullRomTo();\n action.initWithDuration(this._duration, cloneControlPoints(this._points));\n return action;\n }\n});\n\n/**\n * !#en Creates an action with a Cardinal Spline array of points and tension.\n * !#zh 按 Catmull Rom 样条曲线轨迹移动到目标位置。\n * @method catmullRomTo\n * @param {Number} dt\n * @param {Array} points\n * @return {ActionInterval}\n *\n * @example\n * var action1 = cc.catmullRomTo(3, array);\n */\ncc.catmullRomTo = function (dt, points) {\n return new cc.CatmullRomTo(dt, points);\n};\n\n/*\n * An action that moves the target with a CatmullRom curve by a certain distance.
\n * A Catmull Rom is a Cardinal Spline with a tension of 0.5.
\n * http://en.wikipedia.org/wiki/Cubic_Hermite_spline#Catmull.E2.80.93Rom_spline\n * Relative coordinates.\n *\n * @class CatmullRomBy\n * @extends CardinalSplineBy\n *\n * @param {Number} dt\n * @param {Array} points\n *\n * @example\n * var action1 = cc.catmullRomBy(3, array);\n */\ncc.CatmullRomBy = cc.Class({\n name: 'cc.CatmullRomBy',\n extends: cc.CardinalSplineBy,\n\n ctor: function(dt, points) {\n points && this.initWithDuration(dt, points);\n },\n\n initWithDuration:function (dt, points) {\n return cc.CardinalSplineTo.prototype.initWithDuration.call(this, dt, points, 0.5);\n },\n\n clone:function () {\n var action = new cc.CatmullRomBy();\n action.initWithDuration(this._duration, cloneControlPoints(this._points));\n return action;\n }\n});\n\n/**\n * !#en Creates an action with a Cardinal Spline array of points and tension.\n * !#zh 按 Catmull Rom 样条曲线轨迹移动指定的距离。\n * @method catmullRomBy\n * @param {Number} dt\n * @param {Array} points\n * @return {ActionInterval}\n * @example\n * var action1 = cc.catmullRomBy(3, array);\n */\ncc.catmullRomBy = function (dt, points) {\n return new cc.CatmullRomBy(dt, points);\n};\n","/****************************************************************************\n Copyright (c) 2008-2010 Ricardo Quesada\n Copyright (c) 2011-2012 cocos2d-x.org\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos2d-x.org\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * @module cc\n */\n\n/**\n * !#en\n * Creates the action easing object with the rate parameter.
\n * From slow to fast.\n * !#zh 创建 easeIn 缓动对象,由慢到快。\n * @method easeIn\n * @param {Number} rate\n * @return {Object}\n * @example\n * action.easing(cc.easeIn(3.0));\n */\ncc.easeIn = function (rate) {\n return {\n _rate: rate,\n easing: function (dt) {\n return Math.pow(dt, this._rate);\n },\n reverse: function(){\n return cc.easeIn(1 / this._rate);\n }\n };\n};\n\n/**\n * !#en\n * Creates the action easing object with the rate parameter.
\n * From fast to slow.\n * !#zh 创建 easeOut 缓动对象,由快到慢。\n * @method easeOut\n * @param {Number} rate\n * @return {Object}\n * @example\n * action.easing(cc.easeOut(3.0));\n */\ncc.easeOut = function (rate) {\n return {\n _rate: rate,\n easing: function (dt) {\n return Math.pow(dt, 1 / this._rate);\n },\n reverse: function(){\n return cc.easeOut(1 / this._rate);\n }\n };\n};\n\n/**\n * !#en\n * Creates the action easing object with the rate parameter.
\n * Slow to fast then to slow.\n * !#zh 创建 easeInOut 缓动对象,慢到快,然后慢。\n * @method easeInOut\n * @param {Number} rate\n * @return {Object}\n *\n * @example\n * action.easing(cc.easeInOut(3.0));\n */\ncc.easeInOut = function (rate) {\n return {\n _rate: rate,\n easing: function (dt) {\n dt *= 2;\n if (dt < 1)\n return 0.5 * Math.pow(dt, this._rate);\n else\n return 1.0 - 0.5 * Math.pow(2 - dt, this._rate);\n },\n reverse: function(){\n return cc.easeInOut(this._rate);\n }\n };\n};\n\n/**\n * !#en\n * Creates the action easing object with the rate parameter.
\n * Reference easeInExpo:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeExponentialIn 缓动对象。
\n * EaseExponentialIn 是按指数函数缓动进入的动作。
\n * 参考 easeInExpo:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeExponentialIn\n * @return {Object}\n * @example\n * action.easing(cc.easeExponentialIn());\n */\nvar _easeExponentialInObj = {\n easing: function(dt){\n return dt === 0 ? 0 : Math.pow(2, 10 * (dt - 1));\n },\n reverse: function(){\n return _easeExponentialOutObj;\n }\n};\ncc.easeExponentialIn = function(){\n return _easeExponentialInObj;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Reference easeOutExpo:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeExponentialOut 缓动对象。
\n * EaseExponentialOut 是按指数函数缓动退出的动作。
\n * 参考 easeOutExpo:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeExponentialOut\n * @return {Object}\n * @example\n * action.easing(cc.easeExponentialOut());\n */\nvar _easeExponentialOutObj = {\n easing: function(dt){\n return dt === 1 ? 1 : (-(Math.pow(2, -10 * dt)) + 1);\n },\n reverse: function(){\n return _easeExponentialInObj;\n }\n};\ncc.easeExponentialOut = function(){\n return _easeExponentialOutObj;\n};\n\n/**\n * !#en\n * Creates an EaseExponentialInOut action easing object.
\n * Reference easeInOutExpo:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeExponentialInOut 缓动对象。
\n * EaseExponentialInOut 是按指数函数缓动进入并退出的动作。
\n * 参考 easeInOutExpo:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeExponentialInOut\n * @return {Object}\n * @example\n * action.easing(cc.easeExponentialInOut());\n */\nvar _easeExponentialInOutObj = {\n easing: function(dt){\n if( dt !== 1 && dt !== 0) {\n dt *= 2;\n if (dt < 1)\n return 0.5 * Math.pow(2, 10 * (dt - 1));\n else\n return 0.5 * (-Math.pow(2, -10 * (dt - 1)) + 2);\n }\n return dt;\n },\n reverse: function(){\n return _easeExponentialInOutObj;\n }\n};\ncc.easeExponentialInOut = function(){\n return _easeExponentialInOutObj;\n};\n\n/**\n * !#en\n * Creates an EaseSineIn action.
\n * Reference easeInSine:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 EaseSineIn 缓动对象。
\n * EaseSineIn 是按正弦函数缓动进入的动作。
\n * 参考 easeInSine:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeSineIn\n * @return {Object}\n * @example\n * action.easing(cc.easeSineIn());\n */\nvar _easeSineInObj = {\n easing: function(dt){\n return (dt===0 || dt===1) ? dt : -1 * Math.cos(dt * Math.PI / 2) + 1;\n },\n reverse: function(){\n return _easeSineOutObj;\n }\n};\ncc.easeSineIn = function(){\n return _easeSineInObj;\n};\n\n/**\n * !#en\n * Creates an EaseSineOut action easing object.
\n * Reference easeOutSine:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 EaseSineOut 缓动对象。
\n * EaseSineIn 是按正弦函数缓动退出的动作。
\n * 参考 easeOutSine:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeSineOut\n * @return {Object}\n * @example\n * action.easing(cc.easeSineOut());\n */\nvar _easeSineOutObj = {\n easing: function(dt){\n return (dt===0 || dt===1) ? dt : Math.sin(dt * Math.PI / 2);\n },\n reverse: function(){\n return _easeSineInObj;\n }\n};\ncc.easeSineOut = function(){\n return _easeSineOutObj;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Reference easeInOutSine:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeSineInOut 缓动对象。
\n * EaseSineIn 是按正弦函数缓动进入并退出的动作。
\n * 参考 easeInOutSine:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeSineInOut\n * @return {Object}\n * @example\n * action.easing(cc.easeSineInOut());\n */\nvar _easeSineInOutObj = {\n easing: function(dt){\n return (dt === 0 || dt === 1) ? dt : -0.5 * (Math.cos(Math.PI * dt) - 1);\n },\n reverse: function(){\n return _easeSineInOutObj;\n }\n};\ncc.easeSineInOut = function(){\n return _easeSineInOutObj;\n};\n\n/**\n * @module cc\n */\n\n/**\n * !#en\n * Creates the action easing object with the period in radians (default is 0.3).
\n * Reference easeInElastic:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeElasticIn 缓动对象。
\n * EaseElasticIn 是按弹性曲线缓动进入的动作。
\n * 参数 easeInElastic:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeElasticIn\n * @param {Number} period\n * @return {Object}\n * @example\n * // example\n * action.easing(cc.easeElasticIn(3.0));\n */\n//default ease elastic in object (period = 0.3)\nvar _easeElasticInObj = {\n easing:function(dt){\n if (dt === 0 || dt === 1)\n return dt;\n dt = dt - 1;\n return -Math.pow(2, 10 * dt) * Math.sin((dt - (0.3 / 4)) * Math.PI * 2 / 0.3);\n },\n reverse:function(){\n return _easeElasticOutObj;\n }\n };\ncc.easeElasticIn = function (period) {\n if(period && period !== 0.3){\n return {\n _period: period,\n easing: function (dt) {\n if (dt === 0 || dt === 1)\n return dt;\n dt = dt - 1;\n return -Math.pow(2, 10 * dt) * Math.sin((dt - (this._period / 4)) * Math.PI * 2 / this._period);\n },\n reverse:function () {\n return cc.easeElasticOut(this._period);\n }\n };\n }\n return _easeElasticInObj;\n};\n\n/**\n * !#en\n * Creates the action easing object with the period in radians (default is 0.3).
\n * Reference easeOutElastic:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeElasticOut 缓动对象。
\n * EaseElasticOut 是按弹性曲线缓动退出的动作。
\n * 参考 easeOutElastic:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeElasticOut\n * @param {Number} period\n * @return {Object}\n * @example\n * // example\n * action.easing(cc.easeElasticOut(3.0));\n */\n//default ease elastic out object (period = 0.3)\nvar _easeElasticOutObj = {\n easing: function (dt) {\n return (dt === 0 || dt === 1) ? dt : Math.pow(2, -10 * dt) * Math.sin((dt - (0.3 / 4)) * Math.PI * 2 / 0.3) + 1;\n },\n reverse:function(){\n return _easeElasticInObj;\n }\n};\ncc.easeElasticOut = function (period) {\n if(period && period !== 0.3){\n return {\n _period: period,\n easing: function (dt) {\n return (dt === 0 || dt === 1) ? dt : Math.pow(2, -10 * dt) * Math.sin((dt - (this._period / 4)) * Math.PI * 2 / this._period) + 1;\n },\n reverse:function(){\n return cc.easeElasticIn(this._period);\n }\n };\n }\n return _easeElasticOutObj;\n};\n\n/**\n * !#en\n * Creates the action easing object with the period in radians (default is 0.3).
\n * Reference easeInOutElastic:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeElasticInOut 缓动对象。
\n * EaseElasticInOut 是按弹性曲线缓动进入并退出的动作。
\n * 参考 easeInOutElastic:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeElasticInOut\n * @param {Number} period\n * @return {Object}\n * @example\n * // example\n * action.easing(cc.easeElasticInOut(3.0));\n */\ncc.easeElasticInOut = function (period) {\n period = period || 0.3;\n return {\n _period: period,\n easing: function (dt) {\n var newT = 0;\n var locPeriod = this._period;\n if (dt === 0 || dt === 1) {\n newT = dt;\n } else {\n dt = dt * 2;\n if (!locPeriod)\n locPeriod = this._period = 0.3 * 1.5;\n var s = locPeriod / 4;\n dt = dt - 1;\n if (dt < 0)\n newT = -0.5 * Math.pow(2, 10 * dt) * Math.sin((dt - s) * Math.PI * 2 / locPeriod);\n else\n newT = Math.pow(2, -10 * dt) * Math.sin((dt - s) * Math.PI * 2 / locPeriod) * 0.5 + 1;\n }\n return newT;\n },\n reverse: function(){\n return cc.easeElasticInOut(this._period);\n }\n };\n};\n\n/**\n * @module cc\n */\n\nfunction _bounceTime (time1) {\n if (time1 < 1 / 2.75) {\n return 7.5625 * time1 * time1;\n } else if (time1 < 2 / 2.75) {\n time1 -= 1.5 / 2.75;\n return 7.5625 * time1 * time1 + 0.75;\n } else if (time1 < 2.5 / 2.75) {\n time1 -= 2.25 / 2.75;\n return 7.5625 * time1 * time1 + 0.9375;\n }\n\n time1 -= 2.625 / 2.75;\n return 7.5625 * time1 * time1 + 0.984375;\n};\n\nvar _easeBounceInObj = {\n easing: function(dt){\n return 1 - _bounceTime(1 - dt);\n },\n reverse: function(){\n return _easeBounceOutObj;\n }\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Eased bounce effect at the beginning.\n * !#zh\n * 创建 easeBounceIn 缓动对象。
\n * EaseBounceIn 是按弹跳动作缓动进入的动作。\n * @method easeBounceIn\n * @return {Object}\n * @example\n * // example\n * action.easing(cc.easeBounceIn());\n */\ncc.easeBounceIn = function(){\n return _easeBounceInObj;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Eased bounce effect at the ending.\n * !#zh\n * 创建 easeBounceOut 缓动对象。
\n * EaseBounceOut 是按弹跳动作缓动退出的动作。\n * @method easeBounceOut\n * @return {Object}\n * @example\n * // example\n * action.easing(cc.easeBounceOut());\n */\nvar _easeBounceOutObj = {\n easing: function(dt){\n return _bounceTime(dt);\n },\n reverse:function () {\n return _easeBounceInObj;\n }\n};\ncc.easeBounceOut = function(){\n return _easeBounceOutObj;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Eased bounce effect at the begining and ending.\n * !#zh\n * 创建 easeBounceInOut 缓动对象。
\n * EaseBounceInOut 是按弹跳动作缓动进入并退出的动作。\n * @method easeBounceInOut\n * @return {Object}\n * @example\n * // example\n * action.easing(cc.easeBounceInOut());\n */\nvar _easeBounceInOutObj = {\n easing: function (time1) {\n var newT;\n if (time1 < 0.5) {\n time1 = time1 * 2;\n newT = (1 - _bounceTime(1 - time1)) * 0.5;\n } else {\n newT = _bounceTime(time1 * 2 - 1) * 0.5 + 0.5;\n }\n return newT;\n },\n reverse: function(){\n return _easeBounceInOutObj;\n }\n};\ncc.easeBounceInOut = function(){\n return _easeBounceInOutObj;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * In the opposite direction to move slowly, and then accelerated to the right direction.\n * !#zh\n * 创建 easeBackIn 缓动对象。
\n * easeBackIn 是在相反的方向缓慢移动,然后加速到正确的方向。
\n * @method easeBackIn\n * @return {Object}\n * @example\n * // example\n * action.easing(cc.easeBackIn());\n */\nvar _easeBackInObj = {\n easing: function (time1) {\n var overshoot = 1.70158;\n return (time1===0 || time1===1) ? time1 : time1 * time1 * ((overshoot + 1) * time1 - overshoot);\n },\n reverse: function(){\n return _easeBackOutObj;\n }\n};\ncc.easeBackIn = function(){\n return _easeBackInObj;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Fast moving more than the finish, and then slowly back to the finish.\n * !#zh\n * 创建 easeBackOut 缓动对象。
\n * easeBackOut 快速移动超出目标,然后慢慢回到目标点。\n * @method easeBackOut\n * @return {Object}\n * @example\n * // example\n * action.easing(cc.easeBackOut());\n */\nvar _easeBackOutObj = {\n easing: function (time1) {\n if (time1 === 0) {\n return 0;\n }\n var overshoot = 1.70158;\n time1 = time1 - 1;\n return time1 * time1 * ((overshoot + 1) * time1 + overshoot) + 1;\n },\n reverse: function(){\n return _easeBackInObj;\n }\n};\ncc.easeBackOut = function(){\n return _easeBackOutObj;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Begining of cc.EaseBackIn. Ending of cc.EaseBackOut.\n * !#zh\n * 创建 easeBackInOut 缓动对象。
\n * @method easeBackInOut\n * @return {Object}\n * @example\n * // example\n * action.easing(cc.easeBackInOut());\n */\nvar _easeBackInOutObj = {\n easing: function (time1) {\n var overshoot = 1.70158 * 1.525;\n time1 = time1 * 2;\n if (time1 < 1) {\n return (time1 * time1 * ((overshoot + 1) * time1 - overshoot)) / 2;\n } else {\n time1 = time1 - 2;\n return (time1 * time1 * ((overshoot + 1) * time1 + overshoot)) / 2 + 1;\n }\n },\n reverse: function(){\n return _easeBackInOutObj;\n }\n};\ncc.easeBackInOut = function(){\n return _easeBackInOutObj;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Into the 4 reference point.
\n * To calculate the motion curve.\n * !#zh\n * 创建 easeBezierAction 缓动对象。
\n * EaseBezierAction 是按贝塞尔曲线缓动的动作。\n * @method easeBezierAction\n * @param {Number} p0 The first bezier parameter\n * @param {Number} p1 The second bezier parameter\n * @param {Number} p2 The third bezier parameter\n * @param {Number} p3 The fourth bezier parameter\n * @returns {Object}\n * @example\n * // example\n * action.easing(cc.easeBezierAction(0.5, 0.5, 1.0, 1.0));\n */\ncc.easeBezierAction = function(a, b, c, d){\n return {\n easing: function(t){\n return (Math.pow(1-t,3) * a + 3*t*(Math.pow(1-t,2))*b + 3*Math.pow(t,2)*(1-t)*c + Math.pow(t,3)*d);\n },\n reverse: function(){\n return cc.easeBezierAction(d, c, b, a);\n }\n };\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Reference easeInQuad:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeQuadraticActionIn 缓动对象。
\n * EaseQuadraticIn是按二次函数缓动进入的动作。
\n * 参考 easeInQuad:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeQuadraticActionIn\n * @returns {Object}\n * @example\n * //example\n * action.easing(cc.easeQuadraticActionIn());\n */\nvar _easeQuadraticActionIn = {\n easing: function(time){\n return Math.pow(time, 2);\n },\n reverse: function(){\n return _easeQuadraticActionIn;\n }\n};\ncc.easeQuadraticActionIn = function(){\n return _easeQuadraticActionIn;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Reference easeOutQuad:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeQuadraticActionOut 缓动对象。
\n * EaseQuadraticOut 是按二次函数缓动退出的动作。
\n * 参考 easeOutQuad:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeQuadraticActionOut\n * @returns {Object}\n * @example\n * //example\n * action.easing(cc.easeQuadraticActionOut());\n */\nvar _easeQuadraticActionOut = {\n easing: function(time){\n return -time*(time-2);\n },\n reverse: function(){\n return _easeQuadraticActionOut;\n }\n};\ncc.easeQuadraticActionOut = function(){\n return _easeQuadraticActionOut;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Reference easeInOutQuad:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeQuadraticActionInOut 缓动对象。
\n * EaseQuadraticInOut 是按二次函数缓动进入并退出的动作。
\n * 参考 easeInOutQuad:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeQuadraticActionInOut\n * @returns {Object}\n * @example\n * //example\n * action.easing(cc.easeQuadraticActionInOut());\n */\nvar _easeQuadraticActionInOut = {\n easing: function(time){\n var resultTime = time;\n time *= 2;\n if(time < 1){\n resultTime = time * time * 0.5;\n }else{\n --time;\n resultTime = -0.5 * ( time * ( time - 2 ) - 1)\n }\n return resultTime;\n },\n reverse: function(){\n return _easeQuadraticActionInOut;\n }\n};\ncc.easeQuadraticActionInOut = function(){\n return _easeQuadraticActionInOut;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Reference easeIntQuart:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeQuarticActionIn 缓动对象。
\n * EaseQuarticIn 是按四次函数缓动进入的动作。
\n * 参考 easeIntQuart:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeQuarticActionIn\n * @returns {Object}\n * @example\n * //example\n * action.easing(cc.easeQuarticActionIn());\n */\nvar _easeQuarticActionIn = {\n easing: function(time){\n return time * time * time * time;\n },\n reverse: function(){\n return _easeQuarticActionIn;\n }\n};\ncc.easeQuarticActionIn = function(){\n return _easeQuarticActionIn;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Reference easeOutQuart:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeQuarticActionOut 缓动对象。
\n * EaseQuarticOut 是按四次函数缓动退出的动作。
\n * 参考 easeOutQuart:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeQuarticActionOut\n * @returns {Object}\n * @example\n * //example\n * action.easing(cc.QuarticActionOut());\n */\nvar _easeQuarticActionOut = {\n easing: function(time){\n time -= 1;\n return -(time * time * time * time - 1);\n },\n reverse: function(){\n return _easeQuarticActionOut;\n }\n};\ncc.easeQuarticActionOut = function(){\n return _easeQuarticActionOut;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Reference easeInOutQuart:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeQuarticActionInOut 缓动对象。
\n * EaseQuarticInOut 是按四次函数缓动进入并退出的动作。
\n * 参考 easeInOutQuart:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeQuarticActionInOut\n * @returns {Object}\n */\nvar _easeQuarticActionInOut = {\n easing: function(time){\n time = time*2;\n if (time < 1)\n return 0.5 * time * time * time * time;\n time -= 2;\n return -0.5 * (time * time * time * time - 2);\n },\n reverse: function(){\n return _easeQuarticActionInOut;\n }\n};\ncc.easeQuarticActionInOut = function(){\n return _easeQuarticActionInOut;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Reference easeInQuint:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeQuinticActionIn 缓动对象。
\n * EaseQuinticIn 是按五次函数缓动进的动作。
\n * 参考 easeInQuint:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeQuinticActionIn\n * @returns {Object}\n * @example\n * //example\n * action.easing(cc.easeQuinticActionIn());\n */\nvar _easeQuinticActionIn = {\n easing: function(time){\n return time * time * time * time * time;\n },\n reverse: function(){\n return _easeQuinticActionIn;\n }\n};\ncc.easeQuinticActionIn = function(){\n return _easeQuinticActionIn;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Reference easeOutQuint:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeQuinticActionOut 缓动对象。
\n * EaseQuinticOut 是按五次函数缓动退出的动作\n * 参考 easeOutQuint:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeQuinticActionOut\n * @returns {Object}\n * @example\n * //example\n * action.easing(cc.easeQuadraticActionOut());\n */\nvar _easeQuinticActionOut = {\n easing: function(time){\n time -=1;\n return (time * time * time * time * time + 1);\n },\n reverse: function(){\n return _easeQuinticActionOut;\n }\n};\ncc.easeQuinticActionOut = function(){\n return _easeQuinticActionOut;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Reference easeInOutQuint:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeQuinticActionInOut 缓动对象。
\n * EaseQuinticInOut是按五次函数缓动进入并退出的动作。
\n * 参考 easeInOutQuint:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeQuinticActionInOut\n * @returns {Object}\n * @example\n * //example\n * action.easing(cc.easeQuinticActionInOut());\n */\nvar _easeQuinticActionInOut = {\n easing: function(time){\n time = time*2;\n if (time < 1)\n return 0.5 * time * time * time * time * time;\n time -= 2;\n return 0.5 * (time * time * time * time * time + 2);\n },\n reverse: function(){\n return _easeQuinticActionInOut;\n }\n};\ncc.easeQuinticActionInOut = function(){\n return _easeQuinticActionInOut;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Reference easeInCirc:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeCircleActionIn 缓动对象。
\n * EaseCircleIn是按圆形曲线缓动进入的动作。
\n * 参考 easeInCirc:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeCircleActionIn\n * @returns {Object}\n * @example\n * //example\n * action.easing(cc.easeCircleActionIn());\n */\nvar _easeCircleActionIn = {\n easing: function(time){\n return -1 * (Math.sqrt(1 - time * time) - 1);\n },\n reverse: function(){\n return _easeCircleActionIn;\n }\n};\ncc.easeCircleActionIn = function(){\n return _easeCircleActionIn;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Reference easeOutCirc:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeCircleActionOut 缓动对象。
\n * EaseCircleOut是按圆形曲线缓动退出的动作。
\n * 参考 easeOutCirc:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeCircleActionOut\n * @returns {Object}\n * @example\n * //example\n * actioneasing(cc.easeCircleActionOut());\n */\nvar _easeCircleActionOut = {\n easing: function(time){\n time = time - 1;\n return Math.sqrt(1 - time * time);\n },\n reverse: function(){\n return _easeCircleActionOut;\n }\n};\ncc.easeCircleActionOut = function(){\n return _easeCircleActionOut;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Reference easeInOutCirc:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeCircleActionInOut 缓动对象。
\n * EaseCircleInOut 是按圆形曲线缓动进入并退出的动作。
\n * 参考 easeInOutCirc:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeCircleActionInOut\n * @returns {Object}\n * @example\n * //example\n * action.easing(cc.easeCircleActionInOut());\n */\nvar _easeCircleActionInOut = {\n easing: function(time){\n time = time * 2;\n if (time < 1)\n return -0.5 * (Math.sqrt(1 - time * time) - 1);\n time -= 2;\n return 0.5 * (Math.sqrt(1 - time * time) + 1);\n },\n reverse: function(){\n return _easeCircleActionInOut;\n }\n};\ncc.easeCircleActionInOut = function(){\n return _easeCircleActionInOut;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Reference easeInCubic:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeCubicActionIn 缓动对象。
\n * EaseCubicIn 是按三次函数缓动进入的动作。
\n * 参考 easeInCubic:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeCubicActionIn\n * @returns {Object}\n * @example\n * //example\n * action.easing(cc.easeCubicActionIn());\n */\nvar _easeCubicActionIn = {\n easing: function(time){\n return time * time * time;\n },\n reverse: function(){\n return _easeCubicActionIn;\n }\n};\ncc.easeCubicActionIn = function(){\n return _easeCubicActionIn;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Reference easeOutCubic:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeCubicActionOut 缓动对象。
\n * EaseCubicOut 是按三次函数缓动退出的动作。
\n * 参考 easeOutCubic:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeCubicActionOut\n * @returns {Object}\n * @example\n * //example\n * action.easing(cc.easeCubicActionOut());\n */\nvar _easeCubicActionOut = {\n easing: function(time){\n time -= 1;\n return (time * time * time + 1);\n },\n reverse: function(){\n return _easeCubicActionOut;\n }\n};\ncc.easeCubicActionOut = function(){\n return _easeCubicActionOut;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Reference easeInOutCubic:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeCubicActionInOut 缓动对象。
\n * EaseCubicInOut是按三次函数缓动进入并退出的动作。
\n * 参考 easeInOutCubic:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeCubicActionInOut\n * @returns {Object}\n */\nvar _easeCubicActionInOut = {\n easing: function(time){\n time = time*2;\n if (time < 1)\n return 0.5 * time * time * time;\n time -= 2;\n return 0.5 * (time * time * time + 2);\n },\n reverse: function(){\n return _easeCubicActionInOut;\n }\n};\ncc.easeCubicActionInOut = function(){\n return _easeCubicActionInOut;\n};\n\n","/****************************************************************************\n Copyright (c) 2008-2010 Ricardo Quesada\n Copyright (c) 2011-2012 cocos2d-x.org\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos2d-x.org\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * @module cc\n */\n\n/**\n * !#en Instant actions are immediate actions. They don't have a duration like the ActionInterval actions.\n * !#zh 即时动作,这种动作立即就会执行,继承自 FiniteTimeAction。\n * @class ActionInstant\n * @extends FiniteTimeAction\n */\ncc.ActionInstant = cc.Class({\n name: 'cc.ActionInstant',\n extends: cc.FiniteTimeAction,\n isDone:function () {\n return true;\n },\n\n step:function (dt) {\n this.update(1);\n },\n\n update:function (dt) {\n //nothing\n },\n\n /**\n * returns a reversed action.
\n * For example:
\n * - The action is x coordinates of 0 move to 100.
\n * - The reversed action will be x of 100 move to 0.\n * @returns {Action}\n */\n reverse:function(){\n return this.clone();\n },\n\n clone:function(){\n return new cc.ActionInstant();\n }\n});\n\n/**\n * @module cc\n */\n\n/*\n * Show the node.\n * @class Show\n * @extends ActionInstant\n */\ncc.Show = cc.Class({\n name: 'cc.Show',\n extends: cc.ActionInstant,\n\n update:function (dt) {\n var _renderComps = this.target.getComponentsInChildren(cc.RenderComponent);\n for (var i = 0; i < _renderComps.length; ++i) {\n var render = _renderComps[i];\n render.enabled = true;\n }\n },\n\n reverse:function () {\n return new cc.Hide();\n },\n\n clone:function(){\n return new cc.Show();\n }\n});\n\n/**\n * !#en Show the Node.\n * !#zh 立即显示。\n * @method show\n * @return {ActionInstant}\n * @example\n * // example\n * var showAction = cc.show();\n */\ncc.show = function () {\n return new cc.Show();\n};\n\n/*\n * Hide the node.\n * @class Hide\n * @extends ActionInstant\n */\ncc.Hide = cc.Class({\n name: 'cc.Hide',\n extends: cc.ActionInstant,\n\n update:function (dt) {\n var _renderComps = this.target.getComponentsInChildren(cc.RenderComponent);\n for (var i = 0; i < _renderComps.length; ++i) {\n var render = _renderComps[i];\n render.enabled = false;\n }\n },\n\n reverse:function () {\n return new cc.Show();\n },\n\n clone:function(){\n return new cc.Hide();\n }\n});\n\n/**\n * !#en Hide the node.\n * !#zh 立即隐藏。\n * @method hide\n * @return {ActionInstant}\n * @example\n * // example\n * var hideAction = cc.hide();\n */\ncc.hide = function () {\n return new cc.Hide();\n};\n\n/*\n * Toggles the visibility of a node.\n * @class ToggleVisibility\n * @extends ActionInstant\n */\ncc.ToggleVisibility = cc.Class({\n name: 'cc.ToggleVisibility',\n extends: cc.ActionInstant,\n\n update:function (dt) {\n var _renderComps = this.target.getComponentsInChildren(cc.RenderComponent);\n for (var i = 0; i < _renderComps.length; ++i) {\n var render = _renderComps[i];\n render.enabled = !render.enabled;\n }\n },\n\n reverse:function () {\n return new cc.ToggleVisibility();\n },\n\n clone:function(){\n return new cc.ToggleVisibility();\n }\n});\n\n/**\n * !#en Toggles the visibility of a node.\n * !#zh 显隐状态切换。\n * @method toggleVisibility\n * @return {ActionInstant}\n * @example\n * // example\n * var toggleVisibilityAction = cc.toggleVisibility();\n */\ncc.toggleVisibility = function () {\n return new cc.ToggleVisibility();\n};\n\n/*\n * Delete self in the next frame.\n * @class RemoveSelf\n * @extends ActionInstant\n * @param {Boolean} [isNeedCleanUp=true]\n *\n * @example\n * // example\n * var removeSelfAction = new cc.RemoveSelf(false);\n */\ncc.RemoveSelf = cc.Class({\n name: 'cc.RemoveSelf',\n extends: cc.ActionInstant,\n\n ctor:function(isNeedCleanUp){\n this._isNeedCleanUp = true;\n\t isNeedCleanUp !== undefined && this.init(isNeedCleanUp);\n },\n\n update:function(dt){\n this.target.removeFromParent(this._isNeedCleanUp);\n },\n\n init:function(isNeedCleanUp){\n this._isNeedCleanUp = isNeedCleanUp;\n return true;\n },\n\n reverse:function(){\n return new cc.RemoveSelf(this._isNeedCleanUp);\n },\n\n clone:function(){\n return new cc.RemoveSelf(this._isNeedCleanUp);\n }\n});\n\n/**\n * !#en Create a RemoveSelf object with a flag indicate whether the target should be cleaned up while removing.\n * !#zh 从父节点移除自身。\n * @method removeSelf\n * @param {Boolean} [isNeedCleanUp = true]\n * @return {ActionInstant}\n *\n * @example\n * // example\n * var removeSelfAction = cc.removeSelf();\n */\ncc.removeSelf = function(isNeedCleanUp){\n return new cc.RemoveSelf(isNeedCleanUp);\n};\n\n/*\n * Create an action to destroy self.\n * @class DestroySelf\n * @extends ActionInstant\n *\n * @example\n * var destroySelfAction = new cc.DestroySelf();\n */\ncc.DestroySelf = cc.Class({\n name: 'cc.DestroySelf',\n extends: cc.ActionInstant,\n\n update () {\n this.target.destroy();\n },\n\n reverse () {\n return new cc.DestroySelf();\n },\n\n clone () {\n return new cc.DestroySelf();\n }\n});\n\n/**\n * !#en Destroy self\n * !#zh 创建一个销毁自身的动作。\n * @method destroySelf\n * @return {ActionInstant}\n *\n * @example\n * var destroySelfAction = cc.destroySelf();\n */\ncc.destroySelf = function () {\n return new cc.DestroySelf();\n};\n\n/*\n * Flips the sprite horizontally.\n * @class FlipX\n * @extends ActionInstant\n * @param {Boolean} flip Indicate whether the target should be flipped or not\n *\n * @example\n * var flipXAction = new cc.FlipX(true);\n */\ncc.FlipX = cc.Class({\n name: 'cc.FlipX',\n extends: cc.ActionInstant,\n\n ctor:function(flip){\n this._flippedX = false;\n\t\tflip !== undefined && this.initWithFlipX(flip);\n },\n\n /*\n * initializes the action with a set flipX.\n * @param {Boolean} flip\n * @return {Boolean}\n */\n initWithFlipX:function (flip) {\n this._flippedX = flip;\n return true;\n },\n\n update:function (dt) {\n this.target.scaleX = Math.abs(this.target.scaleX) * (this._flippedX ? -1 : 1);\n },\n\n reverse:function () {\n return new cc.FlipX(!this._flippedX);\n },\n\n clone:function(){\n var action = new cc.FlipX();\n action.initWithFlipX(this._flippedX);\n return action;\n }\n});\n\n/**\n * !#en Create a FlipX action to flip or unflip the target.\n * !#zh X轴翻转。\n * @method flipX\n * @param {Boolean} flip Indicate whether the target should be flipped or not\n * @return {ActionInstant}\n * @example\n * var flipXAction = cc.flipX(true);\n */\ncc.flipX = function (flip) {\n return new cc.FlipX(flip);\n};\n\n/*\n * Flips the sprite vertically\n * @class FlipY\n * @extends ActionInstant\n * @param {Boolean} flip\n * @example\n * var flipYAction = new cc.FlipY(true);\n */\ncc.FlipY = cc.Class({\n name: 'cc.FlipY',\n extends: cc.ActionInstant,\n\n ctor: function(flip){\n this._flippedY = false;\n\t\tflip !== undefined && this.initWithFlipY(flip);\n },\n\n /*\n * initializes the action with a set flipY.\n * @param {Boolean} flip\n * @return {Boolean}\n */\n initWithFlipY:function (flip) {\n this._flippedY = flip;\n return true;\n },\n\n update:function (dt) {\n this.target.scaleY = Math.abs(this.target.scaleY) * (this._flippedY ? -1 : 1);\n },\n\n reverse:function () {\n return new cc.FlipY(!this._flippedY);\n },\n\n clone:function(){\n var action = new cc.FlipY();\n action.initWithFlipY(this._flippedY);\n return action;\n }\n});\n\n/**\n * !#en Create a FlipY action to flip or unflip the target.\n * !#zh Y轴翻转。\n * @method flipY\n * @param {Boolean} flip\n * @return {ActionInstant}\n * @example\n * var flipYAction = cc.flipY(true);\n */\ncc.flipY = function (flip) {\n return new cc.FlipY(flip);\n};\n\n/*\n * Places the node in a certain position\n * @class Place\n * @extends ActionInstant\n * @param {Vec2|Number} pos\n * @param {Number} [y]\n * @example\n * var placeAction = new cc.Place(cc.v2(200, 200));\n * var placeAction = new cc.Place(200, 200);\n */\ncc.Place = cc.Class({\n name: 'cc.Place',\n extends: cc.ActionInstant,\n\n ctor:function(pos, y){\n this._x = 0;\n\t this._y = 0;\n\n\t\tif (pos !== undefined) {\n\t\t\tif (pos.x !== undefined) {\n\t\t\t\ty = pos.y;\n\t\t\t\tpos = pos.x;\n\t\t\t}\n\t\t\tthis.initWithPosition(pos, y);\n\t\t}\n },\n\n /*\n * Initializes a Place action with a position\n * @param {number} x\n * @param {number} y\n * @return {Boolean}\n */\n initWithPosition: function (x, y) {\n this._x = x;\n this._y = y;\n return true;\n },\n\n update:function (dt) {\n this.target.setPosition(this._x, this._y);\n },\n\n clone:function(){\n var action = new cc.Place();\n action.initWithPosition(this._x, this._y);\n return action;\n }\n});\n\n/**\n * !#en Creates a Place action with a position.\n * !#zh 放置在目标位置。\n * @method place\n * @param {Vec2|Number} pos\n * @param {Number} [y]\n * @return {ActionInstant}\n * @example\n * // example\n * var placeAction = cc.place(cc.v2(200, 200));\n * var placeAction = cc.place(200, 200);\n */\ncc.place = function (pos, y) {\n return new cc.Place(pos, y);\n};\n\n\n/*\n * Calls a 'callback'.\n * @class CallFunc\n * @extends ActionInstant\n * @param {function} selector\n * @param {object} [selectorTarget=null]\n * @param {*} [data=null] data for function, it accepts all data types.\n * @example\n * // example\n * // CallFunc without data\n * var finish = new cc.CallFunc(this.removeSprite, this);\n *\n * // CallFunc with data\n * var finish = new cc.CallFunc(this.removeFromParentAndCleanup, this, true);\n */\ncc.CallFunc = cc.Class({\n name: 'cc.CallFunc',\n extends: cc.ActionInstant,\n\n /*\n * Constructor function, override it to extend the construction behavior, remember to call \"this._super()\" in the extended \"ctor\" function.
\n\t * Creates a CallFunc action with the callback.\n\t * @param {function} selector\n\t * @param {object} [selectorTarget=null]\n\t * @param {*} [data=null] data for function, it accepts all data types.\n\t */\n ctor:function(selector, selectorTarget, data){\n this._selectorTarget = null;\n this._function = null;\n this._data = null;\n this.initWithFunction(selector, selectorTarget, data);\n },\n\n /*\n * Initializes the action with a function or function and its target\n * @param {function} selector\n * @param {object|Null} selectorTarget\n * @param {*|Null} [data] data for function, it accepts all data types.\n * @return {Boolean}\n */\n initWithFunction:function (selector, selectorTarget, data) {\n if (selector) {\n this._function = selector;\n }\n if (selectorTarget) {\n this._selectorTarget = selectorTarget;\n }\n if (data !== undefined) {\n this._data = data;\n }\n return true;\n },\n\n /*\n * execute the function.\n */\n execute:function () {\n if (this._function) {\n this._function.call(this._selectorTarget, this.target, this._data);\n }\n },\n\n update:function (dt) {\n this.execute();\n },\n\n /*\n * Get selectorTarget.\n * @return {object}\n */\n getTargetCallback:function () {\n return this._selectorTarget;\n },\n\n /*\n * Set selectorTarget.\n * @param {object} sel\n */\n setTargetCallback:function (sel) {\n if (sel !== this._selectorTarget) {\n if (this._selectorTarget)\n this._selectorTarget = null;\n this._selectorTarget = sel;\n }\n },\n\n clone:function(){\n var action = new cc.CallFunc();\n action.initWithFunction(this._function, this._selectorTarget, this._data);\n return action;\n }\n});\n\n/**\n * !#en Creates the action with the callback.\n * !#zh 执行回调函数。\n * @method callFunc\n * @param {function} selector\n * @param {object} [selectorTarget=null]\n * @param {*} [data=null] - data for function, it accepts all data types.\n * @return {ActionInstant}\n * @example\n * // example\n * // CallFunc without data\n * var finish = cc.callFunc(this.removeSprite, this);\n *\n * // CallFunc with data\n * var finish = cc.callFunc(this.removeFromParentAndCleanup, this._grossini, true);\n */\ncc.callFunc = function (selector, selectorTarget, data) {\n return new cc.CallFunc(selector, selectorTarget, data);\n};\n","/****************************************************************************\n Copyright (c) 2008-2010 Ricardo Quesada\n Copyright (c) 2011-2012 cocos2d-x.org\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos2d-x.org\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n\n/**\n * @module cc\n */\n\n/**\n * !#en\n *

An interval action is an action that takes place within a certain period of time.
\n * It has an start time, and a finish time. The finish time is the parameter
\n * duration plus the start time.

\n *\n *

These CCActionInterval actions have some interesting properties, like:
\n * - They can run normally (default)
\n * - They can run reversed with the reverse method
\n * - They can run with the time altered with the Accelerate, AccelDeccel and Speed actions.

\n *\n *

For example, you can simulate a Ping Pong effect running the action normally and
\n * then running it again in Reverse mode.

\n * !#zh 时间间隔动作,这种动作在已定时间内完成,继承 FiniteTimeAction。\n * @class ActionInterval\n * @extends FiniteTimeAction\n * @param {Number} d duration in seconds\n */\ncc.ActionInterval = cc.Class({\n name: 'cc.ActionInterval',\n extends: cc.FiniteTimeAction,\n\n ctor:function (d) {\n this.MAX_VALUE = 2;\n this._elapsed = 0;\n this._firstTick = false;\n this._easeList = null;\n this._speed = 1;\n this._timesForRepeat = 1;\n this._repeatForever = false;\n this._repeatMethod = false;//Compatible with repeat class, Discard after can be deleted\n this._speedMethod = false;//Compatible with repeat class, Discard after can be deleted\n d !== undefined && cc.ActionInterval.prototype.initWithDuration.call(this, d);\n },\n\n /*\n * How many seconds had elapsed since the actions started to run.\n * @return {Number}\n */\n getElapsed:function () {\n return this._elapsed;\n },\n\n /*\n * Initializes the action.\n * @param {Number} d duration in seconds\n * @return {Boolean}\n */\n initWithDuration:function (d) {\n this._duration = (d === 0) ? cc.macro.FLT_EPSILON : d;\n // prevent division by 0\n // This comparison could be in step:, but it might decrease the performance\n // by 3% in heavy based action games.\n this._elapsed = 0;\n this._firstTick = true;\n return true;\n },\n\n isDone:function () {\n return (this._elapsed >= this._duration);\n },\n\n _cloneDecoration: function(action){\n action._repeatForever = this._repeatForever;\n action._speed = this._speed;\n action._timesForRepeat = this._timesForRepeat;\n action._easeList = this._easeList;\n action._speedMethod = this._speedMethod;\n action._repeatMethod = this._repeatMethod;\n },\n\n _reverseEaseList: function(action){\n if(this._easeList){\n action._easeList = [];\n for(var i=0; i (this._elapsed / this._duration)) ? this._elapsed / this._duration : 1);\n //this.update(Math.max(0, Math.min(1, this._elapsed / Math.max(this._duration, cc.macro.FLT_EPSILON))));\n var t = this._elapsed / (this._duration > 0.0000001192092896 ? this._duration : 0.0000001192092896);\n t = (1 > t ? t : 1);\n this.update(t > 0 ? t : 0);\n\n //Compatible with repeat class, Discard after can be deleted (this._repeatMethod)\n if(this._repeatMethod && this._timesForRepeat > 1 && this.isDone()){\n if(!this._repeatForever){\n this._timesForRepeat--;\n }\n //var diff = locInnerAction.getElapsed() - locInnerAction._duration;\n this.startWithTarget(this.target);\n // to prevent jerk. issue #390 ,1247\n //this._innerAction.step(0);\n //this._innerAction.step(diff);\n this.step(this._elapsed - this._duration);\n\n }\n },\n\n startWithTarget:function (target) {\n cc.Action.prototype.startWithTarget.call(this, target);\n this._elapsed = 0;\n this._firstTick = true;\n },\n\n reverse:function () {\n cc.logID(1010);\n return null;\n },\n\n /*\n * Set amplitude rate.\n * @warning It should be overridden in subclass.\n * @param {Number} amp\n */\n setAmplitudeRate:function (amp) {\n // Abstract class needs implementation\n cc.logID(1011);\n },\n\n /*\n * Get amplitude rate.\n * @warning It should be overridden in subclass.\n * @return {Number} 0\n */\n getAmplitudeRate:function () {\n // Abstract class needs implementation\n cc.logID(1012);\n return 0;\n },\n\n /**\n * !#en\n * Changes the speed of an action, making it take longer (speed>1)\n * or less (speed<1) time.
\n * Useful to simulate 'slow motion' or 'fast forward' effect.\n * !#zh\n * 改变一个动作的速度,使它的执行使用更长的时间(speed > 1)
\n * 或更少(speed < 1)可以有效得模拟“慢动作”或“快进”的效果。\n * @param {Number} speed\n * @returns {Action}\n */\n speed: function(speed){\n if(speed <= 0){\n cc.logID(1013);\n return this;\n }\n\n this._speedMethod = true;//Compatible with repeat class, Discard after can be deleted\n this._speed *= speed;\n return this;\n },\n\n /**\n * Get this action speed.\n * @return {Number}\n */\n getSpeed: function(){\n return this._speed;\n },\n\n /**\n * Set this action speed.\n * @param {Number} speed\n * @returns {ActionInterval}\n */\n setSpeed: function(speed){\n this._speed = speed;\n return this;\n },\n\n /**\n * !#en\n * Repeats an action a number of times.\n * To repeat an action forever use the CCRepeatForever action.\n * !#zh 重复动作可以按一定次数重复一个动作,使用 RepeatForever 动作来永远重复一个动作。\n * @method repeat\n * @param {Number} times\n * @returns {ActionInterval}\n */\n repeat: function(times){\n times = Math.round(times);\n if(isNaN(times) || times < 1){\n cc.logID(1014);\n return this;\n }\n this._repeatMethod = true;//Compatible with repeat class, Discard after can be deleted\n this._timesForRepeat *= times;\n return this;\n },\n\n /**\n * !#en\n * Repeats an action for ever.
\n * To repeat the an action for a limited number of times use the Repeat action.
\n * !#zh 永远地重复一个动作,有限次数内重复一个动作请使用 Repeat 动作。\n * @method repeatForever\n * @returns {ActionInterval}\n */\n repeatForever: function(){\n this._repeatMethod = true;//Compatible with repeat class, Discard after can be deleted\n this._timesForRepeat = this.MAX_VALUE;\n this._repeatForever = true;\n return this;\n }\n});\n\ncc.actionInterval = function (d) {\n return new cc.ActionInterval(d);\n};\n\n/**\n * @module cc\n */\n\n/*\n * Runs actions sequentially, one after another.\n * @class Sequence\n * @extends ActionInterval\n * @param {Array|FiniteTimeAction} tempArray\n * @example\n * // create sequence with actions\n * var seq = new cc.Sequence(act1, act2);\n *\n * // create sequence with array\n * var seq = new cc.Sequence(actArray);\n */\ncc.Sequence = cc.Class({\n name: 'cc.Sequence',\n extends: cc.ActionInterval,\n\n ctor:function (tempArray) {\n this._actions = [];\n this._split = null;\n this._last = 0;\n this._reversed = false;\n\n var paramArray = (tempArray instanceof Array) ? tempArray : arguments;\n if (paramArray.length === 1) {\n cc.errorID(1019);\n return;\n }\n var last = paramArray.length - 1;\n if ((last >= 0) && (paramArray[last] == null))\n cc.logID(1015);\n\n if (last >= 0) {\n var prev = paramArray[0], action1;\n for (var i = 1; i < last; i++) {\n if (paramArray[i]) {\n action1 = prev;\n prev = cc.Sequence._actionOneTwo(action1, paramArray[i]);\n }\n }\n this.initWithTwoActions(prev, paramArray[last]);\n }\n },\n\n /*\n * Initializes the action
\n * @param {FiniteTimeAction} actionOne\n * @param {FiniteTimeAction} actionTwo\n * @return {Boolean}\n */\n initWithTwoActions:function (actionOne, actionTwo) {\n if (!actionOne || !actionTwo) {\n cc.errorID(1025);\n return false;\n }\n\n var durationOne = actionOne._duration, durationTwo = actionTwo._duration;\n durationOne *= actionOne._repeatMethod ? actionOne._timesForRepeat : 1;\n durationTwo *= actionTwo._repeatMethod ? actionTwo._timesForRepeat : 1;\n var d = durationOne + durationTwo;\n this.initWithDuration(d);\n\n this._actions[0] = actionOne;\n this._actions[1] = actionTwo;\n return true;\n },\n\n clone:function () {\n var action = new cc.Sequence();\n this._cloneDecoration(action);\n action.initWithTwoActions(this._actions[0].clone(), this._actions[1].clone());\n return action;\n },\n\n startWithTarget:function (target) {\n cc.ActionInterval.prototype.startWithTarget.call(this, target);\n this._split = this._actions[0]._duration / this._duration;\n this._split *= this._actions[0]._repeatMethod ? this._actions[0]._timesForRepeat : 1;\n this._last = -1;\n },\n\n stop:function () {\n // Issue #1305\n if (this._last !== -1)\n this._actions[this._last].stop();\n cc.Action.prototype.stop.call(this);\n },\n\n update:function (dt) {\n var new_t, found = 0;\n var locSplit = this._split, locActions = this._actions, locLast = this._last, actionFound;\n\n dt = this._computeEaseTime(dt);\n if (dt < locSplit) {\n // action[0]\n new_t = (locSplit !== 0) ? dt / locSplit : 1;\n\n if (found === 0 && locLast === 1 && this._reversed) {\n // Reverse mode ?\n // XXX: Bug. this case doesn't contemplate when _last==-1, found=0 and in \"reverse mode\"\n // since it will require a hack to know if an action is on reverse mode or not.\n // \"step\" should be overriden, and the \"reverseMode\" value propagated to inner Sequences.\n locActions[1].update(0);\n locActions[1].stop();\n }\n } else {\n // action[1]\n found = 1;\n new_t = (locSplit === 1) ? 1 : (dt - locSplit) / (1 - locSplit);\n\n if (locLast === -1) {\n // action[0] was skipped, execute it.\n locActions[0].startWithTarget(this.target);\n locActions[0].update(1);\n locActions[0].stop();\n }\n if (locLast === 0) {\n // switching to action 1. stop action 0.\n locActions[0].update(1);\n locActions[0].stop();\n }\n }\n\n actionFound = locActions[found];\n // Last action found and it is done.\n if (locLast === found && actionFound.isDone())\n return;\n\n // Last action not found\n if (locLast !== found)\n actionFound.startWithTarget(this.target);\n\n new_t = new_t * actionFound._timesForRepeat;\n actionFound.update(new_t > 1 ? new_t % 1 : new_t);\n this._last = found;\n },\n\n reverse:function () {\n var action = cc.Sequence._actionOneTwo(this._actions[1].reverse(), this._actions[0].reverse());\n this._cloneDecoration(action);\n this._reverseEaseList(action);\n action._reversed = true;\n return action;\n }\n});\n\n/**\n * !#en\n * Helper constructor to create an array of sequenceable actions\n * The created action will run actions sequentially, one after another.\n * !#zh 顺序执行动作,创建的动作将按顺序依次运行。\n * @method sequence\n * @param {FiniteTimeAction|FiniteTimeAction[]} actionOrActionArray\n * @param {FiniteTimeAction} ...tempArray\n * @return {ActionInterval}\n * @example\n * // example\n * // create sequence with actions\n * var seq = cc.sequence(act1, act2);\n *\n * // create sequence with array\n * var seq = cc.sequence(actArray);\n */\n// todo: It should be use new\ncc.sequence = function (/*Multiple Arguments*/tempArray) {\n var paramArray = (tempArray instanceof Array) ? tempArray : arguments;\n if (paramArray.length === 1) {\n cc.errorID(1019);\n return null;\n }\n var last = paramArray.length - 1;\n if ((last >= 0) && (paramArray[last] == null))\n cc.logID(1015);\n\n var result = null;\n if (last >= 0) {\n result = paramArray[0];\n for (var i = 1; i <= last; i++) {\n if (paramArray[i]) {\n result = cc.Sequence._actionOneTwo(result, paramArray[i]);\n }\n }\n }\n\n return result;\n};\n\ncc.Sequence._actionOneTwo = function (actionOne, actionTwo) {\n var sequence = new cc.Sequence();\n sequence.initWithTwoActions(actionOne, actionTwo);\n return sequence;\n};\n\n/*\n * Repeats an action a number of times.\n * To repeat an action forever use the CCRepeatForever action.\n * @class Repeat\n * @extends ActionInterval\n * @param {FiniteTimeAction} action\n * @param {Number} times\n * @example\n * var rep = new cc.Repeat(cc.sequence(jump2, jump1), 5);\n */\ncc.Repeat = cc.Class({\n name: 'cc.Repeat',\n extends: cc.ActionInterval,\n\n ctor: function (action, times) {\n this._times = 0;\n this._total = 0;\n this._nextDt = 0;\n this._actionInstant = false;\n this._innerAction = null;\n\t\ttimes !== undefined && this.initWithAction(action, times);\n },\n\n /*\n * @param {FiniteTimeAction} action\n * @param {Number} times\n * @return {Boolean}\n */\n initWithAction:function (action, times) {\n var duration = action._duration * times;\n\n if (this.initWithDuration(duration)) {\n this._times = times;\n this._innerAction = action;\n if (action instanceof cc.ActionInstant){\n this._actionInstant = true;\n this._times -= 1;\n }\n this._total = 0;\n return true;\n }\n return false;\n },\n\n clone:function () {\n var action = new cc.Repeat();\n this._cloneDecoration(action);\n action.initWithAction(this._innerAction.clone(), this._times);\n return action;\n },\n\n startWithTarget:function (target) {\n this._total = 0;\n this._nextDt = this._innerAction._duration / this._duration;\n cc.ActionInterval.prototype.startWithTarget.call(this, target);\n this._innerAction.startWithTarget(target);\n },\n\n stop:function () {\n this._innerAction.stop();\n cc.Action.prototype.stop.call(this);\n },\n\n update:function (dt) {\n dt = this._computeEaseTime(dt);\n var locInnerAction = this._innerAction;\n var locDuration = this._duration;\n var locTimes = this._times;\n var locNextDt = this._nextDt;\n\n if (dt >= locNextDt) {\n while (dt > locNextDt && this._total < locTimes) {\n locInnerAction.update(1);\n this._total++;\n locInnerAction.stop();\n locInnerAction.startWithTarget(this.target);\n locNextDt += locInnerAction._duration / locDuration;\n this._nextDt = locNextDt > 1 ? 1 : locNextDt;\n }\n\n // fix for issue #1288, incorrect end value of repeat\n if (dt >= 1.0 && this._total < locTimes) {\n // fix for cocos-creator/fireball/issues/4310\n locInnerAction.update(1);\n this._total++;\n }\n\n // don't set a instant action back or update it, it has no use because it has no duration\n if (!this._actionInstant) {\n if (this._total === locTimes) {\n locInnerAction.stop();\n } else {\n // issue #390 prevent jerk, use right update\n locInnerAction.update(dt - (locNextDt - locInnerAction._duration / locDuration));\n }\n }\n } else {\n locInnerAction.update((dt * locTimes) % 1.0);\n }\n },\n\n isDone:function () {\n return this._total === this._times;\n },\n\n reverse:function () {\n var action = new cc.Repeat(this._innerAction.reverse(), this._times);\n this._cloneDecoration(action);\n this._reverseEaseList(action);\n return action;\n },\n\n /*\n * Set inner Action.\n * @param {FiniteTimeAction} action\n */\n setInnerAction:function (action) {\n if (this._innerAction !== action) {\n this._innerAction = action;\n }\n },\n\n /*\n * Get inner Action.\n * @return {FiniteTimeAction}\n */\n getInnerAction:function () {\n return this._innerAction;\n }\n});\n\n/**\n * !#en Creates a Repeat action. Times is an unsigned integer between 1 and pow(2,30)\n * !#zh 重复动作,可以按一定次数重复一个动,如果想永远重复一个动作请使用 repeatForever 动作来完成。\n * @method repeat\n * @param {FiniteTimeAction} action\n * @param {Number} times\n * @return {ActionInterval}\n * @example\n * // example\n * var rep = cc.repeat(cc.sequence(jump2, jump1), 5);\n */\ncc.repeat = function (action, times) {\n return new cc.Repeat(action, times);\n};\n\n\n/*\n * Repeats an action for ever.
\n * To repeat the an action for a limited number of times use the Repeat action.
\n * @warning This action can't be Sequenceable because it is not an IntervalAction\n * @class RepeatForever\n * @extends ActionInterval\n * @param {FiniteTimeAction} action\n * @example\n * var rep = new cc.RepeatForever(cc.sequence(jump2, jump1), 5);\n */\ncc.RepeatForever = cc.Class({\n name: 'cc.RepeatForever',\n extends: cc.ActionInterval,\n\n ctor:function (action) {\n this._innerAction = null;\n\t\taction && this.initWithAction(action);\n },\n\n /*\n * @param {ActionInterval} action\n * @return {Boolean}\n */\n initWithAction:function (action) {\n if (!action) {\n cc.errorID(1026);\n return false;\n }\n\n this._innerAction = action;\n return true;\n },\n\n clone:function () {\n var action = new cc.RepeatForever();\n this._cloneDecoration(action);\n action.initWithAction(this._innerAction.clone());\n return action;\n },\n\n startWithTarget:function (target) {\n cc.ActionInterval.prototype.startWithTarget.call(this, target);\n this._innerAction.startWithTarget(target);\n },\n\n step:function (dt) {\n var locInnerAction = this._innerAction;\n locInnerAction.step(dt);\n if (locInnerAction.isDone()) {\n //var diff = locInnerAction.getElapsed() - locInnerAction._duration;\n locInnerAction.startWithTarget(this.target);\n // to prevent jerk. issue #390 ,1247\n //this._innerAction.step(0);\n //this._innerAction.step(diff);\n locInnerAction.step(locInnerAction.getElapsed() - locInnerAction._duration);\n }\n },\n\n isDone:function () {\n return false;\n },\n\n reverse:function () {\n var action = new cc.RepeatForever(this._innerAction.reverse());\n this._cloneDecoration(action);\n this._reverseEaseList(action);\n return action;\n },\n\n /*\n * Set inner action.\n * @param {ActionInterval} action\n */\n setInnerAction:function (action) {\n if (this._innerAction !== action) {\n this._innerAction = action;\n }\n },\n\n /*\n * Get inner action.\n * @return {ActionInterval}\n */\n getInnerAction:function () {\n return this._innerAction;\n }\n});\n\n/**\n * !#en Create a acton which repeat forever, as it runs forever, it can't be added into cc.sequence and cc.spawn.\n * !#zh 永远地重复一个动作,有限次数内重复一个动作请使用 repeat 动作,由于这个动作不会停止,所以不能被添加到 cc.sequence 或 cc.spawn 中。\n * @method repeatForever\n * @param {FiniteTimeAction} action\n * @return {ActionInterval}\n * @example\n * // example\n * var repeat = cc.repeatForever(cc.rotateBy(1.0, 360));\n */\ncc.repeatForever = function (action) {\n return new cc.RepeatForever(action);\n};\n\n\n/* \n * Spawn a new action immediately\n * @class Spawn\n * @extends ActionInterval\n */\ncc.Spawn = cc.Class({\n name: 'cc.Spawn',\n extends: cc.ActionInterval,\n\n ctor:function (tempArray) {\n this._one = null;\n this._two = null;\n\n\t\tvar paramArray = (tempArray instanceof Array) ? tempArray : arguments;\n if (paramArray.length === 1) {\n cc.errorID(1020);\n return;\n }\n\t\tvar last = paramArray.length - 1;\n\t\tif ((last >= 0) && (paramArray[last] == null))\n\t\t\tcc.logID(1015);\n\n if (last >= 0) {\n var prev = paramArray[0], action1;\n for (var i = 1; i < last; i++) {\n if (paramArray[i]) {\n action1 = prev;\n prev = cc.Spawn._actionOneTwo(action1, paramArray[i]);\n }\n }\n this.initWithTwoActions(prev, paramArray[last]);\n }\n },\n\n /* initializes the Spawn action with the 2 actions to spawn\n * @param {FiniteTimeAction} action1\n * @param {FiniteTimeAction} action2\n * @return {Boolean}\n */\n initWithTwoActions:function (action1, action2) {\n if (!action1 || !action2) {\n cc.errorID(1027);\n return false;\n }\n\n var ret = false;\n\n var d1 = action1._duration;\n var d2 = action2._duration;\n\n if (this.initWithDuration(Math.max(d1, d2))) {\n this._one = action1;\n this._two = action2;\n\n if (d1 > d2) {\n this._two = cc.Sequence._actionOneTwo(action2, cc.delayTime(d1 - d2));\n } else if (d1 < d2) {\n this._one = cc.Sequence._actionOneTwo(action1, cc.delayTime(d2 - d1));\n }\n\n ret = true;\n }\n return ret;\n },\n\n clone:function () {\n var action = new cc.Spawn();\n this._cloneDecoration(action);\n action.initWithTwoActions(this._one.clone(), this._two.clone());\n return action;\n },\n\n startWithTarget:function (target) {\n cc.ActionInterval.prototype.startWithTarget.call(this, target);\n this._one.startWithTarget(target);\n this._two.startWithTarget(target);\n },\n\n stop:function () {\n this._one.stop();\n this._two.stop();\n cc.Action.prototype.stop.call(this);\n },\n\n update:function (dt) {\n dt = this._computeEaseTime(dt);\n if (this._one)\n this._one.update(dt);\n if (this._two)\n this._two.update(dt);\n },\n\n reverse:function () {\n var action = cc.Spawn._actionOneTwo(this._one.reverse(), this._two.reverse());\n this._cloneDecoration(action);\n this._reverseEaseList(action);\n return action;\n }\n});\n\n/**\n * !#en Create a spawn action which runs several actions in parallel.\n * !#zh 同步执行动作,同步执行一组动作。\n * @method spawn\n * @param {FiniteTimeAction|FiniteTimeAction[]} actionOrActionArray\n * @param {FiniteTimeAction} ...tempArray\n * @return {FiniteTimeAction}\n * @example\n * // example\n * var action = cc.spawn(cc.jumpBy(2, cc.v2(300, 0), 50, 4), cc.rotateBy(2, 720));\n * todo: It should be the direct use new\n */\ncc.spawn = function (/*Multiple Arguments*/tempArray) {\n var paramArray = (tempArray instanceof Array) ? tempArray : arguments;\n if (paramArray.length === 1) {\n cc.errorID(1020);\n return null;\n }\n if ((paramArray.length > 0) && (paramArray[paramArray.length - 1] == null))\n cc.logID(1015);\n\n var prev = paramArray[0];\n for (var i = 1; i < paramArray.length; i++) {\n if (paramArray[i] != null)\n prev = cc.Spawn._actionOneTwo(prev, paramArray[i]);\n }\n return prev;\n};\n\ncc.Spawn._actionOneTwo = function (action1, action2) {\n var pSpawn = new cc.Spawn();\n pSpawn.initWithTwoActions(action1, action2);\n return pSpawn;\n};\n\n\n/*\n * Rotates a Node object to a certain angle by modifying its angle property.
\n * The direction will be decided by the shortest angle.\n * @class RotateTo\n * @extends ActionInterval\n * @param {Number} duration duration in seconds\n * @param {Number} dstAngle dstAngle in degrees.\n * @example\n * var rotateTo = new cc.RotateTo(2, 61.0);\n */\ncc.RotateTo = cc.Class({\n name: 'cc.RotateTo',\n extends: cc.ActionInterval,\n\n statics: {\n _reverse: false,\n },\n\n ctor:function (duration, dstAngle) {\n this._startAngle = 0;\n this._dstAngle = 0;\n this._angle = 0;\n dstAngle !== undefined && this.initWithDuration(duration, dstAngle);\n },\n\n /*\n * Initializes the action.\n * @param {Number} duration\n * @param {Number} dstAngle\n * @return {Boolean}\n */\n initWithDuration:function (duration, dstAngle) {\n if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) {\n this._dstAngle = dstAngle;\n return true;\n }\n return false;\n },\n\n clone:function () {\n var action = new cc.RotateTo();\n this._cloneDecoration(action);\n action.initWithDuration(this._duration, this._dstAngle);\n return action;\n },\n\n startWithTarget:function (target) {\n cc.ActionInterval.prototype.startWithTarget.call(this, target);\n\n let startAngle = target.angle % 360;\n\n let angle = cc.RotateTo._reverse ? (this._dstAngle - startAngle) : (this._dstAngle + startAngle);\n if (angle > 180) angle -= 360;\n if (angle < -180) angle += 360;\n\n this._startAngle = startAngle;\n this._angle = cc.RotateTo._reverse ? angle : -angle;\n },\n\n reverse:function () {\n cc.logID(1016);\n },\n\n update:function (dt) {\n dt = this._computeEaseTime(dt);\n if (this.target) {\n this.target.angle = this._startAngle + this._angle * dt;\n }\n }\n});\n\n/**\n * !#en\n * Rotates a Node object to a certain angle by modifying its angle property.
\n * The direction will be decided by the shortest angle.\n * !#zh 旋转到目标角度,通过逐帧修改它的 angle 属性,旋转方向将由最短的角度决定。\n * @method rotateTo\n * @param {Number} duration duration in seconds\n * @param {Number} dstAngle dstAngle in degrees.\n * @return {ActionInterval}\n * @example\n * // example\n * var rotateTo = cc.rotateTo(2, 61.0);\n */\ncc.rotateTo = function (duration, dstAngle) {\n return new cc.RotateTo(duration, dstAngle);\n};\n\n\n/*\n * Rotates a Node object clockwise a number of degrees by modifying its angle property.\n * Relative to its properties to modify.\n * @class RotateBy\n * @extends ActionInterval\n * @param {Number} duration duration in seconds\n * @param {Number} deltaAngle deltaAngle in degrees\n * @example\n * var actionBy = new cc.RotateBy(2, 360);\n */\ncc.RotateBy = cc.Class({\n name: 'cc.RotateBy',\n extends: cc.ActionInterval,\n\n statics: {\n _reverse: false,\n },\n\n ctor: function (duration, deltaAngle) {\n deltaAngle *= cc.RotateBy._reverse ? 1 : -1;\n\n this._deltaAngle = 0;\n this._startAngle = 0;\n deltaAngle !== undefined && this.initWithDuration(duration, deltaAngle);\n },\n\n /*\n * Initializes the action.\n * @param {Number} duration duration in seconds\n * @param {Number} deltaAngle deltaAngle in degrees\n * @return {Boolean}\n */\n initWithDuration:function (duration, deltaAngle) {\n if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) {\n this._deltaAngle = deltaAngle;\n return true;\n }\n return false;\n },\n\n clone:function () {\n var action = new cc.RotateBy();\n this._cloneDecoration(action);\n action.initWithDuration(this._duration, this._deltaAngle);\n return action;\n },\n\n startWithTarget:function (target) {\n cc.ActionInterval.prototype.startWithTarget.call(this, target);\n this._startAngle = target.angle;\n },\n\n update:function (dt) {\n dt = this._computeEaseTime(dt);\n if (this.target) {\n this.target.angle = this._startAngle + this._deltaAngle * dt;\n }\n },\n\n reverse:function () {\n var action = new cc.RotateBy();\n action.initWithDuration(this._duration, -this._deltaAngle);\n this._cloneDecoration(action);\n this._reverseEaseList(action);\n return action;\n }\n});\n\n/**\n * !#en\n * Rotates a Node object clockwise a number of degrees by modifying its angle property.\n * Relative to its properties to modify.\n * !#zh 旋转指定的角度。\n * @method rotateBy\n * @param {Number} duration duration in seconds\n * @param {Number} deltaAngle deltaAngle in degrees\n * @return {ActionInterval}\n * @example\n * // example\n * var actionBy = cc.rotateBy(2, 360);\n */\ncc.rotateBy = function (duration, deltaAngle) {\n return new cc.RotateBy(duration, deltaAngle);\n};\n\n\n/*\n *

\n * Moves a Node object x,y pixels by modifying its position property.
\n * x and y are relative to the position of the object.
\n * Several MoveBy actions can be concurrently called, and the resulting
\n * movement will be the sum of individual movements.\n *

\n * @class MoveBy\n * @extends ActionInterval\n * @param {Number} duration duration in seconds\n * @param {Vec2|Number} deltaPos\n * @param {Number} [deltaY]\n * @example\n * var actionTo = cc.moveBy(2, cc.v2(windowSize.width - 40, windowSize.height - 40));\n */\ncc.MoveBy = cc.Class({\n name: 'cc.MoveBy',\n extends: cc.ActionInterval,\n\n ctor:function (duration, deltaPos, deltaY) {\n this._positionDelta = cc.v2(0, 0);\n this._startPosition = cc.v2(0, 0);\n this._previousPosition = cc.v2(0, 0);\n\n deltaPos !== undefined && cc.MoveBy.prototype.initWithDuration.call(this, duration, deltaPos, deltaY);\t\n },\n\n /*\n * Initializes the action.\n * @param {Number} duration duration in seconds\n * @param {Vec2} position\n * @param {Number} [y]\n * @return {Boolean}\n */\n initWithDuration:function (duration, position, y) {\n if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) {\n\t if(position.x !== undefined) {\n\t\t y = position.y;\n\t\t position = position.x;\n\t }\n\n this._positionDelta.x = position;\n this._positionDelta.y = y;\n return true;\n }\n return false;\n },\n\n clone:function () {\n var action = new cc.MoveBy();\n this._cloneDecoration(action);\n action.initWithDuration(this._duration, this._positionDelta);\n return action;\n },\n\n startWithTarget:function (target) {\n cc.ActionInterval.prototype.startWithTarget.call(this, target);\n var locPosX = target.x;\n var locPosY = target.y;\n this._previousPosition.x = locPosX;\n this._previousPosition.y = locPosY;\n this._startPosition.x = locPosX;\n this._startPosition.y = locPosY;\n },\n\n update:function (dt) {\n dt = this._computeEaseTime(dt);\n if (this.target) {\n var x = this._positionDelta.x * dt;\n var y = this._positionDelta.y * dt;\n var locStartPosition = this._startPosition;\n if (cc.macro.ENABLE_STACKABLE_ACTIONS) {\n var targetX = this.target.x;\n var targetY = this.target.y;\n var locPreviousPosition = this._previousPosition;\n\n locStartPosition.x = locStartPosition.x + targetX - locPreviousPosition.x;\n locStartPosition.y = locStartPosition.y + targetY - locPreviousPosition.y;\n x = x + locStartPosition.x;\n y = y + locStartPosition.y;\n\t locPreviousPosition.x = x;\n\t locPreviousPosition.y = y;\n\t this.target.setPosition(x, y);\n } else {\n this.target.setPosition(locStartPosition.x + x, locStartPosition.y + y);\n }\n }\n },\n\n reverse:function () {\n var action = new cc.MoveBy(this._duration, cc.v2(-this._positionDelta.x, -this._positionDelta.y));\n this._cloneDecoration(action);\n this._reverseEaseList(action);\n return action;\n }\n});\n\n/**\n * !#en\n * Moves a Node object x,y pixels by modifying its position property.
\n * x and y are relative to the position of the object.
\n * Several MoveBy actions can be concurrently called, and the resulting
\n * movement will be the sum of individual movements.\n * !#zh 移动指定的距离。\n * @method moveBy\n * @param {Number} duration duration in seconds\n * @param {Vec2|Number} deltaPos\n * @param {Number} [deltaY]\n * @return {ActionInterval}\n * @example\n * // example\n * var actionTo = cc.moveBy(2, cc.v2(windowSize.width - 40, windowSize.height - 40));\n */\ncc.moveBy = function (duration, deltaPos, deltaY) {\n return new cc.MoveBy(duration, deltaPos, deltaY);\n};\n\n\n/*\n * Moves a Node object to the position x,y. x and y are absolute coordinates by modifying its position property.
\n * Several MoveTo actions can be concurrently called, and the resulting
\n * movement will be the sum of individual movements.\n * @class MoveTo\n * @extends MoveBy\n * @param {Number} duration duration in seconds\n * @param {Vec2|Number} position\n * @param {Number} [y]\n * @example\n * var actionBy = new cc.MoveTo(2, cc.v2(80, 80));\n */\ncc.MoveTo = cc.Class({\n name: 'cc.MoveTo',\n extends: cc.MoveBy,\n\n ctor:function (duration, position, y) {\n this._endPosition = cc.v2(0, 0);\n\t\tposition !== undefined && this.initWithDuration(duration, position, y);\n },\n\n /*\n * Initializes the action.\n * @param {Number} duration duration in seconds\n * @param {Vec2} position\n * @param {Number} [y]\n * @return {Boolean}\n */\n initWithDuration:function (duration, position, y) {\n if (cc.MoveBy.prototype.initWithDuration.call(this, duration, position, y)) {\n\t if(position.x !== undefined) {\n\t\t y = position.y;\n\t\t position = position.x;\n\t }\n\n this._endPosition.x = position;\n this._endPosition.y = y;\n return true;\n }\n return false;\n },\n\n clone:function () {\n var action = new cc.MoveTo();\n this._cloneDecoration(action);\n action.initWithDuration(this._duration, this._endPosition);\n return action;\n },\n\n startWithTarget:function (target) {\n cc.MoveBy.prototype.startWithTarget.call(this, target);\n this._positionDelta.x = this._endPosition.x - target.x;\n this._positionDelta.y = this._endPosition.y - target.y;\n }\n});\n\n/**\n * !#en\n * Moves a Node object to the position x,y. x and y are absolute coordinates by modifying its position property.
\n * Several MoveTo actions can be concurrently called, and the resulting
\n * movement will be the sum of individual movements.\n * !#zh 移动到目标位置。\n * @method moveTo\n * @param {Number} duration duration in seconds\n * @param {Vec2|Number} position\n * @param {Number} [y]\n * @return {ActionInterval}\n * @example\n * // example\n * var actionBy = cc.moveTo(2, cc.v2(80, 80));\n */\ncc.moveTo = function (duration, position, y) {\n return new cc.MoveTo(duration, position, y);\n};\n\n/*\n * Skews a Node object to given angles by modifying its skewX and skewY properties\n * @class SkewTo\n * @extends ActionInterval\n * @param {Number} t time in seconds\n * @param {Number} sx\n * @param {Number} sy\n * @example\n * var actionTo = new cc.SkewTo(2, 37.2, -37.2);\n */\ncc.SkewTo = cc.Class({\n name: 'cc.SkewTo',\n extends: cc.ActionInterval,\n\n ctor: function (t, sx, sy) {\n this._skewX = 0;\n this._skewY = 0;\n this._startSkewX = 0;\n this._startSkewY = 0;\n this._endSkewX = 0;\n this._endSkewY = 0;\n this._deltaX = 0;\n this._deltaY = 0;\n sy !== undefined && cc.SkewTo.prototype.initWithDuration.call(this, t, sx, sy);\n },\n\n /*\n * Initializes the action.\n * @param {Number} t time in seconds\n * @param {Number} sx\n * @param {Number} sy\n * @return {Boolean}\n */\n initWithDuration:function (t, sx, sy) {\n var ret = false;\n if (cc.ActionInterval.prototype.initWithDuration.call(this, t)) {\n this._endSkewX = sx;\n this._endSkewY = sy;\n ret = true;\n }\n return ret;\n },\n\n clone:function () {\n var action = new cc.SkewTo();\n this._cloneDecoration(action);\n action.initWithDuration(this._duration, this._endSkewX, this._endSkewY);\n return action;\n },\n\n startWithTarget:function (target) {\n cc.ActionInterval.prototype.startWithTarget.call(this, target);\n\n this._startSkewX = target.skewX % 180;\n this._deltaX = this._endSkewX - this._startSkewX;\n if (this._deltaX > 180)\n this._deltaX -= 360;\n if (this._deltaX < -180)\n this._deltaX += 360;\n\n this._startSkewY = target.skewY % 360;\n this._deltaY = this._endSkewY - this._startSkewY;\n if (this._deltaY > 180)\n this._deltaY -= 360;\n if (this._deltaY < -180)\n this._deltaY += 360;\n },\n\n update:function (dt) {\n dt = this._computeEaseTime(dt);\n this.target.skewX = this._startSkewX + this._deltaX * dt;\n this.target.skewY = this._startSkewY + this._deltaY * dt;\n }\n});\n\n/**\n * !#en\n * Create a action which skews a Node object to given angles by modifying its skewX and skewY properties.\n * Changes to the specified value.\n * !#zh 偏斜到目标角度。\n * @method skewTo\n * @param {Number} t time in seconds\n * @param {Number} sx\n * @param {Number} sy\n * @return {ActionInterval}\n * @example\n * // example\n * var actionTo = cc.skewTo(2, 37.2, -37.2);\n */\ncc.skewTo = function (t, sx, sy) {\n return new cc.SkewTo(t, sx, sy);\n};\n\n/*\n * Skews a Node object by skewX and skewY degrees.\n * Relative to its property modification.\n * @class SkewBy\n * @extends SkewTo\n * @param {Number} t time in seconds\n * @param {Number} sx skew in degrees for X axis\n * @param {Number} sy skew in degrees for Y axis\n */\ncc.SkewBy = cc.Class({\n name: 'cc.SkewBy',\n extends: cc.SkewTo,\n\n\tctor: function(t, sx, sy) {\n\t\tsy !== undefined && this.initWithDuration(t, sx, sy);\n\t},\n\n /*\n * Initializes the action.\n * @param {Number} t time in seconds\n * @param {Number} deltaSkewX skew in degrees for X axis\n * @param {Number} deltaSkewY skew in degrees for Y axis\n * @return {Boolean}\n */\n initWithDuration:function (t, deltaSkewX, deltaSkewY) {\n var ret = false;\n if (cc.SkewTo.prototype.initWithDuration.call(this, t, deltaSkewX, deltaSkewY)) {\n this._skewX = deltaSkewX;\n this._skewY = deltaSkewY;\n ret = true;\n }\n return ret;\n },\n\n clone:function () {\n var action = new cc.SkewBy();\n this._cloneDecoration(action);\n action.initWithDuration(this._duration, this._skewX, this._skewY);\n return action;\n },\n\n startWithTarget:function (target) {\n cc.SkewTo.prototype.startWithTarget.call(this, target);\n this._deltaX = this._skewX;\n this._deltaY = this._skewY;\n this._endSkewX = this._startSkewX + this._deltaX;\n this._endSkewY = this._startSkewY + this._deltaY;\n },\n\n reverse:function () {\n var action = new cc.SkewBy(this._duration, -this._skewX, -this._skewY);\n this._cloneDecoration(action);\n this._reverseEaseList(action);\n return action;\n }\n});\n\n/**\n * !#en\n * Skews a Node object by skewX and skewY degrees.
\n * Relative to its property modification.\n * !#zh 偏斜指定的角度。\n * @method skewBy\n * @param {Number} t time in seconds\n * @param {Number} sx sx skew in degrees for X axis\n * @param {Number} sy sy skew in degrees for Y axis\n * @return {ActionInterval}\n * @example\n * // example\n * var actionBy = cc.skewBy(2, 0, -90);\n */\ncc.skewBy = function (t, sx, sy) {\n return new cc.SkewBy(t, sx, sy);\n};\n\n\n/*\n * Moves a Node object simulating a parabolic jump movement by modifying its position property.\n * Relative to its movement.\n * @class JumpBy\n * @extends ActionInterval\n * @param {Number} duration\n * @param {Vec2|Number} position\n * @param {Number} [y]\n * @param {Number} height\n * @param {Number} jumps\n * @example\n * var actionBy = new cc.JumpBy(2, cc.v2(300, 0), 50, 4);\n * var actionBy = new cc.JumpBy(2, 300, 0, 50, 4);\n */\ncc.JumpBy = cc.Class({\n name: 'cc.JumpBy',\n extends: cc.ActionInterval,\n\n ctor:function (duration, position, y, height, jumps) {\n this._startPosition = cc.v2(0, 0);\n this._previousPosition = cc.v2(0, 0);\n this._delta = cc.v2(0, 0);\n this._height = 0;\n this._jumps = 0;\n\n height !== undefined && cc.JumpBy.prototype.initWithDuration.call(this, duration, position, y, height, jumps);\n },\n /*\n * Initializes the action.\n * @param {Number} duration\n * @param {Vec2|Number} position\n * @param {Number} [y]\n * @param {Number} height\n * @param {Number} jumps\n * @return {Boolean}\n * @example\n * actionBy.initWithDuration(2, cc.v2(300, 0), 50, 4);\n * actionBy.initWithDuration(2, 300, 0, 50, 4);\n */\n initWithDuration:function (duration, position, y, height, jumps) {\n if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) {\n\t if (jumps === undefined) {\n\t\t jumps = height;\n\t\t height = y;\n\t\t y = position.y;\n\t\t position = position.x;\n\t }\n this._delta.x = position;\n this._delta.y = y;\n this._height = height;\n this._jumps = jumps;\n return true;\n }\n return false;\n },\n\n clone:function () {\n var action = new cc.JumpBy();\n this._cloneDecoration(action);\n action.initWithDuration(this._duration, this._delta, this._height, this._jumps);\n return action;\n },\n\n startWithTarget:function (target) {\n cc.ActionInterval.prototype.startWithTarget.call(this, target);\n var locPosX = target.x;\n var locPosY = target.y;\n this._previousPosition.x = locPosX;\n this._previousPosition.y = locPosY;\n this._startPosition.x = locPosX;\n this._startPosition.y = locPosY;\n },\n\n update:function (dt) {\n dt = this._computeEaseTime(dt);\n if (this.target) {\n var frac = dt * this._jumps % 1.0;\n var y = this._height * 4 * frac * (1 - frac);\n y += this._delta.y * dt;\n\n var x = this._delta.x * dt;\n var locStartPosition = this._startPosition;\n if (cc.macro.ENABLE_STACKABLE_ACTIONS) {\n var targetX = this.target.x;\n var targetY = this.target.y;\n var locPreviousPosition = this._previousPosition;\n\n locStartPosition.x = locStartPosition.x + targetX - locPreviousPosition.x;\n locStartPosition.y = locStartPosition.y + targetY - locPreviousPosition.y;\n x = x + locStartPosition.x;\n y = y + locStartPosition.y;\n\t locPreviousPosition.x = x;\n\t locPreviousPosition.y = y;\n\t this.target.setPosition(x, y);\n } else {\n this.target.setPosition(locStartPosition.x + x, locStartPosition.y + y);\n }\n }\n },\n\n reverse:function () {\n var action = new cc.JumpBy(this._duration, cc.v2(-this._delta.x, -this._delta.y), this._height, this._jumps);\n this._cloneDecoration(action);\n this._reverseEaseList(action);\n return action;\n }\n});\n\n/**\n * !#en\n * Moves a Node object simulating a parabolic jump movement by modifying it's position property.\n * Relative to its movement.\n * !#zh 用跳跃的方式移动指定的距离。\n * @method jumpBy\n * @param {Number} duration\n * @param {Vec2|Number} position\n * @param {Number} [y]\n * @param {Number} [height]\n * @param {Number} [jumps]\n * @return {ActionInterval}\n * @example\n * // example\n * var actionBy = cc.jumpBy(2, cc.v2(300, 0), 50, 4);\n * var actionBy = cc.jumpBy(2, 300, 0, 50, 4);\n */\ncc.jumpBy = function (duration, position, y, height, jumps) {\n return new cc.JumpBy(duration, position, y, height, jumps);\n};\n\n/*\n * Moves a Node object to a parabolic position simulating a jump movement by modifying it's position property.
\n * Jump to the specified location.\n * @class JumpTo\n * @extends JumpBy\n * @param {Number} duration\n * @param {Vec2|Number} position\n * @param {Number} [y]\n * @param {Number} [height]\n * @param {Number} [jumps]\n * @example\n * var actionTo = new cc.JumpTo(2, cc.v2(300, 0), 50, 4);\n * var actionTo = new cc.JumpTo(2, 300, 0, 50, 4);\n */\ncc.JumpTo = cc.Class({\n name: 'cc.JumpTo',\n extends: cc.JumpBy,\n\n ctor:function (duration, position, y, height, jumps) {\n this._endPosition = cc.v2(0, 0);\n height !== undefined && this.initWithDuration(duration, position, y, height, jumps);\n },\n /*\n * Initializes the action.\n * @param {Number} duration\n * @param {Vec2|Number} position\n * @param {Number} [y]\n * @param {Number} height\n * @param {Number} jumps\n * @return {Boolean}\n * @example\n * actionTo.initWithDuration(2, cc.v2(300, 0), 50, 4);\n * actionTo.initWithDuration(2, 300, 0, 50, 4);\n */\n initWithDuration:function (duration, position, y, height, jumps) {\n if (cc.JumpBy.prototype.initWithDuration.call(this, duration, position, y, height, jumps)) {\n if (jumps === undefined) {\n y = position.y;\n position = position.x;\n }\n this._endPosition.x = position;\n this._endPosition.y = y;\n return true;\n }\n return false;\n },\n\n startWithTarget:function (target) {\n cc.JumpBy.prototype.startWithTarget.call(this, target);\n this._delta.x = this._endPosition.x - this._startPosition.x;\n this._delta.y = this._endPosition.y - this._startPosition.y;\n },\n\n clone:function () {\n var action = new cc.JumpTo();\n this._cloneDecoration(action);\n action.initWithDuration(this._duration, this._endPosition, this._height, this._jumps);\n return action;\n }\n});\n\n/**\n * !#en\n * Moves a Node object to a parabolic position simulating a jump movement by modifying its position property.
\n * Jump to the specified location.\n * !#zh 用跳跃的方式移动到目标位置。\n * @method jumpTo\n * @param {Number} duration\n * @param {Vec2|Number} position\n * @param {Number} [y]\n * @param {Number} [height]\n * @param {Number} [jumps]\n * @return {ActionInterval}\n * @example\n * // example\n * var actionTo = cc.jumpTo(2, cc.v2(300, 300), 50, 4);\n * var actionTo = cc.jumpTo(2, 300, 300, 50, 4);\n */\ncc.jumpTo = function (duration, position, y, height, jumps) {\n return new cc.JumpTo(duration, position, y, height, jumps);\n};\n\n/* An action that moves the target with a cubic Bezier curve by a certain distance.\n * Relative to its movement.\n * @class BezierBy\n * @extends ActionInterval\n * @param {Number} t - time in seconds\n * @param {Vec2[]} c - Array of points\n * @example\n * var bezier = [cc.v2(0, windowSize.height / 2), cc.v2(300, -windowSize.height / 2), cc.v2(300, 100)];\n * var bezierForward = new cc.BezierBy(3, bezier);\n */\nfunction bezierAt (a, b, c, d, t) {\n return (Math.pow(1 - t, 3) * a +\n 3 * t * (Math.pow(1 - t, 2)) * b +\n 3 * Math.pow(t, 2) * (1 - t) * c +\n Math.pow(t, 3) * d );\n};\ncc.BezierBy = cc.Class({\n name: 'cc.BezierBy',\n extends: cc.ActionInterval,\n\n ctor:function (t, c) {\n this._config = [];\n this._startPosition = cc.v2(0, 0);\n this._previousPosition = cc.v2(0, 0);\n c && cc.BezierBy.prototype.initWithDuration.call(this, t, c);\n },\n\n /*\n * Initializes the action.\n * @param {Number} t - time in seconds\n * @param {Vec2[]} c - Array of points\n * @return {Boolean}\n */\n initWithDuration:function (t, c) {\n if (cc.ActionInterval.prototype.initWithDuration.call(this, t)) {\n this._config = c;\n return true;\n }\n return false;\n },\n\n clone:function () {\n var action = new cc.BezierBy();\n this._cloneDecoration(action);\n var newConfigs = [];\n for (var i = 0; i < this._config.length; i++) {\n var selConf = this._config[i];\n newConfigs.push(cc.v2(selConf.x, selConf.y));\n }\n action.initWithDuration(this._duration, newConfigs);\n return action;\n },\n\n startWithTarget:function (target) {\n cc.ActionInterval.prototype.startWithTarget.call(this, target);\n var locPosX = target.x;\n var locPosY = target.y;\n this._previousPosition.x = locPosX;\n this._previousPosition.y = locPosY;\n this._startPosition.x = locPosX;\n this._startPosition.y = locPosY;\n },\n\n update:function (dt) {\n dt = this._computeEaseTime(dt);\n if (this.target) {\n var locConfig = this._config;\n var xa = 0;\n var xb = locConfig[0].x;\n var xc = locConfig[1].x;\n var xd = locConfig[2].x;\n\n var ya = 0;\n var yb = locConfig[0].y;\n var yc = locConfig[1].y;\n var yd = locConfig[2].y;\n\n var x = bezierAt(xa, xb, xc, xd, dt);\n var y = bezierAt(ya, yb, yc, yd, dt);\n\n var locStartPosition = this._startPosition;\n if (cc.macro.ENABLE_STACKABLE_ACTIONS) {\n var targetX = this.target.x;\n var targetY = this.target.y;\n var locPreviousPosition = this._previousPosition;\n\n locStartPosition.x = locStartPosition.x + targetX - locPreviousPosition.x;\n locStartPosition.y = locStartPosition.y + targetY - locPreviousPosition.y;\n x = x + locStartPosition.x;\n y = y + locStartPosition.y;\n\t locPreviousPosition.x = x;\n\t locPreviousPosition.y = y;\n\t this.target.setPosition(x, y);\n } else {\n this.target.setPosition(locStartPosition.x + x, locStartPosition.y + y);\n }\n }\n },\n\n reverse:function () {\n var locConfig = this._config;\n var x0 = locConfig[0].x, y0 = locConfig[0].y;\n var x1 = locConfig[1].x, y1 = locConfig[1].y;\n var x2 = locConfig[2].x, y2 = locConfig[2].y;\n var r = [\n cc.v2(x1 - x2, y1 - y2),\n cc.v2(x0 - x2, y0 - y2),\n cc.v2(-x2, -y2) ];\n var action = new cc.BezierBy(this._duration, r);\n this._cloneDecoration(action);\n this._reverseEaseList(action);\n return action;\n }\n});\n\n/**\n * !#en\n * An action that moves the target with a cubic Bezier curve by a certain distance.\n * Relative to its movement.\n * !#zh 按贝赛尔曲线轨迹移动指定的距离。\n * @method bezierBy\n * @param {Number} t - time in seconds\n * @param {Vec2[]} c - Array of points\n * @return {ActionInterval}\n * @example\n * // example\n * var bezier = [cc.v2(0, windowSize.height / 2), cc.v2(300, -windowSize.height / 2), cc.v2(300, 100)];\n * var bezierForward = cc.bezierBy(3, bezier);\n */\ncc.bezierBy = function (t, c) {\n return new cc.BezierBy(t, c);\n};\n\n\n/* An action that moves the target with a cubic Bezier curve to a destination point.\n * @class BezierTo\n * @extends BezierBy\n * @param {Number} t\n * @param {Vec2[]} c - Array of points\n * @example\n * var bezier = [cc.v2(0, windowSize.height / 2), cc.v2(300, -windowSize.height / 2), cc.v2(300, 100)];\n * var bezierTo = new cc.BezierTo(2, bezier);\n */\ncc.BezierTo = cc.Class({\n name: 'cc.BezierTo',\n extends: cc.BezierBy,\n\n ctor:function (t, c) {\n this._toConfig = [];\n\t\tc && this.initWithDuration(t, c);\n },\n\n /*\n * Initializes the action.\n * @param {Number} t time in seconds\n * @param {Vec2[]} c - Array of points\n * @return {Boolean}\n */\n initWithDuration:function (t, c) {\n if (cc.ActionInterval.prototype.initWithDuration.call(this, t)) {\n this._toConfig = c;\n return true;\n }\n return false;\n },\n\n clone:function () {\n var action = new cc.BezierTo();\n this._cloneDecoration(action);\n action.initWithDuration(this._duration, this._toConfig);\n return action;\n },\n\n startWithTarget:function (target) {\n cc.BezierBy.prototype.startWithTarget.call(this, target);\n var locStartPos = this._startPosition;\n var locToConfig = this._toConfig;\n var locConfig = this._config;\n\n locConfig[0] = locToConfig[0].sub(locStartPos);\n locConfig[1] = locToConfig[1].sub(locStartPos);\n locConfig[2] = locToConfig[2].sub(locStartPos);\n }\n});\n/**\n * !#en An action that moves the target with a cubic Bezier curve to a destination point.\n * !#zh 按贝赛尔曲线轨迹移动到目标位置。\n * @method bezierTo\n * @param {Number} t\n * @param {Vec2[]} c - Array of points\n * @return {ActionInterval}\n * @example\n * // example\n * var bezier = [cc.v2(0, windowSize.height / 2), cc.v2(300, -windowSize.height / 2), cc.v2(300, 100)];\n * var bezierTo = cc.bezierTo(2, bezier);\n */\ncc.bezierTo = function (t, c) {\n return new cc.BezierTo(t, c);\n};\n\n\n/* Scales a Node object to a zoom factor by modifying it's scale property.\n * @warning This action doesn't support \"reverse\"\n * @class ScaleTo\n * @extends ActionInterval\n * @param {Number} duration\n * @param {Number} sx scale parameter in X\n * @param {Number} [sy] scale parameter in Y, if Null equal to sx\n * @example\n * // It scales to 0.5 in both X and Y.\n * var actionTo = new cc.ScaleTo(2, 0.5);\n *\n * // It scales to 0.5 in x and 2 in Y\n * var actionTo = new cc.ScaleTo(2, 0.5, 2);\n */\ncc.ScaleTo = cc.Class({\n name: 'cc.ScaleTo',\n extends: cc.ActionInterval,\n\n ctor:function (duration, sx, sy) {\n this._scaleX = 1;\n this._scaleY = 1;\n this._startScaleX = 1;\n this._startScaleY = 1;\n this._endScaleX = 0;\n this._endScaleY = 0;\n this._deltaX = 0;\n this._deltaY = 0;\n sx !== undefined && cc.ScaleTo.prototype.initWithDuration.call(this, duration, sx, sy);\n },\n\n /*\n * Initializes the action.\n * @param {Number} duration\n * @param {Number} sx\n * @param {Number} [sy=]\n * @return {Boolean}\n */\n initWithDuration:function (duration, sx, sy) { //function overload here\n if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) {\n this._endScaleX = sx;\n this._endScaleY = (sy != null) ? sy : sx;\n return true;\n }\n return false;\n },\n\n clone:function () {\n var action = new cc.ScaleTo();\n this._cloneDecoration(action);\n action.initWithDuration(this._duration, this._endScaleX, this._endScaleY);\n return action;\n },\n\n startWithTarget:function (target) {\n cc.ActionInterval.prototype.startWithTarget.call(this, target);\n this._startScaleX = target.scaleX;\n this._startScaleY = target.scaleY;\n this._deltaX = this._endScaleX - this._startScaleX;\n this._deltaY = this._endScaleY - this._startScaleY;\n },\n\n update:function (dt) {\n dt = this._computeEaseTime(dt);\n if (this.target) {\n this.target.scaleX = this._startScaleX + this._deltaX * dt;\n\t this.target.scaleY = this._startScaleY + this._deltaY * dt;\n }\n }\n});\n/**\n * !#en Scales a Node object to a zoom factor by modifying it's scale property.\n * !#zh 将节点大小缩放到指定的倍数。\n * @method scaleTo\n * @param {Number} duration\n * @param {Number} sx scale parameter in X\n * @param {Number} [sy] scale parameter in Y, if Null equal to sx\n * @return {ActionInterval}\n * @example\n * // example\n * // It scales to 0.5 in both X and Y.\n * var actionTo = cc.scaleTo(2, 0.5);\n *\n * // It scales to 0.5 in x and 2 in Y\n * var actionTo = cc.scaleTo(2, 0.5, 2);\n */\ncc.scaleTo = function (duration, sx, sy) { //function overload\n return new cc.ScaleTo(duration, sx, sy);\n};\n\n\n/* Scales a Node object a zoom factor by modifying it's scale property.\n * Relative to its changes.\n * @class ScaleBy\n * @extends ScaleTo\n */\ncc.ScaleBy = cc.Class({\n name: 'cc.ScaleBy',\n extends: cc.ScaleTo,\n\n startWithTarget:function (target) {\n cc.ScaleTo.prototype.startWithTarget.call(this, target);\n this._deltaX = this._startScaleX * this._endScaleX - this._startScaleX;\n this._deltaY = this._startScaleY * this._endScaleY - this._startScaleY;\n },\n\n reverse:function () {\n var action = new cc.ScaleBy(this._duration, 1 / this._endScaleX, 1 / this._endScaleY);\n this._cloneDecoration(action);\n this._reverseEaseList(action);\n return action;\n },\n\n clone:function () {\n var action = new cc.ScaleBy();\n this._cloneDecoration(action);\n action.initWithDuration(this._duration, this._endScaleX, this._endScaleY);\n return action;\n }\n});\n/**\n * !#en\n * Scales a Node object a zoom factor by modifying it's scale property.\n * Relative to its changes.\n * !#zh 按指定的倍数缩放节点大小。\n * @method scaleBy\n * @param {Number} duration duration in seconds\n * @param {Number} sx sx scale parameter in X\n * @param {Number|Null} [sy=] sy scale parameter in Y, if Null equal to sx\n * @return {ActionInterval}\n * @example\n * // example without sy, it scales by 2 both in X and Y\n * var actionBy = cc.scaleBy(2, 2);\n *\n * //example with sy, it scales by 0.25 in X and 4.5 in Y\n * var actionBy2 = cc.scaleBy(2, 0.25, 4.5);\n */\ncc.scaleBy = function (duration, sx, sy) {\n return new cc.ScaleBy(duration, sx, sy);\n};\n\n/* Blinks a Node object by modifying it's visible property\n * @class Blink\n * @extends ActionInterval\n * @param {Number} duration duration in seconds\n * @param {Number} blinks blinks in times\n * @example\n * var action = new cc.Blink(2, 10);\n */\ncc.Blink = cc.Class({\n name: 'cc.Blink',\n extends: cc.ActionInterval,\n\n ctor:function (duration, blinks) {\n this._times = 0;\n this._originalState = false;\n\t\tblinks !== undefined && this.initWithDuration(duration, blinks);\n },\n\n /*\n * Initializes the action.\n * @param {Number} duration duration in seconds\n * @param {Number} blinks blinks in times\n * @return {Boolean}\n */\n initWithDuration:function (duration, blinks) {\n if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) {\n this._times = blinks;\n return true;\n }\n return false;\n },\n\n clone:function () {\n var action = new cc.Blink();\n this._cloneDecoration(action);\n action.initWithDuration(this._duration, this._times);\n return action;\n },\n\n update:function (dt) {\n dt = this._computeEaseTime(dt);\n if (this.target && !this.isDone()) {\n var slice = 1.0 / this._times;\n var m = dt % slice;\n this.target.opacity = (m > (slice / 2)) ? 255 : 0;\n }\n },\n\n startWithTarget:function (target) {\n cc.ActionInterval.prototype.startWithTarget.call(this, target);\n this._originalState = target.opacity;\n },\n\n stop:function () {\n this.target.opacity = this._originalState;\n cc.ActionInterval.prototype.stop.call(this);\n },\n\n reverse:function () {\n var action = new cc.Blink(this._duration, this._times);\n this._cloneDecoration(action);\n this._reverseEaseList(action);\n return action;\n }\n});\n/**\n * !#en Blinks a Node object by modifying it's visible property.\n * !#zh 闪烁(基于透明度)。\n * @method blink\n * @param {Number} duration duration in seconds\n * @param {Number} blinks blinks in times\n * @return {ActionInterval}\n * @example\n * // example\n * var action = cc.blink(2, 10);\n */\ncc.blink = function (duration, blinks) {\n return new cc.Blink(duration, blinks);\n};\n\n/* Fades an object that implements the cc.RGBAProtocol protocol. It modifies the opacity from the current value to a custom one.\n * @warning This action doesn't support \"reverse\"\n * @class FadeTo\n * @extends ActionInterval\n * @param {Number} duration\n * @param {Number} opacity 0-255, 0 is transparent\n * @example\n * var action = new cc.FadeTo(1.0, 0);\n */\ncc.FadeTo = cc.Class({\n name: 'cc.FadeTo',\n extends: cc.ActionInterval,\n\n ctor:function (duration, opacity) {\n this._toOpacity = 0;\n this._fromOpacity = 0;\n opacity !== undefined && cc.FadeTo.prototype.initWithDuration.call(this, duration, opacity);\n },\n\n /*\n * Initializes the action.\n * @param {Number} duration duration in seconds\n * @param {Number} opacity\n * @return {Boolean}\n */\n initWithDuration:function (duration, opacity) {\n if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) {\n this._toOpacity = opacity;\n return true;\n }\n return false;\n },\n\n clone:function () {\n var action = new cc.FadeTo();\n this._cloneDecoration(action);\n action.initWithDuration(this._duration, this._toOpacity);\n return action;\n },\n\n update:function (time) {\n time = this._computeEaseTime(time);\n var fromOpacity = this._fromOpacity !== undefined ? this._fromOpacity : 255;\n this.target.opacity = fromOpacity + (this._toOpacity - fromOpacity) * time;\n },\n\n startWithTarget:function (target) {\n cc.ActionInterval.prototype.startWithTarget.call(this, target);\n this._fromOpacity = target.opacity;\n }\n});\n\n/**\n * !#en\n * Fades an object that implements the cc.RGBAProtocol protocol.\n * It modifies the opacity from the current value to a custom one.\n * !#zh 修改透明度到指定值。\n * @method fadeTo\n * @param {Number} duration\n * @param {Number} opacity 0-255, 0 is transparent\n * @return {ActionInterval}\n * @example\n * // example\n * var action = cc.fadeTo(1.0, 0);\n */\ncc.fadeTo = function (duration, opacity) {\n return new cc.FadeTo(duration, opacity);\n};\n\n/* Fades In an object that implements the cc.RGBAProtocol protocol. It modifies the opacity from 0 to 255.
\n * The \"reverse\" of this action is FadeOut\n * @class FadeIn\n * @extends FadeTo\n * @param {Number} duration duration in seconds\n */\ncc.FadeIn = cc.Class({\n name: 'cc.FadeIn',\n extends: cc.FadeTo,\n\n ctor:function (duration) {\n if (duration == null)\n duration = 0;\n this._reverseAction = null;\n this.initWithDuration(duration, 255);\n },\n\n reverse:function () {\n var action = new cc.FadeOut();\n action.initWithDuration(this._duration, 0);\n this._cloneDecoration(action);\n this._reverseEaseList(action);\n return action;\n },\n\n clone:function () {\n var action = new cc.FadeIn();\n this._cloneDecoration(action);\n action.initWithDuration(this._duration, this._toOpacity);\n return action;\n },\n\n startWithTarget:function (target) {\n if(this._reverseAction)\n this._toOpacity = this._reverseAction._fromOpacity;\n cc.FadeTo.prototype.startWithTarget.call(this, target);\n }\n});\n\n/**\n * !#en Fades In an object that implements the cc.RGBAProtocol protocol. It modifies the opacity from 0 to 255.\n * !#zh 渐显效果。\n * @method fadeIn\n * @param {Number} duration duration in seconds\n * @return {ActionInterval}\n * @example\n * //example\n * var action = cc.fadeIn(1.0);\n */\ncc.fadeIn = function (duration) {\n return new cc.FadeIn(duration);\n};\n\n\n/* Fades Out an object that implements the cc.RGBAProtocol protocol. It modifies the opacity from 255 to 0.\n * The \"reverse\" of this action is FadeIn\n * @class FadeOut\n * @extends FadeTo\n * @param {Number} duration duration in seconds\n */\ncc.FadeOut = cc.Class({\n name: 'cc.FadeOut',\n extends: cc.FadeTo,\n\n ctor:function (duration) {\n if (duration == null)\n duration = 0;\n this._reverseAction = null;\n this.initWithDuration(duration, 0);\n },\n\n reverse:function () {\n var action = new cc.FadeIn();\n action._reverseAction = this;\n action.initWithDuration(this._duration, 255);\n this._cloneDecoration(action);\n this._reverseEaseList(action);\n return action;\n },\n\n clone:function () {\n var action = new cc.FadeOut();\n this._cloneDecoration(action);\n action.initWithDuration(this._duration, this._toOpacity);\n return action;\n }\n});\n\n/**\n * !#en Fades Out an object that implements the cc.RGBAProtocol protocol. It modifies the opacity from 255 to 0.\n * !#zh 渐隐效果。\n * @method fadeOut\n * @param {Number} d duration in seconds\n * @return {ActionInterval}\n * @example\n * // example\n * var action = cc.fadeOut(1.0);\n */\ncc.fadeOut = function (d) {\n return new cc.FadeOut(d);\n};\n\n/* Tints a Node that implements the cc.NodeRGB protocol from current tint to a custom one.\n * @warning This action doesn't support \"reverse\"\n * @class TintTo\n * @extends ActionInterval\n * @param {Number} duration\n * @param {Number} red 0-255\n * @param {Number} green 0-255\n * @param {Number} blue 0-255\n * @example\n * var action = new cc.TintTo(2, 255, 0, 255);\n */\ncc.TintTo = cc.Class({\n name: 'cc.TintTo',\n extends: cc.ActionInterval,\n\n ctor:function (duration, red, green, blue) {\n this._to = cc.color(0, 0, 0);\n this._from = cc.color(0, 0, 0);\n\n if (red instanceof cc.Color) {\n blue = red.b;\n green = red.g;\n red = red.r;\n }\n\n blue !== undefined && this.initWithDuration(duration, red, green, blue);\n },\n\n /*\n * Initializes the action.\n * @param {Number} duration\n * @param {Number} red 0-255\n * @param {Number} green 0-255\n * @param {Number} blue 0-255\n * @return {Boolean}\n */\n initWithDuration:function (duration, red, green, blue) {\n if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) {\n this._to = cc.color(red, green, blue);\n return true;\n }\n return false;\n },\n\n clone:function () {\n var action = new cc.TintTo();\n this._cloneDecoration(action);\n var locTo = this._to;\n action.initWithDuration(this._duration, locTo.r, locTo.g, locTo.b);\n return action;\n },\n\n startWithTarget:function (target) {\n cc.ActionInterval.prototype.startWithTarget.call(this, target);\n\n this._from = this.target.color;\n },\n\n update:function (dt) {\n dt = this._computeEaseTime(dt);\n var locFrom = this._from, locTo = this._to;\n if (locFrom) {\n this.target.color = cc.color(\n locFrom.r + (locTo.r - locFrom.r) * dt,\n locFrom.g + (locTo.g - locFrom.g) * dt,\n locFrom.b + (locTo.b - locFrom.b) * dt);\n }\n }\n});\n\n/**\n * !#en Tints a Node that implements the cc.NodeRGB protocol from current tint to a custom one.\n * !#zh 修改颜色到指定值。\n * @method tintTo\n * @param {Number} duration\n * @param {Number} red 0-255\n * @param {Number} green 0-255\n * @param {Number} blue 0-255\n * @return {ActionInterval}\n * @example\n * // example\n * var action = cc.tintTo(2, 255, 0, 255);\n */\ncc.tintTo = function (duration, red, green, blue) {\n return new cc.TintTo(duration, red, green, blue);\n};\n\n\n/* Tints a Node that implements the cc.NodeRGB protocol from current tint to a custom one.\n * Relative to their own color change.\n * @class TintBy\n * @extends ActionInterval\n * @param {Number} duration duration in seconds\n * @param {Number} deltaRed\n * @param {Number} deltaGreen\n * @param {Number} deltaBlue\n * @example\n * var action = new cc.TintBy(2, -127, -255, -127);\n */\ncc.TintBy = cc.Class({\n name: 'cc.TintBy',\n extends: cc.ActionInterval,\n\n ctor:function (duration, deltaRed, deltaGreen, deltaBlue) {\n this._deltaR = 0;\n this._deltaG = 0;\n this._deltaB = 0;\n this._fromR = 0;\n this._fromG = 0;\n this._fromB = 0;\n\t\tdeltaBlue !== undefined && this.initWithDuration(duration, deltaRed, deltaGreen, deltaBlue);\n },\n\n /*\n * Initializes the action.\n * @param {Number} duration\n * @param {Number} deltaRed 0-255\n * @param {Number} deltaGreen 0-255\n * @param {Number} deltaBlue 0-255\n * @return {Boolean}\n */\n initWithDuration:function (duration, deltaRed, deltaGreen, deltaBlue) {\n if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) {\n this._deltaR = deltaRed;\n this._deltaG = deltaGreen;\n this._deltaB = deltaBlue;\n return true;\n }\n return false;\n },\n\n clone:function () {\n var action = new cc.TintBy();\n this._cloneDecoration(action);\n action.initWithDuration(this._duration, this._deltaR, this._deltaG, this._deltaB);\n return action;\n },\n\n startWithTarget:function (target) {\n cc.ActionInterval.prototype.startWithTarget.call(this, target);\n\n var color = target.color;\n this._fromR = color.r;\n this._fromG = color.g;\n this._fromB = color.b;\n },\n\n update:function (dt) {\n dt = this._computeEaseTime(dt);\n\n this.target.color = cc.color(this._fromR + this._deltaR * dt,\n this._fromG + this._deltaG * dt,\n this._fromB + this._deltaB * dt);\n },\n\n reverse:function () {\n var action = new cc.TintBy(this._duration, -this._deltaR, -this._deltaG, -this._deltaB);\n this._cloneDecoration(action);\n this._reverseEaseList(action);\n return action;\n }\n});\n\n/**\n * !#en\n * Tints a Node that implements the cc.NodeRGB protocol from current tint to a custom one.\n * Relative to their own color change.\n * !#zh 按照指定的增量修改颜色。\n * @method tintBy\n * @param {Number} duration duration in seconds\n * @param {Number} deltaRed\n * @param {Number} deltaGreen\n * @param {Number} deltaBlue\n * @return {ActionInterval}\n * @example\n * // example\n * var action = cc.tintBy(2, -127, -255, -127);\n */\ncc.tintBy = function (duration, deltaRed, deltaGreen, deltaBlue) {\n return new cc.TintBy(duration, deltaRed, deltaGreen, deltaBlue);\n};\n\n/* Delays the action a certain amount of seconds\n * @class DelayTime\n * @extends ActionInterval\n */\ncc.DelayTime = cc.Class({\n name: 'cc.DelayTime',\n extends: cc.ActionInterval,\n\n update:function (dt) {},\n\n reverse:function () {\n var action = new cc.DelayTime(this._duration);\n this._cloneDecoration(action);\n this._reverseEaseList(action);\n return action;\n },\n\n clone:function () {\n var action = new cc.DelayTime();\n this._cloneDecoration(action);\n action.initWithDuration(this._duration);\n return action;\n }\n});\n\n/**\n * !#en Delays the action a certain amount of seconds.\n * !#zh 延迟指定的时间量。\n * @method delayTime\n * @param {Number} d duration in seconds\n * @return {ActionInterval}\n * @example\n * // example\n * var delay = cc.delayTime(1);\n */\ncc.delayTime = function (d) {\n return new cc.DelayTime(d);\n};\n\n/*\n *

\n * Executes an action in reverse order, from time=duration to time=0
\n * @warning Use this action carefully. This action is not sequenceable.
\n * Use it as the default \"reversed\" method of your own actions, but using it outside the \"reversed\"
\n * scope is not recommended.\n *

\n * @class ReverseTime\n * @extends ActionInterval\n * @param {FiniteTimeAction} action\n * @example\n * var reverse = new cc.ReverseTime(this);\n */\ncc.ReverseTime = cc.Class({\n name: 'cc.ReverseTime',\n extends: cc.ActionInterval,\n\n ctor:function (action) {\n this._other = null;\n\t\taction && this.initWithAction(action);\n },\n\n /*\n * @param {FiniteTimeAction} action\n * @return {Boolean}\n */\n initWithAction:function (action) {\n if (!action) {\n cc.errorID(1028);\n return false;\n }\n if (action === this._other) {\n cc.errorID(1029);\n return false;\n }\n\n if (cc.ActionInterval.prototype.initWithDuration.call(this, action._duration)) {\n // Don't leak if action is reused\n this._other = action;\n return true;\n }\n return false;\n },\n\n clone:function () {\n var action = new cc.ReverseTime();\n this._cloneDecoration(action);\n action.initWithAction(this._other.clone());\n return action;\n },\n\n startWithTarget:function (target) {\n cc.ActionInterval.prototype.startWithTarget.call(this, target);\n this._other.startWithTarget(target);\n },\n\n update:function (dt) {\n dt = this._computeEaseTime(dt);\n if (this._other)\n this._other.update(1 - dt);\n },\n\n reverse:function () {\n return this._other.clone();\n },\n\n stop:function () {\n this._other.stop();\n cc.Action.prototype.stop.call(this);\n }\n});\n\n/**\n * !#en Executes an action in reverse order, from time=duration to time=0.\n * !#zh 反转目标动作的时间轴。\n * @method reverseTime\n * @param {FiniteTimeAction} action\n * @return {ActionInterval}\n * @example\n * // example\n * var reverse = cc.reverseTime(this);\n */\ncc.reverseTime = function (action) {\n return new cc.ReverseTime(action);\n};\n\n/*\n *

\n * Overrides the target of an action so that it always runs on the target
\n * specified at action creation rather than the one specified by runAction.\n *

\n * @class TargetedAction\n * @extends ActionInterval\n * @param {Node} target\n * @param {FiniteTimeAction} action\n */\ncc.TargetedAction = cc.Class({\n name: 'cc.TargetedAction',\n extends: cc.ActionInterval,\n\n ctor: function (target, action) {\n this._action = null;\n this._forcedTarget = null;\n\t\taction && this.initWithTarget(target, action);\n },\n\n /*\n * Init an action with the specified action and forced target\n * @param {Node} target\n * @param {FiniteTimeAction} action\n * @return {Boolean}\n */\n initWithTarget:function (target, action) {\n if (this.initWithDuration(action._duration)) {\n this._forcedTarget = target;\n this._action = action;\n return true;\n }\n return false;\n },\n\n clone:function () {\n var action = new cc.TargetedAction();\n this._cloneDecoration(action);\n action.initWithTarget(this._forcedTarget, this._action.clone());\n return action;\n },\n\n startWithTarget:function (target) {\n cc.ActionInterval.prototype.startWithTarget.call(this, target);\n this._action.startWithTarget(this._forcedTarget);\n },\n\n stop:function () {\n this._action.stop();\n },\n\n update:function (dt) {\n dt = this._computeEaseTime(dt);\n this._action.update(dt);\n },\n\n /*\n * return the target that the action will be forced to run with\n * @return {Node}\n */\n getForcedTarget:function () {\n return this._forcedTarget;\n },\n\n /*\n * set the target that the action will be forced to run with\n * @param {Node} forcedTarget\n */\n setForcedTarget:function (forcedTarget) {\n if (this._forcedTarget !== forcedTarget)\n this._forcedTarget = forcedTarget;\n }\n});\n\n/**\n * !#en Create an action with the specified action and forced target.\n * !#zh 用已有动作和一个新的目标节点创建动作。\n * @method targetedAction\n * @param {Node} target\n * @param {FiniteTimeAction} action\n * @return {ActionInterval}\n */\ncc.targetedAction = function (target, action) {\n return new cc.TargetedAction(target, action);\n};\n","/****************************************************************************\n Copyright (c) 2008-2010 Ricardo Quesada\n Copyright (c) 2011-2012 cocos2d-x.org\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos2d-x.org\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nrequire('../core/platform/CCClass');\nvar js = require('../core/platform/js');\n\n/*\n * @class HashElement\n * @constructor\n * @private\n */\nvar HashElement = function () {\n this.actions = [];\n this.target = null; //ccobject\n this.actionIndex = 0;\n this.currentAction = null; //CCAction\n this.paused = false;\n this.lock = false;\n};\n\n/**\n * !#en\n * cc.ActionManager is a class that can manage actions.
\n * Normally you won't need to use this class directly. 99% of the cases you will use the CCNode interface,\n * which uses this class's singleton object.\n * But there are some cases where you might need to use this class.
\n * Examples:
\n * - When you want to run an action where the target is different from a CCNode.
\n * - When you want to pause / resume the actions
\n * !#zh\n * cc.ActionManager 是可以管理动作的单例类。
\n * 通常你并不需要直接使用这个类,99%的情况您将使用 CCNode 的接口。
\n * 但也有一些情况下,您可能需要使用这个类。
\n * 例如:\n * - 当你想要运行一个动作,但目标不是 CCNode 类型时。
\n * - 当你想要暂停/恢复动作时。
\n * @class ActionManager\n * @example {@link cocos2d/core/CCActionManager/ActionManager.js}\n */\ncc.ActionManager = function () {\n this._hashTargets = js.createMap(true);\n this._arrayTargets = [];\n this._currentTarget = null;\n cc.director._scheduler && cc.director._scheduler.enableForTarget(this);\n};\ncc.ActionManager.prototype = {\n constructor: cc.ActionManager,\n _elementPool: [],\n\n _searchElementByTarget:function (arr, target) {\n for (var k = 0; k < arr.length; k++) {\n if (target === arr[k].target)\n return arr[k];\n }\n return null;\n },\n\n _getElement: function (target, paused) {\n var element = this._elementPool.pop();\n if (!element) {\n element = new HashElement();\n }\n element.target = target;\n element.paused = !!paused;\n return element;\n },\n\n _putElement: function (element) {\n element.actions.length = 0;\n element.actionIndex = 0;\n element.currentAction = null;\n element.paused = false;\n element.target = null;\n element.lock = false;\n this._elementPool.push(element);\n },\n\n /**\n * !#en\n * Adds an action with a target.
\n * If the target is already present, then the action will be added to the existing target.\n * If the target is not present, a new instance of this target will be created either paused or not, and the action will be added to the newly created target.\n * When the target is paused, the queued actions won't be 'ticked'.\n * !#zh\n * 增加一个动作,同时还需要提供动作的目标对象,目标对象是否暂停作为参数。
\n * 如果目标已存在,动作将会被直接添加到现有的节点中。
\n * 如果目标不存在,将为这一目标创建一个新的实例,并将动作添加进去。
\n * 当目标状态的 paused 为 true,动作将不会被执行\n *\n * @method addAction\n * @param {Action} action\n * @param {Node} target\n * @param {Boolean} paused\n */\n addAction:function (action, target, paused) {\n if (!action || !target) {\n cc.errorID(1000);\n return;\n }\n\n //check if the action target already exists\n var element = this._hashTargets[target._id];\n //if doesn't exists, create a hashelement and push in mpTargets\n if (!element) {\n element = this._getElement(target, paused);\n this._hashTargets[target._id] = element;\n this._arrayTargets.push(element);\n }\n else if (!element.actions) {\n element.actions = [];\n }\n\n element.actions.push(action);\n action.startWithTarget(target);\n },\n\n /**\n * !#en Removes all actions from all the targets.\n * !#zh 移除所有对象的所有动作。\n * @method removeAllActions\n */\n removeAllActions:function () {\n var locTargets = this._arrayTargets;\n for (var i = 0; i < locTargets.length; i++) {\n var element = locTargets[i];\n if (element)\n this._putElement(element);\n }\n this._arrayTargets.length = 0;\n this._hashTargets = js.createMap(true);\n },\n /**\n * !#en\n * Removes all actions from a certain target.
\n * All the actions that belongs to the target will be removed.\n * !#zh\n * 移除指定对象上的所有动作。
\n * 属于该目标的所有的动作将被删除。\n * @method removeAllActionsFromTarget\n * @param {Node} target\n * @param {Boolean} forceDelete\n */\n removeAllActionsFromTarget:function (target, forceDelete) {\n // explicit null handling\n if (target == null)\n return;\n var element = this._hashTargets[target._id];\n if (element) {\n element.actions.length = 0;\n this._deleteHashElement(element);\n }\n },\n /**\n * !#en Removes an action given an action reference.\n * !#zh 移除指定的动作。\n * @method removeAction \n * @param {Action} action\n */\n removeAction:function (action) {\n // explicit null handling\n if (!action) {\n return;\n }\n var target = action.getOriginalTarget();\n var element = this._hashTargets[target._id];\n\n if (!element) {\n return;\n }\n\n for (var i = 0; i < element.actions.length; i++) {\n if (element.actions[i] === action) {\n element.actions.splice(i, 1);\n // update actionIndex in case we are in tick. looping over the actions\n if (element.actionIndex >= i)\n element.actionIndex--;\n break;\n }\n }\n },\n\n _removeActionByTag (tag, element, target) {\n for (var i = 0, l = element.actions.length; i < l; ++i) {\n var action = element.actions[i];\n if (action && action.getTag() === tag) {\n if (target && action.getOriginalTarget() !== target) {\n continue;\n }\n this._removeActionAtIndex(i, element);\n break;\n }\n }\n },\n\n /**\n * !#en Removes an action given its tag and the target.\n * !#zh 删除指定对象下特定标签的一个动作,将删除首个匹配到的动作。\n * @method removeActionByTag\n * @param {Number} tag\n * @param {Node} [target]\n */\n removeActionByTag:function (tag, target) {\n if(tag === cc.Action.TAG_INVALID)\n cc.logID(1002);\n\n let hashTargets = this._hashTargets;\n if (target) {\n var element = hashTargets[target._id];\n if (element) {\n this._removeActionByTag(tag, element, target);\n }\n }\n else {\n for (let name in hashTargets) {\n let element = hashTargets[name];\n this._removeActionByTag(tag, element);\n }\n }\n },\n\n /**\n * !#en Gets an action given its tag an a target.\n * !#zh 通过目标对象和标签获取一个动作。\n * @method getActionByTag\n * @param {Number} tag\n * @param {Node} target\n * @return {Action|Null} return the Action with the given tag on success\n */\n getActionByTag:function (tag, target) {\n if(tag === cc.Action.TAG_INVALID)\n cc.logID(1004);\n\n var element = this._hashTargets[target._id];\n if (element) {\n if (element.actions != null) {\n for (var i = 0; i < element.actions.length; ++i) {\n var action = element.actions[i];\n if (action && action.getTag() === tag)\n return action;\n }\n }\n cc.logID(1005, tag);\n }\n return null;\n },\n\n\n /**\n * !#en\n * Returns the numbers of actions that are running in a certain target.
\n * Composable actions are counted as 1 action.
\n * Example:
\n * - If you are running 1 Sequence of 7 actions, it will return 1.
\n * - If you are running 7 Sequences of 2 actions, it will return 7.\n * !#zh\n * 返回指定对象下所有正在运行的动作数量。
\n * 组合动作被算作一个动作。
\n * 例如:
\n * - 如果您正在运行 7 个动作组成的序列动作(Sequence),这个函数将返回 1。
\n * - 如果你正在运行 2 个序列动作(Sequence)和 5 个普通动作,这个函数将返回 7。
\n *\n * @method getNumberOfRunningActionsInTarget\n * @param {Node} target\n * @return {Number}\n */\n getNumberOfRunningActionsInTarget:function (target) {\n var element = this._hashTargets[target._id];\n if (element)\n return (element.actions) ? element.actions.length : 0;\n\n return 0;\n },\n /**\n * !#en Pauses the target: all running actions and newly added actions will be paused.\n * !#zh 暂停指定对象:所有正在运行的动作和新添加的动作都将会暂停。\n * @method pauseTarget\n * @param {Node} target\n */\n pauseTarget:function (target) {\n var element = this._hashTargets[target._id];\n if (element)\n element.paused = true;\n },\n /**\n * !#en Resumes the target. All queued actions will be resumed.\n * !#zh 让指定目标恢复运行。在执行序列中所有被暂停的动作将重新恢复运行。\n * @method resumeTarget\n * @param {Node} target\n */\n resumeTarget:function (target) {\n var element = this._hashTargets[target._id];\n if (element)\n element.paused = false;\n },\n\n /**\n * !#en Pauses all running actions, returning a list of targets whose actions were paused.\n * !#zh 暂停所有正在运行的动作,返回一个包含了那些动作被暂停了的目标对象的列表。\n * @method pauseAllRunningActions\n * @return {Array} a list of targets whose actions were paused.\n */\n pauseAllRunningActions:function(){\n var idsWithActions = [];\n var locTargets = this._arrayTargets;\n for(var i = 0; i< locTargets.length; i++){\n var element = locTargets[i];\n if(element && !element.paused){\n element.paused = true;\n idsWithActions.push(element.target);\n }\n }\n return idsWithActions;\n },\n\n /**\n * !#en Resume a set of targets (convenience function to reverse a pauseAllRunningActions or pauseTargets call).\n * !#zh 让一组指定对象恢复运行(用来逆转 pauseAllRunningActions 效果的便捷函数)。\n * @method resumeTargets\n * @param {Array} targetsToResume\n */\n resumeTargets:function(targetsToResume){\n if (!targetsToResume)\n return;\n\n for (var i = 0; i< targetsToResume.length; i++) {\n if(targetsToResume[i])\n this.resumeTarget(targetsToResume[i]);\n }\n },\n\n /**\n * !#en Pause a set of targets.\n * !#zh 暂停一组指定对象。\n * @method pauseTargets\n * @param {Array} targetsToPause\n */\n pauseTargets:function(targetsToPause){\n if (!targetsToPause)\n return;\n\n for (var i = 0; i< targetsToPause.length; i++) {\n if (targetsToPause[i])\n this.pauseTarget(targetsToPause[i]);\n }\n },\n\n /**\n * !#en\n * purges the shared action manager. It releases the retained instance.
\n * because it uses this, so it can not be static.\n * !#zh\n * 清除共用的动作管理器。它释放了持有的实例。
\n * 因为它使用 this,因此它不能是静态的。\n * @method purgeSharedManager\n */\n purgeSharedManager:function () {\n cc.director.getScheduler().unscheduleUpdate(this);\n },\n\n //protected\n _removeActionAtIndex:function (index, element) {\n var action = element.actions[index];\n\n element.actions.splice(index, 1);\n\n // update actionIndex in case we are in tick. looping over the actions\n if (element.actionIndex >= index)\n element.actionIndex--;\n\n if (element.actions.length === 0) {\n this._deleteHashElement(element);\n }\n },\n\n _deleteHashElement:function (element) {\n var ret = false;\n if (element && !element.lock) {\n if (this._hashTargets[element.target._id]) {\n delete this._hashTargets[element.target._id];\n var targets = this._arrayTargets;\n for (var i = 0, l = targets.length; i < l; i++) {\n if (targets[i] === element) {\n targets.splice(i, 1);\n break;\n }\n }\n this._putElement(element);\n ret = true;\n }\n }\n return ret;\n },\n\n /**\n * !#en The ActionManager update。\n * !#zh ActionManager 主循环。\n * @method update\n * @param {Number} dt delta time in seconds\n */\n update:function (dt) {\n var locTargets = this._arrayTargets , locCurrTarget;\n for (var elt = 0; elt < locTargets.length; elt++) {\n this._currentTarget = locTargets[elt];\n locCurrTarget = this._currentTarget;\n if (!locCurrTarget.paused && locCurrTarget.actions) {\n locCurrTarget.lock = true;\n // The 'actions' CCMutableArray may change while inside this loop.\n for (locCurrTarget.actionIndex = 0; locCurrTarget.actionIndex < locCurrTarget.actions.length; locCurrTarget.actionIndex++) {\n locCurrTarget.currentAction = locCurrTarget.actions[locCurrTarget.actionIndex];\n if (!locCurrTarget.currentAction)\n continue;\n\n //use for speed\n locCurrTarget.currentAction.step(dt * ( locCurrTarget.currentAction._speedMethod ? locCurrTarget.currentAction._speed : 1 ) );\n \n if (locCurrTarget.currentAction && locCurrTarget.currentAction.isDone()) {\n locCurrTarget.currentAction.stop();\n var action = locCurrTarget.currentAction;\n // Make currentAction nil to prevent removeAction from salvaging it.\n locCurrTarget.currentAction = null;\n this.removeAction(action);\n }\n\n locCurrTarget.currentAction = null;\n }\n locCurrTarget.lock = false;\n }\n // only delete currentTarget if no actions were scheduled during the cycle (issue #481)\n if (locCurrTarget.actions.length === 0) {\n this._deleteHashElement(locCurrTarget) && elt--;\n }\n }\n }\n};\n\nif (CC_TEST) {\n cc.ActionManager.prototype.isTargetPaused_TEST = function (target) {\n var element = this._hashTargets[target._id];\n return element.paused;\n };\n}\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nrequire('./CCActionManager');\nrequire('./CCAction');\nrequire('./CCActionInterval');\nrequire('./CCActionInstant');\nrequire('./CCActionEase');\nrequire('./CCActionCatmullRom');\nrequire('./tween');\n","import { bezier } from '../animation/bezier';\n\nlet _tweenID = 0;\n\nlet TweenAction = cc.Class({\n name: 'cc.TweenAction',\n extends: cc.ActionInterval,\n\n ctor (duration, props, opts) {\n this._opts = opts = opts || Object.create(null);\n this._props = Object.create(null);\n\n // global easing or progress used for this action\n opts.progress = opts.progress || this.progress;\n if (opts.easing && typeof opts.easing === 'string') {\n let easingName = opts.easing;\n opts.easing = cc.easing[easingName];\n !opts.easing && cc.warnID(1031, easingName);\n }\n\n let relative = this._opts.relative;\n\n for (let name in props) {\n let value = props[name];\n\n // property may have custom easing or progress function\n let easing, progress;\n if (value.value !== undefined && (value.easing || value.progress)) {\n if (typeof value.easing === 'string') {\n easing = cc.easing[value.easing];\n !easing && cc.warnID(1031, value.easing);\n }\n else {\n easing = value.easing;\n }\n progress = value.progress;\n value = value.value;\n }\n\n let isNumber = typeof value === 'number';\n if (!isNumber && (!value.lerp || (relative && !value.add && !value.mul) || !value.clone)) {\n cc.warn(`Can not animate ${name} property, because it do not have [lerp, (add|mul), clone] function.`);\n continue;\n }\n\n let prop = Object.create(null);\n prop.value = value;\n prop.easing = easing;\n prop.progress = progress;\n this._props[name] = prop;\n }\n\n this._originProps = props;\n this.initWithDuration(duration);\n },\n\n clone () {\n var action = new TweenAction(this._duration, this._originProps, this._opts);\n this._cloneDecoration(action);\n return action;\n },\n\n startWithTarget (target) {\n cc.ActionInterval.prototype.startWithTarget.call(this, target);\n\n let relative = !!this._opts.relative;\n let props = this._props;\n for (let name in props) {\n let value = target[name];\n let prop = props[name];\n\n if (typeof value === 'number') {\n prop.start = value;\n prop.current = value;\n prop.end = relative ? value + prop.value : prop.value;\n }\n else {\n prop.start = value.clone();\n prop.current = value.clone();\n prop.end = relative ? (value.add || value.mul).call(value, prop.value) : prop.value;\n }\n }\n },\n\n update (t) {\n let opts = this._opts;\n let easingTime = t;\n if (opts.easing) easingTime = opts.easing(t);\n\n let target = this.target;\n if (!target) return;\n\n let props = this._props;\n let progress = opts.progress;\n for (let name in props) {\n let prop = props[name];\n let time = prop.easing ? prop.easing(t) : easingTime;\n let current = prop.current = (prop.progress || progress)(prop.start, prop.end, prop.current, time);\n target[name] = current;\n }\n\n let onUpdate = opts.onUpdate;\n if (onUpdate) {\n onUpdate(target, t)\n }\n },\n\n progress (start, end, current, t) {\n if (typeof start === 'number') {\n current = start + (end - start) * t;\n }\n else {\n start.lerp(end, t, current);\n }\n return current;\n }\n});\n\nlet SetAction = cc.Class({\n name: 'cc.SetAction',\n extends: cc.ActionInstant,\n\n ctor (props) {\n this._props = {};\n props !== undefined && this.init(props);\n },\n\n init (props) {\n for (let name in props) {\n this._props[name] = props[name];\n }\n return true;\n },\n\n update () {\n let props = this._props;\n let target = this.target;\n for (let name in props) {\n target[name] = props[name];\n }\n },\n\n clone () {\n var action = new SetAction();\n action.init(this._props);\n return action;\n }\n});\n\n\n\n/**\n * !#en\n * Tween provide a simple and flexible way to create action. Tween's api is more flexible than `cc.Action`:\n * - Support creating an action sequence in chained api.\n * - Support animate any objects' any properties, not limited to node's properties. By contrast, `cc.Action` needs to create a new action class to support new node property.\n * - Support working with `cc.Action`.\n * - Support easing and progress function.\n * !#zh\n * Tween 提供了一个简单灵活的方法来创建 action。相对于 Cocos 传统的 `cc.Action`,`cc.Tween` 在创建动画上要灵活非常多:\n * - 支持以链式结构的方式创建一个动画序列。\n * - 支持对任意对象的任意属性进行缓动,不再局限于节点上的属性,而 `cc.Action` 添加一个属性的支持时还需要添加一个新的 action 类型。\n * - 支持与 `cc.Action` 混用。\n * - 支持设置 {{#crossLink \"Easing\"}}{{/crossLink}} 或者 progress 函数。\n * @class Tween\n * @example\n * cc.tween(node)\n * .to(1, {scale: 2, position: cc.v3(100, 100, 100)})\n * .call(() => { console.log('This is a callback'); })\n * .by(1, {scale: 3, position: cc.v3(200, 200, 200)}, {easing: 'sineOutIn'})\n * .start(cc.find('Canvas/cocos'));\n * @typescript Tween\n */\nfunction Tween (target) {\n this._actions = [];\n this._finalAction = null;\n this._target = target;\n this._tag = cc.Action.TAG_INVALID;\n}\n\n/**\n * @method constructor\n * @param {Object} [target]\n */\n\n/**\n * !#en Stop all tweens\n * !#zh 停止所有缓动\n * @method stopAll\n * @static\n */\nTween.stopAll = function () {\n cc.director.getActionManager().removeAllActions();\n}\n/**\n * !#en Stop all tweens by tag\n * !#zh 停止所有指定标签的缓动\n * @method stopAllByTag\n * @static\n * @param {number} tag\n */\nTween.stopAllByTag = function (tag) {\n cc.director.getActionManager().removeActionByTag(tag);\n}\n/**\n * !#en Stop all tweens by target\n * !#zh 停止所有指定对象的缓动\n * @method stopAllByTarget\n * @static\n * @param {Object} target\n */\nTween.stopAllByTarget = function (target) {\n cc.director.getActionManager().removeAllActionsFromTarget(target);\n}\n\n/**\n * !#en\n * Insert an action or tween to this sequence\n * !#zh\n * 插入一个 action 或者 tween 到队列中\n * @method then \n * @param {Action|Tween} other\n * @return {Tween}\n * @typescript then(other: Action|Tween): Tween\n */\nTween.prototype.then = function (other) {\n if (other instanceof cc.Action) {\n this._actions.push(other.clone());\n }\n else {\n this._actions.push(other._union());\n }\n return this;\n};\n\n\n/**\n * !#en\n * Set tween target\n * !#zh\n * 设置 tween 的 target\n * @method target\n * @param {Object} target\n * @return {Tween}\n * @typescript target(target: any): Tween\n */\nTween.prototype.target = function (target) {\n this._target = target;\n return this;\n};\n\n/**\n * !#en\n * Start this tween\n * !#zh\n * 运行当前 tween\n * @method start\n * @return {Tween}\n * @typescript start(): Tween\n */\nTween.prototype.start = function () {\n let target = this._target;\n if (!target) {\n cc.warn('Please set target to tween first');\n return this;\n }\n if (target instanceof cc.Object && !target.isValid) {\n return;\n }\n\n if (this._finalAction) {\n cc.director.getActionManager().removeAction(this._finalAction);\n }\n this._finalAction = this._union();\n\n if (target._id === undefined) {\n target._id = ++_tweenID;\n }\n\n this._finalAction.setTag(this._tag);\n cc.director.getActionManager().addAction(this._finalAction, target, false);\n return this;\n};\n\n/**\n * !#en\n * Stop this tween\n * !#zh\n * 停止当前 tween\n * @method stop\n * @return {Tween}\n * @typescript stop(): Tween\n */\nTween.prototype.stop = function () {\n if (this._finalAction) {\n cc.director.getActionManager().removeAction(this._finalAction);\n }\n return this;\n};\n\n\n/**\n * !#en Sets tween tag\n * !#zh 设置缓动的标签\n * @method tag\n * @param {number} tag\n * @return {Tween}\n * @typescript tag(tag: number): Tween\n */\nTween.prototype.tag = function (tag) {\n this._tag = tag;\n return this;\n};\n\n\n/**\n * !#en\n * Clone a tween\n * !#zh\n * 克隆当前 tween\n * @method clone\n * @param {Object} [target]\n * @return {Tween}\n * @typescript clone(target?: any): Tween\n */\nTween.prototype.clone = function (target) {\n let action = this._union();\n return cc.tween(target).then(action.clone());\n};\n\n/**\n * !#en\n * Integrate all previous actions to an action.\n * !#zh\n * 将之前所有的 action 整合为一个 action。\n * @method union\n * @return {Tween}\n * @typescritp union(): Tween\n */\nTween.prototype.union = function () {\n let action = this._union();\n this._actions.length = 0;\n this._actions.push(action);\n return this;\n};\n\nTween.prototype._union = function () {\n let actions = this._actions;\n\n if (actions.length === 1) {\n actions = actions[0];\n }\n else {\n actions = cc.sequence(actions);\n }\n\n return actions;\n};\n\nObject.assign(Tween.prototype, {\n /**\n * !#en Sets target's position property according to the bezier curve.\n * !#zh 按照贝塞尔路径设置目标的 position 属性。\n * @method bezierTo\n * @param {number} duration\n * @param {cc.Vec2} c1\n * @param {cc.Vec2} c2\n * @param {cc.Vec2} to\n * @return {Tween}\n * @typescript bezierTo(duration: number, c1: Vec2, c2: Vec2, to: Vec2): Tween\n */\n bezierTo (duration, c1, c2, to, opts) {\n let c0x = c1.x, c0y = c1.y,\n c1x = c2.x, c1y = c2.y;\n opts = opts || Object.create(null);\n opts.progress = function (start, end, current, t) {\n current.x = bezier(start.x, c0x, c1x, end.x, t);\n current.y = bezier(start.y, c0y, c1y, end.y, t);\n return current;\n }\n return this.to(duration, { position: to }, opts);\n },\n\n /**\n * !#en Sets target's position property according to the bezier curve.\n * !#zh 按照贝塞尔路径设置目标的 position 属性。\n * @method bezierBy\n * @param {number} duration\n * @param {cc.Vec2} c1\n * @param {cc.Vec2} c2\n * @param {cc.Vec2} to\n * @return {Tween}\n * @typescript bezierBy(duration: number, c1: Vec2, c2: Vec2, to: Vec2): Tween\n */\n bezierBy (duration, c1, c2, to, opts) {\n let c0x = c1.x, c0y = c1.y,\n c1x = c2.x, c1y = c2.y;\n opts = opts || Object.create(null);\n opts.progress = function (start, end, current, t) {\n let sx = start.x, sy = start.y;\n current.x = bezier(sx, c0x + sx, c1x + sx, end.x, t);\n current.y = bezier(sy, c0y + sy, c1y + sy, end.y, t);\n return current;\n }\n return this.by(duration, { position: to }, opts);\n },\n\n /**\n * !#en Flips target's scaleX\n * !#zh 翻转目标的 scaleX 属性\n * @method flipX\n * @return {Tween}\n * @typescript flipX(): Tween\n */\n flipX () {\n return this.call(() => { this._target.scaleX *= -1; }, this);\n \n },\n /**\n * !#en Flips target's scaleY\n * !#zh 翻转目标的 scaleY 属性\n * @method flipY\n * @return {Tween}\n * @typescript flipY(): Tween\n */\n flipY () {\n return this.call(() => { this._target.scaleY *= -1; }, this);\n },\n\n /**\n * !#en Blinks target by set target's opacity property\n * !#zh 通过设置目标的 opacity 属性达到闪烁效果\n * @method blink\n * @param {number} duration\n * @param {number} times\n * @param {Object} [opts]\n * @param {Function} [opts.progress]\n * @param {Function|String} [opts.easing]\n * @return {Tween}\n * @typescript blink(duration: number, times: number, opts?: {progress?: Function; easing?: Function|string; }): Tween\n */\n blink (duration, times, opts) {\n var slice = 1.0 / times;\n opts = opts || Object.create(null);\n opts.progress = function (start, end, current, t) {\n if (t >= 1) {\n return start;\n }\n else {\n var m = t % slice;\n return (m > (slice / 2)) ? 255 : 0;\n }\n };\n return this.to(duration, { opacity: 1 }, opts);\n },\n})\n\nlet tmp_args = [];\n\nfunction wrapAction (action) {\n return function () {\n tmp_args.length = 0;\n for (let l = arguments.length, i = 0; i < l; i++) {\n let arg = tmp_args[i] = arguments[i];\n if (arg instanceof Tween) {\n tmp_args[i] = arg._union();\n }\n }\n\n return action.apply(this, tmp_args);\n };\n}\n\nlet actions = {\n /**\n * !#en\n * Add an action which calculate with absolute value\n * !#zh\n * 添加一个对属性进行绝对值计算的 action\n * @method to\n * @param {Number} duration\n * @param {Object} props - {scale: 2, position: cc.v3(100, 100, 100)}\n * @param {Object} [opts]\n * @param {Function} [opts.progress]\n * @param {Function|String} [opts.easing]\n * @return {Tween}\n * @typescript\n * to>(duration: number, props: ConstructorType, opts?: OPTS): Tween\n */\n to (duration, props, opts) {\n opts = opts || Object.create(null);\n opts.relative = false;\n return new TweenAction(duration, props, opts);\n },\n\n /**\n * !#en\n * Add an action which calculate with relative value\n * !#zh\n * 添加一个对属性进行相对值计算的 action\n * @method by\n * @param {Number} duration\n * @param {Object} props - {scale: 2, position: cc.v3(100, 100, 100)}\n * @param {Object} [opts]\n * @param {Function} [opts.progress]\n * @param {Function|String} [opts.easing]\n * @return {Tween}\n * @typescript\n * by>(duration: number, props: ConstructorType, opts?: OPTS): Tween\n */\n by (duration, props, opts) {\n opts = opts || Object.create(null);\n opts.relative = true;\n return new TweenAction(duration, props, opts);\n },\n\n /**\n * !#en\n * Directly set target properties\n * !#zh\n * 直接设置 target 的属性\n * @method set\n * @param {Object} props\n * @return {Tween}\n * @typescript\n * set (props: ConstructorType) : Tween\n */\n set (props) {\n return new SetAction(props);\n },\n\n /**\n * !#en\n * Add an delay action\n * !#zh\n * 添加一个延时 action\n * @method delay\n * @param {Number} duration\n * @return {Tween}\n * @typescript delay(duration: number): Tween\n */\n delay: cc.delayTime,\n /**\n * !#en\n * Add an callback action\n * !#zh\n * 添加一个回调 action\n * @method call\n * @param {Function} callback\n * @param {object} [selectTarget]\n * @return {Tween}\n * @typescript call(callback: Function, selectTarget?: object): Tween\n */\n call: cc.callFunc,\n /**\n * !#en\n * Add an hide action\n * !#zh\n * 添加一个隐藏 action\n * @method hide\n * @return {Tween}\n * @typescript hide(): Tween\n */\n hide: cc.hide,\n /**\n * !#en\n * Add an show action\n * !#zh\n * 添加一个显示 action\n * @method show\n * @return {Tween}\n * @typescript show(): Tween\n */\n show: cc.show,\n /**\n * !#en\n * Add an removeSelf action\n * !#zh\n * 添加一个移除自己 action\n * @method removeSelf\n * @return {Tween}\n * @typescript removeSelf(): Tween\n */\n removeSelf: cc.removeSelf,\n /**\n * !#en\n * Add an sequence action\n * !#zh\n * 添加一个队列 action\n * @method sequence\n * @param {Action|Tween} action\n * @param {Action|Tween} ...actions\n * @return {Tween}\n * @typescript sequence(action: Action|Tween, ...actions: (Action|Tween)[]): Tween\n */\n sequence: wrapAction(cc.sequence),\n /**\n * !#en\n * Add an parallel action\n * !#zh\n * 添加一个并行 action\n * @method parallel\n * @param {Action|Tween} action\n * @param {Action|Tween} ...actions\n * @return {Tween}\n * @typescript parallel(action: Action|Tween, ...actions: (Action|Tween)[]): Tween\n */\n parallel: wrapAction(cc.spawn)\n};\n\n// these action will use previous action as their parameters\nlet previousAsInputActions = {\n /**\n * !#en\n * Add an repeat action. This action will integrate before actions to a sequence action as their parameters.\n * !#zh\n * 添加一个重复 action,这个 action 会将前一个动作作为他的参数。\n * @method repeat\n * @param {Number} repeatTimes\n * @param {Action | Tween} [action]\n * @return {Tween}\n * @typescript repeat(repeatTimes: number, action?: Action|Tween): Tween\n */\n repeat: cc.repeat,\n /**\n * !#en\n * Add an repeat forever action. This action will integrate before actions to a sequence action as their parameters.\n * !#zh\n * 添加一个永久重复 action,这个 action 会将前一个动作作为他的参数。\n * @method repeatForever\n * @param {Action | Tween} [action]\n * @return {Tween}\n * @typescript repeatForever(action?: Action|Tween): Tween\n */\n repeatForever: function (action) {\n // TODO: fixed with cc.repeatForever\n return cc.repeat(action, 10e8);\n },\n /**\n * !#en\n * Add an reverse time action. This action will integrate before actions to a sequence action as their parameters.\n * !#zh\n * 添加一个倒置时间 action,这个 action 会将前一个动作作为他的参数。\n * @method reverseTime\n * @param {Action | Tween} [action]\n * @return {Tween}\n * @typescript reverseTime(action?: Action|Tween): Tween\n */\n reverseTime: cc.reverseTime,\n};\n\n\nlet keys = Object.keys(actions);\nfor (let i = 0; i < keys.length; i++) {\n let key = keys[i];\n Tween.prototype[key] = function () {\n let action = actions[key].apply(this, arguments);\n this._actions.push(action);\n return this;\n };\n}\n\nkeys = Object.keys(previousAsInputActions);\nfor (let i = 0; i < keys.length; i++) {\n let key = keys[i];\n Tween.prototype[key] = function () {\n\n let actions = this._actions;\n let action = arguments[arguments.length - 1];\n let length = arguments.length - 1;\n\n if (action instanceof cc.Tween) {\n action = action._union();\n }\n else if (!(action instanceof cc.Action)) {\n action = actions[actions.length - 1];\n actions.length -= 1;\n length += 1;\n }\n\n let args = [action];\n for (let i = 0; i < length; i++) {\n args.push(arguments[i]);\n }\n\n action = previousAsInputActions[key].apply(this, args);\n actions.push(action);\n\n return this;\n };\n}\n\n/**\n * @module cc\n */\n\n/**\n * @method tween\n * @param {Object} [target] - the target to animate\n * @return {Tween}\n * @typescript\n * tween (target?: T) : Tween\n */\ncc.tween = function (target) {\n return new Tween(target);\n};\n\ncc.Tween = Tween;\n \n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst js = cc.js;\nconst Playable = require('./playable');\nconst { EventAnimCurve, EventInfo } = require('./animation-curves');\nconst WrapModeMask = require('./types').WrapModeMask;\nconst binarySearch = require('../core/utils/binary-search').binarySearchEpsilon;\n\n// The actual animator for Animation Component\n\nfunction AnimationAnimator (target, animation) {\n Playable.call(this);\n this.target = target;\n this.animation = animation;\n\n this._anims = new js.array.MutableForwardIterator([]);\n}\njs.extend(AnimationAnimator, Playable);\nlet p = AnimationAnimator.prototype;\n\np.playState = function (state, startTime) {\n if (!state.clip) {\n return;\n }\n\n if (!state.curveLoaded) {\n initClipData(this.target, state);\n }\n\n state.animator = this;\n state.play();\n\n if (typeof startTime === 'number') {\n state.setTime(startTime);\n }\n\n this.play();\n};\n\np.stopStatesExcept = function (state) {\n let iterator = this._anims;\n let array = iterator.array;\n for (iterator.i = 0; iterator.i < array.length; ++iterator.i) {\n let anim = array[iterator.i];\n if (anim === state) {\n continue;\n }\n\n this.stopState(anim);\n }\n};\n\np.addAnimation = function (anim) {\n let index = this._anims.array.indexOf(anim);\n if (index === -1) {\n this._anims.push(anim);\n }\n\n anim._setEventTarget(this.animation);\n};\n\np.removeAnimation = function (anim) {\n let index = this._anims.array.indexOf(anim);\n if (index >= 0) {\n this._anims.fastRemoveAt(index);\n\n if (this._anims.array.length === 0) {\n this.stop();\n }\n }\n else {\n cc.errorID(3907);\n }\n\n anim.animator = null;\n};\n\np.sample = function () {\n let iterator = this._anims;\n let array = iterator.array;\n for (iterator.i = 0; iterator.i < array.length; ++iterator.i) {\n let anim = array[iterator.i];\n anim.sample();\n }\n};\n\np.stopState = function (state) {\n if (state) {\n state.stop();\n }\n};\n\np.pauseState = function (state) {\n if (state) {\n state.pause();\n }\n};\n\np.resumeState = function (state) {\n if (state) {\n state.resume();\n }\n\n if (this.isPaused) {\n this.resume();\n }\n};\n\np.setStateTime = function (state, time) {\n if (time !== undefined) {\n if (state) {\n state.setTime(time);\n state.sample();\n } \n }\n else {\n time = state;\n\n let array = this._anims.array;\n for (let i = 0; i < array.length; ++i) {\n let anim = array[i];\n anim.setTime(time);\n anim.sample();\n }\n }\n};\n\np.onStop = function () {\n let iterator = this._anims;\n let array = iterator.array;\n for (iterator.i = 0; iterator.i < array.length; ++iterator.i) {\n let anim = array[iterator.i];\n anim.stop();\n }\n};\n\np.onPause = function () {\n let array = this._anims.array;\n for (let i = 0; i < array.length; ++i) {\n let anim = array[i];\n anim.pause();\n\n // need to unbind animator to anim, or it maybe cannot be gc.\n anim.animator = null;\n }\n};\n\np.onResume = function () {\n let array = this._anims.array;\n for (let i = 0; i < array.length; ++i) {\n let anim = array[i];\n \n // rebind animator to anim\n anim.animator = this;\n\n anim.resume();\n }\n};\n\np._reloadClip = function (state) {\n initClipData(this.target, state);\n};\n\n// 这个方法应该是 SampledAnimCurve 才能用\nfunction createBatchedProperty (propPath, firstDotIndex, mainValue, animValue) {\n mainValue = mainValue.clone();\n let nextValue = mainValue;\n let leftIndex = firstDotIndex + 1;\n let rightIndex = propPath.indexOf('.', leftIndex);\n\n // scan property path\n while (rightIndex !== -1) {\n let nextName = propPath.slice(leftIndex, rightIndex);\n nextValue = nextValue[nextName];\n leftIndex = rightIndex + 1;\n rightIndex = propPath.indexOf('.', leftIndex);\n }\n let lastPropName = propPath.slice(leftIndex);\n nextValue[lastPropName] = animValue;\n\n return mainValue;\n}\n\nif (CC_TEST) {\n cc._Test.createBatchedProperty = createBatchedProperty;\n}\n\n\nfunction initClipData (root, state) {\n let clip = state.clip;\n\n state.duration = clip.duration;\n state.speed = clip.speed;\n state.wrapMode = clip.wrapMode;\n state.frameRate = clip.sample;\n\n if ((state.wrapMode & WrapModeMask.Loop) === WrapModeMask.Loop) {\n state.repeatCount = Infinity;\n }\n else {\n state.repeatCount = 1;\n }\n\n let curves = state.curves = clip.createCurves(state, root);\n\n // events curve\n\n let events = clip.events;\n\n if (!CC_EDITOR && events) {\n let curve;\n\n for (let i = 0, l = events.length; i < l; i++) {\n if (!curve) {\n curve = new EventAnimCurve();\n curve.target = root;\n curves.push(curve);\n }\n\n let eventData = events[i];\n let ratio = eventData.frame / state.duration;\n\n let eventInfo;\n let index = binarySearch(curve.ratios, ratio);\n if (index >= 0) {\n eventInfo = curve.events[index];\n }\n else {\n eventInfo = new EventInfo();\n curve.ratios.push(ratio);\n curve.events.push(eventInfo);\n }\n\n eventInfo.add(eventData.func, eventData.params);\n }\n }\n}\n\nif (CC_TEST) {\n cc._Test.initClipData = initClipData;\n}\n\n\nmodule.exports = AnimationAnimator;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst WrapMode = require('./types').WrapMode;\nconst { DynamicAnimCurve, quickFindIndex } = require('./animation-curves');\nconst sampleMotionPaths = require('./motion-path-helper').sampleMotionPaths;\nconst binarySearch = require('../core/utils/binary-search').binarySearchEpsilon;\n\n/**\n * !#en Class for animation data handling.\n * !#zh 动画剪辑,用于存储动画数据。\n * @class AnimationClip\n * @extends Asset\n */\nvar AnimationClip = cc.Class({\n name: 'cc.AnimationClip',\n extends: cc.Asset,\n\n properties: {\n _duration: {\n default: 0,\n type: cc.Float,\n },\n\n /**\n * !#en Duration of this animation.\n * !#zh 动画的持续时间。\n * @property duration\n * @type {Number}\n */\n duration: {\n get: function () { return this._duration; },\n },\n\n /**\n * !#en FrameRate of this animation.\n * !#zh 动画的帧速率。\n * @property sample\n * @type {Number}\n */\n sample: {\n default: 60,\n },\n\n /**\n * !#en Speed of this animation.\n * !#zh 动画的播放速度。\n * @property speed\n * @type {Number}\n */\n speed: {\n default: 1\n },\n\n /**\n * !#en WrapMode of this animation.\n * !#zh 动画的循环模式。\n * @property wrapMode\n * @type {WrapMode}\n */\n wrapMode: {\n default: WrapMode.Normal\n },\n\n /**\n * !#en Curve data.\n * !#zh 曲线数据。\n * @property curveData\n * @type {Object}\n * @example {@link cocos2d/core/animation-clip/curve-data.js}\n */\n curveData: {\n default: {},\n visible: false,\n },\n\n /**\n * !#en Event data.\n * !#zh 事件数据。\n * @property events\n * @type {Object[]}\n * @example {@link cocos2d/core/animation-clip/event-data.js}\n * @typescript events: {frame: number, func: string, params: string[]}[]\n */\n events: {\n default: [],\n visible: false,\n }\n },\n\n statics: {\n /**\n * !#en Crate clip with a set of sprite frames\n * !#zh 使用一组序列帧图片来创建动画剪辑\n * @method createWithSpriteFrames\n * @param {[SpriteFrame]} spriteFrames\n * @param {Number} sample\n * @return {AnimationClip}\n * @static\n * @example\n *\n * var clip = cc.AnimationClip.createWithSpriteFrames(spriteFrames, 10);\n *\n */\n createWithSpriteFrames: function (spriteFrames, sample) {\n if (!Array.isArray(spriteFrames)) {\n cc.errorID(3905);\n return null;\n }\n\n var clip = new AnimationClip();\n clip.sample = sample || clip.sample;\n\n clip._duration = spriteFrames.length / clip.sample;\n\n var frames = [];\n var step = 1 / clip.sample;\n\n for (var i = 0, l = spriteFrames.length; i < l; i++) {\n frames[i] = { frame: (i * step), value: spriteFrames[i] };\n }\n\n clip.curveData = {\n comps: {\n // component\n 'cc.Sprite': {\n // component properties\n 'spriteFrame': frames\n }\n }\n };\n\n return clip;\n }\n },\n\n onLoad () {\n this._duration = Number.parseFloat(this.duration);\n this.speed = Number.parseFloat(this.speed);\n this.wrapMode = Number.parseInt(this.wrapMode);\n this.frameRate = Number.parseFloat(this.sample);\n },\n\n createPropCurve (target, propPath, keyframes) {\n let motionPaths = [];\n let isMotionPathProp = target instanceof cc.Node && propPath === 'position';\n\n let curve = new DynamicAnimCurve();\n\n // 缓存目标对象,所以 Component 必须一开始都创建好并且不能运行时动态替换……\n curve.target = target;\n curve.prop = propPath;\n\n // for each keyframes\n for (let i = 0, l = keyframes.length; i < l; i++) {\n let keyframe = keyframes[i];\n let ratio = keyframe.frame / this.duration;\n curve.ratios.push(ratio);\n\n if (isMotionPathProp) {\n motionPaths.push(keyframe.motionPath);\n }\n\n let curveValue = keyframe.value;\n curve.values.push(curveValue);\n\n let curveTypes = keyframe.curve;\n if (curveTypes) {\n if (typeof curveTypes === 'string') {\n curve.types.push(curveTypes);\n continue;\n }\n else if (Array.isArray(curveTypes)) {\n if (curveTypes[0] === curveTypes[1] &&\n curveTypes[2] === curveTypes[3]) {\n curve.types.push(DynamicAnimCurve.Linear);\n }\n else {\n curve.types.push(DynamicAnimCurve.Bezier(curveTypes));\n }\n continue;\n }\n }\n curve.types.push(DynamicAnimCurve.Linear);\n }\n \n if (isMotionPathProp) {\n sampleMotionPaths(motionPaths, curve, this.duration, this.sample, target);\n }\n\n // if every piece of ratios are the same, we can use the quick function to find frame index.\n let ratios = curve.ratios;\n let currRatioDif, lastRatioDif;\n let canOptimize = true;\n let EPSILON = 1e-6;\n for (let i = 1, l = ratios.length; i < l; i++) {\n currRatioDif = ratios[i] - ratios[i-1];\n if (i === 1) {\n lastRatioDif = currRatioDif;\n }\n else if (Math.abs(currRatioDif - lastRatioDif) > EPSILON) {\n canOptimize = false; \n break;\n }\n }\n\n curve._findFrameIndex = canOptimize ? quickFindIndex : binarySearch;\n\n // find the lerp function\n let firstValue = curve.values[0];\n if (firstValue !== undefined && firstValue !== null && !curve._lerp) {\n if (typeof firstValue === 'number') {\n curve._lerp = DynamicAnimCurve.prototype._lerpNumber;\n }\n else if (firstValue instanceof cc.Quat) {\n curve._lerp = DynamicAnimCurve.prototype._lerpQuat;\n }\n else if (firstValue instanceof cc.Vec2) {\n curve._lerp = DynamicAnimCurve.prototype._lerpVector2;\n }\n else if (firstValue instanceof cc.Vec3) {\n curve._lerp = DynamicAnimCurve.prototype._lerpVector3;\n }\n else if (firstValue.lerp) {\n curve._lerp = DynamicAnimCurve.prototype._lerpObject;\n }\n }\n\n return curve;\n },\n\n createTargetCurves (target, curveData, curves) {\n let propsData = curveData.props;\n let compsData = curveData.comps;\n\n if (propsData) {\n for (let propPath in propsData) {\n let data = propsData[propPath];\n let curve = this.createPropCurve(target, propPath, data);\n\n curves.push(curve);\n }\n }\n\n if (compsData) {\n for (let compName in compsData) {\n let comp = target.getComponent(compName);\n\n if (!comp) {\n continue;\n }\n\n let compData = compsData[compName];\n for (let propPath in compData) {\n let data = compData[propPath];\n let curve = this.createPropCurve(comp, propPath, data);\n\n curves.push(curve);\n }\n }\n }\n },\n\n createCurves (state, root) {\n let curveData = this.curveData;\n let childrenCurveDatas = curveData.paths;\n let curves = [];\n\n this.createTargetCurves(root, curveData, curves);\n\n for (let namePath in childrenCurveDatas) {\n let target = cc.find(namePath, root);\n\n if (!target) {\n continue;\n }\n\n let childCurveDatas = childrenCurveDatas[namePath];\n this.createTargetCurves(target, childCurveDatas, curves);\n }\n\n return curves;\n }\n});\n\ncc.AnimationClip = module.exports = AnimationClip;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n\nconst bezierByTime = require('./bezier').bezierByTime;\n\nconst binarySearch = require('../core/utils/binary-search').binarySearchEpsilon;\nconst WrapModeMask = require('./types').WrapModeMask;\nconst WrappedInfo = require('./types').WrappedInfo;\n\n/**\n * Compute a new ratio by curve type\n * @param {Number} ratio - The origin ratio\n * @param {Array|String} type - If it's Array, then ratio will be computed with bezierByTime. If it's string, then ratio will be computed with cc.easing function\n */\nfunction computeRatioByType (ratio, type) {\n if (typeof type === 'string') {\n var func = cc.easing[type];\n if (func) {\n ratio = func(ratio);\n }\n else {\n cc.errorID(3906, type);\n }\n }\n else if (Array.isArray(type)) {\n // bezier curve\n ratio = bezierByTime(type, ratio);\n }\n\n return ratio;\n}\n\n//\n// 动画数据类,相当于 AnimationClip。\n// 虽然叫做 AnimCurve,但除了曲线,可以保存任何类型的值。\n//\n// @class AnimCurve\n//\n//\nvar AnimCurve = cc.Class({\n name: 'cc.AnimCurve',\n\n //\n // @method sample\n // @param {number} time\n // @param {number} ratio - The normalized time specified as a number between 0.0 and 1.0 inclusive.\n // @param {AnimationState} state\n //\n sample: function (time, ratio, state) {},\n\n onTimeChangedManually: undefined\n});\n\n/**\n * 当每两帧之前的间隔都一样的时候可以使用此函数快速查找 index\n */\nfunction quickFindIndex (ratios, ratio) {\n var length = ratios.length - 1;\n\n if (length === 0) return 0;\n\n var start = ratios[0];\n if (ratio < start) return 0;\n\n var end = ratios[length];\n if (ratio > end) return ~ratios.length;\n\n ratio = (ratio - start) / (end - start);\n\n var eachLength = 1 / length;\n var index = ratio / eachLength;\n var floorIndex = index | 0;\n var EPSILON = 1e-6;\n\n if ((index - floorIndex) < EPSILON) {\n return floorIndex;\n }\n else if ((floorIndex + 1 - index) < EPSILON) {\n return floorIndex + 1;\n }\n\n return ~(floorIndex + 1);\n}\n\n//\n//\n// @class DynamicAnimCurve\n//\n// @extends AnimCurve\n//\nvar DynamicAnimCurve = cc.Class({\n name: 'cc.DynamicAnimCurve',\n extends: AnimCurve,\n\n ctor () {\n // cache last frame index\n this._cachedIndex = 0;\n },\n\n properties: {\n\n // The object being animated.\n // @property target\n // @type {object}\n target: null,\n\n // The name of the property being animated.\n // @property prop\n // @type {string}\n prop: '',\n\n // The values of the keyframes. (y)\n // @property values\n // @type {any[]}\n values: [],\n\n // The keyframe ratio of the keyframe specified as a number between 0.0 and 1.0 inclusive. (x)\n // @property ratios\n // @type {number[]}\n ratios: [],\n\n // @property types\n // @param {object[]}\n // Each array item maybe type:\n // - [x, x, x, x]: Four control points for bezier\n // - null: linear\n types: [],\n },\n\n _findFrameIndex: binarySearch,\n _lerp: undefined,\n\n _lerpNumber (from, to, t) {\n return from + (to - from) * t;\n },\n\n _lerpObject (from, to, t) {\n return from.lerp(to, t);\n },\n\n _lerpQuat: (function () {\n let out = cc.quat();\n return function (from, to, t) {\n return from.lerp(to, t, out);\n };\n })(),\n\n _lerpVector2: (function () {\n let out = cc.v2();\n return function (from, to, t) {\n return from.lerp(to, t, out);\n };\n })(),\n\n _lerpVector3: (function () {\n let out = cc.v3();\n return function (from, to, t) {\n return from.lerp(to, t, out);\n };\n })(),\n\n sample (time, ratio, state) {\n let values = this.values;\n let ratios = this.ratios;\n let frameCount = ratios.length;\n\n if (frameCount === 0) {\n return;\n }\n\n // only need to refind frame index when ratio is out of range of last from ratio and to ratio.\n let shoudRefind = true;\n let cachedIndex = this._cachedIndex;\n if (cachedIndex < 0) {\n cachedIndex = ~cachedIndex;\n if (cachedIndex > 0 && cachedIndex < ratios.length) {\n let fromRatio = ratios[cachedIndex - 1];\n let toRatio = ratios[cachedIndex];\n if (ratio > fromRatio && ratio < toRatio) {\n shoudRefind = false;\n }\n }\n }\n\n if (shoudRefind) {\n this._cachedIndex = this._findFrameIndex(ratios, ratio);\n }\n\n // evaluate value\n let value;\n let index = this._cachedIndex;\n if (index < 0) {\n index = ~index;\n\n if (index <= 0) {\n value = values[0];\n }\n else if (index >= frameCount) {\n value = values[frameCount - 1];\n }\n else {\n var fromVal = values[index - 1];\n\n if (!this._lerp) {\n value = fromVal;\n }\n else {\n var fromRatio = ratios[index - 1];\n var toRatio = ratios[index];\n var type = this.types[index - 1];\n var ratioBetweenFrames = (ratio - fromRatio) / (toRatio - fromRatio);\n\n if (type) {\n ratioBetweenFrames = computeRatioByType(ratioBetweenFrames, type);\n }\n\n // calculate value\n var toVal = values[index];\n\n value = this._lerp(fromVal, toVal, ratioBetweenFrames);\n }\n }\n }\n else {\n value = values[index];\n }\n\n this.target[this.prop] = value;\n }\n});\n\nDynamicAnimCurve.Linear = null;\nDynamicAnimCurve.Bezier = function (controlPoints) {\n return controlPoints;\n};\n\n\n/**\n * Event information,\n * @class EventInfo\n *\n */\nvar EventInfo = function () {\n this.events = [];\n};\n\n/**\n * @param {Function} [func] event function\n * @param {Object[]} [params] event params\n */\nEventInfo.prototype.add = function (func, params) {\n this.events.push({\n func: func || '',\n params: params || []\n });\n};\n\n\n/**\n *\n * @class EventAnimCurve\n *\n * @extends AnimCurve\n */\nvar EventAnimCurve = cc.Class({\n name: 'cc.EventAnimCurve',\n extends: AnimCurve,\n\n properties: {\n /**\n * The object being animated.\n * @property target\n * @type {object}\n */\n target: null,\n\n /** The keyframe ratio of the keyframe specified as a number between 0.0 and 1.0 inclusive. (x)\n * @property ratios\n * @type {number[]}\n */\n ratios: [],\n\n /**\n * @property events\n * @type {EventInfo[]}\n */\n events: [],\n\n _wrappedInfo: {\n default: function () {\n return new WrappedInfo();\n }\n },\n\n _lastWrappedInfo: null,\n\n _ignoreIndex: NaN\n },\n\n _wrapIterations: function (iterations) {\n if (iterations - (iterations | 0) === 0) iterations -= 1;\n return iterations | 0;\n },\n\n sample: function (time, ratio, state) {\n var length = this.ratios.length;\n\n var currentWrappedInfo = state.getWrappedInfo(state.time, this._wrappedInfo);\n var direction = currentWrappedInfo.direction;\n var currentIndex = binarySearch(this.ratios, currentWrappedInfo.ratio);\n if (currentIndex < 0) {\n currentIndex = ~currentIndex - 1;\n\n // if direction is inverse, then increase index\n if (direction < 0) currentIndex += 1;\n }\n\n if (this._ignoreIndex !== currentIndex) {\n this._ignoreIndex = NaN;\n }\n\n currentWrappedInfo.frameIndex = currentIndex;\n\n if (!this._lastWrappedInfo) {\n this._fireEvent(currentIndex);\n this._lastWrappedInfo = new WrappedInfo(currentWrappedInfo);\n return;\n }\n\n var wrapMode = state.wrapMode;\n var currentIterations = this._wrapIterations(currentWrappedInfo.iterations);\n\n var lastWrappedInfo = this._lastWrappedInfo;\n var lastIterations = this._wrapIterations(lastWrappedInfo.iterations);\n var lastIndex = lastWrappedInfo.frameIndex;\n var lastDirection = lastWrappedInfo.direction;\n\n var interationsChanged = lastIterations !== -1 && currentIterations !== lastIterations;\n\n if (lastIndex === currentIndex && interationsChanged && length === 1) {\n this._fireEvent(0);\n }\n else if (lastIndex !== currentIndex || interationsChanged) {\n direction = lastDirection;\n\n do {\n if (lastIndex !== currentIndex) {\n if (direction === -1 && lastIndex === 0 && currentIndex > 0) {\n if ((wrapMode & WrapModeMask.PingPong) === WrapModeMask.PingPong) {\n direction *= -1;\n }\n else {\n lastIndex = length;\n }\n\n lastIterations ++;\n }\n else if (direction === 1 && lastIndex === length - 1 && currentIndex < length - 1) {\n if ((wrapMode & WrapModeMask.PingPong) === WrapModeMask.PingPong) {\n direction *= -1;\n }\n else {\n lastIndex = -1;\n }\n\n lastIterations ++;\n }\n\n if (lastIndex === currentIndex) break;\n if (lastIterations > currentIterations) break;\n }\n\n lastIndex += direction;\n\n cc.director.getAnimationManager().pushDelayEvent(this, '_fireEvent', [lastIndex]);\n } while (lastIndex !== currentIndex && lastIndex > -1 && lastIndex < length);\n }\n\n this._lastWrappedInfo.set(currentWrappedInfo);\n },\n\n _fireEvent: function (index) {\n if (index < 0 || index >= this.events.length || this._ignoreIndex === index) return;\n\n var eventInfo = this.events[index];\n var events = eventInfo.events;\n \n if ( !this.target.isValid ) { \n return; \n }\n \n var components = this.target._components;\n\n for (var i = 0; i < events.length; i++) {\n var event = events[i];\n var funcName = event.func;\n\n for (var j = 0; j < components.length; j++) {\n var component = components[j];\n var func = component[funcName];\n\n if (func) func.apply(component, event.params);\n }\n }\n },\n\n onTimeChangedManually: function (time, state) {\n this._lastWrappedInfo = null;\n this._ignoreIndex = NaN;\n\n var info = state.getWrappedInfo(time, this._wrappedInfo);\n var direction = info.direction;\n var frameIndex = binarySearch(this.ratios, info.ratio);\n\n // only ignore when time not on a frame index\n if (frameIndex < 0) {\n frameIndex = ~frameIndex - 1;\n\n // if direction is inverse, then increase index\n if (direction < 0) frameIndex += 1;\n\n this._ignoreIndex = frameIndex;\n }\n }\n});\n\n\nif (CC_TEST) {\n cc._Test.DynamicAnimCurve = DynamicAnimCurve;\n cc._Test.EventAnimCurve = EventAnimCurve;\n cc._Test.quickFindIndex = quickFindIndex;\n}\n\nmodule.exports = {\n AnimCurve: AnimCurve,\n DynamicAnimCurve: DynamicAnimCurve,\n EventAnimCurve: EventAnimCurve,\n EventInfo: EventInfo,\n computeRatioByType: computeRatioByType,\n quickFindIndex: quickFindIndex\n};\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar js = cc.js;\n\nvar AnimationManager = cc.Class({\n ctor: function () {\n this._anims = new js.array.MutableForwardIterator([]);\n this._delayEvents = [];\n\n cc.director._scheduler && cc.director._scheduler.enableForTarget(this);\n },\n\n // for manager\n\n update: function (dt) {\n var iterator = this._anims;\n var array = iterator.array;\n for (iterator.i = 0; iterator.i < array.length; ++iterator.i) {\n var anim = array[iterator.i];\n if (anim._isPlaying && !anim._isPaused) {\n anim.update(dt);\n }\n }\n\n var events = this._delayEvents;\n for (let i = 0; i < events.length; i++) {\n var event = events[i];\n event.target[event.func].apply(event.target, event.args);\n }\n events.length = 0;\n \n },\n\n destruct: function () {},\n\n\n /**\n * @param {AnimationState} anim\n */\n addAnimation: function (anim) {\n var index = this._anims.array.indexOf(anim);\n if (index === -1) {\n this._anims.push(anim);\n }\n },\n\n /**\n * @param {AnimationState} anim\n */\n removeAnimation: function (anim) {\n var index = this._anims.array.indexOf(anim);\n if (index >= 0) {\n this._anims.fastRemoveAt(index);\n }\n else {\n cc.errorID(3907);\n }\n },\n\n pushDelayEvent: function (target, func, args) {\n this._delayEvents.push({\n target: target,\n func: func,\n args: args\n });\n }\n});\n\n\ncc.AnimationManager = module.exports = AnimationManager;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n\nvar js = cc.js;\nvar Playable = require('./playable');\n\nvar Types = require('./types');\nvar WrappedInfo = Types.WrappedInfo;\nvar WrapMode = Types.WrapMode;\nvar WrapModeMask = Types.WrapModeMask;\n\n/**\n * !#en\n * The AnimationState gives full control over animation playback process.\n * In most cases the Animation Component is sufficient and easier to use. Use the AnimationState if you need full control.\n * !#zh\n * AnimationState 完全控制动画播放过程。
\n * 大多数情况下 动画组件 是足够和易于使用的。如果您需要更多的动画控制接口,请使用 AnimationState。\n * @class AnimationState\n * @extends Playable\n *\n */\n\n/**\n * @method constructor\n * @param {AnimationClip} clip\n * @param {String} [name]\n */\nfunction AnimationState (clip, name) {\n Playable.call(this);\n \n // Mark whether the current frame is played.\n // When set new time to animation state, we should ensure the frame at the specified time being played at next update.\n this._currentFramePlayed = false;\n \n this._delay = 0;\n this._delayTime = 0;\n\n this._wrappedInfo = new WrappedInfo();\n this._lastWrappedInfo = null;\n\n this._process = process;\n\n this._clip = clip;\n this._name = name || (clip && clip.name);\n\n /**\n * @property animator\n * @type {AnimationAnimator}\n * @private\n */\n this.animator = null;\n\n /**\n * !#en The curves list.\n * !#zh 曲线列表。\n * @property curves\n * @type {Object[]}\n */\n this.curves = [];\n\n // http://www.w3.org/TR/web-animations/#idl-def-AnimationTiming\n\n /**\n * !#en The start delay which represents the number of seconds from an animation's start time to the start of\n * the active interval.\n * !#zh 延迟多少秒播放。\n *\n * @property delay\n * @type {Number}\n * @default 0\n */\n this.delay = 0;\n\n /**\n * !#en The animation's iteration count property.\n *\n * A real number greater than or equal to zero (including positive infinity) representing the number of times\n * to repeat the animation node.\n *\n * Values less than zero and NaN values are treated as the value 1.0 for the purpose of timing model\n * calculations.\n *\n * !#zh 迭代次数,指动画播放多少次后结束, normalize time。 如 2.5(2次半)\n *\n * @property repeatCount\n * @type {Number}\n * @default 1\n */\n this.repeatCount = 1;\n\n /**\n * !#en The iteration duration of this animation in seconds. (length)\n * !#zh 单次动画的持续时间,秒。\n *\n * @property duration\n * @type {Number}\n * @readOnly\n */\n this.duration = 1;\n\n /**\n * !#en The animation's playback speed. 1 is normal playback speed.\n * !#zh 播放速率。\n * @property speed\n * @type {Number}\n * @default: 1.0\n */\n this.speed = 1;\n\n /**\n * !#en\n * Wrapping mode of the playing animation.\n * Notice : dynamic change wrapMode will reset time and repeatCount property\n * !#zh\n * 动画循环方式。\n * 需要注意的是,动态修改 wrapMode 时,会重置 time 以及 repeatCount\n *\n * @property wrapMode\n * @type {WrapMode}\n * @default: WrapMode.Normal\n */\n this.wrapMode = WrapMode.Normal;\n\n /**\n * !#en The current time of this animation in seconds.\n * !#zh 动画当前的时间,秒。\n * @property time\n * @type {Number}\n * @default 0\n */\n this.time = 0;\n\n // Animation as event target\n this._target = null;\n this._lastframeEventOn = false;\n this.emit = function () {\n var args = new Array(arguments.length);\n for (var i = 0, l = args.length; i < l; i++) {\n args[i] = arguments[i];\n }\n cc.director.getAnimationManager().pushDelayEvent(this, '_emit', args);\n };\n}\njs.extend(AnimationState, Playable);\n\nvar proto = AnimationState.prototype;\n\nproto._emit = function (type, state) {\n if (this._target && this._target.isValid) {\n this._target.emit(type, type, state);\n }\n};\n\nproto.on = function (type, callback, target) {\n if (this._target && this._target.isValid) {\n if (type === 'lastframe') {\n this._lastframeEventOn = true;\n }\n return this._target.on(type, callback, target);\n }\n else {\n return null;\n }\n};\n\nproto.once = function (type, callback, target) {\n if (this._target && this._target.isValid) {\n if (type === 'lastframe') {\n this._lastframeEventOn = true;\n }\n let self = this;\n return this._target.once(type, function (event) {\n callback.call(target, event);\n self._lastframeEventOn = false;\n });\n }\n else {\n return null;\n }\n};\n\nproto.off = function (type, callback, target) {\n if (this._target && this._target.isValid) {\n if (type === 'lastframe') {\n if (!this._target.hasEventListener(type)) {\n this._lastframeEventOn = false;\n }\n }\n this._target.off(type, callback, target);\n }\n};\n\nproto._setEventTarget = function (target) {\n this._target = target;\n};\n\nproto.onPlay = function () {\n // replay\n this.setTime(0);\n this._delayTime = this._delay;\n \n cc.director.getAnimationManager().addAnimation(this);\n\n if (this.animator) {\n this.animator.addAnimation(this);\n }\n \n this.emit('play', this);\n};\n\nproto.onStop = function () {\n if (!this.isPaused) {\n cc.director.getAnimationManager().removeAnimation(this);\n }\n\n if (this.animator) {\n this.animator.removeAnimation(this);\n }\n\n this.emit('stop', this);\n};\n\nproto.onResume = function () {\n cc.director.getAnimationManager().addAnimation(this);\n this.emit('resume', this);\n};\n\nproto.onPause = function () {\n cc.director.getAnimationManager().removeAnimation(this);\n this.emit('pause', this);\n};\n\nproto.setTime = function (time) {\n this._currentFramePlayed = false;\n this.time = time || 0;\n\n var curves = this.curves;\n for (var i = 0, l = curves.length; i < l; i++) {\n var curve = curves[i];\n if (curve.onTimeChangedManually) {\n curve.onTimeChangedManually(time, this);\n }\n }\n};\n\nfunction process () {\n // sample\n var info = this.sample();\n\n if (this._lastframeEventOn) {\n var lastInfo;\n if (!this._lastWrappedInfo) {\n lastInfo = this._lastWrappedInfo = new WrappedInfo(info);\n } else {\n lastInfo = this._lastWrappedInfo;\n }\n\n if (this.repeatCount > 1 && ((info.iterations | 0) > (lastInfo.iterations | 0))) {\n this.emit('lastframe', this);\n }\n\n lastInfo.set(info);\n }\n\n if (info.stopped) {\n this.stop();\n this.emit('finished', this);\n }\n}\n\nfunction simpleProcess () {\n var time = this.time;\n var duration = this.duration;\n\n if (time > duration) {\n time = time % duration;\n if (time === 0) time = duration;\n }\n else if (time < 0) {\n time = time % duration;\n if (time !== 0) time += duration;\n }\n\n var ratio = time / duration;\n\n var curves = this.curves;\n for (var i = 0, len = curves.length; i < len; i++) {\n var curve = curves[i];\n curve.sample(time, ratio, this);\n }\n\n if (this._lastframeEventOn) {\n if (this._lastIterations === undefined) {\n this._lastIterations = ratio;\n }\n\n if ((this.time > 0 && this._lastIterations > ratio) || (this.time < 0 && this._lastIterations < ratio)) {\n this.emit('lastframe', this);\n }\n\n this._lastIterations = ratio;\n }\n}\n\nproto.update = function (delta) {\n // calculate delay time\n\n if (this._delayTime > 0) {\n this._delayTime -= delta;\n if (this._delayTime > 0) {\n // still waiting\n return;\n }\n }\n\n // make first frame perfect\n\n //var playPerfectFirstFrame = (this.time === 0);\n if (this._currentFramePlayed) {\n this.time += (delta * this.speed);\n }\n else {\n this._currentFramePlayed = true;\n }\n\n this._process();\n};\n\nproto._needRevers = function (currentIterations) {\n var wrapMode = this.wrapMode;\n var needRevers = false;\n\n if ((wrapMode & WrapModeMask.PingPong) === WrapModeMask.PingPong) {\n var isEnd = currentIterations - (currentIterations | 0) === 0;\n if (isEnd && (currentIterations > 0)) {\n currentIterations -= 1;\n }\n\n var isOddIteration = currentIterations & 1;\n if (isOddIteration) {\n needRevers = !needRevers;\n }\n }\n if ((wrapMode & WrapModeMask.Reverse) === WrapModeMask.Reverse) {\n needRevers = !needRevers;\n }\n return needRevers;\n};\n\nproto.getWrappedInfo = function (time, info) {\n info = info || new WrappedInfo();\n \n var stopped = false;\n var duration = this.duration;\n var repeatCount = this.repeatCount;\n\n var currentIterations = time > 0 ? (time / duration) : -(time / duration);\n if (currentIterations >= repeatCount) {\n currentIterations = repeatCount;\n\n stopped = true;\n var tempRatio = repeatCount - (repeatCount | 0);\n if (tempRatio === 0) {\n tempRatio = 1; // 如果播放过,动画不复位\n }\n time = tempRatio * duration * (time > 0 ? 1 : -1);\n }\n\n if (time > duration) {\n var tempTime = time % duration;\n time = tempTime === 0 ? duration : tempTime;\n }\n else if (time < 0) {\n time = time % duration;\n if (time !== 0 ) time += duration;\n }\n\n var needRevers = false;\n var shouldWrap = this._wrapMode & WrapModeMask.ShouldWrap;\n if (shouldWrap) {\n needRevers = this._needRevers(currentIterations);\n }\n\n var direction = needRevers ? -1 : 1;\n if (this.speed < 0) {\n direction *= -1;\n }\n\n // calculate wrapped time\n if (shouldWrap && needRevers) {\n time = duration - time;\n }\n\n info.ratio = time / duration;\n info.time = time;\n info.direction = direction;\n info.stopped = stopped;\n info.iterations = currentIterations;\n\n return info;\n};\n\nproto.sample = function () {\n var info = this.getWrappedInfo(this.time, this._wrappedInfo);\n var curves = this.curves;\n for (var i = 0, len = curves.length; i < len; i++) {\n var curve = curves[i];\n curve.sample(info.time, info.ratio, this);\n }\n\n return info;\n};\n\n\n/**\n * !#en The clip that is being played by this animation state.\n * !#zh 此动画状态正在播放的剪辑。\n * @property clip\n * @type {AnimationClip}\n * @final\n */\njs.get(proto, 'clip', function () {\n return this._clip;\n});\n\n/**\n * !#en The name of the playing animation.\n * !#zh 动画的名字\n * @property name\n * @type {String}\n * @readOnly\n */\njs.get(proto, 'name', function () {\n return this._name;\n});\n\njs.obsolete(proto, 'AnimationState.length', 'duration');\n\njs.getset(proto, 'curveLoaded',\n function () {\n return this.curves.length > 0;\n },\n function () {\n this.curves.length = 0;\n }\n);\n\n\njs.getset(proto, 'wrapMode',\n function () {\n return this._wrapMode;\n },\n function (value) {\n this._wrapMode = value;\n\n if (CC_EDITOR) return;\n\n // dynamic change wrapMode will need reset time to 0\n this.time = 0;\n\n if (value & WrapModeMask.Loop) {\n this.repeatCount = Infinity;\n }\n else {\n this.repeatCount = 1;\n }\n \n }\n);\n\njs.getset(proto, 'repeatCount',\n function () {\n return this._repeatCount;\n },\n function (value) {\n this._repeatCount = value;\n \n var shouldWrap = this._wrapMode & WrapModeMask.ShouldWrap;\n var reverse = (this.wrapMode & WrapModeMask.Reverse) === WrapModeMask.Reverse;\n if (value === Infinity && !shouldWrap && !reverse) {\n this._process = simpleProcess;\n }\n else {\n this._process = process;\n }\n }\n);\n\njs.getset(proto, 'delay', \n function () {\n return this._delay;\n },\n function (value) {\n this._delayTime = this._delay = value;\n }\n);\n\n\ncc.AnimationState = module.exports = AnimationState;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n//var bezier = (function () {\n// function B1 (t) { return (t * t * t); }\n// function B2 (t) { return (3 * t * t * (1 - t)); }\n// function B3 (t) { return (3 * t * (1 - t) * (1 - t)); }\n// function B4 (t) { return ((1 - t) * (1 - t) * (1 - t)); }\n// function bezier (C1, C2, C3, C4, t) {\n// return C1 * B1(t) + C2 * B2(t) + C3 * B3(t) + C4 * B4(t);\n// }\n//\n// //function bezier (C1, C2, C3, C4, t, out) {\n// // out.x = C1.x * B1(t) + C2.x * B2(t) + C3.x * B3(t) + C4.x * B4(t);\n// // out.y = C1.y * B1(t) + C2.y * B2(t) + C3.y * B3(t) + C4.y * B4(t);\n// //}\n//\n// return bezier;\n//})();\nfunction bezier (C1, C2, C3, C4, t) {\n var t1 = 1 - t;\n return t1 * (t1 * (C1 + (C2 * 3 - C1) * t) + C3 * 3 * t * t) + C4 * t * t * t;\n}\n//function bezier (c0, c1, c2, c3, t) {\n// var cy = 3.0 * (c1);\n// var by = 3.0 * (c3 - c1) - cy;\n// var ay = 1 - cy - by;\n// return (ay * t * t * t) + (by * t * t) + (cy * t);\n//}\n\n//var sin = Math.sin;\nvar cos = Math.cos,\n acos = Math.acos,\n max = Math.max,\n //atan2 = Math.atan2,\n pi = Math.PI,\n tau = 2 * pi,\n sqrt = Math.sqrt;\n\nfunction crt (v) {\n if (v < 0) {\n return -Math.pow(-v, 1 / 3);\n }\n else {\n return Math.pow(v, 1 / 3);\n }\n}\n\n//function align (curve, line) {\n// var tx = line.p1.x,\n// ty = line.p1.y,\n// a = -atan2(line.p2.y-ty, line.p2.x-tx);\n// curve = [{x:0, y:1}, {x: curve[0], y: 1-curve[1]}, {x: curve[2], y: 1-curve[3]}, {x:1, y:0}];\n// return curve.map(function(v) {\n// return {\n// x: (v.x-tx)*cos(a) - (v.y-ty)*sin(a),\n// y: (v.x-tx)*sin(a) + (v.y-ty)*cos(a)\n// };\n// });\n//}\n\n// Modified from http://jsbin.com/yibipofeqi/1/edit, optimized for animations.\n// The origin Cardano's algorithm is based on http://www.trans4mind.com/personal_development/mathematics/polynomials/cubicAlgebra.htm\nfunction cardano (curve, x) {\n // align curve with the intersecting line:\n //var line = {p1: {x: x, y: 0}, p2: {x: x, y: 1}};\n //var aligned = align(curve, line);\n //// and rewrite from [a(1-t)^3 + 3bt(1-t)^2 + 3c(1-t)t^2 + dt^3] form\n // pa = aligned[0].y,\n // pb = aligned[1].y,\n // pc = aligned[2].y,\n // pd = aligned[3].y;\n ////// curve = [{x:0, y:1}, {x: curve[0], y: 1-curve[1]}, {x: curve[2], y: 1-curve[3]}, {x:1, y:0}];\n var pa = x - 0;\n var pb = x - curve[0];\n var pc = x - curve[2];\n var pd = x - 1;\n\n // to [t^3 + at^2 + bt + c] form:\n var pa3 = pa * 3;\n var pb3 = pb * 3;\n var pc3 = pc * 3;\n var d = (-pa + pb3 - pc3 + pd),\n rd = 1 / d,\n r3 = 1 / 3,\n a = (pa3 - 6 * pb + pc3) * rd,\n a3 = a * r3,\n b = (-pa3 + pb3) * rd,\n c = pa * rd,\n // then, determine p and q:\n p = (3 * b - a * a) * r3,\n p3 = p * r3,\n q = (2 * a * a * a - 9 * a * b + 27 * c) / 27,\n q2 = q / 2,\n // and determine the discriminant:\n discriminant = q2 * q2 + p3 * p3 * p3,\n // and some reserved variables\n u1, v1, x1, x2, x3;\n\n // If the discriminant is negative, use polar coordinates\n // to get around square roots of negative numbers\n if (discriminant < 0) {\n var mp3 = -p * r3,\n mp33 = mp3 * mp3 * mp3,\n r = sqrt(mp33),\n // compute cosphi corrected for IEEE float rounding:\n t = -q / (2 * r),\n cosphi = t < -1 ? -1 : t > 1 ? 1 : t,\n phi = acos(cosphi),\n crtr = crt(r),\n t1 = 2 * crtr;\n x1 = t1 * cos(phi * r3) - a3;\n x2 = t1 * cos((phi + tau) * r3) - a3;\n x3 = t1 * cos((phi + 2 * tau) * r3) - a3;\n\n // choose best percentage\n if (0 <= x1 && x1 <= 1) {\n if (0 <= x2 && x2 <= 1) {\n if (0 <= x3 && x3 <= 1) {\n return max(x1, x2, x3);\n }\n else {\n return max(x1, x2);\n }\n }\n else if (0 <= x3 && x3 <= 1) {\n return max(x1, x3);\n }\n else {\n return x1;\n }\n }\n else {\n if (0 <= x2 && x2 <= 1) {\n if (0 <= x3 && x3 <= 1) {\n return max(x2, x3);\n }\n else {\n return x2;\n }\n }\n else {\n return x3;\n }\n }\n }\n else if (discriminant === 0) {\n u1 = q2 < 0 ? crt(-q2) : -crt(q2);\n x1 = 2 * u1 - a3;\n x2 = -u1 - a3;\n\n // choose best percentage\n if (0 <= x1 && x1 <= 1) {\n if (0 <= x2 && x2 <= 1) {\n return max(x1, x2);\n }\n else {\n return x1;\n }\n }\n else {\n return x2;\n }\n }\n // one real root, and two imaginary roots\n else {\n var sd = sqrt(discriminant);\n u1 = crt(-q2 + sd);\n v1 = crt(q2 + sd);\n x1 = u1 - v1 - a3;\n return x1;\n }\n}\n\nfunction bezierByTime (controlPoints, x) {\n var percent = cardano(controlPoints, x); // t\n var p1y = controlPoints[1]; // b\n var p2y = controlPoints[3]; // c\n // return bezier(0, p1y, p2y, 1, percent);\n return ((1 - percent) * (p1y + (p2y - p1y) * percent) * 3 + percent * percent) * percent;\n}\n\nif (CC_TEST) {\n cc._Test.bezier = bezier;\n cc._Test.bezierByTime = bezierByTime;\n}\n\nmodule.exports = {\n bezier: bezier,\n bezierByTime: bezierByTime\n};\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * @module cc\n */\n\n /**\n * !#en\n * This class provide easing methods for {{#crossLink \"tween\"}}{{/crossLink}} class.
\n * Demonstratio: https://easings.net/\n * !#zh\n * 缓动函数类,为 {{#crossLink \"Tween\"}}{{/crossLink}} 提供缓动效果函数。
\n * 函数效果演示: https://easings.net/\n * @class Easing\n */\n\nvar easing = {\n constant: function () { return 0; },\n linear: function (k) { return k; },\n\n // quad\n // easing equation function for a quadratic (t^2)\n // @param t: Current time (in frames or seconds).\n // @return: The correct value.\n\n /**\n * !#en Easing in with quadratic formula. From slow to fast.\n * !#zh 平方曲线缓入函数。运动由慢到快。\n * @method quadIn\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value\n */\n quadIn: function (k) { return k * k; },\n /**\n * !#en Easing out with quadratic formula. From fast to slow.\n * !#zh 平方曲线缓出函数。运动由快到慢。\n * @method quadOut\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value\n */\n quadOut: function (k) { return k * ( 2 - k ); },\n /**\n * !#en Easing in and out with quadratic formula. From slow to fast, then back to slow.\n * !#zh 平方曲线缓入缓出函数。运动由慢到快再到慢。\n * @method quadInOut\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value\n */\n quadInOut: function (k) {\n if (( k *= 2 ) < 1) {\n return 0.5 * k * k;\n }\n return -0.5 * ( --k * ( k - 2 ) - 1 );\n },\n\n // cubic\n // easing equation function for a cubic (t^3)\n // @param t: Current time (in frames or seconds).\n // @return: The correct value.\n\n /**\n * !#en Easing in with cubic formula. From slow to fast.\n * !#zh 立方曲线缓入函数。运动由慢到快。\n * @method cubicIn\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n cubicIn: function (k) { return k * k * k; },\n /**\n * !#en Easing out with cubic formula. From slow to fast.\n * !#zh 立方曲线缓出函数。运动由快到慢。\n * @method cubicOut\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n cubicOut: function (k) { return --k * k * k + 1; },\n /**\n * !#en Easing in and out with cubic formula. From slow to fast, then back to slow.\n * !#zh 立方曲线缓入缓出函数。运动由慢到快再到慢。\n * @method cubicInOut\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n cubicInOut: function (k) {\n if (( k *= 2 ) < 1) {\n return 0.5 * k * k * k;\n }\n return 0.5 * ( ( k -= 2 ) * k * k + 2 );\n },\n\n // quart\n // easing equation function for a quartic (t^4)\n // @param t: Current time (in frames or seconds).\n // @return: The correct value.\n\n /**\n * !#en Easing in with quartic formula. From slow to fast.\n * !#zh 四次方曲线缓入函数。运动由慢到快。\n * @method quartIn\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n quartIn: function (k) { return k * k * k * k; },\n /**\n * !#en Easing out with quartic formula. From fast to slow.\n * !#zh 四次方曲线缓出函数。运动由快到慢。\n * @method quartOut\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n quartOut: function (k) { return 1 - ( --k * k * k * k ); },\n /**\n * !#en Easing in and out with quartic formula. From slow to fast, then back to slow.\n * !#zh 四次方曲线缓入缓出函数。运动由慢到快再到慢。\n * @method quartInOut\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n quartInOut: function (k) {\n if (( k *= 2 ) < 1) {\n return 0.5 * k * k * k * k;\n }\n return -0.5 * ( ( k -= 2 ) * k * k * k - 2 );\n },\n\n // quint\n // easing equation function for a quintic (t^5)\n // @param t: Current time (in frames or seconds).\n // @return: The correct value.\n\n /**\n * !#en Easing in with quintic formula. From slow to fast.\n * !#zh 五次方曲线缓入函数。运动由慢到快。\n * @method quintIn\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n quintIn: function (k) { return k * k * k * k * k; },\n /**\n * !#en Easing out with quintic formula. From fast to slow.\n * !#zh 五次方曲线缓出函数。运动由快到慢。\n * @method quintOut\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n quintOut: function (k) { return --k * k * k * k * k + 1; },\n /**\n * !#en Easing in and out with quintic formula. From slow to fast, then back to slow.\n * !#zh 五次方曲线缓入缓出函数。运动由慢到快再到慢。\n * @method quintInOut\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n quintInOut: function (k) {\n if (( k *= 2 ) < 1) {\n return 0.5 * k * k * k * k * k;\n }\n return 0.5 * ( ( k -= 2 ) * k * k * k * k + 2 );\n },\n\n // sine\n // easing equation function for a sinusoidal (sin(t))\n // @param t: Current time (in frames or seconds).\n // @return: The correct value.\n\n /**\n * !#en Easing in and out with sine formula. From slow to fast.\n * !#zh 正弦曲线缓入函数。运动由慢到快。\n * @method sineIn\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n sineIn: function (k) { return 1 - Math.cos(k * Math.PI / 2); },\n /**\n * !#en Easing in and out with sine formula. From fast to slow.\n * !#zh 正弦曲线缓出函数。运动由快到慢。\n * @method sineOut\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n sineOut: function (k) { return Math.sin(k * Math.PI / 2); },\n /**\n * !#en Easing in and out with sine formula. From slow to fast, then back to slow.\n * !#zh 正弦曲线缓入缓出函数。运动由慢到快再到慢。\n * @method sineInOut\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n sineInOut: function (k) { return 0.5 * ( 1 - Math.cos(Math.PI * k) ); },\n\n // expo\n // easing equation function for an exponential (2^t)\n // param t: Current time (in frames or seconds).\n // return: The correct value.\n\n /**\n * !#en Easing in and out with exponential formula. From slow to fast.\n * !#zh 指数曲线缓入函数。运动由慢到快。\n * @method expoIn\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n expoIn: function (k) { return k === 0 ? 0 : Math.pow(1024, k - 1); },\n /**\n * !#en Easing in and out with exponential formula. From fast to slow.\n * !#zh 指数曲线缓出函数。运动由快到慢。\n * @method expoOut\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n expoOut: function (k) { return k === 1 ? 1 : 1 - Math.pow(2, -10 * k); },\n /**\n * !#en Easing in and out with exponential formula. From slow to fast.\n * !#zh 指数曲线缓入和缓出函数。运动由慢到很快再到慢。\n * @method expoInOut\n * @param {Number} t The current time as a percentage of the total time, then back to slow.\n * @return {Number} The correct value.\n */\n expoInOut: function (k) {\n if (k === 0) {\n return 0;\n }\n if (k === 1) {\n return 1;\n }\n if (( k *= 2 ) < 1) {\n return 0.5 * Math.pow(1024, k - 1);\n }\n return 0.5 * ( -Math.pow(2, -10 * ( k - 1 )) + 2 );\n },\n\n // circ\n // easing equation function for a circular (sqrt(1-t^2))\n // @param t: Current time (in frames or seconds).\n // @return:\tThe correct value.\n\n /**\n * !#en Easing in and out with circular formula. From slow to fast.\n * !#zh 循环公式缓入函数。运动由慢到快。\n * @method circIn\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n circIn: function (k) { return 1 - Math.sqrt(1 - k * k); },\n /**\n * !#en Easing in and out with circular formula. From fast to slow.\n * !#zh 循环公式缓出函数。运动由快到慢。\n * @method circOut\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n circOut: function (k) { return Math.sqrt(1 - ( --k * k )); },\n /**\n * !#en Easing in and out with circular formula. From slow to fast.\n * !#zh 指数曲线缓入缓出函数。运动由慢到很快再到慢。\n * @method circInOut\n * @param {Number} t The current time as a percentage of the total time, then back to slow.\n * @return {Number} The correct value.\n */\n circInOut: function (k) {\n if (( k *= 2 ) < 1) {\n return -0.5 * ( Math.sqrt(1 - k * k) - 1);\n }\n return 0.5 * ( Math.sqrt(1 - ( k -= 2) * k) + 1);\n },\n\n // elastic\n // easing equation function for an elastic (exponentially decaying sine wave)\n // @param t: Current time (in frames or seconds).\n // @return: The correct value.\n // recommand value: elastic (t)\n\n /**\n * !#en Easing in action with a spring oscillating effect.\n * !#zh 弹簧回震效果的缓入函数。\n * @method elasticIn\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n elasticIn: function (k) {\n var s, a = 0.1, p = 0.4;\n if (k === 0) {\n return 0;\n }\n if (k === 1) {\n return 1;\n }\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n }\n else {\n s = p * Math.asin(1 / a) / ( 2 * Math.PI );\n }\n return -( a * Math.pow(2, 10 * ( k -= 1 )) * Math.sin(( k - s ) * ( 2 * Math.PI ) / p) );\n },\n /**\n * !#en Easing out action with a spring oscillating effect.\n * !#zh 弹簧回震效果的缓出函数。\n * @method elasticOut\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n elasticOut: function (k) {\n var s, a = 0.1, p = 0.4;\n if (k === 0) {\n return 0;\n }\n if (k === 1) {\n return 1;\n }\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n }\n else {\n s = p * Math.asin(1 / a) / ( 2 * Math.PI );\n }\n return ( a * Math.pow(2, -10 * k) * Math.sin(( k - s ) * ( 2 * Math.PI ) / p) + 1 );\n },\n /**\n * !#en Easing in and out action with a spring oscillating effect.\n * !#zh 弹簧回震效果的缓入缓出函数。\n * @method elasticInOut\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n elasticInOut: function (k) {\n var s, a = 0.1, p = 0.4;\n if (k === 0) {\n return 0;\n }\n if (k === 1) {\n return 1;\n }\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n }\n else {\n s = p * Math.asin(1 / a) / ( 2 * Math.PI );\n }\n if (( k *= 2 ) < 1) {\n return -0.5 *\n ( a * Math.pow(2, 10 * ( k -= 1 )) * Math.sin(( k - s ) * ( 2 * Math.PI ) / p) );\n }\n return a * Math.pow(2, -10 * ( k -= 1 )) * Math.sin(( k - s ) * ( 2 * Math.PI ) / p) * 0.5 + 1;\n },\n\n // back\n // easing equation function for a back (overshooting cubic easing: (s+1)*t^3 - s*t^2)\n // @param t: Current time (in frames or seconds).\n // @return: The correct value.\n\n /**\n * !#en Easing in action with \"back up\" behavior.\n * !#zh 回退效果的缓入函数。\n * @method backIn\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n backIn: function (k) {\n var s = 1.70158;\n return k * k * ( ( s + 1 ) * k - s );\n },\n /**\n * !#en Easing out action with \"back up\" behavior.\n * !#zh 回退效果的缓出函数。\n * @method backOut\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n backOut: function (k) {\n var s = 1.70158;\n return --k * k * ( ( s + 1 ) * k + s ) + 1;\n },\n /**\n * !#en Easing in and out action with \"back up\" behavior.\n * !#zh 回退效果的缓入缓出函数。\n * @method backInOut\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n backInOut: function (k) {\n var s = 1.70158 * 1.525;\n if (( k *= 2 ) < 1) {\n return 0.5 * ( k * k * ( ( s + 1 ) * k - s ) );\n }\n return 0.5 * ( ( k -= 2 ) * k * ( ( s + 1 ) * k + s ) + 2 );\n },\n\n // bounce\n // easing equation function for a bounce (exponentially decaying parabolic bounce)\n // @param t: Current time (in frames or seconds).\n // @return: The correct value.\n\n /**\n * !#en Easing in action with bouncing effect.\n * !#zh 弹跳效果的缓入函数。\n * @method bounceIn\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n bounceIn: function (k) {\n return 1 - easing.bounceOut(1 - k);\n },\n /**\n * !#en Easing out action with bouncing effect.\n * !#zh 弹跳效果的缓出函数。\n * @method bounceOut\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n bounceOut: function (k) {\n if (k < ( 1 / 2.75 )) {\n return 7.5625 * k * k;\n }\n else if (k < ( 2 / 2.75 )) {\n return 7.5625 * ( k -= ( 1.5 / 2.75 ) ) * k + 0.75;\n }\n else if (k < ( 2.5 / 2.75 )) {\n return 7.5625 * ( k -= ( 2.25 / 2.75 ) ) * k + 0.9375;\n }\n else {\n return 7.5625 * ( k -= ( 2.625 / 2.75 ) ) * k + 0.984375;\n }\n },\n /**\n * !#en Easing in and out action with bouncing effect.\n * !#zh 弹跳效果的缓入缓出函数。\n * @method bounceInOut\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n bounceInOut: function (k) {\n if (k < 0.5) {\n return easing.bounceIn(k * 2) * 0.5;\n }\n return easing.bounceOut(k * 2 - 1) * 0.5 + 0.5;\n },\n\n /**\n * !#en Target will run action with smooth effect.\n * !#zh 平滑效果函数。\n * @method smooth\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n // t<=0: 0 | 0=1: 1\n smooth: function (t) {\n if (t <= 0) {\n return 0;\n }\n if (t >= 1) {\n return 1;\n }\n return t * t * (3 - 2 * t);\n },\n\n /**\n * !#en Target will run action with fade effect.\n * !#zh 渐褪效果函数。\n * @method fade\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n // t<=0: 0 | 0=1: 1\n fade: function (t) {\n if (t <= 0) {\n return 0;\n }\n if (t >= 1) {\n return 1;\n }\n return t * t * t * (t * (t * 6 - 15) + 10);\n },\n};\n\nfunction _makeOutIn (fnIn, fnOut) {\n return function (k) {\n if (k < 0.5) {\n return fnOut(k * 2) / 2;\n }\n return fnIn(2 * k - 1) / 2 + 0.5;\n };\n}\neasing.quadOutIn = _makeOutIn(easing.quadIn, easing.quadOut);\neasing.cubicOutIn = _makeOutIn(easing.cubicIn, easing.cubicOut);\neasing.quartOutIn = _makeOutIn(easing.quartIn, easing.quartOut);\neasing.quintOutIn = _makeOutIn(easing.quintIn, easing.quintOut);\neasing.sineOutIn = _makeOutIn(easing.sineIn, easing.sineOut);\neasing.expoOutIn = _makeOutIn(easing.expoIn, easing.expoOut);\neasing.circOutIn = _makeOutIn(easing.circIn, easing.circOut);\neasing.backOutIn = _makeOutIn(easing.backIn, easing.backOut);\neasing.bounceIn = function (k) { return 1 - easing.bounceOut(1 - k); };\neasing.bounceInOut = function (k) {\n if (k < 0.5) {\n return easing.bounceIn(k * 2) * 0.5;\n }\n return easing.bounceOut(k * 2 - 1) * 0.5 + 0.5;\n};\neasing.bounceOutIn = _makeOutIn(easing.bounceIn, easing.bounceOut);\n\n/**\n * @module cc\n */\n\n/**\n * !#en This is a Easing instance.\n * !#zh 这是一个 Easing 类实例。\n * @property easing\n * @type Easing\n */\n\ncc.easing = module.exports = easing;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nrequire('./bezier');\nrequire('./easing');\nrequire('./types');\nrequire('./motion-path-helper');\nrequire('./animation-curves');\nrequire('./animation-clip');\nrequire('./animation-manager');\nrequire('./animation-state');\nrequire('./animation-animator');\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar DynamicAnimCurve = require('./animation-curves').DynamicAnimCurve;\nvar computeRatioByType = require('./animation-curves').computeRatioByType;\n\nvar bezier = require('./bezier').bezier;\nvar binarySearch = require('../core/utils/binary-search').binarySearchEpsilon;\n\nvar v2 = cc.v2;\n\nfunction Curve (points) {\n this.points = points || [];\n this.beziers = [];\n this.ratios = [];\n this.progresses = [];\n\n this.length = 0;\n\n this.computeBeziers();\n}\nCurve.prototype.computeBeziers = function () {\n this.beziers.length = 0;\n this.ratios.length = 0;\n this.progresses.length = 0;\n this.length = 0;\n\n var bezier;\n\n for (var i = 1; i < this.points.length; i++) {\n var startPoint = this.points[i - 1];\n var endPoint = this.points[i];\n bezier = new Bezier();\n bezier.start = startPoint.pos;\n bezier.startCtrlPoint = startPoint.out;\n bezier.end = endPoint.pos;\n bezier.endCtrlPoint = endPoint.in;\n this.beziers.push(bezier);\n\n this.length += bezier.getLength();\n }\n\n var current = 0;\n for (var i = 0; i < this.beziers.length; i++) {\n bezier = this.beziers[i];\n this.ratios[i] = bezier.getLength() / this.length;\n this.progresses[i] = current = current + this.ratios[i];\n }\n\n return this.beziers;\n};\n\nfunction Bezier () {\n this.start = v2();\n this.end = v2();\n this.startCtrlPoint = v2(); // cp0, cp1\n this.endCtrlPoint = v2(); // cp2, cp3\n}\n\n// Get point at relative position in curve according to arc length\n// - u [0 .. 1]\nBezier.prototype.getPointAt = function ( u ) {\n var t = this.getUtoTmapping( u );\n return this.getPoint( t );\n};\n\n\n// Get point at time t\n// - t [0 .. 1]\nBezier.prototype.getPoint = function ( t ) {\n var x = bezier(this.start.x, this.startCtrlPoint.x, this.endCtrlPoint.x, this.end.x, t);\n var y = bezier(this.start.y, this.startCtrlPoint.y, this.endCtrlPoint.y, this.end.y, t);\n\n return new v2(x, y);\n};\n\n// Get total curve arc length\nBezier.prototype.getLength = function () {\n\n var lengths = this.getLengths();\n return lengths[ lengths.length - 1 ];\n\n};\n\n// Get list of cumulative segment lengths\nBezier.prototype.getLengths = function ( divisions ) {\n\n if ( ! divisions ) divisions = (this.__arcLengthDivisions) ? (this.__arcLengthDivisions): 200;\n\n if ( this.cacheArcLengths\n && ( this.cacheArcLengths.length === divisions + 1 )) {\n\n //console.log( \"cached\", this.cacheArcLengths );\n return this.cacheArcLengths;\n\n }\n\n var cache = [];\n var current, last = this.getPoint( 0 ), vector = v2();\n var p, sum = 0;\n\n cache.push( 0 );\n\n for ( p = 1; p <= divisions; p ++ ) {\n\n current = this.getPoint ( p / divisions );\n vector.x = last.x - current.x;\n vector.y = last.y - current.y;\n sum += vector.mag();\n cache.push( sum );\n last = current;\n\n }\n\n this.cacheArcLengths = cache;\n\n return cache; // { sums: cache, sum:sum }; Sum is in the last element.\n};\n\nBezier.prototype.getUtoTmapping = function ( u, distance ) {\n\n var arcLengths = this.getLengths();\n\n var i = 0, il = arcLengths.length;\n\n var targetArcLength; // The targeted u distance value to get\n\n if ( distance ) {\n targetArcLength = distance;\n } else {\n targetArcLength = u * arcLengths[ il - 1 ];\n }\n\n //var time = Date.now();\n\n // binary search for the index with largest value smaller than target u distance\n\n var low = 0, high = il - 1, comparison;\n\n while ( low <= high ) {\n\n i = Math.floor( low + ( high - low ) / 2 ); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats\n\n comparison = arcLengths[ i ] - targetArcLength;\n\n if ( comparison < 0 ) {\n\n low = i + 1;\n continue;\n\n } else if ( comparison > 0 ) {\n\n high = i - 1;\n continue;\n\n } else {\n\n high = i;\n break;\n\n // DONE\n\n }\n\n }\n\n i = high;\n\n //console.log('b' , i, low, high, Date.now()- time);\n\n if ( arcLengths[ i ] === targetArcLength ) {\n\n var t = i / ( il - 1 );\n return t;\n\n }\n\n // we could get finer grain at lengths, or use simple interpolatation between two points\n\n var lengthBefore = arcLengths[ i ];\n var lengthAfter = arcLengths[ i + 1 ];\n\n var segmentLength = lengthAfter - lengthBefore;\n\n // determine where we are between the 'before' and 'after' points\n\n var segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength;\n\n // add that fractional amount to t\n\n var t = ( i + segmentFraction ) / ( il -1 );\n\n return t;\n};\n\n\nfunction checkMotionPath(motionPath) {\n if (!Array.isArray(motionPath)) return false;\n\n for (let i = 0, l = motionPath.length; i < l; i++) {\n let controls = motionPath[i];\n\n if (!Array.isArray(controls) || controls.length !== 6) return false;\n }\n\n return true;\n}\n\nfunction sampleMotionPaths (motionPaths, data, duration, fps, target) {\n\n function createControlPoints(array) {\n if (array instanceof cc.Vec2) {\n return {\n in: array,\n pos: array,\n out: array\n };\n }\n else if (Array.isArray(array) && array.length === 6) {\n return {\n in: v2(array[2], array[3]),\n pos: v2(array[0], array[1]),\n out: v2(array[4], array[5])\n };\n }\n\n return {\n in: cc.Vec2.ZERO,\n pos: cc.Vec2.ZERO,\n out: cc.Vec2.ZERO\n };\n }\n\n let values = data.values = data.values.map(function (value) {\n if (Array.isArray(value)) {\n value = value.length === 2 ? cc.v2(value[0], value[1]) : cc.v3(value[0], value[1], value[2]);\n }\n return value;\n });\n\n if (motionPaths.length === 0 || values.length === 0) {\n return;\n }\n\n let motionPathValid = false;\n for (let i = 0; i < motionPaths.length; i++) {\n let motionPath = motionPaths[i];\n if (motionPath && !checkMotionPath(motionPath)) {\n cc.errorID(3904, target ? target.name : '', 'position', i);\n motionPath = null;\n }\n if (motionPath && motionPath.length > 0) {\n motionPathValid = true;\n break;\n }\n }\n\n if (!motionPathValid) {\n return;\n }\n\n if (values.length === 1) {\n return;\n }\n\n var types = data.types;\n var ratios = data.ratios;\n\n var newValues = data.values = [];\n var newTypes = data.types = [];\n var newRatios = data.ratios = [];\n\n function addNewDatas (value, type, ratio) {\n newValues.push(value);\n newTypes.push(type);\n newRatios.push(ratio);\n }\n\n // ensure every ratio section's length is the same\n var startRatioOffset = 0;\n\n var EPSILON = 1e-6;\n var newType = DynamicAnimCurve.Linear;\n\n // do not need to compute last path\n for (var i = 0, l = motionPaths.length; i < l-1; i++) {\n var motionPath = motionPaths[i];\n\n var ratio = ratios[i];\n var nextRatio = ratios[i + 1];\n var betweenRatio = nextRatio - ratio;\n\n var value = values[i];\n var nextValue = values[i + 1];\n\n var type = types[i];\n\n var results = [];\n var progress = startRatioOffset / betweenRatio;\n var speed = 1 / (betweenRatio * duration * fps);\n var finalProgress;\n\n if (motionPath && motionPath.length > 0) {\n var points = [];\n points.push(createControlPoints(value));\n\n for (var j = 0, l2 = motionPath.length; j < l2; j++) {\n var controlPoints = createControlPoints(motionPath[j]);\n points.push(controlPoints);\n }\n\n points.push(createControlPoints(nextValue));\n\n // create Curve to compute beziers\n var curve = new Curve(points);\n curve.computeBeziers();\n\n // sample beziers\n var progresses = curve.progresses;\n\n while ( 1 - progress > EPSILON) {\n finalProgress = progress;\n\n finalProgress = computeRatioByType(finalProgress, type);\n\n var pos, bezier, normal, length;\n\n if (finalProgress < 0) {\n bezier = curve.beziers[0];\n length = (0 - finalProgress) * bezier.getLength();\n normal = bezier.start.sub(bezier.endCtrlPoint).normalize();\n pos = bezier.start.add(normal.mul(length));\n }\n else if (finalProgress > 1) {\n bezier = curve.beziers[curve.beziers.length - 1];\n length = (finalProgress - 1) * bezier.getLength();\n normal = bezier.end.sub(bezier.startCtrlPoint).normalize();\n pos = bezier.end.add(normal.mul(length));\n }\n else {\n var bezierIndex = binarySearch(progresses, finalProgress);\n if (bezierIndex < 0) bezierIndex = ~bezierIndex;\n\n finalProgress -= bezierIndex > 0 ? progresses[bezierIndex - 1] : 0;\n finalProgress = finalProgress / curve.ratios[bezierIndex];\n\n pos = curve.beziers[bezierIndex].getPointAt(finalProgress);\n }\n\n results.push(pos);\n progress += speed;\n }\n\n }\n else {\n while ( 1 - progress > EPSILON) {\n finalProgress = progress;\n\n finalProgress = computeRatioByType(finalProgress, type);\n\n results.push(value.lerp(nextValue, finalProgress));\n\n progress += speed;\n }\n }\n\n newType = type === 'constant' ? type : DynamicAnimCurve.Linear;\n\n for (var j = 0, l2 = results.length; j < l2; j++) {\n var newRatio = ratio + startRatioOffset + speed * j * betweenRatio;\n addNewDatas(results[j], newType, newRatio);\n }\n\n if (Math.abs(progress - 1) > EPSILON) // progress > 1\n startRatioOffset = (progress - 1) * betweenRatio;\n else\n startRatioOffset = 0;\n }\n\n if (ratios[ratios.length - 1] !== newRatios[newRatios.length -1]) {\n addNewDatas(values[values.length - 1], newType, ratios[ratios.length - 1]);\n }\n}\n\nif (CC_TEST) {\n cc._Test.sampleMotionPaths = sampleMotionPaths;\n}\n\nmodule.exports = {\n sampleMotionPaths: sampleMotionPaths,\n Curve: Curve,\n Bezier: Bezier\n};\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar js = cc.js;\nconst debug = require('../core/CCDebug');\n\n/**\n * @class Playable\n *\n */\nfunction Playable () {\n this._isPlaying = false;\n this._isPaused = false;\n this._stepOnce = false;\n}\n\nvar prototype = Playable.prototype;\n\n/**\n * !#en Is playing or paused in play mode?\n * !#zh 当前是否正在播放。\n * @property isPlaying\n * @type {boolean}\n * @default false\n * @readOnly\n */\njs.get(prototype, 'isPlaying', function () {\n return this._isPlaying;\n}, true);\n\n/**\n * !#en Is currently paused? This can be true even if in edit mode(isPlaying == false).\n * !#zh 当前是否正在暂停\n * @property isPaused\n * @type {boolean}\n * @default false\n * @readOnly\n */\njs.get(prototype, 'isPaused', function () {\n return this._isPaused;\n}, true);\n\n// virtual\n\nvar virtual = function () {};\n/**\n * @method onPlay\n * @private\n */\nprototype.onPlay = virtual;\n/**\n * @method onPause\n * @private\n */\nprototype.onPause = virtual;\n/**\n * @method onResume\n * @private\n */\nprototype.onResume = virtual;\n/**\n * @method onStop\n * @private\n */\nprototype.onStop = virtual;\n/**\n * @method onError\n * @param {string} errorCode\n * @private\n */\nprototype.onError = virtual;\n\n// public\n\n/**\n * !#en Play this animation.\n * !#zh 播放动画。\n * @method play\n */\nprototype.play = function () {\n if (this._isPlaying) {\n if (this._isPaused) {\n this._isPaused = false;\n this.onResume();\n }\n else {\n this.onError(debug.getError(3912));\n }\n }\n else {\n this._isPlaying = true;\n this.onPlay();\n }\n};\n\n/**\n * !#en Stop this animation.\n * !#zh 停止动画播放。\n * @method stop\n */\nprototype.stop = function () {\n if (this._isPlaying) {\n this._isPlaying = false;\n this.onStop();\n\n // need reset pause flag after onStop\n this._isPaused = false;\n }\n};\n\n/**\n * !#en Pause this animation.\n * !#zh 暂停动画。\n * @method pause\n */\nprototype.pause = function () {\n if (this._isPlaying && !this._isPaused) {\n this._isPaused = true;\n this.onPause();\n }\n};\n\n/**\n * !#en Resume this animation.\n * !#zh 重新播放动画。\n * @method resume\n */\nprototype.resume = function () {\n if (this._isPlaying && this._isPaused) {\n this._isPaused = false;\n this.onResume();\n }\n};\n\n/**\n * !#en Perform a single frame step.\n * !#zh 执行一帧动画。\n * @method step\n */\nprototype.step = function () {\n this.pause();\n this._stepOnce = true;\n if (!this._isPlaying) {\n this.play();\n }\n};\n\nmodule.exports = Playable;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar WrapModeMask = {\n Loop: 1 << 1,\n ShouldWrap: 1 << 2,\n // Reserved: 1 << 3,\n PingPong: 1 << 4 | 1 << 1 | 1 << 2, // Loop, ShouldWrap\n Reverse: 1 << 5 | 1 << 2, // ShouldWrap\n};\n\n/**\n * !#en Specifies how time is treated when it is outside of the keyframe range of an Animation.\n * !#zh 动画使用的循环模式。\n * @enum WrapMode\n * @memberof cc\n */\nvar WrapMode = cc.Enum({\n\n /**\n * !#en Reads the default wrap mode set higher up.\n * !#zh 向 Animation Component 或者 AnimationClip 查找 wrapMode\n * @property {Number} Default\n */\n Default: 0,\n\n /**\n * !#en All iterations are played as specified.\n * !#zh 动画只播放一遍\n * @property {Number} Normal\n */\n Normal: 1,\n\n /**\n * !#en All iterations are played in the reverse direction from the way they are specified.\n * !#zh 从最后一帧或结束位置开始反向播放,到第一帧或开始位置停止\n * @property {Number} Reverse\n */\n Reverse: WrapModeMask.Reverse,\n\n /**\n * !#en When time reaches the end of the animation, time will continue at the beginning.\n * !#zh 循环播放\n * @property {Number} Loop\n */\n Loop: WrapModeMask.Loop,\n\n /**\n * !#en All iterations are played in the reverse direction from the way they are specified.\n * And when time reaches the start of the animation, time will continue at the ending.\n * !#zh 反向循环播放\n * @property {Number} LoopReverse\n */\n LoopReverse: WrapModeMask.Loop | WrapModeMask.Reverse,\n\n /**\n * !#en Even iterations are played as specified, odd iterations are played in the reverse direction from the way they\n * are specified.\n * !#zh 从第一帧播放到最后一帧,然后反向播放回第一帧,到第一帧后再正向播放,如此循环\n * @property {Number} PingPong\n */\n PingPong: WrapModeMask.PingPong,\n\n /**\n * !#en Even iterations are played in the reverse direction from the way they are specified, odd iterations are played\n * as specified.\n * !#zh 从最后一帧开始反向播放,其他同 PingPong\n * @property {Number} PingPongReverse\n */\n PingPongReverse: WrapModeMask.PingPong | WrapModeMask.Reverse\n});\n\ncc.WrapMode = WrapMode;\n\n// For internal\nfunction WrappedInfo (info) {\n if (info) {\n this.set(info);\n return;\n }\n\n this.ratio = 0;\n this.time = 0;\n this.direction = 1;\n this.stopped = true;\n this.iterations = 0;\n this.frameIndex = undefined;\n}\n\nWrappedInfo.prototype.set = function (info) {\n this.ratio = info.ratio;\n this.time = info.time;\n this.direction = info.direction;\n this.stopped = info.stopped;\n this.iterations = info.iterations;\n this.frameIndex = info.frameIndex;\n};\n\nmodule.exports = {\n WrapModeMask,\n WrapMode,\n WrappedInfo\n};\n","/****************************************************************************\n Copyright (c) 2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst utils = require('./platform/utils');\nconst debugInfos = require('../../DebugInfos') || {};\nconst ERROR_MAP_URL = 'https://github.com/cocos-creator/engine/blob/master/EngineErrorMap.md';\n\n// the html element displays log in web page (DebugMode.INFO_FOR_WEB_PAGE)\nlet logList;\n\n/**\n * @module cc\n */\n\ncc.log = cc.warn = cc.error = cc.assert = console.log.bind ? console.log.bind(console) : console.log;\n\nlet resetDebugSetting = function (mode) {\n // reset\n cc.log = cc.warn = cc.error = cc.assert = function () {};\n\n if (mode === DebugMode.NONE)\n return;\n\n if (mode > DebugMode.ERROR) {\n //log to web page\n\n function logToWebPage (msg) {\n if (!cc.game.canvas)\n return;\n\n if (!logList) {\n var logDiv = document.createElement(\"Div\");\n logDiv.setAttribute(\"id\", \"logInfoDiv\");\n logDiv.setAttribute(\"width\", \"200\");\n logDiv.setAttribute(\"height\", cc.game.canvas.height);\n var logDivStyle = logDiv.style;\n logDivStyle.zIndex = \"99999\";\n logDivStyle.position = \"absolute\";\n logDivStyle.top = logDivStyle.left = \"0\";\n\n logList = document.createElement(\"textarea\");\n logList.setAttribute(\"rows\", \"20\");\n logList.setAttribute(\"cols\", \"30\");\n logList.setAttribute(\"disabled\", \"true\");\n var logListStyle = logList.style;\n logListStyle.backgroundColor = \"transparent\";\n logListStyle.borderBottom = \"1px solid #cccccc\";\n logListStyle.borderTopWidth = logListStyle.borderLeftWidth = logListStyle.borderRightWidth = \"0px\";\n logListStyle.borderTopStyle = logListStyle.borderLeftStyle = logListStyle.borderRightStyle = \"none\";\n logListStyle.padding = \"0px\";\n logListStyle.margin = 0;\n\n logDiv.appendChild(logList);\n cc.game.canvas.parentNode.appendChild(logDiv);\n }\n\n logList.value = logList.value + msg + \"\\r\\n\";\n logList.scrollTop = logList.scrollHeight;\n }\n\n cc.error = function () {\n logToWebPage(\"ERROR : \" + cc.js.formatStr.apply(null, arguments));\n };\n cc.assert = function (cond, msg) {\n 'use strict';\n if (!cond && msg) {\n msg = cc.js.formatStr.apply(null, cc.js.shiftArguments.apply(null, arguments));\n logToWebPage(\"ASSERT: \" + msg);\n }\n };\n if (mode !== DebugMode.ERROR_FOR_WEB_PAGE) {\n cc.warn = function () {\n logToWebPage(\"WARN : \" + cc.js.formatStr.apply(null, arguments));\n };\n }\n if (mode === DebugMode.INFO_FOR_WEB_PAGE) {\n cc.log = function () {\n logToWebPage(cc.js.formatStr.apply(null, arguments));\n };\n }\n }\n else if (console && console.log.apply) {//console is null when user doesn't open dev tool on IE9\n //log to console\n\n // For JSB\n if (!console.error) console.error = console.log;\n if (!console.warn) console.warn = console.log;\n\n /**\n * !#en\n * Outputs an error message to the Cocos Creator Console (editor) or Web Console (runtime).
\n * - In Cocos Creator, error is red.
\n * - In Chrome, error have a red icon along with red message text.
\n * !#zh\n * 输出错误消息到 Cocos Creator 编辑器的 Console 或运行时页面端的 Console 中。
\n * - 在 Cocos Creator 中,错误信息显示是红色的。
\n * - 在 Chrome 中,错误信息有红色的图标以及红色的消息文本。
\n *\n * @method error\n * @param {any} msg - A JavaScript string containing zero or more substitution strings.\n * @param {any} ...subst - JavaScript objects with which to replace substitution strings within msg. This gives you additional control over the format of the output.\n */\n if (CC_EDITOR) {\n cc.error = Editor.error;\n }\n else if (console.error.bind) {\n // use bind to avoid pollute call stacks\n cc.error = console.error.bind(console);\n }\n else {\n cc.error = CC_JSB || CC_RUNTIME ? console.error : function () {\n return console.error.apply(console, arguments);\n };\n }\n cc.assert = function (cond, msg) {\n if (!cond) {\n if (msg) {\n msg = cc.js.formatStr.apply(null, cc.js.shiftArguments.apply(null, arguments));\n }\n if (CC_DEV) {\n debugger;\n }\n if (CC_TEST) {\n ok(false, msg);\n }\n else {\n throw new Error(msg);\n }\n }\n }\n }\n if (mode !== DebugMode.ERROR) {\n /**\n * !#en\n * Outputs a warning message to the Cocos Creator Console (editor) or Web Console (runtime).\n * - In Cocos Creator, warning is yellow.\n * - In Chrome, warning have a yellow warning icon with the message text.\n * !#zh\n * 输出警告消息到 Cocos Creator 编辑器的 Console 或运行时 Web 端的 Console 中。
\n * - 在 Cocos Creator 中,警告信息显示是黄色的。
\n * - 在 Chrome 中,警告信息有着黄色的图标以及黄色的消息文本。
\n * @method warn\n * @param {any} msg - A JavaScript string containing zero or more substitution strings.\n * @param {any} ...subst - JavaScript objects with which to replace substitution strings within msg. This gives you additional control over the format of the output.\n */\n if (CC_EDITOR) {\n cc.warn = Editor.warn;\n }\n else if (console.warn.bind) {\n // use bind to avoid pollute call stacks\n cc.warn = console.warn.bind(console);\n }\n else {\n cc.warn = CC_JSB || CC_RUNTIME ? console.warn : function () {\n return console.warn.apply(console, arguments);\n };\n }\n }\n if (CC_EDITOR) {\n cc.log = Editor.log;\n }\n else if (mode === DebugMode.INFO) {\n /**\n * !#en Outputs a message to the Cocos Creator Console (editor) or Web Console (runtime).\n * !#zh 输出一条消息到 Cocos Creator 编辑器的 Console 或运行时 Web 端的 Console 中。\n * @method log\n * @param {String|any} msg - A JavaScript string containing zero or more substitution strings.\n * @param {any} ...subst - JavaScript objects with which to replace substitution strings within msg. This gives you additional control over the format of the output.\n */\n if (CC_JSB || CC_RUNTIME) {\n if (scriptEngineType === \"JavaScriptCore\") {\n // console.log has to use `console` as its context for iOS 8~9. Therefore, apply it.\n cc.log = function () {\n return console.log.apply(console, arguments);\n };\n } else {\n cc.log = console.log;\n }\n }\n else if (console.log.bind) {\n // use bind to avoid pollute call stacks\n cc.log = console.log.bind(console);\n }\n else {\n cc.log = function () {\n return console.log.apply(console, arguments);\n };\n }\n }\n};\n\ncc._throw = CC_EDITOR ? Editor.error : function (error) {\n utils.callInNextTick(function () {\n throw error;\n });\n};\n\nfunction getTypedFormatter (type) {\n return function () {\n var id = arguments[0];\n var msg = CC_DEBUG ? (debugInfos[id] || 'unknown id') : `${type} ${id}, please go to ${ERROR_MAP_URL}#${id} to see details.`;\n if (arguments.length === 1) {\n return msg;\n }\n else if (arguments.length === 2) {\n return CC_DEBUG ? cc.js.formatStr(msg, arguments[1]) :\n msg + ' Arguments: ' + arguments[1];\n }\n else {\n var argsArray = cc.js.shiftArguments.apply(null, arguments);\n return CC_DEBUG ? cc.js.formatStr.apply(null, [msg].concat(argsArray)) :\n msg + ' Arguments: ' + argsArray.join(', ');\n }\n };\n}\n\nvar logFormatter = getTypedFormatter('Log');\ncc.logID = function () {\n cc.log(logFormatter.apply(null, arguments));\n};\n\nvar warnFormatter = getTypedFormatter('Warning');\ncc.warnID = function () {\n cc.warn(warnFormatter.apply(null, arguments));\n};\n\nvar errorFormatter = getTypedFormatter('Error');\ncc.errorID = function () {\n cc.error(errorFormatter.apply(null, arguments));\n};\n\nvar assertFormatter = getTypedFormatter('Assert');\ncc.assertID = function (cond) {\n 'use strict';\n if (cond) {\n return;\n }\n cc.assert(false, assertFormatter.apply(null, cc.js.shiftArguments.apply(null, arguments)));\n};\n\n/**\n* !#en Enum for debug modes.\n* !#zh 调试模式\n* @enum debug.DebugMode\n* @memberof cc\n */\nvar DebugMode = cc.Enum({\n /**\n * !#en The debug mode none.\n * !#zh 禁止模式,禁止显示任何日志信息。\n * @property NONE\n * @type {Number}\n * @static\n */\n NONE: 0,\n /**\n * !#en The debug mode info.\n * !#zh 信息模式,在 console 中显示所有日志。\n * @property INFO\n * @type {Number}\n * @static\n */\n INFO: 1,\n /**\n * !#en The debug mode warn.\n * !#zh 警告模式,在 console 中只显示 warn 级别以上的(包含 error)日志。\n * @property WARN\n * @type {Number}\n * @static\n */\n WARN: 2,\n /**\n * !#en The debug mode error.\n * !#zh 错误模式,在 console 中只显示 error 日志。\n * @property ERROR\n * @type {Number}\n * @static\n */\n ERROR: 3,\n /**\n * !#en The debug mode info for web page.\n * !#zh 信息模式(仅 WEB 端有效),在画面上输出所有信息。\n * @property INFO_FOR_WEB_PAGE\n * @type {Number}\n * @static\n */\n INFO_FOR_WEB_PAGE: 4,\n /**\n * !#en The debug mode warn for web page.\n * !#zh 警告模式(仅 WEB 端有效),在画面上输出 warn 级别以上的(包含 error)信息。\n * @property WARN_FOR_WEB_PAGE\n * @type {Number}\n * @static\n */\n WARN_FOR_WEB_PAGE: 5,\n /**\n * !#en The debug mode error for web page.\n * !#zh 错误模式(仅 WEB 端有效),在画面上输出 error 信息。\n * @property ERROR_FOR_WEB_PAGE\n * @type {Number}\n * @static\n */\n ERROR_FOR_WEB_PAGE: 6\n});\n/**\n * !#en An object to boot the game.\n * !#zh 包含游戏主体信息并负责驱动游戏的游戏对象。\n * @class debug\n * @main\n * @static\n */\nmodule.exports = cc.debug = {\n DebugMode: DebugMode,\n\n _resetDebugSetting: resetDebugSetting,\n\n /**\n * !#en Gets error message with the error id and possible parameters.\n * !#zh 通过 error id 和必要的参数来获取错误信息。\n * @method getError\n * @param {Number} errorId\n * @param {any} [param]\n * @return {String}\n */\n getError: getTypedFormatter('ERROR'),\n\n /**\n * !#en Returns whether or not to display the FPS informations.\n * !#zh 是否显示 FPS 信息。\n * @method isDisplayStats\n * @return {Boolean}\n */\n isDisplayStats: function () {\n return cc.profiler ? cc.profiler.isShowingStats() : false;\n },\n\n /**\n * !#en Sets whether display the FPS on the bottom-left corner.\n * !#zh 设置是否在左下角显示 FPS。\n * @method setDisplayStats\n * @param {Boolean} displayStats\n */\n setDisplayStats: function (displayStats) {\n if (cc.profiler && cc.game.renderType !== cc.game.RENDER_TYPE_CANVAS) {\n displayStats ? cc.profiler.showStats() : cc.profiler.hideStats();\n cc.game.config.showFPS = !!displayStats;\n }\n },\n}","/****************************************************************************\n Copyright (c) 2008-2010 Ricardo Quesada\n Copyright (c) 2011-2012 cocos2d-x.org\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos2d-x.org\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst EventTarget = require('./event/event-target');\nconst ComponentScheduler = require('./component-scheduler');\nconst NodeActivator = require('./node-activator');\nconst Obj = require('./platform/CCObject');\nconst game = require('./CCGame');\nconst renderer = require('./renderer');\nconst eventManager = require('./event-manager');\nconst Scheduler = require('./CCScheduler');\n\n//----------------------------------------------------------------------------------------------------------------------\n\n/**\n * !#en\n *

\n * ATTENTION: USE cc.director INSTEAD OF cc.Director.
\n * cc.director is a singleton object which manage your game's logic flow.
\n * Since the cc.director is a singleton, you don't need to call any constructor or create functions,
\n * the standard way to use it is by calling:
\n * - cc.director.methodName();
\n *\n * It creates and handle the main Window and manages how and when to execute the Scenes.
\n *
\n * The cc.director is also responsible for:
\n * - initializing the OpenGL context
\n * - setting the OpenGL pixel format (default on is RGB565)
\n * - setting the OpenGL buffer depth (default on is 0-bit)
\n * - setting the color for clear screen (default one is BLACK)
\n * - setting the projection (default one is 3D)
\n * - setting the orientation (default one is Portrait)
\n *
\n *
\n * The cc.director also sets the default OpenGL context:
\n * - GL_TEXTURE_2D is enabled
\n * - GL_VERTEX_ARRAY is enabled
\n * - GL_COLOR_ARRAY is enabled
\n * - GL_TEXTURE_COORD_ARRAY is enabled
\n *

\n *

\n * cc.director also synchronizes timers with the refresh rate of the display.
\n * Features and Limitations:
\n * - Scheduled timers & drawing are synchronizes with the refresh rate of the display
\n * - Only supports animation intervals of 1/60 1/30 & 1/15
\n *

\n *\n * !#zh\n *

\n * 注意:用 cc.director 代替 cc.Director。
\n * cc.director 一个管理你的游戏的逻辑流程的单例对象。
\n * 由于 cc.director 是一个单例,你不需要调用任何构造函数或创建函数,
\n * 使用它的标准方法是通过调用:
\n * - cc.director.methodName();\n *
\n * 它创建和处理主窗口并且管理什么时候执行场景。
\n *
\n * cc.director 还负责:
\n * - 初始化 OpenGL 环境。
\n * - 设置OpenGL像素格式。(默认是 RGB565)
\n * - 设置OpenGL缓冲区深度 (默认是 0-bit)
\n * - 设置空白场景的颜色 (默认是 黑色)
\n * - 设置投影 (默认是 3D)
\n * - 设置方向 (默认是 Portrait)
\n *
\n * cc.director 设置了 OpenGL 默认环境
\n * - GL_TEXTURE_2D 启用。
\n * - GL_VERTEX_ARRAY 启用。
\n * - GL_COLOR_ARRAY 启用。
\n * - GL_TEXTURE_COORD_ARRAY 启用。
\n *

\n *

\n * cc.director 也同步定时器与显示器的刷新速率。\n *
\n * 特点和局限性:
\n * - 将计时器 & 渲染与显示器的刷新频率同步。
\n * - 只支持动画的间隔 1/60 1/30 & 1/15。
\n *

\n *\n * @class Director\n * @extends EventTarget\n */\ncc.Director = function () {\n EventTarget.call(this);\n\n // paused?\n this._paused = false;\n // purge?\n this._purgeDirectorInNextLoop = false;\n\n this._winSizeInPoints = null;\n\n // scenes\n this._scene = null;\n this._loadingScene = '';\n\n // FPS\n this._totalFrames = 0;\n this._lastUpdate = 0;\n this._deltaTime = 0.0;\n this._startTime = 0.0;\n\n // ParticleSystem max step delta time\n this._maxParticleDeltaTime = 0.0;\n\n // Scheduler for user registration update\n this._scheduler = null;\n // Scheduler for life-cycle methods in component\n this._compScheduler = null;\n // Node activator\n this._nodeActivator = null;\n // Action manager\n this._actionManager = null;\n\n var self = this;\n game.on(game.EVENT_SHOW, function () {\n self._lastUpdate = performance.now();\n });\n\n game.once(game.EVENT_ENGINE_INITED, this.init, this);\n};\n\ncc.Director.prototype = {\n constructor: cc.Director,\n init: function () {\n this._totalFrames = 0;\n this._lastUpdate = performance.now();\n this._startTime = this._lastUpdate;\n this._paused = false;\n this._purgeDirectorInNextLoop = false;\n this._winSizeInPoints = cc.size(0, 0);\n this._scheduler = new Scheduler();\n\n if (cc.ActionManager) {\n this._actionManager = new cc.ActionManager();\n this._scheduler.scheduleUpdate(this._actionManager, Scheduler.PRIORITY_SYSTEM, false);\n } else {\n this._actionManager = null;\n }\n\n this.sharedInit();\n return true;\n },\n\n /*\n * Manage all init process shared between the web engine and jsb engine.\n * All platform independent init process should be occupied here.\n */\n sharedInit: function () {\n this._compScheduler = new ComponentScheduler();\n this._nodeActivator = new NodeActivator();\n\n // Event manager\n if (eventManager) {\n eventManager.setEnabled(true);\n }\n\n // Animation manager\n if (cc.AnimationManager) {\n this._animationManager = new cc.AnimationManager();\n this._scheduler.scheduleUpdate(this._animationManager, Scheduler.PRIORITY_SYSTEM, false);\n }\n else {\n this._animationManager = null;\n }\n\n // collision manager\n if (cc.CollisionManager) {\n this._collisionManager = new cc.CollisionManager();\n this._scheduler.scheduleUpdate(this._collisionManager, Scheduler.PRIORITY_SYSTEM, false);\n }\n else {\n this._collisionManager = null;\n }\n\n // physics manager\n if (cc.PhysicsManager) {\n this._physicsManager = new cc.PhysicsManager();\n this._scheduler.scheduleUpdate(this._physicsManager, Scheduler.PRIORITY_SYSTEM, false);\n }\n else {\n this._physicsManager = null;\n }\n\n // physics 3d manager\n if (cc.Physics3DManager && (CC_PHYSICS_BUILTIN || CC_PHYSICS_CANNON)) {\n this._physics3DManager = new cc.Physics3DManager();\n this._scheduler.scheduleUpdate(this._physics3DManager, Scheduler.PRIORITY_SYSTEM, false);\n } else {\n this._physics3DManager = null;\n }\n\n // WidgetManager\n if (cc._widgetManager) {\n cc._widgetManager.init(this);\n }\n },\n\n /**\n * calculates delta time since last time it was called\n */\n calculateDeltaTime: function (now) {\n if (!now) now = performance.now();\n\n // avoid delta time from being negative\n // negative deltaTime would be caused by the precision of now's value, for details please see: https://developer.mozilla.org/zh-CN/docs/Web/API/window/requestAnimationFrame\n this._deltaTime = now > this._lastUpdate ? (now - this._lastUpdate) / 1000 : 0;\n if (CC_DEBUG && (this._deltaTime > 1))\n this._deltaTime = 1 / 60.0;\n\n this._lastUpdate = now;\n },\n\n /**\n * !#en\n * Converts a view coordinate to an WebGL coordinate
\n * Useful to convert (multi) touches coordinates to the current layout (portrait or landscape)
\n * Implementation can be found in CCDirectorWebGL.\n * !#zh 将触摸点的屏幕坐标转换为 WebGL View 下的坐标。\n * @method convertToGL\n * @param {Vec2} uiPoint\n * @return {Vec2}\n * @deprecated since v2.0\n */\n convertToGL: function (uiPoint) {\n var container = game.container;\n var view = cc.view;\n var box = container.getBoundingClientRect();\n var left = box.left + window.pageXOffset - container.clientLeft;\n var top = box.top + window.pageYOffset - container.clientTop;\n var x = view._devicePixelRatio * (uiPoint.x - left);\n var y = view._devicePixelRatio * (top + box.height - uiPoint.y);\n return view._isRotated ? cc.v2(view._viewportRect.width - y, x) : cc.v2(x, y);\n },\n\n /**\n * !#en\n * Converts an OpenGL coordinate to a view coordinate
\n * Useful to convert node points to window points for calls such as glScissor
\n * Implementation can be found in CCDirectorWebGL.\n * !#zh 将触摸点的 WebGL View 坐标转换为屏幕坐标。\n * @method convertToUI\n * @param {Vec2} glPoint\n * @return {Vec2}\n * @deprecated since v2.0\n */\n convertToUI: function (glPoint) {\n var container = game.container;\n var view = cc.view;\n var box = container.getBoundingClientRect();\n var left = box.left + window.pageXOffset - container.clientLeft;\n var top = box.top + window.pageYOffset - container.clientTop;\n var uiPoint = cc.v2(0, 0);\n if (view._isRotated) {\n uiPoint.x = left + glPoint.y / view._devicePixelRatio;\n uiPoint.y = top + box.height - (view._viewportRect.width - glPoint.x) / view._devicePixelRatio;\n }\n else {\n uiPoint.x = left + glPoint.x * view._devicePixelRatio;\n uiPoint.y = top + box.height - glPoint.y * view._devicePixelRatio;\n }\n return uiPoint;\n },\n\n /**\n * End the life of director in the next frame\n * @method end\n */\n end: function () {\n this._purgeDirectorInNextLoop = true;\n },\n\n /**\n * !#en\n * Returns the size of the WebGL view in points.
\n * It takes into account any possible rotation (device orientation) of the window.\n * !#zh 获取视图的大小,以点为单位。\n * @method getWinSize\n * @return {Size}\n * @deprecated since v2.0\n */\n getWinSize: function () {\n return cc.size(cc.winSize);\n },\n\n /**\n * !#en\n * Returns the size of the OpenGL view in pixels.
\n * It takes into account any possible rotation (device orientation) of the window.
\n * On Mac winSize and winSizeInPixels return the same value.\n * (The pixel here refers to the resource resolution. If you want to get the physics resolution of device, you need to use cc.view.getFrameSize())\n * !#zh\n * 获取视图大小,以像素为单位(这里的像素指的是资源分辨率。\n * 如果要获取屏幕物理分辨率,需要用 cc.view.getFrameSize())\n * @method getWinSizeInPixels\n * @return {Size}\n * @deprecated since v2.0\n */\n getWinSizeInPixels: function () {\n return cc.size(cc.winSize);\n },\n\n /**\n * !#en Pause the director's ticker, only involve the game logic execution.\n * It won't pause the rendering process nor the event manager.\n * If you want to pause the entier game including rendering, audio and event, \n * please use {{#crossLink \"Game.pause\"}}cc.game.pause{{/crossLink}}\n * !#zh 暂停正在运行的场景,该暂停只会停止游戏逻辑执行,但是不会停止渲染和 UI 响应。\n * 如果想要更彻底得暂停游戏,包含渲染,音频和事件,请使用 {{#crossLink \"Game.pause\"}}cc.game.pause{{/crossLink}}。\n * @method pause\n */\n pause: function () {\n if (this._paused)\n return;\n this._paused = true;\n },\n\n /**\n * Removes cached all cocos2d cached data.\n * @deprecated since v2.0\n */\n purgeCachedData: function () {\n cc.assetManager.releaseAll();\n },\n\n /**\n * Purge the cc.director itself, including unschedule all schedule, remove all event listeners, clean up and exit the running scene, stops all animations, clear cached data.\n */\n purgeDirector: function () {\n //cleanup scheduler\n this._scheduler.unscheduleAll();\n this._compScheduler.unscheduleAll();\n\n this._nodeActivator.reset();\n\n // Disable event dispatching\n if (eventManager)\n eventManager.setEnabled(false);\n\n if (!CC_EDITOR) {\n if (cc.isValid(this._scene)) {\n this._scene.destroy();\n }\n this._scene = null;\n\n cc.renderer.clear();\n cc.assetManager.builtins.clear();\n }\n\n cc.game.pause();\n\n // Clear all caches\n cc.assetManager.releaseAll();\n },\n\n /**\n * Reset the cc.director, can be used to restart the director after purge\n */\n reset: function () {\n this.purgeDirector();\n\n if (eventManager)\n eventManager.setEnabled(true);\n\n // Action manager\n if (this._actionManager){\n this._scheduler.scheduleUpdate(this._actionManager, cc.Scheduler.PRIORITY_SYSTEM, false);\n }\n\n // Animation manager\n if (this._animationManager) {\n this._scheduler.scheduleUpdate(this._animationManager, cc.Scheduler.PRIORITY_SYSTEM, false);\n }\n\n // Collider manager\n if (this._collisionManager) {\n this._scheduler.scheduleUpdate(this._collisionManager, cc.Scheduler.PRIORITY_SYSTEM, false);\n }\n\n // Physics manager\n if (this._physicsManager) {\n this._scheduler.scheduleUpdate(this._physicsManager, cc.Scheduler.PRIORITY_SYSTEM, false);\n }\n\n cc.game.resume();\n },\n\n /**\n * !#en\n * Run a scene. Replaces the running scene with a new one or enter the first scene.
\n * The new scene will be launched immediately.\n * !#zh 立刻切换指定场景。\n * @method runSceneImmediate\n * @param {Scene|SceneAsset} scene - The need run scene.\n * @param {Function} [onBeforeLoadScene] - The function invoked at the scene before loading.\n * @param {Function} [onLaunched] - The function invoked at the scene after launch.\n */\n runSceneImmediate: function (scene, onBeforeLoadScene, onLaunched) {\n cc.assertID(scene instanceof cc.Scene || scene instanceof cc.SceneAsset, 1216);\n\n if (scene instanceof cc.SceneAsset) scene = scene.scene;\n\n CC_BUILD && CC_DEBUG && console.time('InitScene');\n scene._load(); // ensure scene initialized\n CC_BUILD && CC_DEBUG && console.timeEnd('InitScene');\n\n // Re-attach or replace persist nodes\n CC_BUILD && CC_DEBUG && console.time('AttachPersist');\n var persistNodeList = Object.keys(game._persistRootNodes).map(function (x) {\n return game._persistRootNodes[x];\n });\n for (let i = 0; i < persistNodeList.length; i++) {\n let node = persistNodeList[i];\n var existNode = scene.getChildByUuid(node.uuid);\n if (existNode) {\n // scene also contains the persist node, select the old one\n var index = existNode.getSiblingIndex();\n existNode._destroyImmediate();\n scene.insertChild(node, index);\n }\n else {\n node.parent = scene;\n }\n }\n CC_BUILD && CC_DEBUG && console.timeEnd('AttachPersist');\n\n var oldScene = this._scene;\n if (!CC_EDITOR) {\n // auto release assets\n CC_BUILD && CC_DEBUG && console.time('AutoRelease');\n cc.assetManager._releaseManager._autoRelease(oldScene, scene, game._persistRootNodes);\n CC_BUILD && CC_DEBUG && console.timeEnd('AutoRelease');\n }\n\n // unload scene\n CC_BUILD && CC_DEBUG && console.time('Destroy');\n if (cc.isValid(oldScene)) {\n oldScene.destroy();\n }\n\n this._scene = null;\n\n // purge destroyed nodes belongs to old scene\n Obj._deferredDestroy();\n CC_BUILD && CC_DEBUG && console.timeEnd('Destroy');\n\n if (onBeforeLoadScene) {\n onBeforeLoadScene();\n }\n this.emit(cc.Director.EVENT_BEFORE_SCENE_LAUNCH, scene);\n\n // Run an Entity Scene\n this._scene = scene;\n\n CC_BUILD && CC_DEBUG && console.time('Activate');\n scene._activate();\n CC_BUILD && CC_DEBUG && console.timeEnd('Activate');\n\n //start scene\n cc.game.resume();\n\n if (onLaunched) {\n onLaunched(null, scene);\n }\n this.emit(cc.Director.EVENT_AFTER_SCENE_LAUNCH, scene);\n },\n\n /**\n * !#en\n * Run a scene. Replaces the running scene with a new one or enter the first scene.\n * The new scene will be launched at the end of the current frame.\n * !#zh 运行指定场景。\n * @method runScene\n * @param {Scene|SceneAsset} scene - The need run scene.\n * @param {Function} [onBeforeLoadScene] - The function invoked at the scene before loading.\n * @param {Function} [onLaunched] - The function invoked at the scene after launch.\n */\n runScene: function (scene, onBeforeLoadScene, onLaunched) {\n cc.assertID(scene, 1205);\n cc.assertID(scene instanceof cc.Scene || scene instanceof cc.SceneAsset, 1216);\n\n if (scene instanceof cc.SceneAsset) scene = scene.scene;\n // ensure scene initialized\n scene._load();\n\n // Delay run / replace scene to the end of the frame\n this.once(cc.Director.EVENT_AFTER_DRAW, function () {\n this.runSceneImmediate(scene, onBeforeLoadScene, onLaunched);\n }, this);\n },\n\n /**\n * !#en Loads the scene by its name.\n * !#zh 通过场景名称进行加载场景。\n *\n * @method loadScene\n * @param {String} sceneName - The name of the scene to load.\n * @param {Function} [onLaunched] - callback, will be called after scene launched.\n * @return {Boolean} if error, return false\n */\n loadScene: function (sceneName, onLaunched, _onUnloaded) {\n if (this._loadingScene) {\n cc.warnID(1208, sceneName, this._loadingScene);\n return false;\n }\n var bundle = cc.assetManager.bundles.find(function (bundle) {\n return bundle.getSceneInfo(sceneName);\n });\n if (bundle) {\n this.emit(cc.Director.EVENT_BEFORE_SCENE_LOADING, sceneName);\n this._loadingScene = sceneName;\n var self = this;\n console.time('LoadScene ' + sceneName);\n bundle.loadScene(sceneName, function (err, scene) {\n console.timeEnd('LoadScene ' + sceneName);\n self._loadingScene = '';\n if (err) {\n err = 'Failed to load scene: ' + err;\n cc.error(err);\n onLaunched && onLaunched(err);\n }\n else {\n self.runSceneImmediate(scene, _onUnloaded, onLaunched);\n }\n });\n return true;\n }\n else {\n cc.errorID(1209, sceneName);\n return false;\n }\n },\n\n /**\n * !#en\n * Preloads the scene to reduces loading time. You can call this method at any time you want.\n * After calling this method, you still need to launch the scene by `cc.director.loadScene`.\n * It will be totally fine to call `cc.director.loadScene` at any time even if the preloading is not\n * yet finished, the scene will be launched after loaded automatically.\n * !#zh 预加载场景,你可以在任何时候调用这个方法。\n * 调用完后,你仍然需要通过 `cc.director.loadScene` 来启动场景,因为这个方法不会执行场景加载操作。\n * 就算预加载还没完成,你也可以直接调用 `cc.director.loadScene`,加载完成后场景就会启动。\n *\n * @method preloadScene\n * @param {String} sceneName - The name of the scene to preload.\n * @param {Function} [onProgress] - callback, will be called when the load progression change.\n * @param {Number} onProgress.completedCount - The number of the items that are already completed\n * @param {Number} onProgress.totalCount - The total number of the items\n * @param {Object} onProgress.item - The latest item which flow out the pipeline\n * @param {Function} [onLoaded] - callback, will be called after scene loaded.\n * @param {Error} onLoaded.error - null or the error object.\n */\n preloadScene (sceneName, onProgress, onLoaded) {\n var bundle = cc.assetManager.bundles.find(function (bundle) {\n return bundle.getSceneInfo(sceneName);\n });\n if (bundle) {\n bundle.preloadScene(sceneName, null, onProgress, onLoaded);\n }\n else {\n cc.errorID(1209, sceneName);\n return null;\n }\n },\n\n\n /**\n * !#en Resume game logic execution after pause, if the current scene is not paused, nothing will happen.\n * !#zh 恢复暂停场景的游戏逻辑,如果当前场景没有暂停将没任何事情发生。\n * @method resume\n */\n resume: function () {\n if (!this._paused) {\n return;\n }\n\n this._lastUpdate = performance.now();\n if (!this._lastUpdate) {\n cc.logID(1200);\n }\n\n this._paused = false;\n this._deltaTime = 0;\n },\n\n /**\n * !#en\n * Enables or disables WebGL depth test.
\n * Implementation can be found in CCDirectorCanvas.js/CCDirectorWebGL.js\n * !#zh 启用/禁用深度测试(在 Canvas 渲染模式下不会生效)。\n * @method setDepthTest\n * @param {Boolean} on\n * @deprecated since v2.0\n */\n setDepthTest: function (value) {\n if (!cc.Camera.main) {\n return;\n }\n cc.Camera.main.depth = !!value;\n },\n\n /**\n * !#en\n * Set color for clear screen.
\n * (Implementation can be found in CCDirectorCanvas.js/CCDirectorWebGL.js)\n * !#zh\n * 设置场景的默认擦除颜色。
\n * 支持全透明,但不支持透明度为中间值。要支持全透明需手工开启 cc.macro.ENABLE_TRANSPARENT_CANVAS。\n * @method setClearColor\n * @param {Color} clearColor\n * @deprecated since v2.0\n */\n setClearColor: function (clearColor) {\n if (!cc.Camera.main) {\n return;\n }\n cc.Camera.main.backgroundColor = clearColor;\n },\n\n /**\n * !#en Returns current logic Scene.\n * !#zh 获取当前逻辑场景。\n * @method getRunningScene\n * @private\n * @return {Scene}\n * @deprecated since v2.0\n */\n getRunningScene: function () {\n return this._scene;\n },\n\n /**\n * !#en Returns current logic Scene.\n * !#zh 获取当前逻辑场景。\n * @method getScene\n * @return {Scene}\n * @example\n * // This will help you to get the Canvas node in scene\n * cc.director.getScene().getChildByName('Canvas');\n */\n getScene: function () {\n return this._scene;\n },\n\n /**\n * !#en Returns the FPS value. Please use {{#crossLink \"Game.setFrameRate\"}}cc.game.setFrameRate{{/crossLink}} to control animation interval.\n * !#zh 获取单位帧执行时间。请使用 {{#crossLink \"Game.setFrameRate\"}}cc.game.setFrameRate{{/crossLink}} 来控制游戏帧率。\n * @method getAnimationInterval\n * @deprecated since v2.0\n * @return {Number}\n */\n getAnimationInterval: function () {\n return 1000 / game.getFrameRate();\n },\n\n /**\n * Sets animation interval, this doesn't control the main loop.\n * To control the game's frame rate overall, please use {{#crossLink \"Game.setFrameRate\"}}cc.game.setFrameRate{{/crossLink}}\n * @method setAnimationInterval\n * @deprecated since v2.0\n * @param {Number} value - The animation interval desired.\n */\n setAnimationInterval: function (value) {\n game.setFrameRate(Math.round(1000 / value));\n },\n\n /**\n * !#en Returns the delta time since last frame.\n * !#zh 获取上一帧的增量时间。\n * @method getDeltaTime\n * @return {Number}\n */\n getDeltaTime: function () {\n return this._deltaTime;\n },\n\n /**\n * !#en Returns the total passed time since game start, unit: ms\n * !#zh 获取从游戏开始到现在总共经过的时间,单位为 ms\n * @method getTotalTime\n * @return {Number}\n */\n getTotalTime: function () {\n return performance.now() - this._startTime;\n },\n\n /**\n * !#en Returns how many frames were called since the director started.\n * !#zh 获取 director 启动以来游戏运行的总帧数。\n * @method getTotalFrames\n * @return {Number}\n */\n getTotalFrames: function () {\n return this._totalFrames;\n },\n\n /**\n * !#en Returns whether or not the Director is paused.\n * !#zh 是否处于暂停状态。\n * @method isPaused\n * @return {Boolean}\n */\n isPaused: function () {\n return this._paused;\n },\n\n /**\n * !#en Returns the cc.Scheduler associated with this director.\n * !#zh 获取和 director 相关联的 cc.Scheduler。\n * @method getScheduler\n * @return {Scheduler}\n */\n getScheduler: function () {\n return this._scheduler;\n },\n\n /**\n * !#en Sets the cc.Scheduler associated with this director.\n * !#zh 设置和 director 相关联的 cc.Scheduler。\n * @method setScheduler\n * @param {Scheduler} scheduler\n */\n setScheduler: function (scheduler) {\n if (this._scheduler !== scheduler) {\n this._scheduler = scheduler;\n }\n },\n\n /**\n * !#en Returns the cc.ActionManager associated with this director.\n * !#zh 获取和 director 相关联的 cc.ActionManager(动作管理器)。\n * @method getActionManager\n * @return {ActionManager}\n */\n getActionManager: function () {\n return this._actionManager;\n },\n /**\n * !#en Sets the cc.ActionManager associated with this director.\n * !#zh 设置和 director 相关联的 cc.ActionManager(动作管理器)。\n * @method setActionManager\n * @param {ActionManager} actionManager\n */\n setActionManager: function (actionManager) {\n if (this._actionManager !== actionManager) {\n if (this._actionManager) {\n this._scheduler.unscheduleUpdate(this._actionManager);\n }\n this._actionManager = actionManager;\n this._scheduler.scheduleUpdate(this._actionManager, cc.Scheduler.PRIORITY_SYSTEM, false);\n }\n },\n\n /* \n * !#en Returns the cc.AnimationManager associated with this director.\n * !#zh 获取和 director 相关联的 cc.AnimationManager(动画管理器)。\n * @method getAnimationManager\n * @return {AnimationManager}\n */\n getAnimationManager: function () {\n return this._animationManager;\n },\n\n /**\n * !#en Returns the cc.CollisionManager associated with this director.\n * !#zh 获取和 director 相关联的 cc.CollisionManager (碰撞管理器)。\n * @method getCollisionManager\n * @return {CollisionManager}\n */\n getCollisionManager: function () {\n return this._collisionManager;\n },\n\n /**\n * !#en Returns the cc.PhysicsManager associated with this director.\n * !#zh 返回与 director 相关联的 cc.PhysicsManager (物理管理器)。\n * @method getPhysicsManager\n * @return {PhysicsManager}\n */\n getPhysicsManager: function () {\n return this._physicsManager;\n },\n\n /**\n * !#en Returns the cc.Physics3DManager associated with this director.\n * !#zh 返回与 director 相关联的 cc.Physics3DManager (物理管理器)。\n * @method getPhysics3DManager\n * @return {Physics3DManager}\n */\n getPhysics3DManager: function () {\n return this._physics3DManager;\n },\n\n // Loop management\n /*\n * Starts Animation\n * @deprecated since v2.1.2\n */\n startAnimation: function () {\n cc.game.resume();\n },\n\n /*\n * Stops animation\n * @deprecated since v2.1.2\n */\n stopAnimation: function () {\n cc.game.pause();\n },\n\n _resetDeltaTime () {\n this._lastUpdate = performance.now();\n this._deltaTime = 0;\n },\n\n /*\n * Run main loop of director\n */\n mainLoop: CC_EDITOR ? function (deltaTime, updateAnimate) {\n this._deltaTime = deltaTime;\n\n // Update\n if (!this._paused) {\n this.emit(cc.Director.EVENT_BEFORE_UPDATE);\n\n this._compScheduler.startPhase();\n this._compScheduler.updatePhase(deltaTime);\n\n if (updateAnimate) {\n this._scheduler.update(deltaTime);\n }\n\n this._compScheduler.lateUpdatePhase(deltaTime);\n\n this.emit(cc.Director.EVENT_AFTER_UPDATE);\n }\n\n // Render\n this.emit(cc.Director.EVENT_BEFORE_DRAW);\n renderer.render(this._scene, deltaTime);\n \n // After draw\n this.emit(cc.Director.EVENT_AFTER_DRAW);\n\n this._totalFrames++;\n\n } : function (now) {\n if (this._purgeDirectorInNextLoop) {\n this._purgeDirectorInNextLoop = false;\n this.purgeDirector();\n }\n else {\n // calculate \"global\" dt\n this.calculateDeltaTime(now);\n\n // Update\n if (!this._paused) {\n // before update\n this.emit(cc.Director.EVENT_BEFORE_UPDATE);\n\n // Call start for new added components\n this._compScheduler.startPhase();\n\n // Update for components\n this._compScheduler.updatePhase(this._deltaTime);\n // Engine update with scheduler\n this._scheduler.update(this._deltaTime);\n\n // Late update for components\n this._compScheduler.lateUpdatePhase(this._deltaTime);\n\n // User can use this event to do things after update\n this.emit(cc.Director.EVENT_AFTER_UPDATE);\n \n // Destroy entities that have been removed recently\n Obj._deferredDestroy();\n }\n\n // Render\n this.emit(cc.Director.EVENT_BEFORE_DRAW);\n renderer.render(this._scene, this._deltaTime);\n\n // After draw\n this.emit(cc.Director.EVENT_AFTER_DRAW);\n\n eventManager.frameUpdateListeners();\n this._totalFrames++;\n }\n },\n\n __fastOn: function (type, callback, target) {\n this.on(type, callback, target);\n },\n\n __fastOff: function (type, callback, target) {\n this.off(type, callback, target);\n },\n};\n\n// Event target\ncc.js.addon(cc.Director.prototype, EventTarget.prototype);\n\n/**\n * !#en The event projection changed of cc.Director. This event will not get triggered since v2.0\n * !#zh cc.Director 投影变化的事件。从 v2.0 开始这个事件不会再被触发\n * @property {String} EVENT_PROJECTION_CHANGED\n * @readonly\n * @static\n * @deprecated since v2.0\n */\ncc.Director.EVENT_PROJECTION_CHANGED = \"director_projection_changed\";\n\n/**\n * !#en The event which will be triggered before loading a new scene.\n * !#zh 加载新场景之前所触发的事件。\n * @event cc.Director.EVENT_BEFORE_SCENE_LOADING\n * @param {String} sceneName - The loading scene name\n */\n/**\n * !#en The event which will be triggered before loading a new scene.\n * !#zh 加载新场景之前所触发的事件。\n * @property {String} EVENT_BEFORE_SCENE_LOADING\n * @readonly\n * @static\n */\ncc.Director.EVENT_BEFORE_SCENE_LOADING = \"director_before_scene_loading\";\n\n/*\n * !#en The event which will be triggered before launching a new scene.\n * !#zh 运行新场景之前所触发的事件。\n * @event cc.Director.EVENT_BEFORE_SCENE_LAUNCH\n * @param {String} sceneName - New scene which will be launched\n */\n/**\n * !#en The event which will be triggered before launching a new scene.\n * !#zh 运行新场景之前所触发的事件。\n * @property {String} EVENT_BEFORE_SCENE_LAUNCH\n * @readonly\n * @static\n */\ncc.Director.EVENT_BEFORE_SCENE_LAUNCH = \"director_before_scene_launch\";\n\n/**\n * !#en The event which will be triggered after launching a new scene.\n * !#zh 运行新场景之后所触发的事件。\n * @event cc.Director.EVENT_AFTER_SCENE_LAUNCH\n * @param {String} sceneName - New scene which is launched\n */\n/**\n * !#en The event which will be triggered after launching a new scene.\n * !#zh 运行新场景之后所触发的事件。\n * @property {String} EVENT_AFTER_SCENE_LAUNCH\n * @readonly\n * @static\n */\ncc.Director.EVENT_AFTER_SCENE_LAUNCH = \"director_after_scene_launch\";\n\n/**\n * !#en The event which will be triggered at the beginning of every frame.\n * !#zh 每个帧的开始时所触发的事件。\n * @event cc.Director.EVENT_BEFORE_UPDATE\n */\n/**\n * !#en The event which will be triggered at the beginning of every frame.\n * !#zh 每个帧的开始时所触发的事件。\n * @property {String} EVENT_BEFORE_UPDATE\n * @readonly\n * @static\n */\ncc.Director.EVENT_BEFORE_UPDATE = \"director_before_update\";\n\n/**\n * !#en The event which will be triggered after engine and components update logic.\n * !#zh 将在引擎和组件 “update” 逻辑之后所触发的事件。\n * @event cc.Director.EVENT_AFTER_UPDATE\n */\n/**\n * !#en The event which will be triggered after engine and components update logic.\n * !#zh 将在引擎和组件 “update” 逻辑之后所触发的事件。\n * @property {String} EVENT_AFTER_UPDATE\n * @readonly\n * @static\n */\ncc.Director.EVENT_AFTER_UPDATE = \"director_after_update\";\n\n/**\n * !#en The event is deprecated since v2.0, please use cc.Director.EVENT_BEFORE_DRAW instead\n * !#zh 这个事件从 v2.0 开始被废弃,请直接使用 cc.Director.EVENT_BEFORE_DRAW\n * @property {String} EVENT_BEFORE_VISIT\n * @readonly\n * @deprecated since v2.0\n * @static\n */\ncc.Director.EVENT_BEFORE_VISIT = \"director_before_draw\";\n\n/**\n * !#en The event is deprecated since v2.0, please use cc.Director.EVENT_BEFORE_DRAW instead\n * !#zh 这个事件从 v2.0 开始被废弃,请直接使用 cc.Director.EVENT_BEFORE_DRAW\n * @property {String} EVENT_AFTER_VISIT\n * @readonly\n * @deprecated since v2.0\n * @static\n */\ncc.Director.EVENT_AFTER_VISIT = \"director_before_draw\";\n\n/**\n * !#en The event which will be triggered before the rendering process.\n * !#zh 渲染过程之前所触发的事件。\n * @event cc.Director.EVENT_BEFORE_DRAW\n */\n/**\n * !#en The event which will be triggered before the rendering process.\n * !#zh 渲染过程之前所触发的事件。\n * @property {String} EVENT_BEFORE_DRAW\n * @readonly\n * @static\n */\ncc.Director.EVENT_BEFORE_DRAW = \"director_before_draw\";\n\n/**\n * !#en The event which will be triggered after the rendering process.\n * !#zh 渲染过程之后所触发的事件。\n * @event cc.Director.EVENT_AFTER_DRAW\n */\n/**\n * !#en The event which will be triggered after the rendering process.\n * !#zh 渲染过程之后所触发的事件。\n * @property {String} EVENT_AFTER_DRAW\n * @readonly\n * @static\n */\ncc.Director.EVENT_AFTER_DRAW = \"director_after_draw\";\n\n//Possible OpenGL projections used by director\n\n/**\n * Constant for 2D projection (orthogonal projection)\n * @property {Number} PROJECTION_2D\n * @default 0\n * @readonly\n * @static\n * @deprecated since v2.0\n */\ncc.Director.PROJECTION_2D = 0;\n\n/**\n * Constant for 3D projection with a fovy=60, znear=0.5f and zfar=1500.\n * @property {Number} PROJECTION_3D\n * @default 1\n * @readonly\n * @static\n * @deprecated since v2.0\n */\ncc.Director.PROJECTION_3D = 1;\n\n/**\n * Constant for custom projection, if cc.Director's projection set to it, it calls \"updateProjection\" on the projection delegate.\n * @property {Number} PROJECTION_CUSTOM\n * @default 3\n * @readonly\n * @static\n * @deprecated since v2.0\n */\ncc.Director.PROJECTION_CUSTOM = 3;\n\n/**\n * Constant for default projection of cc.Director, default projection is 2D projection\n * @property {Number} PROJECTION_DEFAULT\n * @default cc.Director.PROJECTION_2D\n * @readonly\n * @static\n * @deprecated since v2.0\n */\ncc.Director.PROJECTION_DEFAULT = cc.Director.PROJECTION_2D;\n\n/**\n * The event which will be triggered before the physics process.
\n * 物理过程之前所触发的事件。\n * @event Director.EVENT_BEFORE_PHYSICS\n * @readonly\n */\ncc.Director.EVENT_BEFORE_PHYSICS = 'director_before_physics';\n\n/**\n * The event which will be triggered after the physics process.
\n * 物理过程之后所触发的事件。\n * @event Director.EVENT_AFTER_PHYSICS\n * @readonly\n */\ncc.Director.EVENT_AFTER_PHYSICS = 'director_after_physics';\n\n/**\n * @module cc\n */\n\n/**\n * !#en Director\n * !#zh 导演类。\n * @property director\n * @type {Director}\n */\ncc.director = new cc.Director();\n\nmodule.exports = cc.director;","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar EventTarget = require('./event/event-target');\nrequire('../audio/CCAudioEngine');\nconst debug = require('./CCDebug');\nconst renderer = require('./renderer/index.js');\nconst dynamicAtlasManager = require('../core/renderer/utils/dynamic-atlas/manager');\n\n/**\n * @module cc\n */\n\n/**\n * !#en An object to boot the game.\n * !#zh 包含游戏主体信息并负责驱动游戏的游戏对象。\n * @class Game\n * @extends EventTarget\n */\nvar game = {\n /**\n * !#en Event triggered when game hide to background.\n * Please note that this event is not 100% guaranteed to be fired on Web platform,\n * on native platforms, it corresponds to enter background event, os status bar or notification center may not trigger this event.\n * !#zh 游戏进入后台时触发的事件。\n * 请注意,在 WEB 平台,这个事件不一定会 100% 触发,这完全取决于浏览器的回调行为。\n * 在原生平台,它对应的是应用被切换到后台事件,下拉菜单和上拉状态栏等不一定会触发这个事件,这取决于系统行为。\n * @property EVENT_HIDE\n * @type {String}\n * @example\n * cc.game.on(cc.game.EVENT_HIDE, function () {\n * cc.audioEngine.pauseMusic();\n * cc.audioEngine.pauseAllEffects();\n * });\n */\n EVENT_HIDE: \"game_on_hide\",\n\n /**\n * !#en Event triggered when game back to foreground\n * Please note that this event is not 100% guaranteed to be fired on Web platform,\n * on native platforms, it corresponds to enter foreground event.\n * !#zh 游戏进入前台运行时触发的事件。\n * 请注意,在 WEB 平台,这个事件不一定会 100% 触发,这完全取决于浏览器的回调行为。\n * 在原生平台,它对应的是应用被切换到前台事件。\n * @property EVENT_SHOW\n * @constant\n * @type {String}\n */\n EVENT_SHOW: \"game_on_show\",\n\n /**\n * !#en Event triggered when game restart\n * !#zh 调用restart后,触发事件。\n * @property EVENT_RESTART\n * @constant\n * @type {String}\n */\n EVENT_RESTART: \"game_on_restart\",\n\n /**\n * Event triggered after game inited, at this point all engine objects and game scripts are loaded\n * @property EVENT_GAME_INITED\n * @constant\n * @type {String}\n */\n EVENT_GAME_INITED: \"game_inited\",\n\n /**\n * Event triggered after engine inited, at this point you will be able to use all engine classes.\n * It was defined as EVENT_RENDERER_INITED in cocos creator v1.x and renamed in v2.0\n * @property EVENT_ENGINE_INITED\n * @constant\n * @type {String}\n */\n EVENT_ENGINE_INITED: \"engine_inited\",\n // deprecated\n EVENT_RENDERER_INITED: \"engine_inited\",\n\n /**\n * Web Canvas 2d API as renderer backend\n * @property RENDER_TYPE_CANVAS\n * @constant\n * @type {Number}\n */\n RENDER_TYPE_CANVAS: 0,\n /**\n * WebGL API as renderer backend\n * @property RENDER_TYPE_WEBGL\n * @constant\n * @type {Number}\n */\n RENDER_TYPE_WEBGL: 1,\n /**\n * OpenGL API as renderer backend\n * @property RENDER_TYPE_OPENGL\n * @constant\n * @type {Number}\n */\n RENDER_TYPE_OPENGL: 2,\n\n _persistRootNodes: {},\n\n // states\n _paused: true,//whether the game is paused\n _configLoaded: false,//whether config loaded\n _isCloning: false, // deserializing or instantiating\n _prepared: false, //whether the engine has prepared\n _rendererInitialized: false,\n\n _renderContext: null,\n\n _intervalId: null,//interval target of main\n\n _lastTime: null,\n _frameTime: null,\n\n /**\n * !#en The outer frame of the game canvas, parent of game container.\n * !#zh 游戏画布的外框,container 的父容器。\n * @property frame\n * @type {Object}\n */\n frame: null,\n /**\n * !#en The container of game canvas.\n * !#zh 游戏画布的容器。\n * @property container\n * @type {HTMLDivElement}\n */\n container: null,\n /**\n * !#en The canvas of the game.\n * !#zh 游戏的画布。\n * @property canvas\n * @type {HTMLCanvasElement}\n */\n canvas: null,\n\n /**\n * !#en The renderer backend of the game.\n * !#zh 游戏的渲染器类型。\n * @property renderType\n * @type {Number}\n */\n renderType: -1,\n\n /**\n * !#en\n * The current game configuration, including:
\n * 1. debugMode
\n * \"debugMode\" possible values :
\n * 0 - No message will be printed.
\n * 1 - cc.error, cc.assert, cc.warn, cc.log will print in console.
\n * 2 - cc.error, cc.assert, cc.warn will print in console.
\n * 3 - cc.error, cc.assert will print in console.
\n * 4 - cc.error, cc.assert, cc.warn, cc.log will print on canvas, available only on web.
\n * 5 - cc.error, cc.assert, cc.warn will print on canvas, available only on web.
\n * 6 - cc.error, cc.assert will print on canvas, available only on web.
\n * 2. showFPS
\n * Left bottom corner fps information will show when \"showFPS\" equals true, otherwise it will be hide.
\n * 3. exposeClassName
\n * Expose class name to chrome debug tools, the class intantiate performance is a little bit slower when exposed.
\n * 4. frameRate
\n * \"frameRate\" set the wanted frame rate for your game, but the real fps depends on your game implementation and the running environment.
\n * 5. id
\n * \"gameCanvas\" sets the id of your canvas element on the web page, it's useful only on web.
\n * 6. renderMode
\n * \"renderMode\" sets the renderer type, only useful on web :
\n * 0 - Automatically chosen by engine
\n * 1 - Forced to use canvas renderer
\n * 2 - Forced to use WebGL renderer, but this will be ignored on mobile browsers
\n *
\n * Please DO NOT modify this object directly, it won't have any effect.
\n * !#zh\n * 当前的游戏配置,包括:
\n * 1. debugMode(debug 模式,但是在浏览器中这个选项会被忽略)
\n * \"debugMode\" 各种设置选项的意义。
\n * 0 - 没有消息被打印出来。
\n * 1 - cc.error,cc.assert,cc.warn,cc.log 将打印在 console 中。
\n * 2 - cc.error,cc.assert,cc.warn 将打印在 console 中。
\n * 3 - cc.error,cc.assert 将打印在 console 中。
\n * 4 - cc.error,cc.assert,cc.warn,cc.log 将打印在 canvas 中(仅适用于 web 端)。
\n * 5 - cc.error,cc.assert,cc.warn 将打印在 canvas 中(仅适用于 web 端)。
\n * 6 - cc.error,cc.assert 将打印在 canvas 中(仅适用于 web 端)。
\n * 2. showFPS(显示 FPS)
\n * 当 showFPS 为 true 的时候界面的左下角将显示 fps 的信息,否则被隐藏。
\n * 3. exposeClassName
\n * 暴露类名让 Chrome DevTools 可以识别,如果开启会稍稍降低类的创建过程的性能,但对对象构造没有影响。
\n * 4. frameRate (帧率)
\n * “frameRate” 设置想要的帧率你的游戏,但真正的FPS取决于你的游戏实现和运行环境。
\n * 5. id
\n * \"gameCanvas\" Web 页面上的 Canvas Element ID,仅适用于 web 端。
\n * 6. renderMode(渲染模式)
\n * “renderMode” 设置渲染器类型,仅适用于 web 端:
\n * 0 - 通过引擎自动选择。
\n * 1 - 强制使用 canvas 渲染。\n * 2 - 强制使用 WebGL 渲染,但是在部分 Android 浏览器中这个选项会被忽略。
\n *
\n * 注意:请不要直接修改这个对象,它不会有任何效果。\n * @property config\n * @type {Object}\n */\n config: null,\n\n /**\n * !#en Callback when the scripts of engine have been load.\n * !#zh 当引擎完成启动后的回调函数。\n * @method onStart\n * @type {Function}\n */\n onStart: null,\n\n//@Public Methods\n\n// @Game play control\n /**\n * !#en Set frame rate of game.\n * !#zh 设置游戏帧率。\n * @method setFrameRate\n * @param {Number} frameRate\n */\n setFrameRate: function (frameRate) {\n var config = this.config;\n config.frameRate = frameRate;\n if (this._intervalId)\n window.cancelAnimFrame(this._intervalId);\n this._intervalId = 0;\n this._paused = true;\n this._setAnimFrame();\n this._runMainLoop();\n },\n\n /**\n * !#en Get frame rate set for the game, it doesn't represent the real frame rate.\n * !#zh 获取设置的游戏帧率(不等同于实际帧率)。\n * @method getFrameRate\n * @return {Number} frame rate\n */\n getFrameRate: function () {\n return this.config.frameRate;\n },\n\n /**\n * !#en Run the game frame by frame.\n * !#zh 执行一帧游戏循环。\n * @method step\n */\n step: function () {\n cc.director.mainLoop();\n },\n\n /**\n * !#en Pause the game main loop. This will pause:\n * game logic execution, rendering process, event manager, background music and all audio effects.\n * This is different with cc.director.pause which only pause the game logic execution.\n * !#zh 暂停游戏主循环。包含:游戏逻辑,渲染,事件处理,背景音乐和所有音效。这点和只暂停游戏逻辑的 cc.director.pause 不同。\n * @method pause\n */\n pause: function () {\n if (this._paused) return;\n this._paused = true;\n // Pause audio engine\n if (cc.audioEngine) {\n cc.audioEngine._break();\n }\n // Pause main loop\n if (this._intervalId)\n window.cancelAnimFrame(this._intervalId);\n this._intervalId = 0;\n },\n\n /**\n * !#en Resume the game from pause. This will resume:\n * game logic execution, rendering process, event manager, background music and all audio effects.\n * !#zh 恢复游戏主循环。包含:游戏逻辑,渲染,事件处理,背景音乐和所有音效。\n * @method resume\n */\n resume: function () {\n if (!this._paused) return;\n this._paused = false;\n // Resume audio engine\n if (cc.audioEngine) {\n cc.audioEngine._restore();\n }\n cc.director._resetDeltaTime();\n // Resume main loop\n this._runMainLoop();\n },\n\n /**\n * !#en Check whether the game is paused.\n * !#zh 判断游戏是否暂停。\n * @method isPaused\n * @return {Boolean}\n */\n isPaused: function () {\n return this._paused;\n },\n\n /**\n * !#en Restart game.\n * !#zh 重新开始游戏\n * @method restart\n */\n restart: function () {\n cc.director.once(cc.Director.EVENT_AFTER_DRAW, function () {\n for (var id in game._persistRootNodes) {\n game.removePersistRootNode(game._persistRootNodes[id]);\n }\n\n // Clear scene\n cc.director.getScene().destroy();\n cc.Object._deferredDestroy();\n\n // Clean up audio\n if (cc.audioEngine) {\n cc.audioEngine.uncacheAll();\n }\n\n cc.director.reset();\n\n game.pause();\n cc.assetManager.builtins.init(() => {\n game.onStart();\n game.emit(game.EVENT_RESTART);\n });\n });\n },\n\n /**\n * !#en End game, it will close the game window\n * !#zh 退出游戏\n * @method end\n */\n end: function () {\n close();\n },\n\n// @Game loading\n\n _initEngine () {\n if (this._rendererInitialized) {\n return;\n }\n\n this._initRenderer();\n\n if (!CC_EDITOR) {\n this._initEvents();\n }\n\n this.emit(this.EVENT_ENGINE_INITED);\n },\n\n _loadPreviewScript (cb) {\n if (CC_PREVIEW && window.__quick_compile_project__) {\n window.__quick_compile_project__.load(cb);\n }\n else {\n cb();\n }\n },\n\n _prepareFinished (cb) {\n // Init engine\n this._initEngine();\n this._setAnimFrame();\n cc.assetManager.builtins.init(() => {\n // Log engine version\n console.log('Cocos Creator SP v' + cc.ENGINE_VERSION);\n this._prepared = true;\n this._runMainLoop();\n\n this.emit(this.EVENT_GAME_INITED);\n\n if (cb) cb();\n });\n },\n\n eventTargetOn: EventTarget.prototype.on,\n eventTargetOnce: EventTarget.prototype.once,\n\n /**\n * !#en\n * Register an callback of a specific event type on the game object.\n * This type of event should be triggered via `emit`.\n * !#zh\n * 注册 game 的特定事件类型回调。这种类型的事件应该被 `emit` 触发。\n *\n * @method on\n * @param {String} type - A string representing the event type to listen for.\n * @param {Function} callback - The callback that will be invoked when the event is dispatched.\n * The callback is ignored if it is a duplicate (the callbacks are unique).\n * @param {any} [callback.arg1] arg1\n * @param {any} [callback.arg2] arg2\n * @param {any} [callback.arg3] arg3\n * @param {any} [callback.arg4] arg4\n * @param {any} [callback.arg5] arg5\n * @param {Object} [target] - The target (this object) to invoke the callback, can be null\n * @return {Function} - Just returns the incoming callback so you can save the anonymous function easier.\n * @typescript\n * on(type: string, callback: T, target?: any, useCapture?: boolean): T\n */\n on (type, callback, target, once) {\n // Make sure EVENT_ENGINE_INITED and EVENT_GAME_INITED callbacks to be invoked\n if ((this._prepared && type === this.EVENT_ENGINE_INITED) ||\n (!this._paused && type === this.EVENT_GAME_INITED)) {\n callback.call(target);\n }\n else {\n this.eventTargetOn(type, callback, target, once);\n }\n },\n /**\n * !#en\n * Register an callback of a specific event type on the game object,\n * the callback will remove itself after the first time it is triggered.\n * !#zh\n * 注册 game 的特定事件类型回调,回调会在第一时间被触发后删除自身。\n *\n * @method once\n * @param {String} type - A string representing the event type to listen for.\n * @param {Function} callback - The callback that will be invoked when the event is dispatched.\n * The callback is ignored if it is a duplicate (the callbacks are unique).\n * @param {any} [callback.arg1] arg1\n * @param {any} [callback.arg2] arg2\n * @param {any} [callback.arg3] arg3\n * @param {any} [callback.arg4] arg4\n * @param {any} [callback.arg5] arg5\n * @param {Object} [target] - The target (this object) to invoke the callback, can be null\n */\n once (type, callback, target) {\n // Make sure EVENT_ENGINE_INITED and EVENT_GAME_INITED callbacks to be invoked\n if ((this._prepared && type === this.EVENT_ENGINE_INITED) ||\n (!this._paused && type === this.EVENT_GAME_INITED)) {\n callback.call(target);\n }\n else {\n this.eventTargetOnce(type, callback, target);\n }\n },\n\n /**\n * !#en Prepare game.\n * !#zh 准备引擎,请不要直接调用这个函数。\n * @param {Function} cb\n * @method prepare\n */\n prepare (cb) {\n // Already prepared\n if (this._prepared) {\n if (cb) cb();\n return;\n }\n\n this._loadPreviewScript(() => {\n this._prepareFinished(cb);\n });\n },\n\n /**\n * !#en Run game with configuration object and onStart function.\n * !#zh 运行游戏,并且指定引擎配置和 onStart 的回调。\n * @method run\n * @param {Object} config - Pass configuration object or onStart function\n * @param {Function} onStart - function to be executed after game initialized\n */\n run: function (config, onStart) {\n this._initConfig(config);\n this.onStart = onStart;\n this.prepare(game.onStart && game.onStart.bind(game));\n },\n\n// @ Persist root node section\n /**\n * !#en\n * Add a persistent root node to the game, the persistent node won't be destroyed during scene transition.
\n * The target node must be placed in the root level of hierarchy, otherwise this API won't have any effect.\n * !#zh\n * 声明常驻根节点,该节点不会被在场景切换中被销毁。
\n * 目标节点必须位于为层级的根节点,否则无效。\n * @method addPersistRootNode\n * @param {Node} node - The node to be made persistent\n */\n addPersistRootNode: function (node) {\n if (!cc.Node.isNode(node) || !node.uuid) {\n cc.warnID(3800);\n return;\n }\n var id = node.uuid;\n if (!this._persistRootNodes[id]) {\n var scene = cc.director._scene;\n if (cc.isValid(scene)) {\n if (!node.parent) {\n node.parent = scene;\n }\n else if ( !(node.parent instanceof cc.Scene) ) {\n cc.warnID(3801);\n return;\n }\n else if (node.parent !== scene) {\n cc.warnID(3802);\n return;\n }\n }\n this._persistRootNodes[id] = node;\n node._persistNode = true;\n cc.assetManager._releaseManager._addPersistNodeRef(node);\n }\n },\n\n /**\n * !#en Remove a persistent root node.\n * !#zh 取消常驻根节点。\n * @method removePersistRootNode\n * @param {Node} node - The node to be removed from persistent node list\n */\n removePersistRootNode: function (node) {\n var id = node.uuid || '';\n if (node === this._persistRootNodes[id]) {\n delete this._persistRootNodes[id];\n node._persistNode = false;\n cc.assetManager._releaseManager._removePersistNodeRef(node);\n }\n },\n\n /**\n * !#en Check whether the node is a persistent root node.\n * !#zh 检查节点是否是常驻根节点。\n * @method isPersistRootNode\n * @param {Node} node - The node to be checked\n * @return {Boolean}\n */\n isPersistRootNode: function (node) {\n return node._persistNode;\n },\n\n//@Private Methods\n\n// @Time ticker section\n _setAnimFrame: function () {\n this._lastTime = performance.now();\n var frameRate = game.config.frameRate;\n this._frameTime = 1000 / frameRate;\n cc.director._maxParticleDeltaTime = this._frameTime / 1000 * 2;\n if (CC_JSB || CC_RUNTIME) {\n jsb.setPreferredFramesPerSecond(frameRate);\n window.requestAnimFrame = window.requestAnimationFrame;\n window.cancelAnimFrame = window.cancelAnimationFrame;\n }\n else {\n let rAF = window.requestAnimationFrame = window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.oRequestAnimationFrame ||\n window.msRequestAnimationFrame;\n\n if (frameRate !== 60 && frameRate !== 30) {\n window.requestAnimFrame = rAF ? this._stTimeWithRAF : this._stTime;\n window.cancelAnimFrame = this._ctTime;\n }\n else {\n window.requestAnimFrame = rAF || this._stTime;\n\n window.cancelAnimFrame = window.cancelAnimationFrame ||\n window.cancelRequestAnimationFrame ||\n window.msCancelRequestAnimationFrame ||\n window.mozCancelRequestAnimationFrame ||\n window.oCancelRequestAnimationFrame ||\n window.webkitCancelRequestAnimationFrame ||\n window.msCancelAnimationFrame ||\n window.mozCancelAnimationFrame ||\n window.webkitCancelAnimationFrame ||\n window.oCancelAnimationFrame ||\n this._ctTime;\n }\n }\n },\n\n _stTimeWithRAF: function(callback){\n var currTime = performance.now();\n var timeToCall = Math.max(0, game._frameTime - (currTime - game._lastTime));\n var id = window.setTimeout(function() {\n window.requestAnimationFrame(callback);\n }, timeToCall);\n game._lastTime = currTime + timeToCall;\n return id;\n },\n\n _stTime: function(callback){\n var currTime = performance.now();\n var timeToCall = Math.max(0, game._frameTime - (currTime - game._lastTime));\n var id = window.setTimeout(function() { callback(); },\n timeToCall);\n game._lastTime = currTime + timeToCall;\n return id;\n },\n _ctTime: function(id){\n window.clearTimeout(id);\n },\n //Run game.\n _runMainLoop: function () {\n if (CC_EDITOR) {\n return;\n }\n if (!this._prepared) return;\n\n var self = this, callback, config = self.config,\n director = cc.director,\n skip = true, frameRate = config.frameRate;\n\n debug.setDisplayStats(config.showFPS);\n\n callback = function (now) {\n if (!self._paused) {\n self._intervalId = window.requestAnimFrame(callback);\n if (!CC_JSB && !CC_RUNTIME && frameRate === 30) {\n if (skip = !skip) {\n return;\n }\n }\n director.mainLoop(now);\n }\n };\n\n self._intervalId = window.requestAnimFrame(callback);\n self._paused = false;\n },\n\n// @Game loading section\n _initConfig (config) {\n // Configs adjustment\n if (typeof config.debugMode !== 'number') {\n config.debugMode = 0;\n }\n config.exposeClassName = !!config.exposeClassName;\n if (typeof config.frameRate !== 'number') {\n config.frameRate = 60;\n }\n let renderMode = config.renderMode;\n if (typeof renderMode !== 'number' || renderMode > 2 || renderMode < 0) {\n config.renderMode = 0;\n }\n if (typeof config.registerSystemEvent !== 'boolean') {\n config.registerSystemEvent = true;\n }\n if (renderMode === 1) {\n config.showFPS = false;\n }\n else {\n config.showFPS = !!config.showFPS;\n }\n\n // Collide Map and Group List\n this.collisionMatrix = config.collisionMatrix || [];\n this.groupList = config.groupList || [];\n\n debug._resetDebugSetting(config.debugMode);\n\n this.config = config;\n this._configLoaded = true;\n },\n\n _determineRenderType () {\n let config = this.config,\n userRenderMode = parseInt(config.renderMode) || 0;\n\n // Determine RenderType\n this.renderType = this.RENDER_TYPE_CANVAS;\n let supportRender = false;\n\n if (userRenderMode === 0) {\n if (cc.sys.capabilities['opengl']) {\n this.renderType = this.RENDER_TYPE_WEBGL;\n supportRender = true;\n }\n else if (cc.sys.capabilities['canvas']) {\n this.renderType = this.RENDER_TYPE_CANVAS;\n supportRender = true;\n }\n }\n else if (userRenderMode === 1 && cc.sys.capabilities['canvas']) {\n this.renderType = this.RENDER_TYPE_CANVAS;\n supportRender = true;\n }\n else if (userRenderMode === 2 && cc.sys.capabilities['opengl']) {\n this.renderType = this.RENDER_TYPE_WEBGL;\n supportRender = true;\n }\n\n if (!supportRender) {\n throw new Error(debug.getError(3820, userRenderMode));\n }\n },\n\n _initRenderer () {\n // Avoid setup to be called twice.\n if (this._rendererInitialized) return;\n\n let el = this.config.id,\n width, height,\n localCanvas, localContainer;\n\n if (CC_JSB || CC_RUNTIME) {\n this.container = localContainer = document.createElement(\"DIV\");\n this.frame = localContainer.parentNode === document.body ? document.documentElement : localContainer.parentNode;\n localCanvas = window.__canvas;\n this.canvas = localCanvas;\n }\n else {\n var element = (el instanceof HTMLElement) ? el : (document.querySelector(el) || document.querySelector('#' + el));\n\n if (element.tagName === \"CANVAS\") {\n width = element.width;\n height = element.height;\n\n //it is already a canvas, we wrap it around with a div\n this.canvas = localCanvas = element;\n this.container = localContainer = document.createElement(\"DIV\");\n if (localCanvas.parentNode)\n localCanvas.parentNode.insertBefore(localContainer, localCanvas);\n } else {\n //we must make a new canvas and place into this element\n if (element.tagName !== \"DIV\") {\n cc.warnID(3819);\n }\n width = element.clientWidth;\n height = element.clientHeight;\n this.canvas = localCanvas = document.createElement(\"CANVAS\");\n this.container = localContainer = document.createElement(\"DIV\");\n element.appendChild(localContainer);\n }\n localContainer.setAttribute('id', 'Cocos2dGameContainer');\n localContainer.appendChild(localCanvas);\n this.frame = (localContainer.parentNode === document.body) ? document.documentElement : localContainer.parentNode;\n\n function addClass (element, name) {\n var hasClass = (' ' + element.className + ' ').indexOf(' ' + name + ' ') > -1;\n if (!hasClass) {\n if (element.className) {\n element.className += \" \";\n }\n element.className += name;\n }\n }\n addClass(localCanvas, \"gameCanvas\");\n localCanvas.setAttribute(\"width\", width || 480);\n localCanvas.setAttribute(\"height\", height || 320);\n localCanvas.setAttribute(\"tabindex\", 99);\n }\n\n this._determineRenderType();\n // WebGL context created successfully\n if (this.renderType === this.RENDER_TYPE_WEBGL) {\n var opts = {\n 'stencil': true,\n // MSAA is causing serious performance dropdown on some browsers.\n 'antialias': cc.macro.ENABLE_WEBGL_ANTIALIAS,\n 'alpha': cc.macro.ENABLE_TRANSPARENT_CANVAS\n };\n renderer.initWebGL(localCanvas, opts);\n this._renderContext = renderer.device._gl;\n\n // Enable dynamic atlas manager by default\n if (!cc.macro.CLEANUP_IMAGE_CACHE && dynamicAtlasManager) {\n dynamicAtlasManager.enabled = true;\n }\n }\n if (!this._renderContext) {\n this.renderType = this.RENDER_TYPE_CANVAS;\n // Could be ignored by module settings\n renderer.initCanvas(localCanvas);\n this._renderContext = renderer.device._ctx;\n }\n\n this.canvas.oncontextmenu = function () {\n if (!cc._isContextMenuEnable) return false;\n };\n\n this._rendererInitialized = true;\n },\n\n _initEvents: function () {\n var win = window, hiddenPropName;\n\n // register system events\n if (this.config.registerSystemEvent)\n cc.internal.inputManager.registerSystemEvent(this.canvas);\n\n if (typeof document.hidden !== 'undefined') {\n hiddenPropName = \"hidden\";\n } else if (typeof document.mozHidden !== 'undefined') {\n hiddenPropName = \"mozHidden\";\n } else if (typeof document.msHidden !== 'undefined') {\n hiddenPropName = \"msHidden\";\n } else if (typeof document.webkitHidden !== 'undefined') {\n hiddenPropName = \"webkitHidden\";\n }\n\n var hidden = false;\n\n function onHidden () {\n if (!hidden) {\n hidden = true;\n game.emit(game.EVENT_HIDE);\n }\n }\n // In order to adapt the most of platforms the onshow API.\n function onShown (arg0, arg1, arg2, arg3, arg4) {\n if (hidden) {\n hidden = false;\n game.emit(game.EVENT_SHOW, arg0, arg1, arg2, arg3, arg4);\n }\n }\n\n if (hiddenPropName) {\n var changeList = [\n \"visibilitychange\",\n \"mozvisibilitychange\",\n \"msvisibilitychange\",\n \"webkitvisibilitychange\",\n \"qbrowserVisibilityChange\"\n ];\n for (var i = 0; i < changeList.length; i++) {\n document.addEventListener(changeList[i], function (event) {\n var visible = document[hiddenPropName];\n // QQ App\n visible = visible || event[\"hidden\"];\n if (visible)\n onHidden();\n else\n onShown();\n });\n }\n } else {\n win.addEventListener(\"blur\", onHidden);\n win.addEventListener(\"focus\", onShown);\n }\n\n if (navigator.userAgent.indexOf(\"MicroMessenger\") > -1) {\n win.onfocus = onShown;\n }\n\n if (\"onpageshow\" in window && \"onpagehide\" in window) {\n win.addEventListener(\"pagehide\", onHidden);\n win.addEventListener(\"pageshow\", onShown);\n // Taobao UIWebKit\n document.addEventListener(\"pagehide\", onHidden);\n document.addEventListener(\"pageshow\", onShown);\n }\n\n this.on(game.EVENT_HIDE, function () {\n game.pause();\n });\n this.on(game.EVENT_SHOW, function () {\n game.resume();\n });\n }\n};\n\nEventTarget.call(game);\ncc.js.addon(game, EventTarget.prototype);\n\n/**\n * @module cc\n */\n\n/**\n * !#en This is a Game instance.\n * !#zh 这是一个 Game 类的实例,包含游戏主体信息并负责驱动游戏的游戏对象。。\n * @property game\n * @type Game\n */\ncc.game = module.exports = game;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos2d-x.org\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n'use strict';\n\nimport { Mat4, Vec2, Vec3, Quat, Trs } from './value-types';\n\nconst BaseNode = require('./utils/base-node');\nconst PrefabHelper = require('./utils/prefab-helper');\nconst nodeMemPool = require('./utils/trans-pool').NodeMemPool;\nconst AffineTrans = require('./utils/affine-transform');\nconst eventManager = require('./event-manager');\nconst macro = require('./platform/CCMacro');\nconst js = require('./platform/js');\nconst Event = require('./event/event');\nconst EventTarget = require('./event/event-target');\nconst RenderFlow = require('./renderer/render-flow');\n\nconst Flags = cc.Object.Flags;\nconst Destroying = Flags.Destroying;\n\nconst ERR_INVALID_NUMBER = CC_EDITOR && 'The %s is invalid';\nconst ONE_DEGREE = Math.PI / 180;\n\nvar ActionManagerExist = !!cc.ActionManager;\nvar emptyFunc = function () {};\n\n// getWorldPosition temp var\nvar _gwpVec3 = new Vec3();\nvar _gwpQuat = new Quat();\n\n// _invTransformPoint temp var\nvar _tpVec3a = new Vec3();\nvar _tpVec3b = new Vec3();\nvar _tpQuata = new Quat();\nvar _tpQuatb = new Quat();\n\n// setWorldPosition temp var\nvar _swpVec3 = new Vec3();\n\n// getWorldScale temp var\nvar _gwsVec3 = new Vec3();\n\n// setWorldScale temp var\nvar _swsVec3 = new Vec3();\n\n// getWorldRT temp var\nvar _gwrtVec3a = new Vec3();\nvar _gwrtVec3b = new Vec3();\nvar _gwrtQuata = new Quat();\nvar _gwrtQuatb = new Quat();\n\n// lookAt temp var\nvar _laVec3 = new Vec3();\nvar _laQuat = new Quat();\n\n//up、right、forward temp var\nvar _urfVec3 = new Vec3();\nvar _urfQuat = new Quat();\n\n// _hitTest temp var\nvar _htVec3a = new Vec3();\nvar _htVec3b = new Vec3();\n\n// getWorldRotation temp var\nvar _gwrQuat = new Quat();\n\n// setWorldRotation temp var\nvar _swrQuat = new Quat();\n\nvar _quata = new Quat();\nvar _mat4_temp = cc.mat4();\nvar _vec3_temp = new Vec3();\n\nvar _cachedArray = new Array(16);\n_cachedArray.length = 0;\n\nconst POSITION_ON = 1 << 0;\nconst SCALE_ON = 1 << 1;\nconst ROTATION_ON = 1 << 2;\nconst SIZE_ON = 1 << 3;\nconst ANCHOR_ON = 1 << 4;\nconst COLOR_ON = 1 << 5;\n\n\nlet BuiltinGroupIndex = cc.Enum({\n DEBUG: 31\n});\n\n/**\n * !#en Node's local dirty properties flag\n * !#zh Node 的本地属性 dirty 状态位\n * @enum Node._LocalDirtyFlag\n * @static\n * @private\n * @namespace Node\n */\nvar LocalDirtyFlag = cc.Enum({\n /**\n * !#en Flag for position dirty\n * !#zh 位置 dirty 的标记位\n * @property {Number} POSITION\n * @static\n */\n POSITION: 1 << 0,\n /**\n * !#en Flag for scale dirty\n * !#zh 缩放 dirty 的标记位\n * @property {Number} SCALE\n * @static\n */\n SCALE: 1 << 1,\n /**\n * !#en Flag for rotation dirty\n * !#zh 旋转 dirty 的标记位\n * @property {Number} ROTATION\n * @static\n */\n ROTATION: 1 << 2,\n /**\n * !#en Flag for skew dirty\n * !#zh skew dirty 的标记位\n * @property {Number} SKEW\n * @static\n */\n SKEW: 1 << 3,\n /**\n * !#en Flag for rotation, scale or position dirty\n * !#zh 旋转,缩放,或位置 dirty 的标记位\n * @property {Number} TRS\n * @static\n */\n TRS: 1 << 0 | 1 << 1 | 1 << 2,\n /**\n * !#en Flag for rotation or scale dirty\n * !#zh 旋转或缩放 dirty 的标记位\n * @property {Number} RS\n * @static\n */\n RS: 1 << 1 | 1 << 2,\n /**\n * !#en Flag for rotation, scale, position, skew dirty\n * !#zh 旋转,缩放,位置,或斜角 dirty 的标记位\n * @property {Number} TRS\n * @static\n */\n TRSS: 1 << 0 | 1 << 1 | 1 << 2 | 1 << 3,\n\n /**\n * !#en Flag for physics position dirty\n * !#zh 物理位置 dirty 的标记位\n * @property {Number} PHYSICS_POSITION\n * @static\n */\n PHYSICS_POSITION: 1 << 4,\n\n /**\n * !#en Flag for physics scale dirty\n * !#zh 物理缩放 dirty 的标记位\n * @property {Number} PHYSICS_SCALE\n * @static\n */\n PHYSICS_SCALE: 1 << 5,\n\n /**\n * !#en Flag for physics rotation dirty\n * !#zh 物理旋转 dirty 的标记位\n * @property {Number} PHYSICS_ROTATION\n * @static\n */\n PHYSICS_ROTATION: 1 << 6,\n\n /**\n * !#en Flag for physics trs dirty\n * !#zh 物理位置旋转缩放 dirty 的标记位\n * @property {Number} PHYSICS_TRS\n * @static\n */\n PHYSICS_TRS: 1 << 4 | 1 << 5 | 1 << 6,\n\n /**\n * !#en Flag for physics rs dirty\n * !#zh 物理旋转缩放 dirty 的标记位\n * @property {Number} PHYSICS_RS\n * @static\n */\n PHYSICS_RS: 1 << 5 | 1 << 6,\n\n /**\n * !#en Flag for node and physics position dirty\n * !#zh 所有位置 dirty 的标记位\n * @property {Number} ALL_POSITION\n * @static\n */\n ALL_POSITION: 1 << 0 | 1 << 4,\n\n /**\n * !#en Flag for node and physics scale dirty\n * !#zh 所有缩放 dirty 的标记位\n * @property {Number} ALL_SCALE\n * @static\n */\n ALL_SCALE: 1 << 1 | 1 << 5,\n\n /**\n * !#en Flag for node and physics rotation dirty\n * !#zh 所有旋转 dirty 的标记位\n * @property {Number} ALL_ROTATION\n * @static\n */\n ALL_ROTATION: 1 << 2 | 1 << 6,\n\n /**\n * !#en Flag for node and physics trs dirty\n * !#zh 所有trs dirty 的标记位\n * @property {Number} ALL_TRS\n * @static\n */\n ALL_TRS: 1 << 0 | 1 << 1 | 1 << 2 | 1 << 4 | 1 << 5 | 1 << 6,\n\n /**\n * !#en Flag for all dirty properties\n * !#zh 覆盖所有 dirty 状态的标记位\n * @property {Number} ALL\n * @static\n */\n ALL: 0xffff,\n});\n\n/**\n * !#en The event type supported by Node\n * !#zh Node 支持的事件类型\n * @class Node.EventType\n * @static\n * @namespace Node\n */\n// Why EventType defined as class, because the first parameter of Node.on method needs set as 'string' type.\nvar EventType = cc.Enum({\n /**\n * !#en The event type for touch start event, you can use its value directly: 'touchstart'\n * !#zh 当手指触摸到屏幕时。\n * @property {String} TOUCH_START\n * @static\n */\n TOUCH_START: 'touchstart',\n /**\n * !#en The event type for touch move event, you can use its value directly: 'touchmove'\n * !#zh 当手指在屏幕上移动时。\n * @property {String} TOUCH_MOVE\n * @static\n */\n TOUCH_MOVE: 'touchmove',\n /**\n * !#en The event type for touch end event, you can use its value directly: 'touchend'\n * !#zh 当手指在目标节点区域内离开屏幕时。\n * @property {String} TOUCH_END\n * @static\n */\n TOUCH_END: 'touchend',\n /**\n * !#en The event type for touch end event, you can use its value directly: 'touchcancel'\n * !#zh 当手指在目标节点区域外离开屏幕时。\n * @property {String} TOUCH_CANCEL\n * @static\n */\n TOUCH_CANCEL: 'touchcancel',\n\n /**\n * !#en The event type for mouse down events, you can use its value directly: 'mousedown'\n * !#zh 当鼠标按下时触发一次。\n * @property {String} MOUSE_DOWN\n * @static\n */\n MOUSE_DOWN: 'mousedown',\n /**\n * !#en The event type for mouse move events, you can use its value directly: 'mousemove'\n * !#zh 当鼠标在目标节点在目标节点区域中移动时,不论是否按下。\n * @property {String} MOUSE_MOVE\n * @static\n */\n MOUSE_MOVE: 'mousemove',\n /**\n * !#en The event type for mouse enter target events, you can use its value directly: 'mouseenter'\n * !#zh 当鼠标移入目标节点区域时,不论是否按下。\n * @property {String} MOUSE_ENTER\n * @static\n */\n MOUSE_ENTER: 'mouseenter',\n /**\n * !#en The event type for mouse leave target events, you can use its value directly: 'mouseleave'\n * !#zh 当鼠标移出目标节点区域时,不论是否按下。\n * @property {String} MOUSE_LEAVE\n * @static\n */\n MOUSE_LEAVE: 'mouseleave',\n /**\n * !#en The event type for mouse up events, you can use its value directly: 'mouseup'\n * !#zh 当鼠标从按下状态松开时触发一次。\n * @property {String} MOUSE_UP\n * @static\n */\n MOUSE_UP: 'mouseup',\n /**\n * !#en The event type for mouse wheel events, you can use its value directly: 'mousewheel'\n * !#zh 当鼠标滚轮滚动时。\n * @property {String} MOUSE_WHEEL\n * @static\n */\n MOUSE_WHEEL: 'mousewheel',\n\n /**\n * !#en The event type for position change events.\n * Performance note, this event will be triggered every time corresponding properties being changed,\n * if the event callback have heavy logic it may have great performance impact, try to avoid such scenario.\n * !#zh 当节点位置改变时触发的事件。\n * 性能警告:这个事件会在每次对应的属性被修改时触发,如果事件回调损耗较高,有可能对性能有很大的负面影响,请尽量避免这种情况。\n * @property {String} POSITION_CHANGED\n * @static\n */\n POSITION_CHANGED: 'position-changed',\n /**\n * !#en The event type for rotation change events.\n * Performance note, this event will be triggered every time corresponding properties being changed,\n * if the event callback have heavy logic it may have great performance impact, try to avoid such scenario.\n * !#zh 当节点旋转改变时触发的事件。\n * 性能警告:这个事件会在每次对应的属性被修改时触发,如果事件回调损耗较高,有可能对性能有很大的负面影响,请尽量避免这种情况。\n * @property {String} ROTATION_CHANGED\n * @static\n */\n ROTATION_CHANGED: 'rotation-changed',\n /**\n * !#en The event type for scale change events.\n * Performance note, this event will be triggered every time corresponding properties being changed,\n * if the event callback have heavy logic it may have great performance impact, try to avoid such scenario.\n * !#zh 当节点缩放改变时触发的事件。\n * 性能警告:这个事件会在每次对应的属性被修改时触发,如果事件回调损耗较高,有可能对性能有很大的负面影响,请尽量避免这种情况。\n * @property {String} SCALE_CHANGED\n * @static\n */\n SCALE_CHANGED: 'scale-changed',\n /**\n * !#en The event type for size change events.\n * Performance note, this event will be triggered every time corresponding properties being changed,\n * if the event callback have heavy logic it may have great performance impact, try to avoid such scenario.\n * !#zh 当节点尺寸改变时触发的事件。\n * 性能警告:这个事件会在每次对应的属性被修改时触发,如果事件回调损耗较高,有可能对性能有很大的负面影响,请尽量避免这种情况。\n * @property {String} SIZE_CHANGED\n * @static\n */\n SIZE_CHANGED: 'size-changed',\n /**\n * !#en The event type for anchor point change events.\n * Performance note, this event will be triggered every time corresponding properties being changed,\n * if the event callback have heavy logic it may have great performance impact, try to avoid such scenario.\n * !#zh 当节点锚点改变时触发的事件。\n * 性能警告:这个事件会在每次对应的属性被修改时触发,如果事件回调损耗较高,有可能对性能有很大的负面影响,请尽量避免这种情况。\n * @property {String} ANCHOR_CHANGED\n * @static\n */\n ANCHOR_CHANGED: 'anchor-changed',\n /**\n * !#en The event type for color change events.\n * Performance note, this event will be triggered every time corresponding properties being changed,\n * if the event callback have heavy logic it may have great performance impact, try to avoid such scenario.\n * !#zh 当节点颜色改变时触发的事件。\n * 性能警告:这个事件会在每次对应的属性被修改时触发,如果事件回调损耗较高,有可能对性能有很大的负面影响,请尽量避免这种情况。\n * @property {String} COLOR_CHANGED\n * @static\n */\n COLOR_CHANGED: 'color-changed',\n /**\n * !#en The event type for new child added events.\n * !#zh 当新的子节点被添加时触发的事件。\n * @property {String} CHILD_ADDED\n * @static\n */\n CHILD_ADDED: 'child-added',\n /**\n * !#en The event type for child removed events.\n * !#zh 当子节点被移除时触发的事件。\n * @property {String} CHILD_REMOVED\n * @static\n */\n CHILD_REMOVED: 'child-removed',\n /**\n * !#en The event type for children reorder events.\n * !#zh 当子节点顺序改变时触发的事件。\n * @property {String} CHILD_REORDER\n * @static\n */\n CHILD_REORDER: 'child-reorder',\n /**\n * !#en The event type for node group changed events.\n * !#zh 当节点归属群组发生变化时触发的事件。\n * @property {String} GROUP_CHANGED\n * @static\n */\n GROUP_CHANGED: 'group-changed',\n /**\n * !#en The event type for node's sibling order changed.\n * !#zh 当节点在兄弟节点中的顺序发生变化时触发的事件。\n * @property {String} SIBLING_ORDER_CHANGED\n * @static\n */\n SIBLING_ORDER_CHANGED: 'sibling-order-changed',\n});\n\nvar _touchEvents = [\n EventType.TOUCH_START,\n EventType.TOUCH_MOVE,\n EventType.TOUCH_END,\n EventType.TOUCH_CANCEL,\n];\nvar _mouseEvents = [\n EventType.MOUSE_DOWN,\n EventType.MOUSE_ENTER,\n EventType.MOUSE_MOVE,\n EventType.MOUSE_LEAVE,\n EventType.MOUSE_UP,\n EventType.MOUSE_WHEEL,\n];\n\nvar _skewNeedWarn = true;\nvar _skewWarn = function (value, node) {\n if (value !== 0) {\n var nodePath = \"\";\n if (CC_EDITOR) {\n var NodeUtils = Editor.require('scene://utils/node');\n nodePath = `Node: ${NodeUtils.getNodePath(node)}.`\n }\n _skewNeedWarn && cc.warn(\"`cc.Node.skewX/Y` is deprecated since v2.2.1, please use 3D node instead.\", nodePath);\n !CC_EDITOR && (_skewNeedWarn = false);\n }\n}\n\nvar _currentHovered = null;\n\nvar _touchStartHandler = function (touch, event) {\n var pos = touch.getLocation();\n var node = this.owner;\n\n if (node._hitTest(pos, this)) {\n event.type = EventType.TOUCH_START;\n event.touch = touch;\n event.bubbles = true;\n node.dispatchEvent(event);\n return true;\n }\n return false;\n};\nvar _touchMoveHandler = function (touch, event) {\n var node = this.owner;\n event.type = EventType.TOUCH_MOVE;\n event.touch = touch;\n event.bubbles = true;\n node.dispatchEvent(event);\n};\nvar _touchEndHandler = function (touch, event) {\n var pos = touch.getLocation();\n var node = this.owner;\n\n if (node._hitTest(pos, this)) {\n event.type = EventType.TOUCH_END;\n }\n else {\n event.type = EventType.TOUCH_CANCEL;\n }\n event.touch = touch;\n event.bubbles = true;\n node.dispatchEvent(event);\n};\nvar _touchCancelHandler = function (touch, event) {\n var pos = touch.getLocation();\n var node = this.owner;\n\n event.type = EventType.TOUCH_CANCEL;\n event.touch = touch;\n event.bubbles = true;\n node.dispatchEvent(event);\n};\n\nvar _mouseDownHandler = function (event) {\n var pos = event.getLocation();\n var node = this.owner;\n\n if (node._hitTest(pos, this)) {\n event.type = EventType.MOUSE_DOWN;\n event.bubbles = true;\n node.dispatchEvent(event);\n }\n};\nvar _mouseMoveHandler = function (event) {\n var pos = event.getLocation();\n var node = this.owner;\n var hit = node._hitTest(pos, this);\n if (hit) {\n if (!this._previousIn) {\n // Fix issue when hover node switched, previous hovered node won't get MOUSE_LEAVE notification\n if (_currentHovered && _currentHovered._mouseListener) {\n event.type = EventType.MOUSE_LEAVE;\n _currentHovered.dispatchEvent(event);\n _currentHovered._mouseListener._previousIn = false;\n }\n _currentHovered = this.owner;\n event.type = EventType.MOUSE_ENTER;\n node.dispatchEvent(event);\n this._previousIn = true;\n }\n event.type = EventType.MOUSE_MOVE;\n event.bubbles = true;\n node.dispatchEvent(event);\n }\n else if (this._previousIn) {\n event.type = EventType.MOUSE_LEAVE;\n node.dispatchEvent(event);\n this._previousIn = false;\n _currentHovered = null;\n }\n else {\n // continue dispatching\n return;\n }\n\n // Event processed, cleanup\n event.stopPropagation();\n};\nvar _mouseUpHandler = function (event) {\n var pos = event.getLocation();\n var node = this.owner;\n\n if (node._hitTest(pos, this)) {\n event.type = EventType.MOUSE_UP;\n event.bubbles = true;\n node.dispatchEvent(event);\n event.stopPropagation();\n }\n};\nvar _mouseWheelHandler = function (event) {\n var pos = event.getLocation();\n var node = this.owner;\n\n if (node._hitTest(pos, this)) {\n event.type = EventType.MOUSE_WHEEL;\n event.bubbles = true;\n node.dispatchEvent(event);\n event.stopPropagation();\n }\n};\n\nfunction _searchComponentsInParent (node, comp) {\n if (comp) {\n let index = 0;\n let list = null;\n for (var curr = node; curr && cc.Node.isNode(curr); curr = curr._parent, ++index) {\n if (curr.getComponent(comp)) {\n let next = {\n index: index,\n node: curr,\n };\n\n if (list) {\n list.push(next);\n } else {\n list = [next];\n }\n }\n }\n\n return list;\n }\n\n return null;\n}\n\nfunction _checkListeners (node, events) {\n if (!(node._objFlags & Destroying)) {\n if (node._bubblingListeners) {\n for (let i = 0, l = events.length; i < l; ++i) {\n if (node._bubblingListeners.hasEventListener(events[i])) {\n return true;\n }\n }\n }\n if (node._capturingListeners) {\n for (let i = 0, l = events.length; i < l; ++i) {\n if (node._capturingListeners.hasEventListener(events[i])) {\n return true;\n }\n }\n }\n return false;\n }\n return true;\n}\n\nfunction _doDispatchEvent (owner, event) {\n var target, i;\n event.target = owner;\n\n // Event.CAPTURING_PHASE\n _cachedArray.length = 0;\n owner._getCapturingTargets(event.type, _cachedArray);\n // capturing\n event.eventPhase = 1;\n for (i = _cachedArray.length - 1; i >= 0; --i) {\n target = _cachedArray[i];\n if (target._capturingListeners) {\n event.currentTarget = target;\n // fire event\n target._capturingListeners.emit(event.type, event, _cachedArray);\n // check if propagation stopped\n if (event._propagationStopped) {\n _cachedArray.length = 0;\n return;\n }\n }\n }\n _cachedArray.length = 0;\n\n // Event.AT_TARGET\n // checks if destroyed in capturing callbacks\n event.eventPhase = 2;\n event.currentTarget = owner;\n if (owner._capturingListeners) {\n owner._capturingListeners.emit(event.type, event);\n }\n if (!event._propagationImmediateStopped && owner._bubblingListeners) {\n owner._bubblingListeners.emit(event.type, event);\n }\n\n if (!event._propagationStopped && event.bubbles) {\n // Event.BUBBLING_PHASE\n owner._getBubblingTargets(event.type, _cachedArray);\n // propagate\n event.eventPhase = 3;\n for (i = 0; i < _cachedArray.length; ++i) {\n target = _cachedArray[i];\n if (target._bubblingListeners) {\n event.currentTarget = target;\n // fire event\n target._bubblingListeners.emit(event.type, event);\n // check if propagation stopped\n if (event._propagationStopped) {\n _cachedArray.length = 0;\n return;\n }\n }\n }\n }\n _cachedArray.length = 0;\n}\n\n// traversal the node tree, child cullingMask must keep the same with the parent.\nfunction _getActualGroupIndex (node) {\n let groupIndex = node.groupIndex;\n if (groupIndex === 0 && node.parent) {\n groupIndex = _getActualGroupIndex(node.parent);\n }\n return groupIndex;\n}\n\nfunction _updateCullingMask (node) {\n let index = _getActualGroupIndex(node);\n node._cullingMask = 1 << index;\n if (CC_JSB && CC_NATIVERENDERER) {\n node._proxy && node._proxy.updateCullingMask();\n }\n for (let i = 0; i < node._children.length; i++) {\n _updateCullingMask(node._children[i]);\n }\n}\n\n// 2D/3D matrix functions\nfunction updateLocalMatrix3D () {\n if (this._localMatDirty & LocalDirtyFlag.TRSS) {\n // Update transform\n let t = this._matrix;\n let tm = t.m;\n Trs.toMat4(t, this._trs);\n\n // skew\n if (this._skewX || this._skewY) {\n let a = tm[0], b = tm[1], c = tm[4], d = tm[5];\n let skx = Math.tan(this._skewX * ONE_DEGREE);\n let sky = Math.tan(this._skewY * ONE_DEGREE);\n if (skx === Infinity)\n skx = 99999999;\n if (sky === Infinity)\n sky = 99999999;\n tm[0] = a + c * sky;\n tm[1] = b + d * sky;\n tm[4] = c + a * skx;\n tm[5] = d + b * skx;\n }\n this._localMatDirty &= ~LocalDirtyFlag.TRSS;\n // Register dirty status of world matrix so that it can be recalculated\n this._worldMatDirty = true;\n }\n}\n\nfunction updateLocalMatrix2D () {\n let dirtyFlag = this._localMatDirty;\n if (!(dirtyFlag & LocalDirtyFlag.TRSS)) return;\n\n // Update transform\n let t = this._matrix;\n let tm = t.m;\n let trs = this._trs;\n\n if (dirtyFlag & (LocalDirtyFlag.RS | LocalDirtyFlag.SKEW)) {\n let rotation = -this._eulerAngles.z;\n let hasSkew = this._skewX || this._skewY;\n let sx = trs[7], sy = trs[8];\n\n if (rotation || hasSkew) {\n let a = 1, b = 0, c = 0, d = 1;\n // rotation\n if (rotation) {\n let rotationRadians = rotation * ONE_DEGREE;\n c = Math.sin(rotationRadians);\n d = Math.cos(rotationRadians);\n a = d;\n b = -c;\n }\n // scale\n tm[0] = a *= sx;\n tm[1] = b *= sx;\n tm[4] = c *= sy;\n tm[5] = d *= sy;\n // skew\n if (hasSkew) {\n let a = tm[0], b = tm[1], c = tm[4], d = tm[5];\n let skx = Math.tan(this._skewX * ONE_DEGREE);\n let sky = Math.tan(this._skewY * ONE_DEGREE);\n if (skx === Infinity)\n skx = 99999999;\n if (sky === Infinity)\n sky = 99999999;\n tm[0] = a + c * sky;\n tm[1] = b + d * sky;\n tm[4] = c + a * skx;\n tm[5] = d + b * skx;\n }\n }\n else {\n tm[0] = sx;\n tm[1] = 0;\n tm[4] = 0;\n tm[5] = sy;\n }\n }\n\n // position\n tm[12] = trs[0];\n tm[13] = trs[1];\n\n this._localMatDirty &= ~LocalDirtyFlag.TRSS;\n // Register dirty status of world matrix so that it can be recalculated\n this._worldMatDirty = true;\n}\n\nfunction calculWorldMatrix3D () {\n // Avoid as much function call as possible\n if (this._localMatDirty & LocalDirtyFlag.TRSS) {\n this._updateLocalMatrix();\n }\n\n if (this._parent) {\n let parentMat = this._parent._worldMatrix;\n Mat4.mul(this._worldMatrix, parentMat, this._matrix);\n }\n else {\n Mat4.copy(this._worldMatrix, this._matrix);\n }\n this._worldMatDirty = false;\n}\n\nfunction calculWorldMatrix2D () {\n // Avoid as much function call as possible\n if (this._localMatDirty & LocalDirtyFlag.TRSS) {\n this._updateLocalMatrix();\n }\n\n // Assume parent world matrix is correct\n let parent = this._parent;\n if (parent) {\n this._mulMat(this._worldMatrix, parent._worldMatrix, this._matrix);\n }\n else {\n Mat4.copy(this._worldMatrix, this._matrix);\n }\n this._worldMatDirty = false;\n}\n\nfunction mulMat2D (out, a, b) {\n let am = a.m, bm = b.m, outm = out.m;\n let aa=am[0], ab=am[1], ac=am[4], ad=am[5], atx=am[12], aty=am[13];\n let ba=bm[0], bb=bm[1], bc=bm[4], bd=bm[5], btx=bm[12], bty=bm[13];\n if (ab !== 0 || ac !== 0) {\n outm[0] = ba * aa + bb * ac;\n outm[1] = ba * ab + bb * ad;\n outm[4] = bc * aa + bd * ac;\n outm[5] = bc * ab + bd * ad;\n outm[12] = aa * btx + ac * bty + atx;\n outm[13] = ab * btx + ad * bty + aty;\n }\n else {\n outm[0] = ba * aa;\n outm[1] = bb * ad;\n outm[4] = bc * aa;\n outm[5] = bd * ad;\n outm[12] = aa * btx + atx;\n outm[13] = ad * bty + aty;\n }\n}\n\nconst mulMat3D = Mat4.mul;\n\n/**\n * !#en\n * Class of all entities in Cocos Creator scenes.
\n * For events supported by Node, please refer to {{#crossLink \"Node.EventType\"}}{{/crossLink}}\n * !#zh\n * Cocos Creator 场景中的所有节点类。
\n * 支持的节点事件,请参阅 {{#crossLink \"Node.EventType\"}}{{/crossLink}}。\n * @class Node\n * @extends _BaseNode\n */\nlet NodeDefines = {\n name: 'cc.Node',\n extends: BaseNode,\n\n properties: {\n // SERIALIZABLE\n _opacity: 255,\n _color: cc.Color.WHITE,\n _contentSize: cc.Size,\n _anchorPoint: cc.v2(0.5, 0.5),\n _position: undefined,\n _scale: undefined,\n _trs: null,\n _eulerAngles: cc.Vec3,\n _skewX: 0.0,\n _skewY: 0.0,\n _zIndex: {\n default: undefined,\n type: cc.Integer\n },\n _localZOrder: {\n default: 0,\n serializable: false\n },\n\n _is3DNode: false,\n\n // internal properties\n /**\n * !#en\n * Group index of node.
\n * Which Group this node belongs to will resolve that this node's collision components can collide with which other collision componentns.
\n * !#zh\n * 节点的分组索引。
\n * 节点的分组将关系到节点的碰撞组件可以与哪些碰撞组件相碰撞。
\n * @property groupIndex\n * @type {Integer}\n * @default 0\n */\n _groupIndex: {\n default: 0,\n formerlySerializedAs: 'groupIndex'\n },\n groupIndex: {\n get () {\n return this._groupIndex;\n },\n set (value) {\n this._groupIndex = value;\n _updateCullingMask(this);\n this.emit(EventType.GROUP_CHANGED, this);\n }\n },\n\n /**\n * !#en\n * Group of node.
\n * Which Group this node belongs to will resolve that this node's collision components can collide with which other collision componentns.
\n * !#zh\n * 节点的分组。
\n * 节点的分组将关系到节点的碰撞组件可以与哪些碰撞组件相碰撞。
\n * @property group\n * @type {String}\n */\n group: {\n get () {\n return cc.game.groupList[this.groupIndex] || '';\n },\n\n set (value) {\n // update the groupIndex\n this.groupIndex = cc.game.groupList.indexOf(value);\n }\n },\n\n //properties moved from base node begin\n\n /**\n * !#en The position (x, y) of the node in its parent's coordinates.\n * !#zh 节点在父节点坐标系中的位置(x, y)。\n * @property {Vec3} position\n * @example\n * cc.log(\"Node Position: \" + node.position);\n */\n\n /**\n * !#en x axis position of node.\n * !#zh 节点 X 轴坐标。\n * @property x\n * @type {Number}\n * @example\n * node.x = 100;\n * cc.log(\"Node Position X: \" + node.x);\n */\n x: {\n get () {\n return this._trs[0];\n },\n set (value) {\n let trs = this._trs;\n if (value !== trs[0]) {\n if (!CC_EDITOR || isFinite(value)) {\n let oldValue;\n if (CC_EDITOR) {\n oldValue = trs[0];\n }\n\n trs[0] = value;\n this.setLocalDirty(LocalDirtyFlag.ALL_POSITION);\n\n // fast check event\n if (this._eventMask & POSITION_ON) {\n // send event\n if (CC_EDITOR) {\n this.emit(EventType.POSITION_CHANGED, new cc.Vec3(oldValue, trs[1], trs[2]));\n }\n else {\n this.emit(EventType.POSITION_CHANGED);\n }\n }\n }\n else {\n cc.error(ERR_INVALID_NUMBER, 'new x');\n }\n }\n },\n },\n\n /**\n * !#en y axis position of node.\n * !#zh 节点 Y 轴坐标。\n * @property y\n * @type {Number}\n * @example\n * node.y = 100;\n * cc.log(\"Node Position Y: \" + node.y);\n */\n y: {\n get () {\n return this._trs[1];\n },\n set (value) {\n let trs = this._trs;\n if (value !== trs[1]) {\n if (!CC_EDITOR || isFinite(value)) {\n let oldValue;\n if (CC_EDITOR) {\n oldValue = trs[1];\n }\n\n trs[1] = value;\n this.setLocalDirty(LocalDirtyFlag.ALL_POSITION);\n\n // fast check event\n if (this._eventMask & POSITION_ON) {\n // send event\n if (CC_EDITOR) {\n this.emit(EventType.POSITION_CHANGED, new cc.Vec3(trs[0], oldValue, trs[2]));\n }\n else {\n this.emit(EventType.POSITION_CHANGED);\n }\n }\n }\n else {\n cc.error(ERR_INVALID_NUMBER, 'new y');\n }\n }\n },\n },\n\n /**\n * !#en z axis position of node.\n * !#zh 节点 Z 轴坐标。\n * @property z\n * @type {Number}\n */\n z: {\n get () {\n return this._trs[2];\n },\n set (value) {\n let trs = this._trs;\n if (value !== trs[2]) {\n if (!CC_EDITOR || isFinite(value)) {\n let oldValue;\n if (CC_EDITOR) {\n oldValue = trs[2];\n }\n trs[2] = value;\n this.setLocalDirty(LocalDirtyFlag.ALL_POSITION);\n !CC_NATIVERENDERER && (this._renderFlag |= RenderFlow.FLAG_WORLD_TRANSFORM);\n // fast check event\n if (this._eventMask & POSITION_ON) {\n if (CC_EDITOR) {\n this.emit(EventType.POSITION_CHANGED, new cc.Vec3(trs[0], trs[1], oldValue));\n }\n else {\n this.emit(EventType.POSITION_CHANGED);\n }\n }\n }\n else {\n cc.error(ERR_INVALID_NUMBER, 'new z');\n }\n }\n }\n },\n\n /**\n * !#en Rotation of node.\n * !#zh 该节点旋转角度。\n * @property rotation\n * @type {Number}\n * @deprecated since v2.1\n * @example\n * node.rotation = 90;\n * cc.log(\"Node Rotation: \" + node.rotation);\n */\n rotation: {\n get () {\n if (CC_DEBUG) {\n cc.warn(\"`cc.Node.rotation` is deprecated since v2.1.0, please use `-angle` instead. (`this.node.rotation` -> `-this.node.angle`)\");\n }\n return -this.angle;\n },\n set (value) {\n if (CC_DEBUG) {\n cc.warn(\"`cc.Node.rotation` is deprecated since v2.1.0, please set `-angle` instead. (`this.node.rotation = x` -> `this.node.angle = -x`)\");\n }\n this.angle = -value;\n }\n },\n\n /**\n * !#en\n * Angle of node, the positive value is anti-clockwise direction.\n * !#zh\n * 该节点的旋转角度,正值为逆时针方向。\n * @property angle\n * @type {Number}\n */\n angle: {\n get () {\n return this._eulerAngles.z;\n },\n set (value) {\n Vec3.set(this._eulerAngles, 0, 0, value);\n Trs.fromAngleZ(this._trs, value);\n this.setLocalDirty(LocalDirtyFlag.ALL_ROTATION);\n\n if (this._eventMask & ROTATION_ON) {\n this.emit(EventType.ROTATION_CHANGED);\n }\n }\n },\n\n /**\n * !#en The rotation as Euler angles in degrees, used in 3D node.\n * !#zh 该节点的欧拉角度,用于 3D 节点。\n * @property eulerAngles\n * @type {Vec3}\n * @example\n * node.is3DNode = true;\n * node.eulerAngles = cc.v3(45, 45, 45);\n * cc.log(\"Node eulerAngles (X, Y, Z): \" + node.eulerAngles.toString());\n */\n\n /**\n * !#en Rotation on x axis.\n * !#zh 该节点 X 轴旋转角度。\n * @property rotationX\n * @type {Number}\n * @deprecated since v2.1\n * @example\n * node.is3DNode = true;\n * node.eulerAngles = cc.v3(45, 0, 0);\n * cc.log(\"Node eulerAngles X: \" + node.eulerAngles.x);\n */\n rotationX: {\n get () {\n if (CC_DEBUG) {\n cc.warn(\"`cc.Node.rotationX` is deprecated since v2.1.0, please use `eulerAngles.x` instead. (`this.node.rotationX` -> `this.node.eulerAngles.x`)\");\n }\n return this._eulerAngles.x;\n },\n set (value) {\n if (CC_DEBUG) {\n cc.warn(\"`cc.Node.rotationX` is deprecated since v2.1.0, please set `eulerAngles` instead. (`this.node.rotationX = x` -> `this.node.is3DNode = true; this.node.eulerAngles = cc.v3(x, 0, 0)`\");\n }\n if (this._eulerAngles.x !== value) {\n this._eulerAngles.x = value;\n // Update quaternion from rotation\n if (this._eulerAngles.x === this._eulerAngles.y) {\n Trs.fromAngleZ(this._trs, -value);\n }\n else {\n Trs.fromEulerNumber(this._trs, value, this._eulerAngles.y, 0);\n }\n this.setLocalDirty(LocalDirtyFlag.ALL_ROTATION);\n\n if (this._eventMask & ROTATION_ON) {\n this.emit(EventType.ROTATION_CHANGED);\n }\n }\n },\n },\n\n /**\n * !#en Rotation on y axis.\n * !#zh 该节点 Y 轴旋转角度。\n * @property rotationY\n * @type {Number}\n * @deprecated since v2.1\n * @example\n * node.is3DNode = true;\n * node.eulerAngles = cc.v3(0, 45, 0);\n * cc.log(\"Node eulerAngles Y: \" + node.eulerAngles.y);\n */\n rotationY: {\n get () {\n if (CC_DEBUG) {\n cc.warn(\"`cc.Node.rotationY` is deprecated since v2.1.0, please use `eulerAngles.y` instead. (`this.node.rotationY` -> `this.node.eulerAngles.y`)\");\n }\n return this._eulerAngles.y;\n },\n set (value) {\n if (CC_DEBUG) {\n cc.warn(\"`cc.Node.rotationY` is deprecated since v2.1.0, please set `eulerAngles` instead. (`this.node.rotationY = y` -> `this.node.is3DNode = true; this.node.eulerAngles = cc.v3(0, y, 0)`\");\n }\n if (this._eulerAngles.y !== value) {\n this._eulerAngles.y = value;\n // Update quaternion from rotation\n if (this._eulerAngles.x === this._eulerAngles.y) {\n Trs.fromAngleZ(this._trs, -value);\n }\n else {\n Trs.fromEulerNumber(this._trs, this._eulerAngles.x, value, 0);\n }\n this.setLocalDirty(LocalDirtyFlag.ALL_ROTATION);\n\n if (this._eventMask & ROTATION_ON) {\n this.emit(EventType.ROTATION_CHANGED);\n }\n }\n },\n },\n\n eulerAngles: {\n get () {\n if (CC_EDITOR) {\n return this._eulerAngles;\n }\n else {\n return Trs.toEuler(this._eulerAngles, this._trs);\n }\n }, set (v) {\n if (CC_EDITOR) {\n this._eulerAngles.set(v);\n }\n\n Trs.fromEuler(this._trs, v);\n this.setLocalDirty(LocalDirtyFlag.ALL_ROTATION);\n !CC_NATIVERENDERER && (this._renderFlag |= RenderFlow.FLAG_TRANSFORM);\n\n if (this._eventMask & ROTATION_ON) {\n this.emit(EventType.ROTATION_CHANGED);\n }\n }\n },\n\n // This property is used for Mesh Skeleton Animation\n // Should be removed when node.rotation upgrade to quaternion value\n quat: {\n get () {\n let trs = this._trs;\n return new Quat(trs[3], trs[4], trs[5], trs[6]);\n }, set (v) {\n this.setRotation(v);\n }\n },\n\n /**\n * !#en The local scale relative to the parent.\n * !#zh 节点相对父节点的缩放。\n * @property scale\n * @type {Number}\n * @example\n * node.scale = 1;\n */\n scale: {\n get () {\n return this._trs[7];\n },\n set (v) {\n this.setScale(v);\n }\n },\n\n /**\n * !#en Scale on x axis.\n * !#zh 节点 X 轴缩放。\n * @property scaleX\n * @type {Number}\n * @example\n * node.scaleX = 0.5;\n * cc.log(\"Node Scale X: \" + node.scaleX);\n */\n scaleX: {\n get () {\n return this._trs[7];\n },\n set (value) {\n if (this._trs[7] !== value) {\n this._trs[7] = value;\n this.setLocalDirty(LocalDirtyFlag.ALL_SCALE);\n\n if (this._eventMask & SCALE_ON) {\n this.emit(EventType.SCALE_CHANGED);\n }\n }\n },\n },\n\n /**\n * !#en Scale on y axis.\n * !#zh 节点 Y 轴缩放。\n * @property scaleY\n * @type {Number}\n * @example\n * node.scaleY = 0.5;\n * cc.log(\"Node Scale Y: \" + node.scaleY);\n */\n scaleY: {\n get () {\n return this._trs[8];\n },\n set (value) {\n if (this._trs[8] !== value) {\n this._trs[8] = value;\n this.setLocalDirty(LocalDirtyFlag.ALL_SCALE);\n\n if (this._eventMask & SCALE_ON) {\n this.emit(EventType.SCALE_CHANGED);\n }\n }\n },\n },\n\n /**\n * !#en Scale on z axis.\n * !#zh 节点 Z 轴缩放。\n * @property scaleZ\n * @type {Number}\n */\n scaleZ: {\n get () {\n return this._trs[9];\n },\n set (value) {\n if (this._trs[9] !== value) {\n this._trs[9] = value;\n this.setLocalDirty(LocalDirtyFlag.ALL_SCALE);\n !CC_NATIVERENDERER && (this._renderFlag |= RenderFlow.FLAG_TRANSFORM);\n\n if (this._eventMask & SCALE_ON) {\n this.emit(EventType.SCALE_CHANGED);\n }\n }\n }\n },\n\n /**\n * !#en Skew x\n * !#zh 该节点 X 轴倾斜角度。\n * @property skewX\n * @type {Number}\n * @example\n * node.skewX = 0;\n * cc.log(\"Node SkewX: \" + node.skewX);\n * @deprecated since v2.2.1\n */\n skewX: {\n get () {\n return this._skewX;\n },\n set (value) {\n _skewWarn(value, this);\n\n this._skewX = value;\n this.setLocalDirty(LocalDirtyFlag.SKEW);\n if (CC_JSB && CC_NATIVERENDERER) {\n this._proxy.updateSkew();\n }\n }\n },\n\n /**\n * !#en Skew y\n * !#zh 该节点 Y 轴倾斜角度。\n * @property skewY\n * @type {Number}\n * @example\n * node.skewY = 0;\n * cc.log(\"Node SkewY: \" + node.skewY);\n * @deprecated since v2.2.1\n */\n skewY: {\n get () {\n return this._skewY;\n },\n set (value) {\n _skewWarn(value, this);\n\n this._skewY = value;\n this.setLocalDirty(LocalDirtyFlag.SKEW);\n if (CC_JSB && CC_NATIVERENDERER) {\n this._proxy.updateSkew();\n }\n }\n },\n\n /**\n * !#en Opacity of node, default value is 255.\n * !#zh 节点透明度,默认值为 255。\n * @property opacity\n * @type {Number}\n * @example\n * node.opacity = 255;\n */\n opacity: {\n get () {\n return this._opacity;\n },\n set (value) {\n value = cc.misc.clampf(value, 0, 255);\n if (this._opacity !== value) {\n this._opacity = value;\n if (CC_JSB && CC_NATIVERENDERER) {\n this._proxy.updateOpacity();\n }\n this._renderFlag |= RenderFlow.FLAG_OPACITY_COLOR;\n }\n },\n range: [0, 255]\n },\n\n /**\n * !#en Color of node, default value is white: (255, 255, 255).\n * !#zh 节点颜色。默认为白色,数值为:(255,255,255)。\n * @property color\n * @type {Color}\n * @example\n * node.color = new cc.Color(255, 255, 255);\n */\n color: {\n get () {\n return this._color.clone()\n },\n set (value) {\n if (!this._color.equals(value)) {\n this._color.set(value);\n if (CC_DEV && value.a !== 255) {\n cc.warnID(1626);\n }\n\n this._renderFlag |= RenderFlow.FLAG_COLOR;\n\n if (this._eventMask & COLOR_ON) {\n this.emit(EventType.COLOR_CHANGED, value);\n }\n }\n },\n },\n\n /**\n * !#en Anchor point's position on x axis.\n * !#zh 节点 X 轴锚点位置。\n * @property anchorX\n * @type {Number}\n * @example\n * node.anchorX = 0;\n */\n anchorX: {\n get () {\n return this._anchorPoint.x;\n },\n set (value) {\n var anchorPoint = this._anchorPoint;\n if (anchorPoint.x !== value) {\n anchorPoint.x = value;\n if (this._eventMask & ANCHOR_ON) {\n this.emit(EventType.ANCHOR_CHANGED);\n }\n }\n },\n },\n\n /**\n * !#en Anchor point's position on y axis.\n * !#zh 节点 Y 轴锚点位置。\n * @property anchorY\n * @type {Number}\n * @example\n * node.anchorY = 0;\n */\n anchorY: {\n get () {\n return this._anchorPoint.y;\n },\n set (value) {\n var anchorPoint = this._anchorPoint;\n if (anchorPoint.y !== value) {\n anchorPoint.y = value;\n if (this._eventMask & ANCHOR_ON) {\n this.emit(EventType.ANCHOR_CHANGED);\n }\n }\n },\n },\n\n /**\n * !#en Width of node.\n * !#zh 节点宽度。\n * @property width\n * @type {Number}\n * @example\n * node.width = 100;\n */\n width: {\n get () {\n return this._contentSize.width;\n },\n set (value) {\n if (value !== this._contentSize.width) {\n if (CC_EDITOR) {\n var clone = cc.size(this._contentSize.width, this._contentSize.height);\n }\n this._contentSize.width = value;\n if (this._eventMask & SIZE_ON) {\n if (CC_EDITOR) {\n this.emit(EventType.SIZE_CHANGED, clone);\n }\n else {\n this.emit(EventType.SIZE_CHANGED);\n }\n }\n }\n },\n },\n\n /**\n * !#en Height of node.\n * !#zh 节点高度。\n * @property height\n * @type {Number}\n * @example\n * node.height = 100;\n */\n height: {\n get () {\n return this._contentSize.height;\n },\n set (value) {\n if (value !== this._contentSize.height) {\n if (CC_EDITOR) {\n var clone = cc.size(this._contentSize.width, this._contentSize.height);\n }\n this._contentSize.height = value;\n if (this._eventMask & SIZE_ON) {\n if (CC_EDITOR) {\n this.emit(EventType.SIZE_CHANGED, clone);\n }\n else {\n this.emit(EventType.SIZE_CHANGED);\n }\n }\n }\n },\n },\n\n /**\n * !#en zIndex is the 'key' used to sort the node relative to its siblings.
\n * The value of zIndex should be in the range between cc.macro.MIN_ZINDEX and cc.macro.MAX_ZINDEX.
\n * The Node's parent will sort all its children based on the zIndex value and the arrival order.
\n * Nodes with greater zIndex will be sorted after nodes with smaller zIndex.
\n * If two nodes have the same zIndex, then the node that was added first to the children's array will be in front of the other node in the array.
\n * Node's order in children list will affect its rendering order. Parent is always rendering before all children.\n * !#zh zIndex 是用来对节点进行排序的关键属性,它决定一个节点在兄弟节点之间的位置。
\n * zIndex 的取值应该介于 cc.macro.MIN_ZINDEX 和 cc.macro.MAX_ZINDEX 之间\n * 父节点主要根据节点的 zIndex 和添加次序来排序,拥有更高 zIndex 的节点将被排在后面,如果两个节点的 zIndex 一致,先添加的节点会稳定排在另一个节点之前。
\n * 节点在 children 中的顺序决定了其渲染顺序。父节点永远在所有子节点之前被渲染\n * @property zIndex\n * @type {Number}\n * @example\n * node.zIndex = 1;\n * cc.log(\"Node zIndex: \" + node.zIndex);\n */\n zIndex: {\n get () {\n return this._localZOrder >> 16;\n },\n set (value) {\n if (value > macro.MAX_ZINDEX) {\n cc.warnID(1636);\n value = macro.MAX_ZINDEX;\n }\n else if (value < macro.MIN_ZINDEX) {\n cc.warnID(1637);\n value = macro.MIN_ZINDEX;\n }\n\n if (this.zIndex !== value) {\n this._localZOrder = (this._localZOrder & 0x0000ffff) | (value << 16);\n this.emit(EventType.SIBLING_ORDER_CHANGED);\n\n this._onSiblingIndexChanged();\n }\n }\n },\n\n /**\n * !#en\n * Switch 2D/3D node. The 2D nodes will run faster.\n * !#zh\n * 切换 2D/3D 节点,2D 节点会有更高的运行效率\n * @property {Boolean} is3DNode\n * @default false\n */\n is3DNode: {\n get () {\n return this._is3DNode;\n }, set (v) {\n this._is3DNode = v;\n this._update3DFunction();\n }\n },\n\n /**\n * !#en Returns a normalized vector representing the up direction (Y axis) of the node in world space.\n * !#zh 获取节点正上方(y 轴)面对的方向,返回值为世界坐标系下的归一化向量\n *\n * @property up\n * @type {Vec3}\n */\n up: {\n get () {\n var _up = Vec3.transformQuat(_urfVec3, Vec3.UP, this.getWorldRotation(_urfQuat));\n return _up.clone();\n }\n },\n\n /**\n * !#en Returns a normalized vector representing the right direction (X axis) of the node in world space.\n * !#zh 获取节点正右方(x 轴)面对的方向,返回值为世界坐标系下的归一化向量\n *\n * @property right\n * @type {Vec3}\n */\n right: {\n get () {\n var _right = Vec3.transformQuat(_urfVec3, Vec3.RIGHT, this.getWorldRotation(_urfQuat));\n return _right.clone();\n }\n },\n\n /**\n * !#en Returns a normalized vector representing the forward direction (Z axis) of the node in world space.\n * !#zh 获取节点正前方(z 轴)面对的方向,返回值为世界坐标系下的归一化向量\n *\n * @property forward\n * @type {Vec3}\n */\n forward: {\n get () {\n var _forward = Vec3.transformQuat(_urfVec3, Vec3.FORWARD, this.getWorldRotation(_urfQuat));\n return _forward.clone();\n }\n },\n },\n\n /**\n * @method constructor\n * @param {String} [name]\n */\n ctor () {\n this._reorderChildDirty = false;\n\n // cache component\n this._widget = null;\n // fast render component access\n this._renderComponent = null;\n // Event listeners\n this._capturingListeners = null;\n this._bubblingListeners = null;\n // Touch event listener\n this._touchListener = null;\n // Mouse event listener\n this._mouseListener = null;\n\n this._initDataFromPool();\n\n this._eventMask = 0;\n this._cullingMask = 1;\n this._childArrivalOrder = 1;\n\n // Proxy\n if (CC_JSB && CC_NATIVERENDERER) {\n this._proxy = new renderer.NodeProxy(this._spaceInfo.unitID, this._spaceInfo.index, this._id, this._name);\n this._proxy.init(this);\n }\n // should reset _renderFlag for both web and native\n this._renderFlag = RenderFlow.FLAG_TRANSFORM | RenderFlow.FLAG_OPACITY_COLOR;\n },\n\n statics: {\n EventType,\n _LocalDirtyFlag: LocalDirtyFlag,\n // is node but not scene\n isNode (obj) {\n return obj instanceof Node && (obj.constructor === Node || !(obj instanceof cc.Scene));\n },\n BuiltinGroupIndex\n },\n\n // OVERRIDES\n\n _onSiblingIndexChanged () {\n // update rendering scene graph, sort them by arrivalOrder\n if (this._parent) {\n this._parent._delaySort();\n }\n },\n\n _onPreDestroy () {\n var destroyByParent = this._onPreDestroyBase();\n\n // Actions\n if (ActionManagerExist) {\n cc.director.getActionManager().removeAllActionsFromTarget(this);\n }\n\n // Remove Node.currentHovered\n if (_currentHovered === this) {\n _currentHovered = null;\n }\n\n this._bubblingListeners && this._bubblingListeners.clear();\n this._capturingListeners && this._capturingListeners.clear();\n\n // Remove all event listeners if necessary\n if (this._touchListener || this._mouseListener) {\n eventManager.removeListeners(this);\n if (this._touchListener) {\n this._touchListener.owner = null;\n this._touchListener.mask = null;\n this._touchListener = null;\n }\n if (this._mouseListener) {\n this._mouseListener.owner = null;\n this._mouseListener.mask = null;\n this._mouseListener = null;\n }\n }\n\n if (CC_JSB && CC_NATIVERENDERER) {\n this._proxy.destroy();\n this._proxy = null;\n }\n\n this._backDataIntoPool();\n\n if (this._reorderChildDirty) {\n cc.director.__fastOff(cc.Director.EVENT_AFTER_UPDATE, this.sortAllChildren, this);\n }\n\n if (!destroyByParent) {\n // simulate some destruct logic to make undo system work correctly\n if (CC_EDITOR) {\n // ensure this node can reattach to scene by undo system\n this._parent = null;\n }\n }\n },\n\n _onPostActivated (active) {\n var actionManager = ActionManagerExist ? cc.director.getActionManager() : null;\n if (active) {\n // Refresh transform\n this._renderFlag |= RenderFlow.FLAG_WORLD_TRANSFORM;\n // ActionManager & EventManager\n actionManager && actionManager.resumeTarget(this);\n eventManager.resumeTarget(this);\n // Search Mask in parent\n this._checkListenerMask();\n } else {\n // deactivate\n actionManager && actionManager.pauseTarget(this);\n eventManager.pauseTarget(this);\n }\n },\n\n _onHierarchyChanged (oldParent) {\n this._updateOrderOfArrival();\n // Fixed a bug where children and parent node groups were forced to synchronize, instead of only synchronizing `_cullingMask` value\n _updateCullingMask(this);\n if (this._parent) {\n this._parent._delaySort();\n }\n this._renderFlag |= RenderFlow.FLAG_WORLD_TRANSFORM;\n this._onHierarchyChangedBase(oldParent);\n if (cc._widgetManager) {\n cc._widgetManager._nodesOrderDirty = true;\n }\n\n if (oldParent && this._activeInHierarchy) {\n //TODO: It may be necessary to update the listener mask of all child nodes.\n this._checkListenerMask();\n }\n\n // Node proxy\n if (CC_JSB && CC_NATIVERENDERER) {\n this._proxy.updateParent();\n }\n },\n\n // INTERNAL\n\n _update3DFunction () {\n if (this._is3DNode) {\n this._updateLocalMatrix = updateLocalMatrix3D;\n this._calculWorldMatrix = calculWorldMatrix3D;\n this._mulMat = mulMat3D;\n }\n else {\n this._updateLocalMatrix = updateLocalMatrix2D;\n this._calculWorldMatrix = calculWorldMatrix2D;\n this._mulMat = mulMat2D;\n }\n if (this._renderComponent && this._renderComponent._on3DNodeChanged) {\n this._renderComponent._on3DNodeChanged();\n }\n this._renderFlag |= RenderFlow.FLAG_TRANSFORM;\n this._localMatDirty = LocalDirtyFlag.ALL;\n\n if (CC_JSB && CC_NATIVERENDERER) {\n this._proxy.update3DNode();\n }\n },\n\n _initDataFromPool () {\n if (!this._spaceInfo) {\n if (CC_EDITOR || CC_TEST) {\n this._spaceInfo = {\n trs: new Float64Array(10),\n localMat: new Float64Array(16),\n worldMat: new Float64Array(16),\n };\n } else {\n this._spaceInfo = nodeMemPool.pop();\n }\n }\n\n let spaceInfo = this._spaceInfo;\n this._matrix = cc.mat4(spaceInfo.localMat);\n Mat4.identity(this._matrix);\n this._worldMatrix = cc.mat4(spaceInfo.worldMat);\n Mat4.identity(this._worldMatrix);\n this._localMatDirty = LocalDirtyFlag.ALL;\n this._worldMatDirty = true;\n\n let trs = this._trs = spaceInfo.trs;\n trs[0] = 0; // position.x\n trs[1] = 0; // position.y\n trs[2] = 0; // position.z\n trs[3] = 0; // rotation.x\n trs[4] = 0; // rotation.y\n trs[5] = 0; // rotation.z\n trs[6] = 1; // rotation.w\n trs[7] = 1; // scale.x\n trs[8] = 1; // scale.y\n trs[9] = 1; // scale.z\n },\n\n _backDataIntoPool () {\n if (!(CC_EDITOR || CC_TEST)) {\n // push back to pool\n nodeMemPool.push(this._spaceInfo);\n this._matrix = null;\n this._worldMatrix = null;\n this._trs = null;\n this._spaceInfo = null;\n }\n },\n\n _toEuler () {\n if (this.is3DNode) {\n Trs.toEuler(this._eulerAngles, this._trs);\n }\n else {\n let z = Math.asin(this._trs[5]) / ONE_DEGREE * 2;\n Vec3.set(this._eulerAngles, 0, 0, z);\n }\n },\n\n _fromEuler () {\n if (this.is3DNode) {\n Trs.fromEuler(this._trs, this._eulerAngles);\n }\n else {\n Trs.fromAngleZ(this._trs, this._eulerAngles.z);\n }\n },\n\n _initProperties () {\n if (this._is3DNode) {\n this._update3DFunction();\n }\n\n let trs = this._trs;\n if (trs) {\n let desTrs = trs;\n trs = this._trs = this._spaceInfo.trs;\n // just adapt to old trs\n if (desTrs.length === 11) {\n trs.set(desTrs.subarray(1));\n } else {\n trs.set(desTrs);\n }\n } else {\n trs = this._trs = this._spaceInfo.trs;\n }\n\n if (CC_EDITOR) {\n if (this._skewX !== 0 || this._skewY !== 0) {\n var NodeUtils = Editor.require('scene://utils/node');\n cc.warn(\"`cc.Node.skewX/Y` is deprecated since v2.2.1, please use 3D node instead.\", `Node: ${NodeUtils.getNodePath(this)}.`);\n }\n }\n\n this._fromEuler();\n\n if (CC_JSB && CC_NATIVERENDERER) {\n this._renderFlag |= RenderFlow.FLAG_TRANSFORM | RenderFlow.FLAG_OPACITY_COLOR;\n }\n },\n\n /*\n * The initializer for Node which will be called before all components onLoad\n */\n _onBatchCreated (dontSyncChildPrefab) {\n this._initProperties();\n\n // Fixed a bug where children and parent node groups were forced to synchronize, instead of only synchronizing `_cullingMask` value\n this._cullingMask = 1 << _getActualGroupIndex(this);\n if (CC_JSB && CC_NATIVERENDERER) {\n this._proxy && this._proxy.updateCullingMask();\n }\n\n if (!this._activeInHierarchy) {\n if (CC_EDITOR ? cc.director.getActionManager() : ActionManagerExist) {\n // deactivate ActionManager and EventManager by default\n cc.director.getActionManager().pauseTarget(this);\n }\n eventManager.pauseTarget(this);\n }\n\n let children = this._children;\n for (let i = 0, len = children.length; i < len; i++) {\n let child = children[i];\n if (!dontSyncChildPrefab) {\n // sync child prefab\n let prefabInfo = child._prefab;\n if (prefabInfo && prefabInfo.sync && prefabInfo.root === child) {\n PrefabHelper.syncWithPrefab(child);\n }\n child._updateOrderOfArrival();\n }\n child._onBatchCreated(dontSyncChildPrefab);\n }\n\n if (children.length > 0) {\n this._renderFlag |= RenderFlow.FLAG_CHILDREN;\n }\n\n if (CC_JSB && CC_NATIVERENDERER) {\n this._proxy.initNative();\n }\n },\n\n // EVENT TARGET\n _checkListenerMask () {\n // Because Mask may be nested, need to find all the Mask components in the parent node.\n // The click area must satisfy all Masks to trigger the click.\n if (this._touchListener) {\n var mask = this._touchListener.mask = _searchComponentsInParent(this, cc.Mask);\n if (this._mouseListener) {\n this._mouseListener.mask = mask;\n }\n } else if (this._mouseListener) {\n this._mouseListener.mask = _searchComponentsInParent(this, cc.Mask);\n }\n },\n\n _checknSetupSysEvent (type) {\n let newAdded = false;\n let forDispatch = false;\n if (_touchEvents.indexOf(type) !== -1) {\n if (!this._touchListener) {\n this._touchListener = cc.EventListener.create({\n event: cc.EventListener.TOUCH_ONE_BY_ONE,\n swallowTouches: true,\n owner: this,\n mask: _searchComponentsInParent(this, cc.Mask),\n onTouchBegan: _touchStartHandler,\n onTouchMoved: _touchMoveHandler,\n onTouchEnded: _touchEndHandler,\n onTouchCancelled: _touchCancelHandler\n });\n eventManager.addListener(this._touchListener, this);\n newAdded = true;\n }\n forDispatch = true;\n }\n else if (_mouseEvents.indexOf(type) !== -1) {\n if (!this._mouseListener) {\n this._mouseListener = cc.EventListener.create({\n event: cc.EventListener.MOUSE,\n _previousIn: false,\n owner: this,\n mask: _searchComponentsInParent(this, cc.Mask),\n onMouseDown: _mouseDownHandler,\n onMouseMove: _mouseMoveHandler,\n onMouseUp: _mouseUpHandler,\n onMouseScroll: _mouseWheelHandler,\n });\n eventManager.addListener(this._mouseListener, this);\n newAdded = true;\n }\n forDispatch = true;\n }\n if (newAdded && !this._activeInHierarchy) {\n cc.director.getScheduler().schedule(function () {\n if (!this._activeInHierarchy) {\n eventManager.pauseTarget(this);\n }\n }, this, 0, 0, 0, false);\n }\n return forDispatch;\n },\n\n /**\n * !#en\n * Register a callback of a specific event type on Node.
\n * Use this method to register touch or mouse event permit propagation based on scene graph,
\n * These kinds of event are triggered with dispatchEvent, the dispatch process has three steps:
\n * 1. Capturing phase: dispatch in capture targets (`_getCapturingTargets`), e.g. parents in node tree, from root to the real target
\n * 2. At target phase: dispatch to the listeners of the real target
\n * 3. Bubbling phase: dispatch in bubble targets (`_getBubblingTargets`), e.g. parents in node tree, from the real target to root
\n * In any moment of the dispatching process, it can be stopped via `event.stopPropagation()` or `event.stopPropagationImmidiate()`.
\n * It's the recommended way to register touch/mouse event for Node,
\n * please do not use cc.eventManager directly for Node.
\n * You can also register custom event and use `emit` to trigger custom event on Node.
\n * For such events, there won't be capturing and bubbling phase, your event will be dispatched directly to its listeners registered on the same node.
\n * You can also pass event callback parameters with `emit` by passing parameters after `type`.\n * !#zh\n * 在节点上注册指定类型的回调函数,也可以设置 target 用于绑定响应函数的 this 对象。
\n * 鼠标或触摸事件会被系统调用 dispatchEvent 方法触发,触发的过程包含三个阶段:
\n * 1. 捕获阶段:派发事件给捕获目标(通过 `_getCapturingTargets` 获取),比如,节点树中注册了捕获阶段的父节点,从根节点开始派发直到目标节点。
\n * 2. 目标阶段:派发给目标节点的监听器。
\n * 3. 冒泡阶段:派发事件给冒泡目标(通过 `_getBubblingTargets` 获取),比如,节点树中注册了冒泡阶段的父节点,从目标节点开始派发直到根节点。
\n * 同时您可以将事件派发到父节点或者通过调用 stopPropagation 拦截它。
\n * 推荐使用这种方式来监听节点上的触摸或鼠标事件,请不要在节点上直接使用 cc.eventManager。
\n * 你也可以注册自定义事件到节点上,并通过 emit 方法触发此类事件,对于这类事件,不会发生捕获冒泡阶段,只会直接派发给注册在该节点上的监听器
\n * 你可以通过在 emit 方法调用时在 type 之后传递额外的参数作为事件回调的参数列表\n * @method on\n * @param {String|Node.EventType} type - A string representing the event type to listen for.
See {{#crossLink \"Node/EventTyupe/POSITION_CHANGED\"}}Node Events{{/crossLink}} for all builtin events.\n * @param {Function} callback - The callback that will be invoked when the event is dispatched. The callback is ignored if it is a duplicate (the callbacks are unique).\n * @param {Event|any} [callback.event] event or first argument when emit\n * @param {any} [callback.arg2] arg2\n * @param {any} [callback.arg3] arg3\n * @param {any} [callback.arg4] arg4\n * @param {any} [callback.arg5] arg5\n * @param {Object} [target] - The target (this object) to invoke the callback, can be null\n * @param {Boolean} [useCapture=false] - When set to true, the listener will be triggered at capturing phase which is ahead of the final target emit, otherwise it will be triggered during bubbling phase.\n * @return {Function} - Just returns the incoming callback so you can save the anonymous function easier.\n * @typescript\n * on(type: string, callback: T, target?: any, useCapture?: boolean): T\n * @example\n * this.node.on(cc.Node.EventType.TOUCH_START, this.memberFunction, this); // if \"this\" is component and the \"memberFunction\" declared in CCClass.\n * node.on(cc.Node.EventType.TOUCH_START, callback, this);\n * node.on(cc.Node.EventType.TOUCH_MOVE, callback, this);\n * node.on(cc.Node.EventType.TOUCH_END, callback, this);\n * node.on(cc.Node.EventType.TOUCH_CANCEL, callback, this);\n * node.on(cc.Node.EventType.ANCHOR_CHANGED, callback);\n * node.on(cc.Node.EventType.COLOR_CHANGED, callback);\n */\n on (type, callback, target, useCapture) {\n let forDispatch = this._checknSetupSysEvent(type);\n if (forDispatch) {\n return this._onDispatch(type, callback, target, useCapture);\n }\n else {\n switch (type) {\n case EventType.POSITION_CHANGED:\n this._eventMask |= POSITION_ON;\n break;\n case EventType.SCALE_CHANGED:\n this._eventMask |= SCALE_ON;\n break;\n case EventType.ROTATION_CHANGED:\n this._eventMask |= ROTATION_ON;\n break;\n case EventType.SIZE_CHANGED:\n this._eventMask |= SIZE_ON;\n break;\n case EventType.ANCHOR_CHANGED:\n this._eventMask |= ANCHOR_ON;\n break;\n case EventType.COLOR_CHANGED:\n this._eventMask |= COLOR_ON;\n break;\n }\n if (!this._bubblingListeners) {\n this._bubblingListeners = new EventTarget();\n }\n return this._bubblingListeners.on(type, callback, target);\n }\n },\n\n /**\n * !#en\n * Register an callback of a specific event type on the Node,\n * the callback will remove itself after the first time it is triggered.\n * !#zh\n * 注册节点的特定事件类型回调,回调会在第一时间被触发后删除自身。\n *\n * @method once\n * @param {String} type - A string representing the event type to listen for.\n * @param {Function} callback - The callback that will be invoked when the event is dispatched.\n * The callback is ignored if it is a duplicate (the callbacks are unique).\n * @param {Event|any} [callback.event] event or first argument when emit\n * @param {any} [callback.arg2] arg2\n * @param {any} [callback.arg3] arg3\n * @param {any} [callback.arg4] arg4\n * @param {any} [callback.arg5] arg5\n * @param {Object} [target] - The target (this object) to invoke the callback, can be null\n * @typescript\n * once(type: string, callback: T, target?: any, useCapture?: boolean): T\n * @example\n * node.once(cc.Node.EventType.ANCHOR_CHANGED, callback);\n */\n once (type, callback, target, useCapture) {\n let forDispatch = this._checknSetupSysEvent(type);\n\n let listeners = null;\n if (forDispatch && useCapture) {\n listeners = this._capturingListeners = this._capturingListeners || new EventTarget();\n }\n else {\n listeners = this._bubblingListeners = this._bubblingListeners || new EventTarget();\n }\n\n listeners.once(type, callback, target);\n listeners.once(type, () => {\n this.off(type, callback, target);\n }, undefined);\n },\n\n _onDispatch (type, callback, target, useCapture) {\n // Accept also patameters like: (type, callback, useCapture)\n if (typeof target === 'boolean') {\n useCapture = target;\n target = undefined;\n }\n else useCapture = !!useCapture;\n if (!callback) {\n cc.errorID(6800);\n return;\n }\n\n var listeners = null;\n if (useCapture) {\n listeners = this._capturingListeners = this._capturingListeners || new EventTarget();\n }\n else {\n listeners = this._bubblingListeners = this._bubblingListeners || new EventTarget();\n }\n\n if ( !listeners.hasEventListener(type, callback, target) ) {\n listeners.on(type, callback, target);\n\n if (target && target.__eventTargets) {\n target.__eventTargets.push(this);\n }\n }\n\n return callback;\n },\n\n /**\n * !#en\n * Removes the callback previously registered with the same type, callback, target and or useCapture.\n * This method is merely an alias to removeEventListener.\n * !#zh 删除之前与同类型,回调,目标或 useCapture 注册的回调。\n * @method off\n * @param {String} type - A string representing the event type being removed.\n * @param {Function} [callback] - The callback to remove.\n * @param {Object} [target] - The target (this object) to invoke the callback, if it's not given, only callback without target will be removed\n * @param {Boolean} [useCapture=false] - When set to true, the listener will be triggered at capturing phase which is ahead of the final target emit, otherwise it will be triggered during bubbling phase.\n * @example\n * this.node.off(cc.Node.EventType.TOUCH_START, this.memberFunction, this);\n * node.off(cc.Node.EventType.TOUCH_START, callback, this.node);\n * node.off(cc.Node.EventType.ANCHOR_CHANGED, callback, this);\n */\n off (type, callback, target, useCapture) {\n let touchEvent = _touchEvents.indexOf(type) !== -1;\n let mouseEvent = !touchEvent && _mouseEvents.indexOf(type) !== -1;\n if (touchEvent || mouseEvent) {\n this._offDispatch(type, callback, target, useCapture);\n\n if (touchEvent) {\n if (this._touchListener && !_checkListeners(this, _touchEvents)) {\n eventManager.removeListener(this._touchListener);\n this._touchListener = null;\n }\n }\n else if (mouseEvent) {\n if (this._mouseListener && !_checkListeners(this, _mouseEvents)) {\n eventManager.removeListener(this._mouseListener);\n this._mouseListener = null;\n }\n }\n }\n else if (this._bubblingListeners) {\n this._bubblingListeners.off(type, callback, target);\n\n var hasListeners = this._bubblingListeners.hasEventListener(type);\n // All listener removed\n if (!hasListeners) {\n switch (type) {\n case EventType.POSITION_CHANGED:\n this._eventMask &= ~POSITION_ON;\n break;\n case EventType.SCALE_CHANGED:\n this._eventMask &= ~SCALE_ON;\n break;\n case EventType.ROTATION_CHANGED:\n this._eventMask &= ~ROTATION_ON;\n break;\n case EventType.SIZE_CHANGED:\n this._eventMask &= ~SIZE_ON;\n break;\n case EventType.ANCHOR_CHANGED:\n this._eventMask &= ~ANCHOR_ON;\n break;\n case EventType.COLOR_CHANGED:\n this._eventMask &= ~COLOR_ON;\n break;\n }\n }\n }\n },\n\n _offDispatch (type, callback, target, useCapture) {\n // Accept also patameters like: (type, callback, useCapture)\n if (typeof target === 'boolean') {\n useCapture = target;\n target = undefined;\n }\n else useCapture = !!useCapture;\n if (!callback) {\n this._capturingListeners && this._capturingListeners.removeAll(type);\n this._bubblingListeners && this._bubblingListeners.removeAll(type);\n }\n else {\n var listeners = useCapture ? this._capturingListeners : this._bubblingListeners;\n if (listeners) {\n listeners.off(type, callback, target);\n\n if (target && target.__eventTargets) {\n js.array.fastRemove(target.__eventTargets, this);\n }\n }\n\n }\n },\n\n /**\n * !#en Removes all callbacks previously registered with the same target.\n * !#zh 移除目标上的所有注册事件。\n * @method targetOff\n * @param {Object} target - The target to be searched for all related callbacks\n * @example\n * node.targetOff(target);\n */\n targetOff (target) {\n let listeners = this._bubblingListeners;\n if (listeners) {\n listeners.targetOff(target);\n\n // Check for event mask reset\n if ((this._eventMask & POSITION_ON) && !listeners.hasEventListener(EventType.POSITION_CHANGED)) {\n this._eventMask &= ~POSITION_ON;\n }\n if ((this._eventMask & SCALE_ON) && !listeners.hasEventListener(EventType.SCALE_CHANGED)) {\n this._eventMask &= ~SCALE_ON;\n }\n if ((this._eventMask & ROTATION_ON) && !listeners.hasEventListener(EventType.ROTATION_CHANGED)) {\n this._eventMask &= ~ROTATION_ON;\n }\n if ((this._eventMask & SIZE_ON) && !listeners.hasEventListener(EventType.SIZE_CHANGED)) {\n this._eventMask &= ~SIZE_ON;\n }\n if ((this._eventMask & ANCHOR_ON) && !listeners.hasEventListener(EventType.ANCHOR_CHANGED)) {\n this._eventMask &= ~ANCHOR_ON;\n }\n if ((this._eventMask & COLOR_ON) && !listeners.hasEventListener(EventType.COLOR_CHANGED)) {\n this._eventMask &= ~COLOR_ON;\n }\n }\n if (this._capturingListeners) {\n this._capturingListeners.targetOff(target);\n }\n\n if (target && target.__eventTargets) {\n js.array.fastRemove(target.__eventTargets, this);\n }\n\n if (this._touchListener && !_checkListeners(this, _touchEvents)) {\n eventManager.removeListener(this._touchListener);\n this._touchListener = null;\n }\n if (this._mouseListener && !_checkListeners(this, _mouseEvents)) {\n eventManager.removeListener(this._mouseListener);\n this._mouseListener = null;\n }\n },\n\n /**\n * !#en Checks whether the EventTarget object has any callback registered for a specific type of event.\n * !#zh 检查事件目标对象是否有为特定类型的事件注册的回调。\n * @method hasEventListener\n * @param {String} type - The type of event.\n * @return {Boolean} True if a callback of the specified type is registered; false otherwise.\n */\n hasEventListener (type) {\n let has = false;\n if (this._bubblingListeners) {\n has = this._bubblingListeners.hasEventListener(type);\n }\n if (!has && this._capturingListeners) {\n has = this._capturingListeners.hasEventListener(type);\n }\n return has;\n },\n\n /**\n * !#en\n * Trigger an event directly with the event name and necessary arguments.\n * !#zh\n * 通过事件名发送自定义事件\n *\n * @method emit\n * @param {String} type - event type\n * @param {*} [arg1] - First argument in callback\n * @param {*} [arg2] - Second argument in callback\n * @param {*} [arg3] - Third argument in callback\n * @param {*} [arg4] - Fourth argument in callback\n * @param {*} [arg5] - Fifth argument in callback\n * @example\n *\n * eventTarget.emit('fire', event);\n * eventTarget.emit('fire', message, emitter);\n */\n emit (type, arg1, arg2, arg3, arg4, arg5) {\n if (this._bubblingListeners) {\n this._bubblingListeners.emit(type, arg1, arg2, arg3, arg4, arg5);\n }\n },\n\n /**\n * !#en\n * Dispatches an event into the event flow.\n * The event target is the EventTarget object upon which the dispatchEvent() method is called.\n * !#zh 分发事件到事件流中。\n *\n * @method dispatchEvent\n * @param {Event} event - The Event object that is dispatched into the event flow\n */\n dispatchEvent (event) {\n _doDispatchEvent(this, event);\n _cachedArray.length = 0;\n },\n\n /**\n * !#en Pause node related system events registered with the current Node. Node system events includes touch and mouse events.\n * If recursive is set to true, then this API will pause the node system events for the node and all nodes in its sub node tree.\n * Reference: http://docs.cocos2d-x.org/editors_and_tools/creator-chapters/scripting/internal-events/\n * !#zh 暂停当前节点上注册的所有节点系统事件,节点系统事件包含触摸和鼠标事件。\n * 如果传递 recursive 为 true,那么这个 API 将暂停本节点和它的子树上所有节点的节点系统事件。\n * 参考:https://www.cocos.com/docs/creator/scripting/internal-events.html\n * @method pauseSystemEvents\n * @param {Boolean} recursive - Whether to pause node system events on the sub node tree.\n * @example\n * node.pauseSystemEvents(true);\n */\n pauseSystemEvents (recursive) {\n eventManager.pauseTarget(this, recursive);\n },\n\n /**\n * !#en Resume node related system events registered with the current Node. Node system events includes touch and mouse events.\n * If recursive is set to true, then this API will resume the node system events for the node and all nodes in its sub node tree.\n * Reference: http://docs.cocos2d-x.org/editors_and_tools/creator-chapters/scripting/internal-events/\n * !#zh 恢复当前节点上注册的所有节点系统事件,节点系统事件包含触摸和鼠标事件。\n * 如果传递 recursive 为 true,那么这个 API 将恢复本节点和它的子树上所有节点的节点系统事件。\n * 参考:https://www.cocos.com/docs/creator/scripting/internal-events.html\n * @method resumeSystemEvents\n * @param {Boolean} recursive - Whether to resume node system events on the sub node tree.\n * @example\n * node.resumeSystemEvents(true);\n */\n resumeSystemEvents (recursive) {\n eventManager.resumeTarget(this, recursive);\n },\n\n _hitTest (point, listener) {\n let w = this._contentSize.width,\n h = this._contentSize.height,\n cameraPt = _htVec3a,\n testPt = _htVec3b;\n\n let camera = cc.Camera.findCamera(this);\n if (camera) {\n camera.getScreenToWorldPoint(point, cameraPt);\n }\n else {\n cameraPt.set(point);\n }\n\n this._updateWorldMatrix();\n // If scale is 0, it can't be hit.\n if (!Mat4.invert(_mat4_temp, this._worldMatrix)) {\n return false;\n }\n Vec2.transformMat4(testPt, cameraPt, _mat4_temp);\n testPt.x += this._anchorPoint.x * w;\n testPt.y += this._anchorPoint.y * h;\n\n let hit = false;\n if (testPt.x >= 0 && testPt.y >= 0 && testPt.x <= w && testPt.y <= h) {\n hit = true;\n if (listener && listener.mask) {\n let mask = listener.mask;\n let parent = this;\n let length = mask ? mask.length : 0;\n // find mask parent, should hit test it\n for (let i = 0, j = 0; parent && j < length; ++i, parent = parent.parent) {\n let temp = mask[j];\n if (i === temp.index) {\n if (parent === temp.node) {\n let comp = parent.getComponent(cc.Mask);\n if (comp && comp._enabled && !comp._hitTest(cameraPt)) {\n hit = false;\n break\n }\n\n j++;\n } else {\n // mask parent no longer exists\n mask.length = j;\n break\n }\n } else if (i > temp.index) {\n // mask parent no longer exists\n mask.length = j;\n break\n }\n }\n }\n }\n\n return hit;\n },\n\n /**\n * Get all the targets listening to the supplied type of event in the target's capturing phase.\n * The capturing phase comprises the journey from the root to the last node BEFORE the event target's node.\n * The result should save in the array parameter, and MUST SORT from child nodes to parent nodes.\n *\n * Subclasses can override this method to make event propagable.\n * @method _getCapturingTargets\n * @private\n * @param {String} type - the event type\n * @param {Array} array - the array to receive targets\n * @example {@link cocos2d/core/event/_getCapturingTargets.js}\n */\n _getCapturingTargets (type, array) {\n var parent = this.parent;\n while (parent) {\n if (parent._capturingListeners && parent._capturingListeners.hasEventListener(type)) {\n array.push(parent);\n }\n parent = parent.parent;\n }\n },\n\n /**\n * Get all the targets listening to the supplied type of event in the target's bubbling phase.\n * The bubbling phase comprises any SUBSEQUENT nodes encountered on the return trip to the root of the tree.\n * The result should save in the array parameter, and MUST SORT from child nodes to parent nodes.\n *\n * Subclasses can override this method to make event propagable.\n * @method _getBubblingTargets\n * @private\n * @param {String} type - the event type\n * @param {Array} array - the array to receive targets\n */\n _getBubblingTargets (type, array) {\n var parent = this.parent;\n while (parent) {\n if (parent._bubblingListeners && parent._bubblingListeners.hasEventListener(type)) {\n array.push(parent);\n }\n parent = parent.parent;\n }\n },\n\n// ACTIONS\n /**\n * !#en\n * Executes an action, and returns the action that is executed.
\n * The node becomes the action's target. Refer to cc.Action's getTarget()
\n * Calling runAction while the node is not active won't have any effect.
\n * Note:You shouldn't modify the action after runAction, that won't take any effect.
\n * if you want to modify, when you define action plus.\n * !#zh\n * 执行并返回该执行的动作。该节点将会变成动作的目标。
\n * 调用 runAction 时,节点自身处于不激活状态将不会有任何效果。
\n * 注意:你不应该修改 runAction 后的动作,将无法发挥作用,如果想进行修改,请在定义 action 时加入。\n * @method runAction\n * @param {Action} action\n * @return {Action} An Action pointer\n * @example\n * var action = cc.scaleTo(0.2, 1, 0.6);\n * node.runAction(action);\n * node.runAction(action).repeatForever(); // fail\n * node.runAction(action.repeatForever()); // right\n */\n runAction: ActionManagerExist ? function (action) {\n if (!this.active)\n return;\n cc.assertID(action, 1618);\n let am = cc.director.getActionManager();\n if (!am._suppressDeprecation) {\n am._suppressDeprecation = true;\n cc.warnID(1639);\n }\n am.addAction(action, this, false);\n return action;\n } : emptyFunc,\n\n /**\n * !#en Pause all actions running on the current node. Equals to `cc.director.getActionManager().pauseTarget(node)`.\n * !#zh 暂停本节点上所有正在运行的动作。和 `cc.director.getActionManager().pauseTarget(node);` 等价。\n * @method pauseAllActions\n * @example\n * node.pauseAllActions();\n */\n pauseAllActions: ActionManagerExist ? function () {\n cc.director.getActionManager().pauseTarget(this);\n } : emptyFunc,\n\n /**\n * !#en Resume all paused actions on the current node. Equals to `cc.director.getActionManager().resumeTarget(node)`.\n * !#zh 恢复运行本节点上所有暂停的动作。和 `cc.director.getActionManager().resumeTarget(node);` 等价。\n * @method resumeAllActions\n * @example\n * node.resumeAllActions();\n */\n resumeAllActions: ActionManagerExist ? function () {\n cc.director.getActionManager().resumeTarget(this);\n } : emptyFunc,\n\n /**\n * !#en Stops and removes all actions from the running action list .\n * !#zh 停止并且移除所有正在运行的动作列表。\n * @method stopAllActions\n * @example\n * node.stopAllActions();\n */\n stopAllActions: ActionManagerExist ? function () {\n cc.director.getActionManager().removeAllActionsFromTarget(this);\n } : emptyFunc,\n\n /**\n * !#en Stops and removes an action from the running action list.\n * !#zh 停止并移除指定的动作。\n * @method stopAction\n * @param {Action} action An action object to be removed.\n * @example\n * var action = cc.scaleTo(0.2, 1, 0.6);\n * node.stopAction(action);\n */\n stopAction: ActionManagerExist ? function (action) {\n cc.director.getActionManager().removeAction(action);\n } : emptyFunc,\n\n /**\n * !#en Removes an action from the running action list by its tag.\n * !#zh 停止并且移除指定标签的动作。\n * @method stopActionByTag\n * @param {Number} tag A tag that indicates the action to be removed.\n * @example\n * node.stopActionByTag(1);\n */\n stopActionByTag: ActionManagerExist ? function (tag) {\n if (tag === cc.Action.TAG_INVALID) {\n cc.logID(1612);\n return;\n }\n cc.director.getActionManager().removeActionByTag(tag, this);\n } : emptyFunc,\n\n /**\n * !#en Returns an action from the running action list by its tag.\n * !#zh 通过标签获取指定动作。\n * @method getActionByTag\n * @see cc.Action#getTag and cc.Action#setTag\n * @param {Number} tag\n * @return {Action} The action object with the given tag.\n * @example\n * var action = node.getActionByTag(1);\n */\n getActionByTag: ActionManagerExist ? function (tag) {\n if (tag === cc.Action.TAG_INVALID) {\n cc.logID(1613);\n return null;\n }\n return cc.director.getActionManager().getActionByTag(tag, this);\n } : function () {\n return null;\n },\n\n /**\n * !#en\n * Returns the numbers of actions that are running plus the ones that are schedule to run (actions in actionsToAdd and actions arrays).
\n * Composable actions are counted as 1 action. Example:
\n * If you are running 1 Sequence of 7 actions, it will return 1.
\n * If you are running 7 Sequences of 2 actions, it will return 7.

\n * !#zh\n * 获取运行着的动作加上正在调度运行的动作的总数。
\n * 例如:
\n * - 如果你正在运行 7 个动作中的 1 个 Sequence,它将返回 1。
\n * - 如果你正在运行 2 个动作中的 7 个 Sequence,它将返回 7。
\n *\n * @method getNumberOfRunningActions\n * @return {Number} The number of actions that are running plus the ones that are schedule to run\n * @example\n * var count = node.getNumberOfRunningActions();\n * cc.log(\"Running Action Count: \" + count);\n */\n getNumberOfRunningActions: ActionManagerExist ? function () {\n return cc.director.getActionManager().getNumberOfRunningActionsInTarget(this);\n } : function () {\n return 0;\n },\n\n\n// TRANSFORM RELATED\n /**\n * !#en\n * Returns a copy of the position (x, y, z) of the node in its parent's coordinates.\n * You can pass a cc.Vec2 or cc.Vec3 as the argument to receive the return values.\n * !#zh\n * 获取节点在父节点坐标系中的位置(x, y, z)。\n * 你可以传一个 cc.Vec2 或者 cc.Vec3 作为参数来接收返回值。\n * @method getPosition\n * @param {Vec2|Vec3} [out] - The return value to receive position\n * @return {Vec2|Vec3} The position (x, y, z) of the node in its parent's coordinates\n * @example\n * cc.log(\"Node Position: \" + node.getPosition());\n */\n getPosition (out) {\n out = out || new Vec3();\n return Trs.toPosition(out, this._trs);\n },\n\n /**\n * !#en\n * Sets the position (x, y, z) of the node in its parent's coordinates.
\n * Usually we use cc.v2(x, y) to compose cc.Vec2 object, in this case, position.z will become 0.
\n * and passing two numbers (x, y) is more efficient than passing cc.Vec2 object, in this case, position.z will remain unchanged.\n * For 3D node we can use cc.v3(x, y, z) to compose cc.Vec3 object,
\n * and passing three numbers (x, y, z) is more efficient than passing cc.Vec3 object.\n * !#zh\n * 设置节点在父节点坐标系中的位置。
\n * 可以通过下面的方式设置坐标点:
\n * 1. 传入 2 个数值 x, y (此时不会改变 position.z 的值)。
\n * 2. 传入 cc.v2(x, y) 类型为 cc.Vec2 的对象 (此时 position.z 的值将被设置为0)。\n * 3. 对于 3D 节点可以传入 3 个数值 x, y, z。
\n * 4. 对于 3D 节点可以传入 cc.v3(x, y, z) 类型为 cc.Vec3 的对象。\n * @method setPosition\n * @param {Vec2|Vec3|Number} x - X coordinate for position or the position object\n * @param {Number} [y] - Y coordinate for position\n * @param {Number} [z] - Z coordinate for position\n */\n setPosition (newPosOrX, y, z) {\n let x;\n if (y === undefined) {\n x = newPosOrX.x;\n y = newPosOrX.y;\n z = newPosOrX.z;\n }\n else {\n x = newPosOrX;\n }\n\n let trs = this._trs;\n\n if (z === undefined) {\n z = trs[2];\n }\n\n if (trs[0] === x && trs[1] === y && trs[2] === z) {\n return;\n }\n\n if (CC_EDITOR) {\n var oldPosition = new cc.Vec3(trs[0], trs[1], trs[2]);\n }\n\n trs[0] = x;\n trs[1] = y;\n trs[2] = z;\n\n this.setLocalDirty(LocalDirtyFlag.ALL_POSITION);\n !CC_NATIVERENDERER && (this._renderFlag |= RenderFlow.FLAG_WORLD_TRANSFORM);\n\n // fast check event\n if (this._eventMask & POSITION_ON) {\n if (CC_EDITOR) {\n this.emit(EventType.POSITION_CHANGED, oldPosition);\n }\n else {\n this.emit(EventType.POSITION_CHANGED);\n }\n }\n },\n\n /**\n * !#en\n * Returns the scale factor of the node.\n * Need pass a cc.Vec2 or cc.Vec3 as the argument to receive the return values.\n * !#zh 获取节点的缩放,需要传一个 cc.Vec2 或者 cc.Vec3 作为参数来接收返回值。\n * @method getScale\n * @param {Vec2|Vec3} out\n * @return {Vec2|Vec3} The scale factor\n * @example\n * cc.log(\"Node Scale: \" + node.getScale(cc.v3()));\n */\n getScale (out) {\n if (out !== undefined) {\n return Trs.toScale(out, this._trs);\n }\n else {\n cc.errorID(1400, 'cc.Node.getScale', 'cc.Node.scale or cc.Node.getScale(cc.Vec3)');\n return this._trs[7];\n }\n },\n\n /**\n * !#en\n * Sets the scale of axis in local coordinates of the node.\n * You can operate 2 axis in 2D node, and 3 axis in 3D node.\n * When only (x, y) is passed, the value of scale.z will not be changed.\n * When a Vec2 is passed in, the value of scale.z will be set to 0.\n * !#zh\n * 设置节点在本地坐标系中坐标轴上的缩放比例。\n * 2D 节点可以操作两个坐标轴,而 3D 节点可以操作三个坐标轴。\n * 当只传入 (x, y) 时,scale.z 的值不会被改变。\n * 当只传入 Vec2 对象时,scale.z 的值将被设置为0。\n * @method setScale\n * @param {Number|Vec2|Vec3} x - scaleX or scale object\n * @param {Number} [y]\n * @param {Number} [z]\n * @example\n * node.setScale(cc.v2(2, 2)); // Notice: scaleZ will be 0\n * node.setScale(cc.v3(2, 2, 2)); // for 3D node\n * node.setScale(2);\n */\n setScale (newScaleOrX, y, z) {\n let x;\n // only one parameter, and it's a Vec2/Vec3:\n if (newScaleOrX && typeof newScaleOrX !== 'number') {\n x = newScaleOrX.x;\n y = newScaleOrX.y;\n z = newScaleOrX.z;\n }\n // only one parameter, and it's a number:\n else if (newScaleOrX !== undefined && y === undefined) {\n x = newScaleOrX;\n y = newScaleOrX;\n z = newScaleOrX;\n }\n // two or three paramters:\n else {\n x = newScaleOrX;\n }\n\n let trs = this._trs;\n\n if (z === undefined) {\n z = trs[9];\n }\n\n if (trs[7] !== x || trs[8] !== y || trs[9] !== z) {\n trs[7] = x;\n trs[8] = y;\n trs[9] = z;\n this.setLocalDirty(LocalDirtyFlag.ALL_SCALE);\n !CC_NATIVERENDERER && (this._renderFlag |= RenderFlow.FLAG_TRANSFORM);\n\n if (this._eventMask & SCALE_ON) {\n this.emit(EventType.SCALE_CHANGED);\n }\n }\n },\n\n /**\n * !#en\n * Get rotation of node (in quaternion).\n * Need pass a cc.Quat as the argument to receive the return values.\n * !#zh\n * 获取该节点的 quaternion 旋转角度,需要传一个 cc.Quat 作为参数来接收返回值。\n * @method getRotation\n * @param {Quat} out\n * @return {Quat} Quaternion object represents the rotation\n */\n getRotation (out) {\n if (out instanceof Quat) {\n return Trs.toRotation(out, this._trs);\n }\n else {\n if (CC_DEBUG) {\n cc.warn(\"`cc.Node.getRotation()` is deprecated since v2.1.0, please use `-cc.Node.angle` instead. (`this.node.getRotation()` -> `-this.node.angle`)\");\n }\n return -this.angle;\n }\n },\n\n /**\n * !#en Set rotation of node (in quaternion).\n * !#zh 设置该节点的 quaternion 旋转角度。\n * @method setRotation\n * @param {cc.Quat|Number} quat Quaternion object represents the rotation or the x value of quaternion\n * @param {Number} [y] y value of quternion\n * @param {Number} [z] z value of quternion\n * @param {Number} [w] w value of quternion\n */\n setRotation (rotation, y, z, w) {\n if (typeof rotation === 'number' && y === undefined) {\n if (CC_DEBUG) {\n cc.warn(\"`cc.Node.setRotation(degree)` is deprecated since v2.1.0, please set `-cc.Node.angle` instead. (`this.node.setRotation(x)` -> `this.node.angle = -x`)\");\n }\n this.angle = -rotation;\n }\n else {\n let x = rotation;\n if (y === undefined) {\n x = rotation.x;\n y = rotation.y;\n z = rotation.z;\n w = rotation.w;\n }\n\n let trs = this._trs;\n if (trs[3] !== x || trs[4] !== y || trs[5] !== z || trs[6] !== w) {\n trs[3] = x;\n trs[4] = y;\n trs[5] = z;\n trs[6] = w;\n this.setLocalDirty(LocalDirtyFlag.ALL_ROTATION);\n\n if (this._eventMask & ROTATION_ON) {\n this.emit(EventType.ROTATION_CHANGED);\n }\n\n if (CC_EDITOR) {\n this._toEuler();\n }\n }\n }\n },\n\n /**\n * !#en\n * Returns a copy the untransformed size of the node.
\n * The contentSize remains the same no matter the node is scaled or rotated.
\n * All nodes has a size. Layer and Scene has the same size of the screen by default.
\n * !#zh 获取节点自身大小,不受该节点是否被缩放或者旋转的影响。\n * @method getContentSize\n * @return {Size} The untransformed size of the node.\n * @example\n * cc.log(\"Content Size: \" + node.getContentSize());\n */\n getContentSize () {\n return cc.size(this._contentSize.width, this._contentSize.height);\n },\n\n /**\n * !#en\n * Sets the untransformed size of the node.
\n * The contentSize remains the same no matter the node is scaled or rotated.
\n * All nodes has a size. Layer and Scene has the same size of the screen.\n * !#zh 设置节点原始大小,不受该节点是否被缩放或者旋转的影响。\n * @method setContentSize\n * @param {Size|Number} size - The untransformed size of the node or The untransformed size's width of the node.\n * @param {Number} [height] - The untransformed size's height of the node.\n * @example\n * node.setContentSize(cc.size(100, 100));\n * node.setContentSize(100, 100);\n */\n setContentSize (size, height) {\n var locContentSize = this._contentSize;\n var clone;\n if (height === undefined) {\n if ((size.width === locContentSize.width) && (size.height === locContentSize.height))\n return;\n if (CC_EDITOR) {\n clone = cc.size(locContentSize.width, locContentSize.height);\n }\n locContentSize.width = size.width;\n locContentSize.height = size.height;\n } else {\n if ((size === locContentSize.width) && (height === locContentSize.height))\n return;\n if (CC_EDITOR) {\n clone = cc.size(locContentSize.width, locContentSize.height);\n }\n locContentSize.width = size;\n locContentSize.height = height;\n }\n if (this._eventMask & SIZE_ON) {\n if (CC_EDITOR) {\n this.emit(EventType.SIZE_CHANGED, clone);\n }\n else {\n this.emit(EventType.SIZE_CHANGED);\n }\n }\n },\n\n /**\n * !#en\n * Returns a copy of the anchor point.
\n * Anchor point is the point around which all transformations and positioning manipulations take place.
\n * It's like a pin in the node where it is \"attached\" to its parent.
\n * The anchorPoint is normalized, like a percentage. (0,0) means the bottom-left corner and (1,1) means the top-right corner.
\n * But you can use values higher than (1,1) and lower than (0,0) too.
\n * The default anchor point is (0.5,0.5), so it starts at the center of the node.\n * !#zh\n * 获取节点锚点,用百分比表示。
\n * 锚点应用于所有变换和坐标点的操作,它就像在节点上连接其父节点的大头针。
\n * 锚点是标准化的,就像百分比一样。(0,0) 表示左下角,(1,1) 表示右上角。
\n * 但是你可以使用比(1,1)更高的值或者比(0,0)更低的值。
\n * 默认的锚点是(0.5,0.5),因此它开始于节点的中心位置。
\n * 注意:Creator 中的锚点仅用于定位所在的节点,子节点的定位不受影响。\n * @method getAnchorPoint\n * @return {Vec2} The anchor point of node.\n * @example\n * cc.log(\"Node AnchorPoint: \" + node.getAnchorPoint());\n */\n getAnchorPoint () {\n return cc.v2(this._anchorPoint);\n },\n\n /**\n * !#en\n * Sets the anchor point in percent.
\n * anchor point is the point around which all transformations and positioning manipulations take place.
\n * It's like a pin in the node where it is \"attached\" to its parent.
\n * The anchorPoint is normalized, like a percentage. (0,0) means the bottom-left corner and (1,1) means the top-right corner.
\n * But you can use values higher than (1,1) and lower than (0,0) too.
\n * The default anchor point is (0.5,0.5), so it starts at the center of the node.\n * !#zh\n * 设置锚点的百分比。
\n * 锚点应用于所有变换和坐标点的操作,它就像在节点上连接其父节点的大头针。
\n * 锚点是标准化的,就像百分比一样。(0,0) 表示左下角,(1,1) 表示右上角。
\n * 但是你可以使用比(1,1)更高的值或者比(0,0)更低的值。
\n * 默认的锚点是(0.5,0.5),因此它开始于节点的中心位置。
\n * 注意:Creator 中的锚点仅用于定位所在的节点,子节点的定位不受影响。\n * @method setAnchorPoint\n * @param {Vec2|Number} point - The anchor point of node or The x axis anchor of node.\n * @param {Number} [y] - The y axis anchor of node.\n * @example\n * node.setAnchorPoint(cc.v2(1, 1));\n * node.setAnchorPoint(1, 1);\n */\n setAnchorPoint (point, y) {\n var locAnchorPoint = this._anchorPoint;\n if (y === undefined) {\n if ((point.x === locAnchorPoint.x) && (point.y === locAnchorPoint.y))\n return;\n locAnchorPoint.x = point.x;\n locAnchorPoint.y = point.y;\n } else {\n if ((point === locAnchorPoint.x) && (y === locAnchorPoint.y))\n return;\n locAnchorPoint.x = point;\n locAnchorPoint.y = y;\n }\n this.setLocalDirty(LocalDirtyFlag.ALL_POSITION);\n if (this._eventMask & ANCHOR_ON) {\n this.emit(EventType.ANCHOR_CHANGED);\n }\n },\n\n /*\n * Transforms position from world space to local space.\n * @method _invTransformPoint\n * @param {Vec3} out\n * @param {Vec3} vec3\n */\n _invTransformPoint (out, pos) {\n if (this._parent) {\n this._parent._invTransformPoint(out, pos);\n } else {\n Vec3.copy(out, pos);\n }\n\n let ltrs = this._trs;\n // out = parent_inv_pos - pos\n Trs.toPosition(_tpVec3a, ltrs);\n Vec3.sub(out, out, _tpVec3a);\n\n // out = inv(rot) * out\n Trs.toRotation(_tpQuata, ltrs);\n Quat.conjugate(_tpQuatb, _tpQuata);\n Vec3.transformQuat(out, out, _tpQuatb);\n\n // out = (1/scale) * out\n Trs.toScale(_tpVec3a, ltrs);\n Vec3.inverseSafe(_tpVec3b, _tpVec3a);\n Vec3.mul(out, out, _tpVec3b);\n\n return out;\n },\n\n /*\n * Calculate and return world position.\n * This is not a public API yet, its usage could be updated\n * @method getWorldPosition\n * @param {Vec3} out\n * @return {Vec3}\n */\n getWorldPosition (out) {\n Trs.toPosition(out, this._trs);\n let curr = this._parent;\n let ltrs;\n while (curr) {\n ltrs = curr._trs;\n // out = parent_scale * pos\n Trs.toScale(_gwpVec3, ltrs);\n Vec3.mul(out, out, _gwpVec3);\n // out = parent_quat * out\n Trs.toRotation(_gwpQuat, ltrs);\n Vec3.transformQuat(out, out, _gwpQuat);\n // out = out + pos\n Trs.toPosition(_gwpVec3, ltrs);\n Vec3.add(out, out, _gwpVec3);\n curr = curr._parent;\n }\n return out;\n },\n\n /*\n * Set world position.\n * This is not a public API yet, its usage could be updated\n * @method setWorldPosition\n * @param {Vec3} pos\n */\n setWorldPosition (pos) {\n let ltrs = this._trs;\n if (CC_EDITOR) {\n var oldPosition = new cc.Vec3(ltrs[0], ltrs[1], ltrs[2]);\n }\n // NOTE: this is faster than invert world matrix and transform the point\n if (this._parent) {\n this._parent._invTransformPoint(_swpVec3, pos);\n }\n else {\n Vec3.copy(_swpVec3, pos);\n }\n Trs.fromPosition(ltrs, _swpVec3);\n this.setLocalDirty(LocalDirtyFlag.ALL_POSITION);\n\n // fast check event\n if (this._eventMask & POSITION_ON) {\n // send event\n if (CC_EDITOR) {\n this.emit(EventType.POSITION_CHANGED, oldPosition);\n }\n else {\n this.emit(EventType.POSITION_CHANGED);\n }\n }\n },\n\n /*\n * Calculate and return world rotation\n * This is not a public API yet, its usage could be updated\n * @method getWorldRotation\n * @param {Quat} out\n * @return {Quat}\n */\n getWorldRotation (out) {\n Trs.toRotation(_gwrQuat, this._trs);\n Quat.copy(out, _gwrQuat);\n let curr = this._parent;\n while (curr) {\n Trs.toRotation(_gwrQuat, curr._trs);\n Quat.mul(out, _gwrQuat, out);\n curr = curr._parent;\n }\n return out;\n },\n\n /*\n * Set world rotation with quaternion\n * This is not a public API yet, its usage could be updated\n * @method setWorldRotation\n * @param {Quat} val\n */\n setWorldRotation (val) {\n if (this._parent) {\n this._parent.getWorldRotation(_swrQuat);\n Quat.conjugate(_swrQuat, _swrQuat);\n Quat.mul(_swrQuat, _swrQuat, val);\n }\n else {\n Quat.copy(_swrQuat, val);\n }\n Trs.fromRotation(this._trs, _swrQuat);\n if (CC_EDITOR) {\n this._toEuler();\n }\n this.setLocalDirty(LocalDirtyFlag.ALL_ROTATION);\n },\n\n /*\n * Calculate and return world scale\n * This is not a public API yet, its usage could be updated\n * @method getWorldScale\n * @param {Vec3} out\n * @return {Vec3}\n */\n getWorldScale (out) {\n Trs.toScale(_gwsVec3, this._trs);\n Vec3.copy(out, _gwsVec3);\n let curr = this._parent;\n while (curr) {\n Trs.toScale(_gwsVec3, curr._trs);\n Vec3.mul(out, out, _gwsVec3);\n curr = curr._parent;\n }\n return out;\n },\n\n /*\n * Set world scale with vec3\n * This is not a public API yet, its usage could be updated\n * @method setWorldScale\n * @param {Vec3} scale\n */\n setWorldScale (scale) {\n if (this._parent) {\n this._parent.getWorldScale(_swsVec3);\n Vec3.div(_swsVec3, scale, _swsVec3);\n }\n else {\n Vec3.copy(_swsVec3, scale);\n }\n Trs.fromScale(this._trs, _swsVec3);\n this.setLocalDirty(LocalDirtyFlag.ALL_SCALE);\n },\n\n getWorldRT (out) {\n let opos = _gwrtVec3a;\n let orot = _gwrtQuata;\n let ltrs = this._trs;\n Trs.toPosition(opos, ltrs);\n Trs.toRotation(orot, ltrs);\n\n let curr = this._parent;\n while (curr) {\n ltrs = curr._trs;\n // opos = parent_lscale * lpos\n Trs.toScale(_gwrtVec3b, ltrs);\n Vec3.mul(opos, opos, _gwrtVec3b);\n // opos = parent_lrot * opos\n Trs.toRotation(_gwrtQuatb, ltrs);\n Vec3.transformQuat(opos, opos, _gwrtQuatb);\n // opos = opos + lpos\n Trs.toPosition(_gwrtVec3b, ltrs);\n Vec3.add(opos, opos, _gwrtVec3b);\n // orot = lrot * orot\n Quat.mul(orot, _gwrtQuatb, orot);\n curr = curr._parent;\n }\n Mat4.fromRT(out, orot, opos);\n return out;\n },\n\n /**\n * !#en Set rotation by lookAt target point, normally used by Camera Node\n * !#zh 通过观察目标来设置 rotation,一般用于 Camera Node 上\n * @method lookAt\n * @param {Vec3} pos\n * @param {Vec3} [up] - default is (0,1,0)\n */\n lookAt (pos, up) {\n this.getWorldPosition(_laVec3);\n Vec3.sub(_laVec3, _laVec3, pos); // NOTE: we use -z for view-dir\n Vec3.normalize(_laVec3, _laVec3);\n Quat.fromViewUp(_laQuat, _laVec3, up);\n\n this.setWorldRotation(_laQuat);\n },\n\n _updateLocalMatrix: updateLocalMatrix2D,\n\n _calculWorldMatrix () {\n // Avoid as much function call as possible\n if (this._localMatDirty & LocalDirtyFlag.TRSS) {\n this._updateLocalMatrix();\n }\n\n // Assume parent world matrix is correct\n let parent = this._parent;\n if (parent) {\n this._mulMat(this._worldMatrix, parent._worldMatrix, this._matrix);\n }\n else {\n Mat4.copy(this._worldMatrix, this._matrix);\n }\n this._worldMatDirty = false;\n },\n\n _mulMat: mulMat2D,\n\n _updateWorldMatrix () {\n if (this._parent) {\n this._parent._updateWorldMatrix();\n }\n if (this._worldMatDirty) {\n this._calculWorldMatrix();\n // Sync dirty to children\n let children = this._children;\n for (let i = 0, l = children.length; i < l; i++) {\n children[i]._worldMatDirty = true;\n }\n }\n },\n\n setLocalDirty (flag) {\n this._localMatDirty |= flag;\n this._worldMatDirty = true;\n\n if (flag === LocalDirtyFlag.ALL_POSITION || flag === LocalDirtyFlag.POSITION) {\n this._renderFlag |= RenderFlow.FLAG_WORLD_TRANSFORM;\n }\n else {\n this._renderFlag |= RenderFlow.FLAG_TRANSFORM;\n }\n },\n\n setWorldDirty () {\n this._worldMatDirty = true;\n },\n\n /**\n * !#en\n * Get the local transform matrix (4x4), based on parent node coordinates\n * !#zh 返回局部空间坐标系的矩阵,基于父节点坐标系。\n * @method getLocalMatrix\n * @param {Mat4} out The matrix object to be filled with data\n * @return {Mat4} Same as the out matrix object\n * @example\n * let mat4 = cc.mat4();\n * node.getLocalMatrix(mat4);\n */\n getLocalMatrix (out) {\n this._updateLocalMatrix();\n return Mat4.copy(out, this._matrix);\n },\n\n /**\n * !#en\n * Get the world transform matrix (4x4)\n * !#zh 返回世界空间坐标系的矩阵。\n * @method getWorldMatrix\n * @param {Mat4} out The matrix object to be filled with data\n * @return {Mat4} Same as the out matrix object\n * @example\n * let mat4 = cc.mat4();\n * node.getWorldMatrix(mat4);\n */\n getWorldMatrix (out) {\n this._updateWorldMatrix();\n return Mat4.copy(out, this._worldMatrix);\n },\n\n /**\n * !#en\n * Converts a Point to node (local) space coordinates.\n * !#zh\n * 将一个点转换到节点 (局部) 空间坐标系。\n * @method convertToNodeSpaceAR\n * @param {Vec3|Vec2} worldPoint\n * @param {Vec3|Vec2} [out]\n * @return {Vec3|Vec2}\n * @typescript\n * convertToNodeSpaceAR(worldPoint: T, out?: T): T\n * @example\n * var newVec2 = node.convertToNodeSpaceAR(cc.v2(100, 100));\n * var newVec3 = node.convertToNodeSpaceAR(cc.v3(100, 100, 100));\n */\n convertToNodeSpaceAR (worldPoint, out) {\n this._updateWorldMatrix();\n Mat4.invert(_mat4_temp, this._worldMatrix);\n\n if (worldPoint instanceof cc.Vec2) {\n out = out || new cc.Vec2();\n return Vec2.transformMat4(out, worldPoint, _mat4_temp);\n }\n else {\n out = out || new cc.Vec3();\n return Vec3.transformMat4(out, worldPoint, _mat4_temp);\n }\n },\n\n /**\n * !#en\n * Converts a Point in node coordinates to world space coordinates.\n * !#zh\n * 将节点坐标系下的一个点转换到世界空间坐标系。\n * @method convertToWorldSpaceAR\n * @param {Vec3|Vec2} nodePoint\n * @param {Vec3|Vec2} [out]\n * @return {Vec3|Vec2}\n * @typescript\n * convertToWorldSpaceAR(nodePoint: T, out?: T): T\n * @example\n * var newVec2 = node.convertToWorldSpaceAR(cc.v2(100, 100));\n * var newVec3 = node.convertToWorldSpaceAR(cc.v3(100, 100, 100));\n */\n convertToWorldSpaceAR (nodePoint, out) {\n this._updateWorldMatrix();\n if (nodePoint instanceof cc.Vec2) {\n out = out || new cc.Vec2();\n return Vec2.transformMat4(out, nodePoint, this._worldMatrix);\n }\n else {\n out = out || new cc.Vec3();\n return Vec3.transformMat4(out, nodePoint, this._worldMatrix);\n }\n },\n\n// OLD TRANSFORM ACCESS APIs\n /**\n * !#en Converts a Point to node (local) space coordinates then add the anchor point position.\n * So the return position will be related to the left bottom corner of the node's bounding box.\n * This equals to the API behavior of cocos2d-x, you probably want to use convertToNodeSpaceAR instead\n * !#zh 将一个点转换到节点 (局部) 坐标系,并加上锚点的坐标。
\n * 也就是说返回的坐标是相对于节点包围盒左下角的坐标。
\n * 这个 API 的设计是为了和 cocos2d-x 中行为一致,更多情况下你可能需要使用 convertToNodeSpaceAR。\n * @method convertToNodeSpace\n * @deprecated since v2.1.3\n * @param {Vec2} worldPoint\n * @return {Vec2}\n * @example\n * var newVec2 = node.convertToNodeSpace(cc.v2(100, 100));\n */\n convertToNodeSpace (worldPoint) {\n this._updateWorldMatrix();\n Mat4.invert(_mat4_temp, this._worldMatrix);\n let out = new cc.Vec2();\n Vec2.transformMat4(out, worldPoint, _mat4_temp);\n out.x += this._anchorPoint.x * this._contentSize.width;\n out.y += this._anchorPoint.y * this._contentSize.height;\n return out;\n },\n\n /**\n * !#en Converts a Point related to the left bottom corner of the node's bounding box to world space coordinates.\n * This equals to the API behavior of cocos2d-x, you probably want to use convertToWorldSpaceAR instead\n * !#zh 将一个相对于节点左下角的坐标位置转换到世界空间坐标系。\n * 这个 API 的设计是为了和 cocos2d-x 中行为一致,更多情况下你可能需要使用 convertToWorldSpaceAR\n * @method convertToWorldSpace\n * @deprecated since v2.1.3\n * @param {Vec2} nodePoint\n * @return {Vec2}\n * @example\n * var newVec2 = node.convertToWorldSpace(cc.v2(100, 100));\n */\n convertToWorldSpace (nodePoint) {\n this._updateWorldMatrix();\n let out = new cc.Vec2(\n nodePoint.x - this._anchorPoint.x * this._contentSize.width,\n nodePoint.y - this._anchorPoint.y * this._contentSize.height\n );\n return Vec2.transformMat4(out, out, this._worldMatrix);\n },\n\n /**\n * !#en\n * Returns the matrix that transform the node's (local) space coordinates into the parent's space coordinates.
\n * The matrix is in Pixels.\n * !#zh 返回这个将节点(局部)的空间坐标系转换成父节点的空间坐标系的矩阵。这个矩阵以像素为单位。\n * @method getNodeToParentTransform\n * @deprecated since v2.0\n * @param {AffineTransform} [out] The affine transform object to be filled with data\n * @return {AffineTransform} Same as the out affine transform object\n * @example\n * let affineTransform = cc.AffineTransform.create();\n * node.getNodeToParentTransform(affineTransform);\n */\n getNodeToParentTransform (out) {\n if (!out) {\n out = AffineTrans.identity();\n }\n this._updateLocalMatrix();\n\n var contentSize = this._contentSize;\n _vec3_temp.x = -this._anchorPoint.x * contentSize.width;\n _vec3_temp.y = -this._anchorPoint.y * contentSize.height;\n\n Mat4.copy(_mat4_temp, this._matrix);\n Mat4.transform(_mat4_temp, _mat4_temp, _vec3_temp);\n return AffineTrans.fromMat4(out, _mat4_temp);\n },\n\n /**\n * !#en\n * Returns the matrix that transform the node's (local) space coordinates into the parent's space coordinates.
\n * The matrix is in Pixels.
\n * This method is AR (Anchor Relative).\n * !#zh\n * 返回这个将节点(局部)的空间坐标系转换成父节点的空间坐标系的矩阵。
\n * 这个矩阵以像素为单位。
\n * 该方法基于节点坐标。\n * @method getNodeToParentTransformAR\n * @deprecated since v2.0\n * @param {AffineTransform} [out] The affine transform object to be filled with data\n * @return {AffineTransform} Same as the out affine transform object\n * @example\n * let affineTransform = cc.AffineTransform.create();\n * node.getNodeToParentTransformAR(affineTransform);\n */\n getNodeToParentTransformAR (out) {\n if (!out) {\n out = AffineTrans.identity();\n }\n this._updateLocalMatrix();\n return AffineTrans.fromMat4(out, this._matrix);\n },\n\n /**\n * !#en Returns the world affine transform matrix. The matrix is in Pixels.\n * !#zh 返回节点到世界坐标系的仿射变换矩阵。矩阵单位是像素。\n * @method getNodeToWorldTransform\n * @deprecated since v2.0\n * @param {AffineTransform} [out] The affine transform object to be filled with data\n * @return {AffineTransform} Same as the out affine transform object\n * @example\n * let affineTransform = cc.AffineTransform.create();\n * node.getNodeToWorldTransform(affineTransform);\n */\n getNodeToWorldTransform (out) {\n if (!out) {\n out = AffineTrans.identity();\n }\n this._updateWorldMatrix();\n\n var contentSize = this._contentSize;\n _vec3_temp.x = -this._anchorPoint.x * contentSize.width;\n _vec3_temp.y = -this._anchorPoint.y * contentSize.height;\n\n Mat4.copy(_mat4_temp, this._worldMatrix);\n Mat4.transform(_mat4_temp, _mat4_temp, _vec3_temp);\n\n return AffineTrans.fromMat4(out, _mat4_temp);\n },\n\n /**\n * !#en\n * Returns the world affine transform matrix. The matrix is in Pixels.
\n * This method is AR (Anchor Relative).\n * !#zh\n * 返回节点到世界坐标仿射变换矩阵。矩阵单位是像素。
\n * 该方法基于节点坐标。\n * @method getNodeToWorldTransformAR\n * @deprecated since v2.0\n * @param {AffineTransform} [out] The affine transform object to be filled with data\n * @return {AffineTransform} Same as the out affine transform object\n * @example\n * let affineTransform = cc.AffineTransform.create();\n * node.getNodeToWorldTransformAR(affineTransform);\n */\n getNodeToWorldTransformAR (out) {\n if (!out) {\n out = AffineTrans.identity();\n }\n this._updateWorldMatrix();\n return AffineTrans.fromMat4(out, this._worldMatrix);\n },\n\n /**\n * !#en\n * Returns the matrix that transform parent's space coordinates to the node's (local) space coordinates.
\n * The matrix is in Pixels. The returned transform is readonly and cannot be changed.\n * !#zh\n * 返回将父节点的坐标系转换成节点(局部)的空间坐标系的矩阵。
\n * 该矩阵以像素为单位。返回的矩阵是只读的,不能更改。\n * @method getParentToNodeTransform\n * @deprecated since v2.0\n * @param {AffineTransform} [out] The affine transform object to be filled with data\n * @return {AffineTransform} Same as the out affine transform object\n * @example\n * let affineTransform = cc.AffineTransform.create();\n * node.getParentToNodeTransform(affineTransform);\n */\n getParentToNodeTransform (out) {\n if (!out) {\n out = AffineTrans.identity();\n }\n this._updateLocalMatrix();\n Mat4.invert(_mat4_temp, this._matrix);\n return AffineTrans.fromMat4(out, _mat4_temp);\n },\n\n /**\n * !#en Returns the inverse world affine transform matrix. The matrix is in Pixels.\n * !#en 返回世界坐标系到节点坐标系的逆矩阵。\n * @method getWorldToNodeTransform\n * @deprecated since v2.0\n * @param {AffineTransform} [out] The affine transform object to be filled with data\n * @return {AffineTransform} Same as the out affine transform object\n * @example\n * let affineTransform = cc.AffineTransform.create();\n * node.getWorldToNodeTransform(affineTransform);\n */\n getWorldToNodeTransform (out) {\n if (!out) {\n out = AffineTrans.identity();\n }\n this._updateWorldMatrix();\n Mat4.invert(_mat4_temp, this._worldMatrix);\n return AffineTrans.fromMat4(out, _mat4_temp);\n },\n\n /**\n * !#en convenience methods which take a cc.Touch instead of cc.Vec2.\n * !#zh 将触摸点转换成本地坐标系中位置。\n * @method convertTouchToNodeSpace\n * @deprecated since v2.0\n * @param {Touch} touch - The touch object\n * @return {Vec2}\n * @example\n * var newVec2 = node.convertTouchToNodeSpace(touch);\n */\n convertTouchToNodeSpace (touch) {\n return this.convertToNodeSpace(touch.getLocation());\n },\n\n /**\n * !#en converts a cc.Touch (world coordinates) into a local coordinate. This method is AR (Anchor Relative).\n * !#zh 转换一个 cc.Touch(世界坐标)到一个局部坐标,该方法基于节点坐标。\n * @method convertTouchToNodeSpaceAR\n * @deprecated since v2.0\n * @param {Touch} touch - The touch object\n * @return {Vec2}\n * @example\n * var newVec2 = node.convertTouchToNodeSpaceAR(touch);\n */\n convertTouchToNodeSpaceAR (touch) {\n return this.convertToNodeSpaceAR(touch.getLocation());\n },\n\n /**\n * !#en\n * Returns a \"local\" axis aligned bounding box of the node.
\n * The returned box is relative only to its parent.\n * !#zh 返回父节坐标系下的轴向对齐的包围盒。\n * @method getBoundingBox\n * @return {Rect} The calculated bounding box of the node\n * @example\n * var boundingBox = node.getBoundingBox();\n */\n getBoundingBox () {\n this._updateLocalMatrix();\n let width = this._contentSize.width;\n let height = this._contentSize.height;\n let rect = cc.rect(\n -this._anchorPoint.x * width,\n -this._anchorPoint.y * height,\n width,\n height);\n return rect.transformMat4(rect, this._matrix);\n },\n\n /**\n * !#en\n * Returns a \"world\" axis aligned bounding box of the node.
\n * The bounding box contains self and active children's world bounding box.\n * !#zh\n * 返回节点在世界坐标系下的对齐轴向的包围盒(AABB)。
\n * 该边框包含自身和已激活的子节点的世界边框。\n * @method getBoundingBoxToWorld\n * @return {Rect}\n * @example\n * var newRect = node.getBoundingBoxToWorld();\n */\n getBoundingBoxToWorld () {\n if (this._parent) {\n this._parent._updateWorldMatrix();\n return this._getBoundingBoxTo();\n }\n else {\n return this.getBoundingBox();\n }\n },\n\n _getBoundingBoxTo () {\n let width = this._contentSize.width;\n let height = this._contentSize.height;\n let rect = cc.rect(\n -this._anchorPoint.x * width,\n -this._anchorPoint.y * height,\n width,\n height);\n\n this._calculWorldMatrix();\n rect.transformMat4(rect, this._worldMatrix);\n\n //query child's BoundingBox\n if (!this._children)\n return rect;\n\n var locChildren = this._children;\n for (var i = 0; i < locChildren.length; i++) {\n var child = locChildren[i];\n if (child && child.active) {\n var childRect = child._getBoundingBoxTo();\n if (childRect)\n rect.union(rect, childRect);\n }\n }\n return rect;\n },\n\n _updateOrderOfArrival () {\n var arrivalOrder = this._parent ? ++this._parent._childArrivalOrder : 0;\n this._localZOrder = (this._localZOrder & 0xffff0000) | arrivalOrder;\n\n this.emit(EventType.SIBLING_ORDER_CHANGED);\n },\n\n /**\n * !#en\n * Adds a child to the node with z order and name.\n * !#zh\n * 添加子节点,并且可以修改该节点的 局部 Z 顺序和名字。\n * @method addChild\n * @param {Node} child - A child node\n * @param {Number} [zIndex] - Z order for drawing priority. Please refer to zIndex property\n * @param {String} [name] - A name to identify the node easily. Please refer to name property\n * @example\n * node.addChild(newNode, 1, \"node\");\n */\n addChild (child, zIndex, name) {\n if (CC_DEV && !cc.Node.isNode(child)) {\n return cc.errorID(1634, cc.js.getClassName(child));\n }\n cc.assertID(child, 1606);\n cc.assertID(child._parent === null, 1605);\n\n // invokes the parent setter\n child.parent = this;\n\n if (zIndex !== undefined) {\n child.zIndex = zIndex;\n }\n if (name !== undefined) {\n child.name = name;\n }\n },\n\n /**\n * !#en Stops all running actions and schedulers.\n * !#zh 停止所有正在播放的动作和计时器。\n * @method cleanup\n * @example\n * node.cleanup();\n */\n cleanup () {\n // actions\n ActionManagerExist && cc.director.getActionManager().removeAllActionsFromTarget(this);\n // event\n eventManager.removeListeners(this);\n\n // children\n var i, len = this._children.length, node;\n for (i = 0; i < len; ++i) {\n node = this._children[i];\n if (node)\n node.cleanup();\n }\n },\n\n /**\n * !#en Sorts the children array depends on children's zIndex and arrivalOrder,\n * normally you won't need to invoke this function.\n * !#zh 根据子节点的 zIndex 和 arrivalOrder 进行排序,正常情况下开发者不需要手动调用这个函数。\n *\n * @method sortAllChildren\n */\n sortAllChildren () {\n if (this._reorderChildDirty) {\n\n this._reorderChildDirty = false;\n\n // delay update arrivalOrder before sort children\n var _children = this._children, child;\n // reset arrivalOrder before sort children\n this._childArrivalOrder = 1;\n for (let i = 0, len = _children.length; i < len; i++) {\n child = _children[i];\n child._updateOrderOfArrival();\n }\n\n // Optimize reordering event code to fix problems with setting zindex\n // https://github.com/cocos-creator/2d-tasks/issues/1186\n eventManager._setDirtyForNode(this);\n\n if (_children.length > 1) {\n // insertion sort\n let child, child2;\n for (let i = 1, count = _children.length; i < count; i++) {\n child = _children[i];\n let j = i;\n for (; j > 0 &&\n (child2 = _children[j - 1])._localZOrder > child._localZOrder; j--) {\n _children[j] = child2;\n }\n _children[j] = child;\n }\n\n this.emit(EventType.CHILD_REORDER, this);\n }\n cc.director.__fastOff(cc.Director.EVENT_AFTER_UPDATE, this.sortAllChildren, this);\n }\n },\n\n _delaySort () {\n if (!this._reorderChildDirty) {\n this._reorderChildDirty = true;\n cc.director.__fastOn(cc.Director.EVENT_AFTER_UPDATE, this.sortAllChildren, this);\n }\n },\n\n _restoreProperties: CC_EDITOR && function () {\n /*\n * TODO: Refine this code after completing undo/redo 2.0.\n * The node will be destroyed when deleting in the editor,\n * but it will be reserved and reused for undo.\n */\n\n // restore 3d node\n this.is3DNode = this.is3DNode;\n\n if (!this._matrix) {\n this._matrix = cc.mat4(this._spaceInfo.localMat);\n Mat4.identity(this._matrix);\n }\n if (!this._worldMatrix) {\n this._worldMatrix = cc.mat4(this._spaceInfo.worldMat);\n Mat4.identity(this._worldMatrix);\n }\n\n this._localMatDirty = LocalDirtyFlag.ALL;\n this._worldMatDirty = true;\n\n this._fromEuler();\n\n this._renderFlag |= RenderFlow.FLAG_TRANSFORM;\n if (this._renderComponent) {\n this._renderComponent.markForRender(true);\n }\n\n if (this._children.length > 0) {\n this._renderFlag |= RenderFlow.FLAG_CHILDREN;\n }\n },\n\n onRestore: CC_EDITOR && function () {\n this._onRestoreBase();\n\n this._restoreProperties();\n\n var actionManager = cc.director.getActionManager();\n if (this._activeInHierarchy) {\n actionManager && actionManager.resumeTarget(this);\n eventManager.resumeTarget(this);\n }\n else {\n actionManager && actionManager.pauseTarget(this);\n eventManager.pauseTarget(this);\n }\n },\n\n};\n\nif (CC_EDITOR) {\n // deprecated, only used to import old data in editor\n js.mixin(NodeDefines.properties, {\n _scaleX: {\n default: undefined,\n type: cc.Float,\n editorOnly: true\n },\n _scaleY: {\n default: undefined,\n type: cc.Float,\n editorOnly: true\n },\n });\n}\n\nlet Node = cc.Class(NodeDefines);\n\n// 3D Node Property\n\n\n// Node Event\n\n/**\n * !#en\n * The position changing event, you can listen to this event through the statement this.node.on(cc.Node.EventType.POSITION_CHANGED, callback, this);\n * !#zh\n * 位置变动监听事件, 通过 this.node.on(cc.Node.EventType.POSITION_CHANGED, callback, this); 进行监听。\n * @event position-changed\n * @param {Vec2} oldPos - The old position, but this parameter is only available in editor!\n */\n/**\n * !#en\n * The size changing event, you can listen to this event through the statement this.node.on(cc.Node.EventType.SIZE_CHANGED, callback, this);\n * !#zh\n * 尺寸变动监听事件,通过 this.node.on(cc.Node.EventType.SIZE_CHANGED, callback, this); 进行监听。\n * @event size-changed\n * @param {Size} oldSize - The old size, but this parameter is only available in editor!\n */\n/**\n * !#en\n * The anchor changing event, you can listen to this event through the statement this.node.on(cc.Node.EventType.ANCHOR_CHANGED, callback, this);\n * !#zh\n * 锚点变动监听事件,通过 this.node.on(cc.Node.EventType.ANCHOR_CHANGED, callback, this); 进行监听。\n * @event anchor-changed\n */\n/**\n * !#en\n * The adding child event, you can listen to this event through the statement this.node.on(cc.Node.EventType.CHILD_ADDED, callback, this);\n * !#zh\n * 增加子节点监听事件,通过 this.node.on(cc.Node.EventType.CHILD_ADDED, callback, this); 进行监听。\n * @event child-added\n * @param {Node} child - child which have been added\n */\n/**\n * !#en\n * The removing child event, you can listen to this event through the statement this.node.on(cc.Node.EventType.CHILD_REMOVED, callback, this);\n * !#zh\n * 删除子节点监听事件,通过 this.node.on(cc.Node.EventType.CHILD_REMOVED, callback, this); 进行监听。\n * @event child-removed\n * @param {Node} child - child which have been removed\n */\n/**\n * !#en\n * The reordering child event, you can listen to this event through the statement this.node.on(cc.Node.EventType.CHILD_REORDER, callback, this);\n * !#zh\n * 子节点顺序变动监听事件,通过 this.node.on(cc.Node.EventType.CHILD_REORDER, callback, this); 进行监听。\n * @event child-reorder\n * @param {Node} node - node whose children have been reordered\n */\n/**\n * !#en\n * The group changing event, you can listen to this event through the statement this.node.on(cc.Node.EventType.GROUP_CHANGED, callback, this);\n * !#zh\n * 节点分组变动监听事件,通过 this.node.on(cc.Node.EventType.GROUP_CHANGED, callback, this); 进行监听。\n * @event group-changed\n * @param {Node} node - node whose group has changed\n */\n\n// Deprecated APIs\n\n/**\n * !#en\n * Returns the displayed opacity of Node,\n * the difference between displayed opacity and opacity is that displayed opacity is calculated based on opacity and parent node's opacity when cascade opacity enabled.\n * !#zh\n * 获取节点显示透明度,\n * 显示透明度和透明度之间的不同之处在于当启用级连透明度时,\n * 显示透明度是基于自身透明度和父节点透明度计算的。\n *\n * @method getDisplayedOpacity\n * @return {number} displayed opacity\n * @deprecated since v2.0, please use opacity property, cascade opacity is removed\n */\n\n/**\n * !#en\n * Returns the displayed color of Node,\n * the difference between displayed color and color is that displayed color is calculated based on color and parent node's color when cascade color enabled.\n * !#zh\n * 获取节点的显示颜色,\n * 显示颜色和颜色之间的不同之处在于当启用级连颜色时,\n * 显示颜色是基于自身颜色和父节点颜色计算的。\n *\n * @method getDisplayedColor\n * @return {Color}\n * @deprecated since v2.0, please use color property, cascade color is removed\n */\n\n/**\n * !#en Cascade opacity is removed from v2.0\n * Indicate whether node's opacity value affect its child nodes, default value is true.\n * !#zh 透明度级联功能从 v2.0 开始已移除\n * 节点的不透明度值是否影响其子节点,默认值为 true。\n * @property cascadeOpacity\n * @deprecated since v2.0\n * @type {Boolean}\n */\n\n/**\n * !#en Cascade opacity is removed from v2.0\n * Returns whether node's opacity value affect its child nodes.\n * !#zh 透明度级联功能从 v2.0 开始已移除\n * 返回节点的不透明度值是否影响其子节点。\n * @method isCascadeOpacityEnabled\n * @deprecated since v2.0\n * @return {Boolean}\n */\n\n/**\n * !#en Cascade opacity is removed from v2.0\n * Enable or disable cascade opacity, if cascade enabled, child nodes' opacity will be the multiplication of parent opacity and its own opacity.\n * !#zh 透明度级联功能从 v2.0 开始已移除\n * 启用或禁用级连不透明度,如果级连启用,子节点的不透明度将是父不透明度乘上它自己的不透明度。\n * @method setCascadeOpacityEnabled\n * @deprecated since v2.0\n * @param {Boolean} cascadeOpacityEnabled\n */\n\n/**\n * !#en Opacity modify RGB have been removed since v2.0\n * Set whether color should be changed with the opacity value,\n * useless in ccsg.Node, but this function is override in some class to have such behavior.\n * !#zh 透明度影响颜色配置已经被废弃\n * 设置更改透明度时是否修改RGB值,\n * @method setOpacityModifyRGB\n * @deprecated since v2.0\n * @param {Boolean} opacityValue\n */\n\n/**\n * !#en Opacity modify RGB have been removed since v2.0\n * Get whether color should be changed with the opacity value.\n * !#zh 透明度影响颜色配置已经被废弃\n * 获取更改透明度时是否修改RGB值。\n * @method isOpacityModifyRGB\n * @deprecated since v2.0\n * @return {Boolean}\n */\n\n\nlet _p = Node.prototype;\njs.getset(_p, 'position', _p.getPosition, _p.setPosition, false, true);\n\nif (CC_EDITOR) {\n let vec3_tmp = new Vec3();\n cc.js.getset(_p, 'worldEulerAngles', function () {\n let angles = new Vec3(this._eulerAngles);\n let parent = this.parent;\n while (parent) {\n angles.addSelf(parent._eulerAngles);\n parent = parent.parent;\n }\n return angles;\n }, function (v) {\n vec3_tmp.set(v);\n let parent = this.parent;\n while (parent) {\n vec3_tmp.subSelf(parent._eulerAngles);\n parent = parent.parent;\n }\n this.eulerAngles = vec3_tmp;\n });\n}\n\ncc.Node = module.exports = Node;\n","/****************************************************************************\n Copyright (c) 2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n'use strict';\n\nconst Node = require('./CCNode');\nconst RenderFlow = require('./renderer/render-flow');\n\nconst HideInHierarchy = cc.Object.Flags.HideInHierarchy;\nconst LocalDirtyFlag = Node._LocalDirtyFlag;\nconst POSITION_ON = 1 << 0;\n\n/**\n * !#en\n * Class of private entities in Cocos Creator scenes.
\n * The PrivateNode is hidden in editor, and completely transparent to users.
\n * It's normally used as Node's private content created by components in parent node.
\n * So in theory private nodes are not children, they are part of the parent node.
\n * Private node have two important characteristics:
\n * 1. It has the minimum z index and cannot be modified, because they can't be displayed over real children.
\n * 2. The positioning of private nodes is also special, they will consider the left bottom corner of the parent node's bounding box as the origin of local coordinates.
\n * In this way, they can be easily kept inside the bounding box.
\n * Currently, it's used by RichText component and TileMap component.\n * !#zh\n * Cocos Creator 场景中的私有节点类。
\n * 私有节点在编辑器中不可见,对用户透明。
\n * 通常私有节点是被一些特殊的组件创建出来作为父节点的一部分而存在的,理论上来说,它们不是子节点,而是父节点的组成部分。
\n * 私有节点有两个非常重要的特性:
\n * 1. 它有着最小的渲染排序的 Z 轴深度,并且无法被更改,因为它们不能被显示在其他正常子节点之上。
\n * 2. 它的定位也是特殊的,对于私有节点来说,父节点包围盒的左下角是它的局部坐标系原点,这个原点相当于父节点的位置减去它锚点的偏移。这样私有节点可以比较容易被控制在包围盒之中。
\n * 目前在引擎中,RichText 和 TileMap 都有可能生成私有节点。\n * @class PrivateNode\n * @constructor\n * @param {String} name\n * @extends Node\n */\nlet PrivateNode = cc.Class({\n name: 'cc.PrivateNode',\n extends: Node,\n\n properties: {\n x: {\n get () {\n return this._originPos.x;\n },\n set (value) {\n var localPosition = this._originPos;\n if (value !== localPosition.x) {\n localPosition.x = value;\n this._posDirty(true);\n }\n },\n override: true\n },\n y: {\n get () {\n return this._originPos.y;\n },\n set (value) {\n var localPosition = this._originPos;\n if (value !== localPosition.y) {\n localPosition.y = value;\n this._posDirty(true);\n }\n },\n override: true\n },\n zIndex: {\n get () {\n return cc.macro.MIN_ZINDEX;\n },\n set () {\n },\n override: true\n },\n showInEditor: {\n default: false,\n editorOnly: true,\n override: true\n }\n },\n\n /**\n * @method constructor\n * @param {String} [name]\n */\n ctor (name) {\n this._localZOrder = cc.macro.MIN_ZINDEX << 16;\n this._originPos = cc.v2();\n if (CC_EDITOR) {\n this._objFlags |= HideInHierarchy;\n }\n },\n\n _posDirty (sendEvent) {\n this.setLocalDirty(LocalDirtyFlag.POSITION);\n !CC_NATIVERENDERER && (this._renderFlag |= RenderFlow.FLAG_TRANSFORM);\n if (sendEvent === true && (this._eventMask & POSITION_ON)) {\n this.emit(Node.EventType.POSITION_CHANGED);\n }\n },\n\n _updateLocalMatrix() {\n if (!this._localMatDirty) return;\n\n let parent = this.parent;\n if (parent) {\n // Position correction for transform calculation\n this._trs[0] = this._originPos.x - (parent._anchorPoint.x - 0.5) * parent._contentSize.width;\n this._trs[1] = this._originPos.y - (parent._anchorPoint.y - 0.5) * parent._contentSize.height;\n }\n\n this._super();\n },\n\n getPosition () {\n return new cc.Vec2(this._originPos);\n },\n\n setPosition (x, y) {\n if (y === undefined) {\n x = x.x;\n y = x.y;\n }\n\n let pos = this._originPos;\n if (pos.x === x && pos.y === y) {\n return;\n }\n pos.x = x;\n pos.y = y;\n this._posDirty(true);\n },\n\n setParent(value) {\n let oldParent = this._parent;\n this._super(value);\n if (oldParent !== value) {\n if (oldParent) {\n oldParent.off(Node.EventType.ANCHOR_CHANGED, this._posDirty, this);\n }\n if (value) {\n value.on(Node.EventType.ANCHOR_CHANGED, this._posDirty, this);\n }\n }\n },\n\n // do not update order of arrival\n _updateOrderOfArrival() {},\n});\n\nlet proto = PrivateNode.prototype;\ncc.js.getset(proto, \"parent\", proto.getParent, proto.setParent);\ncc.js.getset(proto, \"position\", proto.getPosition, proto.setPosition);\n\nif (CC_EDITOR) {\n // check components to avoid missing node reference serialied in previous version\n proto._onBatchCreated = function (dontSyncChildPrefab) {\n for (let comp of this._components) {\n comp.node = this;\n }\n\n Node.prototype._onBatchCreated.call(this, dontSyncChildPrefab);\n };\n}\n\ncc.PrivateNode = module.exports = PrivateNode;\n","/****************************************************************************\n Copyright (c) 2015-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos2d-x.org\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar NIL = function () {};\n\n/**\n * !#en\n * cc.Scene is a subclass of cc.Node that is used only as an abstract concept.
\n * cc.Scene and cc.Node are almost identical with the difference that users can not modify cc.Scene manually.\n * !#zh\n * cc.Scene 是 cc.Node 的子类,仅作为一个抽象的概念。
\n * cc.Scene 和 cc.Node 有点不同,用户不应直接修改 cc.Scene。\n * @class Scene\n * @extends Node\n */\ncc.Scene = cc.Class({\n name: 'cc.Scene',\n extends: require('./CCNode'),\n\n properties: {\n _is3DNode: {\n default: true,\n override: true\n },\n\n /**\n * !#en Indicates whether all (directly or indirectly) static referenced assets of this scene are releasable by default after scene unloading.\n * !#zh 指示该场景中直接或间接静态引用到的所有资源是否默认在场景切换后自动释放。\n * @property {Boolean} autoReleaseAssets\n * @default false\n */\n autoReleaseAssets: false,\n },\n\n ctor: function () {\n this._anchorPoint.x = 0.0;\n this._anchorPoint.y = 0.0;\n\n this._activeInHierarchy = false;\n this._inited = !cc.game._isCloning;\n\n if (CC_EDITOR) {\n this._prefabSyncedInLiveReload = false;\n }\n\n // cache all depend assets for auto release\n this.dependAssets = null;\n },\n\n destroy: function () {\n if (cc.Object.prototype.destroy.call(this)) {\n var children = this._children;\n for (var i = 0; i < children.length; ++i) {\n children[i].active = false;\n }\n }\n this._active = false;\n this._activeInHierarchy = false;\n },\n\n _onHierarchyChanged: NIL,\n _instantiate : null,\n\n _load: function () {\n if (!this._inited) {\n if (CC_TEST) {\n cc.assert(!this._activeInHierarchy, 'Should deactivate ActionManager and EventManager by default');\n }\n this._onBatchCreated(CC_EDITOR && this._prefabSyncedInLiveReload);\n this._inited = true;\n }\n },\n\n _activate: function (active) {\n active = (active !== false);\n if (CC_EDITOR || CC_TEST) {\n // register all nodes to editor\n this._registerIfAttached(active);\n }\n cc.director._nodeActivator.activateNode(this, active);\n }\n});\n\nmodule.exports = cc.Scene;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * @module cc\n */\nconst js = require('./platform/js');\nconst IdGenerater = require('./platform/id-generater');\nconst MAX_POOL_SIZE = 20;\n\nvar idGenerater = new IdGenerater('Scheduler');\n\n//data structures\n/*\n * A list double-linked list used for \"updates with priority\"\n * @class ListEntry\n * @param {Object} target not retained (retained by hashUpdateEntry)\n * @param {Number} priority\n * @param {Boolean} paused\n * @param {Boolean} markedForDeletion selector will no longer be called and entry will be removed at end of the next tick\n */\nvar ListEntry = function (target, priority, paused, markedForDeletion) {\n this.target = target;\n this.priority = priority;\n this.paused = paused;\n this.markedForDeletion = markedForDeletion;\n};\n\nvar _listEntries = [];\nListEntry.get = function (target, priority, paused, markedForDeletion) {\n var result = _listEntries.pop();\n if (result) {\n result.target = target;\n result.priority = priority;\n result.paused = paused;\n result.markedForDeletion = markedForDeletion;\n }\n else {\n result = new ListEntry(target, priority, paused, markedForDeletion);\n }\n return result;\n};\nListEntry.put = function (entry) {\n if (_listEntries.length < MAX_POOL_SIZE) {\n entry.target = null;\n _listEntries.push(entry);\n }\n};\n\n/*\n * A update entry list\n * @class HashUpdateEntry\n * @param {Array} list Which list does it belong to ?\n * @param {ListEntry} entry entry in the list\n * @param {Object} target hash key (retained)\n * @param {function} callback\n */\nvar HashUpdateEntry = function (list, entry, target, callback) {\n this.list = list;\n this.entry = entry;\n this.target = target;\n this.callback = callback;\n};\nvar _hashUpdateEntries = [];\nHashUpdateEntry.get = function (list, entry, target, callback) {\n var result = _hashUpdateEntries.pop();\n if (result) {\n result.list = list;\n result.entry = entry;\n result.target = target;\n result.callback = callback;\n }\n else {\n result = new HashUpdateEntry(list, entry, target, callback);\n }\n return result;\n};\nHashUpdateEntry.put = function (entry) {\n if (_hashUpdateEntries.length < MAX_POOL_SIZE) {\n entry.list = entry.entry = entry.target = entry.callback = null;\n _hashUpdateEntries.push(entry);\n }\n};\n\n//\n/*\n * Hash Element used for \"selectors with interval\"\n * @class HashTimerEntry\n * @param {Array} timers\n * @param {Object} target hash key (retained)\n * @param {Number} timerIndex\n * @param {Timer} currentTimer\n * @param {Boolean} currentTimerSalvaged\n * @param {Boolean} paused\n */\nvar HashTimerEntry = function (timers, target, timerIndex, currentTimer, currentTimerSalvaged, paused) {\n var _t = this;\n _t.timers = timers;\n _t.target = target;\n _t.timerIndex = timerIndex;\n _t.currentTimer = currentTimer;\n _t.currentTimerSalvaged = currentTimerSalvaged;\n _t.paused = paused;\n};\nvar _hashTimerEntries = [];\nHashTimerEntry.get = function (timers, target, timerIndex, currentTimer, currentTimerSalvaged, paused) {\n var result = _hashTimerEntries.pop();\n if (result) {\n result.timers = timers;\n result.target = target;\n result.timerIndex = timerIndex;\n result.currentTimer = currentTimer;\n result.currentTimerSalvaged = currentTimerSalvaged;\n result.paused = paused;\n }\n else {\n result = new HashTimerEntry(timers, target, timerIndex, currentTimer, currentTimerSalvaged, paused);\n }\n return result;\n};\nHashTimerEntry.put = function (entry) {\n if (_hashTimerEntries.length < MAX_POOL_SIZE) {\n entry.timers = entry.target = entry.currentTimer = null;\n _hashTimerEntries.push(entry);\n }\n};\n\n/*\n * Light weight timer\n * @extends cc.Class\n */\nfunction CallbackTimer () {\n this._lock = false;\n this._scheduler = null;\n this._elapsed = -1;\n this._runForever = false;\n this._useDelay = false;\n this._timesExecuted = 0;\n this._repeat = 0;\n this._delay = 0;\n this._interval = 0;\n\n this._target = null;\n this._callback = null;\n}\n\nvar proto = CallbackTimer.prototype;\n\nproto.initWithCallback = function (scheduler, callback, target, seconds, repeat, delay) {\n this._lock = false;\n this._scheduler = scheduler;\n this._target = target;\n this._callback = callback;\n\n this._elapsed = -1;\n this._interval = seconds;\n this._delay = delay;\n this._useDelay = (this._delay > 0);\n this._repeat = repeat;\n this._runForever = (this._repeat === cc.macro.REPEAT_FOREVER);\n return true;\n};\n/**\n * @return {Number} returns interval of timer\n */\nproto.getInterval = function(){return this._interval;};\n/**\n * @param {Number} interval set interval in seconds\n */\nproto.setInterval = function(interval){this._interval = interval;};\n\n/**\n * triggers the timer\n * @param {Number} dt delta time\n */\nproto.update = function (dt) {\n if (this._elapsed === -1) {\n this._elapsed = 0;\n this._timesExecuted = 0;\n } else {\n this._elapsed += dt;\n if (this._runForever && !this._useDelay) {//standard timer usage\n if (this._elapsed >= this._interval) {\n this.trigger();\n this._elapsed = 0;\n }\n } else {//advanced usage\n if (this._useDelay) {\n if (this._elapsed >= this._delay) {\n this.trigger();\n\n this._elapsed -= this._delay;\n this._timesExecuted += 1;\n this._useDelay = false;\n }\n } else {\n if (this._elapsed >= this._interval) {\n this.trigger();\n\n this._elapsed = 0;\n this._timesExecuted += 1;\n }\n }\n\n if (this._callback && !this._runForever && this._timesExecuted > this._repeat)\n this.cancel();\n }\n }\n};\n\nproto.getCallback = function(){\n return this._callback;\n};\n\nproto.trigger = function () {\n if (this._target && this._callback) {\n this._lock = true;\n this._callback.call(this._target, this._elapsed);\n this._lock = false;\n }\n};\n\nproto.cancel = function () {\n //override\n this._scheduler.unschedule(this._callback, this._target);\n};\n\nvar _timers = [];\nCallbackTimer.get = function () {\n return _timers.pop() || new CallbackTimer();\n};\nCallbackTimer.put = function (timer) {\n if (_timers.length < MAX_POOL_SIZE && !timer._lock) {\n timer._scheduler = timer._target = timer._callback = null;\n _timers.push(timer);\n }\n};\n\n/**\n * !#en\n * Scheduler is responsible of triggering the scheduled callbacks.
\n * You should not use NSTimer. Instead use this class.
\n *
\n * There are 2 different types of callbacks (selectors):
\n * - update callback: the 'update' callback will be called every frame. You can customize the priority.
\n * - custom callback: A custom callback will be called every frame, or with a custom interval of time
\n *
\n * The 'custom selectors' should be avoided when possible. It is faster,\n * and consumes less memory to use the 'update callback'. *\n * !#zh\n * Scheduler 是负责触发回调函数的类。
\n * 通常情况下,建议使用 cc.director.getScheduler() 来获取系统定时器。
\n * 有两种不同类型的定时器:
\n * - update 定时器:每一帧都会触发。您可以自定义优先级。
\n * - 自定义定时器:自定义定时器可以每一帧或者自定义的时间间隔触发。
\n * 如果希望每帧都触发,应该使用 update 定时器,使用 update 定时器更快,而且消耗更少的内存。\n *\n * @class Scheduler\n */\ncc.Scheduler = function () {\n this._timeScale = 1.0;\n this._updatesNegList = []; // list of priority < 0\n this._updates0List = []; // list of priority == 0\n this._updatesPosList = []; // list of priority > 0\n this._hashForUpdates = js.createMap(true); // hash used to fetch quickly the list entries for pause, delete, etc\n this._hashForTimers = js.createMap(true); // Used for \"selectors with interval\"\n this._currentTarget = null;\n this._currentTargetSalvaged = false;\n this._updateHashLocked = false; // If true unschedule will not remove anything from a hash. Elements will only be marked for deletion.\n\n this._arrayForTimers = []; // Speed up indexing\n //this._arrayForUpdates = []; // Speed up indexing\n};\n\ncc.Scheduler.prototype = {\n constructor: cc.Scheduler,\n //-----------------------private method----------------------\n\n _removeHashElement: function (element) {\n delete this._hashForTimers[element.target._id];\n var arr = this._arrayForTimers;\n for (var i = 0, l = arr.length; i < l; i++) {\n if (arr[i] === element) {\n arr.splice(i, 1);\n break;\n }\n }\n HashTimerEntry.put(element);\n },\n\n _removeUpdateFromHash: function (entry) {\n var targetId = entry.target._id;\n var self = this, element = self._hashForUpdates[targetId];\n if (element) {\n // Remove list entry from list\n var list = element.list, listEntry = element.entry;\n for (var i = 0, l = list.length; i < l; i++) {\n if (list[i] === listEntry) {\n list.splice(i, 1);\n break;\n }\n }\n\n delete self._hashForUpdates[targetId];\n ListEntry.put(listEntry);\n HashUpdateEntry.put(element);\n }\n },\n\n _priorityIn: function (ppList, listElement, priority) {\n for (var i = 0; i < ppList.length; i++){\n if (priority < ppList[i].priority) {\n ppList.splice(i, 0, listElement);\n return;\n }\n }\n ppList.push(listElement);\n },\n\n _appendIn: function (ppList, listElement) {\n ppList.push(listElement);\n },\n\n //-----------------------public method-------------------------\n /**\n * !#en This method should be called for any target which needs to schedule tasks, and this method should be called before any scheduler API usage.\n * This method will add a `_id` property if it doesn't exist.\n * !#zh 任何需要用 Scheduler 管理任务的对象主体都应该调用这个方法,并且应该在调用任何 Scheduler API 之前调用这个方法。\n * 这个方法会给对象添加一个 `_id` 属性,如果这个属性不存在的话。\n * @method enableForTarget\n * @param {Object} target\n */\n enableForTarget: function (target) {\n if (!target._id) {\n if (target.__instanceId) {\n cc.warnID(1513);\n }\n else {\n target._id = idGenerater.getNewId();\n }\n }\n },\n\n /**\n * !#en\n * Modifies the time of all scheduled callbacks.
\n * You can use this property to create a 'slow motion' or 'fast forward' effect.
\n * Default is 1.0. To create a 'slow motion' effect, use values below 1.0.
\n * To create a 'fast forward' effect, use values higher than 1.0.
\n * Note:It will affect EVERY scheduled selector / action.\n * !#zh\n * 设置时间间隔的缩放比例。
\n * 您可以使用这个方法来创建一个 “slow motion(慢动作)” 或 “fast forward(快进)” 的效果。
\n * 默认是 1.0。要创建一个 “slow motion(慢动作)” 效果,使用值低于 1.0。
\n * 要使用 “fast forward(快进)” 效果,使用值大于 1.0。
\n * 注意:它影响该 Scheduler 下管理的所有定时器。\n * @method setTimeScale\n * @param {Number} timeScale\n */\n setTimeScale: function (timeScale) {\n this._timeScale = timeScale;\n },\n\n /**\n * !#en Returns time scale of scheduler.\n * !#zh 获取时间间隔的缩放比例。\n * @method getTimeScale\n * @return {Number}\n */\n getTimeScale: function () {\n return this._timeScale;\n },\n\n /**\n * !#en 'update' the scheduler. (You should NEVER call this method, unless you know what you are doing.)\n * !#zh update 调度函数。(不应该直接调用这个方法,除非完全了解这么做的结果)\n * @method update\n * @param {Number} dt delta time\n */\n update: function (dt) {\n this._updateHashLocked = true;\n if(this._timeScale !== 1)\n dt *= this._timeScale;\n\n var i, list, len, entry;\n\n for(i=0,list=this._updatesNegList, len = list.length; i\n * The scheduled method will be called every 'interval' seconds.
\n * If paused is YES, then it won't be called until it is resumed.
\n * If 'interval' is 0, it will be called every frame, but if so, it recommended to use 'scheduleUpdateForTarget:' instead.
\n * If the callback function is already scheduled, then only the interval parameter will be updated without re-scheduling it again.
\n * repeat let the action be repeated repeat + 1 times, use cc.macro.REPEAT_FOREVER to let the action run continuously
\n * delay is the amount of time the action will wait before it'll start
\n *

\n * !#zh\n * 指定回调函数,调用对象等信息来添加一个新的定时器。
\n * 如果 paused 值为 true,那么直到 resume 被调用才开始计时。
\n * 当时间间隔达到指定值时,设置的回调函数将会被调用。
\n * 如果 interval 值为 0,那么回调函数每一帧都会被调用,但如果是这样,\n * 建议使用 scheduleUpdateForTarget 代替。
\n * 如果回调函数已经被定时器使用,那么只会更新之前定时器的时间间隔参数,不会设置新的定时器。
\n * repeat 值可以让定时器触发 repeat + 1 次,使用 cc.macro.REPEAT_FOREVER\n * 可以让定时器一直循环触发。
\n * delay 值指定延迟时间,定时器会在延迟指定的时间之后开始计时。\n * @method schedule\n * @param {Function} callback\n * @param {Object} target\n * @param {Number} interval\n * @param {Number} [repeat=cc.macro.REPEAT_FOREVER]\n * @param {Number} [delay=0]\n * @param {Boolean} paused\n * @example {@link cocos2d/core/CCScheduler/schedule.js}\n * @typescript\n * schedule(callback: Function, target: any, interval: number, repeat: number, delay: number, paused?: boolean): void\n * schedule(callback: Function, target: any, interval: number, paused?: boolean): void\n */\n schedule: function (callback, target, interval, repeat, delay, paused) {\n 'use strict';\n if (typeof callback !== 'function') {\n var tmp = callback;\n callback = target;\n target = tmp;\n }\n //selector, target, interval, repeat, delay, paused\n //selector, target, interval, paused\n if (arguments.length === 4 || arguments.length === 5) {\n paused = !!repeat;\n repeat = cc.macro.REPEAT_FOREVER;\n delay = 0;\n }\n\n cc.assertID(target, 1502);\n\n var targetId = target._id;\n if (!targetId) {\n if (target.__instanceId) {\n cc.warnID(1513);\n targetId = target._id = target.__instanceId;\n }\n else {\n cc.errorID(1510);\n }\n }\n var element = this._hashForTimers[targetId];\n if (!element) {\n // Is this the 1st element ? Then set the pause level to all the callback_fns of this target\n element = HashTimerEntry.get(null, target, 0, null, null, paused);\n this._arrayForTimers.push(element);\n this._hashForTimers[targetId] = element;\n } else if (element.paused !== paused) {\n cc.warnID(1511);\n }\n\n var timer, i;\n if (element.timers == null) {\n element.timers = [];\n }\n else {\n for (i = 0; i < element.timers.length; ++i) {\n timer = element.timers[i];\n if (timer && callback === timer._callback) {\n cc.logID(1507, timer.getInterval(), interval);\n timer._interval = interval;\n return;\n }\n }\n }\n\n timer = CallbackTimer.get();\n timer.initWithCallback(this, callback, target, interval, repeat, delay);\n element.timers.push(timer);\n\n if (this._currentTarget === element && this._currentTargetSalvaged) {\n this._currentTargetSalvaged = false;\n }\n },\n\n /**\n * !#en\n * Schedules the update callback for a given target,\n * During every frame after schedule started, the \"update\" function of target will be invoked.\n * !#zh\n * 使用指定的优先级为指定的对象设置 update 定时器。\n * update 定时器每一帧都会被触发,触发时自动调用指定对象的 \"update\" 函数。\n * 优先级的值越低,定时器被触发的越早。\n * @method scheduleUpdate\n * @param {Object} target\n * @param {Number} priority\n * @param {Boolean} paused\n */\n scheduleUpdate: function(target, priority, paused) {\n var targetId = target._id;\n if (!targetId) {\n if (target.__instanceId) {\n cc.warnID(1513);\n targetId = target._id = target.__instanceId;\n }\n else {\n cc.errorID(1510);\n }\n }\n var hashElement = this._hashForUpdates[targetId];\n if (hashElement && hashElement.entry){\n // check if priority has changed\n if (hashElement.entry.priority !== priority){\n if (this._updateHashLocked){\n cc.logID(1506);\n hashElement.entry.markedForDeletion = false;\n hashElement.entry.paused = paused;\n return;\n }else{\n // will be added again outside if (hashElement).\n this.unscheduleUpdate(target);\n }\n }else{\n hashElement.entry.markedForDeletion = false;\n hashElement.entry.paused = paused;\n return;\n }\n }\n\n var listElement = ListEntry.get(target, priority, paused, false);\n var ppList;\n\n // most of the updates are going to be 0, that's way there\n // is an special list for updates with priority 0\n if (priority === 0) {\n ppList = this._updates0List;\n this._appendIn(ppList, listElement);\n }\n else {\n ppList = priority < 0 ? this._updatesNegList : this._updatesPosList;\n this._priorityIn(ppList, listElement, priority);\n }\n\n //update hash entry for quick access\n this._hashForUpdates[targetId] = HashUpdateEntry.get(ppList, listElement, target, null);\n },\n\n /**\n * !#en\n * Unschedules a callback for a callback and a given target.\n * If you want to unschedule the \"update\", use `unscheduleUpdate()`\n * !#zh\n * 取消指定对象定时器。\n * 如果需要取消 update 定时器,请使用 unscheduleUpdate()。\n * @method unschedule\n * @param {Function} callback The callback to be unscheduled\n * @param {Object} target The target bound to the callback.\n */\n unschedule: function (callback, target) {\n //callback, target\n\n // explicity handle nil arguments when removing an object\n if (!target || !callback)\n return;\n var targetId = target._id;\n if (!targetId) {\n if (target.__instanceId) {\n cc.warnID(1513);\n targetId = target._id = target.__instanceId;\n }\n else {\n cc.errorID(1510);\n }\n }\n\n var self = this, element = self._hashForTimers[targetId];\n if (element) {\n var timers = element.timers;\n for(var i = 0, li = timers.length; i < li; i++){\n var timer = timers[i];\n if (callback === timer._callback) {\n if ((timer === element.currentTimer) && (!element.currentTimerSalvaged)) {\n element.currentTimerSalvaged = true;\n }\n timers.splice(i, 1);\n CallbackTimer.put(timer);\n //update timerIndex in case we are in tick;, looping over the actions\n if (element.timerIndex >= i) {\n element.timerIndex--;\n }\n\n if (timers.length === 0) {\n if (self._currentTarget === element) {\n self._currentTargetSalvaged = true;\n } else {\n self._removeHashElement(element);\n }\n }\n return;\n }\n }\n }\n },\n\n /** \n * !#en Unschedules the update callback for a given target.\n * !#zh 取消指定对象的 update 定时器。\n * @method unscheduleUpdate\n * @param {Object} target The target to be unscheduled.\n */\n unscheduleUpdate: function (target) {\n if (!target)\n return;\n var targetId = target._id;\n if (!targetId) {\n if (target.__instanceId) {\n cc.warnID(1513);\n targetId = target._id = target.__instanceId;\n }\n else {\n cc.errorID(1510);\n }\n }\n\n var element = this._hashForUpdates[targetId];\n if (element) {\n if (this._updateHashLocked) {\n element.entry.markedForDeletion = true;\n } else {\n this._removeUpdateFromHash(element.entry);\n }\n }\n },\n\n /** \n * !#en\n * Unschedules all scheduled callbacks for a given target.\n * This also includes the \"update\" callback.\n * !#zh 取消指定对象的所有定时器,包括 update 定时器。\n * @method unscheduleAllForTarget\n * @param {Object} target The target to be unscheduled.\n */\n unscheduleAllForTarget: function (target) {\n // explicit nullptr handling\n if (!target){\n return;\n }\n var targetId = target._id;\n if (!targetId) {\n if (target.__instanceId) {\n cc.warnID(1513);\n targetId = target._id = target.__instanceId;\n }\n else {\n cc.errorID(1510);\n }\n }\n\n // Custom Selectors\n var element = this._hashForTimers[targetId];\n if (element) {\n var timers = element.timers;\n if (timers.indexOf(element.currentTimer) > -1 && \n (!element.currentTimerSalvaged)) {\n element.currentTimerSalvaged = true;\n }\n for (var i = 0, l = timers.length; i < l; i++) {\n CallbackTimer.put(timers[i]);\n }\n timers.length = 0;\n\n if (this._currentTarget === element){\n this._currentTargetSalvaged = true;\n }else{\n this._removeHashElement(element);\n }\n }\n\n // update selector\n this.unscheduleUpdate(target);\n },\n\n /**\n * !#en\n * Unschedules all scheduled callbacks from all targets including the system callbacks.
\n * You should NEVER call this method, unless you know what you are doing.\n * !#zh\n * 取消所有对象的所有定时器,包括系统定时器。
\n * 不要调用此函数,除非你确定你在做什么。\n * @method unscheduleAll\n */\n unscheduleAll: function(){\n this.unscheduleAllWithMinPriority(cc.Scheduler.PRIORITY_SYSTEM);\n },\n\n /**\n * !#en\n * Unschedules all callbacks from all targets with a minimum priority.
\n * You should only call this with `PRIORITY_NON_SYSTEM_MIN` or higher.\n * !#zh\n * 取消所有优先级的值大于指定优先级的定时器。
\n * 你应该只取消优先级的值大于 PRIORITY_NON_SYSTEM_MIN 的定时器。\n * @method unscheduleAllWithMinPriority\n * @param {Number} minPriority The minimum priority of selector to be unscheduled. Which means, all selectors which\n * priority is higher than minPriority will be unscheduled.\n */\n unscheduleAllWithMinPriority: function(minPriority){\n // Custom Selectors\n var i, element, arr = this._arrayForTimers;\n for(i=arr.length-1; i>=0; i--){\n element = arr[i];\n this.unscheduleAllForTarget(element.target);\n }\n\n // Updates selectors\n var entry;\n var temp_length = 0;\n if(minPriority < 0){\n for(i=0; i= minPriority)\n this.unscheduleUpdate(entry.target);\n if (temp_length == this._updatesNegList.length)\n i++;\n }\n }\n\n if(minPriority <= 0){\n for(i=0; i= minPriority)\n this.unscheduleUpdate(entry.target);\n if (temp_length == this._updatesPosList.length)\n i++;\n }\n },\n\n /** \n * !#en Checks whether a callback for a given target is scheduled.\n * !#zh 检查指定的回调函数和回调对象组合是否存在定时器。\n * @method isScheduled\n * @param {Function} callback The callback to check.\n * @param {Object} target The target of the callback.\n * @return {Boolean} True if the specified callback is invoked, false if not.\n */\n isScheduled: function(callback, target){\n //key, target\n //selector, target\n cc.assertID(callback, 1508);\n cc.assertID(target, 1509);\n var targetId = target._id;\n if (!targetId) {\n if (target.__instanceId) {\n cc.warnID(1513);\n targetId = target._id = target.__instanceId;\n }\n else {\n cc.errorID(1510);\n }\n }\n \n var element = this._hashForTimers[targetId];\n\n if (!element) {\n return false;\n }\n\n if (element.timers == null){\n return false;\n }\n else {\n var timers = element.timers;\n for (var i = 0; i < timers.length; ++i) {\n var timer = timers[i];\n\n if (callback === timer._callback){\n return true;\n }\n }\n return false;\n }\n },\n\n /**\n * !#en\n * Pause all selectors from all targets.
\n * You should NEVER call this method, unless you know what you are doing.\n * !#zh\n * 暂停所有对象的所有定时器。
\n * 不要调用这个方法,除非你知道你正在做什么。\n * @method pauseAllTargets\n */\n pauseAllTargets: function () {\n return this.pauseAllTargetsWithMinPriority(cc.Scheduler.PRIORITY_SYSTEM);\n },\n\n /**\n * !#en\n * Pause all selectors from all targets with a minimum priority.
\n * You should only call this with kCCPriorityNonSystemMin or higher.\n * !#zh\n * 暂停所有优先级的值大于指定优先级的定时器。
\n * 你应该只暂停优先级的值大于 PRIORITY_NON_SYSTEM_MIN 的定时器。\n * @method pauseAllTargetsWithMinPriority\n * @param {Number} minPriority\n */\n pauseAllTargetsWithMinPriority: function (minPriority) {\n var idsWithSelectors = [];\n\n var self = this, element, locArrayForTimers = self._arrayForTimers;\n var i, li;\n // Custom Selectors\n for(i = 0, li = locArrayForTimers.length; i < li; i++){\n element = locArrayForTimers[i];\n if (element) {\n element.paused = true;\n idsWithSelectors.push(element.target);\n }\n }\n\n var entry;\n if(minPriority < 0){\n for(i=0; i= minPriority){\n entry.paused = true;\n idsWithSelectors.push(entry.target);\n }\n }\n }\n }\n\n if(minPriority <= 0){\n for(i=0; i= minPriority){\n entry.paused = true;\n idsWithSelectors.push(entry.target);\n }\n }\n }\n\n return idsWithSelectors;\n },\n\n /**\n * !#en\n * Resume selectors on a set of targets.
\n * This can be useful for undoing a call to pauseAllCallbacks.\n * !#zh\n * 恢复指定数组中所有对象的定时器。
\n * 这个函数是 pauseAllCallbacks 的逆操作。\n * @method resumeTargets\n * @param {Array} targetsToResume\n */\n resumeTargets: function (targetsToResume) {\n if (!targetsToResume)\n return;\n\n for (var i = 0; i < targetsToResume.length; i++) {\n this.resumeTarget(targetsToResume[i]);\n }\n },\n\n /**\n * !#en\n * Pauses the target.
\n * All scheduled selectors/update for a given target won't be 'ticked' until the target is resumed.
\n * If the target is not present, nothing happens.\n * !#zh\n * 暂停指定对象的定时器。
\n * 指定对象的所有定时器都会被暂停。
\n * 如果指定的对象没有定时器,什么也不会发生。\n * @method pauseTarget\n * @param {Object} target\n */\n pauseTarget: function (target) {\n cc.assertID(target, 1503);\n var targetId = target._id;\n if (!targetId) {\n if (target.__instanceId) {\n cc.warnID(1513);\n targetId = target._id = target.__instanceId;\n }\n else {\n cc.errorID(1510);\n }\n }\n\n //customer selectors\n var self = this, \n element = self._hashForTimers[targetId];\n if (element) {\n element.paused = true;\n }\n\n //update callback\n var elementUpdate = self._hashForUpdates[targetId];\n if (elementUpdate) {\n elementUpdate.entry.paused = true;\n }\n },\n\n /**\n * !#en\n * Resumes the target.
\n * The 'target' will be unpaused, so all schedule selectors/update will be 'ticked' again.
\n * If the target is not present, nothing happens.\n * !#zh\n * 恢复指定对象的所有定时器。
\n * 指定对象的所有定时器将继续工作。
\n * 如果指定的对象没有定时器,什么也不会发生。\n * @method resumeTarget\n * @param {Object} target\n */\n resumeTarget: function (target) {\n cc.assertID(target, 1504);\n var targetId = target._id;\n if (!targetId) {\n if (target.__instanceId) {\n cc.warnID(1513);\n targetId = target._id = target.__instanceId;\n }\n else {\n cc.errorID(1510);\n }\n }\n\n // custom selectors\n var self = this,\n element = self._hashForTimers[targetId];\n if (element) {\n element.paused = false;\n }\n\n //update callback\n var elementUpdate = self._hashForUpdates[targetId];\n if (elementUpdate) {\n elementUpdate.entry.paused = false;\n }\n },\n\n /**\n * !#en Returns whether or not the target is paused.\n * !#zh 返回指定对象的定时器是否暂停了。\n * @method isTargetPaused\n * @param {Object} target\n * @return {Boolean}\n */\n isTargetPaused: function (target) {\n cc.assertID(target, 1505);\n var targetId = target._id;\n if (!targetId) {\n if (target.__instanceId) {\n cc.warnID(1513);\n targetId = target._id = target.__instanceId;\n }\n else {\n cc.errorID(1510);\n }\n }\n\n // Custom selectors\n var element = this._hashForTimers[targetId];\n if (element) {\n return element.paused;\n }\n var elementUpdate = this._hashForUpdates[targetId];\n if (elementUpdate) {\n return elementUpdate.entry.paused;\n }\n return false;\n },\n};\n\n/**\n * !#en Priority level reserved for system services.\n * !#zh 系统服务的优先级。\n * @property PRIORITY_SYSTEM\n * @type {Number}\n * @static\n */\ncc.Scheduler.PRIORITY_SYSTEM = 1 << 31;\n\n/**\n * !#en Minimum priority level for user scheduling.\n * !#zh 用户调度最低优先级。\n * @property PRIORITY_NON_SYSTEM\n * @type {Number}\n * @static\n */\ncc.Scheduler.PRIORITY_NON_SYSTEM = cc.Scheduler.PRIORITY_SYSTEM + 1;\n\nmodule.exports = cc.Scheduler;\n","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst preprocess = require('./preprocess');\nconst fetch = require('./fetch');\nconst Cache = require('./cache');\nconst helper = require('./helper');\nconst releaseManager = require('./releaseManager');\nconst dependUtil = require('./depend-util');\nconst load = require('./load');\nconst Pipeline = require('./pipeline');\nconst Task = require('./task');\nconst RequestItem = require('./request-item');\nconst downloader = require('./downloader');\nconst parser = require('./parser');\nconst packManager = require('./pack-manager');\nconst Bundle = require('./bundle');\nconst builtins = require('./builtins');\nconst factory = require('./factory');\nconst { parse, combine } = require('./urlTransformer');\nconst { parseParameters, asyncify } = require('./utilities');\nconst { assets, files, parsed, pipeline, transformPipeline, fetchPipeline, RequestType, bundles, BuiltinBundleName } = require('./shared');\n\n\n/**\n * @module cc\n */\n/**\n * !#en\n * This module controls asset's behaviors and information, include loading, releasing etc. it is a singleton\n * All member can be accessed with `cc.assetManager`.\n * \n * !#zh\n * 此模块管理资源的行为和信息,包括加载,释放等,这是一个单例,所有成员能够通过 `cc.assetManager` 调用\n * \n * @class AssetManager\n */\nfunction AssetManager () {\n\n this._preprocessPipe = preprocess;\n\n this._fetchPipe = fetch;\n\n this._loadPipe = load;\n\n /**\n * !#en \n * Normal loading pipeline\n * \n * !#zh\n * 正常加载管线\n * \n * @property pipeline\n * @type {Pipeline}\n */\n this.pipeline = pipeline.append(preprocess).append(load);\n \n /**\n * !#en \n * Fetching pipeline\n * \n * !#zh\n * 下载管线\n * \n * @property fetchPipeline\n * @type {Pipeline}\n */\n this.fetchPipeline = fetchPipeline.append(preprocess).append(fetch);\n\n /**\n * !#en \n * Url transformer\n * \n * !#zh\n * Url 转换器\n * \n * @property transformPipeline\n * @type {Pipeline}\n */\n this.transformPipeline = transformPipeline.append(parse).append(combine);\n\n\n /**\n * !#en \n * The collection of bundle which is already loaded, you can remove cache with {{#crossLink \"AssetManager/removeBundle:method\"}}{{/crossLink}}\n * \n * !#zh\n * 已加载 bundle 的集合, 你能通过 {{#crossLink \"AssetManager/removeBundle:method\"}}{{/crossLink}} 来移除缓存\n * \n * @property bundles\n * @type {Cache}\n * @typescript\n * bundles: AssetManager.Cache\n */\n this.bundles = bundles;\n\n /**\n * !#en \n * The collection of asset which is already loaded, you can remove cache with {{#crossLink \"AssetManager/releaseAsset:method\"}}{{/crossLink}}\n * \n * !#zh\n * 已加载资源的集合, 你能通过 {{#crossLink \"AssetManager/releaseAsset:method\"}}{{/crossLink}} 来移除缓存\n * \n * @property assets\n * @type {Cache}\n * @typescript\n * assets: AssetManager.Cache\n */\n this.assets = assets;\n \n this._files = files;\n \n this._parsed = parsed;\n\n this.generalImportBase = '';\n\n this.generalNativeBase = '';\n\n /**\n * !#en \n * Manage relationship between asset and its dependencies\n * \n * !#zh\n * 管理资源依赖关系\n * \n * @property dependUtil\n * @type {DependUtil}\n */\n this.dependUtil = dependUtil;\n\n this._releaseManager = releaseManager;\n\n /**\n * !#en \n * Whether or not cache the loaded asset\n * \n * !#zh\n * 是否缓存已加载的资源\n * \n * @property cacheAsset\n * @type {boolean}\n */\n this.cacheAsset = true;\n\n /**\n * !#en \n * Whether or not load asset forcely, if it is true, asset will be loaded regardless of error\n * \n * !#zh\n * 是否强制加载资源, 如果为 true ,加载资源将会忽略报错\n * \n * @property force\n * @type {boolean}\n */\n this.force = false;\n\n /**\n * !#en \n * Some useful function\n * \n * !#zh\n * 一些有用的方法\n * \n * @property utils\n * @type {Helper}\n */\n this.utils = helper;\n\n /**\n * !#en \n * Manage all downloading task\n * \n * !#zh\n * 管理所有下载任务\n * \n * @property downloader\n * @type {Downloader}\n */\n this.downloader = downloader; \n\n /**\n * !#en \n * Manage all parsing task\n * \n * !#zh\n * 管理所有解析任务\n * \n * @property parser\n * @type {Parser}\n */\n this.parser = parser;\n\n /**\n * !#en \n * Manage internal asset\n * \n * !#zh\n * 管理内置资源\n * \n * @property builtins\n * @type {Builtins}\n */\n this.builtins = builtins;\n\n /**\n * !#en \n * Manage all packed asset\n * \n * !#zh\n * 管理所有合并后的资源\n * \n * @property packManager\n * @type {PackManager}\n */\n this.packManager = packManager;\n\n this.factory = factory;\n\n /**\n * !#en \n * Cache manager is a module which controls all caches downloaded from server in non-web platform.\n * \n * !#zh\n * 缓存管理器是一个模块,在非 WEB 平台上,用于管理所有从服务器上下载下来的缓存\n * \n * @property cacheManager\n * @type {cc.AssetManager.CacheManager}\n * @typescript\n * cacheManager: cc.AssetManager.CacheManager|null\n */\n this.cacheManager = null;\n\n /**\n * !#en \n * The preset of options\n * \n * !#zh\n * 可选参数的预设集\n * \n * @property presets\n * @type {Object}\n * @typescript\n * presets: Record>\n */\n this.presets = {\n 'default': {\n priority: 0,\n },\n\n 'preload': {\n maxConcurrency: 2, \n maxRequestsPerFrame: 2,\n priority: -1,\n },\n\n 'scene': {\n maxConcurrency: 8, \n maxRequestsPerFrame: 8,\n priority: 1,\n },\n\n 'bundle': {\n maxConcurrency: 8, \n maxRequestsPerFrame: 8,\n priority: 2,\n },\n\n 'remote': {\n maxRetryCount: 4\n },\n\n 'script': {\n maxConcurrency: 1024,\n maxRequestsPerFrame: 1024,\n priority: 2\n }\n }\n\n}\n\nAssetManager.Pipeline = Pipeline;\nAssetManager.Task = Task;\nAssetManager.Cache = Cache;\nAssetManager.RequestItem = RequestItem;\nAssetManager.Bundle = Bundle;\nAssetManager.BuiltinBundleName = BuiltinBundleName;\n\nAssetManager.prototype = {\n\n constructor: AssetManager,\n\n /**\n * !#en \n * The builtin 'main' bundle\n * \n * !#zh\n * 内置 main 包\n * \n * @property main\n * @readonly\n * @type {Bundle}\n */\n get main () {\n return bundles.get(BuiltinBundleName.MAIN);\n },\n\n /**\n * !#en \n * The builtin 'resources' bundle\n * \n * !#zh\n * 内置 resources 包\n * \n * @property resources\n * @readonly\n * @type {Bundle}\n */\n get resources () {\n return bundles.get(BuiltinBundleName.RESOURCES);\n },\n\n /**\n * !#en \n * The builtin 'internal' bundle\n * \n * !#zh\n * 内置 internal 包\n * \n * @property internal\n * @readonly\n * @type {Bundle}\n */\n get internal () {\n return bundles.get(BuiltinBundleName.INTERNAL);\n },\n\n /**\n * !#en\n * Initialize assetManager with options\n * \n * !#zh\n * 初始化资源管理器\n * \n * @method init\n * @param {Object} options \n * \n * @typescript\n * init(options: Record): void\n */\n init (options) {\n options = options || Object.create(null);\n this._files.clear();\n this._parsed.clear();\n this._releaseManager.init();\n this.assets.clear();\n this.bundles.clear();\n this.packManager.init();\n this.downloader.init(options.bundleVers, options.server);\n this.parser.init();\n this.dependUtil.init();\n this.generalImportBase = options.importBase;\n this.generalNativeBase = options.nativeBase;\n },\n\n /**\n * !#en \n * Get the bundle which has been loaded\n * \n * !#zh\n * 获取已加载的分包\n * \n * @method getBundle\n * @param {String} name - The name of bundle \n * @return {Bundle} - The loaded bundle\n * \n * @example\n * // ${project}/assets/test1\n * cc.assetManager.getBundle('test1');\n * \n * cc.assetManager.getBundle('resources');\n * \n * @typescript\n * getBundle (name: string): cc.AssetManager.Bundle\n */\n getBundle (name) {\n return bundles.get(name);\n },\n\n /**\n * !#en \n * Remove this bundle. NOTE: The asset whthin this bundle will not be released automatically, you can call {{#crossLink \"Bundle/releaseAll:method\"}}{{/crossLink}} manually before remove it if you need\n * \n * !#zh \n * 移除此包, 注意:这个包内的资源不会自动释放, 如果需要的话你可以在摧毁之前手动调用 {{#crossLink \"Bundle/releaseAll:method\"}}{{/crossLink}} 进行释放\n *\n * @method removeBundle\n * @param {Bundle} bundle - The bundle to be removed \n * \n * @typescript\n * removeBundle(bundle: cc.AssetManager.Bundle): void\n */\n removeBundle (bundle) {\n bundle._destroy();\n bundles.remove(bundle.name);\n },\n\n /**\n * !#en\n * General interface used to load assets with a progression callback and a complete callback. You can achieve almost all effect you want with combination of `requests` and `options`.\n * It is highly recommended that you use more simple API, such as `load`, `loadDir` etc. Every custom parameter in `options` will be distribute to each of `requests`. \n * if request already has same one, the parameter in request will be given priority. Besides, if request has dependencies, `options` will distribute to dependencies too.\n * Every custom parameter in `requests` will be tranfered to handler of `downloader` and `parser` as `options`. \n * You can register you own handler downloader or parser to collect these custom parameters for some effect.\n * \n * Reserved Keyword: `uuid`, `url`, `path`, `dir`, `scene`, `type`, `priority`, `preset`, `audioLoadMode`, `ext`, `bundle`, `onFileProgress`, `maxConcurrency`, `maxRequestsPerFrame`\n * `maxRetryCount`, `version`, `responseType`, `withCredentials`, `mimeType`, `timeout`, `header`, `reload`, `cacheAsset`, `cacheEnabled`,\n * Please DO NOT use these words as custom options!\n * \n * !#zh\n * 通用加载资源接口,可传入进度回调以及完成回调,通过组合 `request` 和 `options` 参数,几乎可以实现和扩展所有想要的加载效果。非常建议你使用更简单的API,例如 `load`、`loadDir` 等。\n * `options` 中的自定义参数将会分发到 `requests` 的每一项中,如果request中已存在同名的参数则以 `requests` 中为准,同时如果有其他\n * 依赖资源,则 `options` 中的参数会继续向依赖项中分发。request中的自定义参数都会以 `options` 形式传入加载流程中的 `downloader`, `parser` 的方法中, 你可以\n * 扩展 `downloader`, `parser` 收集参数完成想实现的效果。\n * \n * 保留关键字: `uuid`, `url`, `path`, `dir`, `scene`, `type`, `priority`, `preset`, `audioLoadMode`, `ext`, `bundle`, `onFileProgress`, `maxConcurrency`, `maxRequestsPerFrame`\n * `maxRetryCount`, `version`, `responseType`, `withCredentials`, `mimeType`, `timeout`, `header`, `reload`, `cacheAsset`, `cacheEnabled`,\n * 请不要使用这些字段为自定义参数!\n * \n * @method loadAny\n * @param {string|string[]|Object|Object[]} requests - The request you want to load\n * @param {Object} [options] - Optional parameters\n * @param {Function} [onProgress] - Callback invoked when progression change\n * @param {Number} onProgress.finished - The number of the items that are already completed\n * @param {Number} onProgress.total - The total number of the items\n * @param {RequestItem} onProgress.item - The current request item\n * @param {Function} [onComplete] - Callback invoked when finish loading\n * @param {Error} onComplete.err - The error occured in loading process.\n * @param {Object} onComplete.data - The loaded content\n * \n * @example\n * cc.assetManager.loadAny({url: 'http://example.com/a.png'}, (err, img) => cc.log(img));\n * cc.assetManager.loadAny(['60sVXiTH1D/6Aft4MRt9VC'], (err, assets) => cc.log(assets));\n * cc.assetManager.loadAny([{ uuid: '0cbZa5Y71CTZAccaIFluuZ'}, {url: 'http://example.com/a.png'}], (err, assets) => cc.log(assets));\n * cc.assetManager.downloader.register('.asset', (url, options, onComplete) => {\n * url += '?userName=' + options.userName + \"&password=\" + options.password;\n * cc.assetManager.downloader.downloadFile(url, null, onComplete);\n * });\n * cc.assetManager.parser.register('.asset', (file, options, onComplete) => {\n * var json = JSON.parse(file);\n * var skin = json[options.skin];\n * var model = json[options.model];\n * onComplete(null, {skin, model});\n * });\n * cc.assetManager.loadAny({ url: 'http://example.com/my.asset', skin: 'xxx', model: 'xxx', userName: 'xxx', password: 'xxx' });\n * \n * @typescript\n * loadAny(requests: string | string[] | Record | Record[], options: Record, onProgress: (finished: number, total: number, item: cc.AssetManager.RequestItem) => void, onComplete: (err: Error, data: any) => void): void\n * loadAny(requests: string | string[] | Record | Record[], onProgress: (finished: number, total: number, item: cc.AssetManager.RequestItem) => void, onComplete: (err: Error, data: any) => void): void\n * loadAny(requests: string | string[] | Record | Record[], options: Record, onComplete: (err: Error, data: any) => void): void\n * loadAny(requests: string | string[] | Record | Record[], onComplete: (err: Error, data: any) => void): void\n * loadAny(requests: string | string[] | Record | Record[], options: Record): void\n * loadAny(requests: string | string[] | Record | Record[]): void\n */\n loadAny (requests, options, onProgress, onComplete) {\n var { options, onProgress, onComplete } = parseParameters(options, onProgress, onComplete);\n \n options.preset = options.preset || 'default';\n requests = Array.isArray(requests) ? requests.concat() : requests;\n let task = new Task({input: requests, onProgress, onComplete: asyncify(onComplete), options});\n pipeline.async(task);\n },\n\n /**\n * !#en\n * General interface used to preload assets with a progression callback and a complete callback.It is highly recommended that you use more simple API, such as `preloadRes`, `preloadResDir` etc.\n * Everything about preload is just likes `cc.assetManager.loadAny`, the difference is `cc.assetManager.preloadAny` will only download asset but not parse asset. You need to invoke `cc.assetManager.loadAny(preloadTask)` \n * to finish loading asset\n * \n * !#zh\n * 通用预加载资源接口,可传入进度回调以及完成回调,非常建议你使用更简单的 API ,例如 `preloadRes`, `preloadResDir` 等。`preloadAny` 和 `loadAny` 几乎一样,区别在于 `preloadAny` 只会下载资源,不会去解析资源,你需要调用 `cc.assetManager.loadAny(preloadTask)`\n * 来完成资源加载。\n * \n * @method preloadAny\n * @param {string|string[]|Object|Object[]} requests - The request you want to preload\n * @param {Object} [options] - Optional parameters\n * @param {Function} [onProgress] - Callback invoked when progression change\n * @param {Number} onProgress.finished - The number of the items that are already completed\n * @param {Number} onProgress.total - The total number of the items\n * @param {RequestItem} onProgress.item - The current request item\n * @param {Function} [onComplete] - Callback invoked when finish preloading\n * @param {Error} onComplete.err - The error occured in preloading process.\n * @param {RequestItem[]} onComplete.items - The preloaded content\n * \n * @example\n * cc.assetManager.preloadAny('0cbZa5Y71CTZAccaIFluuZ', (err) => cc.assetManager.loadAny('0cbZa5Y71CTZAccaIFluuZ'));\n * \n * @typescript\n * preloadAny(requests: string | string[] | Record | Record[], options: Record, onProgress: (finished: number, total: number, item: cc.AssetManager.RequestItem) => void, onComplete: (err: Error, items: cc.AssetManager.RequestItem[]) => void): void\n * preloadAny(requests: string | string[] | Record | Record[], onProgress: (finished: number, total: number, item: cc.AssetManager.RequestItem) => void, onComplete: (err: Error, items: cc.AssetManager.RequestItem[]) => void): void\n * preloadAny(requests: string | string[] | Record | Record[], options: Record, onComplete: (err: Error, items: cc.AssetManager.RequestItem[]) => void): void\n * preloadAny(requests: string | string[] | Record | Record[], onComplete: (err: Error, items: cc.AssetManager.RequestItem[]) => void): void\n * preloadAny(requests: string | string[] | Record | Record[], options: Record): void\n * preloadAny(requests: string | string[] | Record | Record[]): void\n */\n preloadAny (requests, options, onProgress, onComplete) {\n var { options, onProgress, onComplete } = parseParameters(options, onProgress, onComplete);\n \n options.preset = options.preset || 'preload';\n requests = Array.isArray(requests) ? requests.concat() : requests;\n var task = new Task({input: requests, onProgress, onComplete: asyncify(onComplete), options});\n fetchPipeline.async(task);\n },\n\n /**\n * !#en\n * Load native file of asset, if you check the option 'Async Load Assets', you may need to load native file with this before you use the asset\n * \n * !#zh\n * 加载资源的原生文件,如果你勾选了'延迟加载资源'选项,你可能需要在使用资源之前调用此方法来加载原生文件\n * \n * @method postLoadNative\n * @param {Asset} asset - The asset\n * @param {Object} [options] - Some optional parameters\n * @param {Function} [onComplete] - Callback invoked when finish loading\n * @param {Error} onComplete.err - The error occured in loading process.\n * \n * @example\n * cc.assetManager.postLoadNative(texture, (err) => console.log(err));\n * \n * @typescript\n * postLoadNative(asset: cc.Asset, options: Record, onComplete: (err: Error) => void): void\n * postLoadNative(asset: cc.Asset, onComplete: (err: Error) => void): void\n * postLoadNative(asset: cc.Asset, options: Record): void\n * postLoadNative(asset: cc.Asset): void\n */\n postLoadNative (asset, options, onComplete) {\n if (!(asset instanceof cc.Asset)) throw new Error('input is not asset');\n var { options, onComplete } = parseParameters(options, undefined, onComplete);\n\n if (!asset._native || asset._nativeAsset) {\n return asyncify(onComplete)(null);\n }\n\n var depend = dependUtil.getNativeDep(asset._uuid);\n if (depend) {\n if (!bundles.has(depend.bundle)) {\n var bundle = bundles.find(function (bundle) {\n return bundle.getAssetInfo(asset._uuid);\n });\n if (bundle) {\n depend.bundle = bundle.name;\n }\n }\n \n this.loadAny(depend, options, function (err, native) {\n if (!err) {\n if (asset.isValid && !asset._nativeAsset) {\n asset._nativeAsset = native\n }\n }\n else {\n cc.error(err.message, err.stack);\n }\n onComplete && onComplete(err);\n });\n }\n },\n\n /**\n * !#en\n * Load remote asset with url, such as audio, image, text and so on.\n * \n * !#zh\n * 使用 url 加载远程资源,例如音频,图片,文本等等。\n * \n * @method loadRemote\n * @param {string} url - The url of asset\n * @param {Object} [options] - Some optional parameters\n * @param {cc.AudioClip.LoadMode} [options.audioLoadMode] - Indicate which mode audio you want to load\n * @param {string} [options.ext] - If the url does not have a extension name, you can specify one manually.\n * @param {Function} [onComplete] - Callback invoked when finish loading\n * @param {Error} onComplete.err - The error occured in loading process.\n * @param {Asset} onComplete.asset - The loaded texture\n * \n * @example\n * cc.assetManager.loadRemote('http://www.cloud.com/test1.jpg', (err, texture) => console.log(err));\n * cc.assetManager.loadRemote('http://www.cloud.com/test2.mp3', (err, audioClip) => console.log(err));\n * cc.assetManager.loadRemote('http://www.cloud.com/test3', { ext: '.png' }, (err, texture) => console.log(err));\n * \n * @typescript\n * loadRemote(url: string, options: Record, onComplete: (err: Error, asset: T) => void): void\n * loadRemote(url: string, onComplete: (err: Error, asset: T) => void): void\n * loadRemote(url: string, options: Record): void\n * loadRemote(url: string): void\n */\n loadRemote (url, options, onComplete) {\n var { options, onComplete } = parseParameters(options, undefined, onComplete);\n\n if (this.assets.has(url)) {\n return asyncify(onComplete)(null, this.assets.get(url));\n }\n\n options.__isNative__ = true;\n options.preset = options.preset || 'remote';\n this.loadAny({url}, options, null, function (err, data) {\n if (err) {\n cc.error(err.message, err.stack);\n onComplete && onComplete(err, null);\n }\n else {\n factory.create(url, data, options.ext || cc.path.extname(url), options, function (err, out) {\n onComplete && onComplete(err, out);\n });\n }\n });\n },\n\n /**\n * !#en\n * Load script \n * \n * !#zh\n * 加载脚本\n * \n * @method loadScript\n * @param {string|string[]} url - Url of the script\n * @param {Object} [options] - Some optional paramters\n * @param {boolean} [options.async] - Indicate whether or not loading process should be async\n * @param {Function} [onComplete] - Callback when script loaded or failed\n * @param {Error} onComplete.err - The occurred error, null indicetes success\n * \n * @example\n * loadScript('http://localhost:8080/index.js', null, (err) => console.log(err));\n * \n * @typescript\n * loadScript(url: string|string[], options: Record, onComplete: (err: Error) => void): void\n * loadScript(url: string|string[], onComplete: (err: Error) => void): void\n * loadScript(url: string|string[], options: Record): void\n * loadScript(url: string|string[]): void\n */\n loadScript (url, options, onComplete) {\n var { options, onComplete } = parseParameters(options, undefined, onComplete);\n options.__requestType__ = RequestType.URL;\n options.preset = options.preset || 'script';\n this.loadAny(url, options, onComplete);\n },\n\n /**\n * !#en\n * load bundle\n * \n * !#zh\n * 加载资源包\n * \n * @method loadBundle\n * @param {string} nameOrUrl - The name or root path of bundle\n * @param {Object} [options] - Some optional paramter, same like downloader.downloadFile\n * @param {string} [options.version] - The version of this bundle, you can check config.json in this bundle\n * @param {Function} [onComplete] - Callback when bundle loaded or failed\n * @param {Error} onComplete.err - The occurred error, null indicetes success\n * @param {Bundle} onComplete.bundle - The loaded bundle\n * \n * @example\n * loadBundle('http://localhost:8080/test', null, (err, bundle) => console.log(err));\n * \n * @typescript\n * loadBundle(nameOrUrl: string, options: Record, onComplete: (err: Error, bundle: cc.AssetManager.Bundle) => void): void\n * loadBundle(nameOrUrl: string, onComplete: (err: Error, bundle: cc.AssetManager.Bundle) => void): void\n * loadBundle(nameOrUrl: string, options: Record): void\n * loadBundle(nameOrUrl: string): void\n */\n loadBundle (nameOrUrl, options, onComplete) {\n var { options, onComplete } = parseParameters(options, undefined, onComplete);\n\n let bundleName = cc.path.basename(nameOrUrl);\n\n if (this.bundles.has(bundleName)) {\n return asyncify(onComplete)(null, this.getBundle(bundleName));\n }\n\n options.preset = options.preset || 'bundle';\n options.ext = 'bundle';\n this.loadRemote(nameOrUrl, options, onComplete);\n },\n\n /**\n * !#en\n * Release asset and it's dependencies.\n * This method will not only remove the cache of the asset in assetManager, but also clean up its content.\n * For example, if you release a texture, the texture asset and its gl texture data will be freed up.\n * Notice, this method may cause the texture to be unusable, if there are still other nodes use the same texture, they may turn to black and report gl errors.\n * \n * !#zh\n * 释放资源以及其依赖资源, 这个方法不仅会从 assetManager 中删除资源的缓存引用,还会清理它的资源内容。\n * 比如说,当你释放一个 texture 资源,这个 texture 和它的 gl 贴图数据都会被释放。\n * 注意,这个函数可能会导致资源贴图或资源所依赖的贴图不可用,如果场景中存在节点仍然依赖同样的贴图,它们可能会变黑并报 GL 错误。\n *\n * @method releaseAsset\n * @param {Asset} asset - The asset to be released\n * \n * @example\n * // release a texture which is no longer need\n * cc.assetManager.releaseAsset(texture);\n *\n * @typescript\n * releaseAsset(asset: cc.Asset): void\n */\n releaseAsset (asset) {\n releaseManager.tryRelease(asset, true);\n },\n\n /**\n * !#en \n * Release all unused assets. Refer to {{#crossLink \"AssetManager/releaseAsset:method\"}}{{/crossLink}} for detailed informations.\n * \n * !#zh \n * 释放所有没有用到的资源。详细信息请参考 {{#crossLink \"AssetManager/releaseAsset:method\"}}{{/crossLink}}\n *\n * @method releaseUnusedAssets\n * @private\n * \n * @typescript\n * releaseUnusedAssets(): void\n */\n releaseUnusedAssets () {\n assets.forEach(function (asset) {\n releaseManager.tryRelease(asset);\n });\n },\n\n /**\n * !#en \n * Release all assets. Refer to {{#crossLink \"AssetManager/releaseAsset:method\"}}{{/crossLink}} for detailed informations.\n * \n * !#zh \n * 释放所有资源。详细信息请参考 {{#crossLink \"AssetManager/releaseAsset:method\"}}{{/crossLink}}\n *\n * @method releaseAll\n * \n * @typescript\n * releaseAll(): void\n */\n releaseAll () {\n assets.forEach(function (asset) {\n releaseManager.tryRelease(asset, true);\n });\n },\n\n _transform (input, options) {\n var subTask = Task.create({input, options});\n var urls = [];\n try {\n var result = transformPipeline.sync(subTask);\n for (var i = 0, l = result.length; i < l; i++) {\n var item = result[i];\n var url = item.url;\n item.recycle();\n urls.push(url);\n }\n }\n catch (e) {\n for (var i = 0, l = subTask.output.length; i < l; i++) {\n subTask.output[i].recycle();\n }\n cc.error(e.message, e.stack);\n }\n subTask.recycle();\n return urls.length > 1 ? urls : urls[0];\n }\n};\n\ncc.AssetManager = AssetManager;\n/**\n * @module cc\n */\n/**\n * @property assetManager\n * @type {AssetManager}\n */\ncc.assetManager = new AssetManager();\n\nObject.defineProperty(cc, 'resources', {\n /**\n * !#en\n * cc.resources is a bundle and controls all asset under assets/resources\n * \n * !#zh\n * cc.resources 是一个 bundle,用于管理所有在 assets/resources 下的资源\n * \n * @property resources\n * @readonly\n * @type {AssetManager.Bundle}\n */\n get () {\n return bundles.get(BuiltinBundleName.RESOURCES);\n }\n});\n\n\nmodule.exports = cc.assetManager;\n\n/**\n * !#en\n * This module controls asset's behaviors and information, include loading, releasing etc. \n * All member can be accessed with `cc.assetManager`. All class or enum can be accessed with `cc.AssetManager`\n * \n * !#zh\n * 此模块管理资源的行为和信息,包括加载,释放等,所有成员能够通过 `cc.assetManager` 调用. 所有类型或枚举能通过 `cc.AssetManager` 访问\n * \n * @module cc.AssetManager\n */","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nconst Cache = require('./cache');\nconst releaseManager = require('./releaseManager');\nconst { BuiltinBundleName } = require('./shared'); \n\n/**\n * @module cc.AssetManager\n */\n/**\n * !#en\n * This module contains the builtin asset, it's a singleton, all member can be accessed with `cc.assetManager.builtins` \n * \n * !#zh\n * 此模块包含内建资源,这是一个单例,所有成员能通过 `cc.assetManager.builtins` 访问\n * \n * @class Builtins\n */\nvar builtins = {\n \n _assets: new Cache({ material: new Cache(), effect: new Cache() }), // builtin assets\n\n _loadBuiltins (name, cb) {\n let dirname = name + 's';\n let builtin = this._assets.get(name);\n return cc.assetManager.internal.loadDir(dirname, null, null, (err, assets) => {\n if (err) {\n cc.error(err.message, err.stack);\n }\n else {\n for (let i = 0; i < assets.length; i++) {\n var asset = assets[i];\n builtin.add(asset.name, asset.addRef());\n }\n }\n\n cb();\n });\n },\n\n /**\n * !#en\n * Initialize\n * \n * !#zh\n * 初始化 \n * \n * @method init\n * @param {Function} cb - Callback when finish loading built-in assets\n * \n * @typescript\n * init (cb: () => void): void\n */\n init (cb) {\n this.clear();\n if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS || !cc.assetManager.bundles.has(BuiltinBundleName.INTERNAL)) {\n return cb && cb();\n }\n\n this._loadBuiltins('effect', () => {\n this._loadBuiltins('material', () => {\n this._loadBuiltinsSP(cb);\n });\n });\n },\n\n _loadBuiltinsSP(cb) {\n cc.sp.MAX_MULTITEXTURE_NUM = 8;\n // cc.renderer.device.caps.maxTextureUnits\n\n this._loadMultiEffect('multi-2d-sprite', (effect) => {\n cc.sp.multi2dSpriteEffectAsset = effect;\n effect.addRef();\n cc.sp.inited = true;\n cc.sp.multiBatcher.init();\n if (cc.dynamicAtlasManager.maxAtlasCount === -1) cc.dynamicAtlasManager.maxAtlasCount = Math.max(0, cc.sp.MAX_MULTITEXTURE_NUM - cc.sp.charAtlasAutoBatchCount);\n cb();\n });\n },\n\n _loadMultiEffect(name, cb) {\n if (CC_EDITOR) {\n cc.assetManager.loadAny(Editor.assetdb.remote.urlToUuid('db://service-pack-resources/sp/effects/' + name + '.effect'), function (err, effect) {\n if (err) {\n return Editor.error(err);\n } else {\n cb(effect);\n }\n });\n } else {\n cc.assetManager.loadBundle('sp', (err, bundle) => {\n if (err) {\n cc.error(err);\n } else {\n bundle.load('effects/' + name, cc.EffectAsset, (err, effect) => {\n if (err) {\n cc.error(err);\n } else {\n cb(effect);\n }\n });\n }\n });\n }\n },\n\n /**\n * !#en\n * Get the built-in asset using specific type and name.\n * \n * !#zh\n * 通过特定的类型和名称获取内建资源\n * \n * @method getBuiltin\n * @param {string} [type] - The type of asset, such as `effect`\n * @param {string} [name] - The name of asset, such as `phong`\n * @return {Asset|Cache} Builtin-assets\n * \n * @example\n * cc.assetManaer.builtins.getBuiltin('effect', 'phone');\n * \n * @typescript\n * getBuiltin(type?: string, name?: string): cc.Asset | Cache\n */\n getBuiltin (type, name) {\n if (arguments.length === 0) return this._assets;\n else if (arguments.length === 1) return this._assets.get(type);\n else return this._assets.get(type).get(name);\n },\n\n /**\n * !#en\n * Clear all builtin assets\n * \n * !#zh\n * 清空所有内置资源\n * \n * @method clear\n * \n * @typescript\n * clear(): void\n */\n clear () {\n this._assets.forEach(function (assets) {\n assets.forEach(function (asset) {\n releaseManager.tryRelease(asset, true);\n });\n assets.clear();\n });\n }\n}\n\nmodule.exports = builtins;\n","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nconst Config = require('./config');\nconst releaseManager = require('./releaseManager');\nconst { parseParameters, parseLoadResArgs } = require('./utilities');\nconst { RequestType, assets, bundles } = require('./shared');\n\n/**\n * @module cc.AssetManager\n */\n\n/**\n * !#en\n * A bundle contains an amount of assets(includes scene), you can load, preload, release asset which is in this bundle\n * \n * !#zh\n * 一个包含一定数量资源(包括场景)的包,你可以加载,预加载,释放此包内的资源\n * \n * @class Bundle\n */\nfunction Bundle () {\n this._config = new Config();\n}\n\nBundle.prototype = {\n \n /**\n * !#en\n * Create a bundle\n * \n * !#zh\n * 创建一个 bundle\n * \n * @method constructor\n * \n * @typescript\n * constructor()\n */\n constructor: Bundle,\n\n /**\n * !#en\n * The name of this bundle\n * \n * !#zh\n * 此 bundle 的名称\n * \n * @property name\n * @type {string}\n */\n get name () {\n return this._config.name;\n },\n\n /**\n * !#en\n * The dependency of this bundle\n * \n * !#zh\n * 此 bundle 的依赖\n * \n * @property deps\n * @type {string[]}\n */\n get deps () {\n return this._config.deps;\n },\n\n /**\n * !#en\n * The root path of this bundle, such like 'http://example.com/bundle1'\n * \n * !#zh\n * 此 bundle 的根路径, 例如 'http://example.com/bundle1'\n * \n * @property base\n * @type {string}\n */\n get base () {\n return this._config.base;\n },\n\n /**\n * !#en\n * Get asset's info using path, only valid when asset is in bundle folder.\n * \n * !#zh\n * 使用 path 获取资源的配置信息\n * \n * @method getInfoWithPath\n * @param {string} path - The relative path of asset, such as 'images/a'\n * @param {Function} [type] - The constructor of asset, such as `cc.Texture2D`\n * @returns {Object} The asset info \n * \n * @example\n * var info = bundle.getInfoWithPath('image/a', cc.Texture2D);\n * \n * @typescript\n * getInfoWithPath (path: string, type?: typeof cc.Asset): Record\n */\n getInfoWithPath (path, type) {\n return this._config.getInfoWithPath(path, type);\n },\n\n /**\n * !#en\n * Get all asset's info within specific folder\n * \n * !#zh\n * 获取在某个指定文件夹下的所有资源信息\n * \n * @method getDirWithPath\n * @param {string} path - The relative path of folder, such as 'images'\n * @param {Function} [type] - The constructor should be used to filter paths\n * @param {Array} [out] - The output array\n * @returns {Object[]} Infos\n * \n * @example \n * var infos = [];\n * bundle.getDirWithPath('images', cc.Texture2D, infos);\n * \n * @typescript\n * getDirWithPath (path: string, type: typeof cc.Asset, out: Array>): Array>\n * getDirWithPath (path: string, type: typeof cc.Asset): Array>\n * getDirWithPath (path: string): Array>\n */\n getDirWithPath (path, type, out) {\n return this._config.getDirWithPath(path, type, out);\n },\n\n /**\n * !#en\n * Get asset's info with uuid\n * \n * !#zh\n * 通过 uuid 获取资源信息\n * \n * @method getAssetInfo\n * @param {string} uuid - The asset's uuid\n * @returns {Object} info \n * \n * @example\n * var info = bundle.getAssetInfo('fcmR3XADNLgJ1ByKhqcC5Z');\n * \n * @typescript\n * getAssetInfo (uuid: string): Record\n */\n getAssetInfo (uuid) {\n return this._config.getAssetInfo(uuid);\n },\n\n /**\n * !#en\n * Get scene'info with name\n * \n * !#zh\n * 通过场景名获取场景信息\n * \n * @method getSceneInfo\n * @param {string} name - The name of scene\n * @return {Object} info\n * \n * @example\n * var info = bundle.getSceneInfo('first.fire');\n * \n * @typescript\n * getSceneInfo(name: string): Record\n */\n getSceneInfo (name) {\n return this._config.getSceneInfo(name);\n },\n\n /**\n * !#en\n * Initialize this bundle with options\n * \n * !#zh\n * 初始化此 bundle\n * \n * @method init\n * @param {Object} options \n * \n * @typescript\n * init(options: Record): void\n */\n init (options) {\n this._config.init(options);\n bundles.add(options.name, this);\n },\n\n /**\n * !#en\n * Load the asset within this bundle by the path which is relative to bundle's path\n * \n * !#zh\n * 通过相对路径加载分包中的资源。路径是相对分包文件夹路径的相对路径\n *\n * @method load\n * @param {String|String[]} paths - Paths of the target assets.The path is relative to the bundle's folder, extensions must be omitted.\n * @param {Function} [type] - Only asset of type will be loaded if this argument is supplied.\n * @param {Function} [onProgress] - Callback invoked when progression change.\n * @param {Number} onProgress.finish - The number of the items that are already completed.\n * @param {Number} onProgress.total - The total number of the items.\n * @param {RequestItem} onProgress.item - The finished request item.\n * @param {Function} [onComplete] - Callback invoked when all assets loaded.\n * @param {Error} onComplete.error - The error info or null if loaded successfully.\n * @param {Asset|Asset[]} onComplete.assets - The loaded assets.\n *\n * @example\n * // load the texture (${project}/assets/resources/textures/background.jpg) from resources\n * cc.resources.load('textures/background', cc.Texture2D, (err, texture) => console.log(err));\n * \n * // load the audio (${project}/assets/resources/music/hit.mp3) from resources\n * cc.resources.load('music/hit', cc.AudioClip, (err, audio) => console.log(err));\n * \n * // load the prefab (${project}/assets/bundle1/misc/character/cocos) from bundle1 folder\n * bundle1.load('misc/character/cocos', cc.Prefab, (err, prefab) => console.log(err));\n *\n * // load the sprite frame (${project}/assets/some/xxx/bundle2/imgs/cocos.png) from bundle2 folder\n * bundle2.load('imgs/cocos', cc.SpriteFrame, null, (err, spriteFrame) => console.log(err));\n * \n * @typescript\n * load(paths: string, type: typeof cc.Asset, onProgress: (finish: number, total: number, item: RequestItem) => void, onComplete: (error: Error, assets: T) => void): void\n * load(paths: string[], type: typeof cc.Asset, onProgress: (finish: number, total: number, item: RequestItem) => void, onComplete: (error: Error, assets: Array) => void): void\n * load(paths: string, onProgress: (finish: number, total: number, item: RequestItem) => void, onComplete: (error: Error, assets: T) => void): void\n * load(paths: string[], onProgress: (finish: number, total: number, item: RequestItem) => void, onComplete: (error: Error, assets: Array) => void): void\n * load(paths: string, type: typeof cc.Asset, onComplete?: (error: Error, assets: T) => void): void\n * load(paths: string[], type: typeof cc.Asset, onComplete?: (error: Error, assets: Array) => void): void\n * load(paths: string, onComplete?: (error: Error, assets: T) => void): void\n * load(paths: string[], onComplete?: (error: Error, assets: Array) => void): void\n */\n load (paths, type, onProgress, onComplete) {\n var { type, onProgress, onComplete } = parseLoadResArgs(type, onProgress, onComplete);\n cc.assetManager.loadAny(paths, { __requestType__: RequestType.PATH, type: type, bundle: this.name, __outputAsArray__: Array.isArray(paths) }, onProgress, onComplete);\n },\n\n /**\n * !#en\n * Preload the asset within this bundle by the path which is relative to bundle's path. \n * After calling this method, you still need to finish loading by calling `Bundle.load`.\n * It will be totally fine to call `Bundle.load` at any time even if the preloading is not\n * yet finished\n * \n * !#zh\n * 通过相对路径预加载分包中的资源。路径是相对分包文件夹路径的相对路径。调用完后,你仍然需要通过 `Bundle.load` 来完成加载。\n * 就算预加载还没完成,你也可以直接调用 `Bundle.load`。\n *\n * @method preload\n * @param {String|String[]} paths - Paths of the target asset.The path is relative to bundle folder, extensions must be omitted.\n * @param {Function} [type] - Only asset of type will be loaded if this argument is supplied.\n * @param {Function} [onProgress] - Callback invoked when progression change.\n * @param {Number} onProgress.finish - The number of the items that are already completed.\n * @param {Number} onProgress.total - The total number of the items.\n * @param {RequestItem} onProgress.item - The finished request item.\n * @param {Function} [onComplete] - Callback invoked when the resource loaded.\n * @param {Error} onComplete.error - The error info or null if loaded successfully.\n * @param {RequestItem[]} onComplete.items - The preloaded items.\n * \n * @example\n * // preload the texture (${project}/assets/resources/textures/background.jpg) from resources\n * cc.resources.preload('textures/background', cc.Texture2D);\n * \n * // preload the audio (${project}/assets/resources/music/hit.mp3) from resources\n * cc.resources.preload('music/hit', cc.AudioClip);\n * // wait for while\n * cc.resources.load('music/hit', cc.AudioClip, (err, audioClip) => {});\n * \n * * // preload the prefab (${project}/assets/bundle1/misc/character/cocos) from bundle1 folder\n * bundle1.preload('misc/character/cocos', cc.Prefab);\n *\n * // load the sprite frame of (${project}/assets/bundle2/imgs/cocos.png) from bundle2 folder\n * bundle2.preload('imgs/cocos', cc.SpriteFrame);\n * // wait for while\n * bundle2.load('imgs/cocos', cc.SpriteFrame, (err, spriteFrame) => {});\n * \n * @typescript\n * preload(paths: string|string[], type: typeof cc.Asset, onProgress: (finish: number, total: number, item: RequestItem) => void, onComplete: (error: Error, items: RequestItem[]) => void): void\n * preload(paths: string|string[], onProgress: (finish: number, total: number, item: RequestItem) => void, onComplete: (error: Error, items: RequestItem[]) => void): void\n * preload(paths: string|string[], type: typeof cc.Asset, onComplete: (error: Error, items: RequestItem[]) => void): void\n * preload(paths: string|string[], type: typeof cc.Asset): void\n * preload(paths: string|string[], onComplete: (error: Error, items: RequestItem[]) => void): void\n * preload(paths: string|string[]): void\n */\n preload (paths, type, onProgress, onComplete) {\n var { type, onProgress, onComplete } = parseLoadResArgs(type, onProgress, onComplete);\n cc.assetManager.preloadAny(paths, { __requestType__: RequestType.PATH, type: type, bundle: this.name }, onProgress, onComplete);\n },\n\n /**\n * !#en\n * Load all assets under a folder inside the bundle folder.
\n *
\n * Note: All asset paths in Creator use forward slashes, paths using backslashes will not work.\n * \n * !#zh\n * 加载目标文件夹中的所有资源, 注意:路径中只能使用斜杠,反斜杠将停止工作\n *\n * @method loadDir\n * @param {string} dir - path of the target folder.The path is relative to the bundle folder, extensions must be omitted.\n * @param {Function} [type] - Only asset of type will be loaded if this argument is supplied.\n * @param {Function} [onProgress] - Callback invoked when progression change.\n * @param {Number} onProgress.finish - The number of the items that are already completed.\n * @param {Number} onProgress.total - The total number of the items.\n * @param {Object} onProgress.item - The latest request item\n * @param {Function} [onComplete] - A callback which is called when all assets have been loaded, or an error occurs.\n * @param {Error} onComplete.error - If one of the asset failed, the complete callback is immediately called with the error. If all assets are loaded successfully, error will be null.\n * @param {Asset[]|Asset} onComplete.assets - An array of all loaded assets.\n * \n * @example\n * // load all audios (resources/audios/) \n * cc.resources.loadDir('audios', cc.AudioClip, (err, audios) => {});\n *\n * // load all textures in \"resources/imgs/\"\n * cc.resources.loadDir('imgs', cc.Texture2D, null, function (err, textures) {\n * var texture1 = textures[0];\n * var texture2 = textures[1];\n * });\n * \n * // load all prefabs (${project}/assets/bundle1/misc/characters/) from bundle1 folder\n * bundle1.loadDir('misc/characters', cc.Prefab, (err, prefabs) => console.log(err));\n *\n * // load all sprite frame (${project}/assets/some/xxx/bundle2/skills/) from bundle2 folder\n * bundle2.loadDir('skills', cc.SpriteFrame, null, (err, spriteFrames) => console.log(err));\n *\n * @typescript\n * loadDir(dir: string, type: typeof cc.Asset, onProgress: (finish: number, total: number, item: RequestItem) => void, onComplete: (error: Error, assets: Array) => void): void\n * loadDir(dir: string, onProgress: (finish: number, total: number, item: RequestItem) => void, onComplete: (error: Error, assets: Array) => void): void\n * loadDir(dir: string, type: typeof cc.Asset, onComplete: (error: Error, assets: Array) => void): void\n * loadDir(dir: string, type: typeof cc.Asset): void\n * loadDir(dir: string, onComplete: (error: Error, assets: Array) => void): void\n * loadDir(dir: string): void\n */\n loadDir (dir, type, onProgress, onComplete) {\n var { type, onProgress, onComplete } = parseLoadResArgs(type, onProgress, onComplete);\n cc.assetManager.loadAny(dir, { __requestType__: RequestType.DIR, type: type, bundle: this.name, __outputAsArray__: true }, onProgress, onComplete);\n },\n\n /**\n * !#en\n * Preload all assets under a folder inside the bundle folder.
After calling this method, you still need to finish loading by calling `Bundle.loadDir`.\n * It will be totally fine to call `Bundle.loadDir` at any time even if the preloading is not yet finished\n * \n * !#zh\n * 预加载目标文件夹中的所有资源。调用完后,你仍然需要通过 `Bundle.loadDir` 来完成加载。\n * 就算预加载还没完成,你也可以直接调用 `Bundle.loadDir`。\n *\n * @method preloadDir\n * @param {string} dir - path of the target folder.The path is relative to the bundle folder, extensions must be omitted.\n * @param {Function} [type] - Only asset of type will be preloaded if this argument is supplied.\n * @param {Function} [onProgress] - Callback invoked when progression change.\n * @param {Number} onProgress.finish - The number of the items that are already completed.\n * @param {Number} onProgress.total - The total number of the items.\n * @param {Object} onProgress.item - The latest request item\n * @param {Function} [onComplete] - A callback which is called when all assets have been loaded, or an error occurs.\n * @param {Error} onComplete.error - If one of the asset failed, the complete callback is immediately called with the error. If all assets are preloaded successfully, error will be null.\n * @param {RequestItem[]} onComplete.items - An array of all preloaded items.\n * \n * @example\n * // preload all audios (resources/audios/) \n * cc.resources.preloadDir('audios', cc.AudioClip);\n *\n * // preload all textures in \"resources/imgs/\"\n * cc.resources.preloadDir('imgs', cc.Texture2D);\n * // wait for while\n * cc.resources.loadDir('imgs', cc.Texture2D, (err, textures) => {});\n * \n * // preload all prefabs (${project}/assets/bundle1/misc/characters/) from bundle1 folder\n * bundle1.preloadDir('misc/characters', cc.Prefab);\n *\n * // preload all sprite frame (${project}/assets/some/xxx/bundle2/skills/) from bundle2 folder\n * bundle2.preloadDir('skills', cc.SpriteFrame);\n * // wait for while\n * bundle2.loadDir('skills', cc.SpriteFrame, (err, spriteFrames) => {});\n * \n * @typescript\n * preloadDir(dir: string, type: typeof cc.Asset, onProgress: (finish: number, total: number, item: RequestItem) => void, onComplete: (error: Error, items: RequestItem[]) => void): void\n * preloadDir(dir: string, onProgress: (finish: number, total: number, item: RequestItem) => void, onComplete: (error: Error, items: RequestItem[]) => void): void\n * preloadDir(dir: string, type: typeof cc.Asset, onComplete: (error: Error, items: RequestItem[]) => void): void\n * preloadDir(dir: string, type: typeof cc.Asset): void\n * preloadDir(dir: string, onComplete: (error: Error, items: RequestItem[]) => void): void\n * preloadDir(dir: string): void\n */\n preloadDir (dir, type, onProgress, onComplete) {\n var { type, onProgress, onComplete } = parseLoadResArgs(type, onProgress, onComplete);\n cc.assetManager.preloadAny(dir, { __requestType__: RequestType.DIR, type: type, bundle: this.name }, onProgress, onComplete);\n },\n\n /**\n * !#en \n * Loads the scene within this bundle by its name. \n * \n * !#zh \n * 通过场景名称加载分包中的场景。\n *\n * @method loadScene\n * @param {String} sceneName - The name of the scene to load.\n * @param {Object} [options] - Some optional parameters\n * @param {Function} [onProgress] - Callback invoked when progression change.\n * @param {Number} onProgress.finish - The number of the items that are already completed.\n * @param {Number} onProgress.total - The total number of the items.\n * @param {Object} onProgress.item - The latest request item\n * @param {Function} [onComplete] - callback, will be called after scene launched.\n * @param {Error} onComplete.err - The occurred error, null indicetes success\n * @param {SceneAsset} onComplete.sceneAsset - The scene asset\n * \n * @example\n * bundle1.loadScene('first', (err, sceneAsset) => cc.director.runScene(sceneAsset));\n * \n * @typescript\n * loadScene(sceneName: string, options: Record, onProgress: (finish: number, total: number, item: RequestItem) => void, onComplete: (error: Error, sceneAsset: cc.SceneAsset) => void): void\n * loadScene(sceneName: string, onProgress: (finish: number, total: number, item: RequestItem) => void, onComplete: (error: Error, sceneAsset: cc.SceneAsset) => void): void\n * loadScene(sceneName: string, options: Record, onComplete: (error: Error, sceneAsset: cc.SceneAsset) => void): void\n * loadScene(sceneName: string, onComplete: (error: Error, sceneAsset: cc.SceneAsset) => void): void\n * loadScene(sceneName: string, options: Record): void\n * loadScene(sceneName: string): void\n */\n loadScene (sceneName, options, onProgress, onComplete) {\n var { options, onProgress, onComplete } = parseParameters(options, onProgress, onComplete);\n \n options.preset = options.preset || 'scene';\n options.bundle = this.name;\n cc.assetManager.loadAny({ 'scene': sceneName }, options, onProgress, function (err, sceneAsset) {\n if (err) {\n cc.error(err.message, err.stack);\n onComplete && onComplete(err);\n }\n else if (sceneAsset instanceof cc.SceneAsset) {\n var scene = sceneAsset.scene;\n scene._id = sceneAsset._uuid;\n scene._name = sceneAsset._name;\n onComplete && onComplete(null, sceneAsset);\n }\n else {\n onComplete && onComplete(new Error('The asset ' + sceneAsset._uuid + ' is not a scene'));\n }\n });\n },\n\n /**\n * !#en\n * Preloads the scene within this bundle by its name. After calling this method, you still need to finish loading by calling `Bundle.loadScene` or `cc.director.loadScene`.\n * It will be totally fine to call `Bundle.loadDir` at any time even if the preloading is not yet finished\n * \n * !#zh \n * 通过场景名称预加载分包中的场景.调用完后,你仍然需要通过 `Bundle.loadScene` 或 `cc.director.loadScene` 来完成加载。\n * 就算预加载还没完成,你也可以直接调用 `Bundle.loadScene` 或 `cc.director.loadScene`。\n *\n * @method preloadScene\n * @param {String} sceneName - The name of the scene to preload.\n * @param {Object} [options] - Some optional parameters\n * @param {Function} [onProgress] - callback, will be called when the load progression change.\n * @param {Number} onProgress.finish - The number of the items that are already completed\n * @param {Number} onProgress.total - The total number of the items\n * @param {RequestItem} onProgress.item The latest request item\n * @param {Function} [onComplete] - callback, will be called after scene loaded.\n * @param {Error} onComplete.error - null or the error object.\n * \n * @example\n * bundle1.preloadScene('first');\n * // wait for a while\n * bundle1.loadScene('first', (err, scene) => cc.director.runScene(scene));\n * \n * @typescript\n * preloadScene(sceneName: string, options: Record, onProgress: (finish: number, total: number, item: RequestItem) => void, onComplete: (error: Error) => void): void\n * preloadScene(sceneName: string, onProgress: (finish: number, total: number, item: RequestItem) => void, onComplete: (error: Error) => void): void\n * preloadScene(sceneName: string, options: Record, onComplete: (error: Error) => void): void\n * preloadScene(sceneName: string, onComplete: (error: Error) => void): void\n * preloadScene(sceneName: string, options: Record): void\n * preloadScene(sceneName: string): void\n */\n preloadScene (sceneName, options, onProgress, onComplete) {\n var { options, onProgress, onComplete } = parseParameters(options, onProgress, onComplete);\n\n options.bundle = this.name;\n cc.assetManager.preloadAny({'scene': sceneName}, options, onProgress, function (err) {\n if (err) {\n cc.errorID(1210, sceneName, err.message);\n }\n onComplete && onComplete(err);\n });\n },\n\n /**\n * !#en\n * Get asset within this bundle by path and type.
\n * After you load asset with {{#crossLink \"Bundle/load:method\"}}{{/crossLink}} or {{#crossLink \"Bundle/loadDir:method\"}}{{/crossLink}},\n * you can acquire them by passing the path to this API.\n * \n * !#zh\n * 通过路径与类型获取资源。在你使用 {{#crossLink \"Bundle/load:method\"}}{{/crossLink}} 或者 {{#crossLink \"Bundle/loadDir:method\"}}{{/crossLink}} 之后,\n * 你能通过传路径通过这个 API 获取到这些资源。\n * \n * @method get\n * @param {String} path - The path of asset\n * @param {Function} [type] - Only asset of type will be returned if this argument is supplied.\n * @returns {Asset} \n * \n * @example\n * bundle1.get('music/hit', cc.AudioClip);\n * \n * @typescript\n * get (path: string, type?: typeof cc.Asset): T\n */\n get (path, type) {\n var info = this.getInfoWithPath(path, type);\n return assets.get(info && info.uuid);\n },\n\n /**\n * !#en \n * Release the asset loaded by {{#crossLink \"Bundle/load:method\"}}{{/crossLink}} or {{#crossLink \"Bundle/loadDir:method\"}}{{/crossLink}} and it's dependencies. \n * Refer to {{#crossLink \"AssetManager/releaseAsset:method\"}}{{/crossLink}} for detailed informations.\n * \n * !#zh \n * 释放通过 {{#crossLink \"Bundle/load:method\"}}{{/crossLink}} 或者 {{#crossLink \"Bundle/loadDir:method\"}}{{/crossLink}} 加载的资源。详细信息请参考 {{#crossLink \"AssetManager/releaseAsset:method\"}}{{/crossLink}}\n * \n * @method release\n * @param {String} path - The path of asset\n * @param {Function} [type] - Only asset of type will be released if this argument is supplied.\n * \n * @example\n * // release a texture which is no longer need\n * bundle1.release('misc/character/cocos');\n *\n * @typescript\n * release(path: string, type: typeof cc.Asset): void\n * release(path: string): void\n */\n release (path, type) {\n releaseManager.tryRelease(this.get(path, type), true);\n },\n\n /**\n * !#en \n * Release all unused assets within this bundle. Refer to {{#crossLink \"AssetManager/releaseAll:method\"}}{{/crossLink}} for detailed informations.\n * \n * !#zh \n * 释放此包中的所有没有用到的资源。详细信息请参考 {{#crossLink \"AssetManager/releaseAll:method\"}}{{/crossLink}}\n *\n * @method releaseUnusedAssets\n * @private\n * \n * @example\n * // release all unused asset within bundle1\n * bundle1.releaseUnusedAssets();\n * \n * @typescript\n * releaseUnusedAssets(): void\n */\n releaseUnusedAssets () {\n var self = this;\n assets.forEach(function (asset) {\n let info = self.getAssetInfo(asset._uuid);\n if (info && !info.redirect) {\n releaseManager.tryRelease(asset);\n }\n });\n },\n\n /**\n * !#en \n * Release all assets within this bundle. Refer to {{#crossLink \"AssetManager/releaseAll:method\"}}{{/crossLink}} for detailed informations.\n * \n * !#zh \n * 释放此包中的所有资源。详细信息请参考 {{#crossLink \"AssetManager/releaseAll:method\"}}{{/crossLink}}\n *\n * @method releaseAll\n * \n * @example\n * // release all asset within bundle1\n * bundle1.releaseAll();\n * \n * @typescript\n * releaseAll(): void\n */\n releaseAll () {\n var self = this;\n assets.forEach(function (asset) {\n let info = self.getAssetInfo(asset._uuid);\n if (info && !info.redirect) {\n releaseManager.tryRelease(asset, true);\n }\n });\n },\n\n _destroy () {\n this._config.destroy();\n }\n\n};\n\nmodule.exports = Bundle;","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n/**\n * @module cc.AssetManager\n */\n\nconst js = require('../platform/js');\n/**\n * !#en\n * use to cache something\n * \n * !#zh\n * 用于缓存某些内容\n * \n * @class Cache\n * @typescript Cache\n */\nfunction Cache (map) {\n if (map) {\n this._map = map;\n this._count = Object.keys(map).length;\n }\n else {\n this._map = js.createMap(true);\n this._count = 0;\n }\n}\n\nCache.prototype = {\n \n /**\n * !#en\n * Create a cache\n * \n * !#zh\n * 创建一个 cache\n * \n * @method constructor\n * @param {Object} [map] - An object used to initialize \n * \n * @typescript\n * constructor(map?: Record)\n */\n constructor: Cache,\n\n /**\n * !#en\n * Add Key-Value to cache\n * \n * !#zh\n * 增加键值对到缓存中\n * \n * @method add\n * @param {String} key - The key\n * @param {*} val - The value\n * @returns {*} The value\n * \n * @example\n * var cache = new Cache();\n * cache.add('test', null);\n * \n * @typescript\n * add(key: string, val: T): T\n */\n add (key, val) { \n if (!(key in this._map)) this._count++;\n return this._map[key] = val;\n },\n\n /**\n * !#en\n * Get the cached content by key\n * \n * !#zh\n * 通过 key 获取对应的 value\n * \n * @method get\n * @param {string} key - The key\n * @returns {*} The corresponding content\n * \n * @example\n * var cache = new Cache();\n * var test = cache.get('test');\n * \n * @typescript\n * get(key: string): T\n */\n get (key) {\n return this._map[key];\n },\n\n /**\n * !#en\n * Check whether or not content exists by key\n * \n * !#zh\n * 通过 Key 判断是否存在对应的内容\n * \n * @method has\n * @param {string} key - The key\n * @returns {boolean} True indecates that content of the key exists\n * \n * @example\n * var cache = new Cache();\n * var exist = cache.has('test');\n * \n * @typescript\n * has(key: string): boolean\n */\n has (key) {\n return key in this._map;\n },\n\n /**\n * !#en\n * Remove the cached content by key\n * \n * !#zh\n * 通过 Key 移除对应的内容\n * \n * @method remove\n * @param {string} key - The key\n * @returns {*} The removed content\n * \n * @example\n * var cache = new Cache();\n * var content = cache.remove('test');\n * \n * @typescript\n * remove(key: string): T\n */\n remove (key) {\n var out = this._map[key];\n if (key in this._map) {\n delete this._map[key];\n this._count--;\n }\n return out;\n },\n\n /**\n * !#en\n * Clear all content\n * \n * !#zh\n * 清除所有内容\n * \n * @method clear\n * \n * @example\n * var cache = new Cache();\n * cache.clear();\n * \n * @typescript\n * clear():void\n */\n clear () {\n if (this._count !== 0) {\n this._map = js.createMap(true);\n this._count = 0;\n }\n },\n\n /**\n * !#en\n * Enumerate all content and invoke function\n * \n * !#zh\n * 枚举所有内容并执行方法\n * \n * @method forEach\n * @param {Function} func - Function to be invoked\n * @param {*} func.val - The value \n * @param {String} func.key - The corresponding key\n * \n * @example\n * var cache = new Cache();\n * cache.forEach((val, key) => console.log(key));\n * \n * @typescript\n * forEach(func: (val: T, key: string) => void): void\n */\n forEach (func) {\n for (var key in this._map) {\n func(this._map[key], key);\n }\n },\n\n /**\n * !#en\n * Enumerate all content to find one element which can fulfill condition\n * \n * !#zh\n * 枚举所有内容,找到一个可以满足条件的元素\n * \n * @method find\n * @param {Function} predicate - The condition\n * @returns {*} content\n * \n * @example\n * var cache = new Cache();\n * var val = cache.find((val, key) => key === 'test');\n * \n * @typescript\n * find(predicate: (val: T, key: string) => boolean): T\n */\n find (predicate) {\n for (var key in this._map) {\n if (predicate(this._map[key], key)) return this._map[key];\n }\n return null;\n },\n\n /**\n * !#en\n * The count of cached content\n * \n * !#zh\n * 缓存数量\n * \n * @property count\n * @type {Number}\n */\n get count () {\n return this._count;\n },\n\n /**\n * !#en\n * Destroy this cache\n * \n * !#zh\n * 销毁这个 cache\n * \n * @method destroy\n * \n * @typescript\n * destroy(): void\n */\n destroy () {\n this._map = null;\n }\n};\n\nmodule.exports = Cache;","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nconst js = require('../platform/js');\nconst Cache = require('./cache');\nconst { normalize } = require('./helper');\nconst { processOptions } = require('./utilities');\n\nfunction Config () {\n\n this.name = '';\n\n this.base = '';\n\n this.importBase = '';\n\n this.nativeBase = '';\n\n this.deps = null;\n\n this.assetInfos = new Cache();\n\n this.scenes = new Cache();\n\n this.paths = new Cache();\n}\n\nConfig.prototype = {\n\n constructor: Config,\n\n init: function (options) {\n processOptions(options);\n\n this.importBase = options.importBase || '';\n this.nativeBase = options.nativeBase || '';\n this.base = options.base || '';\n this.name = options.name || '';\n this.deps = options.deps || [];\n // init\n this._initUuid(options.uuids);\n this._initPath(options.paths);\n this._initScene(options.scenes);\n this._initPackage(options.packs);\n this._initVersion(options.versions);\n this._initRedirect(options.redirect);\n },\n\n _initUuid: function (uuidList) {\n if (!uuidList) return;\n this.assetInfos.clear();\n for (var i = 0, l = uuidList.length; i < l; i++) {\n var uuid = uuidList[i];\n this.assetInfos.add(uuid, {uuid});\n }\n },\n\n _initPath: function (pathList) {\n if (!pathList) return;\n var paths = this.paths;\n paths.clear();\n for (var uuid in pathList) {\n var info = pathList[uuid];\n var path = info[0];\n var type = info[1];\n var isSubAsset = info.length === 3;\n\n var assetInfo = this.assetInfos.get(uuid);\n assetInfo.path = path;\n assetInfo.ctor = js._getClassById(type);\n if (paths.has(path)) {\n if (isSubAsset) {\n paths.get(path).push(assetInfo);\n }\n else {\n paths.get(path).splice(0, 0, assetInfo);\n } \n }\n else {\n paths.add(path, [assetInfo]);\n }\n }\n },\n\n _initScene: function (sceneList) {\n if (!sceneList) return;\n var scenes = this.scenes;\n scenes.clear();\n var assetInfos = this.assetInfos;\n for (var sceneName in sceneList) {\n var uuid = sceneList[sceneName];\n var assetInfo = assetInfos.get(uuid);\n assetInfo.url = sceneName;\n scenes.add(sceneName, assetInfo);\n }\n },\n\n _initPackage: function (packageList) {\n if (!packageList) return;\n var assetInfos = this.assetInfos;\n for (var packUuid in packageList) {\n var uuids = packageList[packUuid];\n var pack = {uuid: packUuid, packs: uuids, ext:'.json'};\n assetInfos.add(packUuid, pack);\n\n for (var i = 0, l = uuids.length; i < l; i++) {\n var uuid = uuids[i];\n var assetInfo = assetInfos.get(uuid);\n var assetPacks = assetInfo.packs;\n if (assetPacks) {\n if (l === 1) {\n assetPacks.splice(0, 0, pack);\n }\n else {\n assetPacks.push(pack);\n }\n }\n else {\n assetInfo.packs = [pack];\n }\n }\n }\n },\n\n _initVersion: function (versions) {\n if (!versions) return;\n var assetInfos = this.assetInfos;\n var entries = versions.import;\n if (entries) {\n for (var i = 0, l = entries.length; i < l; i += 2) {\n var uuid = entries[i];\n var assetInfo = assetInfos.get(uuid);\n assetInfo.ver = entries[i + 1];\n }\n }\n entries = versions.native;\n if (entries) {\n for (var i = 0, l = entries.length; i < l; i += 2) {\n var uuid = entries[i];\n var assetInfo = assetInfos.get(uuid);\n assetInfo.nativeVer = entries[i + 1];\n }\n }\n },\n\n _initRedirect: function (redirect) {\n if (!redirect) return;\n var assetInfos = this.assetInfos;\n for (var i = 0, l = redirect.length; i < l; i += 2) {\n var uuid = redirect[i];\n var assetInfo = assetInfos.get(uuid);\n assetInfo.redirect = redirect[i + 1];\n }\n },\n\n getInfoWithPath: function (path, type) {\n\n if (!path) {\n return null;\n }\n path = normalize(path);\n var items = this.paths.get(path);\n if (items) {\n if (type) {\n for (var i = 0, l = items.length; i < l; i++) {\n var assetInfo = items[i];\n if (js.isChildClassOf(assetInfo.ctor, type)) {\n return assetInfo;\n }\n }\n }\n else {\n return items[0];\n }\n }\n return null;\n },\n\n getDirWithPath: function (path, type, out) {\n path = normalize(path);\n if (path[path.length - 1] === '/') {\n path = path.slice(0, -1);\n }\n\n var infos = out || [];\n function isMatchByWord (path, test) {\n if (path.length > test.length) {\n var nextAscii = path.charCodeAt(test.length);\n return nextAscii === 47; // '/'\n }\n return true;\n }\n this.paths.forEach(function (items, p) {\n if ((p.startsWith(path) && isMatchByWord(p, path)) || !path) {\n for (var i = 0, l = items.length; i < l; i++) {\n var entry = items[i];\n if (!type || js.isChildClassOf(entry.ctor, type)) {\n infos.push(entry);\n }\n }\n }\n });\n\n return infos;\n },\n\n getAssetInfo: function (uuid) {\n return this.assetInfos.get(uuid);\n },\n\n getSceneInfo: function (name) {\n if (!name.endsWith('.fire')) {\n name += '.fire';\n }\n if (name[0] !== '/' && !name.startsWith('db://')) {\n name = '/' + name; // 使用全名匹配\n }\n // search scene\n var info = this.scenes.find(function (val, key) {\n return key.endsWith(name);\n });\n return info;\n },\n\n destroy: function () {\n this.paths.destroy();\n this.scenes.destroy();\n this.assetInfos.destroy();\n }\n};\n\nif (CC_TEST) {\n cc._Test.Config = Config;\n}\n\nmodule.exports = Config;","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nconst Cache = require('./cache');\nconst deserialize = require('./deserialize');\nconst { files, parsed } = require('./shared');\nimport { hasNativeDep , getDependUuidList } from '../platform/deserialize-compiled';\nimport deserializeForCompiled from '../platform/deserialize-compiled';\n\n/**\n * @module cc.AssetManager\n */\n/**\n * !#en\n * Control asset's dependency list, it is a singleton. All member can be accessed with `cc.assetManager.dependUtil`\n * \n * !#zh\n * 控制资源的依赖列表,这是一个单例, 所有成员能通过 `cc.assetManager.dependUtil` 访问\n * \n * @class DependUtil\n */\nvar dependUtil = {\n _depends: new Cache(),\n\n init () {\n this._depends.clear();\n },\n\n /**\n * !#en\n * Get asset's native dependency. For example, Texture's native dependency is image.\n * \n * !#zh\n * 获取资源的原生依赖,例如 Texture 的原生依赖是图片\n * \n * @method getNativeDep\n * @param {string} uuid - asset's uuid\n * @returns {Object} native dependency\n * \n * @example\n * var dep = dependUtil.getNativeDep('fcmR3XADNLgJ1ByKhqcC5Z');\n * \n * @typescript\n * getNativeDep(uuid: string): Record\n */\n getNativeDep (uuid) {\n let depend = this._depends.get(uuid);\n if (depend) return depend.nativeDep && Object.assign({}, depend.nativeDep);\n return null;\n },\n\n /**\n * !#en\n * Get asset's direct referencing non-native dependency list. For example, Material's non-native dependencies are Texture.\n * \n * !#zh\n * 获取资源直接引用的非原生依赖列表,例如,材质的非原生依赖是 Texture\n * \n * @method getDeps\n * @param {string} uuid - asset's uuid\n * @returns {string[]} direct referencing non-native dependency list\n * \n * @example\n * var deps = dependUtil.getDeps('fcmR3XADNLgJ1ByKhqcC5Z');\n * \n * @typescript\n * getDeps(uuid: string): string[]\n */\n getDeps (uuid) {\n if (this._depends.has(uuid)) {\n return this._depends.get(uuid).deps;\n }\n return [];\n },\n \n /**\n * !#en\n * Get non-native dependency list of the loaded asset, include indirect reference.\n * The returned array stores the dependencies with their uuid, after retrieve dependencies,\n * \n * !#zh\n * 获取某个已经加载好的资源的所有非原生依赖资源列表,包括间接引用的资源,并保存在数组中返回。\n * 返回的数组将仅保存依赖资源的 uuid。\n *\n * @method getDependsRecursively\n * @param {String} uuid - The asset's uuid\n * @returns {string[]} non-native dependency list\n * \n * @example\n * var deps = dependUtil.getDepsRecursively('fcmR3XADNLgJ1ByKhqcC5Z');\n * \n * @typescript\n * getDepsRecursively(uuid: string): string[]\n */\n getDepsRecursively (uuid) {\n var exclude = Object.create(null), depends = [];\n this._descend(uuid, exclude, depends);\n return depends;\n },\n\n _descend (uuid, exclude, depends) {\n var deps = this.getDeps(uuid);\n for (var i = 0; i < deps.length; i++) {\n var depend = deps[i];\n if ( !exclude[depend] ) {\n exclude[depend] = true;\n depends.push(depend);\n this._descend(depend, exclude, depends);\n }\n }\n },\n\n remove (uuid) {\n this._depends.remove(uuid);\n },\n \n /**\n * !#en\n * Extract dependency list from serialized data or asset and then store in cache.\n * \n * !#zh\n * 从序列化数据或资源中提取出依赖列表,并且存储在缓存中。\n * \n * @param {string} uuid - The uuid of serialized data or asset\n * @param {Object} json - Serialized data or asset\n * @returns {Object} dependency list, include non-native and native dependency\n * \n * @example\n * downloader.downloadFile('test.json', {responseType: 'json'}, null, (err, file) => {\n * var dependencies = parse('fcmR3XADNLgJ1ByKhqcC5Z', file);\n * });\n * \n * @typescript\n * parse(uuid: string, json: any): { deps?: string[], nativeDep?: any }\n */\n parse (uuid, json) {\n var out = null;\n if (Array.isArray(json) || json.__type__) {\n\n if (out = this._depends.get(uuid)) return out;\n\n if (Array.isArray(json) && (!(CC_BUILD || deserializeForCompiled.isCompiledJson(json)) || !hasNativeDep(json))) {\n out = {\n deps: this._parseDepsFromJson(json),\n };\n }\n else {\n try {\n var asset = deserialize(json);\n out = this._parseDepsFromAsset(asset);\n out.nativeDep && (out.nativeDep.uuid = uuid);\n parsed.add(uuid + '@import', asset);\n }\n catch (e) {\n files.remove(uuid + '@import');\n out = { deps: [] };\n }\n }\n }\n // get deps from an existing asset \n else {\n if (!CC_EDITOR && (out = this._depends.get(uuid)) && out.parsedFromExistAsset) return out;\n out = this._parseDepsFromAsset(json);\n }\n // cache dependency list\n this._depends.add(uuid, out);\n return out;\n },\n\n _parseDepsFromAsset: function (asset) {\n var out = {\n deps: [],\n parsedFromExistAsset: true,\n preventPreloadNativeObject: asset.constructor.preventPreloadNativeObject,\n preventDeferredLoadDependents: asset.constructor.preventDeferredLoadDependents\n };\n let deps = asset.__depends__;\n for (var i = 0, l = deps.length; i < l; i++) {\n var dep = deps[i].uuid;\n out.deps.push(dep);\n }\n \n if (asset.__nativeDepend__) {\n out.nativeDep = asset._nativeDep;\n }\n\n return out;\n },\n\n _parseDepsFromJson: CC_EDITOR || CC_PREVIEW ? function (json) {\n\n if (deserializeForCompiled.isCompiledJson(json)) {\n let depends = getDependUuidList(json);\n depends.forEach((uuid, index) => depends[index] = cc.assetManager.utils.decodeUuid(uuid));\n return depends;\n }\n \n var depends = [];\n function parseDependRecursively (data, out) {\n if (!data || typeof data !== 'object' || data.__id__) return;\n var uuid = data.__uuid__;\n if (Array.isArray(data)) {\n for (let i = 0, l = data.length; i < l; i++) {\n parseDependRecursively(data[i], out);\n }\n }\n else if (uuid) { \n out.push(cc.assetManager.utils.decodeUuid(uuid));\n }\n else {\n for (var prop in data) {\n parseDependRecursively(data[prop], out);\n }\n }\n }\n parseDependRecursively(json, depends);\n return depends;\n } : function (json) {\n let depends = getDependUuidList(json);\n depends.forEach((uuid, index) => depends[index] = cc.assetManager.utils.decodeUuid(uuid));\n return depends;\n }\n};\n\nmodule.exports = dependUtil;","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst js = require('../platform/js');\nrequire('../CCDirector');\nconst utilities = require('./utilities');\nconst dependUtil = require('./depend-util');\nconst releaseManager = require('./releaseManager');\nconst downloader = require('./downloader');\nconst factory = require('./factory');\nconst helper = require('./helper');\n\nconst ImageFmts = ['.png', '.jpg', '.bmp', '.jpeg', '.gif', '.ico', '.tiff', '.webp', '.image', '.pvr', '.pkm'];\nconst AudioFmts = ['.mp3', '.ogg', '.wav', '.m4a'];\n\nfunction GetTrue () { return true; }\n\nconst md5Pipe = {\n transformURL (url) {\n let uuid = helper.getUuidFromURL(url);\n if (!uuid) { return url; }\n let bundle = cc.assetManager.bundles.find((b) => {\n return !!b.getAssetInfo(uuid);\n });\n if (!bundle) { return url; }\n let hashValue = '';\n let info = bundle.getAssetInfo(uuid);\n if (url.startsWith(bundle.base + bundle._config.nativeBase)) {\n hashValue = info.nativeVer || '';\n }\n else {\n hashValue = info.ver || '';\n }\n if (!hashValue || url.indexOf(hashValue) !== -1) { return url; }\n let hashPatchInFolder = false;\n if (cc.path.extname(url) === '.ttf') {\n hashPatchInFolder = true;\n }\n if (hashPatchInFolder) {\n let dirname = cc.path.dirname(url);\n let basename = cc.path.basename(url);\n url = `${dirname}.${hashValue}/${basename}`;\n } else {\n url = url.replace(/.*[/\\\\][0-9a-fA-F]{2}[/\\\\]([0-9a-fA-F-]{8,})/, (match, uuid) => {\n return match + '.' + hashValue;\n });\n }\n \n return url;\n },\n};\n\n/**\n * `cc.loader` is deprecated, please backup your project and upgrade to {{#crossLink \"AssetManager\"}}{{/crossLink}}\n *\n * @class loader\n * @static\n * @deprecated cc.loader is deprecated, please backup your project and upgrade to cc.assetManager\n */\nconst loader = {\n /**\n * `cc.loader.onProgress` is deprecated, please transfer onProgress to API as a parameter\n * @property onProgress\n * @deprecated cc.loader.onProgress is deprecated, please transfer onProgress to API as a parameter\n */\n onProgress: null,\n _autoReleaseSetting: Object.create(null),\n\n get _cache () {\n return cc.assetManager.assets._map;\n },\n\n /**\n * `cc.loader.load` is deprecated, please use {{#crossLink \"AssetManager/loadAny:method\"}}{{/crossLink}} instead\n *\n * @deprecated cc.loader.load is deprecated, please use cc.assetManager.loadAny instead\n *\n * @method load\n * @param {String|String[]|Object} resources - Url list in an array\n * @param {Function} [progressCallback] - Callback invoked when progression change\n * @param {Number} progressCallback.completedCount - The number of the items that are already completed\n * @param {Number} progressCallback.totalCount - The total number of the items\n * @param {Object} progressCallback.item - The latest item which flow out the pipeline\n * @param {Function} [completeCallback] - Callback invoked when all resources loaded\n * @typescript\n * load(resources: string|string[]|{uuid?: string, url?: string, type?: string}, completeCallback?: Function): void\n * load(resources: string|string[]|{uuid?: string, url?: string, type?: string}, progressCallback: (completedCount: number, totalCount: number, item: any) => void, completeCallback: Function|null): void\n */\n load (resources, progressCallback, completeCallback) {\n if (completeCallback === undefined) {\n if (progressCallback !== undefined) {\n completeCallback = progressCallback;\n progressCallback = null;\n }\n }\n resources = Array.isArray(resources) ? resources : [resources];\n for (var i = 0; i < resources.length; i++) {\n var item = resources[i];\n if (typeof item === 'string') {\n resources[i] = { url: item, __isNative__: true};\n }\n else {\n if (item.type) {\n item.ext = '.' + item.type;\n item.type = undefined;\n }\n\n if (item.url) {\n item.__isNative__ = true;\n }\n }\n }\n var images = [];\n var audios = [];\n cc.assetManager.loadAny(resources, null, (finish, total, item) => {\n if (item.content) {\n if (ImageFmts.includes(item.ext)) {\n images.push(item.content);\n }\n else if (AudioFmts.includes(item.ext)) {\n audios.push(item.content);\n }\n }\n progressCallback && progressCallback(finish, total, item);\n }, (err, native) => {\n var res = null;\n if (!err) {\n native = Array.isArray(native) ? native : [native];\n for (var i = 0; i < native.length; i++) {\n var item = native[i];\n if (!(item instanceof cc.Asset)) {\n var asset = item;\n var url = resources[i].url;\n if (images.includes(asset)) {\n factory.create(url, item, '.png', null, (err, image) => {\n asset = native[i] = image;\n });\n }\n else if (audios.includes(asset)) {\n factory.create(url, item, '.mp3', null, (err, audio) => {\n asset = native[i] = audio;\n });\n }\n cc.assetManager.assets.add(url, asset);\n }\n }\n if (native.length > 1) {\n var map = Object.create(null);\n native.forEach(function (asset) {\n map[asset._uuid] = asset;\n });\n res = { isCompleted: GetTrue, _map: map };\n }\n else {\n res = native[0];\n }\n }\n completeCallback && completeCallback(err, res);\n });\n },\n\n /**\n * `cc.loader.getXMLHttpRequest` is deprecated, please use `XMLHttpRequest` directly\n *\n * @method getXMLHttpRequest\n * @deprecated cc.loader.getXMLHttpRequest is deprecated, please use XMLHttpRequest directly\n * @returns {XMLHttpRequest}\n */\n getXMLHttpRequest () {\n return new XMLHttpRequest();\n },\n\n _parseLoadResArgs: utilities.parseLoadResArgs,\n\n /**\n * `cc.loader.getItem` is deprecated, please use `cc.assetManager.asset.get` instead\n *\n * @method getItem\n * @param {Object} id The id of the item\n * @return {Object}\n * @deprecated cc.loader.getItem is deprecated, please use cc.assetManager.assets.get instead\n */\n getItem (key) {\n return cc.assetManager.assets.has(key) ? { content: cc.assetManager.assets.get(key) } : null;\n },\n\n /**\n * `cc.loader.loadRes` is deprecated, please use {{#crossLink \"Bundle/load:method\"}}{{/crossLink}} instead\n *\n * @deprecated cc.loader.loadRes is deprecated, please use cc.resources.load instead\n * @method loadRes\n * @param {String} url - Url of the target resource.\n * The url is relative to the \"resources\" folder, extensions must be omitted.\n * @param {Function} [type] - Only asset of type will be loaded if this argument is supplied.\n * @param {Function} [progressCallback] - Callback invoked when progression change.\n * @param {Number} progressCallback.completedCount - The number of the items that are already completed.\n * @param {Number} progressCallback.totalCount - The total number of the items.\n * @param {Object} progressCallback.item - The latest item which flow out the pipeline.\n * @param {Function} [completeCallback] - Callback invoked when the resource loaded.\n * @param {Error} completeCallback.error - The error info or null if loaded successfully.\n * @param {Object} completeCallback.resource - The loaded resource if it can be found otherwise returns null.\n *\n * @typescript\n * loadRes(url: string, type: typeof cc.Asset, progressCallback: (completedCount: number, totalCount: number, item: any) => void, completeCallback: ((error: Error, resource: any) => void)|null): void\n * loadRes(url: string, type: typeof cc.Asset, completeCallback: (error: Error, resource: any) => void): void\n * loadRes(url: string, type: typeof cc.Asset): void\n * loadRes(url: string, progressCallback: (completedCount: number, totalCount: number, item: any) => void, completeCallback: ((error: Error, resource: any) => void)|null): void\n * loadRes(url: string, completeCallback: (error: Error, resource: any) => void): void\n * loadRes(url: string): void\n */\n loadRes (url, type, progressCallback, completeCallback) {\n var { type, onProgress, onComplete } = this._parseLoadResArgs(type, progressCallback, completeCallback);\n var extname = cc.path.extname(url);\n if (extname) {\n // strip extname\n url = url.slice(0, - extname.length);\n }\n cc.resources.load(url, type, onProgress, onComplete);\n },\n\n /**\n * `cc.loader.loadResArray` is deprecated, please use {{#crossLink \"Bundle/load:method\"}}{{/crossLink}} instead\n *\n * @deprecated cc.loader.loadResArray is deprecated, please use cc.resources.load instead\n * @method loadResArray\n * @param {String[]} urls - Array of URLs of the target resource.\n * The url is relative to the \"resources\" folder, extensions must be omitted.\n * @param {Function} [type] - Only asset of type will be loaded if this argument is supplied.\n * @param {Function} [progressCallback] - Callback invoked when progression change.\n * @param {Number} progressCallback.completedCount - The number of the items that are already completed.\n * @param {Number} progressCallback.totalCount - The total number of the items.\n * @param {Object} progressCallback.item - The latest item which flow out the pipeline.\n * @param {Function} [completeCallback] - A callback which is called when all assets have been loaded, or an error occurs.\n * @param {Error} completeCallback.error - If one of the asset failed, the complete callback is immediately called\n * with the error. If all assets are loaded successfully, error will be null.\n * @param {Asset[]|Array} completeCallback.assets - An array of all loaded assets.\n * If nothing to load, assets will be an empty array.\n * @typescript\n * loadResArray(url: string[], type: typeof cc.Asset, progressCallback: (completedCount: number, totalCount: number, item: any) => void, completeCallback: ((error: Error, resource: any[]) => void)|null): void\n * loadResArray(url: string[], type: typeof cc.Asset, completeCallback: (error: Error, resource: any[]) => void): void\n * loadResArray(url: string[], type: typeof cc.Asset): void\n * loadResArray(url: string[], progressCallback: (completedCount: number, totalCount: number, item: any) => void, completeCallback: ((error: Error, resource: any[]) => void)|null): void\n * loadResArray(url: string[], completeCallback: (error: Error, resource: any[]) => void): void\n * loadResArray(url: string[]): void\n * loadResArray(url: string[], type: typeof cc.Asset[]): void\n */\n loadResArray (urls, type, progressCallback, completeCallback) {\n var { type, onProgress, onComplete } = this._parseLoadResArgs(type, progressCallback, completeCallback);\n urls.forEach((url, i) => {\n var extname = cc.path.extname(url);\n if (extname) {\n // strip extname\n urls[i] = url.slice(0, - extname.length);\n }\n })\n cc.resources.load(urls, type, onProgress, onComplete);\n },\n\n /**\n * `cc.loader.loadResDir` is deprecated, please use {{#crossLink \"Bundle/loadDir:method\"}}{{/crossLink}} instead\n *\n * @deprecated cc.loader.loadResDir is deprecated, please use cc.resources.loadDir instead\n * @method loadResDir\n * @param {String} url - Url of the target folder.\n * The url is relative to the \"resources\" folder, extensions must be omitted.\n * @param {Function} [type] - Only asset of type will be loaded if this argument is supplied.\n * @param {Function} [progressCallback] - Callback invoked when progression change.\n * @param {Number} progressCallback.completedCount - The number of the items that are already completed.\n * @param {Number} progressCallback.totalCount - The total number of the items.\n * @param {Object} progressCallback.item - The latest item which flow out the pipeline.\n * @param {Function} [completeCallback] - A callback which is called when all assets have been loaded, or an error occurs.\n * @param {Error} completeCallback.error - If one of the asset failed, the complete callback is immediately called\n * with the error. If all assets are loaded successfully, error will be null.\n * @param {Asset[]|Array} completeCallback.assets - An array of all loaded assets.\n * If nothing to load, assets will be an empty array.\n * @param {String[]} completeCallback.urls - An array that lists all the URLs of loaded assets.\n *\n * @typescript\n * loadResDir(url: string, type: typeof cc.Asset, progressCallback: (completedCount: number, totalCount: number, item: any) => void, completeCallback: ((error: Error, resource: any[], urls: string[]) => void)|null): void\n * loadResDir(url: string, type: typeof cc.Asset, completeCallback: (error: Error, resource: any[], urls: string[]) => void): void\n * loadResDir(url: string, type: typeof cc.Asset): void\n * loadResDir(url: string, progressCallback: (completedCount: number, totalCount: number, item: any) => void, completeCallback: ((error: Error, resource: any[], urls: string[]) => void)|null): void\n * loadResDir(url: string, completeCallback: (error: Error, resource: any[], urls: string[]) => void): void\n * loadResDir(url: string): void\n */\n loadResDir (url, type, progressCallback, completeCallback) {\n var { type, onProgress, onComplete } = this._parseLoadResArgs(type, progressCallback, completeCallback);\n cc.resources.loadDir(url, type, onProgress, function (err, assets) {\n var urls = [];\n if (!err) {\n var infos = cc.resources.getDirWithPath(url, type);\n urls = infos.map(function (info) {\n return info.path;\n });\n }\n onComplete && onComplete(err, assets, urls);\n });\n },\n\n /**\n * `cc.loader.getRes` is deprecated, please use {{#crossLink \"Bundle/get:method\"}}{{/crossLink}} instead\n *\n * @method getRes\n * @param {String} url\n * @param {Function} [type] - Only asset of type will be returned if this argument is supplied.\n * @returns {*}\n * @deprecated cc.loader.getRes is deprecated, please use cc.resources.get instead\n */\n getRes (url, type) {\n return cc.assetManager.assets.has(url) ? cc.assetManager.assets.get(url) : cc.resources.get(url, type);\n },\n\n getResCount () {\n return cc.assetManager.assets.count;\n },\n\n /**\n * `cc.loader.getDependsRecursively` is deprecated, please use use {{#crossLink \"DependUtil/getDepsRecursively:method\"}}{{/crossLink}} instead\n *\n * @deprecated cc.loader.getDependsRecursively is deprecated, please use use cc.assetManager.dependUtil.getDepsRecursively instead\n * @method getDependsRecursively\n * @param {Asset|String} owner - The owner asset or the resource url or the asset's uuid\n * @returns {Array}\n */\n getDependsRecursively (owner) {\n if (!owner) return [];\n return dependUtil.getDepsRecursively(typeof owner === 'string' ? owner : owner._uuid).concat([ owner._uuid ]);\n },\n\n /**\n * `cc.loader.assetLoader` was removed, assetLoader and md5Pipe were merged into {{#crossLink \"AssetManager/transformPipeline:property\"}}{{/crossLink}}\n *\n * @property assetLoader\n * @deprecated cc.loader.assetLoader was removed, assetLoader and md5Pipe were merged into cc.assetManager.transformPipeline\n * @type {Object}\n */\n get assetLoader () {\n if (CC_DEBUG) {\n cc.error('cc.loader.assetLoader was removed, assetLoader and md5Pipe were merged into cc.assetManager.transformPipeline');\n }\n },\n\n /**\n * `cc.loader.md5Pipe` is deprecated, assetLoader and md5Pipe were merged into {{#crossLink \"AssetManager/transformPipeline:property\"}}{{/crossLink}}\n *\n * @property md5Pipe\n * @deprecated cc.loader.md5Pipe is deprecated, assetLoader and md5Pipe were merged into cc.assetManager.transformPipeline\n * @type {Object}\n */\n get md5Pipe () {\n return md5Pipe;\n },\n\n /**\n * `cc.loader.downloader` is deprecated, please use {{#crossLink \"AssetManager/downloader:property\"}}{{/crossLink}} instead\n *\n * @deprecated cc.loader.downloader is deprecated, please use cc.assetManager.downloader instead\n * @property downloader\n * @type {Object}\n */\n get downloader () {\n return cc.assetManager.downloader;\n },\n\n /**\n * `cc.loader.loader` is deprecated, please use {{#crossLink \"AssetManager/parser:property\"}}{{/crossLink}} instead\n *\n * @property loader\n * @type {Object}\n * @deprecated cc.loader.loader is deprecated, please use cc.assetManager.parser instead\n */\n get loader () {\n return cc.assetManager.parser;\n },\n\n /**\n * `cc.loader.addDownloadHandlers` is deprecated, please use `cc.assetManager.downloader.register` instead\n *\n * @method addDownloadHandlers\n * @param {Object} extMap Custom supported types with corresponded handler\n * @deprecated cc.loader.addDownloadHandlers is deprecated, please use cc.assetManager.downloader.register instead\n */\n addDownloadHandlers (extMap) {\n if (CC_DEBUG) {\n cc.warn('`cc.loader.addDownloadHandlers` is deprecated, please use `cc.assetManager.downloader.register` instead');\n }\n var handler = Object.create(null);\n for (var type in extMap) {\n var func = extMap[type];\n handler['.' + type] = function (url, options, onComplete) {\n func({url}, onComplete);\n };\n }\n cc.assetManager.downloader.register(handler);\n },\n\n /**\n * `cc.loader.addLoadHandlers` is deprecated, please use `cc.assetManager.parser.register` instead\n *\n * @method addLoadHandlers\n * @param {Object} extMap Custom supported types with corresponded handler\n * @deprecated cc.loader.addLoadHandlers is deprecated, please use cc.assetManager.parser.register instead\n */\n addLoadHandlers (extMap) {\n if (CC_DEBUG) {\n cc.warn('`cc.loader.addLoadHandlers` is deprecated, please use `cc.assetManager.parser.register` instead');\n }\n var handler = Object.create(null);\n for (var type in extMap) {\n var func = extMap[type];\n handler['.' + type] = function (file, options, onComplete) {\n func({content: file}, onComplete);\n };\n }\n cc.assetManager.parser.register(handler);\n },\n\n flowInDeps () {\n if (CC_DEBUG) {\n cc.error('cc.loader.flowInDeps was removed');\n }\n },\n\n /**\n * `cc.loader.release` is deprecated, please use {{#crossLink \"AssetManager/releaseAsset:method\"}}{{/crossLink}} instead\n *\n * @method release\n * @param {Asset|String|Array} asset\n * @deprecated cc.loader.release is deprecated, please use cc.assetManager.releaseAsset instead\n */\n release (asset) {\n if (Array.isArray(asset)) {\n for (let i = 0; i < asset.length; i++) {\n var key = asset[i];\n if (typeof key === 'string') key = cc.assetManager.assets.get(key);\n let isBuiltin = cc.assetManager.builtins._assets.find(function (assets) {\n return assets.find(builtinAsset => builtinAsset === key);\n });\n if (isBuiltin) continue;\n cc.assetManager.releaseAsset(key);\n }\n }\n else if (asset) {\n if (typeof asset === 'string') asset = cc.assetManager.assets.get(asset);\n let isBuiltin = cc.assetManager.builtins._assets.find(function (assets) {\n return assets.find(builtinAsset => builtinAsset === asset);\n });\n if (isBuiltin) return;\n cc.assetManager.releaseAsset(asset);\n }\n },\n\n /**\n * `cc.loader.releaseAsset` is deprecated, please use {{#crossLink \"AssetManager/releaseAsset:method\"}}{{/crossLink}} instead\n *\n * @deprecated cc.loader.releaseAsset is deprecated, please use cc.assetManager.releaseAsset instead\n * @method releaseAsset\n * @param {Asset} asset\n */\n releaseAsset (asset) {\n cc.assetManager.releaseAsset(asset);\n },\n\n /**\n * `cc.loader.releaseRes` is deprecated, please use {{#crossLink \"AssetManager/releaseRes:method\"}}{{/crossLink}} instead\n *\n * @deprecated cc.loader.releaseRes is deprecated, please use cc.assetManager.releaseRes instead\n * @method releaseRes\n * @param {String} url\n * @param {Function} [type] - Only asset of type will be released if this argument is supplied.\n */\n releaseRes (url, type) {\n cc.resources.release(url, type);\n },\n\n /**\n * `cc.loader.releaseResDir` was removed, please use {{#crossLink \"AssetManager/releaseRes:method\"}}{{/crossLink}} instead\n *\n * @deprecated cc.loader.releaseResDir was removed, please use cc.assetManager.releaseRes instead\n * @method releaseResDir\n */\n releaseResDir () {\n if (CC_DEBUG) {\n cc.error('cc.loader.releaseResDir was removed, please use cc.assetManager.releaseAsset instead');\n }\n },\n\n /**\n * `cc.loader.releaseAll` is deprecated, please use {{#crossLink \"AssetManager/releaseAll:method\"}}{{/crossLink}} instead\n *\n * @deprecated cc.loader.releaseAll is deprecated, please use cc.assetManager.releaseAll instead\n * @method releaseAll\n */\n releaseAll () {\n cc.assetManager.releaseAll();\n cc.assetManager.assets.clear();\n },\n\n /**\n * `cc.loader.removeItem` is deprecated, please use `cc.assetManager.assets.remove` instead\n *\n * @deprecated cc.loader.removeItem is deprecated, please use cc.assetManager.assets.remove instead\n * @method removeItem\n * @param {Object} id The id of the item\n * @return {Boolean} succeed or not\n */\n removeItem (key) {\n cc.assetManager.assets.remove(key);\n },\n\n /**\n * `cc.loader.setAutoRelease` is deprecated, if you want to prevent some asset from auto releasing, please use {{#crossLink \"Asset/addRef:method\"}}{{/crossLink}} instead\n *\n * @deprecated cc.loader.setAutoRelease is deprecated, if you want to prevent some asset from auto releasing, please use cc.Asset.addRef instead\n * @method setAutoRelease\n * @param {Asset|String} assetOrUrlOrUuid - asset object or the raw asset's url or uuid\n * @param {Boolean} autoRelease - indicates whether should release automatically\n */\n setAutoRelease (asset, autoRelease) {\n if (typeof asset === 'object') asset = asset._uuid;\n this._autoReleaseSetting[asset] = !!autoRelease;\n },\n\n /**\n * `cc.loader.setAutoReleaseRecursively` is deprecated, if you want to prevent some asset from auto releasing, please use {{#crossLink \"Asset/addRef:method\"}}{{/crossLink}} instead\n *\n * @method setAutoReleaseRecursively\n * @param {Asset|String} assetOrUrlOrUuid - asset object or the raw asset's url or uuid\n * @param {Boolean} autoRelease - indicates whether should release automatically\n * @deprecated cc.loader.setAutoReleaseRecursively is deprecated, if you want to prevent some asset from auto releasing, please use cc.Asset.addRef instead\n */\n setAutoReleaseRecursively (asset, autoRelease) {\n if (typeof asset === 'object') asset = asset._uuid;\n autoRelease = !!autoRelease;\n this._autoReleaseSetting[asset] = autoRelease;\n var depends = dependUtil.getDepsRecursively(asset);\n for (var i = 0; i < depends.length; i++) {\n var depend = depends[i];\n this._autoReleaseSetting[depend] = autoRelease;\n }\n },\n\n /**\n * `cc.loader.isAutoRelease` is deprecated\n *\n * @method isAutoRelease\n * @param {Asset|String} assetOrUrl - asset object or the raw asset's url\n * @returns {Boolean}\n * @deprecated cc.loader.isAutoRelease is deprecated\n */\n isAutoRelease (asset) {\n if (typeof asset === 'object') asset = asset._uuid;\n return !!this._autoReleaseSetting[asset];\n }\n};\n\n/**\n * @class Downloader\n */\n/**\n * `cc.loader.downloader.loadSubpackage` is deprecated, please use {{#crossLink \"AssetManager/loadBundle:method\"}}{{/crossLink}} instead\n *\n * @deprecated cc.loader.downloader.loadSubpackage is deprecated, please use AssetManager.loadBundle instead\n * @method loadSubpackage\n * @param {String} name - Subpackage name\n * @param {Function} [completeCallback] - Callback invoked when subpackage loaded\n * @param {Error} completeCallback.error - error information\n */\ndownloader.loadSubpackage = function (name, completeCallback) {\n cc.assetManager.loadBundle(name, null, completeCallback);\n};\n\n/**\n * @deprecated cc.AssetLibrary is deprecated, please backup your project and upgrade to cc.assetManager\n */\nvar AssetLibrary = {\n\n /**\n * @deprecated cc.AssetLibrary.init is deprecated, please use cc.assetManager.init instead\n */\n init (options) {\n options.importBase = options.libraryPath;\n options.nativeBase = CC_BUILD ? options.rawAssetsBase : options.libraryPath;\n cc.assetManager.init(options);\n if (options.rawAssets) {\n var resources = new cc.AssetManager.Bundle();\n resources.init({\n name: cc.AssetManager.BuiltinBundleName.RESOURCES,\n importBase: options.importBase,\n nativeBase: options.nativeBase,\n paths: options.rawAssets.assets,\n uuids: Object.keys(options.rawAssets.assets),\n });\n }\n },\n\n /**\n * @deprecated cc.AssetLibrary is deprecated, please use cc.assetManager.loadAny instead\n */\n loadAsset (uuid, onComplete) {\n cc.assetManager.loadAny(uuid, onComplete);\n },\n\n getLibUrlNoExt () {\n if (CC_DEBUG) {\n cc.error('cc.AssetLibrary.getLibUrlNoExt was removed, if you want to transform url, please use cc.assetManager.utils.getUrlWithUuid instead');\n }\n },\n\n queryAssetInfo () {\n if (CC_DEBUG) {\n cc.error('cc.AssetLibrary.queryAssetInfo was removed, only available in the editor by using cc.assetManager.editorExtend.queryAssetInfo');\n }\n }\n};\n\n/**\n * `cc.url` is deprecated\n *\n * @deprecated cc.url is deprecated\n * @class url\n * @static\n */\ncc.url = {\n normalize (url) {\n cc.warnID(1400, 'cc.url.normalize', 'cc.assetManager.utils.normalize');\n return cc.assetManager.utils.normalize(url);\n },\n\n /**\n * `cc.url.raw` is deprecated, please use `cc.resources.load` directly, or use `Asset.nativeUrl` instead.\n *\n * @deprecated cc.url.raw is deprecated, please use cc.resources.load directly, or use Asset.nativeUrl instead.\n * @method raw\n * @param {String} url\n * @return {String}\n */\n raw (url) {\n cc.warnID(1400, 'cc.url.raw', 'cc.resources.load');\n if (url.startsWith('resources/')) {\n return cc.assetManager._transform({'path': cc.path.changeExtname(url.substr(10)), bundle: cc.AssetManager.BuiltinBundleName.RESOURCES, __isNative__: true, ext: cc.path.extname(url)});\n }\n return '';\n }\n};\n\nlet onceWarns = {\n loader: true,\n assetLibrary: true,\n};\n\nObject.defineProperties(cc, {\n loader: {\n get () {\n if (CC_DEBUG) {\n if (onceWarns.loader) {\n onceWarns.loader = false;\n cc.log('cc.loader is deprecated, use cc.assetManager instead please. See https://docs.cocos.com/creator/manual/zh/release-notes/asset-manager-upgrade-guide.html');\n }\n }\n return loader;\n }\n },\n\n AssetLibrary: {\n get () {\n if (CC_DEBUG) {\n if (onceWarns.assetLibrary) {\n onceWarns.assetLibrary = false;\n cc.log('cc.AssetLibrary is deprecated, use cc.assetManager instead please. See https://docs.cocos.com/creator/manual/zh/release-notes/asset-manager-upgrade-guide.html');\n }\n }\n return AssetLibrary;\n }\n },\n\n /**\n * `cc.LoadingItems` was removed, please use {{#crossLink \"Task\"}}{{/crossLink}} instead\n *\n * @deprecated cc.LoadingItems was removed, please use cc.AssetManager.Task instead\n * @class LoadingItems\n */\n LoadingItems: {\n get () {\n cc.warnID(1400, 'cc.LoadingItems', 'cc.AssetManager.Task');\n return cc.AssetManager.Task;\n }\n },\n\n Pipeline: {\n get () {\n cc.warnID(1400, 'cc.Pipeline', 'cc.AssetManager.Pipeline');\n return cc.AssetManager.Pipeline;\n }\n }\n});\n\njs.obsolete(cc, 'cc.RawAsset', 'cc.Asset');\n\n/**\n * @class Asset\n */\n/**\n * `cc.Asset.url` is deprecated, please use {{#crossLink \"Asset/nativeUrl:property\"}}{{/crossLink}} instead\n * @property url\n * @type {String}\n * @deprecated cc.Asset.url is deprecated, please use cc.Asset.nativeUrl instead\n */\njs.obsolete(cc.Asset.prototype, 'cc.Asset.url', 'nativeUrl');\n\n/**\n * @class macro\n * @static\n */\nObject.defineProperties(cc.macro, {\n /**\n * `cc.macro.DOWNLOAD_MAX_CONCURRENT` is deprecated now, please use {{#crossLink \"Downloader/maxConcurrency:property\"}}{{/crossLink}} instead\n * \n * @property DOWNLOAD_MAX_CONCURRENT\n * @type {Number}\n * @deprecated cc.macro.DOWNLOAD_MAX_CONCURRENT is deprecated now, please use cc.assetManager.downloader.maxConcurrency instead\n */\n DOWNLOAD_MAX_CONCURRENT: {\n get () {\n return cc.assetManager.downloader.maxConcurrency;\n },\n\n set (val) {\n cc.assetManager.downloader.maxConcurrency = val;\n }\n }\n});\n\nObject.assign(cc.director, {\n _getSceneUuid (sceneName) {\n cc.assetManager.main.getSceneInfo(sceneName);\n }\n});\n\nObject.defineProperties(cc.game, {\n _sceneInfos: {\n get () {\n var scenes = [];\n cc.assetManager.main._config.scenes.forEach(function (val) {\n scenes.push(val);\n });\n return scenes;\n }\n }\n});\n\nvar parseParameters = utilities.parseParameters;\nutilities.parseParameters = function (options, onProgress, onComplete) {\n var result = parseParameters(options, onProgress, onComplete);\n result.onProgress = result.onProgress || loader.onProgress;\n return result;\n};\n\nvar autoRelease = releaseManager._autoRelease;\nreleaseManager._autoRelease = function () {\n autoRelease.apply(this, arguments);\n var releaseSettings = loader._autoReleaseSetting;\n var keys = Object.keys(releaseSettings);\n for (let i = 0; i < keys.length; i++) {\n let key = keys[i];\n if (releaseSettings[key] === true) {\n var asset = cc.assetManager.assets.get(key);\n asset && releaseManager.tryRelease(asset);\n }\n }\n};","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst helper = require('./helper');\nconst MissingClass = CC_EDITOR && Editor.require('app://editor/page/scene-utils/missing-class-reporter').MissingClass;\nrequire('../platform/deserialize');\n\nfunction deserialize (json, options) {\n var classFinder, missingClass;\n if (CC_EDITOR) {\n missingClass = MissingClass;\n classFinder = function (type, data, owner, propName) {\n var res = missingClass.classFinder(type, data, owner, propName);\n if (res) {\n return res;\n }\n return cc._MissingScript;\n };\n classFinder.onDereferenced = missingClass.classFinder.onDereferenced;\n }\n else {\n classFinder = cc._MissingScript.safeFindClass;\n }\n\n let pool = null;\n if (!CC_PREVIEW) {\n pool = cc.deserialize.Details.pool;\n }\n else {\n let { default: deserializeForCompiled } = require('../platform/deserialize-compiled');\n let deserializeForEditor = require('../platform/deserialize-editor');\n if (deserializeForCompiled.isCompiledJson(json)) {\n pool = deserializeForCompiled.Details.pool;\n }\n else {\n pool = deserializeForEditor.Details.pool;\n }\n }\n var tdInfo = pool.get();\n\n var asset;\n try {\n asset = cc.deserialize(json, tdInfo, {\n classFinder: classFinder,\n customEnv: options\n });\n }\n catch (e) {\n pool.put(tdInfo);\n throw e;\n }\n\n if (CC_EDITOR && missingClass) {\n missingClass.reportMissingClass(asset);\n missingClass.reset();\n }\n\n var uuidList = tdInfo.uuidList;\n var objList = tdInfo.uuidObjList;\n var propList = tdInfo.uuidPropList;\n var depends = [];\n\n for (var i = 0; i < uuidList.length; i++) {\n var dependUuid = uuidList[i];\n depends[i] = {\n uuid: helper.decodeUuid(dependUuid),\n owner: objList[i],\n prop: propList[i]\n };\n }\n\n // non-native deps\n asset.__depends__ = depends;\n // native dep\n asset._native && (asset.__nativeDepend__ = true);\n pool.put(tdInfo);\n return asset;\n\n}\n\nmodule.exports = deserialize;\n","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nvar __audioSupport = cc.sys.__audioSupport;\nconst { parseParameters } = require('./utilities');\n\nfunction downloadDomAudio (url, options, onComplete) {\n var { options, onComplete } = parseParameters(options, undefined, onComplete);\n\n var dom = document.createElement('audio');\n dom.src = url;\n\n var clearEvent = function () {\n clearTimeout(timer);\n dom.removeEventListener(\"canplaythrough\", success, false);\n dom.removeEventListener(\"error\", failure, false);\n if(__audioSupport.USE_LOADER_EVENT)\n dom.removeEventListener(__audioSupport.USE_LOADER_EVENT, success, false);\n };\n\n var timer = setTimeout(function () {\n if (dom.readyState === 0)\n failure();\n else\n success();\n }, 8000);\n\n var success = function () {\n clearEvent();\n onComplete && onComplete(null, dom);\n };\n \n var failure = function () {\n clearEvent();\n var message = 'load audio failure - ' + url;\n cc.log(message);\n onComplete && onComplete(new Error(message));\n };\n\n dom.addEventListener(\"canplaythrough\", success, false);\n dom.addEventListener(\"error\", failure, false);\n if(__audioSupport.USE_LOADER_EVENT)\n dom.addEventListener(__audioSupport.USE_LOADER_EVENT, success, false);\n return dom;\n}\n\nmodule.exports = downloadDomAudio;","\n/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst { parseParameters } = require('./utilities');\n\nfunction downloadDomImage (url, options, onComplete) {\n var { options, onComplete } = parseParameters(options, undefined, onComplete);\n\n var img = new Image();\n\n if (window.location.protocol !== 'file:') {\n img.crossOrigin = 'anonymous';\n }\n\n function loadCallback () {\n img.removeEventListener('load', loadCallback);\n img.removeEventListener('error', errorCallback);\n onComplete && onComplete(null, img);\n }\n \n function errorCallback () {\n img.removeEventListener('load', loadCallback);\n img.removeEventListener('error', errorCallback);\n onComplete && onComplete(new Error(cc.debug.getError(4930, url)));\n }\n\n img.addEventListener('load', loadCallback);\n img.addEventListener('error', errorCallback);\n img.src = url;\n return img;\n}\n\nmodule.exports = downloadDomImage;","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nconst { parseParameters } = require('./utilities');\n\nfunction downloadFile (url, options, onProgress, onComplete) {\n var { options, onProgress, onComplete } = parseParameters(options, onProgress, onComplete);\n\n var xhr = new XMLHttpRequest(), errInfo = 'download failed: ' + url + ', status: ';\n\n xhr.open('GET', url, true);\n\n if (options.responseType !== undefined) xhr.responseType = options.responseType;\n if (options.withCredentials !== undefined) xhr.withCredentials = options.withCredentials;\n if (options.mimeType !== undefined && xhr.overrideMimeType ) xhr.overrideMimeType(options.mimeType);\n if (options.timeout !== undefined) xhr.timeout = options.timeout;\n\n if (options.header) {\n for (var header in options.header) {\n xhr.setRequestHeader(header, options.header[header]);\n }\n }\n\n xhr.onload = function () {\n if ( xhr.status === 200 || xhr.status === 0 ) {\n onComplete && onComplete(null, xhr.response);\n } else {\n onComplete && onComplete(new Error(errInfo + xhr.status + '(no response)'));\n }\n\n };\n\n if (onProgress) {\n xhr.onprogress = function (e) {\n if (e.lengthComputable) {\n onProgress(e.loaded, e.total);\n }\n };\n }\n\n xhr.onerror = function(){\n onComplete && onComplete(new Error(errInfo + xhr.status + '(error)'));\n };\n\n xhr.ontimeout = function(){\n onComplete && onComplete(new Error(errInfo + xhr.status + '(time out)'));\n };\n\n xhr.onabort = function(){\n onComplete && onComplete(new Error(errInfo + xhr.status + '(abort)'));\n };\n\n xhr.send(null);\n \n return xhr;\n}\n\nmodule.exports = downloadFile;","\n/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nconst { parseParameters } = require('./utilities');\n\nconst downloaded = {};\n\nfunction downloadScript (url, options, onComplete) {\n var { options, onComplete } = parseParameters(options, undefined, onComplete);\n\n // no need to load script again\n if (downloaded[url]) {\n return onComplete && onComplete(null);\n }\n\n var d = document, s = document.createElement('script');\n\n if (window.location.protocol !== 'file:') {\n s.crossOrigin = 'anonymous';\n }\n\n s.async = options.async;\n s.src = url;\n function loadHandler () {\n s.parentNode.removeChild(s);\n s.removeEventListener('load', loadHandler, false);\n s.removeEventListener('error', errorHandler, false);\n downloaded[url] = true;\n onComplete && onComplete(null);\n }\n\n function errorHandler() {\n s.parentNode.removeChild(s);\n s.removeEventListener('load', loadHandler, false);\n s.removeEventListener('error', errorHandler, false);\n onComplete && onComplete(new Error(cc.debug.getError(4928, url)));\n }\n \n s.addEventListener('load', loadHandler, false);\n s.addEventListener('error', errorHandler, false);\n d.body.appendChild(s);\n}\n\nmodule.exports = downloadScript;","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n/**\n * @module cc.AssetManager\n */\nconst js = require('../platform/js');\nconst debug = require('../CCDebug');\nconst { loadFont } = require('./font-loader');\nconst callInNextTick = require('../platform/utils').callInNextTick;\nconst downloadDomImage = require('./download-dom-image');\nconst downloadDomAudio = require('./download-dom-audio');\nconst downloadFile = require('./download-file');\nconst downloadScript = require('./download-script.js');\nconst Cache = require('./cache');\nconst { files } = require('./shared');\nconst { __audioSupport, capabilities } = require('../platform/CCSys');\nconst { urlAppendTimestamp, retry } = require('./utilities');\n\nconst REGEX = /^(?:\\w+:\\/\\/|\\.+\\/).+/;\n\n\nvar formatSupport = __audioSupport.format || [];\n\nvar unsupported = function (url, options, onComplete) {\n onComplete(new Error(debug.getError(4927)));\n}\n\nvar downloadAudio = function (url, options, onComplete) {\n // web audio need to download file as arrayBuffer\n if (options.audioLoadMode !== cc.AudioClip.LoadMode.DOM_AUDIO) {\n downloadArrayBuffer(url, options, onComplete);\n }\n else {\n downloadDomAudio(url, options, onComplete);\n }\n};\n\nvar downloadAudio = (!CC_EDITOR || !Editor.isMainProcess) ? (formatSupport.length === 0 ? unsupported : (__audioSupport.WEB_AUDIO ? downloadAudio : downloadDomAudio)) : null;\n\nvar downloadImage = function (url, options, onComplete) {\n // if createImageBitmap is valid, we can transform blob to ImageBitmap. Otherwise, just use HTMLImageElement to load\n var func = capabilities.imageBitmap && cc.macro.ALLOW_IMAGE_BITMAP ? downloadBlob : downloadDomImage;\n func.apply(this, arguments);\n};\n\nvar downloadBlob = function (url, options, onComplete) {\n options.responseType = \"blob\";\n downloadFile(url, options, options.onFileProgress, onComplete);\n};\n\nvar downloadJson = function (url, options, onComplete) {\n options.responseType = \"json\";\n downloadFile(url, options, options.onFileProgress, function (err, data) {\n if (!err && typeof data === 'string') {\n try {\n data = JSON.parse(data);\n }\n catch (e) {\n err = e;\n }\n }\n onComplete && onComplete(err, data);\n });\n};\n\nvar downloadArrayBuffer = function (url, options, onComplete) {\n options.responseType = \"arraybuffer\";\n downloadFile(url, options, options.onFileProgress, onComplete);\n};\n\nvar downloadText = function (url, options, onComplete) {\n options.responseType = \"text\";\n downloadFile(url, options, options.onFileProgress, onComplete);\n};\n\nvar downloadVideo = function (url, options, onComplete) {\n onComplete(null, url);\n};\n\nvar downloadBundle = function (nameOrUrl, options, onComplete) {\n let bundleName = cc.path.basename(nameOrUrl);\n let url = nameOrUrl;\n if (!REGEX.test(url)) url = 'assets/' + bundleName;\n var version = options.version || downloader.bundleVers[bundleName];\n var count = 0;\n var config = `${url}/config.${version ? version + '.' : ''}json`;\n let out = null, error = null;\n downloadJson(config, options, function (err, response) {\n if (err) {\n error = err;\n }\n out = response;\n out && (out.base = url + '/');\n count++;\n if (count === 2) {\n onComplete(error, out);\n }\n });\n\n var js = `${url}/index.${version ? version + '.' : ''}js`;\n downloadScript(js, options, function (err) {\n if (err) {\n error = err;\n }\n count++;\n if (count === 2) {\n onComplete(error, out);\n }\n });\n};\n\nvar _downloading = new Cache();\nvar _queue = [];\nvar _queueDirty = false;\n\n// the number of loading thread\nvar _totalNum = 0;\n\n// the number of request that launched in this period\nvar _totalNumThisPeriod = 0;\n\n// last time, if now - lastTime > period, refresh _totalNumThisPeriod.\nvar _lastDate = -1;\n\n// if _totalNumThisPeriod equals max, move request to next period using setTimeOut.\nvar _checkNextPeriod = false;\n\nvar updateTime = function () {\n var now = Date.now();\n // use deltaTime as interval\n let interval = cc.director._deltaTime > downloader._maxInterval ? downloader._maxInterval : cc.director._deltaTime;\n if (now - _lastDate > interval * 1000) {\n _totalNumThisPeriod = 0;\n _lastDate = now;\n }\n};\n\n// handle the rest request in next period\nvar handleQueue = function (maxConcurrency, maxRequestsPerFrame) {\n _checkNextPeriod = false;\n updateTime();\n while (_queue.length > 0 && _totalNum < maxConcurrency && _totalNumThisPeriod < maxRequestsPerFrame) {\n if (_queueDirty) {\n _queue.sort(function (a, b) {\n return a.priority - b.priority;\n });\n _queueDirty = false;\n }\n var nextOne = _queue.pop();\n if (!nextOne) {\n break;\n }\n _totalNum++;\n _totalNumThisPeriod++;\n nextOne.invoke();\n }\n\n if (_queue.length > 0 && _totalNum < maxConcurrency) {\n callInNextTick(handleQueue, maxConcurrency, maxRequestsPerFrame);\n _checkNextPeriod = true;\n }\n}\n\n\n/**\n * !#en\n * Control all download process, it is a singleton. All member can be accessed with `cc.assetManager.downloader` , it can download several types of files:\n * 1. Text\n * 2. Image\n * 3. Audio\n * 4. Assets\n * 5. Scripts\n * \n * !#zh\n * 管理所有下载过程,downloader 是个单例,所有成员能通过 `cc.assetManager.downloader` 访问,它能下载以下几种类型的文件:\n * 1. 文本\n * 2. 图片\n * 3. 音频\n * 4. 资源\n * 5. 脚本\n * \n * @class Downloader\n */\nvar downloader = {\n\n _remoteServerAddress: '',\n _maxInterval: 1 / 30,\n \n /**\n * !#en \n * The address of remote server\n * \n * !#zh\n * 远程服务器地址\n * \n * @property remoteServerAddress\n * @type {string}\n * @default ''\n */\n get remoteServerAddress () {\n return this._remoteServerAddress;\n },\n\n /**\n * !#en \n * The maximum number of concurrent when downloading\n * \n * !#zh\n * 下载时的最大并发数\n * \n * @property maxConcurrency\n * @type {number}\n * @default 6\n */\n maxConcurrency: 6,\n\n /**\n * !#en \n * The maximum number of request can be launched per frame when downloading\n * \n * !#zh\n * 下载时每帧可以启动的最大请求数\n * \n * @property maxRequestsPerFrame\n * @type {number}\n * @default 6\n */\n maxRequestsPerFrame: 6,\n\n /**\n * !#en\n * The max number of retries when fail\n * \n * !#zh\n * 失败重试次数\n * \n * @property maxRetryCount\n * @type {Number}\n */\n maxRetryCount: 3,\n\n appendTimeStamp: false,\n\n limited: true,\n\n /**\n * !#en\n * Wait for while before another retry, unit: ms\n * \n * !#zh\n * 重试的间隔时间\n * \n * @property retryInterval\n * @type {Number}\n */\n retryInterval: 2000,\n\n bundleVers: null,\n\n /*\n * !#en\n * Use Image element to download image\n * \n * !#zh\n * 使用 Image 元素来下载图片\n * \n * @method downloadDomImage\n * @param {string} url - Url of the image\n * @param {Object} [options] - Some optional paramters\n * @param {Function} [onComplete] - Callback when image loaded or failed\n * @param {Error} onComplete.err - The occurred error, null indicetes success\n * @param {HTMLImageElement} onComplete.img - The loaded Image element, null if error occurred\n * @returns {HTMLImageElement} The image element\n * \n * @example\n * downloadDomImage('http://example.com/test.jpg', null, (err, img) => console.log(err));\n * \n * @typescript\n * downloadDomImage(url: string, options?: Record , onComplete?: (err: Error, img: HTMLImageElement) => void): HTMLImageElement\n * downloadDomImage(url: string, onComplete?: (err: Error, img: HTMLImageElement) => void): HTMLImageElement\n */\n downloadDomImage: downloadDomImage,\n\n /*\n * !#en\n * Use audio element to download audio\n * \n * !#zh\n * 使用 Audio 元素来下载音频 \n * \n * @method downloadDomAudio\n * @param {string} url - Url of the audio\n * @param {Object} [options] - Some optional paramters\n * @param {Function} [onComplete] - Callback invoked when audio loaded or failed\n * @param {Error} onComplete.err - The occurred error, null indicetes success\n * @param {HTMLAudioElement} onComplete.audio - The loaded audio element, null if error occurred\n * @returns {HTMLAudioElement} The audio element\n * \n * @example\n * downloadDomAudio('http://example.com/test.mp3', null, (err, audio) => console.log(err));\n * \n * @typescript\n * downloadDomAudio(url: string, options?: Record, onComplete?: (err: Error, audio: HTMLAudioElement) => void): HTMLAudioElement\n * downloadDomAudio(url: string, onComplete?: (err: Error, audio: HTMLAudioElement) => void): HTMLAudioElement\n */\n downloadDomAudio: downloadDomAudio,\n \n /*\n * !#en\n * Use XMLHttpRequest to download file\n * \n * !#zh\n * 使用 XMLHttpRequest 来下载文件\n * \n * @method downloadFile\n * @param {string} url - Url of the file\n * @param {Object} [options] - Some optional paramters\n * @param {string} [options.responseType] - Indicate which type of content should be returned\n * @param {boolean} [options.withCredentials] - Indicate whether or not cross-site Access-Contorl requests should be made using credentials\n * @param {string} [options.mimeType] - Indicate which type of content should be returned. In some browsers, responseType does't work, you can use mimeType instead\n * @param {Number} [options.timeout] - Represent the number of ms a request can take before being terminated.\n * @param {Object} [options.header] - The header should be tranferred to server\n * @param {Function} [onFileProgress] - Callback continuously during download is processing\n * @param {Number} onFileProgress.loaded - Size of downloaded content.\n * @param {Number} onFileProgress.total - Total size of content.\n * @param {Function} [onComplete] - Callback when file loaded or failed\n * @param {Error} onComplete.err - The occurred error, null indicetes success\n * @param {*} onComplete.response - The loaded content, null if error occurred, type of content can be indicated by options.responseType\n * @returns {XMLHttpRequest} The xhr to be send\n * \n * @example\n * downloadFile('http://example.com/test.bin', {responseType: 'arraybuffer'}, null, (err, arrayBuffer) => console.log(err));\n * \n * @typescript\n * downloadFile(url: string, options?: Record, onFileProgress?: (loaded: Number, total: Number) => void, onComplete?: (err: Error, response: any) => void): XMLHttpRequest\n * downloadFile(url: string, onFileProgress?: (loaded: Number, total: Number) => void, onComplete?: (err: Error, response: any) => void): XMLHttpRequest\n * downloadFile(url: string, options?: Record, onComplete?: (err: Error, response: any) => void): XMLHttpRequest\n * downloadFile(url: string, onComplete?: (err: Error, response: any) => void): XMLHttpRequest\n */\n downloadFile: downloadFile,\n\n /*\n * !#en\n * Load script \n * \n * !#zh\n * 加载脚本\n * \n * @method downloadScript\n * @param {string} url - Url of the script\n * @param {Object} [options] - Some optional paramters\n * @param {boolean} [options.isAsync] - Indicate whether or not loading process should be async\n * @param {Function} [onComplete] - Callback when script loaded or failed\n * @param {Error} onComplete.err - The occurred error, null indicetes success\n * \n * @example\n * downloadScript('http://localhost:8080/index.js', null, (err) => console.log(err));\n * \n * @typescript\n * downloadScript(url: string, options?: Record, onComplete?: (err: Error) => void): void\n * downloadScript(url: string, onComplete?: (err: Error) => void): void\n */\n downloadScript: downloadScript,\n\n init (bundleVers, remoteServerAddress) {\n _downloading.clear();\n _queue.length = 0;\n this._remoteServerAddress = remoteServerAddress || '';\n this.bundleVers = bundleVers || Object.create(null);\n },\n\n /**\n * !#en\n * Register custom handler if you want to change default behavior or extend downloader to download other format file\n * \n * !#zh\n * 当你想修改默认行为或者拓展 downloader 来下载其他格式文件时可以注册自定义的 handler \n * \n * @method register\n * @param {string|Object} type - Extension likes '.jpg' or map likes {'.jpg': jpgHandler, '.png': pngHandler}\n * @param {Function} [handler] - handler\n * @param {string} handler.url - url\n * @param {Object} handler.options - some optional paramters will be transferred to handler.\n * @param {Function} handler.onComplete - callback when finishing downloading\n * \n * @example\n * downloader.register('.tga', (url, options, onComplete) => onComplete(null, null));\n * downloader.register({'.tga': (url, options, onComplete) => onComplete(null, null), '.ext': (url, options, onComplete) => onComplete(null, null)});\n * \n * @typescript\n * register(type: string, handler: (url: string, options: Record, onComplete: (err: Error, content: any) => void) => void): void\n * register(map: Record, onComplete: (err: Error, content: any) => void) => void>): void\n */\n register (type, handler) {\n if (typeof type === 'object') {\n js.mixin(downloaders, type);\n }\n else {\n downloaders[type] = handler;\n }\n },\n\n /**\n * !#en\n * Use corresponding handler to download file under limitation \n * \n * !#zh\n * 在限制下使用对应的 handler 来下载文件\n * \n * @method download\n * @param {string} url - The url should be downloaded\n * @param {string} type - The type indicates that which handler should be used to download, such as '.jpg'\n * @param {Object} options - some optional paramters will be transferred to the corresponding handler.\n * @param {Function} [options.onFileProgress] - progressive callback will be transferred to handler.\n * @param {Number} [options.maxRetryCount] - How many times should retry when download failed\n * @param {Number} [options.maxConcurrency] - The maximum number of concurrent when downloading\n * @param {Number} [options.maxRequestsPerFrame] - The maximum number of request can be launched per frame when downloading\n * @param {Number} [options.priority] - The priority of this url, default is 0, the greater number is higher priority.\n * @param {Function} onComplete - callback when finishing downloading\n * @param {Error} onComplete.err - The occurred error, null indicetes success\n * @param {*} onComplete.contetnt - The downloaded file\n * \n * @example\n * download('http://example.com/test.tga', '.tga', {onFileProgress: (loaded, total) => console.lgo(loaded/total)}, onComplete: (err) => console.log(err));\n * \n * @typescript\n * download(id: string, url: string, type: string, options: Record, onComplete: (err: Error, content: any) => void): void\n */\n download (id, url, type, options, onComplete) {\n let func = downloaders[type] || downloaders['default'];\n let self = this;\n // if it is downloaded, don't download again\n let file, downloadCallbacks;\n if (file = files.get(id)) {\n onComplete(null, file);\n }\n else if (downloadCallbacks = _downloading.get(id)) {\n downloadCallbacks.push(onComplete);\n for (let i = 0, l = _queue.length; i < l; i++) {\n var item = _queue[i];\n if (item.id === id) {\n var priority = options.priority || 0;\n if (item.priority < priority) {\n item.priority = priority;\n _queueDirty = true;\n } \n return;\n }\n } \n }\n else {\n // if download fail, should retry\n var maxRetryCount = typeof options.maxRetryCount !== 'undefined' ? options.maxRetryCount : this.maxRetryCount;\n var maxConcurrency = typeof options.maxConcurrency !== 'undefined' ? options.maxConcurrency : this.maxConcurrency;\n var maxRequestsPerFrame = typeof options.maxRequestsPerFrame !== 'undefined' ? options.maxRequestsPerFrame : this.maxRequestsPerFrame;\n\n function process (index, callback) {\n if (index === 0) {\n _downloading.add(id, [onComplete]);\n }\n \n if (!self.limited) return func(urlAppendTimestamp(url), options, callback);\n\n // refresh\n updateTime();\n\n function invoke () {\n func(urlAppendTimestamp(url), options, function () {\n // when finish downloading, update _totalNum\n _totalNum--;\n if (!_checkNextPeriod && _queue.length > 0) {\n callInNextTick(handleQueue, maxConcurrency, maxRequestsPerFrame);\n _checkNextPeriod = true;\n }\n callback.apply(this, arguments);\n });\n }\n\n if (_totalNum < maxConcurrency && _totalNumThisPeriod < maxRequestsPerFrame) {\n invoke();\n _totalNum++;\n _totalNumThisPeriod++;\n }\n else {\n // when number of request up to limitation, cache the rest\n _queue.push({ id, priority: options.priority || 0, invoke });\n _queueDirty = true;\n \n if (!_checkNextPeriod && _totalNum < maxConcurrency) {\n callInNextTick(handleQueue, maxConcurrency, maxRequestsPerFrame);\n _checkNextPeriod = true;\n }\n }\n }\n\n // when retry finished, invoke callbacks\n function finale (err, result) {\n if (!err) files.add(id, result);\n var callbacks = _downloading.remove(id);\n for (let i = 0, l = callbacks.length; i < l; i++) {\n callbacks[i](err, result);\n }\n }\n \n retry(process, maxRetryCount, this.retryInterval, finale);\n }\n }\n};\n\n// dafault handler map\nvar downloaders = {\n // Images\n '.png' : downloadImage,\n '.jpg' : downloadImage,\n '.bmp' : downloadImage,\n '.jpeg' : downloadImage,\n '.gif' : downloadImage,\n '.ico' : downloadImage,\n '.tiff' : downloadImage,\n '.webp' : downloadImage,\n '.image' : downloadImage,\n '.pvr': downloadArrayBuffer,\n '.pkm': downloadArrayBuffer,\n\n // Audio\n '.mp3' : downloadAudio,\n '.ogg' : downloadAudio,\n '.wav' : downloadAudio,\n '.m4a' : downloadAudio,\n\n // Txt\n '.txt' : downloadText,\n '.xml' : downloadText,\n '.vsh' : downloadText,\n '.fsh' : downloadText,\n '.atlas' : downloadText,\n\n '.tmx' : downloadText,\n '.tsx' : downloadText,\n\n '.json' : downloadJson,\n '.ExportJson' : downloadJson,\n '.plist' : downloadText,\n\n '.fnt' : downloadText,\n\n // font\n '.font' : loadFont,\n '.eot' : loadFont,\n '.ttf' : loadFont,\n '.woff' : loadFont,\n '.svg' : loadFont,\n '.ttc' : loadFont,\n\n // Video\n '.mp4': downloadVideo,\n '.avi': downloadVideo,\n '.mov': downloadVideo,\n '.mpg': downloadVideo,\n '.mpeg': downloadVideo,\n '.rm': downloadVideo,\n '.rmvb': downloadVideo,\n\n // Binary\n '.binary' : downloadArrayBuffer,\n '.bin': downloadArrayBuffer,\n '.dbbin': downloadArrayBuffer,\n '.skel': downloadArrayBuffer,\n\n '.js': downloadScript,\n\n 'bundle': downloadBundle,\n\n 'default': downloadText\n\n};\n\ndownloader._downloaders = downloaders;\nmodule.exports = downloader;\n","/****************************************************************************\n Copyright (c) 2020 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nconst Bundle = require('./bundle');\nconst Cache = require('./cache');\nconst { assets, bundles } = require('./shared');\n\nconst _creating = new Cache();\n\nfunction createTexture (id, data, options, onComplete) {\n let out = null, err = null;\n try {\n out = new cc.Texture2D();\n out._nativeUrl = id;\n out._nativeAsset = data;\n }\n catch (e) {\n err = e;\n }\n onComplete && onComplete(err, out);\n}\n\nfunction createAudioClip (id, data, options, onComplete) {\n let out = new cc.AudioClip();\n out._nativeUrl = id;\n out._nativeAsset = data;\n out.duration = data.duration;\n onComplete && onComplete(null, out);\n}\n\nfunction createJsonAsset (id, data, options, onComplete) {\n let out = new cc.JsonAsset();\n out.json = data;\n onComplete && onComplete(null, out);\n}\n\nfunction createTextAsset (id, data, options, onComplete) {\n let out = new cc.TextAsset();\n out.text = data;\n onComplete && onComplete(null, out);\n}\n\nfunction createFont (id, data, options, onComplete) {\n let out = new cc.TTFFont();\n out._nativeUrl = id;\n out._nativeAsset = data;\n onComplete && onComplete(null, out);\n}\n\nfunction createBufferAsset (id, data, options, onComplete) {\n let out = new cc.BufferAsset();\n out._nativeUrl = id;\n out._nativeAsset = data;\n onComplete && onComplete(null, out);\n}\n\nfunction createAsset (id, data, options, onComplete) {\n let out = new cc.Asset();\n out._nativeUrl = id;\n out._nativeAsset = data;\n onComplete && onComplete(null, out);\n}\n\nfunction createBundle (id, data, options, onComplete) {\n let bundle = bundles.get(data.name);\n if (!bundle) {\n bundle = new Bundle();\n data.base = data.base || id + '/';\n bundle.init(data);\n }\n onComplete && onComplete(null, bundle);\n}\n\nconst factory = {\n\n register (type, handler) {\n if (typeof type === 'object') {\n cc.js.mixin(producers, type);\n }\n else {\n producers[type] = handler;\n }\n },\n\n create (id, data, type, options, onComplete) {\n var func = producers[type] || producers['default'];\n let asset, creating;\n if (asset = assets.get(id)) {\n onComplete(null, asset);\n }\n else if (creating = _creating.get(id)) {\n creating.push(onComplete);\n }\n else {\n _creating.add(id, [onComplete]);\n func(id, data, options, function (err, data) {\n if (!err && data instanceof cc.Asset) {\n data._uuid = id;\n assets.add(id, data);\n }\n let callbacks = _creating.remove(id);\n for (let i = 0, l = callbacks.length; i < l; i++) {\n callbacks[i](err, data);\n }\n });\n }\n }\n};\n\nconst producers = {\n // Images\n '.png' : createTexture,\n '.jpg' : createTexture,\n '.bmp' : createTexture,\n '.jpeg' : createTexture,\n '.gif' : createTexture,\n '.ico' : createTexture,\n '.tiff' : createTexture,\n '.webp' : createTexture,\n '.image' : createTexture,\n '.pvr': createTexture,\n '.pkm': createTexture,\n\n // Audio\n '.mp3' : createAudioClip,\n '.ogg' : createAudioClip,\n '.wav' : createAudioClip,\n '.m4a' : createAudioClip,\n\n // Txt\n '.txt' : createTextAsset,\n '.xml' : createTextAsset,\n '.vsh' : createTextAsset,\n '.fsh' : createTextAsset,\n '.atlas' : createTextAsset,\n\n '.tmx' : createTextAsset,\n '.tsx' : createTextAsset,\n '.fnt' : createTextAsset,\n\n '.json' : createJsonAsset,\n '.ExportJson' : createJsonAsset,\n\n // font\n '.font' : createFont,\n '.eot' : createFont,\n '.ttf' : createFont,\n '.woff' : createFont,\n '.svg' : createFont,\n '.ttc' : createFont,\n\n // Binary\n '.binary': createBufferAsset,\n '.bin': createBufferAsset,\n '.dbbin': createBufferAsset,\n '.skel': createBufferAsset,\n\n 'bundle': createBundle,\n\n 'default': createAsset\n\n};\n\nmodule.exports = factory;\n","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nconst packManager = require('./pack-manager');\nconst Task = require('./task');\nconst { getDepends, clear, forEach } = require('./utilities');\nconst { assets, fetchPipeline } = require('./shared');\n\nfunction fetch (task, done) {\n\n let firstTask = false;\n if (!task.progress) {\n task.progress = { finish: 0, total: task.input.length, canInvoke: true }; \n firstTask = true;\n }\n\n let options = task.options, depends = [], progress = task.progress, total = progress.total;\n options.__exclude__ = options.__exclude__ || Object.create(null);\n\n task.output = [];\n\n forEach(task.input, function (item, cb) {\n \n if (!item.isNative && assets.has(item.uuid)) {\n var asset = assets.get(item.uuid);\n asset.addRef();\n handle(item, task, asset, null, asset.__asyncLoadAssets__, depends, total, done);\n return cb();\n }\n\n packManager.load(item, task.options, function (err, data) {\n if (err) {\n if (!task.isFinish) {\n if (!cc.assetManager.force || firstTask) {\n cc.error(err.message, err.stack);\n progress.canInvoke = false;\n done(err);\n }\n else {\n handle(item, task, null, null, false, depends, total, done);\n }\n }\n }\n else {\n if (!task.isFinish) handle(item, task, null, data, !item.isNative, depends, total, done);\n }\n cb();\n });\n \n }, function () {\n\n if (task.isFinish) {\n clear(task, true);\n return task.dispatch('error');\n } \n if (depends.length > 0) {\n\n // stage 2 , download depend asset\n let subTask = Task.create({\n name: task.name + ' dependencies',\n input: depends,\n progress,\n options,\n onProgress: task.onProgress,\n onError: Task.prototype.recycle,\n onComplete: function (err) {\n if (!err) {\n task.output.push.apply(task.output, this.output);\n subTask.recycle();\n }\n if (firstTask) decreaseRef(task);\n done(err);\n },\n });\n fetchPipeline.async(subTask);\n return;\n }\n if (firstTask) decreaseRef(task);\n done();\n });\n}\n\nfunction decreaseRef (task) {\n let output = task.output;\n for (let i = 0, l = output.length; i < l; i++) {\n output[i].content && output[i].content.decRef(false);\n }\n}\n\nfunction handle (item, task, content, file, loadDepends, depends, last, done) {\n\n var exclude = task.options.__exclude__;\n var progress = task.progress;\n\n item.content = content;\n item.file = file;\n task.output.push(item);\n\n if (loadDepends) {\n exclude[item.uuid] = true;\n getDepends(item.uuid, file || content, exclude, depends, true, false, item.config);\n progress.total = last + depends.length;\n }\n\n progress.canInvoke && task.dispatch('progress', ++progress.finish, progress.total, item);\n}\n\nmodule.exports = fetch;","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst textUtils = require('../utils/text-utils');\n\nlet _canvasContext = null;\n// letter symbol number CJK\nlet _testString = \"BES bswy:->@123\\u4E01\\u3041\\u1101\";\n\nlet _fontFaces = Object.create(null);\nlet _intervalId = -1;\nlet _loadingFonts = [];\n// 3 seconds timeout\nlet _timeout = 3000;\n\n// Refer to https://github.com/typekit/webfontloader/blob/master/src/core/fontwatcher.js\nlet useNativeCheck = (function () {\n var nativeCheck = undefined;\n return function () {\n if (nativeCheck === undefined) {\n if (!!window.FontFace) {\n var match = /Gecko.*Firefox\\/(\\d+)/.exec(window.navigator.userAgent);\n var safari10Match = /OS X.*Version\\/10\\..*Safari/.exec(window.navigator.userAgent) && /Apple/.exec(window.navigator.vendor);\n \n if (match) {\n nativeCheck = parseInt(match[1], 10) > 42;\n } \n else if (safari10Match) {\n nativeCheck = false;\n } \n else {\n nativeCheck = true;\n }\n \n } else {\n nativeCheck = false;\n }\n }\n\n return nativeCheck;\n \n }\n})();\n\nfunction _checkFontLoaded () {\n let allFontsLoaded = true;\n let now = Date.now();\n\n for (let i = _loadingFonts.length - 1; i >= 0; i--) {\n let fontLoadHandle = _loadingFonts[i];\n let fontFamily = fontLoadHandle.fontFamilyName;\n // load timeout\n if (now - fontLoadHandle.startTime > _timeout) {\n cc.warnID(4933, fontFamily);\n fontLoadHandle.onComplete(null, fontFamily);\n _loadingFonts.splice(i, 1);\n continue;\n }\n\n let oldWidth = fontLoadHandle.refWidth;\n let fontDesc = '40px ' + fontFamily;\n _canvasContext.font = fontDesc;\n let newWidth = textUtils.safeMeasureText(_canvasContext, _testString, fontDesc);\n // loaded successfully\n if (oldWidth !== newWidth) {\n _loadingFonts.splice(i, 1);\n fontLoadHandle.onComplete(null, fontFamily);\n }\n else {\n allFontsLoaded = false;\n }\n }\n\n if (allFontsLoaded) {\n clearInterval(_intervalId);\n _intervalId = -1;\n }\n}\n\n// refer to https://github.com/typekit/webfontloader/blob/master/src/core/nativefontwatchrunner.js\nfunction nativeCheckFontLoaded (start, font, callback) {\n var loader = new Promise(function (resolve, reject) {\n var check = function () {\n var now = Date.now();\n\n if (now - start >= _timeout) {\n reject();\n } \n else {\n document.fonts.load('40px ' + font).then(function (fonts) {\n if (fonts.length >= 1) {\n resolve();\n } \n else {\n setTimeout(check, 100);\n }\n }, function () {\n reject();\n });\n }\n };\n\n check();\n });\n \n var timeoutId = null,\n timer = new Promise(function (resolve, reject) {\n timeoutId = setTimeout(reject, _timeout);\n });\n \n Promise.race([timer, loader]).then(function () {\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n \n callback(null, font);\n }, function () {\n cc.warnID(4933, font);\n callback(null, font);\n });\n}\n\nvar fontLoader = {\n loadFont: function (url, options, onComplete) {\n let fontFamilyName = fontLoader._getFontFamily(url);\n\n // Already loaded fonts\n if (_fontFaces[fontFamilyName]) {\n return onComplete(null, fontFamilyName);\n }\n\n if (!_canvasContext) {\n let labelCanvas = document.createElement('canvas');\n labelCanvas.width = 100;\n labelCanvas.height = 100;\n _canvasContext = labelCanvas.getContext('2d');\n }\n \n // Default width reference to test whether new font is loaded correctly\n let fontDesc = '40px ' + fontFamilyName;\n _canvasContext.font = fontDesc;\n let refWidth = textUtils.safeMeasureText(_canvasContext, _testString, fontDesc);\n\n // Setup font face style\n let fontStyle = document.createElement(\"style\");\n fontStyle.type = \"text/css\";\n let fontStr = \"\";\n if (isNaN(fontFamilyName - 0))\n fontStr += \"@font-face { font-family:\" + fontFamilyName + \"; src:\";\n else\n fontStr += \"@font-face { font-family:'\" + fontFamilyName + \"'; src:\";\n fontStr += \"url('\" + url + \"');\";\n fontStyle.textContent = fontStr + \"}\";\n document.body.appendChild(fontStyle);\n\n // Preload font with div\n let preloadDiv = document.createElement(\"div\");\n let divStyle = preloadDiv.style;\n divStyle.fontFamily = fontFamilyName;\n preloadDiv.innerHTML = \".\";\n divStyle.position = \"absolute\";\n divStyle.left = \"-100px\";\n divStyle.top = \"-100px\";\n document.body.appendChild(preloadDiv);\n\n if (useNativeCheck()) {\n nativeCheckFontLoaded(Date.now(), fontFamilyName, onComplete);\n }\n else {\n // Save loading font\n let fontLoadHandle = {\n fontFamilyName,\n refWidth,\n onComplete,\n startTime: Date.now()\n }\n _loadingFonts.push(fontLoadHandle);\n if (_intervalId === -1) {\n _intervalId = setInterval(_checkFontLoaded, 100);\n }\n }\n _fontFaces[fontFamilyName] = fontStyle;\n },\n\n _getFontFamily: function (fontHandle) {\n var ttfIndex = fontHandle.lastIndexOf(\".ttf\");\n if (ttfIndex === -1) return fontHandle;\n\n var slashPos = fontHandle.lastIndexOf(\"/\");\n var fontFamilyName;\n if (slashPos === -1) {\n fontFamilyName = fontHandle.substring(0, ttfIndex) + \"_LABEL\";\n } else {\n fontFamilyName = fontHandle.substring(slashPos + 1, ttfIndex) + \"_LABEL\";\n }\n if (fontFamilyName.indexOf(' ') !== -1) {\n fontFamilyName = '\"' + fontFamilyName + '\"';\n }\n return fontFamilyName;\n }\n};\n\nmodule.exports = fontLoader","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nconst { bundles } = require('./shared');\n/**\n * @module cc.AssetManager\n */\n/**\n * !#en\n * Provide some helpful function, it is a singleton. All member can be accessed with `cc.assetManager.utils`\n * \n * !#zh\n * 提供一些辅助方法,helper 是一个单例, 所有成员能通过 `cc.assetManager.utils` 访问\n * \n * @class Helper\n */\nvar helper = {\n /**\n * !#en\n * Decode uuid, returns the original uuid\n * \n * !#zh\n * 解码 uuid,返回原始 uuid\n * \n * @method decodeUuid\n * @param {String} base64 - the encoded uuid\n * @returns {String} the original uuid \n * \n * @example\n * var uuid = 'fcmR3XADNLgJ1ByKhqcC5Z';\n * var originalUuid = decodeUuid(uuid); // fc991dd7-0033-4b80-9d41-c8a86a702e59\n * \n * @typescript\n * decodeUuid(base64: string): string\n */\n decodeUuid: require('../utils/decode-uuid'),\n\n /**\n * !#en\n * Extract uuid from url\n * \n * !#zh\n * 从 url 中提取 uuid\n * \n * @method getUuidFromURL\n * @param {String} url - url\n * @returns {String} the uuid parsed from url\n * \n * @example\n * var url = 'assets/main/import/fc/fc991dd7-0033-4b80-9d41-c8a86a702e59.json';\n * var uuid = getUuidFromURL(url); // fc991dd7-0033-4b80-9d41-c8a86a702e59\n * \n * @typescript\n * getUuidFromURL(url: string): string\n */\n getUuidFromURL: (function () {\n var _uuidRegex = /.*[/\\\\][0-9a-fA-F]{2}[/\\\\]([0-9a-fA-F-]{8,})/;\n return function (url) {\n var matches = url.match(_uuidRegex);\n if (matches) {\n return matches[1];\n }\n return '';\n }\n })(),\n\n /**\n * !#en\n * Transform uuid to url\n * \n * !#zh\n * 转换 uuid 为 url\n * \n * @method getUrlWithUuid\n * @param {string} uuid - The uuid of asset\n * @param {Object} [options] - Some optional parameters\n * @param {Boolean} [options.isNative] - Indicates whether the path you want is a native resource path\n * @param {string} [options.nativeExt] - Extension of the native resource path, it is required when isNative is true\n * @returns {string} url\n * \n * @example\n * // json path, 'assets/main/import/fc/fc991dd7-0033-4b80-9d41-c8a86a702e59.json';\n * var url = getUrlWithUuid('fcmR3XADNLgJ1ByKhqcC5Z', {isNative: false});\n * \n * // png path, 'assets/main/native/fc/fc991dd7-0033-4b80-9d41-c8a86a702e59.png';\n * var url = getUrlWithUuid('fcmR3XADNLgJ1ByKhqcC5Z', {isNative: true, nativeExt: '.png'});\n * \n * @typescript\n * getUrlWithUuid(uuid: string, options?: Record): string\n */\n getUrlWithUuid: function (uuid, options) {\n options = options || Object.create(null);\n options.__isNative__ = options.isNative;\n options.ext = options.nativeExt;\n var bundle = bundles.find(function (bundle) {\n return bundle.getAssetInfo(uuid);\n });\n\n if (bundle) {\n options.bundle = bundle.name;\n }\n\n return cc.assetManager._transform(uuid, options);\n },\n\n /**\n * !#en\n * Check if the type of asset is scene\n * \n * !#zh\n * 检查资源类型是否是场景\n * \n * @method isScene\n * @param {*} asset - asset\n * @returns {boolean} - whether or not type is cc.SceneAsset\n * \n * @typescript\n * isScene(asset: any): boolean\n */\n isScene: function (asset) {\n return asset && (asset.constructor === cc.SceneAsset || asset instanceof cc.Scene);\n },\n\n /**\n * !#en\n * Normalize url, strip './' and '/'\n * \n * !#zh\n * 标准化 url ,去除 './' 和 '/' \n * \n * @method normalize\n * @param {string} url - url\n * @returns {string} - The normalized url\n * \n * @typescript\n * normalize(url: string): string\n */\n normalize: function (url) {\n if (url) {\n if (url.charCodeAt(0) === 46 && url.charCodeAt(1) === 47) {\n // strip './'\n url = url.slice(2);\n }\n else if (url.charCodeAt(0) === 47) {\n // strip '/'\n url = url.slice(1);\n }\n }\n return url;\n }\n};\n\nmodule.exports = helper;","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nrequire('./deprecated');\nrequire('./CCAssetManager');\n\n","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nconst packManager = require('./pack-manager');\nconst Pipeline = require('./pipeline');\nconst parser = require('./parser');\nconst { getDepends, cache, gatherAsset, setProperties, forEach, clear, checkCircleReference } = require('./utilities');\nconst { assets, files, parsed, pipeline } = require('./shared');\nconst Task = require('./task');\n\nfunction load (task, done) {\n\n let firstTask = false;\n if (!task.progress) {\n task.progress = { finish: 0, total: task.input.length, canInvoke: true };\n firstTask = true;\n }\n \n var options = task.options, progress = task.progress;\n\n options.__exclude__ = options.__exclude__ || Object.create(null);\n\n task.output = [];\n \n forEach(task.input, function (item, cb) {\n\n let subTask = Task.create({ \n input: item, \n onProgress: task.onProgress, \n options, \n progress, \n onComplete: function (err, item) {\n if (err && !task.isFinish) {\n if (!cc.assetManager.force || firstTask) {\n if (!CC_EDITOR) {\n cc.error(err.message, err.stack);\n }\n progress.canInvoke = false;\n done(err);\n }\n else {\n progress.canInvoke && task.dispatch('progress', ++progress.finish, progress.total, item);\n }\n }\n task.output.push(item);\n subTask.recycle();\n cb();\n }\n });\n\n loadOneAssetPipeline.async(subTask);\n\n }, function () {\n\n options.__exclude__ = null;\n\n if (task.isFinish) {\n clear(task, true);\n return task.dispatch('error');\n }\n\n gatherAsset(task);\n clear(task, true);\n done();\n });\n}\n\nvar loadOneAssetPipeline = new Pipeline('loadOneAsset', [\n\n function fetch (task, done) {\n var item = task.output = task.input;\n var { options, isNative, uuid, file } = item;\n var { reload } = options;\n\n if (file || (!reload && !isNative && assets.has(uuid))) return done();\n\n packManager.load(item, task.options, function (err, data) {\n item.file = data;\n done(err);\n });\n },\n\n function parse (task, done) {\n\n var item = task.output = task.input, progress = task.progress, exclude = task.options.__exclude__;\n var { id, file, options } = item;\n\n if (item.isNative) {\n parser.parse(id, file, item.ext, options, function (err, asset) {\n if (err) return done(err);\n item.content = asset;\n progress.canInvoke && task.dispatch('progress', ++progress.finish, progress.total, item);\n files.remove(id);\n parsed.remove(id);\n done();\n });\n }\n else {\n var { uuid } = item;\n if (uuid in exclude) {\n \n var { finish, content, err, callbacks } = exclude[uuid];\n progress.canInvoke && task.dispatch('progress', ++progress.finish, progress.total, item);\n \n if (finish || checkCircleReference(uuid, uuid, exclude) ) {\n content && content.addRef && content.addRef();\n item.content = content;\n done(err);\n }\n else {\n callbacks.push({ done, item });\n }\n }\n else {\n if (!options.reload && assets.has(uuid)) {\n var asset = assets.get(uuid);\n if (options.__asyncLoadAssets__ || !asset.__asyncLoadAssets__) {\n item.content = asset.addRef();\n progress.canInvoke && task.dispatch('progress', ++progress.finish, progress.total, item);\n done();\n }\n else {\n loadDepends(task, asset, done, false);\n }\n }\n else {\n parser.parse(id, file, 'import', options, function (err, asset) {\n if (err) return done(err);\n asset._uuid = uuid;\n loadDepends(task, asset, done, true);\n });\n }\n }\n }\n }\n]);\n\nfunction loadDepends (task, asset, done, init) {\n\n var item = task.input, progress = task.progress;\n var { uuid, id, options, config } = item;\n var { __asyncLoadAssets__, cacheAsset } = options;\n\n var depends = [];\n // add reference avoid being released during loading dependencies\n asset.addRef && asset.addRef();\n getDepends(uuid, asset, Object.create(null), depends, false, __asyncLoadAssets__, config);\n progress.canInvoke && task.dispatch('progress', ++progress.finish, progress.total += depends.length, item);\n\n var repeatItem = task.options.__exclude__[uuid] = { content: asset, finish: false, callbacks: [{ done, item }] };\n\n let subTask = Task.create({ \n input: depends, \n options: task.options, \n onProgress: task.onProgress, \n onError: Task.prototype.recycle, \n progress, \n onComplete: function (err) {\n asset.decRef && asset.decRef(false);\n asset.__asyncLoadAssets__ = __asyncLoadAssets__;\n repeatItem.finish = true;\n repeatItem.err = err;\n\n if (!err) {\n\n var assets = Array.isArray(subTask.output) ? subTask.output : [subTask.output];\n var map = Object.create(null);\n for (let i = 0, l = assets.length; i < l; i++) {\n var dependAsset = assets[i];\n dependAsset && (map[dependAsset instanceof cc.Asset ? dependAsset._uuid + '@import' : uuid + '@native'] = dependAsset);\n }\n\n if (!init) {\n if (asset.__nativeDepend__ && !asset._nativeAsset) {\n var missingAsset = setProperties(uuid, asset, map);\n if (!missingAsset && !asset.__onLoadInvoked__) {\n try {\n asset.onLoad && asset.onLoad();\n asset.__onLoadInvoked__ = true;\n }\n catch (e) {\n cc.error(e.message, e.stack);\n }\n }\n }\n }\n else {\n var missingAsset = setProperties(uuid, asset, map);\n if (!missingAsset && !asset.__onLoadInvoked__) {\n try {\n asset.onLoad && asset.onLoad();\n asset.__onLoadInvoked__ = true;\n }\n catch (e) {\n cc.error(e.message, e.stack);\n }\n }\n files.remove(id);\n parsed.remove(id);\n cache(uuid, asset, cacheAsset !== undefined ? cacheAsset : cc.assetManager.cacheAsset); \n }\n subTask.recycle();\n }\n \n var callbacks = repeatItem.callbacks;\n\n for (var i = 0, l = callbacks.length; i < l; i++) {\n\n var cb = callbacks[i];\n asset.addRef && asset.addRef();\n cb.item.content = asset;\n cb.done(err);\n\n }\n\n callbacks.length = 0;\n }\n });\n\n pipeline.async(subTask);\n}\n\nmodule.exports = load;","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport { unpackJSONs, packCustomObjData } from '../platform/deserialize-compiled';\n\nconst downloader = require('./downloader');\nconst Cache = require('./cache');\nconst js = require('../platform/js');\nconst { files } = require('./shared');\n\nvar _loading = new Cache();\n\nfunction isLoading (val) {\n return _loading.has(val.uuid);\n}\n\n\n/**\n * @module cc.AssetManager\n */\n/**\n * !#en\n * Handle the packed asset, include unpacking, loading, cache and so on. It is a singleton. All member can be accessed with `cc.assetManager.packManager`\n * \n * !#zh\n * 处理打包资源,包括拆包,加载,缓存等等,这是一个单例, 所有成员能通过 `cc.assetManager.packManager` 访问\n * \n * @class PackManager\n */\nvar packManager = {\n\n /**\n * !#en\n * Unpack the json, revert to what it was before packing\n * \n * !#zh\n * 拆解 json 包,恢复为打包之前的内容\n * \n * @method unpackJson\n * @param {String[]} pack - The pack\n * @param {Object} json - The content of pack\n * @param {Object} options - Some optional parameters\n * @param {Function} onComplete - Callback when finish unpacking\n * @param {Error} onComplete.err - The occurred error, null indicetes success\n * @param {Object} onComplete.content - The unpacked assets\n * \n * @example\n * downloader.downloadFile('pack.json', {responseType: 'json'}, null, (err, file) => {\n * packManager.unpackJson(['a', 'b'], file, null, (err, data) => console.log(err));\n * });\n * \n * @typescript\n * unpackJson(pack: string[], json: any, options: Record, onComplete?: (err: Error, content: any) => void): void\n */\n unpackJson (pack, json, options, onComplete) {\n\n var out = js.createMap(true), err = null;\n \n if (Array.isArray(json)) {\n\n json = unpackJSONs(json);\n\n if (json.length !== pack.length) {\n cc.errorID(4915);\n }\n for (let i = 0; i < pack.length; i++) {\n var key = pack[i] + '@import';\n out[key] = json[i];\n }\n }\n else {\n const textureType = js._getClassId(cc.Texture2D);\n if (json.type === textureType) {\n if (json.data) {\n var datas = json.data.split('|');\n if (datas.length !== pack.length) {\n cc.errorID(4915);\n }\n for (let i = 0; i < pack.length; i++) {\n out[pack[i] + '@import'] = packCustomObjData(textureType, datas[i], true);\n }\n }\n }\n else {\n err = new Error('unmatched type pack!');\n out = null;\n }\n }\n onComplete && onComplete(err, out);\n },\n\n init () {\n _loading.clear();\n },\n\n /**\n * !#en\n * Register custom handler if you want to change default behavior or extend packManager to unpack other format pack\n * \n * !#zh\n * 当你想修改默认行为或者拓展 packManager 来拆分其他格式的包时可以注册自定义的 handler\n * \n * @method register\n * @param {string|Object} type - Extension likes '.bin' or map likes {'.bin': binHandler, '.ab': abHandler}\n * @param {Function} [handler] - handler\n * @param {string} handler.packUuid - The uuid of pack\n * @param {*} handler.data - The content of pack\n * @param {Object} handler.options - Some optional parameters\n * @param {Function} handler.onComplete - Callback when finishing unpacking\n * \n * @example\n * packManager.register('.bin', (packUuid, file, options, onComplete) => onComplete(null, null));\n * packManager.register({'.bin': (packUuid, file, options, onComplete) => onComplete(null, null), '.ab': (packUuid, file, options, onComplete) => onComplete(null, null)});\n * \n * @typescript\n * register(type: string, handler: (packUuid: string, data: any, options: Record, onComplete: (err: Error, content: any) => void) => void): void\n * register(map: Record, onComplete: (err: Error, content: any) => void) => void>): void\n */\n register (type, handler) {\n if (typeof type === 'object') {\n js.mixin(unpackers, type);\n }\n else {\n unpackers[type] = handler;\n }\n },\n \n /**\n * !#en\n * Use corresponding handler to unpack package\n * \n * !#zh\n * 用对应的 handler 来进行解包 \n * \n * @method unpack\n * @param {String[]} pack - The uuid of packed assets \n * @param {*} data - The packed data\n * @param {string} type - The type indicates that which handler should be used to download, such as '.jpg'\n * @param {Object} options - Some optional parameter\n * @param {Function} onComplete - callback when finishing unpacking\n * @param {Error} onComplete.err - The occurred error, null indicetes success\n * @param {*} onComplete.data - Original assets\n * \n * @example\n * downloader.downloadFile('pack.json', {responseType: 'json'}, null, (err, file) => {\n * packManager.unpack(['2fawq123d', '1zsweq23f'], file, '.json', null, (err, data) => console.log(err));\n * });\n * \n * @typescript\n * unpack(pack: string[], data: any, type: string, options: Record, onComplete?: (err: Error, data: any) => void): void\n */\n unpack (pack, data, type, options, onComplete) {\n if (!data) {\n onComplete && onComplete(new Error('package data is wrong!'));\n return;\n }\n var unpacker = unpackers[type];\n unpacker(pack, data, options, onComplete);\n },\n\n /**\n * !#en\n * Download request item, If item is not in any package, download as usual. Otherwise, download the corresponding package and unpack it. \n * And then retrieve the corresponding content form it.\n * \n * !#zh\n * 下载请求对象,如果请求对象不在任何包内,则正常下载,否则下载对应的 package 并进行拆解,并取回包内对应的内容\n * \n * @method load\n * @param {RequestItem} item - Some item you want to download\n * @param {Object} options - Some optional parameters\n * @param {Function} onComplete - Callback when finished\n * @param {Err} onComplete.err - The occurred error, null indicetes success\n * @param {*} onComplete.data - The unpacked data retrieved from package\n * \n * @example\n * var requestItem = cc.AssetManager.RequestItem.create();\n * requestItem.uuid = 'fcmR3XADNLgJ1ByKhqcC5Z';\n * requestItem.info = config.getAssetInfo('fcmR3XADNLgJ1ByKhqcC5Z');\n * packManager.load(requestItem, null, (err, data) => console.log(err));\n * \n * @typescript\n * load(item: RequestItem, options: Record, onComplete: (err: Error, data: any) => void): void\n * \n */\n load (item, options, onComplete) {\n // if not in any package, download as uausl\n if (item.isNative || !item.info || !item.info.packs) return downloader.download(item.id, item.url, item.ext, item.options, onComplete);\n\n if (files.has(item.id)) return onComplete(null, files.get(item.id));\n\n var packs = item.info.packs;\n\n // find a loading package\n var pack = packs.find(isLoading);\n \n if (pack) return _loading.get(pack.uuid).push({ onComplete, id: item.id });\n\n // download a new package\n pack = packs[0];\n _loading.add(pack.uuid, [{ onComplete, id: item.id }]);\n\n let url = cc.assetManager._transform(pack.uuid, {ext: pack.ext, bundle: item.config.name});\n\n downloader.download(pack.uuid, url, pack.ext, item.options, function (err, data) {\n files.remove(pack.uuid);\n if (err) {\n cc.error(err.message, err.stack);\n }\n // unpack package\n packManager.unpack(pack.packs, data, pack.ext, item.options, function (err, result) {\n if (!err) {\n for (var id in result) {\n files.add(id, result[id]);\n }\n }\n var callbacks = _loading.remove(pack.uuid);\n for (var i = 0, l = callbacks.length; i < l; i++) {\n var cb = callbacks[i];\n if (err) {\n cb.onComplete(err);\n continue;\n }\n\n var data = result[cb.id];\n if (!data) {\n cb.onComplete(new Error('can not retrieve data from package'));\n }\n else {\n cb.onComplete(null, data);\n }\n }\n });\n });\n }\n};\n\nvar unpackers = {\n '.json': packManager.unpackJson\n};\n\nmodule.exports = packManager;\n","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * @module cc.AssetManager\n */\n\nconst plistParser = require('../platform/CCSAXParser').plistParser;\nconst js = require('../platform/js');\nconst deserialize = require('./deserialize');\nconst Cache = require('./cache');\nconst { isScene } = require('./helper');\nconst { parsed, files } = require('./shared');\nconst { __audioSupport, capabilities } = require('../platform/CCSys');\n\nvar _parsing = new Cache();\n\n/**\n * !#en\n * Parse the downloaded file, it's a singleton, all member can be accessed with `cc.assetManager.parser`\n * \n * !#zh\n * 解析已下载的文件,parser 是一个单例, 所有成员能通过 `cc.assetManaager.parser` 访问\n * \n * @class Parser\n */\nvar parser = {\n /*\n * !#en\n * Parse image file\n * \n * !#zh\n * 解析图片文件\n * \n * @method parseImage\n * @param {Blob} file - The downloaded file\n * @param {Object} options - Some optional paramters \n * @param {Function} [onComplete] - callback when finish parsing.\n * @param {Error} onComplete.err - The occurred error, null indicetes success\n * @param {ImageBitmap|HTMLImageElement} onComplete.img - The parsed content\n * \n * @example\n * downloader.downloadFile('test.jpg', {responseType: 'blob'}, null, (err, file) => {\n * parser.parseImage(file, null, (err, img) => console.log(err));\n * });\n * \n * @typescript\n * parseImage(file: Blob, options: Record, onComplete?: (err: Error, img: ImageBitmap|HTMLImageElement) => void): void\n */\n parseImage (file, options, onComplete) {\n if (capabilities.imageBitmap && file instanceof Blob) {\n let imageOptions = {};\n imageOptions.imageOrientation = options.__flipY__ ? 'flipY' : 'none';\n imageOptions.premultiplyAlpha = options.__premultiplyAlpha__ ? 'premultiply' : 'none';\n createImageBitmap(file, imageOptions).then(function (result) {\n result.flipY = !!options.__flipY__;\n result.premultiplyAlpha = !!options.__premultiplyAlpha__;\n onComplete && onComplete(null, result);\n }, function (err) {\n onComplete && onComplete(err, null);\n });\n }\n else {\n onComplete && onComplete(null, file);\n }\n },\n\n /*\n * !#en\n * Parse audio file\n * \n * !#zh\n * 解析音频文件\n * \n * @method parseAudio\n * @param {ArrayBuffer|HTMLAudioElement} file - The downloaded file\n * @param {Object} options - Some optional paramters\n * @param {Function} onComplete - Callback when finish parsing.\n * @param {Error} onComplete.err - The occurred error, null indicetes success\n * @param {AudioBuffer|HTMLAudioElement} onComplete.audio - The parsed content\n * \n * @example\n * downloader.downloadFile('test.mp3', {responseType: 'arraybuffer'}, null, (err, file) => {\n * parser.parseAudio(file, null, (err, audio) => console.log(err));\n * });\n * \n * @typescript\n * parseAudio(file: ArrayBuffer|HTMLAudioElement, options: Record, onComplete?: (err: Error, audio: AudioBuffer|HTMLAudioElement) => void): void\n */\n parseAudio (file, options, onComplete) {\n if (file instanceof ArrayBuffer) { \n __audioSupport.context.decodeAudioData(file, function (buffer) {\n onComplete && onComplete(null, buffer);\n }, function(e){\n onComplete && onComplete(e, null);\n });\n }\n else {\n onComplete && onComplete(null, file);\n }\n },\n\n /*\n * !#en\n * Parse pvr file \n * \n * !#zh\n * 解析压缩纹理格式 pvr 文件\n * \n * @method parsePVRTex\n * @param {ArrayBuffer|ArrayBufferView} file - The downloaded file\n * @param {Object} options - Some optional paramters\n * @param {Function} onComplete - Callback when finish parsing.\n * @param {Error} onComplete.err - The occurred error, null indicetes success\n * @param {Object} onComplete.pvrAsset - The parsed content\n * \n * @example\n * downloader.downloadFile('test.pvr', {responseType: 'arraybuffer'}, null, (err, file) => {\n * parser.parsePVRTex(file, null, (err, pvrAsset) => console.log(err));\n * });\n * \n * @typescript\n * parsePVRTex(file: ArrayBuffer|ArrayBufferView, options: Record, onComplete: (err: Error, pvrAsset: {_data: Uint8Array, _compressed: boolean, width: number, height: number}) => void): void\n */\n parsePVRTex : (function () {\n //===============//\n // PVR constants //\n //===============//\n // https://github.com/toji/texture-tester/blob/master/js/webgl-texture-util.js#L424\n const PVR_HEADER_LENGTH = 13; // The header length in 32 bit ints.\n const PVR_MAGIC = 0x03525650; //0x50565203;\n \n // Offsets into the header array.\n const PVR_HEADER_MAGIC = 0;\n const PVR_HEADER_FORMAT = 2;\n const PVR_HEADER_HEIGHT = 6;\n const PVR_HEADER_WIDTH = 7;\n const PVR_HEADER_MIPMAPCOUNT = 11;\n const PVR_HEADER_METADATA = 12;\n \n return function (file, options, onComplete) {\n let err = null, out = null;\n try {\n let buffer = file instanceof ArrayBuffer ? file : file.buffer;\n // Get a view of the arrayBuffer that represents the DDS header.\n let header = new Int32Array(buffer, 0, PVR_HEADER_LENGTH);\n \n // Do some sanity checks to make sure this is a valid DDS file.\n if(header[PVR_HEADER_MAGIC] != PVR_MAGIC) {\n throw new Error(\"Invalid magic number in PVR header\");\n }\n \n // Gather other basic metrics and a view of the raw the DXT data.\n let width = header[PVR_HEADER_WIDTH];\n let height = header[PVR_HEADER_HEIGHT];\n let dataOffset = header[PVR_HEADER_METADATA] + 52;\n let pvrtcData = new Uint8Array(buffer, dataOffset);\n \n out = {\n _data: pvrtcData,\n _compressed: true,\n width: width,\n height: height,\n };\n \n }\n catch (e) {\n err = e;\n }\n onComplete && onComplete(err, out);\n };\n })(),\n\n /*\n * !#en\n * Parse pkm file\n * \n * !#zh\n * 解析压缩纹理格式 pkm 文件\n * \n * @method parsePKMTex\n * @param {ArrayBuffer|ArrayBufferView} file - The downloaded file\n * @param {Object} options - Some optional paramters\n * @param {Function} onComplete - Callback when finish parsing.\n * @param {Error} onComplete.err - The occurred error, null indicetes success\n * @param {Object} onComplete.etcAsset - The parsed content\n * \n * @example\n * downloader.downloadFile('test.pkm', {responseType: 'arraybuffer'}, null, (err, file) => {\n * parser.parsePKMTex(file, null, (err, etcAsset) => console.log(err));\n * });\n * \n * @typescript\n * parsePKMTex(file: ArrayBuffer|ArrayBufferView, options: Record, onComplete: (err: Error, etcAsset: {_data: Uint8Array, _compressed: boolean, width: number, height: number}) => void): void\n */\n parsePKMTex: (function () {\n //===============//\n // ETC constants //\n //===============//\n const ETC_PKM_HEADER_SIZE = 16;\n\n const ETC_PKM_FORMAT_OFFSET = 6;\n const ETC_PKM_ENCODED_WIDTH_OFFSET = 8;\n const ETC_PKM_ENCODED_HEIGHT_OFFSET = 10;\n const ETC_PKM_WIDTH_OFFSET = 12;\n const ETC_PKM_HEIGHT_OFFSET = 14;\n\n const ETC1_RGB_NO_MIPMAPS = 0;\n const ETC2_RGB_NO_MIPMAPS = 1;\n const ETC2_RGBA_NO_MIPMAPS = 3;\n\n function readBEUint16(header, offset) {\n return (header[offset] << 8) | header[offset+1];\n }\n return function (file, options, onComplete) {\n let err = null, out = null;\n try {\n let buffer = file instanceof ArrayBuffer ? file : file.buffer;\n let header = new Uint8Array(buffer);\n let format = readBEUint16(header, ETC_PKM_FORMAT_OFFSET);\n if (format !== ETC1_RGB_NO_MIPMAPS && format !== ETC2_RGB_NO_MIPMAPS && format !== ETC2_RGBA_NO_MIPMAPS) {\n return new Error(\"Invalid magic number in ETC header\");\n }\n let width = readBEUint16(header, ETC_PKM_WIDTH_OFFSET);\n let height = readBEUint16(header, ETC_PKM_HEIGHT_OFFSET);\n let encodedWidth = readBEUint16(header, ETC_PKM_ENCODED_WIDTH_OFFSET);\n let encodedHeight = readBEUint16(header, ETC_PKM_ENCODED_HEIGHT_OFFSET);\n let etcData = new Uint8Array(buffer, ETC_PKM_HEADER_SIZE);\n out = {\n _data: etcData,\n _compressed: true,\n width: width,\n height: height\n };\n \n }\n catch (e) {\n err = e;\n }\n onComplete && onComplete(err, out);\n }\n })(),\n\n /*\n * !#en\n * Parse plist file\n * \n * !#zh\n * 解析 plist 文件\n * \n * @method parsePlist\n * @param {string} file - The downloaded file\n * @param {Object} options - Some optional paramters\n * @param {Function} onComplete - Callback when finish parsing\n * @param {Error} onComplete.err - The occurred error, null indicetes success\n * @param {*} onComplete.data - The parsed content\n * \n * @example\n * downloader.downloadFile('test.plist', {responseType: 'text'}, null, (err, file) => {\n * parser.parsePlist(file, null, (err, data) => console.log(err));\n * });\n * \n * @typescript\n * parsePlist(file: string, options: Record, onComplete?: (err: Error, data: any) => void): void\n */\n parsePlist (file, options, onComplete) {\n var err = null;\n var result = plistParser.parse(file);\n if (!result) err = new Error('parse failed');\n onComplete && onComplete(err, result);\n },\n\n /*\n * !#en\n * Deserialize asset file\n * \n * !#zh\n * 反序列化资源文件\n * \n * @method parseImport\n * @param {Object} file - The serialized json\n * @param {Object} options - Some optional paramters\n * @param {Function} onComplete - Callback when finish parsing\n * @param {Error} onComplete.err - The occurred error, null indicetes success\n * @param {Asset} onComplete.asset - The parsed content\n * \n * @example\n * downloader.downloadFile('test.json', {responseType: 'json'}, null, (err, file) => {\n * parser.parseImport(file, null, (err, data) => console.log(err));\n * });\n * \n * @typescript\n * parseImport (file: any, options: Record, onComplete?: (err: Error, asset: cc.Asset) => void): void\n */\n parseImport (file, options, onComplete) {\n if (!file) return onComplete && onComplete(new Error('Json is empty'));\n var result, err = null;\n try {\n result = deserialize(file, options);\n }\n catch (e) {\n err = e;\n }\n onComplete && onComplete(err, result);\n },\n\n init () {\n _parsing.clear();\n },\n\n /**\n * !#en\n * Register custom handler if you want to change default behavior or extend parser to parse other format file\n * \n * !#zh\n * 当你想修改默认行为或者拓展 parser 来解析其他格式文件时可以注册自定义的handler\n * \n * @method register\n * @param {string|Object} type - Extension likes '.jpg' or map likes {'.jpg': jpgHandler, '.png': pngHandler}\n * @param {Function} [handler] - The corresponding handler\n * @param {*} handler.file - File\n * @param {Object} handler.options - Some optional paramter\n * @param {Function} handler.onComplete - callback when finishing parsing\n * \n * @example\n * parser.register('.tga', (file, options, onComplete) => onComplete(null, null));\n * parser.register({'.tga': (file, options, onComplete) => onComplete(null, null), '.ext': (file, options, onComplete) => onComplete(null, null)});\n * \n * @typescript\n * register(type: string, handler: (file: any, options: Record, onComplete: (err: Error, data: any) => void) => void): void\n * register(map: Record, onComplete: (err: Error, data: any) => void) => void>): void\n */\n register (type, handler) {\n if (typeof type === 'object') {\n js.mixin(parsers, type);\n }\n else {\n parsers[type] = handler;\n }\n },\n\n /**\n * !#en\n * Use corresponding handler to parse file \n * \n * !#zh\n * 使用对应的handler来解析文件\n * \n * @method parse\n * @param {string} id - The id of file\n * @param {*} file - File\n * @param {string} type - The corresponding type of file, likes '.jpg'.\n * @param {Object} options - Some optional paramters will be transferred to the corresponding handler.\n * @param {Function} onComplete - callback when finishing downloading\n * @param {Error} onComplete.err - The occurred error, null indicetes success\n * @param {*} onComplete.contetnt - The parsed file\n * \n * @example\n * downloader.downloadFile('test.jpg', {responseType: 'blob'}, null, (err, file) => {\n * parser.parse('test.jpg', file, '.jpg', null, (err, img) => console.log(err));\n * });\n * \n * @typescript\n * parse(id: string, file: any, type: string, options: Record, onComplete: (err: Error, content: any) => void): void\n */\n parse (id, file, type, options, onComplete) {\n let parsedAsset, parsing, parseHandler;\n if (parsedAsset = parsed.get(id)) {\n onComplete(null, parsedAsset);\n }\n else if (parsing = _parsing.get(id)){\n parsing.push(onComplete);\n }\n else if (parseHandler = parsers[type]){\n _parsing.add(id, [onComplete]);\n parseHandler(file, options, function (err, data) {\n if (err) {\n files.remove(id);\n } \n else if (!isScene(data)){\n parsed.add(id, data);\n }\n let callbacks = _parsing.remove(id);\n for (let i = 0, l = callbacks.length; i < l; i++) {\n callbacks[i](err, data);\n }\n });\n }\n else {\n onComplete(null, file);\n }\n }\n};\n\nvar parsers = {\n '.png' : parser.parseImage,\n '.jpg' : parser.parseImage,\n '.bmp' : parser.parseImage,\n '.jpeg' : parser.parseImage,\n '.gif' : parser.parseImage,\n '.ico' : parser.parseImage,\n '.tiff' : parser.parseImage,\n '.webp' : parser.parseImage,\n '.image' : parser.parseImage,\n '.pvr' : parser.parsePVRTex,\n '.pkm' : parser.parsePKMTex,\n // Audio\n '.mp3' : parser.parseAudio,\n '.ogg' : parser.parseAudio,\n '.wav' : parser.parseAudio,\n '.m4a' : parser.parseAudio,\n\n // plist\n '.plist' : parser.parsePlist,\n 'import' : parser.parseImport\n};\n\nmodule.exports = parser;","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n/**\n * @module cc.AssetManager\n */\n\nconst Task = require('./task');\n\nvar _pipelineId = 0;\n/**\n * !#en\n * Pipeline can execute the task for some effect.\n * \n * !#zh\n * 管线能执行任务达到某个效果\n * \n * @class Pipeline\n */\nfunction Pipeline (name, funcs) {\n if (!Array.isArray(funcs)) {\n cc.warn('funcs must be an array');\n return;\n } \n \n /**\n * !#en\n * The id of pipeline\n * \n * !#zh\n * 管线的 id\n * \n * @property id\n * @type {Number}\n */\n this.id = _pipelineId++;\n\n /**\n * !#en\n * The name of pipeline\n * \n * !#zh\n * 管线的名字\n * \n * @property name\n * @type {String}\n */\n this.name = name;\n\n /**\n * !#en\n * All pipes of pipeline\n * \n * !#zh\n * 所有的管道\n * \n * @property pipes\n * @type {Function[]}\n */\n this.pipes = [];\n\n for (var i = 0, l = funcs.length; i < l; i++) {\n if (typeof funcs[i] === 'function') {\n this.pipes.push(funcs[i]);\n }\n }\n\n}\n\nPipeline.prototype = {\n\n\n /**\n * !#en\n * Create a new pipeline\n * \n * !#zh\n * 创建一个管线\n * \n * @method constructor\n * @param {string} name - The name of pipeline\n * @param {Function[]} funcs - The array of pipe, every pipe must be function which take two parameters, the first is a `Task` flowed in pipeline, the second is complete callback\n * \n * @example\n * var pipeline = new Pipeline('download', [\n * (task, done) => {\n * var url = task.input;\n * cc.assetManager.downloader.downloadFile(url, null, null, (err, result) => {\n * task.output = result;\n * done(err);\n * });\n * },\n * (task, done) => {\n * var text = task.input;\n * var json = JSON.stringify(text);\n * task.output = json;\n * done();\n * }\n * ]);\n * \n * @typescript\n * constructor(name: string, funcs: Array<(task: Task, done?: (err: Error) => void) => void>)\n */\n constructor: Pipeline,\n\n /**\n * !#en\n * At specific point insert a new pipe to pipeline\n * \n * !#zh\n * 在某个特定的点为管线插入一个新的 pipe\n * \n * @method insert\n * @param {Function} func - The new pipe\n * @param {Task} func.task - The task handled with pipeline will be transferred to this function\n * @param {Function} [func.callback] - Callback you need to invoke manually when this pipe is finished. if the pipeline is synchronous, callback is unnecessary.\n * @param {number} index - The specific point you want to insert at.\n * @return {Pipeline} pipeline\n * \n * @example\n * var pipeline = new Pipeline('test', []);\n * pipeline.insert((task, done) => {\n * // do something\n * done();\n * }, 0);\n * \n * @typescript\n * insert(func: (task: Task, callback?: (err: Error) => void) => void, index: number): Pipeline\n */\n insert (func, index) {\n if (typeof func !== 'function' || index > this.pipes.length) {\n cc.warnID(4921);\n return;\n }\n \n this.pipes.splice(index, 0, func);\n return this;\n },\n\n\n /**\n * !#en\n * Append a new pipe to the pipeline\n * \n * !#zh\n * 添加一个管道到管线中\n * \n * @method append\n * @param {Function} func - The new pipe\n * @param {Task} func.task - The task handled with pipeline will be transferred to this function\n * @param {Function} [func.callback] - Callback you need to invoke manually when this pipe is finished. if the pipeline is synchronous, callback is unnecessary.\n * @return {Pipeline} pipeline\n * \n * @example\n * var pipeline = new Pipeline('test', []);\n * pipeline.append((task, done) => {\n * // do something\n * done();\n * });\n * \n * @typescript\n * append(func: (task: Task, callback?: (err: Error) => void) => void): Pipeline\n */\n append (func) {\n if (typeof func !== 'function') {\n return;\n }\n \n this.pipes.push(func);\n return this;\n },\n\n /**\n * !#en\n * Remove pipe which at specific point\n * \n * !#zh\n * 移除特定位置的管道\n * \n * @method remove\n * @param {number} index - The specific point\n * @return {Pipeline} pipeline\n * \n * @example\n * var pipeline = new Pipeline('test', (task, done) => {\n * // do something\n * done(); \n * });\n * pipeline.remove(0);\n * \n * @typescript\n * remove(index: number): Pipeline\n */\n remove (index) {\n if (typeof index !== 'number') {\n return;\n }\n \n this.pipes.splice(index, 1);\n return this;\n },\n\n /**\n * !#en\n * Execute task synchronously\n * \n * !#zh\n * 同步执行任务\n * \n * @method sync\n * @param {Task} task - The task will be executed\n * @returns {*} result\n * \n * @example\n * var pipeline = new Pipeline('sync', [(task) => {\n * let input = task.input;\n * task.output = doSomething(task.input);\n * }]);\n * \n * var task = new Task({input: 'test'});\n * console.log(pipeline.sync(task));\n * \n * @typescript\n * sync(task: Task): any \n */\n sync (task) {\n var pipes = this.pipes;\n if (!(task instanceof Task) || pipes.length === 0) return;\n if (task.output != null) {\n task.input = task.output;\n task.output = null;\n }\n task._isFinish = false;\n for (var i = 0, l = pipes.length; i < l;) {\n var pipe = pipes[i];\n var result = pipe(task);\n if (result) {\n task._isFinish = true;\n return result;\n }\n i++;\n if (i !== l) {\n task.input = task.output;\n task.output = null;\n }\n }\n task._isFinish = true;\n return task.output;\n },\n\n /**\n * !#en\n * Execute task asynchronously\n * \n * !#zh\n * 异步执行任务\n * \n * @method async\n * @param {Task} task - The task will be executed\n * \n * @example\n * var pipeline = new Pipeline('sync', [(task, done) => {\n * let input = task.input;\n * task.output = doSomething(task.input);\n * done();\n * }]);\n * var task = new Task({input: 'test', onComplete: (err, result) => console.log(result)});\n * pipeline.async(task);\n * \n * @typescript\n * async(task: Task): void\n */\n async (task) {\n var pipes = this.pipes;\n if (!(task instanceof Task) || pipes.length === 0) return;\n if (task.output != null) {\n task.input = task.output;\n task.output = null;\n }\n task._isFinish = false;\n this._flow(0, task);\n },\n\n _flow (index, task) {\n var self = this;\n var pipe = this.pipes[index];\n pipe(task, function (result) {\n if (result) {\n task._isFinish = true;\n task.onComplete && task.onComplete(result);\n }\n else {\n index++;\n if (index < self.pipes.length) {\n // move output to input\n task.input = task.output;\n task.output = null;\n self._flow(index, task);\n }\n else {\n task._isFinish = true;\n task.onComplete && task.onComplete(result, task.output);\n }\n }\n });\n }\n};\n\nmodule.exports = Pipeline;\n","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nconst Task = require('./task');\nconst { transformPipeline, RequestType } = require('./shared');\n\nfunction preprocess (task, done) {\n var options = task.options, subOptions = Object.create(null), leftOptions = Object.create(null);\n\n for (var op in options) {\n switch (op) {\n // can't set these attributes in options\n case RequestType.PATH:\n case RequestType.UUID:\n case RequestType.DIR:\n case RequestType.SCENE:\n case RequestType.URL : break;\n // only need these attributes to transform url\n case '__requestType__':\n case '__isNative__':\n case 'ext' :\n case 'type':\n case '__nativeName__':\n case 'audioLoadMode':\n case 'bundle':\n subOptions[op] = options[op];\n break;\n // other settings, left to next pipe\n case '__exclude__':\n case '__outputAsArray__':\n leftOptions[op] = options[op];\n break;\n default: \n subOptions[op] = options[op];\n leftOptions[op] = options[op];\n break;\n }\n }\n task.options = leftOptions;\n\n // transform url\n let subTask = Task.create({input: task.input, options: subOptions});\n var err = null;\n try {\n task.output = task.source = transformPipeline.sync(subTask);\n }\n catch (e) {\n err = e;\n for (var i = 0, l = subTask.output.length; i < l; i++) {\n subTask.output[i].recycle();\n }\n }\n subTask.recycle();\n done(err);\n}\n\nmodule.exports = preprocess;","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nconst dependUtil = require('./depend-util');\nconst Cache = require('./cache');\nrequire('../assets/CCAsset');\nconst { assets } = require('./shared');\nconst { callInNextTick } = require('../platform/utils');\n\nfunction visitAsset (asset, deps) {\n // Skip assets generated programmatically or by user (e.g. label texture)\n if (!asset._uuid) {\n return;\n }\n deps.push(asset._uuid);\n}\n\nfunction visitComponent (comp, deps) {\n var props = Object.getOwnPropertyNames(comp);\n for (let i = 0; i < props.length; i++) {\n var propName = props[i];\n if (propName === 'node' || propName === '__eventTargets') continue;\n var value = comp[propName];\n if (typeof value === 'object' && value) {\n if (Array.isArray(value)) {\n for (let j = 0; j < value.length; j++) {\n let val = value[j];\n if (val instanceof cc.Asset) {\n visitAsset(val, deps);\n }\n }\n }\n else if (!value.constructor || value.constructor === Object) {\n let keys = Object.getOwnPropertyNames(value);\n for (let j = 0; j < keys.length; j++) {\n let val = value[keys[j]];\n if (val instanceof cc.Asset) {\n visitAsset(val, deps);\n }\n }\n }\n else if (value instanceof cc.Asset) {\n visitAsset(value, deps);\n }\n }\n }\n}\n\nlet _temp = [];\n\nfunction visitNode (node, deps) {\n for (let i = 0; i < node._components.length; i++) {\n visitComponent(node._components[i], deps);\n }\n for (let i = 0; i < node._children.length; i++) {\n visitNode(node._children[i], deps);\n }\n}\n\nfunction descendOpRef (asset, refs, exclude, op) {\n exclude.push(asset._uuid);\n var depends = dependUtil.getDeps(asset._uuid);\n for (let i = 0, l = depends.length; i < l; i++) {\n var dependAsset = assets.get(depends[i]);\n if (dependAsset) {\n let uuid = dependAsset._uuid;\n if (!(uuid in refs)) { \n refs[uuid] = dependAsset.refCount + op;\n }\n else {\n refs[uuid] += op;\n }\n if (exclude.includes(uuid)) continue; \n descendOpRef(dependAsset, refs, exclude, op);\n }\n }\n}\n\nfunction checkCircularReference (asset) {\n // check circular reference\n var refs = Object.create(null);\n refs[asset._uuid] = asset.refCount;\n descendOpRef(asset, refs, _temp, -1);\n _temp.length = 0;\n if (refs[asset._uuid] !== 0) return refs[asset._uuid];\n\n for (let uuid in refs) {\n if (refs[uuid] !== 0) {\n descendOpRef(assets.get(uuid), refs, _temp, 1);\n }\n }\n _temp.length = 0;\n\n return refs[asset._uuid];\n}\n\nvar _persistNodeDeps = new Cache();\nvar _toDelete = new Cache();\nvar eventListener = false;\n\nfunction freeAssets () {\n eventListener = false;\n _toDelete.forEach(function (asset) {\n releaseManager._free(asset);\n });\n _toDelete.clear();\n}\n\nvar releaseManager = {\n init () {\n _persistNodeDeps.clear();\n _toDelete.clear();\n },\n\n _addPersistNodeRef (node) {\n var deps = [];\n visitNode(node, deps);\n for (let i = 0, l = deps.length; i < l; i++) {\n var dependAsset = assets.get(deps[i]);\n if (dependAsset) {\n dependAsset.addRef();\n }\n }\n _persistNodeDeps.add(node.uuid, deps);\n },\n\n _removePersistNodeRef (node) {\n if (_persistNodeDeps.has(node.uuid)) {\n var deps = _persistNodeDeps.get(node.uuid);\n for (let i = 0, l = deps.length; i < l; i++) {\n var dependAsset = assets.get(deps[i]);\n if (dependAsset) {\n dependAsset.decRef();\n }\n }\n _persistNodeDeps.remove(node.uuid);\n }\n },\n\n // do auto release\n _autoRelease (oldScene, newScene, persistNodes) { \n\n if (oldScene) {\n var childs = dependUtil.getDeps(oldScene._id);\n for (let i = 0, l = childs.length; i < l; i++) {\n let asset = assets.get(childs[i]);\n asset && asset.decRef(CC_TEST || oldScene.autoReleaseAssets);\n }\n var dependencies = dependUtil._depends.get(oldScene._id);\n if (dependencies && dependencies.persistDeps) {\n var persistDeps = dependencies.persistDeps;\n for (let i = 0, l = persistDeps.length; i < l; i++) {\n let asset = assets.get(persistDeps[i]);\n asset && asset.decRef(CC_TEST || oldScene.autoReleaseAssets);\n }\n }\n oldScene._id !== newScene._id && dependUtil.remove(oldScene._id);\n }\n\n var sceneDeps = dependUtil._depends.get(newScene._id);\n sceneDeps && (sceneDeps.persistDeps = []);\n // transfer refs from persist nodes to new scene\n for (let key in persistNodes) {\n var node = persistNodes[key];\n var deps = _persistNodeDeps.get(node.uuid);\n for (let i = 0, l = deps.length; i < l; i++) {\n var dependAsset = assets.get(deps[i]);\n if (dependAsset) {\n dependAsset.addRef();\n }\n }\n if (sceneDeps) {\n sceneDeps.persistDeps.push.apply(sceneDeps.persistDeps, deps);\n }\n }\n },\n\n _free (asset, force) {\n _toDelete.remove(asset._uuid);\n\n if (!cc.isValid(asset, true)) return;\n\n if (!force) {\n if (asset.refCount > 0) {\n if (checkCircularReference(asset) > 0) return; \n }\n }\n \n // remove from cache\n assets.remove(asset._uuid);\n var depends = dependUtil.getDeps(asset._uuid);\n for (let i = 0, l = depends.length; i < l; i++) {\n var dependAsset = assets.get(depends[i]);\n if (dependAsset) {\n dependAsset.decRef(false);\n releaseManager._free(dependAsset, false);\n }\n }\n asset.destroy();\n dependUtil.remove(asset._uuid);\n },\n\n tryRelease (asset, force) {\n if (!(asset instanceof cc.Asset)) return;\n if (force) {\n releaseManager._free(asset, force);\n }\n else {\n _toDelete.add(asset._uuid, asset);\n if (!eventListener) {\n eventListener = true;\n callInNextTick(freeAssets);\n }\n }\n }\n};\n\nmodule.exports = releaseManager;","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * @module cc.AssetManager\n */\n\nvar MAX_DEAD_NUM = 500;\nvar _deadPool = [];\n\n/**\n * !#en\n * A collection of information about a request\n * \n * !#zh\n * 请求的相关信息集合\n * \n * @class RequestItem\n */\nfunction RequestItem () {\n\n this._id = '';\n\n /**\n * !#en \n * The uuid of request\n * \n * !#zh \n * 请求资源的uuid\n * \n * @property uuid\n * @type {String}\n */\n this.uuid = '';\n\n /**\n * !#en \n * The final url of request\n * \n * !#zh\n * 请求的最终url\n * \n * @property url\n * @type {String}\n */\n this.url = '';\n\n /**\n * !#en\n * The extension name of asset\n * \n * !#zh\n * 资源的扩展名\n * \n * @property ext\n * @type {String}\n */\n this.ext = '.json';\n\n /**\n * !#en\n * The content of asset\n * \n * !#zh\n * 资源的内容\n * \n * @property content\n * @type {*}\n */\n this.content = null;\n\n /**\n * !#en\n * The file of asset\n * \n * !#zh\n * 资源的文件\n * \n * @property file\n * @type {*}\n */\n this.file = null;\n\n /**\n * !#en\n * The information of asset\n * \n * !#zh\n * 资源的相关信息\n * \n * @property info\n * @type {Object}\n */\n this.info = null;\n\n this.config = null;\n\n /**\n * !#en\n * Whether or not it is native asset\n * \n * !#zh\n * 资源是否是原生资源\n * \n * @property isNative\n * @type {Boolean}\n */\n this.isNative = false;\n\n /**\n * !#en\n * Custom options\n * \n * !#zh\n * 自定义参数\n * \n * @property options\n * @type {Object}\n */\n this.options = Object.create(null);\n}\n\nRequestItem.prototype = {\n\n /**\n * !#en\n * Create a request item\n * \n * !#zh\n * 创建一个 request item\n * \n * @method constructor\n * \n * @typescript\n * constructor()\n */\n constructor: RequestItem,\n\n /**\n * !#en\n * The id of request, combined from uuid and isNative\n * \n * !#zh\n * 请求的 id, 由 uuid 和 isNative 组合而成\n * \n * @property id\n * @type {String}\n */\n get id () {\n if (!this._id) {\n this._id = this.uuid + '@' + (this.isNative ? 'native' : 'import');\n }\n return this._id;\n },\n\n /**\n * !#en\n * Recycle this for reuse\n * \n * !#zh\n * 回收 requestItem 用于复用\n * \n * @method recycle\n * \n * @typescript\n * recycle(): void\n */\n recycle () {\n if (_deadPool.length === MAX_DEAD_NUM) return;\n this._id = '';\n this.uuid = '';\n this.url = '';\n this.ext = '.json';\n this.content = null;\n this.file = null;\n this.info = null;\n this.config = null;\n this.isNative = false;\n this.options = Object.create(null);\n _deadPool.push(this);\n }\n};\n\n/**\n * !#en\n * Create a new request item from pool\n * \n * !#zh\n * 从对象池中创建 requestItem\n * \n * @static\n * @method create\n * @returns {RequestItem} requestItem\n * \n * @typescript \n * create(): RequestItem\n */\nRequestItem.create = function () {\n var out = null;\n if (_deadPool.length !== 0) {\n out = _deadPool.pop();\n }\n else {\n out = new RequestItem();\n }\n\n return out;\n};\n\nmodule.exports = RequestItem;","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nconst Cache = require('./cache');\nconst Pipeline = require('./pipeline');\n\nvar assets = new Cache();\nvar files = new Cache();\nvar parsed = new Cache();\nvar bundles = new Cache();\nvar pipeline = new Pipeline('normal load', []);\nvar fetchPipeline = new Pipeline('fetch', []);\nvar transformPipeline = new Pipeline('transform url', []);\n\n/**\n * @module cc.AssetManager\n */\n\nvar RequestType = {\n \n UUID: 'uuid',\n\n PATH: 'path',\n\n DIR: 'dir',\n\n URL: 'url',\n\n SCENE: 'scene'\n};\n\n/**\n * !#en\n * The builtin bundles \n * \n * !#zh\n * 内置 bundle\n * \n * @enum BuiltinBundleName\n */\nvar BuiltinBundleName = {\n /**\n * !#en\n * The builtin bundle corresponds to 'assets/resources'.\n * \n * !#zh\n * 内置 bundle, 对应 'assets/resources' 目录\n * \n * @property RESOURCES\n * @readonly\n * @type {String}\n */\n RESOURCES: 'resources',\n\n /**\n * !#en\n * The builtin bundle corresponds to 'internal/resources'.\n * \n * !#zh\n * 内置 bundle, 对应 'internal/resources' 目录\n * \n * @property INTERNAL\n * @readonly\n * @type {String}\n */\n INTERNAL: 'internal',\n\n /**\n * !#en\n * The builtin bundle\n * \n * !#zh\n * 内置 bundle\n * \n * @property MAIN\n * @readonly\n * @type {String}\n */\n MAIN: 'main',\n\n /**\n * !#en\n * The builtin bundle, exists when Start Scene asset bundle is checked on the project building panel\n * \n * !#zh\n * 内置 bundle, 如果构建面板开启了首场景分包,则会有 START_SCENE bundle\n * \n * @property START_SCENE\n * @readonly\n * @type {String}\n */\n START_SCENE: 'start-scene',\n};\n\nmodule.exports = { assets, files, parsed, pipeline, fetchPipeline, transformPipeline, RequestType, bundles, BuiltinBundleName };","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * @module cc.AssetManager\n */\n\nvar _taskId = 0;\nvar MAX_DEAD_NUM = 500;\nvar _deadPool = [];\n\n/**\n * !#en\n * Task is used to run in the pipeline for some effect\n * \n * !#zh\n * 任务用于在管线中运行以达成某种效果\n * \n * @class Task\n */\nfunction Task (options) {\n /**\n * !#en\n * The id of task\n * \n * !#zh\n * 任务id\n * \n * @property id\n * @type {Number}\n */\n this.id = _taskId++;\n\n this._isFinish = true;\n\n /**\n * !#en\n * The callback when task is completed\n * \n * !#zh\n * 完成回调\n * \n * @property onComplete\n * @type {Function}\n */\n this.onComplete = null;\n\n /**\n * !#en\n * The callback of progression\n * \n * !#zh\n * 进度回调\n * \n * @property onProgress\n * @type {Function}\n */\n this.onProgress = null;\n\n /**\n * !#en\n * The callback when something goes wrong\n * \n * !#zh\n * 错误回调\n * \n * @property onError\n * @type {Function}\n */\n this.onError = null;\n\n /**\n * !#en\n * The source of task\n * \n * !#zh\n * 任务的源\n * \n * @property source\n * @type {*}\n */\n this.source = null;\n\n /**\n * !#en\n * The output of task\n * \n * !#zh\n * 任务的输出\n * \n * @property output\n * @type {*}\n */\n this.output = null\n\n /**\n * !#en\n * The input of task\n * \n * !#zh\n * 任务的输入\n * \n * @property input\n * @type {*}\n */\n this.input = null;\n\n /**\n * !#en\n * The progression of task\n * \n * !#zh\n * 任务的进度\n * \n * @property progress\n * @type {*}\n */\n this.progress = null;\n\n /**\n * !#en\n * Custom options\n * \n * !#zh\n * 自定义参数\n * \n * @property options\n * @type {Object}\n */\n this.options = null;\n this.set(options);\n};\n\nTask.prototype = {\n \n /**\n * !#en\n * Create a new Task\n * \n * !#zh\n * 创建一个任务\n * \n * @method constructor\n * @param {Object} [options] - Some optional paramters\n * @param {Function} [options.onComplete] - Callback when the task is completed, if the pipeline is synchronous, onComplete is unnecessary.\n * @param {Function} [options.onProgress] - Continuously callback when the task is runing, if the pipeline is synchronous, onProgress is unnecessary.\n * @param {Function} [options.onError] - Callback when something goes wrong, if the pipeline is synchronous, onError is unnecessary.\n * @param {*} options.input - Something will be handled with pipeline\n * @param {*} [options.progress] - Progress information, you may need to assign it manually when multiple pipeline share one progress\n * @param {Object} [options.options] - Custom parameters\n * \n * @typescript\n * constructor(options?: {onComplete?: (err: Error, result: any) => void, onError?: () => void, onProgress?: Function, input: any, progress?: any, options?: Record})\n */\n constructor: Task,\n\n /**\n * !#en\n * Set paramters of this task\n * \n * !#zh\n * 设置任务的参数\n * \n * @method set\n * @param {Object} [options] - Some optional paramters\n * @param {Function} [options.onComplete] - Callback when the task complete, if the pipeline is synchronous, onComplete is unnecessary.\n * @param {Function} [options.onProgress] - Continuously callback when the task is runing, if the pipeline is synchronous, onProgress is unnecessary.\n * @param {Function} [options.onError] - Callback when something goes wrong, if the pipeline is synchronous, onError is unnecessary.\n * @param {*} options.input - Something will be handled with pipeline\n * @param {*} [options.progress] - Progress information, you may need to assign it manually when multiple pipeline share one progress\n * @param {Object} [options.options] - Custom parameters\n * \n * @example \n * var task = new Task();\n * task.set({input: ['test'], onComplete: (err, result) => console.log(err), onProgress: (finish, total) => console.log(finish / total)});\n * \n * @typescript\n * set(options?: {onComplete?: (err: Error, result: any) => void, onError?: () => void, onProgress?: Function, input: any, progress?: any, options?: Record}): void\n */\n set (options) {\n options = options || Object.create(null);\n this.onComplete = options.onComplete;\n this.onProgress = options.onProgress;\n this.onError = options.onError;\n this.source = this.input = options.input;\n this.output = null;\n this.progress = options.progress;\n // custom data\n this.options = options.options || Object.create(null);\n },\n\n /**\n * !#en\n * Dispatch event\n * \n * !#zh\n * 发布事件\n * \n * @method dispatch\n * @param {string} event - The event name\n * @param {*} param1 - Parameter 1\n * @param {*} param2 - Parameter 2\n * @param {*} param3 - Parameter 3\n * @param {*} param4 - Parameter 4\n * \n * @example\n * var task = Task.create();\n * Task.onComplete = (msg) => console.log(msg);\n * Task.dispatch('complete', 'hello world');\n * \n * @typescript\n * dispatch(event: string, param1?: any, param2?: any, param3?: any, param4?: any): void\n */\n dispatch (event, param1, param2, param3, param4) {\n switch (event) {\n case 'complete' :\n this.onComplete && this.onComplete(param1, param2, param3, param4);\n break; \n case 'progress': \n this.onProgress && this.onProgress(param1, param2, param3, param4);\n break;\n case 'error': \n this.onError && this.onError(param1, param2, param3, param4);\n break;\n default:\n var str = 'on' + event[0].toUpperCase() + event.substr(1);\n if (typeof this[str] === 'function') {\n this[str](param1, param2, param3, param4);\n }\n break;\n }\n },\n\n /**\n * !#en\n * Recycle this for reuse\n * \n * !#zh\n * 回收 task 用于复用\n * \n * @method recycle\n * \n * @typescript\n * recycle(): void\n */\n recycle () {\n if (_deadPool.length === MAX_DEAD_NUM) return;\n this.onComplete = null;\n this.onProgress = null;\n this.onError = null;\n this.source = this.output = this.input = null;\n this.progress = null;\n this.options = null;\n _deadPool.push(this);\n },\n\n /**\n * !#en\n * Whether or not this task is completed\n * \n * !#zh\n * 此任务是否已经完成\n * \n * @property isFinish\n * @type {Boolean}\n */\n get isFinish () {\n return this._isFinish;\n }\n};\n\n/**\n * !#en\n * Create a new task from pool\n * \n * !#zh\n * 从对象池中创建 task\n * \n * @static\n * @method create\n * @param {Object} [options] - Some optional paramters\n * @param {Function} [options.onComplete] - Callback when the task complete, if the pipeline is synchronous, onComplete is unnecessary.\n * @param {Function} [options.onProgress] - Continuously callback when the task is runing, if the pipeline is synchronous, onProgress is unnecessary.\n * @param {Function} [options.onError] - Callback when something goes wrong, if the pipeline is synchronous, onError is unnecessary.\n * @param {*} options.input - Something will be handled with pipeline\n * @param {*} [options.progress] - Progress information, you may need to assign it manually when multiple pipeline share one progress\n * @param {Object} [options.options] - Custom parameters\n * @returns {Task} task\n * \n * @typescript \n * create(options?: {onComplete?: (err: Error, result: any) => void, onError?: () => void, onProgress?: Function, input: any, progress?: any, options?: Record}): Task\n */\nTask.create = function (options) {\n var out = null;\n if (_deadPool.length !== 0) {\n out = _deadPool.pop();\n out.set(options);\n }\n else {\n out = new Task(options);\n }\n\n return out;\n};\n\nmodule.exports = Task;","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nconst { decodeUuid } = require('./helper');\nconst RequestItem = require('./request-item');\nconst { RequestType, bundles } = require('./shared');\n\nfunction parse (task) {\n\n var input = task.input, options = task.options;\n input = Array.isArray(input) ? input : [ input ];\n\n task.output = [];\n for (var i = 0; i < input.length; i ++ ) {\n var item = input[i];\n var out = RequestItem.create();\n if (typeof item === 'string') {\n item = Object.create(null);\n item[options.__requestType__ || RequestType.UUID] = input[i];\n }\n if (typeof item === 'object') {\n // local options will overlap glabal options\n cc.js.addon(item, options);\n if (item.preset) {\n cc.js.addon(item, cc.assetManager.presets[item.preset]);\n }\n for (var key in item) {\n switch (key) {\n case RequestType.UUID: \n var uuid = out.uuid = decodeUuid(item.uuid);\n if (bundles.has(item.bundle)) {\n var config = bundles.get(item.bundle)._config;\n var info = config.getAssetInfo(uuid);\n if (info && info.redirect) {\n if (!bundles.has(info.redirect)) throw new Error(`Please load bundle ${info.redirect} first`);\n config = bundles.get(info.redirect)._config;\n info = config.getAssetInfo(uuid);\n }\n out.config = config;\n out.info = info;\n }\n out.ext = item.ext || '.json';\n break;\n case '__requestType__':\n case 'ext': \n case 'bundle':\n case 'preset':\n case 'type': break;\n case RequestType.DIR: \n if (bundles.has(item.bundle)) {\n var infos = [];\n bundles.get(item.bundle)._config.getDirWithPath(item.dir, item.type, infos);\n for (let i = 0, l = infos.length; i < l; i++) {\n var info = infos[i];\n input.push({uuid: info.uuid, __isNative__: false, ext: '.json', bundle: item.bundle});\n }\n }\n out.recycle();\n out = null;\n break;\n case RequestType.PATH: \n if (bundles.has(item.bundle)) {\n var config = bundles.get(item.bundle)._config;\n var info = config.getInfoWithPath(item.path, item.type);\n \n if (info && info.redirect) {\n if (!bundles.has(info.redirect)) throw new Error(`you need to load bundle ${info.redirect} first`);\n config = bundles.get(info.redirect)._config;\n info = config.getAssetInfo(info.uuid);\n }\n\n if (!info) {\n out.recycle();\n throw new Error(`Bundle ${item.bundle} doesn't contain ${item.path}`);\n }\n out.config = config; \n out.uuid = info.uuid;\n out.info = info;\n }\n out.ext = item.ext || '.json';\n break;\n case RequestType.SCENE:\n if (bundles.has(item.bundle)) {\n var config = bundles.get(item.bundle)._config;\n var info = config.getSceneInfo(item.scene);\n \n if (info && info.redirect) {\n if (!bundles.has(info.redirect)) throw new Error(`you need to load bundle ${info.redirect} first`);\n config = bundles.get(info.redirect)._config;\n info = config.getAssetInfo(info.uuid);\n }\n if (!info) {\n out.recycle();\n throw new Error(`Bundle ${config.name} doesn't contain scene ${item.scene}`);\n }\n out.config = config; \n out.uuid = info.uuid;\n out.info = info;\n }\n break;\n case '__isNative__': \n out.isNative = item.__isNative__;\n break;\n case RequestType.URL: \n out.url = item.url;\n out.uuid = item.uuid || item.url;\n out.ext = item.ext || cc.path.extname(item.url);\n out.isNative = item.__isNative__ !== undefined ? item.__isNative__ : true;\n break;\n default: out.options[key] = item[key];\n }\n if (!out) break;\n }\n }\n if (!out) continue;\n task.output.push(out);\n if (!out.uuid && !out.url) throw new Error('Can not parse this input:' + JSON.stringify(item));\n }\n return null;\n}\n\nfunction combine (task) {\n var input = task.output = task.input;\n for (var i = 0; i < input.length; i++) {\n var item = input[i];\n if (item.url) continue;\n\n var url = '', base = '';\n var config = item.config;\n if (item.isNative) {\n base = (config && config.nativeBase) ? (config.base + config.nativeBase) : cc.assetManager.generalNativeBase;\n } \n else {\n base = (config && config.importBase) ? (config.base + config.importBase) : cc.assetManager.generalImportBase;\n }\n\n let uuid = item.uuid;\n \n var ver = '';\n if (item.info) {\n if (item.isNative) {\n ver = item.info.nativeVer ? ('.' + item.info.nativeVer) : '';\n }\n else {\n ver = item.info.ver ? ('.' + item.info.ver) : '';\n }\n }\n\n // ugly hack, WeChat does not support loading font likes 'myfont.dw213.ttf'. So append hash to directory\n if (item.ext === '.ttf') {\n url = `${base}/${uuid.slice(0, 2)}/${uuid}${ver}/${item.options.__nativeName__}`;\n }\n else {\n url = `${base}/${uuid.slice(0, 2)}/${uuid}${ver}${item.ext}`;\n }\n \n item.url = url;\n }\n return null;\n}\n\nmodule.exports = { parse, combine };","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nconst dependUtil = require('./depend-util');\nconst { isScene, decodeUuid } = require('./helper');\nconst { assets } = require('./shared');\nconst { callInNextTick } = require('../platform/utils');\nconst MissingObjectReporter = CC_EDITOR && Editor.require('app://editor/page/scene-utils/missing-object-reporter');\nrequire('../assets/CCAsset');\n\nvar utils = {\n\n processOptions (options) {\n if (CC_EDITOR) return;\n var uuids = options.uuids;\n var paths = options.paths;\n var types = options.types;\n var bundles = options.deps;\n var realEntries = options.paths = Object.create(null);\n\n if (options.debug === false) {\n for (let i = 0, l = uuids.length; i < l; i++) {\n uuids[i] = decodeUuid(uuids[i]);\n }\n\n for (let id in paths) {\n let entry = paths[id];\n let type = entry[1];\n entry[1] = types[type];\n }\n }\n else {\n var out = Object.create(null);\n for (let i = 0, l = uuids.length; i < l; i++) {\n let uuid = uuids[i];\n uuids[i] = out[uuid] = decodeUuid(uuid);\n }\n uuids = out;\n }\n\n for (let id in paths) {\n let entry = paths[id];\n realEntries[uuids[id]] = entry;\n }\n\n var scenes = options.scenes;\n for (let name in scenes) {\n let uuid = scenes[name];\n scenes[name] = uuids[uuid];\n }\n\n var packs = options.packs;\n for (let packId in packs) {\n let packedIds = packs[packId];\n for (let j = 0; j < packedIds.length; ++j) {\n packedIds[j] = uuids[packedIds[j]];\n }\n }\n\n var versions = options.versions;\n if (versions) {\n for (let folder in versions) {\n var entries = versions[folder];\n for (let i = 0; i < entries.length; i += 2) {\n let uuid = entries[i];\n entries[i] = uuids[uuid] || uuid;\n }\n }\n }\n\n var redirect = options.redirect;\n if (redirect) {\n for (let i = 0; i < redirect.length; i += 2) {\n redirect[i] = uuids[redirect[i]];\n redirect[i + 1] = bundles[redirect[i + 1]];\n }\n }\n\n },\n\n clear (task, clearRef) {\n for (var i = 0, l = task.input.length; i < l; i++) {\n var item = task.input[i];\n if (clearRef) {\n !item.isNative && item.content && item.content.decRef && item.content.decRef(false);\n }\n item.recycle();\n }\n task.input = null;\n },\n\n urlAppendTimestamp (url) {\n if (cc.assetManager.downloader.appendTimeStamp && typeof url === 'string') {\n if (/\\?/.test(url))\n return url + '&_t=' + (new Date() - 0);\n else\n return url + '?_t=' + (new Date() - 0);\n }\n return url;\n },\n\n retry (process, times, wait, onComplete, index) {\n index = index || 0;\n process(index, function (err, result) {\n index++;\n if (!err || index > times) {\n onComplete && onComplete(err, result);\n }\n else {\n setTimeout(function () {\n utils.retry(process, times, wait, onComplete, index);\n }, wait);\n }\n });\n },\n\n getDepends (uuid, data, exclude, depends, preload, asyncLoadAssets, config) {\n try {\n var info = dependUtil.parse(uuid, data);\n var includeNative = true;\n if (data instanceof cc.Asset && (!data.__nativeDepend__ || data._nativeAsset)) includeNative = false; \n if (!preload) {\n asyncLoadAssets = !CC_EDITOR && (!!data.asyncLoadAssets || (asyncLoadAssets && !info.preventDeferredLoadDependents));\n for (let i = 0, l = info.deps.length; i < l; i++) {\n let dep = info.deps[i];\n if (!(dep in exclude)) {\n exclude[dep] = true;\n depends.push({uuid: dep, __asyncLoadAssets__: asyncLoadAssets, bundle: config && config.name});\n }\n }\n\n if (includeNative && !asyncLoadAssets && !info.preventPreloadNativeObject && info.nativeDep) {\n config && (info.nativeDep.bundle = config.name);\n depends.push(Object.assign({}, info.nativeDep));\n }\n \n } else {\n for (let i = 0, l = info.deps.length; i < l; i++) {\n let dep = info.deps[i];\n if (!(dep in exclude)) {\n exclude[dep] = true;\n depends.push({uuid: dep, bundle: config && config.name});\n }\n }\n if (includeNative && info.nativeDep) {\n config && (info.nativeDep.bundle = config.name);\n depends.push(Object.assign({}, info.nativeDep));\n }\n }\n }\n catch (e) {\n cc.error(e.message, e.stack);\n }\n },\n \n cache (id, asset, cacheAsset) {\n if (!asset) return;\n var _isScene = isScene(asset);\n if (!_isScene && cacheAsset) {\n assets.add(id, asset);\n }\n if (_isScene) {\n if (CC_EDITOR && !asset.scene) {\n Editor.error('Sorry, the scene data of \"%s\" is corrupted!', asset._uuid);\n }\n }\n },\n\n setProperties (uuid, asset, assetsMap) {\n\n var missingAsset = false;\n let depends = asset.__depends__;\n if (depends) {\n var missingAssetReporter = null;\n for (var i = 0, l = depends.length; i < l; i++) {\n var depend = depends[i];\n var dependAsset = assetsMap[depend.uuid + '@import'];\n if (!dependAsset) {\n if (CC_EDITOR) {\n !missingAssetReporter && (missingAssetReporter = new MissingObjectReporter(asset));\n missingAssetReporter.stashByOwner(depend.owner, depend.prop, Editor.serialize.asAsset(depend.uuid));\n }\n else {\n cc.error('The asset ' + depend.uuid + ' is missing!');\n }\n missingAsset = true;\n }\n else {\n depend.owner[depend.prop] = dependAsset.addRef();\n }\n }\n\n missingAssetReporter && missingAssetReporter.reportByOwner();\n asset.__depends__ = undefined;\n }\n \n if (asset.__nativeDepend__) {\n if (!asset._nativeAsset) {\n if (assetsMap[uuid + '@native']) {\n asset._nativeAsset = assetsMap[uuid + '@native'];\n }\n else {\n missingAsset = true;\n if (CC_EDITOR) {\n console.error(`the native asset of ${uuid} is missing!`);\n }\n }\n }\n asset.__nativeDepend__ = undefined;\n }\n return missingAsset;\n },\n\n gatherAsset (task) {\n let source = task.source;\n if (!task.options.__outputAsArray__ && source.length === 1) {\n task.output = source[0].content;\n }\n else {\n let output = task.output = [];\n for (var i = 0, l = source.length; i < l; i++) {\n output.push(source[i].content);\n }\n }\n },\n\n forEach (array, process, onComplete) {\n var count = 0;\n var errs = [];\n if (array.length === 0) onComplete && onComplete(errs);\n for (var i = 0, l = array.length; i < l; i++) {\n process(array[i], function (err) {\n if (err) {\n errs.push(err);\n }\n count ++;\n if (count === l) {\n onComplete && onComplete(errs);\n }\n });\n }\n },\n\n parseParameters (options, onProgress, onComplete) {\n if (onComplete === undefined) {\n var isCallback = typeof options === 'function';\n if (onProgress) {\n onComplete = onProgress;\n if (!isCallback) {\n onProgress = null;\n }\n }\n else if (onProgress === undefined && isCallback) {\n onComplete = options;\n options = null;\n onProgress = null;\n }\n if (onProgress !== undefined && isCallback) {\n onProgress = options;\n options = null;\n }\n }\n options = options || Object.create(null);\n return { options, onProgress, onComplete };\n },\n\n parseLoadResArgs (type, onProgress, onComplete) {\n if (onComplete === undefined) {\n var isValidType = cc.js.isChildClassOf(type, cc.Asset);\n if (onProgress) {\n onComplete = onProgress;\n if (isValidType) {\n onProgress = null;\n }\n }\n else if (onProgress === undefined && !isValidType) {\n onComplete = type;\n onProgress = null;\n type = null;\n }\n if (onProgress !== undefined && !isValidType) {\n onProgress = type;\n type = null;\n }\n }\n return { type, onProgress, onComplete };\n },\n\n checkCircleReference (owner, uuid, map, checked) {\n if (!checked) { \n checked = Object.create(null);\n }\n let item = map[uuid];\n if (!item || checked[uuid]) {\n return false;\n }\n checked[uuid] = true;\n var result = false;\n var deps = dependUtil.getDeps(uuid);\n if (deps) {\n for (var i = 0, l = deps.length; i < l; i++) {\n var dep = deps[i];\n if (dep === owner || utils.checkCircleReference(owner, dep, map, checked)) {\n result = true;\n break;\n }\n }\n }\n return result;\n },\n\n asyncify (cb) {\n return function (p1, p2) {\n if (!cb) return;\n let refs = [];\n if (Array.isArray(p2)) {\n p2.forEach(x => x instanceof cc.Asset && refs.push(x.addRef()));\n } else {\n p2 instanceof cc.Asset && refs.push(p2.addRef());\n }\n callInNextTick(() => {\n refs.forEach(x => x.decRef(false));\n cb(p1, p2);\n }); \n }\n }\n};\n\nmodule.exports = utils;","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar CCObject = require('../platform/CCObject');\n\n/**\n * !#en\n * Base class for handling assets used in Creator.
\n *\n * You may want to override:
\n * - createNode
\n * - getset functions of _nativeAsset
\n * - cc.Object._serialize
\n * - cc.Object._deserialize
\n * !#zh\n * Creator 中的资源基类。
\n *\n * 您可能需要重写:
\n * - createNode
\n * - _nativeAsset 的 getset 方法
\n * - cc.Object._serialize
\n * - cc.Object._deserialize
\n *\n * @class Asset\n * @extends Object\n */\ncc.Asset = cc.Class({\n name: 'cc.Asset', extends: CCObject,\n\n ctor () {\n /**\n * @property {String} _uuid\n * @private\n */\n // enumerable is false by default, to avoid uuid being assigned to empty string during destroy\n Object.defineProperty(this, '_uuid', {\n value: '',\n writable: true,\n });\n /**\n * !#en\n * Whether the asset is loaded or not.\n * !#zh\n * 该资源是否已经成功加载。\n *\n * @property loaded\n * @type {Boolean}\n */\n this.loaded = true;\n this._nativeUrl = '';\n this._ref = 0;\n },\n\n properties: {\n /**\n * !#en\n * Returns the url of this asset's native object, if none it will returns an empty string.\n * !#zh\n * 返回该资源对应的目标平台资源的 URL,如果没有将返回一个空字符串。\n * @property nativeUrl\n * @type {String}\n * @readOnly\n */\n nativeUrl: {\n get: function () {\n if (!this._nativeUrl) {\n if (this._native) {\n var name = this._native;\n if (name.charCodeAt(0) === 47) { // '/'\n // remove library tag\n // not imported in library, just created on-the-fly\n return name.slice(1);\n }\n if (name.charCodeAt(0) === 46) { // '.'\n // imported in dir where json exist\n this._nativeUrl = cc.assetManager.utils.getUrlWithUuid(this._uuid, {nativeExt: name, isNative: true });\n }\n else {\n // imported in an independent dir\n this._nativeUrl = cc.assetManager.utils.getUrlWithUuid(this._uuid, {__nativeName__: name, nativeExt: cc.path.extname(name), isNative: true});\n }\n }\n }\n return this._nativeUrl;\n },\n visible: false\n },\n\n /**\n * !#en\n * The number of reference\n * \n * !#zh\n * 引用的数量\n * \n * @property refCount\n * @type {Number}\n */\n refCount: {\n get () {\n return this._ref;\n }\n },\n\n /**\n * !#en\n * Serializable url for native asset.\n * !#zh\n * 保存原生资源的 URL。\n * @property {String} _native\n * @default undefined\n * @private\n */\n _native: \"\",\n\n /**\n * !#en\n * The underlying native asset of this asset if one is available.\n * This property can be used to access additional details or functionality releated to the asset.\n * This property will be initialized by the loader if `_native` is available.\n * !#zh\n * 此资源依赖的底层原生资源(如果有的话)。\n * 此属性可用于访问与资源相关的其他详细信息或功能。\n * 如果 `_native` 可用,则此属性将由加载器初始化。\n * @property {Object} _nativeAsset\n * @default null\n * @private\n */\n _nativeAsset: {\n get () {\n return this._$nativeAsset;\n },\n set (obj) {\n this._$nativeAsset = obj;\n }\n },\n\n _nativeDep: {\n get () {\n if (this._native) {\n return {__isNative__: true, uuid: this._uuid, ext: this._native};\n }\n }\n }\n },\n\n statics: {\n /**\n * !#en\n * Provide this method at the request of AssetDB.\n * !#zh\n * 应 AssetDB 要求提供这个方法。\n *\n * @method deserialize\n * @param {String} data\n * @return {Asset}\n * @static\n * @private\n */\n deserialize: CC_EDITOR && function (data) {\n return cc.deserialize(data);\n },\n\n /**\n * !#en Indicates whether its dependent raw assets can support deferred load if the owner scene (or prefab) is marked as `asyncLoadAssets`.\n * !#zh 当场景或 Prefab 被标记为 `asyncLoadAssets`,禁止延迟加载该资源所依赖的其它原始资源。\n *\n * @property {Boolean} preventDeferredLoadDependents\n * @default false\n * @static\n */\n preventDeferredLoadDependents: false,\n\n /**\n * !#en Indicates whether its native object should be preloaded from native url.\n * !#zh 禁止预加载原生对象。\n *\n * @property {Boolean} preventPreloadNativeObject\n * @default false\n * @static\n */\n preventPreloadNativeObject: false\n\n },\n\n /**\n * !#en\n * Returns the asset's url.\n\n * The `Asset` object overrides the `toString()` method of the `Object` object.\n * For `Asset` objects, the `toString()` method returns a string representation of the object.\n * JavaScript calls the `toString()` method automatically when an asset is to be represented as a text value or when a texture is referred to in a string concatenation.\n * !#zh\n * 返回资源的 URL。\n * \n * Asset 对象将会重写 Object 对象的 `toString()` 方法。\n * 对于 Asset 对象,`toString()` 方法返回该对象的字符串表示形式。\n * 当资源要表示为文本值时或在字符串连接时引用时,JavaScript 会自动调用 `toString()` 方法。\n * @method toString\n * @return {String}\n */\n toString () {\n return this.nativeUrl;\n },\n\n /**\n * !#en\n * Provide this method at the request of AssetDB.\n * !#zh\n * 应 AssetDB 要求提供这个方法。\n *\n * @method serialize\n * @return {String}\n * @private\n */\n serialize: CC_EDITOR && function () {\n return Editor.serialize(this);\n },\n\n /**\n * !#en\n * Create a new node using this asset in the scene.
\n * If this type of asset dont have its corresponding node type, this method should be null.\n * !#zh\n * 使用该资源在场景中创建一个新节点。
\n * 如果这类资源没有相应的节点类型,该方法应该是空的。\n *\n * @method createNode\n * @param {Function} callback\n * @param {String} callback.error - null or the error info\n * @param {Object} callback.node - the created node or null\n */\n createNode: null,\n\n /**\n * !#en\n * Set native file name for this asset.\n * !#zh\n * 为此资源设置原生文件名。\n * \n * @seealso nativeUrl\n *\n * @method _setRawAsset\n * @param {String} filename\n * @param {Boolean} [inLibrary=true]\n * @private\n */\n _setRawAsset: function (filename, inLibrary) {\n if (inLibrary !== false) {\n this._native = filename || undefined;\n }\n else {\n this._native = '/' + filename; // simply use '/' to tag location where is not in the library\n }\n },\n\n /**\n * !#en\n * Add references of asset\n * \n * !#zh\n * 增加资源的引用\n * \n * @method addRef\n * @return {Asset} itself\n * \n * @typescript\n * addRef(): cc.Asset\n */\n addRef () {\n this._ref++;\n return this;\n },\n\n /**\n * !#en\n * Reduce references of asset and it will be auto released when refCount equals 0.\n * \n * !#zh\n * 减少资源的引用并尝试进行自动释放。\n * \n * @method decRef\n * @return {Asset} itself\n * \n * @typescript\n * decRef(): cc.Asset\n */\n decRef (autoRelease) {\n this._ref > 0 && this._ref--;\n autoRelease !== false && cc.assetManager._releaseManager.tryRelease(this);\n return this;\n }\n});\n\nmodule.exports = cc.Asset;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst Asset = require('./CCAsset');\nconst EventTarget = require('../event/event-target');\n\nvar LoadMode = cc.Enum({\n WEB_AUDIO: 0,\n DOM_AUDIO: 1,\n});\n\n/**\n * !#en Class for audio data handling.\n * !#zh 音频资源类。\n * @class AudioClip\n * @extends Asset\n * @uses EventTarget\n */\nvar AudioClip = cc.Class({\n name: 'cc.AudioClip',\n extends: Asset,\n mixins: [EventTarget],\n\n ctor () {\n this._loading = false;\n this.loaded = false;\n\n // the web audio buffer or
Text',\n multiline: true,\n tooltip: CC_DEV && 'i18n:COMPONENT.richtext.string',\n notify: function () {\n this._updateRichTextStatus();\n }\n },\n\n /**\n * !#en Horizontal Alignment of each line in RichText.\n * !#zh 文本内容的水平对齐方式。\n * @property {macro.TextAlignment} horizontalAlign\n */\n horizontalAlign: {\n default: HorizontalAlign.LEFT,\n type: HorizontalAlign,\n tooltip: CC_DEV && 'i18n:COMPONENT.richtext.horizontal_align',\n animatable: false,\n notify: function (oldValue) {\n if (this.horizontalAlign === oldValue) return;\n\n this._layoutDirty = true;\n this._updateRichTextStatus();\n }\n },\n\n /**\n * !#en Font size of RichText.\n * !#zh 富文本字体大小。\n * @property {Number} fontSize\n */\n fontSize: {\n default: 40,\n tooltip: CC_DEV && 'i18n:COMPONENT.richtext.font_size',\n notify: function (oldValue) {\n if (this.fontSize === oldValue) return;\n\n this._layoutDirty = true;\n this._updateRichTextStatus();\n }\n },\n\n /**\n * !#en Custom System font of RichText\n * !#zh 富文本定制系统字体\n * @property {String} fontFamily\n */\n _fontFamily: \"Arial\",\n fontFamily: {\n tooltip: CC_DEV && 'i18n:COMPONENT.richtext.font_family',\n get () {\n return this._fontFamily;\n },\n set (value) {\n if (this._fontFamily === value) return;\n this._fontFamily = value;\n this._layoutDirty = true;\n this._updateRichTextStatus();\n },\n animatable: false\n },\n\n /**\n * !#en Custom TTF font of RichText\n * !#zh 富文本定制字体\n * @property {cc.TTFFont} font\n */\n font: {\n default: null,\n type: cc.TTFFont,\n tooltip: CC_DEV && 'i18n:COMPONENT.richtext.font',\n notify: function (oldValue) {\n if (this.font === oldValue) return;\n\n this._layoutDirty = true;\n if (this.font) {\n if (CC_EDITOR) {\n this._userDefinedFont = this.font;\n }\n this.useSystemFont = false;\n this._onTTFLoaded();\n }\n else {\n this.useSystemFont = true;\n }\n this._updateRichTextStatus();\n }\n },\n\n /**\n * !#en Whether use system font name or not.\n * !#zh 是否使用系统字体。\n * @property {Boolean} useSystemFont\n */\n _isSystemFontUsed: true,\n useSystemFont: {\n get () {\n return this._isSystemFontUsed;\n },\n set (value) {\n if (this._isSystemFontUsed === value) {\n return;\n }\n this._isSystemFontUsed = value;\n\n if (CC_EDITOR) {\n if (value) {\n this.font = null;\n }\n else if (this._userDefinedFont) {\n this.font = this._userDefinedFont;\n return;\n }\n }\n\n this._layoutDirty = true;\n this._updateRichTextStatus();\n },\n animatable: false,\n tooltip: CC_DEV && 'i18n:COMPONENT.richtext.system_font',\n },\n\n /**\n * !#en The cache mode of label. This mode only supports system fonts.\n * !#zh 文本缓存模式, 该模式只支持系统字体。\n * @property {Label.CacheMode} cacheMode\n */\n cacheMode: {\n default: CacheMode.NONE,\n type: CacheMode,\n tooltip: CC_DEV && 'i18n:COMPONENT.label.cacheMode',\n notify (oldValue) {\n if (this.cacheMode === oldValue) return;\n\n this._updateRichTextStatus();\n },\n animatable: false\n },\n\n /**\n * !#en The maximize width of the RichText\n * !#zh 富文本的最大宽度\n * @property {Number} maxWidth\n */\n maxWidth: {\n default: 0,\n tooltip: CC_DEV && 'i18n:COMPONENT.richtext.max_width',\n notify: function (oldValue) {\n if (this.maxWidth === oldValue) return;\n\n this._layoutDirty = true;\n this._updateRichTextStatus();\n }\n },\n\n /**\n * !#en Line Height of RichText.\n * !#zh 富文本行高。\n * @property {Number} lineHeight\n */\n lineHeight: {\n default: 40,\n tooltip: CC_DEV && 'i18n:COMPONENT.richtext.line_height',\n notify: function (oldValue) {\n if (this.lineHeight === oldValue) return;\n\n this._layoutDirty = true;\n this._updateRichTextStatus();\n }\n },\n\n /**\n * !#en The image atlas for the img tag. For each src value in the img tag, there should be a valid spriteFrame in the image atlas.\n * !#zh 对于 img 标签里面的 src 属性名称,都需要在 imageAtlas 里面找到一个有效的 spriteFrame,否则 img tag 会判定为无效。\n * @property {SpriteAtlas} imageAtlas\n */\n imageAtlas: {\n default: null,\n type: cc.SpriteAtlas,\n tooltip: CC_DEV && 'i18n:COMPONENT.richtext.image_atlas',\n notify: function (oldValue) {\n if (this.imageAtlas === oldValue) return;\n\n this._layoutDirty = true;\n this._updateRichTextStatus();\n }\n },\n\n /**\n * !#en\n * Once checked, the RichText will block all input events (mouse and touch) within\n * the bounding box of the node, preventing the input from penetrating into the underlying node.\n * !#zh\n * 选中此选项后,RichText 将阻止节点边界框中的所有输入事件(鼠标和触摸),从而防止输入事件穿透到底层节点。\n * @property {Boolean} handleTouchEvent\n * @default true\n */\n handleTouchEvent: {\n default: true,\n tooltip: CC_DEV && 'i18n:COMPONENT.richtext.handleTouchEvent',\n notify: function (oldValue) {\n if (this.handleTouchEvent === oldValue) return;\n if (this.enabledInHierarchy) {\n this.handleTouchEvent ? this._addEventListeners() : this._removeEventListeners();\n }\n }\n },\n\n /**\n * 自定义内部使用的材质\n */\n customMaterial: {\n default: null,\n type: cc.Material,\n notify: function (oldValue) {\n if (this.customMaterial === oldValue) return;\n const material = this.customMaterial == null ? this._getDefaultMaterial() : this.customMaterial;\n for (let i = 0; i < this._labelSegments.length; i++) {\n const labelComponent = this._labelSegments[i].getComponent(cc.Label);\n if (labelComponent) {\n if (labelComponent._materials.length === 0) {\n labelComponent._materials[0] = MaterialVariant.create(material, labelComponent);\n } else {\n labelComponent.setMaterial(0, material);\n }\n }\n const spriteComponent = this._labelSegments[i].getComponent(cc.Sprite);\n if (spriteComponent) {\n if (spriteComponent._materials.length === 0) {\n spriteComponent._materials[0] = MaterialVariant.create(material, spriteComponent);\n } else {\n spriteComponent.setMaterial(0, material);\n }\n }\n }\n for (let i = 0; i < this._labelSegmentsCache.length; i++) {\n const labelComponent = this._labelSegmentsCache[i].getComponent(cc.Label);\n if (labelComponent) {\n if (labelComponent._materials.length === 0) {\n labelComponent._materials[0] = MaterialVariant.create(material, labelComponent);\n } else {\n labelComponent.setMaterial(0, material);\n }\n }\n }\n }\n },\n\n autoSwitchMaterial: {\n type: RenderComponent.EnableType,\n default: RenderComponent.EnableType.GLOBAL,\n notify: function (oldValue) {\n if (this.autoSwitchMaterial === oldValue) return;\n for (let i = 0; i < this._labelSegments.length; i++) {\n const labelComponent = this._labelSegments[i].getComponent(cc.Label);\n if (labelComponent) {\n labelComponent.autoSwitchMaterial = this.autoSwitchMaterial;\n }\n const spriteComponent = this._labelSegments[i].getComponent(cc.Sprite);\n if (spriteComponent) {\n spriteComponent.autoSwitchMaterial = this.autoSwitchMaterial;\n }\n }\n for (let i = 0; i < this._labelSegmentsCache.length; i++) {\n const labelComponent = this._labelSegmentsCache[i].getComponent(cc.Label);\n if (labelComponent) {\n labelComponent.autoSwitchMaterial = this.autoSwitchMaterial;\n }\n }\n }\n },\n\n allowDynamicAtlas: {\n type: RenderComponent.EnableType,\n default: RenderComponent.EnableType.GLOBAL,\n notify: function (oldValue) {\n if (this.allowDynamicAtlas === oldValue) return;\n for (let i = 0; i < this._labelSegments.length; i++) {\n const labelComponent = this._labelSegments[i].getComponent(cc.Label);\n if (labelComponent) {\n labelComponent.allowDynamicAtlas = this.allowDynamicAtlas;\n }\n const spriteComponent = this._labelSegments[i].getComponent(cc.Sprite);\n if (spriteComponent) {\n spriteComponent.allowDynamicAtlas = this.allowDynamicAtlas;\n }\n }\n for (let i = 0; i < this._labelSegmentsCache.length; i++) {\n const labelComponent = this._labelSegmentsCache[i].getComponent(cc.Label);\n if (labelComponent) {\n labelComponent.allowDynamicAtlas = this.allowDynamicAtlas;\n }\n }\n }\n },\n\n enableRetina: {\n type: RenderComponent.EnableType,\n default: RenderComponent.EnableType.GLOBAL,\n notify: function (oldValue) {\n if (this.enableRetina === oldValue) return;\n for (let i = 0; i < this._labelSegments.length; i++) {\n const labelComponent = this._labelSegments[i].getComponent(cc.Label);\n if (labelComponent) {\n labelComponent.enableRetina = this.enableRetina;\n }\n }\n for (let i = 0; i < this._labelSegmentsCache.length; i++) {\n const labelComponent = this._labelSegmentsCache[i].getComponent(cc.Label);\n if (labelComponent) {\n labelComponent.enableRetina = this.enableRetina;\n }\n }\n }\n },\n },\n\n statics: {\n HorizontalAlign: HorizontalAlign,\n VerticalAlign: VerticalAlign\n },\n\n onEnable () {\n if (this.handleTouchEvent) {\n this._addEventListeners();\n }\n this._updateRichText();\n this._activateChildren(true);\n },\n\n onDisable () {\n if (this.handleTouchEvent) {\n this._removeEventListeners();\n }\n this._activateChildren(false);\n },\n\n start () {\n this._onTTFLoaded();\n },\n\n _onColorChanged (parentColor) {\n let children = this.node.children;\n children.forEach(function (childNode) {\n childNode.color = parentColor;\n });\n },\n\n _addEventListeners () {\n this.node.on(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this);\n this.node.on(cc.Node.EventType.COLOR_CHANGED, this._onColorChanged, this);\n },\n\n _removeEventListeners () {\n this.node.off(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this);\n this.node.off(cc.Node.EventType.COLOR_CHANGED, this._onColorChanged, this);\n },\n\n _updateLabelSegmentTextAttributes () {\n this._labelSegments.forEach(function (item) {\n this._applyTextAttribute(item, null, true);\n }.bind(this));\n },\n\n _createFontLabel (string) {\n return pool.get(string, this);\n },\n\n _onTTFLoaded () {\n if (this.font instanceof cc.TTFFont) {\n if (this.font._nativeAsset) {\n this._layoutDirty = true;\n this._updateRichText();\n }\n else {\n let self = this;\n cc.assetManager.postLoadNative(this.font, function (err) {\n self._layoutDirty = true;\n self._updateRichText();\n });\n }\n }\n else {\n this._layoutDirty = true;\n this._updateRichText();\n }\n },\n\n _measureText (styleIndex, string) {\n let self = this;\n let func = function (string) {\n let label;\n if (self._labelSegmentsCache.length === 0) {\n label = self._createFontLabel(string);\n self._labelSegmentsCache.push(label);\n } else {\n label = self._labelSegmentsCache[0];\n }\n label._styleIndex = styleIndex;\n self._applyTextAttribute(label, string, true);\n let labelSize = label.getContentSize();\n return labelSize.width;\n };\n if (string) {\n return func(string);\n }\n else {\n return func;\n }\n },\n\n _onTouchEnded (event) {\n let components = this.node.getComponents(cc.Component);\n\n for (let i = 0; i < this._labelSegments.length; ++i) {\n let labelSegment = this._labelSegments[i];\n let clickHandler = labelSegment._clickHandler;\n let clickParam = labelSegment._clickParam;\n if (clickHandler && this._containsTouchLocation(labelSegment, event.touch.getLocation())) {\n components.forEach(function (component) {\n if (component.enabledInHierarchy && component[clickHandler]) {\n component[clickHandler](event, clickParam);\n }\n });\n event.stopPropagation();\n }\n }\n },\n\n _containsTouchLocation (label, point) {\n let myRect = label.getBoundingBoxToWorld();\n return myRect.contains(point);\n },\n\n _resetState () {\n let children = this.node.children;\n for (let i = children.length - 1; i >= 0; i--) {\n let child = children[i];\n if (child.name === RichTextChildName || child.name === RichTextChildImageName) {\n if (child.parent === this.node) {\n child.parent = null;\n }\n else {\n // In case child.parent !== this.node, child cannot be removed from children\n children.splice(i, 1);\n }\n if (child.name === RichTextChildName) {\n pool.put(child);\n }\n }\n }\n\n this._labelSegments.length = 0;\n this._labelSegmentsCache.length = 0;\n this._linesWidth.length = 0;\n this._lineOffsetX = 0;\n this._lineCount = 1;\n this._labelWidth = 0;\n this._labelHeight = 0;\n this._layoutDirty = true;\n },\n\n onRestore: CC_EDITOR && function () {\n // TODO: refine undo/redo system\n // Because undo/redo will not call onEnable/onDisable,\n // we need call onEnable/onDisable manually to active/disactive children nodes.\n if (this.enabledInHierarchy) {\n this.onEnable();\n }\n else {\n this.onDisable();\n }\n },\n\n _activateChildren (active) {\n for (let i = this.node.children.length - 1; i >= 0; i--) {\n let child = this.node.children[i];\n if (child.name === RichTextChildName || child.name === RichTextChildImageName) {\n child.active = active;\n }\n }\n },\n\n _addLabelSegment (stringToken, styleIndex) {\n let labelSegment;\n if (this._labelSegmentsCache.length === 0) {\n labelSegment = this._createFontLabel(stringToken);\n } else {\n labelSegment = this._labelSegmentsCache.pop();\n }\n labelSegment._styleIndex = styleIndex;\n labelSegment._lineCount = this._lineCount;\n labelSegment.active = this.node.active;\n\n labelSegment.setAnchorPoint(0, 0);\n this._applyTextAttribute(labelSegment, stringToken);\n\n this.node.addChild(labelSegment);\n this._labelSegments.push(labelSegment);\n\n return labelSegment;\n },\n\n _updateRichTextWithMaxWidth (labelString, labelWidth, styleIndex) {\n let fragmentWidth = labelWidth;\n let labelSegment;\n\n if (this._lineOffsetX > 0 && fragmentWidth + this._lineOffsetX > this.maxWidth) {\n //concat previous line\n let checkStartIndex = 0;\n while (this._lineOffsetX <= this.maxWidth) {\n let checkEndIndex = this._getFirstWordLen(labelString,\n checkStartIndex,\n labelString.length);\n let checkString = labelString.substr(checkStartIndex, checkEndIndex);\n let checkStringWidth = this._measureText(styleIndex, checkString);\n\n if (this._lineOffsetX + checkStringWidth <= this.maxWidth) {\n this._lineOffsetX += checkStringWidth;\n checkStartIndex += checkEndIndex;\n }\n else {\n\n if (checkStartIndex > 0) {\n let remainingString = labelString.substr(0, checkStartIndex);\n this._addLabelSegment(remainingString, styleIndex);\n labelString = labelString.substr(checkStartIndex, labelString.length);\n fragmentWidth = this._measureText(styleIndex, labelString);\n }\n this._updateLineInfo();\n break;\n }\n }\n }\n if (fragmentWidth > this.maxWidth) {\n let fragments = textUtils.fragmentText(labelString,\n fragmentWidth,\n this.maxWidth,\n this._measureText(styleIndex));\n for (let k = 0; k < fragments.length; ++k) {\n let splitString = fragments[k];\n labelSegment = this._addLabelSegment(splitString, styleIndex);\n let labelSize = labelSegment.getContentSize();\n this._lineOffsetX += labelSize.width;\n if (fragments.length > 1 && k < fragments.length - 1) {\n this._updateLineInfo();\n }\n }\n }\n else {\n this._lineOffsetX += fragmentWidth;\n this._addLabelSegment(labelString, styleIndex);\n }\n },\n\n _isLastComponentCR (stringToken) {\n return stringToken.length - 1 === stringToken.lastIndexOf(\"\\n\");\n },\n\n _updateLineInfo () {\n this._linesWidth.push(this._lineOffsetX);\n this._lineOffsetX = 0;\n this._lineCount++;\n },\n\n _needsUpdateTextLayout (newTextArray) {\n if (this._layoutDirty || !this._textArray || !newTextArray) {\n return true;\n }\n\n if (this._textArray.length !== newTextArray.length) {\n return true;\n }\n\n for (let i = 0; i < this._textArray.length; ++i) {\n let oldItem = this._textArray[i];\n let newItem = newTextArray[i];\n if (oldItem.text !== newItem.text) {\n return true;\n }\n else {\n let oldStyle = oldItem.style, newStyle = newItem.style;\n if (oldStyle) {\n if (newStyle) {\n if (!oldStyle.outline !== !newStyle.outline) {\n return true;\n }\n if (oldStyle.size !== newStyle.size\n || !oldStyle.italic !== !newStyle.italic\n || oldStyle.isImage !== newStyle.isImage) {\n return true;\n }\n if (oldStyle.src !== newStyle.src ||\n oldStyle.imageAlign !== newStyle.imageAlign ||\n oldStyle.imageHeight !== newStyle.imageHeight ||\n oldStyle.imageWidth !== newStyle.imageWidth ||\n oldStyle.imageOffset !== newStyle.imageOffset) {\n return true;\n }\n }\n else {\n if (oldStyle.size || oldStyle.italic || oldStyle.isImage || oldStyle.outline) {\n return true;\n }\n }\n }\n else {\n if (newStyle) {\n if (newStyle.size || newStyle.italic || newStyle.isImage || newStyle.outline) {\n return true;\n }\n }\n }\n }\n }\n return false;\n },\n\n _addRichTextImageElement (richTextElement) {\n let spriteFrameName = richTextElement.style.src;\n let spriteFrame = this.imageAtlas.getSpriteFrame(spriteFrameName);\n if (spriteFrame) {\n let spriteNode = new cc.PrivateNode(RichTextChildImageName);\n let spriteComponent = spriteNode.addComponent(cc.Sprite);\n\n spriteComponent.autoSwitchMaterial = this.autoSwitchMaterial;\n spriteComponent.allowDynamicAtlas = this.allowDynamicAtlas;\n\n // 更新材质\n if (this.customMaterial) {\n if (spriteComponent._materials.length === 0) {\n spriteComponent._materials[0] = MaterialVariant.create(this.customMaterial, spriteComponent);\n } else {\n if (spriteComponent._materials[0].material !== this.customMaterial) {\n spriteComponent.setMaterial(0, this.customMaterial);\n }\n }\n }\n\n switch (richTextElement.style.imageAlign)\n {\n case 'top':\n spriteNode.setAnchorPoint(0, 1);\n break;\n case 'center':\n spriteNode.setAnchorPoint(0, 0.5);\n break;\n default:\n spriteNode.setAnchorPoint(0, 0);\n break;\n }\n if (richTextElement.style.imageOffset) spriteNode._imageOffset = richTextElement.style.imageOffset;\n spriteComponent.type = cc.Sprite.Type.SLICED;\n spriteComponent.sizeMode = cc.Sprite.SizeMode.CUSTOM;\n this.node.addChild(spriteNode);\n this._labelSegments.push(spriteNode);\n\n let spriteRect = spriteFrame.getRect();\n let scaleFactor = 1;\n let spriteWidth = spriteRect.width;\n let spriteHeight = spriteRect.height;\n let expectWidth = richTextElement.style.imageWidth;\n let expectHeight = richTextElement.style.imageHeight;\n\n if (expectHeight > 0) {\n scaleFactor = expectHeight / spriteHeight;\n spriteWidth = spriteWidth * scaleFactor;\n spriteHeight = spriteHeight * scaleFactor;\n }\n else {\n scaleFactor = this.lineHeight / spriteHeight;\n spriteWidth = spriteWidth * scaleFactor;\n spriteHeight = spriteHeight * scaleFactor;\n }\n\n if (expectWidth > 0) spriteWidth = expectWidth;\n\n if (this.maxWidth > 0) {\n if (this._lineOffsetX + spriteWidth > this.maxWidth) {\n this._updateLineInfo();\n }\n this._lineOffsetX += spriteWidth;\n\n }\n else {\n this._lineOffsetX += spriteWidth;\n if (this._lineOffsetX > this._labelWidth) {\n this._labelWidth = this._lineOffsetX;\n }\n }\n spriteComponent.spriteFrame = spriteFrame;\n spriteNode.setContentSize(spriteWidth, spriteHeight);\n spriteNode._lineCount = this._lineCount;\n\n if (richTextElement.style.event) {\n if (richTextElement.style.event.click) {\n spriteNode._clickHandler = richTextElement.style.event.click;\n }\n if (richTextElement.style.event.param) {\n spriteNode._clickParam = richTextElement.style.event.param;\n }\n else {\n spriteNode._clickParam = '';\n }\n }\n else {\n spriteNode._clickHandler = null;\n }\n }\n else {\n cc.warnID(4400);\n }\n },\n\n _updateRichText () {\n if (!this.enabledInHierarchy) return;\n\n let newTextArray = _htmlTextParser.parse(this.string);\n if (!this._needsUpdateTextLayout(newTextArray)) {\n this._textArray = newTextArray;\n this._updateLabelSegmentTextAttributes();\n return;\n }\n\n this._textArray = newTextArray;\n this._resetState();\n\n let lastEmptyLine = false;\n let label;\n let labelSize;\n\n for (let i = 0; i < this._textArray.length; ++i) {\n let richTextElement = this._textArray[i];\n let text = richTextElement.text;\n //handle
tag\n if (text === \"\") {\n if (richTextElement.style && richTextElement.style.newline) {\n this._updateLineInfo();\n continue;\n }\n if (richTextElement.style && richTextElement.style.isImage && this.imageAtlas) {\n this._addRichTextImageElement(richTextElement);\n continue;\n }\n }\n let multilineTexts = text.split(\"\\n\");\n\n for (let j = 0; j < multilineTexts.length; ++j) {\n let labelString = multilineTexts[j];\n if (labelString === \"\") {\n //for continues \\n\n if (this._isLastComponentCR(text)\n && j === multilineTexts.length - 1) {\n continue;\n }\n this._updateLineInfo();\n lastEmptyLine = true;\n continue;\n }\n lastEmptyLine = false;\n\n if (this.maxWidth > 0) {\n let labelWidth = this._measureText(i, labelString);\n this._updateRichTextWithMaxWidth(labelString, labelWidth, i);\n\n if (multilineTexts.length > 1 && j < multilineTexts.length - 1) {\n this._updateLineInfo();\n }\n }\n else {\n label = this._addLabelSegment(labelString, i);\n labelSize = label.getContentSize();\n\n this._lineOffsetX += labelSize.width;\n if (this._lineOffsetX > this._labelWidth) {\n this._labelWidth = this._lineOffsetX;\n }\n\n if (multilineTexts.length > 1 && j < multilineTexts.length - 1) {\n this._updateLineInfo();\n }\n }\n }\n }\n if (!lastEmptyLine) {\n this._linesWidth.push(this._lineOffsetX);\n }\n\n if (this.maxWidth > 0) {\n this._labelWidth = this.maxWidth;\n }\n this._labelHeight = (this._lineCount + textUtils.BASELINE_RATIO) * this.lineHeight;\n\n // trigger \"size-changed\" event\n this.node.setContentSize(this._labelWidth, this._labelHeight);\n\n this._updateRichTextPosition();\n this._layoutDirty = false;\n },\n\n _getFirstWordLen (text, startIndex, textLen) {\n let character = text.charAt(startIndex);\n if (textUtils.isUnicodeCJK(character)\n || textUtils.isUnicodeSpace(character)) {\n return 1;\n }\n\n let len = 1;\n for (let index = startIndex + 1; index < textLen; ++index) {\n character = text.charAt(index);\n if (textUtils.isUnicodeSpace(character)\n || textUtils.isUnicodeCJK(character)) {\n break;\n }\n len++;\n }\n\n return len;\n },\n\n _updateRichTextPosition () {\n let nextTokenX = 0;\n let nextLineIndex = 1;\n let totalLineCount = this._lineCount;\n for (let i = 0; i < this._labelSegments.length; ++i) {\n let label = this._labelSegments[i];\n let lineCount = label._lineCount;\n if (lineCount > nextLineIndex) {\n nextTokenX = 0;\n nextLineIndex = lineCount;\n }\n let lineOffsetX = 0;\n // let nodeAnchorXOffset = (0.5 - this.node.anchorX) * this._labelWidth;\n switch (this.horizontalAlign) {\n case HorizontalAlign.LEFT:\n lineOffsetX = - this._labelWidth / 2;\n break;\n case HorizontalAlign.CENTER:\n lineOffsetX = - this._linesWidth[lineCount - 1] / 2;\n break;\n case HorizontalAlign.RIGHT:\n lineOffsetX = this._labelWidth / 2 - this._linesWidth[lineCount - 1];\n break;\n default:\n break;\n }\n label.x = nextTokenX + lineOffsetX;\n\n let labelSize = label.getContentSize();\n\n label.y = this.lineHeight * (totalLineCount - lineCount) - this._labelHeight / 2;\n\n if (lineCount === nextLineIndex) {\n nextTokenX += labelSize.width;\n }\n\n let sprite = label.getComponent(cc.Sprite);\n if (sprite) {\n // adjust img align (from )\n let lineHeightSet = this.lineHeight;\n let lineHeightReal = this.lineHeight * (1 + textUtils.BASELINE_RATIO); //single line node height\n switch (label.anchorY)\n {\n case 1:\n label.y += ( lineHeightSet + ( ( lineHeightReal - lineHeightSet) / 2 ) );\n break;\n case 0.5:\n label.y += ( lineHeightReal / 2 );\n break;\n default:\n label.y += ( (lineHeightReal - lineHeightSet) / 2 );\n break;\n }\n // adjust img offset (from )\n if (label._imageOffset)\n {\n let offsets = label._imageOffset.split(',');\n if (offsets.length === 1 && offsets[0])\n {\n let offsetY = parseFloat(offsets[0]);\n if (Number.isInteger(offsetY)) label.y += offsetY;\n }\n else if(offsets.length === 2)\n {\n let offsetX = parseFloat(offsets[0]);\n let offsetY = parseFloat(offsets[1]);\n if (Number.isInteger(offsetX)) label.x += offsetX;\n if (Number.isInteger(offsetY)) label.y += offsetY;\n }\n }\n }\n\n //adjust y for label with outline\n let outline = label.getComponent(cc.LabelOutline);\n if (outline && outline.width) label.y = label.y - outline.width;\n }\n },\n\n _convertLiteralColorValue (color) {\n let colorValue = color.toUpperCase();\n if (cc.Color[colorValue]) {\n return cc.Color[colorValue];\n }\n else {\n let out = cc.color();\n return out.fromHEX(color);\n }\n },\n\n // When string is null, it means that the text does not need to be updated.\n _applyTextAttribute (labelNode, string, force) {\n let labelComponent = labelNode.getComponent(cc.Label);\n if (!labelComponent) {\n return;\n }\n\n let index = labelNode._styleIndex;\n\n let textStyle = null;\n if (this._textArray[index]) {\n textStyle = this._textArray[index].style;\n }\n\n if (textStyle && textStyle.color) {\n labelNode.color = this._convertLiteralColorValue(textStyle.color);\n }else {\n labelNode.color = this.node.color;\n }\n\n labelComponent.cacheMode = this.cacheMode;\n\n labelComponent.autoSwitchMaterial = this.autoSwitchMaterial;\n labelComponent.allowDynamicAtlas = this.allowDynamicAtlas;\n labelComponent.enableRetina = this.enableRetina;\n\n // 更新材质\n if (this.customMaterial) {\n if (labelComponent._materials.length === 0) {\n labelComponent._materials[0] = MaterialVariant.create(this.customMaterial, labelComponent);\n } else {\n if (labelComponent._materials[0].material !== this.customMaterial) {\n labelComponent.setMaterial(0, this.customMaterial);\n }\n }\n }\n\n let isAsset = this.font instanceof cc.Font;\n if (isAsset && !this._isSystemFontUsed) {\n labelComponent.font = this.font;\n } else {\n labelComponent.fontFamily = this.fontFamily;\n }\n\n labelComponent.useSystemFont = this._isSystemFontUsed;\n labelComponent.lineHeight = this.lineHeight;\n labelComponent.enableBold = textStyle && textStyle.bold;\n labelComponent.enableItalics = textStyle && textStyle.italic;\n //TODO: temporary implementation, the italic effect should be implemented in the internal of label-assembler.\n if (textStyle && textStyle.italic) {\n labelNode.skewX = 12;\n }\n\n labelComponent.enableUnderline = textStyle && textStyle.underline;\n\n if (textStyle && textStyle.outline) {\n let labelOutlineComponent = labelNode.getComponent(cc.LabelOutline);\n if (!labelOutlineComponent) {\n labelOutlineComponent = labelNode.addComponent(cc.LabelOutline);\n }\n labelOutlineComponent.color = this._convertLiteralColorValue(textStyle.outline.color);\n labelOutlineComponent.width = textStyle.outline.width;\n }\n\n if (textStyle && textStyle.size) {\n labelComponent.fontSize = textStyle.size;\n }\n else {\n labelComponent.fontSize = this.fontSize;\n }\n\n if (string !== null) {\n if (typeof string !== 'string') {\n string = '' + string;\n }\n labelComponent.string = string;\n }\n\n force && labelComponent._forceUpdateRenderData();\n\n if (textStyle && textStyle.event) {\n if (textStyle.event.click) {\n labelNode._clickHandler = textStyle.event.click;\n }\n if (textStyle.event.param) {\n labelNode._clickParam = textStyle.event.param;\n }\n else {\n labelNode._clickParam = '';\n }\n }\n else {\n labelNode._clickHandler = null;\n }\n },\n\n onDestroy () {\n for (let i = 0; i < this._labelSegments.length; ++i) {\n this._labelSegments[i].removeFromParent();\n pool.put(this._labelSegments[i]);\n }\n },\n});\n\ncc.RichText = module.exports = RichText;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst misc = require('../utils/misc');\nconst Component = require('./CCComponent');\n\nvar GETTINGSHORTERFACTOR = 20;\n\n/**\n * Enum for Scrollbar direction\n * @enum Scrollbar.Direction\n */\nvar Direction = cc.Enum({\n /**\n * @property {Number} HORIZONTAL\n */\n HORIZONTAL: 0,\n\n /**\n * @property {Number} VERTICAL\n */\n VERTICAL: 1\n});\n\n/**\n * !#en\n * The Scrollbar control allows the user to scroll an image or other view that is too large to see completely\n * !#zh 滚动条组件\n * @class Scrollbar\n * @extends Component\n */\nvar Scrollbar = cc.Class({\n name: 'cc.Scrollbar',\n extends: require('./CCComponent'),\n\n editor: CC_EDITOR && {\n menu: 'i18n:MAIN_MENU.component.ui/ScrollBar',\n help: 'i18n:COMPONENT.help_url.scrollbar',\n },\n\n properties: {\n _scrollView: null,\n _touching: false,\n _autoHideRemainingTime: {\n default: 0,\n serializable: false\n },\n _opacity: 255,\n\n /**\n * !#en The \"handle\" part of the scrollbar.\n * !#zh 作为当前滚动区域位置显示的滑块 Sprite。\n * @property {Sprite} handle\n */\n handle: {\n default: null,\n type: cc.Sprite,\n tooltip: CC_DEV && 'i18n:COMPONENT.scrollbar.handle',\n notify: function() {\n this._onScroll(cc.v2(0, 0));\n },\n animatable: false\n },\n\n /**\n * !#en The direction of scrollbar.\n * !#zh ScrollBar 的滚动方向。\n * @property {Scrollbar.Direction} direction\n */\n direction: {\n default: Direction.HORIZONTAL,\n type: Direction,\n tooltip: CC_DEV && 'i18n:COMPONENT.scrollbar.direction',\n notify: function() {\n this._onScroll(cc.v2(0, 0));\n },\n animatable: false\n },\n\n /**\n * !#en Whether enable auto hide or not.\n * !#zh 是否在没有滚动动作时自动隐藏 ScrollBar。\n * @property {Boolean} enableAutoHide\n */\n enableAutoHide: {\n default: true,\n animatable: false,\n tooltip: CC_DEV && 'i18n:COMPONENT.scrollbar.auto_hide',\n },\n\n /**\n * !#en\n * The time to hide scrollbar when scroll finished.\n * Note: This value is only useful when enableAutoHide is true.\n * !#zh\n * 没有滚动动作后经过多久会自动隐藏。\n * 注意:只要当 “enableAutoHide” 为 true 时,才有效。\n * @property {Number} autoHideTime\n */\n autoHideTime: {\n default: 1.0,\n animatable: false,\n tooltip: CC_DEV && 'i18n:COMPONENT.scrollbar.auto_hide_time',\n }\n },\n\n statics: {\n Direction: Direction\n },\n\n setTargetScrollView: function(scrollView) {\n this._scrollView = scrollView;\n },\n\n _convertToScrollViewSpace: function(content) {\n let scrollViewNode = this._scrollView.node;\n var worldSpacePos = content.convertToWorldSpaceAR(cc.v2(-content.anchorX * content.width, -content.anchorY * content.height));\n var scrollViewSpacePos = scrollViewNode.convertToNodeSpaceAR(worldSpacePos);\n scrollViewSpacePos.x += scrollViewNode.anchorX * scrollViewNode.width;\n scrollViewSpacePos.y += scrollViewNode.anchorY * scrollViewNode.height;\n return scrollViewSpacePos;\n },\n\n _setOpacity: function(opacity) {\n if (this.handle) {\n this.node.opacity = opacity;\n this.handle.node.opacity = opacity;\n }\n },\n\n _onScroll: function(outOfBoundary) {\n if (this._scrollView) {\n\n var content = this._scrollView.content;\n if(content){\n var contentSize = content.getContentSize();\n var scrollViewSize = this._scrollView.node.getContentSize();\n var handleNodeSize = this.node.getContentSize();\n\n if(this._conditionalDisableScrollBar(contentSize, scrollViewSize)) {\n return;\n }\n\n if (this.enableAutoHide) {\n this._autoHideRemainingTime = this.autoHideTime;\n this._setOpacity(this._opacity);\n }\n\n var contentMeasure = 0;\n var scrollViewMeasure = 0;\n var outOfBoundaryValue = 0;\n var contentPosition = 0;\n var handleNodeMeasure = 0;\n\n if (this.direction === Direction.HORIZONTAL) {\n contentMeasure = contentSize.width;\n scrollViewMeasure = scrollViewSize.width;\n handleNodeMeasure = handleNodeSize.width;\n outOfBoundaryValue = outOfBoundary.x;\n\n contentPosition = -this._convertToScrollViewSpace(content).x;\n } else if (this.direction === Direction.VERTICAL) {\n contentMeasure = contentSize.height;\n scrollViewMeasure = scrollViewSize.height;\n handleNodeMeasure = handleNodeSize.height;\n outOfBoundaryValue = outOfBoundary.y;\n\n contentPosition = -this._convertToScrollViewSpace(content).y;\n }\n\n var length = this._calculateLength(contentMeasure, scrollViewMeasure, handleNodeMeasure, outOfBoundaryValue);\n var position = this._calculatePosition(contentMeasure, scrollViewMeasure, handleNodeMeasure, contentPosition, outOfBoundaryValue, length);\n\n this._updateLength(length);\n this._updateHanlderPosition(position);\n }\n }\n },\n\n _updateHanlderPosition: function(position) {\n if (this.handle) {\n var oldPosition = this._fixupHandlerPosition();\n\n this.handle.node.setPosition(position.x + oldPosition.x, position.y + oldPosition.y);\n }\n },\n\n _fixupHandlerPosition: function() {\n var barSize = this.node.getContentSize();\n var barAnchor = this.node.getAnchorPoint();\n var handleSize = this.handle.node.getContentSize();\n\n var handleParent = this.handle.node.parent;\n\n var leftBottomWorldPosition = this.node.convertToWorldSpaceAR(cc.v2(-barSize.width * barAnchor.x, -barSize.height * barAnchor.y));\n var fixupPosition = handleParent.convertToNodeSpaceAR(leftBottomWorldPosition);\n\n if (this.direction === Direction.HORIZONTAL) {\n fixupPosition = cc.v2(fixupPosition.x, fixupPosition.y + (barSize.height - handleSize.height) / 2);\n } else if (this.direction === Direction.VERTICAL) {\n fixupPosition = cc.v2(fixupPosition.x + (barSize.width - handleSize.width) / 2, fixupPosition.y);\n }\n\n this.handle.node.setPosition(fixupPosition);\n\n return fixupPosition;\n },\n\n _onTouchBegan: function() {\n if (!this.enableAutoHide) {\n return;\n }\n this._touching = true;\n },\n\n _conditionalDisableScrollBar: function (contentSize, scrollViewSize) {\n if(contentSize.width <= scrollViewSize.width\n && this.direction === Direction.HORIZONTAL){\n return true;\n }\n\n if(contentSize.height <= scrollViewSize.height\n && this.direction === Direction.VERTICAL){\n return true;\n }\n return false;\n },\n\n _onTouchEnded: function() {\n if (!this.enableAutoHide) {\n return;\n }\n\n this._touching = false;\n\n if (this.autoHideTime <= 0) {\n return;\n }\n\n\n if (this._scrollView) {\n var content = this._scrollView.content;\n if(content){\n var contentSize = content.getContentSize();\n var scrollViewSize = this._scrollView.node.getContentSize();\n\n if(this._conditionalDisableScrollBar(contentSize, scrollViewSize)) {\n return;\n }\n }\n }\n\n this._autoHideRemainingTime = this.autoHideTime;\n },\n\n _calculateLength: function(contentMeasure, scrollViewMeasure, handleNodeMeasure, outOfBoundary) {\n var denominatorValue = contentMeasure;\n if (outOfBoundary) {\n denominatorValue += (outOfBoundary > 0 ? outOfBoundary : -outOfBoundary) * GETTINGSHORTERFACTOR;\n }\n\n var lengthRation = scrollViewMeasure / denominatorValue;\n return handleNodeMeasure * lengthRation;\n },\n\n _calculatePosition: function(contentMeasure, scrollViewMeasure, handleNodeMeasure, contentPosition, outOfBoundary, actualLenth) {\n var denominatorValue = contentMeasure - scrollViewMeasure;\n if (outOfBoundary) {\n denominatorValue += Math.abs(outOfBoundary);\n }\n\n var positionRatio = 0;\n if (denominatorValue) {\n positionRatio = contentPosition / denominatorValue;\n positionRatio = misc.clamp01(positionRatio);\n }\n\n var position = (handleNodeMeasure - actualLenth) * positionRatio;\n if (this.direction === Direction.VERTICAL) {\n return cc.v2(0, position);\n } else {\n return cc.v2(position, 0);\n }\n },\n\n _updateLength: function(length) {\n if (this.handle) {\n var handleNode = this.handle.node;\n var handleNodeSize = handleNode.getContentSize();\n handleNode.setAnchorPoint(cc.v2(0, 0));\n if (this.direction === Direction.HORIZONTAL) {\n handleNode.setContentSize(length, handleNodeSize.height);\n } else {\n handleNode.setContentSize(handleNodeSize.width, length);\n }\n }\n },\n\n _processAutoHide: function(deltaTime) {\n if (!this.enableAutoHide || this._autoHideRemainingTime <= 0) {\n return;\n } else if (this._touching) {\n return;\n }\n\n\n this._autoHideRemainingTime -= deltaTime;\n if (this._autoHideRemainingTime <= this.autoHideTime) {\n this._autoHideRemainingTime = Math.max(0, this._autoHideRemainingTime);\n var opacity = this._opacity * (this._autoHideRemainingTime / this.autoHideTime);\n this._setOpacity(opacity);\n }\n },\n\n start: function() {\n if (this.enableAutoHide) {\n this._setOpacity(0);\n }\n },\n\n hide: function() {\n this._autoHideRemainingTime = 0;\n this._setOpacity(0);\n },\n\n show: function() {\n this._autoHideRemainingTime = this.autoHideTime;\n this._setOpacity(this._opacity);\n },\n\n update: function(dt) {\n this._processAutoHide(dt);\n }\n});\n\n\ncc.Scrollbar = module.exports = Scrollbar;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst misc = require('../utils/misc');\nconst NodeEvent = require('../CCNode').EventType;\nconst RenderComponent = require('./CCRenderComponent');\nconst BlendFunc = require('../utils/blend-func');\n\n\n/**\n * !#en Enum for sprite type.\n * !#zh Sprite 类型\n * @enum Sprite.Type\n */\nvar SpriteType = cc.Enum({\n /**\n * !#en The simple type.\n * !#zh 普通类型\n * @property {Number} SIMPLE\n */\n SIMPLE: 0,\n /**\n * !#en The sliced type.\n * !#zh 切片(九宫格)类型\n * @property {Number} SLICED\n */\n SLICED: 1,\n /**\n * !#en The tiled type.\n * !#zh 平铺类型\n * @property {Number} TILED\n */\n TILED: 2,\n /**\n * !#en The filled type.\n * !#zh 填充类型\n * @property {Number} FILLED\n */\n FILLED: 3,\n /**\n * !#en The mesh type.\n * !#zh 以 Mesh 三角形组成的类型\n * @property {Number} MESH\n */\n MESH: 4\n});\n\n/**\n * !#en Enum for fill type.\n * !#zh 填充类型\n * @enum Sprite.FillType\n */\nvar FillType = cc.Enum({\n /**\n * !#en The horizontal fill.\n * !#zh 水平方向填充\n * @property {Number} HORIZONTAL\n */\n HORIZONTAL: 0,\n /**\n * !#en The vertical fill.\n * !#zh 垂直方向填充\n * @property {Number} VERTICAL\n */\n VERTICAL: 1,\n /**\n * !#en The radial fill.\n * !#zh 径向填充\n * @property {Number} RADIAL\n */\n RADIAL:2,\n});\n\n/**\n * !#en Sprite Size can track trimmed size, raw size or none.\n * !#zh 精灵尺寸调整模式\n * @enum Sprite.SizeMode\n */\nvar SizeMode = cc.Enum({\n /**\n * !#en Use the customized node size.\n * !#zh 使用节点预设的尺寸\n * @property {Number} CUSTOM\n */\n CUSTOM: 0,\n /**\n * !#en Match the trimmed size of the sprite frame automatically.\n * !#zh 自动适配为精灵裁剪后的尺寸\n * @property {Number} TRIMMED\n */\n TRIMMED: 1,\n /**\n * !#en Match the raw size of the sprite frame automatically.\n * !#zh 自动适配为精灵原图尺寸\n * @property {Number} RAW\n */\n RAW: 2\n});\n/**\n * !#en Sprite state can choice the normal or grayscale.\n * !#zh 精灵颜色通道模式。\n * @enum Sprite.State\n * @deprecated\n */\nvar State = cc.Enum({\n /**\n * !#en The normal state\n * !#zh 正常状态\n * @property {Number} NORMAL\n */\n NORMAL: 0,\n /**\n * !#en The gray state, all color will be modified to grayscale value.\n * !#zh 灰色状态,所有颜色会被转换成灰度值\n * @property {Number} GRAY\n */\n GRAY: 1\n});\n\n/**\n * !#en Renders a sprite in the scene.\n * !#zh 该组件用于在场景中渲染精灵。\n * @class Sprite\n * @extends RenderComponent\n * @uses BlendFunc\n * @example\n * // Create a new node and add sprite components.\n * var node = new cc.Node(\"New Sprite\");\n * var sprite = node.addComponent(cc.Sprite);\n * node.parent = this.node;\n */\nvar Sprite = cc.Class({\n name: 'cc.Sprite',\n extends: RenderComponent,\n mixins: [BlendFunc],\n\n editor: CC_EDITOR && {\n menu: 'i18n:MAIN_MENU.component.renderers/Sprite',\n help: 'i18n:COMPONENT.help_url.sprite',\n inspector: 'packages://service-pack/inspectors/comps/sprite.js',\n },\n\n properties: {\n _spriteFrame: {\n default: null,\n type: cc.SpriteFrame\n },\n _type: SpriteType.SIMPLE,\n _sizeMode: SizeMode.TRIMMED,\n _fillType: 0,\n _fillCenter: cc.v2(0,0),\n _fillStart: 0,\n _fillRange: 0,\n _isTrimmedMode: true,\n _atlas: {\n default: null,\n type: cc.SpriteAtlas,\n tooltip: CC_DEV && 'i18n:COMPONENT.sprite.atlas',\n editorOnly: true,\n visible: true,\n animatable: false\n },\n\n /**\n * !#en The sprite frame of the sprite.\n * !#zh 精灵的精灵帧\n * @property spriteFrame\n * @type {SpriteFrame}\n * @example\n * sprite.spriteFrame = newSpriteFrame;\n */\n spriteFrame: {\n get () {\n return this._spriteFrame;\n },\n set (value, force) {\n var lastSprite = this._spriteFrame;\n if (CC_EDITOR) {\n if (!force && ((lastSprite && lastSprite._uuid) === (value && value._uuid))) {\n return;\n }\n }\n else {\n if (lastSprite === value) {\n return;\n }\n }\n this._spriteFrame = value;\n this._applySpriteFrame(lastSprite);\n if (CC_EDITOR) {\n this.node.emit('spriteframe-changed', this);\n }\n },\n type: cc.SpriteFrame,\n },\n\n /**\n * !#en The sprite render type.\n * !#zh 精灵渲染类型\n * @property type\n * @type {Sprite.Type}\n * @example\n * sprite.type = cc.Sprite.Type.SIMPLE;\n */\n type: {\n get () {\n return this._type;\n },\n set (value) {\n if (this._type !== value) {\n this._type = value;\n this.setVertsDirty();\n this._resetAssembler();\n }\n },\n type: SpriteType,\n animatable: false,\n tooltip: CC_DEV && 'i18n:COMPONENT.sprite.type',\n },\n\n /**\n * !#en\n * The fill type, This will only have any effect if the \"type\" is set to “cc.Sprite.Type.FILLED”.\n * !#zh\n * 精灵填充类型,仅渲染类型设置为 cc.Sprite.Type.FILLED 时有效。\n * @property fillType\n * @type {Sprite.FillType}\n * @example\n * sprite.fillType = cc.Sprite.FillType.HORIZONTAL;\n */\n fillType : {\n get () {\n return this._fillType;\n },\n set (value) {\n if (value !== this._fillType) {\n this._fillType = value;\n this.setVertsDirty();\n this._resetAssembler();\n }\n },\n type: FillType,\n tooltip: CC_DEV && 'i18n:COMPONENT.sprite.fill_type'\n },\n\n /**\n * !#en\n * The fill Center, This will only have any effect if the \"type\" is set to “cc.Sprite.Type.FILLED”.\n * !#zh\n * 填充中心点,仅渲染类型设置为 cc.Sprite.Type.FILLED 时有效。\n * @property fillCenter\n * @type {Vec2}\n * @example\n * sprite.fillCenter = new cc.Vec2(0, 0);\n */\n fillCenter: {\n get () {\n return this._fillCenter;\n },\n set (value) {\n this._fillCenter.x = value.x;\n this._fillCenter.y = value.y;\n if (this._type === SpriteType.FILLED) {\n this.setVertsDirty();\n }\n },\n tooltip: CC_DEV && 'i18n:COMPONENT.sprite.fill_center',\n },\n\n /**\n * !#en\n * The fill Start, This will only have any effect if the \"type\" is set to “cc.Sprite.Type.FILLED”.\n * !#zh\n * 填充起始点,仅渲染类型设置为 cc.Sprite.Type.FILLED 时有效。\n * @property fillStart\n * @type {Number}\n * @example\n * // -1 To 1 between the numbers\n * sprite.fillStart = 0.5;\n */\n fillStart: {\n get () {\n return this._fillStart;\n },\n set (value) {\n this._fillStart = misc.clampf(value, -1, 1);\n if (this._type === SpriteType.FILLED) {\n this.setVertsDirty();\n }\n },\n tooltip: CC_DEV && 'i18n:COMPONENT.sprite.fill_start'\n },\n\n /**\n * !#en\n * The fill Range, This will only have any effect if the \"type\" is set to “cc.Sprite.Type.FILLED”.\n * !#zh\n * 填充范围,仅渲染类型设置为 cc.Sprite.Type.FILLED 时有效。\n * @property fillRange\n * @type {Number}\n * @example\n * // -1 To 1 between the numbers\n * sprite.fillRange = 1;\n */\n fillRange: {\n get () {\n return this._fillRange;\n },\n set (value) {\n this._fillRange = misc.clampf(value, -1, 1);\n if (this._type === SpriteType.FILLED) {\n this.setVertsDirty();\n }\n },\n tooltip: CC_DEV && 'i18n:COMPONENT.sprite.fill_range'\n },\n /**\n * !#en specify the frame is trimmed or not.\n * !#zh 是否使用裁剪模式\n * @property trim\n * @type {Boolean}\n * @example\n * sprite.trim = true;\n */\n trim: {\n get () {\n return this._isTrimmedMode;\n },\n set (value) {\n if (this._isTrimmedMode !== value) {\n this._isTrimmedMode = value;\n if (this._type === SpriteType.SIMPLE || this._type === SpriteType.MESH) {\n this.setVertsDirty();\n }\n }\n },\n animatable: false,\n tooltip: CC_DEV && 'i18n:COMPONENT.sprite.trim'\n },\n\n \n /**\n * !#en specify the size tracing mode.\n * !#zh 精灵尺寸调整模式\n * @property sizeMode\n * @type {Sprite.SizeMode}\n * @example\n * sprite.sizeMode = cc.Sprite.SizeMode.CUSTOM;\n */\n sizeMode: {\n get () {\n return this._sizeMode;\n },\n set (value) {\n this._sizeMode = value;\n if (value !== SizeMode.CUSTOM) {\n this._applySpriteSize();\n }\n },\n animatable: false,\n type: SizeMode,\n tooltip: CC_DEV && 'i18n:COMPONENT.sprite.size_mode'\n },\n\n autoSwitchMaterial: {\n type: RenderComponent.EnableType,\n default: RenderComponent.EnableType.GLOBAL,\n notify(oldValue) {\n if (this.autoSwitchMaterial === oldValue) return;\n this.setVertsDirty();\n },\n },\n allowDynamicAtlas: {\n type: RenderComponent.EnableType,\n default: RenderComponent.EnableType.GLOBAL,\n notify(oldValue) {\n if (this.allowDynamicAtlas === oldValue) return;\n this.setVertsDirty();\n },\n },\n },\n\n statics: {\n FillType: FillType,\n Type: SpriteType,\n SizeMode: SizeMode,\n State: State,\n },\n\n setVisible (visible) {\n this.enabled = visible;\n },\n\n /**\n * Change the state of sprite.\n * @method setState\n * @see `Sprite.State`\n * @param state {Sprite.State} NORMAL or GRAY State.\n * @deprecated\n */\n setState () {},\n\n /**\n * Gets the current state.\n * @method getState\n * @see `Sprite.State`\n * @return {Sprite.State}\n * @deprecated\n */\n getState () {},\n\n __preload () {\n this._super();\n CC_EDITOR && this.node.on(NodeEvent.SIZE_CHANGED, this._resizedInEditor, this);\n this._applySpriteFrame();\n },\n\n onEnable () {\n this._super();\n this._spriteFrame && this._spriteFrame.ensureLoadTexture();\n\n this.node.on(cc.Node.EventType.SIZE_CHANGED, this.setVertsDirty, this);\n this.node.on(cc.Node.EventType.ANCHOR_CHANGED, this.setVertsDirty, this);\n },\n\n onDisable () {\n this._super();\n \n this.node.off(cc.Node.EventType.SIZE_CHANGED, this.setVertsDirty, this);\n this.node.off(cc.Node.EventType.ANCHOR_CHANGED, this.setVertsDirty, this);\n },\n\n _updateMaterial () {\n let texture = null;\n \n if (this._spriteFrame) {\n texture = this._spriteFrame.getTexture();\n }\n \n // make sure material is belong to self.\n let material = this.getMaterial(0);\n if (material) {\n if (material.getDefine('USE_TEXTURE') !== undefined) {\n material.define('USE_TEXTURE', true);\n }\n\n // 根据材质更新 uniform\n const isMultiMaterial = material.material.isMultiSupport();\n if (isMultiMaterial) {\n // 在 assembler 中进行更新性能会更好,不需要每次 setSpriteFrame 都更新,并且动态图集会导致两次触发\n // if (texture) this._updateMultiTexId(material, texture);\n this._texIdDirty = true;\n } else {\n if (material.getProperty('texture') !== texture) {\n material.setProperty('texture', texture);\n }\n }\n\n // 根据材质更新 assembler\n if (this._assembler) {\n if ((isMultiMaterial && !this._assembler.isMulti) || !isMultiMaterial && this._assembler.isMulti) {\n this._resetAssembler();\n }\n }\n }\n\n BlendFunc.prototype._updateMaterial.call(this);\n },\n\n _applyAtlas: CC_EDITOR && function (spriteFrame) {\n // Set atlas\n if (spriteFrame && spriteFrame._atlasUuid) {\n var self = this;\n cc.assetManager.loadAny(spriteFrame._atlasUuid, function (err, asset) {\n self._atlas = asset;\n });\n } else {\n this._atlas = null;\n }\n },\n\n _validateRender () {\n let spriteFrame = this._spriteFrame;\n if (this._materials[0] &&\n spriteFrame && \n spriteFrame.textureLoaded()) {\n return;\n }\n\n this.disableRender();\n },\n\n _applySpriteSize () {\n if (!this._spriteFrame || !this.isValid) return;\n \n if (SizeMode.RAW === this._sizeMode) {\n var size = this._spriteFrame._originalSize;\n this.node.setContentSize(size);\n } else if (SizeMode.TRIMMED === this._sizeMode) {\n var rect = this._spriteFrame._rect;\n this.node.setContentSize(rect.width, rect.height);\n }\n \n this.setVertsDirty();\n },\n\n _applySpriteFrame (oldFrame) {\n if (!this.isValid) return;\n\n let oldTexture = oldFrame && oldFrame.getTexture();\n if (oldTexture && !oldTexture.loaded) {\n oldFrame.off('load', this._applySpriteSize, this);\n }\n\n this._updateMaterial();\n let spriteFrame = this._spriteFrame;\n if (spriteFrame) {\n let newTexture = spriteFrame.getTexture();\n if (newTexture && newTexture.loaded) {\n this._applySpriteSize();\n }\n else {\n this.disableRender();\n spriteFrame.once('load', this._applySpriteSize, this);\n }\n }\n else {\n this.disableRender();\n }\n\n if (CC_EDITOR) {\n // Set atlas\n this._applyAtlas(spriteFrame);\n }\n },\n});\n\nif (CC_EDITOR) {\n Sprite.prototype._resizedInEditor = function () {\n if (this._spriteFrame) {\n var actualSize = this.node.getContentSize();\n var expectedW = actualSize.width;\n var expectedH = actualSize.height;\n if (this._sizeMode === SizeMode.RAW) {\n var size = this._spriteFrame.getOriginalSize();\n expectedW = size.width;\n expectedH = size.height;\n } else if (this._sizeMode === SizeMode.TRIMMED) {\n var rect = this._spriteFrame.getRect();\n expectedW = rect.width;\n expectedH = rect.height;\n\n }\n\n if (expectedW !== actualSize.width || expectedH !== actualSize.height) {\n this._sizeMode = SizeMode.CUSTOM;\n }\n }\n };\n\n // override onDestroy\n Sprite.prototype.__superOnDestroy = cc.Component.prototype.onDestroy;\n Sprite.prototype.onDestroy = function () {\n if (this.__superOnDestroy) this.__superOnDestroy();\n this.node.off(NodeEvent.SIZE_CHANGED, this._resizedInEditor, this);\n };\n}\n\ncc.Sprite = module.exports = Sprite;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst GraySpriteState = require('../utils/gray-sprite-state');\n\n/**\n * !#en The toggle component is a CheckBox, when it used together with a ToggleGroup, it\n * could be treated as a RadioButton.\n * !#zh Toggle 是一个 CheckBox,当它和 ToggleGroup 一起使用的时候,可以变成 RadioButton。\n * @class Toggle\n * @extends Button\n * @uses GraySpriteState\n */\nlet Toggle = cc.Class({\n name: 'cc.Toggle',\n extends: require('./CCButton'),\n mixins: [GraySpriteState],\n editor: CC_EDITOR && {\n menu: 'i18n:MAIN_MENU.component.ui/Toggle',\n help: 'i18n:COMPONENT.help_url.toggle',\n inspector: 'packages://inspector/inspectors/comps/toggle.js',\n },\n\n properties: {\n /**\n * !#en When this value is true, the check mark component will be enabled, otherwise\n * the check mark component will be disabled.\n * !#zh 如果这个设置为 true,则 check mark 组件会处于 enabled 状态,否则处于 disabled 状态。\n * @property {Boolean} isChecked\n */\n _N$isChecked: true,\n isChecked: {\n get: function () {\n return this._N$isChecked;\n },\n set: function (value) {\n if (value === this._N$isChecked) {\n return;\n }\n\n var group = this.toggleGroup || this._toggleContainer;\n if (group && group.enabled && this._N$isChecked) {\n if (!group.allowSwitchOff) {\n return;\n }\n\n }\n\n this._N$isChecked = value;\n this._updateCheckMark();\n\n if (group && group.enabled) {\n group.updateToggles(this);\n }\n\n if (cc.Toggle._triggerEventInScript_isChecked) {\n this._emitToggleEvents();\n }\n },\n tooltip: CC_DEV && 'i18n:COMPONENT.toggle.isChecked',\n },\n\n /**\n * !#en The toggle group which the toggle belongs to, when it is null, the toggle is a CheckBox.\n * Otherwise, the toggle is a RadioButton.\n * !#zh Toggle 所属的 ToggleGroup,这个属性是可选的。如果这个属性为 null,则 Toggle 是一个 CheckBox,\n * 否则,Toggle 是一个 RadioButton。\n * @property {ToggleGroup} toggleGroup\n */\n toggleGroup: {\n default: null,\n tooltip: CC_DEV && 'i18n:COMPONENT.toggle.toggleGroup',\n type: require('./CCToggleGroup')\n },\n\n /**\n * !#en The image used for the checkmark.\n * !#zh Toggle 处于选中状态时显示的图片\n * @property {Sprite} checkMark\n */\n checkMark: {\n default: null,\n type: cc.Sprite,\n tooltip: CC_DEV && 'i18n:COMPONENT.toggle.checkMark'\n },\n\n /**\n * !#en If Toggle is clicked, it will trigger event's handler\n * !#zh Toggle 按钮的点击事件列表。\n * @property {Component.EventHandler[]} checkEvents\n */\n checkEvents: {\n default: [],\n type: cc.Component.EventHandler\n },\n\n _resizeToTarget: {\n animatable: false,\n set: function (value) {\n if (value) {\n this._resizeNodeToTargetNode();\n }\n }\n },\n\n },\n\n statics: {\n _triggerEventInScript_check: false,\n _triggerEventInScript_isChecked: false,\n },\n\n onEnable: function () {\n this._super();\n if (!CC_EDITOR) {\n this._registerToggleEvent();\n }\n if (this.toggleGroup && this.toggleGroup.enabledInHierarchy) {\n this.toggleGroup.addToggle(this);\n }\n },\n\n onDisable: function () {\n this._super();\n if (!CC_EDITOR) {\n this._unregisterToggleEvent();\n }\n if (this.toggleGroup && this.toggleGroup.enabledInHierarchy) {\n this.toggleGroup.removeToggle(this);\n }\n },\n\n _hideCheckMark () {\n this._N$isChecked = false;\n this._updateCheckMark();\n },\n\n toggle: function (event) {\n this.isChecked = !this.isChecked;\n if (!cc.Toggle._triggerEventInScript_isChecked && (cc.Toggle._triggerEventInScript_check || event)) {\n this._emitToggleEvents();\n }\n },\n\n /**\n * !#en Make the toggle button checked.\n * !#zh 使 toggle 按钮处于选中状态\n * @method check\n */\n check: function () {\n this.isChecked = true;\n if (!cc.Toggle._triggerEventInScript_isChecked && cc.Toggle._triggerEventInScript_check) {\n this._emitToggleEvents();\n }\n },\n\n /**\n * !#en Make the toggle button unchecked.\n * !#zh 使 toggle 按钮处于未选中状态\n * @method uncheck\n */\n uncheck: function () {\n this.isChecked = false;\n if (!cc.Toggle._triggerEventInScript_isChecked && cc.Toggle._triggerEventInScript_check) {\n this._emitToggleEvents();\n }\n },\n\n _updateCheckMark: function () {\n if (this.checkMark) {\n this.checkMark.node.active = !!this.isChecked;\n }\n },\n\n _updateDisabledState: function () {\n this._super();\n\n if (this.enableAutoGrayEffect && this.checkMark) {\n let useGrayMaterial = !this.interactable;\n this._switchGrayMaterial(useGrayMaterial, this.checkMark);\n }\n },\n\n _registerToggleEvent: function () {\n this.node.on('click', this.toggle, this);\n },\n\n _unregisterToggleEvent: function () {\n this.node.off('click', this.toggle, this);\n },\n\n _emitToggleEvents: function () {\n this.node.emit('toggle', this);\n if (this.checkEvents) {\n cc.Component.EventHandler.emitEvents(this.checkEvents, this);\n }\n }\n\n});\n\ncc.Toggle = module.exports = Toggle;\n\nconst js = require('../platform/js');\n\njs.get(Toggle.prototype, '_toggleContainer',\n function () {\n let parent = this.node.parent;\n if (cc.Node.isNode(parent)) {\n return parent.getComponent(cc.ToggleContainer);\n }\n return null;\n }\n);\n\n/**\n * !#en\n * Note: This event is emitted from the node to which the component belongs.\n * !#zh\n * 注意:此事件是从该组件所属的 Node 上面派发出来的,需要用 node.on 来监听。\n * @event toggle\n * @param {Event.EventCustom} event\n * @param {Toggle} toggle - The Toggle component.\n */\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * !#en ToggleContainer is not a visiable UI component but a way to modify the behavior of a set of Toggles.
\n * Toggles that belong to the same group could only have one of them to be switched on at a time.
\n * Note: All the first layer child node containing the toggle component will auto be added to the container\n * !#zh ToggleContainer 不是一个可见的 UI 组件,它可以用来修改一组 Toggle 组件的行为。
\n * 当一组 Toggle 属于同一个 ToggleContainer 的时候,任何时候只能有一个 Toggle 处于选中状态。
\n * 注意:所有包含 Toggle 组件的一级子节点都会自动被添加到该容器中\n * @class ToggleContainer\n * @extends Component\n */\nvar ToggleContainer = cc.Class({\n name: 'cc.ToggleContainer',\n extends: cc.Component,\n editor: CC_EDITOR && {\n menu: 'i18n:MAIN_MENU.component.ui/ToggleContainer',\n help: 'i18n:COMPONENT.help_url.toggleContainer',\n executeInEditMode: true\n },\n\n properties: {\n /**\n * !#en If this setting is true, a toggle could be switched off and on when pressed.\n * If it is false, it will make sure there is always only one toggle could be switched on\n * and the already switched on toggle can't be switched off.\n * !#zh 如果这个设置为 true, 那么 toggle 按钮在被点击的时候可以反复地被选中和未选中。\n * @property {Boolean} allowSwitchOff\n */\n allowSwitchOff: {\n tooltip: CC_DEV && 'i18n:COMPONENT.toggle_group.allowSwitchOff',\n default: false\n },\n\n /**\n * !#en If Toggle is clicked, it will trigger event's handler\n * !#zh Toggle 按钮的点击事件列表。\n * @property {Component.EventHandler[]} checkEvents\n */\n checkEvents: {\n default: [],\n type: cc.Component.EventHandler\n },\n },\n\n updateToggles: function (toggle) {\n if(!this.enabledInHierarchy) return;\n\n if (toggle.isChecked) {\n this.toggleItems.forEach(function (item) {\n if (item !== toggle && item.isChecked && item.enabled) {\n item._hideCheckMark();\n }\n });\n\n if (this.checkEvents) {\n cc.Component.EventHandler.emitEvents(this.checkEvents, toggle);\n }\n }\n },\n\n _allowOnlyOneToggleChecked: function () {\n var isChecked = false;\n this.toggleItems.forEach(function (item) {\n if (isChecked) {\n item._hideCheckMark();\n }\n else if (item.isChecked) {\n isChecked = true;\n }\n });\n\n return isChecked;\n },\n\n _makeAtLeastOneToggleChecked: function () {\n var isChecked = this._allowOnlyOneToggleChecked();\n\n if (!isChecked && !this.allowSwitchOff) {\n var toggleItems = this.toggleItems;\n if (toggleItems.length > 0) {\n toggleItems[0].check();\n }\n }\n },\n\n onEnable: function () {\n this._makeAtLeastOneToggleChecked();\n this.node.on('child-added', this._allowOnlyOneToggleChecked, this);\n this.node.on('child-removed', this._makeAtLeastOneToggleChecked, this);\n },\n\n onDisable: function () {\n this.node.off('child-added', this._allowOnlyOneToggleChecked, this);\n this.node.off('child-removed', this._makeAtLeastOneToggleChecked, this);\n },\n});\n\n/**\n * !#en Read only property, return the toggle items array reference managed by ToggleContainer.\n * !#zh 只读属性,返回 ToggleContainer 管理的 toggle 数组引用\n * @property {Toggle[]} toggleItems\n */\nvar js = require('../platform/js');\njs.get(ToggleContainer.prototype, 'toggleItems',\n function () {\n return this.node._children.map(function (item) {\n return item.getComponent(cc.Toggle);\n }).filter(Boolean);\n }\n);\n\ncc.ToggleContainer = module.exports = ToggleContainer;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * !#en ToggleGroup is not a visiable UI component but a way to modify the behavior of a set of Toggles.\n * Toggles that belong to the same group could only have one of them to be switched on at a time.\n * !#zh ToggleGroup 不是一个可见的 UI 组件,它可以用来修改一组 Toggle 组件的行为。当一组 Toggle 属于同一个 ToggleGroup 的时候,\n * 任何时候只能有一个 Toggle 处于选中状态。\n * @class ToggleGroup\n * @extends Component\n */\nvar ToggleGroup = cc.Class({\n name: 'cc.ToggleGroup',\n extends: cc.Component,\n ctor: function () {\n this._toggleItems = [];\n },\n editor: CC_EDITOR && {\n menu: 'i18n:MAIN_MENU.component.ui/ToggleGroup (Legacy)',\n help: 'i18n:COMPONENT.help_url.toggleGroup'\n },\n\n properties: {\n /**\n * !#en If this setting is true, a toggle could be switched off and on when pressed.\n * If it is false, it will make sure there is always only one toggle could be switched on\n * and the already switched on toggle can't be switched off.\n * !#zh 如果这个设置为 true, 那么 toggle 按钮在被点击的时候可以反复地被选中和未选中。\n * @property {Boolean} allowSwitchOff\n */\n allowSwitchOff: {\n tooltip: CC_DEV && 'i18n:COMPONENT.toggle_group.allowSwitchOff',\n default: false\n },\n\n /**\n * !#en Read only property, return the toggle items array reference managed by toggleGroup.\n * !#zh 只读属性,返回 toggleGroup 管理的 toggle 数组引用\n * @property {Array} toggleItems\n */\n toggleItems: {\n get: function () {\n return this._toggleItems;\n }\n }\n },\n\n updateToggles: function (toggle) {\n if(!this.enabledInHierarchy) return;\n\n this._toggleItems.forEach(function (item){\n if(toggle.isChecked) {\n if (item !== toggle && item.isChecked && item.enabled) {\n item._hideCheckMark();\n }\n }\n });\n },\n\n addToggle: function (toggle) {\n var index = this._toggleItems.indexOf(toggle);\n if (index === -1) {\n this._toggleItems.push(toggle);\n }\n this._allowOnlyOneToggleChecked();\n },\n\n removeToggle: function (toggle) {\n var index = this._toggleItems.indexOf(toggle);\n if(index > -1) {\n this._toggleItems.splice(index, 1);\n }\n this._makeAtLeastOneToggleChecked();\n },\n\n _allowOnlyOneToggleChecked: function () {\n var isChecked = false;\n this._toggleItems.forEach(function (item) {\n if(isChecked && item.enabled) {\n item._hideCheckMark();\n }\n\n if (item.isChecked && item.enabled) {\n isChecked = true;\n }\n });\n\n return isChecked;\n },\n\n _makeAtLeastOneToggleChecked: function () {\n var isChecked = this._allowOnlyOneToggleChecked();\n\n if(!isChecked && !this.allowSwitchOff) {\n if(this._toggleItems.length > 0) {\n this._toggleItems[0].isChecked = true;\n }\n }\n },\n\n start: function () {\n this._makeAtLeastOneToggleChecked();\n }\n});\n\nvar js = require('../platform/js');\nvar showed = false;\njs.get(cc, 'ToggleGroup', function () {\n if (!showed) {\n cc.errorID(1405, 'cc.ToggleGroup', 'cc.ToggleContainer');\n showed = true;\n }\n return ToggleGroup;\n});\n\nmodule.exports = ToggleGroup;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar WidgetManager = require('../base-ui/CCWidgetManager');\n\n/**\n * !#en Enum for Widget's alignment mode, indicating when the widget should refresh.\n * !#zh Widget 的对齐模式,表示 Widget 应该何时刷新。\n * @enum Widget.AlignMode\n */\n/**\n * !#en\n * Only align once when the Widget is enabled for the first time.\n * This will allow the script or animation to continue controlling the current node.\n * It will only be aligned once before the end of frame when onEnable is called,\n * then immediately disables the Widget.\n * !#zh\n * 仅在 Widget 第一次激活时对齐一次,便于脚本或动画继续控制当前节点。\n * 开启后会在 onEnable 时所在的那一帧结束前对齐一次,然后立刻禁用该 Widget。\n * @property {Number} ONCE\n */\n/**\n * !#en Align first from the beginning as ONCE, and then realign it every time the window is resized.\n * !#zh 一开始会像 ONCE 一样对齐一次,之后每当窗口大小改变时还会重新对齐。\n * @property {Number} ON_WINDOW_RESIZE\n */\n/**\n * !#en Keep aligning all the way.\n * !#zh 始终保持对齐。\n * @property {Number} ALWAYS\n */\nvar AlignMode = WidgetManager.AlignMode;\n\nvar AlignFlags = WidgetManager._AlignFlags;\nvar TOP = AlignFlags.TOP;\nvar MID = AlignFlags.MID;\nvar BOT = AlignFlags.BOT;\nvar LEFT = AlignFlags.LEFT;\nvar CENTER = AlignFlags.CENTER;\nvar RIGHT = AlignFlags.RIGHT;\nvar TOP_BOT = TOP | BOT;\nvar LEFT_RIGHT = LEFT | RIGHT;\n\n/**\n * !#en\n * Stores and manipulate the anchoring based on its parent.\n * Widget are used for GUI but can also be used for other things.\n * Widget will adjust current node's position and size automatically, but the results after adjustment can not be obtained until the next frame unless you call {{#crossLink \"Widget/updateAlignment:method\"}}{{/crossLink}} manually.\n * !#zh\n * Widget 组件,用于设置和适配其相对于父节点的边距,Widget 通常被用于 UI 界面,也可以用于其他地方。\n * Widget 会自动调整当前节点的坐标和宽高,不过目前调整后的结果要到下一帧才能在脚本里获取到,除非你先手动调用 {{#crossLink \"Widget/updateAlignment:method\"}}{{/crossLink}}。\n *\n * @class Widget\n * @extends Component\n */\nvar Widget = cc.Class({\n name: 'cc.Widget', extends: require('./CCComponent'),\n\n editor: CC_EDITOR && {\n menu: 'i18n:MAIN_MENU.component.ui/Widget',\n help: 'i18n:COMPONENT.help_url.widget',\n inspector: 'packages://inspector/inspectors/comps/ccwidget.js',\n executeInEditMode: true,\n disallowMultiple: true,\n },\n\n properties: {\n\n /**\n * !#en Specifies an alignment target that can only be one of the parent nodes of the current node.\n * The default value is null, and when null, indicates the current parent.\n * !#zh 指定一个对齐目标,只能是当前节点的其中一个父节点,默认为空,为空时表示当前父节点。\n * @property {Node} target\n * @default null\n */\n target: {\n get: function () {\n return this._target;\n },\n set: function (value) {\n this._target = value;\n if (CC_EDITOR && !cc.engine._isPlaying && this.node._parent) {\n // adjust the offsets to keep the size and position unchanged after target chagned\n WidgetManager.updateOffsetsToStayPut(this);\n }\n },\n type: cc.Node,\n tooltip: CC_DEV && 'i18n:COMPONENT.widget.target',\n },\n\n // ENABLE ALIGN ?\n\n /**\n * !#en Whether to align the top.\n * !#zh 是否对齐上边。\n * @property isAlignTop\n * @type {Boolean}\n * @default false\n */\n isAlignTop: {\n get: function () {\n return (this._alignFlags & TOP) > 0;\n },\n set: function (value) {\n this._setAlign(TOP, value);\n },\n animatable: false,\n tooltip: CC_DEV && 'i18n:COMPONENT.widget.align_top',\n },\n\n /**\n * !#en\n * Vertically aligns the midpoint, This will open the other vertical alignment options cancel.\n * !#zh\n * 是否垂直方向对齐中点,开启此项会将垂直方向其他对齐选项取消。\n * @property isAlignVerticalCenter\n * @type {Boolean}\n * @default false\n */\n isAlignVerticalCenter: {\n get: function () {\n return (this._alignFlags & MID) > 0;\n },\n set: function (value) {\n if (value) {\n this.isAlignTop = false;\n this.isAlignBottom = false;\n this._alignFlags |= MID;\n }\n else {\n this._alignFlags &= ~MID;\n }\n },\n animatable: false,\n tooltip: CC_DEV && 'i18n:COMPONENT.widget.align_v_center',\n },\n\n /**\n * !#en Whether to align the bottom.\n * !#zh 是否对齐下边。\n * @property isAlignBottom\n * @type {Boolean}\n * @default false\n */\n isAlignBottom: {\n get: function () {\n return (this._alignFlags & BOT) > 0;\n },\n set: function (value) {\n this._setAlign(BOT, value);\n },\n animatable: false,\n tooltip: CC_DEV && 'i18n:COMPONENT.widget.align_bottom',\n },\n\n /**\n * !#en Whether to align the left.\n * !#zh 是否对齐左边\n * @property isAlignLeft\n * @type {Boolean}\n * @default false\n */\n isAlignLeft: {\n get: function () {\n return (this._alignFlags & LEFT) > 0;\n },\n set: function (value) {\n this._setAlign(LEFT, value);\n },\n animatable: false,\n tooltip: CC_DEV && 'i18n:COMPONENT.widget.align_left',\n },\n\n /**\n * !#en\n * Horizontal aligns the midpoint. This will open the other horizontal alignment options canceled.\n * !#zh\n * 是否水平方向对齐中点,开启此选项会将水平方向其他对齐选项取消。\n * @property isAlignHorizontalCenter\n * @type {Boolean}\n * @default false\n */\n isAlignHorizontalCenter: {\n get: function () {\n return (this._alignFlags & CENTER) > 0;\n },\n set: function (value) {\n if (value) {\n this.isAlignLeft = false;\n this.isAlignRight = false;\n this._alignFlags |= CENTER;\n }\n else {\n this._alignFlags &= ~CENTER;\n }\n },\n animatable: false,\n tooltip: CC_DEV && 'i18n:COMPONENT.widget.align_h_center',\n },\n\n /**\n * !#en Whether to align the right.\n * !#zh 是否对齐右边。\n * @property isAlignRight\n * @type {Boolean}\n * @default false\n */\n isAlignRight: {\n get: function () {\n return (this._alignFlags & RIGHT) > 0;\n },\n set: function (value) {\n this._setAlign(RIGHT, value);\n },\n animatable: false,\n tooltip: CC_DEV && 'i18n:COMPONENT.widget.align_right',\n },\n\n /**\n * !#en\n * Whether the stretched horizontally, when enable the left and right alignment will be stretched horizontally,\n * the width setting is invalid (read only).\n * !#zh\n * 当前是否水平拉伸。当同时启用左右对齐时,节点将会被水平拉伸,此时节点的宽度只读。\n * @property isStretchWidth\n * @type {Boolean}\n * @default false\n * @readOnly\n */\n isStretchWidth: {\n get: function () {\n return (this._alignFlags & LEFT_RIGHT) === LEFT_RIGHT;\n },\n visible: false\n },\n /**\n * !#en\n * Whether the stretched vertically, when enable the left and right alignment will be stretched vertically,\n * then height setting is invalid (read only)\n * !#zh\n * 当前是否垂直拉伸。当同时启用上下对齐时,节点将会被垂直拉伸,此时节点的高度只读。\n * @property isStretchHeight\n * @type {Boolean}\n * @default false\n * @readOnly\n */\n isStretchHeight: {\n get: function () {\n return (this._alignFlags & TOP_BOT) === TOP_BOT;\n },\n visible: false\n },\n\n // ALIGN MARGINS\n\n /**\n * !#en\n * The margins between the top of this node and the top of parent node,\n * the value can be negative, Only available in 'isAlignTop' open.\n * !#zh\n * 本节点顶边和父节点顶边的距离,可填写负值,只有在 isAlignTop 开启时才有作用。\n * @property top\n * @type {Number}\n * @default 0\n */\n top: {\n get: function () {\n return this._top;\n },\n set: function (value) {\n this._top = value;\n },\n tooltip: CC_DEV && 'i18n:COMPONENT.widget.top',\n },\n\n /**\n * !#en\n * The margins between the bottom of this node and the bottom of parent node,\n * the value can be negative, Only available in 'isAlignBottom' open.\n * !#zh\n * 本节点底边和父节点底边的距离,可填写负值,只有在 isAlignBottom 开启时才有作用。\n * @property bottom\n * @type {Number}\n * @default 0\n */\n bottom: {\n get: function () {\n return this._bottom;\n },\n set: function (value) {\n this._bottom = value;\n },\n tooltip: CC_DEV && 'i18n:COMPONENT.widget.bottom',\n },\n\n /**\n * !#en\n * The margins between the left of this node and the left of parent node,\n * the value can be negative, Only available in 'isAlignLeft' open.\n * !#zh\n * 本节点左边和父节点左边的距离,可填写负值,只有在 isAlignLeft 开启时才有作用。\n * @property left\n * @type {Number}\n * @default 0\n */\n left: {\n get: function () {\n return this._left;\n },\n set: function (value) {\n this._left = value;\n },\n tooltip: CC_DEV && 'i18n:COMPONENT.widget.left',\n },\n\n /**\n * !#en\n * The margins between the right of this node and the right of parent node,\n * the value can be negative, Only available in 'isAlignRight' open.\n * !#zh\n * 本节点右边和父节点右边的距离,可填写负值,只有在 isAlignRight 开启时才有作用。\n * @property right\n * @type {Number}\n * @default 0\n */\n right: {\n get: function () {\n return this._right;\n },\n set: function (value) {\n this._right = value;\n },\n tooltip: CC_DEV && 'i18n:COMPONENT.widget.right',\n },\n\n /**\n * !#en\n * Horizontal aligns the midpoint offset value,\n * the value can be negative, Only available in 'isAlignHorizontalCenter' open.\n * !#zh 水平居中的偏移值,可填写负值,只有在 isAlignHorizontalCenter 开启时才有作用。\n * @property horizontalCenter\n * @type {Number}\n * @default 0\n */\n horizontalCenter: {\n get: function () {\n return this._horizontalCenter;\n },\n set: function (value) {\n this._horizontalCenter = value;\n },\n tooltip: CC_DEV && 'i18n:COMPONENT.widget.horizontal_center',\n },\n\n /**\n * !#en\n * Vertical aligns the midpoint offset value,\n * the value can be negative, Only available in 'isAlignVerticalCenter' open.\n * !#zh 垂直居中的偏移值,可填写负值,只有在 isAlignVerticalCenter 开启时才有作用。\n * @property verticalCenter\n * @type {Number}\n * @default 0\n */\n verticalCenter: {\n get: function () {\n return this._verticalCenter;\n },\n set: function (value) {\n this._verticalCenter = value;\n },\n tooltip: CC_DEV && 'i18n:COMPONENT.widget.vertical_center',\n },\n\n // PARCENTAGE OR ABSOLUTE\n\n /**\n * !#en If true, horizontalCenter is pixel margin, otherwise is percentage (0 - 1) margin.\n * !#zh 如果为 true,\"horizontalCenter\" 将会以像素作为偏移值,反之为百分比(0 到 1)。\n * @property isAbsoluteHorizontalCenter\n * @type {Boolean}\n * @default true\n */\n isAbsoluteHorizontalCenter: {\n get: function () {\n return this._isAbsHorizontalCenter;\n },\n set: function (value) {\n this._isAbsHorizontalCenter = value;\n },\n animatable: false\n },\n\n /**\n * !#en If true, verticalCenter is pixel margin, otherwise is percentage (0 - 1) margin.\n * !#zh 如果为 true,\"verticalCenter\" 将会以像素作为偏移值,反之为百分比(0 到 1)。\n * @property isAbsoluteVerticalCenter\n * @type {Boolean}\n * @default true\n */\n isAbsoluteVerticalCenter: {\n get: function () {\n return this._isAbsVerticalCenter;\n },\n set: function (value) {\n this._isAbsVerticalCenter = value;\n },\n animatable: false\n },\n\n /**\n * !#en\n * If true, top is pixel margin, otherwise is percentage (0 - 1) margin relative to the parent's height.\n * !#zh\n * 如果为 true,\"top\" 将会以像素作为边距,否则将会以相对父物体高度的百分比(0 到 1)作为边距。\n * @property isAbsoluteTop\n * @type {Boolean}\n * @default true\n */\n isAbsoluteTop: {\n get: function () {\n return this._isAbsTop;\n },\n set: function (value) {\n this._isAbsTop = value;\n },\n animatable: false\n },\n\n /**\n * !#en\n * If true, bottom is pixel margin, otherwise is percentage (0 - 1) margin relative to the parent's height.\n * !#zh\n * 如果为 true,\"bottom\" 将会以像素作为边距,否则将会以相对父物体高度的百分比(0 到 1)作为边距。\n * @property isAbsoluteBottom\n * @type {Boolean}\n * @default true\n */\n isAbsoluteBottom: {\n get: function () {\n return this._isAbsBottom;\n },\n set: function (value) {\n this._isAbsBottom = value;\n },\n animatable: false\n },\n\n /**\n * !#en\n * If true, left is pixel margin, otherwise is percentage (0 - 1) margin relative to the parent's width.\n * !#zh\n * 如果为 true,\"left\" 将会以像素作为边距,否则将会以相对父物体宽度的百分比(0 到 1)作为边距。\n * @property isAbsoluteLeft\n * @type {Boolean}\n * @default true\n */\n isAbsoluteLeft: {\n get: function () {\n return this._isAbsLeft;\n },\n set: function (value) {\n this._isAbsLeft = value;\n },\n animatable: false\n },\n\n /**\n * !#en\n * If true, right is pixel margin, otherwise is percentage (0 - 1) margin relative to the parent's width.\n * !#zh\n * 如果为 true,\"right\" 将会以像素作为边距,否则将会以相对父物体宽度的百分比(0 到 1)作为边距。\n * @property isAbsoluteRight\n * @type {Boolean}\n * @default true\n */\n isAbsoluteRight: {\n get: function () {\n return this._isAbsRight;\n },\n set: function (value) {\n this._isAbsRight = value;\n },\n animatable: false\n },\n\n /**\n * !#en Specifies the alignment mode of the Widget, which determines when the widget should refresh.\n * !#zh 指定 Widget 的对齐模式,用于决定 Widget 应该何时刷新。\n * @property {Widget.AlignMode} alignMode\n * @example\n * widget.alignMode = cc.Widget.AlignMode.ON_WINDOW_RESIZE;\n */\n alignMode: {\n default: AlignMode.ON_WINDOW_RESIZE,\n type: AlignMode,\n tooltip: CC_DEV && 'i18n:COMPONENT.widget.align_mode',\n },\n\n //\n\n _wasAlignOnce: {\n default: undefined,\n formerlySerializedAs: 'isAlignOnce',\n },\n\n _target: null,\n\n /**\n * !#zh: 对齐开关,由 AlignFlags 组成\n *\n * @property _alignFlags\n * @type {Number}\n * @default 0\n * @private\n */\n _alignFlags: 0,\n\n _left: 0,\n _right: 0,\n _top: 0,\n _bottom: 0,\n _verticalCenter: 0,\n _horizontalCenter: 0,\n _isAbsLeft: true,\n _isAbsRight: true,\n _isAbsTop: true,\n _isAbsBottom: true,\n _isAbsHorizontalCenter: true,\n _isAbsVerticalCenter: true,\n\n // original size before align\n _originalWidth: 0,\n _originalHeight: 0\n },\n\n statics: {\n AlignMode: AlignMode,\n },\n\n onLoad: function () {\n if (this._wasAlignOnce !== undefined) {\n // migrate for old version\n this.alignMode = this._wasAlignOnce ? AlignMode.ONCE : AlignMode.ALWAYS;\n this._wasAlignOnce = undefined;\n }\n },\n\n onEnable: function () {\n WidgetManager.add(this);\n },\n\n onDisable: function () {\n WidgetManager.remove(this);\n },\n\n _validateTargetInDEV: CC_DEV && function () {\n var target = this._target;\n if (target) {\n var isParent = this.node !== target && this.node.isChildOf(target);\n if (!isParent) {\n cc.errorID(6500);\n this._target = null;\n }\n }\n\n },\n\n _setAlign: function (flag, isAlign) {\n var current = (this._alignFlags & flag) > 0;\n if (isAlign === current) {\n return;\n }\n var isHorizontal = (flag & LEFT_RIGHT) > 0;\n if (isAlign) {\n this._alignFlags |= flag;\n\n if (isHorizontal) {\n this.isAlignHorizontalCenter = false;\n if (this.isStretchWidth) {\n // become stretch\n this._originalWidth = this.node.width;\n // test check conflict\n if (CC_EDITOR && !cc.engine.isPlaying) {\n _Scene.DetectConflict.checkConflict_Widget(this);\n }\n }\n }\n else {\n this.isAlignVerticalCenter = false;\n if (this.isStretchHeight) {\n // become stretch\n this._originalHeight = this.node.height;\n // test check conflict\n if (CC_EDITOR && !cc.engine.isPlaying) {\n _Scene.DetectConflict.checkConflict_Widget(this);\n }\n }\n }\n\n if (CC_EDITOR && !cc.engine._isPlaying && this.node._parent) {\n // adjust the offsets to keep the size and position unchanged after alignment chagned\n WidgetManager.updateOffsetsToStayPut(this, flag);\n }\n }\n else {\n if (isHorizontal) {\n if (this.isStretchWidth) {\n // will cancel stretch\n this.node.width = this._originalWidth;\n }\n }\n else {\n if (this.isStretchHeight) {\n // will cancel stretch\n this.node.height = this._originalHeight;\n }\n }\n\n this._alignFlags &= ~flag;\n }\n },\n\n /**\n * !#en\n * Immediately perform the widget alignment. You need to manually call this method only if\n * you need to get the latest results after the alignment before the end of current frame.\n * !#zh\n * 立刻执行 widget 对齐操作。这个接口一般不需要手工调用。\n * 只有当你需要在当前帧结束前获得 widget 对齐后的最新结果时才需要手动调用这个方法。\n *\n * @method updateAlignment\n *\n * @example\n * widget.top = 10; // change top margin\n * cc.log(widget.node.y); // not yet changed\n * widget.updateAlignment();\n * cc.log(widget.node.y); // changed\n */\n updateAlignment: function () {\n WidgetManager.updateAlignment(this.node);\n },\n});\n\n/**\n * !#en\n * When turned on, it will only be aligned once at the end of the onEnable frame,\n * then immediately disables the current component.\n * This will allow the script or animation to continue controlling the current node.\n * Note: It will still be aligned at the frame when onEnable is called.\n * !#zh\n * 开启后仅会在 onEnable 的当帧结束时对齐一次,然后立刻禁用当前组件。\n * 这样便于脚本或动画继续控制当前节点。\n * 注意:onEnable 时所在的那一帧仍然会进行对齐。\n * @property {Boolean} isAlignOnce\n * @default false\n * @deprecated\n */\nObject.defineProperty(Widget.prototype, 'isAlignOnce', {\n get () {\n if (CC_DEBUG) {\n cc.warn('`widget.isAlignOnce` is deprecated, use `widget.alignMode === cc.Widget.AlignMode.ONCE` instead please.');\n }\n return this.alignMode === AlignMode.ONCE;\n },\n set (value) {\n if (CC_DEBUG) {\n cc.warn('`widget.isAlignOnce` is deprecated, use `widget.alignMode = cc.Widget.AlignMode.*` instead please.');\n }\n this.alignMode = value ? AlignMode.ONCE : AlignMode.ALWAYS;\n }\n});\n\n\ncc.Widget = module.exports = Widget;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nrequire('./CCComponent');\nrequire('./CCComponentEventHandler');\nrequire('./missing-script');\n\n// In case subContextView modules are excluded\nlet SubContextView = require('./SubContextView');\nif (!SubContextView) {\n SubContextView = cc.Class({\n name: 'cc.SubContextView',\n extends: cc.Component,\n });\n cc.SubContextView = cc.WXSubContextView = cc.SwanSubContextView = SubContextView;\n}\n\nvar components = [\n require('./CCSprite'),\n require('./CCWidget'),\n require('./CCCanvas'),\n require('./CCAudioSource'),\n require('./CCAnimation'),\n require('./CCButton'),\n require('./CCLabel'),\n require('./CCProgressBar'),\n require('./CCMask'),\n require('./CCScrollBar'),\n require('./CCScrollView'),\n require('./CCPageViewIndicator'),\n require('./CCPageView'),\n require('./CCSlider'),\n require('./CCLayout'),\n require('./editbox/CCEditBox'),\n require('./CCLabelOutline'),\n require('./CCLabelShadow'),\n require('./CCRichText'),\n require('./CCToggleContainer'),\n require('./CCToggleGroup'),\n require('./CCToggle'),\n require('./CCBlockInputEvents'),\n require('./CCMotionStreak'),\n require('./CCSafeArea'),\n SubContextView,\n];\n\nmodule.exports = components;","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar js = cc.js;\n\n/*\n * A temp fallback to contain the original serialized data which can not be loaded.\n * Deserialized as a component by default.\n */\nvar MissingScript = cc.Class({\n name: 'cc.MissingScript', \n extends: cc.Component,\n editor: {\n inspector: 'packages://inspector/inspectors/comps/missing-script.js',\n },\n properties: {\n //_scriptUuid: {\n // get: function () {\n // var id = this._$erialized.__type__;\n // if (Editor.Utils.UuidUtils.isUuid(id)) {\n // return Editor.Utils.UuidUtils.decompressUuid(id);\n // }\n // return '';\n // },\n // set: function (value) {\n // if ( !sandbox.compiled ) {\n // cc.error('Scripts not yet compiled, please fix script errors and compile first.');\n // return;\n // }\n // if (value && Editor.Utils.UuidUtils.isUuid(value._uuid)) {\n // var classId = Editor.Utils.UuidUtils.compressUuid(value);\n // if (cc.js._getClassById(classId)) {\n // this._$erialized.__type__ = classId;\n // Editor.Ipc.sendToWins('reload:window-scripts', sandbox.compiled);\n // }\n // else {\n // cc.error('Can not find a component in the script which uuid is \"%s\".', value);\n // }\n // }\n // else {\n // cc.error('invalid script');\n // }\n // }\n //},\n compiled: {\n default: false,\n serializable: false\n },\n // the serialized data for original script object\n _$erialized: {\n default: null,\n visible: false,\n editorOnly: true\n }\n },\n ctor: CC_EDITOR && function () {\n this.compiled = _Scene.Sandbox.compiled;\n },\n statics: {\n /*\n * @param {string} id\n * @return {function} constructor\n */\n safeFindClass: function (id) {\n var cls = js._getClassById(id);\n if (cls) {\n return cls;\n }\n cc.deserialize.reportMissingClass(id);\n return MissingScript;\n },\n },\n onLoad: function () {\n cc.warnID(4600, this.node.name);\n }\n});\n\ncc._MissingScript = module.exports = MissingScript;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar js = cc.js;\n\nrequire('../event/event');\n\n/**\n * !#en The mouse event\n * !#zh 鼠标事件类型\n * @class Event.EventMouse\n *\n * @extends Event\n * @param {Number} eventType - The mouse event type, UP, DOWN, MOVE, CANCELED\n * @param {Boolean} [bubbles=false] - A boolean indicating whether the event bubbles up through the tree or not\n */\nvar EventMouse = function (eventType, bubbles) {\n cc.Event.call(this, cc.Event.MOUSE, bubbles);\n this._eventType = eventType;\n this._button = 0;\n this._x = 0;\n this._y = 0;\n this._prevX = 0;\n this._prevY = 0;\n this._scrollX = 0;\n this._scrollY = 0;\n};\n\njs.extend(EventMouse, cc.Event);\nvar proto = EventMouse.prototype;\n\n/**\n * !#en Sets scroll data.\n * !#zh 设置鼠标的滚动数据。\n * @method setScrollData\n * @param {Number} scrollX\n * @param {Number} scrollY\n */\nproto.setScrollData = function (scrollX, scrollY) {\n this._scrollX = scrollX;\n this._scrollY = scrollY;\n};\n\n/**\n * !#en Returns the x axis scroll value.\n * !#zh 获取鼠标滚动的X轴距离,只有滚动时才有效。\n * @method getScrollX\n * @returns {Number}\n */\nproto.getScrollX = function () {\n return this._scrollX;\n};\n\n/**\n * !#en Returns the y axis scroll value.\n * !#zh 获取滚轮滚动的 Y 轴距离,只有滚动时才有效。\n * @method getScrollY\n * @returns {Number}\n */\nproto.getScrollY = function () {\n return this._scrollY;\n};\n\n/**\n * !#en Sets cursor location.\n * !#zh 设置当前鼠标位置。\n * @method setLocation\n * @param {Number} x\n * @param {Number} y\n */\nproto.setLocation = function (x, y) {\n this._x = x;\n this._y = y;\n};\n\n/**\n * !#en Returns cursor location.\n * !#zh 获取鼠标位置对象,对象包含 x 和 y 属性。\n * @method getLocation\n * @return {Vec2} location\n */\nproto.getLocation = function () {\n return cc.v2(this._x, this._y);\n};\n\n/**\n * !#en Returns the current cursor location in screen coordinates.\n * !#zh 获取当前事件在游戏窗口内的坐标位置对象,对象包含 x 和 y 属性。\n * @method getLocationInView\n * @return {Vec2}\n */\nproto.getLocationInView = function() {\n return cc.v2(this._x, cc.view._designResolutionSize.height - this._y);\n};\n\nproto._setPrevCursor = function (x, y) {\n this._prevX = x;\n this._prevY = y;\n};\n\n/**\n * !#en Returns the previous touch location.\n * !#zh 获取鼠标点击在上一次事件时的位置对象,对象包含 x 和 y 属性。\n * @method getPreviousLocation\n * @return {Vec2}\n */\nproto.getPreviousLocation = function () {\n return cc.v2(this._prevX, this._prevY);\n};\n\n/**\n * !#en Returns the delta distance from the previous location to current location.\n * !#zh 获取鼠标距离上一次事件移动的距离对象,对象包含 x 和 y 属性。\n * @method getDelta\n * @return {Vec2}\n */\nproto.getDelta = function () {\n return cc.v2(this._x - this._prevX, this._y - this._prevY);\n};\n\n/**\n * !#en Returns the X axis delta distance from the previous location to current location.\n * !#zh 获取鼠标距离上一次事件移动的 X 轴距离。\n * @method getDeltaX\n * @return {Number}\n */\nproto.getDeltaX = function () {\n return this._x - this._prevX;\n};\n\n/**\n * !#en Returns the Y axis delta distance from the previous location to current location.\n * !#zh 获取鼠标距离上一次事件移动的 Y 轴距离。\n * @method getDeltaY\n * @return {Number}\n */\nproto.getDeltaY = function () {\n return this._y - this._prevY;\n};\n\n/**\n * !#en Sets mouse button.\n * !#zh 设置鼠标按键。\n * @method setButton\n * @param {Number} button\n */\nproto.setButton = function (button) {\n this._button = button;\n};\n\n/**\n * !#en Returns mouse button.\n * !#zh 获取鼠标按键。\n * @method getButton\n * @returns {Number}\n */\nproto.getButton = function () {\n return this._button;\n};\n\n/**\n * !#en Returns location X axis data.\n * !#zh 获取鼠标当前位置 X 轴。\n * @method getLocationX\n * @returns {Number}\n */\nproto.getLocationX = function () {\n return this._x;\n};\n\n/**\n * !#en Returns location Y axis data.\n * !#zh 获取鼠标当前位置 Y 轴。\n * @method getLocationY\n * @returns {Number}\n */\nproto.getLocationY = function () {\n return this._y;\n};\n\n//Inner event types of MouseEvent\n/**\n * !#en The none event code of mouse event.\n * !#zh 无。\n * @property NONE\n * @static\n * @type {Number}\n */\nEventMouse.NONE = 0;\n/**\n * !#en The event type code of mouse down event.\n * !#zh 鼠标按下事件。\n * @property DOWN\n * @static\n * @type {Number}\n */\nEventMouse.DOWN = 1;\n/**\n * !#en The event type code of mouse up event.\n * !#zh 鼠标按下后释放事件。\n * @property UP\n * @static\n * @type {Number}\n */\nEventMouse.UP = 2;\n/**\n * !#en The event type code of mouse move event.\n * !#zh 鼠标移动事件。\n * @property MOVE\n * @static\n * @type {Number}\n */\nEventMouse.MOVE = 3;\n/**\n * !#en The event type code of mouse scroll event.\n * !#zh 鼠标滚轮事件。\n * @property SCROLL\n * @static\n * @type {Number}\n */\nEventMouse.SCROLL = 4;\n\n/**\n * !#en The tag of Mouse left button.\n * !#zh 鼠标左键的标签。\n * @property BUTTON_LEFT\n * @static\n * @type {Number}\n */\nEventMouse.BUTTON_LEFT = 0;\n\n/**\n * !#en The tag of Mouse right button (The right button number is 2 on browser).\n * !#zh 鼠标右键的标签。\n * @property BUTTON_RIGHT\n * @static\n * @type {Number}\n */\nEventMouse.BUTTON_RIGHT = 2;\n\n/**\n * !#en The tag of Mouse middle button (The right button number is 1 on browser).\n * !#zh 鼠标中键的标签。\n * @property BUTTON_MIDDLE\n * @static\n * @type {Number}\n */\nEventMouse.BUTTON_MIDDLE = 1;\n\n/**\n * !#en The tag of Mouse button 4.\n * !#zh 鼠标按键 4 的标签。\n * @property BUTTON_4\n * @static\n * @type {Number}\n */\nEventMouse.BUTTON_4 = 3;\n\n/**\n * !#en The tag of Mouse button 5.\n * !#zh 鼠标按键 5 的标签。\n * @property BUTTON_5\n * @static\n * @type {Number}\n */\nEventMouse.BUTTON_5 = 4;\n\n/**\n * !#en The tag of Mouse button 6.\n * !#zh 鼠标按键 6 的标签。\n * @property BUTTON_6\n * @static\n * @type {Number}\n */\nEventMouse.BUTTON_6 = 5;\n\n/**\n * !#en The tag of Mouse button 7.\n * !#zh 鼠标按键 7 的标签。\n * @property BUTTON_7\n * @static\n * @type {Number}\n */\nEventMouse.BUTTON_7 = 6;\n\n/**\n * !#en The tag of Mouse button 8.\n * !#zh 鼠标按键 8 的标签。\n * @property BUTTON_8\n * @static\n * @type {Number}\n */\nEventMouse.BUTTON_8 = 7;\n\n/**\n * !#en The touch event\n * !#zh 触摸事件\n * @class Event.EventTouch\n * @constructor\n * @extends Event\n */\n/**\n * @method constructor\n * @param {Array} touchArr - The array of the touches\n * @param {Boolean} bubbles - A boolean indicating whether the event bubbles up through the tree or not\n */\nvar EventTouch = function (touchArr, bubbles) {\n cc.Event.call(this, cc.Event.TOUCH, bubbles);\n this._eventCode = 0;\n this._touches = touchArr || [];\n /**\n * !#en The current touch object\n * !#zh 当前触点对象\n * @property touch\n * @type {Touch}\n */\n this.touch = null;\n // Actually duplicated, because of history issue, currentTouch was in the original design, touch was added in creator engine\n // They should point to the same object\n this.currentTouch = null;\n};\n\njs.extend(EventTouch, cc.Event);\nproto = EventTouch.prototype;\n\n/**\n * !#en Returns event code.\n * !#zh 获取事件类型。\n * @method getEventCode\n * @returns {Number}\n */\nproto.getEventCode = function () {\n return this._eventCode;\n};\n\n/**\n * !#en Returns touches of event.\n * !#zh 获取触摸点的列表。\n * @method getTouches\n * @returns {Array}\n */\nproto.getTouches = function () {\n return this._touches;\n};\n\nproto._setEventCode = function (eventCode) {\n this._eventCode = eventCode;\n};\n\nproto._setTouches = function (touches) {\n this._touches = touches;\n};\n\n/**\n * !#en Sets touch location.\n * !#zh 设置当前触点位置\n * @method setLocation\n * @param {Number} x\n * @param {Number} y\n */\nproto.setLocation = function (x, y) {\n this.touch && this.touch.setTouchInfo(this.touch.getID(), x, y);\n};\n\n/**\n * !#en Returns touch location.\n * !#zh 获取触点位置。\n * @method getLocation\n * @return {Vec2} location\n */\nproto.getLocation = function () {\n return this.touch ? this.touch.getLocation() : cc.v2();\n};\n\n/**\n * !#en Returns the current touch location in screen coordinates.\n * !#zh 获取当前触点在游戏窗口中的位置。\n * @method getLocationInView\n * @return {Vec2}\n */\nproto.getLocationInView = function() {\n return this.touch ? this.touch.getLocationInView() : cc.v2();\n};\n\n/**\n * !#en Returns the previous touch location.\n * !#zh 获取触点在上一次事件时的位置对象,对象包含 x 和 y 属性。\n * @method getPreviousLocation\n * @return {Vec2}\n */\nproto.getPreviousLocation = function () {\n return this.touch ? this.touch.getPreviousLocation() : cc.v2();\n};\n\n/**\n * !#en Returns the start touch location.\n * !#zh 获取触点落下时的位置对象,对象包含 x 和 y 属性。\n * @method getStartLocation\n * @returns {Vec2}\n */\nproto.getStartLocation = function() {\n return this.touch ? this.touch.getStartLocation() : cc.v2();\n};\n\n/**\n * !#en Returns the id of cc.Touch.\n * !#zh 触点的标识 ID,可以用来在多点触摸中跟踪触点。\n * @method getID\n * @return {Number}\n */\nproto.getID = function () {\n return this.touch ? this.touch.getID() : null;\n};\n\n/**\n * !#en Returns the delta distance from the previous location to current location.\n * !#zh 获取触点距离上一次事件移动的距离对象,对象包含 x 和 y 属性。\n * @method getDelta\n * @return {Vec2}\n */\nproto.getDelta = function () {\n return this.touch ? this.touch.getDelta() : cc.v2();\n};\n\n/**\n * !#en Returns the X axis delta distance from the previous location to current location.\n * !#zh 获取触点距离上一次事件移动的 x 轴距离。\n * @method getDeltaX\n * @return {Number}\n */\nproto.getDeltaX = function () {\n return this.touch ? this.touch.getDelta().x : 0;\n};\n\n/**\n * !#en Returns the Y axis delta distance from the previous location to current location.\n * !#zh 获取触点距离上一次事件移动的 y 轴距离。\n * @method getDeltaY\n * @return {Number}\n */\nproto.getDeltaY = function () {\n return this.touch ? this.touch.getDelta().y : 0;\n};\n\n/**\n * !#en Returns location X axis data.\n * !#zh 获取当前触点 X 轴位置。\n * @method getLocationX\n * @returns {Number}\n */\nproto.getLocationX = function () {\n return this.touch ? this.touch.getLocationX() : 0;\n};\n\n/**\n * !#en Returns location Y axis data.\n * !#zh 获取当前触点 Y 轴位置。\n * @method getLocationY\n * @returns {Number}\n */\nproto.getLocationY = function () {\n return this.touch ? this.touch.getLocationY() : 0;\n};\n\n/**\n * !#en The maximum touch numbers\n * !#zh 最大触摸数量。\n * @constant\n * @type {Number}\n */\nEventTouch.MAX_TOUCHES = 5;\n\n/**\n * !#en The event type code of touch began event.\n * !#zh 开始触摸事件\n * @constant\n * @type {Number}\n */\nEventTouch.BEGAN = 0;\n/**\n * !#en The event type code of touch moved event.\n * !#zh 触摸后移动事件\n * @constant\n * @type {Number}\n */\nEventTouch.MOVED = 1;\n/**\n * !#en The event type code of touch ended event.\n * !#zh 结束触摸事件\n * @constant\n * @type {Number}\n */\nEventTouch.ENDED = 2;\n/**\n * !#en The event type code of touch cancelled event.\n * !#zh 取消触摸事件\n * @constant\n * @type {Number}\n */\nEventTouch.CANCELED = 3;\n\n/**\n * !#en The acceleration event\n * !#zh 加速度事件\n * @class Event.EventAcceleration\n * @extends Event\n *\n * @param {Object} acc - The acceleration\n * @param {Boolean} bubbles - A boolean indicating whether the event bubbles up through the tree or not\n */\nvar EventAcceleration = function (acc, bubbles) {\n cc.Event.call(this, cc.Event.ACCELERATION, bubbles);\n this.acc = acc;\n};\njs.extend(EventAcceleration, cc.Event);\n\n/**\n * !#en The keyboard event\n * !#zh 键盘事件\n * @class Event.EventKeyboard\n * @extends Event\n *\n * @param {Number} keyCode - The key code of which triggered this event\n * @param {Boolean} isPressed - A boolean indicating whether the key have been pressed\n * @param {Boolean} bubbles - A boolean indicating whether the event bubbles up through the tree or not\n */\nvar EventKeyboard = function (keyCode, isPressed, bubbles) {\n cc.Event.call(this, cc.Event.KEYBOARD, bubbles);\n /**\n * !#en\n * The keyCode read-only property represents a system and implementation dependent numerical code identifying the unmodified value of the pressed key.\n * This is usually the decimal ASCII (RFC 20) or Windows 1252 code corresponding to the key.\n * If the key can't be identified, this value is 0.\n *\n * !#zh\n * keyCode 是只读属性它表示一个系统和依赖于实现的数字代码,可以识别按键的未修改值。\n * 这通常是十进制 ASCII (RFC20) 或者 Windows 1252 代码,所对应的密钥。\n * 如果无法识别该键,则该值为 0。\n *\n * @property keyCode\n * @type {Number}\n */\n this.keyCode = keyCode;\n this.isPressed = isPressed;\n};\njs.extend(EventKeyboard, cc.Event);\n\ncc.Event.EventMouse = EventMouse;\ncc.Event.EventTouch = EventTouch;\ncc.Event.EventAcceleration = EventAcceleration;\ncc.Event.EventKeyboard = EventKeyboard;\n\nmodule.exports = cc.Event;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar js = require('../platform/js');\n\n/**\n * !#en\n *

\n * The base class of event listener.
\n * If you need custom listener which with different callback, you need to inherit this class.
\n * For instance, you could refer to EventListenerAcceleration, EventListenerKeyboard,
\n * EventListenerTouchOneByOne, EventListenerCustom.\n *

\n *\n * !#zh\n * 封装用户的事件处理逻辑。\n * 注意:这是一个抽象类,开发者不应该直接实例化这个类,请参考 {{#crossLink \"EventListener/create:method\"}}cc.EventListener.create{{/crossLink}}。\n *\n * @class EventListener\n */\n\n/**\n * Constructor\n * @method constructor\n * @param {Number} type\n * @param {Number} listenerID\n * @param {Number} callback\n */\ncc.EventListener = function (type, listenerID, callback) {\n this._onEvent = callback; // Event callback function\n this._type = type || 0; // Event listener type\n this._listenerID = listenerID || \"\"; // Event listener ID\n this._registered = false; // Whether the listener has been added to dispatcher.\n\n this._fixedPriority = 0; // The higher the number, the higher the priority, 0 is for scene graph base priority.\n this._node = null; // scene graph based priority\n this._target = null;\n this._paused = true; // Whether the listener is paused\n this._isEnabled = true; // Whether the listener is enabled\n};\n\ncc.EventListener.prototype = {\n constructor: cc.EventListener,\n /*\n *

\n * Sets paused state for the listener\n * The paused state is only used for scene graph priority listeners.\n * `EventDispatcher::resumeAllEventListenersForTarget(node)` will set the paused state to `true`,\n * while `EventDispatcher::pauseAllEventListenersForTarget(node)` will set it to `false`.\n * @note 1) Fixed priority listeners will never get paused. If a fixed priority doesn't want to receive events,\n * call `setEnabled(false)` instead.\n * 2) In `Node`'s onEnter and onExit, the `paused state` of the listeners which associated with that node will be automatically updated.\n *

\n * @param {Boolean} paused\n * @private\n */\n _setPaused: function (paused) {\n this._paused = paused;\n },\n\n /*\n * Checks whether the listener is paused.\n * @returns {Boolean}\n * @private\n */\n _isPaused: function () {\n return this._paused;\n },\n\n /*\n * Marks the listener was registered by EventDispatcher.\n * @param {Boolean} registered\n * @private\n */\n _setRegistered: function (registered) {\n this._registered = registered;\n },\n\n /*\n * Checks whether the listener was registered by EventDispatcher\n * @returns {Boolean}\n * @private\n */\n _isRegistered: function () {\n return this._registered;\n },\n\n /*\n * Gets the type of this listener\n * @note It's different from `EventType`, e.g. TouchEvent has two kinds of event listeners - EventListenerOneByOne, EventListenerAllAtOnce\n * @returns {Number}\n * @private\n */\n _getType: function () {\n return this._type;\n },\n\n /*\n * Gets the listener ID of this listener\n * When event is being dispatched, listener ID is used as key for searching listeners according to event type.\n * @returns {String}\n * @private\n */\n _getListenerID: function () {\n return this._listenerID;\n },\n\n /*\n * Sets the fixed priority for this listener\n * @note This method is only used for `fixed priority listeners`, it needs to access a non-zero value. 0 is reserved for scene graph priority listeners\n * @param {Number} fixedPriority\n * @private\n */\n _setFixedPriority: function (fixedPriority) {\n this._fixedPriority = fixedPriority;\n },\n\n /*\n * Gets the fixed priority of this listener\n * @returns {Number} 0 if it's a scene graph priority listener, non-zero for fixed priority listener\n * @private\n */\n _getFixedPriority: function () {\n return this._fixedPriority;\n },\n\n /*\n * Sets scene graph priority for this listener\n * @param {cc.Node} node\n * @private\n */\n _setSceneGraphPriority: function (node) {\n this._target = node;\n this._node = node;\n },\n\n /*\n * Gets scene graph priority of this listener\n * @returns {cc.Node} if it's a fixed priority listener, non-null for scene graph priority listener\n * @private\n */\n _getSceneGraphPriority: function () {\n return this._node;\n },\n\n /**\n * !#en Checks whether the listener is available.\n * !#zh 检测监听器是否有效\n * @method checkAvailable\n * @returns {Boolean}\n */\n checkAvailable: function () {\n return this._onEvent !== null;\n },\n\n /**\n * !#en Clones the listener, its subclasses have to override this method.\n * !#zh 克隆监听器,它的子类必须重写此方法。\n * @method clone\n * @returns {EventListener}\n */\n clone: function () {\n return null;\n },\n\n /**\n * !#en Enables or disables the listener\n * !#zh 启用或禁用监听器。\n * @method setEnabled\n * @param {Boolean} enabled\n * @note Only listeners with `enabled` state will be able to receive events.\n * When an listener was initialized, it's enabled by default.\n * An event listener can receive events when it is enabled and is not paused.\n * paused state is always false when it is a fixed priority listener.\n */\n setEnabled: function(enabled){\n this._isEnabled = enabled;\n },\n\n /**\n * !#en Checks whether the listener is enabled\n * !#zh 检查监听器是否可用。\n * @method isEnabled\n * @returns {Boolean}\n */\n isEnabled: function(){\n return this._isEnabled;\n },\n\n /*\n *

Currently JavaScript Bindings (JSB), in some cases, needs to use retain and release. This is a bug in JSB,\n * and the ugly workaround is to use retain/release. So, these 2 methods were added to be compatible with JSB.\n * This is a hack, and should be removed once JSB fixes the retain/release bug
\n * You will need to retain an object if you created a listener and haven't added it any target node during the same frame.
\n * Otherwise, JSB's native autorelease pool will consider this object a useless one and release it directly,
\n * when you want to use it later, a \"Invalid Native Object\" error will be raised.
\n * The retain function can increase a reference count for the native object to avoid it being released,
\n * you need to manually invoke release function when you think this object is no longer needed, otherwise, there will be memory learks.
\n * retain and release function call should be paired in developer's game code.

\n *\n * @method retain\n * @see cc.EventListener#release\n */\n retain:function () {\n },\n /*\n *

Currently JavaScript Bindings (JSB), in some cases, needs to use retain and release. This is a bug in JSB,\n * and the ugly workaround is to use retain/release. So, these 2 methods were added to be compatible with JSB.\n * This is a hack, and should be removed once JSB fixes the retain/release bug
\n * You will need to retain an object if you created a listener and haven't added it any target node during the same frame.
\n * Otherwise, JSB's native autorelease pool will consider this object a useless one and release it directly,
\n * when you want to use it later, a \"Invalid Native Object\" error will be raised.
\n * The retain function can increase a reference count for the native object to avoid it being released,
\n * you need to manually invoke release function when you think this object is no longer needed, otherwise, there will be memory learks.
\n * retain and release function call should be paired in developer's game code.

\n *\n * @method release\n * @see cc.EventListener#retain\n */\n release:function () {\n }\n};\n\n// event listener type\n/**\n * !#en The type code of unknown event listener.\n * !#zh 未知的事件监听器类型\n * @property UNKNOWN\n * @type {Number}\n * @static\n */\ncc.EventListener.UNKNOWN = 0;\n/*\n * !#en The type code of one by one touch event listener.\n * !#zh 触摸事件监听器类型,触点会一个一个得分开被派发\n * @property TOUCH_ONE_BY_ONE\n * @type {Number}\n * @static\n */\ncc.EventListener.TOUCH_ONE_BY_ONE = 1;\n/*\n * !#en The type code of all at once touch event listener.\n * !#zh 触摸事件监听器类型,触点会被一次性全部派发\n * @property TOUCH_ALL_AT_ONCE\n * @type {Number}\n * @static\n */\ncc.EventListener.TOUCH_ALL_AT_ONCE = 2;\n/**\n * !#en The type code of keyboard event listener.\n * !#zh 键盘事件监听器类型\n * @property KEYBOARD\n * @type {Number}\n * @static\n */\ncc.EventListener.KEYBOARD = 3;\n/*\n * !#en The type code of mouse event listener.\n * !#zh 鼠标事件监听器类型\n * @property MOUSE\n * @type {Number}\n * @static\n */\ncc.EventListener.MOUSE = 4;\n/**\n * !#en The type code of acceleration event listener.\n * !#zh 加速器事件监听器类型\n * @property ACCELERATION\n * @type {Number}\n * @static\n */\ncc.EventListener.ACCELERATION = 6;\n/*\n * !#en The type code of custom event listener.\n * !#zh 自定义事件监听器类型\n * @property CUSTOM\n * @type {Number}\n * @static\n */\ncc.EventListener.CUSTOM = 8;\n\nvar ListenerID = cc.EventListener.ListenerID = {\n MOUSE: '__cc_mouse',\n TOUCH_ONE_BY_ONE: '__cc_touch_one_by_one',\n TOUCH_ALL_AT_ONCE: '__cc_touch_all_at_once',\n KEYBOARD: '__cc_keyboard',\n ACCELERATION: '__cc_acceleration',\n};\n\nvar Custom = function (listenerId, callback) {\n this._onCustomEvent = callback;\n cc.EventListener.call(this, cc.EventListener.CUSTOM, listenerId, this._callback);\n};\njs.extend(Custom, cc.EventListener);\njs.mixin(Custom.prototype, {\n _onCustomEvent: null,\n \n _callback: function (event) {\n if (this._onCustomEvent !== null)\n this._onCustomEvent(event);\n },\n\n checkAvailable: function () {\n return (cc.EventListener.prototype.checkAvailable.call(this) && this._onCustomEvent !== null);\n },\n\n clone: function () {\n return new Custom(this._listenerID, this._onCustomEvent);\n }\n});\n\nvar Mouse = function () {\n cc.EventListener.call(this, cc.EventListener.MOUSE, ListenerID.MOUSE, this._callback);\n};\njs.extend(Mouse, cc.EventListener);\njs.mixin(Mouse.prototype, {\n onMouseDown: null,\n onMouseUp: null,\n onMouseMove: null,\n onMouseScroll: null,\n\n _callback: function (event) {\n var eventType = cc.Event.EventMouse;\n switch (event._eventType) {\n case eventType.DOWN:\n if (this.onMouseDown)\n this.onMouseDown(event);\n break;\n case eventType.UP:\n if (this.onMouseUp)\n this.onMouseUp(event);\n break;\n case eventType.MOVE:\n if (this.onMouseMove)\n this.onMouseMove(event);\n break;\n case eventType.SCROLL:\n if (this.onMouseScroll)\n this.onMouseScroll(event);\n break;\n default:\n break;\n }\n },\n\n clone: function () {\n var eventListener = new Mouse();\n eventListener.onMouseDown = this.onMouseDown;\n eventListener.onMouseUp = this.onMouseUp;\n eventListener.onMouseMove = this.onMouseMove;\n eventListener.onMouseScroll = this.onMouseScroll;\n return eventListener;\n },\n\n checkAvailable: function () {\n return true;\n }\n});\n\nvar TouchOneByOne = function () {\n cc.EventListener.call(this, cc.EventListener.TOUCH_ONE_BY_ONE, ListenerID.TOUCH_ONE_BY_ONE, null);\n this._claimedTouches = [];\n};\njs.extend(TouchOneByOne, cc.EventListener);\njs.mixin(TouchOneByOne.prototype, {\n constructor: TouchOneByOne,\n _claimedTouches: null,\n swallowTouches: false,\n onTouchBegan: null,\n onTouchMoved: null,\n onTouchEnded: null,\n onTouchCancelled: null,\n\n setSwallowTouches: function (needSwallow) {\n this.swallowTouches = needSwallow;\n },\n\n isSwallowTouches: function(){\n return this.swallowTouches;\n },\n\n clone: function () {\n var eventListener = new TouchOneByOne();\n eventListener.onTouchBegan = this.onTouchBegan;\n eventListener.onTouchMoved = this.onTouchMoved;\n eventListener.onTouchEnded = this.onTouchEnded;\n eventListener.onTouchCancelled = this.onTouchCancelled;\n eventListener.swallowTouches = this.swallowTouches;\n return eventListener;\n },\n\n checkAvailable: function () {\n if(!this.onTouchBegan){\n cc.logID(1801);\n return false;\n }\n return true;\n }\n});\n\nvar TouchAllAtOnce = function () {\n cc.EventListener.call(this, cc.EventListener.TOUCH_ALL_AT_ONCE, ListenerID.TOUCH_ALL_AT_ONCE, null);\n};\njs.extend(TouchAllAtOnce, cc.EventListener);\njs.mixin(TouchAllAtOnce.prototype, {\n constructor: TouchAllAtOnce,\n onTouchesBegan: null,\n onTouchesMoved: null,\n onTouchesEnded: null,\n onTouchesCancelled: null,\n\n clone: function(){\n var eventListener = new TouchAllAtOnce();\n eventListener.onTouchesBegan = this.onTouchesBegan;\n eventListener.onTouchesMoved = this.onTouchesMoved;\n eventListener.onTouchesEnded = this.onTouchesEnded;\n eventListener.onTouchesCancelled = this.onTouchesCancelled;\n return eventListener;\n },\n\n checkAvailable: function(){\n if (this.onTouchesBegan === null && this.onTouchesMoved === null\n && this.onTouchesEnded === null && this.onTouchesCancelled === null) {\n cc.logID(1802);\n return false;\n }\n return true;\n }\n});\n\n//Acceleration\nvar Acceleration = function (callback) {\n this._onAccelerationEvent = callback;\n cc.EventListener.call(this, cc.EventListener.ACCELERATION, ListenerID.ACCELERATION, this._callback);\n};\njs.extend(Acceleration, cc.EventListener);\njs.mixin(Acceleration.prototype, {\n constructor: Acceleration,\n _onAccelerationEvent: null,\n\n _callback: function (event) {\n this._onAccelerationEvent(event.acc, event);\n },\n\n checkAvailable: function () {\n cc.assertID(this._onAccelerationEvent, 1803);\n\n return true;\n },\n\n clone: function () {\n return new Acceleration(this._onAccelerationEvent);\n }\n});\n\n\n//Keyboard\nvar Keyboard = function () {\n cc.EventListener.call(this, cc.EventListener.KEYBOARD, ListenerID.KEYBOARD, this._callback);\n};\njs.extend(Keyboard, cc.EventListener);\njs.mixin(Keyboard.prototype, {\n constructor: Keyboard,\n onKeyPressed: null,\n onKeyReleased: null,\n\n _callback: function (event) {\n if (event.isPressed) {\n if (this.onKeyPressed)\n this.onKeyPressed(event.keyCode, event);\n } else {\n if (this.onKeyReleased)\n this.onKeyReleased(event.keyCode, event);\n }\n },\n\n clone: function () {\n var eventListener = new Keyboard();\n eventListener.onKeyPressed = this.onKeyPressed;\n eventListener.onKeyReleased = this.onKeyReleased;\n return eventListener;\n },\n\n checkAvailable: function () {\n if (this.onKeyPressed === null && this.onKeyReleased === null) {\n cc.logID(1800);\n return false;\n }\n return true;\n }\n});\n\n/**\n * !#en\n * Create a EventListener object with configuration including the event type, handlers and other parameters.\n * In handlers, this refer to the event listener object itself.\n * You can also pass custom parameters in the configuration object,\n * all custom parameters will be polyfilled into the event listener object and can be accessed in handlers.\n * !#zh 通过指定不同的 Event 对象来设置想要创建的事件监听器。\n * @method create\n * @param {Object} argObj a json object\n * @returns {EventListener}\n * @static\n * @example {@link cocos2d/core/event-manager/CCEventListener/create.js}\n */\ncc.EventListener.create = function (argObj) {\n cc.assertID(argObj&&argObj.event, 1900);\n\n var listenerType = argObj.event;\n delete argObj.event;\n\n var listener = null;\n if(listenerType === cc.EventListener.TOUCH_ONE_BY_ONE)\n listener = new TouchOneByOne();\n else if(listenerType === cc.EventListener.TOUCH_ALL_AT_ONCE)\n listener = new TouchAllAtOnce();\n else if(listenerType === cc.EventListener.MOUSE)\n listener = new Mouse();\n else if(listenerType === cc.EventListener.CUSTOM){\n listener = new Custom(argObj.eventName, argObj.callback);\n delete argObj.eventName;\n delete argObj.callback;\n } else if(listenerType === cc.EventListener.KEYBOARD)\n listener = new Keyboard();\n else if(listenerType === cc.EventListener.ACCELERATION){\n listener = new Acceleration(argObj.callback);\n delete argObj.callback;\n }\n\n for(var key in argObj) {\n listener[key] = argObj[key];\n }\n return listener;\n};\n\nmodule.exports = cc.EventListener;","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nvar js = require('../platform/js');\nrequire('./CCEventListener');\nvar ListenerID = cc.EventListener.ListenerID;\n\nvar _EventListenerVector = function () {\n this._fixedListeners = [];\n this._sceneGraphListeners = [];\n this.gt0Index = 0;\n};\n_EventListenerVector.prototype = {\n constructor: _EventListenerVector,\n size: function () {\n return this._fixedListeners.length + this._sceneGraphListeners.length;\n },\n\n empty: function () {\n return (this._fixedListeners.length === 0) && (this._sceneGraphListeners.length === 0);\n },\n\n push: function (listener) {\n if (listener._getFixedPriority() === 0)\n this._sceneGraphListeners.push(listener);\n else\n this._fixedListeners.push(listener);\n },\n\n clearSceneGraphListeners: function () {\n this._sceneGraphListeners.length = 0;\n },\n\n clearFixedListeners: function () {\n this._fixedListeners.length = 0;\n },\n\n clear: function () {\n this._sceneGraphListeners.length = 0;\n this._fixedListeners.length = 0;\n },\n\n getFixedPriorityListeners: function () {\n return this._fixedListeners;\n },\n\n getSceneGraphPriorityListeners: function () {\n return this._sceneGraphListeners;\n }\n};\n\nvar __getListenerID = function (event) {\n var eventType = cc.Event, type = event.type;\n if (type === eventType.ACCELERATION)\n return ListenerID.ACCELERATION;\n if (type === eventType.KEYBOARD)\n return ListenerID.KEYBOARD;\n if (type.startsWith(eventType.MOUSE))\n return ListenerID.MOUSE;\n if (type.startsWith(eventType.TOUCH)){\n // Touch listener is very special, it contains two kinds of listeners, EventListenerTouchOneByOne and EventListenerTouchAllAtOnce.\n // return UNKNOWN instead.\n cc.logID(2000);\n }\n return \"\";\n};\n\n/**\n * !#en\n * This class has been deprecated, please use cc.systemEvent or cc.EventTarget instead. See [Listen to and launch events](../../../manual/en/scripting/events.html) for details.
\n *
\n * cc.eventManager is a singleton object which manages event listener subscriptions and event dispatching.\n * The EventListener list is managed in such way so that event listeners can be added and removed\n * while events are being dispatched.\n *\n * !#zh\n * 该类已废弃,请使用 cc.systemEvent 或 cc.EventTarget 代替,详见 [监听和发射事件](../../../manual/zh/scripting/events.html)。
\n *
\n * 事件管理器,它主要管理事件监听器注册和派发系统事件。\n *\n * @class eventManager\n * @static\n * @example {@link cocos2d/core/event-manager/CCEventManager/addListener.js}\n * @deprecated\n */\nvar eventManager = {\n //Priority dirty flag\n DIRTY_NONE: 0,\n DIRTY_FIXED_PRIORITY: 1 << 0,\n DIRTY_SCENE_GRAPH_PRIORITY: 1 << 1,\n DIRTY_ALL: 3,\n \n _listenersMap: {},\n _priorityDirtyFlagMap: {},\n _nodeListenersMap: {},\n _toAddedListeners: [],\n _toRemovedListeners: [],\n _dirtyListeners: {},\n _inDispatch: 0,\n _isEnabled: false,\n _currentTouch: null,\n _currentTouchListener: null,\n\n _internalCustomListenerIDs:[],\n\n _setDirtyForNode: function (node) {\n // Mark the node dirty only when there is an event listener associated with it.\n let selListeners = this._nodeListenersMap[node._id];\n if (selListeners !== undefined) {\n for (let j = 0, len = selListeners.length; j < len; j++) {\n let selListener = selListeners[j];\n let listenerID = selListener._getListenerID();\n if (this._dirtyListeners[listenerID] == null)\n this._dirtyListeners[listenerID] = true;\n }\n }\n if (node.childrenCount > 0) {\n let children = node._children;\n for(let i = 0, len = children.length; i < len; i++)\n this._setDirtyForNode(children[i]);\n }\n },\n\n /**\n * !#en Pauses all listeners which are associated the specified target.\n * !#zh 暂停传入的 node 相关的所有监听器的事件响应。\n * @method pauseTarget\n * @param {Node} node\n * @param {Boolean} [recursive=false]\n */\n pauseTarget: function (node, recursive) {\n if (!(node instanceof cc._BaseNode)) {\n cc.warnID(3506);\n return;\n }\n var listeners = this._nodeListenersMap[node._id], i, len;\n if (listeners) {\n for (i = 0, len = listeners.length; i < len; i++)\n listeners[i]._setPaused(true);\n }\n if (recursive === true) {\n var locChildren = node._children;\n for (i = 0, len = locChildren ? locChildren.length : 0; i < len; i++)\n this.pauseTarget(locChildren[i], true);\n }\n },\n\n /**\n * !#en Resumes all listeners which are associated the specified target.\n * !#zh 恢复传入的 node 相关的所有监听器的事件响应。\n * @method resumeTarget\n * @param {Node} node\n * @param {Boolean} [recursive=false]\n */\n resumeTarget: function (node, recursive) {\n if (!(node instanceof cc._BaseNode)) {\n cc.warnID(3506);\n return;\n }\n var listeners = this._nodeListenersMap[node._id], i, len;\n if (listeners){\n for ( i = 0, len = listeners.length; i < len; i++)\n listeners[i]._setPaused(false);\n }\n this._setDirtyForNode(node);\n if (recursive === true) {\n var locChildren = node._children;\n for (i = 0, len = locChildren ? locChildren.length : 0; i < len; i++)\n this.resumeTarget(locChildren[i], true);\n }\n },\n\n _addListener: function (listener) {\n if (this._inDispatch === 0)\n this._forceAddEventListener(listener);\n else\n this._toAddedListeners.push(listener);\n },\n\n _forceAddEventListener: function (listener) {\n var listenerID = listener._getListenerID();\n var listeners = this._listenersMap[listenerID];\n if (!listeners) {\n listeners = new _EventListenerVector();\n this._listenersMap[listenerID] = listeners;\n }\n listeners.push(listener);\n\n if (listener._getFixedPriority() === 0) {\n this._setDirty(listenerID, this.DIRTY_SCENE_GRAPH_PRIORITY);\n\n var node = listener._getSceneGraphPriority();\n if (node === null)\n cc.logID(3507);\n\n this._associateNodeAndEventListener(node, listener);\n if (node.activeInHierarchy)\n this.resumeTarget(node);\n } else\n this._setDirty(listenerID, this.DIRTY_FIXED_PRIORITY);\n },\n\n _getListeners: function (listenerID) {\n return this._listenersMap[listenerID];\n },\n\n _updateDirtyFlagForSceneGraph: function () {\n let locDirtyListeners = this._dirtyListeners\n for (var selKey in locDirtyListeners) {\n this._setDirty(selKey, this.DIRTY_SCENE_GRAPH_PRIORITY);\n }\n\n this._dirtyListeners = {};\n },\n\n _removeAllListenersInVector: function (listenerVector) {\n if (!listenerVector)\n return;\n var selListener;\n for (var i = listenerVector.length - 1; i >= 0; i--) {\n selListener = listenerVector[i];\n selListener._setRegistered(false);\n if (selListener._getSceneGraphPriority() != null) {\n this._dissociateNodeAndEventListener(selListener._getSceneGraphPriority(), selListener);\n selListener._setSceneGraphPriority(null); // NULL out the node pointer so we don't have any dangling pointers to destroyed nodes.\n }\n\n if (this._inDispatch === 0)\n cc.js.array.removeAt(listenerVector, i);\n }\n },\n\n _removeListenersForListenerID: function (listenerID) {\n var listeners = this._listenersMap[listenerID], i;\n if (listeners) {\n var fixedPriorityListeners = listeners.getFixedPriorityListeners();\n var sceneGraphPriorityListeners = listeners.getSceneGraphPriorityListeners();\n\n this._removeAllListenersInVector(sceneGraphPriorityListeners);\n this._removeAllListenersInVector(fixedPriorityListeners);\n\n // Remove the dirty flag according the 'listenerID'.\n // No need to check whether the dispatcher is dispatching event.\n delete this._priorityDirtyFlagMap[listenerID];\n\n if (!this._inDispatch) {\n listeners.clear();\n delete this._listenersMap[listenerID];\n }\n }\n\n var locToAddedListeners = this._toAddedListeners, listener;\n for (i = locToAddedListeners.length - 1; i >= 0; i--) {\n listener = locToAddedListeners[i];\n if (listener && listener._getListenerID() === listenerID)\n cc.js.array.removeAt(locToAddedListeners, i);\n }\n },\n\n _sortEventListeners: function (listenerID) {\n var dirtyFlag = this.DIRTY_NONE, locFlagMap = this._priorityDirtyFlagMap;\n if (locFlagMap[listenerID])\n dirtyFlag = locFlagMap[listenerID];\n \n if (dirtyFlag !== this.DIRTY_NONE) {\n // Clear the dirty flag first, if `rootNode` is null, then set its dirty flag of scene graph priority\n locFlagMap[listenerID] = this.DIRTY_NONE;\n\n if (dirtyFlag & this.DIRTY_FIXED_PRIORITY)\n this._sortListenersOfFixedPriority(listenerID);\n\n if (dirtyFlag & this.DIRTY_SCENE_GRAPH_PRIORITY){\n var rootEntity = cc.director.getScene();\n if(rootEntity)\n this._sortListenersOfSceneGraphPriority(listenerID);\n }\n }\n },\n\n _sortListenersOfSceneGraphPriority: function (listenerID) {\n var listeners = this._getListeners(listenerID);\n if (!listeners)\n return;\n\n var sceneGraphListener = listeners.getSceneGraphPriorityListeners();\n if (!sceneGraphListener || sceneGraphListener.length === 0)\n return;\n\n // After sort: priority < 0, > 0\n listeners.getSceneGraphPriorityListeners().sort(this._sortEventListenersOfSceneGraphPriorityDes);\n },\n\n _sortEventListenersOfSceneGraphPriorityDes: function (l1, l2) {\n let node1 = l1._getSceneGraphPriority(),\n node2 = l2._getSceneGraphPriority();\n\n if (!l2 || !node2 || !node2._activeInHierarchy || node2._parent === null)\n return -1;\n else if (!l1 || !node1 || !node1._activeInHierarchy || node1._parent === null)\n return 1;\n \n let p1 = node1, p2 = node2, ex = false;\n while (p1._parent._id !== p2._parent._id) {\n p1 = p1._parent._parent === null ? (ex = true) && node2 : p1._parent;\n p2 = p2._parent._parent === null ? (ex = true) && node1 : p2._parent;\n }\n\n if (p1._id === p2._id) {\n if (p1._id === node2._id) \n return -1;\n if (p1._id === node1._id)\n return 1;\n }\n\n return ex ? p1._localZOrder - p2._localZOrder : p2._localZOrder - p1._localZOrder;\n },\n\n _sortListenersOfFixedPriority: function (listenerID) {\n var listeners = this._listenersMap[listenerID];\n if (!listeners)\n return;\n\n var fixedListeners = listeners.getFixedPriorityListeners();\n if(!fixedListeners || fixedListeners.length === 0)\n return;\n // After sort: priority < 0, > 0\n fixedListeners.sort(this._sortListenersOfFixedPriorityAsc);\n\n // FIXME: Should use binary search\n var index = 0;\n for (var len = fixedListeners.length; index < len;) {\n if (fixedListeners[index]._getFixedPriority() >= 0)\n break;\n ++index;\n }\n listeners.gt0Index = index;\n },\n\n _sortListenersOfFixedPriorityAsc: function (l1, l2) {\n return l1._getFixedPriority() - l2._getFixedPriority();\n },\n\n _onUpdateListeners: function (listeners) {\n var fixedPriorityListeners = listeners.getFixedPriorityListeners();\n var sceneGraphPriorityListeners = listeners.getSceneGraphPriorityListeners();\n var i, selListener, idx, toRemovedListeners = this._toRemovedListeners;\n\n if (sceneGraphPriorityListeners) {\n for (i = sceneGraphPriorityListeners.length - 1; i >= 0; i--) {\n selListener = sceneGraphPriorityListeners[i];\n if (!selListener._isRegistered()) {\n cc.js.array.removeAt(sceneGraphPriorityListeners, i);\n // if item in toRemove list, remove it from the list\n idx = toRemovedListeners.indexOf(selListener);\n if(idx !== -1)\n toRemovedListeners.splice(idx, 1);\n }\n }\n }\n\n if (fixedPriorityListeners) {\n for (i = fixedPriorityListeners.length - 1; i >= 0; i--) {\n selListener = fixedPriorityListeners[i];\n if (!selListener._isRegistered()) {\n cc.js.array.removeAt(fixedPriorityListeners, i);\n // if item in toRemove list, remove it from the list\n idx = toRemovedListeners.indexOf(selListener);\n if(idx !== -1)\n toRemovedListeners.splice(idx, 1);\n }\n }\n }\n\n if (sceneGraphPriorityListeners && sceneGraphPriorityListeners.length === 0)\n listeners.clearSceneGraphListeners();\n\n if (fixedPriorityListeners && fixedPriorityListeners.length === 0)\n listeners.clearFixedListeners();\n },\n\n frameUpdateListeners: function () {\n var locListenersMap = this._listenersMap, locPriorityDirtyFlagMap = this._priorityDirtyFlagMap;\n for (var selKey in locListenersMap) {\n if (locListenersMap[selKey].empty()) {\n delete locPriorityDirtyFlagMap[selKey];\n delete locListenersMap[selKey];\n }\n }\n\n var locToAddedListeners = this._toAddedListeners;\n if (locToAddedListeners.length !== 0) {\n for (var i = 0, len = locToAddedListeners.length; i < len; i++)\n this._forceAddEventListener(locToAddedListeners[i]);\n locToAddedListeners.length = 0;\n }\n if (this._toRemovedListeners.length !== 0) {\n this._cleanToRemovedListeners();\n }\n },\n\n _updateTouchListeners: function (event) {\n var locInDispatch = this._inDispatch;\n cc.assertID(locInDispatch > 0, 3508);\n\n if (locInDispatch > 1)\n return;\n\n var listeners;\n listeners = this._listenersMap[ListenerID.TOUCH_ONE_BY_ONE];\n if (listeners) {\n this._onUpdateListeners(listeners);\n }\n listeners = this._listenersMap[ListenerID.TOUCH_ALL_AT_ONCE];\n if (listeners) {\n this._onUpdateListeners(listeners);\n }\n\n cc.assertID(locInDispatch === 1, 3509);\n\n var locToAddedListeners = this._toAddedListeners;\n if (locToAddedListeners.length !== 0) {\n for (var i = 0, len = locToAddedListeners.length; i < len; i++)\n this._forceAddEventListener(locToAddedListeners[i]);\n this._toAddedListeners.length = 0;\n }\n\n if (this._toRemovedListeners.length !== 0) {\n this._cleanToRemovedListeners();\n }\n },\n\n //Remove all listeners in _toRemoveListeners list and cleanup\n _cleanToRemovedListeners: function () {\n var toRemovedListeners = this._toRemovedListeners;\n for (var i = 0; i < toRemovedListeners.length; i++) {\n var selListener = toRemovedListeners[i];\n var listeners = this._listenersMap[selListener._getListenerID()];\n if (!listeners)\n continue;\n\n var idx, fixedPriorityListeners = listeners.getFixedPriorityListeners(),\n sceneGraphPriorityListeners = listeners.getSceneGraphPriorityListeners();\n\n if (sceneGraphPriorityListeners) {\n idx = sceneGraphPriorityListeners.indexOf(selListener);\n if (idx !== -1) {\n sceneGraphPriorityListeners.splice(idx, 1);\n }\n }\n if (fixedPriorityListeners) {\n idx = fixedPriorityListeners.indexOf(selListener);\n if (idx !== -1) {\n fixedPriorityListeners.splice(idx, 1);\n }\n }\n }\n toRemovedListeners.length = 0;\n },\n\n _onTouchEventCallback: function (listener, argsObj) {\n // Skip if the listener was removed.\n if (!listener._isRegistered())\n return false;\n\n var event = argsObj.event, selTouch = event.currentTouch;\n event.currentTarget = listener._node;\n\n var isClaimed = false, removedIdx;\n var getCode = event.getEventCode(), EventTouch = cc.Event.EventTouch;\n if (getCode === EventTouch.BEGAN) {\n if (!cc.macro.ENABLE_MULTI_TOUCH && eventManager._currentTouch) {\n let node = eventManager._currentTouchListener._node;\n if (node && node.activeInHierarchy) {\n return false;\n }\n }\n\n if (listener.onTouchBegan) {\n isClaimed = listener.onTouchBegan(selTouch, event);\n if (isClaimed && listener._registered) {\n listener._claimedTouches.push(selTouch);\n eventManager._currentTouchListener = listener;\n eventManager._currentTouch = selTouch;\n }\n }\n } else if (listener._claimedTouches.length > 0\n && ((removedIdx = listener._claimedTouches.indexOf(selTouch)) !== -1)) {\n isClaimed = true;\n \n if (!cc.macro.ENABLE_MULTI_TOUCH && eventManager._currentTouch && eventManager._currentTouch !== selTouch) {\n return false;\n }\n\n if (getCode === EventTouch.MOVED && listener.onTouchMoved) {\n listener.onTouchMoved(selTouch, event);\n } else if (getCode === EventTouch.ENDED) {\n if (listener.onTouchEnded)\n listener.onTouchEnded(selTouch, event);\n if (listener._registered)\n listener._claimedTouches.splice(removedIdx, 1);\n eventManager._clearCurTouch();\n } else if (getCode === EventTouch.CANCELED) {\n if (listener.onTouchCancelled)\n listener.onTouchCancelled(selTouch, event);\n if (listener._registered)\n listener._claimedTouches.splice(removedIdx, 1);\n eventManager._clearCurTouch();\n }\n }\n\n // If the event was stopped, return directly.\n if (event.isStopped()) {\n eventManager._updateTouchListeners(event);\n return true;\n }\n\n if (isClaimed && listener.swallowTouches) {\n if (argsObj.needsMutableSet)\n argsObj.touches.splice(selTouch, 1);\n return true;\n }\n return false;\n },\n\n _dispatchTouchEvent: function (event) {\n this._sortEventListeners(ListenerID.TOUCH_ONE_BY_ONE);\n this._sortEventListeners(ListenerID.TOUCH_ALL_AT_ONCE);\n\n var oneByOneListeners = this._getListeners(ListenerID.TOUCH_ONE_BY_ONE);\n var allAtOnceListeners = this._getListeners(ListenerID.TOUCH_ALL_AT_ONCE);\n\n // If there aren't any touch listeners, return directly.\n if (null === oneByOneListeners && null === allAtOnceListeners)\n return;\n\n var originalTouches = event.getTouches(), mutableTouches = cc.js.array.copy(originalTouches);\n var oneByOneArgsObj = {event: event, needsMutableSet: (oneByOneListeners && allAtOnceListeners), touches: mutableTouches, selTouch: null};\n\n //\n // process the target handlers 1st\n //\n if (oneByOneListeners) {\n for (var i = 0; i < originalTouches.length; i++) {\n event.currentTouch = originalTouches[i];\n event._propagationStopped = event._propagationImmediateStopped = false;\n this._dispatchEventToListeners(oneByOneListeners, this._onTouchEventCallback, oneByOneArgsObj);\n }\n }\n\n //\n // process standard handlers 2nd\n //\n if (allAtOnceListeners && mutableTouches.length > 0) {\n this._dispatchEventToListeners(allAtOnceListeners, this._onTouchesEventCallback, {event: event, touches: mutableTouches});\n if (event.isStopped())\n return;\n }\n this._updateTouchListeners(event);\n },\n\n _onTouchesEventCallback: function (listener, callbackParams) {\n // Skip if the listener was removed.\n if (!listener._registered)\n return false;\n\n var EventTouch = cc.Event.EventTouch, event = callbackParams.event, touches = callbackParams.touches, getCode = event.getEventCode();\n event.currentTarget = listener._node;\n if (getCode === EventTouch.BEGAN && listener.onTouchesBegan)\n listener.onTouchesBegan(touches, event);\n else if (getCode === EventTouch.MOVED && listener.onTouchesMoved)\n listener.onTouchesMoved(touches, event);\n else if (getCode === EventTouch.ENDED && listener.onTouchesEnded)\n listener.onTouchesEnded(touches, event);\n else if (getCode === EventTouch.CANCELED && listener.onTouchesCancelled)\n listener.onTouchesCancelled(touches, event);\n\n // If the event was stopped, return directly.\n if (event.isStopped()) {\n eventManager._updateTouchListeners(event);\n return true;\n }\n return false;\n },\n\n _associateNodeAndEventListener: function (node, listener) {\n var listeners = this._nodeListenersMap[node._id];\n if (!listeners) {\n listeners = [];\n this._nodeListenersMap[node._id] = listeners;\n }\n listeners.push(listener);\n },\n\n _dissociateNodeAndEventListener: function (node, listener) {\n var listeners = this._nodeListenersMap[node._id];\n if (listeners) {\n cc.js.array.remove(listeners, listener);\n if (listeners.length === 0)\n delete this._nodeListenersMap[node._id];\n }\n },\n\n _dispatchEventToListeners: function (listeners, onEvent, eventOrArgs) {\n var shouldStopPropagation = false;\n var fixedPriorityListeners = listeners.getFixedPriorityListeners();\n var sceneGraphPriorityListeners = listeners.getSceneGraphPriorityListeners();\n\n var i = 0, j, selListener;\n if (fixedPriorityListeners) { // priority < 0\n if (fixedPriorityListeners.length !== 0) {\n for (; i < listeners.gt0Index; ++i) {\n selListener = fixedPriorityListeners[i];\n if (selListener.isEnabled() && !selListener._isPaused() && selListener._isRegistered() && onEvent(selListener, eventOrArgs)) {\n shouldStopPropagation = true;\n break;\n }\n }\n }\n }\n\n if (sceneGraphPriorityListeners && !shouldStopPropagation) { // priority == 0, scene graph priority\n for (j = 0; j < sceneGraphPriorityListeners.length; j++) {\n selListener = sceneGraphPriorityListeners[j];\n if (selListener.isEnabled() && !selListener._isPaused() && selListener._isRegistered() && onEvent(selListener, eventOrArgs)) {\n shouldStopPropagation = true;\n break;\n }\n }\n }\n\n if (fixedPriorityListeners && !shouldStopPropagation) { // priority > 0\n for (; i < fixedPriorityListeners.length; ++i) {\n selListener = fixedPriorityListeners[i];\n if (selListener.isEnabled() && !selListener._isPaused() && selListener._isRegistered() && onEvent(selListener, eventOrArgs)) {\n shouldStopPropagation = true;\n break;\n }\n }\n }\n },\n\n _setDirty: function (listenerID, flag) {\n var locDirtyFlagMap = this._priorityDirtyFlagMap;\n if (locDirtyFlagMap[listenerID] == null)\n locDirtyFlagMap[listenerID] = flag;\n else\n locDirtyFlagMap[listenerID] = flag | locDirtyFlagMap[listenerID];\n },\n\n _sortNumberAsc: function (a, b) {\n return a - b;\n },\n\n /**\n * !#en Query whether the specified event listener id has been added.\n * !#zh 查询指定的事件 ID 是否存在\n * @method hasEventListener\n * @param {String|Number} listenerID - The listener id.\n * @return {Boolean} true or false\n */\n hasEventListener: function (listenerID) {\n return !!this._getListeners(listenerID);\n },\n\n /**\n * !#en\n *

\n * Adds a event listener for a specified event.
\n * if the parameter \"nodeOrPriority\" is a node,\n * it means to add a event listener for a specified event with the priority of scene graph.
\n * if the parameter \"nodeOrPriority\" is a Number,\n * it means to add a event listener for a specified event with the fixed priority.
\n *

\n * !#zh\n * 将事件监听器添加到事件管理器中。
\n * 如果参数 “nodeOrPriority” 是节点,优先级由 node 的渲染顺序决定,显示在上层的节点将优先收到事件。
\n * 如果参数 “nodeOrPriority” 是数字,优先级则固定为该参数的数值,数字越小,优先级越高。
\n *\n * @method addListener\n * @param {EventListener|Object} listener - The listener of a specified event or a object of some event parameters.\n * @param {Node|Number} nodeOrPriority - The priority of the listener is based on the draw order of this node or fixedPriority The fixed priority of the listener.\n * @note The priority of scene graph will be fixed value 0. So the order of listener item in the vector will be ' <0, scene graph (0 priority), >0'.\n * A lower priority will be called before the ones that have a higher value. 0 priority is forbidden for fixed priority since it's used for scene graph based priority.\n * The listener must be a cc.EventListener object when adding a fixed priority listener, because we can't remove a fixed priority listener without the listener handler,\n * except calls removeAllListeners().\n * @return {EventListener} Return the listener. Needed in order to remove the event from the dispatcher.\n */\n addListener: function (listener, nodeOrPriority) {\n cc.assertID(listener && nodeOrPriority, 3503);\n if (!(cc.js.isNumber(nodeOrPriority) || nodeOrPriority instanceof cc._BaseNode)) {\n cc.warnID(3506);\n return;\n }\n if (!(listener instanceof cc.EventListener)) {\n cc.assertID(!cc.js.isNumber(nodeOrPriority), 3504);\n listener = cc.EventListener.create(listener);\n } else {\n if (listener._isRegistered()) {\n cc.logID(3505);\n return;\n }\n }\n\n if (!listener.checkAvailable())\n return;\n\n if (cc.js.isNumber(nodeOrPriority)) {\n if (nodeOrPriority === 0) {\n cc.logID(3500);\n return;\n }\n\n listener._setSceneGraphPriority(null);\n listener._setFixedPriority(nodeOrPriority);\n listener._setRegistered(true);\n listener._setPaused(false);\n this._addListener(listener);\n } else {\n listener._setSceneGraphPriority(nodeOrPriority);\n listener._setFixedPriority(0);\n listener._setRegistered(true);\n this._addListener(listener);\n }\n\n return listener;\n },\n\n /*\n * !#en Adds a Custom event listener. It will use a fixed priority of 1.\n * !#zh 向事件管理器添加一个自定义事件监听器。\n * @method addCustomListener\n * @param {String} eventName\n * @param {Function} callback\n * @return {EventListener} the generated event. Needed in order to remove the event from the dispatcher\n */\n addCustomListener: function (eventName, callback) {\n var listener = new cc.EventListener.create({\n event: cc.EventListener.CUSTOM,\n eventName: eventName, \n callback: callback\n });\n this.addListener(listener, 1);\n return listener;\n },\n\n /**\n * !#en Remove a listener.\n * !#zh 移除一个已添加的监听器。\n * @method removeListener\n * @param {EventListener} listener - an event listener or a registered node target\n * @example {@link cocos2d/core/event-manager/CCEventManager/removeListener.js}\n */\n removeListener: function (listener) {\n if (listener == null)\n return;\n\n var isFound, locListener = this._listenersMap;\n for (var selKey in locListener) {\n var listeners = locListener[selKey];\n var fixedPriorityListeners = listeners.getFixedPriorityListeners(), sceneGraphPriorityListeners = listeners.getSceneGraphPriorityListeners();\n\n isFound = this._removeListenerInVector(sceneGraphPriorityListeners, listener);\n if (isFound){\n // fixed #4160: Dirty flag need to be updated after listeners were removed.\n this._setDirty(listener._getListenerID(), this.DIRTY_SCENE_GRAPH_PRIORITY);\n }else{\n isFound = this._removeListenerInVector(fixedPriorityListeners, listener);\n if (isFound)\n this._setDirty(listener._getListenerID(), this.DIRTY_FIXED_PRIORITY);\n }\n\n if (listeners.empty()) {\n delete this._priorityDirtyFlagMap[listener._getListenerID()];\n delete locListener[selKey];\n }\n\n if (isFound)\n break;\n }\n\n if (!isFound) {\n var locToAddedListeners = this._toAddedListeners;\n for (var i = locToAddedListeners.length - 1; i >= 0; i--) {\n var selListener = locToAddedListeners[i];\n if (selListener === listener) {\n cc.js.array.removeAt(locToAddedListeners, i);\n selListener._setRegistered(false);\n break;\n }\n }\n }\n\n this._currentTouchListener === listener && this._clearCurTouch();\n },\n\n _clearCurTouch () {\n this._currentTouchListener = null;\n this._currentTouch = null;\n },\n\n _removeListenerInCallback: function(listeners, callback){\n if (listeners == null)\n return false;\n\n for (var i = listeners.length - 1; i >= 0; i--) {\n var selListener = listeners[i];\n if (selListener._onCustomEvent === callback || selListener._onEvent === callback) {\n selListener._setRegistered(false);\n if (selListener._getSceneGraphPriority() != null){\n this._dissociateNodeAndEventListener(selListener._getSceneGraphPriority(), selListener);\n selListener._setSceneGraphPriority(null); // NULL out the node pointer so we don't have any dangling pointers to destroyed nodes.\n }\n\n if (this._inDispatch === 0)\n cc.js.array.removeAt(listeners, i);\n else\n this._toRemovedListeners.push(selListener);\n return true;\n }\n }\n return false;\n },\n\n _removeListenerInVector: function (listeners, listener) {\n if (listeners == null)\n return false;\n\n for (var i = listeners.length - 1; i >= 0; i--) {\n var selListener = listeners[i];\n if (selListener === listener) {\n selListener._setRegistered(false);\n if (selListener._getSceneGraphPriority() != null) {\n this._dissociateNodeAndEventListener(selListener._getSceneGraphPriority(), selListener);\n selListener._setSceneGraphPriority(null); // NULL out the node pointer so we don't have any dangling pointers to destroyed nodes.\n }\n\n if (this._inDispatch === 0)\n cc.js.array.removeAt(listeners, i);\n else\n this._toRemovedListeners.push(selListener);\n return true;\n }\n }\n return false;\n },\n\n /**\n * !#en Removes all listeners with the same event listener type or removes all listeners of a node.\n * !#zh\n * 移除注册到 eventManager 中指定类型的所有事件监听器。
\n * 1. 如果传入的第一个参数类型是 Node,那么事件管理器将移除与该对象相关的所有事件监听器。\n * (如果第二参数 recursive 是 true 的话,就会连同该对象的子控件上所有的事件监听器也一并移除)
\n * 2. 如果传入的第一个参数类型是 Number(该类型 EventListener 中定义的事件类型),\n * 那么事件管理器将移除该类型的所有事件监听器。
\n *\n * 下列是目前存在监听器类型:
\n * cc.EventListener.UNKNOWN
\n * cc.EventListener.KEYBOARD
\n * cc.EventListener.ACCELERATION,
\n *\n * @method removeListeners\n * @param {Number|Node} listenerType - listenerType or a node\n * @param {Boolean} [recursive=false]\n */\n removeListeners: function (listenerType, recursive) {\n var i, _t = this;\n if (!(cc.js.isNumber(listenerType) || listenerType instanceof cc._BaseNode)) {\n cc.warnID(3506);\n return;\n }\n if (listenerType._id !== undefined) {\n // Ensure the node is removed from these immediately also.\n // Don't want any dangling pointers or the possibility of dealing with deleted objects..\n var listeners = _t._nodeListenersMap[listenerType._id], i;\n if (listeners) {\n var listenersCopy = cc.js.array.copy(listeners);\n for (i = 0; i < listenersCopy.length; i++)\n _t.removeListener(listenersCopy[i]);\n delete _t._nodeListenersMap[listenerType._id];\n }\n\n // Bug fix: ensure there are no references to the node in the list of listeners to be added.\n // If we find any listeners associated with the destroyed node in this list then remove them.\n // This is to catch the scenario where the node gets destroyed before it's listener\n // is added into the event dispatcher fully. This could happen if a node registers a listener\n // and gets destroyed while we are dispatching an event (touch etc.)\n var locToAddedListeners = _t._toAddedListeners;\n for (i = 0; i < locToAddedListeners.length; ) {\n var listener = locToAddedListeners[i];\n if (listener._getSceneGraphPriority() === listenerType) {\n listener._setSceneGraphPriority(null); // Ensure no dangling ptr to the target node.\n listener._setRegistered(false);\n locToAddedListeners.splice(i, 1);\n } else\n ++i;\n }\n\n if (recursive === true) {\n var locChildren = listenerType.children, len;\n for (i = 0, len = locChildren.length; i< len; i++)\n _t.removeListeners(locChildren[i], true);\n }\n } else {\n if (listenerType === cc.EventListener.TOUCH_ONE_BY_ONE)\n _t._removeListenersForListenerID(ListenerID.TOUCH_ONE_BY_ONE);\n else if (listenerType === cc.EventListener.TOUCH_ALL_AT_ONCE)\n _t._removeListenersForListenerID(ListenerID.TOUCH_ALL_AT_ONCE);\n else if (listenerType === cc.EventListener.MOUSE)\n _t._removeListenersForListenerID(ListenerID.MOUSE);\n else if (listenerType === cc.EventListener.ACCELERATION)\n _t._removeListenersForListenerID(ListenerID.ACCELERATION);\n else if (listenerType === cc.EventListener.KEYBOARD)\n _t._removeListenersForListenerID(ListenerID.KEYBOARD);\n else\n cc.logID(3501);\n }\n },\n\n /*\n * !#en Removes all custom listeners with the same event name.\n * !#zh 移除同一事件名的自定义事件监听器。\n * @method removeCustomListeners\n * @param {String} customEventName\n */\n removeCustomListeners: function (customEventName) {\n this._removeListenersForListenerID(customEventName);\n },\n\n /**\n * !#en Removes all listeners\n * !#zh 移除所有事件监听器。\n * @method removeAllListeners\n */\n removeAllListeners: function () {\n var locListeners = this._listenersMap, locInternalCustomEventIDs = this._internalCustomListenerIDs;\n for (var selKey in locListeners){\n if(locInternalCustomEventIDs.indexOf(selKey) === -1)\n this._removeListenersForListenerID(selKey);\n }\n },\n\n /**\n * !#en Sets listener's priority with fixed value.\n * !#zh 设置 FixedPriority 类型监听器的优先级。\n * @method setPriority\n * @param {EventListener} listener\n * @param {Number} fixedPriority\n */\n setPriority: function (listener, fixedPriority) {\n if (listener == null)\n return;\n\n var locListeners = this._listenersMap;\n for (var selKey in locListeners) {\n var selListeners = locListeners[selKey];\n var fixedPriorityListeners = selListeners.getFixedPriorityListeners();\n if (fixedPriorityListeners) {\n var found = fixedPriorityListeners.indexOf(listener);\n if (found !== -1) {\n if(listener._getSceneGraphPriority() != null)\n cc.logID(3502);\n if (listener._getFixedPriority() !== fixedPriority) {\n listener._setFixedPriority(fixedPriority);\n this._setDirty(listener._getListenerID(), this.DIRTY_FIXED_PRIORITY);\n }\n return;\n }\n }\n }\n },\n\n /**\n * !#en Whether to enable dispatching events\n * !#zh 启用或禁用事件管理器,禁用后不会分发任何事件。\n * @method setEnabled\n * @param {Boolean} enabled\n */\n setEnabled: function (enabled) {\n this._isEnabled = enabled;\n },\n\n /**\n * !#en Checks whether dispatching events is enabled\n * !#zh 检测事件管理器是否启用。\n * @method isEnabled\n * @returns {Boolean}\n */\n isEnabled: function () {\n return this._isEnabled;\n },\n\n /*\n * !#en Dispatches the event, also removes all EventListeners marked for deletion from the event dispatcher list.\n * !#zh 分发事件。\n * @method dispatchEvent\n * @param {Event} event\n */\n dispatchEvent: function (event) {\n if (!this._isEnabled)\n return;\n\n this._updateDirtyFlagForSceneGraph();\n this._inDispatch++;\n if (!event || !event.getType) {\n cc.errorID(3511);\n return;\n }\n if (event.getType().startsWith(cc.Event.TOUCH)) {\n this._dispatchTouchEvent(event);\n this._inDispatch--;\n return;\n }\n\n var listenerID = __getListenerID(event);\n this._sortEventListeners(listenerID);\n var selListeners = this._listenersMap[listenerID];\n if (selListeners != null) {\n this._dispatchEventToListeners(selListeners, this._onListenerCallback, event);\n this._onUpdateListeners(selListeners);\n }\n\n this._inDispatch--;\n },\n\n _onListenerCallback: function(listener, event){\n event.currentTarget = listener._target;\n listener._onEvent(event);\n return event.isStopped();\n },\n\n /*\n * !#en Dispatches a Custom Event with a event name an optional user data\n * !#zh 分发自定义事件。\n * @method dispatchCustomEvent\n * @param {String} eventName\n * @param {*} optionalUserData\n */\n dispatchCustomEvent: function (eventName, optionalUserData) {\n var ev = new cc.Event.EventCustom(eventName);\n ev.setUserData(optionalUserData);\n this.dispatchEvent(ev);\n }\n};\n\n\njs.get(cc, 'eventManager', function () {\n cc.errorID(1405, 'cc.eventManager', 'cc.EventTarget or cc.systemEvent');\n return eventManager;\n});\n\nmodule.exports = cc.internal.eventManager = eventManager;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * !#en The touch event class\n * !#zh 封装了触摸相关的信息。\n * @class Touch\n *\n * @param {Number} x\n * @param {Number} y\n * @param {Number} id\n */\ncc.Touch = function (x, y, id) {\n this._lastModified = 0;\n this.setTouchInfo(id, x, y);\n};\ncc.Touch.prototype = {\n constructor: cc.Touch,\n /**\n * !#en Returns the current touch location in OpenGL coordinates.、\n * !#zh 获取当前触点位置。\n * @method getLocation\n * @return {Vec2}\n */\n getLocation:function () {\n return cc.v2(this._point.x, this._point.y);\n },\n\n\t/**\n\t * !#en Returns X axis location value.\n * !#zh 获取当前触点 X 轴位置。\n * @method getLocationX\n\t * @returns {Number}\n\t */\n\tgetLocationX: function () {\n\t\treturn this._point.x;\n\t},\n\n\t/**\n * !#en Returns Y axis location value.\n * !#zh 获取当前触点 Y 轴位置。\n * @method getLocationY\n\t * @returns {Number}\n\t */\n\tgetLocationY: function () {\n\t\treturn this._point.y;\n\t},\n\n /**\n * !#en Returns the previous touch location in OpenGL coordinates.\n * !#zh 获取触点在上一次事件时的位置对象,对象包含 x 和 y 属性。\n * @method getPreviousLocation\n * @return {Vec2}\n */\n getPreviousLocation:function () {\n return cc.v2(this._prevPoint.x, this._prevPoint.y);\n },\n\n /**\n * !#en Returns the start touch location in OpenGL coordinates.\n * !#zh 获取触点落下时的位置对象,对象包含 x 和 y 属性。\n * @method getStartLocation\n * @returns {Vec2}\n */\n getStartLocation: function() {\n return cc.v2(this._startPoint.x, this._startPoint.y);\n },\n\n /**\n * !#en Returns the delta distance from the previous touche to the current one in screen coordinates.\n * !#zh 获取触点距离上一次事件移动的距离对象,对象包含 x 和 y 属性。\n * @method getDelta\n * @return {Vec2}\n */\n getDelta:function () {\n return this._point.sub(this._prevPoint);\n },\n\n /**\n * !#en Returns the current touch location in screen coordinates.\n * !#zh 获取当前事件在游戏窗口内的坐标位置对象,对象包含 x 和 y 属性。\n * @method getLocationInView\n * @return {Vec2}\n */\n getLocationInView: function() {\n return cc.v2(this._point.x, cc.view._designResolutionSize.height - this._point.y);\n },\n\n /**\n * !#en Returns the previous touch location in screen coordinates.\n * !#zh 获取触点在上一次事件时在游戏窗口中的位置对象,对象包含 x 和 y 属性。\n * @method getPreviousLocationInView\n * @return {Vec2}\n */\n getPreviousLocationInView: function(){\n return cc.v2(this._prevPoint.x, cc.view._designResolutionSize.height - this._prevPoint.y);\n },\n\n /**\n * !#en Returns the start touch location in screen coordinates.\n * !#zh 获取触点落下时在游戏窗口中的位置对象,对象包含 x 和 y 属性。\n * @method getStartLocationInView\n * @return {Vec2}\n */\n getStartLocationInView: function(){\n return cc.v2(this._startPoint.x, cc.view._designResolutionSize.height - this._startPoint.y);\n },\n\n /**\n * !#en Returns the id of cc.Touch.\n * !#zh 触点的标识 ID,可以用来在多点触摸中跟踪触点。\n * @method getID\n * @return {Number}\n */\n getID:function () {\n return this._id;\n },\n\n /**\n * !#en Sets information to touch.\n * !#zh 设置触摸相关的信息。用于监控触摸事件。\n * @method setTouchInfo\n * @param {Number} id\n * @param {Number} x\n * @param {Number} y\n */\n setTouchInfo:function (id, x, y) {\n this._prevPoint = this._point;\n this._point = cc.v2(x || 0, y || 0);\n this._id = id;\n if(!this._startPointCaptured){\n this._startPoint = cc.v2(this._point);\n cc.view._convertPointWithScale(this._startPoint);\n this._startPointCaptured = true;\n }\n },\n\n _setPoint: function(x, y){\n if(y === undefined){\n this._point.x = x.x;\n this._point.y = x.y;\n }else{\n this._point.x = x;\n this._point.y = y;\n }\n },\n\n _setPrevPoint:function (x, y) {\n if(y === undefined)\n this._prevPoint = cc.v2(x.x, x.y);\n else\n this._prevPoint = cc.v2(x || 0, y || 0);\n }\n};","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nrequire('./CCEvent');\nrequire('./CCTouch');\nrequire('./CCEventListener');\n\nvar eventManager = require('./CCEventManager');;\n\nmodule.exports = eventManager;\n\nif (CC_TEST) {\n cc._Test.eventManager = eventManager;\n}\n\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst js = cc.js;\nconst CallbacksInvoker = require('../platform/callbacks-invoker');\n\n// Extends CallbacksInvoker to handle and invoke event callbacks.\nfunction EventListeners () {\n CallbacksInvoker.call(this);\n}\njs.extend(EventListeners, CallbacksInvoker);\n\nEventListeners.prototype.emit = function (event, captureListeners) {\n let key = event.type;\n const list = this._callbackTable[key];\n if (list) {\n let rootInvoker = !list.isInvoking;\n list.isInvoking = true;\n\n const infos = list.callbackInfos;\n for (let i = 0, len = infos.length; i < len; ++i) {\n const info = infos[i];\n if (info && info.callback) {\n info.callback.call(info.target, event, captureListeners);\n if (event._propagationImmediateStopped) {\n break;\n }\n }\n }\n\n if (rootInvoker) {\n list.isInvoking = false;\n if (list.containCanceled) {\n list.purgeCanceled();\n }\n }\n }\n};\n\nmodule.exports = EventListeners;\nif (CC_TEST) {\n cc._Test.EventListeners = EventListeners;\n}\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst js = require('../platform/js');\nconst CallbacksInvoker = require('../platform/callbacks-invoker');\n\nvar fastRemove = js.array.fastRemove;\n\n/**\n * !#en\n * EventTarget is an object to which an event is dispatched when something has occurred.\n * Entity are the most common event targets, but other objects can be event targets too.\n *\n * Event targets are an important part of the Fireball event model.\n * The event target serves as the focal point for how events flow through the scene graph.\n * When an event such as a mouse click or a keypress occurs, Fireball dispatches an event object\n * into the event flow from the root of the hierarchy. The event object then makes its way through\n * the scene graph until it reaches the event target, at which point it begins its return trip through\n * the scene graph. This round-trip journey to the event target is conceptually divided into three phases:\n * - The capture phase comprises the journey from the root to the last node before the event target's node\n * - The target phase comprises only the event target node\n * - The bubbling phase comprises any subsequent nodes encountered on the return trip to the root of the tree\n * See also: http://www.w3.org/TR/DOM-Level-3-Events/#event-flow\n *\n * Event targets can implement the following methods:\n * - _getCapturingTargets\n * - _getBubblingTargets\n *\n * !#zh\n * 事件目标是事件触发时,分派的事件对象,Node 是最常见的事件目标,\n * 但是其他对象也可以是事件目标。
\n *\n * @class EventTarget\n * @extends CallbacksInvoker\n */\nfunction EventTarget () {\n CallbacksInvoker.call(this);\n}\njs.extend(EventTarget, CallbacksInvoker);\n\nvar proto = EventTarget.prototype;\n\n/**\n * !#en Checks whether the EventTarget object has any callback registered for a specific type of event.\n * !#zh 检查事件目标对象是否有为特定类型的事件注册的回调。\n * @method hasEventListener\n * @param {String} type - The type of event.\n * @return {Boolean} True if a callback of the specified type is registered; false otherwise.\n */\n\n/**\n * !#en\n * Register an callback of a specific event type on the EventTarget.\n * This type of event should be triggered via `emit`.\n * !#zh\n * 注册事件目标的特定事件类型回调。这种类型的事件应该被 `emit` 触发。\n *\n * @method on\n * @param {String} type - A string representing the event type to listen for.\n * @param {Function} callback - The callback that will be invoked when the event is dispatched.\n * The callback is ignored if it is a duplicate (the callbacks are unique).\n * @param {any} [callback.arg1] arg1\n * @param {any} [callback.arg2] arg2\n * @param {any} [callback.arg3] arg3\n * @param {any} [callback.arg4] arg4\n * @param {any} [callback.arg5] arg5\n * @param {Object} [target] - The target (this object) to invoke the callback, can be null\n * @return {Function} - Just returns the incoming callback so you can save the anonymous function easier.\n * @typescript\n * on(type: string, callback: T, target?: any, useCapture?: boolean): T\n * @example\n * eventTarget.on('fire', function () {\n * cc.log(\"fire in the hole\");\n * }, node);\n */\nproto.__on = proto.on;\nproto.on = function (type, callback, target, once) {\n if (!callback) {\n cc.errorID(6800);\n return;\n }\n\n if ( !this.hasEventListener(type, callback, target) ) {\n this.__on(type, callback, target, once);\n\n if (target && target.__eventTargets) {\n target.__eventTargets.push(this);\n }\n }\n return callback;\n};\n\n/**\n * !#en\n * Removes the listeners previously registered with the same type, callback, target and or useCapture,\n * if only type is passed as parameter, all listeners registered with that type will be removed.\n * !#zh\n * 删除之前用同类型,回调,目标或 useCapture 注册的事件监听器,如果只传递 type,将会删除 type 类型的所有事件监听器。\n *\n * @method off\n * @param {String} type - A string representing the event type being removed.\n * @param {Function} [callback] - The callback to remove.\n * @param {Object} [target] - The target (this object) to invoke the callback, if it's not given, only callback without target will be removed\n * @example\n * // register fire eventListener\n * var callback = eventTarget.on('fire', function () {\n * cc.log(\"fire in the hole\");\n * }, target);\n * // remove fire event listener\n * eventTarget.off('fire', callback, target);\n * // remove all fire event listeners\n * eventTarget.off('fire');\n */\nproto.__off = proto.off;\nproto.off = function (type, callback, target) {\n if (!callback) {\n let list = this._callbackTable[type];\n if (!list) return;\n let infos = list.callbackInfos;\n for (let i = 0; i < infos.length; ++i) {\n let target = infos[i] && infos[i].target;\n if (target && target.__eventTargets) {\n fastRemove(target.__eventTargets, this);\n }\n }\n this.removeAll(type);\n }\n else {\n this.__off(type, callback, target);\n\n if (target && target.__eventTargets) {\n fastRemove(target.__eventTargets, this);\n }\n }\n};\n\n/**\n * !#en Removes all callbacks previously registered with the same target (passed as parameter).\n * This is not for removing all listeners in the current event target,\n * and this is not for removing all listeners the target parameter have registered.\n * It's only for removing all listeners (callback and target couple) registered on the current event target by the target parameter.\n * !#zh 在当前 EventTarget 上删除指定目标(target 参数)注册的所有事件监听器。\n * 这个函数无法删除当前 EventTarget 的所有事件监听器,也无法删除 target 参数所注册的所有事件监听器。\n * 这个函数只能删除 target 参数在当前 EventTarget 上注册的所有事件监听器。\n * @method targetOff\n * @param {Object} target - The target to be searched for all related listeners\n */\nproto.targetOff = function (target) {\n this.removeAll(target);\n \n if (target && target.__eventTargets) {\n fastRemove(target.__eventTargets, this);\n }\n};\n\n/**\n * !#en\n * Register an callback of a specific event type on the EventTarget,\n * the callback will remove itself after the first time it is triggered.\n * !#zh\n * 注册事件目标的特定事件类型回调,回调会在第一时间被触发后删除自身。\n *\n * @method once\n * @param {String} type - A string representing the event type to listen for.\n * @param {Function} callback - The callback that will be invoked when the event is dispatched.\n * The callback is ignored if it is a duplicate (the callbacks are unique).\n * @param {any} [callback.arg1] arg1\n * @param {any} [callback.arg2] arg2\n * @param {any} [callback.arg3] arg3\n * @param {any} [callback.arg4] arg4\n * @param {any} [callback.arg5] arg5\n * @param {Object} [target] - The target (this object) to invoke the callback, can be null\n * @example\n * eventTarget.once('fire', function () {\n * cc.log(\"this is the callback and will be invoked only once\");\n * }, node);\n */\nproto.once = function (type, callback, target) {\n this.on(type, callback, target, true);\n};\n\n/**\n * !#en\n * Send an event with the event object.\n * !#zh\n * 通过事件对象派发事件\n *\n * @method dispatchEvent\n * @param {Event} event\n */\nproto.dispatchEvent = function (event) {\n this.emit(event.type, event);\n};\n\n/**\n * !#en\n * Destroy all callbackInfos.\n * !#zh\n * 销毁记录的事件\n *\n * @method clear\n */\nproto.clear = function () {\n // remove all callback\n for (const key in this._callbackTable) {\n const list = this._callbackTable[key];\n const infos = list.callbackInfos;\n for (let i = infos.length - 1; i >= 0; i--) {\n const info = infos[i];\n if (info) {\n this.off(key, info.callback, info.target);\n }\n }\n }\n};\n\ncc.EventTarget = module.exports = EventTarget;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar js = require(\"../platform/js\");\n\n/**\n * !#en Base class of all kinds of events.\n * !#zh 包含事件相关信息的对象。\n * @class Event\n */\n\n/**\n * @method constructor\n * @param {String} type - The name of the event (case-sensitive), e.g. \"click\", \"fire\", or \"submit\"\n * @param {Boolean} bubbles - A boolean indicating whether the event bubbles up through the tree or not\n */\ncc.Event = function(type, bubbles) {\n /**\n * !#en The name of the event (case-sensitive), e.g. \"click\", \"fire\", or \"submit\".\n * !#zh 事件类型。\n * @property type\n * @type {String}\n */\n this.type = type;\n\n /**\n * !#en Indicate whether the event bubbles up through the tree or not.\n * !#zh 表示该事件是否进行冒泡。\n * @property bubbles\n * @type {Boolean}\n */\n this.bubbles = !!bubbles;\n\n /**\n * !#en A reference to the target to which the event was originally dispatched.\n * !#zh 最初事件触发的目标\n * @property target\n * @type {Object}\n */\n this.target = null;\n\n /**\n * !#en A reference to the currently registered target for the event.\n * !#zh 当前目标\n * @property currentTarget\n * @type {Object}\n */\n this.currentTarget = null;\n\n /**\n * !#en\n * Indicates which phase of the event flow is currently being evaluated.\n * Returns an integer value represented by 4 constants:\n * - Event.NONE = 0\n * - Event.CAPTURING_PHASE = 1\n * - Event.AT_TARGET = 2\n * - Event.BUBBLING_PHASE = 3\n * The phases are explained in the [section 3.1, Event dispatch and DOM event flow]\n * (http://www.w3.org/TR/DOM-Level-3-Events/#event-flow), of the DOM Level 3 Events specification.\n * !#zh 事件阶段\n * @property eventPhase\n * @type {Number}\n */\n this.eventPhase = 0;\n\n /*\n * Indicates whether or not event.stopPropagation() has been called on the event.\n * @property _propagationStopped\n * @type {Boolean}\n * @private\n */\n this._propagationStopped = false;\n\n /*\n * Indicates whether or not event.stopPropagationImmediate() has been called on the event.\n * @property _propagationImmediateStopped\n * @type {Boolean}\n * @private\n */\n this._propagationImmediateStopped = false;\n};\ncc.Event.prototype = {\n constructor: cc.Event,\n\n /**\n * !#en Reset the event for being stored in the object pool.\n * !#zh 重置对象池中存储的事件。\n * @method unuse\n * @returns {String}\n */\n unuse: function () {\n this.type = cc.Event.NO_TYPE;\n this.target = null;\n this.currentTarget = null;\n this.eventPhase = cc.Event.NONE;\n this._propagationStopped = false;\n this._propagationImmediateStopped = false;\n },\n\n /**\n * !#en Reuse the event for being used again by the object pool.\n * !#zh 用于对象池再次使用的事件。\n * @method reuse\n * @returns {String}\n */\n reuse: function (type, bubbles) {\n this.type = type;\n this.bubbles = bubbles || false;\n },\n\n /**\n * !#en Stops propagation for current event.\n * !#zh 停止传递当前事件。\n * @method stopPropagation\n */\n stopPropagation: function () {\n this._propagationStopped = true;\n },\n\n /**\n * !#en Stops propagation for current event immediately,\n * the event won't even be dispatched to the listeners attached in the current target.\n * !#zh 立即停止当前事件的传递,事件甚至不会被分派到所连接的当前目标。\n * @method stopPropagationImmediate\n */\n stopPropagationImmediate: function () {\n this._propagationImmediateStopped = true;\n },\n\n /**\n * !#en Checks whether the event has been stopped.\n * !#zh 检查该事件是否已经停止传递.\n * @method isStopped\n * @returns {Boolean}\n */\n isStopped: function () {\n return this._propagationStopped || this._propagationImmediateStopped;\n },\n\n /**\n * !#en\n *

\n * Gets current target of the event
\n * note: It only be available when the event listener is associated with node.
\n * It returns 0 when the listener is associated with fixed priority.\n *

\n * !#zh 获取当前目标节点\n * @method getCurrentTarget\n * @returns {Node} The target with which the event associates.\n */\n getCurrentTarget: function () {\n return this.currentTarget;\n },\n\n /**\n * !#en Gets the event type.\n * !#zh 获取事件类型\n * @method getType\n * @returns {String}\n */\n getType: function () {\n return this.type;\n }\n};\n\n//event type\n/**\n * !#en Code for event without type.\n * !#zh 没有类型的事件\n * @property NO_TYPE\n * @static\n * @type {string}\n */\ncc.Event.NO_TYPE = 'no_type';\n\n/**\n * !#en The type code of Touch event.\n * !#zh 触摸事件类型\n * @property TOUCH\n * @static\n * @type {String}\n */\ncc.Event.TOUCH = 'touch';\n/**\n * !#en The type code of Mouse event.\n * !#zh 鼠标事件类型\n * @property MOUSE\n * @static\n * @type {String}\n */\ncc.Event.MOUSE = 'mouse';\n/**\n * !#en The type code of Keyboard event.\n * !#zh 键盘事件类型\n * @property KEYBOARD\n * @static\n * @type {String}\n */\ncc.Event.KEYBOARD = 'keyboard';\n/**\n * !#en The type code of Acceleration event.\n * !#zh 加速器事件类型\n * @property ACCELERATION\n * @static\n * @type {String}\n */\ncc.Event.ACCELERATION = 'acceleration';\n\n//event phase\n/**\n * !#en Events not currently dispatched are in this phase\n * !#zh 尚未派发事件阶段\n * @property NONE\n * @type {Number}\n * @static\n */\ncc.Event.NONE = 0;\n/**\n * !#en\n * The capturing phase comprises the journey from the root to the last node before the event target's node\n * see http://www.w3.org/TR/DOM-Level-3-Events/#event-flow\n * !#zh 捕获阶段,包括事件目标节点之前从根节点到最后一个节点的过程。\n * @property CAPTURING_PHASE\n * @type {Number}\n * @static\n */\ncc.Event.CAPTURING_PHASE = 1;\n/**\n * !#en\n * The target phase comprises only the event target node\n * see http://www.w3.org/TR/DOM-Level-3-Events/#event-flow\n * !#zh 目标阶段仅包括事件目标节点。\n * @property AT_TARGET\n * @type {Number}\n * @static\n */\ncc.Event.AT_TARGET = 2;\n/**\n * !#en\n * The bubbling phase comprises any subsequent nodes encountered on the return trip to the root of the hierarchy\n * see http://www.w3.org/TR/DOM-Level-3-Events/#event-flow\n * !#zh 冒泡阶段, 包括回程遇到到层次根节点的任何后续节点。\n * @property BUBBLING_PHASE\n * @type {Number}\n * @static\n */\ncc.Event.BUBBLING_PHASE = 3;\n\n/**\n * !#en The Custom event\n * !#zh 自定义事件\n * @class Event.EventCustom\n *\n * @extends Event\n */\n\n/**\n * @method constructor\n * @param {String} type - The name of the event (case-sensitive), e.g. \"click\", \"fire\", or \"submit\"\n * @param {Boolean} bubbles - A boolean indicating whether the event bubbles up through the tree or not\n */\nvar EventCustom = function (type, bubbles) {\n cc.Event.call(this, type, bubbles);\n\n /**\n * !#en A reference to the detailed data of the event\n * !#zh 事件的详细数据\n * @property detail\n * @type {Object}\n */\n this.detail = null;\n};\n\njs.extend(EventCustom, cc.Event);\n\nEventCustom.prototype.reset = EventCustom;\n\n/**\n * !#en Sets user data\n * !#zh 设置用户数据\n * @method setUserData\n * @param {*} data\n */\nEventCustom.prototype.setUserData = function (data) {\n this.detail = data;\n};\n\n/**\n * !#en Gets user data\n * !#zh 获取用户数据\n * @method getUserData\n * @returns {*}\n */\nEventCustom.prototype.getUserData = function () {\n return this.detail;\n};\n\n/**\n * !#en Gets event name\n * !#zh 获取事件名称\n * @method getEventName\n * @returns {String}\n */\nEventCustom.prototype.getEventName = cc.Event.prototype.getType;\n\nvar MAX_POOL_SIZE = 10;\nvar _eventPool = new js.Pool(MAX_POOL_SIZE);\nEventCustom.put = function (event) {\n _eventPool.put(event);\n};\nEventCustom.get = function (type, bubbles) {\n var event = _eventPool._get();\n if (event) {\n event.reset(type, bubbles);\n }\n else {\n event = new EventCustom(type, bubbles);\n }\n return event;\n};\n\ncc.Event.EventCustom = EventCustom;\n\nmodule.exports = cc.Event;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n \nrequire('./event');\nrequire('./event-listeners');\nrequire('./event-target');\nrequire('./system-event');\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar EventTarget = require('../event/event-target');\nvar eventManager = require('../event-manager');\nvar inputManger = require('../platform/CCInputManager');;\n\n/**\n * !#en The event type supported by SystemEvent\n * !#zh SystemEvent 支持的事件类型\n * @class SystemEvent.EventType\n * @static\n * @namespace SystemEvent\n */\nvar EventType = cc.Enum({\n /**\n * !#en The event type for press the key down event, you can use its value directly: 'keydown'\n * !#zh 当按下按键时触发的事件\n * @property KEY_DOWN\n * @type {String}\n * @static\n */\n KEY_DOWN: 'keydown',\n /**\n * !#en The event type for press the key up event, you can use its value directly: 'keyup'\n * !#zh 当松开按键时触发的事件\n * @property KEY_UP\n * @type {String}\n * @static\n */\n KEY_UP: 'keyup',\n /**\n * !#en The event type for press the devicemotion event, you can use its value directly: 'devicemotion'\n * !#zh 重力感应\n * @property DEVICEMOTION\n * @type {String}\n * @static\n */\n DEVICEMOTION: 'devicemotion'\n\n});\n\n/**\n * !#en\n * The System event, it currently supports keyboard events and accelerometer events.
\n * You can get the SystemEvent instance with cc.systemEvent.
\n * !#zh\n * 系统事件,它目前支持按键事件和重力感应事件。
\n * 你可以通过 cc.systemEvent 获取到 SystemEvent 的实例。
\n * @class SystemEvent\n * @extends EventTarget\n * @example\n * cc.systemEvent.on(cc.SystemEvent.EventType.DEVICEMOTION, this.onDeviceMotionEvent, this);\n * cc.systemEvent.off(cc.SystemEvent.EventType.DEVICEMOTION, this.onDeviceMotionEvent, this);\n */\n\nvar keyboardListener = null;\nvar accelerationListener = null;\nvar SystemEvent = cc.Class({\n name: 'SystemEvent',\n extends: EventTarget,\n\n statics: {\n EventType: EventType\n },\n\n /**\n * !#en whether enable accelerometer event\n * !#zh 是否启用加速度计事件\n * @method setAccelerometerEnabled\n * @param {Boolean} isEnable\n */\n setAccelerometerEnabled: function (isEnable) {\n if (CC_EDITOR) {\n return;\n }\n\n // for iOS 13+\n if (isEnable && window.DeviceMotionEvent && typeof DeviceMotionEvent.requestPermission === 'function') {\n DeviceMotionEvent.requestPermission().then(response => {\n console.log(`Device Motion Event request permission: ${response}`);\n inputManger.setAccelerometerEnabled(response === 'granted');\n });\n } else {\n inputManger.setAccelerometerEnabled(isEnable);\n }\n },\n\n /**\n * !#en set accelerometer interval value\n * !#zh 设置加速度计间隔值\n * @method setAccelerometerInterval\n * @param {Number} interval\n */\n setAccelerometerInterval: function(interval) {\n if (CC_EDITOR) {\n return;\n }\n inputManger.setAccelerometerInterval(interval);\n },\n\n on: function (type, callback, target, once) {\n if (CC_EDITOR) {\n return;\n }\n this._super(type, callback, target, once);\n\n // Keyboard\n if (type === EventType.KEY_DOWN || type === EventType.KEY_UP) {\n if (!keyboardListener) {\n keyboardListener = cc.EventListener.create({\n event: cc.EventListener.KEYBOARD,\n onKeyPressed: function (keyCode, event) {\n event.type = EventType.KEY_DOWN;\n cc.systemEvent.dispatchEvent(event);\n },\n onKeyReleased: function (keyCode, event) {\n event.type = EventType.KEY_UP;\n cc.systemEvent.dispatchEvent(event);\n }\n });\n }\n if (!eventManager.hasEventListener(cc.EventListener.ListenerID.KEYBOARD)) {\n eventManager.addListener(keyboardListener, 1);\n }\n }\n\n // Acceleration\n if (type === EventType.DEVICEMOTION) {\n if (!accelerationListener) {\n accelerationListener = cc.EventListener.create({\n event: cc.EventListener.ACCELERATION,\n callback: function (acc, event) {\n event.type = EventType.DEVICEMOTION;\n cc.systemEvent.dispatchEvent(event);\n }\n });\n }\n if (!eventManager.hasEventListener(cc.EventListener.ListenerID.ACCELERATION)) {\n eventManager.addListener(accelerationListener, 1);\n }\n }\n },\n\n\n off: function (type, callback, target) {\n if (CC_EDITOR) {\n return;\n }\n this._super(type, callback, target);\n\n // Keyboard\n if (keyboardListener && (type === EventType.KEY_DOWN || type === EventType.KEY_UP)) {\n var hasKeyDownEventListener = this.hasEventListener(EventType.KEY_DOWN);\n var hasKeyUpEventListener = this.hasEventListener(EventType.KEY_UP);\n if (!hasKeyDownEventListener && !hasKeyUpEventListener) {\n eventManager.removeListener(keyboardListener);\n }\n }\n\n // Acceleration\n if (accelerationListener && type === EventType.DEVICEMOTION) {\n eventManager.removeListener(accelerationListener);\n }\n }\n\n});\n\ncc.SystemEvent = module.exports = SystemEvent;\n/**\n * @module cc\n */\n\n/**\n * !#en The System event singleton for global usage\n * !#zh 系统事件单例,方便全局使用\n * @property systemEvent\n * @type {SystemEvent}\n */\ncc.systemEvent = new cc.SystemEvent();\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n'use strict';\n\nrequire('./graphics');\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nrequire('./platform');\nrequire('./assets');\n\nif (!CC_EDITOR || !Editor.isMainProcess) {\n require('./CCNode');\n require('./CCPrivateNode');\n require('./CCScene');\n\n require('./components');\n require('./graphics');\n require('./collider');\n // CCIntersection can be used separately.\n require('./collider/CCIntersection');\n require('./physics');\n require('./camera/CCCamera');\n require('./geom-utils');\n\n require('./sp');\n}\n\nrequire('./mesh');\nrequire('./3d');\n\nrequire('./base-ui/CCWidgetManager');\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar CompScheduler = require('./component-scheduler');\nvar Flags = require('./platform/CCObject').Flags;\nvar js = require('./platform/js');\nvar callerFunctor = CC_EDITOR && require('./utils/misc').tryCatchFunctor_EDITOR;\n\nvar MAX_POOL_SIZE = 4;\n\nvar IsPreloadStarted = Flags.IsPreloadStarted;\nvar IsOnLoadStarted = Flags.IsOnLoadStarted;\nvar IsOnLoadCalled = Flags.IsOnLoadCalled;\nvar Deactivating = Flags.Deactivating;\n\nvar callPreloadInTryCatch = CC_EDITOR && callerFunctor('__preload');\nvar callOnLoadInTryCatch = CC_EDITOR && function (c) {\n try {\n c.onLoad();\n }\n catch (e) {\n cc._throw(e);\n }\n c._objFlags |= IsOnLoadCalled;\n _onLoadInEditor(c);\n};\nvar callOnDestroyInTryCatch = CC_EDITOR && callerFunctor('onDestroy');\nvar callOnFocusInTryCatch = CC_EDITOR && callerFunctor('onFocusInEditor');\nvar callOnLostFocusInTryCatch = CC_EDITOR && callerFunctor('onLostFocusInEditor');\n\n// for __preload: use internally, no sort\nvar UnsortedInvoker = cc.Class({\n extends: CompScheduler.LifeCycleInvoker,\n add (comp) {\n this._zero.array.push(comp);\n },\n remove (comp) {\n this._zero.fastRemove(comp);\n },\n cancelInactive (flagToClear) {\n CompScheduler.LifeCycleInvoker.stableRemoveInactive(this._zero, flagToClear);\n },\n invoke () {\n this._invoke(this._zero);\n this._zero.array.length = 0;\n },\n});\n\nvar invokePreload = CC_SUPPORT_JIT ?\n CompScheduler.createInvokeImpl('c.__preload();') :\n CompScheduler.createInvokeImpl(function (c) { c.__preload(); }, false, undefined, function (iterator) {\n var array = iterator.array;\n for (iterator.i = 0; iterator.i < array.length; ++iterator.i) {\n array[iterator.i].__preload();\n }\n });\nvar invokeOnLoad = CC_SUPPORT_JIT ?\n CompScheduler.createInvokeImpl('c.onLoad();c._objFlags|=' + IsOnLoadCalled, false, IsOnLoadCalled) :\n CompScheduler.createInvokeImpl(function (c) {\n c.onLoad();\n c._objFlags |= IsOnLoadCalled;\n },\n false,\n IsOnLoadCalled,\n function (iterator) {\n var array = iterator.array;\n for (iterator.i = 0; iterator.i < array.length; ++iterator.i) {\n let comp = array[iterator.i];\n comp.onLoad();\n comp._objFlags |= IsOnLoadCalled;\n }\n }\n );\n\n\nvar activateTasksPool = new js.Pool(MAX_POOL_SIZE);\nactivateTasksPool.get = function getActivateTask () {\n var task = this._get() || {\n preload: new UnsortedInvoker(invokePreload),\n onLoad: new CompScheduler.OneOffInvoker(invokeOnLoad),\n onEnable: new CompScheduler.OneOffInvoker(CompScheduler.invokeOnEnable)\n };\n\n // reset index to -1 so we can skip invoked component in cancelInactive\n task.preload._zero.i = -1;\n var invoker = task.onLoad;\n invoker._zero.i = -1;\n invoker._neg.i = -1;\n invoker._pos.i = -1;\n invoker = task.onEnable;\n invoker._zero.i = -1;\n invoker._neg.i = -1;\n invoker._pos.i = -1;\n\n return task;\n};\n\nfunction _componentCorrupted (node, comp, index) {\n if (CC_DEV) {\n cc.errorID(3817, node.name, index);\n console.log('Corrupted component value:', comp);\n }\n if (comp) {\n node._removeComponent(comp);\n }\n else {\n js.array.removeAt(node._components, index);\n }\n}\n\nfunction _onLoadInEditor (comp) {\n if (comp.onLoad && !cc.engine._isPlaying) {\n var focused = Editor.Selection.curActivate('node') === comp.node.uuid;\n if (focused) {\n comp.onFocusInEditor && callOnFocusInTryCatch(comp);\n }\n else {\n comp.onLostFocusInEditor && callOnLostFocusInTryCatch(comp);\n }\n }\n if ( !CC_TEST ) {\n _Scene.AssetsWatcher.start(comp);\n }\n}\n\n/**\n * The class used to perform activating and deactivating operations of node and component.\n */\nfunction ctor () {\n // a stack of node's activating tasks\n this._activatingStack = [];\n}\nvar NodeActivator = cc.Class({\n ctor: ctor,\n reset: ctor,\n\n _activateNodeRecursively (node, preloadInvoker, onLoadInvoker, onEnableInvoker) {\n if (node._objFlags & Deactivating) {\n // en:\n // Forbid reactive the same node during its deactivating procedure\n // to avoid endless loop and simplify the implementation.\n // zh:\n // 对相同节点而言,无法撤销反激活,防止反激活 - 激活 - 反激活的死循环发生。\n // 这样设计简化了一些引擎的实现,而且对调用者来说能保证反激活操作都能成功。\n cc.errorID(3816, node.name);\n return;\n }\n\n node._activeInHierarchy = true;\n\n // component maybe added during onEnable, and the onEnable of new component is already called\n // so we should record the origin length\n var originCount = node._components.length;\n // activate components\n for (let i = 0; i < originCount; ++i) {\n let component = node._components[i];\n if (component instanceof cc.Component) {\n this.activateComp(component, preloadInvoker, onLoadInvoker, onEnableInvoker);\n }\n else {\n _componentCorrupted(node, component, i);\n --i;\n --originCount;\n }\n }\n\n node._childArrivalOrder = node._children.length;\n \n // activate children recursively\n for (let i = 0, len = node._children.length; i < len; ++i) {\n let child = node._children[i];\n child._localZOrder = (child._localZOrder & 0xffff0000) | (i + 1);\n if (child._active) {\n this._activateNodeRecursively(child, preloadInvoker, onLoadInvoker, onEnableInvoker);\n }\n }\n node._onPostActivated(true);\n },\n\n _deactivateNodeRecursively (node) {\n if (CC_DEV) {\n cc.assert(!(node._objFlags & Deactivating), 'node should not deactivating');\n // ensures _activeInHierarchy is always changing when Deactivating flagged\n cc.assert(node._activeInHierarchy, 'node should not deactivated');\n }\n node._objFlags |= Deactivating;\n node._activeInHierarchy = false;\n\n // component maybe added during onEnable, and the onEnable of new component is already called\n // so we should record the origin length\n var originCount = node._components.length;\n for (let c = 0; c < originCount; ++c) {\n let component = node._components[c];\n if (component._enabled) {\n cc.director._compScheduler.disableComp(component);\n\n if (node._activeInHierarchy) {\n // reactivated from root\n node._objFlags &= ~Deactivating;\n return;\n }\n }\n }\n for (let i = 0, len = node._children.length; i < len; ++i) {\n let child = node._children[i];\n if (child._activeInHierarchy) {\n this._deactivateNodeRecursively(child);\n\n if (node._activeInHierarchy) {\n // reactivated from root\n node._objFlags &= ~Deactivating;\n return;\n }\n }\n }\n\n node._onPostActivated(false);\n node._objFlags &= ~Deactivating;\n },\n\n activateNode (node, active) {\n if (active) {\n var task = activateTasksPool.get();\n this._activatingStack.push(task);\n\n this._activateNodeRecursively(node, task.preload, task.onLoad, task.onEnable);\n task.preload.invoke();\n task.onLoad.invoke();\n task.onEnable.invoke();\n\n this._activatingStack.pop();\n activateTasksPool.put(task);\n }\n else {\n this._deactivateNodeRecursively(node);\n\n // remove children of this node from previous activating tasks to debounce\n // (this is an inefficient operation but it ensures general case could be implemented in a efficient way)\n var stack = this._activatingStack;\n for (var i = 0; i < stack.length; i++) {\n var lastTask = stack[i];\n lastTask.preload.cancelInactive(IsPreloadStarted);\n lastTask.onLoad.cancelInactive(IsOnLoadStarted);\n lastTask.onEnable.cancelInactive();\n }\n }\n node.emit('active-in-hierarchy-changed', node);\n },\n\n activateComp: CC_EDITOR ? function (comp, preloadInvoker, onLoadInvoker, onEnableInvoker) {\n if (!cc.isValid(comp, true)) {\n // destroyed before activating\n return;\n }\n if (cc.engine._isPlaying || comp.constructor._executeInEditMode) {\n if (!(comp._objFlags & IsPreloadStarted)) {\n comp._objFlags |= IsPreloadStarted;\n if (comp.__preload) {\n if (preloadInvoker) {\n preloadInvoker.add(comp);\n }\n else {\n callPreloadInTryCatch(comp);\n }\n }\n }\n if (!(comp._objFlags & IsOnLoadStarted)) {\n comp._objFlags |= IsOnLoadStarted;\n if (comp.onLoad) {\n if (onLoadInvoker) {\n onLoadInvoker.add(comp);\n }\n else {\n callOnLoadInTryCatch(comp);\n }\n }\n else {\n comp._objFlags |= IsOnLoadCalled;\n _onLoadInEditor(comp);\n }\n }\n }\n if (comp._enabled) {\n var deactivatedOnLoading = !comp.node._activeInHierarchy;\n if (deactivatedOnLoading) {\n return;\n }\n cc.director._compScheduler.enableComp(comp, onEnableInvoker);\n }\n } : function (comp, preloadInvoker, onLoadInvoker, onEnableInvoker) {\n if (!cc.isValid(comp, true)) {\n // destroyed before activating\n return;\n }\n if (!(comp._objFlags & IsPreloadStarted)) {\n comp._objFlags |= IsPreloadStarted;\n if (comp.__preload) {\n if (preloadInvoker) {\n preloadInvoker.add(comp);\n }\n else {\n comp.__preload();\n }\n }\n }\n if (!(comp._objFlags & IsOnLoadStarted)) {\n comp._objFlags |= IsOnLoadStarted;\n if (comp.onLoad) {\n if (onLoadInvoker) {\n onLoadInvoker.add(comp);\n }\n else {\n comp.onLoad();\n comp._objFlags |= IsOnLoadCalled;\n }\n }\n else {\n comp._objFlags |= IsOnLoadCalled;\n }\n }\n if (comp._enabled) {\n var deactivatedOnLoading = !comp.node._activeInHierarchy;\n if (deactivatedOnLoading) {\n return;\n }\n cc.director._compScheduler.enableComp(comp, onEnableInvoker);\n }\n },\n\n destroyComp: CC_EDITOR ? function (comp) {\n // ensure onDisable called\n cc.director._compScheduler.disableComp(comp);\n\n if (comp.onDestroy && (comp._objFlags & IsOnLoadCalled)) {\n if (cc.engine._isPlaying || comp.constructor._executeInEditMode) {\n callOnDestroyInTryCatch(comp);\n comp._objFlags &= ~IsOnLoadCalled; // In case call onDestroy twice in undo operation\n }\n }\n } : function (comp) {\n // ensure onDisable called\n cc.director._compScheduler.disableComp(comp);\n\n if (comp.onDestroy && (comp._objFlags & IsOnLoadCalled)) {\n comp.onDestroy();\n }\n },\n\n resetComp: CC_EDITOR && function (comp, didResetToDefault) {\n if (comp.resetInEditor) {\n try {\n comp.resetInEditor(didResetToDefault);\n }\n catch (e) {\n cc._throw(e);\n }\n }\n }\n});\n\nmodule.exports = NodeActivator;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar js = require('./js');\nvar Enum = require('./CCEnum');\nvar utils = require('./utils');\nvar _isPlainEmptyObj_DEV = utils.isPlainEmptyObj_DEV;\nvar _cloneable_DEV = utils.cloneable_DEV;\nvar Attr = require('./attribute');\nvar DELIMETER = Attr.DELIMETER;\nvar preprocess = require('./preprocess-class');\nrequire('./requiring-frame');\n\nvar BUILTIN_ENTRIES = ['name', 'extends', 'mixins', 'ctor', '__ctor__', 'properties', 'statics', 'editor', '__ES6__'];\n\nvar INVALID_STATICS_DEV = CC_DEV && ['name', '__ctors__', '__props__', '__values__', 'arguments', 'call', 'apply', 'caller',\n 'length', 'prototype'];\n\nfunction pushUnique (array, item) {\n if (array.indexOf(item) < 0) {\n array.push(item);\n }\n}\n\nvar deferredInitializer = {\n\n // Configs for classes which needs deferred initialization\n datas: null,\n\n // register new class\n // data - {cls: cls, cb: properties, mixins: options.mixins}\n push: function (data) {\n if (this.datas) {\n this.datas.push(data);\n }\n else {\n this.datas = [data];\n // start a new timer to initialize\n var self = this;\n setTimeout(function () {\n self.init();\n }, 0);\n }\n },\n\n init: function () {\n var datas = this.datas;\n if (datas) {\n for (var i = 0; i < datas.length; ++i) {\n var data = datas[i];\n var cls = data.cls;\n var properties = data.props;\n if (typeof properties === 'function') {\n properties = properties();\n }\n var name = js.getClassName(cls);\n if (properties) {\n declareProperties(cls, name, properties, cls.$super, data.mixins);\n }\n else {\n cc.errorID(3633, name);\n }\n }\n this.datas = null;\n }\n }\n};\n\n// both getter and prop must register the name into __props__ array\nfunction appendProp (cls, name) {\n if (CC_DEV) {\n //if (!IDENTIFIER_RE.test(name)) {\n // cc.error('The property name \"' + name + '\" is not compliant with JavaScript naming standards');\n // return;\n //}\n if (name.indexOf('.') !== -1) {\n cc.errorID(3634);\n return;\n }\n }\n pushUnique(cls.__props__, name);\n}\n\nfunction defineProp (cls, className, propName, val, es6) {\n var defaultValue = val.default;\n\n if (CC_DEV) {\n if (!es6) {\n // check default object value\n if (typeof defaultValue === 'object' && defaultValue) {\n if (Array.isArray(defaultValue)) {\n // check array empty\n if (defaultValue.length > 0) {\n cc.errorID(3635, className, propName, propName);\n return;\n }\n }\n else if (!_isPlainEmptyObj_DEV(defaultValue)) {\n // check cloneable\n if (!_cloneable_DEV(defaultValue)) {\n cc.errorID(3636, className, propName, propName);\n return;\n }\n }\n }\n }\n\n // check base prototype to avoid name collision\n if (CCClass.getInheritanceChain(cls)\n .some(function (x) { return x.prototype.hasOwnProperty(propName); }))\n {\n cc.errorID(3637, className, propName, className);\n return;\n }\n }\n\n // set default value\n Attr.setClassAttr(cls, propName, 'default', defaultValue);\n\n appendProp(cls, propName);\n\n // apply attributes\n parseAttributes(cls, val, className, propName, false);\n if ((CC_EDITOR && !Editor.isBuilder) || CC_TEST) {\n for (let i = 0; i < onAfterProps_ET.length; i++) {\n onAfterProps_ET[i](cls, propName);\n }\n onAfterProps_ET.length = 0;\n }\n}\n\nfunction defineGetSet (cls, name, propName, val, es6) {\n var getter = val.get;\n var setter = val.set;\n var proto = cls.prototype;\n var d = Object.getOwnPropertyDescriptor(proto, propName);\n var setterUndefined = !d;\n\n if (getter) {\n if (CC_DEV && !es6 && d && d.get) {\n cc.errorID(3638, name, propName);\n return;\n }\n\n parseAttributes(cls, val, name, propName, true);\n if ((CC_EDITOR && !Editor.isBuilder) || CC_TEST) {\n onAfterProps_ET.length = 0;\n }\n\n Attr.setClassAttr(cls, propName, 'serializable', false);\n\n if (CC_DEV) {\n // 不论是否 visible 都要添加到 props,否则 asset watcher 不能正常工作\n appendProp(cls, propName);\n }\n\n if (!es6) {\n js.get(proto, propName, getter, setterUndefined, setterUndefined);\n }\n\n if (CC_EDITOR || CC_DEV) {\n Attr.setClassAttr(cls, propName, 'hasGetter', true); // 方便 editor 做判断\n }\n }\n\n if (setter) {\n if (!es6) {\n if (CC_DEV && d && d.set) {\n return cc.errorID(3640, name, propName);\n }\n js.set(proto, propName, setter, setterUndefined, setterUndefined);\n }\n if (CC_EDITOR || CC_DEV) {\n Attr.setClassAttr(cls, propName, 'hasSetter', true); // 方便 editor 做判断\n }\n }\n}\n\nfunction getDefault (defaultVal) {\n if (typeof defaultVal === 'function') {\n if (CC_EDITOR) {\n try {\n return defaultVal();\n }\n catch (e) {\n cc._throw(e);\n return undefined;\n }\n }\n else {\n return defaultVal();\n }\n }\n return defaultVal;\n}\n\nfunction mixinWithInherited (dest, src, filter) {\n for (var prop in src) {\n if (!dest.hasOwnProperty(prop) && (!filter || filter(prop))) {\n Object.defineProperty(dest, prop, js.getPropertyDescriptor(src, prop));\n }\n }\n}\n\nfunction doDefine (className, baseClass, mixins, options) {\n var shouldAddProtoCtor;\n var __ctor__ = options.__ctor__;\n var ctor = options.ctor;\n var __es6__ = options.__ES6__;\n\n if (CC_DEV) {\n // check ctor\n var ctorToUse = __ctor__ || ctor;\n if (ctorToUse) {\n if (CCClass._isCCClass(ctorToUse)) {\n cc.errorID(3618, className);\n }\n else if (typeof ctorToUse !== 'function') {\n cc.errorID(3619, className);\n }\n else {\n if (baseClass && /\\bprototype.ctor\\b/.test(ctorToUse)) {\n if (__es6__) {\n cc.errorID(3651, className || \"\");\n }\n else {\n cc.warnID(3600, className || \"\");\n shouldAddProtoCtor = true;\n }\n }\n }\n if (ctor) {\n if (__ctor__) {\n cc.errorID(3649, className);\n }\n else {\n ctor = options.ctor = _validateCtor_DEV(ctor, baseClass, className, options);\n }\n }\n }\n }\n\n var ctors;\n var fireClass;\n if (__es6__) {\n ctors = [ctor];\n fireClass = ctor;\n }\n else {\n ctors = __ctor__ ? [__ctor__] : _getAllCtors(baseClass, mixins, options);\n fireClass = _createCtor(ctors, baseClass, className, options);\n\n // extend - Create a new Class that inherits from this Class\n js.value(fireClass, 'extend', function (options) {\n options.extends = this;\n return CCClass(options);\n }, true);\n }\n\n js.value(fireClass, '__ctors__', ctors.length > 0 ? ctors : null, true);\n\n\n var prototype = fireClass.prototype;\n if (baseClass) {\n if (!__es6__) {\n js.extend(fireClass, baseClass); // 这里会把父类的 __props__ 复制给子类\n prototype = fireClass.prototype; // get extended prototype\n }\n fireClass.$super = baseClass;\n if (CC_DEV && shouldAddProtoCtor) {\n prototype.ctor = function () {};\n }\n }\n\n if (mixins) {\n for (var m = mixins.length - 1; m >= 0; m--) {\n var mixin = mixins[m];\n mixinWithInherited(prototype, mixin.prototype);\n\n // mixin statics (this will also copy editor attributes for component)\n mixinWithInherited(fireClass, mixin, function (prop) {\n return mixin.hasOwnProperty(prop) && (!CC_DEV || INVALID_STATICS_DEV.indexOf(prop) < 0);\n });\n\n // mixin attributes\n if (CCClass._isCCClass(mixin)) {\n mixinWithInherited(Attr.getClassAttrs(fireClass), Attr.getClassAttrs(mixin));\n }\n }\n // restore constuctor overridden by mixin\n prototype.constructor = fireClass;\n }\n\n if (!__es6__) {\n prototype.__initProps__ = compileProps;\n }\n\n js.setClassName(className, fireClass);\n return fireClass;\n}\n\nfunction define (className, baseClass, mixins, options) {\n var Component = cc.Component;\n var frame = cc._RF.peek();\n if (frame && js.isChildClassOf(baseClass, Component)) {\n // project component\n if (js.isChildClassOf(frame.cls, Component)) {\n cc.errorID(3615);\n return null;\n }\n if (CC_DEV && frame.uuid && className) {\n cc.warnID(3616, className);\n }\n className = className || frame.script;\n }\n\n var cls = doDefine(className, baseClass, mixins, options);\n\n if (frame) {\n if (js.isChildClassOf(baseClass, Component)) {\n var uuid = frame.uuid;\n if (uuid) {\n js._setClassId(uuid, cls);\n if (CC_EDITOR) {\n Component._addMenuItem(cls, 'i18n:MAIN_MENU.component.scripts/' + className, -1);\n cls.prototype.__scriptUuid = Editor.Utils.UuidUtils.decompressUuid(uuid);\n }\n }\n frame.cls = cls;\n }\n else if (!js.isChildClassOf(frame.cls, Component)) {\n frame.cls = cls;\n }\n }\n return cls;\n}\n\nfunction normalizeClassName_DEV (className) {\n var DefaultName = 'CCClass';\n if (className) {\n className = className.replace(/^[^$A-Za-z_]/, '_').replace(/[^0-9A-Za-z_$]/g, '_');\n try {\n // validate name\n Function('function ' + className + '(){}')();\n return className;\n }\n catch (e) {\n ;\n }\n }\n return DefaultName;\n}\n\nfunction getNewValueTypeCodeJit (value) {\n var clsName = js.getClassName(value);\n var type = value.constructor;\n var res = 'new ' + clsName + '(';\n for (var i = 0; i < type.__props__.length; i++) {\n var prop = type.__props__[i];\n var propVal = value[prop];\n if (CC_DEV && typeof propVal === 'object') {\n cc.errorID(3641, clsName);\n return 'new ' + clsName + '()';\n }\n res += propVal;\n if (i < type.__props__.length - 1) {\n res += ',';\n }\n }\n return res + ')';\n}\n\n// TODO - move escapeForJS, IDENTIFIER_RE, getNewValueTypeCodeJit to misc.js or a new source file\n\n// convert a normal string including newlines, quotes and unicode characters into a string literal\n// ready to use in JavaScript source\nfunction escapeForJS (s) {\n return JSON.stringify(s).\n // see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify\n replace(/\\u2028/g, '\\\\u2028').\n replace(/\\u2029/g, '\\\\u2029');\n}\n\nfunction getInitPropsJit (attrs, propList) {\n // functions for generated code\n var F = [];\n var func = '';\n\n for (var i = 0; i < propList.length; i++) {\n var prop = propList[i];\n var attrKey = prop + DELIMETER + 'default';\n if (attrKey in attrs) { // getter does not have default\n var statement;\n if (IDENTIFIER_RE.test(prop)) {\n statement = 'this.' + prop + '=';\n }\n else {\n statement = 'this[' + escapeForJS(prop) + ']=';\n }\n var expression;\n var def = attrs[attrKey];\n if (typeof def === 'object' && def) {\n if (def instanceof cc.ValueType) {\n expression = getNewValueTypeCodeJit(def);\n }\n else if (Array.isArray(def)) {\n expression = '[]';\n }\n else {\n expression = '{}';\n }\n }\n else if (typeof def === 'function') {\n var index = F.length;\n F.push(def);\n expression = 'F[' + index + ']()';\n if (CC_EDITOR) {\n func += 'try {\\n' + statement + expression + ';\\n}\\ncatch(e) {\\ncc._throw(e);\\n' + statement + 'undefined;\\n}\\n';\n continue;\n }\n }\n else if (typeof def === 'string') {\n expression = escapeForJS(def);\n }\n else {\n // number, boolean, null, undefined\n expression = def;\n }\n statement = statement + expression + ';\\n';\n func += statement;\n }\n }\n\n // if (CC_TEST && !isPhantomJS) {\n // console.log(func);\n // }\n\n var initProps;\n if (F.length === 0) {\n initProps = Function(func);\n }\n else {\n initProps = Function('F', 'return (function(){\\n' + func + '})')(F);\n }\n\n return initProps;\n}\n\nfunction getInitProps (attrs, propList) {\n var props = null;\n var simpleEnd = 0;\n var valueTypeEnd = 0;\n\n (function () {\n\n // triage properties\n\n var simples = null;\n var valueTypes = null;\n var advanceds = null;\n\n for (let i = 0; i < propList.length; ++i) {\n var prop = propList[i];\n var attrKey = prop + DELIMETER + 'default';\n if (attrKey in attrs) { // getter does not have default\n var def = attrs[attrKey];\n if ((typeof def === 'object' && def) || typeof def === 'function') {\n if (def instanceof cc.ValueType) {\n if (!valueTypes) {\n valueTypes = [];\n }\n valueTypes.push(prop, def);\n }\n else {\n if (!advanceds) {\n advanceds = [];\n }\n advanceds.push(prop, def);\n }\n }\n else {\n // number, boolean, null, undefined, string\n if (!simples) {\n simples = [];\n }\n simples.push(prop, def);\n }\n }\n }\n\n // concat in compact memory\n\n simpleEnd = simples ? simples.length : 0;\n valueTypeEnd = simpleEnd + (valueTypes ? valueTypes.length : 0);\n let totalLength = valueTypeEnd + (advanceds ? advanceds.length : 0);\n props = new Array(totalLength);\n\n for (let i = 0; i < simpleEnd; ++i) {\n props[i] = simples[i];\n }\n for (let i = simpleEnd; i < valueTypeEnd; ++i) {\n props[i] = valueTypes[i - simpleEnd];\n }\n for (let i = valueTypeEnd; i < totalLength; ++i) {\n props[i] = advanceds[i - valueTypeEnd];\n }\n })();\n\n return function () {\n let i = 0;\n for (; i < simpleEnd; i += 2) {\n this[props[i]] = props[i + 1];\n }\n for (; i < valueTypeEnd; i += 2) {\n this[props[i]] = props[i + 1].clone();\n }\n for (; i < props.length; i += 2) {\n var def = props[i + 1];\n if (Array.isArray(def)) {\n this[props[i]] = [];\n }\n else {\n var value;\n if (typeof def === 'object') {\n value = {};\n }\n else {\n // def is function\n if (CC_EDITOR) {\n try {\n value = def();\n }\n catch (err) {\n cc._throw(e);\n continue;\n }\n }\n else {\n value = def();\n }\n }\n this[props[i]] = value;\n }\n }\n };\n}\n\n// simple test variable name\nvar IDENTIFIER_RE = /^[A-Za-z_$][0-9A-Za-z_$]*$/;\nfunction compileProps (actualClass) {\n // init deferred properties\n var attrs = Attr.getClassAttrs(actualClass);\n var propList = actualClass.__props__;\n if (propList === null) {\n deferredInitializer.init();\n propList = actualClass.__props__;\n }\n\n // Overwite __initProps__ to avoid compile again.\n var initProps = CC_SUPPORT_JIT ? getInitPropsJit(attrs, propList) : getInitProps(attrs, propList);\n actualClass.prototype.__initProps__ = initProps;\n\n // call instantiateProps immediately, no need to pass actualClass into it anymore\n // (use call to manually bind `this` because `this` may not instanceof actualClass)\n initProps.call(this);\n}\n\nvar _createCtor = CC_SUPPORT_JIT ? function (ctors, baseClass, className, options) {\n var superCallBounded = baseClass && boundSuperCalls(baseClass, options, className);\n\n var ctorName = CC_DEV ? normalizeClassName_DEV(className) : 'CCClass';\n var body = 'return function ' + ctorName + '(){\\n';\n\n if (superCallBounded) {\n body += 'this._super=null;\\n';\n }\n\n // instantiate props\n body += 'this.__initProps__(' + ctorName + ');\\n';\n\n // call user constructors\n var ctorLen = ctors.length;\n if (ctorLen > 0) {\n var useTryCatch = CC_DEV && ! (className && className.startsWith('cc.'));\n if (useTryCatch) {\n body += 'try{\\n';\n }\n var SNIPPET = '].apply(this,arguments);\\n';\n if (ctorLen === 1) {\n body += ctorName + '.__ctors__[0' + SNIPPET;\n }\n else {\n body += 'var cs=' + ctorName + '.__ctors__;\\n';\n for (var i = 0; i < ctorLen; i++) {\n body += 'cs[' + i + SNIPPET;\n }\n }\n if (useTryCatch) {\n body += '}catch(e){\\n' +\n 'cc._throw(e);\\n' +\n '}\\n';\n }\n }\n body += '}';\n\n return Function(body)();\n} : function (ctors, baseClass, className, options) {\n var superCallBounded = baseClass && boundSuperCalls(baseClass, options, className);\n var ctorLen = ctors.length;\n\n var Class;\n\n if (ctorLen > 0) {\n if (superCallBounded) {\n if (ctorLen === 2) {\n // User Component\n Class = function () {\n this._super = null;\n this.__initProps__(Class);\n ctors[0].apply(this, arguments);\n ctors[1].apply(this, arguments);\n };\n }\n else {\n Class = function () {\n this._super = null;\n this.__initProps__(Class);\n for (let i = 0; i < ctors.length; ++i) {\n ctors[i].apply(this, arguments);\n }\n };\n }\n }\n else {\n if (ctorLen === 3) {\n // Node\n Class = function () {\n this.__initProps__(Class);\n ctors[0].apply(this, arguments);\n ctors[1].apply(this, arguments);\n ctors[2].apply(this, arguments);\n };\n }\n else {\n Class = function () {\n this.__initProps__(Class);\n var ctors = Class.__ctors__;\n for (let i = 0; i < ctors.length; ++i) {\n ctors[i].apply(this, arguments);\n }\n };\n }\n }\n }\n else {\n Class = function () {\n if (superCallBounded) {\n this._super = null;\n }\n this.__initProps__(Class);\n };\n }\n return Class;\n};\n\nfunction _validateCtor_DEV (ctor, baseClass, className, options) {\n if (CC_EDITOR && baseClass) {\n // check super call in constructor\n var originCtor = ctor;\n if (SuperCallReg.test(ctor)) {\n if (options.__ES6__) {\n cc.errorID(3651, className);\n }\n else {\n cc.warnID(3600, className);\n // suppresss super call\n ctor = function () {\n this._super = function () {};\n var ret = originCtor.apply(this, arguments);\n this._super = null;\n return ret;\n };\n }\n }\n }\n\n // check ctor\n if (ctor.length > 0 && (!className || !className.startsWith('cc.'))) {\n // To make a unified CCClass serialization process,\n // we don't allow parameters for constructor when creating instances of CCClass.\n // For advanced user, construct arguments can still get from 'arguments'.\n cc.warnID(3617, className);\n }\n\n return ctor;\n}\n\nfunction _getAllCtors (baseClass, mixins, options) {\n // get base user constructors\n function getCtors (cls) {\n if (CCClass._isCCClass(cls)) {\n return cls.__ctors__ || [];\n }\n else {\n return [cls];\n }\n }\n\n var ctors = [];\n // if (options.__ES6__) {\n // if (mixins) {\n // let baseOrMixins = getCtors(baseClass);\n // for (let b = 0; b < mixins.length; b++) {\n // let mixin = mixins[b];\n // if (mixin) {\n // let baseCtors = getCtors(mixin);\n // for (let c = 0; c < baseCtors.length; c++) {\n // if (baseOrMixins.indexOf(baseCtors[c]) < 0) {\n // pushUnique(ctors, baseCtors[c]);\n // }\n // }\n // }\n // }\n // }\n // }\n // else {\n let baseOrMixins = [baseClass].concat(mixins);\n for (let b = 0; b < baseOrMixins.length; b++) {\n let baseOrMixin = baseOrMixins[b];\n if (baseOrMixin) {\n let baseCtors = getCtors(baseOrMixin);\n for (let c = 0; c < baseCtors.length; c++) {\n pushUnique(ctors, baseCtors[c]);\n }\n }\n }\n // }\n\n // append subclass user constructors\n var ctor = options.ctor;\n if (ctor) {\n ctors.push(ctor);\n }\n\n return ctors;\n}\n\nvar SuperCallReg = /xyz/.test(function(){xyz}) ? /\\b\\._super\\b/ : /.*/;\nvar SuperCallRegStrict = /xyz/.test(function(){xyz}) ? /this\\._super\\s*\\(/ : /(NONE){99}/;\nfunction boundSuperCalls (baseClass, options, className) {\n var hasSuperCall = false;\n for (var funcName in options) {\n if (BUILTIN_ENTRIES.indexOf(funcName) >= 0) {\n continue;\n }\n var func = options[funcName];\n if (typeof func !== 'function') {\n continue;\n }\n var pd = js.getPropertyDescriptor(baseClass.prototype, funcName);\n if (pd) {\n var superFunc = pd.value;\n // ignore pd.get, assume that function defined by getter is just for warnings\n if (typeof superFunc === 'function') {\n if (SuperCallReg.test(func)) {\n hasSuperCall = true;\n // boundSuperCall\n options[funcName] = (function (superFunc, func) {\n return function () {\n var tmp = this._super;\n\n // Add a new ._super() method that is the same method but on the super-Class\n this._super = superFunc;\n\n var ret = func.apply(this, arguments);\n\n // The method only need to be bound temporarily, so we remove it when we're done executing\n this._super = tmp;\n\n return ret;\n };\n })(superFunc, func);\n }\n continue;\n }\n }\n if (CC_DEV && SuperCallRegStrict.test(func)) {\n cc.warnID(3620, className, funcName);\n }\n }\n return hasSuperCall;\n}\n\nfunction declareProperties (cls, className, properties, baseClass, mixins, es6) {\n cls.__props__ = [];\n\n if (baseClass && baseClass.__props__) {\n cls.__props__ = baseClass.__props__.slice();\n }\n\n if (mixins) {\n for (var m = 0; m < mixins.length; ++m) {\n var mixin = mixins[m];\n if (mixin.__props__) {\n cls.__props__ = cls.__props__.concat(mixin.__props__.filter(function (x) {\n return cls.__props__.indexOf(x) < 0;\n }));\n }\n }\n }\n\n if (properties) {\n // 预处理属性\n preprocess.preprocessAttrs(properties, className, cls, es6);\n\n for (var propName in properties) {\n var val = properties[propName];\n if ('default' in val) {\n defineProp(cls, className, propName, val, es6);\n }\n else {\n defineGetSet(cls, className, propName, val, es6);\n }\n }\n }\n\n var attrs = Attr.getClassAttrs(cls);\n cls.__values__ = cls.__props__.filter(function (prop) {\n return attrs[prop + DELIMETER + 'serializable'] !== false;\n });\n}\n\n/**\n * @module cc\n */\n\n/**\n * !#en Defines a CCClass using the given specification, please see [Class](/docs/editors_and_tools/creator-chapters/scripting/class.html) for details.\n * !#zh 定义一个 CCClass,传入参数必须是一个包含类型参数的字面量对象,具体用法请查阅[类型定义](/docs/creator/scripting/class.html)。\n *\n * @method Class\n *\n * @param {Object} [options]\n * @param {String} [options.name] - The class name used for serialization.\n * @param {Function} [options.extends] - The base class.\n * @param {Function} [options.ctor] - The constructor.\n * @param {Function} [options.__ctor__] - The same as ctor, but less encapsulated.\n * @param {Object} [options.properties] - The property definitions.\n * @param {Object} [options.statics] - The static members.\n * @param {Function[]} [options.mixins]\n *\n * @param {Object} [options.editor] - attributes for Component listed below.\n * @param {Boolean} [options.editor.executeInEditMode=false] - Allows the current component to run in edit mode. By default, all components are executed only at runtime, meaning that they will not have their callback functions executed while the Editor is in edit mode.\n * @param {Function} [options.editor.requireComponent] - Automatically add required component as a dependency.\n * @param {String} [options.editor.menu] - The menu path to register a component to the editors \"Component\" menu. Eg. \"Rendering/Camera\".\n * @param {Number} [options.editor.executionOrder=0] - The execution order of lifecycle methods for Component. Those less than 0 will execute before while those greater than 0 will execute after. The order will only affect onLoad, onEnable, start, update and lateUpdate while onDisable and onDestroy will not be affected.\n * @param {Boolean} [options.editor.disallowMultiple] - If specified to a type, prevents Component of the same type (or subtype) to be added more than once to a Node.\n * @param {Boolean} [options.editor.playOnFocus=false] - This property is only available when executeInEditMode is set. If specified, the editor's scene view will keep updating this node in 60 fps when it is selected, otherwise, it will update only if necessary.\n * @param {String} [options.editor.inspector] - Customize the page url used by the current component to render in the Properties.\n * @param {String} [options.editor.icon] - Customize the icon that the current component displays in the editor.\n * @param {String} [options.editor.help] - The custom documentation URL\n *\n * @param {Function} [options.update] - lifecycle method for Component, see {{#crossLink \"Component/update:method\"}}{{/crossLink}}\n * @param {Function} [options.lateUpdate] - lifecycle method for Component, see {{#crossLink \"Component/lateUpdate:method\"}}{{/crossLink}}\n * @param {Function} [options.onLoad] - lifecycle method for Component, see {{#crossLink \"Component/onLoad:method\"}}{{/crossLink}}\n * @param {Function} [options.start] - lifecycle method for Component, see {{#crossLink \"Component/start:method\"}}{{/crossLink}}\n * @param {Function} [options.onEnable] - lifecycle method for Component, see {{#crossLink \"Component/onEnable:method\"}}{{/crossLink}}\n * @param {Function} [options.onDisable] - lifecycle method for Component, see {{#crossLink \"Component/onDisable:method\"}}{{/crossLink}}\n * @param {Function} [options.onDestroy] - lifecycle method for Component, see {{#crossLink \"Component/onDestroy:method\"}}{{/crossLink}}\n * @param {Function} [options.onFocusInEditor] - lifecycle method for Component, see {{#crossLink \"Component/onFocusInEditor:method\"}}{{/crossLink}}\n * @param {Function} [options.onLostFocusInEditor] - lifecycle method for Component, see {{#crossLink \"Component/onLostFocusInEditor:method\"}}{{/crossLink}}\n * @param {Function} [options.resetInEditor] - lifecycle method for Component, see {{#crossLink \"Component/resetInEditor:method\"}}{{/crossLink}}\n * @param {Function} [options.onRestore] - for Component only, see {{#crossLink \"Component/onRestore:method\"}}{{/crossLink}}\n * @param {Function} [options._getLocalBounds] - for Component only, see {{#crossLink \"Component/_getLocalBounds:method\"}}{{/crossLink}}\n *\n * @return {Function} - the created class\n *\n * @example\n\n // define base class\n var Node = cc.Class();\n\n // define sub class\n var Sprite = cc.Class({\n name: 'Sprite',\n extends: Node,\n\n ctor: function () {\n this.url = \"\";\n this.id = 0;\n },\n\n statics: {\n // define static members\n count: 0,\n getBounds: function (spriteList) {\n // compute bounds...\n }\n },\n\n properties {\n width: {\n default: 128,\n type: cc.Integer,\n tooltip: 'The width of sprite'\n },\n height: 128,\n size: {\n get: function () {\n return cc.v2(this.width, this.height);\n }\n }\n },\n\n load: function () {\n // load this.url...\n };\n });\n\n // instantiate\n\n var obj = new Sprite();\n obj.url = 'sprite.png';\n obj.load();\n */\nfunction CCClass (options) {\n options = options || {};\n\n var name = options.name;\n var base = options.extends/* || CCObject*/;\n var mixins = options.mixins;\n\n // create constructor\n var cls = define(name, base, mixins, options);\n if (!name) {\n name = cc.js.getClassName(cls);\n }\n\n cls._sealed = true;\n if (base) {\n base._sealed = false;\n }\n\n // define Properties\n var properties = options.properties;\n if (typeof properties === 'function' ||\n (base && base.__props__ === null) ||\n (mixins && mixins.some(function (x) {\n return x.__props__ === null;\n }))\n ) {\n if (CC_DEV && options.__ES6__) {\n cc.error('not yet implement deferred properties for ES6 Classes');\n }\n else {\n deferredInitializer.push({cls: cls, props: properties, mixins: mixins});\n cls.__props__ = cls.__values__ = null;\n }\n }\n else {\n declareProperties(cls, name, properties, base, options.mixins, options.__ES6__);\n }\n\n // define statics\n var statics = options.statics;\n if (statics) {\n var staticPropName;\n if (CC_DEV) {\n for (staticPropName in statics) {\n if (INVALID_STATICS_DEV.indexOf(staticPropName) !== -1) {\n cc.errorID(3642, name, staticPropName,\n staticPropName);\n }\n }\n }\n for (staticPropName in statics) {\n cls[staticPropName] = statics[staticPropName];\n }\n }\n\n // define functions\n for (var funcName in options) {\n if (BUILTIN_ENTRIES.indexOf(funcName) >= 0) {\n continue;\n }\n var func = options[funcName];\n if (!preprocess.validateMethodWithProps(func, funcName, name, cls, base)) {\n continue;\n }\n // use value to redefine some super method defined as getter\n js.value(cls.prototype, funcName, func, true, true);\n }\n\n\n var editor = options.editor;\n if (editor) {\n cc.Component._registerEditorProps(cls, editor);\n }\n\n return cls;\n}\n\n/**\n * Checks whether the constructor is created by cc.Class\n *\n * @method _isCCClass\n * @param {Function} constructor\n * @return {Boolean}\n * @private\n */\nCCClass._isCCClass = function (constructor) {\n return constructor &&\n constructor.hasOwnProperty('__ctors__'); // is not inherited __ctors__\n};\n\n//\n// Optimized define function only for internal classes\n//\n// @method _fastDefine\n// @param {String} className\n// @param {Function} constructor\n// @param {Object} serializableFields\n// @private\n//\nCCClass._fastDefine = function (className, constructor, serializableFields) {\n js.setClassName(className, constructor);\n //constructor.__ctors__ = constructor.__ctors__ || null;\n var props = constructor.__props__ = constructor.__values__ = Object.keys(serializableFields);\n var attrs = Attr.getClassAttrs(constructor);\n for (var i = 0; i < props.length; i++) {\n var key = props[i];\n attrs[key + DELIMETER + 'visible'] = false;\n attrs[key + DELIMETER + 'default'] = serializableFields[key];\n }\n};\n\nCCClass.Attr = Attr;\nCCClass.attr = Attr.attr;\n\n/*\n * Return all super classes\n * @method getInheritanceChain\n * @param {Function} constructor\n * @return {Function[]}\n */\nCCClass.getInheritanceChain = function (klass) {\n var chain = [];\n for (;;) {\n klass = js.getSuper(klass);\n if (!klass) {\n break;\n }\n if (klass !== Object) {\n chain.push(klass);\n }\n }\n return chain;\n};\n\nvar PrimitiveTypes = {\n // Specify that the input value must be integer in Properties.\n // Also used to indicates that the type of elements in array or the type of value in dictionary is integer.\n Integer: 'Number',\n // Indicates that the type of elements in array or the type of value in dictionary is double.\n Float: 'Number',\n Boolean: 'Boolean',\n String: 'String',\n};\nvar onAfterProps_ET = [];\nfunction parseAttributes (cls, attributes, className, propName, usedInGetter) {\n var ERR_Type = CC_DEV ? 'The %s of %s must be type %s' : '';\n\n var attrs = null;\n var propNamePrefix = '';\n function initAttrs () {\n propNamePrefix = propName + DELIMETER;\n return attrs = Attr.getClassAttrs(cls);\n }\n\n if ((CC_EDITOR && !Editor.isBuilder) || CC_TEST) {\n onAfterProps_ET.length = 0;\n }\n\n var type = attributes.type;\n if (type) {\n var primitiveType = PrimitiveTypes[type];\n if (primitiveType) {\n (attrs || initAttrs())[propNamePrefix + 'type'] = type;\n if (((CC_EDITOR && !Editor.isBuilder) || CC_TEST) && !attributes._short) {\n onAfterProps_ET.push(Attr.getTypeChecker_ET(primitiveType, 'cc.' + type));\n }\n }\n else if (type === 'Object') {\n if (CC_DEV) {\n cc.errorID(3644, className, propName);\n }\n }\n else {\n if (type === Attr.ScriptUuid) {\n (attrs || initAttrs())[propNamePrefix + 'type'] = 'Script';\n attrs[propNamePrefix + 'ctor'] = cc.ScriptAsset;\n }\n else {\n if (typeof type === 'object') {\n if (Enum.isEnum(type)) {\n (attrs || initAttrs())[propNamePrefix + 'type'] = 'Enum';\n attrs[propNamePrefix + 'enumList'] = Enum.getList(type);\n }\n else if (CC_DEV) {\n cc.errorID(3645, className, propName, type);\n }\n }\n else if (typeof type === 'function') {\n (attrs || initAttrs())[propNamePrefix + 'type'] = 'Object';\n attrs[propNamePrefix + 'ctor'] = type;\n if (((CC_EDITOR && !Editor.isBuilder) || CC_TEST) && !attributes._short) {\n onAfterProps_ET.push(Attr.getObjTypeChecker_ET(type));\n }\n }\n else if (CC_DEV) {\n cc.errorID(3646, className, propName, type);\n }\n }\n }\n }\n\n function parseSimpleAttr (attrName, expectType) {\n if (attrName in attributes) {\n var val = attributes[attrName];\n if (typeof val === expectType) {\n (attrs || initAttrs())[propNamePrefix + attrName] = val;\n }\n else if (CC_DEV) {\n cc.error(ERR_Type, attrName, className, propName, expectType);\n }\n }\n }\n\n if (attributes.editorOnly) {\n if (CC_DEV && usedInGetter) {\n cc.errorID(3613, \"editorOnly\", name, propName);\n }\n else {\n (attrs || initAttrs())[propNamePrefix + 'editorOnly'] = true;\n }\n }\n //parseSimpleAttr('preventDeferredLoad', 'boolean');\n if (CC_DEV) {\n parseSimpleAttr('displayName', 'string');\n parseSimpleAttr('multiline', 'boolean');\n if (attributes.readonly) {\n (attrs || initAttrs())[propNamePrefix + 'readonly'] = true;\n }\n parseSimpleAttr('tooltip', 'string');\n parseSimpleAttr('slide', 'boolean');\n }\n\n if (attributes.serializable === false) {\n if (CC_DEV && usedInGetter) {\n cc.errorID(3613, \"serializable\", name, propName);\n }\n else {\n (attrs || initAttrs())[propNamePrefix + 'serializable'] = false;\n }\n }\n \n // if (CC_BUILD || CC_TEST) {\n // let fsa = attributes.formerlySerializedAs;\n // if (fsa) {\n // // js.set(cls.prototype, fsa, function (val) {\n // // this[propName] = val;\n // // });\n // (attrs || initAttrs())[propNamePrefix + 'formerlySerializedAs'] = fsa;\n // // used by deserialize-compiled\n // attrs[fsa + DELIMETER + 'deserializeAs'] = propName;\n // cls.__FSA__ = true; // inheritable\n // }\n // }\n // else {\n // parseSimpleAttr('formerlySerializedAs', 'string');\n // }\n\n parseSimpleAttr('formerlySerializedAs', 'string');\n\n if (CC_EDITOR) {\n parseSimpleAttr('notifyFor', 'string');\n\n if ('animatable' in attributes) {\n (attrs || initAttrs())[propNamePrefix + 'animatable'] = !!attributes.animatable;\n }\n }\n\n if (CC_DEV) {\n var visible = attributes.visible;\n if (typeof visible !== 'undefined') {\n if (!visible) {\n (attrs || initAttrs())[propNamePrefix + 'visible'] = false;\n }\n else if (typeof visible === 'function') {\n (attrs || initAttrs())[propNamePrefix + 'visible'] = visible;\n }\n }\n else {\n var startsWithUS = (propName.charCodeAt(0) === 95);\n if (startsWithUS) {\n (attrs || initAttrs())[propNamePrefix + 'visible'] = false;\n }\n }\n }\n\n var range = attributes.range;\n if (range) {\n if (Array.isArray(range)) {\n if (range.length >= 2) {\n (attrs || initAttrs())[propNamePrefix + 'min'] = range[0];\n attrs[propNamePrefix + 'max'] = range[1];\n if (range.length > 2) {\n attrs[propNamePrefix + 'step'] = range[2];\n }\n }\n else if (CC_DEV) {\n cc.errorID(3647);\n }\n }\n else if (CC_DEV) {\n cc.error(ERR_Type, 'range', className, propName, 'array');\n }\n }\n parseSimpleAttr('min', 'number');\n parseSimpleAttr('max', 'number');\n parseSimpleAttr('step', 'number');\n parseSimpleAttr('userData', 'object');\n}\n\ncc.Class = CCClass;\n\nmodule.exports = {\n isArray: function (defaultVal) {\n defaultVal = getDefault(defaultVal);\n return Array.isArray(defaultVal);\n },\n fastDefine: CCClass._fastDefine,\n getNewValueTypeCode: CC_SUPPORT_JIT && getNewValueTypeCodeJit,\n IDENTIFIER_RE,\n escapeForJS,\n getDefault,\n};\n\nif (CC_TEST) {\n js.mixin(CCClass, module.exports);\n}\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n// const FIX_BABEL6 = true;\n\n/**\n * !#en Some JavaScript decorators which can be accessed with \"cc._decorator\".\n * !#zh 一些 JavaScript 装饰器,目前可以通过 \"cc._decorator\" 来访问。\n * (这些 API 仍不完全稳定,有可能随着 JavaScript 装饰器的标准实现而调整)\n *\n * @submodule _decorator\n * @module _decorator\n * @main\n */\n\n// inspired by toddlxt (https://github.com/toddlxt/Creator-TypeScript-Boilerplate)\n\nrequire('./CCClass');\nconst Preprocess = require('./preprocess-class');\nconst js = require('./js');\nconst isPlainEmptyObj_DEV = CC_DEV && require('./utils').isPlainEmptyObj_DEV;\n\n// caches for class construction\nconst CACHE_KEY = '__ccclassCache__';\n\nfunction fNOP (ctor) {\n return ctor;\n}\n\nfunction getSubDict (obj, key) {\n return obj[key] || (obj[key] = {});\n}\n\nfunction checkCtorArgument (decorate) {\n return function (target) {\n if (typeof target === 'function') {\n // no parameter, target is ctor\n return decorate(target);\n }\n return function (ctor) {\n return decorate(ctor, target);\n };\n };\n}\n\nfunction _checkNormalArgument (validator_DEV, decorate, decoratorName) {\n return function (target) {\n if (CC_DEV && validator_DEV(target, decoratorName) === false) {\n return function () {\n return fNOP;\n };\n }\n return function (ctor) {\n return decorate(ctor, target);\n };\n };\n}\n\nvar checkCompArgument = _checkNormalArgument.bind(null, CC_DEV && function (arg, decoratorName) {\n if (!cc.Class._isCCClass(arg)) {\n cc.error('The parameter for %s is missing.', decoratorName);\n return false;\n }\n});\n\nfunction _argumentChecker (type) {\n return _checkNormalArgument.bind(null, CC_DEV && function (arg, decoratorName) {\n if (arg instanceof cc.Component || arg === undefined) {\n cc.error('The parameter for %s is missing.', decoratorName);\n return false;\n }\n else if (typeof arg !== type) {\n cc.error('The parameter for %s must be type %s.', decoratorName, type);\n return false;\n }\n });\n}\nvar checkStringArgument = _argumentChecker('string');\nvar checkNumberArgument = _argumentChecker('number');\n// var checkBooleanArgument = _argumentChecker('boolean');\n\n\nfunction getClassCache (ctor, decoratorName) {\n if (CC_DEV && cc.Class._isCCClass(ctor)) {\n cc.error('`@%s` should be used after @ccclass for class \"%s\"', decoratorName, js.getClassName(ctor));\n return null;\n }\n return getSubDict(ctor, CACHE_KEY);\n}\n\nfunction getDefaultFromInitializer (initializer) {\n var value;\n try {\n value = initializer();\n }\n catch (e) {\n // just lazy initialize by CCClass\n return initializer;\n }\n if (typeof value !== 'object' || value === null) {\n // string boolean number function undefined null\n return value;\n }\n else {\n // The default attribute will not be used in ES6 constructor actually,\n // so we dont need to simplify into `{}` or `[]` or vec2 completely.\n return initializer;\n }\n}\n\n\nfunction extractActualDefaultValues (ctor) {\n var dummyObj;\n try {\n dummyObj = new ctor();\n }\n catch (e) {\n if (CC_DEV) {\n cc.errorID(3652, js.getClassName(ctor), e);\n }\n return {};\n }\n return dummyObj;\n}\n\nfunction genProperty (ctor, properties, propName, options, desc, cache) {\n var fullOptions;\n var isGetset = desc && (desc.get || desc.set);\n if (options) {\n fullOptions = Preprocess.getFullFormOfProperty(options, isGetset);\n }\n var existsProperty = properties[propName];\n var prop = js.mixin(existsProperty || {}, fullOptions || options || {});\n\n if (isGetset) {\n // typescript or babel\n if (CC_DEV && options && ((fullOptions || options).get || (fullOptions || options).set)) {\n var errorProps = getSubDict(cache, 'errorProps');\n if (!errorProps[propName]) {\n errorProps[propName] = true;\n cc.warnID(3655, propName, js.getClassName(ctor), propName, propName);\n }\n }\n if (desc.get) {\n prop.get = desc.get;\n }\n if (desc.set) {\n prop.set = desc.set;\n }\n }\n else {\n if (CC_DEV && (prop.get || prop.set)) {\n // @property({\n // get () { ... },\n // set (...) { ... },\n // })\n // value;\n cc.errorID(3655, propName, js.getClassName(ctor), propName, propName);\n return;\n }\n // member variables\n var defaultValue = undefined;\n var isDefaultValueSpecified = false;\n if (desc) {\n // babel\n if (desc.initializer) {\n // @property(...)\n // value = null;\n defaultValue = getDefaultFromInitializer(desc.initializer);\n isDefaultValueSpecified = true;\n }\n else {\n // @property(...)\n // value;\n }\n }\n else {\n // typescript\n var actualDefaultValues = cache.default || (cache.default = extractActualDefaultValues(ctor));\n if (actualDefaultValues.hasOwnProperty(propName)) {\n // @property(...)\n // value = null;\n defaultValue = actualDefaultValues[propName];\n isDefaultValueSpecified = true;\n }\n else {\n // @property(...)\n // value;\n }\n }\n\n if ((CC_EDITOR && !Editor.isBuilder) || CC_TEST) {\n if (!fullOptions && options && options.hasOwnProperty('default')) {\n cc.warnID(3653, propName, js.getClassName(ctor));\n // prop.default = options.default;\n }\n else if (!isDefaultValueSpecified) {\n cc.warnID(3654, js.getClassName(ctor), propName);\n // prop.default = fullOptions.hasOwnProperty('default') ? fullOptions.default : undefined;\n }\n }\n prop.default = defaultValue;\n }\n\n properties[propName] = prop;\n}\n\n/**\n * !#en\n * Declare the standard [ES6 Class](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes)\n * as CCClass, please see [Class](../../../manual/en/scripting/class.html) for details.\n * !#zh\n * 将标准写法的 [ES6 Class](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes) 声明为 CCClass,具体用法请参阅[类型定义](../../../manual/zh/scripting/class.html)。\n *\n * @method ccclass\n * @param {String} [name] - The class name used for serialization.\n * @example\n * const {ccclass} = cc._decorator;\n *\n * // define a CCClass, omit the name\n * @ccclass\n * class NewScript extends cc.Component {\n * // ...\n * }\n *\n * // define a CCClass with a name\n * @ccclass('LoginData')\n * class LoginData {\n * // ...\n * }\n * @typescript\n * ccclass(name?: string): Function\n * ccclass(_class?: Function): void\n */\nvar ccclass = checkCtorArgument(function (ctor, name) {\n // if (FIX_BABEL6) {\n // eval('if(typeof _classCallCheck===\"function\"){_classCallCheck=function(){};}');\n // }\n var base = js.getSuper(ctor);\n if (base === Object) {\n base = null;\n }\n\n var proto = {\n name,\n extends: base,\n ctor,\n __ES6__: true,\n };\n var cache = ctor[CACHE_KEY];\n if (cache) {\n var decoratedProto = cache.proto;\n if (decoratedProto) {\n // decoratedProto.properties = createProperties(ctor, decoratedProto.properties);\n js.mixin(proto, decoratedProto);\n }\n ctor[CACHE_KEY] = undefined;\n }\n\n var res = cc.Class(proto);\n\n // validate methods\n if (CC_DEV) {\n var propNames = Object.getOwnPropertyNames(ctor.prototype);\n for (var i = 0; i < propNames.length; ++i) {\n var prop = propNames[i];\n if (prop !== 'constructor') {\n var desc = Object.getOwnPropertyDescriptor(ctor.prototype, prop);\n var func = desc && desc.value;\n if (typeof func === 'function') {\n Preprocess.doValidateMethodWithProps_DEV(func, prop, js.getClassName(ctor), ctor, base);\n }\n }\n }\n }\n\n return res;\n});\n\n/**\n * !#en\n * Declare property for [CCClass](../../../manual/en/scripting/reference/attributes.html).\n * !#zh\n * 定义 [CCClass](../../../manual/zh/scripting/reference/attributes.html) 所用的属性。\n *\n * @method property\n * @param {Object} [options] - an object with some property attributes\n * @param {Any} [options.type]\n * @param {Boolean|Function} [options.visible]\n * @param {String} [options.displayName]\n * @param {String} [options.tooltip]\n * @param {Boolean} [options.multiline]\n * @param {Boolean} [options.readonly]\n * @param {Number} [options.min]\n * @param {Number} [options.max]\n * @param {Number} [options.step]\n * @param {Number[]} [options.range]\n * @param {Boolean} [options.slide]\n * @param {Boolean} [options.serializable]\n * @param {Boolean} [options.editorOnly]\n * @param {Boolean} [options.override]\n * @param {Boolean} [options.animatable]\n * @param {String} [options.formerlySerializedAs]\n * @example\n * const {ccclass, property} = cc._decorator;\n *\n * @ccclass\n * class NewScript extends cc.Component {\n * @property({\n * type: cc.Node\n * })\n * targetNode1 = null;\n *\n * @property(cc.Node)\n * targetNode2 = null;\n *\n * @property(cc.Button)\n * targetButton = null;\n *\n * @property\n * _width = 100;\n *\n * @property\n * get width () {\n * return this._width;\n * }\n *\n * @property\n * set width (value) {\n * this._width = value;\n * }\n *\n * @property\n * offset = new cc.Vec2(100, 100);\n *\n * @property(cc.Vec2)\n * offsets = [];\n *\n * @property(cc.SpriteFrame)\n * frame = null;\n * }\n *\n * // above is equivalent to (上面的代码相当于):\n *\n * var NewScript = cc.Class({\n * properties: {\n * targetNode1: {\n * default: null,\n * type: cc.Node\n * },\n *\n * targetNode2: {\n * default: null,\n * type: cc.Node\n * },\n *\n * targetButton: {\n * default: null,\n * type: cc.Button\n * },\n *\n * _width: 100,\n *\n * width: {\n * get () {\n * return this._width;\n * },\n * set (value) {\n * this._width = value;\n * }\n * },\n *\n * offset: new cc.Vec2(100, 100)\n *\n * offsets: {\n * default: [],\n * type: cc.Vec2\n * }\n *\n * frame: {\n * default: null,\n * type: cc.SpriteFrame\n * },\n * }\n * });\n * @typescript\n * property(options?: {type?: any; visible?: boolean|(() => boolean); displayName?: string; tooltip?: string; multiline?: boolean; readonly?: boolean; min?: number; max?: number; step?: number; range?: number[]; slide?: boolean; serializable?: boolean; formerlySerializedAs?: string; editorOnly?: boolean; override?: boolean; animatable?: boolean, userData?: Record } | any[]|Function|cc.ValueType|number|string|boolean): Function\n * property(_target: Object, _key: any, _desc?: any): void\n */\nfunction property (ctorProtoOrOptions, propName, desc) {\n var options = null;\n function normalized (ctorProto, propName, desc) {\n var cache = getClassCache(ctorProto.constructor);\n if (cache) {\n var ccclassProto = getSubDict(cache, 'proto');\n var properties = getSubDict(ccclassProto, 'properties');\n genProperty(ctorProto.constructor, properties, propName, options, desc, cache);\n }\n }\n if (typeof propName === 'undefined') {\n options = ctorProtoOrOptions;\n return normalized;\n }\n else {\n normalized(ctorProtoOrOptions, propName, desc);\n }\n}\n\n// Editor Decorators\n\nfunction createEditorDecorator (argCheckFunc, editorPropName, staticValue) {\n return argCheckFunc(function (ctor, decoratedValue) {\n var cache = getClassCache(ctor, editorPropName);\n if (cache) {\n var value = (staticValue !== undefined) ? staticValue : decoratedValue;\n var proto = getSubDict(cache, 'proto');\n getSubDict(proto, 'editor')[editorPropName] = value;\n }\n }, editorPropName);\n}\n\nfunction createDummyDecorator (argCheckFunc) {\n return argCheckFunc(fNOP);\n}\n\n/**\n * !#en\n * Makes a CCClass that inherit from component execute in edit mode.
\n * By default, all components are only executed in play mode,\n * which means they will not have their callback functions executed while the Editor is in edit mode.\n * !#zh\n * 允许继承自 Component 的 CCClass 在编辑器里执行。
\n * 默认情况下,所有 Component 都只会在运行时才会执行,也就是说它们的生命周期回调不会在编辑器里触发。\n *\n * @method executeInEditMode\n * @example\n * const {ccclass, executeInEditMode} = cc._decorator;\n *\n * @ccclass\n * @executeInEditMode\n * class NewScript extends cc.Component {\n * // ...\n * }\n * @typescript\n * executeInEditMode(): Function\n * executeInEditMode(_class: Function): void\n */\nvar executeInEditMode = (CC_DEV ? createEditorDecorator : createDummyDecorator)(checkCtorArgument, 'executeInEditMode', true);\n\n/**\n * !#en\n * Automatically add required component as a dependency for the CCClass that inherit from component.\n * !#zh\n * 为声明为 CCClass 的组件添加依赖的其它组件。当组件添加到节点上时,如果依赖的组件不存在,引擎将会自动将依赖组件添加到同一个节点,防止脚本出错。该设置在运行时同样有效。\n *\n * @method requireComponent\n * @param {Component} requiredComponent\n * @example\n * const {ccclass, requireComponent} = cc._decorator;\n *\n * @ccclass\n * @requireComponent(cc.Sprite)\n * class SpriteCtrl extends cc.Component {\n * // ...\n * }\n * @typescript\n * requireComponent(requiredComponent: typeof cc.Component): Function\n */\nvar requireComponent = createEditorDecorator(checkCompArgument, 'requireComponent');\n\n/**\n * !#en\n * The menu path to register a component to the editors \"Component\" menu. Eg. \"Rendering/CameraCtrl\".\n * !#zh\n * 将当前组件添加到组件菜单中,方便用户查找。例如 \"Rendering/CameraCtrl\"。\n *\n * @method menu\n * @param {String} path - The path is the menu represented like a pathname.\n * For example the menu could be \"Rendering/CameraCtrl\".\n * @example\n * const {ccclass, menu} = cc._decorator;\n *\n * @ccclass\n * @menu(\"Rendering/CameraCtrl\")\n * class NewScript extends cc.Component {\n * // ...\n * }\n * @typescript\n * menu(path: string): Function\n */\nvar menu = (CC_DEV ? createEditorDecorator : createDummyDecorator)(checkStringArgument, 'menu');\n\n/**\n * !#en\n * The execution order of lifecycle methods for Component.\n * Those less than 0 will execute before while those greater than 0 will execute after.\n * The order will only affect onLoad, onEnable, start, update and lateUpdate while onDisable and onDestroy will not be affected.\n * !#zh\n * 设置脚本生命周期方法调用的优先级。优先级小于 0 的组件将会优先执行,优先级大于 0 的组件将会延后执行。优先级仅会影响 onLoad, onEnable, start, update 和 lateUpdate,而 onDisable 和 onDestroy 不受影响。\n *\n * @method executionOrder\n * @param {Number} order - The execution order of lifecycle methods for Component. Those less than 0 will execute before while those greater than 0 will execute after.\n * @example\n * const {ccclass, executionOrder} = cc._decorator;\n *\n * @ccclass\n * @executionOrder(1)\n * class CameraCtrl extends cc.Component {\n * // ...\n * }\n * @typescript\n * executionOrder(order: number): Function\n */\nvar executionOrder = createEditorDecorator(checkNumberArgument, 'executionOrder');\n\n/**\n * !#en\n * Prevents Component of the same type (or subtype) to be added more than once to a Node.\n * !#zh\n * 防止多个相同类型(或子类型)的组件被添加到同一个节点。\n *\n * @method disallowMultiple\n * @example\n * const {ccclass, disallowMultiple} = cc._decorator;\n *\n * @ccclass\n * @disallowMultiple\n * class CameraCtrl extends cc.Component {\n * // ...\n * }\n * @typescript\n * disallowMultiple(): Function\n * disallowMultiple(_class: Function): void\n */\nvar disallowMultiple = (CC_DEV ? createEditorDecorator : createDummyDecorator)(checkCtorArgument, 'disallowMultiple');\n\n/**\n * !#en\n * If specified, the editor's scene view will keep updating this node in 60 fps when it is selected, otherwise, it will update only if necessary.
\n * This property is only available if executeInEditMode is true.\n * !#zh\n * 当指定了 \"executeInEditMode\" 以后,playOnFocus 可以在选中当前组件所在的节点时,提高编辑器的场景刷新频率到 60 FPS,否则场景就只会在必要的时候进行重绘。\n *\n * @method playOnFocus\n * @example\n * const {ccclass, playOnFocus, executeInEditMode} = cc._decorator;\n *\n * @ccclass\n * @executeInEditMode\n * @playOnFocus\n * class CameraCtrl extends cc.Component {\n * // ...\n * }\n * @typescript\n * playOnFocus(): Function\n * playOnFocus(_class: Function): void\n */\nvar playOnFocus = (CC_DEV ? createEditorDecorator : createDummyDecorator)(checkCtorArgument, 'playOnFocus', true);\n\n/**\n * !#en\n * Specifying the url of the custom html to draw the component in **Properties**.\n * !#zh\n * 自定义当前组件在 **属性检查器** 中渲染时所用的网页 url。\n *\n * @method inspector\n * @param {String} url\n * @example\n * const {ccclass, inspector} = cc._decorator;\n *\n * @ccclass\n * @inspector(\"packages://inspector/inspectors/comps/camera-ctrl.js\")\n * class NewScript extends cc.Component {\n * // ...\n * }\n * @typescript\n * inspector(path: string): Function\n */\nvar inspector = (CC_DEV ? createEditorDecorator : createDummyDecorator)(checkStringArgument, 'inspector');\n\n/**\n * !#en\n * Specifying the url of the icon to display in the editor.\n * !#zh\n * 自定义当前组件在编辑器中显示的图标 url。\n *\n * @method icon\n * @param {String} url\n * @private\n * @example\n * const {ccclass, icon} = cc._decorator;\n *\n * @ccclass\n * @icon(\"xxxx.png\")\n * class NewScript extends cc.Component {\n * // ...\n * }\n * @typescript\n * icon(path: string): Function\n */\nvar icon = (CC_DEV ? createEditorDecorator : createDummyDecorator)(checkStringArgument, 'icon');\n\n/**\n * !#en\n * The custom documentation URL.\n * !#zh\n * 指定当前组件的帮助文档的 url,设置过后,在 **属性检查器** 中就会出现一个帮助图标,用户点击将打开指定的网页。\n *\n * @method help\n * @param {String} url\n * @example\n * const {ccclass, help} = cc._decorator;\n *\n * @ccclass\n * @help(\"app://docs/html/components/spine.html\")\n * class NewScript extends cc.Component {\n * // ...\n * }\n * @typescript\n * help(path: string): Function\n */\nvar help = (CC_DEV ? createEditorDecorator : createDummyDecorator)(checkStringArgument, 'help');\n\n// Other Decorators\n\n/**\n * NOTE:
\n * The old mixins implemented in cc.Class(ES5) behaves exact the same as multiple inheritance.\n * But since ES6, class constructor can't be function-called and class methods become non-enumerable,\n * so we can not mix in ES6 Classes.
\n * See:
\n * [https://esdiscuss.org/topic/traits-are-now-impossible-in-es6-until-es7-since-rev32](https://esdiscuss.org/topic/traits-are-now-impossible-in-es6-until-es7-since-rev32)
\n * One possible solution (but IDE unfriendly):
\n * [http://justinfagnani.com/2015/12/21/real-mixins-with-javascript-classes](http://justinfagnani.com/2015/12/21/real-mixins-with-javascript-classes/)
\n *
\n * NOTE:
\n * You must manually call mixins constructor, this is different from cc.Class(ES5).\n *\n * @method mixins\n * @param {Function} ...ctor - constructors to mix, only support ES5 constructors or classes defined by using `cc.Class`,\n * not support ES6 Classes.\n * @example\n * const {ccclass, mixins} = cc._decorator;\n *\n * class Animal { ... }\n *\n * const Fly = cc.Class({\n * constructor () { ... }\n * });\n *\n * @ccclass\n * @mixins(cc.EventTarget, Fly)\n * class Bird extends Animal {\n * constructor () {\n * super();\n *\n * // You must manually call mixins constructor, this is different from cc.Class(ES5)\n * cc.EventTarget.call(this);\n * Fly.call(this);\n * }\n * // ...\n * }\n * @typescript\n * mixins(ctor: Function, ...rest: Function[]): Function\n */\nfunction mixins () {\n var mixins = [];\n for (var i = 0; i < arguments.length; i++) {\n mixins[i] = arguments[i];\n }\n return function (ctor) {\n var cache = getClassCache(ctor, 'mixins');\n if (cache) {\n getSubDict(cache, 'proto').mixins = mixins;\n }\n }\n}\n\ncc._decorator = module.exports = {\n ccclass,\n property,\n executeInEditMode,\n requireComponent,\n menu,\n executionOrder,\n disallowMultiple,\n playOnFocus,\n inspector,\n icon,\n help,\n mixins,\n};\n\n// fix submodule pollute ...\n/**\n * @submodule cc\n */\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar js = require('./js');\n\n// enum\n\n/**\n * !#en\n * Define an enum type.
\n * If a enum item has a value of -1, it will be given an Integer number according to it's order in the list.
\n * Otherwise it will use the value specified by user who writes the enum definition.\n *\n * !#zh\n * 定义一个枚举类型。
\n * 用户可以把枚举值设为任意的整数,如果设为 -1,系统将会分配为上一个枚举值 + 1。\n *\n * @method Enum\n * @param {object} obj - a JavaScript literal object containing enum names and values, or a TypeScript enum type\n * @return {object} the defined enum type\n * @example {@link cocos2d/core/platform/CCEnum/Enum.js}\n * @typescript Enum(obj: T): T\n */\nfunction Enum (obj) {\n if ('__enums__' in obj) {\n return obj;\n }\n js.value(obj, '__enums__', null, true);\n\n var lastIndex = -1;\n var keys = Object.keys(obj);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var val = obj[key];\n\n if (val === -1) {\n val = ++lastIndex;\n obj[key] = val;\n }\n else {\n if (typeof val === 'number') {\n lastIndex = val;\n }\n else if (typeof val === 'string' && Number.isInteger(parseFloat(key))) {\n continue;\n }\n }\n var reverseKey = '' + val;\n if (key !== reverseKey) {\n if ((CC_EDITOR || CC_TEST) && reverseKey in obj && obj[reverseKey] !== key) {\n cc.errorID(7100, reverseKey);\n continue;\n }\n js.value(obj, reverseKey, key);\n }\n }\n return obj;\n}\n\nEnum.isEnum = function (enumType) {\n return enumType && enumType.hasOwnProperty('__enums__');\n};\n\n/**\n * @method getList\n * @param {Object} enumDef - the enum type defined from cc.Enum\n * @return {Object[]}\n * @private\n */\nEnum.getList = function (enumDef) {\n if (enumDef.__enums__)\n return enumDef.__enums__;\n\n var enums = enumDef.__enums__ = [];\n for (var name in enumDef) {\n var value = enumDef[name];\n if (Number.isInteger(value)) {\n enums.push({ name, value });\n }\n }\n enums.sort( function ( a, b ) { return a.value - b.value; } );\n return enums;\n};\n\nif (CC_DEV) {\n // check key order in object literal\n var _TestEnum = Enum({\n ZERO: -1,\n ONE: -1,\n TWO: -1,\n THREE: -1\n });\n if (_TestEnum.ZERO !== 0 || _TestEnum.ONE !== 1 || _TestEnum.THREE !== 3) {\n cc.errorID(7101);\n }\n}\n\nmodule.exports = cc.Enum = Enum;\n","/****************************************************************************\n Copyright (c) 2011-2012 cocos2d-x.org\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos2d-x.org\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst eventManager = require('../event-manager');\nconst inputManager = require(\"./CCInputManager\");\n\nconst PORTRAIT = 0;\nconst LANDSCAPE_LEFT = -90;\nconst PORTRAIT_UPSIDE_DOWN = 180;\nconst LANDSCAPE_RIGHT = 90;\n\nlet _didAccelerateFun;\n\n/**\n * !#en the device accelerometer reports values for each axis in units of g-force.\n * !#zh 设备重力传感器传递的各个轴的数据。\n * @class Acceleration\n * @method constructor\n * @param {Number} x\n * @param {Number} y\n * @param {Number} z\n * @param {Number} timestamp\n */\ncc.Acceleration = function (x, y, z, timestamp) {\n this.x = x || 0;\n this.y = y || 0;\n this.z = z || 0;\n this.timestamp = timestamp || 0;\n};\n\n/**\n * whether enable accelerometer event\n * @method setAccelerometerEnabled\n * @param {Boolean} isEnable\n */\ninputManager.setAccelerometerEnabled = function (isEnable) {\n let _t = this;\n if(_t._accelEnabled === isEnable)\n return;\n\n _t._accelEnabled = isEnable;\n let scheduler = cc.director.getScheduler();\n scheduler.enableForTarget(_t);\n if (_t._accelEnabled) {\n _t._registerAccelerometerEvent();\n _t._accelCurTime = 0;\n scheduler.scheduleUpdate(_t);\n } else {\n _t._unregisterAccelerometerEvent();\n _t._accelCurTime = 0;\n scheduler.unscheduleUpdate(_t);\n }\n\n if (CC_JSB || CC_RUNTIME) {\n jsb.device.setMotionEnabled(isEnable);\n }\n};\n\n/**\n * set accelerometer interval value\n * @method setAccelerometerInterval\n * @param {Number} interval\n */\ninputManager.setAccelerometerInterval = function (interval) {\n if (this._accelInterval !== interval) {\n this._accelInterval = interval;\n\n if (CC_JSB || CC_RUNTIME) {\n jsb.device.setMotionInterval(interval);\n }\n }\n};\n\ninputManager._registerKeyboardEvent = function () {\n cc.game.canvas.addEventListener(\"keydown\", function (e) {\n eventManager.dispatchEvent(new cc.Event.EventKeyboard(e.keyCode, true));\n e.stopPropagation();\n e.preventDefault();\n }, false);\n cc.game.canvas.addEventListener(\"keyup\", function (e) {\n eventManager.dispatchEvent(new cc.Event.EventKeyboard(e.keyCode, false));\n e.stopPropagation();\n e.preventDefault();\n }, false);\n};\n\ninputManager._registerAccelerometerEvent = function () {\n let w = window, _t = this;\n _t._acceleration = new cc.Acceleration();\n _t._accelDeviceEvent = w.DeviceMotionEvent || w.DeviceOrientationEvent;\n\n //TODO fix DeviceMotionEvent bug on QQ Browser version 4.1 and below.\n if (cc.sys.browserType === cc.sys.BROWSER_TYPE_MOBILE_QQ)\n _t._accelDeviceEvent = window.DeviceOrientationEvent;\n\n let _deviceEventType = (_t._accelDeviceEvent === w.DeviceMotionEvent) ? \"devicemotion\" : \"deviceorientation\";\n let ua = navigator.userAgent;\n if (/Android/.test(ua) || (/Adr/.test(ua) && cc.sys.browserType === cc.BROWSER_TYPE_UC)) {\n _t._minus = -1;\n }\n\n _didAccelerateFun = _t.didAccelerate.bind(_t);\n w.addEventListener(_deviceEventType, _didAccelerateFun, false);\n};\n\ninputManager._unregisterAccelerometerEvent = function () {\n let w = window, _t = this;\n let _deviceEventType = (_t._accelDeviceEvent === w.DeviceMotionEvent) ? \"devicemotion\" : \"deviceorientation\";\n if (_didAccelerateFun) {\n w.removeEventListener(_deviceEventType, _didAccelerateFun, false);\n }\n};\n\ninputManager.didAccelerate = function (eventData) {\n let _t = this, w = window;\n if (!_t._accelEnabled)\n return;\n\n let mAcceleration = _t._acceleration;\n\n let x, y, z;\n\n if (_t._accelDeviceEvent === window.DeviceMotionEvent) {\n let eventAcceleration = eventData[\"accelerationIncludingGravity\"];\n x = _t._accelMinus * eventAcceleration.x * 0.1;\n y = _t._accelMinus * eventAcceleration.y * 0.1;\n z = eventAcceleration.z * 0.1;\n } else {\n x = (eventData[\"gamma\"] / 90) * 0.981;\n y = -(eventData[\"beta\"] / 90) * 0.981;\n z = (eventData[\"alpha\"] / 90) * 0.981;\n }\n\n if (cc.view._isRotated) {\n let tmp = x;\n x = -y;\n y = tmp;\n }\n mAcceleration.x = x;\n mAcceleration.y = y;\n mAcceleration.z = z;\n\n mAcceleration.timestamp = eventData.timeStamp || Date.now();\n\n let tmpX = mAcceleration.x;\n if (w.orientation === LANDSCAPE_RIGHT) {\n mAcceleration.x = -mAcceleration.y;\n mAcceleration.y = tmpX;\n } else if (w.orientation === LANDSCAPE_LEFT) {\n mAcceleration.x = mAcceleration.y;\n mAcceleration.y = -tmpX;\n } else if (w.orientation === PORTRAIT_UPSIDE_DOWN) {\n mAcceleration.x = -mAcceleration.x;\n mAcceleration.y = -mAcceleration.y;\n }\n // fix android acc values are opposite\n if (cc.sys.os === cc.sys.OS_ANDROID &&\n cc.sys.browserType !== cc.sys.BROWSER_TYPE_MOBILE_QQ) {\n mAcceleration.x = -mAcceleration.x;\n mAcceleration.y = -mAcceleration.y;\n }\n};","/****************************************************************************\n Copyright (c) 2011-2012 cocos2d-x.org\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos2d-x.org\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst macro = require('./CCMacro');\nconst sys = require('./CCSys');\nconst eventManager = require('../event-manager');\n\nconst TOUCH_TIMEOUT = macro.TOUCH_TIMEOUT;\n\nlet _vec2 = cc.v2();\n\n/**\n * This class manages all events of input. include: touch, mouse, accelerometer, keyboard\n */\nlet inputManager = {\n _mousePressed: false,\n\n _isRegisterEvent: false,\n\n _preTouchPoint: cc.v2(0,0),\n _prevMousePoint: cc.v2(0,0),\n\n _preTouchPool: [],\n _preTouchPoolPointer: 0,\n\n _touches: [],\n _touchesIntegerDict:{},\n\n _indexBitsUsed: 0,\n _maxTouches: 8,\n\n _accelEnabled: false,\n _accelInterval: 1/5,\n _accelMinus: 1,\n _accelCurTime: 0,\n _acceleration: null,\n _accelDeviceEvent: null,\n\n _canvasBoundingRect: {\n left: 0,\n top: 0,\n adjustedLeft: 0,\n adjustedTop: 0,\n width: 0,\n height: 0,\n },\n\n _getUnUsedIndex () {\n let temp = this._indexBitsUsed;\n let now = cc.sys.now();\n\n for (let i = 0; i < this._maxTouches; i++) {\n if (!(temp & 0x00000001)) {\n this._indexBitsUsed |= (1 << i);\n return i;\n }\n else {\n let touch = this._touches[i];\n if (now - touch._lastModified > TOUCH_TIMEOUT) {\n this._removeUsedIndexBit(i);\n delete this._touchesIntegerDict[touch.getID()];\n return i;\n }\n }\n temp >>= 1;\n }\n\n // all bits are used\n return -1;\n },\n\n _removeUsedIndexBit (index) {\n if (index < 0 || index >= this._maxTouches)\n return;\n\n let temp = 1 << index;\n temp = ~temp;\n this._indexBitsUsed &= temp;\n },\n\n _glView: null,\n\n _updateCanvasBoundingRect () {\n let element = cc.game.canvas;\n let canvasBoundingRect = this._canvasBoundingRect;\n\n let docElem = document.documentElement;\n let leftOffset = window.pageXOffset - docElem.clientLeft;\n let topOffset = window.pageYOffset - docElem.clientTop;\n if (element.getBoundingClientRect) {\n let box = element.getBoundingClientRect();\n canvasBoundingRect.left = box.left + leftOffset;\n canvasBoundingRect.top = box.top + topOffset;\n canvasBoundingRect.width = box.width;\n canvasBoundingRect.height = box.height;\n }\n else if (element instanceof HTMLCanvasElement) {\n canvasBoundingRect.left = leftOffset;\n canvasBoundingRect.top = topOffset;\n canvasBoundingRect.width = element.width;\n canvasBoundingRect.height = element.height;\n }\n else {\n canvasBoundingRect.left = leftOffset;\n canvasBoundingRect.top = topOffset;\n canvasBoundingRect.width = parseInt(element.style.width);\n canvasBoundingRect.height = parseInt(element.style.height);\n }\n },\n\n /**\n * @method handleTouchesBegin\n * @param {Array} touches\n */\n handleTouchesBegin (touches) {\n let selTouch, index, curTouch, touchID,\n handleTouches = [], locTouchIntDict = this._touchesIntegerDict,\n now = sys.now();\n for (let i = 0, len = touches.length; i < len; i ++) {\n selTouch = touches[i];\n touchID = selTouch.getID();\n index = locTouchIntDict[touchID];\n\n if (index == null) {\n let unusedIndex = this._getUnUsedIndex();\n if (unusedIndex === -1) {\n cc.logID(2300, unusedIndex);\n continue;\n }\n //curTouch = this._touches[unusedIndex] = selTouch;\n curTouch = this._touches[unusedIndex] = new cc.Touch(selTouch._point.x, selTouch._point.y, selTouch.getID());\n curTouch._lastModified = now;\n curTouch._setPrevPoint(selTouch._prevPoint);\n locTouchIntDict[touchID] = unusedIndex;\n handleTouches.push(curTouch);\n }\n }\n if (handleTouches.length > 0) {\n this._glView._convertTouchesWithScale(handleTouches);\n let touchEvent = new cc.Event.EventTouch(handleTouches);\n touchEvent._eventCode = cc.Event.EventTouch.BEGAN;\n eventManager.dispatchEvent(touchEvent);\n }\n },\n\n /**\n * @method handleTouchesMove\n * @param {Array} touches\n */\n handleTouchesMove (touches) {\n let selTouch, index, touchID,\n handleTouches = [], locTouches = this._touches,\n now = sys.now();\n for (let i = 0, len = touches.length; i < len; i++) {\n selTouch = touches[i];\n touchID = selTouch.getID();\n index = this._touchesIntegerDict[touchID];\n\n if (index == null) {\n //cc.log(\"if the index doesn't exist, it is an error\");\n continue;\n }\n if (locTouches[index]) {\n locTouches[index]._setPoint(selTouch._point);\n locTouches[index]._setPrevPoint(selTouch._prevPoint);\n locTouches[index]._lastModified = now;\n handleTouches.push(locTouches[index]);\n }\n }\n if (handleTouches.length > 0) {\n this._glView._convertTouchesWithScale(handleTouches);\n let touchEvent = new cc.Event.EventTouch(handleTouches);\n touchEvent._eventCode = cc.Event.EventTouch.MOVED;\n eventManager.dispatchEvent(touchEvent);\n }\n },\n\n /**\n * @method handleTouchesEnd\n * @param {Array} touches\n */\n handleTouchesEnd (touches) {\n let handleTouches = this.getSetOfTouchesEndOrCancel(touches);\n if (handleTouches.length > 0) {\n this._glView._convertTouchesWithScale(handleTouches);\n let touchEvent = new cc.Event.EventTouch(handleTouches);\n touchEvent._eventCode = cc.Event.EventTouch.ENDED;\n eventManager.dispatchEvent(touchEvent);\n }\n this._preTouchPool.length = 0;\n },\n\n /**\n * @method handleTouchesCancel\n * @param {Array} touches\n */\n handleTouchesCancel (touches) {\n let handleTouches = this.getSetOfTouchesEndOrCancel(touches);\n if (handleTouches.length > 0) {\n this._glView._convertTouchesWithScale(handleTouches);\n let touchEvent = new cc.Event.EventTouch(handleTouches);\n touchEvent._eventCode = cc.Event.EventTouch.CANCELED;\n eventManager.dispatchEvent(touchEvent);\n }\n this._preTouchPool.length = 0;\n },\n\n /**\n * @method getSetOfTouchesEndOrCancel\n * @param {Array} touches\n * @returns {Array}\n */\n getSetOfTouchesEndOrCancel (touches) {\n let selTouch, index, touchID, handleTouches = [], locTouches = this._touches, locTouchesIntDict = this._touchesIntegerDict;\n for (let i = 0, len = touches.length; i< len; i ++) {\n selTouch = touches[i];\n touchID = selTouch.getID();\n index = locTouchesIntDict[touchID];\n\n if (index == null) {\n continue; //cc.log(\"if the index doesn't exist, it is an error\");\n }\n if (locTouches[index]) {\n locTouches[index]._setPoint(selTouch._point);\n locTouches[index]._setPrevPoint(selTouch._prevPoint);\n handleTouches.push(locTouches[index]);\n this._removeUsedIndexBit(index);\n delete locTouchesIntDict[touchID];\n }\n }\n return handleTouches;\n },\n\n /**\n * @method getPreTouch\n * @param {Touch} touch\n * @return {Touch}\n */\n getPreTouch (touch) {\n let preTouch = null;\n let locPreTouchPool = this._preTouchPool;\n let id = touch.getID();\n for (let i = locPreTouchPool.length - 1; i >= 0; i--) {\n if (locPreTouchPool[i].getID() === id) {\n preTouch = locPreTouchPool[i];\n break;\n }\n }\n if (!preTouch)\n preTouch = touch;\n return preTouch;\n },\n\n /**\n * @method setPreTouch\n * @param {Touch} touch\n */\n setPreTouch (touch) {\n let find = false;\n let locPreTouchPool = this._preTouchPool;\n let id = touch.getID();\n for (let i = locPreTouchPool.length - 1; i >= 0; i--) {\n if (locPreTouchPool[i].getID() === id) {\n locPreTouchPool[i] = touch;\n find = true;\n break;\n }\n }\n if (!find) {\n if (locPreTouchPool.length <= 50) {\n locPreTouchPool.push(touch);\n } else {\n locPreTouchPool[this._preTouchPoolPointer] = touch;\n this._preTouchPoolPointer = (this._preTouchPoolPointer + 1) % 50;\n }\n }\n },\n\n /**\n * @method getTouchByXY\n * @param {Number} tx\n * @param {Number} ty\n * @param {Vec2} pos\n * @return {Touch}\n */\n getTouchByXY (tx, ty, pos) {\n let locPreTouch = this._preTouchPoint;\n let location = this._glView.convertToLocationInView(tx, ty, pos);\n let touch = new cc.Touch(location.x, location.y, 0);\n touch._setPrevPoint(locPreTouch.x, locPreTouch.y);\n locPreTouch.x = location.x;\n locPreTouch.y = location.y;\n return touch;\n },\n\n /**\n * @method getMouseEvent\n * @param {Vec2} location\n * @param {Vec2} pos\n * @param {Number} eventType\n * @returns {Event.EventMouse}\n */\n getMouseEvent (location, pos, eventType) {\n let locPreMouse = this._prevMousePoint;\n let mouseEvent = new cc.Event.EventMouse(eventType);\n mouseEvent._setPrevCursor(locPreMouse.x, locPreMouse.y);\n locPreMouse.x = location.x;\n locPreMouse.y = location.y;\n this._glView._convertMouseToLocationInView(locPreMouse, pos);\n mouseEvent.setLocation(locPreMouse.x, locPreMouse.y);\n return mouseEvent;\n },\n\n /**\n * @method getPointByEvent\n * @param {Touch} event\n * @param {Vec2} pos\n * @return {Vec2}\n */\n getPointByEvent (event, pos) {\n // qq , uc and safari browser can't calculate pageY correctly, need to refresh canvas bounding rect\n if (cc.sys.browserType === cc.sys.BROWSER_TYPE_QQ \n || cc.sys.browserType === cc.sys.BROWSER_TYPE_UC\n || cc.sys.browserType === cc.sys.BROWSER_TYPE_SAFARI) {\n this._updateCanvasBoundingRect();\n }\n \n if (event.pageX != null) //not avalable in <= IE8\n return {x: event.pageX, y: event.pageY};\n\n pos.left -= document.body.scrollLeft;\n pos.top -= document.body.scrollTop;\n\n return {x: event.clientX, y: event.clientY};\n },\n\n /**\n * @method getTouchesByEvent\n * @param {Touch} event\n * @param {Vec2} pos\n * @returns {Array}\n */\n getTouchesByEvent (event, pos) {\n let touchArr = [], locView = this._glView;\n let touch_event, touch, preLocation;\n let locPreTouch = this._preTouchPoint;\n\n let length = event.changedTouches.length;\n for (let i = 0; i < length; i++) {\n touch_event = event.changedTouches[i];\n if (touch_event) {\n let location;\n if (sys.BROWSER_TYPE_FIREFOX === sys.browserType)\n location = locView.convertToLocationInView(touch_event.pageX, touch_event.pageY, pos, _vec2);\n else\n location = locView.convertToLocationInView(touch_event.clientX, touch_event.clientY, pos, _vec2);\n if (touch_event.identifier != null) {\n touch = new cc.Touch(location.x, location.y, touch_event.identifier);\n //use Touch Pool\n preLocation = this.getPreTouch(touch).getLocation();\n touch._setPrevPoint(preLocation.x, preLocation.y);\n this.setPreTouch(touch);\n } else {\n touch = new cc.Touch(location.x, location.y);\n touch._setPrevPoint(locPreTouch.x, locPreTouch.y);\n }\n locPreTouch.x = location.x;\n locPreTouch.y = location.y;\n touchArr.push(touch);\n }\n }\n return touchArr;\n },\n\n /**\n * @method registerSystemEvent\n * @param {HTMLElement} element\n */\n registerSystemEvent (element) {\n if(this._isRegisterEvent) return;\n\n this._glView = cc.view;\n let selfPointer = this;\n let canvasBoundingRect = this._canvasBoundingRect;\n\n window.addEventListener('resize', this._updateCanvasBoundingRect.bind(this));\n\n let prohibition = sys.isMobile;\n let supportMouse = ('mouse' in sys.capabilities);\n let supportTouches = ('touches' in sys.capabilities);\n\n if (supportMouse) {\n //HACK\n // - At the same time to trigger the ontouch event and onmouse event\n // - The function will execute 2 times\n //The known browser:\n // liebiao\n // miui\n // WECHAT\n if (!prohibition) {\n window.addEventListener('mousedown', function () {\n selfPointer._mousePressed = true;\n }, false);\n\n window.addEventListener('mouseup', function (event) {\n if (!selfPointer._mousePressed)\n return;\n \n selfPointer._mousePressed = false;\n\n let location = selfPointer.getPointByEvent(event, canvasBoundingRect);\n if (!cc.rect(canvasBoundingRect.left, canvasBoundingRect.top, canvasBoundingRect.width, canvasBoundingRect.height).contains(location)){\n selfPointer.handleTouchesEnd([selfPointer.getTouchByXY(location.x, location.y, canvasBoundingRect)]);\n\n let mouseEvent = selfPointer.getMouseEvent(location, canvasBoundingRect, cc.Event.EventMouse.UP);\n mouseEvent.setButton(event.button);\n eventManager.dispatchEvent(mouseEvent);\n }\n }, false);\n }\n\n // register canvas mouse event\n let EventMouse = cc.Event.EventMouse;\n let _mouseEventsOnElement = [\n !prohibition && [\"mousedown\", EventMouse.DOWN, function (event, mouseEvent, location, canvasBoundingRect) {\n selfPointer._mousePressed = true;\n selfPointer.handleTouchesBegin([selfPointer.getTouchByXY(location.x, location.y, canvasBoundingRect)]);\n element.focus();\n }],\n !prohibition && [\"mouseup\", EventMouse.UP, function (event, mouseEvent, location, canvasBoundingRect) {\n selfPointer._mousePressed = false;\n selfPointer.handleTouchesEnd([selfPointer.getTouchByXY(location.x, location.y, canvasBoundingRect)]);\n }],\n !prohibition && [\"mousemove\", EventMouse.MOVE, function (event, mouseEvent, location, canvasBoundingRect) {\n selfPointer.handleTouchesMove([selfPointer.getTouchByXY(location.x, location.y, canvasBoundingRect)]);\n if (!selfPointer._mousePressed) {\n mouseEvent.setButton(null);\n }\n }],\n [\"mousewheel\", EventMouse.SCROLL, function (event, mouseEvent) {\n mouseEvent.setScrollData(0, event.wheelDelta);\n }],\n /* firefox fix */\n [\"DOMMouseScroll\", EventMouse.SCROLL, function (event, mouseEvent) {\n mouseEvent.setScrollData(0, event.detail * -120);\n }]\n ];\n for (let i = 0; i < _mouseEventsOnElement.length; ++i) {\n let entry = _mouseEventsOnElement[i];\n if (entry) {\n let name = entry[0];\n let type = entry[1];\n let handler = entry[2];\n element.addEventListener(name, function (event) {\n let location = selfPointer.getPointByEvent(event, canvasBoundingRect);\n let mouseEvent = selfPointer.getMouseEvent(location, canvasBoundingRect, type);\n mouseEvent.setButton(event.button);\n\n handler(event, mouseEvent, location, canvasBoundingRect);\n\n eventManager.dispatchEvent(mouseEvent);\n event.stopPropagation();\n event.preventDefault();\n }, false);\n }\n }\n }\n\n if (window.navigator.msPointerEnabled) {\n let _pointerEventsMap = {\n \"MSPointerDown\" : selfPointer.handleTouchesBegin,\n \"MSPointerMove\" : selfPointer.handleTouchesMove,\n \"MSPointerUp\" : selfPointer.handleTouchesEnd,\n \"MSPointerCancel\" : selfPointer.handleTouchesCancel\n };\n for (let eventName in _pointerEventsMap) {\n let touchEvent = _pointerEventsMap[eventName];\n element.addEventListener(eventName, function (event){\n let documentElement = document.documentElement;\n canvasBoundingRect.adjustedLeft = canvasBoundingRect.left - documentElement.scrollLeft;\n canvasBoundingRect.adjustedTop = canvasBoundingRect.top - documentElement.scrollTop;\n\n touchEvent.call(selfPointer, [selfPointer.getTouchByXY(event.clientX, event.clientY, canvasBoundingRect)]);\n event.stopPropagation();\n }, false);\n }\n }\n\n //register touch event\n if (supportTouches) {\n let _touchEventsMap = {\n \"touchstart\": function (touchesToHandle) {\n selfPointer.handleTouchesBegin(touchesToHandle);\n element.focus();\n },\n \"touchmove\": function (touchesToHandle) {\n selfPointer.handleTouchesMove(touchesToHandle);\n },\n \"touchend\": function (touchesToHandle) {\n selfPointer.handleTouchesEnd(touchesToHandle);\n },\n \"touchcancel\": function (touchesToHandle) {\n selfPointer.handleTouchesCancel(touchesToHandle);\n }\n };\n\n let registerTouchEvent = function (eventName) {\n let handler = _touchEventsMap[eventName];\n element.addEventListener(eventName, (function(event) {\n if (!event.changedTouches) return;\n let body = document.body;\n\n canvasBoundingRect.adjustedLeft = canvasBoundingRect.left - (body.scrollLeft || window.scrollX || 0);\n canvasBoundingRect.adjustedTop = canvasBoundingRect.top - (body.scrollTop || window.scrollY || 0);\n handler(selfPointer.getTouchesByEvent(event, canvasBoundingRect));\n event.stopPropagation();\n event.preventDefault();\n }), false);\n };\n for (let eventName in _touchEventsMap) {\n registerTouchEvent(eventName);\n }\n }\n\n this._registerKeyboardEvent();\n\n this._isRegisterEvent = true;\n },\n\n _registerKeyboardEvent () {},\n\n _registerAccelerometerEvent () {},\n\n /**\n * @method update\n * @param {Number} dt\n */\n update (dt) {\n if (this._accelCurTime > this._accelInterval) {\n this._accelCurTime -= this._accelInterval;\n eventManager.dispatchEvent(new cc.Event.EventAcceleration(this._acceleration));\n }\n this._accelCurTime += dt;\n }\n};\n\nmodule.exports = cc.internal.inputManager = inputManager;\n","/****************************************************************************\n Copyright (c) 2008-2010 Ricardo Quesada\n Copyright (c) 2011-2012 cocos2d-x.org\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos2d-x.org\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * Predefined constants\n * @class macro\n * @static\n */\ncc.macro = {\n /**\n * PI / 180\n * @property RAD\n * @type {Number}\n */\n RAD: Math.PI / 180,\n\n /**\n * One degree\n * @property DEG\n * @type {Number}\n */\n DEG: 180 / Math.PI,\n\n /**\n * @property REPEAT_FOREVER\n * @type {Number}\n */\n REPEAT_FOREVER: (Number.MAX_VALUE - 1),\n\n /**\n * @property FLT_EPSILON\n * @type {Number}\n */\n FLT_EPSILON: 0.0000001192092896,\n\n /**\n * Minimum z index value for node\n * @property MIN_ZINDEX\n * @type {Number}\n */\n MIN_ZINDEX: -Math.pow(2, 15),\n\n /**\n * Maximum z index value for node\n * @property MAX_ZINDEX\n * @type {Number}\n */\n MAX_ZINDEX: Math.pow(2, 15) - 1,\n\n //some gl constant variable\n /**\n * @property ONE\n * @type {Number}\n */\n ONE: 1,\n\n /**\n * @property ZERO\n * @type {Number}\n */\n ZERO: 0,\n\n /**\n * @property SRC_ALPHA\n * @type {Number}\n */\n SRC_ALPHA: 0x0302,\n\n /**\n * @property SRC_ALPHA_SATURATE\n * @type {Number}\n */\n SRC_ALPHA_SATURATE: 0x308,\n\n /**\n * @property SRC_COLOR\n * @type {Number}\n */\n SRC_COLOR: 0x300,\n\n /**\n * @property DST_ALPHA\n * @type {Number}\n */\n DST_ALPHA: 0x304,\n\n /**\n * @property DST_COLOR\n * @type {Number}\n */\n DST_COLOR: 0x306,\n\n /**\n * @property ONE_MINUS_SRC_ALPHA\n * @type {Number}\n */\n ONE_MINUS_SRC_ALPHA: 0x0303,\n\n /**\n * @property ONE_MINUS_SRC_COLOR\n * @type {Number}\n */\n ONE_MINUS_SRC_COLOR: 0x301,\n\n /**\n * @property ONE_MINUS_DST_ALPHA\n * @type {Number}\n */\n ONE_MINUS_DST_ALPHA: 0x305,\n\n /**\n * @property ONE_MINUS_DST_COLOR\n * @type {Number}\n */\n ONE_MINUS_DST_COLOR: 0x0307,\n\n /**\n * @property ONE_MINUS_CONSTANT_ALPHA\n * @type {Number}\n */\n ONE_MINUS_CONSTANT_ALPHA: 0x8004,\n\n /**\n * @property ONE_MINUS_CONSTANT_COLOR\n * @type {Number}\n */\n ONE_MINUS_CONSTANT_COLOR: 0x8002,\n\n //Possible device orientations\n /**\n * Oriented vertically\n * @property ORIENTATION_PORTRAIT\n * @type {Number}\n */\n ORIENTATION_PORTRAIT: 1,\n\n /**\n * Oriented horizontally\n * @property ORIENTATION_LANDSCAPE\n * @type {Number}\n */\n ORIENTATION_LANDSCAPE: 2,\n\n /**\n * Oriented automatically\n * @property ORIENTATION_AUTO\n * @type {Number}\n */\n ORIENTATION_AUTO: 3,\n\n DENSITYDPI_DEVICE: 'device-dpi',\n DENSITYDPI_HIGH: 'high-dpi',\n DENSITYDPI_MEDIUM: 'medium-dpi',\n DENSITYDPI_LOW: 'low-dpi',\n\n // General configurations\n\n /**\n *

\n * If enabled, the texture coordinates will be calculated by using this formula:
\n * - texCoord.left = (rect.x*2+1) / (texture.wide*2);
\n * - texCoord.right = texCoord.left + (rect.width*2-2)/(texture.wide*2);
\n *
\n * The same for bottom and top.
\n *
\n * This formula prevents artifacts by using 99% of the texture.
\n * The \"correct\" way to prevent artifacts is by expand the texture's border with the same color by 1 pixel
\n *
\n * Affected component:
\n * - cc.TMXLayer
\n *
\n * Enabled by default. To disabled set it to 0.
\n * To modify it, in Web engine please refer to CCMacro.js, in JSB please refer to CCConfig.h\n *

\n *\n * @property {Number} FIX_ARTIFACTS_BY_STRECHING_TEXEL_TMX\n */\n FIX_ARTIFACTS_BY_STRECHING_TEXEL_TMX: true,\n\n /**\n * Position of the FPS (Default: 0,0 (bottom-left corner))
\n * To modify it, in Web engine please refer to CCMacro.js, in JSB please refer to CCConfig.h\n * @property {Vec2} DIRECTOR_STATS_POSITION\n */\n DIRECTOR_STATS_POSITION: cc.v2(0, 0),\n\n /**\n *

\n * If enabled, actions that alter the position property (eg: CCMoveBy, CCJumpBy, CCBezierBy, etc..) will be stacked.
\n * If you run 2 or more 'position' actions at the same time on a node, then end position will be the sum of all the positions.
\n * If disabled, only the last run action will take effect.\n *

\n * @property {Number} ENABLE_STACKABLE_ACTIONS\n */\n ENABLE_STACKABLE_ACTIONS: true,\n\n /**\n * !#en \n * The timeout to determine whether a touch is no longer active and should be removed.\n * The reason to add this timeout is due to an issue in X5 browser core, \n * when X5 is presented in wechat on Android, if a touch is glissed from the bottom up, and leave the page area,\n * no touch cancel event is triggered, and the touch will be considered active forever. \n * After multiple times of this action, our maximum touches number will be reached and all new touches will be ignored.\n * So this new mechanism can remove the touch that should be inactive if it's not updated during the last 5000 milliseconds.\n * Though it might remove a real touch if it's just not moving for the last 5 seconds which is not easy with the sensibility of mobile touch screen.\n * You can modify this value to have a better behavior if you find it's not enough.\n * !#zh\n * 用于甄别一个触点对象是否已经失效并且可以被移除的延时时长\n * 添加这个时长的原因是 X5 内核在微信浏览器中出现的一个 bug。\n * 在这个环境下,如果用户将一个触点从底向上移出页面区域,将不会触发任何 touch cancel 或 touch end 事件,而这个触点会被永远当作停留在页面上的有效触点。\n * 重复这样操作几次之后,屏幕上的触点数量将达到我们的事件系统所支持的最高触点数量,之后所有的触摸事件都将被忽略。\n * 所以这个新的机制可以在触点在一定时间内没有任何更新的情况下视为失效触点并从事件系统中移除。\n * 当然,这也可能移除一个真实的触点,如果用户的触点真的在一定时间段内完全没有移动(这在当前手机屏幕的灵敏度下会很难)。\n * 你可以修改这个值来获得你需要的效果,默认值是 5000 毫秒。\n * @property {Number} TOUCH_TIMEOUT\n */\n TOUCH_TIMEOUT: 5000,\n\n /**\n * !#en \n * The maximum vertex count for a single batched draw call.\n * !#zh\n * 最大可以被单次批处理渲染的顶点数量。\n * @property {Number} BATCH_VERTEX_COUNT\n */\n BATCH_VERTEX_COUNT: 20000,\n\n /**\n * !#en \n * Whether or not enabled tiled map auto culling. If you set the TiledMap skew or rotation, then need to manually disable this, otherwise, the rendering will be wrong.\n * !#zh\n * 是否开启瓦片地图的自动裁减功能。瓦片地图如果设置了 skew, rotation 或者采用了摄像机的话,需要手动关闭,否则渲染会出错。\n * @property {Boolean} ENABLE_TILEDMAP_CULLING\n * @default true\n */\n ENABLE_TILEDMAP_CULLING: true,\n\n /**\n * !#en \n * Boolean that indicates if the canvas contains an alpha channel, default sets to false for better performance.\n * Though if you want to make your canvas background transparent and show other dom elements at the background, \n * you can set it to true before `cc.game.run`.\n * Web only.\n * !#zh\n * 用于设置 Canvas 背景是否支持 alpha 通道,默认为 false,这样可以有更高的性能表现。\n * 如果你希望 Canvas 背景是透明的,并显示背后的其他 DOM 元素,你可以在 `cc.game.run` 之前将这个值设为 true。\n * 仅支持 Web\n * @property {Boolean} ENABLE_TRANSPARENT_CANVAS\n * @default false\n */\n ENABLE_TRANSPARENT_CANVAS: false,\n\n /**\n * !#en\n * Boolean that indicates if the WebGL context is created with `antialias` option turned on, default value is false.\n * Set it to true could make your game graphics slightly smoother, like texture hard edges when rotated.\n * Whether to use this really depend on your game design and targeted platform, \n * device with retina display usually have good detail on graphics with or without this option, \n * you probably don't want antialias if your game style is pixel art based.\n * Also, it could have great performance impact with some browser / device using software MSAA.\n * You can set it to true before `cc.game.run`.\n * Web only.\n * !#zh\n * 用于设置在创建 WebGL Context 时是否开启抗锯齿选项,默认值是 false。\n * 将这个选项设置为 true 会让你的游戏画面稍稍平滑一些,比如旋转硬边贴图时的锯齿。是否开启这个选项很大程度上取决于你的游戏和面向的平台。\n * 在大多数拥有 retina 级别屏幕的设备上用户往往无法区分这个选项带来的变化;如果你的游戏选择像素艺术风格,你也多半不会想开启这个选项。\n * 同时,在少部分使用软件级别抗锯齿算法的设备或浏览器上,这个选项会对性能产生比较大的影响。\n * 你可以在 `cc.game.run` 之前设置这个值,否则它不会生效。\n * 仅支持 Web\n * @property {Boolean} ENABLE_WEBGL_ANTIALIAS\n * @default false\n */\n ENABLE_WEBGL_ANTIALIAS: false,\n\n /**\n * !#en\n * Whether or not enable auto culling.\n * This feature have been removed in v2.0 new renderer due to overall performance consumption.\n * We have no plan currently to re-enable auto culling.\n * If your game have more dynamic objects, we suggest to disable auto culling.\n * If your game have more static objects, we suggest to enable auto culling.\n * !#zh\n * 是否开启自动裁减功能,开启裁减功能将会把在屏幕外的物体从渲染队列中去除掉。\n * 这个功能在 v2.0 的新渲染器中被移除了,因为它在大多数游戏中所带来的损耗要高于性能的提升,目前我们没有计划重新支持自动裁剪。\n * 如果游戏中的动态物体比较多的话,建议将此选项关闭。\n * 如果游戏中的静态物体比较多的话,建议将此选项打开。\n * @property {Boolean} ENABLE_CULLING\n * @deprecated since v2.0\n * @default false\n */\n ENABLE_CULLING: false,\n\n /**\n * !#en\n * Whether to clear the original image cache after uploaded a texture to GPU. If cleared, [Dynamic Atlas](https://docs.cocos.com/creator/manual/en/advanced-topics/dynamic-atlas.html) will not be supported.\n * Normally you don't need to enable this option on the web platform, because Image object doesn't consume too much memory.\n * But on WeChat Game platform, the current version cache decoded data in Image object, which has high memory usage.\n * So we enabled this option by default on WeChat, so that we can release Image cache immediately after uploaded to GPU.\n * !#zh\n * 是否在将贴图上传至 GPU 之后删除原始图片缓存,删除之后图片将无法进行 [动态合图](https://docs.cocos.com/creator/manual/zh/advanced-topics/dynamic-atlas.html)。\n * 在 Web 平台,你通常不需要开启这个选项,因为在 Web 平台 Image 对象所占用的内存很小。\n * 但是在微信小游戏平台的当前版本,Image 对象会缓存解码后的图片数据,它所占用的内存空间很大。\n * 所以我们在微信平台默认开启了这个选项,这样我们就可以在上传 GL 贴图之后立即释放 Image 对象的内存,避免过高的内存占用。\n * @property {Boolean} CLEANUP_IMAGE_CACHE\n * @default false\n */\n CLEANUP_IMAGE_CACHE: false,\n\n /**\n * !#en\n * Whether or not show mesh wire frame.\n * !#zh\n * 是否显示网格的线框。\n * @property {Boolean} SHOW_MESH_WIREFRAME\n * @default false\n */\n SHOW_MESH_WIREFRAME: false,\n\n /**\n * !#en\n * Whether or not show mesh normal.\n * !#zh\n * 是否显示网格的法线。\n * @property {Boolean} SHOW_MESH_NORMAL\n * @default false\n */\n SHOW_MESH_NORMAL: false,\n\n /**\n * !#en\n * Whether to enable multi-touch.\n * !#zh\n * 是否开启多点触摸\n * @property {Boolean} ENABLE_MULTI_TOUCH\n * @default true\n */\n ENABLE_MULTI_TOUCH: true,\n\n /**\n * References: \n * https://developer.mozilla.org/en-US/docs/Web/API/ImageBitmap\n * https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/createImageBitmap\n * \n * !#en\n * Whether to use image bitmap first. If enabled, memory usage will increase.\n * \n * !#zh\n * 是否优先使用 image bitmap,启用之后,内存占用会变高\n * \n * @property {Boolean} ALLOW_IMAGE_BITMAP\n * @default true\n */\n ALLOW_IMAGE_BITMAP: !cc.sys.isMobile,\n\n /**\n * !#en\n * Whether to use native TTF renderer which is faster but layout slightly different.\n * \n * !#zh\n * 是否使用原生的文本渲染机制, 布局和编辑器有差异.\n * \n * @property {Boolean} ENABLE_NATIVE_TTF_RENDERER\n * @default false\n */\n ENABLE_NATIVE_TTF_RENDERER: false\n\n};\n\nObject.defineProperty(cc.macro, 'ROTATE_ACTION_CCW', {\n set (value) {\n if (cc.RotateTo && cc.RotateBy) {\n cc.RotateTo._reverse = cc.RotateBy._reverse = value;\n }\n }\n});\n\nlet SUPPORT_TEXTURE_FORMATS = ['.pkm', '.pvr', '.webp', '.jpg', '.jpeg', '.bmp', '.png'];\n\n/**\n * !#en\n * The image format supported by the engine defaults, and the supported formats may differ in different build platforms and device types.\n * Currently all platform and device support ['.webp', '.jpg', '.jpeg', '.bmp', '.png'], The iOS mobile platform also supports the PVR format。\n * !#zh\n * 引擎默认支持的图片格式,支持的格式可能在不同的构建平台和设备类型上有所差别。\n * 目前所有平台和设备支持的格式有 ['.webp', '.jpg', '.jpeg', '.bmp', '.png']. 另外 Ios 手机平台还额外支持了 PVR 格式。\n * @property {String[]} SUPPORT_TEXTURE_FORMATS\n */\ncc.macro.SUPPORT_TEXTURE_FORMATS = SUPPORT_TEXTURE_FORMATS;\n\n\n/**\n * !#en Key map for keyboard event\n * !#zh 键盘事件的按键值\n * @enum macro.KEY\n * @example {@link cocos2d/core/platform/CCCommon/KEY.js}\n */\ncc.macro.KEY = {\n /**\n * !#en None\n * !#zh 没有分配\n * @property none\n * @type {Number}\n * @readonly\n */\n none:0,\n\n // android\n /**\n * !#en The back key\n * !#zh 返回键\n * @property back\n * @type {Number}\n * @readonly\n */\n back:6,\n /**\n * !#en The menu key\n * !#zh 菜单键\n * @property menu\n * @type {Number}\n * @readonly\n */\n menu:18,\n\n /**\n * !#en The backspace key\n * !#zh 退格键\n * @property backspace\n * @type {Number}\n * @readonly\n */\n backspace:8,\n\n /**\n * !#en The tab key\n * !#zh Tab 键\n * @property tab\n * @type {Number}\n * @readonly\n */\n tab:9,\n\n /**\n * !#en The enter key\n * !#zh 回车键\n * @property enter\n * @type {Number}\n * @readonly\n */\n enter:13,\n\n /**\n * !#en The shift key\n * !#zh Shift 键\n * @property shift\n * @type {Number}\n * @readonly\n */\n shift:16, //should use shiftkey instead\n\n /**\n * !#en The ctrl key\n * !#zh Ctrl 键\n * @property ctrl\n * @type {Number}\n * @readonly\n */\n ctrl:17, //should use ctrlkey\n\n /**\n * !#en The alt key\n * !#zh Alt 键\n * @property alt\n * @type {Number}\n * @readonly\n */\n alt:18, //should use altkey\n\n /**\n * !#en The pause key\n * !#zh 暂停键\n * @property pause\n * @type {Number}\n * @readonly\n */\n pause:19,\n\n /**\n * !#en The caps lock key\n * !#zh 大写锁定键\n * @property capslock\n * @type {Number}\n * @readonly\n */\n capslock:20,\n\n /**\n * !#en The esc key\n * !#zh ESC 键\n * @property escape\n * @type {Number}\n * @readonly\n */\n escape:27,\n\n /**\n * !#en The space key\n * !#zh 空格键\n * @property space\n * @type {Number}\n * @readonly\n */\n space:32,\n\n /**\n * !#en The page up key\n * !#zh 向上翻页键\n * @property pageup\n * @type {Number}\n * @readonly\n */\n pageup:33,\n\n /**\n * !#en The page down key\n * !#zh 向下翻页键\n * @property pagedown\n * @type {Number}\n * @readonly\n */\n pagedown:34,\n\n /**\n * !#en The end key\n * !#zh 结束键\n * @property end\n * @type {Number}\n * @readonly\n */\n end:35,\n\n /**\n * !#en The home key\n * !#zh 主菜单键\n * @property home\n * @type {Number}\n * @readonly\n */\n home:36,\n\n /**\n * !#en The left key\n * !#zh 向左箭头键\n * @property left\n * @type {Number}\n * @readonly\n */\n left:37,\n\n /**\n * !#en The up key\n * !#zh 向上箭头键\n * @property up\n * @type {Number}\n * @readonly\n */\n up:38,\n\n /**\n * !#en The right key\n * !#zh 向右箭头键\n * @property right\n * @type {Number}\n * @readonly\n */\n right:39,\n\n /**\n * !#en The down key\n * !#zh 向下箭头键\n * @property down\n * @type {Number}\n * @readonly\n */\n down:40,\n\n /**\n * !#en The select key\n * !#zh Select 键\n * @property select\n * @type {Number}\n * @readonly\n */\n select:41,\n\n /**\n * !#en The insert key\n * !#zh 插入键\n * @property insert\n * @type {Number}\n * @readonly\n */\n insert:45,\n\n /**\n * !#en The Delete key\n * !#zh 删除键\n * @property Delete\n * @type {Number}\n * @readonly\n */\n Delete:46,\n\n /**\n * !#en The '0' key on the top of the alphanumeric keyboard.\n * !#zh 字母键盘上的 0 键\n * @property 0\n * @type {Number}\n * @readonly\n */\n 0:48,\n\n /**\n * !#en The '1' key on the top of the alphanumeric keyboard.\n * !#zh 字母键盘上的 1 键\n * @property 1\n * @type {Number}\n * @readonly\n */\n 1:49,\n\n /**\n * !#en The '2' key on the top of the alphanumeric keyboard.\n * !#zh 字母键盘上的 2 键\n * @property 2\n * @type {Number}\n * @readonly\n */\n 2:50,\n\n /**\n * !#en The '3' key on the top of the alphanumeric keyboard.\n * !#zh 字母键盘上的 3 键\n * @property 3\n * @type {Number}\n * @readonly\n */\n 3:51,\n\n /**\n * !#en The '4' key on the top of the alphanumeric keyboard.\n * !#zh 字母键盘上的 4 键\n * @property 4\n * @type {Number}\n * @readonly\n */\n 4:52,\n\n /**\n * !#en The '5' key on the top of the alphanumeric keyboard.\n * !#zh 字母键盘上的 5 键\n * @property 5\n * @type {Number}\n * @readonly\n */\n 5:53,\n\n /**\n * !#en The '6' key on the top of the alphanumeric keyboard.\n * !#zh 字母键盘上的 6 键\n * @property 6\n * @type {Number}\n * @readonly\n */\n 6:54,\n\n /**\n * !#en The '7' key on the top of the alphanumeric keyboard.\n * !#zh 字母键盘上的 7 键\n * @property 7\n * @type {Number}\n * @readonly\n */\n 7:55,\n\n /**\n * !#en The '8' key on the top of the alphanumeric keyboard.\n * !#zh 字母键盘上的 8 键\n * @property 8\n * @type {Number}\n * @readonly\n */\n 8:56,\n\n /**\n * !#en The '9' key on the top of the alphanumeric keyboard.\n * !#zh 字母键盘上的 9 键\n * @property 9\n * @type {Number}\n * @readonly\n */\n 9:57,\n\n /**\n * !#en The a key\n * !#zh A 键\n * @property a\n * @type {Number}\n * @readonly\n */\n a:65,\n\n /**\n * !#en The b key\n * !#zh B 键\n * @property b\n * @type {Number}\n * @readonly\n */\n b:66,\n\n /**\n * !#en The c key\n * !#zh C 键\n * @property c\n * @type {Number}\n * @readonly\n */\n c:67,\n\n /**\n * !#en The d key\n * !#zh D 键\n * @property d\n * @type {Number}\n * @readonly\n */\n d:68,\n\n /**\n * !#en The e key\n * !#zh E 键\n * @property e\n * @type {Number}\n * @readonly\n */\n e:69,\n\n /**\n * !#en The f key\n * !#zh F 键\n * @property f\n * @type {Number}\n * @readonly\n */\n f:70,\n\n /**\n * !#en The g key\n * !#zh G 键\n * @property g\n * @type {Number}\n * @readonly\n */\n g:71,\n\n /**\n * !#en The h key\n * !#zh H 键\n * @property h\n * @type {Number}\n * @readonly\n */\n h:72,\n\n /**\n * !#en The i key\n * !#zh I 键\n * @property i\n * @type {Number}\n * @readonly\n */\n i:73,\n\n /**\n * !#en The j key\n * !#zh J 键\n * @property j\n * @type {Number}\n * @readonly\n */\n j:74,\n\n /**\n * !#en The k key\n * !#zh K 键\n * @property k\n * @type {Number}\n * @readonly\n */\n k:75,\n\n /**\n * !#en The l key\n * !#zh L 键\n * @property l\n * @type {Number}\n * @readonly\n */\n l:76,\n\n /**\n * !#en The m key\n * !#zh M 键\n * @property m\n * @type {Number}\n * @readonly\n */\n m:77,\n\n /**\n * !#en The n key\n * !#zh N 键\n * @property n\n * @type {Number}\n * @readonly\n */\n n:78,\n\n /**\n * !#en The o key\n * !#zh O 键\n * @property o\n * @type {Number}\n * @readonly\n */\n o:79,\n\n /**\n * !#en The p key\n * !#zh P 键\n * @property p\n * @type {Number}\n * @readonly\n */\n p:80,\n\n /**\n * !#en The q key\n * !#zh Q 键\n * @property q\n * @type {Number}\n * @readonly\n */\n q:81,\n\n /**\n * !#en The r key\n * !#zh R 键\n * @property r\n * @type {Number}\n * @readonly\n */\n r:82,\n\n /**\n * !#en The s key\n * !#zh S 键\n * @property s\n * @type {Number}\n * @readonly\n */\n s:83,\n\n /**\n * !#en The t key\n * !#zh T 键\n * @property t\n * @type {Number}\n * @readonly\n */\n t:84,\n\n /**\n * !#en The u key\n * !#zh U 键\n * @property u\n * @type {Number}\n * @readonly\n */\n u:85,\n\n /**\n * !#en The v key\n * !#zh V 键\n * @property v\n * @type {Number}\n * @readonly\n */\n v:86,\n\n /**\n * !#en The w key\n * !#zh W 键\n * @property w\n * @type {Number}\n * @readonly\n */\n w:87,\n\n /**\n * !#en The x key\n * !#zh X 键\n * @property x\n * @type {Number}\n * @readonly\n */\n x:88,\n\n /**\n * !#en The y key\n * !#zh Y 键\n * @property y\n * @type {Number}\n * @readonly\n */\n y:89,\n\n /**\n * !#en The z key\n * !#zh Z 键\n * @property z\n * @type {Number}\n * @readonly\n */\n z:90,\n\n /**\n * !#en The numeric keypad 0\n * !#zh 数字键盘 0\n * @property num0\n * @type {Number}\n * @readonly\n */\n num0:96,\n\n /**\n * !#en The numeric keypad 1\n * !#zh 数字键盘 1\n * @property num1\n * @type {Number}\n * @readonly\n */\n num1:97,\n\n /**\n * !#en The numeric keypad 2\n * !#zh 数字键盘 2\n * @property num2\n * @type {Number}\n * @readonly\n */\n num2:98,\n\n /**\n * !#en The numeric keypad 3\n * !#zh 数字键盘 3\n * @property num3\n * @type {Number}\n * @readonly\n */\n num3:99,\n\n /**\n * !#en The numeric keypad 4\n * !#zh 数字键盘 4\n * @property num4\n * @type {Number}\n * @readonly\n */\n num4:100,\n\n /**\n * !#en The numeric keypad 5\n * !#zh 数字键盘 5\n * @property num5\n * @type {Number}\n * @readonly\n */\n num5:101,\n\n /**\n * !#en The numeric keypad 6\n * !#zh 数字键盘 6\n * @property num6\n * @type {Number}\n * @readonly\n */\n num6:102,\n\n /**\n * !#en The numeric keypad 7\n * !#zh 数字键盘 7\n * @property num7\n * @type {Number}\n * @readonly\n */\n num7:103,\n\n /**\n * !#en The numeric keypad 8\n * !#zh 数字键盘 8\n * @property num8\n * @type {Number}\n * @readonly\n */\n num8:104,\n\n /**\n * !#en The numeric keypad 9\n * !#zh 数字键盘 9\n * @property num9\n * @type {Number}\n * @readonly\n */\n num9:105,\n\n /**\n * !#en The numeric keypad '*'\n * !#zh 数字键盘 *\n * @property *\n * @type {Number}\n * @readonly\n */\n '*':106,\n\n /**\n * !#en The numeric keypad '+'\n * !#zh 数字键盘 +\n * @property +\n * @type {Number}\n * @readonly\n */\n '+':107,\n\n /**\n * !#en The numeric keypad '-'\n * !#zh 数字键盘 -\n * @property -\n * @type {Number}\n * @readonly\n */\n '-':109,\n\n /**\n * !#en The numeric keypad 'delete'\n * !#zh 数字键盘删除键\n * @property numdel\n * @type {Number}\n * @readonly\n */\n 'numdel':110,\n\n /**\n * !#en The numeric keypad '/'\n * !#zh 数字键盘 /\n * @property /\n * @type {Number}\n * @readonly\n */\n '/':111,\n\n /**\n * !#en The F1 function key\n * !#zh F1 功能键\n * @property f1\n * @type {Number}\n * @readonly\n */\n f1:112, //f1-f12 dont work on ie\n\n /**\n * !#en The F2 function key\n * !#zh F2 功能键\n * @property f2\n * @type {Number}\n * @readonly\n */\n f2:113,\n\n /**\n * !#en The F3 function key\n * !#zh F3 功能键\n * @property f3\n * @type {Number}\n * @readonly\n */\n f3:114,\n\n /**\n * !#en The F4 function key\n * !#zh F4 功能键\n * @property f4\n * @type {Number}\n * @readonly\n */\n f4:115,\n\n /**\n * !#en The F5 function key\n * !#zh F5 功能键\n * @property f5\n * @type {Number}\n * @readonly\n */\n f5:116,\n\n /**\n * !#en The F6 function key\n * !#zh F6 功能键\n * @property f6\n * @type {Number}\n * @readonly\n */\n f6:117,\n\n /**\n * !#en The F7 function key\n * !#zh F7 功能键\n * @property f7\n * @type {Number}\n * @readonly\n */\n f7:118,\n\n /**\n * !#en The F8 function key\n * !#zh F8 功能键\n * @property f8\n * @type {Number}\n * @readonly\n */\n f8:119,\n\n /**\n * !#en The F9 function key\n * !#zh F9 功能键\n * @property f9\n * @type {Number}\n * @readonly\n */\n f9:120,\n\n /**\n * !#en The F10 function key\n * !#zh F10 功能键\n * @property f10\n * @type {Number}\n * @readonly\n */\n f10:121,\n\n /**\n * !#en The F11 function key\n * !#zh F11 功能键\n * @property f11\n * @type {Number}\n * @readonly\n */\n f11:122,\n\n /**\n * !#en The F12 function key\n * !#zh F12 功能键\n * @property f12\n * @type {Number}\n * @readonly\n */\n f12:123,\n\n /**\n * !#en The numlock key\n * !#zh 数字锁定键\n * @property numlock\n * @type {Number}\n * @readonly\n */\n numlock:144,\n\n /**\n * !#en The scroll lock key\n * !#zh 滚动锁定键\n * @property scrolllock\n * @type {Number}\n * @readonly\n */\n scrolllock:145,\n\n /**\n * !#en The ';' key.\n * !#zh 分号键\n * @property ;\n * @type {Number}\n * @readonly\n */\n ';':186,\n\n /**\n * !#en The ';' key.\n * !#zh 分号键\n * @property semicolon\n * @type {Number}\n * @readonly\n */\n semicolon:186,\n\n /**\n * !#en The '=' key.\n * !#zh 等于号键\n * @property equal\n * @type {Number}\n * @readonly\n */\n equal:187,\n\n /**\n * !#en The '=' key.\n * !#zh 等于号键\n * @property =\n * @type {Number}\n * @readonly\n */\n '=':187,\n\n /**\n * !#en The ',' key.\n * !#zh 逗号键\n * @property ,\n * @type {Number}\n * @readonly\n */\n ',':188,\n\n /**\n * !#en The ',' key.\n * !#zh 逗号键\n * @property comma\n * @type {Number}\n * @readonly\n */\n comma:188,\n\n /**\n * !#en The dash '-' key.\n * !#zh 中划线键\n * @property dash\n * @type {Number}\n * @readonly\n */\n dash:189,\n\n /**\n * !#en The '.' key.\n * !#zh 句号键\n * @property .\n * @type {Number}\n * @readonly\n */\n '.':190,\n\n /**\n * !#en The '.' key\n * !#zh 句号键\n * @property period\n * @type {Number}\n * @readonly\n */\n period:190,\n\n /**\n * !#en The forward slash key\n * !#zh 正斜杠键\n * @property forwardslash\n * @type {Number}\n * @readonly\n */\n forwardslash:191,\n\n /**\n * !#en The grave key\n * !#zh 按键 `\n * @property grave\n * @type {Number}\n * @readonly\n */\n grave:192,\n\n /**\n * !#en The '[' key\n * !#zh 按键 [\n * @property [\n * @type {Number}\n * @readonly\n */\n '[':219,\n\n /**\n * !#en The '[' key\n * !#zh 按键 [\n * @property openbracket\n * @type {Number}\n * @readonly\n */\n openbracket:219,\n\n /**\n * !#en The '\\' key\n * !#zh 反斜杠键\n * @property backslash\n * @type {Number}\n * @readonly\n */\n backslash:220,\n\n /**\n * !#en The ']' key\n * !#zh 按键 ]\n * @property ]\n * @type {Number}\n * @readonly\n */\n ']':221,\n\n /**\n * !#en The ']' key\n * !#zh 按键 ]\n * @property closebracket\n * @type {Number}\n * @readonly\n */\n closebracket:221,\n\n /**\n * !#en The quote key\n * !#zh 单引号键\n * @property quote\n * @type {Number}\n * @readonly\n */\n quote:222,\n\n // gamepad controll\n\n /**\n * !#en The dpad left key\n * !#zh 导航键 向左\n * @property dpadLeft\n * @type {Number}\n * @readonly\n */\n dpadLeft:1000,\n\n /**\n * !#en The dpad right key\n * !#zh 导航键 向右\n * @property dpadRight\n * @type {Number}\n * @readonly\n */\n dpadRight:1001,\n\n /**\n * !#en The dpad up key\n * !#zh 导航键 向上\n * @property dpadUp\n * @type {Number}\n * @readonly\n */\n dpadUp:1003,\n\n /**\n * !#en The dpad down key\n * !#zh 导航键 向下\n * @property dpadDown\n * @type {Number}\n * @readonly\n */\n dpadDown:1004,\n\n /**\n * !#en The dpad center key\n * !#zh 导航键 确定键\n * @property dpadCenter\n * @type {Number}\n * @readonly\n */\n dpadCenter:1005\n};\n\n/**\n * Image formats\n * @enum macro.ImageFormat\n */\ncc.macro.ImageFormat = cc.Enum({\n /**\n * Image Format:JPG\n * @property JPG\n * @type {Number}\n */\n JPG: 0,\n /**\n * Image Format:PNG\n * @property PNG\n * @type {Number}\n */\n PNG: 1,\n /**\n * Image Format:TIFF\n * @property TIFF\n * @type {Number}\n */\n TIFF: 2,\n /**\n * Image Format:WEBP\n * @property WEBP\n * @type {Number}\n */\n WEBP: 3,\n /**\n * Image Format:PVR\n * @property PVR\n * @type {Number}\n */\n PVR: 4,\n /**\n * Image Format:ETC\n * @property ETC\n * @type {Number}\n */\n ETC: 5,\n /**\n * Image Format:S3TC\n * @property S3TC\n * @type {Number}\n */\n S3TC: 6,\n /**\n * Image Format:ATITC\n * @property ATITC\n * @type {Number}\n */\n ATITC: 7,\n /**\n * Image Format:TGA\n * @property TGA\n * @type {Number}\n */\n TGA: 8,\n /**\n * Image Format:RAWDATA\n * @property RAWDATA\n * @type {Number}\n */\n RAWDATA: 9,\n /**\n * Image Format:UNKNOWN\n * @property UNKNOWN\n * @type {Number}\n */\n UNKNOWN: 10\n});\n\n/**\n * !#en\n * Enum for blend factor\n * Refer to: http://www.andersriggelsen.dk/glblendfunc.php\n * !#zh\n * 混合因子\n * 可参考: http://www.andersriggelsen.dk/glblendfunc.php\n * @enum macro.BlendFactor\n */\ncc.macro.BlendFactor = cc.Enum({\n /**\n * !#en All use\n * !#zh 全部使用\n * @property {Number} ONE\n */\n ONE: 1, //cc.macro.ONE\n /**\n * !#en Not all\n * !#zh 全部不用\n * @property {Number} ZERO\n */\n ZERO: 0, //cc.ZERO\n /**\n * !#en Using the source alpha\n * !#zh 使用源颜色的透明度\n * @property {Number} SRC_ALPHA\n */\n SRC_ALPHA: 0x302, //cc.SRC_ALPHA\n /**\n * !#en Using the source color\n * !#zh 使用源颜色\n * @property {Number} SRC_COLOR\n */\n SRC_COLOR: 0x300, //cc.SRC_COLOR\n /**\n * !#en Using the target alpha\n * !#zh 使用目标颜色的透明度\n * @property {Number} DST_ALPHA\n */\n DST_ALPHA: 0x304, //cc.DST_ALPHA\n /**\n * !#en Using the target color\n * !#zh 使用目标颜色\n * @property {Number} DST_COLOR\n */\n DST_COLOR: 0x306, //cc.DST_COLOR\n /**\n * !#en Minus the source alpha\n * !#zh 减去源颜色的透明度\n * @property {Number} ONE_MINUS_SRC_ALPHA\n */\n ONE_MINUS_SRC_ALPHA: 0x303, //cc.ONE_MINUS_SRC_ALPHA\n /**\n * !#en Minus the source color\n * !#zh 减去源颜色\n * @property {Number} ONE_MINUS_SRC_COLOR\n */\n ONE_MINUS_SRC_COLOR: 0x301, //cc.ONE_MINUS_SRC_COLOR\n /**\n * !#en Minus the target alpha\n * !#zh 减去目标颜色的透明度\n * @property {Number} ONE_MINUS_DST_ALPHA\n */\n ONE_MINUS_DST_ALPHA: 0x305, //cc.ONE_MINUS_DST_ALPHA\n /**\n * !#en Minus the target color\n * !#zh 减去目标颜色\n * @property {Number} ONE_MINUS_DST_COLOR\n */\n ONE_MINUS_DST_COLOR: 0x307, //cc.ONE_MINUS_DST_COLOR\n});\n\n/**\n * @enum macro.TextAlignment\n */\ncc.macro.TextAlignment = cc.Enum({\n /**\n * @property {Number} LEFT\n */\n LEFT: 0,\n /**\n * @property {Number} CENTER\n */\n CENTER: 1,\n /**\n * @property {Number} RIGHT\n */\n RIGHT: 2\n});\n\n/**\n * @enum VerticalTextAlignment\n */\ncc.macro.VerticalTextAlignment = cc.Enum({\n /**\n * @property {Number} TOP\n */\n TOP: 0,\n /**\n * @property {Number} CENTER\n */\n CENTER: 1,\n /**\n * @property {Number} BOTTOM\n */\n BOTTOM: 2\n});\n\nmodule.exports = cc.macro;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar js = require('./js');\nvar CCClass = require('./CCClass');\n\n// definitions for CCObject.Flags\n\nvar Destroyed = 1 << 0;\nvar RealDestroyed = 1 << 1;\nvar ToDestroy = 1 << 2;\nvar DontSave = 1 << 3;\nvar EditorOnly = 1 << 4;\nvar Dirty = 1 << 5;\nvar DontDestroy = 1 << 6;\nvar Destroying = 1 << 7;\nvar Deactivating = 1 << 8;\nvar LockedInEditor = 1 << 9;\n//var HideInGame = 1 << 9;\nvar HideInHierarchy = 1 << 10;\n\nvar IsOnEnableCalled = 1 << 11;\nvar IsEditorOnEnableCalled = 1 << 12;\nvar IsPreloadStarted = 1 << 13;\nvar IsOnLoadCalled = 1 << 14;\nvar IsOnLoadStarted = 1 << 15;\nvar IsStartCalled = 1 << 16;\n\nvar IsRotationLocked = 1 << 17;\nvar IsScaleLocked = 1 << 18;\nvar IsAnchorLocked = 1 << 19;\nvar IsSizeLocked = 1 << 20;\nvar IsPositionLocked = 1 << 21;\n\n// var Hide = HideInGame | HideInHierarchy;\n// should not clone or serialize these flags\nvar PersistentMask = ~(ToDestroy | Dirty | Destroying | DontDestroy | Deactivating |\n IsPreloadStarted | IsOnLoadStarted | IsOnLoadCalled | IsStartCalled |\n IsOnEnableCalled | IsEditorOnEnableCalled |\n IsRotationLocked | IsScaleLocked | IsAnchorLocked | IsSizeLocked | IsPositionLocked\n /*RegisteredInEditor*/);\n\n/**\n * The base class of most of all the objects in Fireball.\n * @class Object\n *\n * @main\n * @private\n */\nfunction CCObject () {\n /**\n * @property {String} _name\n * @default \"\"\n * @private\n */\n this._name = '';\n\n /**\n * @property {Number} _objFlags\n * @default 0\n * @private\n */\n this._objFlags = 0;\n}\nCCClass.fastDefine('cc.Object', CCObject, { _name: '', _objFlags: 0 });\n\n/**\n * Bit mask that controls object states.\n * @enum Flags\n * @static\n * @private\n */\njs.value(CCObject, 'Flags', {\n\n Destroyed,\n //ToDestroy: ToDestroy,\n\n /**\n * !#en The object will not be saved.\n * !#zh 该对象将不会被保存。\n * @property {Number} DontSave\n */\n DontSave,\n\n /**\n * !#en The object will not be saved when building a player.\n * !#zh 构建项目时,该对象将不会被保存。\n * @property {Number} EditorOnly\n */\n EditorOnly,\n\n Dirty,\n\n /**\n * !#en Dont destroy automatically when loading a new scene.\n * !#zh 加载一个新场景时,不自动删除该对象。\n * @property DontDestroy\n * @private\n */\n DontDestroy,\n\n PersistentMask,\n\n // FLAGS FOR ENGINE\n\n Destroying,\n\n /**\n * !#en The node is deactivating.\n * !#zh 节点正在反激活的过程中。\n * @property Deactivating\n * @private\n */\n Deactivating,\n\n /**\n * !#en The lock node, when the node is locked, cannot be clicked in the scene.\n * !#zh 锁定节点,锁定后场景内不能点击。\n * \n * @property LockedInEditor\n * @private\n */\n LockedInEditor,\n\n ///**\n // * !#en\n // * Hide in game and hierarchy.\n // * This flag is readonly, it can only be used as an argument of `scene.addEntity()` or `Entity.createWithFlags()`.\n // * !#zh\n // * 在游戏和层级中隐藏该对象。
\n // * 该标记只读,它只能被用作 `scene.addEntity()` 或者 `Entity.createWithFlags()` 的一个参数。\n // * @property {Number} HideInGame\n // */\n //HideInGame: HideInGame,\n\n // FLAGS FOR EDITOR\n\n /**\n * !#en Hide the object in editor.\n * !#zh 在编辑器中隐藏该对象。\n * @property {Number} HideInHierarchy\n */\n HideInHierarchy: HideInHierarchy,\n\n ///**\n // * !#en\n // * Hide in game view, hierarchy, and scene view... etc.\n // * This flag is readonly, it can only be used as an argument of `scene.addEntity()` or `Entity.createWithFlags()`.\n // * !#zh\n // * 在游戏视图,层级,场景视图等等...中隐藏该对象。\n // * 该标记只读,它只能被用作 `scene.addEntity()` 或者 `Entity.createWithFlags()` 的一个参数。\n // * @property {Number} Hide\n // */\n //Hide: Hide,\n\n // FLAGS FOR COMPONENT\n\n IsPreloadStarted,\n IsOnLoadStarted,\n IsOnLoadCalled,\n IsOnEnableCalled,\n IsStartCalled,\n IsEditorOnEnableCalled,\n\n IsPositionLocked,\n IsRotationLocked,\n IsScaleLocked,\n IsAnchorLocked,\n IsSizeLocked,\n});\n\nvar objectsToDestroy = [];\n\nfunction deferredDestroy () {\n var deleteCount = objectsToDestroy.length;\n for (var i = 0; i < deleteCount; ++i) {\n var obj = objectsToDestroy[i];\n if (!(obj._objFlags & Destroyed)) {\n obj._destroyImmediate();\n }\n }\n // if we called b.destory() in a.onDestroy(), objectsToDestroy will be resized,\n // but we only destroy the objects which called destory in this frame.\n if (deleteCount === objectsToDestroy.length) {\n objectsToDestroy.length = 0;\n }\n else {\n objectsToDestroy.splice(0, deleteCount);\n }\n\n if (CC_EDITOR) {\n deferredDestroyTimer = null;\n }\n}\n\njs.value(CCObject, '_deferredDestroy', deferredDestroy);\n\nif (CC_EDITOR) {\n js.value(CCObject, '_clearDeferredDestroyTimer', function () {\n if (deferredDestroyTimer !== null) {\n clearImmediate(deferredDestroyTimer);\n deferredDestroyTimer = null;\n }\n });\n}\n\n// MEMBER\n\n/**\n * @class Object\n */\n\nvar prototype = CCObject.prototype;\n\n/**\n * !#en The name of the object.\n * !#zh 该对象的名称。\n * @property {String} name\n * @default \"\"\n * @example\n * obj.name = \"New Obj\";\n */\njs.getset(prototype, 'name',\n function () {\n return this._name;\n },\n function (value) {\n this._name = value;\n },\n true\n);\n\n/**\n * !#en\n * Indicates whether the object is not yet destroyed. (It will not be available after being destroyed)
\n * When an object's `destroy` is called, it is actually destroyed after the end of this frame.\n * So `isValid` will return false from the next frame, while `isValid` in the current frame will still be true.\n * If you want to determine whether the current frame has called `destroy`, use `cc.isValid(obj, true)`,\n * but this is often caused by a particular logical requirements, which is not normally required.\n *\n * !#zh\n * 表示该对象是否可用(被 destroy 后将不可用)。
\n * 当一个对象的 `destroy` 调用以后,会在这一帧结束后才真正销毁。因此从下一帧开始 `isValid` 就会返回 false,而当前帧内 `isValid` 仍然会是 true。如果希望判断当前帧是否调用过 `destroy`,请使用 `cc.isValid(obj, true)`,不过这往往是特殊的业务需求引起的,通常情况下不需要这样。\n *\n * @property {Boolean} isValid\n * @default true\n * @readOnly\n * @example\n * var node = new cc.Node();\n * cc.log(node.isValid); // true\n * node.destroy();\n * cc.log(node.isValid); // true, still valid in this frame\n * // after a frame...\n * cc.log(node.isValid); // false, destroyed in the end of last frame\n */\njs.get(prototype, 'isValid', function () {\n return !(this._objFlags & Destroyed);\n}, true);\n\nif (CC_EDITOR || CC_TEST) {\n js.get(prototype, 'isRealValid', function () {\n return !(this._objFlags & RealDestroyed);\n });\n}\n\nvar deferredDestroyTimer = null;\n\n/**\n * !#en\n * Destroy this Object, and release all its own references to other objects.
\n * Actual object destruction will delayed until before rendering.\n * From the next frame, this object is not usable anymore.\n * You can use `cc.isValid(obj)` to check whether the object is destroyed before accessing it.\n * !#zh\n * 销毁该对象,并释放所有它对其它对象的引用。
\n * 实际销毁操作会延迟到当前帧渲染前执行。从下一帧开始,该对象将不再可用。\n * 您可以在访问对象之前使用 `cc.isValid(obj)` 来检查对象是否已被销毁。\n * @method destroy\n * @return {Boolean} whether it is the first time the destroy being called\n * @example\n * obj.destroy();\n */\nprototype.destroy = function () {\n if (this._objFlags & Destroyed) {\n cc.warnID(5000);\n return false;\n }\n if (this._objFlags & ToDestroy) {\n return false;\n }\n this._objFlags |= ToDestroy;\n objectsToDestroy.push(this);\n\n if (CC_EDITOR && deferredDestroyTimer === null && cc.engine && ! cc.engine._isUpdating) {\n // auto destroy immediate in edit mode\n deferredDestroyTimer = setImmediate(deferredDestroy);\n }\n return true;\n};\n\nif (CC_EDITOR || CC_TEST) {\n /*\n * !#en\n * In fact, Object's \"destroy\" will not trigger the destruct operation in Firebal Editor.\n * The destruct operation will be executed by Undo system later.\n * !#zh\n * 事实上,对象的 “destroy” 不会在编辑器中触发析构操作,\n * 析构操作将在 Undo 系统中 **延后** 执行。\n * @method realDestroyInEditor\n * @private\n */\n prototype.realDestroyInEditor = function () {\n if ( !(this._objFlags & Destroyed) ) {\n cc.warnID(5001);\n return;\n }\n if (this._objFlags & RealDestroyed) {\n cc.warnID(5000);\n return;\n }\n this._destruct();\n this._objFlags |= RealDestroyed;\n };\n}\n\nfunction compileDestruct (obj, ctor) {\n var shouldSkipId = obj instanceof cc._BaseNode || obj instanceof cc.Component;\n var idToSkip = shouldSkipId ? '_id' : null;\n\n var key, propsToReset = {};\n for (key in obj) {\n if (obj.hasOwnProperty(key)) {\n if (key === idToSkip) {\n continue;\n }\n switch (typeof obj[key]) {\n case 'string':\n propsToReset[key] = '';\n break;\n case 'object':\n case 'function':\n propsToReset[key] = null;\n break;\n }\n }\n }\n // Overwrite propsToReset according to Class\n if (cc.Class._isCCClass(ctor)) {\n var attrs = cc.Class.Attr.getClassAttrs(ctor);\n var propList = ctor.__props__;\n for (var i = 0; i < propList.length; i++) {\n key = propList[i];\n var attrKey = key + cc.Class.Attr.DELIMETER + 'default';\n if (attrKey in attrs) {\n if (shouldSkipId && key === '_id') {\n continue;\n }\n switch (typeof attrs[attrKey]) {\n case 'string':\n propsToReset[key] = '';\n break;\n case 'object':\n case 'function':\n propsToReset[key] = null;\n break;\n case 'undefined':\n propsToReset[key] = undefined;\n break;\n }\n }\n }\n }\n\n if (CC_SUPPORT_JIT) {\n // compile code\n var func = '';\n for (key in propsToReset) {\n var statement;\n if (CCClass.IDENTIFIER_RE.test(key)) {\n statement = 'o.' + key + '=';\n }\n else {\n statement = 'o[' + CCClass.escapeForJS(key) + ']=';\n }\n var val = propsToReset[key];\n if (val === '') {\n val = '\"\"';\n }\n func += (statement + val + ';\\n');\n }\n return Function('o', func);\n }\n else {\n return function (o) {\n for (var key in propsToReset) {\n o[key] = propsToReset[key];\n }\n };\n }\n}\n\n/**\n * !#en\n * Clear all references in the instance.\n *\n * NOTE: this method will not clear the `getter` or `setter` functions which defined in the instance of `CCObject`.\n * You can override the `_destruct` method if you need, for example:\n * ```js\n * _destruct: function () {\n * for (var key in this) {\n * if (this.hasOwnProperty(key)) {\n * switch (typeof this[key]) {\n * case 'string':\n * this[key] = '';\n * break;\n * case 'object':\n * case 'function':\n * this[key] = null;\n * break;\n * }\n * }\n * }\n * ```\n * !#zh\n * 清除实例中的所有引用。\n * \n * 注意:此方法不会清除在 `CCObject` 实例中定义的 `getter` 或 `setter`。如果需要,你可以重写 `_destruct` 方法。例如:\n * \n * ```js\n * _destruct: function () {\n * for (var key in this) {\n * if (this.hasOwnProperty(key)) {\n * switch (typeof this[key]) {\n * case 'string':\n * this[key] = '';\n * break;\n * case 'object':\n * case 'function':\n * this[key] = null;\n * break;\n * }\n * }\n * }\n * ```\n * @method _destruct\n * @private\n */\nprototype._destruct = function () {\n var ctor = this.constructor;\n var destruct = ctor.__destruct__;\n if (!destruct) {\n destruct = compileDestruct(this, ctor);\n js.value(ctor, '__destruct__', destruct, true);\n }\n destruct(this);\n};\n\n/**\n * !#en\n * Called before the object being destroyed.\n * !#zh\n * 在对象被销毁之前调用。\n * @method _onPreDestroy\n * @private\n */\nprototype._onPreDestroy = null;\n\nprototype._destroyImmediate = function () {\n if (this._objFlags & Destroyed) {\n cc.errorID(5000);\n return;\n }\n // engine internal callback\n if (this._onPreDestroy) {\n this._onPreDestroy();\n }\n\n if ((CC_TEST ? (/* make CC_EDITOR mockable*/ Function('return !CC_EDITOR'))() : !CC_EDITOR) || cc.engine._isPlaying) {\n this._destruct();\n }\n\n this._objFlags |= Destroyed;\n};\n\nif (CC_EDITOR) {\n /**\n * !#en\n * The customized serialization for this object. (Editor Only)\n * !#zh\n * 为此对象定制序列化。\n * @method _serialize\n * @param {Boolean} exporting\n * @return {object} the serialized json data object\n * @private\n */\n prototype._serialize = null;\n}\n\n/**\n * !#en\n * Init this object from the custom serialized data.\n * !#zh\n * 从自定义序列化数据初始化此对象。\n * @method _deserialize\n * @param {Object} data - the serialized json data\n * @param {_Deserializer} ctx\n * @private\n */\nprototype._deserialize = null;\n\n/**\n * @module cc\n */\n\n/**\n * !#en\n * Checks whether the object is non-nil and not yet destroyed.
\n * When an object's `destroy` is called, it is actually destroyed after the end of this frame.\n * So `isValid` will return false from the next frame, while `isValid` in the current frame will still be true.\n * If you want to determine whether the current frame has called `destroy`, use `cc.isValid(obj, true)`,\n * but this is often caused by a particular logical requirements, which is not normally required.\n *\n * !#zh\n * 检查该对象是否不为 null 并且尚未销毁。
\n * 当一个对象的 `destroy` 调用以后,会在这一帧结束后才真正销毁。因此从下一帧开始 `isValid` 就会返回 false,而当前帧内 `isValid` 仍然会是 true。如果希望判断当前帧是否调用过 `destroy`,请使用 `cc.isValid(obj, true)`,不过这往往是特殊的业务需求引起的,通常情况下不需要这样。\n *\n * @method isValid\n * @param {any} value\n * @param {Boolean} [strictMode=false] - If true, Object called destroy() in this frame will also treated as invalid.\n * @return {Boolean} whether is valid\n * @example\n * var node = new cc.Node();\n * cc.log(cc.isValid(node)); // true\n * node.destroy();\n * cc.log(cc.isValid(node)); // true, still valid in this frame\n * // after a frame...\n * cc.log(cc.isValid(node)); // false, destroyed in the end of last frame\n */\ncc.isValid = function (value, strictMode) {\n if (typeof value === 'object') {\n return !!value && !(value._objFlags & (strictMode ? (Destroyed | ToDestroy) : Destroyed));\n }\n else {\n return typeof value !== 'undefined';\n }\n};\n\nif (CC_EDITOR || CC_TEST) {\n js.value(CCObject, '_willDestroy', function (obj) {\n return !(obj._objFlags & Destroyed) && (obj._objFlags & ToDestroy) > 0;\n });\n js.value(CCObject, '_cancelDestroy', function (obj) {\n obj._objFlags &= ~ToDestroy;\n js.array.fastRemove(objectsToDestroy, obj);\n });\n}\n\ncc.Object = module.exports = CCObject;\n","/****************************************************************************\n Copyright (c) 2008-2010 Ricardo Quesada\n Copyright (c) 2011-2012 cocos2d-x.org\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos2d-x.org\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar js = require('../platform/js');\n\n/**\n * A SAX Parser\n * @class saxParser\n */\ncc.SAXParser = function () {\n if (!(CC_EDITOR && Editor.isMainProcess) && window.DOMParser) {\n this._isSupportDOMParser = true;\n this._parser = new DOMParser();\n } else {\n this._isSupportDOMParser = false;\n this._parser = null;\n }\n};\ncc.SAXParser.prototype = {\n constructor: cc.SAXParser,\n /**\n * @method parse\n * @param {String} xmlTxt\n * @return {Document}\n */\n parse : function(xmlTxt){\n return this._parseXML(xmlTxt);\n },\n\n _parseXML: function (textxml) {\n // get a reference to the requested corresponding xml file\n var xmlDoc;\n if (this._isSupportDOMParser) {\n xmlDoc = this._parser.parseFromString(textxml, \"text/xml\");\n } else {\n // Internet Explorer (untested!)\n xmlDoc = new ActiveXObject(\"Microsoft.XMLDOM\");\n xmlDoc.async = \"false\";\n xmlDoc.loadXML(textxml);\n }\n return xmlDoc;\n }\n};\n\n/**\n *\n * cc.plistParser is a singleton object for parsing plist files\n * @class plistParser\n * @extends SAXParser\n */\ncc.PlistParser = function () {\n cc.SAXParser.call(this);\n};\njs.extend(cc.PlistParser, cc.SAXParser);\njs.mixin(cc.PlistParser.prototype, {\n /**\n * parse a xml string as plist object.\n * @param {String} xmlTxt - plist xml contents\n * @return {*} plist object\n */\n parse : function (xmlTxt) {\n var xmlDoc = this._parseXML(xmlTxt);\n var plist = xmlDoc.documentElement;\n if (plist.tagName !== 'plist') {\n cc.warnID(5100);\n return {};\n }\n\n // Get first real node\n var node = null;\n for (var i = 0, len = plist.childNodes.length; i < len; i++) {\n node = plist.childNodes[i];\n if (node.nodeType === 1)\n break;\n }\n xmlDoc = null;\n return this._parseNode(node);\n },\n\n _parseNode: function (node) {\n var data = null, tagName = node.tagName;\n if(tagName === \"dict\"){\n data = this._parseDict(node);\n }else if(tagName === \"array\"){\n data = this._parseArray(node);\n }else if(tagName === \"string\"){\n if (node.childNodes.length === 1)\n data = node.firstChild.nodeValue;\n else {\n //handle Firefox's 4KB nodeValue limit\n data = \"\";\n for (var i = 0; i < node.childNodes.length; i++)\n data += node.childNodes[i].nodeValue;\n }\n }else if(tagName === \"false\"){\n data = false;\n }else if(tagName === \"true\"){\n data = true;\n }else if(tagName === \"real\"){\n data = parseFloat(node.firstChild.nodeValue);\n }else if(tagName === \"integer\"){\n data = parseInt(node.firstChild.nodeValue, 10);\n }\n return data;\n },\n\n _parseArray: function (node) {\n var data = [];\n for (var i = 0, len = node.childNodes.length; i < len; i++) {\n var child = node.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n data.push(this._parseNode(child));\n }\n return data;\n },\n\n _parseDict: function (node) {\n var data = {};\n var key = null;\n for (var i = 0, len = node.childNodes.length; i < len; i++) {\n var child = node.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n\n // Grab the key, next noe should be the value\n if (child.tagName === 'key')\n key = child.firstChild.nodeValue;\n else\n data[key] = this._parseNode(child); // Parse the value node\n }\n return data;\n }\n});\n\ncc.saxParser = new cc.SAXParser();\n/**\n * @type {PlistParser}\n * @name plistParser\n * A Plist Parser\n */\ncc.plistParser = new cc.PlistParser();\n\nmodule.exports = {\n saxParser: cc.saxParser,\n plistParser: cc.plistParser\n}\n","/****************************************************************************\n Copyright (c) 2008-2010 Ricardo Quesada\n Copyright (c) 2011-2012 cocos2d-x.org\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n \n http://www.cocos2d-x.org\n \n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n \n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n \n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * The fullscreen API provides an easy way for web content to be presented using the user's entire screen.\n * It's invalid on safari, QQbrowser and android browser\n * @class screen\n */\ncc.screen = /** @lends cc.screen# */{\n _supportsFullScreen: false,\n _onfullscreenchange: null,\n _onfullscreenerror: null,\n // the pre fullscreenchange function\n _preOnFullScreenChange: null,\n _preOnFullScreenError: null,\n _preOnTouch: null,\n _touchEvent: \"\",\n _fn: null,\n // Function mapping for cross browser support\n _fnMap: [\n [\n 'requestFullscreen',\n 'exitFullscreen',\n 'fullscreenchange',\n 'fullscreenEnabled',\n 'fullscreenElement',\n 'fullscreenerror',\n ],\n [\n 'requestFullScreen',\n 'exitFullScreen',\n 'fullScreenchange',\n 'fullScreenEnabled',\n 'fullScreenElement',\n 'fullscreenerror',\n ],\n [\n 'webkitRequestFullScreen',\n 'webkitCancelFullScreen',\n 'webkitfullscreenchange',\n 'webkitIsFullScreen',\n 'webkitCurrentFullScreenElement',\n 'webkitfullscreenerror',\n ],\n [\n 'mozRequestFullScreen',\n 'mozCancelFullScreen',\n 'mozfullscreenchange',\n 'mozFullScreen',\n 'mozFullScreenElement',\n 'mozfullscreenerror',\n ],\n [\n 'msRequestFullscreen',\n 'msExitFullscreen',\n 'MSFullscreenChange',\n 'msFullscreenEnabled',\n 'msFullscreenElement',\n 'msfullscreenerror',\n ]\n ],\n \n /**\n * initialize\n * @method init\n */\n init: function () {\n this._fn = {};\n var i, l, val, map = this._fnMap, valL;\n for (i = 0, l = map.length; i < l; i++) {\n val = map[i];\n if (val && (typeof document[val[1]] !== 'undefined')) {\n for (i = 0, valL = val.length; i < valL; i++) {\n this._fn[map[0][i]] = val[i];\n }\n break;\n }\n }\n\n this._supportsFullScreen = (this._fn.requestFullscreen !== undefined);\n\n // Bug fix only for v2.1, don't merge into v2.0\n // In v2.0, screen touchend events conflict with editBox touchend events if it's not stayOnTop.\n // While in v2.1, editBox always keep stayOnTop and it doesn't support touchend events.\n this._touchEvent = ('ontouchend' in window) ? 'touchend' : 'mousedown';\n },\n \n /**\n * return true if it's full now.\n * @method fullScreen\n * @returns {Boolean}\n */\n fullScreen: function () {\n if (!this._supportsFullScreen) return false;\n else if (!document[this._fn.fullscreenElement] && !document[this._fn.webkitFullscreenElement] && !document[this._fn.mozFullScreenElement]) {\n return false;\n }\n else {\n return true;\n }\n },\n \n /**\n * change the screen to full mode.\n * @method requestFullScreen\n * @param {Element} element\n * @param {Function} onFullScreenChange\n * @param {Function} onFullScreenError\n */\n requestFullScreen: function (element, onFullScreenChange, onFullScreenError) {\n if (element && element.tagName.toLowerCase() === \"video\") {\n if (cc.sys.os === cc.sys.OS_IOS && cc.sys.isBrowser && element.readyState > 0) {\n element.webkitEnterFullscreen && element.webkitEnterFullscreen();\n return;\n }\n else {\n element.setAttribute(\"x5-video-player-fullscreen\", \"true\");\n }\n }\n\n if (!this._supportsFullScreen) {\n return;\n }\n\n element = element || document.documentElement;\n\n if (onFullScreenChange) {\n let eventName = this._fn.fullscreenchange;\n if (this._onfullscreenchange) {\n document.removeEventListener(eventName, this._onfullscreenchange);\n }\n this._onfullscreenchange = onFullScreenChange;\n document.addEventListener(eventName, onFullScreenChange, false);\n }\n if (onFullScreenError) {\n let eventName = this._fn.fullscreenerror;\n if (this._onfullscreenerror) {\n document.removeEventListener(eventName, this._onfullscreenerror);\n }\n this._onfullscreenerror = onFullScreenError;\n document.addEventListener(eventName, onFullScreenError, { once: true });\n }\n\n let requestPromise = element[this._fn.requestFullscreen]();\n // the requestFullscreen API can only be initiated by user gesture.\n if (typeof document[this._fn.fullscreenerror] === 'undefined' \n && window.Promise && requestPromise instanceof Promise) {\n requestPromise.catch(function (err) {\n // do nothing ... \n });\n }\n },\n \n /**\n * exit the full mode.\n * @method exitFullScreen\n * @return {Boolean}\n */\n exitFullScreen: function (element) {\n if (element && element.tagName.toLowerCase() === \"video\") {\n if (cc.sys.os === cc.sys.OS_IOS && cc.sys.isBrowser) {\n element.webkitExitFullscreen && element.webkitExitFullscreen();\n return;\n }\n else {\n element.setAttribute(\"x5-video-player-fullscreen\", \"false\");\n }\n }\n return this._supportsFullScreen ? document[this._fn.exitFullscreen]() : true;\n },\n \n /**\n * Automatically request full screen with a touch/click event\n * @method autoFullScreen\n * @param {Element} element\n * @param {Function} onFullScreenChange\n */\n autoFullScreen: function (element, onFullScreenChange) {\n element = element || document.body;\n\n this._ensureFullScreen(element, onFullScreenChange);\n this.requestFullScreen(element, onFullScreenChange);\n },\n\n disableAutoFullScreen (element) {\n let touchTarget = cc.game.canvas || element;\n let touchEventName = this._touchEvent;\n if (this._preOnTouch) {\n touchTarget.removeEventListener(touchEventName, this._preOnTouch);\n this._preOnTouch = null;\n }\n },\n\n // Register touch event if request full screen failed\n _ensureFullScreen (element, onFullScreenChange) {\n let self = this;\n let touchTarget = cc.game.canvas || element;\n let fullScreenErrorEventName = this._fn.fullscreenerror;\n let touchEventName = this._touchEvent;\n \n function onFullScreenError () {\n self._preOnFullScreenError = null;\n\n // handle touch event listener\n function onTouch() {\n self._preOnTouch = null;\n self.requestFullScreen(element, onFullScreenChange);\n }\n if (self._preOnTouch) {\n touchTarget.removeEventListener(touchEventName, self._preOnTouch);\n }\n self._preOnTouch = onTouch;\n touchTarget.addEventListener(touchEventName, self._preOnTouch, { once: true });\n }\n\n // handle full screen error\n if (this._preOnFullScreenError) {\n element.removeEventListener(fullScreenErrorEventName, this._preOnFullScreenError);\n }\n this._preOnFullScreenError = onFullScreenError;\n element.addEventListener(fullScreenErrorEventName, onFullScreenError, { once: true });\n },\n};\ncc.screen.init();\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nlet settingPlatform;\n if (!CC_EDITOR) {\n settingPlatform = window._CCSettings ? _CCSettings.platform: undefined;\n }\nconst isVivoGame = (settingPlatform === 'qgame');\nconst isOppoGame = (settingPlatform === 'quickgame');\nconst isHuaweiGame = (settingPlatform === 'huawei');\nconst isJKWGame = (settingPlatform === 'jkw-game');\nconst isQttGame = (settingPlatform === 'qtt-game');\nconst isLinkSure = (settingPlatform === 'link-sure');\n\nconst _global = typeof window === 'undefined' ? global : window;\n \nfunction initSys () {\n /**\n * System variables\n * @class sys\n * @main\n * @static\n */\n cc.sys = {};\n var sys = cc.sys;\n\n /**\n * English language code\n * @property {String} LANGUAGE_ENGLISH\n * @readOnly\n */\n sys.LANGUAGE_ENGLISH = \"en\";\n\n /**\n * Chinese language code\n * @property {String} LANGUAGE_CHINESE\n * @readOnly\n */\n sys.LANGUAGE_CHINESE = \"zh\";\n\n /**\n * French language code\n * @property {String} LANGUAGE_FRENCH\n * @readOnly\n */\n sys.LANGUAGE_FRENCH = \"fr\";\n\n /**\n * Italian language code\n * @property {String} LANGUAGE_ITALIAN\n * @readOnly\n */\n sys.LANGUAGE_ITALIAN = \"it\";\n\n /**\n * German language code\n * @property {String} LANGUAGE_GERMAN\n * @readOnly\n */\n sys.LANGUAGE_GERMAN = \"de\";\n\n /**\n * Spanish language code\n * @property {String} LANGUAGE_SPANISH\n * @readOnly\n */\n sys.LANGUAGE_SPANISH = \"es\";\n\n /**\n * Spanish language code\n * @property {String} LANGUAGE_DUTCH\n * @readOnly\n */\n sys.LANGUAGE_DUTCH = \"du\";\n\n /**\n * Russian language code\n * @property {String} LANGUAGE_RUSSIAN\n * @readOnly\n */\n sys.LANGUAGE_RUSSIAN = \"ru\";\n\n /**\n * Korean language code\n * @property {String} LANGUAGE_KOREAN\n * @readOnly\n */\n sys.LANGUAGE_KOREAN = \"ko\";\n\n /**\n * Japanese language code\n * @property {String} LANGUAGE_JAPANESE\n * @readOnly\n */\n sys.LANGUAGE_JAPANESE = \"ja\";\n\n /**\n * Hungarian language code\n * @property {String} LANGUAGE_HUNGARIAN\n * @readonly\n */\n sys.LANGUAGE_HUNGARIAN = \"hu\";\n\n /**\n * Portuguese language code\n * @property {String} LANGUAGE_PORTUGUESE\n * @readOnly\n */\n sys.LANGUAGE_PORTUGUESE = \"pt\";\n\n /**\n * Arabic language code\n * @property {String} LANGUAGE_ARABIC\n * @readOnly\n */\n sys.LANGUAGE_ARABIC = \"ar\";\n\n /**\n * Norwegian language code\n * @property {String} LANGUAGE_NORWEGIAN\n * @readOnly\n */\n sys.LANGUAGE_NORWEGIAN = \"no\";\n\n /**\n * Polish language code\n * @property {String} LANGUAGE_POLISH\n * @readOnly\n */\n sys.LANGUAGE_POLISH = \"pl\";\n\n /**\n * Turkish language code\n * @property {String} LANGUAGE_TURKISH\n * @readOnly\n */\n sys.LANGUAGE_TURKISH = \"tr\";\n\n /**\n * Ukrainian language code\n * @property {String} LANGUAGE_UKRAINIAN\n * @readOnly\n */\n sys.LANGUAGE_UKRAINIAN = \"uk\";\n\n /**\n * Romanian language code\n * @property {String} LANGUAGE_ROMANIAN\n * @readOnly\n */\n sys.LANGUAGE_ROMANIAN = \"ro\";\n\n /**\n * Bulgarian language code\n * @property {String} LANGUAGE_BULGARIAN\n * @readOnly\n */\n sys.LANGUAGE_BULGARIAN = \"bg\";\n\n /**\n * Unknown language code\n * @property {String} LANGUAGE_UNKNOWN\n * @readOnly\n */\n sys.LANGUAGE_UNKNOWN = \"unknown\";\n\n /**\n * @property {String} OS_IOS\n * @readOnly\n */\n sys.OS_IOS = \"iOS\";\n /**\n * @property {String} OS_ANDROID\n * @readOnly\n */\n sys.OS_ANDROID = \"Android\";\n /**\n * @property {String} OS_WINDOWS\n * @readOnly\n */\n sys.OS_WINDOWS = \"Windows\";\n /**\n * @property {String} OS_MARMALADE\n * @readOnly\n */\n sys.OS_MARMALADE = \"Marmalade\";\n /**\n * @property {String} OS_LINUX\n * @readOnly\n */\n sys.OS_LINUX = \"Linux\";\n /**\n * @property {String} OS_BADA\n * @readOnly\n */\n sys.OS_BADA = \"Bada\";\n /**\n * @property {String} OS_BLACKBERRY\n * @readOnly\n */\n sys.OS_BLACKBERRY = \"Blackberry\";\n /**\n * @property {String} OS_OSX\n * @readOnly\n */\n sys.OS_OSX = \"OS X\";\n /**\n * @property {String} OS_WP8\n * @readOnly\n */\n sys.OS_WP8 = \"WP8\";\n /**\n * @property {String} OS_WINRT\n * @readOnly\n */\n sys.OS_WINRT = \"WINRT\";\n /**\n * @property {String} OS_UNKNOWN\n * @readOnly\n */\n sys.OS_UNKNOWN = \"Unknown\";\n\n /**\n * @property {Number} UNKNOWN\n * @readOnly\n * @default -1\n */\n sys.UNKNOWN = -1;\n /**\n * @property {Number} WIN32\n * @readOnly\n * @default 0\n */\n sys.WIN32 = 0;\n /**\n * @property {Number} LINUX\n * @readOnly\n * @default 1\n */\n sys.LINUX = 1;\n /**\n * @property {Number} MACOS\n * @readOnly\n * @default 2\n */\n sys.MACOS = 2;\n /**\n * @property {Number} ANDROID\n * @readOnly\n * @default 3\n */\n sys.ANDROID = 3;\n /**\n * @property {Number} IPHONE\n * @readOnly\n * @default 4\n */\n sys.IPHONE = 4;\n /**\n * @property {Number} IPAD\n * @readOnly\n * @default 5\n */\n sys.IPAD = 5;\n /**\n * @property {Number} BLACKBERRY\n * @readOnly\n * @default 6\n */\n sys.BLACKBERRY = 6;\n /**\n * @property {Number} NACL\n * @readOnly\n * @default 7\n */\n sys.NACL = 7;\n /**\n * @property {Number} EMSCRIPTEN\n * @readOnly\n * @default 8\n */\n sys.EMSCRIPTEN = 8;\n /**\n * @property {Number} TIZEN\n * @readOnly\n * @default 9\n */\n sys.TIZEN = 9;\n /**\n * @property {Number} WINRT\n * @readOnly\n * @default 10\n */\n sys.WINRT = 10;\n /**\n * @property {Number} WP8\n * @readOnly\n * @default 11\n */\n sys.WP8 = 11;\n /**\n * @property {Number} MOBILE_BROWSER\n * @readOnly\n * @default 100\n */\n sys.MOBILE_BROWSER = 100;\n /**\n * @property {Number} DESKTOP_BROWSER\n * @readOnly\n * @default 101\n */\n sys.DESKTOP_BROWSER = 101;\n\n /**\n * Indicates whether executes in editor's window process (Electron's renderer context)\n * @property {Number} EDITOR_PAGE\n * @readOnly\n * @default 102\n */\n sys.EDITOR_PAGE = 102;\n /**\n * Indicates whether executes in editor's main process (Electron's browser context)\n * @property {Number} EDITOR_CORE\n * @readOnly\n * @default 103\n */\n sys.EDITOR_CORE = 103;\n /**\n * @property {Number} WECHAT_GAME\n * @readOnly\n * @default 104\n */\n sys.WECHAT_GAME = 104;\n /**\n * @property {Number} QQ_PLAY\n * @readOnly\n * @default 105\n */\n sys.QQ_PLAY = 105;\n /**\n * @property {Number} FB_PLAYABLE_ADS\n * @readOnly\n * @default 106\n */\n sys.FB_PLAYABLE_ADS = 106;\n /**\n * @property {Number} BAIDU_GAME\n * @readOnly\n * @default 107\n */\n sys.BAIDU_GAME = 107;\n /**\n * @property {Number} VIVO_GAME\n * @readOnly\n * @default 108\n */\n sys.VIVO_GAME = 108;\n /**\n * @property {Number} OPPO_GAME\n * @readOnly\n * @default 109\n */\n sys.OPPO_GAME = 109;\n /**\n * @property {Number} HUAWEI_GAME\n * @readOnly\n * @default 110\n */\n sys.HUAWEI_GAME = 110;\n /**\n * @property {Number} XIAOMI_GAME\n * @readOnly\n * @default 111\n */\n sys.XIAOMI_GAME = 111;\n /**\n * @property {Number} JKW_GAME\n * @readOnly\n * @default 112\n */\n sys.JKW_GAME = 112;\n /**\n * @property {Number} ALIPAY_GAME\n * @readOnly\n * @default 113\n */\n sys.ALIPAY_GAME = 113;\n /**\n * @property {Number} WECHAT_GAME_SUB\n * @readOnly\n * @default 114\n */\n sys.WECHAT_GAME_SUB = 114;\n /**\n * @property {Number} BAIDU_GAME_SUB\n * @readOnly\n * @default 115\n */\n sys.BAIDU_GAME_SUB = 115;\n /**\n * @property {Number} QTT_GAME\n * @readOnly\n * @default 116\n */\n sys.QTT_GAME = 116;\n /**\n * @property {Number} BYTEDANCE_GAME\n * @readOnly\n * @default 117\n */\n sys.BYTEDANCE_GAME = 117;\n /**\n * @property {Number} BYTEDANCE_GAME_SUB\n * @readOnly\n * @default 118\n */\n sys.BYTEDANCE_GAME_SUB = 118;\n /**\n * @property {Number} LINKSURE\n * @readOnly\n * @default 119\n */\n sys.LINKSURE = 119;\n /**\n * BROWSER_TYPE_WECHAT\n * @property {String} BROWSER_TYPE_WECHAT\n * @readOnly\n * @default \"wechat\"\n */\n sys.BROWSER_TYPE_WECHAT = \"wechat\";\n /**\n *\n * @property {String} BROWSER_TYPE_ANDROID\n * @readOnly\n * @default \"androidbrowser\"\n */\n sys.BROWSER_TYPE_ANDROID = \"androidbrowser\";\n /**\n *\n * @property {String} BROWSER_TYPE_IE\n * @readOnly\n * @default \"ie\"\n */\n sys.BROWSER_TYPE_IE = \"ie\";\n /**\n *\n * @property {String} BROWSER_TYPE_EDGE\n * @readOnly\n * @default \"edge\"\n */\n sys.BROWSER_TYPE_EDGE = \"edge\";\n /**\n *\n * @property {String} BROWSER_TYPE_QQ\n * @readOnly\n * @default \"qqbrowser\"\n */\n sys.BROWSER_TYPE_QQ = \"qqbrowser\";\n /**\n *\n * @property {String} BROWSER_TYPE_MOBILE_QQ\n * @readOnly\n * @default \"mqqbrowser\"\n */\n sys.BROWSER_TYPE_MOBILE_QQ = \"mqqbrowser\";\n /**\n *\n * @property {String} BROWSER_TYPE_UC\n * @readOnly\n * @default \"ucbrowser\"\n */\n sys.BROWSER_TYPE_UC = \"ucbrowser\";\n /**\n * uc third party integration.\n * @property {String} BROWSER_TYPE_UCBS\n * @readOnly\n * @default \"ucbs\"\n */\n sys.BROWSER_TYPE_UCBS = \"ucbs\";\n /**\n *\n * @property {String} BROWSER_TYPE_360\n * @readOnly\n * @default \"360browser\"\n */\n sys.BROWSER_TYPE_360 = \"360browser\";\n /**\n *\n * @property {String} BROWSER_TYPE_BAIDU_APP\n * @readOnly\n * @default \"baiduboxapp\"\n */\n sys.BROWSER_TYPE_BAIDU_APP = \"baiduboxapp\";\n /**\n *\n * @property {String} BROWSER_TYPE_BAIDU\n * @readOnly\n * @default \"baidubrowser\"\n */\n sys.BROWSER_TYPE_BAIDU = \"baidubrowser\";\n /**\n *\n * @property {String} BROWSER_TYPE_MAXTHON\n * @readOnly\n * @default \"maxthon\"\n */\n sys.BROWSER_TYPE_MAXTHON = \"maxthon\";\n /**\n *\n * @property {String} BROWSER_TYPE_OPERA\n * @readOnly\n * @default \"opera\"\n */\n sys.BROWSER_TYPE_OPERA = \"opera\";\n /**\n *\n * @property {String} BROWSER_TYPE_OUPENG\n * @readOnly\n * @default \"oupeng\"\n */\n sys.BROWSER_TYPE_OUPENG = \"oupeng\";\n /**\n *\n * @property {String} BROWSER_TYPE_MIUI\n * @readOnly\n * @default \"miuibrowser\"\n */\n sys.BROWSER_TYPE_MIUI = \"miuibrowser\";\n /**\n *\n * @property {String} BROWSER_TYPE_FIREFOX\n * @readOnly\n * @default \"firefox\"\n */\n sys.BROWSER_TYPE_FIREFOX = \"firefox\";\n /**\n *\n * @property {String} BROWSER_TYPE_SAFARI\n * @readOnly\n * @default \"safari\"\n */\n sys.BROWSER_TYPE_SAFARI = \"safari\";\n /**\n *\n * @property {String} BROWSER_TYPE_CHROME\n * @readOnly\n * @default \"chrome\"\n */\n sys.BROWSER_TYPE_CHROME = \"chrome\";\n /**\n *\n * @property {String} BROWSER_TYPE_LIEBAO\n * @readOnly\n * @default \"liebao\"\n */\n sys.BROWSER_TYPE_LIEBAO = \"liebao\";\n /**\n *\n * @property {String} BROWSER_TYPE_QZONE\n * @readOnly\n * @default \"qzone\"\n */\n sys.BROWSER_TYPE_QZONE = \"qzone\";\n /**\n *\n * @property {String} BROWSER_TYPE_SOUGOU\n * @readOnly\n * @default \"sogou\"\n */\n sys.BROWSER_TYPE_SOUGOU = \"sogou\";\n /**\n *\n * @property {String} BROWSER_TYPE_HUAWEI\n * @readOnly\n * @default \"huawei\"\n */\n sys.BROWSER_TYPE_HUAWEI = \"huawei\";\n /**\n *\n * @property {String} BROWSER_TYPE_UNKNOWN\n * @readOnly\n * @default \"unknown\"\n */\n sys.BROWSER_TYPE_UNKNOWN = \"unknown\";\n\n /**\n * Is native ? This is set to be true in jsb auto.\n * @property {Boolean} isNative\n */\n sys.isNative = CC_JSB || CC_RUNTIME;\n\n /**\n * Is web browser ?\n * @property {Boolean} isBrowser\n */\n sys.isBrowser = typeof window === 'object' && typeof document === 'object' && !CC_JSB && !CC_RUNTIME;\n\n /**\n * Is webgl extension support?\n * @method glExtension\n * @param name\n * @return {Boolean}\n */\n sys.glExtension = function (name) {\n return !!cc.renderer.device.ext(name);\n }\n\n /**\n * Get max joint matrix size for skinned mesh renderer.\n * @method getMaxJointMatrixSize\n */\n sys.getMaxJointMatrixSize = function () {\n if (!sys._maxJointMatrixSize) {\n const JOINT_MATRICES_SIZE = 50;\n const LEFT_UNIFORM_SIZE = 10;\n\n let gl = cc.game._renderContext;\n let maxUniforms = Math.floor(gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS) / 4) - LEFT_UNIFORM_SIZE;\n if (maxUniforms < JOINT_MATRICES_SIZE) {\n sys._maxJointMatrixSize = 0;\n }\n else {\n sys._maxJointMatrixSize = JOINT_MATRICES_SIZE;\n }\n }\n return sys._maxJointMatrixSize;\n };\n\n /**\n * !#en\n * Returns the safe area of the screen (in design resolution). If the screen is not notched, the visibleRect will be returned by default.\n * Currently supports Android, iOS and WeChat Mini Game platform.\n * !#zh\n * 返回手机屏幕安全区域(设计分辨率为单位),如果不是异形屏将默认返回 visibleRect。目前支持安卓、iOS 原生平台和微信小游戏平台。\n * @method getSafeAreaRect\n * @return {Rect}\n */\n sys.getSafeAreaRect = function () {\n let visibleSize = cc.view.getVisibleSize();\n return cc.rect(0, 0, visibleSize.width, visibleSize.height);\n };\n\n if (_global.__globalAdapter && _global.__globalAdapter.adaptSys) {\n // init sys info in adapter\n _global.__globalAdapter.adaptSys(sys);\n }\n else if (CC_EDITOR && Editor.isMainProcess) {\n sys.isMobile = false;\n sys.platform = sys.EDITOR_CORE;\n sys.language = sys.LANGUAGE_UNKNOWN;\n sys.languageCode = undefined;\n sys.os = ({\n darwin: sys.OS_OSX,\n win32: sys.OS_WINDOWS,\n linux: sys.OS_LINUX\n })[process.platform] || sys.OS_UNKNOWN;\n sys.browserType = null;\n sys.browserVersion = null;\n sys.windowPixelResolution = {\n width: 0,\n height: 0\n };\n sys.capabilities = {\n 'imageBitmap': false\n };\n sys.__audioSupport = {};\n }\n else if (CC_JSB || CC_RUNTIME) {\n let platform;\n if (isVivoGame) {\n platform = sys.VIVO_GAME;\n } else if (isOppoGame) {\n platform = sys.OPPO_GAME;\n } else if (isHuaweiGame) {\n platform = sys.HUAWEI_GAME;\n } else if (isJKWGame) {\n platform = sys.JKW_GAME;\n } else if (isQttGame) {\n platform = sys.QTT_GAME;\n } else if (isLinkSure) {\n platform = sys.LINKSURE;\n }\n else {\n platform = __getPlatform();\n }\n sys.platform = platform;\n sys.isMobile = (platform === sys.ANDROID ||\n platform === sys.IPAD ||\n platform === sys.IPHONE ||\n platform === sys.WP8 ||\n platform === sys.TIZEN ||\n platform === sys.BLACKBERRY ||\n platform === sys.XIAOMI_GAME ||\n isVivoGame ||\n isOppoGame ||\n isHuaweiGame ||\n isJKWGame ||\n isQttGame);\n\n sys.os = __getOS();\n sys.language = __getCurrentLanguage();\n var languageCode; \n if (CC_JSB) {\n languageCode = __getCurrentLanguageCode();\n }\n sys.languageCode = languageCode ? languageCode.toLowerCase() : undefined;\n sys.osVersion = __getOSVersion();\n sys.osMainVersion = parseInt(sys.osVersion);\n sys.browserType = null;\n sys.browserVersion = null;\n\n var w = window.innerWidth;\n var h = window.innerHeight;\n var ratio = window.devicePixelRatio || 1;\n sys.windowPixelResolution = {\n width: ratio * w,\n height: ratio * h\n };\n\n sys.localStorage = window.localStorage;\n\n var capabilities;\n capabilities = sys.capabilities = {\n \"canvas\": false,\n \"opengl\": true,\n \"webp\": true,\n };\n\n if (sys.isMobile) {\n capabilities[\"accelerometer\"] = true;\n capabilities[\"touches\"] = true;\n } else {\n // desktop\n capabilities[\"keyboard\"] = true;\n capabilities[\"mouse\"] = true;\n capabilities[\"touches\"] = false;\n }\n\n capabilities['imageBitmap'] = false;\n\n sys.__audioSupport = {\n ONLY_ONE: false,\n WEB_AUDIO: false,\n DELAY_CREATE_CTX: false,\n format: ['.mp3']\n };\n }\n else {\n // browser or runtime\n var win = window, nav = win.navigator, doc = document, docEle = doc.documentElement;\n var ua = nav.userAgent.toLowerCase();\n\n if (CC_EDITOR) {\n sys.isMobile = false;\n sys.platform = sys.EDITOR_PAGE;\n }\n else {\n /**\n * Indicate whether system is mobile system\n * @property {Boolean} isMobile\n */\n sys.isMobile = /mobile|android|iphone|ipad/.test(ua);\n\n /**\n * Indicate the running platform\n * @property {Number} platform\n */\n if (typeof FbPlayableAd !== \"undefined\") {\n sys.platform = sys.FB_PLAYABLE_ADS;\n }\n else {\n sys.platform = sys.isMobile ? sys.MOBILE_BROWSER : sys.DESKTOP_BROWSER;\n }\n }\n\n var currLanguage = nav.language;\n currLanguage = currLanguage ? currLanguage : nav.browserLanguage;\n\n /**\n * Get current language iso 639-1 code.\n * Examples of valid language codes include \"zh-tw\", \"en\", \"en-us\", \"fr\", \"fr-fr\", \"es-es\", etc.\n * The actual value totally depends on results provided by destination platform.\n * @property {String} languageCode\n */\n sys.languageCode = currLanguage.toLowerCase();\n\n currLanguage = currLanguage ? currLanguage.split(\"-\")[0] : sys.LANGUAGE_ENGLISH;\n\n /**\n * Indicate the current language of the running system\n * @property {String} language\n */\n sys.language = currLanguage;\n\n // Get the os of system\n var isAndroid = false, iOS = false, osVersion = '', osMainVersion = 0;\n var uaResult = /android\\s*(\\d+(?:\\.\\d+)*)/i.exec(ua) || /android\\s*(\\d+(?:\\.\\d+)*)/i.exec(nav.platform);\n if (uaResult) {\n isAndroid = true;\n osVersion = uaResult[1] || '';\n osMainVersion = parseInt(osVersion) || 0;\n }\n uaResult = /(iPad|iPhone|iPod).*OS ((\\d+_?){2,3})/i.exec(ua);\n if (uaResult) {\n iOS = true;\n osVersion = uaResult[2] || '';\n osMainVersion = parseInt(osVersion) || 0;\n }\n // refer to https://github.com/cocos-creator/engine/pull/5542 , thanks for contribition from @krapnikkk\n // ipad OS 13 safari identifies itself as \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/605.1.15 (KHTML, like Gecko)\" \n // so use maxTouchPoints to check whether it's desktop safari or not. \n // reference: https://stackoverflow.com/questions/58019463/how-to-detect-device-name-in-safari-on-ios-13-while-it-doesnt-show-the-correct\n // FIXME: should remove it when touch-enabled macs are available\n else if (/(iPhone|iPad|iPod)/.exec(nav.platform) || (nav.platform === 'MacIntel' && nav.maxTouchPoints && nav.maxTouchPoints > 1)) { \n iOS = true;\n osVersion = '';\n osMainVersion = 0;\n }\n\n var osName = sys.OS_UNKNOWN;\n if (nav.appVersion.indexOf(\"Win\") !== -1) osName = sys.OS_WINDOWS;\n else if (iOS) osName = sys.OS_IOS;\n else if (nav.appVersion.indexOf(\"Mac\") !== -1) osName = sys.OS_OSX;\n else if (nav.appVersion.indexOf(\"X11\") !== -1 && nav.appVersion.indexOf(\"Linux\") === -1) osName = sys.OS_UNIX;\n else if (isAndroid) osName = sys.OS_ANDROID;\n else if (nav.appVersion.indexOf(\"Linux\") !== -1 || ua.indexOf(\"ubuntu\") !== -1) osName = sys.OS_LINUX;\n\n /**\n * Indicate the running os name\n * @property {String} os\n */\n sys.os = osName;\n /**\n * Indicate the running os version\n * @property {String} osVersion\n */\n sys.osVersion = osVersion;\n /**\n * Indicate the running os main version\n * @property {Number} osMainVersion\n */\n sys.osMainVersion = osMainVersion;\n\n /**\n * Indicate the running browser type\n * @property {String | null} browserType\n */\n sys.browserType = sys.BROWSER_TYPE_UNKNOWN;\n /* Determine the browser type */\n (function(){\n var typeReg1 = /mqqbrowser|micromessenger|qqbrowser|sogou|qzone|liebao|maxthon|ucbs|360 aphone|360browser|baiduboxapp|baidubrowser|maxthon|mxbrowser|miuibrowser/i;\n var typeReg2 = /qq|ucbrowser|ubrowser|edge|HuaweiBrowser/i;\n var typeReg3 = /chrome|safari|firefox|trident|opera|opr\\/|oupeng/i;\n var browserTypes = typeReg1.exec(ua) || typeReg2.exec(ua) || typeReg3.exec(ua);\n\n var browserType = browserTypes ? browserTypes[0].toLowerCase() : sys.BROWSER_TYPE_UNKNOWN;\n\n if (browserType === \"safari\" && isAndroid)\n browserType = sys.BROWSER_TYPE_ANDROID;\n else if (browserType === \"qq\" && ua.match(/android.*applewebkit/i))\n browserType = sys.BROWSER_TYPE_ANDROID;\n let typeMap = {\n 'micromessenger': sys.BROWSER_TYPE_WECHAT,\n 'trident': sys.BROWSER_TYPE_IE,\n 'edge': sys.BROWSER_TYPE_EDGE,\n '360 aphone': sys.BROWSER_TYPE_360,\n 'mxbrowser': sys.BROWSER_TYPE_MAXTHON,\n 'opr/': sys.BROWSER_TYPE_OPERA,\n 'ubrowser': sys.BROWSER_TYPE_UC,\n 'huaweibrowser': sys.BROWSER_TYPE_HUAWEI,\n };\n \n if(browserType === \"qqbrowser\" || browserType === \"mqqbrowser\"){\n if(ua.match(/wechat|micromessenger/i)){\n browserType = sys.BROWSER_TYPE_WECHAT;\n }\n }\n\n sys.browserType = typeMap[browserType] || browserType;\n })();\n\n /**\n * Indicate the running browser version\n * @property {String | null} browserVersion\n */\n sys.browserVersion = \"\";\n /* Determine the browser version number */\n (function(){\n var versionReg1 = /(mqqbrowser|micromessenger|qqbrowser|sogou|qzone|liebao|maxthon|uc|ucbs|360 aphone|360|baiduboxapp|baidu|maxthon|mxbrowser|miui(?:.hybrid)?)(mobile)?(browser)?\\/?([\\d.]+)/i;\n var versionReg2 = /(qq|chrome|safari|firefox|trident|opera|opr\\/|oupeng)(mobile)?(browser)?\\/?([\\d.]+)/i;\n var tmp = ua.match(versionReg1);\n if(!tmp) tmp = ua.match(versionReg2);\n sys.browserVersion = tmp ? tmp[4] : \"\";\n })();\n\n var w = window.innerWidth || document.documentElement.clientWidth;\n var h = window.innerHeight || document.documentElement.clientHeight;\n var ratio = window.devicePixelRatio || 1;\n\n /**\n * Indicate the real pixel resolution of the whole game window\n * @property {Size} windowPixelResolution\n */\n sys.windowPixelResolution = {\n width: ratio * w,\n height: ratio * h\n };\n\n sys._checkWebGLRenderMode = function () {\n if (cc.game.renderType !== cc.game.RENDER_TYPE_WEBGL)\n throw new Error(\"This feature supports WebGL render mode only.\");\n };\n\n var _tmpCanvas1 = document.createElement(\"canvas\");\n\n var create3DContext = function (canvas, opt_attribs, opt_contextType) {\n if (opt_contextType) {\n try {\n return canvas.getContext(opt_contextType, opt_attribs);\n } catch (e) {\n return null;\n }\n }\n else {\n return create3DContext(canvas, opt_attribs, \"webgl\") ||\n create3DContext(canvas, opt_attribs, \"experimental-webgl\") ||\n create3DContext(canvas, opt_attribs, \"webkit-3d\") ||\n create3DContext(canvas, opt_attribs, \"moz-webgl\") ||\n null;\n }\n };\n\n /**\n * cc.sys.localStorage is a local storage component.\n * @property {Object} localStorage\n */\n try {\n var localStorage = sys.localStorage = win.localStorage;\n localStorage.setItem(\"storage\", \"\");\n localStorage.removeItem(\"storage\");\n localStorage = null;\n } catch (e) {\n var warn = function () {\n cc.warnID(5200);\n };\n sys.localStorage = {\n getItem : warn,\n setItem : warn,\n removeItem : warn,\n clear : warn\n };\n }\n\n var _supportWebp = _tmpCanvas1.toDataURL('image/webp').startsWith('data:image/webp');\n var _supportCanvas = !!_tmpCanvas1.getContext(\"2d\");\n var _supportWebGL = false;\n if (CC_TEST) {\n _supportWebGL = false;\n }\n else if (win.WebGLRenderingContext) {\n _supportWebGL = true;\n }\n\n /**\n * The capabilities of the current platform\n * @property {Object} capabilities\n */\n var capabilities = sys.capabilities = {\n \"canvas\": _supportCanvas,\n \"opengl\": _supportWebGL,\n \"webp\": _supportWebp,\n 'imageBitmap': false,\n };\n\n if (typeof createImageBitmap !== 'undefined' && typeof Blob !== 'undefined') {\n _tmpCanvas1.width = _tmpCanvas1.height = 2;\n createImageBitmap(_tmpCanvas1, {}).then(imageBitmap => {\n capabilities.imageBitmap = true;\n imageBitmap.close && imageBitmap.close();\n }).catch(err => {});\n }\n if (docEle['ontouchstart'] !== undefined || doc['ontouchstart'] !== undefined || nav.msPointerEnabled)\n capabilities[\"touches\"] = true;\n if (docEle['onmouseup'] !== undefined)\n capabilities[\"mouse\"] = true;\n if (docEle['onkeyup'] !== undefined)\n capabilities[\"keyboard\"] = true;\n if (win.DeviceMotionEvent || win.DeviceOrientationEvent)\n capabilities[\"accelerometer\"] = true;\n\n var __audioSupport;\n\n /**\n * Audio support in the browser\n *\n * MULTI_CHANNEL : Multiple audio while playing - If it doesn't, you can only play background music\n * WEB_AUDIO : Support for WebAudio - Support W3C WebAudio standards, all of the audio can be played\n * AUTOPLAY : Supports auto-play audio - if Don‘t support it, On a touch detecting background music canvas, and then replay\n * REPLAY_AFTER_TOUCH : The first music will fail, must be replay after touchstart\n * USE_EMPTIED_EVENT : Whether to use the emptied event to replace load callback\n * DELAY_CREATE_CTX : delay created the context object - only webAudio\n * NEED_MANUAL_LOOP : loop attribute failure, need to perform loop manually\n *\n * May be modifications for a few browser version\n */\n (function(){\n\n var DEBUG = false;\n\n var version = sys.browserVersion;\n\n // check if browser supports Web Audio\n // check Web Audio's context\n var supportWebAudio = !!(window.AudioContext || window.webkitAudioContext || window.mozAudioContext);\n\n __audioSupport = { ONLY_ONE: false, WEB_AUDIO: supportWebAudio, DELAY_CREATE_CTX: false };\n\n if (sys.os === sys.OS_IOS) {\n // IOS no event that used to parse completed callback\n // this time is not complete, can not play\n //\n __audioSupport.USE_LOADER_EVENT = 'loadedmetadata';\n }\n\n if (sys.browserType === sys.BROWSER_TYPE_FIREFOX) {\n __audioSupport.DELAY_CREATE_CTX = true;\n __audioSupport.USE_LOADER_EVENT = 'canplay';\n }\n\n if (sys.os === sys.OS_ANDROID) {\n if (sys.browserType === sys.BROWSER_TYPE_UC) {\n __audioSupport.ONE_SOURCE = true;\n }\n }\n\n if(DEBUG){\n setTimeout(function(){\n cc.log('browse type: ' + sys.browserType);\n cc.log('browse version: ' + version);\n cc.log('MULTI_CHANNEL: ' + __audioSupport.MULTI_CHANNEL);\n cc.log('WEB_AUDIO: ' + __audioSupport.WEB_AUDIO);\n cc.log('AUTOPLAY: ' + __audioSupport.AUTOPLAY);\n }, 0);\n }\n })();\n\n try {\n if (__audioSupport.WEB_AUDIO) {\n __audioSupport.context = new (window.AudioContext || window.webkitAudioContext || window.mozAudioContext)();\n if(__audioSupport.DELAY_CREATE_CTX) {\n setTimeout(function(){ __audioSupport.context = new (window.AudioContext || window.webkitAudioContext || window.mozAudioContext)(); }, 0);\n }\n }\n } catch(error) {\n __audioSupport.WEB_AUDIO = false;\n cc.logID(5201);\n }\n\n var formatSupport = [];\n\n (function(){\n var audio = document.createElement('audio');\n if(audio.canPlayType) {\n var ogg = audio.canPlayType('audio/ogg; codecs=\"vorbis\"');\n if (ogg) formatSupport.push('.ogg');\n var mp3 = audio.canPlayType('audio/mpeg');\n if (mp3) formatSupport.push('.mp3');\n var wav = audio.canPlayType('audio/wav; codecs=\"1\"');\n if (wav) formatSupport.push('.wav');\n var mp4 = audio.canPlayType('audio/mp4');\n if (mp4) formatSupport.push('.mp4');\n var m4a = audio.canPlayType('audio/x-m4a');\n if (m4a) formatSupport.push('.m4a');\n }\n })();\n __audioSupport.format = formatSupport;\n\n sys.__audioSupport = __audioSupport;\n }\n\n /**\n * !#en\n * Network type enumeration\n * !#zh\n * 网络类型枚举\n *\n * @enum sys.NetworkType\n */\n sys.NetworkType = {\n /**\n * !#en\n * Network is unreachable.\n * !#zh\n * 网络不通\n *\n * @property {Number} NONE\n */\n NONE: 0,\n /**\n * !#en\n * Network is reachable via WiFi or cable.\n * !#zh\n * 通过无线或者有线本地网络连接因特网\n *\n * @property {Number} LAN\n */\n LAN: 1,\n /**\n * !#en\n * Network is reachable via Wireless Wide Area Network\n * !#zh\n * 通过蜂窝移动网络连接因特网\n *\n * @property {Number} WWAN\n */\n WWAN: 2\n };\n\n /**\n * @class sys\n */\n\n /**\n * !#en\n * Get the network type of current device, return cc.sys.NetworkType.LAN if failure.\n * !#zh\n * 获取当前设备的网络类型, 如果网络类型无法获取,默认将返回 cc.sys.NetworkType.LAN\n *\n * @method getNetworkType\n * @return {sys.NetworkType}\n */\n sys.getNetworkType = function() {\n // TODO: need to implement this for mobile phones.\n return sys.NetworkType.LAN;\n };\n\n /**\n * !#en\n * Get the battery level of current device, return 1.0 if failure.\n * !#zh\n * 获取当前设备的电池电量,如果电量无法获取,默认将返回 1\n *\n * @method getBatteryLevel\n * @return {Number} - 0.0 ~ 1.0\n */\n sys.getBatteryLevel = function() {\n // TODO: need to implement this for mobile phones.\n return 1.0;\n };\n\n /**\n * Forces the garbage collection, only available in JSB\n * @method garbageCollect\n */\n sys.garbageCollect = function () {\n // N/A in web\n };\n\n /**\n * Restart the JS VM, only available in JSB\n * @method restartVM\n */\n sys.restartVM = function () {\n // N/A in web\n };\n\n /**\n * Check whether an object is valid,\n * In web engine, it will return true if the object exist\n * In native engine, it will return true if the JS object and the correspond native object are both valid\n * @method isObjectValid\n * @param {Object} obj\n * @return {Boolean} Validity of the object\n */\n sys.isObjectValid = function (obj) {\n if (obj) {\n return true;\n }\n return false;\n };\n\n /**\n * Dump system informations\n * @method dump\n */\n sys.dump = function () {\n var self = this;\n var str = \"\";\n str += \"isMobile : \" + self.isMobile + \"\\r\\n\";\n str += \"language : \" + self.language + \"\\r\\n\";\n str += \"browserType : \" + self.browserType + \"\\r\\n\";\n str += \"browserVersion : \" + self.browserVersion + \"\\r\\n\";\n str += \"capabilities : \" + JSON.stringify(self.capabilities) + \"\\r\\n\";\n str += \"os : \" + self.os + \"\\r\\n\";\n str += \"osVersion : \" + self.osVersion + \"\\r\\n\";\n str += \"platform : \" + self.platform + \"\\r\\n\";\n str += \"Using \" + (cc.game.renderType === cc.game.RENDER_TYPE_WEBGL ? \"WEBGL\" : \"CANVAS\") + \" renderer.\" + \"\\r\\n\";\n cc.log(str);\n };\n\n /**\n * Open a url in browser\n * @method openURL\n * @param {String} url\n */\n sys.openURL = function (url) {\n if (CC_JSB || CC_RUNTIME) {\n jsb.openURL(url);\n }\n else {\n window.open(url);\n }\n };\n\n /**\n * Get the number of milliseconds elapsed since 1 January 1970 00:00:00 UTC.\n * @method now\n * @return {Number}\n */\n sys.now = function () {\n if (Date.now) {\n return Date.now();\n }\n else {\n return +(new Date);\n }\n };\n\n return sys;\n}\n\nvar sys = cc && cc.sys ? cc.sys : initSys();\n\nmodule.exports = sys;\n","/****************************************************************************\n Copyright (c) 2008-2010 Ricardo Quesada\n Copyright (c) 2011-2012 cocos2d-x.org\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos2d-x.org\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst EventTarget = require('../event/event-target');\nconst js = require('../platform/js');\nconst renderer = require('../renderer');\nrequire('../platform/CCClass');\n\nvar __BrowserGetter = {\n init: function(){\n this.html = document.getElementsByTagName(\"html\")[0];\n },\n availWidth: function(frame){\n if (!frame || frame === this.html)\n return window.innerWidth;\n else\n return frame.clientWidth;\n },\n availHeight: function(frame){\n if (!frame || frame === this.html)\n return window.innerHeight;\n else\n return frame.clientHeight;\n },\n meta: {\n \"width\": \"device-width\"\n },\n adaptationType: cc.sys.browserType\n};\n\nif (cc.sys.os === cc.sys.OS_IOS) // All browsers are WebView\n __BrowserGetter.adaptationType = cc.sys.BROWSER_TYPE_SAFARI;\n\nswitch (__BrowserGetter.adaptationType) {\n case cc.sys.BROWSER_TYPE_SAFARI:\n case cc.sys.BROWSER_TYPE_SOUGOU:\n case cc.sys.BROWSER_TYPE_UC:\n __BrowserGetter.meta[\"minimal-ui\"] = \"true\";\n __BrowserGetter.availWidth = function(frame){\n return frame.clientWidth;\n };\n __BrowserGetter.availHeight = function(frame){\n return frame.clientHeight;\n };\n break;\n}\n\nvar _scissorRect = null;\n\n/**\n * cc.view is the singleton object which represents the game window.
\n * It's main task include:
\n * - Apply the design resolution policy
\n * - Provide interaction with the window, like resize event on web, retina display support, etc...
\n * - Manage the game view port which can be different with the window
\n * - Manage the content scale and translation
\n *
\n * Since the cc.view is a singleton, you don't need to call any constructor or create functions,
\n * the standard way to use it is by calling:
\n * - cc.view.methodName();
\n *\n * @class View\n * @extends EventTarget\n */\nvar View = function () {\n EventTarget.call(this);\n\n var _t = this, _strategyer = cc.ContainerStrategy, _strategy = cc.ContentStrategy;\n\n __BrowserGetter.init(this);\n\n // Size of parent node that contains cc.game.container and cc.game.canvas\n _t._frameSize = cc.size(0, 0);\n\n // resolution size, it is the size appropriate for the app resources.\n _t._designResolutionSize = cc.size(0, 0);\n _t._originalDesignResolutionSize = cc.size(0, 0);\n _t._scaleX = 1;\n _t._scaleY = 1;\n // Viewport is the container's rect related to content's coordinates in pixel\n _t._viewportRect = cc.rect(0, 0, 0, 0);\n // The visible rect in content's coordinate in point\n _t._visibleRect = cc.rect(0, 0, 0, 0);\n // Auto full screen disabled by default\n _t._autoFullScreen = false;\n // The device's pixel ratio (for retina displays)\n _t._devicePixelRatio = 1;\n if(CC_JSB) {\n _t._maxPixelRatio = 4;\n } else {\n _t._maxPixelRatio = 2;\n }\n // Retina disabled by default\n _t._retinaEnabled = false;\n // Custom callback for resize event\n _t._resizeCallback = null;\n _t._resizing = false;\n _t._resizeWithBrowserSize = false;\n _t._orientationChanging = true;\n _t._isRotated = false;\n _t._orientation = cc.macro.ORIENTATION_AUTO;\n _t._isAdjustViewport = true;\n _t._antiAliasEnabled = false;\n\n // Setup system default resolution policies\n _t._resolutionPolicy = null;\n _t._rpExactFit = new cc.ResolutionPolicy(_strategyer.EQUAL_TO_FRAME, _strategy.EXACT_FIT);\n _t._rpShowAll = new cc.ResolutionPolicy(_strategyer.EQUAL_TO_FRAME, _strategy.SHOW_ALL);\n _t._rpNoBorder = new cc.ResolutionPolicy(_strategyer.EQUAL_TO_FRAME, _strategy.NO_BORDER);\n _t._rpFixedHeight = new cc.ResolutionPolicy(_strategyer.EQUAL_TO_FRAME, _strategy.FIXED_HEIGHT);\n _t._rpFixedWidth = new cc.ResolutionPolicy(_strategyer.EQUAL_TO_FRAME, _strategy.FIXED_WIDTH);\n\n cc.game.once(cc.game.EVENT_ENGINE_INITED, this.init, this);\n};\n\ncc.js.extend(View, EventTarget);\n\ncc.js.mixin(View.prototype, {\n init () {\n this._initFrameSize();\n\n var w = cc.game.canvas.width, h = cc.game.canvas.height;\n this._designResolutionSize.width = w;\n this._designResolutionSize.height = h;\n this._originalDesignResolutionSize.width = w;\n this._originalDesignResolutionSize.height = h;\n this._viewportRect.width = w;\n this._viewportRect.height = h;\n this._visibleRect.width = w;\n this._visibleRect.height = h;\n\n cc.winSize.width = this._visibleRect.width;\n cc.winSize.height = this._visibleRect.height;\n cc.visibleRect && cc.visibleRect.init(this._visibleRect);\n },\n\n // Resize helper functions\n _resizeEvent: function (forceOrEvent) {\n var view;\n if (this.setDesignResolutionSize) {\n view = this;\n } else {\n view = cc.view;\n }\n // HACK: some browsers can't update window size immediately\n // need to handle resize event callback on the next tick\n let sys = cc.sys;\n if (sys.browserType === sys.BROWSER_TYPE_UC && sys.os === sys.OS_IOS) {\n setTimeout(function () {\n view._resizeEvent(forceOrEvent);\n }, 0)\n return;\n }\n\n // Check frame size changed or not\n var prevFrameW = view._frameSize.width, prevFrameH = view._frameSize.height, prevRotated = view._isRotated;\n if (cc.sys.isMobile) {\n var containerStyle = cc.game.container.style,\n margin = containerStyle.margin;\n containerStyle.margin = '0';\n containerStyle.display = 'none';\n view._initFrameSize();\n containerStyle.margin = margin;\n containerStyle.display = 'block';\n }\n else {\n view._initFrameSize();\n }\n if (forceOrEvent !== true && view._isRotated === prevRotated && view._frameSize.width === prevFrameW && view._frameSize.height === prevFrameH)\n return;\n\n // Frame size changed, do resize works\n var width = view._originalDesignResolutionSize.width;\n var height = view._originalDesignResolutionSize.height;\n view._resizing = true;\n if (width > 0)\n view.setDesignResolutionSize(width, height, view._resolutionPolicy);\n view._resizing = false;\n\n view.emit('canvas-resize');\n if (view._resizeCallback) {\n view._resizeCallback.call();\n }\n },\n\n _orientationChange: function () {\n cc.view._orientationChanging = true;\n cc.view._resizeEvent();\n // HACK: show nav bar on iOS safari\n // safari will enter fullscreen when rotate to landscape\n // need to exit fullscreen when rotate back to portrait, scrollTo(0, 1) works.\n if (cc.sys.browserType === cc.sys.BROWSER_TYPE_SAFARI && cc.sys.isMobile) {\n setTimeout(() => {\n if (window.innerHeight > window.innerWidth) {\n window.scrollTo(0, 1);\n }\n }, 500);\n }\n },\n\n _resize: function() {\n //force resize when size is changed at native\n cc.view._resizeEvent(CC_JSB);\n },\n\n /**\n * !#en\n * Sets view's target-densitydpi for android mobile browser. it can be set to:
\n * 1. cc.macro.DENSITYDPI_DEVICE, value is \"device-dpi\"
\n * 2. cc.macro.DENSITYDPI_HIGH, value is \"high-dpi\" (default value)
\n * 3. cc.macro.DENSITYDPI_MEDIUM, value is \"medium-dpi\" (browser's default value)
\n * 4. cc.macro.DENSITYDPI_LOW, value is \"low-dpi\"
\n * 5. Custom value, e.g: \"480\"
\n * !#zh 设置目标内容的每英寸像素点密度。\n *\n * @method setTargetDensityDPI\n * @param {String} densityDPI\n * @deprecated since v2.0\n */\n\n /**\n * !#en\n * Returns the current target-densitydpi value of cc.view.\n * !#zh 获取目标内容的每英寸像素点密度。\n * @method getTargetDensityDPI\n * @returns {String}\n * @deprecated since v2.0\n */\n\n /**\n * !#en\n * Sets whether resize canvas automatically when browser's size changed.
\n * Useful only on web.\n * !#zh 设置当发现浏览器的尺寸改变时,是否自动调整 canvas 尺寸大小。\n * 仅在 Web 模式下有效。\n * @method resizeWithBrowserSize\n * @param {Boolean} enabled - Whether enable automatic resize with browser's resize event\n */\n resizeWithBrowserSize: function (enabled) {\n if (enabled) {\n //enable\n if (!this._resizeWithBrowserSize) {\n this._resizeWithBrowserSize = true;\n window.addEventListener('resize', this._resize);\n window.addEventListener('orientationchange', this._orientationChange);\n }\n } else {\n //disable\n if (this._resizeWithBrowserSize) {\n this._resizeWithBrowserSize = false;\n window.removeEventListener('resize', this._resize);\n window.removeEventListener('orientationchange', this._orientationChange);\n }\n }\n },\n\n /**\n * !#en\n * Sets the callback function for cc.view's resize action,
\n * this callback will be invoked before applying resolution policy,
\n * so you can do any additional modifications within the callback.
\n * Useful only on web.\n * !#zh 设置 cc.view 调整视窗尺寸行为的回调函数,\n * 这个回调函数会在应用适配模式之前被调用,\n * 因此你可以在这个回调函数内添加任意附加改变,\n * 仅在 Web 平台下有效。\n * @method setResizeCallback\n * @param {Function|Null} callback - The callback function\n */\n setResizeCallback: function (callback) {\n if (CC_EDITOR) return;\n if (typeof callback === 'function' || callback == null) {\n this._resizeCallback = callback;\n }\n },\n\n /**\n * !#en\n * Sets the orientation of the game, it can be landscape, portrait or auto.\n * When set it to landscape or portrait, and screen w/h ratio doesn't fit, \n * cc.view will automatically rotate the game canvas using CSS.\n * Note that this function doesn't have any effect in native, \n * in native, you need to set the application orientation in native project settings\n * !#zh 设置游戏屏幕朝向,它能够是横版,竖版或自动。\n * 当设置为横版或竖版,并且屏幕的宽高比例不匹配时,\n * cc.view 会自动用 CSS 旋转游戏场景的 canvas,\n * 这个方法不会对 native 部分产生任何影响,对于 native 而言,你需要在应用设置中的设置排版。\n * @method setOrientation\n * @param {Number} orientation - Possible values: cc.macro.ORIENTATION_LANDSCAPE | cc.macro.ORIENTATION_PORTRAIT | cc.macro.ORIENTATION_AUTO\n */\n setOrientation: function (orientation) {\n orientation = orientation & cc.macro.ORIENTATION_AUTO;\n if (orientation && this._orientation !== orientation) {\n this._orientation = orientation;\n var designWidth = this._originalDesignResolutionSize.width;\n var designHeight = this._originalDesignResolutionSize.height;\n this.setDesignResolutionSize(designWidth, designHeight, this._resolutionPolicy);\n }\n },\n\n _initFrameSize: function () {\n var locFrameSize = this._frameSize;\n var w = __BrowserGetter.availWidth(cc.game.frame);\n var h = __BrowserGetter.availHeight(cc.game.frame);\n var isLandscape = w >= h;\n\n if (CC_EDITOR || !cc.sys.isMobile ||\n (isLandscape && this._orientation & cc.macro.ORIENTATION_LANDSCAPE) || \n (!isLandscape && this._orientation & cc.macro.ORIENTATION_PORTRAIT)) {\n locFrameSize.width = w;\n locFrameSize.height = h;\n cc.game.container.style['-webkit-transform'] = 'rotate(0deg)';\n cc.game.container.style.transform = 'rotate(0deg)';\n this._isRotated = false;\n }\n else {\n locFrameSize.width = h;\n locFrameSize.height = w;\n cc.game.container.style['-webkit-transform'] = 'rotate(90deg)';\n cc.game.container.style.transform = 'rotate(90deg)';\n cc.game.container.style['-webkit-transform-origin'] = '0px 0px 0px';\n cc.game.container.style.transformOrigin = '0px 0px 0px';\n this._isRotated = true;\n }\n if (this._orientationChanging) {\n setTimeout(function () {\n cc.view._orientationChanging = false;\n }, 1000);\n }\n },\n\n _setViewportMeta: function (metas, overwrite) {\n var vp = document.getElementById(\"cocosMetaElement\");\n if(vp && overwrite){\n document.head.removeChild(vp);\n }\n\n var elems = document.getElementsByName(\"viewport\"),\n currentVP = elems ? elems[0] : null,\n content, key, pattern;\n\n content = currentVP ? currentVP.content : \"\";\n vp = vp || document.createElement(\"meta\");\n vp.id = \"cocosMetaElement\";\n vp.name = \"viewport\";\n vp.content = \"\";\n\n for (key in metas) {\n if (content.indexOf(key) == -1) {\n content += \",\" + key + \"=\" + metas[key];\n }\n else if (overwrite) {\n pattern = new RegExp(key+\"\\s*=\\s*[^,]+\");\n content = content.replace(pattern, key + \"=\" + metas[key]);\n }\n }\n if(/^,/.test(content))\n content = content.substr(1);\n\n vp.content = content;\n // For adopting certain android devices which don't support second viewport\n if (currentVP)\n currentVP.content = content;\n\n document.head.appendChild(vp);\n },\n\n _adjustViewportMeta: function () {\n if (this._isAdjustViewport && !CC_JSB && !CC_RUNTIME) {\n this._setViewportMeta(__BrowserGetter.meta, false);\n this._isAdjustViewport = false;\n }\n },\n\n /**\n * !#en\n * Sets whether the engine modify the \"viewport\" meta in your web page.
\n * It's enabled by default, we strongly suggest you not to disable it.
\n * And even when it's enabled, you can still set your own \"viewport\" meta, it won't be overridden
\n * Only useful on web\n * !#zh 设置引擎是否调整 viewport meta 来配合屏幕适配。\n * 默认设置为启动,我们强烈建议你不要将它设置为关闭。\n * 即使当它启动时,你仍然能够设置你的 viewport meta,它不会被覆盖。\n * 仅在 Web 模式下有效\n * @method adjustViewportMeta\n * @param {Boolean} enabled - Enable automatic modification to \"viewport\" meta\n */\n adjustViewportMeta: function (enabled) {\n this._isAdjustViewport = enabled;\n },\n\n /**\n * !#en\n * Retina support is enabled by default for Apple device but disabled for other devices,
\n * it takes effect only when you called setDesignResolutionPolicy
\n * Only useful on web\n * !#zh 对于 Apple 这种支持 Retina 显示的设备上默认进行优化而其他类型设备默认不进行优化,\n * 它仅会在你调用 setDesignResolutionPolicy 方法时有影响。\n * 仅在 Web 模式下有效。\n * @method enableRetina\n * @param {Boolean} enabled - Enable or disable retina display\n */\n enableRetina: function(enabled) {\n if (CC_EDITOR && enabled) {\n cc.warn('Can not enable retina in Editor.');\n return;\n }\n this._retinaEnabled = !!enabled;\n },\n\n /**\n * !#en\n * Check whether retina display is enabled.
\n * Only useful on web\n * !#zh 检查是否对 Retina 显示设备进行优化。\n * 仅在 Web 模式下有效。\n * @method isRetinaEnabled\n * @return {Boolean}\n */\n isRetinaEnabled: function() {\n if (CC_EDITOR) {\n return false;\n }\n return this._retinaEnabled;\n },\n\n /**\n * !#en Whether to Enable on anti-alias\n * !#zh 控制抗锯齿是否开启\n * @method enableAntiAlias\n * @param {Boolean} enabled - Enable or not anti-alias\n * @deprecated cc.view.enableAntiAlias is deprecated, please use cc.Texture2D.setFilters instead\n * @since v2.3.0\n */\n enableAntiAlias: function (enabled) {\n cc.warnID(9200);\n if (this._antiAliasEnabled === enabled) {\n return;\n }\n this._antiAliasEnabled = enabled;\n if(cc.game.renderType === cc.game.RENDER_TYPE_WEBGL) {\n var cache = cc.assetManager.assets;\n cache.forEach(function (asset) {\n if (asset instanceof cc.Texture2D) {\n var Filter = cc.Texture2D.Filter;\n if (enabled) {\n asset.setFilters(Filter.LINEAR, Filter.LINEAR);\n }\n else {\n asset.setFilters(Filter.NEAREST, Filter.NEAREST);\n }\n }\n });\n }\n else if(cc.game.renderType === cc.game.RENDER_TYPE_CANVAS) {\n var ctx = cc.game.canvas.getContext('2d');\n ctx.imageSmoothingEnabled = enabled;\n ctx.mozImageSmoothingEnabled = enabled;\n }\n },\n\n /**\n * !#en Returns whether the current enable on anti-alias\n * !#zh 返回当前是否抗锯齿\n * @method isAntiAliasEnabled\n * @return {Boolean}\n */\n isAntiAliasEnabled: function () {\n return this._antiAliasEnabled;\n },\n /**\n * !#en\n * If enabled, the application will try automatically to enter full screen mode on mobile devices
\n * You can pass true as parameter to enable it and disable it by passing false.
\n * Only useful on web\n * !#zh 启动时,移动端游戏会在移动端自动尝试进入全屏模式。\n * 你能够传入 true 为参数去启动它,用 false 参数来关闭它。\n * @method enableAutoFullScreen\n * @param {Boolean} enabled - Enable or disable auto full screen on mobile devices\n */\n enableAutoFullScreen: function(enabled) {\n if (enabled && \n enabled !== this._autoFullScreen && \n cc.sys.isMobile) {\n // Automatically full screen when user touches on mobile version\n this._autoFullScreen = true;\n cc.screen.autoFullScreen(cc.game.frame);\n }\n else {\n this._autoFullScreen = false;\n cc.screen.disableAutoFullScreen(cc.game.frame);\n }\n },\n\n /**\n * !#en\n * Check whether auto full screen is enabled.
\n * Only useful on web\n * !#zh 检查自动进入全屏模式是否启动。\n * 仅在 Web 模式下有效。\n * @method isAutoFullScreenEnabled\n * @return {Boolean} Auto full screen enabled or not\n */\n isAutoFullScreenEnabled: function() {\n return this._autoFullScreen;\n },\n\n /*\n * Not support on native.
\n * On web, it sets the size of the canvas.\n * !#zh 这个方法并不支持 native 平台,在 Web 平台下,可以用来设置 canvas 尺寸。\n * @method setCanvasSize\n * @param {Number} width\n * @param {Number} height\n */\n setCanvasSize: function (width, height) {\n var canvas = cc.game.canvas;\n var container = cc.game.container;\n\n canvas.width = width * this._devicePixelRatio;\n canvas.height = height * this._devicePixelRatio;\n\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n\n container.style.width = width + 'px';\n container.style.height = height + 'px';\n\n this._resizeEvent();\n },\n\n /**\n * !#en\n * Returns the canvas size of the view.
\n * On native platforms, it returns the screen size since the view is a fullscreen view.
\n * On web, it returns the size of the canvas element.\n * !#zh 返回视图中 canvas 的尺寸。\n * 在 native 平台下,它返回全屏视图下屏幕的尺寸。\n * 在 Web 平台下,它返回 canvas 元素尺寸。\n * @method getCanvasSize\n * @return {Size}\n */\n getCanvasSize: function () {\n return cc.size(cc.game.canvas.width, cc.game.canvas.height);\n },\n\n /**\n * !#en\n * Returns the frame size of the view.
\n * On native platforms, it returns the screen size since the view is a fullscreen view.
\n * On web, it returns the size of the canvas's outer DOM element.\n * !#zh 返回视图中边框尺寸。\n * 在 native 平台下,它返回全屏视图下屏幕的尺寸。\n * 在 web 平台下,它返回 canvas 元素的外层 DOM 元素尺寸。\n * @method getFrameSize\n * @return {Size}\n */\n getFrameSize: function () {\n return cc.size(this._frameSize.width, this._frameSize.height);\n },\n\n /**\n * !#en\n * On native, it sets the frame size of view.
\n * On web, it sets the size of the canvas's outer DOM element.\n * !#zh 在 native 平台下,设置视图框架尺寸。\n * 在 web 平台下,设置 canvas 外层 DOM 元素尺寸。\n * @method setFrameSize\n * @param {Number} width\n * @param {Number} height\n */\n setFrameSize: function (width, height) {\n this._frameSize.width = width;\n this._frameSize.height = height;\n cc.game.frame.style.width = width + \"px\";\n cc.game.frame.style.height = height + \"px\";\n this._resizeEvent(true);\n },\n\n /**\n * !#en\n * Returns the visible area size of the view port.\n * !#zh 返回视图窗口可见区域尺寸。\n * @method getVisibleSize\n * @return {Size}\n */\n getVisibleSize: function () {\n return cc.size(this._visibleRect.width,this._visibleRect.height);\n },\n\n /**\n * !#en\n * Returns the visible area size of the view port.\n * !#zh 返回视图窗口可见区域像素尺寸。\n * @method getVisibleSizeInPixel\n * @return {Size}\n */\n getVisibleSizeInPixel: function () {\n return cc.size( this._visibleRect.width * this._scaleX,\n this._visibleRect.height * this._scaleY );\n },\n\n /**\n * !#en\n * Returns the visible origin of the view port.\n * !#zh 返回视图窗口可见区域原点。\n * @method getVisibleOrigin\n * @return {Vec2}\n */\n getVisibleOrigin: function () {\n return cc.v2(this._visibleRect.x,this._visibleRect.y);\n },\n\n /**\n * !#en\n * Returns the visible origin of the view port.\n * !#zh 返回视图窗口可见区域像素原点。\n * @method getVisibleOriginInPixel\n * @return {Vec2}\n */\n getVisibleOriginInPixel: function () {\n return cc.v2(this._visibleRect.x * this._scaleX,\n this._visibleRect.y * this._scaleY);\n },\n\n /**\n * !#en\n * Returns the current resolution policy\n * !#zh 返回当前分辨率方案\n * @see cc.ResolutionPolicy\n * @method getResolutionPolicy\n * @return {ResolutionPolicy}\n */\n getResolutionPolicy: function () {\n return this._resolutionPolicy;\n },\n\n /**\n * !#en\n * Sets the current resolution policy\n * !#zh 设置当前分辨率模式\n * @see cc.ResolutionPolicy\n * @method setResolutionPolicy\n * @param {ResolutionPolicy|Number} resolutionPolicy\n */\n setResolutionPolicy: function (resolutionPolicy) {\n var _t = this;\n if (resolutionPolicy instanceof cc.ResolutionPolicy) {\n _t._resolutionPolicy = resolutionPolicy;\n }\n // Ensure compatibility with JSB\n else {\n var _locPolicy = cc.ResolutionPolicy;\n if(resolutionPolicy === _locPolicy.EXACT_FIT)\n _t._resolutionPolicy = _t._rpExactFit;\n if(resolutionPolicy === _locPolicy.SHOW_ALL)\n _t._resolutionPolicy = _t._rpShowAll;\n if(resolutionPolicy === _locPolicy.NO_BORDER)\n _t._resolutionPolicy = _t._rpNoBorder;\n if(resolutionPolicy === _locPolicy.FIXED_HEIGHT)\n _t._resolutionPolicy = _t._rpFixedHeight;\n if(resolutionPolicy === _locPolicy.FIXED_WIDTH)\n _t._resolutionPolicy = _t._rpFixedWidth;\n }\n },\n\n /**\n * !#en\n * Sets the resolution policy with designed view size in points.
\n * The resolution policy include:
\n * [1] ResolutionExactFit Fill screen by stretch-to-fit: if the design resolution ratio of width to height is different from the screen resolution ratio, your game view will be stretched.
\n * [2] ResolutionNoBorder Full screen without black border: if the design resolution ratio of width to height is different from the screen resolution ratio, two areas of your game view will be cut.
\n * [3] ResolutionShowAll Full screen with black border: if the design resolution ratio of width to height is different from the screen resolution ratio, two black borders will be shown.
\n * [4] ResolutionFixedHeight Scale the content's height to screen's height and proportionally scale its width
\n * [5] ResolutionFixedWidth Scale the content's width to screen's width and proportionally scale its height
\n * [cc.ResolutionPolicy] [Web only feature] Custom resolution policy, constructed by cc.ResolutionPolicy
\n * !#zh 通过设置设计分辨率和匹配模式来进行游戏画面的屏幕适配。\n * @method setDesignResolutionSize\n * @param {Number} width Design resolution width.\n * @param {Number} height Design resolution height.\n * @param {ResolutionPolicy|Number} resolutionPolicy The resolution policy desired\n */\n setDesignResolutionSize: function (width, height, resolutionPolicy) {\n // Defensive code\n if( !(width > 0 && height > 0) ){\n cc.errorID(2200);\n return;\n }\n\n this.setResolutionPolicy(resolutionPolicy);\n var policy = this._resolutionPolicy;\n if (policy) {\n policy.preApply(this);\n }\n\n // Reinit frame size\n if (cc.sys.isMobile)\n this._adjustViewportMeta();\n\n // Permit to re-detect the orientation of device.\n this._orientationChanging = true;\n // If resizing, then frame size is already initialized, this logic should be improved\n if (!this._resizing)\n this._initFrameSize();\n\n if (!policy) {\n cc.logID(2201);\n return;\n }\n\n this._originalDesignResolutionSize.width = this._designResolutionSize.width = width;\n this._originalDesignResolutionSize.height = this._designResolutionSize.height = height;\n\n var result = policy.apply(this, this._designResolutionSize);\n\n if(result.scale && result.scale.length === 2){\n this._scaleX = result.scale[0];\n this._scaleY = result.scale[1];\n }\n\n if(result.viewport){\n var vp = this._viewportRect,\n vb = this._visibleRect,\n rv = result.viewport;\n\n vp.x = rv.x;\n vp.y = rv.y;\n vp.width = rv.width;\n vp.height = rv.height;\n\n vb.x = 0;\n vb.y = 0;\n vb.width = rv.width / this._scaleX;\n vb.height = rv.height / this._scaleY;\n }\n\n policy.postApply(this);\n cc.winSize.width = this._visibleRect.width;\n cc.winSize.height = this._visibleRect.height;\n\n cc.visibleRect && cc.visibleRect.init(this._visibleRect);\n\n renderer.updateCameraViewport();\n cc.internal.inputManager._updateCanvasBoundingRect();\n this.emit('design-resolution-changed');\n },\n\n /**\n * !#en\n * Returns the designed size for the view.\n * Default resolution size is the same as 'getFrameSize'.\n * !#zh 返回视图的设计分辨率。\n * 默认下分辨率尺寸同 `getFrameSize` 方法相同\n * @method getDesignResolutionSize\n * @return {Size}\n */\n getDesignResolutionSize: function () {\n return cc.size(this._designResolutionSize.width, this._designResolutionSize.height);\n },\n\n /**\n * !#en\n * Sets the container to desired pixel resolution and fit the game content to it.\n * This function is very useful for adaptation in mobile browsers.\n * In some HD android devices, the resolution is very high, but its browser performance may not be very good.\n * In this case, enabling retina display is very costy and not suggested, and if retina is disabled, the image may be blurry.\n * But this API can be helpful to set a desired pixel resolution which is in between.\n * This API will do the following:\n * 1. Set viewport's width to the desired width in pixel\n * 2. Set body width to the exact pixel resolution\n * 3. The resolution policy will be reset with designed view size in points.\n * !#zh 设置容器(container)需要的像素分辨率并且适配相应分辨率的游戏内容。\n * @method setRealPixelResolution\n * @param {Number} width Design resolution width.\n * @param {Number} height Design resolution height.\n * @param {ResolutionPolicy|Number} resolutionPolicy The resolution policy desired\n */\n setRealPixelResolution: function (width, height, resolutionPolicy) {\n if (!CC_JSB && !CC_RUNTIME) {\n // Set viewport's width\n this._setViewportMeta({\"width\": width}, true);\n\n // Set body width to the exact pixel resolution\n document.documentElement.style.width = width + \"px\";\n document.body.style.width = width + \"px\";\n document.body.style.left = \"0px\";\n document.body.style.top = \"0px\";\n }\n\n // Reset the resolution size and policy\n this.setDesignResolutionSize(width, height, resolutionPolicy);\n },\n\n /**\n * !#en\n * Sets view port rectangle with points.\n * !#zh 用设计分辨率下的点尺寸来设置视窗。\n * @method setViewportInPoints\n * @deprecated since v2.0\n * @param {Number} x\n * @param {Number} y\n * @param {Number} w width\n * @param {Number} h height\n */\n setViewportInPoints: function (x, y, w, h) {\n var locScaleX = this._scaleX, locScaleY = this._scaleY;\n cc.game._renderContext.viewport((x * locScaleX + this._viewportRect.x),\n (y * locScaleY + this._viewportRect.y),\n (w * locScaleX),\n (h * locScaleY));\n },\n\n /**\n * !#en\n * Sets Scissor rectangle with points.\n * !#zh 用设计分辨率下的点的尺寸来设置 scissor 剪裁区域。\n * @method setScissorInPoints\n * @deprecated since v2.0\n * @param {Number} x\n * @param {Number} y\n * @param {Number} w\n * @param {Number} h\n */\n setScissorInPoints: function (x, y, w, h) {\n let scaleX = this._scaleX, scaleY = this._scaleY;\n let sx = Math.ceil(x * scaleX + this._viewportRect.x);\n let sy = Math.ceil(y * scaleY + this._viewportRect.y);\n let sw = Math.ceil(w * scaleX);\n let sh = Math.ceil(h * scaleY);\n let gl = cc.game._renderContext;\n\n if (!_scissorRect) {\n var boxArr = gl.getParameter(gl.SCISSOR_BOX);\n _scissorRect = cc.rect(boxArr[0], boxArr[1], boxArr[2], boxArr[3]);\n }\n\n if (_scissorRect.x !== sx || _scissorRect.y !== sy || _scissorRect.width !== sw || _scissorRect.height !== sh) {\n _scissorRect.x = sx;\n _scissorRect.y = sy;\n _scissorRect.width = sw;\n _scissorRect.height = sh;\n gl.scissor(sx, sy, sw, sh);\n }\n },\n\n /**\n * !#en\n * Returns whether GL_SCISSOR_TEST is enable\n * !#zh 检查 scissor 是否生效。\n * @method isScissorEnabled\n * @deprecated since v2.0\n * @return {Boolean}\n */\n isScissorEnabled: function () {\n return cc.game._renderContext.isEnabled(gl.SCISSOR_TEST);\n },\n\n /**\n * !#en\n * Returns the current scissor rectangle\n * !#zh 返回当前的 scissor 剪裁区域。\n * @method getScissorRect\n * @deprecated since v2.0\n * @return {Rect}\n */\n getScissorRect: function () {\n if (!_scissorRect) {\n var boxArr = gl.getParameter(gl.SCISSOR_BOX);\n _scissorRect = cc.rect(boxArr[0], boxArr[1], boxArr[2], boxArr[3]);\n }\n var scaleXFactor = 1 / this._scaleX;\n var scaleYFactor = 1 / this._scaleY;\n return cc.rect(\n (_scissorRect.x - this._viewportRect.x) * scaleXFactor,\n (_scissorRect.y - this._viewportRect.y) * scaleYFactor,\n _scissorRect.width * scaleXFactor,\n _scissorRect.height * scaleYFactor\n );\n },\n\n /**\n * !#en\n * Returns the view port rectangle.\n * !#zh 返回视窗剪裁区域。\n * @method getViewportRect\n * @return {Rect}\n */\n getViewportRect: function () {\n return this._viewportRect;\n },\n\n /**\n * !#en\n * Returns scale factor of the horizontal direction (X axis).\n * !#zh 返回横轴的缩放比,这个缩放比是将画布像素分辨率放到设计分辨率的比例。\n * @method getScaleX\n * @return {Number}\n */\n getScaleX: function () {\n return this._scaleX;\n },\n\n /**\n * !#en\n * Returns scale factor of the vertical direction (Y axis).\n * !#zh 返回纵轴的缩放比,这个缩放比是将画布像素分辨率缩放到设计分辨率的比例。\n * @method getScaleY\n * @return {Number}\n */\n getScaleY: function () {\n return this._scaleY;\n },\n\n /**\n * !#en\n * Returns device pixel ratio for retina display.\n * !#zh 返回设备或浏览器像素比例。\n * @method getDevicePixelRatio\n * @return {Number}\n */\n getDevicePixelRatio: function() {\n return this._devicePixelRatio;\n },\n\n /**\n * !#en\n * Returns the real location in view for a translation based on a related position\n * !#zh 将屏幕坐标转换为游戏视图下的坐标。\n * @method convertToLocationInView\n * @param {Number} tx - The X axis translation\n * @param {Number} ty - The Y axis translation\n * @param {Object} relatedPos - The related position object including \"left\", \"top\", \"width\", \"height\" informations\n * @return {Vec2}\n */\n convertToLocationInView: function (tx, ty, relatedPos, out) {\n let result = out || cc.v2();\n let posLeft = relatedPos.adjustedLeft ? relatedPos.adjustedLeft : relatedPos.left;\n let posTop = relatedPos.adjustedTop ? relatedPos.adjustedTop : relatedPos.top;\n let x = this._devicePixelRatio * (tx - posLeft);\n let y = this._devicePixelRatio * (posTop + relatedPos.height - ty);\n if (this._isRotated) {\n result.x = cc.game.canvas.width - y;\n result.y = x;\n }\n else {\n result.x = x;\n result.y = y;\n }\n return result;\n },\n\n _convertMouseToLocationInView: function (in_out_point, relatedPos) {\n var viewport = this._viewportRect, _t = this;\n in_out_point.x = ((_t._devicePixelRatio * (in_out_point.x - relatedPos.left)) - viewport.x) / _t._scaleX;\n in_out_point.y = (_t._devicePixelRatio * (relatedPos.top + relatedPos.height - in_out_point.y) - viewport.y) / _t._scaleY;\n },\n\n _convertPointWithScale: function (point) {\n var viewport = this._viewportRect;\n point.x = (point.x - viewport.x) / this._scaleX;\n point.y = (point.y - viewport.y) / this._scaleY;\n },\n\n _convertTouchesWithScale: function (touches) {\n var viewport = this._viewportRect, scaleX = this._scaleX, scaleY = this._scaleY,\n selTouch, selPoint, selPrePoint;\n for (var i = 0; i < touches.length; i++) {\n selTouch = touches[i];\n selPoint = selTouch._point;\n selPrePoint = selTouch._prevPoint;\n\n selPoint.x = (selPoint.x - viewport.x) / scaleX;\n selPoint.y = (selPoint.y - viewport.y) / scaleY;\n selPrePoint.x = (selPrePoint.x - viewport.x) / scaleX;\n selPrePoint.y = (selPrePoint.y - viewport.y) / scaleY;\n }\n }\n});\n\n/**\n * !#en\n * Emit when design resolution changed.\n * !#zh\n * 当设计分辨率改变时发送。\n * @event design-resolution-changed\n */\n /**\n * !#en\n * Emit when canvas resize.\n * !#zh\n * 当画布大小改变时发送。\n * @event canvas-resize\n */\n\n\n/**\n *

cc.game.containerStrategy class is the root strategy class of container's scale strategy,\n * it controls the behavior of how to scale the cc.game.container and cc.game.canvas object

\n *\n * @class ContainerStrategy\n */\ncc.ContainerStrategy = cc.Class({\n name: \"ContainerStrategy\",\n /**\n * !#en\n * Manipulation before appling the strategy\n * !#zh 在应用策略之前的操作\n * @method preApply\n * @param {View} view - The target view\n */\n preApply: function (view) {\n },\n\n /**\n * !#en\n * Function to apply this strategy\n * !#zh 策略应用方法\n * @method apply\n * @param {View} view\n * @param {Size} designedResolution\n */\n apply: function (view, designedResolution) {\n },\n\n /**\n * !#en\n * Manipulation after applying the strategy\n * !#zh 策略调用之后的操作\n * @method postApply\n * @param {View} view The target view\n */\n postApply: function (view) {\n\n },\n\n _setupContainer: function (view, w, h) {\n var locCanvas = cc.game.canvas;\n\n this._setupStyle(view, w, h);\n \n // Setup pixel ratio for retina display\n var devicePixelRatio = view._devicePixelRatio = 1;\n if(CC_JSB){\n // view.isRetinaEnabled only work on web. \n devicePixelRatio = view._devicePixelRatio = window.devicePixelRatio;\n }else if (view.isRetinaEnabled()) {\n devicePixelRatio = view._devicePixelRatio = Math.min(view._maxPixelRatio, window.devicePixelRatio || 1);\n }\n // Setup canvas\n locCanvas.width = w * devicePixelRatio;\n locCanvas.height = h * devicePixelRatio;\n },\n\n _setupStyle: function (view, w, h) {\n let locCanvas = cc.game.canvas;\n let locContainer = cc.game.container;\n if (cc.sys.os === cc.sys.OS_ANDROID) {\n document.body.style.width = (view._isRotated ? h : w) + 'px';\n document.body.style.height = (view._isRotated ? w : h) + 'px';\n }\n // Setup style\n locContainer.style.width = locCanvas.style.width = w + 'px';\n locContainer.style.height = locCanvas.style.height = h + 'px';\n },\n\n _fixContainer: function () {\n // Add container to document body\n document.body.insertBefore(cc.game.container, document.body.firstChild);\n // Set body's width height to window's size, and forbid overflow, so that game will be centered\n var bs = document.body.style;\n bs.width = window.innerWidth + \"px\";\n bs.height = window.innerHeight + \"px\";\n bs.overflow = \"hidden\";\n // Body size solution doesn't work on all mobile browser so this is the aleternative: fixed container\n var contStyle = cc.game.container.style;\n contStyle.position = \"fixed\";\n contStyle.left = contStyle.top = \"0px\";\n // Reposition body\n document.body.scrollTop = 0;\n }\n});\n\n/**\n *

cc.ContentStrategy class is the root strategy class of content's scale strategy,\n * it controls the behavior of how to scale the scene and setup the viewport for the game

\n *\n * @class ContentStrategy\n */\ncc.ContentStrategy = cc.Class({\n name: \"ContentStrategy\",\n\n ctor: function () {\n this._result = {\n scale: [1, 1],\n viewport: null\n };\n },\n\n _buildResult: function (containerW, containerH, contentW, contentH, scaleX, scaleY) {\n // Makes content fit better the canvas\n Math.abs(containerW - contentW) < 2 && (contentW = containerW);\n Math.abs(containerH - contentH) < 2 && (contentH = containerH);\n\n var viewport = cc.rect((containerW - contentW) / 2, (containerH - contentH) / 2, contentW, contentH);\n\n // Translate the content\n if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS){\n //TODO: modify something for setTransform\n //cc.game._renderContext.translate(viewport.x, viewport.y + contentH);\n }\n\n this._result.scale = [scaleX, scaleY];\n this._result.viewport = viewport;\n return this._result;\n },\n\n /**\n * !#en\n * Manipulation before applying the strategy\n * !#zh 策略应用前的操作\n * @method preApply\n * @param {View} view - The target view\n */\n preApply: function (view) {\n },\n\n /**\n * !#en Function to apply this strategy\n * The return value is {scale: [scaleX, scaleY], viewport: {cc.Rect}},\n * The target view can then apply these value to itself, it's preferred not to modify directly its private variables\n * !#zh 调用策略方法\n * @method apply\n * @param {View} view\n * @param {Size} designedResolution\n * @return {Object} scaleAndViewportRect\n */\n apply: function (view, designedResolution) {\n return {\"scale\": [1, 1]};\n },\n\n /**\n * !#en\n * Manipulation after applying the strategy\n * !#zh 策略调用之后的操作\n * @method postApply\n * @param {View} view - The target view\n */\n postApply: function (view) {\n }\n});\n\n(function () {\n\n// Container scale strategys\n /**\n * @class EqualToFrame\n * @extends ContainerStrategy\n */\n var EqualToFrame = cc.Class({\n name: \"EqualToFrame\",\n extends: cc.ContainerStrategy,\n apply: function (view) {\n var frameH = view._frameSize.height, containerStyle = cc.game.container.style;\n this._setupContainer(view, view._frameSize.width, view._frameSize.height);\n // Setup container's margin and padding\n if (view._isRotated) {\n containerStyle.margin = '0 0 0 ' + frameH + 'px';\n }\n else {\n containerStyle.margin = '0px';\n }\n containerStyle.padding = \"0px\";\n }\n });\n\n /**\n * @class ProportionalToFrame\n * @extends ContainerStrategy\n */\n var ProportionalToFrame = cc.Class({\n name: \"ProportionalToFrame\",\n extends: cc.ContainerStrategy,\n apply: function (view, designedResolution) {\n var frameW = view._frameSize.width, frameH = view._frameSize.height, containerStyle = cc.game.container.style,\n designW = designedResolution.width, designH = designedResolution.height,\n scaleX = frameW / designW, scaleY = frameH / designH,\n containerW, containerH;\n\n scaleX < scaleY ? (containerW = frameW, containerH = designH * scaleX) : (containerW = designW * scaleY, containerH = frameH);\n\n // Adjust container size with integer value\n var offx = Math.round((frameW - containerW) / 2);\n var offy = Math.round((frameH - containerH) / 2);\n containerW = frameW - 2 * offx;\n containerH = frameH - 2 * offy;\n\n this._setupContainer(view, containerW, containerH);\n if (!CC_EDITOR) {\n // Setup container's margin and padding\n if (view._isRotated) {\n containerStyle.margin = '0 0 0 ' + frameH + 'px';\n }\n else {\n containerStyle.margin = '0px';\n }\n containerStyle.paddingLeft = offx + \"px\";\n containerStyle.paddingRight = offx + \"px\";\n containerStyle.paddingTop = offy + \"px\";\n containerStyle.paddingBottom = offy + \"px\";\n }\n }\n });\n\n /**\n * @class EqualToWindow\n * @extends EqualToFrame\n */\n var EqualToWindow = cc.Class({\n name: \"EqualToWindow\",\n extends: EqualToFrame,\n preApply: function (view) {\n this._super(view);\n cc.game.frame = document.documentElement;\n },\n\n apply: function (view) {\n this._super(view);\n this._fixContainer();\n }\n });\n\n /**\n * @class ProportionalToWindow\n * @extends ProportionalToFrame\n */\n var ProportionalToWindow = cc.Class({\n name: \"ProportionalToWindow\",\n extends: ProportionalToFrame,\n preApply: function (view) {\n this._super(view);\n cc.game.frame = document.documentElement;\n },\n\n apply: function (view, designedResolution) {\n this._super(view, designedResolution);\n this._fixContainer();\n }\n });\n\n /**\n * @class OriginalContainer\n * @extends ContainerStrategy\n */\n var OriginalContainer = cc.Class({\n name: \"OriginalContainer\",\n extends: cc.ContainerStrategy,\n apply: function (view) {\n this._setupContainer(view, cc.game.canvas.width, cc.game.canvas.height);\n }\n });\n\n // need to adapt prototype before instantiating\n let _global = typeof window === 'undefined' ? global : window;\n let globalAdapter = _global.__globalAdapter;\n if (globalAdapter) {\n if (globalAdapter.adaptContainerStrategy) {\n globalAdapter.adaptContainerStrategy(cc.ContainerStrategy.prototype);\n }\n if (globalAdapter.adaptView) {\n globalAdapter.adaptView(View.prototype);\n }\n }\n\n// #NOT STABLE on Android# Alias: Strategy that makes the container's size equals to the window's size\n// cc.ContainerStrategy.EQUAL_TO_WINDOW = new EqualToWindow();\n// #NOT STABLE on Android# Alias: Strategy that scale proportionally the container's size to window's size\n// cc.ContainerStrategy.PROPORTION_TO_WINDOW = new ProportionalToWindow();\n// Alias: Strategy that makes the container's size equals to the frame's size\n cc.ContainerStrategy.EQUAL_TO_FRAME = new EqualToFrame();\n// Alias: Strategy that scale proportionally the container's size to frame's size\n cc.ContainerStrategy.PROPORTION_TO_FRAME = new ProportionalToFrame();\n// Alias: Strategy that keeps the original container's size\n cc.ContainerStrategy.ORIGINAL_CONTAINER = new OriginalContainer();\n\n// Content scale strategys\n var ExactFit = cc.Class({\n name: \"ExactFit\",\n extends: cc.ContentStrategy,\n apply: function (view, designedResolution) {\n var containerW = cc.game.canvas.width, containerH = cc.game.canvas.height,\n scaleX = containerW / designedResolution.width, scaleY = containerH / designedResolution.height;\n\n return this._buildResult(containerW, containerH, containerW, containerH, scaleX, scaleY);\n }\n });\n\n var ShowAll = cc.Class({\n name: \"ShowAll\",\n extends: cc.ContentStrategy,\n apply: function (view, designedResolution) {\n var containerW = cc.game.canvas.width, containerH = cc.game.canvas.height,\n designW = designedResolution.width, designH = designedResolution.height,\n scaleX = containerW / designW, scaleY = containerH / designH, scale = 0,\n contentW, contentH;\n\n scaleX < scaleY ? (scale = scaleX, contentW = containerW, contentH = designH * scale)\n : (scale = scaleY, contentW = designW * scale, contentH = containerH);\n\n return this._buildResult(containerW, containerH, contentW, contentH, scale, scale);\n }\n });\n\n var NoBorder = cc.Class({\n name: \"NoBorder\",\n extends: cc.ContentStrategy,\n apply: function (view, designedResolution) {\n var containerW = cc.game.canvas.width, containerH = cc.game.canvas.height,\n designW = designedResolution.width, designH = designedResolution.height,\n scaleX = containerW / designW, scaleY = containerH / designH, scale,\n contentW, contentH;\n\n scaleX < scaleY ? (scale = scaleY, contentW = designW * scale, contentH = containerH)\n : (scale = scaleX, contentW = containerW, contentH = designH * scale);\n\n return this._buildResult(containerW, containerH, contentW, contentH, scale, scale);\n }\n });\n\n var FixedHeight = cc.Class({\n name: \"FixedHeight\",\n extends: cc.ContentStrategy,\n apply: function (view, designedResolution) {\n var containerW = cc.game.canvas.width, containerH = cc.game.canvas.height,\n designH = designedResolution.height, scale = containerH / designH,\n contentW = containerW, contentH = containerH;\n\n return this._buildResult(containerW, containerH, contentW, contentH, scale, scale);\n }\n });\n\n var FixedWidth = cc.Class({\n name: \"FixedWidth\",\n extends: cc.ContentStrategy,\n apply: function (view, designedResolution) {\n var containerW = cc.game.canvas.width, containerH = cc.game.canvas.height,\n designW = designedResolution.width, scale = containerW / designW,\n contentW = containerW, contentH = containerH;\n\n return this._buildResult(containerW, containerH, contentW, contentH, scale, scale);\n }\n });\n\n// Alias: Strategy to scale the content's size to container's size, non proportional\n cc.ContentStrategy.EXACT_FIT = new ExactFit();\n// Alias: Strategy to scale the content's size proportionally to maximum size and keeps the whole content area to be visible\n cc.ContentStrategy.SHOW_ALL = new ShowAll();\n// Alias: Strategy to scale the content's size proportionally to fill the whole container area\n cc.ContentStrategy.NO_BORDER = new NoBorder();\n// Alias: Strategy to scale the content's height to container's height and proportionally scale its width\n cc.ContentStrategy.FIXED_HEIGHT = new FixedHeight();\n// Alias: Strategy to scale the content's width to container's width and proportionally scale its height\n cc.ContentStrategy.FIXED_WIDTH = new FixedWidth();\n\n})();\n\n/**\n *

cc.ResolutionPolicy class is the root strategy class of scale strategy,\n * its main task is to maintain the compatibility with Cocos2d-x

\n *\n * @class ResolutionPolicy\n */\n/**\n * @method constructor\n * @param {ContainerStrategy} containerStg The container strategy\n * @param {ContentStrategy} contentStg The content strategy\n */\ncc.ResolutionPolicy = cc.Class({\n name: \"cc.ResolutionPolicy\",\n /**\n * Constructor of cc.ResolutionPolicy\n * @param {ContainerStrategy} containerStg\n * @param {ContentStrategy} contentStg\n */\n ctor: function (containerStg, contentStg) {\n this._containerStrategy = null;\n this._contentStrategy = null;\n this.setContainerStrategy(containerStg);\n this.setContentStrategy(contentStg);\n },\n\n /**\n * !#en Manipulation before applying the resolution policy\n * !#zh 策略应用前的操作\n * @method preApply\n * @param {View} view The target view\n */\n preApply: function (view) {\n this._containerStrategy.preApply(view);\n this._contentStrategy.preApply(view);\n },\n\n /**\n * !#en Function to apply this resolution policy\n * The return value is {scale: [scaleX, scaleY], viewport: {cc.Rect}},\n * The target view can then apply these value to itself, it's preferred not to modify directly its private variables\n * !#zh 调用策略方法\n * @method apply\n * @param {View} view - The target view\n * @param {Size} designedResolution - The user defined design resolution\n * @return {Object} An object contains the scale X/Y values and the viewport rect\n */\n apply: function (view, designedResolution) {\n this._containerStrategy.apply(view, designedResolution);\n return this._contentStrategy.apply(view, designedResolution);\n },\n\n /**\n * !#en Manipulation after appyling the strategy\n * !#zh 策略应用之后的操作\n * @method postApply\n * @param {View} view - The target view\n */\n postApply: function (view) {\n this._containerStrategy.postApply(view);\n this._contentStrategy.postApply(view);\n },\n\n /**\n * !#en\n * Setup the container's scale strategy\n * !#zh 设置容器的适配策略\n * @method setContainerStrategy\n * @param {ContainerStrategy} containerStg\n */\n setContainerStrategy: function (containerStg) {\n if (containerStg instanceof cc.ContainerStrategy)\n this._containerStrategy = containerStg;\n },\n\n /**\n * !#en\n * Setup the content's scale strategy\n * !#zh 设置内容的适配策略\n * @method setContentStrategy\n * @param {ContentStrategy} contentStg\n */\n setContentStrategy: function (contentStg) {\n if (contentStg instanceof cc.ContentStrategy)\n this._contentStrategy = contentStg;\n }\n});\n\njs.get(cc.ResolutionPolicy.prototype, \"canvasSize\", function () {\n return cc.v2(cc.game.canvas.width, cc.game.canvas.height);\n});\n\n/**\n * The entire application is visible in the specified area without trying to preserve the original aspect ratio.
\n * Distortion can occur, and the application may appear stretched or compressed.\n * @property {Number} EXACT_FIT\n * @readonly\n * @static\n */\ncc.ResolutionPolicy.EXACT_FIT = 0;\n\n/**\n * The entire application fills the specified area, without distortion but possibly with some cropping,
\n * while maintaining the original aspect ratio of the application.\n * @property {Number} NO_BORDER\n * @readonly\n * @static\n */\ncc.ResolutionPolicy.NO_BORDER = 1;\n\n/**\n * The entire application is visible in the specified area without distortion while maintaining the original
\n * aspect ratio of the application. Borders can appear on two sides of the application.\n * @property {Number} SHOW_ALL\n * @readonly\n * @static\n */\ncc.ResolutionPolicy.SHOW_ALL = 2;\n\n/**\n * The application takes the height of the design resolution size and modifies the width of the internal
\n * canvas so that it fits the aspect ratio of the device
\n * no distortion will occur however you must make sure your application works on different
\n * aspect ratios\n * @property {Number} FIXED_HEIGHT\n * @readonly\n * @static\n */\ncc.ResolutionPolicy.FIXED_HEIGHT = 3;\n\n/**\n * The application takes the width of the design resolution size and modifies the height of the internal
\n * canvas so that it fits the aspect ratio of the device
\n * no distortion will occur however you must make sure your application works on different
\n * aspect ratios\n * @property {Number} FIXED_WIDTH\n * @readonly\n * @static\n */\ncc.ResolutionPolicy.FIXED_WIDTH = 4;\n\n/**\n * Unknow policy\n * @property {Number} UNKNOWN\n * @readonly\n * @static\n */\ncc.ResolutionPolicy.UNKNOWN = 5;\n\n/**\n * @module cc\n */\n\n/**\n * !#en cc.view is the shared view object.\n * !#zh cc.view 是全局的视图对象。\n * @property view\n * @static\n * @type {View}\n */\ncc.view = new View();\n\n/**\n * !#en cc.winSize is the alias object for the size of the current game window.\n * !#zh cc.winSize 为当前的游戏窗口的大小。\n * @property winSize\n * @type Size\n */\ncc.winSize = cc.size();\n\nmodule.exports = cc.view;\n","/****************************************************************************\n Copyright (c) 2011-2012 cocos2d-x.org\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos2d-x.org\n\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * cc.visibleRect is a singleton object which defines the actual visible rect of the current view,\n * it should represent the same rect as cc.view.getViewportRect()\n *\n * @class visibleRect\n */\ncc.visibleRect = {\n topLeft:cc.v2(0,0),\n topRight:cc.v2(0,0),\n top:cc.v2(0,0),\n bottomLeft:cc.v2(0,0),\n bottomRight:cc.v2(0,0),\n bottom:cc.v2(0,0),\n center:cc.v2(0,0),\n left:cc.v2(0,0),\n right:cc.v2(0,0),\n width:0,\n height:0,\n\n /**\n * initialize\n * @static\n * @method init\n * @param {Rect} visibleRect\n */\n init:function(visibleRect){\n\n var w = this.width = visibleRect.width;\n var h = this.height = visibleRect.height;\n var l = visibleRect.x,\n b = visibleRect.y,\n t = b + h,\n r = l + w;\n\n //top\n this.topLeft.x = l;\n this.topLeft.y = t;\n this.topRight.x = r;\n this.topRight.y = t;\n this.top.x = l + w/2;\n this.top.y = t;\n\n //bottom\n this.bottomLeft.x = l;\n this.bottomLeft.y = b;\n this.bottomRight.x = r;\n this.bottomRight.y = b;\n this.bottom.x = l + w/2;\n this.bottom.y = b;\n\n //center\n this.center.x = l + w/2;\n this.center.y = b + h/2;\n\n //left\n this.left.x = l;\n this.left.y = b + h/2;\n\n //right\n this.right.x = r;\n this.right.y = b + h/2;\n }\n};\n\n/**\n * Top left coordinate of the screen related to the game scene.\n * @static\n * @property {Vec2} topLeft\n */\n\n/**\n * Top right coordinate of the screen related to the game scene.\n * @static\n * @property {Vec2} topRight\n */\n\n/**\n * Top center coordinate of the screen related to the game scene.\n * @static\n * @property {Vec2} top\n */\n\n/**\n * Bottom left coordinate of the screen related to the game scene.\n * @static\n * @property {Vec2} bottomLeft\n */\n\n/**\n * Bottom right coordinate of the screen related to the game scene.\n * @static\n * @property {Vec2} bottomRight\n */\n\n/**\n * Bottom center coordinate of the screen related to the game scene.\n * @static\n * @property {Vec2} bottom\n */\n\n/**\n * Center coordinate of the screen related to the game scene.\n * @static\n * @property {Vec2} center\n */\n\n/**\n * Left center coordinate of the screen related to the game scene.\n * @static\n * @property {Vec2} left\n */\n\n/**\n * Right center coordinate of the screen related to the game scene.\n * @static\n * @property {Vec2} right\n */\n\n/**\n * Width of the screen.\n * @static\n * @property {Number} width\n */\n\n/**\n * Height of the screen.\n * @static\n * @property {Number} height\n */\n\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar js = require('./js');\nvar isPlainEmptyObj = require('./utils').isPlainEmptyObj_DEV;\n\nconst DELIMETER = '$_$';\n\nfunction createAttrsSingle (owner, superAttrs) {\n var attrs = superAttrs ? Object.create(superAttrs) : {};\n js.value(owner, '__attrs__', attrs);\n return attrs;\n}\n\n// subclass should not have __attrs__\nfunction createAttrs (subclass) {\n if (typeof subclass !== 'function') {\n // attributes only in instance\n let instance = subclass;\n return createAttrsSingle(instance, getClassAttrs(instance.constructor));\n }\n var superClass;\n var chains = cc.Class.getInheritanceChain(subclass);\n for (var i = chains.length - 1; i >= 0; i--) {\n var cls = chains[i];\n var attrs = cls.hasOwnProperty('__attrs__') && cls.__attrs__;\n if (!attrs) {\n superClass = chains[i + 1];\n createAttrsSingle(cls, superClass && superClass.__attrs__);\n }\n }\n superClass = chains[0];\n createAttrsSingle(subclass, superClass && superClass.__attrs__);\n return subclass.__attrs__;\n}\n\n// /**\n// * @class Class\n// */\n\n// *\n// * Tag the class with any meta attributes, then return all current attributes assigned to it.\n// * This function holds only the attributes, not their implementations.\n// *\n// * @method attr\n// * @param {Function|Object} ctor - the class or instance. If instance, the attribute will be dynamic and only available for the specified instance.\n// * @param {String} propName - the name of property or function, used to retrieve the attributes\n// * @param {Object} [newAttrs] - the attribute table to mark, new attributes will merged with existed attributes. Attribute whose key starts with '_' will be ignored.\n// * @static\n// * @private\nfunction attr (ctor, propName, newAttrs) {\n var attrs = getClassAttrs(ctor);\n if (!CC_DEV || typeof newAttrs === 'undefined') {\n // get\n var prefix = propName + DELIMETER;\n var ret = {};\n for (let key in attrs) {\n if (key.startsWith(prefix)) {\n ret[key.slice(prefix.length)] = attrs[key];\n }\n }\n return ret;\n }\n else if (CC_DEV && typeof newAttrs === 'object') {\n // set\n cc.warn(`\\`cc.Class.attr(obj, prop, { key: value });\\` is deprecated, use \\`cc.Class.Attr.setClassAttr(obj, prop, 'key', value);\\` instead please.`);\n for (let key in newAttrs) {\n attrs[propName + DELIMETER + key] = newAttrs[key];\n }\n }\n}\n\n// returns a readonly meta object\nfunction getClassAttrs (ctor) {\n return (ctor.hasOwnProperty('__attrs__') && ctor.__attrs__) || createAttrs(ctor);\n}\n\nfunction setClassAttr (ctor, propName, key, value) {\n getClassAttrs(ctor)[propName + DELIMETER + key] = value;\n}\n\n/**\n * @module cc\n */\n\nfunction PrimitiveType (name, def) {\n this.name = name;\n this.default = def;\n}\nPrimitiveType.prototype.toString = function () {\n return this.name;\n};\n\n/**\n * Specify that the input value must be integer in Inspector.\n * Also used to indicates that the elements in array should be type integer.\n * @property {string} Integer\n * @readonly\n * @example\n * // in cc.Class\n * member: {\n * default: [],\n * type: cc.Integer\n * }\n * // ES6 ccclass\n * @cc._decorator.property({\n * type: cc.Integer\n * })\n * member = [];\n */\ncc.Integer = new PrimitiveType('Integer', 0);\n\n/**\n * Indicates that the elements in array should be type double.\n * @property {string} Float\n * @readonly\n * @example\n * // in cc.Class\n * member: {\n * default: [],\n * type: cc.Float\n * }\n * // ES6 ccclass\n * @cc._decorator.property({\n * type: cc.Float\n * })\n * member = [];\n */\ncc.Float = new PrimitiveType('Float', 0);\n\nif (CC_EDITOR) {\n js.get(cc, 'Number', function () {\n cc.warnID(3603);\n return cc.Float;\n });\n}\n\n/**\n * Indicates that the elements in array should be type boolean.\n * @property {string} Boolean\n * @readonly\n * @example\n * // in cc.Class\n * member: {\n * default: [],\n * type: cc.Boolean\n * }\n * // ES6 ccclass\n * @cc._decorator.property({\n * type: cc.Boolean\n * })\n * member = [];\n */\ncc.Boolean = new PrimitiveType('Boolean', false);\n\n/**\n * Indicates that the elements in array should be type string.\n * @property {string} String\n * @readonly\n * @example\n * // in cc.Class\n * member: {\n * default: [],\n * type: cc.String\n * }\n * // ES6 ccclass\n * @cc._decorator.property({\n * type: cc.String\n * })\n * member = [];\n */\ncc.String = new PrimitiveType('String', '');\n\n// Ensures the type matches its default value\nfunction getTypeChecker (type, attrName) {\n return function (constructor, mainPropName) {\n var propInfo = '\"' + js.getClassName(constructor) + '.' + mainPropName + '\"';\n var mainPropAttrs = attr(constructor, mainPropName);\n\n var mainPropAttrsType = mainPropAttrs.type;\n if (mainPropAttrsType === cc.Integer || mainPropAttrsType === cc.Float) {\n mainPropAttrsType = 'Number';\n }\n else if (mainPropAttrsType === cc.String || mainPropAttrsType === cc.Boolean) {\n mainPropAttrsType = '' + mainPropAttrsType;\n }\n if (mainPropAttrsType !== type) {\n cc.warnID(3604, propInfo);\n return;\n }\n\n if (!mainPropAttrs.hasOwnProperty('default')) {\n return;\n }\n var defaultVal = mainPropAttrs.default;\n if (typeof defaultVal === 'undefined') {\n return;\n }\n var isContainer = Array.isArray(defaultVal) || isPlainEmptyObj(defaultVal);\n if (isContainer) {\n return;\n }\n var defaultType = typeof defaultVal;\n var type_lowerCase = type.toLowerCase();\n if (defaultType === type_lowerCase) {\n if (type_lowerCase === 'object') {\n if (defaultVal && !(defaultVal instanceof mainPropAttrs.ctor)) {\n cc.warnID(3605, propInfo, js.getClassName(mainPropAttrs.ctor));\n }\n else {\n return;\n }\n }\n else if (type !== 'Number') {\n cc.warnID(3606, attrName, propInfo, type);\n }\n }\n else if (defaultType !== 'function') {\n if (type === cc.String && defaultVal == null) {\n cc.warnID(3607, propInfo);\n }\n else {\n cc.warnID(3611, attrName, propInfo, defaultType);\n }\n }\n else {\n return;\n }\n delete mainPropAttrs.type;\n };\n}\n\n// Ensures the type matches its default value\nfunction getObjTypeChecker (typeCtor) {\n return function (classCtor, mainPropName) {\n getTypeChecker('Object', 'type')(classCtor, mainPropName);\n // check ValueType\n var defaultDef = getClassAttrs(classCtor)[mainPropName + DELIMETER + 'default'];\n var defaultVal = require('./CCClass').getDefault(defaultDef);\n if (!Array.isArray(defaultVal) && js.isChildClassOf(typeCtor, cc.ValueType)) {\n var typename = js.getClassName(typeCtor);\n var info = cc.js.formatStr('No need to specify the \"type\" of \"%s.%s\" because %s is a child class of ValueType.',\n js.getClassName(classCtor), mainPropName, typename);\n if (defaultDef) {\n cc.log(info);\n }\n else {\n cc.warnID(3612, info, typename, js.getClassName(classCtor), mainPropName, typename);\n }\n }\n };\n}\n\nmodule.exports = {\n PrimitiveType,\n attr: attr,\n getClassAttrs: getClassAttrs,\n setClassAttr: setClassAttr,\n DELIMETER: DELIMETER,\n getTypeChecker_ET: ((CC_EDITOR && !Editor.isBuilder) || CC_TEST) && getTypeChecker,\n getObjTypeChecker_ET: ((CC_EDITOR && !Editor.isBuilder) || CC_TEST) && getObjTypeChecker,\n ScriptUuid: {}, // the value will be represented as a uuid string\n};\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst js = require('./js');\nconst fastRemoveAt = js.array.fastRemoveAt;\n\nfunction empty () {}\n\nfunction CallbackInfo () {\n this.callback = empty;\n this.target = undefined;\n this.once = false;\n}\n\nCallbackInfo.prototype.set = function (callback, target, once) {\n this.callback = callback;\n this.target = target;\n this.once = !!once;\n};\n\nlet callbackInfoPool = new js.Pool(function (info) {\n info.callback = empty;\n info.target = undefined;\n info.once = false;\n return true;\n}, 32);\n\ncallbackInfoPool.get = function () {\n return this._get() || new CallbackInfo();\n};\n\nfunction CallbackList () {\n this.callbackInfos = [];\n this.isInvoking = false;\n this.containCanceled = false;\n}\n\nlet proto = CallbackList.prototype;\n\n/**\n * !#zh\n * 从列表中移除与指定目标相同回调函数的事件。\n * @param cb\n */\nproto.removeByCallback = function (cb) {\n for (let i = 0; i < this.callbackInfos.length; ++i) {\n let info = this.callbackInfos[i];\n if (info && info.callback === cb) {\n callbackInfoPool.put(info);\n fastRemoveAt(this.callbackInfos, i);\n --i;\n }\n }\n};\n\n/**\n * !#zh\n * 从列表中移除与指定目标相同调用者的事件。\n * @param target\n */\nproto.removeByTarget = function (target) {\n for (let i = 0; i < this.callbackInfos.length; ++i) {\n const info = this.callbackInfos[i];\n if (info && info.target === target) {\n callbackInfoPool.put(info);\n fastRemoveAt(this.callbackInfos, i);\n --i;\n }\n }\n};\n\n/**\n * !#zh\n * 移除指定编号事件。\n *\n * @param index\n */\nproto.cancel = function (index) {\n const info = this.callbackInfos[index];\n if (info) {\n callbackInfoPool.put(info);\n this.callbackInfos[index] = null;\n }\n this.containCanceled = true;\n};\n\n/**\n * !#zh\n * 注销所有事件。\n */\nproto.cancelAll = function () {\n for (let i = 0; i < this.callbackInfos.length; i++) {\n const info = this.callbackInfos[i];\n if (info) {\n callbackInfoPool.put(info);\n this.callbackInfos[i] = null;\n }\n }\n this.containCanceled = true;\n};\n\n// filter all removed callbacks and compact array\nproto.purgeCanceled = function () {\n for (let i = this.callbackInfos.length - 1; i >= 0; --i) {\n const info = this.callbackInfos[i];\n if (!info) {\n fastRemoveAt(this.callbackInfos, i);\n }\n }\n this.containCanceled = false;\n};\n\nproto.clear = function () {\n this.cancelAll();\n this.callbackInfos.length = 0;\n this.isInvoking = false;\n this.containCanceled = false;\n};\n\nconst MAX_SIZE = 16;\nlet callbackListPool = new js.Pool(function (info) {\n info.callbackInfos = [];\n info.isInvoking = false;\n info.containCanceled = false;\n return true;\n}, MAX_SIZE);\n\ncallbackListPool.get = function () {\n return this._get() || new CallbackList();\n};\n\n/**\n * !#en The callbacks invoker to handle and invoke callbacks by key.\n * !#zh CallbacksInvoker 用来根据 Key 管理并调用回调方法。\n * @class CallbacksInvoker\n */\nfunction CallbacksInvoker () {\n this._callbackTable = js.createMap(true);\n}\n\nproto = CallbacksInvoker.prototype;\n\n/**\n * !#zh\n * 事件添加管理\n *\n * @param key\n * @param callback\n * @param target\n * @param once\n */\nproto.on = function (key, callback, target, once) {\n let list = this._callbackTable[key];\n if (!list) {\n list = this._callbackTable[key] = callbackListPool.get();\n }\n let info = callbackInfoPool.get();\n info.set(callback, target, once);\n list.callbackInfos.push(info);\n};\n\n/**\n *\n * !#zh\n * 检查指定事件是否已注册回调。\n *\n * !#en\n * Check if the specified key has any registered callback. If a callback is also specified,\n * it will only return true if the callback is registered.\n *\n * @method hasEventListener\n * @param {String} key\n * @param {Function} [callback]\n * @param {Object} [target]\n * @return {Boolean}\n */\nproto.hasEventListener = function (key, callback, target) {\n const list = this._callbackTable[key];\n if (!list) {\n return false;\n }\n\n // check any valid callback\n const infos = list.callbackInfos;\n if (!callback) {\n // Make sure no cancelled callbacks\n if (list.isInvoking) {\n for (let i = 0; i < infos.length; ++i) {\n if (infos[i]) {\n return true;\n }\n }\n return false;\n }\n else {\n return infos.length > 0;\n }\n }\n\n for (let i = 0; i < infos.length; ++i) {\n const info = infos[i];\n if (info && info.callback === callback && info.target === target) {\n return true;\n }\n }\n return false;\n};\n\n/**\n * !#zh\n * 移除在特定事件类型中注册的所有回调或在某个目标中注册的所有回调。\n *\n * !#en\n * Removes all callbacks registered in a certain event type or all callbacks registered with a certain target\n * @method removeAll\n * @param {String|Object} keyOrTarget - The event key to be removed or the target to be removed\n */\nproto.removeAll = function (keyOrTarget) {\n if (typeof keyOrTarget === 'string') {\n // remove by key\n const list = this._callbackTable[keyOrTarget];\n if (list) {\n if (list.isInvoking) {\n list.cancelAll();\n }\n else {\n list.clear();\n callbackListPool.put(list);\n delete this._callbackTable[keyOrTarget];\n }\n }\n }\n else if (keyOrTarget) {\n // remove by target\n for (const key in this._callbackTable) {\n const list = this._callbackTable[key];\n if (list.isInvoking) {\n const infos = list.callbackInfos;\n for (let i = 0; i < infos.length; ++i) {\n const info = infos[i];\n if (info && info.target === keyOrTarget) {\n list.cancel(i);\n }\n }\n }\n else {\n list.removeByTarget(keyOrTarget);\n }\n }\n }\n};\n\n/**\n * !#zh\n * 删除之前与同类型,回调,目标注册的回调。\n *\n * @method off\n * @param {String} key\n * @param {Function} callback\n * @param {Object} [target]\n */\nproto.off = function (key, callback, target) {\n const list = this._callbackTable[key];\n if (list) {\n const infos = list.callbackInfos;\n for (let i = 0; i < infos.length; ++i) {\n const info = infos[i];\n if (info && info.callback === callback && info.target === target) {\n if (list.isInvoking) {\n list.cancel(i);\n }\n else {\n fastRemoveAt(infos, i);\n callbackInfoPool.put(info);\n }\n break;\n }\n }\n }\n};\n\n\n/**\n * !#en\n * Trigger an event directly with the event name and necessary arguments.\n * !#zh\n * 通过事件名发送自定义事件\n *\n * @method emit\n * @param {String} key - event type\n * @param {*} [arg1] - First argument\n * @param {*} [arg2] - Second argument\n * @param {*} [arg3] - Third argument\n * @param {*} [arg4] - Fourth argument\n * @param {*} [arg5] - Fifth argument\n * @example\n *\n * eventTarget.emit('fire', event);\n * eventTarget.emit('fire', message, emitter);\n */\nproto.emit = function (key, arg1, arg2, arg3, arg4, arg5) {\n const list = this._callbackTable[key];\n if (list) {\n const rootInvoker = !list.isInvoking;\n list.isInvoking = true;\n\n const infos = list.callbackInfos;\n for (let i = 0, len = infos.length; i < len; ++i) {\n const info = infos[i];\n if (info) {\n let target = info.target;\n let callback = info.callback;\n if (info.once) {\n this.off(key, callback, target);\n }\n\n if (target) {\n callback.call(target, arg1, arg2, arg3, arg4, arg5);\n }\n else {\n callback(arg1, arg2, arg3, arg4, arg5);\n }\n }\n }\n\n if (rootInvoker) {\n list.isInvoking = false;\n if (list.containCanceled) {\n list.purgeCanceled();\n }\n }\n }\n};\n\nif (CC_TEST) {\n cc._Test.CallbacksInvoker = CallbacksInvoker;\n}\n\nmodule.exports = CallbacksInvoker;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nfunction deepFlatten (strList, array) {\n for (var i = 0; i < array.length; i++) {\n var item = array[i];\n if (Array.isArray(item)) {\n deepFlatten(strList, item);\n }\n // else if (item instanceof Declaration) {\n // strList.push(item.toString());\n // }\n else {\n strList.push(item);\n }\n }\n}\n\nfunction flattenCodeArray (array) {\n var separator = CC_DEV ? '\\n' : '';\n var strList = [];\n deepFlatten(strList, array);\n return strList.join(separator);\n}\n\nmodule.exports = {\n flattenCodeArray\n};\n","/****************************************************************************\n Copyright (c) present Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport js from './js';\nimport ValueType from '../value-types/value-type';\nimport Vec2 from '../value-types/vec2';\nimport Vec3 from '../value-types/vec3';\nimport Vec4 from '../value-types/vec4';\nimport Color from '../value-types/color';\nimport Size from '../value-types/size';\nimport Rect from '../value-types/rect';\nimport Quat from '../value-types/quat';\nimport Mat4 from '../value-types/mat4';\n// import Attr from './attribute';\n\n/****************************************************************************\n * BUILT-IN TYPES / CONSTAINTS\n ****************************************************************************/\n\nconst SUPPORT_MIN_FORMAT_VERSION = 1;\nconst EMPTY_PLACEHOLDER = 0;\n\n// Used for Data.ValueType.\n// If a value type is not registered in this list, it will be serialized to Data.Class.\nconst BuiltinValueTypes: Array = [\n Vec2, // 0\n Vec3, // 1\n Vec4, // 2\n Quat, // 3\n Color, // 4\n Size, // 5\n Rect, // 6\n Mat4, // 7\n];\n\n// Used for Data.ValueTypeCreated.\nfunction BuiltinValueTypeParsers_xyzw (obj: Vec4, data: Array) {\n obj.x = data[1];\n obj.y = data[2];\n obj.z = data[3];\n obj.w = data[4];\n}\nconst BuiltinValueTypeSetters: Array<((obj: ValueType, data: Array) => void)> = [\n function (obj: Vec2, data: Array) {\n obj.x = data[1];\n obj.y = data[2];\n },\n function (obj: Vec3, data: Array) {\n obj.x = data[1];\n obj.y = data[2];\n obj.z = data[3];\n },\n BuiltinValueTypeParsers_xyzw, // Vec4\n BuiltinValueTypeParsers_xyzw, // Quat\n function (obj: Color, data: Array) {\n obj._val = data[1];\n },\n function (obj: Size, data: Array) {\n obj.width = data[1];\n obj.height = data[2];\n },\n function (obj: Rect, data: Array) {\n obj.x = data[1];\n obj.y = data[2];\n obj.width = data[3];\n obj.height = data[4];\n },\n function (obj: Mat4, data: Array) {\n Mat4.fromArray(obj, data, 1);\n }\n];\n\nfunction serializeBuiltinValueTypes(obj: ValueType): IValueTypeData | null {\n let ctor = obj.constructor as typeof ValueType;\n let typeId = BuiltinValueTypes.indexOf(ctor);\n switch (ctor) {\n case Vec2:\n // @ts-ignore\n return [typeId, obj.x, obj.y];\n case Vec3:\n // @ts-ignore\n return [typeId, obj.x, obj.y, obj.z];\n case Vec4:\n case Quat:\n // @ts-ignore\n return [typeId, obj.x, obj.y, obj.z, obj.w];\n case Color:\n // @ts-ignore\n return [typeId, obj._val];\n case Size:\n // @ts-ignore\n return [typeId, obj.width, obj.height];\n case Rect:\n // @ts-ignore\n return [typeId, obj.x, obj.y, obj.width, obj.height];\n case Mat4:\n // @ts-ignore\n let res: IValueTypeData = new Array(1 + 16);\n res[0] = typeId;\n Mat4.toArray(res, obj as Mat4, 1);\n return res;\n default:\n return null;\n }\n}\n\n// // TODO: Used for Data.TypedArray.\n// const TypedArrays = [\n// Float32Array,\n// Float64Array,\n//\n// Int8Array,\n// Int16Array,\n// Int32Array,\n//\n// Uint8Array,\n// Uint16Array,\n// Uint32Array,\n//\n// Uint8ClampedArray,\n// // BigInt64Array,\n// // BigUint64Array,\n// ];\n\n\n/****************************************************************************\n * TYPE DECLARATIONS\n ****************************************************************************/\n\n// Includes Bitwise NOT value.\n// Both T and U have non-negative integer ranges.\n// When the value >= 0 represents T\n// When the value is < 0, it represents ~U. Use ~x to extract the value of U.\nexport type Bnot = T|U;\n\n// Combines a boolean and a number into one value.\n// The number must >= 0.\n// When the value >= 0, the boolean is true, the number is value.\n// When the value < 0, the boolean is false, the number is ~value.\nexport type BoolAndNum = Bnot;\n\nexport type SharedString = string;\nexport type Empty = typeof EMPTY_PLACEHOLDER;\nexport type StringIndex = number;\nexport type InstanceIndex = number;\nexport type RootInstanceIndex = InstanceIndex;\nexport type NoNativeDep = boolean; // Indicates whether the asset depends on a native asset\nexport type RootInfo = BoolAndNum;\n\n// When the value >= 0 represents the string index\n// When the value is < 0, it just represents non-negative integer. Use ~x to extract the value.\nexport type StringIndexBnotNumber = Bnot;\n\n// A reverse index used to assign current parsing object to target command buffer so it could be assembled later.\n// Should >= REF.OBJ_OFFSET\nexport type ReverseIndex = number;\n\n// Used to index the current object\nexport type InstanceBnotReverseIndex = Bnot;\n\n/*@__DROP_PURE_EXPORT__*/\nconst enum DataTypeID {\n\n // Fields that can be assigned directly, can be values in any JSON, or even a complex JSON array, object (no type).\n // Contains null, no undefined, JSON does not support serialization of undefined.\n // This is the only type that supports null, and all other advanced fields are forbidden with null values.\n // If the value of an object is likely to be null, it needs to exist as a new class,\n // but the probability of this is very low and will be analyzed below.\n SimpleType = 0,\n\n //--------------------------------------------------------------------------\n // Except Simple, the rest belong to Advanced Type.\n\n // Rarely will it be NULL, as NULL will be dropped as the default value.\n InstanceRef,\n\n // Arrays of exactly equal types.\n // Arrays will have default values that developers will rarely assign to null manually.\n Array_InstanceRef,\n Array_AssetRefByInnerObj,\n\n // Embedded object\n // Rarely will it be NULL, as NULL will be dropped as the default value.\n Class,\n\n // Existing ValueType (created by the Class constructor).\n // Developers will rarely manually assign a null.\n ValueTypeCreated,\n\n // Resource reference for embedded objects (such as arrays), the value is the index of DEPEND_OBJS.\n // (The objects in INSTANCES do not need to dynamically resolve resource reference relationships, so there is no need to have the AssetRef type.)\n AssetRefByInnerObj,\n\n // Common TypedArray for cc.Node only. Never be null.\n TRS,\n\n // // From the point of view of simplified implementation,\n // // it is not supported to deserialize TypedArray that is initialized to null in the constructor.\n // // Also, the length of TypedArray cannot be changed.\n // // Developers will rarely manually assign a null.\n // TypedArray,\n\n // ValueType without default value (in arrays, dictionaries).\n // Developers will rarely manually assign a null.\n ValueType,\n\n Array_Class,\n\n // CustomizedClass embedded in Class\n CustomizedClass,\n\n // Universal dictionary with unlimited types of values (except TypedArray)\n Dict,\n\n // Universal arrays, of any type (except TypedArray) and can be unequal.\n // (The editor doesn't seem to have a good way of stopping arrays of unequal types either)\n Array,\n\n ARRAY_LENGTH,\n}\n\nexport type DataTypes = {\n [DataTypeID.SimpleType]: number | string | boolean | null | object;\n [DataTypeID.InstanceRef]: InstanceBnotReverseIndex;\n [DataTypeID.Array_InstanceRef]: Array;\n [DataTypeID.Array_AssetRefByInnerObj]: Array;\n [DataTypeID.Class]: IClassObjectData;\n [DataTypeID.ValueTypeCreated]: IValueTypeData;\n [DataTypeID.AssetRefByInnerObj]: number;\n [DataTypeID.TRS]: ITRSData;\n // [DataTypeID.TypedArray]: Array;\n [DataTypeID.ValueType]: IValueTypeData;\n [DataTypeID.Array_Class]: Array;\n [DataTypeID.CustomizedClass]: ICustomObjectData;\n [DataTypeID.Dict]: IDictData;\n [DataTypeID.Array]: IArrayData;\n};\n\nexport type PrimitiveObjectTypeID = (\n DataTypeID.SimpleType | // SimpleType also includes any pure JSON object\n DataTypeID.Array |\n DataTypeID.Array_Class |\n DataTypeID.Array_AssetRefByInnerObj |\n DataTypeID.Array_InstanceRef |\n DataTypeID.Dict\n);\n\nexport type AdvancedTypeID = Exclude\n\n\n// Collection of all data types\nexport type AnyData = DataTypes[keyof DataTypes];\n\nexport type AdvancedData = DataTypes[Exclude];\n\nexport type OtherObjectData = ICustomObjectDataContent | Exclude;\n\n// class Index of DataTypeID.CustomizedClass or PrimitiveObjectTypeID\nexport type OtherObjectTypeID = Bnot;\n\nexport interface Ctor extends Function {\n new(): T;\n}\n// Includes normal CCClass and fast defined class\nexport interface CCClass extends Ctor {\n __values__: string[]\n}\nexport type AnyCtor = Ctor;\nexport type AnyCCClass = CCClass;\n\n/**\n * If the value type is different, different Classes will be generated\n */\nconst CLASS_TYPE = 0;\nconst CLASS_KEYS = 1;\nconst CLASS_PROP_TYPE_OFFSET = 2;\nexport type IClass = [\n string|AnyCtor,\n string[],\n // offset - It is used to specify the correspondence between the elements in 1 and their AdvancedType,\n // which is only valid for AdvancedType.\n // When parsing, the type of IClass[1][x] is IClass[x + IClass[2]]\n // When serializing, IClass[2] = 2 + 1 - (The number of SimpleType)\n number,\n // The AdvancedType type corresponding to the property.\n ...DataTypeID[]\n];\n\n/**\n * Mask is used to define the properties and types that need to be deserialized.\n * Instances of the same class may have different Masks due to different default properties removed.\n */\nconst MASK_CLASS = 0;\nexport type IMask = [\n // The index of its Class\n number,\n // The indices of the property that needs to be deserialized in IClass, except that the last number represents OFFSET.\n // All properties before OFFSET are SimpleType, and those starting at OFFSET are AdvancedType.\n // default is 1\n ...number[]\n];\n\nconst OBJ_DATA_MASK = 0;\nexport type IClassObjectData = [\n // The index of its Mask\n number,\n // Starting from 1, the values corresponding to the properties in the Mask\n ...AnyData[]\n];\n\nexport type ICustomObjectDataContent = any;\n\nconst CUSTOM_OBJ_DATA_CLASS = 0;\nconst CUSTOM_OBJ_DATA_CONTENT = 1;\nexport interface ICustomObjectData extends Array {\n // The index of its Class\n [0]: number;\n // Content\n [1]: ICustomObjectDataContent;\n}\n\nconst VALUETYPE_SETTER = 0;\nexport type IValueTypeData = [\n // Predefined parsing function index\n number,\n // Starting with 1, the corresponding value in the attributes are followed in order\n ...number[]\n];\n\nexport type ITRSData = [number, number, number, number, number,\n number, number, number, number, number];\n\nconst DICT_JSON_LAYOUT = 0;\nexport interface IDictData extends Array {\n // The raw json object\n [0]: any,\n // key\n // Shared strings are not considered here, can be defined as CCClass if it is required.\n [1]: string;\n // value type\n // Should not be SimpleType, SimpleType is built directly into 0.\n [2]: AdvancedTypeID;\n // value\n [3]: AdvancedData;\n // More repeated key values\n [index: number]: any,\n}\n\nconst ARRAY_ITEM_VALUES = 0;\nexport type IArrayData = [\n AnyData[],\n // types\n ...DataTypeID[]\n];\n\n// const TYPEDARRAY_TYPE = 0;\n// const TYPEDARRAY_ELEMENTS = 1;\n// export interface ITypedArrayData extends Array {\n// [TYPEDARRAY_TYPE]: number,\n// [TYPEDARRAY_ELEMENTS]: number[],\n// }\n\n/*@__DROP_PURE_EXPORT__*/\nconst enum Refs {\n EACH_RECORD_LENGTH = 3,\n OWNER_OFFSET = 0,\n KEY_OFFSET = 1,\n TARGET_OFFSET = 2,\n}\n\nexport interface IRefs extends Array {\n // owner\n // The owner of all the objects in the front is of type object, starting from OFFSET * 3 are of type InstanceIndex\n [0]: (object | InstanceIndex),\n // property name\n [1]?: StringIndexBnotNumber;\n // target object\n [2]?: InstanceIndex;\n // All the following objects are arranged in the order of the first three values,\n // except that the last number represents OFFSET.\n [index: number]: any;\n}\n\n/*@__DROP_PURE_EXPORT__*/\nconst enum File {\n Version = 0,\n Context = 0,\n\n SharedUuids,\n SharedStrings,\n SharedClasses,\n SharedMasks,\n\n Instances,\n InstanceTypes,\n\n Refs,\n\n DependObjs,\n DependKeys,\n DependUuidIndices,\n\n ARRAY_LENGTH,\n}\n\n// Main file structure\nexport interface IFileData extends Array {\n // version\n [File.Version]: number | FileInfo | any;\n\n // Shared data area, the higher the number of references, the higher the position\n\n [File.SharedUuids]: SharedString[] | Empty; // Shared uuid strings for dependent assets\n [File.SharedStrings]: SharedString[] | Empty;\n [File.SharedClasses]: (IClass|string|AnyCCClass)[];\n [File.SharedMasks]: IMask[] | Empty; // Shared Object layouts for IClassObjectData\n\n // Data area\n\n // A one-dimensional array to represent object datas, layout is [...IClassObjectData[], ...OtherObjectData[], RootInfo]\n // If the last element is not RootInfo(number), the first element will be the root object to return and it doesn't have native asset\n [File.Instances]: (IClassObjectData|OtherObjectData|RootInfo)[];\n [File.InstanceTypes]: OtherObjectTypeID[] | Empty;\n // Object references infomation\n [File.Refs]: IRefs | Empty;\n\n // Result area\n\n // Asset-dependent objects that are deserialized and parsed into object arrays\n [File.DependObjs]: (object|InstanceIndex)[];\n // Asset-dependent key name or array index\n [File.DependKeys]: (StringIndexBnotNumber|string)[];\n // UUID of dependent assets\n [File.DependUuidIndices]: (StringIndex|string)[];\n}\n\n// type Body = Pick\ntype Shared = Pick\nconst PACKED_SECTIONS = File.Instances;\nexport interface IPackedFileData extends Shared {\n [PACKED_SECTIONS]: IFileData[];\n}\n\ninterface ICustomHandler {\n result: Details,\n customEnv: any,\n}\ntype ClassFinder = {\n (type: string): AnyCtor;\n // // for editor\n // onDereferenced: (curOwner: object, curPropName: string, newOwner: object, newPropName: string) => void;\n};\ninterface IOptions extends Partial {\n classFinder?: ClassFinder;\n _version?: number;\n}\ninterface ICustomClass {\n _deserialize: (content: any, context: ICustomHandler) => void;\n}\n\n/****************************************************************************\n * IMPLEMENTS\n ****************************************************************************/\n\n/**\n * !#en Contains meta information collected during deserialization\n * !#zh 包含反序列化后附带的元信息\n * @class Details\n */\nclass Details {\n /**\n * the obj list whose field needs to load asset by uuid\n * @property {Object[]} uuidObjList\n */\n uuidObjList: IFileData[File.DependObjs] | null = null;\n /**\n * the corresponding field name which referenced to the asset\n * @property {(String|Number)[]} uuidPropList\n */\n uuidPropList: IFileData[File.DependKeys] | null = null;\n /**\n * list of the depends assets' uuid\n * @property {String[]} uuidList\n */\n uuidList: IFileData[File.DependUuidIndices] | null = null;\n\n static pool = new js.Pool(function (obj) {\n obj.reset();\n }, 5);\n\n /**\n * @method init\n * @param {Object} data\n */\n init (data: IFileData) {\n this.uuidObjList = data[File.DependObjs];\n this.uuidPropList = data[File.DependKeys];\n this.uuidList = data[File.DependUuidIndices];\n }\n\n /**\n * @method reset\n */\n reset () {\n this.uuidList = null;\n this.uuidObjList = null;\n this.uuidPropList = null;\n };\n\n /**\n * @method push\n * @param {Object} obj\n * @param {String} propName\n * @param {String} uuid\n */\n push (obj: object, propName: string, uuid: string) {\n (this.uuidObjList as object[]).push(obj);\n (this.uuidPropList as string[]).push(propName);\n (this.uuidList as string[]).push(uuid);\n };\n}\nDetails.pool.get = function () {\n return this._get() || new Details();\n};\nif (CC_EDITOR || CC_TEST) {\n // @ts-ignore\n Details.prototype.assignAssetsBy = function (getter: (uuid: string) => any) {\n for (var i = 0, len = (this.uuidList as string[]).length; i < len; i++) {\n var obj = (this.uuidObjList as object)[i];\n var prop = (this.uuidPropList as any[])[i];\n var uuid = (this.uuidList as string[])[i];\n obj[prop] = getter(uuid as string);\n }\n };\n}\n\nfunction dereference(refs: IRefs, instances: IFileData[File.Instances], strings: IFileData[File.SharedStrings]): void {\n let dataLength = refs.length - 1;\n let i = 0;\n // owner is object\n let instanceOffset: number = refs[dataLength] * Refs.EACH_RECORD_LENGTH;\n for (; i < instanceOffset; i += Refs.EACH_RECORD_LENGTH) {\n const owner = refs[i] as any;\n\n const target = instances[refs[i + Refs.TARGET_OFFSET]];\n const keyIndex = refs[i + Refs.KEY_OFFSET] as StringIndexBnotNumber;\n if (keyIndex >= 0) {\n owner[strings[keyIndex]] = target;\n }\n else {\n owner[~keyIndex] = target;\n }\n }\n // owner is instance index\n for (; i < dataLength; i += Refs.EACH_RECORD_LENGTH) {\n const owner = instances[refs[i]] as any;\n\n const target = instances[refs[i + Refs.TARGET_OFFSET]];\n const keyIndex = refs[i + Refs.KEY_OFFSET] as StringIndexBnotNumber;\n if (keyIndex >= 0) {\n owner[strings[keyIndex]] = target;\n }\n else {\n owner[~keyIndex] = target;\n }\n }\n}\n\n//\n\nfunction deserializeCCObject (data: IFileData, objectData: IClassObjectData) {\n let mask = data[File.SharedMasks][objectData[0]];\n let clazz = mask[0];\n let ctor = clazz[0] as Exclude;\n // if (!ctor) {\n // return null;\n // }\n\n let obj = new ctor();\n\n let keys = clazz[1];\n let classTypeOffset = clazz[2];\n let maskTypeOffset = mask[mask.length - 1];\n\n // parse simple type\n let i = 0 + 1;\n for (; i < maskTypeOffset; ++i) {\n let key = keys[mask[i]];\n obj[key] = objectData[i];\n }\n\n // parse advanced type\n for (; i < objectData.length; ++i) {\n let key = keys[mask[i]];\n let type = clazz[mask[i] + classTypeOffset];\n let op = ASSIGNMENTS[type];\n op(data, obj, key, objectData[i]);\n }\n\n return obj;\n}\n\nfunction deserializeCustomCCObject (data: IFileData, ctor: Ctor, value: ICustomObjectDataContent) {\n let obj = new ctor();\n if (obj._deserialize) {\n obj._deserialize(value, data[File.Context]);\n }\n else {\n cc.errorID(5303, js.getClassName(ctor));\n }\n return obj;\n}\n\n// Parse Functions\n\ntype ParseFunction = (data: IFileData, owner: any, key: string, value: AnyData) => void;\n\nfunction assignSimple (data: IFileData, owner: any, key: string, value: DataTypes[DataTypeID.SimpleType]) {\n owner[key] = value;\n}\n\nfunction assignInstanceRef (data: IFileData, owner: any, key: string, value: InstanceBnotReverseIndex) {\n if (value >= 0) {\n owner[key] = data[File.Instances][value];\n }\n else {\n (data[File.Refs] as IRefs)[(~value) * Refs.EACH_RECORD_LENGTH] = owner;\n }\n}\n\nfunction genArrayParser (parser: ParseFunction): ParseFunction {\n return function (data: IFileData, owner: any, key: string, value: Array) {\n owner[key] = value;\n for (let i = 0; i < value.length; ++i) {\n // @ts-ignore\n parser(data, value, i, value[i]);\n }\n };\n}\n\nfunction parseAssetRefByInnerObj (data: IFileData, owner: any, key: string, value: number) {\n owner[key] = null;\n data[File.DependObjs][value] = owner;\n}\n\nfunction parseClass (data: IFileData, owner: any, key: string, value: IClassObjectData) {\n owner[key] = deserializeCCObject(data, value);\n}\n\nfunction parseCustomClass (data: IFileData, owner: any, key: string, value: ICustomObjectData) {\n let ctor = data[File.SharedClasses][value[0]] as CCClass;\n owner[key] = deserializeCustomCCObject(data, ctor, value[1]);\n}\n\nfunction parseValueTypeCreated (data: IFileData, owner: any, key: string, value: IValueTypeData) {\n BuiltinValueTypeSetters[value[0]](owner[key], value);\n}\n\nfunction parseValueType (data: IFileData, owner: any, key: string, value: IValueTypeData) {\n let val: ValueType = new BuiltinValueTypes[value[0]]();\n BuiltinValueTypeSetters[value[0]](val, value);\n owner[key] = val;\n}\n\nfunction parseTRS (data: IFileData, owner: any, key: string, value: ITRSData) {\n let typedArray = owner[key] as (Float32Array | Float64Array);\n typedArray.set(value);\n}\n\nfunction parseDict (data: IFileData, owner: any, key: string, value: IDictData) {\n let dict = value[0];\n owner[key] = dict;\n for (let i = 0 + 1; i < value.length; i += 3) {\n let key = value[i] as string;\n let type = value[i + 1] as DataTypeID;\n let subValue = value[i + 2] as AnyData;\n let op = ASSIGNMENTS[type];\n op(data, dict, key, subValue);\n }\n}\n\nfunction parseArray (data: IFileData, owner: any, key: string, value: IArrayData) {\n let array = value[0];\n owner[key] = array;\n for (let i = 0; i < array.length; ++i) {\n let subValue = array[i] as AnyData;\n let type = value[i + 1] as DataTypeID;\n if (type !== DataTypeID.SimpleType) {\n let op = ASSIGNMENTS[type];\n // @ts-ignore\n op(data, array, i, subValue);\n }\n }\n}\n\n// function parseTypedArray (data: IFileData, owner: any, key: string, value: ITypedArrayData) {\n// let val: ValueType = new TypedArrays[value[TYPEDARRAY_TYPE]]();\n// BuiltinValueTypeSetters[value[0]](val, value);\n// // obj = new window[serialized.ctor](array.length);\n// // for (let i = 0; i < array.length; ++i) {\n// // obj[i] = array[i];\n// // }\n// // return obj;\n// owner[key] = val;\n// }\n\nconst ASSIGNMENTS = new Array(DataTypeID.ARRAY_LENGTH);\nASSIGNMENTS[DataTypeID.SimpleType] = assignSimple; // Only be used in the instances array\nASSIGNMENTS[DataTypeID.InstanceRef] = assignInstanceRef;\nASSIGNMENTS[DataTypeID.Array_InstanceRef] = genArrayParser(assignInstanceRef);\nASSIGNMENTS[DataTypeID.Array_AssetRefByInnerObj] = genArrayParser(parseAssetRefByInnerObj);\nASSIGNMENTS[DataTypeID.Class] = parseClass;\nASSIGNMENTS[DataTypeID.ValueTypeCreated] = parseValueTypeCreated;\nASSIGNMENTS[DataTypeID.AssetRefByInnerObj] = parseAssetRefByInnerObj;\nASSIGNMENTS[DataTypeID.TRS] = parseTRS;\nASSIGNMENTS[DataTypeID.ValueType] = parseValueType;\nASSIGNMENTS[DataTypeID.Array_Class] = genArrayParser(parseClass);\nASSIGNMENTS[DataTypeID.CustomizedClass] = parseCustomClass;\nASSIGNMENTS[DataTypeID.Dict] = parseDict;\nASSIGNMENTS[DataTypeID.Array] = parseArray;\n// ASSIGNMENTS[DataTypeID.TypedArray] = parseTypedArray;\n\n\n\nfunction parseInstances (data: IFileData): RootInstanceIndex {\n let instances = data[File.Instances];\n let instanceTypes = data[File.InstanceTypes];\n let instanceTypesLen = instanceTypes === 0 ? 0 : (instanceTypes as OtherObjectTypeID[]).length;\n let rootIndex = instances[instances.length - 1];\n let normalObjectCount = instances.length - instanceTypesLen;\n if (typeof rootIndex !== 'number') {\n rootIndex = 0;\n }\n else {\n if (rootIndex < 0) {\n rootIndex = ~rootIndex;\n }\n --normalObjectCount;\n }\n\n // DataTypeID.Class\n\n let insIndex = 0;\n for (; insIndex < normalObjectCount; ++insIndex) {\n instances[insIndex] = deserializeCCObject(data, instances[insIndex] as IClassObjectData);\n }\n\n let classes = data[File.SharedClasses];\n for (let typeIndex = 0; typeIndex < instanceTypesLen; ++typeIndex, ++insIndex) {\n let type = instanceTypes[typeIndex] as OtherObjectTypeID;\n let eachData = instances[insIndex];\n if (type >= 0) {\n\n // class index for DataTypeID.CustomizedClass\n\n let ctor = classes[type] as CCClass; // class\n instances[insIndex] = deserializeCustomCCObject(data, ctor, eachData as ICustomObjectDataContent);\n }\n else {\n\n // Other\n\n type = (~type) as PrimitiveObjectTypeID;\n let op = ASSIGNMENTS[type];\n // @ts-ignore\n op(data, instances, insIndex, eachData);\n }\n }\n\n return rootIndex;\n}\n\n// const DESERIALIZE_AS = Attr.DELIMETER + 'deserializeAs';\n// function deserializeAs(klass: AnyCCClass, klassLayout: IClass) {\n// var attrs = Attr.getClassAttrs(klass);\n// let keys = klassLayout[1];\n// for (let i = 0; i < keys.length; ++i) {\n// let newKey = attrs[keys[i] + DESERIALIZE_AS];\n// if (newKey) {\n// // @ts-ignore\n// if (keys.includes(newKey)) {\n// // %s cannot be deserialized by property %s because %s was also present in the serialized data.\n// cc.warnID(, newKey, keys[i], newKey);\n// }\n// else {\n// keys[i] = newKey;\n// }\n// }\n// }\n// }\n\nfunction getMissingClass (hasCustomFinder, type) {\n if (!hasCustomFinder) {\n // @ts-ignore\n deserialize.reportMissingClass(type);\n }\n return Object;\n}\nfunction doLookupClass(classFinder, type: string, container: any[], index: number, silent: boolean, hasCustomFinder) {\n let klass = classFinder(type);\n if (!klass) {\n // if (klass.__FSA__) {\n // deserializeAs(klass, klassLayout as IClass);\n // }\n if (silent) {\n // generate a lazy proxy for ctor\n container[index] = (function (container, index, type) {\n return function proxy () {\n let klass = classFinder(type) || getMissingClass(hasCustomFinder, type);\n container[index] = klass;\n return new klass();\n };\n })(container, index, type);\n return;\n }\n else {\n klass = getMissingClass(hasCustomFinder, type);\n }\n }\n container[index] = klass;\n}\n\nfunction lookupClasses (data: IPackedFileData, silent: boolean, customFinder?: ClassFinder) {\n let classFinder = customFinder || js._getClassById;\n let classes = data[File.SharedClasses];\n for (let i = 0; i < classes.length; ++i) {\n let klassLayout = classes[i];\n if (typeof klassLayout !== 'string') {\n if (CC_DEBUG) {\n if (typeof klassLayout[0] === 'function') {\n throw new Error('Can not deserialize the same JSON data again.');\n }\n }\n let type: string = klassLayout[0];\n doLookupClass(classFinder, type, klassLayout as IClass, CLASS_TYPE, silent, customFinder);\n }\n else {\n doLookupClass(classFinder, klassLayout, classes, i, silent, customFinder);\n }\n }\n}\n\nfunction cacheMasks (data: IPackedFileData) {\n let masks = data[File.SharedMasks];\n if (masks) {\n let classes = data[File.SharedClasses];\n for (let i = 0; i < masks.length; ++i) {\n let mask = masks[i];\n // @ts-ignore\n mask[0] = classes[mask[0]];\n }\n }\n}\n\nfunction parseResult (data: IFileData) {\n let instances = data[File.Instances];\n let sharedStrings = data[File.SharedStrings];\n let dependSharedUuids = data[File.SharedUuids];\n\n let dependObjs = data[File.DependObjs];\n let dependKeys = data[File.DependKeys];\n let dependUuids = data[File.DependUuidIndices];\n\n for (let i = 0; i < dependObjs.length; ++i) {\n let obj: any = dependObjs[i];\n if (typeof obj === 'number') {\n dependObjs[i] = instances[obj];\n }\n else {\n // assigned by DataTypeID.AssetRefByInnerObj or added by Details object directly in _deserialize\n }\n let key: any = dependKeys[i];\n if (typeof key === 'number') {\n if (key >= 0) {\n key = sharedStrings[key];\n }\n else {\n key = ~key;\n }\n dependKeys[i] = key;\n }\n else {\n // added by Details object directly in _deserialize\n }\n let uuid = dependUuids[i];\n if (typeof uuid === 'number') {\n dependUuids[i] = (dependSharedUuids as SharedString[])[uuid as StringIndex];\n }\n else {\n // added by Details object directly in _deserialize\n }\n }\n}\n\nexport default function deserialize (data: IFileData, details: Details, options?: IOptions): object {\n // @ts-ignore\n if (CC_EDITOR && Buffer.isBuffer(data)) {\n // @ts-ignore\n data = data.toString();\n }\n if (typeof data === 'string') {\n data = JSON.parse(data);\n }\n let borrowDetails = !details;\n details = details || Details.pool.get();\n details.init(data);\n options = options || {};\n\n let version = data[File.Version];\n let preprocessed = false;\n if (typeof version === 'object') {\n preprocessed = version.preprocessed;\n version = version.version;\n }\n if (version < 1) {\n throw new Error(cc.debug.getError(5304, version));\n }\n options._version = version;\n options.result = details;\n data[File.Context] = options;\n\n if (!preprocessed) {\n lookupClasses(data, false, options.classFinder);\n cacheMasks(data);\n }\n\n cc.game._isCloning = true;\n let instances = data[File.Instances];\n let rootIndex = parseInstances(data);\n cc.game._isCloning = false;\n\n if (data[File.Refs]) {\n dereference(data[File.Refs] as IRefs, instances, data[File.SharedStrings]);\n }\n\n parseResult(data);\n\n if (borrowDetails) {\n Details.pool.put(details);\n }\n\n return instances[rootIndex];\n};\n\ndeserialize.Details = Details;\n\nclass FileInfo {\n declare version: number;\n preprocessed = true;\n constructor (version: number) {\n this.version = version;\n }\n}\n\nexport function unpackJSONs (data: IPackedFileData, classFinder?: ClassFinder): IFileData[] {\n if (data[File.Version] < 1) {\n throw new Error(cc.debug.getError(5304, data[File.Version]));\n }\n lookupClasses(data, true, classFinder);\n cacheMasks(data);\n\n let version = new FileInfo(data[File.Version]);\n let sharedUuids = data[File.SharedUuids];\n let sharedStrings = data[File.SharedStrings];\n let sharedClasses = data[File.SharedClasses];\n let sharedMasks = data[File.SharedMasks];\n\n let sections = data[PACKED_SECTIONS];\n for (let i = 0; i < sections.length; ++i) {\n sections[i].unshift(version, sharedUuids, sharedStrings, sharedClasses, sharedMasks);\n }\n return sections;\n}\n\nexport function packCustomObjData (type: string, data: IClassObjectData|OtherObjectData, hasNativeDep?: boolean): IFileData {\n return [\n 1, EMPTY_PLACEHOLDER, EMPTY_PLACEHOLDER,\n [type],\n EMPTY_PLACEHOLDER,\n hasNativeDep ? [data, ~0] : [data],\n [0],\n EMPTY_PLACEHOLDER, [], [], []\n ];\n}\n\nexport function hasNativeDep (data: IFileData): boolean {\n let instances = data[File.Instances];\n let rootInfo = instances[instances.length - 1];\n if (typeof rootInfo !== 'number') {\n return false;\n }\n else {\n return rootInfo < 0;\n }\n}\n\nif (CC_PREVIEW) {\n deserialize.isCompiledJson = function (json: object): boolean {\n if (Array.isArray(json)) {\n let version = json[0];\n // array[0] will not be a number in the editor version\n return typeof version === 'number' || version instanceof FileInfo;\n }\n else {\n return false;\n }\n };\n}\n\nexport function getDependUuidList (json: IFileData): Array {\n let sharedUuids = json[File.SharedUuids];\n return json[File.DependUuidIndices].map(index => sharedUuids[index]);\n}\n\nif (CC_EDITOR || CC_TEST) {\n cc._deserializeCompiled = deserialize;\n deserialize.macros = {\n EMPTY_PLACEHOLDER,\n CUSTOM_OBJ_DATA_CLASS,\n CUSTOM_OBJ_DATA_CONTENT,\n CLASS_TYPE,\n CLASS_KEYS,\n CLASS_PROP_TYPE_OFFSET,\n MASK_CLASS,\n OBJ_DATA_MASK,\n DICT_JSON_LAYOUT,\n ARRAY_ITEM_VALUES,\n PACKED_SECTIONS,\n };\n deserialize._BuiltinValueTypes = BuiltinValueTypes;\n deserialize._serializeBuiltinValueTypes = serializeBuiltinValueTypes;\n}\n\nif (CC_TEST) {\n cc._Test.deserializeCompiled = {\n deserialize,\n dereference,\n deserializeCCObject,\n deserializeCustomCCObject,\n parseInstances,\n parseResult,\n cacheMasks,\n File: {\n Version: File.Version,\n Context: File.Context,\n SharedUuids: File.SharedUuids,\n SharedStrings: File.SharedStrings,\n SharedClasses: File.SharedClasses,\n SharedMasks: File.SharedMasks,\n Instances: File.Instances,\n InstanceTypes: File.InstanceTypes,\n Refs: File.Refs,\n DependObjs: File.DependObjs,\n DependKeys: File.DependKeys,\n DependUuidIndices: File.DependUuidIndices,\n // ArrayLength: File.ArrayLength,\n },\n DataTypeID: {\n SimpleType: DataTypeID.SimpleType,\n InstanceRef: DataTypeID.InstanceRef,\n Array_InstanceRef: DataTypeID.Array_InstanceRef,\n Array_AssetRefByInnerObj: DataTypeID.Array_AssetRefByInnerObj,\n Class: DataTypeID.Class,\n ValueTypeCreated: DataTypeID.ValueTypeCreated,\n AssetRefByInnerObj: DataTypeID.AssetRefByInnerObj,\n TRS: DataTypeID.TRS,\n ValueType: DataTypeID.ValueType,\n Array_Class: DataTypeID.Array_Class,\n CustomizedClass: DataTypeID.CustomizedClass,\n Dict: DataTypeID.Dict,\n Array: DataTypeID.Array,\n // TypedArray: DataTypeID.TypedArray,\n },\n BuiltinValueTypes,\n unpackJSONs,\n };\n}\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2020 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport deserializeForCompiled from './deserialize-compiled';\n\ndeserializeForCompiled.reportMissingClass = function (id) {\n if (CC_EDITOR && Editor.Utils.UuidUtils.isUuid(id)) {\n id = Editor.Utils.UuidUtils.decompressUuid(id);\n cc.warnID(5301, id);\n }\n else {\n cc.warnID(5302, id);\n }\n};\n\nif (CC_BUILD) {\n cc.deserialize = deserializeForCompiled;\n}\nelse {\n let deserializeForEditor = require('./deserialize-editor');\n\n cc.deserialize = function (data, details, options) {\n if (CC_EDITOR && Buffer.isBuffer(data)) {\n data = data.toString();\n }\n if (typeof data === 'string') {\n data = JSON.parse(data);\n }\n if (CC_PREVIEW) {\n // support for loading Asset Bundle from server\n if (deserializeForCompiled.isCompiledJson(data)) {\n return deserializeForCompiled(data, details, options);\n }\n }\n return deserializeForEditor(data, details, options);\n };\n cc.deserialize.reportMissingClass = deserializeForCompiled.reportMissingClass;\n cc.deserialize.Details = deserializeForEditor.Details;\n}\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n// ID generater for runtime\n\nvar NonUuidMark = '.';\n\n/*\n * @param {string} [category] - You can specify a unique category to avoid id collision with other instance of IdGenerater\n */\nfunction IdGenerater (category) {\n // init with a random id to emphasize that the returns id should not be stored in persistence data\n this.id = 0 | (Math.random() * 998);\n \n this.prefix = category ? (category + NonUuidMark) : '';\n}\n\n/*\n * @method getNewId\n * @return {string}\n */\nIdGenerater.prototype.getNewId = function () {\n return this.prefix + (++this.id);\n};\n\n/*\n * The global id generater might have a conflict problem once every 365 days,\n * if the game runs at 60 FPS and each frame 4760273 counts of new id are requested.\n */\nIdGenerater.global = new IdGenerater('global');\n\nmodule.exports = IdGenerater;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nrequire('./js');\nrequire('./CCClass');\nrequire('./CCClassDecorator');\nrequire('./CCEnum');\nrequire('./CCObject');\nrequire('./callbacks-invoker');\nrequire('./deserialize');\nrequire('./instantiate');\nrequire('./instantiate-jit');\nrequire('./requiring-frame');\nrequire('./CCSys');\nrequire('./CCMacro');\n\nif (!(CC_EDITOR && Editor.isMainProcess)) {\n require('./CCVisibleRect');\n}","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n// Some helper methods for compile instantiation code\n\nvar CCObject = require('./CCObject');\nvar Destroyed = CCObject.Flags.Destroyed;\nvar PersistentMask = CCObject.Flags.PersistentMask;\nvar Attr = require('./attribute');\nvar js = require('./js');\nvar CCClass = require('./CCClass');\nvar Compiler = require('./compiler');\n\nvar DEFAULT = Attr.DELIMETER + 'default';\nvar IDENTIFIER_RE = CCClass.IDENTIFIER_RE;\nvar escapeForJS = CCClass.escapeForJS;\n\nconst VAR = 'var ';\nconst LOCAL_OBJ = 'o';\nconst LOCAL_TEMP_OBJ = 't';\nconst LOCAL_ARRAY = 'a';\nconst LINE_INDEX_OF_NEW_OBJ = 0;\n\nconst DEFAULT_MODULE_CACHE = {\n 'cc.Node': 'cc.Node',\n 'cc.Sprite': 'cc.Sprite',\n 'cc.Label': 'cc.Label',\n 'cc.Button': 'cc.Button',\n 'cc.Widget': 'cc.Widget',\n 'cc.Animation': 'cc.Animation',\n 'cc.ClickEvent': false,\n 'cc.PrefabInfo': false\n};\n\ntry {\n // compatible for IE\n !Float32Array.name && (Float32Array.name = 'Float32Array');\n !Float64Array.name && (Float64Array.name = 'Float64Array');\n\n !Int8Array.name && (Int8Array.name = 'Int8Array');\n !Int16Array.name && (Int16Array.name = 'Int16Array');\n !Int32Array.name && (Int32Array.name = 'Int32Array');\n\n !Uint8Array.name && (Uint8Array.name = 'Uint8Array');\n !Uint16Array.name && (Uint16Array.name = 'Uint16Array');\n !Uint32Array.name && (Uint32Array.name = 'Uint32Array');\n\n !Uint8ClampedArray.name && (Uint8ClampedArray.name = 'Uint8ClampedArray');\n}\ncatch (e) {}\n\n// compatible for iOS 9\nfunction getTypedArrayName (constructor) {\n if (constructor === Float32Array) { return 'Float32Array'; }\n else if (constructor === Float64Array) { return 'Float64Array'; }\n\n else if (constructor === Int8Array) { return 'Int8Array'; }\n else if (constructor === Int16Array) { return 'Int16Array'; }\n else if (constructor === Int32Array) { return 'Int32Array'; }\n\n else if (constructor === Uint8Array) { return 'Uint8Array'; }\n else if (constructor === Uint16Array) { return 'Uint16Array'; }\n else if (constructor === Uint32Array) { return 'Uint32Array'; }\n\n else if (constructor === Uint8ClampedArray) { return 'Uint8ClampedArray'; }\n else {\n throw new Error(`Unknown TypedArray to instantiate: ${constructor}`);\n }\n}\n\n// HELPER CLASSES\n\n// ('foo', 'bar')\n// -> 'var foo = bar;'\nfunction Declaration (varName, expression) {\n this.varName = varName;\n this.expression = expression;\n}\nDeclaration.prototype.toString = function () {\n return VAR + this.varName + '=' + this.expression + ';';\n};\n\n// ('a =', 'var b = x')\n// -> 'var b = a = x';\n// ('a =', 'x')\n// -> 'a = x';\nfunction mergeDeclaration (statement, expression) {\n if (expression instanceof Declaration) {\n return new Declaration(expression.varName, statement + expression.expression);\n }\n else {\n return statement + expression;\n }\n}\n\n// ('a', ['var b = x', 'b.foo = bar'])\n// -> 'var b = a = x;'\n// -> 'b.foo = bar;'\n// ('a', 'var b = x')\n// -> 'var b = a = x;'\n// ('a', 'x')\n// -> 'a = x;'\nfunction writeAssignment (codeArray, statement, expression) {\n if (Array.isArray(expression)) {\n expression[0] = mergeDeclaration(statement, expression[0]);\n codeArray.push(expression);\n }\n else {\n codeArray.push(mergeDeclaration(statement, expression) + ';');\n }\n}\n\n// ('foo', 'bar')\n// -> 'targetExpression.foo = bar'\n// ('foo1', 'bar1')\n// ('foo2', 'bar2')\n// -> 't = targetExpression;'\n// -> 't.foo1 = bar1;'\n// -> 't.foo2 = bar2;'\nfunction Assignments (targetExpression) {\n this._exps = [];\n this._targetExp = targetExpression;\n}\nAssignments.prototype.append = function (key, expression) {\n this._exps.push([key, expression]);\n};\nAssignments.prototype.writeCode = function (codeArray) {\n var targetVar;\n if (this._exps.length > 1) {\n codeArray.push(LOCAL_TEMP_OBJ + '=' + this._targetExp + ';');\n targetVar = LOCAL_TEMP_OBJ;\n }\n else if (this._exps.length === 1) {\n targetVar = this._targetExp;\n }\n else {\n return;\n }\n for (var i = 0; i < this._exps.length; i++) {\n var pair = this._exps[i];\n writeAssignment(codeArray, targetVar + getPropAccessor(pair[0]) + '=', pair[1]);\n }\n};\n\nAssignments.pool = new js.Pool(function (obj) {\n obj._exps.length = 0;\n obj._targetExp = null;\n }, 1);\nAssignments.pool.get = function (targetExpression) {\n var cache = this._get() || new Assignments();\n cache._targetExp = targetExpression;\n return cache;\n};\n\n// HELPER FUNCTIONS\n\nfunction equalsToDefault (def, value) {\n if (typeof def === 'function') {\n try {\n def = def();\n }\n catch (e) {\n return false;\n }\n }\n if (def === value) {\n return true;\n }\n if (def && value &&\n typeof def === 'object' && typeof value === 'object' &&\n def.constructor === value.constructor)\n {\n if (def instanceof cc.ValueType) {\n if (def.equals(value)) {\n return true;\n }\n }\n else if (Array.isArray(def)) {\n return def.length === 0 && value.length === 0;\n }\n else if (def.constructor === Object) {\n return js.isEmptyObject(def) && js.isEmptyObject(value);\n }\n }\n return false;\n}\n\nfunction getPropAccessor (key) {\n return IDENTIFIER_RE.test(key) ? ('.' + key) : ('[' + escapeForJS(key) + ']');\n}\n\n//\n\n/*\n * Variables:\n * {Object[]} O - objs list\n * {Function[]} F - constructor list\n * {Node} [R] - specify an instantiated prefabRoot that all references to prefabRoot in prefab will redirect to\n * {Object} o - current creating object\n */\n\n/*\n * @param {Object} obj - the object to parse\n * @param {Node} [parent]\n */\nfunction Parser (obj, parent) {\n this.parent = parent;\n\n this.objsToClear_iN$t = []; // used to reset _iN$t variable\n this.codeArray = [];\n\n // datas for generated code\n this.objs = [];\n this.funcs = [];\n\n this.funcModuleCache = js.createMap();\n js.mixin(this.funcModuleCache, DEFAULT_MODULE_CACHE);\n\n // {String[]} - variable names for circular references,\n // not really global, just local variables shared between sub functions\n this.globalVariables = [];\n // incremental id for new global variables\n this.globalVariableId = 0;\n // incremental id for new local variables\n this.localVariableId = 0;\n\n // generate codeArray\n //if (Array.isArray(obj)) {\n // this.codeArray.push(this.instantiateArray(obj));\n //}\n //else {\n this.codeArray.push(VAR + LOCAL_OBJ + ',' + LOCAL_TEMP_OBJ + ';',\n 'if(R){',\n LOCAL_OBJ + '=R;',\n '}else{',\n LOCAL_OBJ + '=R=new ' + this.getFuncModule(obj.constructor, true) + '();',\n '}');\n js.value(obj, '_iN$t', { globalVar: 'R' }, true);\n this.objsToClear_iN$t.push(obj);\n this.enumerateObject(this.codeArray, obj);\n //}\n\n // generate code\n var globalVariablesDeclaration;\n if (this.globalVariables.length > 0) {\n globalVariablesDeclaration = VAR + this.globalVariables.join(',') + ';';\n }\n var code = Compiler.flattenCodeArray(['return (function(R){',\n globalVariablesDeclaration || [],\n this.codeArray,\n 'return o;',\n '})']);\n\n // generate method and bind with objs\n this.result = Function('O', 'F', code)(this.objs, this.funcs);\n\n // if (CC_TEST && !isPhantomJS) {\n // console.log(code);\n // }\n\n // cleanup\n for (var i = 0, len = this.objsToClear_iN$t.length; i < len; ++i) {\n this.objsToClear_iN$t[i]._iN$t = null;\n }\n this.objsToClear_iN$t.length = 0;\n}\n\nvar proto = Parser.prototype;\n\nproto.getFuncModule = function (func, usedInNew) {\n var clsName = js.getClassName(func);\n if (clsName) {\n var cache = this.funcModuleCache[clsName];\n if (cache) {\n return cache;\n }\n else if (cache === undefined) {\n var clsNameIsModule = clsName.indexOf('.') !== -1;\n if (clsNameIsModule) {\n try {\n // ensure is module\n clsNameIsModule = (func === Function('return ' + clsName)());\n if (clsNameIsModule) {\n this.funcModuleCache[clsName] = clsName;\n return clsName;\n }\n }\n catch (e) {}\n }\n }\n }\n var index = this.funcs.indexOf(func);\n if (index < 0) {\n index = this.funcs.length;\n this.funcs.push(func);\n }\n var res = 'F[' + index + ']';\n if (usedInNew) {\n res = '(' + res + ')';\n }\n this.funcModuleCache[clsName] = res;\n return res;\n};\n\nproto.getObjRef = function (obj) {\n var index = this.objs.indexOf(obj);\n if (index < 0) {\n index = this.objs.length;\n this.objs.push(obj);\n }\n return 'O[' + index + ']';\n};\n\nproto.setValueType = function (codeArray, defaultValue, srcValue, targetExpression) {\n var assignments = Assignments.pool.get(targetExpression);\n var fastDefinedProps = defaultValue.constructor.__props__;\n if (!fastDefinedProps) {\n fastDefinedProps = Object.keys(defaultValue);\n }\n for (var i = 0; i < fastDefinedProps.length; i++) {\n var propName = fastDefinedProps[i];\n var prop = srcValue[propName];\n if (defaultValue[propName] === prop) {\n continue;\n }\n var expression = this.enumerateField(srcValue, propName, prop);\n assignments.append(propName, expression);\n }\n assignments.writeCode(codeArray);\n Assignments.pool.put(assignments);\n};\n\nproto.enumerateCCClass = function (codeArray, obj, klass) {\n var props = klass.__values__;\n var attrs = Attr.getClassAttrs(klass);\n for (var p = 0; p < props.length; p++) {\n var key = props[p];\n var val = obj[key];\n var defaultValue = attrs[key + DEFAULT];\n if (equalsToDefault(defaultValue, val)) {\n continue;\n }\n if (typeof val === 'object' && val instanceof cc.ValueType) {\n defaultValue = CCClass.getDefault(defaultValue);\n if (defaultValue && defaultValue.constructor === val.constructor) {\n // fast case\n var targetExpression = LOCAL_OBJ + getPropAccessor(key);\n this.setValueType(codeArray, defaultValue, val, targetExpression);\n continue;\n }\n }\n this.setObjProp(codeArray, obj, key, val);\n }\n};\n\nproto.instantiateArray = function (value) {\n if (value.length === 0) {\n return '[]';\n }\n\n var arrayVar = LOCAL_ARRAY + (++this.localVariableId);\n var declaration = new Declaration(arrayVar, 'new Array(' + value.length + ')');\n var codeArray = [declaration];\n\n // assign a _iN$t flag to indicate that this object has been parsed.\n js.value(value, '_iN$t', {\n globalVar: '', // the name of declared global variable used to access this object\n source: codeArray, // the source code array for this object\n }, true);\n this.objsToClear_iN$t.push(value);\n\n for (var i = 0; i < value.length; ++i) {\n var statement = arrayVar + '[' + i + ']=';\n var expression = this.enumerateField(value, i, value[i]);\n writeAssignment(codeArray, statement, expression);\n }\n return codeArray;\n};\n\nproto.instantiateTypedArray = function (value) {\n let type = value.constructor.name || getTypedArrayName(value.constructor);\n if (value.length === 0) {\n return 'new ' + type;\n }\n\n let arrayVar = LOCAL_ARRAY + (++this.localVariableId);\n let declaration = new Declaration(arrayVar, 'new ' + type + '(' + value.length + ')');\n let codeArray = [declaration];\n\n // assign a _iN$t flag to indicate that this object has been parsed.\n value._iN$t = {\n globalVar: '', // the name of declared global variable used to access this object\n source: codeArray, // the source code array for this object\n };\n this.objsToClear_iN$t.push(value);\n\n for (var i = 0; i < value.length; ++i) {\n if (value[i] !== 0) {\n var statement = arrayVar + '[' + i + ']=';\n writeAssignment(codeArray, statement, value[i]);\n }\n }\n return codeArray;\n};\n\nproto.enumerateField = function (obj, key, value) {\n if (typeof value === 'object' && value) {\n var _iN$t = value._iN$t;\n if (_iN$t) {\n // parsed\n var globalVar = _iN$t.globalVar;\n if (!globalVar) {\n // declare a global var\n globalVar = _iN$t.globalVar = 'v' + (++this.globalVariableId);\n this.globalVariables.push(globalVar);\n // insert assignment statement to assign to global var\n var line = _iN$t.source[LINE_INDEX_OF_NEW_OBJ];\n _iN$t.source[LINE_INDEX_OF_NEW_OBJ] = mergeDeclaration(globalVar + '=', line);\n // if (typeof line ==='string' && line.startsWith(VAR)) {\n // // var o=xxx -> var o=global=xxx\n // var LEN_OF_VAR_O = 5;\n // _iN$t.source[LINE_INDEX_OF_NEW_OBJ] = line.slice(0, LEN_OF_VAR_O) + '=' + globalVar + line.slice(LEN_OF_VAR_O);\n // }\n }\n return globalVar;\n }\n else if (ArrayBuffer.isView(value)) {\n return this.instantiateTypedArray(value);\n }\n else if (Array.isArray(value)) {\n return this.instantiateArray(value);\n }\n else {\n return this.instantiateObj(value);\n }\n }\n else if (typeof value === 'function') {\n return this.getFuncModule(value);\n }\n else if (typeof value === 'string') {\n return escapeForJS(value);\n }\n else {\n if (key === '_objFlags' && (obj instanceof CCObject)) {\n value &= PersistentMask;\n }\n return value;\n }\n};\n\nproto.setObjProp = function (codeArray, obj, key, value) {\n var statement = LOCAL_OBJ + getPropAccessor(key) + '=';\n var expression = this.enumerateField(obj, key, value);\n writeAssignment(codeArray, statement, expression);\n};\n\n// codeArray - the source code array for this object\nproto.enumerateObject = function (codeArray, obj) {\n var klass = obj.constructor;\n if (cc.Class._isCCClass(klass)) {\n this.enumerateCCClass(codeArray, obj, klass);\n }\n else {\n // primitive javascript object\n for (var key in obj) {\n if (!obj.hasOwnProperty(key) ||\n (key.charCodeAt(0) === 95 && key.charCodeAt(1) === 95 && // starts with \"__\"\n key !== '__type__')\n ) {\n continue;\n }\n var value = obj[key];\n if (typeof value === 'object' && value && value === obj._iN$t) {\n continue;\n }\n this.setObjProp(codeArray, obj, key, value);\n }\n }\n};\n\nproto.instantiateObj = function (obj) {\n if (obj instanceof cc.ValueType) {\n return CCClass.getNewValueTypeCode(obj);\n }\n if (obj instanceof cc.Asset) {\n // register to asset list and just return the reference.\n return this.getObjRef(obj);\n }\n if (obj._objFlags & Destroyed) {\n // the same as cc.isValid(obj)\n return null;\n }\n\n var createCode;\n var ctor = obj.constructor;\n if (cc.Class._isCCClass(ctor)) {\n if (this.parent) {\n if (this.parent instanceof cc.Component) {\n if (obj instanceof cc._BaseNode || obj instanceof cc.Component) {\n return this.getObjRef(obj);\n }\n }\n else if (this.parent instanceof cc._BaseNode) {\n if (obj instanceof cc._BaseNode) {\n if (!obj.isChildOf(this.parent)) {\n // should not clone other nodes if not descendant\n return this.getObjRef(obj);\n }\n }\n else if (obj instanceof cc.Component) {\n if (!obj.node.isChildOf(this.parent)) {\n // should not clone other component if not descendant\n return this.getObjRef(obj);\n }\n }\n }\n }\n createCode = new Declaration(LOCAL_OBJ, 'new ' + this.getFuncModule(ctor, true) + '()');\n }\n else if (ctor === Object) {\n createCode = new Declaration(LOCAL_OBJ, '{}');\n }\n else if (!ctor) {\n createCode = new Declaration(LOCAL_OBJ, 'Object.create(null)');\n }\n else {\n // do not clone unknown type\n return this.getObjRef(obj);\n }\n\n var codeArray = [createCode];\n\n // assign a _iN$t flag to indicate that this object has been parsed.\n js.value(obj, '_iN$t', {\n globalVar: '', // the name of declared global variable used to access this object\n source: codeArray, // the source code array for this object\n //propName: '', // the propName this object defined in its source code,\n // // if defined, use LOCAL_OBJ.propName to access the obj, else just use o\n }, true);\n this.objsToClear_iN$t.push(obj);\n\n this.enumerateObject(codeArray, obj);\n return ['(function(){',\n codeArray,\n 'return o;})();'];\n};\n\n\nfunction compile (node) {\n var root = (node instanceof cc._BaseNode) && node;\n var parser = new Parser(node, root);\n return parser.result;\n}\n\nmodule.exports = {\n compile: compile,\n equalsToDefault: equalsToDefault\n};\n\nif (CC_TEST) {\n cc._Test.IntantiateJit = module.exports;\n}\n","/****************************************************************************\r\n Copyright (c) 2013-2016 Chukong Technologies Inc.\r\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\r\n\r\n https://www.cocos.com/\r\n\r\n Permission is hereby granted, free of charge, to any person obtaining a copy\r\n of this software and associated engine source code (the \"Software\"), a limited,\r\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\r\n to use Cocos Creator solely to develop games on your target platforms. You shall\r\n not use Cocos Creator software for developing other software or tools that's\r\n used for developing games. You are not granted to publish, distribute,\r\n sublicense, and/or sell copies of Cocos Creator.\r\n\r\n The software or tools in this License Agreement are licensed, not sold.\r\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\r\n\r\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n THE SOFTWARE.\r\n ****************************************************************************/\r\n\r\nvar CCObject = require('./CCObject');\r\nvar CCValueType = require('../value-types/value-type');\r\nvar Destroyed = CCObject.Flags.Destroyed;\r\nvar PersistentMask = CCObject.Flags.PersistentMask;\r\nvar _isDomNode = require('./utils').isDomNode;\r\nvar js = require('./js');\r\n\r\n/**\r\n * !#en Clones the object `original` and returns the clone, or instantiate a node from the Prefab.\r\n * !#zh 克隆指定的任意类型的对象,或者从 Prefab 实例化出新节点。\r\n *\r\n * (Instantiate 时,function 和 dom 等非可序列化对象会直接保留原有引用,Asset 会直接进行浅拷贝,可序列化类型会进行深拷贝。)\r\n *\r\n * @method instantiate\r\n * @param {Prefab|Node|Object} original - An existing object that you want to make a copy of.\r\n * @return {Node|Object} the newly instantiated object\r\n * @typescript\r\n * instantiate(original: Prefab): Node\r\n * instantiate(original: T): T\r\n * @example\r\n * // instantiate node from prefab\r\n * var scene = cc.director.getScene();\r\n * var node = cc.instantiate(prefabAsset);\r\n * node.parent = scene;\r\n * // clone node\r\n * var scene = cc.director.getScene();\r\n * var node = cc.instantiate(targetNode);\r\n * node.parent = scene;\r\n */\r\nfunction instantiate (original, internal_force) {\r\n if (!internal_force) {\r\n if (typeof original !== 'object' || Array.isArray(original)) {\r\n if (CC_DEV) {\r\n cc.errorID(6900);\r\n }\r\n return null;\r\n }\r\n if (!original) {\r\n if (CC_DEV) {\r\n cc.errorID(6901);\r\n }\r\n return null;\r\n }\r\n if (!cc.isValid(original)) {\r\n if (CC_DEV) {\r\n cc.errorID(6902);\r\n }\r\n return null;\r\n }\r\n if (CC_DEV && original instanceof cc.Component) {\r\n cc.warn('Should not instantiate a single cc.Component directly, you must instantiate the entire node.');\r\n }\r\n }\r\n\r\n var clone;\r\n if (original instanceof CCObject) {\r\n // Invoke _instantiate method if supplied.\r\n // The _instantiate callback will be called only on the root object, its associated object will not be called.\r\n // @callback associated\r\n // @param {Object} [instantiated] - If supplied, _instantiate just need to initialize the instantiated object,\r\n // no need to create new object by itself.\r\n // @returns {Object} - the instantiated object\r\n if (original._instantiate) {\r\n cc.game._isCloning = true;\r\n clone = original._instantiate(null, true);\r\n cc.game._isCloning = false;\r\n return clone;\r\n }\r\n else if (original instanceof cc.Asset) {\r\n // 不允许用通用方案实例化资源\r\n if (CC_DEV) {\r\n cc.errorID(6903);\r\n }\r\n return null;\r\n }\r\n }\r\n\r\n cc.game._isCloning = true;\r\n clone = doInstantiate(original);\r\n cc.game._isCloning = false;\r\n return clone;\r\n}\r\n\r\nvar objsToClearTmpVar = []; // used to reset _iN$t variable\r\n\r\n///**\r\n// * Do instantiate object, the object to instantiate must be non-nil.\r\n// * 这是一个通用的 instantiate 方法,可能效率比较低。\r\n// * 之后可以给各种类型重写快速实例化的特殊实现,但应该在单元测试中将结果和这个方法的结果进行对比。\r\n// * 值得注意的是,这个方法不可重入。\r\n// *\r\n// * @param {Object} obj - 该方法仅供内部使用,用户需负责保证参数合法。什么参数是合法的请参考 cc.instantiate 的实现。\r\n// * @param {Node} [parent] - 只有在该对象下的场景物体会被克隆。\r\n// * @return {Object}\r\n// * @private\r\n// */\r\nfunction doInstantiate (obj, parent) {\r\n if (Array.isArray(obj)) {\r\n if (CC_DEV) {\r\n cc.errorID(6904);\r\n }\r\n return null;\r\n }\r\n if (_isDomNode && _isDomNode(obj)) {\r\n if (CC_DEV) {\r\n cc.errorID(6905);\r\n }\r\n return null;\r\n }\r\n\r\n var clone;\r\n if (obj._iN$t) {\r\n // User can specify an existing object by assigning the \"_iN$t\" property.\r\n // enumerateObject will always push obj to objsToClearTmpVar\r\n clone = obj._iN$t;\r\n }\r\n else if (obj.constructor) {\r\n var klass = obj.constructor;\r\n clone = new klass();\r\n }\r\n else {\r\n clone = Object.create(null);\r\n }\r\n\r\n enumerateObject(obj, clone, parent);\r\n\r\n for (var i = 0, len = objsToClearTmpVar.length; i < len; ++i) {\r\n objsToClearTmpVar[i]._iN$t = null;\r\n }\r\n objsToClearTmpVar.length = 0;\r\n\r\n return clone;\r\n}\r\n\r\n// @param {Object} obj - The object to instantiate, typeof must be 'object' and should not be an array.\r\n\r\nfunction enumerateCCClass (klass, obj, clone, parent) {\r\n var props = klass.__values__;\r\n for (var p = 0; p < props.length; p++) {\r\n var key = props[p];\r\n var value = obj[key];\r\n if (typeof value === 'object' && value) {\r\n var initValue = clone[key];\r\n if (initValue instanceof CCValueType &&\r\n initValue.constructor === value.constructor) {\r\n initValue.set(value);\r\n }\r\n else {\r\n clone[key] = value._iN$t || instantiateObj(value, parent);\r\n }\r\n }\r\n else {\r\n clone[key] = value;\r\n }\r\n }\r\n}\r\n\r\nfunction enumerateObject (obj, clone, parent) {\r\n // 目前使用“_iN$t”这个特殊字段来存实例化后的对象,这样做主要是为了防止循环引用\r\n // 注意,为了避免循环引用,所有新创建的实例,必须在赋值前被设为源对象的_iN$t\r\n js.value(obj, '_iN$t', clone, true);\r\n objsToClearTmpVar.push(obj);\r\n var klass = obj.constructor;\r\n if (cc.Class._isCCClass(klass)) {\r\n enumerateCCClass(klass, obj, clone, parent);\r\n }\r\n else {\r\n // primitive javascript object\r\n for (var key in obj) {\r\n if (!obj.hasOwnProperty(key) ||\r\n (key.charCodeAt(0) === 95 && key.charCodeAt(1) === 95 && // starts with \"__\"\r\n key !== '__type__')\r\n ) {\r\n continue;\r\n }\r\n var value = obj[key];\r\n if (typeof value === 'object' && value) {\r\n if (value === clone) {\r\n continue; // value is obj._iN$t\r\n }\r\n clone[key] = value._iN$t || instantiateObj(value, parent);\r\n }\r\n else {\r\n clone[key] = value;\r\n }\r\n }\r\n }\r\n if (obj instanceof CCObject) {\r\n clone._objFlags &= PersistentMask;\r\n }\r\n}\r\n\r\n/*\r\n * @param {Object|Array} obj - the original non-nil object, typeof must be 'object'\r\n * @return {Object|Array} - the original non-nil object, typeof must be 'object'\r\n */\r\nfunction instantiateObj (obj, parent) {\r\n if (obj instanceof CCValueType) {\r\n return obj.clone();\r\n }\r\n if (obj instanceof cc.Asset) {\r\n // 所有资源直接引用,不需要拷贝\r\n return obj;\r\n }\r\n var clone;\r\n if (ArrayBuffer.isView(obj)) {\r\n let len = obj.length;\r\n clone = new (obj.constructor)(len);\r\n obj._iN$t = clone;\r\n objsToClearTmpVar.push(obj);\r\n for (let i = 0; i < len; ++i) {\r\n clone[i] = obj[i];\r\n }\r\n return clone;\r\n }\r\n if (Array.isArray(obj)) {\r\n let len = obj.length;\r\n clone = new Array(len);\r\n js.value(obj, '_iN$t', clone, true);\r\n objsToClearTmpVar.push(obj);\r\n for (let i = 0; i < len; ++i) {\r\n var value = obj[i];\r\n if (typeof value === 'object' && value) {\r\n clone[i] = value._iN$t || instantiateObj(value, parent);\r\n }\r\n else {\r\n clone[i] = value;\r\n }\r\n }\r\n return clone;\r\n }\r\n else if (obj._objFlags & Destroyed) {\r\n // the same as cc.isValid(obj)\r\n return null;\r\n }\r\n\r\n var ctor = obj.constructor;\r\n if (cc.Class._isCCClass(ctor)) {\r\n if (parent) {\r\n if (parent instanceof cc.Component) {\r\n if (obj instanceof cc._BaseNode || obj instanceof cc.Component) {\r\n return obj;\r\n }\r\n }\r\n else if (parent instanceof cc._BaseNode) {\r\n if (obj instanceof cc._BaseNode) {\r\n if (!obj.isChildOf(parent)) {\r\n // should not clone other nodes if not descendant\r\n return obj;\r\n }\r\n }\r\n else if (obj instanceof cc.Component) {\r\n if (!obj.node.isChildOf(parent)) {\r\n // should not clone other component if not descendant\r\n return obj;\r\n }\r\n }\r\n }\r\n }\r\n clone = new ctor();\r\n }\r\n else if (ctor === Object) {\r\n clone = {};\r\n }\r\n else if (!ctor) {\r\n clone = Object.create(null);\r\n }\r\n else {\r\n // unknown type\r\n return obj;\r\n }\r\n enumerateObject(obj, clone, parent);\r\n return clone;\r\n}\r\n\r\ninstantiate._clone = doInstantiate;\r\ncc.instantiate = instantiate;\r\nmodule.exports = instantiate;\r\n","/****************************************************************************\n Copyright (c) 2008-2010 Ricardo Quesada\n Copyright (c) 2011-2012 cocos2d-x.org\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos2d-x.org\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst tempCIDGenerater = new (require('./id-generater'))('TmpCId.');\n\n\nfunction _getPropertyDescriptor (obj, name) {\n while (obj) {\n var pd = Object.getOwnPropertyDescriptor(obj, name);\n if (pd) {\n return pd;\n }\n obj = Object.getPrototypeOf(obj);\n }\n return null;\n}\n\nfunction _copyprop(name, source, target) {\n var pd = _getPropertyDescriptor(source, name);\n Object.defineProperty(target, name, pd);\n}\n\n/**\n * !#en This module provides some JavaScript utilities. All members can be accessed with `cc.js`.\n * !#zh 这个模块封装了 JavaScript 相关的一些实用函数,你可以通过 `cc.js` 来访问这个模块。\n * @submodule js\n * @module js\n */\nvar js = {\n\n /**\n * Check the obj whether is number or not\n * If a number is created by using 'new Number(10086)', the typeof it will be \"object\"...\n * Then you can use this function if you care about this case.\n * @method isNumber\n * @param {*} obj\n * @returns {Boolean}\n */\n isNumber: function(obj) {\n return typeof obj === 'number' || obj instanceof Number;\n },\n\n /**\n * Check the obj whether is string or not.\n * If a string is created by using 'new String(\"blabla\")', the typeof it will be \"object\"...\n * Then you can use this function if you care about this case.\n * @method isString\n * @param {*} obj\n * @returns {Boolean}\n */\n isString: function(obj) {\n return typeof obj === 'string' || obj instanceof String;\n },\n\n /**\n * Copy all properties not defined in obj from arguments[1...n]\n * @method addon\n * @param {Object} obj object to extend its properties\n * @param {Object} ...sourceObj source object to copy properties from\n * @return {Object} the result obj\n */\n addon: function (obj) {\n 'use strict';\n obj = obj || {};\n for (var i = 1, length = arguments.length; i < length; i++) {\n var source = arguments[i];\n if (source) {\n if (typeof source !== 'object') {\n cc.errorID(5402, source);\n continue;\n }\n for ( var name in source) {\n if ( !(name in obj) ) {\n _copyprop( name, source, obj);\n }\n }\n }\n }\n return obj;\n },\n\n /**\n * copy all properties from arguments[1...n] to obj\n * @method mixin\n * @param {Object} obj\n * @param {Object} ...sourceObj\n * @return {Object} the result obj\n */\n mixin: function (obj) {\n 'use strict';\n obj = obj || {};\n for (var i = 1, length = arguments.length; i < length; i++) {\n var source = arguments[i];\n if (source) {\n if (typeof source !== 'object') {\n cc.errorID(5403, source);\n continue;\n }\n for ( var name in source) {\n _copyprop( name, source, obj);\n }\n }\n }\n return obj;\n },\n\n /**\n * Derive the class from the supplied base class.\n * Both classes are just native javascript constructors, not created by cc.Class, so\n * usually you will want to inherit using {{#crossLink \"cc/Class:method\"}}cc.Class {{/crossLink}} instead.\n * @method extend\n * @param {Function} cls\n * @param {Function} base - the baseclass to inherit\n * @return {Function} the result class\n */\n extend: function (cls, base) {\n if (CC_DEV) {\n if (!base) {\n cc.errorID(5404);\n return;\n }\n if (!cls) {\n cc.errorID(5405);\n return;\n }\n if (Object.keys(cls.prototype).length > 0) {\n cc.errorID(5406);\n }\n }\n for (var p in base) if (base.hasOwnProperty(p)) cls[p] = base[p];\n cls.prototype = Object.create(base.prototype, {\n constructor: {\n value: cls,\n writable: true,\n configurable: true\n }\n });\n return cls;\n },\n\n /**\n * Get super class\n * @method getSuper\n * @param {Function} ctor - the constructor of subclass\n * @return {Function}\n */\n getSuper (ctor) {\n var proto = ctor.prototype; // binded function do not have prototype\n var dunderProto = proto && Object.getPrototypeOf(proto);\n return dunderProto && dunderProto.constructor;\n },\n\n /**\n * Checks whether subclass is child of superclass or equals to superclass\n *\n * @method isChildClassOf\n * @param {Function} subclass\n * @param {Function} superclass\n * @return {Boolean}\n */\n isChildClassOf (subclass, superclass) {\n if (subclass && superclass) {\n if (typeof subclass !== 'function') {\n return false;\n }\n if (typeof superclass !== 'function') {\n if (CC_DEV) {\n cc.warnID(3625, superclass);\n }\n return false;\n }\n if (subclass === superclass) {\n return true;\n }\n for (;;) {\n subclass = js.getSuper(subclass);\n if (!subclass) {\n return false;\n }\n if (subclass === superclass) {\n return true;\n }\n }\n }\n return false;\n },\n\n /**\n * Removes all enumerable properties from object\n * @method clear\n * @param {any} obj\n */\n clear: function (obj) {\n var keys = Object.keys(obj);\n for (var i = 0; i < keys.length; i++) {\n delete obj[keys[i]];\n }\n },\n\n /**\n * Checks whether obj is an empty object\n * @method isEmptyObject\n * @param {any} obj \n * @returns {Boolean}\n */\n isEmptyObject: function (obj) {\n for (var key in obj) {\n return false;\n }\n return true;\n },\n\n /**\n * Get property descriptor in object and all its ancestors\n * @method getPropertyDescriptor\n * @param {Object} obj\n * @param {String} name\n * @return {Object}\n */\n getPropertyDescriptor: _getPropertyDescriptor\n};\n\n\nvar tmpValueDesc = {\n value: undefined,\n enumerable: false,\n writable: false,\n configurable: true\n};\n\n/**\n * Define value, just help to call Object.defineProperty.
\n * The configurable will be true.\n * @method value\n * @param {Object} obj\n * @param {String} prop\n * @param {any} value\n * @param {Boolean} [writable=false]\n * @param {Boolean} [enumerable=false]\n */\njs.value = function (obj, prop, value, writable, enumerable) {\n tmpValueDesc.value = value;\n tmpValueDesc.writable = writable;\n tmpValueDesc.enumerable = enumerable;\n Object.defineProperty(obj, prop, tmpValueDesc);\n tmpValueDesc.value = undefined;\n};\n\nvar tmpGetSetDesc = {\n get: null,\n set: null,\n enumerable: false,\n};\n\n/**\n * Define get set accessor, just help to call Object.defineProperty(...)\n * @method getset\n * @param {Object} obj\n * @param {String} prop\n * @param {Function} getter\n * @param {Function} [setter=null]\n * @param {Boolean} [enumerable=false]\n * @param {Boolean} [configurable=false]\n */\njs.getset = function (obj, prop, getter, setter, enumerable, configurable) {\n if (typeof setter !== 'function') {\n enumerable = setter;\n setter = undefined;\n }\n tmpGetSetDesc.get = getter;\n tmpGetSetDesc.set = setter;\n tmpGetSetDesc.enumerable = enumerable;\n tmpGetSetDesc.configurable = configurable;\n Object.defineProperty(obj, prop, tmpGetSetDesc);\n tmpGetSetDesc.get = null;\n tmpGetSetDesc.set = null;\n};\n\nvar tmpGetDesc = {\n get: null,\n enumerable: false,\n configurable: false\n};\n\n/**\n * Define get accessor, just help to call Object.defineProperty(...)\n * @method get\n * @param {Object} obj\n * @param {String} prop\n * @param {Function} getter\n * @param {Boolean} [enumerable=false]\n * @param {Boolean} [configurable=false]\n */\njs.get = function (obj, prop, getter, enumerable, configurable) {\n tmpGetDesc.get = getter;\n tmpGetDesc.enumerable = enumerable;\n tmpGetDesc.configurable = configurable;\n Object.defineProperty(obj, prop, tmpGetDesc);\n tmpGetDesc.get = null;\n};\n\nvar tmpSetDesc = {\n set: null,\n enumerable: false,\n configurable: false\n};\n\n/**\n * Define set accessor, just help to call Object.defineProperty(...)\n * @method set\n * @param {Object} obj\n * @param {String} prop\n * @param {Function} setter\n * @param {Boolean} [enumerable=false]\n * @param {Boolean} [configurable=false]\n */\njs.set = function (obj, prop, setter, enumerable, configurable) {\n tmpSetDesc.set = setter;\n tmpSetDesc.enumerable = enumerable;\n tmpSetDesc.configurable = configurable;\n Object.defineProperty(obj, prop, tmpSetDesc);\n tmpSetDesc.set = null;\n};\n\n/**\n * Get class name of the object, if object is just a {} (and which class named 'Object'), it will return \"\".\n * (modified from the code from this stackoverflow post)\n * @method getClassName\n * @param {Object|Function} objOrCtor - instance or constructor\n * @return {String}\n */\njs.getClassName = function (objOrCtor) {\n if (typeof objOrCtor === 'function') {\n var prototype = objOrCtor.prototype;\n if (prototype && prototype.hasOwnProperty('__classname__') && prototype.__classname__) {\n return prototype.__classname__;\n }\n var retval = '';\n // for browsers which have name property in the constructor of the object, such as chrome\n if (objOrCtor.name) {\n retval = objOrCtor.name;\n }\n if (objOrCtor.toString) {\n var arr, str = objOrCtor.toString();\n if (str.charAt(0) === '[') {\n // str is \"[object objectClass]\"\n arr = str.match(/\\[\\w+\\s*(\\w+)\\]/);\n }\n else {\n // str is function objectClass () {} for IE Firefox\n arr = str.match(/function\\s*(\\w+)/);\n }\n if (arr && arr.length === 2) {\n retval = arr[1];\n }\n }\n return retval !== 'Object' ? retval : '';\n }\n else if (objOrCtor && objOrCtor.constructor) {\n return js.getClassName(objOrCtor.constructor);\n }\n return '';\n};\n\nfunction isTempClassId (id) {\n return typeof id !== 'string' || id.startsWith(tempCIDGenerater.prefix);\n}\n\n// id 注册\n(function () {\n var _idToClass = {};\n var _nameToClass = {};\n\n function setup (key, publicName, table) {\n js.getset(js, publicName,\n function () {\n return Object.assign({}, table);\n },\n function (value) {\n js.clear(table);\n Object.assign(table, value);\n }\n );\n return function (id, constructor) {\n // deregister old\n if (constructor.prototype.hasOwnProperty(key)) {\n delete table[constructor.prototype[key]];\n }\n js.value(constructor.prototype, key, id);\n // register class\n if (id) {\n var registered = table[id];\n if (registered && registered !== constructor) {\n var error = 'A Class already exists with the same ' + key + ' : \"' + id + '\".';\n if (CC_TEST) {\n error += ' (This may be caused by error of unit test.) \\\nIf you dont need serialization, you can set class id to \"\". You can also call \\\ncc.js.unregisterClass to remove the id of unused class';\n }\n cc.error(error);\n }\n else {\n table[id] = constructor;\n }\n //if (id === \"\") {\n // console.trace(\"\", table === _nameToClass);\n //}\n }\n };\n }\n\n /**\n * Register the class by specified id, if its classname is not defined, the class name will also be set.\n * @method _setClassId\n * @param {String} classId\n * @param {Function} constructor\n * @private\n */\n /**\n * !#en All classes registered in the engine, indexed by ID.\n * !#zh 引擎中已注册的所有类型,通过 ID 进行索引。\n * @property _registeredClassIds\n * @example\n * // save all registered classes before loading scripts\n * let builtinClassIds = cc.js._registeredClassIds;\n * let builtinClassNames = cc.js._registeredClassNames;\n * // load some scripts that contain CCClass\n * ...\n * // clear all loaded classes\n * cc.js._registeredClassIds = builtinClassIds;\n * cc.js._registeredClassNames = builtinClassNames;\n */\n js._setClassId = setup('__cid__', '_registeredClassIds', _idToClass);\n\n /**\n * !#en All classes registered in the engine, indexed by name.\n * !#zh 引擎中已注册的所有类型,通过名称进行索引。\n * @property _registeredClassNames\n * @example\n * // save all registered classes before loading scripts\n * let builtinClassIds = cc.js._registeredClassIds;\n * let builtinClassNames = cc.js._registeredClassNames;\n * // load some scripts that contain CCClass\n * ...\n * // clear all loaded classes\n * cc.js._registeredClassIds = builtinClassIds;\n * cc.js._registeredClassNames = builtinClassNames;\n */\n var doSetClassName = setup('__classname__', '_registeredClassNames', _nameToClass);\n\n /**\n * Register the class by specified name manually\n * @method setClassName\n * @param {String} className\n * @param {Function} constructor\n */\n js.setClassName = function (className, constructor) {\n doSetClassName(className, constructor);\n // auto set class id\n if (!constructor.prototype.hasOwnProperty('__cid__')) {\n var id = className || tempCIDGenerater.getNewId();\n if (id) {\n js._setClassId(id, constructor);\n }\n }\n };\n\n /**\n * Unregister a class from fireball.\n *\n * If you dont need a registered class anymore, you should unregister the class so that Fireball will not keep its reference anymore.\n * Please note that its still your responsibility to free other references to the class.\n *\n * @method unregisterClass\n * @param {Function} ...constructor - the class you will want to unregister, any number of classes can be added\n */\n js.unregisterClass = function () {\n for (var i = 0; i < arguments.length; i++) {\n var p = arguments[i].prototype;\n var classId = p.__cid__;\n if (classId) {\n delete _idToClass[classId];\n }\n var classname = p.__classname__;\n if (classname) {\n delete _nameToClass[classname];\n }\n }\n };\n\n /**\n * Get the registered class by id\n * @method _getClassById\n * @param {String} classId\n * @return {Function} constructor\n * @private\n */\n js._getClassById = function (classId) {\n return _idToClass[classId];\n };\n\n /**\n * Get the registered class by name\n * @method getClassByName\n * @param {String} classname\n * @return {Function} constructor\n */\n js.getClassByName = function (classname) {\n return _nameToClass[classname];\n };\n\n /**\n * Get class id of the object\n * @method _getClassId\n * @param {Object|Function} obj - instance or constructor\n * @param {Boolean} [allowTempId=true] - can return temp id in editor\n * @return {String}\n * @private\n */\n js._getClassId = function (obj, allowTempId) {\n allowTempId = (typeof allowTempId !== 'undefined' ? allowTempId: true);\n\n var res;\n if (typeof obj === 'function' && obj.prototype.hasOwnProperty('__cid__')) {\n res = obj.prototype.__cid__;\n if (!allowTempId && (CC_DEV || CC_EDITOR) && isTempClassId(res)) {\n return '';\n }\n return res;\n }\n if (obj && obj.constructor) {\n var prototype = obj.constructor.prototype;\n if (prototype && prototype.hasOwnProperty('__cid__')) {\n res = obj.__cid__;\n if (!allowTempId && (CC_DEV || CC_EDITOR) && isTempClassId(res)) {\n return '';\n }\n return res;\n }\n }\n return '';\n };\n})();\n\n/**\n * Defines a polyfill field for deprecated codes.\n * @method obsolete\n * @param {any} obj - YourObject or YourClass.prototype\n * @param {String} obsoleted - \"OldParam\" or \"YourClass.OldParam\"\n * @param {String} newExpr - \"NewParam\" or \"YourClass.NewParam\"\n * @param {Boolean} [writable=false]\n */\njs.obsolete = function (obj, obsoleted, newExpr, writable) {\n var extractPropName = /([^.]+)$/;\n var oldProp = extractPropName.exec(obsoleted)[0];\n var newProp = extractPropName.exec(newExpr)[0];\n function get () {\n if (CC_DEV) {\n cc.warnID(1400, obsoleted, newExpr);\n }\n return this[newProp];\n }\n if (writable) {\n js.getset(obj, oldProp,\n get,\n function (value) {\n if (CC_DEV) {\n cc.warnID(1400, obsoleted, newExpr);\n }\n this[newProp] = value;\n }\n );\n }\n else {\n js.get(obj, oldProp, get);\n }\n};\n\n/**\n * Defines all polyfill fields for obsoleted codes corresponding to the enumerable properties of props.\n * @method obsoletes\n * @param {any} obj - YourObject or YourClass.prototype\n * @param {any} objName - \"YourObject\" or \"YourClass\"\n * @param {Object} props\n * @param {Boolean} [writable=false]\n */\njs.obsoletes = function (obj, objName, props, writable) {\n for (var obsoleted in props) {\n var newName = props[obsoleted];\n js.obsolete(obj, objName + '.' + obsoleted, newName, writable);\n }\n};\n\nvar REGEXP_NUM_OR_STR = /(%d)|(%s)/;\nvar REGEXP_STR = /%s/;\n\n/**\n * A string tool to construct a string with format string.\n * @method formatStr\n * @param {String|any} msg - A JavaScript string containing zero or more substitution strings (%s).\n * @param {any} ...subst - JavaScript objects with which to replace substitution strings within msg. This gives you additional control over the format of the output.\n * @returns {String}\n * @example\n * cc.js.formatStr(\"a: %s, b: %s\", a, b);\n * cc.js.formatStr(a, b, c);\n */\njs.formatStr = function () {\n var argLen = arguments.length;\n if (argLen === 0) {\n return '';\n }\n var msg = arguments[0];\n if (argLen === 1) {\n return '' + msg;\n }\n\n var hasSubstitution = typeof msg === 'string' && REGEXP_NUM_OR_STR.test(msg);\n if (hasSubstitution) {\n for (let i = 1; i < argLen; ++i) {\n var arg = arguments[i];\n var regExpToTest = typeof arg === 'number' ? REGEXP_NUM_OR_STR : REGEXP_STR;\n if (regExpToTest.test(msg)) {\n const notReplaceFunction = '' + arg;\n msg = msg.replace(regExpToTest, notReplaceFunction);\n }\n else\n msg += ' ' + arg;\n }\n }\n else {\n for (let i = 1; i < argLen; ++i) {\n msg += ' ' + arguments[i];\n }\n }\n return msg;\n};\n\n// see https://github.com/petkaantonov/bluebird/issues/1389\njs.shiftArguments = function () {\n var len = arguments.length - 1;\n var args = new Array(len);\n for(var i = 0; i < len; ++i) {\n args[i] = arguments[i + 1];\n }\n return args;\n};\n\n/**\n * !#en\n * A simple wrapper of `Object.create(null)` which ensures the return object have no prototype (and thus no inherited members). So we can skip `hasOwnProperty` calls on property lookups. It is a worthwhile optimization than the `{}` literal when `hasOwnProperty` calls are necessary.\n * !#zh\n * 该方法是对 `Object.create(null)` 的简单封装。`Object.create(null)` 用于创建无 prototype (也就无继承)的空对象。这样我们在该对象上查找属性时,就不用进行 `hasOwnProperty` 判断。在需要频繁判断 `hasOwnProperty` 时,使用这个方法性能会比 `{}` 更高。\n *\n * @method createMap\n * @param {Boolean} [forceDictMode=false] - Apply the delete operator to newly created map object. This causes V8 to put the object in \"dictionary mode\" and disables creation of hidden classes which are very expensive for objects that are constantly changing shape.\n * @return {Object}\n */\njs.createMap = function (forceDictMode) {\n var map = Object.create(null);\n if (forceDictMode) {\n const INVALID_IDENTIFIER_1 = '.';\n const INVALID_IDENTIFIER_2 = '/';\n map[INVALID_IDENTIFIER_1] = true;\n map[INVALID_IDENTIFIER_2] = true;\n delete map[INVALID_IDENTIFIER_1];\n delete map[INVALID_IDENTIFIER_2];\n }\n return map;\n};\n\n/**\n * @class array\n * @static\n */\n\n/**\n * Removes the array item at the specified index.\n * @method removeAt\n * @param {any[]} array\n * @param {Number} index\n */\nfunction removeAt (array, index) {\n array.splice(index, 1);\n}\n\n/**\n * Removes the array item at the specified index.\n * It's faster but the order of the array will be changed.\n * @method fastRemoveAt\n * @param {any[]} array\n * @param {Number} index\n */\nfunction fastRemoveAt (array, index) {\n var length = array.length;\n if (index < 0 || index >= length) {\n return;\n }\n array[index] = array[length - 1];\n array.length = length - 1;\n}\n\n/**\n * Removes the first occurrence of a specific object from the array.\n * @method remove\n * @param {any[]} array\n * @param {any} value\n * @return {Boolean}\n */\nfunction remove (array, value) {\n var index = array.indexOf(value);\n if (index >= 0) {\n removeAt(array, index);\n return true;\n }\n else {\n return false;\n }\n}\n\n/**\n * Removes the first occurrence of a specific object from the array.\n * It's faster but the order of the array will be changed.\n * @method fastRemove\n * @param {any[]} array\n * @param {Number} value\n */\nfunction fastRemove (array, value) {\n var index = array.indexOf(value);\n if (index >= 0) {\n array[index] = array[array.length - 1];\n --array.length;\n }\n}\n\n/**\n * Verify array's Type\n * @method verifyType\n * @param {array} array\n * @param {Function} type\n * @return {Boolean}\n */\nfunction verifyType (array, type) {\n if (array && array.length > 0) {\n for (var i = 0; i < array.length; i++) {\n if (!(array[i] instanceof type)) {\n cc.logID(1300);\n return false;\n }\n }\n }\n return true;\n}\n\n/**\n * Removes from array all values in minusArr. For each Value in minusArr, the first matching instance in array will be removed.\n * @method removeArray\n * @param {Array} array Source Array\n * @param {Array} minusArr minus Array\n */\nfunction removeArray (array, minusArr) {\n for (var i = 0, l = minusArr.length; i < l; i++) {\n remove(array, minusArr[i]);\n }\n}\n\n/**\n * Inserts some objects at index\n * @method appendObjectsAt\n * @param {Array} array\n * @param {Array} addObjs\n * @param {Number} index\n * @return {Array}\n */\nfunction appendObjectsAt (array, addObjs, index) {\n array.splice.apply(array, [index, 0].concat(addObjs));\n return array;\n}\n\n/**\n * Determines whether the array contains a specific value.\n * @method contains\n * @param {any[]} array\n * @param {any} value\n * @return {Boolean}\n */\nfunction contains (array, value) {\n return array.indexOf(value) >= 0;\n}\n\n/**\n * Copy an array's item to a new array (its performance is better than Array.slice)\n * @method copy\n * @param {Array} array\n * @return {Array}\n */\nfunction copy (array) {\n var i, len = array.length, arr_clone = new Array(len);\n for (i = 0; i < len; i += 1)\n arr_clone[i] = array[i];\n return arr_clone;\n}\n\njs.array = {\n remove,\n fastRemove,\n removeAt,\n fastRemoveAt,\n contains,\n verifyType,\n removeArray,\n appendObjectsAt,\n copy,\n MutableForwardIterator: require('../utils/mutable-forward-iterator')\n};\n\n// OBJECT POOL\n\n/**\n * !#en\n * A fixed-length object pool designed for general type.
\n * The implementation of this object pool is very simple,\n * it can helps you to improve your game performance for objects which need frequent release and recreate operations
\n * !#zh\n * 长度固定的对象缓存池,可以用来缓存各种对象类型。
\n * 这个对象池的实现非常精简,它可以帮助您提高游戏性能,适用于优化对象的反复创建和销毁。\n * @class Pool\n * @example\n *\n *Example 1:\n *\n *function Details () {\n * this.uuidList = [];\n *};\n *Details.prototype.reset = function () {\n * this.uuidList.length = 0;\n *};\n *Details.pool = new js.Pool(function (obj) {\n * obj.reset();\n *}, 5);\n *Details.pool.get = function () {\n * return this._get() || new Details();\n *};\n *\n *var detail = Details.pool.get();\n *...\n *Details.pool.put(detail);\n *\n *Example 2:\n *\n *function Details (buffer) {\n * this.uuidList = buffer;\n *};\n *...\n *Details.pool.get = function (buffer) {\n * var cached = this._get();\n * if (cached) {\n * cached.uuidList = buffer;\n * return cached;\n * }\n * else {\n * return new Details(buffer);\n * }\n *};\n *\n *var detail = Details.pool.get( [] );\n *...\n */\n/**\n * !#en\n * Constructor for creating an object pool for the specific object type.\n * You can pass a callback argument for process the cleanup logic when the object is recycled.\n * !#zh\n * 使用构造函数来创建一个指定对象类型的对象池,您可以传递一个回调函数,用于处理对象回收时的清理逻辑。\n * @method constructor\n * @param {Function} [cleanupFunc] - the callback method used to process the cleanup logic when the object is recycled.\n * @param {Object} cleanupFunc.obj\n * @param {Number} size - initializes the length of the array\n * @typescript\n * constructor(cleanupFunc: (obj: any) => void, size: number)\n * constructor(size: number)\n */\nfunction Pool (cleanupFunc, size) {\n if (size === undefined) {\n size = cleanupFunc;\n cleanupFunc = null;\n }\n this.get = null;\n this.count = 0;\n this._pool = new Array(size);\n this._cleanup = cleanupFunc;\n}\n\n/**\n * !#en\n * Get and initialize an object from pool. This method defaults to null and requires the user to implement it.\n * !#zh\n * 获取并初始化对象池中的对象。这个方法默认为空,需要用户自己实现。\n * @method get\n * @param {any} ...params - parameters to used to initialize the object\n * @returns {Object}\n */\n\n/**\n * !#en\n * The current number of available objects, the default is 0, it will gradually increase with the recycle of the object,\n * the maximum will not exceed the size specified when the constructor is called.\n * !#zh\n * 当前可用对象数量,一开始默认是 0,随着对象的回收会逐渐增大,最大不会超过调用构造函数时指定的 size。\n * @property {Number} count\n * @default 0\n */\n\n/**\n * !#en\n * Get an object from pool, if no available object in the pool, null will be returned.\n * !#zh\n * 获取对象池中的对象,如果对象池没有可用对象,则返回空。\n * @method _get\n * @returns {Object|null}\n */\nPool.prototype._get = function () {\n if (this.count > 0) {\n --this.count;\n var cache = this._pool[this.count];\n this._pool[this.count] = null;\n return cache;\n }\n return null;\n};\n\n/**\n * !#en Put an object into the pool.\n * !#zh 向对象池返还一个不再需要的对象。\n * @method put\n */\nPool.prototype.put = function (obj) {\n var pool = this._pool;\n if (this.count < pool.length) {\n if (this._cleanup && this._cleanup(obj) === false) {\n return;\n }\n pool[this.count] = obj;\n ++this.count;\n }\n};\n\n/**\n * !#en Resize the pool.\n * !#zh 设置对象池容量。\n * @method resize\n */\nPool.prototype.resize = function (length) {\n if (length >= 0) {\n this._pool.length = length;\n if (this.count > length) {\n this.count = length;\n }\n }\n};\n\njs.Pool = Pool;\n\n//\n\ncc.js = js;\n\nmodule.exports = js;\n\n// fix submodule pollute ...\n/**\n * @submodule cc\n */\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst js = require('./js');\nconst Attrs = require('./attribute');\n\n// 增加预处理属性这个步骤的目的是降低 CCClass 的实现难度,将比较稳定的通用逻辑和一些需求比较灵活的属性需求分隔开。\n\nvar SerializableAttrs = {\n default: {},\n serializable: {},\n editorOnly: {},\n formerlySerializedAs: {}\n};\n\nvar TYPO_TO_CORRECT_DEV = CC_DEV && {\n extend: 'extends',\n property: 'properties',\n static: 'statics',\n constructor: 'ctor'\n};\n\n// 预处理 notify 等扩展属性\nfunction parseNotify (val, propName, notify, properties) {\n if (val.get || val.set) {\n if (CC_DEV) {\n cc.warnID(5500);\n }\n return;\n }\n if (val.hasOwnProperty('default')) {\n // 添加新的内部属性,将原来的属性修改为 getter/setter 形式\n // (以 _ 开头将自动设置property 为 visible: false)\n var newKey = \"_N$\" + propName;\n\n val.get = function () {\n return this[newKey];\n };\n val.set = function (value) {\n var oldValue = this[newKey];\n this[newKey] = value;\n notify.call(this, oldValue);\n };\n\n if (CC_EDITOR) {\n val.notifyFor = newKey;\n }\n\n var newValue = {};\n properties[newKey] = newValue;\n // 将不能用于get方法中的属性移动到newValue中\n for (var attr in SerializableAttrs) {\n var v = SerializableAttrs[attr];\n if (val.hasOwnProperty(attr)) {\n newValue[attr] = val[attr];\n if (!v.canUsedInGet) {\n delete val[attr];\n }\n }\n }\n }\n else if (CC_DEV) {\n cc.warnID(5501);\n }\n}\n\nfunction parseType (val, type, className, propName) {\n const STATIC_CHECK = (CC_EDITOR && CC_DEV) || CC_TEST;\n\n if (Array.isArray(type)) {\n if (STATIC_CHECK && 'default' in val) {\n var isArray = require('./CCClass').isArray; // require lazily to avoid circular require() calls\n if (!isArray(val.default)) {\n cc.warnID(5507, className, propName);\n }\n }\n if (type.length > 0) {\n val.type = type = type[0];\n }\n else {\n return cc.errorID(5508, className, propName);\n }\n }\n if (typeof type === 'function') {\n if (type === String) {\n val.type = cc.String;\n if (STATIC_CHECK) {\n cc.warnID(3608, `\"${className}.${propName}\"`);\n }\n }\n else if (type === Boolean) {\n val.type = cc.Boolean;\n if (STATIC_CHECK) {\n cc.warnID(3609, `\"${className}.${propName}\"`);\n }\n }\n else if (type === Number) {\n val.type = cc.Float;\n if (STATIC_CHECK) {\n cc.warnID(3610, `\"${className}.${propName}\"`);\n }\n }\n }\n else if (STATIC_CHECK) {\n switch (type) {\n case 'Number':\n cc.warnID(5510, className, propName);\n break;\n case 'String':\n cc.warn(`The type of \"${className}.${propName}\" must be cc.String, not \"String\".`);\n break;\n case 'Boolean':\n cc.warn(`The type of \"${className}.${propName}\" must be cc.Boolean, not \"Boolean\".`);\n break;\n case 'Float':\n cc.warn(`The type of \"${className}.${propName}\" must be cc.Float, not \"Float\".`);\n break;\n case 'Integer':\n cc.warn(`The type of \"${className}.${propName}\" must be cc.Integer, not \"Integer\".`);\n break;\n case null:\n cc.warnID(5511, className, propName);\n break;\n }\n }\n\n if (CC_EDITOR && typeof type === 'function') {\n if (cc.Class._isCCClass(type) && val.serializable !== false && !js._getClassId(type, false)) {\n cc.warnID(5512, className, propName, className, propName);\n }\n }\n}\n\nfunction getBaseClassWherePropertyDefined_DEV (propName, cls) {\n if (CC_DEV) {\n var res;\n for (; cls && cls.__props__ && cls.__props__.indexOf(propName) !== -1; cls = cls.$super) {\n res = cls;\n }\n if (!res) {\n cc.error('unknown error');\n }\n return res;\n }\n}\n\nfunction _wrapOptions (isES6Getset, _default, type) {\n let res = isES6Getset ? { _short: true } : { _short: true, default: _default };\n if (type) {\n res.type = type;\n }\n return res;\n}\n\nexports.getFullFormOfProperty = function (options, isES6Getset) {\n var isLiteral = options && options.constructor === Object;\n if (isLiteral) {\n return null;\n }\n if (Array.isArray(options) && options.length > 0) {\n return _wrapOptions(isES6Getset, [], options);\n }\n else if (typeof options === 'function') {\n return _wrapOptions(isES6Getset, js.isChildClassOf(options, cc.ValueType) ? new options() : null, options);\n }\n else if (options instanceof Attrs.PrimitiveType) {\n return _wrapOptions(isES6Getset, options.default);\n }\n else {\n return _wrapOptions(isES6Getset, options);\n }\n};\n\nexports.preprocessAttrs = function (properties, className, cls, es6) {\n for (var propName in properties) {\n var val = properties[propName];\n var fullForm = exports.getFullFormOfProperty(val, false);\n if (fullForm) {\n val = properties[propName] = fullForm;\n }\n if (val) {\n if (CC_EDITOR) {\n if ('default' in val) {\n if (val.get) {\n cc.errorID(5513, className, propName);\n }\n else if (val.set) {\n cc.errorID(5514, className, propName);\n }\n else if (cc.Class._isCCClass(val.default)) {\n val.default = null;\n cc.errorID(5515, className, propName);\n }\n }\n else if (!val.get && !val.set) {\n var maybeTypeScript = es6;\n if (!maybeTypeScript) {\n cc.errorID(5516, className, propName);\n }\n }\n }\n if (CC_DEV && !val.override && cls.__props__.indexOf(propName) !== -1) {\n // check override\n var baseClass = js.getClassName(getBaseClassWherePropertyDefined_DEV(propName, cls));\n cc.warnID(5517, className, propName, baseClass, propName);\n }\n var notify = val.notify;\n if (notify) {\n if (CC_DEV && es6) {\n cc.error('not yet support notify attribute for ES6 Classes');\n }\n else {\n parseNotify(val, propName, notify, properties);\n }\n }\n\n if ('type' in val) {\n parseType(val, val.type, className, propName);\n }\n }\n }\n};\n\nif (CC_DEV) {\n const CALL_SUPER_DESTROY_REG_DEV = /\\b\\._super\\b|destroy\\s*\\.\\s*call\\s*\\(\\s*\\w+\\s*[,|)]/;\n exports.doValidateMethodWithProps_DEV = function (func, funcName, className, cls, base) {\n if (cls.__props__ && cls.__props__.indexOf(funcName) >= 0) {\n // find class that defines this method as a property\n var baseClassName = js.getClassName(getBaseClassWherePropertyDefined_DEV(funcName, cls));\n cc.errorID(3648, className, funcName, baseClassName);\n return false;\n }\n if (funcName === 'destroy' &&\n js.isChildClassOf(base, cc.Component) &&\n !CALL_SUPER_DESTROY_REG_DEV.test(func)\n ) {\n cc.error(`Overwriting '${funcName}' function in '${className}' class without calling super is not allowed. Call the super function in '${funcName}' please.`);\n }\n };\n}\n\nexports.validateMethodWithProps = function (func, funcName, className, cls, base) {\n if (CC_DEV && funcName === 'constructor') {\n cc.errorID(3643, className);\n return false;\n }\n if (typeof func === 'function' || func === null) {\n if (CC_DEV) {\n this.doValidateMethodWithProps_DEV(func, funcName, className, cls, base);\n }\n }\n else {\n if (CC_DEV) {\n if (func === false && base && base.prototype) {\n // check override\n var overrided = base.prototype[funcName];\n if (typeof overrided === 'function') {\n var baseFuc = js.getClassName(base) + '.' + funcName;\n var subFuc = className + '.' + funcName;\n cc.warnID(3624, subFuc, baseFuc, subFuc, subFuc);\n }\n }\n var correct = TYPO_TO_CORRECT_DEV[funcName];\n if (correct) {\n cc.warnID(3621, className, funcName, correct);\n }\n else if (func) {\n cc.errorID(3622, className, funcName);\n }\n }\n return false;\n }\n return true;\n};\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar requiringFrames = []; // the requiring frame infos\n\ncc._RF = {\n push: function (module, uuid, script) {\n if (script === undefined) {\n script = uuid;\n uuid = '';\n }\n requiringFrames.push({\n uuid: uuid,\n script: script,\n module: module,\n exports: module.exports, // original exports\n beh: null\n });\n },\n pop: function () {\n var frameInfo = requiringFrames.pop();\n // check exports\n var module = frameInfo.module;\n var exports = module.exports;\n if (exports === frameInfo.exports) {\n for (var anyKey in exports) {\n // exported\n return;\n }\n // auto export component\n module.exports = exports = frameInfo.cls;\n }\n },\n peek: function () {\n return requiringFrames[requiringFrames.length - 1];\n }\n};\n\nif (CC_EDITOR) {\n cc._RF.reset = function () {\n requiringFrames = [];\n };\n}\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n// TODO - merge with misc.js\nconst js = require('./js');\n\nmodule.exports = {\n contains: function (refNode, otherNode) {\n if(typeof refNode.contains == 'function'){\n return refNode.contains(otherNode);\n }else if(typeof refNode.compareDocumentPosition == 'function' ) {\n return !!(refNode.compareDocumentPosition(otherNode) & 16);\n }else {\n var node = otherNode.parentNode;\n if (node) {\n do {\n if (node === refNode) {\n return true;\n } else {\n node = node.parentNode;\n }\n } while (node !==null);\n }\n return false;\n }\n },\n\n isDomNode: typeof window === 'object' && (typeof Node === 'function' ?\n function (obj) {\n // If \"TypeError: Right-hand side of 'instanceof' is not callback\" is thrown,\n // it should because window.Node was overwritten.\n return obj instanceof Node;\n } :\n function (obj) {\n return obj &&\n typeof obj === 'object' &&\n typeof obj.nodeType === 'number' &&\n typeof obj.nodeName === 'string';\n }\n ),\n\n callInNextTick: CC_EDITOR ?\n function (callback, p1, p2) {\n if (callback) {\n process.nextTick(function () {\n callback(p1, p2);\n });\n }\n }\n :\n (\n \n function (callback, p1, p2) {\n if (callback) {\n setTimeout(function () {\n callback(p1, p2);\n }, 0);\n }\n }\n )\n};\n\nif (CC_DEV) {\n ///**\n // * @param {Object} obj\n // * @return {Boolean} is {} ?\n // */\n module.exports.isPlainEmptyObj_DEV = function (obj) {\n if (!obj || obj.constructor !== Object) {\n return false;\n }\n \n return js.isEmptyObject(obj);\n };\n module.exports.cloneable_DEV = function (obj) {\n return obj &&\n typeof obj.clone === 'function' &&\n ( (obj.constructor && obj.constructor.prototype.hasOwnProperty('clone')) || obj.hasOwnProperty('clone') );\n };\n}\n\nif (CC_TEST) {\n // editor mocks using in unit tests\n if (typeof Editor === 'undefined') {\n window.Editor = {\n UuidUtils: {\n NonUuidMark: '.',\n uuid: function () {\n return '' + ((new Date()).getTime() + Math.random());\n }\n }\n };\n }\n}\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n// predefine some modules for cocos\nrequire('./platform/js');\nrequire('./value-types');\nrequire('./utils');\nrequire('./platform/CCInputManager');\nrequire('./platform/CCInputExtension');\nrequire('./event');\nrequire('./platform/CCSys');\nrequire('./platform/CCMacro');\nrequire('./asset-manager');\nrequire('./CCDirector');\nrequire('./renderer');\n\nif (!(CC_EDITOR && Editor.isMainProcess)) {\n require('./platform/CCView');\n require('./platform/CCScreen');\n require('./CCScheduler');\n require('./event-manager');\n}\n","import Assembler from './assembler';\nimport dynamicAtlasManager from './utils/dynamic-atlas/manager';\nimport RenderData from './webgl/render-data';\nimport { Color } from '../value-types';\n\nexport default class Assembler2D extends Assembler {\n constructor () {\n super();\n\n this._renderData = new RenderData();\n this._renderData.init(this);\n \n this.initData();\n this.initLocal();\n }\n\n get verticesFloats () {\n return this.verticesCount * this.floatsPerVert;\n }\n\n initData () {\n let data = this._renderData;\n data.createQuadData(0, this.verticesFloats, this.indicesCount);\n }\n initLocal () {\n this._local = [];\n this._local.length = 4;\n }\n\n updateColor (comp, color) {\n let uintVerts = this._renderData.uintVDatas[0];\n if (!uintVerts) return;\n color = color != null ? color : comp.node.color._val;\n let floatsPerVert = this.floatsPerVert;\n let colorOffset = this.colorOffset;\n for (let i = colorOffset, l = uintVerts.length; i < l; i += floatsPerVert) {\n uintVerts[i] = color;\n }\n }\n\n getBuffer () {\n return cc.renderer._handle._meshBuffer;\n }\n\n updateWorldVerts (comp) {\n let local = this._local;\n let verts = this._renderData.vDatas[0];\n\n let matrix = comp.node._worldMatrix;\n let matrixm = matrix.m,\n a = matrixm[0], b = matrixm[1], c = matrixm[4], d = matrixm[5],\n tx = matrixm[12], ty = matrixm[13];\n\n let vl = local[0], vr = local[2],\n vb = local[1], vt = local[3];\n \n let floatsPerVert = this.floatsPerVert;\n let vertexOffset = 0;\n let justTranslate = a === 1 && b === 0 && c === 0 && d === 1;\n\n if (justTranslate) {\n // left bottom\n verts[vertexOffset] = vl + tx;\n verts[vertexOffset + 1] = vb + ty;\n vertexOffset += floatsPerVert;\n // right bottom\n verts[vertexOffset] = vr + tx;\n verts[vertexOffset + 1] = vb + ty;\n vertexOffset += floatsPerVert;\n // left top\n verts[vertexOffset] = vl + tx;\n verts[vertexOffset + 1] = vt + ty;\n vertexOffset += floatsPerVert;\n // right top\n verts[vertexOffset] = vr + tx;\n verts[vertexOffset + 1] = vt + ty;\n } else {\n let al = a * vl, ar = a * vr,\n bl = b * vl, br = b * vr,\n cb = c * vb, ct = c * vt,\n db = d * vb, dt = d * vt;\n\n // left bottom\n verts[vertexOffset] = al + cb + tx;\n verts[vertexOffset + 1] = bl + db + ty;\n vertexOffset += floatsPerVert;\n // right bottom\n verts[vertexOffset] = ar + cb + tx;\n verts[vertexOffset + 1] = br + db + ty;\n vertexOffset += floatsPerVert;\n // left top\n verts[vertexOffset] = al + ct + tx;\n verts[vertexOffset + 1] = bl + dt + ty;\n vertexOffset += floatsPerVert;\n // right top\n verts[vertexOffset] = ar + ct + tx;\n verts[vertexOffset + 1] = br + dt + ty;\n }\n }\n\n fillBuffers (comp, renderer) {\n if (renderer.worldMatDirty) {\n this.updateWorldVerts(comp);\n }\n\n let renderData = this._renderData;\n let vData = renderData.vDatas[0];\n let iData = renderData.iDatas[0];\n\n let buffer = this.getBuffer(renderer);\n let offsetInfo = buffer.request(this.verticesCount, this.indicesCount);\n\n // buffer data may be realloc, need get reference after request.\n\n // fill vertices\n let vertexOffset = offsetInfo.byteOffset >> 2,\n vbuf = buffer._vData;\n\n if (vData.length + vertexOffset > vbuf.length) {\n vbuf.set(vData.subarray(0, vbuf.length - vertexOffset), vertexOffset);\n } else {\n vbuf.set(vData, vertexOffset);\n }\n\n // fill indices\n let ibuf = buffer._iData,\n indiceOffset = offsetInfo.indiceOffset,\n vertexId = offsetInfo.vertexOffset;\n for (let i = 0, l = iData.length; i < l; i++) {\n ibuf[indiceOffset++] = vertexId + iData[i];\n }\n }\n\n updateTexId(comp) {\n const texId = comp._texId;\n let texIdOffset = this.texIdOffset;\n let floatsPerVert = this.floatsPerVert;\n let verts = this._renderData.vDatas[0];\n for (let i = 0, l = verts.length; i < l; i++) {\n verts[floatsPerVert * i + texIdOffset] = texId;\n }\n }\n}\n\ncc.js.addon(Assembler2D.prototype, {\n floatsPerVert: 5,\n\n verticesCount: 4,\n indicesCount: 6,\n\n uvOffset: 2,\n colorOffset: 4,\n \n isMulti: false,\n});\n\ncc.Assembler2D = Assembler2D;\n","import Pool from '../utils/pool';\n\nlet _assemblerId = 0;\n\nfunction getAssemblerId (assemblerCtor) {\n if (!Object.getOwnPropertyDescriptor(assemblerCtor, '__assemblerId__')) {\n assemblerCtor.__assemblerId__ = ++_assemblerId;\n }\n return assemblerCtor.__assemblerId__;\n}\n\n/**\n * {\n * assembler_ctor_id: []\n * }\n */\nclass AssemblerPool extends Pool {\n _pool = {};\n\n put (assembler) {\n if (!assembler) return;\n if (!this.enabled) {\n if (CC_JSB && CC_NATIVERENDERER) {\n assembler.destroy && assembler.destroy();\n }\n return;\n }\n\n let id = getAssemblerId(assembler.constructor);\n let pool = this._pool;\n if (!pool[id]) {\n pool[id] = [];\n }\n if (this.count > this.maxSize) return;\n\n this._clean(assembler);\n pool[id].push(assembler);\n this.count++;\n }\n\n get (assemblerCtor) {\n let assembler;\n \n if (this.enabled) {\n let pool = this._pool;\n let id = getAssemblerId(assemblerCtor);\n assembler = pool[id] && pool[id].pop();\n }\n\n if (!assembler) {\n assembler = new assemblerCtor();\n }\n else {\n this.count--;\n }\n return assembler;\n }\n\n clear () {\n if (CC_JSB && CC_NATIVERENDERER) {\n let pool = this._pool;\n for (let name in pool) {\n let assemblers = pool[name];\n if (!assemblers) continue;\n\n for (let i = 0; i < assemblers.length; i++) {\n assemblers[i].destroy && assemblers[i].destroy();\n }\n }\n }\n \n this._pool = {};\n this.count = 0;\n }\n\n _clean (assembler) {\n if (CC_JSB && CC_NATIVERENDERER) {\n assembler.reset();\n }\n assembler._renderComp = null;\n }\n}\n\nlet pool = new AssemblerPool();\nPool.register('assembler', pool);\nexport default pool;\n","import { vfmtPosUvColor } from './webgl/vertex-format';\nimport assemblerPool from './assembler-pool';\nimport dynamicAtlasManager from './utils/dynamic-atlas/manager';\n\nexport default class Assembler {\n constructor () {\n this._extendNative && this._extendNative();\n }\n init (renderComp) {\n this._renderComp = renderComp;\n }\n \n updateRenderData (comp) {\n }\n\n updateRenderDataForSwitchMaterial(comp) {\n \n }\n\n fillBuffers (comp, renderer) {\n }\n \n getVfmt () {\n return vfmtPosUvColor;\n }\n\n packDynamicAtlasAndCheckMaterial(comp, frame) {\n if (CC_TEST) return false;\n\n const allowDynamicAtlas = comp.allowDynamicAtlas;\n if ((cc.sp.allowDynamicAtlas && allowDynamicAtlas === 0) || allowDynamicAtlas === 1) {\n if (!frame._original && dynamicAtlasManager && frame._texture.packable) {\n let packedFrame = dynamicAtlasManager.insertSpriteFrame(frame);\n if (packedFrame) {\n frame._setDynamicAtlasFrame(packedFrame);\n }\n }\n }\n\n const material = comp._materials[0];\n if (!material) return false;\n\n // 自动切换材质\n if (this.checkAndSwitchMaterial(comp, frame._texture, material)) {\n return true;\n }\n\n if (material.material.isMultiSupport()) {\n comp._texIdDirty = true;\n } else {\n if (material.getProperty('texture') !== frame._texture) {\n // texture was packed to dynamic atlas, should update uvs\n comp._vertsDirty = true;\n comp._updateMaterial();\n }\n }\n\n return false;\n }\n\n checkAndSwitchMaterial(comp, texture, material) {\n const autoSwitchMaterial = comp.autoSwitchMaterial;\n if ((cc.sp.autoSwitchMaterial && autoSwitchMaterial === 0) || autoSwitchMaterial === 1) {\n if (texture._multiMaterial) {\n if (material.material !== texture._multiMaterial) {\n comp.setMaterial(0, texture._multiMaterial);\n // setMaterial 中会置 comp._texIdDirty = true;\n if (!this.isMulti) {\n comp._assembler.updateRenderDataForSwitchMaterial(comp);\n return true;\n }\n }\n }\n }\n }\n\n}\n\n\nAssembler.register = function (renderCompCtor, assembler) {\n renderCompCtor.__assembler__ = assembler;\n};\n\nAssembler.init = function (renderComp) {\n let renderCompCtor = renderComp.constructor;\n let assemblerCtor = renderCompCtor.__assembler__;\n while (!assemblerCtor) {\n renderCompCtor = renderCompCtor.$super;\n if (!renderCompCtor) {\n cc.warn(`Can not find assembler for render component : [${cc.js.getClassName(renderComp)}]`);\n return;\n }\n assemblerCtor = renderCompCtor.__assembler__;\n }\n if (assemblerCtor.getConstructor) {\n assemblerCtor = assemblerCtor.getConstructor(renderComp);\n }\n \n if (!renderComp._assembler || renderComp._assembler.constructor !== assemblerCtor) {\n let assembler = assemblerPool.get(assemblerCtor);\n assembler.init(renderComp);\n renderComp._assembler = assembler;\n }\n};\n\ncc.Assembler = Assembler;\n","\n// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. \n \nvar Device = function Device(canvasEL) {\n var ctx;\n\n try {\n ctx = canvasEL.getContext('2d');\n } catch (err) {\n console.error(err);\n return;\n }\n\n // statics\n this._canvas = canvasEL;\n this._ctx = ctx;\n this._caps = {}; // capability\n this._stats = {\n drawcalls: 0,\n };\n\n // runtime\n this._vx = this._vy = this._vw = this._vh = 0;\n this._sx = this._sy = this._sw = this._sh = 0;\n};\n\nDevice.prototype._restoreTexture = function _restoreTexture (unit) {\n};\n\n// ===============================\n// Immediate Settings\n// ===============================\n\n/**\n * @method setViewport\n * @param {Number} x\n * @param {Number} y\n * @param {Number} w\n * @param {Number} h\n */\nDevice.prototype.setViewport = function setViewport (x, y, w, h) {\n if (\n this._vx !== x ||\n this._vy !== y ||\n this._vw !== w ||\n this._vh !== h\n ) {\n this._vx = x;\n this._vy = y;\n this._vw = w;\n this._vh = h;\n }\n};\n\n/**\n * @method setScissor\n * @param {Number} x\n * @param {Number} y\n * @param {Number} w\n * @param {Number} h\n */\nDevice.prototype.setScissor = function setScissor (x, y, w, h) {\n if (\n this._sx !== x ||\n this._sy !== y ||\n this._sw !== w ||\n this._sh !== h\n ) {\n this._sx = x;\n this._sy = y;\n this._sw = w;\n this._sh = h;\n }\n};\n\nDevice.prototype.clear = function clear (color) {\n var ctx = this._ctx;\n ctx.clearRect(this._vx, this._vy, this._vw, this._vh);\n if (color && (color[0] !== 0 || color[1] !== 0 || color[2] !== 0)) {\n ctx.fillStyle = 'rgb(' + color[0] + ',' + color[1] + ',' + color[2] +')';\n ctx.globalAlpha = color[3];\n ctx.fillRect(this._vx, this._vy, this._vw, this._vh);\n }\n};\n\nDevice.prototype.resetDrawCalls = function () {\n this._stats.drawcalls = 0;\n}\n\nDevice.prototype.getDrawCalls = function () {\n return this._stats.drawcalls;\n}\n\nmodule.exports = Device;\n","\n// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. \n \nvar Texture2D = function Texture2D(device, options) {\n this._device = device;\n \n this._width = 4;\n this._height = 4;\n\n this._image = null;\n\n if (options) {\n if (options.width !== undefined) {\n this._width = options.width;\n }\n if (options.height !== undefined) {\n this._height = options.height;\n }\n\n this.updateImage(options);\n }\n};\n\nTexture2D.prototype.update = function update (options) {\n this.updateImage(options);\n};\n\nTexture2D.prototype.updateImage = function updateImage (options) {\n if (options.images && options.images[0]) {\n var image = options.images[0];\n if (image && image !== this._image) {\n this._image = image;\n }\n }\n};\n\nTexture2D.prototype.destroy = function destroy () {\n this._image = null;\n};\n\nmodule.exports = Texture2D;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nimport gfx from '../../renderer/gfx';\n\nimport InputAssembler from '../../renderer/core/input-assembler';\nimport Pass from '../../renderer/core/pass';\n\n// const RenderFlow = require('./render-flow');\n\nfunction _initBuiltins(device) {\n let defaultTexture = new gfx.Texture2D(device, {\n images: [],\n width: 128,\n height: 128,\n wrapS: gfx.WRAP_REPEAT,\n wrapT: gfx.WRAP_REPEAT,\n format: gfx.TEXTURE_FMT_RGB8,\n genMipmaps: false,\n });\n\n return {\n defaultTexture: defaultTexture,\n programTemplates: [],\n programChunks: {},\n };\n}\n\n/**\n * @module cc\n */\n\n/**\n * !#en The renderer object which provide access to render system APIs, \n * detailed APIs will be available progressively.\n * !#zh 提供基础渲染接口的渲染器对象,渲染层的基础接口将逐步开放给用户\n * @class renderer\n * @static\n */\nexport default cc.renderer = {\n Texture2D: null,\n\n InputAssembler: InputAssembler,\n Pass: Pass,\n\n /**\n * !#en The render engine is available only after cc.game.EVENT_ENGINE_INITED event.
\n * Normally it will be inited as the webgl render engine, but in wechat open context domain,\n * it will be inited as the canvas render engine. Canvas render engine is no longer available for other use case since v2.0.\n * !#zh 基础渲染引擎对象只在 cc.game.EVENT_ENGINE_INITED 事件触发后才可获取。
\n * 大多数情况下,它都会是 WebGL 渲染引擎实例,但是在微信开放数据域当中,它会是 Canvas 渲染引擎实例。请注意,从 2.0 开始,我们在其他平台和环境下都废弃了 Canvas 渲染器。\n * @property renderEngine\n * @deprecated\n * @type {Object}\n */\n renderEngine: null,\n\n /*\n * !#en The canvas object which provides the rendering context\n * !#zh 用于渲染的 Canvas 对象\n * @property canvas\n * @type {HTMLCanvasElement}\n */\n canvas: null,\n /*\n * !#en The device object which provides device related rendering functionality, it divers for different render engine type.\n * !#zh 提供设备渲染能力的对象,它对于不同的渲染环境功能也不相同。\n * @property device\n * @type {renderer.Device}\n */\n device: null,\n scene: null,\n /**\n * !#en The total draw call count in last rendered frame.\n * !#zh 上一次渲染帧所提交的渲染批次总数。\n * @property drawCalls\n * @type {Number}\n */\n drawCalls: 0,\n // Render component handler\n _handle: null,\n _cameraNode: null,\n _camera: null,\n _forward: null,\n _flow: null,\n\n initWebGL (canvas, opts) {\n require('./webgl/assemblers');\n const ModelBatcher = require('./webgl/model-batcher');\n\n this.Texture2D = gfx.Texture2D;\n this.canvas = canvas;\n this._flow = cc.RenderFlow;\n \n if (CC_JSB && CC_NATIVERENDERER) {\n // native codes will create an instance of Device, so just use the global instance.\n this.device = gfx.Device.getInstance();\n this.scene = new renderer.Scene();\n let builtins = _initBuiltins(this.device);\n this._forward = new renderer.ForwardRenderer(this.device, builtins);\n let nativeFlow = new renderer.RenderFlow(this.device, this.scene, this._forward);\n this._flow.init(nativeFlow);\n }\n else {\n let Scene = require('../../renderer/scene/scene');\n let ForwardRenderer = require('../../renderer/renderers/forward-renderer');\n this.device = new gfx.Device(canvas, opts);\n this.scene = new Scene();\n let builtins = _initBuiltins(this.device);\n this._forward = new ForwardRenderer(this.device, builtins);\n this._handle = new ModelBatcher(this.device, this.scene);\n this._flow.init(this._handle, this._forward);\n }\n },\n\n initCanvas (canvas) {\n const canvasRenderer = require('./canvas');\n const Texture2D = require('./canvas/Texture2D');\n const Device = require('./canvas/Device');\n\n // It's actually running with original render engine\n this.Device = Device;\n\n this.Texture2D = Texture2D;\n\n this.canvas = canvas;\n this.device = new Device(canvas);\n this._camera = {\n a: 1, b: 0, c: 0, d: 1, tx: 0, ty: 0\n };\n this._handle = new canvasRenderer.RenderComponentHandle(this.device, this._camera);\n this._forward = new canvasRenderer.ForwardRenderer();\n this._flow = cc.RenderFlow;\n this._flow.init(this._handle, this._forward);\n },\n\n updateCameraViewport () {\n // TODO: remove HACK\n if (!CC_EDITOR && cc.director) {\n let ecScene = cc.director.getScene();\n if (ecScene) ecScene.setScale(1, 1, 1);\n }\n\n if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS) {\n let vp = cc.view.getViewportRect();\n this.device.setViewport(vp.x, vp.y, vp.width, vp.height);\n this._camera.a = cc.view.getScaleX();\n this._camera.d = cc.view.getScaleY();\n this._camera.tx = vp.x;\n this._camera.ty = vp.y + vp.height;\n }\n },\n\n render (ecScene, dt) {\n this.device.resetDrawCalls();\n if (ecScene) {\n // walk entity component scene to generate models\n this._flow.render(ecScene, dt);\n this.drawCalls = this.device.getDrawCalls();\n }\n },\n\n clear () {\n this._handle.reset();\n this._forward.clear();\n }\n};\n","let FlagOfset = 0;\n\nconst DONOTHING = 1 << FlagOfset++;\nconst BREAK_FLOW = 1 << FlagOfset++;\nconst LOCAL_TRANSFORM = 1 << FlagOfset++;\nconst WORLD_TRANSFORM = 1 << FlagOfset++;\nconst TRANSFORM = LOCAL_TRANSFORM | WORLD_TRANSFORM;\nconst UPDATE_RENDER_DATA = 1 << FlagOfset++;\nconst OPACITY = 1 << FlagOfset++;\nconst COLOR = 1 << FlagOfset++;\nconst OPACITY_COLOR = OPACITY | COLOR;\nconst RENDER = 1 << FlagOfset++;\nconst CHILDREN = 1 << FlagOfset++;\nconst POST_RENDER = 1 << FlagOfset++;\nconst FINAL = 1 << FlagOfset++;\n\nlet _batcher, _forward;\nlet _cullingMask = 0;\n\nfunction RenderFlow () {\n this._func = init;\n this._next = null;\n}\n\nlet _proto = RenderFlow.prototype;\n_proto._doNothing = function () {\n};\n\n_proto._localTransform = function (node) {\n node._updateLocalMatrix();\n node._renderFlag &= ~LOCAL_TRANSFORM;\n this._next._func(node);\n};\n\n_proto._worldTransform = function (node) {\n _batcher.worldMatDirty ++;\n\n let t = node._matrix;\n let trs = node._trs;\n let tm = t.m;\n tm[12] = trs[0];\n tm[13] = trs[1];\n tm[14] = trs[2];\n\n node._mulMat(node._worldMatrix, node._parent._worldMatrix, t);\n node._renderFlag &= ~WORLD_TRANSFORM;\n this._next._func(node);\n\n _batcher.worldMatDirty --;\n};\n\n_proto._opacity = function (node) {\n _batcher.parentOpacityDirty++;\n\n this._next._func(node);\n\n node._renderFlag &= ~OPACITY;\n _batcher.parentOpacityDirty--;\n};\n\n_proto._color = function (node) {\n let comp = node._renderComponent;\n if (comp) {\n comp._updateColor();\n }\n\n node._renderFlag &= ~COLOR;\n this._next._func(node);\n};\n\n_proto._updateRenderData = function (node) {\n let comp = node._renderComponent;\n comp._assembler.updateRenderData(comp);\n node._renderFlag &= ~UPDATE_RENDER_DATA;\n this._next._func(node);\n};\n\n_proto._render = function (node) {\n let comp = node._renderComponent;\n comp._checkBacth(_batcher, node._cullingMask);\n comp._assembler.fillBuffers(comp, _batcher);\n this._next._func(node);\n};\n\n\n_proto._children = function (node) {\n let cullingMask = _cullingMask;\n let batcher = _batcher;\n\n let parentOpacity = batcher.parentOpacity;\n let opacity = (batcher.parentOpacity *= (node._opacity / 255));\n\n let worldTransformFlag = batcher.worldMatDirty ? WORLD_TRANSFORM : 0;\n let worldOpacityFlag = batcher.parentOpacityDirty ? OPACITY_COLOR : 0;\n let worldDirtyFlag = worldTransformFlag | worldOpacityFlag;\n\n let children = node._children;\n for (let i = 0, l = children.length; i < l; i++) {\n let c = children[i];\n\n // Advance the modification of the flag to avoid node attribute modification is invalid when opacity === 0.\n c._renderFlag |= worldDirtyFlag;\n if (!c._activeInHierarchy || c._opacity === 0) continue;\n\n _cullingMask = c._cullingMask = c.groupIndex === 0 ? cullingMask : 1 << c.groupIndex;\n\n // TODO: Maybe has better way to implement cascade opacity\n let colorVal = c._color._val;\n c._color._fastSetA(c._opacity * opacity);\n flows[c._renderFlag]._func(c);\n c._color._val = colorVal;\n }\n\n batcher.parentOpacity = parentOpacity;\n\n this._next._func(node);\n};\n\n_proto._postRender = function (node) {\n let comp = node._renderComponent;\n comp._checkBacth(_batcher, node._cullingMask);\n comp._assembler.postFillBuffers(comp, _batcher);\n this._next._func(node);\n};\n\nconst EMPTY_FLOW = new RenderFlow();\nEMPTY_FLOW._func = EMPTY_FLOW._doNothing;\nEMPTY_FLOW._next = EMPTY_FLOW;\n\nlet flows = {};\n\nfunction createFlow (flag, next) {\n let flow = new RenderFlow();\n flow._next = next || EMPTY_FLOW;\n\n switch (flag) {\n case DONOTHING: \n flow._func = flow._doNothing;\n break;\n case BREAK_FLOW:\n flow._func = flow._doNothing;\n break;\n case LOCAL_TRANSFORM: \n flow._func = flow._localTransform;\n break;\n case WORLD_TRANSFORM: \n flow._func = flow._worldTransform;\n break;\n case OPACITY:\n flow._func = flow._opacity;\n break;\n case COLOR:\n flow._func = flow._color;\n break;\n case UPDATE_RENDER_DATA:\n flow._func = flow._updateRenderData;\n break;\n case RENDER: \n flow._func = flow._render;\n break;\n case CHILDREN: \n flow._func = flow._children;\n break;\n case POST_RENDER: \n flow._func = flow._postRender;\n break;\n }\n\n return flow;\n}\n\nfunction getFlow (flag) {\n let flow = null;\n let tFlag = FINAL;\n while (tFlag > 0) {\n if (tFlag & flag)\n flow = createFlow(tFlag, flow);\n tFlag = tFlag >> 1;\n }\n return flow;\n}\n\n// \nfunction init (node) {\n let flag = node._renderFlag;\n let r = flows[flag] = getFlow(flag);\n r._func(node);\n}\n\nRenderFlow.flows = flows;\nRenderFlow.createFlow = createFlow;\n\n// validate whether render component is ready to be rendered.\nlet _validateList = [];\nRenderFlow.registerValidate = function (renderComp) {\n if (renderComp._inValidateList) return;\n _validateList.push(renderComp);\n renderComp._inValidateList = true;\n};\nRenderFlow.validateRenderers = function () {\n for (let i = 0, l = _validateList.length; i < l; i++) {\n let renderComp = _validateList[i];\n if (!renderComp.isValid) continue;\n if (!renderComp.enabledInHierarchy) {\n renderComp.disableRender();\n }\n else {\n renderComp._validateRender();\n }\n renderComp._inValidateList = false;\n }\n _validateList.length = 0;\n};\n\n\nRenderFlow.visitRootNode = function (rootNode) {\n RenderFlow.validateRenderers(); \n\n let preCullingMask = _cullingMask;\n _cullingMask = rootNode._cullingMask;\n\n if (rootNode._renderFlag & WORLD_TRANSFORM) {\n _batcher.worldMatDirty ++;\n rootNode._calculWorldMatrix();\n rootNode._renderFlag &= ~WORLD_TRANSFORM;\n\n flows[rootNode._renderFlag]._func(rootNode);\n\n _batcher.worldMatDirty --;\n }\n else {\n flows[rootNode._renderFlag]._func(rootNode);\n }\n\n _cullingMask = preCullingMask;\n};\n\nRenderFlow.render = function (rootNode, dt) {\n _batcher.reset();\n _batcher.walking = true;\n\n RenderFlow.visitRootNode(rootNode);\n\n _batcher.terminate();\n _batcher.walking = false;\n\n _forward.render(_batcher._renderScene, dt);\n};\n\nRenderFlow.renderCamera = function (camera, rootNode) {\n _batcher.reset();\n _batcher.walking = true;\n\n RenderFlow.visitRootNode(rootNode);\n\n _batcher.terminate();\n _batcher.walking = false;\n\n _forward.renderCamera(camera, _batcher._renderScene);\n};\n\nRenderFlow.init = function (batcher, forwardRenderer) {\n _batcher = batcher;\n _forward = forwardRenderer;\n\n flows[0] = EMPTY_FLOW;\n for (let i = 1; i < FINAL; i++) {\n flows[i] = new RenderFlow();\n }\n};\n\nRenderFlow.getBachther = function () {\n return _batcher;\n};\n\nRenderFlow.FLAG_DONOTHING = DONOTHING;\nRenderFlow.FLAG_BREAK_FLOW = BREAK_FLOW;\nRenderFlow.FLAG_LOCAL_TRANSFORM = LOCAL_TRANSFORM;\nRenderFlow.FLAG_WORLD_TRANSFORM = WORLD_TRANSFORM;\nRenderFlow.FLAG_TRANSFORM = TRANSFORM;\nRenderFlow.FLAG_OPACITY = OPACITY;\nRenderFlow.FLAG_COLOR = COLOR;\nRenderFlow.FLAG_OPACITY_COLOR = OPACITY_COLOR;\nRenderFlow.FLAG_UPDATE_RENDER_DATA = UPDATE_RENDER_DATA;\nRenderFlow.FLAG_RENDER = RENDER;\nRenderFlow.FLAG_CHILDREN = CHILDREN;\nRenderFlow.FLAG_POST_RENDER = POST_RENDER;\nRenderFlow.FLAG_FINAL = FINAL;\n\nmodule.exports = cc.RenderFlow = RenderFlow;\n","// const Atlas = require('./atlas');\nimport { Atlas, Rect } from './reusable-atlas';\n\nlet _atlases = [];\nlet _atlasIndex = -1;\n\nlet _maxAtlasCount = -1;\nlet _textureSize = 2048;\nlet _maxFrameSize = 512;\nlet _textureBleeding = true;\nlet _autoMultiBatch = true;\nlet _autoResetBeforeSceneLoad = true;\n\nlet _debugNode = null;\n\nfunction newAtlas () {\n let atlas = _atlases[++_atlasIndex]\n if (!atlas) {\n atlas = new Atlas(_textureSize, _textureSize);\n _atlases.push(atlas);\n if (dynamicAtlasManager.autoMultiBatch) cc.sp.multiBatcher.requsetMaterial(atlas._texture);\n }\n return atlas;\n}\n\nfunction beforeSceneLoad() {\n if (_autoResetBeforeSceneLoad) {\n dynamicAtlasManager.reset();\n }\n}\n\nlet _enabled = false;\n\n/**\n * !#en Manage Dynamic Atlas Manager. Dynamic Atlas Manager is used for merging textures at runtime, see [Dynamic Atlas](https://docs.cocos.com/creator/manual/en/advanced-topics/dynamic-atlas.html) for details.\n * !#zh 管理动态图集。动态图集用于在运行时对贴图进行合并,详见 [动态合图](https://docs.cocos.com/creator/manual/zh/advanced-topics/dynamic-atlas.html)。\n * @class DynamicAtlasManager\n */\nlet dynamicAtlasManager = {\n Atlas: Atlas,\n Rect: Rect,\n\n /**\n * !#en Enable or disable the dynamic atlas, see [Dynamic Atlas](https://docs.cocos.com/creator/manual/en/advanced-topics/dynamic-atlas.html) for details.\n * !#zh 开启或者关闭动态图集,详见 [动态合图](https://docs.cocos.com/creator/manual/zh/advanced-topics/dynamic-atlas.html)。\n * @property enabled\n * @type {Boolean}\n */\n get enabled() {\n return _enabled;\n },\n set enabled(value) {\n if (_enabled === value) return;\n\n if (value) {\n this.reset();\n cc.director.on(cc.Director.EVENT_BEFORE_SCENE_LAUNCH, beforeSceneLoad);\n }\n else {\n cc.director.off(cc.Director.EVENT_BEFORE_SCENE_LAUNCH, beforeSceneLoad);\n }\n\n _enabled = value;\n },\n\n /**\n * !#en The maximum number of atlas that can be created.\n * !#zh 可以创建的最大图集数量。\n * @property maxAtlasCount\n * @type {Number}\n */\n get maxAtlasCount() {\n return _maxAtlasCount;\n },\n set maxAtlasCount(value) {\n _maxAtlasCount = value;\n },\n\n /**\n * !#en Get the current created atlas count.\n * !#zh 获取当前已经创建的图集数量。\n * @property atlasCount\n * @type {Number}\n */\n get atlasCount() {\n return _atlases.length;\n },\n\n /**\n * !#en Is enable textureBleeding.\n * !#zh 是否开启 textureBleeding\n * @property textureBleeding\n * @type {Boolean}\n */\n get textureBleeding() {\n return _textureBleeding;\n },\n\n set textureBleeding(enable) {\n _textureBleeding = enable;\n },\n\n /**\n * !#en The size of the atlas that was created\n * !#zh 创建的图集的宽高\n * @property textureSize\n * @type {Number}\n */\n get textureSize() {\n return _textureSize;\n },\n set textureSize(value) {\n _textureSize = value;\n },\n\n /**\n * !#en The maximum size of the picture that can be added to the atlas.\n * !#zh 可以添加进图集的图片的最大尺寸。\n * @property maxFrameSize\n * @type {Number}\n */\n get maxFrameSize() {\n return _maxFrameSize;\n },\n set maxFrameSize(value) {\n _maxFrameSize = value;\n },\n\n /**\n * !#en Is enable autoMultiBatch.\n * !#zh 是否开启自动多纹理合批\n * @property autoMultiBatch\n * @type {Boolean}\n */\n get autoMultiBatch() {\n return _autoMultiBatch;\n },\n\n set autoMultiBatch(enable) {\n if (_autoMultiBatch === enable) return;\n\n if (enable) {\n for (let i = 0, l = _atlases.length; i < l; i++) {\n cc.sp.multiBatcher.requsetMaterial(_atlases[i]._texture);\n }\n }\n\n _autoMultiBatch = enable;\n },\n\n /**\n * !#en Is enable autoResetBeforeSceneLoad.\n * !#zh 是否在场景切换时清空所有图集\n * @property autoResetBeforeSceneLoad\n * @type {Boolean}\n */\n get autoResetBeforeSceneLoad() {\n return _autoResetBeforeSceneLoad;\n },\n\n set autoResetBeforeSceneLoad(enable) {\n if (_autoResetBeforeSceneLoad === enable) return;\n _autoResetBeforeSceneLoad = enable;\n },\n\n /**\n * !#en atlases\n * !#zh 图集数组\n * @property atlases\n * @type {Atlas}\n */\n get atlases() {\n return _atlases;\n },\n\n /**\n * 已用空间集合\n */\n rects: Object.create(null),\n\n /**\n * !#en The minimum size of the picture that can be added to the atlas.\n * !#zh 可以添加进图集的图片的最小尺寸。\n * @property minFrameSize\n * @type {Number}\n * @deprecated\n */\n\n /**\n * !#en Append a sprite frame into the dynamic atlas.\n * !#zh 添加碎图进入动态图集。\n * @method insertSpriteFrame\n * @param {SpriteFrame} spriteFrame\n */\n insertSpriteFrame(spriteFrame) {\n if (CC_EDITOR) return null;\n if (!_enabled || !spriteFrame || spriteFrame._original) return null;\n\n let atlas, frame;\n\n // 是否贴图已经在图集中\n let rect = spriteFrame._rect,\n texture = spriteFrame._texture,\n info = this.rects[texture._uuid];\n \n let sx = rect.x, sy = rect.y;\n\n if (info) {\n sx += info.x;\n sy += info.y;\n\n info.spriteFrames.push(spriteFrame);\n\n frame = {\n x: sx,\n y: sy,\n texture: info.atlas._texture,\n };\n\n return frame;\n }\n\n // 尝试加入已有图集\n for (let i = 0; i <= _atlasIndex; i++) {\n atlas = _atlases[i];\n frame = atlas.insertSpriteFrame(spriteFrame);\n if (frame) {\n return frame;\n }\n }\n\n // 创建新图集尝试加入\n if (_atlasIndex + 1 < _maxAtlasCount) {\n atlas = newAtlas();\n return atlas.insertSpriteFrame(spriteFrame);\n }\n\n return frame;\n },\n\n /**\n * !#en Delete a sprite frame from the dynamic atlas.\n * !#zh 使精灵帧取消使用动态图集\n * @method deleteSpriteFrame\n * @param {SpriteFrame} spriteFrame\n */\n deleteSpriteFrame(spriteFrame) {\n if (spriteFrame && !CC_TEST) {\n if (spriteFrame._original) {\n this.deleteAtlasSpriteFrame(spriteFrame);\n spriteFrame._resetDynamicAtlasFrame();\n }\n }\n },\n\n /**\n * !#en Delete a texture from the dynamic atlas.\n * !#zh 从动态图集删除该贴图,使用该贴图的精灵帧会被还原\n * @method deleteTexture\n * @param {Texture2D} texture\n */\n deleteTexture(texture) {\n this.deleteAtlasTexture(texture);\n },\n\n /**\n * !#en Resets all dynamic atlas, and the existing ones will be destroyed.\n * !#zh 重置所有动态图集,已有的动态图集会被销毁。\n * @method reset\n */\n reset () {\n for (let i = 0, l = _atlases.length; i < l; i++) {\n _atlases[i].destroy();\n }\n _atlases.length = 0;\n _atlasIndex = -1;\n },\n\n deleteAtlasSpriteFrame (spriteFrame) {\n if (!spriteFrame._original) return;\n\n let texture = spriteFrame._original._texture;\n for (let i = _atlases.length - 1; i >= 0; i--) {\n if (_atlases[i].deleteSpriteFrame(texture, spriteFrame)) {\n return;\n }\n }\n },\n\n deleteAtlasTexture (texture) {\n if (texture) {\n for (let i = _atlases.length - 1; i >= 0; i--) {\n if (_atlases[i].deleteInnerTexture(texture, true)) {\n return;\n }\n }\n }\n },\n\n /**\n * !#en Displays all the dynamic atlas in the current scene, which you can use to view the current atlas state.\n * !#zh 在当前场景中显示所有动态图集,可以用来查看当前的合图状态。\n * @method showDebug\n * @param {Boolean} show\n * @return {Node}\n */\n showDebug: CC_DEBUG && function (show) {\n if (show) {\n if (!_debugNode || !_debugNode.isValid) {\n let width = cc.visibleRect.width;\n let height = cc.visibleRect.height;\n\n _debugNode = new cc.Node('DYNAMIC_ATLAS_DEBUG_NODE');\n _debugNode.width = width;\n _debugNode.height = height;\n _debugNode.x = width/2;\n _debugNode.y = height/2;\n _debugNode.zIndex = cc.macro.MAX_ZINDEX;\n _debugNode.parent = cc.director.getScene();\n\n _debugNode.groupIndex = cc.Node.BuiltinGroupIndex.DEBUG;\n cc.Camera._setupDebugCamera();\n\n let scroll = _debugNode.addComponent(cc.ScrollView);\n\n let content = new cc.Node('CONTENT');\n let layout = content.addComponent(cc.Layout);\n layout.type = cc.Layout.Type.VERTICAL;\n layout.resizeMode = cc.Layout.ResizeMode.CONTAINER;\n content.parent = _debugNode;\n content.width = _textureSize;\n content.anchorY = 1;\n content.x = _textureSize;\n\n scroll.content = content;\n\n for (let i = 0; i <= _atlasIndex; i++) {\n let node = new cc.Node('ATLAS');\n\n let texture = _atlases[i]._texture;\n let spriteFrame = new cc.SpriteFrame();\n spriteFrame.setTexture(_atlases[i]._texture);\n\n let sprite = node.addComponent(cc.Sprite);\n sprite.spriteFrame = spriteFrame;\n\n node.parent = content;\n }\n }\n return _debugNode;\n }\n else {\n if (_debugNode) {\n _debugNode.parent = null;\n _debugNode = null;\n }\n }\n },\n\n update () {\n if (!this.enabled) return;\n\n for (let i = 0; i <= _atlasIndex; i++) {\n _atlases[i].update();\n }\n },\n};\n\n/**\n * @module cc\n */\n\n/**\n * @property dynamicAtlasManager\n * @type DynamicAtlasManager\n */\nmodule.exports = cc.dynamicAtlasManager = dynamicAtlasManager;\n","// @ts-expect-error\nconst RenderTexture = require('../../../assets/CCRenderTexture');\n\n\n/**\n * 矩形\n */\nexport class Rect {\n\n /**\n * 对象池\n */\n static pool: Rect[] = [];\n\n /**\n * 对象池指针\n */\n static pointer: number = 0;\n\n\n /**\n * 复用\n */\n static reuse(atlas: Atlas, width: number, height: number, x: number, y: number) {\n if (this.pointer === 0) {\n for (let i = 0; i < 128; i++) {\n Rect.pool[i] = new Rect(atlas, 0, 0, 0, 0);\n }\n this.pointer += 128;\n }\n\n this.pointer--;\n const rect = this.pool[this.pointer];\n\n rect.atlas = atlas;\n rect.width = width;\n rect.height = height;\n rect.x = x;\n rect.y = y;\n\n return rect;\n }\n\n\n /**\n * 回收\n */\n static recycle(rect: Rect) {\n rect.atlas = undefined!;\n rect.uuid = \"\";\n rect.spriteFrames.length = 0;\n rect.parentRect = undefined;\n rect.subRectA = undefined;\n rect.subRectB = undefined;\n rect.subRectC = undefined;\n\n rect.cacheIndex = -1;\n\n this.pool[this.pointer] = rect;\n this.pointer++;\n }\n\n\n /**\n * 所属 Atlas\n */\n atlas: Atlas;\n\n /**\n * 宽度\n */\n width: number = 0;\n\n /**\n * 高度\n */\n height: number = 0;\n\n /**\n * 横坐标\n */\n x: number = 0;\n\n /**\n * 纵坐标\n */\n y: number = 0;\n\n /**\n * 在 freeRects 中的下标\n */\n cacheIndex: number = -1;\n\n /**\n * cc.Texture2D UUID\n */\n uuid: string = '';\n\n /**\n * 使用该贴图的精灵帧数组\n */\n spriteFrames: any[] = [];\n\n /**\n * 父矩形\n */\n parentRect: Rect | undefined;\n\n /**\n * 子矩形之一\n */\n subRectA: Rect | undefined;\n\n /**\n * 子矩形之一\n */\n subRectB: Rect | undefined;\n\n /**\n * 子矩形之一\n */\n subRectC: Rect | undefined;\n\n /**\n * 子矩形或自身计数\n */\n used: number = 0;\n\n /**\n * 像素数\n */\n get sizes() {\n return this.width * this.height;\n }\n\n\n constructor(atlas: Atlas, width: number, height: number, x: number, y: number) {\n this.atlas = atlas;\n this.width = width;\n this.height = height;\n this.x = x;\n this.y = y;\n }\n\n}\n\n\n/**\n * 动态图集\n *\n * 装箱算法:类似断头台装箱算法\n * 合并算法:树形回退模式\n */\nexport class Atlas {\n\n /**\n * 当自由空间的某边长度不足该值则直接忽略该空间\n */\n static ignoreRectSize: number = 10;\n\n /**\n * 默认 Atlas\n */\n static DEFAULT_HASH = (new RenderTexture())._getHash();\n\n /**\n * 宽度\n */\n width: number = 0;\n\n /**\n * 高度\n */\n height: number = 0;\n\n /**\n * 间距\n */\n padding: number = 0;\n\n /**\n * 边距\n */\n border: number = 0;\n\n /**\n * 根矩形\n */\n rootRect: Rect;\n\n /**\n * 自由空间\n */\n freeRects: Rect[] = [];\n\n /**\n * 已使用数量\n */\n _count = 0;\n\n /**\n * cc.RenderTexture\n */\n _texture: any;\n\n /**\n * texture update dirty\n */\n _dirty: boolean = false;\n\n\n constructor(width: number, height: number, padding: number = 2, border: number = 2) {\n const texture = new RenderTexture();\n texture.initWithSize(width, height);\n texture.update();\n this._texture = texture;\n\n this.width = width;\n this.height = height;\n this.padding = padding;\n this.border = border;\n\n this.rootRect = Rect.reuse(\n this,\n this.width + this.padding - this.border * 2,\n this.height + this.padding - this.border * 2,\n this.border,\n this.border,\n );\n this.pushFreeRect(this.rootRect);\n }\n\n\n /**\n * push to free rects\n */\n protected pushFreeRect(rect: Rect) {\n const i = this.freeRects.push(rect) - 1;\n rect.cacheIndex = i;\n }\n\n\n /**\n * faster remove from free rects\n */\n protected removeFreeRect(index: number) {\n const temp = this.freeRects[index];\n const temp2 = this.freeRects[this.freeRects.length - 1];\n temp2.cacheIndex = index;\n temp.cacheIndex = -1;\n this.freeRects[index] = temp2;\n this.freeRects.pop();\n }\n\n\n /**\n * change member from free rects\n */\n protected replaceFreeRect(index: number, rect: Rect) {\n this.freeRects[index].cacheIndex = -1;\n rect.cacheIndex = index;\n this.freeRects[index] = rect;\n }\n\n\n /**\n * 插入 SpriteFrame\n */\n insertSpriteFrame(spriteFrame: any) {\n let rect = spriteFrame._rect,\n texture = spriteFrame._texture;\n\n let sx = rect.x, sy = rect.y;\n let width = texture.width, height = texture.height;\n\n const result = this.insert(texture);\n\n if (!result) {\n return null;\n }\n\n // texture bleeding\n if (cc.dynamicAtlasManager.textureBleeding) {\n // Smaller frame is more likely to be affected by linear filter\n if (width <= 8 || height <= 8) {\n this._texture.drawTextureAt(texture, result.x - 1, result.y - 1);\n this._texture.drawTextureAt(texture, result.x - 1, result.y + 1);\n this._texture.drawTextureAt(texture, result.x + 1, result.y - 1);\n this._texture.drawTextureAt(texture, result.x + 1, result.y + 1);\n }\n\n this._texture.drawTextureAt(texture, result.x - 1, result.y);\n this._texture.drawTextureAt(texture, result.x + 1, result.y);\n this._texture.drawTextureAt(texture, result.x, result.y - 1);\n this._texture.drawTextureAt(texture, result.x, result.y + 1);\n }\n\n this._texture.drawTextureAt(texture, result.x, result.y);\n\n this._count++;\n\n sx += result.x;\n sy += result.y;\n\n result.spriteFrames.push(spriteFrame);\n\n this._dirty = true;\n\n let frame = {\n x: sx,\n y: sy,\n texture: this._texture,\n };\n\n return frame;\n }\n\n\n /**\n * 插入子函数\n */\n insert(texture: any) {\n const width = texture.width + this.padding, height = texture.height + this.padding;\n let score = Number.MAX_VALUE;\n let areaFit = 0;\n let original: Rect | undefined = undefined;\n let originalIndex = 0;\n\n // 查找足够容纳的空区域\n for (let i = 0; i < this.freeRects.length; i++) {\n const rect = this.freeRects[i];\n if (rect.width >= width && rect.height >= height) {\n areaFit = rect.sizes - width * height;\n if (areaFit < score) {\n original = rect;\n originalIndex = i;\n score = areaFit;\n }\n }\n }\n\n // 切割空区域\n if (original) {\n if (original.width === width && original.height === height) {\n original.uuid = texture._uuid;\n original.used++;\n if (original.parentRect) original.parentRect.used++;\n cc.dynamicAtlasManager.rects[texture._uuid] = original;\n this.removeFreeRect(originalIndex);\n return original;\n }\n\n const best = Rect.reuse(this, width, height, original.x, original.y);\n let tmp: Rect;\n if (best.y + best.height < original.y + original.height) {\n tmp = Rect.reuse(\n this,\n original.width,\n original.y + original.height - (best.y + best.height),\n original.x,\n best.y + best.height,\n );\n\n tmp.parentRect = original;\n original.subRectB = tmp;\n\n if (tmp.width > Atlas.ignoreRectSize && tmp.height > Atlas.ignoreRectSize) {\n // 替换旧区域\n this.replaceFreeRect(originalIndex, tmp);\n originalIndex = -1;\n }\n }\n\n if (best.x + best.width < original.x + original.width) {\n tmp = Rect.reuse(\n this,\n original.x + original.width - (best.x + best.width),\n original.height - (original.y + original.height - (best.y + best.height)),\n best.x + best.width,\n original.y,\n );\n\n tmp.parentRect = original;\n original.subRectC = tmp;\n\n if (tmp.width > Atlas.ignoreRectSize && tmp.height > Atlas.ignoreRectSize) {\n if (originalIndex !== -1) {\n // 替换旧区域\n this.replaceFreeRect(originalIndex, tmp);\n originalIndex = -1;\n } else {\n this.pushFreeRect(tmp);\n }\n }\n }\n\n if (originalIndex !== -1) {\n this.removeFreeRect(originalIndex);\n }\n\n best.parentRect = original;\n original.subRectA = best;\n best.used++;\n original.used++;\n if (original.used === 1 && original.parentRect) original.parentRect.used++;\n best.uuid = texture._uuid;\n cc.dynamicAtlasManager.rects[texture._uuid] = best;\n return best;\n } else {\n return undefined;\n }\n }\n\n\n /**\n * update texture\n */\n update() {\n if (!this._dirty) return;\n this._texture.update();\n this._dirty = false;\n }\n\n\n /**\n * 删除精灵帧\n */\n deleteSpriteFrame(texture: any, frame: any) {\n if (texture) {\n const rect: Rect | undefined = cc.dynamicAtlasManager.rects[texture._uuid];\n if (rect) {\n const index = rect.spriteFrames.indexOf(frame);\n if (index !== -1) {\n rect.spriteFrames.splice(index, 1);\n\n // 判断如果没有引用则删除 Texture\n if (rect.spriteFrames.length === 0) {\n rect.atlas.deleteInnerRect(rect);\n }\n } else {\n cc.warn('[Dynamic Atlas] can\\'t find spriteFrame in Rect.');\n }\n\n return true;\n }\n }\n\n return false;\n }\n\n\n /**\n * 删除子矩形\n */\n deleteInnerRect(rect: Rect) {\n delete cc.dynamicAtlasManager.rects[rect.uuid];\n rect.uuid = \"\";\n this._count--;\n\n // 还原 SpriteFrame\n for (const spriteFrame of rect.spriteFrames) {\n if (spriteFrame.isValid) {\n spriteFrame._resetDynamicAtlasFrame();\n }\n }\n rect.spriteFrames.length = 0;\n\n this.tryMergeRecycle(rect);\n }\n\n\n /**\n * 删除贴图\n */\n deleteInnerTexture(texture: any) {\n if (texture) {\n const rect: Rect | undefined = cc.dynamicAtlasManager.rects[texture._uuid];\n if (rect) {\n rect.atlas.deleteInnerRect(rect);\n return true;\n }\n }\n return false;\n }\n\n\n /**\n * 尝试合并和回收\n */\n protected tryMergeRecycle(rect: Rect) {\n let old: Rect | undefined = undefined;\n let parent: Rect | undefined = rect;\n while (parent) {\n parent.used--;\n if (parent.used === 0) {\n // 回收所有子矩形\n if (parent.subRectA) {\n // 可能是 ignoreRect\n const i = parent.subRectA.cacheIndex;\n if (i !== -1) {\n this.removeFreeRect(i);\n }\n Rect.recycle(parent.subRectA);\n parent.subRectA = undefined;\n }\n if (parent.subRectB) {\n const i = parent.subRectB.cacheIndex;\n if (i !== -1) {\n this.removeFreeRect(i);\n }\n Rect.recycle(parent.subRectB);\n parent.subRectB = undefined;\n }\n if (parent.subRectC) {\n const i = parent.subRectC.cacheIndex;\n if (i !== -1) {\n this.removeFreeRect(i);\n }\n Rect.recycle(parent.subRectC);\n parent.subRectC = undefined;\n }\n old = parent;\n parent = parent.parentRect;\n } else {\n if (old) {\n if (old.width > Atlas.ignoreRectSize && old.height > Atlas.ignoreRectSize) {\n this.pushFreeRect(old);\n }\n }\n old = parent;\n parent = undefined;\n }\n }\n\n if (old === this.rootRect && old.used === 0) {\n this.pushFreeRect(old);\n }\n }\n\n\n /**\n * 是否未使用\n */\n isEmpty() {\n return this._count <= 0;\n }\n\n\n /**\n * 清空\n */\n reset() {\n const rects = cc.dynamicAtlasManager.rects;\n for (const key in rects) {\n const rect: Rect = rects[key];\n if (rect.atlas === this) {\n delete rects[key];\n for (const spriteFrame of rect.spriteFrames) {\n if (spriteFrame.isValid) {\n spriteFrame._resetDynamicAtlasFrame();\n }\n }\n Rect.recycle(rect);\n }\n }\n\n for (const rect of this.freeRects) {\n Rect.recycle(rect);\n }\n\n this.freeRects.length = 0;\n this._count = 0;\n\n this.rootRect = Rect.reuse(\n this,\n this.width + this.padding - this.border * 2,\n this.height + this.padding - this.border * 2,\n this.border,\n this.border,\n );\n this.pushFreeRect(this.rootRect)\n }\n\n\n /**\n * 销毁\n */\n destroy() {\n this.reset();\n this._texture.destroy();\n }\n\n}\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport Assembler2D from '../../assembler-2d';\n\nconst textUtils = require('../../../utils/text-utils');\nconst macro = require('../../../platform/CCMacro');\nconst Label = require('../../../components/CCLabel');\nconst Overflow = Label.Overflow;\n\nconst shareLabelInfo = require('../utils').shareLabelInfo;\n\nlet LetterInfo = function() {\n this.char = '';\n this.valid = true;\n this.x = 0;\n this.y = 0;\n this.line = 0;\n this.hash = \"\";\n};\n\nlet _tmpRect = cc.rect();\n\nlet _comp = null;\n\nlet _horizontalKernings = [];\nlet _lettersInfo = [];\nlet _linesWidth = [];\nlet _linesOffsetX = [];\n\nlet _fntConfig = null;\nlet _numberOfLines = 0;\nlet _textDesiredHeight = 0;\nlet _letterOffsetY = 0;\nlet _tailoredTopY = 0;\n\nlet _tailoredBottomY = 0;\nlet _bmfontScale = 1.0;\n\nlet _lineBreakWithoutSpaces = false;\nlet _spriteFrame = null;\nlet _lineSpacing = 0;\nlet _contentSize = cc.size();\nlet _string = '';\nlet _fontSize = 0;\nlet _originFontSize = 0;\nlet _hAlign = 0;\nlet _vAlign = 0;\nlet _spacingX = 0;\nlet _lineHeight = 0;\nlet _overflow = 0;\nlet _isWrapText = false;\nlet _labelWidth = 0;\nlet _labelHeight = 0;\nlet _maxLineWidth = 0;\nlet _isRetina = false;\nlet _retinaScale = 1;\n\nexport default class BmfontAssembler extends Assembler2D {\n updateRenderData (comp) {\n if (!comp._vertsDirty) return;\n if (_comp === comp) return;\n\n _comp = comp;\n \n this._reserveQuads(comp, comp.string.toString().length);\n\n const assemblerChanged = this._updateFontFamily(comp);\n\n // 打包到动态图集时可能会切换 Assembler\n if (!assemblerChanged) {\n this._updateRenderData(comp);\n }\n }\n\n _preUpdateRenderData(comp) {\n _comp = comp;\n\n this._reserveQuads(comp, comp.string.toString().length);\n\n let fontAsset = comp.font;\n _spriteFrame = fontAsset.spriteFrame;\n _fntConfig = fontAsset._fntConfig;\n shareLabelInfo.fontAtlas = fontAsset._fontDefDictionary;\n }\n\n _updateRenderData(comp) {\n this._updateProperties(comp);\n this._updateLabelInfo(comp);\n this._updateContent();\n this.updateWorldVerts(comp);\n\n if (_isRetina) {\n _contentSize.width /= _retinaScale;\n _contentSize.height /= _retinaScale;\n _fontSize /= _retinaScale;\n }\n\n _comp._actualFontSize = _fontSize;\n _comp.node.setContentSize(_contentSize);\n\n _comp._vertsDirty = false;\n _comp = null;\n this._resetProperties();\n }\n\n _updateFontScale () {\n _bmfontScale = _fontSize / _originFontSize;\n }\n\n _updateFontFamily (comp) {\n let fontAsset = comp.font;\n _spriteFrame = fontAsset.spriteFrame;\n _fntConfig = fontAsset._fntConfig;\n shareLabelInfo.fontAtlas = fontAsset._fontDefDictionary;\n\n return this.packDynamicAtlasAndCheckMaterial(comp, _spriteFrame);\n }\n\n _updateLabelInfo() {\n // clear\n shareLabelInfo.hash = \"\";\n shareLabelInfo.margin = 0;\n }\n\n getTTFTextureSizeScale() {\n return _isRetina ? _retinaScale : 1;\n }\n\n _updateProperties (comp) {\n _string = comp.string.toString();\n _isRetina = !(comp.font instanceof cc.BitmapFont) && (cc.sp.enableLabelRetina && comp.enableRetina === 0) || comp.enableRetina === 1;\n _retinaScale = cc.sp.labelRetinaScale;\n _fontSize = comp.fontSize;\n _originFontSize = _fntConfig ? _fntConfig.fontSize : comp.fontSize;\n _hAlign = comp.horizontalAlign;\n _vAlign = comp.verticalAlign;\n _spacingX = comp.spacingX;\n _overflow = comp.overflow;\n _lineHeight = comp._lineHeight;\n \n _contentSize.width = comp.node.width;\n _contentSize.height = comp.node.height;\n\n if (_isRetina) {\n _fontSize *= _retinaScale;\n if (!_fntConfig) _originFontSize *= _retinaScale;\n _contentSize.width *= _retinaScale;\n _contentSize.height *= _retinaScale;\n _lineHeight *= _retinaScale;\n shareLabelInfo.margin *= _retinaScale;\n }\n\n // should wrap text\n if (_overflow === Overflow.NONE) {\n _isWrapText = false;\n _contentSize.width += shareLabelInfo.margin * 2;\n _contentSize.height += shareLabelInfo.margin * 2;\n }\n else if (_overflow === Overflow.RESIZE_HEIGHT) {\n _isWrapText = true;\n _contentSize.height += shareLabelInfo.margin * 2;\n }\n else {\n _isWrapText = comp.enableWrapText;\n }\n \n shareLabelInfo.lineHeight = _lineHeight;\n shareLabelInfo.fontSize = _fontSize;\n\n this._setupBMFontOverflowMetrics();\n }\n\n _resetProperties () {\n _fntConfig = null;\n _spriteFrame = null;\n shareLabelInfo.hash = \"\";\n shareLabelInfo.margin = 0;\n }\n\n _updateContent () {\n this._updateFontScale();\n this._computeHorizontalKerningForText();\n this._alignText();\n }\n\n _computeHorizontalKerningForText () {\n let string = _string;\n let stringLen = string.length;\n\n let horizontalKernings = _horizontalKernings;\n let kerningDict;\n _fntConfig && (kerningDict = _fntConfig.kerningDict);\n if (kerningDict && !cc.js.isEmptyObject(kerningDict)) {\n let prev = -1;\n for (let i = 0; i < stringLen; ++i) {\n let key = string.charCodeAt(i);\n let kerningAmount = kerningDict[(prev << 16) | (key & 0xffff)] || 0;\n if (i < stringLen - 1) {\n horizontalKernings[i] = kerningAmount;\n } else {\n horizontalKernings[i] = 0;\n }\n prev = key;\n }\n } else {\n horizontalKernings.length = 0;\n }\n }\n\n _multilineTextWrap (nextTokenFunc) {\n let textLen = _string.length;\n\n let lineIndex = 0;\n let nextTokenX = 0;\n let nextTokenY = 0;\n let longestLine = 0;\n let letterRight = 0;\n\n let highestY = 0;\n let lowestY = 0;\n let letterDef = null;\n let letterPosition = cc.v2(0, 0);\n\n for (let index = 0; index < textLen;) {\n let character = _string.charAt(index);\n if (character === \"\\n\") {\n _linesWidth.push(letterRight);\n letterRight = 0;\n lineIndex++;\n nextTokenX = 0;\n nextTokenY -= _lineHeight * this._getFontScale() + _lineSpacing;\n this._recordPlaceholderInfo(index, character);\n index++;\n continue;\n }\n\n let tokenLen = nextTokenFunc(_string, index, textLen);\n let tokenHighestY = highestY;\n let tokenLowestY = lowestY;\n let tokenRight = letterRight;\n let nextLetterX = nextTokenX;\n let newLine = false;\n\n for (let tmp = 0; tmp < tokenLen; ++tmp) {\n let letterIndex = index + tmp;\n character = _string.charAt(letterIndex);\n if (character === \"\\r\") {\n this._recordPlaceholderInfo(letterIndex, character);\n continue;\n }\n letterDef = shareLabelInfo.fontAtlas.getLetterDefinitionForChar(character, shareLabelInfo);\n if (!letterDef) {\n this._recordPlaceholderInfo(letterIndex, character);\n let atlasName = \"\";\n _fntConfig && (atlasName = _fntConfig.atlasName);\n console.log(\"Can't find letter definition in texture atlas \" + atlasName + \" for letter:\" + character);\n continue;\n }\n\n let letterX = nextLetterX + letterDef.offsetX * _bmfontScale - shareLabelInfo.margin;\n\n if (_isWrapText\n && _maxLineWidth > 0\n && nextTokenX > 0\n && letterX + letterDef.w * _bmfontScale > _maxLineWidth\n && !textUtils.isUnicodeSpace(character)) {\n _linesWidth.push(letterRight);\n letterRight = 0;\n lineIndex++;\n nextTokenX = 0;\n nextTokenY -= (_lineHeight * this._getFontScale() + _lineSpacing);\n newLine = true;\n break;\n } else {\n letterPosition.x = letterX;\n }\n\n letterPosition.y = nextTokenY - letterDef.offsetY * _bmfontScale + shareLabelInfo.margin;\n this._recordLetterInfo(letterPosition, character, letterIndex, lineIndex);\n\n if (letterIndex + 1 < _horizontalKernings.length && letterIndex < textLen - 1) {\n nextLetterX += _horizontalKernings[letterIndex + 1];\n }\n\n nextLetterX += letterDef.xAdvance * _bmfontScale + _spacingX - shareLabelInfo.margin * 2;\n\n tokenRight = letterPosition.x + letterDef.w * _bmfontScale - shareLabelInfo.margin;\n\n if (tokenHighestY < letterPosition.y) {\n tokenHighestY = letterPosition.y;\n }\n\n if (tokenLowestY > letterPosition.y - letterDef.h * _bmfontScale) {\n tokenLowestY = letterPosition.y - letterDef.h * _bmfontScale;\n }\n\n } //end of for loop\n\n if (newLine) continue;\n\n nextTokenX = nextLetterX;\n letterRight = tokenRight;\n\n if (highestY < tokenHighestY) {\n highestY = tokenHighestY;\n }\n if (lowestY > tokenLowestY) {\n lowestY = tokenLowestY;\n }\n if (longestLine < letterRight) {\n longestLine = letterRight;\n }\n\n index += tokenLen;\n } //end of for loop\n\n this._finishMultilineTextWrap();\n\n _linesWidth.push(letterRight);\n\n _numberOfLines = lineIndex + 1;\n _textDesiredHeight = _numberOfLines * _lineHeight * this._getFontScale();\n if (_numberOfLines > 1) {\n _textDesiredHeight += (_numberOfLines - 1) * _lineSpacing;\n }\n\n _contentSize.width = _labelWidth;\n _contentSize.height = _labelHeight;\n if (_labelWidth <= 0) {\n _contentSize.width = parseFloat(longestLine.toFixed(2)) + shareLabelInfo.margin * 2;\n }\n if (_labelHeight <= 0) {\n _contentSize.height = parseFloat(_textDesiredHeight.toFixed(2)) + shareLabelInfo.margin * 2;\n }\n\n _tailoredTopY = _contentSize.height;\n _tailoredBottomY = 0;\n\n if (_overflow !== Overflow.CLAMP) {\n if (highestY > 0) {\n _tailoredTopY = _contentSize.height + highestY;\n }\n \n if (lowestY < -_textDesiredHeight) {\n _tailoredBottomY = _textDesiredHeight + lowestY;\n }\n }\n\n return true;\n }\n\n _getFirstCharLen () {\n return 1;\n }\n\n _getFontScale () {\n return _overflow === Overflow.SHRINK ? _bmfontScale : 1;\n }\n\n _getFirstWordLen (text, startIndex, textLen) {\n let character = text.charAt(startIndex);\n if (textUtils.isUnicodeCJK(character)\n || character === \"\\n\"\n || textUtils.isUnicodeSpace(character)) {\n return 1;\n }\n\n let len = 1;\n let letterDef = shareLabelInfo.fontAtlas.getLetterDefinitionForChar(character, shareLabelInfo);\n if (!letterDef) {\n return len;\n }\n let nextLetterX = letterDef.xAdvance * _bmfontScale + _spacingX;\n let letterX;\n for (let index = startIndex + 1; index < textLen; ++index) {\n character = text.charAt(index);\n\n letterDef = shareLabelInfo.fontAtlas.getLetterDefinitionForChar(character, shareLabelInfo);\n if (!letterDef) {\n break;\n }\n letterX = nextLetterX + letterDef.offsetX * _bmfontScale;\n\n if(letterX + letterDef.w * _bmfontScale > _maxLineWidth\n && !textUtils.isUnicodeSpace(character)\n && _maxLineWidth > 0) {\n return len;\n }\n nextLetterX += letterDef.xAdvance * _bmfontScale + _spacingX;\n if (character === \"\\n\"\n || textUtils.isUnicodeSpace(character)\n || textUtils.isUnicodeCJK(character)) {\n break;\n }\n len++;\n }\n\n return len;\n }\n\n _multilineTextWrapByWord () {\n return this._multilineTextWrap(this._getFirstWordLen);\n }\n\n _multilineTextWrapByChar () {\n return this._multilineTextWrap(this._getFirstCharLen);\n }\n\n _recordPlaceholderInfo (letterIndex, char) {\n if (letterIndex >= _lettersInfo.length) {\n let tmpInfo = new LetterInfo();\n _lettersInfo.push(tmpInfo);\n }\n\n _lettersInfo[letterIndex].char = char;\n _lettersInfo[letterIndex].hash = char.charCodeAt(0) + shareLabelInfo.hash;\n _lettersInfo[letterIndex].valid = false;\n }\n\n _recordLetterInfo (letterPosition, character, letterIndex, lineIndex) {\n if (letterIndex >= _lettersInfo.length) {\n let tmpInfo = new LetterInfo();\n _lettersInfo.push(tmpInfo);\n }\n let char = character.charCodeAt(0);\n let key = char + shareLabelInfo.hash;\n\n _lettersInfo[letterIndex].line= lineIndex;\n _lettersInfo[letterIndex].char = character;\n _lettersInfo[letterIndex].hash = key;\n _lettersInfo[letterIndex].valid = shareLabelInfo.fontAtlas.getLetter(key).valid;\n _lettersInfo[letterIndex].x = letterPosition.x;\n _lettersInfo[letterIndex].y = letterPosition.y;\n }\n\n _alignText () {\n _textDesiredHeight = 0;\n _linesWidth.length = 0;\n\n if (!_lineBreakWithoutSpaces) {\n this._multilineTextWrapByWord();\n } else {\n this._multilineTextWrapByChar();\n }\n\n this._computeAlignmentOffset();\n\n //shrink\n if (_overflow === Overflow.SHRINK) {\n if (_fontSize > 0 && this._isVerticalClamp()) {\n this._shrinkLabelToContentSize(this._isVerticalClamp);\n }\n }\n\n if (!this._updateQuads()) {\n if (_overflow === Overflow.SHRINK) {\n this._shrinkLabelToContentSize(this._isHorizontalClamp);\n }\n }\n }\n\n _scaleFontSizeDown (fontSize) {\n let shouldUpdateContent = true;\n if (!fontSize) {\n fontSize = 0.1;\n shouldUpdateContent = false;\n }\n _fontSize = fontSize;\n\n if (shouldUpdateContent) {\n this._updateContent();\n }\n }\n\n _shrinkLabelToContentSize (lambda) {\n let fontSize = _fontSize;\n\n let left = 0, right = fontSize | 0, mid = 0;\n while (left < right) {\n mid = (left + right + 1) >> 1;\n\n let newFontSize = mid;\n if (newFontSize <= 0) {\n break;\n }\n\n _bmfontScale = newFontSize / _originFontSize;\n \n if (!_lineBreakWithoutSpaces) {\n this._multilineTextWrapByWord();\n } else {\n this._multilineTextWrapByChar();\n }\n this._computeAlignmentOffset();\n\n if (lambda()) {\n right = mid - 1;\n } else {\n left = mid;\n }\n }\n\n let actualFontSize = left;\n if (actualFontSize >= 0) {\n this._scaleFontSizeDown(actualFontSize);\n }\n }\n\n _isVerticalClamp () {\n if (_textDesiredHeight > _contentSize.height) {\n return true;\n } else {\n return false;\n }\n }\n\n _isHorizontalClamp () {\n let letterClamp = false;\n for (let ctr = 0, l = _string.length; ctr < l; ++ctr) {\n let letterInfo = _lettersInfo[ctr];\n if (letterInfo.valid) {\n let letterDef = shareLabelInfo.fontAtlas.getLetter(letterInfo.hash);\n\n let px = letterInfo.x + letterDef.w * _bmfontScale;\n let lineIndex = letterInfo.line;\n if (_labelWidth > 0) {\n if (!_isWrapText) {\n if(px > _contentSize.width){\n letterClamp = true;\n break;\n }\n }else{\n let wordWidth = _linesWidth[lineIndex];\n if (wordWidth > _contentSize.width && (px > _contentSize.width || px < 0)) {\n letterClamp = true;\n break;\n }\n }\n }\n }\n }\n\n return letterClamp;\n }\n\n _isHorizontalClamped (px, lineIndex) {\n let wordWidth = _linesWidth[lineIndex];\n let letterOverClamp = (px > _contentSize.width || px < 0);\n\n if(!_isWrapText){\n return letterOverClamp;\n }else{\n return (wordWidth > _contentSize.width && letterOverClamp);\n }\n }\n\n _updateQuads () {\n let texture = _spriteFrame ? _spriteFrame._texture : shareLabelInfo.fontAtlas.getTexture();\n\n let node = _comp.node;\n\n this.verticesCount = this.indicesCount = 0;\n \n // Need to reset dataLength in Canvas rendering mode.\n this._renderData && (this._renderData.dataLength = 0);\n\n let contentSize = _contentSize,\n appx = node._anchorPoint.x * contentSize.width,\n appy = node._anchorPoint.y * contentSize.height;\n \n let ret = true;\n for (let ctr = 0, l = _string.length; ctr < l; ++ctr) {\n let letterInfo = _lettersInfo[ctr];\n if (!letterInfo.valid) continue;\n let letterDef = shareLabelInfo.fontAtlas.getLetter(letterInfo.hash);\n\n _tmpRect.height = letterDef.h;\n _tmpRect.width = letterDef.w;\n _tmpRect.x = letterDef.u;\n _tmpRect.y = letterDef.v;\n\n let py = letterInfo.y + _letterOffsetY;\n\n if (_labelHeight > 0) {\n if (py > _tailoredTopY) {\n let clipTop = py - _tailoredTopY;\n _tmpRect.y += clipTop;\n _tmpRect.height -= clipTop;\n py = py - clipTop;\n }\n\n if ((py - letterDef.h * _bmfontScale < _tailoredBottomY) && _overflow === Overflow.CLAMP) {\n _tmpRect.height = (py < _tailoredBottomY) ? 0 : (py - _tailoredBottomY) / _bmfontScale;\n }\n }\n\n let lineIndex = letterInfo.line;\n let px = letterInfo.x + letterDef.w / 2 * _bmfontScale + _linesOffsetX[lineIndex];\n\n if (_labelWidth > 0) {\n if (this._isHorizontalClamped(px, lineIndex)) {\n if (_overflow === Overflow.CLAMP) {\n _tmpRect.width = 0;\n } else if (_overflow === Overflow.SHRINK) {\n if (_contentSize.width > letterDef.w) {\n ret = false;\n break;\n } else {\n _tmpRect.width = 0;\n }\n }\n }\n }\n\n if (_tmpRect.height > 0 && _tmpRect.width > 0) {\n let isRotated = this._determineRect(_tmpRect);\n let letterPositionX = letterInfo.x + _linesOffsetX[letterInfo.line];\n this.appendQuad(_comp, texture, _tmpRect, isRotated, letterPositionX - appx, py - appy, _bmfontScale, letterDef);\n }\n }\n this._quadsUpdated(_comp);\n\n return ret;\n }\n\n _determineRect (tempRect) {\n let isRotated = _spriteFrame.isRotated();\n\n let originalSize = _spriteFrame._originalSize;\n let rect = _spriteFrame._rect;\n let offset = _spriteFrame._offset;\n let trimmedLeft = offset.x + (originalSize.width - rect.width) / 2;\n let trimmedTop = offset.y - (originalSize.height - rect.height) / 2;\n\n if(!isRotated) {\n tempRect.x += (rect.x - trimmedLeft);\n tempRect.y += (rect.y + trimmedTop);\n } else {\n let originalX = tempRect.x;\n tempRect.x = rect.x + rect.height - tempRect.y - tempRect.height - trimmedTop;\n tempRect.y = originalX + rect.y - trimmedLeft;\n if (tempRect.y < 0) {\n tempRect.height = tempRect.height + trimmedTop;\n }\n }\n\n return isRotated;\n }\n\n _computeAlignmentOffset () {\n _linesOffsetX.length = 0;\n \n switch (_hAlign) {\n case macro.TextAlignment.LEFT:\n for (let i = 0; i < _numberOfLines; ++i) {\n _linesOffsetX.push(0);\n }\n break;\n case macro.TextAlignment.CENTER:\n for (let i = 0, l = _linesWidth.length; i < l; i++) {\n _linesOffsetX.push((_contentSize.width - _linesWidth[i]) / 2);\n }\n break;\n case macro.TextAlignment.RIGHT:\n for (let i = 0, l = _linesWidth.length; i < l; i++) {\n _linesOffsetX.push(_contentSize.width - _linesWidth[i]);\n }\n break;\n default:\n break;\n }\n\n // TOP\n _letterOffsetY = _contentSize.height;\n if (_vAlign !== macro.VerticalTextAlignment.TOP) {\n let blank = _contentSize.height - _textDesiredHeight + _lineHeight * this._getFontScale() - _originFontSize * _bmfontScale;\n if (_vAlign === macro.VerticalTextAlignment.BOTTOM) {\n // BOTTOM\n _letterOffsetY -= blank;\n } else {\n // CENTER:\n _letterOffsetY -= blank / 2;\n }\n }\n }\n\n _setupBMFontOverflowMetrics () {\n let newWidth = _contentSize.width,\n newHeight = _contentSize.height;\n\n if (_overflow === Overflow.RESIZE_HEIGHT) {\n newHeight = 0;\n }\n\n if (_overflow === Overflow.NONE) {\n newWidth = 0;\n newHeight = 0;\n }\n\n _labelWidth = newWidth;\n _labelHeight = newHeight;\n _maxLineWidth = newWidth;\n }\n\n updateWorldVerts() {}\n\n appendQuad(comp, texture, rect, rotated, x, y, scale, letter) {}\n _quadsUpdated (comp) {}\n\n _reserveQuads () {}\n _finishMultilineTextWrap() { }\n}\n","/****************************************************************************\n Copyright (c) 2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * !#en Class for Label Frame.\n * !#zh LabelFrame\n */\nfunction LabelFrame () {\n // the location of the label on rendering texture\n this._rect = null;\n // uv data of frame\n this.uv = [];\n // texture of frame\n this._texture = null;\n // store original info before packed to dynamic atlas\n this._original = null;\n}\n\nLabelFrame.prototype = {\n constructor: LabelFrame,\n\n /**\n * !#en Returns the rect of the label frame in the texture.\n * !#zh 获取 LabelFrame 的纹理矩形区域\n * @method getRect\n * @return {Rect}\n */\n getRect: function () {\n return cc.rect(this._rect);\n },\n \n /**\n * !#en Sets the rect of the label frame in the texture.\n * !#zh 设置 LabelFrame 的纹理矩形区域\n * @method setRect\n * @param {Rect} rect\n */\n setRect: function (rect) {\n this._rect = rect;\n if (this._texture)\n this._calculateUV();\n },\n\n _setDynamicAtlasFrame (frame) {\n if (!frame) return;\n\n this._original = {\n _texture : this._texture,\n _x : this._rect.x,\n _y : this._rect.y\n }\n \n this._texture = frame.texture;\n this._rect.x = frame.x;\n this._rect.y = frame.y;\n this._calculateUV();\n },\n _resetDynamicAtlasFrame () {\n if (!this._original) return;\n this._rect.x = this._original._x;\n this._rect.y = this._original._y;\n this._texture = this._original._texture;\n this._original = null;\n this._calculateUV();\n },\n\n _refreshTexture: function (texture) {\n this._texture = texture;\n this._rect = cc.rect(0, 0, texture.width, texture.height);\n this._calculateUV();\n },\n\n _calculateUV() {\n let rect = this._rect,\n texture = this._texture,\n uv = this.uv,\n texw = texture.width,\n texh = texture.height;\n\n let l = texw === 0 ? 0 : rect.x / texw;\n let r = texw === 0 ? 0 : (rect.x + rect.width) / texw;\n let b = texh === 0 ? 0 : (rect.y + rect.height) / texh;\n let t = texh === 0 ? 0 : rect.y / texh;\n\n uv[0] = l;\n uv[1] = b;\n uv[2] = r;\n uv[3] = b;\n uv[4] = l;\n uv[5] = t;\n uv[6] = r;\n uv[7] = t;\n }\n}\n\nmodule.exports = LabelFrame;\n","/****************************************************************************\n Copyright (c) 2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport WebglBmfontAssembler from '../../webgl/assemblers/label/2d/bmfont';\nimport { vfmtPosUvColorTexId } from '../../webgl/vertex-format';\n\nconst Label = require('../../../components/CCLabel');\nconst LabelOutline = require('../../../components/CCLabelOutline');\nconst textUtils = require('../../../utils/text-utils');\nconst Component = require('../../../components/CCComponent');\nconst RenderTexture = require('../../../assets/CCRenderTexture');\nconst OUTLINE_SUPPORTED = cc.js.isChildClassOf(LabelOutline, Component);\nconst getFontFamily = require('../utils').getFontFamily;\nconst shareLabelInfo = require('../utils').shareLabelInfo;\n\n\nconst FontLetterDefinition = cc.BitmapFont.FontLetterDefinition;\nconst FontAtlas = cc.BitmapFont.FontAtlas;\n\nconst WHITE = cc.Color.WHITE;\nconst space = 0;\nconst bleed = 2;\nconst _invisibleAlpha = (1 / 255).toFixed(3);\n\nfunction LetterTexture(char, labelInfo) {\n this._texture = null;\n this._labelInfo = labelInfo;\n this._char = char;\n this._hash = null;\n this._data = null;\n this._canvas = null;\n this._context = null;\n this._width = 0;\n this._height = 0;\n this._offsetY = 0;\n this._hash = char.charCodeAt(0) + labelInfo.hash;\n}\n\nLetterTexture.prototype = {\n constructor: LetterTexture,\n\n updateRenderData () {\n this._updateProperties();\n this._updateTexture();\n },\n _updateProperties () {\n this._texture = new cc.Texture2D();\n this._data = Label._canvasPool.get();\n this._canvas = this._data.canvas;\n this._context = this._data.context;\n this._context.font = this._labelInfo.fontDesc;\n let width = textUtils.safeMeasureText(this._context, this._char, this._labelInfo.fontDesc);\n let blank = this._labelInfo.margin * 2 + bleed;\n this._width = parseFloat(width.toFixed(2)) + blank;\n this._height = (1 + textUtils.BASELINE_RATIO) * this._labelInfo.fontSize + blank;\n this._offsetY = - (this._labelInfo.fontSize * textUtils.BASELINE_RATIO) / 2;\n\n if (this._canvas.width !== this._width) {\n this._canvas.width = this._width;\n }\n\n if (this._canvas.height !== this._height) {\n this._canvas.height = this._height;\n }\n\n this._texture.initWithElement(this._canvas);\n },\n _updateTexture () {\n let context = this._context;\n let labelInfo = this._labelInfo,\n width = this._canvas.width,\n height = this._canvas.height;\n\n const fontSize = this._labelInfo.fontSize;\n let startX = width / 2;\n let startY = height / 2 + fontSize * textUtils.MIDDLE_RATIO + fontSize * textUtils.BASELINE_OFFSET;\n let color = labelInfo.color;\n\n // use round for line join to avoid sharp intersect point\n context.lineJoin = 'round';\n context.textAlign = 'center';\n context.clearRect(0, 0, width, height);\n //Add a white background to avoid black edges.\n context.fillStyle = `rgba(${color.r}, ${color.g}, ${color.b}, ${_invisibleAlpha})`;\n context.fillRect(0, 0, width, height);\n context.font = labelInfo.fontDesc;\n\n context.fillStyle = `rgba(${color.r}, ${color.g}, ${color.b}, 1)`;\n if (labelInfo.isOutlined && labelInfo.margin > 0) {\n let strokeColor = labelInfo.out || WHITE;\n context.strokeStyle = `rgba(${strokeColor.r}, ${strokeColor.g}, ${strokeColor.b}, ${strokeColor.a / 255})`;\n context.lineWidth = labelInfo.margin * 2;\n context.strokeText(this._char, startX, startY);\n }\n context.fillText(this._char, startX, startY);\n\n this._texture.handleLoadedTexture();\n },\n\n destroy () {\n this._texture.destroy();\n this._texture = null;\n Label._canvasPool.put(this._data);\n },\n}\n\nfunction LetterAtlas(atlases, width, height) {\n let texture = new RenderTexture();\n texture.initWithSize(width, height);\n texture.update();\n\n this._atlases = atlases;\n this._texture = texture;\n this._id = 0;\n this._tmpId = -1;\n\n this._x = space;\n this._y = space;\n this._nexty = space;\n\n this.frees = [];\n this.waitCleans = [];\n\n this._width = width;\n this._height = height;\n}\n\ncc.js.mixin(LetterAtlas.prototype, {\n insertLetterTexture(letterTexture) {\n let texture = letterTexture._texture;\n let width = texture.width, height = texture.height;\n\n // 先寻找是否有可用的被回收的区域\n if (this.frees.length > 0) {\n let score = Number.MAX_VALUE;\n let areaFit = 0;\n let original = null;\n let originalIndex = 0;\n\n for (let i = 0; i < this.frees.length; i++) {\n const freeLetter = this.frees[i];\n if (freeLetter._width >= width && freeLetter._height >= height) {\n areaFit = freeLetter._width * freeLetter._height - width * height;\n if (areaFit < score) {\n original = freeLetter;\n originalIndex = i;\n score = areaFit;\n }\n }\n }\n\n if (original) {\n original._hash = letterTexture._hash;\n original.w = letterTexture._width - bleed;\n original.h = letterTexture._height - bleed;\n original.xAdvance = original.w;\n original.offsetY = letterTexture._offsetY;\n\n this._texture.drawTextureAt(texture, original.u - bleed / 2, original.v - bleed / 2);\n\n this._dirty = true;\n\n this.removeFreeLetter(originalIndex);\n\n this._atlases._fontDefDictionary.addLetterDefinitions(letterTexture._hash, original);\n return original;\n }\n }\n\n // 矫正宽度为三档: <0.75x height <1x height >1x height\n if (width <= height * 0.75) {\n width = height * 0.75;\n } else if (width <= height) {\n width = height;\n }\n\n // 没有可用的被回收区域,尝试直接插入\n const oldx = this._x, oldy = this._y, oldnexty = this._nexty;\n\n if ((this._x + width + space) > this._width) {\n // TODO 跳到下一行之前将这行的剩余区域切成多个正方形并放入 frees,避免浪费\n this._x = space;\n this._y = this._nexty;\n }\n\n if ((this._y + height) > this._nexty) {\n this._nexty = this._y + height + space;\n }\n\n if (this._nexty > this._height) {\n this._x = oldx;\n this._y = oldy;\n this._nexty = oldnexty;\n \n // 回收 waitCleans\n if (this.waitCleans.length > 0) {\n for (const letter of this.waitCleans) {\n letter._inCleans = false;\n if (letter.ref === 0) {\n delete this._atlases._fontDefDictionary._letterDefinitions[letter._hash];\n this.frees.push(letter);\n }\n }\n this.waitCleans.length = 0;\n return this.insertLetterTexture(letterTexture);\n } else {\n return null; \n }\n }\n\n this._texture.drawTextureAt(texture, this._x, this._y);\n\n this._dirty = true;\n \n let letter = new FontLetterDefinition();\n letter.u = this._x + bleed / 2;\n letter.v = this._y + bleed / 2;\n letter.texture = this._texture;\n letter.atlas = this;\n letter.ref = 0;\n letter.valid = true;\n letter.w = letterTexture._width - bleed;\n letter.h = letterTexture._height - bleed;\n letter._inCleans = false;\n letter._hash = letterTexture._hash;\n letter._width = width;\n letter._height = height;\n letter.xAdvance = letter.w;\n letter.offsetY = letterTexture._offsetY;\n\n this._x += width + space;\n\n this._atlases._fontDefDictionary.addLetterDefinitions(letterTexture._hash, letter);\n \n return letter\n },\n\n pushFreeLetter(letter) {\n const i = this.frees.push(letter) - 1;\n },\n\n removeFreeLetter(index) {\n const temp = this.frees[index];\n const temp2 = this.frees[this.frees.length - 1];\n // temp2.cacheIndex = index;\n // temp.cacheIndex = -1;\n this.frees[index] = temp2;\n this.frees.pop();\n },\n\n update () {\n if (!this._dirty) return;\n this._texture.update();\n this._dirty = false;\n },\n\n reset () {\n this._x = space;\n this._y = space;\n this._nexty = space;\n\n const defs = this._atlases._fontDefDictionary._letterDefinitions;\n for (const key in defs) {\n const def = defs[key];\n if (def.atlas === this) {\n delete defs[key];\n }\n }\n\n this.frees.length = 0;\n this.waitCleans.length = 0;\n },\n\n destroy () {\n this.reset();\n const handler = this._atlases.material.getMultiHandler();\n handler.removeTexture(this._texture);\n this._texture.destroy();\n this._texture = null;\n },\n\n});\n\nclass LetterAtlases {\n\n /**\n * 图集数组\n */\n atlases = [];\n\n /**\n * Char 多纹理材质\n */\n material = null;\n\n /**\n * Fake MaterialVariant\n */\n fakeMaterial = { material: null };\n\n /**\n * 抽象图集\n */\n _fontDefDictionary = new FontAtlas(null);\n\n\n constructor() {\n const handler = new cc.sp.MultiHandler();\n this.material = handler.material;\n this.fakeMaterial.material = this.material;\n\n cc.director.on(cc.Director.EVENT_BEFORE_SCENE_LAUNCH, this.beforeSceneLoad, this);\n }\n\n\n insertLetterTexture(letterTexture) {\n for (const atlas of this.atlases) {\n const letter = atlas.insertLetterTexture(letterTexture);\n if (letter) {\n return letter;\n }\n }\n\n if (this.atlases.length >= 8) {\n return null;\n } else {\n const atlas = new LetterAtlas(this, _atlasWidth, _atlasHeight);\n const len = this.atlases.push(atlas);\n atlas._id = len - 1;\n const handler = this.material.getMultiHandler();\n handler.setTexture(atlas._id, atlas._texture);\n if (!CC_EDITOR && cc.sp.charAtlasAutoBatchCount >= len) {\n cc.sp.multiBatcher.requsetMaterial(atlas._texture);\n }\n return atlas.insertLetterTexture(letterTexture);\n }\n }\n\n\n deleteLetter(letter) {\n letter.ref--;\n if (letter.ref === 0 && !letter._inCleans) {\n letter._inCleans = true;\n letter.atlas.waitCleans.push(letter);\n }\n }\n\n\n update() {\n for (const atlas of this.atlases) {\n atlas.update();\n }\n }\n\n\n reset() {\n this._fontDefDictionary.clear();\n\n for (const atlas of this.atlases) {\n atlas.reset();\n }\n }\n\n\n destroy() {\n this._fontDefDictionary.clear();\n\n for (const atlas of this.atlases) {\n atlas.destroy();\n }\n\n this.atlases.length = 0;\n }\n\n\n beforeSceneLoad() {\n if (cc.sp.charAtlasAutoResetBeforeSceneLoad) {\n this.clearAllCache();\n }\n }\n\n\n clearAllCache() {\n this.reset();\n }\n\n\n getTexture() {\n if (!_emptyTexture) {\n _emptyTexture = new RenderTexture();\n _emptyTexture.initWithSize(_atlasWidth, _atlasHeight);\n _emptyTexture.update();\n }\n return _emptyTexture;\n }\n\n\n getLetter(key) {\n return this._fontDefDictionary._letterDefinitions[key];\n }\n\n\n getLetterDefinitionForChar(char, labelInfo) {\n let hash = char.charCodeAt(0) + labelInfo.hash;\n let letter = this._fontDefDictionary._letterDefinitions[hash];\n if (!letter) {\n let temp = new LetterTexture(char, labelInfo);\n temp.updateRenderData();\n letter = this.insertLetterTexture(temp);\n temp.destroy();\n }\n\n if (letter && _firstTraverse) {\n letter.ref++;\n _assembler._letterRefs.push(letter);\n this.checkMaterialAndUpdateTexId(letter);\n }\n\n return letter;\n }\n\n\n checkMaterialAndUpdateTexId(letter) {\n const atlas = letter.atlas;\n const comp = _assembler._renderComp;\n\n // 检查是否需要自动切换材质\n if (_needCheckMaterial) {\n _needCheckMaterial = false;\n if (_usedMaterial.material !== _shareAtlas.material) {\n _assembler.checkAndSwitchMaterial(comp, atlas._texture, _usedMaterial);\n _usedMaterial = comp._materials[0];\n }\n }\n\n // 检查是否需要更新 atlas tmpId,使用内置材质则不检查\n if (_usedMaterial.material !== _shareAtlas.material && atlas._tmpId === -1) {\n const handler = _usedMaterial.material.getMultiHandler();\n if (handler) {\n const index = handler.getIndex(atlas._texture.getImpl());\n if (index !== -1) {\n atlas._tmpId = index;\n return;\n }\n }\n\n // 如果无法在材质中找到 texture,则切换至内置材质\n comp.setMaterial(0, _shareAtlas.material);\n _usedMaterial = _shareAtlas.fakeMaterial;\n }\n }\n\n}\n\nfunction computeHash (labelInfo) {\n let hashData = '|';\n let color = labelInfo.color.toHEX();\n let out = '';\n if (labelInfo.isOutlined && labelInfo.margin > 0) {\n out = out + labelInfo.margin + labelInfo.out.toHEX();\n }\n \n return hashData + labelInfo.fontSize + labelInfo.fontFamily + color + out;\n}\n\nlet _shareAtlas = null;\n\nlet _atlasWidth = 2048;\nlet _atlasHeight = 2048;\nlet _isBold = false;\nlet _usedMaterial = null;\nlet _needCheckMaterial = false;\nlet _firstTraverse = false;\nlet _assembler = null;\nlet _emptyTexture = null;\n\nexport default class LetterFontAssembler extends WebglBmfontAssembler {\n _letterRefs = [];\n\n initData() {\n let data = this._renderData;\n data.createFlexData(0, this.verticesCount, this.indicesCount, this.getVfmt());\n }\n\n getVfmt() {\n return vfmtPosUvColorTexId;\n }\n\n getBuffer() {\n return cc.renderer._handle.getBuffer(\"mesh\", this.getVfmt());\n }\n\n _getAssemblerData () {\n if (!_shareAtlas) {\n _shareAtlas = new LetterAtlases();\n cc.Label._shareAtlas = _shareAtlas;\n }\n \n return _shareAtlas.getTexture();\n }\n\n _updateFontFamily (comp) {\n shareLabelInfo.fontAtlas = _shareAtlas;\n shareLabelInfo.fontFamily = getFontFamily(comp);\n\n // outline\n let outline = OUTLINE_SUPPORTED && comp.getComponent(LabelOutline);\n if (outline && outline.enabled) {\n shareLabelInfo.isOutlined = true;\n shareLabelInfo.margin = outline.width;\n shareLabelInfo.out = outline.color.clone();\n shareLabelInfo.out.a = outline.color.a * comp.node.color.a / 255.0;\n }\n else {\n shareLabelInfo.isOutlined = false;\n shareLabelInfo.margin = 0;\n }\n }\n\n _updateLabelInfo (comp) {\n shareLabelInfo.fontDesc = this._getFontDesc();\n shareLabelInfo.color = comp.node.color;\n shareLabelInfo.hash = computeHash(shareLabelInfo);\n }\n\n _getFontDesc () {\n let fontDesc = shareLabelInfo.fontSize.toString() + 'px ';\n fontDesc = fontDesc + shareLabelInfo.fontFamily;\n if (_isBold) {\n fontDesc = \"bold \" + fontDesc;\n }\n\n return fontDesc;\n }\n _computeHorizontalKerningForText () {}\n _determineRect (tempRect) {\n return false;\n }\n\n _updateRenderData(comp) {\n // 还原 tex id 与当前使用材质\n _assembler = this;\n _usedMaterial = _assembler._renderComp._materials[0];\n _needCheckMaterial = true;\n _firstTraverse = true;\n for (const atlas of _shareAtlas.atlases) {\n atlas._tmpId = -1;\n }\n\n // 还原 letterRef\n this._recycleLetterRef();\n\n super._updateRenderData(comp);\n\n _usedMaterial = null;\n _assembler = null;\n }\n\n _finishMultilineTextWrap() {\n _firstTraverse = false;\n }\n\n _recycleLetterRef() {\n for (const letter of this._letterRefs) {\n _shareAtlas.deleteLetter(letter);\n }\n this._letterRefs.length = 0;\n }\n\n _resetAssemblerData(assemblerData) {\n if (this._letterRefs.length !== 0) {\n this._recycleLetterRef();\n }\n }\n\n appendVerts(comp, offset, l, r, b, t, letter) {\n super.appendVerts(comp, offset, l, r, b, t, letter);\n\n // update texId\n const renderData = this._renderData;\n const verts = renderData.vDatas[0];\n const floatsPerVert = this.floatsPerVert;\n let texIdOffset = offset + this.texIdOffset;\n const id = _usedMaterial.material !== _shareAtlas.material ? letter.atlas._tmpId : letter.atlas._id;\n\n verts[texIdOffset] = id;\n texIdOffset += floatsPerVert;\n verts[texIdOffset] = id;\n texIdOffset += floatsPerVert;\n verts[texIdOffset] = id;\n texIdOffset += floatsPerVert;\n verts[texIdOffset] = id;\n }\n\n}\n\nLetterFontAssembler.prototype.floatsPerVert = 6;\nLetterFontAssembler.prototype.texIdOffset = 5;\nLetterFontAssembler.prototype.isMulti = true;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport Assembler2D from '../../assembler-2d';\n\nlet textUtils = require('../../../utils/text-utils');\nconst macro = require('../../../platform/CCMacro');\nconst Label = require('../../../components/CCLabel');\nconst LabelOutline = require('../../../components/CCLabelOutline');\nconst LabelShadow = require('../../../components/CCLabelShadow');\nconst Overflow = Label.Overflow;\nconst deleteFromDynamicAtlas = require('../utils').deleteFromDynamicAtlas;\nconst getFontFamily = require('../utils').getFontFamily;\n\nconst MAX_SIZE = 2048;\nconst _invisibleAlpha = (1 / 255).toFixed(3);\n\nlet _context = null;\nlet _canvas = null;\nlet _texture = null;\n\nlet _fontDesc = '';\nlet _string = '';\nlet _fontSize = 0;\nlet _drawFontSize = 0;\nlet _splitedStrings = [];\nlet _canvasSize = cc.Size.ZERO;\nlet _lineHeight = 0;\nlet _hAlign = 0;\nlet _vAlign = 0;\nlet _color = null;\nlet _fontFamily = '';\nlet _overflow = Overflow.NONE;\nlet _isWrapText = false;\nlet _premultiply = false;\nlet _isRetina = false;\nlet _retinaScale = 1;\n\n// outline\nlet _outlineComp = null;\nlet _outlineColor = cc.Color.WHITE;\n\n// shadow\nlet _shadowComp = null;\nlet _shadowColor = cc.Color.BLACK;\n\nlet _canvasPadding = cc.rect();\nlet _contentSizeExtend = cc.Size.ZERO;\nlet _nodeContentSize = cc.Size.ZERO;\n\nlet _enableBold = false;\nlet _enableItalic = false;\nlet _enableUnderline = false;\nlet _underlineThickness = 0;\n\nlet _drawUnderlinePos = cc.Vec2.ZERO;\nlet _drawUnderlineWidth = 0;\n\nlet _sharedLabelData;\n\nconst Alignment = [\n 'left', // macro.TextAlignment.LEFT\n 'center', // macro.TextAlignment.CENTER\n 'right' // macro.TextAlignment.RIGHT\n];\n\nexport default class TTFAssembler extends Assembler2D {\n _getAssemblerData () {\n _sharedLabelData = Label._canvasPool.get();\n _sharedLabelData.canvas.width = _sharedLabelData.canvas.height = 1;\n return _sharedLabelData;\n }\n\n _resetAssemblerData (assemblerData) {\n if (assemblerData) {\n Label._canvasPool.put(assemblerData);\n }\n }\n\n updateRenderData (comp) {\n super.updateRenderData(comp);\n \n if (!comp._vertsDirty) return;\n\n this._updateProperties(comp);\n this._calculateLabelFont();\n this._updateLabelDimensions();\n this._updateTexture(comp);\n const assemblerChanged = this._calDynamicAtlas(comp);\n\n // 打包到动态图集时可能会切换 Assembler\n if (!assemblerChanged) {\n this._updateRenderData(comp);\n }\n }\n\n _updateRenderData(comp) {\n if (_isRetina) {\n _fontSize /= _retinaScale;\n _nodeContentSize.width /= _retinaScale;\n _nodeContentSize.height /= _retinaScale;\n }\n\n comp._actualFontSize = _fontSize;\n comp.node.setContentSize(_nodeContentSize);\n\n this.updateVerts(comp);\n\n comp._vertsDirty = false;\n\n _context = null;\n _canvas = null;\n _texture = null;\n }\n\n getTTFTextureSizeScale() {\n return _isRetina ? _retinaScale : 1;\n }\n\n updateVerts () {\n }\n\n _updatePaddingRect () {\n let top = 0, bottom = 0, left = 0, right = 0;\n let outlineWidth = 0;\n _contentSizeExtend.width = _contentSizeExtend.height = 0;\n if (_outlineComp) {\n outlineWidth = _outlineComp.width;\n if (_isRetina) {\n outlineWidth *= _retinaScale;\n }\n top = bottom = left = right = outlineWidth;\n _contentSizeExtend.width = _contentSizeExtend.height = outlineWidth * 2;\n }\n if (_shadowComp) {\n let shadowWidth = _shadowComp.blur + outlineWidth;\n left = Math.max(left, -_shadowComp._offset.x + shadowWidth);\n right = Math.max(right, _shadowComp._offset.x + shadowWidth);\n top = Math.max(top, _shadowComp._offset.y + shadowWidth);\n bottom = Math.max(bottom, -_shadowComp._offset.y + shadowWidth);\n }\n if (_enableItalic) {\n //0.0174532925 = 3.141592653 / 180\n let offset = _drawFontSize * Math.tan(12 * 0.0174532925);\n right += offset;\n _contentSizeExtend.width += offset;\n }\n _canvasPadding.x = left;\n _canvasPadding.y = top;\n _canvasPadding.width = left + right;\n _canvasPadding.height = top + bottom;\n }\n\n _updateProperties (comp) {\n let assemblerData = comp._assemblerData;\n _context = assemblerData.context;\n _canvas = assemblerData.canvas;\n _texture = comp._frame._original ? comp._frame._original._texture : comp._frame._texture;\n\n _isRetina = (cc.sp.enableLabelRetina && comp.enableRetina === 0) || comp.enableRetina === 1;\n _retinaScale = cc.sp.labelRetinaScale;\n _string = comp.string.toString();\n _fontSize = comp._fontSize;\n _nodeContentSize = comp.node.getContentSize();\n _lineHeight = comp._lineHeight;\n _drawFontSize = _fontSize;\n _underlineThickness = comp.underlineHeight || _drawFontSize / 8;\n\n if (_isRetina) {\n _fontSize *= _retinaScale;\n _nodeContentSize.width *= _retinaScale;\n _nodeContentSize.height *= _retinaScale;\n _lineHeight *= _retinaScale;\n if (comp.underlineHeight) _underlineThickness *= _retinaScale;\n _drawFontSize = _fontSize;\n }\n\n _overflow = comp.overflow;\n _canvasSize.width = _nodeContentSize.width;\n _canvasSize.height = _nodeContentSize.height;\n _hAlign = comp.horizontalAlign;\n _vAlign = comp.verticalAlign;\n _color = comp.node.color;\n _enableBold = comp.enableBold;\n _enableItalic = comp.enableItalic;\n _enableUnderline = comp.enableUnderline;\n _fontFamily = getFontFamily(comp);\n _premultiply = comp.srcBlendFactor === cc.macro.BlendFactor.ONE;\n\n if (CC_NATIVERENDERER) {\n _context._setPremultiply(_premultiply);\n }\n\n if (_overflow === Overflow.NONE) {\n _isWrapText = false;\n }\n else if (_overflow === Overflow.RESIZE_HEIGHT) {\n _isWrapText = true;\n }\n else {\n _isWrapText = comp.enableWrapText;\n }\n\n // outline\n _outlineComp = LabelOutline && comp.getComponent(LabelOutline);\n _outlineComp = (_outlineComp && _outlineComp.enabled && _outlineComp.width > 0) ? _outlineComp : null;\n if (_outlineComp) {\n _outlineColor.set(_outlineComp.color);\n }\n\n // shadow\n _shadowComp = LabelShadow && comp.getComponent(LabelShadow);\n _shadowComp = (_shadowComp && _shadowComp.enabled) ? _shadowComp : null;\n if (_shadowComp) {\n _shadowColor.set(_shadowComp.color);\n // TODO: temporary solution, cascade opacity for outline color\n _shadowColor.a = _shadowColor.a * comp.node.color.a / 255.0;\n }\n\n this._updatePaddingRect();\n }\n\n _calculateFillTextStartPosition () {\n let labelX = 0;\n if (_hAlign === macro.TextAlignment.RIGHT) {\n labelX = _canvasSize.width - _canvasPadding.width;\n } else if (_hAlign === macro.TextAlignment.CENTER) {\n labelX = (_canvasSize.width - _canvasPadding.width) / 2;\n }\n\n let lineHeight = this._getLineHeight();\n let drawStartY = lineHeight * (_splitedStrings.length - 1);\n // TOP\n let firstLinelabelY = _fontSize * (1 - textUtils.BASELINE_RATIO / 2);\n if (_vAlign !== macro.VerticalTextAlignment.TOP) {\n // free space in vertical direction\n let blank = drawStartY + _canvasPadding.height + _fontSize - _canvasSize.height;\n if (_vAlign === macro.VerticalTextAlignment.BOTTOM) {\n // Unlike BMFont, needs to reserve space below.\n blank += textUtils.BASELINE_RATIO / 2 * _fontSize;\n // BOTTOM\n firstLinelabelY -= blank;\n } else {\n // CENTER\n firstLinelabelY -= blank / 2;\n }\n }\n\n firstLinelabelY += textUtils.BASELINE_OFFSET * _fontSize;\n\n return cc.v2(labelX + _canvasPadding.x, firstLinelabelY + _canvasPadding.y);\n }\n\n _setupOutline () {\n _context.strokeStyle = `rgba(${_outlineColor.r}, ${_outlineColor.g}, ${_outlineColor.b}, ${_outlineColor.a / 255})`;\n _context.lineWidth = _outlineComp.width * 2 * (_isRetina ? _retinaScale : 1);\n }\n\n _setupShadow () {\n _context.shadowColor = `rgba(${_shadowColor.r}, ${_shadowColor.g}, ${_shadowColor.b}, ${_shadowColor.a / 255})`;\n _context.shadowBlur = _shadowComp.blur * (_isRetina ? _retinaScale : 1);\n _context.shadowOffsetX = _shadowComp.offset.x * (_isRetina ? _retinaScale : 1);\n _context.shadowOffsetY = -_shadowComp.offset.y * (_isRetina ? _retinaScale : 1);\n }\n\n _drawTextEffect (startPosition, lineHeight) {\n if (!_shadowComp && !_outlineComp && !_enableUnderline) return;\n\n let isMultiple = _splitedStrings.length > 1 && _shadowComp;\n let measureText = this._measureText(_context, _fontDesc);\n let drawTextPosX = 0, drawTextPosY = 0;\n\n // only one set shadow and outline\n if (_shadowComp) {\n this._setupShadow();\n }\n \n if (_outlineComp) {\n this._setupOutline();\n }\n\n // draw shadow and (outline or text)\n for (let i = 0; i < _splitedStrings.length; ++i) {\n drawTextPosX = startPosition.x;\n drawTextPosY = startPosition.y + i * lineHeight;\n // multiple lines need to be drawn outline and fill text\n if (isMultiple) {\n if (_outlineComp) {\n _context.strokeText(_splitedStrings[i], drawTextPosX, drawTextPosY);\n }\n _context.fillText(_splitedStrings[i], drawTextPosX, drawTextPosY);\n }\n\n // draw underline\n if (_enableUnderline) {\n _drawUnderlineWidth = measureText(_splitedStrings[i]);\n if (_hAlign === macro.TextAlignment.RIGHT) {\n _drawUnderlinePos.x = startPosition.x - _drawUnderlineWidth;\n } else if (_hAlign === macro.TextAlignment.CENTER) {\n _drawUnderlinePos.x = startPosition.x - (_drawUnderlineWidth / 2);\n } else {\n _drawUnderlinePos.x = startPosition.x;\n }\n _drawUnderlinePos.y = drawTextPosY + _drawFontSize / 8;\n _context.fillRect(_drawUnderlinePos.x, _drawUnderlinePos.y, _drawUnderlineWidth, _underlineThickness);\n }\n }\n\n if (isMultiple) {\n _context.shadowColor = 'transparent';\n }\n }\n\n _updateTexture () {\n _context.clearRect(0, 0, _canvas.width, _canvas.height);\n // use round for line join to avoid sharp intersect point\n _context.lineJoin = 'round';\n //Add a white background to avoid black edges.\n if (!_premultiply) {\n //TODO: it is best to add alphaTest to filter out the background color.\n let _fillColor = _outlineComp ? _outlineColor : _color;\n _context.fillStyle = `rgba(${_fillColor.r}, ${_fillColor.g}, ${_fillColor.b}, ${_invisibleAlpha})`;\n _context.fillRect(0, 0, _canvas.width, _canvas.height);\n _context.fillStyle = `rgba(${_color.r}, ${_color.g}, ${_color.b}, 1)`;\n } else {\n _context.fillStyle = `rgba(${_color.r}, ${_color.g}, ${_color.b}, ${_color.a / 255.0})`;\n }\n\n let startPosition = this._calculateFillTextStartPosition();\n let lineHeight = this._getLineHeight();\n let drawTextPosX = startPosition.x, drawTextPosY = 0;\n // draw shadow and underline\n this._drawTextEffect(startPosition, lineHeight);\n // draw text and outline\n for (let i = 0; i < _splitedStrings.length; ++i) {\n drawTextPosY = startPosition.y + i * lineHeight;\n if (_outlineComp) {\n _context.strokeText(_splitedStrings[i], drawTextPosX, drawTextPosY);\n }\n _context.fillText(_splitedStrings[i], drawTextPosX, drawTextPosY);\n }\n\n if (_shadowComp) {\n _context.shadowColor = 'transparent';\n }\n\n _texture.handleLoadedTexture();\n }\n\n _calDynamicAtlas (comp) {\n if(comp.cacheMode !== Label.CacheMode.BITMAP) return false;\n let frame = comp._frame;\n // Delete cache in atlas.\n deleteFromDynamicAtlas(comp, frame);\n if (!frame._original) {\n frame.setRect(cc.rect(0, 0, _canvas.width, _canvas.height));\n }\n return this.packDynamicAtlasAndCheckMaterial(comp, frame);\n }\n\n packDynamicAtlasAndCheckMaterial(comp, frame) {\n const allowDynamicAtlas = comp.allowDynamicAtlas;\n if ((cc.sp.allowDynamicAtlas && allowDynamicAtlas === 0) || allowDynamicAtlas === 1) {\n frame._texture._uuid = _fontDesc\n + _overflow\n + (_premultiply ? 'P' : 'NP')\n + (_enableUnderline ? 'UL' : 'NUL')\n + _string;\n \n if (_outlineComp) {\n frame._texture._uuid += _outlineComp.color.toHEX()\n + ','\n + _outlineComp.width\n + ',';\n }\n\n if (_shadowComp) {\n frame._texture._uuid += _shadowComp.color.toHEX()\n + _shadowComp.offset.x\n + ','\n + _shadowComp.offset.y\n + ','\n + _shadowComp.blur;\n }\n }\n return super.packDynamicAtlasAndCheckMaterial(comp, frame);\n }\n\n _updateLabelDimensions () {\n _canvasSize.width = Math.min(_canvasSize.width, MAX_SIZE);\n _canvasSize.height = Math.min(_canvasSize.height, MAX_SIZE);\n\n let recreate = false;\n if (_canvas.width !== _canvasSize.width) {\n _canvas.width = _canvasSize.width;\n recreate = true\n }\n\n if (_canvas.height !== _canvasSize.height) {\n _canvas.height = _canvasSize.height;\n recreate = true\n }\n\n recreate && (_context.font = _fontDesc);\n // align\n _context.textAlign = Alignment[_hAlign];\n }\n\n _getFontDesc () {\n let fontDesc = _fontSize.toString() + 'px ';\n fontDesc = fontDesc + _fontFamily;\n if (_enableBold) {\n fontDesc = \"bold \" + fontDesc;\n }\n if (_enableItalic) {\n fontDesc = \"italic \" + fontDesc;\n }\n return fontDesc;\n }\n\n _getLineHeight () {\n let nodeSpacingY = _lineHeight;\n if (nodeSpacingY === 0) {\n nodeSpacingY = _fontSize;\n } else {\n nodeSpacingY = nodeSpacingY * _fontSize / _drawFontSize;\n }\n\n return nodeSpacingY | 0;\n }\n\n _calculateParagraphLength (paragraphedStrings, ctx) {\n let paragraphLength = [];\n\n for (let i = 0; i < paragraphedStrings.length; ++i) {\n let width = textUtils.safeMeasureText(ctx, paragraphedStrings[i], _fontDesc);\n paragraphLength.push(width);\n }\n\n return paragraphLength;\n }\n\n _measureText (ctx, fontDesc) {\n return function (string) {\n return textUtils.safeMeasureText(ctx, string, fontDesc);\n };\n }\n\n _calculateShrinkFont (paragraphedStrings) {\n let paragraphLength = this._calculateParagraphLength(paragraphedStrings, _context);\n \n let i = 0;\n let totalHeight = 0;\n let maxLength = 0;\n\n if (_isWrapText) {\n let canvasWidthNoMargin = _nodeContentSize.width;\n let canvasHeightNoMargin = _nodeContentSize.height;\n if (canvasWidthNoMargin < 0 || canvasHeightNoMargin < 0) {\n return;\n }\n totalHeight = canvasHeightNoMargin + 1;\n let actualFontSize = _fontSize + 1;\n let textFragment = \"\";\n //let startShrinkFontSize = actualFontSize | 0;\n let left = 0, right = actualFontSize | 0, mid = 0;\n\n while (left < right) {\n mid = (left + right + 1) >> 1;\n\n if (mid <= 0) {\n cc.logID(4003);\n break;\n }\n\n _fontSize = mid;\n _fontDesc = this._getFontDesc();\n _context.font = _fontDesc;\n let lineHeight = this._getLineHeight();\n\n totalHeight = 0;\n for (i = 0; i < paragraphedStrings.length; ++i) {\n let allWidth = textUtils.safeMeasureText(_context, paragraphedStrings[i], _fontDesc);\n textFragment = textUtils.fragmentText(paragraphedStrings[i],\n allWidth,\n canvasWidthNoMargin,\n this._measureText(_context, _fontDesc));\n totalHeight += textFragment.length * lineHeight;\n }\n\n if (totalHeight > canvasHeightNoMargin) {\n right = mid - 1;\n } else {\n left = mid;\n }\n }\n\n if (left === 0) {\n cc.logID(4003);\n } else {\n _fontSize = left;\n _fontDesc = this._getFontDesc();\n _context.font = _fontDesc;\n }\n } else {\n totalHeight = paragraphedStrings.length * this._getLineHeight();\n\n for (i = 0; i < paragraphedStrings.length; ++i) {\n if (maxLength < paragraphLength[i]) {\n maxLength = paragraphLength[i];\n }\n }\n let scaleX = (_canvasSize.width - _canvasPadding.width) / maxLength;\n let scaleY = _canvasSize.height / totalHeight;\n\n _fontSize = (_drawFontSize * Math.min(1, scaleX, scaleY)) | 0;\n _fontDesc = this._getFontDesc();\n _context.font = _fontDesc;\n }\n }\n\n _calculateWrapText (paragraphedStrings) {\n if (!_isWrapText) return;\n\n _splitedStrings = [];\n let canvasWidthNoMargin = _nodeContentSize.width;\n for (let i = 0; i < paragraphedStrings.length; ++i) {\n let allWidth = textUtils.safeMeasureText(_context, paragraphedStrings[i], _fontDesc);\n let textFragment = textUtils.fragmentText(paragraphedStrings[i],\n allWidth,\n canvasWidthNoMargin,\n this._measureText(_context, _fontDesc));\n _splitedStrings = _splitedStrings.concat(textFragment);\n }\n }\n\n _calculateLabelFont () {\n let paragraphedStrings = _string.split('\\n');\n\n _splitedStrings = paragraphedStrings;\n _fontDesc = this._getFontDesc();\n _context.font = _fontDesc;\n\n switch (_overflow) {\n case Overflow.NONE: {\n let canvasSizeX = 0;\n let canvasSizeY = 0;\n for (let i = 0; i < paragraphedStrings.length; ++i) {\n let paraLength = textUtils.safeMeasureText(_context, paragraphedStrings[i], _fontDesc);\n canvasSizeX = canvasSizeX > paraLength ? canvasSizeX : paraLength;\n }\n canvasSizeY = (_splitedStrings.length + textUtils.BASELINE_RATIO) * this._getLineHeight();\n let rawWidth = parseFloat(canvasSizeX.toFixed(2));\n let rawHeight = parseFloat(canvasSizeY.toFixed(2));\n _canvasSize.width = rawWidth + _canvasPadding.width;\n _canvasSize.height = rawHeight + _canvasPadding.height;\n _nodeContentSize.width = rawWidth + _contentSizeExtend.width;\n _nodeContentSize.height = rawHeight + _contentSizeExtend.height;\n break;\n }\n case Overflow.SHRINK: {\n this._calculateShrinkFont(paragraphedStrings);\n this._calculateWrapText(paragraphedStrings);\n break;\n }\n case Overflow.CLAMP: {\n this._calculateWrapText(paragraphedStrings);\n break;\n }\n case Overflow.RESIZE_HEIGHT: {\n this._calculateWrapText(paragraphedStrings);\n let rawHeight = (_splitedStrings.length + textUtils.BASELINE_RATIO) * this._getLineHeight();\n _canvasSize.height = rawHeight + _canvasPadding.height;\n // set node height\n _nodeContentSize.height = rawHeight + _contentSizeExtend.height;\n break;\n }\n }\n }\n}\n\n","const dynamicAtlasManager = require('./dynamic-atlas/manager');\nconst WHITE = cc.Color.WHITE;\n\n// share data of bmfont\nlet shareLabelInfo = {\n fontAtlas: null,\n \n fontSize:0,\n lineHeight:0,\n hAlign:0,\n vAlign:0,\n\n hash:\"\",\n fontFamily:\"\",\n fontDesc:\"Arial\",\n color:WHITE,\n isOutlined:false,\n out:WHITE,\n margin:0,\n}\n\nmodule.exports = {\n\n deleteFromDynamicAtlas (comp, frame) {\n if (frame && !CC_TEST) {\n if (frame._original && dynamicAtlasManager) {\n dynamicAtlasManager.deleteAtlasSpriteFrame(frame);\n frame._resetDynamicAtlasFrame();\n }\n }\n },\n\n getFontFamily (comp) {\n if (!comp.useSystemFont) {\n if (comp.font) {\n if (comp.font._nativeAsset) {\n return comp.font._nativeAsset;\n }\n cc.assetManager.postLoadNative(comp.font, function (err) {\n comp.isValid && comp.setVertsDirty();\n });\n return 'Arial';\n }\n \n return 'Arial';\n }\n else {\n return comp.fontFamily || 'Arial';\n }\n },\n\n shareLabelInfo: shareLabelInfo\n}\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\ncc.assemblers = {};\n\nrequire('./sprite');\nrequire('./mask-assembler');\nrequire('./graphics');\nrequire('./label');\nrequire('./motion-streak');\nrequire('./motion-streak-multi');\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport WebglBmfontAssembler from '../2d/bmfont';\nimport { vfmtPosUvColorTexId } from '../../../../webgl/vertex-format';\n\nexport default class MultiWebglBmfontAssembler extends WebglBmfontAssembler {\n initData () {\n let data = this._renderData;\n data.createFlexData(0, this.verticesCount, this.indicesCount, this.getVfmt());\n }\n\n getVfmt() {\n return vfmtPosUvColorTexId;\n }\n\n getBuffer() {\n return cc.renderer._handle.getBuffer(\"mesh\", this.getVfmt());\n }\n\n updateRenderData(comp) {\n super.updateRenderData(comp);\n\n if (comp._texIdDirty) {\n comp._updateMultiTexId(comp.getMaterial(0), comp._frame._texture);\n }\n\n // 不进行 Dirty 判断,文本可能会变化,但是纹理不会变\n this.updateTexId(comp);\n comp._texIdDirty = false;\n }\n\n updateRenderDataForSwitchMaterial(comp) {\n super._preUpdateRenderData(comp);\n super._updateRenderData(comp);\n\n if (comp._texIdDirty) {\n comp._updateMultiTexId(comp.getMaterial(0), comp._frame._texture);\n }\n\n // 不进行 Dirty 判断,文本可能会变化,但是纹理不会变\n this.updateTexId(comp);\n comp._texIdDirty = false;\n }\n}\n\nMultiWebglBmfontAssembler.prototype.floatsPerVert = 6;\nMultiWebglBmfontAssembler.prototype.texIdOffset = 5;\nMultiWebglBmfontAssembler.prototype.isMulti = true;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport WebglTTFAssembler from '../2d/ttf';\nimport { vfmtPosUvColorTexId } from '../../../../webgl/vertex-format';\n\nexport default class MultiWebglTTFAssembler extends WebglTTFAssembler {\n initData() {\n let data = this._renderData;\n data.createFlexData(0, this.verticesCount, this.indicesCount, this.getVfmt());\n const indices = data.iDatas[0];\n data.initQuadIndices(indices);\n }\n\n getVfmt() {\n return vfmtPosUvColorTexId;\n }\n\n getBuffer() {\n return cc.renderer._handle.getBuffer(\"mesh\", this.getVfmt());\n }\n\n updateRenderData(comp) {\n super.updateRenderData(comp);\n\n if (comp._texIdDirty) {\n comp._updateMultiTexId(comp.getMaterial(0), comp._frame._texture);\n }\n\n // 不进行 Dirty 判断,文本可能会变化,但是纹理不会变\n this.updateTexId(comp);\n comp._texIdDirty = false;\n }\n\n updateRenderDataForSwitchMaterial(comp) {\n super._updateRenderData(comp);\n\n if (comp._texIdDirty) {\n comp._updateMultiTexId(comp.getMaterial(0), comp._frame._texture);\n }\n\n // 不进行 Dirty 判断,文本可能会变化,但是纹理不会变\n this.updateTexId(comp);\n comp._texIdDirty = false;\n }\n}\n\nMultiWebglTTFAssembler.prototype.floatsPerVert = 6;\nMultiWebglTTFAssembler.prototype.texIdOffset = 5;\nMultiWebglTTFAssembler.prototype.isMulti = true;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport BmfontAssembler from '../../../../utils/label/bmfont';\n\nlet _dataOffset = 0;\n\nexport default class WebglBmfontAssembler extends BmfontAssembler {\n initData () {\n this._renderData.createFlexData(0, 4, 6, this.getVfmt());\n }\n\n _reserveQuads (comp, count) {\n let verticesCount = count * 4;\n let indicesCount = count * 6;\n \n let flexBuffer = this._renderData._flexBuffer;\n flexBuffer.reserve(verticesCount, indicesCount);\n flexBuffer.used(verticesCount, indicesCount);\n \n let iData = this._renderData.iDatas[0];\n\n for (let i = 0, vid = 0, l = indicesCount; i < l; i += 6, vid += 4) {\n iData[i] = vid;\n iData[i + 1] = vid + 1;\n iData[i + 2] = vid + 2;\n iData[i + 3] = vid + 1;\n iData[i + 4] = vid + 3;\n iData[i + 5] = vid + 2;\n }\n\n _dataOffset = 0;\n }\n\n _quadsUpdated (comp) {\n _dataOffset = 0;\n\n let flexBuffer = this._renderData._flexBuffer;\n flexBuffer.used(this.verticesCount, this.indicesCount);\n }\n\n _getColor (comp) {\n return comp.node._color._val;\n }\n\n appendQuad(comp, texture, rect, rotated, x, y, scale, letter) {\n let renderData = this._renderData;\n let verts = renderData.vDatas[0],\n uintVerts = renderData.uintVDatas[0];\n\n this.verticesCount += 4;\n this.indicesCount = this.verticesCount / 2 * 3;\n\n let texw = texture.width,\n texh = texture.height,\n rectWidth = rect.width,\n rectHeight = rect.height,\n color = this._getColor(comp);\n\n let l, b, r, t;\n let floatsPerVert = this.floatsPerVert;\n // uvs\n let uvDataOffset = _dataOffset + this.uvOffset;\n if (!rotated) {\n l = (rect.x) / texw;\n r = (rect.x + rectWidth) / texw;\n b = (rect.y + rectHeight) / texh;\n t = (rect.y) / texh;\n\n verts[uvDataOffset] = l;\n verts[uvDataOffset + 1] = b;\n uvDataOffset += floatsPerVert;\n verts[uvDataOffset] = r;\n verts[uvDataOffset + 1] = b;\n uvDataOffset += floatsPerVert;\n verts[uvDataOffset] = l;\n verts[uvDataOffset + 1] = t;\n uvDataOffset += floatsPerVert;\n verts[uvDataOffset] = r;\n verts[uvDataOffset + 1] = t;\n } else {\n l = (rect.x) / texw;\n r = (rect.x + rectHeight) / texw;\n b = (rect.y + rectWidth) / texh;\n t = (rect.y) / texh;\n\n verts[uvDataOffset] = l;\n verts[uvDataOffset + 1] = t;\n uvDataOffset += floatsPerVert;\n verts[uvDataOffset] = l;\n verts[uvDataOffset + 1] = b;\n uvDataOffset += floatsPerVert;\n verts[uvDataOffset] = r;\n verts[uvDataOffset + 1] = t;\n uvDataOffset += floatsPerVert;\n verts[uvDataOffset] = r;\n verts[uvDataOffset + 1] = b;\n }\n\n\n // positions\n const retinaScale = this.getTTFTextureSizeScale();\n x /= retinaScale;\n y /= retinaScale;\n rectWidth /= retinaScale;\n rectHeight /= retinaScale;\n l = x;\n r = x + rectWidth * scale;\n b = y - rectHeight * scale;\n t = y;\n\n this.appendVerts(comp, _dataOffset, l, r, b, t, letter);\n\n // colors\n let colorOffset = _dataOffset + this.colorOffset;\n for (let i = 0; i < 4; i++) {\n uintVerts[colorOffset] = color;\n colorOffset += floatsPerVert;\n }\n\n _dataOffset += this.floatsPerVert * 4;\n }\n\n appendVerts(comp, offset, l, r, b, t, letter) {\n let local = this._local;\n let floatsPerVert = this.floatsPerVert;\n\n local[offset] = l;\n local[offset + 1] = b;\n\n offset += floatsPerVert;\n local[offset] = r;\n local[offset + 1] = b;\n\n offset += floatsPerVert;\n local[offset] = l;\n local[offset + 1] = t;\n\n offset += floatsPerVert;\n local[offset] = r;\n local[offset + 1] = t;\n }\n\n updateWorldVerts (comp) {\n let node = comp.node;\n\n let matrix = node._worldMatrix;\n let matrixm = matrix.m,\n a = matrixm[0], b = matrixm[1], c = matrixm[4], d = matrixm[5],\n tx = matrixm[12], ty = matrixm[13];\n\n let local = this._local;\n let world = this._renderData.vDatas[0];\n let floatsPerVert = this.floatsPerVert;\n for (let offset = 0; offset < local.length; offset += floatsPerVert) {\n let x = local[offset];\n let y = local[offset + 1];\n world[offset] = x * a + y * c + tx;\n world[offset+1] = x * b + y * d + ty;\n }\n }\n}\n\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst js = require('../../../../../platform/js');\nconst WebglBmfontAssembler = require('./bmfont');\nconst LetterFontAssembler = require('../../../../utils/label/letter-font');\nconst WHITE = cc.color(255, 255, 255, 255);\n\nexport default class WebglLetterFontAssembler extends LetterFontAssembler {\n createData (comp) {\n return comp.requestRenderData();\n }\n\n _getColor (comp) {\n WHITE._fastSetA(comp.node._color.a);\n return WHITE._val;\n }\n\n updateColor (comp) {\n let color = this._getColor(comp);\n\n super.updateColor(comp, color);\n }\n}\n\n","\nimport MaterialVariant from '../../../../../assets/material/material-variant';\n\nconst Label = require('../../../../../components/CCLabel');\nconst LabelShadow = require('../../../../../components/CCLabelShadow');\nconst LabelOutline = require('../../../../../components/CCLabelOutline');\nconst Material = require('../../../../../assets/material/CCMaterial');\n\n\n\nconst UPDATE_CONTENT = 1 << 0;\nconst UPDATE_FONT = 1 << 1;\nconst UPDATE_EFFECT = 1 << 2;\n\nexport default class NativeTTF {\n\n\n init(comp) {\n this.labelMaterial = null;\n this._label = this._renderComp = comp;\n renderer.CustomAssembler.prototype.ctor.call(this);\n comp.node._proxy.setAssembler(this);\n this._layout = new jsb.LabelRenderer();\n this._layout.init(comp);\n this._cfg = new DataView(this._layout._cfg);\n this._layoutInfo = new DataView(this._layout._layout);\n\n this._cfgFields = jsb.LabelRenderer._cfgFields;\n this._layoutFields = jsb.LabelRenderer._layoutFields;\n this._layout.bindNodeProxy(comp.node._proxy);\n this._bindMaterial(comp);\n }\n\n\n _setBufferFlag(dv, offset, size, type, flag){\n if ( type == \"int8\" && size == 1) {\n let v = dv.getInt8(offset);\n dv.setInt8(offset, flag | v);\n } else if(type == \"int32\" && size == 4) {\n let v = dv.getInt32(offset, jsb.__isLittleEndian__);\n dv.setInt32(offset, flag|v , jsb.__isLittleEndian__);\n } else {\n cc.warn(\"flag storage type should be int8/int32 only, type/size -> \" + type+\"/\"+size + \".\");\n }\n }\n\n _updateCfgFlag(flag) {\n let field = this._cfgFields.updateFlags;\n this._setBufferFlag(this._cfg, field.offset, field.size, field.type, flag);\n }\n\n _setBufferValue(dv, offset, size, type, value) {\n if(type == \"float\" && size == 4) {\n dv.setFloat32(offset, value, jsb.__isLittleEndian__);\n } else if(type == \"int32\" && size == 4) {\n dv.setInt32(offset, value, jsb.__isLittleEndian__);\n } else if (type == \"bool\" && size == 1) {\n dv.setInt8(offset, !!value ? 1 : 0, jsb.__isLittleEndian__);\n } else if(type == \"Color4B\" && size == 4) {\n dv.setUint8(offset, value.r);\n dv.setUint8(offset + 1, value.g);\n dv.setUint8(offset + 2, value.b);\n dv.setUint8(offset + 3, value.a);\n } else if(type == \"int8\" && size == 1) {\n dv.setUint8(offset, value);\n } else {\n cc.warn(\"dont know how to set value to buffer, type/size -> \" + type+\"/\"+size + \".\");\n }\n }\n\n _setFieldValue(dv, desc, field_name, value) {\n let field = desc[field_name];\n this._setBufferValue(dv, field.offset, field.size, field.type, value);\n }\n\n _getBufferValue(dv, offset, size, type) {\n if(type == \"float\" && size == 4) {\n return dv.getFloat32(offset, jsb.__isLittleEndian__);\n } else if(type == \"int32\" && size == 4) {\n return dv.getInt32(offset, jsb.__isLittleEndian__);\n } else if (type == \"bool\" && size == 1) {\n return dv.getInt8(offset, jsb.__isLittleEndian__) != 0;\n } else if(type == \"Color4B\" && size == 4) {\n let r = dv.getUint8(offset);\n let g = dv.getUint8(offset + 1);\n let b = dv.getUint8(offset + 2);\n let a = dv.getUint8(offset + 3);\n return {r, g, b, a};\n } else if(type == \"int8\" && size == 1) {\n return dv.getUint8(offset);\n } else {\n cc.warn(\"dont know how to get value from buffer, type/size -> \" + type+\"/\"+size + \".\");\n return undefined;\n }\n }\n\n _getFieldValue(dv, desc, field_name) {\n let field = desc[field_name];\n return this._getBufferValue(dv, field.offset, field.size, field.type);\n }\n\n _getLayoutValue(field_name) {\n return this._getFieldValue(this._layoutInfo, this._layoutFields, field_name);\n }\n\n _setLayoutValue(field_name, value) {\n return this._setFieldValue(this._layoutInfo, this._layoutFields, field_name, value);\n }\n\n _updateCfgFlag_Content() {\n this._updateCfgFlag(UPDATE_CONTENT);\n }\n\n _updateCfgFlag_Font() {\n this._updateCfgFlag(UPDATE_FONT);\n }\n \n _colorEqual(a, b) {\n return a.r == b.r && a.g == b.g && a.b == b.b && a.a == b.a;\n } \n\n _colorToObj(r, g, b, a) {\n return {r, g, b, a};\n }\n\n setString(str)\n {\n if(str != this._layout.string) {\n this._layout.string = str;\n this._updateCfgFlag_Content();\n }\n }\n\n setFontPath(path) {\n if(path != this._layout.fontPath) {\n this._layout.fontPath = path;\n this._updateCfgFlag_Font();\n }\n }\n\n setFontSize(fontSize, fontSizeRetina)\n {\n let oldfontsize = this._getFieldValue(this._cfg, this._cfgFields, \"fontSize\");\n if(oldfontsize != fontSize) {\n this._setFieldValue(this._cfg, this._cfgFields, \"fontSize\", fontSize);\n this._setFieldValue(this._cfg, this._cfgFields, \"fontSizeRetina\", fontSizeRetina);\n this._updateCfgFlag_Font();\n }\n }\n\n setOutline(outline) {\n let oldOutline = this._getLayoutValue(\"outlineSize\");\n if((oldOutline > 0) != (outline > 0)) {\n this._updateCfgFlag_Font();\n }\n if(oldOutline != outline) {\n this._updateCfgFlag_Content();\n this._setLayoutValue(\"outlineSize\", outline);\n }\n }\n\n setOutlineColor(color) {\n let oldColor = this._getLayoutValue( \"outlineColor\");\n if(!this._colorEqual(oldColor, color)) {\n this._setLayoutValue(\"outlineColor\", color);\n this._updateCfgFlag_Content();\n }\n }\n\n setLineHeight(lineHeight) {\n let oldLineHeight = this._getLayoutValue(\"lineHeight\");\n if(oldLineHeight != lineHeight) {\n this._setLayoutValue(\"lineHeight\", lineHeight);\n this._updateCfgFlag_Content();\n }\n }\n\n setOverFlow(overflow) {\n let oldValue = this._getLayoutValue(\"overflow\");\n if(oldValue != overflow) {\n this._setLayoutValue(\"overflow\", overflow);\n this._updateCfgFlag_Content();\n }\n }\n\n setEnableWrap(value) {\n let oldValue = this._getLayoutValue(\"wrap\");\n if(oldValue != value) {\n this._setLayoutValue(\"wrap\", value);\n this._updateCfgFlag_Content();\n }\n }\n\n setVerticalAlign(value) {\n let oldValue = this._getLayoutValue(\"valign\");\n if(oldValue != value) {\n this._setLayoutValue(\"valign\", value);\n this._updateCfgFlag_Content();\n }\n }\n\n setHorizontalAlign(value) {\n let oldValue = this._getLayoutValue(\"halign\");\n if(oldValue != value) {\n this._setLayoutValue(\"halign\", value);\n this._updateCfgFlag_Content();\n }\n }\n\n setContentSize(width, height) {\n let oldWidth = this._getLayoutValue(\"width\");\n let oldHeight = this._getLayoutValue(\"height\");\n if(oldWidth != width || oldHeight != height) {\n this._setLayoutValue(\"height\", height);\n this._setLayoutValue(\"width\", width);\n this._updateCfgFlag_Content();\n }\n }\n\n setAnchorPoint(x, y) {\n let oldX = this._getLayoutValue(\"anchorX\");\n let oldY = this._getLayoutValue(\"anchorY\");\n if(oldX != x || oldY != y) {\n this._setLayoutValue(\"anchorX\", x);\n this._setLayoutValue(\"anchorY\", y);\n this._updateCfgFlag_Content();\n }\n }\n\n setColor(color) {\n let oldColor = this._getLayoutValue(\"color\");\n if(!this._colorEqual(oldColor, color)) {\n this._setLayoutValue(\"color\", color);\n this._updateCfgFlag_Content();\n }\n }\n\n setShadow( x, y, blur) {\n let oldBlur = this._getLayoutValue(\"shadowBlur\");\n let oldX = this._getLayoutValue(\"shadowX\");\n let oldY = this._getLayoutValue(\"shadowY\");\n if((oldBlur > 0) != (blur > 0)) {\n this._updateCfgFlag_Font();\n }\n let updateContent = false;\n if(oldBlur != blur) {\n this._setLayoutValue(\"shadowBlur\", blur);\n updateContent = true;\n }\n if(oldX != x) {\n this._setLayoutValue(\"shadowX\", x);\n updateContent = true;\n }\n if(oldY != y) {\n this._setLayoutValue(\"shadowY\", y);\n updateContent = true;\n }\n if(updateContent) {\n this._updateCfgFlag_Content();\n }\n }\n\n setShadowColor(color) {\n let oldColor = this._getLayoutValue(\"shadowColor\");\n if(!this._colorEqual(oldColor, color)) {\n this._setLayoutValue(\"shadowColor\", color);\n this._updateCfgFlag_Content();\n }\n }\n\n setItalic(enabled) {\n let oldItalic = this._getLayoutValue(\"italic\");\n if(oldItalic!=enabled) {\n this._setLayoutValue(\"italic\", enabled);\n this._updateCfgFlag_Content();\n }\n }\n\n setBold(bold) {\n let oldBold = this._getLayoutValue(\"bold\");\n if(oldBold!=bold) {\n this._setLayoutValue(\"bold\", bold);\n this._updateCfgFlag_Content();\n this._updateCfgFlag_Font(); //enable sdf\n }\n }\n\n setUnderline(underline)\n {\n let oldBold = this._getLayoutValue(\"underline\");\n if(oldBold != underline) {\n this._setLayoutValue(\"underline\", underline);\n this._updateCfgFlag_Content();\n }\n }\n\n setSpacingX(x) {\n let oldX = this._getLayoutValue(\"spaceX\");\n if(oldX != x && typeof x == \"number\" && ! isNaN(x)) {\n this._setLayoutValue(\"spaceX\", x);\n this._updateCfgFlag_Content();\n }\n }\n\n updateRenderData(comp) {\n\n if (!comp._vertsDirty) return;\n\n if (comp.font && comp.font.nativeUrl) {\n this.setFontPath(cc.assetManager.cacheManager.getCache(comp.font.nativeUrl) || comp.font.nativeUrl);\n }\n let layout = this._layout;\n let c = comp.node.color;\n let node = comp.node;\n let retinaSize = comp.fontSize;\n\n this.setString(comp.string);\n this.setFontSize(comp.fontSize, retinaSize / 72 * comp.fontSize);\n this.setLineHeight(comp.lineHeight);\n this.setEnableWrap(comp.enableWrapText);\n this.setItalic(comp.enableItalic);\n this.setUnderline(comp.enableUnderline);\n this.setBold(comp.enableBold);\n this.setOverFlow(comp.overflow);\n this.setVerticalAlign(comp.verticalAlign);\n this.setHorizontalAlign(comp.horizontalAlign);\n this.setSpacingX(comp.spacingX);\n this.setContentSize(node.getContentSize().width, node.getContentSize().height);\n this.setAnchorPoint(node.anchorX, node.anchorY);\n this.setColor(this._colorToObj(c.getR(), c.getG(), c.getB(), Math.ceil(c.getA() * node.opacity / 255)));\n\n\n let shadow = node.getComponent(cc.LabelShadow);\n if (shadow && shadow.enabled) {\n let shadowColor = shadow.color;\n this.setShadow(shadow.offset.x, shadow.offset.y, shadow.blur);\n this.setShadowColor(this._colorToObj(shadowColor.getR(), shadowColor.getG(), shadowColor.getB(), Math.ceil(shadowColor.getA() * node.opacity / 255)));\n } else {\n this.setShadow(0, 0, -1);\n }\n\n this._updateTTFMaterial(comp);\n \n layout.render();\n //comp._vertsDirty = false;\n }\n\n _bindMaterial(comp) {\n let material = this.labelMaterial;\n if(!material) {\n material = MaterialVariant.createWithBuiltin(\"2d-label\", comp);\n this.labelMaterial = material;\n }\n return material;\n }\n\n _updateTTFMaterial(comp) {\n let material = this._bindMaterial(comp)\n let node = this._label.node;\n let layout = this._layout;\n let outline = node.getComponent(cc.LabelOutline);\n let outlineSize = 0;\n if (outline && outline.enabled && outline.width > 0) {\n outlineSize = Math.max(Math.min(outline.width / 10, 0.4), 0.1);\n let c = outline.color;\n this.setOutlineColor(this._colorToObj(c.getR(), c.getG(), c.getB(), Math.ceil(c.getA() * node.opacity / 255)));\n }\n this.setOutline(outlineSize);\n material.define('CC_USE_MODEL', true);\n material.define('USE_TEXTURE_ALPHAONLY', true);\n material.define('USE_SDF', outlineSize > 0.0 || comp.enableBold );\n material.define('USE_SDF_EXTEND', comp.enableBold ? 1 : 0);\n if (material.getDefine('CC_SUPPORT_standard_derivatives') !== undefined && cc.sys.glExtension('OES_standard_derivatives')) {\n material.define('CC_SUPPORT_standard_derivatives', true);\n }\n layout.setEffect(material.effect._nativeObj);\n }\n\n fillBuffers (comp, renderer) {\n this._layout.render();\n }\n getVfmt() {\n }\n}","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport TTFAssembler from '../../../../utils/label/ttf';\n\nconst LabelShadow = require('../../../../../components/CCLabelShadow');\nconst WHITE = cc.color(255, 255, 255, 255);\n\nexport default class WebglTTFAssembler extends TTFAssembler {\n updateUVs (comp) {\n let verts = this._renderData.vDatas[0];\n let uv = comp._frame.uv;\n let uvOffset = this.uvOffset;\n let floatsPerVert = this.floatsPerVert;\n for (let i = 0; i < 4; i++) {\n let srcOffset = i * 2;\n let dstOffset = floatsPerVert * i + uvOffset;\n verts[dstOffset] = uv[srcOffset];\n verts[dstOffset + 1] = uv[srcOffset + 1];\n }\n }\n\n updateColor (comp) {\n WHITE._fastSetA(comp.node._color.a);\n let color = WHITE._val;\n\n super.updateColor(comp, color);\n }\n\n updateVerts(comp) {\n const scale = this.getTTFTextureSizeScale();\n let node = comp.node,\n canvasWidth = comp._ttfTexture.width / scale,\n canvasHeight = comp._ttfTexture.height / scale,\n appx = node.anchorX * node.width,\n appy = node.anchorY * node.height;\n\n let shadow = LabelShadow && comp.getComponent(LabelShadow);\n if (shadow && shadow._enabled) {\n // adapt size changed caused by shadow\n let offsetX = (canvasWidth - node.width) / 2;\n let offsetY = (canvasHeight - node.height) / 2;\n\n let shadowOffset = shadow.offset;\n if (-shadowOffset.x > offsetX) {\n // expand to left\n appx += (canvasWidth - node.width);\n }\n else if (offsetX > shadowOffset.x) {\n // expand to left and right\n appx += (offsetX - shadowOffset.x);\n }\n else {\n // expand to right, no need to change render position\n }\n\n if (-shadowOffset.y > offsetY) {\n // expand to top\n appy += (canvasHeight - node.height);\n }\n else if (offsetY > shadowOffset.y) {\n // expand to top and bottom\n appy += (offsetY - shadowOffset.y);\n }\n else {\n // expand to bottom, no need to change render position\n }\n }\n\n let local = this._local;\n local[0] = -appx;\n local[1] = -appy;\n local[2] = canvasWidth - appx;\n local[3] = canvasHeight - appy;\n\n this.updateUVs(comp);\n this.updateWorldVerts(comp);\n }\n}\n\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport Assembler from '../../../assembler';\nimport Label from '../../../../components/CCLabel';\n\nimport TTF from './2d/ttf';\nimport Bmfont from './2d/bmfont';\nimport Letter from './2d/letter';\n\nimport TTF3D from './3d/ttf';\nimport Bmfont3D from './3d/bmfont';\nimport Letter3D from './3d/letter';\n\nimport TTFMulti from './2d-multi/ttf';\nimport BmfontMulti from './2d-multi/bmfont';\n\nlet NativeTTF = undefined;\nif(CC_JSB) {\n NativeTTF = require(\"./2d/nativeTTF\");\n}\n\nLabel._canvasPool = {\n pool: [],\n get () {\n let data = this.pool.pop();\n\n if (!data) {\n let canvas = document.createElement(\"canvas\");\n let context = canvas.getContext(\"2d\");\n data = {\n canvas: canvas,\n context: context\n }\n\n // default text info\n context.textBaseline = 'alphabetic';\n }\n\n return data;\n },\n put (canvas) {\n if (this.pool.length >= 32) {\n return;\n }\n this.pool.push(canvas);\n }\n};\n\nAssembler.register(cc.Label, {\n getConstructor(label) {\n let is3DNode = label.node.is3DNode;\n const material = label.getMaterials()[0];\n let isMultiMaterial = material && material.material.isMultiSupport();\n\n let ctor = is3DNode ? TTF3D : (isMultiMaterial ? TTFMulti : TTF);\n \n if (label.font instanceof cc.BitmapFont) {\n ctor = is3DNode ? Bmfont3D : (isMultiMaterial ? BmfontMulti : Bmfont);\n } else if (label.cacheMode === Label.CacheMode.CHAR) {\n\n if(CC_JSB && !is3DNode && !!jsb.LabelRenderer && label.font instanceof cc.TTFFont && label._useNativeTTF()){\n ctor = NativeTTF;\n } else if (cc.sys.platform === cc.sys.WECHAT_GAME_SUB) {\n cc.warn('sorry, subdomain does not support CHAR mode currently!');\n } else {\n ctor = is3DNode ? Letter3D : Letter;\n } \n }\n\n return ctor;\n },\n\n TTF,\n Bmfont,\n Letter,\n\n TTF3D,\n Bmfont3D,\n Letter3D,\n NativeTTF,\n\n TTFMulti,\n BmfontMulti\n});\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport MotionStreakAssembler from \"./motion-streak\";\nimport { vfmtPosUvColorTexId } from '../../webgl/vertex-format';\nconst MotionStreak = require('../../../components/CCMotionStreak');\nconst RenderFlow = require('../../render-flow');\n\nfunction Point(point, dir) {\n this.point = point || cc.v2();\n this.dir = dir || cc.v2();\n this.distance = 0;\n this.time = 0;\n}\n\nPoint.prototype.setPoint = function (x, y) {\n this.point.x = x;\n this.point.y = y;\n};\n\nPoint.prototype.setDir = function (x, y) {\n this.dir.x = x;\n this.dir.y = y;\n};\n\nlet _normal = cc.v2();\nlet _vec2 = cc.v2();\n\nfunction normal(out, dir) {\n //get perpendicular\n out.x = -dir.y;\n out.y = dir.x;\n return out\n}\n\nexport default class MultiMotionStreakAssembler extends MotionStreakAssembler {\n initData() {\n this._renderData.createFlexData(0, 16, (16 - 2) * 3, this.getVfmt());\n }\n\n getVfmt() {\n return vfmtPosUvColorTexId;\n }\n\n getBuffer() {\n return cc.renderer._handle.getBuffer(\"mesh\", this.getVfmt());\n }\n\n update(comp, dt) {\n if (CC_EDITOR && !comp.preview) return;\n\n let stroke = comp._stroke / 2;\n\n let node = comp.node;\n let matrix = node._worldMatrix.m;\n let tx = matrix[12], ty = matrix[13];\n\n let points = comp._points;\n\n let cur;\n if (points.length > 1) {\n let difx = points[0].point.x - tx;\n let dify = points[0].point.y - ty;\n if ((difx * difx + dify * dify) < comp.minSeg) {\n cur = points[0];\n }\n }\n\n if (!cur) {\n cur = new Point();\n points.splice(0, 0, cur);\n }\n\n cur.setPoint(tx, ty);\n cur.time = comp._fadeTime + dt;\n\n let verticesCount = 0;\n let indicesCount = 0;\n\n if (points.length < 2) {\n return;\n }\n\n let color = comp._color,\n cr = color.r, cg = color.g, cb = color.b, ca = color.a;\n\n let prev = points[1];\n prev.distance = cur.point.sub(prev.point, _vec2).mag();\n _vec2.normalizeSelf();\n prev.setDir(_vec2.x, _vec2.y);\n cur.setDir(_vec2.x, _vec2.y);\n\n let flexBuffer = this._renderData._flexBuffer;\n flexBuffer.reserve(points.length * 2, (points.length - 1) * 6);\n let vData = flexBuffer.vData;\n let uintVData = flexBuffer.uintVData;\n let vertsOffset = 6;\n\n let fadeTime = comp._fadeTime;\n let findLast = false;\n for (let i = points.length - 1; i >= 0; i--) {\n let p = points[i];\n let point = p.point;\n let dir = p.dir;\n p.time -= dt;\n\n if (p.time < 0) {\n points.splice(i, 1);\n continue;\n }\n\n let progress = p.time / fadeTime;\n\n let next = points[i - 1];\n if (!findLast) {\n if (!next) {\n points.splice(i, 1);\n continue;\n }\n\n point.x = next.point.x - dir.x * progress;\n point.y = next.point.y - dir.y * progress;\n }\n findLast = true;\n\n normal(_normal, dir);\n\n\n let da = progress * ca;\n let c = ((da << 24) >>> 0) + (cb << 16) + (cg << 8) + cr;\n\n let offset = verticesCount * vertsOffset;\n\n vData[offset] = point.x + _normal.x * stroke;\n vData[offset + 1] = point.y + _normal.y * stroke;\n vData[offset + 2] = 1;\n vData[offset + 3] = progress;\n uintVData[offset + 4] = c;\n vData[offset + 5] = comp._texId;\n\n offset += vertsOffset;\n\n vData[offset] = point.x - _normal.x * stroke;\n vData[offset + 1] = point.y - _normal.y * stroke;\n vData[offset + 2] = 0;\n vData[offset + 3] = progress;\n uintVData[offset + 4] = c;\n vData[offset + 5] = comp._texId;\n\n verticesCount += 2;\n }\n\n indicesCount = verticesCount <= 2 ? 0 : (verticesCount - 2) * 3;\n\n flexBuffer.used(verticesCount, indicesCount);\n }\n\n fillBuffers(comp, renderer) {\n let { vData, usedVertices, usedIndices, usedVerticesFloats } = this._renderData._flexBuffer;\n\n let buffer = this.getBuffer(renderer);\n let offsetInfo = buffer.request(usedVertices, usedIndices);\n\n // buffer data may be realloc, need get reference after request.\n\n // fill vertices\n let vertexOffset = offsetInfo.byteOffset >> 2,\n vbuf = buffer._vData;\n\n if (vData.length + vertexOffset > vbuf.length) {\n vbuf.set(vData.subarray(0, usedVerticesFloats), vertexOffset);\n }\n else {\n vbuf.set(vData, vertexOffset);\n }\n\n // fill indices\n let ibuf = buffer._iData,\n indiceOffset = offsetInfo.indiceOffset,\n vertexId = offsetInfo.vertexOffset;\n\n // index buffer\n for (let i = 0, l = usedVertices; i < l; i += 2) {\n let start = vertexId + i;\n ibuf[indiceOffset++] = start;\n ibuf[indiceOffset++] = start + 2;\n ibuf[indiceOffset++] = start + 1;\n ibuf[indiceOffset++] = start + 1;\n ibuf[indiceOffset++] = start + 2;\n ibuf[indiceOffset++] = start + 3;\n }\n\n comp.node._renderFlag |= RenderFlow.FLAG_UPDATE_RENDER_DATA;\n }\n\n}\n\nMotionStreakAssembler.register(MotionStreak, {\n getConstructor(comp) {\n const material = comp.getMaterials()[0];\n let isMultiMaterial = material && material.material.isMultiSupport();\n return isMultiMaterial ? MultiMotionStreakAssembler : MotionStreakAssembler;\n },\n\n MotionStreakAssembler,\n MultiMotionStreakAssembler\n});\n\nMultiMotionStreakAssembler.prototype.floatsPerVert = 6;\nMultiMotionStreakAssembler.prototype.texIdOffset = 5;\nMultiMotionStreakAssembler.prototype.isMulti = true;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport Assembler2D from '../../assembler-2d';\n\nconst RenderFlow = require('../../render-flow');\n\nfunction Point (point, dir) {\n this.point = point || cc.v2();\n this.dir = dir || cc.v2();\n this.distance = 0;\n this.time = 0;\n}\n\nPoint.prototype.setPoint = function (x, y) {\n this.point.x = x;\n this.point.y = y;\n};\n\nPoint.prototype.setDir = function (x, y) {\n this.dir.x = x;\n this.dir.y = y;\n};\n\nlet _tangent = cc.v2();\nlet _miter = cc.v2();\nlet _normal = cc.v2();\nlet _vec2 = cc.v2();\n\nfunction normal (out, dir) {\n //get perpendicular\n out.x = -dir.y;\n out.y = dir.x;\n return out\n}\n\nfunction computeMiter (miter, lineA, lineB, halfThick, maxMultiple) {\n //get tangent line\n lineA.add(lineB, _tangent);\n _tangent.normalizeSelf();\n\n //get miter as a unit vector\n miter.x = -_tangent.y;\n miter.y = _tangent.x;\n _vec2.x = -lineA.y; \n _vec2.y = lineA.x;\n\n //get the necessary length of our miter\n let multiple = 1 / miter.dot(_vec2);\n if (maxMultiple) {\n multiple = Math.min(multiple, maxMultiple);\n }\n return halfThick * multiple;\n}\n\nexport default class MotionStreakAssembler extends Assembler2D {\n initData () {\n this._renderData.createFlexData(0, 16, (16 - 2) * 3);\n }\n\n update (comp, dt) {\n if (CC_EDITOR && !comp.preview) return;\n\n let stroke = comp._stroke / 2;\n\n let node = comp.node;\n let matrix = node._worldMatrix.m;\n let tx = matrix[12], ty = matrix[13];\n\n let points = comp._points;\n\n let cur;\n if (points.length > 1) {\n let difx = points[0].point.x - tx;\n let dify = points[0].point.y - ty;\n if ((difx*difx + dify*dify) < comp.minSeg) {\n cur = points[0];\n }\n }\n\n if (!cur) {\n cur = new Point();\n points.splice(0, 0, cur);\n }\n\n cur.setPoint(tx, ty);\n cur.time = comp._fadeTime + dt;\n \n let verticesCount = 0;\n let indicesCount = 0;\n\n if (points.length < 2) {\n return;\n }\n\n let color = comp._color,\n cr = color.r, cg = color.g, cb = color.b, ca = color.a;\n\n let prev = points[1];\n prev.distance = cur.point.sub(prev.point, _vec2).mag();\n _vec2.normalizeSelf();\n prev.setDir(_vec2.x, _vec2.y);\n cur.setDir(_vec2.x, _vec2.y);\n\n let flexBuffer = this._renderData._flexBuffer;\n flexBuffer.reserve(points.length*2, (points.length-1)*6);\n let vData = flexBuffer.vData;\n let uintVData = flexBuffer.uintVData;\n let vertsOffset = 5;\n\n let fadeTime = comp._fadeTime;\n let findLast = false;\n for (let i = points.length - 1; i >=0 ; i--) {\n let p = points[i];\n let point = p.point;\n let dir = p.dir;\n p.time -= dt;\n \n if (p.time < 0) {\n points.splice(i, 1);\n continue;\n }\n\n let progress = p.time / fadeTime;\n\n let next = points[i - 1];\n if (!findLast) {\n if (!next) {\n points.splice(i, 1);\n continue;\n }\n \n point.x = next.point.x - dir.x * progress;\n point.y = next.point.y - dir.y * progress;\n }\n findLast = true;\n\n normal(_normal, dir);\n\n \n let da = progress*ca;\n let c = ((da<<24) >>> 0) + (cb<<16) + (cg<<8) + cr;\n\n let offset = verticesCount * vertsOffset;\n\n vData[offset] = point.x + _normal.x * stroke;\n vData[offset + 1] = point.y + _normal.y * stroke;\n vData[offset + 2] = 1;\n vData[offset + 3] = progress;\n uintVData[offset + 4] = c;\n \n offset += vertsOffset;\n\n vData[offset] = point.x - _normal.x * stroke;\n vData[offset + 1] = point.y - _normal.y * stroke;\n vData[offset + 2] = 0;\n vData[offset + 3] = progress;\n uintVData[offset + 4] = c;\n \n verticesCount += 2;\n }\n\n indicesCount = verticesCount <= 2 ? 0 : (verticesCount - 2)*3;\n\n flexBuffer.used(verticesCount, indicesCount);\n }\n\n fillBuffers (comp, renderer) {\n let { vData, usedVertices, usedIndices, usedVerticesFloats } = this._renderData._flexBuffer;\n\n let buffer = renderer._meshBuffer;\n let offsetInfo = buffer.request(usedVertices, usedIndices);\n\n // buffer data may be realloc, need get reference after request.\n\n // fill vertices\n let vertexOffset = offsetInfo.byteOffset >> 2,\n vbuf = buffer._vData;\n\n if (vData.length + vertexOffset > vbuf.length) {\n vbuf.set(vData.subarray(0, usedVerticesFloats), vertexOffset);\n }\n else {\n vbuf.set(vData, vertexOffset);\n }\n\n // fill indices\n let ibuf = buffer._iData,\n indiceOffset = offsetInfo.indiceOffset,\n vertexId = offsetInfo.vertexOffset;\n\n // index buffer\n for (let i = 0, l = usedVertices; i < l; i += 2) {\n let start = vertexId + i;\n ibuf[indiceOffset++] = start;\n ibuf[indiceOffset++] = start + 2;\n ibuf[indiceOffset++] = start + 1;\n ibuf[indiceOffset++] = start + 1;\n ibuf[indiceOffset++] = start + 2;\n ibuf[indiceOffset++] = start + 3;\n }\n\n comp.node._renderFlag |= RenderFlow.FLAG_UPDATE_RENDER_DATA;\n }\n}\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport { vfmtPosUvColorTexId } from '../../../../webgl/vertex-format';\nimport BarFilledAssembler from '../2d/bar-filled';\n\nexport default class BarFilledAssemblerMulti extends BarFilledAssembler {\n initData() {\n let data = this._renderData;\n data.createFlexData(0, this.verticesCount, this.indicesCount, this.getVfmt());\n const indices = data.iDatas[0];\n data.initQuadIndices(indices);\n }\n\n getVfmt() {\n return vfmtPosUvColorTexId;\n }\n\n getBuffer() {\n return cc.renderer._handle.getBuffer(\"mesh\", this.getVfmt());\n }\n\n updateRenderData (sprite) {\n super.updateRenderData(sprite);\n\n if (sprite._texIdDirty) {\n sprite._updateMultiTexId(sprite.getMaterial(0), sprite._spriteFrame._texture);\n if (sprite._texIdDirty) {\n this.updateTexId(sprite);\n sprite._texIdDirty = false;\n }\n }\n }\n\n updateRenderDataForSwitchMaterial(sprite) {\n if (sprite._vertsDirty) {\n let fillStart = sprite._fillStart;\n let fillRange = sprite._fillRange;\n\n if (fillRange < 0) {\n fillStart += fillRange;\n fillRange = -fillRange;\n }\n\n fillRange = fillStart + fillRange;\n\n fillStart = fillStart > 1.0 ? 1.0 : fillStart;\n fillStart = fillStart < 0.0 ? 0.0 : fillStart;\n\n fillRange = fillRange > 1.0 ? 1.0 : fillRange;\n fillRange = fillRange < 0.0 ? 0.0 : fillRange;\n fillRange = fillRange - fillStart;\n fillRange = fillRange < 0 ? 0 : fillRange;\n\n let fillEnd = fillStart + fillRange;\n fillEnd = fillEnd > 1 ? 1 : fillEnd;\n\n this.updateUVs(sprite, fillStart, fillEnd);\n this.updateVerts(sprite, fillStart, fillEnd);\n\n sprite._vertsDirty = false;\n }\n\n if (sprite._texIdDirty) {\n sprite._updateMultiTexId(sprite.getMaterial(0), sprite._spriteFrame._texture);\n if (sprite._texIdDirty) {\n this.updateTexId(sprite);\n sprite._texIdDirty = false;\n }\n }\n }\n\n}\n\nBarFilledAssemblerMulti.prototype.floatsPerVert = 6;\nBarFilledAssemblerMulti.prototype.texIdOffset = 5;\nBarFilledAssemblerMulti.prototype.isMulti = true;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport { vfmtPosUvColorTexId } from '../../../../webgl/vertex-format';\nimport MeshSpriteAssembler from '../2d/mesh';\n\nexport default class MultiMeshSpriteAssembler extends MeshSpriteAssembler {\n getVfmt() {\n return vfmtPosUvColorTexId;\n }\n\n getBuffer() {\n return cc.renderer._handle.getBuffer(\"mesh\", this.getVfmt());\n }\n\n updateRenderData(sprite) {\n let frame = sprite.spriteFrame;\n\n super.updateRenderData(sprite);\n\n if (frame) {\n if (sprite._texIdDirty) {\n sprite._updateMultiTexId(sprite.getMaterial(0), frame._texture);\n }\n\n // 不进行 Dirty 判断,Mesh 可能会变化,但是纹理不会变\n this.updateTexId(sprite);\n sprite._texIdDirty = false;\n }\n }\n\n updateRenderDataForSwitchMaterial(sprite) {\n let frame = sprite.spriteFrame;\n\n if (frame) {\n let vertices = frame.vertices;\n if (vertices) {\n this.verticesCount = vertices.x.length;\n this.indicesCount = vertices.triangles.length;\n\n let renderData = this._renderData;\n let flexBuffer = renderData._flexBuffer;\n if (flexBuffer.reserve(this.verticesCount, this.indicesCount)) {\n this.updateColor(sprite);\n sprite._vertsDirty = true;\n }\n flexBuffer.used(this.verticesCount, this.indicesCount);\n\n this.updateIndices(vertices.triangles);\n\n if (sprite._vertsDirty) {\n this.updateUVs(sprite);\n this.updateVerts(sprite);\n this.updateWorldVerts(sprite);\n sprite._vertsDirty = false;\n }\n }\n }\n\n if (sprite._texIdDirty) {\n sprite._updateMultiTexId(sprite.getMaterial(0), frame._texture);\n }\n\n // 不进行 Dirty 判断,Mesh 可能会变化,但是纹理不会变\n this.updateTexId(sprite);\n sprite._texIdDirty = false;\n }\n}\n\nMultiMeshSpriteAssembler.prototype.floatsPerVert = 6;\nMultiMeshSpriteAssembler.prototype.texIdOffset = 5;\nMultiMeshSpriteAssembler.prototype.isMulti = true;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport { vfmtPosUvColorTexId } from '../../../../webgl/vertex-format';\nimport RadialFilledAssembler from '../2d/radial-filled';\n\nexport default class MultiRadialFilledAssembler extends RadialFilledAssembler {\n initData (sprite) {\n this._renderData.createFlexData(0, 4, 6, this.getVfmt());\n this.updateIndices();\n }\n\n getVfmt() {\n return vfmtPosUvColorTexId;\n }\n\n getBuffer() {\n return cc.renderer._handle.getBuffer(\"mesh\", this.getVfmt());\n }\n\n updateRenderData (sprite) {\n super.updateRenderData(sprite);\n\n if (sprite._texIdDirty) {\n sprite._updateMultiTexId(sprite.getMaterial(0), sprite.spriteFrame._texture);\n }\n\n // 不进行 Dirty 判断,Mesh 可能会变化,但是纹理不会变\n this.updateTexId(sprite);\n sprite._texIdDirty = false;\n }\n\n updateRenderDataForSwitchMaterial(sprite) {\n this._updateRenderData(sprite);\n\n if (sprite._texIdDirty) {\n sprite._updateMultiTexId(sprite.getMaterial(0), sprite.spriteFrame._texture);\n }\n\n // 不进行 Dirty 判断,Mesh 可能会变化,但是纹理不会变\n this.updateTexId(sprite);\n sprite._texIdDirty = false;\n }\n}\n\nMultiRadialFilledAssembler.prototype.floatsPerVert = 6;\nMultiRadialFilledAssembler.prototype.texIdOffset = 5;\nMultiRadialFilledAssembler.prototype.isMulti = true;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport { vfmtPosUvColorTexId } from '../../../../webgl/vertex-format';\nimport SimpleSpriteAssembler from '../2d/simple';\n\nexport default class MultiSimpleSpriteAssembler extends SimpleSpriteAssembler {\n initData() {\n let data = this._renderData;\n data.createFlexData(0, this.verticesCount, this.indicesCount, this.getVfmt());\n const indices = data.iDatas[0];\n data.initQuadIndices(indices);\n }\n\n getVfmt() {\n return vfmtPosUvColorTexId;\n }\n\n getBuffer() {\n return cc.renderer._handle.getBuffer(\"mesh\", this.getVfmt());\n }\n\n updateRenderData (sprite) {\n super.updateRenderData(sprite);\n\n if (sprite._texIdDirty) {\n sprite._updateMultiTexId(sprite.getMaterial(0), sprite._spriteFrame._texture);\n if (sprite._texIdDirty) {\n this.updateTexId(sprite);\n sprite._texIdDirty = false;\n }\n }\n }\n\n updateRenderDataForSwitchMaterial(sprite) {\n if (sprite._vertsDirty) {\n this.updateUVs(sprite);\n this.updateVerts(sprite);\n sprite._vertsDirty = false;\n }\n\n if (sprite._texIdDirty) {\n sprite._updateMultiTexId(sprite.getMaterial(0), sprite._spriteFrame._texture);\n if (sprite._texIdDirty) {\n this.updateTexId(sprite);\n sprite._texIdDirty = false;\n }\n }\n }\n}\n\nMultiSimpleSpriteAssembler.prototype.floatsPerVert = 6;\nMultiSimpleSpriteAssembler.prototype.texIdOffset = 5;\nMultiSimpleSpriteAssembler.prototype.isMulti = true;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos.com\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport { vfmtPosUvColorTexId } from '../../../../webgl/vertex-format';\nimport SlicedAssembler from '../2d/sliced';\n\nexport default class MultiSlicedAssembler extends SlicedAssembler {\n initData (sprite) {\n if (this._renderData.meshCount > 0) return;\n this._renderData.createFlexData(0, this.verticesCount, this.indicesCount, this.getVfmt());\n\n let indices = this._renderData.iDatas[0];\n let indexOffset = 0;\n for (let r = 0; r < 3; ++r) {\n for (let c = 0; c < 3; ++c) {\n let start = r * 4 + c;\n indices[indexOffset++] = start;\n indices[indexOffset++] = start + 1;\n indices[indexOffset++] = start + 4;\n indices[indexOffset++] = start + 1;\n indices[indexOffset++] = start + 5;\n indices[indexOffset++] = start + 4;\n }\n }\n }\n\n getVfmt() {\n return vfmtPosUvColorTexId;\n }\n\n getBuffer() {\n return cc.renderer._handle.getBuffer(\"mesh\", this.getVfmt());\n }\n\n updateRenderData (sprite) {\n super.updateRenderData(sprite);\n\n if (sprite._texIdDirty) {\n sprite._updateMultiTexId(sprite.getMaterial(0), sprite._spriteFrame._texture);\n if (sprite._texIdDirty) {\n this.updateTexId(sprite);\n sprite._texIdDirty = false;\n }\n }\n }\n\n updateRenderDataForSwitchMaterial(sprite) {\n if (sprite._vertsDirty) {\n this.updateUVs(sprite);\n this.updateVerts(sprite);\n sprite._vertsDirty = false;\n }\n\n if (sprite._texIdDirty) {\n sprite._updateMultiTexId(sprite.getMaterial(0), sprite._spriteFrame._texture);\n if (sprite._texIdDirty) {\n this.updateTexId(sprite);\n sprite._texIdDirty = false;\n }\n }\n }\n\n}\n\nMultiSlicedAssembler.prototype.floatsPerVert = 6;\nMultiSlicedAssembler.prototype.texIdOffset = 5;\nMultiSlicedAssembler.prototype.isMulti = true;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport { vfmtPosUvColorTexId } from '../../../../webgl/vertex-format';\nimport TiledAssembler from '../2d/tiled';\n\nexport default class MultiTiledAssembler extends TiledAssembler {\n getVfmt() {\n return vfmtPosUvColorTexId;\n }\n\n getBuffer() {\n return cc.renderer._handle.getBuffer(\"mesh\", this.getVfmt());\n }\n\n updateRenderData(sprite) {\n super.updateRenderData(sprite);\n\n if (sprite._texIdDirty) {\n sprite._updateMultiTexId(sprite.getMaterial(0), sprite.spriteFrame._texture);\n }\n\n // 不进行 Dirty 判断,Mesh 可能会变化,但是纹理不会变\n this.updateTexId(sprite);\n sprite._texIdDirty = false;\n }\n\n updateRenderDataForSwitchMaterial(sprite) {\n let frame = sprite._spriteFrame;\n let node = sprite.node;\n\n let contentWidth = this.contentWidth = Math.abs(node.width);\n let contentHeight = this.contentHeight = Math.abs(node.height);\n let rect = frame._rect;\n let leftWidth = frame.insetLeft, rightWidth = frame.insetRight, centerWidth = rect.width - leftWidth - rightWidth,\n topHeight = frame.insetTop, bottomHeight = frame.insetBottom, centerHeight = rect.height - topHeight - bottomHeight;\n this.sizableWidth = contentWidth - leftWidth - rightWidth;\n this.sizableHeight = contentHeight - topHeight - bottomHeight;\n this.sizableWidth = this.sizableWidth > 0 ? this.sizableWidth : 0;\n this.sizableHeight = this.sizableHeight > 0 ? this.sizableHeight : 0;\n let hRepeat = this.hRepeat = centerWidth === 0 ? this.sizableWidth : this.sizableWidth / centerWidth;\n let vRepeat = this.vRepeat = centerHeight === 0 ? this.sizableHeight : this.sizableHeight / centerHeight;\n let row = this.row = Math.ceil(vRepeat + 2);\n let col = this.col = Math.ceil(hRepeat + 2);\n\n // update data property\n let count = row * col;\n this.verticesCount = count * 4;\n this.indicesCount = count * 6;\n\n let renderData = this._renderData;\n let flexBuffer = renderData._flexBuffer;\n if (flexBuffer.reserve(this.verticesCount, this.indicesCount)) {\n this._updateIndices();\n this.updateColor(sprite);\n }\n flexBuffer.used(this.verticesCount, this.indicesCount);\n\n if (sprite._vertsDirty) {\n this.updateUVs(sprite);\n this.updateVerts(sprite);\n sprite._vertsDirty = false;\n }\n\n if (sprite._texIdDirty) {\n sprite._updateMultiTexId(sprite.getMaterial(0), sprite.spriteFrame._texture);\n }\n\n // 不进行 Dirty 判断,Mesh 可能会变化,但是纹理不会变\n this.updateTexId(sprite);\n sprite._texIdDirty = false;\n }\n}\n\nMultiTiledAssembler.prototype.floatsPerVert = 6;\nMultiTiledAssembler.prototype.texIdOffset = 5;\nMultiTiledAssembler.prototype.isMulti = true;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport Assembler2D from '../../../../assembler-2d';\n\nconst Sprite = require('../../../../../components/CCSprite');\nconst FillType = Sprite.FillType;\n\nexport default class BarFilledAssembler extends Assembler2D {\n updateRenderData (sprite) {\n let frame = sprite._spriteFrame;\n const assemblerChanged = this.packDynamicAtlasAndCheckMaterial(sprite, frame);\n\n // 打包到动态图集时可能会切换 Assembler\n if (!assemblerChanged) {\n if (sprite._vertsDirty) {\n let fillStart = sprite._fillStart;\n let fillRange = sprite._fillRange;\n\n if (fillRange < 0) {\n fillStart += fillRange;\n fillRange = -fillRange;\n }\n\n fillRange = fillStart + fillRange;\n\n fillStart = fillStart > 1.0 ? 1.0 : fillStart;\n fillStart = fillStart < 0.0 ? 0.0 : fillStart;\n\n fillRange = fillRange > 1.0 ? 1.0 : fillRange;\n fillRange = fillRange < 0.0 ? 0.0 : fillRange;\n fillRange = fillRange - fillStart;\n fillRange = fillRange < 0 ? 0 : fillRange;\n\n let fillEnd = fillStart + fillRange;\n fillEnd = fillEnd > 1 ? 1 : fillEnd;\n\n this.updateUVs(sprite, fillStart, fillEnd);\n this.updateVerts(sprite, fillStart, fillEnd);\n\n sprite._vertsDirty = false;\n }\n }\n }\n\n updateUVs (sprite, fillStart, fillEnd) {\n let spriteFrame = sprite._spriteFrame;\n\n //build uvs\n let atlasWidth = spriteFrame._texture.width;\n let atlasHeight = spriteFrame._texture.height;\n let textureRect = spriteFrame._rect;\n //uv computation should take spritesheet into account.\n let ul, vb, ur, vt;\n let quadUV0, quadUV1, quadUV2, quadUV3, quadUV4, quadUV5, quadUV6, quadUV7;\n if (spriteFrame._rotated) {\n ul = (textureRect.x) / atlasWidth;\n vb = (textureRect.y + textureRect.width) / atlasHeight;\n ur = (textureRect.x + textureRect.height) / atlasWidth;\n vt = (textureRect.y) / atlasHeight;\n\n quadUV0 = quadUV2 = ul;\n quadUV4 = quadUV6 = ur;\n quadUV3 = quadUV7 = vb;\n quadUV1 = quadUV5 = vt;\n }\n else {\n ul = (textureRect.x) / atlasWidth;\n vb = (textureRect.y + textureRect.height) / atlasHeight;\n ur = (textureRect.x + textureRect.width) / atlasWidth;\n vt = (textureRect.y) / atlasHeight;\n\n quadUV0 = quadUV4 = ul;\n quadUV2 = quadUV6 = ur;\n quadUV1 = quadUV3 = vb;\n quadUV5 = quadUV7 = vt;\n }\n\n let verts = this._renderData.vDatas[0];\n let uvOffset = this.uvOffset;\n let floatsPerVert = this.floatsPerVert;\n switch (sprite._fillType) {\n case FillType.HORIZONTAL:\n verts[uvOffset] = quadUV0 + (quadUV2 - quadUV0) * fillStart;\n verts[uvOffset + 1] = quadUV1 + (quadUV3 - quadUV1) * fillStart;\n verts[uvOffset + floatsPerVert] = quadUV0 + (quadUV2 - quadUV0) * fillEnd;\n verts[uvOffset + floatsPerVert + 1] = quadUV1 + (quadUV3 - quadUV1) * fillEnd;\n verts[uvOffset + floatsPerVert * 2] = quadUV4 + (quadUV6 - quadUV4) * fillStart;\n verts[uvOffset + floatsPerVert * 2 + 1] = quadUV5 + (quadUV7 - quadUV5) * fillStart;\n verts[uvOffset + floatsPerVert * 3] = quadUV4 + (quadUV6 - quadUV4) * fillEnd;\n verts[uvOffset + floatsPerVert * 3 + 1] = quadUV5 + (quadUV7 - quadUV5) * fillEnd;\n break;\n case FillType.VERTICAL:\n verts[uvOffset] = quadUV0 + (quadUV4 - quadUV0) * fillStart;\n verts[uvOffset + 1] = quadUV1 + (quadUV5 - quadUV1) * fillStart;\n verts[uvOffset + floatsPerVert] = quadUV2 + (quadUV6 - quadUV2) * fillStart;\n verts[uvOffset + floatsPerVert + 1] = quadUV3 + (quadUV7 - quadUV3) * fillStart;\n verts[uvOffset + floatsPerVert * 2] = quadUV0 + (quadUV4 - quadUV0) * fillEnd;\n verts[uvOffset + floatsPerVert * 2 + 1] = quadUV1 + (quadUV5 - quadUV1) * fillEnd;\n verts[uvOffset + floatsPerVert * 3] = quadUV2 + (quadUV6 - quadUV2) * fillEnd;\n verts[uvOffset + floatsPerVert * 3 + 1] = quadUV3 + (quadUV7 - quadUV3) * fillEnd;\n break;\n default:\n cc.errorID(2626);\n break;\n }\n }\n\n updateVerts (sprite, fillStart, fillEnd) {\n let node = sprite.node,\n width = node.width, height = node.height,\n appx = node.anchorX * width, appy = node.anchorY * height;\n\n let l = -appx, b = -appy,\n r = width - appx, t = height - appy;\n\n let progressStart, progressEnd;\n switch (sprite._fillType) {\n case FillType.HORIZONTAL:\n progressStart = l + (r - l) * fillStart;\n progressEnd = l + (r - l) * fillEnd;\n\n l = progressStart;\n r = progressEnd;\n break;\n case FillType.VERTICAL:\n progressStart = b + (t - b) * fillStart;\n progressEnd = b + (t - b) * fillEnd;\n\n b = progressStart;\n t = progressEnd;\n break;\n default:\n cc.errorID(2626);\n break;\n }\n\n let local = this._local;\n local[0] = l;\n local[1] = b;\n local[2] = r;\n local[3] = t;\n\n this.updateWorldVerts(sprite);\n }\n}\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport Assembler2D from '../../../../assembler-2d';\n\nexport default class MeshSpriteAssembler extends Assembler2D {\n initData (sprite) {\n this._renderData.createFlexData(0, 4, 6, this.getVfmt());\n }\n \n updateRenderData (sprite) {\n let frame = sprite.spriteFrame;\n\n const assemblerChanged = this.packDynamicAtlasAndCheckMaterial(sprite, frame);\n \n // 打包到动态图集时可能会切换 Assembler\n if (!assemblerChanged) {\n if (frame) {\n let vertices = frame.vertices;\n if (vertices) {\n this.verticesCount = vertices.x.length;\n this.indicesCount = vertices.triangles.length;\n\n let renderData = this._renderData;\n let flexBuffer = renderData._flexBuffer;\n if (flexBuffer.reserve(this.verticesCount, this.indicesCount)) {\n this.updateColor(sprite);\n sprite._vertsDirty = true;\n }\n flexBuffer.used(this.verticesCount, this.indicesCount);\n\n this.updateIndices(vertices.triangles);\n\n if (sprite._vertsDirty) {\n this.updateUVs(sprite);\n this.updateVerts(sprite);\n this.updateWorldVerts(sprite);\n sprite._vertsDirty = false;\n }\n }\n }\n }\n }\n\n updateIndices (triangles) {\n this._renderData.iDatas[0].set(triangles);\n }\n\n updateUVs (sprite) {\n let vertices = sprite.spriteFrame.vertices,\n u = vertices.nu,\n v = vertices.nv;\n\n let uvOffset = this.uvOffset;\n let floatsPerVert = this.floatsPerVert;\n let verts = this._renderData.vDatas[0];\n for (let i = 0; i < u.length; i++) {\n let dstOffset = floatsPerVert * i + uvOffset;\n verts[dstOffset] = u[i];\n verts[dstOffset + 1] = v[i];\n }\n }\n\n updateVerts (sprite) {\n let node = sprite.node,\n contentWidth = Math.abs(node.width),\n contentHeight = Math.abs(node.height),\n appx = node.anchorX * contentWidth,\n appy = node.anchorY * contentHeight;\n\n let frame = sprite.spriteFrame,\n vertices = frame.vertices,\n x = vertices.x,\n y = vertices.y,\n originalWidth = frame._originalSize.width,\n originalHeight = frame._originalSize.height,\n rectWidth = frame._rect.width,\n rectHeight = frame._rect.height,\n offsetX = frame._offset.x,\n offsetY = frame._offset.y,\n trimX = offsetX + (originalWidth - rectWidth) / 2,\n trimY = offsetY + (originalHeight - rectHeight) / 2;\n\n let scaleX = contentWidth / (sprite.trim ? rectWidth : originalWidth),\n scaleY = contentHeight / (sprite.trim ? rectHeight : originalHeight);\n\n let local = this._local;\n if (!sprite.trim) {\n for (let i = 0, l = x.length; i < l; i++) {\n let offset = i * 2;\n local[offset] = (x[i]) * scaleX - appx;\n local[offset + 1] = (originalHeight - y[i]) * scaleY - appy;\n }\n }\n else {\n for (let i = 0, l = x.length; i < l; i++) {\n let offset = i * 2;\n local[offset] = (x[i] - trimX) * scaleX - appx;\n local[offset + 1] = (originalHeight - y[i] - trimY) * scaleY - appy;\n }\n }\n if (frame._flipX) {\n for (let i = 0, l = this.verticesCount; i < l; i++) {\n local[i * 2] = contentWidth - local[i * 2] - 2 * appx;\n }\n }\n if (frame._flipY) {\n for (let i = 0, l = this.verticesCount; i < l; i++) {\n local[i * 2 + 1] = contentHeight - local[i * 2 + 1] - 2 * appy;\n }\n }\n }\n\n updateWorldVerts (sprite) {\n let node = sprite.node;\n let matrix = node._worldMatrix;\n let matrixm = matrix.m;\n let a = matrixm[0], b = matrixm[1], c = matrixm[4], d = matrixm[5],\n tx = matrixm[12], ty = matrixm[13];\n let local = this._local;\n let world = this._renderData.vDatas[0];\n let floatsPerVert = this.floatsPerVert;\n for (let i = 0, l = this.verticesCount; i < l; i++) {\n let lx = local[i*2];\n let ly = local[i*2 + 1];\n world[floatsPerVert * i] = lx * a + ly * c + tx;\n world[floatsPerVert * i + 1] = lx * b + ly * d + ty;\n }\n }\n}\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport Assembler2D from '../../../../assembler-2d';\n\nconst PI_2 = Math.PI * 2;\n\nlet _vertPos = [cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0)];\nlet _vertices = [0, 0, 0, 0];\nlet _uvs = [0, 0, 0, 0, 0, 0, 0, 0];\nlet _intersectPoint_1 = [cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0)];\nlet _intersectPoint_2 = [cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0)];\nlet _center = cc.v2(0, 0);\nlet _triangles = [];\n\nfunction _calcInsectedPoints (left, right, bottom, top, center, angle, intersectPoints) {\n //left bottom, right, top\n let sinAngle = Math.sin(angle);\n let cosAngle = Math.cos(angle);\n let tanAngle, cotAngle;\n if (Math.cos(angle) !== 0) {\n tanAngle = sinAngle / cosAngle;\n //calculate right and left\n if ((left - center.x) * cosAngle > 0) {\n let yleft = center.y + tanAngle * (left - center.x);\n intersectPoints[0].x = left;\n intersectPoints[0].y = yleft;\n }\n if ((right - center.x) * cosAngle > 0) {\n let yright = center.y + tanAngle * (right - center.x);\n\n intersectPoints[2].x = right;\n intersectPoints[2].y = yright;\n }\n\n }\n\n if (Math.sin(angle) !== 0) {\n cotAngle = cosAngle / sinAngle;\n //calculate top and bottom\n if ((top - center.y) * sinAngle > 0) {\n let xtop = center.x + cotAngle * (top - center.y);\n intersectPoints[3].x = xtop;\n intersectPoints[3].y = top;\n }\n if ((bottom - center.y) * sinAngle > 0) {\n let xbottom = center.x + cotAngle * (bottom - center.y);\n intersectPoints[1].x = xbottom;\n intersectPoints[1].y = bottom;\n }\n\n }\n}\n\nfunction _calculateVertices (sprite) {\n let node = sprite.node,\n width = node.width, height = node.height,\n appx = node.anchorX * width, appy = node.anchorY * height;\n\n let l = -appx, b = -appy,\n r = width - appx, t = height - appy;\n\n let vertices = _vertices;\n vertices[0] = l;\n vertices[1] = b;\n vertices[2] = r;\n vertices[3] = t;\n\n let fillCenter = sprite._fillCenter,\n cx = _center.x = Math.min(Math.max(0, fillCenter.x), 1) * (r - l) + l,\n cy = _center.y = Math.min(Math.max(0, fillCenter.y), 1) * (t - b) + b;\n\n _vertPos[0].x = _vertPos[3].x = l;\n _vertPos[1].x = _vertPos[2].x = r;\n _vertPos[0].y = _vertPos[1].y = b;\n _vertPos[2].y = _vertPos[3].y = t;\n\n _triangles.length = 0;\n if (cx !== vertices[0]) {\n _triangles[0] = [3, 0];\n }\n if (cx !== vertices[2]) {\n _triangles[2] = [1, 2];\n }\n if (cy !== vertices[1]) {\n _triangles[1] = [0, 1];\n }\n if (cy !== vertices[3]) {\n _triangles[3] = [2, 3];\n }\n}\n\nfunction _calculateUVs (spriteFrame) {\n let atlasWidth = spriteFrame._texture.width;\n let atlasHeight = spriteFrame._texture.height;\n let textureRect = spriteFrame._rect;\n\n let u0, u1, v0, v1;\n let uvs = _uvs;\n\n if (spriteFrame._rotated) {\n u0 = (textureRect.x) / atlasWidth;\n u1 = (textureRect.x + textureRect.height) / atlasWidth;\n\n v0 = (textureRect.y) / atlasHeight;\n v1 = (textureRect.y + textureRect.width) / atlasHeight;\n\n uvs[0] = uvs[2] = u0;\n uvs[4] = uvs[6] = u1;\n uvs[3] = uvs[7] = v1;\n uvs[1] = uvs[5] = v0;\n }\n else {\n u0 = (textureRect.x) / atlasWidth;\n u1 = (textureRect.x + textureRect.width) / atlasWidth;\n\n v0 = (textureRect.y) / atlasHeight;\n v1 = (textureRect.y + textureRect.height) / atlasHeight;\n\n uvs[0] = uvs[4] = u0;\n uvs[2] = uvs[6] = u1;\n uvs[1] = uvs[3] = v1;\n uvs[5] = uvs[7] = v0;\n }\n}\n\nfunction _getVertAngle (start, end) {\n let placementX, placementY;\n placementX = end.x - start.x;\n placementY = end.y - start.y;\n\n if (placementX === 0 && placementY === 0) {\n return undefined;\n } else if (placementX === 0) {\n if (placementY > 0) {\n return Math.PI * 0.5;\n } else {\n return Math.PI * 1.5;\n }\n } else {\n let angle = Math.atan(placementY / placementX);\n if (placementX < 0) {\n angle += Math.PI;\n }\n\n return angle;\n }\n}\n\nexport default class RadialFilledAssembler extends Assembler2D {\n initData (sprite) {\n this._renderData.createFlexData(0, 4, 6, this.getVfmt());\n this.updateIndices();\n }\n\n updateRenderData (sprite) {\n super.updateRenderData(sprite);\n\n let frame = sprite.spriteFrame;\n const assemblerChanged = this.packDynamicAtlasAndCheckMaterial(sprite, frame);\n\n // 打包到动态图集时可能会切换 Assembler\n if (!assemblerChanged) {\n this._updateRenderData(sprite);\n }\n }\n\n _updateRenderData(sprite) {\n let frame = sprite.spriteFrame;\n\n if (sprite._vertsDirty) {\n let fillStart = sprite._fillStart;\n let fillRange = sprite._fillRange;\n if (fillRange < 0) {\n fillStart += fillRange;\n fillRange = -fillRange;\n }\n\n //do round fill start [0,1), include 0, exclude 1\n while (fillStart >= 1.0) fillStart -= 1.0;\n while (fillStart < 0.0) fillStart += 1.0;\n\n fillStart *= PI_2;\n fillRange *= PI_2;\n\n //build vertices\n _calculateVertices(sprite);\n //build uvs\n _calculateUVs(frame);\n\n _calcInsectedPoints(_vertices[0], _vertices[2], _vertices[1], _vertices[3], _center, fillStart, _intersectPoint_1);\n _calcInsectedPoints(_vertices[0], _vertices[2], _vertices[1], _vertices[3], _center, fillStart + fillRange, _intersectPoint_2);\n\n this.updateVerts(sprite, fillStart, fillRange);\n\n sprite._vertsDirty = false;\n }\n }\n\n updateVerts (sprite, fillStart, fillRange) {\n let fillEnd = fillStart + fillRange;\n \n let local = this._local;\n local.length = 0;\n\n let offset = 0;\n let floatsPerTriangle = 3 * this.floatsPerVert;\n for (let triangleIndex = 0; triangleIndex < 4; ++triangleIndex) {\n let triangle = _triangles[triangleIndex];\n if (!triangle) {\n continue;\n }\n //all in\n if (fillRange >= PI_2) {\n local.length = offset + floatsPerTriangle;\n this._generateTriangle(local, offset, _center, _vertPos[triangle[0]], _vertPos[triangle[1]]);\n offset += floatsPerTriangle;\n continue;\n }\n //test against\n let startAngle = _getVertAngle(_center, _vertPos[triangle[0]]);\n let endAngle = _getVertAngle(_center, _vertPos[triangle[1]]);\n if (endAngle < startAngle) endAngle += PI_2;\n startAngle -= PI_2;\n endAngle -= PI_2;\n //testing\n for (let testIndex = 0; testIndex < 3; ++testIndex) {\n if (startAngle >= fillEnd) {\n //all out\n } else if (startAngle >= fillStart) {\n local.length = offset + floatsPerTriangle;\n if (endAngle >= fillEnd) {\n //startAngle to fillEnd\n this._generateTriangle(local, offset, _center, _vertPos[triangle[0]], _intersectPoint_2[triangleIndex]);\n } else {\n //startAngle to endAngle\n this._generateTriangle(local, offset, _center, _vertPos[triangle[0]], _vertPos[triangle[1]]);\n }\n offset += floatsPerTriangle;\n } else {\n //startAngle < fillStart\n if (endAngle <= fillStart) {\n //all out\n } else if (endAngle <= fillEnd) {\n local.length = offset + floatsPerTriangle;\n //fillStart to endAngle\n this._generateTriangle(local, offset, _center, _intersectPoint_1[triangleIndex], _vertPos[triangle[1]]);\n offset += floatsPerTriangle;\n } else {\n local.length = offset + floatsPerTriangle;\n //fillStart to fillEnd\n this._generateTriangle(local, offset, _center, _intersectPoint_1[triangleIndex], _intersectPoint_2[triangleIndex]);\n offset += floatsPerTriangle;\n }\n }\n //add 2 * PI\n startAngle += PI_2;\n endAngle += PI_2;\n }\n }\n\n this.allocWorldVerts(sprite);\n this.updateWorldVerts(sprite);\n }\n\n allocWorldVerts(sprite) {\n let color = sprite.node._color._val;\n let renderData = this._renderData;\n let floatsPerVert = this.floatsPerVert;\n\n let local = this._local;\n let verticesCount = local.length / floatsPerVert;\n this.verticesCount = this.indicesCount = verticesCount;\n\n let flexBuffer = renderData._flexBuffer;\n if (flexBuffer.reserve(verticesCount, verticesCount)) {\n this.updateIndices();\n }\n flexBuffer.used(this.verticesCount, this.indicesCount);\n\n let verts = renderData.vDatas[0],\n uintVerts = renderData.uintVDatas[0];\n \n let uvOffset = this.uvOffset;\n for (let offset = 0; offset < local.length; offset += floatsPerVert) {\n let start = offset + uvOffset;\n verts[start] = local[start];\n verts[start + 1] = local[start + 1];\n uintVerts[start + 2] = color;\n }\n }\n\n updateIndices () {\n let iData = this._renderData.iDatas[0];\n for (let i = 0; i < iData.length; i ++) {\n iData[i] = i;\n }\n }\n\n updateWorldVerts (sprite) {\n let node = sprite.node;\n\n let matrix = node._worldMatrix;\n let matrixm = matrix.m,\n a = matrixm[0], b = matrixm[1], c = matrixm[4], d = matrixm[5],\n tx = matrixm[12], ty = matrixm[13];\n\n let local = this._local;\n let world = this._renderData.vDatas[0];\n let floatsPerVert = this.floatsPerVert;\n for (let offset = 0; offset < local.length; offset += floatsPerVert) {\n let x = local[offset];\n let y = local[offset + 1];\n world[offset] = x * a + y * c + tx;\n world[offset+1] = x * b + y * d + ty;\n }\n }\n\n _generateTriangle (verts, offset, vert0, vert1, vert2) {\n let vertices = _vertices;\n let v0x = vertices[0];\n let v0y = vertices[1];\n let v1x = vertices[2];\n let v1y = vertices[3];\n\n let floatsPerVert = this.floatsPerVert;\n verts[offset] = vert0.x;\n verts[offset + 1] = vert0.y;\n verts[offset + floatsPerVert] = vert1.x;\n verts[offset + floatsPerVert + 1] = vert1.y;\n verts[offset + floatsPerVert*2] = vert2.x;\n verts[offset + floatsPerVert*2 + 1] = vert2.y;\n\n let uvOffset = this.uvOffset;\n let progressX, progressY;\n progressX = (vert0.x - v0x) / (v1x - v0x);\n progressY = (vert0.y - v0y) / (v1y - v0y);\n this._generateUV(progressX, progressY, verts, offset + uvOffset);\n\n progressX = (vert1.x - v0x) / (v1x - v0x);\n progressY = (vert1.y - v0y) / (v1y - v0y);\n this._generateUV(progressX, progressY, verts, offset + floatsPerVert + uvOffset);\n\n progressX = (vert2.x - v0x) / (v1x - v0x);\n progressY = (vert2.y - v0y) / (v1y - v0y);\n this._generateUV(progressX, progressY, verts, offset + floatsPerVert*2 + uvOffset);\n }\n\n _generateUV (progressX, progressY, verts, offset) {\n let uvs = _uvs;\n let px1 = uvs[0] + (uvs[2] - uvs[0]) * progressX;\n let px2 = uvs[4] + (uvs[6] - uvs[4]) * progressX;\n let py1 = uvs[1] + (uvs[3] - uvs[1]) * progressX;\n let py2 = uvs[5] + (uvs[7] - uvs[5]) * progressX;\n verts[offset] = px1 + (px2 - px1) * progressY;\n verts[offset + 1] = py1 + (py2 - py1) * progressY;\n }\n}\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport Assembler2D from '../../../../assembler-2d';\n\nexport default class SimpleSpriteAssembler extends Assembler2D {\n updateRenderData (sprite) {\n const assemblerChanged = this.packDynamicAtlasAndCheckMaterial(sprite, sprite._spriteFrame);\n\n // 打包到动态图集时可能会切换 Assembler\n if (!assemblerChanged) {\n if (sprite._vertsDirty) {\n this.updateUVs(sprite);\n this.updateVerts(sprite);\n sprite._vertsDirty = false;\n }\n }\n }\n\n updateUVs (sprite) {\n let uv = sprite._spriteFrame.uv;\n let uvOffset = this.uvOffset;\n let floatsPerVert = this.floatsPerVert;\n let verts = this._renderData.vDatas[0];\n for (let i = 0; i < 4; i++) {\n let srcOffset = i * 2;\n let dstOffset = floatsPerVert * i + uvOffset;\n verts[dstOffset] = uv[srcOffset];\n verts[dstOffset + 1] = uv[srcOffset + 1];\n }\n }\n\n updateVerts (sprite) {\n let node = sprite.node,\n cw = node.width, ch = node.height,\n appx = node.anchorX * cw, appy = node.anchorY * ch,\n l, b, r, t;\n if (sprite.trim) {\n l = -appx;\n b = -appy;\n r = cw - appx;\n t = ch - appy;\n }\n else {\n let frame = sprite.spriteFrame,\n ow = frame._originalSize.width, oh = frame._originalSize.height,\n rw = frame._rect.width, rh = frame._rect.height,\n offset = frame._offset,\n scaleX = cw / ow, scaleY = ch / oh;\n let trimLeft = offset.x + (ow - rw) / 2;\n let trimRight = offset.x - (ow - rw) / 2;\n let trimBottom = offset.y + (oh - rh) / 2;\n let trimTop = offset.y - (oh - rh) / 2;\n l = trimLeft * scaleX - appx;\n b = trimBottom * scaleY - appy;\n r = cw + trimRight * scaleX - appx;\n t = ch + trimTop * scaleY - appy;\n }\n\n let local = this._local;\n local[0] = l;\n local[1] = b;\n local[2] = r;\n local[3] = t;\n this.updateWorldVerts(sprite);\n }\n}\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos.com\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport Assembler2D from '../../../../assembler-2d';\n\nexport default class SlicedAssembler extends Assembler2D {\n initData (sprite) {\n if (this._renderData.meshCount > 0) return;\n this._renderData.createData(0, this.verticesFloats, this.indicesCount);\n\n let indices = this._renderData.iDatas[0];\n let indexOffset = 0;\n for (let r = 0; r < 3; ++r) {\n for (let c = 0; c < 3; ++c) {\n let start = r * 4 + c;\n indices[indexOffset++] = start;\n indices[indexOffset++] = start + 1;\n indices[indexOffset++] = start + 4;\n indices[indexOffset++] = start + 1;\n indices[indexOffset++] = start + 5;\n indices[indexOffset++] = start + 4;\n }\n }\n }\n\n initLocal () {\n this._local = [];\n this._local.length = 8;\n }\n\n updateRenderData (sprite) {\n let frame = sprite._spriteFrame;\n const assemblerChanged = this.packDynamicAtlasAndCheckMaterial(sprite, frame);\n\n // 打包到动态图集时可能会切换 Assembler\n if (!assemblerChanged) {\n if (sprite._vertsDirty) {\n this.updateUVs(sprite);\n this.updateVerts(sprite);\n sprite._vertsDirty = false;\n }\n }\n }\n\n updateVerts (sprite) {\n let node = sprite.node,\n width = node.width, height = node.height,\n appx = node.anchorX * width, appy = node.anchorY * height;\n\n let frame = sprite.spriteFrame;\n let leftWidth = frame.insetLeft;\n let rightWidth = frame.insetRight;\n let topHeight = frame.insetTop;\n let bottomHeight = frame.insetBottom;\n\n let sizableWidth = width - leftWidth - rightWidth;\n let sizableHeight = height - topHeight - bottomHeight;\n let xScale = width / (leftWidth + rightWidth);\n let yScale = height / (topHeight + bottomHeight);\n xScale = (isNaN(xScale) || xScale > 1) ? 1 : xScale;\n yScale = (isNaN(yScale) || yScale > 1) ? 1 : yScale;\n sizableWidth = sizableWidth < 0 ? 0 : sizableWidth;\n sizableHeight = sizableHeight < 0 ? 0 : sizableHeight;\n\n // update local\n let local = this._local;\n local[0] = -appx;\n local[1] = -appy;\n local[2] = leftWidth * xScale - appx;\n local[3] = bottomHeight * yScale - appy;\n local[4] = local[2] + sizableWidth;\n local[5] = local[3] + sizableHeight;\n local[6] = width - appx;\n local[7] = height - appy;\n\n this.updateWorldVerts(sprite);\n }\n\n updateUVs (sprite) {\n let verts = this._renderData.vDatas[0];\n let uvSliced = sprite.spriteFrame.uvSliced;\n let uvOffset = this.uvOffset;\n let floatsPerVert = this.floatsPerVert;\n for (let row = 0; row < 4; ++row) {\n for (let col = 0; col < 4; ++col) {\n let vid = row * 4 + col;\n let uv = uvSliced[vid];\n let voffset = vid * floatsPerVert;\n verts[voffset + uvOffset] = uv.u;\n verts[voffset + uvOffset + 1] = uv.v;\n }\n }\n }\n\n updateWorldVerts (sprite) {\n let matrix = sprite.node._worldMatrix;\n let matrixm = matrix.m,\n a = matrixm[0], b = matrixm[1], c = matrixm[4], d = matrixm[5],\n tx = matrixm[12], ty = matrixm[13];\n\n let local = this._local;\n let world = this._renderData.vDatas[0];\n\n let floatsPerVert = this.floatsPerVert;\n for (let row = 0; row < 4; ++row) {\n let localRowY = local[row * 2 + 1];\n for (let col = 0; col < 4; ++col) {\n let localColX = local[col * 2];\n let worldIndex = (row * 4 + col) * floatsPerVert;\n world[worldIndex] = localColX * a + localRowY * c + tx;\n world[worldIndex + 1] = localColX * b + localRowY * d + ty;\n }\n }\n }\n}\n\nObject.assign(SlicedAssembler.prototype, {\n verticesCount: 16,\n indicesCount: 54\n});\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport Assembler2D from '../../../../assembler-2d';\n\nexport default class TiledAssembler extends Assembler2D {\n initData (sprite) {\n this.verticesCount = 0;\n this.contentWidth = 0;\n this.contentHeight = 0;\n this.rectWidth = 0;\n this.rectHeight = 0;\n this.hRepeat = 0;\n this.vRepeat = 0;\n this.row = 0;\n this.col = 0;\n\n this._renderData.createFlexData(0, 4, 6, this.getVfmt());\n this._updateIndices();\n }\n\n initLocal () {\n this._local = { x: [], y: []};\n }\n\n _updateIndices () {\n let iData = this._renderData.iDatas[0];\n for (let i = 0, vid = 0, l = iData.length; i < l; i += 6, vid += 4) {\n iData[i] = vid;\n iData[i + 1] = vid + 1;\n iData[i + 2] = vid + 2;\n iData[i + 3] = vid + 1;\n iData[i + 4] = vid + 3;\n iData[i + 5] = vid + 2;\n }\n }\n\n updateRenderData (sprite) {\n let frame = sprite._spriteFrame;\n const assemblerChanged = this.packDynamicAtlasAndCheckMaterial(sprite, frame);\n\n // 打包到动态图集时可能会切换 Assembler\n if (!assemblerChanged) {\n let node = sprite.node;\n\n let contentWidth = this.contentWidth = Math.abs(node.width);\n let contentHeight = this.contentHeight = Math.abs(node.height);\n let rect = frame._rect;\n let leftWidth = frame.insetLeft, rightWidth = frame.insetRight, centerWidth = rect.width - leftWidth - rightWidth,\n topHeight = frame.insetTop, bottomHeight = frame.insetBottom, centerHeight = rect.height - topHeight - bottomHeight;\n this.sizableWidth = contentWidth - leftWidth - rightWidth;\n this.sizableHeight = contentHeight - topHeight - bottomHeight;\n this.sizableWidth = this.sizableWidth > 0 ? this.sizableWidth : 0;\n this.sizableHeight = this.sizableHeight > 0 ? this.sizableHeight : 0;\n let hRepeat = this.hRepeat = centerWidth === 0 ? this.sizableWidth : this.sizableWidth / centerWidth;\n let vRepeat = this.vRepeat = centerHeight === 0 ? this.sizableHeight : this.sizableHeight / centerHeight;\n let row = this.row = Math.ceil(vRepeat + 2);\n let col = this.col = Math.ceil(hRepeat + 2);\n\n // update data property\n let count = row * col;\n this.verticesCount = count * 4;\n this.indicesCount = count * 6;\n\n let renderData = this._renderData;\n let flexBuffer = renderData._flexBuffer;\n if (flexBuffer.reserve(this.verticesCount, this.indicesCount)) {\n this._updateIndices();\n this.updateColor(sprite);\n }\n flexBuffer.used(this.verticesCount, this.indicesCount);\n\n if (sprite._vertsDirty) {\n this.updateUVs(sprite);\n this.updateVerts(sprite);\n sprite._vertsDirty = false;\n }\n }\n }\n\n updateVerts (sprite) {\n let frame = sprite._spriteFrame;\n let rect = frame._rect;\n let node = sprite.node,\n appx = node.anchorX * node.width, appy = node.anchorY * node.height;\n\n let { row, col, contentWidth, contentHeight } = this;\n let { x, y } = this._local;\n x.length = y.length = 0;\n let leftWidth = frame.insetLeft, rightWidth = frame.insetRight, centerWidth = rect.width - leftWidth - rightWidth,\n topHeight = frame.insetTop, bottomHeight = frame.insetBottom, centerHeight = rect.height - topHeight - bottomHeight;\n let xScale = (node.width / (leftWidth + rightWidth)) > 1 ? 1 : (node.width / (leftWidth + rightWidth));\n let yScale = (node.height / (topHeight + bottomHeight)) > 1 ? 1 : (node.height / (topHeight + bottomHeight));\n let offsetWidth = 0, offsetHeight = 0;\n if (centerWidth > 0) {\n /*\n * Because the float numerical calculation in javascript is not accurate enough, \n * there is an expected result of 1.0, but the actual result is 1.000001.\n */\n offsetWidth = Math.floor(this.sizableWidth * 1000) / 1000 % centerWidth === 0 ? centerWidth : this.sizableWidth % centerWidth;\n }\n else {\n offsetWidth = this.sizableWidth;\n }\n if (centerHeight > 0) {\n offsetHeight = Math.floor(this.sizableHeight * 1000) / 1000 % centerHeight === 0 ? centerHeight : this.sizableHeight % centerHeight;\n }\n else {\n offsetHeight = this.sizableHeight;\n }\n\n for (let i = 0; i <= col; i++) {\n if (i === 0) {\n x[i] = - appx;\n }\n else if (i > 0 && i < col) {\n if (i === 1) {\n x[i] = leftWidth * xScale + Math.min(centerWidth, this.sizableWidth) - appx;\n }\n else {\n if (centerWidth > 0) {\n if (i === (col - 1)) {\n x[i] = leftWidth + offsetWidth + centerWidth * (i - 2) - appx;\n }\n else {\n x[i] = leftWidth + Math.min(centerWidth, this.sizableWidth) + centerWidth * (i - 2) - appx;\n }\n }\n else {\n x[i] = leftWidth + this.sizableWidth - appx;\n }\n }\n }\n else if (i === col) {\n x[i] = Math.min(leftWidth + this.sizableWidth + rightWidth, contentWidth) - appx;\n }\n }\n for (let i = 0; i <= row; i++) {\n if (i === 0) {\n y[i] = - appy;\n }\n else if (i > 0 && i < row) {\n if (i === 1) {\n y[i] = bottomHeight * yScale + Math.min(centerHeight, this.sizableHeight) - appy;\n }\n else {\n if (centerHeight > 0) {\n if (i === (row - 1)) {\n y[i] = bottomHeight + offsetHeight + (i - 2) * centerHeight - appy;\n }\n else {\n y[i] = bottomHeight + Math.min(centerHeight, this.sizableHeight) + (i - 2) * centerHeight - appy;\n }\n }\n else {\n y[i] = bottomHeight + this.sizableHeight - appy;\n }\n }\n }\n else if (i === row) {\n y[i] = Math.min(bottomHeight + this.sizableHeight + topHeight, contentHeight) - appy;\n }\n }\n\n this.updateWorldVerts(sprite);\n }\n \n updateWorldVerts (sprite) {\n let renderData = this._renderData;\n let local = this._local;\n let localX = local.x, localY = local.y;\n let world = renderData.vDatas[0];\n let { row, col } = this;\n let matrix = sprite.node._worldMatrix;\n let matrixm = matrix.m;\n let a = matrixm[0], b = matrixm[1], c = matrixm[4], d = matrixm[5],\n tx = matrixm[12], ty = matrixm[13];\n\n let x, x1, y, y1;\n let floatsPerVert = this.floatsPerVert;\n let vertexOffset = 0;\n for (let yindex = 0, ylength = row; yindex < ylength; ++yindex) {\n y = localY[yindex];\n y1 = localY[yindex + 1];\n for (let xindex = 0, xlength = col; xindex < xlength; ++xindex) {\n x = localX[xindex];\n x1 = localX[xindex + 1];\n\n // lb\n world[vertexOffset] = x * a + y * c + tx;\n world[vertexOffset + 1] = x * b + y * d + ty;\n vertexOffset += floatsPerVert;\n // rb\n world[vertexOffset] = x1 * a + y * c + tx;\n world[vertexOffset + 1] = x1 * b + y * d + ty;\n vertexOffset += floatsPerVert;\n // lt\n world[vertexOffset] = x * a + y1 * c + tx;\n world[vertexOffset + 1] = x * b + y1 * d + ty;\n vertexOffset += floatsPerVert;\n // rt\n world[vertexOffset] = x1 * a + y1 * c + tx;\n world[vertexOffset + 1] = x1 * b + y1 * d + ty;\n vertexOffset += floatsPerVert;\n }\n }\n }\n\n updateUVs (sprite) {\n let verts = this._renderData.vDatas[0];\n if (!verts) return;\n \n let frame = sprite._spriteFrame;\n let rect = frame._rect;\n let leftWidth = frame.insetLeft, rightWidth = frame.insetRight, centerWidth = rect.width - leftWidth - rightWidth,\n topHeight = frame.insetTop, bottomHeight = frame.insetBottom, centerHeight = rect.height - topHeight - bottomHeight;\n\n let { row, col, hRepeat, vRepeat } = this;\n let coefu = 0, coefv = 0;\n let uv = sprite.spriteFrame.uv;\n let uvSliced = sprite.spriteFrame.uvSliced;\n let rotated = sprite.spriteFrame._rotated;\n let floatsPerVert = this.floatsPerVert, uvOffset = this.uvOffset;\n let tempXVerts = [], tempYVerts = [];\n for (let yindex = 0, ylength = row; yindex < ylength; ++yindex) {\n if (this.sizableHeight > centerHeight) {\n if (this.sizableHeight >= yindex * centerHeight) {\n coefv = 1;\n }\n else {\n coefv = vRepeat % 1;\n }\n }\n else {\n coefv = vRepeat;\n }\n for (let xindex = 0, xlength = col; xindex < xlength; ++xindex) {\n if (this.sizableWidth > centerWidth) {\n if (this.sizableWidth >= xindex * centerWidth) {\n coefu = 1;\n }\n else {\n coefu = hRepeat % 1;\n }\n }\n else {\n coefu = hRepeat;\n }\n\n if (rotated) {\n if (yindex === 0) {\n tempXVerts[0] = uvSliced[0].u;\n tempXVerts[1] = uvSliced[0].u;\n tempXVerts[2] = uvSliced[4].u + (uvSliced[8].u - uvSliced[4].u) * coefv;\n } else if (yindex < (row - 1)) {\n tempXVerts[0] = uvSliced[4].u;\n tempXVerts[1] = uvSliced[4].u;\n tempXVerts[2] = uvSliced[4].u + (uvSliced[8].u - uvSliced[4].u) * coefv;\n } else if (yindex === (row - 1)) {\n tempXVerts[0] = uvSliced[8].u;\n tempXVerts[1] = uvSliced[8].u;\n tempXVerts[2] = uvSliced[12].u;\n }\n if (xindex === 0) {\n tempYVerts[0] = uvSliced[0].v;\n tempYVerts[1] = uvSliced[1].v + (uvSliced[2].v - uvSliced[1].v) * coefu;\n tempYVerts[2] = uvSliced[0].v;\n } else if (xindex < (col - 1)) {\n tempYVerts[0] = uvSliced[1].v;\n tempYVerts[1] = uvSliced[1].v + (uvSliced[2].v - uvSliced[1].v) * coefu;\n tempYVerts[2] = uvSliced[1].v;\n } else if (xindex === (col - 1)) {\n tempYVerts[0] = uvSliced[2].v;\n tempYVerts[1] = uvSliced[3].v;\n tempYVerts[2] = uvSliced[2].v;\n }\n tempXVerts[3] = tempXVerts[2];\n tempYVerts[3] = tempYVerts[1];\n }\n else {\n if (xindex === 0) {\n tempXVerts[0] = uvSliced[0].u;\n tempXVerts[1] = uvSliced[1].u + (uvSliced[2].u - uvSliced[1].u) * coefu;\n tempXVerts[2] = uv[0];\n } else if (xindex < (col - 1)) {\n tempXVerts[0] = uvSliced[1].u;\n tempXVerts[1] = uvSliced[1].u + (uvSliced[2].u - uvSliced[1].u) * coefu;\n tempXVerts[2] = uvSliced[1].u;\n } else if (xindex === (col - 1)) {\n tempXVerts[0] = uvSliced[2].u;\n tempXVerts[1] = uvSliced[3].u;\n tempXVerts[2] = uvSliced[2].u;\n }\n if (yindex === 0) {\n tempYVerts[0] = uvSliced[0].v;\n tempYVerts[1] = uvSliced[0].v;\n tempYVerts[2] = uvSliced[4].v + (uvSliced[8].v - uvSliced[4].v) * coefv;\n } else if (yindex < (row - 1)) {\n tempYVerts[0] = uvSliced[4].v;\n tempYVerts[1] = uvSliced[4].v;\n tempYVerts[2] = uvSliced[4].v + (uvSliced[8].v - uvSliced[4].v) * coefv;\n } else if (yindex === (row - 1)) {\n tempYVerts[0] = uvSliced[8].v;\n tempYVerts[1] = uvSliced[8].v;\n tempYVerts[2] = uvSliced[12].v;\n }\n tempXVerts[3] = tempXVerts[1];\n tempYVerts[3] = tempYVerts[2];\n }\n // lb\n verts[uvOffset] = tempXVerts[0];\n verts[uvOffset + 1] = tempYVerts[0];\n uvOffset += floatsPerVert;\n // rb\n verts[uvOffset] = tempXVerts[1];\n verts[uvOffset + 1] = tempYVerts[1];\n uvOffset += floatsPerVert;\n // lt\n verts[uvOffset] = tempXVerts[2];\n verts[uvOffset + 1] = tempYVerts[2];\n uvOffset += floatsPerVert;\n // rt\n verts[uvOffset] = tempXVerts[3];\n verts[uvOffset + 1] = tempYVerts[3];\n uvOffset += floatsPerVert;\n }\n }\n }\n}\n\n","import Assembler from '../../../assembler';\nimport { Type, FillType } from '../../../../components/CCSprite';\n\nimport Simple from \"./2d/simple\";\nimport Sliced from \"./2d/sliced\";\nimport Tiled from \"./2d/tiled\";\nimport RadialFilled from \"./2d/radial-filled\";\nimport BarFilled from \"./2d/bar-filled\";\nimport Mesh from './2d/mesh';\n\nimport Simple3D from \"./3d/simple\";\nimport Sliced3D from \"./3d/sliced\";\nimport Tiled3D from \"./3d/tiled\";\nimport RadialFilled3D from \"./3d/radial-filled\";\nimport BarFilled3D from \"./3d/bar-filled\";\nimport Mesh3D from './3d/mesh';\n\nimport SimpleMulti from \"./2d-multi/simple\";\nimport SlicedMulti from \"./2d-multi/sliced\";\nimport TiledMulti from \"./2d-multi/tiled\";\nimport RadialFilledMulti from \"./2d-multi/radial-filled\";\nimport BarFilledMulti from \"./2d-multi/bar-filled\";\nimport MeshMulti from \"./2d-multi/mesh\";\n\nlet ctor = {\n getConstructor(sprite) {\n let is3DNode = sprite.node.is3DNode;\n const material = sprite.getMaterials()[0];\n let isMultiMaterial = material && material.material.isMultiSupport();\n\n let ctor = is3DNode ? Simple3D : (isMultiMaterial ? SimpleMulti : Simple);\n switch (sprite.type) {\n case Type.SLICED:\n ctor = is3DNode ? Sliced3D : (isMultiMaterial ? SlicedMulti : Sliced);\n break;\n case Type.TILED:\n ctor = is3DNode ? Tiled3D : (isMultiMaterial ? TiledMulti : Tiled);\n break;\n case Type.FILLED:\n if (sprite._fillType === FillType.RADIAL) {\n ctor = is3DNode ? RadialFilled3D : (isMultiMaterial ? RadialFilledMulti : RadialFilled);\n } else {\n ctor = is3DNode ? BarFilled3D : (isMultiMaterial ? BarFilledMulti : BarFilled);\n }\n break;\n case Type.MESH:\n ctor = is3DNode ? Mesh3D : (isMultiMaterial ? MeshMulti : Mesh);\n break;\n }\n\n return ctor;\n },\n\n Simple,\n Sliced,\n Tiled,\n RadialFilled,\n BarFilled,\n Mesh,\n\n Simple3D,\n Sliced3D,\n Tiled3D,\n RadialFilled3D,\n BarFilled3D,\n Mesh3D,\n\n SimpleMulti,\n SlicedMulti,\n TiledMulti,\n RadialFilledMulti,\n BarFilledMulti,\n MeshMulti,\n};\n\nAssembler.register(cc.Sprite, ctor);\n","/****************************************************************************\n LICENSING AGREEMENT\n \n Xiamen Yaji Software Co., Ltd., (the “Licensor”) grants the user (the “Licensee”) non-exclusive and non-transferable rights to use the software according to the following conditions:\n a. The Licensee shall pay royalties to the Licensor, and the amount of those royalties and the payment method are subject to separate negotiations between the parties.\n b. The software is licensed for use rather than sold, and the Licensor reserves all rights over the software that are not expressly granted (whether by implication, reservation or prohibition).\n c. The open source codes contained in the software are subject to the MIT Open Source Licensing Agreement (see the attached for the details);\n d. The Licensee acknowledges and consents to the possibility that errors may occur during the operation of the software for one or more technical reasons, and the Licensee shall take precautions and prepare remedies for such events. In such circumstance, the Licensor shall provide software patches or updates according to the agreement between the two parties. The Licensor will not assume any liability beyond the explicit wording of this Licensing Agreement.\n e. Where the Licensor must assume liability for the software according to relevant laws, the Licensor’s entire liability is limited to the annual royalty payable by the Licensee.\n f. The Licensor owns the portions listed in the root directory and subdirectory (if any) in the software and enjoys the intellectual property rights over those portions. As for the portions owned by the Licensor, the Licensee shall not:\n - i. Bypass or avoid any relevant technical protection measures in the products or services;\n - ii. Release the source codes to any other parties;\n - iii. Disassemble, decompile, decipher, attack, emulate, exploit or reverse-engineer these portion of code;\n - iv. Apply it to any third-party products or services without Licensor’s permission;\n - v. Publish, copy, rent, lease, sell, export, import, distribute or lend any products containing these portions of code;\n - vi. Allow others to use any services relevant to the technology of these codes;\n - vii. Conduct any other act beyond the scope of this Licensing Agreement.\n g. This Licensing Agreement terminates immediately if the Licensee breaches this Agreement. The Licensor may claim compensation from the Licensee where the Licensee’s breach causes any damage to the Licensor.\n h. The laws of the People's Republic of China apply to this Licensing Agreement.\n i. This Agreement is made in both Chinese and English, and the Chinese version shall prevail the event of conflict.\n ****************************************************************************/\n\nexport default class FlexBuffer {\n constructor (handler, index, verticesCount, indicesCount, vfmt) {\n this._handler = handler;\n this._index = index;\n this._vfmt = vfmt;\n this._verticesBytes = vfmt._bytes;\n\n this._initVerticesCount = verticesCount;\n this._initIndicesCount = indicesCount;\n\n this.reset();\n }\n\n _reallocVData (floatsCount, oldData) {\n this.vData = new Float32Array(floatsCount);\n this.uintVData = new Uint32Array(this.vData.buffer);\n\n if (oldData) {\n this.vData.set(oldData);\n }\n\n this._handler.updateMesh(this._index, this.vData, this.iData);\n }\n\n _reallocIData (indicesCount, oldData) {\n this.iData = new Uint16Array(indicesCount);\n \n if (oldData) {\n this.iData.set(oldData);\n }\n\n this._handler.updateMesh(this._index, this.vData, this.iData);\n }\n\n reserve (verticesCount, indicesCount) {\n let floatsCount = verticesCount * this._verticesBytes >> 2;\n let newFloatsCount = this.vData.length;\n let realloced = false;\n\n if (floatsCount > newFloatsCount) {\n while (newFloatsCount < floatsCount) {\n newFloatsCount *= 2;\n }\n this._reallocVData(newFloatsCount, this.vData);\n realloced = true;\n }\n\n let newIndicesCount = this.iData.length;\n if (indicesCount > newIndicesCount) {\n while (newIndicesCount < indicesCount) {\n newIndicesCount *= 2;\n }\n this._reallocIData(indicesCount, this.iData);\n realloced = true;\n }\n\n return realloced;\n }\n\n used (verticesCount, indicesCount) {\n this.usedVertices = verticesCount;\n this.usedIndices = indicesCount;\n this.usedVerticesFloats = verticesCount * this._verticesBytes >> 2;\n\n this._handler.updateMeshRange(verticesCount, indicesCount);\n }\n\n reset () {\n let floatsCount = this._initVerticesCount * this._verticesBytes >> 2;\n this._reallocVData(floatsCount);\n this._reallocIData(this._initIndicesCount);\n\n this.usedVertices = 0;\n this.usedVerticesFloats = 0;\n this.usedIndices = 0;\n }\n} \n\ncc.FlexBuffer = FlexBuffer\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport gfx from '../../../renderer/gfx';\n\nconst FIX_IOS14_BUFFER = (cc.sys.os === cc.sys.OS_IOS || cc.sys.os === cc.sys.OS_OSX) && cc.sys.isBrowser && /(OS 1[4-9])|(Version\\/1[4-9])/.test(window.navigator.userAgent);\n\nlet MeshBuffer = cc.Class({\n name: 'cc.MeshBuffer',\n ctor (batcher, vertexFormat) {\n this.init (batcher, vertexFormat);\n },\n\n init (batcher, vertexFormat) {\n this.byteOffset = 0;\n this.indiceOffset = 0;\n this.vertexOffset = 0;\n this.indiceStart = 0;\n\n this._dirty = false;\n\n this._vertexFormat = vertexFormat;\n this._vertexBytes = this._vertexFormat._bytes;\n\n this._arrOffset = 0;\n this._vbArr = [];\n this._vb = new gfx.VertexBuffer(\n batcher._device,\n vertexFormat,\n gfx.USAGE_DYNAMIC,\n new ArrayBuffer(),\n 0\n );\n this._vbArr[0] = this._vb;\n\n this._ibArr = [];\n this._ib = new gfx.IndexBuffer(\n batcher._device,\n gfx.INDEX_FMT_UINT16,\n gfx.USAGE_STATIC,\n new ArrayBuffer(),\n 0\n );\n this._ibArr[0] = this._ib;\n\n this._vData = null;\n this._uintVData = null;\n this._iData = null;\n\n this._batcher = batcher;\n\n this._initVDataCount = 256 * vertexFormat._bytes;// actually 256 * 4 * (vertexFormat._bytes / 4)\n this._initIDataCount = 256 * 6;\n \n this._offsetInfo = {\n byteOffset : 0,\n vertexOffset : 0,\n indiceOffset : 0\n }\n this._reallocBuffer();\n },\n\n uploadData () {\n if (this.byteOffset === 0 || !this._dirty) {\n return;\n }\n\n // update vertext data\n let vertexsData = new Float32Array(this._vData.buffer, 0, this.byteOffset >> 2);\n let indicesData = new Uint16Array(this._iData.buffer, 0, this.indiceOffset);\n\n let vb = this._vb;\n vb.update(0, vertexsData);\n\n let ib = this._ib;\n ib.update(0, indicesData);\n\n this._dirty = false;\n },\n\n switchBuffer () {\n let offset = ++this._arrOffset;\n\n this.byteOffset = 0;\n this.vertexOffset = 0;\n this.indiceOffset = 0;\n this.indiceStart = 0;\n\n if (offset < this._vbArr.length) {\n this._vb = this._vbArr[offset];\n this._ib = this._ibArr[offset];\n } else {\n\n this._vb = new gfx.VertexBuffer(\n this._batcher._device,\n this._vertexFormat,\n gfx.USAGE_DYNAMIC,\n new ArrayBuffer(),\n 0\n );\n this._vbArr[offset] = this._vb;\n\n this._ib = new gfx.IndexBuffer(\n this._batcher._device,\n gfx.INDEX_FMT_UINT16,\n gfx.USAGE_STATIC,\n new ArrayBuffer(),\n 0\n );\n this._ibArr[offset] = this._ib;\n }\n },\n\n checkAndSwitchBuffer (vertexCount) {\n if (this.vertexOffset + vertexCount > 65535) {\n this.uploadData();\n this._batcher._flush();\n this.switchBuffer();\n }\n },\n\n requestStatic (vertexCount, indiceCount) {\n\n this.checkAndSwitchBuffer(vertexCount);\n\n let byteOffset = this.byteOffset + vertexCount * this._vertexBytes;\n let indiceOffset = this.indiceOffset + indiceCount;\n\n let byteLength = this._vData.byteLength;\n let indiceLength = this._iData.length;\n if (byteOffset > byteLength || indiceOffset > indiceLength) {\n while (byteLength < byteOffset || indiceLength < indiceOffset) {\n this._initVDataCount *= 2;\n this._initIDataCount *= 2;\n\n byteLength = this._initVDataCount * 4;\n indiceLength = this._initIDataCount;\n }\n\n this._reallocBuffer();\n }\n this._updateOffset(vertexCount, indiceCount, byteOffset);\n },\n\n _updateOffset (vertexCount, indiceCount, byteOffset) {\n let offsetInfo = this._offsetInfo;\n offsetInfo.vertexOffset = this.vertexOffset;\n this.vertexOffset += vertexCount;\n\n offsetInfo.indiceOffset = this.indiceOffset;\n this.indiceOffset += indiceCount;\n\n offsetInfo.byteOffset = this.byteOffset;\n this.byteOffset = byteOffset;\n\n this._dirty = true;\n },\n\n request (vertexCount, indiceCount) {\n if (this._batcher._buffer !== this) {\n this._batcher._flush();\n this._batcher._buffer = this;\n }\n\n this.requestStatic(vertexCount, indiceCount);\n return this._offsetInfo;\n },\n\n requestForSpine(vertexCount, indiceCount) {\n if (this._batcher._buffer !== this) {\n this._batcher._flush();\n this._batcher._buffer = this;\n }\n\n this.requestStaticForSpine(vertexCount, indiceCount);\n return this._offsetInfo;\n },\n\n requestStaticForSpine(vertexCount, indiceCount) {\n\n this.checkAndSwitchBuffer(vertexCount);\n\n let byteOffset = this.byteOffset + vertexCount * this._vertexBytes;\n let indiceOffset = this.indiceOffset + indiceCount;\n\n let byteLength = this._vData.byteLength;\n let indiceLength = this._iData.length;\n if (byteOffset > byteLength || indiceOffset > indiceLength) {\n while (byteLength < byteOffset || indiceLength < indiceOffset) {\n this._initVDataCount *= 2;\n this._initIDataCount *= 2;\n\n byteLength = this._initVDataCount * 4;\n indiceLength = this._initIDataCount;\n }\n\n this._reallocBuffer();\n }\n\n let offsetInfo = this._offsetInfo;\n offsetInfo.vertexOffset = this.vertexOffset;\n offsetInfo.indiceOffset = this.indiceOffset;\n offsetInfo.byteOffset = this.byteOffset;\n },\n\n adjustForSpine(vertexCount, indiceCount) {\n this.vertexOffset += vertexCount;\n this.indiceOffset += indiceCount;\n\n this.byteOffset = this.byteOffset + vertexCount * this._vertexBytes;\n\n this._dirty = true;\n },\n \n _reallocBuffer () {\n this._reallocVData(true);\n this._reallocIData(true);\n },\n\n _reallocVData (copyOldData) {\n let oldVData;\n if (this._vData) {\n oldVData = new Uint8Array(this._vData.buffer);\n }\n\n this._vData = new Float32Array(this._initVDataCount);\n this._uintVData = new Uint32Array(this._vData.buffer);\n\n let newData = new Uint8Array(this._uintVData.buffer);\n\n if (oldVData && copyOldData) {\n for (let i = 0, l = oldVData.length; i < l; i++) {\n newData[i] = oldVData[i];\n }\n }\n },\n\n _reallocIData (copyOldData) {\n let oldIData = this._iData;\n\n this._iData = new Uint16Array(this._initIDataCount);\n\n if (oldIData && copyOldData) {\n let iData = this._iData;\n for (let i = 0, l = oldIData.length; i < l; i++) {\n iData[i] = oldIData[i];\n }\n }\n },\n\n reset () {\n this._arrOffset = 0;\n this._vb = this._vbArr[0];\n this._ib = this._ibArr[0];\n\n this.byteOffset = 0;\n this.indiceOffset = 0;\n this.vertexOffset = 0;\n this.indiceStart = 0;\n\n this._dirty = false;\n },\n\n destroy () {\n this.reset();\n for (let i = 0; i < this._vbArr.length; i++) {\n let vb = this._vbArr[i];\n vb.destroy();\n }\n this._vbArr = null;\n\n for (let i = 0; i < this._ibArr.length; i++) {\n let ib = this._ibArr[i];\n ib.destroy();\n }\n this._ibArr = null;\n\n this._ib = null;\n this._vb = null;\n },\n\n forwardIndiceStartToOffset () {\n this.indiceStart = this.indiceOffset;\n }\n});\n\n// Should not share vb and id between multiple drawcalls on iOS14, it will cost a lot of time.\n// TODO: maybe remove it after iOS14 fix it?\nif (FIX_IOS14_BUFFER) {\n MeshBuffer.prototype.checkAndSwitchBuffer = function (vertexCount) {\n if (this.vertexOffset + vertexCount > 65535) {\n this.uploadData();\n this._batcher._flush();\n }\n }; \n MeshBuffer.prototype.forwardIndiceStartToOffset = function () {\n this.uploadData();\n this.switchBuffer();\n } \n}\n\ncc.MeshBuffer = module.exports = MeshBuffer;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst { vfmtPosUvColor, vfmt3D } = require('./vertex-format');\nconst QuadBuffer = require('./quad-buffer');\nconst MeshBuffer = require('./mesh-buffer');\nconst SpineBuffer = require('./spine-buffer');\nconst Material = require('../../assets/material/CCMaterial');\n\nlet idGenerater = new (require('../../platform/id-generater'))('VertextFormat');\n\nimport InputAssembler from '../../../renderer/core/input-assembler';\nimport RecyclePool from '../../../renderer/memop/recycle-pool';\nimport Model from '../../../renderer/scene/model';\n\nlet _buffers = {};\n\nconst empty_material = new Material();\nconst empty_ia = new InputAssembler();\nempty_ia._count = 0;\n\nvar ModelBatcher = function (device, renderScene) {\n this._renderScene = renderScene;\n this._device = device;\n\n this.walking = false;\n this.material = empty_material;\n this.cullingMask = 1;\n\n this._iaPool = new RecyclePool(function () {\n return new InputAssembler();\n }, 16);\n\n this._modelPool = new RecyclePool(function () {\n return new Model();\n }, 16);\n\n // buffers\n this._quadBuffer = this.getBuffer('quad', vfmtPosUvColor);\n this._meshBuffer = this.getBuffer('mesh', vfmtPosUvColor);\n this._quadBuffer3D = this.getBuffer('quad', vfmt3D);\n this._meshBuffer3D = this.getBuffer('mesh', vfmt3D);\n this._buffer = this._meshBuffer;\n\n this._batchedModels = [];\n this._dummyNode = new cc.Node();\n this._sortKey = 0;\n\n this.node = this._dummyNode;\n \n this.parentOpacity = 1;\n this.parentOpacityDirty = 0;\n this.worldMatDirty = 0;\n};\n\nModelBatcher.prototype = {\n constructor: ModelBatcher,\n \n reset() {\n // Reset pools\n this._iaPool.reset();\n\n // Reset scene\n let scene = this._renderScene;\n let models = this._batchedModels;\n for (let i = 0; i < models.length; ++i) {\n // remove from scene\n // models[i].clearInputAssemblers();\n // models[i].clearEffects();\n models[i].setInputAssembler(null);\n models[i].setEffect(null);\n scene.removeModel(models[i]);\n }\n this._modelPool.reset();\n models.length = 0;\n this._sortKey = 0;\n\n for (let key in _buffers) {\n _buffers[key].reset();\n }\n this._buffer = this._meshBuffer;\n\n // reset caches for handle render components\n this.node = this._dummyNode;\n this.material = empty_material;\n this.cullingMask = 1;\n\n this.parentOpacity = 1;\n this.parentOpacityDirty = 0;\n this.worldMatDirty = 0;\n },\n\n _flushMaterial (material) {\n if (!material) {\n return;\n }\n this.material = material;\n let effect = material.effect;\n if (!effect) return;\n \n // Generate model\n let model = this._modelPool.add();\n this._batchedModels.push(model);\n model.sortKey = this._sortKey++;\n model._cullingMask = this.cullingMask;\n model.setNode(this.node);\n model.setEffect(effect, null);\n model.setInputAssembler(empty_ia);\n \n this._renderScene.addModel(model);\n },\n\n _flush () {\n let material = this.material,\n buffer = this._buffer,\n indiceCount = buffer.indiceOffset - buffer.indiceStart;\n if (!this.walking || !material || indiceCount <= 0) {\n return;\n }\n\n let effect = material.effect;\n if (!effect) return;\n \n // Generate ia\n let ia = this._iaPool.add();\n ia._vertexBuffer = buffer._vb;\n ia._indexBuffer = buffer._ib;\n ia._start = buffer.indiceStart;\n ia._count = indiceCount;\n \n // Generate model\n let model = this._modelPool.add();\n this._batchedModels.push(model);\n model.sortKey = this._sortKey++;\n model._cullingMask = this.cullingMask;\n model.setNode(this.node);\n model.setEffect(effect);\n model.setInputAssembler(ia);\n \n this._renderScene.addModel(model);\n buffer.forwardIndiceStartToOffset();\n },\n\n _flushIA (ia) {\n if (!ia) {\n return;\n }\n\n let material = this.material;\n let effect = material.effect;\n if (!effect) return;\n \n // Generate model\n let model = this._modelPool.add();\n this._batchedModels.push(model);\n model.sortKey = this._sortKey++;\n model._cullingMask = this.cullingMask;\n model.setNode(this.node);\n model.setEffect(effect);\n model.setInputAssembler(ia);\n \n this._renderScene.addModel(model);\n },\n\n terminate () {\n if (cc.dynamicAtlasManager && cc.dynamicAtlasManager.enabled) {\n cc.dynamicAtlasManager.update();\n }\n\n // flush current rest Model\n this._flush();\n\n for (let key in _buffers) {\n _buffers[key].uploadData();\n }\n \n this.walking = false;\n },\n\n getBuffer (type, vertextFormat) {\n let key = type + vertextFormat.getHash();\n let buffer = _buffers[key];\n if (!buffer) {\n if (type === 'mesh') {\n buffer = new MeshBuffer(this, vertextFormat);\n }\n else if (type === 'quad') {\n buffer = new QuadBuffer(this, vertextFormat);\n }\n else if (type === 'spine') {\n buffer = new SpineBuffer(this, vertextFormat);\n }\n else {\n cc.error(`Not support buffer type [${type}]`);\n return null;\n }\n\n _buffers[key] = buffer;\n }\n\n return buffer;\n }\n}\n\nmodule.exports = ModelBatcher;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst MeshBuffer = require('./mesh-buffer');\n\nlet QuadBuffer = cc.Class({\n name: 'cc.QuadBuffer',\n extends: MeshBuffer,\n \n _fillQuadBuffer () {\n let count = this._initIDataCount / 6;\n let buffer = this._iData;\n for (let i = 0, idx = 0; i < count; i++) {\n let vertextID = i * 4;\n buffer[idx++] = vertextID;\n buffer[idx++] = vertextID+1;\n buffer[idx++] = vertextID+2;\n buffer[idx++] = vertextID+1;\n buffer[idx++] = vertextID+3;\n buffer[idx++] = vertextID+2;\n }\n\n let indicesData = new Uint16Array(this._iData.buffer, 0, count * 6);\n this._ib.update(0, indicesData);\n },\n\n uploadData () {\n if (this.byteOffset === 0 || !this._dirty) {\n return;\n }\n\n // update vertext data\n let vertexsData = new Float32Array(this._vData.buffer, 0, this.byteOffset >> 2);\n this._vb.update(0, vertexsData);\n\n this._dirty = false;\n },\n\n switchBuffer () {\n this._super();\n // upload index buffer data\n let indicesData = new Uint16Array(this._iData.buffer, 0, this._initIDataCount);\n this._ib.update(0, indicesData);\n },\n\n _reallocBuffer () {\n this._reallocVData(true);\n this._reallocIData();\n this._fillQuadBuffer();\n }\n});\n\ncc.QuadBuffer = module.exports = QuadBuffer;\n","import FlexBuffer from \"./flex-buffer\";\nimport { vfmtPosUvColor } from './vertex-format';\n\nexport default function RenderData () {\n this.vDatas = [];\n this.uintVDatas = [];\n this.iDatas = [];\n this.meshCount = 0;\n\n this._infos = null;\n this._flexBuffer = null;\n}\n\ncc.js.mixin(RenderData.prototype, {\n init (assembler) {\n },\n clear () {\n this.vDatas.length = 0;\n this.iDatas.length = 0;\n this.uintVDatas.length = 0;\n this.meshCount = 0;\n\n this._infos = null;\n\n if (this._flexBuffer) {\n this._flexBuffer.reset();\n }\n },\n\n updateMesh (index, vertices, indices) {\n this.vDatas[index] = vertices;\n this.uintVDatas[index] = new Uint32Array(vertices.buffer, 0, vertices.length);\n this.iDatas[index] = indices;\n \n this.meshCount = this.vDatas.length;\n },\n\n updateMeshRange (verticesCount, indicesCount) {\n },\n \n createData (index, verticesFloats, indicesCount) {\n let vertices = new Float32Array(verticesFloats);\n let indices = new Uint16Array(indicesCount);\n this.updateMesh(index, vertices, indices);\n },\n \n createQuadData (index, verticesFloats, indicesCount) {\n this.createData(index, verticesFloats, indicesCount);\n this.initQuadIndices(this.iDatas[index]);\n },\n\n createFlexData (index, verticesFloats, indicesCount, vfmt) {\n vfmt = vfmt || vfmtPosUvColor;\n this._flexBuffer = new FlexBuffer(this, index, verticesFloats, indicesCount, vfmt);\n },\n\n initQuadIndices(indices) {\n let count = indices.length / 6;\n for (let i = 0, idx = 0; i < count; i++) {\n let vertextID = i * 4;\n indices[idx++] = vertextID;\n indices[idx++] = vertextID+1;\n indices[idx++] = vertextID+2;\n indices[idx++] = vertextID+1;\n indices[idx++] = vertextID+3;\n indices[idx++] = vertextID+2;\n }\n }\n})\n\ncc.RenderData = RenderData;\n\n","var SpineBuffer = cc.Class({\n name: 'cc.SpineBuffer',\n extends: require('./mesh-buffer'),\n\n requestStatic (vertexCount, indiceCount) {\n \n this.checkAndSwitchBuffer(vertexCount);\n\n let byteOffset = this.byteOffset + vertexCount * this._vertexBytes;\n let indiceOffset = this.indiceOffset + indiceCount;\n\n let byteLength = this._vData.byteLength;\n let indiceLength = this._iData.length;\n if (byteOffset > byteLength || indiceOffset > indiceLength) {\n while (byteLength < byteOffset || indiceLength < indiceOffset) {\n this._initVDataCount *= 2;\n this._initIDataCount *= 2;\n\n byteLength = this._initVDataCount * 4;\n indiceLength = this._initIDataCount;\n }\n\n this._reallocBuffer();\n }\n\n let offsetInfo = this._offsetInfo;\n offsetInfo.vertexOffset = this.vertexOffset;\n offsetInfo.indiceOffset = this.indiceOffset;\n offsetInfo.byteOffset = this.byteOffset;\n },\n\n adjust (vertexCount, indiceCount) {\n this.vertexOffset += vertexCount;\n this.indiceOffset += indiceCount;\n \n this.byteOffset = this.byteOffset + vertexCount * this._vertexBytes;\n\n this._dirty = true;\n }\n});\n\ncc.SpineBuffer = module.exports = SpineBuffer;","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport gfx from '../../../renderer/gfx';\n\nvar vfmt3D = new gfx.VertexFormat([\n { name: gfx.ATTR_POSITION, type: gfx.ATTR_TYPE_FLOAT32, num: 3 },\n { name: gfx.ATTR_UV0, type: gfx.ATTR_TYPE_FLOAT32, num: 2 },\n { name: gfx.ATTR_COLOR, type: gfx.ATTR_TYPE_UINT8, num: 4, normalize: true },\n]);\nvfmt3D.name = 'vfmt3D';\ngfx.VertexFormat.XYZ_UV_Color = vfmt3D;\n\nvar vfmtPosUvColor = new gfx.VertexFormat([\n { name: gfx.ATTR_POSITION, type: gfx.ATTR_TYPE_FLOAT32, num: 2 },\n { name: gfx.ATTR_UV0, type: gfx.ATTR_TYPE_FLOAT32, num: 2 },\n { name: gfx.ATTR_COLOR, type: gfx.ATTR_TYPE_UINT8, num: 4, normalize: true },\n]);\nvfmtPosUvColor.name = 'vfmtPosUvColor';\ngfx.VertexFormat.XY_UV_Color = vfmtPosUvColor;\n\nvar vfmtPosUvColorTexId = new gfx.VertexFormat([\n { name: gfx.ATTR_POSITION, type: gfx.ATTR_TYPE_FLOAT32, num: 2 },\n { name: gfx.ATTR_UV0, type: gfx.ATTR_TYPE_FLOAT32, num: 2 },\n { name: gfx.ATTR_COLOR, type: gfx.ATTR_TYPE_UINT8, num: 4, normalize: true },\n { name: gfx.ATTR_TEX_ID, type: gfx.ATTR_TYPE_FLOAT32, num: 1 },\n]);\nvfmtPosUvColorTexId.name = 'vfmtPosUvColorTexId';\ngfx.VertexFormat.XY_UV_Color_TexId = vfmtPosUvColorTexId;\n\nvar vfmtPosUvTwoColor = new gfx.VertexFormat([\n { name: gfx.ATTR_POSITION, type: gfx.ATTR_TYPE_FLOAT32, num: 2 },\n { name: gfx.ATTR_UV0, type: gfx.ATTR_TYPE_FLOAT32, num: 2 },\n { name: gfx.ATTR_COLOR, type: gfx.ATTR_TYPE_UINT8, num: 4, normalize: true },\n { name: gfx.ATTR_COLOR0, type: gfx.ATTR_TYPE_UINT8, num: 4, normalize: true },\n]);\nvfmtPosUvTwoColor.name = 'vfmtPosUvTwoColor';\ngfx.VertexFormat.XY_UV_Two_Color = vfmtPosUvTwoColor;\n\nvar vfmtPosUv = new gfx.VertexFormat([\n { name: gfx.ATTR_POSITION, type: gfx.ATTR_TYPE_FLOAT32, num: 2 },\n { name: gfx.ATTR_UV0, type: gfx.ATTR_TYPE_FLOAT32, num: 2 }\n]);\nvfmtPosUv.name = 'vfmtPosUv';\ngfx.VertexFormat.XY_UV = vfmtPosUv;\n\nvar vfmtPosColor = new gfx.VertexFormat([\n { name: gfx.ATTR_POSITION, type: gfx.ATTR_TYPE_FLOAT32, num: 2 },\n { name: gfx.ATTR_COLOR, type: gfx.ATTR_TYPE_UINT8, num: 4, normalize: true },\n]);\nvfmtPosColor.name = 'vfmtPosColor';\ngfx.VertexFormat.XY_Color = vfmtPosColor;\n\nvar vfmtPos = new gfx.VertexFormat([\n { name: gfx.ATTR_POSITION, type: gfx.ATTR_TYPE_FLOAT32, num: 2 },\n]);\nvfmtPos.name = 'vfmtPos';\ngfx.VertexFormat.XY = vfmtPos;\n\nmodule.exports = {\n vfmt3D,\n vfmtPosUvColor,\n vfmtPosUvTwoColor,\n vfmtPosUv,\n vfmtPosColor,\n vfmtPos,\n vfmtPosUvColorTexId\n};\n","require('./sp');\nrequire('./multi-handler');\nrequire('./multi-batcher');\n","import { MultiHandler } from \"./multi-handler\";\n\n\n/**\n * 多纹理合批器\n */\nexport class MultiBatcher {\n\n /**\n * 多纹理材质管理器数组\n */\n handlers: MultiHandler[] = [];\n\n /**\n * 有空槽的材质\n */\n nextHandler!: MultiHandler;\n\n\n /**\n * 初始化\n */\n init() {\n const handler = new MultiHandler();\n this.handlers.push(handler);\n this.nextHandler = handler;\n }\n\n\n /**\n * 传入 cc.Texture2D,会关联并返回一个多纹理材质,如果已经有关联的材质则会返回已关联的材质\n */\n requsetMaterial(texture: any) {\n if (!texture._multiMaterial) {\n let handler = this.nextHandler;\n let index = handler.getEmptyIndex();\n if (index === -1) {\n // 没有空位,尝试在已有 handlers 里查找\n for (const _handler of this.handlers) {\n index = _handler.getEmptyIndex();\n if (index !== -1) {\n handler = _handler;\n this.nextHandler = handler;\n break;\n }\n }\n\n // 已有的没有空位,创建新材质\n if (index === -1) {\n handler = new MultiHandler();\n this.handlers.push(handler);\n this.nextHandler = handler;\n index = 0;\n }\n }\n\n texture.linkMaterial(handler.material, index);\n }\n return texture._multiMaterial;\n }\n\n\n /**\n * 重置多纹理材质数组,再次使用请先初始化\n */\n reset() {\n this.handlers.length = 0;\n }\n\n}\n\n\ncc.sp.multiBatcher = new MultiBatcher();\ncc.sp.MultiBatcher = MultiBatcher;\n","/**\n * 多纹理 Material 管理类\n */\nexport class MultiHandler {\n\n /**\n * 材质\n */\n material: any;\n\n /**\n * Texture 数组\n *\n * 注意:不是 cc.Texture2D\n */\n protected textures: any[] = [];\n\n /**\n * 有空槽(缓存值,并不是完全正确,只是为了降低当材质没有空槽时避免数组遍历的性能消耗)\n */\n protected hasEmptySlot: boolean = false;\n\n\n constructor(material?) {\n if (material) {\n this.material = material;\n } else {\n this.material = (cc.Material as any).create(cc.sp.multi2dSpriteEffectAsset);\n this.material.name = \"multi-2d-sprite\";\n this.material.define('USE_TEXTURE', true);\n this.material.define('USE_MULTI_TEXTURE', true);\n }\n this.material._multiHandler = this;\n this.syncTextures();\n }\n\n\n /**\n * 同步 Material 的纹理插槽数据\n *\n * 当自行设置插槽可调用此函数同步数组\n */\n syncTextures() {\n const effect = this.material['effect'];\n const properties = effect.passes[0]._properties;\n\n this.textures[0] = properties.texture.value;\n this.textures[1] = properties.texture2.value;\n this.textures[2] = properties.texture3.value;\n this.textures[3] = properties.texture4.value;\n this.textures[4] = properties.texture5.value;\n this.textures[5] = properties.texture6.value;\n this.textures[6] = properties.texture7.value;\n this.textures[7] = properties.texture8.value;\n\n // refresh has empty slot state\n this.hasEmptySlot = true;\n this.getEmptyIndex();\n }\n\n\n /**\n * 设置纹理插槽(提供 cc.Texture2D)\n */\n setTexture(index: number, texture: any) {\n this.textures[index] = texture ? texture.getImpl() : null;\n this.material.setProperty(cc.sp.propertyIndex2Name(index), texture);\n if (texture == null) this.hasEmptySlot = true;\n }\n\n\n /**\n * 移除指定纹理\n *\n * 注意:不是 cc.Texture2D\n */\n removeTexture(texture: any) {\n const index = this.getIndex(texture);\n if (index !== -1) {\n this.setTexture(index, null);\n }\n }\n\n\n /**\n * 纹理是否在插槽中\n *\n * 注意:不是 cc.Texture2D\n */\n hasTexture(texture: any) {\n return this.textures.indexOf(texture) !== -1;\n }\n\n\n /**\n * 获取纹理在插槽中的 Index,没有返回 -1\n *\n * 注意:不是 cc.Texture2D\n */\n getIndex(texture: any) {\n return this.textures.indexOf(texture);\n }\n\n\n /**\n * 获取指定 index 中的纹理\n *\n * 注意:不是 cc.Texture2D\n */\n getTexture(index: number) {\n return this.textures[index];\n }\n\n\n /**\n * 获取空插槽 Index,没有返回 -1\n */\n getEmptyIndex() {\n if (!this.hasEmptySlot) return -1;\n const index = this.textures.indexOf(null);\n if (index !== -1) {\n return index;\n } else {\n this.hasEmptySlot = false;\n return -1;\n }\n }\n\n\n /**\n * 自动设置纹理到空插槽,返回插槽下标,失败返回 -1(提供 cc.Texture2D)\n */\n autoSetTexture(texture: any) {\n const index = this.getEmptyIndex();\n if (index === -1) {\n return -1;\n }\n\n this.setTexture(index, texture);\n return index;\n }\n\n}\n\n\ncc.sp.MultiHandler = MultiHandler;\n","cc.sp = {\n\n /**\n * 是否初始化完成\n */\n inited: false,\n\n /**\n * 版本号\n */\n version: \"1.0.0\",\n\n /**\n * 最大纹理插槽数量\n *\n * 固定为 8\n */\n MAX_MULTITEXTURE_NUM: -1,\n\n /**\n * 渲染组件是否默认自动切换至贴图关联的材质\n */\n autoSwitchMaterial: true,\n\n /**\n * 渲染组件是否默认参与动态合图\n */\n allowDynamicAtlas: true,\n\n /**\n * Label 组件是否默认启用渲染时进行缩放以适配高 DPI 屏幕\n */\n enableLabelRetina: true,\n\n /**\n * Label 组件渲染时进行缩放的缩放比例\n */\n labelRetinaScale: 1,\n\n /**\n * Char 图集会进行自动多纹理合批的数量\n */\n charAtlasAutoBatchCount: 1,\n\n /**\n * Char 图集是否在场景切换时清空\n */\n charAtlasAutoResetBeforeSceneLoad: true,\n\n /**\n * 内置的多纹理合批 Effect Asset\n */\n multi2dSpriteEffectAsset: null,\n\n /**\n * property index to name map\n */\n i2nMap: ['texture'],\n\n /**\n * property name to index map\n */\n n2iMap: { texture: 0 },\n\n /**\n * property index to name\n */\n propertyIndex2Name(index) {\n return this.i2nMap[index];\n },\n\n /**\n * property name to index\n */\n propertyName2Index(name) {\n return this.n2iMap[name];\n },\n\n};\n\n// 初始化\nfor (let i = 1; i < 8; i++) {\n const name = \"texture\" + (i + 1);\n cc.sp.i2nMap[i] = name;\n cc.sp.n2iMap[name] = i;\n}\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nrequire('../platform/CCSys');\n\nvar EXTNAME_RE = /(\\.[^\\.\\/\\?\\\\]*)(\\?.*)?$/;\nvar DIRNAME_RE = /((.*)(\\/|\\\\|\\\\\\\\))?(.*?\\..*$)?/;\nvar NORMALIZE_RE = /[^\\.\\/]+\\/\\.\\.\\//;\n\n/**\n * !#en The module provides utilities for working with file and directory paths\n * !#zh 用于处理文件与目录的路径的模块\n * @class path\n * @static\n */\ncc.path = /** @lends cc.path# */{\n /**\n * !#en Join strings to be a path.\n * !#zh 拼接字符串为 Path\n * @method join\n * @example {@link cocos2d/core/utils/CCPath/join.js}\n * @returns {String}\n */\n join: function () {\n var l = arguments.length;\n var result = \"\";\n for (var i = 0; i < l; i++) {\n result = (result + (result === \"\" ? \"\" : \"/\") + arguments[i]).replace(/(\\/|\\\\\\\\)$/, \"\");\n }\n return result;\n },\n\n /**\n * !#en Get the ext name of a path including '.', like '.png'.\n * !#zh 返回 Path 的扩展名,包括 '.',例如 '.png'。\n * @method extname\n * @example {@link cocos2d/core/utils/CCPath/extname.js}\n * @param {String} pathStr\n * @returns {*}\n */\n extname: function (pathStr) {\n var temp = EXTNAME_RE.exec(pathStr);\n return temp ? temp[1] : '';\n },\n\n /**\n * !#en Get the main name of a file name\n * !#zh 获取文件名的主名称\n * @method mainFileName\n * @param {String} fileName\n * @returns {String}\n * @deprecated\n */\n mainFileName: function (fileName) {\n if (fileName) {\n var idx = fileName.lastIndexOf(\".\");\n if (idx !== -1)\n return fileName.substring(0, idx);\n }\n return fileName;\n },\n\n /**\n * !#en Get the file name of a file path.\n * !#zh 获取文件路径的文件名。\n * @method basename\n * @example {@link cocos2d/core/utils/CCPath/basename.js}\n * @param {String} pathStr\n * @param {String} [extname]\n * @returns {*}\n */\n basename: function (pathStr, extname) {\n var index = pathStr.indexOf(\"?\");\n if (index > 0) pathStr = pathStr.substring(0, index);\n var reg = /(\\/|\\\\)([^\\/\\\\]+)$/g;\n var result = reg.exec(pathStr.replace(/(\\/|\\\\)$/, \"\"));\n if (!result) return pathStr;\n var baseName = result[2];\n if (extname && pathStr.substring(pathStr.length - extname.length).toLowerCase() === extname.toLowerCase())\n return baseName.substring(0, baseName.length - extname.length);\n return baseName;\n },\n\n /**\n * !#en Get dirname of a file path.\n * !#zh 获取文件路径的目录名。\n * @method dirname\n * @example {@link cocos2d/core/utils/CCPath/dirname.js}\n * @param {String} pathStr\n * @returns {*}\n */\n dirname: function (pathStr) {\n var temp = DIRNAME_RE.exec(pathStr);\n return temp ? temp[2] : '';\n },\n\n /**\n * !#en Change extname of a file path.\n * !#zh 更改文件路径的扩展名。\n * @method changeExtname\n * @example {@link cocos2d/core/utils/CCPath/changeExtname.js}\n * @param {String} pathStr\n * @param {String} [extname]\n * @returns {String}\n */\n changeExtname: function (pathStr, extname) {\n extname = extname || \"\";\n var index = pathStr.indexOf(\"?\");\n var tempStr = \"\";\n if (index > 0) {\n tempStr = pathStr.substring(index);\n pathStr = pathStr.substring(0, index);\n }\n index = pathStr.lastIndexOf(\".\");\n if (index < 0) return pathStr + extname + tempStr;\n return pathStr.substring(0, index) + extname + tempStr;\n },\n /**\n * !#en Change file name of a file path.\n * !#zh 更改文件路径的文件名。\n * @example {@link cocos2d/core/utils/CCPath/changeBasename.js}\n * @param {String} pathStr\n * @param {String} basename\n * @param {Boolean} [isSameExt]\n * @returns {String}\n */\n changeBasename: function (pathStr, basename, isSameExt) {\n if (basename.indexOf(\".\") === 0) return this.changeExtname(pathStr, basename);\n var index = pathStr.indexOf(\"?\");\n var tempStr = \"\";\n var ext = isSameExt ? this.extname(pathStr) : \"\";\n if (index > 0) {\n tempStr = pathStr.substring(index);\n pathStr = pathStr.substring(0, index);\n }\n index = pathStr.lastIndexOf(\"/\");\n index = index <= 0 ? 0 : index + 1;\n return pathStr.substring(0, index) + basename + ext + tempStr;\n },\n //todo make public after verification\n _normalize: function (url) {\n var oldUrl = url = String(url);\n\n //removing all ../\n do {\n oldUrl = url;\n url = url.replace(NORMALIZE_RE, \"\");\n } while (oldUrl.length !== url.length);\n return url;\n },\n\n // The platform-specific file separator. '\\\\' or '/'.\n sep: (cc.sys.os === cc.sys.OS_WINDOWS ? '\\\\' : '/'),\n\n // @param {string} path\n stripSep (path) {\n return path.replace(/[\\/\\\\]$/, '');\n }\n};\n\nmodule.exports = cc.path;","/****************************************************************************\n Copyright (c) 2008-2010 Ricardo Quesada\n Copyright (c) 2011-2012 cocos2d-x.org\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos2d-x.org\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * !#en\n * AffineTransform class represent an affine transform matrix. It's composed basically by translation, rotation, scale transformations.
\n * !#zh\n * AffineTransform 类代表一个仿射变换矩阵。它基本上是由平移旋转,缩放转变所组成。
\n * @class AffineTransform\n * @constructor\n * @param {Number} a\n * @param {Number} b\n * @param {Number} c\n * @param {Number} d\n * @param {Number} tx\n * @param {Number} ty\n * @see AffineTransform.create\n */\nvar AffineTransform = function (a, b, c, d, tx, ty) {\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.tx = tx;\n this.ty = ty;\n};\n\n/**\n * !#en Create a AffineTransform object with all contents in the matrix.\n * !#zh 用在矩阵中的所有内容创建一个 AffineTransform 对象。\n * @method create\n * @static\n * @param {Number} a\n * @param {Number} b\n * @param {Number} c\n * @param {Number} d\n * @param {Number} tx\n * @param {Number} ty\n * @return {AffineTransform}\n */\nAffineTransform.create = function (a, b, c, d, tx, ty) {\n return {a: a, b: b, c: c, d: d, tx: tx, ty: ty};\n};\n\n/**\n * !#en\n * Create a identity transformation matrix:
\n * [ 1, 0, 0,
\n * 0, 1, 0 ]\n * !#zh\n * 单位矩阵:
\n * [ 1, 0, 0,
\n * 0, 1, 0 ]\n *\n * @method identity\n * @static\n * @return {AffineTransform}\n */\nAffineTransform.identity = function () {\n return {a: 1.0, b: 0.0, c: 0.0, d: 1.0, tx: 0.0, ty: 0.0};\n};\n\n/**\n * !#en Clone a AffineTransform object from the specified transform.\n * !#zh 克隆指定的 AffineTransform 对象。\n * @method clone\n * @static\n * @param {AffineTransform} t\n * @return {AffineTransform}\n */\nAffineTransform.clone = function (t) {\n return {a: t.a, b: t.b, c: t.c, d: t.d, tx: t.tx, ty: t.ty};\n};\n\n/**\n * !#en\n * Concatenate a transform matrix to another\n * The results are reflected in the out affine transform\n * out = t1 * t2\n * This function is memory free, you should create the output affine transform by yourself and manage its memory.\n * !#zh\n * 拼接两个矩阵,将结果保存到 out 矩阵。这个函数不创建任何内存,你需要先创建 AffineTransform 对象用来存储结果,并作为第一个参数传入函数。\n * out = t1 * t2\n * @method concat\n * @static\n * @param {AffineTransform} out Out object to store the concat result\n * @param {AffineTransform} t1 The first transform object.\n * @param {AffineTransform} t2 The transform object to concatenate.\n * @return {AffineTransform} Out object with the result of concatenation.\n */\nAffineTransform.concat = function (out, t1, t2) {\n var a = t1.a, b = t1.b, c = t1.c, d = t1.d, tx = t1.tx, ty = t1.ty;\n out.a = a * t2.a + b * t2.c;\n out.b = a * t2.b + b * t2.d;\n out.c = c * t2.a + d * t2.c;\n out.d = c * t2.b + d * t2.d;\n out.tx = tx * t2.a + ty * t2.c + t2.tx;\n out.ty = tx * t2.b + ty * t2.d + t2.ty;\n return out;\n};\n\n/**\n * !#en Get the invert transform of an AffineTransform object.\n * This function is memory free, you should create the output affine transform by yourself and manage its memory.\n * !#zh 求逆矩阵。这个函数不创建任何内存,你需要先创建 AffineTransform 对象用来存储结果,并作为第一个参数传入函数。\n * @method invert\n * @static\n * @param {AffineTransform} out\n * @param {AffineTransform} t\n * @return {AffineTransform} Out object with inverted result.\n */\nAffineTransform.invert = function (out, t) {\n var a = t.a, b = t.b, c = t.c, d = t.d;\n var determinant = 1 / (a * d - b * c);\n var tx = t.tx, ty = t.ty;\n out.a = determinant * d;\n out.b = -determinant * b;\n out.c = -determinant * c;\n out.d = determinant * a;\n out.tx = determinant * (c * ty - d * tx);\n out.ty = determinant * (b * tx - a * ty);\n return out;\n};\n\n/**\n * !#en Get an AffineTransform object from a given matrix 4x4.\n * This function is memory free, you should create the output affine transform by yourself and manage its memory.\n * !#zh 从一个 4x4 Matrix 获取 AffineTransform 对象。这个函数不创建任何内存,你需要先创建 AffineTransform 对象用来存储结果,并作为第一个参数传入函数。\n * @method invert\n * @static\n * @param {AffineTransform} out\n * @param {Mat4} mat\n * @return {AffineTransform} Out object with inverted result.\n */\nAffineTransform.fromMat4 = function (out, mat) {\n let matm = mat.m;\n out.a = matm[0];\n out.b = matm[1];\n out.c = matm[4];\n out.d = matm[5];\n out.tx = matm[12];\n out.ty = matm[13];\n return out;\n};\n\n/**\n * !#en Apply the affine transformation on a point.\n * This function is memory free, you should create the output Vec2 by yourself and manage its memory.\n * !#zh 对一个点应用矩阵变换。这个函数不创建任何内存,你需要先创建一个 Vec2 对象用来存储结果,并作为第一个参数传入函数。\n * @method transformVec2\n * @static\n * @param {Vec2} out The output point to store the result\n * @param {Vec2|Number} point Point to apply transform or x.\n * @param {AffineTransform|Number} transOrY transform matrix or y.\n * @param {AffineTransform} [t] transform matrix.\n * @return {Vec2}\n */\nAffineTransform.transformVec2 = function (out, point, transOrY, t) {\n var x, y;\n if (t === undefined) {\n t = transOrY;\n x = point.x;\n y = point.y;\n } else {\n x = point;\n y = transOrY;\n }\n out.x = t.a * x + t.c * y + t.tx;\n out.y = t.b * x + t.d * y + t.ty;\n return out;\n};\n\n/**\n * !#en Apply the affine transformation on a size.\n * This function is memory free, you should create the output Size by yourself and manage its memory.\n * !#zh 应用仿射变换矩阵到 Size 上。这个函数不创建任何内存,你需要先创建一个 Size 对象用来存储结果,并作为第一个参数传入函数。\n * @method transformSize\n * @static\n * @param {Size} out The output point to store the result\n * @param {Size} size\n * @param {AffineTransform} t\n * @return {Size}\n */\nAffineTransform.transformSize = function (out, size, t) {\n out.width = t.a * size.width + t.c * size.height;\n out.height = t.b * size.width + t.d * size.height;\n return out;\n};\n\n/**\n * !#en Apply the affine transformation on a rect.\n * This function is memory free, you should create the output Rect by yourself and manage its memory.\n * !#zh 应用仿射变换矩阵到 Rect 上。这个函数不创建任何内存,你需要先创建一个 Rect 对象用来存储结果,并作为第一个参数传入函数。\n * @method transformRect\n * @static\n * @param {Rect} out\n * @param {Rect} rect\n * @param {AffineTransform} anAffineTransform\n * @return {Rect}\n */\nAffineTransform.transformRect = function(out, rect, t){\n var ol = rect.x;\n var ob = rect.y;\n var or = ol + rect.width;\n var ot = ob + rect.height;\n var lbx = t.a * ol + t.c * ob + t.tx;\n var lby = t.b * ol + t.d * ob + t.ty;\n var rbx = t.a * or + t.c * ob + t.tx;\n var rby = t.b * or + t.d * ob + t.ty;\n var ltx = t.a * ol + t.c * ot + t.tx;\n var lty = t.b * ol + t.d * ot + t.ty;\n var rtx = t.a * or + t.c * ot + t.tx;\n var rty = t.b * or + t.d * ot + t.ty;\n\n var minX = Math.min(lbx, rbx, ltx, rtx);\n var maxX = Math.max(lbx, rbx, ltx, rtx);\n var minY = Math.min(lby, rby, lty, rty);\n var maxY = Math.max(lby, rby, lty, rty);\n\n out.x = minX;\n out.y = minY;\n out.width = maxX - minX;\n out.height = maxY - minY;\n return out;\n};\n\n/**\n * !#en Apply the affine transformation on a rect, and truns to an Oriented Bounding Box.\n * This function is memory free, you should create the output vectors by yourself and manage their memory.\n * !#zh 应用仿射变换矩阵到 Rect 上, 并转换为有向包围盒。这个函数不创建任何内存,你需要先创建包围盒的四个 Vector 对象用来存储结果,并作为前四个参数传入函数。\n * @method transformObb\n * @static\n * @param {Vec2} out_bl\n * @param {Vec2} out_tl\n * @param {Vec2} out_tr\n * @param {Vec2} out_br\n * @param {Rect} rect\n * @param {AffineTransform} anAffineTransform\n */\nAffineTransform.transformObb = function (out_bl, out_tl, out_tr, out_br, rect, anAffineTransform) {\n var x = rect.x;\n var y = rect.y;\n var width = rect.width;\n var height = rect.height;\n\n var tx = anAffineTransform.a * x + anAffineTransform.c * y + anAffineTransform.tx;\n var ty = anAffineTransform.b * x + anAffineTransform.d * y + anAffineTransform.ty;\n var xa = anAffineTransform.a * width;\n var xb = anAffineTransform.b * width;\n var yc = anAffineTransform.c * height;\n var yd = anAffineTransform.d * height;\n\n out_tl.x = tx;\n out_tl.y = ty;\n out_tr.x = xa + tx;\n out_tr.y = xb + ty;\n out_bl.x = yc + tx;\n out_bl.y = yd + ty;\n out_br.x = xa + yc + tx;\n out_br.y = xb + yd + ty;\n};\n\ncc.AffineTransform = module.exports = AffineTransform;","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst Flags = require('../platform/CCObject').Flags;\nconst misc = require('./misc');\nconst js = require('../platform/js');\nconst IdGenerater = require('../platform/id-generater');\nconst eventManager = require('../event-manager');\nconst RenderFlow = require('../renderer/render-flow');\n\nconst Destroying = Flags.Destroying;\nconst DontDestroy = Flags.DontDestroy;\nconst Deactivating = Flags.Deactivating; \n\nconst CHILD_ADDED = 'child-added';\nconst CHILD_REMOVED = 'child-removed';\n\nvar idGenerater = new IdGenerater('Node');\n\nfunction getConstructor(typeOrClassName) {\n if (!typeOrClassName) {\n cc.errorID(3804);\n return null;\n }\n if (typeof typeOrClassName === 'string') {\n return js.getClassByName(typeOrClassName);\n }\n\n return typeOrClassName;\n}\n\nfunction findComponent(node, constructor) {\n if (constructor._sealed) {\n for (let i = 0; i < node._components.length; ++i) {\n let comp = node._components[i];\n if (comp.constructor === constructor) {\n return comp;\n }\n }\n }\n else {\n for (let i = 0; i < node._components.length; ++i) {\n let comp = node._components[i];\n if (comp instanceof constructor) {\n return comp;\n }\n }\n }\n return null;\n}\n\nfunction findComponents(node, constructor, components) {\n if (constructor._sealed) {\n for (let i = 0; i < node._components.length; ++i) {\n let comp = node._components[i];\n if (comp.constructor === constructor) {\n components.push(comp);\n }\n }\n }\n else {\n for (let i = 0; i < node._components.length; ++i) {\n let comp = node._components[i];\n if (comp instanceof constructor) {\n components.push(comp);\n }\n }\n }\n}\n\nfunction findChildComponent(children, constructor) {\n for (var i = 0; i < children.length; ++i) {\n var node = children[i];\n var comp = findComponent(node, constructor);\n if (comp) {\n return comp;\n }\n else if (node._children.length > 0) {\n comp = findChildComponent(node._children, constructor);\n if (comp) {\n return comp;\n }\n }\n }\n return null;\n}\n\nfunction findChildComponents(children, constructor, components) {\n for (var i = 0; i < children.length; ++i) {\n var node = children[i];\n findComponents(node, constructor, components);\n if (node._children.length > 0) {\n findChildComponents(node._children, constructor, components);\n }\n }\n}\n\n/**\n * A base node for CCNode, it will:\n * - maintain scene hierarchy and active logic\n * - notifications if some properties changed\n * - define some interfaces shares between CCNode\n * - define machanisms for Enity Component Systems\n * - define prefab and serialize functions\n *\n * @class _BaseNode\n * @extends Object\n * @uses EventTarget\n * @constructor\n * @param {String} [name]\n * @private\n */\nvar BaseNode = cc.Class({\n name: 'cc._BaseNode',\n extends: cc.Object,\n\n properties: {\n // SERIALIZABLE\n\n _parent: null,\n _children: [],\n\n _active: true,\n\n /**\n * @property _components\n * @type {Component[]}\n * @default []\n * @readOnly\n * @private\n */\n _components: [],\n\n /**\n * The PrefabInfo object\n * @property _prefab\n * @type {PrefabInfo}\n * @private\n */\n _prefab: null,\n\n /**\n * If true, the node is an persist node which won't be destroyed during scene transition.\n * If false, the node will be destroyed automatically when loading a new scene. Default is false.\n * @property _persistNode\n * @type {Boolean}\n * @default false\n * @private\n */\n _persistNode: {\n get () {\n return (this._objFlags & DontDestroy) > 0;\n },\n set (value) {\n if (value) {\n this._objFlags |= DontDestroy;\n }\n else {\n this._objFlags &= ~DontDestroy;\n }\n }\n },\n\n // API\n\n /**\n * !#en Name of node.\n * !#zh 该节点名称。\n * @property name\n * @type {String}\n * @example\n * node.name = \"New Node\";\n * cc.log(\"Node Name: \" + node.name);\n */\n name: {\n get () {\n return this._name;\n },\n set (value) {\n if (CC_DEV && value.indexOf('/') !== -1) {\n cc.errorID(1632);\n return;\n }\n this._name = value;\n if (CC_JSB && CC_NATIVERENDERER) {\n this._proxy.setName(this._name);\n }\n },\n },\n\n /**\n * !#en The uuid for editor, will be stripped before building project.\n * !#zh 主要用于编辑器的 uuid,在编辑器下可用于持久化存储,在项目构建之后将变成自增的 id。\n * @property uuid\n * @type {String}\n * @readOnly\n * @example\n * cc.log(\"Node Uuid: \" + node.uuid);\n */\n uuid: {\n get () {\n return this._id;\n }\n },\n\n /**\n * !#en All children nodes.\n * !#zh 节点的所有子节点。\n * @property children\n * @type {Node[]}\n * @readOnly\n * @example\n * var children = node.children;\n * for (var i = 0; i < children.length; ++i) {\n * cc.log(\"Node: \" + children[i]);\n * }\n */\n children: {\n get () {\n return this._children;\n }\n },\n\n /**\n * !#en All children nodes.\n * !#zh 节点的子节点数量。\n * @property childrenCount\n * @type {Number}\n * @readOnly\n * @example\n * var count = node.childrenCount;\n * cc.log(\"Node Children Count: \" + count);\n */\n childrenCount: {\n get () {\n return this._children.length;\n }\n },\n\n /**\n * !#en\n * The local active state of this node.
\n * Note that a Node may be inactive because a parent is not active, even if this returns true.
\n * Use {{#crossLink \"Node/activeInHierarchy:property\"}}{{/crossLink}} if you want to check if the Node is actually treated as active in the scene.\n * !#zh\n * 当前节点的自身激活状态。
\n * 值得注意的是,一个节点的父节点如果不被激活,那么即使它自身设为激活,它仍然无法激活。
\n * 如果你想检查节点在场景中实际的激活状态可以使用 {{#crossLink \"Node/activeInHierarchy:property\"}}{{/crossLink}}。\n * @property active\n * @type {Boolean}\n * @default true\n * @example\n * node.active = false;\n */\n active: {\n get () {\n return this._active;\n },\n set (value) {\n value = !!value;\n if (this._active !== value) {\n this._active = value;\n var parent = this._parent;\n if (parent) {\n var couldActiveInScene = parent._activeInHierarchy;\n if (couldActiveInScene) {\n cc.director._nodeActivator.activateNode(this, value);\n }\n }\n }\n }\n },\n\n /**\n * !#en Indicates whether this node is active in the scene.\n * !#zh 表示此节点是否在场景中激活。\n * @property activeInHierarchy\n * @type {Boolean}\n * @example\n * cc.log(\"activeInHierarchy: \" + node.activeInHierarchy);\n */\n activeInHierarchy: {\n get () {\n return this._activeInHierarchy;\n }\n },\n },\n\n /**\n * @method constructor\n * @param {String} [name]\n */\n ctor (name) {\n this._name = name !== undefined ? name : 'New Node';\n this._activeInHierarchy = false;\n this._id = CC_EDITOR ? Editor.Utils.UuidUtils.uuid() : idGenerater.getNewId();\n\n cc.director._scheduler && cc.director._scheduler.enableForTarget(this);\n\n /**\n * Register all related EventTargets,\n * all event callbacks will be removed in _onPreDestroy\n * @property __eventTargets\n * @type {EventTarget[]}\n * @private\n */\n this.__eventTargets = [];\n },\n /** \n * !#en The parent of the node.\n * !#zh 该节点的父节点。\n * @property {Node} parent\n * @example \n * cc.log(\"Node Parent: \" + node.parent);\n */\n\n /**\n * !#en Get parent of the node.\n * !#zh 获取该节点的父节点。\n * @method getParent\n * @return {Node}\n * @example\n * var parent = this.node.getParent();\n */\n getParent () {\n return this._parent;\n },\n\n /**\n * !#en Set parent of the node.\n * !#zh 设置该节点的父节点。\n * @method setParent\n * @param {Node} value\n * @example\n * node.setParent(newNode);\n */\n setParent (value) {\n if (this._parent === value) {\n return;\n }\n if (CC_EDITOR && cc.engine && !cc.engine.isPlaying) {\n if (_Scene.DetectConflict.beforeAddChild(this, value)) {\n return;\n }\n }\n var oldParent = this._parent;\n if (CC_DEBUG && oldParent && (oldParent._objFlags & Deactivating)) {\n cc.errorID(3821);\n }\n this._parent = value || null;\n\n this._onSetParent(value);\n\n if (value) {\n if (CC_DEBUG && (value._objFlags & Deactivating)) {\n cc.errorID(3821);\n }\n eventManager._setDirtyForNode(this);\n value._children.push(this);\n value.emit && value.emit(CHILD_ADDED, this);\n value._renderFlag |= RenderFlow.FLAG_CHILDREN;\n }\n if (oldParent) {\n if (!(oldParent._objFlags & Destroying)) {\n var removeAt = oldParent._children.indexOf(this);\n if (CC_DEV && removeAt < 0) {\n return cc.errorID(1633);\n }\n oldParent._children.splice(removeAt, 1);\n oldParent.emit && oldParent.emit(CHILD_REMOVED, this);\n this._onHierarchyChanged(oldParent);\n\n if (oldParent._children.length === 0) {\n oldParent._renderFlag &= ~RenderFlow.FLAG_CHILDREN;\n }\n }\n }\n else if (value) {\n this._onHierarchyChanged(null);\n }\n },\n\n // ABSTRACT INTERFACES\n\n /**\n * !#en\n * Properties configuration function
\n * All properties in attrs will be set to the node,
\n * when the setter of the node is available,
\n * the property will be set via setter function.
\n * !#zh 属性配置函数。在 attrs 的所有属性将被设置为节点属性。\n * @method attr\n * @param {Object} attrs - Properties to be set to node\n * @example\n * var attrs = { key: 0, num: 100 };\n * node.attr(attrs);\n */\n attr (attrs) {\n js.mixin(this, attrs);\n },\n\n // composition: GET\n\n /**\n * !#en Returns a child from the container given its uuid.\n * !#zh 通过 uuid 获取节点的子节点。\n * @method getChildByUuid\n * @param {String} uuid - The uuid to find the child node.\n * @return {Node} a Node whose uuid equals to the input parameter\n * @example\n * var child = node.getChildByUuid(uuid);\n */\n getChildByUuid (uuid) {\n if (!uuid) {\n cc.log(\"Invalid uuid\");\n return null;\n }\n\n var locChildren = this._children;\n for (var i = 0, len = locChildren.length; i < len; i++) {\n if (locChildren[i]._id === uuid)\n return locChildren[i];\n }\n return null;\n },\n\n /**\n * !#en Returns a child from the container given its name.\n * !#zh 通过名称获取节点的子节点。\n * @method getChildByName\n * @param {String} name - A name to find the child node.\n * @return {Node} a CCNode object whose name equals to the input parameter\n * @example\n * var child = node.getChildByName(\"Test Node\");\n */\n getChildByName (name) {\n if (!name) {\n cc.log(\"Invalid name\");\n return null;\n }\n\n var locChildren = this._children;\n for (var i = 0, len = locChildren.length; i < len; i++) {\n if (locChildren[i]._name === name)\n return locChildren[i];\n }\n return null;\n },\n\n // composition: ADD\n\n addChild (child) {\n\n if (CC_DEV && !(child instanceof cc._BaseNode)) {\n return cc.errorID(1634, cc.js.getClassName(child));\n }\n cc.assertID(child, 1606);\n cc.assertID(child._parent === null, 1605);\n\n // invokes the parent setter\n child.setParent(this);\n\n },\n\n /**\n * !#en\n * Inserts a child to the node at a specified index.\n * !#zh\n * 插入子节点到指定位置\n * @method insertChild\n * @param {Node} child - the child node to be inserted\n * @param {Number} siblingIndex - the sibling index to place the child in\n * @example\n * node.insertChild(child, 2);\n */\n insertChild (child, siblingIndex) {\n child.parent = this;\n child.setSiblingIndex(siblingIndex);\n },\n\n // HIERARCHY METHODS\n\n /**\n * !#en Get the sibling index.\n * !#zh 获取同级索引。\n * @method getSiblingIndex\n * @return {Number}\n * @example\n * var index = node.getSiblingIndex();\n */\n getSiblingIndex () {\n if (this._parent) {\n return this._parent._children.indexOf(this);\n }\n else {\n return 0;\n }\n },\n\n /**\n * !#en Set the sibling index of this node.\n * !#zh 设置节点同级索引。\n * @method setSiblingIndex\n * @param {Number} index\n * @example\n * node.setSiblingIndex(1);\n */\n setSiblingIndex (index) {\n if (!this._parent) {\n return;\n }\n if (this._parent._objFlags & Deactivating) {\n cc.errorID(3821);\n return;\n }\n var siblings = this._parent._children;\n index = index !== -1 ? index : siblings.length - 1;\n var oldIndex = siblings.indexOf(this);\n if (index !== oldIndex) {\n siblings.splice(oldIndex, 1);\n if (index < siblings.length) {\n siblings.splice(index, 0, this);\n }\n else {\n siblings.push(this);\n }\n this._onSiblingIndexChanged && this._onSiblingIndexChanged(index);\n }\n },\n\n /**\n * !#en Walk though the sub children tree of the current node.\n * Each node, including the current node, in the sub tree will be visited two times, before all children and after all children.\n * This function call is not recursive, it's based on stack.\n * Please don't walk any other node inside the walk process.\n * !#zh 遍历该节点的子树里的所有节点并按规则执行回调函数。\n * 对子树中的所有节点,包含当前节点,会执行两次回调,prefunc 会在访问它的子节点之前调用,postfunc 会在访问所有子节点之后调用。\n * 这个函数的实现不是基于递归的,而是基于栈展开递归的方式。\n * 请不要在 walk 过程中对任何其他的节点嵌套执行 walk。\n * @method walk\n * @param {Function} prefunc The callback to process node when reach the node for the first time\n * @param {_BaseNode} prefunc.target The current visiting node\n * @param {Function} postfunc The callback to process node when re-visit the node after walked all children in its sub tree\n * @param {_BaseNode} postfunc.target The current visiting node\n * @example\n * node.walk(function (target) {\n * console.log('Walked through node ' + target.name + ' for the first time');\n * }, function (target) {\n * console.log('Walked through node ' + target.name + ' after walked all children in its sub tree');\n * });\n */\n walk (prefunc, postfunc) {\n var BaseNode = cc._BaseNode;\n var index = 1;\n var children, child, curr, i, afterChildren;\n var stack = BaseNode._stacks[BaseNode._stackId];\n if (!stack) {\n stack = [];\n BaseNode._stacks.push(stack);\n }\n BaseNode._stackId++;\n\n stack.length = 0;\n stack[0] = this;\n var parent = null;\n afterChildren = false;\n while (index) {\n index--;\n curr = stack[index];\n if (!curr) {\n continue;\n }\n if (!afterChildren && prefunc) {\n // pre call\n prefunc(curr);\n }\n else if (afterChildren && postfunc) {\n // post call\n postfunc(curr);\n }\n \n // Avoid memory leak\n stack[index] = null;\n // Do not repeatly visit child tree, just do post call and continue walk\n if (afterChildren) {\n if (parent === this._parent) break;\n afterChildren = false;\n }\n else {\n // Children not proceeded and has children, proceed to child tree\n if (curr._children.length > 0) {\n parent = curr;\n children = curr._children;\n i = 0;\n stack[index] = children[i];\n index++;\n }\n // No children, then repush curr to be walked for post func\n else {\n stack[index] = curr;\n index++;\n afterChildren = true;\n }\n continue;\n }\n // curr has no sub tree, so look into the siblings in parent children\n if (children) {\n i++;\n // Proceed to next sibling in parent children\n if (children[i]) {\n stack[index] = children[i];\n index++;\n }\n // No children any more in this sub tree, go upward\n else if (parent) {\n stack[index] = parent;\n index++;\n // Setup parent walk env\n afterChildren = true;\n if (parent._parent) {\n children = parent._parent._children;\n i = children.indexOf(parent);\n parent = parent._parent;\n }\n else {\n // At root\n parent = null;\n children = null;\n }\n\n // ERROR\n if (i < 0) {\n break;\n }\n }\n }\n }\n stack.length = 0;\n BaseNode._stackId--;\n },\n\n cleanup () {\n\n },\n\n /**\n * !#en\n * Remove itself from its parent node. If cleanup is `true`, then also remove all events and actions.
\n * If the cleanup parameter is not passed, it will force a cleanup, so it is recommended that you always pass in the `false` parameter when calling this API.
\n * If the node orphan, then nothing happens.\n * !#zh\n * 从父节点中删除该节点。如果不传入 cleanup 参数或者传入 `true`,那么这个节点上所有绑定的事件、action 都会被删除。
\n * 因此建议调用这个 API 时总是传入 `false` 参数。
\n * 如果这个节点是一个孤节点,那么什么都不会发生。\n * @method removeFromParent\n * @param {Boolean} [cleanup=true] - true if all actions and callbacks on this node should be removed, false otherwise.\n * @example\n * node.removeFromParent();\n * node.removeFromParent(false);\n */\n removeFromParent (cleanup) {\n if (this._parent) {\n if (cleanup === undefined)\n cleanup = true;\n this._parent.removeChild(this, cleanup);\n }\n },\n\n /**\n * !#en\n * Removes a child from the container. It will also cleanup all running actions depending on the cleanup parameter.

\n * If the cleanup parameter is not passed, it will force a cleanup.
\n * \"remove\" logic MUST only be on this method
\n * If a class wants to extend the 'removeChild' behavior it only needs
\n * to override this method.\n * !#zh\n * 移除节点中指定的子节点,是否需要清理所有正在运行的行为取决于 cleanup 参数。
\n * 如果 cleanup 参数不传入,默认为 true 表示清理。
\n * @method removeChild\n * @param {Node} child - The child node which will be removed.\n * @param {Boolean} [cleanup=true] - true if all running actions and callbacks on the child node will be cleanup, false otherwise.\n * @example\n * node.removeChild(newNode);\n * node.removeChild(newNode, false);\n */\n removeChild (child, cleanup) {\n if (this._children.indexOf(child) > -1) {\n // If you don't do cleanup, the child's actions will not get removed and the\n if (cleanup || cleanup === undefined) {\n child.cleanup();\n }\n // invoke the parent setter\n child.parent = null;\n }\n },\n\n /**\n * !#en\n * Removes all children from the container and do a cleanup all running actions depending on the cleanup parameter.
\n * If the cleanup parameter is not passed, it will force a cleanup.\n * !#zh\n * 移除节点所有的子节点,是否需要清理所有正在运行的行为取决于 cleanup 参数。
\n * 如果 cleanup 参数不传入,默认为 true 表示清理。\n * @method removeAllChildren\n * @param {Boolean} [cleanup=true] - true if all running actions on all children nodes should be cleanup, false otherwise.\n * @example\n * node.removeAllChildren();\n * node.removeAllChildren(false);\n */\n removeAllChildren (cleanup) {\n // not using detachChild improves speed here\n var children = this._children;\n if (cleanup === undefined)\n cleanup = true;\n for (var i = children.length - 1; i >= 0; i--) {\n var node = children[i];\n if (node) {\n // If you don't do cleanup, the node's actions will not get removed and the\n if (cleanup)\n node.cleanup();\n\n node.parent = null;\n }\n }\n this._children.length = 0;\n },\n\n /**\n * !#en Is this node a child of the given node?\n * !#zh 是否是指定节点的子节点?\n * @method isChildOf\n * @param {Node} parent\n * @return {Boolean} - Returns true if this node is a child, deep child or identical to the given node.\n * @example\n * node.isChildOf(newNode);\n */\n isChildOf (parent) {\n var child = this;\n do {\n if (child === parent) {\n return true;\n }\n child = child._parent;\n }\n while (child);\n return false;\n },\n\n // COMPONENT\n\n /**\n * !#en\n * Returns the component of supplied type if the node has one attached, null if it doesn't.
\n * You can also get component in the node by passing in the name of the script.\n * !#zh\n * 获取节点上指定类型的组件,如果节点有附加指定类型的组件,则返回,如果没有则为空。
\n * 传入参数也可以是脚本的名称。\n * @method getComponent\n * @param {Function|String} typeOrClassName\n * @return {Component}\n * @example\n * // get sprite component\n * var sprite = node.getComponent(cc.Sprite);\n * // get custom test class\n * var test = node.getComponent(\"Test\");\n * @typescript\n * getComponent(type: {prototype: T}): T\n * getComponent(className: string): any\n */\n getComponent (typeOrClassName) {\n var constructor = getConstructor(typeOrClassName);\n if (constructor) {\n return findComponent(this, constructor);\n }\n return null;\n },\n\n /**\n * !#en Returns all components of supplied type in the node.\n * !#zh 返回节点上指定类型的所有组件。\n * @method getComponents\n * @param {Function|String} typeOrClassName\n * @return {Component[]}\n * @example\n * var sprites = node.getComponents(cc.Sprite);\n * var tests = node.getComponents(\"Test\");\n * @typescript\n * getComponents(type: {prototype: T}): T[]\n * getComponents(className: string): any[]\n */\n getComponents (typeOrClassName) {\n var constructor = getConstructor(typeOrClassName), components = [];\n if (constructor) {\n findComponents(this, constructor, components);\n }\n return components;\n },\n\n /**\n * !#en Returns the component of supplied type in any of its children using depth first search.\n * !#zh 递归查找所有子节点中第一个匹配指定类型的组件。\n * @method getComponentInChildren\n * @param {Function|String} typeOrClassName\n * @return {Component}\n * @example\n * var sprite = node.getComponentInChildren(cc.Sprite);\n * var Test = node.getComponentInChildren(\"Test\");\n * @typescript\n * getComponentInChildren(type: {prototype: T}): T\n * getComponentInChildren(className: string): any\n */\n getComponentInChildren (typeOrClassName) {\n var constructor = getConstructor(typeOrClassName);\n if (constructor) {\n return findChildComponent(this._children, constructor);\n }\n return null;\n },\n\n /**\n * !#en Returns all components of supplied type in self or any of its children.\n * !#zh 递归查找自身或所有子节点中指定类型的组件\n * @method getComponentsInChildren\n * @param {Function|String} typeOrClassName\n * @return {Component[]}\n * @example\n * var sprites = node.getComponentsInChildren(cc.Sprite);\n * var tests = node.getComponentsInChildren(\"Test\");\n * @typescript\n * getComponentsInChildren(type: {prototype: T}): T[]\n * getComponentsInChildren(className: string): any[]\n */\n getComponentsInChildren (typeOrClassName) {\n var constructor = getConstructor(typeOrClassName), components = [];\n if (constructor) {\n findComponents(this, constructor, components);\n findChildComponents(this._children, constructor, components);\n }\n return components;\n },\n\n _checkMultipleComp: (CC_EDITOR || CC_PREVIEW) && function (ctor) {\n var existing = this.getComponent(ctor._disallowMultiple);\n if (existing) {\n if (existing.constructor === ctor) {\n cc.errorID(3805, js.getClassName(ctor), this._name);\n }\n else {\n cc.errorID(3806, js.getClassName(ctor), this._name, js.getClassName(existing));\n }\n return false;\n }\n return true;\n },\n\n /**\n * !#en Adds a component class to the node. You can also add component to node by passing in the name of the script.\n * !#zh 向节点添加一个指定类型的组件类,你还可以通过传入脚本的名称来添加组件。\n * @method addComponent\n * @param {Function|String} typeOrClassName - The constructor or the class name of the component to add\n * @return {Component} - The newly added component\n * @example\n * var sprite = node.addComponent(cc.Sprite);\n * var test = node.addComponent(\"Test\");\n * @typescript\n * addComponent(type: {new(): T}): T\n * addComponent(className: string): any\n */\n addComponent (typeOrClassName) {\n if (CC_EDITOR && (this._objFlags & Destroying)) {\n cc.error('isDestroying');\n return null;\n }\n\n // get component\n\n var constructor;\n if (typeof typeOrClassName === 'string') {\n constructor = js.getClassByName(typeOrClassName);\n if (!constructor) {\n cc.errorID(3807, typeOrClassName);\n if (cc._RFpeek()) {\n cc.errorID(3808, typeOrClassName);\n }\n return null;\n }\n }\n else {\n if (!typeOrClassName) {\n cc.errorID(3804);\n return null;\n }\n constructor = typeOrClassName;\n }\n\n // check component\n\n if (typeof constructor !== 'function') {\n cc.errorID(3809);\n return null;\n }\n if (!js.isChildClassOf(constructor, cc.Component)) {\n cc.errorID(3810);\n return null;\n }\n\n if ((CC_EDITOR || CC_PREVIEW) && constructor._disallowMultiple) {\n if (!this._checkMultipleComp(constructor)) {\n return null;\n }\n }\n\n // check requirement\n\n var ReqComp = constructor._requireComponent;\n if (ReqComp && !this.getComponent(ReqComp)) {\n var depended = this.addComponent(ReqComp);\n if (!depended) {\n // depend conflicts\n return null;\n }\n }\n\n //// check conflict\n //\n //if (CC_EDITOR && !_Scene.DetectConflict.beforeAddComponent(this, constructor)) {\n // return null;\n //}\n\n //\n\n var component = new constructor();\n component.node = this;\n this._components.push(component);\n if ((CC_EDITOR || CC_TEST) && cc.engine && (this._id in cc.engine.attachedObjsForEditor)) {\n cc.engine.attachedObjsForEditor[component._id] = component;\n }\n if (this._activeInHierarchy) {\n cc.director._nodeActivator.activateComp(component);\n }\n\n return component;\n },\n\n /**\n * This api should only used by undo system\n * @method _addComponentAt\n * @param {Component} comp\n * @param {Number} index\n * @private\n */\n _addComponentAt: CC_EDITOR && function (comp, index) {\n if (this._objFlags & Destroying) {\n return cc.error('isDestroying');\n }\n if (!(comp instanceof cc.Component)) {\n return cc.errorID(3811);\n }\n if (index > this._components.length) {\n return cc.errorID(3812);\n }\n\n // recheck attributes because script may changed\n var ctor = comp.constructor;\n if (ctor._disallowMultiple) {\n if (!this._checkMultipleComp(ctor)) {\n return;\n }\n }\n var ReqComp = ctor._requireComponent;\n if (ReqComp && !this.getComponent(ReqComp)) {\n if (index === this._components.length) {\n // If comp should be last component, increase the index because required component added\n ++index;\n }\n var depended = this.addComponent(ReqComp);\n if (!depended) {\n // depend conflicts\n return null;\n }\n }\n\n comp.node = this;\n this._components.splice(index, 0, comp);\n if ((CC_EDITOR || CC_TEST) && cc.engine && (this._id in cc.engine.attachedObjsForEditor)) {\n cc.engine.attachedObjsForEditor[comp._id] = comp;\n }\n if (this._activeInHierarchy) {\n cc.director._nodeActivator.activateComp(comp);\n }\n },\n\n /**\n * !#en\n * Removes a component identified by the given name or removes the component object given.\n * You can also use component.destroy() if you already have the reference.\n * !#zh\n * 删除节点上的指定组件,传入参数可以是一个组件构造函数或组件名,也可以是已经获得的组件引用。\n * 如果你已经获得组件引用,你也可以直接调用 component.destroy()\n * @method removeComponent\n * @param {String|Function|Component} component - The need remove component.\n * @deprecated please destroy the component to remove it.\n * @example\n * node.removeComponent(cc.Sprite);\n * var Test = require(\"Test\");\n * node.removeComponent(Test);\n */\n removeComponent (component) {\n if (!component) {\n cc.errorID(3813);\n return;\n }\n if (!(component instanceof cc.Component)) {\n component = this.getComponent(component);\n }\n if (component) {\n component.destroy();\n }\n },\n\n /**\n * @method _getDependComponent\n * @param {Component} depended\n * @return {Component}\n * @private\n */\n _getDependComponent: CC_EDITOR && function (depended) {\n for (var i = 0; i < this._components.length; i++) {\n var comp = this._components[i];\n if (comp !== depended && comp.isValid && !cc.Object._willDestroy(comp)) {\n var depend = comp.constructor._requireComponent;\n if (depend && depended instanceof depend) {\n return comp;\n }\n }\n }\n return null;\n },\n\n // do remove component, only used internally\n _removeComponent (component) {\n if (!component) {\n cc.errorID(3814);\n return;\n }\n\n if (!(this._objFlags & Destroying)) {\n var i = this._components.indexOf(component);\n if (i !== -1) {\n this._components.splice(i, 1);\n if ((CC_EDITOR || CC_TEST) && cc.engine) {\n delete cc.engine.attachedObjsForEditor[component._id];\n }\n }\n else if (component.node !== this) {\n cc.errorID(3815);\n }\n }\n },\n\n destroy () {\n if (cc.Object.prototype.destroy.call(this)) {\n this.active = false;\n }\n },\n\n /**\n * !#en\n * Destroy all children from the node, and release all their own references to other objects.
\n * Actual destruct operation will delayed until before rendering.\n * !#zh\n * 销毁所有子节点,并释放所有它们对其它对象的引用。
\n * 实际销毁操作会延迟到当前帧渲染前执行。\n * @method destroyAllChildren\n * @example\n * node.destroyAllChildren();\n */\n destroyAllChildren () {\n var children = this._children;\n for (var i = 0; i < children.length; ++i) {\n children[i].destroy();\n }\n },\n\n _onSetParent (value) {},\n _onPostActivated () {},\n _onBatchCreated (dontSyncChildPrefab) {},\n\n _onHierarchyChanged (oldParent) {\n var newParent = this._parent;\n if (this._persistNode && !(newParent instanceof cc.Scene)) {\n cc.game.removePersistRootNode(this);\n if (CC_EDITOR) {\n cc.warnID(1623);\n }\n }\n\n if (CC_EDITOR || CC_TEST) {\n var scene = cc.director.getScene();\n var inCurrentSceneBefore = oldParent && oldParent.isChildOf(scene);\n var inCurrentSceneNow = newParent && newParent.isChildOf(scene);\n if (!inCurrentSceneBefore && inCurrentSceneNow) {\n // attached\n this._registerIfAttached(true);\n }\n else if (inCurrentSceneBefore && !inCurrentSceneNow) {\n // detached\n this._registerIfAttached(false);\n }\n\n // update prefab\n var newPrefabRoot = newParent && newParent._prefab && newParent._prefab.root;\n var myPrefabInfo = this._prefab;\n var PrefabUtils = Editor.require('scene://utils/prefab');\n if (myPrefabInfo) {\n if (newPrefabRoot) {\n if (myPrefabInfo.root !== newPrefabRoot) {\n if (myPrefabInfo.root === this) {\n // nest prefab\n myPrefabInfo.fileId || (myPrefabInfo.fileId = Editor.Utils.UuidUtils.uuid());\n PrefabUtils.checkCircularReference(myPrefabInfo.root);\n }\n else {\n // change prefab\n PrefabUtils.linkPrefab(newPrefabRoot._prefab.asset, newPrefabRoot, this);\n PrefabUtils.checkCircularReference(newPrefabRoot);\n }\n }\n }\n else if (myPrefabInfo.root === this) {\n // nested prefab to root prefab\n myPrefabInfo.fileId = ''; // root prefab doesn't have fileId\n }\n else {\n // detach from prefab\n PrefabUtils.unlinkPrefab(this);\n }\n }\n else if (newPrefabRoot) {\n // attach to prefab\n PrefabUtils.linkPrefab(newPrefabRoot._prefab.asset, newPrefabRoot, this);\n PrefabUtils.checkCircularReference(newPrefabRoot);\n }\n\n // conflict detection\n _Scene.DetectConflict.afterAddChild(this);\n }\n\n var shouldActiveNow = this._active && !!(newParent && newParent._activeInHierarchy);\n if (this._activeInHierarchy !== shouldActiveNow) {\n cc.director._nodeActivator.activateNode(this, shouldActiveNow);\n }\n },\n\n _instantiate (cloned, isSyncedNode) {\n if (!cloned) {\n cloned = cc.instantiate._clone(this, this);\n }\n\n var newPrefabInfo = cloned._prefab;\n if (CC_EDITOR && newPrefabInfo) {\n if (cloned === newPrefabInfo.root) {\n newPrefabInfo.fileId = '';\n }\n else {\n var PrefabUtils = Editor.require('scene://utils/prefab');\n PrefabUtils.unlinkPrefab(cloned);\n }\n }\n if (CC_EDITOR && cc.engine._isPlaying) {\n let syncing = newPrefabInfo && cloned === newPrefabInfo.root && newPrefabInfo.sync;\n if (!syncing) {\n cloned._name += ' (Clone)';\n }\n }\n\n // reset and init\n cloned._parent = null;\n cloned._onBatchCreated(isSyncedNode);\n\n return cloned;\n },\n\n _registerIfAttached: (CC_EDITOR || CC_TEST) && function (register) {\n var attachedObjsForEditor = cc.engine.attachedObjsForEditor;\n if (register) {\n attachedObjsForEditor[this._id] = this;\n for (let i = 0; i < this._components.length; i++) {\n let comp = this._components[i];\n attachedObjsForEditor[comp._id] = comp;\n }\n cc.engine.emit('node-attach-to-scene', this);\n }\n else {\n cc.engine.emit('node-detach-from-scene', this);\n delete attachedObjsForEditor[this._id];\n for (let i = 0; i < this._components.length; i++) {\n let comp = this._components[i];\n delete attachedObjsForEditor[comp._id];\n }\n }\n var children = this._children;\n for (let i = 0, len = children.length; i < len; ++i) {\n var child = children[i];\n child._registerIfAttached(register);\n }\n },\n\n _onPreDestroy () {\n var i, len;\n\n // marked as destroying\n this._objFlags |= Destroying;\n\n // detach self and children from editor\n var parent = this._parent;\n var destroyByParent = parent && (parent._objFlags & Destroying);\n if (!destroyByParent && (CC_EDITOR || CC_TEST)) {\n this._registerIfAttached(false);\n }\n\n // destroy children\n var children = this._children;\n for (i = 0, len = children.length; i < len; ++i) {\n // destroy immediate so its _onPreDestroy can be called\n children[i]._destroyImmediate();\n }\n\n // destroy self components\n for (i = 0, len = this._components.length; i < len; ++i) {\n var component = this._components[i];\n // destroy immediate so its _onPreDestroy can be called\n component._destroyImmediate();\n }\n\n var eventTargets = this.__eventTargets;\n for (i = 0, len = eventTargets.length; i < len; ++i) {\n var target = eventTargets[i];\n target && target.targetOff(this);\n }\n eventTargets.length = 0;\n\n // remove from persist\n if (this._persistNode) {\n cc.game.removePersistRootNode(this);\n }\n\n if (!destroyByParent) {\n // remove from parent\n if (parent) {\n var childIndex = parent._children.indexOf(this);\n parent._children.splice(childIndex, 1);\n parent.emit && parent.emit('child-removed', this);\n }\n }\n\n return destroyByParent;\n },\n\n onRestore: CC_EDITOR && function () {\n // check activity state\n var shouldActiveNow = this._active && !!(this._parent && this._parent._activeInHierarchy);\n if (this._activeInHierarchy !== shouldActiveNow) {\n cc.director._nodeActivator.activateNode(this, shouldActiveNow);\n }\n },\n});\n\nBaseNode.idGenerater = idGenerater;\n\n// For walk\nBaseNode._stacks = [[]];\nBaseNode._stackId = 0;\n\nBaseNode.prototype._onPreDestroyBase = BaseNode.prototype._onPreDestroy;\nif (CC_EDITOR) {\n BaseNode.prototype._onPreDestroy = function () {\n var destroyByParent = this._onPreDestroyBase();\n if (!destroyByParent) {\n // ensure this node can reattach to scene by undo system\n // (simulate some destruct logic to make undo system work correctly)\n this._parent = null;\n }\n return destroyByParent;\n };\n}\n\nBaseNode.prototype._onHierarchyChangedBase = BaseNode.prototype._onHierarchyChanged;\n\nif(CC_EDITOR) {\n BaseNode.prototype._onRestoreBase = BaseNode.prototype.onRestore;\n}\n\n// Define public getter and setter methods to ensure api compatibility.\nvar SameNameGetSets = ['parent', 'name', 'children', 'childrenCount',];\nmisc.propertyDefine(BaseNode, SameNameGetSets, {});\n\nif (CC_DEV) {\n // promote debug info\n js.get(BaseNode.prototype, ' INFO ', function () {\n var path = '';\n var node = this;\n while (node && !(node instanceof cc.Scene)) {\n if (path) {\n path = node.name + '/' + path;\n }\n else {\n path = node.name;\n }\n node = node._parent;\n }\n return this.name + ', path: ' + path;\n });\n}\n\n/**\n * !#en\n * Note: This event is only emitted from the top most node whose active value did changed,\n * not including its child nodes.\n * !#zh\n * 注意:此节点激活时,此事件仅从最顶部的节点发出。\n * @event active-in-hierarchy-changed\n * @param {Event.EventCustom} event\n */\n\ncc._BaseNode = module.exports = BaseNode;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar EPSILON = 1e-6;\n\n/**\n * Searches the entire sorted Array for an element and returns the index of the element.\n *\n * @method binarySearch\n * @param {number[]} array\n * @param {number} value\n * @return {number} The index of item in the sorted Array, if item is found; otherwise, a negative number that is the bitwise complement of the index of the next element that is larger than item or, if there is no larger element, the bitwise complement of array's length.\n */\n// function binarySearch (array, value) {\n// for (var l = 0, h = array.length - 1, m = h >>> 1;\n// l <= h;\n// m = (l + h) >>> 1\n// ) {\n// var test = array[m];\n// if (test > value) {\n// h = m - 1;\n// }\n// else if (test < value) {\n// l = m + 1;\n// }\n// else {\n// return m;\n// }\n// }\n// return ~l;\n// }\n\n/**\n * Searches the entire sorted Array for an element and returns the index of the element.\n * It accepts iteratee which is invoked for value and each element of array to compute their sort ranking.\n * The iteratee is invoked with one argument: (value).\n *\n * @method binarySearchBy\n * @param {number[]} array\n * @param {number} value\n * @param {function} iteratee - the iteratee invoked per element\n * @return {number} The index of item in the sorted Array, if item is found; otherwise, a negative number that is the bitwise complement of the index of the next element that is larger than item or, if there is no larger element, the bitwise complement of array's length.\n */\n// function binarySearchBy (array, value, iteratee) {\n// for (var l = 0, h = array.length - 1, m = h >>> 1;\n// l <= h;\n// m = (l + h) >>> 1\n// ) {\n// var test = iteratee(array[m]);\n// if (test > value) {\n// h = m - 1;\n// }\n// else if (test < value) {\n// l = m + 1;\n// }\n// else {\n// return m;\n// }\n// }\n// return ~l;\n// }\n\nfunction binarySearchEpsilon (array, value) {\n for (var l = 0, h = array.length - 1, m = h >>> 1;\n l <= h;\n m = (l + h) >>> 1\n ) {\n var test = array[m];\n if (test > value + EPSILON) {\n h = m - 1;\n }\n else if (test < value - EPSILON) {\n l = m + 1;\n }\n else {\n return m;\n }\n }\n return ~l;\n}\n\n\nmodule.exports = {\n binarySearchEpsilon\n};\n","\nconst RenderComponent = require('../components/CCRenderComponent');\nconst BlendFactor = require('../platform/CCMacro').BlendFactor;\nconst gfx = require('../../renderer/gfx');\n\n/**\n * !#en\n * Helper class for setting material blend function.\n * !#zh\n * 设置材质混合模式的辅助类。\n * @class BlendFunc\n */\nlet BlendFunc = cc.Class({\n properties: {\n _srcBlendFactor: BlendFactor.SRC_ALPHA,\n _dstBlendFactor: BlendFactor.ONE_MINUS_SRC_ALPHA,\n\n /**\n * !#en specify the source Blend Factor, this will generate a custom material object, please pay attention to the memory cost.\n * !#zh 指定原图的混合模式,这会克隆一个新的材质对象,注意这带来的开销\n * @property srcBlendFactor\n * @type {macro.BlendFactor}\n * @example\n * sprite.srcBlendFactor = cc.macro.BlendFactor.ONE;\n */\n srcBlendFactor: {\n get () {\n return this._srcBlendFactor;\n },\n set (value) {\n if (this._srcBlendFactor === value) return;\n this._srcBlendFactor = value;\n this._updateBlendFunc(true);\n this._onBlendChanged && this._onBlendChanged();\n },\n animatable: false,\n type: BlendFactor,\n tooltip: CC_DEV && 'i18n:COMPONENT.sprite.src_blend_factor',\n visible: true\n },\n\n /**\n * !#en specify the destination Blend Factor.\n * !#zh 指定目标的混合模式\n * @property dstBlendFactor\n * @type {macro.BlendFactor}\n * @example\n * sprite.dstBlendFactor = cc.macro.BlendFactor.ONE;\n */\n dstBlendFactor: {\n get () {\n return this._dstBlendFactor;\n },\n set (value) {\n if (this._dstBlendFactor === value) return;\n this._dstBlendFactor = value;\n this._updateBlendFunc(true);\n },\n animatable: false,\n type: BlendFactor,\n tooltip: CC_DEV && 'i18n:COMPONENT.sprite.dst_blend_factor',\n visible: true\n },\n },\n\n setMaterial (index, material) {\n let materialVar = RenderComponent.prototype.setMaterial.call(this, index, material);\n\n if (this._srcBlendFactor !== BlendFactor.SRC_ALPHA || this._dstBlendFactor !== BlendFactor.ONE_MINUS_SRC_ALPHA) {\n this._updateMaterialBlendFunc(materialVar);\n }\n\n return materialVar;\n },\n\n _updateMaterial () {\n this._updateBlendFunc();\n },\n\n _updateBlendFunc (force) {\n if (!force) {\n if (this._srcBlendFactor === BlendFactor.SRC_ALPHA && this._dstBlendFactor === BlendFactor.ONE_MINUS_SRC_ALPHA) {\n return;\n }\n }\n \n let materials = this.getMaterials();\n for (let i = 0; i < materials.length; i++) {\n let material = materials[i];\n this._updateMaterialBlendFunc(material);\n }\n },\n\n _updateMaterialBlendFunc (material) {\n material.setBlend(\n true,\n gfx.BLEND_FUNC_ADD,\n this._srcBlendFactor, this._dstBlendFactor,\n gfx.BLEND_FUNC_ADD,\n this._srcBlendFactor, this._dstBlendFactor\n );\n \n if (CC_JSB) {\n RenderComponent.prototype.markForRender.call(this, true);\n } \n },\n});\n\nmodule.exports = cc.BlendFunc = BlendFunc;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar Base64Values = require('./misc').BASE64_VALUES;\n\nvar HexChars = '0123456789abcdef'.split('');\n\nvar _t = ['', '', '', ''];\nvar UuidTemplate = _t.concat(_t, '-', _t, '-', _t, '-', _t, '-', _t, _t, _t);\nvar Indices = UuidTemplate.map(function (x, i) { return x === '-' ? NaN : i; }).filter(isFinite);\n\n// fcmR3XADNLgJ1ByKhqcC5Z -> fc991dd7-0033-4b80-9d41-c8a86a702e59\nmodule.exports = function (base64) {\n if (base64.length !== 22) {\n return base64;\n }\n UuidTemplate[0] = base64[0];\n UuidTemplate[1] = base64[1];\n for (var i = 2, j = 2; i < 22; i += 2) {\n var lhs = Base64Values[base64.charCodeAt(i)];\n var rhs = Base64Values[base64.charCodeAt(i + 1)];\n UuidTemplate[Indices[j++]] = HexChars[lhs >> 2];\n UuidTemplate[Indices[j++]] = HexChars[((lhs & 3) << 2) | rhs >> 4];\n UuidTemplate[Indices[j++]] = HexChars[rhs & 0xF];\n }\n return UuidTemplate.join('');\n};\n\nif (CC_TEST) {\n cc._Test.decodeUuid = module.exports;\n}\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * Finds a node by hierarchy path, the path is case-sensitive.\n * It will traverse the hierarchy by splitting the path using '/' character.\n * This function will still returns the node even if it is inactive.\n * It is recommended to not use this function every frame instead cache the result at startup.\n *\n * @method find\n * @static\n * @param {String} path\n * @param {Node} [referenceNode]\n * @return {Node|null} the node or null if not found\n */\ncc.find = module.exports = function (path, referenceNode) {\n if (path == null) {\n cc.errorID(3814);\n return null;\n }\n if (!referenceNode) {\n var scene = cc.director.getScene();\n if (!scene) {\n if (CC_DEV) {\n cc.warnID(5601);\n }\n return null;\n }\n else if (CC_DEV && !scene.isValid) {\n cc.warnID(5602);\n return null;\n }\n referenceNode = scene;\n }\n else if (CC_DEV && !referenceNode.isValid) {\n cc.warnID(5603);\n return null;\n }\n\n var match = referenceNode;\n var startIndex = (path[0] !== '/') ? 0 : 1; // skip first '/'\n var nameList = path.split('/');\n\n // parse path\n for (var n = startIndex; n < nameList.length; n++) {\n var name = nameList[n];\n var children = match._children;\n match = null;\n for (var t = 0, len = children.length; t < len; ++t) {\n var subChild = children[t];\n if (subChild.name === name) {\n match = subChild;\n break;\n }\n }\n if (!match) {\n return null;\n }\n }\n\n return match;\n};\n","\nimport MaterialVariant from '../assets/material/material-variant';\nconst Material = require('../assets/material/CCMaterial');\n\n/**\n * An internal helper class for switching render component's material between normal sprite material and gray sprite material.\n * @class GraySpriteState\n */\nlet GraySpriteState = cc.Class({\n properties: {\n _normalMaterial: null,\n\n /**\n * !#en The normal material.\n * !#zh 正常状态的材质。\n * @property normalMaterial\n * @type {Material}\n * @default null\n */\n normalMaterial: {\n get () {\n return this._normalMaterial;\n },\n set (val) {\n this._normalMaterial = val;\n this._updateDisabledState && this._updateDisabledState();\n },\n type: Material,\n tooltip: CC_DEV && 'i18n:COMPONENT.button.normal_material',\n animatable: false\n },\n\n _grayMaterial: null,\n\n /**\n * !#en The gray material.\n * !#zh 置灰状态的材质。\n * @property grayMaterial\n * @type {Material}\n * @default null\n */\n grayMaterial: {\n get () {\n return this._grayMaterial;\n },\n set (val) {\n this._grayMaterial = val;\n this._updateDisabledState && this._updateDisabledState();\n },\n type: Material,\n tooltip: CC_DEV && 'i18n:COMPONENT.button.gray_material',\n animatable: false\n }\n },\n \n _switchGrayMaterial (useGrayMaterial, renderComp) {\n let material;\n if (useGrayMaterial) {\n material = this._grayMaterial;\n if (!material) {\n material = Material.getBuiltinMaterial('2d-gray-sprite');\n }\n material = this._grayMaterial = MaterialVariant.create(material, renderComp);\n }\n else {\n material = this._normalMaterial;\n if (!material) {\n material = Material.getBuiltinMaterial('2d-sprite', renderComp);\n }\n material = this._normalMaterial = MaterialVariant.create(material, renderComp);\n }\n \n renderComp.setMaterial(0, material);\n }\n});\n\nmodule.exports = GraySpriteState;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar eventRegx = /^(click)(\\s)*=|(param)(\\s)*=/;\nvar imageAttrReg = /(\\s)*src(\\s)*=|(\\s)*height(\\s)*=|(\\s)*width(\\s)*=|(\\s)*align(\\s)*=|(\\s)*offset(\\s)*=|(\\s)*click(\\s)*=|(\\s)*param(\\s)*=/;\n/**\n * A utils class for parsing HTML texts. The parsed results will be an object array.\n */\nvar HtmlTextParser = function() {\n this._parsedObject = {};\n this._specialSymbolArray = [];\n this._specialSymbolArray.push([/</g, '<']);\n this._specialSymbolArray.push([/>/g, '>']);\n this._specialSymbolArray.push([/&/g, '&']);\n this._specialSymbolArray.push([/"/g, '\"']);\n this._specialSymbolArray.push([/'/g, '\\'']);\n this._specialSymbolArray.push([/ /g, ' ']);\n};\n\nHtmlTextParser.prototype = {\n constructor: HtmlTextParser,\n parse: function(htmlString) {\n this._resultObjectArray = [];\n this._stack = [];\n\n var startIndex = 0;\n var length = htmlString.length;\n while (startIndex < length) {\n var tagEndIndex = htmlString.indexOf('>', startIndex);\n var tagBeginIndex = -1;\n if (tagEndIndex >= 0) {\n tagBeginIndex = htmlString.lastIndexOf('<', tagEndIndex);\n var noTagBegin = tagBeginIndex < (startIndex - 1);\n\n if (noTagBegin) {\n tagBeginIndex = htmlString.indexOf('<', tagEndIndex + 1);\n tagEndIndex = htmlString.indexOf('>', tagBeginIndex + 1);\n }\n }\n\n if (tagBeginIndex < 0) {\n this._stack.pop();\n this._processResult(htmlString.substring(startIndex));\n startIndex = length;\n } else {\n var newStr = htmlString.substring(startIndex, tagBeginIndex);\n var tagStr = htmlString.substring(tagBeginIndex + 1, tagEndIndex);\n if (tagStr === \"\") newStr = htmlString.substring(startIndex, tagEndIndex + 1);\n this._processResult(newStr);\n if (tagEndIndex === -1) {\n // cc.error('The HTML tag is invalid!');\n tagEndIndex = tagBeginIndex;\n } else if (htmlString.charAt(tagBeginIndex + 1) === '\\/'){\n this._stack.pop();\n } else {\n this._addToStack(tagStr);\n }\n startIndex = tagEndIndex + 1;\n }\n }\n\n\n return this._resultObjectArray;\n },\n\n _attributeToObject: function (attribute) {\n attribute = attribute.trim();\n\n var obj = {};\n var header = attribute.match(/^(color|size)(\\s)*=/);\n var tagName;\n var nextSpace;\n var eventObj;\n var eventHanlderString;\n if (header) {\n tagName = header[0];\n attribute = attribute.substring(tagName.length).trim();\n if(attribute === \"\") return obj;\n\n //parse color\n nextSpace = attribute.indexOf(' ');\n switch(tagName[0]){\n case 'c':\n if (nextSpace > -1) {\n obj.color = attribute.substring(0, nextSpace).trim();\n } else {\n obj.color = attribute;\n }\n break;\n case 's':\n obj.size = parseInt(attribute);\n break;\n }\n\n //tag has event arguments\n if(nextSpace > -1) {\n eventHanlderString = attribute.substring(nextSpace+1).trim();\n eventObj = this._processEventHandler(eventHanlderString);\n obj.event = eventObj;\n }\n return obj;\n }\n\n header = attribute.match(/^(br(\\s)*\\/)/);\n if(header && header[0].length > 0) {\n tagName = header[0].trim();\n if(tagName.startsWith(\"br\") && tagName[tagName.length-1] === \"/\") {\n obj.isNewLine = true;\n this._resultObjectArray.push({text: \"\", style: {newline: true}});\n return obj;\n }\n }\n\n header = attribute.match(/^(img(\\s)*src(\\s)*=[^>]+\\/)/);\n if(header && header[0].length > 0) {\n tagName = header[0].trim();\n if(tagName.startsWith(\"img\") && tagName[tagName.length-1] === \"/\") {\n header = attribute.match(imageAttrReg);\n var tagValue;\n var remainingArgument;\n var isValidImageTag = false;\n while (header) {\n //skip the invalid tags at first\n attribute = attribute.substring(attribute.indexOf(header[0]));\n tagName = attribute.substr(0, header[0].length);\n //remove space and = character\n remainingArgument = attribute.substring(tagName.length).trim();\n nextSpace = remainingArgument.indexOf(' ');\n\n tagValue = (nextSpace > -1) ? remainingArgument.substr(0, nextSpace) : remainingArgument;\n tagName = tagName.replace(/[^a-zA-Z]/g, \"\").trim();\n tagName = tagName.toLocaleLowerCase();\n\n attribute = remainingArgument.substring(nextSpace).trim();\n if ( tagValue.endsWith( '\\/' ) ) tagValue = tagValue.slice( 0, -1 );\n if (tagName === \"src\") {\n switch (tagValue.charCodeAt(0)) {\n case 34: // \"\n case 39: // '\n isValidImageTag = true;\n tagValue = tagValue.slice(1, -1);\n break;\n }\n obj.isImage = true;\n obj.src = tagValue;\n } else if (tagName === \"height\") {\n obj.imageHeight = parseInt(tagValue);\n } else if (tagName === \"width\") {\n obj.imageWidth = parseInt(tagValue);\n } else if (tagName === \"align\") {\n switch (tagValue.charCodeAt(0)) {\n case 34: // \"\n case 39: // '\n tagValue = tagValue.slice(1, -1);\n break;\n }\n obj.imageAlign = tagValue.toLocaleLowerCase();\n } else if (tagName === \"offset\") {\n obj.imageOffset = tagValue;\n } else if (tagName === \"click\") {\n obj.event = this._processEventHandler(tagName + \"=\" + tagValue);\n }\n\n if (obj.event && tagName === 'param') {\n obj.event.param = tagValue.replace(/^\\\"|\\\"$/g, '');\n }\n\n header = attribute.match(imageAttrReg);\n }\n\n if( isValidImageTag && obj.isImage ) {\n this._resultObjectArray.push({text: \"\", style: obj});\n }\n\n return {};\n }\n }\n\n header = attribute.match(/^(outline(\\s)*[^>]*)/);\n if (header) {\n attribute = header[0].substring(\"outline\".length).trim();\n var defaultOutlineObject = {color: \"#ffffff\", width: 1};\n if (attribute) {\n var outlineAttrReg = /(\\s)*color(\\s)*=|(\\s)*width(\\s)*=|(\\s)*click(\\s)*=|(\\s)*param(\\s)*=/;\n header = attribute.match(outlineAttrReg);\n var tagValue;\n while (header) {\n //skip the invalid tags at first\n attribute = attribute.substring(attribute.indexOf(header[0]));\n tagName = attribute.substr(0, header[0].length);\n //remove space and = character\n remainingArgument = attribute.substring(tagName.length).trim();\n nextSpace = remainingArgument.indexOf(' ');\n if (nextSpace > -1) {\n tagValue = remainingArgument.substr(0, nextSpace);\n } else {\n tagValue = remainingArgument;\n }\n tagName = tagName.replace(/[^a-zA-Z]/g, \"\").trim();\n tagName = tagName.toLocaleLowerCase();\n\n attribute = remainingArgument.substring(nextSpace).trim();\n if (tagName === \"click\") {\n obj.event = this._processEventHandler(tagName + \"=\" + tagValue);\n } else if (tagName === \"color\") {\n defaultOutlineObject.color = tagValue;\n } else if (tagName === \"width\") {\n defaultOutlineObject.width = parseInt(tagValue);\n }\n\n if (obj.event && tagName === 'param') {\n obj.event.param = tagValue.replace(/^\\\"|\\\"$/g, '');\n }\n\n header = attribute.match(outlineAttrReg);\n }\n }\n obj.outline = defaultOutlineObject;\n }\n\n header = attribute.match(/^(on|u|b|i)(\\s)*/);\n if(header && header[0].length > 0) {\n tagName = header[0];\n attribute = attribute.substring(tagName.length).trim();\n switch(tagName[0]){\n case 'u':\n obj.underline = true;\n break;\n case 'i':\n obj.italic = true;\n break;\n case 'b':\n obj.bold = true;\n break;\n }\n if(attribute === \"\") {\n return obj;\n }\n eventObj = this._processEventHandler(attribute);\n obj.event = eventObj;\n }\n\n return obj;\n },\n\n _processEventHandler: function (eventString) {\n var index = 0;\n var obj = {};\n var eventNames = eventString.match(eventRegx);\n var isValidTag = false;\n while(eventNames) {\n var eventName = eventNames[0];\n var eventValue = \"\";\n isValidTag = false;\n eventString = eventString.substring(eventName.length).trim();\n if(eventString.charAt(0) === \"\\\"\") {\n index = eventString.indexOf(\"\\\"\", 1);\n if (index > -1) {\n eventValue = eventString.substring(1, index).trim();\n isValidTag = true;\n }\n index++;\n } else if(eventString.charAt(0) === \"\\'\") {\n index = eventString.indexOf('\\'', 1);\n if(index > -1) {\n eventValue = eventString.substring(1, index).trim();\n isValidTag = true;\n }\n index++;\n } else {\n //skip the invalid attribute value\n var match = eventString.match(/(\\S)+/);\n if(match) {\n eventValue = match[0];\n } else {\n eventValue = \"\";\n }\n index = eventValue.length;\n }\n\n if(isValidTag) {\n eventName = eventName.substring(0, eventName.length-1).trim();\n obj[eventName] = eventValue;\n }\n\n eventString = eventString.substring(index).trim();\n eventNames = eventString.match(eventRegx);\n }\n\n return obj;\n },\n\n _addToStack: function(attribute) {\n var obj = this._attributeToObject(attribute);\n\n if (this._stack.length === 0){\n this._stack.push(obj);\n } else {\n if(obj.isNewLine || obj.isImage) {\n return;\n }\n //for nested tags\n var previousTagObj = this._stack[this._stack.length - 1];\n for (var key in previousTagObj) {\n if (!(obj[key])) {\n obj[key] = previousTagObj[key];\n }\n }\n this._stack.push(obj);\n }\n },\n\n _processResult: function(value) {\n if (value === \"\") {\n return;\n }\n\n value = this._escapeSpecialSymbol(value);\n if (this._stack.length > 0) {\n this._resultObjectArray.push({text: value, style: this._stack[this._stack.length - 1]});\n } else {\n this._resultObjectArray.push({text: value});\n }\n },\n\n _escapeSpecialSymbol: function(str) {\n for(var i = 0; i < this._specialSymbolArray.length; ++i) {\n var key = this._specialSymbolArray[i][0];\n var value = this._specialSymbolArray[i][1];\n\n str = str.replace(key, value);\n }\n return str;\n }\n};\n\nif (CC_TEST) {\n cc._Test.HtmlTextParser = HtmlTextParser;\n}\n\nmodule.exports = HtmlTextParser;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n \nrequire('./CCPath');\nif (!CC_EDITOR) {\n require('./profiler/CCProfiler');\n}\nrequire('./find');\nrequire('./mutable-forward-iterator');\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar js = require('../platform/js');\n\n/**\n * misc utilities\n * @class misc\n * @static\n */\nvar misc = {};\n\nmisc.propertyDefine = function (ctor, sameNameGetSets, diffNameGetSets) {\n function define (np, propName, getter, setter) {\n var pd = Object.getOwnPropertyDescriptor(np, propName);\n if (pd) {\n if (pd.get) np[getter] = pd.get;\n if (pd.set && setter) np[setter] = pd.set;\n }\n else {\n var getterFunc = np[getter];\n if (CC_DEV && !getterFunc) {\n var clsName = (cc.Class._isCCClass(ctor) && js.getClassName(ctor)) ||\n ctor.name ||\n '(anonymous class)';\n cc.warnID(5700, propName, getter, clsName);\n }\n else {\n js.getset(np, propName, getterFunc, np[setter]);\n }\n }\n }\n var propName, np = ctor.prototype;\n for (var i = 0; i < sameNameGetSets.length; i++) {\n propName = sameNameGetSets[i];\n var suffix = propName[0].toUpperCase() + propName.slice(1);\n define(np, propName, 'get' + suffix, 'set' + suffix);\n }\n for (propName in diffNameGetSets) {\n var getset = diffNameGetSets[propName];\n define(np, propName, getset[0], getset[1]);\n }\n};\n\n/**\n * @param {Number} x\n * @return {Number}\n * Constructor\n */\nmisc.NextPOT = function (x) {\n x = x - 1;\n x = x | (x >> 1);\n x = x | (x >> 2);\n x = x | (x >> 4);\n x = x | (x >> 8);\n x = x | (x >> 16);\n return x + 1;\n};\n\n//var DirtyFlags = m.DirtyFlags = {\n// TRANSFORM: 1 << 0,\n// SIZE: 1 << 1,\n// //Visible:\n// //Color:\n// //Opacity\n// //Cache\n// //Order\n// //Text\n// //Gradient\n// ALL: (1 << 2) - 1\n//};\n//\n//DirtyFlags.WIDGET = DirtyFlags.TRANSFORM | DirtyFlags.SIZE;\n\nif (CC_EDITOR) {\n // use anonymous function here to ensure it will not being hoisted without CC_EDITOR\n\n misc.tryCatchFunctor_EDITOR = function (funcName) {\n return Function('target',\n 'try {\\n' +\n ' target.' + funcName + '();\\n' +\n '}\\n' +\n 'catch (e) {\\n' +\n ' cc._throw(e);\\n' +\n '}');\n };\n}\n\nmisc.BUILTIN_CLASSID_RE = /^(?:cc|dragonBones|sp|ccsg)\\..+/;\n\n\nvar BASE64_KEYS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\nvar BASE64_VALUES = new Array(123); // max char code in base64Keys\nfor (let i = 0; i < 123; ++i) BASE64_VALUES[i] = 64; // fill with placeholder('=') index\nfor (let i = 0; i < 64; ++i) BASE64_VALUES[BASE64_KEYS.charCodeAt(i)] = i;\n\n// decoded value indexed by base64 char code\nmisc.BASE64_VALUES = BASE64_VALUES;\n\n// set value to map, if key exists, push to array\nmisc.pushToMap = function (map, key, value, pushFront) {\n var exists = map[key];\n if (exists) {\n if (Array.isArray(exists)) {\n if (pushFront) {\n exists.push(exists[0]);\n exists[0] = value;\n }\n else {\n exists.push(value);\n }\n }\n else {\n map[key] = (pushFront ? [value, exists] : [exists, value]);\n }\n }\n else {\n map[key] = value;\n }\n};\n\n/**\n * !#en Clamp a value between from and to.\n * !#zh\n * 限定浮点数的最大最小值。
\n * 数值大于 max_inclusive 则返回 max_inclusive。
\n * 数值小于 min_inclusive 则返回 min_inclusive。
\n * 否则返回自身。\n * @method clampf\n * @param {Number} value\n * @param {Number} min_inclusive\n * @param {Number} max_inclusive\n * @return {Number}\n * @example\n * var v1 = cc.misc.clampf(20, 0, 20); // 20;\n * var v2 = cc.misc.clampf(-1, 0, 20); // 0;\n * var v3 = cc.misc.clampf(10, 0, 20); // 10;\n */\nmisc.clampf = function (value, min_inclusive, max_inclusive) {\n if (min_inclusive > max_inclusive) {\n var temp = min_inclusive;\n min_inclusive = max_inclusive;\n max_inclusive = temp;\n }\n return value < min_inclusive ? min_inclusive : value < max_inclusive ? value : max_inclusive;\n};\n\n/**\n * !#en Clamp a value between 0 and 1.\n * !#zh 限定浮点数的取值范围为 0 ~ 1 之间。\n * @method clamp01\n * @param {Number} value\n * @return {Number}\n * @example\n * var v1 = cc.misc.clamp01(20); // 1;\n * var v2 = cc.misc.clamp01(-1); // 0;\n * var v3 = cc.misc.clamp01(0.5); // 0.5;\n */\nmisc.clamp01 = function (value) {\n return value < 0 ? 0 : value < 1 ? value : 1;\n};\n\n/**\n * Linear interpolation between 2 numbers, the ratio sets how much it is biased to each end\n * @method lerp\n * @param {Number} a number A\n * @param {Number} b number B\n * @param {Number} r ratio between 0 and 1\n * @return {Number}\n * @example {@link cocos2d/core/platform/CCMacro/lerp.js}\n */\nmisc.lerp = function (a, b, r) {\n return a + (b - a) * r;\n};\n\n/**\n * converts degrees to radians\n * @param {Number} angle\n * @return {Number}\n * @method degreesToRadians\n */\nmisc.degreesToRadians = function (angle) {\n return angle * cc.macro.RAD;\n};\n\n/**\n * converts radians to degrees\n * @param {Number} angle\n * @return {Number}\n * @method radiansToDegrees\n */\nmisc.radiansToDegrees = function (angle) {\n return angle * cc.macro.DEG;\n};\n\ncc.misc = module.exports = misc;","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * @example\n * var array = [0, 1, 2, 3, 4];\n * var iterator = new cc.js.array.MutableForwardIterator(array);\n * for (iterator.i = 0; iterator.i < array.length; ++iterator.i) {\n * var item = array[iterator.i];\n * ...\n * }\n */\nfunction MutableForwardIterator (array) {\n this.i = 0;\n this.array = array;\n}\n\nvar proto = MutableForwardIterator.prototype;\n\nproto.remove = function (value) {\n var index = this.array.indexOf(value);\n if (index >= 0) {\n this.removeAt(index);\n }\n};\nproto.removeAt = function (i) {\n this.array.splice(i, 1);\n\n if (i <= this.i) {\n --this.i;\n }\n};\nproto.fastRemove = function (value) {\n var index = this.array.indexOf(value);\n if (index >= 0) {\n this.fastRemoveAt(index);\n }\n};\nproto.fastRemoveAt = function (i) {\n var array = this.array;\n array[i] = array[array.length - 1];\n --array.length;\n\n if (i <= this.i) {\n --this.i;\n }\n};\n\nproto.push = function (item) {\n this.array.push(item);\n};\n\n//js.getset(proto, 'length',\n// function () {\n// return this.array.length;\n// },\n// function (len) {\n// this.array.length = len;\n// if (this.i >= len) {\n// this.i = len - 1;\n// }\n// }\n//);\n\nmodule.exports = MutableForwardIterator;\n","\nexport default class Pool {\n enabled = false;\n count = 0;\n maxSize = 1024;\n\n get () {\n\n }\n put () {\n\n }\n clear () {\n\n }\n}\n\ncc.pool = {};\n\nPool.register = function (name, pool) {\n cc.pool[name] = pool;\n}\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\ncc._PrefabInfo = cc.Class({\n name: 'cc.PrefabInfo',\n // extends: require('../platform/CCObject'),\n properties: {\n // the most top node of this prefab\n root: null,\n\n // 所属的 prefab 资源对象 (cc.Prefab)\n // In Editor, only asset._uuid is usable because asset will be changed.\n asset: null,\n\n // To identify the node in the prefab asset, so only needs to be unique.\n // Not available in the root node.\n fileId: '',\n\n // Indicates whether this node should always synchronize with the prefab asset, only available in the root node\n sync: false,\n },\n});\n\n// prefab helper function\nmodule.exports = {\n // update node to make it sync with prefab\n syncWithPrefab: function (node) {\n var _prefab = node._prefab;\n\n if (!_prefab.asset) {\n if (CC_EDITOR) {\n var NodeUtils = Editor.require('scene://utils/node');\n var PrefabUtils = Editor.require('scene://utils/prefab');\n\n cc.warn(Editor.T('MESSAGE.prefab.missing_prefab', { node: NodeUtils.getNodePath(node) }));\n node.name += PrefabUtils.MISSING_PREFAB_SUFFIX;\n }\n else {\n cc.errorID(3701, node.name);\n }\n node._prefab = null;\n return;\n }\n\n // save root's preserved props to avoid overwritten by prefab\n var _objFlags = node._objFlags;\n var _parent = node._parent;\n var _id = node._id;\n var _name = node._name;\n var _active = node._active;\n var eulerAnglesX = node._eulerAngles.x;\n var eulerAnglesY = node._eulerAngles.y;\n var eulerAnglesZ = node._eulerAngles.z;\n var _localZOrder = node._localZOrder;\n var trs = node._trs;\n var x = trs[0];\n var y = trs[1];\n var z = trs[2];\n\n // instantiate prefab\n cc.game._isCloning = true;\n if (CC_SUPPORT_JIT) {\n _prefab.asset._doInstantiate(node);\n }\n else {\n // root in prefab asset is always synced\n var prefabRoot = _prefab.asset.data;\n\n // use node as the instantiated prefabRoot to make references to prefabRoot in prefab redirect to node\n prefabRoot._iN$t = node;\n\n // instantiate prefab and apply to node\n cc.instantiate._clone(prefabRoot, prefabRoot);\n }\n cc.game._isCloning = false;\n\n // restore preserved props\n node._objFlags = _objFlags;\n node._parent = _parent;\n node._id = _id;\n node._prefab = _prefab;\n node._name = _name;\n node._active = _active;\n node._localZOrder = _localZOrder;\n trs = node._trs;\n trs[0] = x;\n trs[1] = y;\n trs[2] = z;\n node._eulerAngles.x = eulerAnglesX;\n node._eulerAngles.y = eulerAnglesY;\n node._eulerAngles.z = eulerAnglesZ;\n }\n};\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar macro = require('../../platform/CCMacro');\n\nconst PerfCounter = require('./perf-counter');\n\nlet _showFPS = false;\nlet _fontSize = 15;\n\nlet _stats = null;\nlet _rootNode = null;\nlet _label = null;\n\nfunction generateStats () {\n if (_stats) return;\n \n _stats = {\n fps: { desc: 'Framerate (FPS)', below: 30, average: 500 },\n draws: { desc: 'Draw Call' },\n frame: { desc: 'Frame time (ms)', min: 0, max: 50, average: 500 },\n logic: { desc: 'Game Logic (ms)', min: 0, max: 50, average: 500, color: '#080' },\n render: { desc: 'Renderer (ms)', min: 0, max: 50, average: 500, color: '#f90' },\n mode: { desc: cc.game.renderType === cc.game.RENDER_TYPE_WEBGL ? 'WebGL' : 'Canvas', min: 1 }\n };\n\n let now = performance.now();\n for (let id in _stats) {\n _stats[id]._counter = new PerfCounter(id, _stats[id], now);\n }\n}\n\nfunction generateNode () {\n if (_rootNode && _rootNode.isValid) return;\n\n\n _rootNode = new cc.Node('PROFILER-NODE');\n _rootNode.x = _rootNode.y = 10;\n\n _rootNode.groupIndex = cc.Node.BuiltinGroupIndex.DEBUG;\n cc.Camera._setupDebugCamera();\n\n _rootNode.zIndex = macro.MAX_ZINDEX;\n cc.game.addPersistRootNode(_rootNode);\n\n let left = new cc.Node('LEFT-PANEL');\n left.anchorX = left.anchorY = 0;\n let leftLabel = left.addComponent(cc.Label);\n leftLabel.fontSize = _fontSize;\n leftLabel.lineHeight = _fontSize;\n left.parent = _rootNode;\n\n let right = new cc.Node('RIGHT-PANEL');\n right.anchorX = 1;\n right.anchorY = 0;\n right.x = 200;\n let rightLabel = right.addComponent(cc.Label);\n rightLabel.horizontalAlign = cc.Label.HorizontalAlign.RIGHT;\n rightLabel.fontSize = _fontSize;\n rightLabel.lineHeight = _fontSize;\n right.parent = _rootNode;\n if (cc.sys.platform !== cc.sys.BAIDU_GAME_SUB &&\n cc.sys.platform !== cc.sys.WECHAT_GAME_SUB) {\n leftLabel.cacheMode = cc.Label.CacheMode.CHAR;\n rightLabel.cacheMode = cc.Label.CacheMode.CHAR;\n }\n\n _label = {\n left: leftLabel,\n right: rightLabel\n };\n}\n\nfunction beforeUpdate () {\n generateNode();\n\n let now = cc.director._lastUpdate;\n _stats['frame']._counter.start(now);\n _stats['logic']._counter.start(now);\n}\n\nfunction afterUpdate () {\n let now = performance.now();\n if (cc.director.isPaused()) {\n _stats['frame']._counter.start(now);\n }\n else {\n _stats['logic']._counter.end(now);\n }\n _stats['render']._counter.start(now);\n}\n\nfunction updateLabel (stat) {\n let length = 20;\n let desc = stat.desc;\n let value = stat._counter.human() + '';\n stat.label.string = stat.desc + ' ' + stat._counter.human();\n}\n\nfunction afterDraw () {\n let now = performance.now();\n _stats['render']._counter.end(now);\n _stats['draws']._counter.value = cc.renderer.drawCalls;\n _stats['frame']._counter.end(now);\n _stats['fps']._counter.frame(now);\n \n let left = '';\n let right = '';\n for (let id in _stats) {\n let stat = _stats[id];\n stat._counter.sample(now);\n\n left += stat.desc + '\\n';\n right += stat._counter.human() + '\\n';\n }\n\n if (_label) {\n _label.left.string = left;\n _label.right.string = right;\n }\n}\n\ncc.profiler = module.exports = {\n isShowingStats () {\n return _showFPS;\n },\n\n hideStats () {\n if (_showFPS) {\n if (_rootNode) {\n _rootNode.active = false;\n }\n\n cc.director.off(cc.Director.EVENT_BEFORE_UPDATE, beforeUpdate);\n cc.director.off(cc.Director.EVENT_AFTER_UPDATE, afterUpdate);\n cc.director.off(cc.Director.EVENT_AFTER_DRAW, afterDraw);\n _showFPS = false;\n }\n },\n\n showStats () {\n if (!_showFPS) {\n generateStats();\n\n if (_rootNode) {\n _rootNode.active = true;\n }\n\n cc.director.on(cc.Director.EVENT_BEFORE_UPDATE, beforeUpdate);\n cc.director.on(cc.Director.EVENT_AFTER_UPDATE, afterUpdate);\n cc.director.on(cc.Director.EVENT_AFTER_DRAW, afterDraw);\n _showFPS = true;\n }\n }\n}\n","let Counter = cc.Class({\n name: 'cc.Counter',\n ctor (id, opts, now) {\n this._id = id;\n this._opts = opts || {};\n\n this._value = 0;\n this._total = 0;\n this._averageValue = 0;\n this._accumValue = 0;\n this._accumSamples = 0;\n this._accumStart = now;\n },\n\n properties: {\n value: {\n get () {\n return this._value;\n },\n set (v) {\n this._value = v;\n }\n }\n },\n\n _average (v, now) {\n if (this._opts.average) {\n this._accumValue += v;\n ++this._accumSamples;\n\n let t = now;\n if (t - this._accumStart >= this._opts.average) {\n this._averageValue = this._accumValue / this._accumSamples;\n this._accumValue = 0;\n this._accumStart = t;\n this._accumSamples = 0;\n }\n }\n },\n\n sample (now) {\n this._average(this._value, now);\n },\n\n human () {\n let v = this._opts.average ? this._averageValue : this._value;\n return Math.round(v * 100) / 100;\n },\n\n alarm () {\n return (\n (this._opts.below && this._value < this._opts.below) ||\n (this._opts.over && this._value > this._opts.over)\n );\n }\n})\n\nmodule.exports = Counter;\n","const Counter = require('./counter');\n\nlet PerfCounter = cc.Class({\n name: 'cc.PerfCounter',\n extends: Counter,\n \n ctor (id, opts, now) {\n // DISABLE\n // this._idstart = `${id}_start`;\n // this._idend = `${id}_end`;\n\n this._time = now;\n },\n\n start(now) {\n this._time = now;\n\n // DISABLE: long time running will cause performance drop down\n // window.performance.mark(this._idstart);\n },\n\n end(now) {\n this._value = now - this._time;\n\n // DISABLE: long time running will cause performance drop down\n // window.performance.mark(this._idend);\n // window.performance.measure(this._id, this._idstart, this._idend);\n\n this._average(this._value);\n },\n\n tick() {\n this.end();\n this.start();\n },\n\n frame(now) {\n let t = now;\n let e = t - this._time;\n this._total++;\n let avg = this._opts.average || 1000;\n\n if (e > avg) {\n this._value = this._total * 1000 / e;\n this._total = 0;\n this._time = t;\n this._average(this._value);\n }\n }\n});\n\nmodule.exports = PerfCounter;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport js from '../platform/js'\n\n// Draw text the textBaseline ratio (Can adjust the appropriate baseline ratio based on the platform)\nlet _BASELINE_RATIO = 0.26;\nlet _BASELINE_OFFSET = 0;\nif (CC_RUNTIME) {\n _BASELINE_OFFSET = _BASELINE_RATIO * 2 / 3;\n}\n\nconst MAX_CACHE_SIZE = 100;\n\nlet pool = new js.Pool(2);\npool.get = function () {\n var node = this._get() || {\n key: null,\n value: null,\n prev: null,\n next: null\n };\n\n return node;\n};\n\nfunction LRUCache(size) {\n this.count = 0;\n this.limit = size;\n this.datas = {};\n this.head = null;\n this.tail = null;\n}\n\nLRUCache.prototype.moveToHead = function (node) {\n node.next = this.head;\n node.prev = null;\n if (this.head !== null) \n this.head.prev = node;\n this.head = node;\n if (this.tail === null) \n this.tail = node;\n this.count++;\n this.datas[node.key] = node;\n}\n\nLRUCache.prototype.put = function (key, value) {\n const node = pool.get();\n node.key = key;\n node.value = value;\n \n if (this.count >= this.limit) {\n let discard = this.tail;\n delete this.datas[discard.key];\n this.count--;\n this.tail = discard.prev;\n this.tail.next = null;\n discard.prev = null;\n discard.next = null;\n pool.put(discard);\n }\n this.moveToHead(node);\n}\n\nLRUCache.prototype.remove = function (node) {\n if (node.prev !== null) {\n node.prev.next = node.next;\n } else {\n this.head = node.next;\n }\n if (node.next !== null) {\n node.next.prev = node.prev;\n } else {\n this.tail = node.prev;\n }\n delete this.datas[node.key];\n this.count--;\n}\n\nLRUCache.prototype.get = function (key) {\n const node = this.datas[key];\n if (node) {\n this.remove(node);\n this.moveToHead(node);\n return node.value;\n }\n return null;\n}\n\nLRUCache.prototype.clear = function () {\n this.count = 0;\n this.datas = {};\n this.head = null;\n this.tail = null;\n}\n\nLRUCache.prototype.has = function (key) {\n return !!this.datas[key];\n}\n\nLRUCache.prototype.delete = function (key) {\n const node = this.datas[key];\n this.remove(node);\n}\n\nlet measureCache = new LRUCache(MAX_CACHE_SIZE);\n\nvar textUtils = {\n\n BASELINE_RATIO: _BASELINE_RATIO,\n MIDDLE_RATIO: (_BASELINE_RATIO + 1) / 2 - _BASELINE_RATIO,\n BASELINE_OFFSET: _BASELINE_OFFSET,\n\n label_wordRex : /([a-zA-Z0-9ÄÖÜäöüßéèçàùêâîôûа-яА-ЯЁё]+|\\S)/,\n label_symbolRex : /^[!,.:;'}\\]%\\?>、‘“》?。,!]/,\n label_lastWordRex : /([a-zA-Z0-9ÄÖÜäöüßéèçàùêâîôûаíìÍÌïÁÀáàÉÈÒÓòóŐőÙÚŰúűñÑæÆœŒÃÂãÔõěščřžýáíéóúůťďňĚŠČŘŽÁÍÉÓÚŤżźśóńłę湯ŹŚÓŃŁĘĆĄ-яА-ЯЁё]+|\\S)$/,\n label_lastEnglish : /[a-zA-Z0-9ÄÖÜäöüßéèçàùêâîôûаíìÍÌïÁÀáàÉÈÒÓòóŐőÙÚŰúűñÑæÆœŒÃÂãÔõěščřžýáíéóúůťďňĚŠČŘŽÁÍÉÓÚŤżźśóńłę湯ŹŚÓŃŁĘĆĄ-яА-ЯЁё]+$/,\n label_firstEnglish : /^[a-zA-Z0-9ÄÖÜäöüßéèçàùêâîôûаíìÍÌïÁÀáàÉÈÒÓòóŐőÙÚŰúűñÑæÆœŒÃÂãÔõěščřžýáíéóúůťďňĚŠČŘŽÁÍÉÓÚŤżźśóńłę湯ŹŚÓŃŁĘĆĄ-яА-ЯЁё]/,\n // The unicode standard will never assign a character from code point 0xD800 to 0xDFFF\n // high surrogate (0xD800-0xDBFF) and low surrogate(0xDC00-0xDFFF) combines to a character on the Supplementary Multilingual Plane\n // reference: https://en.wikipedia.org/wiki/UTF-16\n highSurrogateRex: /[\\uD800-\\uDBFF]/,\n lowSurrogateRex: /[\\uDC00-\\uDFFF]/,\n label_wrapinspection : true,\n\n __CHINESE_REG: /^[\\u4E00-\\u9FFF\\u3400-\\u4DFF]+$/,\n __JAPANESE_REG: /[\\u3000-\\u303F]|[\\u3040-\\u309F]|[\\u30A0-\\u30FF]|[\\uFF00-\\uFFEF]|[\\u4E00-\\u9FAF]|[\\u2605-\\u2606]|[\\u2190-\\u2195]|\\u203B/g,\n __KOREAN_REG: /^[\\u1100-\\u11FF]|[\\u3130-\\u318F]|[\\uA960-\\uA97F]|[\\uAC00-\\uD7AF]|[\\uD7B0-\\uD7FF]+$/,\n\n isUnicodeCJK: function(ch) {\n return this.__CHINESE_REG.test(ch) || this.__JAPANESE_REG.test(ch) || this.__KOREAN_REG.test(ch);\n },\n\n //Checking whether the character is a whitespace\n isUnicodeSpace: function(ch) {\n ch = ch.charCodeAt(0);\n return ((ch >= 9 && ch <= 13) || ch === 32 || ch === 133 || ch === 160 || ch === 5760 || (ch >= 8192 && ch <= 8202) || ch === 8232 || ch === 8233 || ch === 8239 || ch === 8287 || ch === 12288);\n },\n\n safeMeasureText: function (ctx, string, desc) {\n let font = desc || ctx.font;\n let key = font + \"\\uD83C\\uDFAE\" + string;\n let cache = measureCache.get(key);\n if (cache !== null) {\n return cache;\n }\n\n let metric = ctx.measureText(string);\n let width = metric && metric.width || 0;\n measureCache.put(key, width);\n\n return width;\n },\n\n // in case truncate a character on the Supplementary Multilingual Plane\n // test case: a = '😉🚗'\n // _safeSubstring(a, 1) === '😉🚗'\n // _safeSubstring(a, 0, 1) === '😉'\n // _safeSubstring(a, 0, 2) === '😉'\n // _safeSubstring(a, 0, 3) === '😉'\n // _safeSubstring(a, 0, 4) === '😉🚗'\n // _safeSubstring(a, 1, 2) === _safeSubstring(a, 1, 3) === '😉'\n // _safeSubstring(a, 2, 3) === _safeSubstring(a, 2, 4) === '🚗'\n _safeSubstring (targetString, startIndex, endIndex) {\n let newStartIndex = startIndex, newEndIndex = endIndex;\n let startChar = targetString[startIndex];\n if (this.lowSurrogateRex.test(startChar)) {\n newStartIndex--;\n }\n if (endIndex !== undefined) {\n if (endIndex - 1 !== startIndex) {\n let endChar = targetString[endIndex - 1];\n if (this.highSurrogateRex.test(endChar)) {\n newEndIndex--;\n }\n }\n else if (this.highSurrogateRex.test(startChar)) {\n newEndIndex++;\n }\n }\n return targetString.substring(newStartIndex, newEndIndex);\n },\n\n fragmentText: function (stringToken, allWidth, maxWidth, measureText) {\n //check the first character\n var wrappedWords = [];\n //fast return if strArr is empty\n if(stringToken.length === 0 || maxWidth < 0) {\n wrappedWords.push('');\n return wrappedWords;\n }\n\n var text = stringToken;\n while (allWidth > maxWidth && text.length > 1) {\n\n var fuzzyLen = text.length * ( maxWidth / allWidth ) | 0;\n var tmpText = this._safeSubstring(text, fuzzyLen);\n var width = allWidth - measureText(tmpText);\n var sLine = tmpText;\n var pushNum = 0;\n\n var checkWhile = 0;\n var checkCount = 10;\n\n //Exceeded the size\n while (width > maxWidth && checkWhile++ < checkCount) {\n fuzzyLen *= maxWidth / width;\n fuzzyLen = fuzzyLen | 0;\n tmpText = this._safeSubstring(text, fuzzyLen);\n width = allWidth - measureText(tmpText);\n }\n\n checkWhile = 0;\n\n //Find the truncation point\n while (width <= maxWidth && checkWhile++ < checkCount) {\n if (tmpText) {\n var exec = this.label_wordRex.exec(tmpText);\n pushNum = exec ? exec[0].length : 1;\n sLine = tmpText;\n }\n\n fuzzyLen = fuzzyLen + pushNum;\n tmpText = this._safeSubstring(text, fuzzyLen);\n width = allWidth - measureText(tmpText);\n }\n\n fuzzyLen -= pushNum;\n // in case maxWidth cannot contain any characters, need at least one character per line\n if (fuzzyLen === 0) {\n fuzzyLen = 1;\n sLine = this._safeSubstring(text, 1);\n }\n else if (fuzzyLen === 1 && this.highSurrogateRex.test(text[0])) {\n fuzzyLen = 2;\n sLine = this._safeSubstring(text, 2);\n }\n\n var sText = this._safeSubstring(text, 0, fuzzyLen), result;\n\n //symbol in the first\n if (this.label_wrapinspection) {\n if (this.label_symbolRex.test(sLine || tmpText)) {\n result = this.label_lastWordRex.exec(sText);\n fuzzyLen -= result ? result[0].length : 0;\n if (fuzzyLen === 0) fuzzyLen = 1;\n\n sLine = this._safeSubstring(text, fuzzyLen);\n sText = this._safeSubstring(text, 0, fuzzyLen);\n }\n }\n\n //To judge whether a English words are truncated\n if (this.label_firstEnglish.test(sLine)) {\n result = this.label_lastEnglish.exec(sText);\n if (result && sText !== result[0]) {\n fuzzyLen -= result[0].length;\n sLine = this._safeSubstring(text, fuzzyLen);\n sText = this._safeSubstring(text, 0, fuzzyLen);\n }\n }\n\n // The first line And do not wrap should not remove the space\n if (wrappedWords.length === 0) {\n wrappedWords.push(sText);\n }\n else {\n sText = sText.trimLeft();\n if (sText.length > 0) {\n wrappedWords.push(sText);\n }\n }\n text = sLine || tmpText;\n allWidth = measureText(text);\n }\n\n if (wrappedWords.length === 0) {\n wrappedWords.push(text);\n }\n else {\n text = text.trimLeft();\n if (text.length > 0) {\n wrappedWords.push(text);\n }\n }\n return wrappedWords;\n },\n};\n\ncc.textUtils = module.exports = textUtils;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst Texture2D = require('../assets/CCTexture2D');\n\nlet textureUtil = {\n loadImage (url, cb, target) {\n cc.assertID(url, 3103);\n\n var tex = cc.assetManager.assets.get(url);\n if (tex) {\n if (tex.loaded) {\n cb && cb.call(target, null, tex);\n return tex;\n }\n else\n {\n tex.once(\"load\", function(){\n cb && cb.call(target, null, tex);\n }, target);\n return tex;\n }\n }\n else {\n cc.assetManager.loadRemote(url, function (err, texture) {\n cb && cb.call(target, err, texture);\n });\n }\n },\n\n cacheImage (url, image) {\n if (url && image) {\n var tex = new Texture2D();\n tex.initWithElement(image);\n cc.assetManager.assets.add(url, tex);\n return tex;\n }\n },\n\n postLoadTexture (texture, callback) {\n if (texture.loaded) {\n callback && callback();\n return;\n }\n if (!texture.nativeUrl) {\n callback && callback();\n return;\n }\n // load image\n cc.assetManager.postLoadNative(texture, callback);\n }\n};\n\nmodule.exports = textureUtil;","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nlet NodeUnit = require('./node-unit');\nlet NodeMemPool = require('./node-mem-pool');\n\nmodule.exports = {\n NodeMemPool: new NodeMemPool(NodeUnit)\n};","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nlet MemPool = function (unitClass) {\n this._unitClass = unitClass;\n this._pool = [];\n this._findOrder = [];\n\n if (CC_JSB && CC_NATIVERENDERER) {\n this._initNative();\n }\n};\n\nlet proto = MemPool.prototype;\nproto._initNative = function () {\n this._nativeMemPool = new renderer.MemPool();\n};\n\nproto._buildUnit = function (unitID) {\n let unit = new this._unitClass(unitID, this);\n if (CC_JSB && CC_NATIVERENDERER) {\n this._nativeMemPool.updateCommonData(unitID, unit._data, unit._signData);\n }\n return unit;\n};\n\nproto._destroyUnit = function (unitID) {\n this._pool[unitID] = null;\n for (let idx = 0, n = this._findOrder.length; idx < n; idx++) {\n let unit = this._findOrder[idx];\n if (unit && unit.unitID == unitID) {\n this._findOrder.splice(idx, 1);\n break;\n }\n }\n if (CC_JSB && CC_NATIVERENDERER) {\n this._nativeMemPool.removeCommonData(unitID);\n }\n};\n\nproto._findUnitID = function () {\n let unitID = 0;\n let pool = this._pool;\n while (pool[unitID]) unitID++;\n return unitID;\n};\n\nproto.pop = function () {\n let findUnit = null;\n let idx = 0;\n let findOrder = this._findOrder;\n let pool = this._pool;\n for (let n = findOrder.length; idx < n; idx++) {\n let unit = findOrder[idx];\n if (unit && unit.hasSpace()) {\n findUnit = unit;\n break;\n }\n }\n\n if (!findUnit) {\n let unitID = this._findUnitID();\n findUnit = this._buildUnit(unitID);\n pool[unitID] = findUnit;\n findOrder.push(findUnit);\n idx = findOrder.length - 1;\n }\n\n // swap has space unit to first position, so next find will fast\n let firstUnit = findOrder[0];\n if (firstUnit !== findUnit) {\n findOrder[0] = findUnit;\n findOrder[idx] = firstUnit;\n }\n\n return findUnit.pop();\n};\n\nproto.push = function (info) {\n let unit = this._pool[info.unitID];\n unit.push(info.index);\n if (this._findOrder.length > 1 && unit.isAllFree()) {\n this._destroyUnit(info.unitID);\n }\n return unit;\n};\nmodule.exports = MemPool;","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nlet MemPool = require('./mem-pool');\nlet NodeMemPool = function (unitClass) {\n MemPool.call(this, unitClass);\n};\n\n(function(){\n let Super = function(){};\n Super.prototype = MemPool.prototype;\n NodeMemPool.prototype = new Super();\n})();\n\nlet proto = NodeMemPool.prototype;\nproto._initNative = function () {\n this._nativeMemPool = new renderer.NodeMemPool();\n};\n\nproto._destroyUnit = function (unitID) {\n MemPool.prototype._destroyUnit.call(this, unitID);\n if (CC_JSB && CC_NATIVERENDERER) {\n this._nativeMemPool.removeNodeData(unitID);\n }\n};\n\nmodule.exports = NodeMemPool;","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport { FLOAT_ARRAY_TYPE, FLOAT_BYTES } from '../../value-types/utils'\n\nconst Uint32_Bytes = 4;\nconst Uint8_Bytes = 1;\n\n// Space : [Dirty] [Size:4 Uint32]\nconst Dirty_Type = Uint32Array;\nconst Dirty_Members = 1;\nconst Dirty_Stride = Dirty_Members * Uint32_Bytes;\n\n// Space : [TRS] [Size:4 * 10 Float32|Float64]\nconst TRS_Members = 10;\nconst TRS_Stride = TRS_Members * FLOAT_BYTES;\n\n// Space : [LocalMatrix] [Size:4 * 16 Float32|Float64]\nconst LocalMatrix_Members = 16;\nconst LocalMatrix_Stride = LocalMatrix_Members * FLOAT_BYTES;\n\n// Space : [WorldMatrix] [Size:4 * 16 Float32|Float64]\nconst WorldMatrix_Members = 16;\nconst WorldMatrix_Stride = WorldMatrix_Members * FLOAT_BYTES;\n\n// Space : [Parent Unit] [Size:4 Uint32]\n// Space : [Parent Index] [Size:4 Uint32]\nconst Parent_Type = Uint32Array;\nconst Parent_Members = 2;\nconst Parent_Stride = Parent_Members * Uint32_Bytes;\n\n// Space : [ZOrder] [Size:4 Uint32]\nconst ZOrder_Type = Uint32Array;\nconst ZOrder_Members = 1;\nconst ZOrder_Stride = ZOrder_Members * Uint32_Bytes;\n\n// Space : [CullingMask] [Size:4 Int32]\nconst CullingMask_Type = Int32Array;\nconst CullingMask_Members = 1;\nconst CullingMask_Stride = CullingMask_Members * Uint32_Bytes;\n\n// Space : [Opacity] [Size:1 Uint8]\nconst Opacity_Type = Uint8Array;\nconst Opacity_Members = 1;\nconst Opacity_Stride = Opacity_Members * Uint8_Bytes;\n\n// Space : [Is3D] [Size:1 Uint8]\nconst Is3D_Type = Uint8Array;\nconst Is3D_Members = 1;\nconst Is3D_Stride = Is3D_Members * Uint8_Bytes;\n\n// Space : [NodePtr] [Size:4 * 2 Uint32]\nconst Node_Type = Uint32Array;\nconst Node_Members = 2;\n\n// Space : [Skew] [Size:4 * 2 Float32]\nconst Skew_Members = 2;\nconst Skew_Stride = Skew_Members * FLOAT_BYTES;\n\nlet UnitBase = require('./unit-base');\nlet NodeUnit = function (unitID, memPool) {\n UnitBase.call(this, unitID, memPool);\n\n let contentNum = this._contentNum;\n this.trsList = new FLOAT_ARRAY_TYPE(contentNum * TRS_Members);\n this.localMatList = new FLOAT_ARRAY_TYPE(contentNum * LocalMatrix_Members);\n this.worldMatList = new FLOAT_ARRAY_TYPE(contentNum * WorldMatrix_Members);\n\n if (CC_JSB && CC_NATIVERENDERER) {\n this.dirtyList = new Dirty_Type(contentNum * Dirty_Members);\n this.parentList = new Parent_Type(contentNum * Parent_Members);\n this.zOrderList = new ZOrder_Type(contentNum * ZOrder_Members);\n this.cullingMaskList = new CullingMask_Type(contentNum * CullingMask_Members);\n this.opacityList = new Opacity_Type(contentNum * Opacity_Members);\n this.is3DList = new Is3D_Type(contentNum * Is3D_Members);\n this.nodeList = new Node_Type(contentNum * Node_Members);\n this.skewList = new FLOAT_ARRAY_TYPE(contentNum * Skew_Members);\n\n this._memPool._nativeMemPool.updateNodeData(\n unitID,\n this.dirtyList,\n this.trsList,\n this.localMatList,\n this.worldMatList,\n this.parentList,\n this.zOrderList,\n this.cullingMaskList,\n this.opacityList,\n this.is3DList,\n this.nodeList,\n this.skewList\n );\n }\n\n for (let i = 0; i < contentNum; i ++) {\n let space = this._spacesData[i];\n\n space.trs = new FLOAT_ARRAY_TYPE(this.trsList.buffer, i * TRS_Stride, TRS_Members);\n space.localMat = new FLOAT_ARRAY_TYPE(this.localMatList.buffer, i * LocalMatrix_Stride, LocalMatrix_Members);\n space.worldMat = new FLOAT_ARRAY_TYPE(this.worldMatList.buffer, i * WorldMatrix_Stride, WorldMatrix_Members);\n\n if (CC_JSB && CC_NATIVERENDERER) {\n space.dirty = new Dirty_Type(this.dirtyList.buffer, i * Dirty_Stride, Dirty_Members);\n space.parent = new Parent_Type(this.parentList.buffer, i * Parent_Stride, Parent_Members);\n space.zOrder = new ZOrder_Type(this.zOrderList.buffer, i * ZOrder_Stride, ZOrder_Members);\n space.cullingMask = new CullingMask_Type(this.cullingMaskList.buffer, i * CullingMask_Stride, CullingMask_Members);\n space.opacity = new Opacity_Type(this.opacityList.buffer, i * Opacity_Stride, Opacity_Members);\n space.is3D = new Is3D_Type(this.is3DList.buffer, i * Is3D_Stride, Is3D_Members);\n space.skew = new FLOAT_ARRAY_TYPE(this.skewList.buffer, i * Skew_Stride, Skew_Members);\n }\n }\n};\n\n(function(){\n let Super = function(){};\n Super.prototype = UnitBase.prototype;\n NodeUnit.prototype = new Super();\n})();\n\nmodule.exports = NodeUnit;","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n// Unit has many segment, layout such as :\n// Head Free Pointer + Using Segment Num + Segment 1 + Segment 2 + Segment 3 ...\n\n// sign data format\n// Space : [If Free Flag] [Size:1 Uint16]\n// Space : [Next Free Index] [Size:1 Uint16]\n\n// invalid pointer value\nlet POINTER_INVALID_FLAG = 0xffff;\nlet SPACE_FREE_FLAG = 0x0;\nlet SPACE_USE_FLAG = 0x1;\nlet POS_NEXT_FREE = 0;\nlet POS_FREE_FLAG = 1;\n\nlet UnitBase = function (unitID, memPool, contentNum) {\n contentNum = contentNum || 128;\n\n // set unit id\n this.unitID = unitID;\n this._memPool = memPool;\n\n this._data = new Uint16Array(2);\n // head of the free content index\n this._data[0] = 0;\n // using segment num\n this._data[1] = 0;\n\n this._contentNum = contentNum;\n this._signData = new Uint16Array(this._contentNum * 2);\n this._spacesData = [];\n\n for (let i = 0; i < contentNum; i++) {\n let signIndex = i * 2;\n // store content block index but not sign array index\n this._signData[signIndex + POS_NEXT_FREE] = i + 1;\n this._signData[signIndex + POS_FREE_FLAG] = SPACE_FREE_FLAG;\n\n this._spacesData[i] = {\n index: i,\n unitID: unitID,\n };\n }\n // last one has no next space;\n this._signData[(contentNum - 1) * 2] = POINTER_INVALID_FLAG;\n};\n\nlet UnitBaseProto = UnitBase.prototype;\nUnitBaseProto.hasSpace = function () {\n return this._data[0] !== POINTER_INVALID_FLAG;\n};\n\nUnitBaseProto.isAllFree = function () {\n return this._data[1] == 0;\n};\n\n// pop space from unit\nUnitBaseProto.pop = function () {\n let headFreeIndex = this._data[0];\n if (headFreeIndex === POINTER_INVALID_FLAG) return null;\n\n let index = headFreeIndex;\n let signIndex = index * 2;\n let space = this._spacesData[index];\n\n // set use flag\n this._signData[signIndex + POS_FREE_FLAG] = SPACE_USE_FLAG;\n\n // store new next free space index\n this._data[0] = this._signData[signIndex + POS_NEXT_FREE];\n // add using segment num\n this._data[1]++;\n return space;\n};\n\n// push back to unit\nUnitBaseProto.push = function (index) {\n let signIndex = index * 2;\n\n // set free flag\n this._signData[signIndex + POS_FREE_FLAG] = SPACE_FREE_FLAG;\n\n // store head free index to the space\n this._signData[signIndex + POS_NEXT_FREE] = this._data[0];\n // update head free index\n this._data[0] = index;\n // sub using segment num\n this._data[1]--;\n};\n\n// dump all space info\nUnitBaseProto.dump = function () {\n let spaceNum = 0;\n let index = this._data[0];\n let freeStr = \"\";\n \n while (index != POINTER_INVALID_FLAG) {\n spaceNum ++;\n freeStr += index + \"->\";\n index = this._signData[index * 2 + POS_NEXT_FREE];\n }\n\n let usingNum = 0;\n let usingStr = \"\";\n let contentNum = this._contentNum;\n for (let i = 0; i < contentNum; i++) {\n let freeFlag = this._signData[i * 2 + POS_FREE_FLAG];\n if (freeFlag == SPACE_USE_FLAG) {\n usingNum ++;\n usingStr += i + \"->\";\n }\n }\n \n let totalNum = spaceNum + usingNum;\n console.log(\n \"unitID:\", this.unitID, \n \"spaceNum:\", spaceNum, \n \"calc using num:\", usingNum, \n 'store using num:', this._data[1], \n 'calc total num:', totalNum, \n 'actually total num:', this._contentNum\n );\n console.log(\"free info:\", freeStr);\n console.log(\"using info:\", usingStr);\n\n if (usingNum != this._data[1]) {\n cc.error(\n 'using num error', \n \"calc using num:\", usingNum, \n 'store using num:', this._data[1]\n );\n }\n\n if (spaceNum + usingNum != this._contentNum) {\n cc.error(\n 'total num error', \n 'calc total num:', totalNum, \n 'actually total num:', this._contentNum\n );\n }\n};\n\nmodule.exports = UnitBase;","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport ValueType from './value-type';\nimport CCClass from '../platform/CCClass';\nimport misc from '../utils/misc';\n\n/**\n * !#en\n * Representation of RGBA colors.\n *\n * Each color component is a floating point value with a range from 0 to 255.\n *\n * You can also use the convenience method {{#crossLink \"cc/color:method\"}}cc.color{{/crossLink}} to create a new Color.\n *\n * !#zh\n * cc.Color 用于表示颜色。\n *\n * 它包含 RGBA 四个以浮点数保存的颜色分量,每个的值都在 0 到 255 之间。\n *\n * 您也可以通过使用 {{#crossLink \"cc/color:method\"}}cc.color{{/crossLink}} 的便捷方法来创建一个新的 Color。\n *\n * @class Color\n * @extends ValueType\n */\nexport default class Color extends ValueType {\n static div = Color.divide;\n static sub = Color.subtract;\n static mul = Color.multiply;\n\n /**\n * !#en Solid white, RGBA is [255, 255, 255, 255].\n * !#zh 纯白色,RGBA 是 [255, 255, 255, 255]。\n * @property WHITE\n * @type {Color}\n * @static\n */\n static get WHITE () { return new Color(255, 255, 255, 255); }\n static readonly WHITE_R: Color = Color.WHITE;\n\n /**\n * !#en Solid black, RGBA is [0, 0, 0, 255].\n * !#zh 纯黑色,RGBA 是 [0, 0, 0, 255]。\n * @property BLACK\n * @type {Color}\n * @static\n */\n static get BLACK () { return new Color(0, 0, 0, 255); }\n static readonly BLACK_R: Color = Color.BLACK;\n\n /**\n * !#en Transparent, RGBA is [0, 0, 0, 0].\n * !#zh 透明,RGBA 是 [0, 0, 0, 0]。\n * @property TRANSPARENT\n * @type {Color}\n * @static\n */\n static get TRANSPARENT () { return new Color(0, 0, 0, 0); }\n static readonly TRANSPARENT_R: Color = Color.TRANSPARENT;\n\n /**\n * !#en Grey, RGBA is [127.5, 127.5, 127.5].\n * !#zh 灰色,RGBA 是 [127.5, 127.5, 127.5]。\n * @property GRAY\n * @type {Color}\n * @static\n */\n static get GRAY () { return new Color(127.5, 127.5, 127.5); }\n static readonly GRAY_R: Color = Color.GRAY;\n\n /**\n * !#en Solid red, RGBA is [255, 0, 0].\n * !#zh 纯红色,RGBA 是 [255, 0, 0]。\n * @property RED\n * @type {Color}\n * @static\n */\n static get RED () { return new Color(255, 0, 0); }\n static readonly RED_R: Color = Color.RED;\n /**\n * !#en Solid green, RGBA is [0, 255, 0].\n * !#zh 纯绿色,RGBA 是 [0, 255, 0]。\n * @property GREEN\n * @type {Color}\n * @static\n */\n static get GREEN () { return new Color(0, 255, 0); }\n static readonly GREEN_R: Color = Color.GREEN;\n /**\n * !#en Solid blue, RGBA is [0, 0, 255].\n * !#zh 纯蓝色,RGBA 是 [0, 0, 255]。\n * @property BLUE\n * @type {Color}\n * @static\n */\n static get BLUE () { return new Color(0, 0, 255); }\n static readonly BLUE_R: Color = Color.BLUE;\n /**\n * !#en Yellow, RGBA is [255, 235, 4].\n * !#zh 黄色,RGBA 是 [255, 235, 4]。\n * @property YELLOW\n * @type {Color}\n * @static\n */\n static get YELLOW () { return new Color(255, 235, 4); }\n static readonly YELLOW_R: Color = Color.YELLOW;\n /**\n * !#en Orange, RGBA is [255, 127, 0].\n * !#zh 橙色,RGBA 是 [255, 127, 0]。\n * @property ORANGE\n * @type {Color}\n * @static\n */\n static get ORANGE () { return new Color(255, 127, 0); }\n static readonly ORANGE_R: Color = Color.ORANGE;\n /**\n * !#en Cyan, RGBA is [0, 255, 255].\n * !#zh 青色,RGBA 是 [0, 255, 255]。\n * @property CYAN\n * @type {Color}\n * @static\n */\n static get CYAN () { return new Color(0, 255, 255); }\n static readonly CYAN_R: Color = Color.CYAN;\n /**\n * !#en Magenta, RGBA is [255, 0, 255].\n * !#zh 洋红色(品红色),RGBA 是 [255, 0, 255]。\n * @property MAGENTA\n * @type {Color}\n * @static\n */\n static get MAGENTA () { return new Color(255, 0, 255); }\n static readonly MAGENTA_R: Color = Color.MAGENTA;\n\n /**\n * Copy content of a color into another.\n * @method copy\n * @typescript\n * copy (out: Color, a: Color): Color\n * @static\n */\n static copy (out: Color, a: Color): Color {\n out.r = a.r;\n out.g = a.g;\n out.b = a.b;\n out.a = a.a;\n return out;\n }\n\n /**\n * Clone a new color.\n * @method clone\n * @typescript\n * clone (a: Color): Color\n * @static\n */\n static clone (a: Color): Color {\n return new Color(a.r, a.g, a.b, a.a);\n }\n\n /**\n * Set the components of a color to the given values.\n * @method set\n * @typescript\n * set (out: Color, r?: number, g?: number, b?: number, a?: number): Color\n * @static\n */\n static set (out: Color, r = 255, g = 255, b = 255, a = 255): Color {\n out.r = r;\n out.g = g;\n out.b = b;\n out.a = a;\n return out;\n }\n\n /**\n * Converts the hexadecimal formal color into rgb formal.\n * @method fromHex\n * @typescript\n * fromHex (out: Color, hex: number): Color\n * @static\n * @deprecated\n */\n static fromHex (out: Color, hex: number): Color {\n let r = ((hex >> 24)) / 255.0;\n let g = ((hex >> 16) & 0xff) / 255.0;\n let b = ((hex >> 8) & 0xff) / 255.0;\n let a = ((hex) & 0xff) / 255.0;\n\n out.r = r;\n out.g = g;\n out.b = b;\n out.a = a;\n return out;\n }\n\n /**\n * Converts the hexadecimal formal color into rgb formal.\n * @method fromHEX\n * @typescript\n * fromHEX (out: Color, hex: string): Color\n * @static\n */\n static fromHEX (out: Color, hexString: string): Color {\n hexString = (hexString.indexOf('#') === 0) ? hexString.substring(1) : hexString;\n out.r = parseInt(hexString.substr(0, 2), 16) || 0;\n out.g = parseInt(hexString.substr(2, 2), 16) || 0;\n out.b = parseInt(hexString.substr(4, 2), 16) || 0;\n out.a = parseInt(hexString.substr(6, 2), 16) || 255;\n out._val = ((out.a << 24) >>> 0) + (out.b << 16) + (out.g << 8) + out.r;\n return out;\n }\n\n /**\n * Add components of two colors, respectively.\n * @method add\n * @typescript\n * add (out: Color, a: Color, b: Color): Color\n * @static\n */\n static add (out: Color, a: Color, b: Color): Color {\n out.r = a.r + b.r;\n out.g = a.g + b.g;\n out.b = a.b + b.b;\n out.a = a.a + b.a;\n return out;\n }\n\n /**\n * Subtract components of color b from components of color a, respectively.\n * @method subtract\n * @typescript\n * subtract (out: Color, a: Color, b: Color): Color\n * @static\n */\n static subtract (out: Color, a: Color, b: Color): Color {\n out.r = a.r - b.r;\n out.g = a.g - b.g;\n out.b = a.b - b.b;\n out.a = a.a - b.a;\n return out;\n }\n\n /**\n * Multiply components of two colors, respectively.\n * @method multiply\n * @typescript\n * multiply (out: Color, a: Color, b: Color): Color\n * @static\n */\n static multiply (out: Color, a: Color, b: Color): Color {\n out.r = a.r * b.r;\n out.g = a.g * b.g;\n out.b = a.b * b.b;\n out.a = a.a * b.a;\n return out;\n }\n\n /**\n * Divide components of color a by components of color b, respectively.\n * @method divide\n * @typescript\n * divide (out: Color, a: Color, b: Color): Color\n * @static\n */\n static divide (out: Color, a: Color, b: Color): Color {\n out.r = a.r / b.r;\n out.g = a.g / b.g;\n out.b = a.b / b.b;\n out.a = a.a / b.a;\n return out;\n }\n\n /**\n * Scales a color by a number.\n * @method scale\n * @typescript\n * scale (out: Color, a: Color, b: number): Color\n * @static\n */\n static scale (out: Color, a: Color, b: number): Color {\n out.r = a.r * b;\n out.g = a.g * b;\n out.b = a.b * b;\n out.a = a.a * b;\n return out;\n }\n\n /**\n * Performs a linear interpolation between two colors.\n * @method lerp\n * @typescript\n * lerp (out: Color, a: Color, b: Color, t: number): Color\n * @static\n */\n static lerp (out: Color, a: Color, b: Color, t: number): Color {\n let ar = a.r,\n ag = a.g,\n ab = a.b,\n aa = a.a;\n out.r = ar + t * (b.r - ar);\n out.g = ag + t * (b.g - ag);\n out.b = ab + t * (b.b - ab);\n out.a = aa + t * (b.a - aa);\n return out;\n }\n\n /**\n * !#zh 颜色转数组\n * !#en Turn an array of colors\n * @method toArray\n * @typescript\n * toArray > (out: Out, a: IColorLike, ofs?: number): Out\n * @param ofs 数组起始偏移量\n * @static\n */\n static toArray> (out: Out, a: IColorLike, ofs = 0) {\n const scale = (a instanceof Color || a.a > 1) ? 1 / 255 : 1;\n out[ofs + 0] = a.r * scale;\n out[ofs + 1] = a.g * scale;\n out[ofs + 2] = a.b * scale;\n out[ofs + 3] = a.a * scale;\n return out;\n }\n\n /**\n * !#zh 数组转颜色\n * !#en An array of colors turn\n * @method fromArray\n * @typescript\n * fromArray (arr: IWritableArrayLike, out: Out, ofs?: number): Out\n * @param ofs 数组起始偏移量\n * @static\n */\n static fromArray (arr: IWritableArrayLike, out: Out, ofs = 0) {\n out.r = arr[ofs + 0] * 255;\n out.g = arr[ofs + 1] * 255;\n out.b = arr[ofs + 2] * 255;\n out.a = arr[ofs + 3] * 255;\n return out;\n }\n\n /**\n * !#zh 颜色 RGB 预乘 Alpha 通道\n * !#en RGB premultiply alpha channel\n * @method premultiplyAlpha\n * @typescript\n * premultiplyAlpha (out: Out, a: IColorLike)\n * @param out 返回颜色\n * @param color 预乘处理的目标颜色\n * @static\n */\n static premultiplyAlpha (out, color) {\n let alpha = color.a / 255.0;\n out.r = color.r * alpha;\n out.g = color.g * alpha;\n out.b = color.b * alpha;\n\n out._fastSetA(color.a);\n\n return out;\n }\n\n _val: number = 0;\n\n /**\n * @method constructor\n * @param {Number} [r=0] - red component of the color, default value is 0.\n * @param {Number} [g=0] - green component of the color, defualt value is 0.\n * @param {Number} [b=0] - blue component of the color, default value is 0.\n * @param {Number} [a=255] - alpha component of the color, default value is 255.\n */\n constructor (r: Color | number = 0, g: number = 0, b: number = 0, a: number = 255) {\n super();\n if (typeof r === 'object') {\n g = r.g;\n b = r.b;\n a = r.a;\n r = r.r;\n }\n\n this._val = ((a << 24) >>> 0) + (b << 16) + (g << 8) + (r|0);\n }\n\n /**\n * !#en Clone a new color from the current color.\n * !#zh 克隆当前颜色。\n * @method clone\n * @return {Color} Newly created color.\n * @example\n * var color = new cc.Color();\n * var newColor = color.clone();// Color {r: 0, g: 0, b: 0, a: 255}\n */\n clone (): Color {\n var ret = new Color();\n ret._val = this._val;\n return ret;\n }\n\n /**\n * !#en TODO\n * !#zh 判断两个颜色是否相等。\n * @method equals\n * @param {Color} other\n * @return {Boolean}\n * @example\n * var color1 = cc.Color.WHITE;\n * var color2 = new cc.Color(255, 255, 255);\n * cc.log(color1.equals(color2)); // true;\n * color2 = cc.Color.RED;\n * cc.log(color2.equals(color1)); // false;\n */\n equals (other: Color): boolean {\n return other && this._val === other._val;\n }\n\n /**\n * !#en TODO\n * !#zh 线性插值\n * @method lerp\n * @param {Color} to\n * @param {number} ratio - the interpolation coefficient.\n * @param {Color} [out] - optional, the receiving vector.\n * @return {Color}\n * @example {@link cocos2d/core/value-types/CCColor/lerp.js}\n */\n lerp (to: Color, ratio: number, out?: Color): Color {\n out = out || new Color();\n var r = this.r;\n var g = this.g;\n var b = this.b;\n var a = this.a;\n out.r = r + (to.r - r) * ratio;\n out.g = g + (to.g - g) * ratio;\n out.b = b + (to.b - b) * ratio;\n out.a = a + (to.a - a) * ratio;\n return out;\n };\n\n /**\n * !#en TODO\n * !#zh 转换为方便阅读的字符串。\n * @method toString\n * @return {String}\n * @example\n * var color = cc.Color.WHITE;\n * color.toString(); // \"rgba(255, 255, 255, 255)\"\n */\n toString (): string {\n return \"rgba(\" +\n this.r.toFixed() + \", \" +\n this.g.toFixed() + \", \" +\n this.b.toFixed() + \", \" +\n this.a.toFixed() + \")\";\n };\n\n /**\n * !#en Get or set red channel value\n * !#zh 获取或者设置红色通道\n * @property {number} r\n */\n get r (): number {\n return this.getR();\n }\n set r (v: number) {\n this.setR(v);\n }\n\n /**\n * !#en Get or set green channel value\n * !#zh 获取或者设置绿色通道\n * @property {number} g\n */\n get g (): number {\n return this.getG();\n }\n set g (v: number) {\n this.setG(v);\n }\n\n /**\n * !#en Get or set blue channel value\n * !#zh 获取或者设置蓝色通道\n * @property {number} b\n */\n get b (): number {\n return this.getB();\n }\n set b (v: number) {\n this.setB(v);\n }\n\n /**\n * !#en Get or set alpha channel value\n * !#zh 获取或者设置透明通道\n * @property {number} a\n */\n get a (): number {\n return this.getA();\n }\n set a (v: number) {\n this.setA(v);\n }\n\n /**\n * !#en Gets red channel value\n * !#zh 获取当前颜色的红色值。\n * @method getR\n * @return {Number} red value.\n */\n getR (): number {\n return this._val & 0x000000ff;\n }\n /**\n * !#en Sets red value and return the current color object\n * !#zh 设置当前的红色值,并返回当前对象。\n * @method setR\n * @param {Number} red - the new Red component.\n * @return {Color} this color.\n * @example\n * var color = new cc.Color();\n * color.setR(255); // Color {r: 255, g: 0, b: 0, a: 255}\n */\n setR (red): this {\n red = ~~misc.clampf(red, 0, 255);\n this._val = ((this._val & 0xffffff00) | red) >>> 0;\n return this;\n }\n /**\n * !#en Gets green channel value\n * !#zh 获取当前颜色的绿色值。\n * @method getG\n * @return {Number} green value.\n */\n getG (): number {\n return (this._val & 0x0000ff00) >> 8;\n }\n /**\n * !#en Sets green value and return the current color object\n * !#zh 设置当前的绿色值,并返回当前对象。\n * @method setG\n * @param {Number} green - the new Green component.\n * @return {Color} this color.\n * @example\n * var color = new cc.Color();\n * color.setG(255); // Color {r: 0, g: 255, b: 0, a: 255}\n */\n setG (green): this {\n green = ~~misc.clampf(green, 0, 255);\n this._val = ((this._val & 0xffff00ff) | (green << 8)) >>> 0;\n return this;\n }\n /**\n * !#en Gets blue channel value\n * !#zh 获取当前颜色的蓝色值。\n * @method getB\n * @return {Number} blue value.\n */\n getB (): number {\n return (this._val & 0x00ff0000) >> 16;\n }\n /**\n * !#en Sets blue value and return the current color object\n * !#zh 设置当前的蓝色值,并返回当前对象。\n * @method setB\n * @param {Number} blue - the new Blue component.\n * @return {Color} this color.\n * @example\n * var color = new cc.Color();\n * color.setB(255); // Color {r: 0, g: 0, b: 255, a: 255}\n */\n setB (blue): this {\n blue = ~~misc.clampf(blue, 0, 255);\n this._val = ((this._val & 0xff00ffff) | (blue << 16)) >>> 0;\n return this;\n }\n /**\n * !#en Gets alpha channel value\n * !#zh 获取当前颜色的透明度值。\n * @method getA\n * @return {Number} alpha value.\n */\n getA (): number {\n return (this._val & 0xff000000) >>> 24;\n }\n /**\n * !#en Sets alpha value and return the current color object\n * !#zh 设置当前的透明度,并返回当前对象。\n * @method setA\n * @param {Number} alpha - the new Alpha component.\n * @return {Color} this color.\n * @example\n * var color = new cc.Color();\n * color.setA(0); // Color {r: 0, g: 0, b: 0, a: 0}\n */\n setA (alpha): this {\n alpha = ~~misc.clampf(alpha, 0, 255);\n this._val = ((this._val & 0x00ffffff) | (alpha << 24)) >>> 0;\n return this;\n }\n\n /**\n * !#en Convert color to css format.\n * !#zh 转换为 CSS 格式。\n * @method toCSS\n * @param {String} [opt=\"rgba\"] - \"rgba\", \"rgb\", \"#rgb\" or \"#rrggbb\".\n * @return {String}\n * @example\n * var color = cc.Color.BLACK;\n * color.toCSS(); // \"rgba(0,0,0,1.00)\";\n * color.toCSS(\"rgba\"); // \"rgba(0,0,0,1.00)\";\n * color.toCSS(\"rgb\"); // \"rgba(0,0,0)\";\n * color.toCSS(\"#rgb\"); // \"#000\";\n * color.toCSS(\"#rrggbb\"); // \"#000000\";\n */\n toCSS (opt: string): string {\n if (!opt || opt === 'rgba') {\n return \"rgba(\" +\n this.r + \",\" +\n this.g + \",\" +\n this.b + \",\" +\n (this.a / 255).toFixed(2) + \")\"\n ;\n }\n else if (opt === 'rgb') {\n return \"rgb(\" +\n this.r + \",\" +\n this.g + \",\" +\n this.b + \")\"\n ;\n }\n else {\n return '#' + this.toHEX(opt);\n }\n }\n\n /**\n * !#en Read hex string and store color data into the current color object, the hex string must be formated as rgba or rgb.\n * !#zh 读取 16 进制颜色。\n * @method fromHEX\n * @param {String} hexString\n * @return {Color}\n * @chainable\n * @example\n * var color = cc.Color.BLACK;\n * color.fromHEX(\"#FFFF33\"); // Color {r: 255, g: 255, b: 51, a: 255};\n */\n fromHEX (hexString: string): this {\n hexString = (hexString.indexOf('#') === 0) ? hexString.substring(1) : hexString;\n let r = parseInt(hexString.substr(0, 2), 16) || 0;\n let g = parseInt(hexString.substr(2, 2), 16) || 0;\n let b = parseInt(hexString.substr(4, 2), 16) || 0;\n let a = parseInt(hexString.substr(6, 2), 16) || 255;\n this._val = ((a << 24) >>> 0) + (b << 16) + (g << 8) + r;\n return this;\n }\n\n /**\n * !#en convert Color to HEX color string.\n * !#zh 转换为 16 进制。\n * @method toHEX\n * @param {String} [fmt=\"#rrggbb\"] - \"#rgb\", \"#rrggbb\" or \"#rrggbbaa\".\n * @return {String}\n * @example\n * var color = cc.Color.BLACK;\n * color.toHEX(\"#rgb\"); // \"000\";\n * color.toHEX(\"#rrggbb\"); // \"000000\";\n */\n toHEX (fmt): string {\n const prefix = '0';\n // #rrggbb\n let hex = [\n (this.r < 16 ? prefix : '') + (this.r).toString(16),\n (this.g < 16 ? prefix : '') + (this.g).toString(16),\n (this.b < 16 ? prefix : '') + (this.b).toString(16),\n ];\n if (fmt === '#rgb') {\n hex[0] = hex[0][0];\n hex[1] = hex[1][0];\n hex[2] = hex[2][0];\n }\n else if (fmt === '#rrggbbaa') {\n hex.push((this.a < 16 ? prefix : '') + (this.a).toString(16));\n }\n return hex.join('');\n };\n\n /**\n * !#en Convert to 24bit rgb value.\n * !#zh 转换为 24bit 的 RGB 值。\n * @method toRGBValue\n * @return {Number}\n * @example\n * var color = cc.Color.YELLOW;\n * color.toRGBValue(); // 16771844;\n */\n toRGBValue (): number {\n return this._val & 0x00ffffff;\n }\n\n /**\n * !#en Read HSV model color and convert to RGB color\n * !#zh 读取 HSV(色彩模型)格式。\n * @method fromHSV\n * @param {Number} h\n * @param {Number} s\n * @param {Number} v\n * @return {Color}\n * @chainable\n * @example\n * var color = cc.Color.YELLOW;\n * color.fromHSV(0, 0, 1); // Color {r: 255, g: 255, b: 255, a: 255};\n */\n fromHSV (h, s, v): this {\n var r, g, b;\n if (s === 0) {\n r = g = b = v;\n }\n else {\n if (v === 0) {\n r = g = b = 0;\n }\n else {\n if (h === 1) h = 0;\n h *= 6;\n var i = Math.floor(h);\n var f = h - i;\n var p = v * (1 - s);\n var q = v * (1 - (s * f));\n var t = v * (1 - (s * (1 - f)));\n switch (i) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n\n case 5:\n r = v;\n g = p;\n b = q;\n break;\n }\n }\n }\n r *= 255;\n g *= 255;\n b *= 255;\n this._val = ((this.a << 24) >>> 0) + (b << 16) + (g << 8) + (r|0);\n return this;\n }\n\n /**\n * !#en Transform to HSV model color\n * !#zh 转换为 HSV(色彩模型)格式。\n * @method toHSV\n * @return {Object} - {h: number, s: number, v: number}.\n * @example\n * var color = cc.Color.YELLOW;\n * color.toHSV(); // Object {h: 0.1533864541832669, s: 0.9843137254901961, v: 1};\n */\n toHSV () {\n var r = this.r / 255;\n var g = this.g / 255;\n var b = this.b / 255;\n var hsv = { h: 0, s: 0, v: 0 };\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var delta = 0;\n hsv.v = max;\n hsv.s = max ? (max - min) / max : 0;\n if (!hsv.s) hsv.h = 0;\n else {\n delta = max - min;\n if (r === max) hsv.h = (g - b) / delta;\n else if (g === max) hsv.h = 2 + (b - r) / delta;\n else hsv.h = 4 + (r - g) / delta;\n hsv.h /= 6;\n if (hsv.h < 0) hsv.h += 1.0;\n }\n return hsv;\n }\n\n /**\n * !#en Set the color\n * !#zh 设置颜色\n * @method set\n * @typescript\n * set (color: Color): Color\n * @param {Color} color\n */\n set (color: Color): this {\n if (color._val) {\n this._val = color._val;\n }\n else {\n this.r = color.r;\n this.g = color.g;\n this.b = color.b;\n this.a = color.a;\n }\n return this;\n }\n\n _fastSetA (alpha) {\n this._val = ((this._val & 0x00ffffff) | (alpha << 24)) >>> 0;\n }\n\n /**\n * !#en Multiplies the current color by the specified color\n * !#zh 将当前颜色乘以与指定颜色\n * @method multiply\n * @return {Color}\n * @param {Color} other\n */\n multiply (other: Color) {\n let r = ((this._val & 0x000000ff) * other.r) >> 8;\n let g = ((this._val & 0x0000ff00) * other.g) >> 8;\n let b = ((this._val & 0x00ff0000) * other.b) >> 8;\n let a = ((this._val & 0xff000000) >>> 8) * other.a;\n this._val = (a & 0xff000000) | (b & 0x00ff0000) | (g & 0x0000ff00) | (r & 0x000000ff);\n return this;\n }\n}\n\nCCClass.fastDefine('cc.Color', Color, { r: 0, g: 0, b: 0, a: 255 });\n\n\ncc.Color = Color;\n\n/**\n * @module cc\n */\n\n/**\n * !#en\n * The convenience method to create a new {{#crossLink \"Color/Color:method\"}}cc.Color{{/crossLink}}\n * Alpha channel is optional. Default value is 255.\n *\n * !#zh\n * 通过该方法来创建一个新的 {{#crossLink \"Color/Color:method\"}}cc.Color{{/crossLink}} 对象。\n * Alpha 通道是可选的。默认值是 255。\n *\n * @method color\n * @param {Number} [r=0]\n * @param {Number} [g=0]\n * @param {Number} [b=0]\n * @param {Number} [a=255]\n * @return {Color}\n * @example {@link cocos2d/core/value-types/CCColor/color.js}\n */\ncc.color = function color (r, g, b, a) {\n if (typeof r === 'string') {\n var result = new Color();\n return result.fromHEX(r);\n }\n if (typeof r === 'object') {\n return new Color(r.r, r.g, r.b, r.a);\n }\n return new Color(r, g, b, a);\n};\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nexport { default as Vec2 } from './vec2';\nexport { default as Vec3} from './vec3';\nexport { default as Vec4} from './vec4';\nexport { default as Mat4} from './mat4';\nexport { default as Mat3} from './mat3';\nexport { default as Rect} from './rect';\nexport { default as Size} from './size';\nexport { default as Color} from './color';\nexport { default as Quat} from './quat';\nexport { default as Trs} from './trs';\nexport * from './utils';\n\ncc.math = module.exports;\n","import { EPSILON, FLOAT_ARRAY_TYPE } from '../value-types/utils';\nimport Vec3 from './vec3';\nimport Vec2 from './vec2';\nimport Mat4 from './mat4';\nimport Quat from './quat';\n\n/**\n * Mathematical 3x3 matrix.\n *\n * NOTE: we use column-major matrix for all matrix calculation.\n *\n * This may lead to some confusion when referencing OpenGL documentation,\n * however, which represents out all matricies in column-major format.\n * This means that while in code a matrix may be typed out as:\n *\n * [1, 0, 0, 0,\n * 0, 1, 0, 0,\n * 0, 0, 1, 0,\n * x, y, z, 0]\n *\n * The same matrix in the [OpenGL documentation](https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glTranslate.xml)\n * is written as:\n *\n * 1 0 0 x\n * 0 1 0 y\n * 0 0 1 z\n * 0 0 0 0\n *\n * Please rest assured, however, that they are the same thing!\n * This is not unique to glMatrix, either, as OpenGL developers have long been confused by the\n * apparent lack of consistency between the memory layout and the documentation.\n *\n * @class Mat3\n * @extends ValueType\n */\nexport default class Mat3 {\n static sub = Mat3.subtract;\n static mul = Mat3.multiply;\n\n /**\n * Identity of Mat3\n * @property {Mat3} IDENTITY\n * @static\n */\n static IDENTITY = Object.freeze(new Mat3());\n\n /**\n * Creates a matrix, with elements specified separately.\n *\n * @param {Number} m00 - Value assigned to element at column 0 row 0.\n * @param {Number} m01 - Value assigned to element at column 0 row 1.\n * @param {Number} m02 - Value assigned to element at column 0 row 2.\n * @param {Number} m03 - Value assigned to element at column 1 row 0.\n * @param {Number} m04 - Value assigned to element at column 1 row 1.\n * @param {Number} m05 - Value assigned to element at column 1 row 2.\n * @param {Number} m06 - Value assigned to element at column 2 row 0.\n * @param {Number} m07 - Value assigned to element at column 2 row 1.\n * @param {Number} m08 - Value assigned to element at column 2 row 2.\n * @returns {Mat3} The newly created matrix.\n * @static\n */\n static create (m00: number = 1, m01: number = 0, m02: number = 0, m03: number = 0, m04: number = 1, m05: number = 0, m06: number = 0, m07: number = 0, m08: number = 1): Mat3 {\n return new Mat3(m00, m01, m02, m03, m04, m05, m06, m07, m08);\n }\n\n /**\n * Clone a matrix.\n *\n * @param {Mat3} a - Matrix to clone.\n * @returns {Mat3} The newly created matrix.\n * @static\n */\n static clone (a: Mat3): Mat3 {\n let am = a.m;\n return new Mat3(\n am[0], am[1], am[2],\n am[3], am[4], am[5],\n am[6], am[7], am[8]\n );\n }\n\n /**\n * Copy content of a matrix into another.\n *\n * @param {Mat3} out - Matrix to modified.\n * @param {Mat3} a - The specified matrix.\n * @returns {Mat3} out.\n * @static\n */\n static copy (out: Mat3, a: Mat3): Mat3 {\n out.m.set(a.m);\n return out;\n }\n\n /**\n * Sets the elements of a matrix to the given values.\n *\n * @param {Mat3} out - The matrix to modified.\n * @param {Number} m00 - Value assigned to element at column 0 row 0.\n * @param {Number} m01 - Value assigned to element at column 0 row 1.\n * @param {Number} m02 - Value assigned to element at column 0 row 2.\n * @param {Number} m10 - Value assigned to element at column 1 row 0.\n * @param {Number} m11 - Value assigned to element at column 1 row 1.\n * @param {Number} m12 - Value assigned to element at column 1 row 2.\n * @param {Number} m20 - Value assigned to element at column 2 row 0.\n * @param {Number} m21 - Value assigned to element at column 2 row 1.\n * @param {Number} m22 - Value assigned to element at column 2 row 2.\n * @returns {Mat3} out.\n * @static\n */\n static set (out: Mat3, m00: number, m01: number, m02: number, m10: number, m11: number, m12: number, m20: number, m21: number, m22: number): Mat3 {\n let outm = out.m;\n outm[0] = m00;\n outm[1] = m01;\n outm[2] = m02;\n outm[3] = m10;\n outm[4] = m11;\n outm[5] = m12;\n outm[6] = m20;\n outm[7] = m21;\n outm[8] = m22;\n return out;\n }\n\n /**\n * return an identity matrix.\n *\n * @returns {Mat3} out.\n * @static\n */\n static identity (out: Mat3): Mat3 {\n let outm = out.m;\n outm[0] = 1;\n outm[1] = 0;\n outm[2] = 0;\n outm[3] = 0;\n outm[4] = 1;\n outm[5] = 0;\n outm[6] = 0;\n outm[7] = 0;\n outm[8] = 1;\n return out;\n }\n\n /**\n * Transposes a matrix.\n *\n * @param {Mat3} out - Matrix to store result.\n * @param {Mat3} a - Matrix to transpose.\n * @returns {Mat3} out.\n * @static\n */\n static transpose (out: Mat3, a: Mat3): Mat3 {\n let am = a.m, outm = out.m;\n // If we are transposing ourselves we can skip a few steps but have to cache some values\n if (out === a) {\n let a01 = am[1], a02 = am[2], a12 = am[5];\n outm[1] = am[3];\n outm[2] = am[6];\n outm[3] = a01;\n outm[5] = am[7];\n outm[6] = a02;\n outm[7] = a12;\n } else {\n outm[0] = am[0];\n outm[1] = am[3];\n outm[2] = am[6];\n outm[3] = am[1];\n outm[4] = am[4];\n outm[5] = am[7];\n outm[6] = am[2];\n outm[7] = am[5];\n outm[8] = am[8];\n }\n\n return out;\n }\n\n /**\n * Inverts a matrix.\n *\n * @param {Mat3} out - Matrix to store result.\n * @param {Mat3} a - Matrix to invert.\n * @returns {Mat3} out.\n * @static\n */\n static invert (out: Mat3, a: Mat3): Mat3 {\n let am = a.m, outm = out.m;\n let a00 = am[0], a01 = am[1], a02 = am[2],\n a10 = am[3], a11 = am[4], a12 = am[5],\n a20 = am[6], a21 = am[7], a22 = am[8];\n\n let b01 = a22 * a11 - a12 * a21;\n let b11 = -a22 * a10 + a12 * a20;\n let b21 = a21 * a10 - a11 * a20;\n\n // Calculate the determinant\n let det = a00 * b01 + a01 * b11 + a02 * b21;\n\n if (!det) {\n return out;\n }\n det = 1.0 / det;\n\n outm[0] = b01 * det;\n outm[1] = (-a22 * a01 + a02 * a21) * det;\n outm[2] = (a12 * a01 - a02 * a11) * det;\n outm[3] = b11 * det;\n outm[4] = (a22 * a00 - a02 * a20) * det;\n outm[5] = (-a12 * a00 + a02 * a10) * det;\n outm[6] = b21 * det;\n outm[7] = (-a21 * a00 + a01 * a20) * det;\n outm[8] = (a11 * a00 - a01 * a10) * det;\n return out;\n }\n\n /**\n * Calculates the adjugate of a matrix.\n *\n * @param {Mat3} out - Matrix to store result.\n * @param {Mat3} a - Matrix to calculate.\n * @returns {Mat3} out.\n * @static\n */\n static adjoint (out: Mat3, a: Mat3): Mat3 {\n let am = a.m, outm = out.m;\n let a00 = am[0], a01 = am[1], a02 = am[2],\n a10 = am[3], a11 = am[4], a12 = am[5],\n a20 = am[6], a21 = am[7], a22 = am[8];\n\n outm[0] = (a11 * a22 - a12 * a21);\n outm[1] = (a02 * a21 - a01 * a22);\n outm[2] = (a01 * a12 - a02 * a11);\n outm[3] = (a12 * a20 - a10 * a22);\n outm[4] = (a00 * a22 - a02 * a20);\n outm[5] = (a02 * a10 - a00 * a12);\n outm[6] = (a10 * a21 - a11 * a20);\n outm[7] = (a01 * a20 - a00 * a21);\n outm[8] = (a00 * a11 - a01 * a10);\n return out;\n }\n\n /**\n * Calculates the determinant of a matrix.\n *\n * @param {Mat3} a - Matrix to calculate.\n * @returns {Number} Determinant of a.\n * @static\n */\n static determinant (a: Mat3): number {\n let am = a.m;\n let a00 = am[0], a01 = am[1], a02 = am[2],\n a10 = am[3], a11 = am[4], a12 = am[5],\n a20 = am[6], a21 = am[7], a22 = am[8];\n\n return a00 * (a22 * a11 - a12 * a21) + a01 * (-a22 * a10 + a12 * a20) + a02 * (a21 * a10 - a11 * a20);\n }\n\n /**\n * Multiply two matrices explicitly.\n *\n * @param {Mat3} out - Matrix to store result.\n * @param {Mat3} a - The first operand.\n * @param {Mat3} b - The second operand.\n * @returns {Mat3} out.\n * @static\n */\n static multiply (out: Mat3, a: Mat3, b: Mat3): Mat3 {\n let am = a.m, bm = b.m, outm = out.m;\n let a00 = am[0], a01 = am[1], a02 = am[2],\n a10 = am[3], a11 = am[4], a12 = am[5],\n a20 = am[6], a21 = am[7], a22 = am[8];\n\n let b00 = bm[0], b01 = bm[1], b02 = bm[2];\n let b10 = bm[3], b11 = bm[4], b12 = bm[5];\n let b20 = bm[6], b21 = bm[7], b22 = bm[8];\n\n outm[0] = b00 * a00 + b01 * a10 + b02 * a20;\n outm[1] = b00 * a01 + b01 * a11 + b02 * a21;\n outm[2] = b00 * a02 + b01 * a12 + b02 * a22;\n\n outm[3] = b10 * a00 + b11 * a10 + b12 * a20;\n outm[4] = b10 * a01 + b11 * a11 + b12 * a21;\n outm[5] = b10 * a02 + b11 * a12 + b12 * a22;\n\n outm[6] = b20 * a00 + b21 * a10 + b22 * a20;\n outm[7] = b20 * a01 + b21 * a11 + b22 * a21;\n outm[8] = b20 * a02 + b21 * a12 + b22 * a22;\n return out;\n }\n\n /**\n * !#en Take the first third order of the fourth order matrix and multiply by the third order matrix\n * !#zh 取四阶矩阵的前三阶,与三阶矩阵相乘\n * @param {Mat3} out - Matrix to store result.\n * @param {Mat3} a - The first operand.\n * @param {Mat3} b - The second operand.\n * @returns {Mat3} out.\n * @static\n */\n static multiplyMat4 (out: Out, a: Out, b: IMat4Like) {\n let am = a.m, bm = b.m, outm = out.m;\n let a00 = am[0], a01 = am[1], a02 = am[2],\n a10 = am[3], a11 = am[4], a12 = am[5],\n a20 = am[6], a21 = am[7], a22 = am[8];\n\n const b00 = bm[0], b01 = bm[1], b02 = bm[2];\n const b10 = bm[4], b11 = bm[5], b12 = bm[6];\n const b20 = bm[8], b21 = bm[9], b22 = bm[10];\n\n outm[0] = b00 * a00 + b01 * a10 + b02 * a20;\n outm[1] = b00 * a01 + b01 * a11 + b02 * a21;\n outm[2] = b00 * a02 + b01 * a12 + b02 * a22;\n outm[3] = b10 * a00 + b11 * a10 + b12 * a20;\n outm[4] = b10 * a01 + b11 * a11 + b12 * a21;\n outm[5] = b10 * a02 + b11 * a12 + b12 * a22;\n outm[6] = b20 * a00 + b21 * a10 + b22 * a20;\n outm[7] = b20 * a01 + b21 * a11 + b22 * a21;\n outm[8] = b20 * a02 + b21 * a12 + b22 * a22;\n return out;\n }\n\n /**\n * Multiply a matrix with a translation matrix given by a translation offset.\n *\n * @param {Mat3} out - Matrix to store result.\n * @param {Mat3} a - Matrix to multiply.\n * @param {vec2} v - The translation offset.\n * @returns {Mat3} out.\n * @static\n */\n static translate (out: Mat3, a: Mat3, v: Vec2): Mat3 {\n let am = a.m, outm = out.m;\n let a00 = am[0], a01 = am[1], a02 = am[2],\n a10 = am[3], a11 = am[4], a12 = am[5],\n a20 = am[6], a21 = am[7], a22 = am[8];\n let x = v.x, y = v.y;\n\n outm[0] = a00;\n outm[1] = a01;\n outm[2] = a02;\n\n outm[3] = a10;\n outm[4] = a11;\n outm[5] = a12;\n\n outm[6] = x * a00 + y * a10 + a20;\n outm[7] = x * a01 + y * a11 + a21;\n outm[8] = x * a02 + y * a12 + a22;\n return out;\n }\n\n /**\n * Rotates a matrix by the given angle.\n *\n * @param {Mat3} out - Matrix to store result.\n * @param {Mat3} a - Matrix to rotate.\n * @param {Number} rad - The rotation angle.\n * @returns {Mat3} out\n * @static\n */\n static rotate (out: Mat3, a: Mat3, rad: number): Mat3 {\n let am = a.m, outm = out.m;\n let a00 = am[0], a01 = am[1], a02 = am[2],\n a10 = am[3], a11 = am[4], a12 = am[5],\n a20 = am[6], a21 = am[7], a22 = am[8];\n\n let s = Math.sin(rad);\n let c = Math.cos(rad);\n\n outm[0] = c * a00 + s * a10;\n outm[1] = c * a01 + s * a11;\n outm[2] = c * a02 + s * a12;\n\n outm[3] = c * a10 - s * a00;\n outm[4] = c * a11 - s * a01;\n outm[5] = c * a12 - s * a02;\n\n outm[6] = a20;\n outm[7] = a21;\n outm[8] = a22;\n return out;\n }\n\n /**\n * Multiply a matrix with a scale matrix given by a scale vector.\n *\n * @param {Mat3} out - Matrix to store result.\n * @param {Mat3} a - Matrix to multiply.\n * @param {vec2} v - The scale vector.\n * @returns {Mat3} out\n **/\n static scale (out: Mat3, a: Mat3, v: Vec2): Mat3 {\n let x = v.x, y = v.y;\n let am = a.m, outm = out.m;\n\n outm[0] = x * am[0];\n outm[1] = x * am[1];\n outm[2] = x * am[2];\n\n outm[3] = y * am[3];\n outm[4] = y * am[4];\n outm[5] = y * am[5];\n\n outm[6] = am[6];\n outm[7] = am[7];\n outm[8] = am[8];\n return out;\n }\n\n /**\n * Copies the upper-left 3x3 values of a 4x4 matrix into a 3x3 matrix.\n *\n * @param {Mat3} out - Matrix to store result.\n * @param {mat4} a - The 4x4 matrix.\n * @returns {Mat3} out.\n * @static\n */\n static fromMat4 (out: Mat3, a: Mat4): Mat3 {\n let am = a.m, outm = out.m;\n outm[0] = am[0];\n outm[1] = am[1];\n outm[2] = am[2];\n outm[3] = am[4];\n outm[4] = am[5];\n outm[5] = am[6];\n outm[6] = am[8];\n outm[7] = am[9];\n outm[8] = am[10];\n return out;\n }\n\n /**\n * Creates a matrix from a translation offset.\n * This is equivalent to (but much faster than):\n *\n * mat3.identity(dest);\n * mat3.translate(dest, dest, vec);\n *\n * @param {Mat3} out - Matrix to store result.\n * @param {vec2} v - The translation offset.\n * @returns {Mat3} out.\n * @static\n */\n static fromTranslation (out: Mat3, v: Vec2): Mat3 {\n let outm = out.m;\n outm[0] = 1;\n outm[1] = 0;\n outm[2] = 0;\n outm[3] = 0;\n outm[4] = 1;\n outm[5] = 0;\n outm[6] = v.x;\n outm[7] = v.y;\n outm[8] = 1;\n return out;\n }\n\n /**\n * Creates a matrix from a given angle.\n * This is equivalent to (but much faster than):\n *\n * mat3.identity(dest);\n * mat3.rotate(dest, dest, rad);\n *\n * @param {Mat3} out - Matrix to store result.\n * @param {Number} rad - The rotation angle.\n * @returns {Mat3} out.\n * @static\n */\n static fromRotation (out: Mat3, rad: number): Mat3 {\n let s = Math.sin(rad), c = Math.cos(rad);\n let outm = out.m;\n\n outm[0] = c;\n outm[1] = s;\n outm[2] = 0;\n\n outm[3] = -s;\n outm[4] = c;\n outm[5] = 0;\n\n outm[6] = 0;\n outm[7] = 0;\n outm[8] = 1;\n return out;\n }\n\n /**\n * Creates a matrix from a scale vector.\n * This is equivalent to (but much faster than):\n *\n * mat3.identity(dest);\n * mat3.scale(dest, dest, vec);\n *\n * @param {Mat3} out - Matrix to store result.\n * @param {vec2} v - Scale vector.\n * @returns {Mat3} out.\n * @static\n */\n static fromScaling (out: Mat3, v: Vec2): Mat3 {\n let outm = out.m;\n outm[0] = v.x;\n outm[1] = 0;\n outm[2] = 0;\n\n outm[3] = 0;\n outm[4] = v.y;\n outm[5] = 0;\n\n outm[6] = 0;\n outm[7] = 0;\n outm[8] = 1;\n return out;\n }\n\n /**\n * Calculates a 3x3 matrix from the given quaternion.\n *\n * @param {Mat3} out - Matrix to store result.\n * @param {quat} q - The quaternion.\n *\n * @returns {Mat3} out.\n * @static\n */\n static fromQuat (out: Mat3, q: Quat): Mat3 {\n let outm = out.m;\n let x = q.x, y = q.y, z = q.z, w = q.w;\n let x2 = x + x;\n let y2 = y + y;\n let z2 = z + z;\n\n let xx = x * x2;\n let yx = y * x2;\n let yy = y * y2;\n let zx = z * x2;\n let zy = z * y2;\n let zz = z * z2;\n let wx = w * x2;\n let wy = w * y2;\n let wz = w * z2;\n\n outm[0] = 1 - yy - zz;\n outm[3] = yx - wz;\n outm[6] = zx + wy;\n\n outm[1] = yx + wz;\n outm[4] = 1 - xx - zz;\n outm[7] = zy - wx;\n\n outm[2] = zx - wy;\n outm[5] = zy + wx;\n outm[8] = 1 - xx - yy;\n\n return out;\n }\n\n /**\n * Calculates a 3x3 matrix from view direction and up direction.\n *\n * @param {Mat3} out - Matrix to store result.\n * @param {vec3} view - View direction (must be normalized).\n * @param {vec3} [up] - Up direction, default is (0,1,0) (must be normalized).\n *\n * @returns {Mat3} out\n * @static\n */\n static fromViewUp (out: Mat3, view: Vec3, up?: Vec3): Mat3 {\n let _fromViewUpIIFE = (function () {\n let default_up = new Vec3(0, 1, 0);\n let x = new Vec3();\n let y = new Vec3();\n\n return function (out, view, up) {\n if (Vec3.lengthSqr(view) < EPSILON * EPSILON) {\n Mat3.identity(out);\n return out;\n }\n\n up = up || default_up;\n Vec3.normalize(x, Vec3.cross(x, up, view));\n\n if (Vec3.lengthSqr(x) < EPSILON * EPSILON) {\n Mat3.identity(out);\n return out;\n }\n\n Vec3.cross(y, view, x);\n Mat3.set(\n out,\n x.x, x.y, x.z,\n y.x, y.y, y.z,\n view.x, view.y, view.z\n );\n\n return out;\n };\n })();\n return _fromViewUpIIFE(out, view, up);\n }\n\n /**\n * Calculates a 3x3 normal matrix (transpose inverse) from the 4x4 matrix.\n *\n * @param {Mat3} out - Matrix to store result.\n * @param {mat4} a - A 4x4 matrix to derive the normal matrix from.\n *\n * @returns {Mat3} out.\n * @static\n */\n static normalFromMat4 (out: Mat3, a: Mat4): Mat3 {\n let am = a.m, outm = out.m;\n let a00 = am[0], a01 = am[1], a02 = am[2], a03 = am[3],\n a10 = am[4], a11 = am[5], a12 = am[6], a13 = am[7],\n a20 = am[8], a21 = am[9], a22 = am[10], a23 = am[11],\n a30 = am[12], a31 = am[13], a32 = am[14], a33 = am[15];\n\n let b00 = a00 * a11 - a01 * a10;\n let b01 = a00 * a12 - a02 * a10;\n let b02 = a00 * a13 - a03 * a10;\n let b03 = a01 * a12 - a02 * a11;\n let b04 = a01 * a13 - a03 * a11;\n let b05 = a02 * a13 - a03 * a12;\n let b06 = a20 * a31 - a21 * a30;\n let b07 = a20 * a32 - a22 * a30;\n let b08 = a20 * a33 - a23 * a30;\n let b09 = a21 * a32 - a22 * a31;\n let b10 = a21 * a33 - a23 * a31;\n let b11 = a22 * a33 - a23 * a32;\n\n // Calculate the determinant\n let det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n if (!det) {\n return out;\n }\n det = 1.0 / det;\n\n outm[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n outm[1] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n outm[2] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n\n outm[3] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n outm[4] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n outm[5] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n\n outm[6] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n outm[7] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n outm[8] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n\n return out;\n }\n\n /**\n * Returns Frobenius norm of a matrix.\n *\n * @param {Mat3} a - Matrix to calculate Frobenius norm of.\n * @returns {Number} - The frobenius norm.\n * @static\n */\n static frob (a: Mat3): number {\n let am = a.m;\n return (Math.sqrt(Math.pow(am[0], 2) + Math.pow(am[1], 2) + Math.pow(am[2], 2) + Math.pow(am[3], 2) + Math.pow(am[4], 2) + Math.pow(am[5], 2) + Math.pow(am[6], 2) + Math.pow(am[7], 2) + Math.pow(am[8], 2)));\n }\n\n /**\n * Adds two matrices.\n *\n * @param {Mat3} out - Matrix to store result.\n * @param {Mat3} a - The first operand.\n * @param {Mat3} b - The second operand.\n * @returns {Mat3} out.\n * @static\n */\n static add (out: Mat3, a: Mat3, b: Mat3): Mat3 {\n let am = a.m, bm = b.m, outm = out.m;\n outm[0] = am[0] + bm[0];\n outm[1] = am[1] + bm[1];\n outm[2] = am[2] + bm[2];\n outm[3] = am[3] + bm[3];\n outm[4] = am[4] + bm[4];\n outm[5] = am[5] + bm[5];\n outm[6] = am[6] + bm[6];\n outm[7] = am[7] + bm[7];\n outm[8] = am[8] + bm[8];\n return out;\n }\n\n /**\n * Subtracts matrix b from matrix a.\n *\n * @param {Mat3} out - Matrix to store result.\n * @param {Mat3} a - The first operand.\n * @param {Mat3} b - The second operand.\n * @returns {Mat3} out.\n * @static\n */\n static subtract (out: Mat3, a: Mat3, b: Mat3): Mat3 {\n let am = a.m, bm = b.m, outm = out.m;\n outm[0] = am[0] - bm[0];\n outm[1] = am[1] - bm[1];\n outm[2] = am[2] - bm[2];\n outm[3] = am[3] - bm[3];\n outm[4] = am[4] - bm[4];\n outm[5] = am[5] - bm[5];\n outm[6] = am[6] - bm[6];\n outm[7] = am[7] - bm[7];\n outm[8] = am[8] - bm[8];\n return out;\n }\n\n /**\n * Multiply each element of a matrix by a scalar number.\n *\n * @param {Mat3} out - Matrix to store result.\n * @param {Mat3} a - Matrix to scale\n * @param {Number} b - The scale number.\n * @returns {Mat3} out.\n * @static\n */\n static multiplyScalar (out: Mat3, a: Mat3, b: number): Mat3 {\n let am = a.m, outm = out.m;\n outm[0] = am[0] * b;\n outm[1] = am[1] * b;\n outm[2] = am[2] * b;\n outm[3] = am[3] * b;\n outm[4] = am[4] * b;\n outm[5] = am[5] * b;\n outm[6] = am[6] * b;\n outm[7] = am[7] * b;\n outm[8] = am[8] * b;\n return out;\n }\n\n /**\n * Adds two matrices after multiplying each element of the second operand by a scalar number.\n *\n * @param {Mat3} out - Matrix to store result.\n * @param {Mat3} a - The first operand.\n * @param {Mat3} b - The second operand.\n * @param {Number} scale - The scale number.\n * @returns {Mat3} out.\n * @static\n */\n static multiplyScalarAndAdd (out: Mat3, a: Mat3, b: Mat3, scale: number): Mat3 {\n let am = a.m, bm = b.m, outm = out.m;\n outm[0] = am[0] + (bm[0] * scale);\n outm[1] = am[1] + (bm[1] * scale);\n outm[2] = am[2] + (bm[2] * scale);\n outm[3] = am[3] + (bm[3] * scale);\n outm[4] = am[4] + (bm[4] * scale);\n outm[5] = am[5] + (bm[5] * scale);\n outm[6] = am[6] + (bm[6] * scale);\n outm[7] = am[7] + (bm[7] * scale);\n outm[8] = am[8] + (bm[8] * scale);\n return out;\n }\n\n /**\n * Returns whether the specified matrices are equal. (Compared using ===)\n *\n * @param {Mat3} a - The first matrix.\n * @param {Mat3} b - The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n * @static\n */\n static exactEquals (a: Mat3, b: Mat3): boolean {\n let am = a.m, bm = b.m;\n return am[0] === bm[0] && am[1] === bm[1] && am[2] === bm[2] &&\n am[3] === bm[3] && am[4] === bm[4] && am[5] === bm[5] &&\n am[6] === bm[6] && am[7] === bm[7] && am[8] === bm[8];\n }\n\n /**\n * Returns whether the specified matrices are approximately equal.\n *\n * @param {Mat3} a - The first matrix.\n * @param {Mat3} b - The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n * @static\n */\n static equals (a: Mat3, b: Mat3): boolean {\n let am = a.m, bm = b.m;\n let a0 = am[0], a1 = am[1], a2 = am[2], a3 = am[3], a4 = am[4], a5 = am[5], a6 = am[6], a7 = am[7], a8 = am[8];\n let b0 = bm[0], b1 = bm[1], b2 = bm[2], b3 = bm[3], b4 = bm[4], b5 = bm[5], b6 = bm[6], b7 = bm[7], b8 = bm[8];\n return (\n Math.abs(a0 - b0) <= EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) &&\n Math.abs(a1 - b1) <= EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) &&\n Math.abs(a2 - b2) <= EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) &&\n Math.abs(a3 - b3) <= EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) &&\n Math.abs(a4 - b4) <= EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) &&\n Math.abs(a5 - b5) <= EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) &&\n Math.abs(a6 - b6) <= EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) &&\n Math.abs(a7 - b7) <= EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7)) &&\n Math.abs(a8 - b8) <= EPSILON * Math.max(1.0, Math.abs(a8), Math.abs(b8))\n );\n }\n\n /**\n * !#zh 矩阵转数组\n * !#en Matrix transpose array\n * @method toArray\n * @typescript\n * toArray > (out: Out, mat: IMat3Like, ofs?: number): Out\n * @param ofs 数组内的起始偏移量\n * @static\n */\n static toArray > (out: Out, mat: IMat3Like, ofs = 0) {\n let m = mat.m;\n for (let i = 0; i < 9; i++) {\n out[ofs + i] = m[i];\n }\n return out;\n }\n\n /**\n * !#zh 数组转矩阵\n * !#en Transfer matrix array\n * @method fromArray\n * @typescript\n * fromArray (out: Out, arr: IWritableArrayLike, ofs?: number): Out\n * @param ofs 数组起始偏移量\n * @static\n */\n static fromArray (out: Out, arr: IWritableArrayLike, ofs = 0) {\n let m = out.m;\n for (let i = 0; i < 9; i++) {\n m[i] = arr[ofs + i];\n }\n return out;\n }\n\n /**\n * !#en Matrix Data\n * !#zh 矩阵数据\n * @property {Float64Array | Float32Array} m\n */\n m: FloatArray;\n\n\n /**\n * @method constructor\n * @typescript\n * constructor (m00?: number | Float32Array, m01?: number, m02?: number, m03?: number, m04?: number, m05?: number, m06?: number, m07?: number, m08?: number)\n */\n constructor (\n m00: number | FloatArray = 1, m01 = 0, m02 = 0,\n m03 = 0, m04 = 1, m05 = 0,\n m06 = 0, m07 = 0, m08 = 1\n ) {\n if (m00 instanceof FLOAT_ARRAY_TYPE) {\n this.m = m00;\n } else {\n this.m = new FLOAT_ARRAY_TYPE(9);\n let m = this.m;\n /**\n * The element at column 0 row 0.\n * @type {number}\n * */\n m[0] = m00 as number;\n\n /**\n * The element at column 0 row 1.\n * @type {number}\n * */\n m[1] = m01;\n\n /**\n * The element at column 0 row 2.\n * @type {number}\n * */\n m[2] = m02;\n\n /**\n * The element at column 1 row 0.\n * @type {number}\n * */\n m[3] = m03;\n\n /**\n * The element at column 1 row 1.\n * @type {number}\n * */\n m[4] = m04;\n\n /**\n * The element at column 1 row 2.\n * @type {number}\n * */\n m[5] = m05;\n\n /**\n * The element at column 2 row 0.\n * @type {number}\n * */\n m[6] = m06;\n\n /**\n * The element at column 2 row 1.\n * @type {number}\n * */\n m[7] = m07;\n\n /**\n * The element at column 2 row 2.\n * @type {number}\n * */\n m[8] = m08;\n }\n }\n\n\n /**\n * Returns a string representation of a matrix.\n *\n * @param {Mat3} a - The matrix.\n * @returns {String} String representation of this matrix.\n */\n toString () {\n let am = this.m;\n return `mat3(${am[0]}, ${am[1]}, ${am[2]}, ${am[3]}, ${am[4]}, ${am[5]}, ${am[6]}, ${am[7]}, ${am[8]})`;\n }\n}\n\ncc.Mat3 = Mat3;\n","/****************************************************************************\n Copyright (c) 2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport ValueType from './value-type';\nimport CCClass from '../platform/CCClass';\nimport Vec3 from './vec3';\nimport Quat from './quat';\nimport { EPSILON, FLOAT_ARRAY_TYPE } from './utils';\nimport Mat3 from './mat3';\n\nlet _a00: number = 0; let _a01: number = 0; let _a02: number = 0; let _a03: number = 0;\nlet _a10: number = 0; let _a11: number = 0; let _a12: number = 0; let _a13: number = 0;\nlet _a20: number = 0; let _a21: number = 0; let _a22: number = 0; let _a23: number = 0;\nlet _a30: number = 0; let _a31: number = 0; let _a32: number = 0; let _a33: number = 0;\n\n/**\n * !#en Representation of 4*4 matrix.\n * !#zh 表示 4*4 矩阵\n *\n * @class Mat4\n * @extends ValueType\n */\nexport default class Mat4 extends ValueType {\n static mul = Mat4.multiply;\n static sub = Mat4.subtract;\n\n /**\n * !#en Multiply the current matrix with another one\n * !#zh 将当前矩阵与指定矩阵相乘\n * @method mul\n * @param {Mat4} other the second operand\n * @param {Mat4} [out] the receiving matrix, you can pass the same matrix to save result to itself, if not provided, a new matrix will be created\n * @returns {Mat4} out\n */\n mul (m: Mat4, out: Mat4): Mat4 {\n return Mat4.multiply(out || new Mat4(), this, m);\n }\n /**\n * !#en Multiply each element of the matrix by a scalar.\n * !#zh 将矩阵的每一个元素都乘以指定的缩放值。\n * @method mulScalar\n * @param {Number} number amount to scale the matrix's elements by\n * @param {Mat4} [out] the receiving matrix, you can pass the same matrix to save result to itself, if not provided, a new matrix will be created\n * @returns {Mat4} out\n */\n mulScalar (num: number, out: Mat4) {\n Mat4.multiplyScalar(out || new Mat4(), this, num);\n }\n /**\n * !#en Subtracts the current matrix with another one\n * !#zh 将当前矩阵与指定的矩阵相减\n * @method sub\n * @param {Mat4} other the second operand\n * @param {Mat4} [out] the receiving matrix, you can pass the same matrix to save result to itself, if not provided, a new matrix will be created\n * @returns {Mat4} out\n */\n sub (m: Mat4, out: Mat4) {\n Mat4.subtract(out || new Mat4(), this, m);\n }\n\n /**\n * Identity of Mat4\n * @property {Mat4} IDENTITY\n * @static\n */\n static IDENTITY = Object.freeze(new Mat4());\n\n /**\n * !#zh 获得指定矩阵的拷贝\n * !#en Copy of the specified matrix to obtain\n * @method clone\n * @typescript\n * clone (a: Out): Mat4\n * @static\n */\n static clone (a: Out) {\n let m = a.m;\n return new Mat4(\n m[0], m[1], m[2], m[3],\n m[4], m[5], m[6], m[7],\n m[8], m[9], m[10], m[11],\n m[12], m[13], m[14], m[15],\n );\n }\n\n /**\n * !#zh 复制目标矩阵\n * !#en Copy the target matrix\n * @method copy\n * @typescript\n * copy (out: Out, a: Out): Out\n * @static\n */\n static copy (out: Out, a: Out) {\n let m = out.m, am = a.m;\n m[0] = am[0];\n m[1] = am[1];\n m[2] = am[2];\n m[3] = am[3];\n m[4] = am[4];\n m[5] = am[5];\n m[6] = am[6];\n m[7] = am[7];\n m[8] = am[8];\n m[9] = am[9];\n m[10] = am[10];\n m[11] = am[11];\n m[12] = am[12];\n m[13] = am[13];\n m[14] = am[14];\n m[15] = am[15];\n return out;\n }\n\n /**\n * !#zh 设置矩阵值\n * !#en Setting matrix values\n * @static\n */\n static set (\n out: Out,\n m00: number, m01: number, m02: number, m03: number,\n m10: number, m11: number, m12: number, m13: number,\n m20: number, m21: number, m22: number, m23: number,\n m30: number, m31: number, m32: number, m33: number,\n ) {\n let m = out.m;\n m[0] = m00; m[1] = m01; m[2] = m02; m[3] = m03;\n m[4] = m10; m[5] = m11; m[6] = m12; m[7] = m13;\n m[8] = m20; m[9] = m21; m[10] = m22; m[11] = m23;\n m[12] = m30; m[13] = m31; m[14] = m32; m[15] = m33;\n return out;\n }\n\n /**\n * !#zh 将目标赋值为单位矩阵\n * !#en The target of an assignment is the identity matrix\n * @method identity\n * @typescript\n * identity (out: Out): Out\n * @static\n */\n static identity (out: Out) {\n let m = out.m;\n m[0] = 1;\n m[1] = 0;\n m[2] = 0;\n m[3] = 0;\n m[4] = 0;\n m[5] = 1;\n m[6] = 0;\n m[7] = 0;\n m[8] = 0;\n m[9] = 0;\n m[10] = 1;\n m[11] = 0;\n m[12] = 0;\n m[13] = 0;\n m[14] = 0;\n m[15] = 1;\n return out;\n }\n\n /**\n * !#zh 转置矩阵\n * !#en Transposed matrix\n * @method transpose\n * @typescript\n * transpose (out: Out, a: Out): Out\n * @static\n */\n static transpose (out: Out, a: Out) {\n let m = out.m, am = a.m;\n // If we are transposing ourselves we can skip a few steps but have to cache some values\n if (out === a) {\n const a01 = am[1], a02 = am[2], a03 = am[3], a12 = am[6], a13 = am[7], a23 = am[11];\n m[1] = am[4];\n m[2] = am[8];\n m[3] = am[12];\n m[4] = a01;\n m[6] = am[9];\n m[7] = am[13];\n m[8] = a02;\n m[9] = a12;\n m[11] = am[14];\n m[12] = a03;\n m[13] = a13;\n m[14] = a23;\n } else {\n m[0] = am[0];\n m[1] = am[4];\n m[2] = am[8];\n m[3] = am[12];\n m[4] = am[1];\n m[5] = am[5];\n m[6] = am[9];\n m[7] = am[13];\n m[8] = am[2];\n m[9] = am[6];\n m[10] = am[10];\n m[11] = am[14];\n m[12] = am[3];\n m[13] = am[7];\n m[14] = am[11];\n m[15] = am[15];\n }\n return out;\n }\n\n /**\n * !#zh 矩阵求逆\n * !#en Matrix inversion\n * @method invert\n * @typescript\n * invert (out: Out, a: Out): Out\n * @static\n */\n static invert (out: Out, a: Out) {\n let am = a.m;\n _a00 = am[0]; _a01 = am[1]; _a02 = am[2]; _a03 = am[3];\n _a10 = am[4]; _a11 = am[5]; _a12 = am[6]; _a13 = am[7];\n _a20 = am[8]; _a21 = am[9]; _a22 = am[10]; _a23 = am[11];\n _a30 = am[12]; _a31 = am[13]; _a32 = am[14]; _a33 = am[15];\n\n const b00 = _a00 * _a11 - _a01 * _a10;\n const b01 = _a00 * _a12 - _a02 * _a10;\n const b02 = _a00 * _a13 - _a03 * _a10;\n const b03 = _a01 * _a12 - _a02 * _a11;\n const b04 = _a01 * _a13 - _a03 * _a11;\n const b05 = _a02 * _a13 - _a03 * _a12;\n const b06 = _a20 * _a31 - _a21 * _a30;\n const b07 = _a20 * _a32 - _a22 * _a30;\n const b08 = _a20 * _a33 - _a23 * _a30;\n const b09 = _a21 * _a32 - _a22 * _a31;\n const b10 = _a21 * _a33 - _a23 * _a31;\n const b11 = _a22 * _a33 - _a23 * _a32;\n\n // Calculate the determinant\n let det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n if (det === 0) { return null; }\n det = 1.0 / det;\n\n let m = out.m;\n m[0] = (_a11 * b11 - _a12 * b10 + _a13 * b09) * det;\n m[1] = (_a02 * b10 - _a01 * b11 - _a03 * b09) * det;\n m[2] = (_a31 * b05 - _a32 * b04 + _a33 * b03) * det;\n m[3] = (_a22 * b04 - _a21 * b05 - _a23 * b03) * det;\n m[4] = (_a12 * b08 - _a10 * b11 - _a13 * b07) * det;\n m[5] = (_a00 * b11 - _a02 * b08 + _a03 * b07) * det;\n m[6] = (_a32 * b02 - _a30 * b05 - _a33 * b01) * det;\n m[7] = (_a20 * b05 - _a22 * b02 + _a23 * b01) * det;\n m[8] = (_a10 * b10 - _a11 * b08 + _a13 * b06) * det;\n m[9] = (_a01 * b08 - _a00 * b10 - _a03 * b06) * det;\n m[10] = (_a30 * b04 - _a31 * b02 + _a33 * b00) * det;\n m[11] = (_a21 * b02 - _a20 * b04 - _a23 * b00) * det;\n m[12] = (_a11 * b07 - _a10 * b09 - _a12 * b06) * det;\n m[13] = (_a00 * b09 - _a01 * b07 + _a02 * b06) * det;\n m[14] = (_a31 * b01 - _a30 * b03 - _a32 * b00) * det;\n m[15] = (_a20 * b03 - _a21 * b01 + _a22 * b00) * det;\n\n return out;\n }\n\n /**\n * !#zh 矩阵行列式\n * !#en Matrix determinant\n * @method determinant\n * @typescript\n * determinant (a: Out): number\n * @static\n */\n static determinant (a: Out): number {\n let m = a.m;\n _a00 = m[0]; _a01 = m[1]; _a02 = m[2]; _a03 = m[3];\n _a10 = m[4]; _a11 = m[5]; _a12 = m[6]; _a13 = m[7];\n _a20 = m[8]; _a21 = m[9]; _a22 = m[10]; _a23 = m[11];\n _a30 = m[12]; _a31 = m[13]; _a32 = m[14]; _a33 = m[15];\n\n const b00 = _a00 * _a11 - _a01 * _a10;\n const b01 = _a00 * _a12 - _a02 * _a10;\n const b02 = _a00 * _a13 - _a03 * _a10;\n const b03 = _a01 * _a12 - _a02 * _a11;\n const b04 = _a01 * _a13 - _a03 * _a11;\n const b05 = _a02 * _a13 - _a03 * _a12;\n const b06 = _a20 * _a31 - _a21 * _a30;\n const b07 = _a20 * _a32 - _a22 * _a30;\n const b08 = _a20 * _a33 - _a23 * _a30;\n const b09 = _a21 * _a32 - _a22 * _a31;\n const b10 = _a21 * _a33 - _a23 * _a31;\n const b11 = _a22 * _a33 - _a23 * _a32;\n\n // Calculate the determinant\n return b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n }\n\n /**\n * !#zh 矩阵乘法\n * !#en Matrix Multiplication\n * @method multiply\n * @typescript\n * multiply (out: Out, a: Out, b: Out): Out\n * @static\n */\n static multiply (out: Out, a: Out, b: Out) {\n let m = out.m, am = a.m, bm = b.m;\n _a00 = am[0]; _a01 = am[1]; _a02 = am[2]; _a03 = am[3];\n _a10 = am[4]; _a11 = am[5]; _a12 = am[6]; _a13 = am[7];\n _a20 = am[8]; _a21 = am[9]; _a22 = am[10]; _a23 = am[11];\n _a30 = am[12]; _a31 = am[13]; _a32 = am[14]; _a33 = am[15];\n\n // Cache only the current line of the second matrix\n let b0 = bm[0], b1 = bm[1], b2 = bm[2], b3 = bm[3];\n m[0] = b0 * _a00 + b1 * _a10 + b2 * _a20 + b3 * _a30;\n m[1] = b0 * _a01 + b1 * _a11 + b2 * _a21 + b3 * _a31;\n m[2] = b0 * _a02 + b1 * _a12 + b2 * _a22 + b3 * _a32;\n m[3] = b0 * _a03 + b1 * _a13 + b2 * _a23 + b3 * _a33;\n\n b0 = bm[4]; b1 = bm[5]; b2 = bm[6]; b3 = bm[7];\n m[4] = b0 * _a00 + b1 * _a10 + b2 * _a20 + b3 * _a30;\n m[5] = b0 * _a01 + b1 * _a11 + b2 * _a21 + b3 * _a31;\n m[6] = b0 * _a02 + b1 * _a12 + b2 * _a22 + b3 * _a32;\n m[7] = b0 * _a03 + b1 * _a13 + b2 * _a23 + b3 * _a33;\n\n b0 = bm[8]; b1 = bm[9]; b2 = bm[10]; b3 = bm[11];\n m[8] = b0 * _a00 + b1 * _a10 + b2 * _a20 + b3 * _a30;\n m[9] = b0 * _a01 + b1 * _a11 + b2 * _a21 + b3 * _a31;\n m[10] = b0 * _a02 + b1 * _a12 + b2 * _a22 + b3 * _a32;\n m[11] = b0 * _a03 + b1 * _a13 + b2 * _a23 + b3 * _a33;\n\n b0 = bm[12]; b1 = bm[13]; b2 = bm[14]; b3 = bm[15];\n m[12] = b0 * _a00 + b1 * _a10 + b2 * _a20 + b3 * _a30;\n m[13] = b0 * _a01 + b1 * _a11 + b2 * _a21 + b3 * _a31;\n m[14] = b0 * _a02 + b1 * _a12 + b2 * _a22 + b3 * _a32;\n m[15] = b0 * _a03 + b1 * _a13 + b2 * _a23 + b3 * _a33;\n return out;\n }\n\n /**\n * !#zh 在给定矩阵变换基础上加入变换\n * !#en Was added in a given transformation matrix transformation on the basis of\n * @method transform\n * @typescript\n * transform (out: Out, a: Out, v: VecLike): Out\n * @static\n */\n static transform (out: Out, a: Out, v: VecLike) {\n const x = v.x, y = v.y, z = v.z;\n let m = out.m, am = a.m;\n if (a === out) {\n m[12] = am[0] * x + am[4] * y + am[8] * z + am[12];\n m[13] = am[1] * x + am[5] * y + am[9] * z + am[13];\n m[14] = am[2] * x + am[6] * y + am[10] * z + am[14];\n m[15] = am[3] * x + am[7] * y + am[11] * z + am[15];\n } else {\n _a00 = am[0]; _a01 = am[1]; _a02 = am[2]; _a03 = am[3];\n _a10 = am[4]; _a11 = am[5]; _a12 = am[6]; _a13 = am[7];\n _a20 = am[8]; _a21 = am[9]; _a22 = am[10]; _a23 = am[11];\n _a30 = am[12]; _a31 = am[13]; _a32 = am[14]; _a33 = am[15];\n\n m[0] = _a00; m[1] = _a01; m[2] = _a02; m[3] = _a03;\n m[4] = _a10; m[5] = _a11; m[6] = _a12; m[7] = _a13;\n m[8] = _a20; m[9] = _a21; m[10] = _a22; m[11] = _a23;\n\n m[12] = _a00 * x + _a10 * y + _a20 * z + am[12];\n m[13] = _a01 * x + _a11 * y + _a21 * z + am[13];\n m[14] = _a02 * x + _a12 * y + _a22 * z + am[14];\n m[15] = _a03 * x + _a13 * y + _a23 * z + am[15];\n }\n return out;\n }\n\n /**\n * !#zh 在给定矩阵变换基础上加入新位移变换\n * !#en Add new displacement transducer in a matrix transformation on the basis of a given\n * @method translate\n * @typescript\n * translate (out: Out, a: Out, v: VecLike): Out\n * @static\n */\n static translate (out: Out, a: Out, v: VecLike) {\n let m = out.m, am = a.m;\n if (a === out) {\n m[12] += v.x;\n m[13] += v.y;\n m[14] += v.z;\n } else {\n m[0] = am[0]; m[1] = am[1]; m[2] = am[2]; m[3] = am[3];\n m[4] = am[4]; m[5] = am[5]; m[6] = am[6]; m[7] = am[7];\n m[8] = am[8]; m[9] = am[9]; m[10] = am[10]; m[11] = am[11];\n m[12] += v.x;\n m[13] += v.y;\n m[14] += v.z;\n m[15] = am[15];\n }\n return out;\n }\n\n /**\n * !#zh 在给定矩阵变换基础上加入新缩放变换\n * !#en Add new scaling transformation in a given matrix transformation on the basis of\n * @method scale\n * @typescript\n * scale (out: Out, a: Out, v: VecLike): Out\n * @static\n */\n static scale (out: Out, a: Out, v: VecLike) {\n const x = v.x, y = v.y, z = v.z;\n let m = out.m, am = a.m;\n m[0] = am[0] * x;\n m[1] = am[1] * x;\n m[2] = am[2] * x;\n m[3] = am[3] * x;\n m[4] = am[4] * y;\n m[5] = am[5] * y;\n m[6] = am[6] * y;\n m[7] = am[7] * y;\n m[8] = am[8] * z;\n m[9] = am[9] * z;\n m[10] = am[10] * z;\n m[11] = am[11] * z;\n m[12] = am[12];\n m[13] = am[13];\n m[14] = am[14];\n m[15] = am[15];\n return out;\n }\n\n /**\n * !#zh 在给定矩阵变换基础上加入新旋转变换\n * !#en Add a new rotational transform matrix transformation on the basis of a given\n * @method rotate\n * @typescript\n * rotate (out: Out, a: Out, rad: number, axis: VecLike): Out\n * @param rad 旋转角度\n * @param axis 旋转轴\n * @static\n */\n static rotate (out: Out, a: Out, rad: number, axis: VecLike) {\n let x = axis.x, y = axis.y, z = axis.z;\n\n let len = Math.sqrt(x * x + y * y + z * z);\n\n if (Math.abs(len) < EPSILON) {\n return null;\n }\n\n len = 1 / len;\n x *= len;\n y *= len;\n z *= len;\n\n const s = Math.sin(rad);\n const c = Math.cos(rad);\n const t = 1 - c;\n\n let am = a.m;\n _a00 = am[0]; _a01 = am[1]; _a02 = am[2]; _a03 = am[3];\n _a10 = am[4]; _a11 = am[5]; _a12 = am[6]; _a13 = am[7];\n _a20 = am[8]; _a21 = am[9]; _a22 = am[10]; _a23 = am[11];\n\n // Construct the elements of the rotation matrix\n const b00 = x * x * t + c, b01 = y * x * t + z * s, b02 = z * x * t - y * s;\n const b10 = x * y * t - z * s, b11 = y * y * t + c, b12 = z * y * t + x * s;\n const b20 = x * z * t + y * s, b21 = y * z * t - x * s, b22 = z * z * t + c;\n\n let m = out.m;\n // Perform rotation-specific matrix multiplication\n m[0] = _a00 * b00 + _a10 * b01 + _a20 * b02;\n m[1] = _a01 * b00 + _a11 * b01 + _a21 * b02;\n m[2] = _a02 * b00 + _a12 * b01 + _a22 * b02;\n m[3] = _a03 * b00 + _a13 * b01 + _a23 * b02;\n m[4] = _a00 * b10 + _a10 * b11 + _a20 * b12;\n m[5] = _a01 * b10 + _a11 * b11 + _a21 * b12;\n m[6] = _a02 * b10 + _a12 * b11 + _a22 * b12;\n m[7] = _a03 * b10 + _a13 * b11 + _a23 * b12;\n m[8] = _a00 * b20 + _a10 * b21 + _a20 * b22;\n m[9] = _a01 * b20 + _a11 * b21 + _a21 * b22;\n m[10] = _a02 * b20 + _a12 * b21 + _a22 * b22;\n m[11] = _a03 * b20 + _a13 * b21 + _a23 * b22;\n\n // If the source and destination differ, copy the unchanged last row\n if (a !== out) {\n m[12] = am[12];\n m[13] = am[13];\n m[14] = am[14];\n m[15] = am[15];\n }\n\n return out;\n }\n\n /**\n * !#zh 在给定矩阵变换基础上加入绕 X 轴的旋转变换\n * !#en Add rotational transformation around the X axis at a given matrix transformation on the basis of\n * @method rotateX\n * @typescript\n * rotateX (out: Out, a: Out, rad: number): Out\n * @param rad 旋转角度\n * @static\n */\n static rotateX (out: Out, a: Out, rad: number) {\n let m = out.m, am = a.m;\n const s = Math.sin(rad),\n c = Math.cos(rad),\n a10 = am[4],\n a11 = am[5],\n a12 = am[6],\n a13 = am[7],\n a20 = am[8],\n a21 = am[9],\n a22 = am[10],\n a23 = am[11];\n\n if (a !== out) { // If the source and destination differ, copy the unchanged rows\n m[0] = am[0];\n m[1] = am[1];\n m[2] = am[2];\n m[3] = am[3];\n m[12] = am[12];\n m[13] = am[13];\n m[14] = am[14];\n m[15] = am[15];\n }\n\n // Perform axis-specific matrix multiplication\n m[4] = a10 * c + a20 * s;\n m[5] = a11 * c + a21 * s;\n m[6] = a12 * c + a22 * s;\n m[7] = a13 * c + a23 * s;\n m[8] = a20 * c - a10 * s;\n m[9] = a21 * c - a11 * s;\n m[10] = a22 * c - a12 * s;\n m[11] = a23 * c - a13 * s;\n\n return out;\n }\n\n /**\n * !#zh 在给定矩阵变换基础上加入绕 Y 轴的旋转变换\n * !#en Add about the Y axis rotation transformation in a given matrix transformation on the basis of\n * @method rotateY\n * @typescript\n * rotateY (out: Out, a: Out, rad: number): Out\n * @param rad 旋转角度\n * @static\n */\n static rotateY (out: Out, a: Out, rad: number) {\n let m = out.m, am = a.m;\n const s = Math.sin(rad),\n c = Math.cos(rad),\n a00 = am[0],\n a01 = am[1],\n a02 = am[2],\n a03 = am[3],\n a20 = am[8],\n a21 = am[9],\n a22 = am[10],\n a23 = am[11];\n\n if (a !== out) { // If the source and destination differ, copy the unchanged rows\n m[4] = am[4];\n m[5] = am[5];\n m[6] = am[6];\n m[7] = am[7];\n m[12] = am[12];\n m[13] = am[13];\n m[14] = am[14];\n m[15] = am[15];\n }\n\n // Perform axis-specific matrix multiplication\n m[0] = a00 * c - a20 * s;\n m[1] = a01 * c - a21 * s;\n m[2] = a02 * c - a22 * s;\n m[3] = a03 * c - a23 * s;\n m[8] = a00 * s + a20 * c;\n m[9] = a01 * s + a21 * c;\n m[10] = a02 * s + a22 * c;\n m[11] = a03 * s + a23 * c;\n\n return out;\n }\n\n /**\n * !#zh 在给定矩阵变换基础上加入绕 Z 轴的旋转变换\n * !#en Added about the Z axis at a given rotational transformation matrix transformation on the basis of\n * @method rotateZ\n * @typescript\n * rotateZ (out: Out, a: Out, rad: number): Out\n * @param rad 旋转角度\n * @static\n */\n static rotateZ (out: Out, a: Out, rad: number) {\n const am = a.m;\n let m = out.m;\n const s = Math.sin(rad),\n c = Math.cos(rad),\n a00 = a.m[0],\n a01 = a.m[1],\n a02 = a.m[2],\n a03 = a.m[3],\n a10 = a.m[4],\n a11 = a.m[5],\n a12 = a.m[6],\n a13 = a.m[7];\n\n // If the source and destination differ, copy the unchanged last row\n if (a !== out) {\n m[8] = am[8];\n m[9] = am[9];\n m[10] = am[10];\n m[11] = am[11];\n m[12] = am[12];\n m[13] = am[13];\n m[14] = am[14];\n m[15] = am[15];\n }\n\n // Perform axis-specific matrix multiplication\n m[0] = a00 * c + a10 * s;\n m[1] = a01 * c + a11 * s;\n m[2] = a02 * c + a12 * s;\n m[3] = a03 * c + a13 * s;\n m[4] = a10 * c - a00 * s;\n m[5] = a11 * c - a01 * s;\n m[6] = a12 * c - a02 * s;\n m[7] = a13 * c - a03 * s;\n\n return out;\n }\n\n /**\n * !#zh 计算位移矩阵\n * !#en Displacement matrix calculation\n * @method fromTranslation\n * @typescript\n * fromTranslation (out: Out, v: VecLike): Out\n * @static\n */\n static fromTranslation (out: Out, v: VecLike) {\n let m = out.m;\n m[0] = 1;\n m[1] = 0;\n m[2] = 0;\n m[3] = 0;\n m[4] = 0;\n m[5] = 1;\n m[6] = 0;\n m[7] = 0;\n m[8] = 0;\n m[9] = 0;\n m[10] = 1;\n m[11] = 0;\n m[12] = v.x;\n m[13] = v.y;\n m[14] = v.z;\n m[15] = 1;\n return out;\n }\n\n /**\n * !#zh 计算缩放矩阵\n * !#en Scaling matrix calculation\n * @method fromScaling\n * @typescript\n * fromScaling (out: Out, v: VecLike): Out\n * @static\n */\n static fromScaling (out: Out, v: VecLike) {\n let m = out.m;\n m[0] = v.x;\n m[1] = 0;\n m[2] = 0;\n m[3] = 0;\n m[4] = 0;\n m[5] = v.y;\n m[6] = 0;\n m[7] = 0;\n m[8] = 0;\n m[9] = 0;\n m[10] = v.z;\n m[11] = 0;\n m[12] = 0;\n m[13] = 0;\n m[14] = 0;\n m[15] = 1;\n return out;\n }\n\n /**\n * !#zh 计算旋转矩阵\n * !#en Calculates the rotation matrix\n * @method fromRotation\n * @typescript\n * fromRotation (out: Out, rad: number, axis: VecLike): Out\n * @static\n */\n static fromRotation (out: Out, rad: number, axis: VecLike) {\n let x = axis.x, y = axis.y, z = axis.z;\n let len = Math.sqrt(x * x + y * y + z * z);\n\n if (Math.abs(len) < EPSILON) {\n return null;\n }\n\n len = 1 / len;\n x *= len;\n y *= len;\n z *= len;\n\n const s = Math.sin(rad);\n const c = Math.cos(rad);\n const t = 1 - c;\n\n // Perform rotation-specific matrix multiplication\n let m = out.m;\n m[0] = x * x * t + c;\n m[1] = y * x * t + z * s;\n m[2] = z * x * t - y * s;\n m[3] = 0;\n m[4] = x * y * t - z * s;\n m[5] = y * y * t + c;\n m[6] = z * y * t + x * s;\n m[7] = 0;\n m[8] = x * z * t + y * s;\n m[9] = y * z * t - x * s;\n m[10] = z * z * t + c;\n m[11] = 0;\n m[12] = 0;\n m[13] = 0;\n m[14] = 0;\n m[15] = 1;\n return out;\n }\n\n /**\n * !#zh 计算绕 X 轴的旋转矩阵\n * !#en Calculating rotation matrix about the X axis\n * @method fromXRotation\n * @typescript\n * fromXRotation (out: Out, rad: number): Out\n * @static\n */\n static fromXRotation (out: Out, rad: number) {\n const s = Math.sin(rad), c = Math.cos(rad);\n\n // Perform axis-specific matrix multiplication\n let m = out.m;\n m[0] = 1;\n m[1] = 0;\n m[2] = 0;\n m[3] = 0;\n m[4] = 0;\n m[5] = c;\n m[6] = s;\n m[7] = 0;\n m[8] = 0;\n m[9] = -s;\n m[10] = c;\n m[11] = 0;\n m[12] = 0;\n m[13] = 0;\n m[14] = 0;\n m[15] = 1;\n return out;\n }\n\n /**\n * !#zh 计算绕 Y 轴的旋转矩阵\n * !#en Calculating rotation matrix about the Y axis\n * @method fromYRotation\n * @typescript\n * fromYRotation (out: Out, rad: number): Out\n * @static\n */\n static fromYRotation (out: Out, rad: number) {\n const s = Math.sin(rad), c = Math.cos(rad);\n\n // Perform axis-specific matrix multiplication\n let m = out.m;\n m[0] = c;\n m[1] = 0;\n m[2] = -s;\n m[3] = 0;\n m[4] = 0;\n m[5] = 1;\n m[6] = 0;\n m[7] = 0;\n m[8] = s;\n m[9] = 0;\n m[10] = c;\n m[11] = 0;\n m[12] = 0;\n m[13] = 0;\n m[14] = 0;\n m[15] = 1;\n return out;\n }\n\n /**\n * !#zh 计算绕 Z 轴的旋转矩阵\n * !#en Calculating rotation matrix about the Z axis\n * @method fromZRotation\n * @typescript\n * fromZRotation (out: Out, rad: number): Out\n * @static\n */\n static fromZRotation (out: Out, rad: number) {\n const s = Math.sin(rad), c = Math.cos(rad);\n\n // Perform axis-specific matrix multiplication\n let m = out.m;\n m[0] = c;\n m[1] = s;\n m[2] = 0;\n m[3] = 0;\n m[4] = -s;\n m[5] = c;\n m[6] = 0;\n m[7] = 0;\n m[8] = 0;\n m[9] = 0;\n m[10] = 1;\n m[11] = 0;\n m[12] = 0;\n m[13] = 0;\n m[14] = 0;\n m[15] = 1;\n return out;\n }\n\n /**\n * !#zh 根据旋转和位移信息计算矩阵\n * !#en The rotation and displacement information calculating matrix\n * @method fromRT\n * @typescript\n * fromRT (out: Out, q: Quat, v: VecLike): Out\n * @static\n */\n static fromRT (out: Out, q: Quat, v: VecLike) {\n const x = q.x, y = q.y, z = q.z, w = q.w;\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n\n const xx = x * x2;\n const xy = x * y2;\n const xz = x * z2;\n const yy = y * y2;\n const yz = y * z2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n\n let m = out.m;\n m[0] = 1 - (yy + zz);\n m[1] = xy + wz;\n m[2] = xz - wy;\n m[3] = 0;\n m[4] = xy - wz;\n m[5] = 1 - (xx + zz);\n m[6] = yz + wx;\n m[7] = 0;\n m[8] = xz + wy;\n m[9] = yz - wx;\n m[10] = 1 - (xx + yy);\n m[11] = 0;\n m[12] = v.x;\n m[13] = v.y;\n m[14] = v.z;\n m[15] = 1;\n\n return out;\n }\n\n /**\n * !#zh 提取矩阵的位移信息, 默认矩阵中的变换以 S->R->T 的顺序应用\n * !#en Extracting displacement information of the matrix, the matrix transform to the default sequential application S-> R-> T is\n * @method getTranslation\n * @typescript\n * getTranslation (out: VecLike, mat: Out): VecLike\n * @static\n */\n static getTranslation (out: VecLike, mat: Out) {\n let m = mat.m;\n out.x = m[12];\n out.y = m[13];\n out.z = m[14];\n\n return out;\n }\n\n /**\n * !#zh 提取矩阵的缩放信息, 默认矩阵中的变换以 S->R->T 的顺序应用\n * !#en Scaling information extraction matrix, the matrix transform to the default sequential application S-> R-> T is\n * @method getScaling\n * @typescript\n * getScaling (out: VecLike, mat: Out): VecLike\n * @static\n */\n static getScaling (out: VecLike, mat: Out) {\n let m = mat.m;\n let m3 = m3_1.m;\n const m00 = m3[0] = m[0];\n const m01 = m3[1] = m[1];\n const m02 = m3[2] = m[2];\n const m04 = m3[3] = m[4];\n const m05 = m3[4] = m[5];\n const m06 = m3[5] = m[6];\n const m08 = m3[6] = m[8];\n const m09 = m3[7] = m[9];\n const m10 = m3[8] = m[10];\n out.x = Math.sqrt(m00 * m00 + m01 * m01 + m02 * m02);\n out.y = Math.sqrt(m04 * m04 + m05 * m05 + m06 * m06);\n out.z = Math.sqrt(m08 * m08 + m09 * m09 + m10 * m10);\n // account for refections\n if (Mat3.determinant(m3_1) < 0) { out.x *= -1; }\n return out;\n }\n\n /**\n * !#zh 提取矩阵的旋转信息, 默认输入矩阵不含有缩放信息,如考虑缩放应使用 `toRTS` 函数。\n * !#en Rotation information extraction matrix, the matrix containing no default input scaling information, such as the use of `toRTS` should consider the scaling function.\n * @method getRotation\n * @typescript\n * getRotation (out: Quat, mat: Out): Quat\n * @static\n */\n static getRotation (out: Quat, mat: Out) {\n let m = mat.m;\n const trace = m[0] + m[5] + m[10];\n let S = 0;\n\n if (trace > 0) {\n S = Math.sqrt(trace + 1.0) * 2;\n out.w = 0.25 * S;\n out.x = (m[6] - m[9]) / S;\n out.y = (m[8] - m[2]) / S;\n out.z = (m[1] - m[4]) / S;\n } else if ((m[0] > m[5]) && (m[0] > m[10])) {\n S = Math.sqrt(1.0 + m[0] - m[5] - m[10]) * 2;\n out.w = (m[6] - m[9]) / S;\n out.x = 0.25 * S;\n out.y = (m[1] + m[4]) / S;\n out.z = (m[8] + m[2]) / S;\n } else if (m[5] > m[10]) {\n S = Math.sqrt(1.0 + m[5] - m[0] - m[10]) * 2;\n out.w = (m[8] - m[2]) / S;\n out.x = (m[1] + m[4]) / S;\n out.y = 0.25 * S;\n out.z = (m[6] + m[9]) / S;\n } else {\n S = Math.sqrt(1.0 + m[10] - m[0] - m[5]) * 2;\n out.w = (m[1] - m[4]) / S;\n out.x = (m[8] + m[2]) / S;\n out.y = (m[6] + m[9]) / S;\n out.z = 0.25 * S;\n }\n\n return out;\n }\n\n /**\n * !#zh 提取旋转、位移、缩放信息, 默认矩阵中的变换以 S->R->T 的顺序应用\n * !#en Extracting rotational displacement, zoom information, the default matrix transformation in order S-> R-> T applications\n * @method toRTS\n * @typescript\n * toRTS (mat: Out, q: Quat, v: VecLike, s: VecLike): void\n * @static\n */\n static toRTS (mat: Out, q: Quat, v: VecLike, s: VecLike) {\n let m = mat.m;\n let m3 = m3_1.m;\n s.x = Vec3.set(v3_1, m[0], m[1], m[2]).mag();\n m3[0] = m[0] / s.x;\n m3[1] = m[1] / s.x;\n m3[2] = m[2] / s.x;\n s.y = Vec3.set(v3_1, m[4], m[5], m[6]).mag();\n m3[3] = m[4] / s.y;\n m3[4] = m[5] / s.y;\n m3[5] = m[6] / s.y;\n s.z = Vec3.set(v3_1, m[8], m[9], m[10]).mag();\n m3[6] = m[8] / s.z;\n m3[7] = m[9] / s.z;\n m3[8] = m[10] / s.z;\n const det = Mat3.determinant(m3_1);\n if (det < 0) { s.x *= -1; m3[0] *= -1; m3[1] *= -1; m3[2] *= -1; }\n Quat.fromMat3(q, m3_1); // already normalized\n Vec3.set(v, m[12], m[13], m[14]);\n }\n\n /**\n * !#zh 根据旋转、位移、缩放信息计算矩阵,以 S->R->T 的顺序应用\n * !#en The rotary displacement, the scaling matrix calculation information, the order S-> R-> T applications\n * @method fromRTS\n * @typescript\n * fromRTS (out: Out, q: Quat, v: VecLike, s: VecLike): Out\n * @static\n */\n static fromRTS (out: Out, q: Quat, v: VecLike, s: VecLike) {\n const x = q.x, y = q.y, z = q.z, w = q.w;\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n\n const xx = x * x2;\n const xy = x * y2;\n const xz = x * z2;\n const yy = y * y2;\n const yz = y * z2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n const sx = s.x;\n const sy = s.y;\n const sz = s.z;\n\n let m = out.m;\n m[0] = (1 - (yy + zz)) * sx;\n m[1] = (xy + wz) * sx;\n m[2] = (xz - wy) * sx;\n m[3] = 0;\n m[4] = (xy - wz) * sy;\n m[5] = (1 - (xx + zz)) * sy;\n m[6] = (yz + wx) * sy;\n m[7] = 0;\n m[8] = (xz + wy) * sz;\n m[9] = (yz - wx) * sz;\n m[10] = (1 - (xx + yy)) * sz;\n m[11] = 0;\n m[12] = v.x;\n m[13] = v.y;\n m[14] = v.z;\n m[15] = 1;\n\n return out;\n }\n\n /**\n * !#zh 根据指定的旋转、位移、缩放及变换中心信息计算矩阵,以 S->R->T 的顺序应用\n * !#en According to the specified rotation, displacement, and scale conversion matrix calculation information center, order S-> R-> T applications\n * @method fromRTSOrigin\n * @typescript\n * fromRTSOrigin (out: Out, q: Quat, v: VecLike, s: VecLike, o: VecLike): Out\n * @param q 旋转值\n * @param v 位移值\n * @param s 缩放值\n * @param o 指定变换中心\n * @static\n */\n static fromRTSOrigin (out: Out, q: Quat, v: VecLike, s: VecLike, o: VecLike) {\n const x = q.x, y = q.y, z = q.z, w = q.w;\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n\n const xx = x * x2;\n const xy = x * y2;\n const xz = x * z2;\n const yy = y * y2;\n const yz = y * z2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n\n const sx = s.x;\n const sy = s.y;\n const sz = s.z;\n\n const ox = o.x;\n const oy = o.y;\n const oz = o.z;\n\n let m = out.m;\n m[0] = (1 - (yy + zz)) * sx;\n m[1] = (xy + wz) * sx;\n m[2] = (xz - wy) * sx;\n m[3] = 0;\n m[4] = (xy - wz) * sy;\n m[5] = (1 - (xx + zz)) * sy;\n m[6] = (yz + wx) * sy;\n m[7] = 0;\n m[8] = (xz + wy) * sz;\n m[9] = (yz - wx) * sz;\n m[10] = (1 - (xx + yy)) * sz;\n m[11] = 0;\n m[12] = v.x + ox - (m[0] * ox + m[4] * oy + m[8] * oz);\n m[13] = v.y + oy - (m[1] * ox + m[5] * oy + m[9] * oz);\n m[14] = v.z + oz - (m[2] * ox + m[6] * oy + m[10] * oz);\n m[15] = 1;\n\n return out;\n }\n\n /**\n * !#zh 根据指定的旋转信息计算矩阵\n * !#en The rotation matrix calculation information specified\n * @method fromQuat\n * @typescript\n * fromQuat (out: Out, q: Quat): Out\n * @static\n */\n static fromQuat (out: Out, q: Quat) {\n const x = q.x, y = q.y, z = q.z, w = q.w;\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n\n const xx = x * x2;\n const yx = y * x2;\n const yy = y * y2;\n const zx = z * x2;\n const zy = z * y2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n\n let m = out.m;\n m[0] = 1 - yy - zz;\n m[1] = yx + wz;\n m[2] = zx - wy;\n m[3] = 0;\n\n m[4] = yx - wz;\n m[5] = 1 - xx - zz;\n m[6] = zy + wx;\n m[7] = 0;\n\n m[8] = zx + wy;\n m[9] = zy - wx;\n m[10] = 1 - xx - yy;\n m[11] = 0;\n\n m[12] = 0;\n m[13] = 0;\n m[14] = 0;\n m[15] = 1;\n\n return out;\n }\n\n /**\n * !#zh 根据指定的视锥体信息计算矩阵\n * !#en The matrix calculation information specified frustum\n * @method frustum\n * @typescript\n * frustum (out: Out, left: number, right: number, bottom: number, top: number, near: number, far: number): Out\n * @param left 左平面距离\n * @param right 右平面距离\n * @param bottom 下平面距离\n * @param top 上平面距离\n * @param near 近平面距离\n * @param far 远平面距离\n * @static\n */\n static frustum (out: Out, left: number, right: number, bottom: number, top: number, near: number, far: number) {\n const rl = 1 / (right - left);\n const tb = 1 / (top - bottom);\n const nf = 1 / (near - far);\n\n let m = out.m;\n m[0] = (near * 2) * rl;\n m[1] = 0;\n m[2] = 0;\n m[3] = 0;\n m[4] = 0;\n m[5] = (near * 2) * tb;\n m[6] = 0;\n m[7] = 0;\n m[8] = (right + left) * rl;\n m[9] = (top + bottom) * tb;\n m[10] = (far + near) * nf;\n m[11] = -1;\n m[12] = 0;\n m[13] = 0;\n m[14] = (far * near * 2) * nf;\n m[15] = 0;\n return out;\n }\n\n /**\n * !#zh 计算透视投影矩阵\n * !#en Perspective projection matrix calculation\n * @method perspective\n * @typescript\n * perspective (out: Out, fovy: number, aspect: number, near: number, far: number): Out\n * @param fovy 纵向视角高度\n * @param aspect 长宽比\n * @param near 近平面距离\n * @param far 远平面距离\n * @static\n */\n static perspective (out: Out, fovy: number, aspect: number, near: number, far: number) {\n const f = 1.0 / Math.tan(fovy / 2);\n const nf = 1 / (near - far);\n\n let m = out.m;\n m[0] = f / aspect;\n m[1] = 0;\n m[2] = 0;\n m[3] = 0;\n m[4] = 0;\n m[5] = f;\n m[6] = 0;\n m[7] = 0;\n m[8] = 0;\n m[9] = 0;\n m[10] = (far + near) * nf;\n m[11] = -1;\n m[12] = 0;\n m[13] = 0;\n m[14] = (2 * far * near) * nf;\n m[15] = 0;\n return out;\n }\n\n /**\n * !#zh 计算正交投影矩阵\n * !#en Computing orthogonal projection matrix\n * @method ortho\n * @typescript\n * ortho (out: Out, left: number, right: number, bottom: number, top: number, near: number, far: number): Out\n * @param left 左平面距离\n * @param right 右平面距离\n * @param bottom 下平面距离\n * @param top 上平面距离\n * @param near 近平面距离\n * @param far 远平面距离\n * @static\n */\n static ortho (out: Out, left: number, right: number, bottom: number, top: number, near: number, far: number) {\n const lr = 1 / (left - right);\n const bt = 1 / (bottom - top);\n const nf = 1 / (near - far);\n let m = out.m;\n m[0] = -2 * lr;\n m[1] = 0;\n m[2] = 0;\n m[3] = 0;\n m[4] = 0;\n m[5] = -2 * bt;\n m[6] = 0;\n m[7] = 0;\n m[8] = 0;\n m[9] = 0;\n m[10] = 2 * nf;\n m[11] = 0;\n m[12] = (left + right) * lr;\n m[13] = (top + bottom) * bt;\n m[14] = (far + near) * nf;\n m[15] = 1;\n return out;\n }\n\n /**\n * !#zh 根据视点计算矩阵,注意 `eye - center` 不能为零向量或与 `up` 向量平行\n * !#en `Up` parallel vector or vector center` not be zero - the matrix calculation according to the viewpoint, note` eye\n * @method lookAt\n * @typescript\n * lookAt (out: Out, eye: VecLike, center: VecLike, up: VecLike): Out\n * @param eye 当前位置\n * @param center 目标视点\n * @param up 视口上方向\n * @static\n */\n static lookAt (out: Out, eye: VecLike, center: VecLike, up: VecLike) {\n const eyex = eye.x;\n const eyey = eye.y;\n const eyez = eye.z;\n const upx = up.x;\n const upy = up.y;\n const upz = up.z;\n const centerx = center.x;\n const centery = center.y;\n const centerz = center.z;\n\n let z0 = eyex - centerx;\n let z1 = eyey - centery;\n let z2 = eyez - centerz;\n\n let len = 1 / Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2);\n z0 *= len;\n z1 *= len;\n z2 *= len;\n\n let x0 = upy * z2 - upz * z1;\n let x1 = upz * z0 - upx * z2;\n let x2 = upx * z1 - upy * z0;\n len = 1 / Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2);\n x0 *= len;\n x1 *= len;\n x2 *= len;\n\n const y0 = z1 * x2 - z2 * x1;\n const y1 = z2 * x0 - z0 * x2;\n const y2 = z0 * x1 - z1 * x0;\n\n let m = out.m;\n m[0] = x0;\n m[1] = y0;\n m[2] = z0;\n m[3] = 0;\n m[4] = x1;\n m[5] = y1;\n m[6] = z1;\n m[7] = 0;\n m[8] = x2;\n m[9] = y2;\n m[10] = z2;\n m[11] = 0;\n m[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);\n m[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);\n m[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);\n m[15] = 1;\n\n return out;\n }\n\n /**\n * !#zh 计算逆转置矩阵\n * !#en Reversal matrix calculation\n * @method inverseTranspose\n * @typescript\n * inverseTranspose (out: Out, a: Out): Out\n * @static\n */\n static inverseTranspose (out: Out, a: Out) {\n\n let m = a.m;\n _a00 = m[0]; _a01 = m[1]; _a02 = m[2]; _a03 = m[3];\n _a10 = m[4]; _a11 = m[5]; _a12 = m[6]; _a13 = m[7];\n _a20 = m[8]; _a21 = m[9]; _a22 = m[10]; _a23 = m[11];\n _a30 = m[12]; _a31 = m[13]; _a32 = m[14]; _a33 = m[15];\n\n const b00 = _a00 * _a11 - _a01 * _a10;\n const b01 = _a00 * _a12 - _a02 * _a10;\n const b02 = _a00 * _a13 - _a03 * _a10;\n const b03 = _a01 * _a12 - _a02 * _a11;\n const b04 = _a01 * _a13 - _a03 * _a11;\n const b05 = _a02 * _a13 - _a03 * _a12;\n const b06 = _a20 * _a31 - _a21 * _a30;\n const b07 = _a20 * _a32 - _a22 * _a30;\n const b08 = _a20 * _a33 - _a23 * _a30;\n const b09 = _a21 * _a32 - _a22 * _a31;\n const b10 = _a21 * _a33 - _a23 * _a31;\n const b11 = _a22 * _a33 - _a23 * _a32;\n\n // Calculate the determinant\n let det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n if (!det) {\n return null;\n }\n det = 1.0 / det;\n\n m = out.m;\n m[0] = (_a11 * b11 - _a12 * b10 + _a13 * b09) * det;\n m[1] = (_a12 * b08 - _a10 * b11 - _a13 * b07) * det;\n m[2] = (_a10 * b10 - _a11 * b08 + _a13 * b06) * det;\n m[3] = 0;\n\n m[4] = (_a02 * b10 - _a01 * b11 - _a03 * b09) * det;\n m[5] = (_a00 * b11 - _a02 * b08 + _a03 * b07) * det;\n m[6] = (_a01 * b08 - _a00 * b10 - _a03 * b06) * det;\n m[7] = 0;\n\n m[8] = (_a31 * b05 - _a32 * b04 + _a33 * b03) * det;\n m[9] = (_a32 * b02 - _a30 * b05 - _a33 * b01) * det;\n m[10] = (_a30 * b04 - _a31 * b02 + _a33 * b00) * det;\n m[11] = 0;\n\n m[12] = 0;\n m[13] = 0;\n m[14] = 0;\n m[15] = 1;\n\n return out;\n }\n\n /**\n * !#zh 逐元素矩阵加法\n * !#en Element by element matrix addition\n * @method add\n * @typescript\n * add (out: Out, a: Out, b: Out): Out\n * @static\n */\n static add (out: Out, a: Out, b: Out) {\n let m = out.m, am = a.m, bm = b.m;\n m[0] = am[0] + bm[0];\n m[1] = am[1] + bm[1];\n m[2] = am[2] + bm[2];\n m[3] = am[3] + bm[3];\n m[4] = am[4] + bm[4];\n m[5] = am[5] + bm[5];\n m[6] = am[6] + bm[6];\n m[7] = am[7] + bm[7];\n m[8] = am[8] + bm[8];\n m[9] = am[9] + bm[9];\n m[10] = am[10] + bm[10];\n m[11] = am[11] + bm[11];\n m[12] = am[12] + bm[12];\n m[13] = am[13] + bm[13];\n m[14] = am[14] + bm[14];\n m[15] = am[15] + bm[15];\n return out;\n }\n\n /**\n * !#zh 逐元素矩阵减法\n * !#en Matrix element by element subtraction\n * @method subtract\n * @typescript\n * subtract (out: Out, a: Out, b: Out): Out\n * @static\n */\n static subtract (out: Out, a: Out, b: Out) {\n let m = out.m, am = a.m, bm = b.m;\n m[0] = am[0] - bm[0];\n m[1] = am[1] - bm[1];\n m[2] = am[2] - bm[2];\n m[3] = am[3] - bm[3];\n m[4] = am[4] - bm[4];\n m[5] = am[5] - bm[5];\n m[6] = am[6] - bm[6];\n m[7] = am[7] - bm[7];\n m[8] = am[8] - bm[8];\n m[9] = am[9] - bm[9];\n m[10] = am[10] - bm[10];\n m[11] = am[11] - bm[11];\n m[12] = am[12] - bm[12];\n m[13] = am[13] - bm[13];\n m[14] = am[14] - bm[14];\n m[15] = am[15] - bm[15];\n return out;\n }\n\n /**\n * !#zh 矩阵标量乘法\n * !#en Matrix scalar multiplication\n * @method multiplyScalar\n * @typescript\n * multiplyScalar (out: Out, a: Out, b: number): Out\n * @static\n */\n static multiplyScalar (out: Out, a: Out, b: number) {\n let m = out.m, am = a.m;\n m[0] = am[0] * b;\n m[1] = am[1] * b;\n m[2] = am[2] * b;\n m[3] = am[3] * b;\n m[4] = am[4] * b;\n m[5] = am[5] * b;\n m[6] = am[6] * b;\n m[7] = am[7] * b;\n m[8] = am[8] * b;\n m[9] = am[9] * b;\n m[10] = am[10] * b;\n m[11] = am[11] * b;\n m[12] = am[12] * b;\n m[13] = am[13] * b;\n m[14] = am[14] * b;\n m[15] = am[15] * b;\n return out;\n }\n\n /**\n * !#zh 逐元素矩阵标量乘加: A + B * scale\n * !#en Elements of the matrix by the scalar multiplication and addition: A + B * scale\n * @method multiplyScalarAndAdd\n * @typescript\n * multiplyScalarAndAdd (out: Out, a: Out, b: Out, scale: number): Out\n * @static\n */\n static multiplyScalarAndAdd (out: Out, a: Out, b: Out, scale: number) {\n let m = out.m, am = a.m, bm = b.m;\n m[0] = am[0] + (bm[0] * scale);\n m[1] = am[1] + (bm[1] * scale);\n m[2] = am[2] + (bm[2] * scale);\n m[3] = am[3] + (bm[3] * scale);\n m[4] = am[4] + (bm[4] * scale);\n m[5] = am[5] + (bm[5] * scale);\n m[6] = am[6] + (bm[6] * scale);\n m[7] = am[7] + (bm[7] * scale);\n m[8] = am[8] + (bm[8] * scale);\n m[9] = am[9] + (bm[9] * scale);\n m[10] = am[10] + (bm[10] * scale);\n m[11] = am[11] + (bm[11] * scale);\n m[12] = am[12] + (bm[12] * scale);\n m[13] = am[13] + (bm[13] * scale);\n m[14] = am[14] + (bm[14] * scale);\n m[15] = am[15] + (bm[15] * scale);\n return out;\n }\n\n /**\n * !#zh 矩阵等价判断\n * !#en Analyzing the equivalent matrix\n * @method strictEquals\n * @return {bool}\n * @typescript\n * strictEquals (a: Out, b: Out): boolean\n * @static\n */\n static strictEquals (a: Out, b: Out) {\n let am = a.m, bm = b.m;\n return am[0] === bm[0] && am[1] === bm[1] && am[2] === bm[2] && am[3] === bm[3] &&\n am[4] === bm[4] && am[5] === bm[5] && am[6] === bm[6] && am[7] === bm[7] &&\n am[8] === bm[8] && am[9] === bm[9] && am[10] === bm[10] && am[11] === bm[11] &&\n am[12] === bm[12] && am[13] === bm[13] && am[14] === bm[14] && am[15] === bm[15];\n }\n\n /**\n * !#zh 排除浮点数误差的矩阵近似等价判断\n * !#en Negative floating point error is approximately equivalent to determining a matrix\n * @method equals\n * @typescript\n * equals (a: Out, b: Out, epsilon?: number): boolean\n * @static\n */\n static equals (a: Out, b: Out, epsilon = EPSILON) {\n\n let am = a.m, bm = b.m;\n return (\n Math.abs(am[0] - bm[0]) <= epsilon * Math.max(1.0, Math.abs(am[0]), Math.abs(bm[0])) &&\n Math.abs(am[1] - bm[1]) <= epsilon * Math.max(1.0, Math.abs(am[1]), Math.abs(bm[1])) &&\n Math.abs(am[2] - bm[2]) <= epsilon * Math.max(1.0, Math.abs(am[2]), Math.abs(bm[2])) &&\n Math.abs(am[3] - bm[3]) <= epsilon * Math.max(1.0, Math.abs(am[3]), Math.abs(bm[3])) &&\n Math.abs(am[4] - bm[4]) <= epsilon * Math.max(1.0, Math.abs(am[4]), Math.abs(bm[4])) &&\n Math.abs(am[5] - bm[5]) <= epsilon * Math.max(1.0, Math.abs(am[5]), Math.abs(bm[5])) &&\n Math.abs(am[6] - bm[6]) <= epsilon * Math.max(1.0, Math.abs(am[6]), Math.abs(bm[6])) &&\n Math.abs(am[7] - bm[7]) <= epsilon * Math.max(1.0, Math.abs(am[7]), Math.abs(bm[7])) &&\n Math.abs(am[8] - bm[8]) <= epsilon * Math.max(1.0, Math.abs(am[8]), Math.abs(bm[8])) &&\n Math.abs(am[9] - bm[9]) <= epsilon * Math.max(1.0, Math.abs(am[9]), Math.abs(bm[9])) &&\n Math.abs(am[10] - bm[10]) <= epsilon * Math.max(1.0, Math.abs(am[10]), Math.abs(bm[10])) &&\n Math.abs(am[11] - bm[11]) <= epsilon * Math.max(1.0, Math.abs(am[11]), Math.abs(bm[11])) &&\n Math.abs(am[12] - bm[12]) <= epsilon * Math.max(1.0, Math.abs(am[12]), Math.abs(bm[12])) &&\n Math.abs(am[13] - bm[13]) <= epsilon * Math.max(1.0, Math.abs(am[13]), Math.abs(bm[13])) &&\n Math.abs(am[14] - bm[14]) <= epsilon * Math.max(1.0, Math.abs(am[14]), Math.abs(bm[14])) &&\n Math.abs(am[15] - bm[15]) <= epsilon * Math.max(1.0, Math.abs(am[15]), Math.abs(bm[15]))\n );\n }\n\n /**\n * Calculates the adjugate of a matrix.\n *\n * @param {Mat4} out - Matrix to store result.\n * @param {Mat4} a - Matrix to calculate.\n * @returns {Mat4} out.\n */\n static adjoint (out, a) {\n let am = a.m, outm = out.m;\n let a00 = am[0], a01 = am[1], a02 = am[2], a03 = am[3],\n a10 = am[4], a11 = am[5], a12 = am[6], a13 = am[7],\n a20 = am[8], a21 = am[9], a22 = am[10], a23 = am[11],\n a30 = am[12], a31 = am[13], a32 = am[14], a33 = am[15];\n\n outm[0] = (a11 * (a22 * a33 - a23 * a32) - a21 * (a12 * a33 - a13 * a32) + a31 * (a12 * a23 - a13 * a22));\n outm[1] = -(a01 * (a22 * a33 - a23 * a32) - a21 * (a02 * a33 - a03 * a32) + a31 * (a02 * a23 - a03 * a22));\n outm[2] = (a01 * (a12 * a33 - a13 * a32) - a11 * (a02 * a33 - a03 * a32) + a31 * (a02 * a13 - a03 * a12));\n outm[3] = -(a01 * (a12 * a23 - a13 * a22) - a11 * (a02 * a23 - a03 * a22) + a21 * (a02 * a13 - a03 * a12));\n outm[4] = -(a10 * (a22 * a33 - a23 * a32) - a20 * (a12 * a33 - a13 * a32) + a30 * (a12 * a23 - a13 * a22));\n outm[5] = (a00 * (a22 * a33 - a23 * a32) - a20 * (a02 * a33 - a03 * a32) + a30 * (a02 * a23 - a03 * a22));\n outm[6] = -(a00 * (a12 * a33 - a13 * a32) - a10 * (a02 * a33 - a03 * a32) + a30 * (a02 * a13 - a03 * a12));\n outm[7] = (a00 * (a12 * a23 - a13 * a22) - a10 * (a02 * a23 - a03 * a22) + a20 * (a02 * a13 - a03 * a12));\n outm[8] = (a10 * (a21 * a33 - a23 * a31) - a20 * (a11 * a33 - a13 * a31) + a30 * (a11 * a23 - a13 * a21));\n outm[9] = -(a00 * (a21 * a33 - a23 * a31) - a20 * (a01 * a33 - a03 * a31) + a30 * (a01 * a23 - a03 * a21));\n outm[10] = (a00 * (a11 * a33 - a13 * a31) - a10 * (a01 * a33 - a03 * a31) + a30 * (a01 * a13 - a03 * a11));\n outm[11] = -(a00 * (a11 * a23 - a13 * a21) - a10 * (a01 * a23 - a03 * a21) + a20 * (a01 * a13 - a03 * a11));\n outm[12] = -(a10 * (a21 * a32 - a22 * a31) - a20 * (a11 * a32 - a12 * a31) + a30 * (a11 * a22 - a12 * a21));\n outm[13] = (a00 * (a21 * a32 - a22 * a31) - a20 * (a01 * a32 - a02 * a31) + a30 * (a01 * a22 - a02 * a21));\n outm[14] = -(a00 * (a11 * a32 - a12 * a31) - a10 * (a01 * a32 - a02 * a31) + a30 * (a01 * a12 - a02 * a11));\n outm[15] = (a00 * (a11 * a22 - a12 * a21) - a10 * (a01 * a22 - a02 * a21) + a20 * (a01 * a12 - a02 * a11));\n return out;\n }\n\n /**\n * !#zh 矩阵转数组\n * !#en Matrix transpose array\n * @method toArray\n * @typescript\n * toArray > (out: Out, mat: IMat4Like, ofs?: number): Out\n * @param ofs 数组内的起始偏移量\n * @static\n */\n static toArray> (out: Out, mat: IMat4Like, ofs = 0) {\n let m = mat.m;\n for (let i = 0; i < 16; i++) {\n out[ofs + i] = m[i];\n }\n return out;\n }\n\n /**\n * !#zh 数组转矩阵\n * !#en Transfer matrix array\n * @method fromArray\n * @typescript\n * fromArray (out: Out, arr: IWritableArrayLike, ofs?: number): Out\n * @param ofs 数组起始偏移量\n * @static\n */\n static fromArray (out: Out, arr: IWritableArrayLike, ofs = 0) {\n let m = out.m;\n for (let i = 0; i < 16; i++) {\n m[i] = arr[ofs + i];\n }\n return out;\n }\n\n /**\n * !#en Matrix Data\n * !#zh 矩阵数据\n * @property {Float64Array | Float32Array} m\n */\n m: FloatArray;\n\n\n /**\n * !#en\n * Constructor\n * see {{#crossLink \"cc/mat4:method\"}}cc.mat4{{/crossLink}}\n * !#zh\n * 构造函数,可查看 {{#crossLink \"cc/mat4:method\"}}cc.mat4{{/crossLink}}\n * @method constructor\n * @typescript\n * constructor ( m00?: number, m01?: number, m02?: number, m03?: number, m10?: number, m11?: number, m12?: number, m13?: number, m20?: number, m21?: number, m22?: number, m23?: number, m30?: number, m31?: number, m32?: number, m33?: number)\n */\n constructor (\n m00: number | FloatArray = 1, m01: number = 0, m02: number = 0, m03: number = 0,\n m10: number = 0, m11: number = 1, m12: number = 0, m13: number = 0,\n m20: number = 0, m21: number = 0, m22: number = 1, m23: number = 0,\n m30: number = 0, m31: number = 0, m32: number = 0, m33: number = 1) {\n super();\n if (m00 instanceof FLOAT_ARRAY_TYPE) {\n this.m = m00;\n } else {\n this.m = new FLOAT_ARRAY_TYPE(16);\n let tm = this.m;\n tm[0] = m00 as number;\n tm[1] = m01;\n tm[2] = m02;\n tm[3] = m03;\n tm[4] = m10;\n tm[5] = m11;\n tm[6] = m12;\n tm[7] = m13;\n tm[8] = m20;\n tm[9] = m21;\n tm[10] = m22;\n tm[11] = m23;\n tm[12] = m30;\n tm[13] = m31;\n tm[14] = m32;\n tm[15] = m33;\n }\n }\n\n /**\n * !#en clone a Mat4 object\n * !#zh 克隆一个 Mat4 对象\n * @method clone\n * @return {Mat4}\n */\n clone () {\n let t = this;\n let tm = t.m;\n return new Mat4(\n tm[0], tm[1], tm[2], tm[3],\n tm[4], tm[5], tm[6], tm[7],\n tm[8], tm[9], tm[10], tm[11],\n tm[12], tm[13], tm[14], tm[15]);\n }\n\n /**\n * !#en Sets the matrix with another one's value\n * !#zh 用另一个矩阵设置这个矩阵的值。\n * @method set\n * @param {Mat4} srcObj\n * @return {Mat4} returns this\n * @chainable\n */\n set (s) {\n let t = this;\n let tm = t.m, sm = s.m;\n tm[0] = sm[0];\n tm[1] = sm[1];\n tm[2] = sm[2];\n tm[3] = sm[3];\n tm[4] = sm[4];\n tm[5] = sm[5];\n tm[6] = sm[6];\n tm[7] = sm[7];\n tm[8] = sm[8];\n tm[9] = sm[9];\n tm[10] = sm[10];\n tm[11] = sm[11];\n tm[12] = sm[12];\n tm[13] = sm[13];\n tm[14] = sm[14];\n tm[15] = sm[15];\n return this;\n }\n\n /**\n * !#en Check whether two matrix equal\n * !#zh 当前的矩阵是否与指定的矩阵相等。\n * @method equals\n * @param {Mat4} other\n * @return {Boolean}\n */\n equals (other) {\n return Mat4.strictEquals(this, other);\n }\n\n /**\n * !#en Check whether two matrix equal with default degree of variance.\n * !#zh\n * 近似判断两个矩阵是否相等。
\n * 判断 2 个矩阵是否在默认误差范围之内,如果在则返回 true,反之则返回 false。\n * @method fuzzyEquals\n * @param {Mat4} other\n * @return {Boolean}\n */\n fuzzyEquals (other) {\n return Mat4.equals(this, other);\n }\n\n /**\n * !#en Transform to string with matrix informations\n * !#zh 转换为方便阅读的字符串。\n * @method toString\n * @return {string}\n */\n toString () {\n let tm = this.m;\n if (tm) {\n return \"[\\n\" +\n tm[0] + \", \" + tm[1] + \", \" + tm[2] + \", \" + tm[3] + \",\\n\" +\n tm[4] + \", \" + tm[5] + \", \" + tm[6] + \", \" + tm[7] + \",\\n\" +\n tm[8] + \", \" + tm[9] + \", \" + tm[10] + \", \" + tm[11] + \",\\n\" +\n tm[12] + \", \" + tm[13] + \", \" + tm[14] + \", \" + tm[15] + \"\\n\" +\n \"]\";\n } else {\n return \"[\\n\" +\n \"1, 0, 0, 0\\n\" +\n \"0, 1, 0, 0\\n\" +\n \"0, 0, 1, 0\\n\" +\n \"0, 0, 0, 1\\n\" +\n \"]\";\n }\n }\n\n /**\n * Set the matrix to the identity matrix\n * @method identity\n * @returns {Mat4} self\n * @chainable\n */\n identity (): this {\n return Mat4.identity(this);\n }\n\n /**\n * Transpose the values of a mat4\n * @method transpose\n * @param {Mat4} [out] the receiving matrix, you can pass the same matrix to save result to itself, if not provided, a new matrix will be created.\n * @returns {Mat4} out\n */\n transpose (out) {\n out = out || new Mat4();\n return Mat4.transpose(out, this);\n }\n\n /**\n * Inverts a mat4\n * @method invert\n * @param {Mat4} [out] the receiving matrix, you can pass the same matrix to save result to itself, if not provided, a new matrix will be created.\n * @returns {Mat4} out\n */\n invert (out) {\n out = out || new Mat4();\n return Mat4.invert(out, this);\n }\n\n /**\n * Calculates the adjugate of a mat4\n * @method adjoint\n * @param {Mat4} [out] the receiving matrix, you can pass the same matrix to save result to itself, if not provided, a new matrix will be created.\n * @returns {Mat4} out\n */\n adjoint (out) {\n out = out || new Mat4();\n return Mat4.adjoint(out, this);\n }\n\n /**\n * Calculates the determinant of a mat4\n * @method determinant\n * @returns {Number} determinant of a\n */\n determinant () {\n return Mat4.determinant(this);\n }\n\n /**\n * Adds two Mat4\n * @method add\n * @param {Mat4} other the second operand\n * @param {Mat4} [out] the receiving matrix, you can pass the same matrix to save result to itself, if not provided, a new matrix will be created.\n * @returns {Mat4} out\n */\n add (other, out) {\n out = out || new Mat4();\n return Mat4.add(out, this, other);\n }\n\n /**\n * Subtracts the current matrix with another one\n * @method subtract\n * @param {Mat4} other the second operand\n * @returns {Mat4} this\n */\n subtract (other): this {\n return Mat4.subtract(this, this, other);\n }\n\n /**\n * Subtracts the current matrix with another one\n * @method multiply\n * @param {Mat4} other the second operand\n * @returns {Mat4} this\n */\n multiply (other): this {\n return Mat4.multiply(this, this, other);\n }\n\n /**\n * Multiply each element of the matrix by a scalar.\n * @method multiplyScalar\n * @param {Number} number amount to scale the matrix's elements by\n * @returns {Mat4} this\n */\n multiplyScalar (number): this {\n return Mat4.multiplyScalar(this, this, number);\n }\n\n /**\n * Translate a mat4 by the given vector\n * @method translate\n * @param {Vec3} v vector to translate by\n * @param {Mat4} [out] the receiving matrix, you can pass the same matrix to save result to itself, if not provided, a new matrix will be created\n * @returns {Mat4} out\n */\n translate (v, out) {\n out = out || new Mat4();\n return Mat4.translate(out, this, v);\n }\n\n /**\n * Scales the mat4 by the dimensions in the given vec3\n * @method scale\n * @param {Vec3} v vector to scale by\n * @param {Mat4} [out] the receiving matrix, you can pass the same matrix to save result to itself, if not provided, a new matrix will be created\n * @returns {Mat4} out\n */\n scale (v, out) {\n out = out || new Mat4();\n return Mat4.scale(out, this, v);\n }\n\n /**\n * Rotates a mat4 by the given angle around the given axis\n * @method rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @param {Vec3} axis the axis to rotate around\n * @param {Mat4} [out] the receiving matrix, you can pass the same matrix to save result to itself, if not provided, a new matrix will be created\n * @returns {Mat4} out\n */\n rotate (rad, axis, out) {\n out = out || new Mat4();\n return Mat4.rotate(out, this, rad, axis);\n }\n\n /**\n * Returns the translation vector component of a transformation matrix.\n * @method getTranslation\n * @param {Vec3} out Vector to receive translation component, if not provided, a new vec3 will be created\n * @return {Vec3} out\n */\n getTranslation (out) {\n out = out || new Vec3();\n return Mat4.getTranslation(out, this);\n }\n\n /**\n * Returns the scale factor component of a transformation matrix\n * @method getScale\n * @param {Vec3} out Vector to receive scale component, if not provided, a new vec3 will be created\n * @return {Vec3} out\n */\n getScale (out) {\n out = out || new Vec3();\n return Mat4.getScaling(out, this);\n }\n\n /**\n * Returns the rotation factor component of a transformation matrix\n * @method getRotation\n * @param {Quat} out Vector to receive rotation component, if not provided, a new quaternion object will be created\n * @return {Quat} out\n */\n getRotation (out) {\n out = out || new Quat();\n return Mat4.getRotation(out, this);\n }\n\n /**\n * Restore the matrix values from a quaternion rotation, vector translation and vector scale\n * @method fromRTS\n * @param {Quat} q Rotation quaternion\n * @param {Vec3} v Translation vector\n * @param {Vec3} s Scaling vector\n * @returns {Mat4} the current mat4 object\n * @chainable\n */\n fromRTS (q, v, s): this {\n return Mat4.fromRTS(this, q, v, s);\n }\n\n /**\n * Restore the matrix values from a quaternion rotation\n * @method fromQuat\n * @param {Quat} q Rotation quaternion\n * @returns {Mat4} the current mat4 object\n * @chainable\n */\n fromQuat (quat): this {\n return Mat4.fromQuat(this, quat);\n }\n}\n\nconst v3_1: Vec3 = new Vec3();\nconst m3_1: Mat3 = new Mat3();\n\nCCClass.fastDefine('cc.Mat4', Mat4, {\n m00: 1, m01: 0, m02: 0, m03: 0,\n m04: 0, m05: 1, m06: 0, m07: 0,\n m08: 0, m09: 0, m10: 1, m11: 0,\n m12: 0, m13: 0, m14: 0, m15: 1\n});\n\nfor (let i = 0; i < 16; i++) {\n Object.defineProperty(Mat4.prototype, 'm' + i, {\n get () {\n return this.m[i];\n },\n set (value) {\n this.m[i] = value;\n },\n });\n}\n\n/**\n * @module cc\n */\n\n/**\n * !#en The convenience method to create a new {{#crossLink \"Mat4\"}}cc.Mat4{{/crossLink}}.\n * !#zh 通过该简便的函数进行创建 {{#crossLink \"Mat4\"}}cc.Mat4{{/crossLink}} 对象。\n * @method mat4\n * @param {Number} [m00] Component in column 0, row 0 position (index 0)\n * @param {Number} [m01] Component in column 0, row 1 position (index 1)\n * @param {Number} [m02] Component in column 0, row 2 position (index 2)\n * @param {Number} [m03] Component in column 0, row 3 position (index 3)\n * @param {Number} [m10] Component in column 1, row 0 position (index 4)\n * @param {Number} [m11] Component in column 1, row 1 position (index 5)\n * @param {Number} [m12] Component in column 1, row 2 position (index 6)\n * @param {Number} [m13] Component in column 1, row 3 position (index 7)\n * @param {Number} [m20] Component in column 2, row 0 position (index 8)\n * @param {Number} [m21] Component in column 2, row 1 position (index 9)\n * @param {Number} [m22] Component in column 2, row 2 position (index 10)\n * @param {Number} [m23] Component in column 2, row 3 position (index 11)\n * @param {Number} [m30] Component in column 3, row 0 position (index 12)\n * @param {Number} [m31] Component in column 3, row 1 position (index 13)\n * @param {Number} [m32] Component in column 3, row 2 position (index 14)\n * @param {Number} [m33] Component in column 3, row 3 position (index 15)\n * @return {Mat4}\n */\ncc.mat4 = function (m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\n let mat = new Mat4(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33);\n if (m00 === undefined) {\n Mat4.identity(mat);\n }\n return mat;\n};\n\ncc.Mat4 = Mat4;\n","/****************************************************************************\n Copyright (c) 2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport ValueType from './value-type';\nimport CCClass from '../platform/CCClass';\nimport Vec3 from './vec3';\nimport Mat3 from './mat3';\nimport { EPSILON, toDegree } from './utils';\n\nlet _x: number = 0.0;\nlet _y: number = 0.0;\nlet _z: number = 0.0;\nlet _w: number = 0.0;\n\n/**\n * !#en Representation of 2D vectors and points.\n * !#zh 表示 2D 向量和坐标\n *\n * @class Quat\n * @extends ValueType\n */\n\n/**\n * !#en\n * Constructor\n * see {{#crossLink \"cc/quat:method\"}}cc.quat{{/crossLink}}\n * !#zh\n * 构造函数,可查看 {{#crossLink \"cc/quat:method\"}}cc.quat{{/crossLink}}\n * @method constructor\n * @param {number} [x=0]\n * @param {number} [y=0]\n * @param {number} [z=0]\n * @param {number} [w=1]\n */\nexport default class Quat extends ValueType {\n static mul = Quat.multiply;\n static scale = Quat.multiplyScalar;\n static mag = Quat.len;\n\n /**\n * !#en Calculate the multiply result between this quaternion and another one\n * !#zh 计算四元数乘积的结果\n * @method mul\n * @param {Quat} other\n * @param {Quat} [out]\n * @returns {Quat} out\n */\n mul (other: Quat, out?: Quat): Quat {\n return Quat.multiply(out || new Quat(), this, other);\n }\n\n static IDENTITY = Object.freeze(new Quat());\n\n /**\n * !#zh 获得指定四元数的拷贝\n * !#en Obtaining copy specified quaternion\n * @method clone\n * @typescript\n * clone (a: Out): Quat\n * @static\n */\n static clone (a: Out) {\n return new Quat(a.x, a.y, a.z, a.w);\n }\n\n /**\n * !#zh 复制目标四元数\n * !#en Copy quaternion target\n * @method copy\n * @typescript\n * copy (out: Out, a: QuatLike): Out\n * @static\n */\n static copy (out: Out, a: QuatLike) {\n out.x = a.x;\n out.y = a.y;\n out.z = a.z;\n out.w = a.w;\n return out;\n }\n\n /**\n * !#zh 设置四元数值\n * !#en Provided Quaternion Value\n * @method set\n * @typescript\n * set (out: Out, x: number, y: number, z: number, w: number): Out\n * @static\n */\n static set (out: Out, x: number, y: number, z: number, w: number) {\n out.x = x;\n out.y = y;\n out.z = z;\n out.w = w;\n return out;\n }\n\n /**\n * !#zh 将目标赋值为单位四元数\n * !#en The target of an assignment as a unit quaternion\n * @method identity\n * @typescript\n * identity (out: Out): Out\n * @static\n */\n static identity (out: Out) {\n out.x = 0;\n out.y = 0;\n out.z = 0;\n out.w = 1;\n return out;\n }\n\n /**\n * !#zh 设置四元数为两向量间的最短路径旋转,默认两向量都已归一化\n * !#en Set quaternion rotation is the shortest path between two vectors, the default two vectors are normalized\n * @method rotationTo\n * @typescript\n * rotationTo (out: Out, a: VecLike, b: VecLike): Out\n * @static\n */\n static rotationTo (out: Out, a: VecLike, b: VecLike) {\n const dot = Vec3.dot(a, b);\n if (dot < -0.999999) {\n Vec3.cross(v3_1, Vec3.RIGHT, a);\n if (v3_1.mag() < 0.000001) {\n Vec3.cross(v3_1, Vec3.UP, a);\n }\n Vec3.normalize(v3_1, v3_1);\n Quat.fromAxisAngle(out, v3_1, Math.PI);\n return out;\n } else if (dot > 0.999999) {\n out.x = 0;\n out.y = 0;\n out.z = 0;\n out.w = 1;\n return out;\n } else {\n Vec3.cross(v3_1, a, b);\n out.x = v3_1.x;\n out.y = v3_1.y;\n out.z = v3_1.z;\n out.w = 1 + dot;\n return Quat.normalize(out, out);\n }\n }\n\n /**\n * !#zh 获取四元数的旋转轴和旋转弧度\n * !#en Get the rotary shaft and the arc of rotation quaternion\n * @method getAxisAngle\n * @param {Vec3} outAxis - 旋转轴输出\n * @param {Quat} q - 源四元数\n * @return {Number} - 旋转弧度\n * @typescript\n * getAxisAngle (outAxis: VecLike, q: Out): number\n * @static\n */\n static getAxisAngle (outAxis: VecLike, q: Out) {\n const rad = Math.acos(q.w) * 2.0;\n const s = Math.sin(rad / 2.0);\n if (s !== 0.0) {\n outAxis.x = q.x / s;\n outAxis.y = q.y / s;\n outAxis.z = q.z / s;\n } else {\n // If s is zero, return any axis (no rotation - axis does not matter)\n outAxis.x = 1;\n outAxis.y = 0;\n outAxis.z = 0;\n }\n return rad;\n }\n\n /**\n * !#zh 四元数乘法\n * !#en Quaternion multiplication\n * @method multiply\n * @typescript\n * multiply (out: Out, a: QuatLike_1, b: QuatLike_2): Out\n * @static\n */\n static multiply (out: Out, a: QuatLike_1, b: QuatLike_2) {\n _x = a.x * b.w + a.w * b.x + a.y * b.z - a.z * b.y;\n _y = a.y * b.w + a.w * b.y + a.z * b.x - a.x * b.z;\n _z = a.z * b.w + a.w * b.z + a.x * b.y - a.y * b.x;\n _w = a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z;\n out.x = _x;\n out.y = _y;\n out.z = _z;\n out.w = _w;\n return out;\n }\n\n /**\n * !#zh 四元数标量乘法\n * !#en Quaternion scalar multiplication\n * @method multiplyScalar\n * @typescript\n * multiplyScalar (out: Out, a: Out, b: number): Out\n * @static\n */\n static multiplyScalar (out: Out, a: Out, b: number) {\n out.x = a.x * b;\n out.y = a.y * b;\n out.z = a.z * b;\n out.w = a.w * b;\n return out;\n }\n\n /**\n * !#zh 四元数乘加:A + B * scale\n * !#en Quaternion multiplication and addition: A + B * scale\n * @method scaleAndAdd\n * @typescript\n * scaleAndAdd (out: Out, a: Out, b: Out, scale: number): Out\n * @static\n */\n static scaleAndAdd (out: Out, a: Out, b: Out, scale: number) {\n out.x = a.x + b.x * scale;\n out.y = a.y + b.y * scale;\n out.z = a.z + b.z * scale;\n out.w = a.w + b.w * scale;\n return out;\n }\n\n /**\n * !#zh 绕 X 轴旋转指定四元数\n * !#en About the X axis specified quaternion\n * @method rotateX\n * @typescript\n * rotateX (out: Out, a: Out, rad: number): Out\n * @param rad 旋转弧度\n * @static\n */\n static rotateX (out: Out, a: Out, rad: number) {\n rad *= 0.5;\n\n const bx = Math.sin(rad);\n const bw = Math.cos(rad);\n\n _x = a.x * bw + a.w * bx;\n _y = a.y * bw + a.z * bx;\n _z = a.z * bw - a.y * bx;\n _w = a.w * bw - a.x * bx;\n\n out.x = _x;\n out.y = _y;\n out.z = _z;\n out.w = _w;\n\n return out;\n }\n\n /**\n * !#zh 绕 Y 轴旋转指定四元数\n * !#en Rotation about the Y axis designated quaternion\n * @method rotateY\n * @typescript\n * rotateY (out: Out, a: Out, rad: number): Out\n * @param rad 旋转弧度\n * @static\n */\n static rotateY (out: Out, a: Out, rad: number) {\n rad *= 0.5;\n\n const by = Math.sin(rad);\n const bw = Math.cos(rad);\n\n _x = a.x * bw - a.z * by;\n _y = a.y * bw + a.w * by;\n _z = a.z * bw + a.x * by;\n _w = a.w * bw - a.y * by;\n\n out.x = _x;\n out.y = _y;\n out.z = _z;\n out.w = _w;\n\n return out;\n }\n\n /**\n * !#zh 绕 Z 轴旋转指定四元数\n * !#en Around the Z axis specified quaternion\n * @method rotateZ\n * @typescript\n * rotateZ (out: Out, a: Out, rad: number): Out\n * @param rad 旋转弧度\n * @static\n */\n static rotateZ (out: Out, a: Out, rad: number) {\n rad *= 0.5;\n\n const bz = Math.sin(rad);\n const bw = Math.cos(rad);\n\n _x = a.x * bw + a.y * bz;\n _y = a.y * bw - a.x * bz;\n _z = a.z * bw + a.w * bz;\n _w = a.w * bw - a.z * bz;\n\n out.x = _x;\n out.y = _y;\n out.z = _z;\n out.w = _w;\n\n return out;\n }\n\n /**\n * !#zh 绕世界空间下指定轴旋转四元数\n * !#en Space around the world at a given axis of rotation quaternion\n * @method rotateAround\n * @typescript\n * rotateAround (out: Out, rot: Out, axis: VecLike, rad: number): Out\n * @param axis 旋转轴,默认已归一化\n * @param rad 旋转弧度\n * @static\n */\n static rotateAround (out: Out, rot: Out, axis: VecLike, rad: number) {\n // get inv-axis (local to rot)\n Quat.invert(qt_1, rot);\n Vec3.transformQuat(v3_1, axis, qt_1);\n // rotate by inv-axis\n Quat.fromAxisAngle(qt_1, v3_1, rad);\n Quat.multiply(out, rot, qt_1);\n return out;\n }\n\n /**\n * !#zh 绕本地空间下指定轴旋转四元数\n * !#en Local space around the specified axis rotation quaternion\n * @method rotateAroundLocal\n * @typescript\n * rotateAroundLocal (out: Out, rot: Out, axis: VecLike, rad: number): Out\n * @param axis 旋转轴\n * @param rad 旋转弧度\n * @static\n */\n static rotateAroundLocal (out: Out, rot: Out, axis: VecLike, rad: number) {\n Quat.fromAxisAngle(qt_1, axis, rad);\n Quat.multiply(out, rot, qt_1);\n return out;\n }\n\n /**\n * !#zh 根据 xyz 分量计算 w 分量,默认已归一化\n * !#en The component w xyz components calculated, normalized by default\n * @method calculateW\n * @typescript\n * calculateW (out: Out, a: Out): Out\n * @static\n */\n static calculateW (out: Out, a: Out) {\n\n out.x = a.x;\n out.y = a.y;\n out.z = a.z;\n out.w = Math.sqrt(Math.abs(1.0 - a.x * a.x - a.y * a.y - a.z * a.z));\n return out;\n }\n\n /**\n * !#zh 四元数点积(数量积)\n * !#en Quaternion dot product (scalar product)\n * @method dot\n * @typescript\n * dot (a: Out, b: Out): number\n * @static\n */\n static dot (a: Out, b: Out) {\n return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w;\n }\n\n /**\n * !#zh 逐元素线性插值: A + t * (B - A)\n * !#en Element by element linear interpolation: A + t * (B - A)\n * @method lerp\n * @typescript\n * lerp (out: Out, a: Out, b: Out, t: number): Out\n * @static\n */\n static lerp (out: Out, a: Out, b: Out, t: number) {\n out.x = a.x + t * (b.x - a.x);\n out.y = a.y + t * (b.y - a.y);\n out.z = a.z + t * (b.z - a.z);\n out.w = a.w + t * (b.w - a.w);\n return out;\n }\n\n /**\n * !#zh 四元数球面插值\n * !#en Spherical quaternion interpolation\n * @method slerp\n * @typescript\n * slerp(out: Out, a: QuatLike_1, b: QuatLike_2, t: number): Out\n * @static\n */\n static slerp\n (out: Out, a: QuatLike_1, b: QuatLike_2, t: number) {\n // benchmarks:\n // http://jsperf.com/quaternion-slerp-implementations\n\n let scale0 = 0;\n let scale1 = 0;\n\n // calc cosine\n let cosom = a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w;\n // adjust signs (if necessary)\n if (cosom < 0.0) {\n cosom = -cosom;\n b.x = -b.x;\n b.y = -b.y;\n b.z = -b.z;\n b.w = -b.w;\n }\n // calculate coefficients\n if ((1.0 - cosom) > 0.000001) {\n // standard case (slerp)\n const omega = Math.acos(cosom);\n const sinom = Math.sin(omega);\n scale0 = Math.sin((1.0 - t) * omega) / sinom;\n scale1 = Math.sin(t * omega) / sinom;\n } else {\n // \"from\" and \"to\" quaternions are very close\n // ... so we can do a linear interpolation\n scale0 = 1.0 - t;\n scale1 = t;\n }\n // calculate final values\n out.x = scale0 * a.x + scale1 * b.x;\n out.y = scale0 * a.y + scale1 * b.y;\n out.z = scale0 * a.z + scale1 * b.z;\n out.w = scale0 * a.w + scale1 * b.w;\n\n return out;\n }\n\n /**\n * !#zh 带两个控制点的四元数球面插值\n * !#en Quaternion with two spherical interpolation control points\n * @method sqlerp\n * @typescript\n * sqlerp (out: Out, a: Out, b: Out, c: Out, d: Out, t: number): Out\n * @static\n */\n static sqlerp (out: Out, a: Out, b: Out, c: Out, d: Out, t: number) {\n Quat.slerp(qt_1, a, d, t);\n Quat.slerp(qt_2, b, c, t);\n Quat.slerp(out, qt_1, qt_2, 2 * t * (1 - t));\n return out;\n }\n\n /**\n * !#zh 四元数求逆\n * !#en Quaternion inverse\n * @method invert\n * @typescript\n * invert (out: Out, a: QuatLike): Out\n * @static\n */\n static invert (out: Out, a: QuatLike) {\n const dot = a.x * a.x + a.y * a.y + a.z * a.z + a.w * a.w;\n const invDot = dot ? 1.0 / dot : 0;\n\n // TODO: Would be faster to return [0,0,0,0] immediately if dot == 0\n\n out.x = -a.x * invDot;\n out.y = -a.y * invDot;\n out.z = -a.z * invDot;\n out.w = a.w * invDot;\n return out;\n }\n\n /**\n * !#zh 求共轭四元数,对单位四元数与求逆等价,但更高效\n * !#en Conjugating a quaternion, and the unit quaternion equivalent to inversion, but more efficient\n * @method conjugate\n * @typescript\n * conjugate (out: Out, a: Out): Out\n * @static\n */\n static conjugate (out: Out, a: Out) {\n out.x = -a.x;\n out.y = -a.y;\n out.z = -a.z;\n out.w = a.w;\n return out;\n }\n\n /**\n * !#zh 求四元数长度\n * !#en Seek length quaternion\n * @method len\n * @typescript\n * len (a: Out): number\n * @static\n */\n static len (a: Out) {\n return Math.sqrt(a.x * a.x + a.y * a.y + a.z * a.z + a.w * a.w);\n }\n\n /**\n * !#zh 求四元数长度平方\n * !#en Seeking quaternion square of the length\n * @method lengthSqr\n * @typescript\n * lengthSqr (a: Out): number\n * @static\n */\n static lengthSqr (a: Out) {\n return a.x * a.x + a.y * a.y + a.z * a.z + a.w * a.w;\n }\n\n /**\n * !#zh 归一化四元数\n * !#en Normalized quaternions\n * @method normalize\n * @typescript\n * normalize (out: Out, a: Out): Out\n * @static\n */\n static normalize (out: Out, a: Out) {\n let len = a.x * a.x + a.y * a.y + a.z * a.z + a.w * a.w;\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n out.x = a.x * len;\n out.y = a.y * len;\n out.z = a.z * len;\n out.w = a.w * len;\n }\n return out;\n }\n\n /**\n * !#zh 根据本地坐标轴朝向计算四元数,默认三向量都已归一化且相互垂直\n * !#en Calculated according to the local orientation quaternion coordinate axis, the default three vectors are normalized and mutually perpendicular\n * @method fromAxes\n * @typescript\n * fromAxes (out: Out, xAxis: VecLike, yAxis: VecLike, zAxis: VecLike): Out\n * @static\n */\n static fromAxes (out: Out, xAxis: VecLike, yAxis: VecLike, zAxis: VecLike) {\n Mat3.set(m3_1,\n xAxis.x, xAxis.y, xAxis.z,\n yAxis.x, yAxis.y, yAxis.z,\n zAxis.x, zAxis.y, zAxis.z,\n );\n return Quat.normalize(out, Quat.fromMat3(out, m3_1));\n }\n\n /**\n * !#zh 根据视口的前方向和上方向计算四元数\n * !#en The forward direction and the direction of the viewport computing quaternion\n * @method fromViewUp\n * @typescript\n * fromViewUp (out: Out, view: Vec3, up?: Vec3): Out\n * @param view 视口面向的前方向,必须归一化\n * @param up 视口的上方向,必须归一化,默认为 (0, 1, 0)\n * @static\n */\n static fromViewUp (out: Out, view: Vec3, up?: Vec3) {\n Mat3.fromViewUp(m3_1, view, up);\n return Quat.normalize(out, Quat.fromMat3(out, m3_1));\n }\n\n /**\n * !#zh 根据旋转轴和旋转弧度计算四元数\n * !#en The quaternion calculated and the arc of rotation of the rotary shaft\n * @method fromAxisAngle\n * @typescript\n * fromAxisAngle (out: Out, axis: VecLike, rad: number): Out\n * @static\n */\n static fromAxisAngle (out: Out, axis: VecLike, rad: number) {\n rad = rad * 0.5;\n const s = Math.sin(rad);\n out.x = s * axis.x;\n out.y = s * axis.y;\n out.z = s * axis.z;\n out.w = Math.cos(rad);\n return out;\n }\n\n /**\n * Set a quaternion from the given euler angle 0, 0, z.\n *\n * @param {Quat} out - Quaternion to store result.\n * @param {number} z - Angle to rotate around Z axis in degrees.\n * @returns {Quat}\n * @function\n */\n static fromAngleZ (out: Quat, z: number): Quat {\n z *= halfToRad;\n out.x = out.y = 0;\n out.z = Math.sin(z);\n out.w = Math.cos(z);\n return out;\n }\n\n /**\n * !#zh 根据三维矩阵信息计算四元数,默认输入矩阵不含有缩放信息\n * !#en Calculating the three-dimensional quaternion matrix information, default zoom information input matrix does not contain\n * @method fromMat3\n * @typescript\n * fromMat3 (out: Out, mat: Mat3): Out\n * @static\n */\n static fromMat3 (out: Out, mat: Mat3) {\n let m = mat.m;\n let m00 = m[0], m10 = m[1], m20 = m[2],\n m01 = m[3], m11 = m[4], m21 = m[5],\n m02 = m[6], m12 = m[7], m22 = m[8];\n\n const trace = m00 + m11 + m22;\n\n if (trace > 0) {\n const s = 0.5 / Math.sqrt(trace + 1.0);\n\n out.w = 0.25 / s;\n out.x = (m21 - m12) * s;\n out.y = (m02 - m20) * s;\n out.z = (m10 - m01) * s;\n\n } else if ((m00 > m11) && (m00 > m22)) {\n const s = 2.0 * Math.sqrt(1.0 + m00 - m11 - m22);\n\n out.w = (m21 - m12) / s;\n out.x = 0.25 * s;\n out.y = (m01 + m10) / s;\n out.z = (m02 + m20) / s;\n\n } else if (m11 > m22) {\n const s = 2.0 * Math.sqrt(1.0 + m11 - m00 - m22);\n\n out.w = (m02 - m20) / s;\n out.x = (m01 + m10) / s;\n out.y = 0.25 * s;\n out.z = (m12 + m21) / s;\n\n } else {\n const s = 2.0 * Math.sqrt(1.0 + m22 - m00 - m11);\n\n out.w = (m10 - m01) / s;\n out.x = (m02 + m20) / s;\n out.y = (m12 + m21) / s;\n out.z = 0.25 * s;\n }\n\n return out;\n }\n\n /**\n * !#zh 根据欧拉角信息计算四元数,旋转顺序为 YZX\n * !#en The quaternion calculated Euler angle information, rotation order YZX\n * @method fromEuler\n * @typescript\n * fromEuler (out: Out, x: number, y: number, z: number): Out\n * @static\n */\n static fromEuler (out: Out, x: number, y: number, z: number) {\n x *= halfToRad;\n y *= halfToRad;\n z *= halfToRad;\n\n const sx = Math.sin(x);\n const cx = Math.cos(x);\n const sy = Math.sin(y);\n const cy = Math.cos(y);\n const sz = Math.sin(z);\n const cz = Math.cos(z);\n\n out.x = sx * cy * cz + cx * sy * sz;\n out.y = cx * sy * cz + sx * cy * sz;\n out.z = cx * cy * sz - sx * sy * cz;\n out.w = cx * cy * cz - sx * sy * sz;\n\n return out;\n }\n\n /**\n * !#zh 返回定义此四元数的坐标系 X 轴向量\n * !#en This returns the result of the quaternion coordinate system X-axis vector\n * @method toAxisX\n * @typescript\n * toAxisX (out: VecLike, q: Out): VecLike\n * @static\n */\n static toAxisX (out: VecLike, q: Out) {\n const fy = 2.0 * q.y;\n const fz = 2.0 * q.z;\n out.x = 1.0 - fy * q.y - fz * q.z;\n out.y = fy * q.x + fz * q.w;\n out.z = fz * q.x + fy * q.w;\n\n return out;\n }\n\n /**\n * !#zh 返回定义此四元数的坐标系 Y 轴向量\n * !#en This returns the result of the quaternion coordinate system Y axis vector\n * @method toAxisY\n * @typescript\n * toAxisY (out: VecLike, q: Out): VecLike\n * @static\n */\n static toAxisY (out: VecLike, q: Out) {\n const fx = 2.0 * q.x;\n const fy = 2.0 * q.y;\n const fz = 2.0 * q.z;\n out.x = fy * q.x - fz * q.w;\n out.y = 1.0 - fx * q.x - fz * q.z;\n out.z = fz * q.y + fx * q.w;\n\n return out;\n }\n\n /**\n * !#zh 返回定义此四元数的坐标系 Z 轴向量\n * !#en This returns the result of the quaternion coordinate system the Z-axis vector\n * @method toAxisZ\n * @typescript\n * toAxisZ (out: VecLike, q: Out): VecLike\n * @static\n */\n static toAxisZ (out: VecLike, q: Out) {\n const fx = 2.0 * q.x;\n const fy = 2.0 * q.y;\n const fz = 2.0 * q.z;\n out.x = fz * q.x - fy * q.w;\n out.y = fz * q.y - fx * q.w;\n out.z = 1.0 - fx * q.x - fy * q.y;\n\n return out;\n }\n\n /**\n * !#zh 根据四元数计算欧拉角,返回角度 x, y 在 [-180, 180] 区间内, z 默认在 [-90, 90] 区间内,旋转顺序为 YZX\n * !#en The quaternion calculated Euler angles, return angle x, y in the [-180, 180] interval, z default the range [-90, 90] interval, the rotation order YZX\n * @method toEuler\n * @typescript\n * toEuler (out: Out, q: IQuatLike, outerZ?: boolean): Out\n * @param outerZ z 取值范围区间改为 [-180, -90] U [90, 180]\n * @static\n */\n static toEuler (out: Out, q: IQuatLike, outerZ?: boolean) {\n const { x, y, z, w } = q;\n let bank = 0;\n let heading = 0;\n let attitude = 0;\n const test = x * y + z * w;\n if (test > 0.499999) {\n bank = 0; // default to zero\n heading = toDegree(2 * Math.atan2(x, w));\n attitude = 90;\n } else if (test < -0.499999) {\n bank = 0; // default to zero\n heading = -toDegree(2 * Math.atan2(x, w));\n attitude = -90;\n } else {\n const sqx = x * x;\n const sqy = y * y;\n const sqz = z * z;\n bank = toDegree(Math.atan2(2 * x * w - 2 * y * z, 1 - 2 * sqx - 2 * sqz));\n heading = toDegree(Math.atan2(2 * y * w - 2 * x * z, 1 - 2 * sqy - 2 * sqz));\n attitude = toDegree(Math.asin(2 * test));\n if (outerZ) {\n bank = -180 * Math.sign(bank + 1e-6) + bank;\n heading = -180 * Math.sign(heading + 1e-6) + heading;\n attitude = 180 * Math.sign(attitude + 1e-6) - attitude;\n }\n }\n out.x = bank; out.y = heading; out.z = attitude;\n return out;\n }\n\n /**\n * !#zh 四元数等价判断\n * !#en Analyzing quaternion equivalent\n * @method strictEquals\n * @typescript\n * strictEquals (a: Out, b: Out): boolean\n * @static\n */\n static strictEquals (a: Out, b: Out) {\n return a.x === b.x && a.y === b.y && a.z === b.z && a.w === b.w;\n }\n\n /**\n * !#zh 排除浮点数误差的四元数近似等价判断\n * !#en Negative floating point error quaternion approximately equivalent Analyzing\n * @method equals\n * @typescript\n * equals (a: Out, b: Out, epsilon?: number): boolean\n * @static\n */\n static equals (a: Out, b: Out, epsilon = EPSILON) {\n return (Math.abs(a.x - b.x) <= epsilon * Math.max(1.0, Math.abs(a.x), Math.abs(b.x)) &&\n Math.abs(a.y - b.y) <= epsilon * Math.max(1.0, Math.abs(a.y), Math.abs(b.y)) &&\n Math.abs(a.z - b.z) <= epsilon * Math.max(1.0, Math.abs(a.z), Math.abs(b.z)) &&\n Math.abs(a.w - b.w) <= epsilon * Math.max(1.0, Math.abs(a.w), Math.abs(b.w)));\n }\n\n\n /**\n * !#zh 四元数转数组\n * !#en Quaternion rotation array\n * @method toArray\n * @typescript\n * toArray > (out: Out, q: IQuatLike, ofs?: number): Out\n * @param ofs 数组内的起始偏移量\n * @static\n */\n static toArray > (out: Out, q: IQuatLike, ofs = 0) {\n out[ofs + 0] = q.x;\n out[ofs + 1] = q.y;\n out[ofs + 2] = q.z;\n out[ofs + 3] = q.w;\n return out;\n }\n\n /**\n * !#zh 数组转四元数\n * !#en Array to a quaternion\n * @method fromArray\n * @typescript\n * fromArray (out: Out, arr: IWritableArrayLike, ofs?: number): Out\n * @param ofs 数组起始偏移量\n * @static\n */\n static fromArray (out: Out, arr: IWritableArrayLike, ofs = 0) {\n out.x = arr[ofs + 0];\n out.y = arr[ofs + 1];\n out.z = arr[ofs + 2];\n out.w = arr[ofs + 3];\n return out;\n }\n\n\n /**\n * @property {Number} x\n */\n x: number;\n /**\n * @property {Number} y\n */\n y: number;\n /**\n * @property {Number} z\n */\n z: number;\n /**\n * @property {Number} w\n */\n w: number;\n\n constructor (x: Quat | number = 0, y: number = 0, z: number = 0, w: number = 1) {\n super();\n\n if (x && typeof x === 'object') {\n this.x = x.x;\n this.y = x.y;\n this.z = x.z;\n this.w = x.w;\n }\n else {\n this.x = x as number;\n this.y = y;\n this.z = z;\n this.w = w;\n }\n }\n\n /**\n * !#en clone a Quat object and return the new object\n * !#zh 克隆一个四元数并返回\n * @method clone\n * @return {Quat}\n */\n clone (): Quat {\n return new Quat(this.x, this.y, this.z, this.w);\n }\n\n /**\n * !#en Set values with another quaternion\n * !#zh 用另一个四元数的值设置到当前对象上。\n * @method set\n * @param {Quat} newValue - !#en new value to set. !#zh 要设置的新值\n * @return {Quat} returns this\n * @chainable\n */\n set (newValue: Quat): this {\n this.x = newValue.x;\n this.y = newValue.y;\n this.z = newValue.z;\n this.w = newValue.w;\n return this;\n }\n\n /**\n * !#en Check whether current quaternion equals another\n * !#zh 当前的四元数是否与指定的四元数相等。\n * @method equals\n * @param {Quat} other\n * @return {Boolean}\n */\n equals (other: Quat): boolean {\n return other && this.x === other.x && this.y === other.y && this.z === other.z && this.w === other.w;\n }\n\n /**\n * !#en Convert quaternion to euler\n * !#zh 转换四元数到欧拉角\n * @method toEuler\n * @param {Vec3} out\n * @return {Vec3}\n */\n toEuler (out: Vec3): Vec3 {\n return Quat.toEuler(out, this);\n }\n\n /**\n * !#en Convert euler to quaternion\n * !#zh 转换欧拉角到四元数\n * @method fromEuler\n * @param {Vec3} euler\n * @return {Quat}\n */\n fromEuler (euler: Vec3): this {\n return Quat.fromEuler(this, euler.x, euler.y, euler.z);\n }\n\n /**\n * !#en Calculate the interpolation result between this quaternion and another one with given ratio\n * !#zh 计算四元数的插值结果\n * @member lerp\n * @param {Quat} to\n * @param {Number} ratio\n * @param {Quat} [out]\n * @returns {Quat} out\n */\n lerp (to: Quat, ratio: number, out?: Quat): Quat {\n out = out || new Quat();\n Quat.slerp(out, this, to, ratio);\n return out;\n }\n\n /**\n * !#en Calculate the multiply result between this quaternion and another one\n * !#zh 计算四元数乘积的结果\n * @member multiply\n * @param {Quat} other\n * @returns {Quat} this\n */\n multiply (other: Quat): this {\n return Quat.multiply(this, this, other);\n }\n\n /**\n * !#en Rotates a quaternion by the given angle (in radians) about a world space axis.\n * !#zh 围绕世界空间轴按给定弧度旋转四元数\n * @member rotateAround\n * @param {Quat} rot - Quaternion to rotate\n * @param {Vec3} axis - The axis around which to rotate in world space\n * @param {Number} rad - Angle (in radians) to rotate\n * @param {Quat} [out] - Quaternion to store result\n * @returns {Quat} out\n */\n rotateAround (rot: Quat, axis: Vec3, rad: number, out?: Quat): Quat {\n out = out || new Quat();\n return Quat.rotateAround(out, rot, axis, rad);\n }\n}\n\nconst qt_1 = new Quat();\nconst qt_2 = new Quat();\nconst v3_1 = new Vec3();\nconst m3_1 = new Mat3();\nconst halfToRad = 0.5 * Math.PI / 180.0;\n\nCCClass.fastDefine('cc.Quat', Quat, { x: 0, y: 0, z: 0, w: 1 });\n\n\n/**\n * @module cc\n */\n\n/**\n * !#en The convenience method to create a new {{#crossLink \"Quat\"}}cc.Quat{{/crossLink}}.\n * !#zh 通过该简便的函数进行创建 {{#crossLink \"Quat\"}}cc.Quat{{/crossLink}} 对象。\n * @method quat\n * @param {Number|Object} [x=0]\n * @param {Number} [y=0]\n * @param {Number} [z=0]\n * @param {Number} [w=1]\n * @return {Quat}\n */\ncc.quat = function quat (x, y, z, w) {\n return new Quat(x, y, z, w);\n};\n\ncc.Quat = Quat;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport ValueType from './value-type';\nimport CCClass from '../platform/CCClass';\nimport Vec2 from './vec2';\nimport Mat4 from './mat4';\nimport Size from './size';\n\n/**\n * !#en A 2D rectangle defined by x, y position and width, height.\n * !#zh 通过位置和宽高定义的 2D 矩形。\n * @class Rect\n * @extends ValueType\n */\n/**\n * !#en\n * Constructor of Rect class.\n * see {{#crossLink \"cc/rect:method\"}} cc.rect {{/crossLink}} for convenience method.\n * !#zh\n * Rect类的构造函数。可以通过 {{#crossLink \"cc/rect:method\"}} cc.rect {{/crossLink}} 简便方法进行创建。\n *\n * @method constructor\n * @param {Number} [x=0]\n * @param {Number} [y=0]\n * @param {Number} [w=0]\n * @param {Number} [h=0]\n */\nexport default class Rect extends ValueType {\n\n /**\n * !#en Creates a rectangle from two coordinate values.\n * !#zh 根据指定 2 个坐标创建出一个矩形区域。\n * @static\n * @method fromMinMax\n * @param {Vec2} v1\n * @param {Vec2} v2\n * @return {Rect}\n * @example\n * cc.Rect.fromMinMax(cc.v2(10, 10), cc.v2(20, 20)); // Rect {x: 10, y: 10, width: 10, height: 10};\n */\n static fromMinMax (v1: Vec2, v2: Vec2) {\n var min_x = Math.min(v1.x, v2.x);\n var min_y = Math.min(v1.y, v2.y);\n var max_x = Math.max(v1.x, v2.x);\n var max_y = Math.max(v1.y, v2.y);\n\n return new Rect(min_x, min_y, max_x - min_x, max_y - min_y);\n }\n\n /**\n * @property {Number} x\n */\n x: number;\n /**\n * @property {Number} y\n */\n y: number;\n /**\n * @property {Number} width\n */\n width: number;\n /**\n * @property {Number} height\n */\n height: number;\n constructor (x: Rect | number = 0, y: number = 0, w: number = 0, h: number = 0) {\n super();\n if (x && typeof x === 'object') {\n y = x.y;\n w = x.width;\n h = x.height;\n x = x.x;\n }\n this.x = x as number || 0;\n this.y = y || 0;\n this.width = w || 0;\n this.height = h || 0;\n }\n\n\n /**\n * !#en TODO\n * !#zh 克隆一个新的 Rect。\n * @method clone\n * @return {Rect}\n * @example\n * var a = new cc.Rect(0, 0, 10, 10);\n * a.clone();// Rect {x: 0, y: 0, width: 10, height: 10}\n */\n clone (): Rect {\n return new Rect(this.x, this.y, this.width, this.height);\n }\n\n /**\n * !#en TODO\n * !#zh 是否等于指定的矩形。\n * @method equals\n * @param {Rect} other\n * @return {Boolean}\n * @example\n * var a = new cc.Rect(0, 0, 10, 10);\n * var b = new cc.Rect(0, 0, 10, 10);\n * a.equals(b);// true;\n */\n equals (other: Rect): boolean {\n return other &&\n this.x === other.x &&\n this.y === other.y &&\n this.width === other.width &&\n this.height === other.height;\n };\n\n /**\n * !#en TODO\n * !#zh 线性插值\n * @method lerp\n * @param {Rect} to\n * @param {Number} ratio - the interpolation coefficient.\n * @param {Rect} [out] - optional, the receiving vector.\n * @return {Rect}\n * @example\n * var a = new cc.Rect(0, 0, 10, 10);\n * var b = new cc.Rect(50, 50, 100, 100);\n * update (dt) {\n * // method 1;\n * var c = a.lerp(b, dt * 0.1);\n * // method 2;\n * a.lerp(b, dt * 0.1, c);\n * }\n */\n lerp (to: Rect, ratio: number, out?: Rect): Rect {\n out = out || new Rect();\n var x = this.x;\n var y = this.y;\n var width = this.width;\n var height = this.height;\n out.x = x + (to.x - x) * ratio;\n out.y = y + (to.y - y) * ratio;\n out.width = width + (to.width - width) * ratio;\n out.height = height + (to.height - height) * ratio;\n return out;\n };\n\n set (source: Rect): Rect {\n this.x = source.x;\n this.y = source.y;\n this.width = source.width;\n this.height = source.height;\n return this;\n }\n\n /**\n * !#en Check whether the current rectangle intersects with the given one\n * !#zh 当前矩形与指定矩形是否相交。\n * @method intersects\n * @param {Rect} rect\n * @return {Boolean}\n * @example\n * var a = new cc.Rect(0, 0, 10, 10);\n * var b = new cc.Rect(0, 0, 20, 20);\n * a.intersects(b);// true\n */\n intersects (rect: Rect): boolean {\n var maxax = this.x + this.width,\n maxay = this.y + this.height,\n maxbx = rect.x + rect.width,\n maxby = rect.y + rect.height;\n return !(maxax < rect.x || maxbx < this.x || maxay < rect.y || maxby < this.y);\n }\n\n /**\n * !#en Returns the overlapping portion of 2 rectangles.\n * !#zh 返回 2 个矩形重叠的部分。\n * @method intersection\n * @param {Rect} out Stores the result\n * @param {Rect} rectB\n * @return {Rect} Returns the out parameter\n * @example\n * var a = new cc.Rect(0, 10, 20, 20);\n * var b = new cc.Rect(0, 10, 10, 10);\n * var intersection = new cc.Rect();\n * a.intersection(intersection, b); // intersection {x: 0, y: 10, width: 10, height: 10};\n */\n intersection (out: Rect, rectB: Rect): Rect {\n var axMin = this.x, ayMin = this.y, axMax = this.x + this.width, ayMax = this.y + this.height;\n var bxMin = rectB.x, byMin = rectB.y, bxMax = rectB.x + rectB.width, byMax = rectB.y + rectB.height;\n out.x = Math.max(axMin, bxMin);\n out.y = Math.max(ayMin, byMin);\n out.width = Math.min(axMax, bxMax) - out.x;\n out.height = Math.min(ayMax, byMax) - out.y;\n return out;\n }\n\n /**\n * !#en Check whether the current rect contains the given point\n * !#zh 当前矩形是否包含指定坐标点。\n * Returns true if the point inside this rectangle.\n * @method contains\n * @param {Vec2} point\n * @return {Boolean}\n * @example\n * var a = new cc.Rect(0, 0, 10, 10);\n * var b = new cc.Vec2(0, 5);\n * a.contains(b);// true\n */\n contains (point: Vec2): boolean {\n return (this.x <= point.x &&\n this.x + this.width >= point.x &&\n this.y <= point.y &&\n this.y + this.height >= point.y);\n }\n\n /**\n * !#en Returns true if the other rect totally inside this rectangle.\n * !#zh 当前矩形是否包含指定矩形。\n * @method containsRect\n * @param {Rect} rect\n * @return {Boolean}\n * @example\n * var a = new cc.Rect(0, 0, 20, 20);\n * var b = new cc.Rect(0, 0, 10, 10);\n * a.containsRect(b);// true\n */\n containsRect (rect: Rect): boolean {\n return (this.x <= rect.x &&\n this.x + this.width >= rect.x + rect.width &&\n this.y <= rect.y &&\n this.y + this.height >= rect.y + rect.height);\n }\n\n /**\n * !#en Returns the smallest rectangle that contains the current rect and the given rect.\n * !#zh 返回一个包含当前矩形和指定矩形的最小矩形。\n * @method union\n * @param {Rect} out Stores the result\n * @param {Rect} rectB\n * @return {Rect} Returns the out parameter\n * @example\n * var a = new cc.Rect(0, 10, 20, 20);\n * var b = new cc.Rect(0, 10, 10, 10);\n * var union = new cc.Rect();\n * a.union(union, b); // union {x: 0, y: 10, width: 20, height: 20};\n */\n union (out: Rect, rectB: Rect): Rect {\n var ax = this.x, ay = this.y, aw = this.width, ah = this.height;\n var bx = rectB.x, by = rectB.y, bw = rectB.width, bh = rectB.height;\n out.x = Math.min(ax, bx);\n out.y = Math.min(ay, by);\n out.width = Math.max(ax + aw, bx + bw) - out.x;\n out.height = Math.max(ay + ah, by + bh) - out.y;\n return out;\n }\n\n /**\n * !#en Apply matrix4 to the rect.\n * !#zh 使用 mat4 对矩形进行矩阵转换。\n * @method transformMat4\n * @param out {Rect} The output rect\n * @param mat {Mat4} The matrix4\n */\n transformMat4 (out: Rect, mat: Mat4): Rect {\n let ol = this.x;\n let ob = this.y;\n let or = ol + this.width;\n let ot = ob + this.height;\n let matm = mat.m;\n let lbx = matm[0] * ol + matm[4] * ob + matm[12];\n let lby = matm[1] * ol + matm[5] * ob + matm[13];\n let rbx = matm[0] * or + matm[4] * ob + matm[12];\n let rby = matm[1] * or + matm[5] * ob + matm[13];\n let ltx = matm[0] * ol + matm[4] * ot + matm[12];\n let lty = matm[1] * ol + matm[5] * ot + matm[13];\n let rtx = matm[0] * or + matm[4] * ot + matm[12];\n let rty = matm[1] * or + matm[5] * ot + matm[13];\n\n let minX = Math.min(lbx, rbx, ltx, rtx);\n let maxX = Math.max(lbx, rbx, ltx, rtx);\n let minY = Math.min(lby, rby, lty, rty);\n let maxY = Math.max(lby, rby, lty, rty);\n\n out.x = minX;\n out.y = minY;\n out.width = maxX - minX;\n out.height = maxY - minY;\n return out;\n }\n\n /**\n * !#en Output rect informations to string\n * !#zh 转换为方便阅读的字符串\n * @method toString\n * @return {String}\n * @example\n * var a = new cc.Rect(0, 0, 10, 10);\n * a.toString();// \"(0.00, 0.00, 10.00, 10.00)\";\n */\n toString (): string {\n return '(' + this.x.toFixed(2) + ', ' + this.y.toFixed(2) + ', ' + this.width.toFixed(2) +\n ', ' + this.height.toFixed(2) + ')';\n }\n\n /**\n * !#en The minimum x value, equals to rect.x\n * !#zh 矩形 x 轴上的最小值,等价于 rect.x。\n * @property xMin\n * @type {Number}\n */\n get xMin () {\n return this.x;\n }\n set xMin (v) {\n this.width += this.x - v;\n this.x = v;\n }\n\n /**\n * !#en The minimum y value, equals to rect.y\n * !#zh 矩形 y 轴上的最小值。\n * @property yMin\n * @type {Number}\n */\n get yMin () {\n return this.y;\n }\n set yMin (v) {\n this.height += this.y - v;\n this.y = v;\n }\n\n\n /**\n * !#en The maximum x value.\n * !#zh 矩形 x 轴上的最大值。\n * @property xMax\n * @type {Number}\n */\n get xMax () {\n return this.x + this.width;\n }\n set xMax (value) {\n this.width = value - this.x;\n }\n\n /**\n * !#en The maximum y value.\n * !#zh 矩形 y 轴上的最大值。\n * @property yMax\n * @type {Number}\n */\n get yMax () {\n return this.y + this.height;\n }\n set yMax (value) {\n this.height = value - this.y;\n }\n\n /**\n * !#en The position of the center of the rectangle.\n * !#zh 矩形的中心点。\n * @property {Vec2} center\n */\n get center () {\n return new Vec2(this.x + this.width * 0.5,\n this.y + this.height * 0.5);\n }\n set center (value) {\n this.x = value.x - this.width * 0.5;\n this.y = value.y - this.height * 0.5;\n }\n\n /**\n * !#en The X and Y position of the rectangle.\n * !#zh 矩形的 x 和 y 坐标。\n * @property {Vec2} origin\n */\n get origin () {\n return new Vec2(this.x, this.y);\n }\n set origin (value) {\n this.x = value.x;\n this.y = value.y;\n }\n\n /**\n * !#en Width and height of the rectangle.\n * !#zh 矩形的大小。\n * @property {Size} size\n */\n get size () {\n return new Size(this.width, this.height);\n }\n set size (value) {\n this.width = value.width;\n this.height = value.height;\n }\n}\n\nCCClass.fastDefine('cc.Rect', Rect, { x: 0, y: 0, width: 0, height: 0 });\ncc.Rect = Rect;\n\n\n/**\n * @module cc\n */\n\n/**\n * !#en\n * The convenience method to create a new Rect.\n * see {{#crossLink \"Rect/Rect:method\"}}cc.Rect{{/crossLink}}\n * !#zh\n * 该方法用来快速创建一个新的矩形。{{#crossLink \"Rect/Rect:method\"}}cc.Rect{{/crossLink}}\n * @method rect\n * @param {Number} [x=0]\n * @param {Number} [y=0]\n * @param {Number} [w=0]\n * @param {Number} [h=0]\n * @return {Rect}\n * @example\n * var a = new cc.Rect(0 , 0, 10, 0);\n */\ncc.rect = function rect (x, y, w, h) {\n return new Rect(x, y, w, h);\n};\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport ValueType from './value-type';\nimport CCClass from '../platform/CCClass';\n\n/**\n * !#en\n * cc.Size is the class for size object,
\n * please do not use its constructor to create sizes,
\n * use {{#crossLink \"cc/size:method\"}}{{/crossLink}} alias function instead.
\n * It will be deprecated soon, please use cc.Vec2 instead.\n *\n * !#zh\n * cc.Size 是 size 对象的类。
\n * 请不要使用它的构造函数创建的 size,
\n * 使用 {{#crossLink \"cc/size:method\"}}{{/crossLink}} 别名函数。
\n * 它不久将被取消,请使用cc.Vec2代替。\n *\n * @class Size\n */\n/**\n * @method constructor\n * @param {Number|Size} width\n * @param {Number} [height]\n */\nexport default class Size extends ValueType {\n\n /**\n * !#en return a Size object with width = 0 and height = 0.\n * !#zh 返回一个宽度为 0 和高度为 0 的 Size 对象。\n * @property ZERO\n * @type {Size}\n * @default new Size(0, 0)\n * @static\n */\n static get ZERO () { return new Size(); }\n static readonly ZERO_R = Size.ZERO;\n\n /**\n * @property {Number} width\n */\n width: number;\n /**\n * @property {Number} height\n */\n height: number;\n\n constructor (width: Size | number = 0, height: number = 0) {\n super();\n if (width && typeof width === 'object') {\n this.width = width.width;\n this.height = width.height;\n }\n else {\n this.width = width as number || 0;\n this.height = height || 0;\n }\n }\n\n /**\n * !#en TODO\n * !#zh 克隆 size 对象。\n * @method clone\n * @return {Size}\n * @example\n * var a = new cc.size(10, 10);\n * a.clone();// return Size {width: 0, height: 0};\n */\n clone (): Size {\n return new Size(this.width, this.height);\n }\n\n /**\n * !#en TODO\n * !#zh 当前 Size 对象是否等于指定 Size 对象。\n * @method equals\n * @param {Size} other\n * @return {Boolean}\n * @example\n * var a = new cc.size(10, 10);\n * a.equals(new cc.size(10, 10));// return true;\n */\n equals (other: Size): boolean {\n return other &&\n this.width === other.width &&\n this.height === other.height;\n }\n\n /**\n * !#en TODO\n * !#zh 线性插值。\n * @method lerp\n * @param {Rect} to\n * @param {Number} ratio - the interpolation coefficient.\n * @param {Size} [out] - optional, the receiving vector.\n * @return {Size}\n * @example\n * var a = new cc.size(10, 10);\n * var b = new cc.rect(50, 50, 100, 100);\n * update (dt) {\n * // method 1;\n * var c = a.lerp(b, dt * 0.1);\n * // method 2;\n * a.lerp(b, dt * 0.1, c);\n * }\n */\n lerp (to: Size, ratio: number, out?: Size): Size {\n out = out || new Size();\n var width = this.width;\n var height = this.height;\n out.width = width + (to.width - width) * ratio;\n out.height = height + (to.height - height) * ratio;\n return out;\n }\n\n set (source): Size {\n this.width = source.width;\n this.height = source.height;\n return this;\n }\n\n /**\n * !#en TODO\n * !#zh 转换为方便阅读的字符串。\n * @method toString\n * @return {String}\n * @example\n * var a = new cc.size(10, 10);\n * a.toString();// return \"(10.00, 10.00)\";\n */\n toString (): string {\n return '(' + this.width.toFixed(2) + ', ' + this.height.toFixed(2) + ')';\n }\n}\n\nCCClass.fastDefine('cc.Size', Size, { width: 0, height: 0 });\n\n\n/**\n * @module cc\n */\n\n/**\n * !#en\n * Helper function that creates a cc.Size.
\n * Please use cc.p or cc.v2 instead, it will soon replace cc.Size.\n * !#zh\n * 创建一个 cc.Size 对象的帮助函数。
\n * 注意:可以使用 cc.p 或者是 cc.v2 代替,它们将很快取代 cc.Size。\n * @method size\n * @param {Number|Size} w - width or a size object\n * @param {Number} [h] - height\n * @return {Size}\n * @example {@link cocos2d/core/value-types/CCSize/size.js}\n */\ncc.size = function (w, h) {\n return new Size(w, h);\n};\n\ncc.Size = Size;\n","\nimport Quat from './quat';\nimport Vec3 from './vec3';\nimport Mat4 from './Mat4';\n\nlet tmp_quat = new Quat();\n\nexport default class Trs {\n static toRotation (out: Quat, a: FloatArray): Quat {\n out.x = a[3];\n out.y = a[4];\n out.z = a[5];\n out.w = a[6];\n return out;\n }\n\n static fromRotation (out: FloatArray, a: Quat): FloatArray {\n out[3] = a.x;\n out[4] = a.y;\n out[5] = a.z;\n out[6] = a.w;\n return out;\n }\n\n static toEuler (out: Vec3, a: FloatArray): Vec3 {\n Trs.toRotation(tmp_quat, a);\n Quat.toEuler(out, tmp_quat);\n return out;\n }\n\n static fromEuler (out: FloatArray, a: Vec3): FloatArray {\n Quat.fromEuler(tmp_quat, a.x, a.y, a.z);\n Trs.fromRotation(out, tmp_quat);\n return out;\n }\n\n static fromEulerNumber (out: FloatArray, x: number, y: number, z: number): FloatArray {\n Quat.fromEuler(tmp_quat, x, y, z);\n Trs.fromRotation(out, tmp_quat);\n return out;\n }\n\n static toScale (out: Vec3, a: FloatArray): Vec3 {\n out.x = a[7];\n out.y = a[8];\n out.z = a[9];\n return out;\n }\n\n static fromScale (out: FloatArray, a: Vec3): FloatArray {\n out[7] = a.x;\n out[8] = a.y;\n out[9] = a.z;\n return out;\n }\n\n static toPosition (out: Vec3, a: FloatArray): Vec3 {\n out.x = a[0];\n out.y = a[1];\n out.z = a[2];\n return out;\n }\n\n static fromPosition (out: FloatArray, a: Vec3): FloatArray {\n out[0] = a.x;\n out[1] = a.y;\n out[2] = a.z;\n return out;\n }\n\n static fromAngleZ (out: FloatArray, a: number): FloatArray {\n Quat.fromAngleZ(tmp_quat, a);\n Trs.fromRotation(out, tmp_quat);\n return out;\n }\n\n static toMat4 (out: Mat4, trs: FloatArray): Mat4 {\n let x = trs[3], y = trs[4], z = trs[5], w = trs[6];\n let x2 = x + x;\n let y2 = y + y;\n let z2 = z + z;\n\n let xx = x * x2;\n let xy = x * y2;\n let xz = x * z2;\n let yy = y * y2;\n let yz = y * z2;\n let zz = z * z2;\n let wx = w * x2;\n let wy = w * y2;\n let wz = w * z2;\n let sx = trs[7];\n let sy = trs[8];\n let sz = trs[9];\n\n let m = out.m;\n m[0] = (1 - (yy + zz)) * sx;\n m[1] = (xy + wz) * sx;\n m[2] = (xz - wy) * sx;\n m[3] = 0;\n m[4] = (xy - wz) * sy;\n m[5] = (1 - (xx + zz)) * sy;\n m[6] = (yz + wx) * sy;\n m[7] = 0;\n m[8] = (xz + wy) * sz;\n m[9] = (yz - wx) * sz;\n m[10] = (1 - (xx + yy)) * sz;\n m[11] = 0;\n m[12] = trs[0];\n m[13] = trs[1];\n m[14] = trs[2];\n m[15] = 1;\n\n return out;\n }\n}\n\ncc.Trs = Trs;","/**\n * @ignore\n */\nconst _d2r = Math.PI / 180.0;\n/**\n * @ignore\n */\nconst _r2d = 180.0 / Math.PI;\n\n/**\n * @property {number} EPSILON\n */\nexport const EPSILON = 0.000001;\n\n// Number of bits in an integer\nexport const INT_BITS = 32;\nexport const INT_MAX = 0x7fffffff;\nexport const INT_MIN = -1 << (INT_BITS - 1);\n\n/**\n * Use single-precision floating point on native platforms to be compatible with native math libraries.\n * Double precision floating point is used on Web platforms and editors to reduce the overhead of type conversion.\n */\nexport const FLOAT_ARRAY_TYPE = (CC_JSB && CC_NATIVERENDERER) ? Float32Array : Float64Array;\nexport const FLOAT_BYTES = (CC_JSB && CC_NATIVERENDERER) ? 4 : 8;\n\n/**\n * Tests whether or not the arguments have approximately the same value, within an absolute\n * or relative tolerance of glMatrix.EPSILON (an absolute tolerance is used for values less\n * than or equal to 1.0, and a relative tolerance is used for larger values)\n *\n * @param {Number} a The first number to test.\n * @param {Number} b The second number to test.\n * @returns {Boolean} True if the numbers are approximately equal, false otherwise.\n */\nexport function equals(a, b) {\n return Math.abs(a - b) <= EPSILON * Math.max(1.0, Math.abs(a), Math.abs(b));\n}\n\n/**\n * Tests whether or not the arguments have approximately the same value by given maxDiff\n *\n * @param {Number} a The first number to test.\n * @param {Number} b The second number to test.\n * @param {Number} maxDiff Maximum difference.\n * @returns {Boolean} True if the numbers are approximately equal, false otherwise.\n */\nexport function approx(a, b, maxDiff) {\n maxDiff = maxDiff || EPSILON;\n return Math.abs(a - b) <= maxDiff;\n}\n\n/**\n * Clamps a value between a minimum float and maximum float value.\n *\n * @method clamp\n * @param {number} val\n * @param {number} min\n * @param {number} max\n * @return {number}\n */\nexport function clamp(val, min, max) {\n return val < min ? min : val > max ? max : val;\n}\n\n/**\n * Clamps a value between 0 and 1.\n *\n * @method clamp01\n * @param {number} val\n * @return {number}\n */\nexport function clamp01(val) {\n return val < 0 ? 0 : val > 1 ? 1 : val;\n}\n\n/**\n * @method lerp\n * @param {number} from\n * @param {number} to\n * @param {number} ratio - the interpolation coefficient\n * @return {number}\n */\nexport function lerp(from, to, ratio) {\n return from + (to - from) * ratio;\n}\n\n/**\n* Convert Degree To Radian\n*\n* @param {Number} a Angle in Degrees\n*/\nexport function toRadian(a) {\n return a * _d2r;\n}\n\n/**\n* Convert Radian To Degree\n*\n* @param {Number} a Angle in Radian\n*/\nexport function toDegree(a) {\n return a * _r2d;\n}\n\n/**\n* @method random\n*/\nexport const random = Math.random;\n\n/**\n * Returns a floating-point random number between min (inclusive) and max (exclusive).\n *\n * @method randomRange\n * @param {number} min\n * @param {number} max\n * @return {number} the random number\n */\nexport function randomRange(min, max) {\n return Math.random() * (max - min) + min;\n}\n\n/**\n * Returns a random integer between min (inclusive) and max (exclusive).\n *\n * @method randomRangeInt\n * @param {number} min\n * @param {number} max\n * @return {number} the random integer\n */\nexport function randomRangeInt(min, max) {\n return Math.floor(randomRange(min, max));\n}\n\n/**\n * Linear congruential generator using Hull-Dobell Theorem.\n *\n * @method pseudoRandom\n * @param {number} seed the random seed\n * @return {number} the pseudo random\n */\nexport function pseudoRandom(seed) {\n seed = (seed * 9301 + 49297) % 233280;\n return seed / 233280.0;\n}\n\n/**\n * Returns a floating-point pseudo-random number between min (inclusive) and max (exclusive).\n *\n * @method pseudoRandomRange\n * @param {number} seed\n * @param {number} min\n * @param {number} max\n * @return {number} the random number\n */\nexport function pseudoRandomRange(seed, min, max) {\n return pseudoRandom(seed) * (max - min) + min;\n}\n\n/**\n * Returns a pseudo-random integer between min (inclusive) and max (exclusive).\n *\n * @method pseudoRandomRangeInt\n * @param {number} seed\n * @param {number} min\n * @param {number} max\n * @return {number} the random integer\n */\nexport function pseudoRandomRangeInt(seed, min, max) {\n return Math.floor(pseudoRandomRange(seed, min, max));\n}\n\n/**\n * Returns the next power of two for the value\n *\n * @method nextPow2\n * @param {number} val\n * @return {number} the the next power of two\n */\nexport function nextPow2(val) {\n --val;\n val = (val >> 1) | val;\n val = (val >> 2) | val;\n val = (val >> 4) | val;\n val = (val >> 8) | val;\n val = (val >> 16) | val;\n ++val;\n\n return val;\n}\n\n/**\n * Returns float remainder for t / length\n *\n * @method repeat\n * @param {number} t time start at 0\n * @param {number} length time of one cycle\n * @return {number} the time wrapped in the first cycle\n */\nexport function repeat(t, length) {\n return t - Math.floor(t / length) * length;\n}\n\n/**\n * Returns time wrapped in ping-pong mode\n *\n * @method repeat\n * @param {number} t time start at 0\n * @param {number} length time of one cycle\n * @return {number} the time wrapped in the first cycle\n */\nexport function pingPong(t, length) {\n t = repeat(t, length * 2);\n t = length - Math.abs(t - length);\n return t;\n}\n\n/**\n * Returns ratio of a value within a given range\n *\n * @method repeat\n * @param {number} from start value\n * @param {number} to end value\n * @param {number} value given value\n * @return {number} the ratio between [from,to]\n */\nexport function inverseLerp(from, to, value) {\n return (value - from) / (to - from);\n}\n\n/**\n * Returns -1, 0, +1 depending on sign of x.\n * \n * @method sign\n * @param {number} v\n */\nexport function sign (v) {\n return (v > 0) - (v < 0);\n}","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport js from '../platform/js';\n\n/**\n * !#en The base class of all value types.\n * !#zh 所有值类型的基类。\n * @class ValueType\n *\n */\nexport default class ValueType {\n /**\n * !#en This method returns an exact copy of current value.\n * !#zh 克隆当前值,该方法返回一个新对象,新对象的值和原对象相等。\n * @method clone\n * @return {ValueType}\n */\n clone () : ValueType {\n cc.errorID('0100', js.getClassName(this) + '.clone');\n // @ts-ignore\n return null;\n }\n\n /**\n * !#en Compares this object with the other one.\n * !#zh 当前对象是否等于指定对象。\n * @method equals\n * @param {ValueType} other\n * @return {Boolean}\n */\n equals (other) {\n cc.errorID('0100', js.getClassName(this) + '.equals');\n return false;\n }\n\n /**\n * !#en\n * Linearly interpolates between this value to to value by ratio which is in the range [0, 1].\n * When ratio = 0 returns this. When ratio = 1 return to. When ratio = 0.5 returns the average of this and to.\n * !#zh\n * 线性插值。
\n * 当 ratio = 0 时返回自身,ratio = 1 时返回目标,ratio = 0.5 返回自身和目标的平均值。。\n * @method lerp\n * @param {ValueType} to - the to value\n * @param {number} ratio - the interpolation coefficient\n * @return {ValueType}\n */\n lerp (to, ratio) {\n cc.errorID('0100', js.getClassName(this) + '.lerp');\n return this.clone();\n }\n\n /**\n * !#en\n * Copys all the properties from another given object to this value.\n * !#zh\n * 从其它对象把所有属性复制到当前对象。\n * @method set\n * @param {ValueType} source - the source to copy\n */\n set (source) {\n cc.errorID('0100', js.getClassName(this) + '.set');\n }\n\n /**\n * !#en Convert to a readable string.\n * !#zh 转换为方便阅读的字符串。\n * @method toString\n * @return {string}\n */\n toString () {\n return '' + {};\n }\n}\n\njs.setClassName('cc.ValueType', ValueType);\ncc.ValueType = ValueType;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport ValueType from './value-type';\nimport Mat4 from './mat4';\nimport CCClass from '../platform/CCClass';\nimport misc from '../utils/misc';\nimport { EPSILON, random } from './utils';\n\nlet _x: number = 0.0;\nlet _y: number = 0.0;\n\n/**\n * !#en Representation of 2D vectors and points.\n * !#zh 表示 2D 向量和坐标\n *\n * @class Vec2\n * @extends ValueType\n */\n\nexport default class Vec2 extends ValueType {\n // deprecated\n static sub = Vec2.subtract;\n static mul = Vec2.multiply;\n static scale = Vec2.multiplyScalar;\n static mag = Vec2.len;\n static squaredMagnitude = Vec2.lengthSqr;\n static div = Vec2.divide;\n /**\n * !#en Returns the length of this vector.\n * !#zh 返回该向量的长度。\n * @method mag\n * @return {number} the result\n * @example\n * var v = cc.v2(10, 10);\n * v.mag(); // return 14.142135623730951;\n */\n mag = Vec2.prototype.len;\n /**\n * !#en Returns the squared length of this vector.\n * !#zh 返回该向量的长度平方。\n * @method magSqr\n * @return {number} the result\n * @example\n * var v = cc.v2(10, 10);\n * v.magSqr(); // return 200;\n */\n magSqr = Vec2.prototype.lengthSqr;\n /**\n * !#en Subtracts one vector from this. If you want to save result to another vector, use sub() instead.\n * !#zh 向量减法。如果你想保存结果到另一个向量,可使用 sub() 代替。\n * @method subSelf\n * @param {Vec2} vector\n * @return {Vec2} returns this\n * @chainable\n * @example\n * var v = cc.v2(10, 10);\n * v.subSelf(cc.v2(5, 5));// return Vec2 {x: 5, y: 5};\n */\n subSelf = Vec2.prototype.subtract;\n /**\n * !#en Subtracts one vector from this, and returns the new result.\n * !#zh 向量减法,并返回新结果。\n * @method sub\n * @param {Vec2} vector\n * @param {Vec2} [out] - optional, the receiving vector, you can pass the same vec2 to save result to itself, if not provided, a new vec2 will be created\n * @return {Vec2} the result\n * @example\n * var v = cc.v2(10, 10);\n * v.sub(cc.v2(5, 5)); // return Vec2 {x: 5, y: 5};\n * var v1 = new Vec2;\n * v.sub(cc.v2(5, 5), v1); // return Vec2 {x: 5, y: 5};\n */\n sub (vector: Vec2, out?: Vec2): Vec2 {\n return Vec2.subtract(out || new Vec2(), this, vector);\n }\n /**\n * !#en Multiplies this by a number. If you want to save result to another vector, use mul() instead.\n * !#zh 缩放当前向量。如果你想结果保存到另一个向量,可使用 mul() 代替。\n * @method mulSelf\n * @param {number} num\n * @return {Vec2} returns this\n * @chainable\n * @example\n * var v = cc.v2(10, 10);\n * v.mulSelf(5);// return Vec2 {x: 50, y: 50};\n */\n mulSelf = Vec2.prototype.multiplyScalar;\n /**\n * !#en Multiplies by a number, and returns the new result.\n * !#zh 缩放向量,并返回新结果。\n * @method mul\n * @param {number} num\n * @param {Vec2} [out] - optional, the receiving vector, you can pass the same vec2 to save result to itself, if not provided, a new vec2 will be created\n * @return {Vec2} the result\n * @example\n * var v = cc.v2(10, 10);\n * v.mul(5); // return Vec2 {x: 50, y: 50};\n * var v1 = new Vec2;\n * v.mul(5, v1); // return Vec2 {x: 50, y: 50};\n */\n mul (num: number, out?: Vec2): Vec2 {\n return Vec2.multiplyScalar(out || new Vec2(), this, num);\n }\n /**\n * !#en Divides by a number. If you want to save result to another vector, use div() instead.\n * !#zh 向量除法。如果你想结果保存到另一个向量,可使用 div() 代替。\n * @method divSelf\n * @param {number} num\n * @return {Vec2} returns this\n * @chainable\n * @example\n * var v = cc.v2(10, 10);\n * v.divSelf(5); // return Vec2 {x: 2, y: 2};\n */\n divSelf = Vec2.prototype.divide;\n /**\n * !#en Divides by a number, and returns the new result.\n * !#zh 向量除法,并返回新的结果。\n * @method div\n * @param {number} num\n * @param {Vec2} [out] - optional, the receiving vector, you can pass the same vec2 to save result to itself, if not provided, a new vec2 will be created\n * @return {Vec2} the result\n * @example\n * var v = cc.v2(10, 10);\n * v.div(5); // return Vec2 {x: 2, y: 2};\n * var v1 = new Vec2;\n * v.div(5, v1); // return Vec2 {x: 2, y: 2};\n */\n div (num: number, out?: Vec2): Vec2 {\n return Vec2.multiplyScalar(out || new Vec2(), this, 1/num);\n }\n /**\n * !#en Multiplies two vectors.\n * !#zh 分量相乘。\n * @method scaleSelf\n * @param {Vec2} vector\n * @return {Vec2} returns this\n * @chainable\n * @example\n * var v = cc.v2(10, 10);\n * v.scaleSelf(cc.v2(5, 5));// return Vec2 {x: 50, y: 50};\n */\n scaleSelf = Vec2.prototype.multiply;\n /**\n * !#en Multiplies two vectors, and returns the new result.\n * !#zh 分量相乘,并返回新的结果。\n * @method scale\n * @param {Vec2} vector\n * @param {Vec2} [out] - optional, the receiving vector, you can pass the same vec2 to save result to itself, if not provided, a new vec2 will be created\n * @return {Vec2} the result\n * @example\n * var v = cc.v2(10, 10);\n * v.scale(cc.v2(5, 5)); // return Vec2 {x: 50, y: 50};\n * var v1 = new Vec2;\n * v.scale(cc.v2(5, 5), v1); // return Vec2 {x: 50, y: 50};\n */\n scale (vector: Vec2, out?: Vec2): Vec2 {\n return Vec2.multiply(out || new Vec2(), this, vector);\n }\n /**\n * !#en Negates the components. If you want to save result to another vector, use neg() instead.\n * !#zh 向量取反。如果你想结果保存到另一个向量,可使用 neg() 代替。\n * @method negSelf\n * @return {Vec2} returns this\n * @chainable\n * @example\n * var v = cc.v2(10, 10);\n * v.negSelf(); // return Vec2 {x: -10, y: -10};\n */\n negSelf = Vec2.prototype.negate;\n /**\n * !#en Negates the components, and returns the new result.\n * !#zh 返回取反后的新向量。\n * @method neg\n * @param {Vec2} [out] - optional, the receiving vector, you can pass the same vec2 to save result to itself, if not provided, a new vec2 will be created\n * @return {Vec2} the result\n * @example\n * var v = cc.v2(10, 10);\n * var v1 = new Vec2;\n * v.neg(v1); // return Vec2 {x: -10, y: -10};\n */\n neg (out?: Vec2): Vec2 {\n return Vec2.negate(out || new Vec2(), this);\n }\n\n /**\n * !#en return a Vec2 object with x = 1 and y = 1.\n * !#zh 新 Vec2 对象。\n * @property ONE\n * @type Vec2\n * @static\n */\n static get ONE () { return new Vec2(1, 1) };\n static readonly ONE_R = Vec2.ONE;\n\n /**\n * !#en return a Vec2 object with x = 0 and y = 0.\n * !#zh 返回 x = 0 和 y = 0 的 Vec2 对象。\n * @property {Vec2} ZERO\n * @static\n */\n static get ZERO () { return new Vec2(0, 0) };\n /**\n * !#en return a readonly Vec2 object with x = 0 and y = 0.\n * !#zh 返回一个 x = 0 和 y = 0 的 Vec2 只读对象。\n * @property {Vec2} ZERO_R\n * @readonly\n * @static\n */\n static readonly ZERO_R = Vec2.ZERO;\n\n /**\n * !#en return a Vec2 object with x = 0 and y = 1.\n * !#zh 返回 x = 0 和 y = 1 的 Vec2 对象。\n * @property {Vec2} UP\n * @static\n */\n static get UP () { return new Vec2(0, 1) };\n /**\n * !#en return a readonly Vec2 object with x = 0 and y = 1.\n * !#zh 返回 x = 0 和 y = 1 的 Vec2 只读对象。\n * @property {Vec2} UP_R\n * @static\n * @readonly\n */\n static readonly UP_R = Vec2.UP;\n\n /**\n * !#en return a readonly Vec2 object with x = 1 and y = 0.\n * !#zh 返回 x = 1 和 y = 0 的 Vec2 只读对象。\n * @property {Vec2} RIGHT\n * @static\n */\n static get RIGHT () { return new Vec2(1, 0) };\n /**\n * !#en return a Vec2 object with x = 1 and y = 0.\n * !#zh 返回 x = 1 和 y = 0 的 Vec2 对象。\n * @property {Vec2} RIGHT_R\n * @static\n * @readonly\n */\n static readonly RIGHT_R = Vec2.RIGHT;\n\n /**\n * !#zh 获得指定向量的拷贝\n * @method clone\n * @typescript\n * clone (a: Out): Vec2\n * @static\n */\n static clone (a: Out) {\n return new Vec2(a.x, a.y);\n }\n\n /**\n * !#zh 复制指定向量的值\n * @method copy\n * @typescript\n * copy (out: Out, a: Out): Out\n * @static\n */\n static copy (out: Out, a: Out) {\n out.x = a.x;\n out.y = a.y;\n return out;\n }\n\n /**\n * !#zh 设置向量值\n * @method set\n * @typescript\n * set (out: Out, x: number, y: number): Out\n * @static\n */\n static set (out: Out, x: number, y: number) {\n out.x = x;\n out.y = y;\n return out;\n }\n\n /**\n * !#zh 逐元素向量加法\n * @method add\n * @typescript\n * add (out: Out, a: Out, b: Out): Out\n * @static\n */\n static add (out: Out, a: Out, b: Out) {\n out.x = a.x + b.x;\n out.y = a.y + b.y;\n return out;\n }\n\n /**\n * !#zh 逐元素向量减法\n * @method subtract\n * @typescript\n * subtract (out: Out, a: Out, b: Out): Out\n * @static\n */\n static subtract (out: Out, a: Out, b: Out) {\n out.x = a.x - b.x;\n out.y = a.y - b.y;\n return out;\n }\n\n /**\n * !#zh 逐元素向量乘法\n * @method multiply\n * @typescript\n * multiply (out: Out, a: Out, b: Out): Out\n * @static\n */\n static multiply (out: Out, a: Out, b: Out) {\n out.x = a.x * b.x;\n out.y = a.y * b.y;\n return out;\n }\n\n /**\n * !#zh 逐元素向量除法\n * @method divide\n * @typescript\n * divide (out: Out, a: Out, b: Out): Out\n * @static\n */\n static divide (out: Out, a: Out, b: Out) {\n out.x = a.x / b.x;\n out.y = a.y / b.y;\n return out;\n }\n\n /**\n * !#zh 逐元素向量向上取整\n * @method ceil\n * @typescript\n * ceil (out: Out, a: Out): Out\n * @static\n */\n static ceil (out: Out, a: Out) {\n out.x = Math.ceil(a.x);\n out.y = Math.ceil(a.y);\n return out;\n }\n\n /**\n * !#zh 逐元素向量向下取整\n * @method floor\n * @typescript\n * floor (out: Out, a: Out): Out\n * @static\n */\n static floor (out: Out, a: Out) {\n out.x = Math.floor(a.x);\n out.y = Math.floor(a.y);\n return out;\n }\n\n /**\n * !#zh 逐元素向量最小值\n * @method min\n * @typescript\n * min (out: Out, a: Out, b: Out): Out\n * @static\n */\n static min (out: Out, a: Out, b: Out) {\n out.x = Math.min(a.x, b.x);\n out.y = Math.min(a.y, b.y);\n return out;\n }\n\n\n /**\n * !#zh 逐元素向量最大值\n * @method max\n * @typescript\n * max (out: Out, a: Out, b: Out): Out\n * @static\n */\n static max (out: Out, a: Out, b: Out) {\n out.x = Math.max(a.x, b.x);\n out.y = Math.max(a.y, b.y);\n return out;\n }\n\n /**\n * !#zh 逐元素向量四舍五入取整\n * @method round\n * @typescript\n * round (out: Out, a: Out): Out\n * @static\n */\n static round (out: Out, a: Out) {\n out.x = Math.round(a.x);\n out.y = Math.round(a.y);\n return out;\n }\n\n /**\n * !#zh 向量标量乘法\n * @method multiplyScalar\n * @typescript\n * multiplyScalar (out: Out, a: Out, b: number): Out\n * @static\n */\n static multiplyScalar (out: Out, a: Out, b: number) {\n out.x = a.x * b;\n out.y = a.y * b;\n return out;\n }\n\n /**\n * !#zh 逐元素向量乘加: A + B * scale\n * @method scaleAndAdd\n * @typescript\n * scaleAndAdd (out: Out, a: Out, b: Out, scale: number): Out\n * @static\n */\n static scaleAndAdd (out: Out, a: Out, b: Out, scale: number) {\n out.x = a.x + (b.x * scale);\n out.y = a.y + (b.y * scale);\n return out;\n }\n\n /**\n * !#zh 求两向量的欧氏距离\n * @method distance\n * @typescript\n * distance (a: Out, b: Out): number\n * @static\n */\n static distance (a: Out, b: Out) {\n _x = b.x - a.x;\n _y = b.y - a.y;\n return Math.sqrt(_x * _x + _y * _y);\n }\n\n /**\n * !#zh 求两向量的欧氏距离平方\n * @method squaredDistance\n * @typescript\n * squaredDistance (a: Out, b: Out): number\n * @static\n */\n static squaredDistance (a: Out, b: Out) {\n _x = b.x - a.x;\n _y = b.y - a.y;\n return _x * _x + _y * _y;\n }\n\n /**\n * !#zh 求向量长度\n * @method len\n * @typescript\n * len (a: Out): number\n * @static\n */\n static len (a: Out) {\n _x = a.x;\n _y = a.y;\n return Math.sqrt(_x * _x + _y * _y);\n }\n\n /**\n * !#zh 求向量长度平方\n * @method lengthSqr\n * @typescript\n * lengthSqr (a: Out): number\n * @static\n */\n static lengthSqr (a: Out) {\n _x = a.x;\n _y = a.y;\n return _x * _x + _y * _y;\n }\n\n /**\n * !#zh 逐元素向量取负\n * @method negate\n * @typescript\n * negate (out: Out, a: Out): Out\n * @static\n */\n static negate (out: Out, a: Out) {\n out.x = -a.x;\n out.y = -a.y;\n return out;\n }\n\n /**\n * !#zh 逐元素向量取倒数,接近 0 时返回 Infinity\n * @method inverse\n * @typescript\n * inverse (out: Out, a: Out): Out\n * @static\n */\n static inverse (out: Out, a: Out) {\n out.x = 1.0 / a.x;\n out.y = 1.0 / a.y;\n return out;\n }\n\n /**\n * !#zh 逐元素向量取倒数,接近 0 时返回 0\n * @method inverseSafe\n * @typescript\n * inverseSafe (out: Out, a: Out): Out\n * @static\n */\n static inverseSafe (out: Out, a: Out) {\n _x = a.x;\n _y = a.y;\n\n if (Math.abs(_x) < EPSILON) {\n out.x = 0;\n } else {\n out.x = 1.0 / _x;\n }\n\n if (Math.abs(_y) < EPSILON) {\n out.y = 0;\n } else {\n out.y = 1.0 / _y;\n }\n\n return out;\n }\n\n /**\n * !#zh 归一化向量\n * @method normalize\n * @typescript\n * normalize (out: Out, a: Vec2Like): Out\n * @static\n */\n static normalize (out: Out, a: Vec2Like) {\n _x = a.x;\n _y = a.y;\n let len = _x * _x + _y * _y;\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n out.x = _x * len;\n out.y = _y * len;\n }\n return out;\n }\n\n /**\n * !#zh 向量点积(数量积)\n * @method dot\n * @typescript\n * dot (a: Out, b: Out): number\n * @static\n */\n static dot (a: Out, b: Out) {\n return a.x * b.x + a.y * b.y;\n }\n\n /**\n * !#zh 向量叉积(向量积),注意二维向量的叉积为与 Z 轴平行的三维向量\n * @method cross\n * @typescript\n * cross (out: Vec2, a: Out, b: Out): Vec2\n * @static\n */\n static cross (out: Vec2, a: Out, b: Out) {\n out.x = out.y = 0;\n out.z = a.x * b.y - a.y * b.x;\n return out;\n }\n\n /**\n * !#zh 逐元素向量线性插值: A + t * (B - A)\n * @method lerp\n * @typescript\n * lerp (out: Out, a: Out, b: Out, t: number): Out\n * @static\n */\n static lerp (out: Out, a: Out, b: Out, t: number) {\n _x = a.x;\n _y = a.y;\n out.x = _x + t * (b.x - _x);\n out.y = _y + t * (b.y - _y);\n return out;\n }\n\n /**\n * !#zh 生成一个在单位圆上均匀分布的随机向量\n * @method random\n * @typescript\n * random (out: Out, scale?: number): Out\n * @static\n */\n static random (out: Out, scale?: number) {\n scale = scale || 1.0;\n const r = random() * 2.0 * Math.PI;\n out.x = Math.cos(r) * scale;\n out.y = Math.sin(r) * scale;\n return out;\n }\n\n /**\n * !#zh 向量与三维矩阵乘法,默认向量第三位为 1。\n * @method transformMat3\n * @typescript\n * transformMat3 (out: Out, a: Out, mat: IMat3Like): Out\n * @static\n */\n static transformMat3 (out: Out, a: Out, mat: MatLike) {\n _x = a.x;\n _y = a.y;\n let m = mat.m;\n out.x = m[0] * _x + m[3] * _y + m[6];\n out.y = m[1] * _x + m[4] * _y + m[7];\n return out;\n }\n\n /**\n * !#zh 向量与四维矩阵乘法,默认向量第三位为 0,第四位为 1。\n * @method transformMat4\n * @typescript\n * transformMat4 (out: Out, a: Out, mat: MatLike): Out\n * @static\n */\n static transformMat4 (out: Out, a: Out, mat: MatLike) {\n _x = a.x;\n _y = a.y;\n let m = mat.m;\n out.x = m[0] * _x + m[4] * _y + m[12];\n out.y = m[1] * _x + m[5] * _y + m[13];\n return out;\n }\n\n /**\n * !#zh 向量等价判断\n * @method strictEquals\n * @typescript\n * strictEquals (a: Out, b: Out): boolean\n * @static\n */\n static strictEquals (a: Out, b: Out) {\n return a.x === b.x && a.y === b.y;\n }\n\n /**\n * !#zh 排除浮点数误差的向量近似等价判断\n * @method equals\n * @typescript\n * equals (a: Out, b: Out, epsilon?: number): boolean\n * @static\n */\n static equals (a: Out, b: Out, epsilon = EPSILON) {\n return (\n Math.abs(a.x - b.x) <=\n epsilon * Math.max(1.0, Math.abs(a.x), Math.abs(b.x)) &&\n Math.abs(a.y - b.y) <=\n epsilon * Math.max(1.0, Math.abs(a.y), Math.abs(b.y))\n );\n }\n\n /**\n * !#zh 排除浮点数误差的向量近似等价判断\n * @method angle\n * @typescript\n * angle (a: Out, b: Out): number\n * @static\n */\n static angle (a: Out, b: Out) {\n Vec2.normalize(v2_1, a);\n Vec2.normalize(v2_2, b);\n const cosine = Vec2.dot(v2_1, v2_2);\n if (cosine > 1.0) {\n return 0;\n }\n if (cosine < -1.0) {\n return Math.PI;\n }\n return Math.acos(cosine);\n }\n\n /**\n * !#zh 向量转数组\n * @method toArray\n * @typescript\n * toArray > (out: Out, v: IVec2Like, ofs?: number): Out\n * @static\n */\n static toArray > (out: Out, v: IVec2Like, ofs = 0) {\n out[ofs + 0] = v.x;\n out[ofs + 1] = v.y;\n return out;\n }\n\n /**\n * !#zh 数组转向量\n * @method fromArray\n * @typescript\n * fromArray (out: Out, arr: IWritableArrayLike, ofs?: number): Out\n * @static\n */\n static fromArray (out: Out, arr: IWritableArrayLike, ofs = 0) {\n out.x = arr[ofs + 0];\n out.y = arr[ofs + 1];\n return out;\n }\n\n /**\n * @property {Number} x\n */\n x: number;\n\n /**\n * @property {Number} y\n */\n y: number;\n\n // compatible with vec3\n z: number = 0;\n\n /**\n * !#en\n * Constructor\n * see {{#crossLink \"cc/vec2:method\"}}cc.v2{{/crossLink}} or {{#crossLink \"cc/p:method\"}}cc.p{{/crossLink}}\n * !#zh\n * 构造函数,可查看 {{#crossLink \"cc/vec2:method\"}}cc.v2{{/crossLink}} 或者 {{#crossLink \"cc/p:method\"}}cc.p{{/crossLink}}\n * @method constructor\n * @param {Number} [x=0]\n * @param {Number} [y=0]\n */\n constructor (x: number | Vec2 = 0, y: number = 0) {\n super();\n\n if (x && typeof x === 'object') {\n this.x = x.x || 0;\n this.y = x.y || 0;\n } else {\n this.x = x as number || 0;\n this.y = y || 0;\n }\n }\n\n /**\n * !#en clone a Vec2 object\n * !#zh 克隆一个 Vec2 对象\n * @method clone\n * @return {Vec2}\n */\n clone (): Vec2 {\n return new Vec2(this.x, this.y);\n }\n\n /**\n * !#en Sets vector with another's value\n * !#zh 设置向量值。\n * @method set\n * @param {Vec2} newValue - !#en new value to set. !#zh 要设置的新值\n * @return {Vec2} returns this\n * @chainable\n */\n set (newValue: Vec2): this {\n this.x = newValue.x;\n this.y = newValue.y;\n return this;\n }\n\n /**\n * !#en Check whether two vector equal\n * !#zh 当前的向量是否与指定的向量相等。\n * @method equals\n * @param {Vec2} other\n * @return {Boolean}\n */\n equals (other: Vec2): boolean {\n return other && this.x === other.x && this.y === other.y;\n }\n\n /**\n * !#en Check whether two vector equal with some degree of variance.\n * !#zh\n * 近似判断两个点是否相等。
\n * 判断 2 个向量是否在指定数值的范围之内,如果在则返回 true,反之则返回 false。\n * @method fuzzyEquals\n * @param {Vec2} other\n * @param {Number} variance\n * @return {Boolean}\n */\n fuzzyEquals (other: Vec2, variance): boolean {\n if (this.x - variance <= other.x && other.x <= this.x + variance) {\n if (this.y - variance <= other.y && other.y <= this.y + variance)\n return true;\n }\n return false;\n }\n\n /**\n * !#en Transform to string with vector informations\n * !#zh 转换为方便阅读的字符串。\n * @method toString\n * @return {string}\n */\n toString (): string {\n return \"(\" +\n this.x.toFixed(2) + \", \" +\n this.y.toFixed(2) + \")\"\n ;\n }\n\n /**\n * !#en Calculate linear interpolation result between this vector and another one with given ratio\n * !#zh 线性插值。\n * @method lerp\n * @param {Vec2} to\n * @param {Number} ratio - the interpolation coefficient\n * @param {Vec2} [out] - optional, the receiving vector, you can pass the same vec2 to save result to itself, if not provided, a new vec2 will be created\n * @return {Vec2}\n */\n lerp (to: Vec2, ratio: number, out?: Vec2): Vec2 {\n out = out || new Vec2();\n var x = this.x;\n var y = this.y;\n out.x = x + (to.x - x) * ratio;\n out.y = y + (to.y - y) * ratio;\n return out;\n }\n\n /**\n * !#en Clamp the vector between from float and to float.\n * !#zh\n * 返回指定限制区域后的向量。
\n * 向量大于 max_inclusive 则返回 max_inclusive。
\n * 向量小于 min_inclusive 则返回 min_inclusive。
\n * 否则返回自身。\n * @method clampf\n * @param {Vec2} min_inclusive\n * @param {Vec2} max_inclusive\n * @return {Vec2}\n * @example\n * var min_inclusive = cc.v2(0, 0);\n * var max_inclusive = cc.v2(20, 20);\n * var v1 = cc.v2(20, 20).clampf(min_inclusive, max_inclusive); // Vec2 {x: 20, y: 20};\n * var v2 = cc.v2(0, 0).clampf(min_inclusive, max_inclusive); // Vec2 {x: 0, y: 0};\n * var v3 = cc.v2(10, 10).clampf(min_inclusive, max_inclusive); // Vec2 {x: 10, y: 10};\n */\n clampf (min_inclusive: Vec2, max_inclusive: Vec2): this {\n this.x = misc.clampf(this.x, min_inclusive.x, max_inclusive.x);\n this.y = misc.clampf(this.y, min_inclusive.y, max_inclusive.y);\n return this;\n }\n\n /**\n * !#en Adds this vector.\n * !#zh 向量加法。\n * @method add\n * @param {Vec2} vector\n * @param {Vec2} [out]\n * @return {Vec2} returns this\n * @chainable\n * @example\n * var v = cc.v2(10, 10);\n * v.add(cc.v2(5, 5));// return Vec2 {x: 15, y: 15};\n */\n add (vector: Vec2, out?: Vec2): Vec2 {\n out = out || new Vec2();\n out.x = this.x + vector.x;\n out.y = this.y + vector.y;\n return out;\n }\n\n /**\n * !#en Adds this vector. If you want to save result to another vector, use add() instead.\n * !#zh 向量加法。如果你想保存结果到另一个向量,使用 add() 代替。\n * @method addSelf\n * @param {Vec2} vector\n * @return {Vec2} returns this\n * @chainable\n */\n addSelf (vector: Vec2): this {\n this.x += vector.x;\n this.y += vector.y;\n return this;\n }\n\n /**\n * !#en Subtracts one vector from this.\n * !#zh 向量减法。\n * @method subtract\n * @param {Vec2} vector\n * @return {Vec2} returns this\n * @chainable\n * @example\n * var v = cc.v2(10, 10);\n * v.subSelf(cc.v2(5, 5));// return Vec2 {x: 5, y: 5};\n */\n subtract (vector: Vec2): this {\n this.x -= vector.x;\n this.y -= vector.y;\n return this;\n }\n\n /**\n * !#en Multiplies this by a number.\n * !#zh 缩放当前向量。\n * @method multiplyScalar\n * @param {number} num\n * @return {Vec2} returns this\n * @chainable\n * @example\n * var v = cc.v2(10, 10);\n * v.multiply(5);// return Vec2 {x: 50, y: 50};\n */\n multiplyScalar (num: number): this {\n this.x *= num;\n this.y *= num;\n return this;\n }\n\n /**\n * !#en Multiplies two vectors.\n * !#zh 分量相乘。\n * @method multiply\n * @param {Vec2} vector\n * @return {Vec2} returns this\n * @chainable\n * @example\n * var v = cc.v2(10, 10);\n * v.multiply(cc.v2(5, 5));// return Vec2 {x: 50, y: 50};\n */\n multiply (vector: Vec2): this {\n this.x *= vector.x;\n this.y *= vector.y;\n return this;\n }\n\n /**\n * !#en Divides by a number.\n * !#zh 向量除法。\n * @method divide\n * @param {number} num\n * @return {Vec2} returns this\n * @chainable\n * @example\n * var v = cc.v2(10, 10);\n * v.divide(5); // return Vec2 {x: 2, y: 2};\n */\n divide (num: number): this {\n this.x /= num;\n this.y /= num;\n return this;\n }\n\n /**\n * !#en Negates the components.\n * !#zh 向量取反。\n * @method negate\n * @return {Vec2} returns this\n * @chainable\n * @example\n * var v = cc.v2(10, 10);\n * v.negate(); // return Vec2 {x: -10, y: -10};\n */\n negate (): this {\n this.x = -this.x;\n this.y = -this.y;\n return this;\n }\n\n /**\n * !#en Dot product\n * !#zh 当前向量与指定向量进行点乘。\n * @method dot\n * @param {Vec2} [vector]\n * @return {number} the result\n * @example\n * var v = cc.v2(10, 10);\n * v.dot(cc.v2(5, 5)); // return 100;\n */\n dot (vector: Vec2): number {\n return this.x * vector.x + this.y * vector.y;\n }\n\n /**\n * !#en Cross product\n * !#zh 当前向量与指定向量进行叉乘。\n * @method cross\n * @param {Vec2} [vector]\n * @return {number} the result\n * @example\n * var v = cc.v2(10, 10);\n * v.cross(cc.v2(5, 5)); // return 0;\n */\n cross (vector: Vec2): number {\n return this.x * vector.y - this.y * vector.x;\n }\n\n /**\n * !#en Returns the length of this vector.\n * !#zh 返回该向量的长度。\n * @method len\n * @return {number} the result\n * @example\n * var v = cc.v2(10, 10);\n * v.len(); // return 14.142135623730951;\n */\n len (): number {\n return Math.sqrt(this.x * this.x + this.y * this.y);\n }\n\n /**\n * !#en Returns the squared length of this vector.\n * !#zh 返回该向量的长度平方。\n * @method lengthSqr\n * @return {number} the result\n * @example\n * var v = cc.v2(10, 10);\n * v.lengthSqr(); // return 200;\n */\n lengthSqr (): number {\n return this.x * this.x + this.y * this.y;\n }\n\n /**\n * !#en Make the length of this vector to 1.\n * !#zh 向量归一化,让这个向量的长度为 1。\n * @method normalizeSelf\n * @return {Vec2} returns this\n * @chainable\n * @example\n * var v = cc.v2(10, 10);\n * v.normalizeSelf(); // return Vec2 {x: 0.7071067811865475, y: 0.7071067811865475};\n */\n normalizeSelf (): Vec2 {\n var magSqr = this.x * this.x + this.y * this.y;\n if (magSqr === 1.0)\n return this;\n\n if (magSqr === 0.0) {\n return this;\n }\n\n var invsqrt = 1.0 / Math.sqrt(magSqr);\n this.x *= invsqrt;\n this.y *= invsqrt;\n\n return this;\n }\n\n /**\n * !#en\n * Returns this vector with a magnitude of 1.
\n *
\n * Note that the current vector is unchanged and a new normalized vector is returned. If you want to normalize the current vector, use normalizeSelf function.\n * !#zh\n * 返回归一化后的向量。
\n *
\n * 注意,当前向量不变,并返回一个新的归一化向量。如果你想来归一化当前向量,可使用 normalizeSelf 函数。\n * @method normalize\n * @param {Vec2} [out] - optional, the receiving vector, you can pass the same vec2 to save result to itself, if not provided, a new vec2 will be created\n * @return {Vec2} result\n * var v = cc.v2(10, 10);\n * v.normalize(); // return Vec2 {x: 0.7071067811865475, y: 0.7071067811865475};\n */\n normalize (out?: Vec2): Vec2 {\n out = out || new Vec2();\n out.x = this.x;\n out.y = this.y;\n out.normalizeSelf();\n return out;\n }\n\n /**\n * !#en Get angle in radian between this and vector.\n * !#zh 夹角的弧度。\n * @method angle\n * @param {Vec2} vector\n * @return {number} from 0 to Math.PI\n */\n angle (vector: Vec2): number {\n var magSqr1 = this.magSqr();\n var magSqr2 = vector.magSqr();\n\n if (magSqr1 === 0 || magSqr2 === 0) {\n console.warn(\"Can't get angle between zero vector\");\n return 0.0;\n }\n\n var dot = this.dot(vector);\n var theta = dot / (Math.sqrt(magSqr1 * magSqr2));\n theta = misc.clampf(theta, -1.0, 1.0);\n return Math.acos(theta);\n }\n\n /**\n * !#en Get angle in radian between this and vector with direction.\n * !#zh 带方向的夹角的弧度。\n * @method signAngle\n * @param {Vec2} vector\n * @return {number} from -MathPI to Math.PI\n */\n signAngle (vector: Vec2): number {\n let angle = this.angle(vector);\n return this.cross(vector) < 0 ? -angle : angle;\n }\n\n /**\n * !#en rotate\n * !#zh 返回旋转给定弧度后的新向量。\n * @method rotate\n * @param {number} radians\n * @param {Vec2} [out] - optional, the receiving vector, you can pass the same vec2 to save result to itself, if not provided, a new vec2 will be created\n * @return {Vec2} the result\n */\n rotate (radians: number, out?: Vec2): Vec2 {\n out = out || new Vec2();\n out.x = this.x;\n out.y = this.y;\n return out.rotateSelf(radians);\n }\n\n /**\n * !#en rotate self\n * !#zh 按指定弧度旋转向量。\n * @method rotateSelf\n * @param {number} radians\n * @return {Vec2} returns this\n * @chainable\n */\n rotateSelf (radians: number): Vec2 {\n var sin = Math.sin(radians);\n var cos = Math.cos(radians);\n var x = this.x;\n this.x = cos * x - sin * this.y;\n this.y = sin * x + cos * this.y;\n return this;\n }\n\n /**\n * !#en Calculates the projection of the current vector over the given vector.\n * !#zh 返回当前向量在指定 vector 向量上的投影向量。\n * @method project\n * @param {Vec2} vector\n * @return {Vec2}\n * @example\n * var v1 = cc.v2(20, 20);\n * var v2 = cc.v2(5, 5);\n * v1.project(v2); // Vec2 {x: 20, y: 20};\n */\n project (vector: Vec2): Vec2 {\n return vector.multiplyScalar(this.dot(vector) / vector.dot(vector));\n }\n\n /**\n * Transforms the vec2 with a mat4. 3rd vector component is implicitly '0', 4th vector component is implicitly '1'\n * @method transformMat4\n * @param {Mat4} m matrix to transform with\n * @param {Vec2} [out] the receiving vector, you can pass the same vec2 to save result to itself, if not provided, a new vec2 will be created\n * @returns {Vec2} out\n */\n transformMat4 (m: Mat4, out?: Vec2): Vec2 {\n out = out || new Vec2();\n Vec2.transformMat4(out, this, m);\n return out;\n }\n\n /**\n * Returns the maximum value in x, y.\n * @method maxAxis\n * @returns {number}\n */\n maxAxis (): number {\n return Math.max(this.x, this.y);\n }\n}\n\nconst v2_1 = new Vec2();\nconst v2_2 = new Vec2();\n\nCCClass.fastDefine('cc.Vec2', Vec2, { x: 0, y: 0 });\n\n\n\n/**\n * @module cc\n */\n\n\n/**\n * !#en The convenience method to create a new {{#crossLink \"Vec2\"}}cc.Vec2{{/crossLink}}.\n * !#zh 通过该简便的函数进行创建 {{#crossLink \"Vec2\"}}cc.Vec2{{/crossLink}} 对象。\n * @method v2\n * @param {Number|Object} [x=0]\n * @param {Number} [y=0]\n * @return {Vec2}\n * @example\n * var v1 = cc.v2();\n * var v2 = cc.v2(0, 0);\n * var v3 = cc.v2(v2);\n * var v4 = cc.v2({x: 100, y: 100});\n */\ncc.v2 = function v2 (x, y) {\n return new Vec2(x, y);\n};\n\ncc.Vec2 = Vec2;\n","/****************************************************************************\n Copyright (c) 2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport ValueType from './value-type';\nimport CCClass from '../platform/CCClass';\nimport misc from '../utils/misc';\nimport Vec2 from './vec2';\nimport Mat4 from './mat4';\nimport { EPSILON, random } from './utils';\n\nlet _x: number = 0.0;\nlet _y: number = 0.0;\nlet _z: number = 0.0;\n\n/**\n * !#en Representation of 3D vectors and points.\n * !#zh 表示 3D 向量和坐标\n *\n * @class Vec3\n * @extends ValueType\n */\n\nexport default class Vec3 extends ValueType {\n // deprecated\n static sub = Vec3.subtract;\n static mul = Vec3.multiply;\n static scale = Vec3.multiplyScalar;\n static mag = Vec3.len;\n static squaredMagnitude = Vec3.lengthSqr;\n static div = Vec3.divide;\n\n /**\n * !#en Returns the length of this vector.\n * !#zh 返回该向量的长度。\n * @method mag\n * @return {number} the result\n * @example\n * var v = cc.v3(10, 10, 10);\n * v.mag(); // return 17.320508075688775;\n */\n mag = Vec3.prototype.len;\n /**\n * !#en Returns the squared length of this vector.\n * !#zh 返回该向量的长度平方。\n * @method magSqr\n * @return {number} the result\n */\n magSqr = Vec3.prototype.lengthSqr;\n /**\n * !#en Subtracts one vector from this. If you want to save result to another vector, use sub() instead.\n * !#zh 向量减法。如果你想保存结果到另一个向量,可使用 sub() 代替。\n * @method subSelf\n * @param {Vec3} vector\n * @return {Vec3} returns this\n * @chainable\n */\n subSelf = Vec3.prototype.subtract;\n /**\n * !#en Subtracts one vector from this, and returns the new result.\n * !#zh 向量减法,并返回新结果。\n * @method sub\n * @param {Vec3} vector\n * @param {Vec3} [out] - optional, the receiving vector, you can pass the same vec3 to save result to itself, if not provided, a new vec3 will be created\n * @return {Vec3} the result\n */\n sub (vector: Vec3, out?: Vec3) {\n return Vec3.subtract(out || new Vec3(), this, vector);\n }\n /**\n * !#en Multiplies this by a number. If you want to save result to another vector, use mul() instead.\n * !#zh 缩放当前向量。如果你想结果保存到另一个向量,可使用 mul() 代替。\n * @method mulSelf\n * @param {number} num\n * @return {Vec3} returns this\n * @chainable\n */\n mulSelf = Vec3.prototype.multiplyScalar;\n /**\n * !#en Multiplies by a number, and returns the new result.\n * !#zh 缩放向量,并返回新结果。\n * @method mul\n * @param {number} num\n * @param {Vec3} [out] - optional, the receiving vector, you can pass the same vec3 to save result to itself, if not provided, a new vec3 will be created\n * @return {Vec3} the result\n */\n mul (num: number, out?: Vec3) {\n return Vec3.multiplyScalar(out || new Vec3(), this, num);\n }\n /**\n * !#en Divides by a number. If you want to save result to another vector, use div() instead.\n * !#zh 向量除法。如果你想结果保存到另一个向量,可使用 div() 代替。\n * @method divSelf\n * @param {number} num\n * @return {Vec3} returns this\n * @chainable\n */\n divSelf = Vec3.prototype.divide;\n /**\n * !#en Divides by a number, and returns the new result.\n * !#zh 向量除法,并返回新的结果。\n * @method div\n * @param {number} num\n * @param {Vec3} [out] - optional, the receiving vector, you can pass the same vec3 to save result to itself, if not provided, a new vec3 will be created\n * @return {Vec3} the result\n */\n div (num: number, out?: Vec3): Vec3 {\n return Vec3.multiplyScalar(out || new Vec3(), this, 1/num);\n }\n /**\n * !#en Multiplies two vectors.\n * !#zh 分量相乘。\n * @method scaleSelf\n * @param {Vec3} vector\n * @return {Vec3} returns this\n * @chainable\n */\n scaleSelf = Vec3.prototype.multiply;\n /**\n * !#en Multiplies two vectors, and returns the new result.\n * !#zh 分量相乘,并返回新的结果。\n * @method scale\n * @param {Vec3} vector\n * @param {Vec3} [out] - optional, the receiving vector, you can pass the same vec3 to save result to itself, if not provided, a new vec3 will be created\n * @return {Vec3} the result\n */\n scale (vector: Vec3, out?: Vec3) {\n return Vec3.multiply(out || new Vec3(), this, vector);\n }\n /**\n * !#en Negates the components. If you want to save result to another vector, use neg() instead.\n * !#zh 向量取反。如果你想结果保存到另一个向量,可使用 neg() 代替。\n * @method negSelf\n * @return {Vec3} returns this\n * @chainable\n */\n negSelf = Vec3.prototype.negate;\n /**\n * !#en Negates the components, and returns the new result.\n * !#zh 返回取反后的新向量。\n * @method neg\n * @param {Vec3} [out] - optional, the receiving vector, you can pass the same vec3 to save result to itself, if not provided, a new vec3 will be created\n * @return {Vec3} the result\n */\n neg (out?: Vec3) {\n return Vec3.negate(out || new Vec3(), this);\n }\n\n /**\n * !#en return a Vec3 object with x = 1, y = 1, z = 1.\n * !#zh 新 Vec3 对象。\n * @property ONE\n * @type Vec3\n * @static\n */\n static get ONE () { return new Vec3(1, 1, 1); }\n static readonly ONE_R = Vec3.ONE;\n\n /**\n * !#en return a Vec3 object with x = 0, y = 0, z = 0.\n * !#zh 返回 x = 0,y = 0,z = 0 的 Vec3 对象。\n * @property ZERO\n * @type Vec3\n * @static\n */\n static get ZERO () { return new Vec3(); }\n static readonly ZERO_R = Vec3.ZERO;\n\n /**\n * !#en return a Vec3 object with x = 0, y = 1, z = 0.\n * !#zh 返回 x = 0, y = 1, z = 0 的 Vec3 对象。\n * @property UP\n * @type Vec3\n * @static\n */\n static get UP () { return new Vec3(0, 1, 0); }\n static readonly UP_R = Vec3.UP;\n\n /**\n * !#en return a Vec3 object with x = 1, y = 0, z = 0.\n * !#zh 返回 x = 1,y = 0,z = 0 的 Vec3 对象。\n * @property RIGHT\n * @type Vec3\n * @static\n */\n static get RIGHT () { return new Vec3(1, 0, 0); }\n static readonly RIGHT_R = Vec3.RIGHT;\n\n /**\n * !#en return a Vec3 object with x = 0, y = 0, z = 1.\n * !#zh 返回 x = 0,y = 0,z = 1 的 Vec3 对象。\n * @property FORWARD\n * @type Vec3\n * @static\n */\n static get FORWARD () { return new Vec3(0, 0, 1); }\n static readonly FRONT_R = Vec3.FORWARD;\n\n\n /**\n * !#zh 将目标赋值为零向量\n * !#en The target of an assignment zero vector\n * @method zero\n * @typescript\n * zero (out: Out): Out\n * @static\n */\n static zero (out: Out) {\n out.x = 0;\n out.y = 0;\n out.z = 0;\n return out;\n }\n\n /**\n * !#zh 获得指定向量的拷贝\n * !#en Obtaining copy vectors designated\n * @method clone\n * @typescript\n * clone (a: Out): Vec3\n * @static\n */\n static clone (a: Out) {\n return new Vec3(a.x, a.y, a.z);\n }\n\n /**\n * !#zh 复制目标向量\n * !#en Copy the target vector\n * @method copy\n * @typescript\n * copy (out: Out, a: Vec3Like): Out\n * @static\n */\n static copy (out: Out, a: Vec3Like) {\n out.x = a.x;\n out.y = a.y;\n out.z = a.z;\n return out;\n }\n\n /**\n * !#zh 设置向量值\n * !#en Set to value\n * @method set\n * @typescript\n * set (out: Out, x: number, y: number, z: number): Out\n * @static\n */\n static set (out: Out, x: number, y: number, z: number) {\n out.x = x;\n out.y = y;\n out.z = z;\n return out;\n }\n\n /**\n * !#zh 逐元素向量加法\n * !#en Element-wise vector addition\n * @method add\n * @typescript\n * add (out: Out, a: Out, b: Out): Out\n * @static\n */\n static add (out: Out, a: Out, b: Out) {\n out.x = a.x + b.x;\n out.y = a.y + b.y;\n out.z = a.z + b.z;\n return out;\n }\n\n /**\n * !#zh 逐元素向量减法\n * !#en Element-wise vector subtraction\n * @method subtract\n * @typescript\n * subtract (out: Out, a: Out, b: Out): Out\n * @static\n */\n static subtract (out: Out, a: Out, b: Out) {\n out.x = a.x - b.x;\n out.y = a.y - b.y;\n out.z = a.z - b.z;\n return out;\n }\n\n /**\n * !#zh 逐元素向量乘法 (分量积)\n * !#en Element-wise vector multiplication (product component)\n * @method multiply\n * @typescript\n * multiply (out: Out, a: Vec3Like_1, b: Vec3Like_2): Out\n * @static\n */\n static multiply (out: Out, a: Vec3Like_1, b: Vec3Like_2) {\n out.x = a.x * b.x;\n out.y = a.y * b.y;\n out.z = a.z * b.z;\n return out;\n }\n\n /**\n * !#zh 逐元素向量除法\n * !#en Element-wise vector division\n * @method divide\n * @typescript\n * divide (out: Out, a: Out, b: Out): Out\n * @static\n */\n static divide (out: Out, a: Out, b: Out) {\n out.x = a.x / b.x;\n out.y = a.y / b.y;\n out.z = a.z / b.z;\n return out;\n }\n\n /**\n * !#zh 逐元素向量向上取整\n * !#en Rounding up by elements of the vector\n * @method ceil\n * @typescript\n * ceil (out: Out, a: Out): Out\n * @static\n */\n static ceil (out: Out, a: Out) {\n out.x = Math.ceil(a.x);\n out.y = Math.ceil(a.y);\n out.z = Math.ceil(a.z);\n return out;\n }\n\n /**\n * !#zh 逐元素向量向下取整\n * !#en Element vector by rounding down\n * @method floor\n * @typescript\n * floor (out: Out, a: Out): Out\n * @static\n */\n static floor (out: Out, a: Out) {\n out.x = Math.floor(a.x);\n out.y = Math.floor(a.y);\n out.z = Math.floor(a.z);\n return out;\n }\n\n /**\n * !#zh 逐元素向量最小值\n * !#en The minimum by-element vector\n * @method min\n * @typescript\n * min (out: Out, a: Out, b: Out): Out\n * @static\n */\n static min (out: Out, a: Out, b: Out) {\n out.x = Math.min(a.x, b.x);\n out.y = Math.min(a.y, b.y);\n out.z = Math.min(a.z, b.z);\n return out;\n }\n\n /**\n * !#zh 逐元素向量最大值\n * !#en The maximum value of the element-wise vector\n * @method max\n * @typescript\n * max (out: Out, a: Out, b: Out): Out\n * @static\n */\n static max (out: Out, a: Out, b: Out) {\n out.x = Math.max(a.x, b.x);\n out.y = Math.max(a.y, b.y);\n out.z = Math.max(a.z, b.z);\n return out;\n }\n\n /**\n * !#zh 逐元素向量四舍五入取整\n * !#en Element-wise vector of rounding to whole\n * @method round\n * @typescript\n * round (out: Out, a: Out): Out\n * @static\n */\n static round (out: Out, a: Out) {\n out.x = Math.round(a.x);\n out.y = Math.round(a.y);\n out.z = Math.round(a.z);\n return out;\n }\n\n /**\n * !#zh 向量标量乘法\n * !#en Vector scalar multiplication\n * @method multiplyScalar\n * @typescript\n * multiplyScalar (out: Out, a: Vec3Like, b: number): Out\n * @static\n */\n static multiplyScalar (out: Out, a: Vec3Like, b: number) {\n out.x = a.x * b;\n out.y = a.y * b;\n out.z = a.z * b;\n return out;\n }\n\n /**\n * !#zh 逐元素向量乘加: A + B * scale\n * !#en Element-wise vector multiply add: A + B * scale\n * @method scaleAndAdd\n * @typescript\n * scaleAndAdd (out: Out, a: Out, b: Out, scale: number): Out\n * @static\n */\n static scaleAndAdd (out: Out, a: Out, b: Out, scale: number) {\n out.x = a.x + b.x * scale;\n out.y = a.y + b.y * scale;\n out.z = a.z + b.z * scale;\n return out;\n }\n\n /**\n * !#zh 求两向量的欧氏距离\n * !#en Seeking two vectors Euclidean distance\n * @method distance\n * @typescript\n * distance (a: Out, b: Out): number\n * @static\n */\n static distance (a: Out, b: Out) {\n _x = b.x - a.x;\n _y = b.y - a.y;\n _z = b.z - a.z;\n return Math.sqrt(_x * _x + _y * _y + _z * _z);\n }\n\n /**\n * !#zh 求两向量的欧氏距离平方\n * !#en Euclidean distance squared seeking two vectors\n * @method squaredDistance\n * @typescript\n * squaredDistance (a: Out, b: Out): number\n * @static\n */\n static squaredDistance (a: Out, b: Out) {\n _x = b.x - a.x;\n _y = b.y - a.y;\n _z = b.z - a.z;\n return _x * _x + _y * _y + _z * _z;\n }\n\n /**\n * !#zh 求向量长度\n * !#en Seeking vector length\n * @method len\n * @typescript\n * len (a: Out): number\n * @static\n */\n static len (a: Out) {\n _x = a.x;\n _y = a.y;\n _z = a.z;\n return Math.sqrt(_x * _x + _y * _y + _z * _z);\n }\n\n /**\n * !#zh 求向量长度平方\n * !#en Seeking squared vector length\n * @method lengthSqr\n * @typescript\n * lengthSqr (a: Out): number\n * @static\n */\n static lengthSqr (a: Out) {\n _x = a.x;\n _y = a.y;\n _z = a.z;\n return _x * _x + _y * _y + _z * _z;\n }\n\n /**\n * !#zh 逐元素向量取负\n * !#en By taking the negative elements of the vector\n * @method negate\n * @typescript\n * negate (out: Out, a: Out): Out\n * @static\n */\n static negate (out: Out, a: Out) {\n out.x = -a.x;\n out.y = -a.y;\n out.z = -a.z;\n return out;\n }\n\n /**\n * !#zh 逐元素向量取倒数,接近 0 时返回 Infinity\n * !#en Element vector by taking the inverse, return near 0 Infinity\n * @method inverse\n * @typescript\n * inverse (out: Out, a: Out): Out\n * @static\n */\n static inverse (out: Out, a: Out) {\n out.x = 1.0 / a.x;\n out.y = 1.0 / a.y;\n out.z = 1.0 / a.z;\n return out;\n }\n\n /**\n * !#zh 逐元素向量取倒数,接近 0 时返回 0\n * !#en Element vector by taking the inverse, return near 0 0\n * @method inverseSafe\n * @typescript\n * inverseSafe (out: Out, a: Out): Out\n * @static\n */\n static inverseSafe (out: Out, a: Out) {\n _x = a.x;\n _y = a.y;\n _z = a.z;\n\n if (Math.abs(_x) < EPSILON) {\n out.x = 0;\n } else {\n out.x = 1.0 / _x;\n }\n\n if (Math.abs(_y) < EPSILON) {\n out.y = 0;\n } else {\n out.y = 1.0 / _y;\n }\n\n if (Math.abs(_z) < EPSILON) {\n out.z = 0;\n } else {\n out.z = 1.0 / _z;\n }\n\n return out;\n }\n\n /**\n * !#zh 归一化向量\n * !#en Normalized vector\n * @method normalize\n * @typescript\n * normalize (out: Out, a: Vec3Like): Out\n * @static\n */\n static normalize (out: Out, a: Vec3Like) {\n _x = a.x;\n _y = a.y;\n _z = a.z;\n\n let len = _x * _x + _y * _y + _z * _z;\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n out.x = _x * len;\n out.y = _y * len;\n out.z = _z * len;\n }\n return out;\n }\n\n /**\n * !#zh 向量点积(数量积)\n * !#en Vector dot product (scalar product)\n * @method dot\n * @typescript\n * dot (a: Out, b: Out): number\n * @static\n */\n static dot (a: Out, b: Out) {\n return a.x * b.x + a.y * b.y + a.z * b.z;\n }\n\n /**\n * !#zh 向量叉积(向量积)\n * !#en Vector cross product (vector product)\n * @method cross\n * @typescript\n * cross (out: Out, a: Vec3Like_1, b: Vec3Like_2): Out\n * @static\n */\n static cross (out: Out, a: Vec3Like_1, b: Vec3Like_2) {\n const { x: ax, y: ay, z: az } = a;\n const { x: bx, y: by, z: bz } = b;\n out.x = ay * bz - az * by;\n out.y = az * bx - ax * bz;\n out.z = ax * by - ay * bx;\n return out;\n }\n\n /**\n * !#zh 逐元素向量线性插值: A + t * (B - A)\n * !#en Vector element by element linear interpolation: A + t * (B - A)\n * @method lerp\n * @typescript\n * lerp (out: Out, a: Out, b: Out, t: number): Out\n * @static\n */\n static lerp (out: Out, a: Out, b: Out, t: number) {\n out.x = a.x + t * (b.x - a.x);\n out.y = a.y + t * (b.y - a.y);\n out.z = a.z + t * (b.z - a.z);\n return out;\n }\n\n /**\n * !#zh 生成一个在单位球体上均匀分布的随机向量\n * !#en Generates a uniformly distributed random vectors on the unit sphere\n * @method random\n * @typescript\n * random (out: Out, scale?: number): Out\n * @param scale 生成的向量长度\n * @static\n */\n static random (out: Out, scale?: number) {\n scale = scale || 1.0;\n\n const phi = random() * 2.0 * Math.PI;\n const cosTheta = random() * 2 - 1;\n const sinTheta = Math.sqrt(1 - cosTheta * cosTheta);\n\n out.x = sinTheta * Math.cos(phi) * scale;\n out.y = sinTheta * Math.sin(phi) * scale;\n out.z = cosTheta * scale;\n return out;\n }\n\n /**\n * !#zh 向量与四维矩阵乘法,默认向量第四位为 1。\n * !#en Four-dimensional vector and matrix multiplication, the default vectors fourth one.\n * @method transformMat4\n * @typescript\n * transformMat4 (out: Out, a: Vec3Like, mat: MatLike): Out\n * @static\n */\n static transformMat4 (out: Out, a: Vec3Like, mat: MatLike) {\n _x = a.x;\n _y = a.y;\n _z = a.z;\n let m = mat.m;\n let rhw = m[3] * _x + m[7] * _y + m[11] * _z + m[15];\n rhw = rhw ? 1 / rhw : 1;\n out.x = (m[0] * _x + m[4] * _y + m[8] * _z + m[12]) * rhw;\n out.y = (m[1] * _x + m[5] * _y + m[9] * _z + m[13]) * rhw;\n out.z = (m[2] * _x + m[6] * _y + m[10] * _z + m[14]) * rhw;\n return out;\n }\n\n /**\n * !#zh 向量与四维矩阵乘法,默认向量第四位为 0。\n * !#en Four-dimensional vector and matrix multiplication, vector fourth default is 0.\n * @method transformMat4Normal\n * @typescript\n * transformMat4Normal (out: Out, a: Out, mat: MatLike): Out\n * @static\n */\n static transformMat4Normal (out: Out, a: Out, mat: MatLike) {\n _x = a.x;\n _y = a.y;\n _z = a.z;\n let m = mat.m;\n let rhw = m[3] * _x + m[7] * _y + m[11] * _z;\n rhw = rhw ? 1 / rhw : 1;\n out.x = (m[0] * _x + m[4] * _y + m[8] * _z) * rhw;\n out.y = (m[1] * _x + m[5] * _y + m[9] * _z) * rhw;\n out.z = (m[2] * _x + m[6] * _y + m[10] * _z) * rhw;\n return out;\n }\n\n /**\n * !#zh 向量与三维矩阵乘法\n * !#en Dimensional vector matrix multiplication\n * @method transformMat3\n * @typescript\n * transformMat3 (out: Out, a: Out, mat: MatLike): Out\n * @static\n */\n static transformMat3 (out: Out, a: Out, mat: MatLike) {\n _x = a.x;\n _y = a.y;\n _z = a.z;\n let m = mat.m;\n out.x = _x * m[0] + _y * m[3] + _z * m[6];\n out.y = _x * m[1] + _y * m[4] + _z * m[7];\n out.z = _x * m[2] + _y * m[5] + _z * m[8];\n return out;\n }\n\n /**\n * !#zh 向量仿射变换\n * !#en Affine transformation vector\n * @method transformAffine\n * @typescript\n * transformAffine(out: Out, v: VecLike, mat: MatLike): Out\n * @static\n */\n static transformAffine\n (out: Out, v: VecLike, mat: MatLike) {\n _x = v.x;\n _y = v.y;\n _z = v.z;\n let m = mat.m;\n out.x = m[0] * _x + m[1] * _y + m[2] * _z + m[3];\n out.y = m[4] * _x + m[5] * _y + m[6] * _z + m[7];\n out.x = m[8] * _x + m[9] * _y + m[10] * _z + m[11];\n return out;\n }\n\n /**\n * !#zh 向量四元数乘法\n * !#en Vector quaternion multiplication\n * @method transformQuat\n * @typescript\n * transformQuat (out: Out, a: VecLike, q: QuatLike): Out\n * @static\n */\n static transformQuat (out: Out, a: VecLike, q: QuatLike) {\n // benchmarks: http://jsperf.com/quaternion-transform-Vec3-implementations\n\n // calculate quat * vec\n const ix = q.w * a.x + q.y * a.z - q.z * a.y;\n const iy = q.w * a.y + q.z * a.x - q.x * a.z;\n const iz = q.w * a.z + q.x * a.y - q.y * a.x;\n const iw = -q.x * a.x - q.y * a.y - q.z * a.z;\n\n // calculate result * inverse quat\n out.x = ix * q.w + iw * -q.x + iy * -q.z - iz * -q.y;\n out.y = iy * q.w + iw * -q.y + iz * -q.x - ix * -q.z;\n out.z = iz * q.w + iw * -q.z + ix * -q.y - iy * -q.x;\n return out;\n }\n\n /**\n * !#zh 以缩放 -> 旋转 -> 平移顺序变换向量\n * !#en To scale -> rotation -> transformation vector sequence translation\n * @method transformQuat\n * @typescript\n * transformRTS(out: Out, a: VecLike, r: QuatLike, t: VecLike, s: VecLike): Out\n * @static\n */\n static transformRTS (\n out: Out, a: VecLike, r: QuatLike, t: VecLike, s: VecLike) {\n const x = a.x * s.x;\n const y = a.y * s.y;\n const z = a.z * s.z;\n const ix = r.w * x + r.y * z - r.z * y;\n const iy = r.w * y + r.z * x - r.x * z;\n const iz = r.w * z + r.x * y - r.y * x;\n const iw = -r.x * x - r.y * y - r.z * z;\n out.x = ix * r.w + iw * -r.x + iy * -r.z - iz * -r.y + t.x;\n out.y = iy * r.w + iw * -r.y + iz * -r.x - ix * -r.z + t.y;\n out.z = iz * r.w + iw * -r.z + ix * -r.y - iy * -r.x + t.z;\n return out;\n }\n\n /**\n * !#zh 以平移 -> 旋转 -> 缩放顺序逆变换向量\n * !#en Translational -> rotation -> Zoom inverse transformation vector sequence\n * @method transformInverseRTS\n * @typescript\n * transformInverseRTS(out: Out, a: VecLike, r: QuatLike, t: VecLike, s: VecLike): Out\n * @static\n */\n static transformInverseRTS (\n out: Out, a: VecLike, r: QuatLike, t: VecLike, s: VecLike) {\n const x = a.x - t.x;\n const y = a.y - t.y;\n const z = a.z - t.z;\n const ix = r.w * x - r.y * z + r.z * y;\n const iy = r.w * y - r.z * x + r.x * z;\n const iz = r.w * z - r.x * y + r.y * x;\n const iw = r.x * x + r.y * y + r.z * z;\n out.x = (ix * r.w + iw * r.x + iy * r.z - iz * r.y) / s.x;\n out.y = (iy * r.w + iw * r.y + iz * r.x - ix * r.z) / s.y;\n out.z = (iz * r.w + iw * r.z + ix * r.y - iy * r.x) / s.z;\n return out;\n }\n\n /**\n * !#zh 绕 X 轴旋转向量指定弧度\n * !#en Rotation vector specified angle about the X axis\n * @method rotateX\n * @typescript\n * rotateX (out: Out, v: Out, o: Out, a: number): Out\n * @param v 待旋转向量\n * @param o 旋转中心\n * @param a 旋转弧度\n * @static\n */\n static rotateX (out: Out, v: Out, o: Out, a: number) {\n // Translate point to the origin\n _x = v.x - o.x;\n _y = v.y - o.y;\n _z = v.z - o.z;\n\n // perform rotation\n const cos = Math.cos(a);\n const sin = Math.sin(a);\n const rx = _x;\n const ry = _y * cos - _z * sin;\n const rz = _y * sin + _z * cos;\n\n // translate to correct position\n out.x = rx + o.x;\n out.y = ry + o.y;\n out.z = rz + o.z;\n\n return out;\n }\n\n /**\n * !#zh 绕 Y 轴旋转向量指定弧度\n * !#en Rotation vector specified angle around the Y axis\n * @method rotateY\n * @typescript\n * rotateY (out: Out, v: Out, o: Out, a: number): Out\n * @param v 待旋转向量\n * @param o 旋转中心\n * @param a 旋转弧度\n * @static\n */\n static rotateY (out: Out, v: Out, o: Out, a: number) {\n // Translate point to the origin\n _x = v.x - o.x;\n _y = v.y - o.y;\n _z = v.z - o.z;\n\n // perform rotation\n const cos = Math.cos(a);\n const sin = Math.sin(a);\n const rx = _z * sin + _x * cos;\n const ry = _y;\n const rz = _z * cos - _x * sin;\n\n // translate to correct position\n out.x = rx + o.x;\n out.y = ry + o.y;\n out.z = rz + o.z;\n\n return out;\n }\n\n /**\n * !#zh 绕 Z 轴旋转向量指定弧度\n * !#en Around the Z axis specified angle vector\n * @method rotateZ\n * @typescript\n * rotateZ (out: Out, v: Out, o: Out, a: number): Out\n * @param v 待旋转向量\n * @param o 旋转中心\n * @param a 旋转弧度\n * @static\n */\n static rotateZ (out: Out, v: Out, o: Out, a: number) {\n // Translate point to the origin\n _x = v.x - o.x;\n _y = v.y - o.y;\n _z = v.z - o.z;\n\n // perform rotation\n const cos = Math.cos(a);\n const sin = Math.sin(a);\n const rx = _x * cos - _y * sin;\n const ry = _x * sin + _y * cos;\n const rz = _z;\n\n // translate to correct position\n out.x = rx + o.x;\n out.y = ry + o.y;\n out.z = rz + o.z;\n\n return out;\n }\n\n /**\n * !#zh 向量等价判断\n * !#en Equivalent vectors Analyzing\n * @method strictEquals\n * @typescript\n * strictEquals (a: Out, b: Out): boolean\n * @static\n */\n static strictEquals (a: Out, b: Out) {\n return a.x === b.x && a.y === b.y && a.z === b.z;\n }\n\n /**\n * !#zh 排除浮点数误差的向量近似等价判断\n * !#en Negative error vector floating point approximately equivalent Analyzing\n * @method equals\n * @typescript\n * equals (a: Out, b: Out, epsilon?: number): boolean\n * @static\n */\n static equals (a: Out, b: Out, epsilon = EPSILON) {\n const { x: a0, y: a1, z: a2 } = a;\n const { x: b0, y: b1, z: b2 } = b;\n return (\n Math.abs(a0 - b0) <=\n epsilon * Math.max(1.0, Math.abs(a0), Math.abs(b0)) &&\n Math.abs(a1 - b1) <=\n epsilon * Math.max(1.0, Math.abs(a1), Math.abs(b1)) &&\n Math.abs(a2 - b2) <=\n epsilon * Math.max(1.0, Math.abs(a2), Math.abs(b2))\n );\n }\n\n /**\n * !#zh 求两向量夹角弧度\n * !#en Radian angle between two vectors seek\n * @method angle\n * @typescript\n * angle (a: Out, b: Out): number\n * @static\n */\n static angle (a: Out, b: Out) {\n Vec3.normalize(v3_1, a);\n Vec3.normalize(v3_2, b);\n const cosine = Vec3.dot(v3_1, v3_2);\n if (cosine > 1.0) {\n return 0;\n }\n if (cosine < -1.0) {\n return Math.PI;\n }\n return Math.acos(cosine);\n }\n\n /**\n * !#zh 计算向量在指定平面上的投影\n * !#en Calculating a projection vector in the specified plane\n * @method projectOnPlane\n * @typescript\n * projectOnPlane (out: Out, a: Out, n: Out): Out\n * @param a 待投影向量\n * @param n 指定平面的法线\n * @static\n */\n static projectOnPlane (out: Out, a: Out, n: Out) {\n return Vec3.subtract(out, a, Vec3.project(out, a, n));\n }\n\n /**\n * !#zh 计算向量在指定向量上的投影\n * !#en Projection vector calculated in the vector designated\n * @method project\n * @typescript\n * project (out: Out, a: Out, b: Out): Out\n * @param a 待投影向量\n * @param n 目标向量\n * @static\n */\n static project (out: Out, a: Out, b: Out) {\n const sqrLen = Vec3.lengthSqr(b);\n if (sqrLen < 0.000001) {\n return Vec3.set(out, 0, 0, 0);\n } else {\n return Vec3.multiplyScalar(out, b, Vec3.dot(a, b) / sqrLen);\n }\n }\n\n /**\n * !#zh 向量转数组\n * !#en Vector transfer array\n * @method toArray\n * @typescript\n * toArray > (out: Out, v: IVec3Like, ofs?: number): Out\n * @param ofs 数组起始偏移量\n * @static\n */\n static toArray > (out: Out, v: IVec3Like, ofs = 0) {\n out[ofs + 0] = v.x;\n out[ofs + 1] = v.y;\n out[ofs + 2] = v.z;\n\n return out;\n }\n\n /**\n * !#zh 数组转向量\n * !#en Array steering amount\n * @method fromArray\n * @typescript\n * fromArray (out: Out, arr: IWritableArrayLike, ofs?: number): Out\n * @param ofs 数组起始偏移量\n * @static\n */\n static fromArray (out: Out, arr: IWritableArrayLike, ofs = 0) {\n out.x = arr[ofs + 0];\n out.y = arr[ofs + 1];\n out.z = arr[ofs + 2];\n return out;\n }\n\n\n /**\n * @property {Number} x\n */\n x: number;\n /**\n * @property {Number} y\n */\n y: number;\n /**\n * @property {Number} z\n */\n z: number;\n\n\n /**\n * !#en\n * Constructor\n * see {{#crossLink \"cc/vec3:method\"}}cc.v3{{/crossLink}}\n * !#zh\n * 构造函数,可查看 {{#crossLink \"cc/vec3:method\"}}cc.v3{{/crossLink}}\n * @method constructor\n * @param {Vec3|number} [x=0]\n * @param {number} [y=0]\n * @param {number} [z=0]\n */\n constructor (x: Vec3 | number = 0, y: number = 0, z: number = 0) {\n super();\n if (x && typeof x === 'object') {\n this.x = x.x;\n this.y = x.y;\n this.z = x.z;\n }\n else {\n this.x = x as number;\n this.y = y;\n this.z = z;\n }\n }\n\n /**\n * !#en clone a Vec3 value\n * !#zh 克隆一个 Vec3 值\n * @method clone\n * @return {Vec3}\n */\n clone (): Vec3 {\n return new Vec3(this.x, this.y, this.z);\n }\n\n /**\n * !#en Set the current vector value with the given vector.\n * !#zh 用另一个向量设置当前的向量对象值。\n * @method set\n * @param {Vec3} newValue - !#en new value to set. !#zh 要设置的新值\n * @return {Vec3} returns this\n * @chainable\n */\n set (newValue: Vec3): Vec3 {\n this.x = newValue.x;\n this.y = newValue.y;\n this.z = newValue.z;\n return this;\n }\n\n /**\n * !#en Check whether the vector equals another one\n * !#zh 当前的向量是否与指定的向量相等。\n * @method equals\n * @param {Vec3} other\n * @return {Boolean}\n */\n equals (other: Vec3): boolean {\n return other && this.x === other.x && this.y === other.y && this.z === other.z;\n }\n\n\n /**\n * !#en Check whether two vector equal with some degree of variance.\n * !#zh\n * 近似判断两个点是否相等。
\n * 判断 2 个向量是否在指定数值的范围之内,如果在则返回 true,反之则返回 false。\n * @method fuzzyEquals\n * @param {Vec3} other\n * @param {Number} variance\n * @return {Boolean}\n */\n fuzzyEquals (other: Vec3, variance: number): boolean {\n if (this.x - variance <= other.x && other.x <= this.x + variance) {\n if (this.y - variance <= other.y && other.y <= this.y + variance) {\n if (this.z - variance <= other.z && other.z <= this.z + variance)\n return true;\n }\n }\n return false;\n }\n\n /**\n * !#en Transform to string with vector informations\n * !#zh 转换为方便阅读的字符串。\n * @method toString\n * @return {string}\n */\n toString (): string {\n return \"(\" +\n this.x.toFixed(2) + \", \" +\n this.y.toFixed(2) + \", \" +\n this.z.toFixed(2) + \")\"\n ;\n }\n\n /**\n * !#en Calculate linear interpolation result between this vector and another one with given ratio\n * !#zh 线性插值。\n * @method lerp\n * @param {Vec3} to\n * @param {number} ratio - the interpolation coefficient\n * @param {Vec3} [out] - optional, the receiving vector, you can pass the same vec3 to save result to itself, if not provided, a new vec3 will be created\n * @return {Vec3}\n */\n lerp (to: Vec3, ratio: number, out?: Vec3): Vec3 {\n out = out || new Vec3();\n Vec3.lerp(out, this, to, ratio);\n return out;\n }\n\n /**\n * !#en Clamp the vector between from float and to float.\n * !#zh\n * 返回指定限制区域后的向量。
\n * 向量大于 max_inclusive 则返回 max_inclusive。
\n * 向量小于 min_inclusive 则返回 min_inclusive。
\n * 否则返回自身。\n * @method clampf\n * @param {Vec3} min_inclusive\n * @param {Vec3} max_inclusive\n * @return {Vec3}\n */\n clampf (min_inclusive: Vec3, max_inclusive: Vec3): Vec3 {\n this.x = misc.clampf(this.x, min_inclusive.x, max_inclusive.x);\n this.y = misc.clampf(this.y, min_inclusive.y, max_inclusive.y);\n this.z = misc.clampf(this.z, min_inclusive.z, max_inclusive.z);\n return this;\n }\n\n /**\n * !#en Adds this vector. If you want to save result to another vector, use add() instead.\n * !#zh 向量加法。如果你想保存结果到另一个向量,使用 add() 代替。\n * @method addSelf\n * @param {Vec3} vector\n * @return {Vec3} returns this\n * @chainable\n */\n addSelf (vector: Vec3): this {\n this.x += vector.x;\n this.y += vector.y;\n this.z += vector.z;\n return this;\n }\n\n /**\n * !#en Adds two vectors, and returns the new result.\n * !#zh 向量加法,并返回新结果。\n * @method add\n * @param {Vec3} vector\n * @param {Vec3} [out] - optional, the receiving vector, you can pass the same vec3 to save result to itself, if not provided, a new vec3 will be created\n * @return {Vec3} the result\n */\n add (vector: Vec3, out?: Vec3): Vec3 {\n out = out || new Vec3();\n out.x = this.x + vector.x;\n out.y = this.y + vector.y;\n out.z = this.z + vector.z;\n return out;\n }\n\n /**\n * !#en Subtracts one vector from this.\n * !#zh 向量减法。\n * @method subtract\n * @param {Vec3} vector\n * @return {Vec3} returns this\n * @chainable\n */\n subtract (vector: Vec3): Vec3 {\n this.x -= vector.x;\n this.y -= vector.y;\n this.z -= vector.z;\n return this;\n }\n\n /**\n * !#en Multiplies this by a number.\n * !#zh 缩放当前向量。\n * @method multiplyScalar\n * @param {number} num\n * @return {Vec3} returns this\n * @chainable\n */\n multiplyScalar (num: number): Vec3 {\n this.x *= num;\n this.y *= num;\n this.z *= num;\n return this;\n }\n\n /**\n * !#en Multiplies two vectors.\n * !#zh 分量相乘。\n * @method multiply\n * @param {Vec3} vector\n * @return {Vec3} returns this\n * @chainable\n */\n multiply (vector: Vec3): Vec3 {\n this.x *= vector.x;\n this.y *= vector.y;\n this.z *= vector.z;\n return this;\n }\n\n /**\n * !#en Divides by a number.\n * !#zh 向量除法。\n * @method divide\n * @param {number} num\n * @return {Vec3} returns this\n * @chainable\n */\n divide (num: number): Vec3 {\n this.x /= num;\n this.y /= num;\n this.z /= num;\n return this;\n }\n\n /**\n * !#en Negates the components.\n * !#zh 向量取反。\n * @method negate\n * @return {Vec3} returns this\n * @chainable\n */\n negate (): this {\n this.x = -this.x;\n this.y = -this.y;\n this.z = -this.z;\n return this;\n }\n\n /**\n * !#en Dot product\n * !#zh 当前向量与指定向量进行点乘。\n * @method dot\n * @param {Vec3} [vector]\n * @return {number} the result\n */\n dot (vector: Vec3): number {\n return this.x * vector.x + this.y * vector.y + this.z * vector.z;\n }\n\n /**\n * !#en Cross product\n * !#zh 当前向量与指定向量进行叉乘。\n * @method cross\n * @param {Vec3} vector\n * @param {Vec3} [out]\n * @return {Vec3} the result\n */\n cross (vector: Vec3, out?: Vec3): Vec3 {\n out = out || new Vec3();\n Vec3.cross(out, this, vector)\n return out;\n }\n\n /**\n * !#en Returns the length of this vector.\n * !#zh 返回该向量的长度。\n * @method len\n * @return {number} the result\n * @example\n * var v = cc.v3(10, 10, 10);\n * v.len(); // return 17.320508075688775;\n */\n len (): number {\n return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);\n }\n\n /**\n * !#en Returns the squared length of this vector.\n * !#zh 返回该向量的长度平方。\n * @method lengthSqr\n * @return {number} the result\n */\n lengthSqr (): number {\n return this.x * this.x + this.y * this.y + this.z * this.z;\n }\n\n /**\n * !#en Make the length of this vector to 1.\n * !#zh 向量归一化,让这个向量的长度为 1。\n * @method normalizeSelf\n * @return {Vec3} returns this\n * @chainable\n */\n normalizeSelf (): Vec3 {\n Vec3.normalize(this, this);\n return this;\n };\n\n /**\n * !#en\n * Returns this vector with a magnitude of 1.
\n *
\n * Note that the current vector is unchanged and a new normalized vector is returned. If you want to normalize the current vector, use normalizeSelf function.\n * !#zh\n * 返回归一化后的向量。
\n *
\n * 注意,当前向量不变,并返回一个新的归一化向量。如果你想来归一化当前向量,可使用 normalizeSelf 函数。\n * @method normalize\n * @param {Vec3} [out] - optional, the receiving vector, you can pass the same vec3 to save result to itself, if not provided, a new vec3 will be created\n * @return {Vec3} result\n */\n normalize (out?: Vec3): Vec3 {\n out = out || new Vec3();\n Vec3.normalize(out, this);\n return out;\n }\n\n /**\n * Transforms the vec3 with a mat4. 4th vector component is implicitly '1'\n * @method transformMat4\n * @param {Mat4} m matrix to transform with\n * @param {Vec3} [out] the receiving vector, you can pass the same vec3 to save result to itself, if not provided, a new vec3 will be created\n * @returns {Vec3} out\n */\n transformMat4 (m: Mat4, out?: Vec3): Vec3 {\n out = out || new Vec3();\n Vec3.transformMat4(out, this, m);\n return out;\n }\n\n /**\n * Returns the maximum value in x, y, and z\n * @method maxAxis\n * @returns {number}\n */\n maxAxis (): number {\n return Math.max(this.x, this.y, this.z);\n }\n\n /**\n * !#en Get angle in radian between this and vector.\n * !#zh 夹角的弧度。\n * @method angle\n * @param {Vec3} vector\n * @return {number} from 0 to Math.PI\n */\n angle = Vec2.prototype.angle\n /**\n * !#en Calculates the projection of the current vector over the given vector.\n * !#zh 返回当前向量在指定 vector 向量上的投影向量。\n * @method project\n * @param {Vec3} vector\n * @return {Vec3}\n * @example\n * var v1 = cc.v3(20, 20, 20);\n * var v2 = cc.v3(5, 5, 5);\n * v1.project(v2); // Vec3 {x: 20, y: 20, z: 20};\n */\n project = Vec2.prototype.project\n // Compatible with the vec2 API\n\n /**\n * !#en Get angle in radian between this and vector with direction.
\n * In order to compatible with the vec2 API.\n * !#zh 带方向的夹角的弧度。该方法仅用做兼容 2D 计算。\n * @method signAngle\n * @param {Vec3 | Vec2} vector\n * @return {number} from -MathPI to Math.PI\n * @deprecated\n */\n signAngle (vector) {\n cc.warnID(1408, 'vec3.signAngle', 'v2.1', 'cc.v2(selfVector).signAngle(vector)');\n let vec1 = new Vec2(this.x, this.y);\n let vec2 = new Vec2(vector.x, vector.y);\n return vec1.signAngle(vec2);\n }\n\n /**\n * !#en rotate. In order to compatible with the vec2 API.\n * !#zh 返回旋转给定弧度后的新向量。该方法仅用做兼容 2D 计算。\n * @method rotate\n * @param {number} radians\n * @param {Vec3} [out] - optional, the receiving vector, you can pass the same vec2 to save result to itself, if not provided, a new vec2 will be created\n * @return {Vec2 | Vec3} if the 'out' value is a vec3 you will get a Vec3 return.\n * @deprecated\n */\n rotate (radians, out) {\n cc.warnID(1408, 'vec3.rotate', 'v2.1', 'cc.v2(selfVector).rotate(radians, out)');\n return Vec2.prototype.rotate.call(this, radians, out);\n }\n\n /**\n * !#en rotate self. In order to compatible with the vec2 API.\n * !#zh 按指定弧度旋转向量。该方法仅用做兼容 2D 计算。\n * @method rotateSelf\n * @param {number} radians\n * @return {Vec3} returns this\n * @chainable\n * @deprecated\n */\n rotateSelf (radians) {\n cc.warnID(1408, 'vec3.rotateSelf', 'v2.1', 'cc.v2(selfVector).rotateSelf(radians)');\n return Vec2.prototype.rotateSelf.call(this, radians);\n }\n}\n\nconst v3_1 = new Vec3();\nconst v3_2 = new Vec3();\n\nCCClass.fastDefine('cc.Vec3', Vec3, { x: 0, y: 0, z: 0 });\n\n/**\n * @module cc\n */\n\n/**\n * !#en The convenience method to create a new {{#crossLink \"Vec3\"}}cc.Vec3{{/crossLink}}.\n * !#zh 通过该简便的函数进行创建 {{#crossLink \"Vec3\"}}cc.Vec3{{/crossLink}} 对象。\n * @method v3\n * @param {Number|Object} [x=0]\n * @param {Number} [y=0]\n * @param {Number} [z=0]\n * @return {Vec3}\n * @example\n * var v1 = cc.v3();\n * var v2 = cc.v3(0, 0, 0);\n * var v3 = cc.v3(v2);\n * var v4 = cc.v3({x: 100, y: 100, z: 0});\n */\ncc.v3 = function v3 (x, y, z) {\n return new Vec3(x, y, z);\n};\n\ncc.Vec3 = Vec3;\n","/*\n Copyright (c) 2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos.com\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n*/\n\nimport CCClass from '../platform/CCClass';\nimport ValueType from './value-type';\nimport Mat4 from './mat4';\nimport { clamp, EPSILON, random } from './utils';\n\nlet _x: number = 0.0;\nlet _y: number = 0.0;\nlet _z: number = 0.0;\nlet _w: number = 0.0;\n\n/**\n * !#en Representation of 3D vectors and points.\n * !#zh 表示 3D 向量和坐标\n *\n * @class Vec4\n * @extends ValueType\n */\nexport default class Vec4 extends ValueType {\n // deprecated\n public static sub = Vec4.subtract;\n public static mul = Vec4.multiply;\n public static div = Vec4.divide;\n public static scale = Vec4.multiplyScalar;\n public static mag = Vec4.len;\n public static squaredMagnitude = Vec4.lengthSqr;\n mag = Vec4.prototype.len;\n magSqr = Vec4.prototype.lengthSqr;\n /**\n * !#en Subtracts one vector from this. If you want to save result to another vector, use sub() instead.\n * !#zh 向量减法。如果你想保存结果到另一个向量,可使用 sub() 代替。\n * @method subSelf\n * @param {Vec4} vector\n * @return {Vec4} returns this\n * @chainable\n */\n subSelf = Vec4.prototype.subtract;\n /**\n * !#en Subtracts one vector from this, and returns the new result.\n * !#zh 向量减法,并返回新结果。\n * @method sub\n * @param {Vec4} vector\n * @param {Vec4} [out] - optional, the receiving vector, you can pass the same vec4 to save result to itself, if not provided, a new vec4 will be created\n * @return {Vec4} the result\n */\n sub (vector: Vec4, out?: Vec4) {\n return Vec4.subtract(out || new Vec4(), this, vector);\n }\n /**\n * !#en Multiplies this by a number. If you want to save result to another vector, use mul() instead.\n * !#zh 缩放当前向量。如果你想结果保存到另一个向量,可使用 mul() 代替。\n * @method mulSelf\n * @param {number} num\n * @return {Vec4} returns this\n * @chainable\n */\n mulSelf = Vec4.prototype.multiplyScalar;\n /**\n * !#en Multiplies by a number, and returns the new result.\n * !#zh 缩放向量,并返回新结果。\n * @method mul\n * @param {number} num\n * @param {Vec4} [out] - optional, the receiving vector, you can pass the same vec4 to save result to itself, if not provided, a new vec4 will be created\n * @return {Vec4} the result\n */\n mul (num: number, out?: Vec4) {\n return Vec4.multiplyScalar(out || new Vec4(), this, num);\n }\n /**\n * !#en Divides by a number. If you want to save result to another vector, use div() instead.\n * !#zh 向量除法。如果你想结果保存到另一个向量,可使用 div() 代替。\n * @method divSelf\n * @param {number} num\n * @return {Vec4} returns this\n * @chainable\n */\n divSelf = Vec4.prototype.divide;\n /**\n * !#en Divides by a number, and returns the new result.\n * !#zh 向量除法,并返回新的结果。\n * @method div\n * @param {number} num\n * @param {Vec4} [out] - optional, the receiving vector, you can pass the same vec4 to save result to itself, if not provided, a new vec4 will be created\n * @return {Vec4} the result\n */\n div (num: number, out?: Vec4): Vec4 {\n return Vec4.multiplyScalar(out || new Vec4(), this, 1/num);\n }\n /**\n * !#en Multiplies two vectors.\n * !#zh 分量相乘。\n * @method scaleSelf\n * @param {Vec4} vector\n * @return {Vec4} returns this\n * @chainable\n */\n scaleSelf = Vec4.prototype.multiply;\n /**\n * !#en Multiplies two vectors, and returns the new result.\n * !#zh 分量相乘,并返回新的结果。\n * @method scale\n * @param {Vec4} vector\n * @param {Vec4} [out] - optional, the receiving vector, you can pass the same vec4 to save result to itself, if not provided, a new vec4 will be created\n * @return {Vec4} the result\n */\n scale (vector: Vec4, out?: Vec4) {\n return Vec4.multiply(out || new Vec4(), this, vector);\n }\n /**\n * !#en Negates the components. If you want to save result to another vector, use neg() instead.\n * !#zh 向量取反。如果你想结果保存到另一个向量,可使用 neg() 代替。\n * @method negSelf\n * @return {Vec4} returns this\n * @chainable\n */\n negSelf = Vec4.prototype.negate;\n /**\n * !#en Negates the components, and returns the new result.\n * !#zh 返回取反后的新向量。\n * @method neg\n * @param {Vec4} [out] - optional, the receiving vector, you can pass the same vec4 to save result to itself, if not provided, a new vec4 will be created\n * @return {Vec4} the result\n */\n neg (out?: Vec4) {\n return Vec4.negate(out || new Vec4(), this);\n }\n\n public static get ZERO () { return new Vec4(0, 0, 0, 0); }\n public static readonly ZERO_R = Vec4.ZERO;\n\n public static get ONE () { return new Vec4(1, 1, 1, 1); }\n public static readonly ONE_R = Vec4.ONE;\n\n public static get NEG_ONE () { return new Vec4(-1, -1, -1, -1); }\n public static readonly NEG_ONE_R = Vec4.NEG_ONE;\n\n /**\n * !#zh 获得指定向量的拷贝\n * !#en Obtaining copy vectors designated\n * @method clone\n * @typescript\n * clone (a: Out): Vec4\n * @static\n */\n public static clone (a: Out) {\n return new Vec4(a.x, a.y, a.z, a.w);\n }\n\n /**\n * !#zh 复制目标向量\n * !#en Copy the target vector\n * @method copy\n * @typescript\n * copy (out: Out, a: Out): Out\n * @static\n */\n public static copy (out: Out, a: Out) {\n out.x = a.x;\n out.y = a.y;\n out.z = a.z;\n out.w = a.w;\n return out;\n }\n\n /**\n * !#zh 设置向量值\n * !#en Set to value\n * @method set\n * @typescript\n * set (out: Out, x: number, y: number, z: number, w: number): Out\n * @static\n */\n public static set (out: Out, x: number, y: number, z: number, w: number) {\n out.x = x;\n out.y = y;\n out.z = z;\n out.w = w;\n return out;\n }\n\n /**\n * !#zh 逐元素向量加法\n * !#en Element-wise vector addition\n * @method add\n * @typescript\n * add (out: Out, a: Out, b: Out): Out\n * @static\n */\n public static add (out: Out, a: Out, b: Out) {\n out.x = a.x + b.x;\n out.y = a.y + b.y;\n out.z = a.z + b.z;\n out.w = a.w + b.w;\n return out;\n }\n\n /**\n * !#zh 逐元素向量减法\n * !#en Element-wise vector subtraction\n * @method subtract\n * @typescript\n * subtract (out: Out, a: Out, b: Out): Out\n * @static\n */\n public static subtract (out: Out, a: Out, b: Out) {\n out.x = a.x - b.x;\n out.y = a.y - b.y;\n out.z = a.z - b.z;\n out.w = a.w - b.w;\n return out;\n }\n\n /**\n * !#zh 逐元素向量乘法\n * !#en Element-wise vector multiplication\n * @method multiply\n * @typescript\n * multiply (out: Out, a: Out, b: Out): Out\n * @static\n */\n public static multiply (out: Out, a: Out, b: Out) {\n out.x = a.x * b.x;\n out.y = a.y * b.y;\n out.z = a.z * b.z;\n out.w = a.w * b.w;\n return out;\n }\n\n /**\n * !#zh 逐元素向量除法\n * !#en Element-wise vector division\n * @method divide\n * @typescript\n * divide (out: Out, a: Out, b: Out): Out\n * @static\n */\n public static divide (out: Out, a: Out, b: Out) {\n out.x = a.x / b.x;\n out.y = a.y / b.y;\n out.z = a.z / b.z;\n out.w = a.w / b.w;\n return out;\n }\n\n /**\n * !#zh 逐元素向量向上取整\n * !#en Rounding up by elements of the vector\n * @method ceil\n * @typescript\n * ceil (out: Out, a: Out): Out\n * @static\n */\n public static ceil (out: Out, a: Out) {\n out.x = Math.ceil(a.x);\n out.y = Math.ceil(a.y);\n out.z = Math.ceil(a.z);\n out.w = Math.ceil(a.w);\n return out;\n }\n\n /**\n * !#zh 逐元素向量向下取整\n * !#en Element vector by rounding down\n * @method floor\n * @typescript\n * floor (out: Out, a: Out): Out\n * @static\n */\n public static floor (out: Out, a: Out) {\n out.x = Math.floor(a.x);\n out.y = Math.floor(a.y);\n out.z = Math.floor(a.z);\n out.w = Math.floor(a.w);\n return out;\n }\n\n /**\n * !#zh 逐元素向量最小值\n * !#en The minimum by-element vector\n * @method min\n * @typescript\n * min (out: Out, a: Out, b: Out): Out\n * @static\n */\n public static min (out: Out, a: Out, b: Out) {\n out.x = Math.min(a.x, b.x);\n out.y = Math.min(a.y, b.y);\n out.z = Math.min(a.z, b.z);\n out.w = Math.min(a.w, b.w);\n return out;\n }\n\n /**\n * !#zh 逐元素向量最大值\n * !#en The maximum value of the element-wise vector\n * @method max\n * @typescript\n * max (out: Out, a: Out, b: Out): Out\n * @static\n */\n public static max (out: Out, a: Out, b: Out) {\n out.x = Math.max(a.x, b.x);\n out.y = Math.max(a.y, b.y);\n out.z = Math.max(a.z, b.z);\n out.w = Math.max(a.w, b.w);\n return out;\n }\n\n /**\n * !#zh 逐元素向量四舍五入取整\n * !#en Element-wise vector of rounding to whole\n * @method round\n * @typescript\n * round (out: Out, a: Out): Out\n * @static\n */\n public static round (out: Out, a: Out) {\n out.x = Math.round(a.x);\n out.y = Math.round(a.y);\n out.z = Math.round(a.z);\n out.w = Math.round(a.w);\n return out;\n }\n\n /**\n * !#zh 向量标量乘法\n * !#en Vector scalar multiplication\n * @method multiplyScalar\n * @typescript\n * multiplyScalar (out: Out, a: Out, b: number): Out\n * @static\n */\n public static multiplyScalar (out: Out, a: Out, b: number) {\n out.x = a.x * b;\n out.y = a.y * b;\n out.z = a.z * b;\n out.w = a.w * b;\n return out;\n }\n\n /**\n * !#zh 逐元素向量乘加: A + B * scale\n * !#en Element-wise vector multiply add: A + B * scale\n * @method scaleAndAdd\n * @typescript\n * scaleAndAdd (out: Out, a: Out, b: Out, scale: number): Out\n * @static\n */\n public static scaleAndAdd (out: Out, a: Out, b: Out, scale: number) {\n out.x = a.x + (b.x * scale);\n out.y = a.y + (b.y * scale);\n out.z = a.z + (b.z * scale);\n out.w = a.w + (b.w * scale);\n return out;\n }\n\n /**\n * !#zh 求两向量的欧氏距离\n * !#en Seeking two vectors Euclidean distance\n * @method distance\n * @typescript\n * distance (a: Out, b: Out): number\n * @static\n */\n public static distance (a: Out, b: Out) {\n const x = b.x - a.x;\n const y = b.y - a.y;\n const z = b.z - a.z;\n const w = b.w - a.w;\n return Math.sqrt(x * x + y * y + z * z + w * w);\n }\n\n /**\n * !#zh 求两向量的欧氏距离平方\n * !#en Euclidean distance squared seeking two vectors\n * @method squaredDistance\n * @typescript\n * squaredDistance (a: Out, b: Out): number\n * @static\n */\n public static squaredDistance (a: Out, b: Out) {\n const x = b.x - a.x;\n const y = b.y - a.y;\n const z = b.z - a.z;\n const w = b.w - a.w;\n return x * x + y * y + z * z + w * w;\n }\n\n /**\n * !#zh 求向量长度\n * !#en Seeking vector length\n * @method len\n * @typescript\n * len (a: Out): number\n * @static\n */\n public static len (a: Out) {\n _x = a.x;\n _y = a.y;\n _z = a.z;\n _w = a.w;\n return Math.sqrt(_x * _x + _y * _y + _z * _z + _w * _w);\n }\n\n /**\n * !#zh 求向量长度平方\n * !#en Seeking squared vector length\n * @method lengthSqr\n * @typescript\n * lengthSqr (a: Out): number\n * @static\n */\n public static lengthSqr (a: Out) {\n _x = a.x;\n _y = a.y;\n _z = a.z;\n _w = a.w;\n return _x * _x + _y * _y + _z * _z + _w * _w;\n }\n\n /**\n * !#zh 逐元素向量取负\n * !#en By taking the negative elements of the vector\n * @method negate\n * @typescript\n * negate (out: Out, a: Out): Out\n * @static\n */\n public static negate (out: Out, a: Out) {\n out.x = -a.x;\n out.y = -a.y;\n out.z = -a.z;\n out.w = -a.w;\n return out;\n }\n\n /**\n * !#zh 逐元素向量取倒数,接近 0 时返回 Infinity\n * !#en Element vector by taking the inverse, return near 0 Infinity\n * @method inverse\n * @typescript\n * inverse (out: Out, a: Out): Out\n * @static\n */\n public static inverse (out: Out, a: Out) {\n out.x = 1.0 / a.x;\n out.y = 1.0 / a.y;\n out.z = 1.0 / a.z;\n out.w = 1.0 / a.w;\n return out;\n }\n\n /**\n * !#zh 逐元素向量取倒数,接近 0 时返回 0\n * !#en Element vector by taking the inverse, return near 0 0\n * @method inverseSafe\n * @typescript\n * inverseSafe (out: Out, a: Out): Out\n * @static\n */\n public static inverseSafe (out: Out, a: Out) {\n _x = a.x;\n _y = a.y;\n _z = a.z;\n _w = a.w;\n\n if (Math.abs(_x) < EPSILON) {\n out.x = 0;\n } else {\n out.x = 1.0 / _x;\n }\n\n if (Math.abs(_y) < EPSILON) {\n out.y = 0;\n } else {\n out.y = 1.0 / _y;\n }\n\n if (Math.abs(_z) < EPSILON) {\n out.z = 0;\n } else {\n out.z = 1.0 / _z;\n }\n\n if (Math.abs(_w) < EPSILON) {\n out.w = 0;\n } else {\n out.w = 1.0 / _w;\n }\n\n return out;\n }\n\n /**\n * !#zh 归一化向量\n * !#en Normalized vector\n * @method normalize\n * @typescript\n * normalize (out: Out, a: Out): Out\n * @static\n */\n public static normalize (out: Out, a: Out) {\n _x = a.x;\n _y = a.y;\n _z = a.z;\n _w = a.w;\n let len = _x * _x + _y * _y + _z * _z + _w * _w;\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n out.x = _x * len;\n out.y = _y * len;\n out.z = _z * len;\n out.w = _w * len;\n }\n return out;\n }\n\n /**\n * !#zh 向量点积(数量积)\n * !#en Vector dot product (scalar product)\n * @method dot\n * @typescript\n * dot (a: Out, b: Out): number\n * @static\n */\n public static dot (a: Out, b: Out) {\n return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w;\n }\n\n /**\n * !#zh 逐元素向量线性插值: A + t * (B - A)\n * !#en Vector element by element linear interpolation: A + t * (B - A)\n * @method lerp\n * @typescript\n * lerp (out: Out, a: Out, b: Out, t: number): Out\n * @static\n */\n public static lerp (out: Out, a: Out, b: Out, t: number) {\n out.x = a.x + t * (b.x - a.x);\n out.y = a.y + t * (b.y - a.y);\n out.z = a.z + t * (b.z - a.z);\n out.w = a.w + t * (b.w - a.w);\n return out;\n }\n\n /**\n * !#zh 生成一个在单位球体上均匀分布的随机向量\n * !#en Generates a uniformly distributed random vectors on the unit sphere\n * @method random\n * @typescript\n * random (out: Out, scale?: number): Out\n * @param scale 生成的向量长度\n * @static\n */\n public static random (out: Out, scale?: number) {\n scale = scale || 1.0;\n\n const phi = random() * 2.0 * Math.PI;\n const cosTheta = random() * 2 - 1;\n const sinTheta = Math.sqrt(1 - cosTheta * cosTheta);\n\n out.x = sinTheta * Math.cos(phi) * scale;\n out.y = sinTheta * Math.sin(phi) * scale;\n out.z = cosTheta * scale;\n out.w = 0;\n return out;\n }\n\n /**\n * !#zh 向量矩阵乘法\n * !#en Vector matrix multiplication\n * @method transformMat4\n * @typescript\n * transformMat4 (out: Out, a: Out, mat: MatLike): Out\n * @static\n */\n public static transformMat4 (out: Out, a: Out, mat: MatLike) {\n _x = a.x;\n _y = a.y;\n _z = a.z;\n _w = a.w;\n let m = mat.m;\n out.x = m[0] * _x + m[4] * _y + m[8] * _z + m[12] * _w;\n out.y = m[1] * _x + m[5] * _y + m[9] * _z + m[13] * _w;\n out.z = m[2] * _x + m[6] * _y + m[10] * _z + m[14] * _w;\n out.w = m[3] * _x + m[7] * _y + m[11] * _z + m[15] * _w;\n return out;\n }\n\n /**\n * !#zh 向量仿射变换\n * !#en Affine transformation vector\n * @method transformAffine\n * @typescript\n * transformAffine(out: Out, v: VecLike, mat: MatLike): Out\n * @static\n */\n public static transformAffine\n (out: Out, v: VecLike, mat: MatLike) {\n _x = v.x;\n _y = v.y;\n _z = v.z;\n _w = v.w;\n let m = mat.m;\n out.x = m[0] * _x + m[1] * _y + m[2] * _z + m[3] * _w;\n out.y = m[4] * _x + m[5] * _y + m[6] * _z + m[7] * _w;\n out.x = m[8] * _x + m[9] * _y + m[10] * _z + m[11] * _w;\n out.w = v.w;\n return out;\n }\n\n /**\n * !#zh 向量四元数乘法\n * !#en Vector quaternion multiplication\n * @method transformQuat\n * @typescript\n * transformQuat (out: Out, a: Out, q: QuatLike): Out\n * @static\n */\n public static transformQuat (out: Out, a: Out, q: QuatLike) {\n const { x, y, z } = a;\n\n _x = q.x;\n _y = q.y;\n _z = q.z;\n _w = q.w;\n\n // calculate quat * vec\n const ix = _w * x + _y * z - _z * y;\n const iy = _w * y + _z * x - _x * z;\n const iz = _w * z + _x * y - _y * x;\n const iw = -_x * x - _y * y - _z * z;\n\n // calculate result * inverse quat\n out.x = ix * _w + iw * -_x + iy * -_z - iz * -_y;\n out.y = iy * _w + iw * -_y + iz * -_x - ix * -_z;\n out.z = iz * _w + iw * -_z + ix * -_y - iy * -_x;\n out.w = a.w;\n return out;\n }\n\n /**\n * !#zh 向量等价判断\n * !#en Equivalent vectors Analyzing\n * @method strictEquals\n * @typescript\n * strictEquals (a: Out, b: Out): boolean\n * @static\n */\n public static strictEquals (a: Out, b: Out) {\n return a.x === b.x && a.y === b.y && a.z === b.z && a.w === b.w;\n }\n\n /**\n * !#zh 排除浮点数误差的向量近似等价判断\n * !#en Negative error vector floating point approximately equivalent Analyzing\n * @method equals\n * @typescript\n * equals (a: Out, b: Out, epsilon?: number): boolean\n * @static\n */\n public static equals (a: Out, b: Out, epsilon = EPSILON) {\n return (Math.abs(a.x - b.x) <= epsilon * Math.max(1.0, Math.abs(a.x), Math.abs(b.x)) &&\n Math.abs(a.y - b.y) <= epsilon * Math.max(1.0, Math.abs(a.y), Math.abs(b.y)) &&\n Math.abs(a.z - b.z) <= epsilon * Math.max(1.0, Math.abs(a.z), Math.abs(b.z)) &&\n Math.abs(a.w - b.w) <= epsilon * Math.max(1.0, Math.abs(a.w), Math.abs(b.w)));\n }\n\n /**\n * !#zh 向量转数组\n * !#en Vector transfer array\n * @method toArray\n * @typescript\n * toArray > (out: Out, v: IVec4Like, ofs?: number): Out\n * @param ofs 数组起始偏移量\n * @static\n */\n public static toArray > (out: Out, v: IVec4Like, ofs = 0) {\n out[ofs + 0] = v.x;\n out[ofs + 1] = v.y;\n out[ofs + 2] = v.z;\n out[ofs + 3] = v.w;\n return out;\n }\n\n /**\n * !#zh 数组转向量\n * !#en Array steering amount\n * @method fromArray\n * @typescript\n * fromArray (out: Out, arr: IWritableArrayLike, ofs?: number): Out\n * @param ofs 数组起始偏移量\n * @static\n */\n public static fromArray (out: Out, arr: IWritableArrayLike, ofs = 0) {\n out.x = arr[ofs + 0];\n out.y = arr[ofs + 1];\n out.z = arr[ofs + 2];\n out.w = arr[ofs + 3];\n return out;\n }\n\n /**\n * @property {Number} x\n */\n public x: number;\n\n /**\n * @property {Number} y\n */\n public y: number;\n\n /**\n * @property {Number} z\n */\n public z: number;\n\n /**\n * @property {Number} w\n */\n public w: number;\n\n /**\n * !#en\n * Constructor\n * see {{#crossLink \"cc/vec4:method\"}}cc.v4{{/crossLink}}\n * !#zh\n * 构造函数,可查看 {{#crossLink \"cc/vec4:method\"}}cc.v4{{/crossLink}}\n * @method constructor\n * @param {number} [x=0]\n * @param {number} [y=0]\n * @param {number} [z=0]\n * @param {number} [w=0]\n */\n constructor (x: number | Vec4 = 0, y: number = 0, z: number = 0, w: number = 0) {\n super();\n if (x && typeof x === 'object') {\n this.x = x.x;\n this.y = x.y;\n this.z = x.z;\n this.w = x.w;\n } else {\n this.x = x as number;\n this.y = y;\n this.z = z;\n this.w = w;\n }\n }\n\n /**\n * !#en clone a Vec4 value\n * !#zh 克隆一个 Vec4 值\n * @method clone\n * @return {Vec4}\n */\n public clone () {\n return new Vec4(this.x, this.y, this.z, this.w);\n }\n\n /**\n * !#en Set the current vector value with the given vector.\n * !#zh 用另一个向量设置当前的向量对象值。\n * @method set\n * @param {Vec4} newValue - !#en new value to set. !#zh 要设置的新值\n * @return {Vec4} returns this\n */\n public set (other: Vec4);\n\n public set (x?: number, y?: number, z?: number, w?: number);\n\n public set (x?: number | Vec4, y?: number, z?: number, w?: number) {\n if (x && typeof x === 'object') {\n this.x = x.x;\n this.y = x.y;\n this.z = x.z;\n this.w = x.w;\n } else {\n this.x = x as number || 0;\n this.y = y || 0;\n this.z = z || 0;\n this.w = w || 0;\n }\n return this;\n }\n\n /**\n * !#en Check whether the vector equals another one\n * !#zh 当前的向量是否与指定的向量相等。\n * @method equals\n * @param {Vec4} other\n * @param {number} [epsilon]\n * @return {Boolean}\n */\n public equals (other: Vec4, epsilon = EPSILON) {\n return (Math.abs(this.x - other.x) <= epsilon * Math.max(1.0, Math.abs(this.x), Math.abs(other.x)) &&\n Math.abs(this.y - other.y) <= epsilon * Math.max(1.0, Math.abs(this.y), Math.abs(other.y)) &&\n Math.abs(this.z - other.z) <= epsilon * Math.max(1.0, Math.abs(this.z), Math.abs(other.z)) &&\n Math.abs(this.w - other.w) <= epsilon * Math.max(1.0, Math.abs(this.w), Math.abs(other.w)));\n }\n\n /**\n * !#en Check whether the vector equals another one\n * !#zh 判断当前向量是否在误差范围内与指定分量的向量相等。\n * @method equals4f\n * @param {number} x - 相比较的向量的 x 分量。\n * @param {number} y - 相比较的向量的 y 分量。\n * @param {number} z - 相比较的向量的 z 分量。\n * @param {number} w - 相比较的向量的 w 分量。\n * @param {number} [epsilon] - 允许的误差,应为非负数。\n * @returns {Boolean} - 当两向量的各分量都在指定的误差范围内分别相等时,返回 `true`;否则返回 `false`。\n */\n public equals4f (x: number, y: number, z: number, w: number, epsilon = EPSILON) {\n return (Math.abs(this.x - x) <= epsilon * Math.max(1.0, Math.abs(this.x), Math.abs(x)) &&\n Math.abs(this.y - y) <= epsilon * Math.max(1.0, Math.abs(this.y), Math.abs(y)) &&\n Math.abs(this.z - z) <= epsilon * Math.max(1.0, Math.abs(this.z), Math.abs(z)) &&\n Math.abs(this.w - w) <= epsilon * Math.max(1.0, Math.abs(this.w), Math.abs(w)));\n }\n\n /**\n * !#en Check whether strict equals other Vec4\n * !#zh 判断当前向量是否与指定向量相等。两向量的各分量都分别相等时返回 `true`;否则返回 `false`。\n * @method strictEquals\n * @param {Vec4} other - 相比较的向量。\n * @returns {boolean}\n */\n public strictEquals (other: Vec4) {\n return this.x === other.x && this.y === other.y && this.z === other.z && this.w === other.w;\n }\n\n /**\n * !#en Check whether strict equals other Vec4\n * !#zh 判断当前向量是否与指定分量的向量相等。两向量的各分量都分别相等时返回 `true`;否则返回 `false`。\n * @method strictEquals4f\n * @param {number} x - 指定向量的 x 分量。\n * @param {number} y - 指定向量的 y 分量。\n * @param {number} z - 指定向量的 z 分量。\n * @param {number} w - 指定向量的 w 分量。\n * @returns {boolean}\n */\n public strictEquals4f (x: number, y: number, z: number, w: number) {\n return this.x === x && this.y === y && this.z === z && this.w === w;\n }\n\n /**\n * !#en Calculate linear interpolation result between this vector and another one with given ratio\n * !#zh 根据指定的插值比率,从当前向量到目标向量之间做插值。\n * @method lerp\n * @param {Vec4} to 目标向量。\n * @param {number} ratio 插值比率,范围为 [0,1]。\n * @returns {Vec4}\n */\n public lerp (to: Vec4, ratio: number) {\n _x = this.x;\n _y = this.y;\n _z = this.z;\n _w = this.w;\n this.x = _x + ratio * (to.x - _x);\n this.y = _y + ratio * (to.y - _y);\n this.z = _z + ratio * (to.z - _z);\n this.w = _w + ratio * (to.w - _w);\n return this;\n }\n\n /**\n * !#en Transform to string with vector informations\n * !#zh 返回当前向量的字符串表示。\n * @method toString\n * @returns {string} 当前向量的字符串表示。\n */\n public toString (): string {\n return `(${this.x.toFixed(2)}, ${this.y.toFixed(2)}, ${this.z.toFixed(2)}, ${this.w.toFixed(2)})`;\n }\n\n /**\n * !#en Clamp the vector between minInclusive and maxInclusive.\n * !#zh 设置当前向量的值,使其各个分量都处于指定的范围内。\n * @method clampf\n * @param {Vec4} minInclusive 每个分量都代表了对应分量允许的最小值。\n * @param {Vec4} maxInclusive 每个分量都代表了对应分量允许的最大值。\n * @returns {Vec4}\n */\n public clampf (minInclusive: Vec4, maxInclusive: Vec4) {\n this.x = clamp(this.x, minInclusive.x, maxInclusive.x);\n this.y = clamp(this.y, minInclusive.y, maxInclusive.y);\n this.z = clamp(this.z, minInclusive.z, maxInclusive.z);\n this.w = clamp(this.w, minInclusive.w, maxInclusive.w);\n return this;\n }\n\n /**\n * !#en Adds this vector. If you want to save result to another vector, use add() instead.\n * !#zh 向量加法。如果你想保存结果到另一个向量,使用 add() 代替。\n * @method addSelf\n * @param {Vec4} vector\n * @return {Vec4} returns this\n * @chainable\n */\n addSelf (vector: Vec4): this {\n this.x += vector.x;\n this.y += vector.y;\n this.z += vector.z;\n this.w += vector.w;\n return this;\n }\n\n /**\n * !#en Adds two vectors, and returns the new result.\n * !#zh 向量加法,并返回新结果。\n * @method add\n * @param {Vec4} vector\n * @param {Vec4} [out] - optional, the receiving vector, you can pass the same vec4 to save result to itself, if not provided, a new vec4 will be created\n * @return {Vec4} the result\n */\n add (vector: Vec4, out?: Vec4): Vec4 {\n out = out || new Vec4();\n out.x = this.x + vector.x;\n out.y = this.y + vector.y;\n out.z = this.z + vector.z;\n out.w = this.w + vector.w;\n return out;\n }\n\n /**\n * !#en Subtracts one vector from this, and returns the new result.\n * !#zh 向量减法,并返回新结果。\n * @method subtract\n * @param {Vec4} vector\n * @param {Vec4} [out] - optional, the receiving vector, you can pass the same vec4 to save result to itself, if not provided, a new vec4 will be created\n * @return {Vec4} the result\n */\n subtract (vector: Vec4, out?: Vec4): Vec4 {\n out = out || new Vec4();\n out.x = this.x - vector.x;\n out.y = this.y - vector.y;\n out.z = this.z - vector.z;\n out.w = this.w - vector.w;\n return out;\n }\n\n /**\n * !#en Multiplies this by a number.\n * !#zh 缩放当前向量。\n * @method multiplyScalar\n * @param {number} num\n * @return {Vec4} returns this\n * @chainable\n */\n multiplyScalar (num: number): this {\n this.x *= num;\n this.y *= num;\n this.z *= num;\n this.w *= num;\n return this;\n }\n\n /**\n * !#en Multiplies two vectors.\n * !#zh 分量相乘。\n * @method multiply\n * @param {Vec4} vector\n * @return {Vec4} returns this\n * @chainable\n */\n multiply (vector: Vec4): this {\n this.x *= vector.x;\n this.y *= vector.y;\n this.z *= vector.z;\n this.w *= vector.w;\n return this;\n }\n\n /**\n * !#en Divides by a number.\n * !#zh 向量除法。\n * @method divide\n * @param {number} num\n * @return {Vec4} returns this\n * @chainable\n */\n divide (num: number): this {\n this.x /= num;\n this.y /= num;\n this.z /= num;\n this.w /= num;\n return this;\n }\n\n /**\n * !#en Negates the components.\n * !#zh 向量取反\n * @method negate\n * @return {Vec4} returns this\n * @chainable\n */\n negate (): this {\n this.x = -this.x;\n this.y = -this.y;\n this.z = -this.z;\n this.w = -this.w;\n return this;\n }\n\n /**\n * !#en Dot product\n * !#zh 当前向量与指定向量进行点乘。\n * @method dot\n * @param {Vec4} [vector]\n * @return {number} the result\n */\n dot (vector: Vec4): number {\n return this.x * vector.x + this.y * vector.y + this.z * vector.z + this.w * vector.w;\n }\n\n /**\n * !#en Cross product\n * !#zh 当前向量与指定向量进行叉乘。\n * @method cross\n * @param {Vec4} vector\n * @param {Vec4} [out]\n * @return {Vec4} the result\n */\n cross (vector: Vec4, out?: Vec4): Vec4 {\n out = out || new Vec4();\n const { x: ax, y: ay, z: az } = this;\n const { x: bx, y: by, z: bz } = vector;\n\n out.x = ay * bz - az * by;\n out.y = az * bx - ax * bz;\n out.z = ax * by - ay * bx;\n return out;\n }\n\n /**\n * !#en Returns the length of this vector.\n * !#zh 返回该向量的长度。\n * @method len\n * @return {number} the result\n * @example\n * var v = cc.v4(10, 10);\n * v.len(); // return 14.142135623730951;\n */\n len (): number {\n let x = this.x,\n y = this.y,\n z = this.z,\n w = this.w;\n return Math.sqrt(x * x + y * y + z * z + w * w);\n }\n\n /**\n * !#en Returns the squared length of this vector.\n * !#zh 返回该向量的长度平方。\n * @method lengthSqr\n * @return {number} the result\n */\n lengthSqr (): number {\n let x = this.x,\n y = this.y,\n z = this.z,\n w = this.w;\n return x * x + y * y + z * z + w * w;\n }\n\n /**\n * !#en Make the length of this vector to 1.\n * !#zh 向量归一化,让这个向量的长度为 1。\n * @method normalizeSelf\n * @return {Vec4} returns this\n * @chainable\n */\n normalizeSelf () {\n this.normalize(this);\n return this;\n }\n\n /**\n * !#en\n * Returns this vector with a magnitude of 1.
\n *
\n * Note that the current vector is unchanged and a new normalized vector is returned. If you want to normalize the current vector, use normalizeSelf function.\n * !#zh\n * 返回归一化后的向量。
\n *
\n * 注意,当前向量不变,并返回一个新的归一化向量。如果你想来归一化当前向量,可使用 normalizeSelf 函数。\n * @method normalize\n * @param {Vec4} [out] - optional, the receiving vector, you can pass the same vec4 to save result to itself, if not provided, a new vec4 will be created\n * @return {Vec4} result\n */\n normalize (out?: Vec4): Vec4 {\n out = out || new Vec4();\n _x = this.x;\n _y = this.y;\n _z = this.z;\n _w = this.w;\n let len = _x * _x + _y * _y + _z * _z + _w * _w;\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n out.x = _x * len;\n out.y = _y * len;\n out.z = _z * len;\n out.w = _w * len;\n }\n return out;\n }\n\n /**\n * Transforms the vec4 with a mat4. 4th vector component is implicitly '1'\n * @method transformMat4\n * @param {Mat4} m matrix to transform with\n * @param {Vec4} [out] the receiving vector, you can pass the same vec4 to save result to itself, if not provided, a new vec4 will be created\n * @returns {Vec4} out\n */\n transformMat4 (matrix: Mat4, out: Vec4): Vec4 {\n out = out || new Vec4();\n _x = this.x;\n _y = this.y;\n _z = this.z;\n _w = this.w;\n let m = matrix.m;\n out.x = m[0] * _x + m[4] * _y + m[8] * _z + m[12] * _w;\n out.y = m[1] * _x + m[5] * _y + m[9] * _z + m[13] * _w;\n out.z = m[2] * _x + m[6] * _y + m[10] * _z + m[14] * _w;\n out.w = m[3] * _x + m[7] * _y + m[11] * _z + m[15] * _w;\n return out;\n }\n\n /**\n * Returns the maximum value in x, y, z, w.\n * @method maxAxis\n * @returns {number}\n */\n maxAxis (): number {\n return Math.max(this.x, this.y, this.z, this.w);\n }\n}\n\nCCClass.fastDefine('cc.Vec4', Vec4, { x: 0, y: 0, z: 0, w: 0 });\n\nexport function v4 (other: Vec4): Vec4;\nexport function v4 (x?: number, y?: number, z?: number, w?: number): Vec4;\n\nexport function v4 (x?: number | Vec4, y?: number, z?: number, w?: number) {\n return new Vec4(x as any, y, z, w);\n}\n\ncc.v4 = v4;\ncc.Vec4 = Vec4;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n\nvar js = cc.js;\n\nif (CC_DEBUG) {\n\n function deprecateEnum (obj, oldPath, newPath, hasTypePrefixBefore) {\n if (!CC_SUPPORT_JIT) {\n return;\n }\n hasTypePrefixBefore = hasTypePrefixBefore !== false;\n var enumDef = Function('return ' + newPath)();\n var entries = cc.Enum.getList(enumDef);\n var delimiter = hasTypePrefixBefore ? '_' : '.';\n for (var i = 0; i < entries.length; i++) {\n var entry = entries[i].name;\n var oldPropName;\n if (hasTypePrefixBefore) {\n var oldTypeName = oldPath.split('.').slice(-1)[0];\n oldPropName = oldTypeName + '_' + entry;\n }\n else {\n oldPropName = entry;\n }\n js.get(obj, oldPropName, function (entry) {\n cc.errorID(1400, oldPath + delimiter + entry, newPath + '.' + entry);\n return enumDef[entry];\n }.bind(null, entry));\n }\n }\n\n function markAsRemoved (ownerCtor, removedProps, ownerName) {\n if (!ownerCtor) {\n // 可能被裁剪了\n return;\n }\n ownerName = ownerName || js.getClassName(ownerCtor);\n removedProps.forEach(function (prop) {\n function error () {\n cc.errorID(1406, ownerName, prop);\n }\n js.getset(ownerCtor.prototype, prop, error, error);\n });\n }\n\n function markAsDeprecated (ownerCtor, deprecatedProps, ownerName) {\n if (!ownerCtor) {\n return;\n }\n ownerName = ownerName || js.getClassName(ownerCtor);\n let descriptors = Object.getOwnPropertyDescriptors(ownerCtor.prototype);\n deprecatedProps.forEach(function (prop) {\n let deprecatedProp = prop[0];\n let newProp = prop[1];\n let descriptor = descriptors[deprecatedProp];\n js.getset(ownerCtor.prototype, deprecatedProp, function () {\n cc.warnID(1400, `${ownerName}.${deprecatedProp}`, `${ownerName}.${newProp}`);\n return descriptor.get.call(this);\n }, function (v) {\n cc.warnID(1400, `${ownerName}.${deprecatedProp}`, `${ownerName}.${newProp}`);\n descriptor.set.call(this, v);\n });\n })\n }\n\n function markAsRemovedInObject (ownerObj, removedProps, ownerName) {\n if (!ownerObj) {\n // 可能被裁剪了\n return;\n }\n removedProps.forEach(function (prop) {\n function error () {\n cc.errorID(1406, ownerName, prop);\n }\n js.getset(ownerObj, prop, error);\n });\n }\n\n function provideClearError (owner, obj, ownerName) {\n if (!owner) {\n // 可能被裁剪了\n return;\n }\n var className = ownerName || cc.js.getClassName(owner);\n var Info = 'Sorry, ' + className + '.%s is removed, please use %s instead.';\n for (var prop in obj) {\n function define (prop, getset) {\n function accessor (newProp) {\n cc.error(Info, prop, newProp);\n }\n if (!Array.isArray(getset)) {\n getset = getset.split(',')\n .map(function (x) {\n return x.trim();\n });\n }\n try {\n js.getset(owner, prop, accessor.bind(null, getset[0]), getset[1] && accessor.bind(null, getset[1]));\n }\n catch (e) {}\n }\n var getset = obj[prop];\n if (prop[0] === '*') {\n // get set\n var etProp = prop.slice(1);\n define('g' + etProp, getset);\n define('s' + etProp, getset);\n }\n else {\n prop.split(',')\n .map(function (x) {\n return x.trim();\n })\n .forEach(function (x) {\n define(x, getset);\n });\n }\n }\n }\n\n function markFunctionWarning (ownerCtor, obj, ownerName) {\n if (!ownerCtor) {\n // 可能被裁剪了\n return;\n }\n ownerName = ownerName || js.getClassName(ownerCtor);\n for (var prop in obj) {\n (function(){\n var propName = prop;\n var originFunc = ownerCtor[propName];\n if (!originFunc) return;\n\n function warn () {\n cc.warn('Sorry, %s.%s is deprecated. Please use %s instead', ownerName, propName, obj[propName]);\n return originFunc.apply(this, arguments);\n }\n\n ownerCtor[propName] = warn;\n })();\n }\n }\n // remove cc.info\n js.get(cc, 'info', function () {\n cc.errorID(1400, 'cc.info', 'cc.log');\n return cc.log;\n });\n // cc.spriteFrameCache\n js.get(cc, \"spriteFrameCache\", function () {\n cc.errorID(1404);\n });\n\n // cc.vmath\n js.get(cc, 'vmath', function () {\n cc.warnID(1400, 'cc.vmath', 'cc.math');\n return cc.math;\n });\n js.get(cc.math, 'vec2', function () {\n cc.warnID(1400, 'cc.vmath.vec2', 'cc.Vec2');\n return cc.Vec2;\n })\n js.get(cc.math, 'vec3', function () {\n cc.warnID(1400, 'cc.vmath.vec3', 'cc.Vec3');\n return cc.Vec3;\n })\n js.get(cc.math, 'vec4', function () {\n cc.warnID(1400, 'cc.vmath.vec4', 'cc.Vec4');\n return cc.Vec4;\n })\n js.get(cc.math, 'mat4', function () {\n cc.warnID(1400, 'cc.vmath.mat4', 'cc.Mat4');\n return cc.Mat4;\n })\n js.get(cc.math, 'mat3', function () {\n cc.warnID(1400, 'cc.vmath.mat3', 'cc.Mat3');\n return cc.Mat3;\n })\n js.get(cc.math, 'quat', function () {\n cc.warnID(1400, 'cc.vmath.quat', 'cc.Quat');\n return cc.Quat;\n })\n\n // SpriteFrame\n js.get(cc.SpriteFrame.prototype, '_textureLoaded', function () {\n cc.errorID(1400, 'spriteFrame._textureLoaded', 'spriteFrame.textureLoaded()');\n return this.textureLoaded();\n });\n markAsRemoved(cc.SpriteFrame, [\n 'addLoadedEventListener'\n ]);\n markFunctionWarning(cc.Sprite.prototype, {\n setState: 'cc.Sprite.setMaterial',\n getState: 'cc.Sprite.getMaterial'\n }, 'cc.Sprite');\n\n js.get(cc.SpriteFrame.prototype, 'clearTexture', function () {\n cc.errorID(1406, 'cc.SpriteFrame', 'clearTexture');\n return function () {};\n });\n\n // cc.textureCache\n js.get(cc, 'textureCache', function () {\n cc.errorID(1406, 'cc', 'textureCache');\n });\n\n // Texture\n let Texture2D = cc.Texture2D;\n js.get(Texture2D.prototype, 'releaseTexture', function () {\n cc.errorID(1400, 'texture.releaseTexture()', 'texture.destroy()');\n return this.destroy;\n });\n\n js.get(Texture2D.prototype, 'getName', function () {\n cc.errorID(1400, 'texture.getName()', 'texture._glID');\n return function () {\n return this._glID || null;\n };\n });\n\n js.get(Texture2D.prototype, 'isLoaded', function () {\n cc.errorID(1400, 'texture.isLoaded function', 'texture.loaded property');\n return (function () {\n return this.loaded;\n });\n });\n\n js.get(Texture2D.prototype, 'setAntiAliasTexParameters', function () {\n cc.errorID(1400, 'texture.setAntiAliasTexParameters()', 'texture.setFilters(cc.Texture2D.Filter.LINEAR, cc.Texture2D.Filter.LINEAR)');\n return function () {\n this.setFilters(Texture2D.Filter.LINEAR, Texture2D.Filter.LINEAR);\n };\n });\n\n js.get(Texture2D.prototype, 'setAliasTexParameters', function () {\n cc.errorID(1400, 'texture.setAntiAliasTexParameters()', 'texture.setFilters(cc.Texture2D.Filter.NEAREST, cc.Texture2D.Filter.NEAREST)');\n return function () {\n this.setFilters(Texture2D.Filter.NEAREST, Texture2D.Filter.NEAREST);\n };\n });\n\n // cc.macro\n markAsRemovedInObject(cc.macro, [\n 'ENABLE_GL_STATE_CACHE',\n 'FIX_ARTIFACTS_BY_STRECHING_TEXEL',\n ], 'cc.macro');\n\n provideClearError(cc.macro, {\n PI: 'Math.PI',\n PI2: 'Math.PI * 2',\n FLT_MAX: 'Number.MAX_VALUE',\n FLT_MIN: 'Number.MIN_VALUE',\n UINT_MAX: 'Number.MAX_SAFE_INTEGER'\n }, 'cc.macro');\n\n // cc.game\n markAsRemovedInObject(cc.game, [\n 'CONFIG_KEY',\n ], 'cc.game');\n\n // cc.sys\n markAsRemovedInObject(cc.sys, [\n 'dumpRoot',\n 'cleanScript',\n 'BROWSER_TYPE_WECHAT_GAME',\n 'BROWSER_TYPE_WECHAT_GAME_SUB',\n 'BROWSER_TYPE_BAIDU_GAME',\n 'BROWSER_TYPE_BAIDU_GAME_SUB',\n 'BROWSER_TYPE_XIAOMI_GAME',\n 'BROWSER_TYPE_ALIPAY_GAME',\n ], 'cc.sys');\n\n // cc.Director\n provideClearError(cc.Director, {\n EVENT_PROJECTION_CHANGED: '',\n EVENT_BEFORE_VISIT: 'EVENT_AFTER_UPDATE',\n EVENT_AFTER_VISIT: 'EVENT_BEFORE_DRAW',\n }, 'cc.Director');\n markFunctionWarning(cc.Director.prototype, {\n convertToGL: 'cc.view.convertToLocationInView',\n convertToUI: '',\n getWinSize: 'cc.winSize',\n getWinSizeInPixels: 'cc.winSize',\n getVisibleSize: 'cc.view.getVisibleSize',\n getVisibleOrigin: 'cc.view.getVisibleOrigin',\n purgeCachedData: 'cc.assetManager.releaseAll',\n setDepthTest: 'cc.Camera.main.depth',\n setClearColor: 'cc.Camera.main.backgroundColor',\n getRunningScene: 'cc.director.getScene',\n getAnimationInterval: 'cc.game.getFrameRate',\n setAnimationInterval: 'cc.game.setFrameRate',\n isDisplayStats: 'cc.debug.isDisplayStats',\n setDisplayStats: 'cc.debug.setDisplayStats',\n stopAnimation: 'cc.game.pause',\n startAnimation: 'cc.game.resume',\n }, 'cc.Director');\n markAsRemoved(cc.Director, [\n 'pushScene',\n 'popScene',\n 'popToRootScene',\n 'popToSceneStackLevel',\n 'setProjection',\n 'getProjection',\n ], 'cc.Director');\n\n // Scheduler\n provideClearError(cc.Scheduler, {\n scheduleCallbackForTarget: 'schedule',\n scheduleUpdateForTarget: 'scheduleUpdate',\n unscheduleCallbackForTarget: 'unschedule',\n unscheduleUpdateForTarget: 'unscheduleUpdate',\n unscheduleAllCallbacksForTarget: 'unscheduleAllForTarget',\n unscheduleAllCallbacks: 'unscheduleAll',\n unscheduleAllCallbacksWithMinPriority: 'unscheduleAllWithMinPriority'\n }, 'cc.Scheduler');\n\n // cc.view\n provideClearError(cc.view, {\n adjustViewPort: 'adjustViewportMeta',\n setViewPortInPoints: 'setViewportInPoints',\n getViewPortRect: 'getViewportRect'\n }, 'cc.view');\n markAsRemovedInObject(cc.view, [\n 'isViewReady',\n 'setTargetDensityDPI',\n 'getTargetDensityDPI',\n 'setFrameZoomFactor',\n 'canSetContentScaleFactor',\n 'setContentTranslateLeftTop',\n 'getContentTranslateLeftTop',\n 'setViewName',\n 'getViewName'\n ], 'cc.view');\n\n // cc.PhysicsManager\n markAsRemoved(cc.PhysicsManager, [\n 'attachDebugDrawToCamera',\n 'detachDebugDrawFromCamera',\n ]);\n\n // cc.CollisionManager\n markAsRemoved(cc.CollisionManager, [\n 'attachDebugDrawToCamera',\n 'detachDebugDrawFromCamera',\n ]);\n\n // cc.Node\n provideClearError(cc._BaseNode.prototype, {\n 'tag': 'name',\n 'getTag': 'name',\n 'setTag': 'name',\n 'getChildByTag': 'getChildByName',\n 'removeChildByTag': 'getChildByName(name).destroy()'\n });\n\n markAsRemoved(cc.Node, [\n '_cascadeColorEnabled',\n 'cascadeColor',\n 'isCascadeColorEnabled',\n 'setCascadeColorEnabled',\n '_cascadeOpacityEnabled',\n 'cascadeOpacity',\n 'isCascadeOpacityEnabled',\n 'setCascadeOpacityEnabled',\n 'opacityModifyRGB',\n 'isOpacityModifyRGB',\n 'setOpacityModifyRGB',\n 'ignoreAnchor',\n 'isIgnoreAnchorPointForPosition',\n 'ignoreAnchorPointForPosition',\n 'isRunning',\n '_sgNode',\n ]);\n\n markFunctionWarning(cc.Node.prototype, {\n getNodeToParentTransform: 'getLocalMatrix',\n getNodeToParentTransformAR: 'getLocalMatrix',\n getNodeToWorldTransform: 'getWorldMatrix',\n getNodeToWorldTransformAR: 'getWorldMatrix',\n getParentToNodeTransform: 'getLocalMatrix',\n getWorldToNodeTransform: 'getWorldMatrix',\n convertTouchToNodeSpace: 'convertToNodeSpaceAR',\n convertTouchToNodeSpaceAR: 'convertToNodeSpaceAR',\n convertToWorldSpace: 'convertToWorldSpaceAR',\n convertToNodeSpace: 'convertToNodeSpaceAR'\n });\n\n provideClearError(cc.Node.prototype, {\n getRotationX: 'rotationX',\n setRotationX: 'rotationX',\n getRotationY: 'rotationY',\n setRotationY: 'rotationY',\n getPositionX: 'x',\n setPositionX: 'x',\n getPositionY: 'y',\n setPositionY: 'y',\n getSkewX: 'skewX',\n setSkewX: 'skewX',\n getSkewY: 'skewY',\n setSkewY: 'skewY',\n getScaleX: 'scaleX',\n setScaleX: 'scaleX',\n getScaleY: 'scaleY',\n setScaleY: 'scaleY',\n getOpacity: 'opacity',\n setOpacity: 'opacity',\n getColor: 'color',\n setColor: 'color',\n getLocalZOrder: 'zIndex',\n setLocalZOrder: 'zIndex',\n });\n\n provideClearError(cc.Sprite.prototype, {\n setInsetLeft: 'cc.SpriteFrame insetLeft',\n setInsetRight: 'cc.SpriteFrame insetRight',\n setInsetTop: 'cc.SpriteFrame insetTop',\n setInsetBottom: 'cc.SpriteFrame insetBottom',\n });\n\n // cc.Material\n cc.Material.getInstantiatedBuiltinMaterial = cc.MaterialVariant.createWithBuiltin;\n cc.Material.getInstantiatedMaterial = cc.MaterialVariant.create;\n markFunctionWarning(cc.Material, {\n getInstantiatedBuiltinMaterial: 'cc.MaterialVariant.createWithBuiltin',\n getInstantiatedMaterial: 'cc.MaterialVariant.create'\n });\n\n // cc.RenderComponent\n cc.js.getset(cc.RenderComponent.prototype, 'sharedMaterials', function () {\n cc.warnID(1400, 'sharedMaterials', 'getMaterials');\n return this.materials;\n }, function (v) {\n cc.warnID(1400, 'sharedMaterials', 'setMaterial');\n this.materials = v;\n })\n\n // cc.Camera\n markFunctionWarning(cc.Camera.prototype, {\n getNodeToCameraTransform: 'getWorldToScreenMatrix2D',\n getCameraToWorldPoint: 'getScreenToWorldPoint',\n getWorldToCameraPoint: 'getWorldToScreenPoint',\n getCameraToWorldMatrix: 'getScreenToWorldMatrix2D',\n getWorldToCameraMatrix: 'getWorldToScreenMatrix2D'\n });\n\n markAsRemoved(cc.Camera, [\n 'addTarget',\n 'removeTarget',\n 'getTargets'\n ]);\n\n // SCENE\n var ERR = '\"%s\" is not defined in the Scene, it is only defined in normal nodes.';\n CC_EDITOR || Object.defineProperties(cc.Scene.prototype, {\n active: {\n get: function () {\n cc.error(ERR, 'active');\n return true;\n },\n set: function () {\n cc.error(ERR, 'active');\n }\n },\n activeInHierarchy: {\n get: function () {\n cc.error(ERR, 'activeInHierarchy');\n return true;\n },\n },\n getComponent: {\n get: function () {\n cc.error(ERR, 'getComponent');\n return function () {\n return null;\n };\n }\n },\n addComponent: {\n get: function () {\n cc.error(ERR, 'addComponent');\n return function () {\n return null;\n };\n }\n },\n });\n\n // cc.dynamicAtlasManager\n markAsRemovedInObject(cc.dynamicAtlasManager, [\n 'minFrameSize'\n ], 'cc.dynamicAtlasManager')\n\n // light component\n if (cc.Light) {\n markAsRemovedInObject(cc.Light.prototype, [\n 'shadowDepthScale',\n ], 'cc.Light.prototype');\n }\n\n // Value types\n provideClearError(cc, {\n // AffineTransform\n affineTransformMake: 'cc.AffineTransform.create',\n affineTransformMakeIdentity: 'cc.AffineTransform.identity',\n affineTransformClone: 'cc.AffineTransform.clone',\n affineTransformConcat: 'cc.AffineTransform.concat',\n affineTransformConcatIn: 'cc.AffineTransform.concat',\n affineTransformInvert: 'cc.AffineTransform.invert',\n affineTransformInvertIn: 'cc.AffineTransform.invert',\n affineTransformInvertOut: 'cc.AffineTransform.invert',\n affineTransformEqualToTransform: 'cc.AffineTransform.equal',\n pointApplyAffineTransform: 'cc.AffineTransform.transformVec2',\n sizeApplyAffineTransform: 'cc.AffineTransform.transformSize',\n rectApplyAffineTransform: 'cc.AffineTransform.transformRect',\n obbApplyAffineTransform: 'cc.AffineTransform.transformObb',\n\n // Vec2\n pointEqualToPoint: 'cc.Vec2 equals',\n\n // Size\n sizeEqualToSize: 'cc.Size equals',\n\n // Rect\n rectEqualToRect: 'rectA.equals(rectB)',\n rectContainsRect: 'rectA.containsRect(rectB)',\n rectContainsPoint: 'rect.contains(vec2)',\n rectOverlapsRect: 'rectA.intersects(rectB)',\n rectIntersectsRect: 'rectA.intersects(rectB)',\n rectIntersection: 'rectA.intersection(intersection, rectB)',\n rectUnion: 'rectA.union(union, rectB)',\n rectGetMaxX: 'rect.xMax',\n rectGetMidX: 'rect.center.x',\n rectGetMinX: 'rect.xMin',\n rectGetMaxY: 'rect.yMax',\n rectGetMidY: 'rect.center.y',\n rectGetMinY: 'rect.yMin',\n\n // Color\n colorEqual: 'colorA.equals(colorB)',\n hexToColor: 'color.fromHEX(hexColor)',\n colorToHex: 'color.toHEX()',\n\n // Enums\n TextAlignment: 'cc.macro.TextAlignment',\n VerticalTextAlignment: 'cc.macro.VerticalTextAlignment',\n\n // Point Extensions\n pNeg: 'p.neg()',\n pAdd: 'p1.add(p2)',\n pSub: 'p1.sub(p2)',\n pMult: 'p.mul(factor)',\n pMidpoint: 'p1.add(p2).mul(0.5)',\n pDot: 'p1.dot(p2)',\n pCross: 'p1.cross(p2)',\n pPerp: 'p.rotate(-90 * Math.PI / 180)',\n pRPerp: 'p.rotate(90 * Math.PI / 180)',\n pProject: 'p1.project(p2)',\n pLengthSQ: 'p.magSqr()',\n pDistanceSQ: 'p1.sub(p2).magSqr()',\n pLength: 'p.mag()',\n pDistance: 'p1.sub(p2).mag()',\n pNormalize: 'p.normalize()',\n pForAngle: 'cc.v2(Math.cos(a), Math.sin(a))',\n pToAngle: 'Math.atan2(v.y, v.x)',\n pZeroIn: 'p.x = p.y = 0',\n pIn: 'p1.set(p2)',\n pMultIn: 'p.mulSelf(factor)',\n pSubIn: 'p1.subSelf(p2)',\n pAddIn: 'p1.addSelf(p2)',\n pNormalizeIn: 'p.normalizeSelf()',\n pSameAs: 'p1.equals(p2)',\n pAngle: 'v1.angle(v2)',\n pAngleSigned: 'v1.signAngle(v2)',\n pRotateByAngle: 'p.rotate(radians)',\n pCompMult: 'v1.multiply(v2)',\n pFuzzyEqual: 'v1.fuzzyEquals(v2, tolerance)',\n pLerp: 'p.lerp(endPoint, ratio)',\n pClamp: 'p.clampf(min_inclusive, max_inclusive)',\n\n rand: 'Math.random() * 0xffffff',\n randomMinus1To1: '(Math.random() - 0.5) * 2',\n\n container: 'cc.game.container',\n _canvas: 'cc.game.canvas',\n _renderType: 'cc.game.renderType',\n\n _getError: 'cc.debug.getError',\n _initDebugSetting: 'cc.debug._resetDebugSetting',\n DebugMode: 'cc.debug.DebugMode',\n }, 'cc');\n markAsRemovedInObject(cc, [\n 'blendFuncDisable',\n\n 'pFromSize',\n 'pCompOp',\n 'pIntersectPoint',\n 'pSegmentIntersect',\n 'pLineIntersect',\n\n 'obbApplyMatrix',\n\n 'getImageFormatByData',\n\n 'initEngine',\n ], 'cc');\n markFunctionWarning(cc, {\n // cc.p\n p: 'cc.v2'\n }, 'cc');\n // cc.Rect\n provideClearError(cc.Rect, {\n contain: 'rectA.contains(rectB)',\n transformMat4: 'rect.transformMat4(out, mat4)'\n });\n // cc.Color\n provideClearError(cc.Color, {\n rgb2hsv: 'color.toHSV()',\n hsv2rgb: 'color.fromHSV(h, s, v)'\n });\n markFunctionWarning(cc.Color, {\n fromHex: 'cc.Color.fromHEX',\n })\n\n // macro functions\n js.get(cc, 'lerp', function () {\n cc.errorID(1400, 'cc.lerp', 'cc.misc.lerp');\n return cc.misc.lerp;\n });\n js.get(cc, 'random0To1', function () {\n cc.errorID(1400, 'cc.random0To1', 'Math.random');\n return Math.random;\n });\n js.get(cc, 'degreesToRadians', function () {\n cc.errorID(1400, 'cc.degreesToRadians', 'cc.misc.degreesToRadians');\n return cc.misc.degreesToRadians;\n });\n js.get(cc, 'radiansToDegrees', function () {\n cc.errorID(1400, 'cc.radiansToDegrees', 'cc.misc.radiansToDegrees');\n return cc.misc.radiansToDegrees;\n });\n js.get(cc, 'clampf', function () {\n cc.errorID(1400, 'cc.clampf', 'cc.misc.clampf');\n return cc.misc.clampf;\n });\n js.get(cc, 'clamp01', function () {\n cc.errorID(1400, 'cc.clamp01', 'cc.misc.clamp01');\n return cc.misc.clamp01;\n });\n js.get(cc, 'ImageFormat', function () {\n cc.errorID(1400, 'cc.ImageFormat', 'cc.macro.ImageFormat');\n return cc.macro.ImageFormat;\n });\n js.get(cc, 'KEY', function () {\n cc.errorID(1400, 'cc.KEY', 'cc.macro.KEY');\n return cc.macro.KEY;\n });\n js.get(cc, 'Easing', function () {\n cc.errorID(1400, 'cc.Easing', 'cc.easing');\n return cc.easing;\n });\n\n // cc.isChildClassOf\n js.get(cc, 'isChildClassOf', function () {\n cc.errorID(1400, 'cc.isChildClassOf', 'cc.js.isChildClassOf');\n return cc.js.isChildClassOf;\n });\n\n // dragon bones\n if (typeof dragonBones !== 'undefined') {\n js.get(dragonBones.CCFactory, 'getFactory', function () {\n cc.errorID(1400, 'dragonBones.CCFactory.getFactory', 'dragonBones.CCFactory.getInstance');\n return dragonBones.CCFactory.getInstance;\n });\n }\n\n // renderEngine\n cc.renderer.renderEngine = {\n get gfx () {\n cc.warnID(1400, 'cc.renderer.renderEngine.gfx', 'cc.gfx');\n return cc.gfx;\n },\n get math () {\n cc.warnID(1400, 'cc.renderer.renderEngine.math', 'cc.math');\n return cc.vmath;\n },\n get InputAssembler () {\n cc.warnID(1400, 'cc.renderer.renderEngine.InputAssembler', 'cc.renderer.InputAssembler');\n return cc.renderer.InputAssembler;\n }\n };\n \n // audio\n markAsRemovedInObject(cc.audioEngine, [\n 'getProfile',\n 'preload',\n 'setMaxWebAudioSize',\n ], 'cc.audioEngine');\n}\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nrequire('./core/CCGame');\n\n// ensure modular-cocos2d can determine whether action module is included\nrequire('./actions');","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst Asset = require('../core/assets/CCAsset');\nconst CCSpriteFrame = require('../core/assets/CCSpriteFrame');\n\n/**\n * Class for particle asset handling.\n * @class ParticleAsset\n * @extends Asset\n */\nvar ParticleAsset = cc.Class({\n name: 'cc.ParticleAsset',\n extends: Asset,\n\n properties: {\n spriteFrame: {\n default: null,\n type: CCSpriteFrame\n }\n }\n});\n\ncc.ParticleAsset = module.exports = ParticleAsset;\n","'use strict';\n\n/**\n * enums\n */\nconst enums = {\n // buffer usage\n USAGE_STATIC: 35044, // gl.STATIC_DRAW\n USAGE_DYNAMIC: 35048, // gl.DYNAMIC_DRAW\n USAGE_STREAM: 35040, // gl.STREAM_DRAW\n\n // index buffer format\n INDEX_FMT_UINT8: 5121, // gl.UNSIGNED_BYTE\n INDEX_FMT_UINT16: 5123, // gl.UNSIGNED_SHORT\n INDEX_FMT_UINT32: 5125, // gl.UNSIGNED_INT (OES_element_index_uint)\n\n // vertex attribute semantic\n ATTR_POSITION: 'a_position',\n ATTR_NORMAL: 'a_normal',\n ATTR_TANGENT: 'a_tangent',\n ATTR_BITANGENT: 'a_bitangent',\n ATTR_WEIGHTS: 'a_weights',\n ATTR_JOINTS: 'a_joints',\n ATTR_COLOR: 'a_color',\n ATTR_COLOR0: 'a_color0',\n ATTR_COLOR1: 'a_color1',\n ATTR_UV: 'a_uv',\n ATTR_UV0: 'a_uv0',\n ATTR_UV1: 'a_uv1',\n ATTR_UV2: 'a_uv2',\n ATTR_UV3: 'a_uv3',\n ATTR_UV4: 'a_uv4',\n ATTR_UV5: 'a_uv5',\n ATTR_UV6: 'a_uv6',\n ATTR_UV7: 'a_uv7',\n\n // vertex attribute type\n ATTR_TYPE_INT8: 5120, // gl.BYTE\n ATTR_TYPE_UINT8: 5121, // gl.UNSIGNED_BYTE\n ATTR_TYPE_INT16: 5122, // gl.SHORT\n ATTR_TYPE_UINT16: 5123, // gl.UNSIGNED_SHORT\n ATTR_TYPE_INT32: 5124, // gl.INT\n ATTR_TYPE_UINT32: 5125, // gl.UNSIGNED_INT\n ATTR_TYPE_FLOAT32: 5126, // gl.FLOAT\n\n // texture filter\n FILTER_NEAREST: 0,\n FILTER_LINEAR: 1,\n\n // texture wrap mode\n WRAP_REPEAT: 10497, // gl.REPEAT\n WRAP_CLAMP: 33071, // gl.CLAMP_TO_EDGE\n WRAP_MIRROR: 33648, // gl.MIRRORED_REPEAT\n\n // texture format\n // compress formats\n TEXTURE_FMT_RGB_DXT1: 0,\n TEXTURE_FMT_RGBA_DXT1: 1,\n TEXTURE_FMT_RGBA_DXT3: 2,\n TEXTURE_FMT_RGBA_DXT5: 3,\n TEXTURE_FMT_RGB_ETC1: 4,\n TEXTURE_FMT_RGB_PVRTC_2BPPV1: 5,\n TEXTURE_FMT_RGBA_PVRTC_2BPPV1: 6,\n TEXTURE_FMT_RGB_PVRTC_4BPPV1: 7,\n TEXTURE_FMT_RGBA_PVRTC_4BPPV1: 8,\n\n // normal formats\n TEXTURE_FMT_A8: 9,\n TEXTURE_FMT_L8: 10,\n TEXTURE_FMT_L8_A8: 11,\n TEXTURE_FMT_R5_G6_B5: 12,\n TEXTURE_FMT_R5_G5_B5_A1: 13,\n TEXTURE_FMT_R4_G4_B4_A4: 14,\n TEXTURE_FMT_RGB8: 15,\n TEXTURE_FMT_RGBA8: 16,\n TEXTURE_FMT_RGB16F: 17,\n TEXTURE_FMT_RGBA16F: 18,\n TEXTURE_FMT_RGB32F: 19,\n TEXTURE_FMT_RGBA32F: 20,\n TEXTURE_FMT_R32F: 21,\n TEXTURE_FMT_111110F: 22,\n TEXTURE_FMT_SRGB: 23,\n TEXTURE_FMT_SRGBA: 24,\n\n // depth formats\n TEXTURE_FMT_D16: 25,\n TEXTURE_FMT_D32: 26,\n TEXTURE_FMT_D24S8: 27,\n\n // etc2 format\n TEXTURE_FMT_RGB_ETC2: 28,\n TEXTURE_FMT_RGBA_ETC2: 29,\n\n // depth and stencil function\n DS_FUNC_NEVER: 512, // gl.NEVER\n DS_FUNC_LESS: 513, // gl.LESS\n DS_FUNC_EQUAL: 514, // gl.EQUAL\n DS_FUNC_LEQUAL: 515, // gl.LEQUAL\n DS_FUNC_GREATER: 516, // gl.GREATER\n DS_FUNC_NOTEQUAL: 517, // gl.NOTEQUAL\n DS_FUNC_GEQUAL: 518, // gl.GEQUAL\n DS_FUNC_ALWAYS: 519, // gl.ALWAYS\n\n // render-buffer format\n RB_FMT_RGBA4: 32854, // gl.RGBA4\n RB_FMT_RGB5_A1: 32855, // gl.RGB5_A1\n RB_FMT_RGB565: 36194, // gl.RGB565\n RB_FMT_D16: 33189, // gl.DEPTH_COMPONENT16\n RB_FMT_S8: 36168, // gl.STENCIL_INDEX8\n RB_FMT_D24S8: 34041, // gl.DEPTH_STENCIL\n\n // blend-equation\n BLEND_FUNC_ADD: 32774, // gl.FUNC_ADD\n BLEND_FUNC_SUBTRACT: 32778, // gl.FUNC_SUBTRACT\n BLEND_FUNC_REVERSE_SUBTRACT: 32779, // gl.FUNC_REVERSE_SUBTRACT\n\n // blend\n BLEND_ZERO: 0, // gl.ZERO\n BLEND_ONE: 1, // gl.ONE\n BLEND_SRC_COLOR: 768, // gl.SRC_COLOR\n BLEND_ONE_MINUS_SRC_COLOR: 769, // gl.ONE_MINUS_SRC_COLOR\n BLEND_DST_COLOR: 774, // gl.DST_COLOR\n BLEND_ONE_MINUS_DST_COLOR: 775, // gl.ONE_MINUS_DST_COLOR\n BLEND_SRC_ALPHA: 770, // gl.SRC_ALPHA\n BLEND_ONE_MINUS_SRC_ALPHA: 771, // gl.ONE_MINUS_SRC_ALPHA\n BLEND_DST_ALPHA: 772, // gl.DST_ALPHA\n BLEND_ONE_MINUS_DST_ALPHA: 773, // gl.ONE_MINUS_DST_ALPHA\n BLEND_CONSTANT_COLOR: 32769, // gl.CONSTANT_COLOR\n BLEND_ONE_MINUS_CONSTANT_COLOR: 32770, // gl.ONE_MINUS_CONSTANT_COLOR\n BLEND_CONSTANT_ALPHA: 32771, // gl.CONSTANT_ALPHA\n BLEND_ONE_MINUS_CONSTANT_ALPHA: 32772, // gl.ONE_MINUS_CONSTANT_ALPHA\n BLEND_SRC_ALPHA_SATURATE: 776, // gl.SRC_ALPHA_SATURATE\n\n // stencil operation\n STENCIL_DISABLE: 0, // disable stencil\n STENCIL_ENABLE: 1, // enable stencil\n STENCIL_INHERIT: 2, // inherit stencil states\n\n STENCIL_OP_KEEP: 7680, // gl.KEEP\n STENCIL_OP_ZERO: 0, // gl.ZERO\n STENCIL_OP_REPLACE: 7681, // gl.REPLACE\n STENCIL_OP_INCR: 7682, // gl.INCR\n STENCIL_OP_INCR_WRAP: 34055, // gl.INCR_WRAP\n STENCIL_OP_DECR: 7683, // gl.DECR\n STENCIL_OP_DECR_WRAP: 34056, // gl.DECR_WRAP\n STENCIL_OP_INVERT: 5386, // gl.INVERT\n\n // cull\n CULL_NONE: 0,\n CULL_FRONT: 1028,\n CULL_BACK: 1029,\n CULL_FRONT_AND_BACK: 1032,\n\n // primitive type\n PT_POINTS: 0, // gl.POINTS\n PT_LINES: 1, // gl.LINES\n PT_LINE_LOOP: 2, // gl.LINE_LOOP\n PT_LINE_STRIP: 3, // gl.LINE_STRIP\n PT_TRIANGLES: 4, // gl.TRIANGLES\n PT_TRIANGLE_STRIP: 5, // gl.TRIANGLE_STRIP\n PT_TRIANGLE_FAN: 6, // gl.TRIANGLE_FAN\n};\n\nlet RenderQueue = {\n OPAQUE: 0,\n TRANSPARENT: 1,\n OVERLAY: 2\n};\n\n/**\n * JS Implementation of MurmurHash2\n * \n * @author Gary Court\n * @see http://github.com/garycourt/murmurhash-js\n * @author Austin Appleby\n * @see http://sites.google.com/site/murmurhash/\n * \n * @param {string} str ASCII only\n * @param {number} seed Positive integer only\n * @return {number} 32-bit positive integer hash\n */\n\nfunction murmurhash2_32_gc(str, seed) {\n var\n l = str.length,\n h = seed ^ l,\n i = 0,\n k;\n \n while (l >= 4) {\n \tk = \n \t ((str.charCodeAt(i) & 0xff)) |\n \t ((str.charCodeAt(++i) & 0xff) << 8) |\n \t ((str.charCodeAt(++i) & 0xff) << 16) |\n \t ((str.charCodeAt(++i) & 0xff) << 24);\n \n k = (((k & 0xffff) * 0x5bd1e995) + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n k ^= k >>> 24;\n k = (((k & 0xffff) * 0x5bd1e995) + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n\n\th = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16)) ^ k;\n\n l -= 4;\n ++i;\n }\n \n switch (l) {\n case 3: h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n case 2: h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n case 1: h ^= (str.charCodeAt(i) & 0xff);\n h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n }\n\n h ^= h >>> 13;\n h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n h ^= h >>> 15;\n\n return h >>> 0;\n}\n\n// Extensions\nvar WebGLEXT;\n(function (WebGLEXT) {\n WebGLEXT[WebGLEXT[\"COMPRESSED_RGB_S3TC_DXT1_EXT\"] = 33776] = \"COMPRESSED_RGB_S3TC_DXT1_EXT\";\n WebGLEXT[WebGLEXT[\"COMPRESSED_RGBA_S3TC_DXT1_EXT\"] = 33777] = \"COMPRESSED_RGBA_S3TC_DXT1_EXT\";\n WebGLEXT[WebGLEXT[\"COMPRESSED_RGBA_S3TC_DXT3_EXT\"] = 33778] = \"COMPRESSED_RGBA_S3TC_DXT3_EXT\";\n WebGLEXT[WebGLEXT[\"COMPRESSED_RGBA_S3TC_DXT5_EXT\"] = 33779] = \"COMPRESSED_RGBA_S3TC_DXT5_EXT\";\n WebGLEXT[WebGLEXT[\"COMPRESSED_SRGB_S3TC_DXT1_EXT\"] = 35916] = \"COMPRESSED_SRGB_S3TC_DXT1_EXT\";\n WebGLEXT[WebGLEXT[\"COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT\"] = 35917] = \"COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT\";\n WebGLEXT[WebGLEXT[\"COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT\"] = 35918] = \"COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT\";\n WebGLEXT[WebGLEXT[\"COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT\"] = 35919] = \"COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT\";\n WebGLEXT[WebGLEXT[\"COMPRESSED_RGB_PVRTC_4BPPV1_IMG\"] = 35840] = \"COMPRESSED_RGB_PVRTC_4BPPV1_IMG\";\n WebGLEXT[WebGLEXT[\"COMPRESSED_RGB_PVRTC_2BPPV1_IMG\"] = 35841] = \"COMPRESSED_RGB_PVRTC_2BPPV1_IMG\";\n WebGLEXT[WebGLEXT[\"COMPRESSED_RGBA_PVRTC_4BPPV1_IMG\"] = 35842] = \"COMPRESSED_RGBA_PVRTC_4BPPV1_IMG\";\n WebGLEXT[WebGLEXT[\"COMPRESSED_RGBA_PVRTC_2BPPV1_IMG\"] = 35843] = \"COMPRESSED_RGBA_PVRTC_2BPPV1_IMG\";\n WebGLEXT[WebGLEXT[\"COMPRESSED_RGB_ETC1_WEBGL\"] = 36196] = \"COMPRESSED_RGB_ETC1_WEBGL\";\n})(WebGLEXT || (WebGLEXT = {}));\nvar GFXObjectType;\n(function (GFXObjectType) {\n GFXObjectType[GFXObjectType[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n GFXObjectType[GFXObjectType[\"BUFFER\"] = 1] = \"BUFFER\";\n GFXObjectType[GFXObjectType[\"TEXTURE\"] = 2] = \"TEXTURE\";\n GFXObjectType[GFXObjectType[\"TEXTURE_VIEW\"] = 3] = \"TEXTURE_VIEW\";\n GFXObjectType[GFXObjectType[\"RENDER_PASS\"] = 4] = \"RENDER_PASS\";\n GFXObjectType[GFXObjectType[\"FRAMEBUFFER\"] = 5] = \"FRAMEBUFFER\";\n GFXObjectType[GFXObjectType[\"SAMPLER\"] = 6] = \"SAMPLER\";\n GFXObjectType[GFXObjectType[\"SHADER\"] = 7] = \"SHADER\";\n GFXObjectType[GFXObjectType[\"PIPELINE_LAYOUT\"] = 8] = \"PIPELINE_LAYOUT\";\n GFXObjectType[GFXObjectType[\"PIPELINE_STATE\"] = 9] = \"PIPELINE_STATE\";\n GFXObjectType[GFXObjectType[\"BINDING_LAYOUT\"] = 10] = \"BINDING_LAYOUT\";\n GFXObjectType[GFXObjectType[\"INPUT_ASSEMBLER\"] = 11] = \"INPUT_ASSEMBLER\";\n GFXObjectType[GFXObjectType[\"COMMAND_ALLOCATOR\"] = 12] = \"COMMAND_ALLOCATOR\";\n GFXObjectType[GFXObjectType[\"COMMAND_BUFFER\"] = 13] = \"COMMAND_BUFFER\";\n GFXObjectType[GFXObjectType[\"QUEUE\"] = 14] = \"QUEUE\";\n GFXObjectType[GFXObjectType[\"WINDOW\"] = 15] = \"WINDOW\";\n})(GFXObjectType || (GFXObjectType = {}));\nvar GFXStatus;\n(function (GFXStatus) {\n GFXStatus[GFXStatus[\"UNREADY\"] = 0] = \"UNREADY\";\n GFXStatus[GFXStatus[\"FAILED\"] = 1] = \"FAILED\";\n GFXStatus[GFXStatus[\"SUCCESS\"] = 2] = \"SUCCESS\";\n})(GFXStatus || (GFXStatus = {}));\nvar GFXObject = /** @class */ (function () {\n function GFXObject(gfxType) {\n this._gfxType = GFXObjectType.UNKNOWN;\n this._status = GFXStatus.UNREADY;\n this._gfxType = gfxType;\n }\n Object.defineProperty(GFXObject.prototype, \"gfxType\", {\n get: function () {\n return this._gfxType;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(GFXObject.prototype, \"status\", {\n get: function () {\n return this._status;\n },\n enumerable: true,\n configurable: true\n });\n return GFXObject;\n}());\nvar GFXAttributeName;\n(function (GFXAttributeName) {\n GFXAttributeName[\"ATTR_POSITION\"] = \"a_position\";\n GFXAttributeName[\"ATTR_NORMAL\"] = \"a_normal\";\n GFXAttributeName[\"ATTR_TANGENT\"] = \"a_tangent\";\n GFXAttributeName[\"ATTR_BITANGENT\"] = \"a_bitangent\";\n GFXAttributeName[\"ATTR_WEIGHTS\"] = \"a_weights\";\n GFXAttributeName[\"ATTR_JOINTS\"] = \"a_joints\";\n GFXAttributeName[\"ATTR_COLOR\"] = \"a_color\";\n GFXAttributeName[\"ATTR_COLOR1\"] = \"a_color1\";\n GFXAttributeName[\"ATTR_COLOR2\"] = \"a_color2\";\n GFXAttributeName[\"ATTR_TEX_COORD\"] = \"a_texCoord\";\n GFXAttributeName[\"ATTR_TEX_COORD1\"] = \"a_texCoord1\";\n GFXAttributeName[\"ATTR_TEX_COORD2\"] = \"a_texCoord2\";\n GFXAttributeName[\"ATTR_TEX_COORD3\"] = \"a_texCoord3\";\n GFXAttributeName[\"ATTR_TEX_COORD4\"] = \"a_texCoord4\";\n GFXAttributeName[\"ATTR_TEX_COORD5\"] = \"a_texCoord5\";\n GFXAttributeName[\"ATTR_TEX_COORD6\"] = \"a_texCoord6\";\n GFXAttributeName[\"ATTR_TEX_COORD7\"] = \"a_texCoord7\";\n GFXAttributeName[\"ATTR_TEX_COORD8\"] = \"a_texCoord8\";\n})(GFXAttributeName || (GFXAttributeName = {}));\nvar GFXType;\n(function (GFXType) {\n GFXType[GFXType[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n GFXType[GFXType[\"BOOL\"] = 1] = \"BOOL\";\n GFXType[GFXType[\"BOOL2\"] = 2] = \"BOOL2\";\n GFXType[GFXType[\"BOOL3\"] = 3] = \"BOOL3\";\n GFXType[GFXType[\"BOOL4\"] = 4] = \"BOOL4\";\n GFXType[GFXType[\"INT\"] = 5] = \"INT\";\n GFXType[GFXType[\"INT2\"] = 6] = \"INT2\";\n GFXType[GFXType[\"INT3\"] = 7] = \"INT3\";\n GFXType[GFXType[\"INT4\"] = 8] = \"INT4\";\n GFXType[GFXType[\"UINT\"] = 9] = \"UINT\";\n GFXType[GFXType[\"UINT2\"] = 10] = \"UINT2\";\n GFXType[GFXType[\"UINT3\"] = 11] = \"UINT3\";\n GFXType[GFXType[\"UINT4\"] = 12] = \"UINT4\";\n GFXType[GFXType[\"FLOAT\"] = 13] = \"FLOAT\";\n GFXType[GFXType[\"FLOAT2\"] = 14] = \"FLOAT2\";\n GFXType[GFXType[\"FLOAT3\"] = 15] = \"FLOAT3\";\n GFXType[GFXType[\"FLOAT4\"] = 16] = \"FLOAT4\";\n GFXType[GFXType[\"COLOR4\"] = 17] = \"COLOR4\";\n GFXType[GFXType[\"MAT2\"] = 18] = \"MAT2\";\n GFXType[GFXType[\"MAT2X3\"] = 19] = \"MAT2X3\";\n GFXType[GFXType[\"MAT2X4\"] = 20] = \"MAT2X4\";\n GFXType[GFXType[\"MAT3X2\"] = 21] = \"MAT3X2\";\n GFXType[GFXType[\"MAT3\"] = 22] = \"MAT3\";\n GFXType[GFXType[\"MAT3X4\"] = 23] = \"MAT3X4\";\n GFXType[GFXType[\"MAT4X2\"] = 24] = \"MAT4X2\";\n GFXType[GFXType[\"MAT4X3\"] = 25] = \"MAT4X3\";\n GFXType[GFXType[\"MAT4\"] = 26] = \"MAT4\";\n GFXType[GFXType[\"SAMPLER1D\"] = 27] = \"SAMPLER1D\";\n GFXType[GFXType[\"SAMPLER1D_ARRAY\"] = 28] = \"SAMPLER1D_ARRAY\";\n GFXType[GFXType[\"SAMPLER2D\"] = 29] = \"SAMPLER2D\";\n GFXType[GFXType[\"SAMPLER2D_ARRAY\"] = 30] = \"SAMPLER2D_ARRAY\";\n GFXType[GFXType[\"SAMPLER3D\"] = 31] = \"SAMPLER3D\";\n GFXType[GFXType[\"SAMPLER_CUBE\"] = 32] = \"SAMPLER_CUBE\";\n GFXType[GFXType[\"COUNT\"] = 33] = \"COUNT\";\n})(GFXType || (GFXType = {}));\nvar GFXFormat;\n(function (GFXFormat) {\n GFXFormat[GFXFormat[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n GFXFormat[GFXFormat[\"A8\"] = 1] = \"A8\";\n GFXFormat[GFXFormat[\"L8\"] = 2] = \"L8\";\n GFXFormat[GFXFormat[\"LA8\"] = 3] = \"LA8\";\n GFXFormat[GFXFormat[\"R8\"] = 4] = \"R8\";\n GFXFormat[GFXFormat[\"R8SN\"] = 5] = \"R8SN\";\n GFXFormat[GFXFormat[\"R8UI\"] = 6] = \"R8UI\";\n GFXFormat[GFXFormat[\"R8I\"] = 7] = \"R8I\";\n GFXFormat[GFXFormat[\"R16F\"] = 8] = \"R16F\";\n GFXFormat[GFXFormat[\"R16UI\"] = 9] = \"R16UI\";\n GFXFormat[GFXFormat[\"R16I\"] = 10] = \"R16I\";\n GFXFormat[GFXFormat[\"R32F\"] = 11] = \"R32F\";\n GFXFormat[GFXFormat[\"R32UI\"] = 12] = \"R32UI\";\n GFXFormat[GFXFormat[\"R32I\"] = 13] = \"R32I\";\n GFXFormat[GFXFormat[\"RG8\"] = 14] = \"RG8\";\n GFXFormat[GFXFormat[\"RG8SN\"] = 15] = \"RG8SN\";\n GFXFormat[GFXFormat[\"RG8UI\"] = 16] = \"RG8UI\";\n GFXFormat[GFXFormat[\"RG8I\"] = 17] = \"RG8I\";\n GFXFormat[GFXFormat[\"RG16F\"] = 18] = \"RG16F\";\n GFXFormat[GFXFormat[\"RG16UI\"] = 19] = \"RG16UI\";\n GFXFormat[GFXFormat[\"RG16I\"] = 20] = \"RG16I\";\n GFXFormat[GFXFormat[\"RG32F\"] = 21] = \"RG32F\";\n GFXFormat[GFXFormat[\"RG32UI\"] = 22] = \"RG32UI\";\n GFXFormat[GFXFormat[\"RG32I\"] = 23] = \"RG32I\";\n GFXFormat[GFXFormat[\"RGB8\"] = 24] = \"RGB8\";\n GFXFormat[GFXFormat[\"SRGB8\"] = 25] = \"SRGB8\";\n GFXFormat[GFXFormat[\"RGB8SN\"] = 26] = \"RGB8SN\";\n GFXFormat[GFXFormat[\"RGB8UI\"] = 27] = \"RGB8UI\";\n GFXFormat[GFXFormat[\"RGB8I\"] = 28] = \"RGB8I\";\n GFXFormat[GFXFormat[\"RGB16F\"] = 29] = \"RGB16F\";\n GFXFormat[GFXFormat[\"RGB16UI\"] = 30] = \"RGB16UI\";\n GFXFormat[GFXFormat[\"RGB16I\"] = 31] = \"RGB16I\";\n GFXFormat[GFXFormat[\"RGB32F\"] = 32] = \"RGB32F\";\n GFXFormat[GFXFormat[\"RGB32UI\"] = 33] = \"RGB32UI\";\n GFXFormat[GFXFormat[\"RGB32I\"] = 34] = \"RGB32I\";\n GFXFormat[GFXFormat[\"RGBA8\"] = 35] = \"RGBA8\";\n GFXFormat[GFXFormat[\"SRGB8_A8\"] = 36] = \"SRGB8_A8\";\n GFXFormat[GFXFormat[\"RGBA8SN\"] = 37] = \"RGBA8SN\";\n GFXFormat[GFXFormat[\"RGBA8UI\"] = 38] = \"RGBA8UI\";\n GFXFormat[GFXFormat[\"RGBA8I\"] = 39] = \"RGBA8I\";\n GFXFormat[GFXFormat[\"RGBA16F\"] = 40] = \"RGBA16F\";\n GFXFormat[GFXFormat[\"RGBA16UI\"] = 41] = \"RGBA16UI\";\n GFXFormat[GFXFormat[\"RGBA16I\"] = 42] = \"RGBA16I\";\n GFXFormat[GFXFormat[\"RGBA32F\"] = 43] = \"RGBA32F\";\n GFXFormat[GFXFormat[\"RGBA32UI\"] = 44] = \"RGBA32UI\";\n GFXFormat[GFXFormat[\"RGBA32I\"] = 45] = \"RGBA32I\";\n // Special Format\n GFXFormat[GFXFormat[\"R5G6B5\"] = 46] = \"R5G6B5\";\n GFXFormat[GFXFormat[\"R11G11B10F\"] = 47] = \"R11G11B10F\";\n GFXFormat[GFXFormat[\"RGB5A1\"] = 48] = \"RGB5A1\";\n GFXFormat[GFXFormat[\"RGBA4\"] = 49] = \"RGBA4\";\n GFXFormat[GFXFormat[\"RGB10A2\"] = 50] = \"RGB10A2\";\n GFXFormat[GFXFormat[\"RGB10A2UI\"] = 51] = \"RGB10A2UI\";\n GFXFormat[GFXFormat[\"RGB9E5\"] = 52] = \"RGB9E5\";\n // Depth-Stencil Format\n GFXFormat[GFXFormat[\"D16\"] = 53] = \"D16\";\n GFXFormat[GFXFormat[\"D16S8\"] = 54] = \"D16S8\";\n GFXFormat[GFXFormat[\"D24\"] = 55] = \"D24\";\n GFXFormat[GFXFormat[\"D24S8\"] = 56] = \"D24S8\";\n GFXFormat[GFXFormat[\"D32F\"] = 57] = \"D32F\";\n GFXFormat[GFXFormat[\"D32F_S8\"] = 58] = \"D32F_S8\";\n // Compressed Format\n // Block Compression Format, DDS (DirectDraw Surface)\n // DXT1: 3 channels (5:6:5), 1/8 origianl size, with 0 or 1 bit of alpha\n GFXFormat[GFXFormat[\"BC1\"] = 59] = \"BC1\";\n GFXFormat[GFXFormat[\"BC1_ALPHA\"] = 60] = \"BC1_ALPHA\";\n GFXFormat[GFXFormat[\"BC1_SRGB\"] = 61] = \"BC1_SRGB\";\n GFXFormat[GFXFormat[\"BC1_SRGB_ALPHA\"] = 62] = \"BC1_SRGB_ALPHA\";\n // DXT3: 4 channels (5:6:5), 1/4 origianl size, with 4 bits of alpha\n GFXFormat[GFXFormat[\"BC2\"] = 63] = \"BC2\";\n GFXFormat[GFXFormat[\"BC2_SRGB\"] = 64] = \"BC2_SRGB\";\n // DXT5: 4 channels (5:6:5), 1/4 origianl size, with 8 bits of alpha\n GFXFormat[GFXFormat[\"BC3\"] = 65] = \"BC3\";\n GFXFormat[GFXFormat[\"BC3_SRGB\"] = 66] = \"BC3_SRGB\";\n // 1 channel (8), 1/4 origianl size\n GFXFormat[GFXFormat[\"BC4\"] = 67] = \"BC4\";\n GFXFormat[GFXFormat[\"BC4_SNORM\"] = 68] = \"BC4_SNORM\";\n // 2 channels (8:8), 1/2 origianl size\n GFXFormat[GFXFormat[\"BC5\"] = 69] = \"BC5\";\n GFXFormat[GFXFormat[\"BC5_SNORM\"] = 70] = \"BC5_SNORM\";\n // 3 channels (16:16:16), half-floating point, 1/6 origianl size\n // UF16: unsigned float, 5 exponent bits + 11 mantissa bits\n // SF16: signed float, 1 signed bit + 5 exponent bits + 10 mantissa bits\n GFXFormat[GFXFormat[\"BC6H_UF16\"] = 71] = \"BC6H_UF16\";\n GFXFormat[GFXFormat[\"BC6H_SF16\"] = 72] = \"BC6H_SF16\";\n // 4 channels (4~7 bits per channel) with 0 to 8 bits of alpha, 1/3 original size\n GFXFormat[GFXFormat[\"BC7\"] = 73] = \"BC7\";\n GFXFormat[GFXFormat[\"BC7_SRGB\"] = 74] = \"BC7_SRGB\";\n // Ericsson Texture Compression Format\n GFXFormat[GFXFormat[\"ETC_RGB8\"] = 75] = \"ETC_RGB8\";\n GFXFormat[GFXFormat[\"ETC2_RGB8\"] = 76] = \"ETC2_RGB8\";\n GFXFormat[GFXFormat[\"ETC2_SRGB8\"] = 77] = \"ETC2_SRGB8\";\n GFXFormat[GFXFormat[\"ETC2_RGB8_A1\"] = 78] = \"ETC2_RGB8_A1\";\n GFXFormat[GFXFormat[\"ETC2_SRGB8_A1\"] = 79] = \"ETC2_SRGB8_A1\";\n GFXFormat[GFXFormat[\"ETC2_RGBA8\"] = 80] = \"ETC2_RGBA8\";\n GFXFormat[GFXFormat[\"ETC2_SRGB8_A8\"] = 81] = \"ETC2_SRGB8_A8\";\n GFXFormat[GFXFormat[\"EAC_R11\"] = 82] = \"EAC_R11\";\n GFXFormat[GFXFormat[\"EAC_R11SN\"] = 83] = \"EAC_R11SN\";\n GFXFormat[GFXFormat[\"EAC_RG11\"] = 84] = \"EAC_RG11\";\n GFXFormat[GFXFormat[\"EAC_RG11SN\"] = 85] = \"EAC_RG11SN\";\n // PVRTC (PowerVR)\n GFXFormat[GFXFormat[\"PVRTC_RGB2\"] = 86] = \"PVRTC_RGB2\";\n GFXFormat[GFXFormat[\"PVRTC_RGBA2\"] = 87] = \"PVRTC_RGBA2\";\n GFXFormat[GFXFormat[\"PVRTC_RGB4\"] = 88] = \"PVRTC_RGB4\";\n GFXFormat[GFXFormat[\"PVRTC_RGBA4\"] = 89] = \"PVRTC_RGBA4\";\n GFXFormat[GFXFormat[\"PVRTC2_2BPP\"] = 90] = \"PVRTC2_2BPP\";\n GFXFormat[GFXFormat[\"PVRTC2_4BPP\"] = 91] = \"PVRTC2_4BPP\";\n})(GFXFormat || (GFXFormat = {}));\nvar GFXBufferUsageBit;\n(function (GFXBufferUsageBit) {\n GFXBufferUsageBit[GFXBufferUsageBit[\"NONE\"] = 0] = \"NONE\";\n GFXBufferUsageBit[GFXBufferUsageBit[\"TRANSFER_SRC\"] = 1] = \"TRANSFER_SRC\";\n GFXBufferUsageBit[GFXBufferUsageBit[\"TRANSFER_DST\"] = 2] = \"TRANSFER_DST\";\n GFXBufferUsageBit[GFXBufferUsageBit[\"INDEX\"] = 4] = \"INDEX\";\n GFXBufferUsageBit[GFXBufferUsageBit[\"VERTEX\"] = 8] = \"VERTEX\";\n GFXBufferUsageBit[GFXBufferUsageBit[\"UNIFORM\"] = 16] = \"UNIFORM\";\n GFXBufferUsageBit[GFXBufferUsageBit[\"STORAGE\"] = 32] = \"STORAGE\";\n GFXBufferUsageBit[GFXBufferUsageBit[\"INDIRECT\"] = 64] = \"INDIRECT\";\n})(GFXBufferUsageBit || (GFXBufferUsageBit = {}));\nvar GFXMemoryUsageBit;\n(function (GFXMemoryUsageBit) {\n GFXMemoryUsageBit[GFXMemoryUsageBit[\"NONE\"] = 0] = \"NONE\";\n GFXMemoryUsageBit[GFXMemoryUsageBit[\"DEVICE\"] = 1] = \"DEVICE\";\n GFXMemoryUsageBit[GFXMemoryUsageBit[\"HOST\"] = 2] = \"HOST\";\n})(GFXMemoryUsageBit || (GFXMemoryUsageBit = {}));\nvar GFXBufferAccessBit;\n(function (GFXBufferAccessBit) {\n GFXBufferAccessBit[GFXBufferAccessBit[\"NONE\"] = 0] = \"NONE\";\n GFXBufferAccessBit[GFXBufferAccessBit[\"READ\"] = 1] = \"READ\";\n GFXBufferAccessBit[GFXBufferAccessBit[\"WRITE\"] = 2] = \"WRITE\";\n})(GFXBufferAccessBit || (GFXBufferAccessBit = {}));\nvar GFXPrimitiveMode;\n(function (GFXPrimitiveMode) {\n GFXPrimitiveMode[GFXPrimitiveMode[\"POINT_LIST\"] = 0] = \"POINT_LIST\";\n GFXPrimitiveMode[GFXPrimitiveMode[\"LINE_LIST\"] = 1] = \"LINE_LIST\";\n GFXPrimitiveMode[GFXPrimitiveMode[\"LINE_STRIP\"] = 2] = \"LINE_STRIP\";\n GFXPrimitiveMode[GFXPrimitiveMode[\"LINE_LOOP\"] = 3] = \"LINE_LOOP\";\n GFXPrimitiveMode[GFXPrimitiveMode[\"LINE_LIST_ADJACENCY\"] = 4] = \"LINE_LIST_ADJACENCY\";\n GFXPrimitiveMode[GFXPrimitiveMode[\"LINE_STRIP_ADJACENCY\"] = 5] = \"LINE_STRIP_ADJACENCY\";\n GFXPrimitiveMode[GFXPrimitiveMode[\"ISO_LINE_LIST\"] = 6] = \"ISO_LINE_LIST\";\n // raycast detectable:\n GFXPrimitiveMode[GFXPrimitiveMode[\"TRIANGLE_LIST\"] = 7] = \"TRIANGLE_LIST\";\n GFXPrimitiveMode[GFXPrimitiveMode[\"TRIANGLE_STRIP\"] = 8] = \"TRIANGLE_STRIP\";\n GFXPrimitiveMode[GFXPrimitiveMode[\"TRIANGLE_FAN\"] = 9] = \"TRIANGLE_FAN\";\n GFXPrimitiveMode[GFXPrimitiveMode[\"TRIANGLE_LIST_ADJACENCY\"] = 10] = \"TRIANGLE_LIST_ADJACENCY\";\n GFXPrimitiveMode[GFXPrimitiveMode[\"TRIANGLE_STRIP_ADJACENCY\"] = 11] = \"TRIANGLE_STRIP_ADJACENCY\";\n GFXPrimitiveMode[GFXPrimitiveMode[\"TRIANGLE_PATCH_ADJACENCY\"] = 12] = \"TRIANGLE_PATCH_ADJACENCY\";\n GFXPrimitiveMode[GFXPrimitiveMode[\"QUAD_PATCH_LIST\"] = 13] = \"QUAD_PATCH_LIST\";\n})(GFXPrimitiveMode || (GFXPrimitiveMode = {}));\nvar GFXPolygonMode;\n(function (GFXPolygonMode) {\n GFXPolygonMode[GFXPolygonMode[\"FILL\"] = 0] = \"FILL\";\n GFXPolygonMode[GFXPolygonMode[\"POINT\"] = 1] = \"POINT\";\n GFXPolygonMode[GFXPolygonMode[\"LINE\"] = 2] = \"LINE\";\n})(GFXPolygonMode || (GFXPolygonMode = {}));\nvar GFXShadeModel;\n(function (GFXShadeModel) {\n GFXShadeModel[GFXShadeModel[\"GOURAND\"] = 0] = \"GOURAND\";\n GFXShadeModel[GFXShadeModel[\"FLAT\"] = 1] = \"FLAT\";\n})(GFXShadeModel || (GFXShadeModel = {}));\nvar GFXCullMode;\n(function (GFXCullMode) {\n GFXCullMode[GFXCullMode[\"NONE\"] = 0] = \"NONE\";\n GFXCullMode[GFXCullMode[\"FRONT\"] = 1] = \"FRONT\";\n GFXCullMode[GFXCullMode[\"BACK\"] = 2] = \"BACK\";\n})(GFXCullMode || (GFXCullMode = {}));\nvar GFXComparisonFunc;\n(function (GFXComparisonFunc) {\n GFXComparisonFunc[GFXComparisonFunc[\"NEVER\"] = 0] = \"NEVER\";\n GFXComparisonFunc[GFXComparisonFunc[\"LESS\"] = 1] = \"LESS\";\n GFXComparisonFunc[GFXComparisonFunc[\"EQUAL\"] = 2] = \"EQUAL\";\n GFXComparisonFunc[GFXComparisonFunc[\"LESS_EQUAL\"] = 3] = \"LESS_EQUAL\";\n GFXComparisonFunc[GFXComparisonFunc[\"GREATER\"] = 4] = \"GREATER\";\n GFXComparisonFunc[GFXComparisonFunc[\"NOT_EQUAL\"] = 5] = \"NOT_EQUAL\";\n GFXComparisonFunc[GFXComparisonFunc[\"GREATER_EQUAL\"] = 6] = \"GREATER_EQUAL\";\n GFXComparisonFunc[GFXComparisonFunc[\"ALWAYS\"] = 7] = \"ALWAYS\";\n})(GFXComparisonFunc || (GFXComparisonFunc = {}));\nvar GFXStencilOp;\n(function (GFXStencilOp) {\n GFXStencilOp[GFXStencilOp[\"ZERO\"] = 0] = \"ZERO\";\n GFXStencilOp[GFXStencilOp[\"KEEP\"] = 1] = \"KEEP\";\n GFXStencilOp[GFXStencilOp[\"REPLACE\"] = 2] = \"REPLACE\";\n GFXStencilOp[GFXStencilOp[\"INCR\"] = 3] = \"INCR\";\n GFXStencilOp[GFXStencilOp[\"DECR\"] = 4] = \"DECR\";\n GFXStencilOp[GFXStencilOp[\"INVERT\"] = 5] = \"INVERT\";\n GFXStencilOp[GFXStencilOp[\"INCR_WRAP\"] = 6] = \"INCR_WRAP\";\n GFXStencilOp[GFXStencilOp[\"DECR_WRAP\"] = 7] = \"DECR_WRAP\";\n})(GFXStencilOp || (GFXStencilOp = {}));\nvar GFXBlendOp;\n(function (GFXBlendOp) {\n GFXBlendOp[GFXBlendOp[\"ADD\"] = 0] = \"ADD\";\n GFXBlendOp[GFXBlendOp[\"SUB\"] = 1] = \"SUB\";\n GFXBlendOp[GFXBlendOp[\"REV_SUB\"] = 2] = \"REV_SUB\";\n GFXBlendOp[GFXBlendOp[\"MIN\"] = 3] = \"MIN\";\n GFXBlendOp[GFXBlendOp[\"MAX\"] = 4] = \"MAX\";\n})(GFXBlendOp || (GFXBlendOp = {}));\nvar GFXBlendFactor;\n(function (GFXBlendFactor) {\n GFXBlendFactor[GFXBlendFactor[\"ZERO\"] = 0] = \"ZERO\";\n GFXBlendFactor[GFXBlendFactor[\"ONE\"] = 1] = \"ONE\";\n GFXBlendFactor[GFXBlendFactor[\"SRC_ALPHA\"] = 2] = \"SRC_ALPHA\";\n GFXBlendFactor[GFXBlendFactor[\"DST_ALPHA\"] = 3] = \"DST_ALPHA\";\n GFXBlendFactor[GFXBlendFactor[\"ONE_MINUS_SRC_ALPHA\"] = 4] = \"ONE_MINUS_SRC_ALPHA\";\n GFXBlendFactor[GFXBlendFactor[\"ONE_MINUS_DST_ALPHA\"] = 5] = \"ONE_MINUS_DST_ALPHA\";\n GFXBlendFactor[GFXBlendFactor[\"SRC_COLOR\"] = 6] = \"SRC_COLOR\";\n GFXBlendFactor[GFXBlendFactor[\"DST_COLOR\"] = 7] = \"DST_COLOR\";\n GFXBlendFactor[GFXBlendFactor[\"ONE_MINUS_SRC_COLOR\"] = 8] = \"ONE_MINUS_SRC_COLOR\";\n GFXBlendFactor[GFXBlendFactor[\"ONE_MINUS_DST_COLOR\"] = 9] = \"ONE_MINUS_DST_COLOR\";\n GFXBlendFactor[GFXBlendFactor[\"SRC_ALPHA_SATURATE\"] = 10] = \"SRC_ALPHA_SATURATE\";\n GFXBlendFactor[GFXBlendFactor[\"CONSTANT_COLOR\"] = 11] = \"CONSTANT_COLOR\";\n GFXBlendFactor[GFXBlendFactor[\"ONE_MINUS_CONSTANT_COLOR\"] = 12] = \"ONE_MINUS_CONSTANT_COLOR\";\n GFXBlendFactor[GFXBlendFactor[\"CONSTANT_ALPHA\"] = 13] = \"CONSTANT_ALPHA\";\n GFXBlendFactor[GFXBlendFactor[\"ONE_MINUS_CONSTANT_ALPHA\"] = 14] = \"ONE_MINUS_CONSTANT_ALPHA\";\n})(GFXBlendFactor || (GFXBlendFactor = {}));\nvar GFXColorMask;\n(function (GFXColorMask) {\n GFXColorMask[GFXColorMask[\"NONE\"] = 0] = \"NONE\";\n GFXColorMask[GFXColorMask[\"R\"] = 1] = \"R\";\n GFXColorMask[GFXColorMask[\"G\"] = 2] = \"G\";\n GFXColorMask[GFXColorMask[\"B\"] = 4] = \"B\";\n GFXColorMask[GFXColorMask[\"A\"] = 8] = \"A\";\n GFXColorMask[GFXColorMask[\"ALL\"] = 15] = \"ALL\";\n})(GFXColorMask || (GFXColorMask = {}));\nvar GFXFilter;\n(function (GFXFilter) {\n GFXFilter[GFXFilter[\"NONE\"] = 0] = \"NONE\";\n GFXFilter[GFXFilter[\"POINT\"] = 1] = \"POINT\";\n GFXFilter[GFXFilter[\"LINEAR\"] = 2] = \"LINEAR\";\n GFXFilter[GFXFilter[\"ANISOTROPIC\"] = 3] = \"ANISOTROPIC\";\n})(GFXFilter || (GFXFilter = {}));\nvar GFXAddress;\n(function (GFXAddress) {\n GFXAddress[GFXAddress[\"WRAP\"] = 0] = \"WRAP\";\n GFXAddress[GFXAddress[\"MIRROR\"] = 1] = \"MIRROR\";\n GFXAddress[GFXAddress[\"CLAMP\"] = 2] = \"CLAMP\";\n GFXAddress[GFXAddress[\"BORDER\"] = 3] = \"BORDER\";\n})(GFXAddress || (GFXAddress = {}));\nvar GFXTextureType;\n(function (GFXTextureType) {\n GFXTextureType[GFXTextureType[\"TEX1D\"] = 0] = \"TEX1D\";\n GFXTextureType[GFXTextureType[\"TEX2D\"] = 1] = \"TEX2D\";\n GFXTextureType[GFXTextureType[\"TEX3D\"] = 2] = \"TEX3D\";\n})(GFXTextureType || (GFXTextureType = {}));\nvar GFXTextureUsageBit;\n(function (GFXTextureUsageBit) {\n GFXTextureUsageBit[GFXTextureUsageBit[\"NONE\"] = 0] = \"NONE\";\n GFXTextureUsageBit[GFXTextureUsageBit[\"TRANSFER_SRC\"] = 1] = \"TRANSFER_SRC\";\n GFXTextureUsageBit[GFXTextureUsageBit[\"TRANSFER_DST\"] = 2] = \"TRANSFER_DST\";\n GFXTextureUsageBit[GFXTextureUsageBit[\"SAMPLED\"] = 4] = \"SAMPLED\";\n GFXTextureUsageBit[GFXTextureUsageBit[\"STORAGE\"] = 8] = \"STORAGE\";\n GFXTextureUsageBit[GFXTextureUsageBit[\"COLOR_ATTACHMENT\"] = 16] = \"COLOR_ATTACHMENT\";\n GFXTextureUsageBit[GFXTextureUsageBit[\"DEPTH_STENCIL_ATTACHMENT\"] = 32] = \"DEPTH_STENCIL_ATTACHMENT\";\n GFXTextureUsageBit[GFXTextureUsageBit[\"TRANSIENT_ATTACHMENT\"] = 64] = \"TRANSIENT_ATTACHMENT\";\n GFXTextureUsageBit[GFXTextureUsageBit[\"INPUT_ATTACHMENT\"] = 128] = \"INPUT_ATTACHMENT\";\n})(GFXTextureUsageBit || (GFXTextureUsageBit = {}));\nvar GFXSampleCount;\n(function (GFXSampleCount) {\n GFXSampleCount[GFXSampleCount[\"X1\"] = 0] = \"X1\";\n GFXSampleCount[GFXSampleCount[\"X2\"] = 1] = \"X2\";\n GFXSampleCount[GFXSampleCount[\"X4\"] = 2] = \"X4\";\n GFXSampleCount[GFXSampleCount[\"X8\"] = 3] = \"X8\";\n GFXSampleCount[GFXSampleCount[\"X16\"] = 4] = \"X16\";\n GFXSampleCount[GFXSampleCount[\"X32\"] = 5] = \"X32\";\n GFXSampleCount[GFXSampleCount[\"X64\"] = 6] = \"X64\";\n})(GFXSampleCount || (GFXSampleCount = {}));\nvar GFXTextureFlagBit;\n(function (GFXTextureFlagBit) {\n GFXTextureFlagBit[GFXTextureFlagBit[\"NONE\"] = 0] = \"NONE\";\n GFXTextureFlagBit[GFXTextureFlagBit[\"GEN_MIPMAP\"] = 1] = \"GEN_MIPMAP\";\n GFXTextureFlagBit[GFXTextureFlagBit[\"CUBEMAP\"] = 2] = \"CUBEMAP\";\n GFXTextureFlagBit[GFXTextureFlagBit[\"BAKUP_BUFFER\"] = 4] = \"BAKUP_BUFFER\";\n})(GFXTextureFlagBit || (GFXTextureFlagBit = {}));\nvar GFXTextureViewType;\n(function (GFXTextureViewType) {\n GFXTextureViewType[GFXTextureViewType[\"TV1D\"] = 0] = \"TV1D\";\n GFXTextureViewType[GFXTextureViewType[\"TV2D\"] = 1] = \"TV2D\";\n GFXTextureViewType[GFXTextureViewType[\"TV3D\"] = 2] = \"TV3D\";\n GFXTextureViewType[GFXTextureViewType[\"CUBE\"] = 3] = \"CUBE\";\n GFXTextureViewType[GFXTextureViewType[\"TV1D_ARRAY\"] = 4] = \"TV1D_ARRAY\";\n GFXTextureViewType[GFXTextureViewType[\"TV2D_ARRAY\"] = 5] = \"TV2D_ARRAY\";\n})(GFXTextureViewType || (GFXTextureViewType = {}));\nvar GFXShaderType;\n(function (GFXShaderType) {\n GFXShaderType[GFXShaderType[\"VERTEX\"] = 0] = \"VERTEX\";\n GFXShaderType[GFXShaderType[\"HULL\"] = 1] = \"HULL\";\n GFXShaderType[GFXShaderType[\"DOMAIN\"] = 2] = \"DOMAIN\";\n GFXShaderType[GFXShaderType[\"GEOMETRY\"] = 3] = \"GEOMETRY\";\n GFXShaderType[GFXShaderType[\"FRAGMENT\"] = 4] = \"FRAGMENT\";\n GFXShaderType[GFXShaderType[\"COMPUTE\"] = 5] = \"COMPUTE\";\n GFXShaderType[GFXShaderType[\"COUNT\"] = 6] = \"COUNT\";\n})(GFXShaderType || (GFXShaderType = {}));\nvar GFXBindingType;\n(function (GFXBindingType) {\n GFXBindingType[GFXBindingType[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n GFXBindingType[GFXBindingType[\"UNIFORM_BUFFER\"] = 1] = \"UNIFORM_BUFFER\";\n GFXBindingType[GFXBindingType[\"SAMPLER\"] = 2] = \"SAMPLER\";\n GFXBindingType[GFXBindingType[\"STORAGE_BUFFER\"] = 3] = \"STORAGE_BUFFER\";\n})(GFXBindingType || (GFXBindingType = {}));\nvar GFXCommandBufferType;\n(function (GFXCommandBufferType) {\n GFXCommandBufferType[GFXCommandBufferType[\"PRIMARY\"] = 0] = \"PRIMARY\";\n GFXCommandBufferType[GFXCommandBufferType[\"SECONDARY\"] = 1] = \"SECONDARY\";\n})(GFXCommandBufferType || (GFXCommandBufferType = {}));\n// Enumeration all possible values of operations to be performed on initially Loading a Framebuffer Object.\nvar GFXLoadOp;\n(function (GFXLoadOp) {\n GFXLoadOp[GFXLoadOp[\"LOAD\"] = 0] = \"LOAD\";\n GFXLoadOp[GFXLoadOp[\"CLEAR\"] = 1] = \"CLEAR\";\n GFXLoadOp[GFXLoadOp[\"DISCARD\"] = 2] = \"DISCARD\";\n})(GFXLoadOp || (GFXLoadOp = {}));\n// Enumerates all possible values of operations to be performed when Storing to a Framebuffer Object.\nvar GFXStoreOp;\n(function (GFXStoreOp) {\n GFXStoreOp[GFXStoreOp[\"STORE\"] = 0] = \"STORE\";\n GFXStoreOp[GFXStoreOp[\"DISCARD\"] = 1] = \"DISCARD\";\n})(GFXStoreOp || (GFXStoreOp = {}));\nvar GFXTextureLayout;\n(function (GFXTextureLayout) {\n GFXTextureLayout[GFXTextureLayout[\"UNDEFINED\"] = 0] = \"UNDEFINED\";\n GFXTextureLayout[GFXTextureLayout[\"GENERAL\"] = 1] = \"GENERAL\";\n GFXTextureLayout[GFXTextureLayout[\"COLOR_ATTACHMENT_OPTIMAL\"] = 2] = \"COLOR_ATTACHMENT_OPTIMAL\";\n GFXTextureLayout[GFXTextureLayout[\"DEPTH_STENCIL_ATTACHMENT_OPTIMAL\"] = 3] = \"DEPTH_STENCIL_ATTACHMENT_OPTIMAL\";\n GFXTextureLayout[GFXTextureLayout[\"DEPTH_STENCIL_READONLY_OPTIMAL\"] = 4] = \"DEPTH_STENCIL_READONLY_OPTIMAL\";\n GFXTextureLayout[GFXTextureLayout[\"SHADER_READONLY_OPTIMAL\"] = 5] = \"SHADER_READONLY_OPTIMAL\";\n GFXTextureLayout[GFXTextureLayout[\"TRANSFER_SRC_OPTIMAL\"] = 6] = \"TRANSFER_SRC_OPTIMAL\";\n GFXTextureLayout[GFXTextureLayout[\"TRANSFER_DST_OPTIMAL\"] = 7] = \"TRANSFER_DST_OPTIMAL\";\n GFXTextureLayout[GFXTextureLayout[\"PREINITIALIZED\"] = 8] = \"PREINITIALIZED\";\n GFXTextureLayout[GFXTextureLayout[\"PRESENT_SRC\"] = 9] = \"PRESENT_SRC\";\n})(GFXTextureLayout || (GFXTextureLayout = {}));\nvar GFXPipelineBindPoint;\n(function (GFXPipelineBindPoint) {\n GFXPipelineBindPoint[GFXPipelineBindPoint[\"GRAPHICS\"] = 0] = \"GRAPHICS\";\n GFXPipelineBindPoint[GFXPipelineBindPoint[\"COMPUTE\"] = 1] = \"COMPUTE\";\n GFXPipelineBindPoint[GFXPipelineBindPoint[\"RAY_TRACING\"] = 2] = \"RAY_TRACING\";\n})(GFXPipelineBindPoint || (GFXPipelineBindPoint = {}));\nvar GFXDynamicState;\n(function (GFXDynamicState) {\n GFXDynamicState[GFXDynamicState[\"VIEWPORT\"] = 0] = \"VIEWPORT\";\n GFXDynamicState[GFXDynamicState[\"SCISSOR\"] = 1] = \"SCISSOR\";\n GFXDynamicState[GFXDynamicState[\"LINE_WIDTH\"] = 2] = \"LINE_WIDTH\";\n GFXDynamicState[GFXDynamicState[\"DEPTH_BIAS\"] = 3] = \"DEPTH_BIAS\";\n GFXDynamicState[GFXDynamicState[\"BLEND_CONSTANTS\"] = 4] = \"BLEND_CONSTANTS\";\n GFXDynamicState[GFXDynamicState[\"DEPTH_BOUNDS\"] = 5] = \"DEPTH_BOUNDS\";\n GFXDynamicState[GFXDynamicState[\"STENCIL_WRITE_MASK\"] = 6] = \"STENCIL_WRITE_MASK\";\n GFXDynamicState[GFXDynamicState[\"STENCIL_COMPARE_MASK\"] = 7] = \"STENCIL_COMPARE_MASK\";\n})(GFXDynamicState || (GFXDynamicState = {}));\nvar GFXStencilFace;\n(function (GFXStencilFace) {\n GFXStencilFace[GFXStencilFace[\"FRONT\"] = 0] = \"FRONT\";\n GFXStencilFace[GFXStencilFace[\"BACK\"] = 1] = \"BACK\";\n GFXStencilFace[GFXStencilFace[\"ALL\"] = 2] = \"ALL\";\n})(GFXStencilFace || (GFXStencilFace = {}));\nvar GFXQueueType;\n(function (GFXQueueType) {\n GFXQueueType[GFXQueueType[\"GRAPHICS\"] = 0] = \"GRAPHICS\";\n GFXQueueType[GFXQueueType[\"COMPUTE\"] = 1] = \"COMPUTE\";\n GFXQueueType[GFXQueueType[\"TRANSFER\"] = 2] = \"TRANSFER\";\n})(GFXQueueType || (GFXQueueType = {}));\nvar GFXClearFlag;\n(function (GFXClearFlag) {\n GFXClearFlag[GFXClearFlag[\"NONE\"] = 0] = \"NONE\";\n GFXClearFlag[GFXClearFlag[\"COLOR\"] = 1] = \"COLOR\";\n GFXClearFlag[GFXClearFlag[\"DEPTH\"] = 2] = \"DEPTH\";\n GFXClearFlag[GFXClearFlag[\"STENCIL\"] = 4] = \"STENCIL\";\n GFXClearFlag[GFXClearFlag[\"DEPTH_STENCIL\"] = 6] = \"DEPTH_STENCIL\";\n GFXClearFlag[GFXClearFlag[\"ALL\"] = 7] = \"ALL\";\n})(GFXClearFlag || (GFXClearFlag = {}));\nfunction GFXGetTypeSize(type) {\n switch (type) {\n case GFXType.BOOL:\n case GFXType.INT:\n case GFXType.UINT:\n case GFXType.FLOAT: return 4;\n case GFXType.BOOL2:\n case GFXType.INT2:\n case GFXType.UINT2:\n case GFXType.FLOAT2: return 8;\n case GFXType.BOOL3:\n case GFXType.INT3:\n case GFXType.UINT3:\n case GFXType.FLOAT3: return 12;\n case GFXType.BOOL4:\n case GFXType.INT4:\n case GFXType.UINT4:\n case GFXType.FLOAT4:\n case GFXType.MAT2: return 16;\n case GFXType.MAT2X3: return 24;\n case GFXType.MAT2X4: return 32;\n case GFXType.MAT3X2: return 24;\n case GFXType.MAT3: return 36;\n case GFXType.MAT3X4: return 48;\n case GFXType.MAT4X2: return 32;\n case GFXType.MAT4X2: return 32;\n case GFXType.MAT4: return 64;\n case GFXType.SAMPLER1D:\n case GFXType.SAMPLER1D_ARRAY:\n case GFXType.SAMPLER2D:\n case GFXType.SAMPLER2D_ARRAY:\n case GFXType.SAMPLER3D:\n case GFXType.SAMPLER_CUBE: return 4;\n default: {\n return 0;\n }\n }\n}\n\n// import { GFXBuffer } from '../gfx/buffer';\nvar RenderPassStage;\n(function (RenderPassStage) {\n RenderPassStage[RenderPassStage[\"DEFAULT\"] = 100] = \"DEFAULT\";\n})(RenderPassStage || (RenderPassStage = {}));\nvar RenderPriority;\n(function (RenderPriority) {\n RenderPriority[RenderPriority[\"MIN\"] = 0] = \"MIN\";\n RenderPriority[RenderPriority[\"MAX\"] = 255] = \"MAX\";\n RenderPriority[RenderPriority[\"DEFAULT\"] = 128] = \"DEFAULT\";\n})(RenderPriority || (RenderPriority = {}));\nvar MAX_BINDING_SUPPORTED = 24; // from WebGL 2 spec\nvar UniformBinding;\n(function (UniformBinding) {\n // UBOs\n UniformBinding[UniformBinding[\"UBO_GLOBAL\"] = MAX_BINDING_SUPPORTED - 1] = \"UBO_GLOBAL\";\n UniformBinding[UniformBinding[\"UBO_SHADOW\"] = MAX_BINDING_SUPPORTED - 2] = \"UBO_SHADOW\";\n UniformBinding[UniformBinding[\"UBO_LOCAL\"] = MAX_BINDING_SUPPORTED - 3] = \"UBO_LOCAL\";\n UniformBinding[UniformBinding[\"UBO_FORWARD_LIGHTS\"] = MAX_BINDING_SUPPORTED - 4] = \"UBO_FORWARD_LIGHTS\";\n UniformBinding[UniformBinding[\"UBO_SKINNING\"] = MAX_BINDING_SUPPORTED - 5] = \"UBO_SKINNING\";\n UniformBinding[UniformBinding[\"UBO_SKINNING_TEXTURE\"] = MAX_BINDING_SUPPORTED - 6] = \"UBO_SKINNING_TEXTURE\";\n UniformBinding[UniformBinding[\"UBO_UI\"] = MAX_BINDING_SUPPORTED - 7] = \"UBO_UI\";\n // samplers\n UniformBinding[UniformBinding[\"SAMPLER_JOINTS\"] = MAX_BINDING_SUPPORTED + 1] = \"SAMPLER_JOINTS\";\n UniformBinding[UniformBinding[\"SAMPLER_ENVIRONMENT\"] = MAX_BINDING_SUPPORTED + 2] = \"SAMPLER_ENVIRONMENT\";\n // rooms left for custom bindings\n // effect importer prepares bindings according to this\n UniformBinding[UniformBinding[\"CUSTUM_UBO_BINDING_END_POINT\"] = MAX_BINDING_SUPPORTED - 7] = \"CUSTUM_UBO_BINDING_END_POINT\";\n UniformBinding[UniformBinding[\"CUSTOM_SAMPLER_BINDING_START_POINT\"] = MAX_BINDING_SUPPORTED + 6] = \"CUSTOM_SAMPLER_BINDING_START_POINT\";\n})(UniformBinding || (UniformBinding = {}));\n// export class UBOGlobal {\n// public static TIME_OFFSET: number = 0;\n// public static SCREEN_SIZE_OFFSET: number = UBOGlobal.TIME_OFFSET + 4;\n// public static SCREEN_SCALE_OFFSET: number = UBOGlobal.SCREEN_SIZE_OFFSET + 4;\n// public static NATIVE_SIZE_OFFSET: number = UBOGlobal.SCREEN_SCALE_OFFSET + 4;\n// public static MAT_VIEW_OFFSET: number = UBOGlobal.NATIVE_SIZE_OFFSET + 4;\n// public static MAT_VIEW_INV_OFFSET: number = UBOGlobal.MAT_VIEW_OFFSET + 16;\n// public static MAT_PROJ_OFFSET: number = UBOGlobal.MAT_VIEW_INV_OFFSET + 16;\n// public static MAT_PROJ_INV_OFFSET: number = UBOGlobal.MAT_PROJ_OFFSET + 16;\n// public static MAT_VIEW_PROJ_OFFSET: number = UBOGlobal.MAT_PROJ_INV_OFFSET + 16;\n// public static MAT_VIEW_PROJ_INV_OFFSET: number = UBOGlobal.MAT_VIEW_PROJ_OFFSET + 16;\n// public static CAMERA_POS_OFFSET: number = UBOGlobal.MAT_VIEW_PROJ_INV_OFFSET + 16;\n// public static EXPOSURE_OFFSET: number = UBOGlobal.CAMERA_POS_OFFSET + 4;\n// public static MAIN_LIT_DIR_OFFSET: number = UBOGlobal.EXPOSURE_OFFSET + 4;\n// public static MAIN_LIT_COLOR_OFFSET: number = UBOGlobal.MAIN_LIT_DIR_OFFSET + 4;\n// public static AMBIENT_SKY_OFFSET: number = UBOGlobal.MAIN_LIT_COLOR_OFFSET + 4;\n// public static AMBIENT_GROUND_OFFSET: number = UBOGlobal.AMBIENT_SKY_OFFSET + 4;\n// public static COUNT: number = UBOGlobal.AMBIENT_GROUND_OFFSET + 4;\n// public static SIZE: number = UBOGlobal.COUNT * 4;\n// public static BLOCK: GFXUniformBlock = {\n// binding: UniformBinding.UBO_GLOBAL, name: 'CCGlobal', members: [\n// { name: 'cc_time', type: GFXType.FLOAT4, count: 1 },\n// { name: 'cc_screenSize', type: GFXType.FLOAT4, count: 1 },\n// { name: 'cc_screenScale', type: GFXType.FLOAT4, count: 1 },\n// { name: 'cc_nativeSize', type: GFXType.FLOAT4, count: 1 },\n// { name: 'cc_matView', type: GFXType.MAT4, count: 1 },\n// { name: 'cc_matViewInv', type: GFXType.MAT4, count: 1 },\n// { name: 'cc_matProj', type: GFXType.MAT4, count: 1 },\n// { name: 'cc_matProjInv', type: GFXType.MAT4, count: 1 },\n// { name: 'cc_matViewProj', type: GFXType.MAT4, count: 1 },\n// { name: 'cc_matViewProjInv', type: GFXType.MAT4, count: 1 },\n// { name: 'cc_cameraPos', type: GFXType.FLOAT4, count: 1 },\n// { name: 'cc_exposure', type: GFXType.FLOAT4, count: 1 },\n// { name: 'cc_mainLitDir', type: GFXType.FLOAT4, count: 1 },\n// { name: 'cc_mainLitColor', type: GFXType.FLOAT4, count: 1 },\n// { name: 'cc_ambientSky', type: GFXType.FLOAT4, count: 1 },\n// { name: 'cc_ambientGround', type: GFXType.FLOAT4, count: 1 },\n// ],\n// };\n// public view: Float32Array = new Float32Array(UBOGlobal.COUNT);\n// }\n// export class UBOShadow {\n// public static MAT_LIGHT_PLANE_PROJ_OFFSET: number = 0;\n// public static SHADOW_COLOR_OFFSET: number = UBOShadow.MAT_LIGHT_PLANE_PROJ_OFFSET + 16;\n// public static COUNT: number = UBOShadow.SHADOW_COLOR_OFFSET + 4;\n// public static SIZE: number = UBOShadow.COUNT * 4;\n// public static BLOCK: GFXUniformBlock = {\n// binding: UniformBinding.UBO_SHADOW, name: 'CCShadow', members: [\n// { name: 'cc_matLightPlaneProj', type: GFXType.MAT4, count: 1 },\n// { name: 'cc_shadowColor', type: GFXType.FLOAT4, count: 1 },\n// ],\n// };\n// public view: Float32Array = new Float32Array(UBOShadow.COUNT);\n// }\n// export const localBindingsDesc: Map = new Map();\n// export class UBOLocal {\n// public static MAT_WORLD_OFFSET: number = 0;\n// public static MAT_WORLD_IT_OFFSET: number = UBOLocal.MAT_WORLD_OFFSET + 16;\n// public static COUNT: number = UBOLocal.MAT_WORLD_IT_OFFSET + 16;\n// public static SIZE: number = UBOLocal.COUNT * 4;\n// public static BLOCK: GFXUniformBlock = {\n// binding: UniformBinding.UBO_LOCAL, name: 'CCLocal', members: [\n// { name: 'cc_matWorld', type: GFXType.MAT4, count: 1 },\n// { name: 'cc_matWorldIT', type: GFXType.MAT4, count: 1 },\n// ],\n// };\n// public view: Float32Array = new Float32Array(UBOLocal.COUNT);\n// }\n// localBindingsDesc.set(UBOLocal.BLOCK.name, {\n// type: GFXBindingType.UNIFORM_BUFFER,\n// blockInfo: UBOLocal.BLOCK,\n// });\n// export class UBOForwardLight {\n// public static MAX_SPHERE_LIGHTS = 2;\n// public static MAX_SPOT_LIGHTS = 2;\n// public static SPHERE_LIGHT_POS_OFFSET: number = 0;\n// public static SPHERE_LIGHT_SIZE_RANGE_OFFSET: number = UBOForwardLight.SPHERE_LIGHT_POS_OFFSET + UBOForwardLight.MAX_SPHERE_LIGHTS * 4;\n// public static SPHERE_LIGHT_COLOR_OFFSET: number = UBOForwardLight.SPHERE_LIGHT_SIZE_RANGE_OFFSET + UBOForwardLight.MAX_SPHERE_LIGHTS * 4;\n// public static SPOT_LIGHT_POS_OFFSET: number = UBOForwardLight.SPHERE_LIGHT_COLOR_OFFSET + UBOForwardLight.MAX_SPOT_LIGHTS * 4;\n// public static SPOT_LIGHT_SIZE_RANGE_ANGLE_OFFSET: number = UBOForwardLight.SPOT_LIGHT_POS_OFFSET + UBOForwardLight.MAX_SPOT_LIGHTS * 4;\n// public static SPOT_LIGHT_DIR_OFFSET: number = UBOForwardLight.SPOT_LIGHT_SIZE_RANGE_ANGLE_OFFSET + UBOForwardLight.MAX_SPOT_LIGHTS * 4;\n// public static SPOT_LIGHT_COLOR_OFFSET: number = UBOForwardLight.SPOT_LIGHT_DIR_OFFSET + UBOForwardLight.MAX_SPOT_LIGHTS * 4;\n// public static COUNT: number = UBOForwardLight.SPOT_LIGHT_COLOR_OFFSET + UBOForwardLight.MAX_SPOT_LIGHTS * 4;\n// public static SIZE: number = UBOForwardLight.COUNT * 4;\n// public static BLOCK: GFXUniformBlock = {\n// binding: UniformBinding.UBO_FORWARD_LIGHTS, name: 'CCForwardLight', members: [\n// { name: 'cc_sphereLitPos', type: GFXType.FLOAT4, count: UBOForwardLight.MAX_SPHERE_LIGHTS },\n// { name: 'cc_sphereLitSizeRange', type: GFXType.FLOAT4, count: UBOForwardLight.MAX_SPHERE_LIGHTS },\n// { name: 'cc_sphereLitColor', type: GFXType.FLOAT4, count: UBOForwardLight.MAX_SPHERE_LIGHTS },\n// { name: 'cc_spotLitPos', type: GFXType.FLOAT4, count: UBOForwardLight.MAX_SPOT_LIGHTS },\n// { name: 'cc_spotLitSizeRangeAngle', type: GFXType.FLOAT4, count: UBOForwardLight.MAX_SPOT_LIGHTS },\n// { name: 'cc_spotLitDir', type: GFXType.FLOAT4, count: UBOForwardLight.MAX_SPOT_LIGHTS },\n// { name: 'cc_spotLitColor', type: GFXType.FLOAT4, count: UBOForwardLight.MAX_SPOT_LIGHTS },\n// ],\n// };\n// public view: Float32Array = new Float32Array(UBOForwardLight.COUNT);\n// }\n// localBindingsDesc.set(UBOForwardLight.BLOCK.name, {\n// type: GFXBindingType.UNIFORM_BUFFER,\n// blockInfo: UBOForwardLight.BLOCK,\n// });\n// export class UBOSkinning {\n// public static MAT_JOINT_OFFSET: number = 0;\n// public static JOINTS_TEXTURE_SIZE_OFFSET: number = UBOSkinning.MAT_JOINT_OFFSET + 128 * 16;\n// public static COUNT: number = UBOSkinning.JOINTS_TEXTURE_SIZE_OFFSET + 4;\n// public static SIZE: number = UBOSkinning.COUNT * 4;\n// public static BLOCK: GFXUniformBlock = {\n// binding: UniformBinding.UBO_SKINNING, name: 'CCSkinning', members: [\n// { name: 'cc_matJoint', type: GFXType.MAT4, count: 128 },\n// { name: 'cc_jointsTextureSize', type: GFXType.FLOAT4, count: 1 },\n// ],\n// };\n// }\n// localBindingsDesc.set(UBOSkinning.BLOCK.name, {\n// type: GFXBindingType.UNIFORM_BUFFER,\n// blockInfo: UBOSkinning.BLOCK,\n// });\n// export const UNIFORM_JOINTS_TEXTURE: GFXUniformSampler = {\n// binding: UniformBinding.SAMPLER_JOINTS, name: 'cc_jointsTexture', type: GFXType.SAMPLER2D, count: 1,\n// };\n// localBindingsDesc.set(UNIFORM_JOINTS_TEXTURE.name, {\n// type: GFXBindingType.SAMPLER,\n// samplerInfo: UNIFORM_JOINTS_TEXTURE,\n// });\n// export interface IInternalBindingDesc {\n// type: GFXBindingType;\n// blockInfo?: GFXUniformBlock;\n// samplerInfo?: GFXUniformSampler;\n// }\n// export interface IInternalBindingInst extends IInternalBindingDesc {\n// buffer?: GFXBuffer;\n// sampler?: GFXSampler;\n// textureView?: GFXTextureView;\n// }\n\n// this file is used for offline effect building.\nvar _a, _b;\nvar SamplerInfoIndex;\n(function (SamplerInfoIndex) {\n SamplerInfoIndex[SamplerInfoIndex[\"minFilter\"] = 0] = \"minFilter\";\n SamplerInfoIndex[SamplerInfoIndex[\"magFilter\"] = 1] = \"magFilter\";\n SamplerInfoIndex[SamplerInfoIndex[\"mipFilter\"] = 2] = \"mipFilter\";\n SamplerInfoIndex[SamplerInfoIndex[\"addressU\"] = 3] = \"addressU\";\n SamplerInfoIndex[SamplerInfoIndex[\"addressV\"] = 4] = \"addressV\";\n SamplerInfoIndex[SamplerInfoIndex[\"addressW\"] = 5] = \"addressW\";\n SamplerInfoIndex[SamplerInfoIndex[\"maxAnisotropy\"] = 6] = \"maxAnisotropy\";\n SamplerInfoIndex[SamplerInfoIndex[\"cmpFunc\"] = 7] = \"cmpFunc\";\n SamplerInfoIndex[SamplerInfoIndex[\"minLOD\"] = 8] = \"minLOD\";\n SamplerInfoIndex[SamplerInfoIndex[\"maxLOD\"] = 9] = \"maxLOD\";\n SamplerInfoIndex[SamplerInfoIndex[\"mipLODBias\"] = 10] = \"mipLODBias\";\n SamplerInfoIndex[SamplerInfoIndex[\"borderColor\"] = 11] = \"borderColor\";\n SamplerInfoIndex[SamplerInfoIndex[\"total\"] = 15] = \"total\";\n})(SamplerInfoIndex || (SamplerInfoIndex = {}));\nvar typeMap = {};\ntypeMap[typeMap['bool'] = GFXType.BOOL] = 'bool';\ntypeMap[typeMap['int'] = GFXType.INT] = 'int';\ntypeMap[typeMap['ivec2'] = GFXType.INT2] = 'ivec2invTypeParams';\ntypeMap[typeMap['ivec3'] = GFXType.INT3] = 'ivec3';\ntypeMap[typeMap['ivec4'] = GFXType.INT4] = 'ivec4';\ntypeMap[typeMap['float'] = GFXType.FLOAT] = 'float';\ntypeMap[typeMap['vec2'] = GFXType.FLOAT2] = 'vec2';\ntypeMap[typeMap['vec3'] = GFXType.FLOAT3] = 'vec3';\ntypeMap[typeMap['vec4'] = GFXType.FLOAT4] = 'vec4';\ntypeMap[typeMap['mat2'] = GFXType.MAT2] = 'mat2';\ntypeMap[typeMap['mat3'] = GFXType.MAT3] = 'mat3';\ntypeMap[typeMap['mat4'] = GFXType.MAT4] = 'mat4';\ntypeMap[typeMap['sampler2D'] = GFXType.SAMPLER2D] = 'sampler2D';\ntypeMap[typeMap['samplerCube'] = GFXType.SAMPLER_CUBE] = 'samplerCube';\nvar sizeMap = (_a = {},\n _a[GFXType.BOOL] = 4,\n _a[GFXType.INT] = 4,\n _a[GFXType.INT2] = 8,\n _a[GFXType.INT3] = 12,\n _a[GFXType.INT4] = 16,\n _a[GFXType.FLOAT] = 4,\n _a[GFXType.FLOAT2] = 8,\n _a[GFXType.FLOAT3] = 12,\n _a[GFXType.FLOAT4] = 16,\n _a[GFXType.MAT2] = 16,\n _a[GFXType.MAT3] = 36,\n _a[GFXType.MAT4] = 64,\n _a[GFXType.SAMPLER2D] = 4,\n _a[GFXType.SAMPLER_CUBE] = 4,\n _a);\nvar formatMap = (_b = {},\n _b[GFXType.BOOL] = GFXFormat.R32I,\n _b[GFXType.INT] = GFXFormat.R32I,\n _b[GFXType.INT2] = GFXFormat.RG32I,\n _b[GFXType.INT3] = GFXFormat.RGB32I,\n _b[GFXType.INT4] = GFXFormat.RGBA32I,\n _b[GFXType.FLOAT] = GFXFormat.R32F,\n _b[GFXType.FLOAT2] = GFXFormat.RG32F,\n _b[GFXType.FLOAT3] = GFXFormat.RGB32F,\n _b[GFXType.FLOAT4] = GFXFormat.RGBA32F,\n _b);\n// const passParams = {\n// // color mask\n// NONE: gfx.GFXColorMask.NONE,\n// R: gfx.GFXColorMask.R,\n// G: gfx.GFXColorMask.G,\n// B: gfx.GFXColorMask.B,\n// A: gfx.GFXColorMask.A,\n// RG: gfx.GFXColorMask.R | gfx.GFXColorMask.G,\n// RB: gfx.GFXColorMask.R | gfx.GFXColorMask.B,\n// RA: gfx.GFXColorMask.R | gfx.GFXColorMask.A,\n// GB: gfx.GFXColorMask.G | gfx.GFXColorMask.B,\n// GA: gfx.GFXColorMask.G | gfx.GFXColorMask.A,\n// BA: gfx.GFXColorMask.B | gfx.GFXColorMask.A,\n// RGB: gfx.GFXColorMask.R | gfx.GFXColorMask.G | gfx.GFXColorMask.B,\n// RGA: gfx.GFXColorMask.R | gfx.GFXColorMask.G | gfx.GFXColorMask.A,\n// RBA: gfx.GFXColorMask.R | gfx.GFXColorMask.B | gfx.GFXColorMask.A,\n// GBA: gfx.GFXColorMask.G | gfx.GFXColorMask.B | gfx.GFXColorMask.A,\n// ALL: gfx.GFXColorMask.ALL,\n// // blend operation\n// ADD: gfx.GFXBlendOp.ADD,\n// SUB: gfx.GFXBlendOp.SUB,\n// REV_SUB: gfx.GFXBlendOp.REV_SUB,\n// MIN: gfx.GFXBlendOp.MIN,\n// MAX: gfx.GFXBlendOp.MAX,\n// // blend factor\n// ZERO: gfx.GFXBlendFactor.ZERO,\n// ONE: gfx.GFXBlendFactor.ONE,\n// SRC_ALPHA: gfx.GFXBlendFactor.SRC_ALPHA,\n// DST_ALPHA: gfx.GFXBlendFactor.DST_ALPHA,\n// ONE_MINUS_SRC_ALPHA: gfx.GFXBlendFactor.ONE_MINUS_SRC_ALPHA,\n// ONE_MINUS_DST_ALPHA: gfx.GFXBlendFactor.ONE_MINUS_DST_ALPHA,\n// SRC_COLOR: gfx.GFXBlendFactor.SRC_COLOR,\n// DST_COLOR: gfx.GFXBlendFactor.DST_COLOR,\n// ONE_MINUS_SRC_COLOR: gfx.GFXBlendFactor.ONE_MINUS_SRC_COLOR,\n// ONE_MINUS_DST_COLOR: gfx.GFXBlendFactor.ONE_MINUS_DST_COLOR,\n// SRC_ALPHA_SATURATE: gfx.GFXBlendFactor.SRC_ALPHA_SATURATE,\n// CONSTANT_COLOR: gfx.GFXBlendFactor.CONSTANT_COLOR,\n// ONE_MINUS_CONSTANT_COLOR: gfx.GFXBlendFactor.ONE_MINUS_CONSTANT_COLOR,\n// CONSTANT_ALPHA: gfx.GFXBlendFactor.CONSTANT_ALPHA,\n// ONE_MINUS_CONSTANT_ALPHA: gfx.GFXBlendFactor.ONE_MINUS_CONSTANT_ALPHA,\n// // stencil operation\n// // ZERO: GFXStencilOp.ZERO, // duplicate, safely removed because enum value is(and always will be) the same\n// KEEP: gfx.GFXStencilOp.KEEP,\n// REPLACE: gfx.GFXStencilOp.REPLACE,\n// INCR: gfx.GFXStencilOp.INCR,\n// DECR: gfx.GFXStencilOp.DECR,\n// INVERT: gfx.GFXStencilOp.INVERT,\n// INCR_WRAP: gfx.GFXStencilOp.INCR_WRAP,\n// DECR_WRAP: gfx.GFXStencilOp.DECR_WRAP,\n// // comparison function\n// NEVER: gfx.GFXComparisonFunc.NEVER,\n// LESS: gfx.GFXComparisonFunc.LESS,\n// EQUAL: gfx.GFXComparisonFunc.EQUAL,\n// LESS_EQUAL: gfx.GFXComparisonFunc.LESS_EQUAL,\n// GREATER: gfx.GFXComparisonFunc.GREATER,\n// NOT_EQUAL: gfx.GFXComparisonFunc.NOT_EQUAL,\n// GREATER_EQUAL: gfx.GFXComparisonFunc.GREATER_EQUAL,\n// ALWAYS: gfx.GFXComparisonFunc.ALWAYS,\n// // cull mode\n// // NONE: GFXCullMode.NONE, // duplicate, safely removed because enum value is(and always will be) the same\n// FRONT: gfx.GFXCullMode.FRONT,\n// BACK: gfx.GFXCullMode.BACK,\n// // shade mode\n// GOURAND: gfx.GFXShadeModel.GOURAND,\n// FLAT: gfx.GFXShadeModel.FLAT,\n// // polygon mode\n// FILL: gfx.GFXPolygonMode.FILL,\n// LINE: gfx.GFXPolygonMode.LINE,\n// POINT: gfx.GFXPolygonMode.POINT,\n// // primitive mode\n// POINT_LIST: gfx.GFXPrimitiveMode.POINT_LIST,\n// LINE_LIST: gfx.GFXPrimitiveMode.LINE_LIST,\n// LINE_STRIP: gfx.GFXPrimitiveMode.LINE_STRIP,\n// LINE_LOOP: gfx.GFXPrimitiveMode.LINE_LOOP,\n// TRIANGLE_LIST: gfx.GFXPrimitiveMode.TRIANGLE_LIST,\n// TRIANGLE_STRIP: gfx.GFXPrimitiveMode.TRIANGLE_STRIP,\n// TRIANGLE_FAN: gfx.GFXPrimitiveMode.TRIANGLE_FAN,\n// LINE_LIST_ADJACENCY: gfx.GFXPrimitiveMode.LINE_LIST_ADJACENCY,\n// LINE_STRIP_ADJACENCY: gfx.GFXPrimitiveMode.LINE_STRIP_ADJACENCY,\n// TRIANGLE_LIST_ADJACENCY: gfx.GFXPrimitiveMode.TRIANGLE_LIST_ADJACENCY,\n// TRIANGLE_STRIP_ADJACENCY: gfx.GFXPrimitiveMode.TRIANGLE_STRIP_ADJACENCY,\n// TRIANGLE_PATCH_ADJACENCY: gfx.GFXPrimitiveMode.TRIANGLE_PATCH_ADJACENCY,\n// QUAD_PATCH_LIST: gfx.GFXPrimitiveMode.QUAD_PATCH_LIST,\n// ISO_LINE_LIST: gfx.GFXPrimitiveMode.ISO_LINE_LIST,\n// // POINT: gfx.GFXFilter.POINT, // duplicate, safely removed because enum value is(and always will be) the same\n// LINEAR: gfx.GFXFilter.LINEAR,\n// ANISOTROPIC: gfx.GFXFilter.ANISOTROPIC,\n// WRAP: gfx.GFXAddress.WRAP,\n// MIRROR: gfx.GFXAddress.MIRROR,\n// CLAMP: gfx.GFXAddress.CLAMP,\n// BORDER: gfx.GFXAddress.BORDER,\n// VIEWPORT: gfx.GFXDynamicState.VIEWPORT,\n// SCISSOR: gfx.GFXDynamicState.SCISSOR,\n// LINE_WIDTH: gfx.GFXDynamicState.LINE_WIDTH,\n// DEPTH_BIAS: gfx.GFXDynamicState.DEPTH_BIAS,\n// BLEND_CONSTANTS: gfx.GFXDynamicState.BLEND_CONSTANTS,\n// DEPTH_BOUNDS: gfx.GFXDynamicState.DEPTH_BOUNDS,\n// STENCIL_WRITE_MASK: gfx.GFXDynamicState.STENCIL_WRITE_MASK,\n// STENCIL_COMPARE_MASK: gfx.GFXDynamicState.STENCIL_COMPARE_MASK,\n// TRUE: true,\n// FALSE: false\n// };\nvar passParams = {\n BACK: enums.CULL_BACK,\n FRONT: enums.CULL_FRONT,\n NONE: enums.CULL_NONE,\n ADD: enums.BLEND_FUNC_ADD,\n SUB: enums.BLEND_FUNC_SUBTRACT,\n REV_SUB: enums.BLEND_FUNC_REVERSE_SUBTRACT,\n ZERO: enums.BLEND_ZERO,\n ONE: enums.BLEND_ONE,\n SRC_COLOR: enums.BLEND_SRC_COLOR,\n ONE_MINUS_SRC_COLOR: enums.BLEND_ONE_MINUS_SRC_COLOR,\n DST_COLOR: enums.BLEND_DST_COLOR,\n ONE_MINUS_DST_COLOR: enums.BLEND_ONE_MINUS_DST_COLOR,\n SRC_ALPHA: enums.BLEND_SRC_ALPHA,\n ONE_MINUS_SRC_ALPHA: enums.BLEND_ONE_MINUS_SRC_ALPHA,\n DST_ALPHA: enums.BLEND_DST_ALPHA,\n ONE_MINUS_DST_ALPHA: enums.BLEND_ONE_MINUS_DST_ALPHA,\n CONSTANT_COLOR: enums.BLEND_CONSTANT_COLOR,\n ONE_MINUS_CONSTANT_COLOR: enums.BLEND_ONE_MINUS_CONSTANT_COLOR,\n CONSTANT_ALPHA: enums.BLEND_CONSTANT_ALPHA,\n ONE_MINUS_CONSTANT_ALPHA: enums.BLEND_ONE_MINUS_CONSTANT_ALPHA,\n SRC_ALPHA_SATURATE: enums.BLEND_SRC_ALPHA_SATURATE,\n NEVER: enums.DS_FUNC_NEVER,\n LESS: enums.DS_FUNC_LESS,\n EQUAL: enums.DS_FUNC_EQUAL,\n LEQUAL: enums.DS_FUNC_LEQUAL,\n GREATER: enums.DS_FUNC_GREATER,\n NOTEQUAL: enums.DS_FUNC_NOTEQUAL,\n GEQUAL: enums.DS_FUNC_GEQUAL,\n ALWAYS: enums.DS_FUNC_ALWAYS,\n KEEP: enums.STENCIL_OP_KEEP,\n REPLACE: enums.STENCIL_OP_REPLACE,\n INCR: enums.STENCIL_OP_INCR,\n INCR_WRAP: enums.STENCIL_OP_INCR_WRAP,\n DECR: enums.STENCIL_OP_DECR,\n DECR_WRAP: enums.STENCIL_OP_DECR_WRAP,\n INVERT: enums.STENCIL_OP_INVERT\n};\nObject.assign(passParams, RenderPassStage);\n// for structural type checking\n// an 'any' key will check against all elements defined in that object\n// a key start with '$' means its essential, and can't be undefined\nvar effectStructure = {\n $techniques: [\n {\n $passes: [\n {\n depthStencilState: {},\n rasterizerState: {},\n blendState: { targets: [{}] },\n properties: { any: { sampler: {}, inspector: {} } }\n }\n ]\n }\n ]\n};\nvar mappings = {\n murmurhash2_32_gc: murmurhash2_32_gc,\n SamplerInfoIndex: SamplerInfoIndex,\n effectStructure: effectStructure,\n typeMap: typeMap,\n sizeMap: sizeMap,\n formatMap: formatMap,\n passParams: passParams,\n RenderQueue: RenderQueue,\n RenderPriority: RenderPriority,\n GFXGetTypeSize: GFXGetTypeSize,\n UniformBinding: UniformBinding\n};\n\nmodule.exports = mappings;\n","// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\nimport { RecyclePool } from '../memop';\nimport enums from '../enums';\nimport { Vec2, Vec4, Mat3, Mat4, Color, Vec3 } from '../../core/value-types';\nimport ProgramLib from './program-lib';\nimport View from './view';\nimport gfx from '../gfx';\n\nlet _m4_tmp = new Mat4();\n\nlet _stageInfos = new RecyclePool(() => {\n return {\n stage: null,\n items: null,\n };\n}, 8);\n\nlet _float2_pool = new RecyclePool(() => {\n return new Float32Array(2);\n}, 8);\n\nlet _float3_pool = new RecyclePool(() => {\n return new Float32Array(3);\n}, 8);\n\nlet _float4_pool = new RecyclePool(() => {\n return new Float32Array(4);\n}, 8);\n\nlet _float9_pool = new RecyclePool(() => {\n return new Float32Array(9);\n}, 8);\n\nlet _float16_pool = new RecyclePool(() => {\n return new Float32Array(16);\n}, 8);\n\nlet _float64_pool = new RecyclePool(() => {\n return new Float32Array(64);\n}, 8);\n\nlet _int2_pool = new RecyclePool(() => {\n return new Int32Array(2);\n}, 8);\n\nlet _int3_pool = new RecyclePool(() => {\n return new Int32Array(3);\n}, 8);\n\nlet _int4_pool = new RecyclePool(() => {\n return new Int32Array(4);\n}, 8);\n\nlet _int64_pool = new RecyclePool(() => {\n return new Int32Array(64);\n}, 8);\n\nexport default class Base {\n /**\n * @param {gfx.Device} device\n * @param {Object} opts\n * @param {gfx.Texture2D} opts.defaultTexture\n * @param {gfx.TextureCube} opts.defaultTextureCube\n */\n constructor (device, opts) {\n this._device = device;\n this._programLib = new ProgramLib(device);\n this._opts = opts;\n this._type2defaultValue = {\n [enums.PARAM_INT]: 0,\n [enums.PARAM_INT2]: new Vec2(0, 0),\n [enums.PARAM_INT3]: new Vec3(0, 0, 0),\n [enums.PARAM_INT4]: new Vec4(0, 0, 0, 0),\n [enums.PARAM_FLOAT]: 0.0,\n [enums.PARAM_FLOAT2]: new Vec2(0, 0),\n [enums.PARAM_FLOAT3]: new Vec3(0, 0, 0),\n [enums.PARAM_FLOAT4]: new Vec4(0, 0, 0, 0),\n [enums.PARAM_COLOR4]: new Color(0, 0, 0, 1),\n [enums.PARAM_MAT3]: new Mat3(),\n [enums.PARAM_MAT4]: new Mat4(),\n [enums.PARAM_TEXTURE_2D]: opts.defaultTexture,\n [enums.PARAM_TEXTURE_CUBE]: opts.defaultTextureCube,\n };\n this._stage2fn = {};\n this._usedTextureUnits = 0;\n\n this._viewPools = new RecyclePool(() => {\n return new View();\n }, 8);\n\n this._drawItemsPools = new RecyclePool(() => {\n return {\n model: null,\n node: null,\n ia: null,\n effect: null,\n defines: null,\n uniforms: null\n };\n }, 100);\n\n this._stageItemsPools = new RecyclePool(() => {\n return new RecyclePool(() => {\n return {\n model: null,\n node: null,\n ia: null,\n effect: null,\n defines: null,\n passes: [],\n sortKey: -1,\n uniforms: null\n };\n }, 100);\n }, 16);\n\n this._definesChanged = false;\n }\n\n _resetTextuerUnit () {\n this._usedTextureUnits = 0;\n }\n\n _allocTextureUnit () {\n const device = this._device;\n\n let unit = this._usedTextureUnits;\n if (unit >= device._caps.maxTextureUnits) {\n console.warn(`Trying to use ${unit} texture units while this GPU supports only ${device._caps.maxTextureUnits}`);\n }\n\n this._usedTextureUnits += 1;\n return unit;\n }\n\n _registerStage (name, fn) {\n this._stage2fn[name] = fn;\n }\n\n clear () {\n this._programLib.clear();\n this.reset();\n }\n\n reset () {\n this._viewPools.reset();\n this._stageItemsPools.reset();\n\n this._definesChanged = false;\n }\n\n _requestView () {\n return this._viewPools.add();\n }\n\n _render (view, scene) {\n const device = this._device;\n\n // setup framebuffer\n device.setFrameBuffer(view._framebuffer);\n\n // setup viewport\n device.setViewport(\n view._rect.x,\n view._rect.y,\n view._rect.w,\n view._rect.h\n );\n\n // setup clear\n let clearOpts = {};\n if (view._clearFlags & enums.CLEAR_COLOR) {\n clearOpts.color = Vec4.toArray([], view._color);\n }\n if (view._clearFlags & enums.CLEAR_DEPTH) {\n clearOpts.depth = view._depth;\n }\n if (view._clearFlags & enums.CLEAR_STENCIL) {\n clearOpts.stencil = view._stencil;\n }\n device.clear(clearOpts);\n\n // get all draw items\n this._drawItemsPools.reset();\n\n for (let i = 0; i < scene._models.length; ++i) {\n let model = scene._models.data[i];\n\n // filter model by view\n if ((model._cullingMask & view._cullingMask) === 0) {\n continue;\n }\n\n let drawItem = this._drawItemsPools.add();\n model.extractDrawItem(drawItem);\n }\n\n // dispatch draw items to different stage\n _stageInfos.reset();\n\n for (let i = 0; i < view._stages.length; ++i) {\n let stage = view._stages[i];\n let stageItems = this._stageItemsPools.add();\n stageItems.reset();\n\n for (let j = 0; j < this._drawItemsPools.length; ++j) {\n let drawItem = this._drawItemsPools.data[j];\n let passes = drawItem.effect.stagePasses[stage];\n if (!passes || passes.length === 0) continue;\n\n let stageItem = stageItems.add();\n stageItem.passes = passes;\n stageItem.model = drawItem.model;\n stageItem.node = drawItem.node;\n stageItem.ia = drawItem.ia;\n stageItem.effect = drawItem.effect;\n stageItem.defines = drawItem.defines;\n stageItem.sortKey = -1;\n stageItem.uniforms = drawItem.uniforms;\n }\n\n let stageInfo = _stageInfos.add();\n stageInfo.stage = stage;\n stageInfo.items = stageItems;\n }\n\n // render stages\n for (let i = 0; i < _stageInfos.length; ++i) {\n let info = _stageInfos.data[i];\n let fn = this._stage2fn[info.stage];\n fn(view, info.items);\n }\n }\n\n _setProperty (prop) {\n const device = this._device;\n let param = prop.value;\n\n if (param === undefined) {\n param = prop.val;\n }\n\n if (param === undefined) {\n param = this._type2defaultValue[prop.type];\n }\n\n if (param === undefined) {\n console.warn(`Failed to set technique property ${prop.name}, value not found.`);\n return;\n }\n\n if (\n prop.type === enums.PARAM_TEXTURE_2D ||\n prop.type === enums.PARAM_TEXTURE_CUBE\n ) {\n if (Array.isArray(param)) {\n if (param.length > prop.count) {\n console.error(`Failed to set property [${prop.name}] : The length of texture array [${param.length}] is bigger than [${prop.count}].`);\n return;\n }\n let slots = _int64_pool.add();\n for (let index = 0; index < param.length; ++index) {\n slots[index] = this._allocTextureUnit();\n }\n device.setTextureArray(prop.name, param, slots);\n } else {\n device.setTexture(prop.name, param, this._allocTextureUnit());\n }\n } else {\n if (prop.directly) {\n device.setUniformDirectly(prop.name, param);\n }\n else {\n device.setUniform(prop.name, param);\n }\n }\n }\n\n _draw (item) {\n const device = this._device;\n const programLib = this._programLib;\n const { node, ia, passes, effect } = item;\n\n // reset the pool\n // NOTE: we can use drawCounter optimize this\n // TODO: should be configurable\n _float2_pool.reset();\n _float3_pool.reset();\n _float4_pool.reset();\n _float9_pool.reset();\n _float16_pool.reset();\n _float64_pool.reset();\n _int2_pool.reset();\n _int3_pool.reset();\n _int4_pool.reset();\n _int64_pool.reset();\n\n // set common uniforms\n // TODO: try commit this depends on effect\n // {\n node.getWorldMatrix(_m4_tmp);\n device.setUniform('cc_matWorld', Mat4.toArray(_float16_pool.add(), _m4_tmp));\n\n // let wq = node.getWorldRotation(cc.quat());\n Mat4.invert(_m4_tmp, _m4_tmp);\n Mat4.transpose(_m4_tmp, _m4_tmp);\n device.setUniform('cc_matWorldIT', Mat4.toArray(_float16_pool.add(), _m4_tmp));\n // }\n\n let defines = this._defines;\n\n // for each pass\n for (let i = 0; i < passes.length; ++i) {\n let pass = passes[i];\n\n if (this._definesChanged) {\n pass._programKey = null;\n }\n\n let count = ia.count;\n\n // set vertex buffer\n if (ia._vertexBuffer) {\n device.setVertexBuffer(0, ia._vertexBuffer);\n }\n\n // set index buffer\n if (ia._indexBuffer) {\n device.setIndexBuffer(ia._indexBuffer);\n }\n\n // set primitive type\n device.setPrimitiveType(ia._primitiveType);\n\n // set program\n Object.setPrototypeOf(defines, pass._defines);\n\n let program = programLib.getProgram(pass, defines, effect.name);\n device.setProgram(program);\n\n let uniforms = program._uniforms;\n let variants = pass._properties;\n for (let j = 0; j < uniforms.length; j++) {\n let prop = variants[uniforms[j].name];\n if (prop !== undefined)\n this._setProperty(prop);\n }\n\n\n // cull mode\n device.setCullMode(pass._cullMode);\n\n // blend\n if (pass._blend) {\n device.enableBlend();\n device.setBlendFuncSep(\n pass._blendSrc,\n pass._blendDst,\n pass._blendSrcAlpha,\n pass._blendDstAlpha\n );\n device.setBlendEqSep(\n pass._blendEq,\n pass._blendAlphaEq\n );\n device.setBlendColor32(pass._blendColor);\n }\n\n // depth test & write\n if (pass._depthTest) {\n device.enableDepthTest();\n device.setDepthFunc(pass._depthFunc);\n }\n if (pass._depthWrite) {\n device.enableDepthWrite();\n }\n\n // stencil\n device.setStencilTest(pass._stencilTest);\n if (pass._stencilTest === gfx.STENCIL_ENABLE) {\n // front\n device.setStencilFuncFront(\n pass._stencilFuncFront,\n pass._stencilRefFront,\n pass._stencilMaskFront\n );\n device.setStencilOpFront(\n pass._stencilFailOpFront,\n pass._stencilZFailOpFront,\n pass._stencilZPassOpFront,\n pass._stencilWriteMaskFront\n );\n\n // back\n device.setStencilFuncBack(\n pass._stencilFuncBack,\n pass._stencilRefBack,\n pass._stencilMaskBack\n );\n device.setStencilOpBack(\n pass._stencilFailOpBack,\n pass._stencilZFailOpBack,\n pass._stencilZPassOpBack,\n pass._stencilWriteMaskBack\n );\n }\n\n // draw pass\n device.draw(ia._start, count);\n\n this._resetTextuerUnit();\n }\n }\n}\n","// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\nimport gfx from '../gfx';\n\nexport default class InputAssembler {\n constructor(vb, ib, pt = gfx.PT_TRIANGLES) {\n this._vertexBuffer = vb;\n this._indexBuffer = ib;\n this._primitiveType = pt;\n this._start = 0;\n this._count = -1;\n\n // TODO: instancing data\n // this._stream = 0;\n }\n\n /**\n * @property {Number} count The number of indices or vertices to dispatch in the draw call.\n */\n get count() {\n if (this._count !== -1) {\n return this._count;\n }\n\n if (this._indexBuffer) {\n return this._indexBuffer.count;\n }\n\n if (this._vertexBuffer) {\n return this._vertexBuffer.count;\n }\n\n return 0;\n }\n}","// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\nimport gfx from '../gfx';\nimport enums from '../enums';\nimport ValueType from '../../core/value-types/value-type';\n\nexport default class Pass {\n constructor (name, detailName, programName, stage, properties = {}, defines = {}) {\n this._name = name;\n this._detailName = detailName;\n this._programName = programName;\n this._programKey = null;\n this._stage = stage;\n this._properties = properties;\n this._defines = defines;\n\n // cullmode\n this._cullMode = gfx.CULL_BACK;\n\n // blending\n this._blend = false;\n this._blendEq = gfx.BLEND_FUNC_ADD;\n this._blendAlphaEq = gfx.BLEND_FUNC_ADD;\n this._blendSrc = gfx.BLEND_SRC_ALPHA;\n this._blendDst = gfx.BLEND_ONE_MINUS_SRC_ALPHA;\n this._blendSrcAlpha = gfx.BLEND_SRC_ALPHA;\n this._blendDstAlpha = gfx.BLEND_ONE_MINUS_SRC_ALPHA;\n this._blendColor = 0xffffffff;\n\n // depth\n this._depthTest = false;\n this._depthWrite = false;\n this._depthFunc = gfx.DS_FUNC_LESS,\n\n // stencil\n this._stencilTest = gfx.STENCIL_INHERIT;\n\n // front\n this._stencilFuncFront = gfx.DS_FUNC_ALWAYS;\n this._stencilRefFront = 0;\n this._stencilMaskFront = 0xff;\n this._stencilFailOpFront = gfx.STENCIL_OP_KEEP;\n this._stencilZFailOpFront = gfx.STENCIL_OP_KEEP;\n this._stencilZPassOpFront = gfx.STENCIL_OP_KEEP;\n this._stencilWriteMaskFront = 0xff;\n // back\n this._stencilFuncBack = gfx.DS_FUNC_ALWAYS;\n this._stencilRefBack = 0;\n this._stencilMaskBack = 0xff;\n this._stencilFailOpBack = gfx.STENCIL_OP_KEEP;\n this._stencilZFailOpBack = gfx.STENCIL_OP_KEEP;\n this._stencilZPassOpBack = gfx.STENCIL_OP_KEEP;\n this._stencilWriteMaskBack = 0xff;\n }\n\n setCullMode (cullMode = gfx.CULL_BACK) {\n this._cullMode = cullMode;\n }\n\n setBlend (\n enabled = false,\n blendEq = gfx.BLEND_FUNC_ADD,\n blendSrc = gfx.BLEND_SRC_ALPHA,\n blendDst = gfx.BLEND_ONE_MINUS_SRC_ALPHA,\n blendAlphaEq = gfx.BLEND_FUNC_ADD,\n blendSrcAlpha = gfx.BLEND_SRC_ALPHA,\n blendDstAlpha = gfx.BLEND_ONE_MINUS_SRC_ALPHA,\n blendColor = 0xffffffff\n ) {\n this._blend = enabled;\n this._blendEq = blendEq;\n this._blendSrc = blendSrc;\n this._blendDst = blendDst;\n this._blendAlphaEq = blendAlphaEq;\n this._blendSrcAlpha = blendSrcAlpha;\n this._blendDstAlpha = blendDstAlpha;\n this._blendColor = blendColor;\n }\n\n setDepth (\n depthTest = false,\n depthWrite = false,\n depthFunc = gfx.DS_FUNC_LESS\n ) {\n this._depthTest = depthTest;\n this._depthWrite = depthWrite;\n this._depthFunc = depthFunc;\n }\n\n setStencilFront (\n enabled = gfx.STENCIL_INHERIT,\n stencilFunc = gfx.DS_FUNC_ALWAYS,\n stencilRef = 0,\n stencilMask = 0xff,\n stencilFailOp = gfx.STENCIL_OP_KEEP,\n stencilZFailOp = gfx.STENCIL_OP_KEEP,\n stencilZPassOp = gfx.STENCIL_OP_KEEP,\n stencilWriteMask = 0xff\n ) {\n this._stencilTest = enabled;\n this._stencilFuncFront = stencilFunc;\n this._stencilRefFront = stencilRef;\n this._stencilMaskFront = stencilMask;\n this._stencilFailOpFront = stencilFailOp;\n this._stencilZFailOpFront = stencilZFailOp;\n this._stencilZPassOpFront = stencilZPassOp;\n this._stencilWriteMaskFront = stencilWriteMask;\n }\n\n setStencilEnabled (stencilTest = gfx.STENCIL_INHERIT) {\n this._stencilTest = stencilTest;\n }\n\n setStencilBack (\n stencilTest = gfx.STENCIL_INHERIT,\n stencilFunc = gfx.DS_FUNC_ALWAYS,\n stencilRef = 0,\n stencilMask = 0xff,\n stencilFailOp = gfx.STENCIL_OP_KEEP,\n stencilZFailOp = gfx.STENCIL_OP_KEEP,\n stencilZPassOp = gfx.STENCIL_OP_KEEP,\n stencilWriteMask = 0xff\n ) {\n this._stencilTest = stencilTest;\n this._stencilFuncBack = stencilFunc;\n this._stencilRefBack = stencilRef;\n this._stencilMaskBack = stencilMask;\n this._stencilFailOpBack = stencilFailOp;\n this._stencilZFailOpBack = stencilZFailOp;\n this._stencilZPassOpBack = stencilZPassOp;\n this._stencilWriteMaskBack = stencilWriteMask;\n }\n\n setStage (stage) {\n this._stage = stage;\n }\n\n setProperties (properties) {\n this._properties = properties;\n }\n\n getProperty (name) {\n if (!this._properties[name]) {\n return;\n }\n return this._properties[name].value;\n }\n\n setProperty (name, value, directly) {\n let prop = this._properties[name];\n if (!prop) {\n return false;\n }\n\n prop.directly = directly;\n\n if (Array.isArray(value)) {\n let array = prop.value;\n if (array.length !== value.length) {\n cc.warnID(9105, this._name, name);\n return;\n }\n for (let i = 0; i < value.length; i++) {\n array[i] = value[i];\n }\n }\n else {\n if (value && !ArrayBuffer.isView(value)) {\n if (prop.type === enums.PARAM_TEXTURE_2D) {\n prop.value = value.getImpl();\n }\n else if (value instanceof ValueType) {\n value.constructor.toArray(prop.value, value);\n }\n else {\n if (typeof value === 'object') {\n cc.warnID(9106, this._name, name);\n }\n prop.value = value;\n }\n }\n else {\n prop.value = value;\n }\n }\n\n return true;\n }\n\n getDefine (name) {\n return this._defines[name];\n }\n\n define (name, value, force) {\n let oldValue = this._defines[name];\n\n if (!force && oldValue === undefined) {\n return false;\n }\n\n if (oldValue !== value) {\n this._defines[name] = value;\n this._programKey = null;\n }\n\n return true;\n }\n\n clone () {\n let pass = new Pass(this._programName);\n Object.assign(pass, this);\n\n let newProperties = {};\n let properties = this._properties;\n for (let name in properties) {\n let prop = properties[name];\n let newProp = newProperties[name] = {};\n\n let value = prop.value;\n if (Array.isArray(value)) {\n newProp.value = value.concat();\n }\n else if (ArrayBuffer.isView(value)) {\n newProp.value = new value.__proto__.constructor(value);\n }\n else {\n newProp.value = value;\n }\n\n for (let name in prop) {\n if (name === 'value') continue;\n newProp[name] = prop[name];\n }\n }\n\n pass._properties = newProperties;\n pass._defines = Object.assign({}, this._defines);\n\n return pass;\n }\n}\n","// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\nimport gfx from '../gfx';\n\nlet _shdID = 0;\n\nfunction _generateDefines(tmpDefines, defines) {\n let results = [];\n for (let i = 0; i < tmpDefines.length; i++) {\n let name = tmpDefines[i].name;\n let value = defines[name];\n if (typeof value !== 'number') {\n value = value ? 1 : 0;\n }\n results.push(`#define ${name} ${value}`);\n }\n return results.join('\\n') + '\\n';\n}\n\nfunction _replaceMacroNums(string, tmpDefines, defines) {\n let tmp = string;\n\n for (let i = 0; i < tmpDefines.length; i++) {\n let name = tmpDefines[i].name;\n let value = defines[name];\n if (Number.isInteger(value)) {\n let reg = new RegExp(name, 'g');\n tmp = tmp.replace(reg, value);\n }\n }\n return tmp;\n}\n\nfunction _unrollLoops(string) {\n let pattern = /#pragma for (\\w+) in range\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)([\\s\\S]+?)#pragma endFor/g;\n function replace(match, index, begin, end, snippet) {\n let unroll = '';\n let parsedBegin = parseInt(begin);\n let parsedEnd = parseInt(end);\n if (parsedBegin.isNaN || parsedEnd.isNaN) {\n console.error('Unroll For Loops Error: begin and end of range must be an int num.');\n }\n for (let i = parsedBegin; i < parsedEnd; ++i) {\n unroll += snippet.replace(new RegExp(`{${index}}`, 'g'), i);\n }\n return unroll;\n }\n return string.replace(pattern, replace);\n}\n\nfunction _replaceHighp(string) {\n return string.replace(/\\bhighp\\b/g, 'mediump');\n}\n\nexport default class ProgramLib {\n /**\n * @param {gfx.Device} device\n */\n constructor(device) {\n this._device = device;\n\n // register templates\n this._templates = {};\n this._cache = {};\n\n this._checkPrecision();\n }\n\n clear () {\n this._templates = {};\n this._cache = {};\n }\n\n /**\n * @param {string} name\n * @param {string} vert\n * @param {string} frag\n * @param {Object[]} defines\n *\n * @example:\n * // this object is auto-generated from your actual shaders\n * let program = {\n * name: 'foobar',\n * vert: vertTmpl,\n * frag: fragTmpl,\n * defines: [\n * { name: 'shadow', type: 'boolean' },\n * { name: 'lightCount', type: 'number', min: 1, max: 4 }\n * ],\n * attributes: [{ name: 'a_position', type: 'vec3' }],\n * uniforms: [{ name: 'color', type: 'vec4' }],\n * extensions: ['GL_OES_standard_derivatives'],\n * };\n * programLib.define(program);\n */\n define(prog) {\n let { name, defines, glsl1 } = prog;\n let { vert, frag } = glsl1 || prog;\n if (this._templates[name]) {\n // console.warn(`Failed to define shader ${name}: already exists.`);\n return;\n }\n\n let id = ++_shdID;\n\n // calculate option mask offset\n let offset = 0;\n for (let i = 0; i < defines.length; ++i) {\n let def = defines[i];\n let cnt = 1;\n\n if (def.type === 'number') {\n let range = def.range || [];\n def.min = range[0] || 0;\n def.max = range[1] || 4;\n cnt = Math.ceil(Math.log2(def.max - def.min));\n\n def._map = function (value) {\n return (value - this.min) << this._offset;\n }.bind(def);\n } else { // boolean\n def._map = function (value) {\n if (value) {\n return 1 << this._offset;\n }\n return 0;\n }.bind(def);\n }\n\n def._offset = offset;\n offset += cnt;\n }\n\n let uniforms = prog.uniforms || [];\n\n if (prog.samplers) {\n for (let i = 0; i < prog.samplers.length; i++) {\n uniforms.push(prog.samplers[i])\n }\n }\n if (prog.blocks) {\n for (let i = 0; i < prog.blocks.length; i++) {\n let defines = prog.blocks[i].defines;\n let members = prog.blocks[i].members;\n for (let j = 0; j < members.length; j++) {\n uniforms.push({\n defines,\n name: members[j].name,\n type: members[j].type,\n })\n }\n }\n }\n\n // store it\n this._templates[name] = {\n id,\n name,\n vert,\n frag,\n defines,\n attributes: prog.attributes,\n uniforms,\n extensions: prog.extensions\n };\n }\n\n getTemplate(name) {\n return this._templates[name];\n }\n\n /**\n * Does this library has the specified program?\n * @param {string} name\n * @returns {boolean}\n */\n hasProgram(name) {\n return this._templates[name] !== undefined;\n }\n\n getKey(name, defines) {\n let tmpl = this._templates[name];\n let key = 0;\n for (let i = 0; i < tmpl.defines.length; ++i) {\n let tmplDefs = tmpl.defines[i];\n\n let value = defines[tmplDefs.name];\n if (value === undefined) {\n continue;\n }\n\n key |= tmplDefs._map(value);\n }\n\n // return key << 8 | tmpl.id;\n // key number maybe bigger than 32 bit, need use string to store value.\n return tmpl.id + ':' + key;\n }\n\n getProgram(pass, defines, errPrefix) {\n let key = pass._programKey = pass._programKey || this.getKey(pass._programName, defines);\n let program = this._cache[key];\n if (program) {\n return program;\n }\n\n // get template\n let tmpl = this._templates[pass._programName];\n let customDef = _generateDefines(tmpl.defines, defines);\n let vert = _replaceMacroNums(tmpl.vert, tmpl.defines, defines);\n vert = customDef + _unrollLoops(vert);\n if (!this._highpSupported) {\n vert = _replaceHighp(vert);\n }\n\n let frag = _replaceMacroNums(tmpl.frag, tmpl.defines, defines);\n frag = customDef + _unrollLoops(frag);\n if (!this._highpSupported) {\n frag = _replaceHighp(frag);\n }\n\n program = new gfx.Program(this._device, {\n vert,\n frag\n });\n let errors = program.link();\n if (errors) {\n let vertLines = vert.split('\\n');\n let fragLines = frag.split('\\n');\n let defineLength = tmpl.defines.length;\n errors.forEach(err => {\n let line = err.line - 1;\n let originLine = err.line - defineLength;\n\n let lines = err.type === 'vs' ? vertLines : fragLines;\n // let source = ` ${lines[line-1]}\\n>${lines[line]}\\n ${lines[line+1]}`;\n let source = lines[line];\n\n let info = err.info || `Failed to compile ${err.type} ${err.fileID} (ln ${originLine}): \\n ${err.message}: \\n ${source}`;\n cc.error(`${errPrefix} : ${info}`);\n })\n }\n this._cache[key] = program;\n\n return program;\n }\n\n _checkPrecision () {\n let gl = this._device._gl;\n let highpSupported = false;\n if (gl.getShaderPrecisionFormat) {\n let vertHighp = gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_FLOAT);\n let fragHighp = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT);\n highpSupported = (vertHighp && vertHighp.precision > 0) &&\n (fragHighp && fragHighp.precision > 0);\n }\n if (!highpSupported) {\n cc.warnID(9102);\n }\n this._highpSupported = highpSupported;\n }\n}\n","// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\nexport default class Technique {\n constructor(name, passes) {\n this._name = name;\n this._passes = passes;\n }\n\n get name () {\n return this._name;\n }\n\n get passes() {\n return this._passes;\n }\n\n clone () {\n let passes = [];\n for (let i = 0; i < this._passes.length; i++) {\n passes.push(this._passes[i].clone());\n }\n return new Technique(this._name, passes);\n }\n}","// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\nimport { Vec3, Mat4, Vec4 } from '../../core/value-types';\nimport enums from '../enums';\n\nlet _m4_tmp = new Mat4();\nlet _genID = 0;\n\n/**\n * A representation of a single camera view\n */\nexport default class View {\n /**\n * Setup a default view\n */\n constructor() {\n this._id = _genID++;\n\n // priority. the smaller one will be rendered first\n this._priority = 0;\n\n // viewport\n this._rect = {\n x: 0, y: 0, w: 1, h: 1\n };\n\n // TODO:\n // this._scissor = {\n // x: 0, y: 0, w: 1, h: 1\n // };\n\n // clear options\n this._color = new Vec4(0.3, 0.3, 0.3, 1);\n this._depth = 1;\n this._stencil = 0;\n this._clearFlags = enums.CLEAR_COLOR | enums.CLEAR_DEPTH;\n this._clearModel = null;\n\n // matrix\n this._matView = cc.mat4();\n this._matViewInv = cc.mat4();\n this._matProj = cc.mat4();\n this._matViewProj = cc.mat4();\n this._matInvViewProj = cc.mat4();\n\n // stages & framebuffer\n this._stages = [];\n this._cullingByID = false;\n this._framebuffer = null;\n\n this._shadowLight = null; // TODO: should not refer light in view.\n\n this._cullingMask = 0xffffffff;\n }\n\n /**\n * Get the view's forward direction\n * @param {Vec3} out the receiving vector\n * @returns {Vec3} the receiving vector\n */\n getForward(out) {\n let m = this._matView.m;\n return Vec3.set(\n out,\n -m[2],\n -m[6],\n -m[10]\n );\n }\n\n /**\n * Get the view's observing location\n * @param {Vec3} out the receiving vector\n * @returns {Vec3} the receiving vector\n */\n getPosition(out) {\n Mat4.invert(_m4_tmp, this._matView);\n return Mat4.getTranslation(out, _m4_tmp);\n }\n}\n","// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\nimport { typeMap } from './build/mappings'\n\nexport default {\n // projection\n PROJ_PERSPECTIVE: 0,\n PROJ_ORTHO: 1,\n\n // lights\n LIGHT_DIRECTIONAL: 0,\n LIGHT_POINT: 1,\n LIGHT_SPOT: 2,\n LIGHT_AMBIENT: 3,\n\n // shadows\n SHADOW_NONE: 0,\n SHADOW_HARD: 1,\n SHADOW_SOFT: 2,\n\n // parameter type\n PARAM_INT: typeMap.int,\n PARAM_INT2: typeMap.ivec2,\n PARAM_INT3: typeMap.ivec3,\n PARAM_INT4: typeMap.ivec4,\n PARAM_FLOAT: typeMap.float,\n PARAM_FLOAT2: typeMap.vec2,\n PARAM_FLOAT3: typeMap.vec3,\n PARAM_FLOAT4: typeMap.vec4,\n PARAM_MAT2: typeMap.mat2,\n PARAM_MAT3: typeMap.mat3,\n PARAM_MAT4: typeMap.mat4,\n PARAM_TEXTURE_2D: typeMap.sampler2D,\n PARAM_TEXTURE_CUBE: typeMap.samplerCube,\n\n // clear flags\n CLEAR_COLOR: 1,\n CLEAR_DEPTH: 2,\n CLEAR_STENCIL: 4,\n CLEAR_SKYBOX: 8,\n\n //\n BUFFER_VIEW_INT8: 0,\n BUFFER_VIEW_UINT8: 1,\n BUFFER_VIEW_INT16: 2,\n BUFFER_VIEW_UINT16: 3,\n BUFFER_VIEW_INT32: 4,\n BUFFER_VIEW_UINT32: 5,\n BUFFER_VIEW_FLOAT32: 6,\n};\n","import State from './state';\nimport { enums } from './enums';\n\nimport Texture2D from './texture-2d';\nimport TextureCube from './texture-cube';\n\nconst GL_INT = 5124;\nconst GL_FLOAT = 5126;\nconst GL_FLOAT_VEC2 = 35664;\nconst GL_FLOAT_VEC3 = 35665;\nconst GL_FLOAT_VEC4 = 35666;\nconst GL_INT_VEC2 = 35667;\nconst GL_INT_VEC3 = 35668;\nconst GL_INT_VEC4 = 35669;\nconst GL_BOOL = 35670;\nconst GL_BOOL_VEC2 = 35671;\nconst GL_BOOL_VEC3 = 35672;\nconst GL_BOOL_VEC4 = 35673;\nconst GL_FLOAT_MAT2 = 35674;\nconst GL_FLOAT_MAT3 = 35675;\nconst GL_FLOAT_MAT4 = 35676;\nconst GL_SAMPLER_2D = 35678;\nconst GL_SAMPLER_CUBE = 35680;\n\n/**\n * _type2uniformCommit\n */\nlet _type2uniformCommit = {\n [GL_INT]: function (gl, id, value) {\n gl.uniform1i(id, value);\n },\n\n [GL_FLOAT]: function (gl, id, value) {\n gl.uniform1f(id, value);\n },\n\n [GL_FLOAT_VEC2]: function (gl, id, value) {\n gl.uniform2fv(id, value);\n },\n\n [GL_FLOAT_VEC3]: function (gl, id, value) {\n gl.uniform3fv(id, value);\n },\n\n [GL_FLOAT_VEC4]: function (gl, id, value) {\n gl.uniform4fv(id, value);\n },\n\n [GL_INT_VEC2]: function (gl, id, value) {\n gl.uniform2iv(id, value);\n },\n\n [GL_INT_VEC3]: function (gl, id, value) {\n gl.uniform3iv(id, value);\n },\n\n [GL_INT_VEC4]: function (gl, id, value) {\n gl.uniform4iv(id, value);\n },\n\n [GL_BOOL]: function (gl, id, value) {\n gl.uniform1i(id, value);\n },\n\n [GL_BOOL_VEC2]: function (gl, id, value) {\n gl.uniform2iv(id, value);\n },\n\n [GL_BOOL_VEC3]: function (gl, id, value) {\n gl.uniform3iv(id, value);\n },\n\n [GL_BOOL_VEC4]: function (gl, id, value) {\n gl.uniform4iv(id, value);\n },\n\n [GL_FLOAT_MAT2]: function (gl, id, value) {\n gl.uniformMatrix2fv(id, false, value);\n },\n\n [GL_FLOAT_MAT3]: function (gl, id, value) {\n gl.uniformMatrix3fv(id, false, value);\n },\n\n [GL_FLOAT_MAT4]: function (gl, id, value) {\n gl.uniformMatrix4fv(id, false, value);\n },\n\n [GL_SAMPLER_2D]: function (gl, id, value) {\n gl.uniform1i(id, value);\n },\n\n [GL_SAMPLER_CUBE]: function (gl, id, value) {\n gl.uniform1i(id, value);\n },\n};\n\n/**\n * _type2uniformArrayCommit\n */\nlet _type2uniformArrayCommit = {\n [GL_INT]: function (gl, id, value) {\n gl.uniform1iv(id, value);\n },\n\n [GL_FLOAT]: function (gl, id, value) {\n gl.uniform1fv(id, value);\n },\n\n [GL_FLOAT_VEC2]: function (gl, id, value) {\n gl.uniform2fv(id, value);\n },\n\n [GL_FLOAT_VEC3]: function (gl, id, value) {\n gl.uniform3fv(id, value);\n },\n\n [GL_FLOAT_VEC4]: function (gl, id, value) {\n gl.uniform4fv(id, value);\n },\n\n [GL_INT_VEC2]: function (gl, id, value) {\n gl.uniform2iv(id, value);\n },\n\n [GL_INT_VEC3]: function (gl, id, value) {\n gl.uniform3iv(id, value);\n },\n\n [GL_INT_VEC4]: function (gl, id, value) {\n gl.uniform4iv(id, value);\n },\n\n [GL_BOOL]: function (gl, id, value) {\n gl.uniform1iv(id, value);\n },\n\n [GL_BOOL_VEC2]: function (gl, id, value) {\n gl.uniform2iv(id, value);\n },\n\n [GL_BOOL_VEC3]: function (gl, id, value) {\n gl.uniform3iv(id, value);\n },\n\n [GL_BOOL_VEC4]: function (gl, id, value) {\n gl.uniform4iv(id, value);\n },\n\n [GL_FLOAT_MAT2]: function (gl, id, value) {\n gl.uniformMatrix2fv(id, false, value);\n },\n\n [GL_FLOAT_MAT3]: function (gl, id, value) {\n gl.uniformMatrix3fv(id, false, value);\n },\n\n [GL_FLOAT_MAT4]: function (gl, id, value) {\n gl.uniformMatrix4fv(id, false, value);\n },\n\n [GL_SAMPLER_2D]: function (gl, id, value) {\n gl.uniform1iv(id, value);\n },\n\n [GL_SAMPLER_CUBE]: function (gl, id, value) {\n gl.uniform1iv(id, value);\n },\n};\n\n/**\n * _commitBlendStates\n */\nfunction _commitBlendStates(gl, cur, next) {\n // enable/disable blend\n if (cur.blend !== next.blend) {\n if (!next.blend) {\n gl.disable(gl.BLEND);\n return;\n }\n\n gl.enable(gl.BLEND);\n\n if (\n next.blendSrc === enums.BLEND_CONSTANT_COLOR ||\n next.blendSrc === enums.BLEND_ONE_MINUS_CONSTANT_COLOR ||\n next.blendDst === enums.BLEND_CONSTANT_COLOR ||\n next.blendDst === enums.BLEND_ONE_MINUS_CONSTANT_COLOR\n ) {\n gl.blendColor(\n (next.blendColor >> 24) / 255,\n (next.blendColor >> 16 & 0xff) / 255,\n (next.blendColor >> 8 & 0xff) / 255,\n (next.blendColor & 0xff) / 255\n );\n }\n\n if (next.blendSep) {\n gl.blendFuncSeparate(next.blendSrc, next.blendDst, next.blendSrcAlpha, next.blendDstAlpha);\n gl.blendEquationSeparate(next.blendEq, next.blendAlphaEq);\n } else {\n gl.blendFunc(next.blendSrc, next.blendDst);\n gl.blendEquation(next.blendEq);\n }\n\n return;\n }\n\n // nothing to update\n if (next.blend === false) {\n return;\n }\n\n // blend-color\n if (cur.blendColor !== next.blendColor) {\n gl.blendColor(\n (next.blendColor >> 24) / 255,\n (next.blendColor >> 16 & 0xff) / 255,\n (next.blendColor >> 8 & 0xff) / 255,\n (next.blendColor & 0xff) / 255\n );\n }\n\n // separate diff, reset all\n if (cur.blendSep !== next.blendSep) {\n if (next.blendSep) {\n gl.blendFuncSeparate(next.blendSrc, next.blendDst, next.blendSrcAlpha, next.blendDstAlpha);\n gl.blendEquationSeparate(next.blendEq, next.blendAlphaEq);\n } else {\n gl.blendFunc(next.blendSrc, next.blendDst);\n gl.blendEquation(next.blendEq);\n }\n\n return;\n }\n\n if (next.blendSep) {\n // blend-func-separate\n if (\n cur.blendSrc !== next.blendSrc ||\n cur.blendDst !== next.blendDst ||\n cur.blendSrcAlpha !== next.blendSrcAlpha ||\n cur.blendDstAlpha !== next.blendDstAlpha\n ) {\n gl.blendFuncSeparate(next.blendSrc, next.blendDst, next.blendSrcAlpha, next.blendDstAlpha);\n }\n\n // blend-equation-separate\n if (\n cur.blendEq !== next.blendEq ||\n cur.blendAlphaEq !== next.blendAlphaEq\n ) {\n gl.blendEquationSeparate(next.blendEq, next.blendAlphaEq);\n }\n } else {\n // blend-func\n if (\n cur.blendSrc !== next.blendSrc ||\n cur.blendDst !== next.blendDst\n ) {\n gl.blendFunc(next.blendSrc, next.blendDst);\n }\n\n // blend-equation\n if (cur.blendEq !== next.blendEq) {\n gl.blendEquation(next.blendEq);\n }\n }\n}\n\n/**\n * _commitDepthStates\n */\nfunction _commitDepthStates(gl, cur, next) {\n // enable/disable depth-test\n if (cur.depthTest !== next.depthTest) {\n if (!next.depthTest) {\n gl.disable(gl.DEPTH_TEST);\n return;\n }\n\n gl.enable(gl.DEPTH_TEST);\n gl.depthFunc(next.depthFunc);\n gl.depthMask(next.depthWrite);\n\n return;\n }\n\n // commit depth-write\n if (cur.depthWrite !== next.depthWrite) {\n gl.depthMask(next.depthWrite);\n }\n\n // check if depth-write enabled\n if (next.depthTest === false) {\n if (next.depthWrite) {\n next.depthTest = true;\n next.depthFunc = enums.DS_FUNC_ALWAYS;\n\n gl.enable(gl.DEPTH_TEST);\n gl.depthFunc(next.depthFunc);\n }\n\n return;\n }\n\n // depth-func\n if (cur.depthFunc !== next.depthFunc) {\n gl.depthFunc(next.depthFunc);\n }\n}\n\n/**\n * _commitStencilStates\n */\nfunction _commitStencilStates(gl, cur, next) {\n // inherit stencil states\n if (next.stencilTest === enums.STENCIL_INHERIT) {\n return;\n }\n\n if (next.stencilTest !== cur.stencilTest) {\n if (next.stencilTest === enums.STENCIL_DISABLE) {\n gl.disable(gl.STENCIL_TEST);\n return;\n }\n\n gl.enable(gl.STENCIL_TEST);\n\n if (next.stencilSep) {\n gl.stencilFuncSeparate(gl.FRONT, next.stencilFuncFront, next.stencilRefFront, next.stencilMaskFront);\n gl.stencilMaskSeparate(gl.FRONT, next.stencilWriteMaskFront);\n gl.stencilOpSeparate(gl.FRONT, next.stencilFailOpFront, next.stencilZFailOpFront, next.stencilZPassOpFront);\n gl.stencilFuncSeparate(gl.BACK, next.stencilFuncBack, next.stencilRefBack, next.stencilMaskBack);\n gl.stencilMaskSeparate(gl.BACK, next.stencilWriteMaskBack);\n gl.stencilOpSeparate(gl.BACK, next.stencilFailOpBack, next.stencilZFailOpBack, next.stencilZPassOpBack);\n } else {\n gl.stencilFunc(next.stencilFuncFront, next.stencilRefFront, next.stencilMaskFront);\n gl.stencilMask(next.stencilWriteMaskFront);\n gl.stencilOp(next.stencilFailOpFront, next.stencilZFailOpFront, next.stencilZPassOpFront);\n }\n\n return;\n }\n\n // fast return\n if (next.stencilTest === enums.STENCIL_DISABLE) {\n return;\n }\n\n if (cur.stencilSep !== next.stencilSep) {\n if (next.stencilSep) {\n gl.stencilFuncSeparate(gl.FRONT, next.stencilFuncFront, next.stencilRefFront, next.stencilMaskFront);\n gl.stencilMaskSeparate(gl.FRONT, next.stencilWriteMaskFront);\n gl.stencilOpSeparate(gl.FRONT, next.stencilFailOpFront, next.stencilZFailOpFront, next.stencilZPassOpFront);\n gl.stencilFuncSeparate(gl.BACK, next.stencilFuncBack, next.stencilRefBack, next.stencilMaskBack);\n gl.stencilMaskSeparate(gl.BACK, next.stencilWriteMaskBack);\n gl.stencilOpSeparate(gl.BACK, next.stencilFailOpBack, next.stencilZFailOpBack, next.stencilZPassOpBack);\n } else {\n gl.stencilFunc(next.stencilFuncFront, next.stencilRefFront, next.stencilMaskFront);\n gl.stencilMask(next.stencilWriteMaskFront);\n gl.stencilOp(next.stencilFailOpFront, next.stencilZFailOpFront, next.stencilZPassOpFront);\n }\n return;\n }\n\n if (next.stencilSep) {\n // front\n if (\n cur.stencilFuncFront !== next.stencilFuncFront ||\n cur.stencilRefFront !== next.stencilRefFront ||\n cur.stencilMaskFront !== next.stencilMaskFront\n ) {\n gl.stencilFuncSeparate(gl.FRONT, next.stencilFuncFront, next.stencilRefFront, next.stencilMaskFront);\n }\n if (cur.stencilWriteMaskFront !== next.stencilWriteMaskFront) {\n gl.stencilMaskSeparate(gl.FRONT, next.stencilWriteMaskFront);\n }\n if (\n cur.stencilFailOpFront !== next.stencilFailOpFront ||\n cur.stencilZFailOpFront !== next.stencilZFailOpFront ||\n cur.stencilZPassOpFront !== next.stencilZPassOpFront\n ) {\n gl.stencilOpSeparate(gl.FRONT, next.stencilFailOpFront, next.stencilZFailOpFront, next.stencilZPassOpFront);\n }\n\n // back\n if (\n cur.stencilFuncBack !== next.stencilFuncBack ||\n cur.stencilRefBack !== next.stencilRefBack ||\n cur.stencilMaskBack !== next.stencilMaskBack\n ) {\n gl.stencilFuncSeparate(gl.BACK, next.stencilFuncBack, next.stencilRefBack, next.stencilMaskBack);\n }\n if (cur.stencilWriteMaskBack !== next.stencilWriteMaskBack) {\n gl.stencilMaskSeparate(gl.BACK, next.stencilWriteMaskBack);\n }\n if (\n cur.stencilFailOpBack !== next.stencilFailOpBack ||\n cur.stencilZFailOpBack !== next.stencilZFailOpBack ||\n cur.stencilZPassOpBack !== next.stencilZPassOpBack\n ) {\n gl.stencilOpSeparate(gl.BACK, next.stencilFailOpBack, next.stencilZFailOpBack, next.stencilZPassOpBack);\n }\n } else {\n if (\n cur.stencilFuncFront !== next.stencilFuncFront ||\n cur.stencilRefFront !== next.stencilRefFront ||\n cur.stencilMaskFront !== next.stencilMaskFront\n ) {\n gl.stencilFunc(next.stencilFuncFront, next.stencilRefFront, next.stencilMaskFront);\n }\n if (cur.stencilWriteMaskFront !== next.stencilWriteMaskFront) {\n gl.stencilMask(next.stencilWriteMaskFront);\n }\n if (\n cur.stencilFailOpFront !== next.stencilFailOpFront ||\n cur.stencilZFailOpFront !== next.stencilZFailOpFront ||\n cur.stencilZPassOpFront !== next.stencilZPassOpFront\n ) {\n gl.stencilOp(next.stencilFailOpFront, next.stencilZFailOpFront, next.stencilZPassOpFront);\n }\n }\n\n}\n\n/**\n * _commitCullMode\n */\nfunction _commitCullMode(gl, cur, next) {\n if (cur.cullMode === next.cullMode) {\n return;\n }\n\n if (next.cullMode === enums.CULL_NONE) {\n gl.disable(gl.CULL_FACE);\n return;\n }\n\n gl.enable(gl.CULL_FACE);\n gl.cullFace(next.cullMode);\n}\n\n/**\n * _commitVertexBuffers\n */\nfunction _commitVertexBuffers(device, gl, cur, next) {\n let attrsDirty = false;\n\n // nothing changed for vertex buffer\n if (next.maxStream === -1) {\n return;\n }\n\n if (cur.maxStream !== next.maxStream) {\n attrsDirty = true;\n } else if (cur.program !== next.program) {\n attrsDirty = true;\n } else {\n for (let i = 0; i < next.maxStream + 1; ++i) {\n if (\n cur.vertexBuffers[i] !== next.vertexBuffers[i] ||\n cur.vertexBufferOffsets[i] !== next.vertexBufferOffsets[i]\n ) {\n attrsDirty = true;\n break;\n }\n }\n }\n\n if (attrsDirty) {\n for (let i = 0; i < device._caps.maxVertexAttribs; ++i) {\n device._newAttributes[i] = 0;\n }\n\n for (let i = 0; i < next.maxStream + 1; ++i) {\n let vb = next.vertexBuffers[i];\n let vbOffset = next.vertexBufferOffsets[i];\n if (!vb || vb._glID === -1) {\n continue;\n }\n\n gl.bindBuffer(gl.ARRAY_BUFFER, vb._glID);\n\n for (let j = 0; j < next.program._attributes.length; ++j) {\n let attr = next.program._attributes[j];\n\n let el = vb._format.element(attr.name);\n if (!el) {\n console.warn(`Can not find vertex attribute: ${attr.name}`);\n continue;\n }\n\n if (device._enabledAttributes[attr.location] === 0) {\n gl.enableVertexAttribArray(attr.location);\n device._enabledAttributes[attr.location] = 1;\n }\n device._newAttributes[attr.location] = 1;\n\n gl.vertexAttribPointer(\n attr.location,\n el.num,\n el.type,\n el.normalize,\n el.stride,\n el.offset + vbOffset * el.stride\n );\n }\n }\n\n // disable unused attributes\n for (let i = 0; i < device._caps.maxVertexAttribs; ++i) {\n if (device._enabledAttributes[i] !== device._newAttributes[i]) {\n gl.disableVertexAttribArray(i);\n device._enabledAttributes[i] = 0;\n }\n }\n }\n}\n\n/**\n * _commitTextures\n */\nfunction _commitTextures(gl, cur, next) {\n for (let i = 0; i < next.maxTextureSlot + 1; ++i) {\n if (cur.textureUnits[i] !== next.textureUnits[i]) {\n let texture = next.textureUnits[i];\n if (texture && texture._glID !== -1) {\n gl.activeTexture(gl.TEXTURE0 + i);\n gl.bindTexture(texture._target, texture._glID);\n }\n }\n }\n}\n\n/**\n * _attach\n */\nfunction _attach(gl, location, attachment, face = 0) {\n if (attachment instanceof Texture2D) {\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n location,\n gl.TEXTURE_2D,\n attachment._glID,\n 0\n );\n } else if (attachment instanceof TextureCube) {\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n location,\n gl.TEXTURE_CUBE_MAP_POSITIVE_X + face,\n attachment._glID,\n 0\n );\n } else {\n gl.framebufferRenderbuffer(\n gl.FRAMEBUFFER,\n location,\n gl.RENDERBUFFER,\n attachment._glID\n );\n }\n}\n\nexport default class Device {\n /**\n * @property caps\n */\n get caps() {\n return this._caps;\n }\n\n /**\n * @param {HTMLElement} canvasEL\n * @param {object} opts\n */\n constructor(canvasEL, opts) {\n let gl;\n\n // default options\n opts = opts || {};\n if (opts.alpha === undefined) {\n opts.alpha = false;\n }\n if (opts.stencil === undefined) {\n opts.stencil = true;\n }\n if (opts.depth === undefined) {\n opts.depth = true;\n }\n if (opts.antialias === undefined) {\n opts.antialias = false;\n }\n // NOTE: it is said the performance improved in mobile device with this flag off.\n if (opts.preserveDrawingBuffer === undefined) {\n opts.preserveDrawingBuffer = false;\n }\n\n try {\n gl = canvasEL.getContext('webgl', opts)\n || canvasEL.getContext('experimental-webgl', opts)\n || canvasEL.getContext('webkit-3d', opts)\n || canvasEL.getContext('moz-webgl', opts);\n } catch (err) {\n console.error(err);\n return;\n }\n\n // No errors are thrown using try catch\n // Tested through ios baidu browser 4.14.1\n if (!gl) {\n console.error('This device does not support webgl');\n }\n\n // statics\n /**\n * @type {WebGLRenderingContext}\n */\n this._gl = gl;\n this._extensions = {};\n this._caps = {}; // capability\n this._stats = {\n texture: 0,\n vb: 0,\n ib: 0,\n drawcalls: 0,\n };\n\n // https://developer.mozilla.org/zh-CN/docs/Web/API/WebGL_API/Using_Extensions\n this._initExtensions([\n 'EXT_texture_filter_anisotropic',\n 'EXT_shader_texture_lod',\n 'OES_standard_derivatives',\n 'OES_texture_float',\n 'OES_texture_float_linear',\n 'OES_texture_half_float',\n 'OES_texture_half_float_linear',\n 'OES_vertex_array_object',\n 'WEBGL_compressed_texture_atc',\n 'WEBGL_compressed_texture_etc',\n 'WEBGL_compressed_texture_etc1',\n 'WEBGL_compressed_texture_pvrtc',\n 'WEBGL_compressed_texture_s3tc',\n 'WEBGL_depth_texture',\n 'WEBGL_draw_buffers',\n ]);\n this._initCaps();\n this._initStates();\n\n // runtime\n State.initDefault(this);\n this._current = new State(this);\n this._next = new State(this);\n this._uniforms = {}; // name: { value, num, dirty }\n this._vx = this._vy = this._vw = this._vh = 0;\n this._sx = this._sy = this._sw = this._sh = 0;\n this._framebuffer = null;\n\n //\n this._enabledAttributes = new Array(this._caps.maxVertexAttribs);\n this._newAttributes = new Array(this._caps.maxVertexAttribs);\n\n for (let i = 0; i < this._caps.maxVertexAttribs; ++i) {\n this._enabledAttributes[i] = 0;\n this._newAttributes[i] = 0;\n }\n }\n\n _initExtensions(extensions) {\n const gl = this._gl;\n\n for (let i = 0; i < extensions.length; ++i) {\n let name = extensions[i];\n let vendorPrefixes = [\"\", \"WEBKIT_\", \"MOZ_\"];\n\n for (var j = 0; j < vendorPrefixes.length; j++) {\n try {\n let ext = gl.getExtension(vendorPrefixes[j] + name);\n if (ext) {\n this._extensions[name] = ext;\n break;\n }\n } catch (e) {\n console.error(e);\n }\n }\n }\n }\n\n _initCaps() {\n const gl = this._gl;\n const extDrawBuffers = this.ext('WEBGL_draw_buffers');\n\n this._caps.maxVertexStreams = 4;\n this._caps.maxVertexTextures = gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS);\n this._caps.maxFragUniforms = gl.getParameter(gl.MAX_FRAGMENT_UNIFORM_VECTORS);\n this._caps.maxTextureUnits = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS);\n this._caps.maxVertexAttribs = gl.getParameter(gl.MAX_VERTEX_ATTRIBS);\n this._caps.maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE);\n\n this._caps.maxDrawBuffers = extDrawBuffers ? gl.getParameter(extDrawBuffers.MAX_DRAW_BUFFERS_WEBGL) : 1;\n this._caps.maxColorAttachments = extDrawBuffers ? gl.getParameter(extDrawBuffers.MAX_COLOR_ATTACHMENTS_WEBGL) : 1;\n }\n\n _initStates() {\n const gl = this._gl;\n\n // gl.frontFace(gl.CCW);\n gl.disable(gl.BLEND);\n gl.blendFunc(gl.ONE, gl.ZERO);\n gl.blendEquation(gl.FUNC_ADD);\n gl.blendColor(1,1,1,1);\n\n gl.colorMask(true, true, true, true);\n\n gl.enable(gl.CULL_FACE);\n gl.cullFace(gl.BACK);\n\n gl.disable(gl.DEPTH_TEST);\n gl.depthFunc(gl.LESS);\n gl.depthMask(false);\n gl.disable(gl.POLYGON_OFFSET_FILL);\n gl.depthRange(0,1);\n\n gl.disable(gl.STENCIL_TEST);\n gl.stencilFunc(gl.ALWAYS, 0, 0xFF);\n gl.stencilMask(0xFF);\n gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP);\n\n // TODO:\n // this.setAlphaToCoverage(false);\n // this.setTransformFeedbackBuffer(null);\n // this.setRaster(true);\n // this.setDepthBias(false);\n\n gl.clearDepth(1);\n gl.clearColor(0, 0, 0, 0);\n gl.clearStencil(0);\n\n gl.disable(gl.SCISSOR_TEST);\n }\n\n _restoreTexture(unit) {\n const gl = this._gl;\n\n let texture = this._current.textureUnits[unit];\n if (texture && texture._glID !== -1) {\n gl.bindTexture(texture._target, texture._glID);\n } else {\n gl.bindTexture(gl.TEXTURE_2D, null);\n }\n }\n\n _restoreIndexBuffer () {\n const gl = this._gl;\n\n let ib = this._current.indexBuffer;\n if (ib && ib._glID !== -1) {\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ib._glID);\n }\n else {\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);\n }\n }\n\n /**\n * @method ext\n * @param {string} name\n */\n ext(name) {\n return this._extensions[name];\n }\n\n allowFloatTexture() {\n return this.ext(\"OES_texture_float\") != null;\n }\n\n // ===============================\n // Immediate Settings\n // ===============================\n\n /**\n * @method setFrameBuffer\n * @param {FrameBuffer} fb - null means use the backbuffer\n */\n setFrameBuffer(fb) {\n if (this._framebuffer === fb) {\n return;\n }\n\n this._framebuffer = fb;\n const gl = this._gl;\n\n if (!fb) {\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n return;\n }\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, fb._glID);\n\n let numColors = fb._colors.length;\n for (let i = 0; i < numColors; ++i) {\n let colorBuffer = fb._colors[i];\n _attach(gl, gl.COLOR_ATTACHMENT0 + i, colorBuffer);\n\n // TODO: what about cubemap face??? should be the target parameter for colorBuffer\n }\n for (let i = numColors; i < this._caps.maxColorAttachments; ++i) {\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0 + i,\n gl.TEXTURE_2D,\n null,\n 0\n );\n }\n\n if (fb._depth) {\n _attach(gl, gl.DEPTH_ATTACHMENT, fb._depth);\n }\n\n if (fb._stencil) {\n _attach(gl, gl.STENCIL_ATTACHMENT, fb._stencil);\n }\n\n if (fb._depthStencil) {\n _attach(gl, gl.DEPTH_STENCIL_ATTACHMENT, fb._depthStencil);\n }\n }\n\n /**\n * @method setViewport\n * @param {Number} x\n * @param {Number} y\n * @param {Number} w\n * @param {Number} h\n */\n setViewport(x, y, w, h) {\n if (\n this._vx !== x ||\n this._vy !== y ||\n this._vw !== w ||\n this._vh !== h\n ) {\n this._gl.viewport(x, y, w, h);\n this._vx = x;\n this._vy = y;\n this._vw = w;\n this._vh = h;\n }\n }\n\n /**\n * @method setScissor\n * @param {Number} x\n * @param {Number} y\n * @param {Number} w\n * @param {Number} h\n */\n setScissor(x, y, w, h) {\n if (\n this._sx !== x ||\n this._sy !== y ||\n this._sw !== w ||\n this._sh !== h\n ) {\n this._gl.scissor(x, y, w, h);\n this._sx = x;\n this._sy = y;\n this._sw = w;\n this._sh = h;\n }\n }\n\n /**\n * @method clear\n * @param {Object} opts\n * @param {Array} opts.color\n * @param {Number} opts.depth\n * @param {Number} opts.stencil\n */\n clear(opts) {\n if (opts.color === undefined && opts.depth === undefined && opts.stencil === undefined) {\n return;\n }\n const gl = this._gl;\n let flags = 0;\n\n if (opts.color !== undefined) {\n flags |= gl.COLOR_BUFFER_BIT;\n gl.clearColor(opts.color[0], opts.color[1], opts.color[2], opts.color[3]);\n }\n\n if (opts.depth !== undefined) {\n flags |= gl.DEPTH_BUFFER_BIT;\n gl.clearDepth(opts.depth);\n\n gl.enable(gl.DEPTH_TEST);\n gl.depthMask(true);\n gl.depthFunc(gl.ALWAYS);\n }\n\n if (opts.stencil !== undefined) {\n flags |= gl.STENCIL_BUFFER_BIT;\n gl.clearStencil(opts.stencil);\n }\n\n gl.clear(flags);\n\n // restore depth-write\n if (opts.depth !== undefined) {\n if (this._current.depthTest === false) {\n gl.disable(gl.DEPTH_TEST);\n } else {\n if (this._current.depthWrite === false) {\n gl.depthMask(false);\n }\n if (this._current.depthFunc !== enums.DS_FUNC_ALWAYS) {\n gl.depthFunc(this._current.depthFunc);\n }\n }\n }\n }\n\n // ===============================\n // Deferred States\n // ===============================\n\n /**\n * @method enableBlend\n */\n enableBlend() {\n this._next.blend = true;\n }\n\n /**\n * @method enableDepthTest\n */\n enableDepthTest() {\n this._next.depthTest = true;\n }\n\n /**\n * @method enableDepthWrite\n */\n enableDepthWrite() {\n this._next.depthWrite = true;\n }\n\n /**\n * @method enableStencilTest\n * @param {Number} stencilTest\n */\n setStencilTest(stencilTest) {\n this._next.stencilTest = stencilTest;\n }\n\n /**\n * @method setStencilFunc\n * @param {DS_FUNC_*} func\n * @param {Number} ref\n * @param {Number} mask\n */\n setStencilFunc(func, ref, mask) {\n this._next.stencilSep = false;\n this._next.stencilFuncFront = this._next.stencilFuncBack = func;\n this._next.stencilRefFront = this._next.stencilRefBack = ref;\n this._next.stencilMaskFront = this._next.stencilMaskBack = mask;\n }\n\n /**\n * @method setStencilFuncFront\n * @param {DS_FUNC_*} func\n * @param {Number} ref\n * @param {Number} mask\n */\n setStencilFuncFront(func, ref, mask) {\n this._next.stencilSep = true;\n this._next.stencilFuncFront = func;\n this._next.stencilRefFront = ref;\n this._next.stencilMaskFront = mask;\n }\n\n /**\n * @method setStencilFuncBack\n * @param {DS_FUNC_*} func\n * @param {Number} ref\n * @param {Number} mask\n */\n setStencilFuncBack(func, ref, mask) {\n this._next.stencilSep = true;\n this._next.stencilFuncBack = func;\n this._next.stencilRefBack = ref;\n this._next.stencilMaskBack = mask;\n }\n\n /**\n * @method setStencilOp\n * @param {STENCIL_OP_*} failOp\n * @param {STENCIL_OP_*} zFailOp\n * @param {STENCIL_OP_*} zPassOp\n * @param {Number} writeMask\n */\n setStencilOp(failOp, zFailOp, zPassOp, writeMask) {\n this._next.stencilFailOpFront = this._next.stencilFailOpBack = failOp;\n this._next.stencilZFailOpFront = this._next.stencilZFailOpBack = zFailOp;\n this._next.stencilZPassOpFront = this._next.stencilZPassOpBack = zPassOp;\n this._next.stencilWriteMaskFront = this._next.stencilWriteMaskBack = writeMask;\n }\n\n /**\n * @method setStencilOpFront\n * @param {STENCIL_OP_*} failOp\n * @param {STENCIL_OP_*} zFailOp\n * @param {STENCIL_OP_*} zPassOp\n * @param {Number} writeMask\n */\n setStencilOpFront(failOp, zFailOp, zPassOp, writeMask) {\n this._next.stencilSep = true;\n this._next.stencilFailOpFront = failOp;\n this._next.stencilZFailOpFront = zFailOp;\n this._next.stencilZPassOpFront = zPassOp;\n this._next.stencilWriteMaskFront = writeMask;\n }\n\n /**\n * @method setStencilOpBack\n * @param {STENCIL_OP_*} failOp\n * @param {STENCIL_OP_*} zFailOp\n * @param {STENCIL_OP_*} zPassOp\n * @param {Number} writeMask\n */\n setStencilOpBack(failOp, zFailOp, zPassOp, writeMask) {\n this._next.stencilSep = true;\n this._next.stencilFailOpBack = failOp;\n this._next.stencilZFailOpBack = zFailOp;\n this._next.stencilZPassOpBack = zPassOp;\n this._next.stencilWriteMaskBack = writeMask;\n }\n\n /**\n * @method setDepthFunc\n * @param {DS_FUNC_*} depthFunc\n */\n setDepthFunc(depthFunc) {\n this._next.depthFunc = depthFunc;\n }\n\n /**\n * @method setBlendColor32\n * @param {Number} rgba\n */\n setBlendColor32(rgba) {\n this._next.blendColor = rgba;\n }\n\n /**\n * @method setBlendColor\n * @param {Number} r\n * @param {Number} g\n * @param {Number} b\n * @param {Number} a\n */\n setBlendColor(r, g, b, a) {\n this._next.blendColor = ((r * 255) << 24 | (g * 255) << 16 | (b * 255) << 8 | a * 255) >>> 0;\n }\n\n /**\n * @method setBlendFunc\n * @param {BELND_*} src\n * @param {BELND_*} dst\n */\n setBlendFunc(src, dst) {\n this._next.blendSep = false;\n this._next.blendSrc = src;\n this._next.blendDst = dst;\n }\n\n /**\n * @method setBlendFuncSep\n * @param {BELND_*} src\n * @param {BELND_*} dst\n * @param {BELND_*} srcAlpha\n * @param {BELND_*} dstAlpha\n */\n setBlendFuncSep(src, dst, srcAlpha, dstAlpha) {\n this._next.blendSep = true;\n this._next.blendSrc = src;\n this._next.blendDst = dst;\n this._next.blendSrcAlpha = srcAlpha;\n this._next.blendDstAlpha = dstAlpha;\n }\n\n /**\n * @method setBlendEq\n * @param {BELND_FUNC_*} eq\n */\n setBlendEq(eq) {\n this._next.blendSep = false;\n this._next.blendEq = eq;\n }\n\n /**\n * @method setBlendEqSep\n * @param {BELND_FUNC_*} eq\n * @param {BELND_FUNC_*} alphaEq\n */\n setBlendEqSep(eq, alphaEq) {\n this._next.blendSep = true;\n this._next.blendEq = eq;\n this._next.blendAlphaEq = alphaEq;\n }\n\n /**\n * @method setCullMode\n * @param {CULL_*} mode\n */\n setCullMode(mode) {\n this._next.cullMode = mode;\n }\n\n /**\n * @method setVertexBuffer\n * @param {Number} stream\n * @param {VertexBuffer} buffer\n * @param {Number} start - start vertex\n */\n setVertexBuffer(stream, buffer, start = 0) {\n this._next.vertexBuffers[stream] = buffer;\n this._next.vertexBufferOffsets[stream] = start;\n if (this._next.maxStream < stream) {\n this._next.maxStream = stream;\n }\n }\n\n /**\n * @method setIndexBuffer\n * @param {IndexBuffer} buffer\n */\n setIndexBuffer(buffer) {\n this._next.indexBuffer = buffer;\n }\n\n /**\n * @method setProgram\n * @param {Program} program\n */\n setProgram(program) {\n this._next.program = program;\n }\n\n /**\n * @method setTexture\n * @param {String} name\n * @param {Texture} texture\n * @param {Number} slot\n */\n setTexture(name, texture, slot) {\n if (slot >= this._caps.maxTextureUnits) {\n console.warn(`Can not set texture ${name} at stage ${slot}, max texture exceed: ${this._caps.maxTextureUnits}`);\n return;\n }\n\n this._next.textureUnits[slot] = texture;\n this.setUniform(name, slot);\n\n if (this._next.maxTextureSlot < slot) {\n this._next.maxTextureSlot = slot;\n }\n }\n\n /**\n * @method setTextureArray\n * @param {String} name\n * @param {Array} textures\n * @param {Int32Array} slots\n */\n setTextureArray(name, textures, slots) {\n let len = textures.length;\n if (len >= this._caps.maxTextureUnits) {\n console.warn(`Can not set ${len} textures for ${name}, max texture exceed: ${this._caps.maxTextureUnits}`);\n return;\n }\n for (let i = 0; i < len; ++i) {\n let slot = slots[i];\n this._next.textureUnits[slot] = textures[i];\n\n if (this._next.maxTextureSlot < slot) {\n this._next.maxTextureSlot = slot;\n }\n }\n this.setUniform(name, slots);\n }\n\n /**\n * @method setUniform\n * @param {String} name\n * @param {*} value\n */\n setUniform(name, value) {\n let uniform = this._uniforms[name];\n\n let sameType = false;\n let isArray = false, isFloat32Array = false, isInt32Array = false;\n do {\n if (!uniform) {\n break;\n }\n\n isFloat32Array = Array.isArray(value) || value instanceof Float32Array;\n isInt32Array = value instanceof Int32Array;\n isArray = isFloat32Array || isInt32Array;\n if (uniform.isArray !== isArray) {\n break;\n }\n\n if (uniform.isArray && uniform.value.length !== value.length) {\n break;\n }\n\n sameType = true;\n } while (false);\n\n if (!sameType) {\n let newValue = value;\n if (isFloat32Array) {\n newValue = new Float32Array(value);\n }\n else if (isInt32Array) {\n newValue = new Int32Array(value);\n }\n\n uniform = {\n dirty: true,\n value: newValue,\n isArray: isArray\n };\n } else {\n let oldValue = uniform.value;\n let dirty = false;\n if (uniform.isArray) {\n for (let i = 0, l = oldValue.length; i < l; i++) {\n if (oldValue[i] !== value[i]) {\n dirty = true;\n oldValue[i] = value[i];\n }\n }\n }\n else {\n if (oldValue !== value) {\n dirty = true;\n uniform.value = value;\n }\n }\n\n if (dirty) {\n uniform.dirty = true;\n }\n }\n this._uniforms[name] = uniform;\n }\n\n setUniformDirectly(name, value) {\n let uniform = this._uniforms[name];\n if (!uniform) {\n this._uniforms[name] = uniform = {};\n }\n uniform.dirty = true;\n uniform.value = value;\n }\n\n /**\n * @method setPrimitiveType\n * @param {PT_*} type\n */\n setPrimitiveType(type) {\n this._next.primitiveType = type;\n }\n\n /**\n * @method resetDrawCalls\n */\n resetDrawCalls () {\n this._stats.drawcalls = 0;\n }\n \n /**\n * @method getDrawCalls\n */\n getDrawCalls () {\n return this._stats.drawcalls;\n }\n\n /**\n * @method draw\n * @param {Number} base\n * @param {Number} count\n */\n draw(base, count) {\n const gl = this._gl;\n let cur = this._current;\n let next = this._next;\n\n // commit blend\n _commitBlendStates(gl, cur, next);\n\n // commit depth\n _commitDepthStates(gl, cur, next);\n\n // commit stencil\n _commitStencilStates(gl, cur, next);\n\n // commit cull\n _commitCullMode(gl, cur, next);\n\n // commit vertex-buffer\n _commitVertexBuffers(this, gl, cur, next);\n\n // commit index-buffer\n if (cur.indexBuffer !== next.indexBuffer) {\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, next.indexBuffer && next.indexBuffer._glID !== -1 ? next.indexBuffer._glID : null);\n }\n\n // commit program\n let programDirty = false;\n if (cur.program !== next.program) {\n if (next.program._linked) {\n gl.useProgram(next.program._glID);\n } else {\n console.warn('Failed to use program: has not linked yet.');\n }\n programDirty = true;\n }\n\n // commit texture/sampler\n _commitTextures(gl, cur, next);\n\n // commit uniforms\n for (let i = 0; i < next.program._uniforms.length; ++i) {\n let uniformInfo = next.program._uniforms[i];\n let uniform = this._uniforms[uniformInfo.name];\n if (!uniform) {\n // console.warn(`Can not find uniform ${uniformInfo.name}`);\n continue;\n }\n\n if (!programDirty && !uniform.dirty) {\n continue;\n }\n\n uniform.dirty = false;\n\n // TODO: please consider array uniform: uniformInfo.size > 0\n\n let commitFunc = (uniformInfo.size === undefined) ? _type2uniformCommit[uniformInfo.type] : _type2uniformArrayCommit[uniformInfo.type];\n if (!commitFunc) {\n console.warn(`Can not find commit function for uniform ${uniformInfo.name}`);\n continue;\n }\n\n commitFunc(gl, uniformInfo.location, uniform.value);\n }\n\n if (count) {\n // drawPrimitives\n if (next.indexBuffer) {\n gl.drawElements(\n this._next.primitiveType,\n count,\n next.indexBuffer._format,\n base * next.indexBuffer._bytesPerIndex\n );\n } else {\n gl.drawArrays(\n this._next.primitiveType,\n base,\n count\n );\n }\n\n // update stats\n this._stats.drawcalls++;\n }\n\n // TODO: autogen mipmap for color buffer\n // if (this._framebuffer && this._framebuffer.colors[0].mipmap) {\n // gl.bindTexture(this._framebuffer.colors[i]._target, colors[i]._glID);\n // gl.generateMipmap(this._framebuffer.colors[i]._target);\n // }\n\n // reset states\n cur.set(next);\n next.reset();\n }\n}","const GL_NEAREST = 9728; // gl.NEAREST\nconst GL_LINEAR = 9729; // gl.LINEAR\nconst GL_NEAREST_MIPMAP_NEAREST = 9984; // gl.NEAREST_MIPMAP_NEAREST\nconst GL_LINEAR_MIPMAP_NEAREST = 9985; // gl.LINEAR_MIPMAP_NEAREST\nconst GL_NEAREST_MIPMAP_LINEAR = 9986; // gl.NEAREST_MIPMAP_LINEAR\nconst GL_LINEAR_MIPMAP_LINEAR = 9987; // gl.LINEAR_MIPMAP_LINEAR\n\n// const GL_BYTE = 5120; // gl.BYTE\nconst GL_UNSIGNED_BYTE = 5121; // gl.UNSIGNED_BYTE\n// const GL_SHORT = 5122; // gl.SHORT\nconst GL_UNSIGNED_SHORT = 5123; // gl.UNSIGNED_SHORT\nconst GL_UNSIGNED_INT = 5125; // gl.UNSIGNED_INT\nconst GL_FLOAT = 5126; // gl.FLOAT\nconst GL_UNSIGNED_SHORT_5_6_5 = 33635; // gl.UNSIGNED_SHORT_5_6_5\nconst GL_UNSIGNED_SHORT_4_4_4_4 = 32819; // gl.UNSIGNED_SHORT_4_4_4_4\nconst GL_UNSIGNED_SHORT_5_5_5_1 = 32820; // gl.UNSIGNED_SHORT_5_5_5_1\nconst GL_HALF_FLOAT_OES = 36193; // gl.HALF_FLOAT_OES\n\nconst GL_DEPTH_COMPONENT = 6402; // gl.DEPTH_COMPONENT\n\nconst GL_ALPHA = 6406; // gl.ALPHA\nconst GL_RGB = 6407; // gl.RGB\nconst GL_RGBA = 6408; // gl.RGBA\nconst GL_LUMINANCE = 6409; // gl.LUMINANCE\nconst GL_LUMINANCE_ALPHA = 6410; // gl.LUMINANCE_ALPHA\n\nconst GL_COMPRESSED_RGB_S3TC_DXT1_EXT = 0x83F0; // ext.COMPRESSED_RGB_S3TC_DXT1_EXT\nconst GL_COMPRESSED_RGBA_S3TC_DXT1_EXT = 0x83F1; // ext.COMPRESSED_RGBA_S3TC_DXT1_EXT\nconst GL_COMPRESSED_RGBA_S3TC_DXT3_EXT = 0x83F2; // ext.COMPRESSED_RGBA_S3TC_DXT3_EXT\nconst GL_COMPRESSED_RGBA_S3TC_DXT5_EXT = 0x83F3; // ext.COMPRESSED_RGBA_S3TC_DXT5_EXT\n\nconst GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG = 0x8C00; // ext.COMPRESSED_RGB_PVRTC_4BPPV1_IMG\nconst GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG = 0x8C01; // ext.COMPRESSED_RGB_PVRTC_2BPPV1_IMG\nconst GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG = 0x8C02; // ext.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG\nconst GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG = 0x8C03; // ext.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG\n\nconst GL_COMPRESSED_RGB_ETC1_WEBGL = 0x8D64; // ext.COMPRESSED_RGB_ETC1_WEBGL\n\nconst GL_COMPRESSED_RGB8_ETC2 = 0x9274; // ext.COMPRESSED_RGB8_ETC2\nconst GL_COMPRESSED_RGBA8_ETC2_EAC = 0x9278; // ext.COMPRESSED_RGBA8_ETC2_EAC\n\nconst _filterGL = [\n [ GL_NEAREST, GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST_MIPMAP_LINEAR ],\n [ GL_LINEAR, GL_LINEAR_MIPMAP_NEAREST, GL_LINEAR_MIPMAP_LINEAR ],\n];\n\nconst _textureFmtGL = [\n // TEXTURE_FMT_RGB_DXT1: 0\n { format: GL_RGB, internalFormat: GL_COMPRESSED_RGB_S3TC_DXT1_EXT, pixelType: null },\n\n // TEXTURE_FMT_RGBA_DXT1: 1\n { format: GL_RGBA, internalFormat: GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixelType: null },\n\n // TEXTURE_FMT_RGBA_DXT3: 2\n { format: GL_RGBA, internalFormat: GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, pixelType: null },\n\n // TEXTURE_FMT_RGBA_DXT5: 3\n { format: GL_RGBA, internalFormat: GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, pixelType: null },\n\n // TEXTURE_FMT_RGB_ETC1: 4\n { format: GL_RGB, internalFormat: GL_COMPRESSED_RGB_ETC1_WEBGL, pixelType: null },\n\n // TEXTURE_FMT_RGB_PVRTC_2BPPV1: 5\n { format: GL_RGB, internalFormat: GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG, pixelType: null },\n\n // TEXTURE_FMT_RGBA_PVRTC_2BPPV1: 6\n { format: GL_RGBA, internalFormat: GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG, pixelType: null },\n\n // TEXTURE_FMT_RGB_PVRTC_4BPPV1: 7\n { format: GL_RGB, internalFormat: GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG, pixelType: null },\n\n // TEXTURE_FMT_RGBA_PVRTC_4BPPV1: 8\n { format: GL_RGBA, internalFormat: GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG, pixelType: null },\n\n // TEXTURE_FMT_A8: 9\n { format: GL_ALPHA, internalFormat: GL_ALPHA, pixelType: GL_UNSIGNED_BYTE },\n\n // TEXTURE_FMT_L8: 10\n { format: GL_LUMINANCE, internalFormat: GL_LUMINANCE, pixelType: GL_UNSIGNED_BYTE },\n\n // TEXTURE_FMT_L8_A8: 11\n { format: GL_LUMINANCE_ALPHA, internalFormat: GL_LUMINANCE_ALPHA, pixelType: GL_UNSIGNED_BYTE },\n\n // TEXTURE_FMT_R5_G6_B5: 12\n { format: GL_RGB, internalFormat: GL_RGB, pixelType: GL_UNSIGNED_SHORT_5_6_5 },\n\n // TEXTURE_FMT_R5_G5_B5_A1: 13\n { format: GL_RGBA, internalFormat: GL_RGBA, pixelType: GL_UNSIGNED_SHORT_5_5_5_1 },\n\n // TEXTURE_FMT_R4_G4_B4_A4: 14\n { format: GL_RGBA, internalFormat: GL_RGBA, pixelType: GL_UNSIGNED_SHORT_4_4_4_4 },\n\n // TEXTURE_FMT_RGB8: 15\n { format: GL_RGB, internalFormat: GL_RGB, pixelType: GL_UNSIGNED_BYTE },\n\n // TEXTURE_FMT_RGBA8: 16\n { format: GL_RGBA, internalFormat: GL_RGBA, pixelType: GL_UNSIGNED_BYTE },\n\n // TEXTURE_FMT_RGB16F: 17\n { format: GL_RGB, internalFormat: GL_RGB, pixelType: GL_HALF_FLOAT_OES },\n\n // TEXTURE_FMT_RGBA16F: 18\n { format: GL_RGBA, internalFormat: GL_RGBA, pixelType: GL_HALF_FLOAT_OES },\n\n // TEXTURE_FMT_RGB32F: 19\n { format: GL_RGB, internalFormat: GL_RGB, pixelType: GL_FLOAT },\n\n // TEXTURE_FMT_RGBA32F: 20\n { format: GL_RGBA, internalFormat: GL_RGBA, pixelType: GL_FLOAT },\n\n // TEXTURE_FMT_R32F: 21\n { format: null, internalFormat: null, pixelType: null },\n\n // TEXTURE_FMT_111110F: 22\n { format: null, internalFormat: null, pixelType: null },\n\n // TEXTURE_FMT_SRGB: 23\n { format: null, internalFormat: null, pixelType: null },\n\n // TEXTURE_FMT_SRGBA: 24\n { format: null, internalFormat: null, pixelType: null },\n\n // TEXTURE_FMT_D16: 25\n { format: GL_DEPTH_COMPONENT, internalFormat: GL_DEPTH_COMPONENT, pixelType: GL_UNSIGNED_SHORT },\n\n // TEXTURE_FMT_D32: 26\n { format: GL_DEPTH_COMPONENT, internalFormat: GL_DEPTH_COMPONENT, pixelType: GL_UNSIGNED_INT },\n\n // TEXTURE_FMT_D24S8: 27\n { format: GL_DEPTH_COMPONENT, internalFormat: GL_DEPTH_COMPONENT, pixelType: GL_UNSIGNED_INT },\n\n // TEXTURE_FMT_RGB_ETC2: 28\n { format: GL_RGB, internalFormat: GL_COMPRESSED_RGB8_ETC2, pixelType: null },\n\n // TEXTURE_FMT_RGBA_ETC2: 29\n { format: GL_RGBA, internalFormat: GL_COMPRESSED_RGBA8_ETC2_EAC, pixelType: null },\n];\n\n/**\n * enums\n */\nexport const enums = {\n // buffer usage\n USAGE_STATIC: 35044, // gl.STATIC_DRAW\n USAGE_DYNAMIC: 35048, // gl.DYNAMIC_DRAW\n USAGE_STREAM: 35040, // gl.STREAM_DRAW\n\n // index buffer format\n INDEX_FMT_UINT8: 5121, // gl.UNSIGNED_BYTE\n INDEX_FMT_UINT16: 5123, // gl.UNSIGNED_SHORT\n INDEX_FMT_UINT32: 5125, // gl.UNSIGNED_INT (OES_element_index_uint)\n\n // vertex attribute semantic\n ATTR_POSITION: 'a_position',\n ATTR_NORMAL: 'a_normal',\n ATTR_TANGENT: 'a_tangent',\n ATTR_BITANGENT: 'a_bitangent',\n ATTR_WEIGHTS: 'a_weights',\n ATTR_JOINTS: 'a_joints',\n ATTR_COLOR: 'a_color',\n ATTR_COLOR0: 'a_color0',\n ATTR_COLOR1: 'a_color1',\n ATTR_UV: 'a_uv',\n ATTR_UV0: 'a_uv0',\n ATTR_UV1: 'a_uv1',\n ATTR_UV2: 'a_uv2',\n ATTR_UV3: 'a_uv3',\n ATTR_UV4: 'a_uv4',\n ATTR_UV5: 'a_uv5',\n ATTR_UV6: 'a_uv6',\n ATTR_UV7: 'a_uv7',\n ATTR_TEX_COORD: 'a_texCoord',\n ATTR_TEX_COORD1: 'a_texCoord1',\n ATTR_TEX_COORD2: 'a_texCoord2',\n ATTR_TEX_COORD3: 'a_texCoord3',\n ATTR_TEX_COORD4: 'a_texCoord4',\n ATTR_TEX_COORD5: 'a_texCoord5',\n ATTR_TEX_COORD6: 'a_texCoord6',\n ATTR_TEX_COORD7: 'a_texCoord7',\n ATTR_TEX_COORD8: 'a_texCoord8',\n ATTR_TEX_ID: 'a_texId',\n\n\n // vertex attribute type\n ATTR_TYPE_INT8: 5120, // gl.BYTE\n ATTR_TYPE_UINT8: 5121, // gl.UNSIGNED_BYTE\n ATTR_TYPE_INT16: 5122, // gl.SHORT\n ATTR_TYPE_UINT16: 5123, // gl.UNSIGNED_SHORT\n ATTR_TYPE_INT32: 5124, // gl.INT\n ATTR_TYPE_UINT32: 5125, // gl.UNSIGNED_INT\n ATTR_TYPE_FLOAT32: 5126, // gl.FLOAT\n\n // texture filter\n FILTER_NEAREST: 0,\n FILTER_LINEAR: 1,\n\n // texture wrap mode\n WRAP_REPEAT: 10497, // gl.REPEAT\n WRAP_CLAMP: 33071, // gl.CLAMP_TO_EDGE\n WRAP_MIRROR: 33648, // gl.MIRRORED_REPEAT\n\n // texture format\n // compress formats\n TEXTURE_FMT_RGB_DXT1: 0,\n TEXTURE_FMT_RGBA_DXT1: 1,\n TEXTURE_FMT_RGBA_DXT3: 2,\n TEXTURE_FMT_RGBA_DXT5: 3,\n TEXTURE_FMT_RGB_ETC1: 4,\n TEXTURE_FMT_RGB_PVRTC_2BPPV1: 5,\n TEXTURE_FMT_RGBA_PVRTC_2BPPV1: 6,\n TEXTURE_FMT_RGB_PVRTC_4BPPV1: 7,\n TEXTURE_FMT_RGBA_PVRTC_4BPPV1: 8,\n\n // normal formats\n TEXTURE_FMT_A8: 9,\n TEXTURE_FMT_L8: 10,\n TEXTURE_FMT_L8_A8: 11,\n TEXTURE_FMT_R5_G6_B5: 12,\n TEXTURE_FMT_R5_G5_B5_A1: 13,\n TEXTURE_FMT_R4_G4_B4_A4: 14,\n TEXTURE_FMT_RGB8: 15,\n TEXTURE_FMT_RGBA8: 16,\n TEXTURE_FMT_RGB16F: 17,\n TEXTURE_FMT_RGBA16F: 18,\n TEXTURE_FMT_RGB32F: 19,\n TEXTURE_FMT_RGBA32F: 20,\n TEXTURE_FMT_R32F: 21,\n TEXTURE_FMT_111110F: 22,\n TEXTURE_FMT_SRGB: 23,\n TEXTURE_FMT_SRGBA: 24,\n\n // depth formats\n TEXTURE_FMT_D16: 25,\n TEXTURE_FMT_D32: 26,\n TEXTURE_FMT_D24S8: 27,\n\n // etc2 format\n TEXTURE_FMT_RGB_ETC2: 28,\n TEXTURE_FMT_RGBA_ETC2: 29,\n\n // depth and stencil function\n DS_FUNC_NEVER: 512, // gl.NEVER\n DS_FUNC_LESS: 513, // gl.LESS\n DS_FUNC_EQUAL: 514, // gl.EQUAL\n DS_FUNC_LEQUAL: 515, // gl.LEQUAL\n DS_FUNC_GREATER: 516, // gl.GREATER\n DS_FUNC_NOTEQUAL: 517, // gl.NOTEQUAL\n DS_FUNC_GEQUAL: 518, // gl.GEQUAL\n DS_FUNC_ALWAYS: 519, // gl.ALWAYS\n\n // render-buffer format\n RB_FMT_RGBA4: 32854, // gl.RGBA4\n RB_FMT_RGB5_A1: 32855, // gl.RGB5_A1\n RB_FMT_RGB565: 36194, // gl.RGB565\n RB_FMT_D16: 33189, // gl.DEPTH_COMPONENT16\n RB_FMT_S8: 36168, // gl.STENCIL_INDEX8\n RB_FMT_D24S8: 34041, // gl.DEPTH_STENCIL\n\n // blend-equation\n BLEND_FUNC_ADD: 32774, // gl.FUNC_ADD\n BLEND_FUNC_SUBTRACT: 32778, // gl.FUNC_SUBTRACT\n BLEND_FUNC_REVERSE_SUBTRACT: 32779, // gl.FUNC_REVERSE_SUBTRACT\n\n // blend\n BLEND_ZERO: 0, // gl.ZERO\n BLEND_ONE: 1, // gl.ONE\n BLEND_SRC_COLOR: 768, // gl.SRC_COLOR\n BLEND_ONE_MINUS_SRC_COLOR: 769, // gl.ONE_MINUS_SRC_COLOR\n BLEND_DST_COLOR: 774, // gl.DST_COLOR\n BLEND_ONE_MINUS_DST_COLOR: 775, // gl.ONE_MINUS_DST_COLOR\n BLEND_SRC_ALPHA: 770, // gl.SRC_ALPHA\n BLEND_ONE_MINUS_SRC_ALPHA: 771, // gl.ONE_MINUS_SRC_ALPHA\n BLEND_DST_ALPHA: 772, // gl.DST_ALPHA\n BLEND_ONE_MINUS_DST_ALPHA: 773, // gl.ONE_MINUS_DST_ALPHA\n BLEND_CONSTANT_COLOR: 32769, // gl.CONSTANT_COLOR\n BLEND_ONE_MINUS_CONSTANT_COLOR: 32770, // gl.ONE_MINUS_CONSTANT_COLOR\n BLEND_CONSTANT_ALPHA: 32771, // gl.CONSTANT_ALPHA\n BLEND_ONE_MINUS_CONSTANT_ALPHA: 32772, // gl.ONE_MINUS_CONSTANT_ALPHA\n BLEND_SRC_ALPHA_SATURATE: 776, // gl.SRC_ALPHA_SATURATE\n\n // stencil operation\n STENCIL_DISABLE: 0, // disable stencil\n STENCIL_ENABLE: 1, // enable stencil\n STENCIL_INHERIT: 2, // inherit stencil states\n\n STENCIL_OP_KEEP: 7680, // gl.KEEP\n STENCIL_OP_ZERO: 0, // gl.ZERO\n STENCIL_OP_REPLACE: 7681, // gl.REPLACE\n STENCIL_OP_INCR: 7682, // gl.INCR\n STENCIL_OP_INCR_WRAP: 34055, // gl.INCR_WRAP\n STENCIL_OP_DECR: 7683, // gl.DECR\n STENCIL_OP_DECR_WRAP: 34056, // gl.DECR_WRAP\n STENCIL_OP_INVERT: 5386, // gl.INVERT\n\n // cull\n CULL_NONE: 0,\n CULL_FRONT: 1028,\n CULL_BACK: 1029,\n CULL_FRONT_AND_BACK: 1032,\n\n // primitive type\n PT_POINTS: 0, // gl.POINTS\n PT_LINES: 1, // gl.LINES\n PT_LINE_LOOP: 2, // gl.LINE_LOOP\n PT_LINE_STRIP: 3, // gl.LINE_STRIP\n PT_TRIANGLES: 4, // gl.TRIANGLES\n PT_TRIANGLE_STRIP: 5, // gl.TRIANGLE_STRIP\n PT_TRIANGLE_FAN: 6, // gl.TRIANGLE_FAN\n};\n\n/**\n * @method attrTypeBytes\n * @param {ATTR_TYPE_*} attrType\n */\nexport function attrTypeBytes(attrType) {\n if (attrType === enums.ATTR_TYPE_INT8) {\n return 1;\n } else if (attrType === enums.ATTR_TYPE_UINT8) {\n return 1;\n } else if (attrType === enums.ATTR_TYPE_INT16) {\n return 2;\n } else if (attrType === enums.ATTR_TYPE_UINT16) {\n return 2;\n } else if (attrType === enums.ATTR_TYPE_INT32) {\n return 4;\n } else if (attrType === enums.ATTR_TYPE_UINT32) {\n return 4;\n } else if (attrType === enums.ATTR_TYPE_FLOAT32) {\n return 4;\n }\n\n console.warn(`Unknown ATTR_TYPE: ${attrType}`);\n return 0;\n}\n\n/**\n * @method glFilter\n * @param {WebGLContext} gl\n * @param {FILTER_*} filter\n * @param {FILTER_*} mipFilter\n */\nexport function glFilter(gl, filter, mipFilter = -1) {\n let result = _filterGL[filter][mipFilter+1];\n if (result === undefined) {\n console.warn(`Unknown FILTER: ${filter}`);\n return mipFilter === -1 ? gl.LINEAR : gl.LINEAR_MIPMAP_LINEAR;\n }\n\n return result;\n}\n\n/**\n * @method glTextureFmt\n * @param {TEXTURE_FMT_*} fmt\n */\nexport function glTextureFmt(fmt) {\n let result = _textureFmtGL[fmt];\n if (result === undefined) {\n console.warn(`Unknown TEXTURE_FMT: ${fmt}`);\n return _textureFmtGL[enums.TEXTURE_FMT_RGBA8];\n }\n\n return result;\n}\n","export default class FrameBuffer {\n /**\n * @constructor\n * @param {Device} device\n * @param {Number} width\n * @param {Number} height\n * @param {Object} options\n * @param {Array} options.colors\n * @param {RenderBuffer|Texture2D|TextureCube} options.depth\n * @param {RenderBuffer|Texture2D|TextureCube} options.stencil\n * @param {RenderBuffer|Texture2D|TextureCube} options.depthStencil\n */\n constructor(device, width, height, options) {\n this._device = device;\n this._width = width;\n this._height = height;\n\n this._colors = options.colors || [];\n this._depth = options.depth || null;\n this._stencil = options.stencil || null;\n this._depthStencil = options.depthStencil || null;\n\n this._glID = device._gl.createFramebuffer();\n }\n\n /**\n * @method destroy\n */\n destroy() {\n if (this._glID === null) {\n console.error('The frame-buffer already destroyed');\n return;\n }\n\n const gl = this._device._gl;\n\n gl.deleteFramebuffer(this._glID);\n\n this._glID = null;\n }\n\n getHandle() {\n return this._glID;\n }\n}","import { enums } from './enums';\n\nconst BYTES_PER_INDEX = {\n [enums.INDEX_FMT_UINT8]: 1,\n [enums.INDEX_FMT_UINT16]: 2,\n [enums.INDEX_FMT_UINT32]: 4,\n}\n\nclass IndexBuffer {\n /**\n * @constructor\n * @param {Device} device\n * @param {INDEX_FMT_*} format\n * @param {USAGE_*} usage\n * @param {ArrayBuffer | Uint8Array} data\n */\n constructor(device, format, usage, data) {\n this._device = device;\n this._format = format;\n this._usage = usage;\n this._bytesPerIndex = BYTES_PER_INDEX[format];\n this._bytes = data.byteLength;\n this._numIndices = this._bytes / this._bytesPerIndex;\n\n this._needExpandDataStore = true;\n\n // update\n this._glID = device._gl.createBuffer();\n this.update(0, data);\n\n // stats\n device._stats.ib += this._bytes;\n }\n\n /**\n * @method destroy\n */\n destroy() {\n if (this._glID === -1) {\n console.error('The buffer already destroyed');\n return;\n }\n\n let gl = this._device._gl;\n gl.deleteBuffer(this._glID);\n this._device._stats.ib -= this.bytes;\n\n this._glID = -1;\n }\n\n /**\n * @method update\n * @param {Number} byteOffset\n * @param {ArrayBuffer} data\n */\n update(byteOffset, data) {\n if (this._glID === -1) {\n console.error('The buffer is destroyed');\n return;\n }\n\n if (data.byteLength === 0) return;\n\n // Need to create new buffer object when bytes exceed\n if (byteOffset + data.byteLength > this._bytes) {\n if (byteOffset) {\n // Lost data between [0, byteOffset] which is need for new buffer\n console.error('Failed to update data, bytes exceed.');\n return;\n }\n else {\n this._needExpandDataStore = true;\n this._bytes = byteOffset + data.byteLength;\n this._numIndices = this._bytes / this._bytesPerIndex;\n }\n }\n\n /** @type{WebGLRenderingContext} */\n let gl = this._device._gl;\n let glUsage = this._usage;\n\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._glID);\n if (this._needExpandDataStore) {\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, data, glUsage);\n this._needExpandDataStore = false;\n }\n else {\n gl.bufferSubData(gl.ELEMENT_ARRAY_BUFFER, byteOffset, data);\n }\n this._device._restoreIndexBuffer();\n }\n\n get count () {\n return this._numIndices;\n }\n\n setUsage (usage) {\n this._usage = usage;\n }\n}\n\nIndexBuffer.BYTES_PER_INDEX = BYTES_PER_INDEX;\n\nexport default IndexBuffer;\n","import {\n enums,\n attrTypeBytes,\n glFilter,\n glTextureFmt,\n} from './enums';\n\nlet gfx = null;\n\nif (CC_JSB && CC_NATIVERENDERER) {\n gfx = window.gfx;\n} else {\n let VertexFormat = require('./vertex-format');\n let IndexBuffer = require('./index-buffer');\n let VertexBuffer = require('./vertex-buffer');\n let Program = require('./program');\n let Texture = require('./texture');\n let Texture2D = require('./texture-2d');\n let TextureCube = require('./texture-cube');\n let RenderBuffer = require('./render-buffer');\n let FrameBuffer = require('./frame-buffer');\n let Device = require('./device');\n\n gfx = {\n // classes\n VertexFormat,\n IndexBuffer,\n VertexBuffer,\n Program,\n Texture,\n Texture2D,\n TextureCube,\n RenderBuffer,\n FrameBuffer,\n Device,\n\n // functions\n attrTypeBytes,\n glFilter,\n glTextureFmt,\n };\n Object.assign(gfx, enums);\n}\n\nexport default gfx;\ncc.gfx = gfx;\n","export function isPow2(v) {\n return !(v & (v - 1)) && (!!v);\n}","let _genID = 0;\n\nfunction _parseError(out, type, errorLog) {\n if(!errorLog){\n return;\n }\n errorLog.split('\\n').forEach(msg => {\n if (msg.length < 5) {\n return;\n }\n\n let parts = /^ERROR:\\s+(\\d+):(\\d+):\\s*(.*)$/.exec(msg);\n if (parts) {\n out.push({\n type: type,\n fileID: parts[1] | 0,\n line: parts[2] | 0,\n message: parts[3].trim()\n })\n } else if (msg.length > 0) {\n out.push({\n type: type,\n fileID: -1,\n line: 0,\n message: msg\n });\n }\n });\n}\n\nexport default class Program {\n /**\n * @param {ef.GraphicsDevice} device - graphic device\n * @param {object} options - shader definition\n * @param {string} options.vert - vertex shader source code\n * @param {string} options.frag - fragment shader shader source code\n * @example\n * let prog = new Program(device, {\n * vert: `\n * attribute vec3 a_position;\n * void main() {\n * gl_Position = vec4( a_position, 1.0 );\n * }\n * `,\n * frag: `\n * precision mediump float;\n * void main() {\n * gl_FragColor = vec4( 1.0, 1.0, 1.0, 1.0 );\n * }\n * `\n * });\n */\n constructor(device, options) {\n this._device = device;\n\n // stores gl information: { location, type }\n this._attributes = [];\n this._uniforms = [];\n this._samplers = [];\n this._errors = [];\n this._linked = false;\n this._vertSource = options.vert;\n this._fragSource = options.frag;\n this._glID = null;\n this._id = _genID++;\n }\n\n get id() {\n return this._id;\n }\n\n link() {\n if (this._linked) {\n return;\n }\n\n let gl = this._device._gl;\n\n let vertShader = _createShader(gl, gl.VERTEX_SHADER, this._vertSource);\n let fragShader = _createShader(gl, gl.FRAGMENT_SHADER, this._fragSource);\n\n let program = gl.createProgram();\n gl.attachShader(program, vertShader);\n gl.attachShader(program, fragShader);\n gl.linkProgram(program);\n\n let failed = false;\n let errors = this._errors;\n\n if (!gl.getShaderParameter(vertShader, gl.COMPILE_STATUS)) {\n _parseError(errors, 'vs', gl.getShaderInfoLog(vertShader));\n failed = true;\n }\n\n if (!gl.getShaderParameter(fragShader, gl.COMPILE_STATUS)) {\n _parseError(errors, 'fs', gl.getShaderInfoLog(fragShader));\n failed = true;\n }\n\n gl.deleteShader(vertShader);\n gl.deleteShader(fragShader);\n\n if (failed) {\n return errors;\n }\n\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n errors.push({info: `Failed to link shader program: ${gl.getProgramInfoLog(program)}`});\n return errors;\n }\n\n this._glID = program;\n\n // parse attribute\n let numAttributes = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES);\n for (let i = 0; i < numAttributes; ++i) {\n let info = gl.getActiveAttrib(program, i);\n let location = gl.getAttribLocation(program, info.name);\n\n this._attributes.push({\n name: info.name,\n location: location,\n type: info.type,\n });\n }\n\n // parse uniform\n let numUniforms = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS);\n for (let i = 0; i < numUniforms; ++i) {\n let info = gl.getActiveUniform(program, i);\n let name = info.name;\n let location = gl.getUniformLocation(program, name);\n let isArray = name.substr(name.length - 3) === '[0]';\n if (isArray) {\n name = name.substr(0, name.length - 3);\n }\n\n let uniform = {\n name: name,\n location: location,\n type: info.type,\n size: isArray ? info.size : undefined, // used when uniform is an array\n };\n this._uniforms.push(uniform);\n }\n\n this._linked = true;\n }\n\n destroy() {\n let gl = this._device._gl;\n gl.deleteProgram(this._glID);\n\n this._linked = false;\n this._glID = null;\n this._attributes = [];\n this._uniforms = [];\n this._samplers = [];\n }\n}\n\n// ====================\n// internal\n// ====================\n\nfunction _createShader(gl, type, src) {\n let shader = gl.createShader(type);\n gl.shaderSource(shader, src);\n gl.compileShader(shader);\n\n return shader;\n}","export default class RenderBuffer {\n /**\n * @constructor\n * @param {Device} device\n * @param {RB_FMT_*} format\n * @param {Number} width\n * @param {Number} height\n */\n constructor(device, format, width, height) {\n this._device = device;\n this._format = format;\n \n this._glID = device._gl.createRenderbuffer();\n this.update(width, height);\n }\n\n update (width, height) {\n this._width = width;\n this._height = height;\n\n const gl = this._device._gl;\n gl.bindRenderbuffer(gl.RENDERBUFFER, this._glID);\n gl.renderbufferStorage(gl.RENDERBUFFER, this._format, width, height);\n gl.bindRenderbuffer(gl.RENDERBUFFER, null);\n }\n\n /**\n * @method destroy\n */\n destroy() {\n if (this._glID === null) {\n console.error('The render-buffer already destroyed');\n return;\n }\n\n const gl = this._device._gl;\n\n gl.bindRenderbuffer(gl.RENDERBUFFER, null);\n gl.deleteRenderbuffer(this._glID);\n\n this._glID = null;\n }\n}","import { enums } from './enums';\n\nconst _default = {\n // blend\n blend: false,\n blendSep: false,\n blendColor: 0xffffffff,\n blendEq: enums.BLEND_FUNC_ADD,\n blendAlphaEq: enums.BLEND_FUNC_ADD,\n blendSrc: enums.BLEND_ONE,\n blendDst: enums.BLEND_ZERO,\n blendSrcAlpha: enums.BLEND_ONE,\n blendDstAlpha: enums.BLEND_ZERO,\n\n // depth\n depthTest: false,\n depthWrite: false,\n depthFunc: enums.DS_FUNC_LESS,\n\n // stencil\n stencilTest: false,\n stencilSep: false,\n stencilFuncFront: enums.DS_FUNC_ALWAYS,\n stencilRefFront: 0,\n stencilMaskFront: 0xff,\n stencilFailOpFront: enums.STENCIL_OP_KEEP,\n stencilZFailOpFront: enums.STENCIL_OP_KEEP,\n stencilZPassOpFront: enums.STENCIL_OP_KEEP,\n stencilWriteMaskFront: 0xff,\n stencilFuncBack: enums.DS_FUNC_ALWAYS,\n stencilRefBack: 0,\n stencilMaskBack: 0xff,\n stencilFailOpBack: enums.STENCIL_OP_KEEP,\n stencilZFailOpBack: enums.STENCIL_OP_KEEP,\n stencilZPassOpBack: enums.STENCIL_OP_KEEP,\n stencilWriteMaskBack: 0xff,\n\n // cull-mode\n cullMode: enums.CULL_BACK,\n\n // primitive-type\n primitiveType: enums.PT_TRIANGLES,\n\n // bindings\n maxStream: -1,\n vertexBuffers: [],\n vertexBufferOffsets: [],\n indexBuffer: null,\n maxTextureSlot: -1,\n textureUnits: [],\n program: null,\n};\n\nexport default class State {\n constructor(device) {\n // bindings\n this.vertexBuffers = new Array(device._caps.maxVertexStreams);\n this.vertexBufferOffsets = new Array(device._caps.maxVertexStreams);\n this.textureUnits = new Array(device._caps.maxTextureUnits);\n\n this.set(_default);\n }\n\n static initDefault(device) {\n _default.vertexBuffers = new Array(device._caps.maxVertexStreams);\n _default.vertexBufferOffsets = new Array(device._caps.maxVertexStreams);\n _default.textureUnits = new Array(device._caps.maxTextureUnits);\n }\n\n reset () {\n this.set(_default);\n }\n\n set (cpy) {\n // blending\n this.blend = cpy.blend;\n this.blendSep = cpy.blendSep;\n this.blendColor = cpy.blendColor;\n this.blendEq = cpy.blendEq;\n this.blendAlphaEq = cpy.blendAlphaEq;\n this.blendSrc = cpy.blendSrc;\n this.blendDst = cpy.blendDst;\n this.blendSrcAlpha = cpy.blendSrcAlpha;\n this.blendDstAlpha = cpy.blendDstAlpha;\n\n // depth\n this.depthTest = cpy.depthTest;\n this.depthWrite = cpy.depthWrite;\n this.depthFunc = cpy.depthFunc;\n\n // stencil\n this.stencilTest = cpy.stencilTest;\n this.stencilSep = cpy.stencilSep;\n this.stencilFuncFront = cpy.stencilFuncFront;\n this.stencilRefFront = cpy.stencilRefFront;\n this.stencilMaskFront = cpy.stencilMaskFront;\n this.stencilFailOpFront = cpy.stencilFailOpFront;\n this.stencilZFailOpFront = cpy.stencilZFailOpFront;\n this.stencilZPassOpFront = cpy.stencilZPassOpFront;\n this.stencilWriteMaskFront = cpy.stencilWriteMaskFront;\n this.stencilFuncBack = cpy.stencilFuncBack;\n this.stencilRefBack = cpy.stencilRefBack;\n this.stencilMaskBack = cpy.stencilMaskBack;\n this.stencilFailOpBack = cpy.stencilFailOpBack;\n this.stencilZFailOpBack = cpy.stencilZFailOpBack;\n this.stencilZPassOpBack = cpy.stencilZPassOpBack;\n this.stencilWriteMaskBack = cpy.stencilWriteMaskBack;\n\n // cull-mode\n this.cullMode = cpy.cullMode;\n\n // primitive-type\n this.primitiveType = cpy.primitiveType;\n\n // buffer bindings\n this.maxStream = cpy.maxStream;\n for (let i = 0; i < cpy.vertexBuffers.length; ++i) {\n this.vertexBuffers[i] = cpy.vertexBuffers[i];\n }\n for (let i = 0; i < cpy.vertexBufferOffsets.length; ++i) {\n this.vertexBufferOffsets[i] = cpy.vertexBufferOffsets[i];\n }\n this.indexBuffer = cpy.indexBuffer;\n\n // texture bindings\n this.maxTextureSlot = cpy.maxTextureSlot;\n for (let i = 0; i < cpy.textureUnits.length; ++i) {\n this.textureUnits[i] = cpy.textureUnits[i];\n }\n\n this.program = cpy.program;\n }\n}","// @ts-check\nimport Texture from './texture';\nimport { enums, glFilter, glTextureFmt } from './enums';\nimport { isPow2 } from './misc';\n\n/**\n * @typedef {HTMLImageElement | HTMLCanvasElement} HTMLImageSource\n * @typedef {HTMLImageSource | ArrayBufferView} ImageSource\n * @typedef {{width?: number, height?: number, minFilter?: number, magFilter?: number, mipFilter?: number, wrapS?: number, wrapT?: number, format?: number, genMipmaps?: boolean, images?: ImageSource[], image?: ImageSource, flipY?: boolean, premultiplyAlpha?: boolean, anisotropy?: number}} TextureUpdateOpts\n * @typedef {import(\"../gfx/device\").default} Device\n */\n\nexport default class Texture2D extends Texture {\n /**\n * @constructor\n * @param {Device} device\n * @param {TextureUpdateOpts} options\n */\n constructor(device, options) {\n super(device);\n\n let gl = this._device._gl;\n this._target = gl.TEXTURE_2D;\n this._glID = gl.createTexture();\n\n // always alloc texture in GPU when we create it.\n options.images = options.images || [null];\n this.update(options);\n }\n\n /**\n * @method update\n * @param {TextureUpdateOpts} options\n */\n update(options) {\n let gl = this._device._gl;\n let genMipmaps = this._genMipmap;\n\n if (options) {\n if (options.width !== undefined) {\n this._width = options.width;\n }\n if (options.height !== undefined) {\n this._height = options.height;\n }\n if (options.anisotropy !== undefined) {\n this._anisotropy = options.anisotropy;\n }\n if (options.minFilter !== undefined) {\n this._minFilter = options.minFilter;\n }\n if (options.magFilter !== undefined) {\n this._magFilter = options.magFilter;\n }\n if (options.mipFilter !== undefined) {\n this._mipFilter = options.mipFilter;\n }\n if (options.wrapS !== undefined) {\n this._wrapS = options.wrapS;\n }\n if (options.wrapT !== undefined) {\n this._wrapT = options.wrapT;\n }\n if (options.format !== undefined) {\n this._format = options.format;\n this._compressed = \n (this._format >= enums.TEXTURE_FMT_RGB_DXT1 && this._format <= enums.TEXTURE_FMT_RGBA_PVRTC_4BPPV1) || \n (this._format >= enums.TEXTURE_FMT_RGB_ETC2 && this._format <= enums.TEXTURE_FMT_RGBA_ETC2)\n ;\n }\n\n // check if generate mipmap\n if (options.genMipmaps !== undefined) {\n this._genMipmap = options.genMipmaps;\n genMipmaps = options.genMipmaps;\n }\n\n let maxSize = this._device.caps.maxTextureSize || Number.MAX_VALUE;\n let textureMaxSize = Math.max(options.width || 0, options.height || 0);\n if (maxSize < textureMaxSize)\n console.warn(`The current texture size ${textureMaxSize} exceeds the maximum size [${maxSize}] supported on the device.`);\n\n if (options.images !== undefined) {\n if (options.images.length > 1) {\n genMipmaps = false;\n let maxLength = options.width > options.height ? options.width : options.height;\n if (maxLength >> (options.images.length - 1) !== 1) {\n console.error('texture-2d mipmap is invalid, should have a 1x1 mipmap.');\n }\n }\n }\n }\n\n // NOTE: get pot after this._width, this._height has been assigned.\n let pot = isPow2(this._width) && isPow2(this._height);\n if (!pot) {\n genMipmaps = false;\n }\n\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, this._glID);\n if (options.images !== undefined && options.images.length > 0) {\n this._setMipmap(options.images, options.flipY, options.premultiplyAlpha);\n if (options.images.length > 1) this._genMipmap = true;\n }\n if (genMipmaps) {\n gl.hint(gl.GENERATE_MIPMAP_HINT, gl.NICEST);\n gl.generateMipmap(gl.TEXTURE_2D);\n this._genMipmap = true;\n }\n\n this._setTexInfo();\n this._device._restoreTexture(0);\n }\n\n /**\n * @method updateSubImage\n * @param {Object} options\n * @param {Number} options.x\n * @param {Number} options.y\n * @param {Number} options.width\n * @param {Number} options.height\n * @param {Number} options.level\n * @param {HTMLCanvasElement | HTMLImageElement | HTMLVideoElement | ArrayBufferView} options.image\n * @param {Boolean} options.flipY\n * @param {Boolean} options.premultiplyAlpha\n */\n updateSubImage(options) {\n let gl = this._device._gl;\n let glFmt = glTextureFmt(this._format);\n\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, this._glID);\n this._setSubImage(glFmt, options);\n this._device._restoreTexture(0);\n }\n\n /**\n * @method updateImage\n * @param {Object} options\n * @param {Number} options.width\n * @param {Number} options.height\n * @param {Number} options.level\n * @param {HTMLCanvasElement | HTMLImageElement | HTMLVideoElement | ArrayBufferView} options.image\n * @param {Boolean} options.flipY\n * @param {Boolean} options.premultiplyAlpha\n */\n updateImage(options) {\n let gl = this._device._gl;\n let glFmt = glTextureFmt(this._format);\n\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, this._glID);\n this._setImage(glFmt, options);\n this._device._restoreTexture(0);\n }\n\n _setSubImage(glFmt, options) {\n let gl = this._device._gl;\n let flipY = options.flipY;\n let premultiplyAlpha = options.premultiplyAlpha;\n let img = options.image;\n\n if (img && !ArrayBuffer.isView(img) && !(img instanceof ArrayBuffer)) {\n if (flipY === undefined) {\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);\n } else {\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);\n }\n\n if (premultiplyAlpha === undefined) {\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n } else {\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultiplyAlpha);\n }\n\n gl.texSubImage2D(gl.TEXTURE_2D, options.level, options.x, options.y, glFmt.format, glFmt.pixelType, img);\n } else {\n if (flipY === undefined) {\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);\n } else {\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);\n }\n\n if (premultiplyAlpha === undefined) {\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n } else {\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultiplyAlpha);\n }\n\n if (this._compressed) {\n gl.compressedTexSubImage2D(gl.TEXTURE_2D,\n options.level,\n options.x,\n options.y,\n options.width,\n options.height,\n glFmt.format,\n img\n );\n } else {\n gl.texSubImage2D(\n gl.TEXTURE_2D,\n options.level,\n options.x,\n options.y,\n options.width,\n options.height,\n glFmt.format,\n glFmt.pixelType,\n img\n );\n }\n }\n }\n\n _setImage(glFmt, options) {\n let gl = this._device._gl;\n let flipY = options.flipY;\n let premultiplyAlpha = options.premultiplyAlpha;\n let img = options.image;\n\n if (img && !ArrayBuffer.isView(img) && !(img instanceof ArrayBuffer)) {\n if (flipY === undefined) {\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);\n } else {\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);\n }\n\n if (premultiplyAlpha === undefined) {\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n } else {\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultiplyAlpha);\n }\n\n gl.texImage2D(\n gl.TEXTURE_2D,\n options.level,\n glFmt.internalFormat,\n glFmt.format,\n glFmt.pixelType,\n img\n );\n } else {\n if (flipY === undefined) {\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);\n } else {\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);\n }\n\n if (premultiplyAlpha === undefined) {\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n } else {\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultiplyAlpha);\n }\n\n if (this._compressed) {\n gl.compressedTexImage2D(\n gl.TEXTURE_2D,\n options.level,\n glFmt.internalFormat,\n options.width,\n options.height,\n 0,\n img\n );\n } else {\n gl.texImage2D(\n gl.TEXTURE_2D,\n options.level,\n glFmt.internalFormat,\n options.width,\n options.height,\n 0,\n glFmt.format,\n glFmt.pixelType,\n img\n );\n }\n }\n }\n\n _setMipmap(images, flipY, premultiplyAlpha) {\n let glFmt = glTextureFmt(this._format);\n let options = {\n width: this._width,\n height: this._height,\n flipY: flipY,\n premultiplyAlpha: premultiplyAlpha,\n level: 0,\n image: null\n };\n\n for (let i = 0; i < images.length; ++i) {\n options.level = i;\n options.width = this._width >> i;\n options.height = this._height >> i;\n options.image = images[i];\n this._setImage(glFmt, options);\n }\n }\n\n _setTexInfo() {\n let gl = this._device._gl;\n let pot = isPow2(this._width) && isPow2(this._height);\n\n // WebGL1 doesn't support all wrap modes with NPOT textures\n if (!pot && (this._wrapS !== enums.WRAP_CLAMP || this._wrapT !== enums.WRAP_CLAMP)) {\n console.warn('WebGL1 doesn\\'t support all wrap modes with NPOT textures');\n this._wrapS = enums.WRAP_CLAMP;\n this._wrapT = enums.WRAP_CLAMP;\n }\n\n let mipFilter = this._genMipmap ? this._mipFilter : -1;\n if (!pot && mipFilter !== -1) {\n console.warn('NPOT textures do not support mipmap filter');\n mipFilter = -1;\n }\n\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, glFilter(gl, this._minFilter, mipFilter));\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, glFilter(gl, this._magFilter, -1));\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, this._wrapS);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, this._wrapT);\n\n let ext = this._device.ext('EXT_texture_filter_anisotropic');\n if (ext) {\n gl.texParameteri(gl.TEXTURE_2D, ext.TEXTURE_MAX_ANISOTROPY_EXT, this._anisotropy);\n }\n }\n}","import Texture from './texture';\nimport { enums, glFilter, glTextureFmt } from './enums';\nimport { isPow2 } from './misc';\n\nexport default class TextureCube extends Texture {\n /**\n * @constructor\n * @param {Device} device\n * @param {Object} options\n * @param {Array} options.images\n * @param {Boolean} options.genMipmaps\n * @param {Number} options.width\n * @param {Number} options.height\n * @param {TEXTURE_FMT_*} options.format\n * @param {Number} options.anisotropy\n * @param {FILTER_*} options.minFilter\n * @param {FILTER_*} options.magFilter\n * @param {FILTER_*} options.mipFilter\n * @param {WRAP_*} options.wrapS\n * @param {WRAP_*} options.wrapT\n * @param {WRAP_*} options.wrapR\n * @param {Boolean} options.flipY\n * @param {Boolean} options.premultiplyAlpha\n */\n constructor(device, options) {\n super(device);\n let gl = this._device._gl;\n this._target = gl.TEXTURE_CUBE_MAP;\n this._glID = gl.createTexture();\n this.update(options);\n }\n\n /**\n * @method update\n * @param {Object} options\n * @param {Array} options.images\n * @param {Boolean} options.genMipmaps\n * @param {Number} options.width\n * @param {Number} options.height\n * @param {TEXTURE_FMT_*} options.format\n * @param {Number} options.anisotropy\n * @param {FILTER_*} options.minFilter\n * @param {FILTER_*} options.magFilter\n * @param {FILTER_*} options.mipFilter\n * @param {WRAP_*} options.wrapS\n * @param {WRAP_*} options.wrapT\n * @param {WRAP_*} options.wrapR\n * @param {Boolean} options.flipY\n * @param {Boolean} options.premultiplyAlpha\n */\n update(options) {\n let gl = this._device._gl;\n let genMipmaps = this._genMipmaps;\n\n if (options) {\n if (options.width !== undefined) {\n this._width = options.width;\n }\n if (options.height !== undefined) {\n this._height = options.height;\n }\n if (options.anisotropy !== undefined) {\n this._anisotropy = options.anisotropy;\n }\n if (options.minFilter !== undefined) {\n this._minFilter = options.minFilter;\n }\n if (options.magFilter !== undefined) {\n this._magFilter = options.magFilter;\n }\n if (options.mipFilter !== undefined) {\n this._mipFilter = options.mipFilter;\n }\n if (options.wrapS !== undefined) {\n this._wrapS = options.wrapS;\n }\n if (options.wrapT !== undefined) {\n this._wrapT = options.wrapT;\n }\n // wrapR available in webgl2\n // if (options.wrapR !== undefined) {\n // this._wrapR = options.wrapR;\n // }\n if (options.format !== undefined) {\n this._format = options.format;\n this._compressed = \n (this._format >= enums.TEXTURE_FMT_RGB_DXT1 && this._format <= enums.TEXTURE_FMT_RGBA_PVRTC_4BPPV1) || \n (this._format >= enums.TEXTURE_FMT_RGB_ETC2 && this._format <= enums.TEXTURE_FMT_RGBA_ETC2)\n ;\n }\n\n // check if generate mipmap\n if (options.genMipmaps !== undefined) {\n this._genMipmaps = options.genMipmaps;\n genMipmaps = options.genMipmaps;\n }\n\n if (options.images !== undefined) {\n if (options.images.length > 1) {\n genMipmaps = false;\n if (options.width !== options.height) {\n console.warn('texture-cube width and height should be identical.');\n }\n if (options.width >> (options.images.length - 1) !== 1) {\n console.error('texture-cube mipmap is invalid. please set mipmap as 1x1, 2x2, 4x4 ... nxn');\n }\n }\n }\n }\n\n // NOTE: get pot after this._width, this._height has been assigned.\n let pot = isPow2(this._width) && isPow2(this._height);\n if (!pot) {\n genMipmaps = false;\n }\n\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_CUBE_MAP, this._glID);\n if (options.images !== undefined && options.images.length > 0) {\n this._setMipmap(options.images, options.flipY, options.premultiplyAlpha);\n if (options.images.length > 1) this._genMipmaps = true;\n }\n if (genMipmaps) {\n gl.hint(gl.GENERATE_MIPMAP_HINT, gl.NICEST);\n gl.generateMipmap(gl.TEXTURE_CUBE_MAP);\n this._genMipmaps = true;\n }\n\n this._setTexInfo();\n\n this._device._restoreTexture(0);\n }\n\n /**\n * @method updateSubImage\n * @param {Object} options\n * @param {Number} options.x\n * @param {Number} options.y\n * @param {Number} options.width\n * @param {Number} options.height\n * @param {Number} options.level\n * @param {Number} options.faceIndex\n * @param {HTMLCanvasElement | HTMLImageElement | HTMLVideoElement | ArrayBufferView} options.image\n * @param {Boolean} options.flipY\n * @param {Boolean} options.premultiplyAlpha\n */\n updateSubImage(options) {\n let gl = this._device._gl;\n let glFmt = glTextureFmt(this._format);\n\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_CUBE_MAP, this._glID);\n this._setSubImage(glFmt, options);\n\n this._device._restoreTexture(0);\n }\n\n /**\n * @method updateImage\n * @param {Object} options\n * @param {Number} options.width\n * @param {Number} options.height\n * @param {Number} options.level\n * @param {Number} options.faceIndex\n * @param {HTMLCanvasElement | HTMLImageElement | HTMLVideoElement | ArrayBufferView} options.image\n * @param {Boolean} options.flipY\n * @param {Boolean} options.premultiplyAlpha\n */\n updateImage(options) {\n let gl = this._device._gl;\n let glFmt = glTextureFmt(this._format);\n\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_CUBE_MAP, this._glID);\n this._setImage(glFmt, options);\n this._device._restoreTexture(0);\n }\n\n _setSubImage(glFmt, options) {\n let gl = this._device._gl;\n let flipY = options.flipY;\n let premultiplyAlpha = options.premultiplyAlpha;\n let faceIndex = options.faceIndex;\n let img = options.image;\n\n if (flipY === undefined) {\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);\n } else {\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);\n }\n\n if (premultiplyAlpha === undefined) {\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n } else {\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultiplyAlpha);\n }\n\n if (img && !ArrayBuffer.isView(img) && !(img instanceof ArrayBuffer)) {\n gl.texSubImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex, options.level, options.x, options.y, glFmt.format, glFmt.pixelType, img);\n } else {\n if (this._compressed) {\n gl.compressedTexSubImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex,\n options.level,\n options.x,\n options.y,\n options.width,\n options.height,\n glFmt.format,\n img\n );\n } else {\n gl.texSubImage2D(\n gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex,\n options.level,\n options.x,\n options.y,\n options.width,\n options.height,\n glFmt.format,\n glFmt.pixelType,\n img\n );\n }\n }\n }\n\n _setImage(glFmt, options) {\n let gl = this._device._gl;\n let flipY = options.flipY;\n let premultiplyAlpha = options.premultiplyAlpha;\n let faceIndex = options.faceIndex;\n let img = options.image;\n\n if (flipY === undefined) {\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);\n } else {\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);\n }\n\n if (premultiplyAlpha === undefined) {\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n } else {\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultiplyAlpha);\n }\n if (img && !ArrayBuffer.isView(img) && !(img instanceof ArrayBuffer)) {\n gl.texImage2D(\n gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex,\n options.level,\n glFmt.internalFormat,\n glFmt.format,\n glFmt.pixelType,\n img\n );\n } else {\n if (this._compressed) {\n gl.compressedTexImage2D(\n gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex,\n options.level,\n glFmt.internalFormat,\n options.width,\n options.height,\n 0,\n img\n );\n } else {\n gl.texImage2D(\n gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex,\n options.level,\n glFmt.internalFormat,\n options.width,\n options.height,\n 0,\n glFmt.format,\n glFmt.pixelType,\n img\n );\n }\n }\n }\n\n // levelImages = [imagePosX, imageNegX, imagePosY, imageNegY, imagePosZ, imageNegz]\n // images = [levelImages0, levelImages1, ...]\n _setMipmap(images, flipY, premultiplyAlpha) {\n let glFmt = glTextureFmt(this._format);\n let options = {\n width: this._width,\n height: this._height,\n faceIndex: 0,\n flipY: flipY,\n premultiplyAlpha: premultiplyAlpha,\n level: 0,\n image: null\n };\n\n for (let i = 0; i < images.length; ++i) {\n let levelImages = images[i];\n options.level = i;\n options.width = this._width >> i;\n options.height = this._height >> i;\n\n for (let face = 0; face < 6; ++face) {\n options.faceIndex = face;\n options.image = levelImages[face];\n this._setImage(glFmt, options);\n }\n }\n }\n\n _setTexInfo() {\n let gl = this._device._gl;\n let pot = isPow2(this._width) && isPow2(this._height);\n\n // WebGL1 doesn't support all wrap modes with NPOT textures\n if (!pot && (this._wrapS !== enums.WRAP_CLAMP || this._wrapT !== enums.WRAP_CLAMP)) {\n console.warn('WebGL1 doesn\\'t support all wrap modes with NPOT textures');\n this._wrapS = enums.WRAP_CLAMP;\n this._wrapT = enums.WRAP_CLAMP;\n }\n\n let mipFilter = this._genMipmaps ? this._mipFilter : -1;\n if (!pot && mipFilter !== -1) {\n console.warn('NPOT textures do not support mipmap filter');\n mipFilter = -1;\n }\n\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MIN_FILTER, glFilter(gl, this._minFilter, mipFilter));\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MAG_FILTER, glFilter(gl, this._magFilter, -1));\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_S, this._wrapS);\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_T, this._wrapT);\n // wrapR available in webgl2\n // gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_R, this._wrapR);\n\n let ext = this._device.ext('EXT_texture_filter_anisotropic');\n if (ext) {\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, ext.TEXTURE_MAX_ANISOTROPY_EXT, this._anisotropy);\n }\n }\n}\n","import { enums } from './enums';\n\n/**\n * @type {WebGLTexture}\n */\nconst _nullWebGLTexture = null;\n\nlet _textureID = 0;\n\n/**\n * @typedef {import(\"../gfx/device\").default} Device\n */\n\nexport default class Texture {\n /**\n * @param {Device} device\n */\n constructor(device) {\n this._device = device;\n\n this._width = 4;\n this._height = 4;\n this._genMipmaps = false;\n this._compressed = false;\n\n this._anisotropy = 1;\n this._minFilter = enums.FILTER_LINEAR;\n this._magFilter = enums.FILTER_LINEAR;\n this._mipFilter = enums.FILTER_LINEAR;\n this._wrapS = enums.WRAP_REPEAT;\n this._wrapT = enums.WRAP_REPEAT;\n // wrapR available in webgl2\n // this._wrapR = enums.WRAP_REPEAT;\n this._format = enums.TEXTURE_FMT_RGBA8;\n\n this._target = -1;\n \n this._id = _textureID++;\n }\n\n /**\n * @method destroy\n */\n destroy() {\n if (this._glID === _nullWebGLTexture) {\n console.error('The texture already destroyed');\n return;\n }\n\n let gl = this._device._gl;\n gl.deleteTexture(this._glID);\n\n this._device._stats.tex -= this.bytes;\n this._glID = _nullWebGLTexture;\n }\n}","import { enums } from './enums';\n\nclass VertexBuffer {\n /**\n * @constructor\n * @param {Device} device\n * @param {VertexFormat} format\n * @param {USAGE_*} usage\n * @param {ArrayBuffer | Uint8Array} data\n */\n constructor(device, format, usage, data) {\n this._device = device;\n this._format = format;\n this._usage = usage;\n this._bytesPerVertex = this._format._bytes;\n this._bytes = data.byteLength;\n this._numVertices = this._bytes / this._bytesPerVertex;\n\n this._needExpandDataStore = true;\n\n // update\n this._glID = device._gl.createBuffer();\n this.update(0, data);\n\n // stats\n device._stats.vb += this._bytes;\n }\n\n /**\n * @method destroy\n */\n destroy() {\n if (this._glID === -1) {\n console.error('The buffer already destroyed');\n return;\n }\n\n let gl = this._device._gl;\n gl.deleteBuffer(this._glID);\n this._device._stats.vb -= this.bytes;\n\n this._glID = -1;\n }\n\n /**\n * @method update\n * @param {Number} byteOffset\n * @param {ArrayBuffer} data\n */\n update(byteOffset, data) {\n if (this._glID === -1) {\n console.error('The buffer is destroyed');\n return;\n }\n\n if (data.byteLength === 0) return;\n\n // Need to create new buffer object when bytes exceed\n if (byteOffset + data.byteLength > this._bytes) {\n if (byteOffset) {\n // Lost data between [0, byteOffset] which is need for new buffer\n console.error('Failed to update data, bytes exceed.');\n return;\n }\n else {\n this._needExpandDataStore = true;\n this._bytes = byteOffset + data.byteLength;\n this._numVertices = this._bytes / this._bytesPerVertex;\n }\n }\n\n let gl = this._device._gl;\n let glUsage = this._usage;\n\n gl.bindBuffer(gl.ARRAY_BUFFER, this._glID);\n if (this._needExpandDataStore) {\n gl.bufferData(gl.ARRAY_BUFFER, data, glUsage);\n this._needExpandDataStore = false;\n }\n else {\n gl.bufferSubData(gl.ARRAY_BUFFER, byteOffset, data);\n }\n gl.bindBuffer(gl.ARRAY_BUFFER, null);\n }\n\n get count () {\n return this._numVertices;\n }\n\n getFormat (name) {\n return this._format.element(name);\n }\n\n setUsage (usage) {\n this._usage = usage;\n }\n}\n\nexport default VertexBuffer;\n","import { attrTypeBytes } from './enums';\nimport murmurhash2 from '../murmurhash2_gc';\n\n// ====================\n// exports\n// ====================\n\nexport default class VertexFormat {\n /**\n * @constructor\n * @param {Array} infos\n *\n * @example\n * let vertexFmt = new VertexFormat([\n * { name: gfx.ATTR_POSITION, type: gfx.ATTR_TYPE_FLOAT32, num: 3 },\n * { name: gfx.ATTR_UV0, type: gfx.ATTR_TYPE_FLOAT32, num: 2 },\n * { name: gfx.ATTR_COLOR, type: gfx.ATTR_TYPE_FLOAT32, num: 4, normalize: true },\n * ])\n */\n constructor(infos) {\n this._attr2el = {};\n this._elements = [];\n this._bytes = 0;\n\n let hash = \"\";\n\n for (let i = 0, len = infos.length; i < len; ++i) {\n let info = infos[i];\n let el = {\n name: info.name,\n offset: this._bytes,\n stride: 0,\n stream: -1,\n type: info.type,\n num: info.num,\n normalize: (info.normalize === undefined) ? false : info.normalize,\n bytes: info.num * attrTypeBytes(info.type),\n };\n\n this._attr2el[el.name] = el;\n this._elements.push(el);\n\n this._bytes += el.bytes;\n\n hash += `${el.name}:${el.num}:${el.type}:${el.normalize}`;\n }\n\n for (let i = 0, len = this._elements.length; i < len; ++i) {\n let el = this._elements[i];\n el.stride = this._bytes;\n }\n\n this._hash = murmurhash2(hash, 666);\n }\n\n /**\n * @method element\n * @param {string} attrName\n */\n element(attrName) {\n return this._attr2el[attrName];\n }\n\n /**\n * @method getHash\n */\n getHash () {\n return this._hash;\n }\n}","export default class CircularPool {\n constructor(fn, size) {\n this._cursor = 0;\n this._data = new Array(size);\n\n for (let i = 0; i < size; ++i) {\n this._data[i] = fn();\n }\n }\n\n request() {\n let item = this._data[this._cursor];\n this._cursor = (this._cursor + 1) % this._data.length;\n\n return item;\n }\n}","import sort from './timsort';\n\nexport default class FixedArray {\n constructor(size) {\n this._count = 0;\n this._data = new Array(size);\n }\n\n _resize(size) {\n if (size > this._data.length) {\n for (let i = this._data.length; i < size; ++i) {\n this._data[i] = undefined;\n }\n }\n }\n\n get length() {\n return this._count;\n }\n\n get data() {\n return this._data;\n }\n\n reset() {\n for (let i = 0; i < this._count; ++i) {\n this._data[i] = undefined;\n }\n\n this._count = 0;\n }\n\n push(val) {\n if (this._count >= this._data.length) {\n this._resize(this._data.length * 2);\n }\n\n this._data[this._count] = val;\n ++this._count;\n }\n\n pop() {\n --this._count;\n\n if (this._count < 0) {\n this._count = 0;\n }\n\n let ret = this._data[this._count];\n this._data[this._count] = undefined;\n\n return ret;\n }\n\n fastRemove(idx) {\n if (idx >= this._count || idx < 0) {\n return;\n }\n\n let last = this._count - 1;\n this._data[idx] = this._data[last];\n this._data[last] = undefined;\n this._count -= 1;\n }\n\n indexOf(val) {\n return this._data.indexOf(val);\n }\n\n sort(cmp) {\n return sort(this._data, 0, this._count, cmp);\n }\n}","export { default as CircularPool } from './circular-pool';\nexport { default as FixedArray } from './fixed-array';\nexport { default as LinkedArray } from './linked-array';\nexport { default as Pool } from './pool';\nexport { default as RecyclePool } from './recycle-pool';\nexport { default as TypedArrayPool } from './typed-array-pool';","import Pool from './pool';\n\n// NOTE: you must have `_prev` and `_next` field in the object returns by `fn`\n\nexport default class LinkedArray {\n constructor(fn, size) {\n this._fn = fn;\n this._count = 0;\n this._head = null;\n this._tail = null;\n\n this._pool = new Pool(fn, size);\n }\n\n get head() {\n return this._head;\n }\n\n get tail() {\n return this._tail;\n }\n\n get length() {\n return this._count;\n }\n\n add() {\n let node = this._pool.alloc();\n\n if (!this._tail) {\n this._head = node;\n } else {\n this._tail._next = node;\n node._prev = this._tail;\n }\n this._tail = node;\n this._count += 1;\n\n return node;\n }\n\n remove(node) {\n if (node._prev) {\n node._prev._next = node._next;\n } else {\n this._head = node._next;\n }\n\n if (node._next) {\n node._next._prev = node._prev;\n } else {\n this._tail = node._prev;\n }\n\n node._next = null;\n node._prev = null;\n this._pool.free(node);\n this._count -= 1;\n }\n\n forEach(fn, binder) {\n let cursor = this._head;\n if (!cursor) {\n return;\n }\n\n if (binder) {\n fn = fn.bind(binder);\n }\n\n let idx = 0;\n let next = cursor;\n\n while (cursor) {\n next = cursor._next;\n fn(cursor, idx, this);\n\n cursor = next;\n ++idx;\n }\n }\n}","export default class Pool {\n constructor(fn, size) {\n this._fn = fn;\n this._idx = size - 1;\n this._frees = new Array(size);\n\n for (let i = 0; i < size; ++i) {\n this._frees[i] = fn();\n }\n }\n\n _expand(size) {\n let old = this._frees;\n this._frees = new Array(size);\n\n let len = size - old.length;\n for (let i = 0; i < len; ++i) {\n this._frees[i] = this._fn();\n }\n\n for (let i = len, j = 0; i < size; ++i, ++j) {\n this._frees[i] = old[j];\n }\n\n this._idx += len;\n }\n\n alloc() {\n // create some more space (expand by 20%, minimum 1)\n if (this._idx < 0) {\n this._expand(Math.round(this._frees.length * 1.2) + 1);\n }\n\n let ret = this._frees[this._idx];\n this._frees[this._idx] = null;\n --this._idx;\n\n return ret;\n }\n\n free(obj) {\n ++this._idx;\n this._frees[this._idx] = obj;\n }\n\n /**\n * 清除对象池。\n * @param fn 清除回调,对每个释放的对象调用一次。\n */\n clear (fn) {\n for (let i = 0; i <= this._idx; i++) {\n if (fn) {\n fn(this._frees[i]);\n }\n }\n this._frees.length = 0;\n this._idx = -1;\n }\n}","import sort from './timsort';\n\n/**\n * Recycle Pool\n * @class RecyclePool\n */\nexport default class RecyclePool {\n constructor(fn, size) {\n this._fn = fn;\n this._count = 0;\n this._data = new Array(size);\n\n for (let i = 0; i < size; ++i) {\n this._data[i] = fn();\n }\n }\n\n get length() {\n return this._count;\n }\n\n get data() {\n return this._data;\n }\n\n reset() {\n this._count = 0;\n }\n\n resize(size) {\n if (size > this._data.length) {\n for (let i = this._data.length; i < size; ++i) {\n this._data[i] = this._fn();\n }\n }\n }\n\n add() {\n if (this._count >= this._data.length) {\n this.resize(this._data.length * 2);\n }\n\n return this._data[this._count++];\n }\n\n remove(idx) {\n if (idx >= this._count) {\n return;\n }\n\n let last = this._count - 1;\n let tmp = this._data[idx];\n this._data[idx] = this._data[last];\n this._data[last] = tmp;\n this._count -= 1;\n }\n\n sort(cmp) {\n return sort(this._data, 0, this._count, cmp);\n }\n}\n\ncc.RecyclePool = RecyclePool;","// reference: https://github.com/mziccard/node-timsort\n\n/**\n * Default minimum size of a run.\n */\nconst DEFAULT_MIN_MERGE = 32;\n\n/**\n * Minimum ordered subsequece required to do galloping.\n */\nconst DEFAULT_MIN_GALLOPING = 7;\n\n/**\n * Default tmp storage length. Can increase depending on the size of the\n * smallest run to merge.\n */\nconst DEFAULT_TMP_STORAGE_LENGTH = 256;\n\n/**\n * Pre-computed powers of 10 for efficient lexicographic comparison of\n * small integers.\n */\nconst POWERS_OF_TEN = [1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9]\n\n/**\n * Estimate the logarithm base 10 of a small integer.\n *\n * @param {number} x - The integer to estimate the logarithm of.\n * @return {number} - The estimated logarithm of the integer.\n */\nfunction log10(x) {\n if (x < 1e5) {\n if (x < 1e2) {\n return x < 1e1 ? 0 : 1;\n }\n\n if (x < 1e4) {\n return x < 1e3 ? 2 : 3;\n }\n\n return 4;\n }\n\n if (x < 1e7) {\n return x < 1e6 ? 5 : 6;\n }\n\n if (x < 1e9) {\n return x < 1e8 ? 7 : 8;\n }\n\n return 9;\n}\n\n/**\n * Default alphabetical comparison of items.\n *\n * @param {string|object|number} a - First element to compare.\n * @param {string|object|number} b - Second element to compare.\n * @return {number} - A positive number if a.toString() > b.toString(), a\n * negative number if .toString() < b.toString(), 0 otherwise.\n */\nfunction alphabeticalCompare(a, b) {\n if (a === b) {\n return 0;\n }\n\n if (~~a === a && ~~b === b) {\n if (a === 0 || b === 0) {\n return a < b ? -1 : 1;\n }\n\n if (a < 0 || b < 0) {\n if (b >= 0) {\n return -1;\n }\n\n if (a >= 0) {\n return 1;\n }\n\n a = -a;\n b = -b;\n }\n\n const al = log10(a);\n const bl = log10(b);\n\n let t = 0;\n\n if (al < bl) {\n a *= POWERS_OF_TEN[bl - al - 1];\n b /= 10;\n t = -1;\n } else if (al > bl) {\n b *= POWERS_OF_TEN[al - bl - 1];\n a /= 10;\n t = 1;\n }\n\n if (a === b) {\n return t;\n }\n\n return a < b ? -1 : 1;\n }\n\n let aStr = String(a);\n let bStr = String(b);\n\n if (aStr === bStr) {\n return 0;\n }\n\n return aStr < bStr ? -1 : 1;\n}\n\n/**\n * Compute minimum run length for TimSort\n *\n * @param {number} n - The size of the array to sort.\n */\nfunction minRunLength(n) {\n let r = 0;\n\n while (n >= DEFAULT_MIN_MERGE) {\n r |= (n & 1);\n n >>= 1;\n }\n\n return n + r;\n}\n\n/**\n * Counts the length of a monotonically ascending or strictly monotonically\n * descending sequence (run) starting at array[lo] in the range [lo, hi). If\n * the run is descending it is made ascending.\n *\n * @param {array} array - The array to reverse.\n * @param {number} lo - First element in the range (inclusive).\n * @param {number} hi - Last element in the range.\n * @param {function} compare - Item comparison function.\n * @return {number} - The length of the run.\n */\nfunction makeAscendingRun(array, lo, hi, compare) {\n let runHi = lo + 1;\n\n if (runHi === hi) {\n return 1;\n }\n\n // Descending\n if (compare(array[runHi++], array[lo]) < 0) {\n while (runHi < hi && compare(array[runHi], array[runHi - 1]) < 0) {\n runHi++;\n }\n\n reverseRun(array, lo, runHi);\n // Ascending\n } else {\n while (runHi < hi && compare(array[runHi], array[runHi - 1]) >= 0) {\n runHi++;\n }\n }\n\n return runHi - lo;\n}\n\n/**\n * Reverse an array in the range [lo, hi).\n *\n * @param {array} array - The array to reverse.\n * @param {number} lo - First element in the range (inclusive).\n * @param {number} hi - Last element in the range.\n */\nfunction reverseRun(array, lo, hi) {\n hi--;\n\n while (lo < hi) {\n let t = array[lo];\n array[lo++] = array[hi];\n array[hi--] = t;\n }\n}\n\n/**\n * Perform the binary sort of the array in the range [lo, hi) where start is\n * the first element possibly out of order.\n *\n * @param {array} array - The array to sort.\n * @param {number} lo - First element in the range (inclusive).\n * @param {number} hi - Last element in the range.\n * @param {number} start - First element possibly out of order.\n * @param {function} compare - Item comparison function.\n */\nfunction binaryInsertionSort(array, lo, hi, start, compare) {\n if (start === lo) {\n start++;\n }\n\n for (; start < hi; start++) {\n let pivot = array[start];\n\n // Ranges of the array where pivot belongs\n let left = lo;\n let right = start;\n\n /*\n * pivot >= array[i] for i in [lo, left)\n * pivot < array[i] for i in in [right, start)\n */\n while (left < right) {\n let mid = (left + right) >>> 1;\n\n if (compare(pivot, array[mid]) < 0) {\n right = mid;\n } else {\n left = mid + 1;\n }\n }\n\n /*\n * Move elements right to make room for the pivot. If there are elements\n * equal to pivot, left points to the first slot after them: this is also\n * a reason for which TimSort is stable\n */\n let n = start - left;\n // Switch is just an optimization for small arrays\n switch (n) {\n case 3:\n array[left + 3] = array[left + 2];\n /* falls through */\n case 2:\n array[left + 2] = array[left + 1];\n /* falls through */\n case 1:\n array[left + 1] = array[left];\n break;\n default:\n while (n > 0) {\n array[left + n] = array[left + n - 1];\n n--;\n }\n }\n\n array[left] = pivot;\n }\n}\n\n/**\n * Find the position at which to insert a value in a sorted range. If the range\n * contains elements equal to the value the leftmost element index is returned\n * (for stability).\n *\n * @param {number} value - Value to insert.\n * @param {array} array - The array in which to insert value.\n * @param {number} start - First element in the range.\n * @param {number} length - Length of the range.\n * @param {number} hint - The index at which to begin the search.\n * @param {function} compare - Item comparison function.\n * @return {number} - The index where to insert value.\n */\nfunction gallopLeft(value, array, start, length, hint, compare) {\n let lastOffset = 0;\n let maxOffset = 0;\n let offset = 1;\n\n if (compare(value, array[start + hint]) > 0) {\n maxOffset = length - hint;\n\n while (offset < maxOffset && compare(value, array[start + hint + offset]) > 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n\n // Make offsets relative to start\n lastOffset += hint;\n offset += hint;\n\n // value <= array[start + hint]\n } else {\n maxOffset = hint + 1;\n while (offset < maxOffset && compare(value, array[start + hint - offset]) <= 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n\n // Make offsets relative to start\n let tmp = lastOffset;\n lastOffset = hint - offset;\n offset = hint - tmp;\n }\n\n /*\n * Now array[start+lastOffset] < value <= array[start+offset], so value\n * belongs somewhere in the range (start + lastOffset, start + offset]. Do a\n * binary search, with invariant array[start + lastOffset - 1] < value <=\n * array[start + offset].\n */\n lastOffset++;\n while (lastOffset < offset) {\n let m = lastOffset + ((offset - lastOffset) >>> 1);\n\n if (compare(value, array[start + m]) > 0) {\n lastOffset = m + 1;\n\n } else {\n offset = m;\n }\n }\n return offset;\n}\n\n/**\n * Find the position at which to insert a value in a sorted range. If the range\n * contains elements equal to the value the rightmost element index is returned\n * (for stability).\n *\n * @param {number} value - Value to insert.\n * @param {array} array - The array in which to insert value.\n * @param {number} start - First element in the range.\n * @param {number} length - Length of the range.\n * @param {number} hint - The index at which to begin the search.\n * @param {function} compare - Item comparison function.\n * @return {number} - The index where to insert value.\n */\nfunction gallopRight(value, array, start, length, hint, compare) {\n let lastOffset = 0;\n let maxOffset = 0;\n let offset = 1;\n\n if (compare(value, array[start + hint]) < 0) {\n maxOffset = hint + 1;\n\n while (offset < maxOffset && compare(value, array[start + hint - offset]) < 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n\n // Make offsets relative to start\n let tmp = lastOffset;\n lastOffset = hint - offset;\n offset = hint - tmp;\n\n // value >= array[start + hint]\n } else {\n maxOffset = length - hint;\n\n while (offset < maxOffset && compare(value, array[start + hint + offset]) >= 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n\n // Make offsets relative to start\n lastOffset += hint;\n offset += hint;\n }\n\n /*\n * Now array[start+lastOffset] < value <= array[start+offset], so value\n * belongs somewhere in the range (start + lastOffset, start + offset]. Do a\n * binary search, with invariant array[start + lastOffset - 1] < value <=\n * array[start + offset].\n */\n lastOffset++;\n\n while (lastOffset < offset) {\n let m = lastOffset + ((offset - lastOffset) >>> 1);\n\n if (compare(value, array[start + m]) < 0) {\n offset = m;\n\n } else {\n lastOffset = m + 1;\n }\n }\n\n return offset;\n}\n\nclass TimSort {\n\n constructor(array, compare) {\n this.array = array;\n this.compare = compare;\n this.minGallop = DEFAULT_MIN_GALLOPING;\n this.length = array.length;\n\n this.tmpStorageLength = DEFAULT_TMP_STORAGE_LENGTH;\n if (this.length < 2 * DEFAULT_TMP_STORAGE_LENGTH) {\n this.tmpStorageLength = this.length >>> 1;\n }\n\n this.tmp = new Array(this.tmpStorageLength);\n\n this.stackLength =\n (this.length < 120 ? 5 :\n this.length < 1542 ? 10 :\n this.length < 119151 ? 19 : 40);\n\n this.runStart = new Array(this.stackLength);\n this.runLength = new Array(this.stackLength);\n this.stackSize = 0;\n }\n\n /**\n * Push a new run on TimSort's stack.\n *\n * @param {number} runStart - Start index of the run in the original array.\n * @param {number} runLength - Length of the run;\n */\n pushRun(runStart, runLength) {\n this.runStart[this.stackSize] = runStart;\n this.runLength[this.stackSize] = runLength;\n this.stackSize += 1;\n }\n\n /**\n * Merge runs on TimSort's stack so that the following holds for all i:\n * 1) runLength[i - 3] > runLength[i - 2] + runLength[i - 1]\n * 2) runLength[i - 2] > runLength[i - 1]\n */\n mergeRuns() {\n while (this.stackSize > 1) {\n let n = this.stackSize - 2;\n\n if ((n >= 1 &&\n this.runLength[n - 1] <= this.runLength[n] + this.runLength[n + 1]) ||\n (n >= 2 &&\n this.runLength[n - 2] <= this.runLength[n] + this.runLength[n - 1])) {\n\n if (this.runLength[n - 1] < this.runLength[n + 1]) {\n n--;\n }\n\n } else if (this.runLength[n] > this.runLength[n + 1]) {\n break;\n }\n this.mergeAt(n);\n }\n }\n\n /**\n * Merge all runs on TimSort's stack until only one remains.\n */\n forceMergeRuns() {\n while (this.stackSize > 1) {\n let n = this.stackSize - 2;\n\n if (n > 0 && this.runLength[n - 1] < this.runLength[n + 1]) {\n n--;\n }\n\n this.mergeAt(n);\n }\n }\n\n /**\n * Merge the runs on the stack at positions i and i+1. Must be always be called\n * with i=stackSize-2 or i=stackSize-3 (that is, we merge on top of the stack).\n *\n * @param {number} i - Index of the run to merge in TimSort's stack.\n */\n mergeAt(i) {\n let compare = this.compare;\n let array = this.array;\n\n let start1 = this.runStart[i];\n let length1 = this.runLength[i];\n let start2 = this.runStart[i + 1];\n let length2 = this.runLength[i + 1];\n\n this.runLength[i] = length1 + length2;\n\n if (i === this.stackSize - 3) {\n this.runStart[i + 1] = this.runStart[i + 2];\n this.runLength[i + 1] = this.runLength[i + 2];\n }\n\n this.stackSize--;\n\n /*\n * Find where the first element in the second run goes in run1. Previous\n * elements in run1 are already in place\n */\n let k = gallopRight(array[start2], array, start1, length1, 0, compare);\n start1 += k;\n length1 -= k;\n\n if (length1 === 0) {\n return;\n }\n\n /*\n * Find where the last element in the first run goes in run2. Next elements\n * in run2 are already in place\n */\n length2 = gallopLeft(array[start1 + length1 - 1], array, start2, length2, length2 - 1, compare);\n\n if (length2 === 0) {\n return;\n }\n\n /*\n * Merge remaining runs. A tmp array with length = min(length1, length2) is\n * used\n */\n if (length1 <= length2) {\n this.mergeLow(start1, length1, start2, length2);\n\n } else {\n this.mergeHigh(start1, length1, start2, length2);\n }\n }\n\n /**\n * Merge two adjacent runs in a stable way. The runs must be such that the\n * first element of run1 is bigger than the first element in run2 and the\n * last element of run1 is greater than all the elements in run2.\n * The method should be called when run1.length <= run2.length as it uses\n * TimSort temporary array to store run1. Use mergeHigh if run1.length >\n * run2.length.\n *\n * @param {number} start1 - First element in run1.\n * @param {number} length1 - Length of run1.\n * @param {number} start2 - First element in run2.\n * @param {number} length2 - Length of run2.\n */\n mergeLow(start1, length1, start2, length2) {\n\n let compare = this.compare;\n let array = this.array;\n let tmp = this.tmp;\n let i = 0;\n\n for (i = 0; i < length1; i++) {\n tmp[i] = array[start1 + i];\n }\n\n let cursor1 = 0;\n let cursor2 = start2;\n let dest = start1;\n\n array[dest++] = array[cursor2++];\n\n if (--length2 === 0) {\n for (i = 0; i < length1; i++) {\n array[dest + i] = tmp[cursor1 + i];\n }\n return;\n }\n\n if (length1 === 1) {\n for (i = 0; i < length2; i++) {\n array[dest + i] = array[cursor2 + i];\n }\n array[dest + length2] = tmp[cursor1];\n return;\n }\n\n let minGallop = this.minGallop;\n\n while (true) {\n let count1 = 0;\n let count2 = 0;\n let exit = false;\n\n do {\n if (compare(array[cursor2], tmp[cursor1]) < 0) {\n array[dest++] = array[cursor2++];\n count2++;\n count1 = 0;\n\n if (--length2 === 0) {\n exit = true;\n break;\n }\n\n } else {\n array[dest++] = tmp[cursor1++];\n count1++;\n count2 = 0;\n if (--length1 === 1) {\n exit = true;\n break;\n }\n }\n } while ((count1 | count2) < minGallop);\n\n if (exit) {\n break;\n }\n\n do {\n count1 = gallopRight(array[cursor2], tmp, cursor1, length1, 0, compare);\n\n if (count1 !== 0) {\n for (i = 0; i < count1; i++) {\n array[dest + i] = tmp[cursor1 + i];\n }\n\n dest += count1;\n cursor1 += count1;\n length1 -= count1;\n if (length1 <= 1) {\n exit = true;\n break;\n }\n }\n\n array[dest++] = array[cursor2++];\n\n if (--length2 === 0) {\n exit = true;\n break;\n }\n\n count2 = gallopLeft(tmp[cursor1], array, cursor2, length2, 0, compare);\n\n if (count2 !== 0) {\n for (i = 0; i < count2; i++) {\n array[dest + i] = array[cursor2 + i];\n }\n\n dest += count2;\n cursor2 += count2;\n length2 -= count2;\n\n if (length2 === 0) {\n exit = true;\n break;\n }\n }\n array[dest++] = tmp[cursor1++];\n\n if (--length1 === 1) {\n exit = true;\n break;\n }\n\n minGallop--;\n\n } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING);\n\n if (exit) {\n break;\n }\n\n if (minGallop < 0) {\n minGallop = 0;\n }\n\n minGallop += 2;\n }\n\n this.minGallop = minGallop;\n\n if (minGallop < 1) {\n this.minGallop = 1;\n }\n\n if (length1 === 1) {\n for (i = 0; i < length2; i++) {\n array[dest + i] = array[cursor2 + i];\n }\n array[dest + length2] = tmp[cursor1];\n\n } else if (length1 === 0) {\n throw new Error('mergeLow preconditions were not respected');\n\n } else {\n for (i = 0; i < length1; i++) {\n array[dest + i] = tmp[cursor1 + i];\n }\n }\n }\n\n /**\n * Merge two adjacent runs in a stable way. The runs must be such that the\n * first element of run1 is bigger than the first element in run2 and the\n * last element of run1 is greater than all the elements in run2.\n * The method should be called when run1.length > run2.length as it uses\n * TimSort temporary array to store run2. Use mergeLow if run1.length <=\n * run2.length.\n *\n * @param {number} start1 - First element in run1.\n * @param {number} length1 - Length of run1.\n * @param {number} start2 - First element in run2.\n * @param {number} length2 - Length of run2.\n */\n mergeHigh(start1, length1, start2, length2) {\n let compare = this.compare;\n let array = this.array;\n let tmp = this.tmp;\n let i = 0;\n\n for (i = 0; i < length2; i++) {\n tmp[i] = array[start2 + i];\n }\n\n let cursor1 = start1 + length1 - 1;\n let cursor2 = length2 - 1;\n let dest = start2 + length2 - 1;\n let customCursor = 0;\n let customDest = 0;\n\n array[dest--] = array[cursor1--];\n\n if (--length1 === 0) {\n customCursor = dest - (length2 - 1);\n\n for (i = 0; i < length2; i++) {\n array[customCursor + i] = tmp[i];\n }\n\n return;\n }\n\n if (length2 === 1) {\n dest -= length1;\n cursor1 -= length1;\n customDest = dest + 1;\n customCursor = cursor1 + 1;\n\n for (i = length1 - 1; i >= 0; i--) {\n array[customDest + i] = array[customCursor + i];\n }\n\n array[dest] = tmp[cursor2];\n return;\n }\n\n let minGallop = this.minGallop;\n\n while (true) {\n let count1 = 0;\n let count2 = 0;\n let exit = false;\n\n do {\n if (compare(tmp[cursor2], array[cursor1]) < 0) {\n array[dest--] = array[cursor1--];\n count1++;\n count2 = 0;\n if (--length1 === 0) {\n exit = true;\n break;\n }\n\n } else {\n array[dest--] = tmp[cursor2--];\n count2++;\n count1 = 0;\n if (--length2 === 1) {\n exit = true;\n break;\n }\n }\n\n } while ((count1 | count2) < minGallop);\n\n if (exit) {\n break;\n }\n\n do {\n count1 = length1 - gallopRight(tmp[cursor2], array, start1, length1, length1 - 1, compare);\n\n if (count1 !== 0) {\n dest -= count1;\n cursor1 -= count1;\n length1 -= count1;\n customDest = dest + 1;\n customCursor = cursor1 + 1;\n\n for (i = count1 - 1; i >= 0; i--) {\n array[customDest + i] = array[customCursor + i];\n }\n\n if (length1 === 0) {\n exit = true;\n break;\n }\n }\n\n array[dest--] = tmp[cursor2--];\n\n if (--length2 === 1) {\n exit = true;\n break;\n }\n\n count2 = length2 - gallopLeft(array[cursor1], tmp, 0, length2, length2 - 1, compare);\n\n if (count2 !== 0) {\n dest -= count2;\n cursor2 -= count2;\n length2 -= count2;\n customDest = dest + 1;\n customCursor = cursor2 + 1;\n\n for (i = 0; i < count2; i++) {\n array[customDest + i] = tmp[customCursor + i];\n }\n\n if (length2 <= 1) {\n exit = true;\n break;\n }\n }\n\n array[dest--] = array[cursor1--];\n\n if (--length1 === 0) {\n exit = true;\n break;\n }\n\n minGallop--;\n\n } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING);\n\n if (exit) {\n break;\n }\n\n if (minGallop < 0) {\n minGallop = 0;\n }\n\n minGallop += 2;\n }\n\n this.minGallop = minGallop;\n\n if (minGallop < 1) {\n this.minGallop = 1;\n }\n\n if (length2 === 1) {\n dest -= length1;\n cursor1 -= length1;\n customDest = dest + 1;\n customCursor = cursor1 + 1;\n\n for (i = length1 - 1; i >= 0; i--) {\n array[customDest + i] = array[customCursor + i];\n }\n\n array[dest] = tmp[cursor2];\n\n } else if (length2 === 0) {\n throw new Error('mergeHigh preconditions were not respected');\n\n } else {\n customCursor = dest - (length2 - 1);\n for (i = 0; i < length2; i++) {\n array[customCursor + i] = tmp[i];\n }\n }\n }\n}\n\n/**\n * Sort an array in the range [lo, hi) using TimSort.\n *\n * @param {array} array - The array to sort.\n * @param {number} lo - First element in the range (inclusive).\n * @param {number} hi - Last element in the range.\n * @param {function=} compare - Item comparison function. Default is alphabetical.\n */\nexport default function (array, lo, hi, compare) {\n if (!Array.isArray(array)) {\n throw new TypeError('Can only sort arrays');\n }\n\n /*\n * Handle the case where a comparison function is not provided. We do\n * lexicographic sorting\n */\n\n if (lo === undefined) {\n lo = 0;\n }\n\n if (hi === undefined) {\n hi = array.length;\n }\n\n if (compare === undefined) {\n compare = alphabeticalCompare;\n }\n\n let remaining = hi - lo;\n\n // The array is already sorted\n if (remaining < 2) {\n return;\n }\n\n let runLength = 0;\n // On small arrays binary sort can be used directly\n if (remaining < DEFAULT_MIN_MERGE) {\n runLength = makeAscendingRun(array, lo, hi, compare);\n binaryInsertionSort(array, lo, hi, lo + runLength, compare);\n return;\n }\n\n let ts = new TimSort(array, compare);\n\n let minRun = minRunLength(remaining);\n\n do {\n runLength = makeAscendingRun(array, lo, hi, compare);\n if (runLength < minRun) {\n let force = remaining;\n if (force > minRun) {\n force = minRun;\n }\n\n binaryInsertionSort(array, lo, lo + force, lo + runLength, compare);\n runLength = force;\n }\n // Push new run and merge if necessary\n ts.pushRun(lo, runLength);\n ts.mergeRuns();\n\n // Go find next run\n remaining -= runLength;\n lo += runLength;\n\n } while (remaining !== 0);\n\n // Force merging of remaining runs\n ts.forceMergeRuns();\n}","let _bufferPools = Array(8);\nfor (let i = 0; i < 8; ++i) {\n _bufferPools[i] = [];\n}\n\nfunction _nextPow16(v) {\n for (let i = 16; i <= (1 << 28); i *= 16) {\n if (v <= i) {\n return i;\n }\n }\n return 0;\n}\n\nfunction _log2(v) {\n let r, shift;\n r = (v > 0xFFFF) << 4; v >>>= r;\n shift = (v > 0xFF) << 3; v >>>= shift; r |= shift;\n shift = (v > 0xF) << 2; v >>>= shift; r |= shift;\n shift = (v > 0x3) << 1; v >>>= shift; r |= shift;\n return r | (v >> 1);\n}\n\nfunction _alloc(n) {\n let sz = _nextPow16(n);\n let bin = _bufferPools[_log2(sz) >> 2];\n if (bin.length > 0) {\n return bin.pop();\n }\n return new ArrayBuffer(sz);\n}\n\nfunction _free(buf) {\n _bufferPools[_log2(buf.byteLength) >> 2].push(buf);\n}\n\nexport default {\n alloc_int8(n) {\n let result = new Int8Array(_alloc(n), 0, n);\n if (result.length !== n) {\n return result.subarray(0, n);\n }\n\n return result;\n },\n\n alloc_uint8(n) {\n let result = new Uint8Array(_alloc(n), 0, n);\n if (result.length !== n) {\n return result.subarray(0, n);\n }\n\n return result;\n },\n\n alloc_int16(n) {\n let result = new Int16Array(_alloc(2 * n), 0, n);\n if (result.length !== n) {\n return result.subarray(0, n);\n }\n\n return result;\n },\n\n alloc_uint16(n) {\n let result = new Uint16Array(_alloc(2 * n), 0, n);\n if (result.length !== n) {\n return result.subarray(0, n);\n }\n\n return result;\n },\n\n alloc_int32(n) {\n let result = new Int32Array(_alloc(4 * n), 0, n);\n if (result.length !== n) {\n return result.subarray(0, n);\n }\n\n return result;\n },\n\n alloc_uint32(n) {\n let result = new Uint32Array(_alloc(4 * n), 0, n);\n if (result.length !== n) {\n return result.subarray(0, n);\n }\n\n return result;\n },\n\n alloc_float32(n) {\n let result = new Float32Array(_alloc(4 * n), 0, n);\n if (result.length !== n) {\n return result.subarray(0, n);\n }\n\n return result;\n },\n\n alloc_float64(n) {\n let result = new Float64Array(_alloc(8 * n), 0, n);\n if (result.length !== n) {\n return result.subarray(0, n);\n }\n\n return result;\n },\n\n alloc_dataview(n) {\n let result = new DataView(_alloc(n), 0, n);\n if (result.length !== n) {\n return result.subarray(0, n);\n }\n\n return result;\n },\n\n free(array) {\n _free(array.buffer);\n },\n\n reset() {\n let _bufferPools = Array(8);\n for (let i = 0; i < 8; ++i) {\n _bufferPools[i] = [];\n }\n },\n};","/**\n * JS Implementation of MurmurHash2\n * \n * @author Gary Court\n * @see http://github.com/garycourt/murmurhash-js\n * @author Austin Appleby\n * @see http://sites.google.com/site/murmurhash/\n * \n * @param {string} str ASCII only\n * @param {number} seed Positive integer only\n * @return {number} 32-bit positive integer hash\n */\n\nexport default function murmurhash2_32_gc(str, seed) {\n var\n l = str.length,\n h = seed ^ l,\n i = 0,\n k;\n \n while (l >= 4) {\n \tk = \n \t ((str.charCodeAt(i) & 0xff)) |\n \t ((str.charCodeAt(++i) & 0xff) << 8) |\n \t ((str.charCodeAt(++i) & 0xff) << 16) |\n \t ((str.charCodeAt(++i) & 0xff) << 24);\n \n k = (((k & 0xffff) * 0x5bd1e995) + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n k ^= k >>> 24;\n k = (((k & 0xffff) * 0x5bd1e995) + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n\n\th = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16)) ^ k;\n\n l -= 4;\n ++i;\n }\n \n switch (l) {\n case 3: h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n case 2: h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n case 1: h ^= (str.charCodeAt(i) & 0xff);\n h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n }\n\n h ^= h >>> 13;\n h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n h ^= h >>> 15;\n\n return h >>> 0;\n}","// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\nimport { Vec3, Vec4, Mat4 } from '../../core/value-types';\nimport BaseRenderer from '../core/base-renderer';\nimport enums from '../enums';\nimport { RecyclePool } from '../memop';\n\nlet _a16_view = new Float32Array(16);\nlet _a16_view_inv = new Float32Array(16);\nlet _a16_proj = new Float32Array(16);\nlet _a16_viewProj = new Float32Array(16);\nlet _a4_camPos = new Float32Array(4);\n\nlet _a64_shadow_lightViewProj = new Float32Array(64);\nlet _a16_shadow_lightViewProjs = [];\nlet _a4_shadow_info = new Float32Array(4);\n\nlet _camPos = new Vec4(0, 0, 0, 0);\nlet _camFwd = new Vec3(0, 0, 0);\nlet _v3_tmp1 = new Vec3(0, 0, 0);\n\nconst CC_MAX_LIGHTS = 4;\nconst CC_MAX_SHADOW_LIGHTS = 2;\n\nlet _float16_pool = new RecyclePool(() => {\n return new Float32Array(16);\n}, 8);\n\nfunction sortView (a, b) {\n return (a._priority - b._priority);\n}\n\nexport default class ForwardRenderer extends BaseRenderer {\n constructor(device, builtin) {\n super(device, builtin);\n\n this._time = new Float32Array(4);\n\n this._lights = [];\n this._shadowLights = [];\n\n this._numLights = 0;\n\n this._defines = {\n };\n\n this._registerStage('shadowcast', this._shadowStage.bind(this));\n this._registerStage('opaque', this._opaqueStage.bind(this));\n this._registerStage('transparent', this._transparentStage.bind(this));\n }\n\n reset () {\n _float16_pool.reset();\n super.reset();\n }\n\n render (scene, dt) {\n this.reset();\n\n if (!CC_EDITOR) {\n if (dt) {\n this._time[0] += dt;\n this._time[1] = dt;\n this._time[2] ++;\n }\n this._device.setUniform('cc_time', this._time);\n }\n\n this._updateLights(scene);\n\n const canvas = this._device._gl.canvas;\n for (let i = 0; i < scene._cameras.length; ++i) {\n let view = this._requestView();\n let width = canvas.width;\n let height = canvas.height;\n let camera = scene._cameras.data[i];\n camera.extractView(view, width, height);\n }\n\n // render by cameras\n this._viewPools.sort(sortView);\n\n for (let i = 0; i < this._viewPools.length; ++i) {\n let view = this._viewPools.data[i];\n this._render(view, scene);\n }\n }\n\n // direct render a single camera\n renderCamera (camera, scene) {\n this.reset();\n\n this._updateLights(scene);\n\n const canvas = this._device._gl.canvas;\n let width = canvas.width;\n let height = canvas.height;\n\n let view = this._requestView();\n camera.extractView(view, width, height);\n\n // render by cameras\n this._viewPools.sort(sortView);\n\n for (let i = 0; i < this._viewPools.length; ++i) {\n let view = this._viewPools.data[i];\n this._render(view, scene);\n }\n }\n\n _updateLights (scene) {\n this._lights.length = 0;\n this._shadowLights.length = 0;\n\n let lights = scene._lights;\n for (let i = 0; i < lights.length; ++i) {\n let light = lights.data[i];\n light.update(this._device);\n\n if (light.shadowType !== enums.SHADOW_NONE) {\n if (this._shadowLights.length < CC_MAX_SHADOW_LIGHTS) {\n this._shadowLights.splice(0, 0, light);\n }\n let view = this._requestView();\n light.extractView(view, ['shadowcast']);\n\n this._lights.splice(0, 0, light);\n }\n else {\n this._lights.push(light);\n }\n }\n\n this._updateLightDefines();\n this._numLights = lights._count;\n }\n\n _updateLightDefines () {\n let defines = this._defines;\n\n for (let i = 0; i < this._lights.length; ++i) {\n let light = this._lights[i];\n let lightKey = `CC_LIGHT_${i}_TYPE`;\n let shadowKey = `CC_SHADOW_${i}_TYPE`;\n if (defines[lightKey] !== light._type){\n defines[lightKey] = light._type;\n this._definesChanged = true;\n }\n if (defines[shadowKey] !== light._shadowType){\n defines[shadowKey] = light._shadowType;\n this._definesChanged = true;\n }\n }\n\n let newCount = Math.min(CC_MAX_LIGHTS, this._lights.length);\n if (defines.CC_NUM_LIGHTS !== newCount) {\n defines.CC_NUM_LIGHTS = newCount;\n this._definesChanged = true;\n }\n newCount = Math.min(CC_MAX_LIGHTS, this._shadowLights.length);\n if (defines.CC_NUM_SHADOW_LIGHTS !== newCount) {\n defines.CC_NUM_SHADOW_LIGHTS = newCount;\n this._definesChanged = true;\n }\n }\n\n _submitLightsUniforms () {\n let device = this._device;\n\n if (this._lights.length > 0) {\n let positionAndRanges = _float16_pool.add();\n let directions = _float16_pool.add();\n let colors = _float16_pool.add();\n let lightNum = Math.min(CC_MAX_LIGHTS, this._lights.length);\n for (let i = 0; i < lightNum; ++i) {\n let light = this._lights[i];\n let index = i * 4;\n\n colors.set(light._colorUniform, index);\n directions.set(light._directionUniform, index);\n positionAndRanges.set(light._positionUniform, index);\n positionAndRanges[index+3] = light._range;\n\n if (light._type === enums.LIGHT_SPOT) {\n directions[index+3] = light._spotUniform[0];\n colors[index+3] = light._spotUniform[1];\n }\n else {\n directions[index+3] = 0;\n colors[index+3] = 0;\n }\n }\n\n device.setUniform('cc_lightDirection', directions);\n device.setUniform('cc_lightColor', colors);\n device.setUniform('cc_lightPositionAndRange', positionAndRanges);\n }\n }\n\n _submitShadowStageUniforms(view) {\n\n let light = view._shadowLight;\n\n let shadowInfo = _a4_shadow_info;\n shadowInfo[0] = light.shadowMinDepth;\n shadowInfo[1] = light.shadowMaxDepth;\n shadowInfo[2] = light.shadowDepthScale;\n shadowInfo[3] = light.shadowDarkness;\n\n this._device.setUniform('cc_shadow_map_lightViewProjMatrix', Mat4.toArray(_a16_viewProj, view._matViewProj));\n this._device.setUniform('cc_shadow_map_info', shadowInfo);\n this._device.setUniform('cc_shadow_map_bias', light.shadowBias);\n\n this._defines.CC_SHADOW_TYPE = light._shadowType;\n }\n\n _submitOtherStagesUniforms() {\n let shadowInfo = _float16_pool.add();\n\n for (let i = 0; i < this._shadowLights.length; ++i) {\n let light = this._shadowLights[i];\n let view = _a16_shadow_lightViewProjs[i];\n if (!view) {\n view = _a16_shadow_lightViewProjs[i] = new Float32Array(_a64_shadow_lightViewProj.buffer, i * 64, 16);\n }\n Mat4.toArray(view, light.viewProjMatrix);\n\n let index = i*4;\n shadowInfo[index] = light.shadowMinDepth;\n shadowInfo[index+1] = light.shadowMaxDepth;\n shadowInfo[index+2] = light._shadowResolution;\n shadowInfo[index+3] = light.shadowDarkness;\n }\n\n this._device.setUniform(`cc_shadow_lightViewProjMatrix`, _a64_shadow_lightViewProj);\n this._device.setUniform(`cc_shadow_info`, shadowInfo);\n // this._device.setUniform(`cc_frustumEdgeFalloff_${index}`, light.frustumEdgeFalloff);\n }\n\n _sortItems (items) {\n // sort items\n items.sort((a, b) => {\n // if (a.layer !== b.layer) {\n // return a.layer - b.layer;\n // }\n\n if (a.passes.length !== b.passes.length) {\n return a.passes.length - b.passes.length;\n }\n\n return a.sortKey - b.sortKey;\n });\n }\n\n _shadowStage (view, items) {\n // update rendering\n this._submitShadowStageUniforms(view);\n\n // this._sortItems(items);\n\n // draw it\n for (let i = 0; i < items.length; ++i) {\n let item = items.data[i];\n if (item.effect.getDefine('CC_CASTING_SHADOW')) {\n this._draw(item);\n }\n }\n }\n\n _drawItems (view, items) {\n let shadowLights = this._shadowLights;\n if (shadowLights.length === 0 && this._numLights === 0) {\n for (let i = 0; i < items.length; ++i) {\n let item = items.data[i];\n this._draw(item);\n }\n }\n else {\n for (let i = 0; i < items.length; ++i) {\n let item = items.data[i];\n\n for (let shadowIdx = 0; shadowIdx < shadowLights.length; ++shadowIdx) {\n this._device.setTexture('cc_shadow_map_'+shadowIdx, shadowLights[shadowIdx].shadowMap, this._allocTextureUnit());\n }\n\n this._draw(item);\n }\n }\n }\n\n _opaqueStage (view, items) {\n view.getPosition(_camPos);\n\n // update uniforms\n this._device.setUniform('cc_matView', Mat4.toArray(_a16_view, view._matView));\n this._device.setUniform('cc_matViewInv', Mat4.toArray(_a16_view_inv, view._matViewInv));\n this._device.setUniform('cc_matProj', Mat4.toArray(_a16_proj, view._matProj));\n this._device.setUniform('cc_matViewProj', Mat4.toArray(_a16_viewProj, view._matViewProj));\n this._device.setUniform('cc_cameraPos', Vec4.toArray(_a4_camPos, _camPos));\n\n // update rendering\n this._submitLightsUniforms();\n this._submitOtherStagesUniforms();\n\n this._drawItems(view, items);\n }\n\n _transparentStage (view, items) {\n view.getPosition(_camPos);\n view.getForward(_camFwd);\n\n // update uniforms\n this._device.setUniform('cc_matView', Mat4.toArray(_a16_view, view._matView));\n this._device.setUniform('cc_matViewInv', Mat4.toArray(_a16_view_inv, view._matViewInv));\n this._device.setUniform('cc_matProj', Mat4.toArray(_a16_proj, view._matProj));\n this._device.setUniform('cc_matViewProj', Mat4.toArray(_a16_viewProj, view._matViewProj));\n this._device.setUniform('cc_cameraPos', Vec4.toArray(_a4_camPos, _camPos));\n\n this._submitLightsUniforms();\n this._submitOtherStagesUniforms();\n\n // calculate zdist\n for (let i = 0; i < items.length; ++i) {\n let item = items.data[i];\n\n // TODO: we should use mesh center instead!\n item.node.getWorldPosition(_v3_tmp1);\n\n Vec3.sub(_v3_tmp1, _v3_tmp1, _camPos);\n item.sortKey = -Vec3.dot(_v3_tmp1, _camFwd);\n }\n\n this._sortItems(items);\n this._drawItems(view, items);\n }\n}\n","// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\nimport { Vec3, Mat4, lerp, Vec4 } from '../../core/value-types';\nimport { Ray } from '../../core/geom-utils';\nimport enums from '../enums';\n\nlet _tmp_mat4 = new Mat4();\n\nlet _matView = new Mat4();\nlet _matViewInv = new Mat4();\nlet _matProj = new Mat4();\nlet _matViewProj = new Mat4();\nlet _matInvViewProj = new Mat4();\nlet _tmp_v3 = new Vec3();\nlet _tmp2_v3 = new Vec3();\n\n/**\n * A representation of a camera instance\n */\nexport default class Camera {\n _poolID = -1;\n _node = null;\n _projection = enums.PROJ_PERSPECTIVE;\n\n // priority. the smaller one will be rendered first\n _priority = 0;\n\n // clear options\n _color = new Vec4(0.2, 0.3, 0.47, 1);\n _depth = 1;\n _stencil = 0;\n _clearFlags = enums.CLEAR_COLOR | enums.CLEAR_DEPTH;\n _clearModel = null;\n\n // stages & framebuffer\n _stages = [];\n _framebuffer = null;\n\n // projection properties\n _near = 0.01;\n _far = 1000.0;\n _fov = Math.PI / 4.0; // vertical fov\n _rect = {\n x: 0, y: 0, w: 1, h: 1\n };\n\n // ortho properties\n _orthoHeight = 10;\n\n _cullingMask = 0xffffffff;\n\n\n // culling mask\n get cullingMask () {\n return this._cullingMask;\n }\n\n set cullingMask (mask) {\n this._cullingMask = mask;\n }\n\n setCullingMask (mask) {\n this._cullingMask = mask;\n }\n\n /**\n * Get the hosting node of this camera\n * @returns {Node} the hosting node\n */\n getNode () {\n return this._node;\n }\n\n /**\n * Set the hosting node of this camera\n * @param {Node} node the hosting node\n */\n setNode (node) {\n this._node = node;\n }\n\n /**\n * Get the projection type of the camera\n * @returns {number} camera projection type\n */\n getType () {\n return this._projection;\n }\n\n /**\n * Set the projection type of the camera\n * @param {number} type camera projection type\n */\n setType (type) {\n this._projection = type;\n }\n\n /**\n * Get the priority of the camera\n * @returns {number} camera priority\n */\n getPriority () {\n return this._priority;\n }\n\n /**\n * Set the priority of the camera\n * @param {number} priority camera priority\n */\n setPriority (priority) {\n this._priority = priority;\n }\n\n /**\n * Get the orthogonal height of the camera\n * @returns {number} camera height\n */\n getOrthoHeight () {\n return this._orthoHeight;\n }\n\n /**\n * Set the orthogonal height of the camera\n * @param {number} val camera height\n */\n setOrthoHeight (val) {\n this._orthoHeight = val;\n }\n\n /**\n * Get the field of view of the camera\n * @returns {number} camera field of view\n */\n getFov () {\n return this._fov;\n }\n\n /**\n * Set the field of view of the camera\n * @param {number} fov camera field of view\n */\n setFov (fov) {\n this._fov = fov;\n }\n\n /**\n * Get the near clipping distance of the camera\n * @returns {number} camera near clipping distance\n */\n getNear () {\n return this._near;\n }\n\n /**\n * Set the near clipping distance of the camera\n * @param {number} near camera near clipping distance\n */\n setNear (near) {\n this._near = near;\n }\n\n /**\n * Get the far clipping distance of the camera\n * @returns {number} camera far clipping distance\n */\n getFar () {\n return this._far;\n }\n\n /**\n * Set the far clipping distance of the camera\n * @param {number} far camera far clipping distance\n */\n setFar (far) {\n this._far = far;\n }\n\n /**\n * Get the clear color of the camera\n * @returns {Vec4} out the receiving color vector\n */\n getColor (out) {\n return Vec4.copy(out, this._color);\n }\n\n /**\n * Set the clear color of the camera\n * @param {number} r red channel of camera clear color\n * @param {number} g green channel of camera clear color\n * @param {number} b blue channel of camera clear color\n * @param {number} a alpha channel of camera clear color\n */\n setColor (r, g, b, a) {\n Vec4.set(this._color, r, g, b, a);\n }\n\n /**\n * Get the clear depth of the camera\n * @returns {number} camera clear depth\n */\n getDepth () {\n return this._depth;\n }\n\n /**\n * Set the clear depth of the camera\n * @param {number} depth camera clear depth\n */\n setDepth (depth) {\n this._depth = depth;\n }\n\n /**\n * Get the clearing stencil value of the camera\n * @returns {number} camera clearing stencil value\n */\n getStencil () {\n return this._stencil;\n }\n\n /**\n * Set the clearing stencil value of the camera\n * @param {number} stencil camera clearing stencil value\n */\n setStencil (stencil) {\n this._stencil = stencil;\n }\n\n /**\n * Get the clearing flags of the camera\n * @returns {number} camera clearing flags\n */\n getClearFlags () {\n return this._clearFlags;\n }\n\n /**\n * Set the clearing flags of the camera\n * @param {number} flags camera clearing flags\n */\n setClearFlags (flags) {\n this._clearFlags = flags;\n }\n\n /**\n * Get the rect of the camera\n * @param {Object} out the receiving object\n * @returns {Object} camera rect\n */\n getRect (out) {\n out.x = this._rect.x;\n out.y = this._rect.y;\n out.w = this._rect.w;\n out.h = this._rect.h;\n\n return out;\n }\n\n /**\n * Set the rect of the camera\n * @param {Number} x - [0,1]\n * @param {Number} y - [0,1]\n * @param {Number} w - [0,1]\n * @param {Number} h - [0,1]\n */\n setRect (x, y, w, h) {\n this._rect.x = x;\n this._rect.y = y;\n this._rect.w = w;\n this._rect.h = h;\n }\n\n /**\n * Get the stages of the camera\n * @returns {string[]} camera stages\n */\n getStages () {\n return this._stages;\n }\n\n /**\n * Set the stages of the camera\n * @param {string[]} stages camera stages\n */\n setStages (stages) {\n this._stages = stages;\n }\n\n /**\n * Get the framebuffer of the camera\n * @returns {FrameBuffer} camera framebuffer\n */\n getFramebuffer () {\n return this._framebuffer;\n }\n\n /**\n * Set the framebuffer of the camera\n * @param {FrameBuffer} framebuffer camera framebuffer\n */\n setFrameBuffer (framebuffer) {\n this._framebuffer = framebuffer;\n }\n\n _calcMatrices (width, height) {\n // view matrix\n this._node.getWorldRT(_matViewInv);\n Mat4.invert(_matView, _matViewInv);\n\n // projection matrix\n let aspect = width / height;\n if (this._projection === enums.PROJ_PERSPECTIVE) {\n Mat4.perspective(_matProj,\n this._fov,\n aspect,\n this._near,\n this._far\n );\n } else {\n let x = this._orthoHeight * aspect;\n let y = this._orthoHeight;\n Mat4.ortho(_matProj,\n -x, x, -y, y, this._near, this._far\n );\n }\n\n // view-projection\n Mat4.mul(_matViewProj, _matProj, _matView);\n // inv view-projection\n Mat4.invert(_matInvViewProj, _matViewProj);\n }\n\n /**\n * extract a view of this camera\n * @param {View} out the receiving view\n * @param {number} width framebuffer width\n * @param {number} height framebuffer height\n */\n extractView (out, width, height) {\n if (this._framebuffer) {\n width = this._framebuffer._width;\n height = this._framebuffer._height;\n }\n\n // priority\n out._priority = this._priority;\n\n // rect\n out._rect.x = this._rect.x * width;\n out._rect.y = this._rect.y * height;\n out._rect.w = this._rect.w * width;\n out._rect.h = this._rect.h * height;\n\n // clear opts\n this.getColor(out._color);\n out._depth = this._depth;\n out._stencil = this._stencil;\n out._clearFlags = this._clearFlags;\n out._clearModel = this._clearModel;\n\n // stages & framebuffer\n out._stages = this._stages;\n out._framebuffer = this._framebuffer;\n\n this._calcMatrices(width, height);\n Mat4.copy(out._matView, _matView);\n Mat4.copy(out._matViewInv, _matViewInv);\n Mat4.copy(out._matProj, _matProj);\n Mat4.copy(out._matViewProj, _matViewProj);\n Mat4.copy(out._matInvViewProj, _matInvViewProj);\n\n out._cullingMask = this._cullingMask;\n }\n\n /**\n * transform a screen position to a world space ray\n * @param {number} x the screen x position to be transformed\n * @param {number} y the screen y position to be transformed\n * @param {number} width framebuffer width\n * @param {number} height framebuffer height\n * @param {Ray} out the resulting ray\n * @returns {Ray} the resulting ray\n */\n screenPointToRay (x, y, width, height, out) {\n if (!cc.geomUtils) return out;\n\n out = out || new Ray();\n this._calcMatrices(width, height);\n\n let cx = this._rect.x * width;\n let cy = this._rect.y * height;\n let cw = this._rect.w * width;\n let ch = this._rect.h * height;\n\n // far plane intersection\n Vec3.set(_tmp2_v3, (x - cx) / cw * 2 - 1, (y - cy) / ch * 2 - 1, 1);\n Vec3.transformMat4(_tmp2_v3, _tmp2_v3, _matInvViewProj);\n\n if (this._projection === enums.PROJ_PERSPECTIVE) {\n // camera origin\n this._node.getWorldPosition(_tmp_v3);\n } else {\n // near plane intersection\n Vec3.set(_tmp_v3, (x - cx) / cw * 2 - 1, (y - cy) / ch * 2 - 1, -1);\n Vec3.transformMat4(_tmp_v3, _tmp_v3, _matInvViewProj);\n }\n\n return Ray.fromPoints(out, _tmp_v3, _tmp2_v3);\n }\n\n /**\n * transform a screen position to world space\n * @param {Vec3} out the resulting vector\n * @param {Vec3} screenPos the screen position to be transformed\n * @param {number} width framebuffer width\n * @param {number} height framebuffer height\n * @returns {Vec3} the resulting vector\n */\n screenToWorld (out, screenPos, width, height) {\n this._calcMatrices(width, height);\n\n let cx = this._rect.x * width;\n let cy = this._rect.y * height;\n let cw = this._rect.w * width;\n let ch = this._rect.h * height;\n\n if (this._projection === enums.PROJ_PERSPECTIVE) {\n // calculate screen pos in far clip plane\n Vec3.set(out,\n (screenPos.x - cx) / cw * 2 - 1,\n (screenPos.y - cy) / ch * 2 - 1,\n 0.9999\n );\n\n // transform to world\n Vec3.transformMat4(out, out, _matInvViewProj);\n\n // lerp to depth z\n this._node.getWorldPosition(_tmp_v3);\n\n Vec3.lerp(out, _tmp_v3, out, lerp(this._near / this._far, 1, screenPos.z));\n } else {\n Vec3.set(out,\n (screenPos.x - cx) / cw * 2 - 1,\n (screenPos.y - cy) / ch * 2 - 1,\n screenPos.z * 2 - 1\n );\n\n // transform to world\n Vec3.transformMat4(out, out, _matInvViewProj);\n }\n\n return out;\n }\n\n /**\n * transform a world space position to screen space\n * @param {Vec3} out the resulting vector\n * @param {Vec3} worldPos the world space position to be transformed\n * @param {number} width framebuffer width\n * @param {number} height framebuffer height\n * @returns {Vec3} the resulting vector\n */\n worldToScreen (out, worldPos, width, height) {\n this._calcMatrices(width, height);\n\n let cx = this._rect.x * width;\n let cy = this._rect.y * height;\n let cw = this._rect.w * width;\n let ch = this._rect.h * height;\n\n Vec3.transformMat4(out, worldPos, _matViewProj);\n out.x = cx + (out.x + 1) * 0.5 * cw;\n out.y = cy + (out.y + 1) * 0.5 * ch;\n out.z = out.z * 0.5 + 0.5;\n\n return out;\n }\n\n /**\n * transform a world space matrix to screen space\n * @param {Mat4} out the resulting vector\n * @param {Mat4} worldMatrix the world space matrix to be transformed\n * @param {number} width framebuffer width\n * @param {number} height framebuffer height\n * @returns {Mat4} the resulting vector\n */\n worldMatrixToScreen (out, worldMatrix, width, height) {\n this._calcMatrices(width, height);\n\n Mat4.mul(out, _matViewProj, worldMatrix);\n\n let halfWidth = width / 2;\n let halfHeight = height / 2;\n Mat4.identity(_tmp_mat4);\n Mat4.transform(_tmp_mat4, _tmp_mat4, Vec3.set(_tmp_v3, halfWidth, halfHeight, 0));\n Mat4.scale(_tmp_mat4, _tmp_mat4, Vec3.set(_tmp_v3, halfWidth, halfHeight, 1));\n\n Mat4.mul(out, _tmp_mat4, out);\n\n return out;\n }\n}\n","// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n/**\n * A representation of a model\n */\nexport default class Model {\n /**\n * Setup a default empty model\n */\n constructor() {\n this._type = 'default';\n this._poolID = -1;\n this._node = null;\n this._inputAssembler = null;\n this._effect = null;\n this._viewID = -1;\n this._cameraID = -1;\n this._userKey = -1;\n this._castShadow = false;\n this._boundingShape = null;\n }\n\n /**\n * Set the hosting node of this model\n * @param {Node} node the hosting node\n */\n setNode(node) {\n this._node = node;\n }\n\n /**\n * Set the input assembler\n * @param {InputAssembler} ia\n */\n setInputAssembler(ia) {\n this._inputAssembler = ia;\n }\n\n /**\n * Set the model effect\n * @param {?Effect} effect the effect to use\n */\n setEffect(effect) {\n this._effect = effect;\n }\n\n /**\n * Set the user key\n * @param {number} key\n */\n setUserKey(key) {\n this._userKey = key;\n }\n\n /**\n * Extract a drawing item\n * @param {Object} out the receiving item\n */\n extractDrawItem(out) {\n out.model = this;\n out.node = this._node;\n out.ia = this._inputAssembler;\n out.effect = this._effect;\n }\n}\n","// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\nimport { FixedArray } from '../memop';\n\n/**\n * A representation of the scene\n */\nclass Scene {\n /**\n * Setup a default empty scene\n */\n constructor(app) {\n this._lights = new FixedArray(16);\n this._models = new FixedArray(16);\n this._cameras = new FixedArray(16);\n this._debugCamera = null;\n this._app = app;\n\n // NOTE: we don't use pool for views (because it's less changed and it doesn't have poolID)\n this._views = [];\n }\n\n _add(pool, item) {\n if (item._poolID !== -1) {\n return;\n }\n\n pool.push(item);\n item._poolID = pool.length - 1;\n }\n\n _remove(pool, item) {\n if (item._poolID === -1) {\n return;\n }\n\n pool.data[pool.length-1]._poolID = item._poolID;\n pool.fastRemove(item._poolID);\n item._poolID = -1;\n }\n\n /**\n * reset the model viewIDs\n */\n reset() {\n for (let i = 0; i < this._models.length; ++i) {\n let model = this._models.data[i];\n model._viewID = -1;\n }\n }\n\n /**\n * Set the debug camera\n * @param {Camera} cam the debug camera\n */\n setDebugCamera(cam) {\n this._debugCamera = cam;\n }\n\n /**\n * Get the count of registered cameras\n * @returns {number} camera count\n */\n getCameraCount() {\n return this._cameras.length;\n }\n\n /**\n * Get the specified camera\n * @param {number} idx camera index\n * @returns {Camera} the specified camera\n */\n getCamera(idx) {\n return this._cameras.data[idx];\n }\n\n /**\n * register a camera\n * @param {Camera} camera the new camera\n */\n addCamera(camera) {\n this._add(this._cameras, camera);\n }\n\n /**\n * remove a camera\n * @param {Camera} camera the camera to be removed\n */\n removeCamera(camera) {\n this._remove(this._cameras, camera);\n }\n\n /**\n * Get the count of registered model\n * @returns {number} model count\n */\n getModelCount() {\n return this._models.length;\n }\n\n /**\n * Get the specified model\n * @param {number} idx model index\n * @returns {Model} the specified model\n */\n getModel(idx) {\n return this._models.data[idx];\n }\n\n /**\n * register a model\n * @param {Model} model the new model\n */\n addModel(model) {\n this._add(this._models, model);\n }\n\n /**\n * remove a model\n * @param {Model} model the model to be removed\n */\n removeModel(model) {\n this._remove(this._models, model);\n }\n\n /**\n * Get the count of registered light\n * @returns {number} light count\n */\n getLightCount() {\n return this._lights.length;\n }\n\n /**\n * Get the specified light\n * @param {number} idx light index\n * @returns {Light} the specified light\n */\n getLight(idx) {\n return this._lights.data[idx];\n }\n\n /**\n * register a light\n * @param {Light} light the new light\n */\n addLight(light) {\n this._add(this._lights, light);\n }\n\n /**\n * remove a light\n * @param {Light} light the light to be removed\n */\n removeLight(light) {\n this._remove(this._lights, light);\n }\n\n /**\n * register a view\n * @param {View} view the new view\n */\n addView(view) {\n if (this._views.indexOf(view) === -1) {\n this._views.push(view);\n }\n }\n\n /**\n * remove a view\n * @param {View} view the view to be removed\n */\n removeView(view) {\n let idx = this._views.indexOf(view);\n if (idx !== -1) {\n this._views.splice(idx, 1);\n }\n }\n}\n\nexport default Scene;\n","import enums from './enums';\nimport { Vec2, Vec3, Vec4, Color, Mat4 } from '../core/value-types';\nimport Texture2D from '../core/assets/CCTexture2D';\n\nlet gfxTexture2D = null, gfxTextureCube = null;\nif (CC_JSB && CC_NATIVERENDERER) {\n gfxTexture2D = gfx.Texture2D;\n} else {\n gfxTexture2D = require('./gfx/texture-2d');\n}\n\nconst CCObject = cc.Object;\n\nlet ctor2default = {\n [Boolean]: v => v || false,\n [Number]: v => v ? (ArrayBuffer.isView(v) ? v[0] : v) : 0,\n [Vec2]: v => v ? cc.v2(v[0], v[1]) : cc.v2(),\n [Vec3]: v => v ? cc.v3(v[0], v[1], v[2]) : cc.v3(),\n [Vec4]: v => v ? cc.v4(v[0], v[1], v[2], v[3]) : cc.v4(),\n [Color]: v => v ? cc.color(v[0] * 255, v[1] * 255, v[2] * 255,\n (v[3] || 1) * 255) : cc.color(),\n [Mat4]: v => v ? cc.mat4(\n v[0], v[1], v[2], v[3],\n v[4], v[5], v[6], v[7],\n v[8], v[9], v[10], v[11],\n v[12], v[13], v[14], v[15],\n ) : cc.mat4(),\n [Texture2D]: () => null,\n [CCObject]: () => null\n};\n\n\nlet enums2ctor = {\n [enums.PARAM_INT]: Number,\n [enums.PARAM_INT2]: Vec2,\n [enums.PARAM_INT3]: Vec3,\n [enums.PARAM_INT4]: Vec4,\n [enums.PARAM_FLOAT]: Number,\n [enums.PARAM_FLOAT2]: Vec2,\n [enums.PARAM_FLOAT3]: Vec3,\n [enums.PARAM_FLOAT4]: Vec4,\n [enums.PARAM_MAT4]: Mat4,\n [enums.PARAM_TEXTURE_2D]: Texture2D,\n \n color: Color,\n number: Number,\n boolean: Boolean,\n default: CCObject\n};\n\nexport let ctor2enums = {\n [Number]: enums.PARAM_FLOAT,\n [Vec2]: enums.PARAM_FLOAT2,\n [Vec3]: enums.PARAM_FLOAT3,\n [Vec4]: enums.PARAM_FLOAT4,\n [Color]: enums.PARAM_COLOR3,\n [Color]: enums.PARAM_COLOR4,\n [Mat4]: enums.PARAM_MAT4,\n [Texture2D]: enums.PARAM_TEXTURE_2D,\n [gfxTexture2D]: enums.PARAM_TEXTURE_2D,\n};\n\nexport let enums2default = {\n [enums.PARAM_INT]: new Uint32Array([0]),\n [enums.PARAM_INT2]: new Uint32Array([0, 0]),\n [enums.PARAM_INT3]: new Uint32Array([0, 0, 0]),\n [enums.PARAM_INT4]: new Uint32Array([0, 0, 0, 0]),\n [enums.PARAM_FLOAT]: new Float32Array([0]),\n [enums.PARAM_FLOAT2]: new Float32Array([0, 0]),\n [enums.PARAM_FLOAT3]: new Float32Array([0, 0, 0]),\n [enums.PARAM_FLOAT4]: new Float32Array([0, 0, 0, 0]),\n [enums.PARAM_MAT4]: cc.mat4().m,\n [enums.PARAM_TEXTURE_2D]: null,\n \n number: 0,\n boolean: false,\n}\n\nexport let getInstanceType = function (t) {\n return enums2ctor[t] || enums2ctor.default;\n};\nexport let getInstanceCtor = function (t) {\n return ctor2default[getInstanceType(t)];\n};\nexport let getClassName = function (t) {\n return cc.js.getClassName(getInstanceType(t));\n};\n\nlet className2InspectorName = {\n Number: 'number',\n Boolean: 'boolean'\n};\nexport function getInspectorProps (prop) {\n let editor = {\n type: prop.type\n };\n\n Object.assign(editor, prop.editor || prop.inspector);\n \n editor.defines = prop.defines;\n editor.value = getInstanceCtor(editor.type)(prop.value);\n if (prop.range) {\n editor.range = prop.range;\n }\n\n let className = getClassName(editor.type);\n editor.typeName = className2InspectorName[className] || className;\n \n editor.valueCtor = enums2ctor[editor.type];\n\n if (editor.typeName == 'cc.Texture2D') {\n editor.typeName = 'cc.Asset';\n editor.assetType = 'cc.Texture2D';\n }\n\n return editor;\n};","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * Class for tiled map asset handling.\n * @class TiledMapAsset\n * @extends Asset\n *\n */\nlet TiledMapAsset = cc.Class({\n name: 'cc.TiledMapAsset',\n extends: cc.Asset,\n\n properties: {\n tmxXmlStr: '',\n\n /**\n * @property {Texture2D[]} textures\n */\n textures: {\n default: [],\n type: [cc.Texture2D]\n },\n\n /**\n * @property {String[]} textureNames\n */\n textureNames: [cc.String],\n\n /**\n * @property {Size[]} textureSizes\n */\n textureSizes: {\n default: [],\n type: [cc.Size]\n },\n\n /**\n * @property {Texture2D[]} imageLayerTextures\n */\n imageLayerTextures: {\n default: [],\n type: [cc.Texture2D]\n },\n\n /**\n * @property {String[]} imageLayerTextureNames\n */\n imageLayerTextureNames: [cc.String],\n\n tsxFiles: [cc.TextAsset],\n tsxFileNames: [cc.String],\n },\n\n statics: {\n preventDeferredLoadDependents: true\n },\n\n createNode: CC_EDITOR && function (callback) {\n let node = new cc.Node(this.name);\n let tiledMap = node.addComponent(cc.TiledMap);\n tiledMap.tmxAsset = this;\n\n return callback(null, node);\n }\n});\n\ncc.TiledMapAsset = TiledMapAsset;\nmodule.exports = TiledMapAsset;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nrequire('./cocos2d/core');\nrequire('./cocos2d/animation');\n\nif (CC_EDITOR && Editor.isMainProcess) {\n require('./cocos2d/particle/CCParticleAsset');\n require('./cocos2d/tilemap/CCTiledMapAsset');\n}\nelse {\n require('./cocos2d/particle');\n require('./cocos2d/tilemap');\n require('./cocos2d/videoplayer/CCVideoPlayer');\n require('./cocos2d/webview/CCWebView');\n require('./cocos2d/core/components/CCStudioComponent');\n require('./extensions/ccpool/CCNodePool');\n require('./cocos2d/actions');\n}\n\nrequire('./extensions/spine');\nrequire('./extensions/dragonbones');\n\nif (!CC_EDITOR || !Editor.isMainProcess) {\n require('./cocos2d/deprecated');\n}\n","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport Mat4 from '../../cocos2d/core/value-types/mat4';\nconst RenderFlow = require('../../cocos2d/core/renderer/render-flow');\nconst FLAG_TRANSFORM = RenderFlow.FLAG_TRANSFORM;\nconst EmptyHandle = function () {}\nconst ATTACHED_ROOT_NAME = 'ATTACHED_NODE_TREE';\nconst ATTACHED_PRE_NAME = 'ATTACHED_NODE:';\nconst limitNode = function (node) {\n // attached node's world matrix update per frame\n Object.defineProperty(node, '_worldMatDirty', {\n get () { return true; },\n set (value) {/* do nothing */}\n });\n // shield world matrix calculate interface\n node._calculWorldMatrix = EmptyHandle;\n node._mulMat = EmptyHandle;\n};\nlet _tempMat4 = new Mat4();\n\n/**\n * @module sp\n */\n\n/**\n * !#en Attach node tool\n * !#zh 挂点工具类\n * @class sp.AttachUtil\n */\nlet AttachUtil = cc.Class({\n name: 'sp.AttachUtil',\n\n ctor () {\n this._inited = false;\n this._skeleton = null;\n this._skeletonNode = null;\n this._skeletonComp = null;\n\n this._attachedRootNode = null;\n this._attachedNodeArray = [];\n this._boneIndexToNode = {};\n },\n\n init (skeletonComp) {\n this._inited = true;\n this._skeleton = skeletonComp._skeleton;\n this._skeletonNode = skeletonComp.node;\n this._skeletonComp = skeletonComp;\n },\n\n reset () {\n this._inited = false;\n this._skeleton = null;\n this._skeletonNode = null;\n this._skeletonComp = null;\n },\n\n _prepareAttachNode () {\n let armature = this._skeleton;\n if (!armature) {\n return;\n }\n\n let rootNode = this._skeletonNode.getChildByName(ATTACHED_ROOT_NAME);\n if (!rootNode || !rootNode.isValid) {\n rootNode = new cc.Node(ATTACHED_ROOT_NAME);\n limitNode(rootNode);\n this._skeletonNode.addChild(rootNode);\n }\n\n let isCached = this._skeletonComp.isAnimationCached();\n if (isCached && this._skeletonComp._frameCache) {\n this._skeletonComp._frameCache.enableCacheAttachedInfo();\n }\n\n this._attachedRootNode = rootNode;\n return rootNode;\n },\n\n _buildBoneAttachedNode (bone, boneIndex) {\n let boneNodeName = ATTACHED_PRE_NAME + bone.data.name;\n let boneNode = new cc.Node(boneNodeName);\n this._buildBoneRelation(boneNode, bone, boneIndex);\n return boneNode;\n },\n\n _buildBoneRelation (boneNode, bone, boneIndex) {\n limitNode(boneNode);\n boneNode._bone = bone;\n boneNode._boneIndex = boneIndex;\n this._attachedNodeArray.push(boneNode);\n this._boneIndexToNode[boneIndex] = boneNode;\n },\n\n /**\n * !#en Gets attached root node.\n * !#zh 获取挂接节点树的根节点\n * @method getAttachedRootNode\n * @return {cc.Node}\n */\n getAttachedRootNode () {\n return this._attachedRootNode;\n },\n\n /**\n * !#en Gets attached node which you want.\n * !#zh 获得对应的挂点\n * @method getAttachedNodes\n * @param {String} boneName\n * @return {Node[]}\n */\n getAttachedNodes (boneName) {\n let nodeArray = this._attachedNodeArray;\n let res = [];\n if (!this._inited) return res;\n for (let i = 0, n = nodeArray.length; i < n; i++) {\n let boneNode = nodeArray[i];\n if (!boneNode || !boneNode.isValid) continue;\n if (boneNode.name === ATTACHED_PRE_NAME + boneName) {\n res.push(boneNode);\n }\n }\n return res;\n },\n\n _rebuildNodeArray () {\n let findMap = this._boneIndexToNode = {};\n let oldNodeArray = this._attachedNodeArray;\n let nodeArray = this._attachedNodeArray = [];\n for (let i = 0, n = oldNodeArray.length; i < n; i++) {\n let boneNode = oldNodeArray[i];\n if (!boneNode || !boneNode.isValid || boneNode._toRemove) continue;\n nodeArray.push(boneNode);\n findMap[boneNode._boneIndex] = boneNode;\n }\n },\n\n _sortNodeArray () {\n let nodeArray = this._attachedNodeArray;\n nodeArray.sort(function (a, b) {\n return a._boneIndex < b._boneIndex? -1 : 1;\n });\n },\n\n _getNodeByBoneIndex (boneIndex) {\n let findMap = this._boneIndexToNode;\n let boneNode = findMap[boneIndex];\n if (!boneNode || !boneNode.isValid) return null;\n return boneNode;\n },\n\n /**\n * !#en Destroy attached node which you want.\n * !#zh 销毁对应的挂点\n * @method destroyAttachedNodes\n * @param {String} boneName\n */\n destroyAttachedNodes (boneName) {\n if (!this._inited) return;\n\n let nodeArray = this._attachedNodeArray;\n let markTree = function (rootNode) {\n let children = rootNode.children;\n for (let i = 0, n = children.length; i < n; i++) {\n let c = children[i];\n if (c) markTree(c);\n }\n rootNode._toRemove = true;\n }\n\n for (let i = 0, n = nodeArray.length; i < n; i++) {\n let boneNode = nodeArray[i];\n if (!boneNode || !boneNode.isValid) continue;\n\n let delName = boneNode.name.split(ATTACHED_PRE_NAME)[1];\n if (delName === boneName) {\n markTree(boneNode);\n boneNode.removeFromParent(true);\n boneNode.destroy();\n nodeArray[i] = null;\n }\n }\n\n this._rebuildNodeArray();\n },\n\n /**\n * !#en Traverse all bones to generate the minimum node tree containing the given bone names, NOTE that make sure the skeleton has initialized before calling this interface.\n * !#zh 遍历所有插槽,生成包含所有给定插槽名称的最小节点树,注意,调用该接口前请确保骨骼动画已经初始化好。\n * @method generateAttachedNodes\n * @param {String} boneName\n * @return {Node[]} attached node array\n */\n generateAttachedNodes (boneName) {\n let targetNodes = [];\n if (!this._inited) return targetNodes;\n\n let rootNode = this._prepareAttachNode();\n if (!rootNode) return targetNodes;\n\n let res = [];\n let bones = this._skeleton.bones;\n for (let i = 0, n = bones.length; i < n; i++) {\n let bone = bones[i];\n let boneData = bone.data;\n if (boneData.name == boneName) {\n res.push(bone);\n }\n }\n\n let buildBoneTree = function (bone) {\n if (!bone) return;\n let boneData = bone.data;\n let boneNode = this._getNodeByBoneIndex(boneData.index);\n if (boneNode) return boneNode;\n\n boneNode = this._buildBoneAttachedNode(bone, boneData.index);\n\n let parentBoneNode = buildBoneTree(bone.parent) || rootNode;\n boneNode.parent = parentBoneNode;\n\n return boneNode;\n }.bind(this);\n\n for (let i = 0, n = res.length; i < n; i++) {\n let targetNode = buildBoneTree(res[i]);\n targetNodes.push(targetNode);\n }\n\n this._sortNodeArray();\n return targetNodes;\n },\n\n /**\n * !#en Destroy all attached node.\n * !#zh 销毁所有挂点\n * @method destroyAllAttachedNodes\n */\n destroyAllAttachedNodes () {\n this._attachedRootNode = null;\n this._attachedNodeArray.length = 0;\n this._boneIndexToNode = {};\n if (!this._inited) return;\n\n let rootNode = this._skeletonNode.getChildByName(ATTACHED_ROOT_NAME);\n if (rootNode) {\n rootNode.removeFromParent(true);\n rootNode.destroy();\n rootNode = null;\n }\n },\n\n /**\n * !#en Traverse all bones to generate a tree containing all bones nodes, NOTE that make sure the skeleton has initialized before calling this interface.\n * !#zh 遍历所有插槽,生成包含所有插槽的节点树,注意,调用该接口前请确保骨骼动画已经初始化好。\n * @method generateAllAttachedNodes\n * @return {cc.Node} root node\n */\n generateAllAttachedNodes () {\n if (!this._inited) return;\n\n // clear all records\n this._boneIndexToNode = {};\n this._attachedNodeArray.length = 0;\n \n let rootNode = this._prepareAttachNode();\n if (!rootNode) return;\n\n let bones = this._skeleton.bones;\n for (let i = 0, n = bones.length; i < n; i++) {\n let bone = bones[i];\n let boneData = bone.data;\n let parentNode = null;\n if (bone.parent) {\n let parentIndex = bone.parent.data.index;\n parentNode = this._boneIndexToNode[parentIndex];\n } else {\n parentNode = rootNode;\n }\n\n if (parentNode) {\n let boneNode = parentNode.getChildByName(ATTACHED_PRE_NAME + boneData.name);\n if (!boneNode || !boneNode.isValid) {\n boneNode = this._buildBoneAttachedNode(bone, boneData.index);\n parentNode.addChild(boneNode);\n } else {\n this._buildBoneRelation(boneNode, bone, boneData.index);\n }\n }\n }\n return rootNode;\n },\n\n _hasAttachedNode () {\n if (!this._inited) return false;\n\n let attachedRootNode = this._skeletonNode.getChildByName(ATTACHED_ROOT_NAME);\n return !!attachedRootNode;\n },\n\n _associateAttachedNode () {\n if (!this._inited) return;\n\n let rootNode = this._skeletonNode.getChildByName(ATTACHED_ROOT_NAME);\n if (!rootNode || !rootNode.isValid) return;\n this._attachedRootNode = rootNode;\n\n // clear all records\n this._boneIndexToNode = {};\n let nodeArray = this._attachedNodeArray;\n nodeArray.length = 0;\n limitNode(rootNode);\n\n if (!CC_NATIVERENDERER) {\n let isCached = this._skeletonComp.isAnimationCached();\n if (isCached && this._skeletonComp._frameCache) {\n this._skeletonComp._frameCache.enableCacheAttachedInfo();\n }\n }\n\n let bones = this._skeleton.bones;\n for (let i = 0, n = bones.length; i < n; i++) {\n let bone = bones[i];\n let boneData = bone.data;\n let parentNode = null;\n if (bone.parent) {\n let parentIndex = bone.parent.data.index;\n parentNode = this._boneIndexToNode[parentIndex];\n } else {\n parentNode = rootNode;\n }\n\n if (parentNode) {\n let boneNode = parentNode.getChildByName(ATTACHED_PRE_NAME + boneData.name);\n if (boneNode && boneNode.isValid) {\n this._buildBoneRelation(boneNode, bone, boneData.index);\n }\n }\n }\n },\n\n _syncAttachedNode () {\n if (!this._inited) return;\n\n let rootNode = this._attachedRootNode;\n let nodeArray = this._attachedNodeArray;\n if (!rootNode || !rootNode.isValid) {\n this._attachedRootNode = null;\n nodeArray.length = 0;\n return;\n }\n \n let rootMatrix = this._skeletonNode._worldMatrix;\n Mat4.copy(rootNode._worldMatrix, rootMatrix);\n rootNode._renderFlag &= ~FLAG_TRANSFORM;\n\n let boneInfos = null;\n let isCached = this._skeletonComp.isAnimationCached();\n if (isCached) {\n boneInfos = this._skeletonComp._curFrame && this._skeletonComp._curFrame.boneInfos;\n } else {\n boneInfos = this._skeleton.bones;\n }\n\n if (!boneInfos) return;\n\n let mulMat = this._skeletonNode._mulMat;\n let matrixHandle = function (nodeMat, parentMat, bone) {\n let tm = _tempMat4.m;\n tm[0] = bone.a;\n tm[1] = bone.c;\n tm[4] = bone.b;\n tm[5] = bone.d;\n tm[12] = bone.worldX;\n tm[13] = bone.worldY;\n mulMat(nodeMat, parentMat, _tempMat4);\n };\n\n let nodeArrayDirty = false;\n for (let i = 0, n = nodeArray.length; i < n; i++) {\n let boneNode = nodeArray[i];\n // Node has been destroy\n if (!boneNode || !boneNode.isValid) { \n nodeArray[i] = null;\n nodeArrayDirty = true;\n continue;\n }\n let bone = boneInfos[boneNode._boneIndex];\n // Bone has been destroy\n if (!bone) {\n boneNode.removeFromParent(true);\n boneNode.destroy();\n nodeArray[i] = null;\n nodeArrayDirty = true;\n continue;\n }\n matrixHandle(boneNode._worldMatrix, rootNode._worldMatrix, bone);\n boneNode._renderFlag &= ~FLAG_TRANSFORM;\n }\n if (nodeArrayDirty) {\n this._rebuildNodeArray();\n }\n },\n});\n\nmodule.exports = sp.AttachUtil = AttachUtil;","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst TrackEntryListeners = require('./track-entry-listeners');\nconst RenderComponent = require('../../cocos2d/core/components/CCRenderComponent');\nconst spine = require('./lib/spine');\nconst Graphics = require('../../cocos2d/core/graphics/graphics');\nconst RenderFlow = require('../../cocos2d/core/renderer/render-flow');\nconst FLAG_POST_RENDER = RenderFlow.FLAG_POST_RENDER;\n\nlet SkeletonCache = require('./skeleton-cache');\nlet AttachUtil = require('./AttachUtil');\n\n/**\n * @module sp\n */\nlet DefaultSkinsEnum = cc.Enum({ 'default': -1 });\nlet DefaultAnimsEnum = cc.Enum({ '': 0 });\n\n/**\n * !#en Enum for animation cache mode type.\n * !#zh Spine动画缓存类型\n * @enum Skeleton.AnimationCacheMode\n */\nlet AnimationCacheMode = cc.Enum({\n /**\n * !#en The realtime mode.\n * !#zh 实时计算模式。\n * @property {Number} REALTIME\n */\n REALTIME: 0,\n /**\n * !#en The shared cache mode.\n * !#zh 共享缓存模式。\n * @property {Number} SHARED_CACHE\n */\n SHARED_CACHE: 1,\n /**\n * !#en The private cache mode.\n * !#zh 私有缓存模式。\n * @property {Number} PRIVATE_CACHE\n */\n PRIVATE_CACHE: 2 \n});\n\nfunction setEnumAttr (obj, propName, enumDef) {\n cc.Class.Attr.setClassAttr(obj, propName, 'type', 'Enum');\n cc.Class.Attr.setClassAttr(obj, propName, 'enumList', cc.Enum.getList(enumDef));\n}\n\n/**\n * !#en\n * The skeleton of Spine
\n *
\n * (Skeleton has a reference to a SkeletonData and stores the state for skeleton instance,\n * which consists of the current pose's bone SRT, slot colors, and which slot attachments are visible.
\n * Multiple skeletons can use the same SkeletonData which includes all animations, skins, and attachments.)
\n * !#zh\n * Spine 骨骼动画
\n *
\n * (Skeleton 具有对骨骼数据的引用并且存储了骨骼实例的状态,\n * 它由当前的骨骼动作,slot 颜色,和可见的 slot attachments 组成。
\n * 多个 Skeleton 可以使用相同的骨骼数据,其中包括所有的动画,皮肤和 attachments。\n *\n * @class Skeleton\n * @extends RenderComponent\n */\nsp.Skeleton = cc.Class({\n name: 'sp.Skeleton',\n extends: RenderComponent,\n editor: CC_EDITOR && {\n menu: 'i18n:MAIN_MENU.component.renderers/Spine Skeleton',\n help: 'app://docs/html/components/spine.html',\n inspector: 'packages://inspector/inspectors/comps/skeleton2d.js',\n },\n\n statics: {\n AnimationCacheMode: AnimationCacheMode,\n },\n\n properties: {\n /**\n * !#en The skeletal animation is paused?\n * !#zh 该骨骼动画是否暂停。\n * @property paused\n * @type {Boolean}\n * @readOnly\n * @default false\n */\n paused: {\n default: false,\n visible: false\n },\n\n /**\n * !#en\n * The skeleton data contains the skeleton information (bind pose bones, slots, draw order,\n * attachments, skins, etc) and animations but does not hold any state.
\n * Multiple skeletons can share the same skeleton data.\n * !#zh\n * 骨骼数据包含了骨骼信息(绑定骨骼动作,slots,渲染顺序,\n * attachments,皮肤等等)和动画但不持有任何状态。
\n * 多个 Skeleton 可以共用相同的骨骼数据。\n * @property {sp.SkeletonData} skeletonData\n */\n skeletonData: {\n default: null,\n type: sp.SkeletonData,\n notify () {\n this.defaultSkin = '';\n this.defaultAnimation = '';\n if (CC_EDITOR) {\n this._refreshInspector();\n }\n this._updateSkeletonData();\n },\n tooltip: CC_DEV && 'i18n:COMPONENT.skeleton.skeleton_data'\n },\n\n // 由于 spine 的 skin 是无法二次替换的,所以只能设置默认的 skin\n /**\n * !#en The name of default skin.\n * !#zh 默认的皮肤名称。\n * @property {String} defaultSkin\n */\n defaultSkin: {\n default: '',\n visible: false\n },\n\n /**\n * !#en The name of default animation.\n * !#zh 默认的动画名称。\n * @property {String} defaultAnimation\n */\n defaultAnimation: {\n default: '',\n visible: false\n },\n\n /**\n * !#en The name of current playing animation.\n * !#zh 当前播放的动画名称。\n * @property {String} animation\n */\n animation: {\n get () {\n if (this.isAnimationCached()) {\n return this._animationName;\n } else {\n var entry = this.getCurrent(0);\n return (entry && entry.animation.name) || \"\";\n }\n },\n set (value) {\n this.defaultAnimation = value;\n if (value) {\n this.setAnimation(0, value, this.loop);\n }\n else if (!this.isAnimationCached()) {\n this.clearTrack(0);\n this.setToSetupPose();\n }\n },\n visible: false\n },\n\n /**\n * @property {Number} _defaultSkinIndex\n */\n _defaultSkinIndex: {\n get () {\n if (this.skeletonData) {\n var skinsEnum = this.skeletonData.getSkinsEnum();\n if(skinsEnum) {\n if(this.defaultSkin === \"\") {\n if(skinsEnum.hasOwnProperty(0)) {\n this._defaultSkinIndex = 0;\n return 0;\n }\n } else {\n var skinIndex = skinsEnum[this.defaultSkin];\n if (skinIndex !== undefined) {\n return skinIndex;\n }\n }\n }\n }\n return 0;\n },\n set (value) {\n var skinsEnum;\n if (this.skeletonData) {\n skinsEnum = this.skeletonData.getSkinsEnum();\n }\n if ( !skinsEnum ) {\n return cc.errorID('',\n this.name);\n }\n var skinName = skinsEnum[value];\n if (skinName !== undefined) {\n this.defaultSkin = skinName;\n this.setSkin(this.defaultSkin);\n if (CC_EDITOR && !cc.engine.isPlaying) {\n this._refreshInspector();\n }\n }\n else {\n cc.errorID(7501, this.name);\n }\n },\n type: DefaultSkinsEnum,\n visible: true,\n animatable: false,\n displayName: \"Default Skin\",\n tooltip: CC_DEV && 'i18n:COMPONENT.skeleton.default_skin'\n },\n\n // value of 0 represents no animation\n _animationIndex: {\n get () {\n var animationName = (!CC_EDITOR || cc.engine.isPlaying) ? this.animation : this.defaultAnimation;\n if (this.skeletonData && animationName) {\n var animsEnum = this.skeletonData.getAnimsEnum();\n if (animsEnum) {\n var animIndex = animsEnum[animationName];\n if (animIndex !== undefined) {\n return animIndex;\n }\n }\n }\n return 0;\n },\n set (value) {\n if (value === 0) {\n this.animation = '';\n return;\n }\n var animsEnum;\n if (this.skeletonData) {\n animsEnum = this.skeletonData.getAnimsEnum();\n }\n if ( !animsEnum ) {\n return cc.errorID(7502, this.name);\n }\n var animName = animsEnum[value];\n if (animName !== undefined) {\n this.animation = animName;\n }\n else {\n cc.errorID(7503, this.name);\n }\n\n },\n type: DefaultAnimsEnum,\n visible: true,\n animatable: false,\n displayName: 'Animation',\n tooltip: CC_DEV && 'i18n:COMPONENT.skeleton.animation'\n },\n\n // Record pre cache mode.\n _preCacheMode: -1,\n _cacheMode: AnimationCacheMode.REALTIME,\n _defaultCacheMode: {\n default: 0,\n type: AnimationCacheMode,\n notify () {\n this.setAnimationCacheMode(this._defaultCacheMode);\n },\n editorOnly: true,\n visible: true,\n animatable: false,\n displayName: \"Animation Cache Mode\",\n tooltip: CC_DEV && 'i18n:COMPONENT.skeleton.animation_cache_mode'\n },\n\n /**\n * !#en TODO\n * !#zh 是否循环播放当前骨骼动画。\n * @property {Boolean} loop\n * @default true\n */\n loop: {\n default: true,\n tooltip: CC_DEV && 'i18n:COMPONENT.skeleton.loop'\n },\n\n /**\n * !#en Indicates whether to enable premultiplied alpha.\n * You should disable this option when image's transparent area appears to have opaque pixels,\n * or enable this option when image's half transparent area appears to be darken.\n * !#zh 是否启用贴图预乘。\n * 当图片的透明区域出现色块时需要关闭该选项,当图片的半透明区域颜色变黑时需要启用该选项。\n * @property {Boolean} premultipliedAlpha\n * @default true\n */\n premultipliedAlpha: {\n default: true,\n tooltip: CC_DEV && 'i18n:COMPONENT.skeleton.premultipliedAlpha'\n },\n\n /**\n * !#en The time scale of this skeleton.\n * !#zh 当前骨骼中所有动画的时间缩放率。\n * @property {Number} timeScale\n * @default 1\n */\n timeScale: {\n default: 1,\n tooltip: CC_DEV && 'i18n:COMPONENT.skeleton.time_scale'\n },\n\n /**\n * !#en Indicates whether open debug slots.\n * !#zh 是否显示 slot 的 debug 信息。\n * @property {Boolean} debugSlots\n * @default false\n */\n debugSlots: {\n default: false,\n editorOnly: true,\n tooltip: CC_DEV && 'i18n:COMPONENT.skeleton.debug_slots',\n notify () {\n this._updateDebugDraw();\n }\n },\n\n /**\n * !#en Indicates whether open debug bones.\n * !#zh 是否显示 bone 的 debug 信息。\n * @property {Boolean} debugBones\n * @default false\n */\n debugBones: {\n default: false,\n editorOnly: true,\n tooltip: CC_DEV && 'i18n:COMPONENT.skeleton.debug_bones',\n notify () {\n this._updateDebugDraw();\n }\n },\n\n /**\n * !#en Indicates whether open debug mesh.\n * !#zh 是否显示 mesh 的 debug 信息。\n * @property {Boolean} debugMesh\n * @default false\n */\n debugMesh: {\n default: false,\n editorOnly: true,\n tooltip: CC_DEV && 'i18n:COMPONENT.skeleton.debug_mesh',\n notify () {\n this._updateDebugDraw();\n }\n },\n\n /**\n * !#en Enabled two color tint.\n * !#zh 是否启用染色效果。\n * @property {Boolean} useTint\n * @default false\n */\n useTint: {\n default: false,\n tooltip: CC_DEV && 'i18n:COMPONENT.skeleton.use_tint',\n notify () {\n this._updateUseTint();\n }\n },\n\n /**\n * !#en Enabled batch model, if skeleton is complex, do not enable batch, or will lower performance.\n * !#zh 开启合批,如果渲染大量相同纹理,且结构简单的骨骼动画,开启合批可以降低drawcall,否则请不要开启,cpu消耗会上升。\n * @property {Boolean} enableBatch\n * @default false\n */\n enableBatch: {\n default: false,\n notify () {\n this._updateBatch();\n },\n tooltip: CC_DEV && 'i18n:COMPONENT.skeleton.enabled_batch'\n },\n\n // Below properties will effect when cache mode is SHARED_CACHE or PRIVATE_CACHE.\n // accumulate time\n _accTime: 0,\n // Play times counter\n _playCount: 0,\n // Frame cache\n _frameCache: null,\n // Cur frame\n _curFrame: null,\n // Skeleton cache\n _skeletonCache : null,\n // Aimation name\n _animationName : \"\",\n // Animation queue\n _animationQueue : [],\n // Head animation info of \n _headAniInfo : null,\n // Play times\n _playTimes : 0,\n // Is animation complete.\n _isAniComplete: true,\n \n autoSwitchMaterial: {\n type: RenderComponent.EnableType,\n default: RenderComponent.EnableType.GLOBAL,\n notify(oldValue) {\n if (this.autoSwitchMaterial === oldValue) return;\n this.setVertsDirty();\n },\n },\n allowDynamicAtlas: {\n type: RenderComponent.EnableType,\n default: RenderComponent.EnableType.GLOBAL,\n notify(oldValue) {\n if (this.allowDynamicAtlas === oldValue) return;\n this.setVertsDirty();\n },\n },\n },\n\n // CONSTRUCTOR\n ctor () {\n this._effectDelegate = null;\n this._skeleton = null;\n this._rootBone = null;\n this._listener = null;\n this._materialCache = {};\n this._debugRenderer = null;\n this._startSlotIndex = -1;\n this._endSlotIndex = -1;\n this._startEntry = {animation : {name : \"\"}, trackIndex : 0};\n this._endEntry = {animation : {name : \"\"}, trackIndex : 0};\n this.attachUtil = new AttachUtil();\n this._dataDirty = true;\n },\n\n setVertsDirty() {\n this.invalidAnimationCache();\n this._dataDirty = true;\n this._materialCache = {};\n this._super();\n },\n\n // override base class _getDefaultMaterial to modify default material\n _getDefaultMaterial () {\n return cc.Material.getBuiltinMaterial('2d-spine');\n },\n\n // override base class _updateMaterial to set define value and clear material cache\n _updateMaterial () {\n let useTint = this.useTint || (this.isAnimationCached() && !CC_NATIVERENDERER);\n let baseMaterial = this.getMaterial(0);\n if (baseMaterial) {\n const isMultiSupport = baseMaterial.material.isMultiSupport();\n if (!isMultiSupport) {\n baseMaterial.define('USE_TINT', useTint);\n baseMaterial.define('CC_USE_MODEL', !this.enableBatch);\n }\n \n let srcBlendFactor = this.premultipliedAlpha ? cc.gfx.BLEND_ONE : cc.gfx.BLEND_SRC_ALPHA;\n let dstBlendFactor = cc.gfx.BLEND_ONE_MINUS_SRC_ALPHA;\n\n baseMaterial.setBlend(\n true,\n cc.gfx.BLEND_FUNC_ADD,\n srcBlendFactor, srcBlendFactor,\n cc.gfx.BLEND_FUNC_ADD,\n dstBlendFactor, dstBlendFactor\n );\n\n if (isMultiSupport) {\n if (this.useTint) this.useTint = false;\n if (!this.enableBatch) this.enableBatch = true;\n }\n }\n this._materialCache = {};\n },\n\n // override base class disableRender to clear post render flag\n disableRender () {\n this._super();\n this.node._renderFlag &= ~FLAG_POST_RENDER;\n },\n\n // override base class disableRender to add post render flag\n markForRender (enable) {\n this._super(enable);\n if (enable) {\n this.node._renderFlag |= FLAG_POST_RENDER;\n } else {\n this.node._renderFlag &= ~FLAG_POST_RENDER;\n }\n },\n\n // if change use tint mode, just clear material cache\n _updateUseTint () {\n let baseMaterial = this.getMaterial(0);\n if (baseMaterial) {\n let useTint = this.useTint || (this.isAnimationCached() && !CC_NATIVERENDERER);\n if (!baseMaterial.material.isMultiSupport()) {\n baseMaterial.define('USE_TINT', useTint);\n } else {\n if (this.useTint) this.useTint = false;\n }\n }\n this._materialCache = {};\n },\n\n // if change use batch mode, just clear material cache\n _updateBatch () {\n let baseMaterial = this.getMaterial(0);\n if (baseMaterial) {\n if (!baseMaterial.material.isMultiSupport()) {\n baseMaterial.define('CC_USE_MODEL', !this.enableBatch);\n } else {\n if (!this.enableBatch) this.enableBatch = true;\n }\n }\n this._materialCache = {};\n },\n\n _validateRender () {\n let skeletonData = this.skeletonData;\n if (!skeletonData || !skeletonData.isTexturesLoaded()) {\n this.disableRender();\n return;\n }\n this._super();\n },\n\n /**\n * !#en\n * Sets runtime skeleton data to sp.Skeleton.
\n * This method is different from the `skeletonData` property. This method is passed in the raw data provided by the Spine runtime, and the skeletonData type is the asset type provided by Creator.\n * !#zh\n * 设置底层运行时用到的 SkeletonData。
\n * 这个接口有别于 `skeletonData` 属性,这个接口传入的是 Spine runtime 提供的原始数据,而 skeletonData 的类型是 Creator 提供的资源类型。\n * @method setSkeletonData\n * @param {sp.spine.SkeletonData} skeletonData\n */\n setSkeletonData (skeletonData) {\n if (skeletonData.width != null && skeletonData.height != null) {\n this.node.setContentSize(skeletonData.width, skeletonData.height);\n }\n\n if (!CC_EDITOR) {\n if (this._cacheMode === AnimationCacheMode.SHARED_CACHE) {\n this._skeletonCache = SkeletonCache.sharedCache;\n } else if (this._cacheMode === AnimationCacheMode.PRIVATE_CACHE) {\n this._skeletonCache = new SkeletonCache;\n this._skeletonCache.enablePrivateMode();\n }\n }\n\n if (this.isAnimationCached()) {\n if (this.debugBones || this.debugSlots) {\n cc.warn(\"Debug bones or slots is invalid in cached mode\");\n }\n let skeletonInfo = this._skeletonCache.getSkeletonCache(this.skeletonData._uuid, skeletonData);\n this._skeleton = skeletonInfo.skeleton;\n this._clipper = skeletonInfo.clipper;\n this._rootBone = this._skeleton.getRootBone();\n } else {\n this._skeleton = new spine.Skeleton(skeletonData);\n this._clipper = new spine.SkeletonClipping();\n this._rootBone = this._skeleton.getRootBone();\n }\n\n this.markForRender(true);\n },\n\n /**\n * !#en Sets slots visible range.\n * !#zh 设置骨骼插槽可视范围。\n * @method setSlotsRange\n * @param {Number} startSlotIndex\n * @param {Number} endSlotIndex\n */\n setSlotsRange (startSlotIndex, endSlotIndex) {\n if (this.isAnimationCached()) {\n cc.warn(\"Slots visible range can not be modified in cached mode.\");\n } else {\n this._startSlotIndex = startSlotIndex;\n this._endSlotIndex = endSlotIndex;\n }\n },\n\n /**\n * !#en Sets animation state data.
\n * The parameter type is {{#crossLinkModule \"sp.spine\"}}sp.spine{{/crossLinkModule}}.AnimationStateData.\n * !#zh 设置动画状态数据。
\n * 参数是 {{#crossLinkModule \"sp.spine\"}}sp.spine{{/crossLinkModule}}.AnimationStateData。\n * @method setAnimationStateData\n * @param {sp.spine.AnimationStateData} stateData\n */\n setAnimationStateData (stateData) {\n if (this.isAnimationCached()) {\n cc.warn(\"'setAnimationStateData' interface can not be invoked in cached mode.\");\n } else {\n var state = new spine.AnimationState(stateData);\n if (this._listener) {\n if (this._state) {\n this._state.removeListener(this._listener);\n }\n state.addListener(this._listener);\n }\n this._state = state;\n }\n \n },\n\n // IMPLEMENT\n __preload () {\n this._super();\n if (CC_EDITOR) {\n var Flags = cc.Object.Flags;\n this._objFlags |= (Flags.IsAnchorLocked | Flags.IsSizeLocked);\n \n this._refreshInspector();\n }\n\n var children = this.node.children;\n for (var i = 0, n = children.length; i < n; i++) {\n var child = children[i];\n if (child && child._name === \"DEBUG_DRAW_NODE\" ) {\n child.destroy();\n }\n }\n\n this._updateSkeletonData();\n this._updateDebugDraw();\n this._updateUseTint();\n this._updateBatch();\n },\n\n /**\n * !#en\n * It's best to set cache mode before set property 'dragonAsset', or will waste some cpu time.\n * If set the mode in editor, then no need to worry about order problem.\n * !#zh \n * 若想切换渲染模式,最好在设置'dragonAsset'之前,先设置好渲染模式,否则有运行时开销。\n * 若在编辑中设置渲染模式,则无需担心设置次序的问题。\n * \n * @method setAnimationCacheMode\n * @param {AnimationCacheMode} cacheMode\n * @example\n * skeleton.setAnimationCacheMode(sp.Skeleton.AnimationCacheMode.SHARED_CACHE);\n */\n setAnimationCacheMode (cacheMode) {\n if (this._preCacheMode !== cacheMode) {\n this._cacheMode = cacheMode;\n this._updateSkeletonData();\n this._updateUseTint();\n }\n },\n\n /**\n * !#en Whether in cached mode.\n * !#zh 当前是否处于缓存模式。\n * @method isAnimationCached\n * @return {Boolean}\n */\n isAnimationCached () {\n if (CC_EDITOR) return false;\n return this._cacheMode !== AnimationCacheMode.REALTIME;\n },\n\n update (dt) {\n if (CC_EDITOR) return;\n if (this.paused) return;\n\n dt *= this.timeScale * sp.timeScale;\n\n if (this.isAnimationCached()) {\n\n // Cache mode and has animation queue.\n if (this._isAniComplete) {\n if (this._animationQueue.length === 0 && !this._headAniInfo) {\n let frameCache = this._frameCache;\n if (frameCache && frameCache.isInvalid()) {\n frameCache.updateToFrame();\n let frames = frameCache.frames;\n this._curFrame = frames[frames.length - 1];\n }\n return;\n }\n if (!this._headAniInfo) {\n this._headAniInfo = this._animationQueue.shift();\n }\n this._accTime += dt;\n if (this._accTime > this._headAniInfo.delay) {\n let aniInfo = this._headAniInfo;\n this._headAniInfo = null;\n this.setAnimation (0, aniInfo.animationName, aniInfo.loop);\n }\n return;\n }\n\n this._updateCache(dt);\n } else {\n this._updateRealtime(dt);\n }\n },\n\n _emitCacheCompleteEvent () {\n if (!this._listener) return;\n this._endEntry.animation.name = this._animationName;\n this._listener.complete && this._listener.complete(this._endEntry);\n this._listener.end && this._listener.end(this._endEntry);\n },\n\n _updateCache (dt) {\n let frameCache = this._frameCache;\n if (!frameCache.isInited()) {\n return;\n }\n let frames = frameCache.frames;\n let frameTime = SkeletonCache.FrameTime;\n\n // Animation Start, the event diffrent from dragonbones inner event,\n // It has no event object.\n if (this._accTime == 0 && this._playCount == 0) {\n this._startEntry.animation.name = this._animationName;\n this._listener && this._listener.start && this._listener.start(this._startEntry);\n }\n\n this._accTime += dt;\n let frameIdx = Math.floor(this._accTime / frameTime);\n if (!frameCache.isCompleted) {\n frameCache.updateToFrame(frameIdx);\n }\n\n if (frameCache.isCompleted && frameIdx >= frames.length) {\n this._playCount ++;\n if (this._playTimes > 0 && this._playCount >= this._playTimes) {\n // set frame to end frame.\n this._curFrame = frames[frames.length - 1];\n this._accTime = 0;\n this._playCount = 0;\n this._isAniComplete = true;\n this._emitCacheCompleteEvent();\n return;\n }\n this._accTime = 0;\n frameIdx = 0;\n this._emitCacheCompleteEvent();\n }\n this._curFrame = frames[frameIdx];\n },\n\n _updateRealtime (dt) {\n let skeleton = this._skeleton;\n let state = this._state;\n if (skeleton) {\n skeleton.update(dt);\n if (state) {\n state.update(dt);\n state.apply(skeleton);\n }\n }\n },\n\n /**\n * !#en Sets vertex effect delegate.\n * !#zh 设置顶点动画代理\n * @method setVertexEffectDelegate\n * @param {sp.VertexEffectDelegate} effectDelegate\n */\n setVertexEffectDelegate (effectDelegate) {\n this._effectDelegate = effectDelegate;\n },\n\n // RENDERER\n\n /**\n * !#en Computes the world SRT from the local SRT for each bone.\n * !#zh 重新更新所有骨骼的世界 Transform,\n * 当获取 bone 的数值未更新时,即可使用该函数进行更新数值。\n * @method updateWorldTransform\n * @example\n * var bone = spine.findBone('head');\n * cc.log(bone.worldX); // return 0;\n * spine.updateWorldTransform();\n * bone = spine.findBone('head');\n * cc.log(bone.worldX); // return -23.12;\n */\n updateWorldTransform () {\n if (!this.isAnimationCached()) return;\n\n if (this._skeleton) {\n this._skeleton.updateWorldTransform();\n }\n },\n\n /**\n * !#en Sets the bones and slots to the setup pose.\n * !#zh 还原到起始动作\n * @method setToSetupPose\n */\n setToSetupPose () {\n if (this._skeleton) {\n this._skeleton.setToSetupPose();\n }\n },\n\n /**\n * !#en\n * Sets the bones to the setup pose,\n * using the values from the `BoneData` list in the `SkeletonData`.\n * !#zh\n * 设置 bone 到起始动作\n * 使用 SkeletonData 中的 BoneData 列表中的值。\n * @method setBonesToSetupPose\n */\n setBonesToSetupPose () {\n if (this._skeleton) {\n this._skeleton.setBonesToSetupPose();\n }\n },\n\n /**\n * !#en\n * Sets the slots to the setup pose,\n * using the values from the `SlotData` list in the `SkeletonData`.\n * !#zh\n * 设置 slot 到起始动作。\n * 使用 SkeletonData 中的 SlotData 列表中的值。\n * @method setSlotsToSetupPose\n */\n setSlotsToSetupPose () {\n if (this._skeleton) {\n this._skeleton.setSlotsToSetupPose();\n }\n },\n\n /**\n * !#en\n * Updating an animation cache to calculate all frame data in the animation is a cost in \n * performance due to calculating all data in a single frame.\n * To update the cache, use the invalidAnimationCache method with high performance.\n * !#zh\n * 更新某个动画缓存, 预计算动画中所有帧数据,由于在单帧计算所有数据,所以较消耗性能。\n * 若想更新缓存,可使用 invalidAnimationCache 方法,具有较高性能。\n * @method updateAnimationCache\n * @param {String} animName\n */\n updateAnimationCache (animName) {\n if (!this.isAnimationCached()) return;\n let uuid = this.skeletonData._uuid;\n if (this._skeletonCache) {\n this._skeletonCache.updateAnimationCache(uuid, animName);\n }\n },\n\n /**\n * !#en\n * Invalidates the animation cache, which is then recomputed on each frame..\n * !#zh\n * 使动画缓存失效,之后会在每帧重新计算。\n * @method invalidAnimationCache\n */\n invalidAnimationCache () {\n if (!this.isAnimationCached()) return;\n if (this._skeletonCache) {\n this._skeletonCache.invalidAnimationCache(this.skeletonData._uuid);\n }\n },\n\n /**\n * !#en\n * Finds a bone by name.\n * This does a string comparison for every bone.
\n * Returns a {{#crossLinkModule \"sp.spine\"}}sp.spine{{/crossLinkModule}}.Bone object.\n * !#zh\n * 通过名称查找 bone。\n * 这里对每个 bone 的名称进行了对比。
\n * 返回一个 {{#crossLinkModule \"sp.spine\"}}sp.spine{{/crossLinkModule}}.Bone 对象。\n *\n * @method findBone\n * @param {String} boneName\n * @return {sp.spine.Bone}\n */\n findBone (boneName) {\n if (this._skeleton) {\n return this._skeleton.findBone(boneName);\n }\n return null;\n },\n\n /**\n * !#en\n * Finds a slot by name. This does a string comparison for every slot.
\n * Returns a {{#crossLinkModule \"sp.spine\"}}sp.spine{{/crossLinkModule}}.Slot object.\n * !#zh\n * 通过名称查找 slot。这里对每个 slot 的名称进行了比较。
\n * 返回一个 {{#crossLinkModule \"sp.spine\"}}sp.spine{{/crossLinkModule}}.Slot 对象。\n *\n * @method findSlot\n * @param {String} slotName\n * @return {sp.spine.Slot}\n */\n findSlot (slotName) {\n if (this._skeleton) {\n return this._skeleton.findSlot(slotName);\n }\n return null;\n },\n\n /**\n * !#en\n * Finds a skin by name and makes it the active skin.\n * This does a string comparison for every skin.
\n * Note that setting the skin does not change which attachments are visible.
\n * Returns a {{#crossLinkModule \"sp.spine\"}}sp.spine{{/crossLinkModule}}.Skin object.\n * !#zh\n * 按名称查找皮肤,激活该皮肤。这里对每个皮肤的名称进行了比较。
\n * 注意:设置皮肤不会改变 attachment 的可见性。
\n * 返回一个 {{#crossLinkModule \"sp.spine\"}}sp.spine{{/crossLinkModule}}.Skin 对象。\n *\n * @method setSkin\n * @param {String} skinName\n */\n setSkin (skinName) {\n if (this._skeleton) {\n this._skeleton.setSkinByName(skinName);\n this._skeleton.setSlotsToSetupPose();\n }\n this.invalidAnimationCache();\n },\n\n /**\n * !#en\n * Returns the attachment for the slot and attachment name.\n * The skeleton looks first in its skin, then in the skeleton data’s default skin.
\n * Returns a {{#crossLinkModule \"sp.spine\"}}sp.spine{{/crossLinkModule}}.Attachment object.\n * !#zh\n * 通过 slot 和 attachment 的名称获取 attachment。Skeleton 优先查找它的皮肤,然后才是 Skeleton Data 中默认的皮肤。
\n * 返回一个 {{#crossLinkModule \"sp.spine\"}}sp.spine{{/crossLinkModule}}.Attachment 对象。\n *\n * @method getAttachment\n * @param {String} slotName\n * @param {String} attachmentName\n * @return {sp.spine.Attachment}\n */\n getAttachment (slotName, attachmentName) {\n if (this._skeleton) {\n return this._skeleton.getAttachmentByName(slotName, attachmentName);\n }\n return null;\n },\n\n /**\n * !#en\n * Sets the attachment for the slot and attachment name.\n * The skeleton looks first in its skin, then in the skeleton data’s default skin.\n * !#zh\n * 通过 slot 和 attachment 的名字来设置 attachment。\n * Skeleton 优先查找它的皮肤,然后才是 Skeleton Data 中默认的皮肤。\n * @method setAttachment\n * @param {String} slotName\n * @param {String} attachmentName\n */\n setAttachment (slotName, attachmentName) {\n if (this._skeleton) {\n this._skeleton.setAttachment(slotName, attachmentName);\n }\n this.invalidAnimationCache();\n },\n\n /**\n * 获取 attachment 的 region\n */\n getRegion(slotName, attachmentName) {\n const attachment = this.getAttachment(slotName, attachmentName);\n if (attachment) {\n return attachment.region;\n }\n return null;\n },\n\n /**\n * 修改 attachment 的 region\n */\n setRegion(slotName, attachmentName, region) {\n const attachment = this.getAttachment(slotName, attachmentName);\n if (attachment) {\n attachment.region = region;\n if (attachment instanceof sp.spine.MeshAttachment) {\n attachment.updateUVs();\n } else if (attachment instanceof sp.spine.RegionAttachment) {\n attachment.setRegion(region);\n attachment.updateOffset();\n }\n this.setVertsDirty();\n return true;\n }\n return false;\n },\n\n /**\n * Return the renderer of attachment.\n * @method getTextureAtlas\n * @param {sp.spine.RegionAttachment|spine.BoundingBoxAttachment} regionAttachment\n * @return {sp.spine.TextureAtlasRegion}\n */\n getTextureAtlas (regionAttachment) {\n return regionAttachment.region;\n },\n\n // ANIMATION\n /**\n * !#en\n * Mix applies all keyframe values,\n * interpolated for the specified time and mixed with the current values.\n * !#zh 为所有关键帧设定混合及混合时间(从当前值开始差值)。\n * @method setMix\n * @param {String} fromAnimation\n * @param {String} toAnimation\n * @param {Number} duration\n */\n setMix (fromAnimation, toAnimation, duration) {\n if (this._state) {\n this._state.data.setMix(fromAnimation, toAnimation, duration);\n }\n },\n\n /**\n * !#en Set the current animation. Any queued animations are cleared.
\n * Returns a {{#crossLinkModule \"sp.spine\"}}sp.spine{{/crossLinkModule}}.TrackEntry object.\n * !#zh 设置当前动画。队列中的任何的动画将被清除。
\n * 返回一个 {{#crossLinkModule \"sp.spine\"}}sp.spine{{/crossLinkModule}}.TrackEntry 对象。\n * @method setAnimation\n * @param {Number} trackIndex\n * @param {String} name\n * @param {Boolean} loop\n * @return {sp.spine.TrackEntry}\n */\n setAnimation (trackIndex, name, loop) {\n\n this._playTimes = loop ? 0 : 1;\n this._animationName = name;\n\n if (this.isAnimationCached()) {\n if (trackIndex !== 0) {\n cc.warn(\"Track index can not greater than 0 in cached mode.\");\n }\n if (!this._skeletonCache) return null;\n let cache = this._skeletonCache.getAnimationCache(this.skeletonData._uuid, name);\n if (!cache) {\n cache = this._skeletonCache.initAnimationCache(this.skeletonData._uuid, name);\n }\n if (cache) {\n this._isAniComplete = false;\n this._accTime = 0;\n this._playCount = 0;\n this._frameCache = cache;\n if (this.attachUtil._hasAttachedNode()) {\n this._frameCache.enableCacheAttachedInfo();\n }\n this._frameCache.updateToFrame(0);\n this._curFrame = this._frameCache.frames[0];\n }\n } else {\n if (this._skeleton) {\n var animation = this._skeleton.data.findAnimation(name);\n if (!animation) {\n cc.logID(7509, name);\n return null;\n }\n var res = this._state.setAnimationWith(trackIndex, animation, loop);\n this._state.apply(this._skeleton);\n return res;\n }\n }\n return null;\n },\n\n /**\n * !#en Adds an animation to be played delay seconds after the current or last queued animation.
\n * Returns a {{#crossLinkModule \"sp.spine\"}}sp.spine{{/crossLinkModule}}.TrackEntry object.\n * !#zh 添加一个动画到动画队列尾部,还可以延迟指定的秒数。
\n * 返回一个 {{#crossLinkModule \"sp.spine\"}}sp.spine{{/crossLinkModule}}.TrackEntry 对象。\n * @method addAnimation\n * @param {Number} trackIndex\n * @param {String} name\n * @param {Boolean} loop\n * @param {Number} [delay=0]\n * @return {sp.spine.TrackEntry}\n */\n addAnimation (trackIndex, name, loop, delay) {\n delay = delay || 0;\n if (this.isAnimationCached()) {\n if (trackIndex !== 0) {\n cc.warn(\"Track index can not greater than 0 in cached mode.\");\n }\n this._animationQueue.push({animationName : name, loop: loop, delay : delay});\n } else {\n if (this._skeleton) {\n var animation = this._skeleton.data.findAnimation(name);\n if (!animation) {\n cc.logID(7510, name);\n return null;\n }\n return this._state.addAnimationWith(trackIndex, animation, loop, delay);\n }\n }\n return null;\n },\n\n /**\n * !#en Find animation with specified name.\n * !#zh 查找指定名称的动画\n * @method findAnimation\n * @param {String} name\n * @returns {sp.spine.Animation}\n */\n findAnimation (name) {\n if (this._skeleton) {\n return this._skeleton.data.findAnimation(name);\n }\n return null;\n },\n\n /**\n * !#en Returns track entry by trackIndex.
\n * Returns a {{#crossLinkModule \"sp.spine\"}}sp.spine{{/crossLinkModule}}.TrackEntry object.\n * !#zh 通过 track 索引获取 TrackEntry。
\n * 返回一个 {{#crossLinkModule \"sp.spine\"}}sp.spine{{/crossLinkModule}}.TrackEntry 对象。\n * @method getCurrent\n * @param trackIndex\n * @return {sp.spine.TrackEntry}\n */\n getCurrent (trackIndex) {\n if (this.isAnimationCached()) {\n cc.warn(\"'getCurrent' interface can not be invoked in cached mode.\");\n } else {\n if (this._state) {\n return this._state.getCurrent(trackIndex);\n }\n }\n return null;\n },\n\n /**\n * !#en Clears all tracks of animation state.\n * !#zh 清除所有 track 的动画状态。\n * @method clearTracks\n */\n clearTracks () {\n if (this.isAnimationCached()) {\n cc.warn(\"'clearTracks' interface can not be invoked in cached mode.\");\n } else {\n if (this._state) {\n this._state.clearTracks();\n }\n }\n },\n\n /**\n * !#en Clears track of animation state by trackIndex.\n * !#zh 清除出指定 track 的动画状态。\n * @method clearTrack\n * @param {number} trackIndex\n */\n clearTrack (trackIndex) {\n if (this.isAnimationCached()) {\n cc.warn(\"'clearTrack' interface can not be invoked in cached mode.\");\n } else {\n if (this._state) {\n this._state.clearTrack(trackIndex);\n if (CC_EDITOR && !cc.engine.isPlaying) {\n this._state.update(0);\n }\n }\n }\n },\n\n /**\n * !#en Set the start event listener.\n * !#zh 用来设置开始播放动画的事件监听。\n * @method setStartListener\n * @param {function} listener\n */\n setStartListener (listener) {\n this._ensureListener();\n this._listener.start = listener;\n },\n\n /**\n * !#en Set the interrupt event listener.\n * !#zh 用来设置动画被打断的事件监听。\n * @method setInterruptListener\n * @param {function} listener\n */\n setInterruptListener (listener) {\n this._ensureListener();\n this._listener.interrupt = listener;\n },\n\n /**\n * !#en Set the end event listener.\n * !#zh 用来设置动画播放完后的事件监听。\n * @method setEndListener\n * @param {function} listener\n */\n setEndListener (listener) {\n this._ensureListener();\n this._listener.end = listener;\n },\n\n /**\n * !#en Set the dispose event listener.\n * !#zh 用来设置动画将被销毁的事件监听。\n * @method setDisposeListener\n * @param {function} listener\n */\n setDisposeListener (listener) {\n this._ensureListener();\n this._listener.dispose = listener;\n },\n\n /**\n * !#en Set the complete event listener.\n * !#zh 用来设置动画播放一次循环结束后的事件监听。\n * @method setCompleteListener\n * @param {function} listener\n */\n setCompleteListener (listener) {\n this._ensureListener();\n this._listener.complete = listener;\n },\n\n /**\n * !#en Set the animation event listener.\n * !#zh 用来设置动画播放过程中帧事件的监听。\n * @method setEventListener\n * @param {function} listener\n */\n setEventListener (listener) {\n this._ensureListener();\n this._listener.event = listener;\n },\n\n /**\n * !#en Set the start event listener for specified TrackEntry.\n * !#zh 用来为指定的 TrackEntry 设置动画开始播放的事件监听。\n * @method setTrackStartListener\n * @param {sp.spine.TrackEntry} entry\n * @param {function} listener\n */\n setTrackStartListener (entry, listener) {\n TrackEntryListeners.getListeners(entry).start = listener;\n },\n\n /**\n * !#en Set the interrupt event listener for specified TrackEntry.\n * !#zh 用来为指定的 TrackEntry 设置动画被打断的事件监听。\n * @method setTrackInterruptListener\n * @param {sp.spine.TrackEntry} entry\n * @param {function} listener\n */\n setTrackInterruptListener (entry, listener) {\n TrackEntryListeners.getListeners(entry).interrupt = listener;\n },\n\n /**\n * !#en Set the end event listener for specified TrackEntry.\n * !#zh 用来为指定的 TrackEntry 设置动画播放结束的事件监听。\n * @method setTrackEndListener\n * @param {sp.spine.TrackEntry} entry\n * @param {function} listener\n */\n setTrackEndListener (entry, listener) {\n TrackEntryListeners.getListeners(entry).end = listener;\n },\n\n /**\n * !#en Set the dispose event listener for specified TrackEntry.\n * !#zh 用来为指定的 TrackEntry 设置动画即将被销毁的事件监听。\n * @method setTrackDisposeListener\n * @param {sp.spine.TrackEntry} entry\n * @param {function} listener\n */\n setTrackDisposeListener(entry, listener){\n TrackEntryListeners.getListeners(entry).dispose = listener;\n },\n\n /**\n * !#en Set the complete event listener for specified TrackEntry.\n * !#zh 用来为指定的 TrackEntry 设置动画一次循环播放结束的事件监听。\n * @method setTrackCompleteListener\n * @param {sp.spine.TrackEntry} entry\n * @param {function} listener\n * @param {sp.spine.TrackEntry} listener.entry\n * @param {Number} listener.loopCount\n */\n setTrackCompleteListener (entry, listener) {\n TrackEntryListeners.getListeners(entry).complete = function (trackEntry) {\n var loopCount = Math.floor(trackEntry.trackTime / trackEntry.animationEnd); \n listener(trackEntry, loopCount);\n };\n },\n\n /**\n * !#en Set the event listener for specified TrackEntry.\n * !#zh 用来为指定的 TrackEntry 设置动画帧事件的监听。\n * @method setTrackEventListener\n * @param {sp.spine.TrackEntry} entry\n * @param {function} listener\n */\n setTrackEventListener (entry, listener) {\n TrackEntryListeners.getListeners(entry).event = listener;\n },\n\n /**\n * !#en Get the animation state object\n * !#zh 获取动画状态\n * @method getState\n * @return {sp.spine.AnimationState} state\n */\n getState () {\n return this._state;\n },\n\n // update animation list for editor\n _updateAnimEnum: CC_EDITOR && function () {\n var animEnum;\n if (this.skeletonData) {\n animEnum = this.skeletonData.getAnimsEnum();\n }\n // change enum\n setEnumAttr(this, '_animationIndex', animEnum || DefaultAnimsEnum);\n },\n // update skin list for editor\n _updateSkinEnum: CC_EDITOR && function () {\n var skinEnum;\n if (this.skeletonData) {\n skinEnum = this.skeletonData.getSkinsEnum();\n }\n // change enum\n setEnumAttr(this, '_defaultSkinIndex', skinEnum || DefaultSkinsEnum);\n },\n\n _ensureListener () {\n if (!this._listener) {\n this._listener = new TrackEntryListeners();\n if (this._state) {\n this._state.addListener(this._listener);\n }\n }\n },\n\n _updateSkeletonData () {\n if (!this.skeletonData) {\n this.disableRender();\n return;\n }\n\n let data = this.skeletonData.getRuntimeData();\n if (!data) {\n this.disableRender();\n return;\n }\n \n try {\n this.setSkeletonData(data);\n if (!this.isAnimationCached()) {\n this.setAnimationStateData(new spine.AnimationStateData(this._skeleton.data));\n }\n this.defaultSkin && this.setSkin(this.defaultSkin);\n }\n catch (e) {\n cc.warn(e);\n }\n \n this.attachUtil.init(this);\n this.attachUtil._associateAttachedNode();\n this._preCacheMode = this._cacheMode;\n this.animation = this.defaultAnimation;\n this._dataDirty = true;\n },\n\n _refreshInspector () {\n // update inspector\n this._updateAnimEnum();\n this._updateSkinEnum();\n Editor.Utils.refreshSelectedInspector('node', this.node.uuid);\n },\n\n _updateDebugDraw: function () {\n if (this.debugBones || this.debugSlots) {\n if (!this._debugRenderer) {\n let debugDrawNode = new cc.PrivateNode();\n debugDrawNode.name = 'DEBUG_DRAW_NODE';\n let debugDraw = debugDrawNode.addComponent(Graphics);\n debugDraw.lineWidth = 1;\n debugDraw.strokeColor = cc.color(255, 0, 0, 255);\n \n this._debugRenderer = debugDraw;\n }\n\n this._debugRenderer.node.parent = this.node;\n if (this.isAnimationCached()) {\n cc.warn(\"Debug bones or slots is invalid in cached mode\");\n }\n }\n else if (this._debugRenderer) {\n this._debugRenderer.node.parent = null;\n }\n },\n});\n\nmodule.exports = sp.Skeleton;\n","/****************************************************************************\n Copyright (c) 2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos2d-x.org\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * !#en\n * The global main namespace of Spine, all classes, functions,\n * properties and constants of Spine are defined in this namespace\n * !#zh\n * Spine 的全局的命名空间,\n * 与 Spine 相关的所有的类,函数,属性,常量都在这个命名空间中定义。\n * @module sp\n * @main sp\n */\n\n/*\n * Reference:\n * http://esotericsoftware.com/spine-runtime-terminology\n * http://esotericsoftware.com/files/runtime-diagram.png\n * http://en.esotericsoftware.com/spine-using-runtimes\n */\n\nvar _global = typeof window === 'undefined' ? global : window;\nvar _isUseSpine = true;\n\nif (!CC_NATIVERENDERER) {\n _global.spine = require('./lib/spine');\n} else if (!_global.spine) {\n _isUseSpine = false;\n}\n\nif (_isUseSpine) {\n _global.sp = {};\n\n /**\n * !#en\n * The global time scale of Spine.\n * !#zh\n * Spine 全局时间缩放率。\n * @example\n * sp.timeScale = 0.8;\n */\n sp._timeScale = 1.0;\n Object.defineProperty(sp, 'timeScale', {\n get () {\n return this._timeScale;\n },\n set (value) {\n this._timeScale = value;\n },\n configurable: true,\n });\n\n // The attachment type of spine. It contains three type: REGION(0), BOUNDING_BOX(1), MESH(2) and SKINNED_MESH.\n sp.ATTACHMENT_TYPE = {\n REGION: 0,\n BOUNDING_BOX: 1,\n MESH: 2,\n SKINNED_MESH:3\n };\n\n /**\n * !#en The event type of spine skeleton animation.\n * !#zh 骨骼动画事件类型。\n * @enum AnimationEventType\n */\n sp.AnimationEventType = cc.Enum({\n /**\n * !#en The play spine skeleton animation start type.\n * !#zh 开始播放骨骼动画。\n * @property {Number} START\n */\n START: 0,\n /**\n * !#en Another entry has replaced this entry as the current entry. This entry may continue being applied for mixing.\n * !#zh 当前的 entry 被其他的 entry 替换。当使用 mixing 时,当前的 entry 会继续运行。\n */\n INTERRUPT: 1,\n /**\n * !#en The play spine skeleton animation finish type.\n * !#zh 播放骨骼动画结束。\n * @property {Number} END\n */\n END: 2,\n /**\n * !#en The entry will be disposed.\n * !#zh entry 将被销毁。\n */\n DISPOSE: 3,\n /**\n * !#en The play spine skeleton animation complete type.\n * !#zh 播放骨骼动画完成。\n * @property {Number} COMPLETE\n */\n COMPLETE: 4,\n /**\n * !#en The spine skeleton animation event type.\n * !#zh 骨骼动画事件。\n * @property {Number} EVENT\n */\n EVENT: 5\n });\n\n /**\n * @module sp\n */\n if (!CC_EDITOR || !Editor.isMainProcess) {\n \n sp.spine = _global.spine;\n if (!CC_NATIVERENDERER) {\n require('./skeleton-texture');\n }\n\n require('./skeleton-data');\n require('./vertex-effect-delegate');\n require('./Skeleton');\n require('./spine-assembler');\n }\n else {\n require('./skeleton-data');\n }\n}\n\n/**\n * !#en\n * `sp.spine` is the namespace for official Spine Runtime, which officially implemented and maintained by Spine.
\n * Please refer to the official documentation for its detailed usage: [http://en.esotericsoftware.com/spine-using-runtimes](http://en.esotericsoftware.com/spine-using-runtimes)\n * !#zh\n * sp.spine 模块是 Spine 官方运行库的 API 入口,由 Spine 官方统一实现和维护,具体用法请参考:[http://zh.esotericsoftware.com/spine-using-runtimes](http://zh.esotericsoftware.com/spine-using-runtimes)\n * @module sp.spine\n * @main sp.spine\n */\n","// Spine runtime version 3.8\n\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar spine;\n(function (spine) {\n var Animation = (function () {\n function Animation(name, timelines, duration) {\n if (name == null)\n throw new Error(\"name cannot be null.\");\n if (timelines == null)\n throw new Error(\"timelines cannot be null.\");\n this.name = name;\n this.timelines = timelines;\n this.timelineIds = [];\n for (var i = 0; i < timelines.length; i++)\n this.timelineIds[timelines[i].getPropertyId()] = true;\n this.duration = duration;\n }\n Animation.prototype.hasTimeline = function (id) {\n return this.timelineIds[id] == true;\n };\n Animation.prototype.apply = function (skeleton, lastTime, time, loop, events, alpha, blend, direction) {\n if (skeleton == null)\n throw new Error(\"skeleton cannot be null.\");\n if (loop && this.duration != 0) {\n time %= this.duration;\n if (lastTime > 0)\n lastTime %= this.duration;\n }\n var timelines = this.timelines;\n for (var i = 0, n = timelines.length; i < n; i++)\n timelines[i].apply(skeleton, lastTime, time, events, alpha, blend, direction);\n };\n Animation.binarySearch = function (values, target, step) {\n if (step === void 0) { step = 1; }\n var low = 0;\n var high = values.length / step - 2;\n if (high == 0)\n return step;\n var current = high >>> 1;\n while (true) {\n if (values[(current + 1) * step] <= target)\n low = current + 1;\n else\n high = current;\n if (low == high)\n return (low + 1) * step;\n current = (low + high) >>> 1;\n }\n };\n Animation.linearSearch = function (values, target, step) {\n for (var i = 0, last = values.length - step; i <= last; i += step)\n if (values[i] > target)\n return i;\n return -1;\n };\n return Animation;\n }());\n spine.Animation = Animation;\n var MixBlend;\n (function (MixBlend) {\n MixBlend[MixBlend[\"setup\"] = 0] = \"setup\";\n MixBlend[MixBlend[\"first\"] = 1] = \"first\";\n MixBlend[MixBlend[\"replace\"] = 2] = \"replace\";\n MixBlend[MixBlend[\"add\"] = 3] = \"add\";\n })(MixBlend = spine.MixBlend || (spine.MixBlend = {}));\n var MixDirection;\n (function (MixDirection) {\n MixDirection[MixDirection[\"mixIn\"] = 0] = \"mixIn\";\n MixDirection[MixDirection[\"mixOut\"] = 1] = \"mixOut\";\n })(MixDirection = spine.MixDirection || (spine.MixDirection = {}));\n var TimelineType;\n (function (TimelineType) {\n TimelineType[TimelineType[\"rotate\"] = 0] = \"rotate\";\n TimelineType[TimelineType[\"translate\"] = 1] = \"translate\";\n TimelineType[TimelineType[\"scale\"] = 2] = \"scale\";\n TimelineType[TimelineType[\"shear\"] = 3] = \"shear\";\n TimelineType[TimelineType[\"attachment\"] = 4] = \"attachment\";\n TimelineType[TimelineType[\"color\"] = 5] = \"color\";\n TimelineType[TimelineType[\"deform\"] = 6] = \"deform\";\n TimelineType[TimelineType[\"event\"] = 7] = \"event\";\n TimelineType[TimelineType[\"drawOrder\"] = 8] = \"drawOrder\";\n TimelineType[TimelineType[\"ikConstraint\"] = 9] = \"ikConstraint\";\n TimelineType[TimelineType[\"transformConstraint\"] = 10] = \"transformConstraint\";\n TimelineType[TimelineType[\"pathConstraintPosition\"] = 11] = \"pathConstraintPosition\";\n TimelineType[TimelineType[\"pathConstraintSpacing\"] = 12] = \"pathConstraintSpacing\";\n TimelineType[TimelineType[\"pathConstraintMix\"] = 13] = \"pathConstraintMix\";\n TimelineType[TimelineType[\"twoColor\"] = 14] = \"twoColor\";\n })(TimelineType = spine.TimelineType || (spine.TimelineType = {}));\n var CurveTimeline = (function () {\n function CurveTimeline(frameCount) {\n if (frameCount <= 0)\n throw new Error(\"frameCount must be > 0: \" + frameCount);\n this.curves = spine.Utils.newFloatArray((frameCount - 1) * CurveTimeline.BEZIER_SIZE);\n }\n CurveTimeline.prototype.getFrameCount = function () {\n return this.curves.length / CurveTimeline.BEZIER_SIZE + 1;\n };\n CurveTimeline.prototype.setLinear = function (frameIndex) {\n this.curves[frameIndex * CurveTimeline.BEZIER_SIZE] = CurveTimeline.LINEAR;\n };\n CurveTimeline.prototype.setStepped = function (frameIndex) {\n this.curves[frameIndex * CurveTimeline.BEZIER_SIZE] = CurveTimeline.STEPPED;\n };\n CurveTimeline.prototype.getCurveType = function (frameIndex) {\n var index = frameIndex * CurveTimeline.BEZIER_SIZE;\n if (index == this.curves.length)\n return CurveTimeline.LINEAR;\n var type = this.curves[index];\n if (type == CurveTimeline.LINEAR)\n return CurveTimeline.LINEAR;\n if (type == CurveTimeline.STEPPED)\n return CurveTimeline.STEPPED;\n return CurveTimeline.BEZIER;\n };\n CurveTimeline.prototype.setCurve = function (frameIndex, cx1, cy1, cx2, cy2) {\n var tmpx = (-cx1 * 2 + cx2) * 0.03, tmpy = (-cy1 * 2 + cy2) * 0.03;\n var dddfx = ((cx1 - cx2) * 3 + 1) * 0.006, dddfy = ((cy1 - cy2) * 3 + 1) * 0.006;\n var ddfx = tmpx * 2 + dddfx, ddfy = tmpy * 2 + dddfy;\n var dfx = cx1 * 0.3 + tmpx + dddfx * 0.16666667, dfy = cy1 * 0.3 + tmpy + dddfy * 0.16666667;\n var i = frameIndex * CurveTimeline.BEZIER_SIZE;\n var curves = this.curves;\n curves[i++] = CurveTimeline.BEZIER;\n var x = dfx, y = dfy;\n for (var n = i + CurveTimeline.BEZIER_SIZE - 1; i < n; i += 2) {\n curves[i] = x;\n curves[i + 1] = y;\n dfx += ddfx;\n dfy += ddfy;\n ddfx += dddfx;\n ddfy += dddfy;\n x += dfx;\n y += dfy;\n }\n };\n CurveTimeline.prototype.getCurvePercent = function (frameIndex, percent) {\n percent = spine.MathUtils.clamp(percent, 0, 1);\n var curves = this.curves;\n var i = frameIndex * CurveTimeline.BEZIER_SIZE;\n var type = curves[i];\n if (type == CurveTimeline.LINEAR)\n return percent;\n if (type == CurveTimeline.STEPPED)\n return 0;\n i++;\n var x = 0;\n for (var start = i, n = i + CurveTimeline.BEZIER_SIZE - 1; i < n; i += 2) {\n x = curves[i];\n if (x >= percent) {\n var prevX = void 0, prevY = void 0;\n if (i == start) {\n prevX = 0;\n prevY = 0;\n }\n else {\n prevX = curves[i - 2];\n prevY = curves[i - 1];\n }\n return prevY + (curves[i + 1] - prevY) * (percent - prevX) / (x - prevX);\n }\n }\n var y = curves[i - 1];\n return y + (1 - y) * (percent - x) / (1 - x);\n };\n CurveTimeline.LINEAR = 0;\n CurveTimeline.STEPPED = 1;\n CurveTimeline.BEZIER = 2;\n CurveTimeline.BEZIER_SIZE = 10 * 2 - 1;\n return CurveTimeline;\n }());\n spine.CurveTimeline = CurveTimeline;\n var RotateTimeline = (function (_super) {\n __extends(RotateTimeline, _super);\n function RotateTimeline(frameCount) {\n var _this = _super.call(this, frameCount) || this;\n _this.frames = spine.Utils.newFloatArray(frameCount << 1);\n return _this;\n }\n RotateTimeline.prototype.getPropertyId = function () {\n return (TimelineType.rotate << 24) + this.boneIndex;\n };\n RotateTimeline.prototype.setFrame = function (frameIndex, time, degrees) {\n frameIndex <<= 1;\n this.frames[frameIndex] = time;\n this.frames[frameIndex + RotateTimeline.ROTATION] = degrees;\n };\n RotateTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {\n var frames = this.frames;\n var bone = skeleton.bones[this.boneIndex];\n if (!bone.active)\n return;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n bone.rotation = bone.data.rotation;\n return;\n case MixBlend.first:\n var r_1 = bone.data.rotation - bone.rotation;\n bone.rotation += (r_1 - (16384 - ((16384.499999999996 - r_1 / 360) | 0)) * 360) * alpha;\n }\n return;\n }\n if (time >= frames[frames.length - RotateTimeline.ENTRIES]) {\n var r_2 = frames[frames.length + RotateTimeline.PREV_ROTATION];\n switch (blend) {\n case MixBlend.setup:\n bone.rotation = bone.data.rotation + r_2 * alpha;\n break;\n case MixBlend.first:\n case MixBlend.replace:\n r_2 += bone.data.rotation - bone.rotation;\n r_2 -= (16384 - ((16384.499999999996 - r_2 / 360) | 0)) * 360;\n case MixBlend.add:\n bone.rotation += r_2 * alpha;\n }\n return;\n }\n var frame = Animation.binarySearch(frames, time, RotateTimeline.ENTRIES);\n var prevRotation = frames[frame + RotateTimeline.PREV_ROTATION];\n var frameTime = frames[frame];\n var percent = this.getCurvePercent((frame >> 1) - 1, 1 - (time - frameTime) / (frames[frame + RotateTimeline.PREV_TIME] - frameTime));\n var r = frames[frame + RotateTimeline.ROTATION] - prevRotation;\n r = prevRotation + (r - (16384 - ((16384.499999999996 - r / 360) | 0)) * 360) * percent;\n switch (blend) {\n case MixBlend.setup:\n bone.rotation = bone.data.rotation + (r - (16384 - ((16384.499999999996 - r / 360) | 0)) * 360) * alpha;\n break;\n case MixBlend.first:\n case MixBlend.replace:\n r += bone.data.rotation - bone.rotation;\n case MixBlend.add:\n bone.rotation += (r - (16384 - ((16384.499999999996 - r / 360) | 0)) * 360) * alpha;\n }\n };\n RotateTimeline.ENTRIES = 2;\n RotateTimeline.PREV_TIME = -2;\n RotateTimeline.PREV_ROTATION = -1;\n RotateTimeline.ROTATION = 1;\n return RotateTimeline;\n }(CurveTimeline));\n spine.RotateTimeline = RotateTimeline;\n var TranslateTimeline = (function (_super) {\n __extends(TranslateTimeline, _super);\n function TranslateTimeline(frameCount) {\n var _this = _super.call(this, frameCount) || this;\n _this.frames = spine.Utils.newFloatArray(frameCount * TranslateTimeline.ENTRIES);\n return _this;\n }\n TranslateTimeline.prototype.getPropertyId = function () {\n return (TimelineType.translate << 24) + this.boneIndex;\n };\n TranslateTimeline.prototype.setFrame = function (frameIndex, time, x, y) {\n frameIndex *= TranslateTimeline.ENTRIES;\n this.frames[frameIndex] = time;\n this.frames[frameIndex + TranslateTimeline.X] = x;\n this.frames[frameIndex + TranslateTimeline.Y] = y;\n };\n TranslateTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {\n var frames = this.frames;\n var bone = skeleton.bones[this.boneIndex];\n if (!bone.active)\n return;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n bone.x = bone.data.x;\n bone.y = bone.data.y;\n return;\n case MixBlend.first:\n bone.x += (bone.data.x - bone.x) * alpha;\n bone.y += (bone.data.y - bone.y) * alpha;\n }\n return;\n }\n var x = 0, y = 0;\n if (time >= frames[frames.length - TranslateTimeline.ENTRIES]) {\n x = frames[frames.length + TranslateTimeline.PREV_X];\n y = frames[frames.length + TranslateTimeline.PREV_Y];\n }\n else {\n var frame = Animation.binarySearch(frames, time, TranslateTimeline.ENTRIES);\n x = frames[frame + TranslateTimeline.PREV_X];\n y = frames[frame + TranslateTimeline.PREV_Y];\n var frameTime = frames[frame];\n var percent = this.getCurvePercent(frame / TranslateTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + TranslateTimeline.PREV_TIME] - frameTime));\n x += (frames[frame + TranslateTimeline.X] - x) * percent;\n y += (frames[frame + TranslateTimeline.Y] - y) * percent;\n }\n switch (blend) {\n case MixBlend.setup:\n bone.x = bone.data.x + x * alpha;\n bone.y = bone.data.y + y * alpha;\n break;\n case MixBlend.first:\n case MixBlend.replace:\n bone.x += (bone.data.x + x - bone.x) * alpha;\n bone.y += (bone.data.y + y - bone.y) * alpha;\n break;\n case MixBlend.add:\n bone.x += x * alpha;\n bone.y += y * alpha;\n }\n };\n TranslateTimeline.ENTRIES = 3;\n TranslateTimeline.PREV_TIME = -3;\n TranslateTimeline.PREV_X = -2;\n TranslateTimeline.PREV_Y = -1;\n TranslateTimeline.X = 1;\n TranslateTimeline.Y = 2;\n return TranslateTimeline;\n }(CurveTimeline));\n spine.TranslateTimeline = TranslateTimeline;\n var ScaleTimeline = (function (_super) {\n __extends(ScaleTimeline, _super);\n function ScaleTimeline(frameCount) {\n return _super.call(this, frameCount) || this;\n }\n ScaleTimeline.prototype.getPropertyId = function () {\n return (TimelineType.scale << 24) + this.boneIndex;\n };\n ScaleTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {\n var frames = this.frames;\n var bone = skeleton.bones[this.boneIndex];\n if (!bone.active)\n return;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n bone.scaleX = bone.data.scaleX;\n bone.scaleY = bone.data.scaleY;\n return;\n case MixBlend.first:\n bone.scaleX += (bone.data.scaleX - bone.scaleX) * alpha;\n bone.scaleY += (bone.data.scaleY - bone.scaleY) * alpha;\n }\n return;\n }\n var x = 0, y = 0;\n if (time >= frames[frames.length - ScaleTimeline.ENTRIES]) {\n x = frames[frames.length + ScaleTimeline.PREV_X] * bone.data.scaleX;\n y = frames[frames.length + ScaleTimeline.PREV_Y] * bone.data.scaleY;\n }\n else {\n var frame = Animation.binarySearch(frames, time, ScaleTimeline.ENTRIES);\n x = frames[frame + ScaleTimeline.PREV_X];\n y = frames[frame + ScaleTimeline.PREV_Y];\n var frameTime = frames[frame];\n var percent = this.getCurvePercent(frame / ScaleTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + ScaleTimeline.PREV_TIME] - frameTime));\n x = (x + (frames[frame + ScaleTimeline.X] - x) * percent) * bone.data.scaleX;\n y = (y + (frames[frame + ScaleTimeline.Y] - y) * percent) * bone.data.scaleY;\n }\n if (alpha == 1) {\n if (blend == MixBlend.add) {\n bone.scaleX += x - bone.data.scaleX;\n bone.scaleY += y - bone.data.scaleY;\n }\n else {\n bone.scaleX = x;\n bone.scaleY = y;\n }\n }\n else {\n var bx = 0, by = 0;\n if (direction == MixDirection.mixOut) {\n switch (blend) {\n case MixBlend.setup:\n bx = bone.data.scaleX;\n by = bone.data.scaleY;\n bone.scaleX = bx + (Math.abs(x) * spine.MathUtils.signum(bx) - bx) * alpha;\n bone.scaleY = by + (Math.abs(y) * spine.MathUtils.signum(by) - by) * alpha;\n break;\n case MixBlend.first:\n case MixBlend.replace:\n bx = bone.scaleX;\n by = bone.scaleY;\n bone.scaleX = bx + (Math.abs(x) * spine.MathUtils.signum(bx) - bx) * alpha;\n bone.scaleY = by + (Math.abs(y) * spine.MathUtils.signum(by) - by) * alpha;\n break;\n case MixBlend.add:\n bx = bone.scaleX;\n by = bone.scaleY;\n bone.scaleX = bx + (Math.abs(x) * spine.MathUtils.signum(bx) - bone.data.scaleX) * alpha;\n bone.scaleY = by + (Math.abs(y) * spine.MathUtils.signum(by) - bone.data.scaleY) * alpha;\n }\n }\n else {\n switch (blend) {\n case MixBlend.setup:\n bx = Math.abs(bone.data.scaleX) * spine.MathUtils.signum(x);\n by = Math.abs(bone.data.scaleY) * spine.MathUtils.signum(y);\n bone.scaleX = bx + (x - bx) * alpha;\n bone.scaleY = by + (y - by) * alpha;\n break;\n case MixBlend.first:\n case MixBlend.replace:\n bx = Math.abs(bone.scaleX) * spine.MathUtils.signum(x);\n by = Math.abs(bone.scaleY) * spine.MathUtils.signum(y);\n bone.scaleX = bx + (x - bx) * alpha;\n bone.scaleY = by + (y - by) * alpha;\n break;\n case MixBlend.add:\n bx = spine.MathUtils.signum(x);\n by = spine.MathUtils.signum(y);\n bone.scaleX = Math.abs(bone.scaleX) * bx + (x - Math.abs(bone.data.scaleX) * bx) * alpha;\n bone.scaleY = Math.abs(bone.scaleY) * by + (y - Math.abs(bone.data.scaleY) * by) * alpha;\n }\n }\n }\n };\n return ScaleTimeline;\n }(TranslateTimeline));\n spine.ScaleTimeline = ScaleTimeline;\n var ShearTimeline = (function (_super) {\n __extends(ShearTimeline, _super);\n function ShearTimeline(frameCount) {\n return _super.call(this, frameCount) || this;\n }\n ShearTimeline.prototype.getPropertyId = function () {\n return (TimelineType.shear << 24) + this.boneIndex;\n };\n ShearTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {\n var frames = this.frames;\n var bone = skeleton.bones[this.boneIndex];\n if (!bone.active)\n return;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n bone.shearX = bone.data.shearX;\n bone.shearY = bone.data.shearY;\n return;\n case MixBlend.first:\n bone.shearX += (bone.data.shearX - bone.shearX) * alpha;\n bone.shearY += (bone.data.shearY - bone.shearY) * alpha;\n }\n return;\n }\n var x = 0, y = 0;\n if (time >= frames[frames.length - ShearTimeline.ENTRIES]) {\n x = frames[frames.length + ShearTimeline.PREV_X];\n y = frames[frames.length + ShearTimeline.PREV_Y];\n }\n else {\n var frame = Animation.binarySearch(frames, time, ShearTimeline.ENTRIES);\n x = frames[frame + ShearTimeline.PREV_X];\n y = frames[frame + ShearTimeline.PREV_Y];\n var frameTime = frames[frame];\n var percent = this.getCurvePercent(frame / ShearTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + ShearTimeline.PREV_TIME] - frameTime));\n x = x + (frames[frame + ShearTimeline.X] - x) * percent;\n y = y + (frames[frame + ShearTimeline.Y] - y) * percent;\n }\n switch (blend) {\n case MixBlend.setup:\n bone.shearX = bone.data.shearX + x * alpha;\n bone.shearY = bone.data.shearY + y * alpha;\n break;\n case MixBlend.first:\n case MixBlend.replace:\n bone.shearX += (bone.data.shearX + x - bone.shearX) * alpha;\n bone.shearY += (bone.data.shearY + y - bone.shearY) * alpha;\n break;\n case MixBlend.add:\n bone.shearX += x * alpha;\n bone.shearY += y * alpha;\n }\n };\n return ShearTimeline;\n }(TranslateTimeline));\n spine.ShearTimeline = ShearTimeline;\n var ColorTimeline = (function (_super) {\n __extends(ColorTimeline, _super);\n function ColorTimeline(frameCount) {\n var _this = _super.call(this, frameCount) || this;\n _this.frames = spine.Utils.newFloatArray(frameCount * ColorTimeline.ENTRIES);\n return _this;\n }\n ColorTimeline.prototype.getPropertyId = function () {\n return (TimelineType.color << 24) + this.slotIndex;\n };\n ColorTimeline.prototype.setFrame = function (frameIndex, time, r, g, b, a) {\n frameIndex *= ColorTimeline.ENTRIES;\n this.frames[frameIndex] = time;\n this.frames[frameIndex + ColorTimeline.R] = r;\n this.frames[frameIndex + ColorTimeline.G] = g;\n this.frames[frameIndex + ColorTimeline.B] = b;\n this.frames[frameIndex + ColorTimeline.A] = a;\n };\n ColorTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {\n var slot = skeleton.slots[this.slotIndex];\n if (!slot.bone.active)\n return;\n var frames = this.frames;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n slot.color.setFromColor(slot.data.color);\n return;\n case MixBlend.first:\n var color = slot.color, setup = slot.data.color;\n color.add((setup.r - color.r) * alpha, (setup.g - color.g) * alpha, (setup.b - color.b) * alpha, (setup.a - color.a) * alpha);\n }\n return;\n }\n var r = 0, g = 0, b = 0, a = 0;\n if (time >= frames[frames.length - ColorTimeline.ENTRIES]) {\n var i = frames.length;\n r = frames[i + ColorTimeline.PREV_R];\n g = frames[i + ColorTimeline.PREV_G];\n b = frames[i + ColorTimeline.PREV_B];\n a = frames[i + ColorTimeline.PREV_A];\n }\n else {\n var frame = Animation.binarySearch(frames, time, ColorTimeline.ENTRIES);\n r = frames[frame + ColorTimeline.PREV_R];\n g = frames[frame + ColorTimeline.PREV_G];\n b = frames[frame + ColorTimeline.PREV_B];\n a = frames[frame + ColorTimeline.PREV_A];\n var frameTime = frames[frame];\n var percent = this.getCurvePercent(frame / ColorTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + ColorTimeline.PREV_TIME] - frameTime));\n r += (frames[frame + ColorTimeline.R] - r) * percent;\n g += (frames[frame + ColorTimeline.G] - g) * percent;\n b += (frames[frame + ColorTimeline.B] - b) * percent;\n a += (frames[frame + ColorTimeline.A] - a) * percent;\n }\n if (alpha == 1)\n slot.color.set(r, g, b, a);\n else {\n var color = slot.color;\n if (blend == MixBlend.setup)\n color.setFromColor(slot.data.color);\n color.add((r - color.r) * alpha, (g - color.g) * alpha, (b - color.b) * alpha, (a - color.a) * alpha);\n }\n };\n ColorTimeline.ENTRIES = 5;\n ColorTimeline.PREV_TIME = -5;\n ColorTimeline.PREV_R = -4;\n ColorTimeline.PREV_G = -3;\n ColorTimeline.PREV_B = -2;\n ColorTimeline.PREV_A = -1;\n ColorTimeline.R = 1;\n ColorTimeline.G = 2;\n ColorTimeline.B = 3;\n ColorTimeline.A = 4;\n return ColorTimeline;\n }(CurveTimeline));\n spine.ColorTimeline = ColorTimeline;\n var TwoColorTimeline = (function (_super) {\n __extends(TwoColorTimeline, _super);\n function TwoColorTimeline(frameCount) {\n var _this = _super.call(this, frameCount) || this;\n _this.frames = spine.Utils.newFloatArray(frameCount * TwoColorTimeline.ENTRIES);\n return _this;\n }\n TwoColorTimeline.prototype.getPropertyId = function () {\n return (TimelineType.twoColor << 24) + this.slotIndex;\n };\n TwoColorTimeline.prototype.setFrame = function (frameIndex, time, r, g, b, a, r2, g2, b2) {\n frameIndex *= TwoColorTimeline.ENTRIES;\n this.frames[frameIndex] = time;\n this.frames[frameIndex + TwoColorTimeline.R] = r;\n this.frames[frameIndex + TwoColorTimeline.G] = g;\n this.frames[frameIndex + TwoColorTimeline.B] = b;\n this.frames[frameIndex + TwoColorTimeline.A] = a;\n this.frames[frameIndex + TwoColorTimeline.R2] = r2;\n this.frames[frameIndex + TwoColorTimeline.G2] = g2;\n this.frames[frameIndex + TwoColorTimeline.B2] = b2;\n };\n TwoColorTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {\n var slot = skeleton.slots[this.slotIndex];\n if (!slot.bone.active)\n return;\n var frames = this.frames;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n slot.color.setFromColor(slot.data.color);\n slot.darkColor.setFromColor(slot.data.darkColor);\n return;\n case MixBlend.first:\n var light = slot.color, dark = slot.darkColor, setupLight = slot.data.color, setupDark = slot.data.darkColor;\n light.add((setupLight.r - light.r) * alpha, (setupLight.g - light.g) * alpha, (setupLight.b - light.b) * alpha, (setupLight.a - light.a) * alpha);\n dark.add((setupDark.r - dark.r) * alpha, (setupDark.g - dark.g) * alpha, (setupDark.b - dark.b) * alpha, 0);\n }\n return;\n }\n var r = 0, g = 0, b = 0, a = 0, r2 = 0, g2 = 0, b2 = 0;\n if (time >= frames[frames.length - TwoColorTimeline.ENTRIES]) {\n var i = frames.length;\n r = frames[i + TwoColorTimeline.PREV_R];\n g = frames[i + TwoColorTimeline.PREV_G];\n b = frames[i + TwoColorTimeline.PREV_B];\n a = frames[i + TwoColorTimeline.PREV_A];\n r2 = frames[i + TwoColorTimeline.PREV_R2];\n g2 = frames[i + TwoColorTimeline.PREV_G2];\n b2 = frames[i + TwoColorTimeline.PREV_B2];\n }\n else {\n var frame = Animation.binarySearch(frames, time, TwoColorTimeline.ENTRIES);\n r = frames[frame + TwoColorTimeline.PREV_R];\n g = frames[frame + TwoColorTimeline.PREV_G];\n b = frames[frame + TwoColorTimeline.PREV_B];\n a = frames[frame + TwoColorTimeline.PREV_A];\n r2 = frames[frame + TwoColorTimeline.PREV_R2];\n g2 = frames[frame + TwoColorTimeline.PREV_G2];\n b2 = frames[frame + TwoColorTimeline.PREV_B2];\n var frameTime = frames[frame];\n var percent = this.getCurvePercent(frame / TwoColorTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + TwoColorTimeline.PREV_TIME] - frameTime));\n r += (frames[frame + TwoColorTimeline.R] - r) * percent;\n g += (frames[frame + TwoColorTimeline.G] - g) * percent;\n b += (frames[frame + TwoColorTimeline.B] - b) * percent;\n a += (frames[frame + TwoColorTimeline.A] - a) * percent;\n r2 += (frames[frame + TwoColorTimeline.R2] - r2) * percent;\n g2 += (frames[frame + TwoColorTimeline.G2] - g2) * percent;\n b2 += (frames[frame + TwoColorTimeline.B2] - b2) * percent;\n }\n if (alpha == 1) {\n slot.color.set(r, g, b, a);\n slot.darkColor.set(r2, g2, b2, 1);\n }\n else {\n var light = slot.color, dark = slot.darkColor;\n if (blend == MixBlend.setup) {\n light.setFromColor(slot.data.color);\n dark.setFromColor(slot.data.darkColor);\n }\n light.add((r - light.r) * alpha, (g - light.g) * alpha, (b - light.b) * alpha, (a - light.a) * alpha);\n dark.add((r2 - dark.r) * alpha, (g2 - dark.g) * alpha, (b2 - dark.b) * alpha, 0);\n }\n };\n TwoColorTimeline.ENTRIES = 8;\n TwoColorTimeline.PREV_TIME = -8;\n TwoColorTimeline.PREV_R = -7;\n TwoColorTimeline.PREV_G = -6;\n TwoColorTimeline.PREV_B = -5;\n TwoColorTimeline.PREV_A = -4;\n TwoColorTimeline.PREV_R2 = -3;\n TwoColorTimeline.PREV_G2 = -2;\n TwoColorTimeline.PREV_B2 = -1;\n TwoColorTimeline.R = 1;\n TwoColorTimeline.G = 2;\n TwoColorTimeline.B = 3;\n TwoColorTimeline.A = 4;\n TwoColorTimeline.R2 = 5;\n TwoColorTimeline.G2 = 6;\n TwoColorTimeline.B2 = 7;\n return TwoColorTimeline;\n }(CurveTimeline));\n spine.TwoColorTimeline = TwoColorTimeline;\n var AttachmentTimeline = (function () {\n function AttachmentTimeline(frameCount) {\n this.frames = spine.Utils.newFloatArray(frameCount);\n this.attachmentNames = new Array(frameCount);\n }\n AttachmentTimeline.prototype.getPropertyId = function () {\n return (TimelineType.attachment << 24) + this.slotIndex;\n };\n AttachmentTimeline.prototype.getFrameCount = function () {\n return this.frames.length;\n };\n AttachmentTimeline.prototype.setFrame = function (frameIndex, time, attachmentName) {\n this.frames[frameIndex] = time;\n this.attachmentNames[frameIndex] = attachmentName;\n };\n AttachmentTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {\n var slot = skeleton.slots[this.slotIndex];\n if (!slot.bone.active)\n return;\n if (direction == MixDirection.mixOut && blend == MixBlend.setup) {\n var attachmentName_1 = slot.data.attachmentName;\n slot.setAttachment(attachmentName_1 == null ? null : skeleton.getAttachment(this.slotIndex, attachmentName_1));\n return;\n }\n var frames = this.frames;\n if (time < frames[0]) {\n if (blend == MixBlend.setup || blend == MixBlend.first) {\n var attachmentName_2 = slot.data.attachmentName;\n slot.setAttachment(attachmentName_2 == null ? null : skeleton.getAttachment(this.slotIndex, attachmentName_2));\n }\n return;\n }\n var frameIndex = 0;\n if (time >= frames[frames.length - 1])\n frameIndex = frames.length - 1;\n else\n frameIndex = Animation.binarySearch(frames, time, 1) - 1;\n var attachmentName = this.attachmentNames[frameIndex];\n skeleton.slots[this.slotIndex]\n .setAttachment(attachmentName == null ? null : skeleton.getAttachment(this.slotIndex, attachmentName));\n };\n return AttachmentTimeline;\n }());\n spine.AttachmentTimeline = AttachmentTimeline;\n var zeros = null;\n var DeformTimeline = (function (_super) {\n __extends(DeformTimeline, _super);\n function DeformTimeline(frameCount) {\n var _this = _super.call(this, frameCount) || this;\n _this.frames = spine.Utils.newFloatArray(frameCount);\n _this.frameVertices = new Array(frameCount);\n if (zeros == null)\n zeros = spine.Utils.newFloatArray(64);\n return _this;\n }\n DeformTimeline.prototype.getPropertyId = function () {\n return (TimelineType.deform << 27) + +this.attachment.id + this.slotIndex;\n };\n DeformTimeline.prototype.setFrame = function (frameIndex, time, vertices) {\n this.frames[frameIndex] = time;\n this.frameVertices[frameIndex] = vertices;\n };\n DeformTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n var slot = skeleton.slots[this.slotIndex];\n if (!slot.bone.active)\n return;\n var slotAttachment = slot.getAttachment();\n if (!(slotAttachment instanceof spine.VertexAttachment) || !(slotAttachment.deformAttachment == this.attachment))\n return;\n var deformArray = slot.deform;\n if (deformArray.length == 0)\n blend = MixBlend.setup;\n var frameVertices = this.frameVertices;\n var vertexCount = frameVertices[0].length;\n var frames = this.frames;\n if (time < frames[0]) {\n var vertexAttachment = slotAttachment;\n switch (blend) {\n case MixBlend.setup:\n deformArray.length = 0;\n return;\n case MixBlend.first:\n if (alpha == 1) {\n deformArray.length = 0;\n break;\n }\n var deform_1 = spine.Utils.setArraySize(deformArray, vertexCount);\n if (vertexAttachment.bones == null) {\n var setupVertices = vertexAttachment.vertices;\n for (var i = 0; i < vertexCount; i++)\n deform_1[i] += (setupVertices[i] - deform_1[i]) * alpha;\n }\n else {\n alpha = 1 - alpha;\n for (var i = 0; i < vertexCount; i++)\n deform_1[i] *= alpha;\n }\n }\n return;\n }\n var deform = spine.Utils.setArraySize(deformArray, vertexCount);\n if (time >= frames[frames.length - 1]) {\n var lastVertices = frameVertices[frames.length - 1];\n if (alpha == 1) {\n if (blend == MixBlend.add) {\n var vertexAttachment = slotAttachment;\n if (vertexAttachment.bones == null) {\n var setupVertices = vertexAttachment.vertices;\n for (var i_1 = 0; i_1 < vertexCount; i_1++) {\n deform[i_1] += lastVertices[i_1] - setupVertices[i_1];\n }\n }\n else {\n for (var i_2 = 0; i_2 < vertexCount; i_2++)\n deform[i_2] += lastVertices[i_2];\n }\n }\n else {\n spine.Utils.arrayCopy(lastVertices, 0, deform, 0, vertexCount);\n }\n }\n else {\n switch (blend) {\n case MixBlend.setup: {\n var vertexAttachment_1 = slotAttachment;\n if (vertexAttachment_1.bones == null) {\n var setupVertices = vertexAttachment_1.vertices;\n for (var i_3 = 0; i_3 < vertexCount; i_3++) {\n var setup = setupVertices[i_3];\n deform[i_3] = setup + (lastVertices[i_3] - setup) * alpha;\n }\n }\n else {\n for (var i_4 = 0; i_4 < vertexCount; i_4++)\n deform[i_4] = lastVertices[i_4] * alpha;\n }\n break;\n }\n case MixBlend.first:\n case MixBlend.replace:\n for (var i_5 = 0; i_5 < vertexCount; i_5++)\n deform[i_5] += (lastVertices[i_5] - deform[i_5]) * alpha;\n case MixBlend.add:\n var vertexAttachment = slotAttachment;\n if (vertexAttachment.bones == null) {\n var setupVertices = vertexAttachment.vertices;\n for (var i_6 = 0; i_6 < vertexCount; i_6++) {\n deform[i_6] += (lastVertices[i_6] - setupVertices[i_6]) * alpha;\n }\n }\n else {\n for (var i_7 = 0; i_7 < vertexCount; i_7++)\n deform[i_7] += lastVertices[i_7] * alpha;\n }\n }\n }\n return;\n }\n var frame = Animation.binarySearch(frames, time);\n var prevVertices = frameVertices[frame - 1];\n var nextVertices = frameVertices[frame];\n var frameTime = frames[frame];\n var percent = this.getCurvePercent(frame - 1, 1 - (time - frameTime) / (frames[frame - 1] - frameTime));\n if (alpha == 1) {\n if (blend == MixBlend.add) {\n var vertexAttachment = slotAttachment;\n if (vertexAttachment.bones == null) {\n var setupVertices = vertexAttachment.vertices;\n for (var i_8 = 0; i_8 < vertexCount; i_8++) {\n var prev = prevVertices[i_8];\n deform[i_8] += prev + (nextVertices[i_8] - prev) * percent - setupVertices[i_8];\n }\n }\n else {\n for (var i_9 = 0; i_9 < vertexCount; i_9++) {\n var prev = prevVertices[i_9];\n deform[i_9] += prev + (nextVertices[i_9] - prev) * percent;\n }\n }\n }\n else {\n for (var i_10 = 0; i_10 < vertexCount; i_10++) {\n var prev = prevVertices[i_10];\n deform[i_10] = prev + (nextVertices[i_10] - prev) * percent;\n }\n }\n }\n else {\n switch (blend) {\n case MixBlend.setup: {\n var vertexAttachment_2 = slotAttachment;\n if (vertexAttachment_2.bones == null) {\n var setupVertices = vertexAttachment_2.vertices;\n for (var i_11 = 0; i_11 < vertexCount; i_11++) {\n var prev = prevVertices[i_11], setup = setupVertices[i_11];\n deform[i_11] = setup + (prev + (nextVertices[i_11] - prev) * percent - setup) * alpha;\n }\n }\n else {\n for (var i_12 = 0; i_12 < vertexCount; i_12++) {\n var prev = prevVertices[i_12];\n deform[i_12] = (prev + (nextVertices[i_12] - prev) * percent) * alpha;\n }\n }\n break;\n }\n case MixBlend.first:\n case MixBlend.replace:\n for (var i_13 = 0; i_13 < vertexCount; i_13++) {\n var prev = prevVertices[i_13];\n deform[i_13] += (prev + (nextVertices[i_13] - prev) * percent - deform[i_13]) * alpha;\n }\n break;\n case MixBlend.add:\n var vertexAttachment = slotAttachment;\n if (vertexAttachment.bones == null) {\n var setupVertices = vertexAttachment.vertices;\n for (var i_14 = 0; i_14 < vertexCount; i_14++) {\n var prev = prevVertices[i_14];\n deform[i_14] += (prev + (nextVertices[i_14] - prev) * percent - setupVertices[i_14]) * alpha;\n }\n }\n else {\n for (var i_15 = 0; i_15 < vertexCount; i_15++) {\n var prev = prevVertices[i_15];\n deform[i_15] += (prev + (nextVertices[i_15] - prev) * percent) * alpha;\n }\n }\n }\n }\n };\n return DeformTimeline;\n }(CurveTimeline));\n spine.DeformTimeline = DeformTimeline;\n var EventTimeline = (function () {\n function EventTimeline(frameCount) {\n this.frames = spine.Utils.newFloatArray(frameCount);\n this.events = new Array(frameCount);\n }\n EventTimeline.prototype.getPropertyId = function () {\n return TimelineType.event << 24;\n };\n EventTimeline.prototype.getFrameCount = function () {\n return this.frames.length;\n };\n EventTimeline.prototype.setFrame = function (frameIndex, event) {\n this.frames[frameIndex] = event.time;\n this.events[frameIndex] = event;\n };\n EventTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n if (firedEvents == null)\n return;\n var frames = this.frames;\n var frameCount = this.frames.length;\n if (lastTime > time) {\n this.apply(skeleton, lastTime, Number.MAX_VALUE, firedEvents, alpha, blend, direction);\n lastTime = -1;\n }\n else if (lastTime >= frames[frameCount - 1])\n return;\n if (time < frames[0])\n return;\n var frame = 0;\n if (lastTime < frames[0])\n frame = 0;\n else {\n frame = Animation.binarySearch(frames, lastTime);\n var frameTime = frames[frame];\n while (frame > 0) {\n if (frames[frame - 1] != frameTime)\n break;\n frame--;\n }\n }\n for (; frame < frameCount && time >= frames[frame]; frame++)\n firedEvents.push(this.events[frame]);\n };\n return EventTimeline;\n }());\n spine.EventTimeline = EventTimeline;\n var DrawOrderTimeline = (function () {\n function DrawOrderTimeline(frameCount) {\n this.frames = spine.Utils.newFloatArray(frameCount);\n this.drawOrders = new Array(frameCount);\n }\n DrawOrderTimeline.prototype.getPropertyId = function () {\n return TimelineType.drawOrder << 24;\n };\n DrawOrderTimeline.prototype.getFrameCount = function () {\n return this.frames.length;\n };\n DrawOrderTimeline.prototype.setFrame = function (frameIndex, time, drawOrder) {\n this.frames[frameIndex] = time;\n this.drawOrders[frameIndex] = drawOrder;\n };\n DrawOrderTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n var drawOrder = skeleton.drawOrder;\n var slots = skeleton.slots;\n if (direction == MixDirection.mixOut && blend == MixBlend.setup) {\n spine.Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length);\n return;\n }\n var frames = this.frames;\n if (time < frames[0]) {\n if (blend == MixBlend.setup || blend == MixBlend.first)\n spine.Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length);\n return;\n }\n var frame = 0;\n if (time >= frames[frames.length - 1])\n frame = frames.length - 1;\n else\n frame = Animation.binarySearch(frames, time) - 1;\n var drawOrderToSetupIndex = this.drawOrders[frame];\n if (drawOrderToSetupIndex == null)\n spine.Utils.arrayCopy(slots, 0, drawOrder, 0, slots.length);\n else {\n for (var i = 0, n = drawOrderToSetupIndex.length; i < n; i++)\n drawOrder[i] = slots[drawOrderToSetupIndex[i]];\n }\n };\n return DrawOrderTimeline;\n }());\n spine.DrawOrderTimeline = DrawOrderTimeline;\n var IkConstraintTimeline = (function (_super) {\n __extends(IkConstraintTimeline, _super);\n function IkConstraintTimeline(frameCount) {\n var _this = _super.call(this, frameCount) || this;\n _this.frames = spine.Utils.newFloatArray(frameCount * IkConstraintTimeline.ENTRIES);\n return _this;\n }\n IkConstraintTimeline.prototype.getPropertyId = function () {\n return (TimelineType.ikConstraint << 24) + this.ikConstraintIndex;\n };\n IkConstraintTimeline.prototype.setFrame = function (frameIndex, time, mix, softness, bendDirection, compress, stretch) {\n frameIndex *= IkConstraintTimeline.ENTRIES;\n this.frames[frameIndex] = time;\n this.frames[frameIndex + IkConstraintTimeline.MIX] = mix;\n this.frames[frameIndex + IkConstraintTimeline.SOFTNESS] = softness;\n this.frames[frameIndex + IkConstraintTimeline.BEND_DIRECTION] = bendDirection;\n this.frames[frameIndex + IkConstraintTimeline.COMPRESS] = compress ? 1 : 0;\n this.frames[frameIndex + IkConstraintTimeline.STRETCH] = stretch ? 1 : 0;\n };\n IkConstraintTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n var frames = this.frames;\n var constraint = skeleton.ikConstraints[this.ikConstraintIndex];\n if (!constraint.active)\n return;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n constraint.mix = constraint.data.mix;\n constraint.softness = constraint.data.softness;\n constraint.bendDirection = constraint.data.bendDirection;\n constraint.compress = constraint.data.compress;\n constraint.stretch = constraint.data.stretch;\n return;\n case MixBlend.first:\n constraint.mix += (constraint.data.mix - constraint.mix) * alpha;\n constraint.softness += (constraint.data.softness - constraint.softness) * alpha;\n constraint.bendDirection = constraint.data.bendDirection;\n constraint.compress = constraint.data.compress;\n constraint.stretch = constraint.data.stretch;\n }\n return;\n }\n if (time >= frames[frames.length - IkConstraintTimeline.ENTRIES]) {\n if (blend == MixBlend.setup) {\n constraint.mix = constraint.data.mix + (frames[frames.length + IkConstraintTimeline.PREV_MIX] - constraint.data.mix) * alpha;\n constraint.softness = constraint.data.softness\n + (frames[frames.length + IkConstraintTimeline.PREV_SOFTNESS] - constraint.data.softness) * alpha;\n if (direction == MixDirection.mixOut) {\n constraint.bendDirection = constraint.data.bendDirection;\n constraint.compress = constraint.data.compress;\n constraint.stretch = constraint.data.stretch;\n }\n else {\n constraint.bendDirection = frames[frames.length + IkConstraintTimeline.PREV_BEND_DIRECTION];\n constraint.compress = frames[frames.length + IkConstraintTimeline.PREV_COMPRESS] != 0;\n constraint.stretch = frames[frames.length + IkConstraintTimeline.PREV_STRETCH] != 0;\n }\n }\n else {\n constraint.mix += (frames[frames.length + IkConstraintTimeline.PREV_MIX] - constraint.mix) * alpha;\n constraint.softness += (frames[frames.length + IkConstraintTimeline.PREV_SOFTNESS] - constraint.softness) * alpha;\n if (direction == MixDirection.mixIn) {\n constraint.bendDirection = frames[frames.length + IkConstraintTimeline.PREV_BEND_DIRECTION];\n constraint.compress = frames[frames.length + IkConstraintTimeline.PREV_COMPRESS] != 0;\n constraint.stretch = frames[frames.length + IkConstraintTimeline.PREV_STRETCH] != 0;\n }\n }\n return;\n }\n var frame = Animation.binarySearch(frames, time, IkConstraintTimeline.ENTRIES);\n var mix = frames[frame + IkConstraintTimeline.PREV_MIX];\n var softness = frames[frame + IkConstraintTimeline.PREV_SOFTNESS];\n var frameTime = frames[frame];\n var percent = this.getCurvePercent(frame / IkConstraintTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + IkConstraintTimeline.PREV_TIME] - frameTime));\n if (blend == MixBlend.setup) {\n constraint.mix = constraint.data.mix + (mix + (frames[frame + IkConstraintTimeline.MIX] - mix) * percent - constraint.data.mix) * alpha;\n constraint.softness = constraint.data.softness\n + (softness + (frames[frame + IkConstraintTimeline.SOFTNESS] - softness) * percent - constraint.data.softness) * alpha;\n if (direction == MixDirection.mixOut) {\n constraint.bendDirection = constraint.data.bendDirection;\n constraint.compress = constraint.data.compress;\n constraint.stretch = constraint.data.stretch;\n }\n else {\n constraint.bendDirection = frames[frame + IkConstraintTimeline.PREV_BEND_DIRECTION];\n constraint.compress = frames[frame + IkConstraintTimeline.PREV_COMPRESS] != 0;\n constraint.stretch = frames[frame + IkConstraintTimeline.PREV_STRETCH] != 0;\n }\n }\n else {\n constraint.mix += (mix + (frames[frame + IkConstraintTimeline.MIX] - mix) * percent - constraint.mix) * alpha;\n constraint.softness += (softness + (frames[frame + IkConstraintTimeline.SOFTNESS] - softness) * percent - constraint.softness) * alpha;\n if (direction == MixDirection.mixIn) {\n constraint.bendDirection = frames[frame + IkConstraintTimeline.PREV_BEND_DIRECTION];\n constraint.compress = frames[frame + IkConstraintTimeline.PREV_COMPRESS] != 0;\n constraint.stretch = frames[frame + IkConstraintTimeline.PREV_STRETCH] != 0;\n }\n }\n };\n IkConstraintTimeline.ENTRIES = 6;\n IkConstraintTimeline.PREV_TIME = -6;\n IkConstraintTimeline.PREV_MIX = -5;\n IkConstraintTimeline.PREV_SOFTNESS = -4;\n IkConstraintTimeline.PREV_BEND_DIRECTION = -3;\n IkConstraintTimeline.PREV_COMPRESS = -2;\n IkConstraintTimeline.PREV_STRETCH = -1;\n IkConstraintTimeline.MIX = 1;\n IkConstraintTimeline.SOFTNESS = 2;\n IkConstraintTimeline.BEND_DIRECTION = 3;\n IkConstraintTimeline.COMPRESS = 4;\n IkConstraintTimeline.STRETCH = 5;\n return IkConstraintTimeline;\n }(CurveTimeline));\n spine.IkConstraintTimeline = IkConstraintTimeline;\n var TransformConstraintTimeline = (function (_super) {\n __extends(TransformConstraintTimeline, _super);\n function TransformConstraintTimeline(frameCount) {\n var _this = _super.call(this, frameCount) || this;\n _this.frames = spine.Utils.newFloatArray(frameCount * TransformConstraintTimeline.ENTRIES);\n return _this;\n }\n TransformConstraintTimeline.prototype.getPropertyId = function () {\n return (TimelineType.transformConstraint << 24) + this.transformConstraintIndex;\n };\n TransformConstraintTimeline.prototype.setFrame = function (frameIndex, time, rotateMix, translateMix, scaleMix, shearMix) {\n frameIndex *= TransformConstraintTimeline.ENTRIES;\n this.frames[frameIndex] = time;\n this.frames[frameIndex + TransformConstraintTimeline.ROTATE] = rotateMix;\n this.frames[frameIndex + TransformConstraintTimeline.TRANSLATE] = translateMix;\n this.frames[frameIndex + TransformConstraintTimeline.SCALE] = scaleMix;\n this.frames[frameIndex + TransformConstraintTimeline.SHEAR] = shearMix;\n };\n TransformConstraintTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n var frames = this.frames;\n var constraint = skeleton.transformConstraints[this.transformConstraintIndex];\n if (!constraint.active)\n return;\n if (time < frames[0]) {\n var data = constraint.data;\n switch (blend) {\n case MixBlend.setup:\n constraint.rotateMix = data.rotateMix;\n constraint.translateMix = data.translateMix;\n constraint.scaleMix = data.scaleMix;\n constraint.shearMix = data.shearMix;\n return;\n case MixBlend.first:\n constraint.rotateMix += (data.rotateMix - constraint.rotateMix) * alpha;\n constraint.translateMix += (data.translateMix - constraint.translateMix) * alpha;\n constraint.scaleMix += (data.scaleMix - constraint.scaleMix) * alpha;\n constraint.shearMix += (data.shearMix - constraint.shearMix) * alpha;\n }\n return;\n }\n var rotate = 0, translate = 0, scale = 0, shear = 0;\n if (time >= frames[frames.length - TransformConstraintTimeline.ENTRIES]) {\n var i = frames.length;\n rotate = frames[i + TransformConstraintTimeline.PREV_ROTATE];\n translate = frames[i + TransformConstraintTimeline.PREV_TRANSLATE];\n scale = frames[i + TransformConstraintTimeline.PREV_SCALE];\n shear = frames[i + TransformConstraintTimeline.PREV_SHEAR];\n }\n else {\n var frame = Animation.binarySearch(frames, time, TransformConstraintTimeline.ENTRIES);\n rotate = frames[frame + TransformConstraintTimeline.PREV_ROTATE];\n translate = frames[frame + TransformConstraintTimeline.PREV_TRANSLATE];\n scale = frames[frame + TransformConstraintTimeline.PREV_SCALE];\n shear = frames[frame + TransformConstraintTimeline.PREV_SHEAR];\n var frameTime = frames[frame];\n var percent = this.getCurvePercent(frame / TransformConstraintTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + TransformConstraintTimeline.PREV_TIME] - frameTime));\n rotate += (frames[frame + TransformConstraintTimeline.ROTATE] - rotate) * percent;\n translate += (frames[frame + TransformConstraintTimeline.TRANSLATE] - translate) * percent;\n scale += (frames[frame + TransformConstraintTimeline.SCALE] - scale) * percent;\n shear += (frames[frame + TransformConstraintTimeline.SHEAR] - shear) * percent;\n }\n if (blend == MixBlend.setup) {\n var data = constraint.data;\n constraint.rotateMix = data.rotateMix + (rotate - data.rotateMix) * alpha;\n constraint.translateMix = data.translateMix + (translate - data.translateMix) * alpha;\n constraint.scaleMix = data.scaleMix + (scale - data.scaleMix) * alpha;\n constraint.shearMix = data.shearMix + (shear - data.shearMix) * alpha;\n }\n else {\n constraint.rotateMix += (rotate - constraint.rotateMix) * alpha;\n constraint.translateMix += (translate - constraint.translateMix) * alpha;\n constraint.scaleMix += (scale - constraint.scaleMix) * alpha;\n constraint.shearMix += (shear - constraint.shearMix) * alpha;\n }\n };\n TransformConstraintTimeline.ENTRIES = 5;\n TransformConstraintTimeline.PREV_TIME = -5;\n TransformConstraintTimeline.PREV_ROTATE = -4;\n TransformConstraintTimeline.PREV_TRANSLATE = -3;\n TransformConstraintTimeline.PREV_SCALE = -2;\n TransformConstraintTimeline.PREV_SHEAR = -1;\n TransformConstraintTimeline.ROTATE = 1;\n TransformConstraintTimeline.TRANSLATE = 2;\n TransformConstraintTimeline.SCALE = 3;\n TransformConstraintTimeline.SHEAR = 4;\n return TransformConstraintTimeline;\n }(CurveTimeline));\n spine.TransformConstraintTimeline = TransformConstraintTimeline;\n var PathConstraintPositionTimeline = (function (_super) {\n __extends(PathConstraintPositionTimeline, _super);\n function PathConstraintPositionTimeline(frameCount) {\n var _this = _super.call(this, frameCount) || this;\n _this.frames = spine.Utils.newFloatArray(frameCount * PathConstraintPositionTimeline.ENTRIES);\n return _this;\n }\n PathConstraintPositionTimeline.prototype.getPropertyId = function () {\n return (TimelineType.pathConstraintPosition << 24) + this.pathConstraintIndex;\n };\n PathConstraintPositionTimeline.prototype.setFrame = function (frameIndex, time, value) {\n frameIndex *= PathConstraintPositionTimeline.ENTRIES;\n this.frames[frameIndex] = time;\n this.frames[frameIndex + PathConstraintPositionTimeline.VALUE] = value;\n };\n PathConstraintPositionTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n var frames = this.frames;\n var constraint = skeleton.pathConstraints[this.pathConstraintIndex];\n if (!constraint.active)\n return;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n constraint.position = constraint.data.position;\n return;\n case MixBlend.first:\n constraint.position += (constraint.data.position - constraint.position) * alpha;\n }\n return;\n }\n var position = 0;\n if (time >= frames[frames.length - PathConstraintPositionTimeline.ENTRIES])\n position = frames[frames.length + PathConstraintPositionTimeline.PREV_VALUE];\n else {\n var frame = Animation.binarySearch(frames, time, PathConstraintPositionTimeline.ENTRIES);\n position = frames[frame + PathConstraintPositionTimeline.PREV_VALUE];\n var frameTime = frames[frame];\n var percent = this.getCurvePercent(frame / PathConstraintPositionTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PathConstraintPositionTimeline.PREV_TIME] - frameTime));\n position += (frames[frame + PathConstraintPositionTimeline.VALUE] - position) * percent;\n }\n if (blend == MixBlend.setup)\n constraint.position = constraint.data.position + (position - constraint.data.position) * alpha;\n else\n constraint.position += (position - constraint.position) * alpha;\n };\n PathConstraintPositionTimeline.ENTRIES = 2;\n PathConstraintPositionTimeline.PREV_TIME = -2;\n PathConstraintPositionTimeline.PREV_VALUE = -1;\n PathConstraintPositionTimeline.VALUE = 1;\n return PathConstraintPositionTimeline;\n }(CurveTimeline));\n spine.PathConstraintPositionTimeline = PathConstraintPositionTimeline;\n var PathConstraintSpacingTimeline = (function (_super) {\n __extends(PathConstraintSpacingTimeline, _super);\n function PathConstraintSpacingTimeline(frameCount) {\n return _super.call(this, frameCount) || this;\n }\n PathConstraintSpacingTimeline.prototype.getPropertyId = function () {\n return (TimelineType.pathConstraintSpacing << 24) + this.pathConstraintIndex;\n };\n PathConstraintSpacingTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n var frames = this.frames;\n var constraint = skeleton.pathConstraints[this.pathConstraintIndex];\n if (!constraint.active)\n return;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n constraint.spacing = constraint.data.spacing;\n return;\n case MixBlend.first:\n constraint.spacing += (constraint.data.spacing - constraint.spacing) * alpha;\n }\n return;\n }\n var spacing = 0;\n if (time >= frames[frames.length - PathConstraintSpacingTimeline.ENTRIES])\n spacing = frames[frames.length + PathConstraintSpacingTimeline.PREV_VALUE];\n else {\n var frame = Animation.binarySearch(frames, time, PathConstraintSpacingTimeline.ENTRIES);\n spacing = frames[frame + PathConstraintSpacingTimeline.PREV_VALUE];\n var frameTime = frames[frame];\n var percent = this.getCurvePercent(frame / PathConstraintSpacingTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PathConstraintSpacingTimeline.PREV_TIME] - frameTime));\n spacing += (frames[frame + PathConstraintSpacingTimeline.VALUE] - spacing) * percent;\n }\n if (blend == MixBlend.setup)\n constraint.spacing = constraint.data.spacing + (spacing - constraint.data.spacing) * alpha;\n else\n constraint.spacing += (spacing - constraint.spacing) * alpha;\n };\n return PathConstraintSpacingTimeline;\n }(PathConstraintPositionTimeline));\n spine.PathConstraintSpacingTimeline = PathConstraintSpacingTimeline;\n var PathConstraintMixTimeline = (function (_super) {\n __extends(PathConstraintMixTimeline, _super);\n function PathConstraintMixTimeline(frameCount) {\n var _this = _super.call(this, frameCount) || this;\n _this.frames = spine.Utils.newFloatArray(frameCount * PathConstraintMixTimeline.ENTRIES);\n return _this;\n }\n PathConstraintMixTimeline.prototype.getPropertyId = function () {\n return (TimelineType.pathConstraintMix << 24) + this.pathConstraintIndex;\n };\n PathConstraintMixTimeline.prototype.setFrame = function (frameIndex, time, rotateMix, translateMix) {\n frameIndex *= PathConstraintMixTimeline.ENTRIES;\n this.frames[frameIndex] = time;\n this.frames[frameIndex + PathConstraintMixTimeline.ROTATE] = rotateMix;\n this.frames[frameIndex + PathConstraintMixTimeline.TRANSLATE] = translateMix;\n };\n PathConstraintMixTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n var frames = this.frames;\n var constraint = skeleton.pathConstraints[this.pathConstraintIndex];\n if (!constraint.active)\n return;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n constraint.rotateMix = constraint.data.rotateMix;\n constraint.translateMix = constraint.data.translateMix;\n return;\n case MixBlend.first:\n constraint.rotateMix += (constraint.data.rotateMix - constraint.rotateMix) * alpha;\n constraint.translateMix += (constraint.data.translateMix - constraint.translateMix) * alpha;\n }\n return;\n }\n var rotate = 0, translate = 0;\n if (time >= frames[frames.length - PathConstraintMixTimeline.ENTRIES]) {\n rotate = frames[frames.length + PathConstraintMixTimeline.PREV_ROTATE];\n translate = frames[frames.length + PathConstraintMixTimeline.PREV_TRANSLATE];\n }\n else {\n var frame = Animation.binarySearch(frames, time, PathConstraintMixTimeline.ENTRIES);\n rotate = frames[frame + PathConstraintMixTimeline.PREV_ROTATE];\n translate = frames[frame + PathConstraintMixTimeline.PREV_TRANSLATE];\n var frameTime = frames[frame];\n var percent = this.getCurvePercent(frame / PathConstraintMixTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PathConstraintMixTimeline.PREV_TIME] - frameTime));\n rotate += (frames[frame + PathConstraintMixTimeline.ROTATE] - rotate) * percent;\n translate += (frames[frame + PathConstraintMixTimeline.TRANSLATE] - translate) * percent;\n }\n if (blend == MixBlend.setup) {\n constraint.rotateMix = constraint.data.rotateMix + (rotate - constraint.data.rotateMix) * alpha;\n constraint.translateMix = constraint.data.translateMix + (translate - constraint.data.translateMix) * alpha;\n }\n else {\n constraint.rotateMix += (rotate - constraint.rotateMix) * alpha;\n constraint.translateMix += (translate - constraint.translateMix) * alpha;\n }\n };\n PathConstraintMixTimeline.ENTRIES = 3;\n PathConstraintMixTimeline.PREV_TIME = -3;\n PathConstraintMixTimeline.PREV_ROTATE = -2;\n PathConstraintMixTimeline.PREV_TRANSLATE = -1;\n PathConstraintMixTimeline.ROTATE = 1;\n PathConstraintMixTimeline.TRANSLATE = 2;\n return PathConstraintMixTimeline;\n }(CurveTimeline));\n spine.PathConstraintMixTimeline = PathConstraintMixTimeline;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var AnimationState = (function () {\n function AnimationState(data) {\n this.tracks = new Array();\n this.timeScale = 1;\n this.events = new Array();\n this.listeners = new Array();\n this.queue = new EventQueue(this);\n this.propertyIDs = new spine.IntSet();\n this.animationsChanged = false;\n this.trackEntryPool = new spine.Pool(function () { return new TrackEntry(); });\n this.data = data;\n }\n AnimationState.prototype.update = function (delta) {\n delta *= this.timeScale;\n var tracks = this.tracks;\n for (var i = 0, n = tracks.length; i < n; i++) {\n var current = tracks[i];\n if (current == null)\n continue;\n current.animationLast = current.nextAnimationLast;\n current.trackLast = current.nextTrackLast;\n var currentDelta = delta * current.timeScale;\n if (current.delay > 0) {\n current.delay -= currentDelta;\n if (current.delay > 0)\n continue;\n currentDelta = -current.delay;\n current.delay = 0;\n }\n var next = current.next;\n if (next != null) {\n var nextTime = current.trackLast - next.delay;\n if (nextTime >= 0) {\n next.delay = 0;\n next.trackTime += current.timeScale == 0 ? 0 : (nextTime / current.timeScale + delta) * next.timeScale;\n current.trackTime += currentDelta;\n this.setCurrent(i, next, true);\n while (next.mixingFrom != null) {\n next.mixTime += delta;\n next = next.mixingFrom;\n }\n continue;\n }\n }\n else if (current.trackLast >= current.trackEnd && current.mixingFrom == null) {\n tracks[i] = null;\n this.queue.end(current);\n this.disposeNext(current);\n continue;\n }\n if (current.mixingFrom != null && this.updateMixingFrom(current, delta)) {\n var from = current.mixingFrom;\n current.mixingFrom = null;\n if (from != null)\n from.mixingTo = null;\n while (from != null) {\n this.queue.end(from);\n from = from.mixingFrom;\n }\n }\n current.trackTime += currentDelta;\n }\n this.queue.drain();\n };\n AnimationState.prototype.updateMixingFrom = function (to, delta) {\n var from = to.mixingFrom;\n if (from == null)\n return true;\n var finished = this.updateMixingFrom(from, delta);\n from.animationLast = from.nextAnimationLast;\n from.trackLast = from.nextTrackLast;\n if (to.mixTime > 0 && to.mixTime >= to.mixDuration) {\n if (from.totalAlpha == 0 || to.mixDuration == 0) {\n to.mixingFrom = from.mixingFrom;\n if (from.mixingFrom != null)\n from.mixingFrom.mixingTo = to;\n to.interruptAlpha = from.interruptAlpha;\n this.queue.end(from);\n }\n return finished;\n }\n from.trackTime += delta * from.timeScale;\n to.mixTime += delta;\n return false;\n };\n AnimationState.prototype.apply = function (skeleton) {\n if (skeleton == null)\n throw new Error(\"skeleton cannot be null.\");\n if (this.animationsChanged)\n this._animationsChanged();\n var events = this.events;\n var tracks = this.tracks;\n var applied = false;\n for (var i = 0, n = tracks.length; i < n; i++) {\n var current = tracks[i];\n if (current == null || current.delay > 0)\n continue;\n applied = true;\n var blend = i == 0 ? spine.MixBlend.first : current.mixBlend;\n var mix = current.alpha;\n if (current.mixingFrom != null)\n mix *= this.applyMixingFrom(current, skeleton, blend);\n else if (current.trackTime >= current.trackEnd && current.next == null)\n mix = 0;\n var animationLast = current.animationLast, animationTime = current.getAnimationTime();\n var timelineCount = current.animation.timelines.length;\n var timelines = current.animation.timelines;\n if ((i == 0 && mix == 1) || blend == spine.MixBlend.add) {\n for (var ii = 0; ii < timelineCount; ii++) {\n spine.Utils.webkit602BugfixHelper(mix, blend);\n timelines[ii].apply(skeleton, animationLast, animationTime, events, mix, blend, spine.MixDirection.mixIn);\n }\n }\n else {\n var timelineMode = current.timelineMode;\n var firstFrame = current.timelinesRotation.length == 0;\n if (firstFrame)\n spine.Utils.setArraySize(current.timelinesRotation, timelineCount << 1, null);\n var timelinesRotation = current.timelinesRotation;\n for (var ii = 0; ii < timelineCount; ii++) {\n var timeline = timelines[ii];\n var timelineBlend = (timelineMode[ii] & (AnimationState.NOT_LAST - 1)) == AnimationState.SUBSEQUENT ? blend : spine.MixBlend.setup;\n if (timeline instanceof spine.RotateTimeline) {\n this.applyRotateTimeline(timeline, skeleton, animationTime, mix, timelineBlend, timelinesRotation, ii << 1, firstFrame);\n }\n else {\n spine.Utils.webkit602BugfixHelper(mix, blend);\n timeline.apply(skeleton, animationLast, animationTime, events, mix, timelineBlend, spine.MixDirection.mixIn);\n }\n }\n }\n this.queueEvents(current, animationTime);\n events.length = 0;\n current.nextAnimationLast = animationTime;\n current.nextTrackLast = current.trackTime;\n }\n this.queue.drain();\n return applied;\n };\n AnimationState.prototype.applyMixingFrom = function (to, skeleton, blend) {\n var from = to.mixingFrom;\n if (from.mixingFrom != null)\n this.applyMixingFrom(from, skeleton, blend);\n var mix = 0;\n if (to.mixDuration == 0) {\n mix = 1;\n if (blend == spine.MixBlend.first)\n blend = spine.MixBlend.setup;\n }\n else {\n mix = to.mixTime / to.mixDuration;\n if (mix > 1)\n mix = 1;\n if (blend != spine.MixBlend.first)\n blend = from.mixBlend;\n }\n var events = mix < from.eventThreshold ? this.events : null;\n var attachments = mix < from.attachmentThreshold, drawOrder = mix < from.drawOrderThreshold;\n var animationLast = from.animationLast, animationTime = from.getAnimationTime();\n var timelineCount = from.animation.timelines.length;\n var timelines = from.animation.timelines;\n var alphaHold = from.alpha * to.interruptAlpha, alphaMix = alphaHold * (1 - mix);\n if (blend == spine.MixBlend.add) {\n for (var i = 0; i < timelineCount; i++)\n timelines[i].apply(skeleton, animationLast, animationTime, events, alphaMix, blend, spine.MixDirection.mixOut);\n }\n else {\n var timelineMode = from.timelineMode;\n var timelineHoldMix = from.timelineHoldMix;\n var firstFrame = from.timelinesRotation.length == 0;\n if (firstFrame)\n spine.Utils.setArraySize(from.timelinesRotation, timelineCount << 1, null);\n var timelinesRotation = from.timelinesRotation;\n from.totalAlpha = 0;\n for (var i = 0; i < timelineCount; i++) {\n var timeline = timelines[i];\n var direction = spine.MixDirection.mixOut;\n var timelineBlend = void 0;\n var alpha = 0;\n switch (timelineMode[i] & (AnimationState.NOT_LAST - 1)) {\n case AnimationState.SUBSEQUENT:\n timelineBlend = blend;\n if (!attachments && timeline instanceof spine.AttachmentTimeline) {\n if ((timelineMode[i] & AnimationState.NOT_LAST) == AnimationState.NOT_LAST)\n continue;\n timelineBlend = spine.MixBlend.setup;\n }\n if (!drawOrder && timeline instanceof spine.DrawOrderTimeline)\n continue;\n alpha = alphaMix;\n break;\n case AnimationState.FIRST:\n timelineBlend = spine.MixBlend.setup;\n alpha = alphaMix;\n break;\n case AnimationState.HOLD:\n timelineBlend = spine.MixBlend.setup;\n alpha = alphaHold;\n break;\n default:\n timelineBlend = spine.MixBlend.setup;\n var holdMix = timelineHoldMix[i];\n alpha = alphaHold * Math.max(0, 1 - holdMix.mixTime / holdMix.mixDuration);\n break;\n }\n from.totalAlpha += alpha;\n if (timeline instanceof spine.RotateTimeline)\n this.applyRotateTimeline(timeline, skeleton, animationTime, alpha, timelineBlend, timelinesRotation, i << 1, firstFrame);\n else {\n spine.Utils.webkit602BugfixHelper(alpha, blend);\n if (timelineBlend == spine.MixBlend.setup) {\n if (timeline instanceof spine.AttachmentTimeline) {\n if (attachments || (timelineMode[i] & AnimationState.NOT_LAST) == AnimationState.NOT_LAST)\n direction = spine.MixDirection.mixIn;\n }\n else if (timeline instanceof spine.DrawOrderTimeline) {\n if (drawOrder)\n direction = spine.MixDirection.mixIn;\n }\n }\n timeline.apply(skeleton, animationLast, animationTime, events, alpha, timelineBlend, direction);\n }\n }\n }\n if (to.mixDuration > 0)\n this.queueEvents(from, animationTime);\n this.events.length = 0;\n from.nextAnimationLast = animationTime;\n from.nextTrackLast = from.trackTime;\n return mix;\n };\n AnimationState.prototype.applyRotateTimeline = function (timeline, skeleton, time, alpha, blend, timelinesRotation, i, firstFrame) {\n if (firstFrame)\n timelinesRotation[i] = 0;\n if (alpha == 1) {\n timeline.apply(skeleton, 0, time, null, 1, blend, spine.MixDirection.mixIn);\n return;\n }\n var rotateTimeline = timeline;\n var frames = rotateTimeline.frames;\n var bone = skeleton.bones[rotateTimeline.boneIndex];\n if (!bone.active)\n return;\n var r1 = 0, r2 = 0;\n if (time < frames[0]) {\n switch (blend) {\n case spine.MixBlend.setup:\n bone.rotation = bone.data.rotation;\n default:\n return;\n case spine.MixBlend.first:\n r1 = bone.rotation;\n r2 = bone.data.rotation;\n }\n }\n else {\n r1 = blend == spine.MixBlend.setup ? bone.data.rotation : bone.rotation;\n if (time >= frames[frames.length - spine.RotateTimeline.ENTRIES])\n r2 = bone.data.rotation + frames[frames.length + spine.RotateTimeline.PREV_ROTATION];\n else {\n var frame = spine.Animation.binarySearch(frames, time, spine.RotateTimeline.ENTRIES);\n var prevRotation = frames[frame + spine.RotateTimeline.PREV_ROTATION];\n var frameTime = frames[frame];\n var percent = rotateTimeline.getCurvePercent((frame >> 1) - 1, 1 - (time - frameTime) / (frames[frame + spine.RotateTimeline.PREV_TIME] - frameTime));\n r2 = frames[frame + spine.RotateTimeline.ROTATION] - prevRotation;\n r2 -= (16384 - ((16384.499999999996 - r2 / 360) | 0)) * 360;\n r2 = prevRotation + r2 * percent + bone.data.rotation;\n r2 -= (16384 - ((16384.499999999996 - r2 / 360) | 0)) * 360;\n }\n }\n var total = 0, diff = r2 - r1;\n diff -= (16384 - ((16384.499999999996 - diff / 360) | 0)) * 360;\n if (diff == 0) {\n total = timelinesRotation[i];\n }\n else {\n var lastTotal = 0, lastDiff = 0;\n if (firstFrame) {\n lastTotal = 0;\n lastDiff = diff;\n }\n else {\n lastTotal = timelinesRotation[i];\n lastDiff = timelinesRotation[i + 1];\n }\n var current = diff > 0, dir = lastTotal >= 0;\n if (spine.MathUtils.signum(lastDiff) != spine.MathUtils.signum(diff) && Math.abs(lastDiff) <= 90) {\n if (Math.abs(lastTotal) > 180)\n lastTotal += 360 * spine.MathUtils.signum(lastTotal);\n dir = current;\n }\n total = diff + lastTotal - lastTotal % 360;\n if (dir != current)\n total += 360 * spine.MathUtils.signum(lastTotal);\n timelinesRotation[i] = total;\n }\n timelinesRotation[i + 1] = diff;\n r1 += total * alpha;\n bone.rotation = r1 - (16384 - ((16384.499999999996 - r1 / 360) | 0)) * 360;\n };\n AnimationState.prototype.queueEvents = function (entry, animationTime) {\n var animationStart = entry.animationStart, animationEnd = entry.animationEnd;\n var duration = animationEnd - animationStart;\n var trackLastWrapped = entry.trackLast % duration;\n var events = this.events;\n var i = 0, n = events.length;\n for (; i < n; i++) {\n var event_1 = events[i];\n if (event_1.time < trackLastWrapped)\n break;\n if (event_1.time > animationEnd)\n continue;\n this.queue.event(entry, event_1);\n }\n var complete = false;\n if (entry.loop)\n complete = duration == 0 || trackLastWrapped > entry.trackTime % duration;\n else\n complete = animationTime >= animationEnd && entry.animationLast < animationEnd;\n if (complete)\n this.queue.complete(entry);\n for (; i < n; i++) {\n var event_2 = events[i];\n if (event_2.time < animationStart)\n continue;\n this.queue.event(entry, events[i]);\n }\n };\n AnimationState.prototype.clearTracks = function () {\n var oldDrainDisabled = this.queue.drainDisabled;\n this.queue.drainDisabled = true;\n for (var i = 0, n = this.tracks.length; i < n; i++)\n this.clearTrack(i);\n this.tracks.length = 0;\n this.queue.drainDisabled = oldDrainDisabled;\n this.queue.drain();\n };\n AnimationState.prototype.clearTrack = function (trackIndex) {\n if (trackIndex >= this.tracks.length)\n return;\n var current = this.tracks[trackIndex];\n if (current == null)\n return;\n this.queue.end(current);\n this.disposeNext(current);\n var entry = current;\n while (true) {\n var from = entry.mixingFrom;\n if (from == null)\n break;\n this.queue.end(from);\n entry.mixingFrom = null;\n entry.mixingTo = null;\n entry = from;\n }\n this.tracks[current.trackIndex] = null;\n this.queue.drain();\n };\n AnimationState.prototype.setCurrent = function (index, current, interrupt) {\n var from = this.expandToIndex(index);\n this.tracks[index] = current;\n if (from != null) {\n if (interrupt)\n this.queue.interrupt(from);\n current.mixingFrom = from;\n from.mixingTo = current;\n current.mixTime = 0;\n if (from.mixingFrom != null && from.mixDuration > 0)\n current.interruptAlpha *= Math.min(1, from.mixTime / from.mixDuration);\n from.timelinesRotation.length = 0;\n }\n this.queue.start(current);\n };\n AnimationState.prototype.setAnimation = function (trackIndex, animationName, loop) {\n var animation = this.data.skeletonData.findAnimation(animationName);\n if (animation == null)\n throw new Error(\"Animation not found: \" + animationName);\n return this.setAnimationWith(trackIndex, animation, loop);\n };\n AnimationState.prototype.setAnimationWith = function (trackIndex, animation, loop) {\n if (animation == null)\n throw new Error(\"animation cannot be null.\");\n var interrupt = true;\n var current = this.expandToIndex(trackIndex);\n if (current != null) {\n if (current.nextTrackLast == -1) {\n this.tracks[trackIndex] = current.mixingFrom;\n this.queue.interrupt(current);\n this.queue.end(current);\n this.disposeNext(current);\n current = current.mixingFrom;\n interrupt = false;\n }\n else\n this.disposeNext(current);\n }\n var entry = this.trackEntry(trackIndex, animation, loop, current);\n this.setCurrent(trackIndex, entry, interrupt);\n this.queue.drain();\n return entry;\n };\n AnimationState.prototype.addAnimation = function (trackIndex, animationName, loop, delay) {\n var animation = this.data.skeletonData.findAnimation(animationName);\n if (animation == null)\n throw new Error(\"Animation not found: \" + animationName);\n return this.addAnimationWith(trackIndex, animation, loop, delay);\n };\n AnimationState.prototype.addAnimationWith = function (trackIndex, animation, loop, delay) {\n if (animation == null)\n throw new Error(\"animation cannot be null.\");\n var last = this.expandToIndex(trackIndex);\n if (last != null) {\n while (last.next != null)\n last = last.next;\n }\n var entry = this.trackEntry(trackIndex, animation, loop, last);\n if (last == null) {\n this.setCurrent(trackIndex, entry, true);\n this.queue.drain();\n }\n else {\n last.next = entry;\n if (delay <= 0) {\n var duration = last.animationEnd - last.animationStart;\n if (duration != 0) {\n if (last.loop)\n delay += duration * (1 + ((last.trackTime / duration) | 0));\n else\n delay += Math.max(duration, last.trackTime);\n delay -= this.data.getMix(last.animation, animation);\n }\n else\n delay = last.trackTime;\n }\n }\n entry.delay = delay;\n return entry;\n };\n AnimationState.prototype.setEmptyAnimation = function (trackIndex, mixDuration) {\n var entry = this.setAnimationWith(trackIndex, AnimationState.emptyAnimation, false);\n entry.mixDuration = mixDuration;\n entry.trackEnd = mixDuration;\n return entry;\n };\n AnimationState.prototype.addEmptyAnimation = function (trackIndex, mixDuration, delay) {\n if (delay <= 0)\n delay -= mixDuration;\n var entry = this.addAnimationWith(trackIndex, AnimationState.emptyAnimation, false, delay);\n entry.mixDuration = mixDuration;\n entry.trackEnd = mixDuration;\n return entry;\n };\n AnimationState.prototype.setEmptyAnimations = function (mixDuration) {\n var oldDrainDisabled = this.queue.drainDisabled;\n this.queue.drainDisabled = true;\n for (var i = 0, n = this.tracks.length; i < n; i++) {\n var current = this.tracks[i];\n if (current != null)\n this.setEmptyAnimation(current.trackIndex, mixDuration);\n }\n this.queue.drainDisabled = oldDrainDisabled;\n this.queue.drain();\n };\n AnimationState.prototype.expandToIndex = function (index) {\n if (index < this.tracks.length)\n return this.tracks[index];\n spine.Utils.ensureArrayCapacity(this.tracks, index + 1, null);\n this.tracks.length = index + 1;\n return null;\n };\n AnimationState.prototype.trackEntry = function (trackIndex, animation, loop, last) {\n var entry = this.trackEntryPool.obtain();\n entry.trackIndex = trackIndex;\n entry.animation = animation;\n entry.loop = loop;\n entry.holdPrevious = false;\n entry.eventThreshold = 0;\n entry.attachmentThreshold = 0;\n entry.drawOrderThreshold = 0;\n entry.animationStart = 0;\n entry.animationEnd = animation.duration;\n entry.animationLast = -1;\n entry.nextAnimationLast = -1;\n entry.delay = 0;\n entry.trackTime = 0;\n entry.trackLast = -1;\n entry.nextTrackLast = -1;\n entry.trackEnd = Number.MAX_VALUE;\n entry.timeScale = 1;\n entry.alpha = 1;\n entry.interruptAlpha = 1;\n entry.mixTime = 0;\n entry.mixDuration = last == null ? 0 : this.data.getMix(last.animation, animation);\n return entry;\n };\n AnimationState.prototype.disposeNext = function (entry) {\n var next = entry.next;\n while (next != null) {\n this.queue.dispose(next);\n next = next.next;\n }\n entry.next = null;\n };\n AnimationState.prototype._animationsChanged = function () {\n this.animationsChanged = false;\n this.propertyIDs.clear();\n for (var i = 0, n = this.tracks.length; i < n; i++) {\n var entry = this.tracks[i];\n if (entry == null)\n continue;\n while (entry.mixingFrom != null)\n entry = entry.mixingFrom;\n do {\n if (entry.mixingFrom == null || entry.mixBlend != spine.MixBlend.add)\n this.computeHold(entry);\n entry = entry.mixingTo;\n } while (entry != null);\n }\n this.propertyIDs.clear();\n for (var i = this.tracks.length - 1; i >= 0; i--) {\n var entry = this.tracks[i];\n while (entry != null) {\n this.computeNotLast(entry);\n entry = entry.mixingFrom;\n }\n }\n };\n AnimationState.prototype.computeHold = function (entry) {\n var to = entry.mixingTo;\n var timelines = entry.animation.timelines;\n var timelinesCount = entry.animation.timelines.length;\n var timelineMode = spine.Utils.setArraySize(entry.timelineMode, timelinesCount);\n entry.timelineHoldMix.length = 0;\n var timelineDipMix = spine.Utils.setArraySize(entry.timelineHoldMix, timelinesCount);\n var propertyIDs = this.propertyIDs;\n if (to != null && to.holdPrevious) {\n for (var i = 0; i < timelinesCount; i++) {\n propertyIDs.add(timelines[i].getPropertyId());\n timelineMode[i] = AnimationState.HOLD;\n }\n return;\n }\n outer: for (var i = 0; i < timelinesCount; i++) {\n var timeline = timelines[i];\n var id = timeline.getPropertyId();\n if (!propertyIDs.add(id))\n timelineMode[i] = AnimationState.SUBSEQUENT;\n else if (to == null || timeline instanceof spine.AttachmentTimeline || timeline instanceof spine.DrawOrderTimeline\n || timeline instanceof spine.EventTimeline || !to.animation.hasTimeline(id)) {\n timelineMode[i] = AnimationState.FIRST;\n }\n else {\n for (var next = to.mixingTo; next != null; next = next.mixingTo) {\n if (next.animation.hasTimeline(id))\n continue;\n if (entry.mixDuration > 0) {\n timelineMode[i] = AnimationState.HOLD_MIX;\n timelineDipMix[i] = next;\n continue outer;\n }\n break;\n }\n timelineMode[i] = AnimationState.HOLD;\n }\n }\n };\n AnimationState.prototype.computeNotLast = function (entry) {\n var timelines = entry.animation.timelines;\n var timelinesCount = entry.animation.timelines.length;\n var timelineMode = entry.timelineMode;\n var propertyIDs = this.propertyIDs;\n for (var i = 0; i < timelinesCount; i++) {\n if (timelines[i] instanceof spine.AttachmentTimeline) {\n var timeline = timelines[i];\n if (!propertyIDs.add(timeline.slotIndex))\n timelineMode[i] |= AnimationState.NOT_LAST;\n }\n }\n };\n AnimationState.prototype.getCurrent = function (trackIndex) {\n if (trackIndex >= this.tracks.length)\n return null;\n return this.tracks[trackIndex];\n };\n AnimationState.prototype.addListener = function (listener) {\n if (listener == null)\n throw new Error(\"listener cannot be null.\");\n this.listeners.push(listener);\n };\n AnimationState.prototype.removeListener = function (listener) {\n var index = this.listeners.indexOf(listener);\n if (index >= 0)\n this.listeners.splice(index, 1);\n };\n AnimationState.prototype.clearListeners = function () {\n this.listeners.length = 0;\n };\n AnimationState.prototype.clearListenerNotifications = function () {\n this.queue.clear();\n };\n AnimationState.emptyAnimation = new spine.Animation(\"\", [], 0);\n AnimationState.SUBSEQUENT = 0;\n AnimationState.FIRST = 1;\n AnimationState.HOLD = 2;\n AnimationState.HOLD_MIX = 3;\n AnimationState.NOT_LAST = 4;\n return AnimationState;\n }());\n spine.AnimationState = AnimationState;\n var TrackEntry = (function () {\n function TrackEntry() {\n this.mixBlend = spine.MixBlend.replace;\n this.timelineMode = new Array();\n this.timelineHoldMix = new Array();\n this.timelinesRotation = new Array();\n }\n TrackEntry.prototype.reset = function () {\n this.next = null;\n this.mixingFrom = null;\n this.mixingTo = null;\n this.animation = null;\n this.listener = null;\n this.timelineMode.length = 0;\n this.timelineHoldMix.length = 0;\n this.timelinesRotation.length = 0;\n };\n TrackEntry.prototype.getAnimationTime = function () {\n if (this.loop) {\n var duration = this.animationEnd - this.animationStart;\n if (duration == 0)\n return this.animationStart;\n return (this.trackTime % duration) + this.animationStart;\n }\n return Math.min(this.trackTime + this.animationStart, this.animationEnd);\n };\n TrackEntry.prototype.setAnimationLast = function (animationLast) {\n this.animationLast = animationLast;\n this.nextAnimationLast = animationLast;\n };\n TrackEntry.prototype.isComplete = function () {\n return this.trackTime >= this.animationEnd - this.animationStart;\n };\n TrackEntry.prototype.resetRotationDirections = function () {\n this.timelinesRotation.length = 0;\n };\n return TrackEntry;\n }());\n spine.TrackEntry = TrackEntry;\n var EventQueue = (function () {\n function EventQueue(animState) {\n this.objects = [];\n this.drainDisabled = false;\n this.animState = animState;\n }\n EventQueue.prototype.start = function (entry) {\n this.objects.push(EventType.start);\n this.objects.push(entry);\n this.animState.animationsChanged = true;\n };\n EventQueue.prototype.interrupt = function (entry) {\n this.objects.push(EventType.interrupt);\n this.objects.push(entry);\n };\n EventQueue.prototype.end = function (entry) {\n this.objects.push(EventType.end);\n this.objects.push(entry);\n this.animState.animationsChanged = true;\n };\n EventQueue.prototype.dispose = function (entry) {\n this.objects.push(EventType.dispose);\n this.objects.push(entry);\n };\n EventQueue.prototype.complete = function (entry) {\n this.objects.push(EventType.complete);\n this.objects.push(entry);\n };\n EventQueue.prototype.event = function (entry, event) {\n this.objects.push(EventType.event);\n this.objects.push(entry);\n this.objects.push(event);\n };\n EventQueue.prototype.drain = function () {\n if (this.drainDisabled)\n return;\n this.drainDisabled = true;\n var objects = this.objects;\n var listeners = this.animState.listeners;\n for (var i = 0; i < objects.length; i += 2) {\n var type = objects[i];\n var entry = objects[i + 1];\n switch (type) {\n case EventType.start:\n if (entry.listener != null && entry.listener.start)\n entry.listener.start(entry);\n for (var ii = 0; ii < listeners.length; ii++)\n if (listeners[ii].start)\n listeners[ii].start(entry);\n break;\n case EventType.interrupt:\n if (entry.listener != null && entry.listener.interrupt)\n entry.listener.interrupt(entry);\n for (var ii = 0; ii < listeners.length; ii++)\n if (listeners[ii].interrupt)\n listeners[ii].interrupt(entry);\n break;\n case EventType.end:\n if (entry.listener != null && entry.listener.end)\n entry.listener.end(entry);\n for (var ii = 0; ii < listeners.length; ii++)\n if (listeners[ii].end)\n listeners[ii].end(entry);\n case EventType.dispose:\n if (entry.listener != null && entry.listener.dispose)\n entry.listener.dispose(entry);\n for (var ii = 0; ii < listeners.length; ii++)\n if (listeners[ii].dispose)\n listeners[ii].dispose(entry);\n this.animState.trackEntryPool.free(entry);\n break;\n case EventType.complete:\n if (entry.listener != null && entry.listener.complete)\n entry.listener.complete(entry);\n for (var ii = 0; ii < listeners.length; ii++)\n if (listeners[ii].complete)\n listeners[ii].complete(entry);\n break;\n case EventType.event:\n var event_3 = objects[i++ + 2];\n if (entry.listener != null && entry.listener.event)\n entry.listener.event(entry, event_3);\n for (var ii = 0; ii < listeners.length; ii++)\n if (listeners[ii].event)\n listeners[ii].event(entry, event_3);\n break;\n }\n }\n this.clear();\n this.drainDisabled = false;\n };\n EventQueue.prototype.clear = function () {\n this.objects.length = 0;\n };\n return EventQueue;\n }());\n spine.EventQueue = EventQueue;\n var EventType;\n (function (EventType) {\n EventType[EventType[\"start\"] = 0] = \"start\";\n EventType[EventType[\"interrupt\"] = 1] = \"interrupt\";\n EventType[EventType[\"end\"] = 2] = \"end\";\n EventType[EventType[\"dispose\"] = 3] = \"dispose\";\n EventType[EventType[\"complete\"] = 4] = \"complete\";\n EventType[EventType[\"event\"] = 5] = \"event\";\n })(EventType = spine.EventType || (spine.EventType = {}));\n var AnimationStateAdapter = (function () {\n function AnimationStateAdapter() {\n }\n AnimationStateAdapter.prototype.start = function (entry) {\n };\n AnimationStateAdapter.prototype.interrupt = function (entry) {\n };\n AnimationStateAdapter.prototype.end = function (entry) {\n };\n AnimationStateAdapter.prototype.dispose = function (entry) {\n };\n AnimationStateAdapter.prototype.complete = function (entry) {\n };\n AnimationStateAdapter.prototype.event = function (entry, event) {\n };\n return AnimationStateAdapter;\n }());\n spine.AnimationStateAdapter = AnimationStateAdapter;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var AnimationStateData = (function () {\n function AnimationStateData(skeletonData) {\n this.animationToMixTime = {};\n this.defaultMix = 0;\n if (skeletonData == null)\n throw new Error(\"skeletonData cannot be null.\");\n this.skeletonData = skeletonData;\n }\n AnimationStateData.prototype.setMix = function (fromName, toName, duration) {\n var from = this.skeletonData.findAnimation(fromName);\n if (from == null)\n throw new Error(\"Animation not found: \" + fromName);\n var to = this.skeletonData.findAnimation(toName);\n if (to == null)\n throw new Error(\"Animation not found: \" + toName);\n this.setMixWith(from, to, duration);\n };\n AnimationStateData.prototype.setMixWith = function (from, to, duration) {\n if (from == null)\n throw new Error(\"from cannot be null.\");\n if (to == null)\n throw new Error(\"to cannot be null.\");\n var key = from.name + \".\" + to.name;\n this.animationToMixTime[key] = duration;\n };\n AnimationStateData.prototype.getMix = function (from, to) {\n var key = from.name + \".\" + to.name;\n var value = this.animationToMixTime[key];\n return value === undefined ? this.defaultMix : value;\n };\n return AnimationStateData;\n }());\n spine.AnimationStateData = AnimationStateData;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var AssetManager = (function () {\n function AssetManager(textureLoader, pathPrefix) {\n if (pathPrefix === void 0) { pathPrefix = \"\"; }\n this.assets = {};\n this.errors = {};\n this.toLoad = 0;\n this.loaded = 0;\n this.textureLoader = textureLoader;\n this.pathPrefix = pathPrefix;\n }\n AssetManager.downloadText = function (url, success, error) {\n var request = new XMLHttpRequest();\n request.open(\"GET\", url, true);\n request.onload = function () {\n if (request.status == 200) {\n success(request.responseText);\n }\n else {\n error(request.status, request.responseText);\n }\n };\n request.onerror = function () {\n error(request.status, request.responseText);\n };\n request.send();\n };\n AssetManager.downloadBinary = function (url, success, error) {\n var request = new XMLHttpRequest();\n request.open(\"GET\", url, true);\n request.responseType = \"arraybuffer\";\n request.onload = function () {\n if (request.status == 200) {\n success(new Uint8Array(request.response));\n }\n else {\n error(request.status, request.responseText);\n }\n };\n request.onerror = function () {\n error(request.status, request.responseText);\n };\n request.send();\n };\n AssetManager.prototype.loadBinary = function (path, success, error) {\n var _this = this;\n if (success === void 0) { success = null; }\n if (error === void 0) { error = null; }\n path = this.pathPrefix + path;\n this.toLoad++;\n AssetManager.downloadBinary(path, function (data) {\n _this.assets[path] = data;\n if (success)\n success(path, data);\n _this.toLoad--;\n _this.loaded++;\n }, function (state, responseText) {\n _this.errors[path] = \"Couldn't load binary \" + path + \": status \" + status + \", \" + responseText;\n if (error)\n error(path, \"Couldn't load binary \" + path + \": status \" + status + \", \" + responseText);\n _this.toLoad--;\n _this.loaded++;\n });\n };\n AssetManager.prototype.loadText = function (path, success, error) {\n var _this = this;\n if (success === void 0) { success = null; }\n if (error === void 0) { error = null; }\n path = this.pathPrefix + path;\n this.toLoad++;\n AssetManager.downloadText(path, function (data) {\n _this.assets[path] = data;\n if (success)\n success(path, data);\n _this.toLoad--;\n _this.loaded++;\n }, function (state, responseText) {\n _this.errors[path] = \"Couldn't load text \" + path + \": status \" + status + \", \" + responseText;\n if (error)\n error(path, \"Couldn't load text \" + path + \": status \" + status + \", \" + responseText);\n _this.toLoad--;\n _this.loaded++;\n });\n };\n AssetManager.prototype.loadTexture = function (path, success, error) {\n var _this = this;\n if (success === void 0) { success = null; }\n if (error === void 0) { error = null; }\n path = this.pathPrefix + path;\n this.toLoad++;\n var img = new Image();\n img.crossOrigin = \"anonymous\";\n img.onload = function (ev) {\n var texture = _this.textureLoader(img);\n _this.assets[path] = texture;\n _this.toLoad--;\n _this.loaded++;\n if (success)\n success(path, img);\n };\n img.onerror = function (ev) {\n _this.errors[path] = \"Couldn't load image \" + path;\n _this.toLoad--;\n _this.loaded++;\n if (error)\n error(path, \"Couldn't load image \" + path);\n };\n img.src = path;\n };\n AssetManager.prototype.loadTextureData = function (path, data, success, error) {\n var _this = this;\n if (success === void 0) { success = null; }\n if (error === void 0) { error = null; }\n path = this.pathPrefix + path;\n this.toLoad++;\n var img = new Image();\n img.onload = function (ev) {\n var texture = _this.textureLoader(img);\n _this.assets[path] = texture;\n _this.toLoad--;\n _this.loaded++;\n if (success)\n success(path, img);\n };\n img.onerror = function (ev) {\n _this.errors[path] = \"Couldn't load image \" + path;\n _this.toLoad--;\n _this.loaded++;\n if (error)\n error(path, \"Couldn't load image \" + path);\n };\n img.src = data;\n };\n AssetManager.prototype.loadTextureAtlas = function (path, success, error) {\n var _this = this;\n if (success === void 0) { success = null; }\n if (error === void 0) { error = null; }\n var parent = path.lastIndexOf(\"/\") >= 0 ? path.substring(0, path.lastIndexOf(\"/\")) : \"\";\n path = this.pathPrefix + path;\n this.toLoad++;\n AssetManager.downloadText(path, function (atlasData) {\n var pagesLoaded = { count: 0 };\n var atlasPages = new Array();\n try {\n var atlas = new spine.TextureAtlas(atlasData, function (path) {\n atlasPages.push(parent + \"/\" + path);\n var image = document.createElement(\"img\");\n image.width = 16;\n image.height = 16;\n return new spine.FakeTexture(image);\n });\n }\n catch (e) {\n var ex = e;\n _this.errors[path] = \"Couldn't load texture atlas \" + path + \": \" + ex.message;\n if (error)\n error(path, \"Couldn't load texture atlas \" + path + \": \" + ex.message);\n _this.toLoad--;\n _this.loaded++;\n return;\n }\n var _loop_1 = function (atlasPage) {\n var pageLoadError = false;\n _this.loadTexture(atlasPage, function (imagePath, image) {\n pagesLoaded.count++;\n if (pagesLoaded.count == atlasPages.length) {\n if (!pageLoadError) {\n try {\n var atlas = new spine.TextureAtlas(atlasData, function (path) {\n return _this.get(parent + \"/\" + path);\n });\n _this.assets[path] = atlas;\n if (success)\n success(path, atlas);\n _this.toLoad--;\n _this.loaded++;\n }\n catch (e) {\n var ex = e;\n _this.errors[path] = \"Couldn't load texture atlas \" + path + \": \" + ex.message;\n if (error)\n error(path, \"Couldn't load texture atlas \" + path + \": \" + ex.message);\n _this.toLoad--;\n _this.loaded++;\n }\n }\n else {\n _this.errors[path] = \"Couldn't load texture atlas page \" + imagePath + \"} of atlas \" + path;\n if (error)\n error(path, \"Couldn't load texture atlas page \" + imagePath + \" of atlas \" + path);\n _this.toLoad--;\n _this.loaded++;\n }\n }\n }, function (imagePath, errorMessage) {\n pageLoadError = true;\n pagesLoaded.count++;\n if (pagesLoaded.count == atlasPages.length) {\n _this.errors[path] = \"Couldn't load texture atlas page \" + imagePath + \"} of atlas \" + path;\n if (error)\n error(path, \"Couldn't load texture atlas page \" + imagePath + \" of atlas \" + path);\n _this.toLoad--;\n _this.loaded++;\n }\n });\n };\n for (var _i = 0, atlasPages_1 = atlasPages; _i < atlasPages_1.length; _i++) {\n var atlasPage = atlasPages_1[_i];\n _loop_1(atlasPage);\n }\n }, function (state, responseText) {\n _this.errors[path] = \"Couldn't load texture atlas \" + path + \": status \" + status + \", \" + responseText;\n if (error)\n error(path, \"Couldn't load texture atlas \" + path + \": status \" + status + \", \" + responseText);\n _this.toLoad--;\n _this.loaded++;\n });\n };\n AssetManager.prototype.get = function (path) {\n path = this.pathPrefix + path;\n return this.assets[path];\n };\n AssetManager.prototype.remove = function (path) {\n path = this.pathPrefix + path;\n var asset = this.assets[path];\n if (asset.dispose)\n asset.dispose();\n this.assets[path] = null;\n };\n AssetManager.prototype.removeAll = function () {\n for (var key in this.assets) {\n var asset = this.assets[key];\n if (asset.dispose)\n asset.dispose();\n }\n this.assets = {};\n };\n AssetManager.prototype.isLoadingComplete = function () {\n return this.toLoad == 0;\n };\n AssetManager.prototype.getToLoad = function () {\n return this.toLoad;\n };\n AssetManager.prototype.getLoaded = function () {\n return this.loaded;\n };\n AssetManager.prototype.dispose = function () {\n this.removeAll();\n };\n AssetManager.prototype.hasErrors = function () {\n return Object.keys(this.errors).length > 0;\n };\n AssetManager.prototype.getErrors = function () {\n return this.errors;\n };\n return AssetManager;\n }());\n spine.AssetManager = AssetManager;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var AtlasAttachmentLoader = (function () {\n function AtlasAttachmentLoader(atlas) {\n this.atlas = atlas;\n }\n AtlasAttachmentLoader.prototype.newRegionAttachment = function (skin, name, path) {\n var region = this.atlas.findRegion(path);\n if (region == null) {\n // throw new Error(\"Region not found in atlas: \" + path + \" (region attachment: \" + name + \")\");\n return null;\n }\n region.renderObject = region;\n var attachment = new spine.RegionAttachment(name);\n attachment.setRegion(region);\n return attachment;\n };\n AtlasAttachmentLoader.prototype.newMeshAttachment = function (skin, name, path) {\n var region = this.atlas.findRegion(path);\n if (region == null) {\n // throw new Error(\"Region not found in atlas: \" + path + \" (mesh attachment: \" + name + \")\");\n return null;\n }\n region.renderObject = region;\n var attachment = new spine.MeshAttachment(name);\n attachment.region = region;\n return attachment;\n };\n AtlasAttachmentLoader.prototype.newBoundingBoxAttachment = function (skin, name) {\n return new spine.BoundingBoxAttachment(name);\n };\n AtlasAttachmentLoader.prototype.newPathAttachment = function (skin, name) {\n return new spine.PathAttachment(name);\n };\n AtlasAttachmentLoader.prototype.newPointAttachment = function (skin, name) {\n return new spine.PointAttachment(name);\n };\n AtlasAttachmentLoader.prototype.newClippingAttachment = function (skin, name) {\n return new spine.ClippingAttachment(name);\n };\n return AtlasAttachmentLoader;\n }());\n spine.AtlasAttachmentLoader = AtlasAttachmentLoader;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var BlendMode;\n (function (BlendMode) {\n BlendMode[BlendMode[\"Normal\"] = 0] = \"Normal\";\n BlendMode[BlendMode[\"Additive\"] = 1] = \"Additive\";\n BlendMode[BlendMode[\"Multiply\"] = 2] = \"Multiply\";\n BlendMode[BlendMode[\"Screen\"] = 3] = \"Screen\";\n })(BlendMode = spine.BlendMode || (spine.BlendMode = {}));\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var Bone = (function () {\n function Bone(data, skeleton, parent) {\n this.children = new Array();\n this.x = 0;\n this.y = 0;\n this.rotation = 0;\n this.scaleX = 0;\n this.scaleY = 0;\n this.shearX = 0;\n this.shearY = 0;\n this.ax = 0;\n this.ay = 0;\n this.arotation = 0;\n this.ascaleX = 0;\n this.ascaleY = 0;\n this.ashearX = 0;\n this.ashearY = 0;\n this.appliedValid = false;\n this.a = 0;\n this.b = 0;\n this.c = 0;\n this.d = 0;\n this.worldY = 0;\n this.worldX = 0;\n this.sorted = false;\n this.active = false;\n if (data == null)\n throw new Error(\"data cannot be null.\");\n if (skeleton == null)\n throw new Error(\"skeleton cannot be null.\");\n this.data = data;\n this.skeleton = skeleton;\n this.parent = parent;\n this.setToSetupPose();\n }\n Bone.prototype.isActive = function () {\n return this.active;\n };\n Bone.prototype.update = function () {\n this.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY);\n };\n Bone.prototype.updateWorldTransform = function () {\n this.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY);\n };\n Bone.prototype.updateWorldTransformWith = function (x, y, rotation, scaleX, scaleY, shearX, shearY) {\n this.ax = x;\n this.ay = y;\n this.arotation = rotation;\n this.ascaleX = scaleX;\n this.ascaleY = scaleY;\n this.ashearX = shearX;\n this.ashearY = shearY;\n this.appliedValid = true;\n var parent = this.parent;\n if (parent == null) {\n var skeleton = this.skeleton;\n var rotationY = rotation + 90 + shearY;\n var sx = skeleton.scaleX;\n var sy = skeleton.scaleY;\n this.a = spine.MathUtils.cosDeg(rotation + shearX) * scaleX * sx;\n this.b = spine.MathUtils.cosDeg(rotationY) * scaleY * sx;\n this.c = spine.MathUtils.sinDeg(rotation + shearX) * scaleX * sy;\n this.d = spine.MathUtils.sinDeg(rotationY) * scaleY * sy;\n this.worldX = x * sx + skeleton.x;\n this.worldY = y * sy + skeleton.y;\n return;\n }\n var pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d;\n this.worldX = pa * x + pb * y + parent.worldX;\n this.worldY = pc * x + pd * y + parent.worldY;\n switch (this.data.transformMode) {\n case spine.TransformMode.Normal: {\n var rotationY = rotation + 90 + shearY;\n var la = spine.MathUtils.cosDeg(rotation + shearX) * scaleX;\n var lb = spine.MathUtils.cosDeg(rotationY) * scaleY;\n var lc = spine.MathUtils.sinDeg(rotation + shearX) * scaleX;\n var ld = spine.MathUtils.sinDeg(rotationY) * scaleY;\n this.a = pa * la + pb * lc;\n this.b = pa * lb + pb * ld;\n this.c = pc * la + pd * lc;\n this.d = pc * lb + pd * ld;\n return;\n }\n case spine.TransformMode.OnlyTranslation: {\n var rotationY = rotation + 90 + shearY;\n this.a = spine.MathUtils.cosDeg(rotation + shearX) * scaleX;\n this.b = spine.MathUtils.cosDeg(rotationY) * scaleY;\n this.c = spine.MathUtils.sinDeg(rotation + shearX) * scaleX;\n this.d = spine.MathUtils.sinDeg(rotationY) * scaleY;\n break;\n }\n case spine.TransformMode.NoRotationOrReflection: {\n var s = pa * pa + pc * pc;\n var prx = 0;\n if (s > 0.0001) {\n s = Math.abs(pa * pd - pb * pc) / s;\n pb = pc * s;\n pd = pa * s;\n prx = Math.atan2(pc, pa) * spine.MathUtils.radDeg;\n }\n else {\n pa = 0;\n pc = 0;\n prx = 90 - Math.atan2(pd, pb) * spine.MathUtils.radDeg;\n }\n var rx = rotation + shearX - prx;\n var ry = rotation + shearY - prx + 90;\n var la = spine.MathUtils.cosDeg(rx) * scaleX;\n var lb = spine.MathUtils.cosDeg(ry) * scaleY;\n var lc = spine.MathUtils.sinDeg(rx) * scaleX;\n var ld = spine.MathUtils.sinDeg(ry) * scaleY;\n this.a = pa * la - pb * lc;\n this.b = pa * lb - pb * ld;\n this.c = pc * la + pd * lc;\n this.d = pc * lb + pd * ld;\n break;\n }\n case spine.TransformMode.NoScale:\n case spine.TransformMode.NoScaleOrReflection: {\n var cos = spine.MathUtils.cosDeg(rotation);\n var sin = spine.MathUtils.sinDeg(rotation);\n var za = (pa * cos + pb * sin) / this.skeleton.scaleX;\n var zc = (pc * cos + pd * sin) / this.skeleton.scaleY;\n var s = Math.sqrt(za * za + zc * zc);\n if (s > 0.00001)\n s = 1 / s;\n za *= s;\n zc *= s;\n s = Math.sqrt(za * za + zc * zc);\n if (this.data.transformMode == spine.TransformMode.NoScale\n && (pa * pd - pb * pc < 0) != (this.skeleton.scaleX < 0 != this.skeleton.scaleY < 0))\n s = -s;\n var r = Math.PI / 2 + Math.atan2(zc, za);\n var zb = Math.cos(r) * s;\n var zd = Math.sin(r) * s;\n var la = spine.MathUtils.cosDeg(shearX) * scaleX;\n var lb = spine.MathUtils.cosDeg(90 + shearY) * scaleY;\n var lc = spine.MathUtils.sinDeg(shearX) * scaleX;\n var ld = spine.MathUtils.sinDeg(90 + shearY) * scaleY;\n this.a = za * la + zb * lc;\n this.b = za * lb + zb * ld;\n this.c = zc * la + zd * lc;\n this.d = zc * lb + zd * ld;\n break;\n }\n }\n this.a *= this.skeleton.scaleX;\n this.b *= this.skeleton.scaleX;\n this.c *= this.skeleton.scaleY;\n this.d *= this.skeleton.scaleY;\n };\n Bone.prototype.setToSetupPose = function () {\n var data = this.data;\n this.x = data.x;\n this.y = data.y;\n this.rotation = data.rotation;\n this.scaleX = data.scaleX;\n this.scaleY = data.scaleY;\n this.shearX = data.shearX;\n this.shearY = data.shearY;\n };\n Bone.prototype.getWorldRotationX = function () {\n return Math.atan2(this.c, this.a) * spine.MathUtils.radDeg;\n };\n Bone.prototype.getWorldRotationY = function () {\n return Math.atan2(this.d, this.b) * spine.MathUtils.radDeg;\n };\n Bone.prototype.getWorldScaleX = function () {\n return Math.sqrt(this.a * this.a + this.c * this.c);\n };\n Bone.prototype.getWorldScaleY = function () {\n return Math.sqrt(this.b * this.b + this.d * this.d);\n };\n Bone.prototype.updateAppliedTransform = function () {\n this.appliedValid = true;\n var parent = this.parent;\n if (parent == null) {\n this.ax = this.worldX;\n this.ay = this.worldY;\n this.arotation = Math.atan2(this.c, this.a) * spine.MathUtils.radDeg;\n this.ascaleX = Math.sqrt(this.a * this.a + this.c * this.c);\n this.ascaleY = Math.sqrt(this.b * this.b + this.d * this.d);\n this.ashearX = 0;\n this.ashearY = Math.atan2(this.a * this.b + this.c * this.d, this.a * this.d - this.b * this.c) * spine.MathUtils.radDeg;\n return;\n }\n var pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d;\n var pid = 1 / (pa * pd - pb * pc);\n var dx = this.worldX - parent.worldX, dy = this.worldY - parent.worldY;\n this.ax = (dx * pd * pid - dy * pb * pid);\n this.ay = (dy * pa * pid - dx * pc * pid);\n var ia = pid * pd;\n var id = pid * pa;\n var ib = pid * pb;\n var ic = pid * pc;\n var ra = ia * this.a - ib * this.c;\n var rb = ia * this.b - ib * this.d;\n var rc = id * this.c - ic * this.a;\n var rd = id * this.d - ic * this.b;\n this.ashearX = 0;\n this.ascaleX = Math.sqrt(ra * ra + rc * rc);\n if (this.ascaleX > 0.0001) {\n var det = ra * rd - rb * rc;\n this.ascaleY = det / this.ascaleX;\n this.ashearY = Math.atan2(ra * rb + rc * rd, det) * spine.MathUtils.radDeg;\n this.arotation = Math.atan2(rc, ra) * spine.MathUtils.radDeg;\n }\n else {\n this.ascaleX = 0;\n this.ascaleY = Math.sqrt(rb * rb + rd * rd);\n this.ashearY = 0;\n this.arotation = 90 - Math.atan2(rd, rb) * spine.MathUtils.radDeg;\n }\n };\n Bone.prototype.worldToLocal = function (world) {\n var a = this.a, b = this.b, c = this.c, d = this.d;\n var invDet = 1 / (a * d - b * c);\n var x = world.x - this.worldX, y = world.y - this.worldY;\n world.x = (x * d * invDet - y * b * invDet);\n world.y = (y * a * invDet - x * c * invDet);\n return world;\n };\n Bone.prototype.localToWorld = function (local) {\n var x = local.x, y = local.y;\n local.x = x * this.a + y * this.b + this.worldX;\n local.y = x * this.c + y * this.d + this.worldY;\n return local;\n };\n Bone.prototype.worldToLocalRotation = function (worldRotation) {\n var sin = spine.MathUtils.sinDeg(worldRotation), cos = spine.MathUtils.cosDeg(worldRotation);\n return Math.atan2(this.a * sin - this.c * cos, this.d * cos - this.b * sin) * spine.MathUtils.radDeg + this.rotation - this.shearX;\n };\n Bone.prototype.localToWorldRotation = function (localRotation) {\n localRotation -= this.rotation - this.shearX;\n var sin = spine.MathUtils.sinDeg(localRotation), cos = spine.MathUtils.cosDeg(localRotation);\n return Math.atan2(cos * this.c + sin * this.d, cos * this.a + sin * this.b) * spine.MathUtils.radDeg;\n };\n Bone.prototype.rotateWorld = function (degrees) {\n var a = this.a, b = this.b, c = this.c, d = this.d;\n var cos = spine.MathUtils.cosDeg(degrees), sin = spine.MathUtils.sinDeg(degrees);\n this.a = cos * a - sin * c;\n this.b = cos * b - sin * d;\n this.c = sin * a + cos * c;\n this.d = sin * b + cos * d;\n this.appliedValid = false;\n };\n return Bone;\n }());\n spine.Bone = Bone;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var BoneData = (function () {\n function BoneData(index, name, parent) {\n this.x = 0;\n this.y = 0;\n this.rotation = 0;\n this.scaleX = 1;\n this.scaleY = 1;\n this.shearX = 0;\n this.shearY = 0;\n this.transformMode = TransformMode.Normal;\n this.skinRequired = false;\n this.color = new spine.Color();\n if (index < 0)\n throw new Error(\"index must be >= 0.\");\n if (name == null)\n throw new Error(\"name cannot be null.\");\n this.index = index;\n this.name = name;\n this.parent = parent;\n }\n return BoneData;\n }());\n spine.BoneData = BoneData;\n var TransformMode;\n (function (TransformMode) {\n TransformMode[TransformMode[\"Normal\"] = 0] = \"Normal\";\n TransformMode[TransformMode[\"OnlyTranslation\"] = 1] = \"OnlyTranslation\";\n TransformMode[TransformMode[\"NoRotationOrReflection\"] = 2] = \"NoRotationOrReflection\";\n TransformMode[TransformMode[\"NoScale\"] = 3] = \"NoScale\";\n TransformMode[TransformMode[\"NoScaleOrReflection\"] = 4] = \"NoScaleOrReflection\";\n })(TransformMode = spine.TransformMode || (spine.TransformMode = {}));\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var ConstraintData = (function () {\n function ConstraintData(name, order, skinRequired) {\n this.name = name;\n this.order = order;\n this.skinRequired = skinRequired;\n }\n return ConstraintData;\n }());\n spine.ConstraintData = ConstraintData;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var Event = (function () {\n function Event(time, data) {\n if (data == null)\n throw new Error(\"data cannot be null.\");\n this.time = time;\n this.data = data;\n }\n return Event;\n }());\n spine.Event = Event;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var EventData = (function () {\n function EventData(name) {\n this.name = name;\n }\n return EventData;\n }());\n spine.EventData = EventData;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var IkConstraint = (function () {\n function IkConstraint(data, skeleton) {\n this.bendDirection = 0;\n this.compress = false;\n this.stretch = false;\n this.mix = 1;\n this.softness = 0;\n this.active = false;\n if (data == null)\n throw new Error(\"data cannot be null.\");\n if (skeleton == null)\n throw new Error(\"skeleton cannot be null.\");\n this.data = data;\n this.mix = data.mix;\n this.softness = data.softness;\n this.bendDirection = data.bendDirection;\n this.compress = data.compress;\n this.stretch = data.stretch;\n this.bones = new Array();\n for (var i = 0; i < data.bones.length; i++)\n this.bones.push(skeleton.findBone(data.bones[i].name));\n this.target = skeleton.findBone(data.target.name);\n }\n IkConstraint.prototype.isActive = function () {\n return this.active;\n };\n IkConstraint.prototype.apply = function () {\n this.update();\n };\n IkConstraint.prototype.update = function () {\n var target = this.target;\n var bones = this.bones;\n switch (bones.length) {\n case 1:\n this.apply1(bones[0], target.worldX, target.worldY, this.compress, this.stretch, this.data.uniform, this.mix);\n break;\n case 2:\n this.apply2(bones[0], bones[1], target.worldX, target.worldY, this.bendDirection, this.stretch, this.softness, this.mix);\n break;\n }\n };\n IkConstraint.prototype.apply1 = function (bone, targetX, targetY, compress, stretch, uniform, alpha) {\n if (!bone.appliedValid)\n bone.updateAppliedTransform();\n var p = bone.parent;\n var id = 1 / (p.a * p.d - p.b * p.c);\n var x = targetX - p.worldX, y = targetY - p.worldY;\n var tx = (x * p.d - y * p.b) * id - bone.ax, ty = (y * p.a - x * p.c) * id - bone.ay;\n var rotationIK = Math.atan2(ty, tx) * spine.MathUtils.radDeg - bone.ashearX - bone.arotation;\n if (bone.ascaleX < 0)\n rotationIK += 180;\n if (rotationIK > 180)\n rotationIK -= 360;\n else if (rotationIK < -180)\n rotationIK += 360;\n var sx = bone.ascaleX, sy = bone.ascaleY;\n if (compress || stretch) {\n var b = bone.data.length * sx, dd = Math.sqrt(tx * tx + ty * ty);\n if ((compress && dd < b) || (stretch && dd > b) && b > 0.0001) {\n var s = (dd / b - 1) * alpha + 1;\n sx *= s;\n if (uniform)\n sy *= s;\n }\n }\n bone.updateWorldTransformWith(bone.ax, bone.ay, bone.arotation + rotationIK * alpha, sx, sy, bone.ashearX, bone.ashearY);\n };\n IkConstraint.prototype.apply2 = function (parent, child, targetX, targetY, bendDir, stretch, softness, alpha) {\n if (alpha == 0) {\n child.updateWorldTransform();\n return;\n }\n if (!parent.appliedValid)\n parent.updateAppliedTransform();\n if (!child.appliedValid)\n child.updateAppliedTransform();\n var px = parent.ax, py = parent.ay, psx = parent.ascaleX, sx = psx, psy = parent.ascaleY, csx = child.ascaleX;\n var os1 = 0, os2 = 0, s2 = 0;\n if (psx < 0) {\n psx = -psx;\n os1 = 180;\n s2 = -1;\n }\n else {\n os1 = 0;\n s2 = 1;\n }\n if (psy < 0) {\n psy = -psy;\n s2 = -s2;\n }\n if (csx < 0) {\n csx = -csx;\n os2 = 180;\n }\n else\n os2 = 0;\n var cx = child.ax, cy = 0, cwx = 0, cwy = 0, a = parent.a, b = parent.b, c = parent.c, d = parent.d;\n var u = Math.abs(psx - psy) <= 0.0001;\n if (!u) {\n cy = 0;\n cwx = a * cx + parent.worldX;\n cwy = c * cx + parent.worldY;\n }\n else {\n cy = child.ay;\n cwx = a * cx + b * cy + parent.worldX;\n cwy = c * cx + d * cy + parent.worldY;\n }\n var pp = parent.parent;\n a = pp.a;\n b = pp.b;\n c = pp.c;\n d = pp.d;\n var id = 1 / (a * d - b * c), x = cwx - pp.worldX, y = cwy - pp.worldY;\n var dx = (x * d - y * b) * id - px, dy = (y * a - x * c) * id - py;\n var l1 = Math.sqrt(dx * dx + dy * dy), l2 = child.data.length * csx, a1, a2;\n if (l1 < 0.0001) {\n this.apply1(parent, targetX, targetY, false, stretch, false, alpha);\n child.updateWorldTransformWith(cx, cy, 0, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY);\n return;\n }\n x = targetX - pp.worldX;\n y = targetY - pp.worldY;\n var tx = (x * d - y * b) * id - px, ty = (y * a - x * c) * id - py;\n var dd = tx * tx + ty * ty;\n if (softness != 0) {\n softness *= psx * (csx + 1) / 2;\n var td = Math.sqrt(dd), sd = td - l1 - l2 * psx + softness;\n if (sd > 0) {\n var p = Math.min(1, sd / (softness * 2)) - 1;\n p = (sd - softness * (1 - p * p)) / td;\n tx -= p * tx;\n ty -= p * ty;\n dd = tx * tx + ty * ty;\n }\n }\n outer: if (u) {\n l2 *= psx;\n var cos = (dd - l1 * l1 - l2 * l2) / (2 * l1 * l2);\n if (cos < -1)\n cos = -1;\n else if (cos > 1) {\n cos = 1;\n if (stretch)\n sx *= (Math.sqrt(dd) / (l1 + l2) - 1) * alpha + 1;\n }\n a2 = Math.acos(cos) * bendDir;\n a = l1 + l2 * cos;\n b = l2 * Math.sin(a2);\n a1 = Math.atan2(ty * a - tx * b, tx * a + ty * b);\n }\n else {\n a = psx * l2;\n b = psy * l2;\n var aa = a * a, bb = b * b, ta = Math.atan2(ty, tx);\n c = bb * l1 * l1 + aa * dd - aa * bb;\n var c1 = -2 * bb * l1, c2 = bb - aa;\n d = c1 * c1 - 4 * c2 * c;\n if (d >= 0) {\n var q = Math.sqrt(d);\n if (c1 < 0)\n q = -q;\n q = -(c1 + q) / 2;\n var r0 = q / c2, r1 = c / q;\n var r = Math.abs(r0) < Math.abs(r1) ? r0 : r1;\n if (r * r <= dd) {\n y = Math.sqrt(dd - r * r) * bendDir;\n a1 = ta - Math.atan2(y, r);\n a2 = Math.atan2(y / psy, (r - l1) / psx);\n break outer;\n }\n }\n var minAngle = spine.MathUtils.PI, minX = l1 - a, minDist = minX * minX, minY = 0;\n var maxAngle = 0, maxX = l1 + a, maxDist = maxX * maxX, maxY = 0;\n c = -a * l1 / (aa - bb);\n if (c >= -1 && c <= 1) {\n c = Math.acos(c);\n x = a * Math.cos(c) + l1;\n y = b * Math.sin(c);\n d = x * x + y * y;\n if (d < minDist) {\n minAngle = c;\n minDist = d;\n minX = x;\n minY = y;\n }\n if (d > maxDist) {\n maxAngle = c;\n maxDist = d;\n maxX = x;\n maxY = y;\n }\n }\n if (dd <= (minDist + maxDist) / 2) {\n a1 = ta - Math.atan2(minY * bendDir, minX);\n a2 = minAngle * bendDir;\n }\n else {\n a1 = ta - Math.atan2(maxY * bendDir, maxX);\n a2 = maxAngle * bendDir;\n }\n }\n var os = Math.atan2(cy, cx) * s2;\n var rotation = parent.arotation;\n a1 = (a1 - os) * spine.MathUtils.radDeg + os1 - rotation;\n if (a1 > 180)\n a1 -= 360;\n else if (a1 < -180)\n a1 += 360;\n parent.updateWorldTransformWith(px, py, rotation + a1 * alpha, sx, parent.ascaleY, 0, 0);\n rotation = child.arotation;\n a2 = ((a2 + os) * spine.MathUtils.radDeg - child.ashearX) * s2 + os2 - rotation;\n if (a2 > 180)\n a2 -= 360;\n else if (a2 < -180)\n a2 += 360;\n child.updateWorldTransformWith(cx, cy, rotation + a2 * alpha, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY);\n };\n return IkConstraint;\n }());\n spine.IkConstraint = IkConstraint;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var IkConstraintData = (function (_super) {\n __extends(IkConstraintData, _super);\n function IkConstraintData(name) {\n var _this = _super.call(this, name, 0, false) || this;\n _this.bones = new Array();\n _this.bendDirection = 1;\n _this.compress = false;\n _this.stretch = false;\n _this.uniform = false;\n _this.mix = 1;\n _this.softness = 0;\n return _this;\n }\n return IkConstraintData;\n }(spine.ConstraintData));\n spine.IkConstraintData = IkConstraintData;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var PathConstraint = (function () {\n function PathConstraint(data, skeleton) {\n this.position = 0;\n this.spacing = 0;\n this.rotateMix = 0;\n this.translateMix = 0;\n this.spaces = new Array();\n this.positions = new Array();\n this.world = new Array();\n this.curves = new Array();\n this.lengths = new Array();\n this.segments = new Array();\n this.active = false;\n if (data == null)\n throw new Error(\"data cannot be null.\");\n if (skeleton == null)\n throw new Error(\"skeleton cannot be null.\");\n this.data = data;\n this.bones = new Array();\n for (var i = 0, n = data.bones.length; i < n; i++)\n this.bones.push(skeleton.findBone(data.bones[i].name));\n this.target = skeleton.findSlot(data.target.name);\n this.position = data.position;\n this.spacing = data.spacing;\n this.rotateMix = data.rotateMix;\n this.translateMix = data.translateMix;\n }\n PathConstraint.prototype.isActive = function () {\n return this.active;\n };\n PathConstraint.prototype.apply = function () {\n this.update();\n };\n PathConstraint.prototype.update = function () {\n var attachment = this.target.getAttachment();\n if (!(attachment instanceof spine.PathAttachment))\n return;\n var rotateMix = this.rotateMix, translateMix = this.translateMix;\n var translate = translateMix > 0, rotate = rotateMix > 0;\n if (!translate && !rotate)\n return;\n var data = this.data;\n var percentSpacing = data.spacingMode == spine.SpacingMode.Percent;\n var rotateMode = data.rotateMode;\n var tangents = rotateMode == spine.RotateMode.Tangent, scale = rotateMode == spine.RotateMode.ChainScale;\n var boneCount = this.bones.length, spacesCount = tangents ? boneCount : boneCount + 1;\n var bones = this.bones;\n var spaces = spine.Utils.setArraySize(this.spaces, spacesCount), lengths = null;\n var spacing = this.spacing;\n if (scale || !percentSpacing) {\n if (scale)\n lengths = spine.Utils.setArraySize(this.lengths, boneCount);\n var lengthSpacing = data.spacingMode == spine.SpacingMode.Length;\n for (var i = 0, n = spacesCount - 1; i < n;) {\n var bone = bones[i];\n var setupLength = bone.data.length;\n if (setupLength < PathConstraint.epsilon) {\n if (scale)\n lengths[i] = 0;\n spaces[++i] = 0;\n }\n else if (percentSpacing) {\n if (scale) {\n var x = setupLength * bone.a, y = setupLength * bone.c;\n var length_1 = Math.sqrt(x * x + y * y);\n lengths[i] = length_1;\n }\n spaces[++i] = spacing;\n }\n else {\n var x = setupLength * bone.a, y = setupLength * bone.c;\n var length_2 = Math.sqrt(x * x + y * y);\n if (scale)\n lengths[i] = length_2;\n spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length_2 / setupLength;\n }\n }\n }\n else {\n for (var i = 1; i < spacesCount; i++)\n spaces[i] = spacing;\n }\n var positions = this.computeWorldPositions(attachment, spacesCount, tangents, data.positionMode == spine.PositionMode.Percent, percentSpacing);\n var boneX = positions[0], boneY = positions[1], offsetRotation = data.offsetRotation;\n var tip = false;\n if (offsetRotation == 0)\n tip = rotateMode == spine.RotateMode.Chain;\n else {\n tip = false;\n var p = this.target.bone;\n offsetRotation *= p.a * p.d - p.b * p.c > 0 ? spine.MathUtils.degRad : -spine.MathUtils.degRad;\n }\n for (var i = 0, p = 3; i < boneCount; i++, p += 3) {\n var bone = bones[i];\n bone.worldX += (boneX - bone.worldX) * translateMix;\n bone.worldY += (boneY - bone.worldY) * translateMix;\n var x = positions[p], y = positions[p + 1], dx = x - boneX, dy = y - boneY;\n if (scale) {\n var length_3 = lengths[i];\n if (length_3 != 0) {\n var s = (Math.sqrt(dx * dx + dy * dy) / length_3 - 1) * rotateMix + 1;\n bone.a *= s;\n bone.c *= s;\n }\n }\n boneX = x;\n boneY = y;\n if (rotate) {\n var a = bone.a, b = bone.b, c = bone.c, d = bone.d, r = 0, cos = 0, sin = 0;\n if (tangents)\n r = positions[p - 1];\n else if (spaces[i + 1] == 0)\n r = positions[p + 2];\n else\n r = Math.atan2(dy, dx);\n r -= Math.atan2(c, a);\n if (tip) {\n cos = Math.cos(r);\n sin = Math.sin(r);\n var length_4 = bone.data.length;\n boneX += (length_4 * (cos * a - sin * c) - dx) * rotateMix;\n boneY += (length_4 * (sin * a + cos * c) - dy) * rotateMix;\n }\n else {\n r += offsetRotation;\n }\n if (r > spine.MathUtils.PI)\n r -= spine.MathUtils.PI2;\n else if (r < -spine.MathUtils.PI)\n r += spine.MathUtils.PI2;\n r *= rotateMix;\n cos = Math.cos(r);\n sin = Math.sin(r);\n bone.a = cos * a - sin * c;\n bone.b = cos * b - sin * d;\n bone.c = sin * a + cos * c;\n bone.d = sin * b + cos * d;\n }\n bone.appliedValid = false;\n }\n };\n PathConstraint.prototype.computeWorldPositions = function (path, spacesCount, tangents, percentPosition, percentSpacing) {\n var target = this.target;\n var position = this.position;\n var spaces = this.spaces, out = spine.Utils.setArraySize(this.positions, spacesCount * 3 + 2), world = null;\n var closed = path.closed;\n var verticesLength = path.worldVerticesLength, curveCount = verticesLength / 6, prevCurve = PathConstraint.NONE;\n if (!path.constantSpeed) {\n var lengths = path.lengths;\n curveCount -= closed ? 1 : 2;\n var pathLength_1 = lengths[curveCount];\n if (percentPosition)\n position *= pathLength_1;\n if (percentSpacing) {\n for (var i = 1; i < spacesCount; i++)\n spaces[i] *= pathLength_1;\n }\n world = spine.Utils.setArraySize(this.world, 8);\n for (var i = 0, o = 0, curve = 0; i < spacesCount; i++, o += 3) {\n var space = spaces[i];\n position += space;\n var p = position;\n if (closed) {\n p %= pathLength_1;\n if (p < 0)\n p += pathLength_1;\n curve = 0;\n }\n else if (p < 0) {\n if (prevCurve != PathConstraint.BEFORE) {\n prevCurve = PathConstraint.BEFORE;\n path.computeWorldVertices(target, 2, 4, world, 0, 2);\n }\n this.addBeforePosition(p, world, 0, out, o);\n continue;\n }\n else if (p > pathLength_1) {\n if (prevCurve != PathConstraint.AFTER) {\n prevCurve = PathConstraint.AFTER;\n path.computeWorldVertices(target, verticesLength - 6, 4, world, 0, 2);\n }\n this.addAfterPosition(p - pathLength_1, world, 0, out, o);\n continue;\n }\n for (;; curve++) {\n var length_5 = lengths[curve];\n if (p > length_5)\n continue;\n if (curve == 0)\n p /= length_5;\n else {\n var prev = lengths[curve - 1];\n p = (p - prev) / (length_5 - prev);\n }\n break;\n }\n if (curve != prevCurve) {\n prevCurve = curve;\n if (closed && curve == curveCount) {\n path.computeWorldVertices(target, verticesLength - 4, 4, world, 0, 2);\n path.computeWorldVertices(target, 0, 4, world, 4, 2);\n }\n else\n path.computeWorldVertices(target, curve * 6 + 2, 8, world, 0, 2);\n }\n this.addCurvePosition(p, world[0], world[1], world[2], world[3], world[4], world[5], world[6], world[7], out, o, tangents || (i > 0 && space == 0));\n }\n return out;\n }\n if (closed) {\n verticesLength += 2;\n world = spine.Utils.setArraySize(this.world, verticesLength);\n path.computeWorldVertices(target, 2, verticesLength - 4, world, 0, 2);\n path.computeWorldVertices(target, 0, 2, world, verticesLength - 4, 2);\n world[verticesLength - 2] = world[0];\n world[verticesLength - 1] = world[1];\n }\n else {\n curveCount--;\n verticesLength -= 4;\n world = spine.Utils.setArraySize(this.world, verticesLength);\n path.computeWorldVertices(target, 2, verticesLength, world, 0, 2);\n }\n var curves = spine.Utils.setArraySize(this.curves, curveCount);\n var pathLength = 0;\n var x1 = world[0], y1 = world[1], cx1 = 0, cy1 = 0, cx2 = 0, cy2 = 0, x2 = 0, y2 = 0;\n var tmpx = 0, tmpy = 0, dddfx = 0, dddfy = 0, ddfx = 0, ddfy = 0, dfx = 0, dfy = 0;\n for (var i = 0, w = 2; i < curveCount; i++, w += 6) {\n cx1 = world[w];\n cy1 = world[w + 1];\n cx2 = world[w + 2];\n cy2 = world[w + 3];\n x2 = world[w + 4];\n y2 = world[w + 5];\n tmpx = (x1 - cx1 * 2 + cx2) * 0.1875;\n tmpy = (y1 - cy1 * 2 + cy2) * 0.1875;\n dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.09375;\n dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.09375;\n ddfx = tmpx * 2 + dddfx;\n ddfy = tmpy * 2 + dddfy;\n dfx = (cx1 - x1) * 0.75 + tmpx + dddfx * 0.16666667;\n dfy = (cy1 - y1) * 0.75 + tmpy + dddfy * 0.16666667;\n pathLength += Math.sqrt(dfx * dfx + dfy * dfy);\n dfx += ddfx;\n dfy += ddfy;\n ddfx += dddfx;\n ddfy += dddfy;\n pathLength += Math.sqrt(dfx * dfx + dfy * dfy);\n dfx += ddfx;\n dfy += ddfy;\n pathLength += Math.sqrt(dfx * dfx + dfy * dfy);\n dfx += ddfx + dddfx;\n dfy += ddfy + dddfy;\n pathLength += Math.sqrt(dfx * dfx + dfy * dfy);\n curves[i] = pathLength;\n x1 = x2;\n y1 = y2;\n }\n if (percentPosition)\n position *= pathLength;\n else\n position *= pathLength / path.lengths[curveCount - 1];\n if (percentSpacing) {\n for (var i = 1; i < spacesCount; i++)\n spaces[i] *= pathLength;\n }\n var segments = this.segments;\n var curveLength = 0;\n for (var i = 0, o = 0, curve = 0, segment = 0; i < spacesCount; i++, o += 3) {\n var space = spaces[i];\n position += space;\n var p = position;\n if (closed) {\n p %= pathLength;\n if (p < 0)\n p += pathLength;\n curve = 0;\n }\n else if (p < 0) {\n this.addBeforePosition(p, world, 0, out, o);\n continue;\n }\n else if (p > pathLength) {\n this.addAfterPosition(p - pathLength, world, verticesLength - 4, out, o);\n continue;\n }\n for (;; curve++) {\n var length_6 = curves[curve];\n if (p > length_6)\n continue;\n if (curve == 0)\n p /= length_6;\n else {\n var prev = curves[curve - 1];\n p = (p - prev) / (length_6 - prev);\n }\n break;\n }\n if (curve != prevCurve) {\n prevCurve = curve;\n var ii = curve * 6;\n x1 = world[ii];\n y1 = world[ii + 1];\n cx1 = world[ii + 2];\n cy1 = world[ii + 3];\n cx2 = world[ii + 4];\n cy2 = world[ii + 5];\n x2 = world[ii + 6];\n y2 = world[ii + 7];\n tmpx = (x1 - cx1 * 2 + cx2) * 0.03;\n tmpy = (y1 - cy1 * 2 + cy2) * 0.03;\n dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.006;\n dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.006;\n ddfx = tmpx * 2 + dddfx;\n ddfy = tmpy * 2 + dddfy;\n dfx = (cx1 - x1) * 0.3 + tmpx + dddfx * 0.16666667;\n dfy = (cy1 - y1) * 0.3 + tmpy + dddfy * 0.16666667;\n curveLength = Math.sqrt(dfx * dfx + dfy * dfy);\n segments[0] = curveLength;\n for (ii = 1; ii < 8; ii++) {\n dfx += ddfx;\n dfy += ddfy;\n ddfx += dddfx;\n ddfy += dddfy;\n curveLength += Math.sqrt(dfx * dfx + dfy * dfy);\n segments[ii] = curveLength;\n }\n dfx += ddfx;\n dfy += ddfy;\n curveLength += Math.sqrt(dfx * dfx + dfy * dfy);\n segments[8] = curveLength;\n dfx += ddfx + dddfx;\n dfy += ddfy + dddfy;\n curveLength += Math.sqrt(dfx * dfx + dfy * dfy);\n segments[9] = curveLength;\n segment = 0;\n }\n p *= curveLength;\n for (;; segment++) {\n var length_7 = segments[segment];\n if (p > length_7)\n continue;\n if (segment == 0)\n p /= length_7;\n else {\n var prev = segments[segment - 1];\n p = segment + (p - prev) / (length_7 - prev);\n }\n break;\n }\n this.addCurvePosition(p * 0.1, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents || (i > 0 && space == 0));\n }\n return out;\n };\n PathConstraint.prototype.addBeforePosition = function (p, temp, i, out, o) {\n var x1 = temp[i], y1 = temp[i + 1], dx = temp[i + 2] - x1, dy = temp[i + 3] - y1, r = Math.atan2(dy, dx);\n out[o] = x1 + p * Math.cos(r);\n out[o + 1] = y1 + p * Math.sin(r);\n out[o + 2] = r;\n };\n PathConstraint.prototype.addAfterPosition = function (p, temp, i, out, o) {\n var x1 = temp[i + 2], y1 = temp[i + 3], dx = x1 - temp[i], dy = y1 - temp[i + 1], r = Math.atan2(dy, dx);\n out[o] = x1 + p * Math.cos(r);\n out[o + 1] = y1 + p * Math.sin(r);\n out[o + 2] = r;\n };\n PathConstraint.prototype.addCurvePosition = function (p, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents) {\n if (p == 0 || isNaN(p)) {\n out[o] = x1;\n out[o + 1] = y1;\n out[o + 2] = Math.atan2(cy1 - y1, cx1 - x1);\n return;\n }\n var tt = p * p, ttt = tt * p, u = 1 - p, uu = u * u, uuu = uu * u;\n var ut = u * p, ut3 = ut * 3, uut3 = u * ut3, utt3 = ut3 * p;\n var x = x1 * uuu + cx1 * uut3 + cx2 * utt3 + x2 * ttt, y = y1 * uuu + cy1 * uut3 + cy2 * utt3 + y2 * ttt;\n out[o] = x;\n out[o + 1] = y;\n if (tangents) {\n if (p < 0.001)\n out[o + 2] = Math.atan2(cy1 - y1, cx1 - x1);\n else\n out[o + 2] = Math.atan2(y - (y1 * uu + cy1 * ut * 2 + cy2 * tt), x - (x1 * uu + cx1 * ut * 2 + cx2 * tt));\n }\n };\n PathConstraint.NONE = -1;\n PathConstraint.BEFORE = -2;\n PathConstraint.AFTER = -3;\n PathConstraint.epsilon = 0.00001;\n return PathConstraint;\n }());\n spine.PathConstraint = PathConstraint;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var PathConstraintData = (function (_super) {\n __extends(PathConstraintData, _super);\n function PathConstraintData(name) {\n var _this = _super.call(this, name, 0, false) || this;\n _this.bones = new Array();\n return _this;\n }\n return PathConstraintData;\n }(spine.ConstraintData));\n spine.PathConstraintData = PathConstraintData;\n var PositionMode;\n (function (PositionMode) {\n PositionMode[PositionMode[\"Fixed\"] = 0] = \"Fixed\";\n PositionMode[PositionMode[\"Percent\"] = 1] = \"Percent\";\n })(PositionMode = spine.PositionMode || (spine.PositionMode = {}));\n var SpacingMode;\n (function (SpacingMode) {\n SpacingMode[SpacingMode[\"Length\"] = 0] = \"Length\";\n SpacingMode[SpacingMode[\"Fixed\"] = 1] = \"Fixed\";\n SpacingMode[SpacingMode[\"Percent\"] = 2] = \"Percent\";\n })(SpacingMode = spine.SpacingMode || (spine.SpacingMode = {}));\n var RotateMode;\n (function (RotateMode) {\n RotateMode[RotateMode[\"Tangent\"] = 0] = \"Tangent\";\n RotateMode[RotateMode[\"Chain\"] = 1] = \"Chain\";\n RotateMode[RotateMode[\"ChainScale\"] = 2] = \"ChainScale\";\n })(RotateMode = spine.RotateMode || (spine.RotateMode = {}));\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var Assets = (function () {\n function Assets(clientId) {\n this.toLoad = new Array();\n this.assets = {};\n this.clientId = clientId;\n }\n Assets.prototype.loaded = function () {\n var i = 0;\n for (var v in this.assets)\n i++;\n return i;\n };\n return Assets;\n }());\n var SharedAssetManager = (function () {\n function SharedAssetManager(pathPrefix) {\n if (pathPrefix === void 0) { pathPrefix = \"\"; }\n this.clientAssets = {};\n this.queuedAssets = {};\n this.rawAssets = {};\n this.errors = {};\n this.pathPrefix = pathPrefix;\n }\n SharedAssetManager.prototype.queueAsset = function (clientId, textureLoader, path) {\n var clientAssets = this.clientAssets[clientId];\n if (clientAssets === null || clientAssets === undefined) {\n clientAssets = new Assets(clientId);\n this.clientAssets[clientId] = clientAssets;\n }\n if (textureLoader !== null)\n clientAssets.textureLoader = textureLoader;\n clientAssets.toLoad.push(path);\n if (this.queuedAssets[path] === path) {\n return false;\n }\n else {\n this.queuedAssets[path] = path;\n return true;\n }\n };\n SharedAssetManager.prototype.loadText = function (clientId, path) {\n var _this = this;\n path = this.pathPrefix + path;\n if (!this.queueAsset(clientId, null, path))\n return;\n var request = new XMLHttpRequest();\n request.onreadystatechange = function () {\n if (request.readyState == XMLHttpRequest.DONE) {\n if (request.status >= 200 && request.status < 300) {\n _this.rawAssets[path] = request.responseText;\n }\n else {\n _this.errors[path] = \"Couldn't load text \" + path + \": status \" + request.status + \", \" + request.responseText;\n }\n }\n };\n request.open(\"GET\", path, true);\n request.send();\n };\n SharedAssetManager.prototype.loadJson = function (clientId, path) {\n var _this = this;\n path = this.pathPrefix + path;\n if (!this.queueAsset(clientId, null, path))\n return;\n var request = new XMLHttpRequest();\n request.onreadystatechange = function () {\n if (request.readyState == XMLHttpRequest.DONE) {\n if (request.status >= 200 && request.status < 300) {\n _this.rawAssets[path] = JSON.parse(request.responseText);\n }\n else {\n _this.errors[path] = \"Couldn't load text \" + path + \": status \" + request.status + \", \" + request.responseText;\n }\n }\n };\n request.open(\"GET\", path, true);\n request.send();\n };\n SharedAssetManager.prototype.loadTexture = function (clientId, textureLoader, path) {\n var _this = this;\n path = this.pathPrefix + path;\n if (!this.queueAsset(clientId, textureLoader, path))\n return;\n var img = new Image();\n img.src = path;\n img.crossOrigin = \"anonymous\";\n img.onload = function (ev) {\n _this.rawAssets[path] = img;\n };\n img.onerror = function (ev) {\n _this.errors[path] = \"Couldn't load image \" + path;\n };\n };\n SharedAssetManager.prototype.get = function (clientId, path) {\n path = this.pathPrefix + path;\n var clientAssets = this.clientAssets[clientId];\n if (clientAssets === null || clientAssets === undefined)\n return true;\n return clientAssets.assets[path];\n };\n SharedAssetManager.prototype.updateClientAssets = function (clientAssets) {\n for (var i = 0; i < clientAssets.toLoad.length; i++) {\n var path = clientAssets.toLoad[i];\n var asset = clientAssets.assets[path];\n if (asset === null || asset === undefined) {\n var rawAsset = this.rawAssets[path];\n if (rawAsset === null || rawAsset === undefined)\n continue;\n if (rawAsset instanceof HTMLImageElement) {\n clientAssets.assets[path] = clientAssets.textureLoader(rawAsset);\n }\n else {\n clientAssets.assets[path] = rawAsset;\n }\n }\n }\n };\n SharedAssetManager.prototype.isLoadingComplete = function (clientId) {\n var clientAssets = this.clientAssets[clientId];\n if (clientAssets === null || clientAssets === undefined)\n return true;\n this.updateClientAssets(clientAssets);\n return clientAssets.toLoad.length == clientAssets.loaded();\n };\n SharedAssetManager.prototype.dispose = function () {\n };\n SharedAssetManager.prototype.hasErrors = function () {\n return Object.keys(this.errors).length > 0;\n };\n SharedAssetManager.prototype.getErrors = function () {\n return this.errors;\n };\n return SharedAssetManager;\n }());\n spine.SharedAssetManager = SharedAssetManager;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var Skeleton = (function () {\n function Skeleton(data) {\n this._updateCache = new Array();\n this.updateCacheReset = new Array();\n this.time = 0;\n this.scaleX = 1;\n this.scaleY = 1;\n this.x = 0;\n this.y = 0;\n if (data == null)\n throw new Error(\"data cannot be null.\");\n this.data = data;\n this.bones = new Array();\n for (var i = 0; i < data.bones.length; i++) {\n var boneData = data.bones[i];\n var bone = void 0;\n if (boneData.parent == null)\n bone = new spine.Bone(boneData, this, null);\n else {\n var parent_1 = this.bones[boneData.parent.index];\n bone = new spine.Bone(boneData, this, parent_1);\n parent_1.children.push(bone);\n }\n this.bones.push(bone);\n }\n this.slots = new Array();\n this.drawOrder = new Array();\n for (var i = 0; i < data.slots.length; i++) {\n var slotData = data.slots[i];\n var bone = this.bones[slotData.boneData.index];\n var slot = new spine.Slot(slotData, bone);\n this.slots.push(slot);\n this.drawOrder.push(slot);\n }\n this.ikConstraints = new Array();\n for (var i = 0; i < data.ikConstraints.length; i++) {\n var ikConstraintData = data.ikConstraints[i];\n this.ikConstraints.push(new spine.IkConstraint(ikConstraintData, this));\n }\n this.transformConstraints = new Array();\n for (var i = 0; i < data.transformConstraints.length; i++) {\n var transformConstraintData = data.transformConstraints[i];\n this.transformConstraints.push(new spine.TransformConstraint(transformConstraintData, this));\n }\n this.pathConstraints = new Array();\n for (var i = 0; i < data.pathConstraints.length; i++) {\n var pathConstraintData = data.pathConstraints[i];\n this.pathConstraints.push(new spine.PathConstraint(pathConstraintData, this));\n }\n this.color = new spine.Color(1, 1, 1, 1);\n this.updateCache();\n }\n Skeleton.prototype.updateCache = function () {\n var updateCache = this._updateCache;\n updateCache.length = 0;\n this.updateCacheReset.length = 0;\n var bones = this.bones;\n for (var i = 0, n = bones.length; i < n; i++) {\n var bone = bones[i];\n bone.sorted = bone.data.skinRequired;\n bone.active = !bone.sorted;\n }\n if (this.skin != null) {\n var skinBones = this.skin.bones;\n for (var i = 0, n = this.skin.bones.length; i < n; i++) {\n var bone = this.bones[skinBones[i].index];\n do {\n bone.sorted = false;\n bone.active = true;\n bone = bone.parent;\n } while (bone != null);\n }\n }\n var ikConstraints = this.ikConstraints;\n var transformConstraints = this.transformConstraints;\n var pathConstraints = this.pathConstraints;\n var ikCount = ikConstraints.length, transformCount = transformConstraints.length, pathCount = pathConstraints.length;\n var constraintCount = ikCount + transformCount + pathCount;\n outer: for (var i = 0; i < constraintCount; i++) {\n for (var ii = 0; ii < ikCount; ii++) {\n var constraint = ikConstraints[ii];\n if (constraint.data.order == i) {\n this.sortIkConstraint(constraint);\n continue outer;\n }\n }\n for (var ii = 0; ii < transformCount; ii++) {\n var constraint = transformConstraints[ii];\n if (constraint.data.order == i) {\n this.sortTransformConstraint(constraint);\n continue outer;\n }\n }\n for (var ii = 0; ii < pathCount; ii++) {\n var constraint = pathConstraints[ii];\n if (constraint.data.order == i) {\n this.sortPathConstraint(constraint);\n continue outer;\n }\n }\n }\n for (var i = 0, n = bones.length; i < n; i++)\n this.sortBone(bones[i]);\n };\n Skeleton.prototype.sortIkConstraint = function (constraint) {\n constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin != null && spine.Utils.contains(this.skin.constraints, constraint.data, true)));\n if (!constraint.active)\n return;\n var target = constraint.target;\n this.sortBone(target);\n var constrained = constraint.bones;\n var parent = constrained[0];\n this.sortBone(parent);\n if (constrained.length > 1) {\n var child = constrained[constrained.length - 1];\n if (!(this._updateCache.indexOf(child) > -1))\n this.updateCacheReset.push(child);\n }\n this._updateCache.push(constraint);\n this.sortReset(parent.children);\n constrained[constrained.length - 1].sorted = true;\n };\n Skeleton.prototype.sortPathConstraint = function (constraint) {\n constraint.active = constraint.target.bone.isActive() && (!constraint.data.skinRequired || (this.skin != null && spine.Utils.contains(this.skin.constraints, constraint.data, true)));\n if (!constraint.active)\n return;\n var slot = constraint.target;\n var slotIndex = slot.data.index;\n var slotBone = slot.bone;\n if (this.skin != null)\n this.sortPathConstraintAttachment(this.skin, slotIndex, slotBone);\n if (this.data.defaultSkin != null && this.data.defaultSkin != this.skin)\n this.sortPathConstraintAttachment(this.data.defaultSkin, slotIndex, slotBone);\n for (var i = 0, n = this.data.skins.length; i < n; i++)\n this.sortPathConstraintAttachment(this.data.skins[i], slotIndex, slotBone);\n var attachment = slot.getAttachment();\n if (attachment instanceof spine.PathAttachment)\n this.sortPathConstraintAttachmentWith(attachment, slotBone);\n var constrained = constraint.bones;\n var boneCount = constrained.length;\n for (var i = 0; i < boneCount; i++)\n this.sortBone(constrained[i]);\n this._updateCache.push(constraint);\n for (var i = 0; i < boneCount; i++)\n this.sortReset(constrained[i].children);\n for (var i = 0; i < boneCount; i++)\n constrained[i].sorted = true;\n };\n Skeleton.prototype.sortTransformConstraint = function (constraint) {\n constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin != null && spine.Utils.contains(this.skin.constraints, constraint.data, true)));\n if (!constraint.active)\n return;\n this.sortBone(constraint.target);\n var constrained = constraint.bones;\n var boneCount = constrained.length;\n if (constraint.data.local) {\n for (var i = 0; i < boneCount; i++) {\n var child = constrained[i];\n this.sortBone(child.parent);\n if (!(this._updateCache.indexOf(child) > -1))\n this.updateCacheReset.push(child);\n }\n }\n else {\n for (var i = 0; i < boneCount; i++) {\n this.sortBone(constrained[i]);\n }\n }\n this._updateCache.push(constraint);\n for (var ii = 0; ii < boneCount; ii++)\n this.sortReset(constrained[ii].children);\n for (var ii = 0; ii < boneCount; ii++)\n constrained[ii].sorted = true;\n };\n Skeleton.prototype.sortPathConstraintAttachment = function (skin, slotIndex, slotBone) {\n var attachments = skin.attachments[slotIndex];\n if (!attachments)\n return;\n for (var key in attachments) {\n this.sortPathConstraintAttachmentWith(attachments[key], slotBone);\n }\n };\n Skeleton.prototype.sortPathConstraintAttachmentWith = function (attachment, slotBone) {\n if (!(attachment instanceof spine.PathAttachment))\n return;\n var pathBones = attachment.bones;\n if (pathBones == null)\n this.sortBone(slotBone);\n else {\n var bones = this.bones;\n var i = 0;\n while (i < pathBones.length) {\n var boneCount = pathBones[i++];\n for (var n = i + boneCount; i < n; i++) {\n var boneIndex = pathBones[i];\n this.sortBone(bones[boneIndex]);\n }\n }\n }\n };\n Skeleton.prototype.sortBone = function (bone) {\n if (bone.sorted)\n return;\n var parent = bone.parent;\n if (parent != null)\n this.sortBone(parent);\n bone.sorted = true;\n this._updateCache.push(bone);\n };\n Skeleton.prototype.sortReset = function (bones) {\n for (var i = 0, n = bones.length; i < n; i++) {\n var bone = bones[i];\n if (!bone.active)\n continue;\n if (bone.sorted)\n this.sortReset(bone.children);\n bone.sorted = false;\n }\n };\n Skeleton.prototype.updateWorldTransform = function () {\n var updateCacheReset = this.updateCacheReset;\n for (var i = 0, n = updateCacheReset.length; i < n; i++) {\n var bone = updateCacheReset[i];\n bone.ax = bone.x;\n bone.ay = bone.y;\n bone.arotation = bone.rotation;\n bone.ascaleX = bone.scaleX;\n bone.ascaleY = bone.scaleY;\n bone.ashearX = bone.shearX;\n bone.ashearY = bone.shearY;\n bone.appliedValid = true;\n }\n var updateCache = this._updateCache;\n for (var i = 0, n = updateCache.length; i < n; i++)\n updateCache[i].update();\n };\n Skeleton.prototype.setToSetupPose = function () {\n this.setBonesToSetupPose();\n this.setSlotsToSetupPose();\n };\n Skeleton.prototype.setBonesToSetupPose = function () {\n var bones = this.bones;\n for (var i = 0, n = bones.length; i < n; i++)\n bones[i].setToSetupPose();\n var ikConstraints = this.ikConstraints;\n for (var i = 0, n = ikConstraints.length; i < n; i++) {\n var constraint = ikConstraints[i];\n constraint.mix = constraint.data.mix;\n constraint.softness = constraint.data.softness;\n constraint.bendDirection = constraint.data.bendDirection;\n constraint.compress = constraint.data.compress;\n constraint.stretch = constraint.data.stretch;\n }\n var transformConstraints = this.transformConstraints;\n for (var i = 0, n = transformConstraints.length; i < n; i++) {\n var constraint = transformConstraints[i];\n var data = constraint.data;\n constraint.rotateMix = data.rotateMix;\n constraint.translateMix = data.translateMix;\n constraint.scaleMix = data.scaleMix;\n constraint.shearMix = data.shearMix;\n }\n var pathConstraints = this.pathConstraints;\n for (var i = 0, n = pathConstraints.length; i < n; i++) {\n var constraint = pathConstraints[i];\n var data = constraint.data;\n constraint.position = data.position;\n constraint.spacing = data.spacing;\n constraint.rotateMix = data.rotateMix;\n constraint.translateMix = data.translateMix;\n }\n };\n Skeleton.prototype.setSlotsToSetupPose = function () {\n var slots = this.slots;\n spine.Utils.arrayCopy(slots, 0, this.drawOrder, 0, slots.length);\n for (var i = 0, n = slots.length; i < n; i++)\n slots[i].setToSetupPose();\n };\n Skeleton.prototype.getRootBone = function () {\n if (this.bones.length == 0)\n return null;\n return this.bones[0];\n };\n Skeleton.prototype.findBone = function (boneName) {\n if (boneName == null)\n throw new Error(\"boneName cannot be null.\");\n var bones = this.bones;\n for (var i = 0, n = bones.length; i < n; i++) {\n var bone = bones[i];\n if (bone.data.name == boneName)\n return bone;\n }\n return null;\n };\n Skeleton.prototype.findBoneIndex = function (boneName) {\n if (boneName == null)\n throw new Error(\"boneName cannot be null.\");\n var bones = this.bones;\n for (var i = 0, n = bones.length; i < n; i++)\n if (bones[i].data.name == boneName)\n return i;\n return -1;\n };\n Skeleton.prototype.findSlot = function (slotName) {\n if (slotName == null)\n throw new Error(\"slotName cannot be null.\");\n var slots = this.slots;\n for (var i = 0, n = slots.length; i < n; i++) {\n var slot = slots[i];\n if (slot.data.name == slotName)\n return slot;\n }\n return null;\n };\n Skeleton.prototype.findSlotIndex = function (slotName) {\n if (slotName == null)\n throw new Error(\"slotName cannot be null.\");\n var slots = this.slots;\n for (var i = 0, n = slots.length; i < n; i++)\n if (slots[i].data.name == slotName)\n return i;\n return -1;\n };\n Skeleton.prototype.setSkinByName = function (skinName) {\n var skin = this.data.findSkin(skinName);\n if (skin == null)\n throw new Error(\"Skin not found: \" + skinName);\n this.setSkin(skin);\n };\n Skeleton.prototype.setSkin = function (newSkin) {\n if (newSkin == this.skin)\n return;\n if (newSkin != null) {\n if (this.skin != null)\n newSkin.attachAll(this, this.skin);\n else {\n var slots = this.slots;\n for (var i = 0, n = slots.length; i < n; i++) {\n var slot = slots[i];\n var name_1 = slot.data.attachmentName;\n if (name_1 != null) {\n var attachment = newSkin.getAttachment(i, name_1);\n if (attachment != null)\n slot.setAttachment(attachment);\n }\n }\n }\n }\n this.skin = newSkin;\n this.updateCache();\n };\n Skeleton.prototype.getAttachmentByName = function (slotName, attachmentName) {\n return this.getAttachment(this.data.findSlotIndex(slotName), attachmentName);\n };\n Skeleton.prototype.getAttachment = function (slotIndex, attachmentName) {\n if (attachmentName == null)\n throw new Error(\"attachmentName cannot be null.\");\n if (this.skin != null) {\n var attachment = this.skin.getAttachment(slotIndex, attachmentName);\n if (attachment != null)\n return attachment;\n }\n if (this.data.defaultSkin != null)\n return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);\n return null;\n };\n Skeleton.prototype.setAttachment = function (slotName, attachmentName) {\n if (slotName == null)\n throw new Error(\"slotName cannot be null.\");\n var slots = this.slots;\n for (var i = 0, n = slots.length; i < n; i++) {\n var slot = slots[i];\n if (slot.data.name == slotName) {\n var attachment = null;\n if (attachmentName != null) {\n attachment = this.getAttachment(i, attachmentName);\n if (attachment == null)\n throw new Error(\"Attachment not found: \" + attachmentName + \", for slot: \" + slotName);\n }\n slot.setAttachment(attachment);\n return;\n }\n }\n throw new Error(\"Slot not found: \" + slotName);\n };\n Skeleton.prototype.findIkConstraint = function (constraintName) {\n if (constraintName == null)\n throw new Error(\"constraintName cannot be null.\");\n var ikConstraints = this.ikConstraints;\n for (var i = 0, n = ikConstraints.length; i < n; i++) {\n var ikConstraint = ikConstraints[i];\n if (ikConstraint.data.name == constraintName)\n return ikConstraint;\n }\n return null;\n };\n Skeleton.prototype.findTransformConstraint = function (constraintName) {\n if (constraintName == null)\n throw new Error(\"constraintName cannot be null.\");\n var transformConstraints = this.transformConstraints;\n for (var i = 0, n = transformConstraints.length; i < n; i++) {\n var constraint = transformConstraints[i];\n if (constraint.data.name == constraintName)\n return constraint;\n }\n return null;\n };\n Skeleton.prototype.findPathConstraint = function (constraintName) {\n if (constraintName == null)\n throw new Error(\"constraintName cannot be null.\");\n var pathConstraints = this.pathConstraints;\n for (var i = 0, n = pathConstraints.length; i < n; i++) {\n var constraint = pathConstraints[i];\n if (constraint.data.name == constraintName)\n return constraint;\n }\n return null;\n };\n Skeleton.prototype.getBounds = function (offset, size, temp) {\n if (temp === void 0) { temp = new Array(2); }\n if (offset == null)\n throw new Error(\"offset cannot be null.\");\n if (size == null)\n throw new Error(\"size cannot be null.\");\n var drawOrder = this.drawOrder;\n var minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY;\n for (var i = 0, n = drawOrder.length; i < n; i++) {\n var slot = drawOrder[i];\n if (!slot.bone.active)\n continue;\n var verticesLength = 0;\n var vertices = null;\n var attachment = slot.getAttachment();\n if (attachment instanceof spine.RegionAttachment) {\n verticesLength = 8;\n vertices = spine.Utils.setArraySize(temp, verticesLength, 0);\n attachment.computeWorldVertices(slot.bone, vertices, 0, 2);\n }\n else if (attachment instanceof spine.MeshAttachment) {\n var mesh = attachment;\n verticesLength = mesh.worldVerticesLength;\n vertices = spine.Utils.setArraySize(temp, verticesLength, 0);\n mesh.computeWorldVertices(slot, 0, verticesLength, vertices, 0, 2);\n }\n if (vertices != null) {\n for (var ii = 0, nn = vertices.length; ii < nn; ii += 2) {\n var x = vertices[ii], y = vertices[ii + 1];\n minX = Math.min(minX, x);\n minY = Math.min(minY, y);\n maxX = Math.max(maxX, x);\n maxY = Math.max(maxY, y);\n }\n }\n }\n offset.set(minX, minY);\n size.set(maxX - minX, maxY - minY);\n };\n Skeleton.prototype.update = function (delta) {\n this.time += delta;\n };\n return Skeleton;\n }());\n spine.Skeleton = Skeleton;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var SkeletonBinary = (function () {\n function SkeletonBinary(attachmentLoader) {\n this.scale = 1;\n this.linkedMeshes = new Array();\n this.attachmentLoader = attachmentLoader;\n }\n SkeletonBinary.prototype.readSkeletonData = function (binary) {\n var scale = this.scale;\n var skeletonData = new spine.SkeletonData();\n skeletonData.name = \"\";\n var input = new BinaryInput(binary);\n skeletonData.hash = input.readString();\n skeletonData.version = input.readString();\n skeletonData.x = input.readFloat();\n skeletonData.y = input.readFloat();\n skeletonData.width = input.readFloat();\n skeletonData.height = input.readFloat();\n var nonessential = input.readBoolean();\n if (nonessential) {\n skeletonData.fps = input.readFloat();\n skeletonData.imagesPath = input.readString();\n skeletonData.audioPath = input.readString();\n }\n var n = 0;\n n = input.readInt(true);\n for (var i = 0; i < n; i++)\n input.strings.push(input.readString());\n n = input.readInt(true);\n for (var i = 0; i < n; i++) {\n var name_2 = input.readString();\n var parent_2 = i == 0 ? null : skeletonData.bones[input.readInt(true)];\n var data = new spine.BoneData(i, name_2, parent_2);\n data.rotation = input.readFloat();\n data.x = input.readFloat() * scale;\n data.y = input.readFloat() * scale;\n data.scaleX = input.readFloat();\n data.scaleY = input.readFloat();\n data.shearX = input.readFloat();\n data.shearY = input.readFloat();\n data.length = input.readFloat() * scale;\n data.transformMode = SkeletonBinary.TransformModeValues[input.readInt(true)];\n data.skinRequired = input.readBoolean();\n if (nonessential)\n spine.Color.rgba8888ToColor(data.color, input.readInt32());\n skeletonData.bones.push(data);\n }\n n = input.readInt(true);\n for (var i = 0; i < n; i++) {\n var slotName = input.readString();\n var boneData = skeletonData.bones[input.readInt(true)];\n var data = new spine.SlotData(i, slotName, boneData);\n spine.Color.rgba8888ToColor(data.color, input.readInt32());\n var darkColor = input.readInt32();\n if (darkColor != -1)\n spine.Color.rgb888ToColor(data.darkColor = new spine.Color(), darkColor);\n data.attachmentName = input.readStringRef();\n data.blendMode = SkeletonBinary.BlendModeValues[input.readInt(true)];\n skeletonData.slots.push(data);\n }\n n = input.readInt(true);\n for (var i = 0, nn = void 0; i < n; i++) {\n var data = new spine.IkConstraintData(input.readString());\n data.order = input.readInt(true);\n data.skinRequired = input.readBoolean();\n nn = input.readInt(true);\n for (var ii = 0; ii < nn; ii++)\n data.bones.push(skeletonData.bones[input.readInt(true)]);\n data.target = skeletonData.bones[input.readInt(true)];\n data.mix = input.readFloat();\n data.softness = input.readFloat() * scale;\n data.bendDirection = input.readByte();\n data.compress = input.readBoolean();\n data.stretch = input.readBoolean();\n data.uniform = input.readBoolean();\n skeletonData.ikConstraints.push(data);\n }\n n = input.readInt(true);\n for (var i = 0, nn = void 0; i < n; i++) {\n var data = new spine.TransformConstraintData(input.readString());\n data.order = input.readInt(true);\n data.skinRequired = input.readBoolean();\n nn = input.readInt(true);\n for (var ii = 0; ii < nn; ii++)\n data.bones.push(skeletonData.bones[input.readInt(true)]);\n data.target = skeletonData.bones[input.readInt(true)];\n data.local = input.readBoolean();\n data.relative = input.readBoolean();\n data.offsetRotation = input.readFloat();\n data.offsetX = input.readFloat() * scale;\n data.offsetY = input.readFloat() * scale;\n data.offsetScaleX = input.readFloat();\n data.offsetScaleY = input.readFloat();\n data.offsetShearY = input.readFloat();\n data.rotateMix = input.readFloat();\n data.translateMix = input.readFloat();\n data.scaleMix = input.readFloat();\n data.shearMix = input.readFloat();\n skeletonData.transformConstraints.push(data);\n }\n n = input.readInt(true);\n for (var i = 0, nn = void 0; i < n; i++) {\n var data = new spine.PathConstraintData(input.readString());\n data.order = input.readInt(true);\n data.skinRequired = input.readBoolean();\n nn = input.readInt(true);\n for (var ii = 0; ii < nn; ii++)\n data.bones.push(skeletonData.bones[input.readInt(true)]);\n data.target = skeletonData.slots[input.readInt(true)];\n data.positionMode = SkeletonBinary.PositionModeValues[input.readInt(true)];\n data.spacingMode = SkeletonBinary.SpacingModeValues[input.readInt(true)];\n data.rotateMode = SkeletonBinary.RotateModeValues[input.readInt(true)];\n data.offsetRotation = input.readFloat();\n data.position = input.readFloat();\n if (data.positionMode == spine.PositionMode.Fixed)\n data.position *= scale;\n data.spacing = input.readFloat();\n if (data.spacingMode == spine.SpacingMode.Length || data.spacingMode == spine.SpacingMode.Fixed)\n data.spacing *= scale;\n data.rotateMix = input.readFloat();\n data.translateMix = input.readFloat();\n skeletonData.pathConstraints.push(data);\n }\n var defaultSkin = this.readSkin(input, skeletonData, true, nonessential);\n if (defaultSkin != null) {\n skeletonData.defaultSkin = defaultSkin;\n skeletonData.skins.push(defaultSkin);\n }\n {\n var i = skeletonData.skins.length;\n spine.Utils.setArraySize(skeletonData.skins, n = i + input.readInt(true));\n for (; i < n; i++)\n skeletonData.skins[i] = this.readSkin(input, skeletonData, false, nonessential);\n }\n n = this.linkedMeshes.length;\n for (var i = 0; i < n; i++) {\n var linkedMesh = this.linkedMeshes[i];\n var skin = linkedMesh.skin == null ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin);\n if (skin == null)\n throw new Error(\"Skin not found: \" + linkedMesh.skin);\n var parent_3 = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent);\n if (parent_3 == null)\n throw new Error(\"Parent mesh not found: \" + linkedMesh.parent);\n linkedMesh.mesh.deformAttachment = linkedMesh.inheritDeform ? parent_3 : linkedMesh.mesh;\n linkedMesh.mesh.setParentMesh(parent_3);\n linkedMesh.mesh.updateUVs();\n }\n this.linkedMeshes.length = 0;\n n = input.readInt(true);\n for (var i = 0; i < n; i++) {\n var data = new spine.EventData(input.readStringRef());\n data.intValue = input.readInt(false);\n data.floatValue = input.readFloat();\n data.stringValue = input.readString();\n data.audioPath = input.readString();\n if (data.audioPath != null) {\n data.volume = input.readFloat();\n data.balance = input.readFloat();\n }\n skeletonData.events.push(data);\n }\n n = input.readInt(true);\n for (var i = 0; i < n; i++)\n skeletonData.animations.push(this.readAnimation(input, input.readString(), skeletonData));\n return skeletonData;\n };\n SkeletonBinary.prototype.readSkin = function (input, skeletonData, defaultSkin, nonessential) {\n var skin = null;\n var slotCount = 0;\n if (defaultSkin) {\n slotCount = input.readInt(true);\n if (slotCount == 0)\n return null;\n skin = new spine.Skin(\"default\");\n }\n else {\n skin = new spine.Skin(input.readStringRef());\n skin.bones.length = input.readInt(true);\n for (var i = 0, n = skin.bones.length; i < n; i++)\n skin.bones[i] = skeletonData.bones[input.readInt(true)];\n for (var i = 0, n = input.readInt(true); i < n; i++)\n skin.constraints.push(skeletonData.ikConstraints[input.readInt(true)]);\n for (var i = 0, n = input.readInt(true); i < n; i++)\n skin.constraints.push(skeletonData.transformConstraints[input.readInt(true)]);\n for (var i = 0, n = input.readInt(true); i < n; i++)\n skin.constraints.push(skeletonData.pathConstraints[input.readInt(true)]);\n slotCount = input.readInt(true);\n }\n for (var i = 0; i < slotCount; i++) {\n var slotIndex = input.readInt(true);\n for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n var name_3 = input.readStringRef();\n var attachment = this.readAttachment(input, skeletonData, skin, slotIndex, name_3, nonessential);\n if (attachment != null)\n skin.setAttachment(slotIndex, name_3, attachment);\n }\n }\n return skin;\n };\n SkeletonBinary.prototype.readAttachment = function (input, skeletonData, skin, slotIndex, attachmentName, nonessential) {\n var scale = this.scale;\n var name = input.readStringRef();\n if (name == null)\n name = attachmentName;\n var typeIndex = input.readByte();\n var type = SkeletonBinary.AttachmentTypeValues[typeIndex];\n switch (type) {\n case spine.AttachmentType.Region: {\n var path = input.readStringRef();\n var rotation = input.readFloat();\n var x = input.readFloat();\n var y = input.readFloat();\n var scaleX = input.readFloat();\n var scaleY = input.readFloat();\n var width = input.readFloat();\n var height = input.readFloat();\n var color = input.readInt32();\n if (path == null)\n path = name;\n var region = this.attachmentLoader.newRegionAttachment(skin, name, path);\n if (region == null)\n return null;\n region.path = path;\n region.x = x * scale;\n region.y = y * scale;\n region.scaleX = scaleX;\n region.scaleY = scaleY;\n region.rotation = rotation;\n region.width = width * scale;\n region.height = height * scale;\n spine.Color.rgba8888ToColor(region.color, color);\n region.updateOffset();\n return region;\n }\n case spine.AttachmentType.BoundingBox: {\n var vertexCount = input.readInt(true);\n var vertices = this.readVertices(input, vertexCount);\n var color = nonessential ? input.readInt32() : 0;\n var box = this.attachmentLoader.newBoundingBoxAttachment(skin, name);\n if (box == null)\n return null;\n box.worldVerticesLength = vertexCount << 1;\n box.vertices = vertices.vertices;\n box.bones = vertices.bones;\n if (nonessential)\n spine.Color.rgba8888ToColor(box.color, color);\n return box;\n }\n case spine.AttachmentType.Mesh: {\n var path = input.readStringRef();\n var color = input.readInt32();\n var vertexCount = input.readInt(true);\n var uvs = this.readFloatArray(input, vertexCount << 1, 1);\n var triangles = this.readShortArray(input);\n var vertices = this.readVertices(input, vertexCount);\n var hullLength = input.readInt(true);\n var edges = null;\n var width = 0, height = 0;\n if (nonessential) {\n edges = this.readShortArray(input);\n width = input.readFloat();\n height = input.readFloat();\n }\n if (path == null)\n path = name;\n var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path);\n if (mesh == null)\n return null;\n mesh.path = path;\n spine.Color.rgba8888ToColor(mesh.color, color);\n mesh.bones = vertices.bones;\n mesh.vertices = vertices.vertices;\n mesh.worldVerticesLength = vertexCount << 1;\n mesh.triangles = triangles;\n mesh.regionUVs = uvs;\n mesh.updateUVs();\n mesh.hullLength = hullLength << 1;\n if (nonessential) {\n mesh.edges = edges;\n mesh.width = width * scale;\n mesh.height = height * scale;\n }\n return mesh;\n }\n case spine.AttachmentType.LinkedMesh: {\n var path = input.readStringRef();\n var color = input.readInt32();\n var skinName = input.readStringRef();\n var parent_4 = input.readStringRef();\n var inheritDeform = input.readBoolean();\n var width = 0, height = 0;\n if (nonessential) {\n width = input.readFloat();\n height = input.readFloat();\n }\n if (path == null)\n path = name;\n var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path);\n if (mesh == null)\n return null;\n mesh.path = path;\n spine.Color.rgba8888ToColor(mesh.color, color);\n if (nonessential) {\n mesh.width = width * scale;\n mesh.height = height * scale;\n }\n this.linkedMeshes.push(new LinkedMesh(mesh, skinName, slotIndex, parent_4, inheritDeform));\n return mesh;\n }\n case spine.AttachmentType.Path: {\n var closed_1 = input.readBoolean();\n var constantSpeed = input.readBoolean();\n var vertexCount = input.readInt(true);\n var vertices = this.readVertices(input, vertexCount);\n var lengths = spine.Utils.newArray(vertexCount / 3, 0);\n for (var i = 0, n = lengths.length; i < n; i++)\n lengths[i] = input.readFloat() * scale;\n var color = nonessential ? input.readInt32() : 0;\n var path = this.attachmentLoader.newPathAttachment(skin, name);\n if (path == null)\n return null;\n path.closed = closed_1;\n path.constantSpeed = constantSpeed;\n path.worldVerticesLength = vertexCount << 1;\n path.vertices = vertices.vertices;\n path.bones = vertices.bones;\n path.lengths = lengths;\n if (nonessential)\n spine.Color.rgba8888ToColor(path.color, color);\n return path;\n }\n case spine.AttachmentType.Point: {\n var rotation = input.readFloat();\n var x = input.readFloat();\n var y = input.readFloat();\n var color = nonessential ? input.readInt32() : 0;\n var point = this.attachmentLoader.newPointAttachment(skin, name);\n if (point == null)\n return null;\n point.x = x * scale;\n point.y = y * scale;\n point.rotation = rotation;\n if (nonessential)\n spine.Color.rgba8888ToColor(point.color, color);\n return point;\n }\n case spine.AttachmentType.Clipping: {\n var endSlotIndex = input.readInt(true);\n var vertexCount = input.readInt(true);\n var vertices = this.readVertices(input, vertexCount);\n var color = nonessential ? input.readInt32() : 0;\n var clip = this.attachmentLoader.newClippingAttachment(skin, name);\n if (clip == null)\n return null;\n clip.endSlot = skeletonData.slots[endSlotIndex];\n clip.worldVerticesLength = vertexCount << 1;\n clip.vertices = vertices.vertices;\n clip.bones = vertices.bones;\n if (nonessential)\n spine.Color.rgba8888ToColor(clip.color, color);\n return clip;\n }\n }\n return null;\n };\n SkeletonBinary.prototype.readVertices = function (input, vertexCount) {\n var verticesLength = vertexCount << 1;\n var vertices = new Vertices();\n var scale = this.scale;\n if (!input.readBoolean()) {\n vertices.vertices = this.readFloatArray(input, verticesLength, scale);\n return vertices;\n }\n var weights = new Array();\n var bonesArray = new Array();\n for (var i = 0; i < vertexCount; i++) {\n var boneCount = input.readInt(true);\n bonesArray.push(boneCount);\n for (var ii = 0; ii < boneCount; ii++) {\n bonesArray.push(input.readInt(true));\n weights.push(input.readFloat() * scale);\n weights.push(input.readFloat() * scale);\n weights.push(input.readFloat());\n }\n }\n vertices.vertices = spine.Utils.toFloatArray(weights);\n vertices.bones = bonesArray;\n return vertices;\n };\n SkeletonBinary.prototype.readFloatArray = function (input, n, scale) {\n var array = new Array(n);\n if (scale == 1) {\n for (var i = 0; i < n; i++)\n array[i] = input.readFloat();\n }\n else {\n for (var i = 0; i < n; i++)\n array[i] = input.readFloat() * scale;\n }\n return array;\n };\n SkeletonBinary.prototype.readShortArray = function (input) {\n var n = input.readInt(true);\n var array = new Array(n);\n for (var i = 0; i < n; i++)\n array[i] = input.readShort();\n return array;\n };\n SkeletonBinary.prototype.readAnimation = function (input, name, skeletonData) {\n var timelines = new Array();\n var scale = this.scale;\n var duration = 0;\n var tempColor1 = new spine.Color();\n var tempColor2 = new spine.Color();\n for (var i = 0, n = input.readInt(true); i < n; i++) {\n var slotIndex = input.readInt(true);\n for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n var timelineType = input.readByte();\n var frameCount = input.readInt(true);\n switch (timelineType) {\n case SkeletonBinary.SLOT_ATTACHMENT: {\n var timeline = new spine.AttachmentTimeline(frameCount);\n timeline.slotIndex = slotIndex;\n for (var frameIndex = 0; frameIndex < frameCount; frameIndex++)\n timeline.setFrame(frameIndex, input.readFloat(), input.readStringRef());\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[frameCount - 1]);\n break;\n }\n case SkeletonBinary.SLOT_COLOR: {\n var timeline = new spine.ColorTimeline(frameCount);\n timeline.slotIndex = slotIndex;\n for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) {\n var time = input.readFloat();\n spine.Color.rgba8888ToColor(tempColor1, input.readInt32());\n timeline.setFrame(frameIndex, time, tempColor1.r, tempColor1.g, tempColor1.b, tempColor1.a);\n if (frameIndex < frameCount - 1)\n this.readCurve(input, frameIndex, timeline);\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.ColorTimeline.ENTRIES]);\n break;\n }\n case SkeletonBinary.SLOT_TWO_COLOR: {\n var timeline = new spine.TwoColorTimeline(frameCount);\n timeline.slotIndex = slotIndex;\n for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) {\n var time = input.readFloat();\n spine.Color.rgba8888ToColor(tempColor1, input.readInt32());\n spine.Color.rgb888ToColor(tempColor2, input.readInt32());\n timeline.setFrame(frameIndex, time, tempColor1.r, tempColor1.g, tempColor1.b, tempColor1.a, tempColor2.r, tempColor2.g, tempColor2.b);\n if (frameIndex < frameCount - 1)\n this.readCurve(input, frameIndex, timeline);\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.TwoColorTimeline.ENTRIES]);\n break;\n }\n }\n }\n }\n for (var i = 0, n = input.readInt(true); i < n; i++) {\n var boneIndex = input.readInt(true);\n for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n var timelineType = input.readByte();\n var frameCount = input.readInt(true);\n switch (timelineType) {\n case SkeletonBinary.BONE_ROTATE: {\n var timeline = new spine.RotateTimeline(frameCount);\n timeline.boneIndex = boneIndex;\n for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) {\n timeline.setFrame(frameIndex, input.readFloat(), input.readFloat());\n if (frameIndex < frameCount - 1)\n this.readCurve(input, frameIndex, timeline);\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.RotateTimeline.ENTRIES]);\n break;\n }\n case SkeletonBinary.BONE_TRANSLATE:\n case SkeletonBinary.BONE_SCALE:\n case SkeletonBinary.BONE_SHEAR: {\n var timeline = void 0;\n var timelineScale = 1;\n if (timelineType == SkeletonBinary.BONE_SCALE)\n timeline = new spine.ScaleTimeline(frameCount);\n else if (timelineType == SkeletonBinary.BONE_SHEAR)\n timeline = new spine.ShearTimeline(frameCount);\n else {\n timeline = new spine.TranslateTimeline(frameCount);\n timelineScale = scale;\n }\n timeline.boneIndex = boneIndex;\n for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) {\n timeline.setFrame(frameIndex, input.readFloat(), input.readFloat() * timelineScale, input.readFloat() * timelineScale);\n if (frameIndex < frameCount - 1)\n this.readCurve(input, frameIndex, timeline);\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.TranslateTimeline.ENTRIES]);\n break;\n }\n }\n }\n }\n for (var i = 0, n = input.readInt(true); i < n; i++) {\n var index = input.readInt(true);\n var frameCount = input.readInt(true);\n var timeline = new spine.IkConstraintTimeline(frameCount);\n timeline.ikConstraintIndex = index;\n for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) {\n timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat() * scale, input.readByte(), input.readBoolean(), input.readBoolean());\n if (frameIndex < frameCount - 1)\n this.readCurve(input, frameIndex, timeline);\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.IkConstraintTimeline.ENTRIES]);\n }\n for (var i = 0, n = input.readInt(true); i < n; i++) {\n var index = input.readInt(true);\n var frameCount = input.readInt(true);\n var timeline = new spine.TransformConstraintTimeline(frameCount);\n timeline.transformConstraintIndex = index;\n for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) {\n timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat(), input.readFloat(), input.readFloat());\n if (frameIndex < frameCount - 1)\n this.readCurve(input, frameIndex, timeline);\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.TransformConstraintTimeline.ENTRIES]);\n }\n for (var i = 0, n = input.readInt(true); i < n; i++) {\n var index = input.readInt(true);\n var data = skeletonData.pathConstraints[index];\n for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n var timelineType = input.readByte();\n var frameCount = input.readInt(true);\n switch (timelineType) {\n case SkeletonBinary.PATH_POSITION:\n case SkeletonBinary.PATH_SPACING: {\n var timeline = void 0;\n var timelineScale = 1;\n if (timelineType == SkeletonBinary.PATH_SPACING) {\n timeline = new spine.PathConstraintSpacingTimeline(frameCount);\n if (data.spacingMode == spine.SpacingMode.Length || data.spacingMode == spine.SpacingMode.Fixed)\n timelineScale = scale;\n }\n else {\n timeline = new spine.PathConstraintPositionTimeline(frameCount);\n if (data.positionMode == spine.PositionMode.Fixed)\n timelineScale = scale;\n }\n timeline.pathConstraintIndex = index;\n for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) {\n timeline.setFrame(frameIndex, input.readFloat(), input.readFloat() * timelineScale);\n if (frameIndex < frameCount - 1)\n this.readCurve(input, frameIndex, timeline);\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.PathConstraintPositionTimeline.ENTRIES]);\n break;\n }\n case SkeletonBinary.PATH_MIX: {\n var timeline = new spine.PathConstraintMixTimeline(frameCount);\n timeline.pathConstraintIndex = index;\n for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) {\n timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat());\n if (frameIndex < frameCount - 1)\n this.readCurve(input, frameIndex, timeline);\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.PathConstraintMixTimeline.ENTRIES]);\n break;\n }\n }\n }\n }\n for (var i = 0, n = input.readInt(true); i < n; i++) {\n var skin = skeletonData.skins[input.readInt(true)];\n for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n var slotIndex = input.readInt(true);\n for (var iii = 0, nnn = input.readInt(true); iii < nnn; iii++) {\n var attachment = skin.getAttachment(slotIndex, input.readStringRef());\n var weighted = attachment.bones != null;\n var vertices = attachment.vertices;\n var deformLength = weighted ? vertices.length / 3 * 2 : vertices.length;\n var frameCount = input.readInt(true);\n var timeline = new spine.DeformTimeline(frameCount);\n timeline.slotIndex = slotIndex;\n timeline.attachment = attachment;\n for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) {\n var time = input.readFloat();\n var deform = void 0;\n var end = input.readInt(true);\n if (end == 0)\n deform = weighted ? spine.Utils.newFloatArray(deformLength) : vertices;\n else {\n deform = spine.Utils.newFloatArray(deformLength);\n var start = input.readInt(true);\n end += start;\n if (scale == 1) {\n for (var v = start; v < end; v++)\n deform[v] = input.readFloat();\n }\n else {\n for (var v = start; v < end; v++)\n deform[v] = input.readFloat() * scale;\n }\n if (!weighted) {\n for (var v = 0, vn = deform.length; v < vn; v++)\n deform[v] += vertices[v];\n }\n }\n timeline.setFrame(frameIndex, time, deform);\n if (frameIndex < frameCount - 1)\n this.readCurve(input, frameIndex, timeline);\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[frameCount - 1]);\n }\n }\n }\n var drawOrderCount = input.readInt(true);\n if (drawOrderCount > 0) {\n var timeline = new spine.DrawOrderTimeline(drawOrderCount);\n var slotCount = skeletonData.slots.length;\n for (var i = 0; i < drawOrderCount; i++) {\n var time = input.readFloat();\n var offsetCount = input.readInt(true);\n var drawOrder = spine.Utils.newArray(slotCount, 0);\n for (var ii = slotCount - 1; ii >= 0; ii--)\n drawOrder[ii] = -1;\n var unchanged = spine.Utils.newArray(slotCount - offsetCount, 0);\n var originalIndex = 0, unchangedIndex = 0;\n for (var ii = 0; ii < offsetCount; ii++) {\n var slotIndex = input.readInt(true);\n while (originalIndex != slotIndex)\n unchanged[unchangedIndex++] = originalIndex++;\n drawOrder[originalIndex + input.readInt(true)] = originalIndex++;\n }\n while (originalIndex < slotCount)\n unchanged[unchangedIndex++] = originalIndex++;\n for (var ii = slotCount - 1; ii >= 0; ii--)\n if (drawOrder[ii] == -1)\n drawOrder[ii] = unchanged[--unchangedIndex];\n timeline.setFrame(i, time, drawOrder);\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[drawOrderCount - 1]);\n }\n var eventCount = input.readInt(true);\n if (eventCount > 0) {\n var timeline = new spine.EventTimeline(eventCount);\n for (var i = 0; i < eventCount; i++) {\n var time = input.readFloat();\n var eventData = skeletonData.events[input.readInt(true)];\n var event_4 = new spine.Event(time, eventData);\n event_4.intValue = input.readInt(false);\n event_4.floatValue = input.readFloat();\n event_4.stringValue = input.readBoolean() ? input.readString() : eventData.stringValue;\n if (event_4.data.audioPath != null) {\n event_4.volume = input.readFloat();\n event_4.balance = input.readFloat();\n }\n timeline.setFrame(i, event_4);\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[eventCount - 1]);\n }\n return new spine.Animation(name, timelines, duration);\n };\n SkeletonBinary.prototype.readCurve = function (input, frameIndex, timeline) {\n switch (input.readByte()) {\n case SkeletonBinary.CURVE_STEPPED:\n timeline.setStepped(frameIndex);\n break;\n case SkeletonBinary.CURVE_BEZIER:\n this.setCurve(timeline, frameIndex, input.readFloat(), input.readFloat(), input.readFloat(), input.readFloat());\n break;\n }\n };\n SkeletonBinary.prototype.setCurve = function (timeline, frameIndex, cx1, cy1, cx2, cy2) {\n timeline.setCurve(frameIndex, cx1, cy1, cx2, cy2);\n };\n SkeletonBinary.AttachmentTypeValues = [0, 1, 2, 3, 4, 5, 6];\n SkeletonBinary.TransformModeValues = [spine.TransformMode.Normal, spine.TransformMode.OnlyTranslation, spine.TransformMode.NoRotationOrReflection, spine.TransformMode.NoScale, spine.TransformMode.NoScaleOrReflection];\n SkeletonBinary.PositionModeValues = [spine.PositionMode.Fixed, spine.PositionMode.Percent];\n SkeletonBinary.SpacingModeValues = [spine.SpacingMode.Length, spine.SpacingMode.Fixed, spine.SpacingMode.Percent];\n SkeletonBinary.RotateModeValues = [spine.RotateMode.Tangent, spine.RotateMode.Chain, spine.RotateMode.ChainScale];\n SkeletonBinary.BlendModeValues = [spine.BlendMode.Normal, spine.BlendMode.Additive, spine.BlendMode.Multiply, spine.BlendMode.Screen];\n SkeletonBinary.BONE_ROTATE = 0;\n SkeletonBinary.BONE_TRANSLATE = 1;\n SkeletonBinary.BONE_SCALE = 2;\n SkeletonBinary.BONE_SHEAR = 3;\n SkeletonBinary.SLOT_ATTACHMENT = 0;\n SkeletonBinary.SLOT_COLOR = 1;\n SkeletonBinary.SLOT_TWO_COLOR = 2;\n SkeletonBinary.PATH_POSITION = 0;\n SkeletonBinary.PATH_SPACING = 1;\n SkeletonBinary.PATH_MIX = 2;\n SkeletonBinary.CURVE_LINEAR = 0;\n SkeletonBinary.CURVE_STEPPED = 1;\n SkeletonBinary.CURVE_BEZIER = 2;\n return SkeletonBinary;\n }());\n spine.SkeletonBinary = SkeletonBinary;\n var BinaryInput = (function () {\n function BinaryInput(data, strings, index, buffer) {\n if (strings === void 0) { strings = new Array(); }\n if (index === void 0) { index = 0; }\n if (buffer === void 0) { buffer = new DataView(data.buffer); }\n this.strings = strings;\n this.index = index;\n this.buffer = buffer;\n }\n BinaryInput.prototype.readByte = function () {\n return this.buffer.getInt8(this.index++);\n };\n BinaryInput.prototype.readShort = function () {\n var value = this.buffer.getInt16(this.index);\n this.index += 2;\n return value;\n };\n BinaryInput.prototype.readInt32 = function () {\n var value = this.buffer.getInt32(this.index);\n this.index += 4;\n return value;\n };\n BinaryInput.prototype.readInt = function (optimizePositive) {\n var b = this.readByte();\n var result = b & 0x7F;\n if ((b & 0x80) != 0) {\n b = this.readByte();\n result |= (b & 0x7F) << 7;\n if ((b & 0x80) != 0) {\n b = this.readByte();\n result |= (b & 0x7F) << 14;\n if ((b & 0x80) != 0) {\n b = this.readByte();\n result |= (b & 0x7F) << 21;\n if ((b & 0x80) != 0) {\n b = this.readByte();\n result |= (b & 0x7F) << 28;\n }\n }\n }\n }\n return optimizePositive ? result : ((result >>> 1) ^ -(result & 1));\n };\n BinaryInput.prototype.readStringRef = function () {\n var index = this.readInt(true);\n return index == 0 ? null : this.strings[index - 1];\n };\n BinaryInput.prototype.readString = function () {\n var byteCount = this.readInt(true);\n switch (byteCount) {\n case 0:\n return null;\n case 1:\n return \"\";\n }\n byteCount--;\n var chars = \"\";\n var charCount = 0;\n for (var i = 0; i < byteCount;) {\n var b = this.readByte();\n switch (b >> 4) {\n case 12:\n case 13:\n chars += String.fromCharCode(((b & 0x1F) << 6 | this.readByte() & 0x3F));\n i += 2;\n break;\n case 14:\n chars += String.fromCharCode(((b & 0x0F) << 12 | (this.readByte() & 0x3F) << 6 | this.readByte() & 0x3F));\n i += 3;\n break;\n default:\n chars += String.fromCharCode(b);\n i++;\n }\n }\n return chars;\n };\n BinaryInput.prototype.readFloat = function () {\n var value = this.buffer.getFloat32(this.index);\n this.index += 4;\n return value;\n };\n BinaryInput.prototype.readBoolean = function () {\n return this.readByte() != 0;\n };\n return BinaryInput;\n }());\n var LinkedMesh = (function () {\n function LinkedMesh(mesh, skin, slotIndex, parent, inheritDeform) {\n this.mesh = mesh;\n this.skin = skin;\n this.slotIndex = slotIndex;\n this.parent = parent;\n this.inheritDeform = inheritDeform;\n }\n return LinkedMesh;\n }());\n var Vertices = (function () {\n function Vertices(bones, vertices) {\n if (bones === void 0) { bones = null; }\n if (vertices === void 0) { vertices = null; }\n this.bones = bones;\n this.vertices = vertices;\n }\n return Vertices;\n }());\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var SkeletonBounds = (function () {\n function SkeletonBounds() {\n this.minX = 0;\n this.minY = 0;\n this.maxX = 0;\n this.maxY = 0;\n this.boundingBoxes = new Array();\n this.polygons = new Array();\n this.polygonPool = new spine.Pool(function () {\n return spine.Utils.newFloatArray(16);\n });\n }\n SkeletonBounds.prototype.update = function (skeleton, updateAabb) {\n if (skeleton == null)\n throw new Error(\"skeleton cannot be null.\");\n var boundingBoxes = this.boundingBoxes;\n var polygons = this.polygons;\n var polygonPool = this.polygonPool;\n var slots = skeleton.slots;\n var slotCount = slots.length;\n boundingBoxes.length = 0;\n polygonPool.freeAll(polygons);\n polygons.length = 0;\n for (var i = 0; i < slotCount; i++) {\n var slot = slots[i];\n if (!slot.bone.active)\n continue;\n var attachment = slot.getAttachment();\n if (attachment instanceof spine.BoundingBoxAttachment) {\n var boundingBox = attachment;\n boundingBoxes.push(boundingBox);\n var polygon = polygonPool.obtain();\n if (polygon.length != boundingBox.worldVerticesLength) {\n polygon = spine.Utils.newFloatArray(boundingBox.worldVerticesLength);\n }\n polygons.push(polygon);\n boundingBox.computeWorldVertices(slot, 0, boundingBox.worldVerticesLength, polygon, 0, 2);\n }\n }\n if (updateAabb) {\n this.aabbCompute();\n }\n else {\n this.minX = Number.POSITIVE_INFINITY;\n this.minY = Number.POSITIVE_INFINITY;\n this.maxX = Number.NEGATIVE_INFINITY;\n this.maxY = Number.NEGATIVE_INFINITY;\n }\n };\n SkeletonBounds.prototype.aabbCompute = function () {\n var minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY;\n var polygons = this.polygons;\n for (var i = 0, n = polygons.length; i < n; i++) {\n var polygon = polygons[i];\n var vertices = polygon;\n for (var ii = 0, nn = polygon.length; ii < nn; ii += 2) {\n var x = vertices[ii];\n var y = vertices[ii + 1];\n minX = Math.min(minX, x);\n minY = Math.min(minY, y);\n maxX = Math.max(maxX, x);\n maxY = Math.max(maxY, y);\n }\n }\n this.minX = minX;\n this.minY = minY;\n this.maxX = maxX;\n this.maxY = maxY;\n };\n SkeletonBounds.prototype.aabbContainsPoint = function (x, y) {\n return x >= this.minX && x <= this.maxX && y >= this.minY && y <= this.maxY;\n };\n SkeletonBounds.prototype.aabbIntersectsSegment = function (x1, y1, x2, y2) {\n var minX = this.minX;\n var minY = this.minY;\n var maxX = this.maxX;\n var maxY = this.maxY;\n if ((x1 <= minX && x2 <= minX) || (y1 <= minY && y2 <= minY) || (x1 >= maxX && x2 >= maxX) || (y1 >= maxY && y2 >= maxY))\n return false;\n var m = (y2 - y1) / (x2 - x1);\n var y = m * (minX - x1) + y1;\n if (y > minY && y < maxY)\n return true;\n y = m * (maxX - x1) + y1;\n if (y > minY && y < maxY)\n return true;\n var x = (minY - y1) / m + x1;\n if (x > minX && x < maxX)\n return true;\n x = (maxY - y1) / m + x1;\n if (x > minX && x < maxX)\n return true;\n return false;\n };\n SkeletonBounds.prototype.aabbIntersectsSkeleton = function (bounds) {\n return this.minX < bounds.maxX && this.maxX > bounds.minX && this.minY < bounds.maxY && this.maxY > bounds.minY;\n };\n SkeletonBounds.prototype.containsPoint = function (x, y) {\n var polygons = this.polygons;\n for (var i = 0, n = polygons.length; i < n; i++)\n if (this.containsPointPolygon(polygons[i], x, y))\n return this.boundingBoxes[i];\n return null;\n };\n SkeletonBounds.prototype.containsPointPolygon = function (polygon, x, y) {\n var vertices = polygon;\n var nn = polygon.length;\n var prevIndex = nn - 2;\n var inside = false;\n for (var ii = 0; ii < nn; ii += 2) {\n var vertexY = vertices[ii + 1];\n var prevY = vertices[prevIndex + 1];\n if ((vertexY < y && prevY >= y) || (prevY < y && vertexY >= y)) {\n var vertexX = vertices[ii];\n if (vertexX + (y - vertexY) / (prevY - vertexY) * (vertices[prevIndex] - vertexX) < x)\n inside = !inside;\n }\n prevIndex = ii;\n }\n return inside;\n };\n SkeletonBounds.prototype.intersectsSegment = function (x1, y1, x2, y2) {\n var polygons = this.polygons;\n for (var i = 0, n = polygons.length; i < n; i++)\n if (this.intersectsSegmentPolygon(polygons[i], x1, y1, x2, y2))\n return this.boundingBoxes[i];\n return null;\n };\n SkeletonBounds.prototype.intersectsSegmentPolygon = function (polygon, x1, y1, x2, y2) {\n var vertices = polygon;\n var nn = polygon.length;\n var width12 = x1 - x2, height12 = y1 - y2;\n var det1 = x1 * y2 - y1 * x2;\n var x3 = vertices[nn - 2], y3 = vertices[nn - 1];\n for (var ii = 0; ii < nn; ii += 2) {\n var x4 = vertices[ii], y4 = vertices[ii + 1];\n var det2 = x3 * y4 - y3 * x4;\n var width34 = x3 - x4, height34 = y3 - y4;\n var det3 = width12 * height34 - height12 * width34;\n var x = (det1 * width34 - width12 * det2) / det3;\n if (((x >= x3 && x <= x4) || (x >= x4 && x <= x3)) && ((x >= x1 && x <= x2) || (x >= x2 && x <= x1))) {\n var y = (det1 * height34 - height12 * det2) / det3;\n if (((y >= y3 && y <= y4) || (y >= y4 && y <= y3)) && ((y >= y1 && y <= y2) || (y >= y2 && y <= y1)))\n return true;\n }\n x3 = x4;\n y3 = y4;\n }\n return false;\n };\n SkeletonBounds.prototype.getPolygon = function (boundingBox) {\n if (boundingBox == null)\n throw new Error(\"boundingBox cannot be null.\");\n var index = this.boundingBoxes.indexOf(boundingBox);\n return index == -1 ? null : this.polygons[index];\n };\n SkeletonBounds.prototype.getWidth = function () {\n return this.maxX - this.minX;\n };\n SkeletonBounds.prototype.getHeight = function () {\n return this.maxY - this.minY;\n };\n return SkeletonBounds;\n }());\n spine.SkeletonBounds = SkeletonBounds;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var SkeletonClipping = (function () {\n function SkeletonClipping() {\n this.triangulator = new spine.Triangulator();\n this.clippingPolygon = new Array();\n this.clipOutput = new Array();\n this.clippedVertices = new Array();\n this.clippedTriangles = new Array();\n this.scratch = new Array();\n }\n SkeletonClipping.prototype.clipStart = function (slot, clip) {\n if (this.clipAttachment != null)\n return 0;\n this.clipAttachment = clip;\n var n = clip.worldVerticesLength;\n var vertices = spine.Utils.setArraySize(this.clippingPolygon, n);\n clip.computeWorldVertices(slot, 0, n, vertices, 0, 2);\n var clippingPolygon = this.clippingPolygon;\n SkeletonClipping.makeClockwise(clippingPolygon);\n var clippingPolygons = this.clippingPolygons = this.triangulator.decompose(clippingPolygon, this.triangulator.triangulate(clippingPolygon));\n for (var i = 0, n_1 = clippingPolygons.length; i < n_1; i++) {\n var polygon = clippingPolygons[i];\n SkeletonClipping.makeClockwise(polygon);\n polygon.push(polygon[0]);\n polygon.push(polygon[1]);\n }\n return clippingPolygons.length;\n };\n SkeletonClipping.prototype.clipEndWithSlot = function (slot) {\n if (this.clipAttachment != null && this.clipAttachment.endSlot == slot.data)\n this.clipEnd();\n };\n SkeletonClipping.prototype.clipEnd = function () {\n if (this.clipAttachment == null)\n return;\n this.clipAttachment = null;\n this.clippingPolygons = null;\n this.clippedVertices.length = 0;\n this.clippedTriangles.length = 0;\n this.clippingPolygon.length = 0;\n };\n SkeletonClipping.prototype.isClipping = function () {\n return this.clipAttachment != null;\n };\n SkeletonClipping.prototype.clipTriangles = function (vertices, verticesLength, triangles, trianglesLength, uvs, light, dark, twoColor, stride, originIndexOffset, originVertOffset, originUVSOffset) {\n var clipOutput = this.clipOutput, clippedVertices = this.clippedVertices;\n var clippedTriangles = this.clippedTriangles;\n var polygons = this.clippingPolygons;\n var polygonsCount = this.clippingPolygons.length;\n var vertexSize = twoColor ? 12 : 8;\n var index = 0;\n\n originIndexOffset = originIndexOffset || 0;\n originVertOffset = originVertOffset || 0;\n originUVSOffset = originUVSOffset || 0;\n\n clippedVertices.length = 0;\n clippedTriangles.length = 0;\n outer: for (var i = originIndexOffset, n = originIndexOffset + trianglesLength; i < n; i += 3) {\n var vertexOffset = triangles[i] * stride;\n var xyOffset = vertexOffset + originVertOffset;\n var uvOffset = vertexOffset + originUVSOffset;\n var x1 = vertices[xyOffset], y1 = vertices[xyOffset + 1];\n var u1 = uvs[uvOffset], v1 = uvs[uvOffset + 1];\n \n vertexOffset = triangles[i + 1] * stride;\n xyOffset = vertexOffset + originVertOffset;\n uvOffset = vertexOffset + originUVSOffset;\n var x2 = vertices[xyOffset], y2 = vertices[xyOffset + 1];\n var u2 = uvs[uvOffset], v2 = uvs[uvOffset + 1];\n \n vertexOffset = triangles[i + 2] * stride;\n xyOffset = vertexOffset + originVertOffset;\n uvOffset = vertexOffset + originUVSOffset;\n var x3 = vertices[xyOffset], y3 = vertices[xyOffset + 1];\n var u3 = uvs[uvOffset], v3 = uvs[uvOffset + 1];\n \n for (var p = 0; p < polygonsCount; p++) {\n var s = clippedVertices.length;\n if (this.clip(x1, y1, x2, y2, x3, y3, polygons[p], clipOutput)) {\n var clipOutputLength = clipOutput.length;\n if (clipOutputLength == 0)\n continue;\n var d0 = y2 - y3, d1 = x3 - x2, d2 = x1 - x3, d4 = y3 - y1;\n var d = 1 / (d0 * d2 + d1 * (y1 - y3));\n var clipOutputCount = clipOutputLength >> 1;\n var clipOutputItems = this.clipOutput;\n var clippedVerticesItems = spine.Utils.setArraySize(clippedVertices, s + clipOutputCount * vertexSize);\n for (var ii = 0; ii < clipOutputLength; ii += 2) {\n var x = clipOutputItems[ii], y = clipOutputItems[ii + 1];\n clippedVerticesItems[s] = x;\n clippedVerticesItems[s + 1] = y;\n clippedVerticesItems[s + 2] = light.r;\n clippedVerticesItems[s + 3] = light.g;\n clippedVerticesItems[s + 4] = light.b;\n clippedVerticesItems[s + 5] = light.a;\n var c0 = x - x3, c1 = y - y3;\n var a = (d0 * c0 + d1 * c1) * d;\n var b = (d4 * c0 + d2 * c1) * d;\n var c = 1 - a - b;\n clippedVerticesItems[s + 6] = u1 * a + u2 * b + u3 * c;\n clippedVerticesItems[s + 7] = v1 * a + v2 * b + v3 * c;\n if (twoColor) {\n clippedVerticesItems[s + 8] = dark.r;\n clippedVerticesItems[s + 9] = dark.g;\n clippedVerticesItems[s + 10] = dark.b;\n clippedVerticesItems[s + 11] = dark.a;\n }\n s += vertexSize;\n }\n s = clippedTriangles.length;\n var clippedTrianglesItems = spine.Utils.setArraySize(clippedTriangles, s + 3 * (clipOutputCount - 2));\n clipOutputCount--;\n for (var ii = 1; ii < clipOutputCount; ii++) {\n clippedTrianglesItems[s] = index;\n clippedTrianglesItems[s + 1] = (index + ii);\n clippedTrianglesItems[s + 2] = (index + ii + 1);\n s += 3;\n }\n index += clipOutputCount + 1;\n }\n else {\n var clippedVerticesItems = spine.Utils.setArraySize(clippedVertices, s + 3 * vertexSize);\n clippedVerticesItems[s] = x1;\n clippedVerticesItems[s + 1] = y1;\n clippedVerticesItems[s + 2] = light.r;\n clippedVerticesItems[s + 3] = light.g;\n clippedVerticesItems[s + 4] = light.b;\n clippedVerticesItems[s + 5] = light.a;\n if (!twoColor) {\n clippedVerticesItems[s + 6] = u1;\n clippedVerticesItems[s + 7] = v1;\n clippedVerticesItems[s + 8] = x2;\n clippedVerticesItems[s + 9] = y2;\n clippedVerticesItems[s + 10] = light.r;\n clippedVerticesItems[s + 11] = light.g;\n clippedVerticesItems[s + 12] = light.b;\n clippedVerticesItems[s + 13] = light.a;\n clippedVerticesItems[s + 14] = u2;\n clippedVerticesItems[s + 15] = v2;\n clippedVerticesItems[s + 16] = x3;\n clippedVerticesItems[s + 17] = y3;\n clippedVerticesItems[s + 18] = light.r;\n clippedVerticesItems[s + 19] = light.g;\n clippedVerticesItems[s + 20] = light.b;\n clippedVerticesItems[s + 21] = light.a;\n clippedVerticesItems[s + 22] = u3;\n clippedVerticesItems[s + 23] = v3;\n }\n else {\n clippedVerticesItems[s + 6] = u1;\n clippedVerticesItems[s + 7] = v1;\n clippedVerticesItems[s + 8] = dark.r;\n clippedVerticesItems[s + 9] = dark.g;\n clippedVerticesItems[s + 10] = dark.b;\n clippedVerticesItems[s + 11] = dark.a;\n clippedVerticesItems[s + 12] = x2;\n clippedVerticesItems[s + 13] = y2;\n clippedVerticesItems[s + 14] = light.r;\n clippedVerticesItems[s + 15] = light.g;\n clippedVerticesItems[s + 16] = light.b;\n clippedVerticesItems[s + 17] = light.a;\n clippedVerticesItems[s + 18] = u2;\n clippedVerticesItems[s + 19] = v2;\n clippedVerticesItems[s + 20] = dark.r;\n clippedVerticesItems[s + 21] = dark.g;\n clippedVerticesItems[s + 22] = dark.b;\n clippedVerticesItems[s + 23] = dark.a;\n clippedVerticesItems[s + 24] = x3;\n clippedVerticesItems[s + 25] = y3;\n clippedVerticesItems[s + 26] = light.r;\n clippedVerticesItems[s + 27] = light.g;\n clippedVerticesItems[s + 28] = light.b;\n clippedVerticesItems[s + 29] = light.a;\n clippedVerticesItems[s + 30] = u3;\n clippedVerticesItems[s + 31] = v3;\n clippedVerticesItems[s + 32] = dark.r;\n clippedVerticesItems[s + 33] = dark.g;\n clippedVerticesItems[s + 34] = dark.b;\n clippedVerticesItems[s + 35] = dark.a;\n }\n s = clippedTriangles.length;\n var clippedTrianglesItems = spine.Utils.setArraySize(clippedTriangles, s + 3);\n clippedTrianglesItems[s] = index;\n clippedTrianglesItems[s + 1] = (index + 1);\n clippedTrianglesItems[s + 2] = (index + 2);\n index += 3;\n continue outer;\n }\n }\n }\n };\n SkeletonClipping.prototype.clip = function (x1, y1, x2, y2, x3, y3, clippingArea, output) {\n var originalOutput = output;\n var clipped = false;\n var input = null;\n if (clippingArea.length % 4 >= 2) {\n input = output;\n output = this.scratch;\n }\n else\n input = this.scratch;\n input.length = 0;\n input.push(x1);\n input.push(y1);\n input.push(x2);\n input.push(y2);\n input.push(x3);\n input.push(y3);\n input.push(x1);\n input.push(y1);\n output.length = 0;\n var clippingVertices = clippingArea;\n var clippingVerticesLast = clippingArea.length - 4;\n for (var i = 0;; i += 2) {\n var edgeX = clippingVertices[i], edgeY = clippingVertices[i + 1];\n var edgeX2 = clippingVertices[i + 2], edgeY2 = clippingVertices[i + 3];\n var deltaX = edgeX - edgeX2, deltaY = edgeY - edgeY2;\n var inputVertices = input;\n var inputVerticesLength = input.length - 2, outputStart = output.length;\n for (var ii = 0; ii < inputVerticesLength; ii += 2) {\n var inputX = inputVertices[ii], inputY = inputVertices[ii + 1];\n var inputX2 = inputVertices[ii + 2], inputY2 = inputVertices[ii + 3];\n var side2 = deltaX * (inputY2 - edgeY2) - deltaY * (inputX2 - edgeX2) > 0;\n if (deltaX * (inputY - edgeY2) - deltaY * (inputX - edgeX2) > 0) {\n if (side2) {\n output.push(inputX2);\n output.push(inputY2);\n continue;\n }\n var c0 = inputY2 - inputY, c2 = inputX2 - inputX;\n var s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY);\n if (Math.abs(s) > 0.000001) {\n var ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s;\n output.push(edgeX + (edgeX2 - edgeX) * ua);\n output.push(edgeY + (edgeY2 - edgeY) * ua);\n }\n else {\n output.push(edgeX);\n output.push(edgeY);\n }\n }\n else if (side2) {\n var c0 = inputY2 - inputY, c2 = inputX2 - inputX;\n var s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY);\n if (Math.abs(s) > 0.000001) {\n var ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s;\n output.push(edgeX + (edgeX2 - edgeX) * ua);\n output.push(edgeY + (edgeY2 - edgeY) * ua);\n }\n else {\n output.push(edgeX);\n output.push(edgeY);\n }\n output.push(inputX2);\n output.push(inputY2);\n }\n clipped = true;\n }\n if (outputStart == output.length) {\n originalOutput.length = 0;\n return true;\n }\n output.push(output[0]);\n output.push(output[1]);\n if (i == clippingVerticesLast)\n break;\n var temp = output;\n output = input;\n output.length = 0;\n input = temp;\n }\n if (originalOutput != output) {\n originalOutput.length = 0;\n for (var i = 0, n = output.length - 2; i < n; i++)\n originalOutput[i] = output[i];\n }\n else\n originalOutput.length = originalOutput.length - 2;\n return clipped;\n };\n SkeletonClipping.makeClockwise = function (polygon) {\n var vertices = polygon;\n var verticeslength = polygon.length;\n var area = vertices[verticeslength - 2] * vertices[1] - vertices[0] * vertices[verticeslength - 1], p1x = 0, p1y = 0, p2x = 0, p2y = 0;\n for (var i = 0, n = verticeslength - 3; i < n; i += 2) {\n p1x = vertices[i];\n p1y = vertices[i + 1];\n p2x = vertices[i + 2];\n p2y = vertices[i + 3];\n area += p1x * p2y - p2x * p1y;\n }\n if (area < 0)\n return;\n for (var i = 0, lastX = verticeslength - 2, n = verticeslength >> 1; i < n; i += 2) {\n var x = vertices[i], y = vertices[i + 1];\n var other = lastX - i;\n vertices[i] = vertices[other];\n vertices[i + 1] = vertices[other + 1];\n vertices[other] = x;\n vertices[other + 1] = y;\n }\n };\n return SkeletonClipping;\n }());\n spine.SkeletonClipping = SkeletonClipping;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var SkeletonData = (function () {\n function SkeletonData() {\n this.bones = new Array();\n this.slots = new Array();\n this.skins = new Array();\n this.events = new Array();\n this.animations = new Array();\n this.ikConstraints = new Array();\n this.transformConstraints = new Array();\n this.pathConstraints = new Array();\n this.fps = 0;\n }\n SkeletonData.prototype.findBone = function (boneName) {\n if (boneName == null)\n throw new Error(\"boneName cannot be null.\");\n var bones = this.bones;\n for (var i = 0, n = bones.length; i < n; i++) {\n var bone = bones[i];\n if (bone.name == boneName)\n return bone;\n }\n return null;\n };\n SkeletonData.prototype.findBoneIndex = function (boneName) {\n if (boneName == null)\n throw new Error(\"boneName cannot be null.\");\n var bones = this.bones;\n for (var i = 0, n = bones.length; i < n; i++)\n if (bones[i].name == boneName)\n return i;\n return -1;\n };\n SkeletonData.prototype.findSlot = function (slotName) {\n if (slotName == null)\n throw new Error(\"slotName cannot be null.\");\n var slots = this.slots;\n for (var i = 0, n = slots.length; i < n; i++) {\n var slot = slots[i];\n if (slot.name == slotName)\n return slot;\n }\n return null;\n };\n SkeletonData.prototype.findSlotIndex = function (slotName) {\n if (slotName == null)\n throw new Error(\"slotName cannot be null.\");\n var slots = this.slots;\n for (var i = 0, n = slots.length; i < n; i++)\n if (slots[i].name == slotName)\n return i;\n return -1;\n };\n SkeletonData.prototype.findSkin = function (skinName) {\n if (skinName == null)\n throw new Error(\"skinName cannot be null.\");\n var skins = this.skins;\n for (var i = 0, n = skins.length; i < n; i++) {\n var skin = skins[i];\n if (skin.name == skinName)\n return skin;\n }\n return null;\n };\n SkeletonData.prototype.findEvent = function (eventDataName) {\n if (eventDataName == null)\n throw new Error(\"eventDataName cannot be null.\");\n var events = this.events;\n for (var i = 0, n = events.length; i < n; i++) {\n var event_5 = events[i];\n if (event_5.name == eventDataName)\n return event_5;\n }\n return null;\n };\n SkeletonData.prototype.findAnimation = function (animationName) {\n if (animationName == null)\n throw new Error(\"animationName cannot be null.\");\n var animations = this.animations;\n for (var i = 0, n = animations.length; i < n; i++) {\n var animation = animations[i];\n if (animation.name == animationName)\n return animation;\n }\n return null;\n };\n SkeletonData.prototype.findIkConstraint = function (constraintName) {\n if (constraintName == null)\n throw new Error(\"constraintName cannot be null.\");\n var ikConstraints = this.ikConstraints;\n for (var i = 0, n = ikConstraints.length; i < n; i++) {\n var constraint = ikConstraints[i];\n if (constraint.name == constraintName)\n return constraint;\n }\n return null;\n };\n SkeletonData.prototype.findTransformConstraint = function (constraintName) {\n if (constraintName == null)\n throw new Error(\"constraintName cannot be null.\");\n var transformConstraints = this.transformConstraints;\n for (var i = 0, n = transformConstraints.length; i < n; i++) {\n var constraint = transformConstraints[i];\n if (constraint.name == constraintName)\n return constraint;\n }\n return null;\n };\n SkeletonData.prototype.findPathConstraint = function (constraintName) {\n if (constraintName == null)\n throw new Error(\"constraintName cannot be null.\");\n var pathConstraints = this.pathConstraints;\n for (var i = 0, n = pathConstraints.length; i < n; i++) {\n var constraint = pathConstraints[i];\n if (constraint.name == constraintName)\n return constraint;\n }\n return null;\n };\n SkeletonData.prototype.findPathConstraintIndex = function (pathConstraintName) {\n if (pathConstraintName == null)\n throw new Error(\"pathConstraintName cannot be null.\");\n var pathConstraints = this.pathConstraints;\n for (var i = 0, n = pathConstraints.length; i < n; i++)\n if (pathConstraints[i].name == pathConstraintName)\n return i;\n return -1;\n };\n return SkeletonData;\n }());\n spine.SkeletonData = SkeletonData;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var SkeletonJson = (function () {\n function SkeletonJson(attachmentLoader) {\n this.scale = 1;\n this.linkedMeshes = new Array();\n this.attachmentLoader = attachmentLoader;\n }\n SkeletonJson.prototype.readSkeletonData = function (json) {\n var scale = this.scale;\n var skeletonData = new spine.SkeletonData();\n var root = typeof (json) === \"string\" ? JSON.parse(json) : json;\n var skeletonMap = root.skeleton;\n if (skeletonMap != null) {\n skeletonData.hash = skeletonMap.hash;\n skeletonData.version = skeletonMap.spine;\n skeletonData.x = skeletonMap.x;\n skeletonData.y = skeletonMap.y;\n skeletonData.width = skeletonMap.width;\n skeletonData.height = skeletonMap.height;\n skeletonData.fps = skeletonMap.fps;\n skeletonData.imagesPath = skeletonMap.images;\n }\n if (root.bones) {\n for (var i = 0; i < root.bones.length; i++) {\n var boneMap = root.bones[i];\n var parent_5 = null;\n var parentName = this.getValue(boneMap, \"parent\", null);\n if (parentName != null) {\n parent_5 = skeletonData.findBone(parentName);\n if (parent_5 == null)\n throw new Error(\"Parent bone not found: \" + parentName);\n }\n var data = new spine.BoneData(skeletonData.bones.length, boneMap.name, parent_5);\n data.length = this.getValue(boneMap, \"length\", 0) * scale;\n data.x = this.getValue(boneMap, \"x\", 0) * scale;\n data.y = this.getValue(boneMap, \"y\", 0) * scale;\n data.rotation = this.getValue(boneMap, \"rotation\", 0);\n data.scaleX = this.getValue(boneMap, \"scaleX\", 1);\n data.scaleY = this.getValue(boneMap, \"scaleY\", 1);\n data.shearX = this.getValue(boneMap, \"shearX\", 0);\n data.shearY = this.getValue(boneMap, \"shearY\", 0);\n data.transformMode = SkeletonJson.transformModeFromString(this.getValue(boneMap, \"transform\", \"normal\"));\n data.skinRequired = this.getValue(boneMap, \"skin\", false);\n skeletonData.bones.push(data);\n }\n }\n if (root.slots) {\n for (var i = 0; i < root.slots.length; i++) {\n var slotMap = root.slots[i];\n var slotName = slotMap.name;\n var boneName = slotMap.bone;\n var boneData = skeletonData.findBone(boneName);\n if (boneData == null)\n throw new Error(\"Slot bone not found: \" + boneName);\n var data = new spine.SlotData(skeletonData.slots.length, slotName, boneData);\n var color = this.getValue(slotMap, \"color\", null);\n if (color != null)\n data.color.setFromString(color);\n var dark = this.getValue(slotMap, \"dark\", null);\n if (dark != null) {\n data.darkColor = new spine.Color(1, 1, 1, 1);\n data.darkColor.setFromString(dark);\n }\n data.attachmentName = this.getValue(slotMap, \"attachment\", null);\n data.blendMode = SkeletonJson.blendModeFromString(this.getValue(slotMap, \"blend\", \"normal\"));\n skeletonData.slots.push(data);\n }\n }\n if (root.ik) {\n for (var i = 0; i < root.ik.length; i++) {\n var constraintMap = root.ik[i];\n var data = new spine.IkConstraintData(constraintMap.name);\n data.order = this.getValue(constraintMap, \"order\", 0);\n data.skinRequired = this.getValue(constraintMap, \"skin\", false);\n for (var j = 0; j < constraintMap.bones.length; j++) {\n var boneName = constraintMap.bones[j];\n var bone = skeletonData.findBone(boneName);\n if (bone == null)\n throw new Error(\"IK bone not found: \" + boneName);\n data.bones.push(bone);\n }\n var targetName = constraintMap.target;\n data.target = skeletonData.findBone(targetName);\n if (data.target == null)\n throw new Error(\"IK target bone not found: \" + targetName);\n data.mix = this.getValue(constraintMap, \"mix\", 1);\n data.softness = this.getValue(constraintMap, \"softness\", 0) * scale;\n data.bendDirection = this.getValue(constraintMap, \"bendPositive\", true) ? 1 : -1;\n data.compress = this.getValue(constraintMap, \"compress\", false);\n data.stretch = this.getValue(constraintMap, \"stretch\", false);\n data.uniform = this.getValue(constraintMap, \"uniform\", false);\n skeletonData.ikConstraints.push(data);\n }\n }\n if (root.transform) {\n for (var i = 0; i < root.transform.length; i++) {\n var constraintMap = root.transform[i];\n var data = new spine.TransformConstraintData(constraintMap.name);\n data.order = this.getValue(constraintMap, \"order\", 0);\n data.skinRequired = this.getValue(constraintMap, \"skin\", false);\n for (var j = 0; j < constraintMap.bones.length; j++) {\n var boneName = constraintMap.bones[j];\n var bone = skeletonData.findBone(boneName);\n if (bone == null)\n throw new Error(\"Transform constraint bone not found: \" + boneName);\n data.bones.push(bone);\n }\n var targetName = constraintMap.target;\n data.target = skeletonData.findBone(targetName);\n if (data.target == null)\n throw new Error(\"Transform constraint target bone not found: \" + targetName);\n data.local = this.getValue(constraintMap, \"local\", false);\n data.relative = this.getValue(constraintMap, \"relative\", false);\n data.offsetRotation = this.getValue(constraintMap, \"rotation\", 0);\n data.offsetX = this.getValue(constraintMap, \"x\", 0) * scale;\n data.offsetY = this.getValue(constraintMap, \"y\", 0) * scale;\n data.offsetScaleX = this.getValue(constraintMap, \"scaleX\", 0);\n data.offsetScaleY = this.getValue(constraintMap, \"scaleY\", 0);\n data.offsetShearY = this.getValue(constraintMap, \"shearY\", 0);\n data.rotateMix = this.getValue(constraintMap, \"rotateMix\", 1);\n data.translateMix = this.getValue(constraintMap, \"translateMix\", 1);\n data.scaleMix = this.getValue(constraintMap, \"scaleMix\", 1);\n data.shearMix = this.getValue(constraintMap, \"shearMix\", 1);\n skeletonData.transformConstraints.push(data);\n }\n }\n if (root.path) {\n for (var i = 0; i < root.path.length; i++) {\n var constraintMap = root.path[i];\n var data = new spine.PathConstraintData(constraintMap.name);\n data.order = this.getValue(constraintMap, \"order\", 0);\n data.skinRequired = this.getValue(constraintMap, \"skin\", false);\n for (var j = 0; j < constraintMap.bones.length; j++) {\n var boneName = constraintMap.bones[j];\n var bone = skeletonData.findBone(boneName);\n if (bone == null)\n throw new Error(\"Transform constraint bone not found: \" + boneName);\n data.bones.push(bone);\n }\n var targetName = constraintMap.target;\n data.target = skeletonData.findSlot(targetName);\n if (data.target == null)\n throw new Error(\"Path target slot not found: \" + targetName);\n data.positionMode = SkeletonJson.positionModeFromString(this.getValue(constraintMap, \"positionMode\", \"percent\"));\n data.spacingMode = SkeletonJson.spacingModeFromString(this.getValue(constraintMap, \"spacingMode\", \"length\"));\n data.rotateMode = SkeletonJson.rotateModeFromString(this.getValue(constraintMap, \"rotateMode\", \"tangent\"));\n data.offsetRotation = this.getValue(constraintMap, \"rotation\", 0);\n data.position = this.getValue(constraintMap, \"position\", 0);\n if (data.positionMode == spine.PositionMode.Fixed)\n data.position *= scale;\n data.spacing = this.getValue(constraintMap, \"spacing\", 0);\n if (data.spacingMode == spine.SpacingMode.Length || data.spacingMode == spine.SpacingMode.Fixed)\n data.spacing *= scale;\n data.rotateMix = this.getValue(constraintMap, \"rotateMix\", 1);\n data.translateMix = this.getValue(constraintMap, \"translateMix\", 1);\n skeletonData.pathConstraints.push(data);\n }\n }\n if (root.skins) {\n var skins = root.skins;\n var isArray = skins instanceof Array;\n if (!isArray) {\n var skinArr = [];\n for (var skinName in skins) {\n skinArr.push({name: skinName, attachments: skins[skinName]});\n }\n skins = skinArr;\n }\n for (var i = 0; i < skins.length; i++) {\n var skinMap = skins[i];\n var skin = new spine.Skin(skinMap.name);\n if (skinMap.bones) {\n for (var ii = 0; ii < skinMap.bones.length; ii++) {\n var bone = skeletonData.findBone(skinMap.bones[ii]);\n if (bone == null)\n throw new Error(\"Skin bone not found: \" + skinMap.bones[i]);\n skin.bones.push(bone);\n }\n }\n if (skinMap.ik) {\n for (var ii = 0; ii < skinMap.ik.length; ii++) {\n var constraint = skeletonData.findIkConstraint(skinMap.ik[ii]);\n if (constraint == null)\n throw new Error(\"Skin IK constraint not found: \" + skinMap.ik[i]);\n skin.constraints.push(constraint);\n }\n }\n if (skinMap.transform) {\n for (var ii = 0; ii < skinMap.transform.length; ii++) {\n var constraint = skeletonData.findTransformConstraint(skinMap.transform[ii]);\n if (constraint == null)\n throw new Error(\"Skin transform constraint not found: \" + skinMap.transform[i]);\n skin.constraints.push(constraint);\n }\n }\n if (skinMap.path) {\n for (var ii = 0; ii < skinMap.path.length; ii++) {\n var constraint = skeletonData.findPathConstraint(skinMap.path[ii]);\n if (constraint == null)\n throw new Error(\"Skin path constraint not found: \" + skinMap.path[i]);\n skin.constraints.push(constraint);\n }\n }\n for (var slotName in skinMap.attachments) {\n var slot = skeletonData.findSlot(slotName);\n if (slot == null)\n throw new Error(\"Slot not found: \" + slotName);\n var slotMap = skinMap.attachments[slotName];\n for (var entryName in slotMap) {\n var attachment = this.readAttachment(slotMap[entryName], skin, slot.index, entryName, skeletonData);\n if (attachment != null)\n skin.setAttachment(slot.index, entryName, attachment);\n }\n }\n skeletonData.skins.push(skin);\n if (skin.name == \"default\")\n skeletonData.defaultSkin = skin;\n }\n }\n for (var i = 0, n = this.linkedMeshes.length; i < n; i++) {\n var linkedMesh = this.linkedMeshes[i];\n var skin = linkedMesh.skin == null ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin);\n if (skin == null)\n throw new Error(\"Skin not found: \" + linkedMesh.skin);\n var parent_6 = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent);\n if (parent_6 == null)\n throw new Error(\"Parent mesh not found: \" + linkedMesh.parent);\n linkedMesh.mesh.deformAttachment = linkedMesh.inheritDeform ? parent_6 : linkedMesh.mesh;\n linkedMesh.mesh.setParentMesh(parent_6);\n linkedMesh.mesh.updateUVs();\n }\n this.linkedMeshes.length = 0;\n if (root.events) {\n for (var eventName in root.events) {\n var eventMap = root.events[eventName];\n var data = new spine.EventData(eventName);\n data.intValue = this.getValue(eventMap, \"int\", 0);\n data.floatValue = this.getValue(eventMap, \"float\", 0);\n data.stringValue = this.getValue(eventMap, \"string\", \"\");\n data.audioPath = this.getValue(eventMap, \"audio\", null);\n if (data.audioPath != null) {\n data.volume = this.getValue(eventMap, \"volume\", 1);\n data.balance = this.getValue(eventMap, \"balance\", 0);\n }\n skeletonData.events.push(data);\n }\n }\n if (root.animations) {\n for (var animationName in root.animations) {\n var animationMap = root.animations[animationName];\n this.readAnimation(animationMap, animationName, skeletonData);\n }\n }\n return skeletonData;\n };\n SkeletonJson.prototype.readAttachment = function (map, skin, slotIndex, name, skeletonData) {\n var scale = this.scale;\n name = this.getValue(map, \"name\", name);\n var type = this.getValue(map, \"type\", \"region\");\n switch (type) {\n case \"region\": {\n var path = this.getValue(map, \"path\", name);\n var region = this.attachmentLoader.newRegionAttachment(skin, name, path);\n if (region == null)\n return null;\n region.path = path;\n region.x = this.getValue(map, \"x\", 0) * scale;\n region.y = this.getValue(map, \"y\", 0) * scale;\n region.scaleX = this.getValue(map, \"scaleX\", 1);\n region.scaleY = this.getValue(map, \"scaleY\", 1);\n region.rotation = this.getValue(map, \"rotation\", 0);\n region.width = map.width * scale;\n region.height = map.height * scale;\n var color = this.getValue(map, \"color\", null);\n if (color != null)\n region.color.setFromString(color);\n region.updateOffset();\n return region;\n }\n case \"boundingbox\": {\n var box = this.attachmentLoader.newBoundingBoxAttachment(skin, name);\n if (box == null)\n return null;\n this.readVertices(map, box, map.vertexCount << 1);\n var color = this.getValue(map, \"color\", null);\n if (color != null)\n box.color.setFromString(color);\n return box;\n }\n case \"mesh\":\n case \"linkedmesh\": {\n var path = this.getValue(map, \"path\", name);\n var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path);\n if (mesh == null)\n return null;\n mesh.path = path;\n var color = this.getValue(map, \"color\", null);\n if (color != null)\n mesh.color.setFromString(color);\n mesh.width = this.getValue(map, \"width\", 0) * scale;\n mesh.height = this.getValue(map, \"height\", 0) * scale;\n var parent_7 = this.getValue(map, \"parent\", null);\n if (parent_7 != null) {\n this.linkedMeshes.push(new LinkedMesh(mesh, this.getValue(map, \"skin\", null), slotIndex, parent_7, this.getValue(map, \"deform\", true)));\n return mesh;\n }\n var uvs = map.uvs;\n this.readVertices(map, mesh, uvs.length);\n mesh.triangles = map.triangles;\n mesh.regionUVs = uvs;\n mesh.updateUVs();\n mesh.edges = this.getValue(map, \"edges\", null);\n mesh.hullLength = this.getValue(map, \"hull\", 0) * 2;\n return mesh;\n }\n case \"path\": {\n var path = this.attachmentLoader.newPathAttachment(skin, name);\n if (path == null)\n return null;\n path.closed = this.getValue(map, \"closed\", false);\n path.constantSpeed = this.getValue(map, \"constantSpeed\", true);\n var vertexCount = map.vertexCount;\n this.readVertices(map, path, vertexCount << 1);\n var lengths = spine.Utils.newArray(vertexCount / 3, 0);\n for (var i = 0; i < map.lengths.length; i++)\n lengths[i] = map.lengths[i] * scale;\n path.lengths = lengths;\n var color = this.getValue(map, \"color\", null);\n if (color != null)\n path.color.setFromString(color);\n return path;\n }\n case \"point\": {\n var point = this.attachmentLoader.newPointAttachment(skin, name);\n if (point == null)\n return null;\n point.x = this.getValue(map, \"x\", 0) * scale;\n point.y = this.getValue(map, \"y\", 0) * scale;\n point.rotation = this.getValue(map, \"rotation\", 0);\n var color = this.getValue(map, \"color\", null);\n if (color != null)\n point.color.setFromString(color);\n return point;\n }\n case \"clipping\": {\n var clip = this.attachmentLoader.newClippingAttachment(skin, name);\n if (clip == null)\n return null;\n var end = this.getValue(map, \"end\", null);\n if (end != null) {\n var slot = skeletonData.findSlot(end);\n if (slot == null)\n throw new Error(\"Clipping end slot not found: \" + end);\n clip.endSlot = slot;\n }\n var vertexCount = map.vertexCount;\n this.readVertices(map, clip, vertexCount << 1);\n var color = this.getValue(map, \"color\", null);\n if (color != null)\n clip.color.setFromString(color);\n return clip;\n }\n }\n return null;\n };\n SkeletonJson.prototype.readVertices = function (map, attachment, verticesLength) {\n var scale = this.scale;\n attachment.worldVerticesLength = verticesLength;\n var vertices = map.vertices;\n if (verticesLength == vertices.length) {\n var scaledVertices = spine.Utils.toFloatArray(vertices);\n if (scale != 1) {\n for (var i = 0, n = vertices.length; i < n; i++)\n scaledVertices[i] *= scale;\n }\n attachment.vertices = scaledVertices;\n return;\n }\n var weights = new Array();\n var bones = new Array();\n for (var i = 0, n = vertices.length; i < n;) {\n var boneCount = vertices[i++];\n bones.push(boneCount);\n for (var nn = i + boneCount * 4; i < nn; i += 4) {\n bones.push(vertices[i]);\n weights.push(vertices[i + 1] * scale);\n weights.push(vertices[i + 2] * scale);\n weights.push(vertices[i + 3]);\n }\n }\n attachment.bones = bones;\n attachment.vertices = spine.Utils.toFloatArray(weights);\n };\n SkeletonJson.prototype.readAnimation = function (map, name, skeletonData) {\n var scale = this.scale;\n var timelines = new Array();\n var duration = 0;\n if (map.slots) {\n for (var slotName in map.slots) {\n var slotMap = map.slots[slotName];\n var slotIndex = skeletonData.findSlotIndex(slotName);\n if (slotIndex == -1)\n throw new Error(\"Slot not found: \" + slotName);\n for (var timelineName in slotMap) {\n var timelineMap = slotMap[timelineName];\n if (timelineName == \"attachment\") {\n var timeline = new spine.AttachmentTimeline(timelineMap.length);\n timeline.slotIndex = slotIndex;\n var frameIndex = 0;\n for (var i = 0; i < timelineMap.length; i++) {\n var valueMap = timelineMap[i];\n timeline.setFrame(frameIndex++, this.getValue(valueMap, \"time\", 0), valueMap.name);\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]);\n }\n else if (timelineName == \"color\") {\n var timeline = new spine.ColorTimeline(timelineMap.length);\n timeline.slotIndex = slotIndex;\n var frameIndex = 0;\n for (var i = 0; i < timelineMap.length; i++) {\n var valueMap = timelineMap[i];\n var color = new spine.Color();\n color.setFromString(valueMap.color);\n timeline.setFrame(frameIndex, this.getValue(valueMap, \"time\", 0), color.r, color.g, color.b, color.a);\n this.readCurve(valueMap, timeline, frameIndex);\n frameIndex++;\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.ColorTimeline.ENTRIES]);\n }\n else if (timelineName == \"twoColor\") {\n var timeline = new spine.TwoColorTimeline(timelineMap.length);\n timeline.slotIndex = slotIndex;\n var frameIndex = 0;\n for (var i = 0; i < timelineMap.length; i++) {\n var valueMap = timelineMap[i];\n var light = new spine.Color();\n var dark = new spine.Color();\n light.setFromString(valueMap.light);\n dark.setFromString(valueMap.dark);\n timeline.setFrame(frameIndex, this.getValue(valueMap, \"time\", 0), light.r, light.g, light.b, light.a, dark.r, dark.g, dark.b);\n this.readCurve(valueMap, timeline, frameIndex);\n frameIndex++;\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.TwoColorTimeline.ENTRIES]);\n }\n else\n throw new Error(\"Invalid timeline type for a slot: \" + timelineName + \" (\" + slotName + \")\");\n }\n }\n }\n if (map.bones) {\n for (var boneName in map.bones) {\n var boneMap = map.bones[boneName];\n var boneIndex = skeletonData.findBoneIndex(boneName);\n if (boneIndex == -1)\n throw new Error(\"Bone not found: \" + boneName);\n for (var timelineName in boneMap) {\n var timelineMap = boneMap[timelineName];\n if (timelineName === \"rotate\") {\n var timeline = new spine.RotateTimeline(timelineMap.length);\n timeline.boneIndex = boneIndex;\n var frameIndex = 0;\n for (var i = 0; i < timelineMap.length; i++) {\n var valueMap = timelineMap[i];\n timeline.setFrame(frameIndex, this.getValue(valueMap, \"time\", 0), this.getValue(valueMap, \"angle\", 0));\n this.readCurve(valueMap, timeline, frameIndex);\n frameIndex++;\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.RotateTimeline.ENTRIES]);\n }\n else if (timelineName === \"translate\" || timelineName === \"scale\" || timelineName === \"shear\") {\n var timeline = null;\n var timelineScale = 1, defaultValue = 0;\n if (timelineName === \"scale\") {\n timeline = new spine.ScaleTimeline(timelineMap.length);\n defaultValue = 1;\n }\n else if (timelineName === \"shear\")\n timeline = new spine.ShearTimeline(timelineMap.length);\n else {\n timeline = new spine.TranslateTimeline(timelineMap.length);\n timelineScale = scale;\n }\n timeline.boneIndex = boneIndex;\n var frameIndex = 0;\n for (var i = 0; i < timelineMap.length; i++) {\n var valueMap = timelineMap[i];\n var x = this.getValue(valueMap, \"x\", defaultValue), y = this.getValue(valueMap, \"y\", defaultValue);\n timeline.setFrame(frameIndex, this.getValue(valueMap, \"time\", 0), x * timelineScale, y * timelineScale);\n this.readCurve(valueMap, timeline, frameIndex);\n frameIndex++;\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.TranslateTimeline.ENTRIES]);\n }\n else\n throw new Error(\"Invalid timeline type for a bone: \" + timelineName + \" (\" + boneName + \")\");\n }\n }\n }\n if (map.ik) {\n for (var constraintName in map.ik) {\n var constraintMap = map.ik[constraintName];\n var constraint = skeletonData.findIkConstraint(constraintName);\n var timeline = new spine.IkConstraintTimeline(constraintMap.length);\n timeline.ikConstraintIndex = skeletonData.ikConstraints.indexOf(constraint);\n var frameIndex = 0;\n for (var i = 0; i < constraintMap.length; i++) {\n var valueMap = constraintMap[i];\n timeline.setFrame(frameIndex, this.getValue(valueMap, \"time\", 0), this.getValue(valueMap, \"mix\", 1), this.getValue(valueMap, \"softness\", 0) * scale, this.getValue(valueMap, \"bendPositive\", true) ? 1 : -1, this.getValue(valueMap, \"compress\", false), this.getValue(valueMap, \"stretch\", false));\n this.readCurve(valueMap, timeline, frameIndex);\n frameIndex++;\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.IkConstraintTimeline.ENTRIES]);\n }\n }\n if (map.transform) {\n for (var constraintName in map.transform) {\n var constraintMap = map.transform[constraintName];\n var constraint = skeletonData.findTransformConstraint(constraintName);\n var timeline = new spine.TransformConstraintTimeline(constraintMap.length);\n timeline.transformConstraintIndex = skeletonData.transformConstraints.indexOf(constraint);\n var frameIndex = 0;\n for (var i = 0; i < constraintMap.length; i++) {\n var valueMap = constraintMap[i];\n timeline.setFrame(frameIndex, this.getValue(valueMap, \"time\", 0), this.getValue(valueMap, \"rotateMix\", 1), this.getValue(valueMap, \"translateMix\", 1), this.getValue(valueMap, \"scaleMix\", 1), this.getValue(valueMap, \"shearMix\", 1));\n this.readCurve(valueMap, timeline, frameIndex);\n frameIndex++;\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.TransformConstraintTimeline.ENTRIES]);\n }\n }\n let mapPath = map.path || map.paths;\n if (mapPath) {\n for (var constraintName in mapPath) {\n var constraintMap = mapPath[constraintName];\n var index = skeletonData.findPathConstraintIndex(constraintName);\n if (index == -1)\n throw new Error(\"Path constraint not found: \" + constraintName);\n var data = skeletonData.pathConstraints[index];\n for (var timelineName in constraintMap) {\n var timelineMap = constraintMap[timelineName];\n if (timelineName === \"position\" || timelineName === \"spacing\") {\n var timeline = null;\n var timelineScale = 1;\n if (timelineName === \"spacing\") {\n timeline = new spine.PathConstraintSpacingTimeline(timelineMap.length);\n if (data.spacingMode == spine.SpacingMode.Length || data.spacingMode == spine.SpacingMode.Fixed)\n timelineScale = scale;\n }\n else {\n timeline = new spine.PathConstraintPositionTimeline(timelineMap.length);\n if (data.positionMode == spine.PositionMode.Fixed)\n timelineScale = scale;\n }\n timeline.pathConstraintIndex = index;\n var frameIndex = 0;\n for (var i = 0; i < timelineMap.length; i++) {\n var valueMap = timelineMap[i];\n timeline.setFrame(frameIndex, this.getValue(valueMap, \"time\", 0), this.getValue(valueMap, timelineName, 0) * timelineScale);\n this.readCurve(valueMap, timeline, frameIndex);\n frameIndex++;\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.PathConstraintPositionTimeline.ENTRIES]);\n }\n else if (timelineName === \"mix\") {\n var timeline = new spine.PathConstraintMixTimeline(timelineMap.length);\n timeline.pathConstraintIndex = index;\n var frameIndex = 0;\n for (var i = 0; i < timelineMap.length; i++) {\n var valueMap = timelineMap[i];\n timeline.setFrame(frameIndex, this.getValue(valueMap, \"time\", 0), this.getValue(valueMap, \"rotateMix\", 1), this.getValue(valueMap, \"translateMix\", 1));\n this.readCurve(valueMap, timeline, frameIndex);\n frameIndex++;\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.PathConstraintMixTimeline.ENTRIES]);\n }\n }\n }\n }\n if (map.deform) {\n for (var deformName in map.deform) {\n var deformMap = map.deform[deformName];\n var skin = skeletonData.findSkin(deformName);\n if (skin == null)\n throw new Error(\"Skin not found: \" + deformName);\n for (var slotName in deformMap) {\n var slotMap = deformMap[slotName];\n var slotIndex = skeletonData.findSlotIndex(slotName);\n if (slotIndex == -1)\n throw new Error(\"Slot not found: \" + slotMap.name);\n for (var timelineName in slotMap) {\n var timelineMap = slotMap[timelineName];\n var attachment = skin.getAttachment(slotIndex, timelineName);\n if (attachment == null) {\n // throw new Error(\"Deform attachment not found: \" + timelineMap.name);\n continue;\n }\n var weighted = attachment.bones != null;\n var vertices = attachment.vertices;\n var deformLength = weighted ? vertices.length / 3 * 2 : vertices.length;\n var timeline = new spine.DeformTimeline(timelineMap.length);\n timeline.slotIndex = slotIndex;\n timeline.attachment = attachment;\n var frameIndex = 0;\n for (var j = 0; j < timelineMap.length; j++) {\n var valueMap = timelineMap[j];\n var deform = void 0;\n var verticesValue = this.getValue(valueMap, \"vertices\", null);\n if (verticesValue == null)\n deform = weighted ? spine.Utils.newFloatArray(deformLength) : vertices;\n else {\n deform = spine.Utils.newFloatArray(deformLength);\n var start = this.getValue(valueMap, \"offset\", 0);\n spine.Utils.arrayCopy(verticesValue, 0, deform, start, verticesValue.length);\n if (scale != 1) {\n for (var i = start, n = i + verticesValue.length; i < n; i++)\n deform[i] *= scale;\n }\n if (!weighted) {\n for (var i = 0; i < deformLength; i++)\n deform[i] += vertices[i];\n }\n }\n timeline.setFrame(frameIndex, this.getValue(valueMap, \"time\", 0), deform);\n this.readCurve(valueMap, timeline, frameIndex);\n frameIndex++;\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]);\n }\n }\n }\n }\n var drawOrderNode = map.drawOrder;\n if (drawOrderNode == null)\n drawOrderNode = map.draworder;\n if (drawOrderNode != null) {\n var timeline = new spine.DrawOrderTimeline(drawOrderNode.length);\n var slotCount = skeletonData.slots.length;\n var frameIndex = 0;\n for (var j = 0; j < drawOrderNode.length; j++) {\n var drawOrderMap = drawOrderNode[j];\n var drawOrder = null;\n var offsets = this.getValue(drawOrderMap, \"offsets\", null);\n if (offsets != null) {\n drawOrder = spine.Utils.newArray(slotCount, -1);\n var unchanged = spine.Utils.newArray(slotCount - offsets.length, 0);\n var originalIndex = 0, unchangedIndex = 0;\n for (var i = 0; i < offsets.length; i++) {\n var offsetMap = offsets[i];\n var slotIndex = skeletonData.findSlotIndex(offsetMap.slot);\n if (slotIndex == -1)\n throw new Error(\"Slot not found: \" + offsetMap.slot);\n while (originalIndex != slotIndex)\n unchanged[unchangedIndex++] = originalIndex++;\n drawOrder[originalIndex + offsetMap.offset] = originalIndex++;\n }\n while (originalIndex < slotCount)\n unchanged[unchangedIndex++] = originalIndex++;\n for (var i = slotCount - 1; i >= 0; i--)\n if (drawOrder[i] == -1)\n drawOrder[i] = unchanged[--unchangedIndex];\n }\n timeline.setFrame(frameIndex++, this.getValue(drawOrderMap, \"time\", 0), drawOrder);\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]);\n }\n if (map.events) {\n var timeline = new spine.EventTimeline(map.events.length);\n var frameIndex = 0;\n for (var i = 0; i < map.events.length; i++) {\n var eventMap = map.events[i];\n var eventData = skeletonData.findEvent(eventMap.name);\n if (eventData == null)\n throw new Error(\"Event not found: \" + eventMap.name);\n var event_6 = new spine.Event(spine.Utils.toSinglePrecision(this.getValue(eventMap, \"time\", 0)), eventData);\n event_6.intValue = this.getValue(eventMap, \"int\", eventData.intValue);\n event_6.floatValue = this.getValue(eventMap, \"float\", eventData.floatValue);\n event_6.stringValue = this.getValue(eventMap, \"string\", eventData.stringValue);\n if (event_6.data.audioPath != null) {\n event_6.volume = this.getValue(eventMap, \"volume\", 1);\n event_6.balance = this.getValue(eventMap, \"balance\", 0);\n }\n timeline.setFrame(frameIndex++, event_6);\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]);\n }\n if (isNaN(duration)) {\n throw new Error(\"Error while parsing animation, duration is NaN\");\n }\n skeletonData.animations.push(new spine.Animation(name, timelines, duration));\n };\n SkeletonJson.prototype.readCurve = function (map, timeline, frameIndex) {\n var curve = map.curve;\n if (!curve)\n return;\n if (curve == \"stepped\") {\n timeline.setStepped(frameIndex);\n } else if (Object.prototype.toString.call(curve) === '[object Array]') {\n timeline.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);\n } else {\n timeline.setCurve(frameIndex, curve, this.getValue(map, \"c2\", 0), this.getValue(map, \"c3\", 1), this.getValue(map, \"c4\", 1));\n }\n };\n SkeletonJson.prototype.getValue = function (map, prop, defaultValue) {\n return map[prop] !== undefined ? map[prop] : defaultValue;\n };\n SkeletonJson.blendModeFromString = function (str) {\n str = str.toLowerCase();\n if (str == \"normal\")\n return spine.BlendMode.Normal;\n if (str == \"additive\")\n return spine.BlendMode.Additive;\n if (str == \"multiply\")\n return spine.BlendMode.Multiply;\n if (str == \"screen\")\n return spine.BlendMode.Screen;\n throw new Error(\"Unknown blend mode: \" + str);\n };\n SkeletonJson.positionModeFromString = function (str) {\n str = str.toLowerCase();\n if (str == \"fixed\")\n return spine.PositionMode.Fixed;\n if (str == \"percent\")\n return spine.PositionMode.Percent;\n throw new Error(\"Unknown position mode: \" + str);\n };\n SkeletonJson.spacingModeFromString = function (str) {\n str = str.toLowerCase();\n if (str == \"length\")\n return spine.SpacingMode.Length;\n if (str == \"fixed\")\n return spine.SpacingMode.Fixed;\n if (str == \"percent\")\n return spine.SpacingMode.Percent;\n throw new Error(\"Unknown position mode: \" + str);\n };\n SkeletonJson.rotateModeFromString = function (str) {\n str = str.toLowerCase();\n if (str == \"tangent\")\n return spine.RotateMode.Tangent;\n if (str == \"chain\")\n return spine.RotateMode.Chain;\n if (str == \"chainscale\")\n return spine.RotateMode.ChainScale;\n throw new Error(\"Unknown rotate mode: \" + str);\n };\n SkeletonJson.transformModeFromString = function (str) {\n str = str.toLowerCase();\n if (str == \"normal\")\n return spine.TransformMode.Normal;\n if (str == \"onlytranslation\")\n return spine.TransformMode.OnlyTranslation;\n if (str == \"norotationorreflection\")\n return spine.TransformMode.NoRotationOrReflection;\n if (str == \"noscale\")\n return spine.TransformMode.NoScale;\n if (str == \"noscaleorreflection\")\n return spine.TransformMode.NoScaleOrReflection;\n throw new Error(\"Unknown transform mode: \" + str);\n };\n return SkeletonJson;\n }());\n spine.SkeletonJson = SkeletonJson;\n var LinkedMesh = (function () {\n function LinkedMesh(mesh, skin, slotIndex, parent, inheritDeform) {\n this.mesh = mesh;\n this.skin = skin;\n this.slotIndex = slotIndex;\n this.parent = parent;\n this.inheritDeform = inheritDeform;\n }\n return LinkedMesh;\n }());\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var SkinEntry = (function () {\n function SkinEntry(slotIndex, name, attachment) {\n this.slotIndex = slotIndex;\n this.name = name;\n this.attachment = attachment;\n }\n return SkinEntry;\n }());\n spine.SkinEntry = SkinEntry;\n var Skin = (function () {\n function Skin(name) {\n this.attachments = new Array();\n this.bones = Array();\n this.constraints = new Array();\n if (name == null)\n throw new Error(\"name cannot be null.\");\n this.name = name;\n }\n Skin.prototype.setAttachment = function (slotIndex, name, attachment) {\n if (attachment == null)\n throw new Error(\"attachment cannot be null.\");\n var attachments = this.attachments;\n if (slotIndex >= attachments.length)\n attachments.length = slotIndex + 1;\n if (!attachments[slotIndex])\n attachments[slotIndex] = {};\n attachments[slotIndex][name] = attachment;\n };\n Skin.prototype.addSkin = function (skin) {\n for (var i = 0; i < skin.bones.length; i++) {\n var bone = skin.bones[i];\n var contained = false;\n for (var j = 0; j < this.bones.length; j++) {\n if (this.bones[j] == bone) {\n contained = true;\n break;\n }\n }\n if (!contained)\n this.bones.push(bone);\n }\n for (var i = 0; i < skin.constraints.length; i++) {\n var constraint = skin.constraints[i];\n var contained = false;\n for (var j = 0; j < this.constraints.length; j++) {\n if (this.constraints[j] == constraint) {\n contained = true;\n break;\n }\n }\n if (!contained)\n this.constraints.push(constraint);\n }\n var attachments = skin.getAttachments();\n for (var i = 0; i < attachments.length; i++) {\n var attachment = attachments[i];\n this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment);\n }\n };\n Skin.prototype.copySkin = function (skin) {\n for (var i = 0; i < skin.bones.length; i++) {\n var bone = skin.bones[i];\n var contained = false;\n for (var j = 0; j < this.bones.length; j++) {\n if (this.bones[j] == bone) {\n contained = true;\n break;\n }\n }\n if (!contained)\n this.bones.push(bone);\n }\n for (var i = 0; i < skin.constraints.length; i++) {\n var constraint = skin.constraints[i];\n var contained = false;\n for (var j = 0; j < this.constraints.length; j++) {\n if (this.constraints[j] == constraint) {\n contained = true;\n break;\n }\n }\n if (!contained)\n this.constraints.push(constraint);\n }\n var attachments = skin.getAttachments();\n for (var i = 0; i < attachments.length; i++) {\n var attachment = attachments[i];\n if (attachment.attachment == null)\n continue;\n if (attachment.attachment instanceof spine.MeshAttachment) {\n attachment.attachment = attachment.attachment.newLinkedMesh();\n this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment);\n }\n else {\n attachment.attachment = attachment.attachment.copy();\n this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment);\n }\n }\n };\n Skin.prototype.getAttachment = function (slotIndex, name) {\n var dictionary = this.attachments[slotIndex];\n return dictionary ? dictionary[name] : null;\n };\n Skin.prototype.removeAttachment = function (slotIndex, name) {\n var dictionary = this.attachments[slotIndex];\n if (dictionary)\n dictionary[name] = null;\n };\n Skin.prototype.getAttachments = function () {\n var entries = new Array();\n for (var i = 0; i < this.attachments.length; i++) {\n var slotAttachments = this.attachments[i];\n if (slotAttachments) {\n for (var name_4 in slotAttachments) {\n var attachment = slotAttachments[name_4];\n if (attachment)\n entries.push(new SkinEntry(i, name_4, attachment));\n }\n }\n }\n return entries;\n };\n Skin.prototype.getAttachmentsForSlot = function (slotIndex, attachments) {\n var slotAttachments = this.attachments[slotIndex];\n if (slotAttachments) {\n for (var name_5 in slotAttachments) {\n var attachment = slotAttachments[name_5];\n if (attachment)\n attachments.push(new SkinEntry(slotIndex, name_5, attachment));\n }\n }\n };\n Skin.prototype.clear = function () {\n this.attachments.length = 0;\n this.bones.length = 0;\n this.constraints.length = 0;\n };\n Skin.prototype.attachAll = function (skeleton, oldSkin) {\n var slotIndex = 0;\n for (var i = 0; i < skeleton.slots.length; i++) {\n var slot = skeleton.slots[i];\n var slotAttachment = slot.getAttachment();\n if (slotAttachment && slotIndex < oldSkin.attachments.length) {\n var dictionary = oldSkin.attachments[slotIndex];\n for (var key in dictionary) {\n var skinAttachment = dictionary[key];\n if (slotAttachment == skinAttachment) {\n var attachment = this.getAttachment(slotIndex, key);\n if (attachment != null)\n slot.setAttachment(attachment);\n break;\n }\n }\n }\n slotIndex++;\n }\n };\n return Skin;\n }());\n spine.Skin = Skin;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var Slot = (function () {\n function Slot(data, bone) {\n this.deform = new Array();\n if (data == null)\n throw new Error(\"data cannot be null.\");\n if (bone == null)\n throw new Error(\"bone cannot be null.\");\n this.data = data;\n this.bone = bone;\n this.color = new spine.Color();\n this.darkColor = data.darkColor == null ? null : new spine.Color();\n this.setToSetupPose();\n }\n Slot.prototype.getSkeleton = function () {\n return this.bone.skeleton;\n };\n Slot.prototype.getAttachment = function () {\n return this.attachment;\n };\n Slot.prototype.setAttachment = function (attachment) {\n if (this.attachment == attachment)\n return;\n this.attachment = attachment;\n this.attachmentTime = this.bone.skeleton.time;\n this.deform.length = 0;\n };\n Slot.prototype.setAttachmentTime = function (time) {\n this.attachmentTime = this.bone.skeleton.time - time;\n };\n Slot.prototype.getAttachmentTime = function () {\n return this.bone.skeleton.time - this.attachmentTime;\n };\n Slot.prototype.setToSetupPose = function () {\n this.color.setFromColor(this.data.color);\n if (this.darkColor != null)\n this.darkColor.setFromColor(this.data.darkColor);\n if (this.data.attachmentName == null)\n this.attachment = null;\n else {\n this.attachment = null;\n this.setAttachment(this.bone.skeleton.getAttachment(this.data.index, this.data.attachmentName));\n }\n };\n return Slot;\n }());\n spine.Slot = Slot;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var SlotData = (function () {\n function SlotData(index, name, boneData) {\n this.color = new spine.Color(1, 1, 1, 1);\n if (index < 0)\n throw new Error(\"index must be >= 0.\");\n if (name == null)\n throw new Error(\"name cannot be null.\");\n if (boneData == null)\n throw new Error(\"boneData cannot be null.\");\n this.index = index;\n this.name = name;\n this.boneData = boneData;\n }\n return SlotData;\n }());\n spine.SlotData = SlotData;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var Texture = (function () {\n function Texture(image) {\n this._image = image;\n }\n Texture.prototype.getImage = function () {\n return this._image;\n };\n Texture.filterFromString = function (text) {\n switch (text.toLowerCase()) {\n case \"nearest\": return TextureFilter.Nearest;\n case \"linear\": return TextureFilter.Linear;\n case \"mipmap\": return TextureFilter.MipMap;\n case \"mipmapnearestnearest\": return TextureFilter.MipMapNearestNearest;\n case \"mipmaplinearnearest\": return TextureFilter.MipMapLinearNearest;\n case \"mipmapnearestlinear\": return TextureFilter.MipMapNearestLinear;\n case \"mipmaplinearlinear\": return TextureFilter.MipMapLinearLinear;\n default: throw new Error(\"Unknown texture filter \" + text);\n }\n };\n Texture.wrapFromString = function (text) {\n switch (text.toLowerCase()) {\n case \"mirroredtepeat\": return TextureWrap.MirroredRepeat;\n case \"clamptoedge\": return TextureWrap.ClampToEdge;\n case \"repeat\": return TextureWrap.Repeat;\n default: throw new Error(\"Unknown texture wrap \" + text);\n }\n };\n return Texture;\n }());\n spine.Texture = Texture;\n var TextureFilter;\n (function (TextureFilter) {\n TextureFilter[TextureFilter[\"Nearest\"] = 9728] = \"Nearest\";\n TextureFilter[TextureFilter[\"Linear\"] = 9729] = \"Linear\";\n TextureFilter[TextureFilter[\"MipMap\"] = 9987] = \"MipMap\";\n TextureFilter[TextureFilter[\"MipMapNearestNearest\"] = 9984] = \"MipMapNearestNearest\";\n TextureFilter[TextureFilter[\"MipMapLinearNearest\"] = 9985] = \"MipMapLinearNearest\";\n TextureFilter[TextureFilter[\"MipMapNearestLinear\"] = 9986] = \"MipMapNearestLinear\";\n TextureFilter[TextureFilter[\"MipMapLinearLinear\"] = 9987] = \"MipMapLinearLinear\";\n })(TextureFilter = spine.TextureFilter || (spine.TextureFilter = {}));\n var TextureWrap;\n (function (TextureWrap) {\n TextureWrap[TextureWrap[\"MirroredRepeat\"] = 33648] = \"MirroredRepeat\";\n TextureWrap[TextureWrap[\"ClampToEdge\"] = 33071] = \"ClampToEdge\";\n TextureWrap[TextureWrap[\"Repeat\"] = 10497] = \"Repeat\";\n })(TextureWrap = spine.TextureWrap || (spine.TextureWrap = {}));\n var TextureRegion = (function () {\n function TextureRegion() {\n this.u = 0;\n this.v = 0;\n this.u2 = 0;\n this.v2 = 0;\n this.width = 0;\n this.height = 0;\n this.rotate = false;\n this.offsetX = 0;\n this.offsetY = 0;\n this.originalWidth = 0;\n this.originalHeight = 0;\n }\n return TextureRegion;\n }());\n spine.TextureRegion = TextureRegion;\n var FakeTexture = (function (_super) {\n __extends(FakeTexture, _super);\n function FakeTexture() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n FakeTexture.prototype.setFilters = function (minFilter, magFilter) { };\n FakeTexture.prototype.setWraps = function (uWrap, vWrap) { };\n FakeTexture.prototype.dispose = function () { };\n return FakeTexture;\n }(Texture));\n spine.FakeTexture = FakeTexture;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var TextureAtlas = (function () {\n function TextureAtlas(atlasText, textureLoader) {\n this.pages = new Array();\n this.regions = new Array();\n this.load(atlasText, textureLoader);\n }\n TextureAtlas.prototype.load = function (atlasText, textureLoader) {\n if (textureLoader == null)\n throw new Error(\"textureLoader cannot be null.\");\n var reader = new TextureAtlasReader(atlasText);\n var tuple = new Array(4);\n var page = null;\n while (true) {\n var line = reader.readLine();\n if (line == null)\n break;\n line = line.trim();\n if (line.length == 0)\n page = null;\n else if (!page) {\n page = new TextureAtlasPage();\n page.name = line;\n if (reader.readTuple(tuple) == 2) {\n page.width = parseInt(tuple[0]);\n page.height = parseInt(tuple[1]);\n reader.readTuple(tuple);\n }\n reader.readTuple(tuple);\n page.minFilter = spine.Texture.filterFromString(tuple[0]);\n page.magFilter = spine.Texture.filterFromString(tuple[1]);\n var direction = reader.readValue();\n page.uWrap = spine.TextureWrap.ClampToEdge;\n page.vWrap = spine.TextureWrap.ClampToEdge;\n if (direction == \"x\")\n page.uWrap = spine.TextureWrap.Repeat;\n else if (direction == \"y\")\n page.vWrap = spine.TextureWrap.Repeat;\n else if (direction == \"xy\")\n page.uWrap = page.vWrap = spine.TextureWrap.Repeat;\n page.texture = textureLoader(line);\n page.texture.setFilters(page.minFilter, page.magFilter);\n page.texture.setWraps(page.uWrap, page.vWrap);\n page.width = page.texture.getImage().width;\n page.height = page.texture.getImage().height;\n this.pages.push(page);\n }\n else {\n var region = new TextureAtlasRegion();\n region.name = line;\n region.page = page;\n var rotateValue = reader.readValue();\n if (rotateValue.toLocaleLowerCase() == \"true\") {\n region.degrees = 90;\n }\n else if (rotateValue.toLocaleLowerCase() == \"false\") {\n region.degrees = 0;\n }\n else {\n region.degrees = parseFloat(rotateValue);\n }\n region.rotate = region.degrees == 90;\n reader.readTuple(tuple);\n var x = parseInt(tuple[0]);\n var y = parseInt(tuple[1]);\n reader.readTuple(tuple);\n var width = parseInt(tuple[0]);\n var height = parseInt(tuple[1]);\n region.u = x / page.width;\n region.v = y / page.height;\n if (region.rotate) {\n region.u2 = (x + height) / page.width;\n region.v2 = (y + width) / page.height;\n }\n else {\n region.u2 = (x + width) / page.width;\n region.v2 = (y + height) / page.height;\n }\n region.x = x;\n region.y = y;\n region.width = Math.abs(width);\n region.height = Math.abs(height);\n if (reader.readTuple(tuple) == 4) {\n if (reader.readTuple(tuple) == 4) {\n reader.readTuple(tuple);\n }\n }\n region.originalWidth = parseInt(tuple[0]);\n region.originalHeight = parseInt(tuple[1]);\n reader.readTuple(tuple);\n region.offsetX = parseInt(tuple[0]);\n region.offsetY = parseInt(tuple[1]);\n region.index = parseInt(reader.readValue());\n region.texture = page.texture;\n this.regions.push(region);\n }\n }\n };\n TextureAtlas.prototype.findRegion = function (name) {\n for (var i = 0; i < this.regions.length; i++) {\n if (this.regions[i].name == name) {\n return this.regions[i];\n }\n }\n return null;\n };\n TextureAtlas.prototype.dispose = function () {\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].texture.dispose();\n }\n };\n return TextureAtlas;\n }());\n spine.TextureAtlas = TextureAtlas;\n var TextureAtlasReader = (function () {\n function TextureAtlasReader(text) {\n this.index = 0;\n this.lines = text.split(/\\r\\n|\\r|\\n/);\n }\n TextureAtlasReader.prototype.readLine = function () {\n if (this.index >= this.lines.length)\n return null;\n return this.lines[this.index++];\n };\n TextureAtlasReader.prototype.readValue = function () {\n var line = this.readLine();\n var colon = line.indexOf(\":\");\n if (colon == -1)\n throw new Error(\"Invalid line: \" + line);\n return line.substring(colon + 1).trim();\n };\n TextureAtlasReader.prototype.readTuple = function (tuple) {\n var line = this.readLine();\n var colon = line.indexOf(\":\");\n if (colon == -1)\n throw new Error(\"Invalid line: \" + line);\n var i = 0, lastMatch = colon + 1;\n for (; i < 3; i++) {\n var comma = line.indexOf(\",\", lastMatch);\n if (comma == -1)\n break;\n tuple[i] = line.substr(lastMatch, comma - lastMatch).trim();\n lastMatch = comma + 1;\n }\n tuple[i] = line.substring(lastMatch).trim();\n return i + 1;\n };\n return TextureAtlasReader;\n }());\n var TextureAtlasPage = (function () {\n function TextureAtlasPage() {\n }\n return TextureAtlasPage;\n }());\n spine.TextureAtlasPage = TextureAtlasPage;\n var TextureAtlasRegion = (function (_super) {\n __extends(TextureAtlasRegion, _super);\n function TextureAtlasRegion() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return TextureAtlasRegion;\n }(spine.TextureRegion));\n spine.TextureAtlasRegion = TextureAtlasRegion;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var TransformConstraint = (function () {\n function TransformConstraint(data, skeleton) {\n this.rotateMix = 0;\n this.translateMix = 0;\n this.scaleMix = 0;\n this.shearMix = 0;\n this.temp = new spine.Vector2();\n this.active = false;\n if (data == null)\n throw new Error(\"data cannot be null.\");\n if (skeleton == null)\n throw new Error(\"skeleton cannot be null.\");\n this.data = data;\n this.rotateMix = data.rotateMix;\n this.translateMix = data.translateMix;\n this.scaleMix = data.scaleMix;\n this.shearMix = data.shearMix;\n this.bones = new Array();\n for (var i = 0; i < data.bones.length; i++)\n this.bones.push(skeleton.findBone(data.bones[i].name));\n this.target = skeleton.findBone(data.target.name);\n }\n TransformConstraint.prototype.isActive = function () {\n return this.active;\n };\n TransformConstraint.prototype.apply = function () {\n this.update();\n };\n TransformConstraint.prototype.update = function () {\n if (this.data.local) {\n if (this.data.relative)\n this.applyRelativeLocal();\n else\n this.applyAbsoluteLocal();\n }\n else {\n if (this.data.relative)\n this.applyRelativeWorld();\n else\n this.applyAbsoluteWorld();\n }\n };\n TransformConstraint.prototype.applyAbsoluteWorld = function () {\n var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix;\n var target = this.target;\n var ta = target.a, tb = target.b, tc = target.c, td = target.d;\n var degRadReflect = ta * td - tb * tc > 0 ? spine.MathUtils.degRad : -spine.MathUtils.degRad;\n var offsetRotation = this.data.offsetRotation * degRadReflect;\n var offsetShearY = this.data.offsetShearY * degRadReflect;\n var bones = this.bones;\n for (var i = 0, n = bones.length; i < n; i++) {\n var bone = bones[i];\n var modified = false;\n if (rotateMix != 0) {\n var a = bone.a, b = bone.b, c = bone.c, d = bone.d;\n var r = Math.atan2(tc, ta) - Math.atan2(c, a) + offsetRotation;\n if (r > spine.MathUtils.PI)\n r -= spine.MathUtils.PI2;\n else if (r < -spine.MathUtils.PI)\n r += spine.MathUtils.PI2;\n r *= rotateMix;\n var cos = Math.cos(r), sin = Math.sin(r);\n bone.a = cos * a - sin * c;\n bone.b = cos * b - sin * d;\n bone.c = sin * a + cos * c;\n bone.d = sin * b + cos * d;\n modified = true;\n }\n if (translateMix != 0) {\n var temp = this.temp;\n target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY));\n bone.worldX += (temp.x - bone.worldX) * translateMix;\n bone.worldY += (temp.y - bone.worldY) * translateMix;\n modified = true;\n }\n if (scaleMix > 0) {\n var s = Math.sqrt(bone.a * bone.a + bone.c * bone.c);\n var ts = Math.sqrt(ta * ta + tc * tc);\n if (s > 0.00001)\n s = (s + (ts - s + this.data.offsetScaleX) * scaleMix) / s;\n bone.a *= s;\n bone.c *= s;\n s = Math.sqrt(bone.b * bone.b + bone.d * bone.d);\n ts = Math.sqrt(tb * tb + td * td);\n if (s > 0.00001)\n s = (s + (ts - s + this.data.offsetScaleY) * scaleMix) / s;\n bone.b *= s;\n bone.d *= s;\n modified = true;\n }\n if (shearMix > 0) {\n var b = bone.b, d = bone.d;\n var by = Math.atan2(d, b);\n var r = Math.atan2(td, tb) - Math.atan2(tc, ta) - (by - Math.atan2(bone.c, bone.a));\n if (r > spine.MathUtils.PI)\n r -= spine.MathUtils.PI2;\n else if (r < -spine.MathUtils.PI)\n r += spine.MathUtils.PI2;\n r = by + (r + offsetShearY) * shearMix;\n var s = Math.sqrt(b * b + d * d);\n bone.b = Math.cos(r) * s;\n bone.d = Math.sin(r) * s;\n modified = true;\n }\n if (modified)\n bone.appliedValid = false;\n }\n };\n TransformConstraint.prototype.applyRelativeWorld = function () {\n var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix;\n var target = this.target;\n var ta = target.a, tb = target.b, tc = target.c, td = target.d;\n var degRadReflect = ta * td - tb * tc > 0 ? spine.MathUtils.degRad : -spine.MathUtils.degRad;\n var offsetRotation = this.data.offsetRotation * degRadReflect, offsetShearY = this.data.offsetShearY * degRadReflect;\n var bones = this.bones;\n for (var i = 0, n = bones.length; i < n; i++) {\n var bone = bones[i];\n var modified = false;\n if (rotateMix != 0) {\n var a = bone.a, b = bone.b, c = bone.c, d = bone.d;\n var r = Math.atan2(tc, ta) + offsetRotation;\n if (r > spine.MathUtils.PI)\n r -= spine.MathUtils.PI2;\n else if (r < -spine.MathUtils.PI)\n r += spine.MathUtils.PI2;\n r *= rotateMix;\n var cos = Math.cos(r), sin = Math.sin(r);\n bone.a = cos * a - sin * c;\n bone.b = cos * b - sin * d;\n bone.c = sin * a + cos * c;\n bone.d = sin * b + cos * d;\n modified = true;\n }\n if (translateMix != 0) {\n var temp = this.temp;\n target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY));\n bone.worldX += temp.x * translateMix;\n bone.worldY += temp.y * translateMix;\n modified = true;\n }\n if (scaleMix > 0) {\n var s = (Math.sqrt(ta * ta + tc * tc) - 1 + this.data.offsetScaleX) * scaleMix + 1;\n bone.a *= s;\n bone.c *= s;\n s = (Math.sqrt(tb * tb + td * td) - 1 + this.data.offsetScaleY) * scaleMix + 1;\n bone.b *= s;\n bone.d *= s;\n modified = true;\n }\n if (shearMix > 0) {\n var r = Math.atan2(td, tb) - Math.atan2(tc, ta);\n if (r > spine.MathUtils.PI)\n r -= spine.MathUtils.PI2;\n else if (r < -spine.MathUtils.PI)\n r += spine.MathUtils.PI2;\n var b = bone.b, d = bone.d;\n r = Math.atan2(d, b) + (r - spine.MathUtils.PI / 2 + offsetShearY) * shearMix;\n var s = Math.sqrt(b * b + d * d);\n bone.b = Math.cos(r) * s;\n bone.d = Math.sin(r) * s;\n modified = true;\n }\n if (modified)\n bone.appliedValid = false;\n }\n };\n TransformConstraint.prototype.applyAbsoluteLocal = function () {\n var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix;\n var target = this.target;\n if (!target.appliedValid)\n target.updateAppliedTransform();\n var bones = this.bones;\n for (var i = 0, n = bones.length; i < n; i++) {\n var bone = bones[i];\n if (!bone.appliedValid)\n bone.updateAppliedTransform();\n var rotation = bone.arotation;\n if (rotateMix != 0) {\n var r = target.arotation - rotation + this.data.offsetRotation;\n r -= (16384 - ((16384.499999999996 - r / 360) | 0)) * 360;\n rotation += r * rotateMix;\n }\n var x = bone.ax, y = bone.ay;\n if (translateMix != 0) {\n x += (target.ax - x + this.data.offsetX) * translateMix;\n y += (target.ay - y + this.data.offsetY) * translateMix;\n }\n var scaleX = bone.ascaleX, scaleY = bone.ascaleY;\n if (scaleMix != 0) {\n if (scaleX > 0.00001)\n scaleX = (scaleX + (target.ascaleX - scaleX + this.data.offsetScaleX) * scaleMix) / scaleX;\n if (scaleY > 0.00001)\n scaleY = (scaleY + (target.ascaleY - scaleY + this.data.offsetScaleY) * scaleMix) / scaleY;\n }\n var shearY = bone.ashearY;\n if (shearMix != 0) {\n var r = target.ashearY - shearY + this.data.offsetShearY;\n r -= (16384 - ((16384.499999999996 - r / 360) | 0)) * 360;\n bone.shearY += r * shearMix;\n }\n bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY);\n }\n };\n TransformConstraint.prototype.applyRelativeLocal = function () {\n var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix;\n var target = this.target;\n if (!target.appliedValid)\n target.updateAppliedTransform();\n var bones = this.bones;\n for (var i = 0, n = bones.length; i < n; i++) {\n var bone = bones[i];\n if (!bone.appliedValid)\n bone.updateAppliedTransform();\n var rotation = bone.arotation;\n if (rotateMix != 0)\n rotation += (target.arotation + this.data.offsetRotation) * rotateMix;\n var x = bone.ax, y = bone.ay;\n if (translateMix != 0) {\n x += (target.ax + this.data.offsetX) * translateMix;\n y += (target.ay + this.data.offsetY) * translateMix;\n }\n var scaleX = bone.ascaleX, scaleY = bone.ascaleY;\n if (scaleMix != 0) {\n if (scaleX > 0.00001)\n scaleX *= ((target.ascaleX - 1 + this.data.offsetScaleX) * scaleMix) + 1;\n if (scaleY > 0.00001)\n scaleY *= ((target.ascaleY - 1 + this.data.offsetScaleY) * scaleMix) + 1;\n }\n var shearY = bone.ashearY;\n if (shearMix != 0)\n shearY += (target.ashearY + this.data.offsetShearY) * shearMix;\n bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY);\n }\n };\n return TransformConstraint;\n }());\n spine.TransformConstraint = TransformConstraint;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var TransformConstraintData = (function (_super) {\n __extends(TransformConstraintData, _super);\n function TransformConstraintData(name) {\n var _this = _super.call(this, name, 0, false) || this;\n _this.bones = new Array();\n _this.rotateMix = 0;\n _this.translateMix = 0;\n _this.scaleMix = 0;\n _this.shearMix = 0;\n _this.offsetRotation = 0;\n _this.offsetX = 0;\n _this.offsetY = 0;\n _this.offsetScaleX = 0;\n _this.offsetScaleY = 0;\n _this.offsetShearY = 0;\n _this.relative = false;\n _this.local = false;\n return _this;\n }\n return TransformConstraintData;\n }(spine.ConstraintData));\n spine.TransformConstraintData = TransformConstraintData;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var Triangulator = (function () {\n function Triangulator() {\n this.convexPolygons = new Array();\n this.convexPolygonsIndices = new Array();\n this.indicesArray = new Array();\n this.isConcaveArray = new Array();\n this.triangles = new Array();\n this.polygonPool = new spine.Pool(function () {\n return new Array();\n });\n this.polygonIndicesPool = new spine.Pool(function () {\n return new Array();\n });\n }\n Triangulator.prototype.triangulate = function (verticesArray) {\n var vertices = verticesArray;\n var vertexCount = verticesArray.length >> 1;\n var indices = this.indicesArray;\n indices.length = 0;\n for (var i = 0; i < vertexCount; i++)\n indices[i] = i;\n var isConcave = this.isConcaveArray;\n isConcave.length = 0;\n for (var i = 0, n = vertexCount; i < n; ++i)\n isConcave[i] = Triangulator.isConcave(i, vertexCount, vertices, indices);\n var triangles = this.triangles;\n triangles.length = 0;\n while (vertexCount > 3) {\n var previous = vertexCount - 1, i = 0, next = 1;\n while (true) {\n outer: if (!isConcave[i]) {\n var p1 = indices[previous] << 1, p2 = indices[i] << 1, p3 = indices[next] << 1;\n var p1x = vertices[p1], p1y = vertices[p1 + 1];\n var p2x = vertices[p2], p2y = vertices[p2 + 1];\n var p3x = vertices[p3], p3y = vertices[p3 + 1];\n for (var ii = (next + 1) % vertexCount; ii != previous; ii = (ii + 1) % vertexCount) {\n if (!isConcave[ii])\n continue;\n var v = indices[ii] << 1;\n var vx = vertices[v], vy = vertices[v + 1];\n if (Triangulator.positiveArea(p3x, p3y, p1x, p1y, vx, vy)) {\n if (Triangulator.positiveArea(p1x, p1y, p2x, p2y, vx, vy)) {\n if (Triangulator.positiveArea(p2x, p2y, p3x, p3y, vx, vy))\n break outer;\n }\n }\n }\n break;\n }\n if (next == 0) {\n do {\n if (!isConcave[i])\n break;\n i--;\n } while (i > 0);\n break;\n }\n previous = i;\n i = next;\n next = (next + 1) % vertexCount;\n }\n triangles.push(indices[(vertexCount + i - 1) % vertexCount]);\n triangles.push(indices[i]);\n triangles.push(indices[(i + 1) % vertexCount]);\n indices.splice(i, 1);\n isConcave.splice(i, 1);\n vertexCount--;\n var previousIndex = (vertexCount + i - 1) % vertexCount;\n var nextIndex = i == vertexCount ? 0 : i;\n isConcave[previousIndex] = Triangulator.isConcave(previousIndex, vertexCount, vertices, indices);\n isConcave[nextIndex] = Triangulator.isConcave(nextIndex, vertexCount, vertices, indices);\n }\n if (vertexCount == 3) {\n triangles.push(indices[2]);\n triangles.push(indices[0]);\n triangles.push(indices[1]);\n }\n return triangles;\n };\n Triangulator.prototype.decompose = function (verticesArray, triangles) {\n var vertices = verticesArray;\n var convexPolygons = this.convexPolygons;\n this.polygonPool.freeAll(convexPolygons);\n convexPolygons.length = 0;\n var convexPolygonsIndices = this.convexPolygonsIndices;\n this.polygonIndicesPool.freeAll(convexPolygonsIndices);\n convexPolygonsIndices.length = 0;\n var polygonIndices = this.polygonIndicesPool.obtain();\n polygonIndices.length = 0;\n var polygon = this.polygonPool.obtain();\n polygon.length = 0;\n var fanBaseIndex = -1, lastWinding = 0;\n for (var i = 0, n = triangles.length; i < n; i += 3) {\n var t1 = triangles[i] << 1, t2 = triangles[i + 1] << 1, t3 = triangles[i + 2] << 1;\n var x1 = vertices[t1], y1 = vertices[t1 + 1];\n var x2 = vertices[t2], y2 = vertices[t2 + 1];\n var x3 = vertices[t3], y3 = vertices[t3 + 1];\n var merged = false;\n if (fanBaseIndex == t1) {\n var o = polygon.length - 4;\n var winding1 = Triangulator.winding(polygon[o], polygon[o + 1], polygon[o + 2], polygon[o + 3], x3, y3);\n var winding2 = Triangulator.winding(x3, y3, polygon[0], polygon[1], polygon[2], polygon[3]);\n if (winding1 == lastWinding && winding2 == lastWinding) {\n polygon.push(x3);\n polygon.push(y3);\n polygonIndices.push(t3);\n merged = true;\n }\n }\n if (!merged) {\n if (polygon.length > 0) {\n convexPolygons.push(polygon);\n convexPolygonsIndices.push(polygonIndices);\n }\n else {\n this.polygonPool.free(polygon);\n this.polygonIndicesPool.free(polygonIndices);\n }\n polygon = this.polygonPool.obtain();\n polygon.length = 0;\n polygon.push(x1);\n polygon.push(y1);\n polygon.push(x2);\n polygon.push(y2);\n polygon.push(x3);\n polygon.push(y3);\n polygonIndices = this.polygonIndicesPool.obtain();\n polygonIndices.length = 0;\n polygonIndices.push(t1);\n polygonIndices.push(t2);\n polygonIndices.push(t3);\n lastWinding = Triangulator.winding(x1, y1, x2, y2, x3, y3);\n fanBaseIndex = t1;\n }\n }\n if (polygon.length > 0) {\n convexPolygons.push(polygon);\n convexPolygonsIndices.push(polygonIndices);\n }\n for (var i = 0, n = convexPolygons.length; i < n; i++) {\n polygonIndices = convexPolygonsIndices[i];\n if (polygonIndices.length == 0)\n continue;\n var firstIndex = polygonIndices[0];\n var lastIndex = polygonIndices[polygonIndices.length - 1];\n polygon = convexPolygons[i];\n var o = polygon.length - 4;\n var prevPrevX = polygon[o], prevPrevY = polygon[o + 1];\n var prevX = polygon[o + 2], prevY = polygon[o + 3];\n var firstX = polygon[0], firstY = polygon[1];\n var secondX = polygon[2], secondY = polygon[3];\n var winding = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, firstX, firstY);\n for (var ii = 0; ii < n; ii++) {\n if (ii == i)\n continue;\n var otherIndices = convexPolygonsIndices[ii];\n if (otherIndices.length != 3)\n continue;\n var otherFirstIndex = otherIndices[0];\n var otherSecondIndex = otherIndices[1];\n var otherLastIndex = otherIndices[2];\n var otherPoly = convexPolygons[ii];\n var x3 = otherPoly[otherPoly.length - 2], y3 = otherPoly[otherPoly.length - 1];\n if (otherFirstIndex != firstIndex || otherSecondIndex != lastIndex)\n continue;\n var winding1 = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, x3, y3);\n var winding2 = Triangulator.winding(x3, y3, firstX, firstY, secondX, secondY);\n if (winding1 == winding && winding2 == winding) {\n otherPoly.length = 0;\n otherIndices.length = 0;\n polygon.push(x3);\n polygon.push(y3);\n polygonIndices.push(otherLastIndex);\n prevPrevX = prevX;\n prevPrevY = prevY;\n prevX = x3;\n prevY = y3;\n ii = 0;\n }\n }\n }\n for (var i = convexPolygons.length - 1; i >= 0; i--) {\n polygon = convexPolygons[i];\n if (polygon.length == 0) {\n convexPolygons.splice(i, 1);\n this.polygonPool.free(polygon);\n polygonIndices = convexPolygonsIndices[i];\n convexPolygonsIndices.splice(i, 1);\n this.polygonIndicesPool.free(polygonIndices);\n }\n }\n return convexPolygons;\n };\n Triangulator.isConcave = function (index, vertexCount, vertices, indices) {\n var previous = indices[(vertexCount + index - 1) % vertexCount] << 1;\n var current = indices[index] << 1;\n var next = indices[(index + 1) % vertexCount] << 1;\n return !this.positiveArea(vertices[previous], vertices[previous + 1], vertices[current], vertices[current + 1], vertices[next], vertices[next + 1]);\n };\n Triangulator.positiveArea = function (p1x, p1y, p2x, p2y, p3x, p3y) {\n return p1x * (p3y - p2y) + p2x * (p1y - p3y) + p3x * (p2y - p1y) >= 0;\n };\n Triangulator.winding = function (p1x, p1y, p2x, p2y, p3x, p3y) {\n var px = p2x - p1x, py = p2y - p1y;\n return p3x * py - p3y * px + px * p1y - p1x * py >= 0 ? 1 : -1;\n };\n return Triangulator;\n }());\n spine.Triangulator = Triangulator;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var IntSet = (function () {\n function IntSet() {\n this.array = new Array();\n }\n IntSet.prototype.add = function (value) {\n var contains = this.contains(value);\n this.array[value | 0] = value | 0;\n return !contains;\n };\n IntSet.prototype.contains = function (value) {\n return this.array[value | 0] != undefined;\n };\n IntSet.prototype.remove = function (value) {\n this.array[value | 0] = undefined;\n };\n IntSet.prototype.clear = function () {\n this.array.length = 0;\n };\n return IntSet;\n }());\n spine.IntSet = IntSet;\n var Color = (function () {\n function Color(r, g, b, a) {\n if (r === void 0) { r = 0; }\n if (g === void 0) { g = 0; }\n if (b === void 0) { b = 0; }\n if (a === void 0) { a = 0; }\n this.r = r;\n this.g = g;\n this.b = b;\n this.a = a;\n }\n Color.prototype.set = function (r, g, b, a) {\n this.r = r;\n this.g = g;\n this.b = b;\n this.a = a;\n this.clamp();\n return this;\n };\n Color.prototype.setFromColor = function (c) {\n this.r = c.r;\n this.g = c.g;\n this.b = c.b;\n this.a = c.a;\n return this;\n };\n Color.prototype.setFromString = function (hex) {\n hex = hex.charAt(0) == '#' ? hex.substr(1) : hex;\n this.r = parseInt(hex.substr(0, 2), 16) / 255.0;\n this.g = parseInt(hex.substr(2, 2), 16) / 255.0;\n this.b = parseInt(hex.substr(4, 2), 16) / 255.0;\n this.a = (hex.length != 8 ? 255 : parseInt(hex.substr(6, 2), 16)) / 255.0;\n return this;\n };\n Color.prototype.add = function (r, g, b, a) {\n this.r += r;\n this.g += g;\n this.b += b;\n this.a += a;\n this.clamp();\n return this;\n };\n Color.prototype.clamp = function () {\n if (this.r < 0)\n this.r = 0;\n else if (this.r > 1)\n this.r = 1;\n if (this.g < 0)\n this.g = 0;\n else if (this.g > 1)\n this.g = 1;\n if (this.b < 0)\n this.b = 0;\n else if (this.b > 1)\n this.b = 1;\n if (this.a < 0)\n this.a = 0;\n else if (this.a > 1)\n this.a = 1;\n return this;\n };\n Color.rgba8888ToColor = function (color, value) {\n color.r = ((value & 0xff000000) >>> 24) / 255;\n color.g = ((value & 0x00ff0000) >>> 16) / 255;\n color.b = ((value & 0x0000ff00) >>> 8) / 255;\n color.a = ((value & 0x000000ff)) / 255;\n };\n Color.rgb888ToColor = function (color, value) {\n color.r = ((value & 0x00ff0000) >>> 16) / 255;\n color.g = ((value & 0x0000ff00) >>> 8) / 255;\n color.b = ((value & 0x000000ff)) / 255;\n };\n Color.WHITE = new Color(1, 1, 1, 1);\n Color.RED = new Color(1, 0, 0, 1);\n Color.GREEN = new Color(0, 1, 0, 1);\n Color.BLUE = new Color(0, 0, 1, 1);\n Color.MAGENTA = new Color(1, 0, 1, 1);\n return Color;\n }());\n spine.Color = Color;\n var MathUtils = (function () {\n function MathUtils() {\n }\n MathUtils.clamp = function (value, min, max) {\n if (value < min)\n return min;\n if (value > max)\n return max;\n return value;\n };\n MathUtils.cosDeg = function (degrees) {\n return Math.cos(degrees * MathUtils.degRad);\n };\n MathUtils.sinDeg = function (degrees) {\n return Math.sin(degrees * MathUtils.degRad);\n };\n MathUtils.signum = function (value) {\n return value > 0 ? 1 : value < 0 ? -1 : 0;\n };\n MathUtils.toInt = function (x) {\n return x > 0 ? Math.floor(x) : Math.ceil(x);\n };\n MathUtils.cbrt = function (x) {\n var y = Math.pow(Math.abs(x), 1 / 3);\n return x < 0 ? -y : y;\n };\n MathUtils.randomTriangular = function (min, max) {\n return MathUtils.randomTriangularWith(min, max, (min + max) * 0.5);\n };\n MathUtils.randomTriangularWith = function (min, max, mode) {\n var u = Math.random();\n var d = max - min;\n if (u <= (mode - min) / d)\n return min + Math.sqrt(u * d * (mode - min));\n return max - Math.sqrt((1 - u) * d * (max - mode));\n };\n MathUtils.PI = 3.1415927;\n MathUtils.PI2 = MathUtils.PI * 2;\n MathUtils.radiansToDegrees = 180 / MathUtils.PI;\n MathUtils.radDeg = MathUtils.radiansToDegrees;\n MathUtils.degreesToRadians = MathUtils.PI / 180;\n MathUtils.degRad = MathUtils.degreesToRadians;\n return MathUtils;\n }());\n spine.MathUtils = MathUtils;\n var Interpolation = (function () {\n function Interpolation() {\n }\n Interpolation.prototype.apply = function (start, end, a) {\n return start + (end - start) * this.applyInternal(a);\n };\n return Interpolation;\n }());\n spine.Interpolation = Interpolation;\n var Pow = (function (_super) {\n __extends(Pow, _super);\n function Pow(power) {\n var _this = _super.call(this) || this;\n _this.power = 2;\n _this.power = power;\n return _this;\n }\n Pow.prototype.applyInternal = function (a) {\n if (a <= 0.5)\n return Math.pow(a * 2, this.power) / 2;\n return Math.pow((a - 1) * 2, this.power) / (this.power % 2 == 0 ? -2 : 2) + 1;\n };\n return Pow;\n }(Interpolation));\n spine.Pow = Pow;\n var PowOut = (function (_super) {\n __extends(PowOut, _super);\n function PowOut(power) {\n return _super.call(this, power) || this;\n }\n PowOut.prototype.applyInternal = function (a) {\n return Math.pow(a - 1, this.power) * (this.power % 2 == 0 ? -1 : 1) + 1;\n };\n return PowOut;\n }(Pow));\n spine.PowOut = PowOut;\n var Utils = (function () {\n function Utils() {\n }\n Utils.arrayCopy = function (source, sourceStart, dest, destStart, numElements) {\n for (var i = sourceStart, j = destStart; i < sourceStart + numElements; i++, j++) {\n dest[j] = source[i];\n }\n };\n Utils.setArraySize = function (array, size, value) {\n if (value === void 0) { value = 0; }\n var oldSize = array.length;\n if (oldSize == size)\n return array;\n array.length = size;\n if (oldSize < size) {\n for (var i = oldSize; i < size; i++)\n array[i] = value;\n }\n return array;\n };\n Utils.ensureArrayCapacity = function (array, size, value) {\n if (value === void 0) { value = 0; }\n if (array.length >= size)\n return array;\n return Utils.setArraySize(array, size, value);\n };\n Utils.newArray = function (size, defaultValue) {\n var array = new Array(size);\n for (var i = 0; i < size; i++)\n array[i] = defaultValue;\n return array;\n };\n Utils.newFloatArray = function (size) {\n if (Utils.SUPPORTS_TYPED_ARRAYS) {\n return new Float32Array(size);\n }\n else {\n var array = new Array(size);\n for (var i = 0; i < array.length; i++)\n array[i] = 0;\n return array;\n }\n };\n Utils.newShortArray = function (size) {\n if (Utils.SUPPORTS_TYPED_ARRAYS) {\n return new Int16Array(size);\n }\n else {\n var array = new Array(size);\n for (var i = 0; i < array.length; i++)\n array[i] = 0;\n return array;\n }\n };\n Utils.toFloatArray = function (array) {\n return Utils.SUPPORTS_TYPED_ARRAYS ? new Float32Array(array) : array;\n };\n Utils.toSinglePrecision = function (value) {\n return Utils.SUPPORTS_TYPED_ARRAYS ? Math.fround(value) : value;\n };\n Utils.webkit602BugfixHelper = function (alpha, blend) {\n };\n Utils.contains = function (array, element, identity) {\n if (identity === void 0) { identity = true; }\n for (var i = 0; i < array.length; i++) {\n if (array[i] == element)\n return true;\n }\n return false;\n };\n Utils.SUPPORTS_TYPED_ARRAYS = typeof (Float32Array) !== \"undefined\";\n return Utils;\n }());\n spine.Utils = Utils;\n var DebugUtils = (function () {\n function DebugUtils() {\n }\n DebugUtils.logBones = function (skeleton) {\n for (var i = 0; i < skeleton.bones.length; i++) {\n var bone = skeleton.bones[i];\n console.log(bone.data.name + \", \" + bone.a + \", \" + bone.b + \", \" + bone.c + \", \" + bone.d + \", \" + bone.worldX + \", \" + bone.worldY);\n }\n };\n return DebugUtils;\n }());\n spine.DebugUtils = DebugUtils;\n var Pool = (function () {\n function Pool(instantiator) {\n this.items = new Array();\n this.instantiator = instantiator;\n }\n Pool.prototype.obtain = function () {\n return this.items.length > 0 ? this.items.pop() : this.instantiator();\n };\n Pool.prototype.free = function (item) {\n if (item.reset)\n item.reset();\n this.items.push(item);\n };\n Pool.prototype.freeAll = function (items) {\n for (var i = 0; i < items.length; i++) {\n if (items[i].reset)\n items[i].reset();\n this.items[i] = items[i];\n }\n };\n Pool.prototype.clear = function () {\n this.items.length = 0;\n };\n return Pool;\n }());\n spine.Pool = Pool;\n var Vector2 = (function () {\n function Vector2(x, y) {\n if (x === void 0) { x = 0; }\n if (y === void 0) { y = 0; }\n this.x = x;\n this.y = y;\n }\n Vector2.prototype.set = function (x, y) {\n this.x = x;\n this.y = y;\n return this;\n };\n Vector2.prototype.length = function () {\n var x = this.x;\n var y = this.y;\n return Math.sqrt(x * x + y * y);\n };\n Vector2.prototype.normalize = function () {\n var len = this.length();\n if (len != 0) {\n this.x /= len;\n this.y /= len;\n }\n return this;\n };\n return Vector2;\n }());\n spine.Vector2 = Vector2;\n var TimeKeeper = (function () {\n function TimeKeeper() {\n this.maxDelta = 0.064;\n this.framesPerSecond = 0;\n this.delta = 0;\n this.totalTime = 0;\n this.lastTime = Date.now() / 1000;\n this.frameCount = 0;\n this.frameTime = 0;\n }\n TimeKeeper.prototype.update = function () {\n var now = Date.now() / 1000;\n this.delta = now - this.lastTime;\n this.frameTime += this.delta;\n this.totalTime += this.delta;\n if (this.delta > this.maxDelta)\n this.delta = this.maxDelta;\n this.lastTime = now;\n this.frameCount++;\n if (this.frameTime > 1) {\n this.framesPerSecond = this.frameCount / this.frameTime;\n this.frameTime = 0;\n this.frameCount = 0;\n }\n };\n return TimeKeeper;\n }());\n spine.TimeKeeper = TimeKeeper;\n var WindowedMean = (function () {\n function WindowedMean(windowSize) {\n if (windowSize === void 0) { windowSize = 32; }\n this.addedValues = 0;\n this.lastValue = 0;\n this.mean = 0;\n this.dirty = true;\n this.values = new Array(windowSize);\n }\n WindowedMean.prototype.hasEnoughData = function () {\n return this.addedValues >= this.values.length;\n };\n WindowedMean.prototype.addValue = function (value) {\n if (this.addedValues < this.values.length)\n this.addedValues++;\n this.values[this.lastValue++] = value;\n if (this.lastValue > this.values.length - 1)\n this.lastValue = 0;\n this.dirty = true;\n };\n WindowedMean.prototype.getMean = function () {\n if (this.hasEnoughData()) {\n if (this.dirty) {\n var mean = 0;\n for (var i = 0; i < this.values.length; i++) {\n mean += this.values[i];\n }\n this.mean = mean / this.values.length;\n this.dirty = false;\n }\n return this.mean;\n }\n else {\n return 0;\n }\n };\n return WindowedMean;\n }());\n spine.WindowedMean = WindowedMean;\n})(spine || (spine = {}));\n(function () {\n if (!Math.fround) {\n Math.fround = (function (array) {\n return function (x) {\n return array[0] = x, array[0];\n };\n })(new Float32Array(1));\n }\n})();\nvar spine;\n(function (spine) {\n var Attachment = (function () {\n function Attachment(name) {\n if (name == null)\n throw new Error(\"name cannot be null.\");\n this.name = name;\n }\n return Attachment;\n }());\n spine.Attachment = Attachment;\n var VertexAttachment = (function (_super) {\n __extends(VertexAttachment, _super);\n function VertexAttachment(name) {\n var _this = _super.call(this, name) || this;\n _this.id = (VertexAttachment.nextID++ & 65535) << 11;\n _this.worldVerticesLength = 0;\n _this.deformAttachment = _this;\n return _this;\n }\n VertexAttachment.prototype.computeWorldVertices = function (slot, start, count, worldVertices, offset, stride) {\n count = offset + (count >> 1) * stride;\n var skeleton = slot.bone.skeleton;\n var deformArray = slot.deform;\n var vertices = this.vertices;\n var bones = this.bones;\n if (bones == null) {\n if (deformArray.length > 0)\n vertices = deformArray;\n var bone = slot.bone;\n var x = bone.worldX;\n var y = bone.worldY;\n var a = bone.a, b = bone.b, c = bone.c, d = bone.d;\n for (var v_1 = start, w = offset; w < count; v_1 += 2, w += stride) {\n var vx = vertices[v_1], vy = vertices[v_1 + 1];\n worldVertices[w] = vx * a + vy * b + x;\n worldVertices[w + 1] = vx * c + vy * d + y;\n }\n return;\n }\n var v = 0, skip = 0;\n for (var i = 0; i < start; i += 2) {\n var n = bones[v];\n v += n + 1;\n skip += n;\n }\n var skeletonBones = skeleton.bones;\n if (deformArray.length == 0) {\n for (var w = offset, b = skip * 3; w < count; w += stride) {\n var wx = 0, wy = 0;\n var n = bones[v++];\n n += v;\n for (; v < n; v++, b += 3) {\n var bone = skeletonBones[bones[v]];\n var vx = vertices[b], vy = vertices[b + 1], weight = vertices[b + 2];\n wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight;\n wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight;\n }\n worldVertices[w] = wx;\n worldVertices[w + 1] = wy;\n }\n }\n else {\n var deform = deformArray;\n for (var w = offset, b = skip * 3, f = skip << 1; w < count; w += stride) {\n var wx = 0, wy = 0;\n var n = bones[v++];\n n += v;\n for (; v < n; v++, b += 3, f += 2) {\n var bone = skeletonBones[bones[v]];\n var vx = vertices[b] + deform[f], vy = vertices[b + 1] + deform[f + 1], weight = vertices[b + 2];\n wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight;\n wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight;\n }\n worldVertices[w] = wx;\n worldVertices[w + 1] = wy;\n }\n }\n };\n VertexAttachment.prototype.copyTo = function (attachment) {\n if (this.bones != null) {\n attachment.bones = new Array(this.bones.length);\n spine.Utils.arrayCopy(this.bones, 0, attachment.bones, 0, this.bones.length);\n }\n else\n attachment.bones = null;\n if (this.vertices != null) {\n attachment.vertices = spine.Utils.newFloatArray(this.vertices.length);\n spine.Utils.arrayCopy(this.vertices, 0, attachment.vertices, 0, this.vertices.length);\n }\n else\n attachment.vertices = null;\n attachment.worldVerticesLength = this.worldVerticesLength;\n attachment.deformAttachment = this.deformAttachment;\n };\n VertexAttachment.nextID = 0;\n return VertexAttachment;\n }(Attachment));\n spine.VertexAttachment = VertexAttachment;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var AttachmentType;\n (function (AttachmentType) {\n AttachmentType[AttachmentType[\"Region\"] = 0] = \"Region\";\n AttachmentType[AttachmentType[\"BoundingBox\"] = 1] = \"BoundingBox\";\n AttachmentType[AttachmentType[\"Mesh\"] = 2] = \"Mesh\";\n AttachmentType[AttachmentType[\"LinkedMesh\"] = 3] = \"LinkedMesh\";\n AttachmentType[AttachmentType[\"Path\"] = 4] = \"Path\";\n AttachmentType[AttachmentType[\"Point\"] = 5] = \"Point\";\n AttachmentType[AttachmentType[\"Clipping\"] = 6] = \"Clipping\";\n })(AttachmentType = spine.AttachmentType || (spine.AttachmentType = {}));\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var BoundingBoxAttachment = (function (_super) {\n __extends(BoundingBoxAttachment, _super);\n function BoundingBoxAttachment(name) {\n var _this = _super.call(this, name) || this;\n _this.color = new spine.Color(1, 1, 1, 1);\n return _this;\n }\n BoundingBoxAttachment.prototype.copy = function () {\n var copy = new BoundingBoxAttachment(name);\n this.copyTo(copy);\n copy.color.setFromColor(this.color);\n return copy;\n };\n return BoundingBoxAttachment;\n }(spine.VertexAttachment));\n spine.BoundingBoxAttachment = BoundingBoxAttachment;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var ClippingAttachment = (function (_super) {\n __extends(ClippingAttachment, _super);\n function ClippingAttachment(name) {\n var _this = _super.call(this, name) || this;\n _this.color = new spine.Color(0.2275, 0.2275, 0.8078, 1);\n return _this;\n }\n ClippingAttachment.prototype.copy = function () {\n var copy = new ClippingAttachment(name);\n this.copyTo(copy);\n copy.endSlot = this.endSlot;\n copy.color.setFromColor(this.color);\n return copy;\n };\n return ClippingAttachment;\n }(spine.VertexAttachment));\n spine.ClippingAttachment = ClippingAttachment;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var MeshAttachment = (function (_super) {\n __extends(MeshAttachment, _super);\n function MeshAttachment(name) {\n var _this = _super.call(this, name) || this;\n _this.color = new spine.Color(1, 1, 1, 1);\n _this.tempColor = new spine.Color(0, 0, 0, 0);\n return _this;\n }\n MeshAttachment.prototype.updateUVs = function () {\n var regionUVs = this.regionUVs;\n if (this.uvs == null || this.uvs.length != regionUVs.length)\n this.uvs = spine.Utils.newFloatArray(regionUVs.length);\n var uvs = this.uvs;\n var n = this.uvs.length;\n var u = this.region.u, v = this.region.v, width = 0, height = 0;\n if (this.region instanceof spine.TextureAtlasRegion) {\n var region = this.region;\n var textureWidth = region.texture.getImage().width, textureHeight = region.texture.getImage().height;\n switch (region.degrees) {\n case 90:\n u -= (region.originalHeight - region.offsetY - region.height) / textureWidth;\n v -= (region.originalWidth - region.offsetX - region.width) / textureHeight;\n width = region.originalHeight / textureWidth;\n height = region.originalWidth / textureHeight;\n for (var i = 0; i < n; i += 2) {\n uvs[i] = u + regionUVs[i + 1] * width;\n uvs[i + 1] = v + (1 - regionUVs[i]) * height;\n }\n return;\n case 180:\n u -= (region.originalWidth - region.offsetX - region.width) / textureWidth;\n v -= region.offsetY / textureHeight;\n width = region.originalWidth / textureWidth;\n height = region.originalHeight / textureHeight;\n for (var i = 0; i < n; i += 2) {\n uvs[i] = u + (1 - regionUVs[i]) * width;\n uvs[i + 1] = v + (1 - regionUVs[i + 1]) * height;\n }\n return;\n case 270:\n u -= region.offsetY / textureWidth;\n v -= region.offsetX / textureHeight;\n width = region.originalHeight / textureWidth;\n height = region.originalWidth / textureHeight;\n for (var i = 0; i < n; i += 2) {\n uvs[i] = u + (1 - regionUVs[i + 1]) * width;\n uvs[i + 1] = v + regionUVs[i] * height;\n }\n return;\n }\n u -= region.offsetX / textureWidth;\n v -= (region.originalHeight - region.offsetY - region.height) / textureHeight;\n width = region.originalWidth / textureWidth;\n height = region.originalHeight / textureHeight;\n }\n else if (this.region == null) {\n u = v = 0;\n width = height = 1;\n }\n else {\n width = this.region.u2 - u;\n height = this.region.v2 - v;\n }\n for (var i = 0; i < n; i += 2) {\n uvs[i] = u + regionUVs[i] * width;\n uvs[i + 1] = v + regionUVs[i + 1] * height;\n }\n };\n MeshAttachment.prototype.getParentMesh = function () {\n return this.parentMesh;\n };\n MeshAttachment.prototype.setParentMesh = function (parentMesh) {\n this.parentMesh = parentMesh;\n if (parentMesh != null) {\n this.bones = parentMesh.bones;\n this.vertices = parentMesh.vertices;\n this.worldVerticesLength = parentMesh.worldVerticesLength;\n this.regionUVs = parentMesh.regionUVs;\n this.triangles = parentMesh.triangles;\n this.hullLength = parentMesh.hullLength;\n this.worldVerticesLength = parentMesh.worldVerticesLength;\n }\n };\n MeshAttachment.prototype.copy = function () {\n if (this.parentMesh != null)\n return this.newLinkedMesh();\n var copy = new MeshAttachment(this.name);\n copy.region = this.region;\n copy.path = this.path;\n copy.color.setFromColor(this.color);\n this.copyTo(copy);\n copy.regionUVs = new Array(this.regionUVs.length);\n spine.Utils.arrayCopy(this.regionUVs, 0, copy.regionUVs, 0, this.regionUVs.length);\n copy.uvs = new Array(this.uvs.length);\n spine.Utils.arrayCopy(this.uvs, 0, copy.uvs, 0, this.uvs.length);\n copy.triangles = new Array(this.triangles.length);\n spine.Utils.arrayCopy(this.triangles, 0, copy.triangles, 0, this.triangles.length);\n copy.hullLength = this.hullLength;\n if (this.edges != null) {\n copy.edges = new Array(this.edges.length);\n spine.Utils.arrayCopy(this.edges, 0, copy.edges, 0, this.edges.length);\n }\n copy.width = this.width;\n copy.height = this.height;\n return copy;\n };\n MeshAttachment.prototype.newLinkedMesh = function () {\n var copy = new MeshAttachment(this.name);\n copy.region = this.region;\n copy.path = this.path;\n copy.color.setFromColor(this.color);\n copy.deformAttachment = this.deformAttachment;\n copy.setParentMesh(this.parentMesh != null ? this.parentMesh : this);\n copy.updateUVs();\n return copy;\n };\n return MeshAttachment;\n }(spine.VertexAttachment));\n spine.MeshAttachment = MeshAttachment;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var PathAttachment = (function (_super) {\n __extends(PathAttachment, _super);\n function PathAttachment(name) {\n var _this = _super.call(this, name) || this;\n _this.closed = false;\n _this.constantSpeed = false;\n _this.color = new spine.Color(1, 1, 1, 1);\n return _this;\n }\n PathAttachment.prototype.copy = function () {\n var copy = new PathAttachment(name);\n this.copyTo(copy);\n copy.lengths = new Array(this.lengths.length);\n spine.Utils.arrayCopy(this.lengths, 0, copy.lengths, 0, this.lengths.length);\n copy.closed = closed;\n copy.constantSpeed = this.constantSpeed;\n copy.color.setFromColor(this.color);\n return copy;\n };\n return PathAttachment;\n }(spine.VertexAttachment));\n spine.PathAttachment = PathAttachment;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var PointAttachment = (function (_super) {\n __extends(PointAttachment, _super);\n function PointAttachment(name) {\n var _this = _super.call(this, name) || this;\n _this.color = new spine.Color(0.38, 0.94, 0, 1);\n return _this;\n }\n PointAttachment.prototype.computeWorldPosition = function (bone, point) {\n point.x = this.x * bone.a + this.y * bone.b + bone.worldX;\n point.y = this.x * bone.c + this.y * bone.d + bone.worldY;\n return point;\n };\n PointAttachment.prototype.computeWorldRotation = function (bone) {\n var cos = spine.MathUtils.cosDeg(this.rotation), sin = spine.MathUtils.sinDeg(this.rotation);\n var x = cos * bone.a + sin * bone.b;\n var y = cos * bone.c + sin * bone.d;\n return Math.atan2(y, x) * spine.MathUtils.radDeg;\n };\n PointAttachment.prototype.copy = function () {\n var copy = new PointAttachment(name);\n copy.x = this.x;\n copy.y = this.y;\n copy.rotation = this.rotation;\n copy.color.setFromColor(this.color);\n return copy;\n };\n return PointAttachment;\n }(spine.VertexAttachment));\n spine.PointAttachment = PointAttachment;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var RegionAttachment = (function (_super) {\n __extends(RegionAttachment, _super);\n function RegionAttachment(name) {\n var _this = _super.call(this, name) || this;\n _this.x = 0;\n _this.y = 0;\n _this.scaleX = 1;\n _this.scaleY = 1;\n _this.rotation = 0;\n _this.width = 0;\n _this.height = 0;\n _this.color = new spine.Color(1, 1, 1, 1);\n _this.offset = spine.Utils.newFloatArray(8);\n _this.uvs = spine.Utils.newFloatArray(8);\n _this.tempColor = new spine.Color(1, 1, 1, 1);\n return _this;\n }\n RegionAttachment.prototype.updateOffset = function () {\n var regionScaleX = this.width / this.region.originalWidth * this.scaleX;\n var regionScaleY = this.height / this.region.originalHeight * this.scaleY;\n var localX = -this.width / 2 * this.scaleX + this.region.offsetX * regionScaleX;\n var localY = -this.height / 2 * this.scaleY + this.region.offsetY * regionScaleY;\n var localX2 = localX + this.region.width * regionScaleX;\n var localY2 = localY + this.region.height * regionScaleY;\n var radians = this.rotation * Math.PI / 180;\n var cos = Math.cos(radians);\n var sin = Math.sin(radians);\n var localXCos = localX * cos + this.x;\n var localXSin = localX * sin;\n var localYCos = localY * cos + this.y;\n var localYSin = localY * sin;\n var localX2Cos = localX2 * cos + this.x;\n var localX2Sin = localX2 * sin;\n var localY2Cos = localY2 * cos + this.y;\n var localY2Sin = localY2 * sin;\n var offset = this.offset;\n offset[RegionAttachment.OX1] = localXCos - localYSin;\n offset[RegionAttachment.OY1] = localYCos + localXSin;\n offset[RegionAttachment.OX2] = localXCos - localY2Sin;\n offset[RegionAttachment.OY2] = localY2Cos + localXSin;\n offset[RegionAttachment.OX3] = localX2Cos - localY2Sin;\n offset[RegionAttachment.OY3] = localY2Cos + localX2Sin;\n offset[RegionAttachment.OX4] = localX2Cos - localYSin;\n offset[RegionAttachment.OY4] = localYCos + localX2Sin;\n };\n RegionAttachment.prototype.setRegion = function (region) {\n this.region = region;\n var uvs = this.uvs;\n if (region.degrees === 90) {\n uvs[2] = region.u;\n uvs[3] = region.v2;\n uvs[4] = region.u;\n uvs[5] = region.v;\n uvs[6] = region.u2;\n uvs[7] = region.v;\n uvs[0] = region.u2;\n uvs[1] = region.v2;\n } else if (region.degrees === 270) {\n uvs[6] = region.u;\n uvs[7] = region.v2;\n uvs[0] = region.u;\n uvs[1] = region.v;\n uvs[2] = region.u2;\n uvs[3] = region.v;\n uvs[4] = region.u2;\n uvs[5] = region.v2;\n } else {\n uvs[0] = region.u;\n uvs[1] = region.v2;\n uvs[2] = region.u;\n uvs[3] = region.v;\n uvs[4] = region.u2;\n uvs[5] = region.v;\n uvs[6] = region.u2;\n uvs[7] = region.v2;\n }\n };\n RegionAttachment.prototype.computeWorldVertices = function (bone, worldVertices, offset, stride) {\n var vertexOffset = this.offset;\n var x = bone.worldX, y = bone.worldY;\n var a = bone.a, b = bone.b, c = bone.c, d = bone.d;\n var offsetX = 0, offsetY = 0;\n offsetX = vertexOffset[RegionAttachment.OX1];\n offsetY = vertexOffset[RegionAttachment.OY1];\n worldVertices[offset] = offsetX * a + offsetY * b + x;\n worldVertices[offset + 1] = offsetX * c + offsetY * d + y;\n offset += stride;\n offsetX = vertexOffset[RegionAttachment.OX2];\n offsetY = vertexOffset[RegionAttachment.OY2];\n worldVertices[offset] = offsetX * a + offsetY * b + x;\n worldVertices[offset + 1] = offsetX * c + offsetY * d + y;\n offset += stride;\n offsetX = vertexOffset[RegionAttachment.OX3];\n offsetY = vertexOffset[RegionAttachment.OY3];\n worldVertices[offset] = offsetX * a + offsetY * b + x;\n worldVertices[offset + 1] = offsetX * c + offsetY * d + y;\n offset += stride;\n offsetX = vertexOffset[RegionAttachment.OX4];\n offsetY = vertexOffset[RegionAttachment.OY4];\n worldVertices[offset] = offsetX * a + offsetY * b + x;\n worldVertices[offset + 1] = offsetX * c + offsetY * d + y;\n };\n RegionAttachment.prototype.copy = function () {\n var copy = new RegionAttachment(name);\n copy.region = this.region;\n copy.rendererObject = this.rendererObject;\n copy.path = this.path;\n copy.x = this.x;\n copy.y = this.y;\n copy.scaleX = this.scaleX;\n copy.scaleY = this.scaleY;\n copy.rotation = this.rotation;\n copy.width = this.width;\n copy.height = this.height;\n spine.Utils.arrayCopy(this.uvs, 0, copy.uvs, 0, 8);\n spine.Utils.arrayCopy(this.offset, 0, copy.offset, 0, 8);\n copy.color.setFromColor(this.color);\n return copy;\n };\n RegionAttachment.OX1 = 0;\n RegionAttachment.OY1 = 1;\n RegionAttachment.OX2 = 2;\n RegionAttachment.OY2 = 3;\n RegionAttachment.OX3 = 4;\n RegionAttachment.OY3 = 5;\n RegionAttachment.OX4 = 6;\n RegionAttachment.OY4 = 7;\n RegionAttachment.X1 = 0;\n RegionAttachment.Y1 = 1;\n RegionAttachment.C1R = 2;\n RegionAttachment.C1G = 3;\n RegionAttachment.C1B = 4;\n RegionAttachment.C1A = 5;\n RegionAttachment.U1 = 6;\n RegionAttachment.V1 = 7;\n RegionAttachment.X2 = 8;\n RegionAttachment.Y2 = 9;\n RegionAttachment.C2R = 10;\n RegionAttachment.C2G = 11;\n RegionAttachment.C2B = 12;\n RegionAttachment.C2A = 13;\n RegionAttachment.U2 = 14;\n RegionAttachment.V2 = 15;\n RegionAttachment.X3 = 16;\n RegionAttachment.Y3 = 17;\n RegionAttachment.C3R = 18;\n RegionAttachment.C3G = 19;\n RegionAttachment.C3B = 20;\n RegionAttachment.C3A = 21;\n RegionAttachment.U3 = 22;\n RegionAttachment.V3 = 23;\n RegionAttachment.X4 = 24;\n RegionAttachment.Y4 = 25;\n RegionAttachment.C4R = 26;\n RegionAttachment.C4G = 27;\n RegionAttachment.C4B = 28;\n RegionAttachment.C4A = 29;\n RegionAttachment.U4 = 30;\n RegionAttachment.V4 = 31;\n return RegionAttachment;\n }(spine.Attachment));\n spine.RegionAttachment = RegionAttachment;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var JitterEffect = (function () {\n function JitterEffect(jitterX, jitterY) {\n this.jitterX = 0;\n this.jitterY = 0;\n this.jitterX = jitterX;\n this.jitterY = jitterY;\n }\n JitterEffect.prototype.begin = function (skeleton) {\n };\n JitterEffect.prototype.transform = function (position, uv, light, dark) {\n position.x += spine.MathUtils.randomTriangular(-this.jitterX, this.jitterY);\n position.y += spine.MathUtils.randomTriangular(-this.jitterX, this.jitterY);\n };\n JitterEffect.prototype.end = function () {\n };\n return JitterEffect;\n }());\n spine.JitterEffect = JitterEffect;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var SwirlEffect = (function () {\n function SwirlEffect(radius, interpolation) {\n this.centerX = 0;\n this.centerY = 0;\n this.radius = 0;\n this.angle = 0;\n this.worldX = 0;\n this.worldY = 0;\n this.radius = radius;\n this.interpolation = interpolation;\n }\n SwirlEffect.prototype.begin = function (skeleton) {\n this.worldX = skeleton.x + this.centerX;\n this.worldY = skeleton.y + this.centerY;\n };\n SwirlEffect.prototype.transform = function (position, uv, light, dark) {\n var radAngle = this.angle * spine.MathUtils.degreesToRadians;\n var x = position.x - this.worldX;\n var y = position.y - this.worldY;\n var dist = Math.sqrt(x * x + y * y);\n if (dist < this.radius) {\n var theta = this.interpolation.apply(0, radAngle, (this.radius - dist) / this.radius);\n var cos = Math.cos(theta);\n var sin = Math.sin(theta);\n position.x = cos * x - sin * y + this.worldX;\n position.y = sin * x + cos * y + this.worldY;\n }\n };\n SwirlEffect.prototype.end = function () {\n };\n SwirlEffect.interpolation = new spine.PowOut(2);\n return SwirlEffect;\n }());\n spine.SwirlEffect = SwirlEffect;\n})(spine || (spine = {}));\n//# sourceMappingURL=spine-core.js.map\n\nmodule.exports = spine;\n","/****************************************************************************\n Copyright (c) 2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nconst TrackEntryListeners = require('./track-entry-listeners');\nconst spine = require('./lib/spine');\n// Permit max cache time, unit is second.\nconst MaxCacheTime = 30;\nconst FrameTime = 1 / 60;\n\nlet _vertices = [];\nlet _indices = [];\nlet _boneInfoOffset = 0;\nlet _vertexOffset = 0;\nlet _indexOffset = 0;\nlet _vfOffset = 0;\nlet _preTexUrl = null;\nlet _preBlendMode = null;\nlet _segVCount = 0;\nlet _segICount = 0;\nlet _segOffset = 0;\nlet _colorOffset = 0;\nlet _preFinalColor = null;\nlet _preDarkColor = null;\n// x y u v c1 c2\nlet _perVertexSize = 6;\n// x y u v r1 g1 b1 a1 r2 g2 b2 a2\nlet _perClipVertexSize = 12;\nlet _vfCount = 0, _indexCount = 0;\nlet _tempr, _tempg, _tempb, _tempa;\nlet _finalColor32, _darkColor32;\nlet _finalColor = new spine.Color(1, 1, 1, 1);\nlet _darkColor = new spine.Color(1, 1, 1, 1);\nlet _quadTriangles = [0, 1, 2, 2, 3, 0];\n\n//Cache all frames in an animation\nlet AnimationCache = cc.Class({\n ctor () {\n this._privateMode = false;\n this._inited = false;\n this._invalid = true;\n this._enableCacheAttachedInfo = false;\n this.frames = [];\n this.totalTime = 0;\n this._frameIdx = -1;\n this.isCompleted = false;\n\n this._skeletonInfo = null;\n this._animationName = null;\n this._tempSegments = null;\n this._tempColors = null;\n this._tempBoneInfos = null;\n },\n\n init (skeletonInfo, animationName) {\n this._inited = true;\n this._animationName = animationName;\n this._skeletonInfo = skeletonInfo;\n },\n\n // Clear texture quote.\n clear () {\n this._inited = false;\n for (let i = 0, n = this.frames.length; i < n; i++) {\n let frame = this.frames[i];\n frame.segments.length = 0;\n }\n this.invalidAllFrame();\n },\n\n bind (listener) {\n let completeHandle = function (entry) {\n if (entry && entry.animation.name === this._animationName) {\n this.isCompleted = true;\n }\n }.bind(this);\n\n listener.complete = completeHandle;\n },\n\n unbind (listener) {\n listener.complete = null;\n },\n\n begin () {\n if (!this._invalid) return;\n\n let skeletonInfo = this._skeletonInfo;\n let preAnimationCache = skeletonInfo.curAnimationCache;\n \n if (preAnimationCache && preAnimationCache !== this) {\n if (this._privateMode) {\n // Private cache mode just invalid pre animation frame.\n preAnimationCache.invalidAllFrame();\n } else {\n // If pre animation not finished, play it to the end.\n preAnimationCache.updateToFrame();\n }\n }\n\n let skeleton = skeletonInfo.skeleton;\n let listener = skeletonInfo.listener;\n let state = skeletonInfo.state;\n\n let animation = skeleton.data.findAnimation(this._animationName);\n state.setAnimationWith(0, animation, false);\n this.bind(listener);\n\n // record cur animation cache\n skeletonInfo.curAnimationCache = this;\n this._frameIdx = -1;\n this.isCompleted = false;\n this.totalTime = 0;\n this._invalid = false;\n },\n\n end () {\n if (!this._needToUpdate()) {\n // clear cur animation cache\n this._skeletonInfo.curAnimationCache = null;\n this.frames.length = this._frameIdx + 1;\n this.isCompleted = true;\n this.unbind(this._skeletonInfo.listener);\n }\n },\n\n _needToUpdate (toFrameIdx) {\n return !this.isCompleted && \n this.totalTime < MaxCacheTime && \n (toFrameIdx == undefined || this._frameIdx < toFrameIdx);\n },\n\n updateToFrame (toFrameIdx) {\n if (!this._inited) return;\n\n this.begin();\n\n if (!this._needToUpdate(toFrameIdx)) return;\n\n let skeletonInfo = this._skeletonInfo;\n let skeleton = skeletonInfo.skeleton;\n let clipper = skeletonInfo.clipper;\n let state = skeletonInfo.state;\n\n do {\n // Solid update frame rate 1/60.\n skeleton.update(FrameTime);\n state.update(FrameTime);\n state.apply(skeleton);\n skeleton.updateWorldTransform();\n this._frameIdx++;\n this._updateFrame(skeleton, clipper, this._frameIdx);\n this.totalTime += FrameTime;\n } while (this._needToUpdate(toFrameIdx));\n\n this.end();\n },\n\n isInited () {\n return this._inited;\n },\n\n isInvalid () {\n return this._invalid;\n },\n\n invalidAllFrame () {\n this.isCompleted = false;\n this._invalid = true;\n },\n\n updateAllFrame () {\n this.invalidAllFrame();\n this.updateToFrame();\n },\n\n enableCacheAttachedInfo () {\n if (!this._enableCacheAttachedInfo) {\n this._enableCacheAttachedInfo = true;\n this.invalidAllFrame();\n }\n },\n\n _updateFrame (skeleton, clipper, index) {\n _vfOffset = 0;\n _boneInfoOffset = 0;\n _indexOffset = 0;\n _vertexOffset = 0;\n _preTexUrl = null;\n _preBlendMode = null;\n _segVCount = 0;\n _segICount = 0;\n _segOffset = 0;\n _colorOffset = 0;\n _preFinalColor = null;\n _preDarkColor = null;\n\n this.frames[index] = this.frames[index] || {\n segments : [],\n colors : [],\n boneInfos : [],\n vertices : null,\n uintVert : null,\n indices : null,\n };\n let frame = this.frames[index];\n\n let segments = this._tempSegments = frame.segments;\n let colors = this._tempColors = frame.colors;\n let boneInfos = this._tempBoneInfos = frame.boneInfos;\n this._traverseSkeleton(skeleton, clipper);\n if (_colorOffset > 0) {\n colors[_colorOffset - 1].vfOffset = _vfOffset;\n }\n colors.length = _colorOffset;\n boneInfos.length = _boneInfoOffset;\n // Handle pre segment.\n let preSegOffset = _segOffset - 1;\n if (preSegOffset >= 0) {\n // Judge segment vertex count is not empty.\n if (_segICount > 0) {\n let preSegInfo = segments[preSegOffset];\n preSegInfo.indexCount = _segICount;\n preSegInfo.vfCount = _segVCount * _perVertexSize;\n preSegInfo.vertexCount = _segVCount;\n segments.length = _segOffset;\n } else {\n // Discard pre segment.\n segments.length = _segOffset - 1;\n }\n }\n\n // Segments is empty,discard all segments.\n if (segments.length == 0) return;\n\n // Fill vertices\n let vertices = frame.vertices;\n let uintVert = frame.uintVert;\n if (!vertices || vertices.length < _vfOffset) {\n vertices = frame.vertices = new Float32Array(_vfOffset);\n uintVert = frame.uintVert = new Uint32Array(vertices.buffer);\n }\n for (let i = 0, j = 0; i < _vfOffset;) {\n vertices[i++] = _vertices[j++]; // x\n vertices[i++] = _vertices[j++]; // y\n vertices[i++] = _vertices[j++]; // u\n vertices[i++] = _vertices[j++]; // v\n uintVert[i++] = _vertices[j++]; // color1\n uintVert[i++] = _vertices[j++]; // color2\n }\n\n // Fill indices\n let indices = frame.indices;\n if (!indices || indices.length < _indexOffset) {\n indices = frame.indices = new Uint16Array(_indexOffset);\n }\n\n for (let i = 0; i < _indexOffset; i++) {\n indices[i] = _indices[i];\n }\n\n frame.vertices = vertices;\n frame.uintVert = uintVert;\n frame.indices = indices;\n },\n\n fillVertices (skeletonColor, attachmentColor, slotColor, clipper, slot) {\n\n _tempa = slotColor.a * attachmentColor.a * skeletonColor.a * 255;\n _tempr = attachmentColor.r * skeletonColor.r * 255;\n _tempg = attachmentColor.g * skeletonColor.g * 255;\n _tempb = attachmentColor.b * skeletonColor.b * 255;\n \n _finalColor.r = _tempr * slotColor.r;\n _finalColor.g = _tempg * slotColor.g;\n _finalColor.b = _tempb * slotColor.b;\n _finalColor.a = _tempa;\n\n if (slot.darkColor == null) {\n _darkColor.set(0.0, 0, 0, 1.0);\n } else {\n _darkColor.r = slot.darkColor.r * _tempr;\n _darkColor.g = slot.darkColor.g * _tempg;\n _darkColor.b = slot.darkColor.b * _tempb;\n }\n _darkColor.a = 0;\n\n _finalColor32 = ((_finalColor.a<<24) >>> 0) + (_finalColor.b<<16) + (_finalColor.g<<8) + _finalColor.r;\n _darkColor32 = ((_darkColor.a<<24) >>> 0) + (_darkColor.b<<16) + (_darkColor.g<<8) + _darkColor.r;\n\n if (_preFinalColor !== _finalColor32 || _preDarkColor !== _darkColor32) {\n let colors = this._tempColors;\n _preFinalColor = _finalColor32;\n _preDarkColor = _darkColor32;\n if (_colorOffset > 0) {\n colors[_colorOffset - 1].vfOffset = _vfOffset;\n }\n colors[_colorOffset++] = {\n fr : _finalColor.r,\n fg : _finalColor.g,\n fb : _finalColor.b,\n fa : _finalColor.a,\n dr : _darkColor.r,\n dg : _darkColor.g,\n db : _darkColor.b,\n da : _darkColor.a,\n vfOffset : 0\n }\n }\n\n if (!clipper.isClipping()) {\n \n for (let v = _vfOffset, n = _vfOffset + _vfCount; v < n; v += _perVertexSize) {\n _vertices[v + 4] = _finalColor32; // light color\n _vertices[v + 5] = _darkColor32; // dark color\n }\n \n } else {\n clipper.clipTriangles(_vertices, _vfCount, _indices, _indexCount, _vertices, _finalColor, _darkColor, true, _perVertexSize, _indexOffset, _vfOffset, _vfOffset + 2);\n let clippedVertices = clipper.clippedVertices;\n let clippedTriangles = clipper.clippedTriangles;\n \n // insure capacity\n _indexCount = clippedTriangles.length;\n _vfCount = clippedVertices.length / _perClipVertexSize * _perVertexSize;\n\n // fill indices\n for (let ii = 0, jj = _indexOffset, nn = clippedTriangles.length; ii < nn;) {\n _indices[jj++] = clippedTriangles[ii++];\n }\n\n // fill vertices contain x y u v light color dark color\n for (let v = 0, n = clippedVertices.length, offset = _vfOffset; v < n; v += 12, offset += _perVertexSize) {\n _vertices[offset] = clippedVertices[v]; // x\n _vertices[offset + 1] = clippedVertices[v + 1]; // y\n _vertices[offset + 2] = clippedVertices[v + 6]; // u\n _vertices[offset + 3] = clippedVertices[v + 7]; // v\n\n _vertices[offset + 4] = _finalColor32;\n _vertices[offset + 5] = _darkColor32;\n }\n }\n },\n\n _traverseSkeleton (skeleton, clipper) {\n let segments = this._tempSegments;\n let boneInfos = this._tempBoneInfos;\n let skeletonColor = skeleton.color;\n let attachment, attachmentColor, slotColor, uvs, triangles;\n let isRegion, isMesh, isClip;\n let texture;\n let preSegOffset, preSegInfo;\n let blendMode;\n let slot;\n\n let bones = skeleton.bones;\n if (this._enableCacheAttachedInfo) {\n for (let i = 0, l = bones.length; i < l; i++, _boneInfoOffset++) {\n let bone = bones[i];\n let boneInfo = boneInfos[_boneInfoOffset];\n if (!boneInfo) {\n boneInfo = boneInfos[_boneInfoOffset] = {};\n }\n boneInfo.a = bone.a;\n boneInfo.b = bone.b;\n boneInfo.c = bone.c;\n boneInfo.d = bone.d;\n boneInfo.worldX = bone.worldX;\n boneInfo.worldY = bone.worldY;\n }\n }\n\n for (let slotIdx = 0, slotCount = skeleton.drawOrder.length; slotIdx < slotCount; slotIdx++) {\n slot = skeleton.drawOrder[slotIdx];\n \n _vfCount = 0;\n _indexCount = 0;\n\n attachment = slot.getAttachment();\n if (!attachment) {\n clipper.clipEndWithSlot(slot);\n continue;\n }\n\n isRegion = attachment instanceof spine.RegionAttachment;\n isMesh = attachment instanceof spine.MeshAttachment;\n isClip = attachment instanceof spine.ClippingAttachment;\n\n if (isClip) {\n clipper.clipStart(slot, attachment);\n continue;\n }\n\n if (!isRegion && !isMesh) {\n clipper.clipEndWithSlot(slot);\n continue;\n }\n\n texture = attachment.region.texture._texture;\n if (!texture) {\n clipper.clipEndWithSlot(slot);\n continue;\n }\n \n blendMode = slot.data.blendMode;\n if (_preTexUrl !== texture.nativeUrl || _preBlendMode !== blendMode) {\n _preTexUrl = texture.nativeUrl;\n _preBlendMode = blendMode;\n // Handle pre segment.\n preSegOffset = _segOffset - 1;\n if (preSegOffset >= 0) {\n if (_segICount > 0) {\n preSegInfo = segments[preSegOffset];\n preSegInfo.indexCount = _segICount;\n preSegInfo.vertexCount = _segVCount;\n preSegInfo.vfCount = _segVCount * _perVertexSize;\n } else {\n // Discard pre segment.\n _segOffset--;\n }\n }\n // Handle now segment.\n segments[_segOffset] = {\n tex : texture,\n blendMode : blendMode,\n indexCount : 0,\n vertexCount : 0,\n vfCount : 0\n };\n _segOffset++;\n _segICount = 0;\n _segVCount = 0;\n }\n\n if (isRegion) {\n \n triangles = _quadTriangles;\n \n // insure capacity\n _vfCount = 4 * _perVertexSize;\n _indexCount = 6;\n \n // compute vertex and fill x y\n attachment.computeWorldVertices(slot.bone, _vertices, _vfOffset, _perVertexSize);\n }\n else if (isMesh) {\n \n triangles = attachment.triangles;\n \n // insure capacity\n _vfCount = (attachment.worldVerticesLength >> 1) * _perVertexSize;\n _indexCount = triangles.length;\n \n // compute vertex and fill x y\n attachment.computeWorldVertices(slot, 0, attachment.worldVerticesLength, _vertices, _vfOffset, _perVertexSize);\n }\n \n if (_vfCount == 0 || _indexCount == 0) {\n clipper.clipEndWithSlot(slot);\n continue;\n }\n \n // fill indices\n for (let ii = 0, jj = _indexOffset, nn = triangles.length; ii < nn;) {\n _indices[jj++] = triangles[ii++];\n }\n\n // fill u v\n uvs = attachment.uvs;\n for (let v = _vfOffset, n = _vfOffset + _vfCount, u = 0; v < n; v += _perVertexSize, u += 2) {\n _vertices[v + 2] = uvs[u]; // u\n _vertices[v + 3] = uvs[u + 1]; // v\n }\n\n attachmentColor = attachment.color;\n slotColor = slot.color;\n\n this.fillVertices(skeletonColor, attachmentColor, slotColor, clipper, slot);\n \n if (_indexCount > 0) {\n for (let ii = _indexOffset, nn = _indexOffset + _indexCount; ii < nn; ii++) {\n _indices[ii] += _segVCount;\n }\n _indexOffset += _indexCount;\n _vfOffset += _vfCount;\n _vertexOffset = _vfOffset / _perVertexSize;\n _segICount += _indexCount;\n _segVCount += _vfCount / _perVertexSize;\n }\n \n clipper.clipEndWithSlot(slot);\n }\n \n clipper.clipEnd();\n }\n});\n\nlet SkeletonCache = cc.Class({\n ctor () {\n this._privateMode = false;\n this._animationPool = {};\n this._skeletonCache = {};\n },\n\n enablePrivateMode () {\n this._privateMode = true;\n },\n\n clear () {\n this._animationPool = {};\n this._skeletonCache = {};\n },\n\n removeSkeleton (uuid) {\n var skeletonInfo = this._skeletonCache[uuid];\n if (!skeletonInfo) return;\n let animationsCache = skeletonInfo.animationsCache;\n for (var aniKey in animationsCache) {\n // Clear cache texture, and put cache into pool.\n // No need to create TypedArray next time.\n let animationCache = animationsCache[aniKey];\n if (!animationCache) continue;\n this._animationPool[uuid + \"#\" + aniKey] = animationCache;\n animationCache.clear();\n }\n\n delete this._skeletonCache[uuid];\n },\n\n getSkeletonCache (uuid, skeletonData) {\n let skeletonInfo = this._skeletonCache[uuid];\n if (!skeletonInfo) {\n let skeleton = new spine.Skeleton(skeletonData);\n let clipper = new spine.SkeletonClipping();\n let stateData = new spine.AnimationStateData(skeleton.data);\n let state = new spine.AnimationState(stateData);\n let listener = new TrackEntryListeners();\n state.addListener(listener);\n\n this._skeletonCache[uuid] = skeletonInfo = {\n skeleton : skeleton,\n clipper : clipper,\n state : state,\n listener : listener,\n // Cache all kinds of animation frame.\n // When skeleton is dispose, clear all animation cache.\n animationsCache : {},\n curAnimationCache: null\n };\n }\n return skeletonInfo;\n },\n\n getAnimationCache (uuid, animationName) {\n let skeletonInfo = this._skeletonCache[uuid];\n if (!skeletonInfo) return null;\n\n let animationsCache = skeletonInfo.animationsCache;\n return animationsCache[animationName];\n },\n\n invalidAnimationCache (uuid) {\n let skeletonInfo = this._skeletonCache[uuid];\n let skeleton = skeletonInfo && skeletonInfo.skeleton;\n if (!skeleton) return;\n\n let animationsCache = skeletonInfo.animationsCache;\n for (var aniKey in animationsCache) {\n let animationCache = animationsCache[aniKey];\n animationCache.invalidAllFrame();\n }\n },\n\n initAnimationCache (uuid, animationName) {\n if (!animationName) return null;\n let skeletonInfo = this._skeletonCache[uuid];\n let skeleton = skeletonInfo && skeletonInfo.skeleton;\n if (!skeleton) return null;\n\n let animation = skeleton.data.findAnimation(animationName);\n if (!animation) {\n return null;\n }\n\n let animationsCache = skeletonInfo.animationsCache;\n let animationCache = animationsCache[animationName];\n if (!animationCache) {\n // If cache exist in pool, then just use it.\n let poolKey = uuid + \"#\" + animationName;\n animationCache = this._animationPool[poolKey];\n if (animationCache) {\n delete this._animationPool[poolKey];\n } else {\n animationCache = new AnimationCache();\n animationCache._privateMode = this._privateMode;\n }\n animationCache.init(skeletonInfo, animationName);\n animationsCache[animationName] = animationCache;\n }\n return animationCache;\n },\n\n updateAnimationCache (uuid, animationName) {\n if (animationName) {\n let animationCache = this.initAnimationCache(uuid, animationName);\n if (!animationCache) return null;\n animationCache.updateAllFrame();\n } else {\n let skeletonInfo = this._skeletonCache[uuid];\n let skeleton = skeletonInfo && skeletonInfo.skeleton;\n if (!skeleton) return;\n\n let animationsCache = skeletonInfo.animationsCache;\n for (var aniKey in animationsCache) {\n let animationCache = animationsCache[aniKey];\n animationCache.updateAllFrame();\n }\n }\n }\n});\n\nSkeletonCache.FrameTime = FrameTime;\nSkeletonCache.sharedCache = new SkeletonCache();\nmodule.exports = SkeletonCache;","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * @module sp\n */\nlet SkeletonCache = !CC_JSB && require('./skeleton-cache').sharedCache;\n\n/**\n * !#en The skeleton data of spine.\n * !#zh Spine 的 骨骼数据。\n * @class SkeletonData\n * @extends Asset\n */\nlet SkeletonData = cc.Class({\n name: 'sp.SkeletonData',\n extends: cc.Asset,\n\n ctor: function () {\n this.reset();\n },\n\n properties: {\n _skeletonJson: null,\n\n // use by jsb\n skeletonJsonStr: {\n get: function () {\n if (this._skeletonJson) {\n return JSON.stringify(this._skeletonJson);\n } else {\n return \"\";\n }\n }\n },\n\n /**\n * !#en See http://en.esotericsoftware.com/spine-json-format\n * !#zh 可查看 Spine 官方文档 http://zh.esotericsoftware.com/spine-json-format\n * @property {Object} skeletonJson\n */\n skeletonJson: {\n get: function () {\n return this._skeletonJson;\n },\n set: function (value) {\n this.reset();\n if (typeof(value) == \"string\") {\n this._skeletonJson = JSON.parse(value);\n } else {\n this._skeletonJson = value;\n }\n // If create by manual, uuid is empty.\n if (!this._uuid && value.skeleton) {\n this._uuid = value.skeleton.hash;\n }\n }\n },\n\n _atlasText: \"\",\n\n /**\n * @property {String} atlasText\n */\n atlasText: {\n get: function () {\n return this._atlasText;\n },\n set: function (value) {\n this._atlasText = value;\n this.reset();\n }\n },\n\n /**\n * @property {Texture2D[]} textures\n */\n textures: {\n default: [],\n type: [cc.Texture2D]\n },\n\n /**\n * @property {String[]} textureNames\n * @private\n */\n textureNames: {\n default: [],\n type: [cc.String]\n },\n\n /**\n * !#en\n * A scale can be specified on the JSON or binary loader which will scale the bone positions,\n * image sizes, and animation translations.\n * This can be useful when using different sized images than were used when designing the skeleton\n * in Spine. For example, if using images that are half the size than were used in Spine,\n * a scale of 0.5 can be used. This is commonly used for games that can run with either low or high\n * resolution texture atlases.\n * see http://en.esotericsoftware.com/spine-using-runtimes#Scaling\n * !#zh 可查看 Spine 官方文档: http://zh.esotericsoftware.com/spine-using-runtimes#Scaling\n * @property {Number} scale\n */\n scale: 1,\n\n _nativeAsset: {\n get () {\n return this._buffer;\n },\n set (bin) {\n this._buffer = bin.buffer || bin;\n this.reset();\n },\n override: true\n },\n },\n\n statics: {\n preventDeferredLoadDependents: true,\n\n createRegion(spriteFrame, original = undefined) {\n const region = new sp.spine.TextureAtlasRegion();\n\n const texture = spriteFrame.getTexture();\n const rect = spriteFrame.getRect();\n const origSize = spriteFrame.getOriginalSize();\n const _offset = spriteFrame.getOffset();\n const rotate = spriteFrame.isRotated();\n const offset = cc.v2(\n (origSize.width - rect.width) * 0.5 + _offset.x,\n (origSize.height - rect.height) * 0.5 + _offset.y,\n );\n const degrees = rotate ? 270 : 0;\n\n if (original) {\n region.name = original.name;\n region.page = original.page;\n }\n\n region.x = rect.x;\n region.y = rect.y;\n region.width = rect.width;\n region.height = rect.height;\n region.originalWidth = origSize.width;\n region.originalHeight = origSize.height;\n region.offsetX = offset.x;\n region.offsetY = offset.y;\n region.rotate = degrees != 0;\n region.degrees = degrees;\n\n const skelTex = new sp.SkeletonTexture({\n width: texture.width,\n height: texture.height,\n });\n skelTex.setRealTexture(texture);\n region.texture = skelTex;\n\n this.updateRegionUV(region);\n\n return region;\n },\n\n updateRegionUV(region) {\n const texture = region.texture._texture;\n if (region.rotate) {\n region.u = region.x / texture.width;\n region.v = region.y / texture.height;\n region.u2 = (region.x + region.height) / texture.width;\n region.v2 = (region.y + region.width) / texture.height;\n } else {\n region.u = region.x / texture.width;\n region.v = region.y / texture.height;\n region.u2 = (region.x + region.width) / texture.width;\n region.v2 = (region.y + region.height) / texture.height;\n }\n },\n\n createSpriteFrame(region) {\n const frame = new cc.SpriteFrame(\n region.texture._texture,\n cc.rect(region.x, region.y, region.width, region.height),\n region.rotate, // 如果 region 不是 0 或 270 则会出现问题\n cc.v2(region.offsetX - (region.originalWidth - region.width) * 0.5, region.offsetY - (region.originalHeight - region.height) * 0.5),\n cc.size(region.originalWidth, region.originalHeight),\n );\n return frame;\n },\n },\n\n // PUBLIC\n\n createNode: CC_EDITOR && function (callback) {\n let node = new cc.Node(this.name);\n let skeleton = node.addComponent(sp.Skeleton);\n skeleton.skeletonData = this;\n\n return callback(null, node);\n },\n\n reset: function () {\n /**\n * @property {sp.spine.SkeletonData} _skeletonData\n * @private\n */\n this._skeletonCache = null;\n /**\n * @property {sp.spine.Atlas} _atlasCache\n * @private\n */\n this._atlasCache = null;\n if (CC_EDITOR) {\n this._skinsEnum = null;\n this._animsEnum = null;\n }\n this._cloneId = 0;\n },\n\n ensureTexturesLoaded (loaded, caller) {\n let textures = this.textures; \n let texsLen = textures.length;\n if (texsLen == 0) {\n loaded.call(caller, false);\n return;\n }\n let loadedCount = 0;\n let loadedItem = function () {\n loadedCount++;\n if (loadedCount >= texsLen) {\n loaded && loaded.call(caller, true);\n loaded = null;\n }\n }\n for (let i = 0; i < texsLen; i++) {\n let tex = textures[i];\n if (tex.loaded) {\n loadedItem();\n } else {\n tex.once('load', loadedItem);\n }\n }\n },\n\n isTexturesLoaded () {\n let textures = this.textures; \n let texsLen = textures.length;\n for (let i = 0; i < texsLen; i++) {\n let tex = textures[i];\n if (!tex.loaded) {\n return false;\n }\n }\n return true;\n },\n\n /**\n * !#en Get the included SkeletonData used in spine runtime.
\n * Returns a {{#crossLinkModule \"sp.spine\"}}sp.spine{{/crossLinkModule}}.SkeletonData object.\n * !#zh 获取 Spine Runtime 使用的 SkeletonData。
\n * 返回一个 {{#crossLinkModule \"sp.spine\"}}sp.spine{{/crossLinkModule}}.SkeletonData 对象。\n * @method getRuntimeData\n * @param {Boolean} [quiet=false]\n * @return {sp.spine.SkeletonData}\n */\n getRuntimeData: function (quiet) {\n if (this._skeletonCache) {\n return this._skeletonCache;\n }\n\n if ( !(this.textures && this.textures.length > 0) && this.textureNames && this.textureNames.length > 0 ) {\n if ( !quiet ) {\n cc.errorID(7507, this.name);\n }\n return null;\n }\n\n let atlas = this._getAtlas(quiet);\n if (! atlas) {\n return null;\n }\n let attachmentLoader = new sp.spine.AtlasAttachmentLoader(atlas);\n\n let resData = null;\n let reader = null;\n if (this.skeletonJson) {\n reader = new sp.spine.SkeletonJson(attachmentLoader);\n resData = this.skeletonJson;\n } else {\n reader = new sp.spine.SkeletonBinary(attachmentLoader);\n resData = new Uint8Array(this._nativeAsset);\n }\n\n reader.scale = this.scale;\n this._skeletonCache = reader.readSkeletonData(resData);\n atlas.dispose();\n\n return this._skeletonCache;\n },\n\n // EDITOR\n\n getSkinsEnum: CC_EDITOR && function () {\n if (this._skinsEnum) {\n return this._skinsEnum;\n }\n let sd = this.getRuntimeData(true);\n if (sd) {\n let skins = sd.skins;\n let enumDef = {};\n for (let i = 0; i < skins.length; i++) {\n let name = skins[i].name;\n enumDef[name] = i;\n }\n return this._skinsEnum = cc.Enum(enumDef);\n }\n return null;\n },\n\n getAnimsEnum: CC_EDITOR && function () {\n if (this._animsEnum) {\n return this._animsEnum;\n }\n let sd = this.getRuntimeData(true);\n if (sd) {\n let enumDef = { '': 0 };\n let anims = sd.animations;\n for (let i = 0; i < anims.length; i++) {\n let name = anims[i].name;\n enumDef[name] = i + 1;\n }\n return this._animsEnum = cc.Enum(enumDef);\n }\n return null;\n },\n\n // PRIVATE\n\n _getTexture: function (line) {\n let names = this.textureNames;\n for (let i = 0; i < names.length; i++) {\n if (names[i] === line) {\n let texture = this.textures[i];\n let tex = new sp.SkeletonTexture({ width: texture.width, height: texture.height });\n tex.setRealTexture(texture);\n return tex;\n }\n }\n cc.errorID(7506, line);\n return null;\n },\n\n /**\n * @method _getAtlas\n * @param {boolean} [quiet=false]\n * @return {sp.spine.Atlas}\n * @private\n */\n _getAtlas: function (quiet) {\n if (this._atlasCache) {\n return this._atlasCache;\n }\n\n if ( !this.atlasText ) {\n if ( !quiet ) {\n cc.errorID(7508, this.name);\n }\n return null;\n }\n\n return this._atlasCache = new sp.spine.TextureAtlas(this.atlasText, this._getTexture.bind(this));\n },\n\n /**\n * 克隆 SkeletonData\n */\n clone: function () {\n const cloned = new SkeletonData();\n cloned._cloneId = this._cloneId + 1;\n const suffix = '(clone ' + String(cloned._cloneId) + ')';\n cloned._uuid = this._uuid + suffix;\n cloned.name = this.name + suffix;\n cloned.scale = this.scale;\n cloned.textureNames = this.textureNames;\n cloned.textures = this.textures;\n cloned._atlasText = this._atlasText;\n cloned._skeletonJson = this._skeletonJson;\n cloned._buffer = this._buffer;\n\n return cloned;\n },\n\n destroy() {\n // 删除动态图集\n if (this._atlasCache) {\n const regions = this._atlasCache.regions;\n for (const region of regions) {\n if (region._spriteFrame) {\n region._spriteFrame.destroy();\n region._spriteFrame = null;\n }\n }\n }\n if (this._skeletonCache) {\n const skins = this._skeletonCache.skins;\n for (const skin of skins) {\n for (const attachments of skin.attachments) {\n for (const key in attachments) {\n const region = attachments[key].region;\n if (region && region._spriteFrame) {\n region._spriteFrame.destroy();\n region._spriteFrame = null;\n }\n }\n }\n }\n }\n SkeletonCache.removeSkeleton(this._uuid);\n this._super();\n },\n});\n\nsp.SkeletonData = module.exports = SkeletonData;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nsp.SkeletonTexture = cc.Class({\n name: 'sp.SkeletonTexture',\n extends: sp.spine.Texture,\n _texture: null,\n _material: null,\n\n setRealTexture: function(tex) {\n this._texture = tex;\n },\n\n getRealTexture: function() {\n return this._texture;\n },\n\n setFilters: function(minFilter, magFilter) {\n if (this._texture) {\n this._texture.setFilters(minFilter, magFilter);\n }\n },\n\n setWraps: function(uWrap, vWrap) {\n if (this._texture) {\n this._texture.setWrapMode(uWrap, vWrap);\n }\n },\n\n dispose: function() {}\n});\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport Assembler from '../../cocos2d/core/renderer/assembler';\n\nconst Skeleton = require('./Skeleton');\nconst spine = require('./lib/spine');\nconst RenderFlow = require('../../cocos2d/core/renderer/render-flow');\nconst VertexFormat = require('../../cocos2d/core/renderer/webgl/vertex-format')\nconst VFOneColor = VertexFormat.vfmtPosUvColor;\nconst VFOneColorTexId = VertexFormat.vfmtPosUvColorTexId;\nconst VFTwoColor = VertexFormat.vfmtPosUvTwoColor;\nconst gfx = cc.gfx;\n\nconst FLAG_BATCH = 0x10;\nconst FLAG_TWO_COLOR = 0x01;\n\nlet _handleVal = 0x00;\nlet _quadTriangles = [0, 1, 2, 2, 3, 0];\nlet _slotColor = cc.color(0, 0, 255, 255);\nlet _boneColor = cc.color(255, 0, 0, 255);\nlet _originColor = cc.color(0, 255, 0, 255);\nlet _meshColor = cc.color(255, 255, 0, 255);\n\nlet _finalColor = null;\nlet _darkColor = null;\nlet _tempPos = null, _tempUv = null;\nif (!CC_NATIVERENDERER) {\n _finalColor = new spine.Color(1, 1, 1, 1);\n _darkColor = new spine.Color(1, 1, 1, 1);\n _tempPos = new spine.Vector2();\n _tempUv = new spine.Vector2();\n}\n\nlet _premultipliedAlpha;\nlet _multiplier;\nlet _slotRangeStart;\nlet _slotRangeEnd;\nlet _useTint;\nlet _useMulti;\nlet _texId;\nlet _debugSlots;\nlet _debugBones;\nlet _debugMesh;\nlet _nodeR,\n _nodeG,\n _nodeB,\n _nodeA;\nlet _finalColor32, _darkColor32;\nlet _vertexFormat;\nlet _perVertexSize;\nlet _perClipVertexSize;\n\nlet _vertexFloatCount = 0, _vertexCount = 0, _vertexFloatOffset = 0, _vertexOffset = 0,\n _indexCount = 0, _indexOffset = 0, _vfOffset = 0;\nlet _tempr, _tempg, _tempb;\nlet _inRange;\nlet _mustFlush;\nlet _x, _y, _m00, _m04, _m12, _m01, _m05, _m13;\nlet _r, _g, _b, _fr, _fg, _fb, _fa, _dr, _dg, _db, _da;\nlet _comp, _buffer, _renderer, _node, _needColor, _vertexEffect;\n\nfunction _getSlotMaterial (tex, blendMode) {\n let src, dst;\n switch (blendMode) {\n case spine.BlendMode.Additive:\n src = _premultipliedAlpha ? cc.macro.ONE : cc.macro.SRC_ALPHA;\n dst = cc.macro.ONE;\n break;\n case spine.BlendMode.Multiply:\n src = cc.macro.DST_COLOR;\n dst = cc.macro.ONE_MINUS_SRC_ALPHA;\n break;\n case spine.BlendMode.Screen:\n src = cc.macro.ONE;\n dst = cc.macro.ONE_MINUS_SRC_COLOR;\n break;\n case spine.BlendMode.Normal:\n default:\n src = _premultipliedAlpha ? cc.macro.ONE : cc.macro.SRC_ALPHA;\n dst = cc.macro.ONE_MINUS_SRC_ALPHA;\n break;\n }\n\n let useModel = !_comp.enableBatch;\n let baseMaterial = _comp._materials[0];\n if (!baseMaterial) return null;\n\n if (_useMulti) {\n let key = tex.getId() + src + dst;\n let materialCache = _comp._materialCache;\n let materialInfo = materialCache[key];\n if (!materialInfo) {\n let texId = baseMaterial.material.getMultiHandler().getIndex(tex.getImpl());\n if (!materialCache.baseMaterial) {\n materialInfo = { material: baseMaterial, texId: texId };\n materialCache.baseMaterial = materialInfo;\n } else {\n materialInfo = { material: cc.MaterialVariant.create(baseMaterial), texId: texId };\n }\n\n if (texId === -1) {\n materialInfo.material.setProperty('texture', tex);\n materialInfo.texId = 0;\n }\n\n // update blend function\n materialInfo.material.setBlend(\n true,\n gfx.BLEND_FUNC_ADD,\n src, dst,\n gfx.BLEND_FUNC_ADD,\n src, dst\n );\n materialCache[key] = materialInfo;\n }\n _texId = materialInfo.texId;\n return materialInfo.material;\n } else {\n // The key use to find corresponding material\n let key = tex.getId() + src + dst + _useTint + useModel;\n let materialCache = _comp._materialCache;\n let material = materialCache[key];\n if (!material) {\n if (!materialCache.baseMaterial) {\n material = baseMaterial;\n materialCache.baseMaterial = baseMaterial;\n } else {\n material = cc.MaterialVariant.create(baseMaterial);\n }\n\n material.define('CC_USE_MODEL', useModel);\n material.define('USE_TINT', _useTint);\n // update texture\n material.setProperty('texture', tex);\n\n // update blend function\n material.setBlend(\n true,\n gfx.BLEND_FUNC_ADD,\n src, dst,\n gfx.BLEND_FUNC_ADD,\n src, dst\n );\n materialCache[key] = material;\n }\n\n return material;\n }\n}\n\nfunction _handleColor (color) {\n // temp rgb has multiply 255, so need divide 255;\n _fa = color.fa * _nodeA;\n _multiplier = _premultipliedAlpha ? _fa / 255 : 1;\n _r = _nodeR * _multiplier;\n _g = _nodeG * _multiplier;\n _b = _nodeB * _multiplier;\n\n _fr = color.fr * _r;\n _fg = color.fg * _g;\n _fb = color.fb * _b;\n _finalColor32 = ((_fa<<24) >>> 0) + (_fb<<16) + (_fg<<8) + _fr;\n\n _dr = color.dr * _r;\n _dg = color.dg * _g;\n _db = color.db * _b;\n _da = _premultipliedAlpha ? 255 : 0;\n _darkColor32 = ((_da<<24) >>> 0) + (_db<<16) + (_dg<<8) + _dr;\n}\n\nfunction _spineColorToInt32 (spineColor) {\n return ((spineColor.a<<24) >>> 0) + (spineColor.b<<16) + (spineColor.g<<8) + spineColor.r;\n}\n\nexport default class SpineAssembler extends Assembler {\n updateRenderData (comp) {\n if (comp.isAnimationCached()) return;\n\n if (comp._dataDirty) {\n // 自动合图\n this.packDynamicAtlasForSpine(comp);\n\n // 自动切换材质\n const autoSwitchMaterial = comp.autoSwitchMaterial;\n if ((cc.sp.autoSwitchMaterial && autoSwitchMaterial === 0) || autoSwitchMaterial === 1) {\n const material = comp._materials[0];\n if (!material) return false;\n\n const skins = comp.skeletonData._skeletonCache.skins;\n for (const skin of skins) {\n for (const attachment of skin.attachments) {\n for (const key in attachment) {\n const region = attachment[key].region;\n if (region && region.texture) {\n this.checkAndSwitchMaterial(comp, region.texture._texture, material);\n break;\n }\n }\n }\n }\n }\n comp._dataDirty = false;\n }\n\n let skeleton = comp._skeleton;\n if (skeleton) {\n skeleton.updateWorldTransform();\n }\n }\n\n packDynamicAtlasForSpine(comp) {\n if (CC_TEST) return false;\n\n const allowDynamicAtlas = comp.allowDynamicAtlas;\n if ((cc.sp.allowDynamicAtlas && allowDynamicAtlas === 0) || allowDynamicAtlas === 1) {\n if (cc.dynamicAtlasManager) {\n const skins = comp.skeletonData._skeletonCache.skins;\n for (const skin of skins) {\n for (const attachments of skin.attachments) {\n for (const key in attachments) {\n const attachment = attachments[key];\n const region = attachment.region;\n if (region && !region._original && region.texture && region.texture._texture.packable) {\n if (region._spriteFrame) {\n region._spriteFrame.destroy();\n region._spriteFrame = null;\n }\n const frame = sp.SkeletonData.createSpriteFrame(region);\n const packedFrame = cc.dynamicAtlasManager.insertSpriteFrame(frame);\n if (packedFrame) {\n frame._setDynamicAtlasFrame(packedFrame);\n\n region._original = {\n _texture: region.texture,\n _x: region.x,\n _y: region.y,\n };\n\n region.texture = new sp.SkeletonTexture({\n width: packedFrame.texture.width,\n height: packedFrame.texture.height,\n });\n region.texture.setRealTexture(packedFrame.texture);\n\n region.x = packedFrame.x;\n region.y = packedFrame.y;\n\n // update uv\n sp.SkeletonData.updateRegionUV(region);\n if (attachment instanceof sp.spine.MeshAttachment) {\n attachment.updateUVs();\n } else {\n attachment.setRegion(region);\n attachment.updateOffset(); \n }\n\n frame.once(\"_resetDynamicAtlasFrame\", () => {\n region.x = region._original._x;\n region.y = region._original._y;\n region.texture = region._original._texture;\n region._original = null;\n\n // update uv\n sp.SkeletonData.updateRegionUV(region);\n if (attachment instanceof sp.spine.MeshAttachment) {\n attachment.updateUVs();\n } else {\n attachment.setRegion(region);\n attachment.updateOffset();\n }\n });\n region._spriteFrame = frame;\n } else {\n frame.destroy();\n }\n }\n }\n } \n }\n }\n }\n }\n\n fillVertices (skeletonColor, attachmentColor, slotColor, clipper, slot) {\n\n let vbuf = _buffer._vData,\n ibuf = _buffer._iData,\n uintVData = _buffer._uintVData;\n let offsetInfo;\n\n _finalColor.a = slotColor.a * attachmentColor.a * skeletonColor.a * _nodeA * 255;\n _multiplier = _premultipliedAlpha? _finalColor.a : 255;\n _tempr = _nodeR * attachmentColor.r * skeletonColor.r * _multiplier;\n _tempg = _nodeG * attachmentColor.g * skeletonColor.g * _multiplier;\n _tempb = _nodeB * attachmentColor.b * skeletonColor.b * _multiplier;\n \n _finalColor.r = _tempr * slotColor.r;\n _finalColor.g = _tempg * slotColor.g;\n _finalColor.b = _tempb * slotColor.b;\n\n if (slot.darkColor == null) {\n _darkColor.set(0.0, 0.0, 0.0, 1.0);\n } else {\n _darkColor.r = slot.darkColor.r * _tempr;\n _darkColor.g = slot.darkColor.g * _tempg;\n _darkColor.b = slot.darkColor.b * _tempb;\n }\n _darkColor.a = _premultipliedAlpha ? 255 : 0;\n\n if (!clipper.isClipping()) {\n if (_vertexEffect) {\n for (let v = _vertexFloatOffset, n = _vertexFloatOffset + _vertexFloatCount; v < n; v += _perVertexSize) {\n _tempPos.x = vbuf[v];\n _tempPos.y = vbuf[v + 1];\n _tempUv.x = vbuf[v + 2];\n _tempUv.y = vbuf[v + 3];\n _vertexEffect.transform(_tempPos, _tempUv, _finalColor, _darkColor);\n\n vbuf[v] = _tempPos.x; // x\n vbuf[v + 1] = _tempPos.y; // y\n vbuf[v + 2] = _tempUv.x; // u\n vbuf[v + 3] = _tempUv.y; // v\n uintVData[v + 4] = _spineColorToInt32(_finalColor); // light color\n if (_useMulti) {\n vbuf[v + 5] = _texId;\n } else {\n _useTint && (uintVData[v + 5] = _spineColorToInt32(_darkColor)); // dark color\n }\n }\n } else {\n _finalColor32 = _spineColorToInt32(_finalColor);\n _darkColor32 = _spineColorToInt32(_darkColor);\n \n for (let v = _vertexFloatOffset, n = _vertexFloatOffset + _vertexFloatCount; v < n; v += _perVertexSize) {\n uintVData[v + 4] = _finalColor32; // light color\n if (_useMulti) {\n vbuf[v + 5] = _texId;\n } else {\n _useTint && (uintVData[v + 5] = _darkColor32); // dark color\n }\n }\n }\n } else {\n let uvs = vbuf.subarray(_vertexFloatOffset + 2);\n clipper.clipTriangles(vbuf.subarray(_vertexFloatOffset), _vertexFloatCount, ibuf.subarray(_indexOffset), _indexCount, uvs, _finalColor, _darkColor, _useTint, _perVertexSize);\n let clippedVertices = new Float32Array(clipper.clippedVertices);\n let clippedTriangles = clipper.clippedTriangles;\n \n // insure capacity\n _indexCount = clippedTriangles.length;\n _vertexFloatCount = clippedVertices.length / _perClipVertexSize * _perVertexSize;\n\n offsetInfo = _buffer.requestForSpine(_vertexFloatCount / _perVertexSize, _indexCount);\n _indexOffset = offsetInfo.indiceOffset,\n _vertexOffset = offsetInfo.vertexOffset,\n _vertexFloatOffset = offsetInfo.byteOffset >> 2;\n vbuf = _buffer._vData,\n ibuf = _buffer._iData;\n uintVData = _buffer._uintVData;\n\n // fill indices\n ibuf.set(clippedTriangles, _indexOffset);\n\n // fill vertices contain x y u v light color dark color\n if (_vertexEffect) {\n for (let v = 0, n = clippedVertices.length, offset = _vertexFloatOffset; v < n; v += _perClipVertexSize, offset += _perVertexSize) {\n _tempPos.x = clippedVertices[v];\n _tempPos.y = clippedVertices[v + 1];\n _finalColor.set(clippedVertices[v + 2], clippedVertices[v + 3], clippedVertices[v + 4], clippedVertices[v + 5]);\n _tempUv.x = clippedVertices[v + 6];\n _tempUv.y = clippedVertices[v + 7];\n if (_useTint) {\n _darkColor.set(clippedVertices[v + 8], clippedVertices[v + 9], clippedVertices[v + 10], clippedVertices[v + 11]);\n } else {\n _darkColor.set(0, 0, 0, 0);\n }\n _vertexEffect.transform(_tempPos, _tempUv, _finalColor, _darkColor);\n\n vbuf[offset] = _tempPos.x; // x\n vbuf[offset + 1] = _tempPos.y; // y\n vbuf[offset + 2] = _tempUv.x; // u\n vbuf[offset + 3] = _tempUv.y; // v\n uintVData[offset + 4] = _spineColorToInt32(_finalColor);\n if (_useMulti) {\n vbuf[offset + 5] = _texId;\n } else {\n if (_useTint) {\n uintVData[offset + 5] = _spineColorToInt32(_darkColor);\n }\n }\n }\n } else {\n for (let v = 0, n = clippedVertices.length, offset = _vertexFloatOffset; v < n; v += _perClipVertexSize, offset += _perVertexSize) {\n vbuf[offset] = clippedVertices[v]; // x\n vbuf[offset + 1] = clippedVertices[v + 1]; // y\n vbuf[offset + 2] = clippedVertices[v + 6]; // u\n vbuf[offset + 3] = clippedVertices[v + 7]; // v\n\n _finalColor32 = ((clippedVertices[v + 5]<<24) >>> 0) + (clippedVertices[v + 4]<<16) + (clippedVertices[v + 3]<<8) + clippedVertices[v + 2];\n uintVData[offset + 4] = _finalColor32;\n if (_useMulti) {\n vbuf[offset + 5] = _texId;\n } else {\n if (_useTint) {\n _darkColor32 = ((clippedVertices[v + 11] << 24) >>> 0) + (clippedVertices[v + 10] << 16) + (clippedVertices[v + 9] << 8) + clippedVertices[v + 8];\n uintVData[offset + 5] = _darkColor32;\n }\n }\n }\n }\n }\n }\n\n realTimeTraverse (worldMat) {\n let vbuf;\n let ibuf;\n\n let locSkeleton = _comp._skeleton;\n let skeletonColor = locSkeleton.color;\n let graphics = _comp._debugRenderer;\n let clipper = _comp._clipper;\n let material = null;\n let attachment, attachmentColor, slotColor, uvs, triangles;\n let isRegion, isMesh, isClip;\n let offsetInfo;\n let slot;\n let worldMatm;\n\n _slotRangeStart = _comp._startSlotIndex;\n _slotRangeEnd = _comp._endSlotIndex;\n _inRange = false;\n if (_slotRangeStart == -1) _inRange = true;\n\n _debugSlots = _comp.debugSlots;\n _debugBones = _comp.debugBones;\n _debugMesh = _comp.debugMesh;\n if (graphics && (_debugBones || _debugSlots || _debugMesh)) {\n graphics.clear();\n graphics.lineWidth = 2;\n }\n \n // x y u v r1 g1 b1 a1 r2 g2 b2 a2 or x y u v r g b a \n _perClipVertexSize = _useMulti ? 12 : (_useTint ? 12 : 8);\n \n _vertexFloatCount = 0;\n _vertexFloatOffset = 0;\n _vertexOffset = 0;\n _indexCount = 0;\n _indexOffset = 0;\n\n for (let slotIdx = 0, slotCount = locSkeleton.drawOrder.length; slotIdx < slotCount; slotIdx++) {\n slot = locSkeleton.drawOrder[slotIdx];\n\n if(slot == undefined) {\n continue;\n }\n\n if (_slotRangeStart >= 0 && _slotRangeStart == slot.data.index) {\n _inRange = true;\n }\n \n if (!_inRange) {\n clipper.clipEndWithSlot(slot);\n continue;\n }\n \n if (_slotRangeEnd >= 0 && _slotRangeEnd == slot.data.index) {\n _inRange = false;\n }\n \n _vertexFloatCount = 0;\n _indexCount = 0;\n\n attachment = slot.getAttachment();\n if (!attachment) {\n clipper.clipEndWithSlot(slot);\n continue;\n }\n\n isRegion = attachment instanceof spine.RegionAttachment;\n isMesh = attachment instanceof spine.MeshAttachment;\n isClip = attachment instanceof spine.ClippingAttachment;\n\n if (isClip) {\n clipper.clipStart(slot, attachment);\n continue;\n }\n\n if (!isRegion && !isMesh) {\n clipper.clipEndWithSlot(slot);\n continue;\n }\n\n material = _getSlotMaterial(attachment.region.texture._texture, slot.data.blendMode);\n if (!material) {\n clipper.clipEndWithSlot(slot);\n continue;\n }\n\n if (_mustFlush || material.getHash() !== _renderer.material.getHash()) {\n _mustFlush = false;\n _renderer._flush();\n _renderer.node = _node;\n _renderer.material = material;\n }\n\n if (isRegion) {\n \n triangles = _quadTriangles;\n \n // insure capacity\n _vertexFloatCount = 4 * _perVertexSize;\n _indexCount = 6;\n\n offsetInfo = _buffer.requestForSpine(4, 6);\n _indexOffset = offsetInfo.indiceOffset,\n _vertexOffset = offsetInfo.vertexOffset,\n _vertexFloatOffset = offsetInfo.byteOffset >> 2;\n vbuf = _buffer._vData,\n ibuf = _buffer._iData;\n \n // compute vertex and fill x y\n attachment.computeWorldVertices(slot.bone, vbuf, _vertexFloatOffset, _perVertexSize);\n \n // draw debug slots if enabled graphics\n if (graphics && _debugSlots) {\n graphics.strokeColor = _slotColor;\n graphics.moveTo(vbuf[_vertexFloatOffset], vbuf[_vertexFloatOffset + 1]);\n for (let ii = _vertexFloatOffset + _perVertexSize, nn = _vertexFloatOffset + _vertexFloatCount; ii < nn; ii += _perVertexSize) {\n graphics.lineTo(vbuf[ii], vbuf[ii + 1]);\n }\n graphics.close();\n graphics.stroke();\n }\n }\n else if (isMesh) {\n \n triangles = attachment.triangles;\n \n // insure capacity\n _vertexFloatCount = (attachment.worldVerticesLength >> 1) * _perVertexSize;\n _indexCount = triangles.length;\n\n offsetInfo = _buffer.requestForSpine(_vertexFloatCount / _perVertexSize, _indexCount);\n _indexOffset = offsetInfo.indiceOffset,\n _vertexOffset = offsetInfo.vertexOffset,\n _vertexFloatOffset = offsetInfo.byteOffset >> 2;\n vbuf = _buffer._vData,\n ibuf = _buffer._iData;\n \n // compute vertex and fill x y\n attachment.computeWorldVertices(slot, 0, attachment.worldVerticesLength, vbuf, _vertexFloatOffset, _perVertexSize);\n\n // draw debug mesh if enabled graphics\n if (graphics && _debugMesh) {\n graphics.strokeColor = _meshColor;\n\n for (let ii = 0, nn = triangles.length; ii < nn; ii += 3) {\n let v1 = triangles[ii] * _perVertexSize + _vertexFloatOffset;\n let v2 = triangles[ii + 1] * _perVertexSize + _vertexFloatOffset;\n let v3 = triangles[ii + 2] * _perVertexSize + _vertexFloatOffset;\n \n graphics.moveTo(vbuf[v1], vbuf[v1 + 1]);\n graphics.lineTo(vbuf[v2], vbuf[v2 + 1]);\n graphics.lineTo(vbuf[v3], vbuf[v3 + 1]);\n graphics.close();\n graphics.stroke();\n }\n }\n }\n \n if (_vertexFloatCount == 0 || _indexCount == 0) {\n clipper.clipEndWithSlot(slot);\n continue;\n }\n \n // fill indices\n ibuf.set(triangles, _indexOffset);\n\n // fill u v\n uvs = attachment.uvs;\n for (let v = _vertexFloatOffset, n = _vertexFloatOffset + _vertexFloatCount, u = 0; v < n; v += _perVertexSize, u += 2) {\n vbuf[v + 2] = uvs[u]; // u\n vbuf[v + 3] = uvs[u + 1]; // v\n }\n\n attachmentColor = attachment.color,\n slotColor = slot.color;\n\n this.fillVertices(skeletonColor, attachmentColor, slotColor, clipper, slot);\n \n // reset buffer pointer, because clipper maybe realloc a new buffer in file Vertices function.\n vbuf = _buffer._vData,\n ibuf = _buffer._iData;\n \n if (_indexCount > 0) {\n for (let ii = _indexOffset, nn = _indexOffset + _indexCount; ii < nn; ii++) {\n ibuf[ii] += _vertexOffset;\n }\n\n if (worldMat) {\n worldMatm = worldMat.m;\n _m00 = worldMatm[0];\n _m04 = worldMatm[4];\n _m12 = worldMatm[12];\n _m01 = worldMatm[1];\n _m05 = worldMatm[5];\n _m13 = worldMatm[13];\n for (let ii = _vertexFloatOffset, nn = _vertexFloatOffset + _vertexFloatCount; ii < nn; ii += _perVertexSize) {\n _x = vbuf[ii];\n _y = vbuf[ii + 1];\n vbuf[ii] = _x * _m00 + _y * _m04 + _m12;\n vbuf[ii + 1] = _x * _m01 + _y * _m05 + _m13;\n }\n }\n _buffer.adjustForSpine(_vertexFloatCount / _perVertexSize, _indexCount);\n }\n \n clipper.clipEndWithSlot(slot);\n }\n \n clipper.clipEnd();\n \n if (graphics && _debugBones) {\n let bone;\n graphics.strokeColor = _boneColor;\n graphics.fillColor = _slotColor; // Root bone color is same as slot color.\n \n for (let i = 0, n = locSkeleton.bones.length; i < n; i++) {\n bone = locSkeleton.bones[i];\n let x = bone.data.length * bone.a + bone.worldX;\n let y = bone.data.length * bone.c + bone.worldY;\n \n // Bone lengths.\n graphics.moveTo(bone.worldX, bone.worldY);\n graphics.lineTo(x, y);\n graphics.stroke();\n \n // Bone origins.\n graphics.circle(bone.worldX, bone.worldY, Math.PI * 1.5);\n graphics.fill();\n if (i === 0) {\n graphics.fillColor = _originColor;\n }\n }\n }\n }\n\n cacheTraverse (worldMat) {\n \n let frame = _comp._curFrame;\n if (!frame) return;\n\n let segments = frame.segments;\n if (segments.length == 0) return;\n\n let vbuf, ibuf, uintbuf;\n let material;\n let offsetInfo;\n let vertices = frame.vertices;\n let indices = frame.indices;\n let worldMatm;\n\n let frameVFOffset = 0, frameIndexOffset = 0, segVFCount = 0;\n if (worldMat) {\n worldMatm = worldMat.m;\n _m00 = worldMatm[0];\n _m01 = worldMatm[1];\n _m04 = worldMatm[4];\n _m05 = worldMatm[5];\n _m12 = worldMatm[12];\n _m13 = worldMatm[13];\n }\n\n let justTranslate = _m00 === 1 && _m01 === 0 && _m04 === 0 && _m05 === 1;\n let needBatch = (_handleVal & FLAG_BATCH);\n let calcTranslate = needBatch && justTranslate;\n\n let colorOffset = 0;\n let colors = frame.colors;\n let nowColor = colors[colorOffset++];\n let maxVFOffset = nowColor.vfOffset;\n _handleColor(nowColor);\n\n for (let i = 0, n = segments.length; i < n; i++) {\n let segInfo = segments[i];\n material = _getSlotMaterial(segInfo.tex, segInfo.blendMode);\n if (!material) continue;\n\n if (_mustFlush || material.getHash() !== _renderer.material.getHash()) {\n _mustFlush = false;\n _renderer._flush();\n _renderer.node = _node;\n _renderer.material = material;\n }\n\n _vertexCount = segInfo.vertexCount;\n _indexCount = segInfo.indexCount;\n\n offsetInfo = _buffer.requestForSpine(_vertexCount, _indexCount);\n _indexOffset = offsetInfo.indiceOffset;\n _vertexOffset = offsetInfo.vertexOffset;\n _vfOffset = offsetInfo.byteOffset >> 2;\n vbuf = _buffer._vData;\n ibuf = _buffer._iData;\n uintbuf = _buffer._uintVData;\n\n for (let ii = _indexOffset, il = _indexOffset + _indexCount; ii < il; ii++) {\n ibuf[ii] = _vertexOffset + indices[frameIndexOffset++];\n }\n\n segVFCount = segInfo.vfCount;\n vbuf.set(vertices.subarray(frameVFOffset, frameVFOffset + segVFCount), _vfOffset);\n frameVFOffset += segVFCount;\n\n if (calcTranslate) {\n for (let ii = _vfOffset, il = _vfOffset + segVFCount; ii < il; ii += 6) {\n vbuf[ii] += _m12;\n vbuf[ii + 1] += _m13;\n }\n } else if (needBatch) {\n for (let ii = _vfOffset, il = _vfOffset + segVFCount; ii < il; ii += 6) {\n _x = vbuf[ii];\n _y = vbuf[ii + 1];\n vbuf[ii] = _x * _m00 + _y * _m04 + _m12;\n vbuf[ii + 1] = _x * _m01 + _y * _m05 + _m13;\n }\n }\n\n _buffer.adjustForSpine(_vertexCount, _indexCount);\n if ( !_needColor ) continue;\n\n // handle color\n let frameColorOffset = frameVFOffset - segVFCount;\n for (let ii = _vfOffset + 4, il = _vfOffset + 4 + segVFCount; ii < il; ii += 6, frameColorOffset += 6) {\n if (frameColorOffset >= maxVFOffset) {\n nowColor = colors[colorOffset++];\n _handleColor(nowColor);\n maxVFOffset = nowColor.vfOffset;\n }\n uintbuf[ii] = _finalColor32;\n uintbuf[ii + 1] = _darkColor32;\n }\n }\n }\n\n fillBuffers (comp, renderer) {\n \n let node = comp.node;\n node._renderFlag |= RenderFlow.FLAG_UPDATE_RENDER_DATA;\n if (!comp._skeleton) return;\n\n let nodeColor = node._color;\n _nodeR = nodeColor.r / 255;\n _nodeG = nodeColor.g / 255;\n _nodeB = nodeColor.b / 255;\n _nodeA = nodeColor.a / 255;\n\n let baseMaterial = comp._materials[0];\n if (!baseMaterial) return;\n\n _useMulti = baseMaterial.material.isMultiSupport();\n _useTint = !_useMulti && (comp.useTint || comp.isAnimationCached());\n _vertexFormat = _useMulti ? VFOneColorTexId : (_useTint ? VFTwoColor : VFOneColor);\n // x y u v color1 color2 or x y u v color\n _perVertexSize = _useMulti ? 6 :(_useTint ? 6 : 5);\n\n _node = comp.node;\n _buffer = renderer.getBuffer('mesh', _vertexFormat);\n _renderer = renderer;\n _comp = comp;\n\n _mustFlush = true;\n _premultipliedAlpha = comp.premultipliedAlpha;\n _multiplier = 1.0;\n _handleVal = 0x00;\n _needColor = false;\n _vertexEffect = comp._effectDelegate && comp._effectDelegate._vertexEffect;\n\n if (nodeColor._val !== 0xffffffff || _premultipliedAlpha) {\n _needColor = true;\n }\n\n if (_useTint) {\n _handleVal |= FLAG_TWO_COLOR;\n }\n\n let worldMat = undefined;\n if (_comp.enableBatch) {\n worldMat = _node._worldMatrix;\n _mustFlush = false;\n _handleVal |= FLAG_BATCH;\n }\n\n if (comp.isAnimationCached()) {\n // Traverse input assembler.\n this.cacheTraverse(worldMat);\n } else {\n if (_vertexEffect) _vertexEffect.begin(comp._skeleton);\n this.realTimeTraverse(worldMat);\n if (_vertexEffect) _vertexEffect.end();\n }\n\n // sync attached node matrix\n renderer.worldMatDirty++;\n comp.attachUtil._syncAttachedNode();\n\n // Clear temp var.\n _node = undefined;\n _buffer = undefined;\n _renderer = undefined;\n _comp = undefined;\n _vertexEffect = null;\n }\n\n postFillBuffers (comp, renderer) {\n renderer.worldMatDirty--;\n }\n}\n\nAssembler.register(Skeleton, SpineAssembler);\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nlet TrackEntryListeners = function () {\n this.start = null;\n this.end = null;\n this.complete = null;\n this.event = null;\n this.interrupt = null;\n this.dispose = null;\n};\n\nTrackEntryListeners.getListeners = function(entry){\n if (!entry.listener) {\n entry.listener = new TrackEntryListeners();\n }\n return entry.listener;\n};\n\nmodule.exports = TrackEntryListeners;","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nconst spine = require('./lib/spine');\n/**\n * @module sp\n */\n\n/**\n * !#en\n * The delegate of spine vertex effect\n * !#zh\n * Spine 顶点动画代理\n * @class VertexEffectDelegate\n */\nsp.VertexEffectDelegate = cc.Class({\n name: 'sp.VertexEffectDelegate',\n\n ctor () {\n this._vertexEffect = null;\n this._interpolation = null;\n this._effectType = 'none';\n },\n\n /**\n * !#en Clears vertex effect.\n * !#zh 清空顶点效果\n * @method clear\n */\n clear () {\n this._vertexEffect = null;\n this._interpolation = null;\n this._effectType = 'none';\n },\n\n /**\n * !#en Inits delegate with jitter effect\n * !#zh 设置顶点抖动效果\n * @method initJitter\n * @param {Number} jitterX\n * @param {Number} jitterY\n */\n initJitter (jitterX, jitterY) {\n this._effectType = 'jitter';\n this._vertexEffect = new spine.JitterEffect(jitterX, jitterY);\n return this._vertexEffect;\n },\n\n /**\n * !#en Inits delegate with swirl effect\n * !#zh 设置顶点漩涡效果\n * @method initSwirlWithPow\n * @param {Number} radius \n * @param {Number} power\n * @return {sp.spine.JitterEffect}\n */\n initSwirlWithPow(radius, power) {\n this._interpolation = new spine.Pow(power);\n this._vertexEffect = new spine.SwirlEffect(radius, this._interpolation);\n return this._vertexEffect;\n },\n\n /**\n * !#en Inits delegate with swirl effect\n * !#zh 设置顶点漩涡效果\n * @method initSwirlWithPowOut\n * @param {Number} radius \n * @param {Number} power\n * @return {sp.spine.SwirlEffect}\n */\n initSwirlWithPowOut(radius, power) {\n this._interpolation = new spine.PowOut(power);\n this._vertexEffect = new spine.SwirlEffect(radius, this._interpolation);\n return this._vertexEffect;\n },\n\n /**\n * !#en Gets jitter vertex effect\n * !#zh 获取顶点抖动效果\n * @method getJitterVertexEffect\n * @return {sp.spine.JitterEffect}\n */\n getJitterVertexEffect () {\n return this._vertexEffect;\n },\n\n /**\n * !#en Gets swirl vertex effect\n * !#zh 获取顶点漩涡效果\n * @method getSwirlVertexEffect\n * @return {sp.spine.SwirlEffect}\n */\n getSwirlVertexEffect () {\n return this._vertexEffect;\n },\n\n /**\n * !#en Gets vertex effect\n * !#zh 获取顶点效果\n * @method getVertexEffect\n * @return {sp.spine.JitterEffect|sp.spine.SwirlEffect}\n */\n getVertexEffect () {\n return this._vertexEffect;\n },\n\n /**\n * !#en Gets effect type\n * !#zh 获取效果类型\n * @method getEffectType\n * @return {String}\n */\n getEffectType () {\n return this._effectType;\n }\n});\nmodule.exports = sp.VertexEffectDelegate;","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n// PREDEFINE\n\n// window may be undefined when first load engine from editor\nvar _global = typeof window === 'undefined' ? global : window;\n\n/**\n * !#en\n * The main namespace of Cocos2d-JS, all engine core classes, functions, properties and constants are defined in this namespace.\n * !#zh\n * Cocos 引擎的主要命名空间,引擎代码中所有的类,函数,属性和常量都在这个命名空间中定义。\n * @module cc\n * @main cc\n */\n_global.cc = _global.cc || {};\n\n// For internal usage\ncc.internal = cc.internal || {};\n\nrequire('./predefine');\n\n// polyfills\nrequire('./polyfill/string');\nrequire('./polyfill/misc');\nrequire('./polyfill/array');\nrequire('./polyfill/object');\nrequire('./polyfill/array-buffer');\nrequire('./polyfill/number');\nif (!(CC_EDITOR && Editor.isMainProcess)) {\n require('./polyfill/typescript');\n}\n\nrequire('./cocos2d/core/predefine');\n\n// LOAD COCOS2D ENGINE CODE\n\nif (!(CC_EDITOR && Editor.isMainProcess)) {\n require('./cocos2d');\n}\n\n// LOAD EXTENDS\n\nrequire('./extends');\n\nif (CC_EDITOR) {\n if (Editor.isMainProcess) {\n Editor.versions['cocos2d'] = require('./package').version;\n }\n}\n\nmodule.exports = _global.cc;","if (!ArrayBuffer.isView) {\n const TypedArray = Object.getPrototypeOf(Int8Array);\n ArrayBuffer.isView = (typeof TypedArray === 'function') ? function (obj) {\n return obj instanceof TypedArray;\n } : function (obj) {\n // old JSC, phantom, QtWebview\n if (typeof obj !== 'object') {\n return false;\n }\n let ctor = obj.constructor;\n return ctor === Float64Array || ctor === Float32Array || ctor === Uint8Array || ctor === Uint32Array || ctor === Int8Array;\n };\n}\n","if (!Array.isArray) {\n Array.isArray = function (arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n };\n}\n\nif (!Array.prototype.find) {\n Array.prototype.find = function (callback) {\n var length = this.length;\n for (var i = 0; i < length; i++) {\n var element = this[i];\n if (callback.call(this, element, i, this)) {\n return element;\n }\n }\n\n return undefined;\n };\n}\n\n// for ie 11\nif (!Array.prototype.includes) {\n Array.prototype.includes = function (value) {\n return this.indexOf(value) !== -1;\n };\n}\n","if (!Math.sign) {\n Math.sign = function (x) {\n x = +x; // convert to a number\n if (x === 0 || isNaN(x)) {\n return x;\n }\n return x > 0 ? 1 : -1;\n };\n}\n\nif (!Math.log2) {\n Math.log2 = function (x) {\n return Math.log(x) * Math.LOG2E;\n };\n}\n\nif (!Number.isInteger) {\n Number.isInteger = function (value) {\n return typeof value === 'number' && isFinite(value) && Math.floor(value) === value;\n };\n}\n\nif (CC_JSB || CC_RUNTIME || !console.time) {\n var Timer = window.performance || Date;\n var _timerTable = Object.create(null);\n console.time = function (label) {\n _timerTable[label] = Timer.now();\n };\n console.timeEnd = function (label) {\n var startTime = _timerTable[label];\n var duration = Timer.now() - startTime;\n console.log(`${label}: ${duration}ms`);\n };\n}\n","\nNumber.parseFloat = Number.parseFloat || parseFloat;\nNumber.parseInt = Number.parseInt || parseInt;\n","\n// for IE11\nif (!Object.assign) {\n Object.assign = function (target, source) {\n return cc.js.mixin(target, source);\n }\n}\n\n// for Baidu browser\n// Implementation reference to: \n// http://2ality.com/2016/02/object-getownpropertydescriptors.html\n// http://docs.w3cub.com/javascript/global_objects/reflect/ownkeys/\nif (!Object.getOwnPropertyDescriptors) {\n Object.getOwnPropertyDescriptors = function (obj) {\n let descriptors = {};\n let ownKeys = Object.getOwnPropertyNames(obj);\n if (Object.getOwnPropertySymbols) { // for IE 11\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(obj));\n }\n for(let i = 0; i < ownKeys.length; ++i){\n let key = ownKeys[i];\n descriptors[key] = Object.getOwnPropertyDescriptor(obj, key);\n }\n return descriptors;\n }\n}","if (!String.prototype.startsWith) {\n String.prototype.startsWith = function (searchString, position) {\n position = position || 0;\n return this.lastIndexOf(searchString, position) === position;\n };\n}\n\nif (!String.prototype.endsWith) {\n String.prototype.endsWith = function (searchString, position) {\n if (typeof position === 'undefined' || position > this.length) {\n position = this.length;\n }\n position -= searchString.length;\n var lastIndex = this.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n };\n}\n\nif (!String.prototype.trimLeft) {\n String.prototype.trimLeft = function () {\n return this.replace(/^\\s+/, '');\n };\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global global, define, System, Reflect, Promise */\r\n\r\n// tslib 2.0.3\r\n\r\nvar extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n\r\nwindow.__extends = function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n};\r\n\r\nwindow.__assign = Object.assign || function (t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n};\r\n\r\nwindow.__rest = function (s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n};\r\n\r\nwindow.__decorate = function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\n\r\nwindow.__param = function (paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n};\r\n\r\nwindow.__metadata = function (metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n};\r\n\r\nwindow.__awaiter = function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\n\r\nwindow.__generator = function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\n\r\nwindow.__exportStar = function(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n};\r\n\r\nwindow.__createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nwindow.__values = function (o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n};\r\n\r\nwindow.__read = function (o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n};\r\n\r\nwindow.__spread = function () {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n};\r\n\r\nwindow.__spreadArrays = function () {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nwindow.__await = function (v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n};\r\n\r\nwindow.__asyncGenerator = function (thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n};\r\n\r\nwindow.__asyncDelegator = function (o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n};\r\n\r\nwindow.__asyncValues = function (o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n};\r\n\r\nwindow.__makeTemplateObject = function (cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nwindow.__importStar = function (mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n};\r\n\r\nwindow.__importDefault = function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\n\r\nwindow.__classPrivateFieldGet = function (receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n};\r\n\r\nwindow.__classPrivateFieldSet = function (receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n};","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n// MACROS\n\n/**\n * !#zh\n * 这里是一些用来判断执行环境的宏,这些宏都是全局变量,直接访问即可。
\n * 在项目构建时,这些宏将会被预处理并根据构建的平台剔除不需要的代码,例如\n *\n * if (CC_DEBUG) {\n * cc.log('debug');\n * }\n * else {\n * cc.log('release');\n * }\n *\n * 在构建后会只剩下\n *\n * cc.log('release');\n *\n *
\n * 如需判断脚本是否运行于指定平台,可以用如下表达式:\n *\n * {\n * \"编辑器\": CC_EDITOR,\n * \"编辑器 或 预览\": CC_DEV,\n * \"编辑器 或 预览 或 构建调试\": CC_DEBUG,\n * \"网页预览\": CC_PREVIEW && !CC_JSB,\n * \"模拟器预览\": CC_PREVIEW && CC_JSB,\n * \"构建调试\": CC_BUILD && CC_DEBUG,\n * \"构建发行\": CC_BUILD && !CC_DEBUG,\n * }\n *\n * !#en\n * Here are some of the macro used to determine the execution environment, these macros are global variables, can be accessed directly.
\n * When the project is built, these macros will be preprocessed and discard unreachable code based on the built platform, for example:\n *\n * if (CC_DEBUG) {\n * cc.log('debug');\n * }\n * else {\n * cc.log('release');\n * }\n *\n * After build will become:\n *\n * cc.log('release');\n *\n *
\n * To determine whether the script is running on the specified platform, you can use the following expression:\n *\n * {\n * \"editor\": CC_EDITOR,\n * \"editor or preview\": CC_DEV,\n * \"editor or preview or build in debug mode\": CC_DEBUG,\n * \"web preview\": CC_PREVIEW && !CC_JSB,\n * \"simulator preview\": CC_PREVIEW && CC_JSB,\n * \"build in debug mode\": CC_BUILD && CC_DEBUG,\n * \"build in release mode\": CC_BUILD && !CC_DEBUG,\n * }\n *\n * @module GLOBAL-MACROS\n */\n/**\n * @property {Boolean} CC_EDITOR - Running in the editor.\n */\n/**\n * @property {Boolean} CC_PREVIEW - Preview in browser or simulator.\n */\n/**\n * @property {Boolean} CC_DEV - Running in the editor or preview.\n */\n/**\n * @property {Boolean} CC_DEBUG - Running in the editor or preview, or build in debug mode.\n */\n/**\n * @property {Boolean} CC_BUILD - Running in published project.\n */\n/**\n * @property {Boolean} CC_JSB - Running in native platform (mobile app, desktop app, or simulator).\n */\n/**\n * @property {Boolean} CC_TEST - Running in the engine's unit test.\n */\n/**\n * @property {Boolean} CC_RUNTIME - Running in runtime environments.\n */\n\n// window may be undefined when first load engine from editor\nvar _global = typeof window === 'undefined' ? global : window;\n\n/*\n * @param defaultValue - The default value is only used in the editor or preview.\n */\nfunction defineMacro (name, defaultValue) {\n // if \"global_defs\" not preprocessed by uglify, just declare them globally,\n // this may happened in release version's preview page.\n if (typeof _global[name] === 'undefined') {\n _global[name] = defaultValue;\n }\n}\n\nfunction defineDeprecatedMacroGetter (name, defaultValue) {\n if (typeof _global[name] === 'undefined') {\n Object.defineProperty(_global, name, {\n get: function () {\n let recommandedUsage;\n if (name === 'CC_WECHATGAMESUB') {\n recommandedUsage = 'cc.sys.platform === cc.sys.WECHAT_GAME_SUB';\n }\n else if (name === 'CC_WECHATGAME') {\n recommandedUsage = 'cc.sys.platform === cc.sys.WECHAT_GAME'; \n }\n else if (name === 'CC_QQPLAY') {\n recommandedUsage = 'cc.sys.platform === cc.sys.QQ_PLAY';\n }\n cc.warnID(1400, name, recommandedUsage);\n return defaultValue;\n }\n });\n }\n}\n\nfunction defined (name) {\n return typeof _global[name] === 'object';\n}\n\n// ensure CC_BUILD is defined\n// should not use window.CC_BUILD because we need get global_defs defined in uglify\ndefineMacro('CC_BUILD', false);\n\n// These default values can only be defined after building\n// If you need to modify them\n// please modify the `global_defs` in the option returned by `gulp/util/utils.js: getUglifyOptions`.\nif (CC_BUILD) {\n _global.CC_BUILD = CC_BUILD;\n _global.CC_DEV = CC_DEV;\n _global.CC_DEBUG = CC_DEBUG;\n _global.CC_JSB = CC_JSB;\n _global.CC_NATIVERENDERER = CC_NATIVERENDERER;\n _global.CC_SUPPORT_JIT = CC_SUPPORT_JIT;\n _global.CC_PHYSICS_BUILTIN = CC_PHYSICS_BUILTIN;\n _global.CC_PHYSICS_CANNON = CC_PHYSICS_CANNON;\n _global.CC_EDITOR = CC_EDITOR;\n _global.CC_PREVIEW = CC_PREVIEW;\n _global.CC_TEST = CC_TEST;\n _global.CC_RUNTIME = CC_RUNTIME;\n _global.CC_JSB = CC_JSB;\n}\nelse {\n defineMacro('CC_DEV', true); // (CC_EDITOR && !CC_BUILD) || CC_PREVIEW || CC_TEST\n defineMacro('CC_DEBUG', true); // CC_DEV || Debug Build\n defineMacro('CC_JSB', defined('jsb'));\n defineMacro('CC_NATIVERENDERER', defined('jsb'));\n defineMacro('CC_SUPPORT_JIT', true);\n defineMacro('CC_PHYSICS_BUILTIN', false);\n defineMacro('CC_PHYSICS_CANNON', true);\n defineMacro('CC_EDITOR', defined('Editor') && defined('process') && ('electron' in process.versions));\n defineMacro('CC_PREVIEW', !CC_EDITOR);\n defineMacro('CC_TEST', defined('tap') || defined('QUnit'));\n defineMacro('CC_RUNTIME', 'function' === typeof loadRuntime);\n defineMacro('CC_JSB', defined('jsb') && !CC_RUNTIME);\n}\n\n// deprecated \nconst WECHATGAMESUB = !!(defined('wx') && wx.getSharedCanvas);\nconst WECHATGAME = !!(defined('wx') && (wx.getSystemInfoSync || wx.getSharedCanvas));\nconst QQPLAY = defined('bk');\ndefineDeprecatedMacroGetter('CC_WECHATGAMESUB', WECHATGAMESUB);\ndefineDeprecatedMacroGetter('CC_WECHATGAME', WECHATGAME);\ndefineDeprecatedMacroGetter('CC_QQPLAY', QQPLAY);\n\nif (CC_DEV) {\n /**\n * contains internal apis for unit tests\n * @expose\n */\n cc._Test = {};\n}\n\n/**\n * @module cc\n */\n\n/**\n * The current version of Cocos2d being used.
\n * Please DO NOT remove this String, it is an important flag for bug tracking.
\n * If you post a bug to forum, please attach this flag.\n * @property {String} ENGINE_VERSION\n */\nconst engineVersion = '2.4.5';\n_global['CocosEngine'] = cc.ENGINE_VERSION = engineVersion;\n"],"sourceRoot":"./"} \ No newline at end of file diff --git a/demo/web-desktop/favicon.8de18.ico b/demo/web-desktop/favicon.8de18.ico new file mode 100644 index 0000000000000000000000000000000000000000..0bd33cd2ae958e377836c9ca630aaeb07349aa43 GIT binary patch literal 1150 zcmah{%}-N75MQE+M?HD=rilk*j0Y1B{t2E;xOgxz8jS`eMuPZ(fTF}=peYnfErqsN z1WJQ^8mNM#h*)fBp)IsUYDES5UE0TM$C-UT)1c9LncbP+%x`vP-!fK&-@bhe*8}Y0 zZpQXA#txw(gouRW#!g}Ee`08EJfTx5G~Gs>YtU+r3|PCPmJYqUt*KsXP%BUVi*M8@ z)ua8r5LyXBCXlxYgjQGJ^*|pOH7f1jYMAxfH%`X~AjzRBpFDsjMJ+s6 z)q_#1hD=uAF_+T;-5pwcVGT=XyV~P+@wm7xLS1D!)ZM=YRBvW#0;D#HsU|-kakME~AH=Rzyqq}9GYf*AvUSiQGC?8jYra=LTc$~v?GjW$B2={4znw?~PbPz6|Jp-L>t&q>>c^%uxE0bf^z9b0SJjbMa z1_o_2w=8^xq7W_V6hu^<&Fcy*So6aK%hd#sfq>bBa;SfBm zD8*T&_aXD?pZYzXBlHF^r$H2@x^f@izJ~cd;9G-P`#WAsUMOcR{H2w+vTSaCAE8+b z#r}5ecONoNIg#~so6IZR + + + + + Cocos Creator | Cocos-Service-Pack-Demo + + + + + + + + + + + + + + + + +

Cocos-Service-Pack-Demo

+ +
+ +
+
+ +
+
+
+ + + + + + + + + diff --git a/demo/web-desktop/main.cf932.js b/demo/web-desktop/main.cf932.js new file mode 100644 index 00000000..da9f86e4 --- /dev/null +++ b/demo/web-desktop/main.cf932.js @@ -0,0 +1,144 @@ +window.boot = function () { + var settings = window._CCSettings; + window._CCSettings = undefined; + var onProgress = null; + + var RESOURCES = cc.AssetManager.BuiltinBundleName.RESOURCES; + var INTERNAL = cc.AssetManager.BuiltinBundleName.INTERNAL; + var MAIN = cc.AssetManager.BuiltinBundleName.MAIN; + function setLoadingDisplay () { + // Loading splash scene + var splash = document.getElementById('splash'); + var progressBar = splash.querySelector('.progress-bar span'); + onProgress = function (finish, total) { + var percent = 100 * finish / total; + if (progressBar) { + progressBar.style.width = percent.toFixed(2) + '%'; + } + }; + splash.style.display = 'block'; + progressBar.style.width = '0%'; + + cc.director.once(cc.Director.EVENT_AFTER_SCENE_LAUNCH, function () { + splash.style.display = 'none'; + }); + } + + var onStart = function () { + + cc.view.enableRetina(true); + cc.view.resizeWithBrowserSize(true); + + if (cc.sys.isBrowser) { + setLoadingDisplay(); + } + + if (cc.sys.isMobile) { + if (settings.orientation === 'landscape') { + cc.view.setOrientation(cc.macro.ORIENTATION_LANDSCAPE); + } + else if (settings.orientation === 'portrait') { + cc.view.setOrientation(cc.macro.ORIENTATION_PORTRAIT); + } + cc.view.enableAutoFullScreen([ + cc.sys.BROWSER_TYPE_BAIDU, + cc.sys.BROWSER_TYPE_BAIDU_APP, + cc.sys.BROWSER_TYPE_WECHAT, + cc.sys.BROWSER_TYPE_MOBILE_QQ, + cc.sys.BROWSER_TYPE_MIUI, + cc.sys.BROWSER_TYPE_HUAWEI, + cc.sys.BROWSER_TYPE_UC, + ].indexOf(cc.sys.browserType) < 0); + } + + // Limit downloading max concurrent task to 2, + // more tasks simultaneously may cause performance draw back on some android system / browsers. + // You can adjust the number based on your own test result, you have to set it before any loading process to take effect. + if (cc.sys.isBrowser && cc.sys.os === cc.sys.OS_ANDROID) { + cc.assetManager.downloader.maxConcurrency = 2; + cc.assetManager.downloader.maxRequestsPerFrame = 2; + } + + var launchScene = settings.launchScene; + var bundle = cc.assetManager.bundles.find(function (b) { + return b.getSceneInfo(launchScene); + }); + + bundle.loadScene(launchScene, null, onProgress, + function (err, scene) { + if (!err) { + cc.director.runSceneImmediate(scene); + if (cc.sys.isBrowser) { + // show canvas + var canvas = document.getElementById('GameCanvas'); + canvas.style.visibility = ''; + var div = document.getElementById('GameDiv'); + if (div) { + div.style.backgroundImage = ''; + } + console.log('Success to load scene: ' + launchScene); + } + } + } + ); + + }; + + var option = { + id: 'GameCanvas', + debugMode: settings.debug ? cc.debug.DebugMode.INFO : cc.debug.DebugMode.ERROR, + showFPS: settings.debug, + frameRate: 60, + groupList: settings.groupList, + collisionMatrix: settings.collisionMatrix, + }; + + cc.assetManager.init({ + bundleVers: settings.bundleVers, + remoteBundles: settings.remoteBundles, + server: settings.server + }); + + var bundleRoot = [INTERNAL]; + settings.hasResourcesBundle && bundleRoot.push(RESOURCES); + + var count = 0; + function cb (err) { + if (err) return console.error(err.message, err.stack); + count++; + if (count === bundleRoot.length + 1) { + cc.assetManager.loadBundle(MAIN, function (err) { + if (!err) cc.game.run(option, onStart); + }); + } + } + + cc.assetManager.loadScript(settings.jsList.map(function (x) { return 'src/' + x;}), cb); + + for (var i = 0; i < bundleRoot.length; i++) { + cc.assetManager.loadBundle(bundleRoot[i], cb); + } +}; + +if (window.jsb) { + var isRuntime = (typeof loadRuntime === 'function'); + if (isRuntime) { + require('src/settings.49c14.js'); + require('src/cocos2d-runtime.js'); + if (CC_PHYSICS_BUILTIN || CC_PHYSICS_CANNON) { + require('src/physics.js'); + } + require('jsb-adapter/engine/index.js'); + } + else { + require('src/settings.49c14.js'); + require('src/cocos2d-jsb.js'); + if (CC_PHYSICS_BUILTIN || CC_PHYSICS_CANNON) { + require('src/physics.js'); + } + require('jsb-adapter/jsb-engine.js'); + } + + cc.macro.CLEANUP_IMAGE_CACHE = true; + window.boot(); +} \ No newline at end of file diff --git a/demo/web-desktop/splash.85cfd.png b/demo/web-desktop/splash.85cfd.png new file mode 100644 index 0000000000000000000000000000000000000000..1e93bf96758676ddab9ed8c7f6a89445944d987d GIT binary patch literal 5884 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 KAZ3c?f&T+Pkw``W literal 0 HcmV?d00001 diff --git a/demo/web-desktop/src/settings.49c14.js b/demo/web-desktop/src/settings.49c14.js new file mode 100644 index 00000000..29d4efea --- /dev/null +++ b/demo/web-desktop/src/settings.49c14.js @@ -0,0 +1,29 @@ +window._CCSettings = { + platform: "web-desktop", + groupList: [ + "default" + ], + collisionMatrix: [ + [ + true + ] + ], + hasResourcesBundle: false, + hasStartSceneBundle: false, + remoteBundles: [], + subpackages: [], + launchScene: "db://assets/main.fire", + orientation: "landscape", + debug: true, + jsList: [], + bundleVers: { + sp: "de22b", + internal: "8360b", + common: "40d4c", + home: "9b664", + "multi-render": "f7eed", + spine: "251d3", + "text-render": "697bc", + main: "fb25a" + } +}; diff --git a/demo/web-desktop/style-desktop.81ede.css b/demo/web-desktop/style-desktop.81ede.css new file mode 100644 index 00000000..71876492 --- /dev/null +++ b/demo/web-desktop/style-desktop.81ede.css @@ -0,0 +1,116 @@ +body { + cursor: default; + padding: 0; + border: 0; + margin: 0; + + text-align: center; + background-color: white; + font-family: Helvetica, Verdana, Arial, sans-serif; +} + +body, canvas, div { + outline: none; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + -khtml-user-select: none; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +/* Remove spin of input type number */ +input::-webkit-outer-spin-button, +input::-webkit-inner-spin-button { + /* display: none; <- Crashes Chrome on hover */ + -webkit-appearance: none; + margin: 0; /* <-- Apparently some margin are still there even though it's hidden */ +} + +#Cocos2dGameContainer { + position: absolute; + margin: 0; + overflow: hidden; + left: 0px; + top: 0px; +} + +canvas { + background-color: rgba(0, 0, 0, 0); +} + +a:link, a:visited { + color: #000; +} + +a:active, a:hover { + color: #666; +} + +p.header { + font-size: small; +} + +p.footer { + font-size: x-small; +} + +#splash { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + + background: #171717 url(./splash.85cfd.png) no-repeat center; + background-size: 350px; +} + +.progress-bar { + background-color: #1a1a1a; + position: absolute; + left: 50%; + top: 80%; + height: 5px; + width: 300px; + margin: 0 -150px; + border-radius: 5px; + box-shadow: 0 1px 5px #000 inset, 0 1px 0 #444; +} + +.progress-bar span { + display: block; + height: 100%; + border-radius: 5px; + box-shadow: 0 1px 0 rgba(255, 255, 255, .5) inset; + transition: width .4s ease-in-out; + background-color: #3dc5de; +} + +.stripes span { + background-size: 30px 30px; + background-image: linear-gradient(135deg, rgba(255, 255, 255, .15) 25%, transparent 25%, + transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, + transparent 75%, transparent); + + animation: animate-stripes 1s linear infinite; +} + +@keyframes animate-stripes { + 0% {background-position: 0 0;} 100% {background-position: 60px 0;} +} + +h1 { + color: #444; + text-shadow: 3px 3px 15px; +} + +#GameDiv { + width: 800px; + height: 450px; + margin: 0 auto; + background: black; + position: relative; + border: 3px solid black; + border-radius: 6px; + box-shadow: 0 5px 40px #333 +} diff --git a/demo/web-desktop/style-mobile.25fc5.css b/demo/web-desktop/style-mobile.25fc5.css new file mode 100644 index 00000000..8e0fe7f9 --- /dev/null +++ b/demo/web-desktop/style-mobile.25fc5.css @@ -0,0 +1,124 @@ +html { + -ms-touch-action: none; +} + +body, canvas, div { + display: block; + outline: none; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + + user-select: none; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + -khtml-user-select: none; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +/* Remove spin of input type number */ +input::-webkit-outer-spin-button, +input::-webkit-inner-spin-button { + /* display: none; <- Crashes Chrome on hover */ + -webkit-appearance: none; + margin: 0; /* <-- Apparently some margin are still there even though it's hidden */ +} + +body { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + padding: 0; + border: 0; + margin: 0; + + cursor: default; + color: #888; + background-color: #333; + + text-align: center; + font-family: Helvetica, Verdana, Arial, sans-serif; + + display: flex; + flex-direction: column; + + /* fix bug: https://github.com/cocos-creator/2d-tasks/issues/791 */ + /* overflow cannot be applied in Cocos2dGameContainer, + otherwise child elements will be hidden when Cocos2dGameContainer rotated 90 deg */ + overflow: hidden; +} + +#Cocos2dGameContainer { + position: absolute; + margin: 0; + left: 0px; + top: 0px; + + display: -webkit-box; + -webkit-box-orient: horizontal; + -webkit-box-align: center; + -webkit-box-pack: center; +} + +canvas { + background-color: rgba(0, 0, 0, 0); +} + +a:link, a:visited { + color: #666; +} + +a:active, a:hover { + color: #666; +} + +p.header { + font-size: small; +} + +p.footer { + font-size: x-small; +} + +#splash { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: #171717 url(./splash.85cfd.png) no-repeat center; + background-size: 45%; +} + +.progress-bar { + position: absolute; + left: 27.5%; + top: 80%; + height: 3px; + padding: 2px; + width: 45%; + border-radius: 7px; + box-shadow: 0 1px 5px #000 inset, 0 1px 0 #444; +} + +.progress-bar span { + display: block; + height: 100%; + border-radius: 3px; + transition: width .4s ease-in-out; + background-color: #3dc5de; +} + +.stripes span { + background-size: 30px 30px; + background-image: linear-gradient(135deg, rgba(255, 255, 255, .15) 25%, transparent 25%, + transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, + transparent 75%, transparent); + + animation: animate-stripes 1s linear infinite; +} + +@keyframes animate-stripes { + 0% {background-position: 0 0;} 100% {background-position: 60px 0;} +} diff --git a/demo/web-mobile/assets/common/config.40d4c.json b/demo/web-mobile/assets/common/config.40d4c.json new file mode 100644 index 00000000..5f0e3a33 --- /dev/null +++ b/demo/web-mobile/assets/common/config.40d4c.json @@ -0,0 +1,204 @@ +{ + "paths": { + "3e30KyALhNkZttyuW0A6EU": [ + "effects/custom-2d-sprite", + "cc.EffectAsset" + ], + "e8ql4cBzBOvoGh5/oNub59": [ + "fonts/SFNSMonoItalic", + "cc.TTFFont" + ], + "80AR/OlBFOoajT99htLYeJ": [ + "fonts/normalFont", + "cc.BitmapFont" + ], + "45vlnzVlVDaZ6fRVyB0t3Z": [ + "fonts/normalFont", + "cc.Texture2D" + ], + "92aqwImq1Ik7GrBSFnKTF2": [ + "fonts/normalFont", + "cc.SpriteFrame", + 1 + ], + "c1Hf3Sl8ZAnJwP/fpoHxap": [ + "images/1655112479313", + "cc.Texture2D" + ], + "a7ZscqX+JCIZRS157bMyhq": [ + "images/1655112479313", + "cc.SpriteFrame", + 1 + ], + "62MQQadaVK8qQN8n6UmJAa": [ + "images/1655112514006", + "cc.Texture2D" + ], + "85yTK+9shIo7RQfQ1TDEUi": [ + "images/1655112514006", + "cc.SpriteFrame", + 1 + ], + "39jYWzSTREwI2OOBK5nwFe": [ + "images/1655112526123", + "cc.Texture2D" + ], + "09o3P/9gBP/Yc7AnxUBZ+Q": [ + "images/1655112526123", + "cc.SpriteFrame", + 1 + ], + "d0bST/wYpJQIL5T+PCq46W": [ + "images/1655112538161", + "cc.Texture2D" + ], + "70VXjGE0JMUqGli0jmCmTF": [ + "images/1655112538161", + "cc.SpriteFrame", + 1 + ], + "68Q/ALDvRLfKrAQu5CY15V": [ + "images/1655112548981", + "cc.Texture2D" + ], + "87/8ZHBEVIkKeNxmalrn9r": [ + "images/1655112548981", + "cc.SpriteFrame", + 1 + ], + "70JFWsm5JN17FDywI0Lb5I": [ + "images/1655112563832", + "cc.Texture2D" + ], + "d0Bu8c2MBCKJc+mKBWzjsJ": [ + "images/1655112563832", + "cc.SpriteFrame", + 1 + ], + "1cijzBpFJCdoSNK98w5oUq": [ + "images/1655112624336", + "cc.Texture2D" + ], + "8029xEf4FHy49dWo6NK8c7": [ + "images/1655112624336", + "cc.SpriteFrame", + 1 + ], + "2cDGL4OAVN0ZbEl3w2urT8": [ + "materials/custom-2d-sprite", + "cc.Material" + ], + "bc2ZOJo5NCbrI0FXxitEvE": [ + "spines/spineboy", + "sp.SkeletonData" + ], + "d9xFMK7wVFwbAS60aG9McP": [ + "spines/spineboy", + "cc.Texture2D" + ], + "f2P0YcCjtHDqebnuMp4CMZ": [ + "spines/spineboy", + "cc.SpriteFrame", + 1 + ], + "b6OkwTsm1LK5cvRTwFehiy": [ + "spines/spineboy", + "cc.TextAsset" + ] + }, + "uuids": [ + "3e30KyALhNkZttyuW0A6EU", + "80AR/OlBFOoajT99htLYeJ", + "45vlnzVlVDaZ6fRVyB0t3Z", + "92aqwImq1Ik7GrBSFnKTF2", + "e8ql4cBzBOvoGh5/oNub59", + "c1Hf3Sl8ZAnJwP/fpoHxap", + "a7ZscqX+JCIZRS157bMyhq", + "62MQQadaVK8qQN8n6UmJAa", + "85yTK+9shIo7RQfQ1TDEUi", + "39jYWzSTREwI2OOBK5nwFe", + "09o3P/9gBP/Yc7AnxUBZ+Q", + "d0bST/wYpJQIL5T+PCq46W", + "70VXjGE0JMUqGli0jmCmTF", + "68Q/ALDvRLfKrAQu5CY15V", + "87/8ZHBEVIkKeNxmalrn9r", + "70JFWsm5JN17FDywI0Lb5I", + "d0Bu8c2MBCKJc+mKBWzjsJ", + "1cijzBpFJCdoSNK98w5oUq", + "8029xEf4FHy49dWo6NK8c7", + "2cDGL4OAVN0ZbEl3w2urT8", + "bc2ZOJo5NCbrI0FXxitEvE", + "d9xFMK7wVFwbAS60aG9McP", + "f2P0YcCjtHDqebnuMp4CMZ", + "b6OkwTsm1LK5cvRTwFehiy", + "6eBWFz0oVHPLIGQKf/9Thu" + ], + "scenes": {}, + "redirect": [], + "deps": [], + "packs": { + "0b9ccc5db": [ + "09o3P/9gBP/Yc7AnxUBZ+Q", + "1cijzBpFJCdoSNK98w5oUq", + "2cDGL4OAVN0ZbEl3w2urT8", + "39jYWzSTREwI2OOBK5nwFe", + "3e30KyALhNkZttyuW0A6EU", + "45vlnzVlVDaZ6fRVyB0t3Z", + "62MQQadaVK8qQN8n6UmJAa", + "68Q/ALDvRLfKrAQu5CY15V", + "6eBWFz0oVHPLIGQKf/9Thu", + "70JFWsm5JN17FDywI0Lb5I", + "70VXjGE0JMUqGli0jmCmTF", + "80AR/OlBFOoajT99htLYeJ", + "8029xEf4FHy49dWo6NK8c7", + "85yTK+9shIo7RQfQ1TDEUi", + "87/8ZHBEVIkKeNxmalrn9r", + "92aqwImq1Ik7GrBSFnKTF2", + "a7ZscqX+JCIZRS157bMyhq", + "b6OkwTsm1LK5cvRTwFehiy", + "bc2ZOJo5NCbrI0FXxitEvE", + "c1Hf3Sl8ZAnJwP/fpoHxap", + "d0Bu8c2MBCKJc+mKBWzjsJ", + "d0bST/wYpJQIL5T+PCq46W", + "d9xFMK7wVFwbAS60aG9McP", + "e8ql4cBzBOvoGh5/oNub59", + "f2P0YcCjtHDqebnuMp4CMZ" + ] + }, + "name": "common", + "importBase": "import", + "nativeBase": "native", + "debug": true, + "isZip": false, + "encrypted": false, + "versions": { + "import": [ + "0b9ccc5db", + "16f5e" + ], + "native": [ + "1cijzBpFJCdoSNK98w5oUq", + "91637", + "39jYWzSTREwI2OOBK5nwFe", + "2eb47", + "45vlnzVlVDaZ6fRVyB0t3Z", + "ca872", + "62MQQadaVK8qQN8n6UmJAa", + "40d17", + "68Q/ALDvRLfKrAQu5CY15V", + "9a531", + "6eBWFz0oVHPLIGQKf/9Thu", + "6d3cf", + "70JFWsm5JN17FDywI0Lb5I", + "7b3fa", + "c1Hf3Sl8ZAnJwP/fpoHxap", + "d86d7", + "d0bST/wYpJQIL5T+PCq46W", + "9c555", + "d9xFMK7wVFwbAS60aG9McP", + "abf6b", + "e8ql4cBzBOvoGh5/oNub59", + "a6625" + ] + } +} \ No newline at end of file diff --git a/demo/web-mobile/assets/common/import/0b/0b9ccc5db.16f5e.json b/demo/web-mobile/assets/common/import/0b/0b9ccc5db.16f5e.json new file mode 100644 index 00000000..424057b6 --- /dev/null +++ b/demo/web-mobile/assets/common/import/0b/0b9ccc5db.16f5e.json @@ -0,0 +1,9740 @@ +[ + 1, + [ + "62MQQadaVK8qQN8n6UmJAa", + "d9xFMK7wVFwbAS60aG9McP", + "39jYWzSTREwI2OOBK5nwFe", + "6eBWFz0oVHPLIGQKf/9Thu", + "3e30KyALhNkZttyuW0A6EU", + "d0bST/wYpJQIL5T+PCq46W", + "92aqwImq1Ik7GrBSFnKTF2", + "1cijzBpFJCdoSNK98w5oUq", + "68Q/ALDvRLfKrAQu5CY15V", + "45vlnzVlVDaZ6fRVyB0t3Z", + "c1Hf3Sl8ZAnJwP/fpoHxap", + "70JFWsm5JN17FDywI0Lb5I" + ], + [ + "_textureSetter", + "texture", + "texture2", + "_effectAsset", + "spriteFrame" + ], + [ + "cc.Texture2D", + "cc.SpriteFrame", + [ + "cc.Material", + [ + "_name", + "_techniqueData" + ], + 2, + 11 + ], + [ + "cc.EffectAsset", + [ + "_name", + "shaders", + "techniques" + ], + 0 + ], + [ + "cc.BitmapFont", + [ + "_name", + "fontSize", + "_fntConfig" + ], + 0 + ], + [ + "cc.TextAsset", + [ + "_name", + "text" + ], + 1 + ], + [ + "sp.SkeletonData", + [ + "_name", + "_atlasText", + "textureNames", + "_skeletonJson", + "textures" + ], + -1, + 3 + ], + [ + "cc.TTFFont", + [ + "_name", + "_native" + ], + 1 + ] + ], + [ + [ + 2, + 0, + 1, + 2 + ], + [ + 3, + 0, + 1, + 2, + 4 + ], + [ + 4, + 0, + 1, + 2, + 4 + ], + [ + 5, + 0, + 1, + 3 + ], + [ + 6, + 0, + 1, + 2, + 3, + 4, + 5 + ], + [ + 7, + 0, + 1, + 3 + ] + ], + [ + [ + [ + { + "name": "1655112526123", + "rect": [ + 0, + 0, + 656, + 992 + ], + "offset": [ + 0, + 0 + ], + "originalSize": [ + 656, + 992 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 0 + ], + [ + 2 + ] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + [ + 0, + "custom-2d-sprite", + [ + {}, + "0", + 11, + [ + { + "defines": { + "USE_TEXTURE": true, + "USE_MULTI_TEXTURE": true + } + }, + "props", + 11, + [ + { + "blur": 0.01, + "wh_ratio": 1, + "radius": 0.45 + }, + "texture", + 6, + 0, + "texture2", + 6, + 1 + ] + ] + ] + ] + ], + 0, + 0, + [ + 0, + 0, + 0 + ], + [ + 1, + 2, + 3 + ], + [ + 0, + 3, + 4 + ] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + [ + 1, + "custom-2d-sprite", + [ + { + "hash": 2734998855, + "record": null, + "name": "custom-2d-sprite|vs|fs", + "glsl3": { + "vert": "\nprecision highp float;\nuniform CCGlobal {\n mat4 cc_matView;\n mat4 cc_matViewInv;\n mat4 cc_matProj;\n mat4 cc_matProjInv;\n mat4 cc_matViewProj;\n mat4 cc_matViewProjInv;\n vec4 cc_cameraPos;\n vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nin vec3 a_position;\nin vec4 a_color;\nout vec4 v_color;\n#if USE_TEXTURE\nin vec2 a_uv0;\nout vec2 v_uv0;\n#if USE_MULTI_TEXTURE\nin float a_texId;\nout float v_texId;\n#endif\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #if USE_MULTI_TEXTURE\n v_texId = a_texId;\n #endif\n #endif\n v_color = a_color;\n gl_Position = pos;\n}", + "frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform ALPHA_TEST {\n float alphaThreshold;\n };\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nin vec4 v_color;\n#if USE_TEXTURE\nin vec2 v_uv0;\nuniform sampler2D texture;\n#if USE_MULTI_TEXTURE\nin float v_texId;\nuniform sampler2D texture2;\nuniform sampler2D texture3;\nuniform sampler2D texture4;\nuniform sampler2D texture5;\nuniform sampler2D texture6;\nuniform sampler2D texture7;\nuniform sampler2D texture8;\n#endif\n#endif\nuniform ARGS{\n float radius;\n float blur;\n vec2 center;\n float wh_ratio;\n};\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n #if USE_MULTI_TEXTURE\n if(v_texId < 1.0){\n vec4 texture_tmp = texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture\n texture_tmp.a *= texture(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture_tmp.rgb * texture_tmp.rgb);\n o.a *= texture_tmp.a;\n #else\n o *= texture_tmp;\n #endif\n } else if(v_texId < 2.0){\n vec4 texture2_tmp = texture(texture2, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture2\n texture2_tmp.a *= texture(texture2, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture2_tmp.rgb * texture2_tmp.rgb);\n o.a *= texture2_tmp.a;\n #else\n o *= texture2_tmp;\n #endif\n } else if(v_texId < 3.0){\n vec4 texture3_tmp = texture(texture3, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture3\n texture3_tmp.a *= texture(texture3, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture3_tmp.rgb * texture3_tmp.rgb);\n o.a *= texture3_tmp.a;\n #else\n o *= texture3_tmp;\n #endif\n } else if(v_texId < 4.0){\n vec4 texture4_tmp = texture(texture4, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture4\n texture4_tmp.a *= texture(texture4, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture4_tmp.rgb * texture4_tmp.rgb);\n o.a *= texture4_tmp.a;\n #else\n o *= texture4_tmp;\n #endif\n } else if(v_texId < 5.0){\n vec4 texture5_tmp = texture(texture5, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture5\n texture5_tmp.a *= texture(texture5, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture5_tmp.rgb * texture5_tmp.rgb);\n o.a *= texture5_tmp.a;\n #else\n o *= texture5_tmp;\n #endif\n } else if(v_texId < 6.0){\n vec4 texture6_tmp = texture(texture6, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture6\n texture6_tmp.a *= texture(texture6, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture6_tmp.rgb * texture6_tmp.rgb);\n o.a *= texture6_tmp.a;\n #else\n o *= texture6_tmp;\n #endif\n } else if(v_texId < 7.0){\n vec4 texture7_tmp = texture(texture7, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture7\n texture7_tmp.a *= texture(texture7, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture7_tmp.rgb * texture7_tmp.rgb);\n o.a *= texture7_tmp.a;\n #else\n o *= texture7_tmp;\n #endif\n } else {\n vec4 texture8_tmp = texture(texture8, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture8\n texture8_tmp.a *= texture(texture8, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture8_tmp.rgb * texture8_tmp.rgb);\n o.a *= texture8_tmp.a;\n #else\n o *= texture8_tmp;\n #endif\n }\n #else\n vec4 texture_tmp = texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture\n texture_tmp.a *= texture(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture_tmp.rgb * texture_tmp.rgb);\n o.a *= texture_tmp.a;\n #else\n o *= texture_tmp;\n #endif\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n float circle = radius * radius;\n float rx = center.x * wh_ratio;\n float ry = center.y;\n float dis = (v_uv0.x * wh_ratio - rx) * (v_uv0.x * wh_ratio - rx) + (v_uv0.y - ry) * (v_uv0.y - ry);\n o.a = smoothstep(circle, circle - blur, dis);\n gl_FragColor = o;\n}" + }, + "glsl1": { + "vert": "\nprecision highp float;\nuniform mat4 cc_matViewProj;\nuniform mat4 cc_matWorld;\nattribute vec3 a_position;\nattribute vec4 a_color;\nvarying vec4 v_color;\n#if USE_TEXTURE\nattribute vec2 a_uv0;\nvarying vec2 v_uv0;\n#if USE_MULTI_TEXTURE\nattribute float a_texId;\nvarying float v_texId;\n#endif\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #if USE_MULTI_TEXTURE\n v_texId = a_texId;\n #endif\n #endif\n v_color = a_color;\n gl_Position = pos;\n}", + "frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform float alphaThreshold;\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvarying vec4 v_color;\n#if USE_TEXTURE\nvarying vec2 v_uv0;\nuniform sampler2D texture;\n#if USE_MULTI_TEXTURE\nvarying float v_texId;\nuniform sampler2D texture2;\nuniform sampler2D texture3;\nuniform sampler2D texture4;\nuniform sampler2D texture5;\nuniform sampler2D texture6;\nuniform sampler2D texture7;\nuniform sampler2D texture8;\n#endif\n#endif\nuniform float radius;\nuniform float blur;\nuniform vec2 center;\nuniform float wh_ratio;\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n #if USE_MULTI_TEXTURE\n if(v_texId < 1.0){\n vec4 texture_tmp = texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture\n texture_tmp.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture_tmp.rgb * texture_tmp.rgb);\n o.a *= texture_tmp.a;\n #else\n o *= texture_tmp;\n #endif\n } else if(v_texId < 2.0){\n vec4 texture2_tmp = texture2D(texture2, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture2\n texture2_tmp.a *= texture2D(texture2, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture2_tmp.rgb * texture2_tmp.rgb);\n o.a *= texture2_tmp.a;\n #else\n o *= texture2_tmp;\n #endif\n } else if(v_texId < 3.0){\n vec4 texture3_tmp = texture2D(texture3, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture3\n texture3_tmp.a *= texture2D(texture3, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture3_tmp.rgb * texture3_tmp.rgb);\n o.a *= texture3_tmp.a;\n #else\n o *= texture3_tmp;\n #endif\n } else if(v_texId < 4.0){\n vec4 texture4_tmp = texture2D(texture4, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture4\n texture4_tmp.a *= texture2D(texture4, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture4_tmp.rgb * texture4_tmp.rgb);\n o.a *= texture4_tmp.a;\n #else\n o *= texture4_tmp;\n #endif\n } else if(v_texId < 5.0){\n vec4 texture5_tmp = texture2D(texture5, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture5\n texture5_tmp.a *= texture2D(texture5, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture5_tmp.rgb * texture5_tmp.rgb);\n o.a *= texture5_tmp.a;\n #else\n o *= texture5_tmp;\n #endif\n } else if(v_texId < 6.0){\n vec4 texture6_tmp = texture2D(texture6, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture6\n texture6_tmp.a *= texture2D(texture6, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture6_tmp.rgb * texture6_tmp.rgb);\n o.a *= texture6_tmp.a;\n #else\n o *= texture6_tmp;\n #endif\n } else if(v_texId < 7.0){\n vec4 texture7_tmp = texture2D(texture7, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture7\n texture7_tmp.a *= texture2D(texture7, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture7_tmp.rgb * texture7_tmp.rgb);\n o.a *= texture7_tmp.a;\n #else\n o *= texture7_tmp;\n #endif\n } else {\n vec4 texture8_tmp = texture2D(texture8, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture8\n texture8_tmp.a *= texture2D(texture8, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture8_tmp.rgb * texture8_tmp.rgb);\n o.a *= texture8_tmp.a;\n #else\n o *= texture8_tmp;\n #endif\n }\n #else\n vec4 texture_tmp = texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture\n texture_tmp.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture_tmp.rgb * texture_tmp.rgb);\n o.a *= texture_tmp.a;\n #else\n o *= texture_tmp;\n #endif\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n float circle = radius * radius;\n float rx = center.x * wh_ratio;\n float ry = center.y;\n float dis = (v_uv0.x * wh_ratio - rx) * (v_uv0.x * wh_ratio - rx) + (v_uv0.y - ry) * (v_uv0.y - ry);\n o.a = smoothstep(circle, circle - blur, dis);\n gl_FragColor = o;\n}" + }, + "builtins": { + "globals": { + "blocks": [ + { + "name": "CCGlobal", + "defines": [] + } + ], + "samplers": [] + }, + "locals": { + "blocks": [ + { + "name": "CCLocal", + "defines": [] + } + ], + "samplers": [] + } + }, + "defines": [ + { + "name": "USE_TEXTURE", + "type": "boolean", + "defines": [] + }, + { + "name": "USE_MULTI_TEXTURE", + "type": "boolean", + "defines": [ + "USE_TEXTURE" + ] + }, + { + "name": "CC_USE_MODEL", + "type": "boolean", + "defines": [] + }, + { + "name": "USE_ALPHA_TEST", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture", + "type": "boolean", + "defines": [ + "USE_TEXTURE" + ] + }, + { + "name": "INPUT_IS_GAMMA", + "type": "boolean", + "defines": [ + "USE_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture2", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture3", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture4", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture5", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture6", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture7", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture8", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + } + ], + "blocks": [ + { + "name": "ALPHA_TEST", + "binding": 0, + "members": [ + { + "name": "alphaThreshold", + "type": 13, + "count": 1 + } + ], + "defines": [ + "USE_ALPHA_TEST" + ] + }, + { + "name": "ARGS", + "binding": 1, + "members": [ + { + "name": "radius", + "type": 13, + "count": 1 + }, + { + "name": "blur", + "type": 13, + "count": 1 + }, + { + "name": "center", + "type": 14, + "count": 1 + }, + { + "name": "wh_ratio", + "type": 13, + "count": 1 + } + ], + "defines": [] + } + ], + "samplers": [ + { + "name": "texture", + "type": 29, + "count": 1, + "binding": 30, + "defines": [ + "USE_TEXTURE" + ] + }, + { + "name": "texture2", + "type": 29, + "count": 1, + "binding": 31, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "texture3", + "type": 29, + "count": 1, + "binding": 32, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "texture4", + "type": 29, + "count": 1, + "binding": 33, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "texture5", + "type": 29, + "count": 1, + "binding": 34, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "texture6", + "type": 29, + "count": 1, + "binding": 35, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "texture7", + "type": 29, + "count": 1, + "binding": 36, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "texture8", + "type": 29, + "count": 1, + "binding": 37, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + } + ] + } + ], + [ + { + "passes": [ + { + "program": "custom-2d-sprite|vs|fs", + "blendState": { + "targets": [ + { + "blend": true + } + ] + }, + "rasterizerState": { + "cullMode": 0 + }, + "properties": { + "texture": { + "value": "white", + "type": 29 + }, + "texture2": { + "value": "white", + "type": 29 + }, + "texture3": { + "value": "white", + "type": 29 + }, + "texture4": { + "value": "white", + "type": 29 + }, + "texture5": { + "value": "white", + "type": 29 + }, + "texture6": { + "value": "white", + "type": 29 + }, + "texture7": { + "value": "white", + "type": 29 + }, + "texture8": { + "value": "white", + "type": 29 + }, + "alphaThreshold": { + "type": 13, + "value": [ + 0.5 + ] + }, + "wh_ratio": { + "type": 13, + "value": [ + 1 + ], + "editor": { + "tooltip": "宽高比" + } + }, + "blur": { + "type": 13, + "value": [ + 0.35 + ], + "editor": { + "tooltip": "光圈模糊程度" + } + }, + "radius": { + "type": 13, + "value": [ + 0.5 + ], + "editor": { + "tooltip": "光圈半径" + } + }, + "center": { + "type": 14, + "value": [ + 0.5, + 0.5 + ], + "editor": { + "tooltip": "光圈起点" + } + } + } + } + ] + } + ] + ] + ], + 0, + 0, + [], + [], + [] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + { + "name": "1655112538161", + "rect": [ + 0, + 0, + 596, + 672 + ], + "offset": [ + 0, + 0 + ], + "originalSize": [ + 596, + 672 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 0 + ], + [ + 5 + ] + ], + [ + [ + [ + 2, + "normalFont", + 64, + { + "commonHeight": 72, + "fontSize": 64, + "atlasName": "normalFont.png", + "fontDefDictionary": { + "32": { + "xOffset": 0, + "yOffset": 58, + "xAdvance": 18, + "rect": { + "x": 446, + "y": 710, + "width": 0, + "height": 0 + } + }, + "33": { + "xOffset": 6, + "yOffset": 11, + "xAdvance": 18, + "rect": { + "x": 328, + "y": 661, + "width": 8, + "height": 47 + } + }, + "34": { + "xOffset": 3, + "yOffset": 10, + "xAdvance": 23, + "rect": { + "x": 284, + "y": 710, + "width": 18, + "height": 18 + } + }, + "35": { + "xOffset": 1, + "yOffset": 10, + "xAdvance": 36, + "rect": { + "x": 221, + "y": 560, + "width": 36, + "height": 49 + } + }, + "36": { + "xOffset": 2, + "yOffset": 7, + "xAdvance": 36, + "rect": { + "x": 59, + "y": 500, + "width": 32, + "height": 58 + } + }, + "37": { + "xOffset": 4, + "yOffset": 10, + "xAdvance": 57, + "rect": { + "x": 661, + "y": 500, + "width": 51, + "height": 50 + } + }, + "38": { + "xOffset": 3, + "yOffset": 10, + "xAdvance": 43, + "rect": { + "x": 139, + "y": 560, + "width": 40, + "height": 49 + } + }, + "39": { + "xOffset": 3, + "yOffset": 10, + "xAdvance": 12, + "rect": { + "x": 304, + "y": 710, + "width": 8, + "height": 18 + } + }, + "40": { + "xOffset": 4, + "yOffset": 9, + "xAdvance": 21, + "rect": { + "x": 109, + "y": 2, + "width": 17, + "height": 62 + } + }, + "41": { + "xOffset": 4, + "yOffset": 9, + "xAdvance": 21, + "rect": { + "x": 128, + "y": 2, + "width": 17, + "height": 62 + } + }, + "42": { + "xOffset": 2, + "yOffset": 10, + "xAdvance": 25, + "rect": { + "x": 260, + "y": 710, + "width": 22, + "height": 21 + } + }, + "43": { + "xOffset": 4, + "yOffset": 19, + "xAdvance": 37, + "rect": { + "x": 162, + "y": 710, + "width": 32, + "height": 32 + } + }, + "44": { + "xOffset": 5, + "yOffset": 50, + "xAdvance": 18, + "rect": { + "x": 314, + "y": 710, + "width": 8, + "height": 17 + } + }, + "45": { + "xOffset": 2, + "yOffset": 37, + "xAdvance": 21, + "rect": { + "x": 384, + "y": 710, + "width": 19, + "height": 7 + } + }, + "46": { + "xOffset": 6, + "yOffset": 50, + "xAdvance": 18, + "rect": { + "x": 374, + "y": 710, + "width": 8, + "height": 8 + } + }, + "47": { + "xOffset": 0, + "yOffset": 10, + "xAdvance": 18, + "rect": { + "x": 292, + "y": 560, + "width": 19, + "height": 49 + } + }, + "48": { + "xOffset": 3, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 578, + "y": 560, + "width": 31, + "height": 48 + } + }, + "49": { + "xOffset": 7, + "yOffset": 10, + "xAdvance": 36, + "rect": { + "x": 86, + "y": 611, + "width": 18, + "height": 48 + } + }, + "50": { + "xOffset": 2, + "yOffset": 10, + "xAdvance": 36, + "rect": { + "x": 374, + "y": 560, + "width": 32, + "height": 48 + } + }, + "51": { + "xOffset": 3, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 408, + "y": 560, + "width": 32, + "height": 48 + } + }, + "52": { + "xOffset": 1, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 78, + "y": 661, + "width": 33, + "height": 47 + } + }, + "53": { + "xOffset": 3, + "yOffset": 12, + "xAdvance": 36, + "rect": { + "x": 113, + "y": 661, + "width": 32, + "height": 47 + } + }, + "54": { + "xOffset": 2, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 442, + "y": 560, + "width": 32, + "height": 48 + } + }, + "55": { + "xOffset": 3, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 181, + "y": 661, + "width": 31, + "height": 47 + } + }, + "56": { + "xOffset": 3, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 476, + "y": 560, + "width": 32, + "height": 48 + } + }, + "57": { + "xOffset": 3, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 510, + "y": 560, + "width": 32, + "height": 48 + } + }, + "58": { + "xOffset": 6, + "yOffset": 23, + "xAdvance": 18, + "rect": { + "x": 84, + "y": 710, + "width": 8, + "height": 35 + } + }, + "59": { + "xOffset": 5, + "yOffset": 23, + "xAdvance": 18, + "rect": { + "x": 366, + "y": 661, + "width": 8, + "height": 44 + } + }, + "60": { + "xOffset": 4, + "yOffset": 18, + "xAdvance": 37, + "rect": { + "x": 94, + "y": 710, + "width": 32, + "height": 33 + } + }, + "61": { + "xOffset": 4, + "yOffset": 24, + "xAdvance": 37, + "rect": { + "x": 226, + "y": 710, + "width": 32, + "height": 21 + } + }, + "62": { + "xOffset": 4, + "yOffset": 18, + "xAdvance": 37, + "rect": { + "x": 128, + "y": 710, + "width": 32, + "height": 33 + } + }, + "63": { + "xOffset": 3, + "yOffset": 10, + "xAdvance": 36, + "rect": { + "x": 611, + "y": 560, + "width": 31, + "height": 48 + } + }, + "64": { + "xOffset": 3, + "yOffset": 9, + "xAdvance": 65, + "rect": { + "x": 2, + "y": 2, + "width": 61, + "height": 62 + } + }, + "65": { + "xOffset": 0, + "yOffset": 11, + "xAdvance": 43, + "rect": { + "x": 215, + "y": 611, + "width": 44, + "height": 47 + } + }, + "66": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 43, + "rect": { + "x": 683, + "y": 611, + "width": 36, + "height": 47 + } + }, + "67": { + "xOffset": 3, + "yOffset": 10, + "xAdvance": 46, + "rect": { + "x": 95, + "y": 560, + "width": 42, + "height": 49 + } + }, + "68": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 46, + "rect": { + "x": 442, + "y": 611, + "width": 39, + "height": 47 + } + }, + "69": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 43, + "rect": { + "x": 2, + "y": 661, + "width": 36, + "height": 47 + } + }, + "70": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 39, + "rect": { + "x": 147, + "y": 661, + "width": 32, + "height": 47 + } + }, + "71": { + "xOffset": 3, + "yOffset": 10, + "xAdvance": 50, + "rect": { + "x": 49, + "y": 560, + "width": 44, + "height": 49 + } + }, + "72": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 46, + "rect": { + "x": 644, + "y": 611, + "width": 37, + "height": 47 + } + }, + "73": { + "xOffset": 6, + "yOffset": 11, + "xAdvance": 18, + "rect": { + "x": 338, + "y": 661, + "width": 8, + "height": 47 + } + }, + "74": { + "xOffset": 2, + "yOffset": 11, + "xAdvance": 32, + "rect": { + "x": 34, + "y": 611, + "width": 27, + "height": 48 + } + }, + "75": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 43, + "rect": { + "x": 483, + "y": 611, + "width": 39, + "height": 47 + } + }, + "76": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 214, + "y": 661, + "width": 30, + "height": 47 + } + }, + "77": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 53, + "rect": { + "x": 168, + "y": 611, + "width": 45, + "height": 47 + } + }, + "78": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 46, + "rect": { + "x": 524, + "y": 611, + "width": 38, + "height": 47 + } + }, + "79": { + "xOffset": 3, + "yOffset": 10, + "xAdvance": 50, + "rect": { + "x": 2, + "y": 560, + "width": 45, + "height": 49 + } + }, + "80": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 43, + "rect": { + "x": 40, + "y": 661, + "width": 36, + "height": 47 + } + }, + "81": { + "xOffset": 3, + "yOffset": 10, + "xAdvance": 50, + "rect": { + "x": 613, + "y": 500, + "width": 46, + "height": 52 + } + }, + "82": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 46, + "rect": { + "x": 398, + "y": 611, + "width": 42, + "height": 47 + } + }, + "83": { + "xOffset": 3, + "yOffset": 10, + "xAdvance": 43, + "rect": { + "x": 181, + "y": 560, + "width": 38, + "height": 49 + } + }, + "84": { + "xOffset": 2, + "yOffset": 11, + "xAdvance": 39, + "rect": { + "x": 564, + "y": 611, + "width": 38, + "height": 47 + } + }, + "85": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 46, + "rect": { + "x": 334, + "y": 560, + "width": 38, + "height": 48 + } + }, + "86": { + "xOffset": 0, + "yOffset": 11, + "xAdvance": 43, + "rect": { + "x": 353, + "y": 611, + "width": 43, + "height": 47 + } + }, + "87": { + "xOffset": 1, + "yOffset": 11, + "xAdvance": 60, + "rect": { + "x": 106, + "y": 611, + "width": 60, + "height": 47 + } + }, + "88": { + "xOffset": 0, + "yOffset": 11, + "xAdvance": 43, + "rect": { + "x": 261, + "y": 611, + "width": 44, + "height": 47 + } + }, + "89": { + "xOffset": 0, + "yOffset": 11, + "xAdvance": 43, + "rect": { + "x": 307, + "y": 611, + "width": 44, + "height": 47 + } + }, + "90": { + "xOffset": 1, + "yOffset": 11, + "xAdvance": 39, + "rect": { + "x": 604, + "y": 611, + "width": 38, + "height": 47 + } + }, + "91": { + "xOffset": 4, + "yOffset": 11, + "xAdvance": 18, + "rect": { + "x": 330, + "y": 377, + "width": 14, + "height": 60 + } + }, + "92": { + "xOffset": 0, + "yOffset": 10, + "xAdvance": 18, + "rect": { + "x": 313, + "y": 560, + "width": 19, + "height": 49 + } + }, + "93": { + "xOffset": 1, + "yOffset": 11, + "xAdvance": 18, + "rect": { + "x": 346, + "y": 377, + "width": 14, + "height": 60 + } + }, + "94": { + "xOffset": 2, + "yOffset": 9, + "xAdvance": 30, + "rect": { + "x": 196, + "y": 710, + "width": 28, + "height": 27 + } + }, + "95": { + "xOffset": -1, + "yOffset": 65, + "xAdvance": 36, + "rect": { + "x": 405, + "y": 710, + "width": 39, + "height": 6 + } + }, + "96": { + "xOffset": 3, + "yOffset": 11, + "xAdvance": 21, + "rect": { + "x": 359, + "y": 710, + "width": 13, + "height": 10 + } + }, + "97": { + "xOffset": 2, + "yOffset": 23, + "xAdvance": 36, + "rect": { + "x": 411, + "y": 661, + "width": 32, + "height": 36 + } + }, + "98": { + "xOffset": 4, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 644, + "y": 560, + "width": 30, + "height": 48 + } + }, + "99": { + "xOffset": 3, + "yOffset": 23, + "xAdvance": 32, + "rect": { + "x": 479, + "y": 661, + "width": 30, + "height": 36 + } + }, + "100": { + "xOffset": 2, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 676, + "y": 560, + "width": 30, + "height": 48 + } + }, + "101": { + "xOffset": 2, + "yOffset": 23, + "xAdvance": 36, + "rect": { + "x": 445, + "y": 661, + "width": 32, + "height": 36 + } + }, + "102": { + "xOffset": 1, + "yOffset": 10, + "xAdvance": 18, + "rect": { + "x": 63, + "y": 611, + "width": 21, + "height": 48 + } + }, + "103": { + "xOffset": 2, + "yOffset": 22, + "xAdvance": 36, + "rect": { + "x": 259, + "y": 560, + "width": 31, + "height": 49 + } + }, + "104": { + "xOffset": 4, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 246, + "y": 661, + "width": 29, + "height": 47 + } + }, + "105": { + "xOffset": 4, + "yOffset": 11, + "xAdvance": 14, + "rect": { + "x": 348, + "y": 661, + "width": 7, + "height": 47 + } + }, + "106": { + "xOffset": -3, + "yOffset": 10, + "xAdvance": 14, + "rect": { + "x": 660, + "y": 66, + "width": 14, + "height": 61 + } + }, + "107": { + "xOffset": 4, + "yOffset": 11, + "xAdvance": 32, + "rect": { + "x": 277, + "y": 661, + "width": 29, + "height": 47 + } + }, + "108": { + "xOffset": 4, + "yOffset": 11, + "xAdvance": 14, + "rect": { + "x": 357, + "y": 661, + "width": 7, + "height": 47 + } + }, + "109": { + "xOffset": 4, + "yOffset": 23, + "xAdvance": 53, + "rect": { + "x": 591, + "y": 661, + "width": 46, + "height": 35 + } + }, + "110": { + "xOffset": 4, + "yOffset": 23, + "xAdvance": 36, + "rect": { + "x": 2, + "y": 710, + "width": 28, + "height": 35 + } + }, + "111": { + "xOffset": 2, + "yOffset": 23, + "xAdvance": 36, + "rect": { + "x": 376, + "y": 661, + "width": 33, + "height": 36 + } + }, + "112": { + "xOffset": 4, + "yOffset": 23, + "xAdvance": 36, + "rect": { + "x": 708, + "y": 560, + "width": 30, + "height": 48 + } + }, + "113": { + "xOffset": 2, + "yOffset": 23, + "xAdvance": 36, + "rect": { + "x": 2, + "y": 611, + "width": 30, + "height": 48 + } + }, + "114": { + "xOffset": 4, + "yOffset": 23, + "xAdvance": 21, + "rect": { + "x": 62, + "y": 710, + "width": 20, + "height": 35 + } + }, + "115": { + "xOffset": 2, + "yOffset": 23, + "xAdvance": 32, + "rect": { + "x": 511, + "y": 661, + "width": 29, + "height": 36 + } + }, + "116": { + "xOffset": 1, + "yOffset": 11, + "xAdvance": 18, + "rect": { + "x": 308, + "y": 661, + "width": 18, + "height": 47 + } + }, + "117": { + "xOffset": 4, + "yOffset": 24, + "xAdvance": 36, + "rect": { + "x": 32, + "y": 710, + "width": 28, + "height": 35 + } + }, + "118": { + "xOffset": 1, + "yOffset": 23, + "xAdvance": 32, + "rect": { + "x": 674, + "y": 661, + "width": 32, + "height": 35 + } + }, + "119": { + "xOffset": 0, + "yOffset": 23, + "xAdvance": 46, + "rect": { + "x": 542, + "y": 661, + "width": 47, + "height": 35 + } + }, + "120": { + "xOffset": 0, + "yOffset": 23, + "xAdvance": 32, + "rect": { + "x": 639, + "y": 661, + "width": 33, + "height": 35 + } + }, + "121": { + "xOffset": 1, + "yOffset": 23, + "xAdvance": 32, + "rect": { + "x": 544, + "y": 560, + "width": 32, + "height": 48 + } + }, + "122": { + "xOffset": 1, + "yOffset": 23, + "xAdvance": 32, + "rect": { + "x": 708, + "y": 661, + "width": 31, + "height": 35 + } + }, + "123": { + "xOffset": 2, + "yOffset": 9, + "xAdvance": 21, + "rect": { + "x": 65, + "y": 2, + "width": 20, + "height": 62 + } + }, + "124": { + "xOffset": 6, + "yOffset": 9, + "xAdvance": 17, + "rect": { + "x": 147, + "y": 2, + "width": 6, + "height": 62 + } + }, + "125": { + "xOffset": 1, + "yOffset": 9, + "xAdvance": 21, + "rect": { + "x": 87, + "y": 2, + "width": 20, + "height": 62 + } + }, + "126": { + "xOffset": 3, + "yOffset": 29, + "xAdvance": 37, + "rect": { + "x": 324, + "y": 710, + "width": 33, + "height": 12 + } + }, + "19978": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 476, + "y": 439, + "width": 58, + "height": 58 + } + }, + "20010": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 676, + "y": 66, + "width": 61, + "height": 60 + } + }, + "20026": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 118, + "y": 377, + "width": 55, + "height": 60 + } + }, + "20080": { + "xOffset": 5, + "yOffset": 8, + "xAdvance": 64, + "rect": { + "x": 277, + "y": 500, + "width": 57, + "height": 57 + } + }, + "20154": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 2, + "y": 129, + "width": 61, + "height": 60 + } + }, + "20215": { + "xOffset": 2, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 65, + "y": 129, + "width": 61, + "height": 60 + } + }, + "20302": { + "xOffset": 2, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 128, + "y": 129, + "width": 61, + "height": 60 + } + }, + "20313": { + "xOffset": 2, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 362, + "y": 377, + "width": 61, + "height": 59 + } + }, + "20323": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 307, + "y": 66, + "width": 58, + "height": 61 + } + }, + "20803": { + "xOffset": 3, + "yOffset": 8, + "xAdvance": 64, + "rect": { + "x": 155, + "y": 500, + "width": 59, + "height": 57 + } + }, + "20805": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 490, + "y": 253, + "width": 58, + "height": 60 + } + }, + "20813": { + "xOffset": 3, + "yOffset": 3, + "xAdvance": 64, + "rect": { + "x": 2, + "y": 66, + "width": 59, + "height": 61 + } + }, + "20853": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 2, + "y": 253, + "width": 59, + "height": 60 + } + }, + "20869": { + "xOffset": 7, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 175, + "y": 377, + "width": 52, + "height": 60 + } + }, + "20891": { + "xOffset": 4, + "yOffset": 7, + "xAdvance": 64, + "rect": { + "x": 656, + "y": 439, + "width": 57, + "height": 58 + } + }, + "20986": { + "xOffset": 7, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 229, + "y": 377, + "width": 52, + "height": 60 + } + }, + "20998": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 632, + "y": 129, + "width": 60, + "height": 60 + } + }, + "21015": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 2, + "y": 439, + "width": 57, + "height": 59 + } + }, + "21040": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 61, + "y": 439, + "width": 57, + "height": 59 + } + }, + "21069": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 63, + "y": 66, + "width": 59, + "height": 61 + } + }, + "21097": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 542, + "y": 315, + "width": 57, + "height": 60 + } + }, + "21160": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 550, + "y": 253, + "width": 58, + "height": 60 + } + }, + "21215": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 407, + "y": 2, + "width": 60, + "height": 61 + } + }, + "21319": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 610, + "y": 253, + "width": 58, + "height": 60 + } + }, + "21330": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 670, + "y": 253, + "width": 58, + "height": 60 + } + }, + "21407": { + "xOffset": 3, + "yOffset": 7, + "xAdvance": 64, + "rect": { + "x": 216, + "y": 500, + "width": 59, + "height": 57 + } + }, + "21475": { + "xOffset": 9, + "yOffset": 11, + "xAdvance": 64, + "rect": { + "x": 563, + "y": 500, + "width": 48, + "height": 52 + } + }, + "21487": { + "xOffset": 4, + "yOffset": 8, + "xAdvance": 64, + "rect": { + "x": 336, + "y": 500, + "width": 59, + "height": 56 + } + }, + "21518": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 2, + "y": 191, + "width": 60, + "height": 60 + } + }, + "22478": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 191, + "y": 129, + "width": 61, + "height": 60 + } + }, + "22681": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 64, + "y": 191, + "width": 60, + "height": 60 + } + }, + "22823": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 126, + "y": 191, + "width": 60, + "height": 60 + } + }, + "22825": { + "xOffset": 3, + "yOffset": 8, + "xAdvance": 64, + "rect": { + "x": 93, + "y": 500, + "width": 60, + "height": 57 + } + }, + "23041": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 488, + "y": 377, + "width": 60, + "height": 59 + } + }, + "23432": { + "xOffset": 5, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 2, + "y": 377, + "width": 56, + "height": 60 + } + }, + "23448": { + "xOffset": 5, + "yOffset": 3, + "xAdvance": 64, + "rect": { + "x": 546, + "y": 66, + "width": 55, + "height": 61 + } + }, + "23453": { + "xOffset": 5, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 2, + "y": 500, + "width": 55, + "height": 58 + } + }, + "23567": { + "xOffset": 2, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 425, + "y": 377, + "width": 61, + "height": 59 + } + }, + "24050": { + "xOffset": 6, + "yOffset": 7, + "xAdvance": 64, + "rect": { + "x": 505, + "y": 500, + "width": 56, + "height": 55 + } + }, + "24065": { + "xOffset": 4, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 60, + "y": 377, + "width": 56, + "height": 60 + } + }, + "24182": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 124, + "y": 66, + "width": 59, + "height": 61 + } + }, + "24314": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 63, + "y": 253, + "width": 59, + "height": 60 + } + }, + "24320": { + "xOffset": 4, + "yOffset": 8, + "xAdvance": 64, + "rect": { + "x": 397, + "y": 500, + "width": 58, + "height": 56 + } + }, + "24339": { + "xOffset": 11, + "yOffset": 8, + "xAdvance": 64, + "rect": { + "x": 457, + "y": 500, + "width": 46, + "height": 56 + } + }, + "24403": { + "xOffset": 7, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 178, + "y": 439, + "width": 50, + "height": 59 + } + }, + "24449": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 254, + "y": 129, + "width": 61, + "height": 60 + } + }, + "24471": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 188, + "y": 191, + "width": 60, + "height": 60 + } + }, + "25552": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 250, + "y": 191, + "width": 60, + "height": 60 + } + }, + "25910": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 185, + "y": 66, + "width": 59, + "height": 61 + } + }, + "25928": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 155, + "y": 2, + "width": 61, + "height": 61 + } + }, + "26009": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 317, + "y": 129, + "width": 61, + "height": 60 + } + }, + "26102": { + "xOffset": 5, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 673, + "y": 377, + "width": 58, + "height": 59 + } + }, + "26361": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 2, + "y": 315, + "width": 58, + "height": 60 + } + }, + "26368": { + "xOffset": 4, + "yOffset": 7, + "xAdvance": 64, + "rect": { + "x": 536, + "y": 439, + "width": 58, + "height": 58 + } + }, + "26395": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 120, + "y": 439, + "width": 56, + "height": 59 + } + }, + "26408": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 62, + "y": 315, + "width": 58, + "height": 60 + } + }, + "26426": { + "xOffset": 2, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 380, + "y": 129, + "width": 61, + "height": 60 + } + }, + "26448": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 124, + "y": 253, + "width": 59, + "height": 60 + } + }, + "26524": { + "xOffset": 3, + "yOffset": 6, + "xAdvance": 64, + "rect": { + "x": 230, + "y": 439, + "width": 60, + "height": 58 + } + }, + "27425": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 218, + "y": 2, + "width": 61, + "height": 61 + } + }, + "27493": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 367, + "y": 66, + "width": 58, + "height": 61 + } + }, + "27494": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 550, + "y": 377, + "width": 60, + "height": 59 + } + }, + "27599": { + "xOffset": 3, + "yOffset": 3, + "xAdvance": 64, + "rect": { + "x": 281, + "y": 2, + "width": 61, + "height": 61 + } + }, + "27963": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 185, + "y": 253, + "width": 59, + "height": 60 + } + }, + "28608": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 443, + "y": 129, + "width": 61, + "height": 60 + } + }, + "28857": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 312, + "y": 191, + "width": 60, + "height": 60 + } + }, + "31181": { + "xOffset": 2, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 122, + "y": 315, + "width": 58, + "height": 60 + } + }, + "31526": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 246, + "y": 253, + "width": 59, + "height": 60 + } + }, + "31569": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 307, + "y": 253, + "width": 59, + "height": 60 + } + }, + "31574": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 469, + "y": 2, + "width": 60, + "height": 61 + } + }, + "31665": { + "xOffset": 2, + "yOffset": 3, + "xAdvance": 64, + "rect": { + "x": 531, + "y": 2, + "width": 60, + "height": 61 + } + }, + "31918": { + "xOffset": 2, + "yOffset": 3, + "xAdvance": 64, + "rect": { + "x": 344, + "y": 2, + "width": 61, + "height": 61 + } + }, + "32043": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 182, + "y": 315, + "width": 58, + "height": 60 + } + }, + "32418": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 354, + "y": 439, + "width": 59, + "height": 58 + } + }, + "32493": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 593, + "y": 2, + "width": 60, + "height": 61 + } + }, + "32511": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 374, + "y": 191, + "width": 60, + "height": 60 + } + }, + "32791": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 436, + "y": 191, + "width": 60, + "height": 60 + } + }, + "33258": { + "xOffset": 10, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 283, + "y": 377, + "width": 45, + "height": 60 + } + }, + "33457": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 246, + "y": 66, + "width": 59, + "height": 61 + } + }, + "33609": { + "xOffset": 4, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 242, + "y": 315, + "width": 58, + "height": 60 + } + }, + "33719": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 368, + "y": 253, + "width": 59, + "height": 60 + } + }, + "33829": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 601, + "y": 315, + "width": 57, + "height": 60 + } + }, + "34917": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 498, + "y": 191, + "width": 60, + "height": 60 + } + }, + "35745": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 560, + "y": 191, + "width": 60, + "height": 60 + } + }, + "36141": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 302, + "y": 315, + "width": 58, + "height": 60 + } + }, + "36153": { + "xOffset": 5, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 603, + "y": 66, + "width": 55, + "height": 61 + } + }, + "36824": { + "xOffset": 4, + "yOffset": 6, + "xAdvance": 64, + "rect": { + "x": 612, + "y": 377, + "width": 59, + "height": 59 + } + }, + "36896": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 429, + "y": 253, + "width": 59, + "height": 60 + } + }, + "37327": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 415, + "y": 439, + "width": 59, + "height": 58 + } + }, + "37329": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 292, + "y": 439, + "width": 60, + "height": 58 + } + }, + "38047": { + "xOffset": 2, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 362, + "y": 315, + "width": 58, + "height": 60 + } + }, + "38081": { + "xOffset": 2, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 506, + "y": 129, + "width": 61, + "height": 60 + } + }, + "38134": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 622, + "y": 191, + "width": 60, + "height": 60 + } + }, + "38228": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 655, + "y": 2, + "width": 60, + "height": 61 + } + }, + "38431": { + "xOffset": 6, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 422, + "y": 315, + "width": 58, + "height": 60 + } + }, + "38450": { + "xOffset": 5, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 487, + "y": 66, + "width": 57, + "height": 61 + } + }, + "38477": { + "xOffset": 5, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 482, + "y": 315, + "width": 58, + "height": 60 + } + }, + "38480": { + "xOffset": 5, + "yOffset": 6, + "xAdvance": 64, + "rect": { + "x": 596, + "y": 439, + "width": 58, + "height": 58 + } + }, + "38543": { + "xOffset": 5, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 660, + "y": 315, + "width": 57, + "height": 60 + } + }, + "38599": { + "xOffset": 3, + "yOffset": 3, + "xAdvance": 64, + "rect": { + "x": 427, + "y": 66, + "width": 58, + "height": 61 + } + }, + "39569": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 569, + "y": 129, + "width": 61, + "height": 60 + } + } + }, + "kerningDict": { + "2097217": -3, + "2097236": -1, + "2097241": -1, + "3211313": -4, + "4259872": -3, + "4259924": -4, + "4259926": -4, + "4259927": -2, + "4259929": -4, + "4259958": -1, + "4259959": -1, + "4259961": -1, + "4587564": -7, + "4587566": -7, + "4587585": -3, + "4980768": -2, + "4980820": -4, + "4980822": -4, + "4980823": -4, + "4980825": -4, + "4980857": -2, + "5242912": -1, + "5242924": -8, + "5242926": -8, + "5242945": -4, + "5374036": -1, + "5374038": -1, + "5374039": -1, + "5374041": -1, + "5505056": -1, + "5505068": -7, + "5505069": -3, + "5505070": -7, + "5505082": -7, + "5505083": -7, + "5505089": -4, + "5505103": -1, + "5505121": -7, + "5505123": -7, + "5505125": -7, + "5505129": -2, + "5505135": -7, + "5505138": -2, + "5505139": -7, + "5505141": -2, + "5505143": -3, + "5505145": -3, + "5636140": -5, + "5636141": -3, + "5636142": -5, + "5636154": -2, + "5636155": -2, + "5636161": -4, + "5636193": -4, + "5636197": -3, + "5636201": -1, + "5636207": -3, + "5636210": -2, + "5636213": -2, + "5636217": -2, + "5701676": -3, + "5701677": -1, + "5701678": -3, + "5701690": -1, + "5701691": -1, + "5701697": -2, + "5701729": -2, + "5701733": -1, + "5701743": -1, + "5701746": -1, + "5701749": -1, + "5832736": -1, + "5832748": -8, + "5832749": -5, + "5832750": -8, + "5832762": -3, + "5832763": -4, + "5832769": -4, + "5832801": -4, + "5832805": -5, + "5832809": -2, + "5832815": -5, + "5832816": -4, + "5832817": -5, + "5832821": -3, + "5832822": -3, + "6684774": -1, + "7471148": -3, + "7471150": -3, + "7733292": -4, + "7733294": -4, + "7798828": -3, + "7798830": -3, + "7929900": -4, + "7929902": -4 + } + } + ] + ], + 0, + 0, + [ + 0 + ], + [ + 4 + ], + [ + 6 + ] + ], + [ + [ + { + "name": "1655112624336", + "rect": [ + 0, + 0, + 564, + 882 + ], + "offset": [ + 0, + 0 + ], + "originalSize": [ + 564, + 882 + ], + "capInsets": [ + 192, + 176, + 198, + 155 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 0 + ], + [ + 7 + ] + ], + [ + [ + { + "name": "1655112514006", + "rect": [ + 0, + 0, + 556, + 606 + ], + "offset": [ + 0, + 0 + ], + "originalSize": [ + 556, + 606 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 0 + ], + [ + 0 + ] + ], + [ + [ + { + "name": "1655112548981", + "rect": [ + 0, + 0, + 396, + 570 + ], + "offset": [ + 0, + 0 + ], + "originalSize": [ + 396, + 570 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 0 + ], + [ + 8 + ] + ], + [ + [ + { + "name": "normalFont", + "rect": [ + 2, + 2, + 737, + 742 + ], + "offset": [ + -0.5, + 20 + ], + "originalSize": [ + 742, + 786 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 0 + ], + [ + 9 + ] + ], + [ + [ + { + "name": "1655112479313", + "rect": [ + 0, + 0, + 402, + 370 + ], + "offset": [ + 0, + 0 + ], + "originalSize": [ + 402, + 370 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 0 + ], + [ + 10 + ] + ], + [ + [ + [ + 3, + "spineboy", + "\nspineboy.png\nsize:1024,256\nformat: RGBA8888\nfilter: Linear,Linear\nrepeat: none\neye_indifferent\n rotate: true\n xy: 389, 5\n size: 56, 53\n orig: 56, 53\n offset: 0, 0\n index: -1\neye_surprised\n rotate: false\n xy: 580, 34\n size: 56, 53\n orig: 56, 53\n offset: 0, 0\n index: -1\nfront_bracer\n rotate: false\n xy: 732, 85\n size: 35, 48\n orig: 35, 48\n offset: 0, 0\n index: -1\nfront_fist_closed\n rotate: false\n xy: 556, 91\n size: 45, 49\n orig: 45, 49\n offset: 0, 0\n index: -1\nfront_fist_open\n rotate: false\n xy: 668, 32\n size: 52, 52\n orig: 52, 52\n offset: 0, 0\n index: -1\nfront_foot\n rotate: false\n xy: 924, 201\n size: 76, 41\n orig: 76, 41\n offset: 0, 0\n index: -1\nfront_foot_bend1\n rotate: false\n xy: 845, 200\n size: 77, 42\n orig: 77, 42\n offset: 0, 0\n index: -1\nfront_foot_bend2\n rotate: false\n xy: 778, 186\n size: 65, 56\n orig: 65, 56\n offset: 0, 0\n index: -1\nfront_shin\n rotate: true\n xy: 444, 91\n size: 49, 110\n orig: 49, 110\n offset: 0, 0\n index: -1\nfront_thigh\n rotate: true\n xy: 603, 89\n size: 29, 67\n orig: 29, 67\n offset: 0, 0\n index: -1\nfront_upper_arm\n rotate: true\n xy: 672, 86\n size: 32, 58\n orig: 32, 58\n offset: 0, 0\n index: -1\ngoggles\n rotate: false\n xy: 444, 142\n size: 157, 100\n orig: 157, 100\n offset: 0, 0\n index: -1\ngun\n rotate: false\n xy: 603, 120\n size: 126, 122\n orig: 126, 122\n offset: 0, 0\n index: -1\nhead\n rotate: false\n xy: 279, 63\n size: 163, 179\n orig: 163, 179\n offset: 0, 0\n index: -1\nmouth_grind\n rotate: false\n xy: 845, 163\n size: 56, 35\n orig: 56, 35\n offset: 0, 0\n index: -1\nmouth_oooo\n rotate: false\n xy: 842, 126\n size: 56, 35\n orig: 56, 35\n offset: 0, 0\n index: -1\nmouth_smile\n rotate: false\n xy: 769, 97\n size: 56, 35\n orig: 56, 35\n offset: 0, 0\n index: -1\nmuzzle\n rotate: false\n xy: 2, 2\n size: 275, 240\n orig: 277, 240\n offset: 0, 0\n index: -1\nneck\n rotate: false\n xy: 903, 173\n size: 22, 25\n orig: 22, 25\n offset: 0, 0\n index: -1\nrear_bracer\n rotate: false\n xy: 722, 40\n size: 34, 43\n orig: 34, 43\n offset: 0, 0\n index: -1\nrear_foot\n rotate: false\n xy: 444, 11\n size: 68, 36\n orig: 68, 36\n offset: 0, 0\n index: -1\nrear_foot_bend1\n rotate: false\n xy: 444, 49\n size: 70, 40\n orig: 70, 40\n offset: 0, 0\n index: -1\nrear_foot_bend2\n rotate: false\n xy: 778, 134\n size: 62, 50\n orig: 62, 50\n offset: 0, 0\n index: -1\nrear_shin\n rotate: false\n xy: 731, 135\n size: 45, 107\n orig: 45, 107\n offset: 0, 0\n index: -1\nrear_thigh\n rotate: true\n xy: 516, 50\n size: 39, 62\n orig: 39, 62\n offset: 0, 0\n index: -1\nrear_upper_arm\n rotate: false\n xy: 638, 35\n size: 28, 52\n orig: 28, 52\n offset: 0, 0\n index: -1\ntorso\n rotate: true\n xy: 279, 2\n size: 59, 108\n orig: 59, 108\n offset: 0, 0\n index: -1\n" + ] + ], + 0, + 0, + [], + [], + [] + ], + [ + [ + [ + 4, + "spineboy", + "\nspineboy.png\nsize:1024,256\nformat: RGBA8888\nfilter: Linear,Linear\nrepeat: none\neye_indifferent\n rotate: true\n xy: 389, 5\n size: 56, 53\n orig: 56, 53\n offset: 0, 0\n index: -1\neye_surprised\n rotate: false\n xy: 580, 34\n size: 56, 53\n orig: 56, 53\n offset: 0, 0\n index: -1\nfront_bracer\n rotate: false\n xy: 732, 85\n size: 35, 48\n orig: 35, 48\n offset: 0, 0\n index: -1\nfront_fist_closed\n rotate: false\n xy: 556, 91\n size: 45, 49\n orig: 45, 49\n offset: 0, 0\n index: -1\nfront_fist_open\n rotate: false\n xy: 668, 32\n size: 52, 52\n orig: 52, 52\n offset: 0, 0\n index: -1\nfront_foot\n rotate: false\n xy: 924, 201\n size: 76, 41\n orig: 76, 41\n offset: 0, 0\n index: -1\nfront_foot_bend1\n rotate: false\n xy: 845, 200\n size: 77, 42\n orig: 77, 42\n offset: 0, 0\n index: -1\nfront_foot_bend2\n rotate: false\n xy: 778, 186\n size: 65, 56\n orig: 65, 56\n offset: 0, 0\n index: -1\nfront_shin\n rotate: true\n xy: 444, 91\n size: 49, 110\n orig: 49, 110\n offset: 0, 0\n index: -1\nfront_thigh\n rotate: true\n xy: 603, 89\n size: 29, 67\n orig: 29, 67\n offset: 0, 0\n index: -1\nfront_upper_arm\n rotate: true\n xy: 672, 86\n size: 32, 58\n orig: 32, 58\n offset: 0, 0\n index: -1\ngoggles\n rotate: false\n xy: 444, 142\n size: 157, 100\n orig: 157, 100\n offset: 0, 0\n index: -1\ngun\n rotate: false\n xy: 603, 120\n size: 126, 122\n orig: 126, 122\n offset: 0, 0\n index: -1\nhead\n rotate: false\n xy: 279, 63\n size: 163, 179\n orig: 163, 179\n offset: 0, 0\n index: -1\nmouth_grind\n rotate: false\n xy: 845, 163\n size: 56, 35\n orig: 56, 35\n offset: 0, 0\n index: -1\nmouth_oooo\n rotate: false\n xy: 842, 126\n size: 56, 35\n orig: 56, 35\n offset: 0, 0\n index: -1\nmouth_smile\n rotate: false\n xy: 769, 97\n size: 56, 35\n orig: 56, 35\n offset: 0, 0\n index: -1\nmuzzle\n rotate: false\n xy: 2, 2\n size: 275, 240\n orig: 277, 240\n offset: 0, 0\n index: -1\nneck\n rotate: false\n xy: 903, 173\n size: 22, 25\n orig: 22, 25\n offset: 0, 0\n index: -1\nrear_bracer\n rotate: false\n xy: 722, 40\n size: 34, 43\n orig: 34, 43\n offset: 0, 0\n index: -1\nrear_foot\n rotate: false\n xy: 444, 11\n size: 68, 36\n orig: 68, 36\n offset: 0, 0\n index: -1\nrear_foot_bend1\n rotate: false\n xy: 444, 49\n size: 70, 40\n orig: 70, 40\n offset: 0, 0\n index: -1\nrear_foot_bend2\n rotate: false\n xy: 778, 134\n size: 62, 50\n orig: 62, 50\n offset: 0, 0\n index: -1\nrear_shin\n rotate: false\n xy: 731, 135\n size: 45, 107\n orig: 45, 107\n offset: 0, 0\n index: -1\nrear_thigh\n rotate: true\n xy: 516, 50\n size: 39, 62\n orig: 39, 62\n offset: 0, 0\n index: -1\nrear_upper_arm\n rotate: false\n xy: 638, 35\n size: 28, 52\n orig: 28, 52\n offset: 0, 0\n index: -1\ntorso\n rotate: true\n xy: 279, 2\n size: 59, 108\n orig: 59, 108\n offset: 0, 0\n index: -1\n", + [ + "spineboy.png" + ], + { + "bones": [ + { + "name": "hip", + "y": 247.48 + }, + { + "name": "front_thigh", + "parent": "hip", + "length": 74.8, + "x": -17.45, + "y": -11.64, + "rotation": -95.51, + "color": "00ff04ff" + }, + { + "name": "rear_thigh", + "parent": "hip", + "length": 85.71, + "x": 8.91, + "y": -5.62, + "rotation": -72.54, + "color": "ff000dff" + }, + { + "name": "torso", + "parent": "hip", + "length": 127.55, + "x": -1.61, + "y": 4.9, + "rotation": 103.82, + "color": "e0da19ff" + }, + { + "name": "front_shin", + "parent": "front_thigh", + "length": 128.76, + "x": 78.69, + "y": 1.6, + "rotation": -2.21, + "inheritScale": false, + "color": "00ff04ff" + }, + { + "name": "front_upper_arm", + "parent": "torso", + "length": 69.45, + "x": 103.75, + "y": 19.32, + "rotation": 168.37, + "color": "00ff04ff" + }, + { + "name": "neck", + "parent": "torso", + "length": 25.45, + "x": 127.49, + "y": -0.3, + "rotation": -31.53, + "color": "e0da19ff" + }, + { + "name": "rear_shin", + "parent": "rear_thigh", + "length": 121.87, + "x": 86.1, + "y": -1.32, + "rotation": -19.83, + "color": "ff000dff" + }, + { + "name": "rear_upper_arm", + "parent": "torso", + "length": 51.93, + "x": 92.35, + "y": -19.22, + "rotation": -169.55, + "color": "ff000dff" + }, + { + "name": "front_bracer", + "parent": "front_upper_arm", + "length": 40.57, + "x": 68.8, + "y": -0.68, + "rotation": 18.29, + "color": "00ff04ff" + }, + { + "name": "front_foot", + "parent": "front_shin", + "length": 91.34, + "x": 128.75, + "y": -0.33, + "rotation": 77.9, + "color": "00ff04ff" + }, + { + "name": "head", + "parent": "neck", + "length": 263.57, + "x": 27.66, + "y": -0.25, + "rotation": 23.18, + "color": "e0da19ff" + }, + { + "name": "rear_bracer", + "parent": "rear_upper_arm", + "length": 34.55, + "x": 51.35, + "rotation": 23.15, + "color": "ff000dff" + }, + { + "name": "rear_foot", + "parent": "rear_shin", + "length": 82.57, + "x": 121.45, + "y": -0.75, + "rotation": 69.3, + "color": "ff000dff" + }, + { + "name": "front_fist", + "parent": "front_bracer", + "length": 65.38, + "x": 40.56, + "y": 0.19, + "rotation": 12.43, + "color": "00ff04ff" + }, + { + "name": "gun", + "parent": "rear_bracer", + "length": 43.1, + "x": 34.42, + "y": -0.45, + "rotation": 5.34, + "color": "ff000dff" + }, + { + "name": "gunTip", + "parent": "gun", + "x": 201.04, + "y": 52.13, + "rotation": 6.83, + "color": "ff000dff" + } + ], + "slots": [ + { + "name": "rear_upper_arm", + "bone": "rear_upper_arm", + "attachment": "rear_upper_arm" + }, + { + "name": "rear_bracer", + "bone": "rear_bracer", + "attachment": "rear_bracer" + }, + { + "name": "gun", + "bone": "gun", + "attachment": "gun" + }, + { + "name": "rear_foot", + "bone": "rear_foot", + "attachment": "rear_foot" + }, + { + "name": "rear_thigh", + "bone": "rear_thigh", + "attachment": "rear_thigh" + }, + { + "name": "rear_shin", + "bone": "rear_shin", + "attachment": "rear_shin" + }, + { + "name": "neck", + "bone": "neck", + "attachment": "neck" + }, + { + "name": "torso", + "bone": "torso", + "attachment": "torso" + }, + { + "name": "front_upper_arm", + "bone": "front_upper_arm", + "attachment": "front_upper_arm" + }, + { + "name": "head", + "bone": "head", + "attachment": "head" + }, + { + "name": "eye", + "bone": "head", + "attachment": "eye_indifferent" + }, + { + "name": "front_thigh", + "bone": "front_thigh", + "attachment": "front_thigh" + }, + { + "name": "front_foot", + "bone": "front_foot", + "attachment": "front_foot" + }, + { + "name": "front_shin", + "bone": "front_shin", + "attachment": "front_shin" + }, + { + "name": "mouth", + "bone": "head", + "attachment": "mouth_smile" + }, + { + "name": "goggles", + "bone": "head", + "attachment": "goggles" + }, + { + "name": "front_bracer", + "bone": "front_bracer", + "attachment": "front_bracer" + }, + { + "name": "front_fist", + "bone": "front_fist", + "attachment": "front_fist_closed" + }, + { + "name": "muzzle", + "bone": "gunTip", + "additive": true + } + ], + "skins": { + "default": { + "eye": { + "eye_indifferent": { + "x": 85.72, + "y": -28.18, + "rotation": -70.63, + "width": 93, + "height": 89 + }, + "eye_surprised": { + "x": 85.72, + "y": -28.18, + "rotation": -70.63, + "width": 93, + "height": 89 + } + }, + "front_bracer": { + "front_bracer": { + "x": 12.03, + "y": -1.67, + "rotation": 79.59, + "width": 58, + "height": 80 + } + }, + "front_fist": { + "front_fist_closed": { + "x": 35.49, + "y": 6, + "rotation": 67.16, + "width": 75, + "height": 82 + }, + "front_fist_open": { + "x": 39.56, + "y": 7.76, + "rotation": 67.16, + "width": 86, + "height": 87 + } + }, + "front_foot": { + "front_foot": { + "x": 29.51, + "y": 7.83, + "rotation": 18.68, + "width": 126, + "height": 69 + }, + "front_foot_bend1": { + "x": 29.51, + "y": 7.83, + "rotation": 18.68, + "width": 128, + "height": 70 + }, + "front_foot_bend2": { + "x": 16.07, + "y": 13.83, + "rotation": 18.68, + "width": 108, + "height": 93 + } + }, + "front_shin": { + "front_shin": { + "x": 55.11, + "y": -3.54, + "rotation": 96.59, + "width": 82, + "height": 184 + } + }, + "front_thigh": { + "front_thigh": { + "x": 42.47, + "y": 4.44, + "rotation": 84.86, + "width": 48, + "height": 112 + } + }, + "front_upper_arm": { + "front_upper_arm": { + "x": 28.3, + "y": 7.37, + "rotation": 97.89, + "width": 54, + "height": 97 + } + }, + "goggles": { + "goggles": { + "x": 97.07, + "y": 6.54, + "rotation": -70.63, + "width": 261, + "height": 166 + } + }, + "gun": { + "gun": { + "x": 77.3, + "y": 16.4, + "rotation": 60.82, + "width": 210, + "height": 203 + } + }, + "head": { + "head": { + "x": 128.95, + "y": 0.29, + "rotation": -70.63, + "width": 271, + "height": 298 + } + }, + "mouth": { + "mouth_grind": { + "x": 23.68, + "y": -32.23, + "rotation": -70.63, + "width": 93, + "height": 59 + }, + "mouth_oooo": { + "x": 23.68, + "y": -32.23, + "rotation": -70.63, + "width": 93, + "height": 59 + }, + "mouth_smile": { + "x": 23.68, + "y": -32.23, + "rotation": -70.63, + "width": 93, + "height": 59 + } + }, + "muzzle": { + "muzzle": { + "x": 18.25, + "y": 5.44, + "rotation": 0.15, + "width": 462, + "height": 400 + } + }, + "neck": { + "neck": { + "x": 9.76, + "y": -3.01, + "rotation": -55.22, + "width": 36, + "height": 41 + } + }, + "rear_bracer": { + "rear_bracer": { + "x": 11.15, + "y": -2.2, + "rotation": 66.17, + "width": 56, + "height": 72 + } + }, + "rear_foot": { + "rear_foot": { + "x": 31.51, + "y": 3.57, + "rotation": 23.07, + "width": 113, + "height": 60 + }, + "rear_foot_bend1": { + "x": 34.39, + "y": 4.8, + "rotation": 23.07, + "width": 117, + "height": 66 + }, + "rear_foot_bend2": { + "x": 30.38, + "y": 12.62, + "rotation": 23.07, + "width": 103, + "height": 83 + } + }, + "rear_shin": { + "rear_shin": { + "x": 58.29, + "y": -2.75, + "rotation": 92.37, + "width": 75, + "height": 178 + } + }, + "rear_thigh": { + "rear_thigh": { + "x": 33.1, + "y": -4.11, + "rotation": 72.54, + "width": 65, + "height": 104 + } + }, + "rear_upper_arm": { + "rear_upper_arm": { + "x": 21.12, + "y": 4.08, + "rotation": 89.32, + "width": 47, + "height": 87 + } + }, + "torso": { + "torso": { + "x": 63.61, + "y": 7.12, + "rotation": -94.53, + "width": 98, + "height": 180 + } + } + } + }, + "events": { + "footstep": {}, + "headAttach": { + "int": 3, + "float": 4 + }, + "headBehind": { + "int": 5, + "float": 6, + "string": "setup" + }, + "headPop": { + "int": 1, + "float": 2 + } + }, + "animations": { + "death": { + "slots": { + "eye": { + "attachment": [ + { + "time": 0, + "name": "eye_surprised" + }, + { + "time": 0.4666, + "name": "eye_indifferent" + }, + { + "time": 2.2333, + "name": "eye_surprised" + }, + { + "time": 4.5333, + "name": "eye_indifferent" + } + ] + }, + "front_fist": { + "attachment": [ + { + "time": 0, + "name": "front_fist_open" + } + ] + }, + "mouth": { + "attachment": [ + { + "time": 0, + "name": "mouth_oooo" + }, + { + "time": 2.2333, + "name": "mouth_grind" + }, + { + "time": 4.5333, + "name": "mouth_oooo" + } + ] + } + }, + "bones": { + "head": { + "rotate": [ + { + "time": 0, + "angle": -2.82 + }, + { + "time": 0.1333, + "angle": -28.74 + }, + { + "time": 0.2333, + "angle": 11.42 + }, + { + "time": 0.3333, + "angle": -50.24 + }, + { + "time": 0.4, + "angle": -72.66, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": -72.66 + }, + { + "time": 0.5, + "angle": -20.24 + }, + { + "time": 0.5666, + "angle": -85.28, + "curve": "stepped" + }, + { + "time": 0.9333, + "angle": -85.28, + "curve": "stepped" + }, + { + "time": 2.2333, + "angle": -85.28 + }, + { + "time": 2.5, + "angle": -51.96, + "curve": "stepped" + }, + { + "time": 4.5333, + "angle": -51.96 + }, + { + "time": 4.6666, + "angle": -85.28 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "neck": { + "rotate": [ + { + "time": 0, + "angle": -2.82 + }, + { + "time": 0.1333, + "angle": 12.35 + }, + { + "time": 0.2333, + "angle": 29.89 + }, + { + "time": 0.3, + "angle": 70.36 + }, + { + "time": 0.4, + "angle": -10.22, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": -10.22 + }, + { + "time": 0.5, + "angle": 2.92 + }, + { + "time": 0.5666, + "angle": 47.94, + "curve": "stepped" + }, + { + "time": 2.2333, + "angle": 47.94 + }, + { + "time": 2.5, + "angle": 18.5, + "curve": "stepped" + }, + { + "time": 4.5333, + "angle": 18.5 + }, + { + "time": 4.6666, + "angle": 47.94 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "torso": { + "rotate": [ + { + "time": 0, + "angle": -8.61 + }, + { + "time": 0.1333, + "angle": 28.19 + }, + { + "time": 0.2666, + "angle": -280.19 + }, + { + "time": 0.4, + "angle": -237.22, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": -237.22 + }, + { + "time": 0.5, + "angle": 76.03, + "curve": "stepped" + }, + { + "time": 0.8, + "angle": 76.03, + "curve": "stepped" + }, + { + "time": 0.9333, + "angle": 76.03, + "curve": "stepped" + }, + { + "time": 2.2333, + "angle": 76.03 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.9333, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 2.2333, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -38.85 + }, + { + "time": 0.1333, + "angle": -299.58 + }, + { + "time": 0.2666, + "angle": -244.74 + }, + { + "time": 0.4, + "angle": -292.35 + }, + { + "time": 0.4333, + "angle": -315.84 + }, + { + "time": 0.5, + "angle": -347.94 + }, + { + "time": 0.7, + "angle": -347.33, + "curve": "stepped" + }, + { + "time": 2.2333, + "angle": -347.33 + }, + { + "time": 2.7, + "angle": -290.68 + }, + { + "time": 2.7666, + "angle": -285.1 + }, + { + "time": 4.6666, + "angle": -290.68 + }, + { + "time": 4.8, + "angle": 8.61 + }, + { + "time": 4.8666, + "angle": 10.94 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -44.69 + }, + { + "time": 0.1333, + "angle": 112.26 + }, + { + "time": 0.2666, + "angle": 129.07 + }, + { + "time": 0.4, + "angle": 134.94, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": 134.94 + }, + { + "time": 0.5666, + "angle": 172.6, + "curve": "stepped" + }, + { + "time": 0.9333, + "angle": 172.6, + "curve": "stepped" + }, + { + "time": 2.2333, + "angle": 172.6 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_bracer": { + "rotate": [ + { + "time": 0, + "angle": 21.88 + }, + { + "time": 0.1333, + "angle": 11.48 + }, + { + "time": 0.2666, + "angle": -18.81 + }, + { + "time": 0.4, + "angle": -18.92 + }, + { + "time": 0.4333, + "angle": -18.28 + }, + { + "time": 0.5, + "angle": 60.61 + }, + { + "time": 0.7, + "angle": -18.87, + "curve": "stepped" + }, + { + "time": 2.2333, + "angle": -18.87 + }, + { + "time": 2.7, + "angle": -1.95, + "curve": "stepped" + }, + { + "time": 4.6666, + "angle": -1.95 + }, + { + "time": 4.8, + "angle": 34.55 + }, + { + "time": 4.9333, + "angle": -18.74 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_fist": { + "rotate": [ + { + "time": 0, + "angle": -2.33 + }, + { + "time": 0.2666, + "angle": 26.34 + }, + { + "time": 0.7, + "angle": -6.07, + "curve": "stepped" + }, + { + "time": 2.2333, + "angle": -6.07 + }, + { + "time": 2.7, + "angle": 5.72, + "curve": "stepped" + }, + { + "time": 4.6666, + "angle": 5.72 + }, + { + "time": 4.8666, + "angle": -6.52 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_bracer": { + "rotate": [ + { + "time": 0, + "angle": 10.36 + }, + { + "time": 0.1333, + "angle": -23.12 + }, + { + "time": 0.2666, + "angle": -23.11 + }, + { + "time": 0.4, + "angle": -23.16, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": -23.16 + }, + { + "time": 0.5666, + "angle": -23.2, + "curve": "stepped" + }, + { + "time": 0.9333, + "angle": -23.2, + "curve": "stepped" + }, + { + "time": 2.2333, + "angle": -23.2 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": -2.78 + }, + { + "time": 0.1333, + "angle": -24.58 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "hip": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 0.9333, + "angle": 0, + "curve": "stepped" + }, + { + "time": 2.2333, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + }, + { + "time": 0.2, + "x": 50.34, + "y": 151.73 + }, + { + "time": 0.4, + "x": 5.16, + "y": -119.64, + "curve": "stepped" + }, + { + "time": 0.4333, + "x": 5.16, + "y": -119.64 + }, + { + "time": 0.5, + "x": 50.34, + "y": -205.18, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 50.34, + "y": -205.18, + "curve": "stepped" + }, + { + "time": 0.9333, + "x": 50.34, + "y": -205.18, + "curve": "stepped" + }, + { + "time": 2.2333, + "x": 50.34, + "y": -205.18 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.1333, + "angle": 8.47 + }, + { + "time": 0.2666, + "angle": 115.95 + }, + { + "time": 0.4, + "angle": 180.66, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": 180.66 + }, + { + "time": 0.5, + "angle": 155.22 + }, + { + "time": 0.6, + "angle": 97.73 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.1333, + "angle": -27.37 + }, + { + "time": 0.2666, + "angle": -35.1 + }, + { + "time": 0.4, + "angle": -37.72, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": -37.72 + }, + { + "time": 0.5, + "angle": -40.06 + }, + { + "time": 0.6, + "angle": 2.76 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_thigh": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.1333, + "angle": 70.45 + }, + { + "time": 0.2666, + "angle": 155.34 + }, + { + "time": 0.4, + "angle": 214.31, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": 214.31 + }, + { + "time": 0.5, + "angle": 169.67 + }, + { + "time": 0.8, + "angle": 83.27 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_shin": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.1333, + "angle": 18.93 + }, + { + "time": 0.2666, + "angle": -21.04 + }, + { + "time": 0.4, + "angle": -29.93, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": -29.93 + }, + { + "time": 0.5, + "angle": -16.79 + }, + { + "time": 0.8, + "angle": 7.77 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_foot": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.1333, + "angle": -11.62 + }, + { + "time": 0.4, + "angle": -45.59, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": -45.59 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_foot": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.4, + "angle": -48.75, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": -48.75 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "gunTip": { + "rotate": [ + { + "time": 0, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + } + } + }, + "hit": { + "slots": { + "front_fist": { + "attachment": [ + { + "time": 0.1666, + "name": "front_fist_open" + } + ] + }, + "mouth": { + "attachment": [ + { + "time": 0, + "name": "mouth_grind" + }, + { + "time": 0.3333, + "name": "mouth_smile" + } + ] + } + }, + "bones": { + "torso": { + "rotate": [ + { + "time": 0, + "angle": 56.42 + }, + { + "time": 0.3333, + "angle": 8.89 + } + ] + }, + "neck": { + "rotate": [ + { + "time": 0, + "angle": 35.38 + }, + { + "time": 0.2333, + "angle": 24.94 + } + ] + }, + "head": { + "rotate": [ + { + "time": 0, + "angle": 10.21 + }, + { + "time": 0.3333, + "angle": -41.3 + } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -310.92, + "curve": [ + 0.38, + 0.53, + 0.744, + 1 + ] + }, + { + "time": 0.3333, + "angle": -112.59 + } + ], + "translate": [ + { + "time": 0, + "x": 7.23, + "y": -13.13 + } + ] + }, + "front_bracer": { + "rotate": [ + { + "time": 0, + "angle": 36.99 + }, + { + "time": 0.3333, + "angle": -28.64 + } + ] + }, + "front_fist": { + "rotate": [ + { + "time": 0, + "angle": 13.59 + }, + { + "time": 0.3333, + "angle": 7.55 + } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 271.02, + "curve": [ + 0.342, + 0.36, + 0.68, + 0.71 + ] + }, + { + "time": 0.3333, + "angle": -15.84 + } + ], + "translate": [ + { + "time": 0.3333, + "x": -0.09, + "y": -0.46 + } + ] + }, + "rear_bracer": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.3333, + "angle": 40.03 + } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": 14.98 + }, + { + "time": 0.3333, + "angle": 39.75 + } + ] + }, + "hip": { + "translate": [ + { + "time": 0, + "x": -75.54, + "y": -78.03 + }, + { + "time": 0.2333, + "x": -36.48, + "y": 12.42 + }, + { + "time": 0.3333, + "x": -36.48, + "y": -2.99 + } + ] + }, + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 90.94, + "curve": [ + 0.227, + 0.26, + 0.432, + 1 + ] + }, + { + "time": 0.3333, + "angle": 32.02 + } + ], + "translate": [ + { + "time": 0, + "x": 7.21, + "y": -4 + } + ] + }, + "rear_thigh": { + "rotate": [ + { + "time": 0, + "angle": 40.51, + "curve": [ + 0.295, + 0.3, + 0.59, + 0.99 + ] + }, + { + "time": 0.3333, + "angle": 90.76 + } + ], + "translate": [ + { + "time": 0, + "x": -1.96, + "y": -0.32 + } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": -96.62 + }, + { + "time": 0.3333, + "angle": -15.13 + } + ] + }, + "rear_shin": { + "rotate": [ + { + "time": 0, + "angle": 7.99 + }, + { + "time": 0.3333, + "angle": -67.54 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_foot": { + "rotate": [ + { + "time": 0, + "angle": 5.4 + }, + { + "time": 0.3333, + "angle": -16.26 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_foot": { + "rotate": [ + { + "time": 0, + "angle": 2.67 + }, + { + "time": 0.3333, + "angle": -10.31 + } + ] + } + } + }, + "idle": { + "slots": { + "front_fist": { + "attachment": [ + { + "time": 0, + "name": "front_fist_open" + }, + { + "time": 1.6666, + "name": "front_fist_open" + } + ] + }, + "mouth": { + "attachment": [ + { + "time": 0, + "name": "mouth_smile" + }, + { + "time": 1.6666, + "name": "mouth_smile" + } + ] + } + }, + "bones": { + "torso": { + "rotate": [ + { + "time": 0, + "angle": -5.61, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.8333, + "angle": -9.65, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.6666, + "angle": -5.61 + } + ], + "translate": [ + { + "time": 0, + "x": -6.49, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -59.85, + "curve": [ + 0.492, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "angle": -54.31, + "curve": [ + 0.324, + 0.11, + 0.75, + 1 + ] + }, + { + "time": 1.6666, + "angle": -59.85 + } + ], + "translate": [ + { + "time": 0, + "x": -7.12, + "y": -8.23 + }, + { + "time": 0.6666, + "x": -6.32, + "y": -8.3 + }, + { + "time": 1.6666, + "x": -7.12, + "y": -8.23 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 62.41, + "curve": [ + 0.504, + 0.02, + 0.75, + 1 + ] + }, + { + "time": 0.7333, + "angle": 43.83, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.6666, + "angle": 62.41 + } + ], + "translate": [ + { + "time": 0, + "x": -1.83, + "y": -16.78 + }, + { + "time": 0.6666, + "x": 0.34, + "y": -15.23 + }, + { + "time": 1.6666, + "x": -1.83, + "y": -16.78 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "neck": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.6666, + "angle": 2.39 + }, + { + "time": 1.6666, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": -1.88, + "y": -4.76, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": -1.88, + "y": -4.76 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 0.64, + "curve": [ + 0.235, + 0, + 0.558, + 0.99 + ] + }, + { + "time": 0.6666, + "angle": -4.34, + "curve": [ + 0.594, + 0, + 0.653, + 1 + ] + }, + { + "time": 1.6666, + "angle": 0.64 + } + ], + "translate": [ + { + "time": 0, + "x": -13.39, + "y": 6.69, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": -13.39, + "y": 6.69 + } + ], + "scale": [ + { + "time": 0, + "x": 0.896, + "y": 1, + "curve": [ + 0.235, + 0, + 0.558, + 0.99 + ] + }, + { + "time": 0.6666, + "x": 0.825, + "y": 1, + "curve": [ + 0.594, + 0, + 0.653, + 1 + ] + }, + { + "time": 1.6666, + "x": 0.896, + "y": 1 + } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": -19.28, + "curve": "stepped" + }, + { + "time": 1.6666, + "angle": -19.28 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ + 0.235, + 0, + 0.558, + 0.99 + ] + }, + { + "time": 0.6666, + "x": 0.994, + "y": 1, + "curve": [ + 0.594, + 0, + 0.653, + 1 + ] + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "rear_thigh": { + "rotate": [ + { + "time": 0, + "angle": 30.5, + "curve": [ + 0.235, + 0, + 0.558, + 0.99 + ] + }, + { + "time": 0.6666, + "angle": 40.15, + "curve": [ + 0.594, + 0, + 0.653, + 1 + ] + }, + { + "time": 1.6666, + "angle": 30.5 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "rear_shin": { + "rotate": [ + { + "time": 0, + "angle": -23.83, + "curve": [ + 0.235, + 0, + 0.558, + 0.99 + ] + }, + { + "time": 0.6666, + "angle": -43.77, + "curve": [ + 0.594, + 0, + 0.653, + 1 + ] + }, + { + "time": 1.6666, + "angle": -23.83 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "front_foot": { + "rotate": [ + { + "time": 0, + "angle": 5.13, + "curve": [ + 0.235, + 0, + 0.558, + 0.99 + ] + }, + { + "time": 0.6666, + "angle": 10.04, + "curve": [ + 0.594, + 0, + 0.653, + 1 + ] + }, + { + "time": 1.6666, + "angle": 5.13 + } + ], + "scale": [ + { + "time": 0, + "x": 0.755, + "y": 1.309, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 0.755, + "y": 1.309 + } + ] + }, + "hip": { + "translate": [ + { + "time": 0, + "x": -6.63, + "y": -23.01, + "curve": [ + 0.235, + 0, + 0.558, + 0.99 + ] + }, + { + "time": 0.6666, + "x": 6.27, + "y": -35, + "curve": [ + 0.594, + 0, + 0.653, + 1 + ] + }, + { + "time": 1.6666, + "x": -6.63, + "y": -23.01 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "rear_foot": { + "rotate": [ + { + "time": 0, + "angle": -7.34, + "curve": [ + 0.235, + 0, + 0.558, + 0.99 + ] + }, + { + "time": 0.6666, + "angle": 3.85, + "curve": [ + 0.594, + 0, + 0.653, + 1 + ] + }, + { + "time": 1.6666, + "angle": -7.34 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "rear_bracer": { + "rotate": [ + { + "time": 0, + "angle": -17.16, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "angle": 12.52, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.6666, + "angle": -17.16 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "head": { + "rotate": [ + { + "time": 0, + "angle": -5.51, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "angle": -3.12, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.6666, + "angle": -5.51 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "front_bracer": { + "rotate": [ + { + "time": 0, + "angle": 45.46, + "curve": [ + 0.492, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "angle": 41.33, + "curve": [ + 0.32, + 0.1, + 0.736, + 0.91 + ] + }, + { + "time": 1.6666, + "angle": 45.46 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "angle": -15.59, + "curve": [ + 0.732, + 0, + 0.769, + 0.99 + ] + }, + { + "time": 1.6666, + "angle": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "front_fist": { + "rotate": [ + { + "time": 0, + "angle": -6.84, + "curve": [ + 0.492, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "angle": -14.63, + "curve": [ + 0.324, + 0.11, + 0.75, + 1 + ] + }, + { + "time": 1.6666, + "angle": -6.84 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "x": 0.689, + "y": 1.1, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + } + } + }, + "jump": { + "slots": { + "front_fist": { + "attachment": [ + { + "time": 0, + "name": "front_fist_open" + }, + { + "time": 0.2, + "name": "front_fist_closed" + }, + { + "time": 0.6666, + "name": "front_fist_open" + } + ] + }, + "mouth": { + "attachment": [ + { + "time": 0, + "name": "mouth_grind" + } + ] + }, + "torso": { + "attachment": [ + { + "time": 0, + "name": "torso" + } + ] + } + }, + "bones": { + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 91.53, + "curve": [ + 0.278, + 0.46, + 0.763, + 1 + ] + }, + { + "time": 0.2, + "angle": -35.83, + "curve": [ + 0.761, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.4333, + "angle": 127.74 + }, + { + "time": 0.7333, + "angle": 48.18, + "curve": [ + 0.227, + 0.26, + 0.432, + 1 + ] + }, + { + "time": 0.8333, + "angle": 25.35 + }, + { + "time": 0.9333, + "angle": 45.37 + }, + { + "time": 1.0333, + "angle": 38.12 + }, + { + "time": 1.1333, + "angle": 25.35 + }, + { + "time": 1.3333, + "angle": 91.53 + } + ], + "translate": [ + { + "time": 0, + "x": -2.56, + "y": 5.77 + }, + { + "time": 0.4333, + "x": 8.3, + "y": 7.98 + }, + { + "time": 0.7333, + "x": 7.21, + "y": -4 + }, + { + "time": 1.3333, + "x": -2.56, + "y": 5.77 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "torso": { + "rotate": [ + { + "time": 0, + "angle": -42.63 + }, + { + "time": 0.2, + "angle": -5.74 + }, + { + "time": 0.4333, + "angle": -50.76 + }, + { + "time": 0.7333, + "angle": 1.89 + }, + { + "time": 0.8333, + "angle": 11.58 + }, + { + "time": 0.9666, + "angle": -1.89 + }, + { + "time": 1.1333, + "angle": 11.58 + }, + { + "time": 1.3333, + "angle": -42.63 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_thigh": { + "rotate": [ + { + "time": 0, + "angle": -26.32 + }, + { + "time": 0.2, + "angle": 121.44 + }, + { + "time": 0.4333, + "angle": 70.54 + }, + { + "time": 0.7333, + "angle": 79.89, + "curve": [ + 0.295, + 0.3, + 0.59, + 0.99 + ] + }, + { + "time": 0.8333, + "angle": 99.12 + }, + { + "time": 0.9333, + "angle": 74.05 + }, + { + "time": 1.0333, + "angle": 98.04 + }, + { + "time": 1.1333, + "angle": 99.12 + }, + { + "time": 1.3333, + "angle": -26.32 + } + ], + "translate": [ + { + "time": 0, + "x": -0.56, + "y": -0.32 + }, + { + "time": 0.4333, + "x": -8.5, + "y": 10.58 + }, + { + "time": 0.7333, + "x": -1.96, + "y": -0.32 + }, + { + "time": 1.3333, + "x": -0.56, + "y": -0.32 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_shin": { + "rotate": [ + { + "time": 0, + "angle": -78.69 + }, + { + "time": 0.4333, + "angle": -55.56 + }, + { + "time": 0.7333, + "angle": -62.84 + }, + { + "time": 0.8333, + "angle": -80.74 + }, + { + "time": 0.9333, + "angle": -41.12 + }, + { + "time": 1.0333, + "angle": -77.4 + }, + { + "time": 1.1333, + "angle": -80.74 + }, + { + "time": 1.3333, + "angle": -78.69 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.7333, + "x": 1, + "y": 1 + } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -22.61 + }, + { + "time": 0.2, + "angle": -246.68 + }, + { + "time": 0.6, + "angle": 11.28, + "curve": [ + 0.246, + 0, + 0.633, + 0.53 + ] + }, + { + "time": 0.7333, + "angle": -57.45, + "curve": [ + 0.38, + 0.53, + 0.744, + 1 + ] + }, + { + "time": 0.8666, + "angle": -112.59 + }, + { + "time": 0.9333, + "angle": -102.17 + }, + { + "time": 1.0333, + "angle": -108.61 + }, + { + "time": 1.1333, + "angle": -112.59 + }, + { + "time": 1.3333, + "angle": -22.61 + } + ], + "translate": [ + { + "time": 0, + "x": 6.08, + "y": 7.15 + }, + { + "time": 0.2, + "x": 7.23, + "y": -13.13, + "curve": "stepped" + }, + { + "time": 0.7333, + "x": 7.23, + "y": -13.13 + }, + { + "time": 1.3333, + "x": 6.08, + "y": 7.15 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_bracer": { + "rotate": [ + { + "time": 0, + "angle": 66.46 + }, + { + "time": 0.2, + "angle": 42.39 + }, + { + "time": 0.4333, + "angle": 26.06 + }, + { + "time": 0.7333, + "angle": 13.28 + }, + { + "time": 0.8666, + "angle": -28.64 + }, + { + "time": 0.9333, + "angle": -22.31 + }, + { + "time": 1.0333, + "angle": -35.39 + }, + { + "time": 1.1333, + "angle": -28.64 + }, + { + "time": 1.3333, + "angle": 66.46 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_fist": { + "rotate": [ + { + "time": 0, + "angle": -28.43 + }, + { + "time": 0.4333, + "angle": -45.6 + }, + { + "time": 0.7333, + "angle": -53.66 + }, + { + "time": 0.8666, + "angle": 7.55 + }, + { + "time": 0.9333, + "angle": 31.15 + }, + { + "time": 1.0333, + "angle": -32.58 + }, + { + "time": 1.1333, + "angle": 7.55 + }, + { + "time": 1.3333, + "angle": -28.43 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 39.68 + }, + { + "time": 0.2, + "angle": 276.57 + }, + { + "time": 0.3, + "angle": 17.73 + }, + { + "time": 0.4333, + "angle": 83.38 + }, + { + "time": 0.6, + "angle": -4.71, + "curve": [ + 0.246, + 0, + 0.633, + 0.53 + ] + }, + { + "time": 0.7333, + "angle": -69.63, + "curve": [ + 0.342, + 0.36, + 0.68, + 0.71 + ] + }, + { + "time": 0.7666, + "angle": 321.47, + "curve": [ + 0.333, + 0.33, + 0.667, + 0.66 + ] + }, + { + "time": 0.8, + "angle": 33.7, + "curve": [ + 0.358, + 0.64, + 0.693, + 1 + ] + }, + { + "time": 0.8666, + "angle": 34.56 + }, + { + "time": 1.0333, + "angle": 71.96 + }, + { + "time": 1.1333, + "angle": 34.56 + }, + { + "time": 1.3333, + "angle": 39.68 + } + ], + "translate": [ + { + "time": 0, + "x": -3.1, + "y": -4.86 + }, + { + "time": 0.2, + "x": 23.33, + "y": 49.07 + }, + { + "time": 0.4333, + "x": 20.78, + "y": 40.21 + }, + { + "time": 1.3333, + "x": -3.1, + "y": -4.86 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_bracer": { + "rotate": [ + { + "time": 0, + "angle": 29.66 + }, + { + "time": 0.2, + "angle": 45.06 + }, + { + "time": 0.4333, + "angle": -4.34 + }, + { + "time": 0.7666, + "angle": 61.68 + }, + { + "time": 0.8, + "angle": 82.59 + }, + { + "time": 0.8666, + "angle": 80.06 + }, + { + "time": 1.0333, + "angle": 57.56 + }, + { + "time": 1.1333, + "angle": 80.06 + }, + { + "time": 1.3333, + "angle": 29.66 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "neck": { + "rotate": [ + { + "time": 0, + "angle": 24.9 + }, + { + "time": 0.2, + "angle": 16.31 + }, + { + "time": 0.4333, + "angle": 7.44 + }, + { + "time": 0.7333, + "angle": -20.35 + }, + { + "time": 0.8333, + "angle": -0.69, + "curve": "stepped" + }, + { + "time": 1.1333, + "angle": -0.69 + }, + { + "time": 1.3333, + "angle": 24.9 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "head": { + "rotate": [ + { + "time": 0, + "angle": 24.92 + }, + { + "time": 0.2, + "angle": 10.36 + }, + { + "time": 0.4333, + "angle": 28.65 + }, + { + "time": 0.7333, + "angle": -2.65 + }, + { + "time": 0.8333, + "angle": -28.94, + "curve": "stepped" + }, + { + "time": 1.1333, + "angle": -28.94 + }, + { + "time": 1.3333, + "angle": 24.92 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "hip": { + "rotate": [ + { + "time": 0, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": -34.51, + "y": -78.62, + "curve": [ + 0.232, + 1, + 0.75, + 1 + ] + }, + { + "time": 0.2, + "x": -34.51, + "y": 182.5, + "curve": [ + 0.232, + 0.48, + 0.598, + 0.79 + ] + }, + { + "time": 0.7666, + "x": -34.51, + "y": 596.22, + "curve": [ + 0.329, + 0.17, + 0.66, + 0.21 + ] + }, + { + "time": 1.1333, + "x": -34.51, + "y": 2.49 + }, + { + "time": 1.3333, + "x": -34.51, + "y": -78.62 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": -90.62, + "curve": [ + 0.416, + 0.54, + 0.743, + 1 + ] + }, + { + "time": 0.2, + "angle": -10.52, + "curve": [ + 0.644, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.4333, + "angle": -127.72 + }, + { + "time": 0.7333, + "angle": -19.91 + }, + { + "time": 0.8333, + "angle": -5.16 + }, + { + "time": 0.9333, + "angle": -35.06 + }, + { + "time": 1.0333, + "angle": -43.97 + }, + { + "time": 1.1333, + "angle": -5.16 + }, + { + "time": 1.3333, + "angle": -90.62 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_foot": { + "rotate": [ + { + "time": 0, + "angle": -0.79 + }, + { + "time": 0.0333, + "angle": 16.27 + }, + { + "time": 0.0666, + "angle": 23.52 + }, + { + "time": 0.1, + "angle": 21.02 + }, + { + "time": 0.1333, + "angle": 10.92 + }, + { + "time": 0.2, + "angle": -38.45 + }, + { + "time": 0.4333, + "angle": 6.62 + }, + { + "time": 0.7333, + "angle": -11.51 + }, + { + "time": 1.0333, + "angle": -22.91 + }, + { + "time": 1.3333, + "angle": -0.79 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_foot": { + "rotate": [ + { + "time": 0, + "angle": -12.77 + }, + { + "time": 0.2, + "angle": 17.05 + }, + { + "time": 0.4333, + "angle": 19.45 + }, + { + "time": 0.7333, + "angle": 2.67 + }, + { + "time": 1.0333, + "angle": -28.49 + }, + { + "time": 1.3333, + "angle": -12.77 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": 6.18 + }, + { + "time": 0.2, + "angle": 30.81 + }, + { + "time": 0.4333, + "angle": 13.25 + }, + { + "time": 0.7333, + "angle": 14.98 + }, + { + "time": 0.7666, + "angle": 25.64 + }, + { + "time": 0.8, + "angle": 20.62 + }, + { + "time": 0.8666, + "angle": 64.52 + }, + { + "time": 1.0333, + "angle": 8.59 + }, + { + "time": 1.1333, + "angle": 64.52 + }, + { + "time": 1.3333, + "angle": 6.18 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + } + } + }, + "run": { + "slots": { + "front_fist": { + "attachment": [ + { + "time": 0, + "name": "front_fist_closed" + } + ] + }, + "mouth": { + "attachment": [ + { + "time": 0, + "name": "mouth_grind" + } + ] + }, + "torso": { + "attachment": [ + { + "time": 0, + "name": "torso" + } + ] + } + }, + "bones": { + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 42.05, + "curve": [ + 0.195, + 0.86, + 0.75, + 1 + ] + }, + { + "time": 0.0666, + "angle": 46.07 + }, + { + "time": 0.1333, + "angle": -20.28 + }, + { + "time": 0.2, + "angle": -27.23 + }, + { + "time": 0.2666, + "angle": -47.16 + }, + { + "time": 0.3333, + "angle": -39.79 + }, + { + "time": 0.4, + "angle": -25.86 + }, + { + "time": 0.4666, + "angle": 14.35 + }, + { + "time": 0.5333, + "angle": 55.62 + }, + { + "time": 0.6, + "angle": 69.65 + }, + { + "time": 0.6666, + "angle": 86.4 + }, + { + "time": 0.7333, + "angle": 65.87 + }, + { + "time": 0.8, + "angle": 42.05 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + }, + { + "time": 0.0333, + "x": -5.79, + "y": 11.15 + }, + { + "time": 0.0666, + "x": -5.13, + "y": 11.55 + }, + { + "time": 0.1333, + "x": -7.7, + "y": 8.98 + }, + { + "time": 0.5333, + "x": -1.26, + "y": 3.83 + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "torso": { + "rotate": [ + { + "time": 0, + "angle": -39.7 + }, + { + "time": 0.2, + "angle": -57.29 + }, + { + "time": 0.4, + "angle": -39.7 + }, + { + "time": 0.6, + "angle": -57.29 + }, + { + "time": 0.8, + "angle": -39.7 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.4, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_thigh": { + "rotate": [ + { + "time": 0, + "angle": -56.59 + }, + { + "time": 0.0666, + "angle": -21.57 + }, + { + "time": 0.1333, + "angle": 27.95 + }, + { + "time": 0.2, + "angle": 42.42 + }, + { + "time": 0.2666, + "angle": 62.37 + }, + { + "time": 0.3333, + "angle": 45.42 + }, + { + "time": 0.4, + "angle": 15.67 + }, + { + "time": 0.4666, + "angle": 28.22 + }, + { + "time": 0.5333, + "angle": -38.62 + }, + { + "time": 0.6, + "angle": -53.26 + }, + { + "time": 0.6666, + "angle": -79.31 + }, + { + "time": 0.7333, + "angle": -86.47 + }, + { + "time": 0.8, + "angle": -56.59 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + }, + { + "time": 0.4, + "x": -6.76, + "y": -3.86 + }, + { + "time": 0.4333, + "x": -15.85, + "y": 7.28 + }, + { + "time": 0.4666, + "x": -13.04, + "y": 4.04 + }, + { + "time": 0.5, + "x": -10.24, + "y": 7.11 + }, + { + "time": 0.5333, + "x": -9.01, + "y": -5.15 + }, + { + "time": 0.6666, + "x": -23.18, + "y": -2.57 + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_shin": { + "rotate": [ + { + "time": 0, + "angle": -74 + }, + { + "time": 0.0666, + "angle": -83.38 + }, + { + "time": 0.1333, + "angle": -106.69 + }, + { + "time": 0.2, + "angle": -66.01 + }, + { + "time": 0.2666, + "angle": -55.22 + }, + { + "time": 0.3333, + "angle": -24.8 + }, + { + "time": 0.4, + "angle": 18.44, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.4666, + "angle": -56.65 + }, + { + "time": 0.5333, + "angle": -11.94, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "angle": -41.26 + }, + { + "time": 0.7333, + "angle": -43.6 + }, + { + "time": 0.8, + "angle": -74 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -89.36 + }, + { + "time": 0.0666, + "angle": -95.67 + }, + { + "time": 0.1333, + "angle": -22 + }, + { + "time": 0.2, + "angle": -316.04 + }, + { + "time": 0.2666, + "angle": -274.94 + }, + { + "time": 0.3333, + "angle": -273.74 + }, + { + "time": 0.4, + "angle": -272.09 + }, + { + "time": 0.4666, + "angle": -264.89 + }, + { + "time": 0.5333, + "angle": -320.09 + }, + { + "time": 0.6, + "angle": -50.83 + }, + { + "time": 0.6666, + "angle": -81.72 + }, + { + "time": 0.7333, + "angle": -83.92 + }, + { + "time": 0.8, + "angle": -89.36 + } + ], + "translate": [ + { + "time": 0, + "x": 6.24, + "y": 10.05 + }, + { + "time": 0.2666, + "x": 4.95, + "y": -13.13 + }, + { + "time": 0.6, + "x": -2.43, + "y": 1.94 + }, + { + "time": 0.8, + "x": 6.24, + "y": 10.05 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_bracer": { + "rotate": [ + { + "time": 0, + "angle": 33.43 + }, + { + "time": 0.0666, + "angle": 20.53 + }, + { + "time": 0.1333, + "angle": 15.26 + }, + { + "time": 0.2, + "angle": 19.28 + }, + { + "time": 0.2666, + "angle": 22.62 + }, + { + "time": 0.3333, + "angle": 37.29 + }, + { + "time": 0.4, + "angle": 41.53 + }, + { + "time": 0.4666, + "angle": 31.73 + }, + { + "time": 0.5333, + "angle": 67.45 + }, + { + "time": 0.6666, + "angle": 39.77 + }, + { + "time": 0.7333, + "angle": 30.95 + }, + { + "time": 0.8, + "angle": 33.43 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_fist": { + "rotate": [ + { + "time": 0, + "angle": -19.75 + }, + { + "time": 0.0666, + "angle": -37.11 + }, + { + "time": 0.1333, + "angle": -50.79 + }, + { + "time": 0.2666, + "angle": -12.69 + }, + { + "time": 0.3333, + "angle": 3.01 + }, + { + "time": 0.4333, + "angle": 12.05 + }, + { + "time": 0.5333, + "angle": 13.25 + }, + { + "time": 0.8, + "angle": -19.75 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 68.68 + }, + { + "time": 0.0666, + "angle": 73.89 + }, + { + "time": 0.1333, + "angle": -9.64 + }, + { + "time": 0.2, + "angle": 284.27 + }, + { + "time": 0.2666, + "angle": 283.29 + }, + { + "time": 0.3333, + "angle": 278.28 + }, + { + "time": 0.4, + "angle": 271.02 + }, + { + "time": 0.4666, + "angle": 263.2 + }, + { + "time": 0.5333, + "angle": 314.25 + }, + { + "time": 0.6, + "angle": 16.83 + }, + { + "time": 0.6666, + "angle": 70.35 + }, + { + "time": 0.7333, + "angle": 73.53 + }, + { + "time": 0.8, + "angle": 68.68 + } + ], + "translate": [ + { + "time": 0, + "x": -2.57, + "y": -8.89 + }, + { + "time": 0.1333, + "x": -4.68, + "y": 7.2 + }, + { + "time": 0.2, + "x": 21.73, + "y": 51.17 + }, + { + "time": 0.6, + "x": 4.33, + "y": 2.05 + }, + { + "time": 0.8, + "x": -2.57, + "y": -8.89 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_bracer": { + "rotate": [ + { + "time": 0, + "angle": 31.04 + }, + { + "time": 0.0666, + "angle": 28.28 + }, + { + "time": 0.1333, + "angle": 49.36 + }, + { + "time": 0.2, + "angle": 59.37 + }, + { + "time": 0.2666, + "angle": 8.56 + }, + { + "time": 0.3333, + "angle": 9.38 + }, + { + "time": 0.4, + "angle": 11.51 + }, + { + "time": 0.4666, + "angle": 7.22 + }, + { + "time": 0.5333, + "angle": -18.44 + }, + { + "time": 0.6, + "angle": 11.44 + }, + { + "time": 0.6666, + "angle": 9.99 + }, + { + "time": 0.7333, + "angle": 8.28 + }, + { + "time": 0.8, + "angle": 31.04 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "neck": { + "rotate": [ + { + "time": 0, + "angle": 11.03 + }, + { + "time": 0.2, + "angle": 13.58 + }, + { + "time": 0.4, + "angle": 11.03 + }, + { + "time": 0.6, + "angle": 13.58 + }, + { + "time": 0.8, + "angle": 11.03 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.4, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "head": { + "rotate": [ + { + "time": 0, + "angle": 11.03 + }, + { + "time": 0.1, + "angle": 12.34 + }, + { + "time": 0.2, + "angle": 25.55 + }, + { + "time": 0.4, + "angle": 11.03 + }, + { + "time": 0.5, + "angle": 12.34 + }, + { + "time": 0.6, + "angle": 25.55 + }, + { + "time": 0.8, + "angle": 11.03 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.4, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "hip": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": -62.47, + "y": -23.1 + }, + { + "time": 0.0666, + "x": -62.47, + "y": -38.51, + "curve": [ + 0.244, + 0.04, + 0.75, + 1 + ] + }, + { + "time": 0.2666, + "x": -62.47, + "y": 22.28, + "curve": [ + 0.17, + 0.52, + 0.75, + 1 + ] + }, + { + "time": 0.4, + "x": -62.47, + "y": -23.1 + }, + { + "time": 0.4333, + "x": -62.47, + "y": -24.59 + }, + { + "time": 0.4666, + "x": -62.47, + "y": -43.29, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "x": -62.47, + "y": 22.28 + }, + { + "time": 0.8, + "x": -62.47, + "y": -23.1 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ + 0.481, + 0.01, + 0.75, + 1 + ] + }, + { + "time": 0.0666, + "angle": -64.42 + }, + { + "time": 0.1333, + "angle": -20.59, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.2666, + "angle": -62.51 + }, + { + "time": 0.3333, + "angle": -79.74 + }, + { + "time": 0.4, + "angle": -78.28 + }, + { + "time": 0.4666, + "angle": -118.96, + "curve": [ + 0.93, + 0, + 0.952, + 0.95 + ] + }, + { + "time": 0.6, + "angle": -88.95 + }, + { + "time": 0.6666, + "angle": -79.09 + }, + { + "time": 0.7333, + "angle": -47.77 + }, + { + "time": 0.8, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_foot": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.0333, + "angle": -21.13, + "curve": [ + 0.121, + 0.23, + 0.75, + 1 + ] + }, + { + "time": 0.0666, + "angle": 17.64 + }, + { + "time": 0.1, + "angle": 29.92 + }, + { + "time": 0.1333, + "angle": 16.44 + }, + { + "time": 0.2, + "angle": -29.22 + }, + { + "time": 0.2666, + "angle": -1.61 + }, + { + "time": 0.3333, + "angle": -10.22 + }, + { + "time": 0.4666, + "angle": -15.99 + }, + { + "time": 0.6, + "angle": 9.03 + }, + { + "time": 0.7333, + "angle": 17.32 + }, + { + "time": 0.8, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_foot": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.0666, + "angle": -12.04 + }, + { + "time": 0.1333, + "angle": -0.87 + }, + { + "time": 0.2, + "angle": 25.81 + }, + { + "time": 0.2666, + "angle": 4.71 + }, + { + "time": 0.4, + "angle": 18.09, + "curve": [ + 0.281, + 0.73, + 0.75, + 1 + ] + }, + { + "time": 0.4333, + "angle": -1.7 + }, + { + "time": 0.4666, + "angle": 27.12 + }, + { + "time": 0.5, + "angle": 38.83 + }, + { + "time": 0.5333, + "angle": 30.76 + }, + { + "time": 0.5666, + "angle": -20.49 + }, + { + "time": 0.6, + "angle": -30.8 + }, + { + "time": 0.6666, + "angle": -1.31 + }, + { + "time": 0.8, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.1333, + "angle": 24.72 + }, + { + "time": 0.5, + "angle": -11.87 + }, + { + "time": 0.8, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + } + }, + "events": [ + { + "time": 0, + "name": "footstep" + }, + { + "time": 0.4, + "name": "footstep", + "int": 1 + } + ] + }, + "shoot": { + "slots": { + "front_fist": { + "attachment": [ + { + "time": 0.1333, + "name": "front_fist_closed" + }, + { + "time": 0.4, + "name": "front_fist_open" + } + ] + }, + "mouth": { + "attachment": [ + { + "time": 0.1333, + "name": "mouth_grind" + } + ] + }, + "muzzle": { + "attachment": [ + { + "time": 0.1333, + "name": "muzzle" + }, + { + "time": 0.2666, + "name": null + } + ], + "color": [ + { + "time": 0.1333, + "color": "ffffff00", + "curve": [ + 0.118, + 0.99, + 0.75, + 1 + ] + }, + { + "time": 0.1666, + "color": "ffffffff", + "curve": [ + 0.821, + 0, + 0.909, + 0.89 + ] + }, + { + "time": 0.2666, + "color": "ffffff00" + } + ] + } + }, + "bones": { + "front_fist": { + "scale": [ + { + "time": 0.1333, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.4, + "x": 1, + "y": 1 + } + ] + }, + "gunTip": { + "translate": [ + { + "time": 0.1333, + "x": 0, + "y": 0 + }, + { + "time": 0.2, + "x": 20.93, + "y": 1.57 + } + ], + "scale": [ + { + "time": 0.1333, + "x": 1, + "y": 1 + }, + { + "time": 0.2, + "x": 1.247, + "y": 1.516 + } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": 1.9 + } + ], + "translate": [ + { + "time": 0, + "x": 7.95, + "y": 5.84, + "curve": [ + 0, + 0.3, + 0.678, + 1 + ] + }, + { + "time": 0.3, + "x": -9.3, + "y": -1.41 + }, + { + "time": 0.4, + "x": 0, + "y": 0 + } + ] + }, + "rear_bracer": { + "rotate": [ + { + "time": 0, + "angle": -30.47 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ + 0, + 0.3, + 0.678, + 1 + ] + }, + { + "time": 0.3, + "x": -5.99, + "y": -3.71 + }, + { + "time": 0.4, + "x": 0, + "y": 0 + } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 62.3 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ + 0, + 0.3, + 0.678, + 1 + ] + }, + { + "time": 0.3, + "x": 2.81, + "y": 11.41 + }, + { + "time": 0.4, + "x": 0, + "y": 0 + } + ] + } + } + }, + "test": { + "slots": { + "front_foot": { + "color": [ + { + "time": 0.6666, + "color": "ffffffff" + }, + { + "time": 1.3333, + "color": "ff0700ff" + } + ] + }, + "gun": { + "color": [ + { + "time": 0, + "color": "ffffffff", + "curve": "stepped" + }, + { + "time": 0.6666, + "color": "ffffffff" + }, + { + "time": 1.3333, + "color": "32ff00ff" + } + ] + }, + "rear_foot": { + "color": [ + { + "time": 0.6666, + "color": "ffffffff" + }, + { + "time": 1.3333, + "color": "ff0700ff" + } + ] + } + }, + "bones": { + "head": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.3333, + "angle": -20.72 + }, + { + "time": 0.6666, + "angle": -32.41 + }, + { + "time": 1, + "angle": -5.3 + }, + { + "time": 1.3333, + "angle": 24.96 + }, + { + "time": 1.6666, + "angle": 15.61 + }, + { + "time": 2, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ + 0.172, + 0.37, + 0.574, + 0.73 + ] + }, + { + "time": 0.1666, + "x": 144.19, + "y": -77.59, + "curve": [ + 0.372, + 0.61, + 0.765, + 1 + ] + }, + { + "time": 0.3333, + "x": 217.61, + "y": -192.63, + "curve": [ + 0.282, + 0, + 0.624, + 0.31 + ] + }, + { + "time": 0.5, + "x": 181.21, + "y": -365.66, + "curve": [ + 0.313, + 0.21, + 0.654, + 0.54 + ] + }, + { + "time": 0.6666, + "x": 20.09, + "y": -500.4, + "curve": [ + 0.147, + 0.27, + 0.75, + 1 + ] + }, + { + "time": 0.8333, + "x": -194.24, + "y": -341.84 + }, + { + "time": 1, + "x": -307.93, + "y": -114 + }, + { + "time": 1.1666, + "x": -330.38, + "y": 121.42, + "curve": [ + 0.25, + 0, + 0.764, + 0.48 + ] + }, + { + "time": 1.3333, + "x": -240.42, + "y": 335.66, + "curve": [ + 0.229, + 0.37, + 0.58, + 0.73 + ] + }, + { + "time": 1.5, + "x": -56.12, + "y": 288.06, + "curve": [ + 0.296, + 0.6, + 0.641, + 1 + ] + }, + { + "time": 1.6666, + "x": 87.63, + "y": 191.33, + "curve": [ + 0.238, + 0, + 0.626, + 0.39 + ] + }, + { + "time": 1.8333, + "x": 60.62, + "y": 95.14, + "curve": [ + 0.41, + 0.26, + 0.803, + 0.62 + ] + }, + { + "time": 2, + "x": 0, + "y": 0 + } + ] + } + }, + "draworder": [ + { + "time": 0.6666, + "offsets": [ + { + "slot": "head", + "offset": -9 + }, + { + "slot": "eye", + "offset": -9 + }, + { + "slot": "mouth", + "offset": -12 + }, + { + "slot": "goggles", + "offset": -12 + } + ] + }, + { + "time": 1.3333 + } + ], + "events": [ + { + "time": 0, + "name": "headPop", + "int": 0, + "float": 0, + "string": "pop.wav" + }, + { + "time": 1, + "name": "headBehind", + "int": 7, + "float": 8, + "string": "animate" + }, + { + "time": 2, + "name": "headAttach", + "int": 0, + "float": 0, + "string": "attach.wav" + } + ] + }, + "walk": { + "slots": { + "front_fist": { + "attachment": [ + { + "time": 0, + "name": "front_fist_closed" + } + ] + }, + "mouth": { + "attachment": [ + { + "time": 0, + "name": "mouth_smile" + } + ] + }, + "torso": { + "attachment": [ + { + "time": 0, + "name": "torso" + } + ] + } + }, + "bones": { + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 15.79 + }, + { + "time": 0.1, + "angle": 27.39 + }, + { + "time": 0.2, + "angle": -7.94 + }, + { + "time": 0.3, + "angle": -16.94 + }, + { + "time": 0.4, + "angle": -28.62 + }, + { + "time": 0.5, + "angle": -19.3 + }, + { + "time": 0.6, + "angle": -3.08 + }, + { + "time": 0.7, + "angle": 29.51 + }, + { + "time": 0.8, + "angle": 15.79 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + }, + { + "time": 0.4, + "x": -1.18, + "y": 0.54 + }, + { + "time": 0.5, + "x": 0.11, + "y": 0.41 + }, + { + "time": 0.6, + "x": 9.48, + "y": 0.27 + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.4, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": 5.12 + }, + { + "time": 0.1, + "angle": -20.87 + }, + { + "time": 0.2, + "angle": 13.37 + }, + { + "time": 0.3, + "angle": 15.98 + }, + { + "time": 0.4, + "angle": 5.94 + }, + { + "time": 0.5, + "angle": -26.76 + }, + { + "time": 0.7, + "angle": -55.44 + }, + { + "time": 0.8, + "angle": 5.12 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_thigh": { + "rotate": [ + { + "time": 0, + "angle": -34.38 + }, + { + "time": 0.1, + "angle": -30.32 + }, + { + "time": 0.2, + "angle": -37.22 + }, + { + "time": 0.3, + "angle": 20.73 + }, + { + "time": 0.4, + "angle": 8.69 + }, + { + "time": 0.5, + "angle": 12.16 + }, + { + "time": 0.6, + "angle": -24.62 + }, + { + "time": 0.7, + "angle": -27.26 + }, + { + "time": 0.8, + "angle": -34.38 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + }, + { + "time": 0.4, + "x": 4.08, + "y": -9.53 + }, + { + "time": 0.5, + "x": 0, + "y": 0 + }, + { + "time": 0.7, + "x": -21.14, + "y": -9.6 + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_shin": { + "rotate": [ + { + "time": 0, + "angle": 14.26 + }, + { + "time": 0.1, + "angle": -17.3 + }, + { + "time": 0.2, + "angle": -12.67 + }, + { + "time": 0.3, + "angle": -58.89 + }, + { + "time": 0.4, + "angle": 15.95 + }, + { + "time": 0.5, + "angle": -9 + }, + { + "time": 0.6, + "angle": 26.06 + }, + { + "time": 0.7, + "angle": 21.85 + }, + { + "time": 0.8, + "angle": 14.26 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + }, + { + "time": 0.1, + "x": 0.951, + "y": 1 + }, + { + "time": 0.5, + "x": 0.975, + "y": 1 + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_foot": { + "rotate": [ + { + "time": 0, + "angle": 10.13 + }, + { + "time": 0.1, + "angle": 12.27 + }, + { + "time": 0.2, + "angle": -2.94 + }, + { + "time": 0.3, + "angle": 6.29 + }, + { + "time": 0.4, + "angle": 13.45 + }, + { + "time": 0.5, + "angle": -3.57 + }, + { + "time": 0.6, + "angle": -0.97 + }, + { + "time": 0.7, + "angle": 2.97 + }, + { + "time": 0.8, + "angle": 10.13 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -23.74 + }, + { + "time": 0.4, + "angle": -320.57 + }, + { + "time": 0.8, + "angle": -23.74 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 11.62 + }, + { + "time": 0.1, + "angle": 19.36 + }, + { + "time": 0.4, + "angle": 345.26 + }, + { + "time": 0.5, + "angle": 343.44 + }, + { + "time": 0.8, + "angle": 11.62 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "torso": { + "rotate": [ + { + "time": 0, + "angle": -12.11 + }, + { + "time": 0.1666, + "angle": -17.16 + }, + { + "time": 0.4, + "angle": -12.11 + }, + { + "time": 0.5666, + "angle": -15.81 + }, + { + "time": 0.8, + "angle": -12.11 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "neck": { + "rotate": [ + { + "time": 0, + "angle": 1.41 + }, + { + "time": 0.2333, + "angle": -3.04 + }, + { + "time": 0.4, + "angle": 1.41 + }, + { + "time": 0.6333, + "angle": -3.04 + }, + { + "time": 0.8, + "angle": 1.41 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.4, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "head": { + "rotate": [ + { + "time": 0, + "angle": 6.97 + }, + { + "time": 0.1666, + "angle": 8.02 + }, + { + "time": 0.2666, + "angle": 12.65 + }, + { + "time": 0.4, + "angle": 6.97 + }, + { + "time": 0.5666, + "angle": 8.02 + }, + { + "time": 0.6666, + "angle": 12.65 + }, + { + "time": 0.8, + "angle": 6.97 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.4, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "hip": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": -23.93, + "y": 3.22, + "curve": [ + 0.518, + 0.03, + 0.807, + 0.61 + ] + }, + { + "time": 0.1, + "x": -23.93, + "y": -9.24, + "curve": [ + 0.135, + 0.33, + 0.601, + 0.99 + ] + }, + { + "time": 0.2, + "x": -23.93, + "y": 4.35, + "curve": [ + 0.204, + 0.68, + 0.75, + 1 + ] + }, + { + "time": 0.3, + "x": -23.93, + "y": 2.38, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.4, + "x": -23.93, + "y": -2.5, + "curve": [ + 0.692, + 0.01, + 0.75, + 1 + ] + }, + { + "time": 0.5, + "x": -23.93, + "y": -10.32, + "curve": [ + 0.235, + 0.77, + 0.75, + 1 + ] + }, + { + "time": 0.6, + "x": -23.93, + "y": 4.35, + "curve": [ + 0.287, + 0.37, + 0.718, + 0.76 + ] + }, + { + "time": 0.7, + "x": -23.93, + "y": 10.34, + "curve": [ + 0.615, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.8, + "x": -23.93, + "y": 3.22 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_bracer": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.4, + "angle": 20.59 + }, + { + "time": 0.8, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_foot": { + "rotate": [ + { + "time": 0, + "angle": 12.49 + }, + { + "time": 0.1, + "angle": -8.34 + }, + { + "time": 0.2, + "angle": -6.17 + }, + { + "time": 0.3, + "angle": -0.75 + }, + { + "time": 0.3333, + "angle": 3.89 + }, + { + "time": 0.4, + "angle": 10.22 + }, + { + "time": 0.5, + "angle": 11.44 + }, + { + "time": 0.6, + "angle": -0.33 + }, + { + "time": 0.7, + "angle": 0.15 + }, + { + "time": 0.8, + "angle": 12.49 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_bracer": { + "rotate": [ + { + "time": 0, + "angle": 3.58 + }, + { + "time": 0.1, + "angle": 5.51 + }, + { + "time": 0.4, + "angle": -22.77 + }, + { + "time": 0.5, + "angle": -9.65 + }, + { + "time": 0.8, + "angle": 3.58 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_fist": { + "rotate": [ + { + "time": 0, + "angle": -15.22 + }, + { + "time": 0.1, + "angle": -51.4 + }, + { + "time": 0.4, + "angle": -39.4 + }, + { + "time": 0.5, + "angle": 19.26 + }, + { + "time": 0.8, + "angle": -15.22 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": -24.06, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.1, + "angle": -10.94, + "curve": [ + 0.381, + 0.54, + 0.742, + 1 + ] + }, + { + "time": 0.4, + "angle": 25.34, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "angle": -27.47, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.8, + "angle": -24.06 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + } + } + } + } + }, + [ + 0 + ] + ] + ], + 0, + 0, + [ + 0 + ], + [ + -1 + ], + [ + 1 + ] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + { + "name": "1655112563832", + "rect": [ + 0, + 0, + 660, + 554 + ], + "offset": [ + 0, + 0 + ], + "originalSize": [ + 660, + 554 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 0 + ], + [ + 11 + ] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + [ + 5, + "SFNSMonoItalic", + "SFNSMonoItalic.ttf" + ], + -1 + ], + 0, + 0, + [], + [], + [] + ], + [ + [ + { + "name": "spineboy", + "rect": [ + 2, + 2, + 998, + 240 + ], + "offset": [ + -11, + 6 + ], + "originalSize": [ + 1024, + 256 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 0 + ], + [ + 1 + ] + ] + ] +] \ No newline at end of file diff --git a/demo/web-mobile/assets/common/index.40d4c.js b/demo/web-mobile/assets/common/index.40d4c.js new file mode 100644 index 00000000..a4d827f4 --- /dev/null +++ b/demo/web-mobile/assets/common/index.40d4c.js @@ -0,0 +1,29 @@ +(function e(t, n, r) { + function s(o, u) { + if (!n[o]) { + if (!t[o]) { + var b = o.split("/"); + b = b[b.length - 1]; + if (!t[b]) { + var a = "function" == typeof __require && __require; + if (!u && a) return a(b, !0); + if (i) return i(b, !0); + throw new Error("Cannot find module '" + o + "'"); + } + o = b; + } + var f = n[o] = { + exports: {} + }; + t[o][0].call(f.exports, function(e) { + var n = t[o][1][e]; + return s(n || e); + }, f, f.exports, e, t, n, r); + } + return n[o].exports; + } + var i = "function" == typeof __require && __require; + for (var o = 0; o < r.length; o++) s(r[o]); + return s; +})({}, {}, []); +//# sourceMappingURL=index.js.map diff --git a/demo/web-mobile/assets/common/index.js.map b/demo/web-mobile/assets/common/index.js.map new file mode 100644 index 00000000..a6d01198 --- /dev/null +++ b/demo/web-mobile/assets/common/index.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"index.js"} \ No newline at end of file diff --git a/demo/web-mobile/assets/common/native/1c/1c8a3cc1-a452-4276-848d-2bdf30e6852a.91637.png b/demo/web-mobile/assets/common/native/1c/1c8a3cc1-a452-4276-848d-2bdf30e6852a.91637.png new file mode 100644 index 0000000000000000000000000000000000000000..c81fbe1872d965a1b68513ecdd6acc81d3e248a2 GIT binary patch literal 43060 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¥8aOAU&74+jD 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 literal 0 HcmV?d00001 diff --git a/demo/web-mobile/assets/common/native/39/398d85b3-4934-44c0-8d8e-3812b99f015e.2eb47.png b/demo/web-mobile/assets/common/native/39/398d85b3-4934-44c0-8d8e-3812b99f015e.2eb47.png new file mode 100644 index 0000000000000000000000000000000000000000..1a3ad88fc3572c24af8bc54f6bb92e3aaa910cee GIT binary patch literal 285630 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 literal 0 HcmV?d00001 diff --git a/demo/web-mobile/assets/common/native/45/45be59f3-5655-4369-9e9f-455c81d2ddd9.ca872.png b/demo/web-mobile/assets/common/native/45/45be59f3-5655-4369-9e9f-455c81d2ddd9.ca872.png new file mode 100644 index 0000000000000000000000000000000000000000..c8fdfac77cd9190c54b4288937a2acc47f9325fa GIT binary patch literal 68654 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�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%0A-v#qZhZ6e=9)WvYo)qg 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 literal 0 HcmV?d00001 diff --git a/demo/web-mobile/assets/common/native/68/6843f00b-0ef4-4b7c-aac0-42ee42635e55.9a531.png b/demo/web-mobile/assets/common/native/68/6843f00b-0ef4-4b7c-aac0-42ee42635e55.9a531.png new file mode 100644 index 0000000000000000000000000000000000000000..18265803b0f78942dab8d949ce9d4c4d9762943d GIT binary patch literal 105052 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 FV1kJ4Ed~Gp literal 0 HcmV?d00001 diff --git a/demo/web-mobile/assets/common/native/6e/6e056173-d285-473c-b206-40a7fff5386e.6d3cf.png b/demo/web-mobile/assets/common/native/6e/6e056173-d285-473c-b206-40a7fff5386e.6d3cf.png new file mode 100644 index 0000000000000000000000000000000000000000..8050170ccf3fb7d031bc06928ce6f6b643d25d07 GIT binary patch literal 418 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU3?z3ec*Fy#oB*E?SD(znPoF-SnwolhdjlCC zKYj#~5b*#1e|vlT+qZAOfB(L*v2owNeQj-RPEJlCAt4VRK8%Tpv9z>&{rYujY3cLl z&zqW>y1ToRlaue>y*qdA+><9yUcY|*(xpoU1qEJSUYj;;%F4>xY$aL&w3n+S$S;@y zX!^U(32!H|HD~(V1&ZGGba4!+xOMl+O};}4BCdfJp_vP(+}e5W#sB|{nFTLL>^$=0 zNnKpxF3vaKQ&&Dn={8B$mb*Hs(?Ua{Ux(%D1e22sJR&^qOlD=A+Ty*+;7WyA%fhb) zoQIDces){*cC2|=ar%|u8~F@3m@8lJE4!W3S-$34!CGzosoQ$5UOt&Kx7f%ad+LMG zyY(&Z+yRsB#&%}TE)#pV_jBwgOO22BGL^pHWlmam?)0A+=J|?SlK-A#a^xsZW>;q9 zO49LT(0K7HIpUI^-GYS=E1H|0w?%9=(G~wFpE*tM(Y|N%%UM@U=ie2^p(+RTCWEJ| KpUXO@geCy3Aj$y% literal 0 HcmV?d00001 diff --git a/demo/web-mobile/assets/common/native/70/702455ac-9b92-4dd7-b143-cb02342dbe48.7b3fa.png b/demo/web-mobile/assets/common/native/70/702455ac-9b92-4dd7-b143-cb02342dbe48.7b3fa.png new file mode 100644 index 0000000000000000000000000000000000000000..791d8fad6ad84d74c27b8f1ee1a2f3b5423ffd94 GIT binary patch literal 138343 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

JQ>TSG8IePfoDI)`4 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 z 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 VxEs7{IamMy002ovPDHLkV1lM^cN+iz literal 0 HcmV?d00001 diff --git a/demo/web-mobile/assets/common/native/c1/c11dfdd2-97c6-409c-9c0f-fdfa681f16a9.d86d7.png b/demo/web-mobile/assets/common/native/c1/c11dfdd2-97c6-409c-9c0f-fdfa681f16a9.d86d7.png new file mode 100644 index 0000000000000000000000000000000000000000..5c3b67dbb2ff22e772988276bd9ea50393414dfa GIT binary patch literal 79283 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 literal 0 HcmV?d00001 diff --git a/demo/web-mobile/assets/common/native/e8/e8aa5e1c-0730-4ebe-81a1-e7fa0db9be7d.a6625/SFNSMonoItalic.ttf b/demo/web-mobile/assets/common/native/e8/e8aa5e1c-0730-4ebe-81a1-e7fa0db9be7d.a6625/SFNSMonoItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..41ee30e3e4a2d3623bf13491804a755b527e5382 GIT binary patch literal 199276 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�-?!VlcQ;2V%n7Bob>v^xs-~TKZc%%D#8yvA z8Z)MA*J;z{hlb8gf|}sSvg`IYvCwyEIIwJDRGY&M zJ9zdB>W{!KN_Y25mqJ5xa`2F3?xX3!ceuopeSLd7SenQpv^p=_ zMXak&b$eP@--VIKvj)4NgQBCMXFu|kygyDgJ>5XhD9{tZ)a}ys?h}A62k-BVz;yjW z5ergt6{~PiGHaMMl2NYmXV0E#I1hp83lYqlH+SAbe{}b1=4&R>WcG?B(L49!aa=Fc zbQm$upf`>Tao2tY^QJ=b0ch1UQC*rIXo?IM#)pN)#a$rcqtk;XTt2jE10tq3CUGO2 zT8}PA$8 bG#T5%Rp24tSd_!p(&hnZ^BlqqAPn<=xp?(J literal 0 HcmV?d00001 diff --git a/demo/web-mobile/assets/home/config.9b664.json b/demo/web-mobile/assets/home/config.9b664.json new file mode 100644 index 00000000..e154104f --- /dev/null +++ b/demo/web-mobile/assets/home/config.9b664.json @@ -0,0 +1,30 @@ +{ + "paths": { + "e3EaADwKFP+ZmDIVTeFF63": [ + "home", + "cc.Prefab" + ] + }, + "uuids": [ + "e3EaADwKFP+ZmDIVTeFF63" + ], + "scenes": {}, + "redirect": [ + "e3EaADwKFP+ZmDIVTeFF63", + 0 + ], + "deps": [ + "main" + ], + "packs": {}, + "name": "home", + "importBase": "import", + "nativeBase": "native", + "debug": true, + "isZip": false, + "encrypted": false, + "versions": { + "import": [], + "native": [] + } +} \ No newline at end of file diff --git a/demo/web-mobile/assets/home/index.9b664.js b/demo/web-mobile/assets/home/index.9b664.js new file mode 100644 index 00000000..a4d827f4 --- /dev/null +++ b/demo/web-mobile/assets/home/index.9b664.js @@ -0,0 +1,29 @@ +(function e(t, n, r) { + function s(o, u) { + if (!n[o]) { + if (!t[o]) { + var b = o.split("/"); + b = b[b.length - 1]; + if (!t[b]) { + var a = "function" == typeof __require && __require; + if (!u && a) return a(b, !0); + if (i) return i(b, !0); + throw new Error("Cannot find module '" + o + "'"); + } + o = b; + } + var f = n[o] = { + exports: {} + }; + t[o][0].call(f.exports, function(e) { + var n = t[o][1][e]; + return s(n || e); + }, f, f.exports, e, t, n, r); + } + return n[o].exports; + } + var i = "function" == typeof __require && __require; + for (var o = 0; o < r.length; o++) s(r[o]); + return s; +})({}, {}, []); +//# sourceMappingURL=index.js.map diff --git a/demo/web-mobile/assets/home/index.js.map b/demo/web-mobile/assets/home/index.js.map new file mode 100644 index 00000000..a6d01198 --- /dev/null +++ b/demo/web-mobile/assets/home/index.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"index.js"} \ No newline at end of file diff --git a/demo/web-mobile/assets/internal/config.8360b.json b/demo/web-mobile/assets/internal/config.8360b.json new file mode 100644 index 00000000..da9fabd2 --- /dev/null +++ b/demo/web-mobile/assets/internal/config.8360b.json @@ -0,0 +1,133 @@ +{ + "paths": { + "30aC+Hnw1PF4pEcoY3kUYb": [ + "effects/builtin-2d-graphics", + "cc.EffectAsset" + ], + "14TDKXr2NJ6LjvHPops74o": [ + "effects/builtin-2d-gray-sprite", + "cc.EffectAsset" + ], + "f1h0LXVtJOta5JLZ1xCzfI": [ + "effects/builtin-2d-label", + "cc.EffectAsset" + ], + "0ek66qC1NOQLjgYmi04HvX": [ + "effects/builtin-2d-spine", + "cc.EffectAsset" + ], + "28dPjdQWxEQIG3VVl1Qm6T": [ + "effects/builtin-2d-sprite", + "cc.EffectAsset" + ], + "2afAA24LNP4YmYiaVLiivs": [ + "effects/builtin-3d-trail", + "cc.EffectAsset" + ], + "c0BAyVxX9JzZy8EjFrc9DU": [ + "effects/builtin-clear-stencil", + "cc.EffectAsset" + ], + "6dkeWRTOBGXICfYQ7JUBnG": [ + "effects/builtin-unlit", + "cc.EffectAsset" + ], + "6fgBCSDDdPMInvyNlggls2": [ + "materials/builtin-2d-base", + "cc.Material" + ], + "a1U5RdJRFMFL57BdJC9H1X": [ + "materials/builtin-2d-graphics", + "cc.Material" + ], + "3ae7efMv1CLq2ilvUY/tQi": [ + "materials/builtin-2d-gray-sprite", + "cc.Material" + ], + "e0LYfU5ZlNFoAB4UiRrGUG": [ + "materials/builtin-2d-label", + "cc.Material" + ], + "7a/QZLET9IDreTiBfRn2PD": [ + "materials/builtin-2d-spine", + "cc.Material" + ], + "ecpdLyjvZBwrvm+cedCcQy": [ + "materials/builtin-2d-sprite", + "cc.Material" + ], + "46bU+b5fROqIXVPG6aZWWK": [ + "materials/builtin-3d-trail", + "cc.Material" + ], + "cffgu4qBxEqa150o1DmRAy": [ + "materials/builtin-clear-stencil", + "cc.Material" + ], + "2aKWBXJHxKHLvrBUi2yYZQ": [ + "materials/builtin-unlit", + "cc.Material" + ] + }, + "uuids": [ + "30aC+Hnw1PF4pEcoY3kUYb", + "14TDKXr2NJ6LjvHPops74o", + "f1h0LXVtJOta5JLZ1xCzfI", + "0ek66qC1NOQLjgYmi04HvX", + "28dPjdQWxEQIG3VVl1Qm6T", + "2afAA24LNP4YmYiaVLiivs", + "c0BAyVxX9JzZy8EjFrc9DU", + "6dkeWRTOBGXICfYQ7JUBnG", + "6fgBCSDDdPMInvyNlggls2", + "a1U5RdJRFMFL57BdJC9H1X", + "3ae7efMv1CLq2ilvUY/tQi", + "e0LYfU5ZlNFoAB4UiRrGUG", + "7a/QZLET9IDreTiBfRn2PD", + "ecpdLyjvZBwrvm+cedCcQy", + "46bU+b5fROqIXVPG6aZWWK", + "cffgu4qBxEqa150o1DmRAy", + "2aKWBXJHxKHLvrBUi2yYZQ", + "02delMVqdBD70a/HSD99FK" + ], + "scenes": {}, + "redirect": [], + "deps": [], + "packs": { + "0967b326a": [ + "02delMVqdBD70a/HSD99FK", + "0ek66qC1NOQLjgYmi04HvX", + "14TDKXr2NJ6LjvHPops74o", + "28dPjdQWxEQIG3VVl1Qm6T", + "2aKWBXJHxKHLvrBUi2yYZQ", + "2afAA24LNP4YmYiaVLiivs", + "30aC+Hnw1PF4pEcoY3kUYb", + "3ae7efMv1CLq2ilvUY/tQi", + "46bU+b5fROqIXVPG6aZWWK", + "6dkeWRTOBGXICfYQ7JUBnG", + "6fgBCSDDdPMInvyNlggls2", + "7a/QZLET9IDreTiBfRn2PD", + "a1U5RdJRFMFL57BdJC9H1X", + "c0BAyVxX9JzZy8EjFrc9DU", + "cffgu4qBxEqa150o1DmRAy", + "e0LYfU5ZlNFoAB4UiRrGUG", + "ecpdLyjvZBwrvm+cedCcQy", + "f1h0LXVtJOta5JLZ1xCzfI" + ] + }, + "name": "internal", + "importBase": "import", + "nativeBase": "native", + "debug": true, + "isZip": false, + "encrypted": false, + "versions": { + "import": [ + "0967b326a", + "c3301" + ], + "native": [ + "02delMVqdBD70a/HSD99FK", + "cea68" + ] + } +} \ No newline at end of file diff --git a/demo/web-mobile/assets/internal/import/09/0967b326a.c3301.json b/demo/web-mobile/assets/internal/import/09/0967b326a.c3301.json new file mode 100644 index 00000000..8c185db2 --- /dev/null +++ b/demo/web-mobile/assets/internal/import/09/0967b326a.c3301.json @@ -0,0 +1,2032 @@ +[ + 1, + [ + "02delMVqdBD70a/HSD99FK", + "28dPjdQWxEQIG3VVl1Qm6T", + "6dkeWRTOBGXICfYQ7JUBnG", + "14TDKXr2NJ6LjvHPops74o", + "2afAA24LNP4YmYiaVLiivs", + "0ek66qC1NOQLjgYmi04HvX", + "30aC+Hnw1PF4pEcoY3kUYb", + "c0BAyVxX9JzZy8EjFrc9DU", + "f1h0LXVtJOta5JLZ1xCzfI" + ], + [ + "_effectAsset", + "diffuseTexture", + "mainTexture" + ], + [ + "cc.Texture2D", + [ + "cc.EffectAsset", + [ + "_name", + "shaders", + "techniques" + ], + 0 + ], + [ + "cc.Material", + [ + "_name", + "_techniqueData" + ], + 2, + 11 + ], + [ + "cc.Material", + [ + "_name", + "_techniqueData" + ], + 1 + ] + ], + [ + [ + 1, + 0, + 1, + 2, + 4 + ], + [ + 3, + 0, + 1, + 3 + ], + [ + 2, + 0, + 1, + 2 + ] + ], + [ + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + [ + 0, + "builtin-2d-spine", + [ + { + "hash": 3550530479, + "record": null, + "name": "builtin-2d-spine|vs|fs", + "glsl3": { + "vert": "\nprecision highp float;\nuniform CCGlobal {\n mat4 cc_matView;\n mat4 cc_matViewInv;\n mat4 cc_matProj;\n mat4 cc_matProjInv;\n mat4 cc_matViewProj;\n mat4 cc_matViewProjInv;\n vec4 cc_cameraPos;\n vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nin vec3 a_position;\nin vec4 a_color;\n#if USE_TINT\n in vec4 a_color0;\n#endif\nin vec2 a_uv0;\nout vec2 v_uv0;\nout vec4 v_light;\n#if USE_TINT\n out vec4 v_dark;\n#endif\nvoid main () {\n mat4 mvp;\n #if CC_USE_MODEL\n mvp = cc_matViewProj * cc_matWorld;\n #else\n mvp = cc_matViewProj;\n #endif\n v_uv0 = a_uv0;\n v_light = a_color;\n #if USE_TINT\n v_dark = a_color0;\n #endif\n gl_Position = mvp * vec4(a_position, 1);\n}", + "frag": "\nprecision highp float;\nuniform sampler2D texture;\nin vec2 v_uv0;\nin vec4 v_light;\n#if USE_TINT\n in vec4 v_dark;\n#endif\n#if USE_ALPHA_TEST\n uniform ALPHA_TEST {\n float alphaThreshold;\n };\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvoid main () {\n vec4 texColor = vec4(1.0);\n vec4 texture_tmp = texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture\n texture_tmp.a *= texture(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n texColor.rgb *= (texture_tmp.rgb * texture_tmp.rgb);\n texColor.a *= texture_tmp.a;\n #else\n texColor *= texture_tmp;\n #endif\n vec4 finalColor;\n #if USE_TINT\n finalColor.a = v_light.a * texColor.a;\n finalColor.rgb = ((texColor.a - 1.0) * v_dark.a + 1.0 - texColor.rgb) * v_dark.rgb + texColor.rgb * v_light.rgb;\n #else\n finalColor = texColor * v_light;\n #endif\n ALPHA_TEST(finalColor);\n gl_FragColor = finalColor;\n}" + }, + "glsl1": { + "vert": "\nprecision highp float;\nuniform mat4 cc_matViewProj;\nuniform mat4 cc_matWorld;\nattribute vec3 a_position;\nattribute vec4 a_color;\n#if USE_TINT\n attribute vec4 a_color0;\n#endif\nattribute vec2 a_uv0;\nvarying vec2 v_uv0;\nvarying vec4 v_light;\n#if USE_TINT\n varying vec4 v_dark;\n#endif\nvoid main () {\n mat4 mvp;\n #if CC_USE_MODEL\n mvp = cc_matViewProj * cc_matWorld;\n #else\n mvp = cc_matViewProj;\n #endif\n v_uv0 = a_uv0;\n v_light = a_color;\n #if USE_TINT\n v_dark = a_color0;\n #endif\n gl_Position = mvp * vec4(a_position, 1);\n}", + "frag": "\nprecision highp float;\nuniform sampler2D texture;\nvarying vec2 v_uv0;\nvarying vec4 v_light;\n#if USE_TINT\n varying vec4 v_dark;\n#endif\n#if USE_ALPHA_TEST\n uniform float alphaThreshold;\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvoid main () {\n vec4 texColor = vec4(1.0);\n vec4 texture_tmp = texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture\n texture_tmp.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n texColor.rgb *= (texture_tmp.rgb * texture_tmp.rgb);\n texColor.a *= texture_tmp.a;\n #else\n texColor *= texture_tmp;\n #endif\n vec4 finalColor;\n #if USE_TINT\n finalColor.a = v_light.a * texColor.a;\n finalColor.rgb = ((texColor.a - 1.0) * v_dark.a + 1.0 - texColor.rgb) * v_dark.rgb + texColor.rgb * v_light.rgb;\n #else\n finalColor = texColor * v_light;\n #endif\n ALPHA_TEST(finalColor);\n gl_FragColor = finalColor;\n}" + }, + "builtins": { + "globals": { + "blocks": [ + { + "name": "CCGlobal", + "defines": [] + } + ], + "samplers": [] + }, + "locals": { + "blocks": [ + { + "name": "CCLocal", + "defines": [] + } + ], + "samplers": [] + } + }, + "defines": [ + { + "name": "USE_TINT", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_MODEL", + "type": "boolean", + "defines": [] + }, + { + "name": "USE_ALPHA_TEST", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture", + "type": "boolean", + "defines": [] + }, + { + "name": "INPUT_IS_GAMMA", + "type": "boolean", + "defines": [] + } + ], + "blocks": [ + { + "name": "ALPHA_TEST", + "binding": 0, + "members": [ + { + "name": "alphaThreshold", + "type": 13, + "count": 1 + } + ], + "defines": [ + "USE_ALPHA_TEST" + ] + } + ], + "samplers": [ + { + "name": "texture", + "type": 29, + "count": 1, + "binding": 30, + "defines": [] + } + ] + } + ], + [ + { + "passes": [ + { + "program": "builtin-2d-spine|vs|fs", + "blendState": { + "targets": [ + { + "blend": true + } + ] + }, + "rasterizerState": { + "cullMode": 0 + }, + "properties": { + "texture": { + "value": "white", + "type": 29 + }, + "alphaThreshold": { + "type": 13, + "value": [ + 0.5 + ] + } + } + } + ] + } + ] + ] + ], + 0, + 0, + [], + [], + [] + ], + [ + [ + [ + 0, + "builtin-2d-gray-sprite", + [ + { + "hash": 4278481454, + "record": null, + "name": "builtin-2d-gray-sprite|vs|fs", + "glsl3": { + "vert": "\nprecision highp float;\nuniform CCGlobal {\n mat4 cc_matView;\n mat4 cc_matViewInv;\n mat4 cc_matProj;\n mat4 cc_matProjInv;\n mat4 cc_matViewProj;\n mat4 cc_matViewProjInv;\n vec4 cc_cameraPos;\n vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n};\nin vec3 a_position;\nin mediump vec2 a_uv0;\nout mediump vec2 v_uv0;\nin vec4 a_color;\nout vec4 v_color;\nvoid main () {\n gl_Position = cc_matViewProj * vec4(a_position, 1);\n v_uv0 = a_uv0;\n v_color = a_color;\n}", + "frag": "\nprecision highp float;\nuniform sampler2D texture;\nin mediump vec2 v_uv0;\nin vec4 v_color;\nvoid main () {\n vec4 color = v_color;\n vec4 texture_tmp = texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture\n texture_tmp.a *= texture(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n color.rgb *= (texture_tmp.rgb * texture_tmp.rgb);\n color.a *= texture_tmp.a;\n #else\n color *= texture_tmp;\n #endif\n float gray = 0.2126*color.r + 0.7152*color.g + 0.0722*color.b;\n gl_FragColor = vec4(gray, gray, gray, color.a);\n}" + }, + "glsl1": { + "vert": "\nprecision highp float;\nuniform mat4 cc_matViewProj;\nattribute vec3 a_position;\nattribute mediump vec2 a_uv0;\nvarying mediump vec2 v_uv0;\nattribute vec4 a_color;\nvarying vec4 v_color;\nvoid main () {\n gl_Position = cc_matViewProj * vec4(a_position, 1);\n v_uv0 = a_uv0;\n v_color = a_color;\n}", + "frag": "\nprecision highp float;\nuniform sampler2D texture;\nvarying mediump vec2 v_uv0;\nvarying vec4 v_color;\nvoid main () {\n vec4 color = v_color;\n vec4 texture_tmp = texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture\n texture_tmp.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n color.rgb *= (texture_tmp.rgb * texture_tmp.rgb);\n color.a *= texture_tmp.a;\n #else\n color *= texture_tmp;\n #endif\n float gray = 0.2126*color.r + 0.7152*color.g + 0.0722*color.b;\n gl_FragColor = vec4(gray, gray, gray, color.a);\n}" + }, + "builtins": { + "globals": { + "blocks": [ + { + "name": "CCGlobal", + "defines": [] + } + ], + "samplers": [] + }, + "locals": { + "blocks": [], + "samplers": [] + } + }, + "defines": [ + { + "name": "CC_USE_ALPHA_ATLAS_texture", + "type": "boolean", + "defines": [] + }, + { + "name": "INPUT_IS_GAMMA", + "type": "boolean", + "defines": [] + } + ], + "blocks": [], + "samplers": [ + { + "name": "texture", + "type": 29, + "count": 1, + "binding": 30, + "defines": [] + } + ] + } + ], + [ + { + "passes": [ + { + "program": "builtin-2d-gray-sprite|vs|fs", + "blendState": { + "targets": [ + { + "blend": true + } + ] + }, + "rasterizerState": { + "cullMode": 0 + }, + "properties": { + "texture": { + "value": "white", + "type": 29 + } + } + } + ] + } + ] + ] + ], + 0, + 0, + [], + [], + [] + ], + [ + [ + [ + 0, + "builtin-2d-sprite", + [ + { + "hash": 3278106612, + "record": null, + "name": "builtin-2d-sprite|vs|fs", + "glsl3": { + "vert": "\nprecision highp float;\nuniform CCGlobal {\n mat4 cc_matView;\n mat4 cc_matViewInv;\n mat4 cc_matProj;\n mat4 cc_matProjInv;\n mat4 cc_matViewProj;\n mat4 cc_matViewProjInv;\n vec4 cc_cameraPos;\n vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nin vec3 a_position;\nin vec4 a_color;\nout vec4 v_color;\n#if USE_TEXTURE\nin vec2 a_uv0;\nout vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}", + "frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform ALPHA_TEST {\n float alphaThreshold;\n };\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nin vec4 v_color;\n#if USE_TEXTURE\nin vec2 v_uv0;\nuniform sampler2D texture;\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n vec4 texture_tmp = texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture\n texture_tmp.a *= texture(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture_tmp.rgb * texture_tmp.rgb);\n o.a *= texture_tmp.a;\n #else\n o *= texture_tmp;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n}" + }, + "glsl1": { + "vert": "\nprecision highp float;\nuniform mat4 cc_matViewProj;\nuniform mat4 cc_matWorld;\nattribute vec3 a_position;\nattribute vec4 a_color;\nvarying vec4 v_color;\n#if USE_TEXTURE\nattribute vec2 a_uv0;\nvarying vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}", + "frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform float alphaThreshold;\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvarying vec4 v_color;\n#if USE_TEXTURE\nvarying vec2 v_uv0;\nuniform sampler2D texture;\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n vec4 texture_tmp = texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture\n texture_tmp.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture_tmp.rgb * texture_tmp.rgb);\n o.a *= texture_tmp.a;\n #else\n o *= texture_tmp;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n}" + }, + "builtins": { + "globals": { + "blocks": [ + { + "name": "CCGlobal", + "defines": [] + } + ], + "samplers": [] + }, + "locals": { + "blocks": [ + { + "name": "CCLocal", + "defines": [] + } + ], + "samplers": [] + } + }, + "defines": [ + { + "name": "USE_TEXTURE", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_MODEL", + "type": "boolean", + "defines": [] + }, + { + "name": "USE_ALPHA_TEST", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture", + "type": "boolean", + "defines": [ + "USE_TEXTURE" + ] + }, + { + "name": "INPUT_IS_GAMMA", + "type": "boolean", + "defines": [ + "USE_TEXTURE" + ] + } + ], + "blocks": [ + { + "name": "ALPHA_TEST", + "binding": 0, + "members": [ + { + "name": "alphaThreshold", + "type": 13, + "count": 1 + } + ], + "defines": [ + "USE_ALPHA_TEST" + ] + } + ], + "samplers": [ + { + "name": "texture", + "type": 29, + "count": 1, + "binding": 30, + "defines": [ + "USE_TEXTURE" + ] + } + ] + } + ], + [ + { + "passes": [ + { + "program": "builtin-2d-sprite|vs|fs", + "blendState": { + "targets": [ + { + "blend": true + } + ] + }, + "rasterizerState": { + "cullMode": 0 + }, + "properties": { + "texture": { + "value": "white", + "type": 29 + }, + "alphaThreshold": { + "type": 13, + "value": [ + 0.5 + ] + } + } + } + ] + } + ] + ] + ], + 0, + 0, + [], + [], + [] + ], + [ + [ + [ + 2, + "builtin-unlit", + [ + {}, + "0", + 11, + [ + { + "defines": { + "USE_DIFFUSE_TEXTURE": true + } + }, + "props", + 11, + [ + {}, + "diffuseTexture", + 6, + 0 + ] + ] + ] + ] + ], + 0, + 0, + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 0, + 2 + ] + ], + [ + [ + [ + 0, + "builtin-3d-trail", + [ + { + "hash": 2929688198, + "record": null, + "name": "builtin-3d-trail|particle-trail:vs_main|tinted-fs:add", + "glsl3": { + "vert": "\nprecision mediump float;\nuniform Constants{\n vec4 mainTiling_Offset;\n vec4 frameTile_velLenScale;\n vec4 scale;\n};\nuniform CCGlobal {\n mat4 cc_matView;\n mat4 cc_matViewInv;\n mat4 cc_matProj;\n mat4 cc_matProjInv;\n mat4 cc_matViewProj;\n mat4 cc_matViewProjInv;\n vec4 cc_cameraPos;\n vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nout vec2 uv;\nout vec4 color;\nin vec3 a_position;\nin vec4 a_texCoord;\nin vec3 a_texCoord1;\nin vec3 a_texCoord2;\nin vec4 a_color;\n#if CC_DRAW_WIRE_FRAME\n out vec3 vBarycentric;\n#endif\nvec4 vs_main() {\n highp vec4 pos = vec4(a_position, 1);\n vec4 velocity = vec4(a_texCoord1.xyz, 0);\n#if !CC_USE_WORLD_SPACE\n pos = cc_matWorld * pos;\n velocity = cc_matWorld * velocity;\n#endif\n float vertOffset = (a_texCoord.x - 0.5) * a_texCoord.y;\n vec3 camUp = normalize(cross(pos.xyz - cc_cameraPos.xyz, velocity.xyz));\n pos.xyz += camUp * vertOffset;\n pos = cc_matViewProj * pos;\n uv = a_texCoord.zw * mainTiling_Offset.xy + mainTiling_Offset.zw;;\n color = a_color;\n#if CC_DRAW_WIRE_FRAME\n vBarycentric = a_texCoord2;\n#endif\n return pos;\n}\nvoid main() { gl_Position = vs_main(); }", + "frag": "\nprecision mediump float;\nvec4 CCFragOutput (vec4 color) {\n #if OUTPUT_TO_GAMMA\n color.rgb = sqrt(color.rgb);\n #endif\n\treturn color;\n}\nin vec2 uv;\nin vec4 color;\n#if CC_DRAW_WIRE_FRAME\n in vec3 vBarycentric;\n#endif\nuniform sampler2D mainTexture;\nuniform FragConstants {\n vec4 tintColor;\n};\nvec4 add () {\n vec4 col = 2.0 * color * tintColor * texture(mainTexture, uv);\n #if CC_DRAW_WIRE_FRAME\n if (any(lessThan(vBarycentric, vec3(0.02)))) {\n col = vec4(0., 1., 1., 1.);\n }\n #endif\n return CCFragOutput(col);\n}\nout vec4 cc_FragColor;\nvoid main() { cc_FragColor = add(); }" + }, + "glsl1": { + "vert": "\nprecision mediump float;\nuniform vec4 mainTiling_Offset;\nuniform mat4 cc_matViewProj;\nuniform vec4 cc_cameraPos;\nuniform mat4 cc_matWorld;\nvarying vec2 uv;\nvarying vec4 color;\nattribute vec3 a_position;\nattribute vec4 a_texCoord;\nattribute vec3 a_texCoord1;\nattribute vec3 a_texCoord2;\nattribute vec4 a_color;\n#if CC_DRAW_WIRE_FRAME\n varying vec3 vBarycentric;\n#endif\nvec4 vs_main() {\n highp vec4 pos = vec4(a_position, 1);\n vec4 velocity = vec4(a_texCoord1.xyz, 0);\n#if !CC_USE_WORLD_SPACE\n pos = cc_matWorld * pos;\n velocity = cc_matWorld * velocity;\n#endif\n float vertOffset = (a_texCoord.x - 0.5) * a_texCoord.y;\n vec3 camUp = normalize(cross(pos.xyz - cc_cameraPos.xyz, velocity.xyz));\n pos.xyz += camUp * vertOffset;\n pos = cc_matViewProj * pos;\n uv = a_texCoord.zw * mainTiling_Offset.xy + mainTiling_Offset.zw;;\n color = a_color;\n#if CC_DRAW_WIRE_FRAME\n vBarycentric = a_texCoord2;\n#endif\n return pos;\n}\nvoid main() { gl_Position = vs_main(); }", + "frag": "\nprecision mediump float;\nvec4 CCFragOutput (vec4 color) {\n #if OUTPUT_TO_GAMMA\n color.rgb = sqrt(color.rgb);\n #endif\n\treturn color;\n}\nvarying vec2 uv;\nvarying vec4 color;\n#if CC_DRAW_WIRE_FRAME\n varying vec3 vBarycentric;\n#endif\nuniform sampler2D mainTexture;\nuniform vec4 tintColor;\nvec4 add () {\n vec4 col = 2.0 * color * tintColor * texture2D(mainTexture, uv);\n #if CC_DRAW_WIRE_FRAME\n if (any(lessThan(vBarycentric, vec3(0.02)))) {\n col = vec4(0., 1., 1., 1.);\n }\n #endif\n return CCFragOutput(col);\n}\nvoid main() { gl_FragColor = add(); }" + }, + "builtins": { + "globals": { + "blocks": [ + { + "name": "CCGlobal", + "defines": [] + } + ], + "samplers": [] + }, + "locals": { + "blocks": [ + { + "name": "CCLocal", + "defines": [] + } + ], + "samplers": [] + } + }, + "defines": [ + { + "name": "CC_DRAW_WIRE_FRAME", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_WORLD_SPACE", + "type": "boolean", + "defines": [] + }, + { + "name": "OUTPUT_TO_GAMMA", + "type": "boolean", + "defines": [] + } + ], + "blocks": [ + { + "name": "Constants", + "binding": 0, + "members": [ + { + "name": "mainTiling_Offset", + "type": 16, + "count": 1 + }, + { + "name": "frameTile_velLenScale", + "type": 16, + "count": 1 + }, + { + "name": "scale", + "type": 16, + "count": 1 + } + ], + "defines": [] + }, + { + "name": "FragConstants", + "binding": 1, + "members": [ + { + "name": "tintColor", + "type": 16, + "count": 1 + } + ], + "defines": [] + } + ], + "samplers": [ + { + "name": "mainTexture", + "type": 29, + "count": 1, + "binding": 30, + "defines": [] + } + ] + }, + { + "hash": 4224037318, + "record": null, + "name": "builtin-3d-trail|particle-trail:vs_main|tinted-fs:multiply", + "glsl3": { + "vert": "\nprecision mediump float;\nuniform Constants{\n vec4 mainTiling_Offset;\n vec4 frameTile_velLenScale;\n vec4 scale;\n};\nuniform CCGlobal {\n mat4 cc_matView;\n mat4 cc_matViewInv;\n mat4 cc_matProj;\n mat4 cc_matProjInv;\n mat4 cc_matViewProj;\n mat4 cc_matViewProjInv;\n vec4 cc_cameraPos;\n vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nout vec2 uv;\nout vec4 color;\nin vec3 a_position;\nin vec4 a_texCoord;\nin vec3 a_texCoord1;\nin vec3 a_texCoord2;\nin vec4 a_color;\n#if CC_DRAW_WIRE_FRAME\n out vec3 vBarycentric;\n#endif\nvec4 vs_main() {\n highp vec4 pos = vec4(a_position, 1);\n vec4 velocity = vec4(a_texCoord1.xyz, 0);\n#if !CC_USE_WORLD_SPACE\n pos = cc_matWorld * pos;\n velocity = cc_matWorld * velocity;\n#endif\n float vertOffset = (a_texCoord.x - 0.5) * a_texCoord.y;\n vec3 camUp = normalize(cross(pos.xyz - cc_cameraPos.xyz, velocity.xyz));\n pos.xyz += camUp * vertOffset;\n pos = cc_matViewProj * pos;\n uv = a_texCoord.zw * mainTiling_Offset.xy + mainTiling_Offset.zw;;\n color = a_color;\n#if CC_DRAW_WIRE_FRAME\n vBarycentric = a_texCoord2;\n#endif\n return pos;\n}\nvoid main() { gl_Position = vs_main(); }", + "frag": "\nprecision mediump float;\nvec4 CCFragOutput (vec4 color) {\n #if OUTPUT_TO_GAMMA\n color.rgb = sqrt(color.rgb);\n #endif\n\treturn color;\n}\nin vec2 uv;\nin vec4 color;\n#if CC_DRAW_WIRE_FRAME\n in vec3 vBarycentric;\n#endif\nuniform sampler2D mainTexture;\nuniform FragConstants {\n vec4 tintColor;\n};\nvec4 multiply () {\n vec4 col;\n vec4 texColor = texture(mainTexture, uv);\n col.rgb = tintColor.rgb * texColor.rgb * color.rgb * vec3(2.0);\n col.a = (1.0 - texColor.a) * (tintColor.a * color.a * 2.0);\n #if CC_DRAW_WIRE_FRAME\n if (any(lessThan(vBarycentric, vec3(0.02)))) {\n col = vec4(0., 1., 1., col.a);\n }\n #endif\n return CCFragOutput(col);\n}\nout vec4 cc_FragColor;\nvoid main() { cc_FragColor = multiply(); }" + }, + "glsl1": { + "vert": "\nprecision mediump float;\nuniform vec4 mainTiling_Offset;\nuniform mat4 cc_matViewProj;\nuniform vec4 cc_cameraPos;\nuniform mat4 cc_matWorld;\nvarying vec2 uv;\nvarying vec4 color;\nattribute vec3 a_position;\nattribute vec4 a_texCoord;\nattribute vec3 a_texCoord1;\nattribute vec3 a_texCoord2;\nattribute vec4 a_color;\n#if CC_DRAW_WIRE_FRAME\n varying vec3 vBarycentric;\n#endif\nvec4 vs_main() {\n highp vec4 pos = vec4(a_position, 1);\n vec4 velocity = vec4(a_texCoord1.xyz, 0);\n#if !CC_USE_WORLD_SPACE\n pos = cc_matWorld * pos;\n velocity = cc_matWorld * velocity;\n#endif\n float vertOffset = (a_texCoord.x - 0.5) * a_texCoord.y;\n vec3 camUp = normalize(cross(pos.xyz - cc_cameraPos.xyz, velocity.xyz));\n pos.xyz += camUp * vertOffset;\n pos = cc_matViewProj * pos;\n uv = a_texCoord.zw * mainTiling_Offset.xy + mainTiling_Offset.zw;;\n color = a_color;\n#if CC_DRAW_WIRE_FRAME\n vBarycentric = a_texCoord2;\n#endif\n return pos;\n}\nvoid main() { gl_Position = vs_main(); }", + "frag": "\nprecision mediump float;\nvec4 CCFragOutput (vec4 color) {\n #if OUTPUT_TO_GAMMA\n color.rgb = sqrt(color.rgb);\n #endif\n\treturn color;\n}\nvarying vec2 uv;\nvarying vec4 color;\n#if CC_DRAW_WIRE_FRAME\n varying vec3 vBarycentric;\n#endif\nuniform sampler2D mainTexture;\nuniform vec4 tintColor;\nvec4 multiply () {\n vec4 col;\n vec4 texColor = texture2D(mainTexture, uv);\n col.rgb = tintColor.rgb * texColor.rgb * color.rgb * vec3(2.0);\n col.a = (1.0 - texColor.a) * (tintColor.a * color.a * 2.0);\n #if CC_DRAW_WIRE_FRAME\n if (any(lessThan(vBarycentric, vec3(0.02)))) {\n col = vec4(0., 1., 1., col.a);\n }\n #endif\n return CCFragOutput(col);\n}\nvoid main() { gl_FragColor = multiply(); }" + }, + "builtins": { + "globals": { + "blocks": [ + { + "name": "CCGlobal", + "defines": [] + } + ], + "samplers": [] + }, + "locals": { + "blocks": [ + { + "name": "CCLocal", + "defines": [] + } + ], + "samplers": [] + } + }, + "defines": [ + { + "name": "CC_DRAW_WIRE_FRAME", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_WORLD_SPACE", + "type": "boolean", + "defines": [] + }, + { + "name": "OUTPUT_TO_GAMMA", + "type": "boolean", + "defines": [] + } + ], + "blocks": [ + { + "name": "Constants", + "binding": 0, + "members": [ + { + "name": "mainTiling_Offset", + "type": 16, + "count": 1 + }, + { + "name": "frameTile_velLenScale", + "type": 16, + "count": 1 + }, + { + "name": "scale", + "type": 16, + "count": 1 + } + ], + "defines": [] + }, + { + "name": "FragConstants", + "binding": 1, + "members": [ + { + "name": "tintColor", + "type": 16, + "count": 1 + } + ], + "defines": [] + } + ], + "samplers": [ + { + "name": "mainTexture", + "type": 29, + "count": 1, + "binding": 30, + "defines": [] + } + ] + }, + { + "hash": 1704877102, + "record": null, + "name": "builtin-3d-trail|particle-trail:vs_main|no-tint-fs:addSmooth", + "glsl3": { + "vert": "\nprecision mediump float;\nuniform Constants{\n vec4 mainTiling_Offset;\n vec4 frameTile_velLenScale;\n vec4 scale;\n};\nuniform CCGlobal {\n mat4 cc_matView;\n mat4 cc_matViewInv;\n mat4 cc_matProj;\n mat4 cc_matProjInv;\n mat4 cc_matViewProj;\n mat4 cc_matViewProjInv;\n vec4 cc_cameraPos;\n vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nout vec2 uv;\nout vec4 color;\nin vec3 a_position;\nin vec4 a_texCoord;\nin vec3 a_texCoord1;\nin vec3 a_texCoord2;\nin vec4 a_color;\n#if CC_DRAW_WIRE_FRAME\n out vec3 vBarycentric;\n#endif\nvec4 vs_main() {\n highp vec4 pos = vec4(a_position, 1);\n vec4 velocity = vec4(a_texCoord1.xyz, 0);\n#if !CC_USE_WORLD_SPACE\n pos = cc_matWorld * pos;\n velocity = cc_matWorld * velocity;\n#endif\n float vertOffset = (a_texCoord.x - 0.5) * a_texCoord.y;\n vec3 camUp = normalize(cross(pos.xyz - cc_cameraPos.xyz, velocity.xyz));\n pos.xyz += camUp * vertOffset;\n pos = cc_matViewProj * pos;\n uv = a_texCoord.zw * mainTiling_Offset.xy + mainTiling_Offset.zw;;\n color = a_color;\n#if CC_DRAW_WIRE_FRAME\n vBarycentric = a_texCoord2;\n#endif\n return pos;\n}\nvoid main() { gl_Position = vs_main(); }", + "frag": "\nprecision mediump float;\nvec4 CCFragOutput (vec4 color) {\n #if OUTPUT_TO_GAMMA\n color.rgb = sqrt(color.rgb);\n #endif\n\treturn color;\n}\nin vec2 uv;\nin vec4 color;\nuniform sampler2D mainTexture;\nvec4 addSmooth () {\n vec4 col = color * texture(mainTexture, uv);\n col.rgb *= col.a;\n return CCFragOutput(col);\n}\nout vec4 cc_FragColor;\nvoid main() { cc_FragColor = addSmooth(); }" + }, + "glsl1": { + "vert": "\nprecision mediump float;\nuniform vec4 mainTiling_Offset;\nuniform mat4 cc_matViewProj;\nuniform vec4 cc_cameraPos;\nuniform mat4 cc_matWorld;\nvarying vec2 uv;\nvarying vec4 color;\nattribute vec3 a_position;\nattribute vec4 a_texCoord;\nattribute vec3 a_texCoord1;\nattribute vec3 a_texCoord2;\nattribute vec4 a_color;\n#if CC_DRAW_WIRE_FRAME\n varying vec3 vBarycentric;\n#endif\nvec4 vs_main() {\n highp vec4 pos = vec4(a_position, 1);\n vec4 velocity = vec4(a_texCoord1.xyz, 0);\n#if !CC_USE_WORLD_SPACE\n pos = cc_matWorld * pos;\n velocity = cc_matWorld * velocity;\n#endif\n float vertOffset = (a_texCoord.x - 0.5) * a_texCoord.y;\n vec3 camUp = normalize(cross(pos.xyz - cc_cameraPos.xyz, velocity.xyz));\n pos.xyz += camUp * vertOffset;\n pos = cc_matViewProj * pos;\n uv = a_texCoord.zw * mainTiling_Offset.xy + mainTiling_Offset.zw;;\n color = a_color;\n#if CC_DRAW_WIRE_FRAME\n vBarycentric = a_texCoord2;\n#endif\n return pos;\n}\nvoid main() { gl_Position = vs_main(); }", + "frag": "\nprecision mediump float;\nvec4 CCFragOutput (vec4 color) {\n #if OUTPUT_TO_GAMMA\n color.rgb = sqrt(color.rgb);\n #endif\n\treturn color;\n}\nvarying vec2 uv;\nvarying vec4 color;\nuniform sampler2D mainTexture;\nvec4 addSmooth () {\n vec4 col = color * texture2D(mainTexture, uv);\n col.rgb *= col.a;\n return CCFragOutput(col);\n}\nvoid main() { gl_FragColor = addSmooth(); }" + }, + "builtins": { + "globals": { + "blocks": [ + { + "name": "CCGlobal", + "defines": [] + } + ], + "samplers": [] + }, + "locals": { + "blocks": [ + { + "name": "CCLocal", + "defines": [] + } + ], + "samplers": [] + } + }, + "defines": [ + { + "name": "CC_DRAW_WIRE_FRAME", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_WORLD_SPACE", + "type": "boolean", + "defines": [] + }, + { + "name": "OUTPUT_TO_GAMMA", + "type": "boolean", + "defines": [] + } + ], + "blocks": [ + { + "name": "Constants", + "binding": 0, + "members": [ + { + "name": "mainTiling_Offset", + "type": 16, + "count": 1 + }, + { + "name": "frameTile_velLenScale", + "type": 16, + "count": 1 + }, + { + "name": "scale", + "type": 16, + "count": 1 + } + ], + "defines": [] + } + ], + "samplers": [ + { + "name": "mainTexture", + "type": 29, + "count": 1, + "binding": 30, + "defines": [] + } + ] + }, + { + "hash": 2717357054, + "record": null, + "name": "builtin-3d-trail|particle-trail:vs_main|no-tint-fs:premultiplied", + "glsl3": { + "vert": "\nprecision mediump float;\nuniform Constants{\n vec4 mainTiling_Offset;\n vec4 frameTile_velLenScale;\n vec4 scale;\n};\nuniform CCGlobal {\n mat4 cc_matView;\n mat4 cc_matViewInv;\n mat4 cc_matProj;\n mat4 cc_matProjInv;\n mat4 cc_matViewProj;\n mat4 cc_matViewProjInv;\n vec4 cc_cameraPos;\n vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nout vec2 uv;\nout vec4 color;\nin vec3 a_position;\nin vec4 a_texCoord;\nin vec3 a_texCoord1;\nin vec3 a_texCoord2;\nin vec4 a_color;\n#if CC_DRAW_WIRE_FRAME\n out vec3 vBarycentric;\n#endif\nvec4 vs_main() {\n highp vec4 pos = vec4(a_position, 1);\n vec4 velocity = vec4(a_texCoord1.xyz, 0);\n#if !CC_USE_WORLD_SPACE\n pos = cc_matWorld * pos;\n velocity = cc_matWorld * velocity;\n#endif\n float vertOffset = (a_texCoord.x - 0.5) * a_texCoord.y;\n vec3 camUp = normalize(cross(pos.xyz - cc_cameraPos.xyz, velocity.xyz));\n pos.xyz += camUp * vertOffset;\n pos = cc_matViewProj * pos;\n uv = a_texCoord.zw * mainTiling_Offset.xy + mainTiling_Offset.zw;;\n color = a_color;\n#if CC_DRAW_WIRE_FRAME\n vBarycentric = a_texCoord2;\n#endif\n return pos;\n}\nvoid main() { gl_Position = vs_main(); }", + "frag": "\nprecision mediump float;\nvec4 CCFragOutput (vec4 color) {\n #if OUTPUT_TO_GAMMA\n color.rgb = sqrt(color.rgb);\n #endif\n\treturn color;\n}\nin vec2 uv;\nin vec4 color;\nuniform sampler2D mainTexture;\nvec4 premultiplied () {\n vec4 col = color * texture(mainTexture, uv) * color.a;\n return CCFragOutput(col);\n}\nout vec4 cc_FragColor;\nvoid main() { cc_FragColor = premultiplied(); }" + }, + "glsl1": { + "vert": "\nprecision mediump float;\nuniform vec4 mainTiling_Offset;\nuniform mat4 cc_matViewProj;\nuniform vec4 cc_cameraPos;\nuniform mat4 cc_matWorld;\nvarying vec2 uv;\nvarying vec4 color;\nattribute vec3 a_position;\nattribute vec4 a_texCoord;\nattribute vec3 a_texCoord1;\nattribute vec3 a_texCoord2;\nattribute vec4 a_color;\n#if CC_DRAW_WIRE_FRAME\n varying vec3 vBarycentric;\n#endif\nvec4 vs_main() {\n highp vec4 pos = vec4(a_position, 1);\n vec4 velocity = vec4(a_texCoord1.xyz, 0);\n#if !CC_USE_WORLD_SPACE\n pos = cc_matWorld * pos;\n velocity = cc_matWorld * velocity;\n#endif\n float vertOffset = (a_texCoord.x - 0.5) * a_texCoord.y;\n vec3 camUp = normalize(cross(pos.xyz - cc_cameraPos.xyz, velocity.xyz));\n pos.xyz += camUp * vertOffset;\n pos = cc_matViewProj * pos;\n uv = a_texCoord.zw * mainTiling_Offset.xy + mainTiling_Offset.zw;;\n color = a_color;\n#if CC_DRAW_WIRE_FRAME\n vBarycentric = a_texCoord2;\n#endif\n return pos;\n}\nvoid main() { gl_Position = vs_main(); }", + "frag": "\nprecision mediump float;\nvec4 CCFragOutput (vec4 color) {\n #if OUTPUT_TO_GAMMA\n color.rgb = sqrt(color.rgb);\n #endif\n\treturn color;\n}\nvarying vec2 uv;\nvarying vec4 color;\nuniform sampler2D mainTexture;\nvec4 premultiplied () {\n vec4 col = color * texture2D(mainTexture, uv) * color.a;\n return CCFragOutput(col);\n}\nvoid main() { gl_FragColor = premultiplied(); }" + }, + "builtins": { + "globals": { + "blocks": [ + { + "name": "CCGlobal", + "defines": [] + } + ], + "samplers": [] + }, + "locals": { + "blocks": [ + { + "name": "CCLocal", + "defines": [] + } + ], + "samplers": [] + } + }, + "defines": [ + { + "name": "CC_DRAW_WIRE_FRAME", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_WORLD_SPACE", + "type": "boolean", + "defines": [] + }, + { + "name": "OUTPUT_TO_GAMMA", + "type": "boolean", + "defines": [] + } + ], + "blocks": [ + { + "name": "Constants", + "binding": 0, + "members": [ + { + "name": "mainTiling_Offset", + "type": 16, + "count": 1 + }, + { + "name": "frameTile_velLenScale", + "type": 16, + "count": 1 + }, + { + "name": "scale", + "type": 16, + "count": 1 + } + ], + "defines": [] + } + ], + "samplers": [ + { + "name": "mainTexture", + "type": 29, + "count": 1, + "binding": 30, + "defines": [] + } + ] + } + ], + [ + { + "name": "add", + "passes": [ + { + "program": "builtin-3d-trail|particle-trail:vs_main|tinted-fs:add", + "rasterizerState": { + "cullMode": 0 + }, + "blendState": { + "targets": [ + { + "blend": true, + "blendSrc": 770, + "blendDst": 1, + "blendSrcAlpha": 770, + "blendDstAlpha": 1 + } + ] + }, + "depthStencilState": { + "depthTest": true, + "depthWrite": false + }, + "properties": { + "mainTexture": { + "value": "grey", + "type": 29 + }, + "mainTiling_Offset": { + "type": 16, + "value": [ + 1, + 1, + 0, + 0 + ] + }, + "frameTile_velLenScale": { + "type": 16, + "value": [ + 1, + 1, + 0, + 0 + ] + }, + "tintColor": { + "type": 16, + "value": [ + 0.5, + 0.5, + 0.5, + 0.5 + ], + "inspector": { + "type": "color" + } + } + } + } + ] + }, + { + "name": "alpha-blend", + "passes": [ + { + "program": "builtin-3d-trail|particle-trail:vs_main|tinted-fs:add", + "rasterizerState": { + "cullMode": 0 + }, + "blendState": { + "targets": [ + { + "blend": true, + "blendSrc": 1, + "blendDst": 771, + "blendSrcAlpha": 1, + "blendDstAlpha": 771 + } + ] + }, + "depthStencilState": { + "depthTest": true, + "depthWrite": false + }, + "properties": { + "mainTexture": { + "value": "grey", + "type": 29 + }, + "mainTiling_Offset": { + "type": 16, + "value": [ + 1, + 1, + 0, + 0 + ] + }, + "frameTile_velLenScale": { + "type": 16, + "value": [ + 1, + 1, + 0, + 0 + ] + }, + "tintColor": { + "type": 16, + "value": [ + 0.5, + 0.5, + 0.5, + 0.5 + ], + "inspector": { + "type": "color" + } + } + } + } + ] + }, + { + "name": "add-multiply", + "passes": [ + { + "program": "builtin-3d-trail|particle-trail:vs_main|tinted-fs:multiply", + "rasterizerState": { + "cullMode": 0 + }, + "blendState": { + "targets": [ + { + "blend": true, + "blendSrc": 1, + "blendDst": 771, + "blendSrcAlpha": 1, + "blendDstAlpha": 771 + } + ] + }, + "depthStencilState": { + "depthTest": true, + "depthWrite": false + }, + "properties": { + "mainTexture": { + "value": "grey", + "type": 29 + }, + "mainTiling_Offset": { + "type": 16, + "value": [ + 1, + 1, + 0, + 0 + ] + }, + "frameTile_velLenScale": { + "type": 16, + "value": [ + 1, + 1, + 0, + 0 + ] + }, + "tintColor": { + "type": 16, + "value": [ + 0.5, + 0.5, + 0.5, + 0.5 + ], + "inspector": { + "type": "color" + } + } + } + } + ] + }, + { + "name": "add-smooth", + "passes": [ + { + "program": "builtin-3d-trail|particle-trail:vs_main|no-tint-fs:addSmooth", + "rasterizerState": { + "cullMode": 0 + }, + "blendState": { + "targets": [ + { + "blend": true, + "blendSrc": 1, + "blendDst": 771, + "blendSrcAlpha": 1, + "blendDstAlpha": 771 + } + ] + }, + "depthStencilState": { + "depthTest": true, + "depthWrite": false + }, + "properties": { + "mainTexture": { + "value": "grey", + "type": 29 + }, + "mainTiling_Offset": { + "type": 16, + "value": [ + 1, + 1, + 0, + 0 + ] + }, + "frameTile_velLenScale": { + "type": 16, + "value": [ + 1, + 1, + 0, + 0 + ] + } + } + } + ] + }, + { + "name": "premultiply-blend", + "passes": [ + { + "program": "builtin-3d-trail|particle-trail:vs_main|no-tint-fs:premultiplied", + "rasterizerState": { + "cullMode": 0 + }, + "blendState": { + "targets": [ + { + "blend": true, + "blendSrc": 1, + "blendDst": 771, + "blendSrcAlpha": 1, + "blendDstAlpha": 771 + } + ] + }, + "depthStencilState": { + "depthTest": true, + "depthWrite": false + }, + "properties": { + "mainTexture": { + "value": "grey", + "type": 29 + }, + "mainTiling_Offset": { + "type": 16, + "value": [ + 1, + 1, + 0, + 0 + ] + }, + "frameTile_velLenScale": { + "type": 16, + "value": [ + 1, + 1, + 0, + 0 + ] + } + } + } + ] + } + ] + ] + ], + 0, + 0, + [], + [], + [] + ], + [ + [ + [ + 0, + "builtin-2d-graphics", + [ + { + "hash": 550349795, + "record": null, + "name": "builtin-2d-graphics|vs|fs", + "glsl3": { + "vert": "\nprecision highp float;\nuniform CCGlobal {\n mat4 cc_matView;\n mat4 cc_matViewInv;\n mat4 cc_matProj;\n mat4 cc_matProjInv;\n mat4 cc_matViewProj;\n mat4 cc_matViewProjInv;\n vec4 cc_cameraPos;\n vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nin vec3 a_position;\nin vec4 a_color;\nout vec4 v_color;\nin float a_dist;\nout float v_dist;\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n pos = cc_matViewProj * cc_matWorld * pos;\n v_color = a_color;\n v_dist = a_dist;\n gl_Position = pos;\n}", + "frag": "\n#if CC_SUPPORT_standard_derivatives\n #extension GL_OES_standard_derivatives : enable\n#endif\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform ALPHA_TEST {\n float alphaThreshold;\n };\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nin vec4 v_color;\nin float v_dist;\nvoid main () {\n vec4 o = v_color;\n ALPHA_TEST(o);\n #if CC_SUPPORT_standard_derivatives\n float aa = fwidth(v_dist);\n #else\n float aa = 0.05;\n #endif\n float alpha = 1. - smoothstep(-aa, 0., abs(v_dist) - 1.0);\n o.rgb *= o.a;\n o *= alpha;\n gl_FragColor = o;\n}" + }, + "glsl1": { + "vert": "\nprecision highp float;\nuniform mat4 cc_matViewProj;\nuniform mat4 cc_matWorld;\nattribute vec3 a_position;\nattribute vec4 a_color;\nvarying vec4 v_color;\nattribute float a_dist;\nvarying float v_dist;\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n pos = cc_matViewProj * cc_matWorld * pos;\n v_color = a_color;\n v_dist = a_dist;\n gl_Position = pos;\n}", + "frag": "\n#if CC_SUPPORT_standard_derivatives\n #extension GL_OES_standard_derivatives : enable\n#endif\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform float alphaThreshold;\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvarying vec4 v_color;\nvarying float v_dist;\nvoid main () {\n vec4 o = v_color;\n ALPHA_TEST(o);\n #if CC_SUPPORT_standard_derivatives\n float aa = fwidth(v_dist);\n #else\n float aa = 0.05;\n #endif\n float alpha = 1. - smoothstep(-aa, 0., abs(v_dist) - 1.0);\n o.rgb *= o.a;\n o *= alpha;\n gl_FragColor = o;\n}" + }, + "builtins": { + "globals": { + "blocks": [ + { + "name": "CCGlobal", + "defines": [] + } + ], + "samplers": [] + }, + "locals": { + "blocks": [ + { + "name": "CCLocal", + "defines": [] + } + ], + "samplers": [] + } + }, + "defines": [ + { + "name": "CC_SUPPORT_standard_derivatives", + "type": "boolean", + "defines": [] + }, + { + "name": "USE_ALPHA_TEST", + "type": "boolean", + "defines": [] + } + ], + "blocks": [ + { + "name": "ALPHA_TEST", + "binding": 0, + "members": [ + { + "name": "alphaThreshold", + "type": 13, + "count": 1 + } + ], + "defines": [ + "USE_ALPHA_TEST" + ] + } + ], + "samplers": [] + } + ], + [ + { + "passes": [ + { + "program": "builtin-2d-graphics|vs|fs", + "blendState": { + "targets": [ + { + "blend": true, + "blendSrc": 1, + "blendDst": 771, + "blendSrcAlpha": 1, + "blendDstAlpha": 771 + } + ] + }, + "rasterizerState": { + "cullMode": 0 + }, + "properties": { + "alphaThreshold": { + "type": 13, + "value": [ + 0.5 + ] + } + } + } + ] + } + ] + ] + ], + 0, + 0, + [], + [], + [] + ], + [ + [ + [ + 1, + "builtin-2d-gray-sprite", + {} + ] + ], + 0, + 0, + [ + 0 + ], + [ + 0 + ], + [ + 3 + ] + ], + [ + [ + [ + 2, + "builtin-3d-trail", + [ + {}, + "0", + 11, + [ + {}, + "props", + 11, + [ + {}, + "mainTexture", + 6, + 0 + ] + ] + ] + ] + ], + 0, + 0, + [ + 0, + 0 + ], + [ + 2, + 0 + ], + [ + 0, + 4 + ] + ], + [ + [ + [ + 0, + "builtin-unlit", + [ + { + "hash": 922858114, + "record": null, + "name": "builtin-unlit|unlit-vs|unlit-fs", + "glsl3": { + "vert": "\nprecision highp float;\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nuniform CCGlobal {\n mat4 cc_matView;\n mat4 cc_matViewInv;\n mat4 cc_matProj;\n mat4 cc_matProjInv;\n mat4 cc_matViewProj;\n mat4 cc_matViewProjInv;\n vec4 cc_cameraPos;\n vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n};\n#if CC_USE_SKINNING\n in vec4 a_weights;\n in vec4 a_joints;\n #if CC_USE_JOINTS_TEXTRUE\n uniform SKINNING {\n vec2 jointsTextureSize;\n };\n uniform sampler2D jointsTexture;\n #if CC_JOINTS_TEXTURE_FLOAT32\n mat4 getBoneMatrix(const in float i) {\n float width = jointsTextureSize.x;\n float height = jointsTextureSize.y;\n float j = i * 4.0;\n float x = mod(j, width);\n float y = floor(j / width);\n float dx = 1.0 / width;\n float dy = 1.0 / height;\n y = dy * (y + 0.5);\n vec4 v1 = texture(jointsTexture, vec2(dx * (x + 0.5), y));\n vec4 v2 = texture(jointsTexture, vec2(dx * (x + 1.5), y));\n vec4 v3 = texture(jointsTexture, vec2(dx * (x + 2.5), y));\n vec4 v4 = texture(jointsTexture, vec2(dx * (x + 3.5), y));\n return mat4(v1, v2, v3, v4);\n }\n #else\n float decode32(vec4 rgba) {\n float Sign = 1.0 - step(128.0, rgba[0]) * 2.0;\n float Exponent = 2.0 * mod(rgba[0], 128.0) + step(128.0, rgba[1]) - 127.0;\n float Mantissa = mod(rgba[1], 128.0) * 65536.0 + rgba[2] * 256.0 + rgba[3] + 8388608.0;\n return Sign * exp2(Exponent - 23.0) * Mantissa;\n }\n vec4 decodevec4 (vec4 x, vec4 y, vec4 z, vec4 w) {\n return vec4(\n decode32(x.wzyx * 255.0),\n decode32(y.wzyx * 255.0),\n decode32(z.wzyx * 255.0),\n decode32(w.wzyx * 255.0)\n );\n }\n vec4 decodevec4 (float dx, float x, float y) {\n return decodevec4(\n texture(jointsTexture, vec2(dx * (x + 0.5), y)),\n texture(jointsTexture, vec2(dx * (x + 1.5), y)),\n texture(jointsTexture, vec2(dx * (x + 2.5), y)),\n texture(jointsTexture, vec2(dx * (x + 3.5), y))\n );\n }\n mat4 getBoneMatrix(const in float i) {\n float width = jointsTextureSize.x;\n float height = jointsTextureSize.y;\n float j = i * 16.0;\n float x = mod(j, width);\n float y = floor(j / width);\n float dx = 1.0 / width;\n float dy = 1.0 / height;\n y = dy * (y + 0.5);\n vec4 v1 = decodevec4(dx, x, y);\n vec4 v2 = decodevec4(dx, x+4.0, y);\n vec4 v3 = decodevec4(dx, x+8.0, y);\n vec4 v4 = decodevec4(dx, x+12.0, y);\n return mat4(v1, v2, v3, v4);\n }\n #endif\n #else\n uniform JOINT_MATRIX {\n mat4 jointMatrices[50];\n };\n mat4 getBoneMatrix(const in float i) {\n return jointMatrices[int(i)];\n }\n #endif\n mat4 skinMatrix() {\n return\n getBoneMatrix(a_joints.x) * a_weights.x +\n getBoneMatrix(a_joints.y) * a_weights.y +\n getBoneMatrix(a_joints.z) * a_weights.z +\n getBoneMatrix(a_joints.w) * a_weights.w\n ;\n }\n#endif\nstruct StandardVertInput {\n vec2 uv;\n vec4 position;\n vec3 normal;\n vec4 tangent;\n vec4 color;\n};\nin vec3 a_position;\n#if CC_USE_ATTRIBUTE_UV0\nin vec2 a_uv0;\n#endif\n#if CC_USE_ATTRIBUTE_COLOR\nin vec4 a_color;\n#endif\n#if CC_USE_ATTRIBUTE_NORMAL\nin vec3 a_normal;\n#endif\n#if CC_USE_ATTRIBUTE_TANGENT\nin vec4 a_tangent;\n#endif\nvoid CCAttribute (out StandardVertInput In) {\n In.position = vec4(a_position, 1.0);\n #if CC_USE_ATTRIBUTE_UV0\n In.uv = a_uv0;\n #else\n In.uv = vec2(0.0);\n #endif\n #if CC_USE_ATTRIBUTE_COLOR\n In.color = a_color;\n #else\n In.color = vec4(1.0);\n #endif\n #if CC_USE_ATTRIBUTE_NORMAL\n In.normal = a_normal;\n #else\n In.normal = vec3(0.0, 1.0, 0.0);\n #endif\n #if CC_USE_ATTRIBUTE_TANGENT\n In.tangent = a_tangent;\n #else\n In.tangent = vec4(1.0, 0.0, 0.0, 0.0);\n #endif\n}\nvoid CCVertInput(out StandardVertInput In) {\n CCAttribute(In);\n #if CC_USE_SKINNING\n mat4 m = skinMatrix();\n In.position = m * In.position;\n #if CC_USE_ATTRIBUTE_NORMAL\n In.normal = (m * vec4(In.normal, 0)).xyz;\n #endif\n #if CC_USE_ATTRIBUTE_TANGENT\n In.tangent = m * In.tangent;\n #endif\n #endif\n}\nuniform MAIN_TILING {\n vec2 mainTiling;\n vec2 mainOffset;\n};\n#if CC_USE_ATTRIBUTE_UV0 && USE_DIFFUSE_TEXTURE\n out mediump vec2 v_uv0;\n#endif\n#if CC_USE_ATTRIBUTE_COLOR\n out lowp vec4 v_color;\n#endif\nvoid main () {\n StandardVertInput In;\n CCVertInput(In);\n #if CC_USE_ATTRIBUTE_COLOR\n v_color = In.color;\n #endif\n #if CC_USE_ATTRIBUTE_UV0 && USE_DIFFUSE_TEXTURE\n v_uv0 = In.uv * mainTiling + mainOffset;\n #endif\n gl_Position = cc_matViewProj * cc_matWorld * In.position;\n}", + "frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform ALPHA_TEST {\n float alphaThreshold;\n };\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvec4 CCFragOutput (vec4 color) {\n #if OUTPUT_TO_GAMMA\n color.rgb = sqrt(color.rgb);\n #endif\n\treturn color;\n}\nuniform UNLIT {\n lowp vec4 diffuseColor;\n};\n#if USE_DIFFUSE_TEXTURE\n uniform sampler2D diffuseTexture;\n#endif\n#if CC_USE_ATTRIBUTE_COLOR\n in lowp vec4 v_color;\n#endif\n#if CC_USE_ATTRIBUTE_UV0 && USE_DIFFUSE_TEXTURE\n in mediump vec2 v_uv0;\n#endif\nvoid main () {\n vec4 color = diffuseColor;\n #if CC_USE_ATTRIBUTE_UV0 && USE_DIFFUSE_TEXTURE\n vec4 diffuseTexture_tmp = texture(diffuseTexture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_diffuseTexture\n diffuseTexture_tmp.a *= texture(diffuseTexture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n color.rgb *= (diffuseTexture_tmp.rgb * diffuseTexture_tmp.rgb);\n color.a *= diffuseTexture_tmp.a;\n #else\n color *= diffuseTexture_tmp;\n #endif\n #endif\n #if CC_USE_ATTRIBUTE_COLOR\n color *= v_color;\n #endif\n ALPHA_TEST(color);\n gl_FragColor = CCFragOutput(color);\n}" + }, + "glsl1": { + "vert": "\nprecision highp float;\nuniform mat4 cc_matWorld;\nuniform mat4 cc_matViewProj;\n#if CC_USE_SKINNING\n attribute vec4 a_weights;\n attribute vec4 a_joints;\n #if CC_USE_JOINTS_TEXTRUE\n uniform vec2 jointsTextureSize;\n uniform sampler2D jointsTexture;\n #if CC_JOINTS_TEXTURE_FLOAT32\n mat4 getBoneMatrix(const in float i) {\n float width = jointsTextureSize.x;\n float height = jointsTextureSize.y;\n float j = i * 4.0;\n float x = mod(j, width);\n float y = floor(j / width);\n float dx = 1.0 / width;\n float dy = 1.0 / height;\n y = dy * (y + 0.5);\n vec4 v1 = texture2D(jointsTexture, vec2(dx * (x + 0.5), y));\n vec4 v2 = texture2D(jointsTexture, vec2(dx * (x + 1.5), y));\n vec4 v3 = texture2D(jointsTexture, vec2(dx * (x + 2.5), y));\n vec4 v4 = texture2D(jointsTexture, vec2(dx * (x + 3.5), y));\n return mat4(v1, v2, v3, v4);\n }\n #else\n float decode32(vec4 rgba) {\n float Sign = 1.0 - step(128.0, rgba[0]) * 2.0;\n float Exponent = 2.0 * mod(rgba[0], 128.0) + step(128.0, rgba[1]) - 127.0;\n float Mantissa = mod(rgba[1], 128.0) * 65536.0 + rgba[2] * 256.0 + rgba[3] + 8388608.0;\n return Sign * exp2(Exponent - 23.0) * Mantissa;\n }\n vec4 decodevec4 (vec4 x, vec4 y, vec4 z, vec4 w) {\n return vec4(\n decode32(x.wzyx * 255.0),\n decode32(y.wzyx * 255.0),\n decode32(z.wzyx * 255.0),\n decode32(w.wzyx * 255.0)\n );\n }\n vec4 decodevec4 (float dx, float x, float y) {\n return decodevec4(\n texture2D(jointsTexture, vec2(dx * (x + 0.5), y)),\n texture2D(jointsTexture, vec2(dx * (x + 1.5), y)),\n texture2D(jointsTexture, vec2(dx * (x + 2.5), y)),\n texture2D(jointsTexture, vec2(dx * (x + 3.5), y))\n );\n }\n mat4 getBoneMatrix(const in float i) {\n float width = jointsTextureSize.x;\n float height = jointsTextureSize.y;\n float j = i * 16.0;\n float x = mod(j, width);\n float y = floor(j / width);\n float dx = 1.0 / width;\n float dy = 1.0 / height;\n y = dy * (y + 0.5);\n vec4 v1 = decodevec4(dx, x, y);\n vec4 v2 = decodevec4(dx, x+4.0, y);\n vec4 v3 = decodevec4(dx, x+8.0, y);\n vec4 v4 = decodevec4(dx, x+12.0, y);\n return mat4(v1, v2, v3, v4);\n }\n #endif\n #else\n uniform mat4 jointMatrices[50];\n mat4 getBoneMatrix(const in float i) {\n return jointMatrices[int(i)];\n }\n #endif\n mat4 skinMatrix() {\n return\n getBoneMatrix(a_joints.x) * a_weights.x +\n getBoneMatrix(a_joints.y) * a_weights.y +\n getBoneMatrix(a_joints.z) * a_weights.z +\n getBoneMatrix(a_joints.w) * a_weights.w\n ;\n }\n#endif\nstruct StandardVertInput {\n vec2 uv;\n vec4 position;\n vec3 normal;\n vec4 tangent;\n vec4 color;\n};\nattribute vec3 a_position;\n#if CC_USE_ATTRIBUTE_UV0\nattribute vec2 a_uv0;\n#endif\n#if CC_USE_ATTRIBUTE_COLOR\nattribute vec4 a_color;\n#endif\n#if CC_USE_ATTRIBUTE_NORMAL\nattribute vec3 a_normal;\n#endif\n#if CC_USE_ATTRIBUTE_TANGENT\nattribute vec4 a_tangent;\n#endif\nvoid CCAttribute (out StandardVertInput In) {\n In.position = vec4(a_position, 1.0);\n #if CC_USE_ATTRIBUTE_UV0\n In.uv = a_uv0;\n #else\n In.uv = vec2(0.0);\n #endif\n #if CC_USE_ATTRIBUTE_COLOR\n In.color = a_color;\n #else\n In.color = vec4(1.0);\n #endif\n #if CC_USE_ATTRIBUTE_NORMAL\n In.normal = a_normal;\n #else\n In.normal = vec3(0.0, 1.0, 0.0);\n #endif\n #if CC_USE_ATTRIBUTE_TANGENT\n In.tangent = a_tangent;\n #else\n In.tangent = vec4(1.0, 0.0, 0.0, 0.0);\n #endif\n}\nvoid CCVertInput(out StandardVertInput In) {\n CCAttribute(In);\n #if CC_USE_SKINNING\n mat4 m = skinMatrix();\n In.position = m * In.position;\n #if CC_USE_ATTRIBUTE_NORMAL\n In.normal = (m * vec4(In.normal, 0)).xyz;\n #endif\n #if CC_USE_ATTRIBUTE_TANGENT\n In.tangent = m * In.tangent;\n #endif\n #endif\n}\nuniform vec2 mainTiling;\nuniform vec2 mainOffset;\n#if CC_USE_ATTRIBUTE_UV0 && USE_DIFFUSE_TEXTURE\n varying mediump vec2 v_uv0;\n#endif\n#if CC_USE_ATTRIBUTE_COLOR\n varying lowp vec4 v_color;\n#endif\nvoid main () {\n StandardVertInput In;\n CCVertInput(In);\n #if CC_USE_ATTRIBUTE_COLOR\n v_color = In.color;\n #endif\n #if CC_USE_ATTRIBUTE_UV0 && USE_DIFFUSE_TEXTURE\n v_uv0 = In.uv * mainTiling + mainOffset;\n #endif\n gl_Position = cc_matViewProj * cc_matWorld * In.position;\n}", + "frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform float alphaThreshold;\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvec4 CCFragOutput (vec4 color) {\n #if OUTPUT_TO_GAMMA\n color.rgb = sqrt(color.rgb);\n #endif\n\treturn color;\n}\nuniform lowp vec4 diffuseColor;\n#if USE_DIFFUSE_TEXTURE\n uniform sampler2D diffuseTexture;\n#endif\n#if CC_USE_ATTRIBUTE_COLOR\n varying lowp vec4 v_color;\n#endif\n#if CC_USE_ATTRIBUTE_UV0 && USE_DIFFUSE_TEXTURE\n varying mediump vec2 v_uv0;\n#endif\nvoid main () {\n vec4 color = diffuseColor;\n #if CC_USE_ATTRIBUTE_UV0 && USE_DIFFUSE_TEXTURE\n vec4 diffuseTexture_tmp = texture2D(diffuseTexture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_diffuseTexture\n diffuseTexture_tmp.a *= texture2D(diffuseTexture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n color.rgb *= (diffuseTexture_tmp.rgb * diffuseTexture_tmp.rgb);\n color.a *= diffuseTexture_tmp.a;\n #else\n color *= diffuseTexture_tmp;\n #endif\n #endif\n #if CC_USE_ATTRIBUTE_COLOR\n color *= v_color;\n #endif\n ALPHA_TEST(color);\n gl_FragColor = CCFragOutput(color);\n}" + }, + "builtins": { + "globals": { + "blocks": [ + { + "name": "CCGlobal", + "defines": [] + } + ], + "samplers": [] + }, + "locals": { + "blocks": [ + { + "name": "CCLocal", + "defines": [] + } + ], + "samplers": [] + } + }, + "defines": [ + { + "name": "CC_USE_SKINNING", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_JOINTS_TEXTRUE", + "type": "boolean", + "defines": [ + "CC_USE_SKINNING" + ] + }, + { + "name": "CC_JOINTS_TEXTURE_FLOAT32", + "type": "boolean", + "defines": [ + "CC_USE_SKINNING", + "CC_USE_JOINTS_TEXTRUE" + ] + }, + { + "name": "CC_USE_ATTRIBUTE_UV0", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_ATTRIBUTE_COLOR", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_ATTRIBUTE_NORMAL", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_ATTRIBUTE_TANGENT", + "type": "boolean", + "defines": [] + }, + { + "name": "USE_DIFFUSE_TEXTURE", + "type": "boolean", + "defines": [] + }, + { + "name": "USE_ALPHA_TEST", + "type": "boolean", + "defines": [] + }, + { + "name": "OUTPUT_TO_GAMMA", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_ALPHA_ATLAS_diffuseTexture", + "type": "boolean", + "defines": [ + "CC_USE_ATTRIBUTE_UV0", + "USE_DIFFUSE_TEXTURE" + ] + }, + { + "name": "INPUT_IS_GAMMA", + "type": "boolean", + "defines": [ + "CC_USE_ATTRIBUTE_UV0", + "USE_DIFFUSE_TEXTURE" + ] + } + ], + "blocks": [ + { + "name": "SKINNING", + "binding": 0, + "members": [ + { + "name": "jointsTextureSize", + "type": 14, + "count": 1 + } + ], + "defines": [ + "CC_USE_SKINNING", + "CC_USE_JOINTS_TEXTRUE" + ] + }, + { + "name": "JOINT_MATRIX", + "binding": 1, + "members": [ + { + "name": "jointMatrices", + "type": 26, + "count": 50 + } + ], + "defines": [ + "CC_USE_SKINNING" + ] + }, + { + "name": "MAIN_TILING", + "binding": 2, + "members": [ + { + "name": "mainTiling", + "type": 14, + "count": 1 + }, + { + "name": "mainOffset", + "type": 14, + "count": 1 + } + ], + "defines": [] + }, + { + "name": "ALPHA_TEST", + "binding": 3, + "members": [ + { + "name": "alphaThreshold", + "type": 13, + "count": 1 + } + ], + "defines": [ + "USE_ALPHA_TEST" + ] + }, + { + "name": "UNLIT", + "binding": 4, + "members": [ + { + "name": "diffuseColor", + "type": 16, + "count": 1 + } + ], + "defines": [] + } + ], + "samplers": [ + { + "name": "jointsTexture", + "type": 29, + "count": 1, + "binding": 30, + "defines": [ + "CC_USE_SKINNING", + "CC_USE_JOINTS_TEXTRUE" + ] + }, + { + "name": "diffuseTexture", + "type": 29, + "count": 1, + "binding": 31, + "defines": [ + "USE_DIFFUSE_TEXTURE" + ] + } + ] + } + ], + [ + { + "name": "opaque", + "passes": [ + { + "program": "builtin-unlit|unlit-vs|unlit-fs", + "blendState": { + "targets": [ + { + "blend": true + } + ] + }, + "rasterizerState": { + "cullMode": 0 + }, + "depthStencilState": { + "depthTest": true, + "depthWrite": true + }, + "properties": { + "diffuseTexture": { + "value": "white", + "type": 29 + }, + "diffuseColor": { + "type": 16, + "value": [ + 1, + 1, + 1, + 1 + ], + "editor": { + "type": "color" + } + }, + "alphaThreshold": { + "type": 13, + "value": [ + 0.5 + ] + }, + "mainTiling": { + "type": 14, + "value": [ + 1, + 1 + ] + }, + "mainOffset": { + "type": 14, + "value": [ + 0, + 0 + ] + } + } + } + ] + }, + { + "name": "transparent", + "passes": [ + { + "stage": "transparent", + "program": "builtin-unlit|unlit-vs|unlit-fs", + "blendState": { + "targets": [ + { + "blend": true + } + ] + }, + "rasterizerState": { + "cullMode": 0 + }, + "depthStencilState": { + "depthTest": true, + "depthWrite": true + }, + "properties": { + "diffuseTexture": { + "value": "white", + "type": 29 + }, + "diffuseColor": { + "type": 16, + "value": [ + 1, + 1, + 1, + 1 + ], + "editor": { + "type": "color" + } + }, + "alphaThreshold": { + "type": 13, + "value": [ + 0.5 + ] + }, + "mainTiling": { + "type": 14, + "value": [ + 1, + 1 + ] + }, + "mainOffset": { + "type": 14, + "value": [ + 0, + 0 + ] + } + } + } + ] + } + ] + ] + ], + 0, + 0, + [], + [], + [] + ], + [ + [ + [ + 1, + "builtin-2d-base", + {} + ] + ], + 0, + 0, + [ + 0 + ], + [ + 0 + ], + [ + 1 + ] + ], + [ + [ + [ + 1, + "builtin-2d-spine", + {} + ] + ], + 0, + 0, + [ + 0 + ], + [ + 0 + ], + [ + 5 + ] + ], + [ + [ + [ + 1, + "builtin-2d-graphics", + { + "0": { + "defines": {} + } + } + ] + ], + 0, + 0, + [ + 0 + ], + [ + 0 + ], + [ + 6 + ] + ], + [ + [ + [ + 0, + "builtin-clear-stencil", + [ + { + "hash": 2075641479, + "record": null, + "name": "builtin-clear-stencil|vs|fs", + "glsl3": { + "vert": "\nprecision highp float;\nin vec3 a_position;\nvoid main () {\n gl_Position = vec4(a_position, 1);\n}", + "frag": "\nprecision highp float;\nvoid main () {\n gl_FragColor = vec4(1.0);\n}" + }, + "glsl1": { + "vert": "\nprecision highp float;\nattribute vec3 a_position;\nvoid main () {\n gl_Position = vec4(a_position, 1);\n}", + "frag": "\nprecision highp float;\nvoid main () {\n gl_FragColor = vec4(1.0);\n}" + }, + "builtins": { + "globals": { + "blocks": [], + "samplers": [] + }, + "locals": { + "blocks": [], + "samplers": [] + } + }, + "defines": [], + "blocks": [], + "samplers": [] + } + ], + [ + { + "passes": [ + { + "program": "builtin-clear-stencil|vs|fs", + "blendState": { + "targets": [ + { + "blend": true + } + ] + }, + "rasterizerState": { + "cullMode": 0 + } + } + ] + } + ] + ] + ], + 0, + 0, + [], + [], + [] + ], + [ + [ + [ + 1, + "builtin-clear-stencil", + {} + ] + ], + 0, + 0, + [ + 0 + ], + [ + 0 + ], + [ + 7 + ] + ], + [ + [ + [ + 1, + "builtin-2d-label", + { + "0": { + "defines": { + "USE_TEXTURE": true + } + } + } + ] + ], + 0, + 0, + [ + 0 + ], + [ + 0 + ], + [ + 8 + ] + ], + [ + [ + [ + 1, + "builtin-2d-sprite", + { + "0": { + "defines": { + "USE_TEXTURE": true + } + } + } + ] + ], + 0, + 0, + [ + 0 + ], + [ + 0 + ], + [ + 1 + ] + ], + [ + [ + [ + 0, + "builtin-2d-label", + [ + { + "hash": 1105459032, + "record": null, + "name": "builtin-2d-label|vs|fs", + "glsl3": { + "vert": "\nprecision highp float;\nuniform CCGlobal {\n mat4 cc_matView;\n mat4 cc_matViewInv;\n mat4 cc_matProj;\n mat4 cc_matProjInv;\n mat4 cc_matViewProj;\n mat4 cc_matViewProjInv;\n vec4 cc_cameraPos;\n vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nin vec3 a_position;\nin vec4 a_color;\nout vec4 v_color;\n#if USE_TEXTURE\nin vec2 a_uv0;\nout vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}", + "frag": "\n#if CC_SUPPORT_standard_derivatives\n #extension GL_OES_standard_derivatives : enable\n#endif\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform ALPHA_TEST {\n float alphaThreshold;\n };\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nin vec4 v_color;\n#if USE_TEXTURE\nin vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n#if USE_SDF\nuniform Outline {\n vec4 outlineColor;\n float outlineSize;\n};\n#endif\nvoid main () {\n#if USE_SDF\n #if USE_TEXTURE_ALPHAONLY\n float dist = texture(texture, v_uv0).a;\n #else\n float dist = texture(texture, v_uv0).r;\n #endif\n #if USE_SDF_EXTEND\n const float EDGE_VALUE = 0.45;\n #else\n const float EDGE_VALUE = 0.5;\n #endif\n #if CC_SUPPORT_standard_derivatives\n float smoothing = fwidth(dist);\n #else\n float smoothing = 0.05;\n #endif\n float outEdge = EDGE_VALUE - outlineSize;\n float bg = smoothstep(outEdge - smoothing, outEdge, dist);\n float fg = smoothstep(EDGE_VALUE - smoothing, EDGE_VALUE, dist);\n vec4 fgColor = outlineColor * (1.0 - fg) + v_color * fg;\n gl_FragColor = vec4(fgColor.rgb, fgColor.a * bg);\n#else\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n #if USE_TEXTURE_ALPHAONLY\n o.a *= texture(texture, v_uv0).a;\n #else\n o *= texture(texture, v_uv0);\n #endif\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n#endif\n}" + }, + "glsl1": { + "vert": "\nprecision highp float;\nuniform mat4 cc_matViewProj;\nuniform mat4 cc_matWorld;\nattribute vec3 a_position;\nattribute vec4 a_color;\nvarying vec4 v_color;\n#if USE_TEXTURE\nattribute vec2 a_uv0;\nvarying vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}", + "frag": "\n#if CC_SUPPORT_standard_derivatives\n #extension GL_OES_standard_derivatives : enable\n#endif\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform float alphaThreshold;\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvarying vec4 v_color;\n#if USE_TEXTURE\nvarying vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n#if USE_SDF\nuniform vec4 outlineColor;\nuniform float outlineSize;\n#endif\nvoid main () {\n#if USE_SDF\n #if USE_TEXTURE_ALPHAONLY\n float dist = texture2D(texture, v_uv0).a;\n #else\n float dist = texture2D(texture, v_uv0).r;\n #endif\n #if USE_SDF_EXTEND\n const float EDGE_VALUE = 0.45;\n #else\n const float EDGE_VALUE = 0.5;\n #endif\n #if CC_SUPPORT_standard_derivatives\n float smoothing = fwidth(dist);\n #else\n float smoothing = 0.05;\n #endif\n float outEdge = EDGE_VALUE - outlineSize;\n float bg = smoothstep(outEdge - smoothing, outEdge, dist);\n float fg = smoothstep(EDGE_VALUE - smoothing, EDGE_VALUE, dist);\n vec4 fgColor = outlineColor * (1.0 - fg) + v_color * fg;\n gl_FragColor = vec4(fgColor.rgb, fgColor.a * bg);\n#else\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n #if USE_TEXTURE_ALPHAONLY\n o.a *= texture2D(texture, v_uv0).a;\n #else\n o *= texture2D(texture, v_uv0);\n #endif\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n#endif\n}" + }, + "builtins": { + "globals": { + "blocks": [ + { + "name": "CCGlobal", + "defines": [] + } + ], + "samplers": [] + }, + "locals": { + "blocks": [ + { + "name": "CCLocal", + "defines": [] + } + ], + "samplers": [] + } + }, + "defines": [ + { + "name": "USE_TEXTURE", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_MODEL", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_SUPPORT_standard_derivatives", + "type": "boolean", + "defines": [] + }, + { + "name": "USE_ALPHA_TEST", + "type": "boolean", + "defines": [] + }, + { + "name": "USE_SDF", + "type": "boolean", + "defines": [] + }, + { + "name": "USE_TEXTURE_ALPHAONLY", + "type": "boolean", + "defines": [ + "USE_SDF" + ] + }, + { + "name": "USE_SDF_EXTEND", + "type": "boolean", + "defines": [ + "USE_SDF" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_TEXTURE", + "type": "boolean", + "defines": [ + "USE_TEXTURE" + ] + } + ], + "blocks": [ + { + "name": "ALPHA_TEST", + "binding": 0, + "members": [ + { + "name": "alphaThreshold", + "type": 13, + "count": 1 + } + ], + "defines": [ + "USE_ALPHA_TEST" + ] + }, + { + "name": "Outline", + "binding": 1, + "members": [ + { + "name": "outlineColor", + "type": 16, + "count": 1 + }, + { + "name": "outlineSize", + "type": 13, + "count": 1 + } + ], + "defines": [ + "USE_SDF" + ] + } + ], + "samplers": [ + { + "name": "texture", + "type": 29, + "count": 1, + "binding": 30, + "defines": [ + "USE_TEXTURE" + ] + } + ] + } + ], + [ + { + "passes": [ + { + "program": "builtin-2d-label|vs|fs", + "blendState": { + "targets": [ + { + "blend": true + } + ] + }, + "rasterizerState": { + "cullMode": 0 + }, + "properties": { + "texture": { + "value": "white", + "type": 29 + }, + "alphaThreshold": { + "type": 13, + "value": [ + 0.5 + ] + }, + "outlineSize": { + "type": 13, + "value": [ + 0 + ] + }, + "outlineColor": { + "type": 16, + "value": [ + 1, + 1, + 1, + 1 + ] + } + } + } + ] + } + ] + ] + ], + 0, + 0, + [], + [], + [] + ] + ] +] \ No newline at end of file diff --git a/demo/web-mobile/assets/internal/index.8360b.js b/demo/web-mobile/assets/internal/index.8360b.js new file mode 100644 index 00000000..a4d827f4 --- /dev/null +++ b/demo/web-mobile/assets/internal/index.8360b.js @@ -0,0 +1,29 @@ +(function e(t, n, r) { + function s(o, u) { + if (!n[o]) { + if (!t[o]) { + var b = o.split("/"); + b = b[b.length - 1]; + if (!t[b]) { + var a = "function" == typeof __require && __require; + if (!u && a) return a(b, !0); + if (i) return i(b, !0); + throw new Error("Cannot find module '" + o + "'"); + } + o = b; + } + var f = n[o] = { + exports: {} + }; + t[o][0].call(f.exports, function(e) { + var n = t[o][1][e]; + return s(n || e); + }, f, f.exports, e, t, n, r); + } + return n[o].exports; + } + var i = "function" == typeof __require && __require; + for (var o = 0; o < r.length; o++) s(r[o]); + return s; +})({}, {}, []); +//# sourceMappingURL=index.js.map diff --git a/demo/web-mobile/assets/internal/index.js.map b/demo/web-mobile/assets/internal/index.js.map new file mode 100644 index 00000000..a6d01198 --- /dev/null +++ b/demo/web-mobile/assets/internal/index.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"index.js"} \ No newline at end of file diff --git a/demo/web-mobile/assets/internal/native/02/0275e94c-56a7-410f-bd1a-fc7483f7d14a.cea68.png b/demo/web-mobile/assets/internal/native/02/0275e94c-56a7-410f-bd1a-fc7483f7d14a.cea68.png new file mode 100644 index 0000000000000000000000000000000000000000..fa6376e6316ae9bd38595b550b5fdf78a6fa6d6b GIT binary patch literal 82 zcmeAS@N?(olHy`uVBq!ia0vp^Od!n23?w}&=BEQG<^Z1%*Z=?jFFzuE0?6g^ba4#f bxSkAB$il#=a7i~GD9YgJ>gTe~DWM4fnP3tm literal 0 HcmV?d00001 diff --git a/demo/web-mobile/assets/main/config.ced16.json b/demo/web-mobile/assets/main/config.ced16.json new file mode 100644 index 00000000..3d41d663 --- /dev/null +++ b/demo/web-mobile/assets/main/config.ced16.json @@ -0,0 +1,55 @@ +{ + "paths": {}, + "uuids": [ + "catK9m3HRBtYgmebOjC6ma", + "ecpdLyjvZBwrvm+cedCcQy", + "a2MjXRFdtLlYQ5ouAFv/+R", + "5cO7kybDxGj4ipyMYdRYZB", + "5f5dyqtRNNxaFmVzYns6FZ", + "e3EaADwKFP+ZmDIVTeFF63", + "d608qFRoFHwbXd0Dap056i", + "02delMVqdBD70a/HSD99FK", + "61cyPdEfRN047sDK9rO0W5" + ], + "scenes": { + "db://assets/main.fire": "catK9m3HRBtYgmebOjC6ma" + }, + "redirect": [ + "ecpdLyjvZBwrvm+cedCcQy", + 0, + "02delMVqdBD70a/HSD99FK", + 0 + ], + "deps": [ + "internal" + ], + "packs": { + "0d90adf1f": [ + "5cO7kybDxGj4ipyMYdRYZB", + "5f5dyqtRNNxaFmVzYns6FZ", + "61cyPdEfRN047sDK9rO0W5", + "a2MjXRFdtLlYQ5ouAFv/+R", + "catK9m3HRBtYgmebOjC6ma", + "d608qFRoFHwbXd0Dap056i", + "e3EaADwKFP+ZmDIVTeFF63" + ] + }, + "name": "main", + "importBase": "import", + "nativeBase": "native", + "debug": true, + "isZip": false, + "encrypted": false, + "versions": { + "import": [ + "0d90adf1f", + "bd1b5" + ], + "native": [ + "61cyPdEfRN047sDK9rO0W5", + "6d707", + "d608qFRoFHwbXd0Dap056i", + "d55c2" + ] + } +} \ No newline at end of file diff --git a/demo/web-mobile/assets/main/import/0d/0d90adf1f.bd1b5.json b/demo/web-mobile/assets/main/import/0d/0d90adf1f.bd1b5.json new file mode 100644 index 00000000..1a4e33c8 --- /dev/null +++ b/demo/web-mobile/assets/main/import/0d/0d90adf1f.bd1b5.json @@ -0,0 +1,3338 @@ +[ + 1, + [ + "ecpdLyjvZBwrvm+cedCcQy", + "a2MjXRFdtLlYQ5ouAFv/+R", + "d608qFRoFHwbXd0Dap056i", + "61cyPdEfRN047sDK9rO0W5", + "02delMVqdBD70a/HSD99FK", + "5f5dyqtRNNxaFmVzYns6FZ", + "e3EaADwKFP+ZmDIVTeFF63", + "5cO7kybDxGj4ipyMYdRYZB" + ], + [ + "node", + "_spriteFrame", + "checkMark", + "_N$target", + "_textureSetter", + "root", + "_parent", + "version", + "mainArea", + "scene", + "_scrollView", + "asset", + "data" + ], + [ + [ + "cc.Node", + [ + "_name", + "_id", + "_opacity", + "_components", + "_contentSize", + "_parent", + "_trs", + "_children", + "_color", + "_prefab", + "_anchorPoint" + ], + 0, + 9, + 5, + 1, + 7, + 2, + 5, + 4, + 5 + ], + [ + "cc.Widget", + [ + "_alignFlags", + "_originalHeight", + "_left", + "_originalWidth", + "alignMode", + "_top", + "node" + ], + -3, + 1 + ], + [ + "cc.Node", + [ + "_name", + "_active", + "_parent", + "_components", + "_contentSize", + "_color", + "_trs", + "_children", + "_anchorPoint" + ], + 1, + 1, + 12, + 5, + 5, + 7, + 2, + 5 + ], + [ + "cc.Sprite", + [ + "_sizeMode", + "_type", + "_isTrimmedMode", + "node", + "_materials", + "_spriteFrame" + ], + 0, + 1, + 3, + 6 + ], + "cc.SpriteFrame", + [ + "cc.Label", + [ + "_string", + "_fontSize", + "_N$horizontalAlign", + "_N$verticalAlign", + "_N$cacheMode", + "_materials", + "_lineHeight", + "_N$overflow", + "node" + ], + -5, + 1 + ], + [ + "cc.PrefabInfo", + [ + "sync", + "fileId", + "root", + "asset" + ], + 1, + 1, + 6 + ], + "cc.Texture2D", + [ + "cc.Toggle", + [ + "zoomScale", + "_N$transition", + "_N$isChecked", + "node", + "_N$normalColor", + "_N$target", + "checkMark" + ], + 0, + 1, + 5, + 1, + 1 + ], + [ + "cc.SceneAsset", + [ + "_name", + "asyncLoadAssets" + ], + 1 + ], + [ + "cc.Node", + [ + "_name", + "_parent", + "_components", + "_contentSize", + "_anchorPoint" + ], + 2, + 1, + 2, + 5, + 5 + ], + [ + "cc.ToggleContainer", + [ + "node" + ], + 3, + 1 + ], + [ + "cc.Layout", + [ + "_resize", + "_N$layoutType", + "_N$paddingTop", + "node", + "_layoutSize" + ], + 0, + 1, + 5 + ], + [ + "cc.Canvas", + [ + "node", + "_designResolution" + ], + 3, + 1, + 5 + ], + [ + "2454fZB1jNNTbYkc7ryXmr1", + [ + "node", + "version" + ], + 3, + 1, + 1 + ], + [ + "853f5uyG5pFHpEaXeXta1ML", + [ + "node", + "home", + "multiMaterial", + "multiBatcher", + "charMode", + "highDPI", + "spineBatch", + "spineSkin", + "mainArea" + ], + 3, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + [ + "cc.Scene", + [ + "_name", + "_children", + "_anchorPoint", + "_trs" + ], + 2, + 2, + 5, + 7 + ], + [ + "cc.Camera", + [ + "_clearFlags", + "_depth", + "node" + ], + 1, + 1 + ], + [ + "cc.Scrollbar", + [ + "_N$direction", + "node", + "_N$handle" + ], + 2, + 1, + 1 + ], + [ + "cc.ScrollView", + [ + "horizontal", + "brake", + "bounceDuration", + "_N$horizontalScrollBar", + "node", + "_N$content", + "_N$verticalScrollBar" + ], + -1, + 1, + 1, + 1 + ], + [ + "cc.Prefab", + [ + "_name" + ], + 2 + ] + ], + [ + [ + 1, + 0, + 3, + 1, + 6, + 4 + ], + [ + 1, + 0, + 6, + 2 + ], + [ + 3, + 0, + 3, + 4, + 5, + 2 + ], + [ + 5, + 0, + 1, + 2, + 3, + 4, + 5, + 8, + 7 + ], + [ + 1, + 0, + 3, + 6, + 3 + ], + [ + 0, + 0, + 5, + 7, + 3, + 4, + 6, + 2 + ], + [ + 0, + 0, + 5, + 3, + 4, + 2 + ], + [ + 0, + 0, + 5, + 3, + 8, + 4, + 2 + ], + [ + 3, + 0, + 3, + 4, + 2 + ], + [ + 2, + 0, + 1, + 2, + 3, + 5, + 4, + 3 + ], + [ + 8, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 4 + ], + [ + 0, + 0, + 5, + 3, + 8, + 4, + 6, + 2 + ], + [ + 1, + 0, + 2, + 6, + 3 + ], + [ + 0, + 0, + 2, + 5, + 3, + 8, + 4, + 6, + 3 + ], + [ + 5, + 0, + 1, + 6, + 2, + 3, + 7, + 4, + 5, + 8, + 9 + ], + [ + 9, + 0, + 1, + 3 + ], + [ + 0, + 0, + 7, + 3, + 4, + 10, + 6, + 2 + ], + [ + 0, + 0, + 1, + 7, + 3, + 4, + 6, + 3 + ], + [ + 0, + 0, + 5, + 7, + 3, + 4, + 2 + ], + [ + 0, + 0, + 5, + 9, + 2 + ], + [ + 0, + 0, + 7, + 3, + 9, + 4, + 6, + 2 + ], + [ + 0, + 0, + 5, + 3, + 9, + 8, + 4, + 6, + 2 + ], + [ + 2, + 0, + 2, + 7, + 3, + 5, + 4, + 6, + 2 + ], + [ + 2, + 0, + 2, + 7, + 3, + 4, + 8, + 6, + 2 + ], + [ + 2, + 0, + 2, + 3, + 5, + 4, + 6, + 2 + ], + [ + 2, + 0, + 2, + 3, + 5, + 4, + 2 + ], + [ + 10, + 0, + 1, + 2, + 3, + 4, + 2 + ], + [ + 11, + 0, + 1 + ], + [ + 12, + 0, + 1, + 2, + 3, + 4, + 4 + ], + [ + 1, + 0, + 1, + 6, + 3 + ], + [ + 1, + 4, + 0, + 2, + 1, + 6, + 5 + ], + [ + 1, + 0, + 2, + 5, + 6, + 4 + ], + [ + 8, + 0, + 1, + 3, + 4, + 5, + 6, + 3 + ], + [ + 13, + 0, + 1, + 1 + ], + [ + 14, + 0, + 1, + 1 + ], + [ + 3, + 0, + 2, + 3, + 4, + 5, + 3 + ], + [ + 3, + 1, + 0, + 3, + 4, + 5, + 3 + ], + [ + 3, + 1, + 0, + 3, + 4, + 3 + ], + [ + 15, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 1 + ], + [ + 5, + 0, + 1, + 6, + 2, + 3, + 4, + 5, + 8, + 8 + ], + [ + 16, + 0, + 1, + 2, + 3, + 2 + ], + [ + 17, + 0, + 1, + 2, + 3 + ], + [ + 18, + 0, + 1, + 2, + 2 + ], + [ + 19, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 5 + ], + [ + 6, + 0, + 2, + 3, + 2 + ], + [ + 6, + 2, + 1 + ], + [ + 6, + 1, + 2, + 2 + ], + [ + 20, + 0, + 2 + ] + ], + [ + [ + [ + { + "name": "default_scrollbar_vertical", + "rect": [ + 0, + 0, + 15, + 30 + ], + "offset": [ + 0, + 0 + ], + "originalSize": [ + 15, + 30 + ], + "capInsets": [ + 4, + 10, + 4, + 10 + ] + } + ], + [ + 4 + ], + 0, + [ + 0 + ], + [ + 4 + ], + [ + 2 + ] + ], + [ + [ + { + "name": "default_scrollbar_vertical_bg", + "rect": [ + 0, + 0, + 15, + 30 + ], + "offset": [ + 0, + 0 + ], + "originalSize": [ + 15, + 30 + ], + "capInsets": [ + 4, + 10, + 4, + 10 + ] + } + ], + [ + 4 + ], + 0, + [ + 0 + ], + [ + 4 + ], + [ + 3 + ] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 7 + ], + 0, + [], + [], + [] + ], + [ + [ + { + "name": "default_sprite_splash", + "rect": [ + 0, + 0, + 2, + 2 + ], + "offset": [ + 0, + 0 + ], + "originalSize": [ + 2, + 2 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 4 + ], + 0, + [ + 0 + ], + [ + 4 + ], + [ + 4 + ] + ], + [ + [ + [ + 15, + "main", + null + ], + [ + 16, + "content", + [ + -4, + -5, + -6, + -7, + -8, + -9, + -10, + -11, + -12, + -13, + -14, + -15, + -16, + -17, + -18 + ], + [ + [ + 27, + -1 + ], + [ + 28, + 1, + 2, + 10, + -2, + [ + 5, + 240, + 555 + ] + ], + [ + 4, + 41, + 220, + -3 + ] + ], + [ + 5, + 240, + 555 + ], + [ + 0, + 0.5, + 1 + ], + [ + 0, + 300, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 5, + "home", + 1, + [ + -23, + -24, + -25 + ], + [ + [ + 32, + 0.97, + 3, + -21, + [ + 4, + 4292269782 + ], + -20, + -19 + ], + [ + 4, + 40, + 200, + -22 + ] + ], + [ + 5, + 240, + 50 + ], + [ + 0, + -107, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0 + ] + ], + [ + 5, + "multi-render-material", + 1, + [ + -30, + -31, + -32 + ], + [ + [ + 10, + 0.97, + 3, + false, + -28, + [ + 4, + 4292269782 + ], + -27, + -26 + ], + [ + 4, + 40, + 200, + -29 + ] + ], + [ + 5, + 240, + 50 + ], + [ + 0, + -197, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0 + ] + ], + [ + 5, + "multi-render-batcher", + 1, + [ + -37, + -38, + -39 + ], + [ + [ + 10, + 0.97, + 3, + false, + -35, + [ + 4, + 4292269782 + ], + -34, + -33 + ], + [ + 4, + 40, + 200, + -36 + ] + ], + [ + 5, + 240, + 50 + ], + [ + 0, + -248, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0 + ] + ], + [ + 5, + "char-mode", + 1, + [ + -44, + -45, + -46 + ], + [ + [ + 10, + 0.97, + 3, + false, + -42, + [ + 4, + 4292269782 + ], + -41, + -40 + ], + [ + 4, + 40, + 200, + -43 + ] + ], + [ + 5, + 240, + 50 + ], + [ + 0, + -338, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0 + ] + ], + [ + 5, + "high-dpi", + 1, + [ + -51, + -52, + -53 + ], + [ + [ + 10, + 0.97, + 3, + false, + -49, + [ + 4, + 4292269782 + ], + -48, + -47 + ], + [ + 4, + 40, + 200, + -50 + ] + ], + [ + 5, + 240, + 50 + ], + [ + 0, + -389, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0 + ] + ], + [ + 5, + "spine-batch", + 1, + [ + -58, + -59, + -60 + ], + [ + [ + 10, + 0.97, + 3, + false, + -56, + [ + 4, + 4292269782 + ], + -55, + -54 + ], + [ + 4, + 40, + 200, + -57 + ] + ], + [ + 5, + 240, + 50 + ], + [ + 0, + -479, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0 + ] + ], + [ + 5, + "spine-skin", + 1, + [ + -65, + -66, + -67 + ], + [ + [ + 10, + 0.97, + 3, + false, + -63, + [ + 4, + 4292269782 + ], + -62, + -61 + ], + [ + 4, + 40, + 200, + -64 + ] + ], + [ + 5, + 240, + 50 + ], + [ + 0, + -530, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0 + ] + ], + [ + 17, + "Canvas", + "a5esZu+45LA5mBpvttspPD", + [ + -72, + -73, + -74 + ], + [ + [ + 33, + -68, + [ + 5, + 960, + 600 + ] + ], + [ + 1, + 45, + -69 + ], + [ + 34, + -71, + -70 + ] + ], + [ + 5, + 960, + 600 + ], + [ + 480, + 300, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 22, + "left-area", + 9, + [ + -80, + -81 + ], + [ + [ + -75, + [ + 29, + 13, + 250, + -76 + ], + [ + 35, + 0, + false, + -77, + [ + 30 + ], + 31 + ], + [ + 38, + -79, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + -78 + ] + ], + 1, + 4, + 4, + 4 + ], + [ + 4, + 4279834905 + ], + [ + 5, + 240, + 600 + ], + [ + -360, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 23, + "scrollBar", + 10, + [ + -85 + ], + [ + [ + -82, + [ + 30, + 0, + 37, + 350.07654921020657, + 237, + -83 + ], + [ + 36, + 1, + 0, + -84, + [ + 28 + ], + 29 + ] + ], + 1, + 4, + 4 + ], + [ + 5, + 8, + 600 + ], + [ + 0, + 1, + 0.5 + ], + [ + 120, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 5, + "main-area", + 9, + [ + -87 + ], + [ + [ + 1, + 37, + -86 + ] + ], + [ + 5, + 720, + 600 + ], + [ + 120, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 18, + "view", + 10, + [ + 1 + ], + [ + [ + 0, + 45, + 240, + 250, + -88 + ] + ], + [ + 5, + 240, + 600 + ] + ], + [ + 11, + "cat", + 1, + [ + [ + 14, + "- Cocos Service Pack Demo -", + 14, + 16, + 1, + 1, + 1, + 2, + [ + null + ], + -89 + ], + [ + 12, + 16, + 20, + -90 + ] + ], + [ + 4, + 4287401100 + ], + [ + 5, + 230.365, + 40 + ], + [ + 0, + -30, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 24, + "cat", + 1, + [ + [ + -91, + [ + 4, + 40, + 200.135, + -92 + ] + ], + 1, + 4 + ], + [ + 4, + 4287401100 + ], + [ + 5, + 240, + 32 + ], + [ + 0, + -66, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 7, + "bg", + 2, + [ + [ + 2, + 0, + -93, + [ + 0 + ], + 1 + ], + [ + 0, + 45, + 100, + 100, + -94 + ] + ], + [ + 4, + 4281348144 + ], + [ + 5, + 240, + 50 + ] + ], + [ + 25, + "check", + 2, + [ + [ + -95, + [ + 0, + 45, + 100, + 100, + -96 + ] + ], + 1, + 4 + ], + [ + 4, + 4283058762 + ], + [ + 5, + 240, + 50 + ] + ], + [ + 6, + "text", + 2, + [ + [ + 3, + "首页", + 16, + 1, + 1, + 2, + [ + null + ], + -97 + ], + [ + 1, + 18, + -98 + ] + ], + [ + 5, + 32, + 40 + ] + ], + [ + 11, + "cat", + 1, + [ + [ + 3, + "- 多纹理渲染 -", + 14, + 1, + 1, + 2, + [ + null + ], + -99 + ], + [ + 12, + 16, + 20, + -100 + ] + ], + [ + 4, + 4287401100 + ], + [ + 5, + 87.1, + 40 + ], + [ + 0, + -152, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 7, + "bg", + 3, + [ + [ + 2, + 0, + -101, + [ + 3 + ], + 4 + ], + [ + 0, + 45, + 100, + 100, + -102 + ] + ], + [ + 4, + 4281348144 + ], + [ + 5, + 240, + 50 + ] + ], + [ + 9, + "check", + false, + 3, + [ + [ + -103, + [ + 0, + 45, + 100, + 100, + -104 + ] + ], + 1, + 4 + ], + [ + 4, + 4283058762 + ], + [ + 5, + 240, + 50 + ] + ], + [ + 6, + "text", + 3, + [ + [ + 3, + "多纹理材质", + 16, + 1, + 1, + 2, + [ + null + ], + -105 + ], + [ + 1, + 18, + -106 + ] + ], + [ + 5, + 80, + 40 + ] + ], + [ + 7, + "bg", + 4, + [ + [ + 2, + 0, + -107, + [ + 8 + ], + 9 + ], + [ + 0, + 45, + 100, + 100, + -108 + ] + ], + [ + 4, + 4281348144 + ], + [ + 5, + 240, + 50 + ] + ], + [ + 9, + "check", + false, + 4, + [ + [ + -109, + [ + 0, + 45, + 100, + 100, + -110 + ] + ], + 1, + 4 + ], + [ + 4, + 4283058762 + ], + [ + 5, + 240, + 50 + ] + ], + [ + 6, + "text", + 4, + [ + [ + 3, + "多纹理合批", + 16, + 1, + 1, + 2, + [ + null + ], + -111 + ], + [ + 1, + 18, + -112 + ] + ], + [ + 5, + 80, + 40 + ] + ], + [ + 11, + "cat", + 1, + [ + [ + 3, + "- 文本渲染 -", + 14, + 1, + 1, + 2, + [ + null + ], + -113 + ], + [ + 12, + 16, + 20, + -114 + ] + ], + [ + 4, + 4287401100 + ], + [ + 5, + 73.1, + 40 + ], + [ + 0, + -293, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 7, + "bg", + 5, + [ + [ + 2, + 0, + -115, + [ + 11 + ], + 12 + ], + [ + 0, + 45, + 100, + 100, + -116 + ] + ], + [ + 4, + 4281348144 + ], + [ + 5, + 240, + 50 + ] + ], + [ + 9, + "check", + false, + 5, + [ + [ + -117, + [ + 0, + 45, + 100, + 100, + -118 + ] + ], + 1, + 4 + ], + [ + 4, + 4283058762 + ], + [ + 5, + 240, + 50 + ] + ], + [ + 6, + "text", + 5, + [ + [ + 3, + "新的 Char 缓存模式", + 16, + 1, + 1, + 2, + [ + null + ], + -119 + ], + [ + 1, + 18, + -120 + ] + ], + [ + 5, + 139.575, + 40 + ] + ], + [ + 7, + "bg", + 6, + [ + [ + 2, + 0, + -121, + [ + 16 + ], + 17 + ], + [ + 0, + 45, + 100, + 100, + -122 + ] + ], + [ + 4, + 4281348144 + ], + [ + 5, + 240, + 50 + ] + ], + [ + 9, + "check", + false, + 6, + [ + [ + -123, + [ + 0, + 45, + 100, + 100, + -124 + ] + ], + 1, + 4 + ], + [ + 4, + 4283058762 + ], + [ + 5, + 240, + 50 + ] + ], + [ + 6, + "text", + 6, + [ + [ + 3, + "高 DPI 支持", + 16, + 1, + 1, + 2, + [ + null + ], + -125 + ], + [ + 1, + 18, + -126 + ] + ], + [ + 5, + 83.56, + 40 + ] + ], + [ + 11, + "cat", + 1, + [ + [ + 3, + "- Spine 增强 -", + 14, + 1, + 1, + 2, + [ + null + ], + -127 + ], + [ + 12, + 16, + 20, + -128 + ] + ], + [ + 4, + 4287401100 + ], + [ + 5, + 84.795, + 40 + ], + [ + 0, + -434, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 7, + "bg", + 7, + [ + [ + 2, + 0, + -129, + [ + 19 + ], + 20 + ], + [ + 0, + 45, + 100, + 100, + -130 + ] + ], + [ + 4, + 4281348144 + ], + [ + 5, + 240, + 50 + ] + ], + [ + 9, + "check", + false, + 7, + [ + [ + -131, + [ + 0, + 45, + 100, + 100, + -132 + ] + ], + 1, + 4 + ], + [ + 4, + 4283058762 + ], + [ + 5, + 240, + 50 + ] + ], + [ + 6, + "text", + 7, + [ + [ + 3, + "动态合图", + 16, + 1, + 1, + 2, + [ + null + ], + -133 + ], + [ + 1, + 18, + -134 + ] + ], + [ + 5, + 64, + 40 + ] + ], + [ + 7, + "bg", + 8, + [ + [ + 2, + 0, + -135, + [ + 24 + ], + 25 + ], + [ + 0, + 45, + 100, + 100, + -136 + ] + ], + [ + 4, + 4281348144 + ], + [ + 5, + 240, + 50 + ] + ], + [ + 9, + "check", + false, + 8, + [ + [ + -137, + [ + 0, + 45, + 100, + 100, + -138 + ] + ], + 1, + 4 + ], + [ + 4, + 4283058762 + ], + [ + 5, + 240, + 50 + ] + ], + [ + 6, + "text", + 8, + [ + [ + 3, + "SpriteFrame 换装", + 16, + 1, + 1, + 2, + [ + null + ], + -139 + ], + [ + 1, + 18, + -140 + ] + ], + [ + 5, + 124.48, + 40 + ] + ], + [ + 40, + "New Node", + [ + 9 + ], + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 6, + "Main Camera", + 9, + [ + [ + 41, + 7, + -1, + -141 + ] + ], + [ + 5, + 960, + 640 + ] + ], + [ + 14, + "Version: v1.0.0\n", + 14, + 16, + 1, + 1, + 3, + 2, + [ + null + ], + 15 + ], + [ + 8, + 0, + 17, + [ + 2 + ] + ], + [ + 8, + 0, + 21, + [ + 5 + ] + ], + [ + 13, + "line", + 150, + 1, + [ + [ + 2, + 0, + -142, + [ + 6 + ], + 7 + ] + ], + [ + 4, + 4278190080 + ], + [ + 5, + 240, + 1 + ], + [ + 0, + -222.5, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 8, + 0, + 24, + [ + 10 + ] + ], + [ + 8, + 0, + 28, + [ + 13 + ] + ], + [ + 13, + "line", + 150, + 1, + [ + [ + 2, + 0, + -143, + [ + 14 + ], + 15 + ] + ], + [ + 4, + 4278190080 + ], + [ + 5, + 240, + 1 + ], + [ + 0, + -363.5, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 8, + 0, + 31, + [ + 18 + ] + ], + [ + 8, + 0, + 35, + [ + 21 + ] + ], + [ + 13, + "line", + 150, + 1, + [ + [ + 2, + 0, + -144, + [ + 22 + ], + 23 + ] + ], + [ + 4, + 4278190080 + ], + [ + 5, + 240, + 1 + ], + [ + 0, + -504.5, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 8, + 0, + 38, + [ + 26 + ] + ], + [ + 26, + "bar", + 11, + [ + -145 + ], + [ + 5, + 8, + 30 + ], + [ + 0, + 1, + 0 + ] + ], + [ + 37, + 1, + 0, + 53, + [ + 27 + ] + ], + [ + 42, + 1, + 11, + 54 + ], + [ + 43, + false, + 0.75, + 0.23, + null, + 10, + 1, + 55 + ], + [ + 19, + "home", + 12, + [ + 44, + true, + -146, + 32 + ] + ] + ], + 0, + [ + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + -1, + 14, + 0, + -2, + 15, + 0, + -3, + 2, + 0, + -4, + 19, + 0, + -5, + 3, + 0, + -6, + 45, + 0, + -7, + 4, + 0, + -8, + 26, + 0, + -9, + 5, + 0, + -10, + 48, + 0, + -11, + 6, + 0, + -12, + 33, + 0, + -13, + 7, + 0, + -14, + 51, + 0, + -15, + 8, + 0, + 2, + 43, + 0, + 3, + 2, + 0, + 0, + 2, + 0, + 0, + 2, + 0, + -1, + 16, + 0, + -2, + 17, + 0, + -3, + 18, + 0, + 2, + 44, + 0, + 3, + 3, + 0, + 0, + 3, + 0, + 0, + 3, + 0, + -1, + 20, + 0, + -2, + 21, + 0, + -3, + 22, + 0, + 2, + 46, + 0, + 3, + 4, + 0, + 0, + 4, + 0, + 0, + 4, + 0, + -1, + 23, + 0, + -2, + 24, + 0, + -3, + 25, + 0, + 2, + 47, + 0, + 3, + 5, + 0, + 0, + 5, + 0, + 0, + 5, + 0, + -1, + 27, + 0, + -2, + 28, + 0, + -3, + 29, + 0, + 2, + 49, + 0, + 3, + 6, + 0, + 0, + 6, + 0, + 0, + 6, + 0, + -1, + 30, + 0, + -2, + 31, + 0, + -3, + 32, + 0, + 2, + 50, + 0, + 3, + 7, + 0, + 0, + 7, + 0, + 0, + 7, + 0, + -1, + 34, + 0, + -2, + 35, + 0, + -3, + 36, + 0, + 2, + 52, + 0, + 3, + 8, + 0, + 0, + 8, + 0, + 0, + 8, + 0, + -1, + 37, + 0, + -2, + 38, + 0, + -3, + 39, + 0, + 0, + 9, + 0, + 0, + 9, + 0, + 7, + 42, + 0, + 0, + 9, + 0, + -1, + 41, + 0, + -2, + 10, + 0, + -3, + 12, + 0, + -1, + 56, + 0, + 0, + 10, + 0, + 0, + 10, + 0, + 8, + 12, + 0, + 0, + 10, + 0, + -1, + 13, + 0, + -2, + 11, + 0, + -1, + 55, + 0, + 0, + 11, + 0, + 0, + 11, + 0, + -1, + 53, + 0, + 0, + 12, + 0, + -1, + 57, + 0, + 0, + 13, + 0, + 0, + 14, + 0, + 0, + 14, + 0, + -1, + 42, + 0, + 0, + 15, + 0, + 0, + 16, + 0, + 0, + 16, + 0, + -1, + 43, + 0, + 0, + 17, + 0, + 0, + 18, + 0, + 0, + 18, + 0, + 0, + 19, + 0, + 0, + 19, + 0, + 0, + 20, + 0, + 0, + 20, + 0, + -1, + 44, + 0, + 0, + 21, + 0, + 0, + 22, + 0, + 0, + 22, + 0, + 0, + 23, + 0, + 0, + 23, + 0, + -1, + 46, + 0, + 0, + 24, + 0, + 0, + 25, + 0, + 0, + 25, + 0, + 0, + 26, + 0, + 0, + 26, + 0, + 0, + 27, + 0, + 0, + 27, + 0, + -1, + 47, + 0, + 0, + 28, + 0, + 0, + 29, + 0, + 0, + 29, + 0, + 0, + 30, + 0, + 0, + 30, + 0, + -1, + 49, + 0, + 0, + 31, + 0, + 0, + 32, + 0, + 0, + 32, + 0, + 0, + 33, + 0, + 0, + 33, + 0, + 0, + 34, + 0, + 0, + 34, + 0, + -1, + 50, + 0, + 0, + 35, + 0, + 0, + 36, + 0, + 0, + 36, + 0, + 0, + 37, + 0, + 0, + 37, + 0, + -1, + 52, + 0, + 0, + 38, + 0, + 0, + 39, + 0, + 0, + 39, + 0, + 0, + 41, + 0, + 0, + 45, + 0, + 0, + 48, + 0, + 0, + 51, + 0, + -1, + 54, + 0, + 5, + 57, + 0, + 9, + 40, + 1, + 6, + 13, + 9, + 6, + 40, + 55, + 10, + 56, + 146 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 43, + 44, + 46, + 47, + 49, + 50, + 52, + 54 + ], + [ + -1, + 1, + -1, + -1, + 1, + -1, + -1, + 1, + -1, + 1, + -1, + -1, + 1, + -1, + -1, + 1, + -1, + 1, + -1, + -1, + 1, + -1, + -1, + 1, + -1, + 1, + -1, + -1, + -1, + 1, + -1, + 1, + 11, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + [ + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 5, + 0, + 1, + 6, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 7 + ] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 7 + ], + 0, + [], + [], + [] + ], + [ + [ + [ + 47, + "home" + ], + [ + 20, + "home", + [ + -3 + ], + [ + [ + 1, + 45, + -2 + ] + ], + [ + 45, + -1 + ], + [ + 5, + 960, + 600 + ], + [ + 480, + 300, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 21, + "tips", + 1, + [ + [ + 39, + "源码:https://github.com/smallmain/cocos-service-pack/tree/master/demo", + 16, + 20, + 1, + 1, + 2, + [ + null + ], + -4 + ], + [ + 31, + 17, + 95.11500000000001, + 549.6320000000001, + -5 + ] + ], + [ + 46, + "60yhtKNmhJBa7a+vJD0YMi", + 1 + ], + [ + 4, + 4286611584 + ], + [ + 5, + 522.005, + 20 + ], + [ + 0, + -259.63200000000006, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ] + ], + 0, + [ + 0, + 5, + 1, + 0, + 0, + 1, + 0, + -1, + 2, + 0, + 0, + 2, + 0, + 0, + 2, + 0, + 12, + 1, + 5 + ], + [], + [], + [] + ] + ] +] \ No newline at end of file diff --git a/demo/web-mobile/assets/main/index.ced16.js b/demo/web-mobile/assets/main/index.ced16.js new file mode 100644 index 00000000..f32603dc --- /dev/null +++ b/demo/web-mobile/assets/main/index.ced16.js @@ -0,0 +1,233 @@ +window.__require = function e(t, n, r) { + function s(o, u) { + if (!n[o]) { + if (!t[o]) { + var b = o.split("/"); + b = b[b.length - 1]; + if (!t[b]) { + var a = "function" == typeof __require && __require; + if (!u && a) return a(b, !0); + if (i) return i(b, !0); + throw new Error("Cannot find module '" + o + "'"); + } + o = b; + } + var f = n[o] = { + exports: {} + }; + t[o][0].call(f.exports, function(e) { + var n = t[o][1][e]; + return s(n || e); + }, f, f.exports, e, t, n, r); + } + return n[o].exports; + } + var i = "function" == typeof __require && __require; + for (var o = 0; o < r.length; o++) s(r[o]); + return s; +}({ + "left-area": [ function(require, module, exports) { + "use strict"; + cc._RF.push(module, "853f5uyG5pFHpEaXeXta1ML", "left-area"); + "use strict"; + var __extends = this && this.__extends || function() { + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || { + __proto__: [] + } instanceof Array && function(d, b) { + d.__proto__ = b; + } || function(d, b) { + for (var p in b) Object.prototype.hasOwnProperty.call(b, p) && (d[p] = b[p]); + }; + return extendStatics(d, b); + }; + return function(d, b) { + extendStatics(d, b); + function __() { + this.constructor = d; + } + d.prototype = null === b ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + }(); + var __decorate = this && this.__decorate || function(decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : null === desc ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if ("object" === typeof Reflect && "function" === typeof Reflect.decorate) r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) (d = decorators[i]) && (r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r); + return c > 3 && r && Object.defineProperty(target, key, r), r; + }; + var __values = this && this.__values || function(o) { + var s = "function" === typeof Symbol && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && "number" === typeof o.length) return { + next: function() { + o && i >= o.length && (o = void 0); + return { + value: o && o[i++], + done: !o + }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); + }; + var __read = this && this.__read || function(o, n) { + var m = "function" === typeof Symbol && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((void 0 === n || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } catch (error) { + e = { + error: error + }; + } finally { + try { + r && !r.done && (m = i["return"]) && m.call(i); + } finally { + if (e) throw e.error; + } + } + return ar; + }; + Object.defineProperty(exports, "__esModule", { + value: true + }); + var _a = cc._decorator, ccclass = _a.ccclass, property = _a.property; + var LeftArea = function(_super) { + __extends(LeftArea, _super); + function LeftArea() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.home = null; + _this.multiMaterial = null; + _this.multiBatcher = null; + _this.charMode = null; + _this.highDPI = null; + _this.spineBatch = null; + _this.spineSkin = null; + _this.mainArea = null; + _this.tick = 0; + return _this; + } + LeftArea.prototype.start = function() { + this.map = new Map([ [ this.home, { + bundle: "home", + path: "home" + } ], [ this.multiMaterial, { + bundle: "multi-render", + path: "multi-material/multi-material" + } ], [ this.multiBatcher, { + bundle: "multi-render", + path: "multi-batcher/multi-batcher" + } ], [ this.charMode, { + bundle: "text-render", + path: "char-mode/char-mode" + } ], [ this.highDPI, { + bundle: "text-render", + path: "high-dpi/high-dpi" + } ], [ this.spineBatch, { + bundle: "spine", + path: "batch/spine-batch" + } ], [ this.spineSkin, { + bundle: "spine", + path: "skin/spine-skin" + } ] ]); + this.initBtns(); + }; + LeftArea.prototype.initBtns = function() { + var e_1, _a; + var _this = this; + var _loop_1 = function(node, route) { + node.on("toggle", function(toggle) { + if (toggle.isChecked) { + var cur_1 = ++_this.tick; + _this.mainArea.destroyAllChildren(); + route && cc.assetManager.loadBundle(route.bundle, function(err, bundle) { + err || bundle.load(route.path, cc.Prefab, function(err, prefab) { + err || cur_1 !== _this.tick || _this.mainArea.addChild(cc.instantiate(prefab)); + }); + }); + } + }); + }; + try { + for (var _b = __values(this.map), _c = _b.next(); !_c.done; _c = _b.next()) { + var _d = __read(_c.value, 2), node = _d[0], route = _d[1]; + _loop_1(node, route); + } + } catch (e_1_1) { + e_1 = { + error: e_1_1 + }; + } finally { + try { + _c && !_c.done && (_a = _b.return) && _a.call(_b); + } finally { + if (e_1) throw e_1.error; + } + } + }; + __decorate([ property(cc.Node) ], LeftArea.prototype, "home", void 0); + __decorate([ property(cc.Node) ], LeftArea.prototype, "multiMaterial", void 0); + __decorate([ property(cc.Node) ], LeftArea.prototype, "multiBatcher", void 0); + __decorate([ property(cc.Node) ], LeftArea.prototype, "charMode", void 0); + __decorate([ property(cc.Node) ], LeftArea.prototype, "highDPI", void 0); + __decorate([ property(cc.Node) ], LeftArea.prototype, "spineBatch", void 0); + __decorate([ property(cc.Node) ], LeftArea.prototype, "spineSkin", void 0); + __decorate([ property(cc.Node) ], LeftArea.prototype, "mainArea", void 0); + LeftArea = __decorate([ ccclass ], LeftArea); + return LeftArea; + }(cc.Component); + exports.default = LeftArea; + cc._RF.pop(); + }, {} ], + main: [ function(require, module, exports) { + "use strict"; + cc._RF.push(module, "2454fZB1jNNTbYkc7ryXmr1", "main"); + "use strict"; + var __extends = this && this.__extends || function() { + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || { + __proto__: [] + } instanceof Array && function(d, b) { + d.__proto__ = b; + } || function(d, b) { + for (var p in b) Object.prototype.hasOwnProperty.call(b, p) && (d[p] = b[p]); + }; + return extendStatics(d, b); + }; + return function(d, b) { + extendStatics(d, b); + function __() { + this.constructor = d; + } + d.prototype = null === b ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + }(); + var __decorate = this && this.__decorate || function(decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : null === desc ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if ("object" === typeof Reflect && "function" === typeof Reflect.decorate) r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) (d = decorators[i]) && (r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r); + return c > 3 && r && Object.defineProperty(target, key, r), r; + }; + Object.defineProperty(exports, "__esModule", { + value: true + }); + var _a = cc._decorator, ccclass = _a.ccclass, property = _a.property; + var Main = function(_super) { + __extends(Main, _super); + function Main() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.version = null; + return _this; + } + Main.prototype.start = function() { + this.version.string = "Version: v" + cc.sp.version + "\n"; + }; + __decorate([ property(cc.Label) ], Main.prototype, "version", void 0); + Main = __decorate([ ccclass ], Main); + return Main; + }(cc.Component); + exports.default = Main; + cc.sp.labelRetinaScale = 2; + cc.dynamicAtlasManager.maxFrameSize = 2048; + cc._RF.pop(); + }, {} ] +}, {}, [ "left-area", "main" ]); +//# sourceMappingURL=index.js.map diff --git a/demo/web-mobile/assets/main/index.js.map b/demo/web-mobile/assets/main/index.js.map new file mode 100644 index 00000000..e051f156 --- /dev/null +++ b/demo/web-mobile/assets/main/index.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["assets/left-area.ts","assets/main.ts"],"names":["_a","cc","_decorator","ccclass","property","LeftArea","_super","__extends","_this","apply","this","arguments","home","multiMaterial","multiBatcher","charMode","highDPI","spineBatch","spineSkin","mainArea","tick","prototype","start","map","Map","bundle","path","initBtns","_loop_1","node","route","on","toggle","isChecked","cur_1","destroyAllChildren","assetManager","loadBundle","err","load","Prefab","prefab","addChild","instantiate","_b","__values","_c","next","done","_d","__read","value","__decorate","Node","Component","exports","default","Main","version","string","sp","Label","labelRetinaScale","dynamicAtlasManager","maxFrameSize"],"mappings":"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","sourcesContent":["const { ccclass, property } = cc._decorator;\n\n@ccclass\nexport default class LeftArea extends cc.Component {\n\n @property(cc.Node)\n home: cc.Node = null;\n\n @property(cc.Node)\n multiMaterial: cc.Node = null;\n\n @property(cc.Node)\n multiBatcher: cc.Node = null;\n\n @property(cc.Node)\n charMode: cc.Node = null;\n\n @property(cc.Node)\n highDPI: cc.Node = null;\n\n @property(cc.Node)\n spineBatch: cc.Node = null;\n\n @property(cc.Node)\n spineSkin: cc.Node = null;\n\n @property(cc.Node)\n mainArea: cc.Node = null;\n\n tick = 0;\n\n map: Map\n\n\n start() {\n this.map = new Map([\n\n [this.home, {\n bundle: \"home\",\n path: \"home\",\n }],\n\n [this.multiMaterial, {\n bundle: \"multi-render\",\n path: \"multi-material/multi-material\",\n }],\n\n [this.multiBatcher, {\n bundle: \"multi-render\",\n path: \"multi-batcher/multi-batcher\",\n }],\n\n [this.charMode, {\n bundle: \"text-render\",\n path: \"char-mode/char-mode\",\n }],\n\n [this.highDPI, {\n bundle: \"text-render\",\n path: \"high-dpi/high-dpi\",\n }],\n\n [this.spineBatch, {\n bundle: \"spine\",\n path: \"batch/spine-batch\",\n }],\n\n [this.spineSkin, {\n bundle: \"spine\",\n path: \"skin/spine-skin\",\n }],\n\n ]);\n\n this.initBtns();\n }\n\n\n initBtns() {\n for (const [node, route] of this.map) {\n node.on('toggle', (toggle: cc.Toggle) => {\n if (toggle.isChecked) {\n const cur = ++this.tick;\n\n this.mainArea.destroyAllChildren();\n\n if (route) {\n cc.assetManager.loadBundle(route.bundle, (err, bundle) => {\n if (!err) {\n bundle.load(route.path, cc.Prefab, (err, prefab: cc.Prefab) => {\n if (!err && cur === this.tick) {\n this.mainArea.addChild(cc.instantiate(prefab));\n }\n });\n }\n });\n }\n }\n });\n }\n }\n\n}\n","const { ccclass, property } = cc._decorator;\n\n@ccclass\nexport default class Main extends cc.Component {\n\n @property(cc.Label)\n version: cc.Label = null;\n\n\n protected start(): void {\n this.version.string = `Version: v${cc.sp.version}\\n`;\n }\n\n}\n\n\ncc.sp.labelRetinaScale = 2;\ncc.dynamicAtlasManager.maxFrameSize = 2048;\n"],"file":"index.js"} \ No newline at end of file diff --git a/demo/web-mobile/assets/main/native/61/617323dd-11f4-4dd3-8eec-0caf6b3b45b9.6d707.png b/demo/web-mobile/assets/main/native/61/617323dd-11f4-4dd3-8eec-0caf6b3b45b9.6d707.png new file mode 100644 index 0000000000000000000000000000000000000000..0616a37a61f3b92711a07c4a91a236768865655b GIT binary patch literal 237 zcmeAS@N?(olHy`uVBq!ia0vp^{6H+n!3-piG;MJMQU(D&A+8oyR%TXKjg5`wR#u^* zq3IbJDJdzFCQa(;>FMk1Yi@3yIB{ZUXJ>nRdv|wtTU*=tN{Jajz3e4He!*2P-wK(x zY`MJftuat2)zif>q~g}yiQYmD1{}@{Lw`3u`kSx);EHQsLYcm>m`X{((zU19KSoYl zwXXDhq~5Zqkh4CfyysVaov`$w`!#os-UN5S!pF&+t_j82XLs(mQHgx?puXpSlKc(v iZ=JP|<#vd_`^nJd%vao-ayS}jA%mx@pUXO@geCyQ^Ig6G literal 0 HcmV?d00001 diff --git a/demo/web-mobile/assets/main/native/d6/d6d3ca85-4681-47c1-b5dd-d036a9d39ea2.d55c2.png b/demo/web-mobile/assets/main/native/d6/d6d3ca85-4681-47c1-b5dd-d036a9d39ea2.d55c2.png new file mode 100644 index 0000000000000000000000000000000000000000..843a9a6201fa2796a2764897432a54a2d7becf64 GIT binary patch literal 163 zcmeAS@N?(olHy`uVBq!ia0vp^{6H+n!3-piG;MJMQW60^A+GmdK II;Vst04sAs3;+NC literal 0 HcmV?d00001 diff --git a/demo/web-mobile/assets/multi-render/config.f7eed.json b/demo/web-mobile/assets/multi-render/config.f7eed.json new file mode 100644 index 00000000..2975b952 --- /dev/null +++ b/demo/web-mobile/assets/multi-render/config.f7eed.json @@ -0,0 +1,241 @@ +{ + "paths": { + "77hE9EwNpMlKl/+sGrhEVR": [ + "multi-batcher/images/1", + "cc.Texture2D" + ], + "c4+eoUuahAOa4lmC/4Hkdi": [ + "multi-batcher/images/1", + "cc.SpriteFrame", + 1 + ], + "b6FhIxTWVHXKa7qBmehR6I": [ + "multi-batcher/images/etc1_rgb_a", + "cc.Texture2D" + ], + "eahTDGUrZBV4Y+i+JslTuW": [ + "multi-batcher/images/etc1_rgb_a", + "cc.SpriteFrame", + 1 + ], + "ebcqWiiDdPRaJKJIbu9ft4": [ + "multi-batcher/images/png", + "cc.Texture2D" + ], + "0a5R1NT2lDxqcI2pwtgfb1": [ + "multi-batcher/images/png", + "cc.SpriteFrame", + 1 + ], + "22JHeF7zBLZqnS68r2p/bo": [ + "multi-batcher/images/pvrtc2_rgb_a", + "cc.Texture2D" + ], + "41Zz922rlJZZmZnFZqPxVK": [ + "multi-batcher/images/pvrtc2_rgb_a", + "cc.SpriteFrame", + 1 + ], + "43jA/TdMpFA7K8IIjNbb9M": [ + "multi-batcher/images/sheep_down_0", + "cc.Texture2D" + ], + "8fHzmU6I5EBqjpHEb0Xl3i": [ + "multi-batcher/images/sheep_down_0", + "cc.SpriteFrame", + 1 + ], + "10Drosz6JPsKWsqV+bRh/A": [ + "multi-batcher/images/sheep_jump_2", + "cc.Texture2D" + ], + "2dPOEW20pCTLs79c0WyZVp": [ + "multi-batcher/images/sheep_jump_2", + "cc.SpriteFrame", + 1 + ], + "44mZ0YUdFAF56mmNytjs31": [ + "multi-batcher/images/sheep_jump_3", + "cc.Texture2D" + ], + "b48cuQCqRMLaIzf9I1fTbW": [ + "multi-batcher/images/sheep_jump_3", + "cc.SpriteFrame", + 1 + ], + "7aeIQwZiFL1YbOCVeiFt1p": [ + "multi-batcher/images/sheep_run_1", + "cc.Texture2D" + ], + "55URLSNf5K3IyZBezfiMKa": [ + "multi-batcher/images/sheep_run_1", + "cc.SpriteFrame", + 1 + ], + "14W7pBGWJJ7q7JCPsVTovy": [ + "multi-batcher/multi-batcher", + "cc.Prefab" + ], + "c58wUeG09DhJOcuDi8uPW/": [ + "multi-material/multi-material", + "cc.Prefab" + ], + "0eAM9yHrBFe4PSAXHMHNl+": [ + "multi-material/test-material", + "cc.Material" + ] + }, + "uuids": [ + "77hE9EwNpMlKl/+sGrhEVR", + "c4+eoUuahAOa4lmC/4Hkdi", + "b6FhIxTWVHXKa7qBmehR6I", + "eahTDGUrZBV4Y+i+JslTuW", + "ebcqWiiDdPRaJKJIbu9ft4", + "0a5R1NT2lDxqcI2pwtgfb1", + "22JHeF7zBLZqnS68r2p/bo", + "41Zz922rlJZZmZnFZqPxVK", + "43jA/TdMpFA7K8IIjNbb9M", + "8fHzmU6I5EBqjpHEb0Xl3i", + "10Drosz6JPsKWsqV+bRh/A", + "2dPOEW20pCTLs79c0WyZVp", + "44mZ0YUdFAF56mmNytjs31", + "b48cuQCqRMLaIzf9I1fTbW", + "7aeIQwZiFL1YbOCVeiFt1p", + "55URLSNf5K3IyZBezfiMKa", + "14W7pBGWJJ7q7JCPsVTovy", + "c58wUeG09DhJOcuDi8uPW/", + "0eAM9yHrBFe4PSAXHMHNl+", + "ecpdLyjvZBwrvm+cedCcQy", + "f0BIwQ8D5Ml7nTNQbh1YlS", + "e97GVMl6JHh5Ml5qEDdSGa", + "29FYIk+N1GYaeWH/q1NxQO", + "5cO7kybDxGj4ipyMYdRYZB", + "5f5dyqtRNNxaFmVzYns6FZ", + "a2MjXRFdtLlYQ5ouAFv/+R", + "8c20Sso/ZEn7NUfNSM+EBh", + "8029xEf4FHy49dWo6NK8c7", + "a7ZscqX+JCIZRS157bMyhq", + "80AR/OlBFOoajT99htLYeJ", + "6eBWFz0oVHPLIGQKf/9Thu", + "bc2ZOJo5NCbrI0FXxitEvE", + "2cDGL4OAVN0ZbEl3w2urT8", + "5dz/wYuRNGDqDZXXT0zaEr", + "c1Hf3Sl8ZAnJwP/fpoHxap", + "1cijzBpFJCdoSNK98w5oUq", + "45vlnzVlVDaZ6fRVyB0t3Z", + "d9xFMK7wVFwbAS60aG9McP", + "e8Ueib+qJEhL6mXAHdnwbi", + "b4P/PCArtIdIH38t6mlw8Y", + "71VhFCTINJM6/Ky3oX9nBT", + "92aqwImq1Ik7GrBSFnKTF2", + "3e30KyALhNkZttyuW0A6EU", + "62MQQadaVK8qQN8n6UmJAa" + ], + "scenes": {}, + "redirect": [ + "ecpdLyjvZBwrvm+cedCcQy", + 0, + "5cO7kybDxGj4ipyMYdRYZB", + 1, + "5f5dyqtRNNxaFmVzYns6FZ", + 1, + "a2MjXRFdtLlYQ5ouAFv/+R", + 1 + ], + "deps": [ + "internal", + "main" + ], + "packs": { + "0e0c9da58": [ + "0a5R1NT2lDxqcI2pwtgfb1", + "0eAM9yHrBFe4PSAXHMHNl+", + "10Drosz6JPsKWsqV+bRh/A", + "14W7pBGWJJ7q7JCPsVTovy", + "1cijzBpFJCdoSNK98w5oUq", + "22JHeF7zBLZqnS68r2p/bo", + "29FYIk+N1GYaeWH/q1NxQO", + "2cDGL4OAVN0ZbEl3w2urT8", + "2dPOEW20pCTLs79c0WyZVp", + "3e30KyALhNkZttyuW0A6EU", + "41Zz922rlJZZmZnFZqPxVK", + "43jA/TdMpFA7K8IIjNbb9M", + "44mZ0YUdFAF56mmNytjs31", + "45vlnzVlVDaZ6fRVyB0t3Z", + "55URLSNf5K3IyZBezfiMKa", + "5dz/wYuRNGDqDZXXT0zaEr", + "62MQQadaVK8qQN8n6UmJAa", + "6eBWFz0oVHPLIGQKf/9Thu", + "71VhFCTINJM6/Ky3oX9nBT", + "77hE9EwNpMlKl/+sGrhEVR", + "7aeIQwZiFL1YbOCVeiFt1p", + "80AR/OlBFOoajT99htLYeJ", + "8029xEf4FHy49dWo6NK8c7", + "8c20Sso/ZEn7NUfNSM+EBh", + "8fHzmU6I5EBqjpHEb0Xl3i", + "92aqwImq1Ik7GrBSFnKTF2", + "a7ZscqX+JCIZRS157bMyhq", + "b4P/PCArtIdIH38t6mlw8Y", + "b48cuQCqRMLaIzf9I1fTbW", + "b6FhIxTWVHXKa7qBmehR6I", + "bc2ZOJo5NCbrI0FXxitEvE", + "c1Hf3Sl8ZAnJwP/fpoHxap", + "c4+eoUuahAOa4lmC/4Hkdi", + "c58wUeG09DhJOcuDi8uPW/", + "d9xFMK7wVFwbAS60aG9McP", + "e8Ueib+qJEhL6mXAHdnwbi", + "e97GVMl6JHh5Ml5qEDdSGa", + "eahTDGUrZBV4Y+i+JslTuW", + "ebcqWiiDdPRaJKJIbu9ft4", + "f0BIwQ8D5Ml7nTNQbh1YlS" + ] + }, + "name": "multi-render", + "importBase": "import", + "nativeBase": "native", + "debug": true, + "isZip": false, + "encrypted": false, + "versions": { + "import": [ + "0e0c9da58", + "5c474" + ], + "native": [ + "10Drosz6JPsKWsqV+bRh/A", + "eae97", + "1cijzBpFJCdoSNK98w5oUq", + "91637", + "22JHeF7zBLZqnS68r2p/bo", + "2ecc6", + "43jA/TdMpFA7K8IIjNbb9M", + "28847", + "44mZ0YUdFAF56mmNytjs31", + "99af5", + "45vlnzVlVDaZ6fRVyB0t3Z", + "ca872", + "62MQQadaVK8qQN8n6UmJAa", + "40d17", + "6eBWFz0oVHPLIGQKf/9Thu", + "6d3cf", + "71VhFCTINJM6/Ky3oX9nBT", + "c06a9", + "77hE9EwNpMlKl/+sGrhEVR", + "92cfc", + "7aeIQwZiFL1YbOCVeiFt1p", + "9e7e3", + "b4P/PCArtIdIH38t6mlw8Y", + "83fcc", + "b6FhIxTWVHXKa7qBmehR6I", + "6159f", + "c1Hf3Sl8ZAnJwP/fpoHxap", + "d86d7", + "d9xFMK7wVFwbAS60aG9McP", + "abf6b", + "e8Ueib+qJEhL6mXAHdnwbi", + "90cf4", + "ebcqWiiDdPRaJKJIbu9ft4", + "46cee" + ] + } +} \ No newline at end of file diff --git a/demo/web-mobile/assets/multi-render/import/0e/0e0c9da58.5c474.json b/demo/web-mobile/assets/multi-render/import/0e/0e0c9da58.5c474.json new file mode 100644 index 00000000..8a803565 --- /dev/null +++ b/demo/web-mobile/assets/multi-render/import/0e/0e0c9da58.5c474.json @@ -0,0 +1,14514 @@ +[ + 1, + [ + "ecpdLyjvZBwrvm+cedCcQy", + "0eAM9yHrBFe4PSAXHMHNl+", + "f0BIwQ8D5Ml7nTNQbh1YlS", + "6eBWFz0oVHPLIGQKf/9Thu", + "a7ZscqX+JCIZRS157bMyhq", + "c1Hf3Sl8ZAnJwP/fpoHxap", + "1cijzBpFJCdoSNK98w5oUq", + "45vlnzVlVDaZ6fRVyB0t3Z", + "d9xFMK7wVFwbAS60aG9McP", + "e97GVMl6JHh5Ml5qEDdSGa", + "29FYIk+N1GYaeWH/q1NxQO", + "5f5dyqtRNNxaFmVzYns6FZ", + "a2MjXRFdtLlYQ5ouAFv/+R", + "5cO7kybDxGj4ipyMYdRYZB", + "8c20Sso/ZEn7NUfNSM+EBh", + "bc2ZOJo5NCbrI0FXxitEvE", + "ebcqWiiDdPRaJKJIbu9ft4", + "5dz/wYuRNGDqDZXXT0zaEr", + "55URLSNf5K3IyZBezfiMKa", + "b48cuQCqRMLaIzf9I1fTbW", + "2dPOEW20pCTLs79c0WyZVp", + "0a5R1NT2lDxqcI2pwtgfb1", + "41Zz922rlJZZmZnFZqPxVK", + "8fHzmU6I5EBqjpHEb0Xl3i", + "eahTDGUrZBV4Y+i+JslTuW", + "c4+eoUuahAOa4lmC/4Hkdi", + "71VhFCTINJM6/Ky3oX9nBT", + "62MQQadaVK8qQN8n6UmJAa", + "3e30KyALhNkZttyuW0A6EU", + "10Drosz6JPsKWsqV+bRh/A", + "22JHeF7zBLZqnS68r2p/bo", + "7aeIQwZiFL1YbOCVeiFt1p", + "92aqwImq1Ik7GrBSFnKTF2", + "43jA/TdMpFA7K8IIjNbb9M", + "44mZ0YUdFAF56mmNytjs31", + "77hE9EwNpMlKl/+sGrhEVR", + "8029xEf4FHy49dWo6NK8c7", + "80AR/OlBFOoajT99htLYeJ", + "2cDGL4OAVN0ZbEl3w2urT8", + "b4P/PCArtIdIH38t6mlw8Y", + "b6FhIxTWVHXKa7qBmehR6I", + "e8Ueib+qJEhL6mXAHdnwbi" + ], + [ + "node", + "_spriteFrame", + "_textureSetter", + "_parent", + "texture", + "texture2", + "_effectAsset", + "root", + "data", + "_scrollView", + "_N$normalSprite", + "_N$pressedSprite", + "_N$hoverSprite", + "_N$disabledSprite", + "_N$skeletonData", + "texture3", + "texture4", + "texture5", + "textures", + "cancelBtn", + "batchBtn", + "spriteFrame", + "_N$file", + "_texture" + ], + [ + "cc.Texture2D", + "cc.SpriteFrame", + [ + "cc.Sprite", + [ + "_sizeMode", + "_isTrimmedMode", + "_type", + "_N$autoSwitchMaterial", + "_N$allowDynamicAtlas", + "_fillRange", + "_fillType", + "_fillStart", + "node", + "_materials", + "_spriteFrame", + "_fillCenter" + ], + -5, + 1, + 3, + 6, + 5 + ], + [ + "cc.Node", + [ + "_name", + "_objFlags", + "_components", + "_prefab", + "_contentSize", + "_children", + "_trs", + "_parent", + "_anchorPoint", + "_color" + ], + 1, + 9, + 4, + 5, + 2, + 7, + 1, + 5, + 5 + ], + [ + "cc.Widget", + [ + "_alignFlags", + "_originalWidth", + "_left", + "_originalHeight", + "alignMode", + "_right", + "_top", + "node" + ], + -4, + 1 + ], + [ + "cc.Layout", + [ + "_resize", + "_N$layoutType", + "_N$paddingTop", + "_N$spacingY", + "_N$paddingBottom", + "_N$startAxis", + "_N$affectedByScale", + "node", + "_layoutSize" + ], + -4, + 1, + 5 + ], + [ + "cc.Label", + [ + "_string", + "_fontSize", + "_N$horizontalAlign", + "_N$verticalAlign", + "_N$cacheMode", + "_materials", + "_lineHeight", + "_N$autoSwitchMaterial", + "_N$allowDynamicAtlas", + "node" + ], + -6, + 1 + ], + [ + "cc.Node", + [ + "_name", + "_parent", + "_children", + "_components", + "_prefab", + "_contentSize", + "_color", + "_anchorPoint", + "_trs" + ], + 2, + 1, + 2, + 12, + 4, + 5, + 5, + 5, + 7 + ], + [ + "cc.PrefabInfo", + [ + "fileId", + "root" + ], + 2, + 1 + ], + [ + "cc.Label", + [ + "_string", + "_fontSize", + "_N$horizontalAlign", + "_N$verticalAlign", + "_enableWrapText", + "_N$overflow", + "_N$cacheMode", + "_lineHeight", + "_isSystemFontUsed", + "_N$autoSwitchMaterial", + "_N$allowDynamicAtlas", + "node", + "_materials", + "_N$file" + ], + -8, + 1, + 3, + 6 + ], + [ + "sp.Skeleton", + [ + "defaultSkin", + "defaultAnimation", + "_preCacheMode", + "_animationName", + "_N$enableBatch", + "_N$autoSwitchMaterial", + "_N$allowDynamicAtlas", + "_cacheMode", + "node", + "_materials", + "_N$skeletonData" + ], + -5, + 1, + 3, + 6 + ], + [ + "cc.Material", + [ + "_name", + "_techniqueData" + ], + 2, + 11 + ], + [ + "cc.Prefab", + [ + "_name" + ], + 2 + ], + [ + "cc.Node", + [ + "_name", + "_parent", + "_components", + "_prefab", + "_contentSize", + "_anchorPoint" + ], + 2, + 1, + 2, + 4, + 5, + 5 + ], + [ + "3e9188DEK9FCYlYeL+jvmrQ", + [ + "node", + "batchBtn", + "cancelBtn", + "textures" + ], + 3, + 1, + 1, + 1, + 1 + ], + [ + "cc.ToggleContainer", + [ + "node" + ], + 3, + 1 + ], + [ + "cc.Button", + [ + "_N$transition", + "node", + "_N$normalColor", + "_N$pressedColor", + "_N$disabledColor", + "_N$target", + "_N$normalSprite", + "_N$pressedSprite", + "_N$hoverSprite", + "_N$disabledSprite" + ], + 2, + 1, + 5, + 5, + 5, + 1, + 6, + 6, + 6, + 6 + ], + [ + "cc.Scrollbar", + [ + "enableAutoHide", + "_N$direction", + "node", + "_N$handle" + ], + 1, + 1, + 1 + ], + [ + "cc.ScrollView", + [ + "horizontal", + "brake", + "bounceDuration", + "_N$horizontalScrollBar", + "node", + "_N$content", + "_N$verticalScrollBar" + ], + -1, + 1, + 1, + 1 + ], + [ + "cc.EffectAsset", + [ + "_name", + "shaders", + "techniques" + ], + 0 + ], + [ + "cc.BitmapFont", + [ + "_name", + "fontSize", + "_fntConfig" + ], + 0 + ], + [ + "sp.SkeletonData", + [ + "_name", + "_atlasText", + "textureNames", + "_skeletonJson", + "textures" + ], + -1, + 3 + ], + [ + "cc.MotionStreak", + [ + "_stroke", + "_N$autoSwitchMaterial", + "node", + "_materials", + "_texture" + ], + 1, + 1, + 3, + 6 + ] + ], + [ + [ + 8, + 0, + 1, + 2 + ], + [ + 3, + 0, + 7, + 2, + 3, + 4, + 6, + 2 + ], + [ + 3, + 0, + 7, + 5, + 2, + 3, + 4, + 6, + 2 + ], + [ + 6, + 0, + 1, + 6, + 2, + 3, + 4, + 5, + 9, + 8 + ], + [ + 5, + 0, + 1, + 2, + 4, + 3, + 6, + 7, + 8, + 7 + ], + [ + 2, + 8, + 9, + 10, + 1 + ], + [ + 4, + 0, + 1, + 3, + 7, + 4 + ], + [ + 2, + 2, + 0, + 8, + 9, + 10, + 3 + ], + [ + 3, + 0, + 5, + 2, + 3, + 4, + 6, + 2 + ], + [ + 11, + 0, + 1, + 2 + ], + [ + 12, + 0, + 2 + ], + [ + 3, + 0, + 5, + 2, + 3, + 4, + 8, + 6, + 2 + ], + [ + 3, + 0, + 1, + 5, + 2, + 3, + 4, + 3 + ], + [ + 3, + 0, + 7, + 5, + 2, + 3, + 4, + 2 + ], + [ + 3, + 0, + 1, + 7, + 2, + 3, + 9, + 4, + 3 + ], + [ + 7, + 0, + 1, + 2, + 3, + 4, + 6, + 5, + 2 + ], + [ + 7, + 0, + 1, + 2, + 3, + 4, + 5, + 7, + 8, + 2 + ], + [ + 13, + 0, + 1, + 2, + 3, + 4, + 5, + 2 + ], + [ + 4, + 0, + 7, + 2 + ], + [ + 4, + 4, + 0, + 1, + 3, + 7, + 5 + ], + [ + 4, + 4, + 0, + 2, + 3, + 7, + 5 + ], + [ + 8, + 1, + 1 + ], + [ + 5, + 0, + 1, + 7, + 8, + 3 + ], + [ + 5, + 0, + 1, + 2, + 4, + 3, + 7, + 8, + 6 + ], + [ + 15, + 0, + 1 + ], + [ + 2, + 0, + 1, + 8, + 9, + 10, + 3 + ], + [ + 2, + 2, + 0, + 8, + 9, + 3 + ], + [ + 2, + 0, + 1, + 3, + 4, + 8, + 9, + 10, + 5 + ], + [ + 2, + 2, + 0, + 1, + 3, + 4, + 8, + 9, + 10, + 6 + ], + [ + 16, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 2 + ], + [ + 9, + 0, + 1, + 4, + 2, + 3, + 5, + 6, + 11, + 12, + 8 + ], + [ + 17, + 0, + 1, + 2, + 3, + 3 + ], + [ + 18, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 5 + ], + [ + 19, + 0, + 1, + 2, + 4 + ], + [ + 4, + 0, + 2, + 5, + 1, + 7, + 5 + ], + [ + 4, + 0, + 2, + 6, + 7, + 4 + ], + [ + 4, + 0, + 1, + 7, + 3 + ], + [ + 14, + 0, + 1, + 2, + 3, + 1 + ], + [ + 5, + 0, + 1, + 5, + 2, + 3, + 7, + 8, + 6 + ], + [ + 2, + 2, + 0, + 5, + 1, + 3, + 4, + 8, + 9, + 10, + 7 + ], + [ + 2, + 2, + 0, + 6, + 7, + 5, + 1, + 3, + 4, + 8, + 9, + 11, + 10, + 9 + ], + [ + 6, + 0, + 1, + 2, + 3, + 4, + 5, + 9, + 7 + ], + [ + 6, + 0, + 1, + 6, + 2, + 3, + 4, + 7, + 8, + 5, + 9, + 10 + ], + [ + 9, + 0, + 1, + 7, + 8, + 2, + 3, + 9, + 10, + 11, + 12, + 13, + 9 + ], + [ + 20, + 0, + 1, + 2, + 4 + ], + [ + 21, + 0, + 1, + 2, + 3, + 4, + 5 + ], + [ + 22, + 0, + 1, + 2, + 3, + 4, + 3 + ], + [ + 10, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 8, + 9, + 10, + 8 + ], + [ + 10, + 0, + 1, + 2, + 7, + 3, + 4, + 5, + 6, + 8, + 9, + 10, + 9 + ] + ], + [ + [ + [ + { + "name": "png", + "rect": [ + 33, + 5, + 143, + 150 + ], + "offset": [ + -9.5, + -0.5 + ], + "originalSize": [ + 228, + 159 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 2 + ], + [ + 16 + ] + ], + [ + [ + [ + 9, + "test-material", + [ + {}, + "0", + 11, + [ + { + "defines": { + "USE_TEXTURE": true, + "USE_MULTI_TEXTURE": true + } + }, + "props", + 11, + [ + {}, + "texture", + 6, + 0, + "texture2", + 6, + 1, + "texture3", + 6, + 2, + "texture4", + 6, + 3, + "texture5", + 6, + 4 + ] + ] + ] + ] + ], + 0, + 0, + [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 4, + 5, + 15, + 16, + 17, + 6 + ], + [ + 5, + 6, + 3, + 7, + 8, + 17 + ] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,0", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + [ + 10, + "multi-batcher" + ], + [ + 8, + "multi-batcher", + [ + -7 + ], + [ + [ + 18, + 45, + -2 + ], + [ + 37, + -6, + -5, + -4, + -3 + ] + ], + [ + 21, + -1 + ], + [ + 5, + 960, + 600 + ], + [ + 480, + 300, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 8, + "textures", + [ + -9, + -10, + -11, + -12, + -13, + -14, + -15, + -16 + ], + [ + [ + 22, + 1, + 3, + -8, + [ + 5, + 717, + 288 + ] + ] + ], + [ + 0, + "e0AioYjhRHjKmqedjlAWhb", + 1 + ], + [ + 5, + 717, + 288 + ], + [ + 0, + -234, + 0, + 0, + 0, + 0, + 1, + 0.5, + 0.5, + 1 + ] + ], + [ + 11, + "content", + [ + -20, + 2, + -21, + -22 + ], + [ + [ + 24, + -17 + ], + [ + 38, + 1, + 2, + 1, + 30, + 20, + -18, + [ + 5, + 785.815, + 498 + ] + ], + [ + 34, + 41, + 87.09249999999997, + 87.09249999999997, + 220, + -19 + ] + ], + [ + 0, + "98B5382ANHgKQw5BkMsWAq", + 1 + ], + [ + 5, + 785.815, + 498 + ], + [ + 0, + 0.5, + 1 + ], + [ + 0, + 300, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 15, + "sv", + 1, + [ + -26, + -27 + ], + [ + [ + -23, + [ + 6, + 45, + 240, + 250, + -24 + ], + [ + 25, + 0, + false, + -25, + [ + 33 + ], + 34 + ] + ], + 1, + 4, + 4 + ], + [ + 0, + "b5RxDsAgFOW6xOyBdbz2rI", + 1 + ], + [ + 4, + 4279834905 + ], + [ + 5, + 960, + 600 + ] + ], + [ + 12, + "Background", + 512, + [ + -30 + ], + [ + [ + 7, + 1, + 0, + -28, + [ + 17 + ], + 18 + ], + [ + 19, + 0, + 45, + 100, + 40, + -29 + ] + ], + [ + 0, + "c1rI+zAe1AVJuLNaOa0/Am", + 1 + ], + [ + 5, + 100, + 40 + ] + ], + [ + 12, + "Background", + 512, + [ + -33 + ], + [ + [ + 7, + 1, + 0, + -31, + [ + 24 + ], + 25 + ], + [ + 19, + 0, + 45, + 100, + 40, + -32 + ] + ], + [ + 0, + "75f/zpdqVNfLYRxiuVwv4C", + 1 + ], + [ + 5, + 100, + 40 + ] + ], + [ + 16, + "scrollBar", + 4, + [ + -37 + ], + [ + [ + -34, + [ + 20, + 0, + 37, + 350.07654921020657, + 237, + -35 + ], + [ + 7, + 1, + 0, + -36, + [ + 31 + ], + 32 + ] + ], + 1, + 4, + 4 + ], + [ + 0, + "c2cC2kA1NNeozY+5ZzkcSY", + 1 + ], + [ + 5, + 8, + 600 + ], + [ + 0, + 1, + 0.5 + ], + [ + 480, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 2, + "batch", + 3, + [ + 5 + ], + [ + [ + 29, + 2, + -38, + [ + 4, + 4293322470 + ], + [ + 4, + 4291348680 + ], + [ + 4, + 3363338360 + ], + 5, + 19, + 20, + 21, + 22 + ] + ], + [ + 0, + "0b0QeJt7VC44+K0EVYPDVj", + 1 + ], + [ + 5, + 100, + 40 + ], + [ + 0, + -418, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 2, + "cancel", + 3, + [ + 6 + ], + [ + [ + 29, + 2, + -39, + [ + 4, + 4293322470 + ], + [ + 4, + 4291348680 + ], + [ + 4, + 3363338360 + ], + 6, + 26, + 27, + 28, + 29 + ] + ], + [ + 0, + "d9fVRHRzVGa6qXzt5stxxE", + 1 + ], + [ + 5, + 100, + 40 + ], + [ + 0, + -478, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 13, + "view", + 4, + [ + 3 + ], + [ + [ + 6, + 45, + 240, + 250, + -40 + ] + ], + [ + 0, + "645yltQ0dFpbIcIgDazPDc", + 1 + ], + [ + 5, + 960, + 600 + ] + ], + [ + 1, + "tips", + 3, + [ + [ + 41, + "点击按钮会将这 8 张纹理关联同一个材质, Draw Call 会降低 7", + 16, + 1, + 1, + 2, + [ + null + ], + -41 + ], + [ + 35, + 17, + 95.11500000000001, + 30, + -42 + ] + ], + [ + 0, + "fbSLTYNutL174TDvzvU3nT", + 1 + ], + [ + 5, + 445.375, + 40 + ], + [ + 0, + -50, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "sheep_run_1", + 2, + [ + [ + 5, + -43, + [ + 0 + ], + 1 + ] + ], + [ + 0, + "290LB9y6dH754pFZjiX/ZH", + 1 + ], + [ + 5, + 176, + 115 + ], + [ + -270.5, + 86.5, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "sheep_jump_3", + 2, + [ + [ + 5, + -44, + [ + 2 + ], + 3 + ] + ], + [ + 0, + "0fvsvQgkVCH6CHuDRPrLT3", + 1 + ], + [ + 5, + 152, + 115 + ], + [ + -106.5, + 86.5, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "sheep_jump_2", + 2, + [ + [ + 5, + -45, + [ + 4 + ], + 5 + ] + ], + [ + 0, + "99/QBu9VRBqKTg4pZ/kxlb", + 1 + ], + [ + 5, + 160, + 104 + ], + [ + 49.5, + 92, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "png", + 2, + [ + [ + 5, + -46, + [ + 6 + ], + 7 + ] + ], + [ + 0, + "62bYLhXTdAE7unUwKnJ9+F", + 1 + ], + [ + 5, + 143, + 150 + ], + [ + 201, + 69, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "pvrtc2_rgb_a", + 2, + [ + [ + 5, + -47, + [ + 8 + ], + 9 + ] + ], + [ + 0, + "04ha70LWVGZp2m+P91mgRz", + 1 + ], + [ + 5, + 147, + 138 + ], + [ + -285, + -75, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "sheep_down_0", + 2, + [ + [ + 5, + -48, + [ + 10 + ], + 11 + ] + ], + [ + 0, + "ebEGt8f0JD7LLZQlSrZevu", + 1 + ], + [ + 5, + 224, + 87 + ], + [ + -99.5, + -49.5, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "etc1_rgb_a", + 2, + [ + [ + 5, + -49, + [ + 12 + ], + 13 + ] + ], + [ + 0, + "2arjghRTlJ+LCDvhAlCMgJ", + 1 + ], + [ + 5, + 154, + 131 + ], + [ + 89.5, + -71.5, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "1", + 2, + [ + [ + 5, + -50, + [ + 14 + ], + 15 + ] + ], + [ + 0, + "158hruI69MzqtLXovgpl9j", + 1 + ], + [ + 5, + 152, + 103 + ], + [ + 242.5, + -57.5, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 14, + "Label", + 512, + 5, + [ + [ + 30, + "合批", + 20, + false, + 1, + 1, + 1, + 1, + -51, + [ + 16 + ] + ] + ], + [ + 0, + "3ea+qYSxdPGLhbcByL6vuG", + 1 + ], + [ + 4, + 4278190080 + ], + [ + 5, + 100, + 40 + ] + ], + [ + 14, + "Label", + 512, + 6, + [ + [ + 30, + "还原", + 20, + false, + 1, + 1, + 1, + 1, + -52, + [ + 23 + ] + ] + ], + [ + 0, + "ecQWFGSopDrpI1pat+ViDn", + 1 + ], + [ + 4, + 4278190080 + ], + [ + 5, + 100, + 40 + ] + ], + [ + 17, + "bar", + 7, + [ + -53 + ], + [ + 0, + "29pI3SelxAU6ODrNe5LS2g", + 1 + ], + [ + 5, + 8, + 30 + ], + [ + 0, + 1, + 0 + ] + ], + [ + 26, + 1, + 0, + 22, + [ + 30 + ] + ], + [ + 31, + false, + 1, + 7, + 23 + ], + [ + 32, + false, + 0.75, + 0.23, + null, + 4, + 3, + 24 + ] + ], + 0, + [ + 0, + 7, + 1, + 0, + 0, + 1, + 0, + 18, + 2, + 0, + 19, + 9, + 0, + 20, + 8, + 0, + 0, + 1, + 0, + -1, + 4, + 0, + 0, + 2, + 0, + -1, + 12, + 0, + -2, + 13, + 0, + -3, + 14, + 0, + -4, + 15, + 0, + -5, + 16, + 0, + -6, + 17, + 0, + -7, + 18, + 0, + -8, + 19, + 0, + 0, + 3, + 0, + 0, + 3, + 0, + 0, + 3, + 0, + -1, + 11, + 0, + -3, + 8, + 0, + -4, + 9, + 0, + -1, + 25, + 0, + 0, + 4, + 0, + 0, + 4, + 0, + -1, + 10, + 0, + -2, + 7, + 0, + 0, + 5, + 0, + 0, + 5, + 0, + -1, + 20, + 0, + 0, + 6, + 0, + 0, + 6, + 0, + -1, + 21, + 0, + -1, + 24, + 0, + 0, + 7, + 0, + 0, + 7, + 0, + -1, + 22, + 0, + 0, + 8, + 0, + 0, + 9, + 0, + 0, + 10, + 0, + 0, + 11, + 0, + 0, + 11, + 0, + 0, + 12, + 0, + 0, + 13, + 0, + 0, + 14, + 0, + 0, + 15, + 0, + 0, + 16, + 0, + 0, + 17, + 0, + 0, + 18, + 0, + 0, + 19, + 0, + 0, + 20, + 0, + 0, + 21, + 0, + -1, + 23, + 0, + 8, + 1, + 2, + 3, + 3, + 3, + 3, + 10, + 5, + 3, + 8, + 6, + 3, + 9, + 24, + 9, + 25, + 53 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23 + ], + [ + -1, + 1, + -1, + 1, + -1, + 1, + -1, + 1, + -1, + 1, + -1, + 1, + -1, + 1, + -1, + 1, + -1, + -1, + 1, + 10, + 11, + 12, + 13, + -1, + -1, + 1, + 10, + 11, + 12, + 13, + -1, + -1, + 1, + -1, + 1, + 1 + ], + [ + 0, + 18, + 0, + 19, + 0, + 20, + 0, + 21, + 0, + 22, + 0, + 23, + 0, + 24, + 0, + 25, + 0, + 0, + 2, + 2, + 9, + 2, + 10, + 0, + 0, + 2, + 2, + 9, + 2, + 10, + 0, + 0, + 11, + 0, + 12, + 13 + ] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,0", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + { + "name": "default_btn_disabled", + "rect": [ + 0, + 0, + 40, + 40 + ], + "offset": [ + 0, + 0 + ], + "originalSize": [ + 40, + 40 + ], + "capInsets": [ + 12, + 12, + 12, + 12 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 2 + ], + [ + 26 + ] + ], + [ + [ + [ + 9, + "custom-2d-sprite", + [ + {}, + "0", + 11, + [ + { + "defines": { + "USE_TEXTURE": true, + "USE_MULTI_TEXTURE": true + } + }, + "props", + 11, + [ + { + "blur": 0.01, + "wh_ratio": 1, + "radius": 0.45 + }, + "texture", + 6, + 0, + "texture2", + 6, + 1 + ] + ] + ] + ] + ], + 0, + 0, + [ + 0, + 0, + 0 + ], + [ + 4, + 5, + 6 + ], + [ + 27, + 3, + 28 + ] + ], + [ + [ + { + "name": "sheep_jump_2", + "rect": [ + 24, + 24, + 160, + 104 + ], + "offset": [ + -10, + 3.5 + ], + "originalSize": [ + 228, + 159 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 2 + ], + [ + 29 + ] + ], + [ + [ + [ + 33, + "custom-2d-sprite", + [ + { + "hash": 2734998855, + "record": null, + "name": "custom-2d-sprite|vs|fs", + "glsl3": { + "vert": "\nprecision highp float;\nuniform CCGlobal {\n mat4 cc_matView;\n mat4 cc_matViewInv;\n mat4 cc_matProj;\n mat4 cc_matProjInv;\n mat4 cc_matViewProj;\n mat4 cc_matViewProjInv;\n vec4 cc_cameraPos;\n vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nin vec3 a_position;\nin vec4 a_color;\nout vec4 v_color;\n#if USE_TEXTURE\nin vec2 a_uv0;\nout vec2 v_uv0;\n#if USE_MULTI_TEXTURE\nin float a_texId;\nout float v_texId;\n#endif\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #if USE_MULTI_TEXTURE\n v_texId = a_texId;\n #endif\n #endif\n v_color = a_color;\n gl_Position = pos;\n}", + "frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform ALPHA_TEST {\n float alphaThreshold;\n };\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nin vec4 v_color;\n#if USE_TEXTURE\nin vec2 v_uv0;\nuniform sampler2D texture;\n#if USE_MULTI_TEXTURE\nin float v_texId;\nuniform sampler2D texture2;\nuniform sampler2D texture3;\nuniform sampler2D texture4;\nuniform sampler2D texture5;\nuniform sampler2D texture6;\nuniform sampler2D texture7;\nuniform sampler2D texture8;\n#endif\n#endif\nuniform ARGS{\n float radius;\n float blur;\n vec2 center;\n float wh_ratio;\n};\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n #if USE_MULTI_TEXTURE\n if(v_texId < 1.0){\n vec4 texture_tmp = texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture\n texture_tmp.a *= texture(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture_tmp.rgb * texture_tmp.rgb);\n o.a *= texture_tmp.a;\n #else\n o *= texture_tmp;\n #endif\n } else if(v_texId < 2.0){\n vec4 texture2_tmp = texture(texture2, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture2\n texture2_tmp.a *= texture(texture2, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture2_tmp.rgb * texture2_tmp.rgb);\n o.a *= texture2_tmp.a;\n #else\n o *= texture2_tmp;\n #endif\n } else if(v_texId < 3.0){\n vec4 texture3_tmp = texture(texture3, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture3\n texture3_tmp.a *= texture(texture3, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture3_tmp.rgb * texture3_tmp.rgb);\n o.a *= texture3_tmp.a;\n #else\n o *= texture3_tmp;\n #endif\n } else if(v_texId < 4.0){\n vec4 texture4_tmp = texture(texture4, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture4\n texture4_tmp.a *= texture(texture4, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture4_tmp.rgb * texture4_tmp.rgb);\n o.a *= texture4_tmp.a;\n #else\n o *= texture4_tmp;\n #endif\n } else if(v_texId < 5.0){\n vec4 texture5_tmp = texture(texture5, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture5\n texture5_tmp.a *= texture(texture5, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture5_tmp.rgb * texture5_tmp.rgb);\n o.a *= texture5_tmp.a;\n #else\n o *= texture5_tmp;\n #endif\n } else if(v_texId < 6.0){\n vec4 texture6_tmp = texture(texture6, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture6\n texture6_tmp.a *= texture(texture6, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture6_tmp.rgb * texture6_tmp.rgb);\n o.a *= texture6_tmp.a;\n #else\n o *= texture6_tmp;\n #endif\n } else if(v_texId < 7.0){\n vec4 texture7_tmp = texture(texture7, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture7\n texture7_tmp.a *= texture(texture7, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture7_tmp.rgb * texture7_tmp.rgb);\n o.a *= texture7_tmp.a;\n #else\n o *= texture7_tmp;\n #endif\n } else {\n vec4 texture8_tmp = texture(texture8, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture8\n texture8_tmp.a *= texture(texture8, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture8_tmp.rgb * texture8_tmp.rgb);\n o.a *= texture8_tmp.a;\n #else\n o *= texture8_tmp;\n #endif\n }\n #else\n vec4 texture_tmp = texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture\n texture_tmp.a *= texture(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture_tmp.rgb * texture_tmp.rgb);\n o.a *= texture_tmp.a;\n #else\n o *= texture_tmp;\n #endif\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n float circle = radius * radius;\n float rx = center.x * wh_ratio;\n float ry = center.y;\n float dis = (v_uv0.x * wh_ratio - rx) * (v_uv0.x * wh_ratio - rx) + (v_uv0.y - ry) * (v_uv0.y - ry);\n o.a = smoothstep(circle, circle - blur, dis);\n gl_FragColor = o;\n}" + }, + "glsl1": { + "vert": "\nprecision highp float;\nuniform mat4 cc_matViewProj;\nuniform mat4 cc_matWorld;\nattribute vec3 a_position;\nattribute vec4 a_color;\nvarying vec4 v_color;\n#if USE_TEXTURE\nattribute vec2 a_uv0;\nvarying vec2 v_uv0;\n#if USE_MULTI_TEXTURE\nattribute float a_texId;\nvarying float v_texId;\n#endif\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #if USE_MULTI_TEXTURE\n v_texId = a_texId;\n #endif\n #endif\n v_color = a_color;\n gl_Position = pos;\n}", + "frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform float alphaThreshold;\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvarying vec4 v_color;\n#if USE_TEXTURE\nvarying vec2 v_uv0;\nuniform sampler2D texture;\n#if USE_MULTI_TEXTURE\nvarying float v_texId;\nuniform sampler2D texture2;\nuniform sampler2D texture3;\nuniform sampler2D texture4;\nuniform sampler2D texture5;\nuniform sampler2D texture6;\nuniform sampler2D texture7;\nuniform sampler2D texture8;\n#endif\n#endif\nuniform float radius;\nuniform float blur;\nuniform vec2 center;\nuniform float wh_ratio;\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n #if USE_MULTI_TEXTURE\n if(v_texId < 1.0){\n vec4 texture_tmp = texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture\n texture_tmp.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture_tmp.rgb * texture_tmp.rgb);\n o.a *= texture_tmp.a;\n #else\n o *= texture_tmp;\n #endif\n } else if(v_texId < 2.0){\n vec4 texture2_tmp = texture2D(texture2, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture2\n texture2_tmp.a *= texture2D(texture2, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture2_tmp.rgb * texture2_tmp.rgb);\n o.a *= texture2_tmp.a;\n #else\n o *= texture2_tmp;\n #endif\n } else if(v_texId < 3.0){\n vec4 texture3_tmp = texture2D(texture3, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture3\n texture3_tmp.a *= texture2D(texture3, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture3_tmp.rgb * texture3_tmp.rgb);\n o.a *= texture3_tmp.a;\n #else\n o *= texture3_tmp;\n #endif\n } else if(v_texId < 4.0){\n vec4 texture4_tmp = texture2D(texture4, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture4\n texture4_tmp.a *= texture2D(texture4, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture4_tmp.rgb * texture4_tmp.rgb);\n o.a *= texture4_tmp.a;\n #else\n o *= texture4_tmp;\n #endif\n } else if(v_texId < 5.0){\n vec4 texture5_tmp = texture2D(texture5, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture5\n texture5_tmp.a *= texture2D(texture5, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture5_tmp.rgb * texture5_tmp.rgb);\n o.a *= texture5_tmp.a;\n #else\n o *= texture5_tmp;\n #endif\n } else if(v_texId < 6.0){\n vec4 texture6_tmp = texture2D(texture6, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture6\n texture6_tmp.a *= texture2D(texture6, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture6_tmp.rgb * texture6_tmp.rgb);\n o.a *= texture6_tmp.a;\n #else\n o *= texture6_tmp;\n #endif\n } else if(v_texId < 7.0){\n vec4 texture7_tmp = texture2D(texture7, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture7\n texture7_tmp.a *= texture2D(texture7, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture7_tmp.rgb * texture7_tmp.rgb);\n o.a *= texture7_tmp.a;\n #else\n o *= texture7_tmp;\n #endif\n } else {\n vec4 texture8_tmp = texture2D(texture8, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture8\n texture8_tmp.a *= texture2D(texture8, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture8_tmp.rgb * texture8_tmp.rgb);\n o.a *= texture8_tmp.a;\n #else\n o *= texture8_tmp;\n #endif\n }\n #else\n vec4 texture_tmp = texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture\n texture_tmp.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture_tmp.rgb * texture_tmp.rgb);\n o.a *= texture_tmp.a;\n #else\n o *= texture_tmp;\n #endif\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n float circle = radius * radius;\n float rx = center.x * wh_ratio;\n float ry = center.y;\n float dis = (v_uv0.x * wh_ratio - rx) * (v_uv0.x * wh_ratio - rx) + (v_uv0.y - ry) * (v_uv0.y - ry);\n o.a = smoothstep(circle, circle - blur, dis);\n gl_FragColor = o;\n}" + }, + "builtins": { + "globals": { + "blocks": [ + { + "name": "CCGlobal", + "defines": [] + } + ], + "samplers": [] + }, + "locals": { + "blocks": [ + { + "name": "CCLocal", + "defines": [] + } + ], + "samplers": [] + } + }, + "defines": [ + { + "name": "USE_TEXTURE", + "type": "boolean", + "defines": [] + }, + { + "name": "USE_MULTI_TEXTURE", + "type": "boolean", + "defines": [ + "USE_TEXTURE" + ] + }, + { + "name": "CC_USE_MODEL", + "type": "boolean", + "defines": [] + }, + { + "name": "USE_ALPHA_TEST", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture", + "type": "boolean", + "defines": [ + "USE_TEXTURE" + ] + }, + { + "name": "INPUT_IS_GAMMA", + "type": "boolean", + "defines": [ + "USE_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture2", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture3", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture4", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture5", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture6", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture7", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture8", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + } + ], + "blocks": [ + { + "name": "ALPHA_TEST", + "binding": 0, + "members": [ + { + "name": "alphaThreshold", + "type": 13, + "count": 1 + } + ], + "defines": [ + "USE_ALPHA_TEST" + ] + }, + { + "name": "ARGS", + "binding": 1, + "members": [ + { + "name": "radius", + "type": 13, + "count": 1 + }, + { + "name": "blur", + "type": 13, + "count": 1 + }, + { + "name": "center", + "type": 14, + "count": 1 + }, + { + "name": "wh_ratio", + "type": 13, + "count": 1 + } + ], + "defines": [] + } + ], + "samplers": [ + { + "name": "texture", + "type": 29, + "count": 1, + "binding": 30, + "defines": [ + "USE_TEXTURE" + ] + }, + { + "name": "texture2", + "type": 29, + "count": 1, + "binding": 31, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "texture3", + "type": 29, + "count": 1, + "binding": 32, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "texture4", + "type": 29, + "count": 1, + "binding": 33, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "texture5", + "type": 29, + "count": 1, + "binding": 34, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "texture6", + "type": 29, + "count": 1, + "binding": 35, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "texture7", + "type": 29, + "count": 1, + "binding": 36, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "texture8", + "type": 29, + "count": 1, + "binding": 37, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + } + ] + } + ], + [ + { + "passes": [ + { + "program": "custom-2d-sprite|vs|fs", + "blendState": { + "targets": [ + { + "blend": true + } + ] + }, + "rasterizerState": { + "cullMode": 0 + }, + "properties": { + "texture": { + "value": "white", + "type": 29 + }, + "texture2": { + "value": "white", + "type": 29 + }, + "texture3": { + "value": "white", + "type": 29 + }, + "texture4": { + "value": "white", + "type": 29 + }, + "texture5": { + "value": "white", + "type": 29 + }, + "texture6": { + "value": "white", + "type": 29 + }, + "texture7": { + "value": "white", + "type": 29 + }, + "texture8": { + "value": "white", + "type": 29 + }, + "alphaThreshold": { + "type": 13, + "value": [ + 0.5 + ] + }, + "wh_ratio": { + "type": 13, + "value": [ + 1 + ], + "editor": { + "tooltip": "宽高比" + } + }, + "blur": { + "type": 13, + "value": [ + 0.35 + ], + "editor": { + "tooltip": "光圈模糊程度" + } + }, + "radius": { + "type": 13, + "value": [ + 0.5 + ], + "editor": { + "tooltip": "光圈半径" + } + }, + "center": { + "type": 14, + "value": [ + 0.5, + 0.5 + ], + "editor": { + "tooltip": "光圈起点" + } + } + } + } + ] + } + ] + ] + ], + 0, + 0, + [], + [], + [] + ], + [ + [ + { + "name": "pvrtc2_rgb_a", + "rect": [ + 29, + 13, + 147, + 138 + ], + "offset": [ + -11.5, + -2.5 + ], + "originalSize": [ + 228, + 159 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 2 + ], + [ + 30 + ] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,0", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,0", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + { + "name": "sheep_run_1", + "rect": [ + 27, + 20, + 176, + 115 + ], + "offset": [ + 1, + 2 + ], + "originalSize": [ + 228, + 159 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 2 + ], + [ + 31 + ] + ], + [ + [ + [ + 33, + "multi-2d-sprite", + [ + { + "hash": 3894394603, + "record": null, + "name": "multi-2d-sprite|vs|fs", + "glsl3": { + "vert": "\nprecision highp float;\nuniform CCGlobal {\n mat4 cc_matView;\n mat4 cc_matViewInv;\n mat4 cc_matProj;\n mat4 cc_matProjInv;\n mat4 cc_matViewProj;\n mat4 cc_matViewProjInv;\n vec4 cc_cameraPos;\n vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nin vec3 a_position;\nin vec4 a_color;\nout vec4 v_color;\n#if USE_TEXTURE\nin vec2 a_uv0;\nout vec2 v_uv0;\n#if USE_MULTI_TEXTURE\nin float a_texId;\nout float v_texId;\n#endif\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #if USE_MULTI_TEXTURE\n v_texId = a_texId;\n #endif\n #endif\n v_color = a_color;\n gl_Position = pos;\n}", + "frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform ALPHA_TEST {\n float alphaThreshold;\n };\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nin vec4 v_color;\n#if USE_TEXTURE\nin vec2 v_uv0;\nuniform sampler2D texture;\n#if USE_MULTI_TEXTURE\nin float v_texId;\nuniform sampler2D texture2;\nuniform sampler2D texture3;\nuniform sampler2D texture4;\nuniform sampler2D texture5;\nuniform sampler2D texture6;\nuniform sampler2D texture7;\nuniform sampler2D texture8;\n#endif\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n #if USE_MULTI_TEXTURE\n if(v_texId < 1.0){\n vec4 texture_tmp = texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture\n texture_tmp.a *= texture(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture_tmp.rgb * texture_tmp.rgb);\n o.a *= texture_tmp.a;\n #else\n o *= texture_tmp;\n #endif\n } else if(v_texId < 2.0){\n vec4 texture2_tmp = texture(texture2, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture2\n texture2_tmp.a *= texture(texture2, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture2_tmp.rgb * texture2_tmp.rgb);\n o.a *= texture2_tmp.a;\n #else\n o *= texture2_tmp;\n #endif\n } else if(v_texId < 3.0){\n vec4 texture3_tmp = texture(texture3, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture3\n texture3_tmp.a *= texture(texture3, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture3_tmp.rgb * texture3_tmp.rgb);\n o.a *= texture3_tmp.a;\n #else\n o *= texture3_tmp;\n #endif\n } else if(v_texId < 4.0){\n vec4 texture4_tmp = texture(texture4, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture4\n texture4_tmp.a *= texture(texture4, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture4_tmp.rgb * texture4_tmp.rgb);\n o.a *= texture4_tmp.a;\n #else\n o *= texture4_tmp;\n #endif\n } else if(v_texId < 5.0){\n vec4 texture5_tmp = texture(texture5, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture5\n texture5_tmp.a *= texture(texture5, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture5_tmp.rgb * texture5_tmp.rgb);\n o.a *= texture5_tmp.a;\n #else\n o *= texture5_tmp;\n #endif\n } else if(v_texId < 6.0){\n vec4 texture6_tmp = texture(texture6, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture6\n texture6_tmp.a *= texture(texture6, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture6_tmp.rgb * texture6_tmp.rgb);\n o.a *= texture6_tmp.a;\n #else\n o *= texture6_tmp;\n #endif\n } else if(v_texId < 7.0){\n vec4 texture7_tmp = texture(texture7, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture7\n texture7_tmp.a *= texture(texture7, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture7_tmp.rgb * texture7_tmp.rgb);\n o.a *= texture7_tmp.a;\n #else\n o *= texture7_tmp;\n #endif\n } else {\n vec4 texture8_tmp = texture(texture8, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture8\n texture8_tmp.a *= texture(texture8, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture8_tmp.rgb * texture8_tmp.rgb);\n o.a *= texture8_tmp.a;\n #else\n o *= texture8_tmp;\n #endif\n }\n #else\n vec4 texture_tmp = texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture\n texture_tmp.a *= texture(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture_tmp.rgb * texture_tmp.rgb);\n o.a *= texture_tmp.a;\n #else\n o *= texture_tmp;\n #endif\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n}" + }, + "glsl1": { + "vert": "\nprecision highp float;\nuniform mat4 cc_matViewProj;\nuniform mat4 cc_matWorld;\nattribute vec3 a_position;\nattribute vec4 a_color;\nvarying vec4 v_color;\n#if USE_TEXTURE\nattribute vec2 a_uv0;\nvarying vec2 v_uv0;\n#if USE_MULTI_TEXTURE\nattribute float a_texId;\nvarying float v_texId;\n#endif\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #if USE_MULTI_TEXTURE\n v_texId = a_texId;\n #endif\n #endif\n v_color = a_color;\n gl_Position = pos;\n}", + "frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform float alphaThreshold;\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvarying vec4 v_color;\n#if USE_TEXTURE\nvarying vec2 v_uv0;\nuniform sampler2D texture;\n#if USE_MULTI_TEXTURE\nvarying float v_texId;\nuniform sampler2D texture2;\nuniform sampler2D texture3;\nuniform sampler2D texture4;\nuniform sampler2D texture5;\nuniform sampler2D texture6;\nuniform sampler2D texture7;\nuniform sampler2D texture8;\n#endif\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n #if USE_MULTI_TEXTURE\n if(v_texId < 1.0){\n vec4 texture_tmp = texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture\n texture_tmp.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture_tmp.rgb * texture_tmp.rgb);\n o.a *= texture_tmp.a;\n #else\n o *= texture_tmp;\n #endif\n } else if(v_texId < 2.0){\n vec4 texture2_tmp = texture2D(texture2, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture2\n texture2_tmp.a *= texture2D(texture2, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture2_tmp.rgb * texture2_tmp.rgb);\n o.a *= texture2_tmp.a;\n #else\n o *= texture2_tmp;\n #endif\n } else if(v_texId < 3.0){\n vec4 texture3_tmp = texture2D(texture3, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture3\n texture3_tmp.a *= texture2D(texture3, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture3_tmp.rgb * texture3_tmp.rgb);\n o.a *= texture3_tmp.a;\n #else\n o *= texture3_tmp;\n #endif\n } else if(v_texId < 4.0){\n vec4 texture4_tmp = texture2D(texture4, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture4\n texture4_tmp.a *= texture2D(texture4, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture4_tmp.rgb * texture4_tmp.rgb);\n o.a *= texture4_tmp.a;\n #else\n o *= texture4_tmp;\n #endif\n } else if(v_texId < 5.0){\n vec4 texture5_tmp = texture2D(texture5, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture5\n texture5_tmp.a *= texture2D(texture5, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture5_tmp.rgb * texture5_tmp.rgb);\n o.a *= texture5_tmp.a;\n #else\n o *= texture5_tmp;\n #endif\n } else if(v_texId < 6.0){\n vec4 texture6_tmp = texture2D(texture6, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture6\n texture6_tmp.a *= texture2D(texture6, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture6_tmp.rgb * texture6_tmp.rgb);\n o.a *= texture6_tmp.a;\n #else\n o *= texture6_tmp;\n #endif\n } else if(v_texId < 7.0){\n vec4 texture7_tmp = texture2D(texture7, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture7\n texture7_tmp.a *= texture2D(texture7, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture7_tmp.rgb * texture7_tmp.rgb);\n o.a *= texture7_tmp.a;\n #else\n o *= texture7_tmp;\n #endif\n } else {\n vec4 texture8_tmp = texture2D(texture8, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture8\n texture8_tmp.a *= texture2D(texture8, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture8_tmp.rgb * texture8_tmp.rgb);\n o.a *= texture8_tmp.a;\n #else\n o *= texture8_tmp;\n #endif\n }\n #else\n vec4 texture_tmp = texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_texture\n texture_tmp.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #if INPUT_IS_GAMMA\n o.rgb *= (texture_tmp.rgb * texture_tmp.rgb);\n o.a *= texture_tmp.a;\n #else\n o *= texture_tmp;\n #endif\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n}" + }, + "builtins": { + "globals": { + "blocks": [ + { + "name": "CCGlobal", + "defines": [] + } + ], + "samplers": [] + }, + "locals": { + "blocks": [ + { + "name": "CCLocal", + "defines": [] + } + ], + "samplers": [] + } + }, + "defines": [ + { + "name": "USE_TEXTURE", + "type": "boolean", + "defines": [] + }, + { + "name": "USE_MULTI_TEXTURE", + "type": "boolean", + "defines": [ + "USE_TEXTURE" + ] + }, + { + "name": "CC_USE_MODEL", + "type": "boolean", + "defines": [] + }, + { + "name": "USE_ALPHA_TEST", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture", + "type": "boolean", + "defines": [ + "USE_TEXTURE" + ] + }, + { + "name": "INPUT_IS_GAMMA", + "type": "boolean", + "defines": [ + "USE_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture2", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture3", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture4", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture5", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture6", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture7", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "CC_USE_ALPHA_ATLAS_texture8", + "type": "boolean", + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + } + ], + "blocks": [ + { + "name": "ALPHA_TEST", + "binding": 0, + "members": [ + { + "name": "alphaThreshold", + "type": 13, + "count": 1 + } + ], + "defines": [ + "USE_ALPHA_TEST" + ] + } + ], + "samplers": [ + { + "name": "texture", + "type": 29, + "count": 1, + "binding": 30, + "defines": [ + "USE_TEXTURE" + ] + }, + { + "name": "texture2", + "type": 29, + "count": 1, + "binding": 31, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "texture3", + "type": 29, + "count": 1, + "binding": 32, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "texture4", + "type": 29, + "count": 1, + "binding": 33, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "texture5", + "type": 29, + "count": 1, + "binding": 34, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "texture6", + "type": 29, + "count": 1, + "binding": 35, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "texture7", + "type": 29, + "count": 1, + "binding": 36, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + }, + { + "name": "texture8", + "type": 29, + "count": 1, + "binding": 37, + "defines": [ + "USE_TEXTURE", + "USE_MULTI_TEXTURE" + ] + } + ] + } + ], + [ + { + "passes": [ + { + "program": "multi-2d-sprite|vs|fs", + "blendState": { + "targets": [ + { + "blend": true + } + ] + }, + "rasterizerState": { + "cullMode": 0 + }, + "properties": { + "texture": { + "value": "white", + "type": 29 + }, + "texture2": { + "value": "white", + "type": 29 + }, + "texture3": { + "value": "white", + "type": 29 + }, + "texture4": { + "value": "white", + "type": 29 + }, + "texture5": { + "value": "white", + "type": 29 + }, + "texture6": { + "value": "white", + "type": 29 + }, + "texture7": { + "value": "white", + "type": 29 + }, + "texture8": { + "value": "white", + "type": 29 + }, + "alphaThreshold": { + "type": 13, + "value": [ + 0.5 + ] + } + } + } + ] + } + ] + ] + ], + 0, + 0, + [], + [], + [] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,0", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,0", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + [ + 44, + "normalFont", + 64, + { + "commonHeight": 72, + "fontSize": 64, + "atlasName": "normalFont.png", + "fontDefDictionary": { + "32": { + "xOffset": 0, + "yOffset": 58, + "xAdvance": 18, + "rect": { + "x": 446, + "y": 710, + "width": 0, + "height": 0 + } + }, + "33": { + "xOffset": 6, + "yOffset": 11, + "xAdvance": 18, + "rect": { + "x": 328, + "y": 661, + "width": 8, + "height": 47 + } + }, + "34": { + "xOffset": 3, + "yOffset": 10, + "xAdvance": 23, + "rect": { + "x": 284, + "y": 710, + "width": 18, + "height": 18 + } + }, + "35": { + "xOffset": 1, + "yOffset": 10, + "xAdvance": 36, + "rect": { + "x": 221, + "y": 560, + "width": 36, + "height": 49 + } + }, + "36": { + "xOffset": 2, + "yOffset": 7, + "xAdvance": 36, + "rect": { + "x": 59, + "y": 500, + "width": 32, + "height": 58 + } + }, + "37": { + "xOffset": 4, + "yOffset": 10, + "xAdvance": 57, + "rect": { + "x": 661, + "y": 500, + "width": 51, + "height": 50 + } + }, + "38": { + "xOffset": 3, + "yOffset": 10, + "xAdvance": 43, + "rect": { + "x": 139, + "y": 560, + "width": 40, + "height": 49 + } + }, + "39": { + "xOffset": 3, + "yOffset": 10, + "xAdvance": 12, + "rect": { + "x": 304, + "y": 710, + "width": 8, + "height": 18 + } + }, + "40": { + "xOffset": 4, + "yOffset": 9, + "xAdvance": 21, + "rect": { + "x": 109, + "y": 2, + "width": 17, + "height": 62 + } + }, + "41": { + "xOffset": 4, + "yOffset": 9, + "xAdvance": 21, + "rect": { + "x": 128, + "y": 2, + "width": 17, + "height": 62 + } + }, + "42": { + "xOffset": 2, + "yOffset": 10, + "xAdvance": 25, + "rect": { + "x": 260, + "y": 710, + "width": 22, + "height": 21 + } + }, + "43": { + "xOffset": 4, + "yOffset": 19, + "xAdvance": 37, + "rect": { + "x": 162, + "y": 710, + "width": 32, + "height": 32 + } + }, + "44": { + "xOffset": 5, + "yOffset": 50, + "xAdvance": 18, + "rect": { + "x": 314, + "y": 710, + "width": 8, + "height": 17 + } + }, + "45": { + "xOffset": 2, + "yOffset": 37, + "xAdvance": 21, + "rect": { + "x": 384, + "y": 710, + "width": 19, + "height": 7 + } + }, + "46": { + "xOffset": 6, + "yOffset": 50, + "xAdvance": 18, + "rect": { + "x": 374, + "y": 710, + "width": 8, + "height": 8 + } + }, + "47": { + "xOffset": 0, + "yOffset": 10, + "xAdvance": 18, + "rect": { + "x": 292, + "y": 560, + "width": 19, + "height": 49 + } + }, + "48": { + "xOffset": 3, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 578, + "y": 560, + "width": 31, + "height": 48 + } + }, + "49": { + "xOffset": 7, + "yOffset": 10, + "xAdvance": 36, + "rect": { + "x": 86, + "y": 611, + "width": 18, + "height": 48 + } + }, + "50": { + "xOffset": 2, + "yOffset": 10, + "xAdvance": 36, + "rect": { + "x": 374, + "y": 560, + "width": 32, + "height": 48 + } + }, + "51": { + "xOffset": 3, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 408, + "y": 560, + "width": 32, + "height": 48 + } + }, + "52": { + "xOffset": 1, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 78, + "y": 661, + "width": 33, + "height": 47 + } + }, + "53": { + "xOffset": 3, + "yOffset": 12, + "xAdvance": 36, + "rect": { + "x": 113, + "y": 661, + "width": 32, + "height": 47 + } + }, + "54": { + "xOffset": 2, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 442, + "y": 560, + "width": 32, + "height": 48 + } + }, + "55": { + "xOffset": 3, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 181, + "y": 661, + "width": 31, + "height": 47 + } + }, + "56": { + "xOffset": 3, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 476, + "y": 560, + "width": 32, + "height": 48 + } + }, + "57": { + "xOffset": 3, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 510, + "y": 560, + "width": 32, + "height": 48 + } + }, + "58": { + "xOffset": 6, + "yOffset": 23, + "xAdvance": 18, + "rect": { + "x": 84, + "y": 710, + "width": 8, + "height": 35 + } + }, + "59": { + "xOffset": 5, + "yOffset": 23, + "xAdvance": 18, + "rect": { + "x": 366, + "y": 661, + "width": 8, + "height": 44 + } + }, + "60": { + "xOffset": 4, + "yOffset": 18, + "xAdvance": 37, + "rect": { + "x": 94, + "y": 710, + "width": 32, + "height": 33 + } + }, + "61": { + "xOffset": 4, + "yOffset": 24, + "xAdvance": 37, + "rect": { + "x": 226, + "y": 710, + "width": 32, + "height": 21 + } + }, + "62": { + "xOffset": 4, + "yOffset": 18, + "xAdvance": 37, + "rect": { + "x": 128, + "y": 710, + "width": 32, + "height": 33 + } + }, + "63": { + "xOffset": 3, + "yOffset": 10, + "xAdvance": 36, + "rect": { + "x": 611, + "y": 560, + "width": 31, + "height": 48 + } + }, + "64": { + "xOffset": 3, + "yOffset": 9, + "xAdvance": 65, + "rect": { + "x": 2, + "y": 2, + "width": 61, + "height": 62 + } + }, + "65": { + "xOffset": 0, + "yOffset": 11, + "xAdvance": 43, + "rect": { + "x": 215, + "y": 611, + "width": 44, + "height": 47 + } + }, + "66": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 43, + "rect": { + "x": 683, + "y": 611, + "width": 36, + "height": 47 + } + }, + "67": { + "xOffset": 3, + "yOffset": 10, + "xAdvance": 46, + "rect": { + "x": 95, + "y": 560, + "width": 42, + "height": 49 + } + }, + "68": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 46, + "rect": { + "x": 442, + "y": 611, + "width": 39, + "height": 47 + } + }, + "69": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 43, + "rect": { + "x": 2, + "y": 661, + "width": 36, + "height": 47 + } + }, + "70": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 39, + "rect": { + "x": 147, + "y": 661, + "width": 32, + "height": 47 + } + }, + "71": { + "xOffset": 3, + "yOffset": 10, + "xAdvance": 50, + "rect": { + "x": 49, + "y": 560, + "width": 44, + "height": 49 + } + }, + "72": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 46, + "rect": { + "x": 644, + "y": 611, + "width": 37, + "height": 47 + } + }, + "73": { + "xOffset": 6, + "yOffset": 11, + "xAdvance": 18, + "rect": { + "x": 338, + "y": 661, + "width": 8, + "height": 47 + } + }, + "74": { + "xOffset": 2, + "yOffset": 11, + "xAdvance": 32, + "rect": { + "x": 34, + "y": 611, + "width": 27, + "height": 48 + } + }, + "75": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 43, + "rect": { + "x": 483, + "y": 611, + "width": 39, + "height": 47 + } + }, + "76": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 214, + "y": 661, + "width": 30, + "height": 47 + } + }, + "77": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 53, + "rect": { + "x": 168, + "y": 611, + "width": 45, + "height": 47 + } + }, + "78": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 46, + "rect": { + "x": 524, + "y": 611, + "width": 38, + "height": 47 + } + }, + "79": { + "xOffset": 3, + "yOffset": 10, + "xAdvance": 50, + "rect": { + "x": 2, + "y": 560, + "width": 45, + "height": 49 + } + }, + "80": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 43, + "rect": { + "x": 40, + "y": 661, + "width": 36, + "height": 47 + } + }, + "81": { + "xOffset": 3, + "yOffset": 10, + "xAdvance": 50, + "rect": { + "x": 613, + "y": 500, + "width": 46, + "height": 52 + } + }, + "82": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 46, + "rect": { + "x": 398, + "y": 611, + "width": 42, + "height": 47 + } + }, + "83": { + "xOffset": 3, + "yOffset": 10, + "xAdvance": 43, + "rect": { + "x": 181, + "y": 560, + "width": 38, + "height": 49 + } + }, + "84": { + "xOffset": 2, + "yOffset": 11, + "xAdvance": 39, + "rect": { + "x": 564, + "y": 611, + "width": 38, + "height": 47 + } + }, + "85": { + "xOffset": 5, + "yOffset": 11, + "xAdvance": 46, + "rect": { + "x": 334, + "y": 560, + "width": 38, + "height": 48 + } + }, + "86": { + "xOffset": 0, + "yOffset": 11, + "xAdvance": 43, + "rect": { + "x": 353, + "y": 611, + "width": 43, + "height": 47 + } + }, + "87": { + "xOffset": 1, + "yOffset": 11, + "xAdvance": 60, + "rect": { + "x": 106, + "y": 611, + "width": 60, + "height": 47 + } + }, + "88": { + "xOffset": 0, + "yOffset": 11, + "xAdvance": 43, + "rect": { + "x": 261, + "y": 611, + "width": 44, + "height": 47 + } + }, + "89": { + "xOffset": 0, + "yOffset": 11, + "xAdvance": 43, + "rect": { + "x": 307, + "y": 611, + "width": 44, + "height": 47 + } + }, + "90": { + "xOffset": 1, + "yOffset": 11, + "xAdvance": 39, + "rect": { + "x": 604, + "y": 611, + "width": 38, + "height": 47 + } + }, + "91": { + "xOffset": 4, + "yOffset": 11, + "xAdvance": 18, + "rect": { + "x": 330, + "y": 377, + "width": 14, + "height": 60 + } + }, + "92": { + "xOffset": 0, + "yOffset": 10, + "xAdvance": 18, + "rect": { + "x": 313, + "y": 560, + "width": 19, + "height": 49 + } + }, + "93": { + "xOffset": 1, + "yOffset": 11, + "xAdvance": 18, + "rect": { + "x": 346, + "y": 377, + "width": 14, + "height": 60 + } + }, + "94": { + "xOffset": 2, + "yOffset": 9, + "xAdvance": 30, + "rect": { + "x": 196, + "y": 710, + "width": 28, + "height": 27 + } + }, + "95": { + "xOffset": -1, + "yOffset": 65, + "xAdvance": 36, + "rect": { + "x": 405, + "y": 710, + "width": 39, + "height": 6 + } + }, + "96": { + "xOffset": 3, + "yOffset": 11, + "xAdvance": 21, + "rect": { + "x": 359, + "y": 710, + "width": 13, + "height": 10 + } + }, + "97": { + "xOffset": 2, + "yOffset": 23, + "xAdvance": 36, + "rect": { + "x": 411, + "y": 661, + "width": 32, + "height": 36 + } + }, + "98": { + "xOffset": 4, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 644, + "y": 560, + "width": 30, + "height": 48 + } + }, + "99": { + "xOffset": 3, + "yOffset": 23, + "xAdvance": 32, + "rect": { + "x": 479, + "y": 661, + "width": 30, + "height": 36 + } + }, + "100": { + "xOffset": 2, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 676, + "y": 560, + "width": 30, + "height": 48 + } + }, + "101": { + "xOffset": 2, + "yOffset": 23, + "xAdvance": 36, + "rect": { + "x": 445, + "y": 661, + "width": 32, + "height": 36 + } + }, + "102": { + "xOffset": 1, + "yOffset": 10, + "xAdvance": 18, + "rect": { + "x": 63, + "y": 611, + "width": 21, + "height": 48 + } + }, + "103": { + "xOffset": 2, + "yOffset": 22, + "xAdvance": 36, + "rect": { + "x": 259, + "y": 560, + "width": 31, + "height": 49 + } + }, + "104": { + "xOffset": 4, + "yOffset": 11, + "xAdvance": 36, + "rect": { + "x": 246, + "y": 661, + "width": 29, + "height": 47 + } + }, + "105": { + "xOffset": 4, + "yOffset": 11, + "xAdvance": 14, + "rect": { + "x": 348, + "y": 661, + "width": 7, + "height": 47 + } + }, + "106": { + "xOffset": -3, + "yOffset": 10, + "xAdvance": 14, + "rect": { + "x": 660, + "y": 66, + "width": 14, + "height": 61 + } + }, + "107": { + "xOffset": 4, + "yOffset": 11, + "xAdvance": 32, + "rect": { + "x": 277, + "y": 661, + "width": 29, + "height": 47 + } + }, + "108": { + "xOffset": 4, + "yOffset": 11, + "xAdvance": 14, + "rect": { + "x": 357, + "y": 661, + "width": 7, + "height": 47 + } + }, + "109": { + "xOffset": 4, + "yOffset": 23, + "xAdvance": 53, + "rect": { + "x": 591, + "y": 661, + "width": 46, + "height": 35 + } + }, + "110": { + "xOffset": 4, + "yOffset": 23, + "xAdvance": 36, + "rect": { + "x": 2, + "y": 710, + "width": 28, + "height": 35 + } + }, + "111": { + "xOffset": 2, + "yOffset": 23, + "xAdvance": 36, + "rect": { + "x": 376, + "y": 661, + "width": 33, + "height": 36 + } + }, + "112": { + "xOffset": 4, + "yOffset": 23, + "xAdvance": 36, + "rect": { + "x": 708, + "y": 560, + "width": 30, + "height": 48 + } + }, + "113": { + "xOffset": 2, + "yOffset": 23, + "xAdvance": 36, + "rect": { + "x": 2, + "y": 611, + "width": 30, + "height": 48 + } + }, + "114": { + "xOffset": 4, + "yOffset": 23, + "xAdvance": 21, + "rect": { + "x": 62, + "y": 710, + "width": 20, + "height": 35 + } + }, + "115": { + "xOffset": 2, + "yOffset": 23, + "xAdvance": 32, + "rect": { + "x": 511, + "y": 661, + "width": 29, + "height": 36 + } + }, + "116": { + "xOffset": 1, + "yOffset": 11, + "xAdvance": 18, + "rect": { + "x": 308, + "y": 661, + "width": 18, + "height": 47 + } + }, + "117": { + "xOffset": 4, + "yOffset": 24, + "xAdvance": 36, + "rect": { + "x": 32, + "y": 710, + "width": 28, + "height": 35 + } + }, + "118": { + "xOffset": 1, + "yOffset": 23, + "xAdvance": 32, + "rect": { + "x": 674, + "y": 661, + "width": 32, + "height": 35 + } + }, + "119": { + "xOffset": 0, + "yOffset": 23, + "xAdvance": 46, + "rect": { + "x": 542, + "y": 661, + "width": 47, + "height": 35 + } + }, + "120": { + "xOffset": 0, + "yOffset": 23, + "xAdvance": 32, + "rect": { + "x": 639, + "y": 661, + "width": 33, + "height": 35 + } + }, + "121": { + "xOffset": 1, + "yOffset": 23, + "xAdvance": 32, + "rect": { + "x": 544, + "y": 560, + "width": 32, + "height": 48 + } + }, + "122": { + "xOffset": 1, + "yOffset": 23, + "xAdvance": 32, + "rect": { + "x": 708, + "y": 661, + "width": 31, + "height": 35 + } + }, + "123": { + "xOffset": 2, + "yOffset": 9, + "xAdvance": 21, + "rect": { + "x": 65, + "y": 2, + "width": 20, + "height": 62 + } + }, + "124": { + "xOffset": 6, + "yOffset": 9, + "xAdvance": 17, + "rect": { + "x": 147, + "y": 2, + "width": 6, + "height": 62 + } + }, + "125": { + "xOffset": 1, + "yOffset": 9, + "xAdvance": 21, + "rect": { + "x": 87, + "y": 2, + "width": 20, + "height": 62 + } + }, + "126": { + "xOffset": 3, + "yOffset": 29, + "xAdvance": 37, + "rect": { + "x": 324, + "y": 710, + "width": 33, + "height": 12 + } + }, + "19978": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 476, + "y": 439, + "width": 58, + "height": 58 + } + }, + "20010": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 676, + "y": 66, + "width": 61, + "height": 60 + } + }, + "20026": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 118, + "y": 377, + "width": 55, + "height": 60 + } + }, + "20080": { + "xOffset": 5, + "yOffset": 8, + "xAdvance": 64, + "rect": { + "x": 277, + "y": 500, + "width": 57, + "height": 57 + } + }, + "20154": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 2, + "y": 129, + "width": 61, + "height": 60 + } + }, + "20215": { + "xOffset": 2, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 65, + "y": 129, + "width": 61, + "height": 60 + } + }, + "20302": { + "xOffset": 2, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 128, + "y": 129, + "width": 61, + "height": 60 + } + }, + "20313": { + "xOffset": 2, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 362, + "y": 377, + "width": 61, + "height": 59 + } + }, + "20323": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 307, + "y": 66, + "width": 58, + "height": 61 + } + }, + "20803": { + "xOffset": 3, + "yOffset": 8, + "xAdvance": 64, + "rect": { + "x": 155, + "y": 500, + "width": 59, + "height": 57 + } + }, + "20805": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 490, + "y": 253, + "width": 58, + "height": 60 + } + }, + "20813": { + "xOffset": 3, + "yOffset": 3, + "xAdvance": 64, + "rect": { + "x": 2, + "y": 66, + "width": 59, + "height": 61 + } + }, + "20853": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 2, + "y": 253, + "width": 59, + "height": 60 + } + }, + "20869": { + "xOffset": 7, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 175, + "y": 377, + "width": 52, + "height": 60 + } + }, + "20891": { + "xOffset": 4, + "yOffset": 7, + "xAdvance": 64, + "rect": { + "x": 656, + "y": 439, + "width": 57, + "height": 58 + } + }, + "20986": { + "xOffset": 7, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 229, + "y": 377, + "width": 52, + "height": 60 + } + }, + "20998": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 632, + "y": 129, + "width": 60, + "height": 60 + } + }, + "21015": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 2, + "y": 439, + "width": 57, + "height": 59 + } + }, + "21040": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 61, + "y": 439, + "width": 57, + "height": 59 + } + }, + "21069": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 63, + "y": 66, + "width": 59, + "height": 61 + } + }, + "21097": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 542, + "y": 315, + "width": 57, + "height": 60 + } + }, + "21160": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 550, + "y": 253, + "width": 58, + "height": 60 + } + }, + "21215": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 407, + "y": 2, + "width": 60, + "height": 61 + } + }, + "21319": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 610, + "y": 253, + "width": 58, + "height": 60 + } + }, + "21330": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 670, + "y": 253, + "width": 58, + "height": 60 + } + }, + "21407": { + "xOffset": 3, + "yOffset": 7, + "xAdvance": 64, + "rect": { + "x": 216, + "y": 500, + "width": 59, + "height": 57 + } + }, + "21475": { + "xOffset": 9, + "yOffset": 11, + "xAdvance": 64, + "rect": { + "x": 563, + "y": 500, + "width": 48, + "height": 52 + } + }, + "21487": { + "xOffset": 4, + "yOffset": 8, + "xAdvance": 64, + "rect": { + "x": 336, + "y": 500, + "width": 59, + "height": 56 + } + }, + "21518": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 2, + "y": 191, + "width": 60, + "height": 60 + } + }, + "22478": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 191, + "y": 129, + "width": 61, + "height": 60 + } + }, + "22681": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 64, + "y": 191, + "width": 60, + "height": 60 + } + }, + "22823": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 126, + "y": 191, + "width": 60, + "height": 60 + } + }, + "22825": { + "xOffset": 3, + "yOffset": 8, + "xAdvance": 64, + "rect": { + "x": 93, + "y": 500, + "width": 60, + "height": 57 + } + }, + "23041": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 488, + "y": 377, + "width": 60, + "height": 59 + } + }, + "23432": { + "xOffset": 5, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 2, + "y": 377, + "width": 56, + "height": 60 + } + }, + "23448": { + "xOffset": 5, + "yOffset": 3, + "xAdvance": 64, + "rect": { + "x": 546, + "y": 66, + "width": 55, + "height": 61 + } + }, + "23453": { + "xOffset": 5, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 2, + "y": 500, + "width": 55, + "height": 58 + } + }, + "23567": { + "xOffset": 2, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 425, + "y": 377, + "width": 61, + "height": 59 + } + }, + "24050": { + "xOffset": 6, + "yOffset": 7, + "xAdvance": 64, + "rect": { + "x": 505, + "y": 500, + "width": 56, + "height": 55 + } + }, + "24065": { + "xOffset": 4, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 60, + "y": 377, + "width": 56, + "height": 60 + } + }, + "24182": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 124, + "y": 66, + "width": 59, + "height": 61 + } + }, + "24314": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 63, + "y": 253, + "width": 59, + "height": 60 + } + }, + "24320": { + "xOffset": 4, + "yOffset": 8, + "xAdvance": 64, + "rect": { + "x": 397, + "y": 500, + "width": 58, + "height": 56 + } + }, + "24339": { + "xOffset": 11, + "yOffset": 8, + "xAdvance": 64, + "rect": { + "x": 457, + "y": 500, + "width": 46, + "height": 56 + } + }, + "24403": { + "xOffset": 7, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 178, + "y": 439, + "width": 50, + "height": 59 + } + }, + "24449": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 254, + "y": 129, + "width": 61, + "height": 60 + } + }, + "24471": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 188, + "y": 191, + "width": 60, + "height": 60 + } + }, + "25552": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 250, + "y": 191, + "width": 60, + "height": 60 + } + }, + "25910": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 185, + "y": 66, + "width": 59, + "height": 61 + } + }, + "25928": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 155, + "y": 2, + "width": 61, + "height": 61 + } + }, + "26009": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 317, + "y": 129, + "width": 61, + "height": 60 + } + }, + "26102": { + "xOffset": 5, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 673, + "y": 377, + "width": 58, + "height": 59 + } + }, + "26361": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 2, + "y": 315, + "width": 58, + "height": 60 + } + }, + "26368": { + "xOffset": 4, + "yOffset": 7, + "xAdvance": 64, + "rect": { + "x": 536, + "y": 439, + "width": 58, + "height": 58 + } + }, + "26395": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 120, + "y": 439, + "width": 56, + "height": 59 + } + }, + "26408": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 62, + "y": 315, + "width": 58, + "height": 60 + } + }, + "26426": { + "xOffset": 2, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 380, + "y": 129, + "width": 61, + "height": 60 + } + }, + "26448": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 124, + "y": 253, + "width": 59, + "height": 60 + } + }, + "26524": { + "xOffset": 3, + "yOffset": 6, + "xAdvance": 64, + "rect": { + "x": 230, + "y": 439, + "width": 60, + "height": 58 + } + }, + "27425": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 218, + "y": 2, + "width": 61, + "height": 61 + } + }, + "27493": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 367, + "y": 66, + "width": 58, + "height": 61 + } + }, + "27494": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 550, + "y": 377, + "width": 60, + "height": 59 + } + }, + "27599": { + "xOffset": 3, + "yOffset": 3, + "xAdvance": 64, + "rect": { + "x": 281, + "y": 2, + "width": 61, + "height": 61 + } + }, + "27963": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 185, + "y": 253, + "width": 59, + "height": 60 + } + }, + "28608": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 443, + "y": 129, + "width": 61, + "height": 60 + } + }, + "28857": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 312, + "y": 191, + "width": 60, + "height": 60 + } + }, + "31181": { + "xOffset": 2, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 122, + "y": 315, + "width": 58, + "height": 60 + } + }, + "31526": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 246, + "y": 253, + "width": 59, + "height": 60 + } + }, + "31569": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 307, + "y": 253, + "width": 59, + "height": 60 + } + }, + "31574": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 469, + "y": 2, + "width": 60, + "height": 61 + } + }, + "31665": { + "xOffset": 2, + "yOffset": 3, + "xAdvance": 64, + "rect": { + "x": 531, + "y": 2, + "width": 60, + "height": 61 + } + }, + "31918": { + "xOffset": 2, + "yOffset": 3, + "xAdvance": 64, + "rect": { + "x": 344, + "y": 2, + "width": 61, + "height": 61 + } + }, + "32043": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 182, + "y": 315, + "width": 58, + "height": 60 + } + }, + "32418": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 354, + "y": 439, + "width": 59, + "height": 58 + } + }, + "32493": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 593, + "y": 2, + "width": 60, + "height": 61 + } + }, + "32511": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 374, + "y": 191, + "width": 60, + "height": 60 + } + }, + "32791": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 436, + "y": 191, + "width": 60, + "height": 60 + } + }, + "33258": { + "xOffset": 10, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 283, + "y": 377, + "width": 45, + "height": 60 + } + }, + "33457": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 246, + "y": 66, + "width": 59, + "height": 61 + } + }, + "33609": { + "xOffset": 4, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 242, + "y": 315, + "width": 58, + "height": 60 + } + }, + "33719": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 368, + "y": 253, + "width": 59, + "height": 60 + } + }, + "33829": { + "xOffset": 4, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 601, + "y": 315, + "width": 57, + "height": 60 + } + }, + "34917": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 498, + "y": 191, + "width": 60, + "height": 60 + } + }, + "35745": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 560, + "y": 191, + "width": 60, + "height": 60 + } + }, + "36141": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 302, + "y": 315, + "width": 58, + "height": 60 + } + }, + "36153": { + "xOffset": 5, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 603, + "y": 66, + "width": 55, + "height": 61 + } + }, + "36824": { + "xOffset": 4, + "yOffset": 6, + "xAdvance": 64, + "rect": { + "x": 612, + "y": 377, + "width": 59, + "height": 59 + } + }, + "36896": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 429, + "y": 253, + "width": 59, + "height": 60 + } + }, + "37327": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 415, + "y": 439, + "width": 59, + "height": 58 + } + }, + "37329": { + "xOffset": 3, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 292, + "y": 439, + "width": 60, + "height": 58 + } + }, + "38047": { + "xOffset": 2, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 362, + "y": 315, + "width": 58, + "height": 60 + } + }, + "38081": { + "xOffset": 2, + "yOffset": 5, + "xAdvance": 64, + "rect": { + "x": 506, + "y": 129, + "width": 61, + "height": 60 + } + }, + "38134": { + "xOffset": 3, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 622, + "y": 191, + "width": 60, + "height": 60 + } + }, + "38228": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 655, + "y": 2, + "width": 60, + "height": 61 + } + }, + "38431": { + "xOffset": 6, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 422, + "y": 315, + "width": 58, + "height": 60 + } + }, + "38450": { + "xOffset": 5, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 487, + "y": 66, + "width": 57, + "height": 61 + } + }, + "38477": { + "xOffset": 5, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 482, + "y": 315, + "width": 58, + "height": 60 + } + }, + "38480": { + "xOffset": 5, + "yOffset": 6, + "xAdvance": 64, + "rect": { + "x": 596, + "y": 439, + "width": 58, + "height": 58 + } + }, + "38543": { + "xOffset": 5, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 660, + "y": 315, + "width": 57, + "height": 60 + } + }, + "38599": { + "xOffset": 3, + "yOffset": 3, + "xAdvance": 64, + "rect": { + "x": 427, + "y": 66, + "width": 58, + "height": 61 + } + }, + "39569": { + "xOffset": 2, + "yOffset": 4, + "xAdvance": 64, + "rect": { + "x": 569, + "y": 129, + "width": 61, + "height": 60 + } + } + }, + "kerningDict": { + "2097217": -3, + "2097236": -1, + "2097241": -1, + "3211313": -4, + "4259872": -3, + "4259924": -4, + "4259926": -4, + "4259927": -2, + "4259929": -4, + "4259958": -1, + "4259959": -1, + "4259961": -1, + "4587564": -7, + "4587566": -7, + "4587585": -3, + "4980768": -2, + "4980820": -4, + "4980822": -4, + "4980823": -4, + "4980825": -4, + "4980857": -2, + "5242912": -1, + "5242924": -8, + "5242926": -8, + "5242945": -4, + "5374036": -1, + "5374038": -1, + "5374039": -1, + "5374041": -1, + "5505056": -1, + "5505068": -7, + "5505069": -3, + "5505070": -7, + "5505082": -7, + "5505083": -7, + "5505089": -4, + "5505103": -1, + "5505121": -7, + "5505123": -7, + "5505125": -7, + "5505129": -2, + "5505135": -7, + "5505138": -2, + "5505139": -7, + "5505141": -2, + "5505143": -3, + "5505145": -3, + "5636140": -5, + "5636141": -3, + "5636142": -5, + "5636154": -2, + "5636155": -2, + "5636161": -4, + "5636193": -4, + "5636197": -3, + "5636201": -1, + "5636207": -3, + "5636210": -2, + "5636213": -2, + "5636217": -2, + "5701676": -3, + "5701677": -1, + "5701678": -3, + "5701690": -1, + "5701691": -1, + "5701697": -2, + "5701729": -2, + "5701733": -1, + "5701743": -1, + "5701746": -1, + "5701749": -1, + "5832736": -1, + "5832748": -8, + "5832749": -5, + "5832750": -8, + "5832762": -3, + "5832763": -4, + "5832769": -4, + "5832801": -4, + "5832805": -5, + "5832809": -2, + "5832815": -5, + "5832816": -4, + "5832817": -5, + "5832821": -3, + "5832822": -3, + "6684774": -1, + "7471148": -3, + "7471150": -3, + "7733292": -4, + "7733294": -4, + "7798828": -3, + "7798830": -3, + "7929900": -4, + "7929902": -4 + } + } + ] + ], + 0, + 0, + [ + 0 + ], + [ + 21 + ], + [ + 32 + ] + ], + [ + [ + { + "name": "1655112624336", + "rect": [ + 0, + 0, + 564, + 882 + ], + "offset": [ + 0, + 0 + ], + "originalSize": [ + 564, + 882 + ], + "capInsets": [ + 192, + 176, + 198, + 155 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 2 + ], + [ + 6 + ] + ], + [ + [ + { + "name": "default_sprite", + "rect": [ + 0, + 2, + 40, + 36 + ], + "offset": [ + 0, + 0 + ], + "originalSize": [ + 40, + 40 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 2 + ], + [ + 3 + ] + ], + [ + [ + { + "name": "sheep_down_0", + "rect": [ + 2, + 61, + 224, + 87 + ], + "offset": [ + 0, + -25 + ], + "originalSize": [ + 228, + 159 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 2 + ], + [ + 33 + ] + ], + [ + [ + { + "name": "normalFont", + "rect": [ + 2, + 2, + 737, + 742 + ], + "offset": [ + -0.5, + 20 + ], + "originalSize": [ + 742, + 786 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 2 + ], + [ + 7 + ] + ], + [ + [ + { + "name": "1655112479313", + "rect": [ + 0, + 0, + 402, + 370 + ], + "offset": [ + 0, + 0 + ], + "originalSize": [ + 402, + 370 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 2 + ], + [ + 5 + ] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + { + "name": "sheep_jump_3", + "rect": [ + 26, + 24, + 152, + 115 + ], + "offset": [ + -12, + -2 + ], + "originalSize": [ + 228, + 159 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 2 + ], + [ + 34 + ] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,0", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + [ + 45, + "spineboy", + "\nspineboy.png\nsize:1024,256\nformat: RGBA8888\nfilter: Linear,Linear\nrepeat: none\neye_indifferent\n rotate: true\n xy: 389, 5\n size: 56, 53\n orig: 56, 53\n offset: 0, 0\n index: -1\neye_surprised\n rotate: false\n xy: 580, 34\n size: 56, 53\n orig: 56, 53\n offset: 0, 0\n index: -1\nfront_bracer\n rotate: false\n xy: 732, 85\n size: 35, 48\n orig: 35, 48\n offset: 0, 0\n index: -1\nfront_fist_closed\n rotate: false\n xy: 556, 91\n size: 45, 49\n orig: 45, 49\n offset: 0, 0\n index: -1\nfront_fist_open\n rotate: false\n xy: 668, 32\n size: 52, 52\n orig: 52, 52\n offset: 0, 0\n index: -1\nfront_foot\n rotate: false\n xy: 924, 201\n size: 76, 41\n orig: 76, 41\n offset: 0, 0\n index: -1\nfront_foot_bend1\n rotate: false\n xy: 845, 200\n size: 77, 42\n orig: 77, 42\n offset: 0, 0\n index: -1\nfront_foot_bend2\n rotate: false\n xy: 778, 186\n size: 65, 56\n orig: 65, 56\n offset: 0, 0\n index: -1\nfront_shin\n rotate: true\n xy: 444, 91\n size: 49, 110\n orig: 49, 110\n offset: 0, 0\n index: -1\nfront_thigh\n rotate: true\n xy: 603, 89\n size: 29, 67\n orig: 29, 67\n offset: 0, 0\n index: -1\nfront_upper_arm\n rotate: true\n xy: 672, 86\n size: 32, 58\n orig: 32, 58\n offset: 0, 0\n index: -1\ngoggles\n rotate: false\n xy: 444, 142\n size: 157, 100\n orig: 157, 100\n offset: 0, 0\n index: -1\ngun\n rotate: false\n xy: 603, 120\n size: 126, 122\n orig: 126, 122\n offset: 0, 0\n index: -1\nhead\n rotate: false\n xy: 279, 63\n size: 163, 179\n orig: 163, 179\n offset: 0, 0\n index: -1\nmouth_grind\n rotate: false\n xy: 845, 163\n size: 56, 35\n orig: 56, 35\n offset: 0, 0\n index: -1\nmouth_oooo\n rotate: false\n xy: 842, 126\n size: 56, 35\n orig: 56, 35\n offset: 0, 0\n index: -1\nmouth_smile\n rotate: false\n xy: 769, 97\n size: 56, 35\n orig: 56, 35\n offset: 0, 0\n index: -1\nmuzzle\n rotate: false\n xy: 2, 2\n size: 275, 240\n orig: 277, 240\n offset: 0, 0\n index: -1\nneck\n rotate: false\n xy: 903, 173\n size: 22, 25\n orig: 22, 25\n offset: 0, 0\n index: -1\nrear_bracer\n rotate: false\n xy: 722, 40\n size: 34, 43\n orig: 34, 43\n offset: 0, 0\n index: -1\nrear_foot\n rotate: false\n xy: 444, 11\n size: 68, 36\n orig: 68, 36\n offset: 0, 0\n index: -1\nrear_foot_bend1\n rotate: false\n xy: 444, 49\n size: 70, 40\n orig: 70, 40\n offset: 0, 0\n index: -1\nrear_foot_bend2\n rotate: false\n xy: 778, 134\n size: 62, 50\n orig: 62, 50\n offset: 0, 0\n index: -1\nrear_shin\n rotate: false\n xy: 731, 135\n size: 45, 107\n orig: 45, 107\n offset: 0, 0\n index: -1\nrear_thigh\n rotate: true\n xy: 516, 50\n size: 39, 62\n orig: 39, 62\n offset: 0, 0\n index: -1\nrear_upper_arm\n rotate: false\n xy: 638, 35\n size: 28, 52\n orig: 28, 52\n offset: 0, 0\n index: -1\ntorso\n rotate: true\n xy: 279, 2\n size: 59, 108\n orig: 59, 108\n offset: 0, 0\n index: -1\n", + [ + "spineboy.png" + ], + { + "bones": [ + { + "name": "hip", + "y": 247.48 + }, + { + "name": "front_thigh", + "parent": "hip", + "length": 74.8, + "x": -17.45, + "y": -11.64, + "rotation": -95.51, + "color": "00ff04ff" + }, + { + "name": "rear_thigh", + "parent": "hip", + "length": 85.71, + "x": 8.91, + "y": -5.62, + "rotation": -72.54, + "color": "ff000dff" + }, + { + "name": "torso", + "parent": "hip", + "length": 127.55, + "x": -1.61, + "y": 4.9, + "rotation": 103.82, + "color": "e0da19ff" + }, + { + "name": "front_shin", + "parent": "front_thigh", + "length": 128.76, + "x": 78.69, + "y": 1.6, + "rotation": -2.21, + "inheritScale": false, + "color": "00ff04ff" + }, + { + "name": "front_upper_arm", + "parent": "torso", + "length": 69.45, + "x": 103.75, + "y": 19.32, + "rotation": 168.37, + "color": "00ff04ff" + }, + { + "name": "neck", + "parent": "torso", + "length": 25.45, + "x": 127.49, + "y": -0.3, + "rotation": -31.53, + "color": "e0da19ff" + }, + { + "name": "rear_shin", + "parent": "rear_thigh", + "length": 121.87, + "x": 86.1, + "y": -1.32, + "rotation": -19.83, + "color": "ff000dff" + }, + { + "name": "rear_upper_arm", + "parent": "torso", + "length": 51.93, + "x": 92.35, + "y": -19.22, + "rotation": -169.55, + "color": "ff000dff" + }, + { + "name": "front_bracer", + "parent": "front_upper_arm", + "length": 40.57, + "x": 68.8, + "y": -0.68, + "rotation": 18.29, + "color": "00ff04ff" + }, + { + "name": "front_foot", + "parent": "front_shin", + "length": 91.34, + "x": 128.75, + "y": -0.33, + "rotation": 77.9, + "color": "00ff04ff" + }, + { + "name": "head", + "parent": "neck", + "length": 263.57, + "x": 27.66, + "y": -0.25, + "rotation": 23.18, + "color": "e0da19ff" + }, + { + "name": "rear_bracer", + "parent": "rear_upper_arm", + "length": 34.55, + "x": 51.35, + "rotation": 23.15, + "color": "ff000dff" + }, + { + "name": "rear_foot", + "parent": "rear_shin", + "length": 82.57, + "x": 121.45, + "y": -0.75, + "rotation": 69.3, + "color": "ff000dff" + }, + { + "name": "front_fist", + "parent": "front_bracer", + "length": 65.38, + "x": 40.56, + "y": 0.19, + "rotation": 12.43, + "color": "00ff04ff" + }, + { + "name": "gun", + "parent": "rear_bracer", + "length": 43.1, + "x": 34.42, + "y": -0.45, + "rotation": 5.34, + "color": "ff000dff" + }, + { + "name": "gunTip", + "parent": "gun", + "x": 201.04, + "y": 52.13, + "rotation": 6.83, + "color": "ff000dff" + } + ], + "slots": [ + { + "name": "rear_upper_arm", + "bone": "rear_upper_arm", + "attachment": "rear_upper_arm" + }, + { + "name": "rear_bracer", + "bone": "rear_bracer", + "attachment": "rear_bracer" + }, + { + "name": "gun", + "bone": "gun", + "attachment": "gun" + }, + { + "name": "rear_foot", + "bone": "rear_foot", + "attachment": "rear_foot" + }, + { + "name": "rear_thigh", + "bone": "rear_thigh", + "attachment": "rear_thigh" + }, + { + "name": "rear_shin", + "bone": "rear_shin", + "attachment": "rear_shin" + }, + { + "name": "neck", + "bone": "neck", + "attachment": "neck" + }, + { + "name": "torso", + "bone": "torso", + "attachment": "torso" + }, + { + "name": "front_upper_arm", + "bone": "front_upper_arm", + "attachment": "front_upper_arm" + }, + { + "name": "head", + "bone": "head", + "attachment": "head" + }, + { + "name": "eye", + "bone": "head", + "attachment": "eye_indifferent" + }, + { + "name": "front_thigh", + "bone": "front_thigh", + "attachment": "front_thigh" + }, + { + "name": "front_foot", + "bone": "front_foot", + "attachment": "front_foot" + }, + { + "name": "front_shin", + "bone": "front_shin", + "attachment": "front_shin" + }, + { + "name": "mouth", + "bone": "head", + "attachment": "mouth_smile" + }, + { + "name": "goggles", + "bone": "head", + "attachment": "goggles" + }, + { + "name": "front_bracer", + "bone": "front_bracer", + "attachment": "front_bracer" + }, + { + "name": "front_fist", + "bone": "front_fist", + "attachment": "front_fist_closed" + }, + { + "name": "muzzle", + "bone": "gunTip", + "additive": true + } + ], + "skins": { + "default": { + "eye": { + "eye_indifferent": { + "x": 85.72, + "y": -28.18, + "rotation": -70.63, + "width": 93, + "height": 89 + }, + "eye_surprised": { + "x": 85.72, + "y": -28.18, + "rotation": -70.63, + "width": 93, + "height": 89 + } + }, + "front_bracer": { + "front_bracer": { + "x": 12.03, + "y": -1.67, + "rotation": 79.59, + "width": 58, + "height": 80 + } + }, + "front_fist": { + "front_fist_closed": { + "x": 35.49, + "y": 6, + "rotation": 67.16, + "width": 75, + "height": 82 + }, + "front_fist_open": { + "x": 39.56, + "y": 7.76, + "rotation": 67.16, + "width": 86, + "height": 87 + } + }, + "front_foot": { + "front_foot": { + "x": 29.51, + "y": 7.83, + "rotation": 18.68, + "width": 126, + "height": 69 + }, + "front_foot_bend1": { + "x": 29.51, + "y": 7.83, + "rotation": 18.68, + "width": 128, + "height": 70 + }, + "front_foot_bend2": { + "x": 16.07, + "y": 13.83, + "rotation": 18.68, + "width": 108, + "height": 93 + } + }, + "front_shin": { + "front_shin": { + "x": 55.11, + "y": -3.54, + "rotation": 96.59, + "width": 82, + "height": 184 + } + }, + "front_thigh": { + "front_thigh": { + "x": 42.47, + "y": 4.44, + "rotation": 84.86, + "width": 48, + "height": 112 + } + }, + "front_upper_arm": { + "front_upper_arm": { + "x": 28.3, + "y": 7.37, + "rotation": 97.89, + "width": 54, + "height": 97 + } + }, + "goggles": { + "goggles": { + "x": 97.07, + "y": 6.54, + "rotation": -70.63, + "width": 261, + "height": 166 + } + }, + "gun": { + "gun": { + "x": 77.3, + "y": 16.4, + "rotation": 60.82, + "width": 210, + "height": 203 + } + }, + "head": { + "head": { + "x": 128.95, + "y": 0.29, + "rotation": -70.63, + "width": 271, + "height": 298 + } + }, + "mouth": { + "mouth_grind": { + "x": 23.68, + "y": -32.23, + "rotation": -70.63, + "width": 93, + "height": 59 + }, + "mouth_oooo": { + "x": 23.68, + "y": -32.23, + "rotation": -70.63, + "width": 93, + "height": 59 + }, + "mouth_smile": { + "x": 23.68, + "y": -32.23, + "rotation": -70.63, + "width": 93, + "height": 59 + } + }, + "muzzle": { + "muzzle": { + "x": 18.25, + "y": 5.44, + "rotation": 0.15, + "width": 462, + "height": 400 + } + }, + "neck": { + "neck": { + "x": 9.76, + "y": -3.01, + "rotation": -55.22, + "width": 36, + "height": 41 + } + }, + "rear_bracer": { + "rear_bracer": { + "x": 11.15, + "y": -2.2, + "rotation": 66.17, + "width": 56, + "height": 72 + } + }, + "rear_foot": { + "rear_foot": { + "x": 31.51, + "y": 3.57, + "rotation": 23.07, + "width": 113, + "height": 60 + }, + "rear_foot_bend1": { + "x": 34.39, + "y": 4.8, + "rotation": 23.07, + "width": 117, + "height": 66 + }, + "rear_foot_bend2": { + "x": 30.38, + "y": 12.62, + "rotation": 23.07, + "width": 103, + "height": 83 + } + }, + "rear_shin": { + "rear_shin": { + "x": 58.29, + "y": -2.75, + "rotation": 92.37, + "width": 75, + "height": 178 + } + }, + "rear_thigh": { + "rear_thigh": { + "x": 33.1, + "y": -4.11, + "rotation": 72.54, + "width": 65, + "height": 104 + } + }, + "rear_upper_arm": { + "rear_upper_arm": { + "x": 21.12, + "y": 4.08, + "rotation": 89.32, + "width": 47, + "height": 87 + } + }, + "torso": { + "torso": { + "x": 63.61, + "y": 7.12, + "rotation": -94.53, + "width": 98, + "height": 180 + } + } + } + }, + "events": { + "footstep": {}, + "headAttach": { + "int": 3, + "float": 4 + }, + "headBehind": { + "int": 5, + "float": 6, + "string": "setup" + }, + "headPop": { + "int": 1, + "float": 2 + } + }, + "animations": { + "death": { + "slots": { + "eye": { + "attachment": [ + { + "time": 0, + "name": "eye_surprised" + }, + { + "time": 0.4666, + "name": "eye_indifferent" + }, + { + "time": 2.2333, + "name": "eye_surprised" + }, + { + "time": 4.5333, + "name": "eye_indifferent" + } + ] + }, + "front_fist": { + "attachment": [ + { + "time": 0, + "name": "front_fist_open" + } + ] + }, + "mouth": { + "attachment": [ + { + "time": 0, + "name": "mouth_oooo" + }, + { + "time": 2.2333, + "name": "mouth_grind" + }, + { + "time": 4.5333, + "name": "mouth_oooo" + } + ] + } + }, + "bones": { + "head": { + "rotate": [ + { + "time": 0, + "angle": -2.82 + }, + { + "time": 0.1333, + "angle": -28.74 + }, + { + "time": 0.2333, + "angle": 11.42 + }, + { + "time": 0.3333, + "angle": -50.24 + }, + { + "time": 0.4, + "angle": -72.66, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": -72.66 + }, + { + "time": 0.5, + "angle": -20.24 + }, + { + "time": 0.5666, + "angle": -85.28, + "curve": "stepped" + }, + { + "time": 0.9333, + "angle": -85.28, + "curve": "stepped" + }, + { + "time": 2.2333, + "angle": -85.28 + }, + { + "time": 2.5, + "angle": -51.96, + "curve": "stepped" + }, + { + "time": 4.5333, + "angle": -51.96 + }, + { + "time": 4.6666, + "angle": -85.28 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "neck": { + "rotate": [ + { + "time": 0, + "angle": -2.82 + }, + { + "time": 0.1333, + "angle": 12.35 + }, + { + "time": 0.2333, + "angle": 29.89 + }, + { + "time": 0.3, + "angle": 70.36 + }, + { + "time": 0.4, + "angle": -10.22, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": -10.22 + }, + { + "time": 0.5, + "angle": 2.92 + }, + { + "time": 0.5666, + "angle": 47.94, + "curve": "stepped" + }, + { + "time": 2.2333, + "angle": 47.94 + }, + { + "time": 2.5, + "angle": 18.5, + "curve": "stepped" + }, + { + "time": 4.5333, + "angle": 18.5 + }, + { + "time": 4.6666, + "angle": 47.94 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "torso": { + "rotate": [ + { + "time": 0, + "angle": -8.61 + }, + { + "time": 0.1333, + "angle": 28.19 + }, + { + "time": 0.2666, + "angle": -280.19 + }, + { + "time": 0.4, + "angle": -237.22, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": -237.22 + }, + { + "time": 0.5, + "angle": 76.03, + "curve": "stepped" + }, + { + "time": 0.8, + "angle": 76.03, + "curve": "stepped" + }, + { + "time": 0.9333, + "angle": 76.03, + "curve": "stepped" + }, + { + "time": 2.2333, + "angle": 76.03 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.9333, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 2.2333, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -38.85 + }, + { + "time": 0.1333, + "angle": -299.58 + }, + { + "time": 0.2666, + "angle": -244.74 + }, + { + "time": 0.4, + "angle": -292.35 + }, + { + "time": 0.4333, + "angle": -315.84 + }, + { + "time": 0.5, + "angle": -347.94 + }, + { + "time": 0.7, + "angle": -347.33, + "curve": "stepped" + }, + { + "time": 2.2333, + "angle": -347.33 + }, + { + "time": 2.7, + "angle": -290.68 + }, + { + "time": 2.7666, + "angle": -285.1 + }, + { + "time": 4.6666, + "angle": -290.68 + }, + { + "time": 4.8, + "angle": 8.61 + }, + { + "time": 4.8666, + "angle": 10.94 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -44.69 + }, + { + "time": 0.1333, + "angle": 112.26 + }, + { + "time": 0.2666, + "angle": 129.07 + }, + { + "time": 0.4, + "angle": 134.94, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": 134.94 + }, + { + "time": 0.5666, + "angle": 172.6, + "curve": "stepped" + }, + { + "time": 0.9333, + "angle": 172.6, + "curve": "stepped" + }, + { + "time": 2.2333, + "angle": 172.6 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_bracer": { + "rotate": [ + { + "time": 0, + "angle": 21.88 + }, + { + "time": 0.1333, + "angle": 11.48 + }, + { + "time": 0.2666, + "angle": -18.81 + }, + { + "time": 0.4, + "angle": -18.92 + }, + { + "time": 0.4333, + "angle": -18.28 + }, + { + "time": 0.5, + "angle": 60.61 + }, + { + "time": 0.7, + "angle": -18.87, + "curve": "stepped" + }, + { + "time": 2.2333, + "angle": -18.87 + }, + { + "time": 2.7, + "angle": -1.95, + "curve": "stepped" + }, + { + "time": 4.6666, + "angle": -1.95 + }, + { + "time": 4.8, + "angle": 34.55 + }, + { + "time": 4.9333, + "angle": -18.74 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_fist": { + "rotate": [ + { + "time": 0, + "angle": -2.33 + }, + { + "time": 0.2666, + "angle": 26.34 + }, + { + "time": 0.7, + "angle": -6.07, + "curve": "stepped" + }, + { + "time": 2.2333, + "angle": -6.07 + }, + { + "time": 2.7, + "angle": 5.72, + "curve": "stepped" + }, + { + "time": 4.6666, + "angle": 5.72 + }, + { + "time": 4.8666, + "angle": -6.52 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_bracer": { + "rotate": [ + { + "time": 0, + "angle": 10.36 + }, + { + "time": 0.1333, + "angle": -23.12 + }, + { + "time": 0.2666, + "angle": -23.11 + }, + { + "time": 0.4, + "angle": -23.16, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": -23.16 + }, + { + "time": 0.5666, + "angle": -23.2, + "curve": "stepped" + }, + { + "time": 0.9333, + "angle": -23.2, + "curve": "stepped" + }, + { + "time": 2.2333, + "angle": -23.2 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": -2.78 + }, + { + "time": 0.1333, + "angle": -24.58 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "hip": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 0.9333, + "angle": 0, + "curve": "stepped" + }, + { + "time": 2.2333, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + }, + { + "time": 0.2, + "x": 50.34, + "y": 151.73 + }, + { + "time": 0.4, + "x": 5.16, + "y": -119.64, + "curve": "stepped" + }, + { + "time": 0.4333, + "x": 5.16, + "y": -119.64 + }, + { + "time": 0.5, + "x": 50.34, + "y": -205.18, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 50.34, + "y": -205.18, + "curve": "stepped" + }, + { + "time": 0.9333, + "x": 50.34, + "y": -205.18, + "curve": "stepped" + }, + { + "time": 2.2333, + "x": 50.34, + "y": -205.18 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.1333, + "angle": 8.47 + }, + { + "time": 0.2666, + "angle": 115.95 + }, + { + "time": 0.4, + "angle": 180.66, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": 180.66 + }, + { + "time": 0.5, + "angle": 155.22 + }, + { + "time": 0.6, + "angle": 97.73 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.1333, + "angle": -27.37 + }, + { + "time": 0.2666, + "angle": -35.1 + }, + { + "time": 0.4, + "angle": -37.72, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": -37.72 + }, + { + "time": 0.5, + "angle": -40.06 + }, + { + "time": 0.6, + "angle": 2.76 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_thigh": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.1333, + "angle": 70.45 + }, + { + "time": 0.2666, + "angle": 155.34 + }, + { + "time": 0.4, + "angle": 214.31, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": 214.31 + }, + { + "time": 0.5, + "angle": 169.67 + }, + { + "time": 0.8, + "angle": 83.27 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_shin": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.1333, + "angle": 18.93 + }, + { + "time": 0.2666, + "angle": -21.04 + }, + { + "time": 0.4, + "angle": -29.93, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": -29.93 + }, + { + "time": 0.5, + "angle": -16.79 + }, + { + "time": 0.8, + "angle": 7.77 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_foot": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.1333, + "angle": -11.62 + }, + { + "time": 0.4, + "angle": -45.59, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": -45.59 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_foot": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.4, + "angle": -48.75, + "curve": "stepped" + }, + { + "time": 0.4333, + "angle": -48.75 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "gunTip": { + "rotate": [ + { + "time": 0, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + } + } + }, + "hit": { + "slots": { + "front_fist": { + "attachment": [ + { + "time": 0.1666, + "name": "front_fist_open" + } + ] + }, + "mouth": { + "attachment": [ + { + "time": 0, + "name": "mouth_grind" + }, + { + "time": 0.3333, + "name": "mouth_smile" + } + ] + } + }, + "bones": { + "torso": { + "rotate": [ + { + "time": 0, + "angle": 56.42 + }, + { + "time": 0.3333, + "angle": 8.89 + } + ] + }, + "neck": { + "rotate": [ + { + "time": 0, + "angle": 35.38 + }, + { + "time": 0.2333, + "angle": 24.94 + } + ] + }, + "head": { + "rotate": [ + { + "time": 0, + "angle": 10.21 + }, + { + "time": 0.3333, + "angle": -41.3 + } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -310.92, + "curve": [ + 0.38, + 0.53, + 0.744, + 1 + ] + }, + { + "time": 0.3333, + "angle": -112.59 + } + ], + "translate": [ + { + "time": 0, + "x": 7.23, + "y": -13.13 + } + ] + }, + "front_bracer": { + "rotate": [ + { + "time": 0, + "angle": 36.99 + }, + { + "time": 0.3333, + "angle": -28.64 + } + ] + }, + "front_fist": { + "rotate": [ + { + "time": 0, + "angle": 13.59 + }, + { + "time": 0.3333, + "angle": 7.55 + } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 271.02, + "curve": [ + 0.342, + 0.36, + 0.68, + 0.71 + ] + }, + { + "time": 0.3333, + "angle": -15.84 + } + ], + "translate": [ + { + "time": 0.3333, + "x": -0.09, + "y": -0.46 + } + ] + }, + "rear_bracer": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.3333, + "angle": 40.03 + } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": 14.98 + }, + { + "time": 0.3333, + "angle": 39.75 + } + ] + }, + "hip": { + "translate": [ + { + "time": 0, + "x": -75.54, + "y": -78.03 + }, + { + "time": 0.2333, + "x": -36.48, + "y": 12.42 + }, + { + "time": 0.3333, + "x": -36.48, + "y": -2.99 + } + ] + }, + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 90.94, + "curve": [ + 0.227, + 0.26, + 0.432, + 1 + ] + }, + { + "time": 0.3333, + "angle": 32.02 + } + ], + "translate": [ + { + "time": 0, + "x": 7.21, + "y": -4 + } + ] + }, + "rear_thigh": { + "rotate": [ + { + "time": 0, + "angle": 40.51, + "curve": [ + 0.295, + 0.3, + 0.59, + 0.99 + ] + }, + { + "time": 0.3333, + "angle": 90.76 + } + ], + "translate": [ + { + "time": 0, + "x": -1.96, + "y": -0.32 + } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": -96.62 + }, + { + "time": 0.3333, + "angle": -15.13 + } + ] + }, + "rear_shin": { + "rotate": [ + { + "time": 0, + "angle": 7.99 + }, + { + "time": 0.3333, + "angle": -67.54 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_foot": { + "rotate": [ + { + "time": 0, + "angle": 5.4 + }, + { + "time": 0.3333, + "angle": -16.26 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_foot": { + "rotate": [ + { + "time": 0, + "angle": 2.67 + }, + { + "time": 0.3333, + "angle": -10.31 + } + ] + } + } + }, + "idle": { + "slots": { + "front_fist": { + "attachment": [ + { + "time": 0, + "name": "front_fist_open" + }, + { + "time": 1.6666, + "name": "front_fist_open" + } + ] + }, + "mouth": { + "attachment": [ + { + "time": 0, + "name": "mouth_smile" + }, + { + "time": 1.6666, + "name": "mouth_smile" + } + ] + } + }, + "bones": { + "torso": { + "rotate": [ + { + "time": 0, + "angle": -5.61, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.8333, + "angle": -9.65, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.6666, + "angle": -5.61 + } + ], + "translate": [ + { + "time": 0, + "x": -6.49, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -59.85, + "curve": [ + 0.492, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "angle": -54.31, + "curve": [ + 0.324, + 0.11, + 0.75, + 1 + ] + }, + { + "time": 1.6666, + "angle": -59.85 + } + ], + "translate": [ + { + "time": 0, + "x": -7.12, + "y": -8.23 + }, + { + "time": 0.6666, + "x": -6.32, + "y": -8.3 + }, + { + "time": 1.6666, + "x": -7.12, + "y": -8.23 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 62.41, + "curve": [ + 0.504, + 0.02, + 0.75, + 1 + ] + }, + { + "time": 0.7333, + "angle": 43.83, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.6666, + "angle": 62.41 + } + ], + "translate": [ + { + "time": 0, + "x": -1.83, + "y": -16.78 + }, + { + "time": 0.6666, + "x": 0.34, + "y": -15.23 + }, + { + "time": 1.6666, + "x": -1.83, + "y": -16.78 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "neck": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.6666, + "angle": 2.39 + }, + { + "time": 1.6666, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": -1.88, + "y": -4.76, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": -1.88, + "y": -4.76 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 0.64, + "curve": [ + 0.235, + 0, + 0.558, + 0.99 + ] + }, + { + "time": 0.6666, + "angle": -4.34, + "curve": [ + 0.594, + 0, + 0.653, + 1 + ] + }, + { + "time": 1.6666, + "angle": 0.64 + } + ], + "translate": [ + { + "time": 0, + "x": -13.39, + "y": 6.69, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": -13.39, + "y": 6.69 + } + ], + "scale": [ + { + "time": 0, + "x": 0.896, + "y": 1, + "curve": [ + 0.235, + 0, + 0.558, + 0.99 + ] + }, + { + "time": 0.6666, + "x": 0.825, + "y": 1, + "curve": [ + 0.594, + 0, + 0.653, + 1 + ] + }, + { + "time": 1.6666, + "x": 0.896, + "y": 1 + } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": -19.28, + "curve": "stepped" + }, + { + "time": 1.6666, + "angle": -19.28 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ + 0.235, + 0, + 0.558, + 0.99 + ] + }, + { + "time": 0.6666, + "x": 0.994, + "y": 1, + "curve": [ + 0.594, + 0, + 0.653, + 1 + ] + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "rear_thigh": { + "rotate": [ + { + "time": 0, + "angle": 30.5, + "curve": [ + 0.235, + 0, + 0.558, + 0.99 + ] + }, + { + "time": 0.6666, + "angle": 40.15, + "curve": [ + 0.594, + 0, + 0.653, + 1 + ] + }, + { + "time": 1.6666, + "angle": 30.5 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "rear_shin": { + "rotate": [ + { + "time": 0, + "angle": -23.83, + "curve": [ + 0.235, + 0, + 0.558, + 0.99 + ] + }, + { + "time": 0.6666, + "angle": -43.77, + "curve": [ + 0.594, + 0, + 0.653, + 1 + ] + }, + { + "time": 1.6666, + "angle": -23.83 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "front_foot": { + "rotate": [ + { + "time": 0, + "angle": 5.13, + "curve": [ + 0.235, + 0, + 0.558, + 0.99 + ] + }, + { + "time": 0.6666, + "angle": 10.04, + "curve": [ + 0.594, + 0, + 0.653, + 1 + ] + }, + { + "time": 1.6666, + "angle": 5.13 + } + ], + "scale": [ + { + "time": 0, + "x": 0.755, + "y": 1.309, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 0.755, + "y": 1.309 + } + ] + }, + "hip": { + "translate": [ + { + "time": 0, + "x": -6.63, + "y": -23.01, + "curve": [ + 0.235, + 0, + 0.558, + 0.99 + ] + }, + { + "time": 0.6666, + "x": 6.27, + "y": -35, + "curve": [ + 0.594, + 0, + 0.653, + 1 + ] + }, + { + "time": 1.6666, + "x": -6.63, + "y": -23.01 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "rear_foot": { + "rotate": [ + { + "time": 0, + "angle": -7.34, + "curve": [ + 0.235, + 0, + 0.558, + 0.99 + ] + }, + { + "time": 0.6666, + "angle": 3.85, + "curve": [ + 0.594, + 0, + 0.653, + 1 + ] + }, + { + "time": 1.6666, + "angle": -7.34 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "rear_bracer": { + "rotate": [ + { + "time": 0, + "angle": -17.16, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "angle": 12.52, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.6666, + "angle": -17.16 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "head": { + "rotate": [ + { + "time": 0, + "angle": -5.51, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "angle": -3.12, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.6666, + "angle": -5.51 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "front_bracer": { + "rotate": [ + { + "time": 0, + "angle": 45.46, + "curve": [ + 0.492, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "angle": 41.33, + "curve": [ + 0.32, + 0.1, + 0.736, + 0.91 + ] + }, + { + "time": 1.6666, + "angle": 45.46 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "angle": -15.59, + "curve": [ + 0.732, + 0, + 0.769, + 0.99 + ] + }, + { + "time": 1.6666, + "angle": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + }, + "front_fist": { + "rotate": [ + { + "time": 0, + "angle": -6.84, + "curve": [ + 0.492, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "angle": -14.63, + "curve": [ + 0.324, + 0.11, + 0.75, + 1 + ] + }, + { + "time": 1.6666, + "angle": -6.84 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "x": 0.689, + "y": 1.1, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 1.6666, + "x": 1, + "y": 1 + } + ] + } + } + }, + "jump": { + "slots": { + "front_fist": { + "attachment": [ + { + "time": 0, + "name": "front_fist_open" + }, + { + "time": 0.2, + "name": "front_fist_closed" + }, + { + "time": 0.6666, + "name": "front_fist_open" + } + ] + }, + "mouth": { + "attachment": [ + { + "time": 0, + "name": "mouth_grind" + } + ] + }, + "torso": { + "attachment": [ + { + "time": 0, + "name": "torso" + } + ] + } + }, + "bones": { + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 91.53, + "curve": [ + 0.278, + 0.46, + 0.763, + 1 + ] + }, + { + "time": 0.2, + "angle": -35.83, + "curve": [ + 0.761, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.4333, + "angle": 127.74 + }, + { + "time": 0.7333, + "angle": 48.18, + "curve": [ + 0.227, + 0.26, + 0.432, + 1 + ] + }, + { + "time": 0.8333, + "angle": 25.35 + }, + { + "time": 0.9333, + "angle": 45.37 + }, + { + "time": 1.0333, + "angle": 38.12 + }, + { + "time": 1.1333, + "angle": 25.35 + }, + { + "time": 1.3333, + "angle": 91.53 + } + ], + "translate": [ + { + "time": 0, + "x": -2.56, + "y": 5.77 + }, + { + "time": 0.4333, + "x": 8.3, + "y": 7.98 + }, + { + "time": 0.7333, + "x": 7.21, + "y": -4 + }, + { + "time": 1.3333, + "x": -2.56, + "y": 5.77 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "torso": { + "rotate": [ + { + "time": 0, + "angle": -42.63 + }, + { + "time": 0.2, + "angle": -5.74 + }, + { + "time": 0.4333, + "angle": -50.76 + }, + { + "time": 0.7333, + "angle": 1.89 + }, + { + "time": 0.8333, + "angle": 11.58 + }, + { + "time": 0.9666, + "angle": -1.89 + }, + { + "time": 1.1333, + "angle": 11.58 + }, + { + "time": 1.3333, + "angle": -42.63 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_thigh": { + "rotate": [ + { + "time": 0, + "angle": -26.32 + }, + { + "time": 0.2, + "angle": 121.44 + }, + { + "time": 0.4333, + "angle": 70.54 + }, + { + "time": 0.7333, + "angle": 79.89, + "curve": [ + 0.295, + 0.3, + 0.59, + 0.99 + ] + }, + { + "time": 0.8333, + "angle": 99.12 + }, + { + "time": 0.9333, + "angle": 74.05 + }, + { + "time": 1.0333, + "angle": 98.04 + }, + { + "time": 1.1333, + "angle": 99.12 + }, + { + "time": 1.3333, + "angle": -26.32 + } + ], + "translate": [ + { + "time": 0, + "x": -0.56, + "y": -0.32 + }, + { + "time": 0.4333, + "x": -8.5, + "y": 10.58 + }, + { + "time": 0.7333, + "x": -1.96, + "y": -0.32 + }, + { + "time": 1.3333, + "x": -0.56, + "y": -0.32 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_shin": { + "rotate": [ + { + "time": 0, + "angle": -78.69 + }, + { + "time": 0.4333, + "angle": -55.56 + }, + { + "time": 0.7333, + "angle": -62.84 + }, + { + "time": 0.8333, + "angle": -80.74 + }, + { + "time": 0.9333, + "angle": -41.12 + }, + { + "time": 1.0333, + "angle": -77.4 + }, + { + "time": 1.1333, + "angle": -80.74 + }, + { + "time": 1.3333, + "angle": -78.69 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.7333, + "x": 1, + "y": 1 + } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -22.61 + }, + { + "time": 0.2, + "angle": -246.68 + }, + { + "time": 0.6, + "angle": 11.28, + "curve": [ + 0.246, + 0, + 0.633, + 0.53 + ] + }, + { + "time": 0.7333, + "angle": -57.45, + "curve": [ + 0.38, + 0.53, + 0.744, + 1 + ] + }, + { + "time": 0.8666, + "angle": -112.59 + }, + { + "time": 0.9333, + "angle": -102.17 + }, + { + "time": 1.0333, + "angle": -108.61 + }, + { + "time": 1.1333, + "angle": -112.59 + }, + { + "time": 1.3333, + "angle": -22.61 + } + ], + "translate": [ + { + "time": 0, + "x": 6.08, + "y": 7.15 + }, + { + "time": 0.2, + "x": 7.23, + "y": -13.13, + "curve": "stepped" + }, + { + "time": 0.7333, + "x": 7.23, + "y": -13.13 + }, + { + "time": 1.3333, + "x": 6.08, + "y": 7.15 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_bracer": { + "rotate": [ + { + "time": 0, + "angle": 66.46 + }, + { + "time": 0.2, + "angle": 42.39 + }, + { + "time": 0.4333, + "angle": 26.06 + }, + { + "time": 0.7333, + "angle": 13.28 + }, + { + "time": 0.8666, + "angle": -28.64 + }, + { + "time": 0.9333, + "angle": -22.31 + }, + { + "time": 1.0333, + "angle": -35.39 + }, + { + "time": 1.1333, + "angle": -28.64 + }, + { + "time": 1.3333, + "angle": 66.46 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_fist": { + "rotate": [ + { + "time": 0, + "angle": -28.43 + }, + { + "time": 0.4333, + "angle": -45.6 + }, + { + "time": 0.7333, + "angle": -53.66 + }, + { + "time": 0.8666, + "angle": 7.55 + }, + { + "time": 0.9333, + "angle": 31.15 + }, + { + "time": 1.0333, + "angle": -32.58 + }, + { + "time": 1.1333, + "angle": 7.55 + }, + { + "time": 1.3333, + "angle": -28.43 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 39.68 + }, + { + "time": 0.2, + "angle": 276.57 + }, + { + "time": 0.3, + "angle": 17.73 + }, + { + "time": 0.4333, + "angle": 83.38 + }, + { + "time": 0.6, + "angle": -4.71, + "curve": [ + 0.246, + 0, + 0.633, + 0.53 + ] + }, + { + "time": 0.7333, + "angle": -69.63, + "curve": [ + 0.342, + 0.36, + 0.68, + 0.71 + ] + }, + { + "time": 0.7666, + "angle": 321.47, + "curve": [ + 0.333, + 0.33, + 0.667, + 0.66 + ] + }, + { + "time": 0.8, + "angle": 33.7, + "curve": [ + 0.358, + 0.64, + 0.693, + 1 + ] + }, + { + "time": 0.8666, + "angle": 34.56 + }, + { + "time": 1.0333, + "angle": 71.96 + }, + { + "time": 1.1333, + "angle": 34.56 + }, + { + "time": 1.3333, + "angle": 39.68 + } + ], + "translate": [ + { + "time": 0, + "x": -3.1, + "y": -4.86 + }, + { + "time": 0.2, + "x": 23.33, + "y": 49.07 + }, + { + "time": 0.4333, + "x": 20.78, + "y": 40.21 + }, + { + "time": 1.3333, + "x": -3.1, + "y": -4.86 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_bracer": { + "rotate": [ + { + "time": 0, + "angle": 29.66 + }, + { + "time": 0.2, + "angle": 45.06 + }, + { + "time": 0.4333, + "angle": -4.34 + }, + { + "time": 0.7666, + "angle": 61.68 + }, + { + "time": 0.8, + "angle": 82.59 + }, + { + "time": 0.8666, + "angle": 80.06 + }, + { + "time": 1.0333, + "angle": 57.56 + }, + { + "time": 1.1333, + "angle": 80.06 + }, + { + "time": 1.3333, + "angle": 29.66 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "neck": { + "rotate": [ + { + "time": 0, + "angle": 24.9 + }, + { + "time": 0.2, + "angle": 16.31 + }, + { + "time": 0.4333, + "angle": 7.44 + }, + { + "time": 0.7333, + "angle": -20.35 + }, + { + "time": 0.8333, + "angle": -0.69, + "curve": "stepped" + }, + { + "time": 1.1333, + "angle": -0.69 + }, + { + "time": 1.3333, + "angle": 24.9 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "head": { + "rotate": [ + { + "time": 0, + "angle": 24.92 + }, + { + "time": 0.2, + "angle": 10.36 + }, + { + "time": 0.4333, + "angle": 28.65 + }, + { + "time": 0.7333, + "angle": -2.65 + }, + { + "time": 0.8333, + "angle": -28.94, + "curve": "stepped" + }, + { + "time": 1.1333, + "angle": -28.94 + }, + { + "time": 1.3333, + "angle": 24.92 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "hip": { + "rotate": [ + { + "time": 0, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": -34.51, + "y": -78.62, + "curve": [ + 0.232, + 1, + 0.75, + 1 + ] + }, + { + "time": 0.2, + "x": -34.51, + "y": 182.5, + "curve": [ + 0.232, + 0.48, + 0.598, + 0.79 + ] + }, + { + "time": 0.7666, + "x": -34.51, + "y": 596.22, + "curve": [ + 0.329, + 0.17, + 0.66, + 0.21 + ] + }, + { + "time": 1.1333, + "x": -34.51, + "y": 2.49 + }, + { + "time": 1.3333, + "x": -34.51, + "y": -78.62 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": -90.62, + "curve": [ + 0.416, + 0.54, + 0.743, + 1 + ] + }, + { + "time": 0.2, + "angle": -10.52, + "curve": [ + 0.644, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.4333, + "angle": -127.72 + }, + { + "time": 0.7333, + "angle": -19.91 + }, + { + "time": 0.8333, + "angle": -5.16 + }, + { + "time": 0.9333, + "angle": -35.06 + }, + { + "time": 1.0333, + "angle": -43.97 + }, + { + "time": 1.1333, + "angle": -5.16 + }, + { + "time": 1.3333, + "angle": -90.62 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "front_foot": { + "rotate": [ + { + "time": 0, + "angle": -0.79 + }, + { + "time": 0.0333, + "angle": 16.27 + }, + { + "time": 0.0666, + "angle": 23.52 + }, + { + "time": 0.1, + "angle": 21.02 + }, + { + "time": 0.1333, + "angle": 10.92 + }, + { + "time": 0.2, + "angle": -38.45 + }, + { + "time": 0.4333, + "angle": 6.62 + }, + { + "time": 0.7333, + "angle": -11.51 + }, + { + "time": 1.0333, + "angle": -22.91 + }, + { + "time": 1.3333, + "angle": -0.79 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "rear_foot": { + "rotate": [ + { + "time": 0, + "angle": -12.77 + }, + { + "time": 0.2, + "angle": 17.05 + }, + { + "time": 0.4333, + "angle": 19.45 + }, + { + "time": 0.7333, + "angle": 2.67 + }, + { + "time": 1.0333, + "angle": -28.49 + }, + { + "time": 1.3333, + "angle": -12.77 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": 6.18 + }, + { + "time": 0.2, + "angle": 30.81 + }, + { + "time": 0.4333, + "angle": 13.25 + }, + { + "time": 0.7333, + "angle": 14.98 + }, + { + "time": 0.7666, + "angle": 25.64 + }, + { + "time": 0.8, + "angle": 20.62 + }, + { + "time": 0.8666, + "angle": 64.52 + }, + { + "time": 1.0333, + "angle": 8.59 + }, + { + "time": 1.1333, + "angle": 64.52 + }, + { + "time": 1.3333, + "angle": 6.18 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + } + ] + } + } + }, + "run": { + "slots": { + "front_fist": { + "attachment": [ + { + "time": 0, + "name": "front_fist_closed" + } + ] + }, + "mouth": { + "attachment": [ + { + "time": 0, + "name": "mouth_grind" + } + ] + }, + "torso": { + "attachment": [ + { + "time": 0, + "name": "torso" + } + ] + } + }, + "bones": { + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 42.05, + "curve": [ + 0.195, + 0.86, + 0.75, + 1 + ] + }, + { + "time": 0.0666, + "angle": 46.07 + }, + { + "time": 0.1333, + "angle": -20.28 + }, + { + "time": 0.2, + "angle": -27.23 + }, + { + "time": 0.2666, + "angle": -47.16 + }, + { + "time": 0.3333, + "angle": -39.79 + }, + { + "time": 0.4, + "angle": -25.86 + }, + { + "time": 0.4666, + "angle": 14.35 + }, + { + "time": 0.5333, + "angle": 55.62 + }, + { + "time": 0.6, + "angle": 69.65 + }, + { + "time": 0.6666, + "angle": 86.4 + }, + { + "time": 0.7333, + "angle": 65.87 + }, + { + "time": 0.8, + "angle": 42.05 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + }, + { + "time": 0.0333, + "x": -5.79, + "y": 11.15 + }, + { + "time": 0.0666, + "x": -5.13, + "y": 11.55 + }, + { + "time": 0.1333, + "x": -7.7, + "y": 8.98 + }, + { + "time": 0.5333, + "x": -1.26, + "y": 3.83 + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "torso": { + "rotate": [ + { + "time": 0, + "angle": -39.7 + }, + { + "time": 0.2, + "angle": -57.29 + }, + { + "time": 0.4, + "angle": -39.7 + }, + { + "time": 0.6, + "angle": -57.29 + }, + { + "time": 0.8, + "angle": -39.7 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.4, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_thigh": { + "rotate": [ + { + "time": 0, + "angle": -56.59 + }, + { + "time": 0.0666, + "angle": -21.57 + }, + { + "time": 0.1333, + "angle": 27.95 + }, + { + "time": 0.2, + "angle": 42.42 + }, + { + "time": 0.2666, + "angle": 62.37 + }, + { + "time": 0.3333, + "angle": 45.42 + }, + { + "time": 0.4, + "angle": 15.67 + }, + { + "time": 0.4666, + "angle": 28.22 + }, + { + "time": 0.5333, + "angle": -38.62 + }, + { + "time": 0.6, + "angle": -53.26 + }, + { + "time": 0.6666, + "angle": -79.31 + }, + { + "time": 0.7333, + "angle": -86.47 + }, + { + "time": 0.8, + "angle": -56.59 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + }, + { + "time": 0.4, + "x": -6.76, + "y": -3.86 + }, + { + "time": 0.4333, + "x": -15.85, + "y": 7.28 + }, + { + "time": 0.4666, + "x": -13.04, + "y": 4.04 + }, + { + "time": 0.5, + "x": -10.24, + "y": 7.11 + }, + { + "time": 0.5333, + "x": -9.01, + "y": -5.15 + }, + { + "time": 0.6666, + "x": -23.18, + "y": -2.57 + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_shin": { + "rotate": [ + { + "time": 0, + "angle": -74 + }, + { + "time": 0.0666, + "angle": -83.38 + }, + { + "time": 0.1333, + "angle": -106.69 + }, + { + "time": 0.2, + "angle": -66.01 + }, + { + "time": 0.2666, + "angle": -55.22 + }, + { + "time": 0.3333, + "angle": -24.8 + }, + { + "time": 0.4, + "angle": 18.44, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.4666, + "angle": -56.65 + }, + { + "time": 0.5333, + "angle": -11.94, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "angle": -41.26 + }, + { + "time": 0.7333, + "angle": -43.6 + }, + { + "time": 0.8, + "angle": -74 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -89.36 + }, + { + "time": 0.0666, + "angle": -95.67 + }, + { + "time": 0.1333, + "angle": -22 + }, + { + "time": 0.2, + "angle": -316.04 + }, + { + "time": 0.2666, + "angle": -274.94 + }, + { + "time": 0.3333, + "angle": -273.74 + }, + { + "time": 0.4, + "angle": -272.09 + }, + { + "time": 0.4666, + "angle": -264.89 + }, + { + "time": 0.5333, + "angle": -320.09 + }, + { + "time": 0.6, + "angle": -50.83 + }, + { + "time": 0.6666, + "angle": -81.72 + }, + { + "time": 0.7333, + "angle": -83.92 + }, + { + "time": 0.8, + "angle": -89.36 + } + ], + "translate": [ + { + "time": 0, + "x": 6.24, + "y": 10.05 + }, + { + "time": 0.2666, + "x": 4.95, + "y": -13.13 + }, + { + "time": 0.6, + "x": -2.43, + "y": 1.94 + }, + { + "time": 0.8, + "x": 6.24, + "y": 10.05 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_bracer": { + "rotate": [ + { + "time": 0, + "angle": 33.43 + }, + { + "time": 0.0666, + "angle": 20.53 + }, + { + "time": 0.1333, + "angle": 15.26 + }, + { + "time": 0.2, + "angle": 19.28 + }, + { + "time": 0.2666, + "angle": 22.62 + }, + { + "time": 0.3333, + "angle": 37.29 + }, + { + "time": 0.4, + "angle": 41.53 + }, + { + "time": 0.4666, + "angle": 31.73 + }, + { + "time": 0.5333, + "angle": 67.45 + }, + { + "time": 0.6666, + "angle": 39.77 + }, + { + "time": 0.7333, + "angle": 30.95 + }, + { + "time": 0.8, + "angle": 33.43 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_fist": { + "rotate": [ + { + "time": 0, + "angle": -19.75 + }, + { + "time": 0.0666, + "angle": -37.11 + }, + { + "time": 0.1333, + "angle": -50.79 + }, + { + "time": 0.2666, + "angle": -12.69 + }, + { + "time": 0.3333, + "angle": 3.01 + }, + { + "time": 0.4333, + "angle": 12.05 + }, + { + "time": 0.5333, + "angle": 13.25 + }, + { + "time": 0.8, + "angle": -19.75 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 68.68 + }, + { + "time": 0.0666, + "angle": 73.89 + }, + { + "time": 0.1333, + "angle": -9.64 + }, + { + "time": 0.2, + "angle": 284.27 + }, + { + "time": 0.2666, + "angle": 283.29 + }, + { + "time": 0.3333, + "angle": 278.28 + }, + { + "time": 0.4, + "angle": 271.02 + }, + { + "time": 0.4666, + "angle": 263.2 + }, + { + "time": 0.5333, + "angle": 314.25 + }, + { + "time": 0.6, + "angle": 16.83 + }, + { + "time": 0.6666, + "angle": 70.35 + }, + { + "time": 0.7333, + "angle": 73.53 + }, + { + "time": 0.8, + "angle": 68.68 + } + ], + "translate": [ + { + "time": 0, + "x": -2.57, + "y": -8.89 + }, + { + "time": 0.1333, + "x": -4.68, + "y": 7.2 + }, + { + "time": 0.2, + "x": 21.73, + "y": 51.17 + }, + { + "time": 0.6, + "x": 4.33, + "y": 2.05 + }, + { + "time": 0.8, + "x": -2.57, + "y": -8.89 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_bracer": { + "rotate": [ + { + "time": 0, + "angle": 31.04 + }, + { + "time": 0.0666, + "angle": 28.28 + }, + { + "time": 0.1333, + "angle": 49.36 + }, + { + "time": 0.2, + "angle": 59.37 + }, + { + "time": 0.2666, + "angle": 8.56 + }, + { + "time": 0.3333, + "angle": 9.38 + }, + { + "time": 0.4, + "angle": 11.51 + }, + { + "time": 0.4666, + "angle": 7.22 + }, + { + "time": 0.5333, + "angle": -18.44 + }, + { + "time": 0.6, + "angle": 11.44 + }, + { + "time": 0.6666, + "angle": 9.99 + }, + { + "time": 0.7333, + "angle": 8.28 + }, + { + "time": 0.8, + "angle": 31.04 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "neck": { + "rotate": [ + { + "time": 0, + "angle": 11.03 + }, + { + "time": 0.2, + "angle": 13.58 + }, + { + "time": 0.4, + "angle": 11.03 + }, + { + "time": 0.6, + "angle": 13.58 + }, + { + "time": 0.8, + "angle": 11.03 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.4, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "head": { + "rotate": [ + { + "time": 0, + "angle": 11.03 + }, + { + "time": 0.1, + "angle": 12.34 + }, + { + "time": 0.2, + "angle": 25.55 + }, + { + "time": 0.4, + "angle": 11.03 + }, + { + "time": 0.5, + "angle": 12.34 + }, + { + "time": 0.6, + "angle": 25.55 + }, + { + "time": 0.8, + "angle": 11.03 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.4, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "hip": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": -62.47, + "y": -23.1 + }, + { + "time": 0.0666, + "x": -62.47, + "y": -38.51, + "curve": [ + 0.244, + 0.04, + 0.75, + 1 + ] + }, + { + "time": 0.2666, + "x": -62.47, + "y": 22.28, + "curve": [ + 0.17, + 0.52, + 0.75, + 1 + ] + }, + { + "time": 0.4, + "x": -62.47, + "y": -23.1 + }, + { + "time": 0.4333, + "x": -62.47, + "y": -24.59 + }, + { + "time": 0.4666, + "x": -62.47, + "y": -43.29, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "x": -62.47, + "y": 22.28 + }, + { + "time": 0.8, + "x": -62.47, + "y": -23.1 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ + 0.481, + 0.01, + 0.75, + 1 + ] + }, + { + "time": 0.0666, + "angle": -64.42 + }, + { + "time": 0.1333, + "angle": -20.59, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.2666, + "angle": -62.51 + }, + { + "time": 0.3333, + "angle": -79.74 + }, + { + "time": 0.4, + "angle": -78.28 + }, + { + "time": 0.4666, + "angle": -118.96, + "curve": [ + 0.93, + 0, + 0.952, + 0.95 + ] + }, + { + "time": 0.6, + "angle": -88.95 + }, + { + "time": 0.6666, + "angle": -79.09 + }, + { + "time": 0.7333, + "angle": -47.77 + }, + { + "time": 0.8, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_foot": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.0333, + "angle": -21.13, + "curve": [ + 0.121, + 0.23, + 0.75, + 1 + ] + }, + { + "time": 0.0666, + "angle": 17.64 + }, + { + "time": 0.1, + "angle": 29.92 + }, + { + "time": 0.1333, + "angle": 16.44 + }, + { + "time": 0.2, + "angle": -29.22 + }, + { + "time": 0.2666, + "angle": -1.61 + }, + { + "time": 0.3333, + "angle": -10.22 + }, + { + "time": 0.4666, + "angle": -15.99 + }, + { + "time": 0.6, + "angle": 9.03 + }, + { + "time": 0.7333, + "angle": 17.32 + }, + { + "time": 0.8, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_foot": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.0666, + "angle": -12.04 + }, + { + "time": 0.1333, + "angle": -0.87 + }, + { + "time": 0.2, + "angle": 25.81 + }, + { + "time": 0.2666, + "angle": 4.71 + }, + { + "time": 0.4, + "angle": 18.09, + "curve": [ + 0.281, + 0.73, + 0.75, + 1 + ] + }, + { + "time": 0.4333, + "angle": -1.7 + }, + { + "time": 0.4666, + "angle": 27.12 + }, + { + "time": 0.5, + "angle": 38.83 + }, + { + "time": 0.5333, + "angle": 30.76 + }, + { + "time": 0.5666, + "angle": -20.49 + }, + { + "time": 0.6, + "angle": -30.8 + }, + { + "time": 0.6666, + "angle": -1.31 + }, + { + "time": 0.8, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.1333, + "angle": 24.72 + }, + { + "time": 0.5, + "angle": -11.87 + }, + { + "time": 0.8, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + } + }, + "events": [ + { + "time": 0, + "name": "footstep" + }, + { + "time": 0.4, + "name": "footstep", + "int": 1 + } + ] + }, + "shoot": { + "slots": { + "front_fist": { + "attachment": [ + { + "time": 0.1333, + "name": "front_fist_closed" + }, + { + "time": 0.4, + "name": "front_fist_open" + } + ] + }, + "mouth": { + "attachment": [ + { + "time": 0.1333, + "name": "mouth_grind" + } + ] + }, + "muzzle": { + "attachment": [ + { + "time": 0.1333, + "name": "muzzle" + }, + { + "time": 0.2666, + "name": null + } + ], + "color": [ + { + "time": 0.1333, + "color": "ffffff00", + "curve": [ + 0.118, + 0.99, + 0.75, + 1 + ] + }, + { + "time": 0.1666, + "color": "ffffffff", + "curve": [ + 0.821, + 0, + 0.909, + 0.89 + ] + }, + { + "time": 0.2666, + "color": "ffffff00" + } + ] + } + }, + "bones": { + "front_fist": { + "scale": [ + { + "time": 0.1333, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.4, + "x": 1, + "y": 1 + } + ] + }, + "gunTip": { + "translate": [ + { + "time": 0.1333, + "x": 0, + "y": 0 + }, + { + "time": 0.2, + "x": 20.93, + "y": 1.57 + } + ], + "scale": [ + { + "time": 0.1333, + "x": 1, + "y": 1 + }, + { + "time": 0.2, + "x": 1.247, + "y": 1.516 + } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": 1.9 + } + ], + "translate": [ + { + "time": 0, + "x": 7.95, + "y": 5.84, + "curve": [ + 0, + 0.3, + 0.678, + 1 + ] + }, + { + "time": 0.3, + "x": -9.3, + "y": -1.41 + }, + { + "time": 0.4, + "x": 0, + "y": 0 + } + ] + }, + "rear_bracer": { + "rotate": [ + { + "time": 0, + "angle": -30.47 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ + 0, + 0.3, + 0.678, + 1 + ] + }, + { + "time": 0.3, + "x": -5.99, + "y": -3.71 + }, + { + "time": 0.4, + "x": 0, + "y": 0 + } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 62.3 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ + 0, + 0.3, + 0.678, + 1 + ] + }, + { + "time": 0.3, + "x": 2.81, + "y": 11.41 + }, + { + "time": 0.4, + "x": 0, + "y": 0 + } + ] + } + } + }, + "test": { + "slots": { + "front_foot": { + "color": [ + { + "time": 0.6666, + "color": "ffffffff" + }, + { + "time": 1.3333, + "color": "ff0700ff" + } + ] + }, + "gun": { + "color": [ + { + "time": 0, + "color": "ffffffff", + "curve": "stepped" + }, + { + "time": 0.6666, + "color": "ffffffff" + }, + { + "time": 1.3333, + "color": "32ff00ff" + } + ] + }, + "rear_foot": { + "color": [ + { + "time": 0.6666, + "color": "ffffffff" + }, + { + "time": 1.3333, + "color": "ff0700ff" + } + ] + } + }, + "bones": { + "head": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.3333, + "angle": -20.72 + }, + { + "time": 0.6666, + "angle": -32.41 + }, + { + "time": 1, + "angle": -5.3 + }, + { + "time": 1.3333, + "angle": 24.96 + }, + { + "time": 1.6666, + "angle": 15.61 + }, + { + "time": 2, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ + 0.172, + 0.37, + 0.574, + 0.73 + ] + }, + { + "time": 0.1666, + "x": 144.19, + "y": -77.59, + "curve": [ + 0.372, + 0.61, + 0.765, + 1 + ] + }, + { + "time": 0.3333, + "x": 217.61, + "y": -192.63, + "curve": [ + 0.282, + 0, + 0.624, + 0.31 + ] + }, + { + "time": 0.5, + "x": 181.21, + "y": -365.66, + "curve": [ + 0.313, + 0.21, + 0.654, + 0.54 + ] + }, + { + "time": 0.6666, + "x": 20.09, + "y": -500.4, + "curve": [ + 0.147, + 0.27, + 0.75, + 1 + ] + }, + { + "time": 0.8333, + "x": -194.24, + "y": -341.84 + }, + { + "time": 1, + "x": -307.93, + "y": -114 + }, + { + "time": 1.1666, + "x": -330.38, + "y": 121.42, + "curve": [ + 0.25, + 0, + 0.764, + 0.48 + ] + }, + { + "time": 1.3333, + "x": -240.42, + "y": 335.66, + "curve": [ + 0.229, + 0.37, + 0.58, + 0.73 + ] + }, + { + "time": 1.5, + "x": -56.12, + "y": 288.06, + "curve": [ + 0.296, + 0.6, + 0.641, + 1 + ] + }, + { + "time": 1.6666, + "x": 87.63, + "y": 191.33, + "curve": [ + 0.238, + 0, + 0.626, + 0.39 + ] + }, + { + "time": 1.8333, + "x": 60.62, + "y": 95.14, + "curve": [ + 0.41, + 0.26, + 0.803, + 0.62 + ] + }, + { + "time": 2, + "x": 0, + "y": 0 + } + ] + } + }, + "draworder": [ + { + "time": 0.6666, + "offsets": [ + { + "slot": "head", + "offset": -9 + }, + { + "slot": "eye", + "offset": -9 + }, + { + "slot": "mouth", + "offset": -12 + }, + { + "slot": "goggles", + "offset": -12 + } + ] + }, + { + "time": 1.3333 + } + ], + "events": [ + { + "time": 0, + "name": "headPop", + "int": 0, + "float": 0, + "string": "pop.wav" + }, + { + "time": 1, + "name": "headBehind", + "int": 7, + "float": 8, + "string": "animate" + }, + { + "time": 2, + "name": "headAttach", + "int": 0, + "float": 0, + "string": "attach.wav" + } + ] + }, + "walk": { + "slots": { + "front_fist": { + "attachment": [ + { + "time": 0, + "name": "front_fist_closed" + } + ] + }, + "mouth": { + "attachment": [ + { + "time": 0, + "name": "mouth_smile" + } + ] + }, + "torso": { + "attachment": [ + { + "time": 0, + "name": "torso" + } + ] + } + }, + "bones": { + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 15.79 + }, + { + "time": 0.1, + "angle": 27.39 + }, + { + "time": 0.2, + "angle": -7.94 + }, + { + "time": 0.3, + "angle": -16.94 + }, + { + "time": 0.4, + "angle": -28.62 + }, + { + "time": 0.5, + "angle": -19.3 + }, + { + "time": 0.6, + "angle": -3.08 + }, + { + "time": 0.7, + "angle": 29.51 + }, + { + "time": 0.8, + "angle": 15.79 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + }, + { + "time": 0.4, + "x": -1.18, + "y": 0.54 + }, + { + "time": 0.5, + "x": 0.11, + "y": 0.41 + }, + { + "time": 0.6, + "x": 9.48, + "y": 0.27 + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.4, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": 5.12 + }, + { + "time": 0.1, + "angle": -20.87 + }, + { + "time": 0.2, + "angle": 13.37 + }, + { + "time": 0.3, + "angle": 15.98 + }, + { + "time": 0.4, + "angle": 5.94 + }, + { + "time": 0.5, + "angle": -26.76 + }, + { + "time": 0.7, + "angle": -55.44 + }, + { + "time": 0.8, + "angle": 5.12 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_thigh": { + "rotate": [ + { + "time": 0, + "angle": -34.38 + }, + { + "time": 0.1, + "angle": -30.32 + }, + { + "time": 0.2, + "angle": -37.22 + }, + { + "time": 0.3, + "angle": 20.73 + }, + { + "time": 0.4, + "angle": 8.69 + }, + { + "time": 0.5, + "angle": 12.16 + }, + { + "time": 0.6, + "angle": -24.62 + }, + { + "time": 0.7, + "angle": -27.26 + }, + { + "time": 0.8, + "angle": -34.38 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0 + }, + { + "time": 0.4, + "x": 4.08, + "y": -9.53 + }, + { + "time": 0.5, + "x": 0, + "y": 0 + }, + { + "time": 0.7, + "x": -21.14, + "y": -9.6 + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_shin": { + "rotate": [ + { + "time": 0, + "angle": 14.26 + }, + { + "time": 0.1, + "angle": -17.3 + }, + { + "time": 0.2, + "angle": -12.67 + }, + { + "time": 0.3, + "angle": -58.89 + }, + { + "time": 0.4, + "angle": 15.95 + }, + { + "time": 0.5, + "angle": -9 + }, + { + "time": 0.6, + "angle": 26.06 + }, + { + "time": 0.7, + "angle": 21.85 + }, + { + "time": 0.8, + "angle": 14.26 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1 + }, + { + "time": 0.1, + "x": 0.951, + "y": 1 + }, + { + "time": 0.5, + "x": 0.975, + "y": 1 + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_foot": { + "rotate": [ + { + "time": 0, + "angle": 10.13 + }, + { + "time": 0.1, + "angle": 12.27 + }, + { + "time": 0.2, + "angle": -2.94 + }, + { + "time": 0.3, + "angle": 6.29 + }, + { + "time": 0.4, + "angle": 13.45 + }, + { + "time": 0.5, + "angle": -3.57 + }, + { + "time": 0.6, + "angle": -0.97 + }, + { + "time": 0.7, + "angle": 2.97 + }, + { + "time": 0.8, + "angle": 10.13 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -23.74 + }, + { + "time": 0.4, + "angle": -320.57 + }, + { + "time": 0.8, + "angle": -23.74 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 11.62 + }, + { + "time": 0.1, + "angle": 19.36 + }, + { + "time": 0.4, + "angle": 345.26 + }, + { + "time": 0.5, + "angle": 343.44 + }, + { + "time": 0.8, + "angle": 11.62 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "torso": { + "rotate": [ + { + "time": 0, + "angle": -12.11 + }, + { + "time": 0.1666, + "angle": -17.16 + }, + { + "time": 0.4, + "angle": -12.11 + }, + { + "time": 0.5666, + "angle": -15.81 + }, + { + "time": 0.8, + "angle": -12.11 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "neck": { + "rotate": [ + { + "time": 0, + "angle": 1.41 + }, + { + "time": 0.2333, + "angle": -3.04 + }, + { + "time": 0.4, + "angle": 1.41 + }, + { + "time": 0.6333, + "angle": -3.04 + }, + { + "time": 0.8, + "angle": 1.41 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.4, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "head": { + "rotate": [ + { + "time": 0, + "angle": 6.97 + }, + { + "time": 0.1666, + "angle": 8.02 + }, + { + "time": 0.2666, + "angle": 12.65 + }, + { + "time": 0.4, + "angle": 6.97 + }, + { + "time": 0.5666, + "angle": 8.02 + }, + { + "time": 0.6666, + "angle": 12.65 + }, + { + "time": 0.8, + "angle": 6.97 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.4, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "hip": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": -23.93, + "y": 3.22, + "curve": [ + 0.518, + 0.03, + 0.807, + 0.61 + ] + }, + { + "time": 0.1, + "x": -23.93, + "y": -9.24, + "curve": [ + 0.135, + 0.33, + 0.601, + 0.99 + ] + }, + { + "time": 0.2, + "x": -23.93, + "y": 4.35, + "curve": [ + 0.204, + 0.68, + 0.75, + 1 + ] + }, + { + "time": 0.3, + "x": -23.93, + "y": 2.38, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.4, + "x": -23.93, + "y": -2.5, + "curve": [ + 0.692, + 0.01, + 0.75, + 1 + ] + }, + { + "time": 0.5, + "x": -23.93, + "y": -10.32, + "curve": [ + 0.235, + 0.77, + 0.75, + 1 + ] + }, + { + "time": 0.6, + "x": -23.93, + "y": 4.35, + "curve": [ + 0.287, + 0.37, + 0.718, + 0.76 + ] + }, + { + "time": 0.7, + "x": -23.93, + "y": 10.34, + "curve": [ + 0.615, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.8, + "x": -23.93, + "y": 3.22 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_bracer": { + "rotate": [ + { + "time": 0, + "angle": 0 + }, + { + "time": 0.4, + "angle": 20.59 + }, + { + "time": 0.8, + "angle": 0 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_foot": { + "rotate": [ + { + "time": 0, + "angle": 12.49 + }, + { + "time": 0.1, + "angle": -8.34 + }, + { + "time": 0.2, + "angle": -6.17 + }, + { + "time": 0.3, + "angle": -0.75 + }, + { + "time": 0.3333, + "angle": 3.89 + }, + { + "time": 0.4, + "angle": 10.22 + }, + { + "time": 0.5, + "angle": 11.44 + }, + { + "time": 0.6, + "angle": -0.33 + }, + { + "time": 0.7, + "angle": 0.15 + }, + { + "time": 0.8, + "angle": 12.49 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "rear_bracer": { + "rotate": [ + { + "time": 0, + "angle": 3.58 + }, + { + "time": 0.1, + "angle": 5.51 + }, + { + "time": 0.4, + "angle": -22.77 + }, + { + "time": 0.5, + "angle": -9.65 + }, + { + "time": 0.8, + "angle": 3.58 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "front_fist": { + "rotate": [ + { + "time": 0, + "angle": -15.22 + }, + { + "time": 0.1, + "angle": -51.4 + }, + { + "time": 0.4, + "angle": -39.4 + }, + { + "time": 0.5, + "angle": 19.26 + }, + { + "time": 0.8, + "angle": -15.22 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": -24.06, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.1, + "angle": -10.94, + "curve": [ + 0.381, + 0.54, + 0.742, + 1 + ] + }, + { + "time": 0.4, + "angle": 25.34, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.6666, + "angle": -27.47, + "curve": [ + 0.25, + 0, + 0.75, + 1 + ] + }, + { + "time": 0.8, + "angle": -24.06 + } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 0, + "y": 0 + } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": "stepped" + }, + { + "time": 0.8, + "x": 1, + "y": 1 + } + ] + } + } + } + } + }, + [ + 0 + ] + ] + ], + 0, + 0, + [ + 0 + ], + [ + -1 + ], + [ + 8 + ] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + { + "name": "1", + "rect": [ + 32, + 36, + 152, + 103 + ], + "offset": [ + -6, + -8 + ], + "originalSize": [ + 228, + 159 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 2 + ], + [ + 35 + ] + ], + [ + [ + [ + 10, + "multi-material" + ], + [ + 8, + "multi-material", + [ + -3 + ], + [ + [ + 18, + 45, + -2 + ] + ], + [ + 21, + -1 + ], + [ + 5, + 960, + 640 + ], + [ + 480, + 320, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 11, + "content", + [ + -7, + -8, + -9, + -10, + -11, + -12, + -13, + -14, + -15, + -16, + -17 + ], + [ + [ + 24, + -4 + ], + [ + 22, + 1, + 3, + -5, + [ + 5, + 960, + 803 + ] + ], + [ + 36, + 41, + 220, + -6 + ] + ], + [ + 0, + "98B5382ANHgKQw5BkMsWAq", + 1 + ], + [ + 5, + 960, + 803 + ], + [ + 0, + 0.5, + 1 + ], + [ + 0, + 320, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 15, + "sv", + 1, + [ + -21, + -22 + ], + [ + [ + -18, + [ + 6, + 45, + 240, + 250, + -19 + ], + [ + 25, + 0, + false, + -20, + [ + 23 + ], + 24 + ] + ], + 1, + 4, + 4 + ], + [ + 0, + "b5RxDsAgFOW6xOyBdbz2rI", + 1 + ], + [ + 4, + 4279834905 + ], + [ + 5, + 960, + 640 + ] + ], + [ + 16, + "scrollBar", + 3, + [ + -26 + ], + [ + [ + -23, + [ + 20, + 0, + 37, + 350.07654921020657, + 237, + -24 + ], + [ + 7, + 1, + 0, + -25, + [ + 21 + ], + 22 + ] + ], + 1, + 4, + 4 + ], + [ + 0, + "c2cC2kA1NNeozY+5ZzkcSY", + 1 + ], + [ + 5, + 8, + 640 + ], + [ + 0, + 1, + 0.5 + ], + [ + 480, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 2, + "simple-sprite", + 2, + [ + -28, + -29 + ], + [ + [ + 23, + 1, + 2, + 50, + 50, + 20, + -27, + [ + 5, + 200, + 190 + ] + ] + ], + [ + 0, + "cel07wPiZH1a58pRPiEEb2", + 1 + ], + [ + 5, + 200, + 190 + ], + [ + -380, + -95, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 2, + "sliced-sprite", + 2, + [ + -31, + -32 + ], + [ + [ + 4, + 1, + 2, + 50, + 50, + 20, + true, + -30, + [ + 5, + 200, + 310 + ] + ] + ], + [ + 0, + "4aagUhJlJBRraxu0HdmBV+", + 1 + ], + [ + 5, + 200, + 310 + ], + [ + -180, + -155, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 2, + "tiled-sprite", + 2, + [ + -34, + -35 + ], + [ + [ + 4, + 1, + 2, + 50, + 50, + 20, + true, + -33, + [ + 5, + 200, + 350 + ] + ] + ], + [ + 0, + "0667j7NjxL+ZD1xRXB4KUN", + 1 + ], + [ + 5, + 200, + 350 + ], + [ + 20, + -175, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 2, + "filled-sprite", + 2, + [ + -37, + -38 + ], + [ + [ + 4, + 1, + 2, + 50, + 50, + 20, + true, + -36, + [ + 5, + 200, + 261 + ] + ] + ], + [ + 0, + "dcDdK4fAJH5qn+dxWps1NJ", + 1 + ], + [ + 5, + 200, + 261 + ], + [ + 220, + -130.5, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 2, + "radial-sprite", + 2, + [ + -40, + -41 + ], + [ + [ + 4, + 1, + 2, + 50, + 50, + 20, + true, + -39, + [ + 5, + 200, + 261 + ] + ] + ], + [ + 0, + "eesZ6vPt5AdKXqG0l/MjeY", + 1 + ], + [ + 5, + 200, + 261 + ], + [ + -380, + -480.5, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 2, + "mesh-sprite", + 2, + [ + -43, + -44 + ], + [ + [ + 4, + 1, + 2, + 50, + 50, + 20, + true, + -42, + [ + 5, + 200, + 180 + ] + ] + ], + [ + 0, + "adKwcVQDxJDpRoPxGNaLq0", + 1 + ], + [ + 5, + 200, + 180 + ], + [ + -180, + -440, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 2, + "bitmap-label", + 2, + [ + -46, + -47 + ], + [ + [ + 4, + 1, + 2, + 50, + 50, + 20, + true, + -45, + [ + 5, + 200, + 180 + ] + ] + ], + [ + 0, + "a5HraLpUFIfLWhIikkzaHr", + 1 + ], + [ + 5, + 200, + 180 + ], + [ + 20, + -440, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 2, + "motionsteak", + 2, + [ + -49, + -50 + ], + [ + [ + 4, + 1, + 2, + 50, + 50, + 20, + true, + -48, + [ + 5, + 200, + 170 + ] + ] + ], + [ + 0, + "c1aHWHIBlDo6sJUzzqPK8A", + 1 + ], + [ + 5, + 200, + 170 + ], + [ + 220, + -435, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 2, + "spine", + 2, + [ + -52, + -53 + ], + [ + [ + 4, + 1, + 2, + 20, + 50, + 90, + true, + -51, + [ + 5, + 200, + 192 + ] + ] + ], + [ + 0, + "ffL4g6oPBMh5/7G4BvdV8d", + 1 + ], + [ + 5, + 200, + 192 + ], + [ + -380, + -707, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 2, + "cache-spine", + 2, + [ + -55, + -56 + ], + [ + [ + 4, + 1, + 2, + 20, + 50, + 90, + true, + -54, + [ + 5, + 200, + 192 + ] + ] + ], + [ + 0, + "9aqu41z15KAJFA3qEkvQwB", + 1 + ], + [ + 5, + 200, + 192 + ], + [ + -180, + -707, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 2, + "custom-material", + 2, + [ + -58, + -59 + ], + [ + [ + 23, + 1, + 2, + 50, + 50, + 20, + -57, + [ + 5, + 200, + 190 + ] + ] + ], + [ + 0, + "3d08Ds4LtI2LrmAruDcl75", + 1 + ], + [ + 5, + 200, + 190 + ], + [ + 20, + -706, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 13, + "view", + 3, + [ + 2 + ], + [ + [ + 6, + 45, + 240, + 250, + -60 + ] + ], + [ + 0, + "645yltQ0dFpbIcIgDazPDc", + 1 + ], + [ + 5, + 960, + 640 + ] + ], + [ + 1, + "label", + 5, + [ + [ + 3, + "Sprite - Simple", + 20, + 30, + 1, + 1, + 2, + [ + null + ], + -61 + ] + ], + [ + 0, + "8d/S7CZd9PWJtu7DBKMbAl", + 1 + ], + [ + 5, + 131.16, + 30 + ], + [ + 0, + 30, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "sprite", + 5, + [ + [ + 27, + 2, + false, + 2, + 2, + -62, + [ + 0 + ], + 1 + ] + ], + [ + 0, + "00PO/vO7RBA7LGG4gZnmVR", + 1 + ], + [ + 5, + 40, + 40 + ], + [ + 0, + -25, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "label", + 6, + [ + [ + 3, + "Sprite - Sliced", + 20, + 30, + 1, + 1, + 2, + [ + null + ], + -63 + ] + ], + [ + 0, + "72H7MLl+BJQ6PKf0/pXpiZ", + 1 + ], + [ + 5, + 124.5, + 30 + ], + [ + 0, + 90, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "sprite", + 6, + [ + [ + 28, + 1, + 0, + false, + 2, + 2, + -64, + [ + 2 + ], + 3 + ] + ], + [ + 0, + "24rXyqKwhLmo/etzDS5uBA", + 1 + ], + [ + 5, + 700, + 800 + ], + [ + 0, + -25, + 0, + 0, + 0, + 0, + 1, + 0.2, + 0.2, + 1 + ] + ], + [ + 1, + "label", + 7, + [ + [ + 3, + "Sprite - Tiled", + 20, + 30, + 1, + 1, + 2, + [ + null + ], + -65 + ] + ], + [ + 0, + "84+9/9sNRFjIiXNpeVVYL4", + 1 + ], + [ + 5, + 113.375, + 30 + ], + [ + 0, + 110, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "sprite", + 7, + [ + [ + 28, + 2, + 0, + false, + 2, + 2, + -66, + [ + 4 + ], + 5 + ] + ], + [ + 0, + "25R2hvKGpEl5LjIqJa/TQG", + 1 + ], + [ + 5, + 1000, + 2000 + ], + [ + 0, + -25, + 0, + 0, + 0, + 0, + 1, + 0.1, + 0.1, + 1 + ] + ], + [ + 1, + "label", + 8, + [ + [ + 3, + "Sprite - Filled", + 20, + 30, + 1, + 1, + 2, + [ + null + ], + -67 + ] + ], + [ + 0, + "4dgWFWJnJDkLOf+68EDXHl", + 1 + ], + [ + 5, + 117.82, + 30 + ], + [ + 0, + 65.5, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "sprite", + 8, + [ + [ + 39, + 3, + 2, + 0.7, + false, + 2, + 2, + -68, + [ + 6 + ], + 7 + ] + ], + [ + 0, + "943ChJKgtOkLkxWK8LJrag", + 1 + ], + [ + 5, + 402, + 370 + ], + [ + 0, + -25, + 0, + 0, + 0, + 0, + 1, + 0.3, + 0.3, + 1 + ] + ], + [ + 1, + "label", + 9, + [ + [ + 3, + "Sprite - Radial", + 20, + 30, + 1, + 1, + 2, + [ + null + ], + -69 + ] + ], + [ + 0, + "3cUe7aTThGJ4w39HojyGKv", + 1 + ], + [ + 5, + 126.73, + 30 + ], + [ + 0, + 65.5, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "sprite", + 9, + [ + [ + 40, + 3, + 2, + 2, + 0.3, + 0.7, + false, + 2, + 2, + -70, + [ + 8 + ], + [ + 0, + 0.5, + 0.5 + ], + 9 + ] + ], + [ + 0, + "1cwLiQAbpDYLXhR7AEpB5L", + 1 + ], + [ + 5, + 402, + 370 + ], + [ + 0, + -25, + 0, + 0, + 0, + 0, + 1, + 0.3, + 0.3, + 1 + ] + ], + [ + 1, + "label", + 10, + [ + [ + 3, + "Sprite - Mesh", + 20, + 30, + 1, + 1, + 2, + [ + null + ], + -71 + ] + ], + [ + 0, + "a88tQBbOhIc7ABFOj/8+Sh", + 1 + ], + [ + 5, + 118.93, + 30 + ], + [ + 0, + 25, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "label", + 10, + [ + [ + 42, + "支持但暂无演示", + 20, + 30, + 1, + 1, + 2, + 2, + 2, + [ + null + ], + -72 + ] + ], + [ + 0, + "fa0KdEmgxLTLA21ifSte4O", + 1 + ], + [ + 5, + 140, + 30 + ], + [ + 0, + -25, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "label", + 11, + [ + [ + 3, + "Label", + 20, + 30, + 1, + 1, + 2, + [ + null + ], + -73 + ] + ], + [ + 0, + "26oSD6Do9MCYDOTc44bG6i", + 1 + ], + [ + 5, + 48.945, + 30 + ], + [ + 0, + 25, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "label", + 11, + [ + [ + 43, + "Bitmap Font", + 20, + 30, + false, + 1, + 1, + 2, + 2, + -74, + [ + 10 + ], + 11 + ] + ], + [ + 0, + "ee5y9SLaRH4b+8eW/9BxZO", + 1 + ], + [ + 5, + 108.75, + 30 + ], + [ + 0, + -25, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "label", + 12, + [ + [ + 3, + "MotionSteak", + 20, + 30, + 1, + 1, + 2, + [ + null + ], + -75 + ] + ], + [ + 0, + "a05VJqHelIZKmFgVVSjXxs", + 1 + ], + [ + 5, + 111.18, + 30 + ], + [ + 0, + 20, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "motionsteak", + 12, + [ + [ + 46, + 16, + 2, + -76, + [ + 12 + ], + 13 + ] + ], + [ + 0, + "cf0tu0HYpMMJ2cS3Etl/Wv", + 1 + ], + [ + 5, + 20, + 20 + ], + [ + 0, + -25, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "label", + 13, + [ + [ + 3, + "Spine", + 20, + 30, + 1, + 1, + 2, + [ + null + ], + -77 + ] + ], + [ + 0, + "3chb4Q98dFOrLtbzdt+vhO", + 1 + ], + [ + 5, + 51.16, + 30 + ], + [ + 0, + 61, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "spine", + 13, + [ + [ + 47, + "default", + "run", + 0, + "run", + true, + 2, + 2, + -78, + [ + 14 + ], + 15 + ] + ], + [ + 0, + "beF60N4qtNPaFZgrsB4mgi", + 1 + ], + [ + 5, + 20, + 20 + ], + [ + 0, + -45, + 0, + 0, + 0, + 0, + 1, + 0.1, + 0.1, + 1 + ] + ], + [ + 1, + "label", + 14, + [ + [ + 3, + "Spine - Cache", + 20, + 30, + 1, + 1, + 2, + [ + null + ], + -79 + ] + ], + [ + 0, + "e7a+XFvHVE0aenyeyt0UcA", + 1 + ], + [ + 5, + 126.75, + 30 + ], + [ + 0, + 61, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "spine", + 14, + [ + [ + 48, + "default", + "run", + 1, + 1, + "run", + true, + 2, + 2, + -80, + [ + 16 + ], + 17 + ] + ], + [ + 0, + "74FJWuBu5AsYAnkRtrRG0O", + 1 + ], + [ + 5, + 20, + 20 + ], + [ + 0, + -45, + 0, + 0, + 0, + 0, + 1, + 0.1, + 0.1, + 1 + ] + ], + [ + 1, + "label", + 15, + [ + [ + 3, + "Custom Material", + 20, + 30, + 1, + 1, + 2, + [ + null + ], + -81 + ] + ], + [ + 0, + "17PBy+QStKu7/TNPYI4DCz", + 1 + ], + [ + 5, + 145.605, + 30 + ], + [ + 0, + 30, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "sprite", + 15, + [ + [ + 27, + 2, + false, + 2, + 2, + -82, + [ + 18 + ], + 19 + ] + ], + [ + 0, + "60a28hu/5I07CP6SkTvPTQ", + 1 + ], + [ + 5, + 40, + 40 + ], + [ + 0, + -25, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 17, + "bar", + 4, + [ + -83 + ], + [ + 0, + "29pI3SelxAU6ODrNe5LS2g", + 1 + ], + [ + 5, + 8, + 30 + ], + [ + 0, + 1, + 0 + ] + ], + [ + 26, + 1, + 0, + 39, + [ + 20 + ] + ], + [ + 31, + false, + 1, + 4, + 40 + ], + [ + 32, + false, + 0.75, + 0.23, + null, + 3, + 2, + 41 + ] + ], + 0, + [ + 0, + 7, + 1, + 0, + 0, + 1, + 0, + -1, + 3, + 0, + 0, + 2, + 0, + 0, + 2, + 0, + 0, + 2, + 0, + -1, + 5, + 0, + -2, + 6, + 0, + -3, + 7, + 0, + -4, + 8, + 0, + -5, + 9, + 0, + -6, + 10, + 0, + -7, + 11, + 0, + -8, + 12, + 0, + -9, + 13, + 0, + -10, + 14, + 0, + -11, + 15, + 0, + -1, + 42, + 0, + 0, + 3, + 0, + 0, + 3, + 0, + -1, + 16, + 0, + -2, + 4, + 0, + -1, + 41, + 0, + 0, + 4, + 0, + 0, + 4, + 0, + -1, + 39, + 0, + 0, + 5, + 0, + -1, + 17, + 0, + -2, + 18, + 0, + 0, + 6, + 0, + -1, + 19, + 0, + -2, + 20, + 0, + 0, + 7, + 0, + -1, + 21, + 0, + -2, + 22, + 0, + 0, + 8, + 0, + -1, + 23, + 0, + -2, + 24, + 0, + 0, + 9, + 0, + -1, + 25, + 0, + -2, + 26, + 0, + 0, + 10, + 0, + -1, + 27, + 0, + -2, + 28, + 0, + 0, + 11, + 0, + -1, + 29, + 0, + -2, + 30, + 0, + 0, + 12, + 0, + -1, + 31, + 0, + -2, + 32, + 0, + 0, + 13, + 0, + -1, + 33, + 0, + -2, + 34, + 0, + 0, + 14, + 0, + -1, + 35, + 0, + -2, + 36, + 0, + 0, + 15, + 0, + -1, + 37, + 0, + -2, + 38, + 0, + 0, + 16, + 0, + 0, + 17, + 0, + 0, + 18, + 0, + 0, + 19, + 0, + 0, + 20, + 0, + 0, + 21, + 0, + 0, + 22, + 0, + 0, + 23, + 0, + 0, + 24, + 0, + 0, + 25, + 0, + 0, + 26, + 0, + 0, + 27, + 0, + 0, + 28, + 0, + 0, + 29, + 0, + 0, + 30, + 0, + 0, + 31, + 0, + 0, + 32, + 0, + 0, + 33, + 0, + 0, + 34, + 0, + 0, + 35, + 0, + 0, + 36, + 0, + 0, + 37, + 0, + 0, + 38, + 0, + -1, + 40, + 0, + 8, + 1, + 2, + 3, + 16, + 41, + 9, + 42, + 83 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 40 + ], + [ + -1, + 1, + -1, + 1, + -1, + 1, + -1, + 1, + -1, + 1, + -1, + 22, + -1, + 23, + -1, + 14, + -1, + 14, + -1, + 1, + -1, + -1, + 1, + -1, + 1, + 1 + ], + [ + 1, + 14, + 1, + 36, + 1, + 4, + 1, + 4, + 1, + 4, + 0, + 37, + 1, + 3, + 1, + 15, + 1, + 15, + 38, + 14, + 0, + 0, + 11, + 0, + 12, + 13 + ] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,1", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + { + "name": "default_btn_pressed", + "rect": [ + 0, + 0, + 40, + 40 + ], + "offset": [ + 0, + 0 + ], + "originalSize": [ + 40, + 40 + ], + "capInsets": [ + 12, + 12, + 12, + 12 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 2 + ], + [ + 39 + ] + ], + [ + [ + { + "name": "etc1_rgb_a", + "rect": [ + 24, + 12, + 154, + 131 + ], + "offset": [ + -13, + 2 + ], + "originalSize": [ + 228, + 159 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 2 + ], + [ + 40 + ] + ], + [ + [ + "0,9729,9729,33071,33071,0,0,0", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + { + "name": "default_btn_normal", + "rect": [ + 0, + 0, + 40, + 40 + ], + "offset": [ + 0, + 0 + ], + "originalSize": [ + 40, + 40 + ], + "capInsets": [ + 12, + 12, + 12, + 12 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 2 + ], + [ + 41 + ] + ] + ] +] \ No newline at end of file diff --git a/demo/web-mobile/assets/multi-render/index.f7eed.js b/demo/web-mobile/assets/multi-render/index.f7eed.js new file mode 100644 index 00000000..e7415848 --- /dev/null +++ b/demo/web-mobile/assets/multi-render/index.f7eed.js @@ -0,0 +1,100 @@ +window.__require = function e(t, n, r) { + function s(o, u) { + if (!n[o]) { + if (!t[o]) { + var b = o.split("/"); + b = b[b.length - 1]; + if (!t[b]) { + var a = "function" == typeof __require && __require; + if (!u && a) return a(b, !0); + if (i) return i(b, !0); + throw new Error("Cannot find module '" + o + "'"); + } + o = b; + } + var f = n[o] = { + exports: {} + }; + t[o][0].call(f.exports, function(e) { + var n = t[o][1][e]; + return s(n || e); + }, f, f.exports, e, t, n, r); + } + return n[o].exports; + } + var i = "function" == typeof __require && __require; + for (var o = 0; o < r.length; o++) s(r[o]); + return s; +}({ + "multi-batcher": [ function(require, module, exports) { + "use strict"; + cc._RF.push(module, "3e9188DEK9FCYlYeL+jvmrQ", "multi-batcher"); + "use strict"; + var __extends = this && this.__extends || function() { + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || { + __proto__: [] + } instanceof Array && function(d, b) { + d.__proto__ = b; + } || function(d, b) { + for (var p in b) Object.prototype.hasOwnProperty.call(b, p) && (d[p] = b[p]); + }; + return extendStatics(d, b); + }; + return function(d, b) { + extendStatics(d, b); + function __() { + this.constructor = d; + } + d.prototype = null === b ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + }(); + var __decorate = this && this.__decorate || function(decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : null === desc ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if ("object" === typeof Reflect && "function" === typeof Reflect.decorate) r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) (d = decorators[i]) && (r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r); + return c > 3 && r && Object.defineProperty(target, key, r), r; + }; + Object.defineProperty(exports, "__esModule", { + value: true + }); + var _a = cc._decorator, ccclass = _a.ccclass, property = _a.property; + var MultiBatcher = function(_super) { + __extends(MultiBatcher, _super); + function MultiBatcher() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.batchBtn = null; + _this.cancelBtn = null; + _this.textures = null; + return _this; + } + MultiBatcher.prototype.onLoad = function() { + var _this = this; + this.batchBtn.on("click", function() { + var batcher = new cc.sp.MultiBatcher(); + batcher.init(); + _this.textures.children.forEach(function(v) { + var sprite = v.getComponent(cc.Sprite); + batcher.requsetMaterial(sprite.spriteFrame.getTexture()); + sprite.setVertsDirty(); + }); + }); + this.cancelBtn.on("click", function() { + _this.textures.children.forEach(function(v) { + var sprite = v.getComponent(cc.Sprite); + sprite.spriteFrame.getTexture().unlinkMaterial(); + sprite.setMaterial(0, cc.Material.getBuiltinMaterial("2d-sprite")); + sprite.setVertsDirty(); + }); + }); + }; + __decorate([ property(cc.Node) ], MultiBatcher.prototype, "batchBtn", void 0); + __decorate([ property(cc.Node) ], MultiBatcher.prototype, "cancelBtn", void 0); + __decorate([ property(cc.Node) ], MultiBatcher.prototype, "textures", void 0); + MultiBatcher = __decorate([ ccclass ], MultiBatcher); + return MultiBatcher; + }(cc.Component); + exports.default = MultiBatcher; + cc._RF.pop(); + }, {} ] +}, {}, [ "multi-batcher" ]); +//# sourceMappingURL=index.js.map diff --git a/demo/web-mobile/assets/multi-render/index.js.map b/demo/web-mobile/assets/multi-render/index.js.map new file mode 100644 index 00000000..c774d1b4 --- /dev/null +++ b/demo/web-mobile/assets/multi-render/index.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["assets/multi-render/multi-batcher/multi-batcher.ts"],"names":["_a","cc","_decorator","ccclass","property","MultiBatcher","_super","__extends","_this","apply","this","arguments","batchBtn","cancelBtn","textures","prototype","onLoad","on","batcher","sp","init","children","forEach","v","sprite","getComponent","Sprite","requsetMaterial","spriteFrame","getTexture","setVertsDirty","unlinkMaterial","setMaterial","Material","getBuiltinMaterial","__decorate","Node","Component","exports","default"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IACM,IAAAA,KAAAC,GAAAC,YAAAC,UAAAH,GAAAG,SAAAC,WAAAJ,GAAAI;IAGN,IAAAC,eAAA,SAAAC;MAA0CC,UAAAF,cAAAC;MAA1C,SAAAD;QAAA,IAAAG,QAAA,SAAAF,UAAAA,OAAAG,MAAAC,MAAAC,cAAAD;QAGIF,MAAAI,WAAA;QAGAJ,MAAAK,YAAA;QAGAL,MAAAM,WAAA;;;MAGUT,aAAAU,UAAAC,SAAA;QAAV,IAAAR,QAAAE;QACIA,KAAAE,SAAAK,GAAA,SAAA;UACI,IAAAC,UAAA,IAAAjB,GAAAkB,GAAAd;UACAa,QAAAE;UACAZ,MAAAM,SAAAO,SAAAC,QAAA,SAAAC;YACI,IAAAC,SAAAD,EAAAE,aAAAxB,GAAAyB;YACAR,QAAAS,gBAAAH,OAAAI,YAAAC;YACAL,OAAAM;;;QAIRpB,KAAAG,UAAAI,GAAA,SAAA;UACIT,MAAAM,SAAAO,SAAAC,QAAA,SAAAC;YACI,IAAAC,SAAAD,EAAAE,aAAAxB,GAAAyB;YACAF,OAAAI,YAAAC,aAAAE;YACAP,OAAAQ,YAAA,GAAA/B,GAAAgC,SAAAC,mBAAA;YACAV,OAAAM;;;;MAzBZK,WAAA,EADC/B,SAAAH,GAAAmC,SACwB/B,aAAAU,WAAA,iBAAA;MAGzBoB,WAAA,EADC/B,SAAAH,GAAAmC,SACyB/B,aAAAU,WAAA,kBAAA;MAG1BoB,WAAA,EADC/B,SAAAH,GAAAmC,SACwB/B,aAAAU,WAAA,iBAAA;MATRV,eAAA8B,WAAA,EADpBhC,WACoBE;MAiCrB,OAAAA;KAjCA,CAAAJ,GAAAoC;IAAqBC,QAAAC,UAAAlC","sourcesContent":["\nconst { ccclass, property } = cc._decorator;\n\n@ccclass\nexport default class MultiBatcher extends cc.Component {\n\n @property(cc.Node)\n batchBtn: cc.Node = null;\n\n @property(cc.Node)\n cancelBtn: cc.Node = null;\n\n @property(cc.Node)\n textures: cc.Node = null;\n\n\n protected onLoad(): void {\n this.batchBtn.on('click', () => {\n const batcher = new cc.sp.MultiBatcher();\n batcher.init();\n this.textures.children.forEach(v => {\n const sprite = v.getComponent(cc.Sprite);\n batcher.requsetMaterial(sprite.spriteFrame.getTexture());\n sprite.setVertsDirty();\n });\n });\n\n this.cancelBtn.on('click', () => {\n this.textures.children.forEach(v => {\n const sprite = v.getComponent(cc.Sprite);\n sprite.spriteFrame.getTexture().unlinkMaterial();\n sprite.setMaterial(0, cc.Material.getBuiltinMaterial('2d-sprite'));\n sprite.setVertsDirty();\n });\n });\n }\n\n}\n"],"file":"index.js"} \ No newline at end of file diff --git a/demo/web-mobile/assets/multi-render/native/10/100eba2c-cfa2-4fb0-a5ac-a95f9b461fc0.eae97.png b/demo/web-mobile/assets/multi-render/native/10/100eba2c-cfa2-4fb0-a5ac-a95f9b461fc0.eae97.png new file mode 100644 index 0000000000000000000000000000000000000000..0b6e0ddb24d9e3a88e5c0f6dc018e70560d3686c GIT binary patch literal 6280 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¥8aOAU&74+jD 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 literal 0 HcmV?d00001 diff --git a/demo/web-mobile/assets/multi-render/native/22/22247785-ef30-4b66-a9d2-ebcaf6a7f6e8.2ecc6.png b/demo/web-mobile/assets/multi-render/native/22/22247785-ef30-4b66-a9d2-ebcaf6a7f6e8.2ecc6.png new file mode 100644 index 0000000000000000000000000000000000000000..89bfc60edd40a0b10a11c98727cee71335268c52 GIT binary patch literal 6694 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�i-Tpbaedw&y)VVLWam-IJmY@VvTva(Wbs2j^NQIu!*;Ew7OQDivS*GNu@s4$yXeilYB<;6WzDgNmw1|Xt! z&8ZV73|NJZsoLl30K(%xwfAt11AujVI@{Y@d%su*NU^D(;@j~q3ljjXxUf~rBR}0Y wkB(WnGGF&ARBWW{l8-EFEY@sZ&k=xnJ@ju_m(@Ra7Ys_^0lA^90iGpH@kv$GWWt z5x%m#%XjdZTZCC3!j6|bZ3PkhS=4_Lv2_o3A44RVskw`DEIlLae%7@eAtGlHKdp7< z7Uz4<5Vnzdk5j)xw4`&LjsLb(Tj?1-Twfeb4d3oVn__*BU{EVd`z&plJSZZ59^p{4 zTna>?r+`0aA~okSR{(NWv86K}Uyo|97|3{|d9j~s%2+LuoL%ZO_E8E)<9TM^{= z)7fHcVLI`%XhUvFsg)+IH0|khFVsTcOHcjk>DlA6M3%YgDrBVF-@zCSX(&6ss|f7a zb#ho=(C`Pc(p6WP8r$e*=J}S^h5|5AmbrI*o0pyLGW_H;a5Eh1eHh^1V`*UH8LITb#&-cM*u>*l_>i{xrH=>z7H@bk+F$1?fpj(3mX( zP6=O7**+)CwAcIt2e{Y46Q8<^;gCl-{Q2bmq49b5d1vGC8U6r2IazzUEIyj}b1?RU zNpgtr&+o4ruB43 zbl0t$PmjKXD!)u+AY{4h^-`ote8BU9pz~%HLlXj zPKtfAN((1CSZVTA(iBbpg+A7Dvwfxf;U`PcdcyqP7J+D)t6n16Hl`swj^cN3A$pO_ zcW3y-IEFuH$o^`F_}lzKaPoN z7GL}7Q+Bff3DWIf4q@MvUV&gI0ZXNHy)h9tGk`A^AZ7spTUrEZY1I%qzpMoMc zExP;*Lw+P|N1m}u*>?I8EY(}XrtFuAgdCPS@WL^jf1Tkrc*-w$wukc(pfiaujvW5* zxRPbRnK>2tDtE<4redyNS7(*SYB4<(!As0T&k@Ln&v&v6+9-62B!p5>;$YQ3&V`SP z6b7Xqt*#V2lf(Oh2>%vZl?)Br9y}6AIzs7=uo@=t@J2@;RyDd46qb&ugzZ+k1LHI~ z<`mK6jm2ZrdthS4v+m5C@@V6VF*j9J1j2(RjCt_A-x@Tz%9){~l$%O~MghN=V9dj@ zP99|vNQtK0XvUo5yZ@qfHHOzkJrl;ZHw}>2HF8=`R*AiC?6%@ZTQgbRRvgEMEXCmO`{jFzShCRbRDFNYKVWL?XEVe5Zk_Tv1@Jo`p!t7 zoB69_9V+V*&q7irECz_Tl~ zAeAuz?s^j|x1!(E)6ba;#z1J}X@(vRveE+7|LiKg9(qOTp4I48WA1mIY1!0dmLtMu zJW95tx$;0I!Z7;fqHO06gNXm;U=;Rnm#BpD$H9xHSSE2^vR^}}e6a9;<3@C|-*~;; z+NF4QNPZqP{~#L<%%>T)O{ZG=uw^m;+dgB+U~PW4dGcLI@!|)+;xLSZ0!{a5hAiHg zCW0XVE0kWGj#x@l>=O>TWW{SaZS7g%N!Zb@tQJw5jJq_Qa~5m_uknj!ML!lplm?ps zi=Nj=JehYZSAI7jzJT=Z(X~9U)5>hGt3pHPV~F}aix2kc zWP||Au@>(bl_<7z($uUv1FQ3EF_)s*N3eyWivziX#CD=aJlO(;O;d(SqB>5zk`%i| zf#J?mYgj+Xb|e2E>HJY`++wPcY|gJQ_$Syd7)|cl670X5M2dE0F-sCAdvu~?p1I*%mLW{P6>xQRvrX>(_Wf8jzrFU}>HsFOiN@hRIK#AJb~hMs1|BFyW1O+v zF1AFpwPua_22y;>eroBJheDj0I)QTUHNZB-4B*l|= zhiKM{LMA^?sTHKcLLbhEz|?6T#21{NVv7FVXj0KI5<~jY*bT?e666y_#l=NMvj&#j zB;8OJ@6oi3f-#wq0Fqz|ATTM1VcSnIF~R2XdS+WW{v9JYjHMpnHC4gyfDS=*lwbh~ ztfphVwE3ETLHsm5s|yB$8>n=Y~Wco9)FVEGqipLx;WdemoZi+zgOL z()%Vj=8sO}W?Aoq|C;DpjV!L6n}V0Zz=A>mtT=fMTMsg8$|##w&aPUt2hvhtMtAnI zZ~FCiN@9z%I6W1dnU#@|k)55D<;!ESpM=8K-FAxcL))7WgW;1gy*h(vHz?IJWz?goQfPpCuJXWGJdXF5I+BOMacg!`O0_vzig z7-X*uejFvT?UWQ##zd4yz$z0eRuqt(bvZBB;#{Q@#GlKymes2CJLF_=S1K)uj1NQ& z0Q4x9s-;8%6=Q$PS>(tbI-z)ty>&hmV@cCIkU%j`&cAQYb1JfdUN$&jq z`Y@q!7o5p*4@6n*+}UF<+j838DCDGoOz;Md88Y%bQhQZ(cE>L?_Yw-p5HZu7ch9b? z)$msDi~G0(Tm}hH;&pYcIl!YoH}9A2KmPX4`+D=Vy*Xh)5`MQZs8MR5KoorI<4Gn; zCoSuJ{&t7KJDqO zvz;H)m+MN@^+#pf=|u_pt4l9gPt5$CIrZ0|0a6+)-D*22P<)!woN-bpoY?kzz2ay% zdHkhmp0#6lAt^>S&NLrYu*j4)egzTs9XAvI(WbNM-1diPQJ{O6_8c%$yfjHWrq*$* zIZ36xN#?cbTdK)$32QzffsFRnhn$(9-To`o@f-$e++8WX@C@h9Po{6zpb*%Ms)v&o z|0j|6@<4-R*$vfpt-+_b#JBVoD~wdn&3(Xaz(N zDv!%ereTtbDzETQcK``(B4{GhbX~&6eRiKTIrMeQs$*aNFVv$LvX0{_D&2N}rHN^3SCNS@Npt7J zq$pIiVw#%W5v*x$X_C}+B_vm)>{oZgbO9^3x4OsFZQp8J>`b^oK0}QZlUCk>GLL(e znbWGLSs5YQ;-bh~B}S)wE4w@xmA`1vX+B^oKNQT(9o!TUsnb3s)PMxeJ^7pAk7Ops zs=k2bKIcj?i~PisRuFdXNLNty2ajeUmHAi;LE+?Z=mErpqqvsqLZ5PiEHOP11<0F1qquY|%P4g4nd0EUIY!f)Qe>O}!j!P@)>z1{vyja}i3;Z}k^3@6stON5#Er*=wC zlU-a5nv_(vm1PUV^)Rp;4^%+k_*Dpm9J>ikW1#6PH(O=V|d5`K$_94@e_pfC(jvC0ray zNp`V^0HBvxIJey1?Ix4$9t^#jNX4LMwy50BVS!G3!3g!P{;EMeHZk!@+%&S`UB6Qf z)(W*klq1$7ia{M<386N#N3UQbM;L9?XGrV6M?d_5JEV)z~sI(0UI6Dg`t zDnZE>kEeAakmoXKDwzeqX}SJqC$tQnwLllWzrPnn=f4ZyPcqP;f733zuVXtCau%`h zP*PF@sy8JIYj*6+cj5XBoE+>%s2wfe-ksO;eW_UQgI309p-MKr-Y|97cw0Hd4 zf?XaY8X?PNObS9qYb~eZJx>>fVaD)=AFlS;3^XJeH-bO@1%ID}?PKpIt4M|B!c&Fz*LjioHrc1@WasmvXduquwueV_D^BZI=6&)#54b;(Gs7KXA zMC6v&K%10}<17}KP3v1(#I2Z_RJ(dsO-oTxLJIT7bS)}4%4AfWQ3pBNEW-0-S#L(? zCDF)Q0{I_z!E*3pE zAHU(~&CUHwg?)!E;KYN7qd7^)(tZu17w@!mQY!`p=Bnx-t96V=TE4{+BlnIZe0z*- zd-V@Dr=)&=zwM{WWyN0x_w00TH1ZQyxRO5d{&9vrBVJCbLl*B&(yI{HzafQv0RkbYttm5FxcuQXcy!O zlu8`6a)um4SJ4%NVD1f&3^&IN!nWJL#(4HNoevX9CD{!W2VW;R#+2r|A@@nD6&FS+ zBZK$TEKA^UG|93g0%jf=AII|<&Nz$;+v4a7L+iNX(&pD)rg0q{W{OD&&96D)!Y!31 zbISVY^Wx0YTK)ebWeiDL-4dp-vLFILa!VHgb0{5ic{WX5O6-{C>b{pr3oR;uqB(7g z4Y#?YAR^6#BKnhggUh7qxDc;lLz{2c?>d(=WMbObS8*S@K#a|c3KQzU;uy9XetC=( z*C0$Fpxlu!os?uJrAqaP%2#8tY|;9|t5908v#{fn!8LZ(Tl#f+V_{zH7TKCnY2Cr* zrM8^9%vy3~{b=h>75c+S2e8pxQ1O67ZwjWpc4v~tT!9O+=p~kGXoVs5c2aylUX+ee zX6Zh4HbsXp=!^Kr5VhJzN+t7%@crkt#M|`->I7Qg!&Y)pkq&XELVlbC`;m+u>Ctv> z&rD%luFqVST%J3puHDS19JLyf{kPqu&}KLJ^2+T#A|)*T%ZyL-ET!(#Q-D1XlqIYN z$V?=f^<9XiSuN__e1R;cY+wl(-@srkw`X6I`d}-51UfnL1-x;$o3`wY$r|2}HPqm> zlcD9@IPbfJ`URiI{QOu*1?$38GZ{ExMDUSjMN@)@r|lAe$5Zhu*o99e1ppBP!mn#x zqU|?5pA1V@4Q`PKr)W<%CFaBMzdirWA@jL0RvRGPZ1dbCzq`NR*w{F1P@2bmcv`#!bs;!)pijwJHNr;}{tKEtu&y=@7+&&?=T#c=f>?0-NlSW}oq z-`T56yIGwSI_r-D^%bcn3HO|xT`hQmN!;2Y4alX?_XXv@xH&Z00UiE6<(xz*P1>&b zVFS9-dH~0#wbfiz!?qA#Y6m<2^-XfG1>3qlx3L&9j2(1$;Lf09j~4tspXMnYZ-r;#J3-oDA{RN(WX+E-o$` zxRyrg9gmmz;s$NO1v^;2j)CS@9#>`&VxPVp-p#hR&Tve!R!)=>1+!ka2uVR3vF21rN_XQ3oO{qrZX!87R!IB;nZeKhV; z>W}2#OkpYxKMS;P5p%gvW_GD4R&NjUTFCv%5K1oWBFX<7CsNm_tU*Dt!#n_Wc7AQD z1Pu1JM{U5fkT2s-08miK8H`s|9XRlE9=x2hC!{eG6@Xg)vav|T(&py!@{W#31;t|vxu)Dy0rdk(tKy)T+9~5oMTHU&_~#E4F#8SqctKq2C6;R>=UWe6 zx%8k<@*o@_D(hjT`3wX`pIzbL;<(x2DUA*hnG&)Ea{26vS9PIFlwmzBOxgt!-p&hAU<8REaqyL z^LG40a0YG!Ex2v5Y&YhWRruRK_3boiW4Z8>^71(~zv9?PJ&Hl>@!n`xXUIced-j)x zmSn6vd-328oavaDXF78e9d&D2w{VP<5zvevApiMC4)3ot;Mt;l1YV7FAcCVHg9?)F z&;Vp@wJ&ekFX&H-cV}c#QYHh-{gnS>s`QmO|AYN`K#e$69=QQfWMV%u1Fre=TmlcXh*ps9u7AKzE8)?Eigp4M+M!$lapM> zBLh1Uv-XKtLsiS`4}5R-_rEiW2z+af2~PQvQ1fPXNO*AU<6oDGa~wVZ;o`v_#m?{`E9sOJH&s3T%>LJe1UrY62NVbG?Je`#l)q^ciz8N2!FFTYi`^xEe!ER85(CPcad59e zc=1Ah5E;^^f{l88EwSshgzD3t-RHiG6XLLqKjSGmUq{`)mA>)W%}k6-u%nuPAK~4D zxENE#8-A!XUtj|gidEd5|D=QcaqE6Vguh2l2pN!vyB{ z6axIH!C;!CbJOo{UW-bBWy56U(J;I!-R^TY9JbV`MbBDl#Gf7xf24Vf24GK2hx#|$ zZ{jfqium0>o7ghmk5^QD|MgWy!qrtGu(YGYhoEi%jcFe7N>N)?D5o*@ED@mtS`B7% z`G^|){EGnn6wRL)0F+}*9KZUTlHKgwYSHFDZvFM60M+^-n7&e`5fw374MH=t z0BK&3hqh1Oq)hh&hNY_16B62FHdnKMcL0X)lw$G{{gO5Dc=A9 literal 0 HcmV?d00001 diff --git a/demo/web-mobile/assets/multi-render/native/44/44999d18-51d1-4017-9ea6-98dcad8ecdf5.99af5.png b/demo/web-mobile/assets/multi-render/native/44/44999d18-51d1-4017-9ea6-98dcad8ecdf5.99af5.png new file mode 100644 index 0000000000000000000000000000000000000000..bfe479bc2882e69bc96dee3fa4bfdfee375d0416 GIT binary patch literal 6904 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�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%0A-v#qZhZ6e=9)WvYo)qg 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 literal 0 HcmV?d00001 diff --git a/demo/web-mobile/assets/multi-render/native/6e/6e056173-d285-473c-b206-40a7fff5386e.6d3cf.png b/demo/web-mobile/assets/multi-render/native/6e/6e056173-d285-473c-b206-40a7fff5386e.6d3cf.png new file mode 100644 index 0000000000000000000000000000000000000000..8050170ccf3fb7d031bc06928ce6f6b643d25d07 GIT binary patch literal 418 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU3?z3ec*Fy#oB*E?SD(znPoF-SnwolhdjlCC zKYj#~5b*#1e|vlT+qZAOfB(L*v2owNeQj-RPEJlCAt4VRK8%Tpv9z>&{rYujY3cLl z&zqW>y1ToRlaue>y*qdA+><9yUcY|*(xpoU1qEJSUYj;;%F4>xY$aL&w3n+S$S;@y zX!^U(32!H|HD~(V1&ZGGba4!+xOMl+O};}4BCdfJp_vP(+}e5W#sB|{nFTLL>^$=0 zNnKpxF3vaKQ&&Dn={8B$mb*Hs(?Ua{Ux(%D1e22sJR&^qOlD=A+Ty*+;7WyA%fhb) zoQIDces){*cC2|=ar%|u8~F@3m@8lJE4!W3S-$34!CGzosoQ$5UOt&Kx7f%ad+LMG zyY(&Z+yRsB#&%}TE)#pV_jBwgOO22BGL^pHWlmam?)0A+=J|?SlK-A#a^xsZW>;q9 zO49LT(0K7HIpUI^-GYS=E1H|0w?%9=(G~wFpE*tM(Y|N%%UM@U=ie2^p(+RTCWEJ| KpUXO@geCy3Aj$y% literal 0 HcmV?d00001 diff --git a/demo/web-mobile/assets/multi-render/native/71/71561142-4c83-4933-afca-cb7a17f67053.c06a9.png b/demo/web-mobile/assets/multi-render/native/71/71561142-4c83-4933-afca-cb7a17f67053.c06a9.png new file mode 100644 index 0000000000000000000000000000000000000000..0556b76119fa785e777d114f9e5489793ac2275a GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU3?z3ec*FxKxd5LK*Sfm8riO;v+S(d0s0V_& zIv}^Hu@T6;y&^0HsFJ-T$S?Ry|LLQCY&moH?~eltS$n!ThE&{oduAgqg96VH2X-OB zZ}Btw_&zf4c|CdMg8hQ7TS5-RIsM+XKPIUS1o%5%En`!+6sS|?-?Kn_Y0KYPEI?xz NJYD@<);T3K0RZ7fKqmkI literal 0 HcmV?d00001 diff --git a/demo/web-mobile/assets/multi-render/native/77/77844f44-c0da-4c94-a97f-fac1ab844551.92cfc.png b/demo/web-mobile/assets/multi-render/native/77/77844f44-c0da-4c94-a97f-fac1ab844551.92cfc.png new file mode 100644 index 0000000000000000000000000000000000000000..39098122d0ac87dced5d8fb41904eac2ba6958a2 GIT binary patch literal 6611 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 G!~O@ZgAly{ literal 0 HcmV?d00001 diff --git a/demo/web-mobile/assets/multi-render/native/7a/7a788430-6621-4bd5-86ce-0957a216dd69.9e7e3.png b/demo/web-mobile/assets/multi-render/native/7a/7a788430-6621-4bd5-86ce-0957a216dd69.9e7e3.png new file mode 100644 index 0000000000000000000000000000000000000000..83fb86dfc249d63c696fbaba5c57418b37d2f337 GIT binary patch literal 7299 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 literal 0 HcmV?d00001 diff --git a/demo/web-mobile/assets/multi-render/native/b6/b6161231-4d65-475c-a6bb-a8199e851e88.6159f.png b/demo/web-mobile/assets/multi-render/native/b6/b6161231-4d65-475c-a6bb-a8199e851e88.6159f.png new file mode 100644 index 0000000000000000000000000000000000000000..2be40f757c919fe05a5e133889cf9dcd49990fef GIT binary patch literal 6553 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 literal 0 HcmV?d00001 diff --git a/demo/web-mobile/assets/multi-render/native/e8/e851e89b-faa2-4484-bea6-5c01dd9f06e2.90cf4.png b/demo/web-mobile/assets/multi-render/native/e8/e851e89b-faa2-4484-bea6-5c01dd9f06e2.90cf4.png new file mode 100644 index 0000000000000000000000000000000000000000..cb3c93f52c50bb9e8b259bfeaf3585e8422018ff GIT binary patch literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU3?z3ec*FxK#Q>iW*H^Dz-M)SM^XJcBzI^%n z_wWDz|AFjVw{8KsckbMI_UxISo=hZAF?&gnU+~AjpC&f3b!~Vb76BA;@N{tuskrs_ z%t28GMUEpE7 literal 0 HcmV?d00001 diff --git a/demo/web-mobile/assets/multi-render/native/eb/eb72a5a2-8837-4f45-a24a-2486eef5fb78.46cee.png b/demo/web-mobile/assets/multi-render/native/eb/eb72a5a2-8837-4f45-a24a-2486eef5fb78.46cee.png new file mode 100644 index 0000000000000000000000000000000000000000..c539ad9515d9bc34ec71ac2342f2ad71cbbd25e3 GIT binary patch literal 6959 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 0; i--) (d = decorators[i]) && (r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r); + return c > 3 && r && Object.defineProperty(target, key, r), r; + }; + Object.defineProperty(exports, "__esModule", { + value: true + }); + var _a = cc._decorator, ccclass = _a.ccclass, property = _a.property; + var SpineSkin = function(_super) { + __extends(SpineSkin, _super); + function SpineSkin() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.addBoyBtn = null; + _this.removeBoyBtn = null; + _this.randomChangeBtn = null; + _this.boy = null; + _this.heads = []; + _this.boys = []; + return _this; + } + SpineSkin.prototype.start = function() { + var _this = this; + var boySpine = this.boy.getComponentInChildren(sp.Skeleton); + var newSkeletonData = boySpine.skeletonData.clone(); + boySpine.skeletonData = newSkeletonData; + boySpine.animation = "attack"; + this.boys.push(this.boy); + this.addBoyBtn.on("click", function() { + var newBoy = cc.instantiate(_this.boy); + var newBoySpine = newBoy.getComponentInChildren(sp.Skeleton); + boySpine.skeletonData = newBoySpine.skeletonData.clone(); + boySpine.animation = "attack"; + _this.boy.parent.addChild(newBoy); + newBoy.setPosition(_this.boys[_this.boys.length - 1].position); + newBoy.x += 100; + if (_this.boys.length % 2 === 1) { + newBoy.getComponentInChildren(sp.Skeleton).setAnimationCacheMode(sp.Skeleton.AnimationCacheMode.PRIVATE_CACHE); + newBoy.getComponentInChildren(cc.Label).string = "Spine - Cache"; + } + _this.boys.push(newBoy); + }); + this.removeBoyBtn.on("click", function() { + if (_this.boys.length > 1) { + _this.boys[_this.boys.length - 1].destroy(); + _this.boys.length -= 1; + } + }); + this.randomChangeBtn.on("click", function() { + var boy = _this.boys[_this.boys.length - 1].getComponentInChildren(sp.Skeleton); + boy.setRegion("Head", "Head", sp.SkeletonData.createRegion(_this.heads[Math.floor(Math.random() * _this.heads.length)])); + }); + }; + __decorate([ property(cc.Node) ], SpineSkin.prototype, "addBoyBtn", void 0); + __decorate([ property(cc.Node) ], SpineSkin.prototype, "removeBoyBtn", void 0); + __decorate([ property(cc.Node) ], SpineSkin.prototype, "randomChangeBtn", void 0); + __decorate([ property(cc.Node) ], SpineSkin.prototype, "boy", void 0); + __decorate([ property([ cc.SpriteFrame ]) ], SpineSkin.prototype, "heads", void 0); + SpineSkin = __decorate([ ccclass ], SpineSkin); + return SpineSkin; + }(cc.Component); + exports.default = SpineSkin; + cc._RF.pop(); + }, {} ] +}, {}, [ "spine-skin" ]); +//# sourceMappingURL=index.js.map diff --git a/demo/web-mobile/assets/spine/index.js.map b/demo/web-mobile/assets/spine/index.js.map new file mode 100644 index 00000000..d9fdbe7c --- /dev/null +++ b/demo/web-mobile/assets/spine/index.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["assets/spine/skin/spine-skin.ts"],"names":["_a","cc","_decorator","ccclass","property","SpineSkin","_super","__extends","_this","apply","this","arguments","addBoyBtn","removeBoyBtn","randomChangeBtn","boy","heads","boys","prototype","start","boySpine","getComponentInChildren","sp","Skeleton","newSkeletonData","skeletonData","clone","animation","push","on","newBoy","instantiate","newBoySpine","parent","addChild","setPosition","length","position","x","setAnimationCacheMode","AnimationCacheMode","PRIVATE_CACHE","Label","string","destroy","setRegion","SkeletonData","createRegion","Math","floor","random","__decorate","Node","SpriteFrame","Component","exports","default"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAAM,IAAAA,KAAAC,GAAAC,YAAAC,UAAAH,GAAAG,SAAAC,WAAAJ,GAAAI;IAGN,IAAAC,YAAA,SAAAC;MAAuCC,UAAAF,WAAAC;MAAvC,SAAAD;QAAA,IAAAG,QAAA,SAAAF,UAAAA,OAAAG,MAAAC,MAAAC,cAAAD;QAGIF,MAAAI,YAAA;QAGAJ,MAAAK,eAAA;QAGAL,MAAAM,kBAAA;QAGAN,MAAAO,MAAA;QAGAP,MAAAQ,QAAA;QAEAR,MAAAS,OAAA;;;MAEUZ,UAAAa,UAAAC,QAAA;QAAV,IAAAX,QAAAE;QACI,IAAAU,WAAAV,KAAAK,IAAAM,uBAAAC,GAAAC;QACA,IAAAC,kBAAAJ,SAAAK,aAAAC;QACAN,SAAAK,eAAAD;QACAJ,SAAAO,YAAA;QAEAjB,KAAAO,KAAAW,KAAAlB,KAAAK;QAEAL,KAAAE,UAAAiB,GAAA,SAAA;UACI,IAAAC,SAAA7B,GAAA8B,YAAAvB,MAAAO;UACA,IAAAiB,cAAAF,OAAAT,uBAAAC,GAAAC;UACAH,SAAAK,eAAAO,YAAAP,aAAAC;UACAN,SAAAO,YAAA;UAEAnB,MAAAO,IAAAkB,OAAAC,SAAAJ;UACAA,OAAAK,YAAA3B,MAAAS,KAAAT,MAAAS,KAAAmB,SAAA,GAAAC;UACAP,OAAAQ,KAAA;UACA,IAAA9B,MAAAS,KAAAmB,SAAA,MAAA,GAAA;YACIN,OAAAT,uBAAAC,GAAAC,UAAAgB,sBAAAjB,GAAAC,SAAAiB,mBAAAC;YACAX,OAAAT,uBAAApB,GAAAyC,OAAAC,SAAA;;UAEJnC,MAAAS,KAAAW,KAAAE;;QAGJpB,KAAAG,aAAAgB,GAAA,SAAA;UACI,IAAArB,MAAAS,KAAAmB,SAAA,GAAA;YACI5B,MAAAS,KAAAT,MAAAS,KAAAmB,SAAA,GAAAQ;YACApC,MAAAS,KAAAmB,UAAA;;;QAIR1B,KAAAI,gBAAAe,GAAA,SAAA;UACI,IAAAd,MAAAP,MAAAS,KAAAT,MAAAS,KAAAmB,SAAA,GAAAf,uBAAAC,GAAAC;UACAR,IAAA8B,UAAA,QAAA,QAAAvB,GAAAwB,aAAAC,aAAAvC,MAAAQ,MAAAgC,KAAAC,MAAAD,KAAAE,WAAA1C,MAAAQ,MAAA;;;MAjDRmC,WAAA,EADC/C,SAAAH,GAAAmD,SACyB/C,UAAAa,WAAA,kBAAA;MAG1BiC,WAAA,EADC/C,SAAAH,GAAAmD,SAC4B/C,UAAAa,WAAA,qBAAA;MAG7BiC,WAAA,EADC/C,SAAAH,GAAAmD,SAC+B/C,UAAAa,WAAA,wBAAA;MAGhCiC,WAAA,EADC/C,SAAAH,GAAAmD,SACmB/C,UAAAa,WAAA,YAAA;MAGpBiC,WAAA,EADC/C,SAAA,EAAAH,GAAAoD,kBAC4BhD,UAAAa,WAAA,cAAA;MAfZb,YAAA8C,WAAA,EADpBhD,WACoBE;MAwDrB,OAAAA;KAxDA,CAAAJ,GAAAqD;IAAqBC,QAAAC,UAAAnD","sourcesContent":["const { ccclass, property } = cc._decorator;\n\n@ccclass\nexport default class SpineSkin extends cc.Component {\n\n @property(cc.Node)\n addBoyBtn: cc.Node = null;\n\n @property(cc.Node)\n removeBoyBtn: cc.Node = null;\n\n @property(cc.Node)\n randomChangeBtn: cc.Node = null;\n\n @property(cc.Node)\n boy: cc.Node = null;\n\n @property([cc.SpriteFrame])\n heads: cc.SpriteFrame[] = [];\n\n boys: cc.Node[] = [];\n\n protected start(): void {\n const boySpine = this.boy.getComponentInChildren(sp.Skeleton);\n const newSkeletonData = boySpine.skeletonData.clone();\n boySpine.skeletonData = newSkeletonData;\n boySpine.animation = 'attack';\n\n this.boys.push(this.boy);\n\n this.addBoyBtn.on('click', () => {\n const newBoy = cc.instantiate(this.boy);\n const newBoySpine = newBoy.getComponentInChildren(sp.Skeleton);\n boySpine.skeletonData = newBoySpine.skeletonData.clone();\n boySpine.animation = 'attack';\n\n this.boy.parent.addChild(newBoy);\n newBoy.setPosition(this.boys[this.boys.length - 1].position);\n newBoy.x += 100;\n if (this.boys.length % 2 === 1) {\n newBoy.getComponentInChildren(sp.Skeleton).setAnimationCacheMode(sp.Skeleton.AnimationCacheMode.PRIVATE_CACHE);\n newBoy.getComponentInChildren(cc.Label).string = `Spine - Cache`;\n }\n this.boys.push(newBoy);\n });\n\n this.removeBoyBtn.on('click', () => {\n if (this.boys.length > 1) {\n this.boys[this.boys.length - 1].destroy();\n this.boys.length -= 1;\n }\n });\n\n this.randomChangeBtn.on('click', () => {\n const boy = this.boys[this.boys.length - 1].getComponentInChildren(sp.Skeleton);\n boy.setRegion('Head', 'Head', sp.SkeletonData.createRegion(this.heads[Math.floor(Math.random() * (this.heads.length))]));\n });\n }\n\n}\n"],"file":"index.js"} \ No newline at end of file diff --git a/demo/web-mobile/assets/spine/native/39/398d85b3-4934-44c0-8d8e-3812b99f015e.2eb47.png b/demo/web-mobile/assets/spine/native/39/398d85b3-4934-44c0-8d8e-3812b99f015e.2eb47.png new file mode 100644 index 0000000000000000000000000000000000000000..1a3ad88fc3572c24af8bc54f6bb92e3aaa910cee GIT binary patch literal 285630 zcmV(}K+wO5P)Q&wSWZg^W>Xn=)}TVQKnWN$}FQ;3e4Ra#`%+Tn$Z zmQhq*)Y#v2c!8FirFnjcVrX&>3J5nWC@mx*f`^iXiIYxJT#AvLGbSQ^f{oeSMHw zLPSiLo~Wawtg*7XuCBFOMLSkXNQZN1-r?w&m!64?l)b*jou#myo1wP0y_=t?UQ<)4 zs zkcX0vm7SHDZ)IvXI6=R-y1T^9YGG%MgoLuBop@$nvbw`mOHQ`G$gZTMshN>yRZXq7 zzq+ogi+OQ%ZE=EpgL`XbjfRYYZf2*VrM0M}wym?Ci-1x)FvGsUaA|O*ouIXvh=6Kd zSWs2c%gM^a!*5wkE-NrEF*->$EU}-JW>7=HwXlnJYstO0ysDslV^uI87pSpU3Y<9IS zGB?vV3QG1E--`HZ!VC-q8bm925TcAEZ(|vGOEL(WTo~12X}5?_@zy5cle31 zG{#v^?Tz;O)ZVu{D_P3ywwou;>0-v5ls4qZ&9a2CSa%4h_Vl`)J^U;r5jYSRG={^j zGFpaiPOlt9ZrTt;Y5^pg07xZrVKxC064|QCV-L5HsXVq6NgoT6k?zAwbgb!!6Bj5O zO@ICS0fB~{L5M-Xn}hfc!Wg`yFb>) z07*7}4PLt7yVV1C-3!C9wWc-okqQL36B_whws~>ceHKUtk_7X{oJ>Lo7&@F;?8qI+M3aK3 z|Me1h9OGCda{TY?)0I2yIexH7ENMOpy6A(JTtXwfb=_mv%+<;HqpoT_qm_y5WC{s^ z6qnt(*`X_c&;=Z`1jiIo#ZgSdO#I6;L!N_RoLe2m*^Lmn@YBq}Z3I%Ec{rJXDS*Il zV;~>}0vS<>a4|`0z$AcnqVt4iEaQ_i8UP7-6orIWYH@3Hg1+2!gTOk2+Bk>e9|I1X zxCD?$Y8Xc+@;?cX4j(_G(JgwWF(d*=>iqk%e}(W^(Mi5cAE(vG1tv0L((iDubkM}hJ`rJ*KmYE9|Oy2>|v;huw~g_l(Xy}aVJRLqKA%e*;9GU9X81HXNxY6 zC&6H3^YVKeCfdzlCN%b~_qNY8$`|Z5LJ~A$P$p8lC2$#=#&vMt$ho0(ppu3mdBD-0 z@YRr2(4J-3fYCg*{`>oRirrBj1u|+8LUtHOXk*!gMC$4|;&sK)4G7k)M;CzXjDaM} zk{V841Unl92=?p}-(MzE8HCc8LP@|W3{smB2~4xv4=}7)_3Ks+DzXSB`7$7v0Azxs zaapQOMkw+%wYlRDLjtE!p7jzWy)*PofD{}BN$IrZ!Sq%H5Kh{MVc6D8BSg{)+00{I zAq%7deRL(mH_OrFSRm)KT5HEu5)>vhs@q9Sag_YVH8Cf#eh+a(ms?l_TAC#cisq=q zL;^~~%Lb_m!apa8P;&$ci$j&j%wxlhP4L+DRHjiT=bBDoh+$A zCf$ZE%9uwr93y!&I;oN3IWyT(1Y_^580t$_64w#t7?P5?Yb5e*u$j@=Nr}`3G*(OH z&`G*fpwhae$CLmv@!*!`q!dCsfh3qj2~tA?HAIlW5eYW@br?jt&xXw@mCBkm-B!2E zqVqT@YW(TWx@TR_HB!oueXWaE%09*)2n@Ogg>(o#!nMx+S&XAvw-8s3k(-0l$y_%S zk{**>H@==2g38Jir^%ugEXO46opH=@<`HY%;QODWUP?h`pbwOp^$E# zUjs)F$ru0oxUf)i*&Uy!N!&Idtm0_S%$!{bM7>~XM%^rwP{;(xJE=mpjlPh{b|lNu zZNXF>70+a{Ns&b6O%IpJuKMmMDi25ml01&lf)g(?*kSrAIgbBq$NCr>vTYEV7J?!$ zW1!%QV}(S7iFW*DSP(xhfycrWb{}&z5J)95&T8VN6m@4U{u*^gn0db{i#_x`?J%~1 z4v}TE%a$@^ed-V_W*sdH0qXtheY90>rW%_GU;*Xu~a7D^>^ zX2PK;=Qq&E#CP*ESI8)%!57Cv``eIU7X%XN3>A?7Y45L+DJcNwej?(DWu2AR88XVgvOXkRAzaE_f)Vf zI&A=`ec4Cj>vbL%8oV|?`I3Cwoo521bw!J##Yip9B1&rlnUx^1ph7$b40DF&o?RsY zBoIuN`Q#OG{QO|%0|nHILuL}Gv7ruP^~BVnyX>VY6f$A6XLrUn1hQ;%sG9PmP4F+0 z@7AYqEX$UO9?QG^eXWF%Y+$VxLSk6K(Se*uq(+hqp^{m4+};&*GL%0g(}*iEdmXLu zDJ+64Dr9Ftc!Z@{wXo?o1}L;J7|!d(Bcl;NzZ^$-Rl~QcIf~Zl)l2G-ttyb1I_x2c z44Lzx3Z&JX^uA_6_^TBJYnjNN66rytPVV?rqOj;HS(vb)tKzWnN@o&}v({REm%|&cV~@GERGdXA)dF+14ysjnILMX z8AKICm&M+V-VMHP=s=%=NcMcdKlKKM6t~|~Ii%q{jp-$A`31xQ8b(@QPrL<5Zr$jm zcJGE0X*`kzd5)o|U0EdItt(EtV+ztx`hi&1mjThGNX9g#zT4`Pc})^p2!#w^LP6cl z{x-~C*QRI)$Az>434P>;_CDYqPFnQAXiS$mB8>)-&AD_>oi!8KQy$rLs2~cod?%(! z%`AY-3gbOhNP94Z3D-RYtYENi(0)}%88DIbEyb%s;laCR9lc6OiYbtsbjz^A5696g zgtb$Ea=cirKD{lS#*oUT8V?qWj+-6{l0XnKr1v40Zk0U?0J1twBRD1osTB7;A-{IX z@DMAW^2qCmDU2BQggr66u@}`;F9jRVvL`6yyeQOeB>IR+%aBWD z$)Mvl2_r)s#~HTBV|^D5J&Fp+U?OuXN3%e?40xUMq>4s`uFs zr1OS|b(l!dXhWqkcFxH%Gx%y`4K)+0Z+X^jV>xIbfSRp@)fHWpss)>rA zu*tXc!GkYWOsxe?m2o2|k@{9hByt-tiMP*#^c={JC?Z{`P4+=&wj+mqIS=rP(}Qlm175>TlQ1gD*D#Bn8zau~k=WMBeg3?#m9|Mz#&wc^PRhSYOI5fMb$odem* z%ii;opj0gNMtC$ZeT+L3(i_}OrI1$5)LN1UlfaS8sB9~k1|oi$;H$BaTxV{uHxWe6 z7?DwAV{fBgovKL6#hPe5I-aD88NXoE2a!l3js%g~!)G&-bTO1*Q53Q|gA@5|zLLp8 zK$;7rN^m`X#J|6=^30pUydf|oGmqs1?2GYwid}4tizhT(^mL}J$&9}+mQHclG!*x% z3b`l+?6T2GU2#!umLHl-`I0mLRd3Z=)!gSe(b_K>9Zu{rh8=4T+4BnJyCS2ur<( z%Z8L-u6TOuDR=PQK#@DgQ;<@H1dwHgR1BjuTVVEk86n3(+*_q_&R7(o^gLT)7kKT^ z%xT-hf8nRLe#000Mr44aJ{`rF%cZCUglTPOQYZKHs>hM;mcvxW67UpAEb%EjLTD=&H&5YtnLqgFh?dY zP%AUrIC~{9&aWzo!fB`E)W>wEVP9<0 zT(+xXfMtEJb-0R0BuA|+h7Me^F=lQAYO}e|p6Ig8X}1))kV^L9WD%ropVn+PEA>!^ zW#r5r--)j#B26PC6lU zIg{ETslkHrJgL#*;<(1+17p)dO83yHIx3%dDM_+zr6-f9u7h5Zo-cFTg`?nFND|qm zq%qQqdZJyJ+t!xNg>usIRCXr@9BVvslbXH`8XGbitObF~E=|>-)RUaGm*JSNqj0|* z8S-fwM`?Dn5?9Ea+T_2jmVHbjCCgTMq=EF&EKOUzIT(c1g%V5a)H&Gu;{5S|Ifq7; z5^hXFOqXVNo3re)&z`l09+^BXMSBx{03Ihql4S#oX?|TM5&@*n+;blh89Qrf;B{a; z#>6#}P|z5f(FjvS@j5p@g~b_DNVx2!2}z9ykvfW#9IN!SO$h5*OtkaM1QH7@Vjn_g zsSVxXFt}JF&8DtJcIzbSQ+WiHMq#Lt($>s)1d@m&i*t!JiNsp7y2H-%8b2^bx@^4< z(m}8Y7;76@G2IdyqDBoZ0jc!%=rvN9x^Yix`V3^IkV2%_A$_`7B)yTq708j=Aj5VuiFz zvuw{~P!N|Je^leeRxP0kR{Mky^4M>*&M$w)sI)Gq{UqBF(Umir8oSP8rSyZ*6sJoX zkX|E4&Yi8@E#v4%1?4NmD?|pRA20eW`x;&+E8WGXRYvH+=Z7Hzw%gNLNT#)0~ zoft88r;8%6KQ)K#zf^3$xUvBe8z|@@`%M}V6qdLsUuyG$FkY!qMn;n ztX@fsa}HO&(CJ*7Vp^!-(k~nlX9mu5j5>>ik*nIqyx(#cQX2YZ& zsTKUOW0%H&jJ$S&o>_WGY*kxH<%T|0~q7t z4o0#iT)tc1$!(`}b=^=Rk3lS05^2_*cBhfb#?KfLbi!I>wFrdWvc_W3;IMNG!dzVl zTC9slMaW9+alR~&%|I4X9JC;iFL-U-xS{ORj|<~SvsEFr7%rU-)R;{5;bxi3ZYAod zZL|~;i=ImJg!~5eSmk>yvM!f=P>ZA|?5C}(sPl-0k#&vCm;cnIvTPHIk}jNqm2w&w zR*RO@M&z9++&aQ($8kl5a z&X6vwzV(sz&1UZse6q=5n~9{aYh>QZ&NpmaKY5x-tCMcv_ znV}+{JM4-;Cg)#TUIT#yh|)qK>GJ7YZ9rt^p!vc?HRRAYCrra6R1$15iFPjo?90{| zG6B*QGTlTIcIhHwmq=i!g9#i0NN=E$%nyf>j3m8i_~}~?XI+!PzC8OmlnrLfWw4ia zLB^egP@q@?vT8zET$RLdx>;-((i!OrX9OV0&QE8~HWc=99_gWq<}dtI^9m1J)S*c3 z3fV5jkl;~(gt06pk9KNs0Br5?`H;~AuN1iikc#A7`{oS^cNZ8ykpYj@ojD2S6CBa^ z6DFfaWMC#B&Y*t-r-6~FBm~<-xk;pv8zad?OpuLngy)6fD}I4c#V`Ik6jJtOH!CEF6bFt?HL=U~ z{R$4HcGD{)!b$(VRzhT}%{(XCl7yK=3Y|WU%f$JgCu_{Qt9S}}P{u$n1BukO!BQA; zlkaS(`D^@_4H2Y=7Nv#aX6XkZMO$3OVj966n2|88Q5lQn#;OGhX&-esr9zs=j>Xc; zJ>0g!Ova!5Xi!MRkAMw0r3Yi+t`R86t0h*odv~SL|{irti z0mysJcnUQJQ5aK#v)p;3E&2NJyo-K8Ae#e8Sf-Hh*woc+af%2MX1_Refk=f>A=D=3 z(Muz0!NGYmilZ`RcshZKtgnU8VU|0GBu>Mlr#x{|qdey8Atzf<6G!N%p@|RcF{H9; zAevz;JgP`8ki4|ogkx7zhJK%(DrV|l4J}hfGU-zcfnZf9<-@;>Kzzo7yqxd|k!;2> zp1i4VZm7HLN`{Tk+Vo$fB&C5uVl{xK*cM-fXGFO`GF0r6X7qtw22m|iL552Pie{5o zyh#tfKxLqi{KmP*hC<4t5y&v9X>nT39nKGIO|Ou}-NBB@?9vyreV#L1B)8^29XTyU zM>;PE6l+zVZlaKRp$KV=yMA9mV+si%r>T+K1Nso4=6m3+ zb#e6=MQMU$Lk1377Fzm>AONXNTMNh#5$<{JR8u259RtWYCw2C{BgY*D4M z3CJMF&Jwxg{6~c8G)@y4ZnOhm(7bGtP~kD_6|3N46M@7-ZWACE0i+q$L)J~j9)~&S z2LjY%NVGsPrIUHo>L2q*-{70a_wO&#{^d9KAJga!b@UYhQs6Tylp>K-*O8ojzGP_8 z-IPR@%0CmsN8z;zNLW^D?IzXm@cs1(4COJ(uN^qPdZ^Bj=MJhoB99W2iO+_pCJQEN zF!EDa6d1M1vh29(lPY98z%bc*Ceuw|k|ER14A{Zq7v~C0&Z$6}Pv*iDe^~09H^kw$ zZ{9pUJ3AvJA3r)fYjyjilwG11OeUg;dssK~))UW{#Bt@y0dSyUqt~uDZ4g;NvXRGy z7|7JZUD(;?e|Km&JFf>DZ#IzDF8FLVB1et?20#dH)MpA|aBC)Gx)eySLl$C4>^htz zk5EYDG@fe1Yv&4?Gn$=GXeqXRxI9ZZe|ulP`Q81;_kaECyZ6@C?mc<(V0C3>W%Y72 znsKog3nRi*CDBcJz9j2&y5Og;Bfh2wGB?DFIgRxU8wRZ|%ne{gZW^Oo8C-gcyP%NJ zwVslw)(cH&bkN)FOcl9p%4yuj3TZ3G8Av2G%wt2A4IJY-BsX#BC{~}#Mw5AKgyG2^ z-7o*~+u#4@?stFs?#1ohtE=7JjqUC2{fC>I=l}BafBKI<v9X6goiD?v&HJVc9StA)e ztlI&dA%8BBeg#JNh#|)wI|H&I%MK1Rz-maR&_=3;jS2}4F@kXoQhEH6?03Ka&38ZC zzJ2@Z!|?jqTeX)jUp~9|AOG!t{`Wup{AY|Ll1=S$E1wonK3}qFxh`WdJ&ie$d1iy7 zp(CsEm~W%;=^4b18IUR&2))M6IF>ajL&6Nlxp8FE=`xToqnJCesK(?8da2?6rI7$; z4u5i%-G=AJCxQrYX}X;&WV!BxZQAB+7)TaK`qqfYe`Xv%yk>j<_T9&ie&oYH_}z8cSnR4u{+B=V^8`l!dH2!4UQEMum)P;z?bL%}e5W zd1Jgq=(`q5DDdy6tr7wm5ry7udv>1|YiaI1L+k4o; zlHFJ$8kL|C2rH1?O-@SWzw7s)BYPWC} zc@AI|)#!Xh>cqezAcQsSjBVCQRYGS`$9$9GSl36dKEiBKZc!jrATV7BW1=!3y#Q(Z z@wn^u#hu!D=!<;-33-f=Y_PEG)6RfwcG=)CnW=#RL1)sHGPjIINF=dHokY08`9?%hXX(P)(B$G?7jyJtvtThpDh0-21?S5(~rh|)k6W#nC55gkGw z<_1yZ*7$@#!pa3m{qkcN6r5=-QbZqtPW@%RA@i>&t6TzWVjAzWhf9 zlAQKpzbim`NgOtvKq|OoC_{D_NYuqaBzF=+8jsa%+YK^_zWmYdxk6?MjyzoK2}_$ZZ%qCdEit z!zx|iSQJR-kc@9?%Y66&^IS^xFTtMMgKQe zm)8kJde13NB71*5{6KH+-AClO1;~y935AUG5fXWe9wi*9Wss565RjQdn#*QuS?cdR zP9hScTqN^aId@f?^EKl#js50yd1H9ZKKgoZxc5xD;b3sYL^6#R0_NM7Z%HH7ZNGng zwfx|eL=t82Cd2uPTJtG=-Z6kwE*dO$);W>^hhom=bSX_JkKBO9++QPdls?)#V{03s zkO(73mn&N*^v-`0`$+aqnA}}oBbEH}+ojnMNC(l{swn!v{k4X#y&%b^_u#XFLJE+| zeY~wFciVNd;-q5feG7}pxhwl@pPin)fB(rLy)8r?d+hB!X7Fh5_;~L^#PRdbFOK&1 zj#w_K81y4+N_X=6YCK&3_lfi#qHZ8Cc?W-$dB}fQi%Rhh!i9bc9)<0=67!Zq}orZ_PD?H$(?ox zB$8}5D5U%Nndtn#&}txRW3A1f0!&YJ7}tWyT1fsuJU)A{e7JRWazeo)N#nux#`d1- z;>E?w=bx)x?ClYxgycIy@<$=^{cv}O>f}{2`&i z3ki*3PGe^K&;rw?JuQBOChu>UTBnOCd@G@+7EaXa%K8Sq<%FZb`1enL|MZR?Zwblk z;l}#CukOF0g?|Pl>X1G+h^8cwA^AAA0%b@5iJV4(6p7?#6itRUK^&{wWLrS8lxC~P z=5*`+qbJK-MB~8;*|TSR!~Kno?c<{h#*o#K1@iOf7Z*qDz$w(>lDQFieXvCppsrX| z7-9HO4FwPkVn9Ry$7zE|a0zo&#CfJsJPDKkK06RnVT8*b&ljfpIG&!!aKvmO8MQ)& z-QFCnE}w54TyxQvffO9y^26=fkUY>=_W@++vnOZQ?$f2yWXOpOfvm@n2q}83l5W5e zM3$ihjG!{ibjk|J0VMrs9-rM?zdE1{kBHnj*xMWIZ*OnxAHVwZg-RoJ7lbDP`HX-h zyJjL8$WJVi%d2NPanp3l3QMCe$Tb$F#W1mH=L)F>l?juEq&*>)k(DP5Mb7hcaw8o5 z{SA_9Xd{3W6Jg_98vK%cwcu#6GuG+`9MZem|Pdp6ss$LM*Zn!v^iPC)w#l zji87a5;$URQ=dr;NrUMO36AvT>_!xFf%f6uKV5rzazI8vUTtj*j`xlS`}_OH$FGi# zF36b5S9HTf5|G0oWj${{ihX+bez<+UI->cmY0?_|5jT~?r{CeFIF)l6ly|bDa+9JD zJvXHsHQAli#=0&OOI>P$On%|Aj8>1p{*{F zMkDM-ppae{k3TFM3aJK#6etlys`s9dW;aBZ1YvdD?!dI%aAX*%CIiyUnP zU#*5=F{8ofk^WFikKB5IM* zUz!VK&Lm(2R1PFUNSUa~V@O|Ik^dEW!tKtWiXb{zuq_dBWCA2j8x9z0U?zfi%X4 z=_aoTr%g^_lu!hCuWtZLIn)rjmr&m`5 z8brzrr5_z?>Q^xcNj28}6@oX-5yAO3A1b#TH_cq9Vl z8j?hEggzJ?unmbw2_siWN@M~gAdJQtk7NKcb=lxi+;+uftMzzl&N+a<|`$i5}Bv~Ven=6zvMlmGVOC_=(Y|^xYoW_9s zB8?$Y7_T43(vuMz%H`B1T$UG6(i0MCy$9lAD&LPD-6fBGLT|@#u)VRt3ON`YONRZ5 zIu%PUL=utTzdSmoMdRyR+w^DX?K{}G8eWfyTsx%|XzrOuIcFcBgOnwqUVqaH%k_ID)W1~W%;g+vPt1lJDydetW`TR8$lA0Qj zn%|=4L-W=of@?e_9%v`RlU!BMX5z4Gz z(@N+QsEU$ zEpGU_RR^;EiB7qdYehJwd<^8-y~B0NuGe?DAkNNWbA9K0^Pv&Bd49e_w=9?Y1meS^ zm!BUEcw6lLF$I=`-SwxtC&Tw|IYy_|KZm>l%weP^6G(y5XiO##0cgK;-uMIqkc(h+ zT1#<+h1pEOTl=CvVG}@NQEup~sV5w1a^~s-@kqw#*VcA6AMO*6-;nnvkz_#me&c*+Yd~Uobo`JQJt87G4LUiv z=IJgX^7`cI+T~d;kuY_H!e!A%Lo>Ywo~Uj+$I`DSSi`5(nF-N2N$_@i}-D zBJnxG>A|=&#-jqsJl?+j^oj$;gY6UE{C=>{?ci98YvQl=CAlFWFUJ+}nPh%YTbD>D z67mR}K^f9qw({sn4Xi~ll0@DV82zdPiBYbRlOoEvTB$_JT4e(A>DHDwZ5F?s<>i$X zCX!@P!bs9cLUNyw+}zpO+~*|cc=LS!6-%Tz8LCeRk+Nh8M3&AKCnWj8`doBiGSkN? zUAEzfGSEaQCmx;B!J&Kj0BpxmfrJ6bxbibI7DzH$OL3cdBo;*;iO1V4kV6qjjUZ{c zA5YdQko&?TE9B<#>d55LNOXxD$(_9bg;X5%QXA35I2w@Yu@zua6q0FFk>tOb+9Hx* zF|!=P=B*I&n?3W(m7Vq5Pf6zpNOBhsHz+=20C$*3s{as?B#}boCQIZwiRIwpYa;R? zEe9g+O_F-T6*JBpd8x(5&gvO^>zqiOujpG2^XgCee8}29hQ$;}ybhr(8N_jMqQlm} zqkJ3y_Qtof$cTrQb-LG@SzUf=+ufPRr%#DTuKp5^n$YYKi!jO^8Akva=hM-_kNPzz zX8M6%r|h$ny7(dv_5q8=BfIPwdD!~)nVSiby$DF04~V22HZ_vWyUDZs8ymaCq)cJ+n?X#Hb7l&OKX%*$9+MwmeXzQAzPUkPXOa91Rm;V>9PKHP zx>n#l5xGotTpVAXP94fsIfM_EA~})ACB@4x%byV`PVKf4K<4@g^B6pH)$-w%MkEU( zbD{Sm&aXchjg-yYe({0@Qh;Rm97obcDY|V_NA))=1)ZxxMn~&mQ8##mLXMb4?h_!9 z)1)rjsC0#7Bz30+h^!ZYz-A@Uu4OfR1x~wtb7hA-^~niqBn=oyRz$D(h^rPnH#c_( z$Olx`<@`oO^7&tAF7b#%aLNeDX^Yo>N4fTJcjeS~eDed=ubdAF0FiGeU`_?3^9LGB z7Smef5i|xo&SA39%M~z(u-$Vsb#{hs!6Uot4sJHGA=!vX zGOhgxkkCi($VU2hAoyIMXDAoDDYc&A$`AfSK-;| z=yL6l{WT}o;E`~2AjwbfiE|=5C)1(^LCG3ha^Tv?^r z*M~$Z{hqF_tuE7zCf=I^n%jO!+rXaj1owvIHdg&vzdXZ7Gvz===R=AVI0cbqj~(xMg~JAtP{k;IbdQaaIPrLPx=K81{gHVjcm2Z)4Iha|nJ{GYD2a@D zG$1Lf+1?PB4HAPj6sm`#;1uyJxEm3SVy8ugGz`Hbk{b5e#w6KfCJP=r`g93In2}<( z!#I+P|EoK@8&@omSG!w>#Mtr*9Z$-+%lR@HXVw%wu3TQOa?U+aB-fZo;dE_hj{~0z zUIetivCBm@0#b;i#c1?@K=~(Qa>4E$zYg`;`H`7m)^eI9U^u;HJf>^TppUV`p7#Su zqU(vpKUsa_`%xY(}>3xhmv0pC7}`1(9vO}OH3zk1W5DLkxGutUn`Cydyy_j z5#E}HRfWXbicleyN$_}+ZzpLaLWD>nqr<4(!sSBYZ}x~by|Fy9M$)u26S?~2k^@EJ z?efXx3RAhmz zG-+^px=J_8mv_IqOLGs$w0&EMj3PAf@n56KLsNFdysU#xT z)>b!Pj*jerG*knM+jWnv^I7mHgbt;p}dN>0%WlQi9iy9iQ-Tte8h|) zS+;-1uW*5QxRqYH94q8#boSL(fBJzOHYz@}ZAslVzw=bYW#|M##_?Q;q>WDYpX}ET$JA`9w(pa)akl z=^ssR3uk!CtCy#0m!nf*lf5-*qu78KNlF^NNq>@ve6mVD{pk6#!5$s7!V4r1Y_rYv z$?dfVqi(;eP#T#HIHvb(c0MD(ob3}m36M)kq7$oQESlVwOX6A}O#{e89_;|1a8sA3 zl5OQuN*PMR>D{~E{r2|X$YC>#gd>@Hq!Tt9-KZ{ru6*i`moO?&2tN!k--pT;|<mvc;|{BHipc(V8fsX8XSX%WPm{ocrh?xE?~kL;06OU z9?>(w21EqBlzPRIW`g+2^q~a)rLTVNE9FWRUeq#7+%}hz&N*bVzhL0 z4~(p@4-fRqob7%B$)!#QFAt$%x74Oes6E#@X$&gEMu_sV##zJBONRnp7R!-WXC*S8 z&3Hl+c+A=w?sJ^Lpr_cz>L!o>_2kLZr%&&w>1<;HNrlt~R54db5e5(mBmKw3U+ z0%=Va&ZuS9j-q~LK<@XELjXy0C}S@BKtv-$Nz#Xlva2L5HjZOvd>Wz$4jw!pxBAcw zNCwTFok+1edr}ZZWYz|x)+EhDB3T2{E}&_QW79?ky8G}zG4{H=zKrF7h6&`d5qV=W zb&1`PDv@C*QH~tzrR65nvK^nC=qBS}&z!j(ao0v~P97b|$a40Pm86_Un#-lnX;L1q zULue1*3KiFDmd4ev65GP1}w{_DUmP(vU@TCq_>^vkxY5rl4YN*Q6L@0Ado*UI6xNN zOe^{JQEl7rA&I5u+r|2F!@W2XUSODjS#m&py1MLb1d;|GF-$W9B1Iy5dwUjAsfASU zB0waG%A$le@JK&8dxz(i`?;IBvYfEYvM<@ehT^i#6mCCOlTc=EcAxGHsbBHzLE>YqX^` zq>Ji_U}4Or)q#u?=~PDDr_aKc-d-!2%qRkVh>I6oFS8RFn!{$*+VrqhxJY8 z=1d_uQpQp3tq8{yNt_f&o_X~VW8pBSqR&`yK+d3vcM2xnK=S#R3_a;mSxRIy9z%l0 zs6g6Ct=#&cgL`u2aZ-4s%O;QYwE21RD4=Q2+2(>ZFuH9O$xtJY0$J=lhPPMAV+v_R zDv;7x6VI}h#~_V-xk8FOCQ-EUZ6cYlXL;^SxwIjJ@XWMObYS-jCFx=`)gzQ?)j>mL zjINmm8haN}flwk@{b85S2-0gU0LdTgVLgb|pw0od{ET$<&tfqFNF?^6lSN=bULs*z!;Kww!7hTwOJ8#+%PK&J%=T?)y%$PO0v~VOK1+H(uucP0qS8| z4*xF*qyc&RHh_e;X8)-G*>C!2-nwmCaBOplRF@r3Y8*dbEFcp|?>CckI1ET{hcty$ z6!k4YGO0OmfNv6MuLzi#9y?=s)VxrVJ*QKx*s4Ig_c4=hY3+hUDvr-)YO+zTf^lCg#)N+cKM{|VL;Uf}=VE)WTi-9jXpV5dYN7kI{(AW~g8_#9wr zZGlc7o*9yDtZ53(1d$!XvXta9j6^OIO!kmVyYAn>X-kqyk#s9{xwN-=bbe3GnT!>N z_RERJD}c1GLWj`z12Q3y5ohf@CV|v0Q%zyi%wcP98mDsJF(98Z$5w|u4<0)O$JRb; zzqK?5D8eT(Od^wGc(|5lX9d!8+r-cz4jn9X7@ba-1DQ}r-nl}WEb@ky7)*>MS#rt; zBhwkZBrBHG^FxUK(2OU81sJG-@wt#l@(5Wx1g!+7LTV4_oLTHZA;`N@IBvrx-RYj5 z0rZYTAkjoFJBa{DQOLhayY3d*^@=T+_QQ5_9BF@cP%)MbWIOPrDx1= z3_y0^g8(Gzya*u+V>mj8rjdD9mB`(G_K&d;5H*->Pa-*@3LZP~XclOYMIn;5fJ#uPQ6kc2DF_z=X^W)IcFoMt`wW*s7>8-sD3rG3 z+~Ca30x;!UEE<(|HU`~S6nii}0}C|LR36Er*dlF=hDWR(o6Y(TWV{d=88tD5w8=C) z{H;9}uw?rgIpje!1CUOk0*PyW9`n-Z6-h@?Kc-3d8E089qh5L=UaKMC72fA3u1$k~DaSCq|YF$6w6woYHA7?VWq7vj&7j^V`Ga9*V@qy^-NTec9#M05?c6z;>biYQJOfD0xeZ81a)02Cm!!Ye zbEMrPd&gPkQk(w#67iMHEw;h5Wn2V)Gm z%>?aJ*{c>G_r0McZYG6S;fP1SFWrh zex&uIO`k+^))zO}ri73u<1)X2xj3T9G9_b3p~=eI$xR;O%MB=ti3tlV_#}bEk(lcm zGYTc;hue=MQ|un;e<;o27C8e)AuHh18Fg&yxnEH)AoTIx9mIF!Jdapi^J7vZ!2Hu zV0cX;A%UD&IM%BbAEw#NVQ4t_E?P;FhELeCiwR#0Dp3mpkgAaQ#a|m3DO(4TK$1I% z3?qtkBK3iQM-YjVh@_qT;&(J(Dl{{~+=_3|aHk|1kYrPE%x;P3k>(jT=}*pCupvXw zXsj96jiX;WC<14A^=8i`Ca9~&hJ8LbDLvwM(ECUp6-dPqhd7$XwWXyA7?329V-m#o zSnqguAAQ%ZbUNoYU0M9MT9U{xcIYnKvl?7t3h6|O;Zp24=E!PrJRg)HDa2j6yjKJ= z5Sdz7oSvS-!yt~t4*NHwaU7dCm(zWZ@j<0hIB)7jkeVs%i(RL!sZx#n2b?Am*I)gbRl4-9Tv}ln?7~;i&3~EQxlIu^J>-Nv6slsur zMcge~@!_FyxGx%F+5;e|`=6!m=wvS7$OIb~;gLAnasWc38gAHC0RxUW1js4rX4$NZ zgGYpr!DSccNoxHYS-!7P?si|=C$lo1(`8$}9k(oUZ8togLnOoTlk~!3sLslWG)HR2 z8r$0}h&%)wum16me-I*jr{Gtn`!w1%lfTj12Z7|CO7zzw!??p>%@q)NW$xPWFa{AH z3XmjH7CCedRf{4L8U3JCf%H6Fg;L*{88`3~o*YOJnU%(bZO!o5*(1n!)0r*E;I7(! z(mF}$vzpF90n*yTai*~inmp=~0IY@6rb#4uq`#)eZf6uZZE1}XNt1QMaSTYpWdleU z$FUa{+Zr2})*7cJ`d%{|>0`4l+NP$pT*j|h9WR4KLL))swdJn^k+MxEqw3PYWV|S8 z_nBx)QWL2VS*0*iqy&8)Q#zBlOYX+)t{N}F(M@SAjhB491SyN+YMU8(wAt4@!lb$K zmPuKjLUL=6C_q*QAZ_8EP&X4GmlQ^bBWY{^tV|@CeM@0n8qrb!GM!r>?aSaZ3?x>iCqMHYaR+p5QE2b7LgJs({j`|og(MKDn@lGG%5&jw*Un`K( z87`Ga0di88vTyZCTm*7jc$`?O#jCxsVH!A+Ntku%vO!n+regxBBBU1m+zxZtyxNUt z+1q^t&p%pqP-1A0!W`5`P^nej_Asm;(>eFPyw52Xx{*m--xu9;B137^6Pk?8uldT{@sD`g4gL`Pb?O4D3b2Rju@y*J zw|TOg7I<7Fk20>H@<@X`^6}C_OQgAM_MoP7@3rY9_?_QJ+^3BtaRXq_X>jBK(k(4M zJKnXMc9DFpUW;6`rUl4h^(1@%GJb{hWeQB<@hmdaMusi&*ue4_zB|>3;Co{NW*Uig z(Fij;$pIy2+;DiIe|i1>y?giP`ehQLtglNV(fDIH60ri8MZX#mo@GagMM@OnNEJ^5 zGW+@%fxMS^XXfiu=GmIvOOWQWC7X$_PJ_3tltdmMl1A8*5IvGc7+{2{r&c45fk#pZ zfh3SdWSbJ%X+Rck%WsZGuB~fiaMKm?$8iIj3773E8N)FRiA>_?vBUG31KC9&L8Qbr zKn?=QjJg+Yy0Kwwp}cpD!U&rhr+^}soM=WJd;;>w=Q+Z$*pL!oag{@K+nqf#-NSQ_ z@7=ri_}U;BAbr<*FJ+>pMJC2*Vd)7np8Hl5v>95N#48mQL$Qw>1aiq1YYB$XvMgh@1t6Zwxuy%8XP2{Rf6#-u_f9k*FpymodTdE~c>L`ud50A!F~ z1yZWudYY271}S&L6s-+U3k6$9Wqa+0h-0JWH|Qn>k^?%F!$p8nkVtlwch6EH@2z9% z;iT-+@Qs9#J%>Jt(P#WQicYLo(H%(Ys);7ArBqBXNHRUIaUwT!mypne-9NJesex*2 z)s&1m*b$@a;b09jMJ6G5IZ5osV@@-*Ub0kXNdnM?*S z8626TiU3*hOjjM($zuO1vbUEAWEw3YoS!UpXyQlM15~x=)M0y0s(in|k&XIJp z^(WnujgSr`UOr}K&I`Sc7cp1{?46V zp3exRtV0Tc1Wsaoi#o1PTO0?F<5bD1iMkUL?d`SACng%l7JA96weKym@uE*w4d5D7 zsf!mmO_6&wbi%s(bHjzm%;Z8Uo(Qz5Mm8E}i3$Q4jY7al0Yn_N1Nj-&vo>k?7kiwpL@9;^Ep zjsj#>b12jKUG@(EGA(O9(xzeTTUO!26B!?0TpTBm3k&08Z4*sRb#N^0Q@vwj0CmBJ zyFp|dAm;O37Q{^(pBj&xxPZo7<#A0+ z^$|3d$?$b8fSiCp5=cB^b=nfJcSM0q{P-P-igY0;p%p^c>`y8*ZoY^k#I#uCQTR(D znFB~LA6n8>A^AUqOSZ`M2PQSB>GauSlGbHSXAm4Jk%SL22|yca>rS1jYsXWfJSvgW zZci8~k-GAf%tP#?M545by+yibhv(Mk9zRCw&qJC_)#eWQH$PLyVG*NSv@4Cw#>zek zg#@nxWPAdSo7Ww2mlMeNZe2c1yD^ zdJLJ>97)&69EtYx+cp3>gIzUYDB-a5H3o?!jWp&qAQJM}z-&gI7>Bv>iAIo`ki%p1 zh3b#2MgxiL#GF{J$iN+AM_3_W2a#W11CvZ`faF8l+>|^f%vmf5E}M6OKW9}-K9>4e zg&dZMB*S9mEJbQE!y`&#bS4cBvB;K4QIG9J!e5u71@e%r*c^ItHGqUX-oAaiW*+Ox zamuS!d2oWEa@O2T44Xk=Fx(lCFmYMN41u)9cfaF@9)~T zZ&%^AEv3E{Yy`)U(zbRn~8MKd}_5!b)wf{}xt zV`pvLasTJ5s)x#8F0((vT5i;<8?7PU6Ev+GD4~yPI*r@kZtCL|$oMdJNNE&Ehf-f6 zkjSVC(0M-@av1@VS8><%x9e+$IH{`xKvEzDN0mdoSL&MZg2@K}Qiw!g8IYtUfmF=W z#v@}#3ZG+XSx&{K?-pgm_x6)E z>0Jwp+^>*CLLx!r6ieVjW8iVBfjmw$*EXCyR)m!ML@g?l0;z=GQm*V>ko=}Yh{X2f zed3<_2WDz&pplq<_!vZTNPFy;| zyS+wNf=r~?a?uV*j9@>^>^PfzGD&~UbyI5QQwSkBZjI)8?V^}aAV-^;n$FO06(UV6 zLtkX$$h2DD7=aASMFa)p3kDQv5Hyl#ZX0G76;u6VyLRo`21#dst`B8L1`hKoWZLg4 zm^zXDEGikT?f9+F*42duVn|{WuU2SbAdI;AfehA^Xw@R$lAuXll0ygra94s zoV(VFW+<6SJlQMDQqA=0dO+Cb3q)c}F@@!xM`o{~{6md|&z^iDUK>bu^mg@RAPO-{h3g-M30k6~S@9`J~m zMj!L6;z&^hj?N>@m?V(aJ3bPCJhrbetn_3OC8nAv=#W3YIAx0pJ^Yw)R2NKDQ z=;M&Ba@L6w5rX1mZvj9^DFA=y4e3fNe5UC@_}b zRagjh)UoXCP{>!ZDWvoGdV%wpG->=H?>y|C-6|r(NQN(CN8XzYcPuLiB$Mpn4I;^i zTgI;16vtlJv9X3)DTW_C+V&d8Y4F4t^PD+#rl}czoX?Lj(Z=*N0v*}nMmDd(kAOsC z>)4u0EnUOQtp0G8Hk>xAKi__fNb&~Tbrs0`F(fSFP@P5?febv#OU;249CPa<5C7K_ z9y_UzH0#JMWkKAwcO{RNl^{|!9v*_R+{3lu*2v?E0Ew^>zMAH)TGdjBv`Qq5G=fKz zKc*Iob`_@MMB+}N39+MR*_&bIu9AKGN+^y@tp!M%mTf?K5a~dY$kzenGr~t7t1-@U znF}Zx`5Ltd)i`p#>4-!z))$pqo z{z~KTuC+lW%XM7=TRd`&jX<3jFLq-B;x$0YJeyl#AdDoD*Sb2(KT87XV|Ga(y@Z}2 zk+L3!MS$jfRUtK8%)?`J;zB&7F&wi2sjK*umVQ!W^&TcN2IL(IWF>iQm1@t@#;nOB zuq2K&!;uCa&36MxJZ`pFuqjdp8mFhmi*|XE>lR=HZgvMm>`E9*cJJO@f~-9GqUh~sxfRmXPzE=}ck9cYx2~Wc z;SmkGeZ+>gv@t;<0Us4|)22u#Wm43UC&t}6w$OB{y1M!ZocAb@1bdtTR?dYa581-_ zSn;Q?1)2812wL1YkBl=yCnvdWh-&0u4+`W-1mjsY(QsLm!(Q?+unB`YJc3XrAoQ=2 zOj_YHqR?SCO&kdzZ49m$s~PGR*iX&Cqs?02BI4a$oPb?swz9&Lco~l#iKCkSvad9g z$Oi4cfGrWoeGW%FganR)q{fm0BU!|2cS#97y#rJ13hDj1j-yIs05Zq_B4bsW57n3q z=5DXB!+R_2OCIK`4M_Gwa#nR9QY4Z{5<|XN8Xqr5V`MvkME-X|&on;8Q`M(WpRPW# zdS!I9Y^hP_fY^Q_J;*Bs$R2#gI(b)r*M*jrJA+E(mqO&154(E~UCl3%=CdO%JM+3_ zQy~MBKSIk2g&#m`nVimghGz4P$E|X zkv#J;(jEoXhm zu8=g-LsP(KVrjW~{J#K)C)iOMVLSLY4$TZcG#=@! z^2ib4QGw)zNV4jqgE}K^V>y8=bfcTzUG(Og$KE832Q~Lj)T%?4{gRh`q8^(Dfdr6Q zVRR%9WYCzsPuF;h&m#9Jx~`9QL18=$WiP=9WFS%pYc#zo7p{V%@pwj497S>zL@sgO5^N3Y23Stx9LgK!FhUrQ?SZ}U=59@6(#dJ6 zVH&K=WB1Mq#nH@w{1JgHj824gD&q}kdd|J>l%8E0lY5C6lTsKD6FVkgVSWdJB$4c} zAdi||9|4GG-#dH!o$Bh-?=X5~1da@RVzjQTmW2v>ZJ0Ke4j`Cc>*7u~tsO0?n)5ZC zldYYt!Xq|{hDd%5BEP=YopO!LK_&=@0U7C-%mSoqVyRkgfeb(P;UhkdKT=?$*~ueVjFi9enncE6iqSSI#((=C5ryk$3n7H)9C7`(RdiJa|x9 zEGc^Pg}r-U-n-|8BGSmxq+85o%W5wuhJ`-yM3${C8$ddd4yC=_X+JB9G&gPFIh)C? zbsWfj0_3m)xiPU(yHVRtB+X}!^-5)2M!LWwbn)za?}13*Sak%|pJtROWh&xQ9fHW| z0d_ibT?KiDv_eD}^t6>a*o1f-8aa z^3V4LQvO8F^+`=3sfl)DYc`_+^3a7F;1NKoI`XVYa+wNSMqYcu8cHJ^n2MXmhJ+_jN!KGx=C1A1Wg*|&;e)*)(2v2P}j#wcr?J14M zkh+kH0x1k8S}Rl`3*#`F`HVxoJ|m@Z=(6q{Qjvk8z6*=S$GD^(14xFDByy=1K*DEB zlPGG60J65d7UAQms&|ebe~)(h^gC6|uIb0+Pd8vhk%{&cGHnKsv>6h)GK&FjcJ!={rUQ#A7N*Zng$@r)82nzuHo!o`{K!nmH`K*f|qc{_soMQ#g$XS^it z0!b8u?FjM3kN$YGWsp4n6&s(x#A(Z>9{>_OhAok#<|CyZ$m1&PNR?SN3>N{i&N?e> za*cJ8gGT^~5OS9jLB^rl*?5qG zB&?Z#gGjD$yoM6VS2;^R!&t_2K(|S|_`8~x7ED?ukY*(E@qa%4vMWns<7D7WO^S-5 z^P@4Oe$(b4`nES_E|)p0;z=OgoW_jbhy9^-KQ|UKfc=^RQjvjq+@18ezb1Wum4kN=n z8Bq)#JGMBaDx?RImeWun@ls0@!uZmBp$ju-N@Mx7yJ@^~z*vz1WE+9p&_M)3NtLW6 zkm9d<#}P>$9UuF+`3&MmDCFsPU^rD*<9$S`XC#tHHY|;rr8{-QxWE{vG zRUcPKV=_5b!+#W~XGf79I{GC+quYVqC)-Arppe4j2@pvr5l8CqVQ()dGa%1yYpy$0 zO%$cd^ZR$iB(I^r;rJoaLiSYwNfpVIOhFu2(`EVw&_#af*T1@msfd9`sECc(U=moz z&3LAr8^|5WIMSN7eH9kcXKV_PS%S&ZoGX;>fJv86)SO3=;6s(hV*nC7e)ZK|aoJqh zz6Aq^wv}^G$kqGR_aTWUkl@lJl1MVGLB(Q|NUmP0F(i^~^qz@C6_!vM_q_ZfV0>}! z3q>VNeMwky282h> z|7vaRtoi3lHL3YdC6W`CIf{sSB*RE^+DUJ%R1yaV(4n-iqConhKfy#C9mnvIyX;Ku zC5td$Fjv0_VMD35p#LF-88pVD0{N)^t4$z>XsMpgZt!S8;#dWa#$>gfgh!bCX7efX z8On-$(8#r*kdo6-8|kM%_~3&#UIvT@b^KbR$~cfD*pT!!CUiw-wpQd+$jzMQB>+ha z1Ll151Qt~x{a+W>pIQBhec=EmLdwG3CmXQMi~zX;Gb9P5jvq47E*fw67Zk!zA18*t zuloIwe?1~5)kyO@)hI|d%fnn+A(DtcnalKz;2$1Fft)M#wWexPL#g=|pvdm5`btP7 z2DeG%mjkI!5=0t=WHQ`4GnpE>g+ONZp9c_`bwAsbNCVx=@DY8~k7xoUev+^J^4~9Y z>J)6-R1@(daD>ageY;ZT(bNygKn)*lP)N*CueyJq5AHrO#FhTq3`9DTAQBQuBI$R~ z7`?9qetOS~KZU*V;+{844sJ%15J#L{BO|3679+zXn~btJJhtvl?1i6%$KGEM4@pHK zX`!Y>mn}{^H;nl;(@kA=(a}Z%DVZP*R}zV=Mu|L%9^Im;+A~#E&_f8MJhoFl+;!x% z+P!K7ly%KoSZ{7xX~bWa;`lHUO#DFRfMi!^Duq!S_Q70+)z1UWC(?}epO3F~l*gSm z0B|n(Ad{>rNDd_Uvs^pimKR4G$WHtwY!NESrhUW@q+s$2eq?|CV-42?@J(LfuMZz4 zkoAuqaUKn}>$-r=7Ib!q0y%mgrfD{WvWj2^4EaQ9t3-0eR$^eQ^b%co!`QK7$M(GV zv)BIiXCJ)$!tR4akp_=yPzD%rM1ZUaKnjmRAqymg1durt5&{_kl3Ys+Q0O?SKw1-f zY;taX^92L-{kZPP@w3N|gU2IH|MqW6qZQCFf(RVX zs-0$OlBM$Y6HR5Zm^-Q-D_5?R&5jIk8e(fFw<5oAdFT zG(}Pnc!?q7=0GZsN$zre;66LiDh>^HRfKI3HrYqWB|iUrsq%@nKyLB~qd-C(sgIXY zP=G!vj%urlBY~te;!bIlF~lo)!GuWmJ~t9bCfca<{_KOF{_Si3>$RWmDFI~4qG#NE z6Gg(wlhbI9`yO}%frOF1nprkYU_1wVb?45V=gys#oUy5S;>4LVC-6+yHc0wf zU+NI|_`J}HN(d5~%KCcl8-4rw?aDi!%iLJ4MsBuQl=9~vw;kDl)c)M!5JSpG##|or z>SXvJ{B2SV9Fb^S{nMjX0QpP){QfwvEk4fUSBD=w0FW@MBzT;>5&F(nppKNtRps&i z{i>?_B95y#&JaYNn$&nNg|szzY-EXSBB=fNI{0ytB;(RkbOFJNsIG*0ZIgpm+Nm~ z%fCl=@e{0kf+$jn^lD_OQD=rbOKaS`wL-J(?WJB?R~Yl-=s*V3I8@ODj|Jwj-AaG- z3V(qAvm?6mzAfM3~GMx*^FbUS3c5Ix+fsES$*T@RfNQ3eD zbusxt8XKxG%Qhfw*tMC3pGE<4&z_^NHJ^FsEX0si$g^*~{r20xiQ9)_0_Lk=Qfh0E z(yDt^qh$bc33<&x$4t%de*LT8VUBX=ojVxOz>MX?pMLS+ZY5`oO2h74S9t+JAq{}R z-8HX#CwQb8kemd&$zy&XiEpG}?nFw0E&VcmN*1 z`s(_1ka_r4{bk*bMk67>_?SEjjLfk`A@83u3+asZ-}7~%3_k+eN)wb5vpkO#rb!`D z6ZRBDyn|rM>i|D@7^#qw6l?X`>*CQpYN9yuElGA1NTWYgI76qp$EVMwkhzy}tKb}l z>9t|F?4?=BY6v7BhX4tWJ${lrzWd(k<7eM{6~z5tvESgWH#qnrm1;!tbafS;GxVUk z`U)oMP$q`Ex;sj%IQFhU;>U%x$nVGt%n zf=4Q(0$IfaiMHCRyhS2?Dy)uY<6X7_99OS^$F^~HOwg1+;>Pm0`D^>sfQgN-Z2HyE z>m$FhR)(ZGlDz7=KDiY#HvQW&_~&BLdv=osx(kcg5DAHtq(<$804cTclT!_~XU^_? zYv;S~!aqmUkubWEN}3=EB2PgetH5OS{j#<`nOuVv`i4?9H7JPy$6I&rV(;kd4?yHs z^_5RSB<6js&(2)ck(F3&hf0Na?um&48z4GGn=O!CM+6|ZupERadcRl>HYWr z=iR3^sf#?`r96^H+#IIYzID64l7R`jEBI6yKCZ)MKVCIEwTkB=DGd&w=&>V;K04=c zf;={@vdxs;D|?FenH;K0TA|07G@oty<#{$0QZo=Iyt3zN)s9Cf5(&79^F< zK;+vdl4n^6!h?r0tSt6+&^lXEsUg@rvQP-g-Mb(Y8ucN~x+v->;^z_Dgr13ipy#5RxfAOHwCUwc+4D}HP9As6R5Q)5F0Y8FTL?8XfLz?~*D zg$AaBYPq(2UrFR)rED9gi4WA6kIn|<)`Fxo8t_J>yX-tHJ_n+OCCA3c`Y`V>JUJCe zTk}X3P&rfm?pweSjJ*fUG^5t6`a=*YqKFqSw6}TENRpxCeN1iu=8b5sfH(^g%#HJLx8VMemny3XJxgj0NZZ$<%zh#zRAstBjC6GSz z=-!()Z;S%@zyJNuzkUB7e*UN1blA!x+;rekZV*3mZK;;aoQsYAv#>ZonC8W2jJR-h zl{A`zrpW|4>(S*L5%ljevEg7YX2c)cw<{27i8aj5e344th(*Wx3aw}u0W$kQ4dL{h z#(<1b>BHm}4Wt>LK6jR#Glo1^w0EjuWW<0}B8lV*fUK2yhG(kIo_qJ)dl-$e-W2T% zFd{$v?!)hJ;EInDLmxsGpAU{r96U19jG~p_A(fW zv#L(u@qhtp(rGlhaiKC-NUw{NM^9?JDjreDB!_8x0rN;9@_8k)IJ;i54Eg2AYt^uB@Pye57oY zt-1mvB;?lNk6_Ri0}@EqLnHr6BD)U#&3=p&2s3nd`Bvfc56O7sgXe;Gwb4|u8?to zB$5HhY&G#nb=-y}e_$Qbr)P`lC0%l|9YC&+&dmvrFg@4ND3cf`sO7R}<0r?)WxHb8 zv6#z@!#In?*1dyxvA+T$Av2S+tO4$ge9g;`_`5*u9qc1-F z^izo;?;=^o1O@X<)TS>Dck?+28~rTYzI>3lnS!IjQo6 z#8iM~5ep~*@&y)J(tOWo?#|VwtMkX)=kxV`e|Td|6YXXD;}4MTGA*TTYe~a@2#*(GLgW=DmuD>?l@jXJ3uS>LuIdR?D3d19 zww$Xq4QUoI=onHi<-3dH10aw_7xCgEpUTdmqH*VeNmi0A zG32XEh%_Sk&nu+y+u96}PXx%@Qn%%k7fhVUX%$y^L|?_#S1WcZ*H6m zu|&uEHjqS?BOfY92yh3xcY79#YSh`seY10!{@7xnuvpmWeE6_LBI)z^E9I0-2c7oc zpFNv(tgo-f*YTN&`w+vf_HX=)#ENf0%q&#-*`9bq16d}1c<}aBK=P_35{Qeh0)YIT z@Rs(Trg5}cczoFTLN#f?V@C&}bZa10lV%CY8Ah52B=$%kkIWVYFLDMJ=}L^rVg~X^ zHW}oANI{ZH3T?QJ`Wv!rtl~OuG;&uXjPkCs8e@6}Vn?Iqz|KaEQAh)1g?+-OR!Wk; ztvoI&Sq`L`BY&OGmUj*07iX@plYl28Nu34KEFga;GZu#-kT76q38Z5oug}rO9?mug zc20rsz9>Wrg}jhW++IYQ&Hc-#9f_Ld`-MeIxQKXNV_TT^W z$&-;t`+BkH-|sK3$MNw14Q4rS;9wO5H*ZnIU__N-c|zKS_@FgsdNc7I{3)-_8+qp+ zGV5#zq=rHBco9S;k;D=H8%8AW=~xp)V!HH$pK!solp=SvgJn?iNmz`_7H)`ztne~G z3XR5Rh{1XEC1P>Y&Qa@yr9y^u(;q%WwKvMJB zH{WO;2_z(Pbt;ukr$MA_b_O8P65p)HCr(d|^jbb}_0cj6sGnUM!3bJ5>*>p6`WC&V z4L3nVnw`UM^e&L(n1v#e8}&W!@Amua{IDXmlJuRB-VKy;&s+T1)X*M%H-VHTg+P#E zXBh)bYq24LeKYm;p48jw7SxJaND^$Rcvx$ddC#~XG}@b+kfr)pI2>g)T($_H=Mf|YN+vU`^w4k*S51?3AS&$sjp2c0UqK@>9y1sz1tGJUsa5tdK$e#w`4qE&WB|Q8kUGWTg>q@Bq^8jfkC!XuYw)vEYI0;Fu6iQNg?#7kE(ZiLIWImlz2K;~2FRGvFR@+|UYWZd5> zqc%#Ct$r0C65CFBVhOB-9nK8INF;rADc1?R3nbY=^wDWkBY&8g@pQG=?R8+XNF_#{O~sHQ%Djf9GUkFb;%F)4 zMHq*3|LqqF$lVpPO3}Ez9BCFZC?MI+t_0E~+44|#^b)K#XoY;eK_ktA29Zcz3Mwy8 z^6mAZBo$JCgpo)cL-N9i8bGQE3j~nB@e^^^=V5INQ|S~05|^o|v;fJUA(4jH{!afp zr@K}_N~$zhKO61idTlT{IG*Vb!C4c?#{wi@j{zhS1=fE4{-2K?%|u$7nm{Cw1e5!b zE=If0Pzz0+F5_^AR_dTT9tOnJ(PB#9P#TTIf^ZzGa0t4SUmF;2ojB++baY=k_v zHoO!b;j#7306ve-<7!jT%PE zBLz}2%b)#E@+dC*RT8Px(HcYJLs`}K;fnvQJBQoLkcLaWyZ8YOr23zK6^vBLiV1Q# zj6^NiE{`H#pLiP}MI!|rZ5IW|O%Mql-`NXw{O^t`>>6+j<({^DI=&t!k5jPJ6nI?7 zOFW4{a+z_YW$Kf?NJBFygEcilsN`ZK5uO=XbOOj+DVOWKi`a}%>JB0#^6!8DVPfV& zPZNkFl4Non{uvp^i4zRQwSajplN8$v4kEO0jWnc%1!M zWmv>s0$c&_f`OQj)NowYVr6B6%d)zrmO#JLGkGW-=aU zu2bpb!naR?ixM_zBn;R0P5{Wa+1!z|8)TN7 zbXqim#7|{HQdl_5k@r!$P1*vw%)_-hn{KRC>-aA6>C zcO0wKRZFC)`pBCsHNb{b6)S42q{dA8m=IEc6dDgwBKfLN%iX8ZjD2D_R7k$QI!Pek z`5ZtBkqja=k>rs;a!U95JA02Gud0&n4B9j2k-mrw?P(|!;}13#)L=TXv3|7&wNdMC8;6r;;bo;m#_6+u5GM+aJjel z*r6H)BufDZA?dOSq!jZvEFeiFLr9+3#f%0#!j`w0Y*Pb)B#>MC@G-l_OcYG{Z1ai1 zKqM6sKq`m58<3_T&L3(b%cDq1gtf<3vlV40FlZ)uugj3~&vp-7c9}rF%F3AB3Mqed z|45UHSEe<;-une4O+!eDln0CmZGuNMu=nn5t8%nKAGsTvBcDnMkR(#Em{*ofi058y z>swZ34(S`>rP6GQ1SAq;kxSk{$=l=XpBsn-a;~P9yRgoZ5*h%>tOgSK7oQN>1eJtN zw!m>C+qK(^`$r#4?x&FPgCv*x_aAs0a52LX{#1#Z-(lKJ?&KaO)k`{OX$Q(T5SB_^ zU9WD1I08pl@3qTEY8#In{pje?Lp3jvU*DxbKED571d@$IH3MSTgj$~G_ zdyE?NA&X}3%|C)O*&|)U zCxGPcDIBcexY-LSh_e~b5b~*D^iBknR)k~5IFVv_G$%+yO) z`<^`iUFzXlA}`Vi|FtpdGqjK5dXJ^r>Dd+L_9C-wgn+nKp_U`4Ga^x{j z9tor{$$OfX%c&5sbf8Xteq>htZ)z+FB#FcYyH_Bqah6JfKuo^beUh_}qV)D1lcOfdr38E}H7vL+!P-?S4Cg%A$W1iZ*%r^!l5Y`w{+hvdC|M zR&8dM1#}w!L}5Jn_8xLcj}0I%!&lRq>s&3>#IdHD`3xmexolJ+u?`zNQW#b1lMAxZ zxxsXuDvBe28yQBcRBuj9Qwyz?QgTY1JaW*CE?g(x?Bj?=%KQa!#5;ie4eR2^6%gfV zwP|P@)s(t8pJhv76_D`Q21xU{07%oOkq}Y?Y0N_M$MWsnOl?S|GaTN(Rv~FspMAc3 z+Z2989p~nNqXtrj&c3>2^f65c6_32Zla?lr!es&#qPFulW^Z%M2f3wC$ut{L{>sX1 zk`lQX0*@tcBy{WRHap6E_pT3oq^x22)0 ztFGM{=lu34BgyqNKU9OCF7!&qEbeIQh9>1j>(8o0Nh=0{ynOjVZL_`E-qP;u$u*%G zj)IQ{l4Zyane^d46&pYjOiEf-a=$=PyyGgnh64i^GBe}hKA0#ZO;NeFrq9T(mtoUS zfg`}fBpPQ2D3n`8AKffN^n|+4AO7_V5~;b+tNd(t*+h~gS}JKU{E->TPXOc; z&C`>(+c(bE>iZ_=OxpBol|eji-+mTUzMWnfi#=bQKD&hn=~cGvsV<_ZQ=+K*43} z^mtO$ZDmEPDyY@~}?}n@2I>(9;mE1}~gTTO#0HHnP?Q!A%X46A>Y$1}xdvuZr zdcQ0{w7_2qKSv&(76u83VktcDf1CZ765FAAIqP&oq(3puWhvVN<{BF$ZJA@K)~trIveV4oGDhgnq0o^m+yasPUnFw%W%E@`76Zhc+y9x3JU zU6fLkfa&>L?*UpOYtH)vkcd-@-CZpWO+8Muk)%wjOnkNm(no(S)43E*O5}YiBn2`& z6rIg*?_3^ncte}=+t5Ziwu|Y^x8HtB64A2}XHA8awXs$kTMGnsasR`wesh>WN?}|c z#$EGO!6P1JwQ;@iz1iIz6(7-8DqnAiM;KKp)W=bfto?Ji;96~Fr&+&c+$?x~?IY3&CuHwf4a?;=3j*+$M>$ zXfTK)IpiCk+avnl{|-R@8&KDS_^R~T$FDEfD;}RHmo4nTY0m(7 zK!?BSAX1Fyd9nPRho$n8R7-wC26Y(O4O2`qv%%5X>?D%zWe|@y2rrV)k%2IL_EG^r z<^oP{si~%BVR@nUSalPsali9rZekwa1`L!(S@BSUmn`8wZ)pjHVxB~* zXkSl*BfuqT4Cy0(z!dpaTO6Q@slugD``#Y3!$(h_I5CQE6I9hN92JRdUQdPSt+AS` z7HltWZ` z{`}LQ{#lQTvxC4ktC&^3H9(@5O(5CLK3>_Wp@I=dTye{*rIJKMv7!i(40fB#-rlE? z_+aT2lFHP=;4Pe0bE}UNX~=Ar`5O_=R~TIlF|Bce$AGioEp=Acq{rJD zk5#wi=$s$l$4nO-gTpf))kcsvY$G#C+zregsm1992 z`Z2Oz^QT<4F4K?S8Y7C@G>}jS@c3^(IsA?QsU*@=duUevYrUJ^q2hzLrVI%n%Ql)i zZC+v(KpG@1t%Nx5tjilsHcSeN=0YI#;mW&HsnJ9XdhjduYLsb(q!G#bSpibcnLGat z2F8IT4N&q{fMg9){52lJCwtpC=a3!?@<7(PyASZD>lPx1`o}!<*$5-O$ZlF%8;X6? z{v*wd*O16^>6AXx;QnKX($xvCisK}!x%={AuA%0xbFom$Mf!(g-58rpr zA;Gp!l`zo~#cC=X?( zd1;8`*E{_7uICwx{aU{n(~z1oi-{$6n-U;R3tQpHw-o}(Fp?>Do5K)^If?}WnIeDS zl7@TK#yR(cQw~vuqdv~!$m5GxQ=@DaWgmF$0RTDgSuDA70awoLEwRklH8_%LZUK=D z%~*`=P@6bCe)zBdj>s;!D&Y-lwC-5cRRi5ZfD5b z-r9;HD2k-&pMurS-jG_jR!H?K$#TQ{i?R7JfVeUq?(Z8=Jl2y(Esz2w(iW~XQrk?a zZ&{|KQJZwlG?2dlk9r`IC}e2EJ>ucN}aT}n&L7q1Eke{pb&|q7bLiyFCV(y;4v76LSl6)UG=&@?yvz!2Wn0W_*FAibdfvJ%K&?+&C$qYfgqX&}XATNE0TpjE(BKQKVbLn|eS{L!PfwOm>b9Ep!% z5>En&G#fzb2|QU?WZ4RcL`uT5IPsfq(?rr7Y5_xvILc(jLK|Sjfj20&sUz@t1Se+5 zZ}gqNb)#MpIV(k=6-Xq242~@#F>$p7kS~Ksm&=v7G2IgYf`TN}kxgR$;+r12f+OD6 zhb?I7YEViFqbLTX_d_Dr z5jL)$o_z3Na{T~G=`7^~$~3+;X`hOX^#}Wt12)fC|Df02>~HU?lfP5R$pPX(DbUHe zc2WqVEaDdT7Ld?%=sGsx<6`VgW|+~VtTtTP8qa0zi@Sl`{?n)TusDSMLp364f%rr{ ztdMCAc9G?`WdU*@_0dd3l1as;%6)g#W_A{2wx%J$BbS>0cno>c6vlT~NP{MBsg=e| z2^1F-PyUz>r%3XBM;?y70`^^BzG!AbDUg~+xa^hsO#q2q*9l~s1ti}E$SDy<9QJkV zI$%_VqD@?|ga#ss&e_N`YU=45Y^iR&+xoCGkOLfr`9O`U;2TN~0LXR%iLkcLA79ABT`znC zEnjFGbff@e9Mk5h)z$bYJoZ8g9vX8zlLt~Kp$JsTd_G+~4R4-~fykko13@gO9*Wd8 zG_Qe!FP zZblB3IvSleU39*c5lOw=T`C1ec^Mv+YGSW|+f+ymq=lpM*>u{=G81VO(m{cg2}r6V zX*`Rm0oW!!a{#${?gnj`MB<=B>IGy15($k=jwh3x(+&0qVVVH9L$gu2RY6jX4`!OIL5MBrm{aW6okdm0EAETTd1J zsF6c0aY*aP;MCMYew~@j)Iti=K_|i9X|}2#?2qr4_Rad#YN~h|j7}D_31lPTp|PP0 z(Qu-@8S|H|)it#)mwV|xkaRCC;cuu5JS0+Xr4&UqXFZZsE_Hy%;kC8lVaAUc0a8 zGIUb&-*y5iX7&k?djn*u5=aqBb8F#gLdx>hxQfLp!{qJ`Taw-zQdo_%Ses^ zQfI`}NFIU+AitvUz%-8xBq@-HCeL5GapoNM{^4X0R%s8Py#fDD*NOECw-8S1^hU*y zNU~uUhWcT_`B);*T)zDMWIU1xBGK{;C6falr{7iAdgRcdLrpCuE+oX7UF@uygVP3u3P{3;YB_-1 zfXUoA^ z2;|56-XV~hNJ}AC_<#{e9wl|_yav+nsQmT$>);VlCjJP0rNed$?wt{)tVgunVt#WA zEnP(n8g#3Us~%g|y($7WqT_O)vu(x1vEvR-Cqmq_7YIzp3szE!wwhT_b zRv@crWYPHXkN2_eBjqp!WW8!Y14dZAq%}9TBoaU(NE36kK^<8+2a&KFH#mlYVz|m^ z5ilF!&U#Iei;K=FUI4Om#;x1CyVKP!rK$W4til6KJTnP+Iy|{*s&wXZvrKx z&sWD5eH{gKwv{-lD!HnZ(3E%B|zy0k!H3?3`+g5YT za@+c-Ad*NP1<139cL4eEPT!4ja!m@~m6gxrP$9)-n-f74j}-!`l5DPTuT;o#oi>2N z^wg1DjOjJvuZkkAoLrtlC4Dx>D~v?mHXjW<_KF7bx&TR&4&o|(^Yt^E$R8z}!Gk@W z8^Cc>Y#CS*#WSn}jSSz=S?3Cf#CXNX1x!WSuz_N9DAp4iyO6xl0UDp8{pMTjpSj>A zj|d=z%E#D`3bjh-$gr1ly47eg#`@=D!TzyW))REJ+iM#!7HNP)+ETkdID&m!rl%Lu z`$v&Qujf;dd^QrwMiSZXI;dow9~n1FOW);ZlvckcLnSLYE+<`~rqkAh{5_-+a$4<)-Zl$^^TqhSPzu04z&2-s9SeybL| zeQB+I*O}xKGonx3q+$w?Ki~l%zk1gI$g92>9Kqvpb88Zt@+_MFN#y+ZK@R@~e|7IPLsJ-Muh@d84}p&GMWrOo63tsf}_j?GB+FD}jxByaM# zVr&yIHeYc19)(K?AUQ*U3ZEz?O6V?6X0WHL-PO>L^NxjsIDsj+*yBxjftTIhs1))V zfu!HIPq8F9*k?m4a1_4T7Q=DfIJU_%XiIl>r{hJ;o5Pup`qP6Ed+nqUS)5vkB&G+D zS0x4=_L|-!M|wZ{=+s9?k2TcgN@ElAmm}NaBf= zxlA-kfz&|C#M3NK`1l(A8Ii=TxktP|yZ7wbGt-jLCJH(C96Zj=5=cuSs|*L`4j9s` zcaz*yC?u2Y|527?pRSNdwJ7^d1!Sc-8q-{w6i2dtYdu93-ztJh61juSt;26{Yk++B z(wSKnehiSz_mr(L)}{{@i3F08Kx4zwa}0v6Yy#D@*U#HDs@yHWCVv2D%JB~D7*^41(Z8j|YPz{T`ea z42nZ>v}~Y}#Uh3w{oS5eyWQW+bu=iiXA{AJv+$Wb z1WApf0uns_Ft;*$=Im$h?#81r#i2ZTF+f%-A=mzhk6-> zEMsx|-fT2|Zzw(f)eYHA&su>gLlqX0^2PEvfCQ1>$PRp$&Yn59iMeOg8?RG0SET|Z zEgSGEd!kLFGASCVnB2_3aY=N6T|yfz?g=7ll|t+X%T+=s#b z!G(nsYvYIxY%!d(*f-FZP3IT#EMEE{lg0L|Ez+LqZfKfz4 zBd1{Re|YWkv16{7&lg16Re(Y=zlJX6HaZ&sB*;YJhiAZo$>a|+QBg=95e|8jxOtiD zi@y86->MbH+xyqgL?7`KlYXHfDfR=2oJG~gxa=zV?Uz4}8#59~8p?(%z@t`3_Gx4n zBQ218l~;XESU`fscjcv=HXjuXnj#PbNeyE~jsr6cR{CpsYNw3^3`67B^-@?NlA1<^ zB$6xSh=~h*Huos~hE17so0~j9SKN4;bdK|Q@#>(6LLj+kf8{)-#-S9kMYy31GLHTz=g^{aPv(*rCJ5vs5DAIwz^ zdjI|RPn|ki+ttBRxpI43dnH^r0Qbd1CM&g zDUxRy$&=+v+KkU8l24ux$S?Mm(0NX z`=wB-GvB?e(BKYRlRN^TlHGwGUxJ7|;cf8MH|05mZkQ0p!;bz9!SAWI00~Z%j`uPGc(b_NH!aaL=uDHXn!P>$olP$zA+SPGgYt z6GtZ50^}a!vdfti7}fi(4Mo0$#(fprvXM4DTwZBHs2P^4Ixaq21F4CGfyWHOK$zq; z+BkHmdWX2k0NSb~-{g_2Jy9grvp(?Gss*94Bfcrw#P-tduCNnel?8y($;jfd3 zB4Jm#_{)g`xz`n%iw1Iwi={$`8&R6G=}=?98JvmqBy0mS*r+^+VTh33-yKRsypgQO z>$2BgX3$50L{%{!vU#%oBb>WUIQwQ3@xi%gGf@;qGb5`-dod4X&&Jo&@w$|)yCHEQ zvof@p@WgDMNOn3p?1(t>{v#j#9NGvb-~aiCr>-@&R3CEr=AAASB^OH=;{=Z->DX|o z4}pB@yYu|f)iGN?@@%%F2;}T?hJz*F-9rKFitwnAl!th1&7>%#APLh7Ng#jstHbZU zs`_HGY|CNm6uSb*e^Eeck6j)^`nAUvAZ1TOQOI&-l#8)<&BIhFDUtFrgT%&bYg6zU z0?myn0C92l=4}Frht^1`Zf_bQVQ0qA2#;HHx*(FaDjP>~nc+C%OUi=6Q1>Drj^vS) z%eX4`-cEu@06904T!BQ+J%5Cwd=W#=JnDC1hYDa=2y_KPPoiEdoN*(nENwVl4NZX_ zZ*m~y!K%J-;MhM9_BJ*kMB0a+ zJxh*Ed#2Y$7UFe91RAylG;ZpOk#M9X;u%`WVCh*fY;$(U!oh?C)8qEup9|jf*&m)d zVsAWB=U#H=yo>0%2fPKRo32|5JM$bI@^ zAlzLc1xJg`GM8=Uc&+vg-d~}Vdzoj8M5^76L?W3duj!9TN0Le(VUk)Kg(QyWI7P5Y zArS8`M#&|R@Ls|rXU5sgpk+8cJ~M|!p+Zgt8z z?{0UFbBSYfHd`1zzYn93;c%p`-E-mQ*kZ&zztjaFuK`EC8ojRS7Ib9>`vwz8nURup z`}>|eLyst%?X%_M_BwcLn*&2@jdfE=n|CY`OJ-0x@4wj}>hcCXkr>)Mj>h*gu zq5SAbZLQtu?D4t_sQmkh$%^#&QykRv!OCd^Q2%@q}N>=8%G9Mu?P8ZIg#7{D02Q z_qCDq+Vj2n#m&uKHr%Djc6)c}c`+8#pysMfBMXDQXpqXvnxzR;*L^b*cP|M7M?xiQ zwh$63xrHRkk*c7uXK-Z2zQ&R;l94>JEj!&xx}DrL9{Vy)W@fV!?%Vx8_IsWx`Ds}m z7WUYZ<)jn3<&V#K&N<(69+K)(F2kJU9t|LZNC5dUoFk(VHMh|y9Rm_O@12a3#4o6X zbO#nAvNQmZ01`2~geoKoKghG=@+>B}s`b{~ftXBR>ERhU0uOl*>dO!WN&Tjg%^Ns_ zLY`5TQbDthFfV0~tG%et$*|wwTA5D-XTzy%A&^$2Xwu*9>cM@@7@!O#E;4CI;+349!?ES$<(rKmon44FW^57u06gN;IZTrM8jkbU z8M52``G5J3H$VAtbNnVxut5OjG(28URDJGl94_-q(0}_)7T!+SnV#_e5`Z>ZX(`|NF`ORoC^R;*&!`?<0 z4LPADFlAxB()G#@*zM;1jHY4S^LA(n+i7DR?xwKK`o zuc|^WF9~@C$uJI-N~Kb-#c}gZ7!H!v3?KY)VIFhUvMh@!)o296((btx-4CQ`DOp1h zb|B_O`@7uG5<70+AH9lU_WLwUvzC-PIY~h1P9`)+Gu9UNz2tFOYJ)`E7sTHKnx9@J z-;0RrY(|o4E!J@dY%6qJFF{h7jpt}tjKFr^ld9zO&H0Jb;b*PXHXrIdC3kq+Hb!M} z@Hp`N!@qlP+(FVa58`&nb|NV;!4! zU*An5`+(gdksAaS1f)G1jD<7Q7G%a9q~jrv$VIYSYSqKEpB~u0AD4mr-f(=0l4Udxw~!D6NLOMmY8DEyxnv<-Qj@{J;Jl5I zNJ))nGFovP3oaL2F5jM}Ce|>i@Gy%wZuU(%7)=&(ope5m+h zKh2bZNH^ga@de!r(vA<>VDXX(tU%-y>}~U+bO9b=x&G{IsQ-r$HUY#EDN*-mW~wjs zlaR`uDcO|PzLMbmvZj`gXACKeA3Nlfv2}48)F8ZW{_*K_!aXO))kG{MRpXKvHH%$C zgKJc&fo=@_d+?AhH)h98DAE>?79|s6%uKr7(NwjPp*uYau|h6~>iwbXxoZ=>LxK{i zQsV4vsV_&;o$4_Il6r{H`_Mj(klc!QB)N4gz(b-)s^xJJ1H!_|?l}eQwjFD3Ze?I| zG$SoEf;AM9BYEVdEj@c{1NrgazQ@}noJ)=696{wP|POm&?@j5y`B?rCB zS_z^ZMZsiiAu3sdmcidCgBH=Sc=+1u!g`8^+6Z8_VcG4LV`xAoqVuk0xi95Px}NUG zB*XF)RloQ7f)B?>A`+rDxzbS}#Ee&ZA#5o?iycv$%`vRwK-sTkQer<_6*5XHA+bHW z8GX2ciq8q;6}EeHst;Y~rhHo{etP2}se4E~!mgRXqCNa?Sm!*J%uHrB?}*PF&G=nI z+2D}_IpHAR$!R8m{0SbMNA4kS9VU4biQE4-l29jo_`>R5-2myxA{`*dd}Q&+?imW~ zu0z~(NSjt@3onuv%3kPCU?^LFX$_dlWUBU@7rKV3V%hI`mp(xxKJaj{_txs#w97}ZLyi`%*7H&%l1(4SFu@CT9KNuLh8Tzxnvj0IU2Bb0k??2)W@+T8u;=!Xep2+x~TTUca z=77iV^O^b&LuxfI!I2+C3(!g+wM<#Nc@$*e=krRkVa}m zq!Uk&IK!OZVY@#5i7m2V7iSlX7;eBE!^!FC7sVG4d{Jx0DWmH}GJP8#_-;sjY%Ce4 z+I08Qe!q!GIz^(yab2oYOS^)L5UcrP`S`e(ueA=~a-xa0MLLRvEEftgI)~XyJ&Jy| zAe##21r&^WVRCf=9UCZZpKnF8Ew9V{=y6QR%c)8!p4BsuYBW;lo~t@Bwuge^ru)#3 zwxS>eqRZZ8F|i65y)K`-pa@bflQy%aiIZ;5v%TsH1YFCnmNzL~dOX{zDN?G{l0tJN z(flnYAZ;M=HJKk&gTcOJYME-v6cpwm;UG5<8;11HXU9jL(!lt62m#x1kX;yakYvaL z0VMZ{JaY4I>^`>bAsrx?xM4D4+d#rY@@@ApHy*qUIqo4jkPeP`y4AS3t7QWKCmiLs z<4D@cyFBE*zuS9ZT;9ZNo|)Y6$X%qZ`@s_<6D4sA|M8KZwQl@JMe>D??7Tf3lFs0S z2`f&JRN@=-Xa<*zNTWGu4uB)-K5ySP8IZ`bTN0$V{XPmP{ey#4Di+fQ(99MJVpPVc ztZZhjU3B?0-OTE3Ly7AHL%|$FB9MCht6x3eN~BuhY47x7x0H`MEyGGX%%4%a_Pk;5t=dhJo zxr*6cxd0&NPz=ZNHZg{_HrphS$Qb70VyYnL(PuAUrA8h=dd_!;8H>#_j3zjEqTS{| zGGlU|5s%mO0w?eP^xpWnk>kjbBpaJ!fQzKY9S8EpL;f`fl6d3>90|yq`2`N-dv~Tb z+{Qg5C-63pV{Veap4@6c9+H6k_pAP~m^~uWd1B@i$4O)XqtNYi42xO-i%DoqyMX_o zIJ9+VOycLTN!=RwNDzte-6j_a_t=CHn{Nl#08*)-fmq7-Lvf`SI<6gOsn`b%ZX(^) zO#q3gofL6CYh3AOLNJ6la&k3Zx-^trVLt%JR$kkBY$p4u`G-E2FP2Cyrb^9h+-PSC zrrESI-R^D|0aWmRNiEJzVp9 z1TU4_rIb#Ud>ePI6xBDvW;R$_}~+Tr!s?dwt$$8S=E9lN!FzqE@U*7#$e-_ZU*YxLL9}GhJR(I8cP%w zXXdB@nGDN{Q4r%LBb!JJGU_Fy*Rl{EGnS+swnm&tr&9a*hdEu!c&wiZE=1+jPyKf zrm}IC)O3+y6OicGpoK;H5~SN4N1ibLf<8!Q#fT&%Ne?+Nwu_(gJ`Jz<-Ex$pnHmR5 zKB5iZ!#(7Guz~!m5s=(PF5~lNjS3tj2Xf4K$mT$Dw|y6vV?D*ujD!7j-$9e9)Od2k zz54h5`t@>DFfOm`LnJ|o;`nW2KpOV(5J0kI8|lp5H2}lt>c+;daem%tZ0{jt zqjl&G^(CR&spPA&7^$`n4*HOSh}9}wq?|4l@Jp~5Oy^T(N=g%u#_nz#zcaLDJi{Wk z!Pa`bYop+UlG!PMygao%+!U0y(=ko9)m|z{>EGB#=C!R0iC_Px2W?x}n(eP{WLf#GBs4 z!{{`-=w+AAYG=7hMXB~%C~`;Qt+^P@YWHKfg8`XMzS~VpV6{2Orx6ajm#F_}P%f6N zMmm?*bC`%INs{sDW}+g_rjoOZ(ZzWzE)%mkVKx}=N=dz&6Rb>oqphE8Qz7!Tzfo*x zejykXq%|+5xk*gvO=U{)lq?6-%)n|~W|YhG?wfP`?KK~|5UN~qVeVvMe5 z$jYE8bRb7i&%*=U<<$YvUPz#3S?ZuKA3y$^~2fz=d>oP1|UPdNDs5*Ev!Y0zXO# zQ;DQVXUM#%5eBg|}j2qiLP3YNT za>CN_kT#E8Yw^?Xtc86u^Wj3S>zpE4;Qr+=Z5~Il+d2MF(AMpS4FeKHl7}4abza-~ ztjO%Bq2f^-!rE0C}o<2Z;B2t!v&sQY9FMnfIwYM{~8%fqlylen0flN0GDRSW;_C@W>BmG_;XoG5nFV(%o(A zN)b9_Xzf^=YB*Bga~tU?Hf$b2Bps)(=?y`~hWD7qNHV9$!!v8Va=zTgaU96+IhT0x zMh*9n{Qd=&B!Ziz*4oG@aW-kBU4UxGjG~O{K;JN z%|`KP?R9&j*hrbWw(K?!wH+*^+IMe0pI%i4+P9jVm04`e{4l+c#iyGJyNMAMb$|77Tq&*`D8d5j`gd!iebZpCIHDIGrGlePSzJ~ zhezH7BODzduXb5UmRkB37o|=olT#a?K701e`N1>xZW0#y1|K&zwrmQnhD$8CUYvIh zc~ZkSPTc@`?*_(#*Fp6mH$IoB;l3%X_|)vlGhw9saH>CyblE{fT1*WwaX zaFnz~hS-qpqD(_vU6tM_z)wGi39KZ38*Bt8{WzDR}%bj*!Ho z;~@!2_RL^>H)M}F?y-I%L(=B*u9ZZi)S6!4*|}=u*7DyEzf%s+1IWctwKQrk14vv? zY7>d;Nu3ni0g}#;tSBznKGMER$sw`~c_e(}&{6xq7|UH4ump+@kXJ+`_-vNy*f%Bh zp{0>U0C^BY$r)>#7b8o3=qr-z$%Kr;w&%^ZmWfLR3=|64!PjjB-(04t`WqReu@^|| zrGhGD)PV2t^wTHskfhb6p_s>OlIEUPwKrD)^0JK;{Q4(FwYZK-$MiYOI9 zYpb}vVRlB6vF3C(*op{N*J@}~{eg#6Xipm*Tt-<9ca)=?21YnCv2qhUB6EsU1af|; z{O4;c9@&4y-O*_HmEs`3mBC*1H0B|h8j^cR4kmaUM}IEq}DHm2L9(EaX>OgBKjDu-vGTftCOz4?}iykuudx-^#p_d8c!Bgz2C5s~C2 zL8Oz|07*P-eI#ok+LOrk!tAcoG`n;>0Rc(#UDt01op>)^%eEreRtg|7mJJ6fiyy@h zvPHSyN0G0JVl|S4qMjGDu-5El)$YpPA!}gcY5w+t;@;%7c7w6r=+(YD2izrliK(m0$ ziUFh!Dk-foY}w0{rAp7}T2J@QTCqdSvm zoAZyIi5f6C;UU4}C}Mw~fczc-=|pYk6`*{^-Q;JE?1CGeBH<+YDR;6i$x;|+eILH? z-ysLdQI@?I`|S+2%f*h*I@cf)v_Kn4_xk+TbGj?whDdrF9Uv)aBdBQ3Inura5f9q& zEIk7uRpULVuZJHh?@IUmVGaB-KxY+BHtp9<4Clfo1`o^N0ozJ*fAdSnMLJZrid3 zFoMw@eI+8hC7SH2RH-TRk=P2Qu=p`skmnWwWCR0;kTZ%c@t{{11l8wdEb zOcxy-q-0SPv+=AryV#GdLzJ6{_prgFB}0QKY1*pS|I$#6j9KY)6|svv*=nTH&0HaE zq$RX!a*CPAXT2*pJvv0fRc?BHk7m3Nr^>o%ozjgtyH?S|P7>R%_Fuj5uXzJSzcvt} zdu!9~wdDe~U#WUV_3IXrC1F=z)pw>p*n0ZG2b=Q zqy4FvrW}*=?y0#L)?qCO9$o79A*2(K*FdR@e>#jwLXqCwNLC#A&wzTUaEupC#v>wj z4MN~#62Znl@{4>J+s4oNsq>#U$CT#?PRM3Q$dQKxkHC+6NJb>fvHyzZyO@7uK-wPC zIY&C5>^#X){a3bK-yOgLYMfbYa7UO4kQuD zfaFBlcI1p9(jX%FO1$<{jq(L`X&_K-LoDurTCxk5M(fU4%*HpU^+4mJ)N-9tT3#2C zyHF<%>q`Z3X1#}b(@;!=G7-%YC=lyHD(Uv_pPp-qk#5#Y>7ag|X$<{Q$;cJdl7ytE zn~4`<{gw|vt^i4lQa(Snbk~|J-35yO68@ne%{5$aK=y1)iep2=}JgU|fu(}jW z{PxAtKyB!jTGWlAVQE)wp}0DQvncHO3JPO#(p2!bjaLq20NLwTBauoIzgkL~RK0QB z*qKN!%)50XAgB63l16LbB{TSUQ;C5|OHL?G+eRgb0b}uZ7r*=61>Seu%M1@$TWaB| zoYnHH`}`!v3FLVL+4$xFCt@>mLiXJ`jYFe@qf-?pAioa-j_{D+??*oZha5+n&q)_K zu9O_P#W5er)0zq63#s{1A}s49X&)o<^V*l43nG%u4N}5QSp(TdVTw6*TClr?j-84KPvl?b1)fXxc>L^w`Pa{Ftw$>zydf{gX^LUKMV z0Z!4KL}NQ7Rja*tJ)H^$qfz0FD&g!ns8+*`bIZT&e;t4jH(ipzu%qJ`OBdaF-e3_~TNSpE-FV7gbwfv)94ky+zMZn1={BgVSk!bV zD;k(rEbhCup1l9y0SZY|k6lSoObc@}@#|0wvAQa^SbedvE$Vt!*c zmBs&)6gN?j5kA{nFpW$$tMr2jA(zTF#abj=pq02RXd}(0u?8rCOM#Yc*u8vJaFzw$JW{i9V8L6Z6N=A z^%a{AB&vAKrl4)X*v=m&{DD*#+DPp6!2%#!GleZcCv@{9+ZSZdb(NfH>_L}+6jBjV zDqw9c=#xyp!M$o1-yVsZH1Uo}=<5BRI9((eh^|7qRzJOseWFwd15gR$pj~yVt^DdCjh(zbb z2*(kO_{z)VpW(q<+jp$%#dOxwRb zv@p%!_qkrbUQ2}&8Ld$)uc?=wH!o#P^Q`%nHy=>M29Qs;rZ67naxW&ObT8Ht)>9~v z*7Efx-W)^6)VBcPa7jR$2Y3TWC@;iTUv3eQw%NL$Hr_nEcVvbEe@Hxj`L93{K!Qm7 z6d6e+5|FhsXUGfVwi1^&ukSKW{vhUDLG$_jK9zf!xA?Y#inB4is{R1;a^_z78EA8IPdxOMI|HBm=T?7RO+Z z2_S#KSK~4mZ7`jJ_=Nr7b{!H~4cKxz*>{~G2~UdH><9^E#pnb{9&+5!SEsZF1}8~4 z0?cm*@+V`;_WQSo5*-)GYXtb@st~kl0OSFPWJcS(KCg8Uv>hH{fBuTC_TYI9h;;1d zxEBPsa{@$=SUjR6dmI0CQHO)1f;e=pROvyz2P-Qa>r_e|DLD&8R}aA%0vS1p^P_l> zTwgzyvZ3S8`w(S^Lh)v^+L9xci+UW>To|u5tc`ElT|E)@NtW?)a{!fNO;7FI#bdl0fyl2|erY#$& zmvHxVB!Xo=v3~mEtpZ{88OCF=jp}Vz2uQ}8T`jt>KUHq4?U%#GnlC7&g-lLLNJcfC zttJz5bCrC&Bx%KfDY}r=Y~pj}$@8fv!B{pIbNh|2zxEW7aUTtfN2>K=)qi@rE$lRo zUhkmx_yzG=za|xsOtRHLXAn4%2(FLboj_c`QHaTsPw}NZ!QOI)0+`qyZtw4%TI#S- z{Q2s#FdXh|?(2uqfMB3N)ILA=W6f?9Nj8P+Cl7vx!JFCXsgyDw6D|cIgH`9IXlAak zO-e7eFRi!%S*?IET~m+_*4Z7h2O<1}pyjRQfh4;O&oW^24EH!XK5`=>QIcdt#?b?_ z!!+BB>y*Peb^lM}@-tjaOh7t~8W^XMOLMt{WI%oh5BVuRh(;%;;RgRmZgFzB!6uU1 zT~)`iG-r}XIRAh1LtMg7Q+)_9p?~=o!m(1ac?6Bj@CsgzH)~*)BYDQw8Vqm$`X4^| zEWoz>SVJf;idLJh$@W;qOq;c>sZ)DR!k(o_wimDFo7ajwKkX9b_4P2k2~{AK3gWle z%H})AAs{q_RkFtOagUt?h*=nEJP^JKSOG{sc5n#omhH<*;@ z=W|U7Qnh?0p3}945PrJl-Fy0c6F_2Flxu!AECv(pUC*%S@%V?x{ZF^cjg9SX&v5%= zWHQ6ztAASEE<^>@Kn2x*`n7%(*z-NNOPX+#-XLAtttiOF-xzs}%$hhvwlV99u}kBn zE?7{&3;LykCU*Z1(36K?m`yy!RbX)%y-={ArNqkPC8G%*JD`vJBJBUr2f0XQ%txw_ z`;3z7vDq!&is5ih63W#TOnk-{`@jI<-#dO1-;Yw7v55WC5AOj+he<{xY#hnS$p#0; zF)2AeN8Vlo>}crlWfDjhvPCRE{Qd8bBe{kZq5icjc|Uk{Tu%) zKUUsbtV%g#+j85~Dx(%Qwxs|_>WW3sxW>*VWzgx*`DW!7w7820$CxPXE1fv>701=e z1=`qWarvVIv3Jp|*6SFm5qiz9Fqo)`>h9o;f_>utww`Eg47EfmFG;z4Hm<}o7>F)i zr&H*|4Ir|~D?;$;(}lnXj~6x{Jb3O}*_xU~wcTAjNBi(}w}?FYWLJF!T@HFU#TSR4 z6|s)|S34)>vfrY;GKcy%+r`5j@AIcmkYmH1&WdyMa|vYArStQqo-(z97&hA*R&iKt zw9gxd!^_Kdx;sFX>g@AlypzW*wzdtk7=3t2>e?W18!+M#2WbM5{39NOBn+>q8p(*v zfk>zF$bV{g>nMoQ$&0h?q{a@}_h0~$*C82>_A6c$e;3G~-lJ&!>CGAPE+lz9lG`|r z^f_j?Zjv1p_xax&-`;r0|I63;|E6`Pdwy14Wc`CbiP;V9q11zZoYSO74e_JG2P&>xUrFl)>?_!Nvxg{wXL8S z%nS9hrd$^H3}0*tTEnt6irxjMrYTs{X{BNnZVlwdz@T3D+#Wh?`wv@(JBzwyj4vMw zx9XK3W31bFa=Q`u>m?9%!0vI$6?X&ZUEuq_yot91YN;sxW-}sBSSW0bO=VvkY>&-8gStM*#*LzBbZaMD)Mvczh)_GJrkAkI&?g3CL7mAT zwAf9EBt9GO9v=s^mq49B4OOE{+>$WkL8uM0*$c7eSvqQ|=W}BiyFJJyg z9R4*Yk~`YRSrF;-$T;%)NA}t|eRb9NknrEfUZk0eXPg=c*N_ktR_$ryd)FR0_Jj}Y+q*S|_c3XI1JpBh=^ z)3b$20y}D?VX?8p6xG(`S#ZO@2w#SHJP56?y8y-T@WsJrX8Z8PN9zaU<8c@4__iJ4 z5p2{1muA=4v+;u$+1>E=v#nwr|CK|Wy*%RB2oLK-wOCIyPpnJJR!ZFn5sN9fsGEc0 zGx-lK1CvnhI?>-g#6JQ_p^UnJ&NVnF(oQbgIXAL3I!ql|(BMrBAIv09GvyPj)fxCc z=1B-X%^rXhtTQ>ayIvE-Bo^Cd-056D75ZW~>_87DsU94FMm#t0=VM++PE1)xa14#+ zF;goRar#;tM%!W`gzDY+?h*d_Q(L-G>^R=Wf@5;d%m5NZGVd<_@+DZ5M8@%DhsWdN zoe0`srJy6XbzBv46#4Oyn?Cl2Ye){He1;?(*`52?GLUd-7>+nYas?>`f6frefaG>t z${%(Q|LLB#!v87qi;N}YxSan`oEHXBq~9qtRaa<2*Z$< z;8$a)eMF{)BEF;`X%K0Q#y7)86&!KnI{a$XTO&wpGmVap3=hs3#nB!BiMqnLdCIPZ(tS2wfOR`?jr0t8vu34In_Kdg@~5%%P&yOzi4nm&GGW$T zo}C<>Tx{n@hi(3iWdPZhCiGgBJ#&kukxV}#`36HTip znajsKA6K7h_ilYr7JO-UBPZ5k?f^Ly~4=OH~P&OOc^5|F9GojkQV&NyS4 z8BH*gu!{MOJc61{bdmu!noqq;3p=-`$j?S)Ib0hf!uzn0b{Q*RvShjD|f-d7K;^#WGFNr5k)SPTv``1D)4#jG1y7k-&EOF-fJ6 zeUUxJ(&8-_Izllkz)d@*r&Qm3CBnHw3jAGRkHUPmfu zj!V^TbCzV59pAS<_5SG%UK1YFENz}Nbf@h(+pwZsC zwIT#jcHUSLYKF9sk4zi7~UN(;vk9I$s(ofCniw0RPbYB3>j=xoWI=t=_l|gIoXhx1SI1T zf>A0fGKg=^Sabczd8EQL=?(p&3?$BwubXT_l3Q$2kP?t`%m+L&4Jk9p50PhWwgh8W zXG8Zvvilg>4dyGwA{`4L=d$-KdN{vf2g<{!y8t{wMal|NzA-x@*G);s$g0Gn+;hW- z1ds5sSxt{r22DLqAtSA3MAkht@H$qEOtj#f^45v?oT3 zJ8%Fy$Q~ZQC{QWn@qr_RS*A|I(6Te5#tMa{QlN4@)=+Ae8d_h~IypKtjO_@z;ZcmI zfMIW^B9X&p8;6CBb~L%H2?i~}+>8na`{sq-^SwiZO3a2tJw+lfcv>IDS}nJxQqm-z zes*uVyqVssSA4;A|4eD2iI91{l@RyTswW8h3_w8+>$Yq=v|0z$okV=GR3_&xN418W zrtUKYV$EQ{(~JqIWp|kmpx0gD-H>Y?pRV=Y@hO~;i`xizA;2GkkOCzjp(7z+QF6BF z> ^kmE@3F?XH0LH?x-4X@MgRF-$bK61f0g?$*19iuJt*hw2oK*~5W4asdb9&aKN zA|uIdHXa?!> zJk}1|^>%#A7?9bCV%SboDbVJ;BVy)qrlA%~OMAI=t0g8&NIVCHpnGQc{G>^58M!EK z>?|vTu~sU-(Q2h)@RTviN5}`0K}})?X_gxo&JPTz29<%5HKE-M3OJ0O#+t2$rnQiM ziV^E;s0mq!0Z8|Jx}K?tnrgHe6x~BiL-wLPcX;-h>oB{KN;RXklW4Hk$}~y~D`}N# zQxMe+p_WmvG=o?_g0c4~wJ5mEIHO>a+te;vxCu(M4y_|+3LGJ5eu#%)w24PN0HY)_ zkbi@Q40=e*Nyz`jUXPGp$3r<_MUMF5ZP`z zyp@Thf-CYT0pz$VjAS5Ga}}*b@#rq9xWNF zF;6Xp85_<;TDcgK&mF&oGgBEhM7eH;!>NFs9lr=MQRG_tQYcqAbG zK99UMkO`mv*o7otRopRu^2LbcK%Vikag%`L3Q{^j5{=Ac|E{AUF|gnl&XByNLBjFP zN|Fn&wZKj4Uh4`W;KyuI05qgUZ}J+c+LQ?aDG}K@MiP+O9eMBvBT|qZ8hWBD;OE73 z<+AOa~apyVW}|*pb#JX5QXWF#;{d&DsJ35NdDO6gCO{KxDxbUQZaJUcitG2?~4K{1$^rRYV=C!4=$365_V`XJ% zUg=9VN+&*REg!Vn#T^uU`k5;oF2XvG;}kiC%+1s|wnji)_?H_Ul-S2H5;zi%FA*f~ zs7PeVUS$2gP0k!|&wE`uQ_s$nl0&_6Apd~_`AY7Pr)lJni2NB7RksZh8B?ppW$J}f_87)>LAY~$V zKqQs)K-eA`7qZk_TbN|Gjhdd}N890ToxOl&!|mO$i-wD5v(TlOq#`&Z(E3Gkv|f=(4|wN}fz* z1GDC##sq=VG3XiawSqnBoVXObG9){|=Cv-D*`6k^k!>4k-A^DdI0iD|gm z+GwiMYDS@IeWKD`Qr(>IQ4aU@UB=Gr9V*I;)lQpG!z)PMm%dsZT3XoLUu~3>xx~ZG zM73_ydTob?i#RPhLWR)ydf^}reOTNEkXuM=GaPBNQh_F>0La~!QjIQq;Jpmwu|Fuq zAsLEiY2X& zZ%?G1*iw;M9D<$00CH?hKLPuNvi{lU#qp`_qW{3WJ?08SZLSw~Kx6?u4VVXD4DGl= z2Za~y>{ej|i;U*xCd@%=y}q|3YTbsUc4*#EO+Lx_Dyc+No6`nz&ZNRHskho^&R@1V z7h|ow)mhJjwHj~}ut%#E6I%INWKiiH?NRjg4p2N%ozo;rVy%UY_4T?3teJ*jd#mSr`!8SY8@OEDngEX&GZ{I>Z%CCNmlw4A^QtA^ z-l}RZFce7DQ12UYS|)<+4HQzC!5mTnI7#jzWjgf?GKD&UUBc1k3i-1HWE`J#d~spB zWmPEy`M2Y2@NuUu7tD2oD5HprgxhL9E)sVb{5P6xNVkH-5wZ(NP)sHp8WNXmvt0h2w+qvGsABAdO}K>2NtBi$+($ zXgdrsAlsohmUCK06~h{zm7JGGz~D}%htx~Hs7h`1z|K0COG)&&U_aapMuRJRmr-mB zmnIXfg0)mDh4}o*Nvnk%VJf9JnJ~YxhXFZoen=Y?GqqH`)jXN@Rh~|-l|5_sYPHYM zyc=74>ekd-*a%mN`KtBulE;m%9EGZ{_b}LVs?56`z7FKp$MU+4n%@S zk}e>lWqAcQGuUqoIPz~ah>2%Z}vcuLs!o{VR_90A% zOeA>37)=Ss8r>L?xKSLaA`#gpAf*ip{zVG5Q5-Ie!h&rCmGlS@)43iIpdyt}w2$Lx zxOT;{^gIh7X|Hb_CrCSHs~}>z@nd@j2Qi&W)jKJc(mufh@4~QGQmkq`)jdO55&p+=VkB#skKn;tdk7kiNbymaG2Ptpe+E0od4 z_PvnsObdIOJ9q9}t1f(8jrp{>QU$!B!XlcgCX$*)ZV1zTda?5E$c0Qcycr>Xf}QLb z>Ay0q`Ra*6v!dQtrr~EdR~p)iRdgUZncXl4^r9IKoBsgObi^bvo9d{D7sO<3ahj(N zp_Ddw1d-(1jLRxg0`dg|QZ7MwO+)gD0bTNb_tp@q8vi8?$@AC@Na9fj5;$V7|9|=5 zSA-*&{C5@`#{l;F>si5dxNucAHMK7R6;%Pi{%=_C+-+Y)a6& zSKZ=59Vi9_Un8IisLAUuZ6WrLU@{6op&$nsaBt?sx}|2 zEu~|L3{`_4rabOkz-u?6V>|nzu=NZB5!S=dkIbE6`jO46D8QZ{9}|y9M*xzmNb+i; zR($6W_Tk-zQpk=Qzit{ko-Fqy2uSM7ewP8sQis5iNry)nNEG_K3m{2Bejo!$6cUd7 z_1~F(^x*MkBxN6)At}8jAaT9_CV_gCag?4U?5-ssF)H9Wq7n$dyyyTa^GG&@fW$>1 zN>ImyVM%Sy5C$X^BRN7T0Lh3fgeV}q^?dBeu19AH26BJ>;kGdza*eOM;AqBo+F84P z!j;A0A3z#KM<{HgMy>1%muqp^=66J>acaUnG^FZXUF}zwJOK_s)nTrXGXByR-}%VrYmF>d;{cL<-;$1IUyvx?>r=+@t6pxCH4R(bk1j z*(0PrIw_}D7M@ODxqbWUwYzsdiB;DY%32ISfSZ=7L}|>bR?+WvD=tnx8U>JMSnOuB z*-Akw)mr)1>V9d#t(ad`eKmbe^Y%g&NdXMOszn32CA6uVBPe_{+ffc5I)HQSa*d-b z66r&hG@x`&D2`-3jyB^{FeR@6>9@Ym(k(=!e2nZKo6H&HOyY;^k~QQ95|DB(yTc<7 zLP}wA8A!=u%e$+81@p`VuXF>F^g<^5%}COX!N{E(iO4e~;z7cJgb<8;$Z82d>QS|a zIVuDsBa)eG07+-^V~7+pucknxB-e<@7|xC?Fb?$zT3NS3KF^3;bQz~Gjbf}A#>N@_ z)V6-~5r9NZB;p0yt(r)|#}Uwn zU5hPmw1Sq=;i3NCfg6_w`jjZFt)g)J zMAmU6t;3Bkjr1#ZJ$;X!P3eRATCLK=fd$E+mXQ2v^^47NZvTnui?^?QcI)?RKB|=u z3IaMBF$d0wjLo9aq=yriCI5!1OX6k+HK$WY2gM^b z2}$PS#D1Rq$ojXb=nM*g%EK`d<+;(d{ru5$6c^~nitC}B1B!R}L#~6vtc5a&NVFl` zu}Rv3k@uv=_+b(r7?v^q;$_ zYV^-5mS@~E13l-J!x_*Zz~vC&XI0s9+LIOl0LUAc&Z`0dGW9*;iNezK z$DWniwNLKdzklt)H7uO}Sfj0bR_aX@m4muqLUivX(X=@8m%a~YXXo;XSW0LDaU_Fk z<;Ku{!=p8;|7)A0p2H2_i9UiY8Y8NNJ!m7a2(K z_^+(J>s@|?{D1+;g^28+30M2^uOAbSXQiVTH`!s5+iXcVmfZ>x4|d~30!S}rSI~rj zU9`Xc$cSVGkpyH2L=umZij0v{10XRz5;rm3Ilc| zYR0j>5_OS<&;b>wqKk0r^2HI8&Fr+B{fnZ-n1zlsVm69ip`1yg0yh&0y8A9D0|rA$ zJEC-_%av&D`{`QBS81sBFc#b+Bxx9c!aa29d@entJwI@vXV4NvM*>{y3RGmXiPxvl zkg>WIe^r}aH`0T7_yd=atic!q953-pnrd0QcK`0jcdlH$cK_OyyRoNx?gSR(oum@6 zDzt1=+|%T4^y?=3FlgqHX(xlA!U;SkoK0h!O9q3s9JsZ=ufFy1mAAiYXt89L1`hiG2I~H5kkj#&fpRy2-9#WFOCYSr{DYBy~w^9SV|_-XI|$ zX=Vy(!7xe==-`eVpC!BV?$j`w4ILffXhczHR4HC>JfIu3C7^4rm(Wgo>< z$E9V9Er|6B%YE|~)yjs5d|o;#EJTGB;S}o2klaiUx${V^A3?(4(+Y;BfGQ6>8$oMrZM0oZ(`etN0aP~j4r&uo0jeIqp`Ojl<+!#HbNbFD@>t`+6r0*14hOs8i!BsV?0ZP^HUg!AjJsoLclr@H2xe}OPRVWlHEPiwM&n%t0aA~MVhb@DxX5ORSte$|kh0SK`ByWk-B5kWp zKY8&ledll77=Y7`u0y6mr<-fne*5tLXHVCz+<$oYlY5_dH0eNn4M)&QrJAaw7Tf{l z&2wt+=)lDf2WKaOI55{LHG$TPLr?Cd7chope}8rFk6)~QwWkTF)0#aWXh!{pC^~{- zV8(_~u0I|QWseKRqPdWTP?tI^HmWYd%wz*dt{_od(E*Z#(|0xi&LHf#H)nvv zE_4?4d5ddE67JHle#5uqZkjG2|MVD0;)&aDUcnM9(nCg(y>KXH96QnRpJP8 z?8#%0^z7aokxc97W-%lH$H?6SBJu^zPmx9pLpll)L^33yB1!Hyn@mIE^hiYFYm6tW zIm5ZoW)2~7hRGAy<>Er-tQbGQ2yJLlza7oY?TAP>G{YDjnCofR>I`19(FkoB4375p zO)9;Mb2GLL%-QkIoIi(c)gzu@GzEQEKS?!xW#0n2zmtKAPxWLKF+dE3%&B^{H&9{L zH))&*)=sNsz+7vcv=Zf$)@fo1ZCR~gM8tr#i#SB~O=>d&0tKhok13qi?*I0;SEi?L z-~E?|pZ@X6rz==UhWG&{06mSZEu^&SB{eoQcrOn8@b!mV;vzne^-3y6G&gIW($f|9 zKK=?{EIi#;s7nZk0Z*1l#LOuWOT^Ajw8j*+v_NBi%YdawteV-*|=ulroR(&h;Z@Y61ZA5lyZ5X8h$}Dd>O;HwZxq zkyh|Y8El**Nk5)Ipd-m<(+Z@BL@jAZ)RUo6%Sgq4*n5TM|00^V5YS<>oFn*7ArEAB zpn1hYzI*Sda+Kd$(re&K~?ad2OZNTbOVx+QC?RF-F@=9{;6v6D3 zy_H1W*U$**Rce-*e{ypucP_2IIsaboh}Ubaoz^nGd_6_uDHob2*Aq+V$!$hA(5^2Szp8B*I|?&ohan{bcO_ulAqndv7;Wl zRV3MLh|J^PqYst=3HkFBR3vbuCkZLaV{p`2D-IeVH5hFY0+J#<1S^pkVO082rnB`N z!8cZdHuWrQBh&m!%vdd> zBF5nOG(q2tN{#)Vxfu`UpCqf$O{sFGzEaWTdbi=CdnbN$Ngd!Jr?@XqyXckf^M z&bl@LZw+ytqujy zAK}zmqxhd;B&s=RpBynQjVybIhb=CD$P9Z;ky$%w$SnJy%Rm;<#r?m(=~!$&E1+Yt zW&H@@c3M`69c_7rNeRdgBn^2M$hRdPpKXGTNO7p06UwY3$|^f*Z?e zOVUx0U4BiM#pY(41Gxtvbp+(sH25Cf3Pj=|NMvO{9U_TGfqB_dzD9DhTQva5#_f@@ zhQMqyAU_;^7B660ooi~n;0nQocKG3WV*;*YDIMK0BYuot`%%<~A7T=UIN{4cKWcNy zj6>8}yk3)tS8p_mkxvuWjC;ti7ogd+)rB&q2I2VTtCY(L_fjGW^+;Q3FvMp*c}bzZ zFyai7f1QsClwY5&!}y-I60P<|-h5cp6_3V7`v%UB&MoILxfDe^zSQ-H*WbBz@6#(+ zAAb4e!>j*t_0Hq>ryt(C+Ki=h?!APN)MC3_AUS#YFF$;Ta|bLyjJb878AJ-&AsFm^ zLwRX_A0HWuXqvD_1Z>cY1cS~%QY;w^UX#g)HL^McT2b|ciXWRCw>XeABzUBOA+nDx zF&Sc+R{+^*o|kdsgOdOM0!F#Xrj{BGN`WS8aUSaK%i zoHlPle82PHG;+6w2Yxt^_&}XvNKE3FeOQE z=sm6Z0EberH(S8T-H)yX{fEP|Q)vCi;Jpdd1p-DSCCpxnZ6}(Zabi$C>JRMpITIS3 zu^mJl(MHVyLlSd%gV=vCGiQRDj0By*MGe-~Eo%dYbjhGlmevxUJUrZ172{BS$m*p< z^*p*|=5L-;te%@0x;b=y*dzuc$Wc?Oz1Bhtzku8!+^|^Q)^?1qZ-4mp#Y=rN%a+CV z>FH@~!jFOv zNq&ZeVD}MJBn`gDwwga5(cF7>dL(&4La6P$n#;y3-q0mwuOp#Q7RepFJ)rgl_?3Fv z$Yn21nX|i7TX8>%$FXk9Xo6whu`X%r)+LN|ilQ9C9E8QTEjqnkF;mJZ17b-$YY z@;s--I@P?{ZJ3!fETu~sF%ZaUg#-qp#+oP$o32!X0mEJzCi}vZC+|H`yw~qO*WYv5 zWJeSc8muNzQR4#o8Bl+Q#?>~e6ti)(rT%cEPj4|TwxA(}nlJU`^^YE2z4z(;fByXQ z|Nh|G-3K^N-o0}Bod3nioLXu4>VFw#(6(l_&8e2{MVrlt>6a6(xDjQME(C!{P!aVE z(GBFX0c1yhLUhs?7PV4>SN3USlTGqQt=K(%i~|V`DJ5!nlNaZa8V(T_mwg(hAi0K= zpPdJ|lxdVT4Qo1$DCp3}t+V=)GvS)i(sF#2Pz9qM;$yM4>KneH*RzLGkG5 zQQtt1#bk+4DNv;4Onvm__50Ugus{0z^N)Ue|L%i_cW+<0cje3L)s^b)l+e(wm2U-- zilN!Bzy1#0kOU<97ZAaOyG7AE>CRyRSi|kMc=3Om zoLRObhmAhBq6>ZKV@JDj;*rwXyT$G8aR^i-ki-SS55q;fmI28%B=2$N=yBn7+GoR% z9h2SV)sV&RbY$~HHV2Z)WBFotrZc(a#uG?(@#q1MxP!^=a$OuE@#v0=%LmD`xkK=% zEiGG2y4g{v$ZxT%W*0<4I#9}mdsGqtA|)VWa%p6nc+9fnBWr#o~SCG|Z<>Q`#tFCb=(v|dA#Tz%4y(WL)&?#aI?6z9%g);XdZ zF@Yv$M1_+kMi-!)70GRkDQmXl+vCrE_~GKFa(ZdRFrq^X9ZGy`7FrcMF*X(s!CJGF>;Y}@ z#Nq`K8AeDEEx=pe-^)P4+;Pz4A94Eld)~~#!;o^V4@@=(lKa^5?gci5?^U1X0|5E| z_&Wcmw$Cfy=XP&4ZMW@?XT6P^lOOuO+}C;dsE-x< z_TdBAjuSiZ(mBuh_C9X{;G2p>KDA6GJnER+>HunI5+voLMI#SKa8wrZy*8gMJhs=g zIjY^q0`f-xC!c&Wa^@m)9^}JYNJ`h9OcF~mc3EnNoYv&40#ZuX3>b@z(%3JbY#IlKq9j?YEbvx)-;*bKaGY*tq%MQpegCmrY%fo9f%l$6?W}8ZDa=mqoe+icd{_EHo1X(sTV2e^_exwh@>+fh>7IY z%I1a7KLCDEVkzDO;DxCrMCg9W?RWz-Wy$s1iI_wjs%Z zkm$P@j1^7)w8t4JiQZ?p=;cxw+6dO``BW-cDoqxPu_!VWHnv@MJ8XUmgGalZQ@2XD zww;bCCZsV!tFdx z%Kch?kG$vd`)5b~I5OlhHoW1z{oPuJCIV=-iWw6e1-b5@fv3%)dh{rZd{PbLt*novA;0&Gwvd`fF_1Lp;<2rm=FvMO0Lr6iY{96*ZQlP$ zLD}9%E>2syZmX=VKBza9A%8;ku#HG~k0}u$ zUfh|xHaC3u@IPBX9{T6G7hZqy4e4>_0 zW29Or$GdC-K~WMSFMh3pSPtU+pmxsNQlH`YasO% z5-2PSX(6diC7!#*Bu5n$AFtNvl6LDR35Sv;=g~yAyX|&SOUpv$ru_if|G~&@a$+|L z^I#AJIbt6VekKKN(W2tuwQKgeIyH!tx?&b!i}h?U%CJlnO;QAtWH|yo(j?-{q&JnN zsVwhucb_=kn;UnR!t`LIL(x(&>`k+^%}Dz~X1Fv&lb6r!=;~mm-|4_tvrhp-vpRL_ zRwG<;|nmwo;EwYi^-UAuJt|Ga!@_&(LB7vBEu z(%ZNE zbZ(c@B_qgqMP#FZtBxkUrI6B5Vrd?PiwlyK#7xS5{t+5!$O){he6+C<^7#GJ0I3`{ zcSb#3%F%{V`{{3rM(AE2HI)5bE9=A222u|kipSPTNDIh!HHzx(k&wGp3BYR5YjxAzC0tLlH*(7@_97>~=f5yPfV;+h}0QFhjP0ExHhE+{+`*%Yr*^I?~;7 z;&PYcGW%qBTeY3?$72lE6w6ysNbh)NX@CE|Og13KkzITL3#pIZ^*wCXcAGn*LqQ~S zX!!7ZP%=<QN<7tm)^bsI+)<*$pdF*x|wM2lG6&E74 zg**q6no8>usUGWqq&3$7kJe~|inFh(j|Y!lhp02;JWnK2hc&V~Q;1x}OZN0BBGtJm zKuSw9K*~9A+R_;=XAhUxvXE=2he*p=JdT5o`c{${#D{3=smo`chG zJNkzDZ8l$gIgVO$$z-2FIv7j3`}%r%B59AC71cJ68}N$2kqEP$4(zP-M#1>HC)oA3xU$lz7?DOdjGz?F$+Ys z!9cKvt1``z_xKO-yo^Pj)?^4JTPUYvOK*E=t7 zR$R0ORbs_tBsl+2mZdD&-`?E;M%2ZThMr#C4*as0>uZ-SM3x{1ka^d_mVI;DzZfb_ zhNFIeGR2Js<+t}g{d7L*3yGY&f7}yVDa;Fyf+Rp9rjElt^D&zTJf4VudusYyQd$-R zsj;&2vYn5pP1#KbE{pL64-aL2iH}C$22NT%} zYXr&mQX%NqW&X5E*$_VJCWAN+swx$3unY93u#Y;U8smW!f&xwj}OL6Hs`3H zOn1c_D|<%+k%(=;<_R**Wk#?U-pOJ$h3)9?7;w8Iqiln7;@Ii9J>J_pK+>oCXoqc@ zp!H~{Czg}{&Vmq^7cHr<>2vm;I{A*{tz!b@5&s>J*A;6N1;`~)WXo*Pj&UzPiwH`p z{@(!kF=4~xpJZ$IKEi$bV}~x`vFEPABSg;4%^f;)===+F6Ng`Z`PJ7i-G6t1jb8T# zW7Se5`+%xdlX)EsF9Fm2Ed=ykt4=41eX=yfmh;78ae{vmKeOelu2Ly!6j<+7La=ff z;^rUx*ZZtN2}MS2PS(6{ppLdCi66$`Rf`2N(+ZgmIc|8oMUWvtw&lSe)hm%t7NUO* zNMafRQt`++;86qlJq4tWv47FBkQhji%>v#sMBe4ba!<)+zgM~PIN@QK7X#FQcjHpN+S7+;jtY*cH}MRJEu>d zK6bh*#3rv;p3xTaGC;$U1)4yr=;rS4R+@kM>f*;2zxwLt+Mjp+v{&25#_x>nzcBnW zxj+h#1U7i>vGcFt$X|T*hBEG?un)r~W}^q_dRY?moAJ8A^8c9ZzuVY_@9 z`Jc<({!+M-q4xsAiQu0RO&Zat*PATVnltp`V-DYEFuSl3868DnHCmVqik^zf{j4dC zkM|2J2&)fqksn%}%3&Z6T((B?5&WKH9W|xju#n%=KNFA*EfJBG{N&Iyx&ez&QI^1Uz>nSgSxQ3Le*GT`Rd}i8t6iuD9 z5vv%cX?oKJI?WOHxRFhm9$R;3cVECZ8l~)(j*Lc19!H167VtZJown6nZYr1a+o00n zChF=70Chl$zc8`8x`>5jN*rk_;=dS+_Amwn4BryziQdwBDsFFr@>uZVKJgfvEe ze{AAB7s!@{6e6z=zj%1;+VG``!#l47B$DJtsaW%FWbxUlRI$0olvmNtoyBfe%9UH& zC`bb2sg9|1jH+d^F}sW5R@RY*3Y4do<3ZytlWrUH^C(5~0;dl-oo3$1vr!0t$`z7F zjl>4gg(Ix&8yel-e(q_E7C^QauODCMFF$H$QoC%W5+HS&XRIJw6ZzN`68hCZ8E*$b zKL7l?&qJiVfg?up97uwtE-1pIuGy%MfGEZi3yG_?j>Y6(5(PTc)=ajGSZJx$51-CW zZ`*o%diq8_yUoy-6k5bAih(2qT(>MHLP`+HIH$NUNkBrRte0F)#FL&7swRcCI=9E> zgK#Mt%*I_|CjMg??=-hXGgf9G49PkpQ4gCXejV53a_mpg%9RvPo#1k6~*edo0eO@eS!y1~&(GwR=IgUF{afy7V+g&pA;k>=M z#5%4FZhN-2zcWiBeQzmMdno%6K7AstiVwT!pkj8D>q*Gx_FZ;|;a+V`lI=NF`W*(K``FTZtkG!`q@vCJ%>D96lrEa;W5 z#d0>7CJ~nG87iFJSRuO}WXaP;sl-m6q&GO9}E|EDm$9oXPbB}sm(++>E z*2pxfl1R$q^}Ct=f9XW;F`^nr$?FZLDtQVs4Eo&PK{je0x~j$fwT>+u5N$(DZvC2DW^qb`<1cXLZU;~7S*(_kk;<@_B13osjxHry=|~=JCwUHTkyuJ-R7AE+Bu`5@03t~pwD+QM+8Tg( zgvh6#v4FfWe*3fA0QosSTV*1-@W^h{iv2Ki+(Zu zc#6i}>Mj_{NUXiQbAO?_!|Xvh+x(Q#^R@c^E)f|%m(XN*e{Sq&bKd}Rm~`afONS4g zfARHMQNKvI82Oiljelx}!?idxHu2oGCfcm7qem{k1(GLE*m6^qMx%-%SF_?uECFQ< zDM2Lpr!q^$G~spBoSdAWiF*-Y#lNIdWP;|EjHVjTUL$9=F>dSU@Y4LjkDq(G)$af& zEwA0Sd{uuG>uAY`YL^X=SV$#!kAZBrkQzvvW4Tywh99nL3E(nVQ0YBfddC94Rt57*AllSti1bX4`& zF6|Caj17y+)63(dLdpf)cH>ly#Qn}Gj*cN)^!>n z9nRhmed^^Z9zGOn7SWqFD^bV56xU@lH<*v*+|y}QzLL^E+W>IfQ7@(v4+N*^d7!gS zl9HV%Bo=<~uiyTz@}&rosh&tVx_?HUb|(&z+HNYB4UgJFTCEkDM+IcdV?)0BV|4xQ zsh?i?DNH{5Jm<=}=LJXgv@xlJZLM=55eUX>MJ^jnzB{$* z0LUTF${C2HUFUNo4LJq&5qbdfVo=1pQmTL>O{NDjHGG+i3FL0?CK2MKg3T}0nh#hA z5^_2h6Fa-HX+&$Q^+a*0Zqm_DXJS2N`uZIKk4LVNUT>)sqJz>GBBr6(<_Y2KNM}aR zBxj28kk3pcV!2iE;CXwd;v!uX>K(lmP1ERAWCL|Ln;#uw+WPouM;GCBWGm?$XPbx8c=_}zq!0*l%CkG@1TbAbF+4|*t$5T(&W&9fn|p0cGC*9x^2Z|yq| ztkc>Wqk*(swzUXW=OH-&*?xtDM`|>h1%P}OAcaQ^C7;e&NBlPLxaAUJ9GPCa zY*3(o8|}IR%3xRv=5PuTlIW;Emr4|WN!k?I)8MfIvSlFKfPD5p ze)`jApH(zID*;aHSU9$b;d{&Crz4S+1qMi^TbrJcC}BM?fb-bI*H8rgVnc8!xvL+mWUmljlKviwqF8Qc&x z3!BE`YOgIy9>#0NUGDy92IpC08)2msaYq0#C%rG2g>iSJv=O~~wm@e=Boc7&4}7Ej zLq0lq6IHgcrz`dvBVgwARL;d>LDU=li>w8X z>r`t@S|iJ5akm=Yt*r%vwFhg<C#fsHOM;G&Fb#`%?}$)%-UUp z_ZDLOZf-6dI#DJuhu$zR>-fc$_4m~(rO6-yX-1T+>wo^|8*lvJ$KO3jTC3oOSX+Q> z&oe)I;8BM)j}~eKNGqt}fTNX!)G>{fg|t*#S{CxBIBbx_Ov2)-fNRG|fak4-?){$rxN*oia-4vb~Y0 z=KYRPGQ`kpjg)lA=BZTD(;-gUG*G*uy34xkGog4rVS0&TLQ&-U@?ku-%kTHw0(TmA z!*KP|mXxux9PXZBWHO1_qLG(!c}aA8PMp3lFg|onpR?B#AV>Od`0nDgZ{nI|sG)`e z^JJW<>w=HvTnX_;GeN`f7K*hvi9~ObK8Qu$wX1ft_&_!^XN~Z%9drBI=Ph;m1Pl`+FID!S$bt> z=aRZYw&SRPJTyVI~}aWVA?+C|()1HDI%U3R!5!Aw3J z&SVq3Lh|`yHDjQKwz&n4vs?GBHjweVQhwX6>?ARJRduCs)#1yBs|H6L5$F3rW0L8Un4wWAdgxt2#hyy)rK-qHHQ* zlnVMuM2>%Un|=7m5cA4Kib`+x2?SUK;x}tc<$g9k}qEQj{4)yd$!;)1?U?RPf z^=M|k@k=^iu*mhZ zVz|tB#ULT%c2B!ZoIicKcc$`7i%x^Z$A6$75`i(&NwIWnZ!eop_Fd>adHQ(Y$nDQQ z*&yf-Q^upu;r>?Mtk!^MdE|q;XV)hgW33lwXPFnA9bWqFrSs>njY&?t{iy8tp|LT5 z90p#gk`@zrgMZnZiWb4CNOKdRO+Jw*+57=kyq~g75l4}vPi4Yc?yWU64q^)!VKtj+ zf2Dj6+t|3Wxq0=y%}Rv`JYVE$D*eo4CvH+z4B~S*h%6*Md=K8hY5$T<*3YOWG%=7m zpnl9>Yap#s4c}go7jFgGO3j%g4!dpO5DWRgsMA>EhT<}{h5U)|C?DF9d|sV%fB*NI zNKWe}DShNXiG^$*ZvaZrmfK;$7_mtd^D(nxmU78hr4;Dx?q-%j z^^l{&7h8%=eVA|9WqnwYHj0K6_V#K8?~Tr$x`CeqDB zvsp%wU;2B)>FM0+1zOb|et)inMKp`dIH=9c<%V5!*d@QT^$K_*Sw2e&YJrpCRmwjE zb8IC2_-v~<7+I2vcJN|pdV4h>Ch}kZ;oBI<7LaW)N`3grKym<5(vV8;-kQm7WqlsK zLs}lYb%ktg-BueB08$P>wut0B0;HHpymmX1#M_*I`jKTMAK$XAlLLAN;}PMk)*iA} z@(CcPX|Cv_iYINlXK2o2*$=)1mwgc(GvTrSlRg$eC*w3uaXy_1$||4&vf*hNd@Z4> zhlwP~<}D>nlZLWr#ax^UOx=m)GbJ}kM2F2CGAN{&1~xB>AE#e1>N362Xen7R(sWdN z!&Q=aF5jx#OIF>R#uJd#(vv|jp^_ex*=g2H-Xn8NZ;_Wg4Ip zfupB-#y5i0HtEwXmdV;w%vzP5>vuo+=ASg3P_!XlJ#(`fi=C@L_SzvTf|n0X|@Bj=yD+Pw%ABX{K%bAv{Cvw zeSIV29!Zba=?D^-Hf`+TZ23GqTVWC*3SA2lwdkG`wM0suwG!=O}HM zC!EgCA+p}#GT!~ZbVTBiWtf4~`>dV6<|~^E<%QoiHjN7V6z#1eUnz+SXM{)0q{xr+ zgF>2)a{8`T=^B5!MGHXc>8>Y6*g6p@j*#ysd2vgtv=!5Ew1LzU+4>3z3*s;N$x}c4 z$qyBenoI4w#YQS3p|Slc$-!p}l04R$ZR=?tNz_Bz9KC_;;G-NN@;grvWK*c=>ga$- zLhA9`9!#WMxYw!sfAB%y2mK@CEXXf}51Q{O7?P)1*+_2S&V9_zB$F%!VuLT{B#5~) zDlr1+=yq?nGdIY6&lqJS!Q=DzX^JknjBq8LEJcmDnAETt^`wI)DRNI_)X^7BiS!vu z-WulB*qx~lW95c%C&M??7(^R#GlOpEot#-^_>oSArD7=gFni_(+KhASYFUM2QCkf>Kl$$2=GojwS)D6bP=H-fw-R{`?Y(@*2Gb?5lO(UU6h2aWnD z1F0-zE2jB=JCF)TorNT(X$O+GgNC1{eke!d$a8R17D%0T3#o|Y4I(W|3665wcN<&D z{P(o7g;p)HptPv`M|?Ih4QcVt&d!dW0YxMhlGzUqS)Xx~E&4`=#$lAof+d*5ohNyQ zUE970J~zcg7h~87h$J+jSDF?qwg|;4ri-bWXvv@t3u9=Q6eOt7_)5M=I!<69s=Hy_ zvxomk2nFP5ZrU}NcIBMt%@Y7L@|&Cad-lxW=AB!cS2ihyY-XrbXL7ka`6Y4L_GUIY zxx79;^yTs6$By^)k9=~&oAlP~<{%BTOdG_iaI*H%XEz^^cdzep$J^q1w*!yEWE_9@ zL?Qw5@Wl18*M^68s@1(ESty5_CaoQ3t9X2p0%$Qs$5J$K;`FiOz0Uqf$PAU3P#3+K z8k3HUI3S?0g%T0VMT|R@$|h}TO2UwlO>~L2mSzQBHHgI0KDLI?HK0V#IP4@%haywV zdEFxKW0^<}-i`DBvySaRwyuyeP@@ebN5?dBh13cG!lN8MQ`81X!4W(8O&h6>1?0Oz zWIL0VRGK2vvXQ{3iEJgx_0d;JotorFyet4R;AEXkM|aNvxt}2{kXs5|Fpk=!aBK&!Vl|G*#u95$}H292wg%mT|1Sf0tY z1D0=QMAC)zwY4CMEoVAU^qf5TM`p`!Y^0-5P^**!c+I) zc<1ZkvEgevE#A(f>anL!_E$uNE6c6f3z15G#qE7kyDQn@XP_ImsD% zS)|S#3N0=!=BA0Wt+>Y8&#q^^o@608mW9+Y&2v&XY;)Q0NRrc<$i@UKAlsI+0;DS=PV6Knyw>Kqv8=}|mlB9+S~Wy>L` z8Nr8-%dHX-Sa~T+mO>I~Npjnf@f9V9Ld$HtFu4qoMFL&JFb!GMrPL!yFs73Q;&AHT zsO6FuPQ;^rpDUP3lxabiHi|fvwIclznT)twR?^&=V&98_s<=d}e|YmMi`$J1sy^%- z-XvPMQfx~_rNL|t9pYhCny+rl~2V1M9meB|2f>9*XN)bQH>yInsh0flN;{)SvPcmDF zNB%H-nc0d=th^+iqF5)3T3O7M1}pbwYb2}k%%{O4&?1RNSIWb^ho929Ti_0PvmnVx z`9DD`phOEOKtA_f%W2C|NPeSFy#2I*q|Tv$R1=39NWoEiYzxSL`-_28F|G#kCl-=C zn#q=tq{yw1)J9UfZQ^aXlz5xNhqj3OvE;rM$hWpWDI&Qy5M@iDh9fv~0FdH|;JC7K z1`~PP=c5BnE&q|C;UqPh`EYQB?H((1=7JNjW#!AT{MBQV&*A$ zu#&LoDlt)ojU;Lb-aLDEgdGc?eDKE`XU?R(2I%Bz;jQf!%X`IQaOI=*2M1a1xL~G z-@yql)%a5>B2{Ob)pEU-AfZaCt5Q*!EVD95zAHmRyQs3)SYuV7ChYH0rUuLG$p4HnV@@_PzMIqe=>T_N>E_AgW`@FN!T-~auGkDPA? z+!m5jxOvxN@)0DhM*+!$oorifY*i8U(8Xgi2ja3NsChcKZ5vQH3Xnqww@9&&YF^lL z+XI-ql4Y!c*Kv^Odoo^FkJ7y8O>RhGHc=OC=Q>z|Se15eu+7$3^?^hvz$W;1O5+uA zdve2|+$cG6@#2QTrOC|lEwW==$U&kmqH?O?ez^q(ZU@u2(bF+-H zPn8;R%z)L}66@S%*4NK?KKb(amm?$N>xJ}&mr4njx=L-gT-jUBdRNxhmz(iKQ~rp? zRrV|#9@aoUnMhJXq$4lAu7GSX#5(pSxAu77V63Uy z4s{uE(S+Ga8Y%#ih0nk#vr1IB=EJCw1}CwS!SypfTrvBP=!wi?B7{dSli6xM7*5f@ zPu4rae~fV(+Q}KoAr>zLz1~S???d!G8c`2o6(Kd%{Qnp`8>hDKGr^~u>}B@0%}b|u z7egndof-yG(=!|ajxL_2wS^Kg9@7dX*@E2NT;EPjbYGLvwQnf@L3d7j_*=Pv?}?;eBz+jVO3;dy`QJag$CO!c{c z`_<(OZ=Sn);nZdH21$&8? zJ2@6g`*CMvDBK!qi}`xzVvJ=~<`mC%2P?vB1EdvkJ!pe`A0scD*O^z3G{i!<#z%7V zbIV?vcZe5QGi=q>{E&0`owibXqFY2qzR3%56+Pw> znE@oBOom9nuoXyR8h7H*ifYKMi%M1bnuAQHa;F*+C|xXJGBdQ{p*a4+jNRy)O_6K7 zt?3_#G#MZp*q8_Rwvh}T5wiyq1*wT~dX_~qN<@Qr{Mz8dE5^%(FvCE%J@Iu6e@CV| zVUpBOJFa0;vNthZH{L39i86cG(AvgE`!15;abF9UM{oc_F$TcM0@Iu@62WZC1{E4B zXoKw9f2{S`b9@UL_aFOJ(R0rgo#I5z1#H&U-;-2kA+BB`87E0iLGC)VXiyjmxP&*| zWPp~F4eZP<%g!k;&4f}Gr%UD6y>lbS!5X6ukx)?>XOEA^ znogd?OtVL~qvPZ|q)JX+{Nt&8@10`GheFREfB(mS`y=ztvX^q4r)gclh8hA*IWe+u zX#|HLlJKW;R%cn3&VI4BK%=jbX_h4#IU1vA<3wyYjs@Pa7j@qt!f5qU_Cjrr)b3&)9y8&Wwr%nZ{zN*g&RzPVvLA}d|bNVyU3B^LKq z6=&fDF*8(}T~JfFdzT~J)G5d*E^DR-KkVgIMoA{5D27yr6v)0fzt#?s7toOokve8z zfxKUkZGa>~RTuIpIZNyo4qf336J#48owA|!H&_jcZscKsn*+tldj!HEQxT*v!f%oN883^8x1Lm9YAE`sES%@(UQXfCSheAhyx@i1w#1V z^rFQ>02z-Cj4;$dYMe|YI7%-Ih_(?2M3`PenKEn_7$#q|wm=CyNjoYyhACe&U&5b` za>(ob6Es$nMwTP9d;k69iRV6e?OYM(+fRM)0ZHNuMaP)&d!Jq!GRo(%-q0ztu7s+c z4W0d>mKy@WK=*8McdDDSiVXqJP)k?Gd2)ygsAXTcxoOC!ZC`BPA$N)Of8p290OSLB zL}2#tw+{YXB5hodxXk=Ay44?wHS~@SRu86U$5y=a={j#8oxc*w5jsyV;ik&xZLz*V zZ;+pFR$ji?!-1S`*0kS54H3wr~M{hpDE35`v3{amW)p#X&;qf}c?dR|#AG!x5 z;5-0G+86kS0+rE_(tGBbZ0kf?AdTV`2!#TL(lyyXb#x>T#A--4u9224$K0O zAB`gIl8csEL``Z>I_tF{;aUdbm($YT=ZXr!hq{JbG7k>V0M?>yl z()NyPv+nVqANM@ZzElFeMRqB=aM|4m*;M16P5hgS;)y^b#XXL^^!ud_yTet`dLeB3i}kt(J}BQC1E_bz%_%f4a5v5)+CS zPY_wZbFAya8+$I(Mfu#xllxD7@WzF6=dSMGf9}G$mT*Iy0a9WjQt+&%kY&E-sbmw~ zlKLaO9f%K3jwV>!pGZ%}*_0D3u4(|1^Zg6q1`+`wzdt$BQh$P?&KjyuF2iq5{F#y0e1U-f7;Ud-eqKdUQ&3D!^{__+K4@CnJK){C4> zDuKZJ$S%Cdoa>wzU>j$G6AaAIO;QfS3Q0muk2A1kT!6&+Zf`tAs11>(h-e0D6iDNM zZ4YW})(0R7vQ3n|Gsrfp?nOU>f%PE;NRZ^|KmXKPZL1^Y?HAHhE)P_s+HD>?O4~-n zk#zmY3~_nnUt_7%3=|sjDw`{s{jyC{d6Z;NN<`EpKsq$?NcPgR%PZ!S8aMWQFoa7* z>6#J@d2rG?p%8{R%mkBu4 zpS##`lC3V>$!1At7ds(J@?Lx6$R61;o|{XeUKZQ6(J?qo{N5HN-qte^R6x#;bO3j> zcW`lXEM3jKuITtwMTLK0sehqkfzRQVefLyXZTE%wzZ7|q89{MTrGDs?zFzFB}NSaPbL~-OD z9cgPeTamOaK&mA*A8AduekOjT&}c2Uqa-EDeuR~Lja^~iAc-D`Kp8z=sxCsw6ZckAp;=|cNebK4|jm$K}2wd3T(>)aT;Y0>F%v4bkB&R7l0Ew_q zK>ipzCb<9A#HuOw#dCAvWC!{2%NH-7y8J=uQODily*4|Kbpf;n1-pj$>*jg^J3^Ug z37-w6Bt3`hFyWx#T<_#!dcJqiJ2*+R61n`U=t9#{+p*9HXPBBev)B$=1j z)HX>EjpY7tQBhnr@r7`kJbsxV^u;+P7xPzOtdnvc2Cfr>+$k0XIZDcirWxG^O&&dp zt~?Q<=6LKRmsnYz%gu%I>|I;b32PxrkG#RIToTY__5PvJST6wpBi7P?!$kznlW?kQ zVXD8sZ*g=q&^tOAm`qJB4*7?IMV*nUR$qLip}8v_ZTB!sK5+WNfnz7%`O}pbDI7jX zLmDgr^6=|F`dgesS@PDDSoQZOLd&tizO^-)LT|3iJ%wAhR6UO9QaFAuSe65i${|2* zLsB`dSw%x4TpO8$>FPu}m7eU4u|w{7X#$h-m`7j=y^D>Sf_^&_^j%0~*645uhF{UF_Ax&e9__s!M-} zufy14&Th2;WJ4%|DaH#Y6-0wxt;3eWH$eit5Ba!r~Url%GbK14q<$w08h z56tNBq?cUeAg9DwB+WosW2=9U#}o2(wH<36IB}$<`VIl`jeWC?Z1(XajF6{y>xqNgy;+)*KSm&%2o>nM+MRq$jopeQIYT{m3P^E zm?j!eB?j>wF+LQ-l5?>*`5;BIo%}f8n*Gl?lZWo)Jx1G(cqx&5VS&_>NzyHjSPv3s z(&?=DkJe&48-(18+^&X1gh|Az$d^S!nj+$lCAeWQ5gt`V0;HYW=FMSJY1AiEN>s_@ z(WD}cdUVV2q9MWaTS&1fp|&vZSVnQC1?3uml}M zHAP))@R7AP%gL~(yGo{T;siy*Lga9&E;WRrr6MuxPx%wgRcsWev8AQ)2!3M8?!w*Q zt=&_yjmKRaGu*;xL1|7wnYTKy!vC*Gzr?iCHZwH^k!wj#pD%wjC-(!XqcDnwtJxW= z_cR4*!(^5*5{Zs6^=Dxvj4v{BqNAFdV8GWdZa(n=Bp@b^>T^bNqzw(IN~-+ z^Y_B-fu-APH*PM@=j=A>u@K=O#Yg=NBrTDs$g%4=#M-lCV-?yw&@HVjgU%X6i~#1x zBVG>Qk;};b{pNPI)9{mFvXw}i7B?F5DNT!mq;P0~bS?H%X4O3w+wIjhQH^RybR-X$ z6dtYN-a@2|Zfg}$5|X-bC8LUHEw^a`GVMQlOm<7#h0XlfY^3^-VzKuNkh~IpDPDUW zAoXAc$`P%2Q!dtsD_K3vZ^q^GC~e~m+%&e+!q<*3*jD8Cgd5s}72UYxfx0TcpL%$r zs!l?qMOY*`Hw^DmxAAvVpsa5W)>jr#yU5?A->K~EZ9LvLOkEA4Z2^36PDWFv8J?b+ z9$2`&yv!Bb+iNk1kM++r%`HUxfry1_!J;s3uBSZ`?eMe1<+S84zjF9NJ|tp%NRBi7 z=Ym5-qwnZqNwqAkkdof8s1CNl1Uc8Ad!36|^>iDFoE;Pj2;;iQhHivx-M|*;7 zi5d#}eS^cEI*N~pA$Y7x#YYFzZ20S*pOi(~+Ggn;N^mhY<*%y4;VLMpDZ%Mdxu*-a zTDToR7Uox`0{mSoqy6Ndx$QbKGR2NPbk!P{Ls4K@?zza^6mDIppA}d^pN}5H;DLB+ zSFpW-6+d{Y#*T+@1pLY03BS&Qi60 zerf}=HM^18l9GHLMvfjW$R;6abK?LxHYPTEwm1(@rQm1*!a0C4&Z49tk_#be#+YRA zGhXClpDbb;7h#g*kMX)p`OwWVJFPwzNKCd?YPMNyHw)>m=@rD?9$5pVhyhZ)Ne4(} zQdJ}xlDLNCkGpUMn{9i4Y-j_L)@bvDK9RX{0vL-$J_4rqaM3(CgmavCBj~+IGnn~P7iwO21l`D zsi1xb>g4C2#L+N{U@<*5Hg%Z zT(@s8^vBkg`eOh|v_Txc;A1UdQ83)@uW$5M`5LMkqqH@iX5;9Ksv%V#0HpYkhhF@j z?>~3U?_-Y;6(M#a#1`;em-K8nJl_8FQ+PySuEipw3G`!OK39uDY&AOv0mSUwoLs8c zd0E*eGsz#h&MJm6v}9R%WohnA?%7)QvCK$1fn2$F1xa`nND`F3umDLLngLQrY^>Ww zP-D~LG;SFnpAsO2KMSP8;}f`$3Z(MrYDgv06b}_hRgf-{$d1ScBz3_BZw`_wjthxA zeve3-k_1WZ{o&nulTMbv1UG`CSZuD4UA^4SrAU~e%$)W0mvxOg<<47SX&9MR3j~W3P|) z%*-6Etv%a=%#>GD=m9HrYcM9_zhkqnY8RUFV}}qOHR(p#0;H%oy-)*>j)u%I*;s5l z-(?yrGEc-~vK7czcvEqS)R^0<$o~P4YPC%=5-*Zo3pf3vNN#r}O>tY>(JYV-j)qA? zBtbSmQJf}{LsL#ig`^;5vGYm-BEfMK9XT<&I4Pox4svyB2&s-yFZ2=B_&CPGYAA}^ z$$|dr#8BTH1F}IX%XsTmv)3!@s!)e@TrJjs8%lJA`$ z6SzDwpjK0el;z>HZZE*ba=)(Op)0d3+{JD6;1H!F3fi3~I#7|*d#5$1xj&KS7v#64 zZT$7|y%%vGgDq{eR}_(MBFzJg49Un7Jc_JQVX2d%VD4`pd*bth*N=A<^=vKw1R}!-!zO!|d33=v7DrNuwxDMv`~iB>7|BBpIniM8wsQ zx|e+Cz7^MK>xeAkJR$mjo%g@CwNGhzXF~1GQ+~o_iFqY0PMsjd+ES2QFO%t%c{5sYqLAom z@PuQ@kk`k;i3Mi-r>`8hCL1Ilq#@s;CvtBmOVc@iO{re|M>rJGXYnBUZ!Qm}uY+TL z&SOtK{POSq@!_ZURA{P^lcwlKY3kFjvJ3h56^zXz>A*_e^_+Y~k%Nt3DT12JD`%xm zad}0(Y@Czxuv0a)V#sJ(WE2NX^P@|9N= zN1kkGBTTv(azuDUe*8_xZWCxzv$27V*zBD{vKnif7tdL38c28AvJQDT>d_xCV z$HU#iJaM0La|;UOUQ+QYE#0)atZH6(4E-^?ipIE)i>LyUN~Wq%=VKWtHF0Cia(*OYv`$ieaYG`R~ETR>goK#WA0$o2-Y1kSJVE>2S>2TJ`K|4Q-EErBDBdSO4&>Z@v1Z$ExbO=jXfipE<^- zBFt{)qxMT?(T|dKV0l4hE`}N)&+-A+ljl5ShD#&mv^C40S`5h0*M+N2@z5y99Z4Sr zQfw}iWdaF~yn!QPLmK7V9kDeJ#gVs%!10w=703T2Tnde@Cu!uzYO+DnwCf^nTw^Wv z;~Ak1FzN#_)omUiiFVwQ0dfk5EcQ9|h5#8nK%+SAkeU<6yXJ}#LH7D0RX+^3s7PL) zNw1c;y(x%HgjwRA=;EeAdvg$}LYmtdb(Ooq`}XAJW}nR_fW))Ma1l^LBtoN$WQEZW z+uTQi5xZAgQ&X!<@?KjAiIR<+nW;TnyG>aZ=G3JZZ_X(uq{yd*$Z0-Brlx38lk*F- zUxwO8sI`Y0x=0ChT)NcOI{oo+Ha9Df+SYS_ARQucBCniTKsh$}B8+LMy;dH1D3D7d z(WSnznwr&Bx*Yd?>383tYwcg2eLBbwbUHm>ry`%~SH(5_zow5k(R)*Tp+KD+#}kt+ zSPGjne1X11PqME8AZ3>g6E;@?(zV#AG9}WWXrMG}R8&L$rI|Q18qxx(b!-%*1=7`! z?tB$YKJ?0~7;PRf36iQKVbZEdd`Lv9+9uNGp+jFVY0imQ4JjFNYqMo-A5RXF@~$Eu z%|AiAA<>YhxOvdrd<3StWl2C<_mv8L94sc7aXwJ6(Kdj2_E9;=;zx#k@W)oDvikb6 zJs$2B9(ki>|Nam5<;~>voQ12iToA4;EXmF)W&nkT)$6pnh|<7xW3abX)yS7PS-V;* zqAagH`q)d4UF$i!d%H$0xt?B}xUtN}b4mPsx^x~QX)hC*X44bP#j&!X_(&|&5NWKS zLA{M-`5oizwtvPDi9Dd=N8;?)xi3Ond`AQ2PKmBXL5g}bVGXN(l9lk7bG@>x`_v=< z@D~5uA3Xl3Kb>A#+1v!n`R;Cj+)Qt7LgXqyt`^r#j?N_~=5E|v8Oy?ipc+L@q98%D z7CL*_XCy=>#Ay%k3SYKBTAQt*fX(_?ll|0}ERc$$;Zc&1y5?^ykl%JSq^Z`3hLktu z5pjvs*v5^u9WT-j*{DFIQIPWC@yB6Ng?yv~q{P|6p=+}Zkn$|{+5q_-HQ5Xy>6&kk zm%cNHNCIq-w8!p=WYC!484$BAp^ujsFu|ID#;VG!yu4y|LLI2zSDM?Ci`D6YM29Hc zq}m!XZTZZU;6KjRsgUx4$F0e4+WXNB{Hdc15Q>~V%TrA)a_!mYAASDO$FA`=ZL2NT zT%QlDPplo95G+FpF(;o3$4x{`pRMJM4}-d2;}iU zJ;yrphFHf?0%;W_Jod-B>2SPG)E4ya|Mu7anZNFtm!H~ngxD}G;(X zsKw-Ha+z|^CpQEBs^aV(nCv-<@b8n?3nX(vvW&Qf+5{65J^^woktXG%NUGQPhGKd<@_5gkRHl3&QzD&JXH92##Y}PU9Sd5vXIp(6uDSI74!?e!RGqPEbMZw zi2R`It9lf7NX(G@ydPCH30?WPllb{~Rtls>EH0DU+RxohMo>r#M^jJR3h*<$VIwM zx@uXChSW%aH&rjjWIqp(+cczgA-4gkf0r(7wB0@cX$35eyiB+ak~aCXZN^6TqPa|h zqY?8-29e-sfy7vg7ip_C3MAc-+z6&aw>jkjMr0BRsL))&J0^RP_GtCS~4lgR6w!M-sU>zA&ZY01QVjEg5gs;(SgSn6mB zb)6XUgk@vK3D!WrfBraEvaQAD?fyJEx$&=@dFN7RL)$>K6ML;Vek>1!Y|~sMQJ2LH zow{xs$Tv1vy87(za3cTp3xN$qQlE@$pdz~q6v*z$7)O(C-MB%pxR|c%t|~9i$}WIO zG1YjdNceRa%F{F7%(CM@gCE};PO$*EX7rRxj4S3lArGaa6~l0GPJcvlzD}M4P zhWqxJfc9dSgqGPOE6PBHlN0$*-GC<2MR8}VfA+Qo8# zU}AK6`Nl1k33|^H!KythL&V)7;Fgz=7q2I;j0s{tv&h8RE$7Z@e;uxoWZ%MkA7i{GtMxnbk!2kO5?-jx=3eus(#^-LW}hhaLfI7gcULCw@Ssu31J^5YNj_!c;f*x7a> zSXI&07V2W9Uel$ipC7kC-j7GVwi@!#3wyc#IzWq=;|kp4ku<#UxSGX3NqD?_2Z?;) zFB|NQ5TKX16Qi9P4xEmj~?iR$HBw?6vl_D3IKw{g*jWjzSH1YiW0z_sjX*QfCNbtrOP8g z{tyNE3R;qP6=2Ln(oB9?B)95FB~sqelf3OD63HNvOr+Z#qIq#TD~yKJpoXSJM0`j^ zQW&gW2T1uOup+;)$j}Gv5lnE)L0x#vCn_cuM$`*J%;yL!LZd$M6}dXxEkaLx0=>su zmMf_rzDHTwM$Lna5Z~Y`J_@;IW#y&Uke8l*^dF^q@`ooR5Un*t8Y~H1XVc#5IZ08| zw5xVonG_&dH^mnGNLNdDkQ+En3(;wAm~hXE6KHnUOO~E{=#A?77|{ zc;xz73Lfv=Q6M)OAARc4Cmwwh9N}?Yh}<+t>QkANyR(ABf#ljp04YQ+Puxt#dIR|G zM3e{i<*DJu;mNHe(8j9=NQfjAsbgO5qH(d;j(TxTHbj}cxQ%HHi#EvKp&{jew@pJr zBuJ{fB0TbzVYIipkr~apK#7VJyA6>$%{D|jDM{Wfj}W;%>vMs%9RS(PH3Y=V1EUR* zB9mkz0aFUnaD;d<+C2Q-6k?RfEC~(^q0r4`8ze<*Iw10yqazDTvWlr_YZhr(LZ{}c zENS&AEXcyGRKc8UB3a;+FT3may?bp2AiwnNF9GsfkIqQcRJemknqAkaY>ST6Od)T= zq+a6+MMs#fXb(2ZKB17W>B^NC08)swIBrMMYDmTyxFm9>bKEi4)?hDJd#hxZ3c)bC z4;Vkcd-v|f=3_IpwKGRH?%ow7x65!vjTEzSc1G9Gkg6irZXmHyR_6TafqJG2(op+%K~XsqzSS)lD)%Z>&=+$8qz$BWcrcrppDC< z-9(OtR1E+1}Dbm@aCJR7&_$8VAl{Lrr9gSEr_(C4P?%n z(IiQYdnCY436cPbf;1Qklu)S#+@vtzQ3NitF~-G`gTxDvQe>o;@?tKjVkz%-EAE?6 zPu@;*%JM*(Uwii&KIGG1dj5BG%s%t%HStvqkydDWg~$o6y^d>U26W_U8a$_&w&ijr z$Hf}kSd+zg|k!uRTYwEl!#jWNKuZ&)hlSs zv_!`=YbR2&Z$*M14}&gcxuPG9W<>502{tB!F+(kku0V7N!4QUcrTQji$o}P|FIB;~ zsMC*Sa&;gGk9-t3<(K^Rzn$rsdH3lrKKrlWarm#_?NK6)A8F^ES98V!f!Nvzdveu( zL@?YyG~T(ibm=s07VYhANluX^IodgX+-S&qxpDK@8D-P(^WvY_PQdP6{=!2Jk;jRb zMi$3bSK+aFQ&9Wd;qmjk8~%6C?&=8wq;(?U(a1)X0n%H2;}ZoEK}qTY-ReL>%3%Ir zMFBxzZfS+OkYcb}y6DoC`4=}&qbkx41dtcEg_^(ETFG{SWG^2<&AsN_EtPSYG(1|9 z4Uar{H{ud04`AsoW72BKuM3b$cU^@nD_wu+$f4pH-a*kgjUftT>daz0NBo zqRA#;EUgHl@d8Bai#Kn4@`;!!+1BZ=$l*JbGcV+sXw;8lbUrgczK54T^IPsY{Oren z_jiA}XV1R8911#8Q#6@%x0QTWVDDQ4NGvMc2sxm0hP&!b4Q*{woCBoH>1;Hl5vd#ks%Cu@NL$Ia zq9fTmfpk-lyjdVY(WNpINd{!4l4z~ACDI~kfkbR*^JOdBjkeaDGz}?1_61zXBk#S2 zhGe3jVwIX~C(>S&B8~DWDajS)v?d1|M%ix2Qo|HsavAzj$34vx6k<>DfAGtXlE5g~ z_ZlvG1uJ=*y4L^Vtkf}kVSf}r2|JfM(ndh3q@`pgjyHE{5T zdV3YAN{9qWw{Oy|Bj$|Fv%PuAaU!1tN!Y=QWEiaJL{qe=kzIX}Hg;jLvJ@V7BqHx` zvjI{T0+wU)c8oePPd`>QR@zm|HmQn&fU%Ovv~jskDDmUbq7d(OMZ8w zu5edPNltKRxc7!@u+@uPPR7KEtd?FXZ+96gk|?`MJ6#(6h~|A1NHy5jWSgMI#x#$Z zRi&0kROI$TjRg{r@2??UPtqjFt<6>-tU?I*rb(KT4x`sZ#2g z^s>^dY-);BdeD*o$mnpzO?U)IqauU3m8u~X$UE`}K2wv}3 z(TfXt`%{G1Vof^Ec{xVuG-b#)T~$%qBWa&KZcyX#um@i+DUtcH`$`o^tsoMhI%#pc zJJ%R&Yq2emRzq5gZGFgpfJMt>MyO5wP#e;04KdS^+@c}Xhcr4eGxfv6I+0&>fpk~# z36R7zuW_>@Ay>PU$rVA;5hwE_GB5Fnw)qUn8e$K%!^*s)62=%HcdHAD!$_x3ISEQB zG)TshjH0)=5_k(3b=7P zdGp2%0rEDYCYwQ^(Q1)lhT`hWvj_q?&FkmIX3tXd5rF&);RtYSW?We$M%8G*90b_` zBu@_p^5GpOd%G9;iZ$6V>GVh1mCrWy1CScqD3d14M&uaXHk*Bq$P6I)uVb+R^2mGW z$Ce?MrYsJtI)q54P=mmxWMSyomBxFWaFE_f;juW^sTQhGTX0%ddP?^M$+3G=V{}a7 zr-NdmIySnv*w?>&i*Y@^4IeGt=Iz#6Y;dT%IGdL8O;L{`Ml+5$nHV9kGcYpV2 zRT>~Q(YKMVlOKhwtQ;Y-Fq6od{INi6Es*RQfB*Ej#7O|DlrKfo*8$SuF=_0z2zD7qaei#$a}(4UAV1@e zAfIop0%UeYRf-_{1}f6X((>F5cykT%FVnBieUNC(yd$l)kCSWg2KXV|2hb&s9okE zv8$-ayM(Q^-_5N;=LnE@KoXNyQ6Upl*)>XJM$dUpqB?nAa)yL8FsWs2ntoUT-XHd~ zaQ1lM%!z+G2#^^>B8J0Eqpd(b^ZFTXdbvOny^jx!;z8DF{rb+Ffz9g3yPIQwHb5$| zhDYSieE#m5k}PTvChKE#s8VWUyEnNi9KA-O68iql&*+kg@Dc&Rg5+Y+ZX|IeWA_u7ZQP-O}YMON<6`ozb zFE6`vUwKYWSyhSw8-BQ%cpcUCE6FuL97wX3vmYPcD2BDUxWB$Qzp$iAaEwN=*^Y`- z-GkNE#7VGcS6*-f6vZH-ayHYNk*Ce503b7o+$B_tDk|@j5`z$F*`_>=$;J>;+YQ08@ zbas)*liEA?WRd~W-Nkn=rV$`_caw(=rYesw^0rN+24!9UR+X`6}WR} zF8bMLXvGLjibRZtL`9a?miafd4g!$K2G>EQyS*%@WV?zi%KPi)A*3@AAg1o;#+}qbfdvC(`M5;d1$<&gL6xAZ|O-Q_o;#Y#W7wH;_VX*_akoj4Anp+wsJ`w$>MDj9l8Le-0ltknrKw_InhgFs$ zdcrCwKYst0t+R1%yFL?qIut0}UD|B3v#q?xXfm_*$e=W_Vl1OZzJ)Tl5vp+`d^011!v z8q&<@SRPGK1Ccx}kUTslTg0f zTSi0$$|6mG)IuRTk^~Tuho*$SW zl7<1s6uF$XSgCN>@5X(Ec~up0ooFgZ7EyG8qGQ$|5)4&vA>om~Rg!ms#P2kbXEMxx zK#8VOHEF6O*7j=1)|=^ycI!&@P?e-sv>7&>7;l>#p>BBjH@~4D(go54H9WUWHcvjg zr9%bs)f1P=i|>4%PD=iTS69n7#bE!DpAbhiB8Eq$Q4IFCf8@6fkBaP9_x>OjJK!TN zj)DY8qap9CPLuEf$Vvqmv-3RT0%SDoTp@@c8SZfcr0J?vAQ4>;i5Lxu#eT%}`gnju z6v#(iAiXh-5vw5;Nh>x%?(rhEF|zTJjct&$$sgPGW5udSB~nE)<1A1%y^uv@4dB+w zNzMCc*Q1%{q``_B0<^~YW8@Wsoh|-=K|%9A?6Y~1g$@3e&P=|IwT%7T|2WRI*iveuMc`mQ28iW3p!#D-iigyKm&nRY%FVIuh9wAo=^PZPYN=^7xt$tqjx4 zh2>^tQ&YRwiR{@}s?O?|Hia6Lq&A@u*Ua?~vAl6)lpOczpTBH0Bw}-sNTbPCoBjCm zZyX=;5Qw88FHbMs#A5TU0i@Dsm~_=6JR%CD8f^5V{BHIp7CYb%XG*i0j5P{Ua*z`f zRBE)rB1to9IUSC6baFF@pKpYHRDCXxLXoX!3zG_@uJy6o#p^X>eUNPxBt$l3eJqe@ zNPTz{k}i%syw#dNuOn4FaW>LeuyKJDT~B8G1Art6sd;X36W7#NR8ze~Ln6UU4Kx7~ z?U;+tkL2krj7lD`$Ee5M?Zh>7`|xOOp}W>c8{a^jb(1U)C}pQuHOrH?o59)n)tMXM zsDU;>@>yzTi`5Kw;UeQ-At(|_{}>|0KJ(W~Z2Hab9S_pgkxou>O|}ilvH{QTAAfF$ znIFj@^M54T(+4_>SjdFT^X-!Bs)9U9&#S;)JE zm6f$`08+mzXmhDFK*FK{Qd`p0VDr1T*EV`&-Yr~SC&E^fElCIQT+omRlZY&yp|NiX zpU6lU;kAzq*AKctO0StA5)EmA{F%82Vu8H$*d^CutA=a@(&|X7At927Mbi3_)@EBI z8;rJ5k@5h@2D5F&T5Z*i`rm;QNnV`67=YxR07!6DQQuJ~1lbx;L{~CuoaD$iU0sVb6k$JefGLL@&lzJPZb3pz41KXY{%@PJWE+9H>6 zB3ZOCHuJ7D@NziGY4@p%v+dprgJm6%!lRYOrNh9Y}U5P17zKS8n4M#9F2y2#0#X=k&QrlT*_wRqEq5*&#W@p~WL7 zW$tF!xR64d1=6^YmPSkD4s1RqTY+Tsd$za%kcyn~Az@B| zoGUIQ3ewe(9v5;8$nRJnA81Vbs0fStVsLEKk!Z+970JUj+Md`39P3mhFSeF#bK}~e zE0x0-JYpGe7>hcRjYtEU&Ke+VTBnf-1Hu_DE3wtFxyb|*5Q+B~Xo5%w&aTy5i&_5f6|=HVs5-_Q$Q+ko$3((QII2s8r|CinC8puN)qW1;r|a z5Ta@DlLoY`32RoIZCquzqz7`K$k-8;tXQOliXS4oIq7ncluw|C!5E((lav|A<3Q4+ z-9Mj8C%dP#k42Wl(#^6cXI(Vk!NXK?SG(s^!KOg#z>T|@w(&15l8*J`#RKHH20sGi zA8WW3tsa|=1kxAR$LD0~5Cy5K7>YPwJx8PN&>X)g8qxw;pZSqjub5iRfln?U;9rD> zB&Ru+*zg0SdXZ9_ae3rbiBuX9{mJ3?M1KEG2sejTWEmtkosi2!G*?jFY)G%nS7>DKBC0cP5rBk9I;*JEh=$ziL908RtutDtIoHn903#2POHLBf4YFMxMJYBU#^HL~ z7LJxlC$912BJEcE#yd8iqK#A8ZpcSkAZ^2vY(9ICb6I`xs5tr&sX&xSkHe$5kz%yV zv_>S?ib>W`rKA&*aj>wjwMQarHQ6r)Xx?KbXP`L}8-UhuI5RnVawr)u@xQB8G1nj| ziy`GM2;t;7dyt*K50R??nWTk>@ut_7?*b$y&=Tp0K&eI>qd4=WoAMJ_Ym)l;llJi* z{tH%V)WusAhQwk6-7_0|)4bG>sMKMuI+H z`Wplw5tO95kV+mvis-9o&vX2;{G9zRLDCebX6gEEa*%gLz!8~S;Dkg{j^Zuq0(=1w zgB^{^cx^)ZA$ij?v143gFkAVACPmR*GKFX_WTOk|m~5jU8w-b4Kzd6<{)0u*8)~bL zw5jpBNo~)uFK>S&338i{tk;kbX?r1cfn1e1+mc zi9s4B;~2+|#eyB0^wAj_>G*CUMIK^GE;dr=WuNZAz~I=-!gPPOM9T&xY#EBjERoxw zO}sKPu^`)cmXZ4^cV@G-bU4`8(s^R}?pN2YeK}5SaB@pUYF5wi2&>R&QY`!yMtjBA ziaYDsciI$5a^aK1h!SKY!)mfQpgh!j^!z8o!vJYDq_!twm z^eeY-EG1bbr!_-ZM6Swhn=NIaM6JA3JSPW8~8rWPWt#a1BM3~AHiml`)i+L%V! zQ^jbBY|xMmZlv)d?V3Jt^bBe@rhindj)X>!j&wzgwll);!T)^&9})?#Ake5?X1Xj> z#<}n!wdYJWj%PidFg~|M++#?=f4y;`5C!nd6N<`YL z6vw!92yA>@xk`_P7%Wq&AiTVoOmy^p)OTuGj$(bOK=Sy5G1dAiKtiPXYsU<#ie!UW zyYQ$@N2Y$*oTwf-K><ujozcP0x23SUQp?hyY!xK6)ERzi zS)|0lnv2>a0Di>?!hLPt)}|1-k1}php8)wNxp8=OdMOl10a9^tV;Xq0treFfra?_M zSZoXA1EzAQ8nYp&;bEDyHrwMz+Q7yF*)Y^#%G!YFwc0j2uElHtlG0%xE@V`q8h{MJ zpJaaIBBTOIlvCm>8h%I$v8p1T;7=2~P#_Tj1wj&P#5Ov)^idrd96UZakdqPbTrtPJ zhQ%sN$w~UmP8X^KHMnv!3o=42KIF1Gl61Rp!5|$x+wsxa-^z-+EAXg5f}|Or0!DNZ z;%Fi*4Qmr@aivL473tuYDINU{yCIGj!2YrWq%K2akm1ycz2{$kd3eW80TLE%9@2K7 zSsYy_Qn=;D-0Abn3M4h3Oy7qOJlq*6f0K1XF2WiW*N=2W=|oN*?_ys<6ZX0r95pAt ztU{G$x`1LVX|G?Zn3I{NBtOl$1T7~RA9+_JiA*LK6d+YWq8$YwMbeFF;Hb`pG#c_T zrybJna<+9t1LQ+Oq*ah!4GD`pdGXY=5!v``t~6L2#fxmrMp`1hZlt&KM?Tz@e3WN1Hv-jkGNl)9m$Aqlb7SYop=FS@*#rqcXmp}(yf zXEBYg%FeQQw>sZFje4AxRtwH*=vLADl8sa%vD%;BA|08`bakR5<;<^1kYo1TX%)Av zM*TH4i^?O(@wA^P`<;(;fq+?DMYb<7$vQ`LB!wDHj7wAG|2e_&_8rLM3ZyIE#&N`J zvsI5izkHfhq)yWu9gGH_{fnRM??|vr3Ls7L2ertH$B$G>=N3*JKT8KV{$p~Jcm^>c zw(RL2pO+>AJq4Lf@&kVnTf|^QJmKRVmO7&(BXRM&y815dF+&UrpnP(Hv{@f_Go+eq z8`J2$Bsa#k8q$U}`VS_`HavO*8$+Znv#<)%bVjOpY_=_HTbqrJv^;tSztnnbsLhbq zhp!*bM94w%0dY$Js2esVq*-&y*lT*Qn2Ck3^X4d!QaLmiS$H9#!N`0UgJL8pi>cmT zj_ZnklnWrVgVF6HXC>u|U$w#_I*!W$q{cL;3CC*RV#f{3L|Q%yzIvYP2E+j-HgLxS z#9+^e3cBm)AQYrSWYNdXrH@&-0+CyX4mP4Gt|b%BYkHjWGqU%@xy#GLJ9h1IfmHqI zA+ixiRgpYD(LVIgWZW?44?g|eUw`+_=$aB~fRw=6btWAo`GlPO*Ec%(=34zL<#qI< z;wZ|I=hYjd*>Xbeconkb!o^(ALnI~IfgpX$ys?4iP&k;trRwbLyYw(XIxsmw@4z36q}X;vSRTP|3C?`@dV0?IBWRYyY^3YrHBF@utUBG#81@=23^E!=w$l z>Gpa0S$xQZ`j7~z?p%pWeAORm#V@I^XVU!_iwd zfs2#nbBHtw=&oxOG34-w6S@1xA8kJ8%= zE09noqTE^j8i?d++Qy|iE(=r^`irf>|M%SYG1}oYk+xQBOr}RH_Lk9B^L^#qvu9-m zTnm4edCNOa0#?2!fpVcR-9zHasE(5DFv{F6@5H=37f$>#|X)d29R+>XW z?%cTpAe{^(k9ztPP=l!TA>DF~Kuy?wWp#cj(E02?KKK2nk9FwUGbcwXd3#~dCV%)& zub%$L*E`s35NJ-6y0tu`wE%cj<3DpGTaleIf*=V;_R1lpGEKP@b3*}a53Lx{NHEgX z+1a(7j!1w)0LofyPu9n&(^w$wftm&&MZ5~K5lEXKZ*0{yk#^&1727@T9gBU==6zUW zsvm!$E1#7}qaq*BpvD0*givY0i&hqu$h7K5$!be=m7T>Rkq}*oyjd7*HP^t|-rR{9 z_l0Bmk)b2~lks>yA5YO*3cfihHRxrqYNb+GXWwDGTqyAS`QF(p%R-|OvOlYf*=(*8 zA`c&hB7jsS$%k4&U;n!g5BmKK)|m39 z3KY6EMA}H+{h!YqeEXgDRx01uH*aC8O*^QnM|ACx5ZjTb1LbeA;VbH4|Z64Aqo+dOEcihYD zdFI0oAlj0)r4e~f1quy}X4$hn_3mg$ntk55lnF}h5EiMnu$bN_jiKzqQ$3lMR&he^ zWO~KN4=a+e8d7)C?J#`oj5ANv^_ zpU(iKb5)5AV?BP~N^(6rGk1jm8zNrcEAnm#UYq3>BYLJbBM8MG%+nnnK z@*y4%>85)=*PHA{1!**-nXj?Sr{uD>iZ`zD^2kFqBwH*jjS8ft(O7JNeB`}Leef6w z(^JNoHv}a8sw~M#A`;@@)6m4=TZw4?T#{s3uG73YEvK~QMkCw-iKjSFmZrefl2 zGMK2Xy*ZLc#WGULlHm}YP#G$WO^lC^^0GQUV}JxnroV1qEX5O@(dL$8ub$pQ(#BKa(=!@^{f8@z0AKriP47*KVR2NbY_lJ_TtepB{u`WrU(=;)hAC{127eFd? z`eKx$7f5TmdAM=UAzg-gb-K7gez1uJSZ{WA@KekkBo<}K#$45u2Qa=z2{&NcA3bcsGnU9nZ(Yp=PSFytimb z$wD4O#Q~&8KfHVsqS z0BK`v6s3E@#y#+Efcz^3vWuI0+T+-xB0rW0Dh8X4=!F%ZKSUz3n8wXalxc~iT!(%X z+sK<1Vk(s~cAiqrWGWZq-c2SF4XyB}LpL>zM97YdgeOX{UIx^Ge)cr5iM}v2J|}l9 zKT#f~wtEY8!J)sXzp3-R6Q{4@Ga@GW2%b*bSyDbOk4vpDp846651}Cso_U*+x|6UM zFH-hcOfcmrrj|W@JTC9pvFmXIq=O)wSt5}-BKfdHs?apV9*m>u4SZ(yrZ@TIOxH$_ zUq?KIO1Znhz72|h6tvj)!mwLeH*4J^+k*osK^$?q__cD>crY5x=Gc_2`w;w`QsT(U!TrY+NNtI11X4$`e`M#otb#O4RGe0yKLOI*CFVt# z)L&DR-RMJFFOsKS&*v>5dctgrqfwBEYDj$%*}Cn%#p5q9*$=*Pw#&(M!=ql+4FvRX zq)#vY6nUq$;Y2PMN|`3Qgc}(qOGbw{cAG%36$8eYbTgG#6eu=56HyK8gWxoIq$1Xu zzavqQ6}o;Tq~y}u$RPG=AXlB9(VHHw+`WM(xn7pZ>*kKvUtPGPKnjstqGb@pQ4DtL z?vMWccf?}9*&;Vr*%B=^O?ud|+UYf>CIFHS9XTX?{=nm~`1mfPAXVy#?OUSFtDF?**JN1llKj|N5OmAOOub6>v{l$Gnc znFQetkZs@4i0DK^8J=|AZ6ZzLhns2G_f`$Eb(KkbYrr3jK&0%f=Q;?vp#%v_$!#ui z+FFwsqGK^_NjXx^WMg5hLRvFXOr=0`W?{U)ZGs&3ee@&^f^1p2)y*1noQS55!)?>E z&}e|*a7X5_L*A%$mhj@bnAxb zN5#_6*r*|4(FQfTx>W4#SS}RF_}be!lK_gmM?7k4&S41!(l7N_8Q9c5GsKCl&0O16 zN|-0!AB+(q2D^fZ3{8Eqc_GdmQw{xC<8zUA0oqPEjM3RFO@91GHMex_r<84hY}Amr zkObM1^syJ^8fPoLhnr&5>0O_q}+w8bgt??}A^Bh%z$VMIME+1DS9UeKX zWDT}^9u^!8kl1W4^}9gg6^aiTHXD`^X{eX+8ZeDIZOoCDfRlujSi2o<8W|8&6Eyk; z`N$;59Z3x~v68E<3(jOU)tw|GNe;NIJ1E)4QXQHQ{W#uVn3$O% z&TG;K1u5d9X9YgJI4Y&qi3G@D4DL`dF+kWwv=P;yPdBSx{}$o1Gd(Pq0`MD=dj?18 zr9l15wfBV+y|lA*bJfq z-J2XM<>^@K`;KTU#f>Z1jt))Aa{DN4rE%(6{l^E2q9lu=XG^#?+LB90z+`?P7W4&# zN0c#sq@;be0i^I`8+7Yk$Opw@J3t}|rOEji1zA_gHaP0TiUXvfk318+FZ7$X5T3zG^}(3C(MM2jWaFG)_aoCtw& zvNAS1&N|WYg)7SACr(9Cw#qU9)~#dVH=$B8(8RHN_C*&zgCOT*X~Dj^2JM)55r_oD zK#0nbj74sg*Ed&JuPjS)Nr2q({8IqAOMyI82c)6U{(>#hSRh%c^860DP16<+1;}$@ zY}1kz`}T`(KZi$Gh^LiAHdDBRTq-30SxzyPP33YV89O^Ox!g!E6|GoCmjO_;rAi|U zIM=)B*<;1RAdw*!8H1!1y z`R9zbMe61X#J(t8 z$Ek>~gqBDVRi?7(&`NH8Y`VX9B+pqR)FdeC3(mhum0w_der-vRBvQaP<14=8!KW27 z6p5}Rz7LST_oi6JK&UBB6ibLZ-rW8}G-RC*X%(beY|TPi4e15) z;fIaI_VQ>%tiF|PMmGYbrPA_f!kYRm&$e;g#x>r-8ss_EkZP^bkZx3CYuM(n$#>L; zq&U)~^}lA`07SkdO)gr}Cl(Xc7GW2ACL!GYeRoVbQbr%h54c4h|b-i2&! z?c(*DY2+r0#Dz#{A!a;Md^fg4qoR04S&7jOhdACAXhm=@cCU1^AXR{zQy}R)14t#2 zry;VzdfRYD!ycDdW%&7jJ3ZH1_Ty&zitF9i*J{}5&jFIW&OM%6A}m_ns5oZhm}A_G z73vGV=HOuOWTKdllkkypLz&uxZuVl03V|QZ(1S&(RY(>KJH)x4GuwZtBU%7ufHWug zEs&;L9I4-%tF32^J1h8K+GE+Epn$4|eCr=Xwy^v&cH3;iZ``bc$wsUX36XZAuDjjY zllJ*1oJhHwZO?r__{OC!c$7)&)@G*!BVIHrZzDj}Mpgx2dnKDgs@p6HFhCM!w~{Z? z1u7Eq5DFz?xmZw!iFr4p_;G=DUC*ftpcCa%IgzVo#d}=w`_Q(vtMlDx~Zl7{PUUsxkT7aT3qjf z1;ZPD4%uQmuT3n>otq=3d3h_QflCV{d|KyGakSe?w`{rc_|MCG7v{?=5>9htF(33x+A@{(PIe6$T9IC~(F^vc$>WAs{(Su2LdO>+q5u`!V5oJ<*NU_+4Ngf^? zc{Xm76n zQF0N9vO&=4g>VYc~#Y-YfS~o+hmuC6fWG(!s4b7NKQpXjO7>i zz7^2Ne_-&(Ev!shMS#iI)gr_aB%bLYN&LL{l5Eg)@dZQV!rrA{0o zc`lES&8Ih(&~=O+;VVF+0Qm(#+VJJRRgSWlVv1`kL~_K^7qjf}DJ62jSRP-JAKk-e zJ0dYL*+gYE&9Tjs8O!z)>_kH1M^T#R#xn|%m`1vN8hl6-V>@TEaUoS;5g1i|;3~); zDUilsI~yjINLK(-#MO}Ua1FN=t0C*p*GNqpAZ@5^`XRlENW}3VU4w16`?xn49%3Kg z>k6a>+1j;(jzok`!W#A>@z%rR28)>`3JFJB&58i2)5r-|@+^^jK9-3x0UI2M%iMN6 zj~5vMU*e!pF)rU1RgA>Tbw%H2$}g9mN>`P%27e~#5Q8dB7v0gaQopKDCE zd}t=pQ>lSS6+P(g+%}P=_lz)LvR`Qz2q|<3ku>s1p9%OSaC@Xa!}$wYnTxQh%()O_ zgdnKh7YQbE2_I$G!;>S&8FC2bGT{(Hst6>tiIRAO^cqBF3#p|@ZoV*)t;*k2cZF7I z$yMfv!^63;(E@i}8PB@!CV@~lAgRfqd+Mk0ydxkYP>KqLNA%sqJacgWW8agsk0A9^Ts_013nbyQSZo8NM@5o@REzzf%cJczH&Tx! zK)&@BI?`y#w|L5j)sO~Aj~|JOY;3Y{ZMF?-B(gF058YZe55uJC7{>vTQVm2(AsYoL z&ZM}Jh@&IJL<%e9Zs1WT9hmVmJI|a>SpGcH8p_0iIFclCQf&W8#0T>-%2_0;S&FXE zWDzB^o=$|z)m$Vcy}pq&&Qe@w8oOs1|5}t3TsGTZEz%1_qI`UIe8I8Xj$4NQ0ZYCl z%#nu3J3O4c3WQ>|MNdi4Ta)C^#%@2=qyUwqv>b}X*3YoD{-vjOKK0a7`vgcn1W6ld z!(n6Z8Bd$^Q6eSKe*XOXvCxJ;xp{rfW_#e#*ld`ziO1RQscO1ZD5VlhIc7STNTN*G z;R{E?#q~wTikA{e8KkLd zkk9DmTrZG~3ev>b7RUy(t)eCy68Qv)^5RvIo>pDNgCt@zKPvU@6-G43-eM9c&9oOx z3X#u#C|+dqEA1iyQjE^Lwf5pcq|X`qqP~jJjhY;!Ns9LJB zH-WDac;8?Fv?xkw^8{- z7H2C(ZRLyPpfN1>mr3;u(i>VU7p5wU7uXL_)-{J@Y*}B}UFglWadAvi<6X^x00+Z4 zhJWVG?UMHqH3yJZMS3*kqZ(wpVu&;BSfQc=w5jaabfK+(beui)1UHno#cJ!r3Sc69QXUcU8 zA)*`h`~c+Y$-Tcmun!(zPz{OfutZw_(N&6;$@=I9AXRn^|F1U=o{gotHys*p^8t?# zX}>*=@XXTGT*FE3P315aVkvl!h^Og54wA2pQ!SiWox)+^JFYT$Ep1R`-WZCjLq|`Z zJUY}i8SnDZ4%yiPksrT#P-=$&2~Arrrch?^_+;-$Y5>P)aBvWd9nLVvi9Y031D_;1 zj|}!!rD1ZQNP&VCKPW}CV?vaqbnlY&VC9#1tKl$HPZ3Oe+tBF3+|fd1f(e|}J6nOP zx@P*>L=YHkVqD=-fz%xN%1W&qA~r*d`$=>%&-2^!j2lAa%TMi7n=MN6d1qaK^&~wu zTX{4{x`{|Pefjghr#Uy)ec=mN43PR`B7Mf39NyeqTrV+exnAbyI9kqD$`RV6*mRVF zOMY^T#S*?V7F(xi)`)Y+$zrm5tJ&!p3QMQne|B&n*x4EE3vvxjh@@1r%~f-5P$QwS z0Ex+VG^ACL4vs(2q`0-%KZRiN7Nsg;#KR*#q~X!nY(AqP-}K#_FT$cyv@5K)oo1Rj|rX>l)Y(NGc+ z>T9<06aV_);OqI+;ek{hNwF&6Z~|SKky{P)V(6m7OneX>%RkccGgcwFQ7uEKZlz2+ z2XKgN$R4G*@sI}9lH4DF**I$^XE55(XBgDaDlUt? z#Uo><-aRn9Yu^hmJ@LZJPYpw)vD&7r&5PjZR&5%Xv?|g#o%??EpPt#@Ro=X?r6Nrl zQj$~>Wl5fDQx=d;k?5}G($v&tcXcA!y-v}K+(m@wI#Oi(l??%l^R)PMSLS(Pb75g* zWC(BN(U7Rf{oi{O%c~~a)o>CQs}G6E{tp6V1Ce{Y3KAeyKPr$$ zys-^HDw4dY7%t(_3P^fSGkEUAA{NN{RHWu2RZWV;u2+*XcBqY!QnGpanfC~5e7c3y z0{OS9Af@0DqU(4#7lKsP7vH0P`hq2jmGm)GH5Q3kkF0~37 zio~k}G_FQUZIo)Wg$h&K31D54Voh2`C1ead90g9!f8kFRm+(QQf33PW!=ej{+q!Pn z>AQx{|IKFuq!A%f&MKoL{eFOCT`ftz*yyXj{jV?W-1Wi}FFf%SveN^k(UAfq;?p~=Wh-o%Soh2gtG*>T=>I; zr3nL4ut{5`u7;jim2-4AG{8~q$U{;>E|BELMY7*=xOV9#v#~F}vO9D*oXPylsl5mG z?IOe$8Fp><^8f&{Kuy2trX!6_=Cc)G^cHPg70JtvU;oEPj-AbwuWKor$2|iia_7S4 zB7ogS^(|gxKjy6XC(I?$T{d4~UM3~m%y3Ikmy4T}+UJwm*;~`4a-6LBJV8y{Ye$Zr zIC|>DYtK#&z5$S3ogHV+5Yz0JJS5r?qMU8_21qpIlg5X%8q%61n7 z37-MtY^g*?u-GC2vp2U#YTlYCYVO1#8kl_cHQG~9kbP2tZAKwVHBp2F$&#qTSM%vy#aq`sB6R*DCcKr3Tf@4byF}B+4N1Q`mzd#%X ziN!YelJp3y`j9`U!%={I)GnDqL5jt;A&mw`DvcV_yqXVJL0X&5!xPrPVgr&}6WUfq zI-!lW`+VQ3NDJgIBo+DHN3q$Ggza&A&_FJLfTJ!42>bj-KRQPZh1Pdkn<2EhImnLk z{Gi<9VcW*gkRD$;rJ5Q%7{{nY>XtL=L}7?cZ+-`Yf^elN7F_$Tm8DS~T+`Jobo4gd;$z8wih5 z+!h`+0H-60o+tn%4cUU16OqATF3K|A6{n7!paVZfN)n23A5p!a9m0ZBvgY5s!58Gu znTe%r@&6e+8^5UQe9>E4yRL059jkp&o@>_CI!T@kvpFH43w43f*T(*bexvZ4~t zqR7J)jwHQs8EFl5bCzr^naUwi91}H2-E|bvmw|OU`#OKjeSbc`?~gCProH!m=79%w zxA5KP`Jvzj9;VDTgcBI72?B1K7U=0E=%JJm4t7NmR#gSLmN*<3oI=o&nv8U)l&Z~r z2S|Mrp{IrdCwYQ3ujRkHX2t%UHTCGlWobDYW&0BS83rmCnFTs&$26HVqT9kCnC?*>f$yH*jAuW*Bg#<|J zLK+{^?P25P4Qi~8G?p8&PGky^UL6UJskcIuN8Mjx%r-z;F+k!&%D)~e^5xH@#%#4v(g>T)HQhFGo?X$Ypj|(vS4z6Dczj!b)7>nACcvG^ok2 zEJ<~TcMWkW@TIudz{K4*nFW3T9FqgRw22Fo1K6|Z2+f0|ktju+fmpO}a4Z@a4$CHP z7Lt%yA)M7B&V6;;6vY{%AH&x#Eu||#>g~(FUjN#fbLGWZNE$Y~#8;mKjEnhFiJV(O zG-pCmkxVt(ycKOStZ!sACG znjYurbtAp=UJB$Bgf*y0$#ZM$tb?%HiN|L;9IRT-k}N4&ZIS5I7vH*3UKRd`K#!t>)`VNX@p5c<3mHqBpay`cvIwt zSWG?&nDM@t{CXG%D-d82_ehkY&N!k@8(gXzsWgIR_`m*Z1P}7XS9Z~b_Pgb~USl)I zhm|>LLZmp604Y}6aV1qj&PCE`9#0|CJ9Xpy_N>CnJy*W&_H%g|ATiK%hzpN0N|T%k z%Wh^$*8W(W5@9qhshz|mi<>8;I5ZJ2E|rHcBHUw~i= zlcuWeaU@|<<%c$VPUgq@kv7!kWpK3Ot}g{hyht5}m1>OxBnlA71V~Yl&Za$>+GQ3n z;zL5@D=*R^BoVm;Ht;I$CQ6ZnBN+`|nF9??xuB@kN3C-61#ZAyf+YGX8MPzOWUB>Z zv6N^i*bKuUTO^~=c%R%@W6AMIbW9G4L`Sgac#)BK6w@7+Vy_N6J3xx#<_6kYsnMj* zzwBaVz^^_yc<}9m`*&X`ZW92>_Yl;y36MCEi?hU;G(dXu<6bJ!kCsQLoO@E|(VpXIaut7b_(*o&T7ioc1nd?U?mhR!= zSs)(-Na^_zAhF51@lo5$bX+D~CK>oeS?6Pd8d*^6WFl!0TEnUV4x!2Dt29OOMy!(C zvM82*I5ARs7lF0 zrlrY8rE#M&=B~5QcOG5^>2)II!?NO%Gec9@=_!$+!AO*U zY>GuvwV@$gQ$l0(7Z0<5A#b@HX_t-*DG%gjQaxDTh{cA--UFTeO*;;LB68({RnQ2I zq8?4}nYp@&A368NAqvu}NS$5a0<7&7mmu2$DQ^Jj6$7LqnS!MeRHQc>`GyI#Z5vvO z8)=Ug8zvD0rRK>o+a4fac7Zg_j-o5Ipp8<)kCZ;~-x>8N@;e1r%=YpXPopAr8k?0Y zQj%$E@Ha`=9ojL_v{{modD2ioc%y@4=@MEO@P?YqT$;IAqUezbmF)l_Xe1JhCsB~5 zD{WX$fYO`IasgI(29rcI^niyYDnKVGl0-KykO-wi$~1W^R(y8wZONEiIk~!~xW<>G z_Bx9vV&ZI3l4^CkB%PVxP9EWysbDH{F4={&R04(g}mOsu7kL8%+h$YqGr-n;>0b7SUcWp1kyF6O#%gJo40+#nE{pHm>nl zZPk+AuqG8qBN}WQB1HhwYRHEbNIHIK`7xmBU3OEEkwIr2?$EETu!s-mam{it)8Gg4 zgvWe#M3PO*VCfVC4HOUANX%vxNg!pj6DYl)7XLBUQA*FQw2+U|xKSDo$oGbIE;&Iy zIicARG1dA#{vOGha8V>V73ZF`-UO6=IS?QhHtqwbw4fn+qY)LI|Mh2|{rhKcul?+J zeQ~i5{fKHT$q~_*#xR+NK%^U~Sg}h4JT9b7`)KxZWmaL?hx<=O!uXB%CEmaHcM3Ej zUCF7TzKrI6_P~usr|!uuT-hK;rI5M9i6|kqSal{j3-rn|YBDxCDSP-DG8*@h6+hhG ze)!O#!@UO%9Qg43xpn8*1P*&blcFemB1S`EvbEXA1T|g_IXnLfj{vDzbr(pI&^#Tn zE~Tp>v!#6KHQRpy#{W78NX5@3Qf5l+ zHxQ{AGLTIt3LSeA_kbk6qFJzu?Uv38rakl7bI4g6UO<9Y%+FoARL}R(?9x0;6Gmv1 zu8aT;<>bU=RFVwjjwH_S!YWUM8)0T}Xs{krr%< zHkIu;J%o!fCb!}U`5|(G4v7fM{`ZxV0SnbZW^ynQ8=0Kc+91(Rf;>=PG=SdslV$bG zVh^1;jESviZQR%1+uOU3SIenWo$JnC`RJ2R^cskE>ZoQ^8V!(=8MpnpYO?2ONP=v4 zr;jFmERbrl7x8eOeBsrQ3Z&7L9x;_0LnLP*KXNj~Im1vA~fTVAH zo`l)U#fLP!S^o6)hubASYqEKhsW3^7r?0_mQ)1+5v1!9VrRHTf(SPRLP|OtwWdo&r zszErmD%bDN)k}2#5H%Y)0>Kz}WR$aN6*qOUG?UkK22UpO$G8EO0LsCs`%~CH6q1xf z#Eq1ACj7nh?xHRMGAtT$xRzkx;JSlve|`R9c};bF+A_RF(&E+C^*QyDkrW{L0E`<~ z^0Z;i+%9q((|CDw65|TwviicJniD-!!9aMNM3g?KXU6b4qAYehlxkC^1EeM*ZD)m9p<;q;)0zu=;H*SCK=ME=kndS0d3cqi$w}JK#xu>} zO^z#+_K>#SV_|m(SRf(N0Lj0SgxLW3XFyYHZ1kapke3R!TzyQZpd)*n>5wW|OAwvS zq!-MwCXH@L>~s??y0rT!k_;~}Yr}?>{7^%8$7nOF1az<=k7`bOHc1^cBb&kkqoV33BCRd?qFaQIX%CzFKHenyq+F2@#D>lEKFXy`uvmXGATpXQKL#7>4fOLIGZzI|peZ+3{arQzstk2lL|J=EC zPbiR2IeWsy`*#&28qywa=Ryto5h7DHynJEkGZVdQk z%BG+|ciW*qFnxH9q)vjAH()Tv5qVIJ4$4gI^bB_H`}^Ph2U{Xw5s`obD5-h-Ga9?I z^H&!Z6_pfMq71jZvodWZKBRANVQ~&dySlohzCMRv5O>m{)$s`t!#N3 zVX02h5*Z5xN=ND%dy$rm5DfwOq4lR)4jkRTA2SAfIFJBoW>5r30Z3d(+b|B0-d>-d zDUc?}cJ!m-_$Gha6~5(uOa(F(OdcwxliVbLERz;V?`{?KB2&c@sYsIh(Joy%didE| zfOIS}*v&ywRzZTH(CC(Gh;bNx){ZnHaOV&#iE-{7;ubnZL!xf{L&-Gq)*NYUjP%!L z=lYwQLLJ?uEDFJh7i4OTQyU`>9%u;pW9)k#pl&$KIyexwaUzc1vmP4Sy zL`4OG0TbHy?~jj-|NZ;mf6!aQge=A{7$!g(?P@4!xKOpJ$d|ROWZ9OLL?1H!n&T@f zEUK^e5q4LXpdm5aZ6*`B5?4|P+h~APaX0LGBWz=;mkEseTIt)!Lj0bw>8YL`hRTP6 zlX7B|0^vj$4Ihss;*-(191UR6<}fd$fZc?{uvsDVA$Q0n#L$*BL4`V6vDXS$*!!R}vU5Tli87Hzq zQ{JCe{doN*#~CRIk4E~NI(jc`t?_;QG11JHcivf+wwO<{e1(Nn4gs>bnmoBYbJDb& zZM{MlNb5*i9xags=K`b)Zd!f)wQExx8IH3w{oYXDh~&TH>Tg7E1~AC&N2-S;$8i~3 z=?>56=pOB7{kW{5((M<7*kH=Ymqgq6kL)R9Cb?szuA9Bjji^Eb(S)2^oM3?uG50_; zIW#zsNrx*v3jEqway%HIHCzTA>(qJZUztOXNLK^ZxNvAFd>bN~C@FH$*dedAN;B z+2%+ku~sH$1jNR^_)wC2+T@PWB}CZTT9J^`i-BNYl+l{0LC)QEDS7>M^+X-WKnT-wNwvzmmE-iTMoHM@;+E> zG$U|gxe@gzT_S(TBflFSNg0_&a})P${PxI~w@Eq5rpunOu}QM|(I^?9`}DZu|MK5S zbZTZY7$&2|gDB?4P3DAkqu;RbIFT5M4)%3LGFlr&T02Er8xI_4K}CwqKDK0uj*ya9 z=I`*=k1b(jRHE!xb>00x0`d_9q**IzP4{bXPb_?J-cJ=sf@zmV6%UY-?~%qxoiEQ!M8GDr| zIx9!J%%qi~#OL!B7Zz2wwbdil^*E6*=@t^56p+nKnv%8=7f1Nz_uvA^{Z2bOs~hoe z_aukLfMGa-;3Fv8V^R9B^+K_5sY)5olPpJeU$heGLQrGnozhJjf_fxiZG~) zarLhDcD%^e7J(9JK}GIAfAqr-Hz1IRyr3J#=r4TiahQ|_G=M}!{@m%$_3%g`8z9{} zjh*lEN-B^>piiGX zE<%f=7sy$)NaLie?jxANQd13-%OA31}n)=QkAG$PGpIaR}}Z*P}ZUT?w=cf1ULD$S_KnB6jlr5MM^Qkxb+omweDP zZ%JlN!!zIAmu|Faq8bc1>puM*?O%OWSY48(2AQM}J|C?c!2xnEkuH!L z*?1G=sYkv55D-(vZeDRz(BT1mok*yq|y*;kg`l>9%*sS_E6#;AOx=~EsZp03@~!TuS$LQ z((purVquVphMVGJjRa+v09TVKBa&D_O^&02C?8_C?}W#vAav?}GJGcxAfi8X@~Wu5 zED(EV3nB&^AjN3YXHimAL|ju;jF$A(LzWs~P=hp$w~;xXq}@HP;WZ)_oA}%S>ECvOdPMOm0Wb#Ev-HZwLZGIo7MmUhU< zAlL2dBvqTif4UtRk-DyZRJ6Z3d}8=00ZpaTe#xhzC|xEkkshnP$*C4gKgvMi~l7@igrS zalZy2Wl^8MA;vg1a|?L`1^mw6EUoneW>YIilVwsotcSJd|xKg@nfl|yoOgr#OvB%9Dg7Vs1SMXiD>ijr4fg1F0c99hKE$~?$3 zL>dfdX*424dXY>e(mIm%ptcp4PxpiQWkaMXBCcBav;X-AE~;80Q-Cys*a(X&SeM(> zOzhkok`vm1h?N#gOa}||#8RPd=%??ezoV0-APw|JN=!5CM`y~|Qyy!7=(}RQnxFhQ zZC4pI$7FP5^w%=ekbQ|g(s)`LiUK5~*1^Q}37KLhGZ~bSRZe+Mkp7X%3|STFLL^y4 zCq}fVr}xO!ww22kOL&c8&tQArd!|xSM<=q-n2($PcqW21#`? z#bUQn>=6@hcapol=6_yZeW>U3m+kxFY$&2|ID;1%pH9+m#uzL!M1jd5C!5(E&=+Qh zLOM|$KZ00fY;Z6-f*l~K<)`OoG&YLYUDvwr@afYRF6`N}4VRIo7;*RENRj$qdY)fJ znhAAh{CrubD^p)q6h(m%>f}#xh1IOqdEAI_$!k^s^8XJi0#-@%^ z4#N`8baryzi{HeIbwwU?g`)`5O!QiXiL5*Pdd^eUozir{0MEbNedQG_If)S&)Ru0@ z0K;Elb~`6rhnMmy_42~xulBygte$fck-~&gl)@udE-F_lpEW>^;&Z#f1 ztSl@nDwcS=xX6bmN!%?=Vz^Ox8*wJB$+ko)pT=e@kAy^A@gy|YOr?j&E#F={a=N#b z40qiqcd)1L&CqK>EuMiHHX4Qor^lG`McD^y$$yb+kS>$bt~#>g@^cA=r2QwPJR)^1 zCr+H$O-RFRo-*Uqvh5iSt=H&=A3Dl4?6&vVjYz78l#!&1^ZO-ovMtE0wQ9~Nq z&4fkmhRoGZSt=j;)of)`A{JcZ_sA;ici%JZ;EqByL*=(u{p&4($ z51<|RE=i&68#GPoX`70H8x=9Bt&w|-OBZ1u!Au|C8HmnAqv*`>`$>YCKn1EN5a55h zv}HAvrAbq`zycwJ#uRI^(f~5YSExXWk_1YOc6B{ON}~mF%F30p%#@f$fs|ldX|xYK zOvi&HD8fe-qb)FckmPpAwIg30K6IKr`#ntU4khp1r{`FjJvXlzpg)&xi!qY>+2mr` zzd%a~?VyQ{(h-OZ)iMe!R%CR9pIc)WQT73%?EMf0QjR!#;x#eu%+$O}r3M52p!kZ^ zWL~!!M@JkxP0OLk+^z;oq>8)EcHZ8-dq36}5B;d0q!MY7G-F_h<|D1m=81ryJ|Gbu zT^6m2>FqK%L}Ig_di|l7-(s;5r`dii$R^k5vWUB=B^qHzw~O9v9hQb zD7A!GU)`2d?;{b^mZhN$f{Um`YW4>P=ZIz?1>GD#*3q0Tse=yuKeb)u*yrg32TpZ% z4dL@n{fAVyS?!j-B0n}Vk_bnG0Z7c-tS(C^fxYmfOGgqI1X+q83Nq44QdS$$PMuq~ zZk5h=nFYwk`9nXty%qnuz-d0yW*>JQq&?F~NR5L0F%4-r6tPW20QnEavT1;XM=z0c zfD|4rbp}aCLH9|7LYwpS`VG-K2S)On=$gEd?e|w? zvRIz@dIE5nHBCU|L}20$p5!?Bo-pnsigRLuhTOo|y{X9nMVerg+wk0wt!^X9h|>r| z7;S0ifgI6otcOG~0%TDUuVS!5&hI?EYP z*^LmcYi#d9+7FyM_k{X^i{_|EW4+Z_%MdK8Q7eZeA?KW4P%_ylspDNT7baC2PXn7r z-0JrK6-c8zRp#hOkIl9~S{`}KzWta8kcy-RHbmNzWPR$@h4Zl4yX+Yn#CGYLk!|Ef zTR-xt|$@j?vm| z>Gr|;>pJ~RF6qncd_yFf-~v2Gosta$uvFp5C@02faV5`8wmc|3k-B;IdT=Hl#iU1r zGn0v)%h!sl>%j*7CAe@HTQc4NDb<=B>GJVaiVIl;mnG1N{T5Bh_tVna=qAUR6d)z& zmZPyA96`1%M?|9a62>C5T9ZoTMs6ZryLh7a^pV>q&wO_~IoPM;X$6`7ZuXLfBC!G) z&#WCSE#+v9%wC3|QjbG&Jy+If<3dIn`&f|46vO#*MnO6>S{&7TL_@lT8ttv{^!n(G zmuWsTO9JNq!%B^rs!oJhOK)MKnkUnz*Zi-w#f zQja78B;`ZVkO1i}IQv0^g;9<&h0Q7LOpd;RBQ4#-p%6#8C}8KA5m@vkEogL~<#NpL zrQG}wMp7*G95deE?Y9x53MDYK8zZPCVK{1_;6i2&WK~s zj*NHpMe!S{`i>{ZsShV6I4plX+7~2S-WMF~863^{^2o_z6QO7&g{O2+EF%R(q>Zta zG^Ed0ROG{K6WEA1iT(CrxG5yEs}Gb_L#8>gjlSSnwCpm1BC*y2WYJz(ed?AEy;usx zLgebzx3Auc5A{S6WK{3P{n@pn4S0@BbCC4nF7YVWs1W*0_zq?U0Z7i|g%Tr@grtyq zs7HYWM=`nN{WzTq@G(gP$*i`d_cDFTA9{XO*Zs^HYM(5()2@?l=u*NPi0b|Eb)1WR3I&p0GX1BMCQ7V{6eZ&B*ko_B9{Q< zFMpvxx)U^>A%<6$BIw3+l%vGIH&Bq@aD`V+#qtY!sxy<`NM&)UWXm%P@^>^uq-Ge2 zMC30cPZvefqL!B(%J9qbDQe+}ZvNq3LoO8>0-sPU5Uz_PLKy7CL?SA^6cXZ4L}X4N z8E3*~@=id4n!diVF&TLty3KZ`BiBxzKHPqIHOCfUY73%7@{Y9@OKfHr(2#qJYAOpW zt12stYN{%0s>(N&ixsb|s;a51sVtV_4e>T6UlgT|f~m1~3O&A0%RiO4vl2z=bo|)m zeLN5W6nN|DN#hFbNiKCC>bd>hP$be-8lrf`63v%n{*wC^bs2u#8-8Sn4zD9(as)`} z{TY-|uk-uYX=H*x3}7N=CYBi6DbH}Z{pSLt)sF7LBua;-wc=IXb|LIpuhE6l^2iGy z5#@0ib%c^-eBg=jO?mC*=}RF}k@RMMR1A$)H(K>*ljxR8A<{|yJiciD!wY_b52-*} zaoTh#Q!|C72cj>DI2w|#f9?NEt%iYv_l%tIv_HmyMg^^w21Q? zD0%DAAjze_qLKU4*~CHwoQ&I$7b3_U?2CqDvY?43GknM}ql6PdntEhGB!eqDN6N;? z_|z07?l>D~k6b=-2p&29L3{#?+TiHcqS29rB0j3yB1M&z!lFpkrcFC{mc6mP3_2^z zckV2Q&}!hzlH#E3T3IaiUwFi%lew%cta<iL6jJ2D2uA=qJJ+p0t6T1Y z331&&47Nrzq9D~`d*^91t}*ep-Fs#%wl|dVifYIl9)y3wp+lp2xFSIM43J(Tt%^jv zI&!XhG)TI8fq3!o5DAjMmelw!rFsaEh=Zek{MGMXgcwN-Qq0r*AR=$F_BO!DK}1in zev>Z39K&lU$NabRn+kHJeoZxpS(=Q}?q>hyyyddQ>P5nEHdEN88Ex-5w7R{QV>FzPBQ{2aNOu(l zK#B+H+lvEPQk~@k$D+z|a4au>|F=&fTc3QRY*YFBWenkzR~2QYN%bZN)4y1;l!>r< z+|C+QX*u10zkmPJ&vE$)%_XWqJl7k{=h*G~%1y^NRb4ESJkQiXbfvkee*ThEoulb{ot_YBJCyxpSTY-G_RV`qn zAs>->8f&uUO19e#sjHlg$p+=wpgILe$A`>8L@}BNVA9Ksm@lhyRDF7o1V}@q3#7gB zmBORN(JOqz5cwP;R{NQU7yd#UEFjWF5+>QZmo96aAu*SC#Sz6QB11|6V1!YLag@i* zwJ+^}K~A1>WELMjpM8;}IQ$`;$Tgh9(IfF_1x&Z7M}T~(KyTL-un4lWju|~Bm2m`e zfnNT4F3E}hiWvNn_X$o<1zE``RYXZhPW4SrqD*nQS{qC2P?MLh)hi=L&|mJ$M0J_TLaNC&8d7mISi0NA zt%Br#fIpv_>hZ)i0I6bl*(TLfMiV&j)CSkwYOLDAWb6?87XP(=?YUnBO=%1@w{&6b9hWlH64;;9ATAGw(eb= zU@=5rAi`+h=)TpfPhKu+GrePWC`(e~X)7_>)kVG%iI8jFuc|4dVWEt+!Xl(R=4s1bc;kKgzn*{ojrTs^Te#`M#j6|t zgct&aMLVUay=q(3mxSx9N7zHr*wS*Uv%}Bw1j$8Uoc#kVQrVHeLk5qUaHu75R#7{k zK(cu&5*aD&=svri#5h30lT&t)Dvi5W#RS<88Xygdys3t?K*FQ#Ju@u2K=SfxNKLi6 zD3VG*M}5IP70FR5aLM94G(lFW8~lZVz*n)RM6qhEB6JJwjH4*^qd&AOvw0;ISD z5UDGKxQRZT=x7+ts4Ml?N=X+%9ZSE@@W9QAZ!QG}lR~71*}-v)woK$FX~`Z7PPNBk z?HKIh>Nf58wik${_U?SAIL3=zi>AE;JY84J=@(ga%|(j;&ho`kT9VA7k3|neE$;*HrDSA{RtXNTTj4 zjeU0R+*F2jU-bBfMX#@V=GkXn_~WNlr%898x%RDCZEL7SMgDL7N?S5E;)NCyIUPB2 z^5kkZ_GE}6BvsPZkQNKCNMKTJAiH?r-$U5zgFj+`* z_DU&Y=FrLdJmd{()Q2=cK4gG2VG%%jB-NXow^(W9rSD!@EZ=gGv^vsM5iO92r{%|k zq{Wdux)HwcL_<?0N09-+6COFTO^RC*8Bq4he^7)QueguU2&QRH zKV%_NQu%)Q`}_+pTC(Z^E(oonef8MUCCA=e_rUz!yFWaB{CFABHVL7fn?SL=3Rm;^ zo-$fhHq77f*!)#XHlS5E>@5E>J~K0Y`&+EG=K`2}wZUnhY(vkMZ@Mf_Bs{icbl0-t z3>lz0$OXAbH)Sk|`50I4CZN;1Jpd_3?PXaZRj#vF&Jxp@4Jz7qh8Q5xkj{h`3-7s1 z%vv8WkdFYQdq9?~j{!1OJVee*Gw|^f`v(G$MoFd+X>GO*YEl)XA}K(sSR`#FT&?zF z&ye}~`6EAH@WA}XpMUPj7dAZp<`cT?dBt)v6WU)!Eq21-2#^}+$eR!;ek8?23^kS+ z(~JmkdNfgiG<$>8UKkDw1)Us7!=Kq^*1~e(2)0VyvU`=&mv|8jG$9hy+ONPtIOUFgCdIF8QC ze*ykJ<3tPBtzWnQ*t*wO9Xq#f>$YvXw{0rlv+3gT<23}zL_T}=?B2Tj!>#A{Z#7pT%PZ#Kds|x?ZsfJg#}A+2T3lmGY3+c2bM8P>Mq}N+ z)<_+xhlU-SH-la?N)j>~0s$-$Q5|V8kPHFjS%R9UoY+{AM4Z`W*%fJkBn@eT8cAh&Id2x%OKHN864v;DQtwg9)Sv9%X<42~dNY9SG6bI6cVGNJ%aZhW#&7alZ z;=KLalaD>TfFwB)_n#TE(Vhy;)Zp8NaP5FmY&0U60H%gDKu0lARHWkQE(L-|Rgns$ zq}%mfiPY0Zk|oX~1LEx3CDvU2(&pFJ5`*T~Y6GjpGl?+sdJNv*OAb=K35<-5VX~*b zJaen3j&-27Ze6@aXS7WkMG%2R<`^6)@|pRwmNt2?0UM5 z8$S7HeP>YCuid-#?VqHb7fIa#t@U&2Mn{fcIPevV?Asf;&c(u`hK|NVhYm1;P0^r# z2Q>OcXpe$IIxApOu9Z4Y%ezF`W{HZaW-F7@>|^E@L_y9q*)EV8WW%F7zTkBsk!KV_ zo(S(2NP}Uj%xcKR)@XZ()a1BC+TJ^e4vemTv<4e7NUB(c$<8%dQXmr)U;OsDXCIXG zxY-q;x=f=K3^K8DEw)?jvpSC|e4#+19@DY28r9GcWRT=@>BSJOiMq7L+P%v}1g z@+OP?h{gH;T7$*TtwlJ6I2sxN$-s5WHjKdPn&%nmeH^@X_4b#^co&T^+#YU|GBlb{ znUrFQQursn`ag`F`&X9txu?^lyWMFz>9#fLo*Z^anypEvBz<3#DoH91Zcr8|X;Oy7 z6N^|05k)Z~K^QK60w_ zRA=L8XWi(H8~aX`Ls3`P;EjT^4P~b~Z?wf*a^uyf6?1UVb}OSXjD=&fztVARm;7`k z8^7p+p5HAS3)jGQY_zViv_h>1g7j*Ki7kQy{FajUpPAb&9nBo^CH3^nBJ78L;*T5MH$5=}KP!~vPWVd#r{F3HVC z{Kz0b9#N6T>K>JIu9f$@L-=KUYO^E{D9r)^S#kw9vf7BaG*ICY)rl_vjVjupAmw~A)2QsE zNToYtAh)EM?RMN%Vhz>Ir7P29BDGv48;gCjzvr?BxsTPi53kRe>pOD-Bctgpi?xHk zG3tizX04~OV$=H7KY9PzCq8%^pZ{MTfA8_bhsSz%9XY&rPkMT1o9+x&me;kmrKQKq z+uCA-H*VZ$gvRp9bL=f6%{4SboFz9epH-gu`o540d4lul` z=5UD{fI&eb%8ZA3@oxq-E~W|VG(M(DjAryP3Z%zS;&uj0W{D(xj96{xL1uxBrha%N zWP3u3{b?YmL@7il3>5Acut;R{9DU>8q6O^_lxuuXq|qZqNBNM2xNDcMMFb$A@s=ba zfz<5wb@AqOpqSHw6_Vbj3~ddN1w8H)vTQVs1#||Q+h|uq6r?%!NoEY{jsUs=(@Sj=CL zp}!0v)CCxzxW{U7+8rlEq_s~PjXazmt5Wz*`Yq?M{CU%wHC@zfhP%2(cc-7&x36JL zS7;U`Z`Q1^t==Oeq-zyI(vD3fXKdTHtEu70KYSY%X*7Amt?mj9WxvH975c;lq_RGi z?(s2=cOk^~@e z3eM0-JMW8hMSf@LLu0Ah@e}CCNHDCKRa|XV4^fY>7`%eMAMF=q3_%(&jHGcF!O%QP z5{@EG@;Yi0Rq1#{=Y~z@+OaZE7jgbo_n4l3{a@c%0I155TzdJP>&H*mGUiM&oPGDE z6`K!esV<>*ZR^DN9HIwnb?_NTa75;yqvog^@(pw&y%Q_4zF70ouU9|0a@DGrmNG;% zHkPtr$Pg1{(>R8gfs)QxCah}fpz%guE5088qiJY#qA-rC>9mNvb!}>50wrlg`VAMZ zsl$f7)!MOTMb6w`ZJd~x=o(Esa`T(miZ#uIHhlE;G|Zu>v59LYuC zI5P4m`VAUoZGCesXxZKhne1f4!vqO~ng;;sJ#ue?qB?TcXotPJ z0Ox`9;@w9%iNNSoqC}}otMn+!4huFfJ@mQds~{1Q-x*j*c*R`w<-hbs?~GT3%7%x%7~_ot0m4refM za_-tS@;%MXntr7z?O^>`0-WY!$k~Z;YAX!Uc$?zCo^0YH*yXu}1WX|fJ*zubtvYn_ zk+M}~?AQA3A5u~&TB6;N0Jgt!D)II`j=vr3xm;aYS>ID%c@RX|7wu@2k|d5Juw%K9 zodcPgLP??{vD>KUAoJw@Nno#;v(i^s;A4j+NWb-J5NQ!`Oq zGTl&E5v%MY3sTqZYEUJcJ$y!?cOr!mK)Plh7iCB9z=j&q_d-Tv8cC${$7@K~;~5>e zj3`QPwO@;>NT6~D>GZ)nhoQU34+%vVu}FM)4vdKJUjs-~T(NxY893B)v;mrqu2&0b%%Q_ zgG{bf@4iANprNm|t+TC@>c_~*{onoNKmMOTq;Qf^PT`D5b4Z%#4z_ae$FwCw>nH8_ zF(PoUV7Ga{a8FyM|9tI_f4s^4MVW0^u=Lgq)reYN-?8e8O@%o-bGio4jGk#rZ#Z$P zCO!RdLoa`JiMtoD`048w0S5P`xQez54QUsX)CkGopd`F_6%=Z?Q4{)*KBO^G)`vQc zfJ}5DeViS|Q61x+Lx0}vo72FE8!s{12cE3*6+-khPl!U@tqDNc%K1h!ktiPM)o7VQ{L71uZqP6)Mqb zOY;k}Q4MdFy5Kcue0X?xs%w%dz={&qOjfjPtvcL0*3esA+?%3cDpZa$Mw^MdUnu$7 zog5LQ5GfpGwRv33zpc|GobVEsckYrTMV8>k_9dl(F;3vw2d~V?HW6BxZ!Zx zi6afn3!A56UsVvqk2WHMP>+qy0ur1Ar12Oc2|zB${zX_hL_>NcU6AeSGy>9%FC-dl zJt972lty5*hkbMse2qPksK~I(BB6Zf#d(ij?E10a$1CyeYXXwgxWzPR$d45fySN4( zor*LdXGD*3Jf6*?m!Q#D!^qc|mX zY}c-a?RywEVm*g&1k2!SVE@*2*15Nchz66b!NFjeGve2k0;Ck=qX3UUaKCELbwGL| z!ywzoG#sp_`3>7%QI=*}cx>~Bw_VXZ`8Q`iVok5j7 zeQk|ry4XN57v&f_kF#!$^_^ie$0x?8xPVDJ2Kxk*u(?QE$f7s%meKMduLA|?#b9$L zn-_10=|(RXd0Y{Y_qdM}+!M1Suv6m}Y|oLr;GBOtec!-|%v$~7OFKF`&UBvYt{KTl zO_40*T0jO9L2qIW?2!(qf9nHE)|fbAtO9~qj2b4 zNNVB_;L*?6JQVWiakTe{;SM94Ip#-tFVcW?Q28{Z-hBz%>&H;Ss}D%{ABVNW=fA~< z9}d^dZkMgvlnYDA>KBX*TW3KBnvzRS<`4d&90m|sL`9L;|PjgWTDW*)IR8Q&sh z;j|c^$**nH%CJ|K7)qMYG{eHwR8GFHTfQxqyDilvrOg$1if`($rQ$u0o=G97m-&r) zAyFRXOadf_#M})~Zsy#)`_)&(+dGM>g=D~_`L?f-{VYUqAv-%8aUPE}?CRyttC9;U zb}gbAUm#MkdP-nw!lrmkJc1MMpX>91N1LS%Om+}tyUJn2WV?YH??P&h))x*FBwDHY zAAd_kqygz;Z4YF$oNY9^_b8CgpVY&iegkS?@JaiiAfI`j;d^08fys5x4zPZliV^kJ8ezUK|7FCL{czX!ihT& zPFcKo9a&>*H;-4ewzf{jT3Z|2D8Ti!mbS15r?mc9Wo+UrMiyAjV+XLkfF&*B1l}m9 z@u^ASC;><^rAZK=P>i@N1X53DuJ!ID{6>Ijgh^hsJ$((35)3y?>b~5>)YLGN#gOgB z*TTq#HZHn?)vqz3CX4bDX#_M!j_fKbR*$&r>a%_)6$oTg;Bj3M5%vkuBp{!0KBQYV z0g#sU!95Jxa|0l~_`+dCLyEiyA&EqR^h-H-_{|)i$QME)1tj7%q({<;H`&pETQGVY zeRLkE$QNlr)2?y4DSpqXVp2bXD>T(+W)&7MCRt{rGUbI>#^*X~1WYp`LJ}7F2J8BQ zTu##b#VO>Al5rpW?&_Dsov>?p|76a;w!1KHSxg z#YQn6t8O{nQs3X-K4EM1wAI8#FgD6RSEA1;$eozPeI!mcB)^`X;kS2Pzh{QjkN`*? zmq08b&*P_NW-Lc<`^2Fk^@j)oI8C(;c^d63S16prRZhFKpAvIXS# zG1-0~nKY1V#S!`2~ zORbXac>Mn+#+CiCX8@$N&v_aho)ID?_oX9USmS{-M=-Ha<29t`F>>S~Vzoh1L{h1F zFNJ=yz=K4Be2*$B!MP88-ief?y2dFP+Gm}~7LXdV)`3`cQIXvdZBnm`mDjM_+Kg<| zZDl9{Dt!w#^bMsd8oZDwIwCB&CRWSjpV5-t4mvQTN*2CTT03s&$O@D zNK1tUFc$L#ZF(H+Vw9EG0s!Dqs?jouhS-(sT7#fV;8sjGE$OIqO44N^!+_>~9EZeX zpjr6f+Nu0)!ftMMtSV-s5PhnV9pw~{%;;r5P>(Xu$FYEy}9WF4pz zStWMSB_b`#4yx-f#yIo>4Z9&fbTVdej80DM73L@u+gV&xf=@43A?dj!_dA)*v28*Ev3$;`WuAXq&ie=Lr+!JQ2sE8>J2Z^ABkp zfA&=l!~S;Rd?H<^B1M_nH`Ix@w0 zep+yo&e^uCNNfB|)Z1b}$}ymPsEhDP)N+f|qMF-M#ci);10{ARmDY#qTKiUCtbP4P zd5^Nx`fHcv$YDs6nV2nefsu4LJf6R;-#-m#*ZW z|MOiFPHsY`Y&L6CFGFYjx$LU#+iQmZ1di4Shi+u(cD;Zs+>q8=yo->giNOVJB`v8q zP-}|?^;W_dO;x;tdFKNB0tLq>Jv?0Kf>Y_|()o?*zuYBlqI>VZUn zG3=^+B@}&LDiR^eMgUJEUizjMqlwS!#-l+7jZg`XM3%5A5v7KtBAUQl3)vL&Cz(Cj zwuk#)CBbURquPECoCAAG@h0h0?6OHfhPK|2-zX~K(T4pC*E66$JVhe|SJVl8LnzJ9 zyZ6^CGb}F(iIg|&@0Jnnh&#_>^cyqR!yAzNvBjelq>MH^8j$z6&3;RbNX^&!duj(t zV&gksaM36`C7Jd@L4H(lGM%}tw0I4|-b{5v=6}hZ8b;4~tI9vRUAs!t;wMi&!VJ%g z{-TD&-zf+yhfCEy#9rVq(xge2nc~$j813S(bB{S>}Nd-)L!J;xk8Ou|YAYY!B%aIJqF^$zoZAB>> zQm5g|>*_ks3=U^)GG)jVyT#Qg$Q7%1>?kPcC?p=&xtK|Cl>4ZC-=b0_zFU~>i$h*X zeq%E$qz#1-MqxA_`Kg}AdpeN~j{?%A#9Nqd zfi)c)I_t`7s^(>aqrH3aQMMT56?u3hBVJ?#NMEb@bXG$ehF+pkc9g~_k`SqW z$R9lN77M3>Nmvi04IYGIjbv6N6jnx_iJLgokMRNEH18#`9aUj>4>XcU5~H&k5)OIO zL1PR#?$bI_Kyvm8uuE#0JE^X3J=-5+_d|Q14NB$4Yr4xjJF;ls0meBJ?1l{Xrn23v zn{AB6NT5$@X(68xQ=)SL`R4=e#!mHoqJ+ zj^9P>*QG^>LwDyeyxJYeQq~Kn2jZ<=SsU>uu-Pk^r6oDZ&VluVo!x2d%VeI*2|$7) za#TQa9$;@8smdo_eg3g$f3OlO%^MuDV$@z%s*#Wyx3NQzbT->>J;P#yehcx%m>qlp^J&;)JD39K78WM-y*h4N5150iVXV#i4G*FBVud+#|I2Ljs_^;~^vhyfMNv4Fr*213>F0l$FSdr#Lp~|*z508HiSqAq`TX0Ck{$_l_1k8j#94 zA_O)j<^zIc7$!(Jid8T)At`CYgq(pbA{%KHTLEdZC=i?VlGDkeDyEfl*-}-Zkh-F# zoV5?-ZFSX+qit<{gTpyG#D(I~3vfoz zkd+~iA&^!%3`T1H`QeA%^>(HhG;N547n5vLRTyMD91$PX=si(GNq`q>Bp|5 zL^6?nQ)D#EPRxsk`tf(}AMDF$|neDKJlY>6c8~xV)JZh$3$#$k%;l614n?>g!UcC`k@3k?N^FSj*cnm9hI< zbC+!`X^VADtN_R@7Ri{wVEfLBSZAEh8Pb-e_070&s+q7$S$AS!5+I$D%EtM@siz-IDPKmRaPD) z&1~Kpj}7PSR5}uE!aZ7|?1J6hxp`F^1XKBgg;EFq3D zBz<1o@u*!>4Dn*G?Nk!MwY*2nwFlB!Y^NZt7yFwM(P;_(rHNJ(M~Gz=1+|v=0|Ff;l&Rg85#R6nQ`elf#*XQ=(Aj-#8hY4*kgaQ z@0gel0X4}}CWfLW;Gt1rv_8cvh`LRJVs>!qMjShU^9FKTa`W?9?X0z^11+`n^)*}f zl=j7x@=->dc5IW4D~7vbjU~B98BzSQxt=>(cZg>o@7l530D0%n*y%usxe>XS=PqP! zzGO2jD&2h3XhWex(nmDc?K&vwW+&z#}V|S98`dmoEPSSN61;41eN*u5PAGFWHSvX7;FPl8j>8O*N_Tl9FWdj z+ex`F%C>9|-{%wX7zHxi#p1>D=qoh>^1)&}Mv45@gEXX>Y#(Sxf%Ki@CI)2U@f#WK zP(}V;F|y^x5q|(y-w(yW6p+q7tBVhjJ7^Ve5h;a|#|rHseJ5PA8`gTl3{haa!4eJW zjQ^r-xwRbkYRMfSXUr5Vo9S9g*|AtZIW^f&&PPB(q-rrFQ@T)(nQBry&8pLqbH{pm zw8~WdJ?9ZPRNe8i+Ov~gR6uMu$+PAFvW4I+QH6%^!Q1;0Q-TNY*;k)7*?`j$E6`Pz#t&Sqr^HY6ye}TD$bV0 z_9j~nWRyrA3BBVF0@8VrUPZd=xM;{Qs)+_QZjaRL9>_!<0Wzv0jY!9%0SS?Kk;FBq zNPIb%bm4RuY+HKVlHc}eM=6{!xQVe*8UwLB;*4EpKMGH8(p_bxN84vA&Y{;L@(@Y7 zdt7J}^jfUj%GIT+qpX4+$S={smdeSgzO!dbONhHG+SHFE2COF9V~zY| zR1*6ESy0k)tmmKx9rDQv-o}ugCje%qAHk)h0b&XsS-X4fSOx3Fa<}rkWwgTe&Y92; zM5WplxkC+^bZL2Ua>my5cx~$xs_{<L$cX3d(41|p(Cv3kiA8`6!lLnI*YiF z5t|)qNF#E#=?AO*;xX1_$DA%*ZchO^>T%a$i6 z2aP?+{9p<_JmkvdTfU6HiSSJmySJ3V&r|ybODnV&f9uhz5|)yZQlwd-VmtGqd#dY8 zD;i@23OltaZ(_K;tG%_cyrT91i{-C!=&%LFQ^NIh?PtrUBNuP+JTLSYt|U(bQvM|$ zwAJ=lePazn`s)@Y*#R>b)&yll4cfpZI?_tmL(8_Gh?iG#=tDz>CNkLLs%DFHt7czd z`s*UUkNj-lJkFPZqdb*eKjZT3#uZtgf1b4-DU3Ci*OYL04ymm@P@;bpEvyh2SSEw5 zEM$E5sZ;y*nSu;Xn;VecWIGLMrEE2yA*}XMORn96b!58kT&E#ttA+4jeleB9cr#VumIJjdExOiQ6R&74Ev;;9i?wIzx(s2>czb_eWp#bev7-=}&zk3! z%+I)4r=7c*Bn3e+=sCNn>hyUDiJ(aUpSnAaX0=VrjD6L0S2ZOsWFSaH8jwBS*2yl-VQUf_9> zMC>)zTCU_j&ECoOLAFczfMLXDCl1#<*ktPwDo7vI7?7`dlkM`_Vbi!?dW)KDZ?h%Q zID2;UX)wpIyTmQ?Uf5?B`&URo_YDY?FeM2DW74^`X2kqQE~!ODiVP1 zPQfG9#VLS{#njdYl4(bJ=Rf`50wAeA;Y9+YJ*6WR)C_G-AC2{OO)%{bj)-YUM8DqD zAMeUJwfwmKOUTYv`h6&y1185}o8EnaN>bLRAC~Q7ncT^fsu;$(vrvsQLJk3EIevO; zUZ&0`8ILt5Au=@Cb^ulyG8$z&A2L{Yui_y=jIay_4!;)y`HTBv8mAxkM|{W#k`kAP zj2dniWzR}fL;6IdZ$N`cry_ayX2=MT9!LKXrRlRi@6&+x?DMaFI{?xG45`R~#{fuP zZnKIN1i@50%+wiaOBZ;l&w|^<7Eu$^+&)uuPqT{TtE9vR#tFEn~?3-IR*j1RNB3#yBS$B85q`7op;IoU_ z)4J<*;OcQ@7gai9aRK}C(UNAcDYVFF<3m!l0mTVmWE4>s;Ar|CjGgI(NO}}Me#P7p zYqOXMaI_EV55InCb4_emx)J$P=t9bgoI=o)%D$^@93(;iw))fgEu1H$Cu=%~rk{6z zw|ezQWhc}2mzC9Vn!T2cKPXlJC8LuBZ+V$4gv=-RT2iwcYb|l7h;_Fm1ky*@X0p+c z0@C>7G>FurnQYfD9?AN+q)$|Qb=wCu4-}sq_Y2;PNC6oMYJUBxU-zhI)Q61l=%bnl zlKdKINSekUdE(LU{_;HmDI#5HQ5{RAVN;0dk|4^6#M?)dzWxE82g#_}6=C@5XsFgFC_K z!!TMha0GKS>QdI7*0Av9S7fpI*QHU!z-BwEJ#_ujwwlo{{$tUoS75V&(j3XVQ+Ki4 zf4pT;y(YP#lK*u!gR)cO!CDO>Z4y6gKI&L?=ull0&LyIHX@fq@;*MO5s)N$D9hNOmv#Dt_dxES@bWP>JR`h&9Nm#wrz8IZlbv9* zN%s@gP?-pu#zP=|-p9mS?C5;9qtWr`#K$#iu`rYUy~p448WM7hNDm}RBq|P0#oxA? zX3<*qCK0A=&K$_3-S0R!5skjjgH%ev1H5zM6&KTZAO)j6ym+haeaHth36&8i5(PQi zUg0%lVyPzFc_to1lkL+!dPD+k5$V!COP+ax$wQjP10DsWH`xNxiHdH5(`!hVj#Lsz zXBV)yxasO=8CtIQ#fF|*A1w>cJA~TjY@)&3M>t+AZMlqI^6lMqjiXv)S6<$TO|9!| zXN!2@VBw}5&R%nFwY(~CIc$@apUFIZ?>yHTxEOndMZT}2AlF{F4UO4a2c_^=FYGrV z%_Kn$0*Er*hSWxoT)*Z_S=!jbk6HclI!YF;$n$ytBoC%EHm7&Sy2g!03uzF&o7GmR zEpu%sLZnSOUbCPcnbKyBxm$kr#Yd|Uj^S|r6TLj#9wVS4@T0J39oU;2z0WX6j9g$NsR3jq+}6K(mnBt^3w9!>gqVl_;hT$ggBJ8v&PC; zV>cV}23N1{>bg1h6itJC=`W~wn?8K8fbFL&bwKt2%1L=74BAsvw3 zWcy0C_aYNpD)aT8UB##cJv(-gGi8yVk!$L*NwpUeUa;ktD4PkbE{=n(l%2M`lSLN(uq#-8=Q4FXp z5_W+Xq>rV}`_BT>Y_sIN1tfkt&WyHoHr6$^v7#4gA4N^FVO$lO8mvNRXJpq|r0qfxIKXLD8;LX6Q6Qxs#bdbH;<{c0FC2LvTCPgAWRaND=qJh( z{v?;2>a;o7;74&S0h24z1DqySKMZx>yu5f_`QEKeDQ2A5P)Kr_0mReCuP`B%$*v!Q zY`Ki*vg!FE0dzH62}kZKkpKq_Ah|5<2#HdU`UVF*%wi)s2zkwSb5 zEx-&{4la+Ett7#;`-YE+MrvNZnmQoS*BABDaJJ;ejQdvyF|VH7#{9rfIUeV)eCG^Dj(ay_bFU+->qZx2%gN8yKk>-ZFCu zjIf6lRSBDP;T`gYd`_Bj5*lT)MdkY7W_HdOtM-kIr6#?iQ6U)A`c>=#YSOm6eOA{o zOlV^2aTZBuv85Yn_kqg%Y5H~u@9|fW%RSVY$TPX^k=m=Gg#iTGqXaZ`jmJ+MZeX8O z+NrV~oWdai)q(cpq*K|FK*Es)S3Bf63uJI@2+DKy#QB;&lREZI>s0Ij?jD$wv>3m4%SAuOu9>Nq)P$My22b1@@Axix}g)2;`plf)PJVs zL2EBwz=0*6()YNBM<)h>{1*CsbdEDiXCSiHcdcd*T4!fn{BYAQYF8Nzd(%&zDjV$> zY%k=oX3d5t3plNY*vvu*WHj$1p<&#P)Y!3Xf3=;M#-H%=F}5QT@kmCxEdG{;bPCb~ z$&z3L^0h=Dqfrfygghi79zBzv^YALt0m&fjkLmVNE&HiZT(pe~X}O(5A95B+ptPNi z)*Bg2A95dYXc4l&_U~ysCpaRshciB-`Zfy$7*S4r^UdOQ>xz?;i;LH7OE0fx;x*Ra z-j3F29c`;_sZs%>n_27|9l9nw(M}zjejW+2ZQ#5GJl=MhK={LIBJdcQUlVTNR0AmcqUY}AFLrGwZp{3 zxCas+(&HFakkK^(rXf9!@W>N!Kq?RUB56p57yxp<){HJTk;x7;WO!gE%A-jbXseEB zS`x)#%Ov4B=oE)PsX!J+E=rbq>=k~!z3ioHI&xTZ$otDU60<`QXgj_>8J|Wj*KDPp zqy0X0ouhbL?7)>q8}3p|xN3po4DS&P`M|q6Af4dQ*$+xkU&gLwWB_u~@yP#YO>iNT z5v5HZ9ZGLl7;cHNWh+_}qYqWBu}vI%=VuNJWn)npBzl0)(=d(%?LN~i#z#oYU(^DC z3kQ0p#3Pw}9xu$@$Xw*A0{SM(3gkKtcAgvoNiE&l!@sxgZn}K-9V*+vWzbJ)nPF0% zoDV31qZ4@Kd%C*@k8b0AFu&k{)C(Y^S)aEhL9@@ZQSm{|->V^gN2IbomKgU@wg=J^ z=?~L{E@TMgY+U21j3ma1Y2IJ**b|I-vG#u6yr<>|JO(N2V3#PwMR>Gaq(ba)5jk}j z*ZAm08su2=UoR{k>rG|NJD{hi!c7Y*e*>q=$_f;BA|1c(SS8^*1^c)O6OY>FFf*h#^Dmq96nwoBc9K;5) zKm3iQkkz5;l91AqP5=@f-wLjHse~O|I%I+YB8h37hJ;9f#I$=LG13tY8KLoSYDfw1 zjz{l9y5@?+w2$x3<>`S$Jdxn&O|}OT1?jpWNsDU^*3PioCT2u-+qI$v1;a?fN0^F6 z;TW8NwH3Se)8Ua{DCND!AD1p{!h=6~3LSvp){}B$VWR7{I5C27C5z3n4O^QyO~8#S zvY2nubk^U6QX*Zb5gN(duLPv&$lC^)S{(y2X{I3SlL;5P+i}~7q}K;1k=v56FhEYRwB!^qh$Q9h@2v#G0^pY z%D*zio@X?rC7-g-eObZp96OJ2YzQ?;xrUaXg54*Yn#NL7l6Q^74{aDFy5WmJ*GbJO zWIsA`_v-S zKr-KvH`n{E07w(sVpJE9Qd4`I4r7i_zP-;0=iAajj}?hU7;P(MW5IDLd)FcQ27MO{ zJ@8=}=DMn;?o4~v3L;!(PLyS!GZ&LBBH2P}$jMrtQ&6G8H5y7hsJnTmXX4Rm$S9CuNR#MAM)w3b1?eSJkRC{N=RW#91{fTW z@&QexCk;u@q!WQ?=^o4XxE6_mEs znY%fIr|q3mxNXZ3>ErLND8a2ddFagQLIVw$E43!}{y(d}oRNI{9yl&Bzo^W<}HD+w6_ z36b*+M~O4s?)Z_($9f`3IGoxBBr=&sNbMbK;zFNT)N0OMy~(L53oIE# zL+d9uvBc!Iy=lA4>&nU+>$(X%_Z`~6dX!Jzz~qU>H{Q^V|M7{*el8P3fC)#9C>#c9 z$ZYYbJmU2KW9)34qR#I;544~R32soExf>Y6K(v!UK-U?A83WsZGm+4eqL;yL)?FT( zmd=jRX~xTKtqW5wH8>S9oq>}WM8R2bW|@Mcj2W2=mtY=dlij55YU`@5?ti)0`}6y@ zKRaY{_W>F~RD>6w=LbAV(v##K(VvzY1RC<>DAWHzR6~!2#;;D)%2x9rAUWNWT%TBZ z5g<)0`GbO-k9TNb;=BobkyvyIa(~o|;*5;9^J!^e|KuOO_u;#b+DR52JI0LU3FESs z$S5A0-=ND*K6PW==($rPwEkYbO>`aaWdmR8Z0(aI=hb1f8~V)^7oDK?8b>+4VoDL8aA|4_Wyl75*LWcs`P0Am z{zj)Am6)_NWMfm^=qW8=`pYZ-={s+~ef7-^R4Pu@?J?3ksnp_${kop%9kdq_k3M|w zJ+3BwVjR*8`zzXU$&>#S9tkPzfcI}H*%0ge`~QSNgiRCwqS7)*%88T{NJVe|iSzEn zE=IeHm*M`gwdeG?lIDU-QCSxr8*Z;aYIM+aoKbZ9A@tjO3NLM39nySo*%9B-;aDRSWl_i$kn5Ty?l zV7nu7-Z$2}wPaNs!_o@ZbzVQ@%J@Rt`pi|5#rLkf#pOTFxG%K5d0U5BQ|%p>Yfp5c z%UHGdUC$FE4=Em{88r^AGh9IUTg5S^F@LIawWI;zkb6r2Lg_{|Lrbx%n62JiirCoD z>^)On2=i#knQLp}daYgDu}v{wTNoN9o2@o=0OnCdDsc9y+J2T?&Eqx!{yW6{)JLz& zU~~J^t=PbYOop06GwU46A#%HL@f17~VTZ50neOB4EJ(s6-_fK-l7nYG2?iC_DDbu= zo_j0IV%tDX7D!jg_BEuxtP~=1fb29FcWOr`fxJImIn0?lbc+J^=Kz`AIr^zUMsr#s zb4%I=q=P!D|7`g#XR#5h(-=2e#%`wD_a$xNbN8*AHy`(`Os<8ATG}=ndXC#sI2fics#Ny1AHfZLbd-b)qkTx=N^YGX{oXHHdlLS3?@+w{Em6#`enGvNs`e)?s{UU;{nbajo zQHrwHi-J;V*?$^o{LB1yRzE*g{0YSlmCO=c6yS^3=arR z6++kkNSD@Pokz{@uO%@a3XoP zh(jhsF-?&vNVm_~(muY1^nrBSoPF}1>?}1ledSo?S#{9;bPbu?e3q*rcLJGvTh5QN zCH`(7Sj^Foha@@=y=cbd0cz1Z&?_x zJN%qmGp^gj{Jx3lMd3)mYHvFc=KRf6YsMGC8}rhON3U~6h#Qos%(@@E!g5`1?UN1v z_(*SWlGFaFxGXoy5;@Z`@Q~(;_c+M#qrd&hJ3nIh6y^I@KmX=``wiJ2#V^18`Tzdt zul^bse`EZqo}vdrVnE?ttgcdWTP_{iSLzWgO+#K@&ctSxnpBqZ78zZ-)^H#eSHTZC z^WFVl{+s<>wOz0&D5dniYZV(0M_0VjKPeaWTYt0vTi;?67BkrcDHcSc{jmM2Qcf#9 zPPj*8jm*$dG4vodhv;5>tL4S{#!5$!8F%S$WqbBE2V2!|P!XuNL$F@q5Fi^2NFI60 zo=kEkJ5VnmvkKAGWIPgcjkRzTkpFKd(wzhMg6thYI+KkE$lReCry+MvdF{}U*6MSx zB)_0xtF))C328*Q!ZiveZq11rCWu}j^>EV)am!J(;+`kBwZGuU-6m3#uqSaC+FN=- z@sfmF_{%GA;x10CO;SD^)vhW1Q*~OdLf+?sda=GgH^(EeZZ4J>Q+MmYKq?-8 z_pbQ*7scAlo^p7G8uCv*uuBUN`PbjXl>d^PjL;AydgZ#$MJL)3D~rN~4uM!p(gGS) zGq^FBoNZe<^r8}56iRPi%WJ7mWbV^b-cbvYD7i21w-AMI1WfAjb=PTu@C)V5^{4{& zx4sOIIwodk7~+YN`uYRqm7%dXE76Y0q3q@V=Lsk}K}nuHn;^7CTn1}@|^eSNuQkg1?1C!%#CWm(Y?-@V%WL7 z!fzON&AI$HNsBjZt&qZ&=#|dNSo?!EJ0e6br47aPIK=r&TaC|Y1|_@6)bqJa9FtFO zD`i7g^FztLHLfhIqZen6zHyOJLwrbSVQaS_`ADzjF2C_jUPPu6`U>pTk4e zZH){J7+1ezeew@6&%eiC{P{P2`pHiPqjEqp-RhwDcNAl`%4eMLC^&`V&)7@0KYOST z@$NlGX=ko49A7!kz!zov?mKyb{zx?5ex^eiA2kJa*|Ie@3yDQV&a5=EW?#hGeqEd8 zng0&1C`gb*w7BAODp=mKYxkb5(UG-uZ@YG(*S7PMHa0Xi29Zhhqq=t!5-hbvGEq5F z9*_r(NNU&>duxI;_Lt|Ag%po2FOImxxDTWsW#@!1inM1f-1f!s82A$=+n?}~d^(U2 znUjai*$?^0ClBFJFg`g0Z#)uXGvKu~+Jj%WWimcFIXQl+uJP-~zfRS!v5Az~M7nQ& zV)OYsH#IZrj>wsAe6r8kUg<4>^hGCXu=$Nm=O)|k-M+fP+$q-{G}7RS=DgTyb3rp< z=*QPCOs;V@_3Hc(I%J3hT`W0_8^)|b3gdU=_PwLpI7^LCIdE!qOkxvZ+nx$o^tP1# z=0mfgAPA6pVWt|z>h)BhzyO9Xk7>NNtfFMLjyy##NUHdicH z7Zv19vCn#IX}ypC6QrXk#UwIDSQBdnNDVJQWVO|5v`bd$$Ab(Wsp}m28 zTF*2A`*gDpJgPg_H`zHcjZ>4p7x_d4qe-40!sG@tdT`=+v?*ABKV*){-Z|uDI684E z(um9{YG)00RNhK+$;-QJN5J-Be8_Fe2&8dzbP9{QGG0(WGc=T5U)X9q^d&)eOJO)K zil;BV=mu)M;eYRpjfbQ6sNhI7?6nCL$Sk;aWw&qG#rjK5K~UBMdHqw#)6tp1Ja1h&5R>HkJ691L@xVcJZdHz zBVZBDV};nay1Q@Px^#0Jh^98f6IV%+#nS6}rPLIG4!k7FMpAXjwvyY5W{Y`v%h!(l z;!FSf`LDlvQCXag@T4j=I_RZC+iDQ6Lr4DL9BYBNh{4TRd5_oIHWYL|7`i>ju^})- zD|K~gnfRFj_#B$Q@^}BF=7n$k792kyiivUzW<2m zhMRQn({hH~WmF53iuJ|JoLL;8Mz9*Kt_jBV0~!q`?@wbYE4GO24qv)-_~d#zJvSU5 z&Lk6w>EX)*l(dQVnH}sp0gJB_Ib*GCae+Kr^&$-rk3*xvp3nJm0wQapB_)YeZF_8; zjiqEJ))uf8w>Q=|`sM_sd`dZxn6{uLAMHSIjhGyi{Zf&}^rOrA1e$}*B}FZ?=lUjF zl^P$&9U9X4kUon(kdj;t>A&95>a#;bcKvZ6C0U!DlZZrw z>n3R)d;7}uQ!FGkmMvEQbAYrz!ib_y9oj*)ix_c0xBvC$-}vN*AD{@KjtlFb(A@LG4}OE&Xg!LS<m9&kyxsvompG-y~IUGLrH5 z06_9BIN!y>9`*LtGTEw5a2naj0HnP9)P5;Oha<0XBfFNHTZ#|#$IsWs)8WmvwWG@Y zUwv?73_VH9c&bBd@zpO0kZPeg$PotpiX3Fn@;wLL1qOJ8$kQ*CM?!n6icSkjfOJIq zCfj&)?PtDuF4+mBeqZ`AS3~N_SCxiiPTJ?wfb>TgBsoSqw^rjjk-R{qC-#SNQ#eih za^dqmkBvl_ytLi8wK+lH5w)^9`RkAL~zk8vWU z9-;E?!`?@r*p6vkl!8pHT6}%^@^W-A5=bQYVa^m^yY~3bwT9XHy!F}eP<%Nvcw>2Z z`u=b%GmIvrKM0;N;`}A{e13qyE0rRtLqiZu$;BXH>WIv~K5>7rqNTVnFA(c^p|&?Y zOY-*K6^c=Fir9wCO>UUn2#Zcb|j2XFoLkgm*vxV88GTIZ(?_m1mw z{;3*om$P`>WeRc|9=CfY!}GW2!&6OCm)tRO)BLD2cX0f$?bS2&$VJ2BE0ar8b^q~; z+1VOT4%ID8%)Gt6uyPnoouOB^u0g0H(X!efAv!(yk&QHrj&9{g5}A${`0sv;j{mzy zzW?UY>mzJAe&ybqN7sW$SEix%AfT8i?$-`Sd!yM!$tib*x}sD(n0 zdi%#m5HP%Zry;nZ6vQOi^b2J=I>%S*TTs5LSz*S6r1t z6%Kd3RKoc+Zf5|b#B(9dWItWXwxHVAi+a@(OsGxOgA3+SWf8~CAq;mIS6PNY&0ZDD$uU(?+*n_Le*tsfxLbD zO0Vq;2a4Om#hv=N`>O-B9hVp5`U3K4+#ilZBn=tlbI7Xe?*mgM?Qtas&gjg32TJ&| zUOM8i5I^8CVQ)b3*=urBN4X1oF(kS-7Dy*M5fX#b%X zS?)*Kx%;Ma4E7&3pZQszoWytzjGozc+ba-5GHa*p0dZYE)Mz3l`Op5@$-tBg}+A}mj;)ukG%Bx##1zZFPu6~AY%zgl@qs13j(v`7*~!zCj;*O zh!wDfqXrOlLj5BXJ5kfLG8s-M2hQU{p#Xc+o8v1hlN8ooIrjq&gQwLR#~ z)GD~`I$zr^^ZN*o@R8+k;PYP|*&x`jdHEis{_MlQ$FuzAH~-;#>?;FCWx^jFdGG+M zs2~`HMs$>kCxbClNduW!uqK#k4fgj%iX#;T2P*US+_}}gy*qztbH1-6lv*6<@rgeCVO^)Aw;?%-0cNx2Yhh%487FR{__4Yg84NvO&9*|tqbgeW_>58|E|*m zbamrFZ)~7z|9)i{+EY?;!YXxFNgS8Wc~@4NRaF>frV`nc{LLTzf9 z0yopvEPkB2FOivxncOtG}?b@3v^1dgbCPn#tA$ zq3cVV6Mb_>{*C1$@!@vaJ(AP-YPBdH<;e9SrNn$980w%lvx>il()Yjfw{L#`$cK#f zJp>gMtyQT@j+v(hm2tXi$mL8+d$IbvuP?-RzcrE$K9m6rCD<}rGf7z~95 z<#kK*bpWGiT)d1?M(N>+lA+`sDl7t^Rt2(5mG9AcnQI&jCEphXDL_s~V?(N8Z_Hm! zBQn=>!yUvyd}=b-!+cVMt)?L*%8(CAgJZp^YHJ5tWmQ=y7>wxV8aBI-y^uOhygRR; zzND%iEvaSB2Bcp&+?j{WP5o54h$b6l=NM|A#hfEGh$+Zi4e5%1*lhonS5|x?bFa8d zd?cM@qOGB-md`54{*vW$tScNIWwEWnLR!sctCjRQq~6DowuvhXqlZkH-ulw<(Me$3 zRFj2hHW7l_X6j&c9cLuNzuNRFdANz8-U0dlz3K4M_^DH*hOUOkS9F$>tmG;BbUB?A zzH;@*aH_X&V}1<3Oy72SW59*aX8jH_b8)<{hY#V=pk%A=`|m#d`0ek%&$|@I3_yh- zIgdt7jwNDVlDplq?Dws;Vj!MLW{}q4P`Ke_Uh$s1hMsHt_LQ!amKFx)BWnMO!pib; z92>oeV1ao?fKu+G}ZJkSEv{8;Ms9>sS=wpT~aU<+Z zY#fowxX}uUh9hdxoXEjx5&^5xvo!~)9hOuctPa*x6v>Hng_>uCBn4e6Z3TJmW|F_o zIhRLJtjdPjK99t*u#|F{Y@ z)n!%r&)Shg*9>kEbe2fBL)=r5pv5G}($P2XZH{hV>bCsQQrl5Vfs}9@#wL)+c#W+? zlZa$4VPm7GHYbLX^eRwrJ92wn9p!Z^OINPmyFTI$Z2y1E6_%;khBgfY`v9 z%k2ao;=r_{hG7My)ZU!xz>IK<$0OhS&+Mb>?S1#I+(fi0A1enAE|fpAp=bCxQHyO| zyzd#{`{=$^TC#(E>swo!dp1i;PoC`A*YJG9$?fV00B8hrQm8MJYrg6*J6w z98l(7NZKHnRTQm9kOKG#cZZSBz}h!%1Y>h!X{R0gZV!EIZ50|dKM#}o!MK6g{Hqf? z154zeQ6gZF$XmJbNQj*HO9E1@6$WGjNTLqwS!Dr_zJ|>9R(Rq-MEpq_mxPp*=jI{p zIoEysLmofpEVctuEIM81smN@k?bouMWMOnehz6tm`HThG6-C9*oTL--&`q04aM!YJ zRW6HgRdF_>{dLu&>!#ZJ`{u*r$JHY~wRZFhiJ7{?UwW#jt;P!HIU@F&X5T}NE9ga~ zfETe|saP5qPick4#kVHzgBl2^6)zV6h;$+u>D+f%)bC&Tk<~ibg zb)upE&8>!TLt#Vd$$f>z=*r!t`|8uNsEQ@=VI-4@^My+>j^wrVDxKNEE9SM$Bm+I2 zK*t26nKJK3=khVNRzN<|-W!9+Az#ptNG~CcBJ|<76iZaS;ZJykNNuqoIi68BQt)5} zF-_IpgO%kkQ8@H^D-dleeWu_*RcC#^!kvQbKuxa621LJ*?W@SF!R8qtb8l|u4jXzr zx}_C=#Dx@!E?6-pT_)0~^pVUSDSjG8f0RaLLjh^4?w|A5@41#~&uZ%`AsOti){QKX z6`IG&j!!Oxxv(2v7?IOx{323~h}=h4IeEcyy0wg`3@UCLHKHP-?wz)#v?ho41dp1px9gk-Cga^@%Mdg(T%jow} zl#LH*LfOz6?v`Sg^f5E+GLaQ7@53)lX6?-TAiD-%l5LG4@%Skc&u*-(f$1D+s>W?esi8&jGhR0p{u(mO7v+M=N-A^MqWo9&y6gFyTJOe|7gxK-D9992uZ<*SoNHzw9D zk`Y&!V?0vOUYHn*_l`w6$sWz19{HmK4#DNsczjuEPe-xTXTfh1pC++`8_0ZY7&^q` zWgZ7)Qd1C=go!gUt;P>7V=9$d^=9NUgwM<3Q9uUr_Uy~AYRTJGd~M&p-GvR$@7vu{ zk;n{ImW2`-qDTHEt3aqHXpwLR+~IvW)j`lCFBQK)@eCwFB|xeVl7Efz&SlS^ygxjw z+)!_9%oDE>5+H|%`A?ZvUnZ)-cRZ^`TsxWsk`alT&&ndz(P`qI>dNw>Kt*NXWsEjF z%4U=BLF7vw(8$dJ#AP7^4#=#HHW+iAND+y^W4(OH9L<=k9gRn~v%(K)a)A_De!<#l zJs-(zTcp19h$}Wa9QC1zV5rRP2Oz|DE5*AdqLRlKZAP29){!-qE%f5lv0@?2;@6c| z(Q%FL_`18YiHYXTfAwzIpct3J^JB26VY^T#Yg$TauFy_3tpD+*@iy7}Q8h#gNJ-sR zTVL|wgN-(-+2M(a8QMB}EtG~qGBsFD$((kCr8mOijTm6^-DIQK?RokjLiaEeCY#kfA%lt#ILF(w+p zu@_GQv7T}&>Y1}BM`p6IT;4@u9ud3SURBu~9L(VLSG`=s9ghR2*_}%=eD|N3SmCfB zKTshG>+6lkrXD~<0qHkB?%>e}5~0`gX$6^UvPG6B;tmm&{{9L-CC>Xj zaSRK{AdP1zNSiji=``f67jH>kG%V>f+di%yadLr2V(7=V>kE_W+~vqMVF+mX`z=hD zs;2$iVHPvY1~d2D+wV`eGCiikqy9KVneUquZ#IpWOsHWn7L|#f*Q|GVt!=$8i3dgthGL(gUIj7=T$CBKh)3NR89E)4 z(*z|l-h2eFmr+#mT==^1b!ZKeWnl=oq#{DQe?@2Uo_!6arBn_n)D&0LBodKG6)JK% zg(k&;B+sU5N(PEx9FYfLDqQ1et|((ZC2#`j0KTUt6VA3yqo|4Q`2=mEVNUT3`+y%> z#z!$2A4lP6V0AE9bFf*h;WSkE0+1?X!{pf;AX!pWUPTb|tarWL-+h)>&{FR#u}ebk zOof*`{o2)NOhMMW1MWQRUzf zg~ZtKLj6TZ-g2V0pY1z6EBlt(Ce$lCwsCZAb7_2JoaROL5TC2F;&zU(%na66p2_bY zllqWeEN(z8D!=I#^0Eg*k@{vEX`)7@CaqUnF*HPY>hXwv?2A#FCLf)e>l;eK#xfr*-+({^Q26$ueO9NF#Cp?k2$N=H)lwmI z&7wlZbjm@uCR97FDPhVWKfm|k6tr}9(h5-)s;P{W^`n<$unEzrGE!AeM59S! z981+G^Mu;B#r941A2$17QRFNxx?E+pr`(t9hqr2sh~r&qtiWQ68oh|aZTekS z_T`}`(Ej}ipctE27$2FkTSweHdhH@t4BZ@}#2vsM6-zbAWtpDfY}?dIlXvUb)gbkO zl){_FH`g{tn%wPnfUF};zCP3&9}6#?8l_OUIWfXp6p#ntF;2jvZ@0kABmolt6CjDz<@fQJ8IH6HUZ2@WekSj{t!{ zE%<{-+SJT(z1$v;CR+95l!z(eMTQ6bOks=0ca6xD@fbrvkmCVKKBK)6L$W#I6r_I% zwmeW0IU9`z4_21Ee0tYsKhxkWHayxkXA#NarT$qV>9>eyLz|tQ;=()&dbTI0 z9(@h@W$}oH%mvboFnGMV!gV(H{RiETPmaDiF?_vVWM;d#O>^xItrd5!^^}tJXvizv z++;-=en`H0nL2|*GuY9s5ypt!n881PTR=J@-Q?B^GY);p6kH^m13Km)7$ue*H)eSN z#|3a~)W$!6l*u05+MIb1?@hOjW46z&oSHg1FE27om%8GXSgY$t7O!z~8CFu((W^l)0hyHhNW%hx8dKXHnLhMrhVOV(yPRmvO`suLv5}Q~_f`dK z@*9ea^R{n3-hSNEv!|u7lstJSdXvg(4IeA_jR;H0vS^Ib4sU^4Fcz1Ws!v1lmV**1 zWxvTa4HMYw1Vc2Lgt%yLN;z25)h@G-cnT5^Lyh90>OnqN65$bA&v6CbR=dP759+rUMfk3amqTwwMZ8lUA2Y>-Jrv_Y+D)?j>aQWhpkS= z$2KNcw08;_Z`)YkTw-^CF0ln>hSK%6=KPnTSVFJEr3@38}_VYX*O1ZzK^7hR&X?LHm>ks`nP;?J6w2dF$q_ z?K_Wq8ctp--LpGC66udr1uGMYijq)NnTj~WH#V#)b8RY;awKTdslh8%7(FU!yHH0O z+Oy-#fc@JhmYP4WOt?PGAqkJxfNXU`KBF6}{3B;E*avlx0VeG-aUdWd(GoA^7x8T> zscDV2*3cKjGL_x-oW0?tthgcBkMIW(ntaT7`$%dJZ`Ol!7F$62H5tK}>puDlQaolY zwm&K7S|WMLso6l{SzdBFEsRWuCgPv)is9Wf&(`O&&tDxQ&zF|cF0IB$$u>9!BK<8} z*NAE^An^F@e>VN7>W!GhYiwE>r~DEJh2Fl-7LB#qy#;cSP8585qh3wpYik!qkK6J| zqp=Ab`+5mvDA|m@ikw>+2{Q!7^6fSYwP%Os!}+L6jP&d}wdKA{ySHj<6+0Lwu2@tR z#0lz4aZSd$a=hqp2 zeCBcY7jU1qr6liMdwx%0Wkr9ao|f4}B)=*cGp2{*t)U=Bdm1E@G0TPO7lX05o4-bV z-#0}m-q6njwe2WuKByNSVNbohhNS2fj7Y{h;!zMnlFw250yrE*TO?T^rm=0!6rw#U zq#9phRlrN-HG`SKz4`c&FljhCAQ2H+(vK_B-(T@08SV*s(Vh|KJ{FbN^MHo*am=QAqP`L{MrzYjeFXhEs-S+?*O&K{PsR;f|?Ae=Pg=U%Pm{?TtG6!=3Xe z?HEoB$LAMDn?_Ce`$pD|E^TRkknL|aaz=LVSgyL{ivzGM{LYVe*8 z1d`^<>i>@8Z$?v>QJ6&0t4RufeL+$`Nq!*l_!5bznP?2Ha?fRZW6@wuC{kaLUr~O# z_y9dV&y-$bAiMh(UGtCcU>^1~I` zsd2-i>WpO-<;)sqNs^+<6!dyYa1luQ5+v2KhUguvP%$?uVT~0?RHYdi?!6$HpcT@^ zG;EsEP&V9gr>3YnbAwKVLNnO5UECE8ZD~cIq%y*~$$o6N(ddZeOb80n_aDU~FV19x zBQHB~RQ@rm9|fdSkdDWvHFuyKwhN_8=aT z+dWI`fx;e47-hnyChRE_)5t$dLE8BA)Iym3jgQDOMh+~ELn2Zq&^&AI7N+R|?a1=c zzq~#Qr-**Pv1xRQO-{Z2lcOw~lAPn^)I!?`V~*of4B-MK(Ke%s>tUW|#)fP6zo2&N z>Y&2r`?!PmYX>rP#1J`Sk*Al@Sg}NM8DkDK)2KumzWPW(V+J(P*VlhGlc;7+!K(+< z1VTxgVDWc%=a=Ufkb1m%>m-ek> zlmPO$neIdsqLR{+`dpxtccyIr3!^}ijLddiI3kWfm9T476U`Fo`u?r2B7_7P&Ls^_ zrKW7J*LddcZoX8kesRL-(?T+IBNiztq?`?puJ^1M{fJ=V*#;S@Auh7Z?<#~tBkwH{ zkrF*-p_Iw?S=1{t)jaq_8jd>@Bs}^{P>e<=Zk%SPj?{yDBW5^is4Wz!EGa4`TW!OJ z*r_j)fkbZc#NwXDsr8Mv(wiFjqQi#)e=W-sj#7?X=6j=UgWO;0;n@69Z96j>fiY{0 zO-nj5k*|%s6~6E)+VK~E{(IXP#P*6nY&khWAX8^F3da?A+&VWtg@Uw&xDk#x zl=(rW!D(>f_-{obfrA*J-};&SywYoXdb%%NyV-r~KOi@6ec|R|ra6$4yRm;Ik^WHs zftEl?St6Q@@)MpgB?k9|Dyd8&lZr#596=&~JVse>3tJRhNm8}1cPQwQIMke0}l2uNd*Cr`3K78Q9K($|dMqmQG-Gl-q1aeWmINJpfl zbo{Bqr&XlG(EpXa^2B}$YszRf&U>D9KHK2dd9#JfxwTb0`jp)c0bCgSKey7fUyQf6CBT}+1}Jx zODUR{Fk39DyuCHK#-tZGwylSkwi?>zW4GCKx;a}p)WPUsEj_O3*+6qrI_QQBbt-99 z;8Z3CfN={{d8FU9mqW- z!Ef3A!dGr-aP8Km?(O5mHh9xL&*V3>a1ARxn@`I^IdM=FB^x@ZXeo+%#IGDqCWobz zAu{$GdIqHF!}G^p$BHBE2t*1^wH|eWBuyJM5_*{rci<4kNN8Qd&t5bb zp@kZr$ODD=p0V#94hz+v`z-Vo|FM5ezjiR13FP)+Q#Fn$V5n5gL(3?!H0fYZn&UCT>4$=ThIjH%`^j+(;$}N+D0> zXcH8uxthF_JpiL43vFw!)uA{oP4o+RYe`l<2BsipAD z2Kn*LbZ>HEYGizKCRzK!3nyw9Gr=0=eDK(SAR6yz@9m4F7Vi&C;}|AUiWp|{=Q7cn zPt5f7hZ1xZ1z4iIK0D7J4BlA10guyB0-H!xH9Nb>gBKT4m}$uC*?zpu^CdQ@bpOR) zXfS;nU*)kJ>67{U3R`w{Mmh_MNjg_GCt9T*YidMfGQO;GImzC*00g}1=Geds9ZH<4 z7g*ZbfF%7>dyL67;iy8AiP3qv3nY~<$wXziLZBlf>lLueBBAK&bfUQo!CnU{YtWKR z!Mau-5QNEs;*#oUbZNqKK ziZ`CYMvhZfImgVw#shX0-|bspIEA~2<%UPeMK8#4L@F5nwrR&x<8NI#x^V8Rrai?Z zi;S0Uw|6u*G&R~gvDlbv$vGmY$*J)+0-2?)rTNrAdTC{4DxB>4@`=SoaO^|I_&x&^ z8WGR6Z;0q%x;oNaok(V4)xkL?RQQrS1v;?a9n}g9r zH6^aIgTVx_#WGP@Y=zI{BNLHOB7UqkhCz=-;{wtZtC>vvzl5FtZ`1d^?`=W?AzL^F zVtUU>%4k^e?j=iLthvd`9DR~ccT`015rGq&sHz>D#5lWbqc#jx7ui*0)zJ~{a*us# zRgQb&N|+xi*|MTZ`yly9?C1VV_wjsxKIRjTJKa}olY}-9<-zOw7nWSm?*xhD&PAok zUcFe;g7YoSJ@Ji&51rZsNA*;MzIwikl0>&*ujxITqZ{UZ^5Fm(AiDmsj>1lk@^>1Y z_jUxl9~>FbwJ)=OuY05>fs;Zjn~FZ8eA@LN{Vf45kbW5B%WK`}hBL_3!xU_%`do#{KLFyl3B06A-%vfw#ltAOdhtoN$Rk#SEriVwxY;{*iOGYR*uiw16 zzIUaj;vvW1p6SdwTMjAS0H#kRi=*`Wo0~=JyDPu@cw(Y!&#})(VmGc=JDT^Na6f@e z{BxT1d_}~`#7ec!RCN9Rs?}*sjilas_YzgV6%YuK5I1E+(tuyCX5)N_I!s&`SE6w# z94CZPJ9d@dVGkoJ3OX`b{Ld=4VPF;>36Dc)3dYbU$L2=+2LqkuMsE4rbVu38ufKiu z-!9(y`8ObW=i*tDu|2W)XKsV3tyC= z-(SP6-3^Uh2&HDPu584~hVyyD*n*FODi3>YM!FgAvnxHW<)ASK!z`oCqj^JTfpw@8+b!9F4%bJQ~rhE}lSn zijW)QZPo<2-QyBpL*he%Vy{~4p;0`l+4C@v{y2?adyx})7|I@--HWFiU>gM~4XIA? z9nE#YqT6`(%|)!W6M3lPu10N|%O0}W6q~>J_xty^;#RF*|Mc0X?Av_y+3nl6?aw|J zj}ZF$egc=_p!C_N&uUj5j+>biBYCX^40fW#^PbtP~jRTk`-dyRF>2^M+}%) z$!Dr~jmcHIgF*@5ESDI|AKS>PF=ID8x;QtM7z-XdI&z8{exQ^7>kKzK8Z&pknSS*u zednjIetPF3f!t5u>qNdbsV`~+oo{!BPcNUIzxK|xYp6(yseNOpsgvm3n220j#fOkx z-cqYkDlx=Pp4m^w8O1Atxwj-{*dSqkNAq-fa3i#;CP85js|G4-#kqcRbwS|@Uo(kg5ZU& zjy&bb*btplyW?ZtVd8l@A&<;|5FAvIhDU%#$Pdn*ou3?Ex_f?JdGP^d7Cjn?Wb`Yq zsLN9c<4&p#-K&pB4=KsOVddDX9<{&OV9i=Hbt4`a zp2|G_T(*b~i}&hAWu_xRvbrYOKXAoM;&& zGgY>VmH6!X(p)SQi)SHLI4TFZxD=b~pO5n6idxIp=BJ$gspWL~>u)9+ucjN*cV-$7 zFGgOa({~kX1@D;N0x$qcHV`YUf z3KxMVf%cr@o$qgba)|&+=31@6g3%nFoxRG@!<*8PvfXB$VogArAp3hp!L)4&yG`0h z(nWIgJK9%w8!-lk0U7zQ7KXmN>( z6oQoIl?mbrlP;7Vk{*ygi^A~}4@YS1>c=-~hW_F8H!_i)^crd-6riLYT_CkhD>|tp z_J0#aM+k*~j<8aTJR|6;+SxQ7}8Ndd|H!tKxGIJ(ZHHq}4F zbblt13Adkqv2FkBZ*mlPSlUDShbZOx&6s_h&*VDbC`t2($Y`fO>~#8*H&*RV$J+Yj zdVXpu7@K`-3pX%h*NVj^eZCxiqu(qU9$$(jtiD7hGgc1A+1uoVR$7!8G0deh^p&e> z1WK*OD^#9ie9E#)S$ZkU0DW>KSe|zV`&)&b;X0|)<(bIz!}l7I_oit|N>8)ztx-(> z@|zjllL!uTt+u?}i0mwDckA-;N7)_*lMO( zuN88f8_8518r#Z!(YaVQZ(9^_(1?i^OYJIaL*$|8E@#_f5_1iiGzC>s@yyafwJ%3d^7VU>T)LQ>;V(sl zQ!c&JfX3YL&al(DMqk?UwW%q`8VL>#P7W=OCPI~XC{a#C7u6qES<+Pxc4DcYW9j+q z>?gBsF5IMd#GjzNap~&Sn}mHh0sA{8eOy%a^bmFyJ+1Ra!SwF%|3HXkDnTN z|9wg|s7QBN>5q<}FWnT-;J|q_=qRJ)=g*#}(NRt!>`4T5LRcaSXY^@(1|+@aHe=BP zzGgHW@Imy|2Q9!|X9tV8bFbtud`Btkz-3o8XK;~{?G{T=vgS?Jk}e<>iq{m0Sv+$B7)IbSMhtL7MB>M_Cil zKW`c(`obIIqXgLi>E?S3kj6TDTGBhi=}`%&2|>w!7w}m0U}R81s?qRxMj{@OH+k&# zk1-h|@p*L1*}eMFh|i?^ZFA%H>Rr>7?QcQw8+bo^U# zdT${)?2IA)Kq@!%#Cckl9k6=7ZZ$vIh&iEoK@lMkPR3PUpU{!TwCkw zt)|^>#bhC+8ng1=h+2G(Ao!7ZgTaBhjk_mhu}#Vc<|JJJ5$Ha2op{W{ zGQms04`B|8XR3X3-IMS^4mC7-K>DI~o;O15!!(+e2sGGvK$^oeUq_0y58u;nX191q z=`hkC#rL?dI6wUAAsa2UutIWCWKN*gHj6r{3z2w?$Y%p2KGpeWevdsi98;PM zZLMXkezv3-91&PFzw!$}a(QDt>2!vj)RVPR|8YC@!s>|6VsmB&6AG^#ZwLHD&<+8=8*;-_$ zV|Z*3S$7%}g0V5d_Vir3R&Pu+oGTwrPj_M%D}e?sv#4rlk>=V3GU8d&XomZE>8;t>cQweMhxn696rGP})lF_Xf}|kn zO!6$YyF7QCA+OyRLXzml2Xa*HkVE5NEnPS}f8=e7hf;~8_kcXPUdpA2DViNZe z5smQZ0eNyXdUnKN9Gf8f+fHF~=HZ>!#q2w;h8R&&WlZ7{~s+_RMHUQh_{Lc}{1dB;)IAv9kH0N;V-;DsuA=21v|zGr7LhmuuAH zH*aQ+oF0tdxOqTBMB6DU`awhGlldB8r0bO%-($G(M+-HYE=urNU0a#dvDthzUZs(u z8b=eBl>1RDuLaaVS+x+F*UHp>3Jp#`?ET(hKV&Q2Mf5Q4M9l4m} zpnSdQXveMP;QZP)D!E>_n?%_4V^gP39}hV5^A6LABcy-&${6e_HStV%Y;-Oh-^i)~ zbCo=h=F={{b?H6@L(%9JXT+pd9gvJPZQ~x1+MVInbUmFB4zogqrq7UPxc&XPXHVYy zYGdf5Lp%~^gCxxsYK0`Y?i=Vkb$2N=CelRmYsF}&^FGs6k$!Por{zd~`+5;WeN}Is zZj|^q9!mMV=teY17s%eQMlklONoZ95QKD~FF%2_oX1GfZK1pCmG>#*-`gpJ}7(6>V zIYm0oMB5SGE)+as! zq-{R*SoC-lklh{QaA+QAL|+Vvu;{ywUVPnqbRF?qbA7w*ci{FKZ9l>WNV$+~@jvkn z(c@H6M+ff6ZA4z}oS2-PCxi@MyZErX5LY-N;!$2C=^uEkk^M#=KKlLd9~t}nRKm}Y zPTDJ2ZYT&=SFZ0a%IPx-vV&l&b7IX^ko8if(ylis$lPCP1&$=vZ>^NAYP^N-X0&O} zip8uV_~uGC_BZTeXA>X`#ag@FtlKaDGwz5-yIjg+of9ZZ5VDN1E)({Y*(hJK9azNH z){AL^7#zf6F_NwqBMtKI1$M0hB!7xkXtwn)=;;^iNd4`VXU`Ztf0{?pb4s`Xkogv0 z4lOy{sqwu`0VhoMJ3)*4j+3qE2v(bt+;~PnW*12Pxa}0`L}FbVD|By}nhZof_6#>5 z-gSDl6@Joj*x_YB`Q7v`a0AtBcjPC3`MI z-6}PY1#GLPa2fL)nZ{ywCMJsY^mN^7D0$_`Pi(eZ?4NJ7`RDZLH@~_48=bX#L}Cd& z-%cviiRvdxZ=q@-J6CY(PRruk8szhn{8rh@C(4;P&FSHB6KZ3wwJ*)Y*Eh+7UpjL} zheO) zBH_^tc#WJTo{^kfShxU>y!DFfN&;n9Lq=a0YXUGR3PDmB>djM(k{)Y~96sUdYe?T{ z^Y}Y`x&}rb-EVbH3X)nV(}e-@9FUUi(-~*egh~E|i&z z62)4*lXi&E4Ujgre|v8mhhrNvz1RNNkJ&c#yW6+Fd&;?-Qd`50d!Q(|iI&>ReG=m6 zo8)ug$RnSR64zwn8zg*`5C=$)M>olH|IDmeW-1M7?tG#ad6SOB2vW>8KUy-6W}&kJ zPxCVpkEWbGx1fD5p>dRmnSxb+u9|wzh8NC#@OA(ZkFSCJ=zV}xw<9kn7na5$(aZe! zHxoxiqtBxo)~K`-@OXUJ$8olcqYHw+_BEtWe$d@T>!p_@u$pw4?JxL3Wz9(v$oCgFE)1w*g9|AlnPV1^^CN6o8InFFZx_0E7wyya9}SPl zs9{lW9+1LUt>XdDNZ)cbBTt{kH`QaWg2adP!|ZN{g}+nfklB`c^mr7Is$-i%)Fi|F zv`LG`>EV8G4DhqeO_S&GEVV}?q6Lq5kX%mEFS6NbnN=4`D1%IJ1W8Oc(^y;ASK`r@ zi()U4KvK*(iBziUz)W^)YiWFZ_tIPUQ&ymvw{mIk5^bcDU#-~biH|$Y*v*x4z3B7k z6r0J_s?yb@DK$M|<;lvheYwAY?wWTBb@7<4xA69c8#32wcg#_FX&~tW$mXm(e<$^c z&?(aX(_VY~>6P~0pI&Y!uULicAHHkaG;!Kj9&J}4k`+AJQl7*S$#q`!u1qzKK~!V8 zWwx}rKoZRO_S*070l?X-97SYYQbeK=T_W{9HrycDZE$7LkU6^`@pwc4XPoyAVM?~OvcF)#@TR0A{fO_m+AgT7SAfYv&MwudcRQ9- zR0+oc_hzv}BU`hBZq%X1^bW;907l4t6N<^MH=FgGBh0vC*Cq(EzIge=rGG4ZnWp`CSfj0$Ah)f`h@sO0GvX4DDN+*g)=@@>_!gK$I zSOiM*E1$jP?FK}a7JP&4HtI^~s6DyxNOP~|pOlLO2O$(6RAC)lB3 zvX=08C0{S(D-|oJ91;((tP_1xEGLC+fW!^3>*&Hd#20ZuhdZ4#S zjXP-}E%KhgSgNw(mIfcsTKDoOBdvCd`?Nqlkl999gHQfP?;vQ-TW%tfA0Js0h?I5& z$T=5DI>j_~7-mu1;uw?-u(^UlA!D%pfgcCYjh~`wB$F)-DIkLalEz1r4ll-PUoaH< zfsKId^&y2LHamcs_BCU-1^4f2M;}L@N2CWySJYqOE683Ad4UGabL=Sn5p`^pX-*GL z9yxt{(C)lPm$)l#bFLc3T_o`!g`-ZtD%$>uSFicFVd^gMNO41%9;>|Z{KaZjW7M8_ zK!Pgbkf+J4tSlZm9_ULw-sfbS4!bSbxq7Q)cZfaISI&@4J-cc}{_z))!ua(RX-Kc? zy;;DZ*4ve=&7Y{GrrI8gWm_5ardr03TZ%L&)&g=V1vk1hN_ zi_pZ%XE@T)PO^r6Z@abq!{r|?=U;ALwpxEaIB26PUv7W*UA~lL?_`O7N~Uw7G`Nv$ zC(YBwMk}C^#YQ+}3tfsM{vD@6^RcB1@QGpFJ3uwxl=$jk7YhI20mMw=!fJBk- zvs8nwV3eq9(Vej&$PVp(#pWx9y(R%t5sYftM^A+ogGYXBG-P+eO9O|a-Si_mazRA8 zKBNyM;uEQ$1|9(t>D7%ruHzftW3LD4$22~UJn#K&{jj%=O}_O4E2@8d+??(jc1Di8 zbK0?r@BP$Qh=xarhonLp4i6&`sQ~BVv=A!eIVfxvCxn6 ziPU<0{zU)e#{Od#fa(a*ZuuCtGw^b0 z<(&9xsU{~uDiR)ZtyZpvnzUIdiRVBo29XW`)*PciNw5Pi^g1PrYM>e`$=%=?5|;oP zf6vT8GP8#lx%b26mzVPg?SoeShl7J{O!dn@5mTc$Gqex^T&0474MG#>UGUmNS!Joeh_zs>smzsfbp0^oFU8A6X|{X-+PFwZD}ui$;lM#D5nhSzcI=O`Zr$hSnZG zzsEG{?u)IABlU>6{#aw#A~M}tKghA~xf5MqwNRT{W~!QZEpHb`QmK~az}-?L54&6} zq7`joZXhkx1SB69lwax;Ye4CK!sa5A<Oy4xGtMK*xTMa_|x7& z^`P{!RNXsxxt-xNyqhT{D@l?+*=iLfnWRKsr9LSiGA|~h_>~OvNkMK9V0-DFwZlO2 zBB8$rBH{49drQgm>WW7x9wj7i?Gt1h5AuR{`_*$H4VjAu$Wue3cbD#t4yYZRHGJYx zb(+AyM!0XVzu(o6A4x$Ds8Ta}at>Rs5Zfj48H9*o3IdF1mVU!sLmeg^DA%LisJsAq0ry){6x)$5r5pYWX z^O*Q!>qV$H*7lJ!IXdIA?OL3#AUN@ zd}XET9P97fJ@c5YC$WX^uPZoVCqTX~9wlhpT4k*jA)KkD*2;|t8+P5(oauVLhRTdn z%~rOjV??>{P95?ro(lB|Y1AX8rimslB|r*N*mUw1e~$4U$_&qz8I{$@Sdu35N*3Cx z*~`i8y}im0@K^!JgX&%u0BLO0V)|^GKng7=EV)6^mlu$FqAzLmnTsb~{fNOn3}lx` z_Z{7YCCCOuIg;kyoH5xqr6S3T&(7|Dsl64NF1a8iLoSbto}N5q^cbDscNZ2pz(CFV zeQ#R;L=G;7hJr`EJyRcy3`j*9qwNksm~~aAATAF7mP%hi(lPEkjlGsyF#6&7}5j!IaBUBI# zk*XmQYunkim9cpnu{;y)qS!VT9L0q5xIv=R3O&BGvP<%D_0oz3Lk<}i6SRm&470tq zXk~q zoUJ677~_ajoFUsTkto_Z5Cz?C{o2LRjcR-%-TclIt}*~5L`q3YN9z2XmltPk)>WcB z0U1_^ZBDQMG`S2uEE1 z?AGqk(W4{d*JsyL>$`LGO62A8+3j|%WAo8V1N(+v(I5*Z`huvE^S<86=oyBM^|*3M%F}4uQ4n`dQ`iSPaA8U&>~o zi!IWX*g+gek?X8nd1Du4@@4fPLs_%3zAEjwn&f3YR?bsd(wZP9cd**!lA`RgiFTwP zvxY~{V2j5dA`zWwxbJQWAe@a(D5$b%p7i(6;*cLih!AbGH}86-i`JY677 zKV-d+?`m}PqvJ=)_6%G1v_|ESdh~fju-61M z<~NmtG{KC)@z=u9ncV#Y^LVVh1qI_-Ii$Y6n>t7r2A~XZy_{*%ZSBR zk%k00O7iH~_##ApBp@{btKmW&`IRSXG$oDzeq?VmnnXMrBGnZc=nZ3ddO-5*JOjE4`k1z7b|Jd6c#Z5aX%B zo`)mChr>tiT}R_kEm2j5Ixp`zP4uH`Y^GMsKuwlL2Kpzivm)>0*#2zXAq?i2VYMk9 zP4^Ex23DW6BE;>9w^r(Dcr@2Wc>e11&m)cOTAeZu37}dojdXAmRg1BSTF|x1_mKN> z3Tk{rG+0LY#>QY1(>NB5jV-$^Ad{?#>>K2gQ_ITYBXY$kUQKE;ONy|PY*#Cg8P6P4 z4pvv=oDt(*YZek?_>i$u3A0~@#;Pu8>JEDxgUvpBC45{3>GSC4#Jiya9L>|uia{YZ~Tz;wMy7s#l1L`MRokE1V#ar9LrBzAf9>xQpY zq~AFHMgh?maO68>S5kO#FcA*CLOcEp9wkNx9?JNDqeO;UzvG!}?j+G)p?4w@g5u-l zwdc`5(bTemv7o9Ay$9{Kl%oR-<<+%Vbi~S69$Z@b>Un5r_ucP<{lptiIfJS7fF!%# zu&>{6ATGE1$%6X1BW5=h@~hjQ&!j8=i7B6#12^%5SP~#J2V2Q_dk-)xSnWzy zH=@|iqjM-M@>`V;35xiRQ4QhpR;CA%4OaArYgM${P{G3`@imZ-Js?Ss>ssvWeKQEF z%C;M4dyN(D5uyF7m$b=^IWH9t0nr59ZvMv`o>ncJ8QgOVeX`aNX_z#5@zL?cKKBUh zSrnu@R)}hZNWQ?Lz8Y3rEF!);X*_|h1bVfjp;2#dAlc(V`WliaP(q_mBsBhABDu!G zx}nfQcw}s&kG?Z4sPN$P0~$G$uWK|)_!#x5ef6j;x+^&Aq4kcEo#n|F*ZY)vmTHo% zu3X`Q@3Ia)C7Zlp&OUJT*8kGU42{z6|86#^|&c9uT)%S*K-q{bo17%Meb*l z43Ns&zn)3kznkt{{`ZefR6m{jotqqDGLVE-9e**`)&f5b;P6#>F@7Yy;7*f|QI1xP zckON#icki#U1NPfK1+aYmSF%NF9(^`zhpoUN`H8%^dnv*+LCQnL^oLJBuj+i(Q=-& zxMfp5gve4Hnv?P$4||Xz(Ysjd6|)svt65xaku*o@_&cX;uAV`8QrJd4daV^?#+l`Q zt`)i>5^D=hx)BjJK$3fSg!95xWsSy-fYkEuA1rw$SiH zWlo4TGb^hlwvH@r-Fm+C{P|pB?bgD4T`fQPq|{@VN7QO&Hrv4vm(D!zZ!|U)bWi+G z>EVuDnAtqI9QpOHq@B|=le@BM*FG#ZDaF_du?wh1Tu9KAAE}~t3l&K?W4CBBlFiPy zOrVuWmMtph*?fzzeDUd<*Mv=(*cOka{Mf2Ed+ zG*P}(6uYf25po+KO~;wfqdU!|7obCQkbxJSJS4y-l3|xK!M1{$9u>KC@5@_PAyT1@ z3fczAyR_$GamNIt={{pDoB6`N(0L_&x>mbi0}P|%b5TypX}P%J(Rh#ARq93RzSSN> z4i^u-J!k<>LG~mcr67AlY?nzt1*sR`WJ~-}hBua2_zooBCOFQqNpO@MQ`%B`$LG=b ziLM*z3Ln6uUJa1!3P;qXDRwyiiOq!l~R?|A+qUBe)Y#5l&DNkt-hNr8Xh^NWZEK&_U8X3?EHS(JhOd|Lr6nt z$(%5defB^zImtBEQ4maaPt$bDz%dwAMWN_~iv&<4LjbcKX{xqnqkU7E(a74)MZ#f( z6*O`k;gK*GNVZV5FFcYj+W+f(zUz5jKfIz_XZiK(7n7NGl+Ud7tly97KmItX4I=nZ z)vWrc^^dGEX}7B3_`Cdn!KDq;u!u(un;aa^THKYHK}}byDbm-bCTT>-H%q(uCTYM7 zPWCoNc^lV6P#*rc{d>)6& zq4!tr-u}Q;WJgC{>K&HLYCwV+Kw88Hu8l~Zr?jswa%lXA8;r*2(r|{1S?su%ea>Qg z@jM2%CUE(SCL0wAj6O~Cj4@4%o71ddu_>h?xFa4V#-S51^ah(pguC$wkjP|f>ooE7 zp)aQe5#aDuXjRMXr4L_jj$uExA3xq&IzCMf&CTV}Rv2=aP{=y#g#_U8+?Y;a)+YS%4Jh^=c|RS@_|{y5c{N{`kjibrQ#3CL86bcx0hoZBk{XVha_Zp($I9qIp#h zRC!5-r7So9M3vRbWM?YPN}7q~5O$VF{Sg?4K&|owNER!W$=8TKO2skB>-@69V3vi{ z!D@cBOyKgs3_mGD8Ev#H2HVu5SCA($4Tw1*AR{0~lhWM?kKSM{(Sy((;=^`uk z;^^a}7pM+MMC>+|WWN(`jXZ6QaU3KtPWhRL{6G$k1RiNRoF2K89I?reGTNjZ%~+eJ z1xcRoVkNQJ&}uk3B)yl7bQy$kpXTI(&GvH2%ZSwFar7v;*b3AgMv?HVkR5Y?U6VGO%yiu8OCrQVn?5lQ|-Qblp0!kG~YBkepkEK@@7JtlW z#3_PaWCluwVl)0s{)~u@a@eTH18^lNQ$C>DC(md9UbNBaMzv10yN1vVO+-O8v6&lywna!l7_~d1OE)7Xc zd~oWv@fd*YORBCNZ;ry5tn;2-Iw3{@TnULd9I?z9BC)|bU?ym$Ch(99v@0x^~@~xz7mh_ zEp_HjkPgREb7^Ju@}*X4`>U7v%*xi(=GsOjU6uYUXRxO57y;QXoxNP@A>*?BWWS|o zr z6<3c4DBA0yS92OFE9@1-pp2`?c(WH48yvCR`-}68;G^#Bom#sr25!tbH5h>8yvTML zGBkqK3ya+EIUwIn^evVLURg`5i68l+!Uo~kzMNml)6&>`u<>}iyuOv0-(NdiXtgXT z$$BNzkB&!T*!hQ$bh0g&N*~ zs)HqS#_xapm3`%iobzKV+-M(wgviq;BGO{w7+b_fsj&F)I?3#Wx7g^&OE;%Je;>~# zG%#>#pWht1jurMeO2O*CMxPe&fykjLPNW?mL+4?)G~@*$<3RF?pCK=5NRZ^^Z28;Z*-NMevaZ|%);5V+I^F8g&9BnL=K9{%)nY-V-*Rg|dd@F-2Cd`mk` zN~6U*riJCTOrpG$S$*;HkO2~?C`z=O4fVoCK+;#U{hw#0cJb`xM#|EM0LcN8BV;X2 zgr~i`ovsT=kQ~jvMnNL1c`uA+OF7M|Y&GcNl5MwQvx0z3L8F=*r4sSyx%AY4%T$`+ zr{yxKhb&jLMG@0$?hS2)d_v|nM50K~2sdK8H7N*KNrb!Zu3e<8QlV9vx&U(9fP4dy z4oD1k6cX>&xADKQ~{SXKOi3Tp7Df=EI#5Lv03|lR89RSD{51_u~gx;AWf2zUa?f ztgA3DOxHyX88X_6{QRPZ+?34Fwx+VBOI_nqkOrhlbcRIC$u<#?(v>1IoHC^%fBNvo zP@>;gR&;E(>xz|nEP`O7R(db7{&K7Pa(-zlv%Dc8zKSg>K%Iy1hJ<0j5 zcjOL*r1NNW!(11HBb!~_7`^h!M&{C`{LuW&#@2znnKT+E&2I!`bc8H489zaMXlZVp z2oAnX{W%t!O-uFf{#<%a~67-|2kq zs_|G&@gS$ZW*h1xC^?z#hHtCjC#-KpxaH5pU#0?O+|G!5+sLXiCL1DEle>UobtPxK zYzdRI*Z>)LRMf|t<_Jjd*9b@6T&6akeEj&=_YFw5668p;&!Y7~z9ajNBXY_UsTjAM zY$n-{T)%O1+Dx{qJ?ozOM4pZ6bDha%y%Oid`5Op4b_7-H$>bcFOwJ2PqdZ!rBrp4y zd~DwF(h9DNM8+#Df?E@S3|{u)9=pm%ZVo2kal#vHvNTAf{~VBrZZRPJ5!3AWPyO9P z-5)Zt32_!1MC8t7QF(Qu)#Xg3MY#hRnx*dX1Pk33H@0zN2*BXFR+VH%to@+C4+|?Q z08eebtQ5&;&kD#{fE=BD-2hAR*w$S9QORVhYEL-U1!{updahTi$|1Hmyw>a1gQz87 z915uW#Xu__*|Gy=%ciC>i%R*-v|uCUlzEp$8Ii@EMR%6}cE? zN5;hJQ14S<3_Rvsrm@Q zu(GjRz?-p1kF7?0{`${ZT=sP4tdL_bo$>gnt@awl#0B3hQ6}ZHTP6NngA{mCt%Y`q zr3R?PT`s*9L)rz9EiH0@NAqx+%0@#Sr^Ykflrmpf+ZLY8+1Xje^<6+@8I#So)`ufs z=pf=z2Aje(>BmrZb`ooU^*XYHWyb;M4Us#4`q;ia(R4`W-0$zjfJ8)O=Nu{hXgmVs zC!Zv4vTq)5KxSG~_(n#Ur~;1$q%wz|NIyEo(P%o-*ha2TF)w1(57G@2&;auP=VS*r zJ9dJMS?v%b-@Bk8!Ex`+n-}nSlRlbXeTaVi86Ls$cfSM3;AO|X8VNj__;23+d~NE+ z_&Z?Kpn!Ki)RS{56+TM48LDk5)~>A3$Ew2i@-EJju2uzmUvb3`xzQy=3lNf zv$HJejAS%heVt_*ej{^MlDS4yf|+hPRoSj(>(HMC$kDdGE7tJusmWC&6ah#V4sGfG z3C1Kn<76|XqluTh=np&!GxVQ8v;ucHqhd0HNj`9cA)C^Wl=WH@FF)`fsyH5{AOSL} zI$Ms;kD+yeE3Owcmeejh9BIk>pAmudlOh>cdUV9lJ+s+Kmz+tSBhuG=!;PDyqD_a1 zn|<`@Nkz(9UmEGV^nn36ZD&Xkc_T?|-OtSLl>1m zF3@8<+9&=+C7&)Zf-14SoV+}6>F(mt5!evl878x-QS(z7%b49~6*mNMbL<9bh!^aU-D_`P!aHw^wQ5w*8m?mzkP) z;_zj>p~hr6c8UzS?0BYTW=6fwGg|yTHht-Xs}p9gQIF90-vKi4h=@9akniF+Dhl-W zRWsAe@Ou&Ic^oxhc(9B~rrcHU=M=fMxKJweCijRkb>n4NeS@9vzOH>O9KYcOF6$cy zHSTNMRs0*rW1TBoOx2j^^SpTQ7e4>s)FW3loiiZG&%mPtGS|pbA6d-RC+kH}H69@y zAceezm++=Y+-S%d+@-A*SIRQY2_j{4r!mc%|H%EUDdNs-K1!tmkTA@tvdJeGE=^@Y zlX@i;=h6fX=^JTG%ua`a;t14nAySdx=#s@B-$zT%>2G>Xf4L_o`!8&PP{gC9pEpmB zju)x*aXyU)GLc}noH}X-ukg1@z?ZmqVt$NS76MWl(k*VEdbXLoH7^E(uYG=v;uJ|l z0ck6~+%`@H#(xpXATLiY1|nszBkj1{IY!0}w&#&p(B_n8K~7(~cD0|3q300^JO(DC zfso+~Z@%C5uV%)7I>#gO6i~QR7TMp*=hN-}{(%PT4|>|AL~?KObf{-sFr;Ly(Ok9f zzP4Zw+vgO1WZq+uK>+z$LD@o+=TeNR?{Z&|t@-;8)#rpA9q?$x2LPJOVX%_d zFEG&r$obS`YEToUDjgn8L3S*5WRXonhDbOfzuNzxpDnko#=g1xM&z1l9VN1l(S^1u z8y=AZhgM~-gTa2~Ds=6$oywO>Px~jvn}>%@;7e?t?k%t4ZC9PO zw%I?`uS;1CbVdq|tre;mwPL2w7LQ(tC_X6WwC?@;e^>z0@kl#E@j=d{Sj@I_sLX6u z?sj!FS1j>sW=YM~4M^pQS_K86wB}eHUkI@u<}p|0X`>vg4KuxAaP>&nfN20`s0I5^)5&{3Np;{G4yyvlON{-g|YS6JR?U|1N+&>ltfc&{f zLa0t1C7bTx$(`RP6c#V9;$I`CAbkvSMJ~4EF^GYwTVPOTTVljQq~7tWB~ZdKPEi1gjv z(vWrwk#>kBKn{?S1@#@;88WURFE)9hA1_A6G1kTxFjvhs#7so6e>+kKigb$O(Fn(?^;5+W^^J*+uX zQ>GQe0w#ZuG{5~iMBa#|si0L|3qv5%V7yrE!|fuI=iKYKf`mp}-?hI#L=VQ5D|j>4 zu1*9VJ3vZ93b~LX3`Cyi@l|={>PLp75&5%6@!ma-ls`XhZYQ3;d)i;iu#2mXtxPN) zoi0q&OPcKj7$qMG59PS&jqR({r@dThIa{r}4u7TBsqCnLEd9sd3&eZ=Ao844)05(j zu~Nbh01LBhn0cKm)TA!akqkVGggQyv^T1mZep=~bIt7e&n1n}Al!;D>M+6|@4e-iV zdyyuwgE9ojU7qbL-ZoC0RbUGh&!g%f1CYlCWC%d|Pj{0DNJ%(p;^XW*KEYx`q|FvL z7yI;hM&8Vn3MzEdpa7az_jit|BuAA=yEvytCR^!iP0ghW^7i~~v}EFXcWMgb z`P(*0@Pqe%HQ~**c$9QBr1Mz}NH40T@TT0!N3Z6Wp1!p)rFwITO=vWks8j~ty?WJ8 zQaWYR$j096EcT3Yd~B7_P(IQVZSYclG5vB$t*dKWSXL|RF(CQRrpXO{A;;$5{!$Q_ zJi{7-OH(qB29J7D@<NTViFhCfI4HOThXKPU= zM_vp-o|v$DkpXxg3rw4#%J&-IVH0o^Y*IOYxr9j#7{CXyT5La%wC|c)pd!Daruk+y3o4 zKYx4gBkFuK?jCV8QfBedPY;XvGRw`MUah=bCwwzrcyD2CXTHtRu88s0#x2?Eg7C;n zU?jD+K2Rt%nM}bzXg5N|Vbo~g&Irie9||fs`@#>O;$8Yar;}r`ntLP>khxE1TWlo6 zsy~#5tY&4=1-ERr^)zU}3p`3csykLZss|A$A+dq+hBXJI=Ml54#J4%&2c|n)e2Ju- zbZ55dS`d%HVtbP<(t?KcYuUL%=m#Ku@SM0KFPMbLozHeop6o>XKxXJ(*eA)XQzWVp z(OuoE$2)|S>GJ0c8Jrq3*og8q?_Wy{-?-9yyKl^&AyIZC)>4DxLLk$}){!Xs6Ac>| zk=M@w>2c&j01*+A)*87Mne2e%Mo^K z)>ar&W){SBq=%Evg|{ER7)z?MVBVzjVmz3y7&q>Iv@`nk22YDAQ?#!rtn$pM|Tm)A3X6&lKClG z;blhqNc{`Wvh5vd`(|`{6gF0%d*@_lMw6MfebbgO^jgKZ!6@k>f%yL5>PYv<@K|EZ zne1U|)#S@)@ELr=pTs*hx(6aTM*3=>1((Za!f%X5E?#rz$}56n6XHHjIvv@-sQ*oO zZ2i;B&A~4(e{gO5!(gk$qBqz^q~<}|oM!4CU1wLEM*;cv?f8D;Z{PkF6m8idqape3 zH*dAim@Og)nF8vuzr421=@Gj;(0#nv)z1`(I%Jg0T1QfFTpoN?X_pEI|6XYWp=Gb3 z2qJ4KqYzJ~@grm!kYD69p$`&s59GSk(^=XM|0p0Qp95rpN#X$NO2}(ETnb2}O>D>- zBq;G!M}z9f<>c>viId|icUj-sD+J4HocWSh$gb!rSZrE%Q z*)iM4T;UM8(do`!;YH*damLz4XVEjcKlS-^u+3mGe`Gr z&zsAC`=7u0RxBcJ_Z&Y7$A`7;yv+6Z(pQ=lGK^Cnk8UFMvI53oJ83g*=tGR`$?qQ@Dtb2kN`PaOci|X8=1vYN#Ke| zu9AHFSqda^v8|ZHH8r66XpL2w1w7)(a0xkOw)qAs)x2v-aK3{=e%7M|7;X1QW=TW( z3`cnE^mYZ8#uFJ7B=0zozVAkV)4a`S-@pGd>Nvdf>}b#Y8oXa0o^j5|vz_Bx*YTJ~ zC`lOnk~KAo_!y5Ol1G!?#O?XMF_s9Z$PFYtj@Ba?_p(hxE{CD_ds_hMT4$2<@a`>k6UM*xtAUs&1B8J`ZXU>c0O_o8 zm{TesZH@cep8cM`ePlk5-=S?dzC}y^G@05Sd-|&XX=-f?^$1}7rVoUE-n`!e@sQWR4Z9Fy@aHVCNHp;@(BRA88Jh}#M0m+|i8j$v9 zoaaL^r}cGhL!|Gd31vQEuvDzYkjLO>d!voOqg0KY1v^F(iF|UO$d6BD?;SlO9G>)% z$Pmqbv9o{U`po97VU4apLu&Y$m{dcJ*=#B+xDr#F^Bgp_IB5g`ZDKyHugXEbL-LBBA|tE4cA?MfT-0aTG$cSSntrsoX7kC#{p27x%2>aO&W`Zs zMAq5^iODt~QIS^r7;tnza(`Q#>3aJUK+^4nhLixL@p!L&km-6wu5f+sV4!V0_AKsq zU#hB<$FDQQv36w2aPw5lylj?gUF-jz&Si0Ej7JS}Za1hb!?%ISdgUMD(Xj}W+@bIL z>?C%$6cwj~WSt{px@9zSQ}r%DIv)tpx{$0txVjo6q=o%1>RG-G0&d*lP+0N|mNl!y z;KKtc@k4+ui=9WdP0XQ*nQO#I4DwYl+!mSi8j_HSceLjsqs{wqv{mj7u^;j$maDM= zQHUdQZ)dY_IQc9&%rs}F?pfFe=?YD-wl(R>^*eV7IVbfPqLDA-fyfQhkA@>OA}%kpImExn{Lt3c4Yc`t!ZE1Fb2N5< zz7MDlj50P5Xslp$;>w~LL`}=!Ixv+O*Vxrz2J3j61 zDnuBxdGW+!$Em4hmQ&P)t=~`83$w~P%UC1XH0zScU#n2O`TLTP>i9I^=6vjW9R=yd z0aA_*Y-2dNqj8WHixBSgX=ZjRh&o;go?AglInrJOiF z+yhy$GI0i7$e}rm1E~@oE^KwQe@4$vMMl=Vqau$jbaG^ZJ5Cwe+Rpux$kD#@LiIgZ zI{L8%q&^*y$0v8Y`|b>}KSMye$hfoG*94^Rf=zVaSe+uaNE9;EQ(&~M($`pwzE=$z zBBKqwtN1lsVfvY8QJ2YyY&KWKq?cG+91Xc*x?VUcSTM7{**$$3?HD^e0^|SoOzQGL z5{IPI8X`ebK%Q5RrVQK3%XreV*tpfdbzFY?8~NFjjm+*q|A+5Y<}%ddULCkPF+RVu zF*aUMbjK;jh{vdzt1TW&@c6jNS0;|fl6GUdwwYY@_pQl}f>fWOgs6C(KvES28Odb5 zfC=Y!0@C#4^HR=$v?zI-pp!LJ*r5_6m9TMPNz6DRrv@ys-KmEAp$d?4ee9Rw)FdcK zbuGXn;yoG*iC;WG!eb;I1$oo~5+sdE`Puw6+wf!&DV=nzvzHOMPfiFl-F=CP5b-qGHG$Yov9kX(4!Xh*3>N-k#>uTS@UFh1d|wNDd5BQL`-0O`X% znnm$1{}KmMIBIA`J3sdGTf&bB3%r8dd)VHsG_HO)(0jPt9G4CpzuJ?$e>%o<+Z$_% z!HC)BjnwisP<(x@X*-5hawZ;eugUtM90g?QhwsT0y3-@2XW*q|O)lNYp%3eB-<&KwwOKt+IRZbBy;k@C|{;y%Na{jISP92Sp1U%VjJ7H=On1Iw{%f~3a z#kN*MMIZ&F+3UklRS{}(1BH>REjZ8jGWc8#em3Vv@#w~klhEFogGdES>>zo3O2Q^7 z3~{&>CFf$5*T}P@#p^e3-nt_qnN_NnDM>yelWjXeSQ|2;-fM@R>!iJlW0T}DgvZ_I zE!*iP?Z~RRn924&4Y!Vl;mBErw7iCpYD42@-=+7)qog(J(c`GM z7k$z3vbF8wp8-;yw$6~=y*5h!Iaeu9eq=Q2jp)-#&uW!Q>+01mR#{JD3{g7ciM`{! z!Eqx|w@5(Gh~!?(Y&Dram04RTibcK@ko0Gs)_?wMJCpVBr#Lpr~vk9|z@H##Oe zD9O2Cx5E*V`ZNF9Kt|496QBlwPt-11<9jRkGvj{U;KJD2ITB4 zPr{EPjZ)T?uGw$>Zl^Z4I$|o)IJ9%6ce&JNVK$rxfb`yX$6h12G@eJ>Xt*DMj44Pr zcaKZfSVStoEFvH4$>0=|`a(cH(dtc#(1`s!esUsfXVX;n-V9NqD*<21tPb5f6 zc(6r=Pj@qgd-_^1^5$kdK5A=n*?1T8D8|O2P6m7AbOzNt9)-U;L;_FajjvSB>g1rSuj)Xex4No2K(TXy7rEf~T*%tWm z6H8H$0@9ieuiVybQwsi<8xohvi1CCc;9k~ez@ghwTh9Uko+c#LaEv(5-aMj}1PG}6?1^`T8Cg+jy( zwn!~7t7-hhuGPc*<$?A9*p*88hfWsF| zn$>pwxSq#2kSzh}6WF3L;xPaz9`_xPK4};RLR%rkYT+g1Ab1A zca9ckUZ`aJPIBhWGfQdvXylZ_GxOTtzI1X&iJCW?#|Te2(kNxLp~~=m3t;8E@hU=#fgCd z0eNj``Nq_I!tEUf$+*Ze7HgHmT|(03{fZ^Dvrbr)fPRD(L$Y3KQgS8|J6^WE3EMm< zjn9$W~XFSTvI^4%zNBYgrtA5Rf8~dq+VUkk0>> zq*E7pG$1!UkXUS=#10w~#4y*+So@nHC>RBx3N9jL69H-Jk*A~k_mAHk@4P`df}>_8 z?xAa@+~_lOq!Fp9_akpkuPYAu>4`iX$tP$u4ZT!P1u1xhvvPTlSq2%#R-pKLYn3rdn- z1t7^~i${$PM~q0QWB6lny_tImjDK`?QsrjSl#{J;v#Wn%dVM=JFfoCKyxOj9FW0}t)lKZCkjW^czg#tf#+x8#Ivf#!mM^ljEP-MH}iw=;E#a{%n;c!Ht@$Agu2#-NS z`d-5rkceCv!_uiodkaV2?kO_ie8OV~NOaGWoi}^OC(OGC8V$XFV*?_m9FX$>NsSl^ z?DpN`#lFGBG);#$3GZC_lEPexcyvIzVxM8$@@UqS8y2J|neb5d!-p3)H>i*Nw*&IX zy~AWaJ4t#Py@n*7>TpDyJF{s#-W(h3yL&zHD``g`>WR*d?iC~`NNB`jJ0QW)3DF;T z1o!4;)=5eu!6z$;`1(i6#vd{B=cNA5&=HwD}J5Tr`|H* z+@I%sd3ko$vG_;r4l7W0j_m3C%PL5dyn;haCNy5!01o$u{?()3$X405Fb38;H7Zu}| z6Sqf(Z+?Pr69K73UcN26&zFW9k;+6uwA-B|Ha(GHr@NgwZN_QvvVBflzF5@C0FH<$ z#|TGBbbh?MI^2D8aBy|?W*5rw9nMVftsRYy%6QDj1F2ND2hxVq1|T0!p5;sA=S;f@ z3tLQsJJY?|`(gjJ@_PB&M4Q^jYu9?Zx0a@R^W8nQYNQ`62|`o_@qfSNrF^5tGKQIS zN#cNH!(o+&sCl7Y+C3}OMI_94Dn+B!g6|fpIh_|BkALt$emCoZG!-cp0aE|MG|2L! z15*DJ40ChbJ7-ASI^Q`}n1VD7Sw-9t($)9yc03x8fyWhq6pzlS31M;37{Wdd$RPY+ zH}!a(2T~ex?U)nf-pu~an;{MIRQKWj3$dd%FUhjtCOko*CU@N;$Bcp!6n0Xegw+ZKf<93`;>WRRi* zvem({!=ty?(AYUZ9%8UV*;#ycia$i&_c(ekdFeAk(rZh}eJ{8=Izb-4cyYY*!cX76 zJJT7)Cz|AEgAF$O%GC0UzE9NUMZFpGD{gC|U5^22qkVjR?(i-3a!1)18ULj5%{U9o zk%!_RKXM8r!&;EQBv(fwA|>4MX28+&=*;yX#h7EL$DiX_YfoZCW6Y)T)#8ZNiyM%C zkVs7er4Eqk+@y-Zz|r`~>2%hpr0C?jl*#l?d^rA|{tBn(_u+BAQhRUQD;fP|N+6O) zlhon1`ta9RcD>7E){>%Gyp>rK^d#HWn{Kptop)rpM@{Of-2z!e6QCURKz{f7dEAKO z)i{M%n)N`Mi-R)*-*w%k9l4P65rEE7x6$zDM?^qMyt&RGK|jU~cCgsN%Ld5^MjoSG z=>Bx+^<)6j4w3ZLoa~&wpr6al+x$! zwGAz2rl%M3wfCfM#AEcgX-M*@=O35UGmzgpsMaDLr5`DoBv>s5CB@x?A|%RscQj<( zhsN9G6rBw=!Xl!P&wBNB&Qa&@pem)RDvRfQ!{vN#0gh_qF5wQ2kpQC;JNNqk6B&*k zNZD(g>rRch5BXdeagX?HVen}nj~lQB9GwK!8P1T8=V*mJRoG|mXx|OwOHMu8pD{ms z3Zc+eN#|AD3evr}H~a||x*Q%gu=Mk8wcVpJJ3!i^!{K?l!UQDk5PlN_L~_G#>Hrx$ znqfZ$Ev_NOq^xyNkV4YyNAs>tJz}q=AJLA}O>A<2o|X7oiNR&q*OwN$U&nbUdOXoyX0)SZS$X!V6G3AYXrH-$l9*F(A#y zjzATVSp!m7DiX=P!=wFMLu2f$;UnS?oVh-ONC#xVasL-rE|}jU7{7{ebT{MCBPnZc zuek0+>=1b>qdoKN^u&ggVqlYddv{7gu6%Fe0D-(PB7>8ggwn`d zaH?iVPC5Z5O|VXUaN5y$tb5IiUxvz#U-0l!$MH+jqPn(aSr|ozxHZB;wxiez&Q;JH z$3<1Ik^BSckGKEQ{e0J6``PEgbiU^~&v|@+Fe;x}Yp=D}TKkpd2U|yt$J2w2gM_B4 zZdlov-}-@bKt{?hyzu^u@L09;SX+D7Q=12dtKSNn9?{!b$-iWeoqtvt_IiJ(^JrQY zkK+{?NgVe0#X-0LX!-E)w?+*OS)KgP%(ciCnl>+24g$L2z@%%V=^MmT`e#V?RPEf;+|qu~Ms@GpiG@LN`M5(a+l#Hs z!yOYUoM{^=M;dXHv$LudcOKngukejoM`*N9PXRIGrw}U06Os<(bS0)d>US#%IdeL2 zYjm=qV}TPNS|TV7y5-I~0cqivfb`{~45Y6g5kNkfN5|27Uj-up5m7R zSGQy#Bakg~pM9&w!xmgNVik#rl*=YQX;NxD4A4EW>)qFHb?;J`?MO1#dCvig#5vrZ zu56Cp6p$JMP?xnBis#_DAu>8`SWH0LVa5QN%%iTy&u`CC;bt8*9ZS|xS*0NV|Ny_qI|%J#9swnJXZv3|oT>Q}`$?7BP?( zbbF8^6KTmB>ck5Z0EwJGw}z*ORLC1?yyQUgG(NLt_zFl(v9SM`;m)mc_2>(Y2;^oZ zkm~`+MHCEV;xW}!Tz;%j9N?TrM^dUVk4B+Aq?jhTYy-0U=1!G?Rzsc5 z4L~d*1r7!h?KnJF_wG|KKcA3fy7(@vV)Zf1BMM^z4%I<29HM$3=p!QOi;daHH1<9K zc@Q9@oJ`L{a`!^W`;Mc0HAy6nydltPe)gq3l$pg*xB;_Bo->K^1~R0>!^c@WG~9aKOLQ~8 z{q%=Il0X^nsR!UAe`zqf)L`S)y0u`QWq$0mLl0~KG9PD0e=Q!(VGGB({?MZU@%w4= zA)47y_5KZw9{tpFj}D|mnNs6=sN~TfSU_SQbpW=2L|Q+dI63pjl@CrZTStdq64@&I zI6B6b$ose7F0nj=M||^#UF{2Mv|sO8-*g1sJo07GCO)v#@qqhEbNf8|G!Eo6_R%Z1 z5jgU^KEDZ=fkPQcGmqTVAt@NRYB&JautgVorljeEtR?Q9{?-Ok#Mv@^vZtM`GdH+K;6VjU@ zVwJ`ISbT=!pGp?e3v|6TJ9F5+cx}9`Mo+1bI=GO3^ml=*S9io@{_8xWEuQL&{WQS10 zB3C5R(~!jn3!6L?dwa5gMx&o#VI{=2zN9QJu3HIE0uuSh_{z*yvABj3kRkZKIDIji zMY(p}bkP8NQP1Ywl?X=w350@CHy$NRoT8Y&4>BGLX@kbybp%p4=E}q|j^RRn1Tl(X zwJU*{f|?Zb<{PlJqQ>Bk-JCSG4-u+ZO3P^?2Z{n~2`oZzlKazixEZ#nHbgeL@#+8|e z560IN0a$y~d~cr}8aT`dMLWr$Wb()wh4R*(UYm2*-(O;oNgxmhX`zH`Mk0V;mg|N` z2U0WpJjTKQju(q^*%^>L7?1-2$P4oATtWPa>8%V%ey@r+3_r)w9;L)%9!I(B^^_5h zJf?~YYW1INAt6x;{3XSo^Iy0JPq+eP`<%9e8Jg0tuYuldcto`=Vfs{kD9{x%0C|9; z4tI6eeE705KPUpZM|sFy)z9viYqrLRx*Fq7RHoWoeH>0erm#jQ$mWg(!A)oNJ%(f4 zCJa@NSjQdkcFR4KI#$dh#RGMY(C`vmV=}sMWjvT3)PSspi8_>c+#XlUsuP_ zW{+xu^KNqQt=wkCX0{)lgsQ}$jhJ#44aS6HSUc7?9aNf$S!)LlU>@NS^XNSOH$dh# zY2w|Mkarbf`|wc_d4g#BQpe({kKR*oqdJRMPi|hH*dkIbbWCsx4YFKg=fBpJw8$D> z=+r;jJX5+6U)bHKEbzYFJEG6|kLRH87^nWc@mJP97v-u$qlpd=!-`bX-q)g4m<`R^IL}Zd-EA_$-)@} zGSQf0lFtf0W27B^;L#0aO)b$z%TI6ZtGhR+q6%VRvg42ik4+IsLI{=UKDDE-;pZOH zJdZ*(q>6nk4@oH`eO-uvT7O)jdcZn*Z++$chbi*|khyW-C^fpOfj}yNlvYRd;=h@CxMzrfRrvx{FyYM!tD>>|;s@1t>}TEL)KdAbMufT=dKU19o}#Vfky^xfoe7sI6-UQc;a39b@9rlz=oI z6O1TtAl*WCSGFz0HKeC}5|EEs$A8gnyWCButdJSV%K*s=vQGZ_-q$sUy1#A3M9Nt= z%<+_5w&i^ovdCWcYq#n#kyXz@V^*FEkq5w0VfI0+pyrsUC~hY*m7m$?_O0xHW@r>dsz1Tf;AD6% zmH%&fZD#Pw6~dc$e*DT>VPoYI%g3ID75!^dzoi4*hClAaTXRe$$N1`qX)zg23!JYc za($$|8f=Sgy}^eIM@<%U*+?g|mdxIr4%r{KiSAwpGc!584v;Q6V_C%rBpga?R3mfV zw0H4PX(4B9YN?TE_f$FTIQrg}3sA3V02N5Q1#v$@*CH*eO}o73jJ{p}WVhmM2Y(c1F!=an7j#H zqjE@1!WEI0;n9i5m|i(>d&^m?c!>WtkedV~av<|4A{%I?NQQ<&C3>FSb$~8hwnu~` zG@5xdAkT_Ol;bhsi0tk}I*dp_e#&S)pggLbLv7YgFO1Ag51bpkq7Cg61FOZYQ|B*j zwsmrho4g~&i=kzl!LGSW^F1S-P9rB_Sq3=(xh@r}YkL><(D|?PW-wE3(o4LcA%L+l zzbPDjRG;T38$r^5=yE*q>n(>dQxKUfxJo zSXF^y9Q7CuP=IXVc(D4wj;EQG!Cz^0JrsreVKVT@1zsr8=yDciB)9WOkZnVw)Rz4L zyVh5jskqTwTAm#`hsz@|Su%IMR$SO%=nlLNHZ~4k+?r^=y{utjoO?dv_7M{0vu)qk z?4#bpy?qm$R>_dQ+sz>_gvv)2d4#{cnNBaX?BJobeJBtUxOYl^WQM=1p~ z04W6+f6Y6u%1n?yLMCfSbJ-9HB(<&I-mI;^b-zYHqVATuWFZx0ACt$X;Ov)mEidgv z3bFG*LZr>22tOSN5BI!mL#|$Y zL2F0HF^&ZPC)c)w4;&_?zOGp4qv5$K7=ML4_-Wa{(jOOBmInsTH4a|+sBv|4_9K>$ z8-H8h5&#z)&#|$+R_vW%CmJAc+jyTqatETw>ik$F-+ zGg4}BX*2`bI5X%y-Ya7(Ywo>6wN3=malB}6Ngvb_nfC_BP%Lh9eWtzH%z=zCe~!nA zAa~fq$g9r4QFAH`$ot~4w<4tZI_q5csq={3Ao@pSQejP^F;@i?x3WcKttJHA`mBL7 zyu1_kQ0uK$oAI3X4iBiZ2NPM{efa6;cfS1G^DjG)R_tRIk}Nlfg|R+ftO0}JUe5!U zfaJp#lo3gQlvy+s6O8(OWF0jvmB^Ydo}Ewaq|EHNob{{DBRD1?QJ%+yBTu>VGymOQ zp8LvicCz(vskP$F3P6J7wb9k-kKTK8X7tOFY8?iHPM7{jE9-!O93JV6K+eb0uuweR zyscwcF0b=)9iS#xXk5xhT052aC=C|_gZ54>i;aAX;k3|ZWp&w0)x7Eg3c02Sw$>cO zaDgQsjWgVl(mpmc03gjkMm@%3W$QKC@RJMyGUdcISPIPnWUBJmfzimiEyI60>5pU*D@c#L!tRqb5amcjIK6!U^v5^s#rSv=8TYVIp@`Wk7l!GOMki zTCGX;Pm?CSXbAX3q)Bx@-l&}cDGLdT*3gPtBa8MoQ}1Z=GALBvIlc8JZB}6rne%8k zK5iisk9sAyorpx?H{0If(UX*hE4D5Ev4n3M8k(J*T>b4>Bg?Sm>r3T})L6hGk!t|XdF(SF z1CQ+($kf)A+6;4xN4i(KYX6|My`~(vT6!g>>kn-3D zBx&(o4fRi%%a**Q#wI#Pk1Y;$q@f}inn1jzAFonbs) z;P=a8`=kn~vX&y+N6$P$q6;ANn}$;ATF4TRk;N2U2Oj?=`Dj?=9l5KVY9VQCh39?j z@FXkdk`CR!*SfFuUW+CLVB!e0AqXHbQ`N_IIgms%dk%H);=|_Wz8rzvWk5nCdxQow zZ8UMdk5>-G^Soq$Z4O#Wj#t@PVoF$c@fClcOmg@enew=MFKN&5wNuBz(If+z){or& zzJ;t%0+M%@iX`s?kROqHJUy{6eX((HV79#a@Zo52U|?YE%c)stJa_I~W21na`CE^U zX46jZe9yc}50Ef4H|;-)$IgZRVJ#pzw8j@_8_3f^04XV+U{ic?-ol$9H(H3(IUP|f zW$@tT)mgY4G$!31N?1tKX}`HtkdETu@-2Dn0Ax(aJB}&c<2(Xnp2yBqC7#-7E=M54 z7@xFo#5M{>!kAwx#x@-NmCuF8xj&K{&wtk%^78$gE!{QF<6%aM->N@^iG(MpX}whg zK337)9D?jU0ut?N*!Ogm11Tc2o*E0XLr0Dh-Ib3e-Yf4X0r)6&2ukc`Oe>D*zgxG*??*wYbM~m4kshQaJ-5cYc}=|IUD% zCL4f4C$^#?Hqd=jC@T$5Ji5b1j^m;v9z7*48IRVukW%8Ie-`o3l0dt=z6rl-&huEdgv41teYoxCo`>|z zxB)3532NL#0;IgOp1qqvZyz0SNb-Uo4GX9`DC%FbbwR+sN+`bgqxWBUfo6fX-amgl z&epN1p^-;mlq~h*Cemp8yF|Km^k;y?Woxg7IRU3fm$oikIlTpsQ$SQIEIk~Z9T*rI z8WNC=jWg3r3+0u`qEr~}ygd;dw%bR!Z2Nf;_4JR(k>BoV?}9<&F@!vE{HK_-tJpIy zdueop&snpVVlqQA0O^5__0Mu6Z#gr-=x8K1@zS2l>Q#w4q zfJ`)^&TT;YA;b=(@tC3*gOLjue*=t?=fGWN6!nKvLt?U!h&5y{4!cJ2LsQstwuyYV z=2}BFWNS+;7P8BMH2+Bk61`mAvX7J7Bam574M6(Ldz%dj=)QoI%v<|8?)I$=WahF} zyb;!@pt$=Vo_Pio(Rt2RedZZ(e1sh{A|sD)RPu<<{`VF#r6Eo6hqKJDXVR2<7~Y$F zID3j*V|l)3L;p;pUp`!&oc(5YcF2%qWw-ctak(5${M#7j6kl^|VIMnS7v0_P!h!`l z^Bq0w&Cxst8k0&!=Eex^HaTGj4Q!K?-{_4rKTx$TK3zniF9gka3$* zG$tPN0d^eTgEAf+NK!tY^Qo|qnSJzCBNC42XIV~MVv(2y(tb(s={zPN@6UC&)`DXf zg*q%3@ztl_t?B3OO?|7c@CRxbTQ{&@GF^h57q$?fh zE*oh@w#b2`e-RX6arZyG=q%nq=U*TlOf2(A`+E%DF(PfOXh1RJF~3=}oyhGxBBgy8 zT=5fYsu>^NQ29)8YS@mOoO-ZSm>v4&`|rP>H4V*f{CPtbWp+2iEqN@7^B&-Fy zXFgm(Hwj8b+$1V*S2wRW-oAdu%h1!jU&}BC(MP z$wXYL?vX$;P4+RD{V_n+)WM@^KkGb9c7L}CjTNcU>CW{vg4xlrQW@5+|DUNc ztH)pb0wS+nyEb{Ixcc_PA~GZkQ)8hhya6}#BkP-_-s3SbC1A3$O#MPLMy zmjTINMz+x-8Ucx26p25W9`OQ4Sw|L+24r|445Xdikql&pr0>2|5SbM7J(bcZKDG^y zQs{GP?RMwNbYXO(P`0*&2cu=enSlWZ@=Rgl?YGAYV`Bv)aCEc`gRI~tCntvnW*Qr( z2g*2X75f8Z4-Ok1NsZUowjv&Au}i3$Ad=|YG3^{#49m~Ii=;zY5|Eywj99{>-g&L? z8qmi%e6|HZ_HDVGIqH%tKN`17FXyqwE@hY(>TNeZ9#g(z zTsT&QJPAt%S6n8jX|Nfkf)Y21`I@_5(^Pv46RAMwaCe_3fm^Z90S7Wv=f2xl7or-z zu{C5RkXS(DQ4*1X#VCO6;#TjKZ6>v{0wPk`1UGmLII?(j0~zi=-sZ7gXY>0tIUZ34 zr2nE0+UpI<%o<_&Tb0G zl8ydGK**Iy97r%iV~|2Htt|Bxoy(pF+2d+M(O+kCNh?O>LSx{O ziyP8&MrUP+9fy}fBO>aN#H1+$^5c8${e;=IejG>>uYEP`z}PTXBV=SE4*_Izwo_wi zNNeue-}0^%J8-lY22w!U8Zuf)Z(#sOlxW0b+nqPW2OzP)&sK$lgI(Ci^XE^oc07V0 zQNaxBM=7Oz0*&G37V>Nbl23Hm4kQwdcYW88gwo&-X)pGl4)vnS=9@qRIUtO5stHy#r4%VA&ivx24MExyiAQX|EzsIGC0V{ z%#tc9>h0`bv;}378%Zf+5;>4gS z@^E1E)ni9~YKpsSfHWD54kRxj=|pBMrbs68_>ceSNM=d%e+S6R?Hw)bABWVq95(|U zTL@_mx3oc{jAmP_ETmj^vXE8M&s+9C9|uGxAT6pnm`)=$$x&y@J@3yfB<9i1R<-ji zzdCjP)JdZes|b%0X3~MoAN%h}dR3(B$re)bW*VzJqu~(qXqy@93x}K6SGII|Yw63W z<%^At@Hlzx%-Ge>KOY@kUHaq0!dPk2G*Da}xM&A>Fj;`#HZ&`jj;XPzo0NFZqMDfd zzin^pZ$l$e--rWg@~8QQwy>PEqKmBeAt4!q?#Mbs+ger9uF*!ZczW!(Z#c^iBe1DRHmBJyk{kvSekWK5fb z<6XeNgTJ<6OmFV4XjH8ncA^!CF-X>urNd3EUYAApfk zi*rLn;NW=XjN+RKbJ-mW{Hu~Cx%@5vmJ4kW$pj>Kp1ARQI~Cw0<$y$PBDoC6S)4Z# zd-*hVsUs5$n=A(qx^Qt zhC7Z4NLK=q-&X;om-`rj2lw5&*}AVzCQ_>Jt`Ri?(mEL2Wn&zx=U#fwwhxK29Y`!B zcx6C3k~t!gwad~p3zAr0KkG1BNBK~ej(0-7+LDivNSVmQ<3A%O(vigM@dnL2kgjZR zhARU3NFA`~)I>}5)+s%#mA))%MCoakg{9)y>gd$Yuow-oulZN>ek8xPR}`MJ!~gARwm}*>@?jJA6(t%+U1Y=nxOz zeE+9wzxvg$L?fB=?QxAaFz(jt*p{ zfy^<<4*+S4$oQ4>=>Yg>)d1fQ)I7Wq-#(|7PYM>bPUtA32YdYM}uT>bv?79*JsRcN3X_6pztDB3nHA_%r2)6vERR)?9_L0>_ibUuEaSPIl8_TB>;v zi7+X}02^%wQr`s&i4u_8+807hquDEFDev4^F5hljIl_YV(b{U^_)qvdPci8JbmJ_` z!m)`$dE(*NMbGU33O^N!EE?hQPv3w4i^j(9zH1y{wK+Ov=cBg!{@Ufsb9~-RNM=lS z0;Ga%8AyY{iOgF_m=utiimL_ge8DBb4T8bRKi9UtH0*lhUjJvM=O*RJf>QPfJT}eQirOY|7F0 z9X|NFTy{!~>&zr{uuYZRAgM50L;|GE>M;wM1d#5tWg+*wZ6qnq2jk17D)ZIHkI-?I z@hAq(K)Q0_j5En+;t}aibdv#@l%F;g>%~7^D{h{zZvF}veq?59^T-?8wmEV9IwSci(+?X0D`J$@XTn%Pt^! zM?YP)ACUT6@J>kA()rr2#GHFYy%SIaZE)OuCsTh*LUAJKfDExk5(3^ zkG%1!)sJHz2hN?F9wL%io?4o@K+WzM0&eMHu|)8F=Gsu>l|TFk`hyH)VRdS$XJmnH zlMWpR3XhisB+u|DAX9jwb!1pU_Kz41ZX%_GWR6MQ3mXM{wk%NDUOY|)?BGz(Q5A+Y z9;ToTcV9O)Tb?JAyKCpMFPKLp8lP++(_u7Fn90Z7=O(EDT7uDe0{P=`l9A;fJ^Sc9K2Bt29%Vi6^5XX-AoEEdJ`g`Tk2gx2 zU){aCzJC1f-J_-XwNE)6n~qq{$5J>weGZMUemQ$#@Z6;F$WG0}QQIw~e*B~N{_>Z< z{^dWez@s9Xo(JNQ;(&Ip%WfcX+jEJ?1rKgIO(Pxn?#x2owpT)u3oJ7kkcOuLDIODo z3B*!f;dj6zKng}KBu9;W4rz`@6gOu&f_bc5LArrVN4_G%Pj7ofx!Q@uB2T>X`g=fz zum&VsnN}hb$<^0V)5IZ4l!%GQL#!gThI}_#NMPKnb>y>cJDz(=Z44o**#(eU=b@y} zB+vE)11S;%k%Tn>sl1~R8F>UqB!`_Ua#1eVQwby>JCd@IDK+jr*~vhne>yAccyzkF z#!~Y9@c5m(r`9JJe4qh&rS^kWqBKCMLH#?c}!e%<;0X^7hhy zEoUIjLb}(+L;@sbK8NdTh;1nLArS66{H#aW!9t2iY~*uKw{`85f{E1Bdr$oM^d6Km zkw`#xfuTr@L<&fpvJ>g?3_LoJUQdyL1j4+GM_YYjAcKW;{PG?<=EWIqdiK%Q=FB6w zynC$p!`&AqiYMWb!pNiIQ4#eZ8ed+TBJ-#O&{&}~)Oc}q=%bIWsN>59?c%S`4PhVU zuSXX8+k1(wA+i?(35Ihrjvi{8Du5j6X~RH5g99n^i1cYh>J@BdcrleA0O@X6DkbT; z7*OQlOnA_<8Av1`6OR_;XY$=b;b>~H1!SO+cV*Tm;FvoWI}y1p)K1*xn3UodsXNh& zD^ir*gU1fpakG(qZMEzl&e0sGRo>y6{p#|{(mv0LNM3vUYW9SJU7N`FlIHtV0vRZ* zG?B??zlNfT1jvfBs)Kz5$dg8-Zx^~^WSxeDC;J$fy?ZtRnNCd7Z;nIw(5L4&H_xBd zk2i*2yfZ$ra{SJ#NCPZF3--k;8k;iuWs%rMdokB08D}v$cHzPw)DFwxA(~14-2j`5 ztRKI8I3h2ne?WQck1zK#<3S2QMjQ=DS9@FN>UJQ}hHD}(s5Bra97t2@?Z*z9azg-l z8v8tMC^)Xq(NCZ7$EIoE5^<*8l6d}G4IZu)C6RI z0J5{T^RS0C?r{YRnTT{835OJ*hb5!|nV)%YAnH$@H5|X1DQ(^P zCtFtTIdG$DV&*73YQoPc4RW?~7if%KD?D7CWz9INUF~bvW`{nRy+H5bAn!k*?;3yc zeIfAp@Bt1P9u2?V-Z_mO!BzL0l@yH-is?a)h>`!fH5W-SK3tjnrgd}rp5{{});a4y2 zS-EjHB+7r-U$v+DMR;W2oQ-YTVX6B6=)^nN%C+T(QzgtJNS?uGkDdAAcjp>|&Y@pW zDfwSlKOem=AjMdFKZ3p9cKe6LY4?lDpf)K1+0ow!l{H!+m{+3AFo~%w<>auYHXZ zfJ5KD1G#rMK)%$1&rU$b8eOo^L8J)aZNB`0D?A^%V|bDEw`eoa32L z6Z!e)SAYMz?@3JJzWL&dt1f`NzO-anNZ%Ulz(9u8V}AlNNfwd_NdJQiNQ@x3*#a+h zp`tWYO)yOWWSpNCFoVBHWC3M#`mX{gH(f#<7P*{93u8iEI5!`Zf}l}}fR+Gcq|kA^ zmj^P2HG#*hvFkTKSMwH-dv`W;Wl^^F4zn8Fq@4eTRBg{lSwoG8tn$PBBaaqjJCH}80AxBh z^9{o>WzKU8NEhS<9`D?EYv+q!eR>vW9TJmOb9-*wxr4W6g&=_=zMrnI6YmXtId2Y| zHzpGOc5G;pG77Vczeg|{fyCe}EKmh$Zr8p$Ug6^VH)=0E}>L~=5;(5xJo8{`W} z>z*+XT|DwiK&GGu<@XU?4&-N*t4P+6^$|wBYcY`|$7}ZiPV=+X2kT!~+u_p`hzmvo z60g0xzUITUhP1?wfCRUMV~)-)eUX5Sr^`hkUojw)%LdCB)fkc});l_o$`TzxPXtmg zB#$i|zk0Fit@C%lQ4*!+8xC;XyUZiv!0C66{3K@OFHJ3#hh`B?3}>XP*Hs~@id}FF zKIjh@bQ<%6M-z^y!c%AQb-&9~K5&>*vX6nqxOW&^u|ZHpw^0es0HiA!#>8q=ey_$% zBpAv>@>b7bUqfBf;r@muvyjhL?>l%*eXs!O5e=gys&>D1tf9KXLM9Ulk&(y8i8Li3 zUpF9g9@~jLv5m;oe$7QhBZp0NEXC$8<1rE$a120x`oq@Vw_bR3H?1%4p5NE-)m=Jx zjzXi(o7Un$JnC;>UMe$nZ|HkTTweR+>TKca?>`A7y2A#|Po~h~{DXxaJKda4nx3|> zT;%HKGIe-bG62~DkY0*r$W;a$$ar+Qg(Tw1^5pA*Lcb@8!$d4HO0|9rm{;If6L|FW zqYZzoz;VtyXfl1PcXlLA$bM%dE5K1aT313sGRe71N-N87MG>sCj5H$6MD}&oY06YE zlaN{4P)m94T)lwQ8SDF+z5dLjY-T_`xA(1`eN9iLHKYS69wUo+B^u!|5NT6RtKe}v zkdiMV(@r)#ri>2;68l)On-kl!Q%Ivvc>Ljo-Fv|?naBTe_r;wp@80?J(IcvK?G*G6 zj*{|}s7`-#w77L~K%LoC=Axl5etYJNPk#5?-+h8Uzlz(w`bFUj45Vp(apA#|8J>O; zjHWi1ttXR|izNIRfe10_06H)6C*zP8vPEP7GUF^MZzUs;GLMN?S>6oCH1R#&5F#CfDBsMYv=^?g& zghihp@M?0|hGf#&N9Ui}`~DB$$kz_!-Mu@j`p(~_B2pgv6zkRF?--C;z`jx*{r_~G z|8v&Yb>}58P6!Q}k|JkqT{;Eu@@p-Dhfy#Q)$4M zA&hWw6e9H#LTE$@O1VEXZk~a=zp`X_qpeO&U5vI_w#u^&qoi~ z(B|cH?m73Ia~Ec5D@3FnX;v6LarW5Re;64#iv%P@c64AN*-@OC`GTVI=~F~Dgfus} zL7KG!_-U0X73nqzYxL@Cmi*Cf1b~Ea`C%R%M?Ix@Cy$_1)cyX9UEJ)&Wk|YL7mxYZ zZ5>cLYm`ys70E|P)Fm7XAcIG6%rGV#Q?jSPv7Sf+uXNP;+fr(Jc(>L>9&YxISgEyb zU_ZMxKOI^~E`JoR$6OY+KDxP*2{S&=q90ra8av#$L z0J7kb8XvciZ~~CwvvW)%9vw*Iu?|R-&jfj9=;mLZUnv}G5p8IE@Z8c#R+fa=wutQP zWNqNPmPf~KwUd$b^NJ^Wt{oeB@9fAgelY@)@Cc9{1UF~UF~Xghi}Uwz+|y)#UQ?{X zWjk_QT2P``rttxg7)m524PU(^w~!zivXl*271KoJ$7g0#)i{$*Sa+vgOfo}@Q$5Ih zwKpo{cCPeSGZ=+q)zqc;V)K}IRQ4NraINKI;FzQAP((2fWQC*~P2G6PW#d14?X?@V zMUfJxACdIg+rPibjsa$@^1ino(;5;W(I0*1d2j^CB?EhxVbg+w{;~d3G@j0!s5IMc^ z1`%?&N9?3HO!y@AI_}5DGAa0%px1btTGy+>4j$t9o_}kwSkPFDNkwMeOVNz=Q z>7mx9mbcq%bOk`JUa@aAT{YrSBz{j8lH1yFMakiL-$uE9QnDL@zZznk%q}&5Vt`bnY}Ma)t!>V$e-q{@*-i ze(ryb|8GNNeQ$$FNS3R~kD*WD4sc~qFGhtBbaG)gv6OxQ1Tq*=xppj9j-jGo0T`nw zH>_if21xcXp(rGk562)@@wFL8c&(R{SKwI47Lk^Wtbp_m?Q{?WKAY)1aLccTtRd{w{0%iIOnZ(GvB#Z=tE#Xuke-?h zB173wPG?&g!)$Zd1CMSwWh{AvXXevkEXF)eFA8PmoyVXtc+_Y!RPq=!qO^XDeL|@Q zDT5Ij|0Z%gh3at(Oy$3;)*1&=H9yGDPH5iG_Ti4V@!9Hw<#_6)`&K_f`5EOtB2h&0 zu&jC8_7v5;_^4UP6xBF}_8As3@rZ*L;|F6lMG1|TZYO)+CQz$ z!*UTh)Y*Q1_I_WQFcpVpPrb7IPgzi|-2Y%|%Es~Gvonv6P!}s`9@<+hQK6=#x3#7N% zRFu3*(lwvR3@Sxm#p7Yn(q%FvCE(-*la6HJs1ch;hGT8XWAx2PVIQjlXrNI!pJJQP zYaN|O$B>&BQ}{Qjn5^hRgv+RX)Vn}(v1^Z9q@o(^W3EEOb8|bigN`o}KWh?@jjQ)z zB0cZ(JqPlSzSGpaI)L=O!(dSq`lkaaRVQWVzHAW{N%0J%`Roj2Et0xza3DP|9+~mJ zRCzJ9{^-K&`abNUc#QUi$(4_+?0aUa@5x5-*yqQ~q108jxqJ5B`Sn{RcqMI1k?t@w&4uh2gd%r)a$^aVL8BC#*4S(_kMs8LPk-QkWlMQW(XD_M755a@ z5gxPPFT_vS#Xzy1NCUFYYnN-tM5FgiZ>|{89efR29jSiA_0=xo}v3k7mk9X zEMug}d7k{!M{cUt;=%r#eSIV-J+&^ed?W$X{r-$*6JRR=(kx`}iDP)_Ug-i&*rWLC zGbesAGIrKH__@kmkl~hflpZe%Nt@$Bi2a7e!f2Sfn^jAXUL530VO0O z#1U8G3Go@r%!~XIw^L(q36fdCk8h&MJEXTl4M-nL@KH=AP@H^BPkr4+gkQ>1m})^Cfx!gt?kytP=?uX=m{SOGuSjHOA8r18V6!AiYweB8<4KRQS&V-Amz3D(Bzicg;(xl z9laepc)b7ovIpk5m#qOu`VNP(g^-xA|_9t8M{Y7Gd_Lq-t`-YF<;~N;8B|YeB;Kilu?sktb*9rG6Z(Fbz~5W5~4Bc zBBhY{IZJ>-n~2j> z>B-F%T>h88FHI!t8Xe>=_4kLB+`oU@s^&v`F=uvyyO7iDWs1aAF`gXvA1&G2`dk|8 z{Aghz9Y`mVhX9hVV6hHJ-=OJADuEPn1(fcrB_onczeZEd(EaX(g;yrSN%NEzk?`2? z{3M?wgWg$*oy0&^L~1UdPDlUM*Hc*94e$t#6BC0IcX~(ZRk%HR*K<8MYwRODDo@Vn zpR3~+txEUCs}AJ7aXu26zccskGe42}YyD7B85YDYnq%#@uad29>aFCQBF;Y$@ zf~%~Y2)CqTiDQN_cx1DL-5K90Oti&_3X||mES5C7IgRa{;_Pfd3<4FKTLy^09PyDS zM%I|feg~3vFHZ(ZX+zG&U90#cbsE@B#$5_O1d*mour4%2_K9sYlG?21+G5kDfo@Jp_J6qs#5%gN7eWrC)gEu>3Vy zpQI-q7monheQSFCvy9c{?3ylcR4%foch4Onn>X&>?Y;6IxgTO}?qlfeiHl=nBcB_D z^GpetpH8}HqI7p$u?>dFETjt_`GHr$^M=FfS!p8@YGNrFM9Iv#>n@;-{usTaS`q`t z`D`3-EV7PXYnCG!!N`R?^%!$}Dn(}(I69F5V>vY-DN$(R6Bx;;r?(U11HY6N5ZI0d<3v1Xr+%q@&hL(&P6|aMEC9A(QagJDQsE{4)W$ z9nZXa`47L}5V7|68y z$V;FKM=oP>ef!BvmuEYNh_b6(WDStdymIL#Fxun&pWcT@WqtYxgN7z;KfArFtMk)O z9)IGgt#HWJ;XzwA$WjiTBpdmLDj_kBkf;<8;k7y##y3hg=HGt%XY-gwaJ-m+G$W~c z@_QLb9~*!Y2+p5i%z#9Bd0t882)Q0fz_V-GUcq6=(~b@!Dk_lNCet_L&N|ZI<=%`( zH1Ls1%80x5ecATdiANVAU|TrDC6q}N$mK>Gxf$9vKi9uG8dv1@~8Zs5Oj$d z8*g1{1b&=cQ)dwCD={pviA5w9GI&G+vYDxTt%rOOxtdu4`0MS@H7>J(_elV`bl|N< zEGH8plZA}sW4*lBCJ|ZH{4{KEAmMRh*We&X0_2v|1X~Fl9lv!_cHClSbNi9uTe~(r zYiD{{gJHrkz?@uIuyDo-$cNrs`3&|E*@Pczbg4npcJ|lrKe1^u3s~Vuy6M|zzx|fK zm%L7BaJ$UU{wSg!=5U)4Ze zl%pDkfKXoHC=O&GSw!ww+hmK#6&j|J&V5_{Xd^!RhfBVffovRTUHuaW(qe3YdpM4T zp>!l`frLi~(hMXJhAIZR<)6rA&-M&o>uG=7_i=34R44&?|MIMbGx%&w;txKVoI>!Z zTFDJ~d#Zhyi8^~~*Lqg3n8&V71W?cZ_h;#^VI{#|1T%SugNsRtACrAlZ$rnK5%GBa z`d1rSL|(sldZqx9phn3b1PNjwnAF>0D6OOuQ)bP}fV&n(UqjXgK7526M_0_G2zPBV z9s|Vm5yg*TA^+O!qxodhyY)LbKq%!-M5*x1D8cA*HWQG7IHrxeiPVABNtXC&TXm>8 zr^W>&Hu5Kp%fJ6aPE!F-Gy6zjfjG!A_r!=6%^gWE!5*d8wU9Cy6mC|GcDc2p(;Yg%3*AfjHeSeL*K| z7k~8D^siIAojPa93=Ev_%&vR~wcC?+xv9Xl) zAv>N(NHL3h>GTt!EsDjY6!t3|cVv6&WKlQ}7Md4@x@8QDl_RQ4_Y{+)LW0e`uq%d3 zam8{`G&+C;%=)ZUkXWan(eplOQsn>4Kw=|3%yuCA|FPxC0S4cDR3i&Xqt_#i+nEyS zVyN?zEh`!Yqm>>z7{c7cq0!yy zT&;j)U5IK=^y)i$zOyfQociFCn|;os4T)T@a!7RklgnKPH9@?KKi7D~VcWm@DIEF9 zVQtf>T%-us6hfnW6 zOr;i(!rUv+-WHIcm~hOMKP|r;Sk=5Er^cB#1&^AU+qm4Z2|B1*5Y$Wbkv7Km0!eRz8_5-W^ zm(1ckPrQ85xDlhv#b=dVs&K3YGC&L>D;z^L6ZkTX!ZA1ug|A-B;U6c}`fUR;2A6)c z-%50A4Ww-$ezc!yy4wU~o_o(sJ{FMMmphO=H#9bHdrnPWF}UKPH2NtuPNUv}5+J>p zL3<+*Nwv0ocJ#(d*+8lU0vaz}UTEI}jY&R!Jp1hEt0A13W!uJqWC1z#VBZg(p+eGr zkjGYIHp9lZT>jPh?t>=>Wg)kkg#<{+4vRfVNW&6RF1xoEAcr;e=fdbY&ec`}^tpRG zjYoueylOChE+!T4Kn6VWKYZ>x7M@xE%Yo$U0N6k$zfgr_B!RM#EavA$MWg9P{>@zR zwKE=(bwo2#Z3V7l7#Z&1u?|URF<>k$Uacw)6O8r_AW;IcT0r_25& z+7#6=Z|X$>$$(Owy+Ah7y!Q7gNL$|4yi^v_Jaz`Ml%Jrqw_-A~L9&p+<6x33mQ@1^vn{Imk=Bsnk+hFK^CEKZ zz`g|JQn!#LjeFO+Y~Z*-Sq3)(vgFZ&nrM$rma4P+=n>}SK_kQo775u3`ZRk(!=2K-kEDQ z9sk_t7b%FeFnbIhKbLvDY84hzGLX<{vumotpI4p6AaZd9j$^dZfSj-Lj(x8@h zvf4l|c)b2Im*ZGgnMK08NN~Gr)?l+xrm@x;2XT_qSnyafS(wyhB1u9jq8Y$HQ<>Y+ z0*?VCnMf9q%~tU97+W3g{9d1xF*hmFa^ zW166yc?|gvc@wAPu|g7?SH{r^xs720ok_h+9@>AE{}f-h=FmD$E=2Ze48Cg|W(mjO z(M!&RWq9iv7VQcFnKM~S;*z(D#I-AO~zcMc&E`3}yJBig^Q z{56-E#>A`bF1mp%fgCzIyABc!KQ2?>%9p0Zs?S$}Nea!el(R1#VfXOhpiSemypK&z zO+k&a;}Zvl@zSQ_A`)F-2GubodG2l0$Y*sjTpWi-V4P-O+qSZq)weP6__vw53PHN?qi#YEVGt|PRO2`r zY(ZP$lPk{Ljn@I`3Lv#llY!)zVpyRe8z5a)W6`?*!`8I}YZcWbAT>=z2NXMsz=;}L zT9!8Ava2Y&egWx7n(9LB2KhtHKi&o01!c8Qtc66ZX?qgQoXLT?L%=4 ztUKkHv6A2C29U;O|zyYz+Q<&+k)*5U3+EkFkO^w`GnnPXS1MSH}2^%zS@?gTjS_|Z z#~`hwFrK73YD*#u3&~hMf*Jw&7H#}*?ZsyoB^GV$9yay2kQrCr=SSNC(ygMKNvNcy zW>xc(kA{UrrGYGnEYjodvXgzpK;jPZhsc&`fSF>ORAM0$(2Rxm*G6hN+l zNX0cR1|%0ia+-TnbIYnV>V#e0C?KiObs$+u`eBDFnwzwQOy#)`bJ?+~MA*m3{4^XS zlcSZH298}obKrP#5X+cgiJx$e+D>;~gv{$sJ6j`VAG?IFN0J zK3v<@43JMh_SmCXNY9J|WZFFhNctBZYi^C1_b?Xz+9*uck(efkEEbUsWKi5Pru^PX zUqu=mdM6;IMC3Z>ag$FWFMwoGxPEr!`@C z;>#}wkfs1FzKMmTE~#8YT0JBt5}*Cfn|tN6wTetcMkey3)>gu7EF@7)22#p-aRIry zrRC}DvR6ISLY5~LuL?CNZqW+TqZ;uDkX_(l@;WrJ=zH3h^~nP#aM%&jXaw5Omf7y9 z+9N^qPNlgkzwS$r29J2|&Rd+DgkW9pA^t>bt9d<$bPH+ANWAu*9ab~hO*TC9=-@e!Lk-_eNysGsd|~#}&Z#H# zZ->WDsI&hR%p7JD$z6*`la`U_z}%JF#5W8y9XUN}JhFDQ#5g>XB%jd)a&y|rGP)N0uemHla-^jkx>#^-zrx*a`qpFXJV2@(0PwD}C>eqQWa+fs zI%XcjK89ZA9XwV~o*UP5#bZdG990Ks{~bX7^_TMu;B-etXJuX{F>8{(Jj2Y@uqU6~`aq3~z? zn1-PV$BPNb=@X=YWFjjIiP?gjV)>{&XN#LNkSOtp452LlWj&yDT!$l#g>-vpmXUiz zL1rF9hGR02MAgy5WiNv-7xB1-tOGJ|taHMJ1NO}uVdy}{I?~)VDtQbbwTh&thQWr- zZ$h7Fl&bQIwQKhuYU*#rLYm9|Nrc(djeDTY@Uu1jd#wq!u#iTd)0mNL3Wb$yu=8Ph zOp*9eua|5UJjNk5$bpo*MhVCmvNF^;JG;)pnZ-7ehrXlBrwVtCc<#Q{`NCx4v6C=c zna>G&d*Jamn_b|@+gln0EZa)A?~;v#$c}N2X_z@dmWTZs95(h*JOZc;WU`R(2z^z; zN6bW_WCHFpOl0ur5T&~$i|IgCJbFelf^on^c1!EkoC@b|L>4@{%NB=j67?Km_97m0 zeOaBm4zp)Cx}(;+ZVjp5CLANG2?L2N(+QBujf+SNu?@$5ZZ-|AX~&0ao9&3=01_fI zlM-R}QlgqF?c>|myu&<(g8Z=(HWE?6`XWChed8X2aEen81!lP=?!ePS-gxUdM$WTF_r7r!7M>mI#vB<4>1jv}u zf(W;r$sAkP8%SvUt?|eURXzQMQS|3hU{chWiLQsFASFXK>M8=rglLZQ;#EBHlcJe4_n)H#RUFc15ERdH>c;zH?Q_XLsJ} z?ql(pdTTbf@6whLL?VdXjrePTqyPC9;0Vs$b8~||tRc^hjL$Fw?ZlY!;pnt#$4`uC z^$3o%X3wXp$c^v;OL;R-K>DtYg}+?RWmrfD(k)^J(wMXUhG?~p07<4%OUdgQ$ItAa z;uh1)5|u@pt1DIU)RL&P;)-l|Eo61x+C6nvL^KX#;28gyS5D^H71rYgj{}F>ssOtm zB_dnbw*8V1qU-|5Wl|1m0P?xk<`tfYbRfN=g3E~HRck4ON0~@V`yhxkIh?yxHSSi> zrlolDQ8Ps)Bhsh!*~I4;)*WTO6o~nJaYM4!Ilr=O%5#wR@}$qg<;gxddnJ7U@*q*P zc)a64;-38gn^Y%kc9Ms#;p3dFJ=c3~WDJ*0NJC_;LyRdMKf{jARn`316blilLI~&4 zAgl~z@~22KO{msm#~!%<6g^<5DC_~lbfGx&C@CjskiNnr3T3fbwR7?YX2ILOjJTi6smy}6z(7FR@n}_n*2}s|nY24fVWO??c zk%x^83mM{Thz%>*0D%T%2s9~js5OxJ)HySc6^{|{U?JC2i<@d8VbR}Coqap?-RHeZ z(xqR)Y#!|c=4UlgML_P>@=;TL?#M(-W+35_9z@@}k-CoeOxStZ<0q&cXLP`629Gn3 zN+)O&+7R1-BkM>^qy|s1UxU#yAcd7Yu7J#t3Y^b)IY4~sNEU}8@s>3l9ND4h94)v;EK$?O4o0^Uq=51};OWFq` zDIj<3=uh2V`0S5%w6v@;AYTMX->Q)sQkV^pKWSVw&=eLj5xLjajJnA@29o&fFp&Wy zIq{@n1e^e=rCVAhBDap6oq;3rSpxbULtCiDg*?l8=j}n;Amq}+kMA#gr8>~v4J4h1 zM=#yCLlfDmQM;E)ienYontbS5GUV zrqE(1`%Kq3&R9T7)9TH}K>m*PGQ*G#cPDD3|3@53tATF5f3Snse)D04Anxpw4Q9AoDZy6?UVk1~+# z9e!e&@wFs#f{{~5c}Vf7((!Nnj4`v1@Tfn}WB%Q92YQAHYR+9f!yF4HJ&#_qtxpx9 zSt|n-yI(Nqc^;3AyZ-F@SH83Ss`Dryi^XKX#1-B)0--?C6kk>hLLPUn-wH&%BrkYG z|2JXyP#(iK`-8?p#g`}yWFV=}K(a37<3YFs=}7)b@EAa*4hCXuZ5@8RZ{Nqtj0?yC zOr!zHDsl%vHd#>fB0wrLUaldDvbX-fdrOS@!+IS2Yvonu%WP|Nsi$|AubdT-j z;N+~6dF)IMTSW4S6xaadx})c}*o=Vk*d%w?yn%0_;TZ!mcw_}h&c}x6_q{Mgn2od_ za}XZyOia}DnRz_pJZfWc*XZ#c{`2WQGq$t$+AywK<+~WjUi!W${9!$rPcJrq%{&2j zyT+rGqivM;2t$q|Z0VoKNpPZd$vO*}2k5?Y>Q^7{1IQ;;?*ow%PFqtVTbn-wNLk3|8XNN( za+$7_hotWi3;AeU^O~oF$F(7m*vhT7AhO6xHfSs@FLTvWj~Dvb|NO?ITS#z}3`K4- zmB~bQoM?uM?1AANP5F4Gd@cwEQXZQV%#wwa%MKvP{Ime%+BLR@^m3mi?y-}FB&Gq#wau$mzv^-PkwXR1At7bc)b5<`&2$_gyaw7BI&Rt&`wK8`#YpW(>JilXW~*l zheo}SqM-Lv{brQ?zGb}X!=f?Oc7L)IgkxVHY>xsdE8>zJ2 z0H{voG|Y;Y>5$t#E|>VrsuDW9Tse>~1~=+uvL{y=VMAmQP}lM(MERx&XX+(1T_wFa zw64n$<)f1T^1rF2=7yG#I!b)s#|9)s;gY-8zMb5egylN9dftYZZg^8yd)MHB9#|wzg@I)_kg9-`k0ijM2yN^%=OdgNpRYQ#=Mi)w0V!!{ zj{}K<$KWf#{B3$ijKW9J$to_Rn8y@IE)oM${-ppihy*<@UWIBHtIgl&UA7b!7PE+d z!aCLi`By0`{w6@8Uwx8YHazYa0LT>8tbKBYTS%`N7mqnHPN&UJ8lUWM<4DBR1*@D+ z>)O59A__zUGK{7N;1!Ux^LZI0Kt|hPE<1A*Nr?|YA}bOzBH^)f^T`A7xPk5%N-Hpk z(UWaqG%`r1p8rcITx21qZY>Py*S!ysb>!n@BHd$aOB@|8sbr=WLt4Lk%hNsjt%i%T>Yf8!0_0J7PDd@g_lN%Pp|vJJ=;%`GePBo()iT;Z~D*!FWMLhS~4MA%3p z(r2m2TSgbG7v{p^I!O;H0kpOKzyX}LihitN3%mkI7)t`k2e&?O1E~)WYHohLrSAoB zt$b#wqYShdo}=h0e~eY3tAH_BjBvWHJ=TCsIOcKAX$_fy#9`xBe)Se65+IY$ z#$}WDY1*;BUqC(zknXZg0AUmGS3$O{FK@R$p~ zq;&~NQRq{gVblCJIBwo`{6NF~kcRhdZQn(Jqva(2TLUk4 z_Ffo1eywBXgjGt8k8`{F^AU@_WiIt*A{9P+{_SiaGmu~xg^I4C!rO}?f;v^}6yDgB zDa=2^pl*NRPqfSYOM>zDq#uJvqmEmFV%?_npF5EC@??+088|Km62)<_MA=sB^Cmzd z^VylmegWCqy0(A+j%YLk_|H;Zi60hh4&qYCvn2cIoe{z>C&83Ft zG>y;8#X-{KiI=dIn#M!c5FUHFx2jM32?LUH$P6UZd5kR}N&5VtFKyr0D*-ulYb8lY zWF;6nMv2WDI8V-5RPILH)v+zmY`=Zi1OxlJdUkD)MeOS6avu51ZR#5AA>5|qefMT8 zt9-YuMtWIFQhk9`!K*t&W*g}XOAMs6m`4-?b+}Lf$19^I6uH^;7fxtk$d~>p2+c6^ z+j!z~%LtCKdNc-OF<2-9KsV(f z0kY-8Ljuw!MEZ0e)POwgLs0XhN7oLlQXUcunSjJ5@~&~&o{kI!kV+`0D7%M%X2RRD zkuj-dqo1nK8BG zIJOsgZ8+9YH;oy;P4la*a`hh!hkczqXpLaIM>lVN+_x3C?(P{L9i2NcsQiF{sG^f%TK5@GQ7WE%?_ z;jmyym)@?5#XtY^my6x$S{&`QDAOYbdF!D-Qrp-GM}iuF{P>?cINO%QPiqwD@&u5r z2}s%w14y@!ZXz{eylG%>cG-k01$`OFGS0TW#pJSm9t1q*VsWoRlsXMbfb@){#oJ~g zx3*tCzN>3<_m)i#T&Y-VId!ao>V;+&8#(Pp7hG9{By{fs_irc#MK$8F0+KMh z)qq@M26C@_bcWKGkC7WMdl~{rEg-#lA>^kqq=ObD$TSn#*?##FzMb6odUx4a$N-Xe z07=s4`5}E(6Vfm>;8wSJ>^@{Xl7`$MA_0=Pxd$DGMU92zl0G&Ou6&Hlkc+T7p4 zQDx3;+RB~VcduNzdmH+CYK#iHVO-=F#G8M5(>i}+8VO7ko*P(G~u%44u^9) zjUSxEVF-w4<^=dW0P%?IAh@HKFCXmoGu{C*EMy5J7hm)(%=YQ4sII_jZXpRt6l60j z$cdY5+gw2IQcDGA!FJej?EslfBrbbG8Gy|P27wMB=Rofpf}e?=+izU?uXk_XdHov* zg=r8y(0dLRxikiPZtlxbkUYjw$Ic`A^{>AYj|d=hAA@JI9ms&J9!e*YS7I>~s2P?1 z$z^gZ`AXhe7jHL@cA<=)e~MAZ?Rhg9lH2^2Lk= zH4bEpSB#s>UbX+DR;?jrA(s~}yVgQJ-AtJ6K!Tg_OBrz2r-NK)bg zQbYv&ZC!)wA)^Gr?qT5ke+k|$pj=4kUt(e|AG5!CsG#j{K60@ zCSN_Nf}v-5nT=%okiv0QmkB6MDeb^Kj($0}=RnULBXalf$xZ68xkFz3_19nT(n!-c z-uUwNzfSB1NQl(bUAne8(MG3i_fmQB<(GJLEacgdpHrRof1nW_e~pd2PA!lD36bus zO}SV*W_OEDiH`_XxJ*u=Ug^^>{h-U_jAm1*=g@!r{hweV4IA)t4q=cFd$u1kjbFKl2_Vb7((day?Qe3OYbP(>$jPaN)Bv-PKVC6uvhAb>3M0&-zfK=XRO)Ze_ zvOTOZAnRSW1F4N*+j+x4P8g8ss2F}QdzsDP6P1nRjHDyGx^0OGs#;*CAX_*lRY39# zkev%u`VR_by}#o|ann>IL*J;PsiT+yM#5DAYgAaCEky$2*uP8{r-81AuD zdC%>xLF;yy7~HdG&%aWW@%lILs0fGsLn_IMV@@2?Kg-!mm`9X=+-Nj1q#PhW`|Pvp z>g6(t#{jaF+e>|2M$pkX?IiM4SjhO%ZokjJ<@dgFOfLx%Ya*Hqqh2mC=^Xm!Lsa6J ziS%mR&|k#4!~${}9C6qZnQ^Q4@u;Q+!PTlmzicgBb`+mgZHJAGkF}EbVKX~ic3L&M zSV;2CL!xZ2sPIM_WK(o}l&*JZ6WSyqF<|g`@W|0Eon{{`37MM@`=UNPN^|wo(S<1o zQcC3)H$S~UGzpSAhXDa3V+Pc^$k_`v5poXuh;>5=NCn!Q#JNXad+_$jty)&>8J)mp z4(|TVZ(c|L_HXd`?@tkQ|2v1jU+CqirLhxdj*V*i?p+y2>BQObpC=26#3MjjEaN;r z3`h}VOgfl_GL5cy3dOfUspIG$GLS%Hatd`BjOo#F3};=+5RE`5uN`aTV|)xmP!x@n zL8daF1SCA3o_YV=IaZJY(#yuZ>kuGYR}BDU4r+=#q}M|lkmP-umabqP3vDuPA;n`_ zK=KAjnB=o;`Vx~3J%*zkwpqx076Z3LD2KjTnHiQ4sg8Enk#=Pw;gPSkdE?`ziX#|& z32DXRmsk1{(k&!!Joe-yKu&^VC;t*WcApA=1Z3y`r|kTntGtdp&8};l&5|)Yq=I9< zj6;Eu?24SVSVxj^5YeJ5NC|9QF(b&VU>c zlEx%J+A{LoR7?F9bbYW7FMe*rz4iBQ3CdfE$M4+3hY!{sr7&_|E$y;)#`Zpq{1K35 zA(8B(0VyKGK<4yzt_hRl=IKznJi}eYkxNkbl{osUF>n-$kqx(tMKZc392b~KXcUhI zUUuIFB3)r33;oyv@;829d#3Rx@c6#!>fRBMCl1a9kYo^3^WiH2y?WIu2hwO%E<7Y4Z8^y!WI*PL6)xWrk%Xw$k&X3UiA%&$*I4RmTuurb zS^ZB2(rPO*l6uzz?R??_=gNhF1WENE-u^uX68k8$fgSt!tS2LvZ!`-zILi8O0CBjX zoz~teBHOfxWDVK7rKblVJFdbbW)a=f>mEdY=dT=WgU8-`_z*nq=T|ZwPXXddcs%r` zl8`r^GbsPrB_RLoK)MR;s1R5Pp#7UgBEw@>Vp+jz1l9>iy!CHHOn7X8DA}#!sF$n4 zLc(a7$YSSA5Si!rpadk#$9LcTr6(XMs{lw^lK@g1HFDX;BS0d6tX{ix89?TpnwX_h zu#gZ*-UlF8u2RV@)FA`XuuO2GNKg8kiYy#R5t*6}!-FHUnV3jhF4`$_oV3-j+%iAO zKq_sXfea$GgKZuh$eyShQnC0#3yH^`{JbB@K+4EI^L(<8m&oP_$WjYH2}UKe4=Ja8 zP)J^%vZ&_Px$DHCg*@t6_@;pv8TBAiK~1)h@4l-oYz(AjAWt}uDaaO(-g%gTT(ZW1 zj5TBgHH*qXzWA-h%c>VUkRD}AhNii1lQ=A9$1{)#N_E#rA~Mg3Y)_4-UL9W5&^_H< z=ZCH%@wjk6Bpmv_OM=r`jP|bc}O%ujO{!sqIo*m$8;JzL?-`=x1mwvyWbf2bfZV#ZrG=fu znT|G=j=Qd3rv?M7n3s;bkPVR}B;t^zGi~SETgV5ooIIpzpR=b9A3h0?R`YX+ZdnUz ze4_?s6A6_bL8AaNI1EKJ<25?|C`iD?r&vRetp6KC!lXTT79x=BuNTnBGZfH;_#{+V zIU?RGiPRDj3u!+4)jeb&v5#yeaQx4lfIRO&<|B$XRc~6d{a0&NrJ&~f7S#A=wkcfp zBh|}Rt=1CK*O0M`?LeXoWaS#thm}&O>!%#FIgo~<#sVPhnH;TKohrg!kj0C93Ei-1Rf938w)q^%rx z$93%EF2)5gaRmXS4CFm5B*m0i_^ssB2eqw3f|3H{+I?rmAin<)K)%Of^3;jLHquly zQa%39<#XQLLMHPVLqt&+$cU2l7TeIpnlTx_zx&PKIj43>;E6_<L@<1kF z^lQLaNQ%d`*jpGlhJ}pOkDEx=kVfQdFYlo+7k`b8>}6gTK#q<18WO4L5DOVVdfQ=c zI+W6&0G)OC$fjjW3qU%N24hy>7+7W?HMwcf@~$xK@D*x{plXIf`wT3b8j zuTNdIF#^}8u!t$RMg%px&RwMt10tu6@9*1E&nby*Bq--c_wfsS3XkA@_Pvvu05ouA zVEohPY!cOTX`~*JjrI+}(e`Qdig+7^f%M45l;4G0r2@BX9{mdsuam(Py#*ZIWf$yY zCh~vih1_X-0YybZ+#!q(Zr6hOq#k9%BShL<$n$eYnwqU3MK%&14M6?Xo_+miwXv%Y#oin zQ2r+0i-Eav*gqAJC;|B@K-!)dfMnRm&=BjUoCSBX>EsgKux8~estBc zO^a7LkVf5htse_O!eao*_tTu8MH*KMkTQ_=hfy2!CkEG6xRZKi(Y835mVNVet4-;`SBmXGBlzy>& zY~LI|h{uLTWUa88koG^lZL7c|6}ORzlnNB)oxh4gM&Fb6?G`7|&7d1bOk*~tQQQ;W zx~S~2B?EGyjV#L8&wX5`;&5@In#7|_qXdtNYG}y5VkVLi+2YZFH2dg4;$#7`Xd!Xg zVIc#^)oaL~10+@t?hMEjX(v@jl9`PkecmNqb}Cz_C}6WY@_0XRbaak z+*Vf$kG_cP7-S2vR~w1Fdq??$nvG(vxw`%3a`W@oukUTWil{7SNvU-s)n~*tl$mS$CN<7d znznUtv~{X&sulwY)BI{j_crfu9#A9Vr=4%WJOj_nZNONW7Z2kYK*p*y3}nuV$2uYkCf!16&+voy-+w<(awRV= zAX@>l)`8S?7m&0MCFFkCKnD@EI12 z(q;NnS6?IiiN1tmgftP+WE^+!5Ru|hKz85l4sWjAZA5-EYW3BISMvXy8%us|Pn3 zNXO6}uWqA|!D(_bLk^Y-8x2V(R<}Ij$72nd@#L9sw3jm9q2heK$U5e}#LC_;{e+FG zV3P&|36N=~7QHm%Cs=7y%B(`Yg)ZBHv|{fidkPk^;ur>V*@W5KnO-3v302HO!lmzL zXO|t_3l1Z4AY063U#GRk%p=NkemKmlyEHspQ{@KII~Wi|Mobex+GrFT58y-&b^Abz z2(l-CX68|`wYF6V(b2)^L2hY8XH^(vP<5{$GL7E73;{JC+4?$Y;ATrTc1AcM&4v3CHZB_s_(Vw#3H z(w%o+mzpn#R&ccAU}YeQX1a$)x~97u67K8B30-KgX2ZS`+lY$%u-ybYGb)elz&f^| zbS9H#ekyS})(OJIIM$r>DAC*0}j+s~qe^F%O^;~#!HJ~uZuMm;J> zj?Z0td$&&37LZ(1YEC2yP`<`OGD6Xd(xSQ>*`5D?cAxBINf7j)@)9#>tK`@jjJ2n| zOSz_}Pz)IX3#y!%>x$?*hc)m1(s^_sF_8oM&pWDW6rHm&E+B=YyKI7!rLQnaDwUtb z8nPk}`RJod*KEo_ieoSA5r)oV(N+6#*()7L5g0f+o-&Xn$`o3<71prl96Sb*3CV)b z21pTU^f8k3^K2`#6R*2%RTqAOyNJ}may8S_HS7abnJ&O%osQ$|sj08&>%~a2g#?Z& zAt%fhkV>Am?(GFq(nC}1%E&SbM`S#1{p^c#=e{8FwpS;T3{0N70 zo;Wr)c4GX%`Sark=B{0v+f6U5@d%JH!pDKs-c12WC`7&q?EujG^04e-s7M_qk&A4k z|6_dd@ShdH&LfXhN0AHALJL#kp@j|HA~A?mr4RphT0;hqS84$g6M1l-cpMjzu;><2 zkqJOzA(a?UClp6wypZ;JeASw@X-dSt~Mr<8&V%D1-b0PuKO(YK#=M|%r+O9^6RQfa~@TL#tlLDXOxg{MHcud z-05kXnqpbZG=Vd6b9 zkO$e({1Oy$%N^2Nfaws1C$_Hwz`|`@d1NG!E|n^0#knLcB+?Q-k^`BDw0}bfQfo+n zoFNZM@9-(NkQqr9eorm|$o~hI4Umhg$@}CkST2Ygx0Z7LMH*Kcjf+>WUKBWbB$HQ= z+|p=ud_Swm?#4R9F9RuR!bAp;COM{j1EYgVR9#igxQG;zut`?(v(L8P-^yo* z&oPkv>#@Jhxf6_6xl(%@Ajij!QTlhSx#`$gCqVug6!F};yq3rO@WMdKKB9Gsiq^hQGD8A-R0Tr1tQigdU>Xd_*fHnNh$ zbg?51lZ6Z#BXkKs3q%UONQ-;2T=JQa!qL}|?y&`=@tDHw0|GKzNG#pjRRx!ATZfe{ zo1kVj^**wY$MMHOQE(X(t6L9+%g5X&?$b zlGR4GduRn0sslQCgPIFExA5A7^LOstx&PT0w^E&j_H91HTMN+S!L@-S`>4^>HIvN~ zBg4&2S58<1a#K_DwYdWyKlk%L{Q9+z$wz8}sg?BWO+d;(mMedvn<1w0xRZ4IC;)@T z1-ZlEtP;Hn!&+e{c|7Q@3vo-up&v2%ej%e#e z0hCs~@=CUlKZ-TvqKYVc_1Xla@du4WH$LNxH?Ea9B2HvdwU4`Klt{FTZ6^}dP^4>Z zHS57K@#wQkt$o33b4_qr&H?4knspO(yu~zK>Miaz29WlT(a2C&he@1f(b!$1j>qY) zmOh0zYT!w`?5(L5jl{MBzAo ze)bc(Y2JGIWgl2^VD4CLvo=Qrq;MQJ9CwRHWYrKv*?Tx!j>ha1)WlvkN_ohy8<3AI zUAD<4sT5CsKw403SssAQ;#18q?LwGHfJ_5b2#7bPA>;0{gGb@$ zA-4kweRad@49qAazcfLj+<^qfr_)RyLKuy|Eg{u<4D&aEbwXX^^oZ)>j`Jd=O&{xk z^GNBpP(1r-s@^%wE;mR5B#T8){~+!WK*AzBiUdA7(qYBMk>SbVk%`%++GAIa;k=tI zx?%eBbDd*jyO|YX_AGcoDm>j@naa=WkY0GNC%QNKC|YSWLFjfwXXk#N@eKR$5-u);lpgvL7Ok9GRV%m}ox6@!FjXG990Ldu+V(9b|*H z$27+j1DR+<#$!?9u|OoCIf*=UH6F2$0i@9*0VJObHoj%dIh#Vu$@Q=(fYgmWassm0 z#304=v+&aS-2{*5AAkDp2k-y(cQ0?=qnWwjID1?Pw&vDkAOZ3Kg9AWOwUA;`aW+BC z($%Y3Lw-v`#v!tzxWX)?0l9Ql0I751!ZPwQ95ag<#}{9;K>-0|Iq!44`FQVe^5F@{ zD$S^f>Gvt9(E`$A8S#k9Ny(H2DwX=pF8X>AARoK?LmzEHNiILn(5Nao?Cve4q2adS z-jtvp?jojXtYMR=ccj#~p@)x2LdrZ!8XjfsU#X$>!;^;xMmy%`=RtDnJ_7^3$l-P- z5~-M+xfTGqoJ8b)&>xv>Zkin)8JVa(F>V^W)^rRY*}3_+bL{PF#5rucH7YK-jtDtM+`6?n*{@D`R*3g zMUK`cAfb_!B+E#mY@1;A=Aolh?Xo*Kvu)e9FXsukZIcENQv;YW36HyEAfNwV^=y&% zmAXn@c5=9+OacD~=9(sMAHyu1AM1Q${QR}1x0MKrQ@AQ-S;V;s(cPahjH|62 z6MEc91p|rrK+qYgnW(h*)VoPoI$};@#cYbCVnJGlws0(s5129_NsPb$+qYic1CUM4 zvu7suPxuiQEFi;SFGF0gkpRhFwp_Mb$lP`q7BXCRwOPn8j;ma-C>f5yA~b^IkA7q> z+j(>WD6^1Ll||ywT=w!9=j=cdW7D8j1Tw0}?c>SD=W{TffLu3h2XrbE`Fy{C#6T** zW&-o@NLP#fB^YTb)ztBeS2cE1XQ7z8OZB?PTU8%ndo=)QV;-q!#ABa2O6CV3XD(j6 zd2?IG6nivz4e2f0DbnU01Ib{F7IvVvGhJ>4zr)qy3?32SGFgsm^SGj5MTp zT<;zm$`CvTkPaVP+GKrpJiC)>3ugFSvOd|yAwnHXlM6^UkQ>@5II{>!0e-23Ra8!? zu4bCen#TIZEu}N9$1&SV*lM#CQ>m^51Mz3kg=;UTg&z4fDeq+5#ifV>y=MK&_-JWe~x;-*7d+hw&wWhi8Psgt{U+aAB6F;Un zMcUpM8;(2ryG%tOi^kH)Lrz-yB0fcVCk6$L;x~OQS~HMbEA_z4$Y59Z5#f}1w2hh% z49MLEq@6w0BpzAA7>#dmF6n%0NEuKo)mu05V(1M+78!A0!~l2_Bxn=r|&1 z3>*4rDP4v}4_56^7Ej54r;K zZub+Zbz4*JtxQ~%J_@bLFp>4?=2g>OW1EQBu=aNH^+_u6S$#}d+#A8#;)!@LMP~*@nnekZ`lFiMNL&MF-;1L(z zd7!EJ{KsjtM%#!f)J}bfAX%gl9<9OfVJ6aDw!E`pnfnhUe+wi%oVNRro5-N7QeioR z$e`Bm!bUofKP4?r`59sMo@60$Pk3wriG37~(jJqy9STTV7|K9`P>!<0WvfCL3%Pnb zK<0I0cxvHTpizz*7~R@_+kqUE(zRL5EXQRsZK|$eg2#qNgoy-6Z^ z;?vJoO_KG2N5#|jv;8Ag0umg7wBHjx?Io$5y&2+nS{T@}vAb?Q-B7o_o|A}M*ndvt zK9W^Pvinc>|DhAwy76TB>C*r?`lT|GQ#fwul@X+n1Yh>cIrkrcKcEHk+pD1VS$w=|&``Kt=Gd48lKGq5g=}|J=RS?O`rH>Ml z3E-kUlLW4nqr>Cv!LhozBrTMHj4=UJG+`j=eU+@sdsp_4mLxgq_Z^AxeQ<+|H(3rkR}bi z*D(xHF5YjR*?Ba15(o)D(vT|v(%9=)#{5#YevB;3)Nf{^P zJQC5=kR^Au?bm!~8A|oYYN>OUotkoH@}rMFI(-v7x6O2@+>EkuQsTCucmU@>7{AM6 z8`Yw1Jx7_vhFw%j*3-MQg;i@?7a4gB7?1?q z4y2!jDH09Fbgi(Fj*{3Dlf3f`6_9iwE6c+5nV|}0Vf-o;NIH-aU}qr1W2^j32J&~W zF2g|9He(?j$Sc~SSqP*}Qn4_5?UJ>>VsgbxWgsDGVU(SLd=wy;a^_b`IeO9&80D;; zN2k$G@MIdxH@>mx8@vRh$^?PXf#lBHVUxpFsgHNi2uYOgp>K!c=KwNge4I$`o@lrW zf5s!~2gsidS>2>uIG-q>>FyeW`*!V4E>|am;V27PGi{?>N=k;dwUltPB_XL)nY9kn zJFI@h6YO!HvZ;?JPo6w<`Y5*Y;$DcHSNaDYr|xXUC|bn@UvPhKy-X%s+WHmkSVw-l zyR%IbBa^c-m(5Lc2hKNM?i%T5V?&r13Kst~LAw0;YPINa&J_sba@$GAVRm~bQ zfD8+1L}r)Gf!V97pCpPgA~TRWBo-QtN5c^s<){JLX#CpOzLtPY{ar?*ytRpqnm$`U z(gYhk>c)>mdzT08>dfBxFn{tHst$APrPqd>H?&`CoIlnt_v?xRuJUkflyofd-->BvRH zmqc~N&wj>F#1eAHy1)6?XP?ea-GJn*qahVis0gyEj(j9M+L_$lrIFs;PSLlerasBW z`|5lJwIL}L`KCsOBL zG`6?bxA*R+uWV>&Xk?=4+L$tu*Upd4(c+;0C+r_upsf(waeRTj!xwZ!D>PP|YgC*$ zk>88QV|7m9CKN2zXQ25@6$+*q&Fcx)!p!v2Q_>Mhz%3{UJaB!{7xN?dAi1- zClOv!-cdC_-Ce`{xxC_|-G}dMqKhUz10=^G9X^Ga*`sl0ZXj(TNsSs?+e(z9FG-a{ zBM~8S!8#hoXSt$m4^y_Q-TDpcx(|7L@-4JQtp1j>ON5D;$R2PMK^X%RzRz?#H;RknjsdaZs7sgd=jNoi}1k58tbaI&rVbmAn!%pN*~g0PmWG zR7`_~JOYuDmgmP9HDyja)0hWNX$`rIb7~@}iLJxJ8uCS1$kl5Tkg;p+>qnxQiN|&mDIjfm8TFB7BB$%jLLy_de|l&q z-df-F`OS5y2(m#uRuSJQ@gudvWAB8YI@~27SvcTabqYwm&gg1oe+!R&Rw(|72Zd;d z(8>31y!X*%8fIH<-)3~%wwpI0^0Uuy-ShW%iAI=AOX10uqbr>7D@czsp~HT)hY$jmE!6i*hebueZ_In$0TE6kq#%ag^*MxBiv6 zY?pxK+j)FIHj~djfA@2~i4u`JFN`$q?DzU|V{%1ZgJpWymy!48uK*$q#PU%Fa+s*9 zhYY2r0&YZA0KdF}$!NBrFrcZA8m{-AWUkLn7)HO4}YVeB7Py6kY;xuVUs5G$0cEQ*uHJ^K?jQb%wHkv@hGm;D-B*#}si zFc(rV3dbwQ97u?aCRko;4alVxKt5~@$!hV*YTvdtAQO+C?va5^c^-fa9)IwI9|%Y& zBvNq0C>*;`KBhQ;jE?LKq=>4Nzo+q(<3eDBnCp zE^>6RLq+A{@#tk)NHXQ~IBYAr$kjh;1mmmkIFMU<_=`|8G&#(oeqx$6Z6ijq>HOIF zYqPW0enFK5Ye-C^ctp9b0u22bMdQf3X#z;yE?g}-c3va-aF;DPk8T}xFVZS%!~?~c zq8mgShoK{+sM^-FoDrU)cAWgsz;ORARw zqPHgiB=UeJJ8Wole;q)kGY+W_=SbgDU(kpMu?(m&nC&YDZ#kuX+bTuG%mOY%S@wvb)zp*|dT??|78)P2y{E|+R& zCNrq7*S3`g_Z~i_GZk)}RljDM)O_RQX-!KZQ7#_$Qa^d~@Hv43IkN2Da<5n zIgo}V#0fg{zy%;p+&o|+y?#=+PMe+&>#TV|DX_sjzJP*AAMK;WI5R6WB4GT~sS_u7 z9z19~astCItbM_8bR?^v+`jo0Wql~FDAq$(7FRqDkV^<=#A8^<0+0%4;86w={e1!w z9{a>285S=W=Ve4v*kCbDl|$$jQg1*7V=(0&+lTYW*fn_n7wRVsX*Cv(ZvSH={VRZ# zRb&G48H3o$#Y_5K`8`=b;$l;Pz&!CoRrIkRY3?x9RJh( z;s&kXU=SjEx=@;T4Z6(1!--tO7cci12Q6~yZiCZWmQc!JY&<- z0Md#ptagY%TVc$!y1H0PZrspaQr$R-P;$yGD>pa>B~pAv6XmH!bI94lBXfbeVTMCpUuK@3)4<}2M61>V20Z{aeIT# z`K)W~nrNZ}>>asmFC2G|T`t1TL;{F+U1tRKZnt_Ckj(Z=DvS@W9Fv>OXt`*OtFdP) zv@Y3ZCiSz4NRu;(;1LMRv-l7|E?v8MtpRD1D+J_M)k6~1 ztX%V?TgbeI%sHR$e?56@;h0yD@F*e|nU}WkR_nJC>PhyIGDx{>Y^3r&hNQwcIAX7RVhIOnbF%3)E{k~7MfmAs0 zOuKA$S4$h5=AtAOBn{RgEg%_asx}57+y{@BX+s=khx;-qa?In+n>UXN$a$qBzo0A) zDB0p>K^avS@W|Xg)OPM({kfK&UG*F9>0H_M-6Io3H3wc7kfyYm?R(j#2Tf#!h2%zG z29sct_(`B~mxne7QF`d&E?bZMee>3d&Iqd0U6DvVQ3|yI(s2aHY#R|3B(jhqQc#{H z)iZuTrQ*4t#`_m|8jzbP7#EOkA*1>%ETr;~h^-n>1WDoOF^vI<$MzMZ@fbjwg_L=O zMULz;9(#D8cBwm=NUQA;kq)GHE?9)EWMb-#%|vc6Ak9XO)G5hh0^k0cp{My_oh)nn zh8lZjJR+qdVP8Ah_-{ORTQbt^$ojqnqw-U*=rgexL}e47Prb=Ne70yb%=9RyESQ1B zRGvm`ZC|`h+zpc#$&b?*izv5HmfTj9UUp$~1@6qZB%j{G$Y`a^apfD^M|y{co5o+K z5KR_^*H7F;29X)a0*?rQ>^9>W@-m7%g@SwGmbr{|pk1P`LEla66}P#aNmno(MiL?w zT&E@QKRSF7#5I`=e-m`t>>c=DN6AoKIE-DvSJj%~3w#>Kz z$>ZTbMoL^U4WjGNb_k^eWS7K^0RfSiIwR68q$b{n$KIK^f>H;vK09p;WZh7e?{FKw zE2g`5P>-AT9sBz+md+zm6KtbsBspE`v%euM9!UDAZJYu*uWI*ACA@i8U+?kMig@b7 zLx)b-xk{r)NsI#|1wfo^$d(O3_vw@9qsss}Gk<5Ey0rN_$Tn~wGDY1=1HmX3)MB2i z+y#(*LtT^C#wq(D(DqW@Nc#}id?k?4$snruAe10W6}RQ)Eb%5Sv~jxnH@yRqYmvx` z2s;#Ey1VUMRzb!`Gn^sO6b@TRcADsl?Q|R?%*H}izw!(A4U0g^K4v6i4Vm^17ngw) z#tBG|X_WNITi629qwF?ZBjypmxJAYY4=y>9vXL7NNO+7eJ3O`$K0aUt98vJN?n2}A zIeFDxk}_Xg}-oNKN* zLhbC=kz*O_#tdZ9UuO^QK-(|jM$(DY>Da>YRrK+z=C0omi@L!=rc!Y##cluEfb5#xyX(6S*%>yF8_o(e1QaTyUt^zV!$OlZMhuP91B3V#C-V}{mcqupOGXnDF zpAH~>&-2sYaVFQ9!`6~ft3&;swo51=Q*>oK zUT4I#NeO(R$=b24RI^2eXh+cAgUnc=f>T}FhuEo64H|Zl6OwKqQbD%KeHu|s&P7O) zmDH77xpujcyYj^2{X1WNdFKm-JKCl!^^K5@oTC7y^L6~2=8*d$vN%jPWqk?^7H*-# z3v>fWueTLu`XB}i(-bTu$H5wqn<$-J96dAuDak@=qb7)SB)^$}gaeb@ zb*k=?JS(WMhF#=BsZa1|K+?r(Wwl5Vkmr7?mOt}M4dJvqY%-S5Hx4~b0OZv|Ipfo< z^`ZQ7ZgI?imUF_i*94bXNC{K9zompdZ*S2VuR1t{4x5AOx*(jvUn6!ACE+L@-_uUc zM|?o}?qB|L`r@`x5|Urid2^@3fu!)_{(W%NtrcMaQ_G=-j4oTVD(Z8?LT34a*)Jv_pJc11Fu2Eo zgh-EvAW~jif=FqR_hJJeI3j@Lg9M~UHOliCkS4X#&_3u(NOd9PwWHg|G>>`timHZk zSFBR#{nOKO@Cj+lTf$>|<}sD_wD2V||IJ?y|GU9~uBwaEFkP*86?S*^YSuHKN_&~K zA|4SuzK2ajZXUt$BR)&|3yaCLmShDf@Ek}tkLMDP2q3K$htwqJZ5FwQZ{m{UD5VS=xmI)g6fe{$l-?XIyH^C9J^i*ooLMr5oa zUmzVRAgS}=9FR^1sAz`I*|Pzph;$1Hj{5&J41go%+1|&@k z+BIDAI70E~Kx$80%03$)^V#jsxNM)r<$E;1B_b7|NJb>nQI^}L zj03r&VYsSaCod(LzurJNqg8_aEg0^VhIztc%@&a4)NE!oD~>tyfA~88*R0QU&wI8o z!yGvXLem+m*rHowS*IB3YDQ4mTCF=yrtD0R+M>HZ+j=_~{1m;H10^?qO1{apE+XWA>t^E~nV4qfKJPNkc7sgZVQYML z>#bNflwClwx*{4PsU1FF3JH-lzEION+Ab-xP=d9VeMVpn8c0>^&Q;5WfkYr1jh$DPEgTs%)a_!P zrr=$7X@;Sz2p79G6xUpxA~!y5lf$0(Fher9OoW4E#-Va$c5Z2Q>Gtha4RF(!cJk!v z8YH5MoFMi5XK2L!j4ubs|6@o`t#NAgf3G)w^}*?1fAAJ*pOQ!e88(>s0ms2X?Nqp$ zM#xW1P>QSpY@}G?4%NzDwBuXcLinhJ;9XG?5p;5Ibsv zOf~4f@s5EEg>+0)9y@`omhq=H?*K@KX0w(JktLB9N!t&@)ENnvH0XMxlz?;#ns@8C zK{p#B894N~bs9Xjo-^yCV{GB*0w6Rxp}vO^1f`2iq^mX0e)ie_0B0k~`7tWr^1dXU z$olvs*-i?c?IM!V<%=H2)k#u39E@TvQxmp>&L6 z78exODEMBQoLKGMUSfh4Zy2J496hO{S@tJykB$N(g5JrKz zvZAa{a!GI6)Y8&yOmK567^ZwArWnUB?XmwXAhj_cX8r#cm#->Ue7b9XhNlo1WMg~(z3dsEzU!YrD zeHb!;+=U%Ffan3GkCG_zMLBFtS#NFg!B3xY(q3=;aekI(JoZN;Bi`x^hSx^aIzBt+ zReiqjRXh^T$Y4<)1U49%pV_Ioh4~dAU7()BNm4x*+Tus@(YbP;Ai)wMG45|bA+KD~ z4J6n5Kn9VqQw3#Aeaz%fT3xgmd^S|8o3@hNefq>qM$#Q3{klnM=U$LOBD+0qgNw&O z@)!R}K>n{cNvoPjaI{7`6Uj#da>z)+q%Bsd9KCQvL5+cQ8nPuJ|MqYDExNh&{wbGg zHfm=DKpIJaltJXvPlKdY@|9O!`L91{V6xwDL*R%x4-Jt<(m=*_uzetXwL(~@Nt`yH z1HuXuj{-8vj&AQoV8!F^!~dHsqA1S8xXZFDxfrF zIf-3BhGLq%f^q#;)7IP50kTVFb^=#IyvcV;?o11r%z-pxp*S!kmYo&#e;tbc zllOk^AREI+gQRV75f+;~YHop#3p}+)^if%#Bj?Vw?z0Y%wto-g>%&9mP)HU9ghE2H z4I*E9=_NB+P^NA0zCHCc1d#tEadPB+DS-@ylT~#6a`DIxc_i{Mu*jui946gNnLr9? zrWv*zJM2RzP8%fKR1Uos63IPs_UiFz_khNwcDHVwaUf&aja)fd0Pn-%!8?9NKyXSx zsvbj4dn$O81BXO-oP)=e#XtV#2{jvn9C+k~R|@o|7UmxVMHSR-%%dE( z7S$VH8)7EF_^c@;f8o%@{V(g6fRHEGA7wzj51Os4?t7B}V%$c;=k)uCYd54Jn5ZMg z?EDXg$r=hY%rW4&<)sB#Y{SPhPfm=0ru9+r^{4lrJb6OYtx$(aFn*NL?TNV+$RyZi zSeA#A?3UD{h{SbUAOZ4Eq%BuZaE*tW7 z29dN+?}R#~kX6O0__+nv16JDzvP6^SVFo19M4HF4W#z=x?9(m+flFZI6SqQAHyopI z`1)2ATtXq6Ko*c23P`cHbLiYw1DU%5KoTG!TE5%INpbnKsSGZk-r$&+{k2YsU->71 z^wu*m1!3i|v7oVV+=t6UBU=ifq zt+^Pr8eVgnAf~aO)_*9}Y!vEHK_qeNum>KI$Gel$92%FwaL#+4y>WcpA-Cj_+_-_f z|BVvnE++=NxbMd+vr9Ar!6F}Sn*_?+i6profaG?E-ovT6>x+xmuL{Vz*~=3)eIPYx zDqsCqfXo*a(%8z`)<8qUwM4QGlj|2pcK-25x|i2RWMb0IPsbRRSt@892h z-&GoTbR%SlBu^k|Ah|+w?1I{NUPs;xKTAM5-%EERRYa8o`5(gOOZzu<+}`(E|DGZ;pvW zUh<^EVb;fA*f*+Q)6e_wz!`SsB5CocYHJ^$vyOz^u~`)y9e}B!;;I&(If}VCf1M+w zwyOY}y3w>4f0mTb{L19QqJhM++rq()LYj*{xu8jDdEWZRXe8qXfdS0VPeEr%hO)r26Dh1rxy|$btm66 zv{11DPow|1Q<|hx{?61>xcHHzOk13Xzf#ef|7(otImY6uk?YQ;O@hm3Hy$mK4Aq=J|FM9)f1i(!dAr|;JF#~Cd)WcSpfNW+Y`{^JKmm4l(LFDg_)7aqH)=fUz zA)edy@&=lQqj|(KxXyi}8Pu@dj)%h}bL{VJyZ_t%WBYf5qJ6yw6!&{DLPyZU3WwlP z%kgm7^p{B=kw&*xU^Mo?SZtX-enuX=>EqR@t9P$@@b%gZnMnYhmQMOc8(w28^OJKc za@6ASU&Z4hG&)o1#N^}X-erKBmycH#STG5c0#dn2Cnu@utSn8z{=~K4-~4iK-K6B3 zYhcd+I&-VmhDd}FDig@PifS%6!fqxyLn2ucprj(o)&hO}&mD zd*Njf{cO7oOk1J-@&G*A*+ZHt=_DT&POGp^cdmE)vg=-poL$ehoF7jfCtR)}`Qytt zHJ^<<0xyXm;YcD9SP5MK@-I*RHF%u2DY^-PTp_HPd&q%OYy#(sC&OGsghvcQ3B`MJ zsHA{=K%Cup6p%k@{Cy}Oq4PcO{Q&?=W@RPQ9}h$$rY*n{I%O%5{)qr9KdI)Hv*JY1! zo7cHA!C2?Xg3{ib57~y-extYFD009wKH&b^oGi?mbpnYQ$UH$hz7~+`rG!VHAzOiu zkS2j7>9hObZ^G~A-Ah_m;VxaK3@K)tVk;kx+UXqy+b-6O_%6t6JkKcjSK=HQ$BEw^ zakzbDhM!nd3&cm@IH|;>?&+L$)V(k{F*mlh@`^XszdQ zOW$LM%eKtiK)$$VREzJOymY%7JSrpk0uI|d0KE0lT^<+VGOx-}b@1Bw zj2g_~(F;_#%}L1sb8<3lS)enR9#M2gk_iVLA0HaXB}~^WUjK6M$9DkoU;d@vf)+rwgQWD57tH{% zfLy1Ljlgo%4ag3Ww$>WiS^Sgi>JKN{nZzuQ-MM0^*5_gfq=8I{G>({njG#t9S|rt( z8~e}1~ke5+MC9DF4uyeBO^6@VV~L@pRQ^9*`b2 zF1tHGhDDtv6w*XSaoK6dOy2OaRcLG?`^V4i+4AF-FUl6Q7j?_wmQni8a;1;9xwusq z(mcNfj-+qk(jg5U;&^Ap+LyVzV*DeXSglG=Bw^U+p9AFh1b1`tg936f^GM$00=g)Jw;pa8$;3bRyjFmQNnJB?8zAM%NnA3u1CZw-((XEe z%pQy2&^#8Bb+20iY3p-^6_9RNQT1!1`ZU^-8to)mJ|v=wUPSB~FzSbCc7v z6XTFOXWk~RTppjDcUfk7I@)$oO0Xo^qcxHXRCAUTWy2t?eb7B{G3*y*|J=7-bvC z;RfW`CVqKS>0}>B-bii+j(lurL$3wo;Q%t1-X@Q-BGO12$OG-X=n5cksp1$8+t>mm zO9BoZU|FP0M0)kJ|LO~D!*z{ELo%_b(znrI^4CuFz@Hp3II``GFh;jUa9M(VI6PiH zPUFR`&yTN>cqH2H;nzp5gWLSvmE$vW)4ZCV#YE(%2xM-gn*WskahilUUIL^9aDp}Y zw^iw0xUB|Wxox2+AjuuA@M04E)ZL0iq<8N44sFXMeY&!`;R_JE0%?=rl|mL(Sf;c4 zy$}YnDWpGwTCDa*c8SbCQWgXTkcl`zHXduW&m#j#-lwG@zk){rDGW^`uYcvN&ynHN zJI+}l%VlTfFcnfS{;s2tn2tlE>1?>{Hv|nW{9{0LcVWF?A)vnLP+5 z3(0*!q;WK#+6kphwo2ea5-6R?{PFI?heWnMUQ8gpFO4w=l^OB+x0Df=J60S6hg{m_ z87`_uH{5782awaGcgA1E;PF*JmH$4zhjYWF%WDuji3^@!)MgU>o1dDwd}U%mz)k8` zc_ouT&J%f)eB{g0&w0#1a`TcR?Z-8COv=tZSm-YWNSrx z?-%K;yFmJ(Br<{dHX!T5u4LCleoLV`V--7XSq)Rr- z@c1j4>oe_LIFc5pvtk&QV5gh*aW|xb?5;wR_j!HewgS>D))ThbL^dY>u$6bD5+EH) zgh?a=NE3-g7z2+5q--6Ko|Dz*TGDhWfjp2%0wf;$#e=(m(U%_*Xgf6W+~MeJky0n1 zku+X8t^ze2YKxS41V|F#&^U38D$Jx@_Bb?}N8dMg{EW7i9fwDZRRN@ZW;LBHshpTK zk8-t3B2t52PXy$wV(W=XrfnLKy1aper38|8G^KhtIpV+P$x&tij&q;JWQOEmp zx>L?I9?VO{qjq8IAgOEbM{XQv0D_f~p^pX<14@8wNJ=6(K?=y>f)N&NJDJJ8a6upucf=5E*JTd^i9)`bs2!9Yf}?n6Y|&B zdg{)VQB+~S?mYP(UZbz-O0z;b(uP6ulSJatBk5fiHU_u}ZO=QxTE<0H;Eh&+N&;vkP{$QwpG?H07}?7+!BpDy07CFKq{#Si7wiN zLcVxlUt1-a;kx~`YS%K|w#ck0JbDBh&wVj>Ou;87MF}Ebm*&l?czuoOE>AF!1fuTk zj1NEp9*=Zacugc^3P*_2TC^VV3+8O*2pQh8(4)Z!BQf6FK0Dkf;LCp$ZjkX}n zG)_|`U(61K#jlq4-a!`=NSmvOSo7FT8!OZ{F`-6Uhfo`WQ!SsEXL3kwd3-A-j`4rH}*76?~-u`3zAFK;oPY zVb@X}ZG|Hi`ys{S?{YCfEM<Imr+xt+PI+0?_I z8+{fUF)1W}BKj+0k27ZQD8XO=DbJ1UX>Ubt2$)g-IM6Xvh+yH39fDKHR(A4+*79-8 zln4SP3nDp2YRCr9?bb+DZ@_mJ735IJwt)FRexsuGr%p@?QH9^CZ-XePGU|2mAumHr zF+X^uaryqo*2k}I3P?H%9|5HLBOkr}$UYnT5=ev61yYPvm|Z2lK9ChY17UZ}`&)rb z@QTRt*=De+Gtijv43;qJ?duZB2IR1D9)I1W}sQdzBvsWp_P^>n6K2Ey8*dy}M z-dtT1i&oO$BOYUx0dRX$N(#yKK9){$YNTmbBr43|QJ0EX6IW;;U%kBmkLk}r7G81u zSFbPbjdJheS6?kZxbya-^8oqNNAJJ?C|vf>6UhFJO5w8mYfa0tx6J0J1hPNE%6A!6 z}1a{-wh>U<>fR>(>__Hh)DnePc8AMpm1NMsVp|KkiKPI@S{f)>|<#fUp0`23?wL3@fuslBe2or z9Wx5nM*&8R?Oi;MX%3}@LLNHwvJ}!)@whjM{Q}-}pZlc1QRfBn+dL~z4v>8B3Oq(= zqcV&p{)twIv%`5$VP+BywPvcxLcW~uaok%(^9Y|-)V#tj z**=fZyyhCAhYB$^DUzN>=8Jy7G{kstI{<%S|5|gTum)?=d2Mhf}_J47NV&IQu}+;ZRraKz#w5oO!uvJU|yV+wsBH3aTzk9YC;1W9fO zlSlS$vuQO?U=w%mYLtffMG*^qlKh2n2RYyidph<3=g*&`Hh<|tA#V(4bH$I9i9 z1Yb;n%!4GMO^hYx`4Kthl;F^Oadz(N?4kvd|K$J@2mzBPTCRC*fh-_RqF!d0{cS|@ zmgcWjiV+?&x^8RHcrGLp=O8*1vP-0&;-<|8W5zS87n;bQWr+R$9mx&a25r9Sa}U3u zQlh$Z-5E(!&x9<~IclAdi{>5ULXd^)>dal!8I!~ho*8!8u5x{zqo!_B!fnHFZ)R;~ z!bNKudKMlNNlzk|EAaTKdBh-)lw;&~q74I>HKGI6R!DZ3E5>#i+azKVN<9XUC?wKY zKxSsV5-&BXpG=nJ7fSeqVLNA*M)D>sli~t0r7&)ftKr+M%-ATjM@C!!yU%1ZxM3Mt9Oe{oy*96(no(6o{g2~x?Ot9Z*ic3!nn&Y+b2m@@{MkJ84iE+qgo22xLrV+Vc}?r z#AmB1(lp+4PP``|QAmKqIY;y|e6IE%C3|$C90yB=YV-g~i)186&aSPU z9iLb-k93>)1i3V|6k&}#bBxF`$&EXQN9$wUdZXKB1IU|PJ#v#ewmdch>6If|^gu?E zuO^VyUjdMzl*!14RjMf<`}2iOIuppY60!pEO8(SZs&?dTKD(^8W(Y{@A{I;*kw3Ko zBm!x5ghy|3W=rrd-#z_~h(sY9kVkeLy|8op_UJwX$Zjn=y*7_k%WgoP9xEWp8d)cu z_9^>Ar&qTrWH33}sx;Qe1QOl?!ZH_WMnxPy9gP(bdFj&UzlBGLjO4h(8k%sQjg3GJ z$lacP)w&7~meF#?hevObM{tbk@OxAbRWwBQ$mF;(h(q>9XOAHgI0I|;1v$K#aBc@t zjBNooC;9doJob8X3);r#0;0B7ppZ+@hp%?)?wu$1bqAQfY5xs@cx<8}@hBh{0dg83 zql`^GgS{gdKXsEY1Eh+FZbVBWEBjLlX&_S}i${HJfXD>W_+f36X=Aj4pa9ZD)^&#Q zkEJJv!LW9WZ0AUVny(#Y8^|`g0Fcs19t>pqY-h!X7|TwH%tK@?t_YEgt@k-oL)s^S z-01k4cf;t9mW3=Ft4$Xm9n+LX+GWQYaeLR`G1?w&2_&?|E-3>^i^FTTZe98u;|PdI z3Q5X1Yf{(}e`?^%3i+CV^z{ijp6YJMw!sJ5bcv0-!9DDn8fhHc z0TX0ZILwv#5E)J64CjpQ+U+e>;?eECY7~OUwq4wp4aYW$G;O&zk8;TBqA-`1$JgTK zLlwQ5{hB~R9q!=J)xV2o3P79EiisiFw{dm5p-itO{1A1loFGiGYP5k?x|2^ORqh98LBv}v2BybNS*KTE51e5sHdUmyPEkp^TrYrp$q_e?(~j^6!K3OSlJ z8tJ2f3?36mMZcFk>sm8h;?a3?NhCi3ke>&St{~cNb6emR0cndZEWSX_`iQ}vfmEz~ zs_e2PQV2q3rXneK|5o}aAYJ~JYQiI{Da50jE5K1h+FD{U>+8Ivm@{iVX09n$gB;9p zyVvR}K*A`1I^p9%Si9^`ZHr;^dI-lnzq}VmzE@Kx0pv}QiYs3v$_|CZ3?%=HgJMm3 zVdbX>fE1(+$gEw9K_OW{hF~@-*SAY{!WxYJV1Tp?r$YK7Vv+z*`SalMy&w`8DKkOi zd1rmJ3GLUhhtKku9(%|NIrPqjoftrlMdGKnpLOnFsHOLs%YJI(#^KWq$W11)dVCaG zn@IDRhNx~ZV;bupl?lk_g2$YJA;lQ#hvni>Gug`6STsW(44?g5xokphqf4X4fx|D* z5g8V9UR#{$yM#M=uR-Bw0i;kT}OUvO8s?-jW@%@gNHgb^M^ zpDKx8?ZteNFJDsPU0z)RN%7G2IFEc8$Rsj>bT+1d)N|KiOXTdb%Td=EGER?!d7`F~ z4ag5O2M&?d-{V|Q8b}6_^4i>!*Kp*6EdRS?#j#l99BIhDLXz}3LheUC+r`5IvU_h5 zKvqoiJdPNJ+_p&;2_H!0LrfK;as^!k>CZ1Azm7Is%`rqYX?d6KEiLJE1y z6>jf%rtD2Jd{$%s;OOls*Kps`y(xv>l&{gpi5U*2YZFd~lY2xc8Rq%|Aek~88JU|l zk4w6nQ#o^|$EN`i!=sbVG?3HqC?IdDv*M;X<%G!tFP4=G;xtBkB!PAV5@|%MGVgAChqt(h?~iN&1LL0m(w$BGOQ1 zsRp}nbVmZ|T1^+o^4WZnK(axX%aXQk-1*MV0CF?$HUrr#FAYf?dDmPvwg*Gae9vYs zaIWTD1F1~7)X5Fudve$ni7X;HM@l7u40Bi$iSyB2RI{@gvMtW1@U29=Cmvu8$85K) z4`^#k_l5Q;TsHok#10CGMCwLs?|BB+8=7|&jvjExC1@&l_ehp2=pie_HJX=BoLzb> z?pEA*)>}Jqg6Wxs$=>*cdF0|R3OCqFZZ%aGqz7qzL|pbBeMLUFZ#n7ZWyLrE=~L$Y zI{=BtR-j;oM1MdLAl>t$?U4;Yz|j{f46bRHwz02(EH=Bs=vY02^XfQ@6JuFQq!yhe zkP2h6=#Cjkr+j30cypw!(_`D^99Pt2*AGWX76p*_LF)efy-AkF1oH2G7?&`>BLeyS zwym205 z6Nhp2^DYZIfK;{|TgHn6br)g+i4KJ$ww?(vftZc7 z|MxkAX3MPr-U}ck8^FOY5}Cmdy5>0Bxk$3(0uoCevyx5ykpiUa-}1iVP(VVYfmDnG zbKFytNuMbm#@FB$JmFEbMR%mJm{~1n%K4Z_(m&T`ZYV?_nIV(8cAR;{)g{et-3GtM zOw8Q-{M0>p?6@eF=Ny}9J-cWoQx5{t%>V#F|GpI(qcbkz!3g9;w2_N!JkOwWBRtbojpNg6L4{X{)bwdq?lUmQB% zo^hR%~3gV4EU(4nM49OR!(Ra--y%a>in@y zs+R(^F|a(l#@70?CyB9{{-0ZUyuwJ~iBtE^Y8gfB^`R+E1;u#{&rG}P46jbfd;t>S z8%@Nr1&#QL2S^1-p(-K)GKoweS*j}_0g*?6m~=EC*JZB5=cdapAh7~+Kp{&@{X4ww z64|(n=l+%L3;;o6BH8ahi=GPi!9Q3Bq(Owo0`d)Sn>s?NMrj}2?(wwlEA*AF2_#p{ z)Dbd(+`4(|rlZ4~w_}@tvRMKdNR~q8!e{Romm_xK$DKYfXnU@)Y1_BuP%Ta|z#ccu z$*%rsGqDJep7YjTKdorFBOC>!d8Bxp3JDd}B#Yk;>WawVv8#~Z zeTZyPdghJ#&24d{Odxq`RzMQR{LC;$`=*nSXr_;jVZ~!Mp5^(G4^EI^36X%+6te5G z?Xy8LT{a#&6>{75qr;oF%Q`^vQAj%PlO8)15`8p~ajE}))3?h&<}nfrkIbPj9Ckmb zv5@As0WzW*<+X2c&eKj^U*Z6TwPw=%T5`daZVFA9d8ar^>2Moygfj1$lKR@ntq6O&I06$A{+M%Nhu*#gR}T~^{**^36KQjIQfrLA=6{$u7EC(O8-Q* zC#PJ3sj}LTHbCUybZh>45*d2gV3*Gx05ZcEpCK)hBztUlYV41^8OXSQVJIy0F@e-7 z6?QsrKLSb6L(4cW`<3RhG4ohJKK(rj=C32$cLtNPv5L5(!J@_4C}f-=%_A25 zxl%o~J!TcA8pgL+APr<>7_EJS@5pNyd*-dKtHea#FCd3*4h?@y#R#(T*(&n@DP+P-$ ztAC=zsEZEAA#_PC7E6G>${&(IDn~i*8lt@T>i8JdenA%8MR>Oq;>Gp=T3}<=m0#YGO5t%@~$!f?q z<*oa+OkNxy*#_AhwT-9r*u!{i18JA7+u?j!q3=3uK>mmR{p|qxJV0(1kUIe~h%7Es zA%$dKUu+8?EqP~HIF&@kL}3Not=%V@&V-|Ws`0oF^HVA$0!eC7K(fq{rTGYCyTV;S zG77<%*nZC|?n72Hu7OFwy5^Y#%*8^KZcRcdF7S>${V1 z?j$k!#k1q9t37Tt>~RwkS9bLtl5ONG5J&=Oerf9LYWoZziLll5v$!I+epc>%)*COB zlmx?-Y3=sm^CeD?3nVzTf#Y%)OuAztFl;?N zg97Q_Z&tei{JjE_e^wt-NH;$MW$qO>k8feIV0;;gL>`y>H`GWR0kI5$OqabAnlh+) zdc8v8vWc-H%Km|Z8hh*pq)I%1$VYN%Lm*QjMI`dLF@d~wrVJtl8?F@M)LZLBc4zq> zW_6SqL|H0c9wB`}of0?nlZk5snNx=nNM9v#h@7Vf!&Iy}B^+N>6PX6D)shR1p6w#k zaemTUB6U90JhnTODv8K^hfCRPR@$t&-FZhYx zWK?gMMvSEvYQcb7f*v;wO$tcBGoCu8E-djIuxTKd=H@Mswy%FCAhAA>ASfWc(G(yJ zVY=*;OCFk~LMC^54u$;o1pvikS(~m&9@AyN?Rz6Il0O16w%xz=7EO==360V`U+_vw+YB0fP}~nkYg#571rRgc@vTwlEq^(A!+N+ z6Jqe_IcztI=b|%t+p^G4OhDqZA<2ovcJY!tcCF%N;eABy8d!*>xln~X-krP-k9XMw zpktsZy}K%9we z$HrDI!6MWakYSYz7h|2^xg(5zQD9b_ZueYBrt%KNHEQ;G4_yR8VJRRnRcP4a{FW6` zEb?w1TTIg=@{JV801~bssYTh5_6dosD7y>fCILCd?`>~D7L?jJ6-<=Es zI$cQ8xJ*XbNu2UN#*tT6$igvzJct1#vx72?5jKg8QcYghsheQ;AKD*f9kuN!1No{} zG=t+cdF)qFN2eM+j_8Xv5kHP~GD2U9F+$eaoj6Yds5Mm9>+yP(DCQ)=jM6;EPkh0) zp1G6w?FmDrU1#@B+&lZwwHtPrMB0rI5MT zNA4eI?GvOL&~VpaB^!rG!x%Rbw~H7U8CMsDuYCoFSdQZ2AT+LNY+K*B?r!p4-|*E_ zw|x;32go%%_MduOKI0>!FDBMk@10n?z4G`QMzpo`=bLY0I9B6d4`EIx&z|?MU~1?E zM~}+#BRNB>(HsJEoHYiGsH8`|6wXf zqP(_&%xk-dW9+UYqB$RJx$mY#`hGdJL$bmdTMs1nw+E0r@z@5kT(*nZCelD^CR>*i zcNKEGc(g_~8*7mbL{?Z69{c$X$)mGB@aRijVKZ1ViGJD_PFq$zx)7Nmb~O87X42V8 z+AB0Q7Q0U+kG?yWgm`-YV|k05%}K~tBQ=hxuL2%1_nA$J2oAinUynFB+gk=ZrS7yq0*)hYc&XM}MdCX==yK2v5XS7}Y7ukM+Is)S1*iofx zyD*8USk|6#$n-2W3rP{buo>-#oN|PVMp_(+U^KdbX*NOGaojg>3P-{j1=j${)iT15 zHb;5z+e^yfa5j7hY++McWq*?IXep^L&K8sl|HkVtbRCFdZ1NCqOv;R!3DIhqEUt!x-83K?N^k0ARx`3_+9X!1kPs0p ztbrKI$aWJ!bAdWXzN{E|OsKF@Q`dyj9U9OHYh zuZ^i@K6%c2zP?Pkf+S#WXT}gC^LYO1`96<7$K;{~WRpmRG_}3Lg_-~|qiidrSVSQW zWGduS4aohakdQd2kPz99k(hYI0?0!?uN9A3-L^&&6MM2SdLBLgipsT=k9hRZVe7&)o@d>evme*t8#%B9bD<~ksA?HMCq88kbU|ivKf066lJ3Th& zQsJgrLyQfLx#7o8L_na)dw6q=)BK;maY%ECXghB$PI-z(NaKhVHKl8YvT~8F!rjQM zq))yzxR7G7O1P0oPjtluY`>6=MACrENTE$U0wIHww&W4BpH3iOpG$6g) z$3XfF36OT!1teF+W!h&G8-aEMq|HF;mz2w-Cf!hg^6ANACvb4^`|X6=~c{afY58!6-Y^SuZ9E>$(1kWf|00JXT^r$8e$RW%;Bn2bjbv#q_}F-qC6G-Zp9~-)FCKZwQb+^ow2u`MAa@AJM<^Wz zkeftg(#Yrj24waA0A$q*RV_P;ZpY8LX-}Q25o1M8X;)>B% z7pPy!7BmqlaJ3jnqG*x@Bs@NY#eRWY2!t`>ib$%4Xq!tX4N8-~QWMLsr_3Y&20i5% z^RA9+#zq&-qHt8LP;bdUBWnDWMFFk;9-%q5GCl#1tG%@~fW*D~7T7huTBMc}YsCqs zQAx7q-UJPh=FxY_dhLayY|S>)r|YgRf*Na+b&#ZwVZ?b#AxkpL#ikURIT2MrVg)4M zNrzqvS!R(;mz_kaEmzmk6p*h0q=~$Z!6U}&1x9+4$AjjvfGmOZ2{IDn;FH}xE$yRX zb^`hBKXQ~!P%{AJ?mR@6LRuTWb=(cRd4|LiNGBoldf_-kN+R*tb$xrZML7H8_hfaM z5)uhoIr~Ldnd>jtSwecqD!bKjxb#piJN8QgBo8#7ErTxIypc*0*A&CKc) zoFE~RFr5wKpD81mKx(zA@;w0guK=l_+uh}q8ksoE)rxvyAVZssVdetOBXl|~IjE34 zBypAc@izqD#(ZQS)r_(WNWX4C2JV2ER@W^+OB2BQmwoR_zt8WgAGvGqF6k z@3S4$7(RHc%WAZ2T!_}xjYkq%t=qPZ;vxB)lL(lrhf4J9isfoZq}TcFw6~5>2q3MH zM$+@Px{M+5L(e>I?aB;IkgZDShM<+vRT7FPPp)lZizX%%+>)>(aZ#~_sYa+ zc+~xwm@_*Q`q@R;92x8N$N-I49`E13k3`CiIjYI3;j1t9fqdLR0uc0+LI#lhA;<VAB&$WKqGk789f8roei0whTv+0AS4I|7g%k|lfrL+mqv zw8K_blC}zXROQe-z7|1E-0Ve6VMiVPHenS9V+Ca87pop^ONA^TlSl(;tAaHj#iPf0 z;HwI-14j*H+i6E*#jEnzPm0L&+go&otOngm`{1z+q!e<8 z6jJ@U0pyk~mc}gD*kfl-yx*W}8XpOBrRIux#GitSfRx#ZyYSa64~+i_9?RS{AzZVE z*P^G@%;2cy%y#7dohA|w4v+{YmLazHT^y0MYl=0uM9S=)&+#SlsKA8T8v4ms zx+0Zt<9p?Z@xzN#@Q6Hi?sPi69u@3Gc)U*Nf&(^>i*nh}rXTZpfnnFfm1Xha>Go;x|6(Y zO1<0=32uvB2D|P+WM_;5c2{jb%JGc5a;WntKmi;HN@3{Wnn&AxA0m-PH}%S6Lmtz! z>7>;eWGs~-4;~T7I6-FG2RVXAp#XyV0~z>lvk6TOyKRj}o||hf=%UyieLyua6E+}` zb-QakVj+mdqp`$XG1M9I`0)$Jk1NDZmyN+8KxRl|B<-{jI4fiT zxuHRqS=h=$D$2G(K1OS}fW%!p?c)yLP4HOy=x8QrWThH^?_q7OkUVC%!ST*S+A^^% z49%Nf#b9-NY(Uz3x9CPq;JHa32o0oX!@$x1j%FcfD9XXx=MqRh6_S6?e?PN7v*diT zV;3CN1?lsn;aqYW2!E^U^n^-&W^Cnp=g#snKwcMPWBB%!oA_uNfMV*wn{<~5ue19C z`e>OP!`2nmxMX8Q71N-Frjdi^eUJo5JxCuR5*`6DS36rFo%Tr}F>?rxDUnsDX;N2- z$ON*IH@V*eOCW<~1DO&zP%TV_^b2^zZO80F+_{iI-bf&Ma;!~^y#S9FKD=<@!tp16 zuHMHqcjRu4oR2Km=t?0WC>65KkS)p%Ao~j0fXrCN4>jjyd2B#}B7XkahaY}+C^2EB zk1zN)knn=}_!rf|ya6@_5zB)&AR&?ubW$Rjqct{w^dJ{sM(GC?hDXi?2xRl$+hTI| z2>OU+q~q(`;SlQF2uW|^bS$vP#yzeeASIM4QZx9k)*c!m*Ls}}3fUuAro%_KUIW;Q zx^*fQi`34D-S~)pYEVJc&3q{4fEjE&+aQ0)OAvEXrG z{?tWG`gq~P4=?QA4UvgtExB(n7dQQt=NTyLxfBEGN4 zDd%nh)HlrGuUWiel=a1db2;Os%C+<0@F*Z*(_OmIGNW*Z@OqJ&N*gG=P7a9LUq?KG zl877`iH(`!JD2C}6Im@4wE`t2vTeMmiedBF6&N)R{hX$pxtEiM z5!IMTNR+F_yfN!kn0Wl~7Z;B27I+*To%DGe7GKvWjV+%TVQ`S$Tz0jep^!Y2_9>Um z5wZcN^A(n>SezPHYRBhBS83GkBO@hkJkPi*5&`rcGtiN* z?kL5*PJB&naa}+`TNfr>yygTca+P2l*N}ouQb`O1k@v<%zHki@CW&>(lp~AOd2r!z zrX;y8Bnh>BADDsUq7e7ZU>{u4hyZ#dVLCxY+g3nQs=@14qjw3StcVOwjb58;z}lPD zYgUnZg4ldEQ5CPrHxbqdMrVBtBunjmcH~1fnv17SeKw+{-b<_ZgB0J&d%l!VqXxWK#6C@UO89Dne_*Fk*9INEpy zNLslwB@-8G+EiUB14)?76=|>-ruDdgYl+;NGqb8?TPsZ@&bxq&gM#q4nDMq=h zkdjD%{HK2sj!-F|Eee}G`CURA^9YIkW3v)APdN<)VSNHfRsM=>xAg0!XgYB z6GwS!?;X&gbO;`cNzE4Ev*FR#U}uwA_UI;*klSuTbeJ79!eb~Td`V_u%RHiw97`LJ zI}PM>v~XB1S+wR{yWf?TqK~>RN!c92YxkFFuUYu+nLv_Jf@?9Bsyhsqw6}*d;+Q$| zP}eFcpSAuOP%|=^o6r>9aLgRjFd{!q?wg2a?H)E}PrW7}IddAwXu7aGQtlqfGbI0< zq4dq28-diS0RHI67C^dW=nRlv37;m9A$#@Z#*<>?b;w~30;$(ka~w=&wsK8aW}Tdi zl(V)0WVDE1wQWzQO*~_BP~$Ts78xHx8X{|0EFiT?#XzdL0)&20KvpgL>l=aG1dy*g z(Nkq>TzN}_r#k9a{Q!A{Mt5<#pMQUt2K}i5k)*$;ia`LEGf%q+LqMWc!Dm1pvqLXpU!QhMPwDQ z>oOXfVyW0B9*ZgrZ>+|zk4*-zrtB|8Mi99qQ)u3x2OCe39`ynea zo`o86Jl~Z<(r=cB$8y%D(eg-iWNidThH`v{Z0Z=bL;UG3sbqHHX4iPx6PS49vjLeW zNC~7JG6vSbjrl>rcJTewmBI`NhM}(!lP=~ zf)6awz}~9Qd`i>smcnm{og#P6EUt9;kQLjwi6bqrdF;aCOYM$k-RShsaFMLi+}3s!a<2lIy10o zL^{})o$%q&c1e@3H*(CdrNjZ!G=d{MW)d=qq-oqh`cseY*fCR0Arr{VLn4qK@+u%f zFkE(}!sV^u(caoe$FG^k#L;Ry^c*avK7yl4D1u2cX`c;%&1F|W!$Y?Fgv+iAXaG{` z=o0o$I1DloN1M-zSqnN0kw~OF)4ZYF6+^FZR$=B`?)C{Fl?e9|fmzkE9cW7}ov&tr zR8LM=dB`QZXy7;l&LYB+UF<5}CLd~E; z7Laz?TQ36PS< z99#fL%mRs>k-yeJw)fy#CA;2Ofk2u^vfl96ougydd2)D!NFJq>1TC227z7f_WDzn+ z+r>R`NQdN|_GAS>vuL*xlS#GLN&yrB($Z3`GNDx#eO)}Z@1)U2G}z0|UGYdhd>nlonVa)KHLOJLkX*UWdPv#`*-8Ah zayR2F5I`EmqyF^xf~$yI=@1{z2cdVCZ&sy{yxn>E<(C0+jm#uxgLNk_waxT5?0M!0 zi9*Irb2vmxB!94|A|{aSst|y5Q83Ne3ArS))<_BA|LPy-F@YrZ&ckQ{Sq@yRra=DP ze-@A|-HY_&OW1bPc)ljOXca$rks`Ku%toK*A@bGdn?i2v%;o8;6p}P#+csr|#AC;5 zpAA8cfXuGPR7bH0jl%H-{T9QBI6nB`fBDw8hKPbOfK&$Z@D)wO{_5R#89_bde(&Vb zX-AFur`P7$0vSsw+6HltdsQgI2#s~JaNH(y*#_lAFu_q%3&+$Qgmwu-9uH{xwS(`b zCgW{pj=Qz8hX`DEfk0>S$Ubqo<2kS10Y?lbX%%;it&%<>PcE33V@%v|z{GfO4IV=x z;~*(pU3X+8m0SVH-ulS;y_bLgX#z>gk_Ubwu4`b8srH6l#e^d|36RZ_NDL|iNGt)P zSt1qEJOW+<*_^r1OYVZze(^AY9Bem>FgrsUB+~0iZLfK9VLKnK(MPtRwp^baBbqq~ zfdH8jX&|xc%mqj+fK*bO8{9Vni9Ff{f&2@A1VnCiW@ z2Os>_A7evacaKC`AP)zRfFUAZ0muyzbpnY(2A0tmxnXh7=Y-g@iqGK_%VcECb@lJN zQ6#?&R~<|E@TIzZLFOd^tcwCew&RX^_hfR2#h=*!vZL+jG|J>^OahAw(+ zm8UtKCpj#Vh}1N!Y(?iukx0stCtR^%6pyMij-ZdKDCUWh3B=`>KmGLOdxYO>R#9Y< z8$3M+`-#-?>{VH8S>&?fAW|OFZoBSMf=J_7MQSOeiA?Si$a2|W8j|{lR~M##Hic;$ z18knD75>lID&;#2F{7Av8yYFl*j-y7ji5EsK3iY$(S%XP3sG3#0=E|Pjc@aP&ga8?4AQ4Ai?IND{oeB=BuY0dJCLVLyJqn3BUgt2$ z7Smik3p7Xsv2K5ok{k`uphDtH9Q zwhyw1G?J~Mf`{Ny3v^vNjGgxdB<3i)6jDIa>?0sIZ;J4`f@{?Xl?Hbp^KIlYweg|v zeCIpg|NhW3O&_smjN~Ck_JxOl#8)SI{jTv0aBRV315ymeL}CWdfM~UBL`Dk8jC!B5 z=Vv_bdd@%s9nx$bdycYs-<_3UD#@h2o%Ne}=YACDbhG))bwRH?IjyEe5XJ0{4Ij0e zsA_{FF^m(IcyCZ_>>-LeAtI0?Yxl^Oui?(uJ9py<$qz+gQODEi&xmOhXeW=3TCW1+ zC6J6XbX|CWL?V0MzyHl|esf4TW}t1E6p=XX4L};l;1Sb;N8Stj+#TZv@~`touhy_ubnN{K9eG>*>7 z^PqSJAjKp28AvR6bVzd%Gme=NFC?=eQVRLqM9~&N{vz8Ut&s58-w#z$n@7*o`TN?LhKww@*RR4`EYtFm7dHs_t6>2nzXEM z3&^Q6j2KW#^tg-*d+-QVYW!y98RmMTPJaMN(=IBhnm3;MUWZI0T8Kj0V=GsQL=s@T zm?$87%kT)cs3`U90Fu(BYU;iKkxM!k{AeJRABV_W&i!e*eBADpM@e|hw2g8=RkV%- zW4oK7AHM{Tu?)y=-ZP9u(M2SY41Y7a+}!qd!tE41M#9HD%3^tc`s{^+3k2D+4H5}| z*?pGT@dPs6wQo(rGRU?WvrFlnmp!S7Kvtb zh3g;jmQq=`W+aeTY(7H~`BEFu*k~aX4;(o{+#P!&@!00ky9BVAvpUR8t6dx*V`!RD zn#h!Q!#$69T-&QiNhT_DP6V^2PTmge_10DmB+RPuQQx)`H;{Mk-th@Cq4j`6+&@C% z2^4*mHUfE;D4W(uPkTi+ng&UDG?3_ICdgYlCyUmmO%Gp|NPb2dneIDl*^rlWw*GWf zlPYN-W5AFOp8+6!L*6G4iPMgEV6up83+@w1XUBO_K!z#5y}!n?QAnv=EG&gbZ14=} z9peDWL$%?iK;o^PcSIgjARCYG4bhtGEDrXBjBYS`ZnOpJ@UFZjB$tF2g!pMRe3!y`bpPBbjsbuN)S>})3yO%@8-E+rs&6^o{PqCCP6$*Z&I-a5%oc!6%Z zYp)W(Uo(%Y)p&8c2QyQ%Ce70r?0dnM~-$gIi*Y4cK9p6C<;gO>xTgWAl zuIva7zE@Vy0>kNT3yySh{b48SNV7ve8GyImKhUuuBhGR^b*3%=epMl1Sc?6_42K14P0n zGYknNpXIUv((56)F8c*5q;xKUtf1!E)-jGYZh5kGKQ$t@*P;>1^C`x(TS`El z!vNA~#+`=|Y~!bOC#=qu9%Y1HHvk2UJhEFEfixB~x?4ewS@=dOTU1~)2*jinKJY;xV;(F?j3Me0Lx2fgN28?oEEP$)1RxUe%ls;ksWD9Ca zA<@PykGBHN15uoT$NYQn2#v)fIR5(AzXnJ_BOqgPMt7@UAsb0CWt${2qUt&^+8jiO znbr)dIU_#$xnRY>#fCkV^Zk;ftk^@Mw2!9HT=V2@M`y z#)ij;W=K}*mD8OwM=5plCOpo{Q%ef9eJ>0u z-BAH}-BIJIpvO6JXvAXa)Qqoq^Jv30c>L@P7r~A%Vdn6rMmFTsh|cPGg3~M9ST`N4MSW2={tzw(HN)0P9Fcb z!fX7sc{Gri9`V`mD20R!%=dN|vW+2-hH?J0!KG z*=zqG@<$pj+?N80GV(&(DcVh5o_m!BPRw=RaWe9{kp)q2hV+#&Kq+aoO?#$)ZusPi z23@@e{F>J=dqmJc66pX|%S(3d-9seT;>&eyNLv(!svR0Yo{_}h)n6D$#YS^X*RoTn zcXDDHASb59<92}DPRKxdTx0?!7C>^0)RW?DTk_b#ngX&Ck#)YzWk9m*_{B`3o>Lrc zp^tcKiiPAKU;0@jA|dkB<=NTGFbR}#(Ko|}KTmA0Ih)*%vwG>|!S$WhP= zSwIdIklN_n2XZ$Ld4fbAC6J={8|kktj}gxNT08ZY(6mqDMKNncw-&)H*%;(zm%R0uMxsDu8?82K->$LV5w}Rd^4EhoZV@r zW*`CKQ;AkH8Qvm7WcDqJSq(ZevwY3J) z*Bb*Pzt}O2?VMwqJ(R8A_1W>*sCk@_fA$4lJdFC1SMFod(($>Ng4I%$QNEbg9!DB~ z0C(=R?3y2Gi1a`fW*~D1IZ=x;-LZMkZRXa%E=?M4%y3}CtNWHr`|;R}=8#>DYSF^h zRda{_W1yl9k=xH+gh+tIV~a?8Z)GE+ZCg=I6S{WuToGCGTLx0*r6}%zj9`Y>2GT_4 zi^LHg6G(aLH^k#xAOH0H8`}Z$?Ct4Ole2sN*E@SbQcObR!ol2e|CZVyOCgg;;u*}t zT@6UB<{1Q%JS17j4GLMcY+dBl2XZ%C@*UDhAk$;#`7yjTpTLO2P9W*62qy8_93eSF z?zBRpWx0n+rWwIJOD2#0N*3kB;1M9*MQ$EVq=D3&Yh1M*do0{><^?`s=OmHvc=T7l zIwt{c2jbkpG@9~cB_3{M`8bXA}@tHo4XGxL6B!*BbUB0+D zjzW5x%Pr#wRNi;NKa`#CZ#z*Vwxpp6&iiv|j z#@d0l4_}8#Ocm;Qj?RgrB;)lBwe)nSCZTbZW20R%V})|;(SCtIBA(rozRc#GVTkZ` zZ`_FJ%WS;#HkUES8Wec-G+mlCE#&e4J{xn$?xqPVR&(BnKrDVN4)X8+pXUV-{-i zro&LkxW>zQ$e3VwIDu3~TnINHcNj<@Mj*|jSxk4GJpOKI8#oq^%0uqdAyOI%E=XjH zM7+b^Cq>OBwiPR~n2J$I6Z<3$Wb&93v58|W0`LxL9SZ#0;gUbJVEXjv^CP0@4SWi$ zX)RM<5AsL3+g-a-%(<0!dKS}@aqA|4>U~}SB!4g>8()${1;^{69DIwc9KQxDpt3}| z!3T%T$y42s3Sfj{t_X0p2fGQp=wlKoAaU;Wkk4o|cLBTlQOIHr(xw4AKSUV{Wv6RLWC;o;H;V9xQk?MbBOD+m{Fyj|&UOs#8 zJA1J_N*<4_&+BhJpFlpZ9ekONtawINi}V6W*oq)~uu$Vg0UoJw+NS~en1IYKNCAni z!Y~3kz~g(Vj|OsA0}>qnQ9y3BL>|f=xOzs&e2-1+){A>Hx4NXANuZQS16ieS2Q~26 z2Xb2qq_dEjjuem4dgihXk~r%OV_Y(fN9KfxV;m>;ab-~+TJoq%zLxiOjuGJau*pO$ zFLa@BWP(mlFL~&O7PUDZiMn}I-g`uqY`bl^az;lnwTmzUaFJ7`{Q8pZzE?hb!)|zO zO5dv6L^F`)ch<%PBqGiK^FIk7J#KoNmWG3 z&kn;22E*>R~`oIcEsxj~= zApg+{N%1h^Y-<=g8IOk3tH6Ea+$w=|XRg5;$od44^?r^SdJ;A(HOjmD=>Wc3Q4Qj# zxMr_Tj{pXMj&-gpenI3EO?OEQQK*5>xzTg#QCrsB1IbEH*&vkUf+ptAo}LHCc@QBA zH<0`~G}e8)UcDRj?c56hXl7D~c73t-h)25>b=x$2*b$FQ0@pyM+1s!5R+J2#m{-Ag zJ3xK}kY1O(@G)#UJ086J*vmtMNCAlpE`=;0^VwKBih)A@2*}v<=lZytgaq^@V7L0u7l)@#xE5L2EL12Wn% z2p6vTq7g?H7d0rh**Ff{A5F;Fn_TmVL1e@*vCvHANP}qW1NjF31_qGmBh^B7Ns)oP zj5=Z}KJ3{`?ngWpk<_t8;y@-c6tWWHUZSUm{Zh!*T2YIAhU)fq_!N-OKGlHKXm&pd zDIQTsh1eEI;aFA*DHLeK}C%hxzFBMJ$V77|; zTp2aSs^>(vPX#oJk^r*#Ymd9?iljYzMuSLv@N8UClfyI-YQrg*0x0p#F$9v`f$4~N-dX3_mdCJ9H=uXzh0x5-5aT_2tXca&vk!|`bSK|5vSr!!< zHT($3KMbm!WjBbflmhHWv6N#y<<%6=sGsAMS{7$eN~A<{rr{*tlm|s^A~EJ{27%N=@rXGRcNmj~%eU884#{A9bSGB< zDEVk4Nrt;zNH9H#JVGPhdK7=nfAmPCi3G^Y{{WHucR!x{e9G*v4PyeiB`txZPLm4R zF3aBFvJGVA#XaUl7LvbGKp*1QI}^9kUT$nas?bQMcrO{ z&k9{GOHu~N9YM#?)Qo53Hzz69_!pg&azZhxYNZ^#u7GF?jhu*Cuq?)X1nHz{0ZDpEqp=#Wxs3zA8WkHNn;YlP-v}U+ zNPM;wGH)p^Z%v{xdnml)F-tRWnB^Fs97Ujjbb1pW)kr~khExwkYB_~E9_Pt{qm7ef zAn`n+Q9$ZMB*FaOZ@&$Yzu3PUA|Y@ik13FB&2l zhkqsmNN<45zO%0a(nto6)Uty|nUH)sfRsP=0$gtmkW?OW+0Vn;0pwrBVAm7g`J+p^ zQX!MZEFFqR8w%;zMrCa#Y}IJgNH^-9+xN=0A09Y1rUEozt*DUQ zozUQ`n|Kc}>5pvFp9YXrlnHZBFTms8VH`F!A8!}H&9Crn)q5nbD5>KcT|w*$;ZpDj zjb5$-i#F|1b84rveD`k0&AL<#>DCB8-sEx7Koabrkf&8Xr|*XVn>;xZH4Tu^@c}?? z|M)x#X@C+)6q2B(6msCM569Im(I^E8h`AVrkO)t$m^~!YY4D$kM%N2P|R&H)UV=l7&tZ{#bac@qg1F*ESxpwC3=Gb*|I(rWEYS~q|-iReGH@)oiT0* zko=Vah2#jSkfv#)A2zsb%mat)v=x%@wG;8W0+2^^pSw?ezMvB<6`DLl)%(xAsZ@R9 zaW9vQ;9E$hL}r4r;h0U4iii-(!^TppNu5=)MC!lez2}H>T-!e9D;y5dQ^QSgSQj88 z(TEcU+kM_Fz$h5x`H(oRhClZaOmYo8N-I62GpEaioY9o7i;_g6&Xr3{JU|y*;)OM- zO)TTZlHL{B5u4i4*8xbH%CR1f``Q_|1qn))oBCcGwN5gkL#FfElG04m{Es*d4)oW| zL-)x+;~#eJ=@W^^kGDID9K z!@!7n;+1bfr25J~Z->jL4Wx$|NME|N?GbJKx3cd5X(AP89|KO+2j!3TEeRmHXdCu? zAuusBdlY@_=msx@RQ*B|ct}v7jX+&36O+Tprg@xOVOoblZ2Z42L5ye{x~E{=198#287@!5aAIRF}}{HyPc8yH`m#RmYed~kna_{w32hWIAQQ;_)=60o`-ehGARCY+k&zhR@i0Jg zj~Dc+Q1cgA$Ck?$kcw#@GLVBFyMTm8mWp37kV@zPWL$Klk$yoLm(9Uv^7yo_sxglM znF6`fGuIRs-4ygF29gHSR=amqoaArpid$!Gsvf?(@0Um4IpzgF91S88S5}_k*D+F! zSlsG0<)SvF9Tud(Ouy#{b&z?SCwm1 zfzFcL5kECNIypSxCAm29WHZA$JK!7EB$sKpIFyPb1oKJ&3RbN8k3P zz8}t+TvdYs{O}M(69X%K6vOzLfbmMu>I_%5}qA`yij$a;?A106|Y?)M}o0$d224vp@hK z;jt?}4UfPEkIXa(NW$xmQPhKIWPQb*b#?Ww0wnrq9I-R>l&^Jtm?ZLXoIk@IVf-7z z6Z5F$NB{5t%VR4gnF<+uc2%p9KuRLhWye-#oANv^VDnl)rulCg$ny{xWtlg83%2I3 zDbG+4Tp+^s14LdPJ-K%jr=xUTT#0@_NJ8Wu0T~`Um@F%IU6x-VkPS#HWb~euNg*@s zL!E{w8-C^EvlTLcbe+aP(oiuNWT!$xW14v+(8eHAM?K^bEDg?)aM&KRaf!wPX&^n- z3cw9WtN{s;(KMOUH~M=CWdEXv6w6;iC6l-O6S=c5GUuAF!J>VJwSdq|2uHE4|IdS2Pu@G&QgpG=X@CcCWtDWU#p?4PuSJ%mZ z_j!EzeSrM^r^^K0ojVS$7kx(vCWZ9MKE*ji?5?`6ptjeKuF^`rzyKQUx-{+@NK8OV z=&03r6t;kb#RRft9-V~b&xyj(K+-?~gOmzmanDaNU#oeLrQyKnsV>6o31S+K(qza8 z23&@4ssy(!Apgfd{NlJ-3{{MSWAWJEdF#jh31n6QpQ7lJNuQw&7R!AysA)iwCVD_e z$O5tyav<+hl^U=BMs3ZtKE|Rw-AAafLrEGRAHmT)nm7ZQF8hf9Qj1XrfsCVMHmGGE zM$F5)tmDfL`?uEoP`7nMziX1Qq0c>P>B9FNxUOJY{X7Cv@ph~UAdkb*aB^b)6cL5H z^cN;(qZ&Sbav#;4ec*_Vj=Ou3Yqjy`9c$om44cOdf9 z-!tt%Qc?pA)Ufa81xnYJ$fqkysW2V4t;A=S1wvz;j&=g0~NM#vPjX!;ZU?whQccU3Z9z1@EY`FiE)PJ0WcC({8 zjvpd7_P)b_bU6v+1ruq@3;D%LJlaT6XX9*c}P{VMWletZ9ZQH z5}#exB=UE^8~WjuSInbvjMWr)ZJ#3vJQUqv7Ble}KLlA7)cDR~Z`}(ZQw_l{r@dOL zJRW(A->-hkT%-0hKr-QoCO`dXxOCpp^>U=mH64D1;78dVIK)L8NEZ|}>^j@!ZO)Jr zlc#1*#mym?oe>Wn-{054U&G+2*H&F8F6X>>V3{fpfi>Sj9``LTFDq!lcr=hseMdaw zcO;N6Gk(~)>zUb+B|`Pz`Wht_!U@$E(MifVv1<|_SC`-4x1y3JKHETYgiIhkV&iJI zLK=U5g+lUdB3rMcjAsD}gy(-oHr%a`w2>*m2FOVn%@lg%I6ce>lA|M4)*rslRp!oW zB#;jPWbl{zC=9KU4aY61kK&Rq3P|{(wIatC3?l8{ey%9{kp?7BBDjFetWS%wi^ft& zaQip9&i^&;`_A)TIM{3Mhdn4Qjk5*8HuWZ)yNSe}Wd@w98+&H;3xre#h=QYlrHta4|7g{n+v%I8|KWr~)!wwsYPENYPks{IZql+03KE z{8!Og$>o8={3J(HeZsvOQwL_b%1abdKR>O%`nXq8agBb*Ys{iz zR)_Tqu5E8^wylq&#SYZ<@X>RN7DtX$?M7pTO}b4Yb#$>i-|Ye;-1R@`OAP^&dNnSa zJfwN#4Ib&{WpgP<%+Zbi@CBUks5@hIm+^brjKNd$I6`3i-PYWIGsf;Oe#b4wq|4tz zA+=;hMd%#TF1IH|*2fbGMIrOD!fbbx<+|`+p^#@GlEU@#Pd|5xK~}ZfLgWr0l5g_k z?c3yh<~pkch7ksIaXB7yrz`Sj2;>i5&>6A_`rIh%I6JL9r#QIkcJ(KDjy+e%QMmr`OuX0%cqc_!pXVqyUK3Q6i zXnS*WS~J?#K&jDqvoxBw<18EI`!_;6s~d9474h^ z)=CP6)}$X*zE-|bwb#~)uhnm$k_+9g{*9B1eC>ZBkN}yTj)~*LM1D4q-%uetfyAny z1|kzkBytkSKg(wE371{ckcCJCnF0xrKQv+qB$zn{H;{Rob`7tMkUo(>#$8Lkyde&e z3FH&SJ~oBChUJxXCmw(N(Z~PxNd_kPGb2*+`k(`c8N$7I@sffWw}ks2wIXdyx5Lh5 z4~Ej?p4>(=y%3EA9^qF%E+vwJ> zhk^8_6kC?Ene;DXga8?hj}gomMrFjkzh33)d#=myWCtD%Bt$wN4vH#zslK2Scsqb> z%P7-IAmLF!a#xbg8J@W19}KfDlN8z}frKsr`6VeNC>Di`%($X#fHaYuAzjJNc|-G9 zfSeG=JV91xNO;uY5FC@o!{(9R$MD*A*vjmvZJh7S_#}ah>%ZLd7!v6wUBk$$3y84; zI?t9gW<37rqmMrRHQY0hTb&PZ5P0R4uO48ahuv%2S?_XzK`dGyWjyy?#Z+^Kp54B^ zlr2JQG(oOIEUz7{;q8%bB)mW$>#dReHE*r17ihFw%PZX)oWbLL^C&+}WhMh{;fP5f z9oOKo*)`R)oB||k2E5LKWD)-QqdRd2olcfHdov`c;Tt-G_4Dj8h?_c1`5+ZrrdD9B%Dh+**Dqb_5q!Aje{{YB^ zM&Rgw+qdo>o&MPme(-}YCy+cKg%4ZunC7Pi$f|JY6yziD2$T-96Udl?1;zp-Kk|2; zf32F&syXbUjsfHk_xWyO0qK_U1oChIsgj~AhmuH1Akl}bIX*=ukgjBlTNk=bWHrTL zKRp%o!?V`vFS#S)y2Y z{NX+bbEl6L(m)yy%U%?Zo|)#0gzP zM}#dNXGH%Y|3S6mmu{hrch&x*21y$EcoU1fb#h&wFKke9(({NcV%b(nTe zW`r4{CDdjCV0DqUxpZ~BP9WcG4VN|;sPJXRzEc|@QOM{ShsZE^Od!?h7`gCohC;e9 z<50#O6atdB1QMfKxzI97eA@1_G@eGSbKUHaj<6nqH)0os1 z0?V@kqzc&{j*0yfF4H8Cp^-skrI2`RTL77&ia?sj=&dMoG({f;qz{LoP+aue$>I6%7n9Q1t;1b^Z2%eS_3OdI1k z6mLYL|&!G*!HHm;~hB-`|WIv_CbJcktbqu5KFk1%1D_ zw0=`NumI9ThC*V>Lt+I=j*wKT(L!xx7O_&u1d>ojKziMuE}qScxGa&{)I%dK;mppp zcLDVtKpwrTZ43Ov#oR2Q*81jhGi%wez4n4E#qkB>_u1yX%*OG-;h2nR01+HhAq$Z1 z_A!kz5=Fsq0;%-?)%e1n>LV6&*;c4Rq|ICK-%$mEgCqCN_VDyoPvxFp+l9iRQK{S|F{##qlPk@oaxSmN4p@w$aqDoLo7o; zv)Q6D29P9$K-YQm#kqB|LIcV%zICB9AmSZ#daXWjbyuU01YcA8$DASUu;DS%;O}e8 zS$0;yCOldR?ap~F2Kg+Zj@VRro6Eg)yWOXEKK+ziVn3BoDzqWYCSq!Idz$yTa`kFR za8Dm9ZX8y*d$SWF=QojAKNiEjA>nfp(4(&WJBdQK>$$?`5gP!f-^CtuW6 z5@{ggZbK&<6}sf^3lAh}d~qfhO6yV*-T!b&8_sot+|2&HB|ux(@liYiq;GpaUe~oD z;JC~O3xtnU2P5Lq|yrU{U(Maj@)s( z=*}~pB7;Zch-$i&IO4seat|g2q;7cs5Q+Ts(~myl-eR6YBpamL^NqdP`5qxR$H@O5 zkZ}o8F%%LYb1^w@`Zj>Hv*riAS}pHF=1onw-qS;K(VNcp(Ehli%>efVBld!ckcQK`F0*2UwEO=Slsh}DVoRw2AbxP@r808bluQE%6OkqO{I_knU)MEkPfla zW2ZtEcb!0{J{5_?96dY42FQ!2$qWIc%-udwtf``w7{b9bAXS9f`!meO+@dRg9sv(O zE1z8nq&qL7l@cTSc=7V(%g~Q`g>JNwtIOwtqHB2cc4vU(H?4$^76~k?ZL>`}13BeG zEK1i~pxDtRAiaKTj?0O+MystpIPQ(dGYY)8!emciDaq69#S&eQ*DQJmm9~>sQH|kr zl;eN~fy5F>IwEi0@h#f2aNX2z-tY7EnLQ2+qqz+vG!Kyl$g&A7%`V%EprJ8MJd))R z$~*$1&F|gx$V8if+@b4^M%?M2LnNu63rDkIR5^;AE{=bx$Bx}q*)V{_TPJlz4gb=w zJbbyB){agr!S#8N1UDYr@|Z-5NduW3<0jITn#lT03}l0&fGj*#`uHP&%=2O)^0Cy& zBoaO>kQhK}1XlVOiAXc4*qDA^O>d__R#(?}%u76Kted_G#pn7N0r|&xC+<@s^1V#E zncIp`<;#k-k;nj&;8{H8vI`!{m53TVLo&UTT(gU;CU2@zI3S9F#~zilCbze9zdHii zogeczj#0>|kN1z~14xy!mB9%fDQZ);c8|ECn&1&XuD6je($+L>b}j}3OPK| z2P}!?9mPUr9;eq%odr{Znz&+xqfai9i(?OmAPk8lqTv;JEZ9Y_SjD8~1(U|KD#vZO zw23bqHXxeE^xAgWo;q|`lSfD(w#P0!W=_1QBRD3HKdPnC-yuLcR7aI5 z)HnkPkU=DaUGDtxjWv7$LkzWjTwMd*w#Op1_yQoEfg~@jXtz7xUtChFg?Ma?r|!>= zIYCl!zdwsu!lV4PfxLmmVqMyOZa`i$kCL&>SHOR@seq{$(>+c8w4J zJY!)!mlJ{{ILfGI1Ee=POC!@#ROPTU!cKQx#4*)TFF)E>1u$3;X&}>UXI|VXpGc6q zDI6XRByYH7jXY>ge%y}e6J%Tx>sGTPh@ZVV0(l@~nuP$CWvua) z9(VWl+QVVJ-{YQ$3drvnNQW#jah+QqMdd&Jv!<(gNvExd#tvJ0C?*Xg{owCv5iT8% z=V@_bCjvlf@OqArZ}YZ`(mSyQ{oS1dj5zbhC-IRi3^Z8vG&+jwmj%RiZ^JPfs%t08*!LJ+psYn{SXD z-*e6fZI(Xj011KER&+-SPJFc2tzaH9G_Nq}1SKXSky6bk-c+t97lsC6Y0YVE}2XfP}~}7htM+#DgX-eK$I1myMZ6 zsB)Rc`glM*RzT9rgGY{`?$d-j>ZHT~F)n~-do*R%c1uMK-vYv5nd~$^`_eK%cEHi* zR#RN~rkuF9-J_7?fm$kz>Cb3%`zyyqSBn-O!X2$S8@5!W8PMZEDG@fido$x2K-Tsg zY44GZq(2RlLT-7HE<7?e!!vh1da2x=50c30kzg)juhZO_q z<_bG(YBgY6QwIiRZgoRW#56MqBse-BM zN7(M9P%ob@VQ?$tG}hS$;;tQbR}Q#{#7HL)vGDW#Y2xJA07F#F3YWfGjRMkj!`Fv@3nQh!4GVscsk(NnQX z`LsZE?YxYoDsKFNIWmjjh}*|i!xr6*ND?vj5QSs)Saao2`e+^* zT_DZ|!{5tW^IrERjnp;aO?<*nKx&dpS9s#U4P?_mLZm8)8%jnJU<=6KeRAhRSYBdA zr`_M%!vT!8sA&I`xWqt)M4HFkXol&g4~N+R>G1?hBK( z+6s_S%dT9uEfbfY17UYnIHD=~m?%E1kdCsQ0ZJg%3Q_e$`ufA=*5%8@CfpSQkqM-0 zHQJRjYaKn9E?YrQ07=lo&!#{+6<&>SYZiA{lj2V-M3%)V7P7s4Oy30&a zqjo`Zdem;d^ArWAz0aATx=!%y$r)6T5T>@*ZT?>Ap6=c}K=zy%2h3rs?dnQbVNAbO z?+Rpq?DfD#edR->lGz$;vB%~LN-$(^pw!!?B%n9EYHFm~k3>_$Uwwd-@x`0FvJX=t z*+=;v|0IZ_YMfYx(;K^2m9e48TSEw#;u?U&ATgGh`j%^m^uP?s9~6=*4dt1qe*usv zq`dx5uSp^aue~khs1{KuDSmq{Hpsc-L>j5gqfg(r)v)U$WL_rs#giv`|9Y6^Oy7j*kwvDq6@Zw{41sB!IHEUj5n@mVq0}YXp94-yLfbGjrUQ>AqR~- z!D&0Nxnd##k_FN?iEH@JkwmU`v}%QJF*p;Fn2<~;eVT+vfE16u503Bj_{{g-dY(Ku zM@YvqinY;7PtLpg{L7i{ooAgz!9X&m*Mtq^*7 zkV(Io(*Uvr+3@((pFhQ2TmfWp*+kiuMDk8yxqyW(~|XAa~Gv`i&0+p{}@5Rnc2{?bxGp;<#$f z$5o3_9OLw^-s#fAZA#R*>j5B+NPBaN#348Pbb9GpgeGBh4G4R*KRD&hb94_Lp_T}H zicGk}>K;F%qK$!tXMx4X-TG+hh8i-wJ)GVQ@DqH#EiqO_noahXN;h>b4UgZ2;P>Kg z9KvY79zAdP1r*Y|oI@c0 zD?sw{l#oo9P0KhwJM@v4Sdg!nW?#lM4}0tcl2<9@ku1=Fq`?G3caMw9=&x8%hlOe= zO8eBFF_77y8&ii7jU$khrse7dWE8C3SOJ7>uZWg;W01oi3=-i{LP_kSFFADtp7PH_ zGC^gN#pyPOO0Vge8=;Fm^*d@#yTfxFt_HUN62^od>c}e})Zsk!amt;KbV^7dT|{hf zWE>)pAAlz&fh4d2b~cx85CWOF$@~>%9)t_mqp_uZ>fY%*G#G; zpQ1?uAo0I$&Q+NP8q-ANBLJyHBns(6WZK_^raGqie8x2J_^?2xQ97hHod!(-B4qNw z3!KINJQ~YmHW46It9b{%=0n+D4?TfMMDYyp6TlncYajCj#2NRI4Zmp%I$4(p_&IFF>uhY_Hn@1Z@ z3YP`QjA;N8fh;B?aDbNL)>BxC8jnf$TiO8Mtc{lMJ`@j7Z+n5@`|OA zLrgulbL&^m-CSQ%&3a@Wn_dd=encC6&%bmVzf~osPou;AnKAJW_Cb5T-QFY4pC<C1Hv+r9&>nmp3Kj5R03G2gjh6OdmiI8N{wp-ZBd_MlQm0>`_Y zeS}n%#z6k(1X4cRbB7wt{sQPGka;a4KT(40;;<7(NGu9@Bs}(Gytqb_$4D#}M+(WH zO`m}{14$+_Br+zrgU19?u;H$Sn`_w%UUC+}iPk8z3CH7Jk;h~JIqPT}jjV&Ma8#d} z{I)G`E|zI^6ypd0IgLQtkE)~R140#$!jXzcg5SP}wcLHH=VOd+Z=L%PPcr0;F0_fg zn{w7n!V+$yj2M3!F4@b^+#tzaN&v~$eQk+mi9VR&wspS<@sEIP_PZQc>--o}JY3w^ z^-WDs`QeqVp@5v4X|y^^G|?iFFKO{|j1QK8+orAK-{cF}kDtCrZU=tj{CH0{jsT^* zDL736q=yP`^XQc0rIkyY?xqhOb$AqzLXj*wc1>5(IOFqImPgZQ9LedGS*8{P^xUeVbw!VcS05b;dl9 zjGH;J;r0-NN~&VIS&1&(IZd#%A&Pnn5weH0vZuSNH_f`Lk78WIp@S};(`eVY+ZsB! z`7J=UKj;a^IieQ5N^%`V(;<1oEAwvxr1n4V;)r8O)rKY{nk@l29?!Ojg>=b$Z;4(r z3?T2ETj~UmH7?V+{W@fvz5bGtjOH#iGR!UH2_)RI%;thQSNBt=CU#z!~2}t26A`6enVNpWUr`O67NQKy1o$FSg zN6cdyU_Pa&#z3aa21yJc|IF=b5oF6_Cy*(TsgT7K)L;!`5?!nMVgN2muh}#eygInLc9$2P$M7`{TUBcWQlo~*B@qokVt8#5 zkGN^?xENs;+P;BQh`q6)pyrIPhd-mpX8oqcd27%kUaHUEAI~;%{taUI*1(~*f!tm1 zv<2jm8i}6^NaQIRXaywLxz8+t)T4nUs)0w{;&6>^%!*<#bWsaAva9EuK6Eg{xE449 zq<&$lX@v)&?F1m<(fXJJvi!BaZSKV{{?%9h2lbhd$Rdz|VKHb7D>?~|zQ4=vmlTeG zgvVk!MDB}rA1fp;Hh_#NZh-s@mz_A4pvDSmAb;prd+jV9>daVmiKBX%tRyqeigCB| zz$hzMY6232Nx==-Lfh?SLXCWn$Ng6`rty-gS&)o~Cigvivx1QI*QJ@{tbLMHzzxai z!XuF6LIz)V*sGnF!c|6! z)Ki}qjC+1#j^BwIQI-@~Go)@H#p48!R171a$r?>{K*W+pUMkC{=26Z!LmE6b5%wgI zs@6cH6Ol-yf%HQFIhhwvi7Xk&Ng&0LEwF?|yIdZGn|Z8&Jd6=$KlaMso&d-bwDagY zv}MIa&gjpgvRI9A(Jl^X9`h4dQa{Rs%11(+n6!bU!*nl?HjG-556RuUY{8=op`VH- zb1%MnES&afwfjx=>nOMpiJth6_x(Shc70RIiO>#v&*Ap_j+GU!Q@-BHKA)caK0*nm zIflqr$@0+rv&DwojloE}FvvIQZe*2;2Bg2|XJ#6`VSRSSVG|C2Nj>5Kxv{x&93X3r z8fmj_8oE&{b~}4Vl!+9HvBeaL3?S8qONCIW9YKgd8c5-_MpZ^j_AcC>V>$tk!}Pk7 zVg}M@N-xn|Qum`F=9J)p?dJl>XJ7osFaEW!&@_+_%46Zr-uhvKEta0aR^_q7VSk=C z9zr4AqU(ixgf+x9{DfW#kdCq+mPqqhfGjN)!DX=|5ZEk=eDS~$^9hho7)S(C12x9c zJX#;8RHhM;DUjieTZTy!2+Hpq_sRj51<5GlWZO7ZM8O?P$)k1Gg>LoW@@F_wSN_N2 z+UshQWTucaqOWDb3NSc^Lm^+ zwt8tLR+;(tu^d3sf*aRSz+(dGc;;Qfm_TxhWW8B>Z1aeTM@yiQBrrF90f z637b3qL7wI)~RqG?0<(yX(YzEGhKE8(h^yC3>*uP;Fgt|qLiHfc=V-S5=5b;3fQWu0Utf zl`+A@vt$!pHB5n&#}^iQ$KtY;_K8Z(!>7oJC_B!F2W&v6 zSE3P{dBhG?-yt5|Twx$J>K}z2uK*CSn1J*QtUG(;crmwyD|n9kvfIcWp>`e~`3z9n z(u;$ni;e&ZivX#NkeH?yI)`U8WvKmUa|8KNyy$yG+=M9^VB1Ga6ani4$2Ul%_-dm3T|8_YJaYKJfrCH!84~&KO91&a>z6H&_-d7Bj3%MBfQ&IN zUAm4Fw%_JB$kk>9El0Okr`I?s9PvoamG$bjW9y@^)ji1L7Nax05i7ux|m1~S-QAh!q68YI- z%|7oH4}-=CaB{*R1u`OeqRf60wDRkzY4<;DT&OHL?whE%bOl$-IeMhuv!4= zH9+FdGqRzQm>xl%AEv$yiu@!vM#3DcYKrbn(HG$%B-D-E%#AOA5~~QeSzTGS2-U)=tg~Cs=IQDm^(U`*=b#XB=@L`+zXF? zEyHKWdS>xhBvKp(mk(P4`3++1JVF{s6jGLlNX$S&qPAgP+p2 zT<@^b<3Xz_Vfb2Qo?hQtWV0VZdGbk~XOs?uq zJFaDOSmBN^viJrmG*_;e(0`u{!u{kBMBr5 z35^i>;)~e_=}VEKj6D%zTN#r}clCrm=8JixZ3iG#$DRZdtAKpOE<1g;ag?rFRtu00 zYl_pJaN9IjNdIub5R^bl?nrzmkd9%}rO)7Nsh?%{din6wV)T9EW9g*M} zLcrv~6R$i|c88g-BPw}E*ppWv#(g+cy4|Ekp1IF6`FrE&^)xNdgJDBXl5W4~x!Rm}u8A6OwBr;L1ElI+G(;P~Mix+WIMB*al~nY?_?EXaMsBQZP! z)}0={cxjRR_wtZl4w{Gtly24+DOl5Z36N7LBmw*$k&Oa(y4IJYpIt!m8+`dE$8?Om zjz<=d&q*S2+TVR1US3j3k(H)Dc0VptGYO^kOCFR2l<83U#R&gs9 zZj%H8$P4SrhZ6t^$yX_0Lu3hPL5xf{ zlOVd@Vub{)1TuMq#spGC7KJpCSOJoD3=WZ=%ARZ*FDhws`iA{%KQ8MxMR z-E5GwiASyl0Z0*v*G42wWc+;c=#4%Zqs&%3=H&{iQftMHQv5N0ED1{Sh}!f>iqmhW%QtU8kX~aRh}FkYloubylPf z*0)$vARK8fs_lPl>cGpFesb)!+gej5ARX4AkpOw}ZOFNfV8SDX8tR2qtPSKQra=Yn zCR^U5lHWSMu#AVe)XM5XqoM3=_-ue=WWhk%-mZXr?pwSBk(?i8&P1lq&b&`r31*BU zFMgu7iW1W#kiaMljReT20MdCMOC(Mk%i@lKjH$y(jWm;K2_zeLzRIf5Cv&o^ScyWan;655e^0W5bRW9A~O0Ys1Tp(H&1*Jo3IpP(Jqz`?N5oDXX*kPFW z7DH&DDDzjeDf_s(BRyba9F^8YC^_aWFZVhWq7f_f(G?j@Aq<#VHBKbB<-oU=)Y*8R z-W@jNy|Meo?m4)0<=G!y(Wnj^DiTO68Z2}e9S%5ScGM1}v^ibo-s#tJzd2)EMs#*c zQ8pvrgxYxdR%dIm)nx`;v$p-l3@+pltKFuLzV`OLr>~y{Nc=QJ8c43LR-yZOcmzl( zBoZkgJFA+mW(g+hNU?B}ljF)V@6-{%saxkE@2SxhrpiTI``JM9Ti=05 z1abn%Y=E2ulGoy|%Tx5R5=fzCfi#V_BoZL2L!^kr^i%HW^&xVS$P~$mVJ~+3c%Ot$ zj94gOns1n+&j)(|$fykF4%`3|B*SMHckf;JG7^-o3O4c#d7RpyZ=V=F(+j~YmvHBaQb!xlMAD#RJKYxD4{O`)o|Fm*5hDe=fu)`%pL+9R&e zyF(r2Dk$zk=B^a-7joR<^ZbngK-%JdLvXY}3dO+)fm9;BLkXPGZj`vMeaW+UY*uKr zYcn5DG1Z7d@)iEed!1gtHm)&M1CZS#M0!)t9KUq;Uyr@^>bn4Wipn+!`rgb_3`--D z+%L?23ITZy14!NL(YlQG-CkSbMg?WTSGWOS``Gqn+%!01c_=6Qps*%$;;$;CF_5QT zeDUnF0QsHoJo_wlnz(P_GfOpC;ZQH-xquXp|0&Yq@F*aQrPIzs^c=H6TlS z8dDSPT5Oh-B=4z?-Wlo;IaQ;RXa*qX`R}hc>)o0A`o8qp1mOoy|K!r8yDWvervMlt z1*8sKx~AdyU4Yesls0q=Zl8IQsJrMB4336Uyj!y`ae zGc*ZgSk`Iceg*S5nHrBQWKqQlEQ{~8Kt5%G3@aM>)Klsj|58X~@`zbivqMOJK97+` z(nJQ66_B25g|X5LndT51i-kThhgbnglpQ|%gf5s1AdAKFM=IjkG#=LyBZ!|8DYD?qx%JVJHU8R~*|KRtpHBE>|2p2G;=Mnrlx?V1w!tGSn|lVm7z2#O6lEe+%>oZ`i&X4pd65Rfy}_n$oU&c%zrzI^xRuSSY6 z(mmm{xq9%VPLj?->Pj-NuV>q!i0t5tk;qGzE?qoMrsv}JX5Ih99W?SwY-sz8Ge4Xm z)qw$yJKPrnj{r#yQfbJ4Odz8>H~qD(0LjB=D5M)Jd>Ay47D(9AtBsFSAtxmAkB+`7 zIPzoRw1s36S!9y8eIx{N$eHKCe9cD!8B^H?@=)+t6!OtWzm7s0$iib`G8!T|R2s|zb zO4u=QUn5yb0m(-mWgYP0F3qj1d3b{d$>DjzZBCRo&!5|c#PdRvHe434sBJuNDkdW0 zwT;9PHH{3nT({VpnNdJ39J+NTuLp{#yrt#-{xK=n+ISYfJtoXiUaQL|_7ey`vHzKO ze*N;x7ytEVKYxAal;UhcYf9PSv|q&#$)5^H$=sSZ2XFf~fHS_pdGc~SHqD$~U1q!q z-=e-f9!Tx#*X26^0>~Yyqo9A$G#bY*PE@i3$RdzYk(n?isw*HRkkzVtyWZf@K=L9g z0n$+oK$03yiA;g?-P)RZP_?EI`7n|Ixw7CP8BT&Jkpi*ONN@}wF%=f|WdnKQ@khU2 z0r{k0#_-oR=(Iw*0oMw-fDFflo03QRBv8oYF)otra#VCCLyeGpRVg5WSlx5TMcLQ} zH+Qk46i4kLCV0dRV*qu|yYB}$aP4)zf%+Lp^5qc8=dSGHm_;Ns8ohP>2^;=H_~<6i zn?J>Zs~tZB54!4>nl9@}YqfrBS<;N~E~#X51kA?pxL2E>ZF_#UGdD!@0di_TF%4%- z0ZFc$@(qNl3h)>}K6dEfJI@@3$Z16KByo1sXukUr_htg*_uoE6wc9|h8Ay*4a%9FE z-@ZTy$E4i?hse_uu~+>2lYf~FB3Dq-XtKynJ`+GH#&+Eh9%T>fW2qGuc_b+Lf}kW| zmh;uh3a7uuaSrZPAx*3Ro3F*#aomS-?q=LB=RH?$VtwT zj2zyhaEJlqoH}qxg5xWW&5`W^$aiYbNF!Mkw~#ma#gWHx&FZE#^7WumC&;rea(YaK z%+3mL#jSWO0%;Z}^$|xcD2=6o)YWi43xZVunO1u+kUESaXkObN80m_SrqoC~&Tg_(ywsLy1cu$A0Ger6H`YTQb_+^4%N6b;F)(W-rBzK+V@YMC9o!}adKQP zmdKd?#RSqT_Pn)q)zxaRlhGxmH7_j8Nf7@E{ck-|VH9j=$pFY}BJ%9BXP;9z6GUcA zQ~Wh7${voc{bCL)v&;6?a1y$Qd32oplxJZB$UjxcFY%L+`7zCjq?s&GV*4~AtwW(* zc5Xo{Jo;kyym-#Yk+O`G&({s47MA7}AYnNjdmw5&xjomH8{>&2tS7K9{a7(t0Rc{v~U zo&z3v>5j9Fe9}AykpRh!A0#%shL+tHKtjm)!af&}fG58ZiDWCGx=hBr?oCAUJ2*8jci4D) zfQFHcR1dil*jFx`e{flQ!U0k(;-lL)rZ#jx6eUA^GMC)*0|ZDC#ByADO_l#u^Dmm8 zS=_ULL+&YSS!C%*Sw9;vu#xYIe2v)olAXPk!)OZ2X zUzpcx%Wc<)G?b>&29V|vicV`lCW_V>(CF4A0m;?D5n5y5cqV{Mmu(==@Woj~bW9UK z>QbBexaUSjRS=o<#(KhO)fiBolbn898vZi1eB?_(df2K6RG%3Fsj4o&B+sVys@oaN zK$%P&{!zJY-{J<3Ajs1JA}7i)gpeI99WV23J0(A^|Bw6XJ-@!fH(})Y8uExS7%}5c zG@_cukkU2710z$!42q{#+0LdE|Jem~6v<8Ro>e|vA_`7#C z9*3=a0F^1rleq&!BzHl}Ay+;2H8E-;6UQs&(U#p62C|kA?+3DOx;hgcSvr~nu#S~Y zV?2~Yq=BrZeN3{nRTs+@BK;i-lLg8n?q4J)0b6bWPcx8@G4YrcYUJ?@<`krj>){~r zpR47iCHccDQht7IfRsZ<8w1IRSujbK46VD7At z;jqmk`UsD8BJHzNB2h>uAcx!hkTkgrT10+NOBp~{Y$4vYf$fA#Z0!b%D z;gL5~jz!MZ^<8$kMk$cwgQAds5$zSfE~Oe*cr1~=d=n%slG#w1I$4lBqK=5coU(Sy zP8JR`>k}gjcGw0IaFa;qee`9yZ`?p;@h}$VH+%(r0TL6Bb_Ol_TGHl_xPcgb1V?WxjeClnkK}0u(Kd+n%rwH8`bctoRkMPO%XZvAM0rIi z8PEW!==hyvZ2BgtAlevsTvXEWoM#W&abX|_8D{Owus50GrwJJF!ID92D(5Y&-6PO$ z0jP1+w-u0x={O}rT>?G;kqwM6XGlvlRH^3}i}-yV1KarPum16$*u{7G!3BUkxOxw# zeK5H(&oTV*TyOF5$+34EBjQjkD`GoGhoiZf!fVf`Zru%eeGMS9)d!Dl7-i9bMo<$# z_UmIN!|MuJ{H{bUD$+HD#7ISEn4Q(^N+F5Vv&5rFTOuhSF;@8r$wFm?d3qtUAbepP~Uv3)HWt$p4#(N4#Qj=aOLDxjs7fSBPqsw7SL`kIsBuT{1 zvi7C`BslJpx>~Xeomm|-+B~cM z=}lU95z`%9;dPTwag+o|6k1~zRIXaRQO8OTMO$;%(11*3|jdbz{B*SmxxPh`TnNoQ~ z!S0ZknZaWL5-WFwB#{6~leobwKw=>2;O1BuT)Ll9V~Ul5)c z#zUmW9n^#}mX#x3)Q^374HQO)44>whG9416uh0tRI48FbR=HGMW7Qf~26N zAJW4u!}hodwo zBh8bSU@N2sF)#u*4s-xU6;1ZpZE(B&`E}pbjtNPO-%OSI+LDurU}&%HRJjT=JSQSY zpU7VeL(MyAJ!HoVA_8JmV$w*y0;f%_?+QdB zk=pz7)dd4Nu?JNLYm<*|h{!q7Eq%=9(s0|c5{b-#vt{0=i>+Y?29i<@CL*1ItSo>m zlU+Z{_|y)N;8YYckB|mZF#5qSGWl#=HpT3$)C7`MGBQO{L?)7{lht`LpcIhfZgGT2 zOXLrF^8+M?h1-TiOCRq6GBe{gLs>rbs%M`h<+QyKjmJjRvO6|-)HH|#8d(oYy^xf_ z;uYl4S6X~#AgzzAv-{oMrP1|O^-nvMmP$&K zwFqF9ja0D1D?|Vgu?0Y`F6xhi2I3k|aE3wsc-k2v6i)XjE73wsqFJFPvWaT4(0{Wt zJ>$NLHgjO;sbn9YEg*e5odp?)j-fXs5(ITr5WcMz5{VF_v69GW?Y{VrTv7a+PayK% z)*kn^;<)!jBnuJekVyCU_#uPqXf<8X`a%ji0ptNda>1s3_W1;o9HfBso+*G#mz_NF z=CQ)!vWwG(s1(TmXduBTJT^eqErI-dogq^qjbtUUzYZj`XakcZB{5%3m##agJfc)q z0kYVA1DS1T)j4ty!)1hL*ZY$fulzl$^#Q0Mra~ z5oTXL+~+=KD!Q!Nm+M;;kK|`Sa9ooKtpIX>1E8?v{qS*=Ze(P9h+Ghak?UDy47WuA zQQxuCQmBn1*6S|i$xTTbczd;U;e>(R^p@@1IaRxHPQbQq&zR-C>JYGFOBKIKD5_z6W7sO-*q%ULV zv5IO0W8K1Er#YOlg}}M>ERT>@#xQ@J3RxP^{+o&PxA1oX$;xe8Cb0;)W7Q;PDh(vv zKIyV^=@dK~NW&OC;{p;J5|?t>*<69aqgX7Kxu9yVbKIz{&Soj3Y2;ueAX~~+$ky@J zl0=f;>U`kYI6?Xh32%I6NzG?;R_K>TGE7x%gwV+!=Y6h8SED9vZ26S#?xgg>7yJ5Q z;8ZVJ++M@bcc+J=CS@;uYocemAff?~sQH4H_3MWDv142VMg2fPB6@=WIXuwdUzE0J z(4f}Z(MllaA~`=|?M+2))O1eh@<$~jiPY6+uI2j+9q?^&XjnkDXRfpA%w-jYHERAL zNq+twKysHbB02i>md=r}$gn-jn@uN+SU`gs_wp*|uVrfjGM%<^J(RNX*}qI8G0(s{ zsOcvX91D}cB%BPBfjpAUxmDq>Fj*9msD{)yM5aa>NPiDwolJtHBOH({7dmKz)e()o zcmt{ZG4JmW-?F>Tf6koG{j8;*`lk9+T2`Q5y+4?s5VvYMvb(nm3FA(0C~(AoH2QE(quGEpp4z= z?z9SrzJNrLwbw(VlV`PNqfO*tm(6e2wPua8$~!f+O!}Nx8gL^?0tu0BwIHs!ND=Y! z+60#gkM6B~y*9DEfjW|cXsIheaB^@&g+~HM91j7PvycFZm$yP%A|cY*9yeBqNQ)yE zV2966Apcy}2O9NS1=((COdu1_jbDU0R4VrPTssz{^X3^fGJ5J>7b@jTKQZ#3ch(5VS8uD90qo^!s|knVEb z@3qWa1n0AP-wrXLog17?ykmMZ3NPAQM5O)K38b%ndZ|l#UXE!Jh$ae+G3-lo1ti7o z$cZmN5ZNUq!&P@U?(Yib`1D;}ct>z9WtA@wkRG8{3ptzdFJ6#D`gUt&a@HBbwvcQ3 zb(sQeTDvl61xORAB-t9ag+f9kxgKT34P+4M%Uu&l6WOnj6_Ul>MuSAI2q=ZG&w-pA^}9i{FlzqW^lRsz%L4A@>rd#{$D__)t?(V{fw^O#q$YN_q=q0B{ja>weqze$p zcK~vjWDh_N480U#F9%}shtjx!TqSY}AQdu^_HGfmkMJE7X2;KgvZ9v%Fc!ui;oOe$ zMEgFR03_!<`Rw0dq<$=sPetSex$d5vHp5-CI}r_TV)ET-vj9mk$A`$#wKzm#2_*J5 zmO#p7n@0l~MAj|cbuuZMY*~)ZZt)DV3y$HmQz7FJX(9zAW|8F~MAA?Okg1cI3i63k zK#E7Nm{K}2cuXQs6dnQ6Mp@@|jD046JktlHK3REn--oD0emSy(I0JOfN4q&8+NZF$YVHMQU+RObj&ebv`7eC*Attu4S}FWvpXsn ziZT}MtHEuW{t72C0P-CXIpAWYu4-b_?jO!|cKJg@yO@E5NRP(SYC%!^03eOzC>3;c zvE|8Zop(i~7bN+Xl_YYJJ|FD5oHhcvbx%N&d2~V?bE8k$E}pf+ekA*=*cgfJP{;yg z-AYuGK$=LDQA|o1dGtrT3dkzvuEjXvyAepv@!kub6>Fa&2O-jF!~_z{H31H3ipv&{ z{XojHMUC@(-qjE)sSc`nE2N2(K2EUEYkPZfL#dUtBeg>oSN`^P`jfalJNiI6{ z(Q)&-lH^EYGHFVc=yA_v47_?^!I^S+ykj6QX;(hC#j%=08Dy6;-%9~i9{MnR5F2dhWvg3lI)}PF@u`Am7YnGciu5D?#j0M zHPqQQw|rxx`*hOQ^F$rrQN8rO8t?Yr;B921>`2#oDg=19EiK`I6dNR zEu6zc{JR~J3CLp{AsYaRhI;?O!Xlgc$V5^wce^gNLm=gfMHe210aDWYa*XOXK(_Yp zEFqCQ9mh1@#DmFcyJPpFHVNF@Gm)eheU4N`VV(S}`cSAZQFoflt`tSzx@?VKiQhHj zh&ie`dR`0oaMu}So5uoVU+Smem@YdVZS?C@Y4M_v8Eo?clB(6DMB=n%&?kL_LNF{= zL=qfBeZveSMJRUJX8IcsmCOT$zV zW83DV-qZE&#vEoKbqB*-mKl}Im=Tlf-o48+zLeaX5UD!%bO?>UAJRTjP2S{|DJgoi zLES$L$!LP%+UIN|=WCe|r*5;8*3GYRNZkf!)We@+9n8)boSh{v0vqifwV*( z>`lmU={i)Cob7qqs2lC0u?bFR83rA66Qw-PB0y5$kv0m+2Ok`@LiY2RK(es;=SN6h zi$P;iNb=%EAyXT9DYK{C}+Ye-W(gJ`wSpGb91;!N2G*r2QSUj1k;Em z`_E_gTf{x%oJ3<6(qLm&H#sQ?y5nmbHBxzS^QPK+wzfV!PkNjli{JcS5_xZJ6dXAd z+D2C=SGz(nHvf109w2>p`z>r^V|nA&_EUiTI)HSPT@ZdahKEqBnFT_z>o#)F`vUyAxqk^7|#_X zO{bp-g;cvaC$Or?l1BXCzbXJ}qdt#$YSoROx`5Uf+f21Ft(u~Tpa+aViZ<$V%bgi0 z)VA+^IbWm^C+=%Qv{e8g732`Y$f+~DK=QhafbH|eO?8h=b@6x7noW1OdZ-#blsWgK zyrX#J$RQxLIne9*MWrZoO0l7jIYe?Ph%!Je7P;V&8G?mP|I=7ihXq6;kpgmfoUH>b zRnc{|B3&O5(=d}wXuS5(r%L`@{Qd8LFNu60iR9DTXXdM4AuoXRHW@YYP0lEHJ26Q} zxc!K~3PethMwJGu@#v+H%8DnDuLo+1vwq#4+b@tPq=3xcvrxzkYW!9dQZCzJO(C*o zz?iS)xgwEr+1YtKDf{pkqnCk`QtfUtN%>w zWI5wbOn}W=I+r>q7=NroCUf!LcB-r!6N!?{9@Fwp6H^CSCyzdJX>?sTBD%>}fe*4V z8k?mYaNqFBMv0RCN!o%nOah5O_Mah(LKYxJWWN=E-A^QTMDEHJC@3*4 zRxRv)Y_#`m&7X=w;<4WZ(%hw0&z2IREL+NfE^0PuE>~((IiJ=1gHxd1+Uo%`Q>&Co z%pJofH!oQ+8{E`H%T=p0IXbFSpf8F>H}%=6DdHZj6Hp%z?UL}SFlTicHJf4@TvWEE zPN+k1e6BaTzDzIzlW?UyFAZk0lweF6EsXpfj!`t=P^qJ0*x~rAAqKPEY^Gw4Mi?VD zT+o&Aln*I9F7E4m*R=q*kw~%q4$}-xI(&4w;;J`rxVZA*CO|%b$ceWo_(9~y7eD^^ z6P+SQCnsqhei%gZi@4Cf=MDfq_6j~V)CZE=AbIN%UVCp%5}CKP>j;@HTmIUuXITHd zVOqsvNs9}}JVPdsS;~&rl8J;z*J|+DeLVKT+5bFW0FbWG%bF*RLUoZ6yksI$!G^`t zJl?MXnLR(5jI2m3S)tQmXR5ixYOiVD-^ter*E7c%k8nyJ6_rTJsh@NO$#-ry8YC{I ziLJT$6CCAE&Te?{Vba?od)f=;l|i$!IJCT{lbKmQb)6IsyC&@P(ZN}oSqY}$ZK&Dm z^;)wUBcS~3hOtcn36U>f+F4^tCvfhg(&9<2v1%Xip;t<=D3{DP{X1%>0J)dc5<85* zl8D)Cv=@5-2axpm%4hSf!JFLCILAwMV|+t^ufnMuw&8iOg&^+jZ9TZ~U)ksQG1CX< z3AB~RxypStjC`rA3WTvl0R~xW;gL)mza&XyBA?Tg;r6qm=l`y%8fGCo6|(Ty2V`9y zD;@#TGuctf7LY|C3z7*W3VFl|i6v>Ne`YQW_G-eI?*(Ktj0u>OE?Ztx<7EMM*j399 z=={uOn@1P4Yd+k*&wB*mG5dHSFB;g~f9~lAh;+xfOP0#V!($sYYpN+uEo=&gSOmSH zy4+Or{XuTC8=*}@Sz;VG6$-W{cGR1N$Wtxv=^jcANnqr@0aM3Nys|H5om!yVdzhGI zpxse3t}lz0Kt&U*)G{L#1^~hsa`+WQr?lRKgvhSXDb&eB6W;}NO^51 z!3<=c9mzXJW}SVKdl2~udk(~V#Oxm&1xT79Es_8km2C6apMnIz@=;jDW9$ehi_c0o zWX3e+(h6Azve5Q#n~>L=6%rizaf9PPZOeG`WtgA7>NzGzV0+6qUUcE{r zX@H`qhrh}YM+XC`@DB&AJ?3p3Hdh)mzOB2F)mPb85r;y|uF{dMh4C@^xL0*>ScXW3 z$sm$%=pHmlBsi0*y6RPB#!-TJZw-mWZIh2Avia(hE0^y%^+P5HY)zzYY_~#kqoI++ z$Q$u(IA-2c%i8nj+XnI@6G>Y|09gt(02xH~j~iC+%Wzi#(i2_<$jn04tJ$fL>9YU- zXjHBzJ_xH6a=a`OhsOIT8vZPkJ2qJWNIdZ?L5X>p;7iBb0|F8!-vIHp zfovj=EvkM`SX<7BSBKEL1CSX0SgPDwW;MlPXJ3VsMe5E9$TffnvH+>264>n(Pu|Z84{@L7LbSf&4}i&C;#2VTOWP2 z^*5(}sdmU5I)upZ+W)2OJgb*z;<0vye6w(v{o-Yy2CE?nk3K_sCm;5231Yv|jdmmw z85T(KC@QU1>9GrrVF6?YFcpslOZdVk7eo1cg@_=CKqq)r+--S0P8_4}s{g1oS@AUM zBxy)MOf+T3`7thIdF)lc`0EY47So~1*1vzEJ%6(C-jFBp-=&4Sr8ZX1jNWLjharPB zMnxL50CIfzxT4(w$k`kllwLs)XF62N*J>X^~<#uZP$(qe+N^jq&AbO9M!yzIA{kX+r{>y}ayJ zV^2Q!Ev#|{CkSi5co2ywE@~K%+Oy^v48a1VE>Wbnle1q6JJCXAd-$DBz5bfy|>;1M*+zM&8ZL6TLG6f zAp4skp|BRxVD%#;%{ZACuUvLrB1=%y2c&51H-3-Cz2fz?9nr=auWK&(7;9T*A=CIU zxglSU%TAA7k7IlsBz=hud7&6Aeiy!VZpr29PAp)oiO6W(-9lqT&eXo5yJOZqW2U zq~zkShMMr`DzsW=kw{tI+6k6^2aq~Ss^?MP$3Uto2vE~I+JMiEvP(($pR$i+lUP$Tn3SGbCRv_2$0b+-VY=& znn&R{;BOdz}IhqQ5x*oH=l@!2-vwt)22 z5Wa4~cfVtLn9-;L&;rkcza6p-sCoO4X&e8}aUOInAz@)9ytHDQ zSc8B}YRa*r--Gern--4(5{wL9`0TeYKiH%94kDvP!b|no&37Oq_o!+Ux`^*IU6OA#Nf;sBejd3x{+9r9xJgK%Q1sk&$}7EDYggK8kNCI(;Lj z#}M-#MZg$@JMp+dV*p{wjmMAYG!#GL;t>6&ZcU{)s5%7idvo)%H`LHN*;Rnk%vE3t z#|XZogS)9@V+>_*4)I=Z{$7Jxsi&k56q1G_x*6eEU_Y;YD)O-=(l;3E)-P;V8i{dn zB0JCqh(-XiMffA2e1d%P(;co$)KaT!OLtb)cH5S=dg%r5VauE7`@VqWO_%3r7+fQ> z`j~A4;#Y!k<*Y&g4sK)RJIubt(_Sb)?Wi7$A4!6Qm3#nauLXP*&51LP+0xVNTY zS~|c=eQyK2``OCOz6QpEM+A_uYj4NUc7pYN4+QbfWkt0C@oVLG0CLMfGOmi-7LWwm z_-qpiu(<7|Yp#w-C0-bC(kz=e1u=)yd%WZC;1jid2kJQ9B(R6vOuIs7`j_hd)wVQTGAnhz zhew%0C2ykd?E@fnr5HfRU28A{9Pz@2NTxMB+($^chH9a!F_Y_|lFmR%BoCZ!gu<(- zkHT~fBHg-XAV2l`6jG0GpQojQScZovV<(Nq@y$GB(a0K%jN*4UorcbwZo-k6txkZymffv_l0J z$KKaFJ8wO&HjXR-&7q2qo_f|(gA4?i-3@h-_ndiSc7~rmK_yh`^Xs%*sr#=bn^PTT zj+8h+@}IzOqxBxhAHu*C`p`|C65)==Hie!B+-g5_XSoTGK1DujOV)nG4CHsZE1Rp6 z01_glnJ*wx?tAlWODqlvFUvHG7k>#{=W|tb-$|O8adn3?k#B+d-)f9#bOuKH7K| zcVpW?GBV<6L1d|A_j~MuqbFcvRcThT3y@aG64odW>29A;NGJ>|Zn|cG2#EsnXU6Cf zW`}KHFiTnRn6Zte(VtS3UHR-Pzz!g@p9ewoognC6!_^&S6ETQ{RQk`wj+Svatb1#o3KDrO9QN_3C|fuJQZZ;O!Oaii@rRI14L96R zAWNC13bUz48%Q^Y6Ld6bAR@BySu#w+u-+BTn!N!?wa#JQZxSP{_-F8&_1K`UzKo7=rEFBYW@lLlB))veK#Ip_ z0upYosdUPm!qR> zknT=s=*&R%4;dqrsvOzM4ynQ)u!xo&FfHaHd zF@e+$zTdipokV7&9YCf=_7ho4`}8TKfh>hXTb?1)1Y`+n%wqwv_-PRdh6P0M%@4fE z^oZM^k+d9hEeio6|KlDDvxvQGfpn=R>M~`qkAPHv8970;mUzY4MJJ3Tlqlr5dDH-` zfb{MP#*);&mn~G*LHlO$c-#A>cv7!Qame54e=Z&`miOuAFD(peYqJRAHyrInF9*lm z%|L9Ux-n|_>=1!8wPT>Upu9DUL;WxD6?y6^`S|_xu7HF`fRsd9G69lX-KVwQ?40Hk z2(rCO&v(;Iug@%f`A621-_{u99q$Vgk8H4Ho{S7+R}S0li~J?+a1Yk5@5NxC^zqZ2 z?t1%zf&4p)g?o4jFVO4?$n@HGzvXU*hf+mLq!#RA4+@a*Xdvyg^RgtD45g6$BQ;56 zEv%_0#tV-zU{D9LL^U?ySb+50p+joF^hebFx@a7E;4K{27%nw|Odj=UAj^Wj97og{ zQl_3UK9*eO@)U^F?+4)oGWx@#7hT0k1F6||KFQ4CqwQ@CZi1m$jCI5_>Pf|6U(=1K zC8E?vEEQe%X$)_O=`M!`4HP4~Bz@DNwi=AcWvc;P8zT_N4x-keeNh_8VUu_8xZ9Lh zh(g}k0;DAI#Ww)?2m9=>7d(R-=So_S{7w*{_EuPB)!t#}Zc?$9@vUBCn~C zUdR4A!xIi$jyrue81kY=B_S&yq0!gYFAo$3XnCQ z=|Wa0dG=e&r7N146#2YNf|RgPL; zv89fko{paY$xR=T{oyNh#n%Oh6w(J*zjibu9*aUIke0|GGJq@xNr&1+A^W|y{dS49 zOS3p!)v`V|)5vR|LIR|NYOFu5HjYW4-`W1sZ-UwPoG6oARc6d%Zq0QX`#wC%EReyV z)KTrU{K|ORh->t;YmPaK6OlC889vN|(`PQD@E&rAJRd;HIETu%gyfzg_5ku| z0I4KWMI=`D+4ba49m$^+v{NF>{R^c#w|MNDLgtiLp)rxPI@XmDCJkd69~ek4)pR&* z%h?5I!DF{d?6F870Wdqf2Wg{-m^)1k;07|50+~s8q%epi(va?OXDrooYNNYO`jM`C zFRl0!b()PuPE307=qD~Z9G!V&DgAn}o<{JQj@AFSxc3H_vI2c*55B;dz_V9pcYmB- zP*Ga(Hti1($gbsR71OhtL=c9gA_3B&4JmJ(A-|da9!t$U_Y>D;|KanM+)bgi%>b!# zAV6Nb3w#jBjzAGPNk!0i1ZRN-0~VVKFF~YOOgkzb*}{`ux|g-}Y};YB#ufYn@$nO% z{S`zekS-YNTVe&s2LWUdX{Vh)7MIN~z8a8NKaoKrZ+`|zU@TTw$T&ns*F;9v5ziDJ zi!}BF36FHeXaFkh$g9&!rI zM;gh`ASCjFhy-U7nIIM-*AmF{8l=%Fk{8UKkcCHE0GUMAhim#Z(ybMJK-Q70ogrCW z;k-}Xps_BG31mT1j|rqoZQkqU#G_{e1r!M7{f4<$MYI}7hcnsMlR)yMjDn3_cCM&0 zk(qV$M2>gHYoxF_KjqCd@HjQ^=`ysGC!kU8*c}xZS-7Q0bePXo^C%$k+PdDzw|y+{ zE)!@tB8DRIIE@iAQ-&rxbM{bO5_H)J$iw#8-Lq(80;$#;LAPs^4+SL2$M3RGqo)Ax z1^LD&cRpm>z)Y7YdX>p*Zcy-20D8!-dh4_g77u;Q@M-ZOb6JrmwB3^(B#>92s(j~SIG3)^|)GZg~mFLR!6_^%C#WQ`-r_XhzcOxsS^|0JUG%e zkkMzxGuSXAHX7BcGC@p3;j+t(vKekCkkvJ@MB8keQdb3iKH`x1n&y z(;h1A84-{^jafWb0n@{GxfrcOEu@NveO;#Z%@b@G$>}5w9>=2fmVQM%d8LpDqP-CkzBZ8Ai-SU5c&HtuAPI+x zrfs~ZM2PVzxG|BJsXEIXjgZr3`tV?s)HsH}R?;3`as`6)mqk0sJBZaW8Tus$Ml5 zc&ze}zA7Miv_fJA2m{6%kiUw~aQ#NY8i2HAI+EuV)ELMr6^>Oiivubgp1_nJ*RFA2 zH7jhVXuREis!af$TPnqL*Qsh1NB7)3l~t zPk!+|JQ^%SGIUa*^eZfQL=nG-VUdLz4$|zj?-95w4QU`f)&+`nAYDGRl~CK3WyJn_IBOEw2V~Z0Y6=-0 z<4C0AY$GWYrH_Tif@6~C*J1(^Q+F877QUS40TJgT!|by0*)<@EvWM>vmoU4kAo5*8 z9YIh~>Vs%HckrHgrf^yukz?tjLT&2VEUM`&-rC@o&QPk^hyOp@-CI@BBetGt5dc9i zgRV?k5pqyri7VF$gW>RdQM7~3nMcEj%Z5jgmH$pRE^#F8d9m}|_tD&gp_)AE;ZQ*S z2$1Iha_M)v2BN3sYbiT#J?UKrWmv0a$iIhfW9Xl16N50Jm|H|0;|5#n7X&SdD)4S0gJDv0o zvO3KMS8Woyogz_*yTG7Qx*-+PX~1+l5{RxCLIn^Z6)I3jgn)G5hqpO163@G1;H?AKL4_pZjy(`f!B!RMn|-jz!fZea-#6&(~MK)6N=+6p$ve=d#-p z-S8MBN5*V=J{z#;h6K32Lgt~(WwT4Ae6~4sQKl!4{&I$=G%>o!X9H41x=XPhlJ#*3 zk*~I#PiaWc9CB2wyie{cHjd#@SkoSqL#RzmIz+0)&e_?LcHcT5;J#V8ATNDQF!Bj| z5Q$abgXx^FQzm|zfjx38x=nj=3_!T{V-Lx~+qdTdQAR{Fe;Wtxz*`_H_%?6=Dj<2! zr%ECrqG^5U8OTQSfs_=Ku!-%eF2bk(0YDwE-^6O z-s*6~62ka~j#_L2E?tgrt<>yw6FI@80Rghib2QF|F9zNdj2t9;Eort!9k!tlY=@@;? zV>D8aoFR3HOqaNFi`6C83=AWYErw}8GNir2YJ||eK0!`q!Bm|_M@N8^_wJIM;+JVb zl8}_O(ZSP0bV&7v7)DxHXdr#y64IQe+eeDp4%EaV#!OA0v^HWpUabKHsYWnE3Z=XAr46sx}nNC((?U)F%UO{dw6uLqmdazBdJ z)AaoiOyR&Q#Y2AQBY-4rT^{=FZgLCu&_Imv`i*168!$*=@3pk!$i2cTmskrXXC?J` zwT54{Q@z^e4J1qZA zFxdlAVNFhvtzkUdoP*;?sU~su2#!IrcY+)>?T0Ld43IJ-l`e~A4ZdO`(m+CF>ezPJ zZDB>Vpw&Od^ic8$i8aY3+q{YVxHhTK(F@eLY?r$=jjdg#7^@-G7O4($0&fPDzr9HM zTw=-MrIUws&m6MI^-4Q&+;#N=*D7qk%w;s%=M0df2p4hK%1K)B6iSzO7I*N-Q|O~C zh`j`l-{1ZUYBj=OZ2etlPxW5#Q?~`AS}3MUoF}>QSoeDukaHqZOPK)@^t$ED29j}q z&XL$LS^VhpD5Nqn7+CVG^V+CmfV>2e~Z$CD(wfdSs#6)th$3NrV`KsRzI{Ju|yv=XQO7x zt+p39U$W#z6>ez6xQBC$`@QIFI7_Duhzz(|;qVoC?^_JK(DO~)93BaX$?ZTN(phb{ zJgq#@ZHR&Bu!>w9w51^P7=xbTLC$z;-LoheNY5RU-8k1 zghXGa?z1Dtcb*uOwd#XZB$Lz+X38!>B$=+{V#DL{kL0%bLqZafOyim`)?t88J*-6{ z+Zi$vX|Ih%BBPN#B5eY)zZES&{wG~hGdkmC3z7y>x42jJFig5Yn9sgC-c2Dbke*f5 zOibnt17w2iT{27L$MM-B(k@p-V&>737a&8Vr(9_?L;k!CwbJA3YG(z35qA z-#m$-{|#XpRN#}dBj4$!Q02NjdNP`7fJ|bXw;^(H^2GbJP-vU^6c;PH(@Y!d#{}eG zzEdNP_0b1KESG6wCXyF1NPNEWh;bbu&*ka2D5_ZtU>dF#k@DNAWuuL0gA9=p$-Tq> z7l21T`NwN*m59`%mrXSygJcCZjmQRMbK6ZKn?knsv(Pwth76E8CiV`G4y}7U-i1h( z-kV3SlOX4VMkXo|IyN&HAR#iDab9DVNE^*(pVp<@8JiK49^=~PF;~5IDo7bmF}+JG zO#Ks9P*eLV-D%_6OmR&~NqZ}gdGY8TtoPr4fA0Ld^4X{(9YN|veE zl{?+JuwWqJ%VUJnL489uZ@Cd%Zy}7hYJhwxKt>zo!v!lqVxBr20(l-FF`}9&IqjDY z3CMQ%^Gk*`K%tPkWbtHojj$oTALwf0^LX(9t;)5pX!v3r~$jbmHK z(||OO0TMUefE0oi)NtsO)YSq2y}?`jYabe&g>)Q4m?9nnIR{7vyA_bvkGgZ5j-ax0 zLa}nenTF?^)j907_8O0d$Bxb(+@`~p62N0>dHRr*Ps-poaqd_(sl%|6m?56P%Qhfc#28qRs;H6dEa+^hG7pR>;rDfP+S0 z90GYvKz_gid*)j?H4@2q?PI7EkHJLk5T457*;+g8eV1(1U?38s70}w~eJmxR;yms7npe!VZRIWTpiby0<3!NY6H|W~l>q#U)LZpCfHX6s2K>BkO zNV{v{*eZwKb88;;)J>2OnK(N@^3riRKo*W#fNPu;HEZ7}^a)66gwF8NgEtF*UA9oiNiiW_`0Tn z?<odBb~56WUftIxCX@36TI9|80F!%F?T(!lQr$$r8O< zaq80{Ryp!)8pyJr6I|B@FGUxZwIWuCWlZ3S0ZZ~!VQ7(9-dZJbHJge(2uYN{R1~>|j*c&GDO@Krq0n$jqqkwD*3607e*5z;I zzeObNXg)@MqDA~SQis|2## zc>~f*!dDZ<+^8P$_3+qPTMh(|3}f-nkw}|KcI5TU5GlQSTcmkp)@aw-+zTyX)Wmw7}%%X@VbU7LUq+e=8ohcD=Y_F9wh$kfe5aX)L|^ z-6Pv`egPCa)g}p#19eF18ufWXjhWdQDdx--02V>%zH9~vkw+pPZYS2X4E%wgT(ug* z$uSB?qey4C(UiT^0jZh~0t}FIC*1{?T3*H>y~~lfr7S?&ERi2@b0IQoC#uB6U{5Wh<>@BHJGgea&g>p&!v0{a-bw4U>H$&19f#;WkdY zT((wMq;{An+eC)P24slr8?PmZ`M8&@suoBrPfTJ=YN=~$&_x582?k6&a>#UiA|eAM zbwJ0}Ou33aW7tu-UIvhL&{X{zd8{@w55lVDPrCPAaCE;l@bTUp$!B~v?|p$<0Ip>8 zU3y_bgW9%+22PzBKjLj;n#P)%ot@Fros(CD;pM?VJPODwmtoL{NdqY&g`h$9Zer{r;6<6uoeMjb8^nz@lh!cfW$NNzeIwZ`cXYS zr6gV5xS*z(@eg&^7xj~)3*2ou3yv^o3~}4vT;X<>TQo zL?V!SdW&w3!vgYMNu;N?Y8~D?Lm>G~(lPC2>Hs&9fBc|;d>(^H%t4KP_QZo)3dLHe z5D7sQGh@{l4w3I3cVzQtT|uXy25UsxGW9wn@lKa5BBhTJ$ebe^k9*;~^pag^vfKw@wPl4237dpkD6_!=cP8(W=W|-pA zDxj|=kyvU%$FSnD5orsJ^^q)OEZ2I8NSGYW0NL&!a;T6$Ynkx~WWo43&)Olf5x4Ef7P&1<0*OLm+Vcfl z>9xvOEPkAB-81487A3uPv|(IzlUkjJVXY_zX(XDcoe_@2tcY$ zLd}oQbN^GL>hvFw(gX^3#~sTX?9-Q3keCwLv;{XJ%(loE4Dh;}oKY zzlJgO@Lo2Md#rzu#!HE&u+&?;K@dc_C!8+qxeed!2N<{|m{gO1tiMf&!TCWzvLhUS z9UlJ}BHiT(IUweOHjy<1%Hp>Lq%RJhP-h}U{$igcQb3AG1E~O;aYFGJB)?E|g)`$= zC6`JeLu8OFd5i_g=ClJOL?*Pk6Uj%K-v-E>AsIaED`a>ylL0bBI?gtd4a*-7r083d z731*e3p?6yweaB-`EdhMK3i48n#gvaczA^3060#LINh@SgFZxI5dXH2IMR~L%dIPF2D!6fm`dB-!+ilULbwUfGY|aAYTDUEKYmx zUc`uQSx%7-ty@cOxoyBBF|J*=5Ge=*Bt&|_Pnp`n)nZ}uUqdaUkfJg6MvjrqYbTZ& zGFb{46OSz)*;y~#ZZlv=WV!6;N+Cypv_OtXq|1jt{^ZyP5~HMvNDyd@wN zLn~4NKT-GpM5O)pg5SZ{i%3O5Ui!G8jQg01g!pVS0GwZKuA%(dQTClcnn?P0l=jAH zBZx8sY2;Mc?h@k|aZP|!%|vk7s^IC7Q+rnO*fJXzdD5MUQka_WXwOmLd zJuqOutt9$q$DO`J4!xjpOlpQEo;;ylJ6EPC9S&yj*W_{rgeF;R29T6w^xVOB0qK(@ zycUorNgC04$?sGz1uH5gky9k4YHujvjQ1$}gy+O~cnpxgx6d|iNTilEE3yud_S&G6 zJfy0J4=S)Bs;TQcRFo!Tl$|S{aIMuTm%Q3OL^dE@CV!1g5*8eL0vR0J_R$Do*4`$qw~DgtSkJm!)dH!#7EcwAn|V-k|B^UPPi z>K`Or&&`_Y9IrLwZ9DWZQo=wI23fl{oVk&3zKTAo6Oth(rfIg(yhcFo>&ji|4v_kG z9w3jOKS9rhmMT-#gU8A3muZWf)!hhq+{If9liz&9QzaYskl#*@hw_Ypl*b0hGGcA} z?6W5b&Cj2}B)hsE6CUleO=JnQ^VMWyipU<2K1FK4dJ9u7l1LE)qpn_uNLy-$k3u8} z0Hh2gDb~1E!>33i>8${5!f>U}=I{uPMiL$aWK&0dVEy7@31lxt-ts?UvXyS^vjt?& zWrs)O*nmu&Eh2k|$X2asD7Gh~Kw2O%9`rrEXw_(&(Lh&du(nl2L>7?nC?d6|yodwH zG!6NmWAWL6((i&F=Ie1pG4C1w>W48^CB%>|P(>vtY%9`-2Zwtuq=+bpf(s)qD$3g*_{vII-lOa;|Jl=!~@;;VGegfKD zeDpCA@B<>o_v}nFkRj3v`TN&QWOxKcNbH5!**R_?E7lH>?T!XB86b`qw6je*BHp!^k{0*5h*i{uF=3~S|Po*A~{I7 zGJQ$51DG&l)1SH1f5?DsJ+59OaP7;p>SFx?r-kUD^vD-i$K5!sg3kW+`wx-ziB+%z zk3d5c+F$>47A<4`3L0lFCt5 z90f%0^Kq7jOHE7gmja~9>T@2SaXPSo)J4EoDOwvyK8MM156UE$V`u=-Y>=Q-7leQe zqC6;M^s?6#z2*05PH91+P?0D(QeiB@is+N_;=OGFwmI1xAnq?r_t zz*P6u5N_8M?L456zLZM{=Dr01mK6csc%O5m=*&eSVxRju%%^{vf384i^R^}0$JwzW zG+9A)?f`?b=R96Rz)gNqQ0f#(51No<6CMhw=_{gb?&+9OY%{s=(m1oz(*Wt?K&H6y5#Z1s_as=a> z{_9e%%)*LDS%3r`EggT$K!RjVX|H>nbj|@IDcEW&0EXrj)jp&akB{lg7n(;Q`SN*H zFmwIza3*ZM*6f~M&*~p-@8cE*c0_8qh_^4{L0Mf3k0&u^uaGm41Wr6QHqA91yBGH$ zkO0Y07FQz~$kbtox=kboj|OtEXAd)6CjiohL`ox%tLJQ5K&tx#B*lnsx(tv%5s->p zoQf=u?QCMn-V?Qs>{zw~DD?<=?xrobZ3y|6#z>xPq5iX2Wvd@DKsF+KXGllc&0&kg-nO&e3}Vn+ z0VEQ&f$I_26RCUJ+|eyh{AmTsn1Y=a&n(v=P@UsLAT>bv*hW-MNCLIYwHXr{AiY^X zX`nUL+KUW3G}r$Px;iA=R$hfjI6i<-Qqj4wk$**P$AJyC9bH#Ljax%CbSR!bi#~!R z$;Xom#|gLnO>OGs5cEp-@&7S z1abj6tsJP9n$@@;EwXA5gUB5yWHnfjZ-hrFB<)~H>KMqn^8*K4UAgtH$g|sSHwcGE z%ypV5WQg=ZQZH;F67>y`Arc_daK=ZO{q>`k#m;XJQ{(j+dHjL0jTMp(-J#3=`Ollj zj>G<2e0I)|5UC)$fD~?7+1#whWN=&or2E5jW5+Z2Z561sgQB_?ZObk1^YQYsoa^Tr z)(((0{rVVQ)terzkmZGIw5AkOog30Y16kRn+Dh);H-PMHqmn^O>@Q`uf#qo6D2&Ni zYQf5pCEmMmjbfvKJOPMj5A%fYvtOPdS#wwdX{DUnsr|NGhX8%LvBRAbS!loD{*N%_?}Q82vh&0>=?!;-9DdS7d?p~38 zMh-Da7DU=Rhe%u3VyjUEDP+dG+u-%ey(taIwM8T@`^`usVRqxu-^)xPLa7fd^=w(o z{UDA(GQH#hQZ8FVH9a7skMJ0U#F|2uKK7>%ZJ~1|kx|JZkgIKGg$eD|7DyB_k#p`C z2FMDqC6J%PSgq0xj`V-i<%61WPlxo-29RDXURj^;$Sd^Gm&0ZjM{usIdbficR2BM` z_FvG-iVFvxMl&UvlyaC}1j|Dg&Yf`=kY}{#&YmReXqyd>C?!yO@{23hX&BcOLwRg~ z1jXF@aoa$;kc~vDXfvbnhryVWO8KQ6A~m<*3#to9taGR;q+s5J_k@p$Z_0dxT)Slg zg#k%{5&sH(4q(y%Su-#}5;TJ(j0H&JI3%*In(T-~dMiGXME+}t>=vE{$0D-RMsYc` z^45Vd61fi;8<3+4`D71BEJ*hHecW8}WPn_CHw%_Ln#TsDTxl+Z6FTM*ATdI1YJ^!X z{&57dQbEgICz|Ea^9YKJFX$d?kPMJ@wH(eG7i}K((hWt19+T5XBQ2<~y2<+J@xzNG z#V@@2v?sSYopKrg$Z@UuIpeZ6K*Hnum7k%x=X^pM$P}Y&wwPYrlL&hOJ*0JKUR7+B z1M%BROBzUs(Dtw_UXtW7oK5E&qIhP=aNhsWR;AkAZde6lZ)Sz0rk4o5qH ztnk@PqKIc_tt) z?bvbuBl{|(_Erh->2iVr(h&^CvVbzP2~jycf}_m<5^NjD?140m7)%>T%*n_O$VQ^S ztdi=`1;m8beHe{n6UYF$1BLwirjWy|Pdh<|$d^N8dF+N`Xw05*o)?=9%ihKxx1V8^ z`*BL!*~LgCSfXH|ks!O0KA(e50VyIWGooUM*lBpgY3Cg2l#ekhf4wG7**uad(o~pe z#W^pIEWYNUCHtfvc9vnlZ)k?O8Akv4FIM+2Gp0h-O&V{0Ze(JvlR z!Y7h%G*qRKJAML@NTfB-uA48hm;|}a1h(BLaoz!P;%ZC)Mk6`0mPD?tyod1z6wF5-b3TQCOgJ|p zH)97*`}b_~?>HbFwLbC%Q6fCVqdOg#JEVtuni38faVB5|sGWytvyaUKwL?iyNTz1$jf~n8OBtQZP z0=Z_`eI{N~fWZJRtrQJNB=T>yOP2vcXNRniP;>pFIvWX%oqpWhrODUCXY1Kp&{#O? zHAK32(*fx@MMW@6+C5%-FP63~sao>_dFi^n93IsQ>9N?u40j#k+&4ApY6>?N%@Wc$ zSF>=7%it&xYWI{iQI1&-yj}@SYve7RDi`qE1lTiV9jCsS`U0a)86bCNE}8*U@u+Do zB+^7)4I#Axw{kl=ClbM|o!EE({XZ#KmW<5Y+nhYHF?G9y>@yJ6Gkx@vZZ1_`*sp>kj6UpiqQI<$la#19DkFJ{=(0<`W?4a-@mz%*~^g$n_RC z?N6~N+Hl)(*DS^-w%32s+nL<)@QsbY#{bqO#M4U$I1HeV?@%lJj8(NTQpIcy6dWHr zx_{el(vrHyjdcMoXDdCf&M{7nG?8nkiWLy!pa_P3CAGw9|6h>24U`^)U6@oBldHo- zV!L56t0UyG=Z^j56Ilif-LeQD^n2@uIF6MD669!**g{*GR@{k5y~bPHGKbBFfeew& zs0O;wV?|^qZeJw5x>+B@MG)!b0J7)HhCntVhcpJreiYO1(B-q4YuQQrJjDn@0cnrj z7swW7XIB7a8ncB7N7LBMSQeaN5^GU6-9E|#a!2N-$B{CaDHQYA0f`n?UR)9xg{P0DzV}}Xb?04?$xIi`kbdQ-EK=d8h_+R@S%k>L zO0g@~Q$U8u0O`%)o>s_!A=H=<@rY(AvtuBof{zBs9XlR&@2%U>uoSFq2GWlmi}i?w zNFO9W>S-jlPc|VSBalNTQ>{t;FhH8eSc9=1_jSIywfQt28HoKal(Gv*DI`nA|9kV; zQpdhRI;c^QZGRme8;*b1s4T%;p_4=NVU8%791UeVog&LVo^U(j=fHQpJC zp^7E{;?`GhPOBhInH0i~46U8wTDPt@1ge%Mjk{UL)k3*#Feh~>6yyKLo@+0M9R7*pJ8?~X!B1SklCASg=`XO7Mt}1vLDS9h9R;Eq?>&@g=|O2 z63DU;*#mM_(?_#d793;t<4q@vN?`DK|7N>aNtlm@pyn0}FvPMbpn&{*V|=!Sv)l3L zY|UwSq*_?g&F)_o1sA}QExyK(xat9H8C*9jTX z;#r!D=k~w4O~S|&?7yl$W;Qe9U+5bcx)~^K<4}ibI>?qycsBMb^V-=liCjOxU1NR)_)cvyE64J z{nGb!&iaJML?CMS5syr0BWPLks98etklDp&V^KxnxH@eWq4F)jx3vpJ1f>4c$KqA< z-SEiogz{@!>1%+(Kj$b1EXCuY3rCLZrnG(L(2;{&&c5Ma4t|9l96vO_h(hY{s4GJt za3zqO7m2LhsC!F$&Q!yx<@aizBLS1^&JZ_$mTPHrzn|QPzkQBG4!x?X&j+ zBt#;Rm-Iwm82ad^DP#vn2ikiZk)Ws>Lt;8b@)3y)k1{kio<9;P9`h9*lkyx=IBcj$ zeBDp?G#r}&q!p6N;d2d0cpL>X-4zYU!V#A|8y2hZJdK8!@fQ^-PSbHKNo&mgrHJq@gHx9{*a|_lNjPP|1^j z#vb~OFRLR3uZD9(a`O%Czz0Z5*JDojY-Q~0Yk2fri!$Ul4>75zD~peg?|*UA8eL>4 zJ2-xHk=tt)r{`}CCMi(+1Su9XQUi}#@WcBA;ka!RiGk(qo$6u($m+zcySXrSM%ZKe zwvVnA*F)G4Sq35O2sc>7GXauO85=Kc{15(%2T4p~@z#55UNt~=PQ2FpB+`b+32S6{ z^pB+O9U$$ki^vwztnk<=5?Uv#K$F5uLvn=2OnH$PzpoVXXMG?Wj}VzNq=Ib6GzPM{ zYf#h&Ob%J>LD`TLkQ~>Z*|On_~&va9AC5BQzTG91t^TOuJoCID}; zm&!9Wn*8G>_aX{L#t|=$A9;0yE_~%;Vgb1u9>=C{3CPQIl}R5Pkl^Sk?8=Cvk`M`u z`hZAIk#uX!St7MZ!wuqmNFU7zL`orpBogVvp1uH*XgWYz8A(w}88NZQr$dHc`0%F^ zVTdweO(FT@{q7be_h`T*VYNiqZ<9!Gb2A1qheummDxMDU0O={iHq>Pxn{_yLvkRHc zt{}VZhYXPKjVk2JSPC_i4IfCl2O5E~XMLSq>9`9>LJS}?kJPcti|(>OW-mR`XisWe z&QMGNsXBI@`FQmEtp##;!|`yXt}r!^Q0UY-Od)PfG%)&ry#34D9* z^o8r!b(qu!GW!HX4Exm6*ipN;rV;jg-t4w3#anyQDHl0+I?E~J14Uex$mDv~?NI%7s z%F^y5(A>x?fs{h}zpeWiARTO5Aw{BIdu#@=Q^T!ar~ffWMBQviyv}`v_5K!E{pjV zz)Q=|81ou9)P~3c@>bEwQxW-+i1hB}>A{qN#A=Z}_I7aeunS#1nVVzxbx!um?lK71kx8Ll{_{c{|6t<T0D`Un3|f6Ylm4)niXgvawA8`ZWBJTrhcDHAz%dTe$^c%Y2U%{z~EWcNd!_r z()0t4<`D|v(Z|-VgQLh_um17Pb%V_k$H}k1KDCwMSPjXJxzK#(==h79R+DMp^ejA% zvx#2)w8YnJ`k_e81ndCx1|5)txNP-Pq+mm^9VB0pL{fj$HcGx;*C$M3z*wJeh{zym zi42i|qy(f3f=^fxAHGCyg%z@ZjLSBW0ExM(7bH>E(!Fr%Hggl{{3VGVc;v@}aGbUt zlQc4rQOJ=H+v3P$>`oXPj|MVp0*J8zQdytp3do;UCEEgdSB2D#*$=>D!kMBGdrl8` z^WIG&6=g>wsqCR&^4Y)hB_Zl}6gD{~%14X8l0LuEH6UmyU-*sLRZ2D35dhFuSgU=9Q zZxD}1ST;T;f4#W4hs3xh7^q?oz;J*R3P^UTNFoc!%a#3cuw5rf{ynOCzJPqaXK9Gl zl0ENg4v^VB1_uC{al*60>{xlD;Q0a@*1kNuBOH>!{gNPFxDERdy-q4Bxr`09&f z#W{DXBunoDr2Bp7KJ)$Tn6iUv9k1=p%h|~n`3jzVmRUEmyvHoTW8K@X1mzJ14|c0} zw?tU^NA(g#9v||+1Ts6kyry_`ZWKxt-@6O#^aWhDcszam1@}JyCHJQ8{_xpnHa+uy zJeD?ZOs9+ht9_sAA3klzEOyTTV7&UoT5<24}?AjzVSO=_R`cNi@cu>$h- z>_SOzxK5GX0&#(3a#EDBL>fqw6oIri1jrDXVMDQ}L!?Er8Y5isRu>zrBa!;C5?YKY z);R81xov;(!q(4;6J2-ydZINx_Hhi40WuET0_nXK07**Hs`i5SU4D!vH zwC-{xj!QL4bE2+Vj7oxZ8| z8@2tsK&ZX{;IGInPfT@A50U4hF*)2X3l5UtJ9Z6Yd zFm=*Es?m%u%uLGkKfVY3vK!aSanl4TPc1WPAQ**=Kn6(68YvDjBW5Cfe#Cr+>_!ve zk>3pH4M?(xBPv->qmKQE#_`M@CG6IR+kmt}HXbYIQyv?ajmJhIbv^Mv2FQCVq;AW$ z$A-4X<9$!@P_8>}{0EPc%+z2yL=x9f%xkq1$)m(;mu{5FEOwnBsniHhnSl(CKJB?q z;|&z9Lu1-=#xg0zGzetzC^z4LtiNLX-!kxW_hd7fB-7oVBs(?QaC+&+=@(vLtl`ED zWrD~{qL1W$4xOV+bMT<^kJEH6N+1OmK$01UHPx*2gm4RcueXsHX6{x`Z0D>$XYc8EI)f7trepldnJ(nu>*1_kS6k} z`<}Y*IgrFaa%hpr75T|kz_g)u@!?R>NBpVrkfl-g*KmlDB`oqHks%V7I^>bexHZy+ zL?&!(o<{W1QaN$kI<0Jhz#)<0@zal&357hgz>cfsw{}$kzPwpH(!Ozx-i-t6_mlq_ zV@Ds!N#9R-lzT9be1#r*EuSJ9v<@i88LF|%o&-pOZiu`*<3ywW!Eb(~ow8 ziSg~>5t_1*4mxl`3f@}n` zfOJ3uj*>^4*yL3wl*ME}3$*H4+I(2}qm%z0Ap<0oFIo0 z&3&UL->t8B?ZzZP9(dNvpElL>zJeNnth*L6cNl$K7LO(mAlrf-FAx`WH0Wymtt8S5 z%&yZtewua*-a$~&$Jm-ITEk_VNa-VgP8m;t4ClInR{s&%T=xCO3;`dwv5{DRSvNCj zqQUxjkv)=lZIC>AW{l<>wWbYr;(670=4<5^$?$x`=2C!kgCxD-Iz46sRq;slJ%fmn zA(}=YCk>>C42_?lfimU##AA0;T+wJUdD$pxL?V)IhZK>Hyi0yAQ9$H$DI$gA+x{1r z>(d>Trf{W5nn$dd?8X)Yq%D8D0Xfltyq886kP*n;c>}A6&*8= z03+G*t^b5F@OWJtM>+9%646(0dVh+Ooom{Da)@*sPlU}EK*k($+nw+F`0366aO1$! z0&(Lqz^cs65`k;fwqJPR`ZfL%NK(Ao&U3Ba!yn)<`3XBJKb` zi1ZslGN(vkm6%z)@-Spdtc`eWk;~6GLIJb@86vTfy#PanrA|hPuC2))e+MgQgYr6NZ6A= z8c3<0U}YDNswmp(c+EkuHjdt;+I$T{uV2`Yx8*0ZQ))wPol1vAMNOG+gv;)#2OM~L z^Iac5{`t%Q@SY3(K~433&th&^94Mj=IGeb0ia0Ero~2?3bgk8$Ay z*b%8Wu{ubmuiHP9_tI2eK(^mo(g%+QGDKz-WN)r3%l3Ha^O)rnBaLSxF-`7ZNLoDC zc&$*#oFMx^;<44~lN_W2Y`7aWAUBYxWOLg^IR4g7l*T_2W-mH)mj>B+=0Q>3p z-us&l5V^Mr9+e_jd0XcLW*rZ)duq%bYE<|Dl1sf9>tc1Tf#i-EwUn{bc@ZKZRbw{W zLnOg>fcz3WIa9mJXO0_4D`YpXU@cTlModN^MWR=cB9Q^It@JTF6IDWlJ>e5S4w1;F zHk8I3W<#WbG_yGLLb4&3U;Ahj*si%nLQNuLZ6)cw&X94|JtASTdF)Dy|Nq9$_qFcx zJmVSN@@5$>gRsQf*5rkJkU;8iIFW^dye3$3q4b5RC9f2XjHIXt8%2^+LQPWF41-Nj zI)w}eFLA(KG22Rhl)Os7FXaDgpX<7>?|J<7*K&JH=N#$Sk~8+{bwBsdM?kXh-Z9NU zAqPOBke$bd$L6tL87Sn-Lec{HkUf?4JEX-Wcr`?Di>4dIvf3gAq)h zW0GPLkaPfXJjL!4&8uDVJq@nXndY&?ODC`GT{(#=et!PS53f+zM)Tl|FuP_9vCn_) zWzKIw%D(C}hnSCd`gLwuSeP77qJC z_7F%796nPXdl1nKkbGI6(a02V0P-wLz88UUL2kS5IVz_L9;#z!$7nVCoN)XyXCO)X zD8{H94fgl9wg_+by?2KP{fnM~Iset(l}nf2eOH5Ds%5_qkXop#0yl?7I6d#X z=H3;NWQ3SC^a?&L7sqHB2kpAK4IZ1BJw!4{N*D#CEkM3m(MO?UGm^Dk$^i>xO^7VS z9Nd_`*C#cewgunVIeHhniP$+S2G+juJ|A_5T>l7pbVvh?mdL_UAL*l+qy>1<&=Qn%oC}g>Dy~nWX z-7f^B18cl@0&WhREu!J*Si-2@+$>JhlSdkPbUcd4N|TcupDrGOlTQWuK&TxVYA8n` zw@E~LGLV(ao)TmrmJ{Tqw=Tis5C8QN>jM~$WfoCEj`rz-sCMDAXjkjfaMJXfu^h-N zN?FUoLLXi2`T7LN10@@|9Ilf?cuY*w-Y}0XHZBxD;bAKWZhrLVK`s)h^dvzFz((TA zX)Ek0P_Y21ziA>L3u9YXkuptFNZZkkx&4SHF9I?XhXImapCbx2eTBqhCo7&9`^ii? z){aOT$hjrLZ1b2c5^j+I$guuUwb+=b^dBVxB zC}&^MRUzQX3MoL;k06;2=f+x&Ulx!)D2ye%LDcVp2sV#74#piUDi`5oyyIatR=pH6xu7YXWJGeG9dt zbk@BN4M=F+YCw`Plt99>fV@ljM42AZqFn)cSAR7Vh>p}}1EihyjPFg9@=k8{d|n2R zn0qaE^^VE3Ip?Xpk@r)g+_3;r>fdo%y zcYggYFnZ~3fYh>bt!DYvr?x2M#|7j;bJ}n45leEi%sWcU?OxUsV_$;N^pw^7i#ltA zWEW_2cT$KnTgeYGFwIk99=}-__ggChVxPurO~G1Q?qJ1PKc?x$GXgRSNq4TZKF|HB zAp0gf0_3D{2#=4r?8owGw{0Z5v*c4tOH1zLuDd|86a^r&H8(sSikVan10+O>ki`_A z@8hPw`34|W-|H4m`KhaZV;zucxKtc39<$0S;f&49^8GFJ5vAnyLGkF+Jdri>>rt{f zBKkej;_Hkb5^d|oL|v~=vE@A`8>rtX>2nFE%}ap%QGk><{<5MNlv0Pt{}GX893c&4 zHisYZg4g~93GxcB^;DM0EHy@$#Y_XfF0|}A^_``!-M%0sRRfd+9*ac!_RR=gb@w<+ zS=Jp!1>~`ofpi;2wl>#CaO?zfknzd$qrJI(eawy7?OHi!eOx#^N+AI^CIRJ8ylyqvm^5ap+Q}k9iPi-K%iGjMY zBM~)ltN&3|YLAj z?MJpIfxOMDXBrC0TbOe5(P-G@ci&j2pJ;>dW=D6_Z2}}+lIP!{cC)&-esORA%KJK2 zvL@w9-4!b!iM#)ctRsd-@(P%8+8Ft8iZtI&Zf)}-dx@lgOeX~&_S+T9n2CfGqS3FH z^@g=F`58U3f4T0-j7SQ}0Ev4x(2~`7YHU)x<}Z0oUIVfPQCODa(&59`!yKe(99C(1 zdwhBxyLIPAAzN#OcpNHZfMf(#l|us=g?xfYz9t|okM#t?PqD_?OQ6bSrw%x$p&9fG z3Z0v*>4l_tlosz!bjFSbNq(wUf-BO1KZv$A8c0JdeRL}kzqOK`MiKK3b!Ewuhez$z z_lhf7+TFUvRQ$Z>9Je+%ytsv#@GV|8_sL40WXg-;_Rjk1huhoNXh*xopf*Lsz4afG zG8d4fDFKlrI6(5k4RVxcSatvP*WXrWE;u%q4U%ROQ)E3!|D?yKCI6CayqtAX`VyaA za+y_*j}jRq{pM$vLvN_%E3k;3x*OgzIF_ry%mi}yJb@2 z*;Sfh*wRM5SXKFj=wsE#GdZhY+h~kFVjLys9pCSQBgU6DzaEaVoYMa}92HJ4FH#6v zoZH~5<ME1ly50TCHA0-#)phM1e_w}8JhfKt{t_X0RA0)7#T71g;hz7`oiDJKe_SN-T!b%wEG|fK+IX+jj6G7X5&=`aS8w zjr)~E7CnOUSbv5A(gS2HQi(nea5RlQB)cLFpX~(sBA;02vg_ha%`fy6@@SX+jMF}k z7HWpBTPT*xmen&ZyXj*E**49x)CAWpm2CoKBy!Oqwu9`9X{TFUC%XWN@hmETBoUFch!&92%*uWGnnj9<{M*0?mM?Gz1U(`P%X8OtpUf57 z$nn=JJ1YQr<;wOd3sD9azYkG2ibhq z8FCaLwX-po8)E3AfmCTESIZg54Ai(gw-yHozzgE>e#RH9j67<|<77fxK#IrP!oGM+ zk%dl!~&8J56G&3?$!&ZDHY;tIBkkcNyw#=-e0*xlf`-QxU;>wxpQ`I zXZ!q>bs`?3n{Do`!B!cQb&w+-Nf5pB4zHvx&ugKTyK>Ev8IqSGm%Fl6a)bR6)ZIikl8Q} zq&mbINQ6*0Vm^HO$XIA5vd;B1FfLuYtz|&|{czQQ)RWz{TgP`1-}q^CQSh#5w8oJQ zk+*HlDXHV`96GL{FnY;%0P;Q3k~=#)@VK(Hw6n*em9tA{FK#o0=uK1?e~%pMA|%d| z0EtE#$ZM<-7my!&vdcIoE3WI}8j_YsXfj}Y1V~d@FlM<_1P-R6kj)_3NSjC@8AB}L zCLQJzBCALvc*O$}c^FppBs^n$5p*UjRZoryt5lHo2$ zmL`rJGE*z}*Wn5vV~S*)`(BYo%r!V&SsOJLNL9^_wz%A8gF50itv}p|cztJkePwfFae*L* z;AZ*w@>$+lWuxgucK>Ye?R~XJL(oZr83V~7lBS>li3vwl3hl5NE&M=-NL}^nIYZa9 z8Na4 z36QM`GDM2U24wc#Ck+`MTaf+0K(>jRzd2GN9Z=3@eC;-H0f~_vZy`ZaTn0$$F%ZcMh9H8WeYU|Ak{`4|Lj@|m-Y^fyc$Diu z1!R!Sg|Oi0hd>IC-D1%Ky5Pu&tnA@34QM&+;m_=_`<267fIYx5iSS@Ky!;~;b?ghI z*ZNfDuv5t9vHL!|12TE>0usQ6E*n{lJZ2iUxAe!g?BgTWknjLCNu)u5rdlhGlMaL3 zw$cX+4~j=2=H^5LX@#^tlKm+lMUyuKVqRhaQcnZ(ne?F*Q@tZ(CcHf26(FA+ z(*#IQ)U;+F`RG`Db;Hpb*-*sXex^q51zAcfKKD7bVuj>g#W4mFmtE6dxowUYdu*K_ zc@So6v_?AVWmL%_PMIWeB_I=A_kf&kK-Llr<=*uVKLq47KUu97(}}Tf*J2^c;|nY` z-KRNHJ9lZuWb;0oeCL)%v*$*eEX+8rCBe&Q&z?PXYKiq0oFd_IhphsVNTl(Sr)RxW z{8NC$7+WZP6polU1j!;aK$3&>40VlBC&yE55Z1e9<+N+)Uq2ITJn{&Uw(O&_`}e6a zYB`xUY}=-Wn@MB6V5Z~ps8JdoX*vVPrjQlWyj*F>r~a%$O@E>$8v@GwDm;y28#ru8 z*2_~GELdjh&_FuMt~Rl8#npaOK$=K!Y&=3pj*#jSPtlNXs|C`owsJP9RfkA|YXFOd zN1h5+vfXu&yYlTmDx^hH!wquS$q>yeF^bKcIB{-jZso=o*L9DGM#483G23Q59Gqv) zEzs?`;9dL2Pc5;MYWdXC20oh%`Nf^>eM=Sz|Rs1j!FLjdK?Fd=zxdHM|XMNh1fDXvVWX3aVIC0klqn1rV87c#0OBv2fva&hFJf_FNuX@9{ z3P=ndNsGsvR|mcj2|KYAstsfe9Qm+7R#*>?`VDg171+!=KV-BCc%U%?Im7>GaN9HE z(H5&L)Gs#zN`89l#tl|zoE~vY-iTlF0!#PDvnO6!W<}a@kR%7Ry3Y0$H1fQ7R7G3n z%U<99S||!i5d1&}j(o}vWIy`=LJth2y>)rt7GAi^B5{g0j`7mg_tgEGHUpV2GUi(4 z>iAG+!A*+4F1(0y9MLqMhcgR59;{9o?3ThFS#aOWiW^8PB-d`fHUv_3M89|x5*`Jl zYl4|nNMlbo{yK?d20(It1V_wIb(=?kInu*?tbPD;aQEukeEX6JTF42rYf+CegG68Edi==z*Eu6SL9-XfL z6Yj4tQo+R9x%m;lX;-~&Q=kZs7)YMo0mzM&6}&dFwQzjPNNREcpPl882M0!xC%ph7 zZIK57ju3J0f)pTs3y{iemqBKk@rvG=9~sXDq=@WRfDeFlC%LmT1_kqLNfzH3$*fT6 zwfYRMqWSTlK=au3QXP-7K~MvZj%m1nLHEEu=gQ%*P;+<$kWondwI{jyadvCQwGDtI zZ*3x%g+SyfNo*)kOk;uE4Tu>e;Nj;*=fulhSB*Qz#pyQUDmIa}!Z8*c3rO#@QWD<% zMAW@~jNICi=yGKZpVQ3 zrwXMRHg}Owk9z6U22T6Kjg1u|8>Yj!x=VK@VFhH?;{xA-i4>PjAr0gK_gvOi$Q%g^ z$qutNS7RPSWRUD}$V)6h#-x++ojiaNB5~af$J*-CE=Nk8#<#K$tJtP-h+~LsOty)` zED5N*_;cMVzCTML|0)WprdF=t{T}UPl1N=4LfLx3nItHj zSHroRgeY}$*NqxN7N$5}u1Q@Nr*4hB90(Kv60KMJ<LK1+h6}yK-z0#ifsH5OEu31l8s1!>-alh06}a^4Ixy)$1c56=ai!Y(Vx~D<1TL z>_^!>flOylB=T`<$2FJz0#?@zR=tm>rjU{>bLJ4+cgo2q){G3~&3mv&gsnj4Ghgo& z1bH~fj>8s?u0RLFK96p~tvXShzIoi#n1Tis;Som+VyNXL*XEu1nZIrAoZ;>9 zBAU9m%Nw;4dTMQ+G^l&dr}(87$ST^ubn3&+ix+91ytsaiYBs+5S8Q=+&wwUrB#}S= zIXnu!7#`b`3<`UG?KZAD;n8iXX{pa$#nQDmdw$R$mZv(wTB0&WE9o*ofmbZ zh&Q4INNa8D^l2@SL!TXq9Q0JQ{VBal_M{oI+oSSa1M=ZpHxCCxu#ZOBoiKKvEx_gv z`ykd=tWufMwU|hxwNaUIUUF{hs@JA)>5zku~`D%Ck?Sk$7!(o|)=c zfb6CVc|snCV+%(w%ngyvRr^_crV`V1dGQo#h6-sOj|LJXEs~)UAX{Hg!!a)b64SoY zY*F5_LK4&jNS`4kinVC}CZ)pwnX(}lW8RU=CP|al$uj?V2jsM^q*0%;cy+G}(7<>8 zZSlw{z^ec@vtwY}KMd}Rs0WeAqqms(|ppUCNULH)@yWY<8jhi{ z=d!WRW54oBE7S~u92RN>WOLaN35>ncVfI75d_>ZRpTcF=Wp5`SFC$z)kxsG68kIx- zUH;LnMr6t~T8#IN25D}FN6ZMCXRHDFh^L+e;E;7YO&U6gdeD`96t%d@mCS{$6|@ia z1W59uYcm`rt&p=E5Ot}|ZO)Yja%*vyH;917e9p|z%s7WhR$VP`_=54gC(OpP$0718 zJg&N6^E(3xkKcNfMn3xwC5qNZKBS6z%7_hLNFm>@w#K%HXCjaNJv;qS8w-(nNw{nW z-*}8fI<|P_>8Jk=Addw|^H@GRWy1lCgU;Mz1AUBz#vo}EkokuLKg}(y5vog7^$1!m43zmnTm}KsG33sNIf__Vp))9Kzxe)J}x`A z(gjE>q$M&g`)DGM>hS5`1JZEpVw&y_ujh_%*@yj@#z4B3ohV!M+0yC5=U{iPc}$d@ z4Y~r-7yEM;+>%alnSc$C&UD{AT|jPKI2|BGWHnY?MISFLG-o~GF%yMNB4af%)00xh zV=~KwWq@&iAC27H()TnIv7rTx|dON!S^uw>Bdp_LWzXrizd z&9p(Sc2l?xATyKg zyyU{oIo?AzZ!R2~yjVrqnLG%PMiL>zoaWA-1l(-qHIG`q%X&#K3c7ohG-oYlL58yVcEBvzg8D8nW&|;S7r)Lq!wEIdS(a`{jX_X6s4WT>|xyRxQUxs~o z0%Rmo;@CJoNAeVq0)blpQM||Ng~+$ELF)3Yj~T0%TK231nLn0FdA90jV=&+QVyN zAvj_%+2av?43MWLK#l^Wn`zT~1|P7m86EbHReGGUK)u-5lsm0m(Ql zhEVo8e%w~;FI?*Dh_u5Fkah8Yh_q7r9O{pM{@yWXASX;_DZO3@TWSXo*21B#*Jsd> zJ7|YI>L%iZ);z_`W5TJ|{xX}U8j!-Vx$N8oi$WU6XOb9?LgJ^fHhbNW93;jkKX|qzoRO(y7;`q$fcG|^@pTKdAGexx*p%B(Lh?~OhQc{7$g_#N<#|=NR^)1~4E>Xb ztmJqdA(71six2pw(CWgPe0}Kq=t88a?EN*zKgDf$R37vm3t71S^$YWe0VlhpxJZtu zdvi-!AYZ_(?%WxUkg91<=XN?(;HM3wy43_^ZuYD_lv4n?tAu(v?ePrx@zW5wv(2r? ze+-a66_0>Mc(#fCk)*mF5nTpN4mb(^>MS%3^V1R66SpX;?->^u=8j)`H z6_IwEFZ$q!;97GNCADpQrgGAs+aKwQ4Q|+MgRil6f&|IJF+hIb3JED4kQPV-IZQ*w zWv4&4wVy>A^$?C}^%*K;1M($ryC*dckQnI^Cw;K-YA};Z6f@Mt@inOlfK5o*wuW7%M}0;9<7ypM~B$SGc0hvk5fOcrRV%7 zYnWzcS{{2`&_Nu*^)ymxAXPsPkkgp5mb2gpkhSd!ja2Rjja*sZfAu$i{OFU*0GWZq z0*fOx^_?6yJXUG3cWY9zh?@Nmk%?qv!4Y#v1CBr8(THr_jYuSscBRBghbz|u zge_p2JZyQlPvmgIaJV?7S$J&z+LpaO-o;0dJpi&7WJe(zkh-6}U72JYc_i(_yRA?& z1ac%G={Oj zyjnAhTiWRdfL{V6=SPx1;_-Lb$ydL*bCq(?XjlI;!8GYJLrriOk1YeST>~jctr%yz z2c$$28gFZri-~lF`}i_MZtUC%kRoz2{R(!*5&9+?N$v+Mapw@pTLokl5L0Jymu>B! z$Yn=un`5PGn4h&mqOBImg0h9o6ap34y!aiCa1>}r_84lf-)jWMCf`09W(US$3ETD< z9(xubpG{sotIv*9$YCivhse^%W(edk?GqS#3W?tMuK%gpM=wRI#5lab74{%N!XqLn zul)c>7xC9sEp#()%m79pM-56Ig<~!h39uutVbQ%dS20~0_a(PrM<4gkylR2eJJ;`< z$MMvHI^~oMSR=ov)Q^B9TAKC5HoyU7l_cTQtQL@UxkTke^{3}(l3WDH&AVs56p)t# zWF*pF8YQexi{qpp?GF%{bENb!cP7c)_AQ2F10sh&_K%RLvnIT>wW5u9JqF0bmWGT%rrDX%=# z^NDk>9h9w#-Pgwi*@KCi3w@V8R7l<8Wg;7pN&c9}SkuSA_^``HAe#wGJ;e{l^{SL@ ze+`BD?-@xSLDKBm8~1>$UW`Jno+GqsE`w_xe)69y^Gzb0!SA4oG-Rge^plIbz7oG~EK-@CcA^IG*9*J8t5&TY}s` zibnw{g?a_2Z6do% literal 0 HcmV?d00001 diff --git a/demo/web-mobile/assets/spine/native/62/6231041a-75a5-4af2-a40d-f27e9498901a.40d17.png b/demo/web-mobile/assets/spine/native/62/6231041a-75a5-4af2-a40d-f27e9498901a.40d17.png new file mode 100644 index 0000000000000000000000000000000000000000..15e145a04f8f58642e64a1cea2db2496e15ba5ef GIT binary patch literal 187127 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�f->z$$iy2m_=cB@+bhN0akUUG64sarjx8KNPsF@bVg1oh=2ul5f}c`U>zXVCCW6BWgxKSN~xSe&yj_DIFiYek*LBob&AN zx>plXhj}bp*?tJeGH<9N)`bFPCUxspdUj?eJK5_i6=}b9Y2`3W$LCcC`7yA7PB+ZMftI_PKd%(18GVM<0BdcQ`&)B2| zadR|g)5HR149uh2KROEWQ+O53L)&oI(}x&D-Ly$*GxhajK_VUyQ6M$tFQF_)!ystH zMQ|cAt0rLi9l^p=Wn8v}(UBu0FE7G!Q4m3%LHIGbwM;bu z3r8w2+Jc7Qwu0>C{@)%xe27En2&EPbsnQMe9yYCliLP5+sjwaA$e7m?8Zh@}i}&`n z7YuaKlOMcp$A-+Vt#}E(#5X;NLnl|wp#YN}>GIeA{?}(TW|sH4=T=wyy|h=zxanER z&!qEN3)abmi$&ZNdZH^sQ@xf<)E@OA_wiXGr_%$=%L6vEuU=W~g=2AB!ftoMWVBg= zn+Q>9gIymAF1k^Z3Cl9ASd}>rw?VL6`e*KG;hug>I=@Y7%YcQ35fRdM&B9u@6MV>-(rnQ+CWj3B+X)d!! zqa#S1K{SmbJco!`7}kFP3maJZTs?xM1SO-=q){p-fnp*o{Uq zaRX{6)030-N;aLE%UH?)#Sz>Ttk<_fDV!6R^k(T86iB09w)_(`Sa|JR72t zAs!94$>0Nd&T9aKKBN&L%E~={r8y?SF1}Ajuy9-42aPv^U_%Nn%Y~{c5Teu~k092# zmD^$%C-5S#onilpJ~>uosSzu8k8r1ac$exdFQ|xn|Ni#9KRE3?N zz?5;*>B$(9rR~}I!NIuSJ?-|9tW(NRU7MXT#PMg-8@UBs1^}Hr8Xlla7x}iUUf%Md zq#kuSdo%-yOv>#``SAB8yq0R-u;_t~T*zVZr7}^f9=CJNVG#uPo!TVR^-^A8m|0GIfTAA zPn(+s6=eU@uT@wsGc3ZfNM4#kX*}pf1x8w9`{iXum|&6p2m%%uW1^T`@*xXzA1J;> z#J1u$Ia?C77$GvqsBo{`%E~EH#nsP3E;suPs&gYdYhWd}uu#I`iZP~JcQVmT$m8g)(&EEKZS;du( zMX?*Q)BMW=7@* zCm*9BX<&B@-oTQHCv)4y`9Xiu_qgBZ!-RQ$p}M|@FvYMnxKpA!UTJN+uyM@$z-xxV z{K3LZB%6sktQb9k$xdESo)zK*RQ)A^#6j~tBU^6Xa1`;iE-qk43T_jrGee1*Dy!o+$3trVVnoY34 zAe67X4}ui|3(NX2FcOw8C>;{VkW>VDhvQogW+f=9RstUUNnwP?&LkuJ%CM+j1+0i@ z1bbYB zCrfKPhH7c80AB^6Tu6r*1{aREAEnE5*}T;HnKPILEVvNbnx6B8Z^i_T`t?T1Y?vdx@a7K@x<3r3bX!q%K^WyuNUZOJnKOvC z1UhcK`zgA1KmJ%wWHkE~&VfkLU$W8^uSj({c@ByGegzgexz7{TWPIo_Cdy1Rj6UO6 z=VZuHG&%1InK07tkw*zH-X$YcWcg4Z>2I_^XX!7 zc5QuOeSK!|`g}FFgGtueZ4~rKA*^Uf$J0mKvq?jCE*R3lvA7Zt^2aSvc#Gtc=j-+B z;Zx{qyU{}z9z+tJua*phVf)yC!#oWkDT{pz7fSv1tid-n7EMfPv3fHWmw4kY-_P8xEhgCEP&Lf}(K@uZ=_cr4PJd zOde+uBrGkUB^u~y{q)lhu^J4p5HHQJsG^pF6`-Q90&8NWX*rdI1%DM1=SEl{Fva6T z=TaQXQ+)`ZqL>PbWCgIWPf?1tL<$}%EJO+ZEyaBVU}5hfvK~3}e8Ci0RALn0qFy`m ztk798pZ@=ho&QhTYqsxae!H3Jos{00PA)s0onerVZoZXMCS}x!Tnr-jc*Nte0YwN= zz6k^_Uxomq2vS?A4m2M0irP4KJ2u&pUeoU0sf0(YrWUm_H#749kZ;NhE`{1F=to}y_}f%E*F|u8p#&JLpwvBL?e{l^wqa_ z6E>7rFexN8GrOVCD%xANSDT5E;915u(R|rHKE$Y6dpC&5vi$b*)%KQWdLy~NA@6r; zEyZ#;jNGV*R28MUf;Sosd&Bx-*p?khB#fCYL`d0UU}s+A`B-sTT$7*1tV4)%!sz0* zn;mAI`8;V4ti)Ed3a84fph}AqAug2p9qOAm?|+4}2hRsMgTM+cU2R2v~THGKaTU;;0*y;onupyAQi--M)*rEE4lq}xeH zQ=#DIQm|I@y&5t4g27PeWuqDjg%Hth*U)|I3uaQN$^`4j^*3*}e9c$B_h}+rRHLqrhUGQlMSVY}R72>dnqY5TxR65;3$u1}6~22dSx& z08tyL;*anJeg?i}cmVT>rU+b%3$3`>Y!+8j=AN&x!sqvVuQUI4iExD_%%5lFy3Q%N z7J`N9EZ1RSk*)A4;G^3*aSLYz#y*Qb4Z+euh01W00d?F8En|h@Pbzp}z+hxmv_kRa zQv#Q}c)bP-P9X9s)R+)QPd^H-2eZhV*%jh*gu2h39n$9J_3tLWL)dcEG~yrsjz$+K zMuUhaqNH@*smg)LMN*B+9`~MU?~yf1hile5#n4lVd6}p z#(qqg0TaVAR?y(pFoO|+nJFb)lbBNHya%dc?t%6}4P zknk%)OPRw$*${(;cWYn30#@h@VsXfiH3mDlFrUKh*Bx5e*Z5#tL11+HfD>9_N3<{@ zr)~o)Fc!M7o1=^0M!IsqrQ5F7{sGHhn7!UF>5CXbY`+5}vyTq9pU!@GRDbsL(IfQf z*Q&W(X#LsV*Q*&{!n3(EzM%>03%rd<)S+c1g!wem33xEGyKr%XT=!Oy?`m*nqI{0sINP z32qRd?(G4V=Z9ex6EQMG~+C9tR4#+o>XC1jMBswn}N2}Ff z{_xRyHXLxx&qv#jTh)96MY;Sgo>&;3^6u#T$U5R5;~IA?imi8BC!V3O-doh$XfZgJ zJlpho@-8vV!lD;5I66J1l4$}}}72QBKE-d?2xeg1xJ zsglM;XQg=ZF^0IMw0QeAi)Fjw1N?+YgXs1jennLIud*UwAzFCM(pBzfs9ctZxj63U zq;4;dKlTR_#?%Xca%KGs0LJrDP7qkri`e%3;z z4;VZ>J4PW6kf7SXxAy{3E|ue+p_TG^J(tS`jiU=*L<{p)TS3D2zSTgTHqors(doa2 z;nky;M|q3~9Y3r~VF;biyH0j-rTDViI$Evc2B3z%?N^?#D`K9Hf6`klardb{CZWW( zF&&MjvT!dre})!pdfVirCA{@GRBe|xqhY;Pt{#X4(xv%vonlHkHG@578Vvd%aaN#3 zs)A*Qv@&Q4H;6cf{Lr6sU>%X7k7YrIn<&oRxPRk!)C@&Bm2-1F6tfs+D8xnMlj+Yh z{WzZb=#EIKG!ZP=LgY6qB9-z9XemwgKDhs5R>X2=D#cwpgoKDcv#aM2g9Skg@4>}E zByJKew$Te|Tzve84a=#nTmoI}tph3-un4~*Xo2y=2u5Crj60hyyWIJG(KrXsa#BvE zGH3O@8dw1-^+UAB9gv0(Wkrwb)!eF-*j(^V>(H*`)@OrfwHDyXW{tu1J=`+xZP!9a z6HO`fW_I??$>^!OWQWdr5aWq&j?Z$n7MgRhPO%v*ScY6!`7t@|^5Wb%L1SHXN3&3l z`4X7#z#-%f+q~%WKDE7Xg=+1h*G8)zR61=O6@ z#VLgPoXTG+`Jt;y*OXe4_$ij-e#4FHAq%l0@}NKbKVj(@cP+xR@Twfq!bxFXh3%7I ztk4Jl^dE#pu);w30#Eob&I%saLKhLc;K}R)mb)S+f>G6_Q~PJ5i%FfrABM7_02j)K|-qt zdEY#oZA%{Peu>QM%ZXrXo3sXl8DO;~Wk>SuuqzJDrV4hq-v zX-l;1@h%{FJ}tj#H?}e!Z#E{A4=8j={mwWPDivm#41uZA>4+qq3bSi$%!Ob@JEnC~ zRSubu#tp5gsotJjD7W;`)CWnmV{`b=zJ!ap19|Q~z+!+T5EQn1`!V&Z_{+b|^!1^o z1=-NBLOZ5MwHO!QPTdr`x81-uDf{X-9F^Z)V@1eNi&Kbiy~BgMmM&QS1UVljL3km} ze0h~Ec8qgY=t01U54NDF!^V#nJqS+7@RfjtBO{0rhY=CNt&=5*NS6ZNImQdY0z>-z znp*lLC>u2Ltvxz`W+B)^^6Lc5?6d0EsIxRZ3kzYFZo@iOFs5p?YG!E(-(gZ>Y30_S zsgP@hj1!^5gIp$sxHYb`radE4>v=tx@JUTi;fK_yH+yD0MU3H|cFphD-nW-FrC=($ z;4N-#B~nsBitkuHW=|Jvh+n+r_m~zbPuj}qWw~{1qqL%v%a>LArUA$e4k(;5Cu;Ln zS1h^VPog&BcRESD#bLHq#*|8jT0Zz&gSwA4fWV{t@<0FL-i-%$Z{F#9aOaKz9tWhT z$+h%jHo$cLTA@ZKu4+o5!lG!5B~}9Q!l#mE009iua`pR*H^9m@&mwAZKt(tf0ZW&4 z!NSs^f9UKMzm)C~2i(P~XFTv^*6}egjtX}-?3Mol!O~f`DNK}Du0tanj93wWA#h5W zREHP(^nkva>kJX0D);Bo%E@jp1KGfQwYJvUdy48UTnbphmGh%#YwJfx6A9yJcru_F z->|Isq`jxR6GnW4C5h7JP<8uoFITO;{Oik5s}-6^WQ+P~jXUZwO08Vem};hiyFX+{ zv$0t5G_3bbPDAF&+kPAzP2uhky$G31GgHW(#CN7wVy8p4Vt5m!l$hiz>i~2>i@)j8 zXj~pIYW7RAd-8tsYprI0gr3l^jcsREOU%EaqdDaytH>!7{y;onb(k@H_5=$cCJ76YYn|PfM_SDK?#*BG{C5b9aCD$KH72Jl^eftpNNit+L&%MD2&s(1>4z%_VC}rD zuWxQPiJ;^;JuOSdf;XI%BpXLn_Pcz8Tx}WYm1CpaGI$rSp6YgJ%0$Y<|GPwF*tG z`SA-=iYIq}bM0cN>-Lc8Cy0>cs$=<|cnHVBV8QIrg=b-7i7+0i!1xMAz6KAg%{uM{ z56+5sc2XvuX#*C7suzrKRsak8f9fLUXIQ^QK8F20=s_RiM7quDy8s5C9uO)WSg43Q zMOuSfwe7WBj!O00v^EI(f?x$2+En;|`r>PZEX~o=ooP(1$IB<}dVQBBmTUDY$}F#p zd6dppU#>r6gGGmXq5M){N3*hFpm!J$SA zBp^y=)vlC~IF|wuH`ZmXq>~Y?->EVT&fKDlL~%7F*05gnECLqFnFTD&ckQ5OsK{>D zYpeO-$cU8L$^@IMFV=F^+}^Vn>$%KkU}LF`jfe%G51WMYDIcPi$qsPSVML>GaYF8aZ>3K=F9m+#$Yus{QEr9NzbYR93loxphTU5VFBz|w^a2L&%27KX}g1`DgPP(boyBQ&lm zc=I21c=?iG5wuW%OA*Yie^%_%uxbp7Ou=BjT166EZISHyTSf~+q-mCyUU8>K!zU2R>qG4J;+Cws-(DjF=J8IvoQtoxc>>0W7YFMt5%NzXO2{YNG5j z(Ci^x6HXhF>|P$8T13keO8sgBULC_q2j&9Mvb|E$`VkE2<7s`Y09Y_-rs%nWHJja+ z&K+973WtRk`#%%lip*JLL!gDWr*b1w$gu!FlGkO6z?pGagmGTrS47XiaF+eG&n}E5^?@~ zco`AvqCpm!^h9kg9rT`L_F_SbA!?~i7mK!VHl_zG*hJKeY(|57BzGWb-#GUV$PwV; z;t+nt&}X3CWz@NXRTA=Ew6P#1BE1bY?g)U3Q)_bW`%6fyA{8VLFkCQEeT@~t z4r8UO9Ka_Qc;`7Qx#0PLXn}VjR;G|RYN@9^PP81Y;v_=Yg2u{sfCU>>-yUOJ^*cxk zCX7ug+2Upo(G6CWRrl(xd;_1icbi6x5=qpWuqtJ$kXL9VMzW6|LM7~IE4#Fr#etQd zfILUDx*jy9Ql3OAYlGfw8yed_2@WmPYNTx5p`oEq`f$;;q4Ha;(^icsiM#{~$>a0q z>N{E|)Jq2fMVdi#qGMKR51;^}&mur6d-OIV`n>%nGeir`5v@#Sui%c!rPFFP>N_aQ zp=t}s1Xw?XwU|KcH!Lr!7vZ2#Gmg|Kk- z08{X=2{f}{I;dK$v5w1DK3@Yw4dl#w$7jtE5D{#ITDe9(RD1R!hc?~(!w;dxQ7AvM zIhttHt5P0ma$~)bFnVlDsUW)Qd=T%?XCTX+gL1#*i>57>mDrFwu9GV(;c4rRRg3z) zYI$6t(e2CcKx}(Pt@9T2L$0xsYT2Mjx~8Wm<3)YiTL^pf9&D{cQ4XSVeyyWdjazC8 zc>R8}({Kl{+@V=jAk)`7hY=y_=I`sr4I>^sbU3M0q(P{NU|{GREt-g2h?WyrL7$E| z_y3}J@EiWGu$vYV+F(k!B6t2gEX2xHSa^mjAYn#IssDq#6j)&XfD1Pc9a^Ve9x0xY*o&ziA`%}M#{vPc)KuS`hHfV%Z%oS~N-jxZH|bzug~k zLKHzI@Aq4EraO104EOpB8cP|2)$XLZzu%O0+0mQe@uXda@PZy8hFjsp#s;_sjSRBO z2w)TtsdFj@7%X`7u-1gd!9mc{2W$We+{!Y_bL<>KK@W}nEax^^emv|Gq4C+y8BrKEW9XB4~kMQ2L>-ibr~(si2H$Fp?% z6|tp^coDFG6h6Cl`B%fcZ~y9&6%_nuOy{Nj{e8uhDXGWyl(Vzi;W63l!S~-%K@Ka0 z5W|$!3pEp&S{r_BhBdc@jL5g8;L4*Ve#T$Y}HKSH3l1Wr=X(rJ*O|TS+7O9A9#C~-6Us?P^ zub0EB43_ILizv%=vm#&tE#yZ4$?q8@crs8rD~z~Zg9WTGBM*bek39=eU?B^Ef(Q33 z6u;cQ;&3hxA`S}{j-c`CvXXRBoTfSp+08E~x>X=tF=2X7=|?^URVFIN9YUD$0|ZS8 zmWOY*YgM`*{4Q79eg_%31GpSqMb|s9gc@gu4?nD84j!cvG9SFh-lM%EDbz+slrMMK zes!9y?d`2YQ49lT?FJmoNFpDUCVcs`+VKIF6rF_{O=BTCX`2kV#y9+0)%bKFTlU1q zoEziTxK`e)a1PAeyD``Ei+fX%$)bC@6tNC0kK5yu^N|Ryu3Z|)hE z#6RZElm=WODV1uPdA`G70WCN04)(!%NT;$FcZn+1_%gB~pkg5HDBAMuA~oEKeudT# z0hU4`t(1R-?Pel*5T_8qBJPGn%)((2tcZ|>!y@$OxRHMXDI68bFm37M01B z7;3V|m@8we%8)ewogB*nT5s$1y&OVUjQr5{JCbQRX0X(^>#bFCEVZVT85s@c6PPm{ z83{s6E_76_NodOr9@c}SuX6SO^-Tzl#h38GO973>mJbqySPYHk2UKDZ_(Iqx>`g-% z*#7q!S^- zxZ*O|1ub32kl^GWt~W3I*A6U<74SgDZw&F%9TVM9#EXDM%uchtq4alyeMyGc<>$9> z*ZkXCb9Wy+Sk&UbN}Gh9FeG$v3|g39`S-Wm5K(x#SB17~}KO6@qwm`;~v}v(LH;ud7&swXE+SaSlgmL#U*F>eR4h>86=o?3ZZRA>w3EUyI z8|`;Uw=nn&8A9aI@yTiT7<8bV%4O_~u_b&(w@%}>WeYC(prNnlE3~29`Nd6@voh(j zD^&f<%d$w>gC3TlNw*aa#);A^vL7Tr^M0z$>98oA^ljl=R0i}qb(*#Zfz909S9j#B z(+LF@8Jg~()zLpN<)Axg%7wHg(3w~SHt%f zQtDX0`nR|ERm3bTAv!p&t=Aw36`IIwrH~!lPQ5G9QD5!RQ}Q2)QDfHF4oNR_7)|t% z9Ii2u2?J9kCC!g`OP~w zkp0q7VUIzhby=NC1MN_B71LIGWO~wK1s!Iq%Z(mxC>WaY1GCntQue`m4G!n98eMUu zdP~cBp}{_P3r7%OF_6$QSi(i~Fm!;Xpr_C~Y(h+&gv3X@q;*ATCJ~L`lBBOF=Dzyb zH4~>$cYG@XTtNwO!tAU$m=Ku2`1VcMwE$OiTZ)35IEol7JXGO1^2Lq;GJy-v zh|r|TL=a(okqy4OSil8V01F*MU(hjxQ9Ib6V&&tlkEIUvV!h~co> zjIhX&;cy zqZ>D%qi$=moA+c&#G^W$Uul5Jxe$qJAHRis4{0SI zlAA%a3j-@qK{yLR9|5e;!Xex+R)Z5L_h(14-mo`X@TK5M)?YS#6UcZ%TbbrW9{t=~ zMax1wM)^|hkm;h*J>~YhZ8)VSD!X)5uv9+rxV18Q|I7@uvfcW)ePdkajMy;vVUQ!? zC0Le~sOAD8(xH>Vvp`SMZr&+pEr9@(9O8h*4yjX;go7j@?v$7B02ZZIp>ho0x%Xg^ z+=_vUD~mIIlq<`I9Wqi{R;bLcUjsu@AXHOJmD7*Nh-N7xeADj#sqA`~{n zY#DETy5?CrpnOK8rGpE-bRZEXcH{|I1TCT{$ARgNSw!$EtaFKg2iXNHzY;-92Ns&S zW)lXY>d0V$@j&<16Gcf6gFa-wU8^BBt!^K@#g#J{dHW9P{oj&Df#H_uZ{K1wbM6eM z53vGZu)}Nug|~dlgO2~na>|&^RI7Pvi!)|$X@GrITfruJSG<$Rb~cUq?Za)1O+Q6> z82MBU%3-@05`pquqVTck)!wA((&bWk=pxb~WJ3f4_Zl1)S}(vb;aL(tqF@Az&_Se) zp&XS?ZH}A^k#hHopa07f2VlYMA4FB~tqTQ1hqG+49a#7tx$@swPYYn7h<6sHme3jA z0H1OQ{r=YK(a|buvk5OcbE8=!n_+#~oCpSS4X{>AWizRfXf}b{zOcnRns|@!7?T2M zt*SkrJ!|B1In;YWixkAzkW+?r3yPT=_spNtF2Ay0Jv@N4R;56-MBRh&)9)Iw$hv?TIvc$QG^@hl2*vuq>p_Y~EldNm@P*)H;vdT zv@kS1?Uf*;01d-hb@sRh*|D=6yFzFMC!~|;5OU^zmC4lq3&V=uqIJj&iz*5v7BL5; zGoZylE+2?gHpWZo9c{@$?I=1+9KJ|n`?#Xp8H28J3GpbxTP0vI!#yBiRS!aE8B=I7 zxT`y;!%_M?x7bT9Ee3)`h31z55-h~~@%CPluT&%6#Q_vStc?FGQ3Nd&_sS1HtfV8# z%Mh0-_pp>hY|19b!jmE5MQGpRlc47sEP@oV?F_GCZ#b#u0u=69x&c$cKiWplr$lQ)?TdBUBR@~p_2ES_J{8+zy4%_Ko3F)wG6g6 zj7^C$Qcj0*zguIjRCW|5cm%a<+_e%Imzk$eR>sHCRiI7cPBCJKsDep>--0PtG$8cI zRcM!lPy$Bbne_pc88sw)z~Hdbgh6TL{=Uf!r42Rm>cPGTy=pp@BarY%kALh$qP5`Z zPw#(7TbzS{MT~&_V}}(n5YMVCU9@lry3ZjF0(-&)A6+j37NEkLT10t;9>TeF$1J}R zhfrq{j(73WADn$qiynKEfQ6kzSB6p;CwP(}C&D50$Mf^opapG`t;2)8eC-`jAXW$# zpz`o7a%RLVZ~y*({)VkFkeoa_c()Cwg6&ioDr;4ba$o0iuTH(NYz8%aR8$&3sF}#+ zmN0lYZJETS;pEP|)oLl`b5K|~d~`V5${j!a(0VE1#(M3W)lhK6Yu6y4#fgAr4*RIJ z`(-j@CMv*!OB*-<%7S}jeyd+=aogb!R631j!@g3&I-;RZE1Gd9ZUC${To5M}Q17R? zqF%H%8RjrtgkEfHDw4}V3T*GK@ttID%BmGN{lgz}8~Vg$##EsU3rShn5st ziXYo2&~=!MpZrj$Bxi2^luLrKa7D0kIWq*$BJiNEx*UywMVNR)w{g$H6KCOAI4TSj z`ozbIxM$&xMMxvku|v%Y%$pD^Fy42?k0Fr4K_L_EP`?8z`0M`RPq+TKqDRnRfs9ddsqsq_b@+lw z`~K;_{r5k=#^Nt?sVwEU@o!zqps4?jSV7`*=~4g-KF@w%N7lSsJ2)ii7NpQ;$B(x6 zzWI864{KyB-f-BM3WkE13t3$~YDi0-5wvhiDbIqZAQkjpm&LmzL1m$aLyk5seyHWx z;7Ap6b69_;M>tstSk2J0btEHbOOZhaLq%Ha(85sRMi5a(zf1-^TuC#oiIq;Qk1=n| zm(rwg8JM?6+!Z|~&sr4hBMQKxL>UFF^kYep0(V46o6)6!a|TVgz+zC1va5@}Z zfY6N+r$iXuCM2SSUx9U;ia3K<+mvuOJar~ku1Y-s68fNE>$-_T3mrlitT1ed6e{li z4zMt_)?5GlWKpf$kL#t!A7PJ$UJ9Su5asH_laoun-D)U@I{)#bLlPhh zO{|8FLiHL(im25Zu?AiSH2zZD;&$p}bWX@%s$PV>!^=I;XHqHA%QWqVs`m1LRp%T_ z&d*m?hV1sCl@e6`-4)2E;{wo*NoB2Br;;%hN{qW>*?ccbE=;8bHClAts%ZjVrW|mX zrl{{$J9e(1w#uoQLCUQc_xGs>%CC*bVyGX*3VPg+uAIQNXb11J$q9Z0{fe`~%JBOFCv}phJ}m^I>WaJPP$NmXFVfU<3BlK0awl}w*5Pb`-pAfSWvjdqJ|J;O+zi{{2b%@ z`5o>B4x!Ed4fbhnT28%71!>|N^!DRT4XnZ&$@*TslFkyNdfQSW@ zesp+H%m4N03@1@5IIC~x@ zYegU&>%(klLy?PMV1*#V0Ts(dSVqGF5?IoT5mIyzl>wn(gHe#HLMj0n;>4x1G0QTx zIh}Oeu`{lx%~gCA*{C<1 z_>i!ovE@i_x$BVeX{u!`#M!t<)<(rNVCw6;Qp2h1+ZZzTaxwKsx9K{IR*cIPo}QhJ zT5r6kE!$}9xT?Uyyjg)oohq?je#hGnKl@Akfytl$hUEIBP>`Nw}^ zC$&`GTiSz*z0VyYtvV(FYiKO6WfaTP==Udu$Rf(8u)Q&-iYJqIV|$5?_*8q$oXoK6 z!S@k3EnyQb(m(~I!*T_v3hm)BZ-1}W9WycwoMq1J%DP#9XAR8K>#PMVeXzCbu==*z zY_>L+-Oa0S?6ue|!)|;*AV>}2g*G{juvpYiv&HRn+E8vc_Tj@?!?J7B)$ZD}fCWW4 zl9m$)Y~Yi}0II3h~_71g@OT*4(#CUdtL#9S#C=HGYUz@Xyz1C67vIDnoG8i`m7~Jx#ZNn^{d9%nhXQ3%@qZynmqtbh$ z;>L!k+b~db60lt4OHe{C!v{2P!3Svz+aL6J5knoohZA!}@YMLY&w!{8|1moK(@Yby zOti;mo_4lee)D^8RB$5w45iERJhD_F<@u#_SPH9rZ9{dx! z+Nn|i;g)uDC=qDCTUc0Fz$84dgrqJMhCl75;Ch>r$n~&aNWpvtE(vjE*4sK4NMk%@ za4@8CGEIiMVxZNE9t`8<;c=8WT%&G7lQ2~**3sc^hrtOtY|&YF+bEs6EcR#cQ@Y7> zxP?w&%L-U(`nZ9iXSd>$zL1!Vc4oL{m>9^4HoJALid7km|&dx5iGkE#=ua2LV zm7%9kF%f%G+974VzK?AG_3QBZSz84wAm;vG0SiUa9`_KO*)`fM*!1p0m&4P0ujlUI zNWMK8+YQmRFXR@#PJMAR*AwJ=DhKWkh6fu8^TFiZhWYZJ%e!|QN~A<<>suk9vXTly z^Y@O0eQpQ)$90b036?sVvuQYzHk*aalfoFQO~m~%2Vb_h!>-Y`!EipDwzn+{S`5w! zwaLd$=D z<*24xHDGj}uD-h{aCv2a{-A%WLW=~J1E_!>If}ZV_gTP-8V{kF z6YdnNA+fyQ*F5HF<+V5VIV=+lw@yGm8n^LccT46wk}=zxJIoES zh|AK}YtX=Ab--&eF@7}C!*zQnr^!aW!%p@`$c$me;N#HLM2u>wgYG1fgA!}t+ZyV) zdJMH35)}s(dUsQ8AB2TE2{_2;y0e`k%HA3kgIE&oNz&WdiTW#zfB3_|2i!w1r7U1Y zks%L3i+-vz+iD>(b@*D3ED9_tejGqWKPsbtuOaH$iBe-G zt|-m-_kTpj@{8lA8~gfL9KsNAHnFpZj3{*x?R|aDED6hBAAld&CphhvH?QxlZIa+F z?L(|wqDYoLTn8y^46g=%e5#y#7|IoP=NA?hQ>%f&JFZM3l!&o56k-k(iqDdtEkMc#&Dh*5A`+v^t%%KW0X=oz~^kPO zGCpDHmTPFH4PFb)dxx>x2&KShM-7$!o{2QXL};Ni)_&y{;$85fN*?*vPktbh zb-Zgj9nXKDHCOah2ftALyKokM#@&1F&EK59aN#udqcr?W7`ktl_GJwbkO)>Zun<&k zKj3M9kB>Wu6Y@oQ4}0(&Y}(x-2}uCG^l4<^;;E$&Gw46{gx1%~yBXJ=Nl%82!%RC0 zVZolBWRmgIz6e?_-n>>0CIaT->%HWtEqNA2P1unVk2``d=Fsr6 z*Eilg7MzM>@oGK*%aDcJ!`Ru+D_wVjzMI1WSY$fna?Oa#;Ra}N)I(9YYOqn*4AjA? zg#W}mQJgcmf*Sj};V6*E(keEwPERPKe@xyY`h$}$$!N1#*WC6TRddwiht@J{tT}&t z;InTpAZ)I>w}O>JnARKx7ljv1CYmno0T$v4P+=$}oCJ-WfH}ja z0Orx&^-G)AA8|>Qxvp4o&ZVYycjt=@?Xf^S4rlQ9DI$FA)P$3Pf#)wuWv} zRn4dh0s>$Wp=3tO$bSj%wu`uevm&U$NmE=n5pIDmH975}tjb2i=~6K%q)$JQWwx{B z*r{X3Kl|h|8pNt4r?0MZUfAK#iEs)nD!i!3qGLsX^2a}__`!B((%VL0=NuxP0W?{$zLB`zhAk6 zB(7*fAvi5sTq*5ex=)0G{j>*IN> zA1T}&b9qKw;fA6tw#qO%na`MukFM{--o3U)j=S5?5#BC_;Uf$&=@BQW?WEt;Z0Q{J zP9oRiL)gjgX?9Qenw!(gcA}U3OY=KWc3r zcD4+N2fWcZP)~#Hp3~;&Hqf=jYua1kK3U64+n-Fs>Y$w z$%&cC2?A9F1x@b8xjFXDB2TUL$KJho;Wrn~{k#e*>HrrFF^Y_RSZi0cS*pRpn;b2) z=<8^DUru4=1)T7se^bOLtxl52qNlU!9?~x$4KaMb8Z7)wz6+}#oTw~?<(rX(YYB3n2*&$Ms zPP=p2cn_Y!z3k{nYroSV@`A`YIq1jM(VT5`QhwJ#ndB-Wx&Ri?!p%i*h0${hX$twR z$ppJjNZS-km=+0DPU!u~>7+k87lBxro{MishR(eE?q#lSJ;AL;i@K0hm{GCimB7Mz zehsOk&{DC1CbsBkQ6WYCG!H?Gf(vNj8qynZs)?^#6@dyO3!hbkMUOjdnSmA^D~dQ* zp+N~>?sAK9!d~3JEl5E`8+tZa(GFN)QHVJZ32m_S>3t&1BTSheZ0;AKKBKlxG1X_lMxDMGflPMxngfJ^3$;h+mfn)EUW7X=t7bAh`j>}K3WwdafPSvKnOK+!MyhA=A+WiqenZ} zFTt%WqW^`k7q?J+&et~H)@{q$F^)o78;6--Xl*Uo5$^Cn?aiB)<^$||m^1mj|Jirn zF{T77FcorBDKnxz_Q_G7&(dT;v;a@dx%Q4ocrHB__K#sIlO!IE4llc>W0YI?i;q}_ zm`L}#VPzw@KE!X$j9TD9xt{sPVY$G0oAG7wk-0ZOOQpW9+W^(Ojy9X@avNx~aHycA zg=;d%5=aa4BR=cf=p)Icohu5K%$+YY5NKqU$YUH85(uZ_WfOV!EY0Hc<15Eb0Tx|^ zONWd0s6N%*mwy^rG?>Wa;0RiD-5(WNv?DR43M^^~P0v|$*I*qhKh?eZ)FSgsNy|az zE0ITYjFu0QtSEEOgPVwk|M5nY2TSXKMYI!OR0@GbND10ybf5mp(q0iSvhVI+M`7^M zqy5eM`#XE3oxQ0kxVPwZ;r?TFc3V3=-a&sHE)&Lxp{+e;K9F)<;Y@<-DrOD^JTU1< zSR`967IU|6r{;sJfdJ;vlXjoQU>VQSEsdMetn8rE5)Nn3@ed}7f!1ZhNjw;&;9}x9 zI^!PyyqS%8{4$9w1}jev_uw-I!d)h|I)>aZsJa?&z+PdI*+HM}YCUK{&@geKgz`|7pKdNh^5sg&pA-h=L*`=u8ezZL|m!7qrKSdGw z-gB&IX!)%GMxlkzDp;v%>{j>YUcrhSK2#!$3M~pOU`551Ll)&(oNbHQp5lLn{V~HuUNZ)Ee;mBS*T7-LSDF^o+ zJV0QOoP*qEpBg(sZ=Y4vVjw(dGi?kHcSgOVYe$- zcvxuYX!no#+->8QJGey|YyiMiOSOxIrZ=)}w_pL@XR=^{XLT|Rr079huN=TVq zC?R8ahgxO5U`15q#Ehzie5Q}j&P({+PS_T?kHXQ`&#H$A=ncqd$dbr>9UR__RPgXDLrOy9ZW}J0a9q@mhlnq zsLwA+b31)ve=EMr&3BkP!<4cbMUNDdRV%!csKwYfKs(mLM5zyQlQ1Nq#6g&>s~ez0 zXEfEE7WW@9WJ*wga)Lz5SJ?>+oy8)8YzG_qC10 z1!>c-Cd#BP!QdWO(%S7u=(UIQ6gb!i1^lgUsu|j0Znq2FDCh}D4bq3R`!j*`pvTn^ z!p&;&Yrv9;VUfn_g0AbT;W3Uheh9mkNPWBG`@(eTTUe2y&UtPZjMW zv{Ktc-(ca{5iGTjv}WzC9n)4zt!c>ZB&>)^^0>z{n>Bt0ScGywe+`Fc>SQS1CM5a$ z&R*?%Y+RPs9SEvHv+_z`A9Oik;j#q6#JbA}0|IIb0|L=qkQPlJEN`pT&E9<$v}jt} zR7Axm_DTDU@yapTI0r4&`@>3}OA-F{QM3Y!g32La`I|xuV5tf%f(Px-2}G*SOK3R) zRMdD!&O!cxJOXcr2A3b`<@3RhD_Frd_{hEX(8`1TQanhLW$E_qQXmrV7;y!-D1v@rE*YK6ZT+8n z2~hL7g-{$OOD1X`OC};CfTgtZHI(l8-PJgvIEkGSTW5&}_iq-w_RVe5>9 zCyb4swa~kVjKDe&=?hoNnG4TgGAH)S|Pqot*V_|jBY2T4wJ#QG%9 zm1$#(%$->)YJm>L))1XRr+b_^QFL0mEL6{>C(+3nkO5*T z5!hLy$#Q+q91rB15z00P5=mD-l#?!}qpiO+JC_bjE#=H2RO*kmj+u)%lzG}iXg+-d z%LNB3#I#ERgxE_D?&o&-(~IOJ$wB_n=Qh`)rGz;aMzAA17Iv8v0k|=RLSnA9+2?C+ z=NenYr@o`1!H;~de{9&nHAJyuGktls-qHDFZW;OtEn7zuQyxeLrlxKKJ3~#7vL!8H zh-5SfqvfFAkECfmYw>66OdF3kSOw@J&*iteocto~e!$YT(Fw~Z+9@(nqpi|ip0)d; zpygS_H?h%p;oOf2^v`wLz=!PlDgB&^fMwM!q-tlCuT*12dlJY9TJ!;thL%eBP;gU6 z_3iY|+z}##-npc-;3fS+oIBm_Y zm>p!GbsNt3Nn1yo#}bLWXFAg!TKVRiZ@v}PuC>Fr^|KwZ~8(R*`m$_Qd;2G`*L-5fVf@CM@9B#7903PU`c^1U zf}Dd}NDZJ>SW!@^fJH-zIs%(YXHGG@y_X^(8T!-MfBaQr3I(3~5|@8stH zd~H3qnm4zPje482qsxX)`{?+F2}aX9Z}m+ipIK|`>gm1pn&d3ojHInsDTYtfcVT$g z!u?|GBEbbFT4bq_trEP@9O4DS?+|@9D6L3=XuD8XpCR?NPRu@yj)IhI*8X&sBzMN@ z^&vL#bf$6OGL>`1`Wv_?DHJ)nBA0+g4=lh%r_5FJSX5w9SkXdDRs9TH4&O!7!2((o zli`Tof|WzRL_Y$6N@!6~sZLttAz0Di0#**rFOMFfbk;UtjvL2E{fRP)rRGnzvI{!o1Ot;G^S}G6r6LWL^vCQ0b-k*51Pc|Ay3=l21@z0~%F>}1bKb6R^ z9?#x~Ki^Kq(u!Fc%O7|pn-9xjWRl+ng-fya+@GH|J3D-pYgdI5_`n+SE;@Q*F8k5(ZW%?M{=|*Sr0Q>Qd0#MAT9n+@F%pen27W(b7~482N-HJ+C)`Okk)0ufU}PR8nX~?sBs_2u#)F;OVjJ0 zozz0i3ds}J_s3bLN zIt^GPq*UgBRdGc{mP1lp?NpLm!HR(8_19lNdW5+01MvqYXQ{K!rW2*q6rz)V=MIAZ zb{#<$bXXV*qb|6ZqBFm^I}cp;OPZzFn8!8P5xKp&lSVa=?5`gkow;^%il8!AOt{7( z+b)ki98Z-zcRXo(%$!@w?LJ)ikN=SUv+@$43dV7$xwP`l*82RzP(x-a6w5a^`=+L*EG z2u6KI6C8yrHwIe9Y4lI}P*9#hkC4$2gGAWdSvRxnQ*<%}9Ln$E04KV_0>zN3g;Zcs zH;`@?a?rQcFmiDCgoh56N|IZ3D&VOCjOxWeb0H2e*Ez^mDya%Ns=!6ha1VW4W-iipZ@hasG*EmFQ;+~<#};_$n6D0 zskYTS=IQW1+T2TeID;Oa+cp?UHYB)(I_4rtjJ%T_e!rx@o^a(~w)}>G1aZ!bRMylH1!;@m336z^U?DFyl7^7LOU9H2ODx z{O8hZ&5oilE(p$%hw z)0OkMeH++>CAOS}pn&w?TSz!8-EtR!4jTSw1X=GjQc**LGJbZp9;F{==j?QJ z)a~Y)&CWixN7GN9J)zk$W2wFT?i&ydAp+=Z=qhUsR{ts~iym2y3tA2_WK}h@h7sO4 zI#^ys3!f;JxD(Qu#1fDKK8_q56)hGHZnWA zosO4QwpdBsMDa;eWr2&ZzO^N4>x+wJs+K~b%o?*R8*Od%jd}9swY5OrAECurlBuiad@_QiZ*eamcK zS`Yd?<6c*>G!-iq;}Mtd&UP>mfWn*i&-o!Ggfn-0Qo+=<_0^7y%j0dj>KyMMLV3_x zkCEMnXHH)^**`nu=r$Q^QIhMmc4C@Hch}fOLq(QR2Mnx6x17Fl;XK=`mye%^`~>$& ztf&}0vqK=`p<1WO!7ul2jgZz-6^H^$p6{r1`EImU=E6`r8B{ejdQ ziaf8o;mJF!RyZY%V;a`={#M_Q+Ga^t1Q2MAB5Wl8Gx2ve(vN zREd8qGGhWw#MPZlAM{&dt#(O49 zmxXc8Oz*G}GjL;_wkLFUfB|#O!0F?fz_ze(&y%tM7DQgKoTpmqvT+ZYNMZmE{}^?j zZ@+CBpikF}j`Y(`^q)rCyiu?+9Zv6Hcr)ode~SE(H^pw%5BoTPrP9CU9y5&5RNmGs(LUr6JX7Hn{b{O~pX<$eV$ha@aC<$k1t zMXn*v(Ic-PkwfP4{;~6>adNnc?BsN@yt4Hb1LylVQK9FAeCchGyM=|1wV615gfNP6 zaS%+;+Rgj>fs8*18^zz>JeG!*(%vvPM(ahma47SbNloEU`r{FJbLDaYH)w*(5@vWI zpoHzn%EIExrNy4YdbyC>S_uX1{llZ?lDU;Xo%VPl`-#=noUEYD+3$?R<0JXRULloh zzZ<^ei8gm%_2FIB-TS!jKI_b#edR1wX_othm*)8%=FCvwNR4GB-f`Nh^pD^~lQd!=vqO7(J1VD;H0F^uFHvQh*V&cL9sS$^{|| zVMV)yUVO#nfQ46YA&#nu^y*oaPMm6mcgbn0)Hx0X3r7nqI!8hGfY!01H{>+g_QDw%OY3 zp5Z1_OZ|zrJ`@)rCPEXlUAE5IA+hhZYycLNC6QTaxj`~}9I#wHUvu%o@ee)(Em94g zB*DGXB6h2AVPuwQaY(DhDB~ew5=#CKhC>V>4QGLpbz|H*gE#~3nmcppogywFPoCa8 z`@u&zCUU9)bCBO^#Sm&H9HI&bto;6es+U|rh4a!Kq*7e{BI2k}qyVGGn-|fd^;)Wc zQbEdV>JqAoEI+HDg=9MYNb_-MZ%40jy+HCPfy~}h-P5_pR=TDwsy>NWi=6pI!ox;Up+(5+EYJmGh zx_a^?JSOp0(q0$8MXYqQnzm9%n=+Iy|E=|qu`0K{iQ z)@-MJGCTL|2@ch=C;#;6XXoB}gJS6AqXiZ%vM8(o6~PKGtpbWVDz3Z&mnyWVU#oyc z9l*kQUOn>)9|a`x;DbtU4=;r(Xi=^H1C(gDkmM}C{N;ZEEI)niosU1cazY5F*68-$ z+RdBS;8ijaV*FFeJrH>&(wLho)VoW>h0w!>F;A9S+3TAwmI4iNC@_qGG8vaY>Kb%S zCmYPn1q;ETMs%49?KaHOWh<{0=5wJ^8By-Vo13`;v;*-#+xh~ryUNANB6e$$jmM)!|0jEpItbm=e3FxEs^DUOHOW~3t;8+ z>C?ae{qH~dAD{jEzkjQ6qM&jpSgJd7)d=IWYPhK3v{nxh4JrrJJkL80Z?X_u6jt<% zrIHj^BFp~*ECA>G=gytPL7gp`=@Js@H@~{M$*36~^;C&55lWO>Jki8mTIaQb8tEBp zbwvkT!zef=m|djAwgmMeE#zJi>LmTeE5`9 zM0{JgmT+Bq$#2PIsj~q~7wGBh>T?C7>7#z{1S9?Z;!vE{~_KmJH< zeJaI1jkutvEEfnYr#Tu{Ugg8dO>;O_$$F^>e^S# z4pYHISu~M1(Fok6e_NKWe=1jq-5qQ7*x|p;CCp}!5+I1gl1bnAXusDLrV%ebLaU@O z{uo72aFyJ2_v@Ra9wfb?mDIyr4k_+jxx9Y!X6{xG+RBJ?EQB7;=hnI7@DQJRl!&=l z5Tau<;`MC@@c@|bLD6uJs+*hY?&|tt>TZXt&AV-GL&8!l8EW3T+$Dxmj~kc!CoP@N zMr|#97QixYonR*ssTCnWiP^)M|4Z5VI5mCXeZKYRoVC;ym-c4s79RsOY6;P6wy@eG zFk}evIWFNW9?(D@4oE;?!a&kYWFvv(2@M4a4-Fnaj%rMS9@0qR%IM7Qq_eD@W%@_m z>+>aFzr>}T=RPEXsB~xL?dRwF^ZvYlrSPNT(s$k|CU3by*Z-0nE>py{;bq^vNvq#s zz6m>rhgL~gr1VW$Aj2A=tb{-c zQcff$<0jL%kuhRdOTVAC9GR@!OQWCEcWYapq(n}|<`V9C7hsv9<4=z4;quJG$G8}~ z%j*Xt@kB(x;t9AUm38$SXFA63`qw+Eo9_l)!@;24#hlvXnNQ3{tf{?N#5zOB8|`nP zf~%n^a=GwMRT&hg-LghQxWV?K??w${=P_Gn%TU!V7zb_l*a(4*ON;-^mEzMU-}z%@ z@gZ35poA$RVLH&FGuPl*V6_l)bW}lv9{{9dQyRq|NrBMt=V+qw;KlmD`WIjPJYXZ4 z;a;ME<){>!XyoMB32(6wti&J{D*~0gf#H!ae+?{}BLO2k6tKK%xj3ZCxd0Y^z;A!7 z3<3E$EA|RlUV)3M$1YgW9Ls;?ku%9#PF=lvi3?`)B%O1s8>@4VXO|x?EzbVmfBkG> zff4lo=5D+U@#5)tz;1ogjbj;{@dkZ9`Y9%M%h>jqXmB_xT1Wf!19~}Y=VYzSuMci5 z0v66tZEWBhP;Oa_Mp6+OFhv%p9wR;IPLQkWk;~;*W6NOC74rLntc5T?u&i%~9@OfC zUe}h#4$C(hWInK*u?C-RB%aJPIqPK_Rn7u4VEL$Rr40S!mA1wfz;e)4bWuk@8Y3U= zG}EFj!mB9fg>Jup=6p#3ou%_7A6+?rg_D|4oXCdFXu#l0Bn)v;(R>ppv$B8dmH}oi zX-o|Y98x8%jA7jE<)l7GB!8xtvgi% zKL@#Mxw^U$U!I(k0}Kl!w}0N6VmEOiO4vwb0m-})_bmqJgRC42*Qo<( z6{Ngu#(p2Iwy2vyqtocp`{sSPlf^)EBW^L?HK7xhNa1$?3)C2H&XBtJOn3d%$Il|3 z*fL?x6-v74<2fzp(35kK>(uA zt(#=CbW(O%S*$>nOd=A4YjG`NN-U$ks-iUq396NOq5#G?R#o%XyQfM;_*1N;q~uKn zDwT&=Ij1-l6)S|G`{Gv~X;|S4g3zOXPZZJ+ksp3uLPzcMYJ2n&h7QwGo|3e@t-&R) zc1F=uHNlGJSpW(q&PfByYbVdOm)RgO1?Qv7tJJY5@gr7Bn#<3V)0(qO+c=g)BDO)p z)nx79C_B47TLB6an)bA9A*bS4%m!m`zl%$%9#?%m1Qxx>_tWyQ ztZ-sdo`r8%r>7xf@jES35qmnYEQf&Y;31*+`k4t?rxv{-W`4&C*SR71I+u=N!o)N{E=2V3%TQB_T&qhV;j>e>f@g~}NXTL>f5U zF=m4@7pA9stNjc?2dgYq?Nnvu>u7)e;SX1@=D>0!UwQNhXynHrUS1gr{bJ8QKc&?? zjcOWLK#Ss8FkW+}bz1V!@}??9sA(qW z;U#^uZ>EZtnAXbzjj&K9}=(>6!0&n7|49|(G@CbXtwllVRxGeLi@Y;6dZ~}N4COK zw_;$!Oy04L23ptx7y~GhISugD8A==gl) z_$IDu8e(2qG*aV`3Knq&SRPhhbuGX}k}O5#H2;!WL4oR7at7sruit#@tvh`KQ&T>w zm!&0U!mOB0QV%W61{eng5`ig#l4ogdHMSRU?bI9l>$~e&M)SDcte8;<)wdeR94=NE zYON;8Q((P~)9d#I_4MWF`)@7zto5V4O|GrzT4r`35FmL@L>H4@&%#{7qz{FNOaW4B zPDUqjU$Y)lWI>;abFP(Q+YN0F=1U?N^qTbJ&E@r8w|<5_=;{`l9)>Q*O;nw@2@jwD z&W(!>BnTb06>g~3K~P}d2Mn`}coFYIek;=2=L?IA3otkhbp6}U0u~*`F$u8(mK7pT zC+n(ILkOOf?&=@@ z_?GnJK9wLOP{F_oCO82DN1Y3AUWJHinqPU<)X7q=Pm^OZXkhs-{A6D-jhLc=<)wI> zh866DLX^tYP$bBQVEG-v?9`b{I=Zp*?)61-OwcmBF!|YMa;q6FN&53q`7%l-v$34; zn);p28Rp8KfEx`{0SlB$9qTzoMV(Kq!(1ww*9)!R>z;ReSq32vZ7-U*`7et7iM8Ml zOMz`%2%US=THqmcgY_BfA`2eNv#ap{QEK@REJ@T01G0MJ5x{ue3^3`~)IXT6c8*%> zJH|yIti@0;>l2FpFu>NbW}>$>B^Czkg~jfvf%V- zc3?^?nGk)_-rgo#h$O^}mx)6L5*LycvtfVVAgVqB78-LkfQ5=$@*nctl|JwyJ7-~N zbNe;zx6xC${VxCUQYB+iPL$$Sv>=qrR}`$|0uHagPzR~M&lAf_STx}lF|E0$ZUW>O zQn~YJwCIn)3YI^31|K=OcJ2Bqo<-1tz07Yx43X*MH(ozeHa379X>i^bq>m~;w{IqK zES#rO7*9-wXw%15=Qe2H!ew&KSp7bhQyOXtb7DntYgG2`Drbh)9TwN7g8e;!DA`^nyJApDsnO zpD7b!b!0aly=%OuqOoESnr`oScX?}1Gct2kE9H&sM-P>8!m7wH7Iv8T_ic^}Lu>c| zlJ$_G>K2j6TqdH)WGJ|mlf^jL({GpPTmp<_xGSB4md-BS(EgBv zm3w%0(4nN+PdOy@wE59gd6XTN#7M0{JAF5{oExDUBs%QCCu>4LPeX0k`G(i^rn%+L_-m008_?Z*u zKe;sqzd*k}?)PmiO~vsnbKlG@NOBQ}swAuOB%kqzKRsp5)Mc?cXF~4nsT3tjCdCM- zzPXEiPZmb&I!wM`Fh~VN1BMFNgk$k}X`FaF*m0j3-uBpoKW;BBGT|W%xig+AC@j%= ztA8P$p4*54jc+ITS_ET3mJ4S1F6_-!avUDD`4TwncrAFJ>AthGulwmP1;n?&F}JZ zLuZA#p=Zp2GEe>YO2E?I z#*!*fAkIMRcQ~X5(iuRA*|Ea=a)-2Esz3|H5@Pi-Jsesg2%#GG=lL;YmF{Nm!` zHm)T=pM_+ICnu`h7Wc!admFKhXll)ri7qck0n0`}@14-_#ZhC0w`g?cY zhnR4sxB&jLIF^&8rG<P}k!6=rGTlBiHGQHs-#JAhs} zVnb?sbl_(w96t|)jkew0`xo94t|m{?6@iM16(tJ&LJZ>L{}(DkUCB2=OTO}tfaPC~ z0gE(o)f89ILXs<{-L~Udnp1I6z)~P4y&1L3LZ{}9Q&%t4)X;@u+gI1p1C!(@0UQfUkI=cJk)-Pj{aQSl zF?j-h5q>h7^zn_jez^WYbx&8d-&yzGgS(O|)weWWHv{tS`iaiQ_us$nXnygczPip( zaihF>{Ghq3(?B5Fzct-zD|)ZygVQBfu9Oz%z*16LC<*STZSB|EVDeDw+?0f*lSo7i z5+OusvLM7Rd2Jco%&MWGKJhK^`zNG$9>KT#prFO3V`JpYPus7O=-yURTOqJ~Dp*k+ zOD+aI%JVG0-c=FPu%a<=bFcEDv0Jo1sV)}@Sbo8=XneWDPA*_kt@Lmw4a*hJ1?qSR zlZoQV^HC8NzfnidPp`{8>0p6qX_mbk^%=4!KJAn z$B69obM>C(&*T^2T`3$)$}=z32{3H22QWbTyXW z)w4M;+B#iSXFTYsHV#%50Ty$`i=RiE>KZDF8td-9Xss~onCI;3Dkj1=?|t}5@f#&2 z{B68(`t<376M&`i%9T&fwiAUuY?F1>GD%hpQW5E-Z_9}+LXg8OD`+Ck?&$1nXrbB9 z&SYx~#dAxaZQ#X^KMGh@E;7A_Ds%Pr)vJeoW^$`swPuG^!N zsd#G5=ftr%*OU6?Z{u!LeRpq1@A$m6y1e|ZZ!KxpH+5As8;uRk##YD0_qh$;b+EoZ zQrA`9INfsaVubr4L$)D@uA+6oR#9}Xu=HfX8^3+?jkizJmLm#rP5g5E!XDW8w1}m(KE=H=wJXM_wN2J)}ya~aQiCx ziaHKDgo+x4l%m=8mCdI45OE{FNOaPmlEVtiLix8tRJ6RD7yUcHqM}9Xww%btAr&xu z!CTd{V6R~+!-2PdI``X?mFLc1xqa>Uu^-YM&SvU0yeK4h3+xb zEPF^x%Ws`2Jnj4KQUTnp=r5``R~r5wE(hKlT^ z6`{oKfFGm7SA`i283*b1hevv-o^6WlR;}E>@X2K*x5cd}K+&*rnBCfrZM^+@_bqot z=7`A~!48(=d~4I9yp?Fc@*kM{y$To&Ey}W4{-ISZzb($G$SGLC01F-5ch0?j@{Knu zE8o3+y=?42I0}FJ+vB-a@)lCu$mZ(gYQVGn`0;W!lZ|BENsApGY-AbFA{rb%e=o}z zMGffG)>n57b9;g4Lz|y0mzmCw^RQF4qtQjLX?-fdP-y7~pZvBjp?4)Bobk|uugbRZI8Gk?qaq~8*aS~uf%#5(#zR_G1cy|~vhZ0zpv^4rbb-SfW0GFpZ` zJ+{^^1ph0_SK8PvyfI{aF<6dkS>fOR82M=*b7DERInlFQbEok1$8Z1UZAzgNzb&OB z!fZ&6-`%P~;8et0M4e^_6z($V;wq+F!SOiEeMZ0nTDZhGILg7a2^-}Q zgMvqo?q49O)t~~|NgE0Mg>(hD{Gw-hC80fvl_OWr^3USsi=l!W^^fOr7O7rl0plvzxIJtv&LZ~G)ujU{ydXK0R-y&TR#khTpqe#4%$(^KUGndp^`rYh}-N*5gH*6>uYGBt2Qx4L$|BJ7H%jL(E5mSFjppxd_rA+{80*Wq>? zvY)6Nlj%dJMRFFvGPY8+`{=&z`J)T}o!-h3q-c)i*FDS8j>@6szEIcSwTsX%Ew^u$ zzZatZ@qDm=7R|Zjbz4+@TOLY&TXM3P4^<;74=nuY|NQ%t;*3hpw8@vJ?Sj(9toxx>H$k)JuV9^=mHuy_|A3x_}c z;4=9F(RshcX&m=~m4$^MeO)T0L;~;PVVIooK$=6fUD9W9T5*QY0lUAW`pM3sdncVW zxlHJB-MN5g`TYLp7t~ZG2NiYJ zoO3L;98i>xe5`0?GCW;ObrgB3EZSv=JW=i=e_ZR}f)o`ae91??XAuJ{zdI6$080sA zDb97}j;_5H$n(Gc_QY>a2w1+`P#ndd zWz+GedvUud;nDY2Gy4TB_5H||x`2pDmJr!2b5s9p%@d07D-fBSqlBZSg(MGLMCO8YYGeV-z(c7!y6HtBewbY=*|Rv!zlCe*E?u zCrHxHU8$sWhQ-aDvx@{7h}py*+A?D+6htJm_!SN_a-MNz4E+RR5{_yNA0jEu&>&zL zlPh>AD8InBNY5XrL>HS_}}^r(|(`8UM1n8sNmP zs4|hDAfvEMViAv$s-y#W7LVN?NqD>K>bUIE(%ReKQCly&W)?P>CDecj(p)d}0)421 zt@+XUsAv0!Exmi5-+}R>x2MQqm=2QD;!>n;wtLB0vVrA@x4)^nx?ArvZKkd6$kMQN z$G629-((_^v@p-MjP_O=ee+&ZG-~N5VG)UJ!%#!TSa{cbk32Md&^KsoFbhL+C_LEH z*EeAt7_3{d6U(nuZbO#+Y=MFLMRf%upJ*s#2FE<#!}QSu26GzXG3{cXG`yB zeRsE)tk&d`1Xfm@DThp6JdAS&`6u@6r)b_H^dE$h3-2;x&!nQTdQ+J|#$wTf7#MQY zS!T(ZU?2J#86DY2+FVs2R zcVL??f}*fH&}uxWYrIiaRo*u+(Ar=as=Yg4(AjRicl-Q_0y>f6T1qQRN-AX;grik7 zNs##=1OX7yUhkBmNC`taoC#kHvGlX4MB7zpfkZ~0KWCqV@K}o*LK=G^3zq|lQ z)U5VCPqF8_YC}%(EP|CsDxW2Xnmo6H9TC*XK?T!v3pL-84;Jk6ql&rto<%E%@;%F8 z&cZ|a5L4fu(A0lauplnSZIH@y?d=zD8d^v6Q^cX=)yc`#St5--ft>ATI=w0GMi`gz zOkg&W-Pk~&bdAe~P~kx+!G@u=X$o3FD8@(KFWEj_-6bIY4CCPS<2Bhyli zumr@K27P~Sj;+Sh&tkD>k=3}}Zn7jz^&KsJj>c&-Vly#42GAL5j5$|O4jB9G6Vv@buNji8jf6XJ$EFmTh*P1++%`W+`3>`cgR&qgvn zp+v};-)p7x3~IK5`hz z$BL%7atv1TE{nfHe#GPapY#ZvaoSj6t#+2IGriJ?S%y&%l_~G;aO1m zZXul(^ph`><=!c)QNVHwpy(vg9UH1rzOS5br~F|qv=0#%1xvOTc@Obvl%XOaD17Kv zU@AbfyCC*CXi<2S*e;JXia5RX5h>~dT@#IE2#q4nH8I69s1P{Q{P*(vrzMOV{lT^eoSnLV*&RqQ_T!Is@ zAi&el`t#Jb8+PTQdw$F3^DKITIF=}loJ=xGos-l@1F#UHsU&G{z#H=V(MEN7;@LnZ zX?1N;Slta-0ZTNN^#r|~IBTBK&+q8xeU^?vCvs&yj2auJD-OcVeFmnXE#U#<1Ve~R z7Y*ST13fxAX|(L`AnDV7TU-j0RHj3ybU=lay+i>Ei{5O)AA+Sy;t)(ZhCx(BUFBwn zv~?l4>{iJEMG_h=j!e*#BmN-rBQ_u<(f<7lUrH20FG|IV;#vU9z5qnBmYn6N{VKaa z6Qn$1s-(7NhhWhFlMffI!=ilKpYSZ8ji%uHgRMxC> z!f|fucO!!R-FNBDy`MHVBiYomXKC8+@ie0wezYVirc`Q;^`WfY5^{>{V1rq7*l2XL z81*K1fFU%2hWxf)Rz&)p{YDd58TR{r^tjxR6Bs+|gTch&qTZgEeY_gaq_%xYyFC$G z0xX_P(rb@IygPoE6LpP1EETaQLwC2K-ww}MNuQ&!blhX=Z>{KHxyUjM^})&PnImU2 zuDegVrfmmkwon(fQUgJ)y!XNNn^2&}I%$n?{*XZ*qrOT}|HZBF|Ct`Hf)!i~V5wpE zT?fxeyb3;r6(PXFo6b6pzRI2md`e6~%kEI00e!Mo&|*{kN;u4Of1f6cBrK1 zylRKal>(NNlJ0#_(NaI`^TeN$&!)eBy7%oKQ{@QlIcdB^(i?NL#2!nMEHv;molVa4 z*0W>U;y`H$=2N-3cHA}N_oTCK5)WJssjUmqjB!7JA%B_Qa@*b8tO;znhXKoWz@CYI zGpQ`Cy1lLpHTjwac|mEl1T9woU1vAvEx}+@&vak-ZfB#TZ-TR})gv|?wA(VkGT1UE=NshA$8CCWmC&`JWk^3k zVd0*+Lesw;P0F@QZ2}gO+(WbgF)AZk|K{=v^jg>~f+D4ult(MFBY)^yge(VI4ww%e zf@SxsuU@v}K+9nq+UG-oiu!VNwyY&AnrWMbnC4n?=NX?zR^-|N~SzoaMt!TU|2diazixp(!TMTB^Q^BjGMZf{S~r(5&{ zW*6=57)(4jT^6>`k`em1CRfm9nHdh~JFMQj^-n_X40^fjl2|}Z%;WMhOAs}>NM^m` zi9Q-}dC`SortQ(Y7rhoZoW`!Y!S#`f8+9WC#^yS1oWUC?8w{d1hP%p&TJrc0h$gSr)Kt=f@grvS6 z2}H)xFh;_{lbq$S6ng&Eqa%%$6~(itMmzVplC$J?mGf(6)s6^HYNj0)5xC@|MTLs` zU4KF*Oyxt$%kiE?(4u86^7u8dkmCTBl8@fIWNvo4QrT>TG8x+1#<$--{r+islTFsi z$Eyqz+0)3<1xZCc{OBZQnduVkolD%p-$O{HG zHsT4EqU})xms6g_4yz}YqD=QGC6rx{@&e79ftCjo1L2mU=_c}&x-JLuq}R(LCf(*7y>Q=t>TZ~Z>;Ne+OwN` zdtZO|_wVAMMLY|($2f70whN?|%~XUb-*P0rAyJ5AA_NDvtAh5aZ16RVpi$}fM)uNn z&eHWdA>%sPPUNyJEf;P)qoAOd19`)C4oTox^Z~X5$ZW}Qk`@b>J~FH`BggLS@8BY{ zv-XMAgt|f|gT{+Hu=*2QAtp;Ex*3b7;(?ivXUWddXtow<`J0lQ^>yyJ=AG>8hg&Z; z*8aRc!d_t;^2isfP{?R#*teBkzjOg%x!Z8IOCcz{{`=D6)2E9|OA0aama|{pY5(Ms z?0Hm)tste))j&!MZe+h%dUVQ`{Fk7m46^QuTx7+ofD>GcQZ`E~_khwE6J)4OIe7st zDnOnqrn~_p3R+Yywgwh0OGRZxJEBegQhKlrOcMM;U}+t8Hz#k#pbGr)4xxoCFs zRmY+@m-8Q7ujujXQ|Yh2ot*sk`@es;2}l46dCOkxr%775d&?WEKjCNMPdD~9V|$yM z-#v>YOcsvDl;7Y|LV0H=il2kkp`<;&k+tj5z3rE?y+%E*MfO*HfQ2t5yY>142qvSs zBC>N-O(4V%SUh%-8gruM(bU{bN3OdzL^-s~fg>*xgmZ9#GYk?u@r_uTti_ZFtU;B* zC)wj3FY4RST)c||P1O_OzMGBRKd(E-9M@TdzkZS7AIge-VaN4Lx*8UTXswi-04%3Y z;#f+A00jezm5{Ss31Rds>IoQ5g&`z%!O)Nha9}kY&}*Y2hbYGrqzp=z<(>VqKrkl~8aM1Y zsBsJs(cXZO%VjG+ty{q2p(OV@n|iuC&_YJly}7%Iwp${WT4U`f8GZctr&xxPJc4K0 z+(^4j_Qcv^XvS|bC2%=jCz?}M@BDmI`B=EQY`S`DzJJ7V4`s>^&9@wI}EaXrj&ttFxR7xs8nC|vw|N8aQufP85_g{bg z_0#mZ_|8nwyNR z9HOb?7~-hO3)zLdWXBtwe7u1^8Am%Kz=i&gWsTpM>GoT^9t6p}Grj%&Gxg}^miL8Q z8Y{Y4ITiJ!CD4ccF5YZ8NHEXbl3F+;m9m{;OzF zU?WMc_>|`wRy43^X)2CIv)s9F?B(U}!!$QnNefa0D%w@~|MZ%wC#Q*3iWTIWWFq-+ z(HsrGq`XMFBJ;G{MNihg6O?@a*S~_7zdw6s2Q5zpEIT`5O;yWQ1Ped9*M$Y6`v+|@k6C06T>8?seUzhm+|T-}UBMV}*;-GncZ zve;90*AxEtB9RnXafma})|v6~`j(b~j(bHt>+`VXSW`rgM-o%8(rH^kjk1PIc3gM3 zef1rXa^f^#DPb#-$W(awEO!(?lv3vqEJGB{4)zl1;SLdnB+n(E!LwZZ0JvR7J{KRv zD2eJBucD;5I2R1A0x$c!D^>UtOk>R5KVsrk} z11T8!FsZF_1YE$P07Y{rBDc+P%zrS2U@4$bkDVQLE_{^(%l~8Re4Ls*(0zaP*n749 zSmD^-b7-xKNK`^1qa<-`Rnl^orWw?6 zcUcbDf>NbZhn?vRz4g{DfDVJTm~$Qi?>%6S171~47m$;TzpJ?FZ7$oN;X?e4b^Pf zY8l6(tQVLa2JC@Rj+C+!3s7J@Q6TfqB*6RlG3S2o-6;>}=H&35q5u|C)tioUp}`S| z^|o6gF|g)xug}kxY41DNP4{kYj@-XjraIC*%d7&iJ8ZTMk4$=<;joevutf9uSio)y z_BUClT=~9QB!cqOx0kN94~b42-d@q%3Oc2LMaRm1;2;lV z{4sv=uR9k^@{)#!+2Un*HbT?6gH6%0A-v#qZhZ6e=9)WvYo)qg zU|BWHziRrqYYU6_$#YkpOW$rbX){MG7y3On5E+fT;vSz;T`4Q>Ld9JOB@*1E%bS)b zOgdQTwP?FU)!cHrI){uD(uFdgR;sdFuVj=Es?7tP1D0-!Bbkf_TyEuQnQ_Bx)t$LF zvU&USn}9{gH7k>oON%47Otw&NazR;7doxx>m3A9WDd3u4wwR~KYoosq8ev0qw)J$N zEa&M3Dd@&YetPxFu@8@s>+hl(0xU<+m_tGNB)pa@x?>>>wGQBpJdW00Kr=>;EAHhy zuI1w0W7jTA1&;iNOrSeGLje(L;VT~SMWU-f|DTvN{RKHLaM2C8=muQsj-?J5aWGq0 zaYp%zkHE2PM+-(i0v>qNOKIN38W9S=qPZ0eaj*SiMqXmrYre&}AY$M}hY1fz?g#dD z&A1ky{ROCOJR!e*w&o5co$F4ejOSQT!u+H{A^U2yQcw_vTdP(#Z$Br;{AP2bTsBo! z?SAu&g+qlkM<5xu*_AcK-fR`OyW;ckzdV+dWqT8t2x~Hh6BIT z4MTeg7P3mn)6I6F$87efY#zp3mGtD~8Z=*%JNOSCpNZj0t~bDfqOeoN_>QGaBp#9g{m?PFGJqP3|VsW0u|ch6N$)xF0ih=!JP zr_Z7QbyZsaS1)3K<$*NifQXR%Ma>7WyZ{Gy4n%>_E4+L63g4$)TQo|@^7Hs;pQwjn zxFC7^;>8Q1l9bWX|JPPR3|4NP?4o-X-nMxby=Vpkl)r|3OwwwAWy=+C11cDw`hd>~ zR>U-!Ny3j7WpuZpztz3Vfd*6>VBuB&ynw`TEW(l6*EHl>ctT?Pu>PQs~w68c72IiPy#U#Y42`Lkln_US*s%vgc%2+ z+qAH@uH+ULKEJb2W=h2aW+z*%^!}8!ML4{}Yvno4EBb2Yn8P-eGmXzg9G1i{`B)@T z>TJE%(ssi-1%IIlq+Dw{DPd$Et(ILo5rCq2K79@W<%4I~3Audr%3WDZ6nz$YE8pTu zU_og_%Y+oq;DI?}M;A_oFT)60ba9Z{ErE~Hm;@rEpx|!bVElYuQd!AZ?qbFck!BiL z49_BOTfw4Fn#Hf^uI1wo46xJzfp^i+Vsv;LFw*@BrlqwYLC;+cd)>Xr)hYuoui4H$ zhxWAx!izsj#k{hx@nrGI&l{U->(PQzg@B-7Zrf@+YKtZ_$=BCrI1wZ&a~=*YXDe$NyV9WcmmLW*<(%53RudMU*20=pmj`30F^*$zj<-7>|A_w zi|ToE1?tqScLd@km_~xboHwN@;gOn~&a3{hvDS+{ErX@vPx*kwLVA1gTF2nv$rGo6 z3G^psL`R~ks!N>kA}aJvlmBAtBkK-=MB{O-WnQ=QrJBcMWJyX4(i zTH08=z2=Sw3yNa1xz`ov>T1v$qA$C?x~c|Y+^0!I;X+Xx-6owFnGeU!W{1b;_xbQH zky6HcdopaAET`js=*=7!G|kPC;7Sydj+}r6!H#4RnwuoGXyk^}WICMW&{U|PfyI;H z5KXpFusS04imALv$L&tp8J-`xd2e`W0YST!mk&2byv|Le?Pk~RufWdoDvO_o-61xj z^W(PZ(NKuK$5RlT!1;Fe3NLgFwsl>8ZUAW%WL>OZGS!^0(i}eMFnf@os zAun3N%Eg9Px%>OOAAa=V-QRD?Ug~u;K+&@nv27^}VW{p`Xvpd9{%vS!R7cqV2P!&P zq)gUVgA9U`JOx0nI~T06s<<64#Gq3hi7Zq9CqEK|sCpG;@zMQoC?2n5RkO_vFLGVE zIlP|c-R+$-h0Loi6HPS+(2t-flqca0M16jmw|=`i?vGHz1hY;R3RJ=F?{s)z9!|{H z^OXq^`kJ4R%BTp%C7)*&jXv{yCaxBsaEI-)|$m{Pjhn~VY!=2 zQ13?8)}0F?GxYbDiwo<@;>uEZWcD_k2GiQY?aznT3w+0^WW`#s+w4>MaUX|lIOu-z z#EFaF4#XZm&U<=W+uOTNc5yMj>oBeU{X74455$&Th$-ya|K8byXL?Q_zI=_@&$ade z$#C&2^w*>qqUXXigIt#1frc07aXuG$is&|#Qc zHPbNTV2LaTVXsPJ9V&cK-xJage#=7#443X&eaaf##RX_9)XGb1ER-oWvn|fCjY`H_ z9ag*#=d+B9p+JS*Hcza;>6T&dQdv_yhBkmp@Y?`O%vExbyu{-JMIvT~>Y@3fsgSp9n)}DPWK@L|#t1E#$dZn>#w%gej+`xV*PAQ)D-u z9oE4{QB8!aj4Mzn{n z){k##Ku8S8yw}nciLS3fk=&p=vcbG(@zL#Yyk@ES?H03QT3Q-edh&2MS#a`W35P6^ zAv=_}H2N&gYbZkX_V~jk7eIYt3FkM6@OyF|9mk%|j zu2f2r{MNxD87_E1YwE=`{3qJD)I!ZyvAxZ8v|u_~SR^A=(W@f;OvBd6u?&Ph1`Q47 z)3%7CM9%bmpxwNyW91YhA=EBVDyWWZ zY)J3q{{7)X)bFUpqN`aP$U=E-rM&KTdueC5Yi5qCxKhbNCMZKbTJejsaQPMd0zd8~ z`$HZ-x?K^6KOPLaNHJsM)~We>b6zOW=$- zNR=l1o=7BO>+H37)ZCXNo1c>$dD(8v%~B-PZ*?q#>+cqp^K zeNeks1!;Xyv`q;`V#FAd7ZFq->PW**@IibU8W6M~%Pe1!z<|rE?yW}3{^g5*z2?E)GG$Su zjb?4AsIEq%QGUGXwaJxP7Ja;U{!l2H520Y}SMewj52=evpQSVkSRRiIlW>S|0?#mD z0VJ+?fXhx(upu)F4#gEz85>ssiyc8h7_VY*H9e!LdpFBpPMX%d!&wF9f3*r@?*79& zCd#uabL)BWR0^b*+1X5mgnXED5W~q(!oh8MHsYtJZg9o>JX&*YH~Knh__bYWIn{kq z#KQKzvvdFZyLPe0x_c*p5fT(le7S9=b>=QHePj_tV$8Q=1SIB5@J7i|B=W$EB2HNV zj@G&(G!6Md3t*|+7cb6#)=*;k?C!PZyMO-EpMOsv(w$2^ajAFzU+HDYl*kar7OSJB zFhsuxLBQfy#k0taEk8Aftj{nWK)@1~FvNT)=n8POb$Lp4C9{nG zSQb&86XAjy_r*&78tw}-!_|zGP)?q`34^X0RzxyPSt9h^fA}<53)t5mD^50zq$!*; z5gLQ5tCit0y8teK$!r_-TPzNi5-*%M*?D82ZBV2SEmMM+;5!-plwaBQ zGN^tmhzDS)7eeA!wDU(tb;(!WNxzj ztHI$}e7MYST``9_st|t`s&32m>yBh*SdJ)r`Y&`fMQXMRvIQvVs1wYWXQ@P33#)|U zE~OB+d;H0y-|R@Z2uyxYz?#pS=2-q1W=`)meiJPS1qJc zPHq+1OLp^2H)gTOo#j9veP?lUQmLf*t2am1$iF9vl(~?-RCDLz(Wy)!J150>VLe<7 zt;S7@x67tvXne+2^^Yd{r|S-Uw75j z<>2CKjzt0ytQN$!2YQJ(SUu0h+N8TLXn}}>`vMkLbi4jBi{G=8OVTgrfoVS0x98eoh%s1bw&C){a}y;CCy0TsYf zHvtSM?R6bfql9iurZt)WhDjvb*HM}%FE9=IIN&r{-5 zb}GlkFV4(JF(mq7*o4VN=&_oHvlK#dR}ua{m&BJ9m635NW@*yEV&>gE7Er!?bZbPm z116;M@s8YDoV-1fQez3T^J%;`RgAipVdBy-OhWLErpvdv-s$R_S>^Koc**9uNZ~AE zrIGfI3m01ZF7@|6XuSaa2^k;cpFqi;-TN^Jb8wJhKyfjIKy;1XY+by6NRk#=gRiR+ z4)Q`a1Gk^j`i0Qx&hsf27(t5OY@xx@swpYZU;!@8tP@;4qYItB%5wh=*Yd|dO2z_K z>cnlswHRo@UO`2`vdy-4=o(PjQ^yKc-#68IaVSP;Sb0mcx8HsXynvQ>-xaVN*YlQ! zKC(P?{W$q0j^)IFbr`PgS1-T$xjgHl-gO0?rirXOKI-zBEvwnh+lx!h* zlU%KlO++I0{B+0`>okXy$w@CAUe=u#(u(4wi>K1yNCqKFbJv}=2~)&WY9jaeDRBs} z(DDb3a_3pV5-f5myfO~wB?~c;g%a+|t16)@7U^y?w{yb9(u8DbzT?7})v>{z6K$8cP~~ao zxC~Ot=KjtH*AK&fI=*w~9?$|~Ou+KSq2oM`Xi}3}hI>hxD)<%B5>f8~H3E|Xji1|# zm=vEvc@FnNBSs)a!lJE%^oey|y!MgonK4BCNDD&EXVBX|g9%t9)0MlLT-9uxzpD$# z@zMZ`ffj?$v^@;z$*ztRY^z%lu;{zVdJxjE^0q()u)KZbts`#%ri0QA3#uNE$4(lehGJ@dd2ViQ9&Pps3|R%ub!Ed@ zDSxI&QsRUmCCkFFOJ!}5lj3B^ossU|0W(iaQ#(Bu=bb-%e$ymi;XtPe>ABCJ7VNe} z!r`0vK3}uiYn(R zgJiq-7jZ7Ko~WTksB$#zjx}E;ul?+^KTFlzeC*Hv_Tk<$z-6y4OsIhcw8(G>$HEG$ zu@AD9Dz`lv0T3N2I$8uPM#*eo1(@&1;ysW02u! z&lS1YYDH;*(e)7ggkF^0dk4A+N4>uM_kW*6r7jsnuA}Vbq{yAQsHc|j`;sHyC2dx_ zCory#mxe5n0Q+X4600e}oN3jXo$}ejb79xe$)>iB3vHbP9nf*xm>zouUUVNmduZ2g zobS6kP=Tt0W%o{IM3(`}X$>sUR)}4|MV>eoO-Grs=aSjNeyi~1+tv77HYE;Yxa~yohG$=*+6MWS;TIDx{H0h@`Q%so!krcXT>zHM$}8xSCWd zak?&rc*yUIjoW>8pC67R+$9Yxf|e0>;A!4+9E5ERQXOT+4nYo*xX#l3Nn_z`(5J_xYWxeEWo9X79A{xEZDDHi*9u{^LlElUt>1FB4u+u z3W1Jy4AbDULqd_Bu*R@ZZB=iG2~)m?sSiu?Wc;E2iX ztj;30G3+v{#ek(h;vdZ?6{TVy8tCtDZ-vli>7TJ!B90o7CnHB<(m*C2QpcmwfZrY` zHb`hm%>kCVd8wRpfF*5`>N$zQYs+Xv{;Xmp4Q6xRMHI4ohAwdy7qFOHhq_x%bf6CR z>ErYW%DG%`oxBrv7fj3KC%%&1HJ_PxsiTZ5J)*_lI}~u`=0Q#bA%#NWCxqur+{elf zU2kf;-XbGnSP3V&sha4sMlSTwtUa#%TiX9VtvNQmWhL{-JDOubutft4_Z|dW1R6OL zLKy0;U-E4u^KPTQ63CD{(}0s{bA6mBEPtM*&KG?TE_PhKdgdS!%47)V-rS)b)}(U} zTK>m}!m?&5?2lT;(twJQ;TmYc49{YqMGr|}1)yNt(iP*Vl-N!xAw3F-Uoi}@H1ZbE zq7_717q8R{0n17`ZL5|!h3kz*z4vl31spbY!sITXm4b+NC2CcXKd1d~ z4;7TGieN(j&;v(PQ_~Flzn&rV!Kk@s%kW$ZA<+Vp>NivYEaa=!)ZF~MfQ5r~qKR9j zbe=PDt&SmcI!#`xfdx_XB5sKO4Ye*BPG)-RFs02cEgb`W%b(_|+^=DyIX!tl94(kq z0h=vhb!Fz9MJn@gKP}$@&c=+D;-;Ts5WV{c#-mx1US&C#n*$i_XwzQn;4anKedr9f zd8Vfw7g$O>2=NJz@|*pD<-o2tL_zu7+tQZ9F0=I9)++bQv<5Cz1xayHIA!0NK>%n$ zS-P!_99W!>tb_%J(MzHF z!;mpG#3_w-t~?E}H2exc!M3(-x8A|T$XH%?EN3*Zyi-R@y?(A|xCU4Z&qCUJ_)_ud zOYtm3Aw+fV+*2yb$gQkBz$RZb6JF=s!X|nK?#if*-C>`<7O_Qx#c@Y>zhx|8Mrf&* zOO``~r5Fp!v%|QJ3W6%Gl8>}SW`h!IT*c+Nd0dNtMM!cqOOOr>LSQLSJO%M3Dw#2o zP(|6~2>3liq_s`GUdX_Rt9gMapQ#!_GZ#9yzz~2x*IeMHb}G_x94QC8WT|6%FNHI?GIiu=Xag?sinj=(>nlVO?#z zzBiPgmMdr6thz|fa`oU5@>+NXU`0+m0~Vpp8lI(I2l3=X!?W-ZGr)p1&|>sl46JN* zECyJ#7^3%B0LIZePI#QrLy@E{b+CwQc|B#pD4oxCjX!<(@{_Nqo1sd&7aoo{ox}HU z7HR>P&0 zhC&5YPVImsm;?e=jwGg*0Sj`+FzigyyXDG*$(fwWNTuxrAQdO^Dp}0a)8#g%hrKTH zTZ&UoMsSI&d#sfDKm5&+JK<<0!*U{umsW?xGd_ib$}AUMsKv3-4DpfubTxz18TIvh zO3C?Q({j)r5BMz(kH_EI&OGSsK~cQD)@ngo;UxUY%YX&@&2ALt0L=jb%Q=LAuWDf7 z>VvF(AanXHqytfAp)lei6Sa+XFI60ah4v(dv9u<(X$^DMk#dhcJ$ZfWlujD$uZ)CfY2 zqYio$l1fO!iEbKP-m0TTPg;mWuYrXqeYkh(ub;^BA*1G7if!@H?2=M`IO(p9=A&j? zFuaB;@U+2i+H`nxVfN^!F#VzyhYY10}(g^Z@+wEE3< z7q>d->-43* z52xW?W`fDg7YBA3b<0XnISd!bl6mk`H)SX zVTOI9v*UVG$6*drwH!V<*!JK-cL$3>F_hml<#oVvTpDsm8jeMS3C(0o zLkkrW$Mf~1MJtE)H#EiG{}*kY9>;t9ROdYM*kG$^N&!3<``Et>1OD+c; zb_7;X)%feu`nr3{I@96^nlf>7zb{iUlNCffCCl}$6Eow`2YQKeC|sZ@ zT3h~(D`=EM*`n#@=Of{aH9%i5nWm5~P(=9xLqmO|2}kERf5y=0cdjMP9_WpdAKl`yYen|Ms_Id*69$ zhn6*HVMum;>R|b!fJIMR>O1n=RW}T*7@Bgg)LQCb;SRIzShN^qU_}Q@-LV`277euQ zt)oQ?M)h_JXgS^}hj1-ASg`tcc;{l@cYpXhtA#&ruw+Z9n~B zN}E#4Xm(G0hd@{^{K<(VM`^|UHojZ62tQ-U_ zS2VETSzgHgPy&OfKr$usp*C2RD7~Os*oA*V00`FhI8-_5vyib&jf!FmX)l@_vg3AF z!169xL*279*K-zh5=00Ni0ETPgW+!ou5X7_2xWxox1u@GNiQS+rW{ zx32~d#38VP0hTvq`mA;346uNf`kA{uN1M<8^6CHm`@`qYyc;jSdbZ+y@(BH&C*RyQ zIlVB8oWr7^{pHfSo5aFb^A*Az{$Mi*WrI+xX10%;`%knqso`+N=SS#FP!W++;bJY;9pK&!z;8L-nS1OLOcsM+<=OtxV!nE$`w3HBGKH&wP@@W zI<)j>6EPk)5QdnP z>6fS^3h7|M=->YLqjz8Y^64KwdHEc@gs)gbe6slPCCXsWp5J0S=cY4_um)lU?&`Y2 zgb_xysSpj6{HthTgs5BtE^~iZmj!p4xZ$ zs>GqgXX)g2T_BQz;aUH zA~}nEARi%LN!t$NnCCCcKcOvm18o;kpKIlU#MS2CfB5lH4J_hXh(kusB2#Di^}1g% z^j3@@w6*Ck>MO52i|$v95M+R5k9G_e*HXs{Lx%=j^w!)F*b4Q@vtUKPSw_wxV0mND zzrQJ--#Um3(Ph=OvWk1H`eZX{aCx;tZnvbDlBMwB?^t*0D}cYv*9wAZtcFZ=c!wfz~b6(DL!#tx1cR!S3JQ zWHG=3R&==NZiTf&9V~l{4vXPecy7&EK&s|huzJ>_gM}yr5$aVG0xU)xA__s0JAQER zm+$`i@FgK=bHj^z+{QNm=lQcI&j?2-bKNX+^K{K=s%DhcRj3PbTLca_E+kY5*=VEq zBE8-Hkw8A~FiRp+^SQFh`nuCP8u0k-qf;g|AYe(yFS4)vX3i)=2*)=6_vh57TZ#GH)MfIfb&^rHj|k z3RblLC13LAazVr8Fk$PnzfBdz`>gU6tjb9=@3S;c|Ya zRa0C*N?A*E`-H6fMPF;vse}Cc-BAb2Q6mmD&|;X8-2Pg~$v{gTDj#d>@^o2tY;i2F z#~{PANE9SvsfQs+T+}y_-j{75i2C2G zJoy=_!poP>Nn4QVSy?Qjgfi(}@>auc_j-C*u~{574J>LrzUnMQYYq<+qC`GwG27J9 zF;C4GuN07h8s!eMouZj9QwvCip)iM1|2#1SHMn%uOI}k4OE^=^;#lx3sy!A91Y!Xf zu_R$XnDVr>2UD0JzI5*77G)#v=mMEnb z;8~f}U_6y{jrKp&piDI|M8m)gN-dRT}=*J}HQJ zA%p2Vf2HRLjna3e9D0?tNRGQrc>gmUDqAQDucs_^tbBmsSOCkf5|(<0Wjk1oH=6wd zmO4?w=(GS9tr%*6MZ%Er4M=gZou^NBrhd5h=;iaTzVWU=}J6A*;1$|X}j6a0nIi?J~U%-sG~O$9;A2Nl>+?ePO~54 zzDmTZIMa-PNlvMqOqJzcg$sN_IAssJ*6#eBj?Z>|Iz| z8g_=+kvA1q!{xLatii9|pmtNXZ3(p;Q`@5mA&~c#*`7cmjYW3Ru_I(R5_CP7X06HJ?0~Uk~84V(TNsVe=o|>A<&W(IJ z&m1XUEK+BOcvy>-XvTC0iEhP|o0?jlzjL#yCL#5P$f!!T@Xf!%_E(0pQNHtyOD)%X z4wBHGhIxDW>cPtw&kwc_v|c^*wGI|)A^{7`?L#OkG{8dFt-Y1?AefbSmN9%wEFg{C z^Gp;WIwEG+OTYZ?QSI%|EqI(wI z-aqjF_&WEewhyb#H`!#@iE(NX;&)1m9m|pcOGs8wV!eo0LL;pt(`bZB1&`)dn|D)wo~ij zT%YrttGhS)pZ@XdA0Nrms&{i^r!c!8Le*)V{Pw#ixA#_2n9Z!N9Kaxf-pa&y*uV0i z$M3gg$!@bNHgC5xVQ@6(qLx4+>Si;nE9&eSh>~srOJ+KgVds!r;CK@o zVF;u!LmK9hkrqEBf6J6_CK++VtLhGqPp6#GbR+>-P)l`~xdiJPuuQiNqxe72Pj_Xa zpT3MNv9(Rp0p7a50Pvt*afk8CWt(sO`l2@#Hs#HQ#a`B+cgT~*rU%An%e=;XQg0LyOLLZWDK}S7dJ{MlFmQc zXzh#!gwjxn-f~=ITjCOpy3#Xpf@lz3g~2N*wZMm>oojC`mrhtQfB+VWL#p~d6GbuJ zi|YR0aVmKpvMMn}HS9yN4?cS1(_bA0%j;Od)Y;IhtOfh{W6~CZ%ZJ5LA`RRUSQN_b zsiVgf-@0g@x-$Lc=brL!y)K_1?KP z+v8o?>)qK2&6^?}^C7P{tISA(o{@CkJu?%KuDWk5TSz5QS97N*Y?2f>bm$RHklivs zA^@@Ru6oSN9AFHj^iu()2B!wYP!kwmhJA3LoPl&58VbV1H<_9plg(4%!N}Ot&c}}j z^Pa)!v5d{<&IR*>NW5?j+9olMqx2jFppiJfcztX<4AmxF{owX}+tT&kg9GLS$-0C| zH(A@LZ@*f0`V3>`Mo?gHZajB_o}2;{3TUQ7coqT6Wi@9hf<-HXAFz_X!T+-xN#KHa zNh{L7Mua1Rx^N2cLc_B--}{Du-A(7D6y(>Re*ro)fqzSuRf=faL>>D5Mla zDpo*<`e#7eKGCkNi#`62A0OR*@dTN;=TEl%h5fzF?d>P)s~ZRV@NzdojQI`@)@D~j z^yMCWJ-d}z*`uOf@H*XoZ#B1+J%nxgAOU!ggELH|Ifq?c4LxCG!lI~dvn>sz(5qw{ zQI>^x3}>Xr%I@k|CnRkE1)ktX4aVHe5Mx9adM(jNnm`l*EckjCX%VlF$u~asm%q5p zb(ZPQ&ZRLL%BJw}(n2rm@SUT7f>V_l{nPS1bv*U?W0`{DH2-+r@8zKM!nM(GtSjfS zx7dxw-<6j^dZOP#=89*z_!b>pIoI@w6whFVArWB+11$)C#twg=dh)i!n|@%=cWO&7!kfp=J(AqHAHHRSQA;d@&MzeCS$!%2d6t za;!wS<;i;$D*_dwN|A33Qp8lOyv{~Z_dvwA2wFnmq2e5|l(Gm~_}6%aw^Q$& zyJU0?e*eF|e8w@dKM;tXJZIw&dBNv<>!_}TV94zu_O!DQ@?LvDr1(Wql$Oc}#U_!Uby?+ZaEo~;+%_=fNpPC1ns_$hL0)idcp=o2L2mm` z)nlW>qfe)uh5pWk>x%>39=C%cj@6vi%*ZUlh%VZgCyv)`Hg`TCvS;&+ZhK)*rpt${?F9stL$y z58M15NlEaiF4@@dOj)`MPG_{kH$l?jna2SxdfeI@{Gtq?0u61njXEr)j1IeCX#e* zGK))FD|fEh#uia|2_vk%*n4w1%bNA$FN+ zWtrW0XLMrm{{3eI-5rBtql=F_JZ9~XvwM6XMZ?u$3fy=YG=Cd^Pk;U-mrqWgt~563 z?h03qel|oovA2|%jb}LvSmgMSU`4GMxnIlm;_sJH?xeD@(( zWOyi0`IpkR@=>f{uU{==+f3auJKP<@&Hxp`ii9$FawX4l3~fq{Sl_riHI%s*xaMn@*remAhd##+tv;cdh%jrsh7+biG_okA+p@<&CrtDRF~6OG2s!o z6443zBN2q8OI02XHw&_Iq6f~DvUh+M}S4F=u>zU8*%s)Uip6k zDr%empMnM7a_C%2E36-2;-kQw%6uYYInrdolne3i)%UR`t}$`dfw2&}x0`FLn;{x4 z+Z(q)M8><54I%qSv1?ns%>v-;=8L)2{oY$!w#~iujZnsE>dJ9a&`<;YzJ(5pZ*1Nj zLxwOvGB_`yOYR84Bn%)d87MBc9lCQsCBp{%a1Y#ATKrT>45V3vh8{IRKHN>^JR=DU zH>P4qY7G}?;Xw{eA99vbyEx+~+E{Z-C7Y`%QH{c?YH zZ%9;szz| znHakyq_-wl6FDeNT(DAUjmJ4Fr3rRj30s&QJWl30_rL0xXoxES&%pt!T{A#3d4I4DlKjEb!|fyU0B}Q6XdujjCL^ zvgF*3*|NQU2zI2XEvjhTx1xTP9D{uL*_&FxH-~l*P$nePrKt&~3V~QM) z5`+F8E3fW;m-L&Ib3&k{SQaVKh=;u46Tl)^QEQ=34*PLDK6%TyyW3RBkB@z(ZENny zljqp_W@wh{4QwrEQ~qpQM+RnY^^$FKo6AC6h!@-5+~n>4(tNIKC|Ft9Kz^&!5FBDD zRs?Y^9v0ytX?HX0q02(wJ)Ffr3(9mEZ0SKZmt(}~L(MER5y&O`Bd|dyx|&-jYxMQ!n>1C8=iBQmYFqITH8M=Zw;Tb>g|iia zg<2S_NH<2&trP_o+COp}goH&_pk-6uq@(X|z{IzJ6|C7xioj4!8Yus*-Og*Lb;!RVQU4goXpSr;5T_0DMEUI-5~CUnK57?N+EdPPmYURSU83t-AJt9 zj$srEBo1}U}@6DNpy|)mPW8rEBf4h((*$% zOw=kFAbr+;sT}1El>B8^{Q&Uc zm&&rwQQGY>tfO_gF4Oos|J>w&qm6v}Lud3i*g0R29Nnr=deTB>dWF`OF1}fT1h-z$Yz`ooh4Gt~&^Rby=Q0Q#NR!5~{ z_l9r6m(NF>o~{|VNMYYd%-tR4*#Tv8em)C6*f*k_cE&8yTVWS*0UVb z;kc2h|Nl*!f=Ds7#k;e0uYV66xr*jsBWicwm? z@}_u}3aOnhUTs&vqLW$}NVH%sPf_9NhAf1*TIke?YcUfmk=Dik!LH(@h@$2mr+~)l zNOib-X5`PJgcibFO<(yX>4aVS@B<|Xe1s>Vwh;ppeEx>`6F~`&B2suBv0s(;*j1;Z zg5~&7=#%4M5v(X0D%nHVVemwLd3zjtn9ff{-(w7U0V@A)R1MAd%(n2&P9MfTZjXy5{8 z+jPG(FT1SK8In~tk3mYLK!1){gr%4gwfSUeey|@fbi@V+MLteJOPdJ!uq;NFJ3^kz zq;dqdLYi7b16p)UX!J~8Xr>eMkk0U=C#I7gf&vXvP0n)jLGPUbXnMZR(ZxH@hLMw+ zvbfEODHcU~7lym%+t^>scn8y(O1LL+*i?3VP=D#-TNRDFEjfp_)mo2hDSDQ-ODd-q z4#5)FIdrW$lM8et%z%Y(1jn+4FDObJcE(q@KRGD_TJ*x0(kp1u>68nLl-%}~c%LzT zSF)e4?C0a{jgX{eQ%7+VKtc>i5Do|mJmmuwBcJlouf&Qtc?~MX!%<2EQmF~pYlo;x zU=h9!WiX~(g~xyirmC~3Eji$U30N?B`{w2M`60U8-sc*5+_NHJ*?h9SO}EWIEF8*t z>WtK=*SSN`_d9zY%q{GM7BXuq8|&MftEgG7pkLhPGzApZEdY}X_{O;W67iVL-~&*k zX2Km#r<47mRCjlw!16o+h^2RDBHBi;7Cicx1^^r3Qet%cxsOb@#g`JE0_qE_0v1Ul zH6j3~udU>1wNieVpz^z;wCED9R!7kH^ycjHd;8|vG4k6=ZW$Uc&-{1jTi3f_WWlIWJ;Qj$1Tf|&x9U#Lnx z(qt);w0U1b%iAa3KK0&-OXXJcU^Tj>kJk6ro~&;({wZXq{rN~3>XLH|($f-}l&0#N zH?Mg^y-Qy1T{4E=vW2#6E2}nA(xHTbe{YR0m-qD}9GHx-(Bj{{m1Bl;-w!~qM2$MIQkEnTMK)*l^pJTOWqU<@mp56fsv4S`^z|p+lYf#TSorb6vxvN@H2Z-I@FX!Y>9mOis_cM8 ztVKbNo!mtWq#cspvR)F$_aUHLW28O9nzXXdDw6EvxHRVMt#-ts{`}SX-yppKSg2r& zKBVL=4($kL-YuC5pjS{)eTvvy0u~-BRCpe1_G5sBDp(0c>Sa4IHAPmj0;~>8=VCZ2 zsRo>S=fl&Ju92+w;P&lX+urY9Y|kF773Mp$PKr;4zdOUInRcQ%xHucS844kr%#}Iv zm8G@N+S^!?M-`IJZW7#rxQ=c*b97u3urLw`L=nmj(AXVML)xnTC@ z<;x5cDW5Bw?8d4Kphc#M^6yv#%UO{(RnS6?OCUnbw$9~}#dti5NVJ$_$f@N+*w{LU zGWJ06AL%&x4N7~)&M1k_Oq#|Vc}rYN*WYdjEUcT6+$trFYIqb7P&B1j!Cryn2wDVF zf~sP+qC!PpW6<)Ce9O_#1uZ50V-+vIkf(CML9K<<@WXr6x9~LtNh)gXBP^`mUfpZos0^ zSv9#l!q_AvX%gJ98|4gl!A*XP#YSe3QwA(K)E1Z?QQ^9ylDV)bg50Gn3-L{|KtF@} z9LWy%;|6&qY08m0Y8qhSHq=@tK?-<*pkK!88?aOlTRPZ<59SxI_m29V;jr!gH_K=d z4uoTa&?BUuYwk*TW;(hDC+Hu#^rx#TP0bDFD~YO$mx(m*UK9mWzNoXu^%pL@`H3)E z_^A`HoB&BuIyYLCsdJOT&}wHLq(#o5N&EpP39}0WH_ZTv6c)3x57O7JOp`bx9@o*A zk+Tm{6YVNjqRDk&`qRqAudptvRw8NvQA}Bm-}IG_iD1fjsog%)Ik*1%xz)Y>{UwVs zz(_uNL#MCRJ08~M(v}>$ENE$8F2i}iThhn50fF+yDFMsRq=ySwz=|l#75ORWoA}Ql z_a!f$P1YFE!-lO6}e^&=M9I^^BIY}|pUZV^Nnv4$MA-z24+8B6|89>?HRMdn8XHYc!A#nIg4Un14u``}R+oqG)=2F7!ze zGs15HEblb7_!c;&I=8{G)$QBc`zuSCQ5#?>WFhL?cB;3Qdi+bDGbCCFLG$-}hY>LK zF06RB7HqaO(cv{0i7Q^Ybs1PVtA1-CNji3+pK<3Sa}lw;zEIEN32 zbdcA=cLFXXH+UHFLZBs<C)H8lFr8`|5er#1p&M%z4mIaqZe1s!ZoFemQLX^&He|)gY$vba#CvDySaCa7E%APIn+GxRj z#jJHOAZm$52}3Ee6WM{buw5pFGXxio|KvSv0VGI#K?{*6A@X79)g@EXO-TU};!%uE zM7|re2$Kbic10D|qM${t2Q6nBrVxqHcVvLMuaXB*|o?h%M zm{X&(z4w;8O~D+bhwI-w?JuP3G?T=ehaQt}Al79?c7y#PdbDC!As7f)*foQ>@xK+Y zz?4%w3$HsFE@&|th(-7i`a0rTn(-`rAYj3WFeEKCOccQiXi;h?TF(Zhk^(TYNWu=Q zT+Kt2@Z=dh%SqUBAAh7U8I`E=O8Aeb7;q_-E2@Kezm%^WR?XO#%myKzkw`cwKt-TjdHbS>wY_2dvv~?G{eXMM- z10;8-{MC2XH+JSTHrA4Pk;5H3A#QN+eHqip6?4F3ZE)2MB`xD^Nx?=U0vJ*qZXOXy zY)x1q;K}6@fhdKwsl_8+sN1R3(u|jB?Z-%TlTj9^i9|RScQPFnY7wspV<8P2&#Z*e zXrT@==!qUxy1Ke(7$z%x*jw?)JdDbWblYqRM`w zSzlIGWAAcBrYD?r8rFtt;_X!+?j!vS`2ow+jrS{ynKcZ zKWG6gLNHJ_j43;KDB|hLffofXC9(a(2HJ7gBCk1EdEJhKMRgOWFhHW9h37F7$8!9* zyx@i)guVUFg{!SGUuNO-(Lso^ zBbxVwz1}6zlF54gIm?xthiR}Ul1#RZTZklh7Fw`)7O((zM1(sbvB#4DCpZ`|V{%cM zr#zmB7|@7<5ay2VB#J;qhTPChlAzThn`Vv%jZB8vIBo2!X=tdaEF;0yX+2KTV#`R{ zV@CenH|{G;jCR6l>9MuByQ}9`H)gYze2{KYXU2<&N1d^px1x7f)bGj|9-`s1+*xxMFNo&&^QU+G>cFe`3iA}Ak$32CJC@XAu7U&MrGnh0Iu##QuHv{BQp4U)lb&IFF`aK!6jF_~gvvbn*~`qSl3o7bQ1xj#3{ zT$_s`-3&peM*_|+4Ri#JS!;H%rtF}*5^rv9Bw?uqd-~>hmAw z;&oHOQi?=^7Qu?7DeB!a`ScJh$6SjIwy8-|vfUA*5KHv$=z^ELd401G&UIE?(McoqkY6UjG7 za*ge^`bxcc7HgBiJTx7S#0F`LKvFl@)TA-A?p8YN8fz6R@{PvRWi`9@%BuKRD7T!ZNMd>D6rM#9+E!Eu z1uX4Ar4Q|%=2kiREuGk6-?mxFVGXk2th3gT<0{1yL@54S8?V+@N-<@CyNzdIp^>ox zDlPW%ODE4E>4Rv&S+p|Q>w5Dj8S<1&?J%__DkUz5f#_JBt%Bv}YJz(VETw5P#{URb z;Eo9~-+K6)OMv~^YhVE@IF{Ph-J$SU@7E8|e|o;{wax7TmLi+LpIw?gSlwFl zdg-aGtYo}l)VH1aXvfmV3Kv4Mg^n@5X#%jID93&>*(_lv3Zt6Tw%|^acPM-}&=N4` z1S*;!X7-3aDA`EP^VP0VuWv8Aa7w7S7v2}FU>5-kNeC&h#1kBe0c4=T z0a~bwglmJh0W?rvG#b(?Y0OFI-zc-7cHTPhL~_TKd zg<@|_!Ah|gR%(VQ+!HkrsW6d;+U!?{ImN=6-_P?O8CVpsV26waCHTD3M?Ufg97T$X zEuezh(dGE=Lsy{x>DRYE|NO=Cy*1k{z_Q|{@?n8}r+{$(HCx8-T|;|gYpu;$XiMfP zh30y9{0xjz8GixK5_AovEVTDMPGV8gnSkiVP^d0O20~;3EJGkD7u1+=xzAxE2vcO~z>DLfi!{QSueY01OJd7*on1k>94ZH;7V(SXo6?ZH=xDx%fgjnd|Z- zAw!M%z0Xh#%fJkWX_+#$4LG|Ot25WWzUB4P?t_oN+Z;4;lZr%{2?2s~f9`9nsw4^3 zH)!p2inKpyjg5U(W$(+m2VNm!1aYEtc!*s?u%d7gbdsh>o+4nOwX4xFWsLJhg9fY7 z7~^~pCr-sljQdD@TkEtU=1$oS(3m9dYK^rg&*4%oQxW|SI=L+CKw45$Pz5Rck^v4x zB}~b1Uv=k%r*yO=DpkIU{S&MxU}5u;zoP_}Bj{3PxWSF;SQK7@N^JluoEAB8_9|-P znneHod!K*tKi`p~Ln1qe5R{G^x?j$k!NQ??=4purH*mMc^O z50c$9?5QZ*TM<4@-#})Ym&k0$nRZ(zX~+p$@GPerYpt%>#8_CGw8=Iv`pent2*?fF z*dOS*KI(Q(Tb!1G&IiB$de)nj6}PD&N9CjrDO|*dwDDkUrfydUMaHVr8XG9FfaDJk z;XYn1J68dpg#Z9pPE?S$oKq4P<%K6Zk+?(rDdL8Aij;y5GZ+YP@HOO{nn-VylsGOj zKvFk@7CFGlx7v5V-EHk_zxu8u9b~w&1_)S=@d^|!L8%{)z49z2_KEW0G3W9oc=_j8 zQ9VoXuTa0PzLUpWMc<+pLztjN1q*Hk$5MX2*;o_k1T263k)>5O%SdoHWT-rg?Km?W z`3}+AU)_HBa<$WGnwfAHwz&K)SIx4N*8FTI01M-tyvO4r;*2EawN7^B654>rnNB+M z0v6DsHNe-kf)KIEN#&EtU_+3n!~RfPESI7Yk33@dmpZtM0a%M<3R0|U?T!XLXt`Kb zR$qU$T|a3KbB&@cl1M`je>~>xd^*aW3F|4Dv@-4-z1^a2Jl)&NQdoYw!8&jI07Rr+nvh0ppK=JG;!HeW}}@RoClIVnT+&ryM&q|9dRqK zn%Ja%QlLYTgM4Iz$gxrWBs^Wr8oLsCAsHlDxCn?2t`4w39%-Q{5}rbt(oC}^qzmVZ zd6Ly^IHFqF+wbojWk9}kXL;V_p|Y-Cm^;ABjQMRh7rV_KlU1X%^nwmYWliEnotd<$ z&Y^jzt%AWVj-j=$s^aP;B<7%1%22jKOvt$P3R-G_gY;7{0ZWraBv7HjNOGHmODXav7F z;#YtPKq=bc?D^<85xo2}upAje!`(k-#}l5CU%`}s1+0o#dH;<|XpUOJwLKMU-SG z5KYU7S7y5&Q+iUSzTm>g*;RTRG ztn#ejuY=msXOy-{(XCJyl`ixu(`H-?y1F2cdex0DCKc%N{v50vg^Jh_vK)4_IrsKI3q;ENpa>Q<(&1T- zV&&*b#8WC(KD+Ms4?kPxvJIN=BSWnP+#l#(f0QivH zMGUauQTT)}$+L<7QA%hs7M7fw9Y{Y@G?N8`7~%6$c7HoHm3~-Lc0z6Pze;aKy-h7{ zNpIB%q~hcQ(fGnjn}|o~a<4m<|8f*6$HAh8ms3B5D-|rtx1Canly6C{o zgF9b*@%iobz17w2TYv@7YtJIG2lLXqwz4o* zFw+=~MDpB|$+gJERJJ-3EeNUya1C^0iAo+!0ZUb>o)O=U!e}LdJq#}Av7oJT>J?_t}J7luvX*lxz>9<({Jfmx}F)kKf5qG=0nf0 zll3NBKc{Xi{iDx%hMALBFI4xp*@mb4V*y-~A#mkkRl}tDZ%dw^ML}e4L2g6?0poe5ho+Mi4_|j!Fo317M_j zt})P$p%H0^rAw~M8njUu5B49X*pP4M1t4otj2BK41yPDA#UV*46|j)2s93>16ocbm zN?hJi8!mrG?LY2U-j*;@N}pA*6oGK+m}}wp9~SVZO2JUcol5H5zdU)#*u^EY2S0xP z=+XM~?>4sQ_Cp8TqMwjmTYs`*d%4Xf>+A-u1;GNFGiZ(tcKeqO=(N}l4s2|@W(p<- zG(MjbusB+nE;G6}!zd&B2;>9gE9g_ePRJ)TN;M-f1gywADw9b(O+&4o@S=dlO1UK0 zgo*O^Fd^xCq$>a}yN9Mgeh;k}|=2$VL=pCdzCHB8i|tAzH+5tddDYw13pTp3nFD z4baSVpO{OWgfQcGp6mO0KPx_@F{LeP7ROTM%L10w9yFkO*w((^-!GE7qt-jicb1TY zS{(BS|Mui?{O+oC0`g~Q(v@9b;fPtey?ws9*c45Dm~BpGhjV4-imEyROS!qKqTxnk zM_cW!lACxF4J=m_VhBZw2!$A-)H$FVD1ewc&`nuK$^uyMDts!p7d_43rh`clQl~Um znp3`BR*pRJR>xZrZEq9|dFKB5@D^avM$P9YH_|rKz@lRXsKBHHDY6J)tc<|(zre)R zmJu<%6L&FVksb-21tOrpMGG*1MXin**@`NNG`tASN#)o&WXZ%;B$V~Vl7{ANY-#)1 zgKwU{+}%fd;}}-<{bjb^54WG~ZUKwqtz#5&*MhN$pgrpJchZpS+uS>Z><=S%)6MZa zuf21;TQt2&9SnaU+}nGBi9n>+(Jou$3Bcksk+Uejg7&Q7rLr8DD5H5=f$@J|y#Pv6 zTNLtBFzD&b1^9xg6(_!_4txo_vdS0foLF7$0|cEDe|}=+x|tiLhP6B2F5g=XriVtH z-k!ftQm%2{C~x;qEoAJ``ZDuuRei2$cGm8E`r6#MIOOWJ6cpEyg$h_~4drM-eO++% z@~vNyssNVH6j<;rfJFoq=pkFA@efq+FG8F!i2)6An0j)TIzGVNrsioatuoKrs>+&4 zYPl!?u@dcEpQ0-K)x+L3ZQ#Lzo7B%5R&>@Y9agDs`8maqas3k7C0u`F8}0Y{KC6mD zEUv2kGQ+c+b#3{0-mxgpqMK0@U->iw8K(c5{JHaiP!1|KSp4IACr6JSP&B_ff-857 z!??fY-3iC;ldo(-w`HaEBo;&)4w;KYs51;*4sOc^Y0R6=V7Qx|)nH$zOn^LS5Tg3Y z`d4peE+OR&$!_}?GXP%rdJ4*h22_$j3y6UdOSXc^JI%F_&yds9*>LqvWPD_}%gL~~ zc$WZZF%hx#Ux?%A-dM(P%+NU;%RLttmvw+dH%=4YJ_}lN@@#Eq(7&Q z$V1+)D3qP|D(Rm{BoeSFtW@daD?+H?h7}=s4kgnXA}lT6*KZw>c6BTyV7K?OPY?g8 zwWF1M*H-uo^dv3825ob5@RcV4>sL-B;?lJ{o^}MYSB4*X>zU#k1|FL6u?sJj=4-? z9l`;Qx&c#~T9p8%(5!HRffX^(V^&1l8c78h4B5+gZ+8mCfn`(+l@#6y7N;Y}@vEs9 zd3)2y`2YUPgxmrc9i8MFeayY|-2@x5{^2Lq?(WA!erGiEqAwI!u|tx>6*v|Xj#jEL zv$>UHXPkGIo=;V2qph5kGFD5wZp(4An{?*H?c3I(um1Hns@H#>n*`lN1Iw=s z=^fbr#)_+2iq@1_h(i*EbmsQCl;r}K(s3+;^_q*@x?;aCu+-t$jqurjcH!u)b33QLsy09JwSNq%> z+xweqY%q84Y~AToU=adkN>WmKEjShOjuhD{D?rc$*zu867OW`o6JaeD8dWr4Y0$9( zen@x0L`@W2G)j32`iN~N6U=R_tT{FJVZfQ4M>4EwWcbhDPK=A1A*b+G1uWn8Ay?%> z>o7RHkVrWb(=U3u?M}yleT8p|X{E^q%45t zVuFk574)Zp=#pM)tJVs4M!>3+VM-FUu&txnk(=zhfAsAA(aRrSJ^1m}{_;lb}8Ss-u~t>vZia0M7H<$@D#GoL5RwJrr? zCnqPX(4*j8_FK~_yEEdNo@qfyK^k%cdVC_g%#Tq%a-Kzo%%!`T{2TkecU#h0-`R5)m>DQ{!>>{ob} zk0d0aD{v%4SaSe{j77kLcd3`6S%3mG%5+E5sG7WZ8JqUav)=1@+o~KAPRxh0!XjY# z(Bv6xXzTh)ooCcZC>LhDQibRliv%GJDgZ@k%BeW?2gzB^xC)=@gZ*=`U{VoX@Gbm# z)$L`2S7q1gum4h8x@IdMuzY^I(KDBv=_3q1c>etTtLHzy+$R^|!t+kl9t14hrHZY( zgA9aDf-s;-SzF|KLp~fHLV$2j{7&r764%cb5=xaxE^)(;>g`?c4M2dGbx%@UY2SO% z;}_`+F~usf)qtGy23Y9wO74OojU%MiS*(VFn%sqsI&OwDhnS=_Wxm!_V(RaI`R?(H znaRhU;mMxWRqMv;UT}N?5;)7SS!aOVlFkGtslACL+ewqwP->PyS7>8~Xdz#g1Or`5 z{7QvowwQ_>3Ix=DM)z_IPYkeJzFAwz=vhc}nBpri9gu+#fD;LDNp6{m%BRxQWhI2{ zX3$1$7X>ZNWwtK)v$!L>k4uU<*Zg!7B&pAfN{o3kRqPq#NH1B{i-ltWD~99`SosJR zXMHO=G>bal}~0ZT~0^8CjiUjdj`+wS1T z#_nEt#Tj1WvZ-zxeVc4>74lCDcrFP;sjJqW8thW#WI$pvI8$i6=qA<&_%?Lv(9_ce9J=f(UzXLBr352PCxI!zE0EJ)T zX$v!>$kez0>)zwx{M5VdusUnDx6v2t>D)ndj58D~nc=Bm){CQK9VP2$89T5tTToE( zunJc)SZAIkcadSBjs8tpjk(f1SYCXU!v2y}LK<2$&jM3{sM*y41R8Am3R$a66$wWY zgDiDXVG2vu(!o!K1Vz;(ze12R;grCNb~VH?HzK-drS%;}Mb(#o{Y$;xEj;wpR1Fcei~%EK(WSWgVF+uhYUu1>jF_IV7?rUBmw)D2uBiF5&Y4sO z^7xvDN+AtnqYtPZvMTBr^o`9g^xgUX`8VHuBa!InBplp>&Vr;yI`#vigeVXO4`ZT* z>xUKjlvtCHVKM}3s_URNpLQ?5+(4wq&r|7cIgFT1NDtSCjyhoJWsn$wrT}pcu!wso zYs5qFvSZ-D$Y+6!UO0;>2r2JF=TwkHZ6P^MZL#7bLCLo@cGT3>`zQYME&_G#DOY-- zXS^rIH-2YzRMb@c(0pIOt#pMF10$?YvyUH$u5ey=mb>D7okp7teha>&Hs0i*ne#MS zTwOTWXsf;2PzYEIw9uQQ8d4WRXvGM%8?Y#nDJrh(-@{_F2qr8mGrhWw9` zPsV&nnc*%B4(^4KvZO4A3I_|UA1R!gprxUE_&L{ZJ{MwN(O_A8abfE2_RDXc<5r$O zfF~Dr1D2D$!=3Qfn;+h6xkV3dBL-N)>rp4e4toG{(>fYY5Zv68es6gB8DPQDWRUE^ z(7z2(82O+zF*A-Rum~I1&lPxbLN&LQBVxoCwLPYL6r<0gOu8@v7A7)C67w{rh&tC& zE0;aw{Q5(hq*3SM<8S+{lPEFgvs0b<;CRp4M*rU08goO0AaYY7XUl?IyUHzkSwsQr zak%1(y?~{vwZ`HpjdnaNHjmAZ!6P4=t^KN?u(iqzeGW}RprV6Cv@4Z@GD;dsk&>DS zqe|BPTk3@`hsnwc!wRXN)h??t5MEbhldgcR5djV~q!@&Zji49N)Le0$l;!-|h5;5W z3d!qr0W1Gam+aT8p|hL37r=7Su}CIz4lEdrzjKRYJirQIQS2GzSPWrh4JsH|LAUuf z(uu959HC^S^6dGe=MNrz^8gvj;NC{;7=m^ChaUZn{t$M(M`9(BLZ4I%a&TfZz3ldk84a1{o zjs&>yxmI0E#U#(EC#4G_Xd$=YSCsNOmrd6z{4XRHPfd>QcTIm&9vYy~B4q%b0RSk-o2ErtAx?pk0eC~qcvsa0yAI9RX1Vv!Ge z*Os(O)kbyH_flKq2>JHKE6V;6CbJ@V-b|0;2zbPwqT&x@j-$F4B@a}ZAz;x`204$X zt8jxA1r{|MI?Gv%Qs`ViU+fdG$h|h+W9Mc=Dy=p4@eNX*aS=(g&o!+4@xQa&KQ})G z&usbS%V*EtKY#FY6LF_~Kms%lV+U^l3qEEixaZ#5+gt1QLVk=aB9W12?-Y)azdPZz zk4~&jx`Ul9c~LM94oyPHmE9mD4(N}7mF{dZ!yaP}QRDzcQZJeVHmpjUADapdq{@a~|cR)Z4dt|K=!<>F8x8kmc|`gkHc8iR-nA&1)! zR6gC~PiDOBEfZ5|Z_C0$_d3dm-9s4V2Sod2B|r@$ej{Brz%V<6=cw2lVBsUNZ=y>Ukg9_79R4P@-8+T9=@Vjp+(|U zS8E`Nve@)OXOGpDu~*p>K`YEkbmX@;tfTpL`{8%}Zhv}wV$z@Q>FMkaAx{=w7;%=_ z%$7NacdX3Z?6K4&7DgoDZEGv;dPrKr;lwh8PdOy7nQ#@Z>-A8VyyOBF%z^E5@%7d(JOD8g~>`2;v?^(SMNFlCOwsd3bxUqjW6k zdVFVd8=)}3@_hdQte~KL3|J0N4t4>{mVkv>^zlh7>|IA>nT?CJ!x?vr*Xa+*6X=(s z+Y=rgUyDrwqHK4&w;NT_#YjD5$&e_owD=R`zwBf%T@)o`TAt8_WStyW!b4sLqv^sF zMuA0uLIxw?Fq(FC$jz4Xgs>fP1Z9qRnmj>8!nyvE0P4?XIB74-uM7D;(3YJVd5MjX=Tn8go1Xfg^-#B2UfyKygxkd#+0jyv@eT(WM0T;9=u;?mrSM-`1 zBcnCc<*=K|v6RR$UsWs%P;{_hx0$rI4rE+UmN%E5{rKP&rSlK_@4?E!n;31|@X0lh2uUy&I{nU_5X^*>KaXN5oG2>_+F?3&nPehOXCsufn^KVw zGL&>VA}GxbftC!S(>_u|8+|LNAI7CymD&Og&6HQcD&C`mZG8# zPg64V`2P0y51u~)EH4lC2|}PHcF0Mxf540kU(MW)5yqQElXpammsPK(^HtrH51 zDtGigzqk@i3qh1UXsPfipQ|uMqSD26sjG?@JLq{mKyTRf;_>4t?tRqv=8*82Iqd&_ zc_~IIpMSi%H{LSIjlJpi%!q61Lwj`WgM&>F8wWy?A3ivtQ!$9{4)roowAB`Lb=Zmt zh;`=D*Ja2m02a90fQ3oobxxZp11#mZ7KL#9BUouvVwLrE^|Vp&EX>I%Fb6#RLe*>? zzNJn6i(q7!@hly!#439)I&&08_EhiF#uC7CL1JGA%Ww6xL61VlK^egECj}NG3TX@V z23URuEecN;L{9arS6__9q3~wxv1una#jl)0%h$KRet5g1(et(`+u48rKK=gpFP}d+ zIQ`+(f!qk$3TM4LvF(FnyhtqO-f0N}7L*6`JKa`DmaDO?y|o$dPRQj?*=OAO?wz!I zRkg!H=&FaZ-bH+VD4Ak6wZ%0#6cPe9Qn=LDa(0UDE}om(z+`a!rEsWFrl^;+Y4IxB zt5eL+#Mb~8p~?~eK?~HWjvKAW5@#|C?_Nw%3q{N3MtUZgK0uZu!|L7{TG&BJjEi{I zTw>7`8dOH$j@*gjwZFv0vt!n?J3aO~cS z!D-n^PX=R1nj*n}xOc+fFt&BPHyRFiy8P?wouk2gy4$_cH=56r>t=UCq4joGw!72S zokEY026rwANRpj^Mm`SoifXm&Ysq5Btk$r_WmjP2D_Egsm4HSfKERPdwbV=IN)f~0 z?e_m{H2F&B=90tjrjr@R%4~cQ#V2czC?s0fT-ltJG2R;jr<2wYNK2rEaLLEwq)E+Tm3ZjI6=*78^m0G@^=I&K6$M9W&{d*c zs@MvuBWvNIsFWrtjTDKS{6)^Qa#WFpU2>ekHi3*;f|AAa_N|8n8H5oz>e^~9Mij=_ z6}*_TD6kl=#lVVUv#83MltsI=`m-s^ryGezppz%?DheuU1&M>s$}ZmmDkY2zNm&Fe z|9(CW-M)R}^=k%O1o`g)3+J5o_m5A>Zvo4j!|Wmr+RZnoZa}hq91icr01KVE;OO2) zFx;~SSYj;C4^ceR+3EAcC3>LvI0gkWVR^zleFZS5^+YG zSXA09yrvpus@<>bEN=lK%CTUTMr}mZqBi4!3u-Me-pI~#?}irxK2NtK31)*JW0?j4j` zPsLOa)8X;>GSkzG>(N0(fC?lhk}!lBud=+5#_eb0Adxl~Qc%(8ER38#xwZO}p5+2q zE^Zj&Rn*?V60PwAdX+RO7NkYad@CY z&h38jg(&;XLXh_Kj!jQBanaXj?;Tl~vRdyhZS?o|pf{Jz*qfT7kuky`iX3T&Bk=S! z)eCSdn}6rcO^2Yve^kYxW~?S=6Ky~GGD#&10l8vj(%&N<$Qi?L?I*8d}0C?LkH@T%qfA&W&Db?ROIfE zaw)u>2aBqLsD(6>q@^q}GBxp-o*YTb(I#Mdb0lCn+CL4iM_}P@?w`2BL8uDHySr4; zCu@i3{A{5p=MLxBV#iP}Spp>eoxu(fl|y1X>zd4WLx2kSv!ko4W6N6z%Vxna&m6ELRUZF)f7c!PgDT{2123u;e&&@A3^Oc-- zhwH^%g3#U7r9PoqPN!2%_LZ?rdXlVVGMkJznwr^(r~BslFtam7%3^vuW=GI0V_zR> zs$oD`TsJV{V~+#PgE;+vlbM?Ny0{lM6fX%_t||DI6m}IAA@Ia}h`zo+L8;COt3~y6 zh52t`dmFKTM{Z;wPCK{Gtg?67dR0nkY>~s@5VxI{8%4j?!jQhSeg+m93u&&!peGm^ zi#p^?%JTD9oPS2lM;>Yvq&S;Eg&-s}?2>CGm<|-`<`RiR7ZY4i!((uOe~x!2mX?=~ zUM`;qSbk8B<>)wU=fWyr*>w|vwhvCZFLSbiOW_F7*4{B0Z#RJm{p3lyyR>8w$mjUC ze?5?(rxEnGv`1G0Ej_$&GhXNlFvODdVz{t3Ng!gKInWGR>Sg;GjDVId>C%>~maW$M zDpwxGtlondF&s)QWstaY;#F0%Ok_|Ja?P3QWP%*Yy?e~=2MZ!dw4B@-Uhz7jrUC!t zlcm+Wqb>Vy!B#ol!@tM-_wO$spY9*Mp=!q19twLiEn(CXHr+d3 zY0d$b-II+i;!W6%9(&%tGs*(=@!pL05DhU>nW331x4&`voZ9S8CY>gGrUzE+Xa@FE zoGdqliZ+rM6hxwNY8TButUq*YP2UxOx1HSN@)N?ehW<4S*OvWiVK%2LC0H?o-Hs8|%lRTLMehNn6w{`S~9lx>;% z?)kGxe`aOf)ic_Er@v=1v<@M`PCA@%xrRsV{FqvdI!fy!O=G@ZA%1u1bXeEuy(?8+8TC@ZhxMg!kp=DVBgmA*1jk9jZdk zClItG^#w&XumYhKLGFkJ(bEQ!ULUKhkGU2fN`@w%Ji9j&8jED7Cam{ju!8;e_}m=x z?#Lon{@3jT-v2wCU4L5|?`=ndpCecG#n&!>K|0jxq4#2+9lT+it#9sVpissHESGLx z`>Lcsoou}&o~4?oN%j7)LyfisGNiV`XA#vF5vu|=l*V%6S%e2mS#d@HhB>7)|GTO@ zP11UTz&F-hj^-iKfSO~`!VqZDb`ddw3wRMT?p1*lu<}V5`sap9-5FNMh{SYu?HOKl zGdv3fxgvc$B+z+?d{xs(=lBv(S(Z9T0}Bo$7=|>I4sKBRc%AF%aBy3|vKeDP5zhg+ z2AWNv#C3y&x6 zTC@J_(8N7!aA7f!eqkNI>khUs1y44Ov7sIqc`-bX%BpMFmGF-Y49Hp5W`xsci?99a zYGv_kQ)zr`u70-TMiJL$AYR&vYbz^jjWBepwg8FAN|4glAkI+K!(>5d&{$HG8{neD zt~KfS1Ro=E?F=>=g%4FO#hgqceRGRRIbuCBGUu^fMLq#j(_%yGPp84^$EyI#N2l@$ zSbkoY<-!N!oTm5{gI>$yD+sn&V5Mcb~qU@;#gUM&YQ}xN zpo9s41SP#uh%aQ1NcdP#xT|DGMHZWYhKKscBO_>fcA~Gq1Wet1kkwstfgbcJ_@LAMlLla{_1 zK14GeEjnQM^dnj@ z$+9Fa4bM7#&|IldqV;PPr3ItiuCbi-eIib7fEJRRV(nQoG^N*Q6Et%c6aAe6z{7!w ziN8JRzH=%h;BJ_U=sH#9YLsNh(bD*wJ3k5XODhib!z7=SSX5#ymVxNv9q#*Lz`qEgR5 z4tD>u`$sI9af21x-3r5v_u9!-=+}n15R%SwKmN@D9o*5qEw`J)R3}JUo}NOd7dJzW zb2yVtL{dnf_>ox}g)$w=usez-;H0ai-N%l5oSG=XZC;or-I0{aa8(uyO2mwQE&pWA zs_(A|PP}QcNvQLp<Q=?NO&Zuk3 zn`#LqGb!iDWWFUCclzeW2K?FK4+u%EhpZC|5tAp5Dq&$QNAS#!50;uTQt#TUl?_6g zs4I&*Esbq_5A^yAYOhsG7^=Kpsg0}n7TatUcoifM7_eYzrp1*pfdi^xw(snNz zP6{l0GdtdNIu9dv^UaAH>c42T?;h*|lwA=)WiRnmh`KW^M3)tlFG1tq4PNM@NAj-8 zU~nkp2OLgyJSH0&BE=OSY9*0T(-g4M`WUIZYy1~Ih>F>|-#}u_As&i!eV8m$Sr0(1QOl91op;t__!Zp5~_e zw(o4dfAH$ndqtBw36j)CSZOB=QSy+xrqdit+&;j8Py<0_f%Z?=<;?+L0Xo!7u^?c< zt=i-5{_r8~e|I*KqK+QQ%ke3Hgx%FtAfmuR_b$VBq7ttJ0rV`2y0GeVXu$xBL3{!@ zI2#>2TFlbQ>M9aYk=X~a9UFu(Y`Tj`2Le;YoT#u%pX0Olm#J1L$5r$wOAaiTN z`z3MdXdiMhPJlq(JlFU0eg-IzXz7lQPF4H~c-m6#-x)8lb(To3Er&S6DmrC6iRJZp z9`?ThizY)6JWAwEpuz*yL&{v81y*(sZLFv^(*JLA1~Y)>IWl5+P#hl;TJSCxM`E)~ zo&WXwRb~!R{W-PWjYcro+?p>X@}cExA1s#&Wp6N=15Za=|C`7KQ49P1WI03a>dKjB+(o^2owX3FnIHiLu)sJ6^{^-nO^yIW6{M4R z=86akgwoX>=_WIxho^2#9}PMJDC4o&A|uW~_elemSC7$YF$%Sk)o(!yQykm)xqbkZ zR4;X{R$D@eN>7vZy{^%40sC1FXep zer;0Gf5Hh1?SoW-vs;Sxm zu=IxSBO{|z*vW4H((3j1{`JPZ&I{1gsmCiz!R_3_H9TH?YO$+ps#Hbyw!FEyRmv|V zcb}(%(D-TtUGuS_4u;qr5zqR1I6QQp4VEHe27KV$uIxPb+#@7HI zfhfYNT=n{Ue|+-IM?VpXpgukMdVJdk%OXv<{n6{oEQ9P1h+_#-@FhRc<<+{#W76BN znHKGc6E(V1s>Oi{jwQb9FVHWeL$^9ssgTtI5w2!hV1Zm&5?Iv1Rofh(n8g~K-w#%X za5=(}%g`yQR(Pla_QWe~aZF>508r=>1=Q_|r!p2`sc}2kz>62OU_5DpK<4 z;*>Tl?RyWOfs_I6^uoK;t|CTI+TrY3sRm%6FYLsD%Gz3K*Pm=w%TZ1cO~v!Zk}U3Q#662`YR{IW1^mbHeOph}mLlCG}$3Y|k=V zpYQta2FKPoDqgCDmZ!M63OLtRQ!~5sw^nL}C32NmHD24ScO-D(+!Jva=>G-EiGeu0H(XuxtQBBlZtL&Sud<7yT;3mzkk z{yGC^qEHZQ5SDN)ULq5>0r@xr(BZwXmya;jY9tv~gjQCTJgyS}MPR{9MFd!^eV-$1 z8j3znuJSTmPW&QR4xc&ZwBz1!s46nvy_o(uVTj?7z+&U&$RnX;`lhFN=hOGT{QXa$ zMPcaP<59rkPwdX**O(;|U@kA-jb3M`6`wPpV*2tk!1Cf38ClZOr-@lhaAgagv&8!CDx?3fW$G; z53KCPi9!Ix+<9$P^~N-JoKAxH$v3#z#j1OBC_|%ZNGUCwZvaxwSROjpEC3 zR%o7xqz0ZkCzy>ETnvU^R|{Q*l17X!Q+Nn8blWfJ_?N&Uvb|i5Vb2-Ya=O1a5HD?Y zEiZ3vt=3pT_~4Td=JQl>JGbVe`RgBqD*5{JrQJL}r#@C%y|cr_!4penX^ia_Jn&~T zF;9D6I6D_P>EbYaD&6k7bjgLNf6Uu$CPY?q#c=lQpP5`sV4>k=2Iw^S$!_<;Sq%_$ z(AVopb0}VfC`#%y>So#zNz4Q`Qq6jEHkC>a`)BL;+$GO%PB0(B{wwcrEr-{`uonOE zGE{hJjYG$N4i)QJRpS>ZoSi82GF*ff6+@iPa_nUxc-Lg=@9%y1{+|RE#C*PZ_Vs=g z3BhQT8{qrVxWIB7?b~lrBP0p|7b+sNs(AS^_47UIYz>d_ECS2U{^;ob4rMcam1LFf zK98fydHImCT-7P{94zT_R#LL-hk7jd7Ih-}x-Gm!7yy`Fi$EcUHcX4NTKA$PvUnzE ztsP`nzm`l-_ImPTE7zA{RBqLxW2|p$NVGbRq-CYFa&0Ubom$ODS6524vD(1G-%Gm% zHg{sfUPu-7+2N7N?Q(L+SI)A*7V%}Gb^5xlNN>*&EP`%QCrnTQD-OZa81M!x=LHrw zQ&FF2=wZEvWBkU$o&)a5gA(9kuFCsyI|l(I=Qq@nYor=scd!wv*HZ^K2gz|IgR8R0 zvLoAs4pMmeC7+^H#(W%Dw3r>2%sMkUGo`bWve;;WE2%e5`eIU+|NOSVVjq2dak1W# zQswpB^u&^m^?q)7mWP1luHPReQypd5BRV$9)eWe(@Sw!>rzb~w^yDl2%(G`CxfIRO zZD1jC?g0FQ@qPB_v zOM$tFRi~Lh$^naz)8V2)gj+mMj@zRiiX{AXyeb=p%HoIg`7{voPNeC%P$g+)2;|VR z3*v$}#R<{(z~hUVZL`#58(^`mm0E43E|%x`1+XZk;q8$rk+c2bm>vl%Z34?Vfo1v- zEc&7MPJ(MY7NCN?<#c%rSj>&a3xlpRd)Gev-Di*f`tQnFSpL{24N)WZa@QL3p|yeQ zi;R}6WNbF)?>5QXNaLf7u!x-mWuR@SzbqLuktGDa7sSST^FS_#eHxwQlLbH0e! zQ@gj3n$37&wuG9@0Al^Z#87di8SWeM?;XSvOO46t9`QX@6WL%P40VV!2UsGVXv{^3 zn&Qfhz^9}W7n7<+n6nq@gFTOr>_t;WbzFx1X=#=q(Av$(MJc!I_5<|r=2H0T37879 zmrh7I-*%uP`-e#jA3p?((9&Xrp|fud0v1x1X~iK2D>4A%IF{d>JI6&>C#SZ3%i)dS zH_o}{0@vSr|J&c8nM_aa2Z5ymw`qWVAv{ZMXKi_`GJ5+fHDEx??E%oDakQe)V}1@; zwxa}`#lnM)j61ufK*lIJ;uidrfr z5pa@Qz@qPtHTad}HKyHTMIteh)L8B3yT-S%+jl@dP+Xa>EnlBs9a#KsE86w$S_oz2 zOq|xTCzc?etj>>atrVLpJFw2XR*Koajvgop<(aa_N2Q-A?`77(glj0jS&jAf4F{fP z6Ac<_7Fgs^teLmdNhS&Z~Xay#*sSPFlfY-dQf?u)BLq4ctL^O>jaT z&myR_g5{DN3x4ISrNH6nwO|&2I3siECZ6TVlLvo&^hjX2Ji3nu7~f~AjQmrajrXw< zgj>M!1h8NOuw7UcqK|7_4PeRaa-0{&zl6gmigtGkv-HtPdq{3;_!ep<9M1R-cMv&) z*vz3Y*J$j47NbGvEW~rBO#fq**IIVYD7OO$aRgpFZr}n&Wc~6oZ3asCBC&Eg^fTP3 zS86L=%kw+eZ{?!zzPkz?VST$=-Iex3lJ4#5TBsCl-p&1e{`$3g!q;=MCme_t$}u^f zY9_mp365N3f*ov@b#NlNS5APVZp9(S4S+>x!JWy>9vmYIO|81k4G^_jEOj3hMIa;w zPGCamqP&(y^t{){sRtj8o%QZM(MHjOI)JNN_71t;cT#Lz6Y*x!* z?QFm$Tv_I5&Ye9AR^B#56&o#JyVn7KG;%oHEQAiT*5 z-J_#Qw$3n61Mx;GE)la6x(zYlN0p}RCC5DkC)4DUqiWkCe4KO3y1N}3R@cXYyp;K_sX z-o`}x*|**jX^uSiWxQafCT>LwaB<$gNKOuu+g3Yf&zsfkKXff7VKHxyIF<{5!pMe^ z5Lp_hwrc@D7tXyi9k}-HdoWsnipg0hen;W%-@A8zlY}Tv@VWh7t_On@O(#Z~W#J~bo6Q7zF?as9HNVPA;2G$dLqpZodUiM%1l%ctCL2U9mId}; zGk9p&TMEd%=;I_B#^k_DdvS|$#j zlHyWe^L2Gj()i<7iW?rt&ZayaXWx45m|)`A(OBdpA}wG!S|(wwP;mq(?YGAU2MxDY zrWDtPiv<>y&ejz1?Q?@~*pl6c7wf?Zfr+R2`QXK#>|)pN{|xs@V`o<3;khv{dIz<&C_bbG@+O#wvIg3oJpD*z-lY`bjp*@+3a> zsT@^w4zPe0z+z6}2`rMj#awpd#5qUA{>52gS-PUM{K-pH5m_pd=CX@*zwn~z;B}h* zE?KURc}s{T>#b|I7ZnSF0|T=LLiw5vKoCSR10kewDj{Pt$gI=9JZJf5Jx@zmRK_QZ)-Nn32w zHj%NGJ5#@e6~|htW@Cq+aZFnt7A=l$)|*GbqW3SFEN}m6&_0>fa{kqr9#LGl%6Gp1 zw?F*^TENQ>0?Q~F32Pt%3&UAhkaq_JmdDQ?3oNRh*Y@|n=9D6d$WB~3kO{yN_Xi78 zA<4~dLslpkYXx0MBpOv{_|tMJ<;K8@0Sj2sQew9l9+(M2LJ3ulprS})eZ7#=B>xvN z`7W7?IRT_MOo=Y`yQE0hsmZW1m`-;((5zQ0^Vhrn`0kxCG@b*=XsEec+ghm?3&~=` zpV{5KGhf_|K402S?)7z)L(S&Oe9&EnTS6alCRI#O8oB%0ecnllQ}%fYCw-m0BfXaP zlvottM3e@R6lmyn=%)M`Mit^`0TysFp-r+huRhJ4y~Ak_qeH+WMMgg0nHcts4E3+~ z-u&-3&-AosJgHP8J5xwK?QJ_nA}XrC6N`R+;NzF8p_TxI9eR}`cFZBxPGe_eEwdp9 zD>xR3#B0gh8c*569Ew8(Cp^pGRnNlr|7waMZN-0iAD$avd7?{+l{guQ^pD4%{Ph8i zl_v%*191BZRQJC9kPNs~D$J;Mx|~n`LxQvvhPb z;fdi$C(eQx#Ug6#>7H+WNW3|mhen=8(l13Dax?XCb^`4$-w$6s!x<(WzR5!w%rXgvhCK6m)4`a4=Tb#TWq_p^z zpTSDUsake{uCzksu*Wh;ZeqY9JAoa7g%99qE(~5BDK1|Y`RS1u3c`ajlV`fYI*ur1 zkc)Pi=zVkvMUX>l1F+D8<1-$9HF`G>tv{+mAhle4ciUg#XPh(BokJLnQU^nbJ&sS& z;F&fHO@Fc&jJdOsHnl`H8#6TTEFV} z6O>4BxfqftOAzMP2Z)#zSC&z+E629|0j@avsfysq)n<5H*i0mf8*X=TAy?Qa`-_`P zWu}1Tpnos6evl1Em>OP$F6V>2w0AHuB*k9o#9OQz6B3<8ccRerCFqh$yZFnD7_iVi zF$GYXI+@`!0+`@s0u*M<2@yOCIMfie=gRqXIuK|qF#%{aCR9Gl0E*DknzcAsd5OpJ z^O>RJR$4vFRf}xf+UwUy2y;e=CS!Ts!iqhe!c3ZrDeol?xh4xc1Mhz>J_{Y(F9FJz zv}eg#zP!B_Pwv8Lg0gV?+XoLtViAz2h9KiUehl3|O4n{DuPg-`O9FxPTKulgjzJwN z7S*vOpC!SqvFXgT8NPx_Y2_@*n4$Mun#qQWt8I&mn9w4)SSF8nRx~K&aO7Mh_NEU? zD9lixB8K>g_Zjj|_6!B-aph>e(Eyz9TBs*x5P=E$;hM}yFLP;ZDizBFpI5izAv(9K zE76$8mkFc-?miFeYMwoJW+a)4oV;-SY=4gzf^DBh&s><%V4_nl#D$&2l(iVUG<`K< z3HD6G;uly(=+8-!gWw}wC=-O#VM&|wRVLFNA+oKLmv_TcOl^cAzU`C>p7t0-X^Y*A~F<3FB(BK7grdY=4+fJzMBHCPwJ$u15IXm{p z&%g@o{zpI1m3?wg_Jj;&G@kJ9=99tg-~f#lfrT~;%OH3bb>#rd?#_IUO#sEAn)X+B zYImcAA%8G2TLmkI_Jq1=Z3iMt?e5(Yg>xm3CDUGWw!u*xJZcI>3O1+YUqpIRi7Yi- zbWhKnb$W9`3t%yxg~y$}lL!d*`pdJG+*Az!j3b2^| zq3#j&-aHRhpl_Q?zPi(^+6dh|z>@X_sj5x0CGF05d49yL>0>%jZfvH8*WGDU34J}T zv!W^33Cj_%9Q7EjNHLw2qilYx6;v=A0E?h9t*TjIar$t|buq`WsBX5gatd?OBnK=M zNw09IYoyur*-r*6VkjtE`Qe9$41NGh2?9bXj^|i=@=%Md6xMPr+>3`a#|p@M1h5pxd2#7g*+t{oT#a>5@5-J7GWh3qm^mX`-wqTA6?dAmCvSO zYx@>;;p{$`#?Nh1WYTjN)uVyS#uET%I?{2nCo;_C;9`+dth9V%emCfKlen^ZG80GE zl5(t>OvIm;ps4*=o!Qt5mEkRkecv(U*_a_;>F@=2H%FlLx_ag$SgMBXq zC_T)B231r0#Wou(7>^D;i;azz03d)6I(L9hM!XW2gnc~I*%xyRdfF+NPPl-45YAWO{C4{+)JYz~EY9VncZ3Pzl z!dZu{3?}Dd4!InPT&v;2n?X)5qp^cC(Wm2Qg zR-SU*3})v>YBnJvgJ-s!-1Bt|vT_Dka4ScovRl1ME2qCjD8XVQ7_<2cwjC2LWQTGq zh9>W1GGK+2kqNE%Wv4J3qb6G>ZzMViG=SyG!RC$MfAiO$R1ZCPh+x9QhhIE+z#}zO zN(eiZ__trXd{2}oL^nn)u#5^YW@&`tdKa*iN&?H;R87*z9Qm0wU{Mr;{iJjySF7YJ zHEs`y&%)UU3oN4X%cVOil~!e>(x}Zi7gPEO8I(#CN+Lg*9t%(Li;XD9S>XwI@d^Ds zy~8@67LDe{YWdmOYqf3J#i=}hm1fV*wS@xr%~EXD-@F;=ITPvgJl%71 zc8sGZxrH#Et!KoOO;nq+^!xiVL!#FhRZWr;2P|f(iLccnM!BYMLdm^({ygal?Kxzi zxZNubt}@yY919G~VbP=Zo^nicI7lZ3>PrwAo5rl)Jvl+qUoF-feWXiDTUymt0E^SE zmB>Cn4k_BA>>h@pmt4ycuqX~W{98K+U2+VpCt+{$O#n zHnuf?eQSo9SLx1W6dI2rEGz{1v#VdUyXuSdyF&M?4wZOv|8KLm?~7FZPqEDly8kr%6F zR*%KO%Bx3CLnD>O^Fj>SV!8V>ZU=g?kw042zHA`n7g*Kk=@dXKjh(&IfvzeJ@ zeQj!Vbos`+i_15z$NlB!^}C_xmF3X3HyLUKhbJcCJI(cYH}-}yjm>a-a5J9DPE3&X zmXk2+=8KIzKTVNt9X_Lej;P(Da>#^C44_(HyJ(hk1}$?>{!eqoB$4(iBrG2&IMI%*+5n6POlOGtL z#0&KcW}2CnFEW{_UL3F-;q@C*lYdZK~7f3ahL13!t;sXVw{-c5tdz1B|v6DCvUTo9jwpW14 z8x(hdML7%@v0$dpb#5A-#^bc>>O8+YZ@1xP75Ve#yWYJ%aJ_3PUZ4`Htrq<&xlC*W z5>_@n*MV*n(_in(52aA|90PK_^s#H;I$U?-y}%+i zROD)eR<7asNmWsz4}gVzM6U(_X&?hwctDy<+u!Hj9*zMTvfLnHimEyh>bmjC_n{&F zE|zloF?&z`6@!yQ)pUUcvzlj)nTP+xdl^ZoiWu1u&jMCn0?Q@bI9|oY@&}IPC{}nm z3`Hk|M}cMV&GQGF-+%nsXP=X@JOU?xg+{J27dDz^V;VS4Es#nMXT*EQ^tZ( zm&o)GWWx=FYSCs)=`OFTo%qZbLi1xv^P& zo}Vc%jcuk9>B*ixFRhWZZ)hat>Fz%$w|h4>{C&P;qksrmHJ=T8kokg0&e5A8zydeU zg0=Emq17eMSjKTZs1yUrvO8ONcFRq0y-_KoK6L&^*DV1UCP5r zyyqcL4^qm8DyOQ|+(MPT3>F(L!bqzLH}=$6zuHM~&j>EU2v{+udpPnev?IWZT{oYS z*;uima>}4ZU(OqsuAF}w>gs}|prl1;!Le9i;oaB!qtb!e87oEa4t)FQi)YX(Fi=vmIVsp(5s(yca4Zg3ib{Ev^8%J+EG@9e9s4+Kv?ls!& zmP*DUO+YM1-kAq4f{}w3y&iq%%#1OE7(9!B;@BAnEcWIEt3ofpA{}ST4m}HC;SFbt zU6*bKmgbjHQqba%R^uN%qDH=Fr7kR}O3`#Y7Y8iwKT?J(v@je3Fl4&;n32ohfUXpo61}_q$l|X>$s|Vb3GVfv0V#atd`|Lion8; zt7jsj`f>kxNIT6WwG=~>QYkcG5lL4(7v98hDxSRwqLJiTeO$%Te!vEWy=QLPb%B7O zBE(r>@3&GRw#s27FpKfTL6olu^hrhNO|E{F5*|fN}I&Q55a;R z0gI95ZaX;_o~9Qr{(g3O0zn#TK^;?_jP&>>o`yXd>0}5*Oek!y;9jnt zIYWm|+PFXk)Sv@oH~*(6r)kOzgNxodQxQpt!$@+Z#oHEikOgM};Awg|NU}2Fi*$o3 zcr{>o*4usQoMHlC5mdC0arnZku;REDKI??cs#q+nn9X|Y0I$+xfd#189ovWv6`=*Q zCMX6hib6J6eg>CQwlXSp#g%Y5zWT|>+>8e$6r8CaJy#`yFoQubZwP#r<#X`i~G>Dxr77Gapw8h~vRIlZ0k0X! z@*V<_!HN}E1QwYC6N|6F3#KP6_R|F^Zt!AHk<8za{{i|meU7Me=^$$G=x9TUi;gW^ zALr)LYN(b9W;pVm|M5=OLUlVmL9cAx4I{G-w};QtTi({i=i;^AB0ye5(U#wp9VaB zmfbiqIs%*msnyNRx~Dht&bbSs2FMQA1Fawb@`4nL*2F~@XTU;#MaHBEBP(69p_9akGC_fMUT9OFpeL#jRk`e?k4zA2)-<5pSaY$-n(yz@n4|Ghlf@qWe&OM2@Az$~&6c zaxG7gWgo|@)I>Fi;w6GXFakb?NnM!A;8MWP4E`T_G-S%!+UV3M0t=)nIu24S&H|P! z`J|4T5su0pX#Sj?v~M3;8H?>LWb!GFDH36)6`$0cb6R)$%P^*WF?|!Vj3SmR9%TfW`4G zfCW>AYa>P7I0q~jO?In)b%h~;r3EgO(AIZB>_pD~xo1|t`}}`^6&oz{Zv~bIR7FgK z2qCmp_E|f70(U`77bz6hb}G@Rz>y@c#hbvq6X#EWx%5CchV4NPX01rUbS)-UfTFfd;9E^8SLAkmIr!xTGe%DcWf`I zQB@JDUZ@_=7iax}=IpR1^?YmL+9yAT%KqWL-o8vQwJ=pnH8Opk%^>pbUM9{A5_7qR zcQ~B!`+8Yaom3LaHml1r3m841#iGpVfej(1M7A`puKP`b5k(oa*}YP-G=eP}6fs%! zXp^&AmJzO$ zuyupI#6nqEp_OY6^eSJK$se|Y#h8_-TXP^Kz>G<)Qb+_dncmtDa6!i};HO;O!`m^$ zw5!FjkZzhaw|7$;3AAvRQpMVj3-R)vcZi5FvssU?)=~3GA7t7|cCxGjBv9}Uct;M< z;puPZlJC%ZA2l&xuqAu32%K$1#xA+gQnum4ySXdo6omBr`>;U7|7TEFTAqm>`8p0d(gxfTtnP7{XO*E7u@zyJ78AOFs@{OS1% zEihU{c2eyl$}Mto1Gm{FGGLM3X}p%-ok4?=j*89<#S?J+`7aDic#Bc%_-6`5HW~#M zE<}{@L&NH>Wbl9D>$Qk6&;x zkB@EscYJ!%W0yN$3m`_H6AHd73dk^q*_gMUS^UD+-G2^wOUrlJKvW)n#>c?#7R7tgMA z3W4>L&p-P=9L-3<#lwt#!yOr`i9EDeh3ui_DT9iKl^w7MD7&!2pDf4ntP2*;vsfV7 zF_q2#?9k@^`KRCi@pCh;T)Z<*)@_E1Cx#UQ|fN5SsjmTo`SdZFgRi3(AP61vMo6+Dpc(_Nq0QXM74%>b@a0H|nSV_+%Q0ZXhb?*dxH zhCTvXJoc?uFME%jfg8HTHJh*i31NEx6Whi2S55T!qLIbqr}pkkF3-3x5r@ls|S{&1{Q4$;aR@??6ccn z-afpwv5_w+KiOak1X!Rx<)id8$XsmU0huwtk}J!zkl_j}^OFigfm)oNx7v4PFx8k0 z#Nh4)7P%I=3fW_KVuio#hdY4=#2DSu%vPY4*zPhbj_gZ%hSo(_lK^Raa`ki;7t<|# zTgjx8!;#|hr>FCUrOCo#vpf4ufp`;m5EC!tpZ#);aY6zqtv7yU&V!42p5SNFQorF>PJNNsX(DwSzDzohyCrYzyekbEUc>P!VvNs5@P`-oOY%t z;#lHV6szUw$5IbLr<|v4OR}qD4;VgXgD{kX0X3_n1v`3$FU_m0_Qe4U!ogM(RqN7M zlWPeZ>CJJ6UY;d$-3sN7XFvSY4?&A!3@NeAk%Xt+QRwMExtR@MK{H>Ddb(0kyG#% zP@e?LcQ3~1IHKjZRt@pTP!hT3q(Qt1g3dE^HcqBEJJ4RabCV!Mf=fk&XK`JNQkKIe zlPs{%p*se>Uy9mW^i?voJcB}7Ezl`hCR1fph9w7FXwTVEs`AXd>TZijtn9vfnC6bKjP994C z?1Ch9)|V$WDVjDmGD7Wo6kgvy5v)~K5^I5sk!B^K4@OuB^Nip9@}K^flmc!0%QNp> zm5k3spvNuTJ^v6WuvnZRr2Z{vu`fnJ)^kXn8DPkv)uHA_RleFzEM8X1Vx#A~LW>G# z5*5?X{?c@Bk0H2CRfKX2ik52g$FnoDTUl(95#b2YD68$UD2|1Iq$Jkpa*|vin5iw7 z<*gP~*;rDGA&5yRDVCys)~zzYBI31qiyg37J5I(&7c7J!{EEggq9_0teZdY|1Qu)F z33vwvG4xA09CG^pYiF`GSa73_Zn3elx_Dxv77W%#JDsuRT*T9`+~h(%&^7rAhw~jiOw&khpW1S_rKC;co^ODk3d|n9K%_ zg~mSyUS6i(^4a~vvj!IUaa%&m>bDGD=I zO#7mfue^5i{Ae*+MmoQn?<7__@SH-Zv@fnKEtbb~qmMeBAj(3SQUC@@Iz9nQKRBIE z;|sVW9c))hp@qHA6Xd@~dzGG zzFd&A;J!j9+Un&eQsbE)=|-yL;eXCOR=^^Y|FTDh7|UXYhN!LNHULV*pN6{w@{&xL z;atkZ(lvcT;uK;W?RK6KYp@^UR=wFQbbdd9)VQ$nt6!U~|B7GhQVb+>5n6U!i=oAc zxw|}zcL89}ZkJ;8Y)nuw$6`cIly>?n#;fl_nBtWf=w-|Oo!;;{^1Wa z{Q--GAxa-QEr=xl)kXjoikK_nTJFCLSc+-DLYT>F5rm~wxs@!o0V8)(_4H_VYepB& zKnq}DYJdY$)#RvYO-L&TWBxdw;;5Zd`lBm2_-UZVwDo3<6 zoE{(`DJZo-4J(U+i3znU=M`ke5&lQIvK}2R#U@yTj#rz7LSZ|w7XvE$g%uAmcoz#r z4q9Au(DEY>EpFB9h#>6opaM#GGc%;%S6r-s7VH_2;#__9jHJfA7itz@1=(LHqq!5; z-{G2>s%JKy4J^uVzx;P<<$vD+3wG?)k6%7$V8OF6PqbWROCxAZXc-k|AgHNBt2Rf1!wb*34Us zetH*ND4a24Lt$VKu(0%3IRQI#wz)(vzucIdTj|u}+>0*-m=|qkQmhUYITJn5zh9?4 zqOo>65cpTp3AimO$~S*7mXA&Q4~Z${2*qkI1JPA-7X-}?xuHmJqRnAa@P)3xT|`rd zN=CwVbCy#g$*|C(8xR!J6xbBhj7Rbfjwfcb)%La|>8cg9Y?w*2io|_F*T9P2*NH_! z%P*AW?wUw@Qat8V9LHj!aC>Ys$T0!H4M2DmGq7UD6ZYY;c0V8WwHA$@<0^;_b3j@h zO?>p`MF>#P6yCb^kcsm{1B+c2vM9s@9@1qwhDiG>FOS5bj&*AyA29}6=JELX9l}9MtV&(c;rBbd{mQUm# zRJ*8_Z3hry>g0(Rc3P^`E>u|rOZ&s=@f2r1QZ(XYxv(Fs>=ROW7vn@73e+jJgf*OM+6lD48U-qLY4wZfC+}T z*>y{vPx>yr&G-K2FMs(9bS@wQW?}~~zj^T?VaTG8f#n`x5kLS7=7B|*SK(7CXYqAw zv#?dT7()bNs0?1f4Xy)^bAlYjo`<`FER;1`UI0M+ew>+r@m)r>6RpnPXbHo)WaL`l zi+~nn>}dr7mYwjUMx0*u2zNKQcIAV+s~Q#4P|1=UuW-^Q9odiuos~t%wp_m2@f_l5g71~#|mAvpLhj*JnWR>n<@6;TL|USX-Q?a8#$kj zI^wMz_7VG>5?S4MdW@_bryaHs2iwB4__~xsfJM2jpfU?XPO_#^)FBg04y^~1&($_i)z#b?tiX{o zurN`Q&r#QZ6w8+|N@+qnVBxiAKm2Li;uTmP!{rCxSCb8@34Tdnp_L_Z>!c2j2{39x z8f118V65%GZy%Bwc(FX(t8TV30t0GtbUv{*w|qWP&-rqNMkq3sd=QHj^RZ2;ljKCb z(@BlC1N}o(LkkhaeztvRxQwT@esF-FR(X7J$F!Ai3h~ZriujcR3;jYE<$wiNnk2_` zKLor8D+~L7heD9_3TeG8z~&yJ8H0bJFf`IwjQcXt+FGJfFUbA+YTIH%8+m*x`7 z&3tsU(5d^-(rw4$aTd{1>?a0d+rMWL0X2%d&r?&JPkfL}PQ)6S$lm^*eLWPE-`936 zP9G#Pqj2&Sn-KYt_b~^f>qKOQ)HX_Td6POP$Bel1oNQsq>5zinub@!qdhHxlyCSEks zY>}$jz!DW$YFV+i0ZWv5A_b60bJbC;gv_%DEw=WgXmi;shsE0^Eb)bcF-R6v9O<~}_2Knl*|fmY15g~3SK))4ifc{{WZ8@bAw?mXeI#*Fn#<3} zJ~fwmLk)&kr(QgB0ZI#Cd3f>RO@W2PR$viUZh!XKfB%)HF2f;26=o1&QB%$V%luYU zeK>XcDQ$B4SexY%2uaF3m*WXmcoud2M=A!Evhp~Ag>oaH!HK}a#XHbq z6LKfR#Z=o2_L9@2@n=w0<8jhtSc~~N($qtzdi;fUATl^a zAeu=1%Q|S$>u_F?u`9fxk4w<6S zLYVJCr8T6Eml{toz%r4`)7qZnTrJ1(3fm8!G~feX3@&(=$6%3&=JO}_qQIxx+!T4S zJ<{vbNfl7;=w|OstM@tewNe(RP?B%j?O8B-OJ@3qQ^O7E87E#jk8gSJ?#+kTUCJSu z!jL4xz>MUe==AG!*({!gmo1u=mV(?2E`{E0u_)0e3=~OKTj!o@I!4IyA}0Y9r*H*% zl9ai5NkBn{D(j_&T$j@>JNbt^OHzwOHXYi@aQQLzC#6gb^Fcp=89{?lr54}kD6`7& zz>TD5C`wE4RB#bgtmzL8DjdoIvRa{3^tWPbBWq(^hHat}wRB=Wv3jD(eU4gS@lGNi zL?6R9I>MwgnyZ#l8UMmbf1#3E_<66y_EQgjH%+!AtQZB9T-J~w9e*b+3EO1Q5*Tg) zz=k@hZVO1_6V~ci>Owa+3{#zGBwgl{YQxycqKu+D9prF^-YyHRtFOFra5d3vx3@7q zwzr%7;!*oSV>9OTzHQIl0SiVl{hR#)3jSx)F~D-f!HQ)m4&8ePFFdE5-E%CK-tL%z z#W7_-VS;g^9-BLH@Z7~)w{G6Nd)L5%X@`iMMOgXFWyyWKmDN3YfWg9$4uoG3SfaMS z%2Sjayo_89H(I{~mW`P)6+?U*^+*g}CDrttZO5Z*q1PC0oz~3&iyCwM&4Lyq9`I&h zd794sp>Ui$MO#^^fV`IocBQ%F*qA=d8)krBmOrj*cu{j#=E!mPCVlkS*>;X+`uiJ| zYHV(GWhqgaYaX9ZkVu|}u-&b)iIFRY7&Dd=Yq*wDELRP-0{efqSshRQ9N{{EwD~(C zk(D}DcsOc=M4KTs+Ykv;%B`ZwxlcsXrEiExgf9Usa-8J5VG3!QE&C@TEoosg0}!1- zy2_j5;rB-Xx#OqK-?;ha&AS95B`w}G z5uh+6vczRKSXxE4Ka}CVK+eLlbG6nLesq`#v}}!VEyBD`ksC8e`@cYwS752vO~_>q z|8E3K(dMF|ke1|u3OFGzNe=ajFDa-9ER2|c^vscDRD`Nb9OpDjxD#(PSgIq+fNtv1 z6JzYi8f56^5ZCmjX+Lc{hw&h=FnH$mh}TDIL4P_%E?ZenB${(DEoT;&6RXE-+ndo8 zKQuwE0Q9FTt7FwF6pDN-*WF(K*>HsW41^>0y2&hthkBF=IpT89Ju3-9#*fp|PS84Y zNL9TbKw);Qno*+m6is_sZI^}ha6hg_!$n5ZV!DLH*yWqYnKAlE-fdTt&SkBP6vz2* z7MGe!1==oH0^`9F)?5=@6pFwLHyd#<+IvR{adWdFkTmsWd^uq8u;R(QxLEPf@(ixU ztDC(r1XNt5A7FyeG;qWpt_|#?9O=0xYZG1~wF+|+Arw4I&E&l>6 zx>ixm=g8pCMA-x@&oM0mEL6wVHZk>{kPp}5f<^miemNF8E;>o9o(nvLAwN$=Fvdpk zx-;WM6Z}c57=*J+K&C%{8-x+csC@a(oy86>`O0^UCzcA$H8fEz7Rjb%>I~C;ZZ-`j zD{QTG9vN8N(=djS$L8S1yDntq^LN1F1|m%}737|s8X|3mww@fHJIleii-6_fy?Ylg zKEy<>q|xGn1-K}`g(*3kwJ_9;ZU`*a<)`k68vj;2Fs;bz>j+VC$ho5V0~Q-h*DGal zUGgy_QxfI(lHk$8#LTlyNtPI%h;&x~3u8f!d?#B)?G7-|ru=oyz)}S*XzbGS!?AFw z{@N=H#t)-~2U>iR!xTeCkw}aNXbPM><5*R3V%X;^HLB!H%?3|3n~8P_)i=&|_%>6% z)OcTiAnG$wpg=ns4gAhDf{LXO1F06@R|@)ZS^SZ@b0Y@>yu-j=^^D#!VS=DZaN2B9 za%TMsuiDw?SSL*ttEYJ|M2181#Zt&LZYAIwWDUT!7E_zRB_6NFCMV~Yz{TqFs_N)f zKD%as!M(H_b#fQhB+SUu@hWReh7)Xgd2w-ZkA};S=_z{iJ{eRDE}%vITMsQep2grY zrE2_HKAogmhk5L)uC1IpbM6xL^QHISzhvdJ+Wf4Qd0-*iHL#2*!7UPoXt?Rp-7HNx zYobI&)i#pt2F-q`EGnBcg`Q)CXbs-UIe~>5TRq!MQYUZ8|KPFdhP=vxUa9*iJKXn_ zX32o%XMK?nfYXRljs>^GFIyrIJ+nM>MWZL#*x_rZZr{FrAGo}V93p)?jV3J@b-^;^ zi^9(;WrB1}gP~$@9LJHFs5T1p+X6|(Q^6J#*;F7Mfp0t1%7CeSZG7TCd;Jmq&9UO} zaH~}NBlW8QnPXplHw) zGvhv@Qc&XmDe9eos6o|sy-dY7v$VW;ke6NWV21mCm;fWVFu16Qa46$z*P1}ZU}ARX zn{NRNo<-=efsyyo({M4fyqCcR=7GiFf@zy(&)enXfl~AI%IcYyF5SF)@%`5X zmVdK~2((B$!4h0sBa#6YHzcTbCU@PkUVl_(iHHjp;(@)w`7&c6b3o;}2C9~}MxPso z0B!m=1PHKVd*?=5G=aebQq203u#({nw0fJ4XQ?sH)*hSvtJqnxy36hv9p*~n)z_|m zd7m}PCEQ9y2bbW%ZM4v|E}Sf18^*v3zIoj@g;T zGkiEB=zy2AiNxup6Uc|l)({bwQ^5)8i{IA!ho62buESIKKi?Bta4im4BuO~K(iuq$s3&vC zvgsiKRGGkHO%@VYUQnS$$wSn>?lD+&P19DRt^QHj7^Zt7*Fs&a6LZf#-@DIY*Gfcz zR-CU?BS{7Du|n0iupMKPz_M4VoeQRd$-Z=Ix-Z$_D&0b|P^dOyx%l>W&}Ubx zhTK1tj=u>ak`Pe?qmQ6QvswL80Lv9#P!D8?yE6m*Cl>|)i{EM_448zHe7leD zgu@*g#?_#Hs>xZY-e@TY57e{SFjTKu0 zF#T%s+OT@{QdY9ty(Aedg|iZ37o6=vd@GnEM`m;nLVR5|I-D&6$FXf>HE3Y4fDFuu z!!KXE&+ftPW7hx+o&~TZU9fx~hAA&9=txG(M8%vh3|OEFPNTUL4#wI`?N+eRX~*mJ zV5YiML)4%65LoDow5zRwWNxug-HvtR+Yg|=>F)Ocd9zW{_&cV6wnG90(}+oFTWyn! zh=XprLXJojP_bJgeL5O(lD?hf#ruh0;Dmi^KNBJ)spw*cGDW;pprj#M2}*mVg2YWT zv3lqFhuHP&*M$NZhygCkr&W7fpMrS$UTp}tIgX=Q9~gqz4OojZ5+wR@vzo!hpacy%wUt6_FLNC}0t4HZ)yS#|`5p6{csj$&j_! zOd7D*E-%!;{$Lfsu*pEk-^019DOO7(!9XFgxYSB@7VDFVO3K%0W@7<5A;Vl73I}rJ z5rIdOqp|T;H#Xer!%6V!5B~h8BH=ytjL0NMOvRZhE*Un{C%_T`s(k{BRDX=yCxJ0J z6e=T}sMxtWYehjco$hN%{zth>*v~o*4MdBxaTt8;-g4dx#ii>XVW7p#fMa-ZjliUj z=g%8ZK+30YeEs<+zkT;zz;eLAvI7neHTqz`3@*lN>DdWH03-?p%@HRi{cRY)c$8?0VpXTi9mDx(E)x!)BktQ5LuCVy+ zT(Qs@8?CG^#d3w?vr929q%8z|w0$EjAIzwHDHUoZ8TyIMd1z>=XOPR?Xi=$-ASt4f zc4W>x>sOPGzW<=+Lu^B9&S|qop@d!wd#*kGQ~eaw6iR?hy8sck>1kmM`>@P7QkD$T z*sZEo>&--kA|i1I2z+!wDB*#b0~aqYnZ5MVIef}xA?5FX`OE9CfAaae1{P2J$8#tK z7gsvU^DQn|p4$Nn8Lmp8U;k<^b*k20ezQJ3TyGZIrCPPIguL7ZF8BT$WCekR9YpAI zw+$?xDP>U*k~WWANOqKdzk$V!XSaw?xE4Ilam`M@3}dS8-+k3xHEes*J&ucZ;_)17w=q-uGA9YwcTx!P14fC-_lUs=f zPAM|(OHQv3B~tv|v}K={w8#V&;6k5o{nx+V zYYJ#X3k;n~V5NZ|D?%6*t~|eg>6UGTh|)q1pxW6?vtvwXQ6Lg1wpa_oUj0~uLrZf7 zBFJ$_=vYU$hEs8Pbc#RG8b-B53I|vyL~t!>=VUySScin$10U;%{?2jh^j9{rF95^I zc+{MbdYf^z{**LZuMfYX;;XEq!1E`#8h>9q2=gO(^DF~4$AP&mv}ld!P^&w3`r5Ul zGdW)`zF>L+3T!679q85yYn9Qp#nbWj?`va=bJ0LB1KBgu?+-l~jg?9hA$G;qPof2O zgaKmTLfE=}4p_dYl?sNH4m*Osd_bwm;*>4U_1V_EtwO7w@b^xwpX}$Pl@i^(>kF&_ zXbVm`3yF({ONvY!ngPXe#_ClHVty(UD|ha!lCa*mapR-M=KbbF*DhSRbOR8*A*8tW z|6c#Cz_Pm<0w=p1i~Yt~1#qzPL>LkU_%|X{%EPeLl&Y^a8)(RLUa7ja{PqQCP=Mv( zf8baC8>l=6%O3%Yb__kRC}Ws4*8+${gA%h+At=kW_{nZjnFw@*5upXYVyTRQ1vUch zJKLTYiK&kbVH3uelb0Q`)l1~MrVLAtW+NH*3Axy^4zYTJQK z=gwRmS|xKsU!Q;CL8A~0hQMiLeJ_5Zm(+WZ(J`J$J4--N(%+oTa+b>7Eo|y^U6t+k zv@J2af1+-WZq1Y0vRZ*t@9!t}q}7N?(w$u3F^sxmi{OVB&2&jyM%n6*>jc8-)we&q zaruS}oa`8=`Rc2$E@N-L^UfC^y!-iI9%BW^^4kvt7GorM;b*t)TA<&lojtHHmgJNb zZbgsw{%ZgJK&sI$Gy;+SfxY7>4=tX5>Ef-o-r}AN>B?)LeTLMNZ4BAQ*-@vbBHyy* z667Ew02L1`cz-3g^x(2ZO;q8$pi-&2nGD8+TXLfg0T;ByJ{oqckk;;cg2UQ-`v5kefnR#WOwbW(VNwxA!%#9E;a!nX)J(qP8V2FvnAxIR~c0h%AoBn#+tiKYH^P>FuBY zDzF@*7RzUM0AJvaX5YcUntVOAX=-HU5DRjHS ziui68&;bbM9*}Q|vkBz^+j!yd#~MYYTYAY_v%r1SpTepT51tL!bT43?+C}|&>0g+v) zAWTsd4S*FE=W$ciNTMJoMPNv)KGgk9R5Hchi7~Uvsx`ZE=c5~!-+c28_ZP+|voAjQ z`rRjy0#;uC1?w-@L0{Kl$zL&+gwBRy?pAWyVYm1T?Ie7Qsh8bnP+e!nLD_|u`NE3;YumoSFOaCED6As6+G*(f3 zW5@$sMka+G9p2eFG_4unZ$L_v%_>X5dieYvGyQNfcx;34OBh^(% zP51Ut1O@72r|*2bT47@!v37qk_UQM;G($x~AsvxqsJ~|+(2b|Y)5$)85u=482aYzj z$*-xWov-yckzUR0z}|E0Sj7%BrJM4IQL3D?v&HWTuPz4<)`yB&fznriMiNl z6ykdo{iDSXZ`^$6344RLFAOT5y#6Fuz{;B!>9g!|E%yE-TyQKRwR|@S;aL=ZWVkyh z;_K^7u7d0iF$znyZL}$-!p%$f{^K5`Z8u$UCeKFF7m1R_Ek!hQp(`N4s%efOBJgiu z(I{Y}T&V*VUzDpddZXa|WF|Ot zXh{6WAR6sC@-wx(pHWl{Tv-F-HT@TD3en|2BEadvCq>9`CNb^WJ+OeDLnOzXd8_#RZ9e8CKrA zdC>uj;NrQF-JkYhe6SEC+u?c}R-V^92ET%Vm}!`r6!>8X!<&Ty1K5>iX3v-I0Tr5Z z+%v;C$O>p&u;?Y9z4EG7-c83}sF@#QZGi|y)6M#`NG*xx51(FYxug}Cd6p=zHR5|E zz+!#{u;}U?CiQcg=H#`RTt3e&y>1bU^B}v?^(hJ&SX4OIfS~aa#!Rt0pBGs21ff$e zUcLGvar4;W8NiY>unan2vA&tWGL)J-b@GT zy(lCy)h^r1`7LQHGBT|;xaYpMw0iLTxl4crtWZ4PR$_bqJ76IS%+giC^n}1N%b6I? zunH{J%%|Xmip_&sc^=h%=uR?R3kC)%?^{6CeVpb)~nHYiFk!8Sm$--q7Vbay@&dO!89rvQO1u7 zbgK8!b5O$KZd*GC*c?8Kpkj?*;igxlZDPKyf^uR6;dok-Jkbm8G!Ede0VkRf)j{kS zVl{)*__!~cV>d5WojZ8>E!SM<^2K`}fEHZK=bsaaWPg|OyLaEY3{)=N+oOIUCR}(X zmZe&7t{v$SP@r=4ItEfOO+L+j;)bGW7~%^IOk#LEH7QU_-DZK(7sf@Aj|CR0X)B31N@U$sAOiPs6y;K_hLq=VECP#dlM!AVu#mZE7z99Qc3RP_ zpEq@Ji@qEQhy>p0*U-tS(NU=t1s08_yT zISUB}02Ej}>Fyr;d@_PC)z+1RTmzjsy;h}?55b6y1Urj~cF@;&6lcGTZ5?!agRLY& ziP_0Q(Z3fmlbwtqKTU^D4)#Psgc1bbLqm4m5o8=eDu#6eX@VdXn4QQ$b)qht5sATw?*M7VmFL}FjHU1)EnSdG-JboFzK63>M&lVAGqz5j!T z!7bT4X4K0HMcCJ0zx%agUwrY#J8!&sz>HP&_O3dgb)$!K*J_xcKmrvpw|MeI+Y2a3!{V*vKoqj$4M6qo(Pk1Xh)^z*43~ zMqcZSL%Zkos%6X8WzAAGYi4A@w+qu-VnHV%>h6Ot zu+lHKwy;8hHLqC|AQd|4_er{&x$MhOpRQfIM#^%9X}24O9CPv_y;wt2{W!i8rx5c! z`^wBlDHg~i>4&8XYmW-Sbo0?6aVZtkLJN|XuF?;U71ewc%-jH{qe4D19R`0;SYXij z)s+!v*N}wIV$VM2;k!#ReHHsXW)B#zJ0moP%z6b#Vg5lD_C7V=;ppZ-y zaEP1HYXU+?og&ycS60Jh_peBpWfe9o8md7s_gd%Ln*hM4a$ zZir)U@$}Kr4plm=$rJB=$4loi$ z+@|BK;UU2C3P1oB(jqn_f)+)%WItd9p&w{z7PT00L02vBfyI_oQNC5;?16M>ysGU_uaycij@fdz~C@Hg@#qkshv0v4A?98Yqe|FhBwlOWo`Y5^>syiOPL!tE+J&OvApsYQBxQt(e~?Y zrO0r4Fxqpv8Kv7E3UD8v20<+-GRs{lVQB#onvI9qhrHeUK*a+KG+nVdDdH)%#d{LQ z;$QqoSw`DwHZt}xpyQ2=j3hmsR}{bi76te-P?we)5ThkO9)+kIycFgk4_H%P+!v)D zpa26Za@$8o29{fZ1>@GRa&LEAVAmX4Q z7hw|&AqSrx7Wqzakzc`#&;oW*OiWY1O$2OoT4*6peHScg93GM*Qvi;sgc2tS>V!O*Ks>o!!H@V^ImWms zVa(-%LC_-2IeO*31X&wDus~^U9t0>9SyXNRp6r&)JCk(7Gs4S}>i^rjO?_rvzp#He zk)Z6lV{Gf=Gt}mpxe|StffO2>G{I{TD0`!!@K zpn*c=J1$oCuuvvr11G$a8!h-(Sy#C@3PLVeR2fcU6)oGF6h{F{4r~cUNg)WnQ3H!* zS{_y`Z0Yi4k_yg?ll}Q>E~W;tZ=e^Y5ZY2tdP#hT8gCz|QY3 zxA?E1)SQLj#G(LnrI;;4Ld3$~c3*D29wBJjh%ndI1;s^*r+5_c=#*gxy6YVi%0Is5 z8f}A>W0>&Z)-Q}qXiIQu3d%Y$u;H19l7N|m3po#~nwkyq)%uP}T@>DCBVA)mvQ~tX zH`_6Pdy~QEo$arme2rsy^y(3=;2%3DZbwa|ASi#n5t%o1`E@RYVfF zTr#==ifpWsC*{+8iH3~_7Urv@KtYb<{0hgBB{>wYNlb*0VC7&1i>b%5W{yRkWE3(d z9B^$#;}@=h7Bv(4=%0}dso(TSq_F^7@~HrJHPzJ zt>;D7aTn^5mBAbgr1fg5(5NO_ea+2%m(QFcNbdXBE=07|3S#Unnz+QmO>`e9%83W+ zNvxWLxxfOt1QrdEg-b&*$+rBS|4J}Gi!|37iW1`n13rWbJDpNpEHfuwEpJ zv;r6^I4|N0z34ueySc{f?TIIgi%+;joIZB^m;sk#dtmU{J=zgmngX)mFD(E}u3Txu zKnKbcms~{13Wbtm%*l3p2Elh`2B=Wqnw{OCQx#bl!>>%(KSf-YKapL02O|E?Lofqa zG$zzgufQLZeoC`$q>nq9T|GISwLXTvG;LrD-;xB)3R4*Uvq z`izKC7&TnG2P;C04OdXum1E(sqjw2dK#N&YW~*~dM{+*}TYTZlk6#=;ug~dfHK^zMc$+6HJnHU^DF`I}?GhK;uW@YHw>|#O zI03RxEd@8gC3QXqi-~}1Jf7r-jHc8k`I%FwxwP=V_YDnEJ)m@e(@_s2YUHm(gQR_g zIT=O>uD6p*L1VDUt38UN47T%6FGR-i{EIl2djg7^2t9lXTwL66M<)(Be68&9(3?28<~L>-e@%DilBsU?byP?!Wbh>Vni%%PHgQw`QZl~ z%QFZ?QuQ&%f&q#blLnS&7XgdKECLIiVJf>uxkRBQUm2#hiwC$keIWgRV=kB|i&2++ zSs{h^5G=^2xJ7;)LM~W*3ROJEf-53miJSB;14$Q&VF8Pwr2;}Q#V@KJE8sCWVvvs% z=*Y1+q-iI~rCIFvWg-{I-zphOLKJX)y@Nls^u+dxKkmL{Op%IQrFCXK2UsfkdSrM# zmx#kvh_c(c?SFRK>O?#QDsp%TB%(?_5&Q&}6Vi+~8SsCA#Tfq5TgPeoVxn0R;0XDW zXpdQ(vKG&215=0$5v<@;6vA*WX(&d~4pEj0QPLRe>hT9MwWS>$K=>4^;rHw{zl65KFt(o;meYi0*5GA@WiXU2wZh=HyX{M-~{lRj2Y4^_4r=S1f zU4W?G@0#HSpzu3iax(1#mTJ|w&z>Pdobim`kS7r=z)3n?uM>?h;K?V%Uq1EFU{Z@< zKxGyQh4JxmutJGtYw-#56q}30D@uW$eTVplfkhlAufcwi>)BCO;yVbw8lOA1+TUXW;} zx6QR$Ax2SI4ycI2B79*{tS{PSQ(cx0IrVsVRK7Xfh)l1hmE4yy;cT2CW8YdVH2Ai* zT&vWJ`#+C_;sAqP>sspSl?@F9STyIr@Xe-(w@j=D=TTa7MY0& zNpA|@;_Y%2^}kCMqC{d3(bQNA<2Tgvu69bgJP2Z<|=ag5h~xV`W0p zF@p&h!HP1SGShsRMfj-cOV0`@v$L}}l<|4MLK?&ww6is_`RLWF+kgeMP`CK*YpD-D za#uR561Pg&YMC=&!o%p-FN6_+MZ_qz_8f}TDn(Vva`T&5s^2Z-a!qC2W(5`rJNoIV z!BiGj{Ddz6#!G_s@<}eJPo#e1-L6g_7!}S!*(7fo*YXzDTK&dFiwhQ^(ZsvGed3Il zRP@ey(LY*YoL5sDQORDr5}3kaE77cP&pat4&A>` zd8CWoo4#<%T4sGO)Mz9+)g$D~_G-EEceb5RV6pBX)m~^!>oehY(dODI@AG1)nWy?# zx>_s}rw~-y5+=ChHf7>2tLC9hT_(+Ib`2yd`(Hf$405gOM|Ara46GcZ#jxVSEAX~8y8931xL5EPXL|28BdFyCnQ1QsgezTbl?UA78#yJi)3=gU=gFb z$GEE)Jw$wo(|9(&67%=;WK)_{%f`!c93h05sl9>MWZnablo*^_XCA&C6I_H9jB6-u z{AN>PHp92Xa>>!*QP%ZNQgSZLl;YX8nQH%=Mka#JQiCZWU$%VX=fQ+;Eg0`D@2$_} zhvz~=KH~ON;&rJLhHZP#T53I;EmRZPM2@frJQ7`q3ypBt_y0g*CGYg@G0D0hx5O_TO5I4;JjuC%cL3nVAd@)x-K z)^O$*|01mLg_99fEZj8%F-^s^Z1~tbgve)@vF2yN!-R~Oe4!gdih&tyqK{oUhCkvcBH+Mjjctxw%y0khN4<-};+3 zbBQQ9FI$*%p~)M(CR{3XhtMPRD@1L{CL`rNzO@Yh5Uzif#cMUukN(>Kt$vS>%;6z9f zRH)r-$w-7A0hP@s#JDJI2p)9ip!PqLnG+!$8g;<(ir5w7Ni3-X3=@h1iyOSapq^fs zp1#P6M6u`!Q1NjBPH4d~E^Z<+PdXWd6`LJu@$25_6m2D4(UuXPg~1UMl>#j3BEc>7 zd^fmvrXcl*G|PyTn4v_D#VKyP0)^fhqf=+P0+~i5&(abU&zK@9?Pc#vb-Oz;Gm{Im z^`U!@ja^fX6cK5ZhWuV=if$r_G?|Z$r8e^q3k|PyXRCv>L! z1!@NkrFa-E56hUL*s7SKc-SUc9g92NNe?ZU2N$Dl+hR0vWY3)DM5*Q}?xk<`L*^YR zr)Cm`>Uv@*(&+BK@%(LduW(~|rIAVW4)_@zB4`QwdxDv{^^lKj*M>KInOd66I~Vl# z_)FE0K+4}LCw30BP{K9O;%qc0snNd(?SXWXqnKcfE;hgO5g|(}n!FM_Llz9JjVysR zG}m6%7o*t;Trj2L3V|eyd9|}IP?`Gi`@dpOF;(`RN{fdL!1Fl)?q{Dp)=_i|+imiq z5I!CA&Xsq~1B7hTZkGTDHV<%|-`ZT-)bXd;ly|Sq{L;D`%IPSKF7+ zQ=ZZ~Z9DQD?534ptN^2W*-e#PEYOu&zqq*~6WHqbkx9^^IaDjV`LM1QIToWk()$%y zjEdl4MNh}IO%J^ri3E|8C)EvdcGdV~R);ZOZb0BuOzhX6BJ=!*7PbPD5#>3`EUe*Aa3@5>D)R=WUC#oe%EJq}tqYbWe(Gmh z`rtyxE9qJ>nIFBlkbe6%+aDP@49`Sf?ys=XvJfsn*{EhJGi^~6K`w>MYEI|w2V0`? zHD9$}VWf7Xm@brkml&Ep9ZQI+6m=Wi&3G2m?X|_zCz)A->o2gVsh-M@P`BYIy8Q8b zT>dkCL*2~2H>#OZZf`Hsh%8TycZ|(yIaR=%i&M0D-y+=;xI~skS2q}U|MuG-kG}P4 z{qHn}^l89#2Ul~n)#SMj%)7@^2msy@qZ{)a1`|GA<1uK#To8Fa#T{qc#^^xV zK>QDzkHE?+t<;1nM}(rny~rkq#3rHxfE1wxvzot1P*O{#r~>80JPVXc8#5EH4H`j( zNqH;L+UXIG`Ndte%G2c_O;wmghL*Kssz0@GfMrc2mHXM>nSzl7RsfWKpH~1E@M7k{ z3^V->VMTcnMGX`%rFAMh!IWU|iW(sq3PNZYy{zo5PR)h0ndjf^uMAJU&15(V5Fot& zy7dZRYYWenUSFa!?Qb5)^$#!1rb}6Wc_AI{%?0Q?H`BJdBr<`+i4$+zRNx(!_WU2|V#c;OX#y@MOQ66L2qV%s~5n}9`&?q1yII`t~K59>4m92aCj1+x-|A{iWu-tY3~T*i~XzkIn9_vs%tAzICtYq9Vmr|h6rQlEQ(pqeR#i(&?XvagFM(^UvPKA*F~L0G0UY= zf&OcSbS_z(RlSSjVnI6Wi6C^SkNKl)Wd$toe>(ZzZy{brvxh~b680HRr1L|-u(kd0 z@n@>+J6skT(ZbDB>T*0`6qCr@Q3<#&hi=F*3PT|YW z9hpo2Zm~L<=0fdwlk8a2`(_^@etA~kfvzNSEt41K_ovg5jmectDDq~do{S8pN;9p# zuFIWl{|`dB3=B^7hwrzxcXsyRWDYsJ8l^Q~cckFIenlv3?j#B0pBrS_)pWzOoSgEA zP9dBHDGfP$BTpJy z2<$Xu`dg;eqS;hr|3@nR;6nVS%~y|ZFCJk$HfNv<{>|=k_17T2k+D4 zD~;4wkgR67Z)|!&vF8FskThayZ2^-xJ1Z{*>&Rg*@QIIUvS`G^!q;1{VT6?@+&lp-X1e}Hy)$#}xAjP90aOkK zzuqz957^NW1iN#4heHUu+@_>)a4V{{5THzd`U9mo7Ow)95s(1kh;zpaSopLlXjMQ& zio7;lEZ(#k5GpI2LoQHsR>_hi+Iy^Gx5M3junJZL5*I2Kq=FDDx9Cg!7oWid)8#*7 z3w@m}M8+Jk<4mUjvK=6YNk;>VxFmk9QWQ@3RB{2#q`%=m?{BM6F`C^#?ECQTWMwc_ zMY<`Q8SG|Cy%{#+hu5!v7${859oA>EkS`Ne7~VN6DzfCg&94eS@$2R5MB0SBwUJcT zFQ;Y#VzP6z3TZ_5v~?FG8KHsRxU#kw+!SK>w(dq`V|hx&E(!A-EQ~F0)QIjXnkqm- zT41ye1%`_`@!nZ{=31B`||*_zPy$ zAQB&LqC&3)w2%k!Q%kBmJv4A7C`mk=l-U__EMjK$pV?AD6Q^UI)b;4jm$$%&8CbE| zc;Xg)nPah%T@y&*MaG>o)5ZQXpMQ2xgI~c@K#y^4_mP*MuTC`!6 ztVNzhFLJbez)D%cj#1}Um2DsH`4Pm?;zJiJN|_aQ2sIiFF)oVGqvtSE4w(?8BHI}U zE5A15XnEh+<7}Jo;M=S3#wwx~Q}EJ{++#d~m0vr3zTckXGW+sl69>a1g%XkHNC^qe z0BfDK+VWEH(xuM6^RN&~jmBVVFiS2oSlbv0ah(H{gj#d#7Vi>-TO=nKD>aHM3!`iq zU!SW|U4~WBq66`F&6+$rMYFg~%?;QJ3fOtS&8=);)YrXiR%H!BXA^x+l}f$nC)-+d zg9^8b&rjhz@hl@N9rODfH}`gTIC2zAa4*Pkz3t>tGEM$`4+q09n+z*}#RdZ0>+YGs zWrv*V!2>4?=MxjMWP;5tt zAR`?NS#J!`Ei4s`KS^x1VL|Dst zuH(f?fTAvMN#>BKMNV0xoFxRFDw9DsDXgf*sWuv@GH5oOlaQE;+#}puO z8vX_tF%*}^XN!=z3RR9FHbHlZQRPl)JME%Vzxge?^61CB)T9UR{jE)@=)n=#ewU0Z z&u}y`@se{$&}rHdSd6c0SDX)ni#B>VQv!Uq1|6Sz_Wk$v$LL0P51i2x7bxtG;YRvB zD#t0A?vQv7&gB3SG-VRX>xW6`P9jz2P2Gve1m7ZN3)MMyA_S;#%P|BlM6@)lNWu0{ z+-o$J)s?n3HEPN+Ke3w=ZxGgU#3*p3=WJqx9#+iEU4RyQhKExAvn84a7SGh_J!R6g zMwGSyw}&Ud3kq;r3GEW^-M9s?QJu?9&cC`a+&@|`ge!GqEMr3)M1dhGnZCXrqc1db zqfxluwnk$JiK3geq|c{mL_b$NF%xt}5Q2Chis6E>)H-_3B6~B+0v4H5m{y<9=e2`NNZ%*u4_l) zdTUp(HI$ipTg|XPUQ++{WRk9N819w^c!mG`s=}Jz!yRlJ%TWUgl|rN?5HZ3+5&>^^<}&YHaoqrQbP}$=tWaoH&53#E*dE2?Puy1+8Ld>h(d>@xb#j1SfhBYoCDRDxa4x2RoT%)MXof-zK?vSAYmN9B2map2#2Dz@Z~+5A9Pf;g$<*}VQ?p9 z>Ln)g%9$#Y8Ybc_cXTf8P_m|wegec4Tsut!LQMfIs@PjLB&@hz#eP<k$c>bUiE zpoZBw<+gVH&O{m0q9_;J(iR5T$hEbrTk82d#dBzN@whLLNKG!(ZcY}TFMNXLSR>qy z%E8*er9gM1gbGP+J+fR}_<00w--X-XOl7iR%Fx3LY0b)Isuen_zPLtpb8!*$I){dW z?XZd0*iOc;0z}%V}F6Trk2}d7Ue9Xz)u^vHd(=IAF?%NGM}$j=9b?)U#{cF z&_4;1VJUH@BB1}gRpt27yMUtH#`uJ_eUx#N$b2zX%2LlHVGIoZj9eH&3t`JGfN~Gi z95q=pM__T$;$Yx&8EE0*F;;*ICa^pe-tGZAz3><;3U!4Ppu*ZalJO&mxVK-yNXv7n z`^#F9!APq1GvregBEzY}J$k_s8r6woR?g)!axQoih-(RB%bGk`J_-3VuUVqJ=0q?} z8k&c->cP1l)1?$&B`&c9;}=LuOIUF=&t2-Q({V8~W)Y<~6IHTG|9Q)!)OA)Vi$5_K z;MjM;(r##J*Fy~~F#yRWWF#MN$+cfyU0%Alx{|I}d~01-TVj{41n$q+JmQTv%jqBA zjMS_7h57wrcrBGqGhC2Pg%VVcCPyooa2vBe-Ek#qsIIuJ2J|#=3tcvuOSaq>WTafP zpO;9?+lHi80bPED!>6bnwEPoRR><9HK1XiAO$c=I9js|lO`62n`(N{=1_HAJ@l0c- zW1ldDBy<)Zvoybw$x`9V4KXmVHdKH9^UuhzQ+N6DbIzbUU+y+d{L-_q%i|a<4}Src z&*WJCf{9nPOZgU|DGya1SnjzQxEu>dkV?2#yiMYB`N;&Lax7u!7MYZfXue#ArDLkJ zum|>Jrl@cFmADRM_T_4lCQ~W05`a^H18o7j#&$Ek4@59I;dBwLCa+=@m)dCo9tSHz zhq)8oSP0_ieI09whyY`_;P^7M$-8jvjIN;BZ;xHc!!^wiSha?y{Y2IM=$oz9o_AbC zU}mElMo+^Z9Y6#N*@D5w%KqKC#?Qr#=c7oEN6Oi~!W=>Fa8=ugEB$QDtCZUOE%Bi) z{d2{sR2|t?3|Z>leqF-Jy7bJ4GE^=>HZ231(dxe$DG`Wkk*`lZ-)J!5rM*GEC@xi! zVZ>YT?98iJ+ICXskkuH1i3}=Nb*7=y6=_KDmgH2=mg;Zc-k4K($xgN#Z@wV;y~mZ_ z+5YlYljag(S9>vwoPu}l0gHzfOjr?I1QuM-0F8ObQTXlcgPw%E>z5;@M&icUqY9_Vmm&})GmyAxi+pvO=ld7<}bPg zJUVZuU99jl1~8q&N`MN|N1VLL4h1ri+QLdQ6>1Hhjs{}`AIA3P-mZ-A?&qs>`8Ut6 zb<8hUvwPk7LM2t^B-Si0;Y+33EhQke4^=xpa~z5Dg`g8Ml#(ehwWlD0N%Ak8+C*R}1W!iZr#SfexvCTl> zu_x`1nU~1+{P=P@AG&^JeF~NBZKjYXwr<^Ox~DdhYAM(Q_U`Eop-;5 zy*v3eZruuviUjDgb>5Jw5(qZ+@>Wep#kp#WNB=R$&U{(9WshJFCZ-R){#CD~Y;8f2{ zOwL)|dmU|LTj0wb3ScVR46rq`jcg%TWl1pm0BapDcfVPRB+G%m^RA5U3BUsKPC}b< zNyDVfa20-Yk|CBBwrY)JLN1UNvFd`8H&I7RvxRb|tOoQ45i{ZuYpFV_qAa3@phmZgE+2b$W@0Re`liQDe zxGjRE&?K_d_yHA`VtOPKSHKd=AxD&g>T^ zSR;uGm9`w5^mqkf21BjO!a-F6e34|Lqh1QrxHMiI742rHC8X@noDAy7*le^nz#{pa{bS(-AoQNj8a&cATsc=gvurp@E z+L(nKjuL|8uvJI_E!V_Iz^P#Pl54h2N@QzLq)BI|3oOq9SllKMCajnj_aa-sA>-cs ziZ?%O=4x{}j+;-<$cbI-nBS4Sp;x16w%JD$X{I7<-KIE00rW0L=f@A0I#!D>5MzmT z#$oFxR_^XkJ)df@QGPwsADQI;pUu>#YIzd;eEO4QcPNagvq#gyEFZJz7Uc?da}%JN zwEXWcUquS%Dq>-(;j%pQ3QfqL1|w+*ENpzay>;(se`6%U&-LtkXaUjWI)fgq%{aOI z8(KnWk$&)g(?=gctjj1aoUF~xikKg%EgXzZj~!g3$HY}5klp(Bo2kLptNfo?UOn~A z?$*-$^Crq7v=qPO93fBIq3jF!gaZba!WOOv&tlU7K*m6#fkp={9645%A+>(|7;-q_ z3ST=DP$_+4|0B<5C5c=j$@_!4~F$_w`hFe*yMjxpp4 zQwl9=DVZ6Xnw`H&AV00~z8I3{)QjR&7>o0tzSG$I#c|`84oSn_@ZLN}PqRelh_{nq4m#_aT z>oTeN02a^!mRi}fTdkyL=R1n49pCIOP8ACxm`cG=y(?UZc$p4PxW}>336lWXS10?J zjF~J(7NEXRWEo$W9lyJO;b49V;q9#_PlzG5zJ2-p%~bbk{S^GksioOuCeuV{qEiUt za@#2a4^pHAb(?Q-x&RR37IQK3B9EPigtM6Qji2)pvT31bhpH_+t0i?n=?O|gi3zpZ za5WX@XAsYiR5HZ0GQi@OJRQ(=#c{w6NWpL|oI|STi`b3b#IzMJ>25TOD{aynQfrZI zO9J!^I*4mZfIO^low+;p{|Ac)7oNcc6BQr06NJpb3g6EMsKGo0@g=DoYi0}HUFa}r zTdJ*@4|PXs)0~eb8l!dV&8krmi!v~=xi61b&=(v)Q!EG==kI!{oaF)j)PZ6 z)W;Cv*uM4ji~ZU3p){B2uiUI%qubWR#rC3Ec?Sa539G!ytS!V*q%7JJYJAG)4;28L z=~+v#H8G1;>aN0CyvyRm_}D@Xa-So%RZNc-XsiLy%t&$Az`~J3$HKJopp)38l|QE} z;>?^1EHD-zVsaJ{uzX@*5lt#D5lf_2$iNwz@k(t*UX4nig=+}%+{+DC{$H?o^I;BP z%=E}ARWk2|iha*{81ZmsNf%%du9*y^sAB?%Z2dso06I8DlWPlGx2K;^()CP^WD>1~ z`qIm#jk%Hf+d|kM+ZtwlqiEJpcw0L(TpJMeZH9eZ`(5M6!uixp|M>5cYSe>3b zao!hVdt7>9dTeQFYz%UA$D>yq2d|zz!>b^_q_*C)D&&X6Lug}6OI-92um}U63lm?e zz`G48;T}hmnvVjJ+xrn!<=z8u16NYqCKa(4L<(imcxKr9G|@~TuF`=XU7(p z980ezS;c|CUQcX>5t>riB~9Z8gcYtQj*iQukj|DHO7V?N@&A{rv;T?uPWQgsoW0XM zXLlow*&n=Po3+$w%hMXk(Nu#H2%w1>iN!!?gczO$gFy%ZgBFJw7*+y=8w}vEgc)Es zgMbe>Aue&$QeeA()cty2-|x5B^C=AT02XH6b3MMV_eEEEnN9&9vD0r?$cIeJ_Nola z@xvUGpVB`GR+Kb5=;H`1((^lZXjwe4e00HTGgDoYwe%(`%OLF3z(kwut0^vMM=|W;%MG>k2$^o6 zcfnFReAwfXTlrb}WYXI8s@9(}W*aETxuEBWQ6Iw998w_8^&B*&vaf6F|Ea8V1(P#0 zn;vWC)&f9HHYw)+7%Vn0#D_qn(D#oyS1M2zZtE;8RF@j*XLWr-nM6+_mEa3}fyCnS zlxW|bb(6hyB<1aF!#@H{6ooiGW=Oywj=thc+ef#<0zSm*0R=_be$7yyr9IsfP$Tyq9ADP${YrbJ4S1TjA9i`KI{ z!Aq^TZ5A;L+@@vCFaj6v02Xzbc}o-3@Q!rGKY)b-9&8Pd92ypR50~#_=Qmj4;}9@1 z)<%5y?sFWIdjPR|woXW6j2RMTVVcZ82Og3>a6-9PuACy(s~UwR(A(WmTvL3frKY;5 zpnYX#W}vZb<>$Ox4@>H~W1y_4@yFVhg3I+-qKnY3D-h^y&9|ijxZf&xbG+tOEz|;O zhL~841&>B!C%3OlY^(L|Qwda_q{H|s`~10keZKpQA6a~?Y+Hj(qG0~kv~bfiGU%%2 zoV-PT^<(C^ZLitUxQEShCEwOb{U3@brjTmO)=xRS8q!#RY^djGhCQEE~-@ zeX*tyF9IPv;0R&ea)kTY#gvRTGdPC)0S|&(SFnmg^k{KLJrDzH!BZe1VXcKnJ zL?el9KVT^>@0=N1nqCSV*;N!GPqe$c8<=p~gN7KW21C2y-MAV)>9l8ACRC?Q&YOdZ zQ*FWg#HUB5ssF>_Hj-s?XKh6VRmHYWW3luzZ+BIh1CdBYg^lS*_AQtBD9nfvQ9k+7 zzVO$w(^?UMfu+9?^>$24hshP%k~0aO;?w!3fQD95T6SXUlgyl|%WPQTPB$q1ZM@=v z#RG=EnqBek;XV&Uj!ANoA0_1Miq_j()(y} zJ2TSM7=#wloM<8<)~4z{uIKn|LfTgkk=c5PXg2kJs7)u)&c1T)T=q9GOMwDf|DXQh zli%Ac_Mt5SFIIO^jGRNs_em|UN?~E=6tjIBgUzDT7y3h+9EW$knY41-JO+c>t(g9U zp=fM>Yv~BMNJi!+JU6sw!3f7fS2-fJ2d&iuXP?A}@3J-kgCr{AjZJ{Eh1pq3y7ahZ zc*Z+Mi*2K(53>OAmf4u|+TX_;u$nPVsb5H1v>w|4SS&61#0@g#hg9(X?s5Ja$!v~HM-8WkdlWFkzIKF^z!|_mC2vm?-fv?XB{fV^);y7;to{lt?8yGeF3USu89u!|CbxE_o2M&4MCMYj(V@u0Z=> zd&fn*MLM*Yw~B(+izU_7N?}ge6Ha*>)keS~Dvkpd$uYuYqK>DFCj z`yN7Zf$?xrPKX8~;JN+-xzQ!``){K?$s{z}&wz-Xk3$r1WQA>ur~nnO6_s~Pb=6Jz zrb-vpxl1LZ>j`A7hmxBlFiG~FCL&6n6DqPTB_=dl~E*!Q60jjv7m^ue+_IN!kf0Z3HVx z{t4)MNHYhjr_uL2dqpfa>%@twN&I= z8;MuQnGpgiN??^hxaV{J!>%0jIzc)fSU%2|KMq>#0SjuVXxN;NGmfaFNAp}(33N_T zWm|BR+D~Qc6HQv1o?TXU4lJhDvY-~Amz5#(P}}C)=1@A0@H2#kVw6-Gk#6K`Ma8|`{JZyg;Q6~1^wZHfzVbD~DlAQ8g%H-{-W|vYKan+` z%DyGA9}Z2%Dks)3O_v zm}tsE+emtTem#`ZO!{_$#g>>9q8JtRRdc~=1Okk(4jsYCU{*kiT^L$cIX2c|^BhqC zN3aqHC^`WhP1Xw>OitUdy%;jqb)1imQ;zHA^&JlxrN6AQ^_n&UWuMGLze=w(Pk(+k zSo!lGzd3GTaTbkQ^6YNVSIlCTWkUoP#BDwxtk81-8x4G^PsMN>Rt6jh?SK9ghm{MkV{)Mu}yW zwcVHaf7AHlhOeWups}hrSWsE@B-mcI);_ti(!SF7>{)wz+x_+d6fy2Rs%~Y|!JUTO z#)7_rf|Z#SA33T>ls7&npprefc|GqD+YlbH-Qzk9p>waE-a=Ird3D|%%;n#vPIp^m zZea4iGav492*O|GTtmq6PIo6&A8IMfP0es_GiX|yC<<3nn<;-r`4F!)-iP(d(P%m{ z7Y~S0KxrPl%#AG_Sp^ed#Qp;$TmqK#rVen?n%yXv!Ns_SMX`-F0F-TWdm+MD;w+90 zb_@|wj}K$g(G8Ub){}%oi=nJTNV=kZE@D!X%rH#%fN13y!+@fq@WF;x*?zGM=-B}l zbXgFn)W%j@^G^~j$aFAmMAyv>%L9`WP$uH`h@6O2MOQcb`4}t53HC^J-2T#3?r-@lFtE&{Fn|o zes)FUoq{0oEW-Dc=zDaGC7ntp6Why-b|o|;W~JCDTu1Oi=#o^78xcz>Dm{$3i6d;h zTwUGc3<)KC2r?`-eDOhW!N4REQNEBGS&nT*fA_=#0?TZOMBSlq(i-x05NQ|GHK~W# z#PZTc8i=P+>XzKTtw}wN_&o82-sRsOHJJdc3R7~tSk91+)XpA1K~s*k?TPh}q=5W> zn^V)44h=S6^>nqx=M^vR0r87mi1&IM9K2%~I=tU4o_K~uXwf$bVIm1x9_30y+C(t~ z@FI@UYf7*yvUu9~T+URBsOGS-sH91|Ill_&#uka;bvD&?P!+Aj1KlqR!lSM%zP~cl zHM7&z^?I`I-SE5K!kO3Dm$FBV70{0g+I;^ms4mIV`kI1)f%d*THF;)QFbY`PuTHhH zR=lL56*&#uT@DE}EO25Lry-3a`r#YiduCajK^2*lGg;Xe(P%VLbXIT$RoK__xJY=} zgDsgOW=K*5i6j;!RS-%=6N{`?wo<<)kW*2mHI~@S&&^HaVm6~k00|JWv*%v?;~(IJ zJ(w?KTL23=Gv(VoOOg2a7%YLI>E{#xH;mgd*5i{p>1bJ79b`>P{?z%aE3&g79bU_; z#=@9VAWtj7iUStd&w$0Fh3W+or-=9$nk|A087JdMu|oln_O~;CD6n8%EPW=FupODI z)p};cj%P!3;khT_;n#EMhQOGxB7hiJwAE5zf&EHXpJ;5y`j*@-}W9wUO$ zh=w2~P*TZ6D2i-GlF?Ksfr*&ImXO>iiw*}wYD*lES-}+n68*;kD=%IcTv9JKH&L!# zPo&cFOE#72(CC)T$QXxZu**MHhhfqDV^d*yIl1E~V{-g{?73x5NKNMRqMBk^L^eOI zt<|yv{7Fa~sqNve>_1}+MP~G1T{a-8P5#f{ppSLci2PuMn%q@|5q3nx1U6vBB*LgH zcyRfZ7U!bCxZLD7#J%1;h*M$H1dYbbjBDhMpy?Q$S8U;I?K=Y}Yo-rx0(XUefu*Ul zGWQAX66*Rzrs7QeQiWNO_Y^6kv~8d=pI@}ThVFlGw7b3Q`Rkq7$g|;@cduXfc1#lK zb#+tCCCCj1TPp87DuL5qQq*{-k0Y>Tqk_#l;M4#7-O;a4KD>JuisO$zf)Uu`IVWGe zI(OyLrP~*7eDOzgwr}3Pq2?iu$Nqe9e)`g@g0{X%>*s3YhBRhF;~OEug}JB#l^$YD za$_6^F)7uQx%mu&e~CHVPI6ufOtR?PnUolhq`A8RDPly9>^Zi?wJTgTum~=OkPoPl zl3VGjGw)8~q{19oGyf>@bQ8g>kHT;ij<~-cU9})Yr4ADLwz5XCB6I1d=H%A{7RE4z zm9LDEV{JK=k2H2_!xfMWzJ|3<#f`H0C=zto6O0-kz})n6%?ZKV$D|lebPOx{_uM+0 z>w7#mWG2Kci-Uy!bXO;H(|!j*)%iXbCMuU3v5~zlWc%9VSlmLwX?tRI5b!0AV$gr> z@mg`Q^zTN?TF^v%fEW)&xfaXVly+t&)z+IRyV+a zadTZ~`yEK=h+!91*W}e_ojjMHUw!Atfr9%)#V1+Cl5^t>P5ewM`T#%J`8J~d`3DJJV;u2np`)7ClptQVR{SM#%Gz4Evp-VQAS* zu4*Z>1ou6#SZrfx0cgNu9OQPBiZz7>qs`(u^_LY$PNtANpsc0(n%3zu2!rbfEVlp) zSkbO-#h~^=5yM$u#$gbjCVrEuE#&|Ta)uQRTT@pQSWr%HP;_f{#S;uPX11F6AD8eQ zuow-_CWKrV9J6Zzi)%#;RTAIwTow1yv}Ghm%S;Kwb6JL_v1$+@o55I{ywD<8A#7P= zHDb4fA$(1RG{zek%I>$l6}AJi1FM17AnT+XpoO+{$oUMvZhAia3@%jnfKRT0T|ji6 z8z0r=BG5tT`a{;$Yitr>pGRZ$UGVYhFJT?!4X)u8hhq@BNIm~>G_9_?8}~u90Hbq2u5l7 zA-s{mg0CXLaq*I5lDP{a0>TI#c%dHY^ix%7BTlI;t7~qqYbha`wR0Ljq=^TjGq~o~ zyTLseS}>hLivkNKbkt{oLkAOXR9ISm&q#ru_4W=AlN=A2^e`0} zk|ByujdxkLtj!+KpK|iKLic!dGtF?_ocw$ssm~S&7FX?L+otstm3Ql!0pT z@R?y^5Z?t0NRZr2D3Txz-8Qo)dZDaIzbztA)tPoXgCUSbnn>X)i`QEEW@frD!-zw! zAjnjSYmzEaW22VCUSnWYjAR+Q6WMur5IGn{{nx+R|HXcyzn|q@@cS=WKW}}Y?CU3$ z1syws89Ddr(uJdE|L`B6<-fi^dhEm%if+Mzf$sLnUJa#=?2It9{Cwu!`&evec!!JE z!|%i5Q145CT_gdlM=U_WY^1AM1Iq8W-ndm%65(#@q@@0X z6l#_oS7qHs4J{4wz`~{V03G*jn9wn9i1DrEn?&fh?efaoITA#5!E#(!VWvx)IkPC> zpb<({zN!IcgpHqYw9nD%66r)H8dCVp`S3y8x29aMEMj_mQ`p;7a&hr|UP4{m=g) zg+BTNwf$4Ksj`q%AN}$SzwRZ7EjRx1rAh|h{@AV0Z_b zJ*%2ozPs~&%Y^y&_uuaCzj?EROB{)bi60vomJ!kF?|oK(@5eAWOW`*$+ZO`0Eii^H z8XC(S0S&-KXmN2OH+aaTBJMITvrG&yuY(KlEg8kktN%h z>JIi(?&gitc+vJFNTN%owajH4c_|gY^X17toT)U`2Y;t3v{d4`BeG zkH2WDlX#_*e6bAd0hZj7#$qF&1DJ}cyo(P`AS;KqGyP=Ce(pYe_|vQFH~;d98iAh@ zrCeeUqVd-KW*Wint91n7JlS#=@@AFx)f~!bYhDH;U)oYsPnTDR6f0i^Q#_C>2j>z|to}v^ z5s)ZSIpMJK9kX#kXfZ;bwI3N)b-;pEJA3vEO_Ry6C}F+;TA($toQn!=Nlhhztv09; zOYRHzkV{8U!JW#hOPm+4NZ?YSLVq)e%5#O6AAwxmy{s2WZApLNx}EFUdE zZ=?Y>af2;TgWghERW{Jw_NW8`lQCqnt~||yjGKM!=~JpHpPd!Q`cFrHfPR~!UeI6v zj#dkOqi=8i^{+R-Kv;pAKTQ9NjcvZ@UL+)4xTTSv*J8Tv?AX4kH%nk5jNN$atbiZh z`Q=S`KQO$*y*gWA8wcCp$3eY)v$f9&1aL?)L$SbqU}0&5t`4)#1SNJpN}hEKGUS$MXrFn_)4p;Tjge z?#N!f>|SI%BsO7Ng`CWR&P?uPE`Y zv`mY&IFW;8ksKXX1+3T#GfH13vs}AYPYJ_yLmmOr<`L-@ILZbZJ_CQU7jwv9Lww!#ZwoB~7N$k5Bkp1o48Ax-H-Iuu z$p5mRic3>R8T}ysu%o7FqH%JV>OWl1I`OUe@}6BWVHC@SY?SodZ?dR{nr08Vs*+H! z0^^UywY#-S>*(msNPN2%HB+m`ah!o8j-=#lmK|vW_7)phzJd^LVG^O29`(qX>z-FK(1LPgcADMUj`wimF1kjSoI62ShL%ia&swhjCJI)Ns%3x)eMR=E}@~6mkp}o z0%Em>5*hVQ5^TazCJlG!z@JF~7H2oUcKG=rhb*gKpIXQ2?j`qBvD*HSPOS6HCe!$G zskkLJ=TyyrP8OJ72*fFlg}wL^ zgj3=XzPe!Hju?lnAgg#CJ6`?P4(RcM76&Z2q4mTI9d4!weF4k%2FHiMA$Dam+U$o@ z&>Zpy5gSq3eAHWn%$)EEs#Slmv=F^el(>2OCWb{Z4ip3~1t3JX zB+x>f;}M-KaZ?%uSRiW^lebjf*WzhVY)Dl!<Q{KJ-EL<{;VS%jGT(BiO!!fX-Z_+9={euK9AcP;~!6j;Q(<41c zoKjrcYYTBHtT=X6hp%?wAqA-DhQb%9CL$-KB5F-W7m>~$ZLmFX_ToXik-kt>SzCEIEo9&# zRWeJ5{J3MlLU)Z^(&VM78ZN@=GuT8Si6!9>6^14PQU5{8DKtR;h!1Tl-lHH5a;%|3 zHkAo+qQsx^-7sjGm`@P|(?eDX>; ziKrwtJ52&i<_kQO$jHf%!C)wKRc8waBp6{bEEfVMZ~ytr+c(n-K#F5n;cFf+3DHlBZnr%f;6Sgd|KiosQj8LE2tGvEV>n56tFSICh~0(eieoV zu=qMEi_sv0=Xl|`B^)}(4#zPp|M0*9!5FOA(8GiLN-_>Y$$qSd`5<^xyfi4HGVyF+ zd1*UaY0&(-6`D(nas(EFQIzCF$)lxno;nGU3sEjd1qNdCf)F(3~|aE55av zF4S_wdsA_ciM@W72zBUxZ2l3jOp(rGSm3V1P~KFmzdDaUA`V{!GO1)dp3L}Zz|F^_ z%L&+uJa2d*E?*GuC2-g95}n4rHW-t9PZP2%1OST$DH7Y69u$uyQ(9LCSjM%$$G5RK z9A0`o5*r(wj!z6h3xT0Hw4k|)g}9TjZ0YhB5CTLnE=wbCxXRf#D3Cn6$x=2yn%Ql$J7o?BMKJ&q!=~1h5DtE?!7_K5&PVA<3lJu_~P7 zlzt^Ie6ZkNn|NoXaY-ycCBAq^17#-dm6Md2rL9)n|1FDA5sMweiVd}A6}5FzqFpmd zCn-@9zl@42=kE|g_~b&7u8S4JiCqwQVp^EOxK;94bg24V_()k7ubpC52Rs)b;>IL` z1jm!$FhZ1pMH!PV59f%bc}h@G@3SRHiIHZZigAF2U#oO#nVy?7K(#;yXf%#=ihz#1 zn7DQ^I=?sPr#<9POhmU+$)P;Kq*t_4vr?2Vx`z=|4rTFdyCLt~&5wL+OziW_QAQ zd=%f}Vur|-oS)+Wj4d83m0n2IlG9!jvW^*`gFkpGszTw9I%`gBNp=7#asA7q_+Wyixo-7 zx`xic;#^U!-`1RITOmi5AKo0!I{|U`%U5 z(rU9}BO!u>{_#{-CynDt^j)@i5Zr1AmzMp=yZ{$Bi{Z9`g!25>t&j#vwU2QGt(khM08?c z@zCPb=+qi8b0f1t#KH=prsk+J07{fZr09p|Ljt*W4X{w`x9v(g9;g1l5BovFiVE}& z@%Hpp_SLpXk{|9zKS!Cf6-#AJxZy1KEw!(9;TRYUi)1ZTFfXadwN1{s6}AxmR%>gO zN}@`OY$2}l=;H<#!wT2juN*zup9K zZ44rN(w>=Ql-~^If?w=~NHS&H+agIK+_@oqOPX>^O7sr!68~p-LQf=U;SL^!Cl5$4 z5lr{(?iz0u_mUL*2yP|`ANEsK32 zTJgXFE`$)kLiDSFM8&r{`g%ZU>*J5k#xJpq=7vc$ZIWGJar;ARC!${qSQO3(Dm=~_PTOB*qe0dd5)ZgGs68xe4XWW5 zt>Fz3yP?{jX`Y*g0nb3D#d3-5QUxtyvMjF8O++%pzp#rk{)9ppoYuj5T2m7*GST=y zclXp};|W$)p+T*Ackpu_BV-N+{3JJNv)dn8I6jCknxW3kc>rd+YT8QD%T-rb`ArUmVtl~1p-{*c$kq>vH(ZR z6eXSd_yKdV^%by``INC?x#W3rBD#a(TuGJmSDhcDvwSr2flO(Z>AUC`$)$8#()y@& zjRC`!2D&)qSha?t+J64XDOs1rK`NySbMw*76dBJ!VWuZ!D?|B6B~w)8{G~4y-|hth zoBnMKOYBDaJ*r5U8Y@t~@GAE@-)%cYsyLl18iRQlWZxnV_(zVnnAU*;awK~waGM#;c zjPwmGeX`z=3WoEWX|b1J!X!c-SU!e}@B&s0Ev|cIZf)DG&&jmV2Il2ro~pa4ImK!A z1WtV>GN#>3^Hdt z%}Y^4$S@2o!VI?@uvn;zfx%g{KyG{@E;n1iq`Y_y<<#>8zE*OPw5%&MsW^(`$~l^g z(#~xZ?I`6rU_rtgSC)7A$2-)DAuwUM%BQAeTAcq~A?yj7bwkr5l$SV^w|P4F%wS=c z7m0Owa@N+CDfr`OqTBv;5Ve}74iia|B*#~=-S!?7mrOID>7*ioIN|R^8sI<~5*;KF z0)d0PlJFb{=@x9xlQTh)72STI-w zSk$X<1~&vOT(EGsn-Ax4u3_((XO;ss#`WOfAz0ELV1SC1QOt;NODB~I9RL;qMUN#Y z-!dK;q}H#HrHA=unS+jg?MT)3Th4`VoY&<`O$RD)@peNxlg9ecZCfVAw_5_Dy+f{L z0S}5&01IdVAOehc$r@-&jTE%tv}#3UBM@znSog(>eC!L+t$5u`2o|p*$8lp5H`>*81+x0O8u%oVt z@@+a5ni_4W<@wZ1S#`0a1g3(&EBAQz%g;5fZPBbkURS=rz@uWADA+PBPBO%sm!`9A zm49i*1GM;EpkUo>{8`y77fzv!j(-t(ZK;v}kz*#@(1i?^x{WSa6qrZ@?og1@em8Z+ zNwOW8WTW-+0a&0rUj7lVz=_N)0*yG9wKdW-CC?iu3uyC~`Z=moQjVn_2TRpb#^{0C z08Azb8;k}=Q*tvy=?|OSmTr>D;RmwU+{UD&74Gs@O}v@$L)(6I40SW``3y5vdzlj<5|KEw`TS{A_Y$%Rp|PPk}sip%r^ zps(cI{#rtIj#beH0lEmpESC#v*eIV@m7i-1Yige$qD}j2W7#j6J_ybubAW|66plze zfK5&6(f1|z_rrhMUfdia)`jXr32lBay=mCty7f?$HsFK!fmMnTYRUno)r11(RS6U% znce9boR90p9-=Hf5g5XSaVB~)em@dT)P7S3397|Wk|ZJOSFqqErg}gKgC_7}u60xnwXW0g6SaAYO4=kP+ zl4Z%KR#Jp+)j+p8*-j>8{AbsU$P*pt_|335v5M$xq$r~hT8kM!DXhgJJb~}R2wt(G zUCl&eUUVen|3J}+v&Pr$M9_@>1_?nXR0y#-vPs0YMb*_M$T3wH6<1f^f)=4Xs9ezt z(KfLZktfvm+2_-9DR3f(l1xWwE)s(%QeEGs%eYA8J~^?uP6|y*JONnJLviE>c*k0@ zNf>DH3U{WhdzALSK!+gxB9#VQ@;q!u7~1Fc3J*aS8jHur;FQ2U7~Fuh3H7Qu5?)~B zhcVL$<=eX|?cthSR{~OGU1$I*y&~O~^NH=c*x^|462OIVM{H!=@23MkZOKx=)Fe#_ zfk0(-FRAY(MdMd-dP5#o_%OW4xatTih87iUb!qNNBVT&WrkbE-B{FpXP)l!7y4z7I zB62x@`R})N3(DlV{iP$ZNm&#g%(9k zq+!Aev8KF`c^@Uv@YuM?5WLq_lT?S<`zg zKPQO@9ne{hW6b9gN_WU&cH_!01rOf0_5(ICyqhje?TIe6X_1c2eS(cR2#{zB1h$>` z@8K#fpx&kRwzDG>;W!F8jFt{LK4QXK-x6?(bZ+dQlspVqChKGGiJ_g zI%YsKjSS*p9fC5w0SqkEd|j|`VaLK-KE31B{&hr5R){MtLx$B=wA5mw#VHWN_MCpg z(y5oUhFc}bj|c_~Y2%-Li*Oa_z^+K>7NWpMbI3}ZMGH{lIKPB2RrOj!i$TTHXVJwn zV3D_nx~-^JmIWuIF0{IdwpNB5x&gI|n%XBNw4i~B4U6c4qnk>hUDLvGH?vy2Vyov> zuBm2%UqL#Q%Hr163ffN9jkW4Oj1u5Fxb^cM85^OiH#e3#_>iK$w!1sGQR+|IRA;2H zFd7x-KjD&}B6BDYq%zvpb7^Kyq-4FfwF0 z9&>816!BvyY-zs&(&k}2leBZdm2KIuJ@0PGHH;hL@X8AvI2F*M%Lz4DbfCNX(BeyatO^0Dc6z@kU6jmiJt*7?1}d8T2wC;JENX`wyX?Y1d3ff8ZM3bvxC zEClO;kgmlLw9yb2OS(mR;2t!_$%Kj-7PC}|9WtX#F`J|b8<7$i8iLJ#wbymO-xn?H zyXrWznwk3D^ZdM@`)LW5)2ED>1ucd3@ArD2`T!QtBG>WJ6>2QvW_kMJWC6?a2DFo_ z5KB~Cgd&^iWw7!)%*gpSWh;g{TPqrbN|NE`0TvFKIG2`TiYoS7UcCkj8EXxeDWjOU zAr1^#!2;Q1dX5BoVPX0j(*+Boqksh*xWYim(;T91!4mpp4$5#I;iM4vxV6#k-B}0iu?TR-b^)~G8VW)LtY~l#8;8VI*==ul56e}#c zc-%dpKnFFfzuxHJP#mW5kRuC+M(}k^Ui7Ma+~Mr*>Yuo#i5c3vvlK&~eN*)XNtAC! z)lJ6|ISeQfN)<;@6bK0xBc2ZBdX52#?!@!*9!8{dSM4uqLV-_S@3UIhe{fFI<{e9Q;l}#aCBqV2_&^UHqG9=Bv1yruo zTL&wlqe*Oh8yPUv;y-+MfFUxa;A)k(fF%L0^xAXtXg)7!cOAp%+&`iZ=ssg6i+dwwfW$$@U-)y)Nt zC|5o)7Q3EYeDmG(j8at-E#d&zh7A!>%&jWw70@*NhTz$_r@^uB#6y{BKX!#-(PQBS zQT;gvES?iTBv`5=T6n0iDGeAHdZ3Wo)eS*=(s^>AusB(^F+K?YcxeVQ5~HmR+Gi**nfNPnhifE^j6agOZ1C+pJ-?&DP@Dz7cf)?D*QfmLC zMl)b0(i{TC(M2J{P4)(5w`K?lHC9+RL5W4Q47gQ7S%k}HFVBBBKQf|#5B1xn4VkwV zeL&06BLq#>HuvtahGz{r0_F~4Heqj{nB|a!_~58Nb$@3U$t+ZG4tD(eD~@yABE=yZ zJ$@3fls9pbXQ07lO3OVt7WpD%0z3K5)&fKUq7Upiy#FH(_Ij^jShGpJG&PB2*in1!Q zoC1qvY@$>nTu4tjM}j5q=XfQ-;!Wk5c#!Owv^v43ZyGkqvOZ;pwNgZ?*UCF2bDz zD~9~W-BaYgk6-i}2M?j&wu<`r4jcsIfJU%7kAKmZF>=x%JdQ;pA?3xK=6q4peDZ9EG7$`- zRs4{^@cq0GMhbW;`O5vIORApwmX`|S`e!z7(#mnO{I`_l%(1i?f#sP~`P zB0T=_6%%L`^PuJ0b;FMxH+fn9r+SWA|KSM<)NBC@9w22}{Ra{4L6;nxZjSdV+G9m? z`^EF~Y-4k6ahq0;#sxx6x5+8``HuQ-nja@4O5s+k;zuGE0a>shD0~jl!}BK4)*pIu zqp6`}bPS4Q&VXzEm|!`LloL`VpTOpIGW1H?puxTKfy65-iW(ZSTz3KD^f=Z9ve4Y< z@0CO+8MPuu9&}!?xIyc}xtX~U2Y#{)C~z^RF}$@eB-M?@LK|Zz9cIx2SS)c+!!hkOM$rOLSQ?@P#tgYLuPB9F1kVjufDN{zsZ(28 z-sTW{h67x-&F&4rLXz|26X!;#?-P3Ho*G$*5U_Ntm>zc@BI<_Okgie^n&MJIH^}^P zYkLtUQin{Z(*Q2W@hAmJ$SM!7k!o9tb1wx8M`B%xmpj&hB5ojr^jEqV4kRts4Tt_Jk-^=)75?(Lnqk~UMOJU2$rM89anuLop9;e$iFAQ7{9j4 z%&I#-E|3Zh*AN!O1I)Tj+tZr@BFwTfndQ^2l#>6lhoFM|MNzTGC37Tn9R_J%`&UmAf+ zlB+5`Inw5yNJ^=-1rXcm?6}{jChX^{rP?GlqSD+eZS7)0QfMoIbZ+T%1C}B{>Di5| z5-&pCCk8AAxWc6rZ*yw2m?c+UDfa|R*N~-8*P@TIuIk;4gO8H{jYQLvYP)Of&NvGN z=QUulxG#<6t?x#mw7KuSY+2?c&I~)jBFE*+?3!J$T7r{_x!?mdXg!qB5hotdB9dyi z^3mKoRNz|TzJU5J}D3injd}aIGL0LtPv*Z!GqQD zB`SPq?2O2{MF?T*>Db)J-0Ii(y$LW&$v`^R_pB>uyKQIvahKPWHkz|$9OuKI5GHaJ zFan#Pf$O=`V#7|GN7rd2^%{rWLms!x!G*HZo7S*BB;wA{So!q=4VuNF-KXPslLx_; z-&xTQzu@KG?7d$cIFy4@0^tfQX687OHoug@jYgs>?8GxA0h;v~zX?HDqQIg-nWTZ zgT;_#U`A0kI4eamy~YYv*3AD52$ta*ED^2{DPko-%3u{Yr9H$6Zam&ELyJmq(;_C) zHAbDM9P4qfs|7diJL+K>*R)8mC`m9RRwkAH+fb3mOx$$ptML)b!^$<&FrA*8Fq>D9 zg}#qdiQh|T-bP7w2Zk*M&zgc_M`v3D6WfBTIy`I< zFs!e&@dT&9!nLzG6h*cqG#2FBo&QReGU%gTuNa&A0y<)*6T@ZW;SHgY&r`{AO_k#wcsYq#UfEH+ z&w(q3P90eh;*OV+oG+TjNX%TlJdnx>Q+%FSnhS!3 zPtzhT8uQF<2^tu^2uu*$r%wpt=yO$xI4@)w!g%T{%gjd744Wb;S_UkO&-U&;2P}yB zG1#2f@v!8Q1|)nbg|4P^{cF&2@3%WE+q|*iovo{S9%QVov}VyNw;!x*IsApjj)O%9 zPv|wZ1Pcs@9ucy|mbx5U(ND;c0v4cA6Z^UEr(I`+5NrmRWrGIp7fyHmL_nqlG2T|q z#ZEjCHbuu(XW!)7sQ~(GX(ZOCBtZ4OVqJWUZ|aNUg#s+*LcC*|q(!ik&;p<{1pg5I zh!Eq4{DK=|QZ!(()c@vp!vV{D=t%KIc!N|wz?X|3KKkz<7mXFBUF(;yGp^{nyi3HE#I5uKInfb1yp*>E{4MW0ga8h zf;QHrA^AnLY`f|D^|7bRWablQ^JOtxM)tpX2E*tUy|KkL*xIkU7?u-_8>^hhi5tm- zchGU!>^@q*dt>Kio9bEQA=_jcjYe~&%^Q6$U`c9Ah7DE%mV?$y!9vQ7Sn*9TAb*;9 zA;X)1CB>J*$d5s(4@^o;OR$oVM6iUj5UlViL`01rI=e*C;!2B>WiO?!XOz<_TfR#o zr5id0ms$cUNAP&6){qPV-H>nOM^F>o+uYy6`lFGKiuB(;t9h(6-wF3ET8r^2$~ zRG$CKxnV*UmtY1g2{Kb<#}bvxW+7~HY55XpNrrReVX`J_3I!~w_rxuRtx%a3v0@-0 zRKmhHgQf*&rGAud5BLl$cxs-{8r+asP}yZHlV2Xq^xT7`3C`RDYb^rX$?J*Fzg{+1 zhEcP;U+7jGi-!Lq9ooC~k1J>=tzlVeiyTr=z5y-CiyP7MyT8xsr_Ii0rwx9v9<3J5 zVrq6qk5Wp!q~=ZbhNLtdi6eYfmy`UK{SUiJA#szsrQh+($7cBmy7N~RpY%6*$(hj75JkLLy^qE`2 zYa7t^xbviFqn`8sVnS$SdP8RBDonot4rnX=rqyd>@MV_e-tMPECAX57cLm9$=Re)P zGPSb3%|?xo3V+jGGl-mxmU%Xnt~{dQdb_>8cbCi5LiD^1+pW3Yk!d2)q@kUs6ai0j z7iqK?#J@2hv%M~pYqW!zWdHTo=ST#0z=BbWmAdMPmH42Xn!&Zg*@)A?gP# z6%|Un!~xYU$Al!Ddx9}^yV6Z)+ZW&%`~)mdev6ZnZer*N^*2?ZVBV|_26zW6kGqT^ zzIW&T*v#nUAKtk@~WT#W?V6|`Ze2< zthN;Zh#843x+dSgr{T+I?T#$!1}%VU0x4`S`0$KW6nYO7+OREZ@3R=o{mB>=pV4PV zX)5&W8S42No0XwSGBo|U`Lk0dOLn$5%zw5r!~}(AgXa1aYrUU+^Zli*JBT4ruJf-G ztL%p?cS{y&@|J>Fo9_J7j*I{cwf&=Ji@~FQw@vdHo=JlO8%@3*mDv76nVQ}Hfw>5U z-@}K4Q|rCGo78WA{q>hy_rf_4EQqKG5RJi-3pnsx@Pry>A z&O|Ti1rg!uf%2(U30(530+)a)S#}u>5iXN)Lc=pmv1f5VAM?lsSP8=x zYbUfVXk-(su$dv_Ys36Qa{57`PDpOo@B=hx1j~PZ`svEx*5V?64AR7K3gg97prT4^ zxRCC#hasaogZ<6cW@mS^h3-bPiNI|44vN?0JDt1D)-K~`Ewo&xj#%cx4>0M;m2#SX z@cvG756gnG*UxCel~u{`t@S`&XhYvjycbi0Ow$@GQM>&4x@|oTxll5s5LLuS0gHCa sd%=oe@tg(=!FKZy4Et*qVr(P)4>um~udc^e?*IS*07*qoM6N<$g7W=4Y5)KL literal 0 HcmV?d00001 diff --git a/demo/web-mobile/assets/spine/native/68/6843f00b-0ef4-4b7c-aac0-42ee42635e55.9a531.png b/demo/web-mobile/assets/spine/native/68/6843f00b-0ef4-4b7c-aac0-42ee42635e55.9a531.png new file mode 100644 index 0000000000000000000000000000000000000000..18265803b0f78942dab8d949ce9d4c4d9762943d GIT binary patch literal 105052 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 FV1kJ4Ed~Gp literal 0 HcmV?d00001 diff --git a/demo/web-mobile/assets/spine/native/69/69163ff4-f84e-4d78-8ea7-946f62007fcd.b8970.atlas b/demo/web-mobile/assets/spine/native/69/69163ff4-f84e-4d78-8ea7-946f62007fcd.b8970.atlas new file mode 100644 index 00000000..30e87476 --- /dev/null +++ b/demo/web-mobile/assets/spine/native/69/69163ff4-f84e-4d78-8ea7-946f62007fcd.b8970.atlas @@ -0,0 +1,209 @@ + +huatuo.png +size: 701,208 +format: RGBA8888 +filter: Linear,Linear +repeat: none +Body + rotate: false + xy: 487, 72 + size: 90, 91 + orig: 90, 91 + offset: 0, 0 + index: -1 +Eye + rotate: false + xy: 473, 44 + size: 45, 24 + orig: 45, 24 + offset: 0, 0 + index: -1 +Eye-beiji + rotate: false + xy: 360, 60 + size: 57, 23 + orig: 57, 23 + offset: 0, 0 + index: -1 +Eye-fennu + rotate: false + xy: 570, 39 + size: 39, 21 + orig: 39, 21 + offset: 0, 0 + index: -1 +Eye-shengli + rotate: false + xy: 421, 64 + size: 45, 19 + orig: 45, 19 + offset: 0, 0 + index: -1 +Eye-siwang + rotate: false + xy: 522, 48 + size: 44, 20 + orig: 44, 20 + offset: 0, 0 + index: -1 +Head + rotate: false + xy: 581, 64 + size: 89, 99 + orig: 89, 99 + offset: 0, 0 + index: -1 +L-Forearm + rotate: false + xy: 613, 29 + size: 32, 31 + orig: 32, 31 + offset: 0, 0 + index: -1 +L-Hand + rotate: false + xy: 674, 150 + size: 27, 26 + orig: 27, 26 + offset: 0, 0 + index: -1 +L-Lowerleg + rotate: false + xy: 674, 117 + size: 26, 29 + orig: 26, 29 + offset: 0, 0 + index: -1 +L-Thigh + rotate: false + xy: 649, 25 + size: 29, 35 + orig: 29, 35 + offset: 0, 0 + index: -1 +L-Upperarm + rotate: false + xy: 318, 7 + size: 50, 49 + orig: 50, 49 + offset: 0, 0 + index: -1 +Mouth + rotate: false + xy: 682, 36 + size: 18, 10 + orig: 18, 10 + offset: 0, 0 + index: -1 +Mouth-beiji + rotate: false + xy: 470, 72 + size: 13, 11 + orig: 13, 11 + offset: 0, 0 + index: -1 +Mouth-fennu + rotate: false + xy: 674, 66 + size: 22, 17 + orig: 22, 17 + offset: 0, 0 + index: -1 +Mouth-shengli + rotate: false + xy: 581, 17 + size: 20, 18 + orig: 20, 18 + offset: 0, 0 + index: -1 +Mouth-siwang + rotate: false + xy: 682, 50 + size: 18, 12 + orig: 18, 12 + offset: 0, 0 + index: -1 +Pelvis + rotate: false + xy: 641, 180 + size: 43, 28 + orig: 43, 28 + offset: 0, 0 + index: -1 +R-Forearm + rotate: false + xy: 473, 9 + size: 38, 31 + orig: 38, 31 + offset: 0, 0 + index: -1 +R-Hand + rotate: false + xy: 549, 12 + size: 28, 23 + orig: 28, 23 + offset: 0, 0 + index: -1 +R-Lowerleg + rotate: false + xy: 674, 87 + size: 26, 26 + orig: 26, 26 + offset: 0, 0 + index: -1 +R-Thigh + rotate: false + xy: 515, 4 + size: 30, 36 + orig: 30, 36 + offset: 0, 0 + index: -1 +R-Upperarm + rotate: false + xy: 431, 12 + size: 38, 48 + orig: 38, 48 + offset: 0, 0 + index: -1 +SE-daoguang + rotate: false + xy: 0, 0 + size: 239, 208 + orig: 239, 208 + offset: 0, 0 + index: -1 +SE-guang + rotate: false + xy: 360, 87 + size: 123, 121 + orig: 123, 121 + offset: 0, 0 + index: -1 +Weapon + rotate: false + xy: 243, 10 + size: 71, 46 + orig: 71, 46 + offset: 0, 0 + index: -1 +beilou + rotate: false + xy: 243, 60 + size: 113, 148 + orig: 113, 148 + offset: 0, 0 + index: -1 +hulu + rotate: false + xy: 372, 4 + size: 55, 52 + orig: 55, 52 + offset: 0, 0 + index: -1 +shadow + rotate: false + xy: 487, 167 + size: 150, 41 + orig: 150, 41 + offset: 0, 0 + index: -1 diff --git a/demo/web-mobile/assets/spine/native/70/702455ac-9b92-4dd7-b143-cb02342dbe48.7b3fa.png b/demo/web-mobile/assets/spine/native/70/702455ac-9b92-4dd7-b143-cb02342dbe48.7b3fa.png new file mode 100644 index 0000000000000000000000000000000000000000..791d8fad6ad84d74c27b8f1ee1a2f3b5423ffd94 GIT binary patch literal 138343 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

JQ>TSG8IePfoDI)`4 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 z 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 VxEs7{IamMy002ovPDHLkV1lM^cN+iz literal 0 HcmV?d00001 diff --git a/demo/web-mobile/assets/spine/native/71/71561142-4c83-4933-afca-cb7a17f67053.c06a9.png b/demo/web-mobile/assets/spine/native/71/71561142-4c83-4933-afca-cb7a17f67053.c06a9.png new file mode 100644 index 0000000000000000000000000000000000000000..0556b76119fa785e777d114f9e5489793ac2275a GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU3?z3ec*FxKxd5LK*Sfm8riO;v+S(d0s0V_& zIv}^Hu@T6;y&^0HsFJ-T$S?Ry|LLQCY&moH?~eltS$n!ThE&{oduAgqg96VH2X-OB zZ}Btw_&zf4c|CdMg8hQ7TS5-RIsM+XKPIUS1o%5%En`!+6sS|?-?Kn_Y0KYPEI?xz NJYD@<);T3K0RZ7fKqmkI literal 0 HcmV?d00001 diff --git a/demo/web-mobile/assets/spine/native/80/804e11b5-bf4f-4a78-ac4a-8443e7166be1.fd38c.png b/demo/web-mobile/assets/spine/native/80/804e11b5-bf4f-4a78-ac4a-8443e7166be1.fd38c.png new file mode 100644 index 0000000000000000000000000000000000000000..15141211846bb82c1130e24586e4a3a20526c6a5 GIT binary patch literal 32648 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

1Qq*^8k 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 literal 0 HcmV?d00001 diff --git a/demo/web-mobile/assets/spine/native/c1/c11dfdd2-97c6-409c-9c0f-fdfa681f16a9.d86d7.png b/demo/web-mobile/assets/spine/native/c1/c11dfdd2-97c6-409c-9c0f-fdfa681f16a9.d86d7.png new file mode 100644 index 0000000000000000000000000000000000000000..5c3b67dbb2ff22e772988276bd9ea50393414dfa GIT binary patch literal 79283 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 xrlqaVvvZwiO#aXJiW*H^Dz-M)SM^XJcBzI^%n z_wWDz|AFjVw{8KsckbMI_UxISo=hZAF?&gnU+~AjpC&f3b!~Vb76BA;@N{tuskrs_ z%t28GMUEpE7 literal 0 HcmV?d00001 diff --git a/demo/web-mobile/assets/text-render/config.697bc.json b/demo/web-mobile/assets/text-render/config.697bc.json new file mode 100644 index 00000000..69996f47 --- /dev/null +++ b/demo/web-mobile/assets/text-render/config.697bc.json @@ -0,0 +1,54 @@ +{ + "paths": { + "f4jvTRdINIaICWEVrgQxx2": [ + "char-mode/char-mode", + "cc.Prefab" + ], + "e2Z8EqOaxB256X3o4ZbClt": [ + "high-dpi/high-dpi", + "cc.Prefab" + ] + }, + "uuids": [ + "f4jvTRdINIaICWEVrgQxx2", + "e2Z8EqOaxB256X3o4ZbClt", + "ecpdLyjvZBwrvm+cedCcQy", + "5cO7kybDxGj4ipyMYdRYZB", + "5f5dyqtRNNxaFmVzYns6FZ", + "a2MjXRFdtLlYQ5ouAFv/+R" + ], + "scenes": {}, + "redirect": [ + "ecpdLyjvZBwrvm+cedCcQy", + 0, + "5cO7kybDxGj4ipyMYdRYZB", + 1, + "5f5dyqtRNNxaFmVzYns6FZ", + 1, + "a2MjXRFdtLlYQ5ouAFv/+R", + 1 + ], + "deps": [ + "internal", + "main" + ], + "packs": { + "0dccb646b": [ + "e2Z8EqOaxB256X3o4ZbClt", + "f4jvTRdINIaICWEVrgQxx2" + ] + }, + "name": "text-render", + "importBase": "import", + "nativeBase": "native", + "debug": true, + "isZip": false, + "encrypted": false, + "versions": { + "import": [ + "0dccb646b", + "af549" + ], + "native": [] + } +} \ No newline at end of file diff --git a/demo/web-mobile/assets/text-render/import/0d/0dccb646b.af549.json b/demo/web-mobile/assets/text-render/import/0d/0dccb646b.af549.json new file mode 100644 index 00000000..0820e7af --- /dev/null +++ b/demo/web-mobile/assets/text-render/import/0d/0dccb646b.af549.json @@ -0,0 +1,2059 @@ +[ + 1, + [ + "ecpdLyjvZBwrvm+cedCcQy", + "5f5dyqtRNNxaFmVzYns6FZ", + "a2MjXRFdtLlYQ5ouAFv/+R", + "5cO7kybDxGj4ipyMYdRYZB" + ], + [ + "node", + "_spriteFrame", + "root", + "data", + "_parent", + "_scrollView", + "charFont3", + "charFont2", + "charFont1", + "bitmapFont3", + "bitmapFont2", + "bitmapFont1" + ], + [ + [ + "cc.Node", + [ + "_name", + "_prefab", + "_children", + "_components", + "_contentSize", + "_trs", + "_parent", + "_anchorPoint" + ], + 2, + 4, + 2, + 9, + 5, + 7, + 1, + 5 + ], + [ + "cc.Widget", + [ + "_alignFlags", + "_left", + "_originalWidth", + "_originalHeight", + "_right", + "alignMode", + "_top", + "node" + ], + -4, + 1 + ], + [ + "cc.Label", + [ + "_string", + "_fontSize", + "_N$horizontalAlign", + "_N$verticalAlign", + "_N$cacheMode", + "_lineHeight", + "_N$enableRetina", + "_N$overflow", + "node", + "_materials" + ], + -5, + 1, + 3 + ], + [ + "cc.Sprite", + [ + "_sizeMode", + "_type", + "_isTrimmedMode", + "node", + "_materials", + "_spriteFrame" + ], + 0, + 1, + 3, + 6 + ], + [ + "cc.Label", + [ + "_string", + "_fontSize", + "_N$horizontalAlign", + "_N$verticalAlign", + "_N$cacheMode", + "_materials", + "_lineHeight", + "_N$overflow", + "node" + ], + -5, + 1 + ], + [ + "cc.Node", + [ + "_name", + "_parent", + "_children", + "_components", + "_prefab", + "_contentSize", + "_color", + "_anchorPoint", + "_trs" + ], + 2, + 1, + 2, + 12, + 4, + 5, + 5, + 5, + 7 + ], + [ + "cc.Node", + [ + "_name", + "_parent", + "_components", + "_prefab", + "_contentSize", + "_anchorPoint", + "_trs" + ], + 2, + 1, + 2, + 4, + 5, + 5, + 7 + ], + [ + "cc.PrefabInfo", + [ + "fileId", + "root" + ], + 2, + 1 + ], + [ + "cc.Prefab", + [ + "_name" + ], + 2 + ], + [ + "cc.ToggleContainer", + [ + "node" + ], + 3, + 1 + ], + [ + "cc.Layout", + [ + "_resize", + "_N$layoutType", + "_N$startAxis", + "_N$paddingTop", + "_N$spacingY", + "node", + "_layoutSize" + ], + -2, + 1, + 5 + ], + [ + "cc.Scrollbar", + [ + "enableAutoHide", + "_N$direction", + "node", + "_N$handle" + ], + 1, + 1, + 1 + ], + [ + "cc.ScrollView", + [ + "horizontal", + "brake", + "bounceDuration", + "_N$horizontalScrollBar", + "node", + "_N$content", + "_N$verticalScrollBar" + ], + -1, + 1, + 1, + 1 + ], + [ + "59d30IUYIJAq5bVJwTwWxC1", + [ + "node", + "bitmapFont1", + "bitmapFont2", + "bitmapFont3", + "charFont1", + "charFont2", + "charFont3" + ], + 3, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ] + ], + [ + [ + 7, + 0, + 1, + 2 + ], + [ + 0, + 0, + 6, + 3, + 1, + 4, + 5, + 2 + ], + [ + 6, + 0, + 1, + 2, + 3, + 4, + 6, + 2 + ], + [ + 1, + 0, + 2, + 3, + 7, + 4 + ], + [ + 4, + 0, + 1, + 6, + 2, + 3, + 4, + 5, + 8, + 8 + ], + [ + 2, + 0, + 1, + 5, + 2, + 3, + 4, + 8, + 9, + 7 + ], + [ + 1, + 0, + 1, + 6, + 7, + 4 + ], + [ + 8, + 0, + 2 + ], + [ + 0, + 0, + 2, + 3, + 1, + 4, + 5, + 2 + ], + [ + 0, + 0, + 2, + 3, + 1, + 4, + 7, + 5, + 2 + ], + [ + 0, + 0, + 6, + 2, + 3, + 1, + 4, + 2 + ], + [ + 5, + 0, + 1, + 2, + 3, + 4, + 6, + 5, + 2 + ], + [ + 5, + 0, + 1, + 2, + 3, + 4, + 5, + 7, + 8, + 2 + ], + [ + 6, + 0, + 1, + 2, + 3, + 4, + 5, + 2 + ], + [ + 1, + 0, + 7, + 2 + ], + [ + 1, + 0, + 1, + 4, + 2, + 7, + 5 + ], + [ + 1, + 5, + 0, + 1, + 3, + 7, + 5 + ], + [ + 7, + 1, + 1 + ], + [ + 9, + 0, + 1 + ], + [ + 10, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 6 + ], + [ + 3, + 0, + 2, + 3, + 4, + 5, + 3 + ], + [ + 3, + 1, + 0, + 3, + 4, + 5, + 3 + ], + [ + 3, + 1, + 0, + 3, + 4, + 3 + ], + [ + 11, + 0, + 1, + 2, + 3, + 3 + ], + [ + 12, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 5 + ], + [ + 0, + 0, + 6, + 2, + 1, + 5, + 2 + ], + [ + 4, + 0, + 1, + 2, + 3, + 4, + 5, + 8, + 7 + ], + [ + 4, + 0, + 1, + 6, + 2, + 3, + 7, + 4, + 5, + 8, + 9 + ], + [ + 2, + 0, + 1, + 5, + 2, + 3, + 4, + 6, + 8, + 9, + 8 + ], + [ + 2, + 0, + 1, + 2, + 3, + 7, + 4, + 6, + 8, + 9, + 8 + ], + [ + 2, + 0, + 1, + 2, + 3, + 7, + 4, + 8, + 9, + 7 + ], + [ + 13, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 1 + ] + ], + [ + [ + [ + [ + 7, + "high-dpi" + ], + [ + 8, + "high-dpi", + [ + -3 + ], + [ + [ + 14, + 45, + -2 + ] + ], + [ + 17, + -1 + ], + [ + 5, + 960, + 600 + ], + [ + 480, + 300, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 9, + "content", + [ + -7, + -8 + ], + [ + [ + 18, + -4 + ], + [ + 19, + 1, + 2, + 1, + 30, + 20, + -5, + [ + 5, + 785.815, + 90 + ] + ], + [ + 15, + 41, + 87.09249999999997, + 87.09249999999997, + 220, + -6 + ] + ], + [ + 0, + "98B5382ANHgKQw5BkMsWAq", + 1 + ], + [ + 5, + 785.815, + 90 + ], + [ + 0, + 0.5, + 1 + ], + [ + 0, + 300, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 11, + "sv", + 1, + [ + -12, + -13 + ], + [ + [ + -9, + [ + 3, + 45, + 240, + 250, + -10 + ], + [ + 20, + 0, + false, + -11, + [ + 7 + ], + 8 + ] + ], + 1, + 4, + 4 + ], + [ + 0, + "b5RxDsAgFOW6xOyBdbz2rI", + 1 + ], + [ + 4, + 4279834905 + ], + [ + 5, + 960, + 600 + ] + ], + [ + 25, + "texts", + 2, + [ + -14, + -15, + -16, + -17 + ], + [ + 0, + "fewdQzAVFIpoQlwtbBswLJ", + 1 + ], + [ + 0, + -90, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 12, + "scrollBar", + 3, + [ + -21 + ], + [ + [ + -18, + [ + 16, + 0, + 37, + 350.07654921020657, + 237, + -19 + ], + [ + 21, + 1, + 0, + -20, + [ + 5 + ], + 6 + ] + ], + 1, + 4, + 4 + ], + [ + 0, + "c2cC2kA1NNeozY+5ZzkcSY", + 1 + ], + [ + 5, + 8, + 600 + ], + [ + 0, + 1, + 0.5 + ], + [ + 480, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 10, + "view", + 3, + [ + 2 + ], + [ + [ + 3, + 45, + 240, + 250, + -22 + ] + ], + [ + 0, + "645yltQ0dFpbIcIgDazPDc", + 1 + ], + [ + 5, + 960, + 600 + ] + ], + [ + 1, + "tips", + 2, + [ + [ + 26, + "左:未开启高 DPI 右:已开启高 DPI", + 16, + 1, + 1, + 2, + [ + null + ], + -23 + ], + [ + 6, + 17, + 95.11500000000001, + 30, + -24 + ] + ], + [ + 0, + "fbSLTYNutL174TDvzvU3nT", + 1 + ], + [ + 5, + 418.695, + 40 + ], + [ + 0, + -50, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "no", + 4, + [ + [ + 28, + "字", + 23, + 26, + 1, + 1, + 1, + 2, + -25, + [ + 0 + ] + ] + ], + [ + 0, + "0dRy5RFi9LTbsFqysUyw1W", + 1 + ], + [ + 5, + 23, + 32.76 + ], + [ + -145.912, + -105.262, + 0, + 0, + 0, + 0, + 1, + 10, + 10, + 1 + ] + ], + [ + 1, + "yes", + 4, + [ + [ + 5, + "字", + 23, + 26, + 1, + 1, + 1, + -26, + [ + 1 + ] + ] + ], + [ + 0, + "2d2KxVjshJJrHLV3IcXHEI", + 1 + ], + [ + 5, + 23, + 32.76 + ], + [ + 145.832, + -107.456, + 0, + 0, + 0, + 0, + 1, + 10, + 10, + 1 + ] + ], + [ + 1, + "no", + 4, + [ + [ + 29, + "诗歌(英語:Poetry)是用于反映生活和表达情感的文学体裁。", + 30, + 1, + 1, + 3, + 1, + 2, + -27, + [ + 2 + ] + ] + ], + [ + 0, + "faGaA/+ptFuZ3KY1Kamr/n", + 1 + ], + [ + 5, + 280.47, + 170.39999999999998 + ], + [ + -154.684, + -369.515, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "no", + 4, + [ + [ + 30, + "诗歌(英語:Poetry)是用于反映生活和表达情感的文学体裁。", + 30, + 1, + 1, + 3, + 1, + -28, + [ + 3 + ] + ] + ], + [ + 0, + "5fSeoF6Q9MZpcaQU2RV1Er", + 1 + ], + [ + 5, + 280.47, + 170.39999999999998 + ], + [ + 147.945, + -369.515, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 13, + "bar", + 5, + [ + -29 + ], + [ + 0, + "29pI3SelxAU6ODrNe5LS2g", + 1 + ], + [ + 5, + 8, + 30 + ], + [ + 0, + 1, + 0 + ] + ], + [ + 22, + 1, + 0, + 12, + [ + 4 + ] + ], + [ + 23, + false, + 1, + 5, + 13 + ], + [ + 24, + false, + 0.75, + 0.23, + null, + 3, + 2, + 14 + ] + ], + 0, + [ + 0, + 2, + 1, + 0, + 0, + 1, + 0, + -1, + 3, + 0, + 0, + 2, + 0, + 0, + 2, + 0, + 0, + 2, + 0, + -1, + 7, + 0, + -2, + 4, + 0, + -1, + 15, + 0, + 0, + 3, + 0, + 0, + 3, + 0, + -1, + 6, + 0, + -2, + 5, + 0, + -1, + 8, + 0, + -2, + 9, + 0, + -3, + 10, + 0, + -4, + 11, + 0, + -1, + 14, + 0, + 0, + 5, + 0, + 0, + 5, + 0, + -1, + 12, + 0, + 0, + 6, + 0, + 0, + 7, + 0, + 0, + 7, + 0, + 0, + 8, + 0, + 0, + 9, + 0, + 0, + 10, + 0, + 0, + 11, + 0, + -1, + 13, + 0, + 3, + 1, + 2, + 4, + 6, + 14, + 5, + 15, + 29 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + 1, + -1, + 1, + 1 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 2, + 3 + ] + ], + [ + [ + [ + 7, + "char-mode" + ], + [ + 8, + "char-mode", + [ + -10 + ], + [ + [ + 14, + 45, + -2 + ], + [ + 31, + -9, + -8, + -7, + -6, + -5, + -4, + -3 + ] + ], + [ + 17, + -1 + ], + [ + 5, + 960, + 600 + ], + [ + 480, + 300, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 9, + "content", + [ + -14, + -15, + -16, + -17, + -18, + -19, + -20, + -21 + ], + [ + [ + 18, + -11 + ], + [ + 19, + 1, + 2, + 1, + 30, + 20, + -12, + [ + 5, + 785.815, + 503.4 + ] + ], + [ + 15, + 41, + 87.09249999999997, + 87.09249999999997, + 220, + -13 + ] + ], + [ + 0, + "98B5382ANHgKQw5BkMsWAq", + 1 + ], + [ + 5, + 785.815, + 503.4 + ], + [ + 0, + 0.5, + 1 + ], + [ + 0, + 300, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 11, + "sv", + 1, + [ + -25, + -26 + ], + [ + [ + -22, + [ + 3, + 45, + 240, + 250, + -23 + ], + [ + 20, + 0, + false, + -24, + [ + 6 + ], + 7 + ] + ], + 1, + 4, + 4 + ], + [ + 0, + "b5RxDsAgFOW6xOyBdbz2rI", + 1 + ], + [ + 4, + 4279834905 + ], + [ + 5, + 960, + 600 + ] + ], + [ + 12, + "scrollBar", + 3, + [ + -30 + ], + [ + [ + -27, + [ + 16, + 0, + 37, + 350.07654921020657, + 237, + -28 + ], + [ + 21, + 1, + 0, + -29, + [ + 4 + ], + 5 + ] + ], + 1, + 4, + 4 + ], + [ + 0, + "c2cC2kA1NNeozY+5ZzkcSY", + 1 + ], + [ + 5, + 8, + 600 + ], + [ + 0, + 1, + 0.5 + ], + [ + 480, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 10, + "view", + 3, + [ + 2 + ], + [ + [ + 3, + 45, + 240, + 250, + -31 + ] + ], + [ + 0, + "645yltQ0dFpbIcIgDazPDc", + 1 + ], + [ + 5, + 960, + 600 + ] + ], + [ + 1, + "tips", + 2, + [ + [ + 4, + "使用 Bitmap 缓存模式不断显示随机的 3000 个常用字\n动态图集会回收废弃空间,Draw Call 依旧不变", + 16, + 20, + 1, + 1, + 2, + [ + null + ], + -32 + ], + [ + 6, + 17, + 95.11500000000001, + 30, + -33 + ] + ], + [ + 0, + "fbSLTYNutL174TDvzvU3nT", + 1 + ], + [ + 5, + 375.18, + 40 + ], + [ + 0, + -50, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 1, + "tips", + 2, + [ + [ + 27, + "使用 Char 缓存模式不断显示随机的 3000 个常用字\n字符图集会回收废弃空间,Draw Call 依旧不变", + 16, + 20, + 1, + 2, + 1, + 2, + [ + null + ], + -34 + ], + [ + 6, + 17, + 95.11500000000001, + 263.40000000000003, + -35 + ] + ], + [ + 0, + "bdNnnna5tPoKRQC8z61Php", + 1 + ], + [ + 5, + 375.18, + 90 + ], + [ + 0, + -308.40000000000003, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 2, + "label1", + 2, + [ + -36 + ], + [ + 0, + "fbPuhihjlPergAoZdl2Bch", + 1 + ], + [ + 5, + 58.725, + 37.8 + ], + [ + 0, + -108.9, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 5, + "Label", + 24, + 30, + 1, + 1, + 1, + 8, + [ + 0 + ] + ], + [ + 2, + "label2", + 2, + [ + -37 + ], + [ + 0, + "7cjLO2MhtBp4iz/iW57i6X", + 1 + ], + [ + 5, + 58.725, + 37.8 + ], + [ + 0, + -166.70000000000002, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 5, + "Label", + 24, + 30, + 1, + 1, + 1, + 10, + [ + 1 + ] + ], + [ + 2, + "label3", + 2, + [ + -38 + ], + [ + 0, + "53kEDs2ONGbrTwZ/3fkrnr", + 1 + ], + [ + 5, + 58.725, + 37.8 + ], + [ + 0, + -224.50000000000003, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 5, + "Label", + 24, + 30, + 1, + 1, + 1, + 12, + [ + 2 + ] + ], + [ + 2, + "label1", + 2, + [ + -39 + ], + [ + 0, + "53ohPrY4VPPaTL8Y+GWL2b", + 1 + ], + [ + 5, + 58.73, + 30 + ], + [ + 0, + -388.40000000000003, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 4, + "Label", + 24, + 30, + 1, + 1, + 2, + [ + null + ], + 14 + ], + [ + 2, + "label2", + 2, + [ + -40 + ], + [ + 0, + "ecP5qke91J8JmKY2vRuQZb", + 1 + ], + [ + 5, + 58.73, + 30 + ], + [ + 0, + -438.40000000000003, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 4, + "Label", + 24, + 30, + 1, + 1, + 2, + [ + null + ], + 16 + ], + [ + 2, + "label3", + 2, + [ + -41 + ], + [ + 0, + "f0KGVrovlF0qoYJg33NKVZ", + 1 + ], + [ + 5, + 58.73, + 30 + ], + [ + 0, + -488.40000000000003, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 4, + "Label", + 24, + 30, + 1, + 1, + 2, + [ + null + ], + 18 + ], + [ + 13, + "bar", + 4, + [ + -42 + ], + [ + 0, + "29pI3SelxAU6ODrNe5LS2g", + 1 + ], + [ + 5, + 8, + 30 + ], + [ + 0, + 1, + 0 + ] + ], + [ + 22, + 1, + 0, + 20, + [ + 3 + ] + ], + [ + 23, + false, + 1, + 4, + 21 + ], + [ + 24, + false, + 0.75, + 0.23, + null, + 3, + 2, + 22 + ] + ], + 0, + [ + 0, + 2, + 1, + 0, + 0, + 1, + 0, + 6, + 19, + 0, + 7, + 17, + 0, + 8, + 15, + 0, + 9, + 13, + 0, + 10, + 11, + 0, + 11, + 9, + 0, + 0, + 1, + 0, + -1, + 3, + 0, + 0, + 2, + 0, + 0, + 2, + 0, + 0, + 2, + 0, + -1, + 6, + 0, + -2, + 8, + 0, + -3, + 10, + 0, + -4, + 12, + 0, + -5, + 7, + 0, + -6, + 14, + 0, + -7, + 16, + 0, + -8, + 18, + 0, + -1, + 23, + 0, + 0, + 3, + 0, + 0, + 3, + 0, + -1, + 5, + 0, + -2, + 4, + 0, + -1, + 22, + 0, + 0, + 4, + 0, + 0, + 4, + 0, + -1, + 20, + 0, + 0, + 5, + 0, + 0, + 6, + 0, + 0, + 6, + 0, + 0, + 7, + 0, + 0, + 7, + 0, + -1, + 9, + 0, + -1, + 11, + 0, + -1, + 13, + 0, + -1, + 15, + 0, + -1, + 17, + 0, + -1, + 19, + 0, + -1, + 21, + 0, + 3, + 1, + 2, + 4, + 5, + 22, + 5, + 23, + 42 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21 + ], + [ + -1, + -1, + -1, + -1, + -1, + 1, + -1, + 1, + 1 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 2, + 3 + ] + ] + ] +] \ No newline at end of file diff --git a/demo/web-mobile/assets/text-render/index.697bc.js b/demo/web-mobile/assets/text-render/index.697bc.js new file mode 100644 index 00000000..0eae7191 --- /dev/null +++ b/demo/web-mobile/assets/text-render/index.697bc.js @@ -0,0 +1,122 @@ +window.__require = function e(t, n, r) { + function s(o, u) { + if (!n[o]) { + if (!t[o]) { + var b = o.split("/"); + b = b[b.length - 1]; + if (!t[b]) { + var a = "function" == typeof __require && __require; + if (!u && a) return a(b, !0); + if (i) return i(b, !0); + throw new Error("Cannot find module '" + o + "'"); + } + o = b; + } + var f = n[o] = { + exports: {} + }; + t[o][0].call(f.exports, function(e) { + var n = t[o][1][e]; + return s(n || e); + }, f, f.exports, e, t, n, r); + } + return n[o].exports; + } + var i = "function" == typeof __require && __require; + for (var o = 0; o < r.length; o++) s(r[o]); + return s; +}({ + "char-mode": [ function(require, module, exports) { + "use strict"; + cc._RF.push(module, "59d30IUYIJAq5bVJwTwWxC1", "char-mode"); + "use strict"; + var __extends = this && this.__extends || function() { + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || { + __proto__: [] + } instanceof Array && function(d, b) { + d.__proto__ = b; + } || function(d, b) { + for (var p in b) Object.prototype.hasOwnProperty.call(b, p) && (d[p] = b[p]); + }; + return extendStatics(d, b); + }; + return function(d, b) { + extendStatics(d, b); + function __() { + this.constructor = d; + } + d.prototype = null === b ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + }(); + var __decorate = this && this.__decorate || function(decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : null === desc ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if ("object" === typeof Reflect && "function" === typeof Reflect.decorate) r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) (d = decorators[i]) && (r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r); + return c > 3 && r && Object.defineProperty(target, key, r), r; + }; + Object.defineProperty(exports, "__esModule", { + value: true + }); + var chars_1 = require("../chars"); + var _a = cc._decorator, ccclass = _a.ccclass, property = _a.property; + var CharMode = function(_super) { + __extends(CharMode, _super); + function CharMode() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.bitmapFont1 = null; + _this.bitmapFont2 = null; + _this.bitmapFont3 = null; + _this.charFont1 = null; + _this.charFont2 = null; + _this.charFont3 = null; + return _this; + } + CharMode.prototype.onLoad = function() { + var _this = this; + this.bitmapFont1.string = this.getRandomText(15); + this.bitmapFont2.string = this.getRandomText(15); + this.bitmapFont3.string = this.getRandomText(15); + this.charFont1.string = this.getRandomText(15); + this.charFont2.string = this.getRandomText(15); + this.charFont3.string = this.getRandomText(15); + this.schedule(function() { + _this.bitmapFont1.string = _this.getRandomText(15); + _this.bitmapFont2.string = _this.getRandomText(15); + _this.bitmapFont3.string = _this.getRandomText(15); + _this.charFont1.string = _this.getRandomText(15); + _this.charFont2.string = _this.getRandomText(15); + _this.charFont3.string = _this.getRandomText(15); + }, .1); + }; + CharMode.prototype.getRandomText = function(length) { + var str = ""; + while (str.length < length) str += chars_1.chars[Math.floor(Math.random() * chars_1.chars.length)]; + return str; + }; + __decorate([ property(cc.Label) ], CharMode.prototype, "bitmapFont1", void 0); + __decorate([ property(cc.Label) ], CharMode.prototype, "bitmapFont2", void 0); + __decorate([ property(cc.Label) ], CharMode.prototype, "bitmapFont3", void 0); + __decorate([ property(cc.Label) ], CharMode.prototype, "charFont1", void 0); + __decorate([ property(cc.Label) ], CharMode.prototype, "charFont2", void 0); + __decorate([ property(cc.Label) ], CharMode.prototype, "charFont3", void 0); + CharMode = __decorate([ ccclass ], CharMode); + return CharMode; + }(cc.Component); + exports.default = CharMode; + cc._RF.pop(); + }, { + "../chars": "chars" + } ], + chars: [ function(require, module, exports) { + "use strict"; + cc._RF.push(module, "0f373c9jcRAy6NDXndhSRxT", "chars"); + "use strict"; + Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.chars = void 0; + exports.chars = "\u7684\u4e00\u662f\u5728\u4e86\u4e0d\u548c\u6709\u5927\u8fd9\u4e3b\u4e2d\u4eba\u4e0a\u4e3a\u4eec\u5730\u4e2a\u7528\u5de5\u65f6\u8981\u52a8\u56fd\u4ea7\u4ee5\u6211\u5230\u4ed6\u4f1a\u4f5c\u6765\u5206\u751f\u5bf9\u4e8e\u5b66\u4e0b\u7ea7\u5c31\u5e74\u9636\u4e49\u53d1\u6210\u90e8\u6c11\u53ef\u51fa\u80fd\u65b9\u8fdb\u540c\u884c\u9762\u8bf4\u79cd\u8fc7\u547d\u5ea6\u9769\u800c\u591a\u5b50\u540e\u81ea\u793e\u52a0\u5c0f\u673a\u4e5f\u7ecf\u529b\u7ebf\u672c\u7535\u9ad8\u91cf\u957f\u515a\u5f97\u5b9e\u5bb6\u5b9a\u6df1\u6cd5\u8868\u7740\u6c34\u7406\u5316\u4e89\u73b0\u6240\u4e8c\u8d77\u653f\u4e09\u597d\u5341\u6218\u65e0\u519c\u4f7f\u6027\u524d\u7b49\u53cd\u4f53\u5408\u6597\u8def\u56fe\u628a\u7ed3\u7b2c\u91cc\u6b63\u65b0\u5f00\u8bba\u4e4b\u7269\u4ece\u5f53\u4e24\u4e9b\u8fd8\u5929\u8d44\u4e8b\u961f\u6279\u5982\u5e94\u5f62\u60f3\u5236\u5fc3\u6837\u5e72\u90fd\u5411\u53d8\u5173\u70b9\u80b2\u91cd\u5176\u601d\u4e0e\u95f4\u5185\u53bb\u56e0\u4ef6\u65e5\u5229\u76f8\u7531\u538b\u5458\u6c14\u4e1a\u4ee3\u5168\u7ec4\u6570\u679c\u671f\u5bfc\u5e73\u5404\u57fa\u6216\u6708\u6bdb\u7136\u95ee\u6bd4\u5c55\u90a3\u5b83\u6700\u53ca\u5916\u6ca1\u770b\u6cbb\u63d0\u4e94\u89e3\u7cfb\u6797\u8005\u7c73\u7fa4\u5934\u610f\u53ea\u660e\u56db\u9053\u9a6c\u8ba4\u6b21\u6587\u901a\u4f46\u6761\u8f83\u514b\u53c8\u516c\u5b54\u9886\u519b\u6d41\u5165\u63a5\u5e2d\u4f4d\u60c5\u8fd0\u5668\u5e76\u98de\u539f\u6cb9\u653e\u7acb\u9898\u8d28\u6307\u5efa\u533a\u9a8c\u6d3b\u4f17\u5f88\u6559\u51b3\u7279\u6b64\u5e38\u77f3\u5f3a\u6781\u571f\u5c11\u5df2\u6839\u5171\u76f4\u56e2\u7edf\u5f0f\u8f6c\u522b\u9020\u5207\u4e5d\u4f60\u53d6\u897f\u6301\u603b\u6599\u8fde\u4efb\u5fd7\u89c2\u8c03\u4e03\u4e48\u5c71\u7a0b\u767e\u62a5\u66f4\u89c1\u5fc5\u771f\u4fdd\u70ed\u59d4\u624b\u6539\u7ba1\u5904\u5df1\u5c06\u4fee\u652f\u8bc6\u75c5\u8c61\u51e0\u5148\u8001\u5149\u4e13\u4ec0\u516d\u578b\u5177\u793a\u590d\u5b89\u5e26\u6bcf\u4e1c\u589e\u5219\u5b8c\u98ce\u56de\u5357\u5e7f\u52b3\u8f6e\u79d1\u5317\u6253\u79ef\u8f66\u8ba1\u7ed9\u8282\u505a\u52a1\u88ab\u6574\u8054\u6b65\u7c7b\u96c6\u53f7\u5217\u6e29\u88c5\u5373\u6beb\u77e5\u8f74\u7814\u5355\u8272\u575a\u636e\u901f\u9632\u53f2\u62c9\u4e16\u8bbe\u8fbe\u5c14\u573a\u7ec7\u5386\u82b1\u53d7\u6c42\u4f20\u53e3\u65ad\u51b5\u91c7\u7cbe\u91d1\u754c\u54c1\u5224\u53c2\u5c42\u6b62\u8fb9\u6e05\u81f3\u4e07\u786e\u7a76\u4e66\u672f\u72b6\u5382\u987b\u79bb\u518d\u76ee\u6d77\u4ea4\u6743\u4e14\u513f\u9752\u624d\u8bc1\u4f4e\u8d8a\u9645\u516b\u8bd5\u89c4\u65af\u8fd1\u6ce8\u529e\u5e03\u95e8\u94c1\u9700\u8d70\u8bae\u53bf\u5175\u56fa\u9664\u822c\u5f15\u9f7f\u5343\u80dc\u7ec6\u5f71\u6d4e\u767d\u683c\u6548\u7f6e\u63a8\u7a7a\u914d\u5200\u53f6\u7387\u8ff0\u4eca\u9009\u517b\u5fb7\u8bdd\u67e5\u5dee\u534a\u654c\u59cb\u7247\u65bd\u54cd\u6536\u534e\u89c9\u5907\u540d\u7ea2\u7eed\u5747\u836f\u6807\u8bb0\u96be\u5b58\u6d4b\u58eb\u8eab\u7d27\u6db2\u6d3e\u51c6\u65a4\u89d2\u964d\u7ef4\u677f\u8bb8\u7834\u8ff0\u6280\u6d88\u5e95\u5e8a\u7530\u52bf\u7aef\u611f\u5f80\u795e\u4fbf\u8d3a\u6751\u6784\u7167\u5bb9\u975e\u641e\u4e9a\u78e8\u65cf\u706b\u6bb5\u7b97\u9002\u8bb2\u6309\u503c\u7f8e\u6001\u9ec4\u6613\u5f6a\u670d\u65e9\u73ed\u9ea6\u524a\u4fe1\u6392\u53f0\u58f0\u8be5\u51fb\u7d20\u5f20\u5bc6\u5bb3\u4faf\u8349\u4f55\u6811\u80a5\u7ee7\u53f3\u5c5e\u5e02\u4e25\u5f84\u87ba\u68c0\u5de6\u9875\u6297\u82cf\u663e\u82e6\u82f1\u5feb\u79f0\u574f\u79fb\u7ea6\u5df4\u6750\u7701\u9ed1\u6b66\u57f9\u8457\u6cb3\u5e1d\u4ec5\u9488\u600e\u690d\u4eac\u52a9\u5347\u738b\u773c\u5979\u6293\u542b\u82d7\u526f\u6742\u666e\u8c08\u56f4\u98df\u5c04\u6e90\u4f8b\u81f4\u9178\u65e7\u5374\u5145\u8db3\u77ed\u5212\u5242\u5ba3\u73af\u843d\u9996\u5c3a\u6ce2\u627f\u7c89\u8df5\u5e9c\u9c7c\u968f\u8003\u523b\u9760\u591f\u6ee1\u592b\u5931\u5305\u4f4f\u4fc3\u679d\u5c40\u83cc\u6746\u5468\u62a4\u5ca9\u5e08\u4e3e\u66f2\u6625\u5143\u8d85\u8d1f\u7802\u5c01\u6362\u592a\u6a21\u8d2b\u51cf\u9633\u626c\u6c5f\u6790\u4ea9\u6728\u8a00\u7403\u671d\u533b\u6821\u53e4\u5462\u7a3b\u5b8b\u542c\u552f\u8f93\u6ed1\u7ad9\u53e6\u536b\u5b57\u9f13\u521a\u5199\u5218\u5fae\u7565\u8303\u4f9b\u963f\u5757\u67d0\u529f\u5957\u53cb\u9650\u9879\u4f59\u5012\u5377\u521b\u5f8b\u96e8\u8ba9\u9aa8\u8fdc\u5e2e\u521d\u76ae\u64ad\u4f18\u5360\u6b7b\u6bd2\u5708\u4f1f\u5b63\u8bad\u63a7\u6fc0\u627e\u53eb\u4e91\u4e92\u8ddf\u88c2\u7cae\u7c92\u6bcd\u7ec3\u585e\u94a2\u9876\u7b56\u53cc\u7559\u8bef\u7840\u5438\u963b\u6545\u5bf8\u76fe\u665a\u4e1d\u5973\u6563\u710a\u529f\u682a\u4eb2\u9662\u51b7\u5f7b\u5f39\u9519\u6563\u5546\u89c6\u827a\u706d\u7248\u70c8\u96f6\u5ba4\u8f7b\u8840\u500d\u7f3a\u5398\u6cf5\u5bdf\u7edd\u5bcc\u57ce\u51b2\u55b7\u58e4\u7b80\u5426\u67f1\u674e\u671b\u76d8\u78c1\u96c4\u4f3c\u56f0\u5de9\u76ca\u6d32\u8131\u6295\u9001\u5974\u4fa7\u6da6\u76d6\u6325\u8ddd\u89e6\u661f\u677e\u9001\u83b7\u5174\u72ec\u5b98\u6df7\u7eaa\u4f9d\u672a\u7a81\u67b6\u5bbd\u51ac\u7ae0\u6e7f\u504f\u7eb9\u5403\u6267\u9600\u77ff\u5be8\u8d23\u719f\u7a33\u593a\u786c\u4ef7\u52aa\u7ffb\u5947\u7532\u9884\u804c\u8bc4\u8bfb\u80cc\u534f\u635f\u68c9\u4fb5\u7070\u867d\u77db\u539a\u7f57\u6ce5\u8f9f\u544a\u5375\u7bb1\u638c\u6c27\u6069\u7231\u505c\u66fe\u6eb6\u8425\u7ec8\u7eb2\u5b5f\u94b1\u5f85\u5c3d\u4fc4\u7f29\u6c99\u9000\u9648\u8ba8\u594b\u68b0\u8f7d\u80de\u5e7c\u54ea\u5265\u8feb\u65cb\u5f81\u69fd\u5012\u63e1\u62c5\u4ecd\u5440\u9c9c\u5427\u5361\u7c97\u4ecb\u94bb\u9010\u5f31\u811a\u6015\u76d0\u672b\u9634\u4e30\u7f16\u5370\u8702\u6025\u62ff\u6269\u4f24\u98de\u9732\u6838\u7f18\u6e38\u632f\u64cd\u592e\u4f0d\u57df\u751a\u8fc5\u8f89\u5f02\u5e8f\u514d\u7eb8\u591c\u4e61\u4e45\u96b6\u7f38\u5939\u5ff5\u5170\u6620\u6c9f\u4e59\u5417\u5112\u6740\u6c7d\u78f7\u8270\u6676\u63d2\u57c3\u71c3\u6b22\u94c1\u8865\u54b1\u82bd\u6c38\u74e6\u503e\u9635\u78b3\u6f14\u5a01\u9644\u7259\u82bd\u6c38\u74e6\u659c\u704c\u6b27\u732e\u987a\u732a\u6d0b\u8150\u8bf7\u900f\u53f8\u5371\u62ec\u8109\u5b9c\u7b11\u82e5\u5c3e\u675f\u58ee\u66b4\u4f01\u83dc\u7a57\u695a\u6c49\u6108\u7eff\u62d6\u725b\u4efd\u67d3\u65e2\u79cb\u904d\u953b\u7389\u590f\u7597\u5c16\u6b96\u4e95\u8d39\u5dde\u8bbf\u5439\u8363\u94dc\u6cbf\u66ff\u6eda\u5ba2\u53ec\u65f1\u609f\u523a\u8111\u63aa\u8d2f\u85cf\u6562\u4ee4\u9699\u7089\u58f3\u786b\u7164\u8fce\u94f8\u7c98\u63a2\u4e34\u8584\u65ec\u5584\u798f\u7eb5\u62e9\u793c\u613f\u4f0f\u6b8b\u96f7\u5ef6\u70df\u53e5\u7eaf\u6e10\u8015\u8dd1\u6cfd\u6162\u683d\u9c81\u8d64\u7e41\u5883\u6f6e\u6a2a\u6389\u9525\u5e0c\u6c60\u8d25\u8239\u5047\u4eae\u8c13\u6258\u4f19\u54f2\u6000\u5272\u6446\u8d21\u5448\u52b2\u8d22\u4eea\u6c89\u70bc\u9ebb\u7f6a\u7956\u606f\u8f66\u7a7f\u8d27\u9500\u9f50\u9f20\u62bd\u753b\u9972\u9f99\u5e93\u5b88\u7b51\u623f\u6b4c\u5bd2\u559c\u54e5\u6d17\u8680\u5e9f\u7eb3\u8179\u4e4e\u5f55\u955c\u5987\u6076\u8102\u5e84\u64e6\u9669\u8d5e\u949f\u6447\u5178\u67c4\u8fa9\u7af9\u8c37\u5356\u4e71\u865a\u6865\u5965\u4f2f\u8d76\u5782\u9014\u989d\u58c1\u7f51\u622a\u91ce\u9057\u9759\u8c0b\u5f04\u6302\u8bfe\u9547\u5984\u76db\u8010\u63f4\u624e\u8651\u952e\u5f52\u7b26\u5e86\u805a\u7ed5\u6469\u5fd9\u821e\u9047\u7d22\u987e\u80f6\u7f8a\u6e56\u9489\u4ec1\u97f3\u8ff9\u788e\u4f38\u706f\u907f\u6cdb\u4ea1\u7b54\u52c7\u9891\u7687\u67f3\u54c8\u63ed\u7518\u8bfa\u6982\u5baa\u6d53\u5c9b\u88ad\u8c01\u6d2a\u8c22\u70ae\u6d47\u6591\u8baf\u61c2\u7075\u86cb\u95ed\u5b69\u91ca\u4e73\u5de8\u5f92\u79c1\u94f6\u4f0a\u666f\u5766\u7d2f\u5300\u9709\u675c\u4e50\u52d2\u9694\u5f2f\u7ee9\u62db\u7ecd\u80e1\u547c\u75db\u5cf0\u96f6\u67f4\u7c27\u5348\u8df3\u5c45\u5c1a\u4e01\u79e6\u7a0d\u8ffd\u6881\u6298\u8017\u78b1\u6b8a\u5c97\u6316\u6c0f\u5203\u5267\u5806\u8d6b\u8377\u80f8\u8861\u52e4\u819c\u7bc7\u767b\u9a7b\u6848\u520a\u79e7\u7f13\u51f8\u5f79\u526a\u5ddd\u96ea\u94fe\u6e14\u5566\u8138\u6237\u6d1b\u5b62\u52c3\u76df\u4e70\u6768\u5b97\u7126\u8d5b\u65d7\u6ee4\u7845\u70ad\u80a1\u5750\u84b8\u51dd\u7adf\u9677\u67aa\u9ece\u6551\u5192\u6697\u6d1e\u72af\u7b52\u60a8\u5b8b\u5f27\u7206\u8c2c\u6d82\u5473\u6d25\u81c2\u969c\u8910\u9646\u554a\u5065\u5c0a\u8c46\u62d4\u83ab\u62b5\u6851\u5761\u7f1d\u8b66\u6311\u6c61\u51b0\u67ec\u5634\u5565\u996d\u5851\u5bc4\u8d75\u558a\u57ab\u5eb7\u9075\u7267\u906d\u5e45\u56ed\u8154\u8ba2\u9999\u8089\u5f1f\u5c4b\u654f\u6062\u5fd8\u8863\u5b59\u9f84\u5cad\u9a97\u4f11\u501f\u4e39\u6e21\u8033\u5228\u864e\u7b14\u7a00\u6606\u6d6a\u8428\u8336\u6ef4\u6d45\u62e5\u7a74\u8986\u4f26\u5a18\u5428\u6d78\u8896\u73e0\u96cc\u5988\u7d2b\u620f\u5854\u9524\u9707\u5c81\u8c8c\u6d01\u5256\u7262\u950b\u7591\u9738\u95ea\u57d4\u731b\u8bc9\u5237\u72e0\u5ffd\u707e\u95f9\u4e54\u5510\u6f0f\u95fb\u6c88\u7194\u6c2f\u8352\u830e\u7537\u51e1\u62a2\u50cf\u6d46\u65c1\u73bb\u4ea6\u5fe0\u5531\u8499\u4e88\u7eb7\u6355\u9501\u5c24\u4e58\u4e4c\u667a\u6de1\u5141\u53db\u755c\u4fd8\u6478\u9508\u626b\u6bd5\u7483\u5b9d\u82af\u7237\u9274\u79d8\u51c0\u848b\u9499\u80a9\u817e\u67af\u629b\u8f68\u5802\u62cc\u7238\u5faa\u8bf1\u795d\u52b1\u80af\u9152\u7ef3\u7a77\u5858\u71e5\u6ce1\u888b\u6717\u5582\u94dd\u8f6f\u6e20\u9897\u60ef\u8d38\u7caa\u7efc\u5899\u8d8b\u5f7c\u5c4a\u58a8\u788d\u542f\u9006\u5378\u822a\u96fe\u51a0\u4e19\u8857\u83b1\u8d1d\u8f90\u80a0\u4ed8\u5409\u6e17\u745e\u60ca\u987f\u6324\u79d2\u60ac\u59c6\u70c2\u68ee\u7cd6\u5723\u51f9\u9676\u8bcd\u8fdf\u8695\u4ebf\u77e9\u810a\u6b7c\u7fbd\u63a9\u6c57\u78b0\u8c31\u7ae5\u5ead\u84ec\u8d34\u5cb8\u5e97\u602a\u9986\u6321\u80a2\u80c6\u541b\u4e4f\u5085\u51cc\u6070\u5434\u9e21\u76c6\u6c2e\u94c3\u8361\u6c47\u72c2\u5076\u8fbd\u5bb4\u73ca\u63cf\u76d1\u6d89\u4f0f\u5f03\u4ed4\u576f\u75c7\u775b\u7a9d\u8dc3\u4e32\u745a\u9971\u5de2\u8f91\u8ff7\u8bd7\u8083\u8c0a\u80ce\u5bbe\u987d\u94a0\u8f9b\u9614\u7272\u4f30\u7981\u5c51\u79c0\u50ac\u70b8\u642c\u5751\u6682\u57cb\u5893\u8170\u9686\u5821\u8fc8\u614c\u94be\u9b4f\u8e0f\u65fa\u871c\u517c\u626d\u80ba\u5144\u6492\u77ee\u62c6\u53c9\u8d2e\u62ac\u75d5\u5f69\u51bb\u4e1b\u6f06\u8be6\u62e8\u74dc\u5954\u817f\u6696\u813e\u68d2\u6e7e\u65c5\u6f5c\u6444\u6731\u7ea4\u89c8\u878d\u62cd\u611a\u6dfb\u62b1\u84c4\u7a3f\u7fc5\u86fe\u9510\u6813\u7b7e\u724c\u77a7\u758f\u820d\u7cca\u9a71\u6cc9\u6bc1\u4f2a\u952f\u5362\u51fd\u6398\u6270\u6dec\u518c\u68f1\u722c\u8c6a\u879f\u6807\u6388\u670b\u4fd7\u9a82\u4ed3\u810f\u660c\u90a6\u6b3a\u535a\u4f10\u8870\u5bfb\u6760\u8717\u5c3f\u5e55\u7d6e\u8616\u8fa8\u5b75\u5784\u7cb9\u586b\u4e18\u6b6a\u9b3c\u633a\u5e05\u65a5\u6458\u7236\u72d7\u7f62\u708e\u7586\u809d\u9176\u6068\u66fc\u8e72\u5e01\u8fd4\u98a0\u5269\u6e2f\u989c\u9175\u68af\u697c\u7eea\u6dee\u90bb\u5fa1\u6770\u6052\u5f17\u6e89\u6dc0\u82ef\u8de8\u80bf\u6291\u8bf8\u51c9\u80da\u8212\u80c0\u6c22\u642d\u9192\u9003\u66f0\u7ade\u75be\u97e9\u5c18\u5bff\u5b64\u7763\u6da1\u751c\u62d2\u6885\u4e54\u9521\u7761\u6602\u70ef\u62e7\u6251\u90ca\u60a3\u8d2d\u8757\u9505\u8511\u8d56\u74f6\u79df\u6012\u5de7\u818f\u6d8c\u72ed\u9187\u60d5\u6863\u71d5\u6cf0\u80c1\u76d8\u7aed\u8fdd\u4e3d\u6c28\u6846\u820c\u81a8\u9aa4\u84dd\u5e78\u8bda\u5413\u79e9\u6276\u82ac\u54ac\u7275\u5fcd\u690e\u6124\u8fc1\u4ec7\u6ee9\u4eff\u7ed8\u8f88\u62da\u559d\u9a73\u7566\u756a\u6251\u8461\u6b3e\u6572\u9080\u90ed\u59a5\u9690s\u8f70\u7c7d\u5fc6\u65e6\u72b9\u5eb8\u5d07\u5e99\u79c6\u95f8\u5389\u81e3\u7a97\u7eba\u63a0\u6d9d\u6da8\u9012\u846c\u9605\u5835\u6241\u94b3\u68da\u9cde\u4f34\u73cd\u6566\u692d\u6c83\u6b32\u9f3b\u5b87\u752b\u950c\u7686\u94f2\u7816\u8d3c\u6e23\u6d4e\u7b5b\u658b\u68a6\u8d2a\u54c7\u8404\u94fa\u6843\u87f9\u631d\u7cd9\u9888\u96c5\u6652\u97e6\u803b\u6cb8\u96c7\u50a8\u754f\u970d\u83f2\u5f90\u699c\u56ca\u817a\u8328\u9655\u62b9\u5c48\u5bbf\u785d\u6628\u852c\u90dd\u94ec\u8327\u7a84\u54e8\u8f86\u8000\u4ef2\u85af\u50da\u6d59\u9970\u6734\u6050\u814a\u517d\u8721\u60e0\u7281\u561b\u552e\u9ccd\u656c\u575d\u70d8\u9882\u53d4\u5367\u7ea0\u7edc\u73a9\u680f\u5251\u82f9\u95ef\u4e22\u67cf\u727a\u594e\u56b7\u5bab\u80be\u7b3c\u90d1\u53d9\u5976\u8292\u971e\u673d\u59b9\u832c\u7801\u6380\u9601\u5351\u94f0\u94f5\u5f26\u80a4\u62df\u7f72\u6dcb\u68a8\u8fea\u4fe9\u6491\u5475\u7533\u7a46\u676f\u59d1\u529d\u5d29\u52a3\u8d3a\u68d5\u88c1\u5410\u5ae9\u51ed\u66f9\u6467\u75ab\u9e1f\u954d\u7709\u6881\u79be\u81ed\u5188\u9675\u6b67\u5e7b\u4e27\u8fed\u8106\u6028\u8463\u9540\u9177\u7f50\u903b\u6a61\u6d69\u64a4\u9a76\u4eab\u9526\u4ffa\u4f5b\u5154\u59ff\u94c5\u5824\u5740\u6e83\u80fa\u76b1\u6668\u80c3\u6c1f\u707f\u6f2b\u6cc4\u67a2\u6234\u5b55\u6263\u6cbc\u903c\u808c\u7897\u5de1\u540a\u76d7\u869c\u94a9\u6c64\u68a2\u6328\u7ffc\u75af\u97ad\u6247\u51b6\u70e6\u6089\u8513\u6cfc\u684c\u67ef\u7f69\u556e\u52fe\u8230\u664b\u6273\u8c34\u4faf\u5021\u8bca\u9e23\u6842\u5956\u8d3e\u6735\u971c\u840c\u6ede\u86f9\u9610\u507f\u8bd1\u7a3c\u635e\u68f5\u6208\u8bec\u64ae\u6d12\u8427\u5978\u996e\u6d85\u886c\u9557\u7eb1\u7624\u845b\u997c\u51f6\u9975\u6cbe\u998f\u94bc\u978b\u59d3\u6c5e\u67a3\u6e9c\u75bc\u51d1\u919b\u988c\u8096\u7be1\u9093\u649e\u6405\u94e1\u535c\u6b47\u59a8\u633d\u5ba1\u51ef\u8f67\u5792\u7bad\u7095\u6d51\u9f9f\u8d26\u8da3\u4fed\u6cea\u6cca\u4e43\u6349\u7a91\u9a7e\u6c41\u51ff\u997f\u5e3d\u6e58\u90ce\u6b23\u614e\u82b3\u80aa\u853d\u7ef5\u7545\u76f2\u7f1a\u7115\u60dc\u4ef0\u884d\u5ef7\u7384\u6cfb\u84b2\u6363\u5999\u5e15\u86c7\u9530\u68d8\u6eaa\u532a\u7ed2\u6f58\u75b2\u7eac\u9e2d\u574e\u76d2\u62fc\u836b\u5146\u718a\u60b2\u6367\u9504\u5949\u966a\u739b\u5fae\u94a8\u7c4d\u868a\u6f02\u7cdf\u5609\u72fc\u6876\u62fe\u5509\u9ed8\u7682\u5415\u9988\u916f\u90aa\u5b5d\u775b\u5c60\u7578\u5ce1\u7965\u8482\u62dc\u8749\u827e\u53f9\u6dd1\u70e4\u9a84\u7bee\u4f1e\u5c1d\u540f\u541e\u96f9\u52d8\u840e\u95f2\u4f73\u8019\u527f\u9cc3\u780d\u51af\u6bc5\u9a91\u915a\u54b3\u716e\u62ab\u4f69\u674f\u5077\u644a\u809a\u6614\u97e7\u5507\u5598\u5435\u8346\u5211\u62e6\u9541\u8e44\u74f7\u6fb3\u584c\u9965\u57ae\u6ecb\u949d\u918b\u634d\u8be1\u54e9\u5b8f\u77ac\u7f14\u5a46\u625b\u6377\u5239\u733f\u8471\u4e8f\u962e\u5e06\u7e82\u5580\u90b5\u4e11\u90c1\u8302\u7ce0\u4fde\u6cf3\u5938\u781a\u6296\u6e34\u806a\u62f1\u6ccc\u85fb\u9776\u8936\u626f\u85e4\u6084\u900a\u5c98\u59dc\u783e\u8206\u7626\u54b8\u7130\u69b4\u6d9b\u57a6\u5ab3\u5703\u80f3\u8086\u4ed1\u53e0\u6500\u83b2\u503a\u6c6a\u68cd\u98d8\u95f7\u86c4\u8517\u8d37\u4fca\u50b2\u54fa\u877c\u9881\u8822\u9ca4\u566a\u8180\u6c1b\u6d3c\u6805\u51e4\u6ea2\u708a\u6d66\u6a44\u9661\u80f0\u4ed9\u67d4\u5482\u5446\u59d0\u54ed\u61c8\u5179\u8d4b\u5cb3\u6954\u8715\u5d4c\u50f5\u6670\u6320\u7199\u5a5a\u7f20\u9b03\u4f63\u543e\u8f9e\u629a\u6691\u906e\u56a3\u8d74\u9492\u5ac1\u78fa\u819b\u8fa3\u8c28\u9119\u6869\u60e8\u6749\u79f8\u8747\u9798\u5306\u5a1f\u6643\u6d95\u840d\u949b\u7707\u8d81\u90ae\u86ee\u5ec9\u718f\u4fa6\u6d74\u4fef\u572d\u9887\u8d62\u638f\u5e1c\u679a\u916e\u74e3\u5b99\u8c23\u8e29\u594f\u7ad6\u978d\u66dd\u8036\u8304\u8c10\u8eba\u6984\u81fc\u54ce\u6284\u94c6\u6653\u8671\u77e2\u8247\u575e\u9785\u5c65\u6073\u5f25\u641c\u809b\u9038\u5589\u82d4\u8301\u6b20\u53ed\u6254\u7434\u82a6\u4ff1\u780c\u62e2\u7901\u832b\u7b79\u8fb1\u9773\u6795\u60e9\u9189\u6323\u5a76\u62e3\u5ac2\u835a\u818a\u94c2\u660f\u6ee8\u8a93\u5915\u626e\u663c\u8258\u9065\u6212\u9022\u82cd\u5308\u6148\u6101\u5524\u857e\u5e10\u63ba\u4e08\u761f\u9877\u88d5\u8a89\u7978\u575b\u5f6d\u6a58\u5339\u508d\u6de4\u70f7\u7ede\u8c6b\u5e9e\u5492\u829d\u8340\u5f13\u7f5a\u634f\u55e8\u695e\u4ed5\u563b\u6cab\u5d16\u7785\u5e18\u69a8\u5892\u6350\u6055\u87a8\u6c5b\u8bde\u8d4f\u743c\u8d29\u9e3f\u94ed\u5631\u9698\u9a70\u5a03\u778e\u9063\u8dcc\u632a\u8018\u60a6\u94b4\u9b42\u88f8\u859b\u9ca2\u8eb2\u9cd9\u60a0\u7898\u6ca5\u563f\u7076\u9976\u916c\u8273\u582a\u6df9\u6020\u7837\u5401\u6da4\u6170\u7f34\u7a9c\u7f94\u8d9f\u8116\u952d\u515c\u9b54\u6897\u7092\u7ebd\u5948\u787c\u9f0e\u60d1\u6817\u8c0e\u8881\u6ee5\u4ea8\u6d4a\u57c2\u5785\u531d\u8f72\u9042\u4e52\u8e2a\u4fd8\u6014\u9668\u566c\u60e7\u9896\u8305\u6454\u7cb3\u5783\u573e\u75ae\u5385\u9102\u8ba5\u96a7\u7741\u75f0\u9576\u54c0\u5288\u5cfb\u5c38\u62d0\u62f3\u7720\u8521\u814b\u54d1\u5951\u7fc1\u808b\u7827\u6346\u54df\u83ca\u7b28\u579b\u8c26\u7574\u819d\u94cd\u731c\u6bb7\u54bd\u5dfe\u8d4c\u9a9a\u632b\u94a6\u4e53\u75f9\u5632\u6e0d\u676d\u8549\u59bb\u58f6\u4ec6\u8038\u86d9\u5eca\u86db\u7fe0\u9e70\u55bb\u627c\u8574\u5bc7\u8165\u77aa\u7c7c\u5495\u732b\u51b5\u9e4f\u94ae\u640f\u6e85\u80eb\u841d\u81c0\u9cab\u7f9e\u7f55\u6bbf\u5fcc\u4ead\u76c5\u83c7\u65e8\u543b\u538c\u5bb0\u6c30\u5c4f\u6850\u989a\u4f50\u6816\u849c\u5353\u6b89\u6401\u714c\u6a59\u7a96\u7728\u58a9\u8e81\u6c9b\u7fd8\u8718\u9170\u77eb\u94b5\u54d7\u68ad\u6bc2\u55d3\u79bd\u58d5\u51f3\u7b50\u8026\u6f20\u5c41\u606d\u94a1\u9a74\u59da\u6016\u6ed4\u717d\u867e\u54fc\u5320\u7984\u7a1a\u8681\u7a83\u5490\u8335\u574a\u88e4\u52ff\u71ac\u72f1\u7184\u8350\u9570\u67d1\u5c6f\u919a\u803f\u9ad3\u620a\u8155\u6109\u8568\u7736\u714e\u76c8\u6168\u6655\u76fc\u52c9\u864f\u91c9\u76bf\u7600\u662d\u8748\u55fd\u8bbd\u79c3\u8c1a\u7554\u75bd\u5195\u5bb5\u7a8d\u5cea\u69d0\u764c\u6577\u5c82\u4fae\u643a\u8113\u537f\u4e38\u67dc\u78be\u5480\u70c3\u601c\u877d\u50bb\u6930\u902e\u730e\u5d0e\u6dc6\u5bfa\u607c\u80d6\u988a\u6c29\u76ef\u8d60\u7529\u576a\u6dd8\u8c2d\u838e\u96cf\u68fa\u8eaf\u71b9\u86a7\u61d2\u8e22\u7235\u8877\u4edf\u964b\u6495\u7f06\u667e\u72e1\u5e87\u84d6\u917f\u62d3\u7c07\u868c\u960e\u96c0\u9e7f\u5364\u8378\u8360\u6402\u7422\u733e\u82f7\u795b\u5d2d\u7855\u82de\u901e\u70ab\u5384\u711a\u94c0\u8235\u803d\u723d\u7a20\u8dd7\u90b1\u76cf\u5ed6\u97f5\u8c79\u9493\u5960\u6eb4\u67ab\u72ac\u7316\u9a6f\u4fa8\u707c\u7fdf\u64c2\u5600\u6c79\u78c5\u56bc\u72ee\u7239\u9e45\u8d24\u9885\u715e\u8424\u70d9\u86c0\u88f9\u9aa1\u75e2\u5df7\u5be1\u78a7\u7334\u680b\u55ef\u67ff\u7bf7\u5431\u53a9\u9cc4\u854a\u7538\u6f84\u95fa\u8367\u9ed4\u5acc\u745f\u73b2\u6487\u655e\u846b\u7877\u4e5e\u86ed\u961c\u77fe\u7792\u804a\u7405\u5080\u5121\u5543\u6f9c\u7ee5\u8c4c\u5220\u9f9a\u8854\u655b\u53a2\u5815\u6f6d\u8236\u7fd4\u8d54\u5937\u7a17\u5549\u50fb\u5830\u604b\u8418\u6252\u7784\u97f6\u7b0b\u86b4\u5a92\u6986\u5eca\u8845\u543c\u9539\u7766\u98a4\u523d\u556c\u6167\u7891\u5f5d\u7620\u796d\u4fa3\u8d5a\u8776\u90e1\u53e8\u5c94\u575f\u75a4\u87ac\u6094\u8b6c\u4e56\u5dcd\u75a1\u79b9\u9b41\u63b7\u68cb\u618e\u9631\u5760\u78b2\u535f\u54c4\u5f6c\u7ed1\u8151\u62bc\u63c9\u67b7\u83f1\u8e48\u6c70\u6e0e\u6127\u73e9\u8d2c\u886b\u5b85\u86f4\u592f\u542d\u70eb\u7078\u7aff\u9171\u5026\u9566\u5bee\u6233\u777e\u62f4\u5b5c\u8fc4\u79e4\u7b1b\u7f9f\u8731\u6a1f\u9c8d\u8815\u828d\u8beb\u6155\u8679\u53a6\u5f0a\u7ff0\u9523\u6caa\u901d\u8bc8\u52ab\u9502\u54a7\u51cb\u6be1\u84df\u6905\u6bef\u65a7\u7ef8\u77e3\u7941\u8944"; + cc._RF.pop(); + }, {} ] +}, {}, [ "char-mode", "chars" ]); +//# sourceMappingURL=index.js.map diff --git a/demo/web-mobile/assets/text-render/index.js.map b/demo/web-mobile/assets/text-render/index.js.map new file mode 100644 index 00000000..a3f941d1 --- /dev/null +++ b/demo/web-mobile/assets/text-render/index.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["assets/text-render/char-mode/char-mode.ts","assets/text-render/chars.ts"],"names":["chars_1","require","_a","cc","_decorator","ccclass","property","CharMode","_super","__extends","_this","apply","this","arguments","bitmapFont1","bitmapFont2","bitmapFont3","charFont1","charFont2","charFont3","prototype","onLoad","string","getRandomText","schedule","length","str","chars","Math","floor","random","__decorate","Label","Component","exports","default"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAAA,IAAAA,UAAAC,QAAA;IAEM,IAAAC,KAAAC,GAAAC,YAAAC,UAAAH,GAAAG,SAAAC,WAAAJ,GAAAI;IAGN,IAAAC,WAAA,SAAAC;MAAsCC,UAAAF,UAAAC;MAAtC,SAAAD;QAAA,IAAAG,QAAA,SAAAF,UAAAA,OAAAG,MAAAC,MAAAC,cAAAD;QAGIF,MAAAI,cAAA;QAGAJ,MAAAK,cAAA;QAGAL,MAAAM,cAAA;QAGAN,MAAAO,YAAA;QAGAP,MAAAQ,YAAA;QAGAR,MAAAS,YAAA;;;MAGUZ,SAAAa,UAAAC,SAAA;QAAV,IAAAX,QAAAE;QACIA,KAAAE,YAAAQ,SAAAV,KAAAW,cAAA;QACAX,KAAAG,YAAAO,SAAAV,KAAAW,cAAA;QACAX,KAAAI,YAAAM,SAAAV,KAAAW,cAAA;QACAX,KAAAK,UAAAK,SAAAV,KAAAW,cAAA;QACAX,KAAAM,UAAAI,SAAAV,KAAAW,cAAA;QACAX,KAAAO,UAAAG,SAAAV,KAAAW,cAAA;QAEAX,KAAAY,SAAA;UACId,MAAAI,YAAAQ,SAAAZ,MAAAa,cAAA;UACAb,MAAAK,YAAAO,SAAAZ,MAAAa,cAAA;UACAb,MAAAM,YAAAM,SAAAZ,MAAAa,cAAA;UACAb,MAAAO,UAAAK,SAAAZ,MAAAa,cAAA;UACAb,MAAAQ,UAAAI,SAAAZ,MAAAa,cAAA;UACAb,MAAAS,UAAAG,SAAAZ,MAAAa,cAAA;WACJ;;MAIJhB,SAAAa,UAAAG,gBAAA,SAAAE;QACI,IAAAC,MAAA;QACA,OAAAA,IAAAD,SAAAA,QACIC,OAAA1B,QAAA2B,MAAAC,KAAAC,MAAAD,KAAAE,WAAA9B,QAAA2B,MAAAF;QAEJ,OAAAC;;MA1CJK,WAAA,EADCzB,SAAAH,GAAA6B,UAC4BzB,SAAAa,WAAA,oBAAA;MAG7BW,WAAA,EADCzB,SAAAH,GAAA6B,UAC4BzB,SAAAa,WAAA,oBAAA;MAG7BW,WAAA,EADCzB,SAAAH,GAAA6B,UAC4BzB,SAAAa,WAAA,oBAAA;MAG7BW,WAAA,EADCzB,SAAAH,GAAA6B,UAC0BzB,SAAAa,WAAA,kBAAA;MAG3BW,WAAA,EADCzB,SAAAH,GAAA6B,UAC0BzB,SAAAa,WAAA,kBAAA;MAG3BW,WAAA,EADCzB,SAAAH,GAAA6B,UAC0BzB,SAAAa,WAAA,kBAAA;MAlBVb,WAAAwB,WAAA,EADpB1B,WACoBE;MAgDrB,OAAAA;KAhDA,CAAAJ,GAAA8B;IAAqBC,QAAAC,UAAA5B;;;;;;;;;;;;;ICLR2B,QAAAP,QAAA","sourcesContent":["import { chars } from \"../chars\";\n\nconst { ccclass, property } = cc._decorator;\n\n@ccclass\nexport default class CharMode extends cc.Component {\n\n @property(cc.Label)\n bitmapFont1: cc.Label = null;\n\n @property(cc.Label)\n bitmapFont2: cc.Label = null;\n\n @property(cc.Label)\n bitmapFont3: cc.Label = null;\n\n @property(cc.Label)\n charFont1: cc.Label = null;\n\n @property(cc.Label)\n charFont2: cc.Label = null;\n\n @property(cc.Label)\n charFont3: cc.Label = null;\n\n\n protected onLoad(): void {\n this.bitmapFont1.string = this.getRandomText(15);\n this.bitmapFont2.string = this.getRandomText(15);\n this.bitmapFont3.string = this.getRandomText(15);\n this.charFont1.string = this.getRandomText(15);\n this.charFont2.string = this.getRandomText(15);\n this.charFont3.string = this.getRandomText(15);\n\n this.schedule(() => {\n this.bitmapFont1.string = this.getRandomText(15);\n this.bitmapFont2.string = this.getRandomText(15);\n this.bitmapFont3.string = this.getRandomText(15);\n this.charFont1.string = this.getRandomText(15);\n this.charFont2.string = this.getRandomText(15);\n this.charFont3.string = this.getRandomText(15);\n }, 0.1);\n }\n\n\n getRandomText(length: number) {\n let str = '';\n while (str.length < length) {\n str += chars[Math.floor(Math.random() * chars.length)];\n }\n return str;\n }\n\n}\n","export const chars = `的一是在了不和有大这主中人上为们地个用工时要动国产以我到他会作来分生对于学下级就年阶义发成部民可出能方进同行面说种过命度革而多子后自社加小机也经力线本电高量长党得实家定深法表着水理化争现所二起政三好十战无农使性前等反体合斗路图把结第里正新开论之物从当两些还天资事队批如应形想制心样干都向变关点育重其思与间内去因件日利相由压员气业代全组数果期导平各基或月毛然问比展那它最及外没看治提五解系林者米群头意只明四道马认次文通但条较克又公孔领军流入接席位情运器并飞原油放立题质指建区验活众很教决特此常石强极土少已根共直团统式转别造切九你取西持总料连任志观调七么山程百报更见必真保热委手改管处己将修支识病象几先老光专什六型具示复安带每东增则完风回南广劳轮科北打积车计给节做务被整联步类集号列温装即毫知轴研单色坚据速防史拉世设达尔场织历花受求传口断况采精金界品判参层止边清至万确究书术状厂须离再目海交权且儿青才证低越际八试规斯近注办布门铁需走议县兵固除般引齿千胜细影济白格效置推空配刀叶率述今选养德话查差半敌始片施响收华觉备名红续均药标记难存测士身紧液派准斤角降维板许破述技消底床田势端感往神便贺村构照容非搞亚磨族火段算适讲按值美态黄易彪服早班麦削信排台声该击素张密害侯草何树肥继右属市严径螺检左页抗苏显苦英快称坏移约巴材省黑武培著河帝仅针怎植京助升王眼她抓含苗副杂普谈围食射源例致酸旧却充足短划剂宣环落首尺波承粉践府鱼随考刻靠够满夫失包住促枝局菌杆周护岩师举曲春元超负砂封换太模贫减阳扬江析亩木言球朝医校古呢稻宋听唯输滑站另卫字鼓刚写刘微略范供阿块某功套友限项余倒卷创律雨让骨远帮初皮播优占死毒圈伟季训控激找叫云互跟裂粮粒母练塞钢顶策双留误础吸阻故寸盾晚丝女散焊功株亲院冷彻弹错散商视艺灭版烈零室轻血倍缺厘泵察绝富城冲喷壤简否柱李望盘磁雄似困巩益洲脱投送奴侧润盖挥距触星松送获兴独官混纪依未突架宽冬章湿偏纹吃执阀矿寨责熟稳夺硬价努翻奇甲预职评读背协损棉侵灰虽矛厚罗泥辟告卵箱掌氧恩爱停曾溶营终纲孟钱待尽俄缩沙退陈讨奋械载胞幼哪剥迫旋征槽倒握担仍呀鲜吧卡粗介钻逐弱脚怕盐末阴丰编印蜂急拿扩伤飞露核缘游振操央伍域甚迅辉异序免纸夜乡久隶缸夹念兰映沟乙吗儒杀汽磷艰晶插埃燃欢铁补咱芽永瓦倾阵碳演威附牙芽永瓦斜灌欧献顺猪洋腐请透司危括脉宜笑若尾束壮暴企菜穗楚汉愈绿拖牛份染既秋遍锻玉夏疗尖殖井费州访吹荣铜沿替滚客召旱悟刺脑措贯藏敢令隙炉壳硫煤迎铸粘探临薄旬善福纵择礼愿伏残雷延烟句纯渐耕跑泽慢栽鲁赤繁境潮横掉锥希池败船假亮谓托伙哲怀割摆贡呈劲财仪沉炼麻罪祖息车穿货销齐鼠抽画饲龙库守筑房歌寒喜哥洗蚀废纳腹乎录镜妇恶脂庄擦险赞钟摇典柄辩竹谷卖乱虚桥奥伯赶垂途额壁网截野遗静谋弄挂课镇妄盛耐援扎虑键归符庆聚绕摩忙舞遇索顾胶羊湖钉仁音迹碎伸灯避泛亡答勇频皇柳哈揭甘诺概宪浓岛袭谁洪谢炮浇斑讯懂灵蛋闭孩释乳巨徒私银伊景坦累匀霉杜乐勒隔弯绩招绍胡呼痛峰零柴簧午跳居尚丁秦稍追梁折耗碱殊岗挖氏刃剧堆赫荷胸衡勤膜篇登驻案刊秧缓凸役剪川雪链渔啦脸户洛孢勃盟买杨宗焦赛旗滤硅炭股坐蒸凝竟陷枪黎救冒暗洞犯筒您宋弧爆谬涂味津臂障褐陆啊健尊豆拔莫抵桑坡缝警挑污冰柬嘴啥饭塑寄赵喊垫康遵牧遭幅园腔订香肉弟屋敏恢忘衣孙龄岭骗休借丹渡耳刨虎笔稀昆浪萨茶滴浅拥穴覆伦娘吨浸袖珠雌妈紫戏塔锤震岁貌洁剖牢锋疑霸闪埔猛诉刷狠忽灾闹乔唐漏闻沈熔氯荒茎男凡抢像浆旁玻亦忠唱蒙予纷捕锁尤乘乌智淡允叛畜俘摸锈扫毕璃宝芯爷鉴秘净蒋钙肩腾枯抛轨堂拌爸循诱祝励肯酒绳穷塘燥泡袋朗喂铝软渠颗惯贸粪综墙趋彼届墨碍启逆卸航雾冠丙街莱贝辐肠付吉渗瑞惊顿挤秒悬姆烂森糖圣凹陶词迟蚕亿矩脊歼羽掩汗碰谱童庭蓬贴岸店怪馆挡肢胆君乏傅凌恰吴鸡盆氮铃荡汇狂偶辽宴珊描监涉伏弃仔坯症睛窝跃串瑚饱巢辑迷诗肃谊胎宾顽钠辛阔牲估禁屑秀催炸搬坑暂埋墓腰隆堡迈慌钾魏踏旺蜜兼扭肺兄撒矮拆叉贮抬痕彩冻丛漆详拨瓜奔腿暖脾棒湾旅潜摄朱纤览融拍愚添抱蓄稿翅蛾锐栓签牌瞧疏舍糊驱泉毁伪锯卢函掘扰淬册棱爬豪螟标授朋俗骂仓脏昌邦欺博伐衰寻杠蜗尿幕絮蘖辨孵垄粹填丘歪鬼挺帅斥摘父狗罢炎疆肝酶恨曼蹲币返颠剩港颜酵梯楼绪淮邻御杰恒弗溉淀苯跨肿抑诸凉胚舒胀氢搭醒逃曰竞疾韩尘寿孤督涡甜拒梅乔锡睡昂烯拧扑郊患购蝗锅蔑赖瓶租怒巧膏涌狭醇惕档燕泰胁盘竭违丽氨框舌膨骤蓝幸诚吓秩扶芬咬牵忍椎愤迁仇滩仿绘辈拚喝驳畦番扑葡款敲邀郭妥隐s轰籽忆旦犹庸崇庙秆闸厉臣窗纺掠涝涨递葬阅堵扁钳棚鳞伴珍敦椭沃欲鼻宇甫锌皆铲砖贼渣济筛斋梦贪哇萄铺桃蟹挝糙颈雅晒韦耻沸雇储畏霍菲徐榜囊腺茨陕抹屈宿硝昨蔬郝铬茧窄哨辆耀仲薯僚浙饰朴恐腊兽蜡惠犁嘛售鳍敬坝烘颂叔卧纠络玩栏剑苹闯丢柏牺奎嚷宫肾笼郑叙奶芒霞朽妹茬码掀阁卑铰铵弦肤拟署淋梨迪俩撑呵申穆杯姑劝崩劣贺棕裁吐嫩凭曹摧疫鸟镍眉梁禾臭冈陵歧幻丧迭脆怨董镀酷罐逻橡浩撤驶享锦俺佛兔姿铅堤址溃胺皱晨胃氟灿漫泄枢戴孕扣沼逼肌碗巡吊盗蚜钩汤梢挨翼疯鞭扇冶烦悉蔓泼桌柯罩啮勾舰晋扳谴侯倡诊鸣桂奖贾朵霜萌滞蛹阐偿译稼捞棵戈诬撮洒萧奸饮涅衬镗纱瘤葛饼凶饵沾馏钼鞋姓汞枣溜疼凑醛颌肖篡邓撞搅铡卜歇妨挽审凯轧垒箭炕浑龟账趣俭泪泊乃捉窑驾汁凿饿帽湘郎欣慎芳肪蔽绵畅盲缚焕惜仰衍廷玄泻蒲捣妙帕蛇锰棘溪匪绒潘疲纬鸭坎盒拼荫兆熊悲捧锄奉陪玛微钨籍蚊漂糟嘉狼桶拾唉默皂吕馈酯邪孝睛屠畸峡祥蒂拜蝉艾叹淑烤骄篮伞尝吏吞雹勘萎闲佳耙剿鳃砍冯毅骑酚咳煮披佩杏偷摊肚昔韧唇喘吵荆刑拦镁蹄瓷澳塌饥垮滋钝醋捍诡哩宏瞬缔婆扛捷刹猿葱亏阮帆纂喀邵丑郁茂糠俞泳夸砚抖渴聪拱泌藻靶褶扯藤悄逊岘姜砾舆瘦咸焰榴涛垦媳圃胳肆仑叠攀莲债汪棍飘闷蛄蔗贷俊傲哺蝼颁蠢鲤噪膀氛洼栅凤溢炊浦橄陡胰仙柔咂呆姐哭懈兹赋岳楔蜕嵌僵晰挠熙婚缠鬃佣吾辞抚暑遮嚣赴钒嫁磺膛辣谨鄙桩惨杉秸蝇鞘匆娟晃涕萍钛眇趁邮蛮廉熏侦浴俯圭颇赢掏帜枚酮瓣宙谣踩奏竖鞍曝耶茄谐躺榄臼哎抄铆晓虱矢艇坞鞅履恳弥搜肛逸喉苔茁欠叭扔琴芦俱砌拢礁茫筹辱靳枕惩醉挣婶拣嫂荚膊铂昏滨誓夕扮昼艘遥戒逢苍匈慈愁唤蕾帐掺丈瘟顷裕誉祸坛彭橘匹傍淤烷绞豫庞咒芝荀弓罚捏嗨楞仕嘻沫崖瞅帘榨墒捐恕螨汛诞赏琼贩鸿铭嘱隘驰娃瞎遣跌挪耘悦钴魂裸薛鲢躲鳙悠碘沥嘿灶饶酬艳堪淹怠砷吁涤慰缴窜羔趟脖锭兜魔梗炒纽奈硼鼎惑栗谎袁滥亨浊埂垅匝轲遂乒踪俘怔陨噬惧颖茅摔粳垃圾疮厅鄂讥隧睁痰镶哀劈峻尸拐拳眠蔡腋哑契翁肋砧捆哟菊笨垛谦畴膝铍猜殷咽巾赌骚挫钦乓痹嘲渍杭蕉妻壶仆耸蛙廊蛛翠鹰喻扼蕴寇腥瞪籼咕猫况鹏钮搏溅胫萝臀鲫羞罕殿忌亭盅菇旨吻厌宰氰屏桐颚佐栖蒜卓殉搁煌橙窖眨墩躁沛翘蜘酰矫钵哗梭毂嗓禽壕凳筐耦漠屁恭钡驴姚怖滔煽虾哼匠禄稚蚁窃咐茵坊裤勿熬狱熄荐镰柑屯醚耿髓戊腕愉蕨眶煎盈慨晕盼勉虏釉皿瘀昭蝈嗽讽秃谚畔疽冕宵窍峪槐癌敷岂侮携脓卿丸柜碾咀烃怜蝽傻椰逮猎崎淆寺恼胖颊氩盯赠甩坪淘谭莎雏棺躯熹蚧懒踢爵衷仟陋撕缆晾狡庇蓖酿拓簇蚌阎雀鹿卤荸荠搂琢猾苷祛崭硕苞逞炫厄焚铀舵耽爽稠跗邱盏廖韵豹钓奠溴枫犬猖驯侨灼翟擂嘀汹磅嚼狮爹鹅贤颅煞萤烙蛀裹骡痢巷寡碧猴栋嗯柿篷吱厩鳄蕊甸澄闺荧黔嫌瑟玲撇敞葫硷乞蛭阜矾瞒聊琅傀儡啃澜绥豌删龚衔敛厢堕潭舶翔赔夷稗啉僻堰恋萘扒瞄韶笋蚴媒榆廊衅吼锹睦颤刽啬慧碑彝瘠祭侣赚蝶郡叨岔坟疤螬悔譬乖巍疡禹魁掷棋憎阱坠碲卟哄彬绑腑押揉枷菱蹈汰渎愧珩贬衫宅蛴夯吭烫灸竿酱倦镦寮戳睾拴孜迄秤笛羟蜱樟鲍蠕芍诫慕虹厦弊翰锣沪逝诈劫锂咧凋毡蓟椅毯斧绸矣祁襄`;\n"],"file":"index.js"} \ No newline at end of file diff --git a/demo/web-mobile/cocos2d-js.c901d.js b/demo/web-mobile/cocos2d-js.c901d.js new file mode 100644 index 00000000..c2420612 --- /dev/null +++ b/demo/web-mobile/cocos2d-js.c901d.js @@ -0,0 +1,55118 @@ +(function outer(modules, cache, entry) { + function newRequire(name, jumped) { + var module = cache[name]; + if (!module) { + var moduleData = modules[name]; + if (!moduleData) return; + var exports = {}; + module = cache[name] = { + exports: exports + }; + moduleData[0]((function(x) { + return newRequire(moduleData[1][x] || x); + }), module, exports); + } + return module.exports; + } + for (var i = 0; i < entry.length; i++) newRequire(entry[i]); + return newRequire; +})({ + 1: [ (function(require, module, exports) { + module.exports = { + 1001: "cocos2d: removeAction: Target not found", + 1002: "cc.ActionManager.removeActionByTag(): an invalid tag", + 1003: "cc.ActionManager.removeActionByTag(): target must be non-null", + 1004: "cc.ActionManager.getActionByTag(): an invalid tag", + 1005: "cocos2d : getActionByTag(tag = %s): Action not found", + 1006: "[Action step]. override me", + 1007: "[Action update]. override me", + 1008: "cocos2d: FiniteTimeAction#reverse: Implement me", + 1009: "cc.EaseElastic.reverse(): it should be overridden in subclass.", + 1010: "cc.IntervalAction: reverse not implemented.", + 1011: "cc.ActionInterval.setAmplitudeRate(): it should be overridden in subclass.", + 1012: "cc.ActionInterval.getAmplitudeRate(): it should be overridden in subclass.", + 1013: "The speed parameter error", + 1014: "The repeat parameter error", + 1015: "parameters should not be ending with null in Javascript", + 1016: "cc.RotateTo.reverse(): it should be overridden in subclass.", + 1019: "Failed to construct, Sequence construction needs two or more actions.", + 1020: "Failed to construct, Spawn construction needs two or more actions.", + 1021: "cc.Speed.initWithAction(): action must be non nil", + 1022: "cc.Follow.initWithAction(): followedNode must be non nil", + 1023: "cc.ActionEase.initWithAction(): action must be non nil", + 1024: "Invalid configuration. It must at least have one control point", + 1025: "cc.Sequence.initWithTwoActions(): arguments must all be non nil", + 1026: "cc.RepeatForever.initWithAction(): action must be non null", + 1027: "cc.Spawn.initWithTwoActions(): arguments must all be non null", + 1028: "cc.ReverseTime.initWithAction(): action must be non null", + 1029: "cc.ReverseTime.initWithAction(): the action was already passed in.", + 1030: "cc.Animate.initWithAnimation(): animation must be non-NULL", + 1031: "Illegal parameter get passed in cc.tween: %s.", + 1100: "Expected 'data' dict, but not found. Config file: %s", + 1101: "Please load the resource first : %s", + 1200: "cocos2d: Director: Error in gettimeofday", + 1201: "cocos2d: Director: unrecognized projection", + 1203: "cocos2d: Director: Error in gettimeofday", + 1204: "running scene should not null", + 1205: "the scene should not null", + 1206: "loadScene: The scene index to load (%s) is out of range.", + 1207: "loadScene: Unknown name type to load: '%s'", + 1208: "loadScene: Failed to load scene '%s' because '%s' is already being loaded.", + 1209: "loadScene: Can not load the scene '%s' because it was not in the build settings before playing.", + 1210: "Failed to preload '%s', %s", + 1211: "loadScene: The scene index to load (%s) is out of range.", + 1212: "loadScene: Unknown name type to load: '%s'", + 1213: "loadScene: Failed to load scene '%s' because '%s' is already loading", + 1214: "loadScene: Can not load the scene '%s' because it was not in the build settings before playing.", + 1215: "Failed to preload '%s', %s", + 1216: "Director.runSceneImmediate: scene is not valid", + 1300: "element type is wrong!", + 1400: "'%s' is deprecated, please use '%s' instead.", + 1404: "cc.spriteFrameCache is removed, please use cc.loader to load and cache sprite frames of atlas format.", + 1405: "The '%s' has been removed, please use '%s' instead.", + 1406: "'%s.%s' is removed", + 1408: "'%s' is not support in the '%s', please use '%s' instead.", + 1502: "cc.scheduler.scheduleCallbackForTarget(): target should be non-null.", + 1503: "cc.Scheduler.pauseTarget():target should be non-null", + 1504: "cc.Scheduler.resumeTarget():target should be non-null", + 1505: "cc.Scheduler.isTargetPaused():target should be non-null", + 1506: "warning: you CANNOT change update priority in scheduled function", + 1507: 'CCScheduler#scheduleSelector. Selector already scheduled. Updating interval from: %s to %s"', + 1508: "Argument callback must not be empty", + 1509: "Argument target must be non-nullptr", + 1510: "cc.Scheduler: Illegal target which doesn't have uuid or instanceId.", + 1511: "cc.Scheduler: pause state of the scheduled task doesn't match the element pause state in Scheduler, the given paused state will be ignored.", + 1513: "cc.Scheduler: scheduler stopped using `__instanceId` as id since v2.0, you should do scheduler.enableForTarget(target) before all scheduler API usage on target", + 1605: "child already added. It can't be added again", + 1606: "child must be non-null", + 1610: "cocos2d: removeChildByTag(tag = %s): child not found!", + 1612: "cc.Node.stopActionBy(): argument tag an invalid tag", + 1613: "cc.Node.getActionByTag(): argument tag is an invalid tag", + 1617: "child must be non-null", + 1618: "cc.Node.runAction(): action must be non-null", + 1619: "callback function must be non-null", + 1620: "interval must be positive", + 1623: "Set '%s' to normal node (not persist root node).", + 1624: "Replacing with the same sgNode", + 1625: "The replacement sgNode should not contain any child.", + 1626: "Should not set alpha via 'color', set 'opacity' please.", + 1627: "Not support for asynchronous creating node in SG", + 1632: "Node name can not include '/'.", + 1633: "Internal error, should not remove unknown node from parent.", + 1634: "addChild: The child to add must be instance of cc.Node, not %s.", + 1635: "reorderChild: this child is not in children list.", + 1636: "Node's zIndex value can't be greater than cc.macro.MAX_ZINDEX, setting to the maximum value", + 1637: "Node's zIndex value can't be smaller than cc.macro.MIN_ZINDEX, setting to the minimum value", + 1638: "Private node's zIndex can't be set, it will keep cc.macro.MIN_ZINDEX as its value", + 1639: "cc.Action is deprecated, please use cc.Tween instead", + 1800: "cc._EventListenerKeyboard.checkAvailable(): Invalid EventListenerKeyboard!", + 1801: "cc._EventListenerTouchOneByOne.checkAvailable(): Invalid EventListenerTouchOneByOne!", + 1802: "cc._EventListenerTouchAllAtOnce.checkAvailable(): Invalid EventListenerTouchAllAtOnce!", + 1803: "cc._EventListenerAcceleration.checkAvailable(): _onAccelerationEvent must be non-nil", + 1900: "Invalid parameter.", + 2e3: "Don't call this method if the event is for touch.", + 2200: "Design resolution not valid", + 2201: "should set resolutionPolicy", + 2300: "The touches is more than MAX_TOUCHES, nUnusedIndex = %s", + 2400: "WebGL error %s", + 2602: "cc.Sprite.setDisplayFrameWithAnimationName(): Frame not found", + 2603: "cc.Sprite.setDisplayFrameWithAnimationName(): Invalid frame index", + 2606: "cc.Sprite.initWithSpriteFrame(): spriteFrame should be non-null", + 2607: "cc.Sprite.initWithSpriteFrameName(): spriteFrameName should be non-null", + 2608: "%s is null, please check.", + 2609: "cc.Sprite.initWithFile(): filename should be non-null", + 2610: "cc.Sprite.setDisplayFrameWithAnimationName(): animationName must be non-null", + 2614: "cc.Sprite.addChild(): child should be non-null", + 2616: "cc.SpriteBatchNode.updateQuadFromSprite(): cc.SpriteBatchNode only supports cc.Sprites as children", + 2617: "cc.SpriteBatchNode.insertQuadFromSprite(): cc.SpriteBatchNode only supports cc.Sprites as children", + 2618: "cc.SpriteBatchNode.addChild(): cc.SpriteBatchNode only supports cc.Sprites as children", + 2619: "cc.SpriteBatchNode.addChild(): cc.Sprite is not using the same texture", + 2623: "cc.SpriteBatchNode.updateQuadFromSprite(): sprite should be non-null", + 2625: "too many tiles, only 16384 tiles will be show", + 2626: "Unrecognized fill type in bar fill", + 2627: "Can not generate quad", + 2628: "%s does not exist", + 2712: "Invalid spriteFrameName", + 3005: "cocos2d: '%s' id=%s %s x %s", + 3006: "cocos2d: '%s' id= HTMLCanvasElement %s x %s", + 3007: "cocos2d: TextureCache dumpDebugInfo: %s textures, HTMLCanvasElement for %s KB (%s MB)", + 3103: "cc.Texture.addImage(): path should be non-null", + 3112: "cc.Texture.addImage(): path should be non-null", + 3113: "NSInternalInconsistencyException", + 3116: "WebGLRenderingContext.CLAMP_TO_EDGE should be used in NPOT textures", + 3117: "Mimpap texture only works in POT textures", + 3119: "Lazy init texture with image element failed due to image loading failure: %s", + 3120: "Loading texture with unsupported type: '%s'. Add '%s' into 'cc.macro.SUPPORT_TEXTURE_FORMATS' please.", + 3121: "Can't find a texture format supported by the current platform! Please add a fallback format in the editor.", + 3300: "Rect width exceeds maximum margin: %s", + 3400: "Rect height exceeds maximum margin: %s", + 3401: "Set texture with a url of image is not supported anymore. Please use cc.assetManager.loadRemote to load a texture first.", + 3500: "0 priority is forbidden for fixed priority since it's used for scene graph based priority.", + 3501: "Invalid listener type!", + 3502: "Can't set fixed priority with scene graph based listener.", + 3503: "Invalid parameters.", + 3504: "listener must be a cc.EventListener object when adding a fixed priority listener", + 3505: "The listener has been registered, please don't register it again.", + 3506: "Unsupported listener target.", + 3507: "Invalid scene graph priority!", + 3508: "If program goes here, there should be event in dispatch.", + 3509: "_inDispatch should be 1 here.", + 3510: "%s's scene graph node not contains in the parent's children", + 3511: "event is undefined", + 3600: "cc.Class will automatically call super constructor of %s, you should not call it manually.", + 3601: "The editor property 'playOnFocus' should be used with 'executeInEditMode' in class '%s'", + 3602: "Unknown editor property '%s' in class '%s'.", + 3603: "Use 'cc.Float' or 'cc.Integer' instead of 'cc.Number' please.", + 3604: "Can only indicate one type attribute for %s.", + 3605: "The default value of %s is not instance of %s.", + 3606: "No needs to indicate the '%s' attribute for %s, which its default value is type of %s.", + 3607: "The default value of %s must be an empty string.", + 3608: "The type of %s must be cc.String, not String.", + 3609: "The type of %s must be cc.Boolean, not Boolean.", + 3610: "The type of %s must be cc.Float or cc.Integer, not Number.", + 3611: "Can not indicate the '%s' attribute for %s, which its default value is type of %s.", + 3612: "%s Just set the default value to 'new %s()' and it will be handled properly.", + 3613: "'No need to use 'serializable: false' or 'editorOnly: true' for the getter of '%s.%s', every getter is actually non-serialized.", + 3614: "Should not define constructor for cc.Component %s.", + 3615: "Each script can have at most one Component.", + 3616: "Should not specify class name %s for Component which defines in project.", + 3617: "Can not instantiate CCClass '%s' with arguments.", + 3618: "ctor of '%s' can not be another CCClass", + 3619: "ctor of '%s' must be function type", + 3620: "this._super declared in '%s.%s' but no super method defined", + 3621: "Unknown type of %s.%s, maybe you want is '%s'.", + 3622: "Unknown type of %s.%s, property should be defined in 'properties' or 'ctor'", + 3623: "Can not use 'editor' attribute, '%s' not inherits from Components.", + 3624: "'%s' overrided '%s' but '%s' is defined as 'false' so the super method will not be called. You can set '%s' to null to disable this warning.", + 3625: "[isChildClassOf] superclass should be function type, not", + 3626: "Can't remove '%s' because '%s' depends on it.", + 3627: "Should not add renderer component (%s) to a Canvas node.", + 3628: "Should not add %s to a node which size is already used by its other component.", + 3633: "Properties function of '%s' should return an object!", + 3634: "Disallow to use '.' in property name", + 3635: "Default array must be empty, set default value of %s.%s to [], and initialize in 'onLoad' or 'ctor' please. (just like 'this.%s = [...];')", + 3636: "Do not set default value to non-empty object, unless the object defines its own 'clone' function. Set default value of %s.%s to null or {}, and initialize in 'onLoad' or 'ctor' please. (just like 'this.%s = {foo: bar};')", + 3637: "Can not declare %s.%s, it is already defined in the prototype of %s", + 3638: "'%s': the getter of '%s' is already defined!", + 3639: "Can not apply the specified attribute to the getter of '%s.%s', attribute index: %s", + 3640: "'%s': the setter of '%s' is already defined!", + 3641: "Can not construct %s because it contains object property.", + 3642: "Cannot define %s.%s because static member name can not be '%s'.", + 3643: "Can not define a member called 'constructor' in the class '%s', please use 'ctor' instead.", + 3644: "Please define 'type' parameter of %s.%s as the actual constructor.", + 3645: "Please define 'type' parameter of %s.%s as the constructor of %s.", + 3646: "Unknown 'type' parameter of %s.%s\uff1a%s", + 3647: "The length of range array must be equal or greater than 2", + 3648: "Can not declare %s.%s method, it is already defined in the properties of %s.", + 3649: "CCClass %s have conflict between its ctor and __ctor__.", + 3651: 'Can not call `_super` or `prototype.ctor` in ES6 Classes "%s", use `super` instead please.', + 3652: "Failed to `new %s()` under the hood, %s\nIt is used for getting default values declared in TypeScript in the first place.\nPlease ensure the constructor can be called during the script's initialization.", + 3653: 'Please do not specifiy "default" attribute in decorator of "%s" property in "%s" class. \nDefault value must be initialized at their declaration:\n \n// Before:\n@property({\n type: cc.SpriteFrame\n default: null // <--\n})\nmyProp;\n// After:\n@property({\n type: cc.SpriteFrame\n})\nmyProp = null; // <--', + 3654: 'Please specifiy a default value for "%s.%s" at its declaration:\n \n// Before:\n@property(...)\nmyProp;\n// After:\n@property(...)\nmyProp = 0;', + 3655: 'Can not specifiy "get" or "set" attribute in decorator for "%s" property in "%s" class. \nPlease use:\n \n@property(...)\nget %s () {\n ...\n}\n@property\nset %s (value) {\n ...\n}', + 3700: "internal error: _prefab is undefined", + 3701: "Failed to load prefab asset for node '%s'", + 3800: "The target can not be made persist because it's not a cc.Node or it doesn't have _id property.", + 3801: "The node can not be made persist because it's not under root node.", + 3802: "The node can not be made persist because it's not in current scene.", + 3803: "The target can not be made persist because it's not a cc.Node or it doesn't have _id property.", + 3804: "getComponent: Type must be non-nil", + 3805: "Can't add component '%s' because %s already contains the same component.", + 3806: "Can't add component '%s' to %s because it conflicts with the existing '%s' derived component.", + 3807: "addComponent: Failed to get class '%s'", + 3808: "addComponent: Should not add component ('%s') when the scripts are still loading.", + 3809: "addComponent: The component to add must be a constructor", + 3810: "addComponent: The component to add must be child class of cc.Component", + 3811: "_addComponentAt: The component to add must be a constructor", + 3812: "_addComponentAt: Index out of range", + 3813: "removeComponent: Component must be non-nil", + 3814: "Argument must be non-nil", + 3815: "Component not owned by this entity", + 3816: "Node '%s' is already activating", + 3817: "Sorry, the component of '%s' which with an index of %s is corrupted! It has been removed.", + 3818: "Failed to read or parse project.json", + 3819: "Warning: target element is not a DIV or CANVAS", + 3820: "The renderer doesn't support the renderMode %s", + 3821: "Cannot change hierarchy while activating or deactivating the parent.", + 3900: "Invalid clip to add", + 3901: "Invalid clip to remove", + 3902: "clip is defaultClip, set force to true to force remove clip and animation state", + 3903: "animation state is playing, set force to true to force stop and remove clip and animation state", + 3904: "motion path of target [%s] in prop [%s] frame [%s] is not valid", + 3905: "sprite frames must be an Array.", + 3906: "Can't find easing type [%s]", + 3907: "animator not added or already removed", + 3912: "already-playing", + 4003: "Label font size can't be shirnked less than 0!", + 4004: "force notify all fonts loaded!", + 4011: "Property spriteFrame of Font '%s' is invalid. Using system font instead.", + 4012: "The texture of Font '%s' must be already loaded on JSB. Using system font instead.", + 4013: "Sorry, lineHeight of system font not supported on JSB.", + 4200: "MaskType: IMAGE_STENCIL only support WebGL mode.", + 4201: "The alphaThreshold invalid in Canvas Mode.", + 4202: "The inverted invalid in Canvas Mode.", + 4300: "can not found the %s page.", + 4400: "Invalid RichText img tag! The sprite frame name can't be found in the ImageAtlas!", + 4600: "Script attached to '%s' is missing or invalid.", + 4700: "The dom control is not created!", + 4800: "unknown asset type", + 4901: "loadRes: should not specify the extname in %s %s", + 4902: "No need to release non-cached asset.", + 4914: "Resources url '%s' does not exist.", + 4915: "Pack indices and data do not match in size", + 4916: "Failed to download package for %s", + 4921: "Invalid pipe or invalid index provided!", + 4922: "The pipe to be inserted is already in the pipeline!", + 4923: "Uuid Loader: Parse asset [ %s ] failed : %s", + 4924: "JSON Loader: Input item doesn't contain string content", + 4925: "Uuid Loader: Deserialize asset [ %s ] failed : %s", + 4926: "Audio Downloader: no web audio context.", + 4927: "Audio Downloader: audio not supported on this browser!", + 4928: "Load %s failed!", + 4929: "Load Webp ( %s ) failed", + 4930: "Load image ( %s ) failed", + 4932: 'Since v1.10, for any atlas ("%s") in the "resources" directory, it is not possible to find the contained SpriteFrames via `loadRes`, `getRes` or `releaseRes`. Load the SpriteAtlas first and then use `spriteAtlas.getSpriteFrame(name)` instead please.', + 4933: "Download Font [ %s ] failed, using Arial or system default font instead", + 5e3: "object already destroyed", + 5001: "object not yet destroyed", + 5100: "Not a plist file!", + 5200: "Warning: localStorage isn't enabled. Please confirm browser cookie or privacy option", + 5201: "browser don't support web audio", + 5202: "This feature supports WebGL render mode only.", + 5300: "Type of target to deserialize not matched with data: target is %s, data is %s", + 5301: "Can not find script '%s'", + 5302: "Can not find class '%s'", + 5303: "Failed to deserialize %s, missing _deserialize function.", + 5304: "Unable to deserialize version %s data.", + 5402: "cc.js.addon called on non-object:", + 5403: "cc.js.mixin: arguments must be type object:", + 5404: "The base class to extend from must be non-nil", + 5405: "The class to extend must be non-nil", + 5406: "Class should be extended before assigning any prototype members.", + 5500: "'notify' can not be used in 'get/set' !", + 5501: "'notify' must be used with 'default' !", + 5507: "The 'default' attribute of '%s.%s' must be an array", + 5508: "Invalid type of %s.%s", + 5510: "The 'type' attribute of '%s.%s' can not be 'Number', use cc.Float or cc.Integer instead please.", + 5511: "The 'type' attribute of '%s.%s' is undefined when loading script", + 5512: "Can not serialize '%s.%s' because the specified type is anonymous, please provide a class name or set the 'serializable' attribute of '%s.%s' to 'false'.", + 5513: "The 'default' value of '%s.%s' should not be used with a 'get' function.", + 5514: "The 'default' value of '%s.%s' should not be used with a 'set' function.", + 5515: "The 'default' value of '%s.%s' can not be an constructor. Set default to null please.", + 5516: "Property '%s.%s' must define at least one of 'default', 'get' or 'set'.", + 5517: "'%s.%s' hides inherited property '%s.%s'. To make the current property override that implementation, add the `override: true` attribute please.", + 5601: "Can not get current scene.", + 5602: "Scene is destroyed", + 5603: "reference node is destroyed", + 5700: "no %s or %s on %s", + 5800: "%s.lerp not yet implemented.", + 5801: "%s.clone not yet implemented.", + 5802: "%s.equals not yet implemented.", + 5900: "MotionStreak only support WebGL mode.", + 5901: "cc.MotionStreak.getOpacity has not been supported.", + 5902: "cc.MotionStreak.setOpacity has not been supported.", + 6e3: "Custom should not be false if file is not specified.", + 6001: "The new %s must not be NaN", + 6017: "Incomplete or corrupt PNG file", + 6018: "Invalid filter algorithm: %s", + 6019: "Invalid byte order value.", + 6020: "You forgot your towel!", + 6021: "Unknown Field Tag: %s", + 6022: "Too many bits requested", + 6023: "No bits requested", + 6024: "Cannot recover from missing StripByteCounts", + 6025: "Cannot handle sub-byte bits per sample", + 6026: "Cannot handle sub-byte bits per pixel", + 6027: "Palette image missing color map", + 6028: "Unknown Photometric Interpretation: %s", + 6029: "Unkown error", + 6030: "cc.ParticleSystem: error decoding or ungzipping textureImageData in plist '%s'", + 6031: "cc.ParticleSystem: unknown image format with Data in plist %s", + 6032: "cc.ParticleSystem.initWithDictionary() : error loading the texture in plist '%s'", + 6400: "asset.url is not usable in core process", + 6402: "AssetLibrary has already been initialized!", + 6500: "Widget target must be one of the parent nodes of it", + 6600: "collider not added or already removed", + 6601: "Can't find testFunc for (%s, $s).", + 6700: "Can't init canvas '%s' because it conflicts with the existing '%s', the scene should only have one active canvas at the same time.", + 6800: "Callback of event must be non-nil", + 6801: "The message must be provided", + 6900: "The thing you want to instantiate must be an object", + 6901: "The thing you want to instantiate is nil", + 6902: "The thing you want to instantiate is destroyed", + 6903: "The instantiate method for given asset do not implemented", + 6904: "Can not instantiate array", + 6905: "Can not instantiate DOM element", + 7100: "%s already defined in Enum.", + 7101: "Sorry, 'cc.Enum' not available on this platform, please report this error here: https://github.com/cocos-creator/engine/issues/new", + 7200: "Method 'initWithTMXFile' is no effect now, please set property 'tmxAsset' instead.", + 7201: "Method 'initWithXML' is no effect now, please set property 'tmxAsset' instead.", + 7202: "Add component TiledLayer into node failed.", + 7203: "Property 'mapLoaded' is unused now. Please write the logic to the callback 'start'.", + 7210: "TMX Hexa zOrder not supported", + 7211: "TMX invalid value", + 7215: "cocos2d: Warning: TMX Layer %s has no tiles", + 7216: "cocos2d: TMXFormat: Unsupported TMX version: %s", + 7217: "cocos2d: TMXFomat: Unsupported orientation: %s", + 7218: "cc.TMXMapInfo.parseXMLFile(): unsupported compression method", + 7219: "cc.TMXMapInfo.parseXMLFile(): Only base64 and/or gzip/zlib maps are supported", + 7221: "cc.TMXMapInfo.parseXMLFile(): Texture '%s' not found.", + 7222: "Parse %s failed.", + 7236: "cc.TMXLayer.getTileAt(): TMXLayer: the tiles map has been released", + 7237: "cc.TMXLayer.getTileGIDAt(): TMXLayer: the tiles map has been released", + 7238: "cc.TMXLayer.setTileGID(): TMXLayer: the tiles map has been released", + 7239: "cc.TMXLayer.setTileGID(): invalid gid: %s", + 7240: "cc.TMXLayer.getTileFlagsAt(): TMXLayer: the tiles map has been released", + 7241: "cc.TiledMap.initWithXML(): Map not found. Please check the filename.", + 7401: "Failed to set _defaultArmatureIndex for '%s' because the index is out of range.", + 7402: "Failed to set _animationIndex for '%s' because the index is out of range.", + 7501: "Failed to set _defaultSkinIndex for '%s' because the index is out of range.", + 7502: "Failed to set _animationIndex for '%s' because its skeletonData is invalid.", + 7503: "Failed to set _animationIndex for '%s' because the index is out of range.", + 7504: "Can not render dynamic created SkeletonData", + 7506: "Failed to load spine atlas '$s'", + 7507: "Please re-import '%s' because its textures is not initialized! (This workflow will be improved in the future.)", + 7508: "The atlas asset of '%s' is not exists!", + 7509: "Spine: Animation not found: %s", + 7510: "Spine: Animation not found: %s", + 7600: "The context of RenderTexture is invalid.", + 7601: "cc.RenderTexture._initWithWidthAndHeightForWebGL() : only RGB and RGBA formats are valid for a render texture;", + 7602: "Could not attach texture to the framebuffer", + 7603: "clearDepth isn't supported on Cocos2d-Html5", + 7604: "saveToFile isn't supported on Cocos2d-Html5", + 7605: "newCCImage isn't supported on Cocos2d-Html5", + 7700: "On the web is always keep the aspect ratio", + 7701: "Can't know status", + 7702: "Video player's duration is not ready to get now!", + 7800: "Web does not support loading", + 7801: "Web does not support query history", + 7802: "Web does not support query history", + 7803: "The current browser does not support the GoBack", + 7804: "The current browser does not support the GoForward", + 7805: "Web does not support zoom", + 7900: "cc.math.Matrix3.assign(): current matrix equals matIn", + 7901: "cc.math.mat4Assign(): pOut equals pIn", + 7902: "cc.mat.Matrix4.assignFrom(): mat4 equals current matrix", + 7903: "cc.math.Matrix4 equal: pMat1 and pMat2 are same object.", + 7904: "cc.math.Matrix4.extractPlane: Invalid plane index", + 7905: "cc.math.mat4Assign(): pOut equals pIn", + 7906: "cc.mat.Matrix4.assignFrom(): mat4 equals current matrix", + 7907: "cc.math.Matrix4 equals: pMat1 and pMat2 are same object.", + 7908: "Invalid matrix mode specified", + 7909: "current quaternion is an invalid value", + 8e3: "Can't handle this field type or size", + 8001: "No bytes requested", + 8002: "Too many bytes requested", + 8003: "Missing StripByteCounts!", + 8103: "cc.GLProgram.link(): Cannot link invalid program", + 8104: "cocos2d: ERROR: Failed to link program: %s", + 8105: "cocos2d: cc.shaderCache._loadDefaultShader, error shader type", + 8106: "Please load the resource firset : %s", + 8107: "cc.GLProgram.getUniformLocationForName(): uniform name should be non-null", + 8108: "cc.GLProgram.getUniformLocationForName(): Invalid operation. Cannot get uniform location when program is not initialized", + 8109: "modelView matrix is undefined.", + 8200: "Please set node's active instead of rigidbody's enabled.", + 8300: "Should only one camera exists, please check your project.", + 8301: "Camera does not support Canvas Mode.", + 8400: "Wrong type arguments, 'filePath' must be a String.", + 8401: "Since 1.10, `%s` accept %s instance directly, not a URL string. Please directly reference the %s object in your script, or load %s by loader first. Don't use %s's URL anymore.", + 9e3: "Stencil manager does not support level bigger than %d in this device.", + 9001: "Stencil manager is already empty, cannot pop any mask.", + 9100: "LabelAtlas '%s' cannot be loaded, raw texture does not exist.", + 9101: "LabelAtlas '%s' cannot be loaded, fnt data does not exist.", + 9102: "Program not support highp precision, will change to mediump.", + 9103: "%s : Failed to set property [%s], property not found.", + 9104: "%s : Failed to define [%s], define not found.", + 9105: "%s : Failed to set property [%s], property length not correct.", + 9106: "%s : Set property [%s] warning : should transform object to ArrayBuffer.", + 9107: "%s : illegal property: [%s], myabe defined an unused property;", + 9200: "cc.view.enableAntiAlias is deprecated, please use cc.Texture2D.setFilters instead", + "0100": "%s not yet implemented." + }; + }), {} ], + 2: [ (function(require, module, exports) { + "use strict"; + require("../core/platform/CCClass"); + var misc = require("../core/utils/misc"); + cc.Action = cc.Class({ + name: "cc.Action", + ctor: function ctor() { + this.originalTarget = null; + this.target = null; + this.tag = cc.Action.TAG_INVALID; + }, + clone: function clone() { + var action = new cc.Action(); + action.originalTarget = null; + action.target = null; + action.tag = this.tag; + return action; + }, + isDone: function isDone() { + return true; + }, + startWithTarget: function startWithTarget(target) { + this.originalTarget = target; + this.target = target; + }, + stop: function stop() { + this.target = null; + }, + step: function step(dt) { + cc.logID(1006); + }, + update: function update(dt) { + cc.logID(1007); + }, + getTarget: function getTarget() { + return this.target; + }, + setTarget: function setTarget(target) { + this.target = target; + }, + getOriginalTarget: function getOriginalTarget() { + return this.originalTarget; + }, + setOriginalTarget: function setOriginalTarget(originalTarget) { + this.originalTarget = originalTarget; + }, + getTag: function getTag() { + return this.tag; + }, + setTag: function setTag(tag) { + this.tag = tag; + }, + retain: function retain() {}, + release: function release() {} + }); + cc.Action.TAG_INVALID = -1; + cc.FiniteTimeAction = cc.Class({ + name: "cc.FiniteTimeAction", + extends: cc.Action, + ctor: function ctor() { + this._duration = 0; + }, + getDuration: function getDuration() { + return this._duration * (this._timesForRepeat || 1); + }, + setDuration: function setDuration(duration) { + this._duration = duration; + }, + reverse: function reverse() { + cc.logID(1008); + return null; + }, + clone: function clone() { + return new cc.FiniteTimeAction(); + } + }); + cc.Speed = cc.Class({ + name: "cc.Speed", + extends: cc.Action, + ctor: function ctor(action, speed) { + this._speed = 0; + this._innerAction = null; + action && this.initWithAction(action, speed); + }, + getSpeed: function getSpeed() { + return this._speed; + }, + setSpeed: function setSpeed(speed) { + this._speed = speed; + }, + initWithAction: function initWithAction(action, speed) { + if (!action) { + cc.errorID(1021); + return false; + } + this._innerAction = action; + this._speed = speed; + return true; + }, + clone: function clone() { + var action = new cc.Speed(); + action.initWithAction(this._innerAction.clone(), this._speed); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.Action.prototype.startWithTarget.call(this, target); + this._innerAction.startWithTarget(target); + }, + stop: function stop() { + this._innerAction.stop(); + cc.Action.prototype.stop.call(this); + }, + step: function step(dt) { + this._innerAction.step(dt * this._speed); + }, + isDone: function isDone() { + return this._innerAction.isDone(); + }, + reverse: function reverse() { + return new cc.Speed(this._innerAction.reverse(), this._speed); + }, + setInnerAction: function setInnerAction(action) { + this._innerAction !== action && (this._innerAction = action); + }, + getInnerAction: function getInnerAction() { + return this._innerAction; + } + }); + cc.speed = function(action, speed) { + return new cc.Speed(action, speed); + }; + cc.Follow = cc.Class({ + name: "cc.Follow", + extends: cc.Action, + ctor: function ctor(followedNode, rect) { + this._followedNode = null; + this._boundarySet = false; + this._boundaryFullyCovered = false; + this._halfScreenSize = null; + this._fullScreenSize = null; + this.leftBoundary = 0; + this.rightBoundary = 0; + this.topBoundary = 0; + this.bottomBoundary = 0; + this._worldRect = cc.rect(0, 0, 0, 0); + followedNode && (rect ? this.initWithTarget(followedNode, rect) : this.initWithTarget(followedNode)); + }, + clone: function clone() { + var action = new cc.Follow(); + var locRect = this._worldRect; + var rect = new cc.Rect(locRect.x, locRect.y, locRect.width, locRect.height); + action.initWithTarget(this._followedNode, rect); + return action; + }, + isBoundarySet: function isBoundarySet() { + return this._boundarySet; + }, + setBoudarySet: function setBoudarySet(value) { + this._boundarySet = value; + }, + initWithTarget: function initWithTarget(followedNode, rect) { + if (!followedNode) { + cc.errorID(1022); + return false; + } + var _this = this; + rect = rect || cc.rect(0, 0, 0, 0); + _this._followedNode = followedNode; + _this._worldRect = rect; + _this._boundarySet = !(0 === rect.width && 0 === rect.height); + _this._boundaryFullyCovered = false; + var winSize = cc.winSize; + _this._fullScreenSize = cc.v2(winSize.width, winSize.height); + _this._halfScreenSize = _this._fullScreenSize.mul(.5); + if (_this._boundarySet) { + _this.leftBoundary = -(rect.x + rect.width - _this._fullScreenSize.x); + _this.rightBoundary = -rect.x; + _this.topBoundary = -rect.y; + _this.bottomBoundary = -(rect.y + rect.height - _this._fullScreenSize.y); + _this.rightBoundary < _this.leftBoundary && (_this.rightBoundary = _this.leftBoundary = (_this.leftBoundary + _this.rightBoundary) / 2); + _this.topBoundary < _this.bottomBoundary && (_this.topBoundary = _this.bottomBoundary = (_this.topBoundary + _this.bottomBoundary) / 2); + _this.topBoundary === _this.bottomBoundary && _this.leftBoundary === _this.rightBoundary && (_this._boundaryFullyCovered = true); + } + return true; + }, + step: function step(dt) { + var targetWorldPos = this.target.convertToWorldSpaceAR(cc.Vec2.ZERO); + var followedWorldPos = this._followedNode.convertToWorldSpaceAR(cc.Vec2.ZERO); + var delta = targetWorldPos.sub(followedWorldPos); + var tempPos = this.target.parent.convertToNodeSpaceAR(delta.add(this._halfScreenSize)); + if (this._boundarySet) { + if (this._boundaryFullyCovered) return; + this.target.setPosition(misc.clampf(tempPos.x, this.leftBoundary, this.rightBoundary), misc.clampf(tempPos.y, this.bottomBoundary, this.topBoundary)); + } else this.target.setPosition(tempPos.x, tempPos.y); + }, + isDone: function isDone() { + return !this._followedNode.activeInHierarchy; + }, + stop: function stop() { + this.target = null; + cc.Action.prototype.stop.call(this); + } + }); + cc.follow = function(followedNode, rect) { + return new cc.Follow(followedNode, rect); + }; + }), { + "../core/platform/CCClass": 121, + "../core/utils/misc": 205 + } ], + 3: [ (function(require, module, exports) { + "use strict"; + function cardinalSplineAt(p0, p1, p2, p3, tension, t) { + var t2 = t * t; + var t3 = t2 * t; + var s = (1 - tension) / 2; + var b1 = s * (2 * t2 - t3 - t); + var b2 = s * (-t3 + t2) + (2 * t3 - 3 * t2 + 1); + var b3 = s * (t3 - 2 * t2 + t) + (-2 * t3 + 3 * t2); + var b4 = s * (t3 - t2); + var x = p0.x * b1 + p1.x * b2 + p2.x * b3 + p3.x * b4; + var y = p0.y * b1 + p1.y * b2 + p2.y * b3 + p3.y * b4; + return cc.v2(x, y); + } + function getControlPointAt(controlPoints, pos) { + var p = Math.min(controlPoints.length - 1, Math.max(pos, 0)); + return controlPoints[p]; + } + function reverseControlPoints(controlPoints) { + var newArray = []; + for (var i = controlPoints.length - 1; i >= 0; i--) newArray.push(cc.v2(controlPoints[i].x, controlPoints[i].y)); + return newArray; + } + function cloneControlPoints(controlPoints) { + var newArray = []; + for (var i = 0; i < controlPoints.length; i++) newArray.push(cc.v2(controlPoints[i].x, controlPoints[i].y)); + return newArray; + } + cc.CardinalSplineTo = cc.Class({ + name: "cc.CardinalSplineTo", + extends: cc.ActionInterval, + ctor: function ctor(duration, points, tension) { + this._points = []; + this._deltaT = 0; + this._tension = 0; + this._previousPosition = null; + this._accumulatedDiff = null; + void 0 !== tension && cc.CardinalSplineTo.prototype.initWithDuration.call(this, duration, points, tension); + }, + initWithDuration: function initWithDuration(duration, points, tension) { + if (!points || 0 === points.length) { + cc.errorID(1024); + return false; + } + if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) { + this.setPoints(points); + this._tension = tension; + return true; + } + return false; + }, + clone: function clone() { + var action = new cc.CardinalSplineTo(); + action.initWithDuration(this._duration, cloneControlPoints(this._points), this._tension); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.ActionInterval.prototype.startWithTarget.call(this, target); + this._deltaT = 1 / (this._points.length - 1); + this._previousPosition = cc.v2(this.target.x, this.target.y); + this._accumulatedDiff = cc.v2(0, 0); + }, + update: function update(dt) { + dt = this._computeEaseTime(dt); + var p, lt; + var ps = this._points; + if (1 === dt) { + p = ps.length - 1; + lt = 1; + } else { + var locDT = this._deltaT; + p = 0 | dt / locDT; + lt = (dt - locDT * p) / locDT; + } + var newPos = cardinalSplineAt(getControlPointAt(ps, p - 1), getControlPointAt(ps, p - 0), getControlPointAt(ps, p + 1), getControlPointAt(ps, p + 2), this._tension, lt); + if (cc.macro.ENABLE_STACKABLE_ACTIONS) { + var tempX, tempY; + tempX = this.target.x - this._previousPosition.x; + tempY = this.target.y - this._previousPosition.y; + if (0 !== tempX || 0 !== tempY) { + var locAccDiff = this._accumulatedDiff; + tempX = locAccDiff.x + tempX; + tempY = locAccDiff.y + tempY; + locAccDiff.x = tempX; + locAccDiff.y = tempY; + newPos.x += tempX; + newPos.y += tempY; + } + } + this.updatePosition(newPos); + }, + reverse: function reverse() { + var reversePoints = reverseControlPoints(this._points); + return cc.cardinalSplineTo(this._duration, reversePoints, this._tension); + }, + updatePosition: function updatePosition(newPos) { + this.target.setPosition(newPos); + this._previousPosition = newPos; + }, + getPoints: function getPoints() { + return this._points; + }, + setPoints: function setPoints(points) { + this._points = points; + } + }); + cc.cardinalSplineTo = function(duration, points, tension) { + return new cc.CardinalSplineTo(duration, points, tension); + }; + cc.CardinalSplineBy = cc.Class({ + name: "cc.CardinalSplineBy", + extends: cc.CardinalSplineTo, + ctor: function ctor(duration, points, tension) { + this._startPosition = cc.v2(0, 0); + void 0 !== tension && this.initWithDuration(duration, points, tension); + }, + startWithTarget: function startWithTarget(target) { + cc.CardinalSplineTo.prototype.startWithTarget.call(this, target); + this._startPosition.x = target.x; + this._startPosition.y = target.y; + }, + reverse: function reverse() { + var copyConfig = this._points.slice(); + var current; + var p = copyConfig[0]; + for (var i = 1; i < copyConfig.length; ++i) { + current = copyConfig[i]; + copyConfig[i] = current.sub(p); + p = current; + } + var reverseArray = reverseControlPoints(copyConfig); + p = reverseArray[reverseArray.length - 1]; + reverseArray.pop(); + p.x = -p.x; + p.y = -p.y; + reverseArray.unshift(p); + for (var i = 1; i < reverseArray.length; ++i) { + current = reverseArray[i]; + current.x = -current.x; + current.y = -current.y; + current.x += p.x; + current.y += p.y; + reverseArray[i] = current; + p = current; + } + return cc.cardinalSplineBy(this._duration, reverseArray, this._tension); + }, + updatePosition: function updatePosition(newPos) { + var pos = this._startPosition; + var posX = newPos.x + pos.x; + var posY = newPos.y + pos.y; + this._previousPosition.x = posX; + this._previousPosition.y = posY; + this.target.setPosition(posX, posY); + }, + clone: function clone() { + var a = new cc.CardinalSplineBy(); + a.initWithDuration(this._duration, cloneControlPoints(this._points), this._tension); + return a; + } + }); + cc.cardinalSplineBy = function(duration, points, tension) { + return new cc.CardinalSplineBy(duration, points, tension); + }; + cc.CatmullRomTo = cc.Class({ + name: "cc.CatmullRomTo", + extends: cc.CardinalSplineTo, + ctor: function ctor(dt, points) { + points && this.initWithDuration(dt, points); + }, + initWithDuration: function initWithDuration(dt, points) { + return cc.CardinalSplineTo.prototype.initWithDuration.call(this, dt, points, .5); + }, + clone: function clone() { + var action = new cc.CatmullRomTo(); + action.initWithDuration(this._duration, cloneControlPoints(this._points)); + return action; + } + }); + cc.catmullRomTo = function(dt, points) { + return new cc.CatmullRomTo(dt, points); + }; + cc.CatmullRomBy = cc.Class({ + name: "cc.CatmullRomBy", + extends: cc.CardinalSplineBy, + ctor: function ctor(dt, points) { + points && this.initWithDuration(dt, points); + }, + initWithDuration: function initWithDuration(dt, points) { + return cc.CardinalSplineTo.prototype.initWithDuration.call(this, dt, points, .5); + }, + clone: function clone() { + var action = new cc.CatmullRomBy(); + action.initWithDuration(this._duration, cloneControlPoints(this._points)); + return action; + } + }); + cc.catmullRomBy = function(dt, points) { + return new cc.CatmullRomBy(dt, points); + }; + }), {} ], + 4: [ (function(require, module, exports) { + "use strict"; + cc.easeIn = function(rate) { + return { + _rate: rate, + easing: function easing(dt) { + return Math.pow(dt, this._rate); + }, + reverse: function reverse() { + return cc.easeIn(1 / this._rate); + } + }; + }; + cc.easeOut = function(rate) { + return { + _rate: rate, + easing: function easing(dt) { + return Math.pow(dt, 1 / this._rate); + }, + reverse: function reverse() { + return cc.easeOut(1 / this._rate); + } + }; + }; + cc.easeInOut = function(rate) { + return { + _rate: rate, + easing: function easing(dt) { + dt *= 2; + return dt < 1 ? .5 * Math.pow(dt, this._rate) : 1 - .5 * Math.pow(2 - dt, this._rate); + }, + reverse: function reverse() { + return cc.easeInOut(this._rate); + } + }; + }; + var _easeExponentialInObj = { + easing: function easing(dt) { + return 0 === dt ? 0 : Math.pow(2, 10 * (dt - 1)); + }, + reverse: function reverse() { + return _easeExponentialOutObj; + } + }; + cc.easeExponentialIn = function() { + return _easeExponentialInObj; + }; + var _easeExponentialOutObj = { + easing: function easing(dt) { + return 1 === dt ? 1 : 1 - Math.pow(2, -10 * dt); + }, + reverse: function reverse() { + return _easeExponentialInObj; + } + }; + cc.easeExponentialOut = function() { + return _easeExponentialOutObj; + }; + var _easeExponentialInOutObj = { + easing: function easing(dt) { + if (1 !== dt && 0 !== dt) { + dt *= 2; + return dt < 1 ? .5 * Math.pow(2, 10 * (dt - 1)) : .5 * (2 - Math.pow(2, -10 * (dt - 1))); + } + return dt; + }, + reverse: function reverse() { + return _easeExponentialInOutObj; + } + }; + cc.easeExponentialInOut = function() { + return _easeExponentialInOutObj; + }; + var _easeSineInObj = { + easing: function easing(dt) { + return 0 === dt || 1 === dt ? dt : -1 * Math.cos(dt * Math.PI / 2) + 1; + }, + reverse: function reverse() { + return _easeSineOutObj; + } + }; + cc.easeSineIn = function() { + return _easeSineInObj; + }; + var _easeSineOutObj = { + easing: function easing(dt) { + return 0 === dt || 1 === dt ? dt : Math.sin(dt * Math.PI / 2); + }, + reverse: function reverse() { + return _easeSineInObj; + } + }; + cc.easeSineOut = function() { + return _easeSineOutObj; + }; + var _easeSineInOutObj = { + easing: function easing(dt) { + return 0 === dt || 1 === dt ? dt : -.5 * (Math.cos(Math.PI * dt) - 1); + }, + reverse: function reverse() { + return _easeSineInOutObj; + } + }; + cc.easeSineInOut = function() { + return _easeSineInOutObj; + }; + var _easeElasticInObj = { + easing: function easing(dt) { + if (0 === dt || 1 === dt) return dt; + dt -= 1; + return -Math.pow(2, 10 * dt) * Math.sin((dt - .075) * Math.PI * 2 / .3); + }, + reverse: function reverse() { + return _easeElasticOutObj; + } + }; + cc.easeElasticIn = function(period) { + if (period && .3 !== period) return { + _period: period, + easing: function easing(dt) { + if (0 === dt || 1 === dt) return dt; + dt -= 1; + return -Math.pow(2, 10 * dt) * Math.sin((dt - this._period / 4) * Math.PI * 2 / this._period); + }, + reverse: function reverse() { + return cc.easeElasticOut(this._period); + } + }; + return _easeElasticInObj; + }; + var _easeElasticOutObj = { + easing: function easing(dt) { + return 0 === dt || 1 === dt ? dt : Math.pow(2, -10 * dt) * Math.sin((dt - .075) * Math.PI * 2 / .3) + 1; + }, + reverse: function reverse() { + return _easeElasticInObj; + } + }; + cc.easeElasticOut = function(period) { + if (period && .3 !== period) return { + _period: period, + easing: function easing(dt) { + return 0 === dt || 1 === dt ? dt : Math.pow(2, -10 * dt) * Math.sin((dt - this._period / 4) * Math.PI * 2 / this._period) + 1; + }, + reverse: function reverse() { + return cc.easeElasticIn(this._period); + } + }; + return _easeElasticOutObj; + }; + cc.easeElasticInOut = function(period) { + period = period || .3; + return { + _period: period, + easing: function easing(dt) { + var newT = 0; + var locPeriod = this._period; + if (0 === dt || 1 === dt) newT = dt; else { + dt *= 2; + locPeriod || (locPeriod = this._period = .3 * 1.5); + var s = locPeriod / 4; + dt -= 1; + newT = dt < 0 ? -.5 * Math.pow(2, 10 * dt) * Math.sin((dt - s) * Math.PI * 2 / locPeriod) : Math.pow(2, -10 * dt) * Math.sin((dt - s) * Math.PI * 2 / locPeriod) * .5 + 1; + } + return newT; + }, + reverse: function reverse() { + return cc.easeElasticInOut(this._period); + } + }; + }; + function _bounceTime(time1) { + if (time1 < 1 / 2.75) return 7.5625 * time1 * time1; + if (time1 < 2 / 2.75) { + time1 -= 1.5 / 2.75; + return 7.5625 * time1 * time1 + .75; + } + if (time1 < 2.5 / 2.75) { + time1 -= 2.25 / 2.75; + return 7.5625 * time1 * time1 + .9375; + } + time1 -= 2.625 / 2.75; + return 7.5625 * time1 * time1 + .984375; + } + var _easeBounceInObj = { + easing: function easing(dt) { + return 1 - _bounceTime(1 - dt); + }, + reverse: function reverse() { + return _easeBounceOutObj; + } + }; + cc.easeBounceIn = function() { + return _easeBounceInObj; + }; + var _easeBounceOutObj = { + easing: function easing(dt) { + return _bounceTime(dt); + }, + reverse: function reverse() { + return _easeBounceInObj; + } + }; + cc.easeBounceOut = function() { + return _easeBounceOutObj; + }; + var _easeBounceInOutObj = { + easing: function easing(time1) { + var newT; + if (time1 < .5) { + time1 *= 2; + newT = .5 * (1 - _bounceTime(1 - time1)); + } else newT = .5 * _bounceTime(2 * time1 - 1) + .5; + return newT; + }, + reverse: function reverse() { + return _easeBounceInOutObj; + } + }; + cc.easeBounceInOut = function() { + return _easeBounceInOutObj; + }; + var _easeBackInObj = { + easing: function easing(time1) { + var overshoot = 1.70158; + return 0 === time1 || 1 === time1 ? time1 : time1 * time1 * ((overshoot + 1) * time1 - overshoot); + }, + reverse: function reverse() { + return _easeBackOutObj; + } + }; + cc.easeBackIn = function() { + return _easeBackInObj; + }; + var _easeBackOutObj = { + easing: function easing(time1) { + if (0 === time1) return 0; + var overshoot = 1.70158; + time1 -= 1; + return time1 * time1 * ((overshoot + 1) * time1 + overshoot) + 1; + }, + reverse: function reverse() { + return _easeBackInObj; + } + }; + cc.easeBackOut = function() { + return _easeBackOutObj; + }; + var _easeBackInOutObj = { + easing: function easing(time1) { + var overshoot = 2.5949095; + time1 *= 2; + if (time1 < 1) return time1 * time1 * ((overshoot + 1) * time1 - overshoot) / 2; + time1 -= 2; + return time1 * time1 * ((overshoot + 1) * time1 + overshoot) / 2 + 1; + }, + reverse: function reverse() { + return _easeBackInOutObj; + } + }; + cc.easeBackInOut = function() { + return _easeBackInOutObj; + }; + cc.easeBezierAction = function(a, b, c, d) { + return { + easing: function easing(t) { + return Math.pow(1 - t, 3) * a + 3 * t * Math.pow(1 - t, 2) * b + 3 * Math.pow(t, 2) * (1 - t) * c + Math.pow(t, 3) * d; + }, + reverse: function reverse() { + return cc.easeBezierAction(d, c, b, a); + } + }; + }; + var _easeQuadraticActionIn = { + easing: function easing(time) { + return Math.pow(time, 2); + }, + reverse: function reverse() { + return _easeQuadraticActionIn; + } + }; + cc.easeQuadraticActionIn = function() { + return _easeQuadraticActionIn; + }; + var _easeQuadraticActionOut = { + easing: function easing(time) { + return -time * (time - 2); + }, + reverse: function reverse() { + return _easeQuadraticActionOut; + } + }; + cc.easeQuadraticActionOut = function() { + return _easeQuadraticActionOut; + }; + var _easeQuadraticActionInOut = { + easing: function easing(time) { + var resultTime = time; + time *= 2; + if (time < 1) resultTime = time * time * .5; else { + --time; + resultTime = -.5 * (time * (time - 2) - 1); + } + return resultTime; + }, + reverse: function reverse() { + return _easeQuadraticActionInOut; + } + }; + cc.easeQuadraticActionInOut = function() { + return _easeQuadraticActionInOut; + }; + var _easeQuarticActionIn = { + easing: function easing(time) { + return time * time * time * time; + }, + reverse: function reverse() { + return _easeQuarticActionIn; + } + }; + cc.easeQuarticActionIn = function() { + return _easeQuarticActionIn; + }; + var _easeQuarticActionOut = { + easing: function easing(time) { + time -= 1; + return -(time * time * time * time - 1); + }, + reverse: function reverse() { + return _easeQuarticActionOut; + } + }; + cc.easeQuarticActionOut = function() { + return _easeQuarticActionOut; + }; + var _easeQuarticActionInOut = { + easing: function easing(time) { + time *= 2; + if (time < 1) return .5 * time * time * time * time; + time -= 2; + return -.5 * (time * time * time * time - 2); + }, + reverse: function reverse() { + return _easeQuarticActionInOut; + } + }; + cc.easeQuarticActionInOut = function() { + return _easeQuarticActionInOut; + }; + var _easeQuinticActionIn = { + easing: function easing(time) { + return time * time * time * time * time; + }, + reverse: function reverse() { + return _easeQuinticActionIn; + } + }; + cc.easeQuinticActionIn = function() { + return _easeQuinticActionIn; + }; + var _easeQuinticActionOut = { + easing: function easing(time) { + time -= 1; + return time * time * time * time * time + 1; + }, + reverse: function reverse() { + return _easeQuinticActionOut; + } + }; + cc.easeQuinticActionOut = function() { + return _easeQuinticActionOut; + }; + var _easeQuinticActionInOut = { + easing: function easing(time) { + time *= 2; + if (time < 1) return .5 * time * time * time * time * time; + time -= 2; + return .5 * (time * time * time * time * time + 2); + }, + reverse: function reverse() { + return _easeQuinticActionInOut; + } + }; + cc.easeQuinticActionInOut = function() { + return _easeQuinticActionInOut; + }; + var _easeCircleActionIn = { + easing: function easing(time) { + return -1 * (Math.sqrt(1 - time * time) - 1); + }, + reverse: function reverse() { + return _easeCircleActionIn; + } + }; + cc.easeCircleActionIn = function() { + return _easeCircleActionIn; + }; + var _easeCircleActionOut = { + easing: function easing(time) { + time -= 1; + return Math.sqrt(1 - time * time); + }, + reverse: function reverse() { + return _easeCircleActionOut; + } + }; + cc.easeCircleActionOut = function() { + return _easeCircleActionOut; + }; + var _easeCircleActionInOut = { + easing: function easing(time) { + time *= 2; + if (time < 1) return -.5 * (Math.sqrt(1 - time * time) - 1); + time -= 2; + return .5 * (Math.sqrt(1 - time * time) + 1); + }, + reverse: function reverse() { + return _easeCircleActionInOut; + } + }; + cc.easeCircleActionInOut = function() { + return _easeCircleActionInOut; + }; + var _easeCubicActionIn = { + easing: function easing(time) { + return time * time * time; + }, + reverse: function reverse() { + return _easeCubicActionIn; + } + }; + cc.easeCubicActionIn = function() { + return _easeCubicActionIn; + }; + var _easeCubicActionOut = { + easing: function easing(time) { + time -= 1; + return time * time * time + 1; + }, + reverse: function reverse() { + return _easeCubicActionOut; + } + }; + cc.easeCubicActionOut = function() { + return _easeCubicActionOut; + }; + var _easeCubicActionInOut = { + easing: function easing(time) { + time *= 2; + if (time < 1) return .5 * time * time * time; + time -= 2; + return .5 * (time * time * time + 2); + }, + reverse: function reverse() { + return _easeCubicActionInOut; + } + }; + cc.easeCubicActionInOut = function() { + return _easeCubicActionInOut; + }; + }), {} ], + 5: [ (function(require, module, exports) { + "use strict"; + cc.ActionInstant = cc.Class({ + name: "cc.ActionInstant", + extends: cc.FiniteTimeAction, + isDone: function isDone() { + return true; + }, + step: function step(dt) { + this.update(1); + }, + update: function update(dt) {}, + reverse: function reverse() { + return this.clone(); + }, + clone: function clone() { + return new cc.ActionInstant(); + } + }); + cc.Show = cc.Class({ + name: "cc.Show", + extends: cc.ActionInstant, + update: function update(dt) { + var _renderComps = this.target.getComponentsInChildren(cc.RenderComponent); + for (var i = 0; i < _renderComps.length; ++i) { + var render = _renderComps[i]; + render.enabled = true; + } + }, + reverse: function reverse() { + return new cc.Hide(); + }, + clone: function clone() { + return new cc.Show(); + } + }); + cc.show = function() { + return new cc.Show(); + }; + cc.Hide = cc.Class({ + name: "cc.Hide", + extends: cc.ActionInstant, + update: function update(dt) { + var _renderComps = this.target.getComponentsInChildren(cc.RenderComponent); + for (var i = 0; i < _renderComps.length; ++i) { + var render = _renderComps[i]; + render.enabled = false; + } + }, + reverse: function reverse() { + return new cc.Show(); + }, + clone: function clone() { + return new cc.Hide(); + } + }); + cc.hide = function() { + return new cc.Hide(); + }; + cc.ToggleVisibility = cc.Class({ + name: "cc.ToggleVisibility", + extends: cc.ActionInstant, + update: function update(dt) { + var _renderComps = this.target.getComponentsInChildren(cc.RenderComponent); + for (var i = 0; i < _renderComps.length; ++i) { + var render = _renderComps[i]; + render.enabled = !render.enabled; + } + }, + reverse: function reverse() { + return new cc.ToggleVisibility(); + }, + clone: function clone() { + return new cc.ToggleVisibility(); + } + }); + cc.toggleVisibility = function() { + return new cc.ToggleVisibility(); + }; + cc.RemoveSelf = cc.Class({ + name: "cc.RemoveSelf", + extends: cc.ActionInstant, + ctor: function ctor(isNeedCleanUp) { + this._isNeedCleanUp = true; + void 0 !== isNeedCleanUp && this.init(isNeedCleanUp); + }, + update: function update(dt) { + this.target.removeFromParent(this._isNeedCleanUp); + }, + init: function init(isNeedCleanUp) { + this._isNeedCleanUp = isNeedCleanUp; + return true; + }, + reverse: function reverse() { + return new cc.RemoveSelf(this._isNeedCleanUp); + }, + clone: function clone() { + return new cc.RemoveSelf(this._isNeedCleanUp); + } + }); + cc.removeSelf = function(isNeedCleanUp) { + return new cc.RemoveSelf(isNeedCleanUp); + }; + cc.DestroySelf = cc.Class({ + name: "cc.DestroySelf", + extends: cc.ActionInstant, + update: function update() { + this.target.destroy(); + }, + reverse: function reverse() { + return new cc.DestroySelf(); + }, + clone: function clone() { + return new cc.DestroySelf(); + } + }); + cc.destroySelf = function() { + return new cc.DestroySelf(); + }; + cc.FlipX = cc.Class({ + name: "cc.FlipX", + extends: cc.ActionInstant, + ctor: function ctor(flip) { + this._flippedX = false; + void 0 !== flip && this.initWithFlipX(flip); + }, + initWithFlipX: function initWithFlipX(flip) { + this._flippedX = flip; + return true; + }, + update: function update(dt) { + this.target.scaleX = Math.abs(this.target.scaleX) * (this._flippedX ? -1 : 1); + }, + reverse: function reverse() { + return new cc.FlipX(!this._flippedX); + }, + clone: function clone() { + var action = new cc.FlipX(); + action.initWithFlipX(this._flippedX); + return action; + } + }); + cc.flipX = function(flip) { + return new cc.FlipX(flip); + }; + cc.FlipY = cc.Class({ + name: "cc.FlipY", + extends: cc.ActionInstant, + ctor: function ctor(flip) { + this._flippedY = false; + void 0 !== flip && this.initWithFlipY(flip); + }, + initWithFlipY: function initWithFlipY(flip) { + this._flippedY = flip; + return true; + }, + update: function update(dt) { + this.target.scaleY = Math.abs(this.target.scaleY) * (this._flippedY ? -1 : 1); + }, + reverse: function reverse() { + return new cc.FlipY(!this._flippedY); + }, + clone: function clone() { + var action = new cc.FlipY(); + action.initWithFlipY(this._flippedY); + return action; + } + }); + cc.flipY = function(flip) { + return new cc.FlipY(flip); + }; + cc.Place = cc.Class({ + name: "cc.Place", + extends: cc.ActionInstant, + ctor: function ctor(pos, y) { + this._x = 0; + this._y = 0; + if (void 0 !== pos) { + if (void 0 !== pos.x) { + y = pos.y; + pos = pos.x; + } + this.initWithPosition(pos, y); + } + }, + initWithPosition: function initWithPosition(x, y) { + this._x = x; + this._y = y; + return true; + }, + update: function update(dt) { + this.target.setPosition(this._x, this._y); + }, + clone: function clone() { + var action = new cc.Place(); + action.initWithPosition(this._x, this._y); + return action; + } + }); + cc.place = function(pos, y) { + return new cc.Place(pos, y); + }; + cc.CallFunc = cc.Class({ + name: "cc.CallFunc", + extends: cc.ActionInstant, + ctor: function ctor(selector, selectorTarget, data) { + this._selectorTarget = null; + this._function = null; + this._data = null; + this.initWithFunction(selector, selectorTarget, data); + }, + initWithFunction: function initWithFunction(selector, selectorTarget, data) { + selector && (this._function = selector); + selectorTarget && (this._selectorTarget = selectorTarget); + void 0 !== data && (this._data = data); + return true; + }, + execute: function execute() { + this._function && this._function.call(this._selectorTarget, this.target, this._data); + }, + update: function update(dt) { + this.execute(); + }, + getTargetCallback: function getTargetCallback() { + return this._selectorTarget; + }, + setTargetCallback: function setTargetCallback(sel) { + if (sel !== this._selectorTarget) { + this._selectorTarget && (this._selectorTarget = null); + this._selectorTarget = sel; + } + }, + clone: function clone() { + var action = new cc.CallFunc(); + action.initWithFunction(this._function, this._selectorTarget, this._data); + return action; + } + }); + cc.callFunc = function(selector, selectorTarget, data) { + return new cc.CallFunc(selector, selectorTarget, data); + }; + }), {} ], + 6: [ (function(require, module, exports) { + "use strict"; + cc.ActionInterval = cc.Class({ + name: "cc.ActionInterval", + extends: cc.FiniteTimeAction, + ctor: function ctor(d) { + this.MAX_VALUE = 2; + this._elapsed = 0; + this._firstTick = false; + this._easeList = null; + this._speed = 1; + this._timesForRepeat = 1; + this._repeatForever = false; + this._repeatMethod = false; + this._speedMethod = false; + void 0 !== d && cc.ActionInterval.prototype.initWithDuration.call(this, d); + }, + getElapsed: function getElapsed() { + return this._elapsed; + }, + initWithDuration: function initWithDuration(d) { + this._duration = 0 === d ? cc.macro.FLT_EPSILON : d; + this._elapsed = 0; + this._firstTick = true; + return true; + }, + isDone: function isDone() { + return this._elapsed >= this._duration; + }, + _cloneDecoration: function _cloneDecoration(action) { + action._repeatForever = this._repeatForever; + action._speed = this._speed; + action._timesForRepeat = this._timesForRepeat; + action._easeList = this._easeList; + action._speedMethod = this._speedMethod; + action._repeatMethod = this._repeatMethod; + }, + _reverseEaseList: function _reverseEaseList(action) { + if (this._easeList) { + action._easeList = []; + for (var i = 0; i < this._easeList.length; i++) action._easeList.push(this._easeList[i].reverse()); + } + }, + clone: function clone() { + var action = new cc.ActionInterval(this._duration); + this._cloneDecoration(action); + return action; + }, + easing: function easing(easeObj) { + this._easeList ? this._easeList.length = 0 : this._easeList = []; + for (var i = 0; i < arguments.length; i++) this._easeList.push(arguments[i]); + return this; + }, + _computeEaseTime: function _computeEaseTime(dt) { + var locList = this._easeList; + if (!locList || 0 === locList.length) return dt; + for (var i = 0, n = locList.length; i < n; i++) dt = locList[i].easing(dt); + return dt; + }, + step: function step(dt) { + if (this._firstTick) { + this._firstTick = false; + this._elapsed = 0; + } else this._elapsed += dt; + var t = this._elapsed / (this._duration > 1.192092896e-7 ? this._duration : 1.192092896e-7); + t = 1 > t ? t : 1; + this.update(t > 0 ? t : 0); + if (this._repeatMethod && this._timesForRepeat > 1 && this.isDone()) { + this._repeatForever || this._timesForRepeat--; + this.startWithTarget(this.target); + this.step(this._elapsed - this._duration); + } + }, + startWithTarget: function startWithTarget(target) { + cc.Action.prototype.startWithTarget.call(this, target); + this._elapsed = 0; + this._firstTick = true; + }, + reverse: function reverse() { + cc.logID(1010); + return null; + }, + setAmplitudeRate: function setAmplitudeRate(amp) { + cc.logID(1011); + }, + getAmplitudeRate: function getAmplitudeRate() { + cc.logID(1012); + return 0; + }, + speed: function speed(_speed) { + if (_speed <= 0) { + cc.logID(1013); + return this; + } + this._speedMethod = true; + this._speed *= _speed; + return this; + }, + getSpeed: function getSpeed() { + return this._speed; + }, + setSpeed: function setSpeed(speed) { + this._speed = speed; + return this; + }, + repeat: function repeat(times) { + times = Math.round(times); + if (isNaN(times) || times < 1) { + cc.logID(1014); + return this; + } + this._repeatMethod = true; + this._timesForRepeat *= times; + return this; + }, + repeatForever: function repeatForever() { + this._repeatMethod = true; + this._timesForRepeat = this.MAX_VALUE; + this._repeatForever = true; + return this; + } + }); + cc.actionInterval = function(d) { + return new cc.ActionInterval(d); + }; + cc.Sequence = cc.Class({ + name: "cc.Sequence", + extends: cc.ActionInterval, + ctor: function ctor(tempArray) { + this._actions = []; + this._split = null; + this._last = 0; + this._reversed = false; + var paramArray = tempArray instanceof Array ? tempArray : arguments; + if (1 === paramArray.length) { + cc.errorID(1019); + return; + } + var last = paramArray.length - 1; + last >= 0 && null == paramArray[last] && cc.logID(1015); + if (last >= 0) { + var prev = paramArray[0], action1; + for (var i = 1; i < last; i++) if (paramArray[i]) { + action1 = prev; + prev = cc.Sequence._actionOneTwo(action1, paramArray[i]); + } + this.initWithTwoActions(prev, paramArray[last]); + } + }, + initWithTwoActions: function initWithTwoActions(actionOne, actionTwo) { + if (!actionOne || !actionTwo) { + cc.errorID(1025); + return false; + } + var durationOne = actionOne._duration, durationTwo = actionTwo._duration; + durationOne *= actionOne._repeatMethod ? actionOne._timesForRepeat : 1; + durationTwo *= actionTwo._repeatMethod ? actionTwo._timesForRepeat : 1; + var d = durationOne + durationTwo; + this.initWithDuration(d); + this._actions[0] = actionOne; + this._actions[1] = actionTwo; + return true; + }, + clone: function clone() { + var action = new cc.Sequence(); + this._cloneDecoration(action); + action.initWithTwoActions(this._actions[0].clone(), this._actions[1].clone()); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.ActionInterval.prototype.startWithTarget.call(this, target); + this._split = this._actions[0]._duration / this._duration; + this._split *= this._actions[0]._repeatMethod ? this._actions[0]._timesForRepeat : 1; + this._last = -1; + }, + stop: function stop() { + -1 !== this._last && this._actions[this._last].stop(); + cc.Action.prototype.stop.call(this); + }, + update: function update(dt) { + var new_t, found = 0; + var locSplit = this._split, locActions = this._actions, locLast = this._last, actionFound; + dt = this._computeEaseTime(dt); + if (dt < locSplit) { + new_t = 0 !== locSplit ? dt / locSplit : 1; + if (0 === found && 1 === locLast && this._reversed) { + locActions[1].update(0); + locActions[1].stop(); + } + } else { + found = 1; + new_t = 1 === locSplit ? 1 : (dt - locSplit) / (1 - locSplit); + if (-1 === locLast) { + locActions[0].startWithTarget(this.target); + locActions[0].update(1); + locActions[0].stop(); + } + if (0 === locLast) { + locActions[0].update(1); + locActions[0].stop(); + } + } + actionFound = locActions[found]; + if (locLast === found && actionFound.isDone()) return; + locLast !== found && actionFound.startWithTarget(this.target); + new_t *= actionFound._timesForRepeat; + actionFound.update(new_t > 1 ? new_t % 1 : new_t); + this._last = found; + }, + reverse: function reverse() { + var action = cc.Sequence._actionOneTwo(this._actions[1].reverse(), this._actions[0].reverse()); + this._cloneDecoration(action); + this._reverseEaseList(action); + action._reversed = true; + return action; + } + }); + cc.sequence = function(tempArray) { + var paramArray = tempArray instanceof Array ? tempArray : arguments; + if (1 === paramArray.length) { + cc.errorID(1019); + return null; + } + var last = paramArray.length - 1; + last >= 0 && null == paramArray[last] && cc.logID(1015); + var result = null; + if (last >= 0) { + result = paramArray[0]; + for (var i = 1; i <= last; i++) paramArray[i] && (result = cc.Sequence._actionOneTwo(result, paramArray[i])); + } + return result; + }; + cc.Sequence._actionOneTwo = function(actionOne, actionTwo) { + var sequence = new cc.Sequence(); + sequence.initWithTwoActions(actionOne, actionTwo); + return sequence; + }; + cc.Repeat = cc.Class({ + name: "cc.Repeat", + extends: cc.ActionInterval, + ctor: function ctor(action, times) { + this._times = 0; + this._total = 0; + this._nextDt = 0; + this._actionInstant = false; + this._innerAction = null; + void 0 !== times && this.initWithAction(action, times); + }, + initWithAction: function initWithAction(action, times) { + var duration = action._duration * times; + if (this.initWithDuration(duration)) { + this._times = times; + this._innerAction = action; + if (action instanceof cc.ActionInstant) { + this._actionInstant = true; + this._times -= 1; + } + this._total = 0; + return true; + } + return false; + }, + clone: function clone() { + var action = new cc.Repeat(); + this._cloneDecoration(action); + action.initWithAction(this._innerAction.clone(), this._times); + return action; + }, + startWithTarget: function startWithTarget(target) { + this._total = 0; + this._nextDt = this._innerAction._duration / this._duration; + cc.ActionInterval.prototype.startWithTarget.call(this, target); + this._innerAction.startWithTarget(target); + }, + stop: function stop() { + this._innerAction.stop(); + cc.Action.prototype.stop.call(this); + }, + update: function update(dt) { + dt = this._computeEaseTime(dt); + var locInnerAction = this._innerAction; + var locDuration = this._duration; + var locTimes = this._times; + var locNextDt = this._nextDt; + if (dt >= locNextDt) { + while (dt > locNextDt && this._total < locTimes) { + locInnerAction.update(1); + this._total++; + locInnerAction.stop(); + locInnerAction.startWithTarget(this.target); + locNextDt += locInnerAction._duration / locDuration; + this._nextDt = locNextDt > 1 ? 1 : locNextDt; + } + if (dt >= 1 && this._total < locTimes) { + locInnerAction.update(1); + this._total++; + } + this._actionInstant || (this._total === locTimes ? locInnerAction.stop() : locInnerAction.update(dt - (locNextDt - locInnerAction._duration / locDuration))); + } else locInnerAction.update(dt * locTimes % 1); + }, + isDone: function isDone() { + return this._total === this._times; + }, + reverse: function reverse() { + var action = new cc.Repeat(this._innerAction.reverse(), this._times); + this._cloneDecoration(action); + this._reverseEaseList(action); + return action; + }, + setInnerAction: function setInnerAction(action) { + this._innerAction !== action && (this._innerAction = action); + }, + getInnerAction: function getInnerAction() { + return this._innerAction; + } + }); + cc.repeat = function(action, times) { + return new cc.Repeat(action, times); + }; + cc.RepeatForever = cc.Class({ + name: "cc.RepeatForever", + extends: cc.ActionInterval, + ctor: function ctor(action) { + this._innerAction = null; + action && this.initWithAction(action); + }, + initWithAction: function initWithAction(action) { + if (!action) { + cc.errorID(1026); + return false; + } + this._innerAction = action; + return true; + }, + clone: function clone() { + var action = new cc.RepeatForever(); + this._cloneDecoration(action); + action.initWithAction(this._innerAction.clone()); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.ActionInterval.prototype.startWithTarget.call(this, target); + this._innerAction.startWithTarget(target); + }, + step: function step(dt) { + var locInnerAction = this._innerAction; + locInnerAction.step(dt); + if (locInnerAction.isDone()) { + locInnerAction.startWithTarget(this.target); + locInnerAction.step(locInnerAction.getElapsed() - locInnerAction._duration); + } + }, + isDone: function isDone() { + return false; + }, + reverse: function reverse() { + var action = new cc.RepeatForever(this._innerAction.reverse()); + this._cloneDecoration(action); + this._reverseEaseList(action); + return action; + }, + setInnerAction: function setInnerAction(action) { + this._innerAction !== action && (this._innerAction = action); + }, + getInnerAction: function getInnerAction() { + return this._innerAction; + } + }); + cc.repeatForever = function(action) { + return new cc.RepeatForever(action); + }; + cc.Spawn = cc.Class({ + name: "cc.Spawn", + extends: cc.ActionInterval, + ctor: function ctor(tempArray) { + this._one = null; + this._two = null; + var paramArray = tempArray instanceof Array ? tempArray : arguments; + if (1 === paramArray.length) { + cc.errorID(1020); + return; + } + var last = paramArray.length - 1; + last >= 0 && null == paramArray[last] && cc.logID(1015); + if (last >= 0) { + var prev = paramArray[0], action1; + for (var i = 1; i < last; i++) if (paramArray[i]) { + action1 = prev; + prev = cc.Spawn._actionOneTwo(action1, paramArray[i]); + } + this.initWithTwoActions(prev, paramArray[last]); + } + }, + initWithTwoActions: function initWithTwoActions(action1, action2) { + if (!action1 || !action2) { + cc.errorID(1027); + return false; + } + var ret = false; + var d1 = action1._duration; + var d2 = action2._duration; + if (this.initWithDuration(Math.max(d1, d2))) { + this._one = action1; + this._two = action2; + d1 > d2 ? this._two = cc.Sequence._actionOneTwo(action2, cc.delayTime(d1 - d2)) : d1 < d2 && (this._one = cc.Sequence._actionOneTwo(action1, cc.delayTime(d2 - d1))); + ret = true; + } + return ret; + }, + clone: function clone() { + var action = new cc.Spawn(); + this._cloneDecoration(action); + action.initWithTwoActions(this._one.clone(), this._two.clone()); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.ActionInterval.prototype.startWithTarget.call(this, target); + this._one.startWithTarget(target); + this._two.startWithTarget(target); + }, + stop: function stop() { + this._one.stop(); + this._two.stop(); + cc.Action.prototype.stop.call(this); + }, + update: function update(dt) { + dt = this._computeEaseTime(dt); + this._one && this._one.update(dt); + this._two && this._two.update(dt); + }, + reverse: function reverse() { + var action = cc.Spawn._actionOneTwo(this._one.reverse(), this._two.reverse()); + this._cloneDecoration(action); + this._reverseEaseList(action); + return action; + } + }); + cc.spawn = function(tempArray) { + var paramArray = tempArray instanceof Array ? tempArray : arguments; + if (1 === paramArray.length) { + cc.errorID(1020); + return null; + } + paramArray.length > 0 && null == paramArray[paramArray.length - 1] && cc.logID(1015); + var prev = paramArray[0]; + for (var i = 1; i < paramArray.length; i++) null != paramArray[i] && (prev = cc.Spawn._actionOneTwo(prev, paramArray[i])); + return prev; + }; + cc.Spawn._actionOneTwo = function(action1, action2) { + var pSpawn = new cc.Spawn(); + pSpawn.initWithTwoActions(action1, action2); + return pSpawn; + }; + cc.RotateTo = cc.Class({ + name: "cc.RotateTo", + extends: cc.ActionInterval, + statics: { + _reverse: false + }, + ctor: function ctor(duration, dstAngle) { + this._startAngle = 0; + this._dstAngle = 0; + this._angle = 0; + void 0 !== dstAngle && this.initWithDuration(duration, dstAngle); + }, + initWithDuration: function initWithDuration(duration, dstAngle) { + if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) { + this._dstAngle = dstAngle; + return true; + } + return false; + }, + clone: function clone() { + var action = new cc.RotateTo(); + this._cloneDecoration(action); + action.initWithDuration(this._duration, this._dstAngle); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.ActionInterval.prototype.startWithTarget.call(this, target); + var startAngle = target.angle % 360; + var angle = cc.RotateTo._reverse ? this._dstAngle - startAngle : this._dstAngle + startAngle; + angle > 180 && (angle -= 360); + angle < -180 && (angle += 360); + this._startAngle = startAngle; + this._angle = cc.RotateTo._reverse ? angle : -angle; + }, + reverse: function reverse() { + cc.logID(1016); + }, + update: function update(dt) { + dt = this._computeEaseTime(dt); + this.target && (this.target.angle = this._startAngle + this._angle * dt); + } + }); + cc.rotateTo = function(duration, dstAngle) { + return new cc.RotateTo(duration, dstAngle); + }; + cc.RotateBy = cc.Class({ + name: "cc.RotateBy", + extends: cc.ActionInterval, + statics: { + _reverse: false + }, + ctor: function ctor(duration, deltaAngle) { + deltaAngle *= cc.RotateBy._reverse ? 1 : -1; + this._deltaAngle = 0; + this._startAngle = 0; + void 0 !== deltaAngle && this.initWithDuration(duration, deltaAngle); + }, + initWithDuration: function initWithDuration(duration, deltaAngle) { + if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) { + this._deltaAngle = deltaAngle; + return true; + } + return false; + }, + clone: function clone() { + var action = new cc.RotateBy(); + this._cloneDecoration(action); + action.initWithDuration(this._duration, this._deltaAngle); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.ActionInterval.prototype.startWithTarget.call(this, target); + this._startAngle = target.angle; + }, + update: function update(dt) { + dt = this._computeEaseTime(dt); + this.target && (this.target.angle = this._startAngle + this._deltaAngle * dt); + }, + reverse: function reverse() { + var action = new cc.RotateBy(); + action.initWithDuration(this._duration, -this._deltaAngle); + this._cloneDecoration(action); + this._reverseEaseList(action); + return action; + } + }); + cc.rotateBy = function(duration, deltaAngle) { + return new cc.RotateBy(duration, deltaAngle); + }; + cc.MoveBy = cc.Class({ + name: "cc.MoveBy", + extends: cc.ActionInterval, + ctor: function ctor(duration, deltaPos, deltaY) { + this._positionDelta = cc.v2(0, 0); + this._startPosition = cc.v2(0, 0); + this._previousPosition = cc.v2(0, 0); + void 0 !== deltaPos && cc.MoveBy.prototype.initWithDuration.call(this, duration, deltaPos, deltaY); + }, + initWithDuration: function initWithDuration(duration, position, y) { + if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) { + if (void 0 !== position.x) { + y = position.y; + position = position.x; + } + this._positionDelta.x = position; + this._positionDelta.y = y; + return true; + } + return false; + }, + clone: function clone() { + var action = new cc.MoveBy(); + this._cloneDecoration(action); + action.initWithDuration(this._duration, this._positionDelta); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.ActionInterval.prototype.startWithTarget.call(this, target); + var locPosX = target.x; + var locPosY = target.y; + this._previousPosition.x = locPosX; + this._previousPosition.y = locPosY; + this._startPosition.x = locPosX; + this._startPosition.y = locPosY; + }, + update: function update(dt) { + dt = this._computeEaseTime(dt); + if (this.target) { + var x = this._positionDelta.x * dt; + var y = this._positionDelta.y * dt; + var locStartPosition = this._startPosition; + if (cc.macro.ENABLE_STACKABLE_ACTIONS) { + var targetX = this.target.x; + var targetY = this.target.y; + var locPreviousPosition = this._previousPosition; + locStartPosition.x = locStartPosition.x + targetX - locPreviousPosition.x; + locStartPosition.y = locStartPosition.y + targetY - locPreviousPosition.y; + x += locStartPosition.x; + y += locStartPosition.y; + locPreviousPosition.x = x; + locPreviousPosition.y = y; + this.target.setPosition(x, y); + } else this.target.setPosition(locStartPosition.x + x, locStartPosition.y + y); + } + }, + reverse: function reverse() { + var action = new cc.MoveBy(this._duration, cc.v2(-this._positionDelta.x, -this._positionDelta.y)); + this._cloneDecoration(action); + this._reverseEaseList(action); + return action; + } + }); + cc.moveBy = function(duration, deltaPos, deltaY) { + return new cc.MoveBy(duration, deltaPos, deltaY); + }; + cc.MoveTo = cc.Class({ + name: "cc.MoveTo", + extends: cc.MoveBy, + ctor: function ctor(duration, position, y) { + this._endPosition = cc.v2(0, 0); + void 0 !== position && this.initWithDuration(duration, position, y); + }, + initWithDuration: function initWithDuration(duration, position, y) { + if (cc.MoveBy.prototype.initWithDuration.call(this, duration, position, y)) { + if (void 0 !== position.x) { + y = position.y; + position = position.x; + } + this._endPosition.x = position; + this._endPosition.y = y; + return true; + } + return false; + }, + clone: function clone() { + var action = new cc.MoveTo(); + this._cloneDecoration(action); + action.initWithDuration(this._duration, this._endPosition); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.MoveBy.prototype.startWithTarget.call(this, target); + this._positionDelta.x = this._endPosition.x - target.x; + this._positionDelta.y = this._endPosition.y - target.y; + } + }); + cc.moveTo = function(duration, position, y) { + return new cc.MoveTo(duration, position, y); + }; + cc.SkewTo = cc.Class({ + name: "cc.SkewTo", + extends: cc.ActionInterval, + ctor: function ctor(t, sx, sy) { + this._skewX = 0; + this._skewY = 0; + this._startSkewX = 0; + this._startSkewY = 0; + this._endSkewX = 0; + this._endSkewY = 0; + this._deltaX = 0; + this._deltaY = 0; + void 0 !== sy && cc.SkewTo.prototype.initWithDuration.call(this, t, sx, sy); + }, + initWithDuration: function initWithDuration(t, sx, sy) { + var ret = false; + if (cc.ActionInterval.prototype.initWithDuration.call(this, t)) { + this._endSkewX = sx; + this._endSkewY = sy; + ret = true; + } + return ret; + }, + clone: function clone() { + var action = new cc.SkewTo(); + this._cloneDecoration(action); + action.initWithDuration(this._duration, this._endSkewX, this._endSkewY); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.ActionInterval.prototype.startWithTarget.call(this, target); + this._startSkewX = target.skewX % 180; + this._deltaX = this._endSkewX - this._startSkewX; + this._deltaX > 180 && (this._deltaX -= 360); + this._deltaX < -180 && (this._deltaX += 360); + this._startSkewY = target.skewY % 360; + this._deltaY = this._endSkewY - this._startSkewY; + this._deltaY > 180 && (this._deltaY -= 360); + this._deltaY < -180 && (this._deltaY += 360); + }, + update: function update(dt) { + dt = this._computeEaseTime(dt); + this.target.skewX = this._startSkewX + this._deltaX * dt; + this.target.skewY = this._startSkewY + this._deltaY * dt; + } + }); + cc.skewTo = function(t, sx, sy) { + return new cc.SkewTo(t, sx, sy); + }; + cc.SkewBy = cc.Class({ + name: "cc.SkewBy", + extends: cc.SkewTo, + ctor: function ctor(t, sx, sy) { + void 0 !== sy && this.initWithDuration(t, sx, sy); + }, + initWithDuration: function initWithDuration(t, deltaSkewX, deltaSkewY) { + var ret = false; + if (cc.SkewTo.prototype.initWithDuration.call(this, t, deltaSkewX, deltaSkewY)) { + this._skewX = deltaSkewX; + this._skewY = deltaSkewY; + ret = true; + } + return ret; + }, + clone: function clone() { + var action = new cc.SkewBy(); + this._cloneDecoration(action); + action.initWithDuration(this._duration, this._skewX, this._skewY); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.SkewTo.prototype.startWithTarget.call(this, target); + this._deltaX = this._skewX; + this._deltaY = this._skewY; + this._endSkewX = this._startSkewX + this._deltaX; + this._endSkewY = this._startSkewY + this._deltaY; + }, + reverse: function reverse() { + var action = new cc.SkewBy(this._duration, -this._skewX, -this._skewY); + this._cloneDecoration(action); + this._reverseEaseList(action); + return action; + } + }); + cc.skewBy = function(t, sx, sy) { + return new cc.SkewBy(t, sx, sy); + }; + cc.JumpBy = cc.Class({ + name: "cc.JumpBy", + extends: cc.ActionInterval, + ctor: function ctor(duration, position, y, height, jumps) { + this._startPosition = cc.v2(0, 0); + this._previousPosition = cc.v2(0, 0); + this._delta = cc.v2(0, 0); + this._height = 0; + this._jumps = 0; + void 0 !== height && cc.JumpBy.prototype.initWithDuration.call(this, duration, position, y, height, jumps); + }, + initWithDuration: function initWithDuration(duration, position, y, height, jumps) { + if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) { + if (void 0 === jumps) { + jumps = height; + height = y; + y = position.y; + position = position.x; + } + this._delta.x = position; + this._delta.y = y; + this._height = height; + this._jumps = jumps; + return true; + } + return false; + }, + clone: function clone() { + var action = new cc.JumpBy(); + this._cloneDecoration(action); + action.initWithDuration(this._duration, this._delta, this._height, this._jumps); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.ActionInterval.prototype.startWithTarget.call(this, target); + var locPosX = target.x; + var locPosY = target.y; + this._previousPosition.x = locPosX; + this._previousPosition.y = locPosY; + this._startPosition.x = locPosX; + this._startPosition.y = locPosY; + }, + update: function update(dt) { + dt = this._computeEaseTime(dt); + if (this.target) { + var frac = dt * this._jumps % 1; + var y = 4 * this._height * frac * (1 - frac); + y += this._delta.y * dt; + var x = this._delta.x * dt; + var locStartPosition = this._startPosition; + if (cc.macro.ENABLE_STACKABLE_ACTIONS) { + var targetX = this.target.x; + var targetY = this.target.y; + var locPreviousPosition = this._previousPosition; + locStartPosition.x = locStartPosition.x + targetX - locPreviousPosition.x; + locStartPosition.y = locStartPosition.y + targetY - locPreviousPosition.y; + x += locStartPosition.x; + y += locStartPosition.y; + locPreviousPosition.x = x; + locPreviousPosition.y = y; + this.target.setPosition(x, y); + } else this.target.setPosition(locStartPosition.x + x, locStartPosition.y + y); + } + }, + reverse: function reverse() { + var action = new cc.JumpBy(this._duration, cc.v2(-this._delta.x, -this._delta.y), this._height, this._jumps); + this._cloneDecoration(action); + this._reverseEaseList(action); + return action; + } + }); + cc.jumpBy = function(duration, position, y, height, jumps) { + return new cc.JumpBy(duration, position, y, height, jumps); + }; + cc.JumpTo = cc.Class({ + name: "cc.JumpTo", + extends: cc.JumpBy, + ctor: function ctor(duration, position, y, height, jumps) { + this._endPosition = cc.v2(0, 0); + void 0 !== height && this.initWithDuration(duration, position, y, height, jumps); + }, + initWithDuration: function initWithDuration(duration, position, y, height, jumps) { + if (cc.JumpBy.prototype.initWithDuration.call(this, duration, position, y, height, jumps)) { + if (void 0 === jumps) { + y = position.y; + position = position.x; + } + this._endPosition.x = position; + this._endPosition.y = y; + return true; + } + return false; + }, + startWithTarget: function startWithTarget(target) { + cc.JumpBy.prototype.startWithTarget.call(this, target); + this._delta.x = this._endPosition.x - this._startPosition.x; + this._delta.y = this._endPosition.y - this._startPosition.y; + }, + clone: function clone() { + var action = new cc.JumpTo(); + this._cloneDecoration(action); + action.initWithDuration(this._duration, this._endPosition, this._height, this._jumps); + return action; + } + }); + cc.jumpTo = function(duration, position, y, height, jumps) { + return new cc.JumpTo(duration, position, y, height, jumps); + }; + function bezierAt(a, b, c, d, t) { + return Math.pow(1 - t, 3) * a + 3 * t * Math.pow(1 - t, 2) * b + 3 * Math.pow(t, 2) * (1 - t) * c + Math.pow(t, 3) * d; + } + cc.BezierBy = cc.Class({ + name: "cc.BezierBy", + extends: cc.ActionInterval, + ctor: function ctor(t, c) { + this._config = []; + this._startPosition = cc.v2(0, 0); + this._previousPosition = cc.v2(0, 0); + c && cc.BezierBy.prototype.initWithDuration.call(this, t, c); + }, + initWithDuration: function initWithDuration(t, c) { + if (cc.ActionInterval.prototype.initWithDuration.call(this, t)) { + this._config = c; + return true; + } + return false; + }, + clone: function clone() { + var action = new cc.BezierBy(); + this._cloneDecoration(action); + var newConfigs = []; + for (var i = 0; i < this._config.length; i++) { + var selConf = this._config[i]; + newConfigs.push(cc.v2(selConf.x, selConf.y)); + } + action.initWithDuration(this._duration, newConfigs); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.ActionInterval.prototype.startWithTarget.call(this, target); + var locPosX = target.x; + var locPosY = target.y; + this._previousPosition.x = locPosX; + this._previousPosition.y = locPosY; + this._startPosition.x = locPosX; + this._startPosition.y = locPosY; + }, + update: function update(dt) { + dt = this._computeEaseTime(dt); + if (this.target) { + var locConfig = this._config; + var xa = 0; + var xb = locConfig[0].x; + var xc = locConfig[1].x; + var xd = locConfig[2].x; + var ya = 0; + var yb = locConfig[0].y; + var yc = locConfig[1].y; + var yd = locConfig[2].y; + var x = bezierAt(xa, xb, xc, xd, dt); + var y = bezierAt(ya, yb, yc, yd, dt); + var locStartPosition = this._startPosition; + if (cc.macro.ENABLE_STACKABLE_ACTIONS) { + var targetX = this.target.x; + var targetY = this.target.y; + var locPreviousPosition = this._previousPosition; + locStartPosition.x = locStartPosition.x + targetX - locPreviousPosition.x; + locStartPosition.y = locStartPosition.y + targetY - locPreviousPosition.y; + x += locStartPosition.x; + y += locStartPosition.y; + locPreviousPosition.x = x; + locPreviousPosition.y = y; + this.target.setPosition(x, y); + } else this.target.setPosition(locStartPosition.x + x, locStartPosition.y + y); + } + }, + reverse: function reverse() { + var locConfig = this._config; + var x0 = locConfig[0].x, y0 = locConfig[0].y; + var x1 = locConfig[1].x, y1 = locConfig[1].y; + var x2 = locConfig[2].x, y2 = locConfig[2].y; + var r = [ cc.v2(x1 - x2, y1 - y2), cc.v2(x0 - x2, y0 - y2), cc.v2(-x2, -y2) ]; + var action = new cc.BezierBy(this._duration, r); + this._cloneDecoration(action); + this._reverseEaseList(action); + return action; + } + }); + cc.bezierBy = function(t, c) { + return new cc.BezierBy(t, c); + }; + cc.BezierTo = cc.Class({ + name: "cc.BezierTo", + extends: cc.BezierBy, + ctor: function ctor(t, c) { + this._toConfig = []; + c && this.initWithDuration(t, c); + }, + initWithDuration: function initWithDuration(t, c) { + if (cc.ActionInterval.prototype.initWithDuration.call(this, t)) { + this._toConfig = c; + return true; + } + return false; + }, + clone: function clone() { + var action = new cc.BezierTo(); + this._cloneDecoration(action); + action.initWithDuration(this._duration, this._toConfig); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.BezierBy.prototype.startWithTarget.call(this, target); + var locStartPos = this._startPosition; + var locToConfig = this._toConfig; + var locConfig = this._config; + locConfig[0] = locToConfig[0].sub(locStartPos); + locConfig[1] = locToConfig[1].sub(locStartPos); + locConfig[2] = locToConfig[2].sub(locStartPos); + } + }); + cc.bezierTo = function(t, c) { + return new cc.BezierTo(t, c); + }; + cc.ScaleTo = cc.Class({ + name: "cc.ScaleTo", + extends: cc.ActionInterval, + ctor: function ctor(duration, sx, sy) { + this._scaleX = 1; + this._scaleY = 1; + this._startScaleX = 1; + this._startScaleY = 1; + this._endScaleX = 0; + this._endScaleY = 0; + this._deltaX = 0; + this._deltaY = 0; + void 0 !== sx && cc.ScaleTo.prototype.initWithDuration.call(this, duration, sx, sy); + }, + initWithDuration: function initWithDuration(duration, sx, sy) { + if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) { + this._endScaleX = sx; + this._endScaleY = null != sy ? sy : sx; + return true; + } + return false; + }, + clone: function clone() { + var action = new cc.ScaleTo(); + this._cloneDecoration(action); + action.initWithDuration(this._duration, this._endScaleX, this._endScaleY); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.ActionInterval.prototype.startWithTarget.call(this, target); + this._startScaleX = target.scaleX; + this._startScaleY = target.scaleY; + this._deltaX = this._endScaleX - this._startScaleX; + this._deltaY = this._endScaleY - this._startScaleY; + }, + update: function update(dt) { + dt = this._computeEaseTime(dt); + if (this.target) { + this.target.scaleX = this._startScaleX + this._deltaX * dt; + this.target.scaleY = this._startScaleY + this._deltaY * dt; + } + } + }); + cc.scaleTo = function(duration, sx, sy) { + return new cc.ScaleTo(duration, sx, sy); + }; + cc.ScaleBy = cc.Class({ + name: "cc.ScaleBy", + extends: cc.ScaleTo, + startWithTarget: function startWithTarget(target) { + cc.ScaleTo.prototype.startWithTarget.call(this, target); + this._deltaX = this._startScaleX * this._endScaleX - this._startScaleX; + this._deltaY = this._startScaleY * this._endScaleY - this._startScaleY; + }, + reverse: function reverse() { + var action = new cc.ScaleBy(this._duration, 1 / this._endScaleX, 1 / this._endScaleY); + this._cloneDecoration(action); + this._reverseEaseList(action); + return action; + }, + clone: function clone() { + var action = new cc.ScaleBy(); + this._cloneDecoration(action); + action.initWithDuration(this._duration, this._endScaleX, this._endScaleY); + return action; + } + }); + cc.scaleBy = function(duration, sx, sy) { + return new cc.ScaleBy(duration, sx, sy); + }; + cc.Blink = cc.Class({ + name: "cc.Blink", + extends: cc.ActionInterval, + ctor: function ctor(duration, blinks) { + this._times = 0; + this._originalState = false; + void 0 !== blinks && this.initWithDuration(duration, blinks); + }, + initWithDuration: function initWithDuration(duration, blinks) { + if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) { + this._times = blinks; + return true; + } + return false; + }, + clone: function clone() { + var action = new cc.Blink(); + this._cloneDecoration(action); + action.initWithDuration(this._duration, this._times); + return action; + }, + update: function update(dt) { + dt = this._computeEaseTime(dt); + if (this.target && !this.isDone()) { + var slice = 1 / this._times; + var m = dt % slice; + this.target.opacity = m > slice / 2 ? 255 : 0; + } + }, + startWithTarget: function startWithTarget(target) { + cc.ActionInterval.prototype.startWithTarget.call(this, target); + this._originalState = target.opacity; + }, + stop: function stop() { + this.target.opacity = this._originalState; + cc.ActionInterval.prototype.stop.call(this); + }, + reverse: function reverse() { + var action = new cc.Blink(this._duration, this._times); + this._cloneDecoration(action); + this._reverseEaseList(action); + return action; + } + }); + cc.blink = function(duration, blinks) { + return new cc.Blink(duration, blinks); + }; + cc.FadeTo = cc.Class({ + name: "cc.FadeTo", + extends: cc.ActionInterval, + ctor: function ctor(duration, opacity) { + this._toOpacity = 0; + this._fromOpacity = 0; + void 0 !== opacity && cc.FadeTo.prototype.initWithDuration.call(this, duration, opacity); + }, + initWithDuration: function initWithDuration(duration, opacity) { + if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) { + this._toOpacity = opacity; + return true; + } + return false; + }, + clone: function clone() { + var action = new cc.FadeTo(); + this._cloneDecoration(action); + action.initWithDuration(this._duration, this._toOpacity); + return action; + }, + update: function update(time) { + time = this._computeEaseTime(time); + var fromOpacity = void 0 !== this._fromOpacity ? this._fromOpacity : 255; + this.target.opacity = fromOpacity + (this._toOpacity - fromOpacity) * time; + }, + startWithTarget: function startWithTarget(target) { + cc.ActionInterval.prototype.startWithTarget.call(this, target); + this._fromOpacity = target.opacity; + } + }); + cc.fadeTo = function(duration, opacity) { + return new cc.FadeTo(duration, opacity); + }; + cc.FadeIn = cc.Class({ + name: "cc.FadeIn", + extends: cc.FadeTo, + ctor: function ctor(duration) { + null == duration && (duration = 0); + this._reverseAction = null; + this.initWithDuration(duration, 255); + }, + reverse: function reverse() { + var action = new cc.FadeOut(); + action.initWithDuration(this._duration, 0); + this._cloneDecoration(action); + this._reverseEaseList(action); + return action; + }, + clone: function clone() { + var action = new cc.FadeIn(); + this._cloneDecoration(action); + action.initWithDuration(this._duration, this._toOpacity); + return action; + }, + startWithTarget: function startWithTarget(target) { + this._reverseAction && (this._toOpacity = this._reverseAction._fromOpacity); + cc.FadeTo.prototype.startWithTarget.call(this, target); + } + }); + cc.fadeIn = function(duration) { + return new cc.FadeIn(duration); + }; + cc.FadeOut = cc.Class({ + name: "cc.FadeOut", + extends: cc.FadeTo, + ctor: function ctor(duration) { + null == duration && (duration = 0); + this._reverseAction = null; + this.initWithDuration(duration, 0); + }, + reverse: function reverse() { + var action = new cc.FadeIn(); + action._reverseAction = this; + action.initWithDuration(this._duration, 255); + this._cloneDecoration(action); + this._reverseEaseList(action); + return action; + }, + clone: function clone() { + var action = new cc.FadeOut(); + this._cloneDecoration(action); + action.initWithDuration(this._duration, this._toOpacity); + return action; + } + }); + cc.fadeOut = function(d) { + return new cc.FadeOut(d); + }; + cc.TintTo = cc.Class({ + name: "cc.TintTo", + extends: cc.ActionInterval, + ctor: function ctor(duration, red, green, blue) { + this._to = cc.color(0, 0, 0); + this._from = cc.color(0, 0, 0); + if (red instanceof cc.Color) { + blue = red.b; + green = red.g; + red = red.r; + } + void 0 !== blue && this.initWithDuration(duration, red, green, blue); + }, + initWithDuration: function initWithDuration(duration, red, green, blue) { + if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) { + this._to = cc.color(red, green, blue); + return true; + } + return false; + }, + clone: function clone() { + var action = new cc.TintTo(); + this._cloneDecoration(action); + var locTo = this._to; + action.initWithDuration(this._duration, locTo.r, locTo.g, locTo.b); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.ActionInterval.prototype.startWithTarget.call(this, target); + this._from = this.target.color; + }, + update: function update(dt) { + dt = this._computeEaseTime(dt); + var locFrom = this._from, locTo = this._to; + locFrom && (this.target.color = cc.color(locFrom.r + (locTo.r - locFrom.r) * dt, locFrom.g + (locTo.g - locFrom.g) * dt, locFrom.b + (locTo.b - locFrom.b) * dt)); + } + }); + cc.tintTo = function(duration, red, green, blue) { + return new cc.TintTo(duration, red, green, blue); + }; + cc.TintBy = cc.Class({ + name: "cc.TintBy", + extends: cc.ActionInterval, + ctor: function ctor(duration, deltaRed, deltaGreen, deltaBlue) { + this._deltaR = 0; + this._deltaG = 0; + this._deltaB = 0; + this._fromR = 0; + this._fromG = 0; + this._fromB = 0; + void 0 !== deltaBlue && this.initWithDuration(duration, deltaRed, deltaGreen, deltaBlue); + }, + initWithDuration: function initWithDuration(duration, deltaRed, deltaGreen, deltaBlue) { + if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) { + this._deltaR = deltaRed; + this._deltaG = deltaGreen; + this._deltaB = deltaBlue; + return true; + } + return false; + }, + clone: function clone() { + var action = new cc.TintBy(); + this._cloneDecoration(action); + action.initWithDuration(this._duration, this._deltaR, this._deltaG, this._deltaB); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.ActionInterval.prototype.startWithTarget.call(this, target); + var color = target.color; + this._fromR = color.r; + this._fromG = color.g; + this._fromB = color.b; + }, + update: function update(dt) { + dt = this._computeEaseTime(dt); + this.target.color = cc.color(this._fromR + this._deltaR * dt, this._fromG + this._deltaG * dt, this._fromB + this._deltaB * dt); + }, + reverse: function reverse() { + var action = new cc.TintBy(this._duration, -this._deltaR, -this._deltaG, -this._deltaB); + this._cloneDecoration(action); + this._reverseEaseList(action); + return action; + } + }); + cc.tintBy = function(duration, deltaRed, deltaGreen, deltaBlue) { + return new cc.TintBy(duration, deltaRed, deltaGreen, deltaBlue); + }; + cc.DelayTime = cc.Class({ + name: "cc.DelayTime", + extends: cc.ActionInterval, + update: function update(dt) {}, + reverse: function reverse() { + var action = new cc.DelayTime(this._duration); + this._cloneDecoration(action); + this._reverseEaseList(action); + return action; + }, + clone: function clone() { + var action = new cc.DelayTime(); + this._cloneDecoration(action); + action.initWithDuration(this._duration); + return action; + } + }); + cc.delayTime = function(d) { + return new cc.DelayTime(d); + }; + cc.ReverseTime = cc.Class({ + name: "cc.ReverseTime", + extends: cc.ActionInterval, + ctor: function ctor(action) { + this._other = null; + action && this.initWithAction(action); + }, + initWithAction: function initWithAction(action) { + if (!action) { + cc.errorID(1028); + return false; + } + if (action === this._other) { + cc.errorID(1029); + return false; + } + if (cc.ActionInterval.prototype.initWithDuration.call(this, action._duration)) { + this._other = action; + return true; + } + return false; + }, + clone: function clone() { + var action = new cc.ReverseTime(); + this._cloneDecoration(action); + action.initWithAction(this._other.clone()); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.ActionInterval.prototype.startWithTarget.call(this, target); + this._other.startWithTarget(target); + }, + update: function update(dt) { + dt = this._computeEaseTime(dt); + this._other && this._other.update(1 - dt); + }, + reverse: function reverse() { + return this._other.clone(); + }, + stop: function stop() { + this._other.stop(); + cc.Action.prototype.stop.call(this); + } + }); + cc.reverseTime = function(action) { + return new cc.ReverseTime(action); + }; + cc.TargetedAction = cc.Class({ + name: "cc.TargetedAction", + extends: cc.ActionInterval, + ctor: function ctor(target, action) { + this._action = null; + this._forcedTarget = null; + action && this.initWithTarget(target, action); + }, + initWithTarget: function initWithTarget(target, action) { + if (this.initWithDuration(action._duration)) { + this._forcedTarget = target; + this._action = action; + return true; + } + return false; + }, + clone: function clone() { + var action = new cc.TargetedAction(); + this._cloneDecoration(action); + action.initWithTarget(this._forcedTarget, this._action.clone()); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.ActionInterval.prototype.startWithTarget.call(this, target); + this._action.startWithTarget(this._forcedTarget); + }, + stop: function stop() { + this._action.stop(); + }, + update: function update(dt) { + dt = this._computeEaseTime(dt); + this._action.update(dt); + }, + getForcedTarget: function getForcedTarget() { + return this._forcedTarget; + }, + setForcedTarget: function setForcedTarget(forcedTarget) { + this._forcedTarget !== forcedTarget && (this._forcedTarget = forcedTarget); + } + }); + cc.targetedAction = function(target, action) { + return new cc.TargetedAction(target, action); + }; + }), {} ], + 7: [ (function(require, module, exports) { + "use strict"; + require("../core/platform/CCClass"); + var js = require("../core/platform/js"); + var HashElement = function HashElement() { + this.actions = []; + this.target = null; + this.actionIndex = 0; + this.currentAction = null; + this.paused = false; + this.lock = false; + }; + cc.ActionManager = function() { + this._hashTargets = js.createMap(true); + this._arrayTargets = []; + this._currentTarget = null; + cc.director._scheduler && cc.director._scheduler.enableForTarget(this); + }; + cc.ActionManager.prototype = { + constructor: cc.ActionManager, + _elementPool: [], + _searchElementByTarget: function _searchElementByTarget(arr, target) { + for (var k = 0; k < arr.length; k++) if (target === arr[k].target) return arr[k]; + return null; + }, + _getElement: function _getElement(target, paused) { + var element = this._elementPool.pop(); + element || (element = new HashElement()); + element.target = target; + element.paused = !!paused; + return element; + }, + _putElement: function _putElement(element) { + element.actions.length = 0; + element.actionIndex = 0; + element.currentAction = null; + element.paused = false; + element.target = null; + element.lock = false; + this._elementPool.push(element); + }, + addAction: function addAction(action, target, paused) { + if (!action || !target) { + cc.errorID(1e3); + return; + } + var element = this._hashTargets[target._id]; + if (element) element.actions || (element.actions = []); else { + element = this._getElement(target, paused); + this._hashTargets[target._id] = element; + this._arrayTargets.push(element); + } + element.actions.push(action); + action.startWithTarget(target); + }, + removeAllActions: function removeAllActions() { + var locTargets = this._arrayTargets; + for (var i = 0; i < locTargets.length; i++) { + var element = locTargets[i]; + element && this._putElement(element); + } + this._arrayTargets.length = 0; + this._hashTargets = js.createMap(true); + }, + removeAllActionsFromTarget: function removeAllActionsFromTarget(target, forceDelete) { + if (null == target) return; + var element = this._hashTargets[target._id]; + if (element) { + element.actions.length = 0; + this._deleteHashElement(element); + } + }, + removeAction: function removeAction(action) { + if (!action) return; + var target = action.getOriginalTarget(); + var element = this._hashTargets[target._id]; + if (!element) return; + for (var i = 0; i < element.actions.length; i++) if (element.actions[i] === action) { + element.actions.splice(i, 1); + element.actionIndex >= i && element.actionIndex--; + break; + } + }, + _removeActionByTag: function _removeActionByTag(tag, element, target) { + for (var i = 0, l = element.actions.length; i < l; ++i) { + var action = element.actions[i]; + if (action && action.getTag() === tag) { + if (target && action.getOriginalTarget() !== target) continue; + this._removeActionAtIndex(i, element); + break; + } + } + }, + removeActionByTag: function removeActionByTag(tag, target) { + tag === cc.Action.TAG_INVALID && cc.logID(1002); + var hashTargets = this._hashTargets; + if (target) { + var element = hashTargets[target._id]; + element && this._removeActionByTag(tag, element, target); + } else for (var name in hashTargets) { + var _element = hashTargets[name]; + this._removeActionByTag(tag, _element); + } + }, + getActionByTag: function getActionByTag(tag, target) { + tag === cc.Action.TAG_INVALID && cc.logID(1004); + var element = this._hashTargets[target._id]; + if (element) { + if (null != element.actions) for (var i = 0; i < element.actions.length; ++i) { + var action = element.actions[i]; + if (action && action.getTag() === tag) return action; + } + cc.logID(1005, tag); + } + return null; + }, + getNumberOfRunningActionsInTarget: function getNumberOfRunningActionsInTarget(target) { + var element = this._hashTargets[target._id]; + if (element) return element.actions ? element.actions.length : 0; + return 0; + }, + pauseTarget: function pauseTarget(target) { + var element = this._hashTargets[target._id]; + element && (element.paused = true); + }, + resumeTarget: function resumeTarget(target) { + var element = this._hashTargets[target._id]; + element && (element.paused = false); + }, + pauseAllRunningActions: function pauseAllRunningActions() { + var idsWithActions = []; + var locTargets = this._arrayTargets; + for (var i = 0; i < locTargets.length; i++) { + var element = locTargets[i]; + if (element && !element.paused) { + element.paused = true; + idsWithActions.push(element.target); + } + } + return idsWithActions; + }, + resumeTargets: function resumeTargets(targetsToResume) { + if (!targetsToResume) return; + for (var i = 0; i < targetsToResume.length; i++) targetsToResume[i] && this.resumeTarget(targetsToResume[i]); + }, + pauseTargets: function pauseTargets(targetsToPause) { + if (!targetsToPause) return; + for (var i = 0; i < targetsToPause.length; i++) targetsToPause[i] && this.pauseTarget(targetsToPause[i]); + }, + purgeSharedManager: function purgeSharedManager() { + cc.director.getScheduler().unscheduleUpdate(this); + }, + _removeActionAtIndex: function _removeActionAtIndex(index, element) { + var action = element.actions[index]; + element.actions.splice(index, 1); + element.actionIndex >= index && element.actionIndex--; + 0 === element.actions.length && this._deleteHashElement(element); + }, + _deleteHashElement: function _deleteHashElement(element) { + var ret = false; + if (element && !element.lock && this._hashTargets[element.target._id]) { + delete this._hashTargets[element.target._id]; + var targets = this._arrayTargets; + for (var i = 0, l = targets.length; i < l; i++) if (targets[i] === element) { + targets.splice(i, 1); + break; + } + this._putElement(element); + ret = true; + } + return ret; + }, + update: function update(dt) { + var locTargets = this._arrayTargets, locCurrTarget; + for (var elt = 0; elt < locTargets.length; elt++) { + this._currentTarget = locTargets[elt]; + locCurrTarget = this._currentTarget; + if (!locCurrTarget.paused && locCurrTarget.actions) { + locCurrTarget.lock = true; + for (locCurrTarget.actionIndex = 0; locCurrTarget.actionIndex < locCurrTarget.actions.length; locCurrTarget.actionIndex++) { + locCurrTarget.currentAction = locCurrTarget.actions[locCurrTarget.actionIndex]; + if (!locCurrTarget.currentAction) continue; + locCurrTarget.currentAction.step(dt * (locCurrTarget.currentAction._speedMethod ? locCurrTarget.currentAction._speed : 1)); + if (locCurrTarget.currentAction && locCurrTarget.currentAction.isDone()) { + locCurrTarget.currentAction.stop(); + var action = locCurrTarget.currentAction; + locCurrTarget.currentAction = null; + this.removeAction(action); + } + locCurrTarget.currentAction = null; + } + locCurrTarget.lock = false; + } + 0 === locCurrTarget.actions.length && this._deleteHashElement(locCurrTarget) && elt--; + } + } + }; + false; + }), { + "../core/platform/CCClass": 121, + "../core/platform/js": 142 + } ], + 8: [ (function(require, module, exports) { + "use strict"; + require("./CCActionManager"); + require("./CCAction"); + require("./CCActionInterval"); + require("./CCActionInstant"); + require("./CCActionEase"); + require("./CCActionCatmullRom"); + require("./tween"); + }), { + "./CCAction": 2, + "./CCActionCatmullRom": 3, + "./CCActionEase": 4, + "./CCActionInstant": 5, + "./CCActionInterval": 6, + "./CCActionManager": 7, + "./tween": 9 + } ], + 9: [ (function(require, module, exports) { + "use strict"; + var _bezier = require("../animation/bezier"); + var _tweenID = 0; + var TweenAction = cc.Class({ + name: "cc.TweenAction", + extends: cc.ActionInterval, + ctor: function ctor(duration, props, opts) { + this._opts = opts = opts || Object.create(null); + this._props = Object.create(null); + opts.progress = opts.progress || this.progress; + if (opts.easing && "string" === typeof opts.easing) { + var easingName = opts.easing; + opts.easing = cc.easing[easingName]; + !opts.easing && cc.warnID(1031, easingName); + } + var relative = this._opts.relative; + for (var name in props) { + var value = props[name]; + var easing = void 0, progress = void 0; + if (void 0 !== value.value && (value.easing || value.progress)) { + if ("string" === typeof value.easing) { + easing = cc.easing[value.easing]; + !easing && cc.warnID(1031, value.easing); + } else easing = value.easing; + progress = value.progress; + value = value.value; + } + var isNumber = "number" === typeof value; + if (!isNumber && (!value.lerp || relative && !value.add && !value.mul || !value.clone)) { + cc.warn("Can not animate " + name + " property, because it do not have [lerp, (add|mul), clone] function."); + continue; + } + var prop = Object.create(null); + prop.value = value; + prop.easing = easing; + prop.progress = progress; + this._props[name] = prop; + } + this._originProps = props; + this.initWithDuration(duration); + }, + clone: function clone() { + var action = new TweenAction(this._duration, this._originProps, this._opts); + this._cloneDecoration(action); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.ActionInterval.prototype.startWithTarget.call(this, target); + var relative = !!this._opts.relative; + var props = this._props; + for (var name in props) { + var value = target[name]; + var prop = props[name]; + if ("number" === typeof value) { + prop.start = value; + prop.current = value; + prop.end = relative ? value + prop.value : prop.value; + } else { + prop.start = value.clone(); + prop.current = value.clone(); + prop.end = relative ? (value.add || value.mul).call(value, prop.value) : prop.value; + } + } + }, + update: function update(t) { + var opts = this._opts; + var easingTime = t; + opts.easing && (easingTime = opts.easing(t)); + var target = this.target; + if (!target) return; + var props = this._props; + var progress = opts.progress; + for (var name in props) { + var prop = props[name]; + var time = prop.easing ? prop.easing(t) : easingTime; + var current = prop.current = (prop.progress || progress)(prop.start, prop.end, prop.current, time); + target[name] = current; + } + var onUpdate = opts.onUpdate; + onUpdate && onUpdate(target, t); + }, + progress: function progress(start, end, current, t) { + "number" === typeof start ? current = start + (end - start) * t : start.lerp(end, t, current); + return current; + } + }); + var SetAction = cc.Class({ + name: "cc.SetAction", + extends: cc.ActionInstant, + ctor: function ctor(props) { + this._props = {}; + void 0 !== props && this.init(props); + }, + init: function init(props) { + for (var name in props) this._props[name] = props[name]; + return true; + }, + update: function update() { + var props = this._props; + var target = this.target; + for (var name in props) target[name] = props[name]; + }, + clone: function clone() { + var action = new SetAction(); + action.init(this._props); + return action; + } + }); + function Tween(target) { + this._actions = []; + this._finalAction = null; + this._target = target; + this._tag = cc.Action.TAG_INVALID; + } + Tween.stopAll = function() { + cc.director.getActionManager().removeAllActions(); + }; + Tween.stopAllByTag = function(tag) { + cc.director.getActionManager().removeActionByTag(tag); + }; + Tween.stopAllByTarget = function(target) { + cc.director.getActionManager().removeAllActionsFromTarget(target); + }; + Tween.prototype.then = function(other) { + other instanceof cc.Action ? this._actions.push(other.clone()) : this._actions.push(other._union()); + return this; + }; + Tween.prototype.target = function(target) { + this._target = target; + return this; + }; + Tween.prototype.start = function() { + var target = this._target; + if (!target) { + cc.warn("Please set target to tween first"); + return this; + } + if (target instanceof cc.Object && !target.isValid) return; + this._finalAction && cc.director.getActionManager().removeAction(this._finalAction); + this._finalAction = this._union(); + void 0 === target._id && (target._id = ++_tweenID); + this._finalAction.setTag(this._tag); + cc.director.getActionManager().addAction(this._finalAction, target, false); + return this; + }; + Tween.prototype.stop = function() { + this._finalAction && cc.director.getActionManager().removeAction(this._finalAction); + return this; + }; + Tween.prototype.tag = function(tag) { + this._tag = tag; + return this; + }; + Tween.prototype.clone = function(target) { + var action = this._union(); + return cc.tween(target).then(action.clone()); + }; + Tween.prototype.union = function() { + var action = this._union(); + this._actions.length = 0; + this._actions.push(action); + return this; + }; + Tween.prototype._union = function() { + var actions = this._actions; + actions = 1 === actions.length ? actions[0] : cc.sequence(actions); + return actions; + }; + Object.assign(Tween.prototype, { + bezierTo: function bezierTo(duration, c1, c2, to, opts) { + var c0x = c1.x, c0y = c1.y, c1x = c2.x, c1y = c2.y; + opts = opts || Object.create(null); + opts.progress = function(start, end, current, t) { + current.x = (0, _bezier.bezier)(start.x, c0x, c1x, end.x, t); + current.y = (0, _bezier.bezier)(start.y, c0y, c1y, end.y, t); + return current; + }; + return this.to(duration, { + position: to + }, opts); + }, + bezierBy: function bezierBy(duration, c1, c2, to, opts) { + var c0x = c1.x, c0y = c1.y, c1x = c2.x, c1y = c2.y; + opts = opts || Object.create(null); + opts.progress = function(start, end, current, t) { + var sx = start.x, sy = start.y; + current.x = (0, _bezier.bezier)(sx, c0x + sx, c1x + sx, end.x, t); + current.y = (0, _bezier.bezier)(sy, c0y + sy, c1y + sy, end.y, t); + return current; + }; + return this.by(duration, { + position: to + }, opts); + }, + flipX: function flipX() { + var _this = this; + return this.call((function() { + _this._target.scaleX *= -1; + }), this); + }, + flipY: function flipY() { + var _this2 = this; + return this.call((function() { + _this2._target.scaleY *= -1; + }), this); + }, + blink: function blink(duration, times, opts) { + var slice = 1 / times; + opts = opts || Object.create(null); + opts.progress = function(start, end, current, t) { + if (t >= 1) return start; + var m = t % slice; + return m > slice / 2 ? 255 : 0; + }; + return this.to(duration, { + opacity: 1 + }, opts); + } + }); + var tmp_args = []; + function wrapAction(action) { + return function() { + tmp_args.length = 0; + for (var l = arguments.length, i = 0; i < l; i++) { + var arg = tmp_args[i] = arguments[i]; + arg instanceof Tween && (tmp_args[i] = arg._union()); + } + return action.apply(this, tmp_args); + }; + } + var actions = { + to: function to(duration, props, opts) { + opts = opts || Object.create(null); + opts.relative = false; + return new TweenAction(duration, props, opts); + }, + by: function by(duration, props, opts) { + opts = opts || Object.create(null); + opts.relative = true; + return new TweenAction(duration, props, opts); + }, + set: function set(props) { + return new SetAction(props); + }, + delay: cc.delayTime, + call: cc.callFunc, + hide: cc.hide, + show: cc.show, + removeSelf: cc.removeSelf, + sequence: wrapAction(cc.sequence), + parallel: wrapAction(cc.spawn) + }; + var previousAsInputActions = { + repeat: cc.repeat, + repeatForever: function repeatForever(action) { + return cc.repeat(action, 1e9); + }, + reverseTime: cc.reverseTime + }; + var keys = Object.keys(actions); + var _loop = function _loop(i) { + var key = keys[i]; + Tween.prototype[key] = function() { + var action = actions[key].apply(this, arguments); + this._actions.push(action); + return this; + }; + }; + for (var i = 0; i < keys.length; i++) _loop(i); + keys = Object.keys(previousAsInputActions); + var _loop2 = function _loop2(_i) { + var key = keys[_i]; + Tween.prototype[key] = function() { + var actions = this._actions; + var action = arguments[arguments.length - 1]; + var length = arguments.length - 1; + if (action instanceof cc.Tween) action = action._union(); else if (!(action instanceof cc.Action)) { + action = actions[actions.length - 1]; + actions.length -= 1; + length += 1; + } + var args = [ action ]; + for (var _i2 = 0; _i2 < length; _i2++) args.push(arguments[_i2]); + action = previousAsInputActions[key].apply(this, args); + actions.push(action); + return this; + }; + }; + for (var _i = 0; _i < keys.length; _i++) _loop2(_i); + cc.tween = function(target) { + return new Tween(target); + }; + cc.Tween = Tween; + }), { + "../animation/bezier": 15 + } ], + 10: [ (function(require, module, exports) { + "use strict"; + var js = cc.js; + var Playable = require("./playable"); + var _require = require("./animation-curves"), EventAnimCurve = _require.EventAnimCurve, EventInfo = _require.EventInfo; + var WrapModeMask = require("./types").WrapModeMask; + var binarySearch = require("../core/utils/binary-search").binarySearchEpsilon; + function AnimationAnimator(target, animation) { + Playable.call(this); + this.target = target; + this.animation = animation; + this._anims = new js.array.MutableForwardIterator([]); + } + js.extend(AnimationAnimator, Playable); + var p = AnimationAnimator.prototype; + p.playState = function(state, startTime) { + if (!state.clip) return; + state.curveLoaded || initClipData(this.target, state); + state.animator = this; + state.play(); + "number" === typeof startTime && state.setTime(startTime); + this.play(); + }; + p.stopStatesExcept = function(state) { + var iterator = this._anims; + var array = iterator.array; + for (iterator.i = 0; iterator.i < array.length; ++iterator.i) { + var anim = array[iterator.i]; + if (anim === state) continue; + this.stopState(anim); + } + }; + p.addAnimation = function(anim) { + var index = this._anims.array.indexOf(anim); + -1 === index && this._anims.push(anim); + anim._setEventTarget(this.animation); + }; + p.removeAnimation = function(anim) { + var index = this._anims.array.indexOf(anim); + if (index >= 0) { + this._anims.fastRemoveAt(index); + 0 === this._anims.array.length && this.stop(); + } else cc.errorID(3907); + anim.animator = null; + }; + p.sample = function() { + var iterator = this._anims; + var array = iterator.array; + for (iterator.i = 0; iterator.i < array.length; ++iterator.i) { + var anim = array[iterator.i]; + anim.sample(); + } + }; + p.stopState = function(state) { + state && state.stop(); + }; + p.pauseState = function(state) { + state && state.pause(); + }; + p.resumeState = function(state) { + state && state.resume(); + this.isPaused && this.resume(); + }; + p.setStateTime = function(state, time) { + if (void 0 !== time) { + if (state) { + state.setTime(time); + state.sample(); + } + } else { + time = state; + var array = this._anims.array; + for (var i = 0; i < array.length; ++i) { + var anim = array[i]; + anim.setTime(time); + anim.sample(); + } + } + }; + p.onStop = function() { + var iterator = this._anims; + var array = iterator.array; + for (iterator.i = 0; iterator.i < array.length; ++iterator.i) { + var anim = array[iterator.i]; + anim.stop(); + } + }; + p.onPause = function() { + var array = this._anims.array; + for (var i = 0; i < array.length; ++i) { + var anim = array[i]; + anim.pause(); + anim.animator = null; + } + }; + p.onResume = function() { + var array = this._anims.array; + for (var i = 0; i < array.length; ++i) { + var anim = array[i]; + anim.animator = this; + anim.resume(); + } + }; + p._reloadClip = function(state) { + initClipData(this.target, state); + }; + function createBatchedProperty(propPath, firstDotIndex, mainValue, animValue) { + mainValue = mainValue.clone(); + var nextValue = mainValue; + var leftIndex = firstDotIndex + 1; + var rightIndex = propPath.indexOf(".", leftIndex); + while (-1 !== rightIndex) { + var nextName = propPath.slice(leftIndex, rightIndex); + nextValue = nextValue[nextName]; + leftIndex = rightIndex + 1; + rightIndex = propPath.indexOf(".", leftIndex); + } + var lastPropName = propPath.slice(leftIndex); + nextValue[lastPropName] = animValue; + return mainValue; + } + false; + function initClipData(root, state) { + var clip = state.clip; + state.duration = clip.duration; + state.speed = clip.speed; + state.wrapMode = clip.wrapMode; + state.frameRate = clip.sample; + (state.wrapMode & WrapModeMask.Loop) === WrapModeMask.Loop ? state.repeatCount = Infinity : state.repeatCount = 1; + var curves = state.curves = clip.createCurves(state, root); + var events = clip.events; + if (true, events) { + var curve; + for (var i = 0, l = events.length; i < l; i++) { + if (!curve) { + curve = new EventAnimCurve(); + curve.target = root; + curves.push(curve); + } + var eventData = events[i]; + var ratio = eventData.frame / state.duration; + var eventInfo = void 0; + var index = binarySearch(curve.ratios, ratio); + if (index >= 0) eventInfo = curve.events[index]; else { + eventInfo = new EventInfo(); + curve.ratios.push(ratio); + curve.events.push(eventInfo); + } + eventInfo.add(eventData.func, eventData.params); + } + } + } + false; + module.exports = AnimationAnimator; + }), { + "../core/utils/binary-search": 198, + "./animation-curves": 12, + "./playable": 19, + "./types": 20 + } ], + 11: [ (function(require, module, exports) { + "use strict"; + var WrapMode = require("./types").WrapMode; + var _require = require("./animation-curves"), DynamicAnimCurve = _require.DynamicAnimCurve, quickFindIndex = _require.quickFindIndex; + var sampleMotionPaths = require("./motion-path-helper").sampleMotionPaths; + var binarySearch = require("../core/utils/binary-search").binarySearchEpsilon; + var AnimationClip = cc.Class({ + name: "cc.AnimationClip", + extends: cc.Asset, + properties: { + _duration: { + default: 0, + type: cc.Float + }, + duration: { + get: function get() { + return this._duration; + } + }, + sample: { + default: 60 + }, + speed: { + default: 1 + }, + wrapMode: { + default: WrapMode.Normal + }, + curveData: { + default: {}, + visible: false + }, + events: { + default: [], + visible: false + } + }, + statics: { + createWithSpriteFrames: function createWithSpriteFrames(spriteFrames, sample) { + if (!Array.isArray(spriteFrames)) { + cc.errorID(3905); + return null; + } + var clip = new AnimationClip(); + clip.sample = sample || clip.sample; + clip._duration = spriteFrames.length / clip.sample; + var frames = []; + var step = 1 / clip.sample; + for (var i = 0, l = spriteFrames.length; i < l; i++) frames[i] = { + frame: i * step, + value: spriteFrames[i] + }; + clip.curveData = { + comps: { + "cc.Sprite": { + spriteFrame: frames + } + } + }; + return clip; + } + }, + onLoad: function onLoad() { + this._duration = Number.parseFloat(this.duration); + this.speed = Number.parseFloat(this.speed); + this.wrapMode = Number.parseInt(this.wrapMode); + this.frameRate = Number.parseFloat(this.sample); + }, + createPropCurve: function createPropCurve(target, propPath, keyframes) { + var motionPaths = []; + var isMotionPathProp = target instanceof cc.Node && "position" === propPath; + var curve = new DynamicAnimCurve(); + curve.target = target; + curve.prop = propPath; + for (var i = 0, l = keyframes.length; i < l; i++) { + var keyframe = keyframes[i]; + var ratio = keyframe.frame / this.duration; + curve.ratios.push(ratio); + isMotionPathProp && motionPaths.push(keyframe.motionPath); + var curveValue = keyframe.value; + curve.values.push(curveValue); + var curveTypes = keyframe.curve; + if (curveTypes) { + if ("string" === typeof curveTypes) { + curve.types.push(curveTypes); + continue; + } + if (Array.isArray(curveTypes)) { + curveTypes[0] === curveTypes[1] && curveTypes[2] === curveTypes[3] ? curve.types.push(DynamicAnimCurve.Linear) : curve.types.push(DynamicAnimCurve.Bezier(curveTypes)); + continue; + } + } + curve.types.push(DynamicAnimCurve.Linear); + } + isMotionPathProp && sampleMotionPaths(motionPaths, curve, this.duration, this.sample, target); + var ratios = curve.ratios; + var currRatioDif, lastRatioDif; + var canOptimize = true; + var EPSILON = 1e-6; + for (var _i = 1, _l = ratios.length; _i < _l; _i++) { + currRatioDif = ratios[_i] - ratios[_i - 1]; + if (1 === _i) lastRatioDif = currRatioDif; else if (Math.abs(currRatioDif - lastRatioDif) > EPSILON) { + canOptimize = false; + break; + } + } + curve._findFrameIndex = canOptimize ? quickFindIndex : binarySearch; + var firstValue = curve.values[0]; + void 0 === firstValue || null === firstValue || curve._lerp || ("number" === typeof firstValue ? curve._lerp = DynamicAnimCurve.prototype._lerpNumber : firstValue instanceof cc.Quat ? curve._lerp = DynamicAnimCurve.prototype._lerpQuat : firstValue instanceof cc.Vec2 ? curve._lerp = DynamicAnimCurve.prototype._lerpVector2 : firstValue instanceof cc.Vec3 ? curve._lerp = DynamicAnimCurve.prototype._lerpVector3 : firstValue.lerp && (curve._lerp = DynamicAnimCurve.prototype._lerpObject)); + return curve; + }, + createTargetCurves: function createTargetCurves(target, curveData, curves) { + var propsData = curveData.props; + var compsData = curveData.comps; + if (propsData) for (var propPath in propsData) { + var data = propsData[propPath]; + var curve = this.createPropCurve(target, propPath, data); + curves.push(curve); + } + if (compsData) for (var compName in compsData) { + var comp = target.getComponent(compName); + if (!comp) continue; + var compData = compsData[compName]; + for (var _propPath in compData) { + var _data = compData[_propPath]; + var _curve = this.createPropCurve(comp, _propPath, _data); + curves.push(_curve); + } + } + }, + createCurves: function createCurves(state, root) { + var curveData = this.curveData; + var childrenCurveDatas = curveData.paths; + var curves = []; + this.createTargetCurves(root, curveData, curves); + for (var namePath in childrenCurveDatas) { + var target = cc.find(namePath, root); + if (!target) continue; + var childCurveDatas = childrenCurveDatas[namePath]; + this.createTargetCurves(target, childCurveDatas, curves); + } + return curves; + } + }); + cc.AnimationClip = module.exports = AnimationClip; + }), { + "../core/utils/binary-search": 198, + "./animation-curves": 12, + "./motion-path-helper": 18, + "./types": 20 + } ], + 12: [ (function(require, module, exports) { + "use strict"; + var bezierByTime = require("./bezier").bezierByTime; + var binarySearch = require("../core/utils/binary-search").binarySearchEpsilon; + var WrapModeMask = require("./types").WrapModeMask; + var WrappedInfo = require("./types").WrappedInfo; + function computeRatioByType(ratio, type) { + if ("string" === typeof type) { + var func = cc.easing[type]; + func ? ratio = func(ratio) : cc.errorID(3906, type); + } else Array.isArray(type) && (ratio = bezierByTime(type, ratio)); + return ratio; + } + var AnimCurve = cc.Class({ + name: "cc.AnimCurve", + sample: function sample(time, ratio, state) {}, + onTimeChangedManually: void 0 + }); + function quickFindIndex(ratios, ratio) { + var length = ratios.length - 1; + if (0 === length) return 0; + var start = ratios[0]; + if (ratio < start) return 0; + var end = ratios[length]; + if (ratio > end) return ~ratios.length; + ratio = (ratio - start) / (end - start); + var eachLength = 1 / length; + var index = ratio / eachLength; + var floorIndex = 0 | index; + var EPSILON = 1e-6; + if (index - floorIndex < EPSILON) return floorIndex; + if (floorIndex + 1 - index < EPSILON) return floorIndex + 1; + return ~(floorIndex + 1); + } + var DynamicAnimCurve = cc.Class({ + name: "cc.DynamicAnimCurve", + extends: AnimCurve, + ctor: function ctor() { + this._cachedIndex = 0; + }, + properties: { + target: null, + prop: "", + values: [], + ratios: [], + types: [] + }, + _findFrameIndex: binarySearch, + _lerp: void 0, + _lerpNumber: function _lerpNumber(from, to, t) { + return from + (to - from) * t; + }, + _lerpObject: function _lerpObject(from, to, t) { + return from.lerp(to, t); + }, + _lerpQuat: (function() { + var out = cc.quat(); + return function(from, to, t) { + return from.lerp(to, t, out); + }; + })(), + _lerpVector2: (function() { + var out = cc.v2(); + return function(from, to, t) { + return from.lerp(to, t, out); + }; + })(), + _lerpVector3: (function() { + var out = cc.v3(); + return function(from, to, t) { + return from.lerp(to, t, out); + }; + })(), + sample: function sample(time, ratio, state) { + var values = this.values; + var ratios = this.ratios; + var frameCount = ratios.length; + if (0 === frameCount) return; + var shoudRefind = true; + var cachedIndex = this._cachedIndex; + if (cachedIndex < 0) { + cachedIndex = ~cachedIndex; + if (cachedIndex > 0 && cachedIndex < ratios.length) { + var _fromRatio = ratios[cachedIndex - 1]; + var _toRatio = ratios[cachedIndex]; + ratio > _fromRatio && ratio < _toRatio && (shoudRefind = false); + } + } + shoudRefind && (this._cachedIndex = this._findFrameIndex(ratios, ratio)); + var value; + var index = this._cachedIndex; + if (index < 0) { + index = ~index; + if (index <= 0) value = values[0]; else if (index >= frameCount) value = values[frameCount - 1]; else { + var fromVal = values[index - 1]; + if (this._lerp) { + var fromRatio = ratios[index - 1]; + var toRatio = ratios[index]; + var type = this.types[index - 1]; + var ratioBetweenFrames = (ratio - fromRatio) / (toRatio - fromRatio); + type && (ratioBetweenFrames = computeRatioByType(ratioBetweenFrames, type)); + var toVal = values[index]; + value = this._lerp(fromVal, toVal, ratioBetweenFrames); + } else value = fromVal; + } + } else value = values[index]; + this.target[this.prop] = value; + } + }); + DynamicAnimCurve.Linear = null; + DynamicAnimCurve.Bezier = function(controlPoints) { + return controlPoints; + }; + var EventInfo = function EventInfo() { + this.events = []; + }; + EventInfo.prototype.add = function(func, params) { + this.events.push({ + func: func || "", + params: params || [] + }); + }; + var EventAnimCurve = cc.Class({ + name: "cc.EventAnimCurve", + extends: AnimCurve, + properties: { + target: null, + ratios: [], + events: [], + _wrappedInfo: { + default: function _default() { + return new WrappedInfo(); + } + }, + _lastWrappedInfo: null, + _ignoreIndex: NaN + }, + _wrapIterations: function _wrapIterations(iterations) { + iterations - (0 | iterations) === 0 && (iterations -= 1); + return 0 | iterations; + }, + sample: function sample(time, ratio, state) { + var length = this.ratios.length; + var currentWrappedInfo = state.getWrappedInfo(state.time, this._wrappedInfo); + var direction = currentWrappedInfo.direction; + var currentIndex = binarySearch(this.ratios, currentWrappedInfo.ratio); + if (currentIndex < 0) { + currentIndex = ~currentIndex - 1; + direction < 0 && (currentIndex += 1); + } + this._ignoreIndex !== currentIndex && (this._ignoreIndex = NaN); + currentWrappedInfo.frameIndex = currentIndex; + if (!this._lastWrappedInfo) { + this._fireEvent(currentIndex); + this._lastWrappedInfo = new WrappedInfo(currentWrappedInfo); + return; + } + var wrapMode = state.wrapMode; + var currentIterations = this._wrapIterations(currentWrappedInfo.iterations); + var lastWrappedInfo = this._lastWrappedInfo; + var lastIterations = this._wrapIterations(lastWrappedInfo.iterations); + var lastIndex = lastWrappedInfo.frameIndex; + var lastDirection = lastWrappedInfo.direction; + var interationsChanged = -1 !== lastIterations && currentIterations !== lastIterations; + if (lastIndex === currentIndex && interationsChanged && 1 === length) this._fireEvent(0); else if (lastIndex !== currentIndex || interationsChanged) { + direction = lastDirection; + do { + if (lastIndex !== currentIndex) { + if (-1 === direction && 0 === lastIndex && currentIndex > 0) { + (wrapMode & WrapModeMask.PingPong) === WrapModeMask.PingPong ? direction *= -1 : lastIndex = length; + lastIterations++; + } else if (1 === direction && lastIndex === length - 1 && currentIndex < length - 1) { + (wrapMode & WrapModeMask.PingPong) === WrapModeMask.PingPong ? direction *= -1 : lastIndex = -1; + lastIterations++; + } + if (lastIndex === currentIndex) break; + if (lastIterations > currentIterations) break; + } + lastIndex += direction; + cc.director.getAnimationManager().pushDelayEvent(this, "_fireEvent", [ lastIndex ]); + } while (lastIndex !== currentIndex && lastIndex > -1 && lastIndex < length); + } + this._lastWrappedInfo.set(currentWrappedInfo); + }, + _fireEvent: function _fireEvent(index) { + if (index < 0 || index >= this.events.length || this._ignoreIndex === index) return; + var eventInfo = this.events[index]; + var events = eventInfo.events; + if (!this.target.isValid) return; + var components = this.target._components; + for (var i = 0; i < events.length; i++) { + var event = events[i]; + var funcName = event.func; + for (var j = 0; j < components.length; j++) { + var component = components[j]; + var func = component[funcName]; + func && func.apply(component, event.params); + } + } + }, + onTimeChangedManually: function onTimeChangedManually(time, state) { + this._lastWrappedInfo = null; + this._ignoreIndex = NaN; + var info = state.getWrappedInfo(time, this._wrappedInfo); + var direction = info.direction; + var frameIndex = binarySearch(this.ratios, info.ratio); + if (frameIndex < 0) { + frameIndex = ~frameIndex - 1; + direction < 0 && (frameIndex += 1); + this._ignoreIndex = frameIndex; + } + } + }); + false; + module.exports = { + AnimCurve: AnimCurve, + DynamicAnimCurve: DynamicAnimCurve, + EventAnimCurve: EventAnimCurve, + EventInfo: EventInfo, + computeRatioByType: computeRatioByType, + quickFindIndex: quickFindIndex + }; + }), { + "../core/utils/binary-search": 198, + "./bezier": 15, + "./types": 20 + } ], + 13: [ (function(require, module, exports) { + "use strict"; + var js = cc.js; + var AnimationManager = cc.Class({ + ctor: function ctor() { + this._anims = new js.array.MutableForwardIterator([]); + this._delayEvents = []; + cc.director._scheduler && cc.director._scheduler.enableForTarget(this); + }, + update: function update(dt) { + var iterator = this._anims; + var array = iterator.array; + for (iterator.i = 0; iterator.i < array.length; ++iterator.i) { + var anim = array[iterator.i]; + anim._isPlaying && !anim._isPaused && anim.update(dt); + } + var events = this._delayEvents; + for (var i = 0; i < events.length; i++) { + var event = events[i]; + event.target[event.func].apply(event.target, event.args); + } + events.length = 0; + }, + destruct: function destruct() {}, + addAnimation: function addAnimation(anim) { + var index = this._anims.array.indexOf(anim); + -1 === index && this._anims.push(anim); + }, + removeAnimation: function removeAnimation(anim) { + var index = this._anims.array.indexOf(anim); + index >= 0 ? this._anims.fastRemoveAt(index) : cc.errorID(3907); + }, + pushDelayEvent: function pushDelayEvent(target, func, args) { + this._delayEvents.push({ + target: target, + func: func, + args: args + }); + } + }); + cc.AnimationManager = module.exports = AnimationManager; + }), {} ], + 14: [ (function(require, module, exports) { + "use strict"; + var js = cc.js; + var Playable = require("./playable"); + var Types = require("./types"); + var WrappedInfo = Types.WrappedInfo; + var WrapMode = Types.WrapMode; + var WrapModeMask = Types.WrapModeMask; + function AnimationState(clip, name) { + Playable.call(this); + this._currentFramePlayed = false; + this._delay = 0; + this._delayTime = 0; + this._wrappedInfo = new WrappedInfo(); + this._lastWrappedInfo = null; + this._process = process; + this._clip = clip; + this._name = name || clip && clip.name; + this.animator = null; + this.curves = []; + this.delay = 0; + this.repeatCount = 1; + this.duration = 1; + this.speed = 1; + this.wrapMode = WrapMode.Normal; + this.time = 0; + this._target = null; + this._lastframeEventOn = false; + this.emit = function() { + var args = new Array(arguments.length); + for (var i = 0, l = args.length; i < l; i++) args[i] = arguments[i]; + cc.director.getAnimationManager().pushDelayEvent(this, "_emit", args); + }; + } + js.extend(AnimationState, Playable); + var proto = AnimationState.prototype; + proto._emit = function(type, state) { + this._target && this._target.isValid && this._target.emit(type, type, state); + }; + proto.on = function(type, callback, target) { + if (this._target && this._target.isValid) { + "lastframe" === type && (this._lastframeEventOn = true); + return this._target.on(type, callback, target); + } + return null; + }; + proto.once = function(type, callback, target) { + if (this._target && this._target.isValid) { + "lastframe" === type && (this._lastframeEventOn = true); + var self = this; + return this._target.once(type, (function(event) { + callback.call(target, event); + self._lastframeEventOn = false; + })); + } + return null; + }; + proto.off = function(type, callback, target) { + if (this._target && this._target.isValid) { + "lastframe" === type && (this._target.hasEventListener(type) || (this._lastframeEventOn = false)); + this._target.off(type, callback, target); + } + }; + proto._setEventTarget = function(target) { + this._target = target; + }; + proto.onPlay = function() { + this.setTime(0); + this._delayTime = this._delay; + cc.director.getAnimationManager().addAnimation(this); + this.animator && this.animator.addAnimation(this); + this.emit("play", this); + }; + proto.onStop = function() { + this.isPaused || cc.director.getAnimationManager().removeAnimation(this); + this.animator && this.animator.removeAnimation(this); + this.emit("stop", this); + }; + proto.onResume = function() { + cc.director.getAnimationManager().addAnimation(this); + this.emit("resume", this); + }; + proto.onPause = function() { + cc.director.getAnimationManager().removeAnimation(this); + this.emit("pause", this); + }; + proto.setTime = function(time) { + this._currentFramePlayed = false; + this.time = time || 0; + var curves = this.curves; + for (var i = 0, l = curves.length; i < l; i++) { + var curve = curves[i]; + curve.onTimeChangedManually && curve.onTimeChangedManually(time, this); + } + }; + function process() { + var info = this.sample(); + if (this._lastframeEventOn) { + var lastInfo; + lastInfo = this._lastWrappedInfo ? this._lastWrappedInfo : this._lastWrappedInfo = new WrappedInfo(info); + this.repeatCount > 1 && (0 | info.iterations) > (0 | lastInfo.iterations) && this.emit("lastframe", this); + lastInfo.set(info); + } + if (info.stopped) { + this.stop(); + this.emit("finished", this); + } + } + function simpleProcess() { + var time = this.time; + var duration = this.duration; + if (time > duration) { + time %= duration; + 0 === time && (time = duration); + } else if (time < 0) { + time %= duration; + 0 !== time && (time += duration); + } + var ratio = time / duration; + var curves = this.curves; + for (var i = 0, len = curves.length; i < len; i++) { + var curve = curves[i]; + curve.sample(time, ratio, this); + } + if (this._lastframeEventOn) { + void 0 === this._lastIterations && (this._lastIterations = ratio); + (this.time > 0 && this._lastIterations > ratio || this.time < 0 && this._lastIterations < ratio) && this.emit("lastframe", this); + this._lastIterations = ratio; + } + } + proto.update = function(delta) { + if (this._delayTime > 0) { + this._delayTime -= delta; + if (this._delayTime > 0) return; + } + this._currentFramePlayed ? this.time += delta * this.speed : this._currentFramePlayed = true; + this._process(); + }; + proto._needRevers = function(currentIterations) { + var wrapMode = this.wrapMode; + var needRevers = false; + if ((wrapMode & WrapModeMask.PingPong) === WrapModeMask.PingPong) { + var isEnd = currentIterations - (0 | currentIterations) === 0; + isEnd && currentIterations > 0 && (currentIterations -= 1); + var isOddIteration = 1 & currentIterations; + isOddIteration && (needRevers = !needRevers); + } + (wrapMode & WrapModeMask.Reverse) === WrapModeMask.Reverse && (needRevers = !needRevers); + return needRevers; + }; + proto.getWrappedInfo = function(time, info) { + info = info || new WrappedInfo(); + var stopped = false; + var duration = this.duration; + var repeatCount = this.repeatCount; + var currentIterations = time > 0 ? time / duration : -time / duration; + if (currentIterations >= repeatCount) { + currentIterations = repeatCount; + stopped = true; + var tempRatio = repeatCount - (0 | repeatCount); + 0 === tempRatio && (tempRatio = 1); + time = tempRatio * duration * (time > 0 ? 1 : -1); + } + if (time > duration) { + var tempTime = time % duration; + time = 0 === tempTime ? duration : tempTime; + } else if (time < 0) { + time %= duration; + 0 !== time && (time += duration); + } + var needRevers = false; + var shouldWrap = this._wrapMode & WrapModeMask.ShouldWrap; + shouldWrap && (needRevers = this._needRevers(currentIterations)); + var direction = needRevers ? -1 : 1; + this.speed < 0 && (direction *= -1); + shouldWrap && needRevers && (time = duration - time); + info.ratio = time / duration; + info.time = time; + info.direction = direction; + info.stopped = stopped; + info.iterations = currentIterations; + return info; + }; + proto.sample = function() { + var info = this.getWrappedInfo(this.time, this._wrappedInfo); + var curves = this.curves; + for (var i = 0, len = curves.length; i < len; i++) { + var curve = curves[i]; + curve.sample(info.time, info.ratio, this); + } + return info; + }; + js.get(proto, "clip", (function() { + return this._clip; + })); + js.get(proto, "name", (function() { + return this._name; + })); + js.obsolete(proto, "AnimationState.length", "duration"); + js.getset(proto, "curveLoaded", (function() { + return this.curves.length > 0; + }), (function() { + this.curves.length = 0; + })); + js.getset(proto, "wrapMode", (function() { + return this._wrapMode; + }), (function(value) { + this._wrapMode = value; + false; + this.time = 0; + value & WrapModeMask.Loop ? this.repeatCount = Infinity : this.repeatCount = 1; + })); + js.getset(proto, "repeatCount", (function() { + return this._repeatCount; + }), (function(value) { + this._repeatCount = value; + var shouldWrap = this._wrapMode & WrapModeMask.ShouldWrap; + var reverse = (this.wrapMode & WrapModeMask.Reverse) === WrapModeMask.Reverse; + this._process = Infinity !== value || shouldWrap || reverse ? process : simpleProcess; + })); + js.getset(proto, "delay", (function() { + return this._delay; + }), (function(value) { + this._delayTime = this._delay = value; + })); + cc.AnimationState = module.exports = AnimationState; + }), { + "./playable": 19, + "./types": 20 + } ], + 15: [ (function(require, module, exports) { + "use strict"; + function bezier(C1, C2, C3, C4, t) { + var t1 = 1 - t; + return t1 * (t1 * (C1 + (3 * C2 - C1) * t) + 3 * C3 * t * t) + C4 * t * t * t; + } + var cos = Math.cos, acos = Math.acos, max = Math.max, pi = Math.PI, tau = 2 * pi, sqrt = Math.sqrt; + function crt(v) { + return v < 0 ? -Math.pow(-v, 1 / 3) : Math.pow(v, 1 / 3); + } + function cardano(curve, x) { + var pa = x - 0; + var pb = x - curve[0]; + var pc = x - curve[2]; + var pd = x - 1; + var pa3 = 3 * pa; + var pb3 = 3 * pb; + var pc3 = 3 * pc; + var d = -pa + pb3 - pc3 + pd, rd = 1 / d, r3 = 1 / 3, a = (pa3 - 6 * pb + pc3) * rd, a3 = a * r3, b = (-pa3 + pb3) * rd, c = pa * rd, p = (3 * b - a * a) * r3, p3 = p * r3, q = (2 * a * a * a - 9 * a * b + 27 * c) / 27, q2 = q / 2, discriminant = q2 * q2 + p3 * p3 * p3, u1, v1, x1, x2, x3; + if (discriminant < 0) { + var mp3 = -p * r3, mp33 = mp3 * mp3 * mp3, r = sqrt(mp33), t = -q / (2 * r), cosphi = t < -1 ? -1 : t > 1 ? 1 : t, phi = acos(cosphi), crtr = crt(r), t1 = 2 * crtr; + x1 = t1 * cos(phi * r3) - a3; + x2 = t1 * cos((phi + tau) * r3) - a3; + x3 = t1 * cos((phi + 2 * tau) * r3) - a3; + return 0 <= x1 && x1 <= 1 ? 0 <= x2 && x2 <= 1 ? 0 <= x3 && x3 <= 1 ? max(x1, x2, x3) : max(x1, x2) : 0 <= x3 && x3 <= 1 ? max(x1, x3) : x1 : 0 <= x2 && x2 <= 1 ? 0 <= x3 && x3 <= 1 ? max(x2, x3) : x2 : x3; + } + if (0 === discriminant) { + u1 = q2 < 0 ? crt(-q2) : -crt(q2); + x1 = 2 * u1 - a3; + x2 = -u1 - a3; + return 0 <= x1 && x1 <= 1 ? 0 <= x2 && x2 <= 1 ? max(x1, x2) : x1 : x2; + } + var sd = sqrt(discriminant); + u1 = crt(-q2 + sd); + v1 = crt(q2 + sd); + x1 = u1 - v1 - a3; + return x1; + } + function bezierByTime(controlPoints, x) { + var percent = cardano(controlPoints, x); + var p1y = controlPoints[1]; + var p2y = controlPoints[3]; + return ((1 - percent) * (p1y + (p2y - p1y) * percent) * 3 + percent * percent) * percent; + } + false; + module.exports = { + bezier: bezier, + bezierByTime: bezierByTime + }; + }), {} ], + 16: [ (function(require, module, exports) { + "use strict"; + var easing = { + constant: function constant() { + return 0; + }, + linear: function linear(k) { + return k; + }, + quadIn: function quadIn(k) { + return k * k; + }, + quadOut: function quadOut(k) { + return k * (2 - k); + }, + quadInOut: function quadInOut(k) { + if ((k *= 2) < 1) return .5 * k * k; + return -.5 * (--k * (k - 2) - 1); + }, + cubicIn: function cubicIn(k) { + return k * k * k; + }, + cubicOut: function cubicOut(k) { + return --k * k * k + 1; + }, + cubicInOut: function cubicInOut(k) { + if ((k *= 2) < 1) return .5 * k * k * k; + return .5 * ((k -= 2) * k * k + 2); + }, + quartIn: function quartIn(k) { + return k * k * k * k; + }, + quartOut: function quartOut(k) { + return 1 - --k * k * k * k; + }, + quartInOut: function quartInOut(k) { + if ((k *= 2) < 1) return .5 * k * k * k * k; + return -.5 * ((k -= 2) * k * k * k - 2); + }, + quintIn: function quintIn(k) { + return k * k * k * k * k; + }, + quintOut: function quintOut(k) { + return --k * k * k * k * k + 1; + }, + quintInOut: function quintInOut(k) { + if ((k *= 2) < 1) return .5 * k * k * k * k * k; + return .5 * ((k -= 2) * k * k * k * k + 2); + }, + sineIn: function sineIn(k) { + return 1 - Math.cos(k * Math.PI / 2); + }, + sineOut: function sineOut(k) { + return Math.sin(k * Math.PI / 2); + }, + sineInOut: function sineInOut(k) { + return .5 * (1 - Math.cos(Math.PI * k)); + }, + expoIn: function expoIn(k) { + return 0 === k ? 0 : Math.pow(1024, k - 1); + }, + expoOut: function expoOut(k) { + return 1 === k ? 1 : 1 - Math.pow(2, -10 * k); + }, + expoInOut: function expoInOut(k) { + if (0 === k) return 0; + if (1 === k) return 1; + if ((k *= 2) < 1) return .5 * Math.pow(1024, k - 1); + return .5 * (2 - Math.pow(2, -10 * (k - 1))); + }, + circIn: function circIn(k) { + return 1 - Math.sqrt(1 - k * k); + }, + circOut: function circOut(k) { + return Math.sqrt(1 - --k * k); + }, + circInOut: function circInOut(k) { + if ((k *= 2) < 1) return -.5 * (Math.sqrt(1 - k * k) - 1); + return .5 * (Math.sqrt(1 - (k -= 2) * k) + 1); + }, + elasticIn: function elasticIn(k) { + var s, a = .1, p = .4; + if (0 === k) return 0; + if (1 === k) return 1; + if (!a || a < 1) { + a = 1; + s = p / 4; + } else s = p * Math.asin(1 / a) / (2 * Math.PI); + return -a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p); + }, + elasticOut: function elasticOut(k) { + var s, a = .1, p = .4; + if (0 === k) return 0; + if (1 === k) return 1; + if (!a || a < 1) { + a = 1; + s = p / 4; + } else s = p * Math.asin(1 / a) / (2 * Math.PI); + return a * Math.pow(2, -10 * k) * Math.sin((k - s) * (2 * Math.PI) / p) + 1; + }, + elasticInOut: function elasticInOut(k) { + var s, a = .1, p = .4; + if (0 === k) return 0; + if (1 === k) return 1; + if (!a || a < 1) { + a = 1; + s = p / 4; + } else s = p * Math.asin(1 / a) / (2 * Math.PI); + if ((k *= 2) < 1) return a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p) * -.5; + return a * Math.pow(2, -10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p) * .5 + 1; + }, + backIn: function backIn(k) { + var s = 1.70158; + return k * k * ((s + 1) * k - s); + }, + backOut: function backOut(k) { + var s = 1.70158; + return --k * k * ((s + 1) * k + s) + 1; + }, + backInOut: function backInOut(k) { + var s = 2.5949095; + if ((k *= 2) < 1) return k * k * ((s + 1) * k - s) * .5; + return .5 * ((k -= 2) * k * ((s + 1) * k + s) + 2); + }, + bounceIn: function bounceIn(k) { + return 1 - easing.bounceOut(1 - k); + }, + bounceOut: function bounceOut(k) { + return k < 1 / 2.75 ? 7.5625 * k * k : k < 2 / 2.75 ? 7.5625 * (k -= 1.5 / 2.75) * k + .75 : k < 2.5 / 2.75 ? 7.5625 * (k -= 2.25 / 2.75) * k + .9375 : 7.5625 * (k -= 2.625 / 2.75) * k + .984375; + }, + bounceInOut: function bounceInOut(k) { + if (k < .5) return .5 * easing.bounceIn(2 * k); + return .5 * easing.bounceOut(2 * k - 1) + .5; + }, + smooth: function smooth(t) { + if (t <= 0) return 0; + if (t >= 1) return 1; + return t * t * (3 - 2 * t); + }, + fade: function fade(t) { + if (t <= 0) return 0; + if (t >= 1) return 1; + return t * t * t * (t * (6 * t - 15) + 10); + } + }; + function _makeOutIn(fnIn, fnOut) { + return function(k) { + if (k < .5) return fnOut(2 * k) / 2; + return fnIn(2 * k - 1) / 2 + .5; + }; + } + easing.quadOutIn = _makeOutIn(easing.quadIn, easing.quadOut); + easing.cubicOutIn = _makeOutIn(easing.cubicIn, easing.cubicOut); + easing.quartOutIn = _makeOutIn(easing.quartIn, easing.quartOut); + easing.quintOutIn = _makeOutIn(easing.quintIn, easing.quintOut); + easing.sineOutIn = _makeOutIn(easing.sineIn, easing.sineOut); + easing.expoOutIn = _makeOutIn(easing.expoIn, easing.expoOut); + easing.circOutIn = _makeOutIn(easing.circIn, easing.circOut); + easing.backOutIn = _makeOutIn(easing.backIn, easing.backOut); + easing.bounceIn = function(k) { + return 1 - easing.bounceOut(1 - k); + }; + easing.bounceInOut = function(k) { + if (k < .5) return .5 * easing.bounceIn(2 * k); + return .5 * easing.bounceOut(2 * k - 1) + .5; + }; + easing.bounceOutIn = _makeOutIn(easing.bounceIn, easing.bounceOut); + cc.easing = module.exports = easing; + }), {} ], + 17: [ (function(require, module, exports) { + "use strict"; + require("./bezier"); + require("./easing"); + require("./types"); + require("./motion-path-helper"); + require("./animation-curves"); + require("./animation-clip"); + require("./animation-manager"); + require("./animation-state"); + require("./animation-animator"); + }), { + "./animation-animator": 10, + "./animation-clip": 11, + "./animation-curves": 12, + "./animation-manager": 13, + "./animation-state": 14, + "./bezier": 15, + "./easing": 16, + "./motion-path-helper": 18, + "./types": 20 + } ], + 18: [ (function(require, module, exports) { + "use strict"; + var DynamicAnimCurve = require("./animation-curves").DynamicAnimCurve; + var computeRatioByType = require("./animation-curves").computeRatioByType; + var bezier = require("./bezier").bezier; + var binarySearch = require("../core/utils/binary-search").binarySearchEpsilon; + var v2 = cc.v2; + function Curve(points) { + this.points = points || []; + this.beziers = []; + this.ratios = []; + this.progresses = []; + this.length = 0; + this.computeBeziers(); + } + Curve.prototype.computeBeziers = function() { + this.beziers.length = 0; + this.ratios.length = 0; + this.progresses.length = 0; + this.length = 0; + var bezier; + for (var i = 1; i < this.points.length; i++) { + var startPoint = this.points[i - 1]; + var endPoint = this.points[i]; + bezier = new Bezier(); + bezier.start = startPoint.pos; + bezier.startCtrlPoint = startPoint.out; + bezier.end = endPoint.pos; + bezier.endCtrlPoint = endPoint["in"]; + this.beziers.push(bezier); + this.length += bezier.getLength(); + } + var current = 0; + for (var i = 0; i < this.beziers.length; i++) { + bezier = this.beziers[i]; + this.ratios[i] = bezier.getLength() / this.length; + this.progresses[i] = current += this.ratios[i]; + } + return this.beziers; + }; + function Bezier() { + this.start = v2(); + this.end = v2(); + this.startCtrlPoint = v2(); + this.endCtrlPoint = v2(); + } + Bezier.prototype.getPointAt = function(u) { + var t = this.getUtoTmapping(u); + return this.getPoint(t); + }; + Bezier.prototype.getPoint = function(t) { + var x = bezier(this.start.x, this.startCtrlPoint.x, this.endCtrlPoint.x, this.end.x, t); + var y = bezier(this.start.y, this.startCtrlPoint.y, this.endCtrlPoint.y, this.end.y, t); + return new v2(x, y); + }; + Bezier.prototype.getLength = function() { + var lengths = this.getLengths(); + return lengths[lengths.length - 1]; + }; + Bezier.prototype.getLengths = function(divisions) { + divisions || (divisions = this.__arcLengthDivisions ? this.__arcLengthDivisions : 200); + if (this.cacheArcLengths && this.cacheArcLengths.length === divisions + 1) return this.cacheArcLengths; + var cache = []; + var current, last = this.getPoint(0), vector = v2(); + var p, sum = 0; + cache.push(0); + for (p = 1; p <= divisions; p++) { + current = this.getPoint(p / divisions); + vector.x = last.x - current.x; + vector.y = last.y - current.y; + sum += vector.mag(); + cache.push(sum); + last = current; + } + this.cacheArcLengths = cache; + return cache; + }; + Bezier.prototype.getUtoTmapping = function(u, distance) { + var arcLengths = this.getLengths(); + var i = 0, il = arcLengths.length; + var targetArcLength; + targetArcLength = distance || u * arcLengths[il - 1]; + var low = 0, high = il - 1, comparison; + while (low <= high) { + i = Math.floor(low + (high - low) / 2); + comparison = arcLengths[i] - targetArcLength; + if (comparison < 0) { + low = i + 1; + continue; + } + if (comparison > 0) { + high = i - 1; + continue; + } + high = i; + break; + } + i = high; + if (arcLengths[i] === targetArcLength) { + var t = i / (il - 1); + return t; + } + var lengthBefore = arcLengths[i]; + var lengthAfter = arcLengths[i + 1]; + var segmentLength = lengthAfter - lengthBefore; + var segmentFraction = (targetArcLength - lengthBefore) / segmentLength; + var t = (i + segmentFraction) / (il - 1); + return t; + }; + function checkMotionPath(motionPath) { + if (!Array.isArray(motionPath)) return false; + for (var i = 0, l = motionPath.length; i < l; i++) { + var controls = motionPath[i]; + if (!Array.isArray(controls) || 6 !== controls.length) return false; + } + return true; + } + function sampleMotionPaths(motionPaths, data, duration, fps, target) { + function createControlPoints(array) { + if (array instanceof cc.Vec2) return { + in: array, + pos: array, + out: array + }; + if (Array.isArray(array) && 6 === array.length) return { + in: v2(array[2], array[3]), + pos: v2(array[0], array[1]), + out: v2(array[4], array[5]) + }; + return { + in: cc.Vec2.ZERO, + pos: cc.Vec2.ZERO, + out: cc.Vec2.ZERO + }; + } + var values = data.values = data.values.map((function(value) { + Array.isArray(value) && (value = 2 === value.length ? cc.v2(value[0], value[1]) : cc.v3(value[0], value[1], value[2])); + return value; + })); + if (0 === motionPaths.length || 0 === values.length) return; + var motionPathValid = false; + for (var _i = 0; _i < motionPaths.length; _i++) { + var _motionPath = motionPaths[_i]; + if (_motionPath && !checkMotionPath(_motionPath)) { + cc.errorID(3904, target ? target.name : "", "position", _i); + _motionPath = null; + } + if (_motionPath && _motionPath.length > 0) { + motionPathValid = true; + break; + } + } + if (!motionPathValid) return; + if (1 === values.length) return; + var types = data.types; + var ratios = data.ratios; + var newValues = data.values = []; + var newTypes = data.types = []; + var newRatios = data.ratios = []; + function addNewDatas(value, type, ratio) { + newValues.push(value); + newTypes.push(type); + newRatios.push(ratio); + } + var startRatioOffset = 0; + var EPSILON = 1e-6; + var newType = DynamicAnimCurve.Linear; + for (var i = 0, l = motionPaths.length; i < l - 1; i++) { + var motionPath = motionPaths[i]; + var ratio = ratios[i]; + var nextRatio = ratios[i + 1]; + var betweenRatio = nextRatio - ratio; + var value = values[i]; + var nextValue = values[i + 1]; + var type = types[i]; + var results = []; + var progress = startRatioOffset / betweenRatio; + var speed = 1 / (betweenRatio * duration * fps); + var finalProgress; + if (motionPath && motionPath.length > 0) { + var points = []; + points.push(createControlPoints(value)); + for (var j = 0, l2 = motionPath.length; j < l2; j++) { + var controlPoints = createControlPoints(motionPath[j]); + points.push(controlPoints); + } + points.push(createControlPoints(nextValue)); + var curve = new Curve(points); + curve.computeBeziers(); + var progresses = curve.progresses; + while (1 - progress > EPSILON) { + finalProgress = progress; + finalProgress = computeRatioByType(finalProgress, type); + var pos, bezier, normal, length; + if (finalProgress < 0) { + bezier = curve.beziers[0]; + length = (0 - finalProgress) * bezier.getLength(); + normal = bezier.start.sub(bezier.endCtrlPoint).normalize(); + pos = bezier.start.add(normal.mul(length)); + } else if (finalProgress > 1) { + bezier = curve.beziers[curve.beziers.length - 1]; + length = (finalProgress - 1) * bezier.getLength(); + normal = bezier.end.sub(bezier.startCtrlPoint).normalize(); + pos = bezier.end.add(normal.mul(length)); + } else { + var bezierIndex = binarySearch(progresses, finalProgress); + bezierIndex < 0 && (bezierIndex = ~bezierIndex); + finalProgress -= bezierIndex > 0 ? progresses[bezierIndex - 1] : 0; + finalProgress /= curve.ratios[bezierIndex]; + pos = curve.beziers[bezierIndex].getPointAt(finalProgress); + } + results.push(pos); + progress += speed; + } + } else while (1 - progress > EPSILON) { + finalProgress = progress; + finalProgress = computeRatioByType(finalProgress, type); + results.push(value.lerp(nextValue, finalProgress)); + progress += speed; + } + newType = "constant" === type ? type : DynamicAnimCurve.Linear; + for (var j = 0, l2 = results.length; j < l2; j++) { + var newRatio = ratio + startRatioOffset + speed * j * betweenRatio; + addNewDatas(results[j], newType, newRatio); + } + startRatioOffset = Math.abs(progress - 1) > EPSILON ? (progress - 1) * betweenRatio : 0; + } + ratios[ratios.length - 1] !== newRatios[newRatios.length - 1] && addNewDatas(values[values.length - 1], newType, ratios[ratios.length - 1]); + } + false; + module.exports = { + sampleMotionPaths: sampleMotionPaths, + Curve: Curve, + Bezier: Bezier + }; + }), { + "../core/utils/binary-search": 198, + "./animation-curves": 12, + "./bezier": 15 + } ], + 19: [ (function(require, module, exports) { + "use strict"; + var js = cc.js; + var debug = require("../core/CCDebug"); + function Playable() { + this._isPlaying = false; + this._isPaused = false; + this._stepOnce = false; + } + var prototype = Playable.prototype; + js.get(prototype, "isPlaying", (function() { + return this._isPlaying; + }), true); + js.get(prototype, "isPaused", (function() { + return this._isPaused; + }), true); + var virtual = function virtual() {}; + prototype.onPlay = virtual; + prototype.onPause = virtual; + prototype.onResume = virtual; + prototype.onStop = virtual; + prototype.onError = virtual; + prototype.play = function() { + if (this._isPlaying) if (this._isPaused) { + this._isPaused = false; + this.onResume(); + } else this.onError(debug.getError(3912)); else { + this._isPlaying = true; + this.onPlay(); + } + }; + prototype.stop = function() { + if (this._isPlaying) { + this._isPlaying = false; + this.onStop(); + this._isPaused = false; + } + }; + prototype.pause = function() { + if (this._isPlaying && !this._isPaused) { + this._isPaused = true; + this.onPause(); + } + }; + prototype.resume = function() { + if (this._isPlaying && this._isPaused) { + this._isPaused = false; + this.onResume(); + } + }; + prototype.step = function() { + this.pause(); + this._stepOnce = true; + this._isPlaying || this.play(); + }; + module.exports = Playable; + }), { + "../core/CCDebug": 21 + } ], + 20: [ (function(require, module, exports) { + "use strict"; + var WrapModeMask = { + Loop: 2, + ShouldWrap: 4, + PingPong: 22, + Reverse: 36 + }; + var WrapMode = cc.Enum({ + Default: 0, + Normal: 1, + Reverse: WrapModeMask.Reverse, + Loop: WrapModeMask.Loop, + LoopReverse: WrapModeMask.Loop | WrapModeMask.Reverse, + PingPong: WrapModeMask.PingPong, + PingPongReverse: WrapModeMask.PingPong | WrapModeMask.Reverse + }); + cc.WrapMode = WrapMode; + function WrappedInfo(info) { + if (info) { + this.set(info); + return; + } + this.ratio = 0; + this.time = 0; + this.direction = 1; + this.stopped = true; + this.iterations = 0; + this.frameIndex = void 0; + } + WrappedInfo.prototype.set = function(info) { + this.ratio = info.ratio; + this.time = info.time; + this.direction = info.direction; + this.stopped = info.stopped; + this.iterations = info.iterations; + this.frameIndex = info.frameIndex; + }; + module.exports = { + WrapModeMask: WrapModeMask, + WrapMode: WrapMode, + WrappedInfo: WrappedInfo + }; + }), {} ], + 21: [ (function(require, module, exports) { + "use strict"; + var utils = require("./platform/utils"); + var debugInfos = require("../../DebugInfos") || {}; + var ERROR_MAP_URL = "https://github.com/cocos-creator/engine/blob/master/EngineErrorMap.md"; + var logList; + cc.log = cc.warn = cc.error = cc.assert = console.log.bind ? console.log.bind(console) : console.log; + var resetDebugSetting = function resetDebugSetting(mode) { + cc.log = cc.warn = cc.error = cc.assert = function() {}; + if (mode === DebugMode.NONE) return; + if (mode > DebugMode.ERROR) { + var logToWebPage = function logToWebPage(msg) { + if (!cc.game.canvas) return; + if (!logList) { + var logDiv = document.createElement("Div"); + logDiv.setAttribute("id", "logInfoDiv"); + logDiv.setAttribute("width", "200"); + logDiv.setAttribute("height", cc.game.canvas.height); + var logDivStyle = logDiv.style; + logDivStyle.zIndex = "99999"; + logDivStyle.position = "absolute"; + logDivStyle.top = logDivStyle.left = "0"; + logList = document.createElement("textarea"); + logList.setAttribute("rows", "20"); + logList.setAttribute("cols", "30"); + logList.setAttribute("disabled", "true"); + var logListStyle = logList.style; + logListStyle.backgroundColor = "transparent"; + logListStyle.borderBottom = "1px solid #cccccc"; + logListStyle.borderTopWidth = logListStyle.borderLeftWidth = logListStyle.borderRightWidth = "0px"; + logListStyle.borderTopStyle = logListStyle.borderLeftStyle = logListStyle.borderRightStyle = "none"; + logListStyle.padding = "0px"; + logListStyle.margin = 0; + logDiv.appendChild(logList); + cc.game.canvas.parentNode.appendChild(logDiv); + } + logList.value = logList.value + msg + "\r\n"; + logList.scrollTop = logList.scrollHeight; + }; + cc.error = function() { + logToWebPage("ERROR : " + cc.js.formatStr.apply(null, arguments)); + }; + cc.assert = function(cond, msg) { + if (!cond && msg) { + msg = cc.js.formatStr.apply(null, cc.js.shiftArguments.apply(null, arguments)); + logToWebPage("ASSERT: " + msg); + } + }; + mode !== DebugMode.ERROR_FOR_WEB_PAGE && (cc.warn = function() { + logToWebPage("WARN : " + cc.js.formatStr.apply(null, arguments)); + }); + mode === DebugMode.INFO_FOR_WEB_PAGE && (cc.log = function() { + logToWebPage(cc.js.formatStr.apply(null, arguments)); + }); + } else if (console && console.log.apply) { + console.error || (console.error = console.log); + console.warn || (console.warn = console.log); + false; + console.error.bind ? cc.error = console.error.bind(console) : cc.error = (false, + function() { + return console.error.apply(console, arguments); + }); + cc.assert = function(cond, msg) { + if (!cond) { + msg && (msg = cc.js.formatStr.apply(null, cc.js.shiftArguments.apply(null, arguments))); + false; + false; + throw new Error(msg); + } + }; + } + if (mode !== DebugMode.ERROR) { + false; + console.warn.bind ? cc.warn = console.warn.bind(console) : cc.warn = (false, function() { + return console.warn.apply(console, arguments); + }); + } + false; + if (mode === DebugMode.INFO) { + false, false; + console.log.bind ? cc.log = console.log.bind(console) : cc.log = function() { + return console.log.apply(console, arguments); + }; + } + }; + cc._throw = function(error) { + utils.callInNextTick((function() { + throw error; + })); + }; + function getTypedFormatter(type) { + return function() { + var id = arguments[0]; + var msg = debugInfos[id] || "unknown id"; + if (1 === arguments.length) return msg; + if (2 === arguments.length) return cc.js.formatStr(msg, arguments[1]); + var argsArray = cc.js.shiftArguments.apply(null, arguments); + return cc.js.formatStr.apply(null, [ msg ].concat(argsArray)); + }; + } + var logFormatter = getTypedFormatter("Log"); + cc.logID = function() { + cc.log(logFormatter.apply(null, arguments)); + }; + var warnFormatter = getTypedFormatter("Warning"); + cc.warnID = function() { + cc.warn(warnFormatter.apply(null, arguments)); + }; + var errorFormatter = getTypedFormatter("Error"); + cc.errorID = function() { + cc.error(errorFormatter.apply(null, arguments)); + }; + var assertFormatter = getTypedFormatter("Assert"); + cc.assertID = function(cond) { + if (cond) return; + cc.assert(false, assertFormatter.apply(null, cc.js.shiftArguments.apply(null, arguments))); + }; + var DebugMode = cc.Enum({ + NONE: 0, + INFO: 1, + WARN: 2, + ERROR: 3, + INFO_FOR_WEB_PAGE: 4, + WARN_FOR_WEB_PAGE: 5, + ERROR_FOR_WEB_PAGE: 6 + }); + module.exports = cc.debug = { + DebugMode: DebugMode, + _resetDebugSetting: resetDebugSetting, + getError: getTypedFormatter("ERROR"), + isDisplayStats: function isDisplayStats() { + return !!cc.profiler && cc.profiler.isShowingStats(); + }, + setDisplayStats: function setDisplayStats(displayStats) { + if (cc.profiler && cc.game.renderType !== cc.game.RENDER_TYPE_CANVAS) { + displayStats ? cc.profiler.showStats() : cc.profiler.hideStats(); + cc.game.config.showFPS = !!displayStats; + } + } + }; + }), { + "../../DebugInfos": 1, + "./platform/utils": 145 + } ], + 22: [ (function(require, module, exports) { + "use strict"; + var EventTarget = require("./event/event-target"); + var ComponentScheduler = require("./component-scheduler"); + var NodeActivator = require("./node-activator"); + var Obj = require("./platform/CCObject"); + var game = require("./CCGame"); + var renderer = require("./renderer"); + var eventManager = require("./event-manager"); + var Scheduler = require("./CCScheduler"); + cc.Director = function() { + EventTarget.call(this); + this._paused = false; + this._purgeDirectorInNextLoop = false; + this._winSizeInPoints = null; + this._scene = null; + this._loadingScene = ""; + this._totalFrames = 0; + this._lastUpdate = 0; + this._deltaTime = 0; + this._startTime = 0; + this._maxParticleDeltaTime = 0; + this._scheduler = null; + this._compScheduler = null; + this._nodeActivator = null; + this._actionManager = null; + var self = this; + game.on(game.EVENT_SHOW, (function() { + self._lastUpdate = performance.now(); + })); + game.once(game.EVENT_ENGINE_INITED, this.init, this); + }; + cc.Director.prototype = { + constructor: cc.Director, + init: function init() { + this._totalFrames = 0; + this._lastUpdate = performance.now(); + this._startTime = this._lastUpdate; + this._paused = false; + this._purgeDirectorInNextLoop = false; + this._winSizeInPoints = cc.size(0, 0); + this._scheduler = new Scheduler(); + if (cc.ActionManager) { + this._actionManager = new cc.ActionManager(); + this._scheduler.scheduleUpdate(this._actionManager, Scheduler.PRIORITY_SYSTEM, false); + } else this._actionManager = null; + this.sharedInit(); + return true; + }, + sharedInit: function sharedInit() { + this._compScheduler = new ComponentScheduler(); + this._nodeActivator = new NodeActivator(); + eventManager && eventManager.setEnabled(true); + if (cc.AnimationManager) { + this._animationManager = new cc.AnimationManager(); + this._scheduler.scheduleUpdate(this._animationManager, Scheduler.PRIORITY_SYSTEM, false); + } else this._animationManager = null; + if (cc.CollisionManager) { + this._collisionManager = new cc.CollisionManager(); + this._scheduler.scheduleUpdate(this._collisionManager, Scheduler.PRIORITY_SYSTEM, false); + } else this._collisionManager = null; + if (cc.PhysicsManager) { + this._physicsManager = new cc.PhysicsManager(); + this._scheduler.scheduleUpdate(this._physicsManager, Scheduler.PRIORITY_SYSTEM, false); + } else this._physicsManager = null; + if (cc.Physics3DManager && (false, false)) { + this._physics3DManager = new cc.Physics3DManager(); + this._scheduler.scheduleUpdate(this._physics3DManager, Scheduler.PRIORITY_SYSTEM, false); + } else this._physics3DManager = null; + cc._widgetManager && cc._widgetManager.init(this); + }, + calculateDeltaTime: function calculateDeltaTime(now) { + now || (now = performance.now()); + this._deltaTime = now > this._lastUpdate ? (now - this._lastUpdate) / 1e3 : 0; + (true, this._deltaTime > 1) && (this._deltaTime = 1 / 60); + this._lastUpdate = now; + }, + convertToGL: function convertToGL(uiPoint) { + var container = game.container; + var view = cc.view; + var box = container.getBoundingClientRect(); + var left = box.left + window.pageXOffset - container.clientLeft; + var top = box.top + window.pageYOffset - container.clientTop; + var x = view._devicePixelRatio * (uiPoint.x - left); + var y = view._devicePixelRatio * (top + box.height - uiPoint.y); + return view._isRotated ? cc.v2(view._viewportRect.width - y, x) : cc.v2(x, y); + }, + convertToUI: function convertToUI(glPoint) { + var container = game.container; + var view = cc.view; + var box = container.getBoundingClientRect(); + var left = box.left + window.pageXOffset - container.clientLeft; + var top = box.top + window.pageYOffset - container.clientTop; + var uiPoint = cc.v2(0, 0); + if (view._isRotated) { + uiPoint.x = left + glPoint.y / view._devicePixelRatio; + uiPoint.y = top + box.height - (view._viewportRect.width - glPoint.x) / view._devicePixelRatio; + } else { + uiPoint.x = left + glPoint.x * view._devicePixelRatio; + uiPoint.y = top + box.height - glPoint.y * view._devicePixelRatio; + } + return uiPoint; + }, + end: function end() { + this._purgeDirectorInNextLoop = true; + }, + getWinSize: function getWinSize() { + return cc.size(cc.winSize); + }, + getWinSizeInPixels: function getWinSizeInPixels() { + return cc.size(cc.winSize); + }, + pause: function pause() { + if (this._paused) return; + this._paused = true; + }, + purgeCachedData: function purgeCachedData() { + cc.assetManager.releaseAll(); + }, + purgeDirector: function purgeDirector() { + this._scheduler.unscheduleAll(); + this._compScheduler.unscheduleAll(); + this._nodeActivator.reset(); + eventManager && eventManager.setEnabled(false); + true; + cc.isValid(this._scene) && this._scene.destroy(); + this._scene = null; + cc.renderer.clear(); + cc.assetManager.builtins.clear(); + cc.game.pause(); + cc.assetManager.releaseAll(); + }, + reset: function reset() { + this.purgeDirector(); + eventManager && eventManager.setEnabled(true); + this._actionManager && this._scheduler.scheduleUpdate(this._actionManager, cc.Scheduler.PRIORITY_SYSTEM, false); + this._animationManager && this._scheduler.scheduleUpdate(this._animationManager, cc.Scheduler.PRIORITY_SYSTEM, false); + this._collisionManager && this._scheduler.scheduleUpdate(this._collisionManager, cc.Scheduler.PRIORITY_SYSTEM, false); + this._physicsManager && this._scheduler.scheduleUpdate(this._physicsManager, cc.Scheduler.PRIORITY_SYSTEM, false); + cc.game.resume(); + }, + runSceneImmediate: function runSceneImmediate(scene, onBeforeLoadScene, onLaunched) { + cc.assertID(scene instanceof cc.Scene || scene instanceof cc.SceneAsset, 1216); + scene instanceof cc.SceneAsset && (scene = scene.scene); + (true, true) && console.time("InitScene"); + scene._load(); + (true, true) && console.timeEnd("InitScene"); + (true, true) && console.time("AttachPersist"); + var persistNodeList = Object.keys(game._persistRootNodes).map((function(x) { + return game._persistRootNodes[x]; + })); + for (var i = 0; i < persistNodeList.length; i++) { + var node = persistNodeList[i]; + var existNode = scene.getChildByUuid(node.uuid); + if (existNode) { + var index = existNode.getSiblingIndex(); + existNode._destroyImmediate(); + scene.insertChild(node, index); + } else node.parent = scene; + } + (true, true) && console.timeEnd("AttachPersist"); + var oldScene = this._scene; + true; + (true, true) && console.time("AutoRelease"); + cc.assetManager._releaseManager._autoRelease(oldScene, scene, game._persistRootNodes); + (true, true) && console.timeEnd("AutoRelease"); + (true, true) && console.time("Destroy"); + cc.isValid(oldScene) && oldScene.destroy(); + this._scene = null; + Obj._deferredDestroy(); + (true, true) && console.timeEnd("Destroy"); + onBeforeLoadScene && onBeforeLoadScene(); + this.emit(cc.Director.EVENT_BEFORE_SCENE_LAUNCH, scene); + this._scene = scene; + (true, true) && console.time("Activate"); + scene._activate(); + (true, true) && console.timeEnd("Activate"); + cc.game.resume(); + onLaunched && onLaunched(null, scene); + this.emit(cc.Director.EVENT_AFTER_SCENE_LAUNCH, scene); + }, + runScene: function runScene(scene, onBeforeLoadScene, onLaunched) { + cc.assertID(scene, 1205); + cc.assertID(scene instanceof cc.Scene || scene instanceof cc.SceneAsset, 1216); + scene instanceof cc.SceneAsset && (scene = scene.scene); + scene._load(); + this.once(cc.Director.EVENT_AFTER_DRAW, (function() { + this.runSceneImmediate(scene, onBeforeLoadScene, onLaunched); + }), this); + }, + loadScene: function loadScene(sceneName, onLaunched, _onUnloaded) { + if (this._loadingScene) { + cc.warnID(1208, sceneName, this._loadingScene); + return false; + } + var bundle = cc.assetManager.bundles.find((function(bundle) { + return bundle.getSceneInfo(sceneName); + })); + if (bundle) { + this.emit(cc.Director.EVENT_BEFORE_SCENE_LOADING, sceneName); + this._loadingScene = sceneName; + var self = this; + console.time("LoadScene " + sceneName); + bundle.loadScene(sceneName, (function(err, scene) { + console.timeEnd("LoadScene " + sceneName); + self._loadingScene = ""; + if (err) { + err = "Failed to load scene: " + err; + cc.error(err); + onLaunched && onLaunched(err); + } else self.runSceneImmediate(scene, _onUnloaded, onLaunched); + })); + return true; + } + cc.errorID(1209, sceneName); + return false; + }, + preloadScene: function preloadScene(sceneName, onProgress, onLoaded) { + var bundle = cc.assetManager.bundles.find((function(bundle) { + return bundle.getSceneInfo(sceneName); + })); + if (!bundle) { + cc.errorID(1209, sceneName); + return null; + } + bundle.preloadScene(sceneName, null, onProgress, onLoaded); + }, + resume: function resume() { + if (!this._paused) return; + this._lastUpdate = performance.now(); + this._lastUpdate || cc.logID(1200); + this._paused = false; + this._deltaTime = 0; + }, + setDepthTest: function setDepthTest(value) { + if (!cc.Camera.main) return; + cc.Camera.main.depth = !!value; + }, + setClearColor: function setClearColor(clearColor) { + if (!cc.Camera.main) return; + cc.Camera.main.backgroundColor = clearColor; + }, + getRunningScene: function getRunningScene() { + return this._scene; + }, + getScene: function getScene() { + return this._scene; + }, + getAnimationInterval: function getAnimationInterval() { + return 1e3 / game.getFrameRate(); + }, + setAnimationInterval: function setAnimationInterval(value) { + game.setFrameRate(Math.round(1e3 / value)); + }, + getDeltaTime: function getDeltaTime() { + return this._deltaTime; + }, + getTotalTime: function getTotalTime() { + return performance.now() - this._startTime; + }, + getTotalFrames: function getTotalFrames() { + return this._totalFrames; + }, + isPaused: function isPaused() { + return this._paused; + }, + getScheduler: function getScheduler() { + return this._scheduler; + }, + setScheduler: function setScheduler(scheduler) { + this._scheduler !== scheduler && (this._scheduler = scheduler); + }, + getActionManager: function getActionManager() { + return this._actionManager; + }, + setActionManager: function setActionManager(actionManager) { + if (this._actionManager !== actionManager) { + this._actionManager && this._scheduler.unscheduleUpdate(this._actionManager); + this._actionManager = actionManager; + this._scheduler.scheduleUpdate(this._actionManager, cc.Scheduler.PRIORITY_SYSTEM, false); + } + }, + getAnimationManager: function getAnimationManager() { + return this._animationManager; + }, + getCollisionManager: function getCollisionManager() { + return this._collisionManager; + }, + getPhysicsManager: function getPhysicsManager() { + return this._physicsManager; + }, + getPhysics3DManager: function getPhysics3DManager() { + return this._physics3DManager; + }, + startAnimation: function startAnimation() { + cc.game.resume(); + }, + stopAnimation: function stopAnimation() { + cc.game.pause(); + }, + _resetDeltaTime: function _resetDeltaTime() { + this._lastUpdate = performance.now(); + this._deltaTime = 0; + }, + mainLoop: function(now) { + if (this._purgeDirectorInNextLoop) { + this._purgeDirectorInNextLoop = false; + this.purgeDirector(); + } else { + this.calculateDeltaTime(now); + if (!this._paused) { + this.emit(cc.Director.EVENT_BEFORE_UPDATE); + this._compScheduler.startPhase(); + this._compScheduler.updatePhase(this._deltaTime); + this._scheduler.update(this._deltaTime); + this._compScheduler.lateUpdatePhase(this._deltaTime); + this.emit(cc.Director.EVENT_AFTER_UPDATE); + Obj._deferredDestroy(); + } + this.emit(cc.Director.EVENT_BEFORE_DRAW); + renderer.render(this._scene, this._deltaTime); + this.emit(cc.Director.EVENT_AFTER_DRAW); + eventManager.frameUpdateListeners(); + this._totalFrames++; + } + }, + __fastOn: function __fastOn(type, callback, target) { + this.on(type, callback, target); + }, + __fastOff: function __fastOff(type, callback, target) { + this.off(type, callback, target); + } + }; + cc.js.addon(cc.Director.prototype, EventTarget.prototype); + cc.Director.EVENT_PROJECTION_CHANGED = "director_projection_changed"; + cc.Director.EVENT_BEFORE_SCENE_LOADING = "director_before_scene_loading"; + cc.Director.EVENT_BEFORE_SCENE_LAUNCH = "director_before_scene_launch"; + cc.Director.EVENT_AFTER_SCENE_LAUNCH = "director_after_scene_launch"; + cc.Director.EVENT_BEFORE_UPDATE = "director_before_update"; + cc.Director.EVENT_AFTER_UPDATE = "director_after_update"; + cc.Director.EVENT_BEFORE_VISIT = "director_before_draw"; + cc.Director.EVENT_AFTER_VISIT = "director_before_draw"; + cc.Director.EVENT_BEFORE_DRAW = "director_before_draw"; + cc.Director.EVENT_AFTER_DRAW = "director_after_draw"; + cc.Director.PROJECTION_2D = 0; + cc.Director.PROJECTION_3D = 1; + cc.Director.PROJECTION_CUSTOM = 3; + cc.Director.PROJECTION_DEFAULT = cc.Director.PROJECTION_2D; + cc.Director.EVENT_BEFORE_PHYSICS = "director_before_physics"; + cc.Director.EVENT_AFTER_PHYSICS = "director_after_physics"; + cc.director = new cc.Director(); + module.exports = cc.director; + }), { + "./CCGame": 23, + "./CCScheduler": 27, + "./component-scheduler": 86, + "./event-manager": 112, + "./event/event-target": 114, + "./node-activator": 120, + "./platform/CCObject": 127, + "./renderer": 152 + } ], + 23: [ (function(require, module, exports) { + "use strict"; + var EventTarget = require("./event/event-target"); + require("../audio/CCAudioEngine"); + var debug = require("./CCDebug"); + var renderer = require("./renderer/index.js"); + var dynamicAtlasManager = require("../core/renderer/utils/dynamic-atlas/manager"); + var game = { + EVENT_HIDE: "game_on_hide", + EVENT_SHOW: "game_on_show", + EVENT_RESTART: "game_on_restart", + EVENT_GAME_INITED: "game_inited", + EVENT_ENGINE_INITED: "engine_inited", + EVENT_RENDERER_INITED: "engine_inited", + RENDER_TYPE_CANVAS: 0, + RENDER_TYPE_WEBGL: 1, + RENDER_TYPE_OPENGL: 2, + _persistRootNodes: {}, + _paused: true, + _configLoaded: false, + _isCloning: false, + _prepared: false, + _rendererInitialized: false, + _renderContext: null, + _intervalId: null, + _lastTime: null, + _frameTime: null, + frame: null, + container: null, + canvas: null, + renderType: -1, + config: null, + onStart: null, + setFrameRate: function setFrameRate(frameRate) { + var config = this.config; + config.frameRate = frameRate; + this._intervalId && window.cancelAnimFrame(this._intervalId); + this._intervalId = 0; + this._paused = true; + this._setAnimFrame(); + this._runMainLoop(); + }, + getFrameRate: function getFrameRate() { + return this.config.frameRate; + }, + step: function step() { + cc.director.mainLoop(); + }, + pause: function pause() { + if (this._paused) return; + this._paused = true; + cc.audioEngine && cc.audioEngine._break(); + this._intervalId && window.cancelAnimFrame(this._intervalId); + this._intervalId = 0; + }, + resume: function resume() { + if (!this._paused) return; + this._paused = false; + cc.audioEngine && cc.audioEngine._restore(); + cc.director._resetDeltaTime(); + this._runMainLoop(); + }, + isPaused: function isPaused() { + return this._paused; + }, + restart: function restart() { + cc.director.once(cc.Director.EVENT_AFTER_DRAW, (function() { + for (var id in game._persistRootNodes) game.removePersistRootNode(game._persistRootNodes[id]); + cc.director.getScene().destroy(); + cc.Object._deferredDestroy(); + cc.audioEngine && cc.audioEngine.uncacheAll(); + cc.director.reset(); + game.pause(); + cc.assetManager.builtins.init((function() { + game.onStart(); + game.emit(game.EVENT_RESTART); + })); + })); + }, + end: function end() { + close(); + }, + _initEngine: function _initEngine() { + if (this._rendererInitialized) return; + this._initRenderer(); + true; + this._initEvents(); + this.emit(this.EVENT_ENGINE_INITED); + }, + _loadPreviewScript: function _loadPreviewScript(cb) { + false; + cb(); + }, + _prepareFinished: function _prepareFinished(cb) { + var _this = this; + this._initEngine(); + this._setAnimFrame(); + cc.assetManager.builtins.init((function() { + console.log("Cocos Creator SP v" + cc.ENGINE_VERSION); + _this._prepared = true; + _this._runMainLoop(); + _this.emit(_this.EVENT_GAME_INITED); + cb && cb(); + })); + }, + eventTargetOn: EventTarget.prototype.on, + eventTargetOnce: EventTarget.prototype.once, + on: function on(type, callback, target, once) { + this._prepared && type === this.EVENT_ENGINE_INITED || !this._paused && type === this.EVENT_GAME_INITED ? callback.call(target) : this.eventTargetOn(type, callback, target, once); + }, + once: function once(type, callback, target) { + this._prepared && type === this.EVENT_ENGINE_INITED || !this._paused && type === this.EVENT_GAME_INITED ? callback.call(target) : this.eventTargetOnce(type, callback, target); + }, + prepare: function prepare(cb) { + var _this2 = this; + if (this._prepared) { + cb && cb(); + return; + } + this._loadPreviewScript((function() { + _this2._prepareFinished(cb); + })); + }, + run: function run(config, onStart) { + this._initConfig(config); + this.onStart = onStart; + this.prepare(game.onStart && game.onStart.bind(game)); + }, + addPersistRootNode: function addPersistRootNode(node) { + if (!cc.Node.isNode(node) || !node.uuid) { + cc.warnID(3800); + return; + } + var id = node.uuid; + if (!this._persistRootNodes[id]) { + var scene = cc.director._scene; + if (cc.isValid(scene)) if (node.parent) { + if (!(node.parent instanceof cc.Scene)) { + cc.warnID(3801); + return; + } + if (node.parent !== scene) { + cc.warnID(3802); + return; + } + } else node.parent = scene; + this._persistRootNodes[id] = node; + node._persistNode = true; + cc.assetManager._releaseManager._addPersistNodeRef(node); + } + }, + removePersistRootNode: function removePersistRootNode(node) { + var id = node.uuid || ""; + if (node === this._persistRootNodes[id]) { + delete this._persistRootNodes[id]; + node._persistNode = false; + cc.assetManager._releaseManager._removePersistNodeRef(node); + } + }, + isPersistRootNode: function isPersistRootNode(node) { + return node._persistNode; + }, + _setAnimFrame: function _setAnimFrame() { + this._lastTime = performance.now(); + var frameRate = game.config.frameRate; + this._frameTime = 1e3 / frameRate; + cc.director._maxParticleDeltaTime = this._frameTime / 1e3 * 2; + false, false; + var rAF = window.requestAnimationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame; + if (60 !== frameRate && 30 !== frameRate) { + window.requestAnimFrame = rAF ? this._stTimeWithRAF : this._stTime; + window.cancelAnimFrame = this._ctTime; + } else { + window.requestAnimFrame = rAF || this._stTime; + window.cancelAnimFrame = window.cancelAnimationFrame || window.cancelRequestAnimationFrame || window.msCancelRequestAnimationFrame || window.mozCancelRequestAnimationFrame || window.oCancelRequestAnimationFrame || window.webkitCancelRequestAnimationFrame || window.msCancelAnimationFrame || window.mozCancelAnimationFrame || window.webkitCancelAnimationFrame || window.oCancelAnimationFrame || this._ctTime; + } + }, + _stTimeWithRAF: function _stTimeWithRAF(callback) { + var currTime = performance.now(); + var timeToCall = Math.max(0, game._frameTime - (currTime - game._lastTime)); + var id = window.setTimeout((function() { + window.requestAnimationFrame(callback); + }), timeToCall); + game._lastTime = currTime + timeToCall; + return id; + }, + _stTime: function _stTime(callback) { + var currTime = performance.now(); + var timeToCall = Math.max(0, game._frameTime - (currTime - game._lastTime)); + var id = window.setTimeout((function() { + callback(); + }), timeToCall); + game._lastTime = currTime + timeToCall; + return id; + }, + _ctTime: function _ctTime(id) { + window.clearTimeout(id); + }, + _runMainLoop: function _runMainLoop() { + false; + if (!this._prepared) return; + var self = this, _callback, config = self.config, director = cc.director, skip = true, frameRate = config.frameRate; + debug.setDisplayStats(config.showFPS); + _callback = function callback(now) { + if (!self._paused) { + self._intervalId = window.requestAnimFrame(_callback); + if ((true, true) && 30 === frameRate && (skip = !skip)) return; + director.mainLoop(now); + } + }; + self._intervalId = window.requestAnimFrame(_callback); + self._paused = false; + }, + _initConfig: function _initConfig(config) { + "number" !== typeof config.debugMode && (config.debugMode = 0); + config.exposeClassName = !!config.exposeClassName; + "number" !== typeof config.frameRate && (config.frameRate = 60); + var renderMode = config.renderMode; + ("number" !== typeof renderMode || renderMode > 2 || renderMode < 0) && (config.renderMode = 0); + "boolean" !== typeof config.registerSystemEvent && (config.registerSystemEvent = true); + config.showFPS = 1 !== renderMode && !!config.showFPS; + this.collisionMatrix = config.collisionMatrix || []; + this.groupList = config.groupList || []; + debug._resetDebugSetting(config.debugMode); + this.config = config; + this._configLoaded = true; + }, + _determineRenderType: function _determineRenderType() { + var config = this.config, userRenderMode = parseInt(config.renderMode) || 0; + this.renderType = this.RENDER_TYPE_CANVAS; + var supportRender = false; + if (0 === userRenderMode) { + if (cc.sys.capabilities["opengl"]) { + this.renderType = this.RENDER_TYPE_WEBGL; + supportRender = true; + } else if (cc.sys.capabilities["canvas"]) { + this.renderType = this.RENDER_TYPE_CANVAS; + supportRender = true; + } + } else if (1 === userRenderMode && cc.sys.capabilities["canvas"]) { + this.renderType = this.RENDER_TYPE_CANVAS; + supportRender = true; + } else if (2 === userRenderMode && cc.sys.capabilities["opengl"]) { + this.renderType = this.RENDER_TYPE_WEBGL; + supportRender = true; + } + if (!supportRender) throw new Error(debug.getError(3820, userRenderMode)); + }, + _initRenderer: function _initRenderer() { + if (this._rendererInitialized) return; + var el = this.config.id, width, height, localCanvas, localContainer; + false, false; + var addClass = function addClass(element, name) { + var hasClass = (" " + element.className + " ").indexOf(" " + name + " ") > -1; + if (!hasClass) { + element.className && (element.className += " "); + element.className += name; + } + }; + var element = el instanceof HTMLElement ? el : document.querySelector(el) || document.querySelector("#" + el); + if ("CANVAS" === element.tagName) { + width = element.width; + height = element.height; + this.canvas = localCanvas = element; + this.container = localContainer = document.createElement("DIV"); + localCanvas.parentNode && localCanvas.parentNode.insertBefore(localContainer, localCanvas); + } else { + "DIV" !== element.tagName && cc.warnID(3819); + width = element.clientWidth; + height = element.clientHeight; + this.canvas = localCanvas = document.createElement("CANVAS"); + this.container = localContainer = document.createElement("DIV"); + element.appendChild(localContainer); + } + localContainer.setAttribute("id", "Cocos2dGameContainer"); + localContainer.appendChild(localCanvas); + this.frame = localContainer.parentNode === document.body ? document.documentElement : localContainer.parentNode; + addClass(localCanvas, "gameCanvas"); + localCanvas.setAttribute("width", width || 480); + localCanvas.setAttribute("height", height || 320); + localCanvas.setAttribute("tabindex", 99); + this._determineRenderType(); + if (this.renderType === this.RENDER_TYPE_WEBGL) { + var opts = { + stencil: true, + antialias: cc.macro.ENABLE_WEBGL_ANTIALIAS, + alpha: cc.macro.ENABLE_TRANSPARENT_CANVAS + }; + renderer.initWebGL(localCanvas, opts); + this._renderContext = renderer.device._gl; + !cc.macro.CLEANUP_IMAGE_CACHE && dynamicAtlasManager && (dynamicAtlasManager.enabled = true); + } + if (!this._renderContext) { + this.renderType = this.RENDER_TYPE_CANVAS; + renderer.initCanvas(localCanvas); + this._renderContext = renderer.device._ctx; + } + this.canvas.oncontextmenu = function() { + if (!cc._isContextMenuEnable) return false; + }; + this._rendererInitialized = true; + }, + _initEvents: function _initEvents() { + var win = window, hiddenPropName; + this.config.registerSystemEvent && cc.internal.inputManager.registerSystemEvent(this.canvas); + "undefined" !== typeof document.hidden ? hiddenPropName = "hidden" : "undefined" !== typeof document.mozHidden ? hiddenPropName = "mozHidden" : "undefined" !== typeof document.msHidden ? hiddenPropName = "msHidden" : "undefined" !== typeof document.webkitHidden && (hiddenPropName = "webkitHidden"); + var hidden = false; + function onHidden() { + if (!hidden) { + hidden = true; + game.emit(game.EVENT_HIDE); + } + } + function onShown(arg0, arg1, arg2, arg3, arg4) { + if (hidden) { + hidden = false; + game.emit(game.EVENT_SHOW, arg0, arg1, arg2, arg3, arg4); + } + } + if (hiddenPropName) { + var changeList = [ "visibilitychange", "mozvisibilitychange", "msvisibilitychange", "webkitvisibilitychange", "qbrowserVisibilityChange" ]; + for (var i = 0; i < changeList.length; i++) document.addEventListener(changeList[i], (function(event) { + var visible = document[hiddenPropName]; + visible = visible || event["hidden"]; + visible ? onHidden() : onShown(); + })); + } else { + win.addEventListener("blur", onHidden); + win.addEventListener("focus", onShown); + } + navigator.userAgent.indexOf("MicroMessenger") > -1 && (win.onfocus = onShown); + if ("onpageshow" in window && "onpagehide" in window) { + win.addEventListener("pagehide", onHidden); + win.addEventListener("pageshow", onShown); + document.addEventListener("pagehide", onHidden); + document.addEventListener("pageshow", onShown); + } + this.on(game.EVENT_HIDE, (function() { + game.pause(); + })); + this.on(game.EVENT_SHOW, (function() { + game.resume(); + })); + } + }; + EventTarget.call(game); + cc.js.addon(game, EventTarget.prototype); + cc.game = module.exports = game; + }), { + "../audio/CCAudioEngine": void 0, + "../core/renderer/utils/dynamic-atlas/manager": 154, + "./CCDebug": 21, + "./event/event-target": 114, + "./renderer/index.js": 152 + } ], + 24: [ (function(require, module, exports) { + "use strict"; + var _valueTypes = require("./value-types"); + var BaseNode = require("./utils/base-node"); + var PrefabHelper = require("./utils/prefab-helper"); + var nodeMemPool = require("./utils/trans-pool").NodeMemPool; + var AffineTrans = require("./utils/affine-transform"); + var eventManager = require("./event-manager"); + var macro = require("./platform/CCMacro"); + var js = require("./platform/js"); + var Event = require("./event/event"); + var EventTarget = require("./event/event-target"); + var RenderFlow = require("./renderer/render-flow"); + var Flags = cc.Object.Flags; + var Destroying = Flags.Destroying; + var ERR_INVALID_NUMBER = false; + var ONE_DEGREE = Math.PI / 180; + var ActionManagerExist = !!cc.ActionManager; + var emptyFunc = function emptyFunc() {}; + var _gwpVec3 = new _valueTypes.Vec3(); + var _gwpQuat = new _valueTypes.Quat(); + var _tpVec3a = new _valueTypes.Vec3(); + var _tpVec3b = new _valueTypes.Vec3(); + var _tpQuata = new _valueTypes.Quat(); + var _tpQuatb = new _valueTypes.Quat(); + var _swpVec3 = new _valueTypes.Vec3(); + var _gwsVec3 = new _valueTypes.Vec3(); + var _swsVec3 = new _valueTypes.Vec3(); + var _gwrtVec3a = new _valueTypes.Vec3(); + var _gwrtVec3b = new _valueTypes.Vec3(); + var _gwrtQuata = new _valueTypes.Quat(); + var _gwrtQuatb = new _valueTypes.Quat(); + var _laVec3 = new _valueTypes.Vec3(); + var _laQuat = new _valueTypes.Quat(); + var _urfVec3 = new _valueTypes.Vec3(); + var _urfQuat = new _valueTypes.Quat(); + var _htVec3a = new _valueTypes.Vec3(); + var _htVec3b = new _valueTypes.Vec3(); + var _gwrQuat = new _valueTypes.Quat(); + var _swrQuat = new _valueTypes.Quat(); + var _quata = new _valueTypes.Quat(); + var _mat4_temp = cc.mat4(); + var _vec3_temp = new _valueTypes.Vec3(); + var _cachedArray = new Array(16); + _cachedArray.length = 0; + var POSITION_ON = 1; + var SCALE_ON = 2; + var ROTATION_ON = 4; + var SIZE_ON = 8; + var ANCHOR_ON = 16; + var COLOR_ON = 32; + var BuiltinGroupIndex = cc.Enum({ + DEBUG: 31 + }); + var LocalDirtyFlag = cc.Enum({ + POSITION: 1, + SCALE: 2, + ROTATION: 4, + SKEW: 8, + TRS: 7, + RS: 6, + TRSS: 15, + PHYSICS_POSITION: 16, + PHYSICS_SCALE: 32, + PHYSICS_ROTATION: 64, + PHYSICS_TRS: 112, + PHYSICS_RS: 96, + ALL_POSITION: 17, + ALL_SCALE: 34, + ALL_ROTATION: 68, + ALL_TRS: 119, + ALL: 65535 + }); + var EventType = cc.Enum({ + TOUCH_START: "touchstart", + TOUCH_MOVE: "touchmove", + TOUCH_END: "touchend", + TOUCH_CANCEL: "touchcancel", + MOUSE_DOWN: "mousedown", + MOUSE_MOVE: "mousemove", + MOUSE_ENTER: "mouseenter", + MOUSE_LEAVE: "mouseleave", + MOUSE_UP: "mouseup", + MOUSE_WHEEL: "mousewheel", + POSITION_CHANGED: "position-changed", + ROTATION_CHANGED: "rotation-changed", + SCALE_CHANGED: "scale-changed", + SIZE_CHANGED: "size-changed", + ANCHOR_CHANGED: "anchor-changed", + COLOR_CHANGED: "color-changed", + CHILD_ADDED: "child-added", + CHILD_REMOVED: "child-removed", + CHILD_REORDER: "child-reorder", + GROUP_CHANGED: "group-changed", + SIBLING_ORDER_CHANGED: "sibling-order-changed" + }); + var _touchEvents = [ EventType.TOUCH_START, EventType.TOUCH_MOVE, EventType.TOUCH_END, EventType.TOUCH_CANCEL ]; + var _mouseEvents = [ EventType.MOUSE_DOWN, EventType.MOUSE_ENTER, EventType.MOUSE_MOVE, EventType.MOUSE_LEAVE, EventType.MOUSE_UP, EventType.MOUSE_WHEEL ]; + var _skewNeedWarn = true; + var _skewWarn = function _skewWarn(value, node) { + if (0 !== value) { + var nodePath = ""; + var NodeUtils; + false; + _skewNeedWarn && cc.warn("`cc.Node.skewX/Y` is deprecated since v2.2.1, please use 3D node instead.", nodePath); + true, _skewNeedWarn = false; + } + }; + var _currentHovered = null; + var _touchStartHandler = function _touchStartHandler(touch, event) { + var pos = touch.getLocation(); + var node = this.owner; + if (node._hitTest(pos, this)) { + event.type = EventType.TOUCH_START; + event.touch = touch; + event.bubbles = true; + node.dispatchEvent(event); + return true; + } + return false; + }; + var _touchMoveHandler = function _touchMoveHandler(touch, event) { + var node = this.owner; + event.type = EventType.TOUCH_MOVE; + event.touch = touch; + event.bubbles = true; + node.dispatchEvent(event); + }; + var _touchEndHandler = function _touchEndHandler(touch, event) { + var pos = touch.getLocation(); + var node = this.owner; + node._hitTest(pos, this) ? event.type = EventType.TOUCH_END : event.type = EventType.TOUCH_CANCEL; + event.touch = touch; + event.bubbles = true; + node.dispatchEvent(event); + }; + var _touchCancelHandler = function _touchCancelHandler(touch, event) { + var pos = touch.getLocation(); + var node = this.owner; + event.type = EventType.TOUCH_CANCEL; + event.touch = touch; + event.bubbles = true; + node.dispatchEvent(event); + }; + var _mouseDownHandler = function _mouseDownHandler(event) { + var pos = event.getLocation(); + var node = this.owner; + if (node._hitTest(pos, this)) { + event.type = EventType.MOUSE_DOWN; + event.bubbles = true; + node.dispatchEvent(event); + } + }; + var _mouseMoveHandler = function _mouseMoveHandler(event) { + var pos = event.getLocation(); + var node = this.owner; + var hit = node._hitTest(pos, this); + if (hit) { + if (!this._previousIn) { + if (_currentHovered && _currentHovered._mouseListener) { + event.type = EventType.MOUSE_LEAVE; + _currentHovered.dispatchEvent(event); + _currentHovered._mouseListener._previousIn = false; + } + _currentHovered = this.owner; + event.type = EventType.MOUSE_ENTER; + node.dispatchEvent(event); + this._previousIn = true; + } + event.type = EventType.MOUSE_MOVE; + event.bubbles = true; + node.dispatchEvent(event); + } else { + if (!this._previousIn) return; + event.type = EventType.MOUSE_LEAVE; + node.dispatchEvent(event); + this._previousIn = false; + _currentHovered = null; + } + event.stopPropagation(); + }; + var _mouseUpHandler = function _mouseUpHandler(event) { + var pos = event.getLocation(); + var node = this.owner; + if (node._hitTest(pos, this)) { + event.type = EventType.MOUSE_UP; + event.bubbles = true; + node.dispatchEvent(event); + event.stopPropagation(); + } + }; + var _mouseWheelHandler = function _mouseWheelHandler(event) { + var pos = event.getLocation(); + var node = this.owner; + if (node._hitTest(pos, this)) { + event.type = EventType.MOUSE_WHEEL; + event.bubbles = true; + node.dispatchEvent(event); + event.stopPropagation(); + } + }; + function _searchComponentsInParent(node, comp) { + if (comp) { + var index = 0; + var list = null; + for (var curr = node; curr && cc.Node.isNode(curr); curr = curr._parent, ++index) if (curr.getComponent(comp)) { + var next = { + index: index, + node: curr + }; + list ? list.push(next) : list = [ next ]; + } + return list; + } + return null; + } + function _checkListeners(node, events) { + if (!(node._objFlags & Destroying)) { + if (node._bubblingListeners) for (var i = 0, l = events.length; i < l; ++i) if (node._bubblingListeners.hasEventListener(events[i])) return true; + if (node._capturingListeners) for (var _i = 0, _l = events.length; _i < _l; ++_i) if (node._capturingListeners.hasEventListener(events[_i])) return true; + return false; + } + return true; + } + function _doDispatchEvent(owner, event) { + var target, i; + event.target = owner; + _cachedArray.length = 0; + owner._getCapturingTargets(event.type, _cachedArray); + event.eventPhase = 1; + for (i = _cachedArray.length - 1; i >= 0; --i) { + target = _cachedArray[i]; + if (target._capturingListeners) { + event.currentTarget = target; + target._capturingListeners.emit(event.type, event, _cachedArray); + if (event._propagationStopped) { + _cachedArray.length = 0; + return; + } + } + } + _cachedArray.length = 0; + event.eventPhase = 2; + event.currentTarget = owner; + owner._capturingListeners && owner._capturingListeners.emit(event.type, event); + !event._propagationImmediateStopped && owner._bubblingListeners && owner._bubblingListeners.emit(event.type, event); + if (!event._propagationStopped && event.bubbles) { + owner._getBubblingTargets(event.type, _cachedArray); + event.eventPhase = 3; + for (i = 0; i < _cachedArray.length; ++i) { + target = _cachedArray[i]; + if (target._bubblingListeners) { + event.currentTarget = target; + target._bubblingListeners.emit(event.type, event); + if (event._propagationStopped) { + _cachedArray.length = 0; + return; + } + } + } + } + _cachedArray.length = 0; + } + function _getActualGroupIndex(node) { + var groupIndex = node.groupIndex; + 0 === groupIndex && node.parent && (groupIndex = _getActualGroupIndex(node.parent)); + return groupIndex; + } + function _updateCullingMask(node) { + var index = _getActualGroupIndex(node); + node._cullingMask = 1 << index; + false; + for (var i = 0; i < node._children.length; i++) _updateCullingMask(node._children[i]); + } + function updateLocalMatrix3D() { + if (this._localMatDirty & LocalDirtyFlag.TRSS) { + var t = this._matrix; + var tm = t.m; + _valueTypes.Trs.toMat4(t, this._trs); + if (this._skewX || this._skewY) { + var a = tm[0], b = tm[1], c = tm[4], d = tm[5]; + var skx = Math.tan(this._skewX * ONE_DEGREE); + var sky = Math.tan(this._skewY * ONE_DEGREE); + Infinity === skx && (skx = 99999999); + Infinity === sky && (sky = 99999999); + tm[0] = a + c * sky; + tm[1] = b + d * sky; + tm[4] = c + a * skx; + tm[5] = d + b * skx; + } + this._localMatDirty &= ~LocalDirtyFlag.TRSS; + this._worldMatDirty = true; + } + } + function updateLocalMatrix2D() { + var dirtyFlag = this._localMatDirty; + if (!(dirtyFlag & LocalDirtyFlag.TRSS)) return; + var t = this._matrix; + var tm = t.m; + var trs = this._trs; + if (dirtyFlag & (LocalDirtyFlag.RS | LocalDirtyFlag.SKEW)) { + var rotation = -this._eulerAngles.z; + var hasSkew = this._skewX || this._skewY; + var sx = trs[7], sy = trs[8]; + if (rotation || hasSkew) { + var a = 1, b = 0, c = 0, d = 1; + if (rotation) { + var rotationRadians = rotation * ONE_DEGREE; + c = Math.sin(rotationRadians); + d = Math.cos(rotationRadians); + a = d; + b = -c; + } + tm[0] = a *= sx; + tm[1] = b *= sx; + tm[4] = c *= sy; + tm[5] = d *= sy; + if (hasSkew) { + var _a = tm[0], _b = tm[1], _c = tm[4], _d = tm[5]; + var skx = Math.tan(this._skewX * ONE_DEGREE); + var sky = Math.tan(this._skewY * ONE_DEGREE); + Infinity === skx && (skx = 99999999); + Infinity === sky && (sky = 99999999); + tm[0] = _a + _c * sky; + tm[1] = _b + _d * sky; + tm[4] = _c + _a * skx; + tm[5] = _d + _b * skx; + } + } else { + tm[0] = sx; + tm[1] = 0; + tm[4] = 0; + tm[5] = sy; + } + } + tm[12] = trs[0]; + tm[13] = trs[1]; + this._localMatDirty &= ~LocalDirtyFlag.TRSS; + this._worldMatDirty = true; + } + function calculWorldMatrix3D() { + this._localMatDirty & LocalDirtyFlag.TRSS && this._updateLocalMatrix(); + if (this._parent) { + var parentMat = this._parent._worldMatrix; + _valueTypes.Mat4.mul(this._worldMatrix, parentMat, this._matrix); + } else _valueTypes.Mat4.copy(this._worldMatrix, this._matrix); + this._worldMatDirty = false; + } + function calculWorldMatrix2D() { + this._localMatDirty & LocalDirtyFlag.TRSS && this._updateLocalMatrix(); + var parent = this._parent; + parent ? this._mulMat(this._worldMatrix, parent._worldMatrix, this._matrix) : _valueTypes.Mat4.copy(this._worldMatrix, this._matrix); + this._worldMatDirty = false; + } + function mulMat2D(out, a, b) { + var am = a.m, bm = b.m, outm = out.m; + var aa = am[0], ab = am[1], ac = am[4], ad = am[5], atx = am[12], aty = am[13]; + var ba = bm[0], bb = bm[1], bc = bm[4], bd = bm[5], btx = bm[12], bty = bm[13]; + if (0 !== ab || 0 !== ac) { + outm[0] = ba * aa + bb * ac; + outm[1] = ba * ab + bb * ad; + outm[4] = bc * aa + bd * ac; + outm[5] = bc * ab + bd * ad; + outm[12] = aa * btx + ac * bty + atx; + outm[13] = ab * btx + ad * bty + aty; + } else { + outm[0] = ba * aa; + outm[1] = bb * ad; + outm[4] = bc * aa; + outm[5] = bd * ad; + outm[12] = aa * btx + atx; + outm[13] = ad * bty + aty; + } + } + var mulMat3D = _valueTypes.Mat4.mul; + var NodeDefines = { + name: "cc.Node", + extends: BaseNode, + properties: { + _opacity: 255, + _color: cc.Color.WHITE, + _contentSize: cc.Size, + _anchorPoint: cc.v2(.5, .5), + _position: void 0, + _scale: void 0, + _trs: null, + _eulerAngles: cc.Vec3, + _skewX: 0, + _skewY: 0, + _zIndex: { + default: void 0, + type: cc.Integer + }, + _localZOrder: { + default: 0, + serializable: false + }, + _is3DNode: false, + _groupIndex: { + default: 0, + formerlySerializedAs: "groupIndex" + }, + groupIndex: { + get: function get() { + return this._groupIndex; + }, + set: function set(value) { + this._groupIndex = value; + _updateCullingMask(this); + this.emit(EventType.GROUP_CHANGED, this); + } + }, + group: { + get: function get() { + return cc.game.groupList[this.groupIndex] || ""; + }, + set: function set(value) { + this.groupIndex = cc.game.groupList.indexOf(value); + } + }, + x: { + get: function get() { + return this._trs[0]; + }, + set: function set(value) { + var trs = this._trs; + if (value !== trs[0]) { + true; + var oldValue; + false; + trs[0] = value; + this.setLocalDirty(LocalDirtyFlag.ALL_POSITION); + if (this._eventMask & POSITION_ON) { + false; + this.emit(EventType.POSITION_CHANGED); + } + } + } + }, + y: { + get: function get() { + return this._trs[1]; + }, + set: function set(value) { + var trs = this._trs; + if (value !== trs[1]) { + true; + var oldValue; + false; + trs[1] = value; + this.setLocalDirty(LocalDirtyFlag.ALL_POSITION); + if (this._eventMask & POSITION_ON) { + false; + this.emit(EventType.POSITION_CHANGED); + } + } + } + }, + z: { + get: function get() { + return this._trs[2]; + }, + set: function set(value) { + var trs = this._trs; + if (value !== trs[2]) { + true; + var oldValue; + false; + trs[2] = value; + this.setLocalDirty(LocalDirtyFlag.ALL_POSITION); + true, this._renderFlag |= RenderFlow.FLAG_WORLD_TRANSFORM; + if (this._eventMask & POSITION_ON) { + false; + this.emit(EventType.POSITION_CHANGED); + } + } + } + }, + rotation: { + get: function get() { + true; + cc.warn("`cc.Node.rotation` is deprecated since v2.1.0, please use `-angle` instead. (`this.node.rotation` -> `-this.node.angle`)"); + return -this.angle; + }, + set: function set(value) { + true; + cc.warn("`cc.Node.rotation` is deprecated since v2.1.0, please set `-angle` instead. (`this.node.rotation = x` -> `this.node.angle = -x`)"); + this.angle = -value; + } + }, + angle: { + get: function get() { + return this._eulerAngles.z; + }, + set: function set(value) { + _valueTypes.Vec3.set(this._eulerAngles, 0, 0, value); + _valueTypes.Trs.fromAngleZ(this._trs, value); + this.setLocalDirty(LocalDirtyFlag.ALL_ROTATION); + this._eventMask & ROTATION_ON && this.emit(EventType.ROTATION_CHANGED); + } + }, + rotationX: { + get: function get() { + true; + cc.warn("`cc.Node.rotationX` is deprecated since v2.1.0, please use `eulerAngles.x` instead. (`this.node.rotationX` -> `this.node.eulerAngles.x`)"); + return this._eulerAngles.x; + }, + set: function set(value) { + true; + cc.warn("`cc.Node.rotationX` is deprecated since v2.1.0, please set `eulerAngles` instead. (`this.node.rotationX = x` -> `this.node.is3DNode = true; this.node.eulerAngles = cc.v3(x, 0, 0)`"); + if (this._eulerAngles.x !== value) { + this._eulerAngles.x = value; + this._eulerAngles.x === this._eulerAngles.y ? _valueTypes.Trs.fromAngleZ(this._trs, -value) : _valueTypes.Trs.fromEulerNumber(this._trs, value, this._eulerAngles.y, 0); + this.setLocalDirty(LocalDirtyFlag.ALL_ROTATION); + this._eventMask & ROTATION_ON && this.emit(EventType.ROTATION_CHANGED); + } + } + }, + rotationY: { + get: function get() { + true; + cc.warn("`cc.Node.rotationY` is deprecated since v2.1.0, please use `eulerAngles.y` instead. (`this.node.rotationY` -> `this.node.eulerAngles.y`)"); + return this._eulerAngles.y; + }, + set: function set(value) { + true; + cc.warn("`cc.Node.rotationY` is deprecated since v2.1.0, please set `eulerAngles` instead. (`this.node.rotationY = y` -> `this.node.is3DNode = true; this.node.eulerAngles = cc.v3(0, y, 0)`"); + if (this._eulerAngles.y !== value) { + this._eulerAngles.y = value; + this._eulerAngles.x === this._eulerAngles.y ? _valueTypes.Trs.fromAngleZ(this._trs, -value) : _valueTypes.Trs.fromEulerNumber(this._trs, this._eulerAngles.x, value, 0); + this.setLocalDirty(LocalDirtyFlag.ALL_ROTATION); + this._eventMask & ROTATION_ON && this.emit(EventType.ROTATION_CHANGED); + } + } + }, + eulerAngles: { + get: function get() { + false; + return _valueTypes.Trs.toEuler(this._eulerAngles, this._trs); + }, + set: function set(v) { + false; + _valueTypes.Trs.fromEuler(this._trs, v); + this.setLocalDirty(LocalDirtyFlag.ALL_ROTATION); + true, this._renderFlag |= RenderFlow.FLAG_TRANSFORM; + this._eventMask & ROTATION_ON && this.emit(EventType.ROTATION_CHANGED); + } + }, + quat: { + get: function get() { + var trs = this._trs; + return new _valueTypes.Quat(trs[3], trs[4], trs[5], trs[6]); + }, + set: function set(v) { + this.setRotation(v); + } + }, + scale: { + get: function get() { + return this._trs[7]; + }, + set: function set(v) { + this.setScale(v); + } + }, + scaleX: { + get: function get() { + return this._trs[7]; + }, + set: function set(value) { + if (this._trs[7] !== value) { + this._trs[7] = value; + this.setLocalDirty(LocalDirtyFlag.ALL_SCALE); + this._eventMask & SCALE_ON && this.emit(EventType.SCALE_CHANGED); + } + } + }, + scaleY: { + get: function get() { + return this._trs[8]; + }, + set: function set(value) { + if (this._trs[8] !== value) { + this._trs[8] = value; + this.setLocalDirty(LocalDirtyFlag.ALL_SCALE); + this._eventMask & SCALE_ON && this.emit(EventType.SCALE_CHANGED); + } + } + }, + scaleZ: { + get: function get() { + return this._trs[9]; + }, + set: function set(value) { + if (this._trs[9] !== value) { + this._trs[9] = value; + this.setLocalDirty(LocalDirtyFlag.ALL_SCALE); + true, this._renderFlag |= RenderFlow.FLAG_TRANSFORM; + this._eventMask & SCALE_ON && this.emit(EventType.SCALE_CHANGED); + } + } + }, + skewX: { + get: function get() { + return this._skewX; + }, + set: function set(value) { + _skewWarn(value, this); + this._skewX = value; + this.setLocalDirty(LocalDirtyFlag.SKEW); + false; + } + }, + skewY: { + get: function get() { + return this._skewY; + }, + set: function set(value) { + _skewWarn(value, this); + this._skewY = value; + this.setLocalDirty(LocalDirtyFlag.SKEW); + false; + } + }, + opacity: { + get: function get() { + return this._opacity; + }, + set: function set(value) { + value = cc.misc.clampf(value, 0, 255); + if (this._opacity !== value) { + this._opacity = value; + false; + this._renderFlag |= RenderFlow.FLAG_OPACITY_COLOR; + } + }, + range: [ 0, 255 ] + }, + color: { + get: function get() { + return this._color.clone(); + }, + set: function set(value) { + if (!this._color.equals(value)) { + this._color.set(value); + false; + this._renderFlag |= RenderFlow.FLAG_COLOR; + this._eventMask & COLOR_ON && this.emit(EventType.COLOR_CHANGED, value); + } + } + }, + anchorX: { + get: function get() { + return this._anchorPoint.x; + }, + set: function set(value) { + var anchorPoint = this._anchorPoint; + if (anchorPoint.x !== value) { + anchorPoint.x = value; + this._eventMask & ANCHOR_ON && this.emit(EventType.ANCHOR_CHANGED); + } + } + }, + anchorY: { + get: function get() { + return this._anchorPoint.y; + }, + set: function set(value) { + var anchorPoint = this._anchorPoint; + if (anchorPoint.y !== value) { + anchorPoint.y = value; + this._eventMask & ANCHOR_ON && this.emit(EventType.ANCHOR_CHANGED); + } + } + }, + width: { + get: function get() { + return this._contentSize.width; + }, + set: function set(value) { + if (value !== this._contentSize.width) { + var clone; + false; + this._contentSize.width = value; + if (this._eventMask & SIZE_ON) { + false; + this.emit(EventType.SIZE_CHANGED); + } + } + } + }, + height: { + get: function get() { + return this._contentSize.height; + }, + set: function set(value) { + if (value !== this._contentSize.height) { + var clone; + false; + this._contentSize.height = value; + if (this._eventMask & SIZE_ON) { + false; + this.emit(EventType.SIZE_CHANGED); + } + } + } + }, + zIndex: { + get: function get() { + return this._localZOrder >> 16; + }, + set: function set(value) { + if (value > macro.MAX_ZINDEX) { + cc.warnID(1636); + value = macro.MAX_ZINDEX; + } else if (value < macro.MIN_ZINDEX) { + cc.warnID(1637); + value = macro.MIN_ZINDEX; + } + if (this.zIndex !== value) { + this._localZOrder = 65535 & this._localZOrder | value << 16; + this.emit(EventType.SIBLING_ORDER_CHANGED); + this._onSiblingIndexChanged(); + } + } + }, + is3DNode: { + get: function get() { + return this._is3DNode; + }, + set: function set(v) { + this._is3DNode = v; + this._update3DFunction(); + } + }, + up: { + get: function get() { + var _up = _valueTypes.Vec3.transformQuat(_urfVec3, _valueTypes.Vec3.UP, this.getWorldRotation(_urfQuat)); + return _up.clone(); + } + }, + right: { + get: function get() { + var _right = _valueTypes.Vec3.transformQuat(_urfVec3, _valueTypes.Vec3.RIGHT, this.getWorldRotation(_urfQuat)); + return _right.clone(); + } + }, + forward: { + get: function get() { + var _forward = _valueTypes.Vec3.transformQuat(_urfVec3, _valueTypes.Vec3.FORWARD, this.getWorldRotation(_urfQuat)); + return _forward.clone(); + } + } + }, + ctor: function ctor() { + this._reorderChildDirty = false; + this._widget = null; + this._renderComponent = null; + this._capturingListeners = null; + this._bubblingListeners = null; + this._touchListener = null; + this._mouseListener = null; + this._initDataFromPool(); + this._eventMask = 0; + this._cullingMask = 1; + this._childArrivalOrder = 1; + false; + this._renderFlag = RenderFlow.FLAG_TRANSFORM | RenderFlow.FLAG_OPACITY_COLOR; + }, + statics: { + EventType: EventType, + _LocalDirtyFlag: LocalDirtyFlag, + isNode: function isNode(obj) { + return obj instanceof Node && (obj.constructor === Node || !(obj instanceof cc.Scene)); + }, + BuiltinGroupIndex: BuiltinGroupIndex + }, + _onSiblingIndexChanged: function _onSiblingIndexChanged() { + this._parent && this._parent._delaySort(); + }, + _onPreDestroy: function _onPreDestroy() { + var destroyByParent = this._onPreDestroyBase(); + ActionManagerExist && cc.director.getActionManager().removeAllActionsFromTarget(this); + _currentHovered === this && (_currentHovered = null); + this._bubblingListeners && this._bubblingListeners.clear(); + this._capturingListeners && this._capturingListeners.clear(); + if (this._touchListener || this._mouseListener) { + eventManager.removeListeners(this); + if (this._touchListener) { + this._touchListener.owner = null; + this._touchListener.mask = null; + this._touchListener = null; + } + if (this._mouseListener) { + this._mouseListener.owner = null; + this._mouseListener.mask = null; + this._mouseListener = null; + } + } + false; + this._backDataIntoPool(); + this._reorderChildDirty && cc.director.__fastOff(cc.Director.EVENT_AFTER_UPDATE, this.sortAllChildren, this); + destroyByParent || false; + }, + _onPostActivated: function _onPostActivated(active) { + var actionManager = ActionManagerExist ? cc.director.getActionManager() : null; + if (active) { + this._renderFlag |= RenderFlow.FLAG_WORLD_TRANSFORM; + actionManager && actionManager.resumeTarget(this); + eventManager.resumeTarget(this); + this._checkListenerMask(); + } else { + actionManager && actionManager.pauseTarget(this); + eventManager.pauseTarget(this); + } + }, + _onHierarchyChanged: function _onHierarchyChanged(oldParent) { + this._updateOrderOfArrival(); + _updateCullingMask(this); + this._parent && this._parent._delaySort(); + this._renderFlag |= RenderFlow.FLAG_WORLD_TRANSFORM; + this._onHierarchyChangedBase(oldParent); + cc._widgetManager && (cc._widgetManager._nodesOrderDirty = true); + oldParent && this._activeInHierarchy && this._checkListenerMask(); + false; + }, + _update3DFunction: function _update3DFunction() { + if (this._is3DNode) { + this._updateLocalMatrix = updateLocalMatrix3D; + this._calculWorldMatrix = calculWorldMatrix3D; + this._mulMat = mulMat3D; + } else { + this._updateLocalMatrix = updateLocalMatrix2D; + this._calculWorldMatrix = calculWorldMatrix2D; + this._mulMat = mulMat2D; + } + this._renderComponent && this._renderComponent._on3DNodeChanged && this._renderComponent._on3DNodeChanged(); + this._renderFlag |= RenderFlow.FLAG_TRANSFORM; + this._localMatDirty = LocalDirtyFlag.ALL; + false; + }, + _initDataFromPool: function _initDataFromPool() { + if (!this._spaceInfo) { + false, false; + this._spaceInfo = nodeMemPool.pop(); + } + var spaceInfo = this._spaceInfo; + this._matrix = cc.mat4(spaceInfo.localMat); + _valueTypes.Mat4.identity(this._matrix); + this._worldMatrix = cc.mat4(spaceInfo.worldMat); + _valueTypes.Mat4.identity(this._worldMatrix); + this._localMatDirty = LocalDirtyFlag.ALL; + this._worldMatDirty = true; + var trs = this._trs = spaceInfo.trs; + trs[0] = 0; + trs[1] = 0; + trs[2] = 0; + trs[3] = 0; + trs[4] = 0; + trs[5] = 0; + trs[6] = 1; + trs[7] = 1; + trs[8] = 1; + trs[9] = 1; + }, + _backDataIntoPool: function _backDataIntoPool() { + if (!(false, false)) { + nodeMemPool.push(this._spaceInfo); + this._matrix = null; + this._worldMatrix = null; + this._trs = null; + this._spaceInfo = null; + } + }, + _toEuler: function _toEuler() { + if (this.is3DNode) _valueTypes.Trs.toEuler(this._eulerAngles, this._trs); else { + var z = Math.asin(this._trs[5]) / ONE_DEGREE * 2; + _valueTypes.Vec3.set(this._eulerAngles, 0, 0, z); + } + }, + _fromEuler: function _fromEuler() { + this.is3DNode ? _valueTypes.Trs.fromEuler(this._trs, this._eulerAngles) : _valueTypes.Trs.fromAngleZ(this._trs, this._eulerAngles.z); + }, + _initProperties: function _initProperties() { + this._is3DNode && this._update3DFunction(); + var trs = this._trs; + if (trs) { + var desTrs = trs; + trs = this._trs = this._spaceInfo.trs; + 11 === desTrs.length ? trs.set(desTrs.subarray(1)) : trs.set(desTrs); + } else trs = this._trs = this._spaceInfo.trs; + var NodeUtils; + false; + this._fromEuler(); + false; + }, + _onBatchCreated: function _onBatchCreated(dontSyncChildPrefab) { + this._initProperties(); + this._cullingMask = 1 << _getActualGroupIndex(this); + false; + if (!this._activeInHierarchy) { + ActionManagerExist && cc.director.getActionManager().pauseTarget(this); + eventManager.pauseTarget(this); + } + var children = this._children; + for (var i = 0, len = children.length; i < len; i++) { + var child = children[i]; + if (!dontSyncChildPrefab) { + var prefabInfo = child._prefab; + prefabInfo && prefabInfo.sync && prefabInfo.root === child && PrefabHelper.syncWithPrefab(child); + child._updateOrderOfArrival(); + } + child._onBatchCreated(dontSyncChildPrefab); + } + children.length > 0 && (this._renderFlag |= RenderFlow.FLAG_CHILDREN); + false; + }, + _checkListenerMask: function _checkListenerMask() { + if (this._touchListener) { + var mask = this._touchListener.mask = _searchComponentsInParent(this, cc.Mask); + this._mouseListener && (this._mouseListener.mask = mask); + } else this._mouseListener && (this._mouseListener.mask = _searchComponentsInParent(this, cc.Mask)); + }, + _checknSetupSysEvent: function _checknSetupSysEvent(type) { + var newAdded = false; + var forDispatch = false; + if (-1 !== _touchEvents.indexOf(type)) { + if (!this._touchListener) { + this._touchListener = cc.EventListener.create({ + event: cc.EventListener.TOUCH_ONE_BY_ONE, + swallowTouches: true, + owner: this, + mask: _searchComponentsInParent(this, cc.Mask), + onTouchBegan: _touchStartHandler, + onTouchMoved: _touchMoveHandler, + onTouchEnded: _touchEndHandler, + onTouchCancelled: _touchCancelHandler + }); + eventManager.addListener(this._touchListener, this); + newAdded = true; + } + forDispatch = true; + } else if (-1 !== _mouseEvents.indexOf(type)) { + if (!this._mouseListener) { + this._mouseListener = cc.EventListener.create({ + event: cc.EventListener.MOUSE, + _previousIn: false, + owner: this, + mask: _searchComponentsInParent(this, cc.Mask), + onMouseDown: _mouseDownHandler, + onMouseMove: _mouseMoveHandler, + onMouseUp: _mouseUpHandler, + onMouseScroll: _mouseWheelHandler + }); + eventManager.addListener(this._mouseListener, this); + newAdded = true; + } + forDispatch = true; + } + newAdded && !this._activeInHierarchy && cc.director.getScheduler().schedule((function() { + this._activeInHierarchy || eventManager.pauseTarget(this); + }), this, 0, 0, 0, false); + return forDispatch; + }, + on: function on(type, callback, target, useCapture) { + var forDispatch = this._checknSetupSysEvent(type); + if (forDispatch) return this._onDispatch(type, callback, target, useCapture); + switch (type) { + case EventType.POSITION_CHANGED: + this._eventMask |= POSITION_ON; + break; + + case EventType.SCALE_CHANGED: + this._eventMask |= SCALE_ON; + break; + + case EventType.ROTATION_CHANGED: + this._eventMask |= ROTATION_ON; + break; + + case EventType.SIZE_CHANGED: + this._eventMask |= SIZE_ON; + break; + + case EventType.ANCHOR_CHANGED: + this._eventMask |= ANCHOR_ON; + break; + + case EventType.COLOR_CHANGED: + this._eventMask |= COLOR_ON; + } + this._bubblingListeners || (this._bubblingListeners = new EventTarget()); + return this._bubblingListeners.on(type, callback, target); + }, + once: function once(type, callback, target, useCapture) { + var _this = this; + var forDispatch = this._checknSetupSysEvent(type); + var listeners = null; + listeners = forDispatch && useCapture ? this._capturingListeners = this._capturingListeners || new EventTarget() : this._bubblingListeners = this._bubblingListeners || new EventTarget(); + listeners.once(type, callback, target); + listeners.once(type, (function() { + _this.off(type, callback, target); + }), void 0); + }, + _onDispatch: function _onDispatch(type, callback, target, useCapture) { + if ("boolean" === typeof target) { + useCapture = target; + target = void 0; + } else useCapture = !!useCapture; + if (!callback) { + cc.errorID(6800); + return; + } + var listeners = null; + listeners = useCapture ? this._capturingListeners = this._capturingListeners || new EventTarget() : this._bubblingListeners = this._bubblingListeners || new EventTarget(); + if (!listeners.hasEventListener(type, callback, target)) { + listeners.on(type, callback, target); + target && target.__eventTargets && target.__eventTargets.push(this); + } + return callback; + }, + off: function off(type, callback, target, useCapture) { + var touchEvent = -1 !== _touchEvents.indexOf(type); + var mouseEvent = !touchEvent && -1 !== _mouseEvents.indexOf(type); + if (touchEvent || mouseEvent) { + this._offDispatch(type, callback, target, useCapture); + if (touchEvent) { + if (this._touchListener && !_checkListeners(this, _touchEvents)) { + eventManager.removeListener(this._touchListener); + this._touchListener = null; + } + } else if (mouseEvent && this._mouseListener && !_checkListeners(this, _mouseEvents)) { + eventManager.removeListener(this._mouseListener); + this._mouseListener = null; + } + } else if (this._bubblingListeners) { + this._bubblingListeners.off(type, callback, target); + var hasListeners = this._bubblingListeners.hasEventListener(type); + if (!hasListeners) switch (type) { + case EventType.POSITION_CHANGED: + this._eventMask &= ~POSITION_ON; + break; + + case EventType.SCALE_CHANGED: + this._eventMask &= ~SCALE_ON; + break; + + case EventType.ROTATION_CHANGED: + this._eventMask &= ~ROTATION_ON; + break; + + case EventType.SIZE_CHANGED: + this._eventMask &= ~SIZE_ON; + break; + + case EventType.ANCHOR_CHANGED: + this._eventMask &= ~ANCHOR_ON; + break; + + case EventType.COLOR_CHANGED: + this._eventMask &= ~COLOR_ON; + } + } + }, + _offDispatch: function _offDispatch(type, callback, target, useCapture) { + if ("boolean" === typeof target) { + useCapture = target; + target = void 0; + } else useCapture = !!useCapture; + if (callback) { + var listeners = useCapture ? this._capturingListeners : this._bubblingListeners; + if (listeners) { + listeners.off(type, callback, target); + target && target.__eventTargets && js.array.fastRemove(target.__eventTargets, this); + } + } else { + this._capturingListeners && this._capturingListeners.removeAll(type); + this._bubblingListeners && this._bubblingListeners.removeAll(type); + } + }, + targetOff: function targetOff(target) { + var listeners = this._bubblingListeners; + if (listeners) { + listeners.targetOff(target); + this._eventMask & POSITION_ON && !listeners.hasEventListener(EventType.POSITION_CHANGED) && (this._eventMask &= ~POSITION_ON); + this._eventMask & SCALE_ON && !listeners.hasEventListener(EventType.SCALE_CHANGED) && (this._eventMask &= ~SCALE_ON); + this._eventMask & ROTATION_ON && !listeners.hasEventListener(EventType.ROTATION_CHANGED) && (this._eventMask &= ~ROTATION_ON); + this._eventMask & SIZE_ON && !listeners.hasEventListener(EventType.SIZE_CHANGED) && (this._eventMask &= ~SIZE_ON); + this._eventMask & ANCHOR_ON && !listeners.hasEventListener(EventType.ANCHOR_CHANGED) && (this._eventMask &= ~ANCHOR_ON); + this._eventMask & COLOR_ON && !listeners.hasEventListener(EventType.COLOR_CHANGED) && (this._eventMask &= ~COLOR_ON); + } + this._capturingListeners && this._capturingListeners.targetOff(target); + target && target.__eventTargets && js.array.fastRemove(target.__eventTargets, this); + if (this._touchListener && !_checkListeners(this, _touchEvents)) { + eventManager.removeListener(this._touchListener); + this._touchListener = null; + } + if (this._mouseListener && !_checkListeners(this, _mouseEvents)) { + eventManager.removeListener(this._mouseListener); + this._mouseListener = null; + } + }, + hasEventListener: function hasEventListener(type) { + var has = false; + this._bubblingListeners && (has = this._bubblingListeners.hasEventListener(type)); + !has && this._capturingListeners && (has = this._capturingListeners.hasEventListener(type)); + return has; + }, + emit: function emit(type, arg1, arg2, arg3, arg4, arg5) { + this._bubblingListeners && this._bubblingListeners.emit(type, arg1, arg2, arg3, arg4, arg5); + }, + dispatchEvent: function dispatchEvent(event) { + _doDispatchEvent(this, event); + _cachedArray.length = 0; + }, + pauseSystemEvents: function pauseSystemEvents(recursive) { + eventManager.pauseTarget(this, recursive); + }, + resumeSystemEvents: function resumeSystemEvents(recursive) { + eventManager.resumeTarget(this, recursive); + }, + _hitTest: function _hitTest(point, listener) { + var w = this._contentSize.width, h = this._contentSize.height, cameraPt = _htVec3a, testPt = _htVec3b; + var camera = cc.Camera.findCamera(this); + camera ? camera.getScreenToWorldPoint(point, cameraPt) : cameraPt.set(point); + this._updateWorldMatrix(); + if (!_valueTypes.Mat4.invert(_mat4_temp, this._worldMatrix)) return false; + _valueTypes.Vec2.transformMat4(testPt, cameraPt, _mat4_temp); + testPt.x += this._anchorPoint.x * w; + testPt.y += this._anchorPoint.y * h; + var hit = false; + if (testPt.x >= 0 && testPt.y >= 0 && testPt.x <= w && testPt.y <= h) { + hit = true; + if (listener && listener.mask) { + var mask = listener.mask; + var parent = this; + var length = mask ? mask.length : 0; + for (var i = 0, j = 0; parent && j < length; ++i, parent = parent.parent) { + var temp = mask[j]; + if (i === temp.index) { + if (parent !== temp.node) { + mask.length = j; + break; + } + var comp = parent.getComponent(cc.Mask); + if (comp && comp._enabled && !comp._hitTest(cameraPt)) { + hit = false; + break; + } + j++; + } else if (i > temp.index) { + mask.length = j; + break; + } + } + } + } + return hit; + }, + _getCapturingTargets: function _getCapturingTargets(type, array) { + var parent = this.parent; + while (parent) { + parent._capturingListeners && parent._capturingListeners.hasEventListener(type) && array.push(parent); + parent = parent.parent; + } + }, + _getBubblingTargets: function _getBubblingTargets(type, array) { + var parent = this.parent; + while (parent) { + parent._bubblingListeners && parent._bubblingListeners.hasEventListener(type) && array.push(parent); + parent = parent.parent; + } + }, + runAction: ActionManagerExist ? function(action) { + if (!this.active) return; + cc.assertID(action, 1618); + var am = cc.director.getActionManager(); + if (!am._suppressDeprecation) { + am._suppressDeprecation = true; + cc.warnID(1639); + } + am.addAction(action, this, false); + return action; + } : emptyFunc, + pauseAllActions: ActionManagerExist ? function() { + cc.director.getActionManager().pauseTarget(this); + } : emptyFunc, + resumeAllActions: ActionManagerExist ? function() { + cc.director.getActionManager().resumeTarget(this); + } : emptyFunc, + stopAllActions: ActionManagerExist ? function() { + cc.director.getActionManager().removeAllActionsFromTarget(this); + } : emptyFunc, + stopAction: ActionManagerExist ? function(action) { + cc.director.getActionManager().removeAction(action); + } : emptyFunc, + stopActionByTag: ActionManagerExist ? function(tag) { + if (tag === cc.Action.TAG_INVALID) { + cc.logID(1612); + return; + } + cc.director.getActionManager().removeActionByTag(tag, this); + } : emptyFunc, + getActionByTag: ActionManagerExist ? function(tag) { + if (tag === cc.Action.TAG_INVALID) { + cc.logID(1613); + return null; + } + return cc.director.getActionManager().getActionByTag(tag, this); + } : function() { + return null; + }, + getNumberOfRunningActions: ActionManagerExist ? function() { + return cc.director.getActionManager().getNumberOfRunningActionsInTarget(this); + } : function() { + return 0; + }, + getPosition: function getPosition(out) { + out = out || new _valueTypes.Vec3(); + return _valueTypes.Trs.toPosition(out, this._trs); + }, + setPosition: function setPosition(newPosOrX, y, z) { + var x; + if (void 0 === y) { + x = newPosOrX.x; + y = newPosOrX.y; + z = newPosOrX.z; + } else x = newPosOrX; + var trs = this._trs; + void 0 === z && (z = trs[2]); + if (trs[0] === x && trs[1] === y && trs[2] === z) return; + var oldPosition; + false; + trs[0] = x; + trs[1] = y; + trs[2] = z; + this.setLocalDirty(LocalDirtyFlag.ALL_POSITION); + true, this._renderFlag |= RenderFlow.FLAG_WORLD_TRANSFORM; + if (this._eventMask & POSITION_ON) { + false; + this.emit(EventType.POSITION_CHANGED); + } + }, + getScale: function getScale(out) { + if (void 0 !== out) return _valueTypes.Trs.toScale(out, this._trs); + cc.errorID(1400, "cc.Node.getScale", "cc.Node.scale or cc.Node.getScale(cc.Vec3)"); + return this._trs[7]; + }, + setScale: function setScale(newScaleOrX, y, z) { + var x; + if (newScaleOrX && "number" !== typeof newScaleOrX) { + x = newScaleOrX.x; + y = newScaleOrX.y; + z = newScaleOrX.z; + } else if (void 0 !== newScaleOrX && void 0 === y) { + x = newScaleOrX; + y = newScaleOrX; + z = newScaleOrX; + } else x = newScaleOrX; + var trs = this._trs; + void 0 === z && (z = trs[9]); + if (trs[7] !== x || trs[8] !== y || trs[9] !== z) { + trs[7] = x; + trs[8] = y; + trs[9] = z; + this.setLocalDirty(LocalDirtyFlag.ALL_SCALE); + true, this._renderFlag |= RenderFlow.FLAG_TRANSFORM; + this._eventMask & SCALE_ON && this.emit(EventType.SCALE_CHANGED); + } + }, + getRotation: function getRotation(out) { + if (out instanceof _valueTypes.Quat) return _valueTypes.Trs.toRotation(out, this._trs); + true; + cc.warn("`cc.Node.getRotation()` is deprecated since v2.1.0, please use `-cc.Node.angle` instead. (`this.node.getRotation()` -> `-this.node.angle`)"); + return -this.angle; + }, + setRotation: function setRotation(rotation, y, z, w) { + if ("number" === typeof rotation && void 0 === y) { + true; + cc.warn("`cc.Node.setRotation(degree)` is deprecated since v2.1.0, please set `-cc.Node.angle` instead. (`this.node.setRotation(x)` -> `this.node.angle = -x`)"); + this.angle = -rotation; + } else { + var x = rotation; + if (void 0 === y) { + x = rotation.x; + y = rotation.y; + z = rotation.z; + w = rotation.w; + } + var trs = this._trs; + if (trs[3] !== x || trs[4] !== y || trs[5] !== z || trs[6] !== w) { + trs[3] = x; + trs[4] = y; + trs[5] = z; + trs[6] = w; + this.setLocalDirty(LocalDirtyFlag.ALL_ROTATION); + this._eventMask & ROTATION_ON && this.emit(EventType.ROTATION_CHANGED); + false; + } + } + }, + getContentSize: function getContentSize() { + return cc.size(this._contentSize.width, this._contentSize.height); + }, + setContentSize: function setContentSize(size, height) { + var locContentSize = this._contentSize; + var clone; + if (void 0 === height) { + if (size.width === locContentSize.width && size.height === locContentSize.height) return; + false; + locContentSize.width = size.width; + locContentSize.height = size.height; + } else { + if (size === locContentSize.width && height === locContentSize.height) return; + false; + locContentSize.width = size; + locContentSize.height = height; + } + if (this._eventMask & SIZE_ON) { + false; + this.emit(EventType.SIZE_CHANGED); + } + }, + getAnchorPoint: function getAnchorPoint() { + return cc.v2(this._anchorPoint); + }, + setAnchorPoint: function setAnchorPoint(point, y) { + var locAnchorPoint = this._anchorPoint; + if (void 0 === y) { + if (point.x === locAnchorPoint.x && point.y === locAnchorPoint.y) return; + locAnchorPoint.x = point.x; + locAnchorPoint.y = point.y; + } else { + if (point === locAnchorPoint.x && y === locAnchorPoint.y) return; + locAnchorPoint.x = point; + locAnchorPoint.y = y; + } + this.setLocalDirty(LocalDirtyFlag.ALL_POSITION); + this._eventMask & ANCHOR_ON && this.emit(EventType.ANCHOR_CHANGED); + }, + _invTransformPoint: function _invTransformPoint(out, pos) { + this._parent ? this._parent._invTransformPoint(out, pos) : _valueTypes.Vec3.copy(out, pos); + var ltrs = this._trs; + _valueTypes.Trs.toPosition(_tpVec3a, ltrs); + _valueTypes.Vec3.sub(out, out, _tpVec3a); + _valueTypes.Trs.toRotation(_tpQuata, ltrs); + _valueTypes.Quat.conjugate(_tpQuatb, _tpQuata); + _valueTypes.Vec3.transformQuat(out, out, _tpQuatb); + _valueTypes.Trs.toScale(_tpVec3a, ltrs); + _valueTypes.Vec3.inverseSafe(_tpVec3b, _tpVec3a); + _valueTypes.Vec3.mul(out, out, _tpVec3b); + return out; + }, + getWorldPosition: function getWorldPosition(out) { + _valueTypes.Trs.toPosition(out, this._trs); + var curr = this._parent; + var ltrs; + while (curr) { + ltrs = curr._trs; + _valueTypes.Trs.toScale(_gwpVec3, ltrs); + _valueTypes.Vec3.mul(out, out, _gwpVec3); + _valueTypes.Trs.toRotation(_gwpQuat, ltrs); + _valueTypes.Vec3.transformQuat(out, out, _gwpQuat); + _valueTypes.Trs.toPosition(_gwpVec3, ltrs); + _valueTypes.Vec3.add(out, out, _gwpVec3); + curr = curr._parent; + } + return out; + }, + setWorldPosition: function setWorldPosition(pos) { + var ltrs = this._trs; + var oldPosition; + false; + this._parent ? this._parent._invTransformPoint(_swpVec3, pos) : _valueTypes.Vec3.copy(_swpVec3, pos); + _valueTypes.Trs.fromPosition(ltrs, _swpVec3); + this.setLocalDirty(LocalDirtyFlag.ALL_POSITION); + if (this._eventMask & POSITION_ON) { + false; + this.emit(EventType.POSITION_CHANGED); + } + }, + getWorldRotation: function getWorldRotation(out) { + _valueTypes.Trs.toRotation(_gwrQuat, this._trs); + _valueTypes.Quat.copy(out, _gwrQuat); + var curr = this._parent; + while (curr) { + _valueTypes.Trs.toRotation(_gwrQuat, curr._trs); + _valueTypes.Quat.mul(out, _gwrQuat, out); + curr = curr._parent; + } + return out; + }, + setWorldRotation: function setWorldRotation(val) { + if (this._parent) { + this._parent.getWorldRotation(_swrQuat); + _valueTypes.Quat.conjugate(_swrQuat, _swrQuat); + _valueTypes.Quat.mul(_swrQuat, _swrQuat, val); + } else _valueTypes.Quat.copy(_swrQuat, val); + _valueTypes.Trs.fromRotation(this._trs, _swrQuat); + false; + this.setLocalDirty(LocalDirtyFlag.ALL_ROTATION); + }, + getWorldScale: function getWorldScale(out) { + _valueTypes.Trs.toScale(_gwsVec3, this._trs); + _valueTypes.Vec3.copy(out, _gwsVec3); + var curr = this._parent; + while (curr) { + _valueTypes.Trs.toScale(_gwsVec3, curr._trs); + _valueTypes.Vec3.mul(out, out, _gwsVec3); + curr = curr._parent; + } + return out; + }, + setWorldScale: function setWorldScale(scale) { + if (this._parent) { + this._parent.getWorldScale(_swsVec3); + _valueTypes.Vec3.div(_swsVec3, scale, _swsVec3); + } else _valueTypes.Vec3.copy(_swsVec3, scale); + _valueTypes.Trs.fromScale(this._trs, _swsVec3); + this.setLocalDirty(LocalDirtyFlag.ALL_SCALE); + }, + getWorldRT: function getWorldRT(out) { + var opos = _gwrtVec3a; + var orot = _gwrtQuata; + var ltrs = this._trs; + _valueTypes.Trs.toPosition(opos, ltrs); + _valueTypes.Trs.toRotation(orot, ltrs); + var curr = this._parent; + while (curr) { + ltrs = curr._trs; + _valueTypes.Trs.toScale(_gwrtVec3b, ltrs); + _valueTypes.Vec3.mul(opos, opos, _gwrtVec3b); + _valueTypes.Trs.toRotation(_gwrtQuatb, ltrs); + _valueTypes.Vec3.transformQuat(opos, opos, _gwrtQuatb); + _valueTypes.Trs.toPosition(_gwrtVec3b, ltrs); + _valueTypes.Vec3.add(opos, opos, _gwrtVec3b); + _valueTypes.Quat.mul(orot, _gwrtQuatb, orot); + curr = curr._parent; + } + _valueTypes.Mat4.fromRT(out, orot, opos); + return out; + }, + lookAt: function lookAt(pos, up) { + this.getWorldPosition(_laVec3); + _valueTypes.Vec3.sub(_laVec3, _laVec3, pos); + _valueTypes.Vec3.normalize(_laVec3, _laVec3); + _valueTypes.Quat.fromViewUp(_laQuat, _laVec3, up); + this.setWorldRotation(_laQuat); + }, + _updateLocalMatrix: updateLocalMatrix2D, + _calculWorldMatrix: function _calculWorldMatrix() { + this._localMatDirty & LocalDirtyFlag.TRSS && this._updateLocalMatrix(); + var parent = this._parent; + parent ? this._mulMat(this._worldMatrix, parent._worldMatrix, this._matrix) : _valueTypes.Mat4.copy(this._worldMatrix, this._matrix); + this._worldMatDirty = false; + }, + _mulMat: mulMat2D, + _updateWorldMatrix: function _updateWorldMatrix() { + this._parent && this._parent._updateWorldMatrix(); + if (this._worldMatDirty) { + this._calculWorldMatrix(); + var children = this._children; + for (var i = 0, l = children.length; i < l; i++) children[i]._worldMatDirty = true; + } + }, + setLocalDirty: function setLocalDirty(flag) { + this._localMatDirty |= flag; + this._worldMatDirty = true; + flag === LocalDirtyFlag.ALL_POSITION || flag === LocalDirtyFlag.POSITION ? this._renderFlag |= RenderFlow.FLAG_WORLD_TRANSFORM : this._renderFlag |= RenderFlow.FLAG_TRANSFORM; + }, + setWorldDirty: function setWorldDirty() { + this._worldMatDirty = true; + }, + getLocalMatrix: function getLocalMatrix(out) { + this._updateLocalMatrix(); + return _valueTypes.Mat4.copy(out, this._matrix); + }, + getWorldMatrix: function getWorldMatrix(out) { + this._updateWorldMatrix(); + return _valueTypes.Mat4.copy(out, this._worldMatrix); + }, + convertToNodeSpaceAR: function convertToNodeSpaceAR(worldPoint, out) { + this._updateWorldMatrix(); + _valueTypes.Mat4.invert(_mat4_temp, this._worldMatrix); + if (worldPoint instanceof cc.Vec2) { + out = out || new cc.Vec2(); + return _valueTypes.Vec2.transformMat4(out, worldPoint, _mat4_temp); + } + out = out || new cc.Vec3(); + return _valueTypes.Vec3.transformMat4(out, worldPoint, _mat4_temp); + }, + convertToWorldSpaceAR: function convertToWorldSpaceAR(nodePoint, out) { + this._updateWorldMatrix(); + if (nodePoint instanceof cc.Vec2) { + out = out || new cc.Vec2(); + return _valueTypes.Vec2.transformMat4(out, nodePoint, this._worldMatrix); + } + out = out || new cc.Vec3(); + return _valueTypes.Vec3.transformMat4(out, nodePoint, this._worldMatrix); + }, + convertToNodeSpace: function convertToNodeSpace(worldPoint) { + this._updateWorldMatrix(); + _valueTypes.Mat4.invert(_mat4_temp, this._worldMatrix); + var out = new cc.Vec2(); + _valueTypes.Vec2.transformMat4(out, worldPoint, _mat4_temp); + out.x += this._anchorPoint.x * this._contentSize.width; + out.y += this._anchorPoint.y * this._contentSize.height; + return out; + }, + convertToWorldSpace: function convertToWorldSpace(nodePoint) { + this._updateWorldMatrix(); + var out = new cc.Vec2(nodePoint.x - this._anchorPoint.x * this._contentSize.width, nodePoint.y - this._anchorPoint.y * this._contentSize.height); + return _valueTypes.Vec2.transformMat4(out, out, this._worldMatrix); + }, + getNodeToParentTransform: function getNodeToParentTransform(out) { + out || (out = AffineTrans.identity()); + this._updateLocalMatrix(); + var contentSize = this._contentSize; + _vec3_temp.x = -this._anchorPoint.x * contentSize.width; + _vec3_temp.y = -this._anchorPoint.y * contentSize.height; + _valueTypes.Mat4.copy(_mat4_temp, this._matrix); + _valueTypes.Mat4.transform(_mat4_temp, _mat4_temp, _vec3_temp); + return AffineTrans.fromMat4(out, _mat4_temp); + }, + getNodeToParentTransformAR: function getNodeToParentTransformAR(out) { + out || (out = AffineTrans.identity()); + this._updateLocalMatrix(); + return AffineTrans.fromMat4(out, this._matrix); + }, + getNodeToWorldTransform: function getNodeToWorldTransform(out) { + out || (out = AffineTrans.identity()); + this._updateWorldMatrix(); + var contentSize = this._contentSize; + _vec3_temp.x = -this._anchorPoint.x * contentSize.width; + _vec3_temp.y = -this._anchorPoint.y * contentSize.height; + _valueTypes.Mat4.copy(_mat4_temp, this._worldMatrix); + _valueTypes.Mat4.transform(_mat4_temp, _mat4_temp, _vec3_temp); + return AffineTrans.fromMat4(out, _mat4_temp); + }, + getNodeToWorldTransformAR: function getNodeToWorldTransformAR(out) { + out || (out = AffineTrans.identity()); + this._updateWorldMatrix(); + return AffineTrans.fromMat4(out, this._worldMatrix); + }, + getParentToNodeTransform: function getParentToNodeTransform(out) { + out || (out = AffineTrans.identity()); + this._updateLocalMatrix(); + _valueTypes.Mat4.invert(_mat4_temp, this._matrix); + return AffineTrans.fromMat4(out, _mat4_temp); + }, + getWorldToNodeTransform: function getWorldToNodeTransform(out) { + out || (out = AffineTrans.identity()); + this._updateWorldMatrix(); + _valueTypes.Mat4.invert(_mat4_temp, this._worldMatrix); + return AffineTrans.fromMat4(out, _mat4_temp); + }, + convertTouchToNodeSpace: function convertTouchToNodeSpace(touch) { + return this.convertToNodeSpace(touch.getLocation()); + }, + convertTouchToNodeSpaceAR: function convertTouchToNodeSpaceAR(touch) { + return this.convertToNodeSpaceAR(touch.getLocation()); + }, + getBoundingBox: function getBoundingBox() { + this._updateLocalMatrix(); + var width = this._contentSize.width; + var height = this._contentSize.height; + var rect = cc.rect(-this._anchorPoint.x * width, -this._anchorPoint.y * height, width, height); + return rect.transformMat4(rect, this._matrix); + }, + getBoundingBoxToWorld: function getBoundingBoxToWorld() { + if (this._parent) { + this._parent._updateWorldMatrix(); + return this._getBoundingBoxTo(); + } + return this.getBoundingBox(); + }, + _getBoundingBoxTo: function _getBoundingBoxTo() { + var width = this._contentSize.width; + var height = this._contentSize.height; + var rect = cc.rect(-this._anchorPoint.x * width, -this._anchorPoint.y * height, width, height); + this._calculWorldMatrix(); + rect.transformMat4(rect, this._worldMatrix); + if (!this._children) return rect; + var locChildren = this._children; + for (var i = 0; i < locChildren.length; i++) { + var child = locChildren[i]; + if (child && child.active) { + var childRect = child._getBoundingBoxTo(); + childRect && rect.union(rect, childRect); + } + } + return rect; + }, + _updateOrderOfArrival: function _updateOrderOfArrival() { + var arrivalOrder = this._parent ? ++this._parent._childArrivalOrder : 0; + this._localZOrder = 4294901760 & this._localZOrder | arrivalOrder; + this.emit(EventType.SIBLING_ORDER_CHANGED); + }, + addChild: function addChild(child, zIndex, name) { + false; + cc.assertID(child, 1606); + cc.assertID(null === child._parent, 1605); + child.parent = this; + void 0 !== zIndex && (child.zIndex = zIndex); + void 0 !== name && (child.name = name); + }, + cleanup: function cleanup() { + ActionManagerExist && cc.director.getActionManager().removeAllActionsFromTarget(this); + eventManager.removeListeners(this); + var i, len = this._children.length, node; + for (i = 0; i < len; ++i) { + node = this._children[i]; + node && node.cleanup(); + } + }, + sortAllChildren: function sortAllChildren() { + if (this._reorderChildDirty) { + this._reorderChildDirty = false; + var _children = this._children, child; + this._childArrivalOrder = 1; + for (var i = 0, len = _children.length; i < len; i++) { + child = _children[i]; + child._updateOrderOfArrival(); + } + eventManager._setDirtyForNode(this); + if (_children.length > 1) { + var _child, child2; + for (var _i2 = 1, count = _children.length; _i2 < count; _i2++) { + _child = _children[_i2]; + var j = _i2; + for (;j > 0 && (child2 = _children[j - 1])._localZOrder > _child._localZOrder; j--) _children[j] = child2; + _children[j] = _child; + } + this.emit(EventType.CHILD_REORDER, this); + } + cc.director.__fastOff(cc.Director.EVENT_AFTER_UPDATE, this.sortAllChildren, this); + } + }, + _delaySort: function _delaySort() { + if (!this._reorderChildDirty) { + this._reorderChildDirty = true; + cc.director.__fastOn(cc.Director.EVENT_AFTER_UPDATE, this.sortAllChildren, this); + } + }, + _restoreProperties: false, + onRestore: false + }; + false; + var Node = cc.Class(NodeDefines); + var _p = Node.prototype; + js.getset(_p, "position", _p.getPosition, _p.setPosition, false, true); + var vec3_tmp; + false; + cc.Node = module.exports = Node; + }), { + "./event-manager": 112, + "./event/event": 115, + "./event/event-target": 114, + "./platform/CCMacro": 126, + "./platform/js": 142, + "./renderer/render-flow": 153, + "./utils/affine-transform": 196, + "./utils/base-node": 197, + "./utils/prefab-helper": 208, + "./utils/trans-pool": 214, + "./value-types": 220 + } ], + 25: [ (function(require, module, exports) { + "use strict"; + function _createForOfIteratorHelperLoose(o, allowArrayLike) { + var it = "undefined" !== typeof Symbol && o[Symbol.iterator] || o["@@iterator"]; + if (it) return (it = it.call(o)).next.bind(it); + if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && "number" === typeof o.length) { + it && (o = it); + var i = 0; + return function() { + if (i >= o.length) return { + done: true + }; + return { + done: false, + value: o[i++] + }; + }; + } + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if ("string" === typeof o) return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + "Object" === n && o.constructor && (n = o.constructor.name); + if ("Map" === n || "Set" === n) return Array.from(o); + if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); + } + function _arrayLikeToArray(arr, len) { + (null == len || len > arr.length) && (len = arr.length); + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + return arr2; + } + var Node = require("./CCNode"); + var RenderFlow = require("./renderer/render-flow"); + var HideInHierarchy = cc.Object.Flags.HideInHierarchy; + var LocalDirtyFlag = Node._LocalDirtyFlag; + var POSITION_ON = 1; + var PrivateNode = cc.Class({ + name: "cc.PrivateNode", + extends: Node, + properties: { + x: { + get: function get() { + return this._originPos.x; + }, + set: function set(value) { + var localPosition = this._originPos; + if (value !== localPosition.x) { + localPosition.x = value; + this._posDirty(true); + } + }, + override: true + }, + y: { + get: function get() { + return this._originPos.y; + }, + set: function set(value) { + var localPosition = this._originPos; + if (value !== localPosition.y) { + localPosition.y = value; + this._posDirty(true); + } + }, + override: true + }, + zIndex: { + get: function get() { + return cc.macro.MIN_ZINDEX; + }, + set: function set() {}, + override: true + }, + showInEditor: { + default: false, + editorOnly: true, + override: true + } + }, + ctor: function ctor(name) { + this._localZOrder = cc.macro.MIN_ZINDEX << 16; + this._originPos = cc.v2(); + false; + }, + _posDirty: function _posDirty(sendEvent) { + this.setLocalDirty(LocalDirtyFlag.POSITION); + true, this._renderFlag |= RenderFlow.FLAG_TRANSFORM; + true === sendEvent && this._eventMask & POSITION_ON && this.emit(Node.EventType.POSITION_CHANGED); + }, + _updateLocalMatrix: function _updateLocalMatrix() { + if (!this._localMatDirty) return; + var parent = this.parent; + if (parent) { + this._trs[0] = this._originPos.x - (parent._anchorPoint.x - .5) * parent._contentSize.width; + this._trs[1] = this._originPos.y - (parent._anchorPoint.y - .5) * parent._contentSize.height; + } + this._super(); + }, + getPosition: function getPosition() { + return new cc.Vec2(this._originPos); + }, + setPosition: function setPosition(x, y) { + if (void 0 === y) { + x = x.x; + y = x.y; + } + var pos = this._originPos; + if (pos.x === x && pos.y === y) return; + pos.x = x; + pos.y = y; + this._posDirty(true); + }, + setParent: function setParent(value) { + var oldParent = this._parent; + this._super(value); + if (oldParent !== value) { + oldParent && oldParent.off(Node.EventType.ANCHOR_CHANGED, this._posDirty, this); + value && value.on(Node.EventType.ANCHOR_CHANGED, this._posDirty, this); + } + }, + _updateOrderOfArrival: function _updateOrderOfArrival() {} + }); + var proto = PrivateNode.prototype; + cc.js.getset(proto, "parent", proto.getParent, proto.setParent); + cc.js.getset(proto, "position", proto.getPosition, proto.setPosition); + false; + cc.PrivateNode = module.exports = PrivateNode; + }), { + "./CCNode": 24, + "./renderer/render-flow": 153 + } ], + 26: [ (function(require, module, exports) { + "use strict"; + var NIL = function NIL() {}; + cc.Scene = cc.Class({ + name: "cc.Scene", + extends: require("./CCNode"), + properties: { + _is3DNode: { + default: true, + override: true + }, + autoReleaseAssets: false + }, + ctor: function ctor() { + this._anchorPoint.x = 0; + this._anchorPoint.y = 0; + this._activeInHierarchy = false; + this._inited = !cc.game._isCloning; + false; + this.dependAssets = null; + }, + destroy: function destroy() { + if (cc.Object.prototype.destroy.call(this)) { + var children = this._children; + for (var i = 0; i < children.length; ++i) children[i].active = false; + } + this._active = false; + this._activeInHierarchy = false; + }, + _onHierarchyChanged: NIL, + _instantiate: null, + _load: function _load() { + if (!this._inited) { + false; + this._onBatchCreated(false); + this._inited = true; + } + }, + _activate: function _activate(active) { + active = false !== active; + false, false; + cc.director._nodeActivator.activateNode(this, active); + } + }); + module.exports = cc.Scene; + }), { + "./CCNode": 24 + } ], + 27: [ (function(require, module, exports) { + "use strict"; + var js = require("./platform/js"); + var IdGenerater = require("./platform/id-generater"); + var MAX_POOL_SIZE = 20; + var idGenerater = new IdGenerater("Scheduler"); + var ListEntry = function ListEntry(target, priority, paused, markedForDeletion) { + this.target = target; + this.priority = priority; + this.paused = paused; + this.markedForDeletion = markedForDeletion; + }; + var _listEntries = []; + ListEntry.get = function(target, priority, paused, markedForDeletion) { + var result = _listEntries.pop(); + if (result) { + result.target = target; + result.priority = priority; + result.paused = paused; + result.markedForDeletion = markedForDeletion; + } else result = new ListEntry(target, priority, paused, markedForDeletion); + return result; + }; + ListEntry.put = function(entry) { + if (_listEntries.length < MAX_POOL_SIZE) { + entry.target = null; + _listEntries.push(entry); + } + }; + var HashUpdateEntry = function HashUpdateEntry(list, entry, target, callback) { + this.list = list; + this.entry = entry; + this.target = target; + this.callback = callback; + }; + var _hashUpdateEntries = []; + HashUpdateEntry.get = function(list, entry, target, callback) { + var result = _hashUpdateEntries.pop(); + if (result) { + result.list = list; + result.entry = entry; + result.target = target; + result.callback = callback; + } else result = new HashUpdateEntry(list, entry, target, callback); + return result; + }; + HashUpdateEntry.put = function(entry) { + if (_hashUpdateEntries.length < MAX_POOL_SIZE) { + entry.list = entry.entry = entry.target = entry.callback = null; + _hashUpdateEntries.push(entry); + } + }; + var HashTimerEntry = function HashTimerEntry(timers, target, timerIndex, currentTimer, currentTimerSalvaged, paused) { + var _t = this; + _t.timers = timers; + _t.target = target; + _t.timerIndex = timerIndex; + _t.currentTimer = currentTimer; + _t.currentTimerSalvaged = currentTimerSalvaged; + _t.paused = paused; + }; + var _hashTimerEntries = []; + HashTimerEntry.get = function(timers, target, timerIndex, currentTimer, currentTimerSalvaged, paused) { + var result = _hashTimerEntries.pop(); + if (result) { + result.timers = timers; + result.target = target; + result.timerIndex = timerIndex; + result.currentTimer = currentTimer; + result.currentTimerSalvaged = currentTimerSalvaged; + result.paused = paused; + } else result = new HashTimerEntry(timers, target, timerIndex, currentTimer, currentTimerSalvaged, paused); + return result; + }; + HashTimerEntry.put = function(entry) { + if (_hashTimerEntries.length < MAX_POOL_SIZE) { + entry.timers = entry.target = entry.currentTimer = null; + _hashTimerEntries.push(entry); + } + }; + function CallbackTimer() { + this._lock = false; + this._scheduler = null; + this._elapsed = -1; + this._runForever = false; + this._useDelay = false; + this._timesExecuted = 0; + this._repeat = 0; + this._delay = 0; + this._interval = 0; + this._target = null; + this._callback = null; + } + var proto = CallbackTimer.prototype; + proto.initWithCallback = function(scheduler, callback, target, seconds, repeat, delay) { + this._lock = false; + this._scheduler = scheduler; + this._target = target; + this._callback = callback; + this._elapsed = -1; + this._interval = seconds; + this._delay = delay; + this._useDelay = this._delay > 0; + this._repeat = repeat; + this._runForever = this._repeat === cc.macro.REPEAT_FOREVER; + return true; + }; + proto.getInterval = function() { + return this._interval; + }; + proto.setInterval = function(interval) { + this._interval = interval; + }; + proto.update = function(dt) { + if (-1 === this._elapsed) { + this._elapsed = 0; + this._timesExecuted = 0; + } else { + this._elapsed += dt; + if (this._runForever && !this._useDelay) { + if (this._elapsed >= this._interval) { + this.trigger(); + this._elapsed = 0; + } + } else { + if (this._useDelay) { + if (this._elapsed >= this._delay) { + this.trigger(); + this._elapsed -= this._delay; + this._timesExecuted += 1; + this._useDelay = false; + } + } else if (this._elapsed >= this._interval) { + this.trigger(); + this._elapsed = 0; + this._timesExecuted += 1; + } + this._callback && !this._runForever && this._timesExecuted > this._repeat && this.cancel(); + } + } + }; + proto.getCallback = function() { + return this._callback; + }; + proto.trigger = function() { + if (this._target && this._callback) { + this._lock = true; + this._callback.call(this._target, this._elapsed); + this._lock = false; + } + }; + proto.cancel = function() { + this._scheduler.unschedule(this._callback, this._target); + }; + var _timers = []; + CallbackTimer.get = function() { + return _timers.pop() || new CallbackTimer(); + }; + CallbackTimer.put = function(timer) { + if (_timers.length < MAX_POOL_SIZE && !timer._lock) { + timer._scheduler = timer._target = timer._callback = null; + _timers.push(timer); + } + }; + cc.Scheduler = function() { + this._timeScale = 1; + this._updatesNegList = []; + this._updates0List = []; + this._updatesPosList = []; + this._hashForUpdates = js.createMap(true); + this._hashForTimers = js.createMap(true); + this._currentTarget = null; + this._currentTargetSalvaged = false; + this._updateHashLocked = false; + this._arrayForTimers = []; + }; + cc.Scheduler.prototype = { + constructor: cc.Scheduler, + _removeHashElement: function _removeHashElement(element) { + delete this._hashForTimers[element.target._id]; + var arr = this._arrayForTimers; + for (var i = 0, l = arr.length; i < l; i++) if (arr[i] === element) { + arr.splice(i, 1); + break; + } + HashTimerEntry.put(element); + }, + _removeUpdateFromHash: function _removeUpdateFromHash(entry) { + var targetId = entry.target._id; + var self = this, element = self._hashForUpdates[targetId]; + if (element) { + var list = element.list, listEntry = element.entry; + for (var i = 0, l = list.length; i < l; i++) if (list[i] === listEntry) { + list.splice(i, 1); + break; + } + delete self._hashForUpdates[targetId]; + ListEntry.put(listEntry); + HashUpdateEntry.put(element); + } + }, + _priorityIn: function _priorityIn(ppList, listElement, priority) { + for (var i = 0; i < ppList.length; i++) if (priority < ppList[i].priority) { + ppList.splice(i, 0, listElement); + return; + } + ppList.push(listElement); + }, + _appendIn: function _appendIn(ppList, listElement) { + ppList.push(listElement); + }, + enableForTarget: function enableForTarget(target) { + target._id || (target.__instanceId ? cc.warnID(1513) : target._id = idGenerater.getNewId()); + }, + setTimeScale: function setTimeScale(timeScale) { + this._timeScale = timeScale; + }, + getTimeScale: function getTimeScale() { + return this._timeScale; + }, + update: function update(dt) { + this._updateHashLocked = true; + 1 !== this._timeScale && (dt *= this._timeScale); + var i, list, len, entry; + for (i = 0, list = this._updatesNegList, len = list.length; i < len; i++) { + entry = list[i]; + entry.paused || entry.markedForDeletion || entry.target.update(dt); + } + for (i = 0, list = this._updates0List, len = list.length; i < len; i++) { + entry = list[i]; + entry.paused || entry.markedForDeletion || entry.target.update(dt); + } + for (i = 0, list = this._updatesPosList, len = list.length; i < len; i++) { + entry = list[i]; + entry.paused || entry.markedForDeletion || entry.target.update(dt); + } + var elt, arr = this._arrayForTimers; + for (i = 0; i < arr.length; i++) { + elt = arr[i]; + this._currentTarget = elt; + this._currentTargetSalvaged = false; + if (!elt.paused) for (elt.timerIndex = 0; elt.timerIndex < elt.timers.length; ++elt.timerIndex) { + elt.currentTimer = elt.timers[elt.timerIndex]; + elt.currentTimerSalvaged = false; + elt.currentTimer.update(dt); + elt.currentTimer = null; + } + if (this._currentTargetSalvaged && 0 === this._currentTarget.timers.length) { + this._removeHashElement(this._currentTarget); + --i; + } + } + for (i = 0, list = this._updatesNegList; i < list.length; ) { + entry = list[i]; + entry.markedForDeletion ? this._removeUpdateFromHash(entry) : i++; + } + for (i = 0, list = this._updates0List; i < list.length; ) { + entry = list[i]; + entry.markedForDeletion ? this._removeUpdateFromHash(entry) : i++; + } + for (i = 0, list = this._updatesPosList; i < list.length; ) { + entry = list[i]; + entry.markedForDeletion ? this._removeUpdateFromHash(entry) : i++; + } + this._updateHashLocked = false; + this._currentTarget = null; + }, + schedule: function schedule(callback, target, interval, repeat, delay, paused) { + if ("function" !== typeof callback) { + var tmp = callback; + callback = target; + target = tmp; + } + if (4 === arguments.length || 5 === arguments.length) { + paused = !!repeat; + repeat = cc.macro.REPEAT_FOREVER; + delay = 0; + } + cc.assertID(target, 1502); + var targetId = target._id; + if (!targetId) if (target.__instanceId) { + cc.warnID(1513); + targetId = target._id = target.__instanceId; + } else cc.errorID(1510); + var element = this._hashForTimers[targetId]; + if (element) element.paused !== paused && cc.warnID(1511); else { + element = HashTimerEntry.get(null, target, 0, null, null, paused); + this._arrayForTimers.push(element); + this._hashForTimers[targetId] = element; + } + var timer, i; + if (null == element.timers) element.timers = []; else for (i = 0; i < element.timers.length; ++i) { + timer = element.timers[i]; + if (timer && callback === timer._callback) { + cc.logID(1507, timer.getInterval(), interval); + timer._interval = interval; + return; + } + } + timer = CallbackTimer.get(); + timer.initWithCallback(this, callback, target, interval, repeat, delay); + element.timers.push(timer); + this._currentTarget === element && this._currentTargetSalvaged && (this._currentTargetSalvaged = false); + }, + scheduleUpdate: function scheduleUpdate(target, priority, paused) { + var targetId = target._id; + if (!targetId) if (target.__instanceId) { + cc.warnID(1513); + targetId = target._id = target.__instanceId; + } else cc.errorID(1510); + var hashElement = this._hashForUpdates[targetId]; + if (hashElement && hashElement.entry) { + if (hashElement.entry.priority === priority) { + hashElement.entry.markedForDeletion = false; + hashElement.entry.paused = paused; + return; + } + if (this._updateHashLocked) { + cc.logID(1506); + hashElement.entry.markedForDeletion = false; + hashElement.entry.paused = paused; + return; + } + this.unscheduleUpdate(target); + } + var listElement = ListEntry.get(target, priority, paused, false); + var ppList; + if (0 === priority) { + ppList = this._updates0List; + this._appendIn(ppList, listElement); + } else { + ppList = priority < 0 ? this._updatesNegList : this._updatesPosList; + this._priorityIn(ppList, listElement, priority); + } + this._hashForUpdates[targetId] = HashUpdateEntry.get(ppList, listElement, target, null); + }, + unschedule: function unschedule(callback, target) { + if (!target || !callback) return; + var targetId = target._id; + if (!targetId) if (target.__instanceId) { + cc.warnID(1513); + targetId = target._id = target.__instanceId; + } else cc.errorID(1510); + var self = this, element = self._hashForTimers[targetId]; + if (element) { + var timers = element.timers; + for (var i = 0, li = timers.length; i < li; i++) { + var timer = timers[i]; + if (callback === timer._callback) { + timer !== element.currentTimer || element.currentTimerSalvaged || (element.currentTimerSalvaged = true); + timers.splice(i, 1); + CallbackTimer.put(timer); + element.timerIndex >= i && element.timerIndex--; + 0 === timers.length && (self._currentTarget === element ? self._currentTargetSalvaged = true : self._removeHashElement(element)); + return; + } + } + } + }, + unscheduleUpdate: function unscheduleUpdate(target) { + if (!target) return; + var targetId = target._id; + if (!targetId) if (target.__instanceId) { + cc.warnID(1513); + targetId = target._id = target.__instanceId; + } else cc.errorID(1510); + var element = this._hashForUpdates[targetId]; + element && (this._updateHashLocked ? element.entry.markedForDeletion = true : this._removeUpdateFromHash(element.entry)); + }, + unscheduleAllForTarget: function unscheduleAllForTarget(target) { + if (!target) return; + var targetId = target._id; + if (!targetId) if (target.__instanceId) { + cc.warnID(1513); + targetId = target._id = target.__instanceId; + } else cc.errorID(1510); + var element = this._hashForTimers[targetId]; + if (element) { + var timers = element.timers; + timers.indexOf(element.currentTimer) > -1 && !element.currentTimerSalvaged && (element.currentTimerSalvaged = true); + for (var i = 0, l = timers.length; i < l; i++) CallbackTimer.put(timers[i]); + timers.length = 0; + this._currentTarget === element ? this._currentTargetSalvaged = true : this._removeHashElement(element); + } + this.unscheduleUpdate(target); + }, + unscheduleAll: function unscheduleAll() { + this.unscheduleAllWithMinPriority(cc.Scheduler.PRIORITY_SYSTEM); + }, + unscheduleAllWithMinPriority: function unscheduleAllWithMinPriority(minPriority) { + var i, element, arr = this._arrayForTimers; + for (i = arr.length - 1; i >= 0; i--) { + element = arr[i]; + this.unscheduleAllForTarget(element.target); + } + var entry; + var temp_length = 0; + if (minPriority < 0) for (i = 0; i < this._updatesNegList.length; ) { + temp_length = this._updatesNegList.length; + entry = this._updatesNegList[i]; + entry && entry.priority >= minPriority && this.unscheduleUpdate(entry.target); + temp_length == this._updatesNegList.length && i++; + } + if (minPriority <= 0) for (i = 0; i < this._updates0List.length; ) { + temp_length = this._updates0List.length; + entry = this._updates0List[i]; + entry && this.unscheduleUpdate(entry.target); + temp_length == this._updates0List.length && i++; + } + for (i = 0; i < this._updatesPosList.length; ) { + temp_length = this._updatesPosList.length; + entry = this._updatesPosList[i]; + entry && entry.priority >= minPriority && this.unscheduleUpdate(entry.target); + temp_length == this._updatesPosList.length && i++; + } + }, + isScheduled: function isScheduled(callback, target) { + cc.assertID(callback, 1508); + cc.assertID(target, 1509); + var targetId = target._id; + if (!targetId) if (target.__instanceId) { + cc.warnID(1513); + targetId = target._id = target.__instanceId; + } else cc.errorID(1510); + var element = this._hashForTimers[targetId]; + if (!element) return false; + if (null == element.timers) return false; + var timers = element.timers; + for (var i = 0; i < timers.length; ++i) { + var timer = timers[i]; + if (callback === timer._callback) return true; + } + return false; + }, + pauseAllTargets: function pauseAllTargets() { + return this.pauseAllTargetsWithMinPriority(cc.Scheduler.PRIORITY_SYSTEM); + }, + pauseAllTargetsWithMinPriority: function pauseAllTargetsWithMinPriority(minPriority) { + var idsWithSelectors = []; + var self = this, element, locArrayForTimers = self._arrayForTimers; + var i, li; + for (i = 0, li = locArrayForTimers.length; i < li; i++) { + element = locArrayForTimers[i]; + if (element) { + element.paused = true; + idsWithSelectors.push(element.target); + } + } + var entry; + if (minPriority < 0) for (i = 0; i < this._updatesNegList.length; i++) { + entry = this._updatesNegList[i]; + if (entry && entry.priority >= minPriority) { + entry.paused = true; + idsWithSelectors.push(entry.target); + } + } + if (minPriority <= 0) for (i = 0; i < this._updates0List.length; i++) { + entry = this._updates0List[i]; + if (entry) { + entry.paused = true; + idsWithSelectors.push(entry.target); + } + } + for (i = 0; i < this._updatesPosList.length; i++) { + entry = this._updatesPosList[i]; + if (entry && entry.priority >= minPriority) { + entry.paused = true; + idsWithSelectors.push(entry.target); + } + } + return idsWithSelectors; + }, + resumeTargets: function resumeTargets(targetsToResume) { + if (!targetsToResume) return; + for (var i = 0; i < targetsToResume.length; i++) this.resumeTarget(targetsToResume[i]); + }, + pauseTarget: function pauseTarget(target) { + cc.assertID(target, 1503); + var targetId = target._id; + if (!targetId) if (target.__instanceId) { + cc.warnID(1513); + targetId = target._id = target.__instanceId; + } else cc.errorID(1510); + var self = this, element = self._hashForTimers[targetId]; + element && (element.paused = true); + var elementUpdate = self._hashForUpdates[targetId]; + elementUpdate && (elementUpdate.entry.paused = true); + }, + resumeTarget: function resumeTarget(target) { + cc.assertID(target, 1504); + var targetId = target._id; + if (!targetId) if (target.__instanceId) { + cc.warnID(1513); + targetId = target._id = target.__instanceId; + } else cc.errorID(1510); + var self = this, element = self._hashForTimers[targetId]; + element && (element.paused = false); + var elementUpdate = self._hashForUpdates[targetId]; + elementUpdate && (elementUpdate.entry.paused = false); + }, + isTargetPaused: function isTargetPaused(target) { + cc.assertID(target, 1505); + var targetId = target._id; + if (!targetId) if (target.__instanceId) { + cc.warnID(1513); + targetId = target._id = target.__instanceId; + } else cc.errorID(1510); + var element = this._hashForTimers[targetId]; + if (element) return element.paused; + var elementUpdate = this._hashForUpdates[targetId]; + if (elementUpdate) return elementUpdate.entry.paused; + return false; + } + }; + cc.Scheduler.PRIORITY_SYSTEM = 1 << 31; + cc.Scheduler.PRIORITY_NON_SYSTEM = cc.Scheduler.PRIORITY_SYSTEM + 1; + module.exports = cc.Scheduler; + }), { + "./platform/id-generater": 138, + "./platform/js": 142 + } ], + 28: [ (function(require, module, exports) { + "use strict"; + var preprocess = require("./preprocess"); + var fetch = require("./fetch"); + var Cache = require("./cache"); + var helper = require("./helper"); + var releaseManager = require("./releaseManager"); + var dependUtil = require("./depend-util"); + var load = require("./load"); + var Pipeline = require("./pipeline"); + var Task = require("./task"); + var RequestItem = require("./request-item"); + var downloader = require("./downloader"); + var parser = require("./parser"); + var packManager = require("./pack-manager"); + var Bundle = require("./bundle"); + var builtins = require("./builtins"); + var factory = require("./factory"); + var _require = require("./urlTransformer"), parse = _require.parse, combine = _require.combine; + var _require2 = require("./utilities"), parseParameters = _require2.parseParameters, asyncify = _require2.asyncify; + var _require3 = require("./shared"), assets = _require3.assets, files = _require3.files, parsed = _require3.parsed, pipeline = _require3.pipeline, transformPipeline = _require3.transformPipeline, fetchPipeline = _require3.fetchPipeline, RequestType = _require3.RequestType, bundles = _require3.bundles, BuiltinBundleName = _require3.BuiltinBundleName; + function AssetManager() { + this._preprocessPipe = preprocess; + this._fetchPipe = fetch; + this._loadPipe = load; + this.pipeline = pipeline.append(preprocess).append(load); + this.fetchPipeline = fetchPipeline.append(preprocess).append(fetch); + this.transformPipeline = transformPipeline.append(parse).append(combine); + this.bundles = bundles; + this.assets = assets; + this._files = files; + this._parsed = parsed; + this.generalImportBase = ""; + this.generalNativeBase = ""; + this.dependUtil = dependUtil; + this._releaseManager = releaseManager; + this.cacheAsset = true; + this.force = false; + this.utils = helper; + this.downloader = downloader; + this.parser = parser; + this.builtins = builtins; + this.packManager = packManager; + this.factory = factory; + this.cacheManager = null; + this.presets = { + default: { + priority: 0 + }, + preload: { + maxConcurrency: 2, + maxRequestsPerFrame: 2, + priority: -1 + }, + scene: { + maxConcurrency: 8, + maxRequestsPerFrame: 8, + priority: 1 + }, + bundle: { + maxConcurrency: 8, + maxRequestsPerFrame: 8, + priority: 2 + }, + remote: { + maxRetryCount: 4 + }, + script: { + maxConcurrency: 1024, + maxRequestsPerFrame: 1024, + priority: 2 + } + }; + } + AssetManager.Pipeline = Pipeline; + AssetManager.Task = Task; + AssetManager.Cache = Cache; + AssetManager.RequestItem = RequestItem; + AssetManager.Bundle = Bundle; + AssetManager.BuiltinBundleName = BuiltinBundleName; + AssetManager.prototype = { + constructor: AssetManager, + get main() { + return bundles.get(BuiltinBundleName.MAIN); + }, + get resources() { + return bundles.get(BuiltinBundleName.RESOURCES); + }, + get internal() { + return bundles.get(BuiltinBundleName.INTERNAL); + }, + init: function init(options) { + options = options || Object.create(null); + this._files.clear(); + this._parsed.clear(); + this._releaseManager.init(); + this.assets.clear(); + this.bundles.clear(); + this.packManager.init(); + this.downloader.init(options.bundleVers, options.server); + this.parser.init(); + this.dependUtil.init(); + this.generalImportBase = options.importBase; + this.generalNativeBase = options.nativeBase; + }, + getBundle: function getBundle(name) { + return bundles.get(name); + }, + removeBundle: function removeBundle(bundle) { + bundle._destroy(); + bundles.remove(bundle.name); + }, + loadAny: function loadAny(requests, options, onProgress, onComplete) { + var _parseParameters = parseParameters(options, onProgress, onComplete), options = _parseParameters.options, onProgress = _parseParameters.onProgress, onComplete = _parseParameters.onComplete; + options.preset = options.preset || "default"; + requests = Array.isArray(requests) ? requests.concat() : requests; + var task = new Task({ + input: requests, + onProgress: onProgress, + onComplete: asyncify(onComplete), + options: options + }); + pipeline.async(task); + }, + preloadAny: function preloadAny(requests, options, onProgress, onComplete) { + var _parseParameters2 = parseParameters(options, onProgress, onComplete), options = _parseParameters2.options, onProgress = _parseParameters2.onProgress, onComplete = _parseParameters2.onComplete; + options.preset = options.preset || "preload"; + requests = Array.isArray(requests) ? requests.concat() : requests; + var task = new Task({ + input: requests, + onProgress: onProgress, + onComplete: asyncify(onComplete), + options: options + }); + fetchPipeline.async(task); + }, + postLoadNative: function postLoadNative(asset, options, onComplete) { + if (!(asset instanceof cc.Asset)) throw new Error("input is not asset"); + var _parseParameters3 = parseParameters(options, void 0, onComplete), options = _parseParameters3.options, onComplete = _parseParameters3.onComplete; + if (!asset._native || asset._nativeAsset) return asyncify(onComplete)(null); + var depend = dependUtil.getNativeDep(asset._uuid); + if (depend) { + if (!bundles.has(depend.bundle)) { + var bundle = bundles.find((function(bundle) { + return bundle.getAssetInfo(asset._uuid); + })); + bundle && (depend.bundle = bundle.name); + } + this.loadAny(depend, options, (function(err, _native) { + err ? cc.error(err.message, err.stack) : asset.isValid && !asset._nativeAsset && (asset._nativeAsset = _native); + onComplete && onComplete(err); + })); + } + }, + loadRemote: function loadRemote(url, options, onComplete) { + var _parseParameters4 = parseParameters(options, void 0, onComplete), options = _parseParameters4.options, onComplete = _parseParameters4.onComplete; + if (this.assets.has(url)) return asyncify(onComplete)(null, this.assets.get(url)); + options.__isNative__ = true; + options.preset = options.preset || "remote"; + this.loadAny({ + url: url + }, options, null, (function(err, data) { + if (err) { + cc.error(err.message, err.stack); + onComplete && onComplete(err, null); + } else factory.create(url, data, options.ext || cc.path.extname(url), options, (function(err, out) { + onComplete && onComplete(err, out); + })); + })); + }, + loadScript: function loadScript(url, options, onComplete) { + var _parseParameters5 = parseParameters(options, void 0, onComplete), options = _parseParameters5.options, onComplete = _parseParameters5.onComplete; + options.__requestType__ = RequestType.URL; + options.preset = options.preset || "script"; + this.loadAny(url, options, onComplete); + }, + loadBundle: function loadBundle(nameOrUrl, options, onComplete) { + var _parseParameters6 = parseParameters(options, void 0, onComplete), options = _parseParameters6.options, onComplete = _parseParameters6.onComplete; + var bundleName = cc.path.basename(nameOrUrl); + if (this.bundles.has(bundleName)) return asyncify(onComplete)(null, this.getBundle(bundleName)); + options.preset = options.preset || "bundle"; + options.ext = "bundle"; + this.loadRemote(nameOrUrl, options, onComplete); + }, + releaseAsset: function releaseAsset(asset) { + releaseManager.tryRelease(asset, true); + }, + releaseUnusedAssets: function releaseUnusedAssets() { + assets.forEach((function(asset) { + releaseManager.tryRelease(asset); + })); + }, + releaseAll: function releaseAll() { + assets.forEach((function(asset) { + releaseManager.tryRelease(asset, true); + })); + }, + _transform: function _transform(input, options) { + var subTask = Task.create({ + input: input, + options: options + }); + var urls = []; + try { + var result = transformPipeline.sync(subTask); + for (var i = 0, l = result.length; i < l; i++) { + var item = result[i]; + var url = item.url; + item.recycle(); + urls.push(url); + } + } catch (e) { + for (var i = 0, l = subTask.output.length; i < l; i++) subTask.output[i].recycle(); + cc.error(e.message, e.stack); + } + subTask.recycle(); + return urls.length > 1 ? urls : urls[0]; + } + }; + cc.AssetManager = AssetManager; + cc.assetManager = new AssetManager(); + Object.defineProperty(cc, "resources", { + get: function get() { + return bundles.get(BuiltinBundleName.RESOURCES); + } + }); + module.exports = cc.assetManager; + }), { + "./builtins": 29, + "./bundle": 30, + "./cache": 31, + "./depend-util": 33, + "./downloader": 40, + "./factory": 41, + "./fetch": 42, + "./helper": 44, + "./load": 46, + "./pack-manager": 47, + "./parser": 48, + "./pipeline": 49, + "./preprocess": 50, + "./releaseManager": 51, + "./request-item": 52, + "./shared": 53, + "./task": 54, + "./urlTransformer": 55, + "./utilities": 56 + } ], + 29: [ (function(require, module, exports) { + "use strict"; + var Cache = require("./cache"); + var releaseManager = require("./releaseManager"); + var _require = require("./shared"), BuiltinBundleName = _require.BuiltinBundleName; + var builtins = { + _assets: new Cache({ + material: new Cache(), + effect: new Cache() + }), + _loadBuiltins: function _loadBuiltins(name, cb) { + var dirname = name + "s"; + var builtin = this._assets.get(name); + return cc.assetManager.internal.loadDir(dirname, null, null, (function(err, assets) { + if (err) cc.error(err.message, err.stack); else for (var i = 0; i < assets.length; i++) { + var asset = assets[i]; + builtin.add(asset.name, asset.addRef()); + } + cb(); + })); + }, + init: function init(cb) { + var _this = this; + this.clear(); + if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS || !cc.assetManager.bundles.has(BuiltinBundleName.INTERNAL)) return cb && cb(); + this._loadBuiltins("effect", (function() { + _this._loadBuiltins("material", (function() { + _this._loadBuiltinsSP(cb); + })); + })); + }, + _loadBuiltinsSP: function _loadBuiltinsSP(cb) { + cc.sp.MAX_MULTITEXTURE_NUM = 8; + this._loadMultiEffect("multi-2d-sprite", (function(effect) { + cc.sp.multi2dSpriteEffectAsset = effect; + effect.addRef(); + cc.sp.inited = true; + cc.sp.multiBatcher.init(); + -1 === cc.dynamicAtlasManager.maxAtlasCount && (cc.dynamicAtlasManager.maxAtlasCount = Math.max(0, cc.sp.MAX_MULTITEXTURE_NUM - cc.sp.charAtlasAutoBatchCount)); + cb(); + })); + }, + _loadMultiEffect: function _loadMultiEffect(name, cb) { + false; + cc.assetManager.loadBundle("sp", (function(err, bundle) { + err ? cc.error(err) : bundle.load("effects/" + name, cc.EffectAsset, (function(err, effect) { + err ? cc.error(err) : cb(effect); + })); + })); + }, + getBuiltin: function getBuiltin(type, name) { + return 0 === arguments.length ? this._assets : 1 === arguments.length ? this._assets.get(type) : this._assets.get(type).get(name); + }, + clear: function clear() { + this._assets.forEach((function(assets) { + assets.forEach((function(asset) { + releaseManager.tryRelease(asset, true); + })); + assets.clear(); + })); + } + }; + module.exports = builtins; + }), { + "./cache": 31, + "./releaseManager": 51, + "./shared": 53 + } ], + 30: [ (function(require, module, exports) { + "use strict"; + var Config = require("./config"); + var releaseManager = require("./releaseManager"); + var _require = require("./utilities"), parseParameters = _require.parseParameters, parseLoadResArgs = _require.parseLoadResArgs; + var _require2 = require("./shared"), RequestType = _require2.RequestType, assets = _require2.assets, bundles = _require2.bundles; + function Bundle() { + this._config = new Config(); + } + Bundle.prototype = { + constructor: Bundle, + get name() { + return this._config.name; + }, + get deps() { + return this._config.deps; + }, + get base() { + return this._config.base; + }, + getInfoWithPath: function getInfoWithPath(path, type) { + return this._config.getInfoWithPath(path, type); + }, + getDirWithPath: function getDirWithPath(path, type, out) { + return this._config.getDirWithPath(path, type, out); + }, + getAssetInfo: function getAssetInfo(uuid) { + return this._config.getAssetInfo(uuid); + }, + getSceneInfo: function getSceneInfo(name) { + return this._config.getSceneInfo(name); + }, + init: function init(options) { + this._config.init(options); + bundles.add(options.name, this); + }, + load: function load(paths, type, onProgress, onComplete) { + var _parseLoadResArgs = parseLoadResArgs(type, onProgress, onComplete), type = _parseLoadResArgs.type, onProgress = _parseLoadResArgs.onProgress, onComplete = _parseLoadResArgs.onComplete; + cc.assetManager.loadAny(paths, { + __requestType__: RequestType.PATH, + type: type, + bundle: this.name, + __outputAsArray__: Array.isArray(paths) + }, onProgress, onComplete); + }, + preload: function preload(paths, type, onProgress, onComplete) { + var _parseLoadResArgs2 = parseLoadResArgs(type, onProgress, onComplete), type = _parseLoadResArgs2.type, onProgress = _parseLoadResArgs2.onProgress, onComplete = _parseLoadResArgs2.onComplete; + cc.assetManager.preloadAny(paths, { + __requestType__: RequestType.PATH, + type: type, + bundle: this.name + }, onProgress, onComplete); + }, + loadDir: function loadDir(dir, type, onProgress, onComplete) { + var _parseLoadResArgs3 = parseLoadResArgs(type, onProgress, onComplete), type = _parseLoadResArgs3.type, onProgress = _parseLoadResArgs3.onProgress, onComplete = _parseLoadResArgs3.onComplete; + cc.assetManager.loadAny(dir, { + __requestType__: RequestType.DIR, + type: type, + bundle: this.name, + __outputAsArray__: true + }, onProgress, onComplete); + }, + preloadDir: function preloadDir(dir, type, onProgress, onComplete) { + var _parseLoadResArgs4 = parseLoadResArgs(type, onProgress, onComplete), type = _parseLoadResArgs4.type, onProgress = _parseLoadResArgs4.onProgress, onComplete = _parseLoadResArgs4.onComplete; + cc.assetManager.preloadAny(dir, { + __requestType__: RequestType.DIR, + type: type, + bundle: this.name + }, onProgress, onComplete); + }, + loadScene: function loadScene(sceneName, options, onProgress, onComplete) { + var _parseParameters = parseParameters(options, onProgress, onComplete), options = _parseParameters.options, onProgress = _parseParameters.onProgress, onComplete = _parseParameters.onComplete; + options.preset = options.preset || "scene"; + options.bundle = this.name; + cc.assetManager.loadAny({ + scene: sceneName + }, options, onProgress, (function(err, sceneAsset) { + if (err) { + cc.error(err.message, err.stack); + onComplete && onComplete(err); + } else if (sceneAsset instanceof cc.SceneAsset) { + var scene = sceneAsset.scene; + scene._id = sceneAsset._uuid; + scene._name = sceneAsset._name; + onComplete && onComplete(null, sceneAsset); + } else onComplete && onComplete(new Error("The asset " + sceneAsset._uuid + " is not a scene")); + })); + }, + preloadScene: function preloadScene(sceneName, options, onProgress, onComplete) { + var _parseParameters2 = parseParameters(options, onProgress, onComplete), options = _parseParameters2.options, onProgress = _parseParameters2.onProgress, onComplete = _parseParameters2.onComplete; + options.bundle = this.name; + cc.assetManager.preloadAny({ + scene: sceneName + }, options, onProgress, (function(err) { + err && cc.errorID(1210, sceneName, err.message); + onComplete && onComplete(err); + })); + }, + get: function get(path, type) { + var info = this.getInfoWithPath(path, type); + return assets.get(info && info.uuid); + }, + release: function release(path, type) { + releaseManager.tryRelease(this.get(path, type), true); + }, + releaseUnusedAssets: function releaseUnusedAssets() { + var self = this; + assets.forEach((function(asset) { + var info = self.getAssetInfo(asset._uuid); + info && !info.redirect && releaseManager.tryRelease(asset); + })); + }, + releaseAll: function releaseAll() { + var self = this; + assets.forEach((function(asset) { + var info = self.getAssetInfo(asset._uuid); + info && !info.redirect && releaseManager.tryRelease(asset, true); + })); + }, + _destroy: function _destroy() { + this._config.destroy(); + } + }; + module.exports = Bundle; + }), { + "./config": 32, + "./releaseManager": 51, + "./shared": 53, + "./utilities": 56 + } ], + 31: [ (function(require, module, exports) { + "use strict"; + var js = require("../platform/js"); + function Cache(map) { + if (map) { + this._map = map; + this._count = Object.keys(map).length; + } else { + this._map = js.createMap(true); + this._count = 0; + } + } + Cache.prototype = { + constructor: Cache, + add: function add(key, val) { + key in this._map || this._count++; + return this._map[key] = val; + }, + get: function get(key) { + return this._map[key]; + }, + has: function has(key) { + return key in this._map; + }, + remove: function remove(key) { + var out = this._map[key]; + if (key in this._map) { + delete this._map[key]; + this._count--; + } + return out; + }, + clear: function clear() { + if (0 !== this._count) { + this._map = js.createMap(true); + this._count = 0; + } + }, + forEach: function forEach(func) { + for (var key in this._map) func(this._map[key], key); + }, + find: function find(predicate) { + for (var key in this._map) if (predicate(this._map[key], key)) return this._map[key]; + return null; + }, + get count() { + return this._count; + }, + destroy: function destroy() { + this._map = null; + } + }; + module.exports = Cache; + }), { + "../platform/js": 142 + } ], + 32: [ (function(require, module, exports) { + "use strict"; + var js = require("../platform/js"); + var Cache = require("./cache"); + var _require = require("./helper"), normalize = _require.normalize; + var _require2 = require("./utilities"), processOptions = _require2.processOptions; + function Config() { + this.name = ""; + this.base = ""; + this.importBase = ""; + this.nativeBase = ""; + this.deps = null; + this.assetInfos = new Cache(); + this.scenes = new Cache(); + this.paths = new Cache(); + } + Config.prototype = { + constructor: Config, + init: function init(options) { + processOptions(options); + this.importBase = options.importBase || ""; + this.nativeBase = options.nativeBase || ""; + this.base = options.base || ""; + this.name = options.name || ""; + this.deps = options.deps || []; + this._initUuid(options.uuids); + this._initPath(options.paths); + this._initScene(options.scenes); + this._initPackage(options.packs); + this._initVersion(options.versions); + this._initRedirect(options.redirect); + }, + _initUuid: function _initUuid(uuidList) { + if (!uuidList) return; + this.assetInfos.clear(); + for (var i = 0, l = uuidList.length; i < l; i++) { + var uuid = uuidList[i]; + this.assetInfos.add(uuid, { + uuid: uuid + }); + } + }, + _initPath: function _initPath(pathList) { + if (!pathList) return; + var paths = this.paths; + paths.clear(); + for (var uuid in pathList) { + var info = pathList[uuid]; + var path = info[0]; + var type = info[1]; + var isSubAsset = 3 === info.length; + var assetInfo = this.assetInfos.get(uuid); + assetInfo.path = path; + assetInfo.ctor = js._getClassById(type); + paths.has(path) ? isSubAsset ? paths.get(path).push(assetInfo) : paths.get(path).splice(0, 0, assetInfo) : paths.add(path, [ assetInfo ]); + } + }, + _initScene: function _initScene(sceneList) { + if (!sceneList) return; + var scenes = this.scenes; + scenes.clear(); + var assetInfos = this.assetInfos; + for (var sceneName in sceneList) { + var uuid = sceneList[sceneName]; + var assetInfo = assetInfos.get(uuid); + assetInfo.url = sceneName; + scenes.add(sceneName, assetInfo); + } + }, + _initPackage: function _initPackage(packageList) { + if (!packageList) return; + var assetInfos = this.assetInfos; + for (var packUuid in packageList) { + var uuids = packageList[packUuid]; + var pack = { + uuid: packUuid, + packs: uuids, + ext: ".json" + }; + assetInfos.add(packUuid, pack); + for (var i = 0, l = uuids.length; i < l; i++) { + var uuid = uuids[i]; + var assetInfo = assetInfos.get(uuid); + var assetPacks = assetInfo.packs; + assetPacks ? 1 === l ? assetPacks.splice(0, 0, pack) : assetPacks.push(pack) : assetInfo.packs = [ pack ]; + } + } + }, + _initVersion: function _initVersion(versions) { + if (!versions) return; + var assetInfos = this.assetInfos; + var entries = versions["import"]; + if (entries) for (var i = 0, l = entries.length; i < l; i += 2) { + var uuid = entries[i]; + var assetInfo = assetInfos.get(uuid); + assetInfo.ver = entries[i + 1]; + } + entries = versions["native"]; + if (entries) for (var i = 0, l = entries.length; i < l; i += 2) { + var uuid = entries[i]; + var assetInfo = assetInfos.get(uuid); + assetInfo.nativeVer = entries[i + 1]; + } + }, + _initRedirect: function _initRedirect(redirect) { + if (!redirect) return; + var assetInfos = this.assetInfos; + for (var i = 0, l = redirect.length; i < l; i += 2) { + var uuid = redirect[i]; + var assetInfo = assetInfos.get(uuid); + assetInfo.redirect = redirect[i + 1]; + } + }, + getInfoWithPath: function getInfoWithPath(path, type) { + if (!path) return null; + path = normalize(path); + var items = this.paths.get(path); + if (items) { + if (!type) return items[0]; + for (var i = 0, l = items.length; i < l; i++) { + var assetInfo = items[i]; + if (js.isChildClassOf(assetInfo.ctor, type)) return assetInfo; + } + } + return null; + }, + getDirWithPath: function getDirWithPath(path, type, out) { + path = normalize(path); + "/" === path[path.length - 1] && (path = path.slice(0, -1)); + var infos = out || []; + function isMatchByWord(path, test) { + if (path.length > test.length) { + var nextAscii = path.charCodeAt(test.length); + return 47 === nextAscii; + } + return true; + } + this.paths.forEach((function(items, p) { + if (p.startsWith(path) && isMatchByWord(p, path) || !path) for (var i = 0, l = items.length; i < l; i++) { + var entry = items[i]; + type && !js.isChildClassOf(entry.ctor, type) || infos.push(entry); + } + })); + return infos; + }, + getAssetInfo: function getAssetInfo(uuid) { + return this.assetInfos.get(uuid); + }, + getSceneInfo: function getSceneInfo(name) { + name.endsWith(".fire") || (name += ".fire"); + "/" === name[0] || name.startsWith("db://") || (name = "/" + name); + var info = this.scenes.find((function(val, key) { + return key.endsWith(name); + })); + return info; + }, + destroy: function destroy() { + this.paths.destroy(); + this.scenes.destroy(); + this.assetInfos.destroy(); + } + }; + false; + module.exports = Config; + }), { + "../platform/js": 142, + "./cache": 31, + "./helper": 44, + "./utilities": 56 + } ], + 33: [ (function(require, module, exports) { + "use strict"; + var _deserializeCompiled = _interopRequireWildcard(require("../platform/deserialize-compiled")); + function _getRequireWildcardCache(nodeInterop) { + if ("function" !== typeof WeakMap) return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); + } + function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) return obj; + if (null === obj || "object" !== typeof obj && "function" !== typeof obj) return { + default: obj + }; + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) return cache.get(obj); + var newObj = {}; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) if ("default" !== key && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + desc && (desc.get || desc.set) ? Object.defineProperty(newObj, key, desc) : newObj[key] = obj[key]; + } + newObj["default"] = obj; + cache && cache.set(obj, newObj); + return newObj; + } + var Cache = require("./cache"); + var deserialize = require("./deserialize"); + var _require = require("./shared"), files = _require.files, parsed = _require.parsed; + var dependUtil = { + _depends: new Cache(), + init: function init() { + this._depends.clear(); + }, + getNativeDep: function getNativeDep(uuid) { + var depend = this._depends.get(uuid); + if (depend) return depend.nativeDep && Object.assign({}, depend.nativeDep); + return null; + }, + getDeps: function getDeps(uuid) { + if (this._depends.has(uuid)) return this._depends.get(uuid).deps; + return []; + }, + getDepsRecursively: function getDepsRecursively(uuid) { + var exclude = Object.create(null), depends = []; + this._descend(uuid, exclude, depends); + return depends; + }, + _descend: function _descend(uuid, exclude, depends) { + var deps = this.getDeps(uuid); + for (var i = 0; i < deps.length; i++) { + var depend = deps[i]; + if (!exclude[depend]) { + exclude[depend] = true; + depends.push(depend); + this._descend(depend, exclude, depends); + } + } + }, + remove: function remove(uuid) { + this._depends.remove(uuid); + }, + parse: function parse(uuid, json) { + var out = null; + if (Array.isArray(json) || json.__type__) { + if (out = this._depends.get(uuid)) return out; + if (Array.isArray(json) && (false, !(0, _deserializeCompiled.hasNativeDep)(json))) out = { + deps: this._parseDepsFromJson(json) + }; else try { + var asset = deserialize(json); + out = this._parseDepsFromAsset(asset); + out.nativeDep && (out.nativeDep.uuid = uuid); + parsed.add(uuid + "@import", asset); + } catch (e) { + files.remove(uuid + "@import"); + out = { + deps: [] + }; + } + } else { + if ((true, out = this._depends.get(uuid)) && out.parsedFromExistAsset) return out; + out = this._parseDepsFromAsset(json); + } + this._depends.add(uuid, out); + return out; + }, + _parseDepsFromAsset: function _parseDepsFromAsset(asset) { + var out = { + deps: [], + parsedFromExistAsset: true, + preventPreloadNativeObject: asset.constructor.preventPreloadNativeObject, + preventDeferredLoadDependents: asset.constructor.preventDeferredLoadDependents + }; + var deps = asset.__depends__; + for (var i = 0, l = deps.length; i < l; i++) { + var dep = deps[i].uuid; + out.deps.push(dep); + } + asset.__nativeDepend__ && (out.nativeDep = asset._nativeDep); + return out; + }, + _parseDepsFromJson: (false, function(json) { + var depends = (0, _deserializeCompiled.getDependUuidList)(json); + depends.forEach((function(uuid, index) { + return depends[index] = cc.assetManager.utils.decodeUuid(uuid); + })); + return depends; + }) + }; + module.exports = dependUtil; + }), { + "../platform/deserialize-compiled": 136, + "./cache": 31, + "./deserialize": 35, + "./shared": 53 + } ], + 34: [ (function(require, module, exports) { + "use strict"; + var js = require("../platform/js"); + require("../CCDirector"); + var utilities = require("./utilities"); + var dependUtil = require("./depend-util"); + var releaseManager = require("./releaseManager"); + var downloader = require("./downloader"); + var factory = require("./factory"); + var helper = require("./helper"); + var ImageFmts = [ ".png", ".jpg", ".bmp", ".jpeg", ".gif", ".ico", ".tiff", ".webp", ".image", ".pvr", ".pkm" ]; + var AudioFmts = [ ".mp3", ".ogg", ".wav", ".m4a" ]; + function GetTrue() { + return true; + } + var md5Pipe = { + transformURL: function transformURL(url) { + var uuid = helper.getUuidFromURL(url); + if (!uuid) return url; + var bundle = cc.assetManager.bundles.find((function(b) { + return !!b.getAssetInfo(uuid); + })); + if (!bundle) return url; + var hashValue = ""; + var info = bundle.getAssetInfo(uuid); + hashValue = url.startsWith(bundle.base + bundle._config.nativeBase) ? info.nativeVer || "" : info.ver || ""; + if (!hashValue || -1 !== url.indexOf(hashValue)) return url; + var hashPatchInFolder = false; + ".ttf" === cc.path.extname(url) && (hashPatchInFolder = true); + if (hashPatchInFolder) { + var dirname = cc.path.dirname(url); + var basename = cc.path.basename(url); + url = dirname + "." + hashValue + "/" + basename; + } else url = url.replace(/.*[/\\][0-9a-fA-F]{2}[/\\]([0-9a-fA-F-]{8,})/, (function(match, uuid) { + return match + "." + hashValue; + })); + return url; + } + }; + var loader = { + onProgress: null, + _autoReleaseSetting: Object.create(null), + get _cache() { + return cc.assetManager.assets._map; + }, + load: function load(resources, progressCallback, completeCallback) { + if (void 0 === completeCallback && void 0 !== progressCallback) { + completeCallback = progressCallback; + progressCallback = null; + } + resources = Array.isArray(resources) ? resources : [ resources ]; + for (var i = 0; i < resources.length; i++) { + var item = resources[i]; + if ("string" === typeof item) resources[i] = { + url: item, + __isNative__: true + }; else { + if (item.type) { + item.ext = "." + item.type; + item.type = void 0; + } + item.url && (item.__isNative__ = true); + } + } + var images = []; + var audios = []; + cc.assetManager.loadAny(resources, null, (function(finish, total, item) { + item.content && (ImageFmts.includes(item.ext) ? images.push(item.content) : AudioFmts.includes(item.ext) && audios.push(item.content)); + progressCallback && progressCallback(finish, total, item); + }), (function(err, _native) { + var res = null; + if (!err) { + _native = Array.isArray(_native) ? _native : [ _native ]; + for (var i = 0; i < _native.length; i++) { + var item = _native[i]; + if (!(item instanceof cc.Asset)) { + var asset = item; + var url = resources[i].url; + images.includes(asset) ? factory.create(url, item, ".png", null, (function(err, image) { + asset = _native[i] = image; + })) : audios.includes(asset) && factory.create(url, item, ".mp3", null, (function(err, audio) { + asset = _native[i] = audio; + })); + cc.assetManager.assets.add(url, asset); + } + } + if (_native.length > 1) { + var map = Object.create(null); + _native.forEach((function(asset) { + map[asset._uuid] = asset; + })); + res = { + isCompleted: GetTrue, + _map: map + }; + } else res = _native[0]; + } + completeCallback && completeCallback(err, res); + })); + }, + getXMLHttpRequest: function getXMLHttpRequest() { + return new XMLHttpRequest(); + }, + _parseLoadResArgs: utilities.parseLoadResArgs, + getItem: function getItem(key) { + return cc.assetManager.assets.has(key) ? { + content: cc.assetManager.assets.get(key) + } : null; + }, + loadRes: function loadRes(url, type, progressCallback, completeCallback) { + var _this$_parseLoadResAr = this._parseLoadResArgs(type, progressCallback, completeCallback), type = _this$_parseLoadResAr.type, onProgress = _this$_parseLoadResAr.onProgress, onComplete = _this$_parseLoadResAr.onComplete; + var extname = cc.path.extname(url); + extname && (url = url.slice(0, -extname.length)); + cc.resources.load(url, type, onProgress, onComplete); + }, + loadResArray: function loadResArray(urls, type, progressCallback, completeCallback) { + var _this$_parseLoadResAr2 = this._parseLoadResArgs(type, progressCallback, completeCallback), type = _this$_parseLoadResAr2.type, onProgress = _this$_parseLoadResAr2.onProgress, onComplete = _this$_parseLoadResAr2.onComplete; + urls.forEach((function(url, i) { + var extname = cc.path.extname(url); + extname && (urls[i] = url.slice(0, -extname.length)); + })); + cc.resources.load(urls, type, onProgress, onComplete); + }, + loadResDir: function loadResDir(url, type, progressCallback, completeCallback) { + var _this$_parseLoadResAr3 = this._parseLoadResArgs(type, progressCallback, completeCallback), type = _this$_parseLoadResAr3.type, onProgress = _this$_parseLoadResAr3.onProgress, onComplete = _this$_parseLoadResAr3.onComplete; + cc.resources.loadDir(url, type, onProgress, (function(err, assets) { + var urls = []; + if (!err) { + var infos = cc.resources.getDirWithPath(url, type); + urls = infos.map((function(info) { + return info.path; + })); + } + onComplete && onComplete(err, assets, urls); + })); + }, + getRes: function getRes(url, type) { + return cc.assetManager.assets.has(url) ? cc.assetManager.assets.get(url) : cc.resources.get(url, type); + }, + getResCount: function getResCount() { + return cc.assetManager.assets.count; + }, + getDependsRecursively: function getDependsRecursively(owner) { + if (!owner) return []; + return dependUtil.getDepsRecursively("string" === typeof owner ? owner : owner._uuid).concat([ owner._uuid ]); + }, + get assetLoader() { + true; + cc.error("cc.loader.assetLoader was removed, assetLoader and md5Pipe were merged into cc.assetManager.transformPipeline"); + }, + get md5Pipe() { + return md5Pipe; + }, + get downloader() { + return cc.assetManager.downloader; + }, + get loader() { + return cc.assetManager.parser; + }, + addDownloadHandlers: function addDownloadHandlers(extMap) { + true; + cc.warn("`cc.loader.addDownloadHandlers` is deprecated, please use `cc.assetManager.downloader.register` instead"); + var handler = Object.create(null); + for (var type in extMap) { + var func = extMap[type]; + handler["." + type] = function(url, options, onComplete) { + func({ + url: url + }, onComplete); + }; + } + cc.assetManager.downloader.register(handler); + }, + addLoadHandlers: function addLoadHandlers(extMap) { + true; + cc.warn("`cc.loader.addLoadHandlers` is deprecated, please use `cc.assetManager.parser.register` instead"); + var handler = Object.create(null); + for (var type in extMap) { + var func = extMap[type]; + handler["." + type] = function(file, options, onComplete) { + func({ + content: file + }, onComplete); + }; + } + cc.assetManager.parser.register(handler); + }, + flowInDeps: function flowInDeps() { + true; + cc.error("cc.loader.flowInDeps was removed"); + }, + release: function release(asset) { + if (Array.isArray(asset)) for (var i = 0; i < asset.length; i++) { + var key = asset[i]; + "string" === typeof key && (key = cc.assetManager.assets.get(key)); + var isBuiltin = cc.assetManager.builtins._assets.find((function(assets) { + return assets.find((function(builtinAsset) { + return builtinAsset === key; + })); + })); + if (isBuiltin) continue; + cc.assetManager.releaseAsset(key); + } else if (asset) { + "string" === typeof asset && (asset = cc.assetManager.assets.get(asset)); + var _isBuiltin = cc.assetManager.builtins._assets.find((function(assets) { + return assets.find((function(builtinAsset) { + return builtinAsset === asset; + })); + })); + if (_isBuiltin) return; + cc.assetManager.releaseAsset(asset); + } + }, + releaseAsset: function releaseAsset(asset) { + cc.assetManager.releaseAsset(asset); + }, + releaseRes: function releaseRes(url, type) { + cc.resources.release(url, type); + }, + releaseResDir: function releaseResDir() { + true; + cc.error("cc.loader.releaseResDir was removed, please use cc.assetManager.releaseAsset instead"); + }, + releaseAll: function releaseAll() { + cc.assetManager.releaseAll(); + cc.assetManager.assets.clear(); + }, + removeItem: function removeItem(key) { + cc.assetManager.assets.remove(key); + }, + setAutoRelease: function setAutoRelease(asset, autoRelease) { + "object" === typeof asset && (asset = asset._uuid); + this._autoReleaseSetting[asset] = !!autoRelease; + }, + setAutoReleaseRecursively: function setAutoReleaseRecursively(asset, autoRelease) { + "object" === typeof asset && (asset = asset._uuid); + autoRelease = !!autoRelease; + this._autoReleaseSetting[asset] = autoRelease; + var depends = dependUtil.getDepsRecursively(asset); + for (var i = 0; i < depends.length; i++) { + var depend = depends[i]; + this._autoReleaseSetting[depend] = autoRelease; + } + }, + isAutoRelease: function isAutoRelease(asset) { + "object" === typeof asset && (asset = asset._uuid); + return !!this._autoReleaseSetting[asset]; + } + }; + downloader.loadSubpackage = function(name, completeCallback) { + cc.assetManager.loadBundle(name, null, completeCallback); + }; + var AssetLibrary = { + init: function init(options) { + options.importBase = options.libraryPath; + options.nativeBase = options.rawAssetsBase; + cc.assetManager.init(options); + if (options.rawAssets) { + var resources = new cc.AssetManager.Bundle(); + resources.init({ + name: cc.AssetManager.BuiltinBundleName.RESOURCES, + importBase: options.importBase, + nativeBase: options.nativeBase, + paths: options.rawAssets.assets, + uuids: Object.keys(options.rawAssets.assets) + }); + } + }, + loadAsset: function loadAsset(uuid, onComplete) { + cc.assetManager.loadAny(uuid, onComplete); + }, + getLibUrlNoExt: function getLibUrlNoExt() { + true; + cc.error("cc.AssetLibrary.getLibUrlNoExt was removed, if you want to transform url, please use cc.assetManager.utils.getUrlWithUuid instead"); + }, + queryAssetInfo: function queryAssetInfo() { + true; + cc.error("cc.AssetLibrary.queryAssetInfo was removed, only available in the editor by using cc.assetManager.editorExtend.queryAssetInfo"); + } + }; + cc.url = { + normalize: function normalize(url) { + cc.warnID(1400, "cc.url.normalize", "cc.assetManager.utils.normalize"); + return cc.assetManager.utils.normalize(url); + }, + raw: function raw(url) { + cc.warnID(1400, "cc.url.raw", "cc.resources.load"); + if (url.startsWith("resources/")) return cc.assetManager._transform({ + path: cc.path.changeExtname(url.substr(10)), + bundle: cc.AssetManager.BuiltinBundleName.RESOURCES, + __isNative__: true, + ext: cc.path.extname(url) + }); + return ""; + } + }; + var onceWarns = { + loader: true, + assetLibrary: true + }; + Object.defineProperties(cc, { + loader: { + get: function get() { + true; + if (onceWarns.loader) { + onceWarns.loader = false; + cc.log("cc.loader is deprecated, use cc.assetManager instead please. See https://docs.cocos.com/creator/manual/zh/release-notes/asset-manager-upgrade-guide.html"); + } + return loader; + } + }, + AssetLibrary: { + get: function get() { + true; + if (onceWarns.assetLibrary) { + onceWarns.assetLibrary = false; + cc.log("cc.AssetLibrary is deprecated, use cc.assetManager instead please. See https://docs.cocos.com/creator/manual/zh/release-notes/asset-manager-upgrade-guide.html"); + } + return AssetLibrary; + } + }, + LoadingItems: { + get: function get() { + cc.warnID(1400, "cc.LoadingItems", "cc.AssetManager.Task"); + return cc.AssetManager.Task; + } + }, + Pipeline: { + get: function get() { + cc.warnID(1400, "cc.Pipeline", "cc.AssetManager.Pipeline"); + return cc.AssetManager.Pipeline; + } + } + }); + js.obsolete(cc, "cc.RawAsset", "cc.Asset"); + js.obsolete(cc.Asset.prototype, "cc.Asset.url", "nativeUrl"); + Object.defineProperties(cc.macro, { + DOWNLOAD_MAX_CONCURRENT: { + get: function get() { + return cc.assetManager.downloader.maxConcurrency; + }, + set: function set(val) { + cc.assetManager.downloader.maxConcurrency = val; + } + } + }); + Object.assign(cc.director, { + _getSceneUuid: function _getSceneUuid(sceneName) { + cc.assetManager.main.getSceneInfo(sceneName); + } + }); + Object.defineProperties(cc.game, { + _sceneInfos: { + get: function get() { + var scenes = []; + cc.assetManager.main._config.scenes.forEach((function(val) { + scenes.push(val); + })); + return scenes; + } + } + }); + var parseParameters = utilities.parseParameters; + utilities.parseParameters = function(options, onProgress, onComplete) { + var result = parseParameters(options, onProgress, onComplete); + result.onProgress = result.onProgress || loader.onProgress; + return result; + }; + var autoRelease = releaseManager._autoRelease; + releaseManager._autoRelease = function() { + autoRelease.apply(this, arguments); + var releaseSettings = loader._autoReleaseSetting; + var keys = Object.keys(releaseSettings); + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (true === releaseSettings[key]) { + var asset = cc.assetManager.assets.get(key); + asset && releaseManager.tryRelease(asset); + } + } + }; + }), { + "../CCDirector": 22, + "../platform/js": 142, + "./depend-util": 33, + "./downloader": 40, + "./factory": 41, + "./helper": 44, + "./releaseManager": 51, + "./utilities": 56 + } ], + 35: [ (function(require, module, exports) { + "use strict"; + var helper = require("./helper"); + var MissingClass = false; + require("../platform/deserialize"); + function deserialize(json, options) { + var classFinder, missingClass; + false; + classFinder = cc._MissingScript.safeFindClass; + var pool = null; + var _require, deserializeForCompiled; + var deserializeForEditor; + true; + pool = cc.deserialize.Details.pool; + var tdInfo = pool.get(); + var asset; + try { + asset = cc.deserialize(json, tdInfo, { + classFinder: classFinder, + customEnv: options + }); + } catch (e) { + pool.put(tdInfo); + throw e; + } + false; + var uuidList = tdInfo.uuidList; + var objList = tdInfo.uuidObjList; + var propList = tdInfo.uuidPropList; + var depends = []; + for (var i = 0; i < uuidList.length; i++) { + var dependUuid = uuidList[i]; + depends[i] = { + uuid: helper.decodeUuid(dependUuid), + owner: objList[i], + prop: propList[i] + }; + } + asset.__depends__ = depends; + asset._native && (asset.__nativeDepend__ = true); + pool.put(tdInfo); + return asset; + } + module.exports = deserialize; + }), { + "../platform/deserialize": 137, + "../platform/deserialize-compiled": 136, + "../platform/deserialize-editor": void 0, + "./helper": 44 + } ], + 36: [ (function(require, module, exports) { + "use strict"; + var __audioSupport = cc.sys.__audioSupport; + var _require = require("./utilities"), parseParameters = _require.parseParameters; + function downloadDomAudio(url, options, onComplete) { + var _parseParameters = parseParameters(options, void 0, onComplete), options = _parseParameters.options, onComplete = _parseParameters.onComplete; + var dom = document.createElement("audio"); + dom.src = url; + var clearEvent = function clearEvent() { + clearTimeout(timer); + dom.removeEventListener("canplaythrough", success, false); + dom.removeEventListener("error", failure, false); + __audioSupport.USE_LOADER_EVENT && dom.removeEventListener(__audioSupport.USE_LOADER_EVENT, success, false); + }; + var timer = setTimeout((function() { + 0 === dom.readyState ? failure() : success(); + }), 8e3); + var success = function success() { + clearEvent(); + onComplete && onComplete(null, dom); + }; + var failure = function failure() { + clearEvent(); + var message = "load audio failure - " + url; + cc.log(message); + onComplete && onComplete(new Error(message)); + }; + dom.addEventListener("canplaythrough", success, false); + dom.addEventListener("error", failure, false); + __audioSupport.USE_LOADER_EVENT && dom.addEventListener(__audioSupport.USE_LOADER_EVENT, success, false); + return dom; + } + module.exports = downloadDomAudio; + }), { + "./utilities": 56 + } ], + 37: [ (function(require, module, exports) { + "use strict"; + var _require = require("./utilities"), parseParameters = _require.parseParameters; + function downloadDomImage(url, options, onComplete) { + var _parseParameters = parseParameters(options, void 0, onComplete), options = _parseParameters.options, onComplete = _parseParameters.onComplete; + var img = new Image(); + "file:" !== window.location.protocol && (img.crossOrigin = "anonymous"); + function loadCallback() { + img.removeEventListener("load", loadCallback); + img.removeEventListener("error", errorCallback); + onComplete && onComplete(null, img); + } + function errorCallback() { + img.removeEventListener("load", loadCallback); + img.removeEventListener("error", errorCallback); + onComplete && onComplete(new Error(cc.debug.getError(4930, url))); + } + img.addEventListener("load", loadCallback); + img.addEventListener("error", errorCallback); + img.src = url; + return img; + } + module.exports = downloadDomImage; + }), { + "./utilities": 56 + } ], + 38: [ (function(require, module, exports) { + "use strict"; + var _require = require("./utilities"), parseParameters = _require.parseParameters; + function downloadFile(url, options, onProgress, onComplete) { + var _parseParameters = parseParameters(options, onProgress, onComplete), options = _parseParameters.options, onProgress = _parseParameters.onProgress, onComplete = _parseParameters.onComplete; + var xhr = new XMLHttpRequest(), errInfo = "download failed: " + url + ", status: "; + xhr.open("GET", url, true); + void 0 !== options.responseType && (xhr.responseType = options.responseType); + void 0 !== options.withCredentials && (xhr.withCredentials = options.withCredentials); + void 0 !== options.mimeType && xhr.overrideMimeType && xhr.overrideMimeType(options.mimeType); + void 0 !== options.timeout && (xhr.timeout = options.timeout); + if (options.header) for (var header in options.header) xhr.setRequestHeader(header, options.header[header]); + xhr.onload = function() { + 200 === xhr.status || 0 === xhr.status ? onComplete && onComplete(null, xhr.response) : onComplete && onComplete(new Error(errInfo + xhr.status + "(no response)")); + }; + onProgress && (xhr.onprogress = function(e) { + e.lengthComputable && onProgress(e.loaded, e.total); + }); + xhr.onerror = function() { + onComplete && onComplete(new Error(errInfo + xhr.status + "(error)")); + }; + xhr.ontimeout = function() { + onComplete && onComplete(new Error(errInfo + xhr.status + "(time out)")); + }; + xhr.onabort = function() { + onComplete && onComplete(new Error(errInfo + xhr.status + "(abort)")); + }; + xhr.send(null); + return xhr; + } + module.exports = downloadFile; + }), { + "./utilities": 56 + } ], + 39: [ (function(require, module, exports) { + "use strict"; + var _require = require("./utilities"), parseParameters = _require.parseParameters; + var downloaded = {}; + function downloadScript(url, options, onComplete) { + var _parseParameters = parseParameters(options, void 0, onComplete), options = _parseParameters.options, onComplete = _parseParameters.onComplete; + if (downloaded[url]) return onComplete && onComplete(null); + var d = document, s = document.createElement("script"); + "file:" !== window.location.protocol && (s.crossOrigin = "anonymous"); + s.async = options.async; + s.src = url; + function loadHandler() { + s.parentNode.removeChild(s); + s.removeEventListener("load", loadHandler, false); + s.removeEventListener("error", errorHandler, false); + downloaded[url] = true; + onComplete && onComplete(null); + } + function errorHandler() { + s.parentNode.removeChild(s); + s.removeEventListener("load", loadHandler, false); + s.removeEventListener("error", errorHandler, false); + onComplete && onComplete(new Error(cc.debug.getError(4928, url))); + } + s.addEventListener("load", loadHandler, false); + s.addEventListener("error", errorHandler, false); + d.body.appendChild(s); + } + module.exports = downloadScript; + }), { + "./utilities": 56 + } ], + 40: [ (function(require, module, exports) { + "use strict"; + var js = require("../platform/js"); + var debug = require("../CCDebug"); + var _require = require("./font-loader"), loadFont = _require.loadFont; + var callInNextTick = require("../platform/utils").callInNextTick; + var downloadDomImage = require("./download-dom-image"); + var downloadDomAudio = require("./download-dom-audio"); + var downloadFile = require("./download-file"); + var downloadScript = require("./download-script.js"); + var Cache = require("./cache"); + var _require2 = require("./shared"), files = _require2.files; + var _require3 = require("../platform/CCSys"), __audioSupport = _require3.__audioSupport, capabilities = _require3.capabilities; + var _require4 = require("./utilities"), urlAppendTimestamp = _require4.urlAppendTimestamp, retry = _require4.retry; + var REGEX = /^(?:\w+:\/\/|\.+\/).+/; + var formatSupport = __audioSupport.format || []; + var unsupported = function unsupported(url, options, onComplete) { + onComplete(new Error(debug.getError(4927))); + }; + var downloadAudio = function downloadAudio(url, options, onComplete) { + options.audioLoadMode !== cc.AudioClip.LoadMode.DOM_AUDIO ? downloadArrayBuffer(url, options, onComplete) : downloadDomAudio(url, options, onComplete); + }; + var downloadAudio = 0 === formatSupport.length ? unsupported : __audioSupport.WEB_AUDIO ? downloadAudio : downloadDomAudio; + var downloadImage = function downloadImage(url, options, onComplete) { + var func = capabilities.imageBitmap && cc.macro.ALLOW_IMAGE_BITMAP ? downloadBlob : downloadDomImage; + func.apply(this, arguments); + }; + var downloadBlob = function downloadBlob(url, options, onComplete) { + options.responseType = "blob"; + downloadFile(url, options, options.onFileProgress, onComplete); + }; + var downloadJson = function downloadJson(url, options, onComplete) { + options.responseType = "json"; + downloadFile(url, options, options.onFileProgress, (function(err, data) { + if (!err && "string" === typeof data) try { + data = JSON.parse(data); + } catch (e) { + err = e; + } + onComplete && onComplete(err, data); + })); + }; + var downloadArrayBuffer = function downloadArrayBuffer(url, options, onComplete) { + options.responseType = "arraybuffer"; + downloadFile(url, options, options.onFileProgress, onComplete); + }; + var downloadText = function downloadText(url, options, onComplete) { + options.responseType = "text"; + downloadFile(url, options, options.onFileProgress, onComplete); + }; + var downloadVideo = function downloadVideo(url, options, onComplete) { + onComplete(null, url); + }; + var downloadBundle = function downloadBundle(nameOrUrl, options, onComplete) { + var bundleName = cc.path.basename(nameOrUrl); + var url = nameOrUrl; + REGEX.test(url) || (url = "assets/" + bundleName); + var version = options.version || downloader.bundleVers[bundleName]; + var count = 0; + var config = url + "/config." + (version ? version + "." : "") + "json"; + var out = null, error = null; + downloadJson(config, options, (function(err, response) { + err && (error = err); + out = response; + out && (out.base = url + "/"); + count++; + 2 === count && onComplete(error, out); + })); + var js = url + "/index." + (version ? version + "." : "") + "js"; + downloadScript(js, options, (function(err) { + err && (error = err); + count++; + 2 === count && onComplete(error, out); + })); + }; + var _downloading = new Cache(); + var _queue = []; + var _queueDirty = false; + var _totalNum = 0; + var _totalNumThisPeriod = 0; + var _lastDate = -1; + var _checkNextPeriod = false; + var updateTime = function updateTime() { + var now = Date.now(); + var interval = cc.director._deltaTime > downloader._maxInterval ? downloader._maxInterval : cc.director._deltaTime; + if (now - _lastDate > 1e3 * interval) { + _totalNumThisPeriod = 0; + _lastDate = now; + } + }; + var handleQueue = function handleQueue(maxConcurrency, maxRequestsPerFrame) { + _checkNextPeriod = false; + updateTime(); + while (_queue.length > 0 && _totalNum < maxConcurrency && _totalNumThisPeriod < maxRequestsPerFrame) { + if (_queueDirty) { + _queue.sort((function(a, b) { + return a.priority - b.priority; + })); + _queueDirty = false; + } + var nextOne = _queue.pop(); + if (!nextOne) break; + _totalNum++; + _totalNumThisPeriod++; + nextOne.invoke(); + } + if (_queue.length > 0 && _totalNum < maxConcurrency) { + callInNextTick(handleQueue, maxConcurrency, maxRequestsPerFrame); + _checkNextPeriod = true; + } + }; + var downloader = { + _remoteServerAddress: "", + _maxInterval: 1 / 30, + get remoteServerAddress() { + return this._remoteServerAddress; + }, + maxConcurrency: 6, + maxRequestsPerFrame: 6, + maxRetryCount: 3, + appendTimeStamp: false, + limited: true, + retryInterval: 2e3, + bundleVers: null, + downloadDomImage: downloadDomImage, + downloadDomAudio: downloadDomAudio, + downloadFile: downloadFile, + downloadScript: downloadScript, + init: function init(bundleVers, remoteServerAddress) { + _downloading.clear(); + _queue.length = 0; + this._remoteServerAddress = remoteServerAddress || ""; + this.bundleVers = bundleVers || Object.create(null); + }, + register: function register(type, handler) { + "object" === typeof type ? js.mixin(downloaders, type) : downloaders[type] = handler; + }, + download: function download(id, url, type, options, onComplete) { + var func = downloaders[type] || downloaders["default"]; + var self = this; + var file, downloadCallbacks; + if (file = files.get(id)) onComplete(null, file); else if (downloadCallbacks = _downloading.get(id)) { + downloadCallbacks.push(onComplete); + for (var i = 0, l = _queue.length; i < l; i++) { + var item = _queue[i]; + if (item.id === id) { + var priority = options.priority || 0; + if (item.priority < priority) { + item.priority = priority; + _queueDirty = true; + } + return; + } + } + } else { + var process = function process(index, callback) { + 0 === index && _downloading.add(id, [ onComplete ]); + if (!self.limited) return func(urlAppendTimestamp(url), options, callback); + updateTime(); + function invoke() { + func(urlAppendTimestamp(url), options, (function() { + _totalNum--; + if (!_checkNextPeriod && _queue.length > 0) { + callInNextTick(handleQueue, maxConcurrency, maxRequestsPerFrame); + _checkNextPeriod = true; + } + callback.apply(this, arguments); + })); + } + if (_totalNum < maxConcurrency && _totalNumThisPeriod < maxRequestsPerFrame) { + invoke(); + _totalNum++; + _totalNumThisPeriod++; + } else { + _queue.push({ + id: id, + priority: options.priority || 0, + invoke: invoke + }); + _queueDirty = true; + if (!_checkNextPeriod && _totalNum < maxConcurrency) { + callInNextTick(handleQueue, maxConcurrency, maxRequestsPerFrame); + _checkNextPeriod = true; + } + } + }; + var finale = function finale(err, result) { + err || files.add(id, result); + var callbacks = _downloading.remove(id); + for (var _i = 0, _l = callbacks.length; _i < _l; _i++) callbacks[_i](err, result); + }; + var maxRetryCount = "undefined" !== typeof options.maxRetryCount ? options.maxRetryCount : this.maxRetryCount; + var maxConcurrency = "undefined" !== typeof options.maxConcurrency ? options.maxConcurrency : this.maxConcurrency; + var maxRequestsPerFrame = "undefined" !== typeof options.maxRequestsPerFrame ? options.maxRequestsPerFrame : this.maxRequestsPerFrame; + retry(process, maxRetryCount, this.retryInterval, finale); + } + } + }; + var downloaders = { + ".png": downloadImage, + ".jpg": downloadImage, + ".bmp": downloadImage, + ".jpeg": downloadImage, + ".gif": downloadImage, + ".ico": downloadImage, + ".tiff": downloadImage, + ".webp": downloadImage, + ".image": downloadImage, + ".pvr": downloadArrayBuffer, + ".pkm": downloadArrayBuffer, + ".mp3": downloadAudio, + ".ogg": downloadAudio, + ".wav": downloadAudio, + ".m4a": downloadAudio, + ".txt": downloadText, + ".xml": downloadText, + ".vsh": downloadText, + ".fsh": downloadText, + ".atlas": downloadText, + ".tmx": downloadText, + ".tsx": downloadText, + ".json": downloadJson, + ".ExportJson": downloadJson, + ".plist": downloadText, + ".fnt": downloadText, + ".font": loadFont, + ".eot": loadFont, + ".ttf": loadFont, + ".woff": loadFont, + ".svg": loadFont, + ".ttc": loadFont, + ".mp4": downloadVideo, + ".avi": downloadVideo, + ".mov": downloadVideo, + ".mpg": downloadVideo, + ".mpeg": downloadVideo, + ".rm": downloadVideo, + ".rmvb": downloadVideo, + ".binary": downloadArrayBuffer, + ".bin": downloadArrayBuffer, + ".dbbin": downloadArrayBuffer, + ".skel": downloadArrayBuffer, + ".js": downloadScript, + bundle: downloadBundle, + default: downloadText + }; + downloader._downloaders = downloaders; + module.exports = downloader; + }), { + "../CCDebug": 21, + "../platform/CCSys": 130, + "../platform/js": 142, + "../platform/utils": 145, + "./cache": 31, + "./download-dom-audio": 36, + "./download-dom-image": 37, + "./download-file": 38, + "./download-script.js": 39, + "./font-loader": 43, + "./shared": 53, + "./utilities": 56 + } ], + 41: [ (function(require, module, exports) { + "use strict"; + var Bundle = require("./bundle"); + var Cache = require("./cache"); + var _require = require("./shared"), assets = _require.assets, bundles = _require.bundles; + var _creating = new Cache(); + function createTexture(id, data, options, onComplete) { + var out = null, err = null; + try { + out = new cc.Texture2D(); + out._nativeUrl = id; + out._nativeAsset = data; + } catch (e) { + err = e; + } + onComplete && onComplete(err, out); + } + function createAudioClip(id, data, options, onComplete) { + var out = new cc.AudioClip(); + out._nativeUrl = id; + out._nativeAsset = data; + out.duration = data.duration; + onComplete && onComplete(null, out); + } + function createJsonAsset(id, data, options, onComplete) { + var out = new cc.JsonAsset(); + out.json = data; + onComplete && onComplete(null, out); + } + function createTextAsset(id, data, options, onComplete) { + var out = new cc.TextAsset(); + out.text = data; + onComplete && onComplete(null, out); + } + function createFont(id, data, options, onComplete) { + var out = new cc.TTFFont(); + out._nativeUrl = id; + out._nativeAsset = data; + onComplete && onComplete(null, out); + } + function createBufferAsset(id, data, options, onComplete) { + var out = new cc.BufferAsset(); + out._nativeUrl = id; + out._nativeAsset = data; + onComplete && onComplete(null, out); + } + function createAsset(id, data, options, onComplete) { + var out = new cc.Asset(); + out._nativeUrl = id; + out._nativeAsset = data; + onComplete && onComplete(null, out); + } + function createBundle(id, data, options, onComplete) { + var bundle = bundles.get(data.name); + if (!bundle) { + bundle = new Bundle(); + data.base = data.base || id + "/"; + bundle.init(data); + } + onComplete && onComplete(null, bundle); + } + var factory = { + register: function register(type, handler) { + "object" === typeof type ? cc.js.mixin(producers, type) : producers[type] = handler; + }, + create: function create(id, data, type, options, onComplete) { + var func = producers[type] || producers["default"]; + var asset, creating; + if (asset = assets.get(id)) onComplete(null, asset); else if (creating = _creating.get(id)) creating.push(onComplete); else { + _creating.add(id, [ onComplete ]); + func(id, data, options, (function(err, data) { + if (!err && data instanceof cc.Asset) { + data._uuid = id; + assets.add(id, data); + } + var callbacks = _creating.remove(id); + for (var i = 0, l = callbacks.length; i < l; i++) callbacks[i](err, data); + })); + } + } + }; + var producers = { + ".png": createTexture, + ".jpg": createTexture, + ".bmp": createTexture, + ".jpeg": createTexture, + ".gif": createTexture, + ".ico": createTexture, + ".tiff": createTexture, + ".webp": createTexture, + ".image": createTexture, + ".pvr": createTexture, + ".pkm": createTexture, + ".mp3": createAudioClip, + ".ogg": createAudioClip, + ".wav": createAudioClip, + ".m4a": createAudioClip, + ".txt": createTextAsset, + ".xml": createTextAsset, + ".vsh": createTextAsset, + ".fsh": createTextAsset, + ".atlas": createTextAsset, + ".tmx": createTextAsset, + ".tsx": createTextAsset, + ".fnt": createTextAsset, + ".json": createJsonAsset, + ".ExportJson": createJsonAsset, + ".font": createFont, + ".eot": createFont, + ".ttf": createFont, + ".woff": createFont, + ".svg": createFont, + ".ttc": createFont, + ".binary": createBufferAsset, + ".bin": createBufferAsset, + ".dbbin": createBufferAsset, + ".skel": createBufferAsset, + bundle: createBundle, + default: createAsset + }; + module.exports = factory; + }), { + "./bundle": 30, + "./cache": 31, + "./shared": 53 + } ], + 42: [ (function(require, module, exports) { + "use strict"; + var packManager = require("./pack-manager"); + var Task = require("./task"); + var _require = require("./utilities"), getDepends = _require.getDepends, clear = _require.clear, forEach = _require.forEach; + var _require2 = require("./shared"), assets = _require2.assets, fetchPipeline = _require2.fetchPipeline; + function fetch(task, done) { + var firstTask = false; + if (!task.progress) { + task.progress = { + finish: 0, + total: task.input.length, + canInvoke: true + }; + firstTask = true; + } + var options = task.options, depends = [], progress = task.progress, total = progress.total; + options.__exclude__ = options.__exclude__ || Object.create(null); + task.output = []; + forEach(task.input, (function(item, cb) { + if (!item.isNative && assets.has(item.uuid)) { + var asset = assets.get(item.uuid); + asset.addRef(); + handle(item, task, asset, null, asset.__asyncLoadAssets__, depends, total, done); + return cb(); + } + packManager.load(item, task.options, (function(err, data) { + if (err) { + if (!task.isFinish) if (!cc.assetManager.force || firstTask) { + cc.error(err.message, err.stack); + progress.canInvoke = false; + done(err); + } else handle(item, task, null, null, false, depends, total, done); + } else task.isFinish || handle(item, task, null, data, !item.isNative, depends, total, done); + cb(); + })); + }), (function() { + if (task.isFinish) { + clear(task, true); + return task.dispatch("error"); + } + if (depends.length > 0) { + var subTask = Task.create({ + name: task.name + " dependencies", + input: depends, + progress: progress, + options: options, + onProgress: task.onProgress, + onError: Task.prototype.recycle, + onComplete: function onComplete(err) { + if (!err) { + task.output.push.apply(task.output, this.output); + subTask.recycle(); + } + firstTask && decreaseRef(task); + done(err); + } + }); + fetchPipeline.async(subTask); + return; + } + firstTask && decreaseRef(task); + done(); + })); + } + function decreaseRef(task) { + var output = task.output; + for (var i = 0, l = output.length; i < l; i++) output[i].content && output[i].content.decRef(false); + } + function handle(item, task, content, file, loadDepends, depends, last, done) { + var exclude = task.options.__exclude__; + var progress = task.progress; + item.content = content; + item.file = file; + task.output.push(item); + if (loadDepends) { + exclude[item.uuid] = true; + getDepends(item.uuid, file || content, exclude, depends, true, false, item.config); + progress.total = last + depends.length; + } + progress.canInvoke && task.dispatch("progress", ++progress.finish, progress.total, item); + } + module.exports = fetch; + }), { + "./pack-manager": 47, + "./shared": 53, + "./task": 54, + "./utilities": 56 + } ], + 43: [ (function(require, module, exports) { + "use strict"; + var textUtils = require("../utils/text-utils"); + var _canvasContext = null; + var _testString = "BES bswy:->@123\u4e01\u3041\u1101"; + var _fontFaces = Object.create(null); + var _intervalId = -1; + var _loadingFonts = []; + var _timeout = 3e3; + var useNativeCheck = (function() { + var nativeCheck = void 0; + return function() { + if (void 0 === nativeCheck) if (!window.FontFace) nativeCheck = false; else { + var match = /Gecko.*Firefox\/(\d+)/.exec(window.navigator.userAgent); + var safari10Match = /OS X.*Version\/10\..*Safari/.exec(window.navigator.userAgent) && /Apple/.exec(window.navigator.vendor); + nativeCheck = match ? parseInt(match[1], 10) > 42 : !safari10Match; + } + return nativeCheck; + }; + })(); + function _checkFontLoaded() { + var allFontsLoaded = true; + var now = Date.now(); + for (var i = _loadingFonts.length - 1; i >= 0; i--) { + var fontLoadHandle = _loadingFonts[i]; + var fontFamily = fontLoadHandle.fontFamilyName; + if (now - fontLoadHandle.startTime > _timeout) { + cc.warnID(4933, fontFamily); + fontLoadHandle.onComplete(null, fontFamily); + _loadingFonts.splice(i, 1); + continue; + } + var oldWidth = fontLoadHandle.refWidth; + var fontDesc = "40px " + fontFamily; + _canvasContext.font = fontDesc; + var newWidth = textUtils.safeMeasureText(_canvasContext, _testString, fontDesc); + if (oldWidth !== newWidth) { + _loadingFonts.splice(i, 1); + fontLoadHandle.onComplete(null, fontFamily); + } else allFontsLoaded = false; + } + if (allFontsLoaded) { + clearInterval(_intervalId); + _intervalId = -1; + } + } + function nativeCheckFontLoaded(start, font, callback) { + var loader = new Promise(function(resolve, reject) { + var check = function check() { + var now = Date.now(); + now - start >= _timeout ? reject() : document.fonts.load("40px " + font).then((function(fonts) { + fonts.length >= 1 ? resolve() : setTimeout(check, 100); + }), (function() { + reject(); + })); + }; + check(); + }); + var timeoutId = null, timer = new Promise(function(resolve, reject) { + timeoutId = setTimeout(reject, _timeout); + }); + Promise.race([ timer, loader ]).then((function() { + if (timeoutId) { + clearTimeout(timeoutId); + timeoutId = null; + } + callback(null, font); + }), (function() { + cc.warnID(4933, font); + callback(null, font); + })); + } + var fontLoader = { + loadFont: function loadFont(url, options, onComplete) { + var fontFamilyName = fontLoader._getFontFamily(url); + if (_fontFaces[fontFamilyName]) return onComplete(null, fontFamilyName); + if (!_canvasContext) { + var labelCanvas = document.createElement("canvas"); + labelCanvas.width = 100; + labelCanvas.height = 100; + _canvasContext = labelCanvas.getContext("2d"); + } + var fontDesc = "40px " + fontFamilyName; + _canvasContext.font = fontDesc; + var refWidth = textUtils.safeMeasureText(_canvasContext, _testString, fontDesc); + var fontStyle = document.createElement("style"); + fontStyle.type = "text/css"; + var fontStr = ""; + isNaN(fontFamilyName - 0) ? fontStr += "@font-face { font-family:" + fontFamilyName + "; src:" : fontStr += "@font-face { font-family:'" + fontFamilyName + "'; src:"; + fontStr += "url('" + url + "');"; + fontStyle.textContent = fontStr + "}"; + document.body.appendChild(fontStyle); + var preloadDiv = document.createElement("div"); + var divStyle = preloadDiv.style; + divStyle.fontFamily = fontFamilyName; + preloadDiv.innerHTML = "."; + divStyle.position = "absolute"; + divStyle.left = "-100px"; + divStyle.top = "-100px"; + document.body.appendChild(preloadDiv); + if (useNativeCheck()) nativeCheckFontLoaded(Date.now(), fontFamilyName, onComplete); else { + var fontLoadHandle = { + fontFamilyName: fontFamilyName, + refWidth: refWidth, + onComplete: onComplete, + startTime: Date.now() + }; + _loadingFonts.push(fontLoadHandle); + -1 === _intervalId && (_intervalId = setInterval(_checkFontLoaded, 100)); + } + _fontFaces[fontFamilyName] = fontStyle; + }, + _getFontFamily: function _getFontFamily(fontHandle) { + var ttfIndex = fontHandle.lastIndexOf(".ttf"); + if (-1 === ttfIndex) return fontHandle; + var slashPos = fontHandle.lastIndexOf("/"); + var fontFamilyName; + fontFamilyName = -1 === slashPos ? fontHandle.substring(0, ttfIndex) + "_LABEL" : fontHandle.substring(slashPos + 1, ttfIndex) + "_LABEL"; + -1 !== fontFamilyName.indexOf(" ") && (fontFamilyName = '"' + fontFamilyName + '"'); + return fontFamilyName; + } + }; + module.exports = fontLoader; + }), { + "../utils/text-utils": 212 + } ], + 44: [ (function(require, module, exports) { + "use strict"; + var _require = require("./shared"), bundles = _require.bundles; + var helper = { + decodeUuid: require("../utils/decode-uuid"), + getUuidFromURL: (function() { + var _uuidRegex = /.*[/\\][0-9a-fA-F]{2}[/\\]([0-9a-fA-F-]{8,})/; + return function(url) { + var matches = url.match(_uuidRegex); + if (matches) return matches[1]; + return ""; + }; + })(), + getUrlWithUuid: function getUrlWithUuid(uuid, options) { + options = options || Object.create(null); + options.__isNative__ = options.isNative; + options.ext = options.nativeExt; + var bundle = bundles.find((function(bundle) { + return bundle.getAssetInfo(uuid); + })); + bundle && (options.bundle = bundle.name); + return cc.assetManager._transform(uuid, options); + }, + isScene: function isScene(asset) { + return asset && (asset.constructor === cc.SceneAsset || asset instanceof cc.Scene); + }, + normalize: function normalize(url) { + url && (46 === url.charCodeAt(0) && 47 === url.charCodeAt(1) ? url = url.slice(2) : 47 === url.charCodeAt(0) && (url = url.slice(1))); + return url; + } + }; + module.exports = helper; + }), { + "../utils/decode-uuid": 200, + "./shared": 53 + } ], + 45: [ (function(require, module, exports) { + "use strict"; + require("./deprecated"); + require("./CCAssetManager"); + }), { + "./CCAssetManager": 28, + "./deprecated": 34 + } ], + 46: [ (function(require, module, exports) { + "use strict"; + var packManager = require("./pack-manager"); + var Pipeline = require("./pipeline"); + var parser = require("./parser"); + var _require = require("./utilities"), getDepends = _require.getDepends, cache = _require.cache, gatherAsset = _require.gatherAsset, setProperties = _require.setProperties, forEach = _require.forEach, clear = _require.clear, checkCircleReference = _require.checkCircleReference; + var _require2 = require("./shared"), assets = _require2.assets, files = _require2.files, parsed = _require2.parsed, pipeline = _require2.pipeline; + var Task = require("./task"); + function load(task, done) { + var firstTask = false; + if (!task.progress) { + task.progress = { + finish: 0, + total: task.input.length, + canInvoke: true + }; + firstTask = true; + } + var options = task.options, progress = task.progress; + options.__exclude__ = options.__exclude__ || Object.create(null); + task.output = []; + forEach(task.input, (function(item, cb) { + var subTask = Task.create({ + input: item, + onProgress: task.onProgress, + options: options, + progress: progress, + onComplete: function onComplete(err, item) { + if (err && !task.isFinish) if (!cc.assetManager.force || firstTask) { + true; + cc.error(err.message, err.stack); + progress.canInvoke = false; + done(err); + } else progress.canInvoke && task.dispatch("progress", ++progress.finish, progress.total, item); + task.output.push(item); + subTask.recycle(); + cb(); + } + }); + loadOneAssetPipeline.async(subTask); + }), (function() { + options.__exclude__ = null; + if (task.isFinish) { + clear(task, true); + return task.dispatch("error"); + } + gatherAsset(task); + clear(task, true); + done(); + })); + } + var loadOneAssetPipeline = new Pipeline("loadOneAsset", [ function fetch(task, done) { + var item = task.output = task.input; + var options = item.options, isNative = item.isNative, uuid = item.uuid, file = item.file; + var reload = options.reload; + if (file || !reload && !isNative && assets.has(uuid)) return done(); + packManager.load(item, task.options, (function(err, data) { + item.file = data; + done(err); + })); + }, function parse(task, done) { + var item = task.output = task.input, progress = task.progress, exclude = task.options.__exclude__; + var id = item.id, file = item.file, options = item.options; + if (item.isNative) parser.parse(id, file, item.ext, options, (function(err, asset) { + if (err) return done(err); + item.content = asset; + progress.canInvoke && task.dispatch("progress", ++progress.finish, progress.total, item); + files.remove(id); + parsed.remove(id); + done(); + })); else { + var uuid = item.uuid; + if (uuid in exclude) { + var _exclude$uuid = exclude[uuid], finish = _exclude$uuid.finish, content = _exclude$uuid.content, err = _exclude$uuid.err, callbacks = _exclude$uuid.callbacks; + progress.canInvoke && task.dispatch("progress", ++progress.finish, progress.total, item); + if (finish || checkCircleReference(uuid, uuid, exclude)) { + content && content.addRef && content.addRef(); + item.content = content; + done(err); + } else callbacks.push({ + done: done, + item: item + }); + } else if (!options.reload && assets.has(uuid)) { + var asset = assets.get(uuid); + if (options.__asyncLoadAssets__ || !asset.__asyncLoadAssets__) { + item.content = asset.addRef(); + progress.canInvoke && task.dispatch("progress", ++progress.finish, progress.total, item); + done(); + } else loadDepends(task, asset, done, false); + } else parser.parse(id, file, "import", options, (function(err, asset) { + if (err) return done(err); + asset._uuid = uuid; + loadDepends(task, asset, done, true); + })); + } + } ]); + function loadDepends(task, asset, done, init) { + var item = task.input, progress = task.progress; + var uuid = item.uuid, id = item.id, options = item.options, config = item.config; + var __asyncLoadAssets__ = options.__asyncLoadAssets__, cacheAsset = options.cacheAsset; + var depends = []; + asset.addRef && asset.addRef(); + getDepends(uuid, asset, Object.create(null), depends, false, __asyncLoadAssets__, config); + progress.canInvoke && task.dispatch("progress", ++progress.finish, progress.total += depends.length, item); + var repeatItem = task.options.__exclude__[uuid] = { + content: asset, + finish: false, + callbacks: [ { + done: done, + item: item + } ] + }; + var subTask = Task.create({ + input: depends, + options: task.options, + onProgress: task.onProgress, + onError: Task.prototype.recycle, + progress: progress, + onComplete: function onComplete(err) { + asset.decRef && asset.decRef(false); + asset.__asyncLoadAssets__ = __asyncLoadAssets__; + repeatItem.finish = true; + repeatItem.err = err; + if (!err) { + var assets = Array.isArray(subTask.output) ? subTask.output : [ subTask.output ]; + var map = Object.create(null); + for (var _i = 0, _l = assets.length; _i < _l; _i++) { + var dependAsset = assets[_i]; + dependAsset && (map[dependAsset instanceof cc.Asset ? dependAsset._uuid + "@import" : uuid + "@native"] = dependAsset); + } + if (init) { + var missingAsset = setProperties(uuid, asset, map); + if (!missingAsset && !asset.__onLoadInvoked__) try { + asset.onLoad && asset.onLoad(); + asset.__onLoadInvoked__ = true; + } catch (e) { + cc.error(e.message, e.stack); + } + files.remove(id); + parsed.remove(id); + cache(uuid, asset, void 0 !== cacheAsset ? cacheAsset : cc.assetManager.cacheAsset); + } else if (asset.__nativeDepend__ && !asset._nativeAsset) { + var missingAsset = setProperties(uuid, asset, map); + if (!missingAsset && !asset.__onLoadInvoked__) try { + asset.onLoad && asset.onLoad(); + asset.__onLoadInvoked__ = true; + } catch (e) { + cc.error(e.message, e.stack); + } + } + subTask.recycle(); + } + var callbacks = repeatItem.callbacks; + for (var i = 0, l = callbacks.length; i < l; i++) { + var cb = callbacks[i]; + asset.addRef && asset.addRef(); + cb.item.content = asset; + cb.done(err); + } + callbacks.length = 0; + } + }); + pipeline.async(subTask); + } + module.exports = load; + }), { + "./pack-manager": 47, + "./parser": 48, + "./pipeline": 49, + "./shared": 53, + "./task": 54, + "./utilities": 56 + } ], + 47: [ (function(require, module, exports) { + "use strict"; + var _deserializeCompiled = require("../platform/deserialize-compiled"); + var downloader = require("./downloader"); + var Cache = require("./cache"); + var js = require("../platform/js"); + var _require = require("./shared"), files = _require.files; + var _loading = new Cache(); + function isLoading(val) { + return _loading.has(val.uuid); + } + var packManager = { + unpackJson: function unpackJson(pack, json, options, onComplete) { + var out = js.createMap(true), err = null; + if (Array.isArray(json)) { + json = (0, _deserializeCompiled.unpackJSONs)(json); + json.length !== pack.length && cc.errorID(4915); + for (var i = 0; i < pack.length; i++) { + var key = pack[i] + "@import"; + out[key] = json[i]; + } + } else { + var textureType = js._getClassId(cc.Texture2D); + if (json.type === textureType) { + if (json.data) { + var datas = json.data.split("|"); + datas.length !== pack.length && cc.errorID(4915); + for (var _i = 0; _i < pack.length; _i++) out[pack[_i] + "@import"] = (0, _deserializeCompiled.packCustomObjData)(textureType, datas[_i], true); + } + } else { + err = new Error("unmatched type pack!"); + out = null; + } + } + onComplete && onComplete(err, out); + }, + init: function init() { + _loading.clear(); + }, + register: function register(type, handler) { + "object" === typeof type ? js.mixin(unpackers, type) : unpackers[type] = handler; + }, + unpack: function unpack(pack, data, type, options, onComplete) { + if (!data) { + onComplete && onComplete(new Error("package data is wrong!")); + return; + } + var unpacker = unpackers[type]; + unpacker(pack, data, options, onComplete); + }, + load: function load(item, options, onComplete) { + if (item.isNative || !item.info || !item.info.packs) return downloader.download(item.id, item.url, item.ext, item.options, onComplete); + if (files.has(item.id)) return onComplete(null, files.get(item.id)); + var packs = item.info.packs; + var pack = packs.find(isLoading); + if (pack) return _loading.get(pack.uuid).push({ + onComplete: onComplete, + id: item.id + }); + pack = packs[0]; + _loading.add(pack.uuid, [ { + onComplete: onComplete, + id: item.id + } ]); + var url = cc.assetManager._transform(pack.uuid, { + ext: pack.ext, + bundle: item.config.name + }); + downloader.download(pack.uuid, url, pack.ext, item.options, (function(err, data) { + files.remove(pack.uuid); + err && cc.error(err.message, err.stack); + packManager.unpack(pack.packs, data, pack.ext, item.options, (function(err, result) { + if (!err) for (var id in result) files.add(id, result[id]); + var callbacks = _loading.remove(pack.uuid); + for (var i = 0, l = callbacks.length; i < l; i++) { + var cb = callbacks[i]; + if (err) { + cb.onComplete(err); + continue; + } + var data = result[cb.id]; + data ? cb.onComplete(null, data) : cb.onComplete(new Error("can not retrieve data from package")); + } + })); + })); + } + }; + var unpackers = { + ".json": packManager.unpackJson + }; + module.exports = packManager; + }), { + "../platform/deserialize-compiled": 136, + "../platform/js": 142, + "./cache": 31, + "./downloader": 40, + "./shared": 53 + } ], + 48: [ (function(require, module, exports) { + "use strict"; + var plistParser = require("../platform/CCSAXParser").plistParser; + var js = require("../platform/js"); + var deserialize = require("./deserialize"); + var Cache = require("./cache"); + var _require = require("./helper"), isScene = _require.isScene; + var _require2 = require("./shared"), parsed = _require2.parsed, files = _require2.files; + var _require3 = require("../platform/CCSys"), __audioSupport = _require3.__audioSupport, capabilities = _require3.capabilities; + var _parsing = new Cache(); + var parser = { + parseImage: function parseImage(file, options, onComplete) { + if (capabilities.imageBitmap && file instanceof Blob) { + var imageOptions = {}; + imageOptions.imageOrientation = options.__flipY__ ? "flipY" : "none"; + imageOptions.premultiplyAlpha = options.__premultiplyAlpha__ ? "premultiply" : "none"; + createImageBitmap(file, imageOptions).then((function(result) { + result.flipY = !!options.__flipY__; + result.premultiplyAlpha = !!options.__premultiplyAlpha__; + onComplete && onComplete(null, result); + }), (function(err) { + onComplete && onComplete(err, null); + })); + } else onComplete && onComplete(null, file); + }, + parseAudio: function parseAudio(file, options, onComplete) { + file instanceof ArrayBuffer ? __audioSupport.context.decodeAudioData(file, (function(buffer) { + onComplete && onComplete(null, buffer); + }), (function(e) { + onComplete && onComplete(e, null); + })) : onComplete && onComplete(null, file); + }, + parsePVRTex: (function() { + var PVR_HEADER_LENGTH = 13; + var PVR_MAGIC = 55727696; + var PVR_HEADER_MAGIC = 0; + var PVR_HEADER_FORMAT = 2; + var PVR_HEADER_HEIGHT = 6; + var PVR_HEADER_WIDTH = 7; + var PVR_HEADER_MIPMAPCOUNT = 11; + var PVR_HEADER_METADATA = 12; + return function(file, options, onComplete) { + var err = null, out = null; + try { + var buffer = file instanceof ArrayBuffer ? file : file.buffer; + var header = new Int32Array(buffer, 0, PVR_HEADER_LENGTH); + if (header[PVR_HEADER_MAGIC] != PVR_MAGIC) throw new Error("Invalid magic number in PVR header"); + var width = header[PVR_HEADER_WIDTH]; + var height = header[PVR_HEADER_HEIGHT]; + var dataOffset = header[PVR_HEADER_METADATA] + 52; + var pvrtcData = new Uint8Array(buffer, dataOffset); + out = { + _data: pvrtcData, + _compressed: true, + width: width, + height: height + }; + } catch (e) { + err = e; + } + onComplete && onComplete(err, out); + }; + })(), + parsePKMTex: (function() { + var ETC_PKM_HEADER_SIZE = 16; + var ETC_PKM_FORMAT_OFFSET = 6; + var ETC_PKM_ENCODED_WIDTH_OFFSET = 8; + var ETC_PKM_ENCODED_HEIGHT_OFFSET = 10; + var ETC_PKM_WIDTH_OFFSET = 12; + var ETC_PKM_HEIGHT_OFFSET = 14; + var ETC1_RGB_NO_MIPMAPS = 0; + var ETC2_RGB_NO_MIPMAPS = 1; + var ETC2_RGBA_NO_MIPMAPS = 3; + function readBEUint16(header, offset) { + return header[offset] << 8 | header[offset + 1]; + } + return function(file, options, onComplete) { + var err = null, out = null; + try { + var buffer = file instanceof ArrayBuffer ? file : file.buffer; + var header = new Uint8Array(buffer); + var format = readBEUint16(header, ETC_PKM_FORMAT_OFFSET); + if (format !== ETC1_RGB_NO_MIPMAPS && format !== ETC2_RGB_NO_MIPMAPS && format !== ETC2_RGBA_NO_MIPMAPS) return new Error("Invalid magic number in ETC header"); + var width = readBEUint16(header, ETC_PKM_WIDTH_OFFSET); + var height = readBEUint16(header, ETC_PKM_HEIGHT_OFFSET); + var encodedWidth = readBEUint16(header, ETC_PKM_ENCODED_WIDTH_OFFSET); + var encodedHeight = readBEUint16(header, ETC_PKM_ENCODED_HEIGHT_OFFSET); + var etcData = new Uint8Array(buffer, ETC_PKM_HEADER_SIZE); + out = { + _data: etcData, + _compressed: true, + width: width, + height: height + }; + } catch (e) { + err = e; + } + onComplete && onComplete(err, out); + }; + })(), + parsePlist: function parsePlist(file, options, onComplete) { + var err = null; + var result = plistParser.parse(file); + result || (err = new Error("parse failed")); + onComplete && onComplete(err, result); + }, + parseImport: function parseImport(file, options, onComplete) { + if (!file) return onComplete && onComplete(new Error("Json is empty")); + var result, err = null; + try { + result = deserialize(file, options); + } catch (e) { + err = e; + } + onComplete && onComplete(err, result); + }, + init: function init() { + _parsing.clear(); + }, + register: function register(type, handler) { + "object" === typeof type ? js.mixin(parsers, type) : parsers[type] = handler; + }, + parse: function parse(id, file, type, options, onComplete) { + var parsedAsset, parsing, parseHandler; + if (parsedAsset = parsed.get(id)) onComplete(null, parsedAsset); else if (parsing = _parsing.get(id)) parsing.push(onComplete); else if (parseHandler = parsers[type]) { + _parsing.add(id, [ onComplete ]); + parseHandler(file, options, (function(err, data) { + err ? files.remove(id) : isScene(data) || parsed.add(id, data); + var callbacks = _parsing.remove(id); + for (var i = 0, l = callbacks.length; i < l; i++) callbacks[i](err, data); + })); + } else onComplete(null, file); + } + }; + var parsers = { + ".png": parser.parseImage, + ".jpg": parser.parseImage, + ".bmp": parser.parseImage, + ".jpeg": parser.parseImage, + ".gif": parser.parseImage, + ".ico": parser.parseImage, + ".tiff": parser.parseImage, + ".webp": parser.parseImage, + ".image": parser.parseImage, + ".pvr": parser.parsePVRTex, + ".pkm": parser.parsePKMTex, + ".mp3": parser.parseAudio, + ".ogg": parser.parseAudio, + ".wav": parser.parseAudio, + ".m4a": parser.parseAudio, + ".plist": parser.parsePlist, + import: parser.parseImport + }; + module.exports = parser; + }), { + "../platform/CCSAXParser": 128, + "../platform/CCSys": 130, + "../platform/js": 142, + "./cache": 31, + "./deserialize": 35, + "./helper": 44, + "./shared": 53 + } ], + 49: [ (function(require, module, exports) { + "use strict"; + var Task = require("./task"); + var _pipelineId = 0; + function Pipeline(name, funcs) { + if (!Array.isArray(funcs)) { + cc.warn("funcs must be an array"); + return; + } + this.id = _pipelineId++; + this.name = name; + this.pipes = []; + for (var i = 0, l = funcs.length; i < l; i++) "function" === typeof funcs[i] && this.pipes.push(funcs[i]); + } + Pipeline.prototype = { + constructor: Pipeline, + insert: function insert(func, index) { + if ("function" !== typeof func || index > this.pipes.length) { + cc.warnID(4921); + return; + } + this.pipes.splice(index, 0, func); + return this; + }, + append: function append(func) { + if ("function" !== typeof func) return; + this.pipes.push(func); + return this; + }, + remove: function remove(index) { + if ("number" !== typeof index) return; + this.pipes.splice(index, 1); + return this; + }, + sync: function sync(task) { + var pipes = this.pipes; + if (!(task instanceof Task) || 0 === pipes.length) return; + if (null != task.output) { + task.input = task.output; + task.output = null; + } + task._isFinish = false; + for (var i = 0, l = pipes.length; i < l; ) { + var pipe = pipes[i]; + var result = pipe(task); + if (result) { + task._isFinish = true; + return result; + } + i++; + if (i !== l) { + task.input = task.output; + task.output = null; + } + } + task._isFinish = true; + return task.output; + }, + async: function async(task) { + var pipes = this.pipes; + if (!(task instanceof Task) || 0 === pipes.length) return; + if (null != task.output) { + task.input = task.output; + task.output = null; + } + task._isFinish = false; + this._flow(0, task); + }, + _flow: function _flow(index, task) { + var self = this; + var pipe = this.pipes[index]; + pipe(task, (function(result) { + if (result) { + task._isFinish = true; + task.onComplete && task.onComplete(result); + } else { + index++; + if (index < self.pipes.length) { + task.input = task.output; + task.output = null; + self._flow(index, task); + } else { + task._isFinish = true; + task.onComplete && task.onComplete(result, task.output); + } + } + })); + } + }; + module.exports = Pipeline; + }), { + "./task": 54 + } ], + 50: [ (function(require, module, exports) { + "use strict"; + var Task = require("./task"); + var _require = require("./shared"), transformPipeline = _require.transformPipeline, RequestType = _require.RequestType; + function preprocess(task, done) { + var options = task.options, subOptions = Object.create(null), leftOptions = Object.create(null); + for (var op in options) switch (op) { + case RequestType.PATH: + case RequestType.UUID: + case RequestType.DIR: + case RequestType.SCENE: + case RequestType.URL: + break; + + case "__requestType__": + case "__isNative__": + case "ext": + case "type": + case "__nativeName__": + case "audioLoadMode": + case "bundle": + subOptions[op] = options[op]; + break; + + case "__exclude__": + case "__outputAsArray__": + leftOptions[op] = options[op]; + break; + + default: + subOptions[op] = options[op]; + leftOptions[op] = options[op]; + } + task.options = leftOptions; + var subTask = Task.create({ + input: task.input, + options: subOptions + }); + var err = null; + try { + task.output = task.source = transformPipeline.sync(subTask); + } catch (e) { + err = e; + for (var i = 0, l = subTask.output.length; i < l; i++) subTask.output[i].recycle(); + } + subTask.recycle(); + done(err); + } + module.exports = preprocess; + }), { + "./shared": 53, + "./task": 54 + } ], + 51: [ (function(require, module, exports) { + "use strict"; + var dependUtil = require("./depend-util"); + var Cache = require("./cache"); + require("../assets/CCAsset"); + var _require = require("./shared"), assets = _require.assets; + var _require2 = require("../platform/utils"), callInNextTick = _require2.callInNextTick; + function visitAsset(asset, deps) { + if (!asset._uuid) return; + deps.push(asset._uuid); + } + function visitComponent(comp, deps) { + var props = Object.getOwnPropertyNames(comp); + for (var i = 0; i < props.length; i++) { + var propName = props[i]; + if ("node" === propName || "__eventTargets" === propName) continue; + var value = comp[propName]; + if ("object" === typeof value && value) if (Array.isArray(value)) for (var j = 0; j < value.length; j++) { + var val = value[j]; + val instanceof cc.Asset && visitAsset(val, deps); + } else if (value.constructor && value.constructor !== Object) value instanceof cc.Asset && visitAsset(value, deps); else { + var keys = Object.getOwnPropertyNames(value); + for (var _j = 0; _j < keys.length; _j++) { + var _val = value[keys[_j]]; + _val instanceof cc.Asset && visitAsset(_val, deps); + } + } + } + } + var _temp = []; + function visitNode(node, deps) { + for (var i = 0; i < node._components.length; i++) visitComponent(node._components[i], deps); + for (var _i = 0; _i < node._children.length; _i++) visitNode(node._children[_i], deps); + } + function descendOpRef(asset, refs, exclude, op) { + exclude.push(asset._uuid); + var depends = dependUtil.getDeps(asset._uuid); + for (var i = 0, l = depends.length; i < l; i++) { + var dependAsset = assets.get(depends[i]); + if (dependAsset) { + var uuid = dependAsset._uuid; + uuid in refs ? refs[uuid] += op : refs[uuid] = dependAsset.refCount + op; + if (exclude.includes(uuid)) continue; + descendOpRef(dependAsset, refs, exclude, op); + } + } + } + function checkCircularReference(asset) { + var refs = Object.create(null); + refs[asset._uuid] = asset.refCount; + descendOpRef(asset, refs, _temp, -1); + _temp.length = 0; + if (0 !== refs[asset._uuid]) return refs[asset._uuid]; + for (var uuid in refs) 0 !== refs[uuid] && descendOpRef(assets.get(uuid), refs, _temp, 1); + _temp.length = 0; + return refs[asset._uuid]; + } + var _persistNodeDeps = new Cache(); + var _toDelete = new Cache(); + var eventListener = false; + function freeAssets() { + eventListener = false; + _toDelete.forEach((function(asset) { + releaseManager._free(asset); + })); + _toDelete.clear(); + } + var releaseManager = { + init: function init() { + _persistNodeDeps.clear(); + _toDelete.clear(); + }, + _addPersistNodeRef: function _addPersistNodeRef(node) { + var deps = []; + visitNode(node, deps); + for (var i = 0, l = deps.length; i < l; i++) { + var dependAsset = assets.get(deps[i]); + dependAsset && dependAsset.addRef(); + } + _persistNodeDeps.add(node.uuid, deps); + }, + _removePersistNodeRef: function _removePersistNodeRef(node) { + if (_persistNodeDeps.has(node.uuid)) { + var deps = _persistNodeDeps.get(node.uuid); + for (var i = 0, l = deps.length; i < l; i++) { + var dependAsset = assets.get(deps[i]); + dependAsset && dependAsset.decRef(); + } + _persistNodeDeps.remove(node.uuid); + } + }, + _autoRelease: function _autoRelease(oldScene, newScene, persistNodes) { + if (oldScene) { + var childs = dependUtil.getDeps(oldScene._id); + for (var i = 0, l = childs.length; i < l; i++) { + var asset = assets.get(childs[i]); + asset && asset.decRef((false, oldScene.autoReleaseAssets)); + } + var dependencies = dependUtil._depends.get(oldScene._id); + if (dependencies && dependencies.persistDeps) { + var persistDeps = dependencies.persistDeps; + for (var _i2 = 0, _l = persistDeps.length; _i2 < _l; _i2++) { + var _asset = assets.get(persistDeps[_i2]); + _asset && _asset.decRef((false, oldScene.autoReleaseAssets)); + } + } + oldScene._id !== newScene._id && dependUtil.remove(oldScene._id); + } + var sceneDeps = dependUtil._depends.get(newScene._id); + sceneDeps && (sceneDeps.persistDeps = []); + for (var key in persistNodes) { + var node = persistNodes[key]; + var deps = _persistNodeDeps.get(node.uuid); + for (var _i3 = 0, _l2 = deps.length; _i3 < _l2; _i3++) { + var dependAsset = assets.get(deps[_i3]); + dependAsset && dependAsset.addRef(); + } + sceneDeps && sceneDeps.persistDeps.push.apply(sceneDeps.persistDeps, deps); + } + }, + _free: function _free(asset, force) { + _toDelete.remove(asset._uuid); + if (!cc.isValid(asset, true)) return; + if (!force && asset.refCount > 0 && checkCircularReference(asset) > 0) return; + assets.remove(asset._uuid); + var depends = dependUtil.getDeps(asset._uuid); + for (var i = 0, l = depends.length; i < l; i++) { + var dependAsset = assets.get(depends[i]); + if (dependAsset) { + dependAsset.decRef(false); + releaseManager._free(dependAsset, false); + } + } + asset.destroy(); + dependUtil.remove(asset._uuid); + }, + tryRelease: function tryRelease(asset, force) { + if (!(asset instanceof cc.Asset)) return; + if (force) releaseManager._free(asset, force); else { + _toDelete.add(asset._uuid, asset); + if (!eventListener) { + eventListener = true; + callInNextTick(freeAssets); + } + } + } + }; + module.exports = releaseManager; + }), { + "../assets/CCAsset": 57, + "../platform/utils": 145, + "./cache": 31, + "./depend-util": 33, + "./shared": 53 + } ], + 52: [ (function(require, module, exports) { + "use strict"; + var MAX_DEAD_NUM = 500; + var _deadPool = []; + function RequestItem() { + this._id = ""; + this.uuid = ""; + this.url = ""; + this.ext = ".json"; + this.content = null; + this.file = null; + this.info = null; + this.config = null; + this.isNative = false; + this.options = Object.create(null); + } + RequestItem.prototype = { + constructor: RequestItem, + get id() { + this._id || (this._id = this.uuid + "@" + (this.isNative ? "native" : "import")); + return this._id; + }, + recycle: function recycle() { + if (_deadPool.length === MAX_DEAD_NUM) return; + this._id = ""; + this.uuid = ""; + this.url = ""; + this.ext = ".json"; + this.content = null; + this.file = null; + this.info = null; + this.config = null; + this.isNative = false; + this.options = Object.create(null); + _deadPool.push(this); + } + }; + RequestItem.create = function() { + var out = null; + out = 0 !== _deadPool.length ? _deadPool.pop() : new RequestItem(); + return out; + }; + module.exports = RequestItem; + }), {} ], + 53: [ (function(require, module, exports) { + "use strict"; + var Cache = require("./cache"); + var Pipeline = require("./pipeline"); + var assets = new Cache(); + var files = new Cache(); + var parsed = new Cache(); + var bundles = new Cache(); + var pipeline = new Pipeline("normal load", []); + var fetchPipeline = new Pipeline("fetch", []); + var transformPipeline = new Pipeline("transform url", []); + var RequestType = { + UUID: "uuid", + PATH: "path", + DIR: "dir", + URL: "url", + SCENE: "scene" + }; + var BuiltinBundleName = { + RESOURCES: "resources", + INTERNAL: "internal", + MAIN: "main", + START_SCENE: "start-scene" + }; + module.exports = { + assets: assets, + files: files, + parsed: parsed, + pipeline: pipeline, + fetchPipeline: fetchPipeline, + transformPipeline: transformPipeline, + RequestType: RequestType, + bundles: bundles, + BuiltinBundleName: BuiltinBundleName + }; + }), { + "./cache": 31, + "./pipeline": 49 + } ], + 54: [ (function(require, module, exports) { + "use strict"; + var _taskId = 0; + var MAX_DEAD_NUM = 500; + var _deadPool = []; + function Task(options) { + this.id = _taskId++; + this._isFinish = true; + this.onComplete = null; + this.onProgress = null; + this.onError = null; + this.source = null; + this.output = null; + this.input = null; + this.progress = null; + this.options = null; + this.set(options); + } + Task.prototype = { + constructor: Task, + set: function set(options) { + options = options || Object.create(null); + this.onComplete = options.onComplete; + this.onProgress = options.onProgress; + this.onError = options.onError; + this.source = this.input = options.input; + this.output = null; + this.progress = options.progress; + this.options = options.options || Object.create(null); + }, + dispatch: function dispatch(event, param1, param2, param3, param4) { + switch (event) { + case "complete": + this.onComplete && this.onComplete(param1, param2, param3, param4); + break; + + case "progress": + this.onProgress && this.onProgress(param1, param2, param3, param4); + break; + + case "error": + this.onError && this.onError(param1, param2, param3, param4); + break; + + default: + var str = "on" + event[0].toUpperCase() + event.substr(1); + "function" === typeof this[str] && this[str](param1, param2, param3, param4); + } + }, + recycle: function recycle() { + if (_deadPool.length === MAX_DEAD_NUM) return; + this.onComplete = null; + this.onProgress = null; + this.onError = null; + this.source = this.output = this.input = null; + this.progress = null; + this.options = null; + _deadPool.push(this); + }, + get isFinish() { + return this._isFinish; + } + }; + Task.create = function(options) { + var out = null; + if (0 !== _deadPool.length) { + out = _deadPool.pop(); + out.set(options); + } else out = new Task(options); + return out; + }; + module.exports = Task; + }), {} ], + 55: [ (function(require, module, exports) { + "use strict"; + var _require = require("./helper"), decodeUuid = _require.decodeUuid; + var RequestItem = require("./request-item"); + var _require2 = require("./shared"), RequestType = _require2.RequestType, bundles = _require2.bundles; + function parse(task) { + var input = task.input, options = task.options; + input = Array.isArray(input) ? input : [ input ]; + task.output = []; + for (var i = 0; i < input.length; i++) { + var item = input[i]; + var out = RequestItem.create(); + if ("string" === typeof item) { + item = Object.create(null); + item[options.__requestType__ || RequestType.UUID] = input[i]; + } + if ("object" === typeof item) { + cc.js.addon(item, options); + item.preset && cc.js.addon(item, cc.assetManager.presets[item.preset]); + for (var key in item) { + switch (key) { + case RequestType.UUID: + var uuid = out.uuid = decodeUuid(item.uuid); + if (bundles.has(item.bundle)) { + var config = bundles.get(item.bundle)._config; + var info = config.getAssetInfo(uuid); + if (info && info.redirect) { + if (!bundles.has(info.redirect)) throw new Error("Please load bundle " + info.redirect + " first"); + config = bundles.get(info.redirect)._config; + info = config.getAssetInfo(uuid); + } + out.config = config; + out.info = info; + } + out.ext = item.ext || ".json"; + break; + + case "__requestType__": + case "ext": + case "bundle": + case "preset": + case "type": + break; + + case RequestType.DIR: + if (bundles.has(item.bundle)) { + var infos = []; + bundles.get(item.bundle)._config.getDirWithPath(item.dir, item.type, infos); + for (var _i = 0, l = infos.length; _i < l; _i++) { + var info = infos[_i]; + input.push({ + uuid: info.uuid, + __isNative__: false, + ext: ".json", + bundle: item.bundle + }); + } + } + out.recycle(); + out = null; + break; + + case RequestType.PATH: + if (bundles.has(item.bundle)) { + var config = bundles.get(item.bundle)._config; + var info = config.getInfoWithPath(item.path, item.type); + if (info && info.redirect) { + if (!bundles.has(info.redirect)) throw new Error("you need to load bundle " + info.redirect + " first"); + config = bundles.get(info.redirect)._config; + info = config.getAssetInfo(info.uuid); + } + if (!info) { + out.recycle(); + throw new Error("Bundle " + item.bundle + " doesn't contain " + item.path); + } + out.config = config; + out.uuid = info.uuid; + out.info = info; + } + out.ext = item.ext || ".json"; + break; + + case RequestType.SCENE: + if (bundles.has(item.bundle)) { + var config = bundles.get(item.bundle)._config; + var info = config.getSceneInfo(item.scene); + if (info && info.redirect) { + if (!bundles.has(info.redirect)) throw new Error("you need to load bundle " + info.redirect + " first"); + config = bundles.get(info.redirect)._config; + info = config.getAssetInfo(info.uuid); + } + if (!info) { + out.recycle(); + throw new Error("Bundle " + config.name + " doesn't contain scene " + item.scene); + } + out.config = config; + out.uuid = info.uuid; + out.info = info; + } + break; + + case "__isNative__": + out.isNative = item.__isNative__; + break; + + case RequestType.URL: + out.url = item.url; + out.uuid = item.uuid || item.url; + out.ext = item.ext || cc.path.extname(item.url); + out.isNative = void 0 === item.__isNative__ || item.__isNative__; + break; + + default: + out.options[key] = item[key]; + } + if (!out) break; + } + } + if (!out) continue; + task.output.push(out); + if (!out.uuid && !out.url) throw new Error("Can not parse this input:" + JSON.stringify(item)); + } + return null; + } + function combine(task) { + var input = task.output = task.input; + for (var i = 0; i < input.length; i++) { + var item = input[i]; + if (item.url) continue; + var url = "", base = ""; + var config = item.config; + base = item.isNative ? config && config.nativeBase ? config.base + config.nativeBase : cc.assetManager.generalNativeBase : config && config.importBase ? config.base + config.importBase : cc.assetManager.generalImportBase; + var uuid = item.uuid; + var ver = ""; + item.info && (ver = item.isNative ? item.info.nativeVer ? "." + item.info.nativeVer : "" : item.info.ver ? "." + item.info.ver : ""); + url = ".ttf" === item.ext ? base + "/" + uuid.slice(0, 2) + "/" + uuid + ver + "/" + item.options.__nativeName__ : base + "/" + uuid.slice(0, 2) + "/" + uuid + ver + item.ext; + item.url = url; + } + return null; + } + module.exports = { + parse: parse, + combine: combine + }; + }), { + "./helper": 44, + "./request-item": 52, + "./shared": 53 + } ], + 56: [ (function(require, module, exports) { + "use strict"; + var dependUtil = require("./depend-util"); + var _require = require("./helper"), isScene = _require.isScene, decodeUuid = _require.decodeUuid; + var _require2 = require("./shared"), assets = _require2.assets; + var _require3 = require("../platform/utils"), callInNextTick = _require3.callInNextTick; + var MissingObjectReporter = false; + require("../assets/CCAsset"); + var utils = { + processOptions: function processOptions(options) { + false; + var uuids = options.uuids; + var paths = options.paths; + var types = options.types; + var bundles = options.deps; + var realEntries = options.paths = Object.create(null); + if (false === options.debug) { + for (var i = 0, l = uuids.length; i < l; i++) uuids[i] = decodeUuid(uuids[i]); + for (var id in paths) { + var entry = paths[id]; + var type = entry[1]; + entry[1] = types[type]; + } + } else { + var out = Object.create(null); + for (var _i = 0, _l = uuids.length; _i < _l; _i++) { + var uuid = uuids[_i]; + uuids[_i] = out[uuid] = decodeUuid(uuid); + } + uuids = out; + } + for (var _id in paths) { + var _entry = paths[_id]; + realEntries[uuids[_id]] = _entry; + } + var scenes = options.scenes; + for (var name in scenes) { + var _uuid = scenes[name]; + scenes[name] = uuids[_uuid]; + } + var packs = options.packs; + for (var packId in packs) { + var packedIds = packs[packId]; + for (var j = 0; j < packedIds.length; ++j) packedIds[j] = uuids[packedIds[j]]; + } + var versions = options.versions; + if (versions) for (var folder in versions) { + var entries = versions[folder]; + for (var _i2 = 0; _i2 < entries.length; _i2 += 2) { + var _uuid2 = entries[_i2]; + entries[_i2] = uuids[_uuid2] || _uuid2; + } + } + var redirect = options.redirect; + if (redirect) for (var _i3 = 0; _i3 < redirect.length; _i3 += 2) { + redirect[_i3] = uuids[redirect[_i3]]; + redirect[_i3 + 1] = bundles[redirect[_i3 + 1]]; + } + }, + clear: function clear(task, clearRef) { + for (var i = 0, l = task.input.length; i < l; i++) { + var item = task.input[i]; + clearRef && !item.isNative && item.content && item.content.decRef && item.content.decRef(false); + item.recycle(); + } + task.input = null; + }, + urlAppendTimestamp: function urlAppendTimestamp(url) { + if (cc.assetManager.downloader.appendTimeStamp && "string" === typeof url) return /\?/.test(url) ? url + "&_t=" + (new Date() - 0) : url + "?_t=" + (new Date() - 0); + return url; + }, + retry: function retry(process, times, wait, onComplete, index) { + index = index || 0; + process(index, (function(err, result) { + index++; + !err || index > times ? onComplete && onComplete(err, result) : setTimeout((function() { + utils.retry(process, times, wait, onComplete, index); + }), wait); + })); + }, + getDepends: function getDepends(uuid, data, exclude, depends, preload, asyncLoadAssets, config) { + try { + var info = dependUtil.parse(uuid, data); + var includeNative = true; + data instanceof cc.Asset && (!data.__nativeDepend__ || data._nativeAsset) && (includeNative = false); + if (preload) { + for (var _i4 = 0, _l2 = info.deps.length; _i4 < _l2; _i4++) { + var _dep = info.deps[_i4]; + if (!(_dep in exclude)) { + exclude[_dep] = true; + depends.push({ + uuid: _dep, + bundle: config && config.name + }); + } + } + if (includeNative && info.nativeDep) { + config && (info.nativeDep.bundle = config.name); + depends.push(Object.assign({}, info.nativeDep)); + } + } else { + asyncLoadAssets = (true, !!data.asyncLoadAssets || asyncLoadAssets && !info.preventDeferredLoadDependents); + for (var i = 0, l = info.deps.length; i < l; i++) { + var dep = info.deps[i]; + if (!(dep in exclude)) { + exclude[dep] = true; + depends.push({ + uuid: dep, + __asyncLoadAssets__: asyncLoadAssets, + bundle: config && config.name + }); + } + } + if (includeNative && !asyncLoadAssets && !info.preventPreloadNativeObject && info.nativeDep) { + config && (info.nativeDep.bundle = config.name); + depends.push(Object.assign({}, info.nativeDep)); + } + } + } catch (e) { + cc.error(e.message, e.stack); + } + }, + cache: function cache(id, asset, cacheAsset) { + if (!asset) return; + var _isScene = isScene(asset); + !_isScene && cacheAsset && assets.add(id, asset); + _isScene && false; + }, + setProperties: function setProperties(uuid, asset, assetsMap) { + var missingAsset = false; + var depends = asset.__depends__; + if (depends) { + var missingAssetReporter = null; + for (var i = 0, l = depends.length; i < l; i++) { + var depend = depends[i]; + var dependAsset = assetsMap[depend.uuid + "@import"]; + if (dependAsset) depend.owner[depend.prop] = dependAsset.addRef(); else { + false; + cc.error("The asset " + depend.uuid + " is missing!"); + missingAsset = true; + } + } + missingAssetReporter && missingAssetReporter.reportByOwner(); + asset.__depends__ = void 0; + } + if (asset.__nativeDepend__) { + if (!asset._nativeAsset) if (assetsMap[uuid + "@native"]) asset._nativeAsset = assetsMap[uuid + "@native"]; else { + missingAsset = true; + false; + } + asset.__nativeDepend__ = void 0; + } + return missingAsset; + }, + gatherAsset: function gatherAsset(task) { + var source = task.source; + if (task.options.__outputAsArray__ || 1 !== source.length) { + var output = task.output = []; + for (var i = 0, l = source.length; i < l; i++) output.push(source[i].content); + } else task.output = source[0].content; + }, + forEach: function forEach(array, process, onComplete) { + var count = 0; + var errs = []; + 0 === array.length && onComplete && onComplete(errs); + for (var i = 0, l = array.length; i < l; i++) process(array[i], (function(err) { + err && errs.push(err); + count++; + count === l && onComplete && onComplete(errs); + })); + }, + parseParameters: function parseParameters(options, onProgress, onComplete) { + if (void 0 === onComplete) { + var isCallback = "function" === typeof options; + if (onProgress) { + onComplete = onProgress; + isCallback || (onProgress = null); + } else if (void 0 === onProgress && isCallback) { + onComplete = options; + options = null; + onProgress = null; + } + if (void 0 !== onProgress && isCallback) { + onProgress = options; + options = null; + } + } + options = options || Object.create(null); + return { + options: options, + onProgress: onProgress, + onComplete: onComplete + }; + }, + parseLoadResArgs: function parseLoadResArgs(type, onProgress, onComplete) { + if (void 0 === onComplete) { + var isValidType = cc.js.isChildClassOf(type, cc.Asset); + if (onProgress) { + onComplete = onProgress; + isValidType && (onProgress = null); + } else if (void 0 === onProgress && !isValidType) { + onComplete = type; + onProgress = null; + type = null; + } + if (void 0 !== onProgress && !isValidType) { + onProgress = type; + type = null; + } + } + return { + type: type, + onProgress: onProgress, + onComplete: onComplete + }; + }, + checkCircleReference: function checkCircleReference(owner, uuid, map, checked) { + checked || (checked = Object.create(null)); + var item = map[uuid]; + if (!item || checked[uuid]) return false; + checked[uuid] = true; + var result = false; + var deps = dependUtil.getDeps(uuid); + if (deps) for (var i = 0, l = deps.length; i < l; i++) { + var dep = deps[i]; + if (dep === owner || utils.checkCircleReference(owner, dep, map, checked)) { + result = true; + break; + } + } + return result; + }, + asyncify: function asyncify(cb) { + return function(p1, p2) { + if (!cb) return; + var refs = []; + Array.isArray(p2) ? p2.forEach((function(x) { + return x instanceof cc.Asset && refs.push(x.addRef()); + })) : p2 instanceof cc.Asset && refs.push(p2.addRef()); + callInNextTick((function() { + refs.forEach((function(x) { + return x.decRef(false); + })); + cb(p1, p2); + })); + }; + } + }; + module.exports = utils; + }), { + "../assets/CCAsset": 57, + "../platform/utils": 145, + "./depend-util": 33, + "./helper": 44, + "./shared": 53 + } ], + 57: [ (function(require, module, exports) { + "use strict"; + var CCObject = require("../platform/CCObject"); + cc.Asset = cc.Class({ + name: "cc.Asset", + extends: CCObject, + ctor: function ctor() { + Object.defineProperty(this, "_uuid", { + value: "", + writable: true + }); + this.loaded = true; + this._nativeUrl = ""; + this._ref = 0; + }, + properties: { + nativeUrl: { + get: function get() { + if (!this._nativeUrl && this._native) { + var name = this._native; + if (47 === name.charCodeAt(0)) return name.slice(1); + 46 === name.charCodeAt(0) ? this._nativeUrl = cc.assetManager.utils.getUrlWithUuid(this._uuid, { + nativeExt: name, + isNative: true + }) : this._nativeUrl = cc.assetManager.utils.getUrlWithUuid(this._uuid, { + __nativeName__: name, + nativeExt: cc.path.extname(name), + isNative: true + }); + } + return this._nativeUrl; + }, + visible: false + }, + refCount: { + get: function get() { + return this._ref; + } + }, + _native: "", + _nativeAsset: { + get: function get() { + return this._$nativeAsset; + }, + set: function set(obj) { + this._$nativeAsset = obj; + } + }, + _nativeDep: { + get: function get() { + if (this._native) return { + __isNative__: true, + uuid: this._uuid, + ext: this._native + }; + } + } + }, + statics: { + deserialize: false, + preventDeferredLoadDependents: false, + preventPreloadNativeObject: false + }, + toString: function toString() { + return this.nativeUrl; + }, + serialize: false, + createNode: null, + _setRawAsset: function _setRawAsset(filename, inLibrary) { + this._native = false !== inLibrary ? filename || void 0 : "/" + filename; + }, + addRef: function addRef() { + this._ref++; + return this; + }, + decRef: function decRef(autoRelease) { + this._ref > 0 && this._ref--; + false !== autoRelease && cc.assetManager._releaseManager.tryRelease(this); + return this; + } + }); + module.exports = cc.Asset; + }), { + "../platform/CCObject": 127 + } ], + 58: [ (function(require, module, exports) { + "use strict"; + var Asset = require("./CCAsset"); + var EventTarget = require("../event/event-target"); + var LoadMode = cc.Enum({ + WEB_AUDIO: 0, + DOM_AUDIO: 1 + }); + var AudioClip = cc.Class({ + name: "cc.AudioClip", + extends: Asset, + mixins: [ EventTarget ], + ctor: function ctor() { + this._loading = false; + this.loaded = false; + this._audio = null; + }, + properties: { + duration: 0, + loadMode: { + default: LoadMode.WEB_AUDIO, + type: LoadMode + }, + _nativeAsset: { + get: function get() { + return this._audio; + }, + set: function set(value) { + value instanceof cc.AudioClip ? this._audio = value._nativeAsset : this._audio = value; + if (this._audio) { + this.loaded = true; + this.emit("load"); + } + }, + override: true + }, + _nativeDep: { + get: function get() { + return { + uuid: this._uuid, + audioLoadMode: this.loadMode, + ext: cc.path.extname(this._native), + __isNative__: true + }; + }, + override: true + } + }, + statics: { + LoadMode: LoadMode, + _loadByUrl: function _loadByUrl(url, callback) { + var audioClip = cc.assetManager.assets.get(url); + audioClip ? callback(null, audioClip) : cc.assetManager.loadRemote(url, (function(error, data) { + if (error) return callback(error); + callback(null, data); + })); + } + }, + _ensureLoaded: function _ensureLoaded(onComplete) { + if (this.loaded) return onComplete && onComplete(); + onComplete && this.once("load", onComplete); + if (!this._loading) { + this._loading = true; + var self = this; + cc.assetManager.postLoadNative(this, (function(err) { + self._loading = false; + })); + } + }, + destroy: function destroy() { + cc.audioEngine.uncache(this); + this._super(); + } + }); + cc.AudioClip = AudioClip; + module.exports = AudioClip; + }), { + "../event/event-target": 114, + "./CCAsset": 57 + } ], + 59: [ (function(require, module, exports) { + "use strict"; + var FontLetterDefinition = function FontLetterDefinition() { + this.u = 0; + this.v = 0; + this.w = 0; + this.h = 0; + this.offsetX = 0; + this.offsetY = 0; + this.textureID = 0; + this.valid = false; + this.xAdvance = 0; + }; + var FontAtlas = function FontAtlas(texture) { + this._letterDefinitions = {}; + this._texture = texture; + }; + FontAtlas.prototype = { + constructor: FontAtlas, + addLetterDefinitions: function addLetterDefinitions(letter, letterDefinition) { + this._letterDefinitions[letter] = letterDefinition; + }, + cloneLetterDefinition: function cloneLetterDefinition() { + var copyLetterDefinitions = {}; + for (var key in this._letterDefinitions) { + var value = new FontLetterDefinition(); + cc.js.mixin(value, this._letterDefinitions[key]); + copyLetterDefinitions[key] = value; + } + return copyLetterDefinitions; + }, + getTexture: function getTexture() { + return this._texture; + }, + getLetter: function getLetter(key) { + return this._letterDefinitions[key]; + }, + getLetterDefinitionForChar: function getLetterDefinitionForChar(_char) { + var key = _char.charCodeAt(0); + var hasKey = this._letterDefinitions.hasOwnProperty(key); + var letter; + letter = hasKey ? this._letterDefinitions[key] : null; + return letter; + }, + clear: function clear() { + this._letterDefinitions = {}; + } + }; + var BitmapFont = cc.Class({ + name: "cc.BitmapFont", + extends: cc.Font, + properties: { + fntDataStr: { + default: "" + }, + spriteFrame: { + default: null, + type: cc.SpriteFrame + }, + fontSize: { + default: -1 + }, + _fntConfig: null, + _fontDefDictionary: null + }, + onLoad: function onLoad() { + var spriteFrame = this.spriteFrame; + if (!this._fontDefDictionary) { + this._fontDefDictionary = new FontAtlas(); + spriteFrame && (this._fontDefDictionary._texture = spriteFrame._texture); + } + var fntConfig = this._fntConfig; + if (!fntConfig) return; + var fontDict = fntConfig.fontDefDictionary; + for (var fontDef in fontDict) { + var letter = new FontLetterDefinition(); + var rect = fontDict[fontDef].rect; + letter.offsetX = fontDict[fontDef].xOffset; + letter.offsetY = fontDict[fontDef].yOffset; + letter.w = rect.width; + letter.h = rect.height; + letter.u = rect.x; + letter.v = rect.y; + letter.textureID = 0; + letter.valid = true; + letter.xAdvance = fontDict[fontDef].xAdvance; + this._fontDefDictionary.addLetterDefinitions(fontDef, letter); + } + } + }); + cc.BitmapFont = BitmapFont; + cc.BitmapFont.FontLetterDefinition = FontLetterDefinition; + cc.BitmapFont.FontAtlas = FontAtlas; + module.exports = BitmapFont; + }), {} ], + 60: [ (function(require, module, exports) { + "use strict"; + var BufferAsset = cc.Class({ + name: "cc.BufferAsset", + extends: cc.Asset, + ctor: function ctor() { + this._buffer = null; + }, + properties: { + _nativeAsset: { + get: function get() { + return this._buffer; + }, + set: function set(bin) { + this._buffer = bin.buffer || bin; + }, + override: true + }, + buffer: function buffer() { + return this._buffer; + } + } + }); + cc.BufferAsset = module.exports = BufferAsset; + }), {} ], + 61: [ (function(require, module, exports) { + "use strict"; + var Font = cc.Class({ + name: "cc.Font", + extends: cc.Asset + }); + cc.Font = module.exports = Font; + }), {} ], + 62: [ (function(require, module, exports) { + "use strict"; + var JsonAsset = cc.Class({ + name: "cc.JsonAsset", + extends: cc.Asset, + properties: { + json: null + } + }); + module.exports = cc.JsonAsset = JsonAsset; + }), {} ], + 63: [ (function(require, module, exports) { + "use strict"; + var LabelAtlas = cc.Class({ + name: "cc.LabelAtlas", + extends: cc.BitmapFont, + onLoad: function onLoad() { + if (!this.spriteFrame) { + cc.warnID(9100, this.name); + return; + } + if (!this._fntConfig) { + cc.warnID(9101, this.name); + return; + } + this._super(); + } + }); + cc.LabelAtlas = LabelAtlas; + module.exports = LabelAtlas; + }), {} ], + 64: [ (function(require, module, exports) { + "use strict"; + var OptimizationPolicy = cc.Enum({ + AUTO: 0, + SINGLE_INSTANCE: 1, + MULTI_INSTANCE: 2 + }); + var Prefab = cc.Class({ + name: "cc.Prefab", + extends: cc.Asset, + ctor: function ctor() { + this._createFunction = null; + this._instantiatedTimes = 0; + }, + properties: { + data: null, + optimizationPolicy: OptimizationPolicy.AUTO, + asyncLoadAssets: false, + readonly: { + default: false, + editorOnly: true + } + }, + statics: { + OptimizationPolicy: OptimizationPolicy, + OptimizationPolicyThreshold: 3 + }, + createNode: false, + compileCreateFunction: function compileCreateFunction() { + var jit = require("../platform/instantiate-jit"); + this._createFunction = jit.compile(this.data); + }, + _doInstantiate: function _doInstantiate(rootToRedirect) { + this.data._prefab || cc.warnID(3700); + this._createFunction || this.compileCreateFunction(); + return this._createFunction(rootToRedirect); + }, + _instantiate: function _instantiate() { + var node, useJit = false; + true; + useJit = this.optimizationPolicy !== OptimizationPolicy.SINGLE_INSTANCE && (this.optimizationPolicy === OptimizationPolicy.MULTI_INSTANCE || this._instantiatedTimes + 1 >= Prefab.OptimizationPolicyThreshold); + if (useJit) { + node = this._doInstantiate(); + this.data._instantiate(node); + } else node = this.data._instantiate(); + ++this._instantiatedTimes; + var PrefabUtils; + false, false; + return node; + }, + destroy: function destroy() { + this.data && this.data.destroy(); + this._super(); + } + }); + cc.Prefab = module.exports = Prefab; + cc.js.obsolete(cc, "cc._Prefab", "Prefab"); + }), { + "../platform/instantiate-jit": 140 + } ], + 65: [ (function(require, module, exports) { + "use strict"; + var _gfx = _interopRequireDefault(require("../../renderer/gfx")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var renderer = require("../renderer"); + var Texture2D = require("./CCTexture2D"); + var DepthStencilFormat = cc.Enum({ + RB_FMT_D24S8: _gfx["default"].RB_FMT_D24S8, + RB_FMT_S8: _gfx["default"].RB_FMT_S8, + RB_FMT_D16: _gfx["default"].RB_FMT_D16 + }); + var RenderTexture = cc.Class({ + name: "cc.RenderTexture", + extends: Texture2D, + statics: { + DepthStencilFormat: DepthStencilFormat + }, + ctor: function ctor() { + this._framebuffer = null; + }, + initWithSize: function initWithSize(width, height, depthStencilFormat) { + this.width = Math.floor(width || cc.visibleRect.width); + this.height = Math.floor(height || cc.visibleRect.height); + this._resetUnderlyingMipmaps(); + var opts = { + colors: [ this._texture ] + }; + this._depthStencilBuffer && this._depthStencilBuffer.destroy(); + var depthStencilBuffer; + if (depthStencilFormat) { + depthStencilBuffer = new _gfx["default"].RenderBuffer(renderer.device, depthStencilFormat, width, height); + depthStencilFormat === _gfx["default"].RB_FMT_D24S8 ? opts.depthStencil = depthStencilBuffer : depthStencilFormat === _gfx["default"].RB_FMT_S8 ? opts.stencil = depthStencilBuffer : depthStencilFormat === _gfx["default"].RB_FMT_D16 && (opts.depth = depthStencilBuffer); + } + this._depthStencilBuffer = depthStencilBuffer; + this._framebuffer && this._framebuffer.destroy(); + this._framebuffer = new _gfx["default"].FrameBuffer(renderer.device, width, height, opts); + this._packable = false; + this.loaded = true; + this.emit("load"); + }, + updateSize: function updateSize(width, height) { + this.width = Math.floor(width || cc.visibleRect.width); + this.height = Math.floor(height || cc.visibleRect.height); + this._resetUnderlyingMipmaps(); + var rbo = this._depthStencilBuffer; + rbo && rbo.update(this.width, this.height); + this._framebuffer._width = width; + this._framebuffer._height = height; + }, + drawTextureAt: function drawTextureAt(texture, x, y) { + if (!texture._image || 0 === texture._image.width) return; + this._texture.updateSubImage({ + x: x, + y: y, + image: texture._image, + width: texture.width, + height: texture.height, + level: 0, + flipY: false, + premultiplyAlpha: texture._premultiplyAlpha + }); + }, + readPixels: function readPixels(data, x, y, w, h) { + if (!this._framebuffer || !this._texture) return data; + x = x || 0; + y = y || 0; + var width = w || this.width; + var height = h || this.height; + data = data || new Uint8Array(width * height * 4); + var gl = cc.game._renderContext; + var oldFBO = gl.getParameter(gl.FRAMEBUFFER_BINDING); + gl.bindFramebuffer(gl.FRAMEBUFFER, this._framebuffer.getHandle()); + gl.readPixels(x, y, width, height, gl.RGBA, gl.UNSIGNED_BYTE, data); + gl.bindFramebuffer(gl.FRAMEBUFFER, oldFBO); + return data; + }, + destroy: function destroy() { + this._super(); + if (this._framebuffer) { + this._framebuffer.destroy(); + this._framebuffer = null; + } + } + }); + cc.RenderTexture = module.exports = RenderTexture; + }), { + "../../renderer/gfx": 247, + "../renderer": 152, + "./CCTexture2D": 72 + } ], + 66: [ (function(require, module, exports) { + "use strict"; + var Scene = cc.Class({ + name: "cc.SceneAsset", + extends: cc.Asset, + properties: { + scene: null, + asyncLoadAssets: void 0 + } + }); + cc.SceneAsset = Scene; + module.exports = Scene; + }), {} ], + 67: [ (function(require, module, exports) { + "use strict"; + var Script = cc.Class({ + name: "cc.Script", + extends: cc.Asset + }); + cc._Script = Script; + var JavaScript = cc.Class({ + name: "cc.JavaScript", + extends: Script + }); + cc._JavaScript = JavaScript; + var TypeScript = cc.Class({ + name: "cc.TypeScript", + extends: Script + }); + cc._TypeScript = TypeScript; + }), {} ], + 68: [ (function(require, module, exports) { + "use strict"; + var SpriteAtlas = cc.Class({ + name: "cc.SpriteAtlas", + extends: cc.Asset, + properties: { + _spriteFrames: { + default: {} + } + }, + getTexture: function getTexture() { + var keys = Object.keys(this._spriteFrames); + if (keys.length > 0) { + var spriteFrame = this._spriteFrames[keys[0]]; + return spriteFrame ? spriteFrame.getTexture() : null; + } + return null; + }, + getSpriteFrame: function getSpriteFrame(key) { + var sf = this._spriteFrames[key]; + if (!sf) return null; + sf.name || (sf.name = key); + return sf; + }, + getSpriteFrames: function getSpriteFrames() { + var frames = []; + var spriteFrames = this._spriteFrames; + for (var key in spriteFrames) frames.push(this.getSpriteFrame(key)); + return frames; + } + }); + cc.SpriteAtlas = SpriteAtlas; + module.exports = SpriteAtlas; + }), {} ], + 69: [ (function(require, module, exports) { + "use strict"; + var EventTarget = require("../event/event-target"); + var INSET_LEFT = 0; + var INSET_TOP = 1; + var INSET_RIGHT = 2; + var INSET_BOTTOM = 3; + var temp_uvs = [ { + u: 0, + v: 0 + }, { + u: 0, + v: 0 + }, { + u: 0, + v: 0 + }, { + u: 0, + v: 0 + } ]; + var SpriteFrame = cc.Class({ + name: "cc.SpriteFrame", + extends: require("../assets/CCAsset"), + mixins: [ EventTarget ], + properties: { + _textureSetter: { + set: function set(texture) { + if (texture) { + false; + this._texture !== texture && this._refreshTexture(texture); + } + } + }, + insetTop: { + get: function get() { + return this._capInsets[INSET_TOP]; + }, + set: function set(value) { + this._capInsets[INSET_TOP] = value; + this._texture && this._calculateSlicedUV(); + } + }, + insetBottom: { + get: function get() { + return this._capInsets[INSET_BOTTOM]; + }, + set: function set(value) { + this._capInsets[INSET_BOTTOM] = value; + this._texture && this._calculateSlicedUV(); + } + }, + insetLeft: { + get: function get() { + return this._capInsets[INSET_LEFT]; + }, + set: function set(value) { + this._capInsets[INSET_LEFT] = value; + this._texture && this._calculateSlicedUV(); + } + }, + insetRight: { + get: function get() { + return this._capInsets[INSET_RIGHT]; + }, + set: function set(value) { + this._capInsets[INSET_RIGHT] = value; + this._texture && this._calculateSlicedUV(); + } + } + }, + ctor: function ctor() { + EventTarget.call(this); + var filename = arguments[0]; + var rect = arguments[1]; + var rotated = arguments[2]; + var offset = arguments[3]; + var originalSize = arguments[4]; + this._rect = null; + this.uv = []; + this._texture = null; + this._original = null; + this._offset = null; + this._originalSize = null; + this._rotated = false; + this._flipX = false; + this._flipY = false; + this.vertices = null; + this._capInsets = [ 0, 0, 0, 0 ]; + this.uvSliced = []; + false; + void 0 !== filename && this.setTexture(filename, rect, rotated, offset, originalSize); + }, + textureLoaded: function textureLoaded() { + return this._texture && this._texture.loaded; + }, + onTextureLoaded: function onTextureLoaded(callback, target) { + if (!this.textureLoaded()) { + this.once("load", callback, target); + this.ensureLoadTexture(); + return false; + } + callback.call(target); + return true; + }, + isRotated: function isRotated() { + return this._rotated; + }, + setRotated: function setRotated(bRotated) { + this._rotated = bRotated; + this._texture && this._calculateUV(); + }, + isFlipX: function isFlipX() { + return this._flipX; + }, + isFlipY: function isFlipY() { + return this._flipY; + }, + setFlipX: function setFlipX(flipX) { + this._flipX = flipX; + this._texture && this._calculateUV(); + }, + setFlipY: function setFlipY(flipY) { + this._flipY = flipY; + this._texture && this._calculateUV(); + }, + getRect: function getRect() { + return cc.rect(this._rect); + }, + setRect: function setRect(rect) { + this._rect = rect; + this._texture && this._calculateUV(); + }, + getOriginalSize: function getOriginalSize() { + return cc.size(this._originalSize); + }, + setOriginalSize: function setOriginalSize(size) { + if (this._originalSize) { + this._originalSize.width = size.width; + this._originalSize.height = size.height; + } else this._originalSize = cc.size(size); + }, + getTexture: function getTexture() { + return this._texture; + }, + _textureLoadedCallback: function _textureLoadedCallback() { + var self = this; + var texture = this._texture; + if (!texture) return; + var w = texture.width, h = texture.height; + self._rect ? self._checkRect(self._texture) : self._rect = cc.rect(0, 0, w, h); + self._originalSize || self.setOriginalSize(cc.size(w, h)); + self._offset || self.setOffset(cc.v2(0, 0)); + self._calculateUV(); + self.emit("load"); + }, + _refreshTexture: function _refreshTexture(texture) { + this._texture = texture; + texture.loaded ? this._textureLoadedCallback() : texture.once("load", this._textureLoadedCallback, this); + }, + getOffset: function getOffset() { + return cc.v2(this._offset); + }, + setOffset: function setOffset(offsets) { + this._offset = cc.v2(offsets); + }, + clone: function clone() { + return new SpriteFrame(this._texture, this.getRect(), this._rotated, this.getOffset(), this.getOriginalSize()); + }, + setTexture: function setTexture(texture, rect, rotated, offset, originalSize) { + if (1 === arguments.length && texture === this._texture) return; + this._rect = rect || null; + offset ? this.setOffset(offset) : this._offset = null; + originalSize ? this.setOriginalSize(originalSize) : this._originalSize = null; + this._rotated = rotated || false; + if ("string" === typeof texture) { + cc.errorID(3401); + return; + } + texture instanceof cc.Texture2D && this._refreshTexture(texture); + return true; + }, + ensureLoadTexture: function ensureLoadTexture() { + if (this._texture && !this._texture.loaded) { + this._refreshTexture(this._texture); + cc.assetManager.postLoadNative(this._texture); + } + }, + _checkRect: function _checkRect(texture) { + var rect = this._rect; + var maxX = rect.x, maxY = rect.y; + if (this._rotated) { + maxX += rect.height; + maxY += rect.width; + } else { + maxX += rect.width; + maxY += rect.height; + } + maxX > texture.width && cc.errorID(3300, texture.nativeUrl + "/" + this.name, maxX, texture.width); + maxY > texture.height && cc.errorID(3400, texture.nativeUrl + "/" + this.name, maxY, texture.height); + }, + _flipXY: function _flipXY(uvs) { + if (this._flipX) { + var tempVal = uvs[0]; + uvs[0] = uvs[1]; + uvs[1] = tempVal; + tempVal = uvs[2]; + uvs[2] = uvs[3]; + uvs[3] = tempVal; + } + if (this._flipY) { + var _tempVal = uvs[0]; + uvs[0] = uvs[2]; + uvs[2] = _tempVal; + _tempVal = uvs[1]; + uvs[1] = uvs[3]; + uvs[3] = _tempVal; + } + }, + _calculateSlicedUV: function _calculateSlicedUV() { + var rect = this._rect; + var atlasWidth = this._texture.width; + var atlasHeight = this._texture.height; + var leftWidth = this._capInsets[INSET_LEFT]; + var rightWidth = this._capInsets[INSET_RIGHT]; + var centerWidth = rect.width - leftWidth - rightWidth; + var topHeight = this._capInsets[INSET_TOP]; + var bottomHeight = this._capInsets[INSET_BOTTOM]; + var centerHeight = rect.height - topHeight - bottomHeight; + var uvSliced = this.uvSliced; + uvSliced.length = 0; + if (this._rotated) { + temp_uvs[0].u = rect.x / atlasWidth; + temp_uvs[1].u = (rect.x + bottomHeight) / atlasWidth; + temp_uvs[2].u = (rect.x + bottomHeight + centerHeight) / atlasWidth; + temp_uvs[3].u = (rect.x + rect.height) / atlasWidth; + temp_uvs[3].v = rect.y / atlasHeight; + temp_uvs[2].v = (rect.y + leftWidth) / atlasHeight; + temp_uvs[1].v = (rect.y + leftWidth + centerWidth) / atlasHeight; + temp_uvs[0].v = (rect.y + rect.width) / atlasHeight; + this._flipXY(temp_uvs); + for (var row = 0; row < 4; ++row) { + var rowD = temp_uvs[row]; + for (var col = 0; col < 4; ++col) { + var colD = temp_uvs[3 - col]; + uvSliced.push({ + u: rowD.u, + v: colD.v + }); + } + } + } else { + temp_uvs[0].u = rect.x / atlasWidth; + temp_uvs[1].u = (rect.x + leftWidth) / atlasWidth; + temp_uvs[2].u = (rect.x + leftWidth + centerWidth) / atlasWidth; + temp_uvs[3].u = (rect.x + rect.width) / atlasWidth; + temp_uvs[3].v = rect.y / atlasHeight; + temp_uvs[2].v = (rect.y + topHeight) / atlasHeight; + temp_uvs[1].v = (rect.y + topHeight + centerHeight) / atlasHeight; + temp_uvs[0].v = (rect.y + rect.height) / atlasHeight; + this._flipXY(temp_uvs); + for (var _row = 0; _row < 4; ++_row) { + var _rowD = temp_uvs[_row]; + for (var _col = 0; _col < 4; ++_col) { + var _colD = temp_uvs[_col]; + uvSliced.push({ + u: _colD.u, + v: _rowD.v + }); + } + } + } + }, + _setDynamicAtlasFrame: function _setDynamicAtlasFrame(frame) { + if (!frame) return; + this._original = { + _texture: this._texture, + _x: this._rect.x, + _y: this._rect.y + }; + this._texture = frame.texture; + this._rect.x = frame.x; + this._rect.y = frame.y; + this._calculateUV(); + }, + _resetDynamicAtlasFrame: function _resetDynamicAtlasFrame() { + if (!this._original) return; + this._rect.x = this._original._x; + this._rect.y = this._original._y; + this._texture = this._original._texture; + this._original = null; + this._calculateUV(); + this.emit("_resetDynamicAtlasFrame"); + }, + _calculateUV: function _calculateUV() { + var rect = this._rect, texture = this._texture, uv = this.uv, texw = texture.width, texh = texture.height; + if (this._rotated) { + var l = 0 === texw ? 0 : rect.x / texw; + var r = 0 === texw ? 0 : (rect.x + rect.height) / texw; + var b = 0 === texh ? 0 : (rect.y + rect.width) / texh; + var t = 0 === texh ? 0 : rect.y / texh; + uv[0] = l; + uv[1] = t; + uv[2] = l; + uv[3] = b; + uv[4] = r; + uv[5] = t; + uv[6] = r; + uv[7] = b; + } else { + var _l = 0 === texw ? 0 : rect.x / texw; + var _r = 0 === texw ? 0 : (rect.x + rect.width) / texw; + var _b = 0 === texh ? 0 : (rect.y + rect.height) / texh; + var _t = 0 === texh ? 0 : rect.y / texh; + uv[0] = _l; + uv[1] = _b; + uv[2] = _r; + uv[3] = _b; + uv[4] = _l; + uv[5] = _t; + uv[6] = _r; + uv[7] = _t; + } + if (this._flipX) { + var tempVal = uv[0]; + uv[0] = uv[2]; + uv[2] = tempVal; + tempVal = uv[1]; + uv[1] = uv[3]; + uv[3] = tempVal; + tempVal = uv[4]; + uv[4] = uv[6]; + uv[6] = tempVal; + tempVal = uv[5]; + uv[5] = uv[7]; + uv[7] = tempVal; + } + if (this._flipY) { + var _tempVal2 = uv[0]; + uv[0] = uv[4]; + uv[4] = _tempVal2; + _tempVal2 = uv[1]; + uv[1] = uv[5]; + uv[5] = _tempVal2; + _tempVal2 = uv[2]; + uv[2] = uv[6]; + uv[6] = _tempVal2; + _tempVal2 = uv[3]; + uv[3] = uv[7]; + uv[7] = _tempVal2; + } + var vertices = this.vertices; + if (vertices) { + vertices.nu.length = 0; + vertices.nv.length = 0; + for (var i = 0; i < vertices.u.length; i++) { + vertices.nu[i] = vertices.u[i] / texw; + vertices.nv[i] = vertices.v[i] / texh; + } + } + this._calculateSlicedUV(); + }, + _serialize: (false, false) && function(exporting, ctx) { + var rect = this._rect; + var offset = this._offset; + var size = this._originalSize; + var uuid; + var texture = this._texture; + texture && (uuid = texture._uuid); + if (!uuid) { + var url = this._textureFilename; + url && (uuid = Editor.Utils.UuidCache.urlToUuid(url)); + } + if (uuid && exporting) { + uuid = Editor.Utils.UuidUtils.compressUuid(uuid, true); + ctx.dependsOn("_textureSetter", uuid); + } + var vertices; + this.vertices && (vertices = { + triangles: this.vertices.triangles, + x: this.vertices.x, + y: this.vertices.y, + u: this.vertices.u, + v: this.vertices.v + }); + return { + name: this._name, + texture: !exporting && uuid || void 0, + atlas: exporting ? void 0 : this._atlasUuid, + rect: rect ? [ rect.x, rect.y, rect.width, rect.height ] : void 0, + offset: offset ? [ offset.x, offset.y ] : void 0, + originalSize: size ? [ size.width, size.height ] : void 0, + rotated: this._rotated ? 1 : void 0, + capInsets: this._capInsets, + vertices: vertices + }; + }, + _deserialize: function _deserialize(data, handle) { + var rect = data.rect; + rect && (this._rect = new cc.Rect(rect[0], rect[1], rect[2], rect[3])); + data.offset && this.setOffset(new cc.Vec2(data.offset[0], data.offset[1])); + data.originalSize && this.setOriginalSize(new cc.Size(data.originalSize[0], data.originalSize[1])); + this._rotated = 1 === data.rotated; + this._name = data.name; + var capInsets = data.capInsets; + if (capInsets) { + this._capInsets[INSET_LEFT] = capInsets[INSET_LEFT]; + this._capInsets[INSET_TOP] = capInsets[INSET_TOP]; + this._capInsets[INSET_RIGHT] = capInsets[INSET_RIGHT]; + this._capInsets[INSET_BOTTOM] = capInsets[INSET_BOTTOM]; + } + false; + this.vertices = data.vertices; + if (this.vertices) { + this.vertices.nu = []; + this.vertices.nv = []; + } + var textureUuid; + false; + }, + destroy: function destroy() { + cc.dynamicAtlasManager && cc.dynamicAtlasManager.deleteSpriteFrame(this); + this._super(); + } + }); + var proto = SpriteFrame.prototype; + proto.copyWithZone = proto.clone; + proto.copy = proto.clone; + proto.initWithTexture = proto.setTexture; + cc.SpriteFrame = SpriteFrame; + module.exports = SpriteFrame; + }), { + "../assets/CCAsset": 57, + "../event/event-target": 114 + } ], + 70: [ (function(require, module, exports) { + "use strict"; + var Font = require("./CCFont"); + var TTFFont = cc.Class({ + name: "cc.TTFFont", + extends: Font, + properties: { + _fontFamily: null, + _nativeAsset: { + type: cc.String, + get: function get() { + return this._fontFamily; + }, + set: function set(value) { + this._fontFamily = value || "Arial"; + }, + override: true + }, + _nativeDep: { + get: function get() { + return { + uuid: this._uuid, + __nativeName__: this._native, + ext: cc.path.extname(this._native), + __isNative__: true + }; + }, + override: true + } + } + }); + cc.TTFFont = module.exports = TTFFont; + }), { + "./CCFont": 61 + } ], + 71: [ (function(require, module, exports) { + "use strict"; + var TextAsset = cc.Class({ + name: "cc.TextAsset", + extends: cc.Asset, + properties: { + text: "" + }, + toString: function toString() { + return this.text; + } + }); + module.exports = cc.TextAsset = TextAsset; + }), {} ], + 72: [ (function(require, module, exports) { + "use strict"; + var _gfx = _interopRequireDefault(require("../../renderer/gfx")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var EventTarget = require("../event/event-target"); + var renderer = require("../renderer"); + require("../platform/CCClass"); + var GL_NEAREST = 9728; + var GL_LINEAR = 9729; + var GL_REPEAT = 10497; + var GL_CLAMP_TO_EDGE = 33071; + var GL_MIRRORED_REPEAT = 33648; + var GL_RGBA = 6408; + var CHAR_CODE_0 = 48; + var CHAR_CODE_1 = 49; + var idGenerater = new (require("../platform/id-generater"))("Tex"); + var CUSTOM_PIXEL_FORMAT = 1024; + var PixelFormat = cc.Enum({ + RGB565: _gfx["default"].TEXTURE_FMT_R5_G6_B5, + RGB5A1: _gfx["default"].TEXTURE_FMT_R5_G5_B5_A1, + RGBA4444: _gfx["default"].TEXTURE_FMT_R4_G4_B4_A4, + RGB888: _gfx["default"].TEXTURE_FMT_RGB8, + RGBA8888: _gfx["default"].TEXTURE_FMT_RGBA8, + RGBA32F: _gfx["default"].TEXTURE_FMT_RGBA32F, + A8: _gfx["default"].TEXTURE_FMT_A8, + I8: _gfx["default"].TEXTURE_FMT_L8, + AI8: _gfx["default"].TEXTURE_FMT_L8_A8, + RGB_PVRTC_2BPPV1: _gfx["default"].TEXTURE_FMT_RGB_PVRTC_2BPPV1, + RGBA_PVRTC_2BPPV1: _gfx["default"].TEXTURE_FMT_RGBA_PVRTC_2BPPV1, + RGB_A_PVRTC_2BPPV1: CUSTOM_PIXEL_FORMAT++, + RGB_PVRTC_4BPPV1: _gfx["default"].TEXTURE_FMT_RGB_PVRTC_4BPPV1, + RGBA_PVRTC_4BPPV1: _gfx["default"].TEXTURE_FMT_RGBA_PVRTC_4BPPV1, + RGB_A_PVRTC_4BPPV1: CUSTOM_PIXEL_FORMAT++, + RGB_ETC1: _gfx["default"].TEXTURE_FMT_RGB_ETC1, + RGBA_ETC1: CUSTOM_PIXEL_FORMAT++, + RGB_ETC2: _gfx["default"].TEXTURE_FMT_RGB_ETC2, + RGBA_ETC2: _gfx["default"].TEXTURE_FMT_RGBA_ETC2 + }); + var WrapMode = cc.Enum({ + REPEAT: GL_REPEAT, + CLAMP_TO_EDGE: GL_CLAMP_TO_EDGE, + MIRRORED_REPEAT: GL_MIRRORED_REPEAT + }); + var Filter = cc.Enum({ + LINEAR: GL_LINEAR, + NEAREST: GL_NEAREST + }); + var FilterIndex = { + 9728: 0, + 9729: 1 + }; + var _images = []; + var _sharedOpts = { + width: void 0, + height: void 0, + minFilter: void 0, + magFilter: void 0, + wrapS: void 0, + wrapT: void 0, + format: void 0, + genMipmaps: void 0, + images: void 0, + image: void 0, + flipY: void 0, + premultiplyAlpha: void 0 + }; + function _getSharedOptions() { + for (var key in _sharedOpts) _sharedOpts[key] = void 0; + _images.length = 0; + _sharedOpts.images = _images; + return _sharedOpts; + } + var Texture2D = cc.Class({ + name: "cc.Texture2D", + extends: require("../assets/CCAsset"), + mixins: [ EventTarget ], + properties: { + _nativeAsset: { + get: function get() { + return this._image; + }, + set: function set(data) { + data._compressed && data._data ? this.initWithData(data._data, this._format, data.width, data.height) : this.initWithElement(data); + }, + override: true + }, + _format: PixelFormat.RGBA8888, + _premultiplyAlpha: false, + _flipY: false, + _minFilter: Filter.LINEAR, + _magFilter: Filter.LINEAR, + _mipFilter: Filter.LINEAR, + _wrapS: WrapMode.CLAMP_TO_EDGE, + _wrapT: WrapMode.CLAMP_TO_EDGE, + _isAlphaAtlas: false, + _genMipmaps: false, + genMipmaps: { + get: function get() { + return this._genMipmaps; + }, + set: function set(genMipmaps) { + if (this._genMipmaps !== genMipmaps) { + var opts = _getSharedOptions(); + opts.genMipmaps = genMipmaps; + this.update(opts); + } + } + }, + _packable: true, + packable: { + get: function get() { + return this._packable; + }, + set: function set(val) { + this._packable = val; + } + }, + _nativeDep: { + get: function get() { + return { + __isNative__: true, + uuid: this._uuid, + ext: this._native, + __flipY__: this._flipY, + __premultiplyAlpha__: this._premultiplyAlpha + }; + }, + override: true + } + }, + statics: { + PixelFormat: PixelFormat, + WrapMode: WrapMode, + Filter: Filter, + _FilterIndex: FilterIndex, + extnames: [ ".png", ".jpg", ".jpeg", ".bmp", ".webp", ".pvr", ".pkm" ], + _parseExt: function _parseExt(extIdStr, defaultFormat) { + var device = cc.renderer.device; + var extIds = extIdStr.split("_"); + var defaultExt = ""; + var bestExt = ""; + var bestIndex = 999; + var bestFormat = defaultFormat; + var SupportTextureFormats = cc.macro.SUPPORT_TEXTURE_FORMATS; + for (var i = 0; i < extIds.length; i++) { + var extFormat = extIds[i].split("@"); + var tmpExt = extFormat[0]; + tmpExt = Texture2D.extnames[tmpExt.charCodeAt(0) - CHAR_CODE_0] || tmpExt; + var index = SupportTextureFormats.indexOf(tmpExt); + if (-1 !== index && index < bestIndex) { + var tmpFormat = extFormat[1] ? parseInt(extFormat[1]) : defaultFormat; + if (".pvr" === tmpExt && !device.ext("WEBGL_compressed_texture_pvrtc")) continue; + if (!(tmpFormat !== PixelFormat.RGB_ETC1 && tmpFormat !== PixelFormat.RGBA_ETC1 || device.ext("WEBGL_compressed_texture_etc1"))) continue; + if (!(tmpFormat !== PixelFormat.RGB_ETC2 && tmpFormat !== PixelFormat.RGBA_ETC2 || device.ext("WEBGL_compressed_texture_etc"))) continue; + if (".webp" === tmpExt && !cc.sys.capabilities.webp) continue; + bestIndex = index; + bestExt = tmpExt; + bestFormat = tmpFormat; + } else defaultExt || (defaultExt = tmpExt); + } + return { + bestExt: bestExt, + bestFormat: bestFormat, + defaultExt: defaultExt + }; + } + }, + ctor: function ctor() { + this._id = idGenerater.getNewId(); + this.loaded = false; + this.width = 0; + this.height = 0; + this._hashDirty = true; + this._hash = 0; + this._texture = null; + false; + this._multiMaterial = null; + }, + getImpl: function getImpl() { + this._texture || (this._texture = new renderer.Texture2D(renderer.device, {})); + return this._texture; + }, + getId: function getId() { + return this._id; + }, + toString: function toString() { + return this.nativeUrl || ""; + }, + update: function update(options) { + if (options) { + var updateImg = false; + void 0 !== options.width && (this.width = options.width); + void 0 !== options.height && (this.height = options.height); + if (void 0 !== options.minFilter) { + this._minFilter = options.minFilter; + options.minFilter = FilterIndex[options.minFilter]; + } + if (void 0 !== options.magFilter) { + this._magFilter = options.magFilter; + options.magFilter = FilterIndex[options.magFilter]; + } + if (void 0 !== options.mipFilter) { + this._mipFilter = options.mipFilter; + options.mipFilter = FilterIndex[options.mipFilter]; + } + void 0 !== options.wrapS && (this._wrapS = options.wrapS); + void 0 !== options.wrapT && (this._wrapT = options.wrapT); + void 0 !== options.format && (this._format = options.format); + if (void 0 !== options.flipY) { + this._flipY = options.flipY; + updateImg = true; + } + if (void 0 !== options.premultiplyAlpha) { + this._premultiplyAlpha = options.premultiplyAlpha; + updateImg = true; + } + void 0 !== options.genMipmaps && (this._genMipmaps = options.genMipmaps); + cc.sys.capabilities.imageBitmap && this._image instanceof ImageBitmap ? this._checkImageBitmap(this._upload.bind(this, options, updateImg)) : this._upload(options, updateImg); + } + }, + _upload: function _upload(options, updateImg) { + updateImg && this._image && (options.image = this._image); + if (options.images && options.images.length > 0) this._image = options.images[0]; else if (void 0 !== options.image) { + this._image = options.image; + if (!options.images) { + _images.length = 0; + options.images = _images; + } + options.images.push(options.image); + } + this._texture && this._texture.update(options); + this._hashDirty = true; + }, + initWithElement: function initWithElement(element) { + if (!element) return; + this._image = element; + if (element.complete || element instanceof HTMLCanvasElement) this.handleLoadedTexture(); else if (cc.sys.capabilities.imageBitmap && element instanceof ImageBitmap) this._checkImageBitmap(this.handleLoadedTexture.bind(this)); else { + var self = this; + element.addEventListener("load", (function() { + self.handleLoadedTexture(); + })); + element.addEventListener("error", (function(err) { + cc.warnID(3119, err.message); + })); + } + }, + initWithData: function initWithData(data, pixelFormat, pixelsWidth, pixelsHeight) { + var opts = _getSharedOptions(); + opts.image = data; + opts.images = [ opts.image ]; + opts.genMipmaps = this._genMipmaps; + opts.premultiplyAlpha = this._premultiplyAlpha; + opts.flipY = this._flipY; + opts.minFilter = FilterIndex[this._minFilter]; + opts.magFilter = FilterIndex[this._magFilter]; + opts.wrapS = this._wrapS; + opts.wrapT = this._wrapT; + opts.format = this._getGFXPixelFormat(pixelFormat); + opts.width = pixelsWidth; + opts.height = pixelsHeight; + this._texture ? this._texture.update(opts) : this._texture = new renderer.Texture2D(renderer.device, opts); + this.width = pixelsWidth; + this.height = pixelsHeight; + this._updateFormat(); + this._checkPackable(); + this.loaded = true; + this.emit("load"); + return true; + }, + getHtmlElementObj: function getHtmlElementObj() { + return this._image; + }, + destroy: function destroy() { + cc.sys.capabilities.imageBitmap && this._image instanceof ImageBitmap && this._image.close && this._image.close(); + this._packable && cc.dynamicAtlasManager && cc.dynamicAtlasManager.deleteAtlasTexture(this); + this.unlinkMaterial(); + this._image = null; + this._texture && this._texture.destroy(); + this._super(); + }, + getPixelFormat: function getPixelFormat() { + return this._format; + }, + hasPremultipliedAlpha: function hasPremultipliedAlpha() { + return this._premultiplyAlpha || false; + }, + isAlphaAtlas: function isAlphaAtlas() { + return this._isAlphaAtlas; + }, + handleLoadedTexture: function handleLoadedTexture() { + if (!this._image || !this._image.width || !this._image.height) return; + this.width = this._image.width; + this.height = this._image.height; + var opts = _getSharedOptions(); + opts.image = this._image; + opts.images = [ opts.image ]; + opts.width = this.width; + opts.height = this.height; + opts.genMipmaps = this._genMipmaps; + opts.format = this._getGFXPixelFormat(this._format); + opts.premultiplyAlpha = this._premultiplyAlpha; + opts.flipY = this._flipY; + opts.minFilter = FilterIndex[this._minFilter]; + opts.magFilter = FilterIndex[this._magFilter]; + opts.wrapS = this._wrapS; + opts.wrapT = this._wrapT; + this._texture ? this._texture.update(opts) : this._texture = new renderer.Texture2D(renderer.device, opts); + this._updateFormat(); + this._checkPackable(); + this.loaded = true; + this.emit("load"); + cc.macro.CLEANUP_IMAGE_CACHE && (this._image instanceof HTMLImageElement ? this._clearImage() : cc.sys.capabilities.imageBitmap && this._image instanceof ImageBitmap && this._image.close && this._image.close()); + }, + description: function description() { + return ""; + }, + releaseTexture: function releaseTexture() { + this._image = null; + this._texture && this._texture.destroy(); + }, + setWrapMode: function setWrapMode(wrapS, wrapT) { + if (this._wrapS !== wrapS || this._wrapT !== wrapT) { + var opts = _getSharedOptions(); + opts.wrapS = wrapS; + opts.wrapT = wrapT; + this.update(opts); + } + }, + setFilters: function setFilters(minFilter, magFilter) { + if (this._minFilter !== minFilter || this._magFilter !== magFilter) { + var opts = _getSharedOptions(); + opts.minFilter = minFilter; + opts.magFilter = magFilter; + this.update(opts); + } + }, + setFlipY: function setFlipY(flipY) { + if (this._flipY !== flipY) { + var opts = _getSharedOptions(); + opts.flipY = flipY; + opts.premultiplyAlpha = this._premultiplyAlpha; + this.update(opts); + } + }, + setPremultiplyAlpha: function setPremultiplyAlpha(premultiply) { + if (this._premultiplyAlpha !== premultiply) { + var opts = _getSharedOptions(); + opts.flipY = this._flipY; + opts.premultiplyAlpha = premultiply; + this.update(opts); + } + }, + _updateFormat: function _updateFormat() { + this._isAlphaAtlas = this._format === PixelFormat.RGBA_ETC1 || this._format === PixelFormat.RGB_A_PVRTC_4BPPV1 || this._format === PixelFormat.RGB_A_PVRTC_2BPPV1; + false; + }, + _checkPackable: function _checkPackable() { + var dynamicAtlas = cc.dynamicAtlasManager; + if (!dynamicAtlas) return; + if (this._isCompressed()) { + this._packable = false; + return; + } + var w = this.width, h = this.height; + if (!this._image || w > dynamicAtlas.maxFrameSize || h > dynamicAtlas.maxFrameSize || this._getHash() !== dynamicAtlas.Atlas.DEFAULT_HASH) { + this._packable = false; + return; + } + this._image && this._image instanceof HTMLCanvasElement && (this._packable = true); + }, + _getOpts: function _getOpts() { + var opts = _getSharedOptions(); + opts.width = this.width; + opts.height = this.height; + opts.genMipmaps = this._genMipmaps; + opts.format = this._format; + opts.premultiplyAlpha = this._premultiplyAlpha; + opts.anisotropy = this._anisotropy; + opts.flipY = this._flipY; + opts.minFilter = FilterIndex[this._minFilter]; + opts.magFilter = FilterIndex[this._magFilter]; + opts.mipFilter = FilterIndex[this._mipFilter]; + opts.wrapS = this._wrapS; + opts.wrapT = this._wrapT; + return opts; + }, + _getGFXPixelFormat: function _getGFXPixelFormat(format) { + format === PixelFormat.RGBA_ETC1 ? format = PixelFormat.RGB_ETC1 : format === PixelFormat.RGB_A_PVRTC_4BPPV1 ? format = PixelFormat.RGB_PVRTC_4BPPV1 : format === PixelFormat.RGB_A_PVRTC_2BPPV1 && (format = PixelFormat.RGB_PVRTC_2BPPV1); + return format; + }, + _resetUnderlyingMipmaps: function _resetUnderlyingMipmaps(mipmapSources) { + var opts = this._getOpts(); + opts.images = mipmapSources || [ null ]; + this._texture ? this._texture.update(opts) : this._texture = new renderer.Texture2D(renderer.device, opts); + }, + _serialize: (false, false) && function() { + var extId = ""; + var exportedExts = this._exportedExts; + !exportedExts && this._native && (exportedExts = [ this._native ]); + if (exportedExts) { + var exts = []; + for (var i = 0; i < exportedExts.length; i++) { + var _extId = ""; + var ext = exportedExts[i]; + if (ext) { + var extFormat = ext.split("@"); + _extId = Texture2D.extnames.indexOf(extFormat[0]); + _extId < 0 && (_extId = ext); + extFormat[1] && (_extId += "@" + extFormat[1]); + } + exts.push(_extId); + } + extId = exts.join("_"); + } + var asset = extId + "," + this._minFilter + "," + this._magFilter + "," + this._wrapS + "," + this._wrapT + "," + (this._premultiplyAlpha ? 1 : 0) + "," + (this._genMipmaps ? 1 : 0) + "," + (this._packable ? 1 : 0); + return asset; + }, + _deserialize: function _deserialize(data) { + var fields = data.split(","); + var extIdStr = fields[0]; + if (extIdStr) { + var result = Texture2D._parseExt(extIdStr, this._format); + if (result.bestExt) { + this._setRawAsset(result.bestExt); + this._format = result.bestFormat; + } else { + if (!result.defaultExt) throw new Error(cc.debug.getError(3121)); + this._setRawAsset(result.defaultExt); + cc.warnID(3120, result.defaultExt, result.defaultExt); + } + } + if (8 === fields.length) { + this._minFilter = parseInt(fields[1]); + this._magFilter = parseInt(fields[2]); + this._wrapS = parseInt(fields[3]); + this._wrapT = parseInt(fields[4]); + this._premultiplyAlpha = fields[5].charCodeAt(0) === CHAR_CODE_1; + this._genMipmaps = fields[6].charCodeAt(0) === CHAR_CODE_1; + this._packable = fields[7].charCodeAt(0) === CHAR_CODE_1; + } + }, + _getHash: function _getHash() { + if (!this._hashDirty) return this._hash; + var genMipmaps = this._genMipmaps ? 1 : 0; + var premultiplyAlpha = this._premultiplyAlpha ? 1 : 0; + var flipY = this._flipY ? 1 : 0; + var minFilter = this._minFilter === Filter.LINEAR ? 1 : 2; + var magFilter = this._magFilter === Filter.LINEAR ? 1 : 2; + var wrapS = this._wrapS === WrapMode.REPEAT ? 1 : this._wrapS === WrapMode.CLAMP_TO_EDGE ? 2 : 3; + var wrapT = this._wrapT === WrapMode.REPEAT ? 1 : this._wrapT === WrapMode.CLAMP_TO_EDGE ? 2 : 3; + var pixelFormat = this._format; + var image = this._image; + false; + this._hash = Number("" + minFilter + magFilter + pixelFormat + wrapS + wrapT + genMipmaps + premultiplyAlpha + flipY); + this._hashDirty = false; + return this._hash; + }, + _isCompressed: function _isCompressed() { + return this._format < PixelFormat.A8 || this._format > PixelFormat.RGBA32F; + }, + _clearImage: function _clearImage() { + this._image.src = ""; + }, + _checkImageBitmap: function _checkImageBitmap(cb) { + var _this = this; + var image = this._image; + var flipY = this._flipY; + var premultiplyAlpha = this._premultiplyAlpha; + this._flipY !== image.flipY || this._premultiplyAlpha !== image.premultiplyAlpha ? createImageBitmap(image, { + imageOrientation: flipY !== image.flipY ? "flipY" : "none", + premultiplyAlpha: premultiplyAlpha ? "premultiply" : "none" + }).then((function(result) { + image.close && image.close(); + result.flipY = flipY; + result.premultiplyAlpha = premultiplyAlpha; + _this._image = result; + cb(); + }), (function(err) { + cc.error(err.message); + })) : cb(); + }, + linkMaterial: function linkMaterial(material, index) { + var handler = material.getMultiHandler(); + if (handler) { + if (null == index) { + if (-1 === handler.autoSetTexture(this)) return false; + } else handler.setTexture(index, this); + this.unlinkMaterial(); + this._multiMaterial = material; + return true; + } + return false; + }, + unlinkMaterial: function unlinkMaterial() { + if (this._multiMaterial) { + var handler = this._multiMaterial.getMultiHandler(); + var _texture = this.getImpl(); + handler.removeTexture(_texture); + this._multiMaterial = null; + } + }, + getLinkedMaterial: function getLinkedMaterial() { + return this._multiMaterial; + }, + hasLinkedMaterial: function hasLinkedMaterial() { + return !!this._multiMaterial; + } + }); + cc.Texture2D = module.exports = Texture2D; + }), { + "../../renderer/gfx": 247, + "../assets/CCAsset": 57, + "../event/event-target": 114, + "../platform/CCClass": 121, + "../platform/id-generater": 138, + "../renderer": 152 + } ], + 73: [ (function(require, module, exports) { + "use strict"; + require("./CCAsset"); + require("./CCFont"); + require("./CCPrefab"); + require("./CCAudioClip"); + require("./CCScripts"); + require("./CCSceneAsset"); + require("./CCSpriteFrame"); + require("./CCTexture2D"); + require("./CCRenderTexture"); + require("./CCTTFFont"); + require("./CCSpriteAtlas"); + require("./CCBitmapFont"); + require("./CCLabelAtlas"); + require("./CCTextAsset"); + require("./CCJsonAsset"); + require("./CCBufferAsset"); + require("./material"); + }), { + "./CCAsset": 57, + "./CCAudioClip": 58, + "./CCBitmapFont": 59, + "./CCBufferAsset": 60, + "./CCFont": 61, + "./CCJsonAsset": 62, + "./CCLabelAtlas": 63, + "./CCPrefab": 64, + "./CCRenderTexture": 65, + "./CCSceneAsset": 66, + "./CCScripts": 67, + "./CCSpriteAtlas": 68, + "./CCSpriteFrame": 69, + "./CCTTFFont": 70, + "./CCTextAsset": 71, + "./CCTexture2D": 72, + "./material": 80 + } ], + 74: [ (function(require, module, exports) { + "use strict"; + var _CCAsset = _interopRequireDefault(require("../CCAsset")); + var _effectParser = require("./effect-parser"); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var EffectAsset = cc.Class({ + name: "cc.EffectAsset", + extends: _CCAsset["default"], + ctor: function ctor() { + this._effect = null; + }, + properties: { + properties: Object, + techniques: [], + shaders: [] + }, + onLoad: function onLoad() { + if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS) return; + var lib = cc.renderer._forward._programLib; + for (var i = 0; i < this.shaders.length; i++) lib.define(this.shaders[i]); + this._initEffect(); + }, + _initEffect: function _initEffect() { + if (this._effect) return; + this._effect = (0, _effectParser.parseEffect)(this); + Object.freeze(this._effect); + }, + getInstantiatedEffect: function getInstantiatedEffect() { + this._initEffect(); + return this._effect.clone(); + }, + getEffect: function getEffect() { + this._initEffect(); + return this._effect; + } + }); + module.exports = cc.EffectAsset = EffectAsset; + }), { + "../CCAsset": 57, + "./effect-parser": 77 + } ], + 75: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var Asset = require("../CCAsset"); + var Texture = require("../CCTexture2D"); + var PixelFormat = Texture.PixelFormat; + var EffectAsset = require("./CCEffectAsset"); + var textureUtil = require("../../utils/texture-util"); + var gfx = cc.gfx; + var BUILTIN_NAME = cc.Enum({ + SPRITE: "2d-sprite", + GRAY_SPRITE: "2d-gray-sprite", + UNLIT: "unlit" + }); + var Material = cc.Class({ + name: "cc.Material", + extends: Asset, + ctor: function ctor() { + this.loaded = false; + this._manualHash = false; + this._dirty = true; + this._effect = null; + this._multiHandler = null; + }, + properties: { + _defines: { + default: void 0, + type: Object + }, + _props: { + default: void 0, + type: Object + }, + _effectAsset: { + type: EffectAsset, + default: null + }, + _techniqueIndex: 0, + _techniqueData: Object, + effectName: void 0, + effectAsset: { + get: function get() { + return this._effectAsset; + }, + set: function set(asset) { + if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS) return; + this._effectAsset = asset; + if (!asset) { + cc.error("Can not set an empty effect asset."); + return; + } + this._effect = this._effectAsset.getInstantiatedEffect(); + this.updateMultiSupport(); + } + }, + effect: { + get: function get() { + return this._effect; + } + }, + techniqueIndex: { + get: function get() { + return this._techniqueIndex; + }, + set: function set(v) { + this._techniqueIndex = v; + this._effect.switchTechnique(v); + this.updateMultiSupport(); + } + } + }, + statics: { + getBuiltinMaterial: function getBuiltinMaterial(name) { + if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS) return new cc.Material(); + return cc.assetManager.builtins.getBuiltin("material", "builtin-" + name); + }, + BUILTIN_NAME: BUILTIN_NAME, + createWithBuiltin: function createWithBuiltin(effectName, techniqueIndex) { + void 0 === techniqueIndex && (techniqueIndex = 0); + var effectAsset = cc.assetManager.builtins.getBuiltin("effect", "builtin-" + effectName); + return Material.create(effectAsset, techniqueIndex); + }, + create: function create(effectAsset, techniqueIndex) { + void 0 === techniqueIndex && (techniqueIndex = 0); + if (!effectAsset) return null; + var material = new Material(); + material.effectAsset = effectAsset; + material.techniqueIndex = techniqueIndex; + return material; + } + }, + setProperty: function setProperty(name, val, passIdx, directly) { + if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS) return; + "string" === typeof passIdx && (passIdx = parseInt(passIdx)); + if (val instanceof Texture) { + var isAlphaAtlas = val.isAlphaAtlas(); + var key = "CC_USE_ALPHA_ATLAS_" + name; + var def = this.getDefine(key, passIdx); + (isAlphaAtlas || def) && this.define(key, isAlphaAtlas); + val.loaded || cc.assetManager.postLoadNative(val); + } + this._effect.setProperty(name, val, passIdx, directly); + }, + getProperty: function getProperty(name, passIdx) { + "string" === typeof passIdx && (passIdx = parseInt(passIdx)); + return this._effect.getProperty(name, passIdx); + }, + define: function define(name, val, passIdx, force) { + if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS) return; + "string" === typeof passIdx && (passIdx = parseInt(passIdx)); + this._effect.define(name, val, passIdx, force); + }, + getDefine: function getDefine(name, passIdx) { + "string" === typeof passIdx && (passIdx = parseInt(passIdx)); + return this._effect.getDefine(name, passIdx); + }, + setCullMode: function setCullMode(cullMode, passIdx) { + void 0 === cullMode && (cullMode = gfx.CULL_BACK); + this._effect.setCullMode(cullMode, passIdx); + }, + setDepth: function setDepth(depthTest, depthWrite, depthFunc, passIdx) { + void 0 === depthTest && (depthTest = false); + void 0 === depthWrite && (depthWrite = false); + void 0 === depthFunc && (depthFunc = gfx.DS_FUNC_LESS); + this._effect.setDepth(depthTest, depthWrite, depthFunc, passIdx); + }, + setBlend: function setBlend(enabled, blendEq, blendSrc, blendDst, blendAlphaEq, blendSrcAlpha, blendDstAlpha, blendColor, passIdx) { + void 0 === enabled && (enabled = false); + void 0 === blendEq && (blendEq = gfx.BLEND_FUNC_ADD); + void 0 === blendSrc && (blendSrc = gfx.BLEND_SRC_ALPHA); + void 0 === blendDst && (blendDst = gfx.BLEND_ONE_MINUS_SRC_ALPHA); + void 0 === blendAlphaEq && (blendAlphaEq = gfx.BLEND_FUNC_ADD); + void 0 === blendSrcAlpha && (blendSrcAlpha = gfx.BLEND_SRC_ALPHA); + void 0 === blendDstAlpha && (blendDstAlpha = gfx.BLEND_ONE_MINUS_SRC_ALPHA); + void 0 === blendColor && (blendColor = 4294967295); + this._effect.setBlend(enabled, blendEq, blendSrc, blendDst, blendAlphaEq, blendSrcAlpha, blendDstAlpha, blendColor, passIdx); + }, + setStencilEnabled: function setStencilEnabled(stencilTest, passIdx) { + void 0 === stencilTest && (stencilTest = gfx.STENCIL_INHERIT); + this._effect.setStencilEnabled(stencilTest, passIdx); + }, + setStencil: function setStencil(stencilTest, stencilFunc, stencilRef, stencilMask, stencilFailOp, stencilZFailOp, stencilZPassOp, stencilWriteMask, passIdx) { + void 0 === stencilTest && (stencilTest = gfx.STENCIL_INHERIT); + void 0 === stencilFunc && (stencilFunc = gfx.DS_FUNC_ALWAYS); + void 0 === stencilRef && (stencilRef = 0); + void 0 === stencilMask && (stencilMask = 255); + void 0 === stencilFailOp && (stencilFailOp = gfx.STENCIL_OP_KEEP); + void 0 === stencilZFailOp && (stencilZFailOp = gfx.STENCIL_OP_KEEP); + void 0 === stencilZPassOp && (stencilZPassOp = gfx.STENCIL_OP_KEEP); + void 0 === stencilWriteMask && (stencilWriteMask = 255); + this._effect.setStencil(stencilTest, stencilFunc, stencilRef, stencilMask, stencilFailOp, stencilZFailOp, stencilZPassOp, stencilWriteMask, passIdx); + }, + updateHash: function updateHash(hash) { + this._manualHash = hash; + this._effect && this._effect.updateHash(hash); + }, + getHash: function getHash() { + return this._manualHash || this._effect && this._effect.getHash(); + }, + onLoad: function onLoad() { + this.effectAsset = this._effectAsset; + if (!this._effect) return; + this._techniqueIndex && this._effect.switchTechnique(this._techniqueIndex); + this._techniqueData = this._techniqueData || {}; + var passDatas = this._techniqueData; + for (var index in passDatas) { + index = parseInt(index); + var passData = passDatas[index]; + if (!passData) continue; + for (var def in passData.defines) this.define(def, passData.defines[def], index); + for (var prop in passData.props) this.setProperty(prop, passData.props[prop], index); + } + this.updateMultiSupport(); + this._multiHandler && this._multiHandler.syncTextures(); + }, + updateMultiSupport: function updateMultiSupport() { + var passes = this._effect.technique.passes; + passes.length > 0 && passes[0].getDefine("USE_MULTI_TEXTURE") ? this.setMultiSupport(true) : this.setMultiSupport(false); + }, + isMultiSupport: function isMultiSupport() { + return !!this._multiHandler; + }, + setMultiSupport: function setMultiSupport(bool) { + bool ? this._multiHandler ? this._multiHandler.syncTextures() : this._multiHandler = new cc.sp.MultiHandler(this) : bool || (this._multiHandler = null); + }, + getMultiHandler: function getMultiHandler() { + return this._multiHandler; + } + }); + var _default = Material; + exports["default"] = _default; + cc.Material = Material; + module.exports = exports["default"]; + }), { + "../../utils/texture-util": 213, + "../CCAsset": 57, + "../CCTexture2D": 72, + "./CCEffectAsset": 74 + } ], + 76: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _pass = _interopRequireDefault(require("../../../renderer/core/pass")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + var gfx = cc.gfx; + var EffectBase = (function() { + function EffectBase() { + this._dirty = true; + this._dirtyCode = 0; + this._name = ""; + this._technique = null; + } + var _proto = EffectBase.prototype; + _proto._createPassProp = function _createPassProp(name, pass) { + var prop = pass._properties[name]; + if (!prop) return; + var uniform = Object.create(null); + uniform.name = name; + uniform.type = prop.type; + prop.value instanceof Float32Array ? uniform.value = new Float32Array(prop.value) : prop.value instanceof Float64Array ? uniform.value = new Float64Array(prop.value) : uniform.value = prop.value; + pass._properties[name] = uniform; + return uniform; + }; + _proto._setPassProperty = function _setPassProperty(name, value, pass, directly) { + var properties = pass._properties; + properties.hasOwnProperty(name) || this._createPassProp(name, pass); + if (properties[name].value === value) return true; + this._dirty = true; + this._dirtyCode++; + return _pass["default"].prototype.setProperty.call(pass, name, value, directly); + }; + _proto.setProperty = function setProperty(name, value, passIdx, directly) { + var success = false; + var passes = this.passes; + var start = 0, end = passes.length; + void 0 !== passIdx && (start = passIdx, end = passIdx + 1); + for (var i = start; i < end; i++) this._setPassProperty(name, value, passes[i], directly) && (success = true); + success || cc.warnID(9103, this.name, name); + }; + _proto.getProperty = function getProperty(name, passIdx) { + var passes = this.passes; + if (passIdx >= passes.length) return; + var start = 0, end = passes.length; + void 0 !== passIdx && (start = passIdx, end = passIdx + 1); + for (var i = start; i < end; i++) { + var value = passes[i].getProperty(name); + if (void 0 !== value) return value; + } + }; + _proto.define = function define(name, value, passIdx, force) { + var success = false; + var passes = this.passes; + var start = 0, end = passes.length; + void 0 !== passIdx && (start = passIdx, end = passIdx + 1); + for (var i = start; i < end; i++) passes[i].define(name, value, force) && (success = true); + success || cc.warnID(9104, this.name, name); + }; + _proto.getDefine = function getDefine(name, passIdx) { + var passes = this.passes; + if (passIdx >= passes.length) return; + var start = 0, end = passes.length; + void 0 !== passIdx && (start = passIdx, end = passIdx + 1); + for (var i = start; i < end; i++) { + var value = passes[i].getDefine(name); + if (void 0 !== value) return value; + } + }; + _proto.setCullMode = function setCullMode(cullMode, passIdx) { + void 0 === cullMode && (cullMode = gfx.CULL_BACK); + var passes = this.passes; + var start = 0, end = passes.length; + void 0 !== passIdx && (start = passIdx, end = passIdx + 1); + for (var i = start; i < end; i++) passes[i].setCullMode(cullMode); + this._dirty = true; + this._dirtyCode++; + }; + _proto.setDepth = function setDepth(depthTest, depthWrite, depthFunc, passIdx) { + var passes = this.passes; + var start = 0, end = passes.length; + void 0 !== passIdx && (start = passIdx, end = passIdx + 1); + for (var i = start; i < end; i++) passes[i].setDepth(depthTest, depthWrite, depthFunc); + this._dirty = true; + this._dirtyCode++; + }; + _proto.setBlend = function setBlend(enabled, blendEq, blendSrc, blendDst, blendAlphaEq, blendSrcAlpha, blendDstAlpha, blendColor, passIdx) { + var passes = this.passes; + var start = 0, end = passes.length; + void 0 !== passIdx && (start = passIdx, end = passIdx + 1); + for (var i = start; i < end; i++) passes[i].setBlend(enabled, blendEq, blendSrc, blendDst, blendAlphaEq, blendSrcAlpha, blendDstAlpha, blendColor); + this._dirty = true; + this._dirtyCode++; + }; + _proto.setStencilEnabled = function setStencilEnabled(stencilTest, passIdx) { + void 0 === stencilTest && (stencilTest = gfx.STENCIL_INHERIT); + var passes = this.passes; + var start = 0, end = passes.length; + void 0 !== passIdx && (start = passIdx, end = passIdx + 1); + for (var i = start; i < end; i++) passes[i].setStencilEnabled(stencilTest); + this._dirty = true; + this._dirtyCode++; + }; + _proto.setStencil = function setStencil(enabled, stencilFunc, stencilRef, stencilMask, stencilFailOp, stencilZFailOp, stencilZPassOp, stencilWriteMask, passIdx) { + var passes = this.passes; + var start = 0, end = passes.length; + void 0 !== passIdx && (start = passIdx, end = passIdx + 1); + for (var i = start; i < end; i++) { + var pass = passes[i]; + pass.setStencilFront(enabled, stencilFunc, stencilRef, stencilMask, stencilFailOp, stencilZFailOp, stencilZPassOp, stencilWriteMask); + pass.setStencilBack(enabled, stencilFunc, stencilRef, stencilMask, stencilFailOp, stencilZFailOp, stencilZPassOp, stencilWriteMask); + } + this._dirty = true; + this._dirtyCode++; + }; + _createClass(EffectBase, [ { + key: "name", + get: function get() { + return this._name; + } + }, { + key: "technique", + get: function get() { + return this._technique; + } + }, { + key: "passes", + get: function get() { + return []; + } + } ]); + return EffectBase; + })(); + exports["default"] = EffectBase; + cc.EffectBase = EffectBase; + module.exports = exports["default"]; + }), { + "../../../renderer/core/pass": 238 + } ], + 77: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.parseEffect = parseEffect; + var _pass = _interopRequireDefault(require("../../../renderer/core/pass")); + var _types = require("../../../renderer/types"); + var _enums = _interopRequireDefault(require("../../../renderer/enums")); + var _effect = _interopRequireDefault(require("./effect")); + var _technique = _interopRequireDefault(require("../../../renderer/core/technique")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function getInvolvedProgram(programName) { + var lib = cc.renderer._forward._programLib; + return lib.getTemplate(programName); + } + function parseProperties(effectAsset, passJson) { + var propertiesJson = passJson.properties || {}; + var program = getInvolvedProgram(passJson.program); + var _loop = function _loop(prop) { + var uniformInfo = program.uniforms.find((function(u) { + return u.name === prop; + })); + if (!uniformInfo) { + cc.warnID(9107, effectAsset.name, prop); + return "continue"; + } + }; + for (var prop in propertiesJson) { + var _ret = _loop(prop); + if ("continue" === _ret) continue; + } + var properties = {}; + program.uniforms.forEach((function(u) { + var name = u.name, prop = properties[name] = Object.assign({}, u), propInfo = propertiesJson[name]; + var value; + value = propInfo ? propInfo.type === _enums["default"].PARAM_TEXTURE_2D ? null : propInfo.type === _enums["default"].PARAM_INT || propInfo.type === _enums["default"].PARAM_FLOAT ? Array.isArray(propInfo.value) ? propInfo.value[0] : propInfo.value : new Float32Array(propInfo.value) : _types.enums2default[u.type]; + void 0 === value && (value = null); + prop.value = value; + })); + return properties; + } + function passDefines(pass) { + var defines = {}; + var program = getInvolvedProgram(pass.program); + program.defines.forEach((function(d) { + defines[d.name] = _types.enums2default[d.type]; + })); + return defines; + } + function parseTechniques(effectAsset) { + var techNum = effectAsset.techniques.length; + var techniques = new Array(techNum); + for (var j = 0; j < techNum; ++j) { + var tech = effectAsset.techniques[j]; + var techName = tech.name || j; + var passNum = tech.passes.length; + var passes = new Array(passNum); + for (var k = 0; k < passNum; ++k) { + var pass = tech.passes[k]; + var passName = pass.name || k; + var detailName = effectAsset.name + "-" + techName + "-" + passName; + var stage = pass.stage || "opaque"; + var properties = parseProperties(effectAsset, pass); + var defines = passDefines(pass); + var newPass = passes[k] = new _pass["default"](passName, detailName, pass.program, stage, properties, defines); + pass.rasterizerState && newPass.setCullMode(pass.rasterizerState.cullMode); + var blendState = pass.blendState && pass.blendState.targets[0]; + blendState && newPass.setBlend(blendState.blend, blendState.blendEq, blendState.blendSrc, blendState.blendDst, blendState.blendAlphaEq, blendState.blendSrcAlpha, blendState.blendDstAlpha, blendState.blendColor); + var depthStencilState = pass.depthStencilState; + if (depthStencilState) { + newPass.setDepth(depthStencilState.depthTest, depthStencilState.depthWrite, depthStencilState.depthFunc); + newPass.setStencilFront(depthStencilState.stencilTest, depthStencilState.stencilFuncFront, depthStencilState.stencilRefFront, depthStencilState.stencilMaskFront, depthStencilState.stencilFailOpFront, depthStencilState.stencilZFailOpFront, depthStencilState.stencilZPassOpFront, depthStencilState.stencilWriteMaskFront); + newPass.setStencilBack(depthStencilState.stencilTest, depthStencilState.stencilFuncBack, depthStencilState.stencilRefBack, depthStencilState.stencilMaskBack, depthStencilState.stencilFailOpBack, depthStencilState.stencilZFailOpBack, depthStencilState.stencilZPassOpBack, depthStencilState.stencilWriteMaskBack); + } + } + techniques[j] = new _technique["default"](techName, passes); + } + return techniques; + } + function parseEffect(effect) { + var techniques = parseTechniques(effect); + return new _effect["default"](effect.name, techniques, 0, effect); + } + false; + }), { + "../../../renderer/core/pass": 238, + "../../../renderer/core/technique": 240, + "../../../renderer/enums": 242, + "../../../renderer/types": 270, + "./effect": 79 + } ], + 78: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _murmurhash2_gc = _interopRequireDefault(require("../../../renderer/murmurhash2_gc")); + var _utils = _interopRequireDefault(require("./utils")); + var _effectBase = _interopRequireDefault(require("./effect-base")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var gfx = cc.gfx; + var EffectVariant = (function(_EffectBase) { + _inheritsLoose(EffectVariant, _EffectBase); + function EffectVariant(effect) { + var _this; + _this = _EffectBase.call(this) || this; + _this._effect = void 0; + _this._passes = []; + _this._stagePasses = {}; + _this._hash = 0; + _this._effectDirtyCode = 0; + _this.init(effect); + return _this; + } + var _proto = EffectVariant.prototype; + _proto._onEffectChanged = function _onEffectChanged() {}; + _proto.init = function init(effect) { + effect instanceof EffectVariant && (effect = effect.effect); + this._effect = effect; + this._dirty = true; + if (effect) { + var passes = effect.passes; + var variantPasses = this._passes; + variantPasses.length = 0; + var stagePasses = this._stagePasses = {}; + for (var i = 0; i < passes.length; i++) { + var variant = variantPasses[i] = Object.setPrototypeOf({}, passes[i]); + variant._properties = Object.setPrototypeOf({}, passes[i]._properties); + variant._defines = Object.setPrototypeOf({}, passes[i]._defines); + stagePasses[variant._stage] || (stagePasses[variant._stage] = []); + stagePasses[variant._stage].push(variant); + } + } + }; + _proto.updateHash = function updateHash(hash) {}; + _proto.getHash = function getHash() { + var effect = this._effect; + if (!this._dirty && (!effect || this._effectDirtyCode === effect._dirtyCode)) return this._hash; + this._dirty = false; + var hash = ""; + hash += _utils["default"].serializePasses(this._passes); + if (effect) { + this._effectDirtyCode = effect._dirtyCode; + hash += _utils["default"].serializePasses(effect.passes); + } + this._hash = (0, _murmurhash2_gc["default"])(hash, 666); + this.updateHash(this._hash); + return this._hash; + }; + _createClass(EffectVariant, [ { + key: "effect", + get: function get() { + return this._effect; + } + }, { + key: "name", + get: function get() { + return this._effect && this._effect.name + " (variant)"; + } + }, { + key: "passes", + get: function get() { + return this._passes; + } + }, { + key: "stagePasses", + get: function get() { + return this._stagePasses; + } + } ]); + return EffectVariant; + })(_effectBase["default"]); + exports["default"] = EffectVariant; + cc.EffectVariant = EffectVariant; + module.exports = exports["default"]; + }), { + "../../../renderer/murmurhash2_gc": 265, + "./effect-base": 76, + "./utils": 83 + } ], + 79: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _effectBase = _interopRequireDefault(require("./effect-base")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var Effect = (function(_EffectBase) { + _inheritsLoose(Effect, _EffectBase); + function Effect(name, techniques, techniqueIndex, asset) { + var _this; + _this = _EffectBase.call(this) || this; + _this._techniques = []; + _this._asset = null; + _this.init(name, techniques, techniqueIndex, asset, true); + return _this; + } + var _proto = Effect.prototype; + _proto.init = function init(name, techniques, techniqueIndex, asset, createNative) { + this._name = name; + this._techniques = techniques; + this._technique = techniques[techniqueIndex]; + this._asset = asset; + }; + _proto.switchTechnique = function switchTechnique(index) { + if (index >= this._techniques.length) { + cc.warn("Can not switch to technique with index [" + index + "]"); + return; + } + this._technique = this._techniques[index]; + }; + _proto.clear = function clear() { + this._techniques = []; + }; + _proto.clone = function clone() { + var techniques = []; + for (var i = 0; i < this._techniques.length; i++) techniques.push(this._techniques[i].clone()); + var techniqueIndex = this._techniques.indexOf(this._technique); + return new Effect(this._name, techniques, techniqueIndex, this._asset); + }; + _createClass(Effect, [ { + key: "technique", + get: function get() { + return this._technique; + } + }, { + key: "passes", + get: function get() { + return this._technique.passes; + } + } ]); + return Effect; + })(_effectBase["default"]); + exports["default"] = Effect; + cc.Effect = Effect; + module.exports = exports["default"]; + }), { + "./effect-base": 76 + } ], + 80: [ (function(require, module, exports) { + "use strict"; + require("./CCEffectAsset"); + require("./CCMaterial"); + require("./material-variant"); + }), { + "./CCEffectAsset": 74, + "./CCMaterial": 75, + "./material-variant": 82 + } ], + 81: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _utils = _interopRequireDefault(require("./utils")); + var _pool = _interopRequireDefault(require("../../utils/pool")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var MaterialPool = (function(_Pool) { + _inheritsLoose(MaterialPool, _Pool); + function MaterialPool() { + var _this; + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) args[_key] = arguments[_key]; + _this = _Pool.call.apply(_Pool, [ this ].concat(args)) || this; + _this.enabled = false; + _this._pool = {}; + return _this; + } + var _proto = MaterialPool.prototype; + _proto.get = function get(exampleMat, renderComponent) { + var pool = this._pool; + if (exampleMat instanceof cc.MaterialVariant) { + if (!exampleMat._owner) { + exampleMat._owner = renderComponent; + return exampleMat; + } + if (exampleMat._owner === renderComponent) return exampleMat; + exampleMat = exampleMat.material; + } + var instance; + if (this.enabled) { + var uuid = exampleMat.effectAsset._uuid; + if (pool[uuid]) { + var key = _utils["default"].serializeDefines(exampleMat._effect._defines) + _utils["default"].serializeTechniques(exampleMat._effect._techniques); + instance = pool[uuid][key] && pool[uuid][key].pop(); + } + } + if (instance) this.count--; else { + instance = new cc.MaterialVariant(exampleMat); + instance._name = exampleMat._name + " (Instance)"; + instance._uuid = exampleMat._uuid; + } + instance._owner = renderComponent; + return instance; + }; + _proto.put = function put(mat) { + if (!this.enabled || !mat._owner) return; + var pool = this._pool; + var uuid = mat.effectAsset._uuid; + pool[uuid] || (pool[uuid] = {}); + var key = _utils["default"].serializeDefines(mat._effect._defines) + _utils["default"].serializeTechniques(mat._effect._techniques); + pool[uuid][key] || (pool[uuid][key] = []); + if (this.count > this.maxSize) return; + this._clean(mat); + pool[uuid][key].push(mat); + this.count++; + }; + _proto.clear = function clear() { + this._pool = {}; + this.count = 0; + }; + _proto._clean = function _clean(mat) { + mat._owner = null; + }; + return MaterialPool; + })(_pool["default"]); + var materialPool = new MaterialPool(); + _pool["default"].register("material", materialPool); + var _default = materialPool; + exports["default"] = _default; + module.exports = exports["default"]; + }), { + "../../utils/pool": 207, + "./utils": 83 + } ], + 82: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _CCMaterial = _interopRequireDefault(require("./CCMaterial")); + var _effectVariant = _interopRequireDefault(require("./effect-variant")); + var _materialPool = _interopRequireDefault(require("./material-pool")); + var _dec, _class; + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var ccclass = cc._decorator.ccclass; + var MaterialVariant = (_dec = ccclass("cc.MaterialVariant"), _dec(_class = (function(_Material) { + _inheritsLoose(MaterialVariant, _Material); + MaterialVariant.createWithBuiltin = function createWithBuiltin(materialName, owner) { + return MaterialVariant.create(_CCMaterial["default"].getBuiltinMaterial(materialName), owner); + }; + MaterialVariant.create = function create(material, owner) { + if (!material) return null; + return _materialPool["default"].get(material, owner); + }; + function MaterialVariant(material) { + var _this; + _this = _Material.call(this) || this; + _this._owner = null; + _this._material = null; + _this.init(material); + return _this; + } + var _proto = MaterialVariant.prototype; + _proto.init = function init(material) { + this._effect = new _effectVariant["default"](material.effect); + this._effectAsset = material._effectAsset; + this._material = material; + }; + _createClass(MaterialVariant, [ { + key: "uuid", + get: function get() { + return this._material._uuid; + } + }, { + key: "owner", + get: function get() { + return this._owner; + } + }, { + key: "material", + get: function get() { + return this._material; + } + } ]); + return MaterialVariant; + })(_CCMaterial["default"])) || _class); + exports["default"] = MaterialVariant; + cc.MaterialVariant = MaterialVariant; + module.exports = exports["default"]; + }), { + "./CCMaterial": 75, + "./effect-variant": 78, + "./material-pool": 81 + } ], + 83: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _enums = _interopRequireDefault(require("../../../renderer/enums")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function serializeDefines(defines) { + var str = ""; + for (var name in defines) str += name + defines[name]; + return str; + } + function serializePass(pass, excludeProperties) { + var str = pass._programName + pass._cullMode; + pass._blend && (str += pass._blendEq + pass._blendAlphaEq + pass._blendSrc + pass._blendDst + pass._blendSrcAlpha + pass._blendDstAlpha + pass._blendColor); + pass._depthTest && (str += pass._depthWrite + pass._depthFunc); + pass._stencilTest && (str += pass._stencilFuncFront + pass._stencilRefFront + pass._stencilMaskFront + pass._stencilFailOpFront + pass._stencilZFailOpFront + pass._stencilZPassOpFront + pass._stencilWriteMaskFront + pass._stencilFuncBack + pass._stencilRefBack + pass._stencilMaskBack + pass._stencilFailOpBack + pass._stencilZFailOpBack + pass._stencilZPassOpBack + pass._stencilWriteMaskBack); + excludeProperties || (str += serializeUniforms(pass._properties)); + str += serializeDefines(pass._defines); + return str; + } + function serializePasses(passes) { + var hashData = ""; + for (var i = 0; i < passes.length; i++) hashData += serializePass(passes[i]); + return hashData; + } + function serializeUniforms(uniforms) { + var hashData = ""; + for (var name in uniforms) { + var param = uniforms[name]; + var prop = param.value; + if (!prop) continue; + param.type === _enums["default"].PARAM_TEXTURE_2D || param.type === _enums["default"].PARAM_TEXTURE_CUBE ? hashData += prop._id + ";" : hashData += prop.toString() + ";"; + } + return hashData; + } + var _default = { + serializeDefines: serializeDefines, + serializePasses: serializePasses, + serializeUniforms: serializeUniforms + }; + exports["default"] = _default; + module.exports = exports["default"]; + }), { + "../../../renderer/enums": 242 + } ], + 84: [ (function(require, module, exports) { + "use strict"; + var Event; + true; + Event = require("../CCNode").EventType; + var TOP = 1; + var MID = 2; + var BOT = 4; + var LEFT = 8; + var CENTER = 16; + var RIGHT = 32; + var HORIZONTAL = LEFT | CENTER | RIGHT; + var VERTICAL = TOP | MID | BOT; + var AlignMode = cc.Enum({ + ONCE: 0, + ON_WINDOW_RESIZE: 1, + ALWAYS: 2 + }); + function getReadonlyNodeSize(parent) { + return parent instanceof cc.Scene ? cc.visibleRect : parent._contentSize; + } + function computeInverseTransForTarget(widgetNode, target, out_inverseTranslate, out_inverseScale) { + var scaleX = widgetNode._parent.scaleX; + var scaleY = widgetNode._parent.scaleY; + var translateX = 0; + var translateY = 0; + for (var node = widgetNode._parent; ;) { + translateX += node.x; + translateY += node.y; + node = node._parent; + if (!node) { + out_inverseTranslate.x = out_inverseTranslate.y = 0; + out_inverseScale.x = out_inverseScale.y = 1; + return; + } + if (node === target) break; + var sx = node.scaleX; + var sy = node.scaleY; + translateX *= sx; + translateY *= sy; + scaleX *= sx; + scaleY *= sy; + } + out_inverseScale.x = 0 !== scaleX ? 1 / scaleX : 1; + out_inverseScale.y = 0 !== scaleY ? 1 / scaleY : 1; + out_inverseTranslate.x = -translateX; + out_inverseTranslate.y = -translateY; + } + var tInverseTranslate = cc.Vec2.ZERO; + var tInverseScale = cc.Vec2.ONE; + function align(node, widget) { + var hasTarget = widget._target; + var target; + var inverseTranslate, inverseScale; + if (hasTarget) { + target = hasTarget; + inverseTranslate = tInverseTranslate; + inverseScale = tInverseScale; + computeInverseTransForTarget(node, target, inverseTranslate, inverseScale); + } else target = node._parent; + var targetSize = getReadonlyNodeSize(target); + var targetAnchor = target._anchorPoint; + var isRoot = (true, target instanceof cc.Scene); + var x = node.x, y = node.y; + var anchor = node._anchorPoint; + if (widget._alignFlags & HORIZONTAL) { + var localLeft, localRight, targetWidth = targetSize.width; + if (isRoot) { + localLeft = cc.visibleRect.left.x; + localRight = cc.visibleRect.right.x; + } else { + localLeft = -targetAnchor.x * targetWidth; + localRight = localLeft + targetWidth; + } + localLeft += widget._isAbsLeft ? widget._left : widget._left * targetWidth; + localRight -= widget._isAbsRight ? widget._right : widget._right * targetWidth; + if (hasTarget) { + localLeft += inverseTranslate.x; + localLeft *= inverseScale.x; + localRight += inverseTranslate.x; + localRight *= inverseScale.x; + } + var width, anchorX = anchor.x, scaleX = node.scaleX; + if (scaleX < 0) { + anchorX = 1 - anchorX; + scaleX = -scaleX; + } + if (widget.isStretchWidth) { + width = localRight - localLeft; + 0 !== scaleX && (node.width = width / scaleX); + x = localLeft + anchorX * width; + } else { + width = node.width * scaleX; + if (widget.isAlignHorizontalCenter) { + var localHorizontalCenter = widget._isAbsHorizontalCenter ? widget._horizontalCenter : widget._horizontalCenter * targetWidth; + var targetCenter = (.5 - targetAnchor.x) * targetSize.width; + if (hasTarget) { + localHorizontalCenter *= inverseScale.x; + targetCenter += inverseTranslate.x; + targetCenter *= inverseScale.x; + } + x = targetCenter + (anchorX - .5) * width + localHorizontalCenter; + } else x = widget.isAlignLeft ? localLeft + anchorX * width : localRight + (anchorX - 1) * width; + } + } + if (widget._alignFlags & VERTICAL) { + var localTop, localBottom, targetHeight = targetSize.height; + if (isRoot) { + localBottom = cc.visibleRect.bottom.y; + localTop = cc.visibleRect.top.y; + } else { + localBottom = -targetAnchor.y * targetHeight; + localTop = localBottom + targetHeight; + } + localBottom += widget._isAbsBottom ? widget._bottom : widget._bottom * targetHeight; + localTop -= widget._isAbsTop ? widget._top : widget._top * targetHeight; + if (hasTarget) { + localBottom += inverseTranslate.y; + localBottom *= inverseScale.y; + localTop += inverseTranslate.y; + localTop *= inverseScale.y; + } + var height, anchorY = anchor.y, scaleY = node.scaleY; + if (scaleY < 0) { + anchorY = 1 - anchorY; + scaleY = -scaleY; + } + if (widget.isStretchHeight) { + height = localTop - localBottom; + 0 !== scaleY && (node.height = height / scaleY); + y = localBottom + anchorY * height; + } else { + height = node.height * scaleY; + if (widget.isAlignVerticalCenter) { + var localVerticalCenter = widget._isAbsVerticalCenter ? widget._verticalCenter : widget._verticalCenter * targetHeight; + var targetMiddle = (.5 - targetAnchor.y) * targetSize.height; + if (hasTarget) { + localVerticalCenter *= inverseScale.y; + targetMiddle += inverseTranslate.y; + targetMiddle *= inverseScale.y; + } + y = targetMiddle + (anchorY - .5) * height + localVerticalCenter; + } else y = widget.isAlignBottom ? localBottom + anchorY * height : localTop + (anchorY - 1) * height; + } + } + node.setPosition(x, y); + } + function visitNode(node) { + var widget = node._widget; + if (widget) { + false; + align(node, widget); + true, widget.alignMode !== AlignMode.ALWAYS ? widgetManager.remove(widget) : activeWidgets.push(widget); + } + var children = node._children; + for (var i = 0; i < children.length; i++) { + var child = children[i]; + child._active && visitNode(child); + } + } + var animationState; + false; + function refreshScene() { + var AnimUtils; + var EditMode; + var nowPreviewing; + var component; + var animation; + var _component; + var _animation; + false; + var scene = cc.director.getScene(); + if (scene) { + widgetManager.isAligning = true; + if (widgetManager._nodesOrderDirty) { + activeWidgets.length = 0; + visitNode(scene); + widgetManager._nodesOrderDirty = false; + } else { + var i, widget, iterator = widgetManager._activeWidgetsIterator; + var AnimUtils; + var editingNode; + var node; + false; + for (iterator.i = 0; iterator.i < activeWidgets.length; ++iterator.i) { + widget = activeWidgets[iterator.i]; + align(widget.node, widget); + } + } + widgetManager.isAligning = false; + } + false; + } + var adjustWidgetToAllowMovingInEditor = false; + var adjustWidgetToAllowResizingInEditor = false; + var activeWidgets = []; + function updateAlignment(node) { + var parent = node._parent; + cc.Node.isNode(parent) && updateAlignment(parent); + var widget = node._widget || node.getComponent(cc.Widget); + widget && parent && align(node, widget); + } + var widgetManager = cc._widgetManager = module.exports = { + _AlignFlags: { + TOP: TOP, + MID: MID, + BOT: BOT, + LEFT: LEFT, + CENTER: CENTER, + RIGHT: RIGHT + }, + isAligning: false, + _nodesOrderDirty: false, + _activeWidgetsIterator: new cc.js.array.MutableForwardIterator(activeWidgets), + init: function init(director) { + director.on(cc.Director.EVENT_AFTER_UPDATE, refreshScene); + false; + var thisOnResized = this.onResized.bind(this); + cc.view.on("canvas-resize", thisOnResized); + window.addEventListener("orientationchange", thisOnResized); + }, + add: function add(widget) { + widget.node._widget = widget; + this._nodesOrderDirty = true; + false; + }, + remove: function remove(widget) { + widget.node._widget = null; + this._activeWidgetsIterator.remove(widget); + false; + }, + onResized: function onResized() { + var scene = cc.director.getScene(); + scene && this.refreshWidgetOnResized(scene); + }, + refreshWidgetOnResized: function refreshWidgetOnResized(node) { + var widget = cc.Node.isNode(node) && node.getComponent(cc.Widget); + widget && widget.enabled && widget.alignMode === AlignMode.ON_WINDOW_RESIZE && this.add(widget); + var children = node._children; + for (var i = 0; i < children.length; i++) { + var child = children[i]; + this.refreshWidgetOnResized(child); + } + }, + updateAlignment: updateAlignment, + AlignMode: AlignMode + }; + false; + }), { + "../CCNode": 24 + } ], + 85: [ (function(require, module, exports) { + "use strict"; + var _valueTypes = require("../value-types"); + var _geomUtils = require("../geom-utils"); + var AffineTrans = require("../utils/affine-transform"); + var renderer = require("../renderer/index"); + var RenderFlow = require("../renderer/render-flow"); + var game = require("../CCGame"); + var RendererCamera = null; + false; + RendererCamera = require("../../renderer/scene/camera"); + var _mat4_temp_1 = cc.mat4(); + var _mat4_temp_2 = cc.mat4(); + var _v3_temp_1 = cc.v3(); + var _v3_temp_2 = cc.v3(); + var _v3_temp_3 = cc.v3(); + var _cameras = []; + function updateMainCamera() { + for (var i = 0, minDepth = Number.MAX_VALUE; i < _cameras.length; i++) { + var camera = _cameras[i]; + if (camera._depth < minDepth) { + Camera.main = camera; + minDepth = camera._depth; + } + } + } + var _debugCamera = null; + function repositionDebugCamera() { + if (!_debugCamera) return; + var node = _debugCamera.getNode(); + var canvas = cc.game.canvas; + node.z = canvas.height / 1.1566; + node.x = canvas.width / 2; + node.y = canvas.height / 2; + } + var ClearFlags = cc.Enum({ + COLOR: 1, + DEPTH: 2, + STENCIL: 4 + }); + var StageFlags = cc.Enum({ + OPAQUE: 1, + TRANSPARENT: 2 + }); + var Camera = cc.Class({ + name: "cc.Camera", + extends: cc.Component, + ctor: function ctor() { + if (game.renderType !== game.RENDER_TYPE_CANVAS) { + var camera = new RendererCamera(); + camera.setStages([ "opaque" ]); + camera.dirty = true; + this._inited = false; + this._camera = camera; + } else this._inited = true; + }, + editor: false, + properties: { + _cullingMask: 4294967295, + _clearFlags: ClearFlags.DEPTH | ClearFlags.STENCIL, + _backgroundColor: cc.color(0, 0, 0, 255), + _depth: 0, + _zoomRatio: 1, + _targetTexture: null, + _fov: 60, + _orthoSize: 10, + _nearClip: 1, + _farClip: 4096, + _ortho: true, + _rect: cc.rect(0, 0, 1, 1), + _renderStages: 1, + _alignWithScreen: true, + zoomRatio: { + get: function get() { + return this._zoomRatio; + }, + set: function set(value) { + this._zoomRatio = value; + }, + tooltip: false + }, + fov: { + get: function get() { + return this._fov; + }, + set: function set(v) { + this._fov = v; + }, + tooltip: false + }, + orthoSize: { + get: function get() { + return this._orthoSize; + }, + set: function set(v) { + this._orthoSize = v; + }, + tooltip: false + }, + nearClip: { + get: function get() { + return this._nearClip; + }, + set: function set(v) { + this._nearClip = v; + this._updateClippingpPlanes(); + }, + tooltip: false + }, + farClip: { + get: function get() { + return this._farClip; + }, + set: function set(v) { + this._farClip = v; + this._updateClippingpPlanes(); + }, + tooltip: false + }, + ortho: { + get: function get() { + return this._ortho; + }, + set: function set(v) { + this._ortho = v; + this._updateProjection(); + }, + tooltip: false + }, + rect: { + get: function get() { + return this._rect; + }, + set: function set(v) { + this._rect = v; + this._updateRect(); + }, + tooltip: false + }, + cullingMask: { + get: function get() { + return this._cullingMask; + }, + set: function set(value) { + this._cullingMask = value; + this._updateCameraMask(); + }, + tooltip: false + }, + clearFlags: { + get: function get() { + return this._clearFlags; + }, + set: function set(value) { + this._clearFlags = value; + this._camera && this._camera.setClearFlags(value); + }, + tooltip: false + }, + backgroundColor: { + get: function get() { + return this._backgroundColor; + }, + set: function set(value) { + if (!this._backgroundColor.equals(value)) { + this._backgroundColor.set(value); + this._updateBackgroundColor(); + } + }, + tooltip: false + }, + depth: { + get: function get() { + return this._depth; + }, + set: function set(value) { + Camera.main === this ? this._depth < value && updateMainCamera() : Camera.main && value < Camera.main._depth && _cameras.includes(this) && (Camera.main = this); + this._depth = value; + this._camera && this._camera.setPriority(value); + }, + tooltip: false + }, + targetTexture: { + get: function get() { + return this._targetTexture; + }, + set: function set(value) { + this._targetTexture = value; + this._updateTargetTexture(); + }, + tooltip: false + }, + renderStages: { + get: function get() { + return this._renderStages; + }, + set: function set(val) { + this._renderStages = val; + this._updateStages(); + }, + tooltip: false + }, + alignWithScreen: { + get: function get() { + return this._alignWithScreen; + }, + set: function set(v) { + this._alignWithScreen = v; + } + }, + _is3D: { + get: function get() { + return this.node && this.node._is3DNode; + } + } + }, + statics: { + main: null, + cameras: _cameras, + ClearFlags: ClearFlags, + findCamera: function findCamera(node) { + for (var i = 0, l = _cameras.length; i < l; i++) { + var camera = _cameras[i]; + if (camera.containsNode(node)) return camera; + } + return null; + }, + _findRendererCamera: function _findRendererCamera(node) { + var cameras = renderer.scene._cameras; + for (var i = 0; i < cameras._count; i++) if (cameras._data[i]._cullingMask & node._cullingMask) return cameras._data[i]; + return null; + }, + _setupDebugCamera: function _setupDebugCamera() { + if (_debugCamera) return; + if (game.renderType === game.RENDER_TYPE_CANVAS) return; + var camera = new RendererCamera(); + _debugCamera = camera; + camera.setStages([ "opaque" ]); + camera.setFov(60 * Math.PI / 180); + camera.setNear(.1); + camera.setFar(4096); + camera.dirty = true; + camera.cullingMask = 1 << cc.Node.BuiltinGroupIndex.DEBUG; + camera.setPriority(cc.macro.MAX_ZINDEX); + camera.setClearFlags(0); + camera.setColor(0, 0, 0, 0); + var node = new cc.Node(); + camera.setNode(node); + repositionDebugCamera(); + cc.view.on("design-resolution-changed", repositionDebugCamera); + renderer.scene.addCamera(camera); + } + }, + _updateCameraMask: function _updateCameraMask() { + if (this._camera) { + var mask = this._cullingMask & ~(1 << cc.Node.BuiltinGroupIndex.DEBUG); + this._camera.cullingMask = mask; + } + }, + _updateBackgroundColor: function _updateBackgroundColor() { + if (!this._camera) return; + var color = this._backgroundColor; + this._camera.setColor(color.r / 255, color.g / 255, color.b / 255, color.a / 255); + }, + _updateTargetTexture: function _updateTargetTexture() { + if (!this._camera) return; + var texture = this._targetTexture; + this._camera.setFrameBuffer(texture ? texture._framebuffer : null); + }, + _updateClippingpPlanes: function _updateClippingpPlanes() { + if (!this._camera) return; + this._camera.setNear(this._nearClip); + this._camera.setFar(this._farClip); + }, + _updateProjection: function _updateProjection() { + if (!this._camera) return; + var type = this._ortho ? 1 : 0; + this._camera.setType(type); + }, + _updateRect: function _updateRect() { + if (!this._camera) return; + var rect = this._rect; + this._camera.setRect(rect.x, rect.y, rect.width, rect.height); + }, + _updateStages: function _updateStages() { + var flags = this._renderStages; + var stages = []; + flags & StageFlags.OPAQUE && stages.push("opaque"); + flags & StageFlags.TRANSPARENT && stages.push("transparent"); + this._camera.setStages(stages); + }, + _init: function _init() { + if (this._inited) return; + this._inited = true; + var camera = this._camera; + if (!camera) return; + camera.setNode(this.node); + camera.setClearFlags(this._clearFlags); + camera.setPriority(this._depth); + this._updateBackgroundColor(); + this._updateCameraMask(); + this._updateTargetTexture(); + this._updateClippingpPlanes(); + this._updateProjection(); + this._updateStages(); + this._updateRect(); + true; + this.beforeDraw(); + }, + __preload: function __preload() { + this._init(); + }, + onEnable: function onEnable() { + if (true, game.renderType !== game.RENDER_TYPE_CANVAS) { + cc.director.on(cc.Director.EVENT_BEFORE_DRAW, this.beforeDraw, this); + renderer.scene.addCamera(this._camera); + } + _cameras.push(this); + (!Camera.main || this._depth < Camera.main._depth) && (Camera.main = this); + }, + onDisable: function onDisable() { + if (true, game.renderType !== game.RENDER_TYPE_CANVAS) { + cc.director.off(cc.Director.EVENT_BEFORE_DRAW, this.beforeDraw, this); + renderer.scene.removeCamera(this._camera); + } + cc.js.array.fastRemove(_cameras, this); + if (Camera.main === this) { + Camera.main = null; + updateMainCamera(); + } + }, + getScreenToWorldMatrix2D: function getScreenToWorldMatrix2D(out) { + this.getWorldToScreenMatrix2D(out); + _valueTypes.Mat4.invert(out, out); + return out; + }, + getWorldToScreenMatrix2D: function getWorldToScreenMatrix2D(out) { + this.node.getWorldRT(_mat4_temp_1); + var zoomRatio = this.zoomRatio; + var _mat4_temp_1m = _mat4_temp_1.m; + _mat4_temp_1m[0] *= zoomRatio; + _mat4_temp_1m[1] *= zoomRatio; + _mat4_temp_1m[4] *= zoomRatio; + _mat4_temp_1m[5] *= zoomRatio; + var m12 = _mat4_temp_1m[12]; + var m13 = _mat4_temp_1m[13]; + var center = cc.visibleRect.center; + _mat4_temp_1m[12] = center.x - (_mat4_temp_1m[0] * m12 + _mat4_temp_1m[4] * m13); + _mat4_temp_1m[13] = center.y - (_mat4_temp_1m[1] * m12 + _mat4_temp_1m[5] * m13); + out !== _mat4_temp_1 && _valueTypes.Mat4.copy(out, _mat4_temp_1); + return out; + }, + getScreenToWorldPoint: function getScreenToWorldPoint(screenPosition, out) { + if (this.node.is3DNode) { + out = out || new cc.Vec3(); + this._camera.screenToWorld(out, screenPosition, cc.visibleRect.width, cc.visibleRect.height); + } else { + out = out || new cc.Vec2(); + this.getScreenToWorldMatrix2D(_mat4_temp_1); + _valueTypes.Vec2.transformMat4(out, screenPosition, _mat4_temp_1); + } + return out; + }, + getWorldToScreenPoint: function getWorldToScreenPoint(worldPosition, out) { + if (this.node.is3DNode) { + out = out || new cc.Vec3(); + this._camera.worldToScreen(out, worldPosition, cc.visibleRect.width, cc.visibleRect.height); + } else { + out = out || new cc.Vec2(); + this.getWorldToScreenMatrix2D(_mat4_temp_1); + _valueTypes.Vec2.transformMat4(out, worldPosition, _mat4_temp_1); + } + return out; + }, + getRay: function getRay(screenPos) { + if (!cc.geomUtils) return screenPos; + _valueTypes.Vec3.set(_v3_temp_3, screenPos.x, screenPos.y, 1); + this._camera.screenToWorld(_v3_temp_2, _v3_temp_3, cc.visibleRect.width, cc.visibleRect.height); + if (this.ortho) { + _valueTypes.Vec3.set(_v3_temp_3, screenPos.x, screenPos.y, -1); + this._camera.screenToWorld(_v3_temp_1, _v3_temp_3, cc.visibleRect.width, cc.visibleRect.height); + } else this.node.getWorldPosition(_v3_temp_1); + return _geomUtils.Ray.fromPoints(new _geomUtils.Ray(), _v3_temp_1, _v3_temp_2); + }, + containsNode: function containsNode(node) { + return (node._cullingMask & this.cullingMask) > 0; + }, + render: function render(rootNode) { + rootNode = rootNode || cc.director.getScene(); + if (!rootNode) return null; + this.node.getWorldMatrix(_mat4_temp_1); + this.beforeDraw(); + RenderFlow.renderCamera(this._camera, rootNode); + }, + _onAlignWithScreen: function _onAlignWithScreen() { + var height = cc.game.canvas.height / cc.view._scaleY; + var targetTexture = this._targetTexture; + if (targetTexture) { + false; + height = cc.visibleRect.height; + } + var fov = this._fov * cc.macro.RAD; + this.node.z = height / (2 * Math.tan(fov / 2)); + fov = 2 * Math.atan(Math.tan(fov / 2) / this.zoomRatio); + this._camera.setFov(fov); + this._camera.setOrthoHeight(height / 2 / this.zoomRatio); + this.node.setRotation(0, 0, 0, 1); + }, + beforeDraw: function beforeDraw() { + if (!this._camera) return; + if (this._alignWithScreen) this._onAlignWithScreen(); else { + var fov = this._fov * cc.macro.RAD; + fov = 2 * Math.atan(Math.tan(fov / 2) / this.zoomRatio); + this._camera.setFov(fov); + this._camera.setOrthoHeight(this._orthoSize / this.zoomRatio); + } + this._camera.dirty = true; + } + }); + cc.js.mixin(Camera.prototype, { + getNodeToCameraTransform: function getNodeToCameraTransform(node) { + var out = AffineTrans.identity(); + node.getWorldMatrix(_mat4_temp_2); + if (this.containsNode(node)) { + this.getWorldToCameraMatrix(_mat4_temp_1); + _valueTypes.Mat4.mul(_mat4_temp_2, _mat4_temp_2, _mat4_temp_1); + } + AffineTrans.fromMat4(out, _mat4_temp_2); + return out; + }, + getCameraToWorldPoint: function getCameraToWorldPoint(point, out) { + return this.getScreenToWorldPoint(point, out); + }, + getWorldToCameraPoint: function getWorldToCameraPoint(point, out) { + return this.getWorldToScreenPoint(point, out); + }, + getCameraToWorldMatrix: function getCameraToWorldMatrix(out) { + return this.getScreenToWorldMatrix2D(out); + }, + getWorldToCameraMatrix: function getWorldToCameraMatrix(out) { + return this.getWorldToScreenMatrix2D(out); + } + }); + module.exports = cc.Camera = Camera; + }), { + "../../renderer/scene/camera": 267, + "../CCGame": 23, + "../geom-utils": void 0, + "../renderer/index": 152, + "../renderer/render-flow": 153, + "../utils/affine-transform": 196, + "../value-types": 220 + } ], + 86: [ (function(require, module, exports) { + "use strict"; + require("./platform/CCClass"); + var Flags = require("./platform/CCObject").Flags; + var jsArray = require("./platform/js").array; + var IsStartCalled = Flags.IsStartCalled; + var IsOnEnableCalled = Flags.IsOnEnableCalled; + var IsEditorOnEnableCalled = Flags.IsEditorOnEnableCalled; + var callerFunctor = false; + var callOnEnableInTryCatch = false; + var callOnDisableInTryCatch = false; + function sortedIndex(array, comp) { + var order = comp.constructor._executionOrder; + var id = comp._id; + for (var l = 0, h = array.length - 1, m = h >>> 1; l <= h; m = l + h >>> 1) { + var test = array[m]; + var testOrder = test.constructor._executionOrder; + if (testOrder > order) h = m - 1; else if (testOrder < order) l = m + 1; else { + var testId = test._id; + if (testId > id) h = m - 1; else { + if (!(testId < id)) return m; + l = m + 1; + } + } + } + return ~l; + } + function stableRemoveInactive(iterator, flagToClear) { + var array = iterator.array; + var next = iterator.i + 1; + while (next < array.length) { + var comp = array[next]; + if (comp._enabled && comp.node._activeInHierarchy) ++next; else { + iterator.removeAt(next); + flagToClear && (comp._objFlags &= ~flagToClear); + } + } + } + var LifeCycleInvoker = cc.Class({ + __ctor__: function __ctor__(invokeFunc) { + var Iterator = jsArray.MutableForwardIterator; + this._zero = new Iterator([]); + this._neg = new Iterator([]); + this._pos = new Iterator([]); + false; + this._invoke = invokeFunc; + }, + statics: { + stableRemoveInactive: stableRemoveInactive + }, + add: null, + remove: null, + invoke: null + }); + function compareOrder(a, b) { + return a.constructor._executionOrder - b.constructor._executionOrder; + } + var OneOffInvoker = cc.Class({ + extends: LifeCycleInvoker, + add: function add(comp) { + var order = comp.constructor._executionOrder; + (0 === order ? this._zero : order < 0 ? this._neg : this._pos).array.push(comp); + }, + remove: function remove(comp) { + var order = comp.constructor._executionOrder; + (0 === order ? this._zero : order < 0 ? this._neg : this._pos).fastRemove(comp); + }, + cancelInactive: function cancelInactive(flagToClear) { + stableRemoveInactive(this._zero, flagToClear); + stableRemoveInactive(this._neg, flagToClear); + stableRemoveInactive(this._pos, flagToClear); + }, + invoke: function invoke() { + var compsNeg = this._neg; + if (compsNeg.array.length > 0) { + compsNeg.array.sort(compareOrder); + this._invoke(compsNeg); + compsNeg.array.length = 0; + } + this._invoke(this._zero); + this._zero.array.length = 0; + var compsPos = this._pos; + if (compsPos.array.length > 0) { + compsPos.array.sort(compareOrder); + this._invoke(compsPos); + compsPos.array.length = 0; + } + } + }); + var ReusableInvoker = cc.Class({ + extends: LifeCycleInvoker, + add: function add(comp) { + var order = comp.constructor._executionOrder; + if (0 === order) this._zero.array.push(comp); else { + var array = order < 0 ? this._neg.array : this._pos.array; + var i = sortedIndex(array, comp); + i < 0 && array.splice(~i, 0, comp); + } + }, + remove: function remove(comp) { + var order = comp.constructor._executionOrder; + if (0 === order) this._zero.fastRemove(comp); else { + var iterator = order < 0 ? this._neg : this._pos; + var i = sortedIndex(iterator.array, comp); + i >= 0 && iterator.removeAt(i); + } + }, + invoke: function invoke(dt) { + this._neg.array.length > 0 && this._invoke(this._neg, dt); + this._invoke(this._zero, dt); + this._pos.array.length > 0 && this._invoke(this._pos, dt); + } + }); + function enableInEditor(comp) { + if (!(comp._objFlags & IsEditorOnEnableCalled)) { + cc.engine.emit("component-enabled", comp.uuid); + comp._objFlags |= IsEditorOnEnableCalled; + } + } + function createInvokeImpl(indiePath, useDt, ensureFlag, fastPath) { + true; + var body = "var a=it.array;for(it.i=0;it.i= 0) { + jsArray.fastRemoveAt(this._deferredComps, index); + return; + } + !comp.start || comp._objFlags & IsStartCalled || this.startInvoker.remove(comp); + comp.update && this.updateInvoker.remove(comp); + comp.lateUpdate && this.lateUpdateInvoker.remove(comp); + }, + enableComp: function(comp, invoker) { + if (!(comp._objFlags & IsOnEnableCalled)) { + if (comp.onEnable) { + if (invoker) { + invoker.add(comp); + return; + } + comp.onEnable(); + var deactivatedDuringOnEnable = !comp.node._activeInHierarchy; + if (deactivatedDuringOnEnable) return; + } + this._onEnabled(comp); + } + }, + disableComp: function(comp) { + if (comp._objFlags & IsOnEnableCalled) { + comp.onDisable && comp.onDisable(); + this._onDisabled(comp); + } + }, + _scheduleImmediate: function _scheduleImmediate(comp) { + "function" !== typeof comp.start || comp._objFlags & IsStartCalled || this.startInvoker.add(comp); + "function" === typeof comp.update && this.updateInvoker.add(comp); + "function" === typeof comp.lateUpdate && this.lateUpdateInvoker.add(comp); + }, + _deferredSchedule: function _deferredSchedule() { + var comps = this._deferredComps; + for (var i = 0, len = comps.length; i < len; i++) this._scheduleImmediate(comps[i]); + comps.length = 0; + }, + _startForNewComps: function _startForNewComps() { + if (this._deferredComps.length > 0) { + this._deferredSchedule(); + this.startInvoker.invoke(); + } + }, + startPhase: function startPhase() { + this._updating = true; + this.startInvoker.invoke(); + this._startForNewComps(); + }, + updatePhase: function updatePhase(dt) { + this.updateInvoker.invoke(dt); + }, + lateUpdatePhase: function lateUpdatePhase(dt) { + this.lateUpdateInvoker.invoke(dt); + this._updating = false; + this._startForNewComps(); + } + }); + module.exports = ComponentScheduler; + }), { + "./platform/CCClass": 121, + "./platform/CCObject": 127, + "./platform/js": 142, + "./utils/misc": 205 + } ], + 87: [ (function(require, module, exports) { + "use strict"; + var AnimationAnimator = require("../../animation/animation-animator"); + var AnimationClip = require("../../animation/animation-clip"); + var EventTarget = require("../event/event-target"); + var js = require("../platform/js"); + var equalClips = function(clip1, clip2) { + return clip1 === clip2; + }; + var EventType = cc.Enum({ + PLAY: "play", + STOP: "stop", + PAUSE: "pause", + RESUME: "resume", + LASTFRAME: "lastframe", + FINISHED: "finished" + }); + var Animation = cc.Class({ + name: "cc.Animation", + extends: require("./CCComponent"), + mixins: [ EventTarget ], + editor: false, + statics: { + EventType: EventType + }, + ctor: function ctor() { + cc.EventTarget.call(this); + this._animator = null; + this._nameToState = js.createMap(true); + this._didInit = false; + this._currentClip = null; + }, + properties: { + _defaultClip: { + default: null, + type: AnimationClip + }, + defaultClip: { + type: AnimationClip, + get: function get() { + return this._defaultClip; + }, + set: function set(value) { + true; + return; + var contain; + }, + tooltip: false + }, + currentClip: { + get: function get() { + return this._currentClip; + }, + set: function set(value) { + this._currentClip = value; + }, + type: AnimationClip, + visible: false + }, + _writableClips: { + get: function get() { + return this._clips; + }, + set: function set(val) { + this._didInit = false; + this._clips = val; + this._init(); + }, + type: [ AnimationClip ] + }, + _clips: { + default: [], + type: [ AnimationClip ], + tooltip: false, + visible: true + }, + playOnLoad: { + default: false, + tooltip: false + } + }, + start: function start() { + if ((true, this.playOnLoad) && this._defaultClip) { + var isPlaying = this._animator && this._animator.isPlaying; + if (!isPlaying) { + var state = this.getAnimationState(this._defaultClip.name); + this._animator.playState(state); + } + } + }, + onEnable: function onEnable() { + this._animator && this._animator.resume(); + }, + onDisable: function onDisable() { + this._animator && this._animator.pause(); + }, + onDestroy: function onDestroy() { + this.stop(); + }, + getClips: function getClips() { + return this._clips; + }, + play: function play(name, startTime) { + var state = this.playAdditive(name, startTime); + this._animator.stopStatesExcept(state); + return state; + }, + playAdditive: function playAdditive(name, startTime) { + this._init(); + var state = this.getAnimationState(name || this._defaultClip && this._defaultClip.name); + if (state) { + this.enabled = true; + var animator = this._animator; + if (animator.isPlaying && state.isPlaying) if (state.isPaused) animator.resumeState(state); else { + animator.stopState(state); + animator.playState(state, startTime); + } else animator.playState(state, startTime); + this.enabledInHierarchy || animator.pause(); + this.currentClip = state.clip; + } + return state; + }, + stop: function stop(name) { + if (!this._didInit) return; + if (name) { + var state = this._nameToState[name]; + state && this._animator.stopState(state); + } else this._animator.stop(); + }, + pause: function pause(name) { + if (!this._didInit) return; + if (name) { + var state = this._nameToState[name]; + state && this._animator.pauseState(state); + } else this.enabled = false; + }, + resume: function resume(name) { + if (!this._didInit) return; + if (name) { + var state = this.getAnimationState(name); + state && this._animator.resumeState(state); + } else this.enabled = true; + }, + setCurrentTime: function setCurrentTime(time, name) { + this._init(); + if (name) { + var state = this.getAnimationState(name); + state && this._animator.setStateTime(state, time); + } else this._animator.setStateTime(time); + }, + getAnimationState: function getAnimationState(name) { + this._init(); + var state = this._nameToState[name]; + false; + state && !state.curveLoaded && this._animator._reloadClip(state); + return state || null; + }, + addClip: function addClip(clip, newName) { + if (!clip) { + cc.warnID(3900); + return; + } + this._init(); + cc.js.array.contains(this._clips, clip) || this._clips.push(clip); + newName = newName || clip.name; + var oldState = this._nameToState[newName]; + if (oldState) { + if (oldState.clip === clip) return oldState; + var index = this._clips.indexOf(oldState.clip); + -1 !== index && this._clips.splice(index, 1); + } + var newState = new cc.AnimationState(clip, newName); + this._nameToState[newName] = newState; + return newState; + }, + removeClip: function removeClip(clip, force) { + if (!clip) { + cc.warnID(3901); + return; + } + this._init(); + var state; + for (var name in this._nameToState) { + state = this._nameToState[name]; + if (equalClips(state.clip, clip)) break; + } + if (clip === this._defaultClip) { + if (!force) { + true; + cc.warnID(3902); + return; + } + this._defaultClip = null; + } + if (state && state.isPlaying) { + if (!force) { + true; + cc.warnID(3903); + return; + } + this.stop(state.name); + } + this._clips = this._clips.filter((function(item) { + return !equalClips(item, clip); + })); + state && delete this._nameToState[state.name]; + }, + sample: function sample(name) { + this._init(); + if (name) { + var state = this.getAnimationState(name); + state && state.sample(); + } else this._animator.sample(); + }, + on: function on(type, callback, target, useCapture) { + this._init(); + var ret = this._EventTargetOn(type, callback, target, useCapture); + if ("lastframe" === type) { + var states = this._nameToState; + for (var name in states) states[name]._lastframeEventOn = true; + } + return ret; + }, + off: function off(type, callback, target, useCapture) { + this._init(); + if ("lastframe" === type) { + var states = this._nameToState; + for (var name in states) states[name]._lastframeEventOn = false; + } + this._EventTargetOff(type, callback, target, useCapture); + }, + _init: function _init() { + if (this._didInit) return; + this._didInit = true; + this._animator = new AnimationAnimator(this.node, this); + this._createStates(); + }, + _createStates: function _createStates() { + this._nameToState = js.createMap(true); + var state = null; + var defaultClipState = false; + for (var i = 0; i < this._clips.length; ++i) { + var clip = this._clips[i]; + if (clip) { + state = new cc.AnimationState(clip); + false; + this._nameToState[state.name] = state; + equalClips(this._defaultClip, clip) && (defaultClipState = state); + } + } + if (this._defaultClip && !defaultClipState) { + state = new cc.AnimationState(this._defaultClip); + false; + this._nameToState[state.name] = state; + } + } + }); + Animation.prototype._EventTargetOn = EventTarget.prototype.on; + Animation.prototype._EventTargetOff = EventTarget.prototype.off; + cc.Animation = module.exports = Animation; + }), { + "../../animation/animation-animator": 10, + "../../animation/animation-clip": 11, + "../event/event-target": 114, + "../platform/js": 142, + "./CCComponent": 91 + } ], + 88: [ (function(require, module, exports) { + "use strict"; + var BlockEvents = [ "touchstart", "touchmove", "touchend", "mousedown", "mousemove", "mouseup", "mouseenter", "mouseleave", "mousewheel" ]; + function stopPropagation(event) { + event.stopPropagation(); + } + var BlockInputEvents = cc.Class({ + name: "cc.BlockInputEvents", + extends: require("./CCComponent"), + editor: { + menu: "i18n:MAIN_MENU.component.ui/Block Input Events", + inspector: "packages://inspector/inspectors/comps/block-input-events.js", + help: "i18n:COMPONENT.help_url.block_input_events" + }, + onEnable: function onEnable() { + for (var i = 0; i < BlockEvents.length; i++) this.node.on(BlockEvents[i], stopPropagation, this); + }, + onDisable: function onDisable() { + for (var i = 0; i < BlockEvents.length; i++) this.node.off(BlockEvents[i], stopPropagation, this); + } + }); + cc.BlockInputEvents = module.exports = BlockInputEvents; + }), { + "./CCComponent": 91 + } ], + 89: [ (function(require, module, exports) { + "use strict"; + var Component = require("./CCComponent"); + var GraySpriteState = require("../utils/gray-sprite-state"); + var Transition = cc.Enum({ + NONE: 0, + COLOR: 1, + SPRITE: 2, + SCALE: 3 + }); + var State = cc.Enum({ + NORMAL: 0, + HOVER: 1, + PRESSED: 2, + DISABLED: 3 + }); + var Button = cc.Class({ + name: "cc.Button", + extends: Component, + mixins: [ GraySpriteState ], + ctor: function ctor() { + this._pressed = false; + this._hovered = false; + this._fromColor = null; + this._toColor = null; + this._time = 0; + this._transitionFinished = true; + this._fromScale = cc.Vec2.ZERO; + this._toScale = cc.Vec2.ZERO; + this._originalScale = null; + this._graySpriteMaterial = null; + this._spriteMaterial = null; + this._sprite = null; + }, + editor: false, + properties: { + interactable: { + default: true, + tooltip: false, + notify: function notify() { + this._updateState(); + this.interactable || this._resetState(); + }, + animatable: false + }, + _resizeToTarget: { + animatable: false, + set: function set(value) { + value && this._resizeNodeToTargetNode(); + } + }, + enableAutoGrayEffect: { + default: false, + tooltip: false, + notify: function notify() { + this._updateDisabledState(true); + } + }, + transition: { + default: Transition.NONE, + tooltip: false, + type: Transition, + animatable: false, + notify: function notify(oldValue) { + this._updateTransition(oldValue); + }, + formerlySerializedAs: "transition" + }, + normalColor: { + default: cc.Color.WHITE, + displayName: "Normal", + tooltip: false, + notify: function notify() { + this.transition === Transition.Color && this._getButtonState() === State.NORMAL && (this._getTarget().opacity = this.normalColor.a); + this._updateState(); + } + }, + pressedColor: { + default: cc.color(211, 211, 211), + displayName: "Pressed", + tooltip: false, + notify: function notify() { + this.transition === Transition.Color && this._getButtonState() === State.PRESSED && (this._getTarget().opacity = this.pressedColor.a); + this._updateState(); + }, + formerlySerializedAs: "pressedColor" + }, + hoverColor: { + default: cc.Color.WHITE, + displayName: "Hover", + tooltip: false, + notify: function notify() { + this.transition === Transition.Color && this._getButtonState() === State.HOVER && (this._getTarget().opacity = this.hoverColor.a); + this._updateState(); + }, + formerlySerializedAs: "hoverColor" + }, + disabledColor: { + default: cc.color(124, 124, 124), + displayName: "Disabled", + tooltip: false, + notify: function notify() { + this.transition === Transition.Color && this._getButtonState() === State.DISABLED && (this._getTarget().opacity = this.disabledColor.a); + this._updateState(); + } + }, + duration: { + default: .1, + range: [ 0, 10 ], + tooltip: false + }, + zoomScale: { + default: 1.2, + tooltip: false + }, + normalSprite: { + default: null, + type: cc.SpriteFrame, + displayName: "Normal", + tooltip: false, + notify: function notify() { + this._updateState(); + } + }, + pressedSprite: { + default: null, + type: cc.SpriteFrame, + displayName: "Pressed", + tooltip: false, + formerlySerializedAs: "pressedSprite", + notify: function notify() { + this._updateState(); + } + }, + hoverSprite: { + default: null, + type: cc.SpriteFrame, + displayName: "Hover", + tooltip: false, + formerlySerializedAs: "hoverSprite", + notify: function notify() { + this._updateState(); + } + }, + disabledSprite: { + default: null, + type: cc.SpriteFrame, + displayName: "Disabled", + tooltip: false, + notify: function notify() { + this._updateState(); + } + }, + target: { + default: null, + type: cc.Node, + tooltip: false, + notify: function notify(oldValue) { + this._applyTarget(); + oldValue && this.target !== oldValue && this._unregisterTargetEvent(oldValue); + } + }, + clickEvents: { + default: [], + type: cc.Component.EventHandler, + tooltip: false + } + }, + statics: { + Transition: Transition + }, + __preload: function __preload() { + this._applyTarget(); + this._resetState(); + }, + _resetState: function _resetState() { + this._pressed = false; + this._hovered = false; + var target = this._getTarget(); + var transition = this.transition; + var originalScale = this._originalScale; + transition === Transition.COLOR && this.interactable ? this._setTargetColor(this.normalColor) : transition === Transition.SCALE && originalScale && target.setScale(originalScale.x, originalScale.y); + this._transitionFinished = true; + }, + onEnable: function onEnable() { + this.normalSprite && this.normalSprite.ensureLoadTexture(); + this.hoverSprite && this.hoverSprite.ensureLoadTexture(); + this.pressedSprite && this.pressedSprite.ensureLoadTexture(); + this.disabledSprite && this.disabledSprite.ensureLoadTexture(); + true; + this._registerNodeEvent(); + this._updateState(); + }, + onDisable: function onDisable() { + this._resetState(); + true; + this._unregisterNodeEvent(); + }, + _getTarget: function _getTarget() { + return this.target ? this.target : this.node; + }, + _onTargetSpriteFrameChanged: function _onTargetSpriteFrameChanged(comp) { + this.transition === Transition.SPRITE && this._setCurrentStateSprite(comp.spriteFrame); + }, + _onTargetColorChanged: function _onTargetColorChanged(color) { + this.transition === Transition.COLOR && this._setCurrentStateColor(color); + }, + _onTargetScaleChanged: function _onTargetScaleChanged() { + var target = this._getTarget(); + if (this._originalScale && (this.transition !== Transition.SCALE || this._transitionFinished)) { + this._originalScale.x = target.scaleX; + this._originalScale.y = target.scaleY; + } + }, + _setTargetColor: function _setTargetColor(color) { + var target = this._getTarget(); + var cloneColor = color.clone(); + target.opacity = cloneColor.a; + cloneColor.a = 255; + target.color = cloneColor; + }, + _getStateColor: function _getStateColor(state) { + switch (state) { + case State.NORMAL: + return this.normalColor; + + case State.HOVER: + return this.hoverColor; + + case State.PRESSED: + return this.pressedColor; + + case State.DISABLED: + return this.disabledColor; + } + }, + _getStateSprite: function _getStateSprite(state) { + switch (state) { + case State.NORMAL: + return this.normalSprite; + + case State.HOVER: + return this.hoverSprite; + + case State.PRESSED: + return this.pressedSprite; + + case State.DISABLED: + return this.disabledSprite; + } + }, + _setCurrentStateColor: function _setCurrentStateColor(color) { + switch (this._getButtonState()) { + case State.NORMAL: + this.normalColor = color; + break; + + case State.HOVER: + this.hoverColor = color; + break; + + case State.PRESSED: + this.pressedColor = color; + break; + + case State.DISABLED: + this.disabledColor = color; + } + }, + _setCurrentStateSprite: function _setCurrentStateSprite(spriteFrame) { + switch (this._getButtonState()) { + case State.NORMAL: + this.normalSprite = spriteFrame; + break; + + case State.HOVER: + this.hoverSprite = spriteFrame; + break; + + case State.PRESSED: + this.pressedSprite = spriteFrame; + break; + + case State.DISABLED: + this.disabledSprite = spriteFrame; + } + }, + update: function update(dt) { + var target = this._getTarget(); + if (this._transitionFinished) return; + if (this.transition !== Transition.COLOR && this.transition !== Transition.SCALE) return; + this.time += dt; + var ratio = 1; + this.duration > 0 && (ratio = this.time / this.duration); + ratio >= 1 && (ratio = 1); + if (this.transition === Transition.COLOR) { + var color = this._fromColor.lerp(this._toColor, ratio); + this._setTargetColor(color); + } else this.transition === Transition.SCALE && this._originalScale && (target.scale = this._fromScale.lerp(this._toScale, ratio)); + 1 === ratio && (this._transitionFinished = true); + }, + _registerNodeEvent: function _registerNodeEvent() { + this.node.on(cc.Node.EventType.TOUCH_START, this._onTouchBegan, this); + this.node.on(cc.Node.EventType.TOUCH_MOVE, this._onTouchMove, this); + this.node.on(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this); + this.node.on(cc.Node.EventType.TOUCH_CANCEL, this._onTouchCancel, this); + this.node.on(cc.Node.EventType.MOUSE_ENTER, this._onMouseMoveIn, this); + this.node.on(cc.Node.EventType.MOUSE_LEAVE, this._onMouseMoveOut, this); + }, + _unregisterNodeEvent: function _unregisterNodeEvent() { + this.node.off(cc.Node.EventType.TOUCH_START, this._onTouchBegan, this); + this.node.off(cc.Node.EventType.TOUCH_MOVE, this._onTouchMove, this); + this.node.off(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this); + this.node.off(cc.Node.EventType.TOUCH_CANCEL, this._onTouchCancel, this); + this.node.off(cc.Node.EventType.MOUSE_ENTER, this._onMouseMoveIn, this); + this.node.off(cc.Node.EventType.MOUSE_LEAVE, this._onMouseMoveOut, this); + }, + _registerTargetEvent: function _registerTargetEvent(target) { + false; + target.on(cc.Node.EventType.SCALE_CHANGED, this._onTargetScaleChanged, this); + }, + _unregisterTargetEvent: function _unregisterTargetEvent(target) { + false; + target.off(cc.Node.EventType.SCALE_CHANGED, this._onTargetScaleChanged, this); + }, + _getTargetSprite: function _getTargetSprite(target) { + var sprite = null; + target && (sprite = target.getComponent(cc.Sprite)); + return sprite; + }, + _applyTarget: function _applyTarget() { + var target = this._getTarget(); + this._sprite = this._getTargetSprite(target); + this._originalScale || (this._originalScale = cc.Vec2.ZERO); + this._originalScale.x = target.scaleX; + this._originalScale.y = target.scaleY; + this._registerTargetEvent(target); + }, + _onTouchBegan: function _onTouchBegan(event) { + if (!this.interactable || !this.enabledInHierarchy) return; + this._pressed = true; + this._updateState(); + event.stopPropagation(); + }, + _onTouchMove: function _onTouchMove(event) { + if (!this.interactable || !this.enabledInHierarchy || !this._pressed) return; + var touch = event.touch; + var hit = this.node._hitTest(touch.getLocation()); + var target = this._getTarget(); + var originalScale = this._originalScale; + if (this.transition === Transition.SCALE && originalScale) if (hit) { + this._fromScale.x = originalScale.x; + this._fromScale.y = originalScale.y; + this._toScale.x = originalScale.x * this.zoomScale; + this._toScale.y = originalScale.y * this.zoomScale; + this._transitionFinished = false; + } else { + this.time = 0; + this._transitionFinished = true; + target.setScale(originalScale.x, originalScale.y); + } else { + var state; + state = hit ? State.PRESSED : State.NORMAL; + this._applyTransition(state); + } + event.stopPropagation(); + }, + _onTouchEnded: function _onTouchEnded(event) { + if (!this.interactable || !this.enabledInHierarchy) return; + if (this._pressed) { + cc.Component.EventHandler.emitEvents(this.clickEvents, event); + this.node.emit("click", this); + } + this._pressed = false; + this._updateState(); + event.stopPropagation(); + }, + _onTouchCancel: function _onTouchCancel() { + if (!this.interactable || !this.enabledInHierarchy) return; + this._pressed = false; + this._updateState(); + }, + _onMouseMoveIn: function _onMouseMoveIn() { + if (this._pressed || !this.interactable || !this.enabledInHierarchy) return; + if (this.transition === Transition.SPRITE && !this.hoverSprite) return; + if (!this._hovered) { + this._hovered = true; + this._updateState(); + } + }, + _onMouseMoveOut: function _onMouseMoveOut() { + if (this._hovered) { + this._hovered = false; + this._updateState(); + } + }, + _updateState: function _updateState() { + var state = this._getButtonState(); + this._applyTransition(state); + this._updateDisabledState(); + }, + _getButtonState: function _getButtonState() { + var state; + state = this.interactable ? this._pressed ? State.PRESSED : this._hovered ? State.HOVER : State.NORMAL : State.DISABLED; + return state; + }, + _updateColorTransitionImmediately: function _updateColorTransitionImmediately(state) { + var color = this._getStateColor(state); + this._setTargetColor(color); + this._fromColor = color.clone(); + this._toColor = color; + }, + _updateColorTransition: function _updateColorTransition(state) { + if (false, state === State.DISABLED) this._updateColorTransitionImmediately(state); else { + var target = this._getTarget(); + var color = this._getStateColor(state); + this._fromColor = target.color.clone(); + this._toColor = color; + this.time = 0; + this._transitionFinished = false; + } + }, + _updateSpriteTransition: function _updateSpriteTransition(state) { + var sprite = this._getStateSprite(state); + this._sprite && sprite && (this._sprite.spriteFrame = sprite); + }, + _updateScaleTransition: function _updateScaleTransition(state) { + state === State.PRESSED ? this._zoomUp() : this._zoomBack(); + }, + _zoomUp: function _zoomUp() { + if (!this._originalScale) return; + this._fromScale.x = this._originalScale.x; + this._fromScale.y = this._originalScale.y; + this._toScale.x = this._originalScale.x * this.zoomScale; + this._toScale.y = this._originalScale.y * this.zoomScale; + this.time = 0; + this._transitionFinished = false; + }, + _zoomBack: function _zoomBack() { + if (!this._originalScale) return; + var target = this._getTarget(); + this._fromScale.x = target.scaleX; + this._fromScale.y = target.scaleY; + this._toScale.x = this._originalScale.x; + this._toScale.y = this._originalScale.y; + this.time = 0; + this._transitionFinished = false; + }, + _updateTransition: function _updateTransition(oldTransition) { + oldTransition === Transition.COLOR ? this._updateColorTransitionImmediately(State.NORMAL) : oldTransition === Transition.SPRITE && this._updateSpriteTransition(State.NORMAL); + this._updateState(); + }, + _applyTransition: function _applyTransition(state) { + var transition = this.transition; + transition === Transition.COLOR ? this._updateColorTransition(state) : transition === Transition.SPRITE ? this._updateSpriteTransition(state) : transition === Transition.SCALE && this._updateScaleTransition(state); + }, + _resizeNodeToTargetNode: false, + _updateDisabledState: function _updateDisabledState(force) { + if (!this._sprite) return; + if (this.enableAutoGrayEffect || force) { + var useGrayMaterial = false; + this.transition === Transition.SPRITE && this.disabledSprite || (useGrayMaterial = this.enableAutoGrayEffect && !this.interactable); + this._switchGrayMaterial(useGrayMaterial, this._sprite); + } + } + }); + cc.Button = module.exports = Button; + }), { + "../utils/gray-sprite-state": 202, + "./CCComponent": 91 + } ], + 90: [ (function(require, module, exports) { + "use strict"; + var Camera = require("../camera/CCCamera"); + var Component = require("./CCComponent"); + function resetWidgetComponent(canvas) { + var widget = canvas.node.getComponent(cc.Widget); + widget || (widget = canvas.node.addComponent(cc.Widget)); + widget.isAlignTop = true; + widget.isAlignBottom = true; + widget.isAlignLeft = true; + widget.isAlignRight = true; + widget.top = 0; + widget.bottom = 0; + widget.left = 0; + widget.right = 0; + } + var Canvas = cc.Class({ + name: "cc.Canvas", + extends: Component, + editor: false, + resetInEditor: false, + statics: { + instance: null + }, + properties: { + _designResolution: cc.size(960, 640), + designResolution: { + get: function get() { + return cc.size(this._designResolution); + }, + set: function set(value) { + this._designResolution.width = value.width; + this._designResolution.height = value.height; + this.applySettings(); + }, + tooltip: false + }, + _fitWidth: false, + _fitHeight: true, + fitHeight: { + get: function get() { + return this._fitHeight; + }, + set: function set(value) { + if (this._fitHeight !== value) { + this._fitHeight = value; + this.applySettings(); + } + }, + tooltip: false + }, + fitWidth: { + get: function get() { + return this._fitWidth; + }, + set: function set(value) { + if (this._fitWidth !== value) { + this._fitWidth = value; + this.applySettings(); + } + }, + tooltip: false + } + }, + _fitDesignResolution: false, + __preload: function __preload() { + var Flags; + false; + if (Canvas.instance) return cc.warnID(6700, this.node.name, Canvas.instance.node.name); + Canvas.instance = this; + this.applySettings(); + var widget = this.getComponent(cc.Widget); + !!widget && widget.updateAlignment(); + false; + }, + start: function start() { + if (!Camera.main && cc.game.renderType !== cc.game.RENDER_TYPE_CANVAS) { + var cameraNode = new cc.Node("Main Camera"); + cameraNode.parent = this.node; + cameraNode.setSiblingIndex(0); + var camera = cameraNode.addComponent(Camera); + var ClearFlags = Camera.ClearFlags; + camera.clearFlags = ClearFlags.COLOR | ClearFlags.DEPTH | ClearFlags.STENCIL; + camera.depth = -1; + } + }, + onDestroy: function onDestroy() { + false; + Canvas.instance === this && (Canvas.instance = null); + }, + applySettings: function applySettings() { + var ResolutionPolicy = cc.ResolutionPolicy; + var policy; + policy = this.fitHeight && this.fitWidth ? ResolutionPolicy.SHOW_ALL : this.fitHeight || this.fitWidth ? this.fitWidth ? ResolutionPolicy.FIXED_WIDTH : ResolutionPolicy.FIXED_HEIGHT : ResolutionPolicy.NO_BORDER; + var designRes = this._designResolution; + false; + cc.view.setDesignResolutionSize(designRes.width, designRes.height, policy); + } + }); + cc.Canvas = module.exports = Canvas; + }), { + "../camera/CCCamera": 85, + "./CCComponent": 91 + } ], + 91: [ (function(require, module, exports) { + "use strict"; + var CCObject = require("../platform/CCObject"); + var js = require("../platform/js"); + var idGenerater = new (require("../platform/id-generater"))("Comp"); + var IsOnEnableCalled = CCObject.Flags.IsOnEnableCalled; + var IsOnLoadCalled = CCObject.Flags.IsOnLoadCalled; + var ActionManagerExist = !!cc.ActionManager; + var Component = cc.Class({ + name: "cc.Component", + extends: CCObject, + ctor: function() { + this._id = idGenerater.getNewId(); + this.__eventTargets = []; + }, + properties: { + node: { + default: null, + visible: false + }, + name: { + get: function get() { + if (this._name) return this._name; + var className = cc.js.getClassName(this); + var trimLeft = className.lastIndexOf("."); + trimLeft >= 0 && (className = className.slice(trimLeft + 1)); + return this.node.name + "<" + className + ">"; + }, + set: function set(value) { + this._name = value; + }, + visible: false + }, + uuid: { + get: function get() { + return this._id; + }, + visible: false + }, + __scriptAsset: false, + _enabled: true, + enabled: { + get: function get() { + return this._enabled; + }, + set: function set(value) { + if (this._enabled !== value) { + this._enabled = value; + if (this.node._activeInHierarchy) { + var compScheduler = cc.director._compScheduler; + value ? compScheduler.enableComp(this) : compScheduler.disableComp(this); + } + } + }, + visible: false, + animatable: true + }, + enabledInHierarchy: { + get: function get() { + return this._enabled && this.node._activeInHierarchy; + }, + visible: false + }, + _isOnLoadCalled: { + get: function get() { + return this._objFlags & IsOnLoadCalled; + } + } + }, + update: null, + lateUpdate: null, + __preload: null, + onLoad: null, + start: null, + onEnable: null, + onDisable: null, + onDestroy: null, + onFocusInEditor: null, + onLostFocusInEditor: null, + resetInEditor: null, + addComponent: function addComponent(typeOrClassName) { + return this.node.addComponent(typeOrClassName); + }, + getComponent: function getComponent(typeOrClassName) { + return this.node.getComponent(typeOrClassName); + }, + getComponents: function getComponents(typeOrClassName) { + return this.node.getComponents(typeOrClassName); + }, + getComponentInChildren: function getComponentInChildren(typeOrClassName) { + return this.node.getComponentInChildren(typeOrClassName); + }, + getComponentsInChildren: function getComponentsInChildren(typeOrClassName) { + return this.node.getComponentsInChildren(typeOrClassName); + }, + _getLocalBounds: null, + onRestore: null, + destroy: function destroy() { + var depend; + false; + this._super() && this._enabled && this.node._activeInHierarchy && cc.director._compScheduler.disableComp(this); + }, + _onPreDestroy: function _onPreDestroy() { + ActionManagerExist && cc.director.getActionManager().removeAllActionsFromTarget(this); + this.unscheduleAllCallbacks(); + var eventTargets = this.__eventTargets; + for (var i = eventTargets.length - 1; i >= 0; --i) { + var target = eventTargets[i]; + target && target.targetOff(this); + } + eventTargets.length = 0; + false; + cc.director._nodeActivator.destroyComp(this); + this.node._removeComponent(this); + }, + _instantiate: function _instantiate(cloned) { + cloned || (cloned = cc.instantiate._clone(this, this)); + cloned.node = null; + return cloned; + }, + schedule: function schedule(callback, interval, repeat, delay) { + cc.assertID(callback, 1619); + interval = interval || 0; + cc.assertID(interval >= 0, 1620); + repeat = isNaN(repeat) ? cc.macro.REPEAT_FOREVER : repeat; + delay = delay || 0; + var scheduler = cc.director.getScheduler(); + var paused = scheduler.isTargetPaused(this); + scheduler.schedule(callback, this, interval, repeat, delay, paused); + }, + scheduleOnce: function scheduleOnce(callback, delay) { + this.schedule(callback, 0, 0, delay); + }, + unschedule: function unschedule(callback_fn) { + if (!callback_fn) return; + cc.director.getScheduler().unschedule(callback_fn, this); + }, + unscheduleAllCallbacks: function unscheduleAllCallbacks() { + cc.director.getScheduler().unscheduleAllForTarget(this); + } + }); + Component._requireComponent = null; + Component._executionOrder = 0; + false; + false, false; + js.value(Component, "_registerEditorProps", (function(cls, props) { + var reqComp = props.requireComponent; + reqComp && (cls._requireComponent = reqComp); + var order = props.executionOrder; + order && "number" === typeof order && (cls._executionOrder = order); + (false, false) && "disallowMultiple" in props && (cls._disallowMultiple = cls); + var name; + var key; + var val; + var willExecuteInEditMode; + false, false; + })); + Component.prototype.__scriptUuid = ""; + cc.Component = module.exports = Component; + }), { + "../platform/CCObject": 127, + "../platform/id-generater": 138, + "../platform/js": 142 + } ], + 92: [ (function(require, module, exports) { + "use strict"; + cc.Component.EventHandler = cc.Class({ + name: "cc.ClickEvent", + properties: { + target: { + default: null, + type: cc.Node + }, + component: "", + _componentId: "", + _componentName: { + get: function get() { + this._genCompIdIfNeeded(); + return this._compId2Name(this._componentId); + }, + set: function set(value) { + this._componentId = this._compName2Id(value); + } + }, + handler: { + default: "" + }, + customEventData: { + default: "" + } + }, + statics: { + emitEvents: function emitEvents(events) { + var args; + if (arguments.length > 0) { + args = new Array(arguments.length - 1); + for (var i = 0, l = args.length; i < l; i++) args[i] = arguments[i + 1]; + } + for (var _i = 0, _l = events.length; _i < _l; _i++) { + var event = events[_i]; + if (!(event instanceof cc.Component.EventHandler)) continue; + event.emit(args); + } + } + }, + emit: function emit(params) { + var target = this.target; + if (!cc.isValid(target)) return; + this._genCompIdIfNeeded(); + var compType = cc.js._getClassById(this._componentId); + var comp = target.getComponent(compType); + if (!cc.isValid(comp)) return; + var handler = comp[this.handler]; + if ("function" !== typeof handler) return; + if (null != this.customEventData && "" !== this.customEventData) { + params = params.slice(); + params.push(this.customEventData); + } + handler.apply(comp, params); + }, + _compName2Id: function _compName2Id(compName) { + var comp = cc.js.getClassByName(compName); + return cc.js._getClassId(comp); + }, + _compId2Name: function _compId2Name(compId) { + var comp = cc.js._getClassById(compId); + return cc.js.getClassName(comp); + }, + _genCompIdIfNeeded: function _genCompIdIfNeeded() { + if (!this._componentId) { + this._componentName = this.component; + this.component = ""; + } + } + }); + }), {} ], + 93: [ (function(require, module, exports) { + "use strict"; + var macro = require("../platform/CCMacro"); + var RenderComponent = require("./CCRenderComponent"); + var Material = require("../assets/material/CCMaterial"); + var LabelFrame = require("../renderer/utils/label/label-frame"); + var BlendFunc = require("../utils/blend-func"); + var deleteFromDynamicAtlas = require("../renderer/utils/utils").deleteFromDynamicAtlas; + var HorizontalAlign = macro.TextAlignment; + var VerticalAlign = macro.VerticalTextAlignment; + var Overflow = cc.Enum({ + NONE: 0, + CLAMP: 1, + SHRINK: 2, + RESIZE_HEIGHT: 3 + }); + var CacheMode = cc.Enum({ + NONE: 0, + BITMAP: 1, + CHAR: 2 + }); + var BOLD_FLAG = 1; + var ITALIC_FLAG = 2; + var UNDERLINE_FLAG = 4; + var Label = cc.Class({ + name: "cc.Label", + extends: RenderComponent, + mixins: [ BlendFunc ], + ctor: function ctor() { + false; + this._actualFontSize = 0; + this._assemblerData = null; + this._frame = null; + this._ttfTexture = null; + this._letterTexture = null; + cc.game.renderType === cc.game.RENDER_TYPE_CANVAS ? this._updateMaterial = this._updateMaterialCanvas : this._updateMaterial = this._updateMaterialWebgl; + }, + editor: false, + properties: { + _string: { + default: "", + formerlySerializedAs: "_N$string" + }, + string: { + get: function get() { + return this._string; + }, + set: function set(value) { + var oldValue = this._string; + this._string = "" + value; + this.string !== oldValue && this.setVertsDirty(); + this._checkStringEmpty(); + }, + multiline: true, + tooltip: false + }, + horizontalAlign: { + default: HorizontalAlign.LEFT, + type: HorizontalAlign, + tooltip: false, + notify: function notify(oldValue) { + if (this.horizontalAlign === oldValue) return; + this.setVertsDirty(); + }, + animatable: false + }, + verticalAlign: { + default: VerticalAlign.TOP, + type: VerticalAlign, + tooltip: false, + notify: function notify(oldValue) { + if (this.verticalAlign === oldValue) return; + this.setVertsDirty(); + }, + animatable: false + }, + actualFontSize: { + displayName: "Actual Font Size", + animatable: false, + readonly: true, + get: function get() { + return this._actualFontSize; + }, + tooltip: false + }, + _fontSize: 40, + fontSize: { + get: function get() { + return this._fontSize; + }, + set: function set(value) { + if (this._fontSize === value) return; + this._fontSize = value; + this.setVertsDirty(); + }, + range: [ 0, 512 ], + tooltip: false + }, + fontFamily: { + default: "Arial", + tooltip: false, + notify: function notify(oldValue) { + if (this.fontFamily === oldValue) return; + this.setVertsDirty(); + }, + animatable: false + }, + _lineHeight: 40, + lineHeight: { + get: function get() { + return this._lineHeight; + }, + set: function set(value) { + if (this._lineHeight === value) return; + this._lineHeight = value; + this.setVertsDirty(); + }, + tooltip: false + }, + overflow: { + default: Overflow.NONE, + type: Overflow, + tooltip: false, + notify: function notify(oldValue) { + if (this.overflow === oldValue) return; + this.setVertsDirty(); + }, + animatable: false + }, + _enableWrapText: true, + enableWrapText: { + get: function get() { + return this._enableWrapText; + }, + set: function set(value) { + if (this._enableWrapText === value) return; + this._enableWrapText = value; + this.setVertsDirty(); + }, + animatable: false, + tooltip: false + }, + _N$file: null, + font: { + get: function get() { + return this._N$file; + }, + set: function set(value) { + if (this.font === value) return; + value || (this._isSystemFontUsed = true); + false; + this._N$file = value; + value && this._isSystemFontUsed && (this._isSystemFontUsed = false); + if (!this.enabledInHierarchy) return; + this._forceUpdateRenderData(); + }, + type: cc.Font, + tooltip: false, + animatable: false + }, + _isSystemFontUsed: true, + useSystemFont: { + get: function get() { + return this._isSystemFontUsed; + }, + set: function set(value) { + if (this._isSystemFontUsed === value) return; + this._isSystemFontUsed = !!value; + false; + if (value) { + this.font = null; + if (!this.enabledInHierarchy) return; + this._forceUpdateRenderData(); + } + this.markForValidate(); + }, + animatable: false, + tooltip: false + }, + _bmFontOriginalSize: { + displayName: "BMFont Original Size", + get: function get() { + return this._N$file instanceof cc.BitmapFont ? this._N$file.fontSize : -1; + }, + visible: true, + animatable: false + }, + _spacingX: 0, + spacingX: { + get: function get() { + return this._spacingX; + }, + set: function set(value) { + this._spacingX = value; + this.setVertsDirty(); + }, + tooltip: false + }, + _batchAsBitmap: false, + cacheMode: { + default: CacheMode.NONE, + type: CacheMode, + tooltip: false, + notify: function notify(oldValue) { + if (this.cacheMode === oldValue) return; + oldValue !== CacheMode.BITMAP || this.font instanceof cc.BitmapFont || this._frame && this._frame._resetDynamicAtlasFrame(); + if (oldValue === CacheMode.CHAR) { + this._ttfTexture = null; + var material = this._materials[0]; + material && material.material && cc.Label._shareAtlas.material === material.material && this.setMaterial(0, this._getDefaultMaterial()); + } + if (!this.enabledInHierarchy) return; + this._forceUpdateRenderData(); + }, + animatable: false + }, + _styleFlags: 0, + enableBold: { + get: function get() { + return !!(this._styleFlags & BOLD_FLAG); + }, + set: function set(value) { + value ? this._styleFlags |= BOLD_FLAG : this._styleFlags &= ~BOLD_FLAG; + this.setVertsDirty(); + }, + animatable: false, + tooltip: false + }, + enableItalic: { + get: function get() { + return !!(this._styleFlags & ITALIC_FLAG); + }, + set: function set(value) { + value ? this._styleFlags |= ITALIC_FLAG : this._styleFlags &= ~ITALIC_FLAG; + this.setVertsDirty(); + }, + animatable: false, + tooltip: false + }, + enableUnderline: { + get: function get() { + return !!(this._styleFlags & UNDERLINE_FLAG); + }, + set: function set(value) { + value ? this._styleFlags |= UNDERLINE_FLAG : this._styleFlags &= ~UNDERLINE_FLAG; + this.setVertsDirty(); + }, + animatable: false, + tooltip: false + }, + _underlineHeight: 0, + underlineHeight: { + get: function get() { + return this._underlineHeight; + }, + set: function set(value) { + if (this._underlineHeight === value) return; + this._underlineHeight = value; + this.setVertsDirty(); + }, + tooltip: false + }, + autoSwitchMaterial: { + type: RenderComponent.EnableType, + default: RenderComponent.EnableType.GLOBAL, + notify: function notify(oldValue) { + if (this.autoSwitchMaterial === oldValue) return; + this.setVertsDirty(); + } + }, + allowDynamicAtlas: { + type: RenderComponent.EnableType, + default: RenderComponent.EnableType.GLOBAL, + notify: function notify(oldValue) { + if (this.allowDynamicAtlas === oldValue) return; + this.setVertsDirty(); + } + }, + enableRetina: { + type: RenderComponent.EnableType, + default: RenderComponent.EnableType.GLOBAL, + notify: function notify(oldValue) { + if (this.enableRetina === oldValue) return; + this.setVertsDirty(); + } + } + }, + statics: { + HorizontalAlign: HorizontalAlign, + VerticalAlign: VerticalAlign, + Overflow: Overflow, + CacheMode: CacheMode, + _shareAtlas: null, + clearCharCache: function clearCharCache() { + Label._shareAtlas && Label._shareAtlas.clearAllCache(); + } + }, + onLoad: function onLoad() { + if (this._batchAsBitmap && this.cacheMode === CacheMode.NONE) { + this.cacheMode = CacheMode.BITMAP; + this._batchAsBitmap = false; + } + cc.game.renderType === cc.game.RENDER_TYPE_CANVAS && (this.cacheMode = CacheMode.NONE); + }, + onEnable: function onEnable() { + this._super(); + this.node.on(cc.Node.EventType.SIZE_CHANGED, this._nodeSizeChanged, this); + this.node.on(cc.Node.EventType.ANCHOR_CHANGED, this.setVertsDirty, this); + this.node.on(cc.Node.EventType.COLOR_CHANGED, this._nodeColorChanged, this); + this._forceUpdateRenderData(); + }, + onDisable: function onDisable() { + this._super(); + this.node.off(cc.Node.EventType.SIZE_CHANGED, this._nodeSizeChanged, this); + this.node.off(cc.Node.EventType.ANCHOR_CHANGED, this.setVertsDirty, this); + this.node.off(cc.Node.EventType.COLOR_CHANGED, this._nodeColorChanged, this); + }, + onDestroy: function onDestroy() { + this._assembler && this._assembler._resetAssemblerData && this._assembler._resetAssemblerData(this._assemblerData); + this._assemblerData = null; + this._letterTexture = null; + if (this._ttfTexture) { + this._ttfTexture.destroy(); + this._ttfTexture = null; + } + this._super(); + }, + _nodeSizeChanged: function _nodeSizeChanged() { + (false, this.overflow !== Overflow.NONE) && this.setVertsDirty(); + }, + _nodeColorChanged: function _nodeColorChanged() { + this.font instanceof cc.BitmapFont || this.setVertsDirty(); + }, + setVertsDirty: function setVertsDirty() { + false; + this._super(); + }, + _updateColor: function _updateColor() { + this.font instanceof cc.BitmapFont || this._srcBlendFactor === cc.macro.BlendFactor.SRC_ALPHA && this.node._renderFlag & cc.RenderFlow.FLAG_OPACITY || this.setVertsDirty(); + RenderComponent.prototype._updateColor.call(this); + }, + _validateRender: function _validateRender() { + if (!this.string) { + this.disableRender(); + return; + } + if (this._materials[0]) { + var font = this.font; + if (!(font instanceof cc.BitmapFont)) return; + var spriteFrame = font.spriteFrame; + if (spriteFrame && spriteFrame.textureLoaded() && font._fntConfig) return; + } + this.disableRender(); + }, + _resetAssembler: function _resetAssembler() { + this._resetFrame(); + RenderComponent.prototype._resetAssembler.call(this); + }, + _resetFrame: function _resetFrame() { + if (this._frame && !(this.font instanceof cc.BitmapFont)) { + deleteFromDynamicAtlas(this, this._frame); + this._frame = null; + } + }, + _checkStringEmpty: function _checkStringEmpty() { + this.markForRender(!!this.string); + }, + _on3DNodeChanged: function _on3DNodeChanged() { + this._resetAssembler(); + this._applyFontTexture(); + }, + _onBMFontTextureLoaded: function _onBMFontTextureLoaded() { + this._frame._texture = this.font.spriteFrame._texture; + this.markForRender(true); + this._updateMaterial(); + this._assembler && this._assembler.updateRenderData(this); + }, + _onBlendChanged: function _onBlendChanged() { + if (!this.useSystemFont || !this.enabledInHierarchy) return; + this._forceUpdateRenderData(); + }, + _applyFontTexture: function _applyFontTexture() { + var font = this.font; + if (font instanceof cc.BitmapFont) { + var spriteFrame = font.spriteFrame; + this._frame = spriteFrame; + spriteFrame && spriteFrame.onTextureLoaded(this._onBMFontTextureLoaded, this); + } else { + if (!this._nativeTTF()) { + this._frame || (this._frame = new LabelFrame()); + if (this.cacheMode === CacheMode.CHAR) { + this._letterTexture = this._assembler._getAssemblerData(); + this._frame._refreshTexture(this._letterTexture); + } else if (!this._ttfTexture) { + this._ttfTexture = new cc.Texture2D(); + this._assemblerData = this._assembler._getAssemblerData(); + this._ttfTexture.initWithElement(this._assemblerData.canvas); + } + if (this.cacheMode !== CacheMode.CHAR) { + this._frame._resetDynamicAtlasFrame(); + this._frame._refreshTexture(this._ttfTexture); + this._srcBlendFactor === cc.macro.BlendFactor.ONE && true && this._ttfTexture.setPremultiplyAlpha(true); + } + this._updateMaterial(); + } + this._assembler && this._assembler.updateRenderData(this); + } + this.markForValidate(); + }, + _updateMaterialCanvas: function _updateMaterialCanvas() { + if (!this._frame) return; + this._frame._texture._nativeUrl = this.uuid + "_texture"; + }, + _updateMaterialWebgl: function _updateMaterialWebgl() { + var material = this.getMaterial(0); + if (this._nativeTTF()) { + material && this._assembler._updateTTFMaterial(this); + return; + } + if (!this._frame) return; + if (material) { + var isMultiMaterial = material.material.isMultiSupport(); + isMultiMaterial ? this._texIdDirty = true : material.setProperty("texture", this._frame._texture); + this._assembler && (isMultiMaterial && !this._assembler.isMulti || !isMultiMaterial && this._assembler.isMulti) && RenderComponent.prototype._resetAssembler.call(this); + } + BlendFunc.prototype._updateMaterial.call(this); + }, + _forceUseCanvas: false, + _useNativeTTF: function _useNativeTTF() { + return cc.macro.ENABLE_NATIVE_TTF_RENDERER && !this._forceUseCanvas; + }, + _nativeTTF: function _nativeTTF() { + return this._useNativeTTF() && !!this._assembler && !!this._assembler._updateTTFMaterial; + }, + _forceUpdateRenderData: function _forceUpdateRenderData() { + this.setVertsDirty(); + this._resetAssembler(); + this._applyFontTexture(); + }, + _enableBold: function _enableBold(enabled) { + true; + cc.warn("`label._enableBold` is deprecated, use `label.enableBold = true` instead please"); + this.enableBold = !!enabled; + }, + _enableItalics: function _enableItalics(enabled) { + true; + cc.warn("`label._enableItalics` is deprecated, use `label.enableItalics = true` instead please"); + this.enableItalic = !!enabled; + }, + _enableUnderline: function _enableUnderline(enabled) { + true; + cc.warn("`label._enableUnderline` is deprecated, use `label.enableUnderline = true` instead please"); + this.enableUnderline = !!enabled; + } + }); + cc.Label = module.exports = Label; + }), { + "../assets/material/CCMaterial": 75, + "../platform/CCMacro": 126, + "../renderer/utils/label/label-frame": 157, + "../renderer/utils/utils": 160, + "../utils/blend-func": 199, + "./CCRenderComponent": 98 + } ], + 94: [ (function(require, module, exports) { + "use strict"; + var LabelOutline = cc.Class({ + name: "cc.LabelOutline", + extends: require("./CCComponent"), + editor: false, + properties: { + _color: cc.Color.WHITE, + _width: 1, + color: { + tooltip: false, + get: function get() { + return this._color.clone(); + }, + set: function set(value) { + this._color.equals(value) || this._color.set(value); + this._updateRenderData(); + } + }, + width: { + tooltip: false, + get: function get() { + return this._width; + }, + set: function set(value) { + if (this._width === value) return; + this._width = value; + this._updateRenderData(); + }, + range: [ 0, 512 ] + } + }, + onEnable: function onEnable() { + this._updateRenderData(); + }, + onDisable: function onDisable() { + this._updateRenderData(); + }, + _updateRenderData: function _updateRenderData() { + var label = this.node.getComponent(cc.Label); + label && label.setVertsDirty(); + } + }); + cc.LabelOutline = module.exports = LabelOutline; + }), { + "./CCComponent": 91 + } ], + 95: [ (function(require, module, exports) { + "use strict"; + var LabelShadow = cc.Class({ + name: "cc.LabelShadow", + extends: require("./CCComponent"), + editor: false, + properties: { + _color: cc.Color.WHITE, + _offset: cc.v2(2, 2), + _blur: 2, + color: { + tooltip: false, + get: function get() { + return this._color.clone(); + }, + set: function set(value) { + this._color.equals(value) || this._color.set(value); + this._updateRenderData(); + } + }, + offset: { + tooltip: false, + get: function get() { + return this._offset; + }, + set: function set(value) { + this._offset = value; + this._updateRenderData(); + } + }, + blur: { + tooltip: false, + get: function get() { + return this._blur; + }, + set: function set(value) { + this._blur = value; + this._updateRenderData(); + }, + range: [ 0, 1024 ] + } + }, + onEnable: function onEnable() { + this._updateRenderData(); + }, + onDisable: function onDisable() { + this._updateRenderData(); + }, + _updateRenderData: function _updateRenderData() { + var label = this.node.getComponent(cc.Label); + label && label.markForRender(true); + } + }); + cc.LabelShadow = module.exports = LabelShadow; + }), { + "./CCComponent": 91 + } ], + 96: [ (function(require, module, exports) { + "use strict"; + var NodeEvent = require("../CCNode").EventType; + var Type = cc.Enum({ + NONE: 0, + HORIZONTAL: 1, + VERTICAL: 2, + GRID: 3 + }); + var ResizeMode = cc.Enum({ + NONE: 0, + CONTAINER: 1, + CHILDREN: 2 + }); + var AxisDirection = cc.Enum({ + HORIZONTAL: 0, + VERTICAL: 1 + }); + var VerticalDirection = cc.Enum({ + BOTTOM_TO_TOP: 0, + TOP_TO_BOTTOM: 1 + }); + var HorizontalDirection = cc.Enum({ + LEFT_TO_RIGHT: 0, + RIGHT_TO_LEFT: 1 + }); + var Layout = cc.Class({ + name: "cc.Layout", + extends: require("./CCComponent"), + editor: false, + properties: { + _layoutSize: cc.size(300, 200), + _layoutDirty: { + default: true, + serializable: false + }, + _resize: ResizeMode.NONE, + _N$layoutType: Type.NONE, + type: { + type: Type, + get: function get() { + return this._N$layoutType; + }, + set: function set(value) { + this._N$layoutType = value; + var reLayouted; + false; + this._doLayoutDirty(); + }, + tooltip: false, + animatable: false + }, + resizeMode: { + type: ResizeMode, + tooltip: false, + animatable: false, + get: function get() { + return this._resize; + }, + set: function set(value) { + if (this.type === Type.NONE && value === ResizeMode.CHILDREN) return; + this._resize = value; + var reLayouted; + false; + this._doLayoutDirty(); + } + }, + cellSize: { + default: cc.size(40, 40), + tooltip: false, + type: cc.Size, + notify: function notify() { + this._doLayoutDirty(); + } + }, + startAxis: { + default: AxisDirection.HORIZONTAL, + tooltip: false, + type: AxisDirection, + notify: function notify() { + var reLayouted; + false; + this._doLayoutDirty(); + }, + animatable: false + }, + paddingLeft: { + default: 0, + tooltip: false, + notify: function notify() { + this._doLayoutDirty(); + } + }, + paddingRight: { + default: 0, + tooltip: false, + notify: function notify() { + this._doLayoutDirty(); + } + }, + paddingTop: { + default: 0, + tooltip: false, + notify: function notify() { + this._doLayoutDirty(); + } + }, + paddingBottom: { + default: 0, + tooltip: false, + notify: function notify() { + this._doLayoutDirty(); + } + }, + spacingX: { + default: 0, + notify: function notify() { + this._doLayoutDirty(); + }, + tooltip: false + }, + spacingY: { + default: 0, + notify: function notify() { + this._doLayoutDirty(); + }, + tooltip: false + }, + verticalDirection: { + default: VerticalDirection.TOP_TO_BOTTOM, + type: VerticalDirection, + notify: function notify() { + this._doLayoutDirty(); + }, + tooltip: false, + animatable: false + }, + horizontalDirection: { + default: HorizontalDirection.LEFT_TO_RIGHT, + type: HorizontalDirection, + notify: function notify() { + this._doLayoutDirty(); + }, + tooltip: false, + animatable: false + }, + affectedByScale: { + default: false, + notify: function notify() { + this._doLayoutDirty(); + }, + animatable: false, + tooltip: false + } + }, + statics: { + Type: Type, + VerticalDirection: VerticalDirection, + HorizontalDirection: HorizontalDirection, + ResizeMode: ResizeMode, + AxisDirection: AxisDirection + }, + onEnable: function onEnable() { + this._addEventListeners(); + this.node.getContentSize().equals(cc.size(0, 0)) && this.node.setContentSize(this._layoutSize); + this._doLayoutDirty(); + }, + onDisable: function onDisable() { + this._removeEventListeners(); + }, + _doLayoutDirty: function _doLayoutDirty() { + this._layoutDirty = true; + }, + _doScaleDirty: function _doScaleDirty() { + this._layoutDirty = this._layoutDirty || this.affectedByScale; + }, + _addEventListeners: function _addEventListeners() { + cc.director.on(cc.Director.EVENT_AFTER_UPDATE, this.updateLayout, this); + this.node.on(NodeEvent.SIZE_CHANGED, this._resized, this); + this.node.on(NodeEvent.ANCHOR_CHANGED, this._doLayoutDirty, this); + this.node.on(NodeEvent.CHILD_ADDED, this._childAdded, this); + this.node.on(NodeEvent.CHILD_REMOVED, this._childRemoved, this); + this.node.on(NodeEvent.CHILD_REORDER, this._doLayoutDirty, this); + this._addChildrenEventListeners(); + }, + _removeEventListeners: function _removeEventListeners() { + cc.director.off(cc.Director.EVENT_AFTER_UPDATE, this.updateLayout, this); + this.node.off(NodeEvent.SIZE_CHANGED, this._resized, this); + this.node.off(NodeEvent.ANCHOR_CHANGED, this._doLayoutDirty, this); + this.node.off(NodeEvent.CHILD_ADDED, this._childAdded, this); + this.node.off(NodeEvent.CHILD_REMOVED, this._childRemoved, this); + this.node.off(NodeEvent.CHILD_REORDER, this._doLayoutDirty, this); + this._removeChildrenEventListeners(); + }, + _addChildrenEventListeners: function _addChildrenEventListeners() { + var children = this.node.children; + for (var i = 0; i < children.length; ++i) { + var child = children[i]; + child.on(NodeEvent.SCALE_CHANGED, this._doScaleDirty, this); + child.on(NodeEvent.SIZE_CHANGED, this._doLayoutDirty, this); + child.on(NodeEvent.POSITION_CHANGED, this._doLayoutDirty, this); + child.on(NodeEvent.ANCHOR_CHANGED, this._doLayoutDirty, this); + child.on("active-in-hierarchy-changed", this._doLayoutDirty, this); + } + }, + _removeChildrenEventListeners: function _removeChildrenEventListeners() { + var children = this.node.children; + for (var i = 0; i < children.length; ++i) { + var child = children[i]; + child.off(NodeEvent.SCALE_CHANGED, this._doScaleDirty, this); + child.off(NodeEvent.SIZE_CHANGED, this._doLayoutDirty, this); + child.off(NodeEvent.POSITION_CHANGED, this._doLayoutDirty, this); + child.off(NodeEvent.ANCHOR_CHANGED, this._doLayoutDirty, this); + child.off("active-in-hierarchy-changed", this._doLayoutDirty, this); + } + }, + _childAdded: function _childAdded(child) { + child.on(NodeEvent.SCALE_CHANGED, this._doScaleDirty, this); + child.on(NodeEvent.SIZE_CHANGED, this._doLayoutDirty, this); + child.on(NodeEvent.POSITION_CHANGED, this._doLayoutDirty, this); + child.on(NodeEvent.ANCHOR_CHANGED, this._doLayoutDirty, this); + child.on("active-in-hierarchy-changed", this._doLayoutDirty, this); + this._doLayoutDirty(); + }, + _childRemoved: function _childRemoved(child) { + child.off(NodeEvent.SCALE_CHANGED, this._doScaleDirty, this); + child.off(NodeEvent.SIZE_CHANGED, this._doLayoutDirty, this); + child.off(NodeEvent.POSITION_CHANGED, this._doLayoutDirty, this); + child.off(NodeEvent.ANCHOR_CHANGED, this._doLayoutDirty, this); + child.off("active-in-hierarchy-changed", this._doLayoutDirty, this); + this._doLayoutDirty(); + }, + _resized: function _resized() { + this._layoutSize = this.node.getContentSize(); + this._doLayoutDirty(); + }, + _doLayoutHorizontally: function _doLayoutHorizontally(baseWidth, rowBreak, fnPositionY, applyChildren) { + var layoutAnchor = this.node.getAnchorPoint(); + var children = this.node.children; + var sign = 1; + var paddingX = this.paddingLeft; + var leftBoundaryOfLayout = -layoutAnchor.x * baseWidth; + if (this.horizontalDirection === HorizontalDirection.RIGHT_TO_LEFT) { + sign = -1; + leftBoundaryOfLayout = (1 - layoutAnchor.x) * baseWidth; + paddingX = this.paddingRight; + } + var nextX = leftBoundaryOfLayout + sign * paddingX - sign * this.spacingX; + var rowMaxHeight = 0; + var tempMaxHeight = 0; + var secondMaxHeight = 0; + var row = 0; + var containerResizeBoundary = 0; + var maxHeightChildAnchorY = 0; + var activeChildCount = 0; + for (var i = 0; i < children.length; ++i) { + var child = children[i]; + child.activeInHierarchy && activeChildCount++; + } + var newChildWidth = this.cellSize.width; + this.type !== Type.GRID && this.resizeMode === ResizeMode.CHILDREN && (newChildWidth = (baseWidth - (this.paddingLeft + this.paddingRight) - (activeChildCount - 1) * this.spacingX) / activeChildCount); + for (var i = 0; i < children.length; ++i) { + var child = children[i]; + var childScaleX = this._getUsedScaleValue(child.scaleX); + var childScaleY = this._getUsedScaleValue(child.scaleY); + if (!child.activeInHierarchy) continue; + if (this._resize === ResizeMode.CHILDREN) { + child.width = newChildWidth / childScaleX; + this.type === Type.GRID && (child.height = this.cellSize.height / childScaleY); + } + var anchorX = child.anchorX; + var childBoundingBoxWidth = child.width * childScaleX; + var childBoundingBoxHeight = child.height * childScaleY; + secondMaxHeight > tempMaxHeight && (tempMaxHeight = secondMaxHeight); + if (childBoundingBoxHeight >= tempMaxHeight) { + secondMaxHeight = tempMaxHeight; + tempMaxHeight = childBoundingBoxHeight; + maxHeightChildAnchorY = child.getAnchorPoint().y; + } + this.horizontalDirection === HorizontalDirection.RIGHT_TO_LEFT && (anchorX = 1 - child.anchorX); + nextX = nextX + sign * anchorX * childBoundingBoxWidth + sign * this.spacingX; + var rightBoundaryOfChild = sign * (1 - anchorX) * childBoundingBoxWidth; + if (rowBreak) { + var rowBreakBoundary = nextX + rightBoundaryOfChild + sign * (sign > 0 ? this.paddingRight : this.paddingLeft); + var leftToRightRowBreak = this.horizontalDirection === HorizontalDirection.LEFT_TO_RIGHT && rowBreakBoundary > (1 - layoutAnchor.x) * baseWidth; + var rightToLeftRowBreak = this.horizontalDirection === HorizontalDirection.RIGHT_TO_LEFT && rowBreakBoundary < -layoutAnchor.x * baseWidth; + if (leftToRightRowBreak || rightToLeftRowBreak) { + if (childBoundingBoxHeight >= tempMaxHeight) { + 0 === secondMaxHeight && (secondMaxHeight = tempMaxHeight); + rowMaxHeight += secondMaxHeight; + secondMaxHeight = tempMaxHeight; + } else { + rowMaxHeight += tempMaxHeight; + secondMaxHeight = childBoundingBoxHeight; + tempMaxHeight = 0; + } + nextX = leftBoundaryOfLayout + sign * (paddingX + anchorX * childBoundingBoxWidth); + row++; + } + } + var finalPositionY = fnPositionY(child, rowMaxHeight, row); + baseWidth >= childBoundingBoxWidth + this.paddingLeft + this.paddingRight && applyChildren && child.setPosition(cc.v2(nextX, finalPositionY)); + var signX = 1; + var tempFinalPositionY; + var topMarign = 0 === tempMaxHeight ? childBoundingBoxHeight : tempMaxHeight; + if (this.verticalDirection === VerticalDirection.TOP_TO_BOTTOM) { + containerResizeBoundary = containerResizeBoundary || this.node._contentSize.height; + signX = -1; + tempFinalPositionY = finalPositionY + signX * (topMarign * maxHeightChildAnchorY + this.paddingBottom); + tempFinalPositionY < containerResizeBoundary && (containerResizeBoundary = tempFinalPositionY); + } else { + containerResizeBoundary = containerResizeBoundary || -this.node._contentSize.height; + tempFinalPositionY = finalPositionY + signX * (topMarign * maxHeightChildAnchorY + this.paddingTop); + tempFinalPositionY > containerResizeBoundary && (containerResizeBoundary = tempFinalPositionY); + } + nextX += rightBoundaryOfChild; + } + return containerResizeBoundary; + }, + _getVerticalBaseHeight: function _getVerticalBaseHeight(children) { + var newHeight = 0; + var activeChildCount = 0; + if (this.resizeMode === ResizeMode.CONTAINER) { + for (var i = 0; i < children.length; ++i) { + var child = children[i]; + if (child.activeInHierarchy) { + activeChildCount++; + newHeight += child.height * this._getUsedScaleValue(child.scaleY); + } + } + newHeight += (activeChildCount - 1) * this.spacingY + this.paddingBottom + this.paddingTop; + } else newHeight = this.node.getContentSize().height; + return newHeight; + }, + _doLayoutVertically: function _doLayoutVertically(baseHeight, columnBreak, fnPositionX, applyChildren) { + var layoutAnchor = this.node.getAnchorPoint(); + var children = this.node.children; + var sign = 1; + var paddingY = this.paddingBottom; + var bottomBoundaryOfLayout = -layoutAnchor.y * baseHeight; + if (this.verticalDirection === VerticalDirection.TOP_TO_BOTTOM) { + sign = -1; + bottomBoundaryOfLayout = (1 - layoutAnchor.y) * baseHeight; + paddingY = this.paddingTop; + } + var nextY = bottomBoundaryOfLayout + sign * paddingY - sign * this.spacingY; + var columnMaxWidth = 0; + var tempMaxWidth = 0; + var secondMaxWidth = 0; + var column = 0; + var containerResizeBoundary = 0; + var maxWidthChildAnchorX = 0; + var activeChildCount = 0; + for (var i = 0; i < children.length; ++i) { + var child = children[i]; + child.activeInHierarchy && activeChildCount++; + } + var newChildHeight = this.cellSize.height; + this.type !== Type.GRID && this.resizeMode === ResizeMode.CHILDREN && (newChildHeight = (baseHeight - (this.paddingTop + this.paddingBottom) - (activeChildCount - 1) * this.spacingY) / activeChildCount); + for (var i = 0; i < children.length; ++i) { + var child = children[i]; + var childScaleX = this._getUsedScaleValue(child.scaleX); + var childScaleY = this._getUsedScaleValue(child.scaleY); + if (!child.activeInHierarchy) continue; + if (this.resizeMode === ResizeMode.CHILDREN) { + child.height = newChildHeight / childScaleY; + this.type === Type.GRID && (child.width = this.cellSize.width / childScaleX); + } + var anchorY = child.anchorY; + var childBoundingBoxWidth = child.width * childScaleX; + var childBoundingBoxHeight = child.height * childScaleY; + secondMaxWidth > tempMaxWidth && (tempMaxWidth = secondMaxWidth); + if (childBoundingBoxWidth >= tempMaxWidth) { + secondMaxWidth = tempMaxWidth; + tempMaxWidth = childBoundingBoxWidth; + maxWidthChildAnchorX = child.getAnchorPoint().x; + } + this.verticalDirection === VerticalDirection.TOP_TO_BOTTOM && (anchorY = 1 - child.anchorY); + nextY = nextY + sign * anchorY * childBoundingBoxHeight + sign * this.spacingY; + var topBoundaryOfChild = sign * (1 - anchorY) * childBoundingBoxHeight; + if (columnBreak) { + var columnBreakBoundary = nextY + topBoundaryOfChild + sign * (sign > 0 ? this.paddingTop : this.paddingBottom); + var bottomToTopColumnBreak = this.verticalDirection === VerticalDirection.BOTTOM_TO_TOP && columnBreakBoundary > (1 - layoutAnchor.y) * baseHeight; + var topToBottomColumnBreak = this.verticalDirection === VerticalDirection.TOP_TO_BOTTOM && columnBreakBoundary < -layoutAnchor.y * baseHeight; + if (bottomToTopColumnBreak || topToBottomColumnBreak) { + if (childBoundingBoxWidth >= tempMaxWidth) { + 0 === secondMaxWidth && (secondMaxWidth = tempMaxWidth); + columnMaxWidth += secondMaxWidth; + secondMaxWidth = tempMaxWidth; + } else { + columnMaxWidth += tempMaxWidth; + secondMaxWidth = childBoundingBoxWidth; + tempMaxWidth = 0; + } + nextY = bottomBoundaryOfLayout + sign * (paddingY + anchorY * childBoundingBoxHeight); + column++; + } + } + var finalPositionX = fnPositionX(child, columnMaxWidth, column); + baseHeight >= childBoundingBoxHeight + (this.paddingTop + this.paddingBottom) && applyChildren && child.setPosition(cc.v2(finalPositionX, nextY)); + var signX = 1; + var tempFinalPositionX; + var rightMarign = 0 === tempMaxWidth ? childBoundingBoxWidth : tempMaxWidth; + if (this.horizontalDirection === HorizontalDirection.RIGHT_TO_LEFT) { + signX = -1; + containerResizeBoundary = containerResizeBoundary || this.node._contentSize.width; + tempFinalPositionX = finalPositionX + signX * (rightMarign * maxWidthChildAnchorX + this.paddingLeft); + tempFinalPositionX < containerResizeBoundary && (containerResizeBoundary = tempFinalPositionX); + } else { + containerResizeBoundary = containerResizeBoundary || -this.node._contentSize.width; + tempFinalPositionX = finalPositionX + signX * (rightMarign * maxWidthChildAnchorX + this.paddingRight); + tempFinalPositionX > containerResizeBoundary && (containerResizeBoundary = tempFinalPositionX); + } + nextY += topBoundaryOfChild; + } + return containerResizeBoundary; + }, + _doLayoutBasic: function _doLayoutBasic() { + var children = this.node.children; + var allChildrenBoundingBox = null; + for (var i = 0; i < children.length; ++i) { + var child = children[i]; + child.activeInHierarchy && (allChildrenBoundingBox ? allChildrenBoundingBox.union(allChildrenBoundingBox, child.getBoundingBoxToWorld()) : allChildrenBoundingBox = child.getBoundingBoxToWorld()); + } + if (allChildrenBoundingBox) { + var leftBottomSpace = this.node.convertToNodeSpaceAR(cc.v2(allChildrenBoundingBox.x, allChildrenBoundingBox.y)); + leftBottomSpace = cc.v2(leftBottomSpace.x - this.paddingLeft, leftBottomSpace.y - this.paddingBottom); + var rightTopSpace = this.node.convertToNodeSpaceAR(cc.v2(allChildrenBoundingBox.xMax, allChildrenBoundingBox.yMax)); + rightTopSpace = cc.v2(rightTopSpace.x + this.paddingRight, rightTopSpace.y + this.paddingTop); + var newSize = rightTopSpace.sub(leftBottomSpace); + newSize = cc.size(parseFloat(newSize.x.toFixed(2)), parseFloat(newSize.y.toFixed(2))); + if (0 !== newSize.width) { + var newAnchorX = -leftBottomSpace.x / newSize.width; + this.node.anchorX = parseFloat(newAnchorX.toFixed(2)); + } + if (0 !== newSize.height) { + var newAnchorY = -leftBottomSpace.y / newSize.height; + this.node.anchorY = parseFloat(newAnchorY.toFixed(2)); + } + this.node.setContentSize(newSize); + } + }, + _doLayoutGridAxisHorizontal: function _doLayoutGridAxisHorizontal(layoutAnchor, layoutSize) { + var baseWidth = layoutSize.width; + var sign = 1; + var bottomBoundaryOfLayout = -layoutAnchor.y * layoutSize.height; + var paddingY = this.paddingBottom; + if (this.verticalDirection === VerticalDirection.TOP_TO_BOTTOM) { + sign = -1; + bottomBoundaryOfLayout = (1 - layoutAnchor.y) * layoutSize.height; + paddingY = this.paddingTop; + } + var fnPositionY = function(child, topOffset, row) { + return bottomBoundaryOfLayout + sign * (topOffset + child.anchorY * child.height * this._getUsedScaleValue(child.scaleY) + paddingY + row * this.spacingY); + }.bind(this); + var newHeight = 0; + if (this.resizeMode === ResizeMode.CONTAINER) { + var boundary = this._doLayoutHorizontally(baseWidth, true, fnPositionY, false); + newHeight = bottomBoundaryOfLayout - boundary; + newHeight < 0 && (newHeight *= -1); + bottomBoundaryOfLayout = -layoutAnchor.y * newHeight; + if (this.verticalDirection === VerticalDirection.TOP_TO_BOTTOM) { + sign = -1; + bottomBoundaryOfLayout = (1 - layoutAnchor.y) * newHeight; + } + } + this._doLayoutHorizontally(baseWidth, true, fnPositionY, true); + this.resizeMode === ResizeMode.CONTAINER && this.node.setContentSize(baseWidth, newHeight); + }, + _doLayoutGridAxisVertical: function _doLayoutGridAxisVertical(layoutAnchor, layoutSize) { + var baseHeight = layoutSize.height; + var sign = 1; + var leftBoundaryOfLayout = -layoutAnchor.x * layoutSize.width; + var paddingX = this.paddingLeft; + if (this.horizontalDirection === HorizontalDirection.RIGHT_TO_LEFT) { + sign = -1; + leftBoundaryOfLayout = (1 - layoutAnchor.x) * layoutSize.width; + paddingX = this.paddingRight; + } + var fnPositionX = function(child, leftOffset, column) { + return leftBoundaryOfLayout + sign * (leftOffset + child.anchorX * child.width * this._getUsedScaleValue(child.scaleX) + paddingX + column * this.spacingX); + }.bind(this); + var newWidth = 0; + if (this.resizeMode === ResizeMode.CONTAINER) { + var boundary = this._doLayoutVertically(baseHeight, true, fnPositionX, false); + newWidth = leftBoundaryOfLayout - boundary; + newWidth < 0 && (newWidth *= -1); + leftBoundaryOfLayout = -layoutAnchor.x * newWidth; + if (this.horizontalDirection === HorizontalDirection.RIGHT_TO_LEFT) { + sign = -1; + leftBoundaryOfLayout = (1 - layoutAnchor.x) * newWidth; + } + } + this._doLayoutVertically(baseHeight, true, fnPositionX, true); + this.resizeMode === ResizeMode.CONTAINER && this.node.setContentSize(newWidth, baseHeight); + }, + _doLayoutGrid: function _doLayoutGrid() { + var layoutAnchor = this.node.getAnchorPoint(); + var layoutSize = this.node.getContentSize(); + this.startAxis === AxisDirection.HORIZONTAL ? this._doLayoutGridAxisHorizontal(layoutAnchor, layoutSize) : this.startAxis === AxisDirection.VERTICAL && this._doLayoutGridAxisVertical(layoutAnchor, layoutSize); + }, + _getHorizontalBaseWidth: function _getHorizontalBaseWidth(children) { + var newWidth = 0; + var activeChildCount = 0; + if (this.resizeMode === ResizeMode.CONTAINER) { + for (var i = 0; i < children.length; ++i) { + var child = children[i]; + if (child.activeInHierarchy) { + activeChildCount++; + newWidth += child.width * this._getUsedScaleValue(child.scaleX); + } + } + newWidth += (activeChildCount - 1) * this.spacingX + this.paddingLeft + this.paddingRight; + } else newWidth = this.node.getContentSize().width; + return newWidth; + }, + _doLayout: function _doLayout() { + if (this.type === Type.HORIZONTAL) { + var newWidth = this._getHorizontalBaseWidth(this.node.children); + var fnPositionY = function fnPositionY(child) { + return child.y; + }; + this._doLayoutHorizontally(newWidth, false, fnPositionY, true); + this.node.width = newWidth; + } else if (this.type === Type.VERTICAL) { + var newHeight = this._getVerticalBaseHeight(this.node.children); + var fnPositionX = function fnPositionX(child) { + return child.x; + }; + this._doLayoutVertically(newHeight, false, fnPositionX, true); + this.node.height = newHeight; + } else this.type === Type.NONE ? this.resizeMode === ResizeMode.CONTAINER && this._doLayoutBasic() : this.type === Type.GRID && this._doLayoutGrid(); + }, + _getUsedScaleValue: function _getUsedScaleValue(value) { + return this.affectedByScale ? Math.abs(value) : 1; + }, + updateLayout: function updateLayout() { + if (this._layoutDirty && this.node.children.length > 0) { + this._doLayout(); + this._layoutDirty = false; + } + } + }); + cc.Layout = module.exports = Layout; + }), { + "../CCNode": 24, + "./CCComponent": 91 + } ], + 97: [ (function(require, module, exports) { + "use strict"; + var RenderComponent = require("../components/CCRenderComponent"); + var BlendFunc = require("../../core/utils/blend-func"); + var MotionStreak = cc.Class({ + name: "cc.MotionStreak", + extends: RenderComponent, + mixins: [ BlendFunc ], + editor: false, + ctor: function ctor() { + this._points = []; + }, + properties: { + preview: { + default: false, + editorOnly: true, + notify: false, + animatable: false + }, + _fadeTime: 1, + fadeTime: { + get: function get() { + return this._fadeTime; + }, + set: function set(value) { + this._fadeTime = value; + this.reset(); + }, + animatable: false, + tooltip: false + }, + _minSeg: 1, + minSeg: { + get: function get() { + return this._minSeg; + }, + set: function set(value) { + this._minSeg = value; + }, + animatable: false, + tooltip: false + }, + _stroke: 64, + stroke: { + get: function get() { + return this._stroke; + }, + set: function set(value) { + this._stroke = value; + }, + animatable: false, + tooltip: false + }, + _texture: { + default: null, + type: cc.Texture2D + }, + texture: { + get: function get() { + return this._texture; + }, + set: function set(value) { + if (this._texture === value) return; + this._texture = value; + this._checkSwitchMaterial(); + this._updateMaterial(); + }, + type: cc.Texture2D, + animatable: false, + tooltip: false + }, + _color: cc.Color.WHITE, + color: { + get: function get() { + return this._color.clone(); + }, + set: function set(value) { + this._color.equals(value) || this._color.set(value); + }, + type: cc.Color, + tooltip: false + }, + _fastMode: false, + fastMode: { + get: function get() { + return this._fastMode; + }, + set: function set(value) { + this._fastMode = value; + }, + animatable: false, + tooltip: false + }, + autoSwitchMaterial: { + type: RenderComponent.EnableType, + default: RenderComponent.EnableType.GLOBAL, + notify: function notify(oldValue) { + if (this.autoSwitchMaterial === oldValue) return; + this.setVertsDirty(); + } + } + }, + setVertsDirty: function setVertsDirty() { + this._checkSwitchMaterial(); + this._updateMaterial(); + this._super(); + }, + __preload: function __preload() { + this._super(); + this._checkSwitchMaterial(); + }, + _checkSwitchMaterial: function _checkSwitchMaterial() { + if (this._assembler) { + var material = this._materials[0]; + if (!material) return; + if (!this._texture) return; + this._assembler.checkAndSwitchMaterial(this, this._texture, material); + } + }, + onEnable: function onEnable() { + this._super(); + this.reset(); + }, + _updateMaterial: function _updateMaterial() { + var material = this.getMaterial(0); + var isMultiMaterial = material.material.isMultiSupport(); + if (isMultiMaterial) { + if (!this._texture) return; + this._updateMultiTexId(material, this._texture); + } else material.getProperty("texture") !== this._texture && material.setProperty("texture", this._texture); + this._assembler && (isMultiMaterial && !this._assembler.isMulti || !isMultiMaterial && this._assembler.isMulti) && this._resetAssembler(); + if (isMultiMaterial && this._texIdDirty && this._assembler) { + if (!this._texture) return; + this._assembler.updateTexId(this); + this._texIdDirty = false; + } + BlendFunc.prototype._updateMaterial.call(this); + }, + onFocusInEditor: false, + onLostFocusInEditor: false, + reset: function reset() { + this._points.length = 0; + this._assembler && this._assembler._renderData.clear(); + false; + }, + lateUpdate: function lateUpdate(dt) { + this._assembler && this._assembler.update(this, dt); + } + }); + cc.MotionStreak = module.exports = MotionStreak; + }), { + "../../core/utils/blend-func": 199, + "../components/CCRenderComponent": 98 + } ], + 98: [ (function(require, module, exports) { + "use strict"; + var _assembler = _interopRequireDefault(require("../renderer/assembler")); + var _materialVariant = _interopRequireDefault(require("../assets/material/material-variant")); + var _valueTypes = require("../value-types"); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var Component = require("./CCComponent"); + var RenderFlow = require("../renderer/render-flow"); + var Material = require("../assets/material/CCMaterial"); + var _temp_color = new _valueTypes.Color(); + var EnableType = cc.Enum({ + GLOBAL: 0, + ENABLE: 1, + DISABLE: 2 + }); + var RenderComponent = cc.Class({ + name: "RenderComponent", + extends: Component, + editor: false, + statics: { + EnableType: EnableType + }, + properties: { + _materials: { + default: [], + type: Material + }, + materials: { + get: function get() { + return this._materials; + }, + set: function set(val) { + this._materials = val; + this._activateMaterial(); + }, + type: [ Material ], + displayName: "Materials", + animatable: false + } + }, + ctor: function ctor() { + this._vertsDirty = true; + this._texIdDirty = true; + this._texId = 0; + this._assembler = null; + }, + _resetAssembler: function _resetAssembler() { + _assembler["default"].init(this); + this._updateColor(); + this._texId = 0; + this.setVertsDirty(); + }, + __preload: function __preload() { + this._resetAssembler(); + this._activateMaterial(); + }, + onEnable: function onEnable() { + this.node._renderComponent && (this.node._renderComponent.enabled = false); + this.node._renderComponent = this; + this.node._renderFlag |= RenderFlow.FLAG_OPACITY_COLOR; + this.setVertsDirty(); + }, + onDisable: function onDisable() { + this.node._renderComponent = null; + this.disableRender(); + }, + onDestroy: function onDestroy() { + var materials = this._materials; + for (var i = 0; i < materials.length; i++) cc.pool.material.put(materials[i]); + materials.length = 0; + cc.pool.assembler.put(this._assembler); + }, + setVertsDirty: function setVertsDirty() { + this._vertsDirty = true; + this.markForRender(true); + }, + _on3DNodeChanged: function _on3DNodeChanged() { + this._resetAssembler(); + }, + _validateRender: function _validateRender() {}, + markForValidate: function markForValidate() { + cc.RenderFlow.registerValidate(this); + }, + markForRender: function markForRender(enable) { + var flag = RenderFlow.FLAG_RENDER | RenderFlow.FLAG_UPDATE_RENDER_DATA; + if (enable) { + this.node._renderFlag |= flag; + this.markForValidate(); + } else this.node._renderFlag &= ~flag; + }, + disableRender: function disableRender() { + this.node._renderFlag &= ~(RenderFlow.FLAG_RENDER | RenderFlow.FLAG_UPDATE_RENDER_DATA); + }, + getMaterial: function getMaterial(index) { + if (index < 0 || index >= this._materials.length) return null; + var material = this._materials[index]; + if (!material) return null; + var instantiated = _materialVariant["default"].create(material, this); + instantiated !== material && this.setMaterial(index, instantiated); + return instantiated; + }, + getMaterials: function getMaterials() { + var materials = this._materials; + for (var i = 0; i < materials.length; i++) materials[i] = _materialVariant["default"].create(materials[i], this); + return materials; + }, + setMaterial: function setMaterial(index, material) { + if (material !== this._materials[index]) { + material = _materialVariant["default"].create(material, this); + this._materials[index] = material; + } + this._updateMaterial(); + this.markForRender(true); + return material; + }, + _getDefaultMaterial: function _getDefaultMaterial() { + return Material.getBuiltinMaterial("2d-sprite"); + }, + _activateMaterial: function _activateMaterial() { + var materials = this._materials; + if (!materials[0]) { + var material = this._getDefaultMaterial(); + materials[0] = material; + } + for (var i = 0; i < materials.length; i++) materials[i] = _materialVariant["default"].create(materials[i], this); + this._updateMaterial(); + }, + _updateMaterial: function _updateMaterial() {}, + _updateColor: function _updateColor() { + if (this._assembler.updateColor) { + var premultiply = this.srcBlendFactor === cc.macro.BlendFactor.ONE; + premultiply && _valueTypes.Color.premultiplyAlpha(_temp_color, this.node._color); + var color = premultiply ? _temp_color._val : null; + this._assembler.updateColor(this, color); + } + }, + _checkBacth: function _checkBacth(renderer, cullingMask) { + var material = this._materials[0]; + if (material && material.getHash() !== renderer.material.getHash() || renderer.cullingMask !== cullingMask) { + renderer._flush(); + renderer.node = material.getDefine("CC_USE_MODEL") ? this.node : renderer._dummyNode; + renderer.material = material; + renderer.cullingMask = cullingMask; + } + }, + _updateMultiTexId: function _updateMultiTexId(material, texture) { + var multi = material.material.getMultiHandler(); + var spTexture = texture; + var nSpTexture = spTexture.getImpl(); + var same = 0 === this._texId ? material.getProperty("texture") !== nSpTexture : multi.getTexture(this._texId) !== nSpTexture; + if (same) { + var isChanged = Object.prototype.hasOwnProperty.call(material._effect._passes["0"]._properties, "texture"); + var texId = isChanged ? -1 : multi.getIndex(nSpTexture); + if (-1 !== texId) { + this._texId = texId; + this._texIdDirty = true; + } else { + material.setProperty("texture", spTexture); + if (0 !== this._texId) { + this._texId = 0; + this._texIdDirty = true; + } + } + } else this._texIdDirty = false; + } + }); + cc.RenderComponent = module.exports = RenderComponent; + }), { + "../assets/material/CCMaterial": 75, + "../assets/material/material-variant": 82, + "../renderer/assembler": 149, + "../renderer/render-flow": 153, + "../value-types": 220, + "./CCComponent": 91 + } ], + 99: [ (function(require, module, exports) { + "use strict"; + var _materialVariant = _interopRequireDefault(require("../assets/material/material-variant")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var js = require("../platform/js"); + var macro = require("../platform/CCMacro"); + var textUtils = require("../utils/text-utils"); + var HtmlTextParser = require("../utils/html-text-parser"); + var _htmlTextParser = new HtmlTextParser(); + var HorizontalAlign = macro.TextAlignment; + var VerticalAlign = macro.VerticalTextAlignment; + var RichTextChildName = "RICHTEXT_CHILD"; + var RichTextChildImageName = "RICHTEXT_Image_CHILD"; + var CacheMode = cc.Label.CacheMode; + var RenderComponent = require("./CCRenderComponent"); + function debounce(func, wait, immediate) { + var timeout; + return function() { + var context = this; + var later = function later() { + timeout = null; + immediate || func.apply(context, arguments); + }; + var callNow = immediate && !timeout; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + callNow && func.apply(context, arguments); + }; + } + var pool = new js.Pool(function(node) { + false; + false; + if (!cc.isValid(node)) return false; + var outline = node.getComponent(cc.LabelOutline); + outline && (outline.width = 0); + return true; + }, 20); + pool.get = function(string, richtext) { + var labelNode = this._get(); + labelNode || (labelNode = new cc.PrivateNode(RichTextChildName)); + labelNode.setPosition(0, 0); + labelNode.setAnchorPoint(.5, .5); + labelNode.skewX = 0; + var labelComponent = labelNode.getComponent(cc.Label); + labelComponent || (labelComponent = labelNode.addComponent(cc.Label)); + labelComponent.string = ""; + labelComponent.horizontalAlign = HorizontalAlign.LEFT; + labelComponent.verticalAlign = VerticalAlign.CENTER; + labelComponent._forceUseCanvas = true; + return labelNode; + }; + var RichText = cc.Class({ + name: "cc.RichText", + extends: cc.Component, + ctor: function ctor() { + this._textArray = null; + this._labelSegments = []; + this._labelSegmentsCache = []; + this._linesWidth = []; + false; + this._updateRichTextStatus = this._updateRichText; + }, + editor: false, + properties: { + string: { + default: "RichText", + multiline: true, + tooltip: false, + notify: function notify() { + this._updateRichTextStatus(); + } + }, + horizontalAlign: { + default: HorizontalAlign.LEFT, + type: HorizontalAlign, + tooltip: false, + animatable: false, + notify: function notify(oldValue) { + if (this.horizontalAlign === oldValue) return; + this._layoutDirty = true; + this._updateRichTextStatus(); + } + }, + fontSize: { + default: 40, + tooltip: false, + notify: function notify(oldValue) { + if (this.fontSize === oldValue) return; + this._layoutDirty = true; + this._updateRichTextStatus(); + } + }, + _fontFamily: "Arial", + fontFamily: { + tooltip: false, + get: function get() { + return this._fontFamily; + }, + set: function set(value) { + if (this._fontFamily === value) return; + this._fontFamily = value; + this._layoutDirty = true; + this._updateRichTextStatus(); + }, + animatable: false + }, + font: { + default: null, + type: cc.TTFFont, + tooltip: false, + notify: function notify(oldValue) { + if (this.font === oldValue) return; + this._layoutDirty = true; + if (this.font) { + false; + this.useSystemFont = false; + this._onTTFLoaded(); + } else this.useSystemFont = true; + this._updateRichTextStatus(); + } + }, + _isSystemFontUsed: true, + useSystemFont: { + get: function get() { + return this._isSystemFontUsed; + }, + set: function set(value) { + if (this._isSystemFontUsed === value) return; + this._isSystemFontUsed = value; + false; + this._layoutDirty = true; + this._updateRichTextStatus(); + }, + animatable: false, + tooltip: false + }, + cacheMode: { + default: CacheMode.NONE, + type: CacheMode, + tooltip: false, + notify: function notify(oldValue) { + if (this.cacheMode === oldValue) return; + this._updateRichTextStatus(); + }, + animatable: false + }, + maxWidth: { + default: 0, + tooltip: false, + notify: function notify(oldValue) { + if (this.maxWidth === oldValue) return; + this._layoutDirty = true; + this._updateRichTextStatus(); + } + }, + lineHeight: { + default: 40, + tooltip: false, + notify: function notify(oldValue) { + if (this.lineHeight === oldValue) return; + this._layoutDirty = true; + this._updateRichTextStatus(); + } + }, + imageAtlas: { + default: null, + type: cc.SpriteAtlas, + tooltip: false, + notify: function notify(oldValue) { + if (this.imageAtlas === oldValue) return; + this._layoutDirty = true; + this._updateRichTextStatus(); + } + }, + handleTouchEvent: { + default: true, + tooltip: false, + notify: function notify(oldValue) { + if (this.handleTouchEvent === oldValue) return; + this.enabledInHierarchy && (this.handleTouchEvent ? this._addEventListeners() : this._removeEventListeners()); + } + }, + customMaterial: { + default: null, + type: cc.Material, + notify: function notify(oldValue) { + if (this.customMaterial === oldValue) return; + var material = null == this.customMaterial ? this._getDefaultMaterial() : this.customMaterial; + for (var i = 0; i < this._labelSegments.length; i++) { + var labelComponent = this._labelSegments[i].getComponent(cc.Label); + labelComponent && (0 === labelComponent._materials.length ? labelComponent._materials[0] = _materialVariant["default"].create(material, labelComponent) : labelComponent.setMaterial(0, material)); + var spriteComponent = this._labelSegments[i].getComponent(cc.Sprite); + spriteComponent && (0 === spriteComponent._materials.length ? spriteComponent._materials[0] = _materialVariant["default"].create(material, spriteComponent) : spriteComponent.setMaterial(0, material)); + } + for (var _i = 0; _i < this._labelSegmentsCache.length; _i++) { + var _labelComponent = this._labelSegmentsCache[_i].getComponent(cc.Label); + _labelComponent && (0 === _labelComponent._materials.length ? _labelComponent._materials[0] = _materialVariant["default"].create(material, _labelComponent) : _labelComponent.setMaterial(0, material)); + } + } + }, + autoSwitchMaterial: { + type: RenderComponent.EnableType, + default: RenderComponent.EnableType.GLOBAL, + notify: function notify(oldValue) { + if (this.autoSwitchMaterial === oldValue) return; + for (var i = 0; i < this._labelSegments.length; i++) { + var labelComponent = this._labelSegments[i].getComponent(cc.Label); + labelComponent && (labelComponent.autoSwitchMaterial = this.autoSwitchMaterial); + var spriteComponent = this._labelSegments[i].getComponent(cc.Sprite); + spriteComponent && (spriteComponent.autoSwitchMaterial = this.autoSwitchMaterial); + } + for (var _i2 = 0; _i2 < this._labelSegmentsCache.length; _i2++) { + var _labelComponent2 = this._labelSegmentsCache[_i2].getComponent(cc.Label); + _labelComponent2 && (_labelComponent2.autoSwitchMaterial = this.autoSwitchMaterial); + } + } + }, + allowDynamicAtlas: { + type: RenderComponent.EnableType, + default: RenderComponent.EnableType.GLOBAL, + notify: function notify(oldValue) { + if (this.allowDynamicAtlas === oldValue) return; + for (var i = 0; i < this._labelSegments.length; i++) { + var labelComponent = this._labelSegments[i].getComponent(cc.Label); + labelComponent && (labelComponent.allowDynamicAtlas = this.allowDynamicAtlas); + var spriteComponent = this._labelSegments[i].getComponent(cc.Sprite); + spriteComponent && (spriteComponent.allowDynamicAtlas = this.allowDynamicAtlas); + } + for (var _i3 = 0; _i3 < this._labelSegmentsCache.length; _i3++) { + var _labelComponent3 = this._labelSegmentsCache[_i3].getComponent(cc.Label); + _labelComponent3 && (_labelComponent3.allowDynamicAtlas = this.allowDynamicAtlas); + } + } + }, + enableRetina: { + type: RenderComponent.EnableType, + default: RenderComponent.EnableType.GLOBAL, + notify: function notify(oldValue) { + if (this.enableRetina === oldValue) return; + for (var i = 0; i < this._labelSegments.length; i++) { + var labelComponent = this._labelSegments[i].getComponent(cc.Label); + labelComponent && (labelComponent.enableRetina = this.enableRetina); + } + for (var _i4 = 0; _i4 < this._labelSegmentsCache.length; _i4++) { + var _labelComponent4 = this._labelSegmentsCache[_i4].getComponent(cc.Label); + _labelComponent4 && (_labelComponent4.enableRetina = this.enableRetina); + } + } + } + }, + statics: { + HorizontalAlign: HorizontalAlign, + VerticalAlign: VerticalAlign + }, + onEnable: function onEnable() { + this.handleTouchEvent && this._addEventListeners(); + this._updateRichText(); + this._activateChildren(true); + }, + onDisable: function onDisable() { + this.handleTouchEvent && this._removeEventListeners(); + this._activateChildren(false); + }, + start: function start() { + this._onTTFLoaded(); + }, + _onColorChanged: function _onColorChanged(parentColor) { + var children = this.node.children; + children.forEach((function(childNode) { + childNode.color = parentColor; + })); + }, + _addEventListeners: function _addEventListeners() { + this.node.on(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this); + this.node.on(cc.Node.EventType.COLOR_CHANGED, this._onColorChanged, this); + }, + _removeEventListeners: function _removeEventListeners() { + this.node.off(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this); + this.node.off(cc.Node.EventType.COLOR_CHANGED, this._onColorChanged, this); + }, + _updateLabelSegmentTextAttributes: function _updateLabelSegmentTextAttributes() { + this._labelSegments.forEach(function(item) { + this._applyTextAttribute(item, null, true); + }.bind(this)); + }, + _createFontLabel: function _createFontLabel(string) { + return pool.get(string, this); + }, + _onTTFLoaded: function _onTTFLoaded() { + if (this.font instanceof cc.TTFFont) if (this.font._nativeAsset) { + this._layoutDirty = true; + this._updateRichText(); + } else { + var self = this; + cc.assetManager.postLoadNative(this.font, (function(err) { + self._layoutDirty = true; + self._updateRichText(); + })); + } else { + this._layoutDirty = true; + this._updateRichText(); + } + }, + _measureText: function _measureText(styleIndex, string) { + var self = this; + var func = function func(string) { + var label; + if (0 === self._labelSegmentsCache.length) { + label = self._createFontLabel(string); + self._labelSegmentsCache.push(label); + } else label = self._labelSegmentsCache[0]; + label._styleIndex = styleIndex; + self._applyTextAttribute(label, string, true); + var labelSize = label.getContentSize(); + return labelSize.width; + }; + return string ? func(string) : func; + }, + _onTouchEnded: function _onTouchEnded(event) { + var _this = this; + var components = this.node.getComponents(cc.Component); + var _loop = function _loop(i) { + var labelSegment = _this._labelSegments[i]; + var clickHandler = labelSegment._clickHandler; + var clickParam = labelSegment._clickParam; + if (clickHandler && _this._containsTouchLocation(labelSegment, event.touch.getLocation())) { + components.forEach((function(component) { + component.enabledInHierarchy && component[clickHandler] && component[clickHandler](event, clickParam); + })); + event.stopPropagation(); + } + }; + for (var i = 0; i < this._labelSegments.length; ++i) _loop(i); + }, + _containsTouchLocation: function _containsTouchLocation(label, point) { + var myRect = label.getBoundingBoxToWorld(); + return myRect.contains(point); + }, + _resetState: function _resetState() { + var children = this.node.children; + for (var i = children.length - 1; i >= 0; i--) { + var child = children[i]; + if (child.name === RichTextChildName || child.name === RichTextChildImageName) { + child.parent === this.node ? child.parent = null : children.splice(i, 1); + child.name === RichTextChildName && pool.put(child); + } + } + this._labelSegments.length = 0; + this._labelSegmentsCache.length = 0; + this._linesWidth.length = 0; + this._lineOffsetX = 0; + this._lineCount = 1; + this._labelWidth = 0; + this._labelHeight = 0; + this._layoutDirty = true; + }, + onRestore: false, + _activateChildren: function _activateChildren(active) { + for (var i = this.node.children.length - 1; i >= 0; i--) { + var child = this.node.children[i]; + child.name !== RichTextChildName && child.name !== RichTextChildImageName || (child.active = active); + } + }, + _addLabelSegment: function _addLabelSegment(stringToken, styleIndex) { + var labelSegment; + labelSegment = 0 === this._labelSegmentsCache.length ? this._createFontLabel(stringToken) : this._labelSegmentsCache.pop(); + labelSegment._styleIndex = styleIndex; + labelSegment._lineCount = this._lineCount; + labelSegment.active = this.node.active; + labelSegment.setAnchorPoint(0, 0); + this._applyTextAttribute(labelSegment, stringToken); + this.node.addChild(labelSegment); + this._labelSegments.push(labelSegment); + return labelSegment; + }, + _updateRichTextWithMaxWidth: function _updateRichTextWithMaxWidth(labelString, labelWidth, styleIndex) { + var fragmentWidth = labelWidth; + var labelSegment; + if (this._lineOffsetX > 0 && fragmentWidth + this._lineOffsetX > this.maxWidth) { + var checkStartIndex = 0; + while (this._lineOffsetX <= this.maxWidth) { + var checkEndIndex = this._getFirstWordLen(labelString, checkStartIndex, labelString.length); + var checkString = labelString.substr(checkStartIndex, checkEndIndex); + var checkStringWidth = this._measureText(styleIndex, checkString); + if (!(this._lineOffsetX + checkStringWidth <= this.maxWidth)) { + if (checkStartIndex > 0) { + var remainingString = labelString.substr(0, checkStartIndex); + this._addLabelSegment(remainingString, styleIndex); + labelString = labelString.substr(checkStartIndex, labelString.length); + fragmentWidth = this._measureText(styleIndex, labelString); + } + this._updateLineInfo(); + break; + } + this._lineOffsetX += checkStringWidth; + checkStartIndex += checkEndIndex; + } + } + if (fragmentWidth > this.maxWidth) { + var fragments = textUtils.fragmentText(labelString, fragmentWidth, this.maxWidth, this._measureText(styleIndex)); + for (var k = 0; k < fragments.length; ++k) { + var splitString = fragments[k]; + labelSegment = this._addLabelSegment(splitString, styleIndex); + var labelSize = labelSegment.getContentSize(); + this._lineOffsetX += labelSize.width; + fragments.length > 1 && k < fragments.length - 1 && this._updateLineInfo(); + } + } else { + this._lineOffsetX += fragmentWidth; + this._addLabelSegment(labelString, styleIndex); + } + }, + _isLastComponentCR: function _isLastComponentCR(stringToken) { + return stringToken.length - 1 === stringToken.lastIndexOf("\n"); + }, + _updateLineInfo: function _updateLineInfo() { + this._linesWidth.push(this._lineOffsetX); + this._lineOffsetX = 0; + this._lineCount++; + }, + _needsUpdateTextLayout: function _needsUpdateTextLayout(newTextArray) { + if (this._layoutDirty || !this._textArray || !newTextArray) return true; + if (this._textArray.length !== newTextArray.length) return true; + for (var i = 0; i < this._textArray.length; ++i) { + var oldItem = this._textArray[i]; + var newItem = newTextArray[i]; + if (oldItem.text !== newItem.text) return true; + var oldStyle = oldItem.style, newStyle = newItem.style; + if (oldStyle) { + if (newStyle) { + if (!oldStyle.outline !== !newStyle.outline) return true; + if (oldStyle.size !== newStyle.size || !oldStyle.italic !== !newStyle.italic || oldStyle.isImage !== newStyle.isImage) return true; + if (oldStyle.src !== newStyle.src || oldStyle.imageAlign !== newStyle.imageAlign || oldStyle.imageHeight !== newStyle.imageHeight || oldStyle.imageWidth !== newStyle.imageWidth || oldStyle.imageOffset !== newStyle.imageOffset) return true; + } else if (oldStyle.size || oldStyle.italic || oldStyle.isImage || oldStyle.outline) return true; + } else if (newStyle && (newStyle.size || newStyle.italic || newStyle.isImage || newStyle.outline)) return true; + } + return false; + }, + _addRichTextImageElement: function _addRichTextImageElement(richTextElement) { + var spriteFrameName = richTextElement.style.src; + var spriteFrame = this.imageAtlas.getSpriteFrame(spriteFrameName); + if (spriteFrame) { + var spriteNode = new cc.PrivateNode(RichTextChildImageName); + var spriteComponent = spriteNode.addComponent(cc.Sprite); + spriteComponent.autoSwitchMaterial = this.autoSwitchMaterial; + spriteComponent.allowDynamicAtlas = this.allowDynamicAtlas; + this.customMaterial && (0 === spriteComponent._materials.length ? spriteComponent._materials[0] = _materialVariant["default"].create(this.customMaterial, spriteComponent) : spriteComponent._materials[0].material !== this.customMaterial && spriteComponent.setMaterial(0, this.customMaterial)); + switch (richTextElement.style.imageAlign) { + case "top": + spriteNode.setAnchorPoint(0, 1); + break; + + case "center": + spriteNode.setAnchorPoint(0, .5); + break; + + default: + spriteNode.setAnchorPoint(0, 0); + } + richTextElement.style.imageOffset && (spriteNode._imageOffset = richTextElement.style.imageOffset); + spriteComponent.type = cc.Sprite.Type.SLICED; + spriteComponent.sizeMode = cc.Sprite.SizeMode.CUSTOM; + this.node.addChild(spriteNode); + this._labelSegments.push(spriteNode); + var spriteRect = spriteFrame.getRect(); + var scaleFactor = 1; + var spriteWidth = spriteRect.width; + var spriteHeight = spriteRect.height; + var expectWidth = richTextElement.style.imageWidth; + var expectHeight = richTextElement.style.imageHeight; + if (expectHeight > 0) { + scaleFactor = expectHeight / spriteHeight; + spriteWidth *= scaleFactor; + spriteHeight *= scaleFactor; + } else { + scaleFactor = this.lineHeight / spriteHeight; + spriteWidth *= scaleFactor; + spriteHeight *= scaleFactor; + } + expectWidth > 0 && (spriteWidth = expectWidth); + if (this.maxWidth > 0) { + this._lineOffsetX + spriteWidth > this.maxWidth && this._updateLineInfo(); + this._lineOffsetX += spriteWidth; + } else { + this._lineOffsetX += spriteWidth; + this._lineOffsetX > this._labelWidth && (this._labelWidth = this._lineOffsetX); + } + spriteComponent.spriteFrame = spriteFrame; + spriteNode.setContentSize(spriteWidth, spriteHeight); + spriteNode._lineCount = this._lineCount; + if (richTextElement.style.event) { + richTextElement.style.event.click && (spriteNode._clickHandler = richTextElement.style.event.click); + richTextElement.style.event.param ? spriteNode._clickParam = richTextElement.style.event.param : spriteNode._clickParam = ""; + } else spriteNode._clickHandler = null; + } else cc.warnID(4400); + }, + _updateRichText: function _updateRichText() { + if (!this.enabledInHierarchy) return; + var newTextArray = _htmlTextParser.parse(this.string); + if (!this._needsUpdateTextLayout(newTextArray)) { + this._textArray = newTextArray; + this._updateLabelSegmentTextAttributes(); + return; + } + this._textArray = newTextArray; + this._resetState(); + var lastEmptyLine = false; + var label; + var labelSize; + for (var i = 0; i < this._textArray.length; ++i) { + var richTextElement = this._textArray[i]; + var text = richTextElement.text; + if ("" === text) { + if (richTextElement.style && richTextElement.style.newline) { + this._updateLineInfo(); + continue; + } + if (richTextElement.style && richTextElement.style.isImage && this.imageAtlas) { + this._addRichTextImageElement(richTextElement); + continue; + } + } + var multilineTexts = text.split("\n"); + for (var j = 0; j < multilineTexts.length; ++j) { + var labelString = multilineTexts[j]; + if ("" === labelString) { + if (this._isLastComponentCR(text) && j === multilineTexts.length - 1) continue; + this._updateLineInfo(); + lastEmptyLine = true; + continue; + } + lastEmptyLine = false; + if (this.maxWidth > 0) { + var labelWidth = this._measureText(i, labelString); + this._updateRichTextWithMaxWidth(labelString, labelWidth, i); + multilineTexts.length > 1 && j < multilineTexts.length - 1 && this._updateLineInfo(); + } else { + label = this._addLabelSegment(labelString, i); + labelSize = label.getContentSize(); + this._lineOffsetX += labelSize.width; + this._lineOffsetX > this._labelWidth && (this._labelWidth = this._lineOffsetX); + multilineTexts.length > 1 && j < multilineTexts.length - 1 && this._updateLineInfo(); + } + } + } + lastEmptyLine || this._linesWidth.push(this._lineOffsetX); + this.maxWidth > 0 && (this._labelWidth = this.maxWidth); + this._labelHeight = (this._lineCount + textUtils.BASELINE_RATIO) * this.lineHeight; + this.node.setContentSize(this._labelWidth, this._labelHeight); + this._updateRichTextPosition(); + this._layoutDirty = false; + }, + _getFirstWordLen: function _getFirstWordLen(text, startIndex, textLen) { + var character = text.charAt(startIndex); + if (textUtils.isUnicodeCJK(character) || textUtils.isUnicodeSpace(character)) return 1; + var len = 1; + for (var index = startIndex + 1; index < textLen; ++index) { + character = text.charAt(index); + if (textUtils.isUnicodeSpace(character) || textUtils.isUnicodeCJK(character)) break; + len++; + } + return len; + }, + _updateRichTextPosition: function _updateRichTextPosition() { + var nextTokenX = 0; + var nextLineIndex = 1; + var totalLineCount = this._lineCount; + for (var i = 0; i < this._labelSegments.length; ++i) { + var label = this._labelSegments[i]; + var lineCount = label._lineCount; + if (lineCount > nextLineIndex) { + nextTokenX = 0; + nextLineIndex = lineCount; + } + var lineOffsetX = 0; + switch (this.horizontalAlign) { + case HorizontalAlign.LEFT: + lineOffsetX = -this._labelWidth / 2; + break; + + case HorizontalAlign.CENTER: + lineOffsetX = -this._linesWidth[lineCount - 1] / 2; + break; + + case HorizontalAlign.RIGHT: + lineOffsetX = this._labelWidth / 2 - this._linesWidth[lineCount - 1]; + } + label.x = nextTokenX + lineOffsetX; + var labelSize = label.getContentSize(); + label.y = this.lineHeight * (totalLineCount - lineCount) - this._labelHeight / 2; + lineCount === nextLineIndex && (nextTokenX += labelSize.width); + var sprite = label.getComponent(cc.Sprite); + if (sprite) { + var lineHeightSet = this.lineHeight; + var lineHeightReal = this.lineHeight * (1 + textUtils.BASELINE_RATIO); + switch (label.anchorY) { + case 1: + label.y += lineHeightSet + (lineHeightReal - lineHeightSet) / 2; + break; + + case .5: + label.y += lineHeightReal / 2; + break; + + default: + label.y += (lineHeightReal - lineHeightSet) / 2; + } + if (label._imageOffset) { + var offsets = label._imageOffset.split(","); + if (1 === offsets.length && offsets[0]) { + var offsetY = parseFloat(offsets[0]); + Number.isInteger(offsetY) && (label.y += offsetY); + } else if (2 === offsets.length) { + var offsetX = parseFloat(offsets[0]); + var _offsetY = parseFloat(offsets[1]); + Number.isInteger(offsetX) && (label.x += offsetX); + Number.isInteger(_offsetY) && (label.y += _offsetY); + } + } + } + var outline = label.getComponent(cc.LabelOutline); + outline && outline.width && (label.y = label.y - outline.width); + } + }, + _convertLiteralColorValue: function _convertLiteralColorValue(color) { + var colorValue = color.toUpperCase(); + if (cc.Color[colorValue]) return cc.Color[colorValue]; + var out = cc.color(); + return out.fromHEX(color); + }, + _applyTextAttribute: function _applyTextAttribute(labelNode, string, force) { + var labelComponent = labelNode.getComponent(cc.Label); + if (!labelComponent) return; + var index = labelNode._styleIndex; + var textStyle = null; + this._textArray[index] && (textStyle = this._textArray[index].style); + textStyle && textStyle.color ? labelNode.color = this._convertLiteralColorValue(textStyle.color) : labelNode.color = this.node.color; + labelComponent.cacheMode = this.cacheMode; + labelComponent.autoSwitchMaterial = this.autoSwitchMaterial; + labelComponent.allowDynamicAtlas = this.allowDynamicAtlas; + labelComponent.enableRetina = this.enableRetina; + this.customMaterial && (0 === labelComponent._materials.length ? labelComponent._materials[0] = _materialVariant["default"].create(this.customMaterial, labelComponent) : labelComponent._materials[0].material !== this.customMaterial && labelComponent.setMaterial(0, this.customMaterial)); + var isAsset = this.font instanceof cc.Font; + isAsset && !this._isSystemFontUsed ? labelComponent.font = this.font : labelComponent.fontFamily = this.fontFamily; + labelComponent.useSystemFont = this._isSystemFontUsed; + labelComponent.lineHeight = this.lineHeight; + labelComponent.enableBold = textStyle && textStyle.bold; + labelComponent.enableItalics = textStyle && textStyle.italic; + textStyle && textStyle.italic && (labelNode.skewX = 12); + labelComponent.enableUnderline = textStyle && textStyle.underline; + if (textStyle && textStyle.outline) { + var labelOutlineComponent = labelNode.getComponent(cc.LabelOutline); + labelOutlineComponent || (labelOutlineComponent = labelNode.addComponent(cc.LabelOutline)); + labelOutlineComponent.color = this._convertLiteralColorValue(textStyle.outline.color); + labelOutlineComponent.width = textStyle.outline.width; + } + textStyle && textStyle.size ? labelComponent.fontSize = textStyle.size : labelComponent.fontSize = this.fontSize; + if (null !== string) { + "string" !== typeof string && (string = "" + string); + labelComponent.string = string; + } + force && labelComponent._forceUpdateRenderData(); + if (textStyle && textStyle.event) { + textStyle.event.click && (labelNode._clickHandler = textStyle.event.click); + textStyle.event.param ? labelNode._clickParam = textStyle.event.param : labelNode._clickParam = ""; + } else labelNode._clickHandler = null; + }, + onDestroy: function onDestroy() { + for (var i = 0; i < this._labelSegments.length; ++i) { + this._labelSegments[i].removeFromParent(); + pool.put(this._labelSegments[i]); + } + } + }); + cc.RichText = module.exports = RichText; + }), { + "../assets/material/material-variant": 82, + "../platform/CCMacro": 126, + "../platform/js": 142, + "../utils/html-text-parser": 203, + "../utils/text-utils": 212, + "./CCRenderComponent": 98 + } ], + 100: [ (function(require, module, exports) { + "use strict"; + var misc = require("../utils/misc"); + var Component = require("./CCComponent"); + var GETTINGSHORTERFACTOR = 20; + var Direction = cc.Enum({ + HORIZONTAL: 0, + VERTICAL: 1 + }); + var Scrollbar = cc.Class({ + name: "cc.Scrollbar", + extends: require("./CCComponent"), + editor: false, + properties: { + _scrollView: null, + _touching: false, + _autoHideRemainingTime: { + default: 0, + serializable: false + }, + _opacity: 255, + handle: { + default: null, + type: cc.Sprite, + tooltip: false, + notify: function notify() { + this._onScroll(cc.v2(0, 0)); + }, + animatable: false + }, + direction: { + default: Direction.HORIZONTAL, + type: Direction, + tooltip: false, + notify: function notify() { + this._onScroll(cc.v2(0, 0)); + }, + animatable: false + }, + enableAutoHide: { + default: true, + animatable: false, + tooltip: false + }, + autoHideTime: { + default: 1, + animatable: false, + tooltip: false + } + }, + statics: { + Direction: Direction + }, + setTargetScrollView: function setTargetScrollView(scrollView) { + this._scrollView = scrollView; + }, + _convertToScrollViewSpace: function _convertToScrollViewSpace(content) { + var scrollViewNode = this._scrollView.node; + var worldSpacePos = content.convertToWorldSpaceAR(cc.v2(-content.anchorX * content.width, -content.anchorY * content.height)); + var scrollViewSpacePos = scrollViewNode.convertToNodeSpaceAR(worldSpacePos); + scrollViewSpacePos.x += scrollViewNode.anchorX * scrollViewNode.width; + scrollViewSpacePos.y += scrollViewNode.anchorY * scrollViewNode.height; + return scrollViewSpacePos; + }, + _setOpacity: function _setOpacity(opacity) { + if (this.handle) { + this.node.opacity = opacity; + this.handle.node.opacity = opacity; + } + }, + _onScroll: function _onScroll(outOfBoundary) { + if (this._scrollView) { + var content = this._scrollView.content; + if (content) { + var contentSize = content.getContentSize(); + var scrollViewSize = this._scrollView.node.getContentSize(); + var handleNodeSize = this.node.getContentSize(); + if (this._conditionalDisableScrollBar(contentSize, scrollViewSize)) return; + if (this.enableAutoHide) { + this._autoHideRemainingTime = this.autoHideTime; + this._setOpacity(this._opacity); + } + var contentMeasure = 0; + var scrollViewMeasure = 0; + var outOfBoundaryValue = 0; + var contentPosition = 0; + var handleNodeMeasure = 0; + if (this.direction === Direction.HORIZONTAL) { + contentMeasure = contentSize.width; + scrollViewMeasure = scrollViewSize.width; + handleNodeMeasure = handleNodeSize.width; + outOfBoundaryValue = outOfBoundary.x; + contentPosition = -this._convertToScrollViewSpace(content).x; + } else if (this.direction === Direction.VERTICAL) { + contentMeasure = contentSize.height; + scrollViewMeasure = scrollViewSize.height; + handleNodeMeasure = handleNodeSize.height; + outOfBoundaryValue = outOfBoundary.y; + contentPosition = -this._convertToScrollViewSpace(content).y; + } + var length = this._calculateLength(contentMeasure, scrollViewMeasure, handleNodeMeasure, outOfBoundaryValue); + var position = this._calculatePosition(contentMeasure, scrollViewMeasure, handleNodeMeasure, contentPosition, outOfBoundaryValue, length); + this._updateLength(length); + this._updateHanlderPosition(position); + } + } + }, + _updateHanlderPosition: function _updateHanlderPosition(position) { + if (this.handle) { + var oldPosition = this._fixupHandlerPosition(); + this.handle.node.setPosition(position.x + oldPosition.x, position.y + oldPosition.y); + } + }, + _fixupHandlerPosition: function _fixupHandlerPosition() { + var barSize = this.node.getContentSize(); + var barAnchor = this.node.getAnchorPoint(); + var handleSize = this.handle.node.getContentSize(); + var handleParent = this.handle.node.parent; + var leftBottomWorldPosition = this.node.convertToWorldSpaceAR(cc.v2(-barSize.width * barAnchor.x, -barSize.height * barAnchor.y)); + var fixupPosition = handleParent.convertToNodeSpaceAR(leftBottomWorldPosition); + this.direction === Direction.HORIZONTAL ? fixupPosition = cc.v2(fixupPosition.x, fixupPosition.y + (barSize.height - handleSize.height) / 2) : this.direction === Direction.VERTICAL && (fixupPosition = cc.v2(fixupPosition.x + (barSize.width - handleSize.width) / 2, fixupPosition.y)); + this.handle.node.setPosition(fixupPosition); + return fixupPosition; + }, + _onTouchBegan: function _onTouchBegan() { + if (!this.enableAutoHide) return; + this._touching = true; + }, + _conditionalDisableScrollBar: function _conditionalDisableScrollBar(contentSize, scrollViewSize) { + if (contentSize.width <= scrollViewSize.width && this.direction === Direction.HORIZONTAL) return true; + if (contentSize.height <= scrollViewSize.height && this.direction === Direction.VERTICAL) return true; + return false; + }, + _onTouchEnded: function _onTouchEnded() { + if (!this.enableAutoHide) return; + this._touching = false; + if (this.autoHideTime <= 0) return; + if (this._scrollView) { + var content = this._scrollView.content; + if (content) { + var contentSize = content.getContentSize(); + var scrollViewSize = this._scrollView.node.getContentSize(); + if (this._conditionalDisableScrollBar(contentSize, scrollViewSize)) return; + } + } + this._autoHideRemainingTime = this.autoHideTime; + }, + _calculateLength: function _calculateLength(contentMeasure, scrollViewMeasure, handleNodeMeasure, outOfBoundary) { + var denominatorValue = contentMeasure; + outOfBoundary && (denominatorValue += (outOfBoundary > 0 ? outOfBoundary : -outOfBoundary) * GETTINGSHORTERFACTOR); + var lengthRation = scrollViewMeasure / denominatorValue; + return handleNodeMeasure * lengthRation; + }, + _calculatePosition: function _calculatePosition(contentMeasure, scrollViewMeasure, handleNodeMeasure, contentPosition, outOfBoundary, actualLenth) { + var denominatorValue = contentMeasure - scrollViewMeasure; + outOfBoundary && (denominatorValue += Math.abs(outOfBoundary)); + var positionRatio = 0; + if (denominatorValue) { + positionRatio = contentPosition / denominatorValue; + positionRatio = misc.clamp01(positionRatio); + } + var position = (handleNodeMeasure - actualLenth) * positionRatio; + return this.direction === Direction.VERTICAL ? cc.v2(0, position) : cc.v2(position, 0); + }, + _updateLength: function _updateLength(length) { + if (this.handle) { + var handleNode = this.handle.node; + var handleNodeSize = handleNode.getContentSize(); + handleNode.setAnchorPoint(cc.v2(0, 0)); + this.direction === Direction.HORIZONTAL ? handleNode.setContentSize(length, handleNodeSize.height) : handleNode.setContentSize(handleNodeSize.width, length); + } + }, + _processAutoHide: function _processAutoHide(deltaTime) { + if (!this.enableAutoHide || this._autoHideRemainingTime <= 0) return; + if (this._touching) return; + this._autoHideRemainingTime -= deltaTime; + if (this._autoHideRemainingTime <= this.autoHideTime) { + this._autoHideRemainingTime = Math.max(0, this._autoHideRemainingTime); + var opacity = this._opacity * (this._autoHideRemainingTime / this.autoHideTime); + this._setOpacity(opacity); + } + }, + start: function start() { + this.enableAutoHide && this._setOpacity(0); + }, + hide: function hide() { + this._autoHideRemainingTime = 0; + this._setOpacity(0); + }, + show: function show() { + this._autoHideRemainingTime = this.autoHideTime; + this._setOpacity(this._opacity); + }, + update: function update(dt) { + this._processAutoHide(dt); + } + }); + cc.Scrollbar = module.exports = Scrollbar; + }), { + "../utils/misc": 205, + "./CCComponent": 91 + } ], + 101: [ (function(require, module, exports) { + "use strict"; + var misc = require("../utils/misc"); + var NodeEvent = require("../CCNode").EventType; + var RenderComponent = require("./CCRenderComponent"); + var BlendFunc = require("../utils/blend-func"); + var SpriteType = cc.Enum({ + SIMPLE: 0, + SLICED: 1, + TILED: 2, + FILLED: 3, + MESH: 4 + }); + var FillType = cc.Enum({ + HORIZONTAL: 0, + VERTICAL: 1, + RADIAL: 2 + }); + var SizeMode = cc.Enum({ + CUSTOM: 0, + TRIMMED: 1, + RAW: 2 + }); + var State = cc.Enum({ + NORMAL: 0, + GRAY: 1 + }); + var Sprite = cc.Class({ + name: "cc.Sprite", + extends: RenderComponent, + mixins: [ BlendFunc ], + editor: false, + properties: { + _spriteFrame: { + default: null, + type: cc.SpriteFrame + }, + _type: SpriteType.SIMPLE, + _sizeMode: SizeMode.TRIMMED, + _fillType: 0, + _fillCenter: cc.v2(0, 0), + _fillStart: 0, + _fillRange: 0, + _isTrimmedMode: true, + _atlas: { + default: null, + type: cc.SpriteAtlas, + tooltip: false, + editorOnly: true, + visible: true, + animatable: false + }, + spriteFrame: { + get: function get() { + return this._spriteFrame; + }, + set: function set(value, force) { + var lastSprite = this._spriteFrame; + false; + if (lastSprite === value) return; + this._spriteFrame = value; + this._applySpriteFrame(lastSprite); + false; + }, + type: cc.SpriteFrame + }, + type: { + get: function get() { + return this._type; + }, + set: function set(value) { + if (this._type !== value) { + this._type = value; + this.setVertsDirty(); + this._resetAssembler(); + } + }, + type: SpriteType, + animatable: false, + tooltip: false + }, + fillType: { + get: function get() { + return this._fillType; + }, + set: function set(value) { + if (value !== this._fillType) { + this._fillType = value; + this.setVertsDirty(); + this._resetAssembler(); + } + }, + type: FillType, + tooltip: false + }, + fillCenter: { + get: function get() { + return this._fillCenter; + }, + set: function set(value) { + this._fillCenter.x = value.x; + this._fillCenter.y = value.y; + this._type === SpriteType.FILLED && this.setVertsDirty(); + }, + tooltip: false + }, + fillStart: { + get: function get() { + return this._fillStart; + }, + set: function set(value) { + this._fillStart = misc.clampf(value, -1, 1); + this._type === SpriteType.FILLED && this.setVertsDirty(); + }, + tooltip: false + }, + fillRange: { + get: function get() { + return this._fillRange; + }, + set: function set(value) { + this._fillRange = misc.clampf(value, -1, 1); + this._type === SpriteType.FILLED && this.setVertsDirty(); + }, + tooltip: false + }, + trim: { + get: function get() { + return this._isTrimmedMode; + }, + set: function set(value) { + if (this._isTrimmedMode !== value) { + this._isTrimmedMode = value; + this._type !== SpriteType.SIMPLE && this._type !== SpriteType.MESH || this.setVertsDirty(); + } + }, + animatable: false, + tooltip: false + }, + sizeMode: { + get: function get() { + return this._sizeMode; + }, + set: function set(value) { + this._sizeMode = value; + value !== SizeMode.CUSTOM && this._applySpriteSize(); + }, + animatable: false, + type: SizeMode, + tooltip: false + }, + autoSwitchMaterial: { + type: RenderComponent.EnableType, + default: RenderComponent.EnableType.GLOBAL, + notify: function notify(oldValue) { + if (this.autoSwitchMaterial === oldValue) return; + this.setVertsDirty(); + } + }, + allowDynamicAtlas: { + type: RenderComponent.EnableType, + default: RenderComponent.EnableType.GLOBAL, + notify: function notify(oldValue) { + if (this.allowDynamicAtlas === oldValue) return; + this.setVertsDirty(); + } + } + }, + statics: { + FillType: FillType, + Type: SpriteType, + SizeMode: SizeMode, + State: State + }, + setVisible: function setVisible(visible) { + this.enabled = visible; + }, + setState: function setState() {}, + getState: function getState() {}, + __preload: function __preload() { + this._super(); + false; + this._applySpriteFrame(); + }, + onEnable: function onEnable() { + this._super(); + this._spriteFrame && this._spriteFrame.ensureLoadTexture(); + this.node.on(cc.Node.EventType.SIZE_CHANGED, this.setVertsDirty, this); + this.node.on(cc.Node.EventType.ANCHOR_CHANGED, this.setVertsDirty, this); + }, + onDisable: function onDisable() { + this._super(); + this.node.off(cc.Node.EventType.SIZE_CHANGED, this.setVertsDirty, this); + this.node.off(cc.Node.EventType.ANCHOR_CHANGED, this.setVertsDirty, this); + }, + _updateMaterial: function _updateMaterial() { + var texture = null; + this._spriteFrame && (texture = this._spriteFrame.getTexture()); + var material = this.getMaterial(0); + if (material) { + void 0 !== material.getDefine("USE_TEXTURE") && material.define("USE_TEXTURE", true); + var isMultiMaterial = material.material.isMultiSupport(); + isMultiMaterial ? this._texIdDirty = true : material.getProperty("texture") !== texture && material.setProperty("texture", texture); + this._assembler && (isMultiMaterial && !this._assembler.isMulti || !isMultiMaterial && this._assembler.isMulti) && this._resetAssembler(); + } + BlendFunc.prototype._updateMaterial.call(this); + }, + _applyAtlas: false, + _validateRender: function _validateRender() { + var spriteFrame = this._spriteFrame; + if (this._materials[0] && spriteFrame && spriteFrame.textureLoaded()) return; + this.disableRender(); + }, + _applySpriteSize: function _applySpriteSize() { + if (!this._spriteFrame || !this.isValid) return; + if (SizeMode.RAW === this._sizeMode) { + var size = this._spriteFrame._originalSize; + this.node.setContentSize(size); + } else if (SizeMode.TRIMMED === this._sizeMode) { + var rect = this._spriteFrame._rect; + this.node.setContentSize(rect.width, rect.height); + } + this.setVertsDirty(); + }, + _applySpriteFrame: function _applySpriteFrame(oldFrame) { + if (!this.isValid) return; + var oldTexture = oldFrame && oldFrame.getTexture(); + oldTexture && !oldTexture.loaded && oldFrame.off("load", this._applySpriteSize, this); + this._updateMaterial(); + var spriteFrame = this._spriteFrame; + if (spriteFrame) { + var newTexture = spriteFrame.getTexture(); + if (newTexture && newTexture.loaded) this._applySpriteSize(); else { + this.disableRender(); + spriteFrame.once("load", this._applySpriteSize, this); + } + } else this.disableRender(); + false; + } + }); + false; + cc.Sprite = module.exports = Sprite; + }), { + "../CCNode": 24, + "../utils/blend-func": 199, + "../utils/misc": 205, + "./CCRenderComponent": 98 + } ], + 102: [ (function(require, module, exports) { + "use strict"; + var GraySpriteState = require("../utils/gray-sprite-state"); + var Toggle = cc.Class({ + name: "cc.Toggle", + extends: require("./CCButton"), + mixins: [ GraySpriteState ], + editor: false, + properties: { + _N$isChecked: true, + isChecked: { + get: function get() { + return this._N$isChecked; + }, + set: function set(value) { + if (value === this._N$isChecked) return; + var group = this.toggleGroup || this._toggleContainer; + if (group && group.enabled && this._N$isChecked && !group.allowSwitchOff) return; + this._N$isChecked = value; + this._updateCheckMark(); + group && group.enabled && group.updateToggles(this); + cc.Toggle._triggerEventInScript_isChecked && this._emitToggleEvents(); + }, + tooltip: false + }, + toggleGroup: { + default: null, + tooltip: false, + type: require("./CCToggleGroup") + }, + checkMark: { + default: null, + type: cc.Sprite, + tooltip: false + }, + checkEvents: { + default: [], + type: cc.Component.EventHandler + }, + _resizeToTarget: { + animatable: false, + set: function set(value) { + value && this._resizeNodeToTargetNode(); + } + } + }, + statics: { + _triggerEventInScript_check: false, + _triggerEventInScript_isChecked: false + }, + onEnable: function onEnable() { + this._super(); + true; + this._registerToggleEvent(); + this.toggleGroup && this.toggleGroup.enabledInHierarchy && this.toggleGroup.addToggle(this); + }, + onDisable: function onDisable() { + this._super(); + true; + this._unregisterToggleEvent(); + this.toggleGroup && this.toggleGroup.enabledInHierarchy && this.toggleGroup.removeToggle(this); + }, + _hideCheckMark: function _hideCheckMark() { + this._N$isChecked = false; + this._updateCheckMark(); + }, + toggle: function toggle(event) { + this.isChecked = !this.isChecked; + cc.Toggle._triggerEventInScript_isChecked || !cc.Toggle._triggerEventInScript_check && !event || this._emitToggleEvents(); + }, + check: function check() { + this.isChecked = true; + !cc.Toggle._triggerEventInScript_isChecked && cc.Toggle._triggerEventInScript_check && this._emitToggleEvents(); + }, + uncheck: function uncheck() { + this.isChecked = false; + !cc.Toggle._triggerEventInScript_isChecked && cc.Toggle._triggerEventInScript_check && this._emitToggleEvents(); + }, + _updateCheckMark: function _updateCheckMark() { + this.checkMark && (this.checkMark.node.active = !!this.isChecked); + }, + _updateDisabledState: function _updateDisabledState() { + this._super(); + if (this.enableAutoGrayEffect && this.checkMark) { + var useGrayMaterial = !this.interactable; + this._switchGrayMaterial(useGrayMaterial, this.checkMark); + } + }, + _registerToggleEvent: function _registerToggleEvent() { + this.node.on("click", this.toggle, this); + }, + _unregisterToggleEvent: function _unregisterToggleEvent() { + this.node.off("click", this.toggle, this); + }, + _emitToggleEvents: function _emitToggleEvents() { + this.node.emit("toggle", this); + this.checkEvents && cc.Component.EventHandler.emitEvents(this.checkEvents, this); + } + }); + cc.Toggle = module.exports = Toggle; + var js = require("../platform/js"); + js.get(Toggle.prototype, "_toggleContainer", (function() { + var parent = this.node.parent; + if (cc.Node.isNode(parent)) return parent.getComponent(cc.ToggleContainer); + return null; + })); + }), { + "../platform/js": 142, + "../utils/gray-sprite-state": 202, + "./CCButton": 89, + "./CCToggleGroup": 104 + } ], + 103: [ (function(require, module, exports) { + "use strict"; + var ToggleContainer = cc.Class({ + name: "cc.ToggleContainer", + extends: cc.Component, + editor: false, + properties: { + allowSwitchOff: { + tooltip: false, + default: false + }, + checkEvents: { + default: [], + type: cc.Component.EventHandler + } + }, + updateToggles: function updateToggles(toggle) { + if (!this.enabledInHierarchy) return; + if (toggle.isChecked) { + this.toggleItems.forEach((function(item) { + item !== toggle && item.isChecked && item.enabled && item._hideCheckMark(); + })); + this.checkEvents && cc.Component.EventHandler.emitEvents(this.checkEvents, toggle); + } + }, + _allowOnlyOneToggleChecked: function _allowOnlyOneToggleChecked() { + var isChecked = false; + this.toggleItems.forEach((function(item) { + isChecked ? item._hideCheckMark() : item.isChecked && (isChecked = true); + })); + return isChecked; + }, + _makeAtLeastOneToggleChecked: function _makeAtLeastOneToggleChecked() { + var isChecked = this._allowOnlyOneToggleChecked(); + if (!isChecked && !this.allowSwitchOff) { + var toggleItems = this.toggleItems; + toggleItems.length > 0 && toggleItems[0].check(); + } + }, + onEnable: function onEnable() { + this._makeAtLeastOneToggleChecked(); + this.node.on("child-added", this._allowOnlyOneToggleChecked, this); + this.node.on("child-removed", this._makeAtLeastOneToggleChecked, this); + }, + onDisable: function onDisable() { + this.node.off("child-added", this._allowOnlyOneToggleChecked, this); + this.node.off("child-removed", this._makeAtLeastOneToggleChecked, this); + } + }); + var js = require("../platform/js"); + js.get(ToggleContainer.prototype, "toggleItems", (function() { + return this.node._children.map((function(item) { + return item.getComponent(cc.Toggle); + })).filter(Boolean); + })); + cc.ToggleContainer = module.exports = ToggleContainer; + }), { + "../platform/js": 142 + } ], + 104: [ (function(require, module, exports) { + "use strict"; + var ToggleGroup = cc.Class({ + name: "cc.ToggleGroup", + extends: cc.Component, + ctor: function ctor() { + this._toggleItems = []; + }, + editor: false, + properties: { + allowSwitchOff: { + tooltip: false, + default: false + }, + toggleItems: { + get: function get() { + return this._toggleItems; + } + } + }, + updateToggles: function updateToggles(toggle) { + if (!this.enabledInHierarchy) return; + this._toggleItems.forEach((function(item) { + toggle.isChecked && item !== toggle && item.isChecked && item.enabled && item._hideCheckMark(); + })); + }, + addToggle: function addToggle(toggle) { + var index = this._toggleItems.indexOf(toggle); + -1 === index && this._toggleItems.push(toggle); + this._allowOnlyOneToggleChecked(); + }, + removeToggle: function removeToggle(toggle) { + var index = this._toggleItems.indexOf(toggle); + index > -1 && this._toggleItems.splice(index, 1); + this._makeAtLeastOneToggleChecked(); + }, + _allowOnlyOneToggleChecked: function _allowOnlyOneToggleChecked() { + var isChecked = false; + this._toggleItems.forEach((function(item) { + isChecked && item.enabled && item._hideCheckMark(); + item.isChecked && item.enabled && (isChecked = true); + })); + return isChecked; + }, + _makeAtLeastOneToggleChecked: function _makeAtLeastOneToggleChecked() { + var isChecked = this._allowOnlyOneToggleChecked(); + isChecked || this.allowSwitchOff || this._toggleItems.length > 0 && (this._toggleItems[0].isChecked = true); + }, + start: function start() { + this._makeAtLeastOneToggleChecked(); + } + }); + var js = require("../platform/js"); + var showed = false; + js.get(cc, "ToggleGroup", (function() { + if (!showed) { + cc.errorID(1405, "cc.ToggleGroup", "cc.ToggleContainer"); + showed = true; + } + return ToggleGroup; + })); + module.exports = ToggleGroup; + }), { + "../platform/js": 142 + } ], + 105: [ (function(require, module, exports) { + "use strict"; + var WidgetManager = require("../base-ui/CCWidgetManager"); + var AlignMode = WidgetManager.AlignMode; + var AlignFlags = WidgetManager._AlignFlags; + var TOP = AlignFlags.TOP; + var MID = AlignFlags.MID; + var BOT = AlignFlags.BOT; + var LEFT = AlignFlags.LEFT; + var CENTER = AlignFlags.CENTER; + var RIGHT = AlignFlags.RIGHT; + var TOP_BOT = TOP | BOT; + var LEFT_RIGHT = LEFT | RIGHT; + var Widget = cc.Class({ + name: "cc.Widget", + extends: require("./CCComponent"), + editor: false, + properties: { + target: { + get: function get() { + return this._target; + }, + set: function set(value) { + this._target = value; + false; + }, + type: cc.Node, + tooltip: false + }, + isAlignTop: { + get: function get() { + return (this._alignFlags & TOP) > 0; + }, + set: function set(value) { + this._setAlign(TOP, value); + }, + animatable: false, + tooltip: false + }, + isAlignVerticalCenter: { + get: function get() { + return (this._alignFlags & MID) > 0; + }, + set: function set(value) { + if (value) { + this.isAlignTop = false; + this.isAlignBottom = false; + this._alignFlags |= MID; + } else this._alignFlags &= ~MID; + }, + animatable: false, + tooltip: false + }, + isAlignBottom: { + get: function get() { + return (this._alignFlags & BOT) > 0; + }, + set: function set(value) { + this._setAlign(BOT, value); + }, + animatable: false, + tooltip: false + }, + isAlignLeft: { + get: function get() { + return (this._alignFlags & LEFT) > 0; + }, + set: function set(value) { + this._setAlign(LEFT, value); + }, + animatable: false, + tooltip: false + }, + isAlignHorizontalCenter: { + get: function get() { + return (this._alignFlags & CENTER) > 0; + }, + set: function set(value) { + if (value) { + this.isAlignLeft = false; + this.isAlignRight = false; + this._alignFlags |= CENTER; + } else this._alignFlags &= ~CENTER; + }, + animatable: false, + tooltip: false + }, + isAlignRight: { + get: function get() { + return (this._alignFlags & RIGHT) > 0; + }, + set: function set(value) { + this._setAlign(RIGHT, value); + }, + animatable: false, + tooltip: false + }, + isStretchWidth: { + get: function get() { + return (this._alignFlags & LEFT_RIGHT) === LEFT_RIGHT; + }, + visible: false + }, + isStretchHeight: { + get: function get() { + return (this._alignFlags & TOP_BOT) === TOP_BOT; + }, + visible: false + }, + top: { + get: function get() { + return this._top; + }, + set: function set(value) { + this._top = value; + }, + tooltip: false + }, + bottom: { + get: function get() { + return this._bottom; + }, + set: function set(value) { + this._bottom = value; + }, + tooltip: false + }, + left: { + get: function get() { + return this._left; + }, + set: function set(value) { + this._left = value; + }, + tooltip: false + }, + right: { + get: function get() { + return this._right; + }, + set: function set(value) { + this._right = value; + }, + tooltip: false + }, + horizontalCenter: { + get: function get() { + return this._horizontalCenter; + }, + set: function set(value) { + this._horizontalCenter = value; + }, + tooltip: false + }, + verticalCenter: { + get: function get() { + return this._verticalCenter; + }, + set: function set(value) { + this._verticalCenter = value; + }, + tooltip: false + }, + isAbsoluteHorizontalCenter: { + get: function get() { + return this._isAbsHorizontalCenter; + }, + set: function set(value) { + this._isAbsHorizontalCenter = value; + }, + animatable: false + }, + isAbsoluteVerticalCenter: { + get: function get() { + return this._isAbsVerticalCenter; + }, + set: function set(value) { + this._isAbsVerticalCenter = value; + }, + animatable: false + }, + isAbsoluteTop: { + get: function get() { + return this._isAbsTop; + }, + set: function set(value) { + this._isAbsTop = value; + }, + animatable: false + }, + isAbsoluteBottom: { + get: function get() { + return this._isAbsBottom; + }, + set: function set(value) { + this._isAbsBottom = value; + }, + animatable: false + }, + isAbsoluteLeft: { + get: function get() { + return this._isAbsLeft; + }, + set: function set(value) { + this._isAbsLeft = value; + }, + animatable: false + }, + isAbsoluteRight: { + get: function get() { + return this._isAbsRight; + }, + set: function set(value) { + this._isAbsRight = value; + }, + animatable: false + }, + alignMode: { + default: AlignMode.ON_WINDOW_RESIZE, + type: AlignMode, + tooltip: false + }, + _wasAlignOnce: { + default: void 0, + formerlySerializedAs: "isAlignOnce" + }, + _target: null, + _alignFlags: 0, + _left: 0, + _right: 0, + _top: 0, + _bottom: 0, + _verticalCenter: 0, + _horizontalCenter: 0, + _isAbsLeft: true, + _isAbsRight: true, + _isAbsTop: true, + _isAbsBottom: true, + _isAbsHorizontalCenter: true, + _isAbsVerticalCenter: true, + _originalWidth: 0, + _originalHeight: 0 + }, + statics: { + AlignMode: AlignMode + }, + onLoad: function onLoad() { + if (void 0 !== this._wasAlignOnce) { + this.alignMode = this._wasAlignOnce ? AlignMode.ONCE : AlignMode.ALWAYS; + this._wasAlignOnce = void 0; + } + }, + onEnable: function onEnable() { + WidgetManager.add(this); + }, + onDisable: function onDisable() { + WidgetManager.remove(this); + }, + _validateTargetInDEV: false, + _setAlign: function _setAlign(flag, isAlign) { + var current = (this._alignFlags & flag) > 0; + if (isAlign === current) return; + var isHorizontal = (flag & LEFT_RIGHT) > 0; + if (isAlign) { + this._alignFlags |= flag; + if (isHorizontal) { + this.isAlignHorizontalCenter = false; + if (this.isStretchWidth) { + this._originalWidth = this.node.width; + false; + } + } else { + this.isAlignVerticalCenter = false; + if (this.isStretchHeight) { + this._originalHeight = this.node.height; + false; + } + } + false; + } else { + isHorizontal ? this.isStretchWidth && (this.node.width = this._originalWidth) : this.isStretchHeight && (this.node.height = this._originalHeight); + this._alignFlags &= ~flag; + } + }, + updateAlignment: function updateAlignment() { + WidgetManager.updateAlignment(this.node); + } + }); + Object.defineProperty(Widget.prototype, "isAlignOnce", { + get: function get() { + true; + cc.warn("`widget.isAlignOnce` is deprecated, use `widget.alignMode === cc.Widget.AlignMode.ONCE` instead please."); + return this.alignMode === AlignMode.ONCE; + }, + set: function set(value) { + true; + cc.warn("`widget.isAlignOnce` is deprecated, use `widget.alignMode = cc.Widget.AlignMode.*` instead please."); + this.alignMode = value ? AlignMode.ONCE : AlignMode.ALWAYS; + } + }); + cc.Widget = module.exports = Widget; + }), { + "../base-ui/CCWidgetManager": 84, + "./CCComponent": 91 + } ], + 106: [ (function(require, module, exports) { + "use strict"; + require("./CCComponent"); + require("./CCComponentEventHandler"); + require("./missing-script"); + var SubContextView = require("./SubContextView"); + if (!SubContextView) { + SubContextView = cc.Class({ + name: "cc.SubContextView", + extends: cc.Component + }); + cc.SubContextView = cc.WXSubContextView = cc.SwanSubContextView = SubContextView; + } + var components = [ require("./CCSprite"), require("./CCWidget"), require("./CCCanvas"), require("./CCAudioSource"), require("./CCAnimation"), require("./CCButton"), require("./CCLabel"), require("./CCProgressBar"), require("./CCMask"), require("./CCScrollBar"), require("./CCScrollView"), require("./CCPageViewIndicator"), require("./CCPageView"), require("./CCSlider"), require("./CCLayout"), require("./editbox/CCEditBox"), require("./CCLabelOutline"), require("./CCLabelShadow"), require("./CCRichText"), require("./CCToggleContainer"), require("./CCToggleGroup"), require("./CCToggle"), require("./CCBlockInputEvents"), require("./CCMotionStreak"), require("./CCSafeArea"), SubContextView ]; + module.exports = components; + }), { + "./CCAnimation": 87, + "./CCAudioSource": void 0, + "./CCBlockInputEvents": 88, + "./CCButton": 89, + "./CCCanvas": 90, + "./CCComponent": 91, + "./CCComponentEventHandler": 92, + "./CCLabel": 93, + "./CCLabelOutline": 94, + "./CCLabelShadow": 95, + "./CCLayout": 96, + "./CCMask": void 0, + "./CCMotionStreak": 97, + "./CCPageView": void 0, + "./CCPageViewIndicator": void 0, + "./CCProgressBar": void 0, + "./CCRichText": 99, + "./CCSafeArea": void 0, + "./CCScrollBar": 100, + "./CCScrollView": void 0, + "./CCSlider": void 0, + "./CCSprite": 101, + "./CCToggle": 102, + "./CCToggleContainer": 103, + "./CCToggleGroup": 104, + "./CCWidget": 105, + "./SubContextView": void 0, + "./editbox/CCEditBox": void 0, + "./missing-script": 107 + } ], + 107: [ (function(require, module, exports) { + "use strict"; + var js = cc.js; + var MissingScript = cc.Class({ + name: "cc.MissingScript", + extends: cc.Component, + editor: { + inspector: "packages://inspector/inspectors/comps/missing-script.js" + }, + properties: { + compiled: { + default: false, + serializable: false + }, + _$erialized: { + default: null, + visible: false, + editorOnly: true + } + }, + ctor: false, + statics: { + safeFindClass: function safeFindClass(id) { + var cls = js._getClassById(id); + if (cls) return cls; + cc.deserialize.reportMissingClass(id); + return MissingScript; + } + }, + onLoad: function onLoad() { + cc.warnID(4600, this.node.name); + } + }); + cc._MissingScript = module.exports = MissingScript; + }), {} ], + 108: [ (function(require, module, exports) { + "use strict"; + var js = cc.js; + require("../event/event"); + var EventMouse = function EventMouse(eventType, bubbles) { + cc.Event.call(this, cc.Event.MOUSE, bubbles); + this._eventType = eventType; + this._button = 0; + this._x = 0; + this._y = 0; + this._prevX = 0; + this._prevY = 0; + this._scrollX = 0; + this._scrollY = 0; + }; + js.extend(EventMouse, cc.Event); + var proto = EventMouse.prototype; + proto.setScrollData = function(scrollX, scrollY) { + this._scrollX = scrollX; + this._scrollY = scrollY; + }; + proto.getScrollX = function() { + return this._scrollX; + }; + proto.getScrollY = function() { + return this._scrollY; + }; + proto.setLocation = function(x, y) { + this._x = x; + this._y = y; + }; + proto.getLocation = function() { + return cc.v2(this._x, this._y); + }; + proto.getLocationInView = function() { + return cc.v2(this._x, cc.view._designResolutionSize.height - this._y); + }; + proto._setPrevCursor = function(x, y) { + this._prevX = x; + this._prevY = y; + }; + proto.getPreviousLocation = function() { + return cc.v2(this._prevX, this._prevY); + }; + proto.getDelta = function() { + return cc.v2(this._x - this._prevX, this._y - this._prevY); + }; + proto.getDeltaX = function() { + return this._x - this._prevX; + }; + proto.getDeltaY = function() { + return this._y - this._prevY; + }; + proto.setButton = function(button) { + this._button = button; + }; + proto.getButton = function() { + return this._button; + }; + proto.getLocationX = function() { + return this._x; + }; + proto.getLocationY = function() { + return this._y; + }; + EventMouse.NONE = 0; + EventMouse.DOWN = 1; + EventMouse.UP = 2; + EventMouse.MOVE = 3; + EventMouse.SCROLL = 4; + EventMouse.BUTTON_LEFT = 0; + EventMouse.BUTTON_RIGHT = 2; + EventMouse.BUTTON_MIDDLE = 1; + EventMouse.BUTTON_4 = 3; + EventMouse.BUTTON_5 = 4; + EventMouse.BUTTON_6 = 5; + EventMouse.BUTTON_7 = 6; + EventMouse.BUTTON_8 = 7; + var EventTouch = function EventTouch(touchArr, bubbles) { + cc.Event.call(this, cc.Event.TOUCH, bubbles); + this._eventCode = 0; + this._touches = touchArr || []; + this.touch = null; + this.currentTouch = null; + }; + js.extend(EventTouch, cc.Event); + proto = EventTouch.prototype; + proto.getEventCode = function() { + return this._eventCode; + }; + proto.getTouches = function() { + return this._touches; + }; + proto._setEventCode = function(eventCode) { + this._eventCode = eventCode; + }; + proto._setTouches = function(touches) { + this._touches = touches; + }; + proto.setLocation = function(x, y) { + this.touch && this.touch.setTouchInfo(this.touch.getID(), x, y); + }; + proto.getLocation = function() { + return this.touch ? this.touch.getLocation() : cc.v2(); + }; + proto.getLocationInView = function() { + return this.touch ? this.touch.getLocationInView() : cc.v2(); + }; + proto.getPreviousLocation = function() { + return this.touch ? this.touch.getPreviousLocation() : cc.v2(); + }; + proto.getStartLocation = function() { + return this.touch ? this.touch.getStartLocation() : cc.v2(); + }; + proto.getID = function() { + return this.touch ? this.touch.getID() : null; + }; + proto.getDelta = function() { + return this.touch ? this.touch.getDelta() : cc.v2(); + }; + proto.getDeltaX = function() { + return this.touch ? this.touch.getDelta().x : 0; + }; + proto.getDeltaY = function() { + return this.touch ? this.touch.getDelta().y : 0; + }; + proto.getLocationX = function() { + return this.touch ? this.touch.getLocationX() : 0; + }; + proto.getLocationY = function() { + return this.touch ? this.touch.getLocationY() : 0; + }; + EventTouch.MAX_TOUCHES = 5; + EventTouch.BEGAN = 0; + EventTouch.MOVED = 1; + EventTouch.ENDED = 2; + EventTouch.CANCELED = 3; + var EventAcceleration = function EventAcceleration(acc, bubbles) { + cc.Event.call(this, cc.Event.ACCELERATION, bubbles); + this.acc = acc; + }; + js.extend(EventAcceleration, cc.Event); + var EventKeyboard = function EventKeyboard(keyCode, isPressed, bubbles) { + cc.Event.call(this, cc.Event.KEYBOARD, bubbles); + this.keyCode = keyCode; + this.isPressed = isPressed; + }; + js.extend(EventKeyboard, cc.Event); + cc.Event.EventMouse = EventMouse; + cc.Event.EventTouch = EventTouch; + cc.Event.EventAcceleration = EventAcceleration; + cc.Event.EventKeyboard = EventKeyboard; + module.exports = cc.Event; + }), { + "../event/event": 115 + } ], + 109: [ (function(require, module, exports) { + "use strict"; + var js = require("../platform/js"); + cc.EventListener = function(type, listenerID, callback) { + this._onEvent = callback; + this._type = type || 0; + this._listenerID = listenerID || ""; + this._registered = false; + this._fixedPriority = 0; + this._node = null; + this._target = null; + this._paused = true; + this._isEnabled = true; + }; + cc.EventListener.prototype = { + constructor: cc.EventListener, + _setPaused: function _setPaused(paused) { + this._paused = paused; + }, + _isPaused: function _isPaused() { + return this._paused; + }, + _setRegistered: function _setRegistered(registered) { + this._registered = registered; + }, + _isRegistered: function _isRegistered() { + return this._registered; + }, + _getType: function _getType() { + return this._type; + }, + _getListenerID: function _getListenerID() { + return this._listenerID; + }, + _setFixedPriority: function _setFixedPriority(fixedPriority) { + this._fixedPriority = fixedPriority; + }, + _getFixedPriority: function _getFixedPriority() { + return this._fixedPriority; + }, + _setSceneGraphPriority: function _setSceneGraphPriority(node) { + this._target = node; + this._node = node; + }, + _getSceneGraphPriority: function _getSceneGraphPriority() { + return this._node; + }, + checkAvailable: function checkAvailable() { + return null !== this._onEvent; + }, + clone: function clone() { + return null; + }, + setEnabled: function setEnabled(enabled) { + this._isEnabled = enabled; + }, + isEnabled: function isEnabled() { + return this._isEnabled; + }, + retain: function retain() {}, + release: function release() {} + }; + cc.EventListener.UNKNOWN = 0; + cc.EventListener.TOUCH_ONE_BY_ONE = 1; + cc.EventListener.TOUCH_ALL_AT_ONCE = 2; + cc.EventListener.KEYBOARD = 3; + cc.EventListener.MOUSE = 4; + cc.EventListener.ACCELERATION = 6; + cc.EventListener.CUSTOM = 8; + var ListenerID = cc.EventListener.ListenerID = { + MOUSE: "__cc_mouse", + TOUCH_ONE_BY_ONE: "__cc_touch_one_by_one", + TOUCH_ALL_AT_ONCE: "__cc_touch_all_at_once", + KEYBOARD: "__cc_keyboard", + ACCELERATION: "__cc_acceleration" + }; + var Custom = function Custom(listenerId, callback) { + this._onCustomEvent = callback; + cc.EventListener.call(this, cc.EventListener.CUSTOM, listenerId, this._callback); + }; + js.extend(Custom, cc.EventListener); + js.mixin(Custom.prototype, { + _onCustomEvent: null, + _callback: function _callback(event) { + null !== this._onCustomEvent && this._onCustomEvent(event); + }, + checkAvailable: function checkAvailable() { + return cc.EventListener.prototype.checkAvailable.call(this) && null !== this._onCustomEvent; + }, + clone: function clone() { + return new Custom(this._listenerID, this._onCustomEvent); + } + }); + var Mouse = function Mouse() { + cc.EventListener.call(this, cc.EventListener.MOUSE, ListenerID.MOUSE, this._callback); + }; + js.extend(Mouse, cc.EventListener); + js.mixin(Mouse.prototype, { + onMouseDown: null, + onMouseUp: null, + onMouseMove: null, + onMouseScroll: null, + _callback: function _callback(event) { + var eventType = cc.Event.EventMouse; + switch (event._eventType) { + case eventType.DOWN: + this.onMouseDown && this.onMouseDown(event); + break; + + case eventType.UP: + this.onMouseUp && this.onMouseUp(event); + break; + + case eventType.MOVE: + this.onMouseMove && this.onMouseMove(event); + break; + + case eventType.SCROLL: + this.onMouseScroll && this.onMouseScroll(event); + } + }, + clone: function clone() { + var eventListener = new Mouse(); + eventListener.onMouseDown = this.onMouseDown; + eventListener.onMouseUp = this.onMouseUp; + eventListener.onMouseMove = this.onMouseMove; + eventListener.onMouseScroll = this.onMouseScroll; + return eventListener; + }, + checkAvailable: function checkAvailable() { + return true; + } + }); + var TouchOneByOne = function TouchOneByOne() { + cc.EventListener.call(this, cc.EventListener.TOUCH_ONE_BY_ONE, ListenerID.TOUCH_ONE_BY_ONE, null); + this._claimedTouches = []; + }; + js.extend(TouchOneByOne, cc.EventListener); + js.mixin(TouchOneByOne.prototype, { + constructor: TouchOneByOne, + _claimedTouches: null, + swallowTouches: false, + onTouchBegan: null, + onTouchMoved: null, + onTouchEnded: null, + onTouchCancelled: null, + setSwallowTouches: function setSwallowTouches(needSwallow) { + this.swallowTouches = needSwallow; + }, + isSwallowTouches: function isSwallowTouches() { + return this.swallowTouches; + }, + clone: function clone() { + var eventListener = new TouchOneByOne(); + eventListener.onTouchBegan = this.onTouchBegan; + eventListener.onTouchMoved = this.onTouchMoved; + eventListener.onTouchEnded = this.onTouchEnded; + eventListener.onTouchCancelled = this.onTouchCancelled; + eventListener.swallowTouches = this.swallowTouches; + return eventListener; + }, + checkAvailable: function checkAvailable() { + if (!this.onTouchBegan) { + cc.logID(1801); + return false; + } + return true; + } + }); + var TouchAllAtOnce = function TouchAllAtOnce() { + cc.EventListener.call(this, cc.EventListener.TOUCH_ALL_AT_ONCE, ListenerID.TOUCH_ALL_AT_ONCE, null); + }; + js.extend(TouchAllAtOnce, cc.EventListener); + js.mixin(TouchAllAtOnce.prototype, { + constructor: TouchAllAtOnce, + onTouchesBegan: null, + onTouchesMoved: null, + onTouchesEnded: null, + onTouchesCancelled: null, + clone: function clone() { + var eventListener = new TouchAllAtOnce(); + eventListener.onTouchesBegan = this.onTouchesBegan; + eventListener.onTouchesMoved = this.onTouchesMoved; + eventListener.onTouchesEnded = this.onTouchesEnded; + eventListener.onTouchesCancelled = this.onTouchesCancelled; + return eventListener; + }, + checkAvailable: function checkAvailable() { + if (null === this.onTouchesBegan && null === this.onTouchesMoved && null === this.onTouchesEnded && null === this.onTouchesCancelled) { + cc.logID(1802); + return false; + } + return true; + } + }); + var Acceleration = function Acceleration(callback) { + this._onAccelerationEvent = callback; + cc.EventListener.call(this, cc.EventListener.ACCELERATION, ListenerID.ACCELERATION, this._callback); + }; + js.extend(Acceleration, cc.EventListener); + js.mixin(Acceleration.prototype, { + constructor: Acceleration, + _onAccelerationEvent: null, + _callback: function _callback(event) { + this._onAccelerationEvent(event.acc, event); + }, + checkAvailable: function checkAvailable() { + cc.assertID(this._onAccelerationEvent, 1803); + return true; + }, + clone: function clone() { + return new Acceleration(this._onAccelerationEvent); + } + }); + var Keyboard = function Keyboard() { + cc.EventListener.call(this, cc.EventListener.KEYBOARD, ListenerID.KEYBOARD, this._callback); + }; + js.extend(Keyboard, cc.EventListener); + js.mixin(Keyboard.prototype, { + constructor: Keyboard, + onKeyPressed: null, + onKeyReleased: null, + _callback: function _callback(event) { + event.isPressed ? this.onKeyPressed && this.onKeyPressed(event.keyCode, event) : this.onKeyReleased && this.onKeyReleased(event.keyCode, event); + }, + clone: function clone() { + var eventListener = new Keyboard(); + eventListener.onKeyPressed = this.onKeyPressed; + eventListener.onKeyReleased = this.onKeyReleased; + return eventListener; + }, + checkAvailable: function checkAvailable() { + if (null === this.onKeyPressed && null === this.onKeyReleased) { + cc.logID(1800); + return false; + } + return true; + } + }); + cc.EventListener.create = function(argObj) { + cc.assertID(argObj && argObj.event, 1900); + var listenerType = argObj.event; + delete argObj.event; + var listener = null; + if (listenerType === cc.EventListener.TOUCH_ONE_BY_ONE) listener = new TouchOneByOne(); else if (listenerType === cc.EventListener.TOUCH_ALL_AT_ONCE) listener = new TouchAllAtOnce(); else if (listenerType === cc.EventListener.MOUSE) listener = new Mouse(); else if (listenerType === cc.EventListener.CUSTOM) { + listener = new Custom(argObj.eventName, argObj.callback); + delete argObj.eventName; + delete argObj.callback; + } else if (listenerType === cc.EventListener.KEYBOARD) listener = new Keyboard(); else if (listenerType === cc.EventListener.ACCELERATION) { + listener = new Acceleration(argObj.callback); + delete argObj.callback; + } + for (var key in argObj) listener[key] = argObj[key]; + return listener; + }; + module.exports = cc.EventListener; + }), { + "../platform/js": 142 + } ], + 110: [ (function(require, module, exports) { + "use strict"; + var js = require("../platform/js"); + require("./CCEventListener"); + var ListenerID = cc.EventListener.ListenerID; + var _EventListenerVector = function _EventListenerVector() { + this._fixedListeners = []; + this._sceneGraphListeners = []; + this.gt0Index = 0; + }; + _EventListenerVector.prototype = { + constructor: _EventListenerVector, + size: function size() { + return this._fixedListeners.length + this._sceneGraphListeners.length; + }, + empty: function empty() { + return 0 === this._fixedListeners.length && 0 === this._sceneGraphListeners.length; + }, + push: function push(listener) { + 0 === listener._getFixedPriority() ? this._sceneGraphListeners.push(listener) : this._fixedListeners.push(listener); + }, + clearSceneGraphListeners: function clearSceneGraphListeners() { + this._sceneGraphListeners.length = 0; + }, + clearFixedListeners: function clearFixedListeners() { + this._fixedListeners.length = 0; + }, + clear: function clear() { + this._sceneGraphListeners.length = 0; + this._fixedListeners.length = 0; + }, + getFixedPriorityListeners: function getFixedPriorityListeners() { + return this._fixedListeners; + }, + getSceneGraphPriorityListeners: function getSceneGraphPriorityListeners() { + return this._sceneGraphListeners; + } + }; + var __getListenerID = function __getListenerID(event) { + var eventType = cc.Event, type = event.type; + if (type === eventType.ACCELERATION) return ListenerID.ACCELERATION; + if (type === eventType.KEYBOARD) return ListenerID.KEYBOARD; + if (type.startsWith(eventType.MOUSE)) return ListenerID.MOUSE; + type.startsWith(eventType.TOUCH) && cc.logID(2e3); + return ""; + }; + var eventManager = { + DIRTY_NONE: 0, + DIRTY_FIXED_PRIORITY: 1, + DIRTY_SCENE_GRAPH_PRIORITY: 2, + DIRTY_ALL: 3, + _listenersMap: {}, + _priorityDirtyFlagMap: {}, + _nodeListenersMap: {}, + _toAddedListeners: [], + _toRemovedListeners: [], + _dirtyListeners: {}, + _inDispatch: 0, + _isEnabled: false, + _currentTouch: null, + _currentTouchListener: null, + _internalCustomListenerIDs: [], + _setDirtyForNode: function _setDirtyForNode(node) { + var selListeners = this._nodeListenersMap[node._id]; + if (void 0 !== selListeners) for (var j = 0, len = selListeners.length; j < len; j++) { + var selListener = selListeners[j]; + var listenerID = selListener._getListenerID(); + null == this._dirtyListeners[listenerID] && (this._dirtyListeners[listenerID] = true); + } + if (node.childrenCount > 0) { + var children = node._children; + for (var i = 0, _len = children.length; i < _len; i++) this._setDirtyForNode(children[i]); + } + }, + pauseTarget: function pauseTarget(node, recursive) { + if (!(node instanceof cc._BaseNode)) { + cc.warnID(3506); + return; + } + var listeners = this._nodeListenersMap[node._id], i, len; + if (listeners) for (i = 0, len = listeners.length; i < len; i++) listeners[i]._setPaused(true); + if (true === recursive) { + var locChildren = node._children; + for (i = 0, len = locChildren ? locChildren.length : 0; i < len; i++) this.pauseTarget(locChildren[i], true); + } + }, + resumeTarget: function resumeTarget(node, recursive) { + if (!(node instanceof cc._BaseNode)) { + cc.warnID(3506); + return; + } + var listeners = this._nodeListenersMap[node._id], i, len; + if (listeners) for (i = 0, len = listeners.length; i < len; i++) listeners[i]._setPaused(false); + this._setDirtyForNode(node); + if (true === recursive) { + var locChildren = node._children; + for (i = 0, len = locChildren ? locChildren.length : 0; i < len; i++) this.resumeTarget(locChildren[i], true); + } + }, + _addListener: function _addListener(listener) { + 0 === this._inDispatch ? this._forceAddEventListener(listener) : this._toAddedListeners.push(listener); + }, + _forceAddEventListener: function _forceAddEventListener(listener) { + var listenerID = listener._getListenerID(); + var listeners = this._listenersMap[listenerID]; + if (!listeners) { + listeners = new _EventListenerVector(); + this._listenersMap[listenerID] = listeners; + } + listeners.push(listener); + if (0 === listener._getFixedPriority()) { + this._setDirty(listenerID, this.DIRTY_SCENE_GRAPH_PRIORITY); + var node = listener._getSceneGraphPriority(); + null === node && cc.logID(3507); + this._associateNodeAndEventListener(node, listener); + node.activeInHierarchy && this.resumeTarget(node); + } else this._setDirty(listenerID, this.DIRTY_FIXED_PRIORITY); + }, + _getListeners: function _getListeners(listenerID) { + return this._listenersMap[listenerID]; + }, + _updateDirtyFlagForSceneGraph: function _updateDirtyFlagForSceneGraph() { + var locDirtyListeners = this._dirtyListeners; + for (var selKey in locDirtyListeners) this._setDirty(selKey, this.DIRTY_SCENE_GRAPH_PRIORITY); + this._dirtyListeners = {}; + }, + _removeAllListenersInVector: function _removeAllListenersInVector(listenerVector) { + if (!listenerVector) return; + var selListener; + for (var i = listenerVector.length - 1; i >= 0; i--) { + selListener = listenerVector[i]; + selListener._setRegistered(false); + if (null != selListener._getSceneGraphPriority()) { + this._dissociateNodeAndEventListener(selListener._getSceneGraphPriority(), selListener); + selListener._setSceneGraphPriority(null); + } + 0 === this._inDispatch && cc.js.array.removeAt(listenerVector, i); + } + }, + _removeListenersForListenerID: function _removeListenersForListenerID(listenerID) { + var listeners = this._listenersMap[listenerID], i; + if (listeners) { + var fixedPriorityListeners = listeners.getFixedPriorityListeners(); + var sceneGraphPriorityListeners = listeners.getSceneGraphPriorityListeners(); + this._removeAllListenersInVector(sceneGraphPriorityListeners); + this._removeAllListenersInVector(fixedPriorityListeners); + delete this._priorityDirtyFlagMap[listenerID]; + if (!this._inDispatch) { + listeners.clear(); + delete this._listenersMap[listenerID]; + } + } + var locToAddedListeners = this._toAddedListeners, listener; + for (i = locToAddedListeners.length - 1; i >= 0; i--) { + listener = locToAddedListeners[i]; + listener && listener._getListenerID() === listenerID && cc.js.array.removeAt(locToAddedListeners, i); + } + }, + _sortEventListeners: function _sortEventListeners(listenerID) { + var dirtyFlag = this.DIRTY_NONE, locFlagMap = this._priorityDirtyFlagMap; + locFlagMap[listenerID] && (dirtyFlag = locFlagMap[listenerID]); + if (dirtyFlag !== this.DIRTY_NONE) { + locFlagMap[listenerID] = this.DIRTY_NONE; + dirtyFlag & this.DIRTY_FIXED_PRIORITY && this._sortListenersOfFixedPriority(listenerID); + if (dirtyFlag & this.DIRTY_SCENE_GRAPH_PRIORITY) { + var rootEntity = cc.director.getScene(); + rootEntity && this._sortListenersOfSceneGraphPriority(listenerID); + } + } + }, + _sortListenersOfSceneGraphPriority: function _sortListenersOfSceneGraphPriority(listenerID) { + var listeners = this._getListeners(listenerID); + if (!listeners) return; + var sceneGraphListener = listeners.getSceneGraphPriorityListeners(); + if (!sceneGraphListener || 0 === sceneGraphListener.length) return; + listeners.getSceneGraphPriorityListeners().sort(this._sortEventListenersOfSceneGraphPriorityDes); + }, + _sortEventListenersOfSceneGraphPriorityDes: function _sortEventListenersOfSceneGraphPriorityDes(l1, l2) { + var node1 = l1._getSceneGraphPriority(), node2 = l2._getSceneGraphPriority(); + if (!(l2 && node2 && node2._activeInHierarchy && null !== node2._parent)) return -1; + if (!l1 || !node1 || !node1._activeInHierarchy || null === node1._parent) return 1; + var p1 = node1, p2 = node2, ex = false; + while (p1._parent._id !== p2._parent._id) { + p1 = null === p1._parent._parent ? (ex = true) && node2 : p1._parent; + p2 = null === p2._parent._parent ? (ex = true) && node1 : p2._parent; + } + if (p1._id === p2._id) { + if (p1._id === node2._id) return -1; + if (p1._id === node1._id) return 1; + } + return ex ? p1._localZOrder - p2._localZOrder : p2._localZOrder - p1._localZOrder; + }, + _sortListenersOfFixedPriority: function _sortListenersOfFixedPriority(listenerID) { + var listeners = this._listenersMap[listenerID]; + if (!listeners) return; + var fixedListeners = listeners.getFixedPriorityListeners(); + if (!fixedListeners || 0 === fixedListeners.length) return; + fixedListeners.sort(this._sortListenersOfFixedPriorityAsc); + var index = 0; + for (var len = fixedListeners.length; index < len; ) { + if (fixedListeners[index]._getFixedPriority() >= 0) break; + ++index; + } + listeners.gt0Index = index; + }, + _sortListenersOfFixedPriorityAsc: function _sortListenersOfFixedPriorityAsc(l1, l2) { + return l1._getFixedPriority() - l2._getFixedPriority(); + }, + _onUpdateListeners: function _onUpdateListeners(listeners) { + var fixedPriorityListeners = listeners.getFixedPriorityListeners(); + var sceneGraphPriorityListeners = listeners.getSceneGraphPriorityListeners(); + var i, selListener, idx, toRemovedListeners = this._toRemovedListeners; + if (sceneGraphPriorityListeners) for (i = sceneGraphPriorityListeners.length - 1; i >= 0; i--) { + selListener = sceneGraphPriorityListeners[i]; + if (!selListener._isRegistered()) { + cc.js.array.removeAt(sceneGraphPriorityListeners, i); + idx = toRemovedListeners.indexOf(selListener); + -1 !== idx && toRemovedListeners.splice(idx, 1); + } + } + if (fixedPriorityListeners) for (i = fixedPriorityListeners.length - 1; i >= 0; i--) { + selListener = fixedPriorityListeners[i]; + if (!selListener._isRegistered()) { + cc.js.array.removeAt(fixedPriorityListeners, i); + idx = toRemovedListeners.indexOf(selListener); + -1 !== idx && toRemovedListeners.splice(idx, 1); + } + } + sceneGraphPriorityListeners && 0 === sceneGraphPriorityListeners.length && listeners.clearSceneGraphListeners(); + fixedPriorityListeners && 0 === fixedPriorityListeners.length && listeners.clearFixedListeners(); + }, + frameUpdateListeners: function frameUpdateListeners() { + var locListenersMap = this._listenersMap, locPriorityDirtyFlagMap = this._priorityDirtyFlagMap; + for (var selKey in locListenersMap) if (locListenersMap[selKey].empty()) { + delete locPriorityDirtyFlagMap[selKey]; + delete locListenersMap[selKey]; + } + var locToAddedListeners = this._toAddedListeners; + if (0 !== locToAddedListeners.length) { + for (var i = 0, len = locToAddedListeners.length; i < len; i++) this._forceAddEventListener(locToAddedListeners[i]); + locToAddedListeners.length = 0; + } + 0 !== this._toRemovedListeners.length && this._cleanToRemovedListeners(); + }, + _updateTouchListeners: function _updateTouchListeners(event) { + var locInDispatch = this._inDispatch; + cc.assertID(locInDispatch > 0, 3508); + if (locInDispatch > 1) return; + var listeners; + listeners = this._listenersMap[ListenerID.TOUCH_ONE_BY_ONE]; + listeners && this._onUpdateListeners(listeners); + listeners = this._listenersMap[ListenerID.TOUCH_ALL_AT_ONCE]; + listeners && this._onUpdateListeners(listeners); + cc.assertID(1 === locInDispatch, 3509); + var locToAddedListeners = this._toAddedListeners; + if (0 !== locToAddedListeners.length) { + for (var i = 0, len = locToAddedListeners.length; i < len; i++) this._forceAddEventListener(locToAddedListeners[i]); + this._toAddedListeners.length = 0; + } + 0 !== this._toRemovedListeners.length && this._cleanToRemovedListeners(); + }, + _cleanToRemovedListeners: function _cleanToRemovedListeners() { + var toRemovedListeners = this._toRemovedListeners; + for (var i = 0; i < toRemovedListeners.length; i++) { + var selListener = toRemovedListeners[i]; + var listeners = this._listenersMap[selListener._getListenerID()]; + if (!listeners) continue; + var idx, fixedPriorityListeners = listeners.getFixedPriorityListeners(), sceneGraphPriorityListeners = listeners.getSceneGraphPriorityListeners(); + if (sceneGraphPriorityListeners) { + idx = sceneGraphPriorityListeners.indexOf(selListener); + -1 !== idx && sceneGraphPriorityListeners.splice(idx, 1); + } + if (fixedPriorityListeners) { + idx = fixedPriorityListeners.indexOf(selListener); + -1 !== idx && fixedPriorityListeners.splice(idx, 1); + } + } + toRemovedListeners.length = 0; + }, + _onTouchEventCallback: function _onTouchEventCallback(listener, argsObj) { + if (!listener._isRegistered()) return false; + var event = argsObj.event, selTouch = event.currentTouch; + event.currentTarget = listener._node; + var isClaimed = false, removedIdx; + var getCode = event.getEventCode(), EventTouch = cc.Event.EventTouch; + if (getCode === EventTouch.BEGAN) { + if (!cc.macro.ENABLE_MULTI_TOUCH && eventManager._currentTouch) { + var node = eventManager._currentTouchListener._node; + if (node && node.activeInHierarchy) return false; + } + if (listener.onTouchBegan) { + isClaimed = listener.onTouchBegan(selTouch, event); + if (isClaimed && listener._registered) { + listener._claimedTouches.push(selTouch); + eventManager._currentTouchListener = listener; + eventManager._currentTouch = selTouch; + } + } + } else if (listener._claimedTouches.length > 0 && -1 !== (removedIdx = listener._claimedTouches.indexOf(selTouch))) { + isClaimed = true; + if (!cc.macro.ENABLE_MULTI_TOUCH && eventManager._currentTouch && eventManager._currentTouch !== selTouch) return false; + if (getCode === EventTouch.MOVED && listener.onTouchMoved) listener.onTouchMoved(selTouch, event); else if (getCode === EventTouch.ENDED) { + listener.onTouchEnded && listener.onTouchEnded(selTouch, event); + listener._registered && listener._claimedTouches.splice(removedIdx, 1); + eventManager._clearCurTouch(); + } else if (getCode === EventTouch.CANCELED) { + listener.onTouchCancelled && listener.onTouchCancelled(selTouch, event); + listener._registered && listener._claimedTouches.splice(removedIdx, 1); + eventManager._clearCurTouch(); + } + } + if (event.isStopped()) { + eventManager._updateTouchListeners(event); + return true; + } + if (isClaimed && listener.swallowTouches) { + argsObj.needsMutableSet && argsObj.touches.splice(selTouch, 1); + return true; + } + return false; + }, + _dispatchTouchEvent: function _dispatchTouchEvent(event) { + this._sortEventListeners(ListenerID.TOUCH_ONE_BY_ONE); + this._sortEventListeners(ListenerID.TOUCH_ALL_AT_ONCE); + var oneByOneListeners = this._getListeners(ListenerID.TOUCH_ONE_BY_ONE); + var allAtOnceListeners = this._getListeners(ListenerID.TOUCH_ALL_AT_ONCE); + if (null === oneByOneListeners && null === allAtOnceListeners) return; + var originalTouches = event.getTouches(), mutableTouches = cc.js.array.copy(originalTouches); + var oneByOneArgsObj = { + event: event, + needsMutableSet: oneByOneListeners && allAtOnceListeners, + touches: mutableTouches, + selTouch: null + }; + if (oneByOneListeners) for (var i = 0; i < originalTouches.length; i++) { + event.currentTouch = originalTouches[i]; + event._propagationStopped = event._propagationImmediateStopped = false; + this._dispatchEventToListeners(oneByOneListeners, this._onTouchEventCallback, oneByOneArgsObj); + } + if (allAtOnceListeners && mutableTouches.length > 0) { + this._dispatchEventToListeners(allAtOnceListeners, this._onTouchesEventCallback, { + event: event, + touches: mutableTouches + }); + if (event.isStopped()) return; + } + this._updateTouchListeners(event); + }, + _onTouchesEventCallback: function _onTouchesEventCallback(listener, callbackParams) { + if (!listener._registered) return false; + var EventTouch = cc.Event.EventTouch, event = callbackParams.event, touches = callbackParams.touches, getCode = event.getEventCode(); + event.currentTarget = listener._node; + getCode === EventTouch.BEGAN && listener.onTouchesBegan ? listener.onTouchesBegan(touches, event) : getCode === EventTouch.MOVED && listener.onTouchesMoved ? listener.onTouchesMoved(touches, event) : getCode === EventTouch.ENDED && listener.onTouchesEnded ? listener.onTouchesEnded(touches, event) : getCode === EventTouch.CANCELED && listener.onTouchesCancelled && listener.onTouchesCancelled(touches, event); + if (event.isStopped()) { + eventManager._updateTouchListeners(event); + return true; + } + return false; + }, + _associateNodeAndEventListener: function _associateNodeAndEventListener(node, listener) { + var listeners = this._nodeListenersMap[node._id]; + if (!listeners) { + listeners = []; + this._nodeListenersMap[node._id] = listeners; + } + listeners.push(listener); + }, + _dissociateNodeAndEventListener: function _dissociateNodeAndEventListener(node, listener) { + var listeners = this._nodeListenersMap[node._id]; + if (listeners) { + cc.js.array.remove(listeners, listener); + 0 === listeners.length && delete this._nodeListenersMap[node._id]; + } + }, + _dispatchEventToListeners: function _dispatchEventToListeners(listeners, onEvent, eventOrArgs) { + var shouldStopPropagation = false; + var fixedPriorityListeners = listeners.getFixedPriorityListeners(); + var sceneGraphPriorityListeners = listeners.getSceneGraphPriorityListeners(); + var i = 0, j, selListener; + if (fixedPriorityListeners && 0 !== fixedPriorityListeners.length) for (;i < listeners.gt0Index; ++i) { + selListener = fixedPriorityListeners[i]; + if (selListener.isEnabled() && !selListener._isPaused() && selListener._isRegistered() && onEvent(selListener, eventOrArgs)) { + shouldStopPropagation = true; + break; + } + } + if (sceneGraphPriorityListeners && !shouldStopPropagation) for (j = 0; j < sceneGraphPriorityListeners.length; j++) { + selListener = sceneGraphPriorityListeners[j]; + if (selListener.isEnabled() && !selListener._isPaused() && selListener._isRegistered() && onEvent(selListener, eventOrArgs)) { + shouldStopPropagation = true; + break; + } + } + if (fixedPriorityListeners && !shouldStopPropagation) for (;i < fixedPriorityListeners.length; ++i) { + selListener = fixedPriorityListeners[i]; + if (selListener.isEnabled() && !selListener._isPaused() && selListener._isRegistered() && onEvent(selListener, eventOrArgs)) { + shouldStopPropagation = true; + break; + } + } + }, + _setDirty: function _setDirty(listenerID, flag) { + var locDirtyFlagMap = this._priorityDirtyFlagMap; + null == locDirtyFlagMap[listenerID] ? locDirtyFlagMap[listenerID] = flag : locDirtyFlagMap[listenerID] = flag | locDirtyFlagMap[listenerID]; + }, + _sortNumberAsc: function _sortNumberAsc(a, b) { + return a - b; + }, + hasEventListener: function hasEventListener(listenerID) { + return !!this._getListeners(listenerID); + }, + addListener: function addListener(listener, nodeOrPriority) { + cc.assertID(listener && nodeOrPriority, 3503); + if (!(cc.js.isNumber(nodeOrPriority) || nodeOrPriority instanceof cc._BaseNode)) { + cc.warnID(3506); + return; + } + if (listener instanceof cc.EventListener) { + if (listener._isRegistered()) { + cc.logID(3505); + return; + } + } else { + cc.assertID(!cc.js.isNumber(nodeOrPriority), 3504); + listener = cc.EventListener.create(listener); + } + if (!listener.checkAvailable()) return; + if (cc.js.isNumber(nodeOrPriority)) { + if (0 === nodeOrPriority) { + cc.logID(3500); + return; + } + listener._setSceneGraphPriority(null); + listener._setFixedPriority(nodeOrPriority); + listener._setRegistered(true); + listener._setPaused(false); + this._addListener(listener); + } else { + listener._setSceneGraphPriority(nodeOrPriority); + listener._setFixedPriority(0); + listener._setRegistered(true); + this._addListener(listener); + } + return listener; + }, + addCustomListener: function addCustomListener(eventName, callback) { + var listener = new cc.EventListener.create({ + event: cc.EventListener.CUSTOM, + eventName: eventName, + callback: callback + }); + this.addListener(listener, 1); + return listener; + }, + removeListener: function removeListener(listener) { + if (null == listener) return; + var isFound, locListener = this._listenersMap; + for (var selKey in locListener) { + var listeners = locListener[selKey]; + var fixedPriorityListeners = listeners.getFixedPriorityListeners(), sceneGraphPriorityListeners = listeners.getSceneGraphPriorityListeners(); + isFound = this._removeListenerInVector(sceneGraphPriorityListeners, listener); + if (isFound) this._setDirty(listener._getListenerID(), this.DIRTY_SCENE_GRAPH_PRIORITY); else { + isFound = this._removeListenerInVector(fixedPriorityListeners, listener); + isFound && this._setDirty(listener._getListenerID(), this.DIRTY_FIXED_PRIORITY); + } + if (listeners.empty()) { + delete this._priorityDirtyFlagMap[listener._getListenerID()]; + delete locListener[selKey]; + } + if (isFound) break; + } + if (!isFound) { + var locToAddedListeners = this._toAddedListeners; + for (var i = locToAddedListeners.length - 1; i >= 0; i--) { + var selListener = locToAddedListeners[i]; + if (selListener === listener) { + cc.js.array.removeAt(locToAddedListeners, i); + selListener._setRegistered(false); + break; + } + } + } + this._currentTouchListener === listener && this._clearCurTouch(); + }, + _clearCurTouch: function _clearCurTouch() { + this._currentTouchListener = null; + this._currentTouch = null; + }, + _removeListenerInCallback: function _removeListenerInCallback(listeners, callback) { + if (null == listeners) return false; + for (var i = listeners.length - 1; i >= 0; i--) { + var selListener = listeners[i]; + if (selListener._onCustomEvent === callback || selListener._onEvent === callback) { + selListener._setRegistered(false); + if (null != selListener._getSceneGraphPriority()) { + this._dissociateNodeAndEventListener(selListener._getSceneGraphPriority(), selListener); + selListener._setSceneGraphPriority(null); + } + 0 === this._inDispatch ? cc.js.array.removeAt(listeners, i) : this._toRemovedListeners.push(selListener); + return true; + } + } + return false; + }, + _removeListenerInVector: function _removeListenerInVector(listeners, listener) { + if (null == listeners) return false; + for (var i = listeners.length - 1; i >= 0; i--) { + var selListener = listeners[i]; + if (selListener === listener) { + selListener._setRegistered(false); + if (null != selListener._getSceneGraphPriority()) { + this._dissociateNodeAndEventListener(selListener._getSceneGraphPriority(), selListener); + selListener._setSceneGraphPriority(null); + } + 0 === this._inDispatch ? cc.js.array.removeAt(listeners, i) : this._toRemovedListeners.push(selListener); + return true; + } + } + return false; + }, + removeListeners: function removeListeners(listenerType, recursive) { + var i, _t = this; + if (!(cc.js.isNumber(listenerType) || listenerType instanceof cc._BaseNode)) { + cc.warnID(3506); + return; + } + if (void 0 !== listenerType._id) { + var listeners = _t._nodeListenersMap[listenerType._id], i; + if (listeners) { + var listenersCopy = cc.js.array.copy(listeners); + for (i = 0; i < listenersCopy.length; i++) _t.removeListener(listenersCopy[i]); + delete _t._nodeListenersMap[listenerType._id]; + } + var locToAddedListeners = _t._toAddedListeners; + for (i = 0; i < locToAddedListeners.length; ) { + var listener = locToAddedListeners[i]; + if (listener._getSceneGraphPriority() === listenerType) { + listener._setSceneGraphPriority(null); + listener._setRegistered(false); + locToAddedListeners.splice(i, 1); + } else ++i; + } + if (true === recursive) { + var locChildren = listenerType.children, len; + for (i = 0, len = locChildren.length; i < len; i++) _t.removeListeners(locChildren[i], true); + } + } else listenerType === cc.EventListener.TOUCH_ONE_BY_ONE ? _t._removeListenersForListenerID(ListenerID.TOUCH_ONE_BY_ONE) : listenerType === cc.EventListener.TOUCH_ALL_AT_ONCE ? _t._removeListenersForListenerID(ListenerID.TOUCH_ALL_AT_ONCE) : listenerType === cc.EventListener.MOUSE ? _t._removeListenersForListenerID(ListenerID.MOUSE) : listenerType === cc.EventListener.ACCELERATION ? _t._removeListenersForListenerID(ListenerID.ACCELERATION) : listenerType === cc.EventListener.KEYBOARD ? _t._removeListenersForListenerID(ListenerID.KEYBOARD) : cc.logID(3501); + }, + removeCustomListeners: function removeCustomListeners(customEventName) { + this._removeListenersForListenerID(customEventName); + }, + removeAllListeners: function removeAllListeners() { + var locListeners = this._listenersMap, locInternalCustomEventIDs = this._internalCustomListenerIDs; + for (var selKey in locListeners) -1 === locInternalCustomEventIDs.indexOf(selKey) && this._removeListenersForListenerID(selKey); + }, + setPriority: function setPriority(listener, fixedPriority) { + if (null == listener) return; + var locListeners = this._listenersMap; + for (var selKey in locListeners) { + var selListeners = locListeners[selKey]; + var fixedPriorityListeners = selListeners.getFixedPriorityListeners(); + if (fixedPriorityListeners) { + var found = fixedPriorityListeners.indexOf(listener); + if (-1 !== found) { + null != listener._getSceneGraphPriority() && cc.logID(3502); + if (listener._getFixedPriority() !== fixedPriority) { + listener._setFixedPriority(fixedPriority); + this._setDirty(listener._getListenerID(), this.DIRTY_FIXED_PRIORITY); + } + return; + } + } + } + }, + setEnabled: function setEnabled(enabled) { + this._isEnabled = enabled; + }, + isEnabled: function isEnabled() { + return this._isEnabled; + }, + dispatchEvent: function dispatchEvent(event) { + if (!this._isEnabled) return; + this._updateDirtyFlagForSceneGraph(); + this._inDispatch++; + if (!event || !event.getType) { + cc.errorID(3511); + return; + } + if (event.getType().startsWith(cc.Event.TOUCH)) { + this._dispatchTouchEvent(event); + this._inDispatch--; + return; + } + var listenerID = __getListenerID(event); + this._sortEventListeners(listenerID); + var selListeners = this._listenersMap[listenerID]; + if (null != selListeners) { + this._dispatchEventToListeners(selListeners, this._onListenerCallback, event); + this._onUpdateListeners(selListeners); + } + this._inDispatch--; + }, + _onListenerCallback: function _onListenerCallback(listener, event) { + event.currentTarget = listener._target; + listener._onEvent(event); + return event.isStopped(); + }, + dispatchCustomEvent: function dispatchCustomEvent(eventName, optionalUserData) { + var ev = new cc.Event.EventCustom(eventName); + ev.setUserData(optionalUserData); + this.dispatchEvent(ev); + } + }; + js.get(cc, "eventManager", (function() { + cc.errorID(1405, "cc.eventManager", "cc.EventTarget or cc.systemEvent"); + return eventManager; + })); + module.exports = cc.internal.eventManager = eventManager; + }), { + "../platform/js": 142, + "./CCEventListener": 109 + } ], + 111: [ (function(require, module, exports) { + "use strict"; + cc.Touch = function(x, y, id) { + this._lastModified = 0; + this.setTouchInfo(id, x, y); + }; + cc.Touch.prototype = { + constructor: cc.Touch, + getLocation: function getLocation() { + return cc.v2(this._point.x, this._point.y); + }, + getLocationX: function getLocationX() { + return this._point.x; + }, + getLocationY: function getLocationY() { + return this._point.y; + }, + getPreviousLocation: function getPreviousLocation() { + return cc.v2(this._prevPoint.x, this._prevPoint.y); + }, + getStartLocation: function getStartLocation() { + return cc.v2(this._startPoint.x, this._startPoint.y); + }, + getDelta: function getDelta() { + return this._point.sub(this._prevPoint); + }, + getLocationInView: function getLocationInView() { + return cc.v2(this._point.x, cc.view._designResolutionSize.height - this._point.y); + }, + getPreviousLocationInView: function getPreviousLocationInView() { + return cc.v2(this._prevPoint.x, cc.view._designResolutionSize.height - this._prevPoint.y); + }, + getStartLocationInView: function getStartLocationInView() { + return cc.v2(this._startPoint.x, cc.view._designResolutionSize.height - this._startPoint.y); + }, + getID: function getID() { + return this._id; + }, + setTouchInfo: function setTouchInfo(id, x, y) { + this._prevPoint = this._point; + this._point = cc.v2(x || 0, y || 0); + this._id = id; + if (!this._startPointCaptured) { + this._startPoint = cc.v2(this._point); + cc.view._convertPointWithScale(this._startPoint); + this._startPointCaptured = true; + } + }, + _setPoint: function _setPoint(x, y) { + if (void 0 === y) { + this._point.x = x.x; + this._point.y = x.y; + } else { + this._point.x = x; + this._point.y = y; + } + }, + _setPrevPoint: function _setPrevPoint(x, y) { + this._prevPoint = void 0 === y ? cc.v2(x.x, x.y) : cc.v2(x || 0, y || 0); + } + }; + }), {} ], + 112: [ (function(require, module, exports) { + "use strict"; + require("./CCEvent"); + require("./CCTouch"); + require("./CCEventListener"); + var eventManager = require("./CCEventManager"); + module.exports = eventManager; + false; + }), { + "./CCEvent": 108, + "./CCEventListener": 109, + "./CCEventManager": 110, + "./CCTouch": 111 + } ], + 113: [ (function(require, module, exports) { + "use strict"; + var js = cc.js; + var CallbacksInvoker = require("../platform/callbacks-invoker"); + function EventListeners() { + CallbacksInvoker.call(this); + } + js.extend(EventListeners, CallbacksInvoker); + EventListeners.prototype.emit = function(event, captureListeners) { + var key = event.type; + var list = this._callbackTable[key]; + if (list) { + var rootInvoker = !list.isInvoking; + list.isInvoking = true; + var infos = list.callbackInfos; + for (var i = 0, len = infos.length; i < len; ++i) { + var info = infos[i]; + if (info && info.callback) { + info.callback.call(info.target, event, captureListeners); + if (event._propagationImmediateStopped) break; + } + } + if (rootInvoker) { + list.isInvoking = false; + list.containCanceled && list.purgeCanceled(); + } + } + }; + module.exports = EventListeners; + false; + }), { + "../platform/callbacks-invoker": 134 + } ], + 114: [ (function(require, module, exports) { + "use strict"; + var js = require("../platform/js"); + var CallbacksInvoker = require("../platform/callbacks-invoker"); + var fastRemove = js.array.fastRemove; + function EventTarget() { + CallbacksInvoker.call(this); + } + js.extend(EventTarget, CallbacksInvoker); + var proto = EventTarget.prototype; + proto.__on = proto.on; + proto.on = function(type, callback, target, once) { + if (!callback) { + cc.errorID(6800); + return; + } + if (!this.hasEventListener(type, callback, target)) { + this.__on(type, callback, target, once); + target && target.__eventTargets && target.__eventTargets.push(this); + } + return callback; + }; + proto.__off = proto.off; + proto.off = function(type, callback, target) { + if (callback) { + this.__off(type, callback, target); + target && target.__eventTargets && fastRemove(target.__eventTargets, this); + } else { + var list = this._callbackTable[type]; + if (!list) return; + var infos = list.callbackInfos; + for (var i = 0; i < infos.length; ++i) { + var _target = infos[i] && infos[i].target; + _target && _target.__eventTargets && fastRemove(_target.__eventTargets, this); + } + this.removeAll(type); + } + }; + proto.targetOff = function(target) { + this.removeAll(target); + target && target.__eventTargets && fastRemove(target.__eventTargets, this); + }; + proto.once = function(type, callback, target) { + this.on(type, callback, target, true); + }; + proto.dispatchEvent = function(event) { + this.emit(event.type, event); + }; + proto.clear = function() { + for (var key in this._callbackTable) { + var list = this._callbackTable[key]; + var infos = list.callbackInfos; + for (var i = infos.length - 1; i >= 0; i--) { + var info = infos[i]; + info && this.off(key, info.callback, info.target); + } + } + }; + cc.EventTarget = module.exports = EventTarget; + }), { + "../platform/callbacks-invoker": 134, + "../platform/js": 142 + } ], + 115: [ (function(require, module, exports) { + "use strict"; + var js = require("../platform/js"); + cc.Event = function(type, bubbles) { + this.type = type; + this.bubbles = !!bubbles; + this.target = null; + this.currentTarget = null; + this.eventPhase = 0; + this._propagationStopped = false; + this._propagationImmediateStopped = false; + }; + cc.Event.prototype = { + constructor: cc.Event, + unuse: function unuse() { + this.type = cc.Event.NO_TYPE; + this.target = null; + this.currentTarget = null; + this.eventPhase = cc.Event.NONE; + this._propagationStopped = false; + this._propagationImmediateStopped = false; + }, + reuse: function reuse(type, bubbles) { + this.type = type; + this.bubbles = bubbles || false; + }, + stopPropagation: function stopPropagation() { + this._propagationStopped = true; + }, + stopPropagationImmediate: function stopPropagationImmediate() { + this._propagationImmediateStopped = true; + }, + isStopped: function isStopped() { + return this._propagationStopped || this._propagationImmediateStopped; + }, + getCurrentTarget: function getCurrentTarget() { + return this.currentTarget; + }, + getType: function getType() { + return this.type; + } + }; + cc.Event.NO_TYPE = "no_type"; + cc.Event.TOUCH = "touch"; + cc.Event.MOUSE = "mouse"; + cc.Event.KEYBOARD = "keyboard"; + cc.Event.ACCELERATION = "acceleration"; + cc.Event.NONE = 0; + cc.Event.CAPTURING_PHASE = 1; + cc.Event.AT_TARGET = 2; + cc.Event.BUBBLING_PHASE = 3; + var EventCustom = function EventCustom(type, bubbles) { + cc.Event.call(this, type, bubbles); + this.detail = null; + }; + js.extend(EventCustom, cc.Event); + EventCustom.prototype.reset = EventCustom; + EventCustom.prototype.setUserData = function(data) { + this.detail = data; + }; + EventCustom.prototype.getUserData = function() { + return this.detail; + }; + EventCustom.prototype.getEventName = cc.Event.prototype.getType; + var MAX_POOL_SIZE = 10; + var _eventPool = new js.Pool(MAX_POOL_SIZE); + EventCustom.put = function(event) { + _eventPool.put(event); + }; + EventCustom.get = function(type, bubbles) { + var event = _eventPool._get(); + event ? event.reset(type, bubbles) : event = new EventCustom(type, bubbles); + return event; + }; + cc.Event.EventCustom = EventCustom; + module.exports = cc.Event; + }), { + "../platform/js": 142 + } ], + 116: [ (function(require, module, exports) { + "use strict"; + require("./event"); + require("./event-listeners"); + require("./event-target"); + require("./system-event"); + }), { + "./event": 115, + "./event-listeners": 113, + "./event-target": 114, + "./system-event": 117 + } ], + 117: [ (function(require, module, exports) { + "use strict"; + var EventTarget = require("../event/event-target"); + var eventManager = require("../event-manager"); + var inputManger = require("../platform/CCInputManager"); + var EventType = cc.Enum({ + KEY_DOWN: "keydown", + KEY_UP: "keyup", + DEVICEMOTION: "devicemotion" + }); + var keyboardListener = null; + var accelerationListener = null; + var SystemEvent = cc.Class({ + name: "SystemEvent", + extends: EventTarget, + statics: { + EventType: EventType + }, + setAccelerometerEnabled: function setAccelerometerEnabled(isEnable) { + false; + isEnable && window.DeviceMotionEvent && "function" === typeof DeviceMotionEvent.requestPermission ? DeviceMotionEvent.requestPermission().then((function(response) { + console.log("Device Motion Event request permission: " + response); + inputManger.setAccelerometerEnabled("granted" === response); + })) : inputManger.setAccelerometerEnabled(isEnable); + }, + setAccelerometerInterval: function setAccelerometerInterval(interval) { + false; + inputManger.setAccelerometerInterval(interval); + }, + on: function on(type, callback, target, once) { + false; + this._super(type, callback, target, once); + if (type === EventType.KEY_DOWN || type === EventType.KEY_UP) { + keyboardListener || (keyboardListener = cc.EventListener.create({ + event: cc.EventListener.KEYBOARD, + onKeyPressed: function onKeyPressed(keyCode, event) { + event.type = EventType.KEY_DOWN; + cc.systemEvent.dispatchEvent(event); + }, + onKeyReleased: function onKeyReleased(keyCode, event) { + event.type = EventType.KEY_UP; + cc.systemEvent.dispatchEvent(event); + } + })); + eventManager.hasEventListener(cc.EventListener.ListenerID.KEYBOARD) || eventManager.addListener(keyboardListener, 1); + } + if (type === EventType.DEVICEMOTION) { + accelerationListener || (accelerationListener = cc.EventListener.create({ + event: cc.EventListener.ACCELERATION, + callback: function callback(acc, event) { + event.type = EventType.DEVICEMOTION; + cc.systemEvent.dispatchEvent(event); + } + })); + eventManager.hasEventListener(cc.EventListener.ListenerID.ACCELERATION) || eventManager.addListener(accelerationListener, 1); + } + }, + off: function off(type, callback, target) { + false; + this._super(type, callback, target); + if (keyboardListener && (type === EventType.KEY_DOWN || type === EventType.KEY_UP)) { + var hasKeyDownEventListener = this.hasEventListener(EventType.KEY_DOWN); + var hasKeyUpEventListener = this.hasEventListener(EventType.KEY_UP); + hasKeyDownEventListener || hasKeyUpEventListener || eventManager.removeListener(keyboardListener); + } + accelerationListener && type === EventType.DEVICEMOTION && eventManager.removeListener(accelerationListener); + } + }); + cc.SystemEvent = module.exports = SystemEvent; + cc.systemEvent = new cc.SystemEvent(); + }), { + "../event-manager": 112, + "../event/event-target": 114, + "../platform/CCInputManager": 125 + } ], + 118: [ (function(require, module, exports) { + "use strict"; + require("./graphics"); + }), { + "./graphics": void 0 + } ], + 119: [ (function(require, module, exports) { + "use strict"; + require("./platform"); + require("./assets"); + true; + require("./CCNode"); + require("./CCPrivateNode"); + require("./CCScene"); + require("./components"); + require("./graphics"); + require("./collider"); + require("./collider/CCIntersection"); + require("./physics"); + require("./camera/CCCamera"); + require("./geom-utils"); + require("./sp"); + require("./mesh"); + require("./3d"); + require("./base-ui/CCWidgetManager"); + }), { + "./3d": void 0, + "./CCNode": 24, + "./CCPrivateNode": 25, + "./CCScene": 26, + "./assets": 73, + "./base-ui/CCWidgetManager": 84, + "./camera/CCCamera": 85, + "./collider": void 0, + "./collider/CCIntersection": void 0, + "./components": 106, + "./geom-utils": void 0, + "./graphics": 118, + "./mesh": void 0, + "./physics": void 0, + "./platform": 139, + "./sp": 191 + } ], + 120: [ (function(require, module, exports) { + "use strict"; + var CompScheduler = require("./component-scheduler"); + var Flags = require("./platform/CCObject").Flags; + var js = require("./platform/js"); + var callerFunctor = false; + var MAX_POOL_SIZE = 4; + var IsPreloadStarted = Flags.IsPreloadStarted; + var IsOnLoadStarted = Flags.IsOnLoadStarted; + var IsOnLoadCalled = Flags.IsOnLoadCalled; + var Deactivating = Flags.Deactivating; + var callPreloadInTryCatch = false; + var callOnLoadInTryCatch = false; + var callOnDestroyInTryCatch = false; + var callOnFocusInTryCatch = false; + var callOnLostFocusInTryCatch = false; + var UnsortedInvoker = cc.Class({ + extends: CompScheduler.LifeCycleInvoker, + add: function add(comp) { + this._zero.array.push(comp); + }, + remove: function remove(comp) { + this._zero.fastRemove(comp); + }, + cancelInactive: function cancelInactive(flagToClear) { + CompScheduler.LifeCycleInvoker.stableRemoveInactive(this._zero, flagToClear); + }, + invoke: function invoke() { + this._invoke(this._zero); + this._zero.array.length = 0; + } + }); + var invokePreload = CompScheduler.createInvokeImpl("c.__preload();"); + var invokeOnLoad = CompScheduler.createInvokeImpl("c.onLoad();c._objFlags|=" + IsOnLoadCalled, false, IsOnLoadCalled); + var activateTasksPool = new js.Pool(MAX_POOL_SIZE); + activateTasksPool.get = function getActivateTask() { + var task = this._get() || { + preload: new UnsortedInvoker(invokePreload), + onLoad: new CompScheduler.OneOffInvoker(invokeOnLoad), + onEnable: new CompScheduler.OneOffInvoker(CompScheduler.invokeOnEnable) + }; + task.preload._zero.i = -1; + var invoker = task.onLoad; + invoker._zero.i = -1; + invoker._neg.i = -1; + invoker._pos.i = -1; + invoker = task.onEnable; + invoker._zero.i = -1; + invoker._neg.i = -1; + invoker._pos.i = -1; + return task; + }; + function _componentCorrupted(node, comp, index) { + false; + comp ? node._removeComponent(comp) : js.array.removeAt(node._components, index); + } + function _onLoadInEditor(comp) { + if (comp.onLoad && !cc.engine._isPlaying) { + var focused = Editor.Selection.curActivate("node") === comp.node.uuid; + focused ? comp.onFocusInEditor && callOnFocusInTryCatch(comp) : comp.onLostFocusInEditor && callOnLostFocusInTryCatch(comp); + } + true; + _Scene.AssetsWatcher.start(comp); + } + function ctor() { + this._activatingStack = []; + } + var NodeActivator = cc.Class({ + ctor: ctor, + reset: ctor, + _activateNodeRecursively: function _activateNodeRecursively(node, preloadInvoker, onLoadInvoker, onEnableInvoker) { + if (node._objFlags & Deactivating) { + cc.errorID(3816, node.name); + return; + } + node._activeInHierarchy = true; + var originCount = node._components.length; + for (var i = 0; i < originCount; ++i) { + var component = node._components[i]; + if (component instanceof cc.Component) this.activateComp(component, preloadInvoker, onLoadInvoker, onEnableInvoker); else { + _componentCorrupted(node, component, i); + --i; + --originCount; + } + } + node._childArrivalOrder = node._children.length; + for (var _i = 0, len = node._children.length; _i < len; ++_i) { + var child = node._children[_i]; + child._localZOrder = 4294901760 & child._localZOrder | _i + 1; + child._active && this._activateNodeRecursively(child, preloadInvoker, onLoadInvoker, onEnableInvoker); + } + node._onPostActivated(true); + }, + _deactivateNodeRecursively: function _deactivateNodeRecursively(node) { + false; + node._objFlags |= Deactivating; + node._activeInHierarchy = false; + var originCount = node._components.length; + for (var c = 0; c < originCount; ++c) { + var component = node._components[c]; + if (component._enabled) { + cc.director._compScheduler.disableComp(component); + if (node._activeInHierarchy) { + node._objFlags &= ~Deactivating; + return; + } + } + } + for (var i = 0, len = node._children.length; i < len; ++i) { + var child = node._children[i]; + if (child._activeInHierarchy) { + this._deactivateNodeRecursively(child); + if (node._activeInHierarchy) { + node._objFlags &= ~Deactivating; + return; + } + } + } + node._onPostActivated(false); + node._objFlags &= ~Deactivating; + }, + activateNode: function activateNode(node, active) { + if (active) { + var task = activateTasksPool.get(); + this._activatingStack.push(task); + this._activateNodeRecursively(node, task.preload, task.onLoad, task.onEnable); + task.preload.invoke(); + task.onLoad.invoke(); + task.onEnable.invoke(); + this._activatingStack.pop(); + activateTasksPool.put(task); + } else { + this._deactivateNodeRecursively(node); + var stack = this._activatingStack; + for (var i = 0; i < stack.length; i++) { + var lastTask = stack[i]; + lastTask.preload.cancelInactive(IsPreloadStarted); + lastTask.onLoad.cancelInactive(IsOnLoadStarted); + lastTask.onEnable.cancelInactive(); + } + } + node.emit("active-in-hierarchy-changed", node); + }, + activateComp: function(comp, preloadInvoker, onLoadInvoker, onEnableInvoker) { + if (!cc.isValid(comp, true)) return; + if (!(comp._objFlags & IsPreloadStarted)) { + comp._objFlags |= IsPreloadStarted; + comp.__preload && (preloadInvoker ? preloadInvoker.add(comp) : comp.__preload()); + } + if (!(comp._objFlags & IsOnLoadStarted)) { + comp._objFlags |= IsOnLoadStarted; + if (comp.onLoad) if (onLoadInvoker) onLoadInvoker.add(comp); else { + comp.onLoad(); + comp._objFlags |= IsOnLoadCalled; + } else comp._objFlags |= IsOnLoadCalled; + } + if (comp._enabled) { + var deactivatedOnLoading = !comp.node._activeInHierarchy; + if (deactivatedOnLoading) return; + cc.director._compScheduler.enableComp(comp, onEnableInvoker); + } + }, + destroyComp: function(comp) { + cc.director._compScheduler.disableComp(comp); + comp.onDestroy && comp._objFlags & IsOnLoadCalled && comp.onDestroy(); + }, + resetComp: false + }); + module.exports = NodeActivator; + }), { + "./component-scheduler": 86, + "./platform/CCObject": 127, + "./platform/js": 142, + "./utils/misc": 205 + } ], + 121: [ (function(require, module, exports) { + "use strict"; + var js = require("./js"); + var Enum = require("./CCEnum"); + var utils = require("./utils"); + var _isPlainEmptyObj_DEV = utils.isPlainEmptyObj_DEV; + var _cloneable_DEV = utils.cloneable_DEV; + var Attr = require("./attribute"); + var DELIMETER = Attr.DELIMETER; + var preprocess = require("./preprocess-class"); + require("./requiring-frame"); + var BUILTIN_ENTRIES = [ "name", "extends", "mixins", "ctor", "__ctor__", "properties", "statics", "editor", "__ES6__" ]; + var INVALID_STATICS_DEV = false; + function pushUnique(array, item) { + array.indexOf(item) < 0 && array.push(item); + } + var deferredInitializer = { + datas: null, + push: function push(data) { + if (this.datas) this.datas.push(data); else { + this.datas = [ data ]; + var self = this; + setTimeout((function() { + self.init(); + }), 0); + } + }, + init: function init() { + var datas = this.datas; + if (datas) { + for (var i = 0; i < datas.length; ++i) { + var data = datas[i]; + var cls = data.cls; + var properties = data.props; + "function" === typeof properties && (properties = properties()); + var name = js.getClassName(cls); + properties ? declareProperties(cls, name, properties, cls.$super, data.mixins) : cc.errorID(3633, name); + } + this.datas = null; + } + } + }; + function appendProp(cls, name) { + false; + pushUnique(cls.__props__, name); + } + function defineProp(cls, className, propName, val, es6) { + var defaultValue = val["default"]; + false; + Attr.setClassAttr(cls, propName, "default", defaultValue); + appendProp(cls, propName); + parseAttributes(cls, val, className, propName, false); + var i; + false, false; + } + function defineGetSet(cls, name, propName, val, es6) { + var getter = val.get; + var setter = val.set; + var proto = cls.prototype; + var d = Object.getOwnPropertyDescriptor(proto, propName); + var setterUndefined = !d; + if (getter) { + false; + parseAttributes(cls, val, name, propName, true); + false, false; + Attr.setClassAttr(cls, propName, "serializable", false); + false; + es6 || js.get(proto, propName, getter, setterUndefined, setterUndefined); + false, false; + } + if (setter) { + if (!es6) { + false; + js.set(proto, propName, setter, setterUndefined, setterUndefined); + } + false, false; + } + } + function getDefault(defaultVal) { + if ("function" === typeof defaultVal) { + false; + return defaultVal(); + } + return defaultVal; + } + function mixinWithInherited(dest, src, filter) { + for (var prop in src) dest.hasOwnProperty(prop) || filter && !filter(prop) || Object.defineProperty(dest, prop, js.getPropertyDescriptor(src, prop)); + } + function doDefine(className, baseClass, mixins, options) { + var shouldAddProtoCtor; + var __ctor__ = options.__ctor__; + var ctor = options.ctor; + var __es6__ = options.__ES6__; + var ctorToUse; + false; + var ctors; + var fireClass; + if (__es6__) { + ctors = [ ctor ]; + fireClass = ctor; + } else { + ctors = __ctor__ ? [ __ctor__ ] : _getAllCtors(baseClass, mixins, options); + fireClass = _createCtor(ctors, baseClass, className, options); + js.value(fireClass, "extend", (function(options) { + options["extends"] = this; + return CCClass(options); + }), true); + } + js.value(fireClass, "__ctors__", ctors.length > 0 ? ctors : null, true); + var prototype = fireClass.prototype; + if (baseClass) { + if (!__es6__) { + js.extend(fireClass, baseClass); + prototype = fireClass.prototype; + } + fireClass.$super = baseClass; + false; + } + if (mixins) { + for (var m = mixins.length - 1; m >= 0; m--) { + var mixin = mixins[m]; + mixinWithInherited(prototype, mixin.prototype); + mixinWithInherited(fireClass, mixin, (function(prop) { + return mixin.hasOwnProperty(prop) && true; + })); + CCClass._isCCClass(mixin) && mixinWithInherited(Attr.getClassAttrs(fireClass), Attr.getClassAttrs(mixin)); + } + prototype.constructor = fireClass; + } + __es6__ || (prototype.__initProps__ = compileProps); + js.setClassName(className, fireClass); + return fireClass; + } + function define(className, baseClass, mixins, options) { + var Component = cc.Component; + var frame = cc._RF.peek(); + if (frame && js.isChildClassOf(baseClass, Component)) { + if (js.isChildClassOf(frame.cls, Component)) { + cc.errorID(3615); + return null; + } + false; + className = className || frame.script; + } + var cls = doDefine(className, baseClass, mixins, options); + if (frame) if (js.isChildClassOf(baseClass, Component)) { + var uuid = frame.uuid; + if (uuid) { + js._setClassId(uuid, cls); + false; + } + frame.cls = cls; + } else js.isChildClassOf(frame.cls, Component) || (frame.cls = cls); + return cls; + } + function normalizeClassName_DEV(className) { + var DefaultName = "CCClass"; + if (className) { + className = className.replace(/^[^$A-Za-z_]/, "_").replace(/[^0-9A-Za-z_$]/g, "_"); + try { + Function("function " + className + "(){}")(); + return className; + } catch (e) {} + } + return DefaultName; + } + function getNewValueTypeCodeJit(value) { + var clsName = js.getClassName(value); + var type = value.constructor; + var res = "new " + clsName + "("; + for (var i = 0; i < type.__props__.length; i++) { + var prop = type.__props__[i]; + var propVal = value[prop]; + false; + res += propVal; + i < type.__props__.length - 1 && (res += ","); + } + return res + ")"; + } + function escapeForJS(s) { + return JSON.stringify(s).replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029"); + } + function getInitPropsJit(attrs, propList) { + var F = []; + var func = ""; + for (var i = 0; i < propList.length; i++) { + var prop = propList[i]; + var attrKey = prop + DELIMETER + "default"; + if (attrKey in attrs) { + var statement; + statement = IDENTIFIER_RE.test(prop) ? "this." + prop + "=" : "this[" + escapeForJS(prop) + "]="; + var expression; + var def = attrs[attrKey]; + if ("object" === typeof def && def) expression = def instanceof cc.ValueType ? getNewValueTypeCodeJit(def) : Array.isArray(def) ? "[]" : "{}"; else if ("function" === typeof def) { + var index = F.length; + F.push(def); + expression = "F[" + index + "]()"; + false; + } else expression = "string" === typeof def ? escapeForJS(def) : def; + statement = statement + expression + ";\n"; + func += statement; + } + } + var initProps; + initProps = 0 === F.length ? Function(func) : Function("F", "return (function(){\n" + func + "})")(F); + return initProps; + } + function getInitProps(attrs, propList) { + var props = null; + var simpleEnd = 0; + var valueTypeEnd = 0; + (function() { + var simples = null; + var valueTypes = null; + var advanceds = null; + for (var i = 0; i < propList.length; ++i) { + var prop = propList[i]; + var attrKey = prop + DELIMETER + "default"; + if (attrKey in attrs) { + var def = attrs[attrKey]; + if ("object" === typeof def && def || "function" === typeof def) if (def instanceof cc.ValueType) { + valueTypes || (valueTypes = []); + valueTypes.push(prop, def); + } else { + advanceds || (advanceds = []); + advanceds.push(prop, def); + } else { + simples || (simples = []); + simples.push(prop, def); + } + } + } + simpleEnd = simples ? simples.length : 0; + valueTypeEnd = simpleEnd + (valueTypes ? valueTypes.length : 0); + var totalLength = valueTypeEnd + (advanceds ? advanceds.length : 0); + props = new Array(totalLength); + for (var _i = 0; _i < simpleEnd; ++_i) props[_i] = simples[_i]; + for (var _i2 = simpleEnd; _i2 < valueTypeEnd; ++_i2) props[_i2] = valueTypes[_i2 - simpleEnd]; + for (var _i3 = valueTypeEnd; _i3 < totalLength; ++_i3) props[_i3] = advanceds[_i3 - valueTypeEnd]; + })(); + return function() { + var i = 0; + for (;i < simpleEnd; i += 2) this[props[i]] = props[i + 1]; + for (;i < valueTypeEnd; i += 2) this[props[i]] = props[i + 1].clone(); + for (;i < props.length; i += 2) { + var def = props[i + 1]; + if (Array.isArray(def)) this[props[i]] = []; else { + var value; + if ("object" === typeof def) value = {}; else { + false; + value = def(); + } + this[props[i]] = value; + } + } + }; + } + var IDENTIFIER_RE = /^[A-Za-z_$][0-9A-Za-z_$]*$/; + function compileProps(actualClass) { + var attrs = Attr.getClassAttrs(actualClass); + var propList = actualClass.__props__; + if (null === propList) { + deferredInitializer.init(); + propList = actualClass.__props__; + } + var initProps = getInitPropsJit(attrs, propList); + actualClass.prototype.__initProps__ = initProps; + initProps.call(this); + } + var _createCtor = function(ctors, baseClass, className, options) { + var superCallBounded = baseClass && boundSuperCalls(baseClass, options, className); + var ctorName = "CCClass"; + var body = "return function " + ctorName + "(){\n"; + superCallBounded && (body += "this._super=null;\n"); + body += "this.__initProps__(" + ctorName + ");\n"; + var ctorLen = ctors.length; + if (ctorLen > 0) { + var useTryCatch = false; + useTryCatch && (body += "try{\n"); + var SNIPPET = "].apply(this,arguments);\n"; + if (1 === ctorLen) body += ctorName + ".__ctors__[0" + SNIPPET; else { + body += "var cs=" + ctorName + ".__ctors__;\n"; + for (var i = 0; i < ctorLen; i++) body += "cs[" + i + SNIPPET; + } + useTryCatch && (body += "}catch(e){\ncc._throw(e);\n}\n"); + } + body += "}"; + return Function(body)(); + }; + function _validateCtor_DEV(ctor, baseClass, className, options) { + var originCtor; + false; + !(ctor.length > 0) || className && className.startsWith("cc.") || cc.warnID(3617, className); + return ctor; + } + function _getAllCtors(baseClass, mixins, options) { + function getCtors(cls) { + return CCClass._isCCClass(cls) ? cls.__ctors__ || [] : [ cls ]; + } + var ctors = []; + var baseOrMixins = [ baseClass ].concat(mixins); + for (var b = 0; b < baseOrMixins.length; b++) { + var baseOrMixin = baseOrMixins[b]; + if (baseOrMixin) { + var baseCtors = getCtors(baseOrMixin); + for (var c = 0; c < baseCtors.length; c++) pushUnique(ctors, baseCtors[c]); + } + } + var ctor = options.ctor; + ctor && ctors.push(ctor); + return ctors; + } + var SuperCallReg = /xyz/.test((function() { + xyz; + })) ? /\b\._super\b/ : /.*/; + var SuperCallRegStrict = /xyz/.test((function() { + xyz; + })) ? /this\._super\s*\(/ : /(NONE){99}/; + function boundSuperCalls(baseClass, options, className) { + var hasSuperCall = false; + for (var funcName in options) { + if (BUILTIN_ENTRIES.indexOf(funcName) >= 0) continue; + var func = options[funcName]; + if ("function" !== typeof func) continue; + var pd = js.getPropertyDescriptor(baseClass.prototype, funcName); + if (pd) { + var superFunc = pd.value; + if ("function" === typeof superFunc) { + if (SuperCallReg.test(func)) { + hasSuperCall = true; + options[funcName] = (function(superFunc, func) { + return function() { + var tmp = this._super; + this._super = superFunc; + var ret = func.apply(this, arguments); + this._super = tmp; + return ret; + }; + })(superFunc, func); + } + continue; + } + } + false; + } + return hasSuperCall; + } + function declareProperties(cls, className, properties, baseClass, mixins, es6) { + cls.__props__ = []; + baseClass && baseClass.__props__ && (cls.__props__ = baseClass.__props__.slice()); + if (mixins) for (var m = 0; m < mixins.length; ++m) { + var mixin = mixins[m]; + mixin.__props__ && (cls.__props__ = cls.__props__.concat(mixin.__props__.filter((function(x) { + return cls.__props__.indexOf(x) < 0; + })))); + } + if (properties) { + preprocess.preprocessAttrs(properties, className, cls, es6); + for (var propName in properties) { + var val = properties[propName]; + "default" in val ? defineProp(cls, className, propName, val, es6) : defineGetSet(cls, className, propName, val, es6); + } + } + var attrs = Attr.getClassAttrs(cls); + cls.__values__ = cls.__props__.filter((function(prop) { + return false !== attrs[prop + DELIMETER + "serializable"]; + })); + } + function CCClass(options) { + options = options || {}; + var name = options.name; + var base = options["extends"]; + var mixins = options.mixins; + var cls = define(name, base, mixins, options); + name || (name = cc.js.getClassName(cls)); + cls._sealed = true; + base && (base._sealed = false); + var properties = options.properties; + if ("function" === typeof properties || base && null === base.__props__ || mixins && mixins.some((function(x) { + return null === x.__props__; + }))) { + false; + deferredInitializer.push({ + cls: cls, + props: properties, + mixins: mixins + }); + cls.__props__ = cls.__values__ = null; + } else declareProperties(cls, name, properties, base, options.mixins, options.__ES6__); + var statics = options.statics; + if (statics) { + var staticPropName; + false; + for (staticPropName in statics) cls[staticPropName] = statics[staticPropName]; + } + for (var funcName in options) { + if (BUILTIN_ENTRIES.indexOf(funcName) >= 0) continue; + var func = options[funcName]; + if (!preprocess.validateMethodWithProps(func, funcName, name, cls, base)) continue; + js.value(cls.prototype, funcName, func, true, true); + } + var editor = options.editor; + editor && cc.Component._registerEditorProps(cls, editor); + return cls; + } + CCClass._isCCClass = function(constructor) { + return constructor && constructor.hasOwnProperty("__ctors__"); + }; + CCClass._fastDefine = function(className, constructor, serializableFields) { + js.setClassName(className, constructor); + var props = constructor.__props__ = constructor.__values__ = Object.keys(serializableFields); + var attrs = Attr.getClassAttrs(constructor); + for (var i = 0; i < props.length; i++) { + var key = props[i]; + attrs[key + DELIMETER + "visible"] = false; + attrs[key + DELIMETER + "default"] = serializableFields[key]; + } + }; + CCClass.Attr = Attr; + CCClass.attr = Attr.attr; + CCClass.getInheritanceChain = function(klass) { + var chain = []; + for (;;) { + klass = js.getSuper(klass); + if (!klass) break; + klass !== Object && chain.push(klass); + } + return chain; + }; + var PrimitiveTypes = { + Integer: "Number", + Float: "Number", + Boolean: "Boolean", + String: "String" + }; + var onAfterProps_ET = []; + function parseAttributes(cls, attributes, className, propName, usedInGetter) { + var ERR_Type = ""; + var attrs = null; + var propNamePrefix = ""; + function initAttrs() { + propNamePrefix = propName + DELIMETER; + return attrs = Attr.getClassAttrs(cls); + } + false, false; + var type = attributes.type; + if (type) { + var primitiveType = PrimitiveTypes[type]; + if (primitiveType) { + (attrs || initAttrs())[propNamePrefix + "type"] = type; + (false, false) && !attributes._short && onAfterProps_ET.push(Attr.getTypeChecker_ET(primitiveType, "cc." + type)); + } else if ("Object" === type) false; else if (type === Attr.ScriptUuid) { + (attrs || initAttrs())[propNamePrefix + "type"] = "Script"; + attrs[propNamePrefix + "ctor"] = cc.ScriptAsset; + } else if ("object" === typeof type) if (Enum.isEnum(type)) { + (attrs || initAttrs())[propNamePrefix + "type"] = "Enum"; + attrs[propNamePrefix + "enumList"] = Enum.getList(type); + } else false; else if ("function" === typeof type) { + (attrs || initAttrs())[propNamePrefix + "type"] = "Object"; + attrs[propNamePrefix + "ctor"] = type; + (false, false) && !attributes._short && onAfterProps_ET.push(Attr.getObjTypeChecker_ET(type)); + } else false; + } + function parseSimpleAttr(attrName, expectType) { + if (attrName in attributes) { + var val = attributes[attrName]; + typeof val === expectType && ((attrs || initAttrs())[propNamePrefix + attrName] = val); + } + } + if (attributes.editorOnly) { + false; + (attrs || initAttrs())[propNamePrefix + "editorOnly"] = true; + } + false; + if (false === attributes.serializable) { + false; + (attrs || initAttrs())[propNamePrefix + "serializable"] = false; + } + parseSimpleAttr("formerlySerializedAs", "string"); + false; + var visible; + var startsWithUS; + false; + var range = attributes.range; + if (range) if (Array.isArray(range)) if (range.length >= 2) { + (attrs || initAttrs())[propNamePrefix + "min"] = range[0]; + attrs[propNamePrefix + "max"] = range[1]; + range.length > 2 && (attrs[propNamePrefix + "step"] = range[2]); + } else false; else false; + parseSimpleAttr("min", "number"); + parseSimpleAttr("max", "number"); + parseSimpleAttr("step", "number"); + parseSimpleAttr("userData", "object"); + } + cc.Class = CCClass; + module.exports = { + isArray: function isArray(defaultVal) { + defaultVal = getDefault(defaultVal); + return Array.isArray(defaultVal); + }, + fastDefine: CCClass._fastDefine, + getNewValueTypeCode: (true, getNewValueTypeCodeJit), + IDENTIFIER_RE: IDENTIFIER_RE, + escapeForJS: escapeForJS, + getDefault: getDefault + }; + false; + }), { + "./CCEnum": 123, + "./attribute": 133, + "./js": 142, + "./preprocess-class": 143, + "./requiring-frame": 144, + "./utils": 145 + } ], + 122: [ (function(require, module, exports) { + "use strict"; + require("./CCClass"); + var Preprocess = require("./preprocess-class"); + var js = require("./js"); + var isPlainEmptyObj_DEV = false; + var CACHE_KEY = "__ccclassCache__"; + function fNOP(ctor) { + return ctor; + } + function getSubDict(obj, key) { + return obj[key] || (obj[key] = {}); + } + function checkCtorArgument(decorate) { + return function(target) { + if ("function" === typeof target) return decorate(target); + return function(ctor) { + return decorate(ctor, target); + }; + }; + } + function _checkNormalArgument(validator_DEV, decorate, decoratorName) { + return function(target) { + false; + return function(ctor) { + return decorate(ctor, target); + }; + }; + } + var checkCompArgument = _checkNormalArgument.bind(null, false); + function _argumentChecker(type) { + return _checkNormalArgument.bind(null, false); + } + var checkStringArgument = _argumentChecker("string"); + var checkNumberArgument = _argumentChecker("number"); + function getClassCache(ctor, decoratorName) { + false; + return getSubDict(ctor, CACHE_KEY); + } + function getDefaultFromInitializer(initializer) { + var value; + try { + value = initializer(); + } catch (e) { + return initializer; + } + return "object" !== typeof value || null === value ? value : initializer; + } + function extractActualDefaultValues(ctor) { + var dummyObj; + try { + dummyObj = new ctor(); + } catch (e) { + false; + return {}; + } + return dummyObj; + } + function genProperty(ctor, properties, propName, options, desc, cache) { + var fullOptions; + var isGetset = desc && (desc.get || desc.set); + options && (fullOptions = Preprocess.getFullFormOfProperty(options, isGetset)); + var existsProperty = properties[propName]; + var prop = js.mixin(existsProperty || {}, fullOptions || options || {}); + if (isGetset) { + var errorProps; + false; + desc.get && (prop.get = desc.get); + desc.set && (prop.set = desc.set); + } else { + false; + var defaultValue = void 0; + var isDefaultValueSpecified = false; + if (desc) { + if (desc.initializer) { + defaultValue = getDefaultFromInitializer(desc.initializer); + isDefaultValueSpecified = true; + } + } else { + var actualDefaultValues = cache["default"] || (cache["default"] = extractActualDefaultValues(ctor)); + if (actualDefaultValues.hasOwnProperty(propName)) { + defaultValue = actualDefaultValues[propName]; + isDefaultValueSpecified = true; + } + } + false, false; + prop["default"] = defaultValue; + } + properties[propName] = prop; + } + var ccclass = checkCtorArgument((function(ctor, name) { + var base = js.getSuper(ctor); + base === Object && (base = null); + var proto = { + name: name, + extends: base, + ctor: ctor, + __ES6__: true + }; + var cache = ctor[CACHE_KEY]; + if (cache) { + var decoratedProto = cache.proto; + decoratedProto && js.mixin(proto, decoratedProto); + ctor[CACHE_KEY] = void 0; + } + var res = cc.Class(proto); + var propNames; + var i; + var prop; + var desc; + var func; + false; + return res; + })); + function property(ctorProtoOrOptions, propName, desc) { + var options = null; + function normalized(ctorProto, propName, desc) { + var cache = getClassCache(ctorProto.constructor); + if (cache) { + var ccclassProto = getSubDict(cache, "proto"); + var properties = getSubDict(ccclassProto, "properties"); + genProperty(ctorProto.constructor, properties, propName, options, desc, cache); + } + } + if ("undefined" === typeof propName) { + options = ctorProtoOrOptions; + return normalized; + } + normalized(ctorProtoOrOptions, propName, desc); + } + function createEditorDecorator(argCheckFunc, editorPropName, staticValue) { + return argCheckFunc((function(ctor, decoratedValue) { + var cache = getClassCache(ctor, editorPropName); + if (cache) { + var value = void 0 !== staticValue ? staticValue : decoratedValue; + var proto = getSubDict(cache, "proto"); + getSubDict(proto, "editor")[editorPropName] = value; + } + }), editorPropName); + } + function createDummyDecorator(argCheckFunc) { + return argCheckFunc(fNOP); + } + var executeInEditMode = createDummyDecorator(checkCtorArgument, "executeInEditMode", true); + var requireComponent = createEditorDecorator(checkCompArgument, "requireComponent"); + var menu = createDummyDecorator(checkStringArgument, "menu"); + var executionOrder = createEditorDecorator(checkNumberArgument, "executionOrder"); + var disallowMultiple = createDummyDecorator(checkCtorArgument, "disallowMultiple"); + var playOnFocus = createDummyDecorator(checkCtorArgument, "playOnFocus", true); + var inspector = createDummyDecorator(checkStringArgument, "inspector"); + var icon = createDummyDecorator(checkStringArgument, "icon"); + var help = createDummyDecorator(checkStringArgument, "help"); + function mixins() { + var mixins = []; + for (var i = 0; i < arguments.length; i++) mixins[i] = arguments[i]; + return function(ctor) { + var cache = getClassCache(ctor, "mixins"); + cache && (getSubDict(cache, "proto").mixins = mixins); + }; + } + cc._decorator = module.exports = { + ccclass: ccclass, + property: property, + executeInEditMode: executeInEditMode, + requireComponent: requireComponent, + menu: menu, + executionOrder: executionOrder, + disallowMultiple: disallowMultiple, + playOnFocus: playOnFocus, + inspector: inspector, + icon: icon, + help: help, + mixins: mixins + }; + }), { + "./CCClass": 121, + "./js": 142, + "./preprocess-class": 143, + "./utils": 145 + } ], + 123: [ (function(require, module, exports) { + "use strict"; + var js = require("./js"); + function Enum(obj) { + if ("__enums__" in obj) return obj; + js.value(obj, "__enums__", null, true); + var lastIndex = -1; + var keys = Object.keys(obj); + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + var val = obj[key]; + if (-1 === val) { + val = ++lastIndex; + obj[key] = val; + } else if ("number" === typeof val) lastIndex = val; else if ("string" === typeof val && Number.isInteger(parseFloat(key))) continue; + var reverseKey = "" + val; + if (key !== reverseKey) { + if ((false, false) && reverseKey in obj && obj[reverseKey] !== key) { + cc.errorID(7100, reverseKey); + continue; + } + js.value(obj, reverseKey, key); + } + } + return obj; + } + Enum.isEnum = function(enumType) { + return enumType && enumType.hasOwnProperty("__enums__"); + }; + Enum.getList = function(enumDef) { + if (enumDef.__enums__) return enumDef.__enums__; + var enums = enumDef.__enums__ = []; + for (var name in enumDef) { + var value = enumDef[name]; + Number.isInteger(value) && enums.push({ + name: name, + value: value + }); + } + enums.sort((function(a, b) { + return a.value - b.value; + })); + return enums; + }; + var _TestEnum; + false; + module.exports = cc.Enum = Enum; + }), { + "./js": 142 + } ], + 124: [ (function(require, module, exports) { + "use strict"; + var eventManager = require("../event-manager"); + var inputManager = require("./CCInputManager"); + var PORTRAIT = 0; + var LANDSCAPE_LEFT = -90; + var PORTRAIT_UPSIDE_DOWN = 180; + var LANDSCAPE_RIGHT = 90; + var _didAccelerateFun; + cc.Acceleration = function(x, y, z, timestamp) { + this.x = x || 0; + this.y = y || 0; + this.z = z || 0; + this.timestamp = timestamp || 0; + }; + inputManager.setAccelerometerEnabled = function(isEnable) { + var _t = this; + if (_t._accelEnabled === isEnable) return; + _t._accelEnabled = isEnable; + var scheduler = cc.director.getScheduler(); + scheduler.enableForTarget(_t); + if (_t._accelEnabled) { + _t._registerAccelerometerEvent(); + _t._accelCurTime = 0; + scheduler.scheduleUpdate(_t); + } else { + _t._unregisterAccelerometerEvent(); + _t._accelCurTime = 0; + scheduler.unscheduleUpdate(_t); + } + false, false; + }; + inputManager.setAccelerometerInterval = function(interval) { + if (this._accelInterval !== interval) { + this._accelInterval = interval; + false, false; + } + }; + inputManager._registerKeyboardEvent = function() { + cc.game.canvas.addEventListener("keydown", (function(e) { + eventManager.dispatchEvent(new cc.Event.EventKeyboard(e.keyCode, true)); + e.stopPropagation(); + e.preventDefault(); + }), false); + cc.game.canvas.addEventListener("keyup", (function(e) { + eventManager.dispatchEvent(new cc.Event.EventKeyboard(e.keyCode, false)); + e.stopPropagation(); + e.preventDefault(); + }), false); + }; + inputManager._registerAccelerometerEvent = function() { + var w = window, _t = this; + _t._acceleration = new cc.Acceleration(); + _t._accelDeviceEvent = w.DeviceMotionEvent || w.DeviceOrientationEvent; + cc.sys.browserType === cc.sys.BROWSER_TYPE_MOBILE_QQ && (_t._accelDeviceEvent = window.DeviceOrientationEvent); + var _deviceEventType = _t._accelDeviceEvent === w.DeviceMotionEvent ? "devicemotion" : "deviceorientation"; + var ua = navigator.userAgent; + (/Android/.test(ua) || /Adr/.test(ua) && cc.sys.browserType === cc.BROWSER_TYPE_UC) && (_t._minus = -1); + _didAccelerateFun = _t.didAccelerate.bind(_t); + w.addEventListener(_deviceEventType, _didAccelerateFun, false); + }; + inputManager._unregisterAccelerometerEvent = function() { + var w = window, _t = this; + var _deviceEventType = _t._accelDeviceEvent === w.DeviceMotionEvent ? "devicemotion" : "deviceorientation"; + _didAccelerateFun && w.removeEventListener(_deviceEventType, _didAccelerateFun, false); + }; + inputManager.didAccelerate = function(eventData) { + var _t = this, w = window; + if (!_t._accelEnabled) return; + var mAcceleration = _t._acceleration; + var x, y, z; + if (_t._accelDeviceEvent === window.DeviceMotionEvent) { + var eventAcceleration = eventData["accelerationIncludingGravity"]; + x = _t._accelMinus * eventAcceleration.x * .1; + y = _t._accelMinus * eventAcceleration.y * .1; + z = .1 * eventAcceleration.z; + } else { + x = eventData["gamma"] / 90 * .981; + y = -eventData["beta"] / 90 * .981; + z = eventData["alpha"] / 90 * .981; + } + if (cc.view._isRotated) { + var tmp = x; + x = -y; + y = tmp; + } + mAcceleration.x = x; + mAcceleration.y = y; + mAcceleration.z = z; + mAcceleration.timestamp = eventData.timeStamp || Date.now(); + var tmpX = mAcceleration.x; + if (w.orientation === LANDSCAPE_RIGHT) { + mAcceleration.x = -mAcceleration.y; + mAcceleration.y = tmpX; + } else if (w.orientation === LANDSCAPE_LEFT) { + mAcceleration.x = mAcceleration.y; + mAcceleration.y = -tmpX; + } else if (w.orientation === PORTRAIT_UPSIDE_DOWN) { + mAcceleration.x = -mAcceleration.x; + mAcceleration.y = -mAcceleration.y; + } + if (cc.sys.os === cc.sys.OS_ANDROID && cc.sys.browserType !== cc.sys.BROWSER_TYPE_MOBILE_QQ) { + mAcceleration.x = -mAcceleration.x; + mAcceleration.y = -mAcceleration.y; + } + }; + }), { + "../event-manager": 112, + "./CCInputManager": 125 + } ], + 125: [ (function(require, module, exports) { + "use strict"; + var macro = require("./CCMacro"); + var sys = require("./CCSys"); + var eventManager = require("../event-manager"); + var TOUCH_TIMEOUT = macro.TOUCH_TIMEOUT; + var _vec2 = cc.v2(); + var inputManager = { + _mousePressed: false, + _isRegisterEvent: false, + _preTouchPoint: cc.v2(0, 0), + _prevMousePoint: cc.v2(0, 0), + _preTouchPool: [], + _preTouchPoolPointer: 0, + _touches: [], + _touchesIntegerDict: {}, + _indexBitsUsed: 0, + _maxTouches: 8, + _accelEnabled: false, + _accelInterval: .2, + _accelMinus: 1, + _accelCurTime: 0, + _acceleration: null, + _accelDeviceEvent: null, + _canvasBoundingRect: { + left: 0, + top: 0, + adjustedLeft: 0, + adjustedTop: 0, + width: 0, + height: 0 + }, + _getUnUsedIndex: function _getUnUsedIndex() { + var temp = this._indexBitsUsed; + var now = cc.sys.now(); + for (var i = 0; i < this._maxTouches; i++) { + if (!(1 & temp)) { + this._indexBitsUsed |= 1 << i; + return i; + } + var touch = this._touches[i]; + if (now - touch._lastModified > TOUCH_TIMEOUT) { + this._removeUsedIndexBit(i); + delete this._touchesIntegerDict[touch.getID()]; + return i; + } + temp >>= 1; + } + return -1; + }, + _removeUsedIndexBit: function _removeUsedIndexBit(index) { + if (index < 0 || index >= this._maxTouches) return; + var temp = 1 << index; + temp = ~temp; + this._indexBitsUsed &= temp; + }, + _glView: null, + _updateCanvasBoundingRect: function _updateCanvasBoundingRect() { + var element = cc.game.canvas; + var canvasBoundingRect = this._canvasBoundingRect; + var docElem = document.documentElement; + var leftOffset = window.pageXOffset - docElem.clientLeft; + var topOffset = window.pageYOffset - docElem.clientTop; + if (element.getBoundingClientRect) { + var box = element.getBoundingClientRect(); + canvasBoundingRect.left = box.left + leftOffset; + canvasBoundingRect.top = box.top + topOffset; + canvasBoundingRect.width = box.width; + canvasBoundingRect.height = box.height; + } else if (element instanceof HTMLCanvasElement) { + canvasBoundingRect.left = leftOffset; + canvasBoundingRect.top = topOffset; + canvasBoundingRect.width = element.width; + canvasBoundingRect.height = element.height; + } else { + canvasBoundingRect.left = leftOffset; + canvasBoundingRect.top = topOffset; + canvasBoundingRect.width = parseInt(element.style.width); + canvasBoundingRect.height = parseInt(element.style.height); + } + }, + handleTouchesBegin: function handleTouchesBegin(touches) { + var selTouch, index, curTouch, touchID, handleTouches = [], locTouchIntDict = this._touchesIntegerDict, now = sys.now(); + for (var i = 0, len = touches.length; i < len; i++) { + selTouch = touches[i]; + touchID = selTouch.getID(); + index = locTouchIntDict[touchID]; + if (null == index) { + var unusedIndex = this._getUnUsedIndex(); + if (-1 === unusedIndex) { + cc.logID(2300, unusedIndex); + continue; + } + curTouch = this._touches[unusedIndex] = new cc.Touch(selTouch._point.x, selTouch._point.y, selTouch.getID()); + curTouch._lastModified = now; + curTouch._setPrevPoint(selTouch._prevPoint); + locTouchIntDict[touchID] = unusedIndex; + handleTouches.push(curTouch); + } + } + if (handleTouches.length > 0) { + this._glView._convertTouchesWithScale(handleTouches); + var touchEvent = new cc.Event.EventTouch(handleTouches); + touchEvent._eventCode = cc.Event.EventTouch.BEGAN; + eventManager.dispatchEvent(touchEvent); + } + }, + handleTouchesMove: function handleTouchesMove(touches) { + var selTouch, index, touchID, handleTouches = [], locTouches = this._touches, now = sys.now(); + for (var i = 0, len = touches.length; i < len; i++) { + selTouch = touches[i]; + touchID = selTouch.getID(); + index = this._touchesIntegerDict[touchID]; + if (null == index) continue; + if (locTouches[index]) { + locTouches[index]._setPoint(selTouch._point); + locTouches[index]._setPrevPoint(selTouch._prevPoint); + locTouches[index]._lastModified = now; + handleTouches.push(locTouches[index]); + } + } + if (handleTouches.length > 0) { + this._glView._convertTouchesWithScale(handleTouches); + var touchEvent = new cc.Event.EventTouch(handleTouches); + touchEvent._eventCode = cc.Event.EventTouch.MOVED; + eventManager.dispatchEvent(touchEvent); + } + }, + handleTouchesEnd: function handleTouchesEnd(touches) { + var handleTouches = this.getSetOfTouchesEndOrCancel(touches); + if (handleTouches.length > 0) { + this._glView._convertTouchesWithScale(handleTouches); + var touchEvent = new cc.Event.EventTouch(handleTouches); + touchEvent._eventCode = cc.Event.EventTouch.ENDED; + eventManager.dispatchEvent(touchEvent); + } + this._preTouchPool.length = 0; + }, + handleTouchesCancel: function handleTouchesCancel(touches) { + var handleTouches = this.getSetOfTouchesEndOrCancel(touches); + if (handleTouches.length > 0) { + this._glView._convertTouchesWithScale(handleTouches); + var touchEvent = new cc.Event.EventTouch(handleTouches); + touchEvent._eventCode = cc.Event.EventTouch.CANCELED; + eventManager.dispatchEvent(touchEvent); + } + this._preTouchPool.length = 0; + }, + getSetOfTouchesEndOrCancel: function getSetOfTouchesEndOrCancel(touches) { + var selTouch, index, touchID, handleTouches = [], locTouches = this._touches, locTouchesIntDict = this._touchesIntegerDict; + for (var i = 0, len = touches.length; i < len; i++) { + selTouch = touches[i]; + touchID = selTouch.getID(); + index = locTouchesIntDict[touchID]; + if (null == index) continue; + if (locTouches[index]) { + locTouches[index]._setPoint(selTouch._point); + locTouches[index]._setPrevPoint(selTouch._prevPoint); + handleTouches.push(locTouches[index]); + this._removeUsedIndexBit(index); + delete locTouchesIntDict[touchID]; + } + } + return handleTouches; + }, + getPreTouch: function getPreTouch(touch) { + var preTouch = null; + var locPreTouchPool = this._preTouchPool; + var id = touch.getID(); + for (var i = locPreTouchPool.length - 1; i >= 0; i--) if (locPreTouchPool[i].getID() === id) { + preTouch = locPreTouchPool[i]; + break; + } + preTouch || (preTouch = touch); + return preTouch; + }, + setPreTouch: function setPreTouch(touch) { + var find = false; + var locPreTouchPool = this._preTouchPool; + var id = touch.getID(); + for (var i = locPreTouchPool.length - 1; i >= 0; i--) if (locPreTouchPool[i].getID() === id) { + locPreTouchPool[i] = touch; + find = true; + break; + } + if (!find) if (locPreTouchPool.length <= 50) locPreTouchPool.push(touch); else { + locPreTouchPool[this._preTouchPoolPointer] = touch; + this._preTouchPoolPointer = (this._preTouchPoolPointer + 1) % 50; + } + }, + getTouchByXY: function getTouchByXY(tx, ty, pos) { + var locPreTouch = this._preTouchPoint; + var location = this._glView.convertToLocationInView(tx, ty, pos); + var touch = new cc.Touch(location.x, location.y, 0); + touch._setPrevPoint(locPreTouch.x, locPreTouch.y); + locPreTouch.x = location.x; + locPreTouch.y = location.y; + return touch; + }, + getMouseEvent: function getMouseEvent(location, pos, eventType) { + var locPreMouse = this._prevMousePoint; + var mouseEvent = new cc.Event.EventMouse(eventType); + mouseEvent._setPrevCursor(locPreMouse.x, locPreMouse.y); + locPreMouse.x = location.x; + locPreMouse.y = location.y; + this._glView._convertMouseToLocationInView(locPreMouse, pos); + mouseEvent.setLocation(locPreMouse.x, locPreMouse.y); + return mouseEvent; + }, + getPointByEvent: function getPointByEvent(event, pos) { + cc.sys.browserType !== cc.sys.BROWSER_TYPE_QQ && cc.sys.browserType !== cc.sys.BROWSER_TYPE_UC && cc.sys.browserType !== cc.sys.BROWSER_TYPE_SAFARI || this._updateCanvasBoundingRect(); + if (null != event.pageX) return { + x: event.pageX, + y: event.pageY + }; + pos.left -= document.body.scrollLeft; + pos.top -= document.body.scrollTop; + return { + x: event.clientX, + y: event.clientY + }; + }, + getTouchesByEvent: function getTouchesByEvent(event, pos) { + var touchArr = [], locView = this._glView; + var touch_event, touch, preLocation; + var locPreTouch = this._preTouchPoint; + var length = event.changedTouches.length; + for (var i = 0; i < length; i++) { + touch_event = event.changedTouches[i]; + if (touch_event) { + var location = void 0; + location = sys.BROWSER_TYPE_FIREFOX === sys.browserType ? locView.convertToLocationInView(touch_event.pageX, touch_event.pageY, pos, _vec2) : locView.convertToLocationInView(touch_event.clientX, touch_event.clientY, pos, _vec2); + if (null != touch_event.identifier) { + touch = new cc.Touch(location.x, location.y, touch_event.identifier); + preLocation = this.getPreTouch(touch).getLocation(); + touch._setPrevPoint(preLocation.x, preLocation.y); + this.setPreTouch(touch); + } else { + touch = new cc.Touch(location.x, location.y); + touch._setPrevPoint(locPreTouch.x, locPreTouch.y); + } + locPreTouch.x = location.x; + locPreTouch.y = location.y; + touchArr.push(touch); + } + } + return touchArr; + }, + registerSystemEvent: function registerSystemEvent(element) { + if (this._isRegisterEvent) return; + this._glView = cc.view; + var selfPointer = this; + var canvasBoundingRect = this._canvasBoundingRect; + window.addEventListener("resize", this._updateCanvasBoundingRect.bind(this)); + var prohibition = sys.isMobile; + var supportMouse = "mouse" in sys.capabilities; + var supportTouches = "touches" in sys.capabilities; + if (supportMouse) { + if (!prohibition) { + window.addEventListener("mousedown", (function() { + selfPointer._mousePressed = true; + }), false); + window.addEventListener("mouseup", (function(event) { + if (!selfPointer._mousePressed) return; + selfPointer._mousePressed = false; + var location = selfPointer.getPointByEvent(event, canvasBoundingRect); + if (!cc.rect(canvasBoundingRect.left, canvasBoundingRect.top, canvasBoundingRect.width, canvasBoundingRect.height).contains(location)) { + selfPointer.handleTouchesEnd([ selfPointer.getTouchByXY(location.x, location.y, canvasBoundingRect) ]); + var mouseEvent = selfPointer.getMouseEvent(location, canvasBoundingRect, cc.Event.EventMouse.UP); + mouseEvent.setButton(event.button); + eventManager.dispatchEvent(mouseEvent); + } + }), false); + } + var EventMouse = cc.Event.EventMouse; + var _mouseEventsOnElement = [ !prohibition && [ "mousedown", EventMouse.DOWN, function(event, mouseEvent, location, canvasBoundingRect) { + selfPointer._mousePressed = true; + selfPointer.handleTouchesBegin([ selfPointer.getTouchByXY(location.x, location.y, canvasBoundingRect) ]); + element.focus(); + } ], !prohibition && [ "mouseup", EventMouse.UP, function(event, mouseEvent, location, canvasBoundingRect) { + selfPointer._mousePressed = false; + selfPointer.handleTouchesEnd([ selfPointer.getTouchByXY(location.x, location.y, canvasBoundingRect) ]); + } ], !prohibition && [ "mousemove", EventMouse.MOVE, function(event, mouseEvent, location, canvasBoundingRect) { + selfPointer.handleTouchesMove([ selfPointer.getTouchByXY(location.x, location.y, canvasBoundingRect) ]); + selfPointer._mousePressed || mouseEvent.setButton(null); + } ], [ "mousewheel", EventMouse.SCROLL, function(event, mouseEvent) { + mouseEvent.setScrollData(0, event.wheelDelta); + } ], [ "DOMMouseScroll", EventMouse.SCROLL, function(event, mouseEvent) { + mouseEvent.setScrollData(0, -120 * event.detail); + } ] ]; + for (var i = 0; i < _mouseEventsOnElement.length; ++i) { + var entry = _mouseEventsOnElement[i]; + entry && (function() { + var name = entry[0]; + var type = entry[1]; + var handler = entry[2]; + element.addEventListener(name, (function(event) { + var location = selfPointer.getPointByEvent(event, canvasBoundingRect); + var mouseEvent = selfPointer.getMouseEvent(location, canvasBoundingRect, type); + mouseEvent.setButton(event.button); + handler(event, mouseEvent, location, canvasBoundingRect); + eventManager.dispatchEvent(mouseEvent); + event.stopPropagation(); + event.preventDefault(); + }), false); + })(); + } + } + if (window.navigator.msPointerEnabled) { + var _pointerEventsMap = { + MSPointerDown: selfPointer.handleTouchesBegin, + MSPointerMove: selfPointer.handleTouchesMove, + MSPointerUp: selfPointer.handleTouchesEnd, + MSPointerCancel: selfPointer.handleTouchesCancel + }; + var _loop = function _loop(eventName) { + var touchEvent = _pointerEventsMap[eventName]; + element.addEventListener(eventName, (function(event) { + var documentElement = document.documentElement; + canvasBoundingRect.adjustedLeft = canvasBoundingRect.left - documentElement.scrollLeft; + canvasBoundingRect.adjustedTop = canvasBoundingRect.top - documentElement.scrollTop; + touchEvent.call(selfPointer, [ selfPointer.getTouchByXY(event.clientX, event.clientY, canvasBoundingRect) ]); + event.stopPropagation(); + }), false); + }; + for (var eventName in _pointerEventsMap) _loop(eventName); + } + if (supportTouches) { + var _touchEventsMap = { + touchstart: function touchstart(touchesToHandle) { + selfPointer.handleTouchesBegin(touchesToHandle); + element.focus(); + }, + touchmove: function touchmove(touchesToHandle) { + selfPointer.handleTouchesMove(touchesToHandle); + }, + touchend: function touchend(touchesToHandle) { + selfPointer.handleTouchesEnd(touchesToHandle); + }, + touchcancel: function touchcancel(touchesToHandle) { + selfPointer.handleTouchesCancel(touchesToHandle); + } + }; + var registerTouchEvent = function registerTouchEvent(eventName) { + var handler = _touchEventsMap[eventName]; + element.addEventListener(eventName, (function(event) { + if (!event.changedTouches) return; + var body = document.body; + canvasBoundingRect.adjustedLeft = canvasBoundingRect.left - (body.scrollLeft || window.scrollX || 0); + canvasBoundingRect.adjustedTop = canvasBoundingRect.top - (body.scrollTop || window.scrollY || 0); + handler(selfPointer.getTouchesByEvent(event, canvasBoundingRect)); + event.stopPropagation(); + event.preventDefault(); + }), false); + }; + for (var _eventName in _touchEventsMap) registerTouchEvent(_eventName); + } + this._registerKeyboardEvent(); + this._isRegisterEvent = true; + }, + _registerKeyboardEvent: function _registerKeyboardEvent() {}, + _registerAccelerometerEvent: function _registerAccelerometerEvent() {}, + update: function update(dt) { + if (this._accelCurTime > this._accelInterval) { + this._accelCurTime -= this._accelInterval; + eventManager.dispatchEvent(new cc.Event.EventAcceleration(this._acceleration)); + } + this._accelCurTime += dt; + } + }; + module.exports = cc.internal.inputManager = inputManager; + }), { + "../event-manager": 112, + "./CCMacro": 126, + "./CCSys": 130 + } ], + 126: [ (function(require, module, exports) { + "use strict"; + cc.macro = { + RAD: Math.PI / 180, + DEG: 180 / Math.PI, + REPEAT_FOREVER: Number.MAX_VALUE - 1, + FLT_EPSILON: 1.192092896e-7, + MIN_ZINDEX: -Math.pow(2, 15), + MAX_ZINDEX: Math.pow(2, 15) - 1, + ONE: 1, + ZERO: 0, + SRC_ALPHA: 770, + SRC_ALPHA_SATURATE: 776, + SRC_COLOR: 768, + DST_ALPHA: 772, + DST_COLOR: 774, + ONE_MINUS_SRC_ALPHA: 771, + ONE_MINUS_SRC_COLOR: 769, + ONE_MINUS_DST_ALPHA: 773, + ONE_MINUS_DST_COLOR: 775, + ONE_MINUS_CONSTANT_ALPHA: 32772, + ONE_MINUS_CONSTANT_COLOR: 32770, + ORIENTATION_PORTRAIT: 1, + ORIENTATION_LANDSCAPE: 2, + ORIENTATION_AUTO: 3, + DENSITYDPI_DEVICE: "device-dpi", + DENSITYDPI_HIGH: "high-dpi", + DENSITYDPI_MEDIUM: "medium-dpi", + DENSITYDPI_LOW: "low-dpi", + FIX_ARTIFACTS_BY_STRECHING_TEXEL_TMX: true, + DIRECTOR_STATS_POSITION: cc.v2(0, 0), + ENABLE_STACKABLE_ACTIONS: true, + TOUCH_TIMEOUT: 5e3, + BATCH_VERTEX_COUNT: 2e4, + ENABLE_TILEDMAP_CULLING: true, + ENABLE_TRANSPARENT_CANVAS: false, + ENABLE_WEBGL_ANTIALIAS: false, + ENABLE_CULLING: false, + CLEANUP_IMAGE_CACHE: false, + SHOW_MESH_WIREFRAME: false, + SHOW_MESH_NORMAL: false, + ENABLE_MULTI_TOUCH: true, + ALLOW_IMAGE_BITMAP: !cc.sys.isMobile, + ENABLE_NATIVE_TTF_RENDERER: false + }; + Object.defineProperty(cc.macro, "ROTATE_ACTION_CCW", { + set: function set(value) { + cc.RotateTo && cc.RotateBy && (cc.RotateTo._reverse = cc.RotateBy._reverse = value); + } + }); + var SUPPORT_TEXTURE_FORMATS = [ ".pkm", ".pvr", ".webp", ".jpg", ".jpeg", ".bmp", ".png" ]; + cc.macro.SUPPORT_TEXTURE_FORMATS = SUPPORT_TEXTURE_FORMATS; + cc.macro.KEY = { + none: 0, + back: 6, + menu: 18, + backspace: 8, + tab: 9, + enter: 13, + shift: 16, + ctrl: 17, + alt: 18, + pause: 19, + capslock: 20, + escape: 27, + space: 32, + pageup: 33, + pagedown: 34, + end: 35, + home: 36, + left: 37, + up: 38, + right: 39, + down: 40, + select: 41, + insert: 45, + Delete: 46, + 0: 48, + 1: 49, + 2: 50, + 3: 51, + 4: 52, + 5: 53, + 6: 54, + 7: 55, + 8: 56, + 9: 57, + a: 65, + b: 66, + c: 67, + d: 68, + e: 69, + f: 70, + g: 71, + h: 72, + i: 73, + j: 74, + k: 75, + l: 76, + m: 77, + n: 78, + o: 79, + p: 80, + q: 81, + r: 82, + s: 83, + t: 84, + u: 85, + v: 86, + w: 87, + x: 88, + y: 89, + z: 90, + num0: 96, + num1: 97, + num2: 98, + num3: 99, + num4: 100, + num5: 101, + num6: 102, + num7: 103, + num8: 104, + num9: 105, + "*": 106, + "+": 107, + "-": 109, + numdel: 110, + "/": 111, + f1: 112, + f2: 113, + f3: 114, + f4: 115, + f5: 116, + f6: 117, + f7: 118, + f8: 119, + f9: 120, + f10: 121, + f11: 122, + f12: 123, + numlock: 144, + scrolllock: 145, + ";": 186, + semicolon: 186, + equal: 187, + "=": 187, + ",": 188, + comma: 188, + dash: 189, + ".": 190, + period: 190, + forwardslash: 191, + grave: 192, + "[": 219, + openbracket: 219, + backslash: 220, + "]": 221, + closebracket: 221, + quote: 222, + dpadLeft: 1e3, + dpadRight: 1001, + dpadUp: 1003, + dpadDown: 1004, + dpadCenter: 1005 + }; + cc.macro.ImageFormat = cc.Enum({ + JPG: 0, + PNG: 1, + TIFF: 2, + WEBP: 3, + PVR: 4, + ETC: 5, + S3TC: 6, + ATITC: 7, + TGA: 8, + RAWDATA: 9, + UNKNOWN: 10 + }); + cc.macro.BlendFactor = cc.Enum({ + ONE: 1, + ZERO: 0, + SRC_ALPHA: 770, + SRC_COLOR: 768, + DST_ALPHA: 772, + DST_COLOR: 774, + ONE_MINUS_SRC_ALPHA: 771, + ONE_MINUS_SRC_COLOR: 769, + ONE_MINUS_DST_ALPHA: 773, + ONE_MINUS_DST_COLOR: 775 + }); + cc.macro.TextAlignment = cc.Enum({ + LEFT: 0, + CENTER: 1, + RIGHT: 2 + }); + cc.macro.VerticalTextAlignment = cc.Enum({ + TOP: 0, + CENTER: 1, + BOTTOM: 2 + }); + module.exports = cc.macro; + }), {} ], + 127: [ (function(require, module, exports) { + "use strict"; + var js = require("./js"); + var CCClass = require("./CCClass"); + var Destroyed = 1; + var RealDestroyed = 2; + var ToDestroy = 4; + var DontSave = 8; + var EditorOnly = 16; + var Dirty = 32; + var DontDestroy = 64; + var Destroying = 128; + var Deactivating = 256; + var LockedInEditor = 512; + var HideInHierarchy = 1024; + var IsOnEnableCalled = 2048; + var IsEditorOnEnableCalled = 4096; + var IsPreloadStarted = 8192; + var IsOnLoadCalled = 16384; + var IsOnLoadStarted = 32768; + var IsStartCalled = 65536; + var IsRotationLocked = 1 << 17; + var IsScaleLocked = 1 << 18; + var IsAnchorLocked = 1 << 19; + var IsSizeLocked = 1 << 20; + var IsPositionLocked = 1 << 21; + var PersistentMask = ~(ToDestroy | Dirty | Destroying | DontDestroy | Deactivating | IsPreloadStarted | IsOnLoadStarted | IsOnLoadCalled | IsStartCalled | IsOnEnableCalled | IsEditorOnEnableCalled | IsRotationLocked | IsScaleLocked | IsAnchorLocked | IsSizeLocked | IsPositionLocked); + function CCObject() { + this._name = ""; + this._objFlags = 0; + } + CCClass.fastDefine("cc.Object", CCObject, { + _name: "", + _objFlags: 0 + }); + js.value(CCObject, "Flags", { + Destroyed: Destroyed, + DontSave: DontSave, + EditorOnly: EditorOnly, + Dirty: Dirty, + DontDestroy: DontDestroy, + PersistentMask: PersistentMask, + Destroying: Destroying, + Deactivating: Deactivating, + LockedInEditor: LockedInEditor, + HideInHierarchy: HideInHierarchy, + IsPreloadStarted: IsPreloadStarted, + IsOnLoadStarted: IsOnLoadStarted, + IsOnLoadCalled: IsOnLoadCalled, + IsOnEnableCalled: IsOnEnableCalled, + IsStartCalled: IsStartCalled, + IsEditorOnEnableCalled: IsEditorOnEnableCalled, + IsPositionLocked: IsPositionLocked, + IsRotationLocked: IsRotationLocked, + IsScaleLocked: IsScaleLocked, + IsAnchorLocked: IsAnchorLocked, + IsSizeLocked: IsSizeLocked + }); + var objectsToDestroy = []; + function deferredDestroy() { + var deleteCount = objectsToDestroy.length; + for (var i = 0; i < deleteCount; ++i) { + var obj = objectsToDestroy[i]; + obj._objFlags & Destroyed || obj._destroyImmediate(); + } + deleteCount === objectsToDestroy.length ? objectsToDestroy.length = 0 : objectsToDestroy.splice(0, deleteCount); + false; + } + js.value(CCObject, "_deferredDestroy", deferredDestroy); + false; + var prototype = CCObject.prototype; + js.getset(prototype, "name", (function() { + return this._name; + }), (function(value) { + this._name = value; + }), true); + js.get(prototype, "isValid", (function() { + return !(this._objFlags & Destroyed); + }), true); + false, false; + var deferredDestroyTimer = null; + prototype.destroy = function() { + if (this._objFlags & Destroyed) { + cc.warnID(5e3); + return false; + } + if (this._objFlags & ToDestroy) return false; + this._objFlags |= ToDestroy; + objectsToDestroy.push(this); + false; + return true; + }; + false, false; + function compileDestruct(obj, ctor) { + var shouldSkipId = obj instanceof cc._BaseNode || obj instanceof cc.Component; + var idToSkip = shouldSkipId ? "_id" : null; + var key, propsToReset = {}; + for (key in obj) if (obj.hasOwnProperty(key)) { + if (key === idToSkip) continue; + switch (typeof obj[key]) { + case "string": + propsToReset[key] = ""; + break; + + case "object": + case "function": + propsToReset[key] = null; + } + } + if (cc.Class._isCCClass(ctor)) { + var attrs = cc.Class.Attr.getClassAttrs(ctor); + var propList = ctor.__props__; + for (var i = 0; i < propList.length; i++) { + key = propList[i]; + var attrKey = key + cc.Class.Attr.DELIMETER + "default"; + if (attrKey in attrs) { + if (shouldSkipId && "_id" === key) continue; + switch (typeof attrs[attrKey]) { + case "string": + propsToReset[key] = ""; + break; + + case "object": + case "function": + propsToReset[key] = null; + break; + + case "undefined": + propsToReset[key] = void 0; + } + } + } + } + true; + var func = ""; + for (key in propsToReset) { + var statement; + statement = CCClass.IDENTIFIER_RE.test(key) ? "o." + key + "=" : "o[" + CCClass.escapeForJS(key) + "]="; + var val = propsToReset[key]; + "" === val && (val = '""'); + func += statement + val + ";\n"; + } + return Function("o", func); + } + prototype._destruct = function() { + var ctor = this.constructor; + var destruct = ctor.__destruct__; + if (!destruct) { + destruct = compileDestruct(this, ctor); + js.value(ctor, "__destruct__", destruct, true); + } + destruct(this); + }; + prototype._onPreDestroy = null; + prototype._destroyImmediate = function() { + if (this._objFlags & Destroyed) { + cc.errorID(5e3); + return; + } + this._onPreDestroy && this._onPreDestroy(); + true; + this._destruct(); + this._objFlags |= Destroyed; + }; + false; + prototype._deserialize = null; + cc.isValid = function(value, strictMode) { + return "object" === typeof value ? !!value && !(value._objFlags & (strictMode ? Destroyed | ToDestroy : Destroyed)) : "undefined" !== typeof value; + }; + false, false; + cc.Object = module.exports = CCObject; + }), { + "./CCClass": 121, + "./js": 142 + } ], + 128: [ (function(require, module, exports) { + "use strict"; + var js = require("../platform/js"); + cc.SAXParser = function() { + if (true, window.DOMParser) { + this._isSupportDOMParser = true; + this._parser = new DOMParser(); + } else { + this._isSupportDOMParser = false; + this._parser = null; + } + }; + cc.SAXParser.prototype = { + constructor: cc.SAXParser, + parse: function parse(xmlTxt) { + return this._parseXML(xmlTxt); + }, + _parseXML: function _parseXML(textxml) { + var xmlDoc; + if (this._isSupportDOMParser) xmlDoc = this._parser.parseFromString(textxml, "text/xml"); else { + xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); + xmlDoc.async = "false"; + xmlDoc.loadXML(textxml); + } + return xmlDoc; + } + }; + cc.PlistParser = function() { + cc.SAXParser.call(this); + }; + js.extend(cc.PlistParser, cc.SAXParser); + js.mixin(cc.PlistParser.prototype, { + parse: function parse(xmlTxt) { + var xmlDoc = this._parseXML(xmlTxt); + var plist = xmlDoc.documentElement; + if ("plist" !== plist.tagName) { + cc.warnID(5100); + return {}; + } + var node = null; + for (var i = 0, len = plist.childNodes.length; i < len; i++) { + node = plist.childNodes[i]; + if (1 === node.nodeType) break; + } + xmlDoc = null; + return this._parseNode(node); + }, + _parseNode: function _parseNode(node) { + var data = null, tagName = node.tagName; + if ("dict" === tagName) data = this._parseDict(node); else if ("array" === tagName) data = this._parseArray(node); else if ("string" === tagName) if (1 === node.childNodes.length) data = node.firstChild.nodeValue; else { + data = ""; + for (var i = 0; i < node.childNodes.length; i++) data += node.childNodes[i].nodeValue; + } else "false" === tagName ? data = false : "true" === tagName ? data = true : "real" === tagName ? data = parseFloat(node.firstChild.nodeValue) : "integer" === tagName && (data = parseInt(node.firstChild.nodeValue, 10)); + return data; + }, + _parseArray: function _parseArray(node) { + var data = []; + for (var i = 0, len = node.childNodes.length; i < len; i++) { + var child = node.childNodes[i]; + if (1 !== child.nodeType) continue; + data.push(this._parseNode(child)); + } + return data; + }, + _parseDict: function _parseDict(node) { + var data = {}; + var key = null; + for (var i = 0, len = node.childNodes.length; i < len; i++) { + var child = node.childNodes[i]; + if (1 !== child.nodeType) continue; + "key" === child.tagName ? key = child.firstChild.nodeValue : data[key] = this._parseNode(child); + } + return data; + } + }); + cc.saxParser = new cc.SAXParser(); + cc.plistParser = new cc.PlistParser(); + module.exports = { + saxParser: cc.saxParser, + plistParser: cc.plistParser + }; + }), { + "../platform/js": 142 + } ], + 129: [ (function(require, module, exports) { + "use strict"; + cc.screen = { + _supportsFullScreen: false, + _onfullscreenchange: null, + _onfullscreenerror: null, + _preOnFullScreenChange: null, + _preOnFullScreenError: null, + _preOnTouch: null, + _touchEvent: "", + _fn: null, + _fnMap: [ [ "requestFullscreen", "exitFullscreen", "fullscreenchange", "fullscreenEnabled", "fullscreenElement", "fullscreenerror" ], [ "requestFullScreen", "exitFullScreen", "fullScreenchange", "fullScreenEnabled", "fullScreenElement", "fullscreenerror" ], [ "webkitRequestFullScreen", "webkitCancelFullScreen", "webkitfullscreenchange", "webkitIsFullScreen", "webkitCurrentFullScreenElement", "webkitfullscreenerror" ], [ "mozRequestFullScreen", "mozCancelFullScreen", "mozfullscreenchange", "mozFullScreen", "mozFullScreenElement", "mozfullscreenerror" ], [ "msRequestFullscreen", "msExitFullscreen", "MSFullscreenChange", "msFullscreenEnabled", "msFullscreenElement", "msfullscreenerror" ] ], + init: function init() { + this._fn = {}; + var i, l, val, map = this._fnMap, valL; + for (i = 0, l = map.length; i < l; i++) { + val = map[i]; + if (val && "undefined" !== typeof document[val[1]]) { + for (i = 0, valL = val.length; i < valL; i++) this._fn[map[0][i]] = val[i]; + break; + } + } + this._supportsFullScreen = void 0 !== this._fn.requestFullscreen; + this._touchEvent = "ontouchend" in window ? "touchend" : "mousedown"; + }, + fullScreen: function fullScreen() { + return !!this._supportsFullScreen && !!(document[this._fn.fullscreenElement] || document[this._fn.webkitFullscreenElement] || document[this._fn.mozFullScreenElement]); + }, + requestFullScreen: function requestFullScreen(element, onFullScreenChange, onFullScreenError) { + if (element && "video" === element.tagName.toLowerCase()) { + if (cc.sys.os === cc.sys.OS_IOS && cc.sys.isBrowser && element.readyState > 0) { + element.webkitEnterFullscreen && element.webkitEnterFullscreen(); + return; + } + element.setAttribute("x5-video-player-fullscreen", "true"); + } + if (!this._supportsFullScreen) return; + element = element || document.documentElement; + if (onFullScreenChange) { + var eventName = this._fn.fullscreenchange; + this._onfullscreenchange && document.removeEventListener(eventName, this._onfullscreenchange); + this._onfullscreenchange = onFullScreenChange; + document.addEventListener(eventName, onFullScreenChange, false); + } + if (onFullScreenError) { + var _eventName = this._fn.fullscreenerror; + this._onfullscreenerror && document.removeEventListener(_eventName, this._onfullscreenerror); + this._onfullscreenerror = onFullScreenError; + document.addEventListener(_eventName, onFullScreenError, { + once: true + }); + } + var requestPromise = element[this._fn.requestFullscreen](); + "undefined" === typeof document[this._fn.fullscreenerror] && window.Promise && requestPromise instanceof Promise && requestPromise["catch"]((function(err) {})); + }, + exitFullScreen: function exitFullScreen(element) { + if (element && "video" === element.tagName.toLowerCase()) { + if (cc.sys.os === cc.sys.OS_IOS && cc.sys.isBrowser) { + element.webkitExitFullscreen && element.webkitExitFullscreen(); + return; + } + element.setAttribute("x5-video-player-fullscreen", "false"); + } + return !this._supportsFullScreen || document[this._fn.exitFullscreen](); + }, + autoFullScreen: function autoFullScreen(element, onFullScreenChange) { + element = element || document.body; + this._ensureFullScreen(element, onFullScreenChange); + this.requestFullScreen(element, onFullScreenChange); + }, + disableAutoFullScreen: function disableAutoFullScreen(element) { + var touchTarget = cc.game.canvas || element; + var touchEventName = this._touchEvent; + if (this._preOnTouch) { + touchTarget.removeEventListener(touchEventName, this._preOnTouch); + this._preOnTouch = null; + } + }, + _ensureFullScreen: function _ensureFullScreen(element, onFullScreenChange) { + var self = this; + var touchTarget = cc.game.canvas || element; + var fullScreenErrorEventName = this._fn.fullscreenerror; + var touchEventName = this._touchEvent; + function onFullScreenError() { + self._preOnFullScreenError = null; + function onTouch() { + self._preOnTouch = null; + self.requestFullScreen(element, onFullScreenChange); + } + self._preOnTouch && touchTarget.removeEventListener(touchEventName, self._preOnTouch); + self._preOnTouch = onTouch; + touchTarget.addEventListener(touchEventName, self._preOnTouch, { + once: true + }); + } + this._preOnFullScreenError && element.removeEventListener(fullScreenErrorEventName, this._preOnFullScreenError); + this._preOnFullScreenError = onFullScreenError; + element.addEventListener(fullScreenErrorEventName, onFullScreenError, { + once: true + }); + } + }; + cc.screen.init(); + }), {} ], + 130: [ (function(require, module, exports) { + "use strict"; + var settingPlatform; + true; + settingPlatform = window._CCSettings ? _CCSettings.platform : void 0; + var isVivoGame = "qgame" === settingPlatform; + var isOppoGame = "quickgame" === settingPlatform; + var isHuaweiGame = "huawei" === settingPlatform; + var isJKWGame = "jkw-game" === settingPlatform; + var isQttGame = "qtt-game" === settingPlatform; + var isLinkSure = "link-sure" === settingPlatform; + var _global = "undefined" === typeof window ? global : window; + function initSys() { + cc.sys = {}; + var sys = cc.sys; + sys.LANGUAGE_ENGLISH = "en"; + sys.LANGUAGE_CHINESE = "zh"; + sys.LANGUAGE_FRENCH = "fr"; + sys.LANGUAGE_ITALIAN = "it"; + sys.LANGUAGE_GERMAN = "de"; + sys.LANGUAGE_SPANISH = "es"; + sys.LANGUAGE_DUTCH = "du"; + sys.LANGUAGE_RUSSIAN = "ru"; + sys.LANGUAGE_KOREAN = "ko"; + sys.LANGUAGE_JAPANESE = "ja"; + sys.LANGUAGE_HUNGARIAN = "hu"; + sys.LANGUAGE_PORTUGUESE = "pt"; + sys.LANGUAGE_ARABIC = "ar"; + sys.LANGUAGE_NORWEGIAN = "no"; + sys.LANGUAGE_POLISH = "pl"; + sys.LANGUAGE_TURKISH = "tr"; + sys.LANGUAGE_UKRAINIAN = "uk"; + sys.LANGUAGE_ROMANIAN = "ro"; + sys.LANGUAGE_BULGARIAN = "bg"; + sys.LANGUAGE_UNKNOWN = "unknown"; + sys.OS_IOS = "iOS"; + sys.OS_ANDROID = "Android"; + sys.OS_WINDOWS = "Windows"; + sys.OS_MARMALADE = "Marmalade"; + sys.OS_LINUX = "Linux"; + sys.OS_BADA = "Bada"; + sys.OS_BLACKBERRY = "Blackberry"; + sys.OS_OSX = "OS X"; + sys.OS_WP8 = "WP8"; + sys.OS_WINRT = "WINRT"; + sys.OS_UNKNOWN = "Unknown"; + sys.UNKNOWN = -1; + sys.WIN32 = 0; + sys.LINUX = 1; + sys.MACOS = 2; + sys.ANDROID = 3; + sys.IPHONE = 4; + sys.IPAD = 5; + sys.BLACKBERRY = 6; + sys.NACL = 7; + sys.EMSCRIPTEN = 8; + sys.TIZEN = 9; + sys.WINRT = 10; + sys.WP8 = 11; + sys.MOBILE_BROWSER = 100; + sys.DESKTOP_BROWSER = 101; + sys.EDITOR_PAGE = 102; + sys.EDITOR_CORE = 103; + sys.WECHAT_GAME = 104; + sys.QQ_PLAY = 105; + sys.FB_PLAYABLE_ADS = 106; + sys.BAIDU_GAME = 107; + sys.VIVO_GAME = 108; + sys.OPPO_GAME = 109; + sys.HUAWEI_GAME = 110; + sys.XIAOMI_GAME = 111; + sys.JKW_GAME = 112; + sys.ALIPAY_GAME = 113; + sys.WECHAT_GAME_SUB = 114; + sys.BAIDU_GAME_SUB = 115; + sys.QTT_GAME = 116; + sys.BYTEDANCE_GAME = 117; + sys.BYTEDANCE_GAME_SUB = 118; + sys.LINKSURE = 119; + sys.BROWSER_TYPE_WECHAT = "wechat"; + sys.BROWSER_TYPE_ANDROID = "androidbrowser"; + sys.BROWSER_TYPE_IE = "ie"; + sys.BROWSER_TYPE_EDGE = "edge"; + sys.BROWSER_TYPE_QQ = "qqbrowser"; + sys.BROWSER_TYPE_MOBILE_QQ = "mqqbrowser"; + sys.BROWSER_TYPE_UC = "ucbrowser"; + sys.BROWSER_TYPE_UCBS = "ucbs"; + sys.BROWSER_TYPE_360 = "360browser"; + sys.BROWSER_TYPE_BAIDU_APP = "baiduboxapp"; + sys.BROWSER_TYPE_BAIDU = "baidubrowser"; + sys.BROWSER_TYPE_MAXTHON = "maxthon"; + sys.BROWSER_TYPE_OPERA = "opera"; + sys.BROWSER_TYPE_OUPENG = "oupeng"; + sys.BROWSER_TYPE_MIUI = "miuibrowser"; + sys.BROWSER_TYPE_FIREFOX = "firefox"; + sys.BROWSER_TYPE_SAFARI = "safari"; + sys.BROWSER_TYPE_CHROME = "chrome"; + sys.BROWSER_TYPE_LIEBAO = "liebao"; + sys.BROWSER_TYPE_QZONE = "qzone"; + sys.BROWSER_TYPE_SOUGOU = "sogou"; + sys.BROWSER_TYPE_HUAWEI = "huawei"; + sys.BROWSER_TYPE_UNKNOWN = "unknown"; + sys.isNative = (false, false); + sys.isBrowser = "object" === typeof window && "object" === typeof document && true; + sys.glExtension = function(name) { + return !!cc.renderer.device.ext(name); + }; + sys.getMaxJointMatrixSize = function() { + if (!sys._maxJointMatrixSize) { + var JOINT_MATRICES_SIZE = 50; + var LEFT_UNIFORM_SIZE = 10; + var gl = cc.game._renderContext; + var maxUniforms = Math.floor(gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS) / 4) - LEFT_UNIFORM_SIZE; + sys._maxJointMatrixSize = maxUniforms < JOINT_MATRICES_SIZE ? 0 : JOINT_MATRICES_SIZE; + } + return sys._maxJointMatrixSize; + }; + sys.getSafeAreaRect = function() { + var visibleSize = cc.view.getVisibleSize(); + return cc.rect(0, 0, visibleSize.width, visibleSize.height); + }; + if (_global.__globalAdapter && _global.__globalAdapter.adaptSys) _global.__globalAdapter.adaptSys(sys); else { + false; + var platform; + var languageCode; + var w; + var h; + var ratio; + var capabilities; + false, false; + var win = window, nav = win.navigator, doc = document, docEle = doc.documentElement; + var ua = nav.userAgent.toLowerCase(); + false; + sys.isMobile = /mobile|android|iphone|ipad/.test(ua); + "undefined" !== typeof FbPlayableAd ? sys.platform = sys.FB_PLAYABLE_ADS : sys.platform = sys.isMobile ? sys.MOBILE_BROWSER : sys.DESKTOP_BROWSER; + var currLanguage = nav.language; + currLanguage = currLanguage || nav.browserLanguage; + sys.languageCode = currLanguage.toLowerCase(); + currLanguage = currLanguage ? currLanguage.split("-")[0] : sys.LANGUAGE_ENGLISH; + sys.language = currLanguage; + var isAndroid = false, iOS = false, osVersion = "", osMainVersion = 0; + var uaResult = /android\s*(\d+(?:\.\d+)*)/i.exec(ua) || /android\s*(\d+(?:\.\d+)*)/i.exec(nav.platform); + if (uaResult) { + isAndroid = true; + osVersion = uaResult[1] || ""; + osMainVersion = parseInt(osVersion) || 0; + } + uaResult = /(iPad|iPhone|iPod).*OS ((\d+_?){2,3})/i.exec(ua); + if (uaResult) { + iOS = true; + osVersion = uaResult[2] || ""; + osMainVersion = parseInt(osVersion) || 0; + } else if (/(iPhone|iPad|iPod)/.exec(nav.platform) || "MacIntel" === nav.platform && nav.maxTouchPoints && nav.maxTouchPoints > 1) { + iOS = true; + osVersion = ""; + osMainVersion = 0; + } + var osName = sys.OS_UNKNOWN; + -1 !== nav.appVersion.indexOf("Win") ? osName = sys.OS_WINDOWS : iOS ? osName = sys.OS_IOS : -1 !== nav.appVersion.indexOf("Mac") ? osName = sys.OS_OSX : -1 !== nav.appVersion.indexOf("X11") && -1 === nav.appVersion.indexOf("Linux") ? osName = sys.OS_UNIX : isAndroid ? osName = sys.OS_ANDROID : -1 === nav.appVersion.indexOf("Linux") && -1 === ua.indexOf("ubuntu") || (osName = sys.OS_LINUX); + sys.os = osName; + sys.osVersion = osVersion; + sys.osMainVersion = osMainVersion; + sys.browserType = sys.BROWSER_TYPE_UNKNOWN; + (function() { + var typeReg1 = /mqqbrowser|micromessenger|qqbrowser|sogou|qzone|liebao|maxthon|ucbs|360 aphone|360browser|baiduboxapp|baidubrowser|maxthon|mxbrowser|miuibrowser/i; + var typeReg2 = /qq|ucbrowser|ubrowser|edge|HuaweiBrowser/i; + var typeReg3 = /chrome|safari|firefox|trident|opera|opr\/|oupeng/i; + var browserTypes = typeReg1.exec(ua) || typeReg2.exec(ua) || typeReg3.exec(ua); + var browserType = browserTypes ? browserTypes[0].toLowerCase() : sys.BROWSER_TYPE_UNKNOWN; + "safari" === browserType && isAndroid ? browserType = sys.BROWSER_TYPE_ANDROID : "qq" === browserType && ua.match(/android.*applewebkit/i) && (browserType = sys.BROWSER_TYPE_ANDROID); + var typeMap = { + micromessenger: sys.BROWSER_TYPE_WECHAT, + trident: sys.BROWSER_TYPE_IE, + edge: sys.BROWSER_TYPE_EDGE, + "360 aphone": sys.BROWSER_TYPE_360, + mxbrowser: sys.BROWSER_TYPE_MAXTHON, + "opr/": sys.BROWSER_TYPE_OPERA, + ubrowser: sys.BROWSER_TYPE_UC, + huaweibrowser: sys.BROWSER_TYPE_HUAWEI + }; + "qqbrowser" !== browserType && "mqqbrowser" !== browserType || ua.match(/wechat|micromessenger/i) && (browserType = sys.BROWSER_TYPE_WECHAT); + sys.browserType = typeMap[browserType] || browserType; + })(); + sys.browserVersion = ""; + (function() { + var versionReg1 = /(mqqbrowser|micromessenger|qqbrowser|sogou|qzone|liebao|maxthon|uc|ucbs|360 aphone|360|baiduboxapp|baidu|maxthon|mxbrowser|miui(?:.hybrid)?)(mobile)?(browser)?\/?([\d.]+)/i; + var versionReg2 = /(qq|chrome|safari|firefox|trident|opera|opr\/|oupeng)(mobile)?(browser)?\/?([\d.]+)/i; + var tmp = ua.match(versionReg1); + tmp || (tmp = ua.match(versionReg2)); + sys.browserVersion = tmp ? tmp[4] : ""; + })(); + var w = window.innerWidth || document.documentElement.clientWidth; + var h = window.innerHeight || document.documentElement.clientHeight; + var ratio = window.devicePixelRatio || 1; + sys.windowPixelResolution = { + width: ratio * w, + height: ratio * h + }; + sys._checkWebGLRenderMode = function() { + if (cc.game.renderType !== cc.game.RENDER_TYPE_WEBGL) throw new Error("This feature supports WebGL render mode only."); + }; + var _tmpCanvas1 = document.createElement("canvas"); + var create3DContext = function create3DContext(canvas, opt_attribs, opt_contextType) { + if (!opt_contextType) return create3DContext(canvas, opt_attribs, "webgl") || create3DContext(canvas, opt_attribs, "experimental-webgl") || create3DContext(canvas, opt_attribs, "webkit-3d") || create3DContext(canvas, opt_attribs, "moz-webgl") || null; + try { + return canvas.getContext(opt_contextType, opt_attribs); + } catch (e) { + return null; + } + }; + try { + var localStorage = sys.localStorage = win.localStorage; + localStorage.setItem("storage", ""); + localStorage.removeItem("storage"); + localStorage = null; + } catch (e) { + var warn = function warn() { + cc.warnID(5200); + }; + sys.localStorage = { + getItem: warn, + setItem: warn, + removeItem: warn, + clear: warn + }; + } + var _supportWebp = _tmpCanvas1.toDataURL("image/webp").startsWith("data:image/webp"); + var _supportCanvas = !!_tmpCanvas1.getContext("2d"); + var _supportWebGL = false; + false; + win.WebGLRenderingContext && (_supportWebGL = true); + var capabilities = sys.capabilities = { + canvas: _supportCanvas, + opengl: _supportWebGL, + webp: _supportWebp, + imageBitmap: false + }; + if ("undefined" !== typeof createImageBitmap && "undefined" !== typeof Blob) { + _tmpCanvas1.width = _tmpCanvas1.height = 2; + createImageBitmap(_tmpCanvas1, {}).then((function(imageBitmap) { + capabilities.imageBitmap = true; + imageBitmap.close && imageBitmap.close(); + }))["catch"]((function(err) {})); + } + (void 0 !== docEle["ontouchstart"] || void 0 !== doc["ontouchstart"] || nav.msPointerEnabled) && (capabilities["touches"] = true); + void 0 !== docEle["onmouseup"] && (capabilities["mouse"] = true); + void 0 !== docEle["onkeyup"] && (capabilities["keyboard"] = true); + (win.DeviceMotionEvent || win.DeviceOrientationEvent) && (capabilities["accelerometer"] = true); + var __audioSupport; + (function() { + var DEBUG = false; + var version = sys.browserVersion; + var supportWebAudio = !!(window.AudioContext || window.webkitAudioContext || window.mozAudioContext); + __audioSupport = { + ONLY_ONE: false, + WEB_AUDIO: supportWebAudio, + DELAY_CREATE_CTX: false + }; + sys.os === sys.OS_IOS && (__audioSupport.USE_LOADER_EVENT = "loadedmetadata"); + if (sys.browserType === sys.BROWSER_TYPE_FIREFOX) { + __audioSupport.DELAY_CREATE_CTX = true; + __audioSupport.USE_LOADER_EVENT = "canplay"; + } + sys.os === sys.OS_ANDROID && sys.browserType === sys.BROWSER_TYPE_UC && (__audioSupport.ONE_SOURCE = true); + DEBUG && setTimeout((function() { + cc.log("browse type: " + sys.browserType); + cc.log("browse version: " + version); + cc.log("MULTI_CHANNEL: " + __audioSupport.MULTI_CHANNEL); + cc.log("WEB_AUDIO: " + __audioSupport.WEB_AUDIO); + cc.log("AUTOPLAY: " + __audioSupport.AUTOPLAY); + }), 0); + })(); + try { + if (__audioSupport.WEB_AUDIO) { + __audioSupport.context = new (window.AudioContext || window.webkitAudioContext || window.mozAudioContext)(); + __audioSupport.DELAY_CREATE_CTX && setTimeout((function() { + __audioSupport.context = new (window.AudioContext || window.webkitAudioContext || window.mozAudioContext)(); + }), 0); + } + } catch (error) { + __audioSupport.WEB_AUDIO = false; + cc.logID(5201); + } + var formatSupport = []; + (function() { + var audio = document.createElement("audio"); + if (audio.canPlayType) { + var ogg = audio.canPlayType('audio/ogg; codecs="vorbis"'); + ogg && formatSupport.push(".ogg"); + var mp3 = audio.canPlayType("audio/mpeg"); + mp3 && formatSupport.push(".mp3"); + var wav = audio.canPlayType('audio/wav; codecs="1"'); + wav && formatSupport.push(".wav"); + var mp4 = audio.canPlayType("audio/mp4"); + mp4 && formatSupport.push(".mp4"); + var m4a = audio.canPlayType("audio/x-m4a"); + m4a && formatSupport.push(".m4a"); + } + })(); + __audioSupport.format = formatSupport; + sys.__audioSupport = __audioSupport; + } + sys.NetworkType = { + NONE: 0, + LAN: 1, + WWAN: 2 + }; + sys.getNetworkType = function() { + return sys.NetworkType.LAN; + }; + sys.getBatteryLevel = function() { + return 1; + }; + sys.garbageCollect = function() {}; + sys.restartVM = function() {}; + sys.isObjectValid = function(obj) { + if (obj) return true; + return false; + }; + sys.dump = function() { + var self = this; + var str = ""; + str += "isMobile : " + self.isMobile + "\r\n"; + str += "language : " + self.language + "\r\n"; + str += "browserType : " + self.browserType + "\r\n"; + str += "browserVersion : " + self.browserVersion + "\r\n"; + str += "capabilities : " + JSON.stringify(self.capabilities) + "\r\n"; + str += "os : " + self.os + "\r\n"; + str += "osVersion : " + self.osVersion + "\r\n"; + str += "platform : " + self.platform + "\r\n"; + str += "Using " + (cc.game.renderType === cc.game.RENDER_TYPE_WEBGL ? "WEBGL" : "CANVAS") + " renderer.\r\n"; + cc.log(str); + }; + sys.openURL = function(url) { + false, false; + window.open(url); + }; + sys.now = function() { + return Date.now ? Date.now() : +new Date(); + }; + return sys; + } + var sys = cc && cc.sys ? cc.sys : initSys(); + module.exports = sys; + }), {} ], + 131: [ (function(require, module, exports) { + "use strict"; + var EventTarget = require("../event/event-target"); + var js = require("../platform/js"); + var renderer = require("../renderer"); + require("../platform/CCClass"); + var __BrowserGetter = { + init: function init() { + this.html = document.getElementsByTagName("html")[0]; + }, + availWidth: function availWidth(frame) { + return frame && frame !== this.html ? frame.clientWidth : window.innerWidth; + }, + availHeight: function availHeight(frame) { + return frame && frame !== this.html ? frame.clientHeight : window.innerHeight; + }, + meta: { + width: "device-width" + }, + adaptationType: cc.sys.browserType + }; + cc.sys.os === cc.sys.OS_IOS && (__BrowserGetter.adaptationType = cc.sys.BROWSER_TYPE_SAFARI); + switch (__BrowserGetter.adaptationType) { + case cc.sys.BROWSER_TYPE_SAFARI: + case cc.sys.BROWSER_TYPE_SOUGOU: + case cc.sys.BROWSER_TYPE_UC: + __BrowserGetter.meta["minimal-ui"] = "true"; + __BrowserGetter.availWidth = function(frame) { + return frame.clientWidth; + }; + __BrowserGetter.availHeight = function(frame) { + return frame.clientHeight; + }; + } + var _scissorRect = null; + var View = function View() { + EventTarget.call(this); + var _t = this, _strategyer = cc.ContainerStrategy, _strategy = cc.ContentStrategy; + __BrowserGetter.init(this); + _t._frameSize = cc.size(0, 0); + _t._designResolutionSize = cc.size(0, 0); + _t._originalDesignResolutionSize = cc.size(0, 0); + _t._scaleX = 1; + _t._scaleY = 1; + _t._viewportRect = cc.rect(0, 0, 0, 0); + _t._visibleRect = cc.rect(0, 0, 0, 0); + _t._autoFullScreen = false; + _t._devicePixelRatio = 1; + false; + _t._maxPixelRatio = 2; + _t._retinaEnabled = false; + _t._resizeCallback = null; + _t._resizing = false; + _t._resizeWithBrowserSize = false; + _t._orientationChanging = true; + _t._isRotated = false; + _t._orientation = cc.macro.ORIENTATION_AUTO; + _t._isAdjustViewport = true; + _t._antiAliasEnabled = false; + _t._resolutionPolicy = null; + _t._rpExactFit = new cc.ResolutionPolicy(_strategyer.EQUAL_TO_FRAME, _strategy.EXACT_FIT); + _t._rpShowAll = new cc.ResolutionPolicy(_strategyer.EQUAL_TO_FRAME, _strategy.SHOW_ALL); + _t._rpNoBorder = new cc.ResolutionPolicy(_strategyer.EQUAL_TO_FRAME, _strategy.NO_BORDER); + _t._rpFixedHeight = new cc.ResolutionPolicy(_strategyer.EQUAL_TO_FRAME, _strategy.FIXED_HEIGHT); + _t._rpFixedWidth = new cc.ResolutionPolicy(_strategyer.EQUAL_TO_FRAME, _strategy.FIXED_WIDTH); + cc.game.once(cc.game.EVENT_ENGINE_INITED, this.init, this); + }; + cc.js.extend(View, EventTarget); + cc.js.mixin(View.prototype, { + init: function init() { + this._initFrameSize(); + var w = cc.game.canvas.width, h = cc.game.canvas.height; + this._designResolutionSize.width = w; + this._designResolutionSize.height = h; + this._originalDesignResolutionSize.width = w; + this._originalDesignResolutionSize.height = h; + this._viewportRect.width = w; + this._viewportRect.height = h; + this._visibleRect.width = w; + this._visibleRect.height = h; + cc.winSize.width = this._visibleRect.width; + cc.winSize.height = this._visibleRect.height; + cc.visibleRect && cc.visibleRect.init(this._visibleRect); + }, + _resizeEvent: function _resizeEvent(forceOrEvent) { + var view; + view = this.setDesignResolutionSize ? this : cc.view; + var sys = cc.sys; + if (sys.browserType === sys.BROWSER_TYPE_UC && sys.os === sys.OS_IOS) { + setTimeout((function() { + view._resizeEvent(forceOrEvent); + }), 0); + return; + } + var prevFrameW = view._frameSize.width, prevFrameH = view._frameSize.height, prevRotated = view._isRotated; + if (cc.sys.isMobile) { + var containerStyle = cc.game.container.style, margin = containerStyle.margin; + containerStyle.margin = "0"; + containerStyle.display = "none"; + view._initFrameSize(); + containerStyle.margin = margin; + containerStyle.display = "block"; + } else view._initFrameSize(); + if (true !== forceOrEvent && view._isRotated === prevRotated && view._frameSize.width === prevFrameW && view._frameSize.height === prevFrameH) return; + var width = view._originalDesignResolutionSize.width; + var height = view._originalDesignResolutionSize.height; + view._resizing = true; + width > 0 && view.setDesignResolutionSize(width, height, view._resolutionPolicy); + view._resizing = false; + view.emit("canvas-resize"); + view._resizeCallback && view._resizeCallback.call(); + }, + _orientationChange: function _orientationChange() { + cc.view._orientationChanging = true; + cc.view._resizeEvent(); + cc.sys.browserType === cc.sys.BROWSER_TYPE_SAFARI && cc.sys.isMobile && setTimeout((function() { + window.innerHeight > window.innerWidth && window.scrollTo(0, 1); + }), 500); + }, + _resize: function _resize() { + cc.view._resizeEvent(false); + }, + resizeWithBrowserSize: function resizeWithBrowserSize(enabled) { + if (enabled) { + if (!this._resizeWithBrowserSize) { + this._resizeWithBrowserSize = true; + window.addEventListener("resize", this._resize); + window.addEventListener("orientationchange", this._orientationChange); + } + } else if (this._resizeWithBrowserSize) { + this._resizeWithBrowserSize = false; + window.removeEventListener("resize", this._resize); + window.removeEventListener("orientationchange", this._orientationChange); + } + }, + setResizeCallback: function setResizeCallback(callback) { + false; + "function" !== typeof callback && null != callback || (this._resizeCallback = callback); + }, + setOrientation: function setOrientation(orientation) { + orientation &= cc.macro.ORIENTATION_AUTO; + if (orientation && this._orientation !== orientation) { + this._orientation = orientation; + var designWidth = this._originalDesignResolutionSize.width; + var designHeight = this._originalDesignResolutionSize.height; + this.setDesignResolutionSize(designWidth, designHeight, this._resolutionPolicy); + } + }, + _initFrameSize: function _initFrameSize() { + var locFrameSize = this._frameSize; + var w = __BrowserGetter.availWidth(cc.game.frame); + var h = __BrowserGetter.availHeight(cc.game.frame); + var isLandscape = w >= h; + if ((false, !cc.sys.isMobile) || isLandscape && this._orientation & cc.macro.ORIENTATION_LANDSCAPE || !isLandscape && this._orientation & cc.macro.ORIENTATION_PORTRAIT) { + locFrameSize.width = w; + locFrameSize.height = h; + cc.game.container.style["-webkit-transform"] = "rotate(0deg)"; + cc.game.container.style.transform = "rotate(0deg)"; + this._isRotated = false; + } else { + locFrameSize.width = h; + locFrameSize.height = w; + cc.game.container.style["-webkit-transform"] = "rotate(90deg)"; + cc.game.container.style.transform = "rotate(90deg)"; + cc.game.container.style["-webkit-transform-origin"] = "0px 0px 0px"; + cc.game.container.style.transformOrigin = "0px 0px 0px"; + this._isRotated = true; + } + this._orientationChanging && setTimeout((function() { + cc.view._orientationChanging = false; + }), 1e3); + }, + _setViewportMeta: function _setViewportMeta(metas, overwrite) { + var vp = document.getElementById("cocosMetaElement"); + vp && overwrite && document.head.removeChild(vp); + var elems = document.getElementsByName("viewport"), currentVP = elems ? elems[0] : null, content, key, pattern; + content = currentVP ? currentVP.content : ""; + vp = vp || document.createElement("meta"); + vp.id = "cocosMetaElement"; + vp.name = "viewport"; + vp.content = ""; + for (key in metas) if (-1 == content.indexOf(key)) content += "," + key + "=" + metas[key]; else if (overwrite) { + pattern = new RegExp(key + "s*=s*[^,]+"); + content = content.replace(pattern, key + "=" + metas[key]); + } + /^,/.test(content) && (content = content.substr(1)); + vp.content = content; + currentVP && (currentVP.content = content); + document.head.appendChild(vp); + }, + _adjustViewportMeta: function _adjustViewportMeta() { + if (this._isAdjustViewport && true) { + this._setViewportMeta(__BrowserGetter.meta, false); + this._isAdjustViewport = false; + } + }, + adjustViewportMeta: function adjustViewportMeta(enabled) { + this._isAdjustViewport = enabled; + }, + enableRetina: function enableRetina(enabled) { + false; + this._retinaEnabled = !!enabled; + }, + isRetinaEnabled: function isRetinaEnabled() { + false; + return this._retinaEnabled; + }, + enableAntiAlias: function enableAntiAlias(enabled) { + cc.warnID(9200); + if (this._antiAliasEnabled === enabled) return; + this._antiAliasEnabled = enabled; + if (cc.game.renderType === cc.game.RENDER_TYPE_WEBGL) { + var cache = cc.assetManager.assets; + cache.forEach((function(asset) { + if (asset instanceof cc.Texture2D) { + var Filter = cc.Texture2D.Filter; + enabled ? asset.setFilters(Filter.LINEAR, Filter.LINEAR) : asset.setFilters(Filter.NEAREST, Filter.NEAREST); + } + })); + } else if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS) { + var ctx = cc.game.canvas.getContext("2d"); + ctx.imageSmoothingEnabled = enabled; + ctx.mozImageSmoothingEnabled = enabled; + } + }, + isAntiAliasEnabled: function isAntiAliasEnabled() { + return this._antiAliasEnabled; + }, + enableAutoFullScreen: function enableAutoFullScreen(enabled) { + if (enabled && enabled !== this._autoFullScreen && cc.sys.isMobile) { + this._autoFullScreen = true; + cc.screen.autoFullScreen(cc.game.frame); + } else { + this._autoFullScreen = false; + cc.screen.disableAutoFullScreen(cc.game.frame); + } + }, + isAutoFullScreenEnabled: function isAutoFullScreenEnabled() { + return this._autoFullScreen; + }, + setCanvasSize: function setCanvasSize(width, height) { + var canvas = cc.game.canvas; + var container = cc.game.container; + canvas.width = width * this._devicePixelRatio; + canvas.height = height * this._devicePixelRatio; + canvas.style.width = width + "px"; + canvas.style.height = height + "px"; + container.style.width = width + "px"; + container.style.height = height + "px"; + this._resizeEvent(); + }, + getCanvasSize: function getCanvasSize() { + return cc.size(cc.game.canvas.width, cc.game.canvas.height); + }, + getFrameSize: function getFrameSize() { + return cc.size(this._frameSize.width, this._frameSize.height); + }, + setFrameSize: function setFrameSize(width, height) { + this._frameSize.width = width; + this._frameSize.height = height; + cc.game.frame.style.width = width + "px"; + cc.game.frame.style.height = height + "px"; + this._resizeEvent(true); + }, + getVisibleSize: function getVisibleSize() { + return cc.size(this._visibleRect.width, this._visibleRect.height); + }, + getVisibleSizeInPixel: function getVisibleSizeInPixel() { + return cc.size(this._visibleRect.width * this._scaleX, this._visibleRect.height * this._scaleY); + }, + getVisibleOrigin: function getVisibleOrigin() { + return cc.v2(this._visibleRect.x, this._visibleRect.y); + }, + getVisibleOriginInPixel: function getVisibleOriginInPixel() { + return cc.v2(this._visibleRect.x * this._scaleX, this._visibleRect.y * this._scaleY); + }, + getResolutionPolicy: function getResolutionPolicy() { + return this._resolutionPolicy; + }, + setResolutionPolicy: function setResolutionPolicy(resolutionPolicy) { + var _t = this; + if (resolutionPolicy instanceof cc.ResolutionPolicy) _t._resolutionPolicy = resolutionPolicy; else { + var _locPolicy = cc.ResolutionPolicy; + resolutionPolicy === _locPolicy.EXACT_FIT && (_t._resolutionPolicy = _t._rpExactFit); + resolutionPolicy === _locPolicy.SHOW_ALL && (_t._resolutionPolicy = _t._rpShowAll); + resolutionPolicy === _locPolicy.NO_BORDER && (_t._resolutionPolicy = _t._rpNoBorder); + resolutionPolicy === _locPolicy.FIXED_HEIGHT && (_t._resolutionPolicy = _t._rpFixedHeight); + resolutionPolicy === _locPolicy.FIXED_WIDTH && (_t._resolutionPolicy = _t._rpFixedWidth); + } + }, + setDesignResolutionSize: function setDesignResolutionSize(width, height, resolutionPolicy) { + if (!(width > 0 && height > 0)) { + cc.errorID(2200); + return; + } + this.setResolutionPolicy(resolutionPolicy); + var policy = this._resolutionPolicy; + policy && policy.preApply(this); + cc.sys.isMobile && this._adjustViewportMeta(); + this._orientationChanging = true; + this._resizing || this._initFrameSize(); + if (!policy) { + cc.logID(2201); + return; + } + this._originalDesignResolutionSize.width = this._designResolutionSize.width = width; + this._originalDesignResolutionSize.height = this._designResolutionSize.height = height; + var result = policy.apply(this, this._designResolutionSize); + if (result.scale && 2 === result.scale.length) { + this._scaleX = result.scale[0]; + this._scaleY = result.scale[1]; + } + if (result.viewport) { + var vp = this._viewportRect, vb = this._visibleRect, rv = result.viewport; + vp.x = rv.x; + vp.y = rv.y; + vp.width = rv.width; + vp.height = rv.height; + vb.x = 0; + vb.y = 0; + vb.width = rv.width / this._scaleX; + vb.height = rv.height / this._scaleY; + } + policy.postApply(this); + cc.winSize.width = this._visibleRect.width; + cc.winSize.height = this._visibleRect.height; + cc.visibleRect && cc.visibleRect.init(this._visibleRect); + renderer.updateCameraViewport(); + cc.internal.inputManager._updateCanvasBoundingRect(); + this.emit("design-resolution-changed"); + }, + getDesignResolutionSize: function getDesignResolutionSize() { + return cc.size(this._designResolutionSize.width, this._designResolutionSize.height); + }, + setRealPixelResolution: function setRealPixelResolution(width, height, resolutionPolicy) { + true, true; + this._setViewportMeta({ + width: width + }, true); + document.documentElement.style.width = width + "px"; + document.body.style.width = width + "px"; + document.body.style.left = "0px"; + document.body.style.top = "0px"; + this.setDesignResolutionSize(width, height, resolutionPolicy); + }, + setViewportInPoints: function setViewportInPoints(x, y, w, h) { + var locScaleX = this._scaleX, locScaleY = this._scaleY; + cc.game._renderContext.viewport(x * locScaleX + this._viewportRect.x, y * locScaleY + this._viewportRect.y, w * locScaleX, h * locScaleY); + }, + setScissorInPoints: function setScissorInPoints(x, y, w, h) { + var scaleX = this._scaleX, scaleY = this._scaleY; + var sx = Math.ceil(x * scaleX + this._viewportRect.x); + var sy = Math.ceil(y * scaleY + this._viewportRect.y); + var sw = Math.ceil(w * scaleX); + var sh = Math.ceil(h * scaleY); + var gl = cc.game._renderContext; + if (!_scissorRect) { + var boxArr = gl.getParameter(gl.SCISSOR_BOX); + _scissorRect = cc.rect(boxArr[0], boxArr[1], boxArr[2], boxArr[3]); + } + if (_scissorRect.x !== sx || _scissorRect.y !== sy || _scissorRect.width !== sw || _scissorRect.height !== sh) { + _scissorRect.x = sx; + _scissorRect.y = sy; + _scissorRect.width = sw; + _scissorRect.height = sh; + gl.scissor(sx, sy, sw, sh); + } + }, + isScissorEnabled: function isScissorEnabled() { + return cc.game._renderContext.isEnabled(gl.SCISSOR_TEST); + }, + getScissorRect: function getScissorRect() { + if (!_scissorRect) { + var boxArr = gl.getParameter(gl.SCISSOR_BOX); + _scissorRect = cc.rect(boxArr[0], boxArr[1], boxArr[2], boxArr[3]); + } + var scaleXFactor = 1 / this._scaleX; + var scaleYFactor = 1 / this._scaleY; + return cc.rect((_scissorRect.x - this._viewportRect.x) * scaleXFactor, (_scissorRect.y - this._viewportRect.y) * scaleYFactor, _scissorRect.width * scaleXFactor, _scissorRect.height * scaleYFactor); + }, + getViewportRect: function getViewportRect() { + return this._viewportRect; + }, + getScaleX: function getScaleX() { + return this._scaleX; + }, + getScaleY: function getScaleY() { + return this._scaleY; + }, + getDevicePixelRatio: function getDevicePixelRatio() { + return this._devicePixelRatio; + }, + convertToLocationInView: function convertToLocationInView(tx, ty, relatedPos, out) { + var result = out || cc.v2(); + var posLeft = relatedPos.adjustedLeft ? relatedPos.adjustedLeft : relatedPos.left; + var posTop = relatedPos.adjustedTop ? relatedPos.adjustedTop : relatedPos.top; + var x = this._devicePixelRatio * (tx - posLeft); + var y = this._devicePixelRatio * (posTop + relatedPos.height - ty); + if (this._isRotated) { + result.x = cc.game.canvas.width - y; + result.y = x; + } else { + result.x = x; + result.y = y; + } + return result; + }, + _convertMouseToLocationInView: function _convertMouseToLocationInView(in_out_point, relatedPos) { + var viewport = this._viewportRect, _t = this; + in_out_point.x = (_t._devicePixelRatio * (in_out_point.x - relatedPos.left) - viewport.x) / _t._scaleX; + in_out_point.y = (_t._devicePixelRatio * (relatedPos.top + relatedPos.height - in_out_point.y) - viewport.y) / _t._scaleY; + }, + _convertPointWithScale: function _convertPointWithScale(point) { + var viewport = this._viewportRect; + point.x = (point.x - viewport.x) / this._scaleX; + point.y = (point.y - viewport.y) / this._scaleY; + }, + _convertTouchesWithScale: function _convertTouchesWithScale(touches) { + var viewport = this._viewportRect, scaleX = this._scaleX, scaleY = this._scaleY, selTouch, selPoint, selPrePoint; + for (var i = 0; i < touches.length; i++) { + selTouch = touches[i]; + selPoint = selTouch._point; + selPrePoint = selTouch._prevPoint; + selPoint.x = (selPoint.x - viewport.x) / scaleX; + selPoint.y = (selPoint.y - viewport.y) / scaleY; + selPrePoint.x = (selPrePoint.x - viewport.x) / scaleX; + selPrePoint.y = (selPrePoint.y - viewport.y) / scaleY; + } + } + }); + cc.ContainerStrategy = cc.Class({ + name: "ContainerStrategy", + preApply: function preApply(view) {}, + apply: function apply(view, designedResolution) {}, + postApply: function postApply(view) {}, + _setupContainer: function _setupContainer(view, w, h) { + var locCanvas = cc.game.canvas; + this._setupStyle(view, w, h); + var devicePixelRatio = view._devicePixelRatio = 1; + false; + view.isRetinaEnabled() && (devicePixelRatio = view._devicePixelRatio = Math.min(view._maxPixelRatio, window.devicePixelRatio || 1)); + locCanvas.width = w * devicePixelRatio; + locCanvas.height = h * devicePixelRatio; + }, + _setupStyle: function _setupStyle(view, w, h) { + var locCanvas = cc.game.canvas; + var locContainer = cc.game.container; + if (cc.sys.os === cc.sys.OS_ANDROID) { + document.body.style.width = (view._isRotated ? h : w) + "px"; + document.body.style.height = (view._isRotated ? w : h) + "px"; + } + locContainer.style.width = locCanvas.style.width = w + "px"; + locContainer.style.height = locCanvas.style.height = h + "px"; + }, + _fixContainer: function _fixContainer() { + document.body.insertBefore(cc.game.container, document.body.firstChild); + var bs = document.body.style; + bs.width = window.innerWidth + "px"; + bs.height = window.innerHeight + "px"; + bs.overflow = "hidden"; + var contStyle = cc.game.container.style; + contStyle.position = "fixed"; + contStyle.left = contStyle.top = "0px"; + document.body.scrollTop = 0; + } + }); + cc.ContentStrategy = cc.Class({ + name: "ContentStrategy", + ctor: function ctor() { + this._result = { + scale: [ 1, 1 ], + viewport: null + }; + }, + _buildResult: function _buildResult(containerW, containerH, contentW, contentH, scaleX, scaleY) { + Math.abs(containerW - contentW) < 2 && (contentW = containerW); + Math.abs(containerH - contentH) < 2 && (contentH = containerH); + var viewport = cc.rect((containerW - contentW) / 2, (containerH - contentH) / 2, contentW, contentH); + cc.game.renderType === cc.game.RENDER_TYPE_CANVAS; + this._result.scale = [ scaleX, scaleY ]; + this._result.viewport = viewport; + return this._result; + }, + preApply: function preApply(view) {}, + apply: function apply(view, designedResolution) { + return { + scale: [ 1, 1 ] + }; + }, + postApply: function postApply(view) {} + }); + (function() { + var EqualToFrame = cc.Class({ + name: "EqualToFrame", + extends: cc.ContainerStrategy, + apply: function apply(view) { + var frameH = view._frameSize.height, containerStyle = cc.game.container.style; + this._setupContainer(view, view._frameSize.width, view._frameSize.height); + view._isRotated ? containerStyle.margin = "0 0 0 " + frameH + "px" : containerStyle.margin = "0px"; + containerStyle.padding = "0px"; + } + }); + var ProportionalToFrame = cc.Class({ + name: "ProportionalToFrame", + extends: cc.ContainerStrategy, + apply: function apply(view, designedResolution) { + var frameW = view._frameSize.width, frameH = view._frameSize.height, containerStyle = cc.game.container.style, designW = designedResolution.width, designH = designedResolution.height, scaleX = frameW / designW, scaleY = frameH / designH, containerW, containerH; + scaleX < scaleY ? (containerW = frameW, containerH = designH * scaleX) : (containerW = designW * scaleY, + containerH = frameH); + var offx = Math.round((frameW - containerW) / 2); + var offy = Math.round((frameH - containerH) / 2); + containerW = frameW - 2 * offx; + containerH = frameH - 2 * offy; + this._setupContainer(view, containerW, containerH); + true; + view._isRotated ? containerStyle.margin = "0 0 0 " + frameH + "px" : containerStyle.margin = "0px"; + containerStyle.paddingLeft = offx + "px"; + containerStyle.paddingRight = offx + "px"; + containerStyle.paddingTop = offy + "px"; + containerStyle.paddingBottom = offy + "px"; + } + }); + var EqualToWindow = cc.Class({ + name: "EqualToWindow", + extends: EqualToFrame, + preApply: function preApply(view) { + this._super(view); + cc.game.frame = document.documentElement; + }, + apply: function apply(view) { + this._super(view); + this._fixContainer(); + } + }); + var ProportionalToWindow = cc.Class({ + name: "ProportionalToWindow", + extends: ProportionalToFrame, + preApply: function preApply(view) { + this._super(view); + cc.game.frame = document.documentElement; + }, + apply: function apply(view, designedResolution) { + this._super(view, designedResolution); + this._fixContainer(); + } + }); + var OriginalContainer = cc.Class({ + name: "OriginalContainer", + extends: cc.ContainerStrategy, + apply: function apply(view) { + this._setupContainer(view, cc.game.canvas.width, cc.game.canvas.height); + } + }); + var _global = "undefined" === typeof window ? global : window; + var globalAdapter = _global.__globalAdapter; + if (globalAdapter) { + globalAdapter.adaptContainerStrategy && globalAdapter.adaptContainerStrategy(cc.ContainerStrategy.prototype); + globalAdapter.adaptView && globalAdapter.adaptView(View.prototype); + } + cc.ContainerStrategy.EQUAL_TO_FRAME = new EqualToFrame(); + cc.ContainerStrategy.PROPORTION_TO_FRAME = new ProportionalToFrame(); + cc.ContainerStrategy.ORIGINAL_CONTAINER = new OriginalContainer(); + var ExactFit = cc.Class({ + name: "ExactFit", + extends: cc.ContentStrategy, + apply: function apply(view, designedResolution) { + var containerW = cc.game.canvas.width, containerH = cc.game.canvas.height, scaleX = containerW / designedResolution.width, scaleY = containerH / designedResolution.height; + return this._buildResult(containerW, containerH, containerW, containerH, scaleX, scaleY); + } + }); + var ShowAll = cc.Class({ + name: "ShowAll", + extends: cc.ContentStrategy, + apply: function apply(view, designedResolution) { + var containerW = cc.game.canvas.width, containerH = cc.game.canvas.height, designW = designedResolution.width, designH = designedResolution.height, scaleX = containerW / designW, scaleY = containerH / designH, scale = 0, contentW, contentH; + scaleX < scaleY ? (scale = scaleX, contentW = containerW, contentH = designH * scale) : (scale = scaleY, + contentW = designW * scale, contentH = containerH); + return this._buildResult(containerW, containerH, contentW, contentH, scale, scale); + } + }); + var NoBorder = cc.Class({ + name: "NoBorder", + extends: cc.ContentStrategy, + apply: function apply(view, designedResolution) { + var containerW = cc.game.canvas.width, containerH = cc.game.canvas.height, designW = designedResolution.width, designH = designedResolution.height, scaleX = containerW / designW, scaleY = containerH / designH, scale, contentW, contentH; + scaleX < scaleY ? (scale = scaleY, contentW = designW * scale, contentH = containerH) : (scale = scaleX, + contentW = containerW, contentH = designH * scale); + return this._buildResult(containerW, containerH, contentW, contentH, scale, scale); + } + }); + var FixedHeight = cc.Class({ + name: "FixedHeight", + extends: cc.ContentStrategy, + apply: function apply(view, designedResolution) { + var containerW = cc.game.canvas.width, containerH = cc.game.canvas.height, designH = designedResolution.height, scale = containerH / designH, contentW = containerW, contentH = containerH; + return this._buildResult(containerW, containerH, contentW, contentH, scale, scale); + } + }); + var FixedWidth = cc.Class({ + name: "FixedWidth", + extends: cc.ContentStrategy, + apply: function apply(view, designedResolution) { + var containerW = cc.game.canvas.width, containerH = cc.game.canvas.height, designW = designedResolution.width, scale = containerW / designW, contentW = containerW, contentH = containerH; + return this._buildResult(containerW, containerH, contentW, contentH, scale, scale); + } + }); + cc.ContentStrategy.EXACT_FIT = new ExactFit(); + cc.ContentStrategy.SHOW_ALL = new ShowAll(); + cc.ContentStrategy.NO_BORDER = new NoBorder(); + cc.ContentStrategy.FIXED_HEIGHT = new FixedHeight(); + cc.ContentStrategy.FIXED_WIDTH = new FixedWidth(); + })(); + cc.ResolutionPolicy = cc.Class({ + name: "cc.ResolutionPolicy", + ctor: function ctor(containerStg, contentStg) { + this._containerStrategy = null; + this._contentStrategy = null; + this.setContainerStrategy(containerStg); + this.setContentStrategy(contentStg); + }, + preApply: function preApply(view) { + this._containerStrategy.preApply(view); + this._contentStrategy.preApply(view); + }, + apply: function apply(view, designedResolution) { + this._containerStrategy.apply(view, designedResolution); + return this._contentStrategy.apply(view, designedResolution); + }, + postApply: function postApply(view) { + this._containerStrategy.postApply(view); + this._contentStrategy.postApply(view); + }, + setContainerStrategy: function setContainerStrategy(containerStg) { + containerStg instanceof cc.ContainerStrategy && (this._containerStrategy = containerStg); + }, + setContentStrategy: function setContentStrategy(contentStg) { + contentStg instanceof cc.ContentStrategy && (this._contentStrategy = contentStg); + } + }); + js.get(cc.ResolutionPolicy.prototype, "canvasSize", (function() { + return cc.v2(cc.game.canvas.width, cc.game.canvas.height); + })); + cc.ResolutionPolicy.EXACT_FIT = 0; + cc.ResolutionPolicy.NO_BORDER = 1; + cc.ResolutionPolicy.SHOW_ALL = 2; + cc.ResolutionPolicy.FIXED_HEIGHT = 3; + cc.ResolutionPolicy.FIXED_WIDTH = 4; + cc.ResolutionPolicy.UNKNOWN = 5; + cc.view = new View(); + cc.winSize = cc.size(); + module.exports = cc.view; + }), { + "../event/event-target": 114, + "../platform/CCClass": 121, + "../platform/js": 142, + "../renderer": 152 + } ], + 132: [ (function(require, module, exports) { + "use strict"; + cc.visibleRect = { + topLeft: cc.v2(0, 0), + topRight: cc.v2(0, 0), + top: cc.v2(0, 0), + bottomLeft: cc.v2(0, 0), + bottomRight: cc.v2(0, 0), + bottom: cc.v2(0, 0), + center: cc.v2(0, 0), + left: cc.v2(0, 0), + right: cc.v2(0, 0), + width: 0, + height: 0, + init: function init(visibleRect) { + var w = this.width = visibleRect.width; + var h = this.height = visibleRect.height; + var l = visibleRect.x, b = visibleRect.y, t = b + h, r = l + w; + this.topLeft.x = l; + this.topLeft.y = t; + this.topRight.x = r; + this.topRight.y = t; + this.top.x = l + w / 2; + this.top.y = t; + this.bottomLeft.x = l; + this.bottomLeft.y = b; + this.bottomRight.x = r; + this.bottomRight.y = b; + this.bottom.x = l + w / 2; + this.bottom.y = b; + this.center.x = l + w / 2; + this.center.y = b + h / 2; + this.left.x = l; + this.left.y = b + h / 2; + this.right.x = r; + this.right.y = b + h / 2; + } + }; + }), {} ], + 133: [ (function(require, module, exports) { + "use strict"; + var js = require("./js"); + var isPlainEmptyObj = require("./utils").isPlainEmptyObj_DEV; + var DELIMETER = "$_$"; + function createAttrsSingle(owner, superAttrs) { + var attrs = superAttrs ? Object.create(superAttrs) : {}; + js.value(owner, "__attrs__", attrs); + return attrs; + } + function createAttrs(subclass) { + if ("function" !== typeof subclass) { + var instance = subclass; + return createAttrsSingle(instance, getClassAttrs(instance.constructor)); + } + var superClass; + var chains = cc.Class.getInheritanceChain(subclass); + for (var i = chains.length - 1; i >= 0; i--) { + var cls = chains[i]; + var attrs = cls.hasOwnProperty("__attrs__") && cls.__attrs__; + if (!attrs) { + superClass = chains[i + 1]; + createAttrsSingle(cls, superClass && superClass.__attrs__); + } + } + superClass = chains[0]; + createAttrsSingle(subclass, superClass && superClass.__attrs__); + return subclass.__attrs__; + } + function attr(ctor, propName, newAttrs) { + var attrs = getClassAttrs(ctor); + var _key; + true; + var prefix = propName + DELIMETER; + var ret = {}; + for (var key in attrs) key.startsWith(prefix) && (ret[key.slice(prefix.length)] = attrs[key]); + return ret; + } + function getClassAttrs(ctor) { + return ctor.hasOwnProperty("__attrs__") && ctor.__attrs__ || createAttrs(ctor); + } + function setClassAttr(ctor, propName, key, value) { + getClassAttrs(ctor)[propName + DELIMETER + key] = value; + } + function PrimitiveType(name, def) { + this.name = name; + this["default"] = def; + } + PrimitiveType.prototype.toString = function() { + return this.name; + }; + cc.Integer = new PrimitiveType("Integer", 0); + cc.Float = new PrimitiveType("Float", 0); + false; + cc.Boolean = new PrimitiveType("Boolean", false); + cc.String = new PrimitiveType("String", ""); + function getTypeChecker(type, attrName) { + return function(constructor, mainPropName) { + var propInfo = '"' + js.getClassName(constructor) + "." + mainPropName + '"'; + var mainPropAttrs = attr(constructor, mainPropName); + var mainPropAttrsType = mainPropAttrs.type; + mainPropAttrsType === cc.Integer || mainPropAttrsType === cc.Float ? mainPropAttrsType = "Number" : mainPropAttrsType !== cc.String && mainPropAttrsType !== cc.Boolean || (mainPropAttrsType = "" + mainPropAttrsType); + if (mainPropAttrsType !== type) { + cc.warnID(3604, propInfo); + return; + } + if (!mainPropAttrs.hasOwnProperty("default")) return; + var defaultVal = mainPropAttrs["default"]; + if ("undefined" === typeof defaultVal) return; + var isContainer = Array.isArray(defaultVal) || isPlainEmptyObj(defaultVal); + if (isContainer) return; + var defaultType = typeof defaultVal; + var type_lowerCase = type.toLowerCase(); + if (defaultType === type_lowerCase) if ("object" === type_lowerCase) { + if (!defaultVal || defaultVal instanceof mainPropAttrs.ctor) return; + cc.warnID(3605, propInfo, js.getClassName(mainPropAttrs.ctor)); + } else "Number" !== type && cc.warnID(3606, attrName, propInfo, type); else { + if ("function" === defaultType) return; + type === cc.String && null == defaultVal ? cc.warnID(3607, propInfo) : cc.warnID(3611, attrName, propInfo, defaultType); + } + delete mainPropAttrs.type; + }; + } + function getObjTypeChecker(typeCtor) { + return function(classCtor, mainPropName) { + getTypeChecker("Object", "type")(classCtor, mainPropName); + var defaultDef = getClassAttrs(classCtor)[mainPropName + DELIMETER + "default"]; + var defaultVal = require("./CCClass").getDefault(defaultDef); + if (!Array.isArray(defaultVal) && js.isChildClassOf(typeCtor, cc.ValueType)) { + var typename = js.getClassName(typeCtor); + var info = cc.js.formatStr('No need to specify the "type" of "%s.%s" because %s is a child class of ValueType.', js.getClassName(classCtor), mainPropName, typename); + defaultDef ? cc.log(info) : cc.warnID(3612, info, typename, js.getClassName(classCtor), mainPropName, typename); + } + }; + } + module.exports = { + PrimitiveType: PrimitiveType, + attr: attr, + getClassAttrs: getClassAttrs, + setClassAttr: setClassAttr, + DELIMETER: DELIMETER, + getTypeChecker_ET: (false, false) && getTypeChecker, + getObjTypeChecker_ET: (false, false) && getObjTypeChecker, + ScriptUuid: {} + }; + }), { + "./CCClass": 121, + "./js": 142, + "./utils": 145 + } ], + 134: [ (function(require, module, exports) { + "use strict"; + var js = require("./js"); + var fastRemoveAt = js.array.fastRemoveAt; + function empty() {} + function CallbackInfo() { + this.callback = empty; + this.target = void 0; + this.once = false; + } + CallbackInfo.prototype.set = function(callback, target, once) { + this.callback = callback; + this.target = target; + this.once = !!once; + }; + var callbackInfoPool = new js.Pool(function(info) { + info.callback = empty; + info.target = void 0; + info.once = false; + return true; + }, 32); + callbackInfoPool.get = function() { + return this._get() || new CallbackInfo(); + }; + function CallbackList() { + this.callbackInfos = []; + this.isInvoking = false; + this.containCanceled = false; + } + var proto = CallbackList.prototype; + proto.removeByCallback = function(cb) { + for (var i = 0; i < this.callbackInfos.length; ++i) { + var info = this.callbackInfos[i]; + if (info && info.callback === cb) { + callbackInfoPool.put(info); + fastRemoveAt(this.callbackInfos, i); + --i; + } + } + }; + proto.removeByTarget = function(target) { + for (var i = 0; i < this.callbackInfos.length; ++i) { + var info = this.callbackInfos[i]; + if (info && info.target === target) { + callbackInfoPool.put(info); + fastRemoveAt(this.callbackInfos, i); + --i; + } + } + }; + proto.cancel = function(index) { + var info = this.callbackInfos[index]; + if (info) { + callbackInfoPool.put(info); + this.callbackInfos[index] = null; + } + this.containCanceled = true; + }; + proto.cancelAll = function() { + for (var i = 0; i < this.callbackInfos.length; i++) { + var info = this.callbackInfos[i]; + if (info) { + callbackInfoPool.put(info); + this.callbackInfos[i] = null; + } + } + this.containCanceled = true; + }; + proto.purgeCanceled = function() { + for (var i = this.callbackInfos.length - 1; i >= 0; --i) { + var info = this.callbackInfos[i]; + info || fastRemoveAt(this.callbackInfos, i); + } + this.containCanceled = false; + }; + proto.clear = function() { + this.cancelAll(); + this.callbackInfos.length = 0; + this.isInvoking = false; + this.containCanceled = false; + }; + var MAX_SIZE = 16; + var callbackListPool = new js.Pool(function(info) { + info.callbackInfos = []; + info.isInvoking = false; + info.containCanceled = false; + return true; + }, MAX_SIZE); + callbackListPool.get = function() { + return this._get() || new CallbackList(); + }; + function CallbacksInvoker() { + this._callbackTable = js.createMap(true); + } + proto = CallbacksInvoker.prototype; + proto.on = function(key, callback, target, once) { + var list = this._callbackTable[key]; + list || (list = this._callbackTable[key] = callbackListPool.get()); + var info = callbackInfoPool.get(); + info.set(callback, target, once); + list.callbackInfos.push(info); + }; + proto.hasEventListener = function(key, callback, target) { + var list = this._callbackTable[key]; + if (!list) return false; + var infos = list.callbackInfos; + if (!callback) { + if (list.isInvoking) { + for (var i = 0; i < infos.length; ++i) if (infos[i]) return true; + return false; + } + return infos.length > 0; + } + for (var _i = 0; _i < infos.length; ++_i) { + var info = infos[_i]; + if (info && info.callback === callback && info.target === target) return true; + } + return false; + }; + proto.removeAll = function(keyOrTarget) { + if ("string" === typeof keyOrTarget) { + var list = this._callbackTable[keyOrTarget]; + if (list) if (list.isInvoking) list.cancelAll(); else { + list.clear(); + callbackListPool.put(list); + delete this._callbackTable[keyOrTarget]; + } + } else if (keyOrTarget) for (var key in this._callbackTable) { + var _list = this._callbackTable[key]; + if (_list.isInvoking) { + var infos = _list.callbackInfos; + for (var i = 0; i < infos.length; ++i) { + var info = infos[i]; + info && info.target === keyOrTarget && _list.cancel(i); + } + } else _list.removeByTarget(keyOrTarget); + } + }; + proto.off = function(key, callback, target) { + var list = this._callbackTable[key]; + if (list) { + var infos = list.callbackInfos; + for (var i = 0; i < infos.length; ++i) { + var info = infos[i]; + if (info && info.callback === callback && info.target === target) { + if (list.isInvoking) list.cancel(i); else { + fastRemoveAt(infos, i); + callbackInfoPool.put(info); + } + break; + } + } + } + }; + proto.emit = function(key, arg1, arg2, arg3, arg4, arg5) { + var list = this._callbackTable[key]; + if (list) { + var rootInvoker = !list.isInvoking; + list.isInvoking = true; + var infos = list.callbackInfos; + for (var i = 0, len = infos.length; i < len; ++i) { + var info = infos[i]; + if (info) { + var target = info.target; + var callback = info.callback; + info.once && this.off(key, callback, target); + target ? callback.call(target, arg1, arg2, arg3, arg4, arg5) : callback(arg1, arg2, arg3, arg4, arg5); + } + } + if (rootInvoker) { + list.isInvoking = false; + list.containCanceled && list.purgeCanceled(); + } + } + }; + false; + module.exports = CallbacksInvoker; + }), { + "./js": 142 + } ], + 135: [ (function(require, module, exports) { + "use strict"; + function deepFlatten(strList, array) { + for (var i = 0; i < array.length; i++) { + var item = array[i]; + Array.isArray(item) ? deepFlatten(strList, item) : strList.push(item); + } + } + function flattenCodeArray(array) { + var separator = ""; + var strList = []; + deepFlatten(strList, array); + return strList.join(separator); + } + module.exports = { + flattenCodeArray: flattenCodeArray + }; + }), {} ], + 136: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = deserialize; + exports.getDependUuidList = getDependUuidList; + exports.hasNativeDep = hasNativeDep; + exports.packCustomObjData = packCustomObjData; + exports.unpackJSONs = unpackJSONs; + var _js = _interopRequireDefault(require("./js")); + var _vec = _interopRequireDefault(require("../value-types/vec2")); + var _vec2 = _interopRequireDefault(require("../value-types/vec3")); + var _vec3 = _interopRequireDefault(require("../value-types/vec4")); + var _color = _interopRequireDefault(require("../value-types/color")); + var _size = _interopRequireDefault(require("../value-types/size")); + var _rect = _interopRequireDefault(require("../value-types/rect")); + var _quat = _interopRequireDefault(require("../value-types/quat")); + var _mat = _interopRequireDefault(require("../value-types/mat4")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var SUPPORT_MIN_FORMAT_VERSION = 1; + var EMPTY_PLACEHOLDER = 0; + var BuiltinValueTypes = [ _vec["default"], _vec2["default"], _vec3["default"], _quat["default"], _color["default"], _size["default"], _rect["default"], _mat["default"] ]; + function BuiltinValueTypeParsers_xyzw(obj, data) { + obj.x = data[1]; + obj.y = data[2]; + obj.z = data[3]; + obj.w = data[4]; + } + var BuiltinValueTypeSetters = [ function(obj, data) { + obj.x = data[1]; + obj.y = data[2]; + }, function(obj, data) { + obj.x = data[1]; + obj.y = data[2]; + obj.z = data[3]; + }, BuiltinValueTypeParsers_xyzw, BuiltinValueTypeParsers_xyzw, function(obj, data) { + obj._val = data[1]; + }, function(obj, data) { + obj.width = data[1]; + obj.height = data[2]; + }, function(obj, data) { + obj.x = data[1]; + obj.y = data[2]; + obj.width = data[3]; + obj.height = data[4]; + }, function(obj, data) { + _mat["default"].fromArray(obj, data, 1); + } ]; + function serializeBuiltinValueTypes(obj) { + var ctor = obj.constructor; + var typeId = BuiltinValueTypes.indexOf(ctor); + switch (ctor) { + case _vec["default"]: + return [ typeId, obj.x, obj.y ]; + + case _vec2["default"]: + return [ typeId, obj.x, obj.y, obj.z ]; + + case _vec3["default"]: + case _quat["default"]: + return [ typeId, obj.x, obj.y, obj.z, obj.w ]; + + case _color["default"]: + return [ typeId, obj._val ]; + + case _size["default"]: + return [ typeId, obj.width, obj.height ]; + + case _rect["default"]: + return [ typeId, obj.x, obj.y, obj.width, obj.height ]; + + case _mat["default"]: + var res = new Array(17); + res[0] = typeId; + _mat["default"].toArray(res, obj, 1); + return res; + + default: + return null; + } + } + var DataTypeID = { + SimpleType: 0, + InstanceRef: 1, + Array_InstanceRef: 2, + Array_AssetRefByInnerObj: 3, + Class: 4, + ValueTypeCreated: 5, + AssetRefByInnerObj: 6, + TRS: 7, + ValueType: 8, + Array_Class: 9, + CustomizedClass: 10, + Dict: 11, + Array: 12, + ARRAY_LENGTH: 13 + }; + var CLASS_TYPE = 0; + var CLASS_KEYS = 1; + var CLASS_PROP_TYPE_OFFSET = 2; + var MASK_CLASS = 0; + var OBJ_DATA_MASK = 0; + var CUSTOM_OBJ_DATA_CLASS = 0; + var CUSTOM_OBJ_DATA_CONTENT = 1; + var VALUETYPE_SETTER = 0; + var DICT_JSON_LAYOUT = 0; + var ARRAY_ITEM_VALUES = 0; + var Refs = { + EACH_RECORD_LENGTH: 3, + OWNER_OFFSET: 0, + KEY_OFFSET: 1, + TARGET_OFFSET: 2 + }; + var File = { + Version: 0, + Context: 0, + SharedUuids: 1, + SharedStrings: 2, + SharedClasses: 3, + SharedMasks: 4, + Instances: 5, + InstanceTypes: 6, + Refs: 7, + DependObjs: 8, + DependKeys: 9, + DependUuidIndices: 10, + ARRAY_LENGTH: 11 + }; + var PACKED_SECTIONS = 5; + var Details = (function() { + function Details() { + this.uuidObjList = null; + this.uuidPropList = null; + this.uuidList = null; + } + var _proto = Details.prototype; + _proto.init = function init(data) { + this.uuidObjList = data[8]; + this.uuidPropList = data[9]; + this.uuidList = data[10]; + }; + _proto.reset = function reset() { + this.uuidList = null; + this.uuidObjList = null; + this.uuidPropList = null; + }; + _proto.push = function push(obj, propName, uuid) { + this.uuidObjList.push(obj); + this.uuidPropList.push(propName); + this.uuidList.push(uuid); + }; + return Details; + })(); + Details.pool = new _js["default"].Pool(function(obj) { + obj.reset(); + }, 5); + Details.pool.get = function() { + return this._get() || new Details(); + }; + false, false; + function dereference(refs, instances, strings) { + var dataLength = refs.length - 1; + var i = 0; + var instanceOffset = 3 * refs[dataLength]; + for (;i < instanceOffset; i += 3) { + var _owner = refs[i]; + var target = instances[refs[i + 2]]; + var keyIndex = refs[i + 1]; + keyIndex >= 0 ? _owner[strings[keyIndex]] = target : _owner[~keyIndex] = target; + } + for (;i < dataLength; i += 3) { + var _owner2 = instances[refs[i]]; + var _target = instances[refs[i + 2]]; + var _keyIndex = refs[i + 1]; + _keyIndex >= 0 ? _owner2[strings[_keyIndex]] = _target : _owner2[~_keyIndex] = _target; + } + } + function deserializeCCObject(data, objectData) { + var mask = data[4][objectData[0]]; + var clazz = mask[0]; + var ctor = clazz[0]; + var obj = new ctor(); + var keys = clazz[1]; + var classTypeOffset = clazz[2]; + var maskTypeOffset = mask[mask.length - 1]; + var i = 1; + for (;i < maskTypeOffset; ++i) { + var _key = keys[mask[i]]; + obj[_key] = objectData[i]; + } + for (;i < objectData.length; ++i) { + var _key2 = keys[mask[i]]; + var _type = clazz[mask[i] + classTypeOffset]; + var op = ASSIGNMENTS[_type]; + op(data, obj, _key2, objectData[i]); + } + return obj; + } + function deserializeCustomCCObject(data, ctor, value) { + var obj = new ctor(); + obj._deserialize ? obj._deserialize(value, data[0]) : cc.errorID(5303, _js["default"].getClassName(ctor)); + return obj; + } + function assignSimple(data, owner, key, value) { + owner[key] = value; + } + function assignInstanceRef(data, owner, key, value) { + value >= 0 ? owner[key] = data[5][value] : data[7][3 * ~value] = owner; + } + function genArrayParser(parser) { + return function(data, owner, key, value) { + owner[key] = value; + for (var i = 0; i < value.length; ++i) parser(data, value, i, value[i]); + }; + } + function parseAssetRefByInnerObj(data, owner, key, value) { + owner[key] = null; + data[8][value] = owner; + } + function parseClass(data, owner, key, value) { + owner[key] = deserializeCCObject(data, value); + } + function parseCustomClass(data, owner, key, value) { + var ctor = data[3][value[0]]; + owner[key] = deserializeCustomCCObject(data, ctor, value[1]); + } + function parseValueTypeCreated(data, owner, key, value) { + BuiltinValueTypeSetters[value[0]](owner[key], value); + } + function parseValueType(data, owner, key, value) { + var val = new BuiltinValueTypes[value[0]](); + BuiltinValueTypeSetters[value[0]](val, value); + owner[key] = val; + } + function parseTRS(data, owner, key, value) { + var typedArray = owner[key]; + typedArray.set(value); + } + function parseDict(data, owner, key, value) { + var dict = value[0]; + owner[key] = dict; + for (var i = 1; i < value.length; i += 3) { + var _key3 = value[i]; + var _type2 = value[i + 1]; + var subValue = value[i + 2]; + var op = ASSIGNMENTS[_type2]; + op(data, dict, _key3, subValue); + } + } + function parseArray(data, owner, key, value) { + var array = value[0]; + owner[key] = array; + for (var i = 0; i < array.length; ++i) { + var subValue = array[i]; + var _type3 = value[i + 1]; + if (0 !== _type3) { + var op = ASSIGNMENTS[_type3]; + op(data, array, i, subValue); + } + } + } + var ASSIGNMENTS = new Array(13); + ASSIGNMENTS[0] = assignSimple; + ASSIGNMENTS[1] = assignInstanceRef; + ASSIGNMENTS[2] = genArrayParser(assignInstanceRef); + ASSIGNMENTS[3] = genArrayParser(parseAssetRefByInnerObj); + ASSIGNMENTS[4] = parseClass; + ASSIGNMENTS[5] = parseValueTypeCreated; + ASSIGNMENTS[6] = parseAssetRefByInnerObj; + ASSIGNMENTS[7] = parseTRS; + ASSIGNMENTS[8] = parseValueType; + ASSIGNMENTS[9] = genArrayParser(parseClass); + ASSIGNMENTS[10] = parseCustomClass; + ASSIGNMENTS[11] = parseDict; + ASSIGNMENTS[12] = parseArray; + function parseInstances(data) { + var instances = data[5]; + var instanceTypes = data[6]; + var instanceTypesLen = 0 === instanceTypes ? 0 : instanceTypes.length; + var rootIndex = instances[instances.length - 1]; + var normalObjectCount = instances.length - instanceTypesLen; + if ("number" !== typeof rootIndex) rootIndex = 0; else { + rootIndex < 0 && (rootIndex = ~rootIndex); + --normalObjectCount; + } + var insIndex = 0; + for (;insIndex < normalObjectCount; ++insIndex) instances[insIndex] = deserializeCCObject(data, instances[insIndex]); + var classes = data[3]; + for (var typeIndex = 0; typeIndex < instanceTypesLen; ++typeIndex, ++insIndex) { + var _type4 = instanceTypes[typeIndex]; + var eachData = instances[insIndex]; + if (_type4 >= 0) { + var ctor = classes[_type4]; + instances[insIndex] = deserializeCustomCCObject(data, ctor, eachData); + } else { + _type4 = ~_type4; + var op = ASSIGNMENTS[_type4]; + op(data, instances, insIndex, eachData); + } + } + return rootIndex; + } + function getMissingClass(hasCustomFinder, type) { + hasCustomFinder || deserialize.reportMissingClass(type); + return Object; + } + function doLookupClass(classFinder, type, container, index, silent, hasCustomFinder) { + var klass = classFinder(type); + if (!klass) { + if (silent) { + container[index] = (function(container, index, type) { + return function proxy() { + var klass = classFinder(type) || getMissingClass(hasCustomFinder, type); + container[index] = klass; + return new klass(); + }; + })(container, index, type); + return; + } + klass = getMissingClass(hasCustomFinder, type); + } + container[index] = klass; + } + function lookupClasses(data, silent, customFinder) { + var classFinder = customFinder || _js["default"]._getClassById; + var classes = data[3]; + for (var i = 0; i < classes.length; ++i) { + var klassLayout = classes[i]; + if ("string" !== typeof klassLayout) { + true; + if ("function" === typeof klassLayout[0]) throw new Error("Can not deserialize the same JSON data again."); + var _type5 = klassLayout[0]; + doLookupClass(classFinder, _type5, klassLayout, CLASS_TYPE, silent, customFinder); + } else doLookupClass(classFinder, klassLayout, classes, i, silent, customFinder); + } + } + function cacheMasks(data) { + var masks = data[4]; + if (masks) { + var classes = data[3]; + for (var i = 0; i < masks.length; ++i) { + var mask = masks[i]; + mask[0] = classes[mask[0]]; + } + } + } + function parseResult(data) { + var instances = data[5]; + var sharedStrings = data[2]; + var dependSharedUuids = data[1]; + var dependObjs = data[8]; + var dependKeys = data[9]; + var dependUuids = data[10]; + for (var i = 0; i < dependObjs.length; ++i) { + var _obj = dependObjs[i]; + "number" === typeof _obj && (dependObjs[i] = instances[_obj]); + var _key4 = dependKeys[i]; + if ("number" === typeof _key4) { + _key4 = _key4 >= 0 ? sharedStrings[_key4] : ~_key4; + dependKeys[i] = _key4; + } + var uuid = dependUuids[i]; + "number" === typeof uuid && (dependUuids[i] = dependSharedUuids[uuid]); + } + } + function deserialize(data, details, options) { + false; + "string" === typeof data && (data = JSON.parse(data)); + var borrowDetails = !details; + details = details || Details.pool.get(); + details.init(data); + options = options || {}; + var version = data[0]; + var preprocessed = false; + if ("object" === typeof version) { + preprocessed = version.preprocessed; + version = version.version; + } + if (version < SUPPORT_MIN_FORMAT_VERSION) throw new Error(cc.debug.getError(5304, version)); + options._version = version; + options.result = details; + data[0] = options; + if (!preprocessed) { + lookupClasses(data, false, options.classFinder); + cacheMasks(data); + } + cc.game._isCloning = true; + var instances = data[5]; + var rootIndex = parseInstances(data); + cc.game._isCloning = false; + data[7] && dereference(data[7], instances, data[2]); + parseResult(data); + borrowDetails && Details.pool.put(details); + return instances[rootIndex]; + } + deserialize.Details = Details; + var FileInfo = function FileInfo(version) { + this.preprocessed = true; + this.version = version; + }; + function unpackJSONs(data, classFinder) { + if (data[0] < SUPPORT_MIN_FORMAT_VERSION) throw new Error(cc.debug.getError(5304, data[0])); + lookupClasses(data, true, classFinder); + cacheMasks(data); + var version = new FileInfo(data[0]); + var sharedUuids = data[1]; + var sharedStrings = data[2]; + var sharedClasses = data[3]; + var sharedMasks = data[4]; + var sections = data[PACKED_SECTIONS]; + for (var i = 0; i < sections.length; ++i) sections[i].unshift(version, sharedUuids, sharedStrings, sharedClasses, sharedMasks); + return sections; + } + function packCustomObjData(type, data, hasNativeDep) { + return [ SUPPORT_MIN_FORMAT_VERSION, EMPTY_PLACEHOLDER, EMPTY_PLACEHOLDER, [ type ], EMPTY_PLACEHOLDER, hasNativeDep ? [ data, -1 ] : [ data ], [ 0 ], EMPTY_PLACEHOLDER, [], [], [] ]; + } + function hasNativeDep(data) { + var instances = data[5]; + var rootInfo = instances[instances.length - 1]; + return "number" === typeof rootInfo && rootInfo < 0; + } + false; + function getDependUuidList(json) { + var sharedUuids = json[1]; + return json[10].map((function(index) { + return sharedUuids[index]; + })); + } + false, false; + false; + }), { + "../value-types/color": 219, + "../value-types/mat4": 222, + "../value-types/quat": 223, + "../value-types/rect": 224, + "../value-types/size": 225, + "../value-types/vec2": 229, + "../value-types/vec3": 230, + "../value-types/vec4": 231, + "./js": 142 + } ], + 137: [ (function(require, module, exports) { + "use strict"; + var _deserializeCompiled = _interopRequireDefault(require("./deserialize-compiled")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + _deserializeCompiled["default"].reportMissingClass = function(id) { + false; + cc.warnID(5302, id); + }; + var deserializeForEditor; + true; + cc.deserialize = _deserializeCompiled["default"]; + }), { + "./deserialize-compiled": 136, + "./deserialize-editor": void 0 + } ], + 138: [ (function(require, module, exports) { + "use strict"; + var NonUuidMark = "."; + function IdGenerater(category) { + this.id = 0 | 998 * Math.random(); + this.prefix = category ? category + NonUuidMark : ""; + } + IdGenerater.prototype.getNewId = function() { + return this.prefix + ++this.id; + }; + IdGenerater.global = new IdGenerater("global"); + module.exports = IdGenerater; + }), {} ], + 139: [ (function(require, module, exports) { + "use strict"; + require("./js"); + require("./CCClass"); + require("./CCClassDecorator"); + require("./CCEnum"); + require("./CCObject"); + require("./callbacks-invoker"); + require("./deserialize"); + require("./instantiate"); + require("./instantiate-jit"); + require("./requiring-frame"); + require("./CCSys"); + require("./CCMacro"); + true; + require("./CCVisibleRect"); + }), { + "./CCClass": 121, + "./CCClassDecorator": 122, + "./CCEnum": 123, + "./CCMacro": 126, + "./CCObject": 127, + "./CCSys": 130, + "./CCVisibleRect": 132, + "./callbacks-invoker": 134, + "./deserialize": 137, + "./instantiate": 141, + "./instantiate-jit": 140, + "./js": 142, + "./requiring-frame": 144 + } ], + 140: [ (function(require, module, exports) { + "use strict"; + var CCObject = require("./CCObject"); + var Destroyed = CCObject.Flags.Destroyed; + var PersistentMask = CCObject.Flags.PersistentMask; + var Attr = require("./attribute"); + var js = require("./js"); + var CCClass = require("./CCClass"); + var Compiler = require("./compiler"); + var DEFAULT = Attr.DELIMETER + "default"; + var IDENTIFIER_RE = CCClass.IDENTIFIER_RE; + var escapeForJS = CCClass.escapeForJS; + var VAR = "var "; + var LOCAL_OBJ = "o"; + var LOCAL_TEMP_OBJ = "t"; + var LOCAL_ARRAY = "a"; + var LINE_INDEX_OF_NEW_OBJ = 0; + var DEFAULT_MODULE_CACHE = { + "cc.Node": "cc.Node", + "cc.Sprite": "cc.Sprite", + "cc.Label": "cc.Label", + "cc.Button": "cc.Button", + "cc.Widget": "cc.Widget", + "cc.Animation": "cc.Animation", + "cc.ClickEvent": false, + "cc.PrefabInfo": false + }; + try { + !Float32Array.name && (Float32Array.name = "Float32Array"); + !Float64Array.name && (Float64Array.name = "Float64Array"); + !Int8Array.name && (Int8Array.name = "Int8Array"); + !Int16Array.name && (Int16Array.name = "Int16Array"); + !Int32Array.name && (Int32Array.name = "Int32Array"); + !Uint8Array.name && (Uint8Array.name = "Uint8Array"); + !Uint16Array.name && (Uint16Array.name = "Uint16Array"); + !Uint32Array.name && (Uint32Array.name = "Uint32Array"); + !Uint8ClampedArray.name && (Uint8ClampedArray.name = "Uint8ClampedArray"); + } catch (e) {} + function getTypedArrayName(constructor) { + if (constructor === Float32Array) return "Float32Array"; + if (constructor === Float64Array) return "Float64Array"; + if (constructor === Int8Array) return "Int8Array"; + if (constructor === Int16Array) return "Int16Array"; + if (constructor === Int32Array) return "Int32Array"; + if (constructor === Uint8Array) return "Uint8Array"; + if (constructor === Uint16Array) return "Uint16Array"; + if (constructor === Uint32Array) return "Uint32Array"; + if (constructor === Uint8ClampedArray) return "Uint8ClampedArray"; + throw new Error("Unknown TypedArray to instantiate: " + constructor); + } + function Declaration(varName, expression) { + this.varName = varName; + this.expression = expression; + } + Declaration.prototype.toString = function() { + return VAR + this.varName + "=" + this.expression + ";"; + }; + function mergeDeclaration(statement, expression) { + return expression instanceof Declaration ? new Declaration(expression.varName, statement + expression.expression) : statement + expression; + } + function writeAssignment(codeArray, statement, expression) { + if (Array.isArray(expression)) { + expression[0] = mergeDeclaration(statement, expression[0]); + codeArray.push(expression); + } else codeArray.push(mergeDeclaration(statement, expression) + ";"); + } + function Assignments(targetExpression) { + this._exps = []; + this._targetExp = targetExpression; + } + Assignments.prototype.append = function(key, expression) { + this._exps.push([ key, expression ]); + }; + Assignments.prototype.writeCode = function(codeArray) { + var targetVar; + if (this._exps.length > 1) { + codeArray.push(LOCAL_TEMP_OBJ + "=" + this._targetExp + ";"); + targetVar = LOCAL_TEMP_OBJ; + } else { + if (1 !== this._exps.length) return; + targetVar = this._targetExp; + } + for (var i = 0; i < this._exps.length; i++) { + var pair = this._exps[i]; + writeAssignment(codeArray, targetVar + getPropAccessor(pair[0]) + "=", pair[1]); + } + }; + Assignments.pool = new js.Pool(function(obj) { + obj._exps.length = 0; + obj._targetExp = null; + }, 1); + Assignments.pool.get = function(targetExpression) { + var cache = this._get() || new Assignments(); + cache._targetExp = targetExpression; + return cache; + }; + function equalsToDefault(def, value) { + if ("function" === typeof def) try { + def = def(); + } catch (e) { + return false; + } + if (def === value) return true; + if (def && value && "object" === typeof def && "object" === typeof value && def.constructor === value.constructor) if (def instanceof cc.ValueType) { + if (def.equals(value)) return true; + } else { + if (Array.isArray(def)) return 0 === def.length && 0 === value.length; + if (def.constructor === Object) return js.isEmptyObject(def) && js.isEmptyObject(value); + } + return false; + } + function getPropAccessor(key) { + return IDENTIFIER_RE.test(key) ? "." + key : "[" + escapeForJS(key) + "]"; + } + function Parser(obj, parent) { + this.parent = parent; + this.objsToClear_iN$t = []; + this.codeArray = []; + this.objs = []; + this.funcs = []; + this.funcModuleCache = js.createMap(); + js.mixin(this.funcModuleCache, DEFAULT_MODULE_CACHE); + this.globalVariables = []; + this.globalVariableId = 0; + this.localVariableId = 0; + this.codeArray.push(VAR + LOCAL_OBJ + "," + LOCAL_TEMP_OBJ + ";", "if(R){", LOCAL_OBJ + "=R;", "}else{", LOCAL_OBJ + "=R=new " + this.getFuncModule(obj.constructor, true) + "();", "}"); + js.value(obj, "_iN$t", { + globalVar: "R" + }, true); + this.objsToClear_iN$t.push(obj); + this.enumerateObject(this.codeArray, obj); + var globalVariablesDeclaration; + this.globalVariables.length > 0 && (globalVariablesDeclaration = VAR + this.globalVariables.join(",") + ";"); + var code = Compiler.flattenCodeArray([ "return (function(R){", globalVariablesDeclaration || [], this.codeArray, "return o;", "})" ]); + this.result = Function("O", "F", code)(this.objs, this.funcs); + for (var i = 0, len = this.objsToClear_iN$t.length; i < len; ++i) this.objsToClear_iN$t[i]._iN$t = null; + this.objsToClear_iN$t.length = 0; + } + var proto = Parser.prototype; + proto.getFuncModule = function(func, usedInNew) { + var clsName = js.getClassName(func); + if (clsName) { + var cache = this.funcModuleCache[clsName]; + if (cache) return cache; + if (void 0 === cache) { + var clsNameIsModule = -1 !== clsName.indexOf("."); + if (clsNameIsModule) try { + clsNameIsModule = func === Function("return " + clsName)(); + if (clsNameIsModule) { + this.funcModuleCache[clsName] = clsName; + return clsName; + } + } catch (e) {} + } + } + var index = this.funcs.indexOf(func); + if (index < 0) { + index = this.funcs.length; + this.funcs.push(func); + } + var res = "F[" + index + "]"; + usedInNew && (res = "(" + res + ")"); + this.funcModuleCache[clsName] = res; + return res; + }; + proto.getObjRef = function(obj) { + var index = this.objs.indexOf(obj); + if (index < 0) { + index = this.objs.length; + this.objs.push(obj); + } + return "O[" + index + "]"; + }; + proto.setValueType = function(codeArray, defaultValue, srcValue, targetExpression) { + var assignments = Assignments.pool.get(targetExpression); + var fastDefinedProps = defaultValue.constructor.__props__; + fastDefinedProps || (fastDefinedProps = Object.keys(defaultValue)); + for (var i = 0; i < fastDefinedProps.length; i++) { + var propName = fastDefinedProps[i]; + var prop = srcValue[propName]; + if (defaultValue[propName] === prop) continue; + var expression = this.enumerateField(srcValue, propName, prop); + assignments.append(propName, expression); + } + assignments.writeCode(codeArray); + Assignments.pool.put(assignments); + }; + proto.enumerateCCClass = function(codeArray, obj, klass) { + var props = klass.__values__; + var attrs = Attr.getClassAttrs(klass); + for (var p = 0; p < props.length; p++) { + var key = props[p]; + var val = obj[key]; + var defaultValue = attrs[key + DEFAULT]; + if (equalsToDefault(defaultValue, val)) continue; + if ("object" === typeof val && val instanceof cc.ValueType) { + defaultValue = CCClass.getDefault(defaultValue); + if (defaultValue && defaultValue.constructor === val.constructor) { + var targetExpression = LOCAL_OBJ + getPropAccessor(key); + this.setValueType(codeArray, defaultValue, val, targetExpression); + continue; + } + } + this.setObjProp(codeArray, obj, key, val); + } + }; + proto.instantiateArray = function(value) { + if (0 === value.length) return "[]"; + var arrayVar = LOCAL_ARRAY + ++this.localVariableId; + var declaration = new Declaration(arrayVar, "new Array(" + value.length + ")"); + var codeArray = [ declaration ]; + js.value(value, "_iN$t", { + globalVar: "", + source: codeArray + }, true); + this.objsToClear_iN$t.push(value); + for (var i = 0; i < value.length; ++i) { + var statement = arrayVar + "[" + i + "]="; + var expression = this.enumerateField(value, i, value[i]); + writeAssignment(codeArray, statement, expression); + } + return codeArray; + }; + proto.instantiateTypedArray = function(value) { + var type = value.constructor.name || getTypedArrayName(value.constructor); + if (0 === value.length) return "new " + type; + var arrayVar = LOCAL_ARRAY + ++this.localVariableId; + var declaration = new Declaration(arrayVar, "new " + type + "(" + value.length + ")"); + var codeArray = [ declaration ]; + value._iN$t = { + globalVar: "", + source: codeArray + }; + this.objsToClear_iN$t.push(value); + for (var i = 0; i < value.length; ++i) if (0 !== value[i]) { + var statement = arrayVar + "[" + i + "]="; + writeAssignment(codeArray, statement, value[i]); + } + return codeArray; + }; + proto.enumerateField = function(obj, key, value) { + if ("object" === typeof value && value) { + var _iN$t = value._iN$t; + if (_iN$t) { + var globalVar = _iN$t.globalVar; + if (!globalVar) { + globalVar = _iN$t.globalVar = "v" + ++this.globalVariableId; + this.globalVariables.push(globalVar); + var line = _iN$t.source[LINE_INDEX_OF_NEW_OBJ]; + _iN$t.source[LINE_INDEX_OF_NEW_OBJ] = mergeDeclaration(globalVar + "=", line); + } + return globalVar; + } + return ArrayBuffer.isView(value) ? this.instantiateTypedArray(value) : Array.isArray(value) ? this.instantiateArray(value) : this.instantiateObj(value); + } + if ("function" === typeof value) return this.getFuncModule(value); + if ("string" === typeof value) return escapeForJS(value); + "_objFlags" === key && obj instanceof CCObject && (value &= PersistentMask); + return value; + }; + proto.setObjProp = function(codeArray, obj, key, value) { + var statement = LOCAL_OBJ + getPropAccessor(key) + "="; + var expression = this.enumerateField(obj, key, value); + writeAssignment(codeArray, statement, expression); + }; + proto.enumerateObject = function(codeArray, obj) { + var klass = obj.constructor; + if (cc.Class._isCCClass(klass)) this.enumerateCCClass(codeArray, obj, klass); else for (var key in obj) { + if (!obj.hasOwnProperty(key) || 95 === key.charCodeAt(0) && 95 === key.charCodeAt(1) && "__type__" !== key) continue; + var value = obj[key]; + if ("object" === typeof value && value && value === obj._iN$t) continue; + this.setObjProp(codeArray, obj, key, value); + } + }; + proto.instantiateObj = function(obj) { + if (obj instanceof cc.ValueType) return CCClass.getNewValueTypeCode(obj); + if (obj instanceof cc.Asset) return this.getObjRef(obj); + if (obj._objFlags & Destroyed) return null; + var createCode; + var ctor = obj.constructor; + if (cc.Class._isCCClass(ctor)) { + if (this.parent) if (this.parent instanceof cc.Component) { + if (obj instanceof cc._BaseNode || obj instanceof cc.Component) return this.getObjRef(obj); + } else if (this.parent instanceof cc._BaseNode) if (obj instanceof cc._BaseNode) { + if (!obj.isChildOf(this.parent)) return this.getObjRef(obj); + } else if (obj instanceof cc.Component && !obj.node.isChildOf(this.parent)) return this.getObjRef(obj); + createCode = new Declaration(LOCAL_OBJ, "new " + this.getFuncModule(ctor, true) + "()"); + } else if (ctor === Object) createCode = new Declaration(LOCAL_OBJ, "{}"); else { + if (ctor) return this.getObjRef(obj); + createCode = new Declaration(LOCAL_OBJ, "Object.create(null)"); + } + var codeArray = [ createCode ]; + js.value(obj, "_iN$t", { + globalVar: "", + source: codeArray + }, true); + this.objsToClear_iN$t.push(obj); + this.enumerateObject(codeArray, obj); + return [ "(function(){", codeArray, "return o;})();" ]; + }; + function compile(node) { + var root = node instanceof cc._BaseNode && node; + var parser = new Parser(node, root); + return parser.result; + } + module.exports = { + compile: compile, + equalsToDefault: equalsToDefault + }; + false; + }), { + "./CCClass": 121, + "./CCObject": 127, + "./attribute": 133, + "./compiler": 135, + "./js": 142 + } ], + 141: [ (function(require, module, exports) { + "use strict"; + var CCObject = require("./CCObject"); + var CCValueType = require("../value-types/value-type"); + var Destroyed = CCObject.Flags.Destroyed; + var PersistentMask = CCObject.Flags.PersistentMask; + var _isDomNode = require("./utils").isDomNode; + var js = require("./js"); + function instantiate(original, internal_force) { + if (!internal_force) { + if ("object" !== typeof original || Array.isArray(original)) { + false; + return null; + } + if (!original) { + false; + return null; + } + if (!cc.isValid(original)) { + false; + return null; + } + false; + } + var clone; + if (original instanceof CCObject) { + if (original._instantiate) { + cc.game._isCloning = true; + clone = original._instantiate(null, true); + cc.game._isCloning = false; + return clone; + } + if (original instanceof cc.Asset) { + false; + return null; + } + } + cc.game._isCloning = true; + clone = doInstantiate(original); + cc.game._isCloning = false; + return clone; + } + var objsToClearTmpVar = []; + function doInstantiate(obj, parent) { + if (Array.isArray(obj)) { + false; + return null; + } + if (_isDomNode && _isDomNode(obj)) { + false; + return null; + } + var clone; + if (obj._iN$t) clone = obj._iN$t; else if (obj.constructor) { + var klass = obj.constructor; + clone = new klass(); + } else clone = Object.create(null); + enumerateObject(obj, clone, parent); + for (var i = 0, len = objsToClearTmpVar.length; i < len; ++i) objsToClearTmpVar[i]._iN$t = null; + objsToClearTmpVar.length = 0; + return clone; + } + function enumerateCCClass(klass, obj, clone, parent) { + var props = klass.__values__; + for (var p = 0; p < props.length; p++) { + var key = props[p]; + var value = obj[key]; + if ("object" === typeof value && value) { + var initValue = clone[key]; + initValue instanceof CCValueType && initValue.constructor === value.constructor ? initValue.set(value) : clone[key] = value._iN$t || instantiateObj(value, parent); + } else clone[key] = value; + } + } + function enumerateObject(obj, clone, parent) { + js.value(obj, "_iN$t", clone, true); + objsToClearTmpVar.push(obj); + var klass = obj.constructor; + if (cc.Class._isCCClass(klass)) enumerateCCClass(klass, obj, clone, parent); else for (var key in obj) { + if (!obj.hasOwnProperty(key) || 95 === key.charCodeAt(0) && 95 === key.charCodeAt(1) && "__type__" !== key) continue; + var value = obj[key]; + if ("object" === typeof value && value) { + if (value === clone) continue; + clone[key] = value._iN$t || instantiateObj(value, parent); + } else clone[key] = value; + } + obj instanceof CCObject && (clone._objFlags &= PersistentMask); + } + function instantiateObj(obj, parent) { + if (obj instanceof CCValueType) return obj.clone(); + if (obj instanceof cc.Asset) return obj; + var clone; + if (ArrayBuffer.isView(obj)) { + var len = obj.length; + clone = new obj.constructor(len); + obj._iN$t = clone; + objsToClearTmpVar.push(obj); + for (var i = 0; i < len; ++i) clone[i] = obj[i]; + return clone; + } + if (Array.isArray(obj)) { + var _len = obj.length; + clone = new Array(_len); + js.value(obj, "_iN$t", clone, true); + objsToClearTmpVar.push(obj); + for (var _i = 0; _i < _len; ++_i) { + var value = obj[_i]; + clone[_i] = "object" === typeof value && value ? value._iN$t || instantiateObj(value, parent) : value; + } + return clone; + } + if (obj._objFlags & Destroyed) return null; + var ctor = obj.constructor; + if (cc.Class._isCCClass(ctor)) { + if (parent) if (parent instanceof cc.Component) { + if (obj instanceof cc._BaseNode || obj instanceof cc.Component) return obj; + } else if (parent instanceof cc._BaseNode) if (obj instanceof cc._BaseNode) { + if (!obj.isChildOf(parent)) return obj; + } else if (obj instanceof cc.Component && !obj.node.isChildOf(parent)) return obj; + clone = new ctor(); + } else if (ctor === Object) clone = {}; else { + if (ctor) return obj; + clone = Object.create(null); + } + enumerateObject(obj, clone, parent); + return clone; + } + instantiate._clone = doInstantiate; + cc.instantiate = instantiate; + module.exports = instantiate; + }), { + "../value-types/value-type": 228, + "./CCObject": 127, + "./js": 142, + "./utils": 145 + } ], + 142: [ (function(require, module, exports) { + "use strict"; + var tempCIDGenerater = new (require("./id-generater"))("TmpCId."); + function _getPropertyDescriptor(obj, name) { + while (obj) { + var pd = Object.getOwnPropertyDescriptor(obj, name); + if (pd) return pd; + obj = Object.getPrototypeOf(obj); + } + return null; + } + function _copyprop(name, source, target) { + var pd = _getPropertyDescriptor(source, name); + Object.defineProperty(target, name, pd); + } + var js = { + isNumber: function isNumber(obj) { + return "number" === typeof obj || obj instanceof Number; + }, + isString: function isString(obj) { + return "string" === typeof obj || obj instanceof String; + }, + addon: function addon(obj) { + obj = obj || {}; + for (var i = 1, length = arguments.length; i < length; i++) { + var source = arguments[i]; + if (source) { + if ("object" !== typeof source) { + cc.errorID(5402, source); + continue; + } + for (var name in source) name in obj || _copyprop(name, source, obj); + } + } + return obj; + }, + mixin: function mixin(obj) { + obj = obj || {}; + for (var i = 1, length = arguments.length; i < length; i++) { + var source = arguments[i]; + if (source) { + if ("object" !== typeof source) { + cc.errorID(5403, source); + continue; + } + for (var name in source) _copyprop(name, source, obj); + } + } + return obj; + }, + extend: function extend(cls, base) { + false; + for (var p in base) base.hasOwnProperty(p) && (cls[p] = base[p]); + cls.prototype = Object.create(base.prototype, { + constructor: { + value: cls, + writable: true, + configurable: true + } + }); + return cls; + }, + getSuper: function getSuper(ctor) { + var proto = ctor.prototype; + var dunderProto = proto && Object.getPrototypeOf(proto); + return dunderProto && dunderProto.constructor; + }, + isChildClassOf: function isChildClassOf(subclass, superclass) { + if (subclass && superclass) { + if ("function" !== typeof subclass) return false; + if ("function" !== typeof superclass) { + false; + return false; + } + if (subclass === superclass) return true; + for (;;) { + subclass = js.getSuper(subclass); + if (!subclass) return false; + if (subclass === superclass) return true; + } + } + return false; + }, + clear: function clear(obj) { + var keys = Object.keys(obj); + for (var i = 0; i < keys.length; i++) delete obj[keys[i]]; + }, + isEmptyObject: function isEmptyObject(obj) { + for (var key in obj) return false; + return true; + }, + getPropertyDescriptor: _getPropertyDescriptor + }; + var tmpValueDesc = { + value: void 0, + enumerable: false, + writable: false, + configurable: true + }; + js.value = function(obj, prop, value, writable, enumerable) { + tmpValueDesc.value = value; + tmpValueDesc.writable = writable; + tmpValueDesc.enumerable = enumerable; + Object.defineProperty(obj, prop, tmpValueDesc); + tmpValueDesc.value = void 0; + }; + var tmpGetSetDesc = { + get: null, + set: null, + enumerable: false + }; + js.getset = function(obj, prop, getter, setter, enumerable, configurable) { + if ("function" !== typeof setter) { + enumerable = setter; + setter = void 0; + } + tmpGetSetDesc.get = getter; + tmpGetSetDesc.set = setter; + tmpGetSetDesc.enumerable = enumerable; + tmpGetSetDesc.configurable = configurable; + Object.defineProperty(obj, prop, tmpGetSetDesc); + tmpGetSetDesc.get = null; + tmpGetSetDesc.set = null; + }; + var tmpGetDesc = { + get: null, + enumerable: false, + configurable: false + }; + js.get = function(obj, prop, getter, enumerable, configurable) { + tmpGetDesc.get = getter; + tmpGetDesc.enumerable = enumerable; + tmpGetDesc.configurable = configurable; + Object.defineProperty(obj, prop, tmpGetDesc); + tmpGetDesc.get = null; + }; + var tmpSetDesc = { + set: null, + enumerable: false, + configurable: false + }; + js.set = function(obj, prop, setter, enumerable, configurable) { + tmpSetDesc.set = setter; + tmpSetDesc.enumerable = enumerable; + tmpSetDesc.configurable = configurable; + Object.defineProperty(obj, prop, tmpSetDesc); + tmpSetDesc.set = null; + }; + js.getClassName = function(objOrCtor) { + if ("function" === typeof objOrCtor) { + var prototype = objOrCtor.prototype; + if (prototype && prototype.hasOwnProperty("__classname__") && prototype.__classname__) return prototype.__classname__; + var retval = ""; + objOrCtor.name && (retval = objOrCtor.name); + if (objOrCtor.toString) { + var arr, str = objOrCtor.toString(); + arr = "[" === str.charAt(0) ? str.match(/\[\w+\s*(\w+)\]/) : str.match(/function\s*(\w+)/); + arr && 2 === arr.length && (retval = arr[1]); + } + return "Object" !== retval ? retval : ""; + } + if (objOrCtor && objOrCtor.constructor) return js.getClassName(objOrCtor.constructor); + return ""; + }; + function isTempClassId(id) { + return "string" !== typeof id || id.startsWith(tempCIDGenerater.prefix); + } + (function() { + var _idToClass = {}; + var _nameToClass = {}; + function setup(key, publicName, table) { + js.getset(js, publicName, (function() { + return Object.assign({}, table); + }), (function(value) { + js.clear(table); + Object.assign(table, value); + })); + return function(id, constructor) { + constructor.prototype.hasOwnProperty(key) && delete table[constructor.prototype[key]]; + js.value(constructor.prototype, key, id); + if (id) { + var registered = table[id]; + if (registered && registered !== constructor) { + var error = "A Class already exists with the same " + key + ' : "' + id + '".'; + false; + cc.error(error); + } else table[id] = constructor; + } + }; + } + js._setClassId = setup("__cid__", "_registeredClassIds", _idToClass); + var doSetClassName = setup("__classname__", "_registeredClassNames", _nameToClass); + js.setClassName = function(className, constructor) { + doSetClassName(className, constructor); + if (!constructor.prototype.hasOwnProperty("__cid__")) { + var id = className || tempCIDGenerater.getNewId(); + id && js._setClassId(id, constructor); + } + }; + js.unregisterClass = function() { + for (var i = 0; i < arguments.length; i++) { + var p = arguments[i].prototype; + var classId = p.__cid__; + classId && delete _idToClass[classId]; + var classname = p.__classname__; + classname && delete _nameToClass[classname]; + } + }; + js._getClassById = function(classId) { + return _idToClass[classId]; + }; + js.getClassByName = function(classname) { + return _nameToClass[classname]; + }; + js._getClassId = function(obj, allowTempId) { + allowTempId = "undefined" === typeof allowTempId || allowTempId; + var res; + if ("function" === typeof obj && obj.prototype.hasOwnProperty("__cid__")) { + res = obj.prototype.__cid__; + if (!allowTempId && (false, false) && isTempClassId(res)) return ""; + return res; + } + if (obj && obj.constructor) { + var prototype = obj.constructor.prototype; + if (prototype && prototype.hasOwnProperty("__cid__")) { + res = obj.__cid__; + if (!allowTempId && (false, false) && isTempClassId(res)) return ""; + return res; + } + } + return ""; + }; + })(); + js.obsolete = function(obj, obsoleted, newExpr, writable) { + var extractPropName = /([^.]+)$/; + var oldProp = extractPropName.exec(obsoleted)[0]; + var newProp = extractPropName.exec(newExpr)[0]; + function get() { + false; + return this[newProp]; + } + writable ? js.getset(obj, oldProp, get, (function(value) { + false; + this[newProp] = value; + })) : js.get(obj, oldProp, get); + }; + js.obsoletes = function(obj, objName, props, writable) { + for (var obsoleted in props) { + var newName = props[obsoleted]; + js.obsolete(obj, objName + "." + obsoleted, newName, writable); + } + }; + var REGEXP_NUM_OR_STR = /(%d)|(%s)/; + var REGEXP_STR = /%s/; + js.formatStr = function() { + var argLen = arguments.length; + if (0 === argLen) return ""; + var msg = arguments[0]; + if (1 === argLen) return "" + msg; + var hasSubstitution = "string" === typeof msg && REGEXP_NUM_OR_STR.test(msg); + if (hasSubstitution) for (var i = 1; i < argLen; ++i) { + var arg = arguments[i]; + var regExpToTest = "number" === typeof arg ? REGEXP_NUM_OR_STR : REGEXP_STR; + if (regExpToTest.test(msg)) { + var notReplaceFunction = "" + arg; + msg = msg.replace(regExpToTest, notReplaceFunction); + } else msg += " " + arg; + } else for (var _i = 1; _i < argLen; ++_i) msg += " " + arguments[_i]; + return msg; + }; + js.shiftArguments = function() { + var len = arguments.length - 1; + var args = new Array(len); + for (var i = 0; i < len; ++i) args[i] = arguments[i + 1]; + return args; + }; + js.createMap = function(forceDictMode) { + var map = Object.create(null); + if (forceDictMode) { + var INVALID_IDENTIFIER_1 = "."; + var INVALID_IDENTIFIER_2 = "/"; + map[INVALID_IDENTIFIER_1] = true; + map[INVALID_IDENTIFIER_2] = true; + delete map[INVALID_IDENTIFIER_1]; + delete map[INVALID_IDENTIFIER_2]; + } + return map; + }; + function removeAt(array, index) { + array.splice(index, 1); + } + function fastRemoveAt(array, index) { + var length = array.length; + if (index < 0 || index >= length) return; + array[index] = array[length - 1]; + array.length = length - 1; + } + function remove(array, value) { + var index = array.indexOf(value); + if (index >= 0) { + removeAt(array, index); + return true; + } + return false; + } + function fastRemove(array, value) { + var index = array.indexOf(value); + if (index >= 0) { + array[index] = array[array.length - 1]; + --array.length; + } + } + function verifyType(array, type) { + if (array && array.length > 0) for (var i = 0; i < array.length; i++) if (!(array[i] instanceof type)) { + cc.logID(1300); + return false; + } + return true; + } + function removeArray(array, minusArr) { + for (var i = 0, l = minusArr.length; i < l; i++) remove(array, minusArr[i]); + } + function appendObjectsAt(array, addObjs, index) { + array.splice.apply(array, [ index, 0 ].concat(addObjs)); + return array; + } + function contains(array, value) { + return array.indexOf(value) >= 0; + } + function copy(array) { + var i, len = array.length, arr_clone = new Array(len); + for (i = 0; i < len; i += 1) arr_clone[i] = array[i]; + return arr_clone; + } + js.array = { + remove: remove, + fastRemove: fastRemove, + removeAt: removeAt, + fastRemoveAt: fastRemoveAt, + contains: contains, + verifyType: verifyType, + removeArray: removeArray, + appendObjectsAt: appendObjectsAt, + copy: copy, + MutableForwardIterator: require("../utils/mutable-forward-iterator") + }; + function Pool(cleanupFunc, size) { + if (void 0 === size) { + size = cleanupFunc; + cleanupFunc = null; + } + this.get = null; + this.count = 0; + this._pool = new Array(size); + this._cleanup = cleanupFunc; + } + Pool.prototype._get = function() { + if (this.count > 0) { + --this.count; + var cache = this._pool[this.count]; + this._pool[this.count] = null; + return cache; + } + return null; + }; + Pool.prototype.put = function(obj) { + var pool = this._pool; + if (this.count < pool.length) { + if (this._cleanup && false === this._cleanup(obj)) return; + pool[this.count] = obj; + ++this.count; + } + }; + Pool.prototype.resize = function(length) { + if (length >= 0) { + this._pool.length = length; + this.count > length && (this.count = length); + } + }; + js.Pool = Pool; + cc.js = js; + module.exports = js; + }), { + "../utils/mutable-forward-iterator": 206, + "./id-generater": 138 + } ], + 143: [ (function(require, module, exports) { + "use strict"; + var js = require("./js"); + var Attrs = require("./attribute"); + var SerializableAttrs = { + default: {}, + serializable: {}, + editorOnly: {}, + formerlySerializedAs: {} + }; + var TYPO_TO_CORRECT_DEV = false; + function parseNotify(val, propName, notify, properties) { + if (val.get || val.set) { + false; + return; + } + if (val.hasOwnProperty("default")) { + var newKey = "_N$" + propName; + val.get = function() { + return this[newKey]; + }; + val.set = function(value) { + var oldValue = this[newKey]; + this[newKey] = value; + notify.call(this, oldValue); + }; + false; + var newValue = {}; + properties[newKey] = newValue; + for (var attr in SerializableAttrs) { + var v = SerializableAttrs[attr]; + if (val.hasOwnProperty(attr)) { + newValue[attr] = val[attr]; + v.canUsedInGet || delete val[attr]; + } + } + } else false; + } + function parseType(val, type, className, propName) { + var STATIC_CHECK = (false, false); + if (Array.isArray(type)) { + if (STATIC_CHECK && "default" in val) { + var isArray = require("./CCClass").isArray; + isArray(val["default"]) || cc.warnID(5507, className, propName); + } + if (!(type.length > 0)) return cc.errorID(5508, className, propName); + val.type = type = type[0]; + } + if ("function" === typeof type) { + if (type === String) { + val.type = cc.String; + STATIC_CHECK && cc.warnID(3608, '"' + className + "." + propName + '"'); + } else if (type === Boolean) { + val.type = cc.Boolean; + STATIC_CHECK && cc.warnID(3609, '"' + className + "." + propName + '"'); + } else if (type === Number) { + val.type = cc.Float; + STATIC_CHECK && cc.warnID(3610, '"' + className + "." + propName + '"'); + } + } else if (STATIC_CHECK) switch (type) { + case "Number": + cc.warnID(5510, className, propName); + break; + + case "String": + cc.warn('The type of "' + className + "." + propName + '" must be cc.String, not "String".'); + break; + + case "Boolean": + cc.warn('The type of "' + className + "." + propName + '" must be cc.Boolean, not "Boolean".'); + break; + + case "Float": + cc.warn('The type of "' + className + "." + propName + '" must be cc.Float, not "Float".'); + break; + + case "Integer": + cc.warn('The type of "' + className + "." + propName + '" must be cc.Integer, not "Integer".'); + break; + + case null: + cc.warnID(5511, className, propName); + } + false; + } + function getBaseClassWherePropertyDefined_DEV(propName, cls) { + var res; + false; + } + function _wrapOptions(isES6Getset, _default, type) { + var res = isES6Getset ? { + _short: true + } : { + _short: true, + default: _default + }; + type && (res.type = type); + return res; + } + exports.getFullFormOfProperty = function(options, isES6Getset) { + var isLiteral = options && options.constructor === Object; + if (isLiteral) return null; + return Array.isArray(options) && options.length > 0 ? _wrapOptions(isES6Getset, [], options) : "function" === typeof options ? _wrapOptions(isES6Getset, js.isChildClassOf(options, cc.ValueType) ? new options() : null, options) : options instanceof Attrs.PrimitiveType ? _wrapOptions(isES6Getset, options["default"]) : _wrapOptions(isES6Getset, options); + }; + exports.preprocessAttrs = function(properties, className, cls, es6) { + for (var propName in properties) { + var val = properties[propName]; + var fullForm = exports.getFullFormOfProperty(val, false); + fullForm && (val = properties[propName] = fullForm); + if (val) { + var maybeTypeScript; + false; + var baseClass; + false; + var notify = val.notify; + if (notify) { + false; + parseNotify(val, propName, notify, properties); + } + "type" in val && parseType(val, val.type, className, propName); + } + } + }; + var CALL_SUPER_DESTROY_REG_DEV; + false; + exports.validateMethodWithProps = function(func, funcName, className, cls, base) { + false; + if ("function" !== typeof func && null !== func) { + var overrided; + var baseFuc; + var subFuc; + var correct; + false; + return false; + } + false; + return true; + }; + }), { + "./CCClass": 121, + "./attribute": 133, + "./js": 142 + } ], + 144: [ (function(require, module, exports) { + "use strict"; + var requiringFrames = []; + cc._RF = { + push: function push(module, uuid, script) { + if (void 0 === script) { + script = uuid; + uuid = ""; + } + requiringFrames.push({ + uuid: uuid, + script: script, + module: module, + exports: module.exports, + beh: null + }); + }, + pop: function pop() { + var frameInfo = requiringFrames.pop(); + var module = frameInfo.module; + var exports = module.exports; + if (exports === frameInfo.exports) { + for (var anyKey in exports) return; + module.exports = exports = frameInfo.cls; + } + }, + peek: function peek() { + return requiringFrames[requiringFrames.length - 1]; + } + }; + false; + }), {} ], + 145: [ (function(require, module, exports) { + "use strict"; + var js = require("./js"); + module.exports = { + contains: function contains(refNode, otherNode) { + if ("function" == typeof refNode.contains) return refNode.contains(otherNode); + if ("function" == typeof refNode.compareDocumentPosition) return !!(16 & refNode.compareDocumentPosition(otherNode)); + var node = otherNode.parentNode; + if (node) do { + if (node === refNode) return true; + node = node.parentNode; + } while (null !== node); + return false; + }, + isDomNode: "object" === typeof window && ("function" === typeof Node ? function(obj) { + return obj instanceof Node; + } : function(obj) { + return obj && "object" === typeof obj && "number" === typeof obj.nodeType && "string" === typeof obj.nodeName; + }), + callInNextTick: function(callback, p1, p2) { + callback && setTimeout((function() { + callback(p1, p2); + }), 0); + } + }; + false; + false; + }), { + "./js": 142 + } ], + 146: [ (function(require, module, exports) { + "use strict"; + require("./platform/js"); + require("./value-types"); + require("./utils"); + require("./platform/CCInputManager"); + require("./platform/CCInputExtension"); + require("./event"); + require("./platform/CCSys"); + require("./platform/CCMacro"); + require("./asset-manager"); + require("./CCDirector"); + require("./renderer"); + true; + require("./platform/CCView"); + require("./platform/CCScreen"); + require("./CCScheduler"); + require("./event-manager"); + }), { + "./CCDirector": 22, + "./CCScheduler": 27, + "./asset-manager": 45, + "./event": 116, + "./event-manager": 112, + "./platform/CCInputExtension": 124, + "./platform/CCInputManager": 125, + "./platform/CCMacro": 126, + "./platform/CCScreen": 129, + "./platform/CCSys": 130, + "./platform/CCView": 131, + "./platform/js": 142, + "./renderer": 152, + "./utils": 204, + "./value-types": 220 + } ], + 147: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _assembler = _interopRequireDefault(require("./assembler")); + var _manager = _interopRequireDefault(require("./utils/dynamic-atlas/manager")); + var _renderData = _interopRequireDefault(require("./webgl/render-data")); + var _valueTypes = require("../value-types"); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + function _assertThisInitialized(self) { + if (void 0 === self) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return self; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var Assembler2D = (function(_Assembler) { + _inheritsLoose(Assembler2D, _Assembler); + function Assembler2D() { + var _this; + _this = _Assembler.call(this) || this; + _this._renderData = new _renderData["default"](); + _this._renderData.init(_assertThisInitialized(_this)); + _this.initData(); + _this.initLocal(); + return _this; + } + var _proto = Assembler2D.prototype; + _proto.initData = function initData() { + var data = this._renderData; + data.createQuadData(0, this.verticesFloats, this.indicesCount); + }; + _proto.initLocal = function initLocal() { + this._local = []; + this._local.length = 4; + }; + _proto.updateColor = function updateColor(comp, color) { + var uintVerts = this._renderData.uintVDatas[0]; + if (!uintVerts) return; + color = null != color ? color : comp.node.color._val; + var floatsPerVert = this.floatsPerVert; + var colorOffset = this.colorOffset; + for (var i = colorOffset, l = uintVerts.length; i < l; i += floatsPerVert) uintVerts[i] = color; + }; + _proto.getBuffer = function getBuffer() { + return cc.renderer._handle._meshBuffer; + }; + _proto.updateWorldVerts = function updateWorldVerts(comp) { + var local = this._local; + var verts = this._renderData.vDatas[0]; + var matrix = comp.node._worldMatrix; + var matrixm = matrix.m, a = matrixm[0], b = matrixm[1], c = matrixm[4], d = matrixm[5], tx = matrixm[12], ty = matrixm[13]; + var vl = local[0], vr = local[2], vb = local[1], vt = local[3]; + var floatsPerVert = this.floatsPerVert; + var vertexOffset = 0; + var justTranslate = 1 === a && 0 === b && 0 === c && 1 === d; + if (justTranslate) { + verts[vertexOffset] = vl + tx; + verts[vertexOffset + 1] = vb + ty; + vertexOffset += floatsPerVert; + verts[vertexOffset] = vr + tx; + verts[vertexOffset + 1] = vb + ty; + vertexOffset += floatsPerVert; + verts[vertexOffset] = vl + tx; + verts[vertexOffset + 1] = vt + ty; + vertexOffset += floatsPerVert; + verts[vertexOffset] = vr + tx; + verts[vertexOffset + 1] = vt + ty; + } else { + var al = a * vl, ar = a * vr, bl = b * vl, br = b * vr, cb = c * vb, ct = c * vt, db = d * vb, dt = d * vt; + verts[vertexOffset] = al + cb + tx; + verts[vertexOffset + 1] = bl + db + ty; + vertexOffset += floatsPerVert; + verts[vertexOffset] = ar + cb + tx; + verts[vertexOffset + 1] = br + db + ty; + vertexOffset += floatsPerVert; + verts[vertexOffset] = al + ct + tx; + verts[vertexOffset + 1] = bl + dt + ty; + vertexOffset += floatsPerVert; + verts[vertexOffset] = ar + ct + tx; + verts[vertexOffset + 1] = br + dt + ty; + } + }; + _proto.fillBuffers = function fillBuffers(comp, renderer) { + renderer.worldMatDirty && this.updateWorldVerts(comp); + var renderData = this._renderData; + var vData = renderData.vDatas[0]; + var iData = renderData.iDatas[0]; + var buffer = this.getBuffer(renderer); + var offsetInfo = buffer.request(this.verticesCount, this.indicesCount); + var vertexOffset = offsetInfo.byteOffset >> 2, vbuf = buffer._vData; + vData.length + vertexOffset > vbuf.length ? vbuf.set(vData.subarray(0, vbuf.length - vertexOffset), vertexOffset) : vbuf.set(vData, vertexOffset); + var ibuf = buffer._iData, indiceOffset = offsetInfo.indiceOffset, vertexId = offsetInfo.vertexOffset; + for (var i = 0, l = iData.length; i < l; i++) ibuf[indiceOffset++] = vertexId + iData[i]; + }; + _proto.updateTexId = function updateTexId(comp) { + var texId = comp._texId; + var texIdOffset = this.texIdOffset; + var floatsPerVert = this.floatsPerVert; + var verts = this._renderData.vDatas[0]; + for (var i = 0, l = verts.length; i < l; i++) verts[floatsPerVert * i + texIdOffset] = texId; + }; + _createClass(Assembler2D, [ { + key: "verticesFloats", + get: function get() { + return this.verticesCount * this.floatsPerVert; + } + } ]); + return Assembler2D; + })(_assembler["default"]); + exports["default"] = Assembler2D; + cc.js.addon(Assembler2D.prototype, { + floatsPerVert: 5, + verticesCount: 4, + indicesCount: 6, + uvOffset: 2, + colorOffset: 4, + isMulti: false + }); + cc.Assembler2D = Assembler2D; + module.exports = exports["default"]; + }), { + "../value-types": 220, + "./assembler": 149, + "./utils/dynamic-atlas/manager": 154, + "./webgl/render-data": 188 + } ], + 148: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _pool3 = _interopRequireDefault(require("../utils/pool")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var _assemblerId = 0; + function getAssemblerId(assemblerCtor) { + Object.getOwnPropertyDescriptor(assemblerCtor, "__assemblerId__") || (assemblerCtor.__assemblerId__ = ++_assemblerId); + return assemblerCtor.__assemblerId__; + } + var AssemblerPool = (function(_Pool) { + _inheritsLoose(AssemblerPool, _Pool); + function AssemblerPool() { + var _this; + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) args[_key] = arguments[_key]; + _this = _Pool.call.apply(_Pool, [ this ].concat(args)) || this; + _this._pool = {}; + return _this; + } + var _proto = AssemblerPool.prototype; + _proto.put = function put(assembler) { + if (!assembler) return; + if (!this.enabled) { + false; + return; + } + var id = getAssemblerId(assembler.constructor); + var pool = this._pool; + pool[id] || (pool[id] = []); + if (this.count > this.maxSize) return; + this._clean(assembler); + pool[id].push(assembler); + this.count++; + }; + _proto.get = function get(assemblerCtor) { + var assembler; + if (this.enabled) { + var _pool = this._pool; + var id = getAssemblerId(assemblerCtor); + assembler = _pool[id] && _pool[id].pop(); + } + assembler ? this.count-- : assembler = new assemblerCtor(); + return assembler; + }; + _proto.clear = function clear() { + var _pool2; + var name; + var assemblers; + var i; + false; + this._pool = {}; + this.count = 0; + }; + _proto._clean = function _clean(assembler) { + false; + assembler._renderComp = null; + }; + return AssemblerPool; + })(_pool3["default"]); + var pool = new AssemblerPool(); + _pool3["default"].register("assembler", pool); + var _default = pool; + exports["default"] = _default; + module.exports = exports["default"]; + }), { + "../utils/pool": 207 + } ], + 149: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _vertexFormat = require("./webgl/vertex-format"); + var _assemblerPool = _interopRequireDefault(require("./assembler-pool")); + var _manager = _interopRequireDefault(require("./utils/dynamic-atlas/manager")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var Assembler = (function() { + function Assembler() { + this._extendNative && this._extendNative(); + } + var _proto = Assembler.prototype; + _proto.init = function init(renderComp) { + this._renderComp = renderComp; + }; + _proto.updateRenderData = function updateRenderData(comp) {}; + _proto.updateRenderDataForSwitchMaterial = function updateRenderDataForSwitchMaterial(comp) {}; + _proto.fillBuffers = function fillBuffers(comp, renderer) {}; + _proto.getVfmt = function getVfmt() { + return _vertexFormat.vfmtPosUvColor; + }; + _proto.packDynamicAtlasAndCheckMaterial = function packDynamicAtlasAndCheckMaterial(comp, frame) { + false; + var allowDynamicAtlas = comp.allowDynamicAtlas; + if ((cc.sp.allowDynamicAtlas && 0 === allowDynamicAtlas || 1 === allowDynamicAtlas) && !frame._original && _manager["default"] && frame._texture.packable) { + var packedFrame = _manager["default"].insertSpriteFrame(frame); + packedFrame && frame._setDynamicAtlasFrame(packedFrame); + } + var material = comp._materials[0]; + if (!material) return false; + if (this.checkAndSwitchMaterial(comp, frame._texture, material)) return true; + if (material.material.isMultiSupport()) comp._texIdDirty = true; else if (material.getProperty("texture") !== frame._texture) { + comp._vertsDirty = true; + comp._updateMaterial(); + } + return false; + }; + _proto.checkAndSwitchMaterial = function checkAndSwitchMaterial(comp, texture, material) { + var autoSwitchMaterial = comp.autoSwitchMaterial; + if ((cc.sp.autoSwitchMaterial && 0 === autoSwitchMaterial || 1 === autoSwitchMaterial) && texture._multiMaterial && material.material !== texture._multiMaterial) { + comp.setMaterial(0, texture._multiMaterial); + if (!this.isMulti) { + comp._assembler.updateRenderDataForSwitchMaterial(comp); + return true; + } + } + }; + return Assembler; + })(); + exports["default"] = Assembler; + Assembler.register = function(renderCompCtor, assembler) { + renderCompCtor.__assembler__ = assembler; + }; + Assembler.init = function(renderComp) { + var renderCompCtor = renderComp.constructor; + var assemblerCtor = renderCompCtor.__assembler__; + while (!assemblerCtor) { + renderCompCtor = renderCompCtor.$super; + if (!renderCompCtor) { + cc.warn("Can not find assembler for render component : [" + cc.js.getClassName(renderComp) + "]"); + return; + } + assemblerCtor = renderCompCtor.__assembler__; + } + assemblerCtor.getConstructor && (assemblerCtor = assemblerCtor.getConstructor(renderComp)); + if (!renderComp._assembler || renderComp._assembler.constructor !== assemblerCtor) { + var assembler = _assemblerPool["default"].get(assemblerCtor); + assembler.init(renderComp); + renderComp._assembler = assembler; + } + }; + cc.Assembler = Assembler; + module.exports = exports["default"]; + }), { + "./assembler-pool": 148, + "./utils/dynamic-atlas/manager": 154, + "./webgl/vertex-format": 190 + } ], + 150: [ (function(require, module, exports) { + "use strict"; + var Device = function Device(canvasEL) { + var ctx; + try { + ctx = canvasEL.getContext("2d"); + } catch (err) { + console.error(err); + return; + } + this._canvas = canvasEL; + this._ctx = ctx; + this._caps = {}; + this._stats = { + drawcalls: 0 + }; + this._vx = this._vy = this._vw = this._vh = 0; + this._sx = this._sy = this._sw = this._sh = 0; + }; + Device.prototype._restoreTexture = function _restoreTexture(unit) {}; + Device.prototype.setViewport = function setViewport(x, y, w, h) { + if (this._vx !== x || this._vy !== y || this._vw !== w || this._vh !== h) { + this._vx = x; + this._vy = y; + this._vw = w; + this._vh = h; + } + }; + Device.prototype.setScissor = function setScissor(x, y, w, h) { + if (this._sx !== x || this._sy !== y || this._sw !== w || this._sh !== h) { + this._sx = x; + this._sy = y; + this._sw = w; + this._sh = h; + } + }; + Device.prototype.clear = function clear(color) { + var ctx = this._ctx; + ctx.clearRect(this._vx, this._vy, this._vw, this._vh); + if (color && (0 !== color[0] || 0 !== color[1] || 0 !== color[2])) { + ctx.fillStyle = "rgb(" + color[0] + "," + color[1] + "," + color[2] + ")"; + ctx.globalAlpha = color[3]; + ctx.fillRect(this._vx, this._vy, this._vw, this._vh); + } + }; + Device.prototype.resetDrawCalls = function() { + this._stats.drawcalls = 0; + }; + Device.prototype.getDrawCalls = function() { + return this._stats.drawcalls; + }; + module.exports = Device; + }), {} ], + 151: [ (function(require, module, exports) { + "use strict"; + var Texture2D = function Texture2D(device, options) { + this._device = device; + this._width = 4; + this._height = 4; + this._image = null; + if (options) { + void 0 !== options.width && (this._width = options.width); + void 0 !== options.height && (this._height = options.height); + this.updateImage(options); + } + }; + Texture2D.prototype.update = function update(options) { + this.updateImage(options); + }; + Texture2D.prototype.updateImage = function updateImage(options) { + if (options.images && options.images[0]) { + var image = options.images[0]; + image && image !== this._image && (this._image = image); + } + }; + Texture2D.prototype.destroy = function destroy() { + this._image = null; + }; + module.exports = Texture2D; + }), {} ], + 152: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _gfx = _interopRequireDefault(require("../../renderer/gfx")); + var _inputAssembler = _interopRequireDefault(require("../../renderer/core/input-assembler")); + var _pass = _interopRequireDefault(require("../../renderer/core/pass")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _initBuiltins(device) { + var defaultTexture = new _gfx["default"].Texture2D(device, { + images: [], + width: 128, + height: 128, + wrapS: _gfx["default"].WRAP_REPEAT, + wrapT: _gfx["default"].WRAP_REPEAT, + format: _gfx["default"].TEXTURE_FMT_RGB8, + genMipmaps: false + }); + return { + defaultTexture: defaultTexture, + programTemplates: [], + programChunks: {} + }; + } + var _default = cc.renderer = { + Texture2D: null, + InputAssembler: _inputAssembler["default"], + Pass: _pass["default"], + renderEngine: null, + canvas: null, + device: null, + scene: null, + drawCalls: 0, + _handle: null, + _cameraNode: null, + _camera: null, + _forward: null, + _flow: null, + initWebGL: function initWebGL(canvas, opts) { + require("./webgl/assemblers"); + var ModelBatcher = require("./webgl/model-batcher"); + this.Texture2D = _gfx["default"].Texture2D; + this.canvas = canvas; + this._flow = cc.RenderFlow; + var builtins; + var nativeFlow; + false; + var Scene = require("../../renderer/scene/scene"); + var ForwardRenderer = require("../../renderer/renderers/forward-renderer"); + this.device = new _gfx["default"].Device(canvas, opts); + this.scene = new Scene(); + var _builtins = _initBuiltins(this.device); + this._forward = new ForwardRenderer(this.device, _builtins); + this._handle = new ModelBatcher(this.device, this.scene); + this._flow.init(this._handle, this._forward); + }, + initCanvas: function initCanvas(canvas) { + var canvasRenderer = require("./canvas"); + var Texture2D = require("./canvas/Texture2D"); + var Device = require("./canvas/Device"); + this.Device = Device; + this.Texture2D = Texture2D; + this.canvas = canvas; + this.device = new Device(canvas); + this._camera = { + a: 1, + b: 0, + c: 0, + d: 1, + tx: 0, + ty: 0 + }; + this._handle = new canvasRenderer.RenderComponentHandle(this.device, this._camera); + this._forward = new canvasRenderer.ForwardRenderer(); + this._flow = cc.RenderFlow; + this._flow.init(this._handle, this._forward); + }, + updateCameraViewport: function updateCameraViewport() { + if (true, cc.director) { + var ecScene = cc.director.getScene(); + ecScene && ecScene.setScale(1, 1, 1); + } + if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS) { + var vp = cc.view.getViewportRect(); + this.device.setViewport(vp.x, vp.y, vp.width, vp.height); + this._camera.a = cc.view.getScaleX(); + this._camera.d = cc.view.getScaleY(); + this._camera.tx = vp.x; + this._camera.ty = vp.y + vp.height; + } + }, + render: function render(ecScene, dt) { + this.device.resetDrawCalls(); + if (ecScene) { + this._flow.render(ecScene, dt); + this.drawCalls = this.device.getDrawCalls(); + } + }, + clear: function clear() { + this._handle.reset(); + this._forward.clear(); + } + }; + exports["default"] = _default; + module.exports = exports["default"]; + }), { + "../../renderer/core/input-assembler": 237, + "../../renderer/core/pass": 238, + "../../renderer/gfx": 247, + "../../renderer/renderers/forward-renderer": 266, + "../../renderer/scene/scene": 269, + "./canvas": void 0, + "./canvas/Device": 150, + "./canvas/Texture2D": 151, + "./webgl/assemblers": 161, + "./webgl/model-batcher": 186 + } ], + 153: [ (function(require, module, exports) { + "use strict"; + var FlagOfset = 0; + var DONOTHING = 1 << FlagOfset++; + var BREAK_FLOW = 1 << FlagOfset++; + var LOCAL_TRANSFORM = 1 << FlagOfset++; + var WORLD_TRANSFORM = 1 << FlagOfset++; + var TRANSFORM = LOCAL_TRANSFORM | WORLD_TRANSFORM; + var UPDATE_RENDER_DATA = 1 << FlagOfset++; + var OPACITY = 1 << FlagOfset++; + var COLOR = 1 << FlagOfset++; + var OPACITY_COLOR = OPACITY | COLOR; + var RENDER = 1 << FlagOfset++; + var CHILDREN = 1 << FlagOfset++; + var POST_RENDER = 1 << FlagOfset++; + var FINAL = 1 << FlagOfset++; + var _batcher, _forward; + var _cullingMask = 0; + function RenderFlow() { + this._func = init; + this._next = null; + } + var _proto = RenderFlow.prototype; + _proto._doNothing = function() {}; + _proto._localTransform = function(node) { + node._updateLocalMatrix(); + node._renderFlag &= ~LOCAL_TRANSFORM; + this._next._func(node); + }; + _proto._worldTransform = function(node) { + _batcher.worldMatDirty++; + var t = node._matrix; + var trs = node._trs; + var tm = t.m; + tm[12] = trs[0]; + tm[13] = trs[1]; + tm[14] = trs[2]; + node._mulMat(node._worldMatrix, node._parent._worldMatrix, t); + node._renderFlag &= ~WORLD_TRANSFORM; + this._next._func(node); + _batcher.worldMatDirty--; + }; + _proto._opacity = function(node) { + _batcher.parentOpacityDirty++; + this._next._func(node); + node._renderFlag &= ~OPACITY; + _batcher.parentOpacityDirty--; + }; + _proto._color = function(node) { + var comp = node._renderComponent; + comp && comp._updateColor(); + node._renderFlag &= ~COLOR; + this._next._func(node); + }; + _proto._updateRenderData = function(node) { + var comp = node._renderComponent; + comp._assembler.updateRenderData(comp); + node._renderFlag &= ~UPDATE_RENDER_DATA; + this._next._func(node); + }; + _proto._render = function(node) { + var comp = node._renderComponent; + comp._checkBacth(_batcher, node._cullingMask); + comp._assembler.fillBuffers(comp, _batcher); + this._next._func(node); + }; + _proto._children = function(node) { + var cullingMask = _cullingMask; + var batcher = _batcher; + var parentOpacity = batcher.parentOpacity; + var opacity = batcher.parentOpacity *= node._opacity / 255; + var worldTransformFlag = batcher.worldMatDirty ? WORLD_TRANSFORM : 0; + var worldOpacityFlag = batcher.parentOpacityDirty ? OPACITY_COLOR : 0; + var worldDirtyFlag = worldTransformFlag | worldOpacityFlag; + var children = node._children; + for (var i = 0, l = children.length; i < l; i++) { + var c = children[i]; + c._renderFlag |= worldDirtyFlag; + if (!c._activeInHierarchy || 0 === c._opacity) continue; + _cullingMask = c._cullingMask = 0 === c.groupIndex ? cullingMask : 1 << c.groupIndex; + var colorVal = c._color._val; + c._color._fastSetA(c._opacity * opacity); + flows[c._renderFlag]._func(c); + c._color._val = colorVal; + } + batcher.parentOpacity = parentOpacity; + this._next._func(node); + }; + _proto._postRender = function(node) { + var comp = node._renderComponent; + comp._checkBacth(_batcher, node._cullingMask); + comp._assembler.postFillBuffers(comp, _batcher); + this._next._func(node); + }; + var EMPTY_FLOW = new RenderFlow(); + EMPTY_FLOW._func = EMPTY_FLOW._doNothing; + EMPTY_FLOW._next = EMPTY_FLOW; + var flows = {}; + function createFlow(flag, next) { + var flow = new RenderFlow(); + flow._next = next || EMPTY_FLOW; + switch (flag) { + case DONOTHING: + case BREAK_FLOW: + flow._func = flow._doNothing; + break; + + case LOCAL_TRANSFORM: + flow._func = flow._localTransform; + break; + + case WORLD_TRANSFORM: + flow._func = flow._worldTransform; + break; + + case OPACITY: + flow._func = flow._opacity; + break; + + case COLOR: + flow._func = flow._color; + break; + + case UPDATE_RENDER_DATA: + flow._func = flow._updateRenderData; + break; + + case RENDER: + flow._func = flow._render; + break; + + case CHILDREN: + flow._func = flow._children; + break; + + case POST_RENDER: + flow._func = flow._postRender; + } + return flow; + } + function getFlow(flag) { + var flow = null; + var tFlag = FINAL; + while (tFlag > 0) { + tFlag & flag && (flow = createFlow(tFlag, flow)); + tFlag >>= 1; + } + return flow; + } + function init(node) { + var flag = node._renderFlag; + var r = flows[flag] = getFlow(flag); + r._func(node); + } + RenderFlow.flows = flows; + RenderFlow.createFlow = createFlow; + var _validateList = []; + RenderFlow.registerValidate = function(renderComp) { + if (renderComp._inValidateList) return; + _validateList.push(renderComp); + renderComp._inValidateList = true; + }; + RenderFlow.validateRenderers = function() { + for (var i = 0, l = _validateList.length; i < l; i++) { + var renderComp = _validateList[i]; + if (!renderComp.isValid) continue; + renderComp.enabledInHierarchy ? renderComp._validateRender() : renderComp.disableRender(); + renderComp._inValidateList = false; + } + _validateList.length = 0; + }; + RenderFlow.visitRootNode = function(rootNode) { + RenderFlow.validateRenderers(); + var preCullingMask = _cullingMask; + _cullingMask = rootNode._cullingMask; + if (rootNode._renderFlag & WORLD_TRANSFORM) { + _batcher.worldMatDirty++; + rootNode._calculWorldMatrix(); + rootNode._renderFlag &= ~WORLD_TRANSFORM; + flows[rootNode._renderFlag]._func(rootNode); + _batcher.worldMatDirty--; + } else flows[rootNode._renderFlag]._func(rootNode); + _cullingMask = preCullingMask; + }; + RenderFlow.render = function(rootNode, dt) { + _batcher.reset(); + _batcher.walking = true; + RenderFlow.visitRootNode(rootNode); + _batcher.terminate(); + _batcher.walking = false; + _forward.render(_batcher._renderScene, dt); + }; + RenderFlow.renderCamera = function(camera, rootNode) { + _batcher.reset(); + _batcher.walking = true; + RenderFlow.visitRootNode(rootNode); + _batcher.terminate(); + _batcher.walking = false; + _forward.renderCamera(camera, _batcher._renderScene); + }; + RenderFlow.init = function(batcher, forwardRenderer) { + _batcher = batcher; + _forward = forwardRenderer; + flows[0] = EMPTY_FLOW; + for (var i = 1; i < FINAL; i++) flows[i] = new RenderFlow(); + }; + RenderFlow.getBachther = function() { + return _batcher; + }; + RenderFlow.FLAG_DONOTHING = DONOTHING; + RenderFlow.FLAG_BREAK_FLOW = BREAK_FLOW; + RenderFlow.FLAG_LOCAL_TRANSFORM = LOCAL_TRANSFORM; + RenderFlow.FLAG_WORLD_TRANSFORM = WORLD_TRANSFORM; + RenderFlow.FLAG_TRANSFORM = TRANSFORM; + RenderFlow.FLAG_OPACITY = OPACITY; + RenderFlow.FLAG_COLOR = COLOR; + RenderFlow.FLAG_OPACITY_COLOR = OPACITY_COLOR; + RenderFlow.FLAG_UPDATE_RENDER_DATA = UPDATE_RENDER_DATA; + RenderFlow.FLAG_RENDER = RENDER; + RenderFlow.FLAG_CHILDREN = CHILDREN; + RenderFlow.FLAG_POST_RENDER = POST_RENDER; + RenderFlow.FLAG_FINAL = FINAL; + module.exports = cc.RenderFlow = RenderFlow; + }), {} ], + 154: [ (function(require, module, exports) { + "use strict"; + var _reusableAtlas = require("./reusable-atlas"); + var _atlases = []; + var _atlasIndex = -1; + var _maxAtlasCount = -1; + var _textureSize = 2048; + var _maxFrameSize = 512; + var _textureBleeding = true; + var _autoMultiBatch = true; + var _autoResetBeforeSceneLoad = true; + var _debugNode = null; + function newAtlas() { + var atlas = _atlases[++_atlasIndex]; + if (!atlas) { + atlas = new _reusableAtlas.Atlas(_textureSize, _textureSize); + _atlases.push(atlas); + dynamicAtlasManager.autoMultiBatch && cc.sp.multiBatcher.requsetMaterial(atlas._texture); + } + return atlas; + } + function beforeSceneLoad() { + _autoResetBeforeSceneLoad && dynamicAtlasManager.reset(); + } + var _enabled = false; + var dynamicAtlasManager = { + Atlas: _reusableAtlas.Atlas, + Rect: _reusableAtlas.Rect, + get enabled() { + return _enabled; + }, + set enabled(value) { + if (_enabled === value) return; + if (value) { + this.reset(); + cc.director.on(cc.Director.EVENT_BEFORE_SCENE_LAUNCH, beforeSceneLoad); + } else cc.director.off(cc.Director.EVENT_BEFORE_SCENE_LAUNCH, beforeSceneLoad); + _enabled = value; + }, + get maxAtlasCount() { + return _maxAtlasCount; + }, + set maxAtlasCount(value) { + _maxAtlasCount = value; + }, + get atlasCount() { + return _atlases.length; + }, + get textureBleeding() { + return _textureBleeding; + }, + set textureBleeding(enable) { + _textureBleeding = enable; + }, + get textureSize() { + return _textureSize; + }, + set textureSize(value) { + _textureSize = value; + }, + get maxFrameSize() { + return _maxFrameSize; + }, + set maxFrameSize(value) { + _maxFrameSize = value; + }, + get autoMultiBatch() { + return _autoMultiBatch; + }, + set autoMultiBatch(enable) { + if (_autoMultiBatch === enable) return; + if (enable) for (var i = 0, l = _atlases.length; i < l; i++) cc.sp.multiBatcher.requsetMaterial(_atlases[i]._texture); + _autoMultiBatch = enable; + }, + get autoResetBeforeSceneLoad() { + return _autoResetBeforeSceneLoad; + }, + set autoResetBeforeSceneLoad(enable) { + if (_autoResetBeforeSceneLoad === enable) return; + _autoResetBeforeSceneLoad = enable; + }, + get atlases() { + return _atlases; + }, + rects: Object.create(null), + insertSpriteFrame: function insertSpriteFrame(spriteFrame) { + false; + if (!_enabled || !spriteFrame || spriteFrame._original) return null; + var atlas, frame; + var rect = spriteFrame._rect, texture = spriteFrame._texture, info = this.rects[texture._uuid]; + var sx = rect.x, sy = rect.y; + if (info) { + sx += info.x; + sy += info.y; + info.spriteFrames.push(spriteFrame); + frame = { + x: sx, + y: sy, + texture: info.atlas._texture + }; + return frame; + } + for (var i = 0; i <= _atlasIndex; i++) { + atlas = _atlases[i]; + frame = atlas.insertSpriteFrame(spriteFrame); + if (frame) return frame; + } + if (_atlasIndex + 1 < _maxAtlasCount) { + atlas = newAtlas(); + return atlas.insertSpriteFrame(spriteFrame); + } + return frame; + }, + deleteSpriteFrame: function deleteSpriteFrame(spriteFrame) { + if (spriteFrame && true && spriteFrame._original) { + this.deleteAtlasSpriteFrame(spriteFrame); + spriteFrame._resetDynamicAtlasFrame(); + } + }, + deleteTexture: function deleteTexture(texture) { + this.deleteAtlasTexture(texture); + }, + reset: function reset() { + for (var i = 0, l = _atlases.length; i < l; i++) _atlases[i].destroy(); + _atlases.length = 0; + _atlasIndex = -1; + }, + deleteAtlasSpriteFrame: function deleteAtlasSpriteFrame(spriteFrame) { + if (!spriteFrame._original) return; + var texture = spriteFrame._original._texture; + for (var i = _atlases.length - 1; i >= 0; i--) if (_atlases[i].deleteSpriteFrame(texture, spriteFrame)) return; + }, + deleteAtlasTexture: function deleteAtlasTexture(texture) { + if (texture) for (var i = _atlases.length - 1; i >= 0; i--) if (_atlases[i].deleteInnerTexture(texture, true)) return; + }, + showDebug: (true, function(show) { + if (show) { + if (!_debugNode || !_debugNode.isValid) { + var width = cc.visibleRect.width; + var height = cc.visibleRect.height; + _debugNode = new cc.Node("DYNAMIC_ATLAS_DEBUG_NODE"); + _debugNode.width = width; + _debugNode.height = height; + _debugNode.x = width / 2; + _debugNode.y = height / 2; + _debugNode.zIndex = cc.macro.MAX_ZINDEX; + _debugNode.parent = cc.director.getScene(); + _debugNode.groupIndex = cc.Node.BuiltinGroupIndex.DEBUG; + cc.Camera._setupDebugCamera(); + var scroll = _debugNode.addComponent(cc.ScrollView); + var content = new cc.Node("CONTENT"); + var layout = content.addComponent(cc.Layout); + layout.type = cc.Layout.Type.VERTICAL; + layout.resizeMode = cc.Layout.ResizeMode.CONTAINER; + content.parent = _debugNode; + content.width = _textureSize; + content.anchorY = 1; + content.x = _textureSize; + scroll.content = content; + for (var i = 0; i <= _atlasIndex; i++) { + var node = new cc.Node("ATLAS"); + var texture = _atlases[i]._texture; + var spriteFrame = new cc.SpriteFrame(); + spriteFrame.setTexture(_atlases[i]._texture); + var sprite = node.addComponent(cc.Sprite); + sprite.spriteFrame = spriteFrame; + node.parent = content; + } + } + return _debugNode; + } + if (_debugNode) { + _debugNode.parent = null; + _debugNode = null; + } + }), + update: function update() { + if (!this.enabled) return; + for (var i = 0; i <= _atlasIndex; i++) _atlases[i].update(); + } + }; + module.exports = cc.dynamicAtlasManager = dynamicAtlasManager; + }), { + "./reusable-atlas": 155 + } ], + 155: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.Rect = exports.Atlas = void 0; + function _createForOfIteratorHelperLoose(o, allowArrayLike) { + var it = "undefined" !== typeof Symbol && o[Symbol.iterator] || o["@@iterator"]; + if (it) return (it = it.call(o)).next.bind(it); + if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && "number" === typeof o.length) { + it && (o = it); + var i = 0; + return function() { + if (i >= o.length) return { + done: true + }; + return { + done: false, + value: o[i++] + }; + }; + } + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if ("string" === typeof o) return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + "Object" === n && o.constructor && (n = o.constructor.name); + if ("Map" === n || "Set" === n) return Array.from(o); + if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); + } + function _arrayLikeToArray(arr, len) { + (null == len || len > arr.length) && (len = arr.length); + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + return arr2; + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + var RenderTexture = require("../../../assets/CCRenderTexture"); + var Rect = (function() { + Rect.reuse = function reuse(atlas, width, height, x, y) { + if (0 === this.pointer) { + for (var i = 0; i < 128; i++) Rect.pool[i] = new Rect(atlas, 0, 0, 0, 0); + this.pointer += 128; + } + this.pointer--; + var rect = this.pool[this.pointer]; + rect.atlas = atlas; + rect.width = width; + rect.height = height; + rect.x = x; + rect.y = y; + return rect; + }; + Rect.recycle = function recycle(rect) { + rect.atlas = void 0; + rect.uuid = ""; + rect.spriteFrames.length = 0; + rect.parentRect = void 0; + rect.subRectA = void 0; + rect.subRectB = void 0; + rect.subRectC = void 0; + rect.cacheIndex = -1; + this.pool[this.pointer] = rect; + this.pointer++; + }; + function Rect(atlas, width, height, x, y) { + this.atlas = void 0; + this.width = 0; + this.height = 0; + this.x = 0; + this.y = 0; + this.cacheIndex = -1; + this.uuid = ""; + this.spriteFrames = []; + this.parentRect = void 0; + this.subRectA = void 0; + this.subRectB = void 0; + this.subRectC = void 0; + this.used = 0; + this.atlas = atlas; + this.width = width; + this.height = height; + this.x = x; + this.y = y; + } + _createClass(Rect, [ { + key: "sizes", + get: function get() { + return this.width * this.height; + } + } ]); + return Rect; + })(); + exports.Rect = Rect; + Rect.pool = []; + Rect.pointer = 0; + var Atlas = (function() { + function Atlas(width, height, padding, border) { + void 0 === padding && (padding = 2); + void 0 === border && (border = 2); + this.width = 0; + this.height = 0; + this.padding = 0; + this.border = 0; + this.rootRect = void 0; + this.freeRects = []; + this._count = 0; + this._texture = void 0; + this._dirty = false; + var texture = new RenderTexture(); + texture.initWithSize(width, height); + texture.update(); + this._texture = texture; + this.width = width; + this.height = height; + this.padding = padding; + this.border = border; + this.rootRect = Rect.reuse(this, this.width + this.padding - 2 * this.border, this.height + this.padding - 2 * this.border, this.border, this.border); + this.pushFreeRect(this.rootRect); + } + var _proto = Atlas.prototype; + _proto.pushFreeRect = function pushFreeRect(rect) { + var i = this.freeRects.push(rect) - 1; + rect.cacheIndex = i; + }; + _proto.removeFreeRect = function removeFreeRect(index) { + var temp = this.freeRects[index]; + var temp2 = this.freeRects[this.freeRects.length - 1]; + temp2.cacheIndex = index; + temp.cacheIndex = -1; + this.freeRects[index] = temp2; + this.freeRects.pop(); + }; + _proto.replaceFreeRect = function replaceFreeRect(index, rect) { + this.freeRects[index].cacheIndex = -1; + rect.cacheIndex = index; + this.freeRects[index] = rect; + }; + _proto.insertSpriteFrame = function insertSpriteFrame(spriteFrame) { + var rect = spriteFrame._rect, texture = spriteFrame._texture; + var sx = rect.x, sy = rect.y; + var width = texture.width, height = texture.height; + var result = this.insert(texture); + if (!result) return null; + if (cc.dynamicAtlasManager.textureBleeding) { + if (width <= 8 || height <= 8) { + this._texture.drawTextureAt(texture, result.x - 1, result.y - 1); + this._texture.drawTextureAt(texture, result.x - 1, result.y + 1); + this._texture.drawTextureAt(texture, result.x + 1, result.y - 1); + this._texture.drawTextureAt(texture, result.x + 1, result.y + 1); + } + this._texture.drawTextureAt(texture, result.x - 1, result.y); + this._texture.drawTextureAt(texture, result.x + 1, result.y); + this._texture.drawTextureAt(texture, result.x, result.y - 1); + this._texture.drawTextureAt(texture, result.x, result.y + 1); + } + this._texture.drawTextureAt(texture, result.x, result.y); + this._count++; + sx += result.x; + sy += result.y; + result.spriteFrames.push(spriteFrame); + this._dirty = true; + var frame = { + x: sx, + y: sy, + texture: this._texture + }; + return frame; + }; + _proto.insert = function insert(texture) { + var width = texture.width + this.padding, height = texture.height + this.padding; + var score = Number.MAX_VALUE; + var areaFit = 0; + var original = void 0; + var originalIndex = 0; + for (var i = 0; i < this.freeRects.length; i++) { + var rect = this.freeRects[i]; + if (rect.width >= width && rect.height >= height) { + areaFit = rect.sizes - width * height; + if (areaFit < score) { + original = rect; + originalIndex = i; + score = areaFit; + } + } + } + if (original) { + if (original.width === width && original.height === height) { + original.uuid = texture._uuid; + original.used++; + original.parentRect && original.parentRect.used++; + cc.dynamicAtlasManager.rects[texture._uuid] = original; + this.removeFreeRect(originalIndex); + return original; + } + var best = Rect.reuse(this, width, height, original.x, original.y); + var tmp; + if (best.y + best.height < original.y + original.height) { + tmp = Rect.reuse(this, original.width, original.y + original.height - (best.y + best.height), original.x, best.y + best.height); + tmp.parentRect = original; + original.subRectB = tmp; + if (tmp.width > Atlas.ignoreRectSize && tmp.height > Atlas.ignoreRectSize) { + this.replaceFreeRect(originalIndex, tmp); + originalIndex = -1; + } + } + if (best.x + best.width < original.x + original.width) { + tmp = Rect.reuse(this, original.x + original.width - (best.x + best.width), original.height - (original.y + original.height - (best.y + best.height)), best.x + best.width, original.y); + tmp.parentRect = original; + original.subRectC = tmp; + if (tmp.width > Atlas.ignoreRectSize && tmp.height > Atlas.ignoreRectSize) if (-1 !== originalIndex) { + this.replaceFreeRect(originalIndex, tmp); + originalIndex = -1; + } else this.pushFreeRect(tmp); + } + -1 !== originalIndex && this.removeFreeRect(originalIndex); + best.parentRect = original; + original.subRectA = best; + best.used++; + original.used++; + 1 === original.used && original.parentRect && original.parentRect.used++; + best.uuid = texture._uuid; + cc.dynamicAtlasManager.rects[texture._uuid] = best; + return best; + } + return; + }; + _proto.update = function update() { + if (!this._dirty) return; + this._texture.update(); + this._dirty = false; + }; + _proto.deleteSpriteFrame = function deleteSpriteFrame(texture, frame) { + if (texture) { + var rect = cc.dynamicAtlasManager.rects[texture._uuid]; + if (rect) { + var index = rect.spriteFrames.indexOf(frame); + if (-1 !== index) { + rect.spriteFrames.splice(index, 1); + 0 === rect.spriteFrames.length && rect.atlas.deleteInnerRect(rect); + } else cc.warn("[Dynamic Atlas] can't find spriteFrame in Rect."); + return true; + } + } + return false; + }; + _proto.deleteInnerRect = function deleteInnerRect(rect) { + delete cc.dynamicAtlasManager.rects[rect.uuid]; + rect.uuid = ""; + this._count--; + for (var _iterator = _createForOfIteratorHelperLoose(rect.spriteFrames), _step; !(_step = _iterator()).done; ) { + var spriteFrame = _step.value; + spriteFrame.isValid && spriteFrame._resetDynamicAtlasFrame(); + } + rect.spriteFrames.length = 0; + this.tryMergeRecycle(rect); + }; + _proto.deleteInnerTexture = function deleteInnerTexture(texture) { + if (texture) { + var rect = cc.dynamicAtlasManager.rects[texture._uuid]; + if (rect) { + rect.atlas.deleteInnerRect(rect); + return true; + } + } + return false; + }; + _proto.tryMergeRecycle = function tryMergeRecycle(rect) { + var old = void 0; + var parent = rect; + while (parent) { + parent.used--; + if (0 === parent.used) { + if (parent.subRectA) { + var i = parent.subRectA.cacheIndex; + -1 !== i && this.removeFreeRect(i); + Rect.recycle(parent.subRectA); + parent.subRectA = void 0; + } + if (parent.subRectB) { + var _i = parent.subRectB.cacheIndex; + -1 !== _i && this.removeFreeRect(_i); + Rect.recycle(parent.subRectB); + parent.subRectB = void 0; + } + if (parent.subRectC) { + var _i2 = parent.subRectC.cacheIndex; + -1 !== _i2 && this.removeFreeRect(_i2); + Rect.recycle(parent.subRectC); + parent.subRectC = void 0; + } + old = parent; + parent = parent.parentRect; + } else { + old && old.width > Atlas.ignoreRectSize && old.height > Atlas.ignoreRectSize && this.pushFreeRect(old); + old = parent; + parent = void 0; + } + } + old === this.rootRect && 0 === old.used && this.pushFreeRect(old); + }; + _proto.isEmpty = function isEmpty() { + return this._count <= 0; + }; + _proto.reset = function reset() { + var rects = cc.dynamicAtlasManager.rects; + for (var key in rects) { + var rect = rects[key]; + if (rect.atlas === this) { + delete rects[key]; + for (var _iterator2 = _createForOfIteratorHelperLoose(rect.spriteFrames), _step2; !(_step2 = _iterator2()).done; ) { + var spriteFrame = _step2.value; + spriteFrame.isValid && spriteFrame._resetDynamicAtlasFrame(); + } + Rect.recycle(rect); + } + } + for (var _iterator3 = _createForOfIteratorHelperLoose(this.freeRects), _step3; !(_step3 = _iterator3()).done; ) { + var _rect = _step3.value; + Rect.recycle(_rect); + } + this.freeRects.length = 0; + this._count = 0; + this.rootRect = Rect.reuse(this, this.width + this.padding - 2 * this.border, this.height + this.padding - 2 * this.border, this.border, this.border); + this.pushFreeRect(this.rootRect); + }; + _proto.destroy = function destroy() { + this.reset(); + this._texture.destroy(); + }; + return Atlas; + })(); + exports.Atlas = Atlas; + Atlas.ignoreRectSize = 10; + Atlas.DEFAULT_HASH = new RenderTexture()._getHash(); + }), { + "../../../assets/CCRenderTexture": 65 + } ], + 156: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _assembler2d = _interopRequireDefault(require("../../assembler-2d")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var textUtils = require("../../../utils/text-utils"); + var macro = require("../../../platform/CCMacro"); + var Label = require("../../../components/CCLabel"); + var Overflow = Label.Overflow; + var shareLabelInfo = require("../utils").shareLabelInfo; + var LetterInfo = function LetterInfo() { + this["char"] = ""; + this.valid = true; + this.x = 0; + this.y = 0; + this.line = 0; + this.hash = ""; + }; + var _tmpRect = cc.rect(); + var _comp = null; + var _horizontalKernings = []; + var _lettersInfo = []; + var _linesWidth = []; + var _linesOffsetX = []; + var _fntConfig = null; + var _numberOfLines = 0; + var _textDesiredHeight = 0; + var _letterOffsetY = 0; + var _tailoredTopY = 0; + var _tailoredBottomY = 0; + var _bmfontScale = 1; + var _lineBreakWithoutSpaces = false; + var _spriteFrame = null; + var _lineSpacing = 0; + var _contentSize = cc.size(); + var _string = ""; + var _fontSize = 0; + var _originFontSize = 0; + var _hAlign = 0; + var _vAlign = 0; + var _spacingX = 0; + var _lineHeight = 0; + var _overflow = 0; + var _isWrapText = false; + var _labelWidth = 0; + var _labelHeight = 0; + var _maxLineWidth = 0; + var _isRetina = false; + var _retinaScale = 1; + var BmfontAssembler = (function(_Assembler2D) { + _inheritsLoose(BmfontAssembler, _Assembler2D); + function BmfontAssembler() { + return _Assembler2D.apply(this, arguments) || this; + } + var _proto = BmfontAssembler.prototype; + _proto.updateRenderData = function updateRenderData(comp) { + if (!comp._vertsDirty) return; + if (_comp === comp) return; + _comp = comp; + this._reserveQuads(comp, comp.string.toString().length); + var assemblerChanged = this._updateFontFamily(comp); + assemblerChanged || this._updateRenderData(comp); + }; + _proto._preUpdateRenderData = function _preUpdateRenderData(comp) { + _comp = comp; + this._reserveQuads(comp, comp.string.toString().length); + var fontAsset = comp.font; + _spriteFrame = fontAsset.spriteFrame; + _fntConfig = fontAsset._fntConfig; + shareLabelInfo.fontAtlas = fontAsset._fontDefDictionary; + }; + _proto._updateRenderData = function _updateRenderData(comp) { + this._updateProperties(comp); + this._updateLabelInfo(comp); + this._updateContent(); + this.updateWorldVerts(comp); + if (_isRetina) { + _contentSize.width /= _retinaScale; + _contentSize.height /= _retinaScale; + _fontSize /= _retinaScale; + } + _comp._actualFontSize = _fontSize; + _comp.node.setContentSize(_contentSize); + _comp._vertsDirty = false; + _comp = null; + this._resetProperties(); + }; + _proto._updateFontScale = function _updateFontScale() { + _bmfontScale = _fontSize / _originFontSize; + }; + _proto._updateFontFamily = function _updateFontFamily(comp) { + var fontAsset = comp.font; + _spriteFrame = fontAsset.spriteFrame; + _fntConfig = fontAsset._fntConfig; + shareLabelInfo.fontAtlas = fontAsset._fontDefDictionary; + return this.packDynamicAtlasAndCheckMaterial(comp, _spriteFrame); + }; + _proto._updateLabelInfo = function _updateLabelInfo() { + shareLabelInfo.hash = ""; + shareLabelInfo.margin = 0; + }; + _proto.getTTFTextureSizeScale = function getTTFTextureSizeScale() { + return _isRetina ? _retinaScale : 1; + }; + _proto._updateProperties = function _updateProperties(comp) { + _string = comp.string.toString(); + _isRetina = !(comp.font instanceof cc.BitmapFont) && cc.sp.enableLabelRetina && 0 === comp.enableRetina || 1 === comp.enableRetina; + _retinaScale = cc.sp.labelRetinaScale; + _fontSize = comp.fontSize; + _originFontSize = _fntConfig ? _fntConfig.fontSize : comp.fontSize; + _hAlign = comp.horizontalAlign; + _vAlign = comp.verticalAlign; + _spacingX = comp.spacingX; + _overflow = comp.overflow; + _lineHeight = comp._lineHeight; + _contentSize.width = comp.node.width; + _contentSize.height = comp.node.height; + if (_isRetina) { + _fontSize *= _retinaScale; + _fntConfig || (_originFontSize *= _retinaScale); + _contentSize.width *= _retinaScale; + _contentSize.height *= _retinaScale; + _lineHeight *= _retinaScale; + shareLabelInfo.margin *= _retinaScale; + } + if (_overflow === Overflow.NONE) { + _isWrapText = false; + _contentSize.width += 2 * shareLabelInfo.margin; + _contentSize.height += 2 * shareLabelInfo.margin; + } else if (_overflow === Overflow.RESIZE_HEIGHT) { + _isWrapText = true; + _contentSize.height += 2 * shareLabelInfo.margin; + } else _isWrapText = comp.enableWrapText; + shareLabelInfo.lineHeight = _lineHeight; + shareLabelInfo.fontSize = _fontSize; + this._setupBMFontOverflowMetrics(); + }; + _proto._resetProperties = function _resetProperties() { + _fntConfig = null; + _spriteFrame = null; + shareLabelInfo.hash = ""; + shareLabelInfo.margin = 0; + }; + _proto._updateContent = function _updateContent() { + this._updateFontScale(); + this._computeHorizontalKerningForText(); + this._alignText(); + }; + _proto._computeHorizontalKerningForText = function _computeHorizontalKerningForText() { + var string = _string; + var stringLen = string.length; + var horizontalKernings = _horizontalKernings; + var kerningDict; + _fntConfig && (kerningDict = _fntConfig.kerningDict); + if (kerningDict && !cc.js.isEmptyObject(kerningDict)) { + var prev = -1; + for (var i = 0; i < stringLen; ++i) { + var key = string.charCodeAt(i); + var kerningAmount = kerningDict[prev << 16 | 65535 & key] || 0; + horizontalKernings[i] = i < stringLen - 1 ? kerningAmount : 0; + prev = key; + } + } else horizontalKernings.length = 0; + }; + _proto._multilineTextWrap = function _multilineTextWrap(nextTokenFunc) { + var textLen = _string.length; + var lineIndex = 0; + var nextTokenX = 0; + var nextTokenY = 0; + var longestLine = 0; + var letterRight = 0; + var highestY = 0; + var lowestY = 0; + var letterDef = null; + var letterPosition = cc.v2(0, 0); + for (var index = 0; index < textLen; ) { + var character = _string.charAt(index); + if ("\n" === character) { + _linesWidth.push(letterRight); + letterRight = 0; + lineIndex++; + nextTokenX = 0; + nextTokenY -= _lineHeight * this._getFontScale() + _lineSpacing; + this._recordPlaceholderInfo(index, character); + index++; + continue; + } + var tokenLen = nextTokenFunc(_string, index, textLen); + var tokenHighestY = highestY; + var tokenLowestY = lowestY; + var tokenRight = letterRight; + var nextLetterX = nextTokenX; + var newLine = false; + for (var tmp = 0; tmp < tokenLen; ++tmp) { + var letterIndex = index + tmp; + character = _string.charAt(letterIndex); + if ("\r" === character) { + this._recordPlaceholderInfo(letterIndex, character); + continue; + } + letterDef = shareLabelInfo.fontAtlas.getLetterDefinitionForChar(character, shareLabelInfo); + if (!letterDef) { + this._recordPlaceholderInfo(letterIndex, character); + var atlasName = ""; + _fntConfig && (atlasName = _fntConfig.atlasName); + console.log("Can't find letter definition in texture atlas " + atlasName + " for letter:" + character); + continue; + } + var letterX = nextLetterX + letterDef.offsetX * _bmfontScale - shareLabelInfo.margin; + if (_isWrapText && _maxLineWidth > 0 && nextTokenX > 0 && letterX + letterDef.w * _bmfontScale > _maxLineWidth && !textUtils.isUnicodeSpace(character)) { + _linesWidth.push(letterRight); + letterRight = 0; + lineIndex++; + nextTokenX = 0; + nextTokenY -= _lineHeight * this._getFontScale() + _lineSpacing; + newLine = true; + break; + } + letterPosition.x = letterX; + letterPosition.y = nextTokenY - letterDef.offsetY * _bmfontScale + shareLabelInfo.margin; + this._recordLetterInfo(letterPosition, character, letterIndex, lineIndex); + letterIndex + 1 < _horizontalKernings.length && letterIndex < textLen - 1 && (nextLetterX += _horizontalKernings[letterIndex + 1]); + nextLetterX += letterDef.xAdvance * _bmfontScale + _spacingX - 2 * shareLabelInfo.margin; + tokenRight = letterPosition.x + letterDef.w * _bmfontScale - shareLabelInfo.margin; + tokenHighestY < letterPosition.y && (tokenHighestY = letterPosition.y); + tokenLowestY > letterPosition.y - letterDef.h * _bmfontScale && (tokenLowestY = letterPosition.y - letterDef.h * _bmfontScale); + } + if (newLine) continue; + nextTokenX = nextLetterX; + letterRight = tokenRight; + highestY < tokenHighestY && (highestY = tokenHighestY); + lowestY > tokenLowestY && (lowestY = tokenLowestY); + longestLine < letterRight && (longestLine = letterRight); + index += tokenLen; + } + this._finishMultilineTextWrap(); + _linesWidth.push(letterRight); + _numberOfLines = lineIndex + 1; + _textDesiredHeight = _numberOfLines * _lineHeight * this._getFontScale(); + _numberOfLines > 1 && (_textDesiredHeight += (_numberOfLines - 1) * _lineSpacing); + _contentSize.width = _labelWidth; + _contentSize.height = _labelHeight; + _labelWidth <= 0 && (_contentSize.width = parseFloat(longestLine.toFixed(2)) + 2 * shareLabelInfo.margin); + _labelHeight <= 0 && (_contentSize.height = parseFloat(_textDesiredHeight.toFixed(2)) + 2 * shareLabelInfo.margin); + _tailoredTopY = _contentSize.height; + _tailoredBottomY = 0; + if (_overflow !== Overflow.CLAMP) { + highestY > 0 && (_tailoredTopY = _contentSize.height + highestY); + lowestY < -_textDesiredHeight && (_tailoredBottomY = _textDesiredHeight + lowestY); + } + return true; + }; + _proto._getFirstCharLen = function _getFirstCharLen() { + return 1; + }; + _proto._getFontScale = function _getFontScale() { + return _overflow === Overflow.SHRINK ? _bmfontScale : 1; + }; + _proto._getFirstWordLen = function _getFirstWordLen(text, startIndex, textLen) { + var character = text.charAt(startIndex); + if (textUtils.isUnicodeCJK(character) || "\n" === character || textUtils.isUnicodeSpace(character)) return 1; + var len = 1; + var letterDef = shareLabelInfo.fontAtlas.getLetterDefinitionForChar(character, shareLabelInfo); + if (!letterDef) return len; + var nextLetterX = letterDef.xAdvance * _bmfontScale + _spacingX; + var letterX; + for (var index = startIndex + 1; index < textLen; ++index) { + character = text.charAt(index); + letterDef = shareLabelInfo.fontAtlas.getLetterDefinitionForChar(character, shareLabelInfo); + if (!letterDef) break; + letterX = nextLetterX + letterDef.offsetX * _bmfontScale; + if (letterX + letterDef.w * _bmfontScale > _maxLineWidth && !textUtils.isUnicodeSpace(character) && _maxLineWidth > 0) return len; + nextLetterX += letterDef.xAdvance * _bmfontScale + _spacingX; + if ("\n" === character || textUtils.isUnicodeSpace(character) || textUtils.isUnicodeCJK(character)) break; + len++; + } + return len; + }; + _proto._multilineTextWrapByWord = function _multilineTextWrapByWord() { + return this._multilineTextWrap(this._getFirstWordLen); + }; + _proto._multilineTextWrapByChar = function _multilineTextWrapByChar() { + return this._multilineTextWrap(this._getFirstCharLen); + }; + _proto._recordPlaceholderInfo = function _recordPlaceholderInfo(letterIndex, _char) { + if (letterIndex >= _lettersInfo.length) { + var tmpInfo = new LetterInfo(); + _lettersInfo.push(tmpInfo); + } + _lettersInfo[letterIndex]["char"] = _char; + _lettersInfo[letterIndex].hash = _char.charCodeAt(0) + shareLabelInfo.hash; + _lettersInfo[letterIndex].valid = false; + }; + _proto._recordLetterInfo = function _recordLetterInfo(letterPosition, character, letterIndex, lineIndex) { + if (letterIndex >= _lettersInfo.length) { + var tmpInfo = new LetterInfo(); + _lettersInfo.push(tmpInfo); + } + var _char2 = character.charCodeAt(0); + var key = _char2 + shareLabelInfo.hash; + _lettersInfo[letterIndex].line = lineIndex; + _lettersInfo[letterIndex]["char"] = character; + _lettersInfo[letterIndex].hash = key; + _lettersInfo[letterIndex].valid = shareLabelInfo.fontAtlas.getLetter(key).valid; + _lettersInfo[letterIndex].x = letterPosition.x; + _lettersInfo[letterIndex].y = letterPosition.y; + }; + _proto._alignText = function _alignText() { + _textDesiredHeight = 0; + _linesWidth.length = 0; + _lineBreakWithoutSpaces ? this._multilineTextWrapByChar() : this._multilineTextWrapByWord(); + this._computeAlignmentOffset(); + _overflow === Overflow.SHRINK && _fontSize > 0 && this._isVerticalClamp() && this._shrinkLabelToContentSize(this._isVerticalClamp); + this._updateQuads() || _overflow === Overflow.SHRINK && this._shrinkLabelToContentSize(this._isHorizontalClamp); + }; + _proto._scaleFontSizeDown = function _scaleFontSizeDown(fontSize) { + var shouldUpdateContent = true; + if (!fontSize) { + fontSize = .1; + shouldUpdateContent = false; + } + _fontSize = fontSize; + shouldUpdateContent && this._updateContent(); + }; + _proto._shrinkLabelToContentSize = function _shrinkLabelToContentSize(lambda) { + var fontSize = _fontSize; + var left = 0, right = 0 | fontSize, mid = 0; + while (left < right) { + mid = left + right + 1 >> 1; + var newFontSize = mid; + if (newFontSize <= 0) break; + _bmfontScale = newFontSize / _originFontSize; + _lineBreakWithoutSpaces ? this._multilineTextWrapByChar() : this._multilineTextWrapByWord(); + this._computeAlignmentOffset(); + lambda() ? right = mid - 1 : left = mid; + } + var actualFontSize = left; + actualFontSize >= 0 && this._scaleFontSizeDown(actualFontSize); + }; + _proto._isVerticalClamp = function _isVerticalClamp() { + return _textDesiredHeight > _contentSize.height; + }; + _proto._isHorizontalClamp = function _isHorizontalClamp() { + var letterClamp = false; + for (var ctr = 0, l = _string.length; ctr < l; ++ctr) { + var letterInfo = _lettersInfo[ctr]; + if (letterInfo.valid) { + var letterDef = shareLabelInfo.fontAtlas.getLetter(letterInfo.hash); + var px = letterInfo.x + letterDef.w * _bmfontScale; + var lineIndex = letterInfo.line; + if (_labelWidth > 0) if (_isWrapText) { + var wordWidth = _linesWidth[lineIndex]; + if (wordWidth > _contentSize.width && (px > _contentSize.width || px < 0)) { + letterClamp = true; + break; + } + } else if (px > _contentSize.width) { + letterClamp = true; + break; + } + } + } + return letterClamp; + }; + _proto._isHorizontalClamped = function _isHorizontalClamped(px, lineIndex) { + var wordWidth = _linesWidth[lineIndex]; + var letterOverClamp = px > _contentSize.width || px < 0; + return _isWrapText ? wordWidth > _contentSize.width && letterOverClamp : letterOverClamp; + }; + _proto._updateQuads = function _updateQuads() { + var texture = _spriteFrame ? _spriteFrame._texture : shareLabelInfo.fontAtlas.getTexture(); + var node = _comp.node; + this.verticesCount = this.indicesCount = 0; + this._renderData && (this._renderData.dataLength = 0); + var contentSize = _contentSize, appx = node._anchorPoint.x * contentSize.width, appy = node._anchorPoint.y * contentSize.height; + var ret = true; + for (var ctr = 0, l = _string.length; ctr < l; ++ctr) { + var letterInfo = _lettersInfo[ctr]; + if (!letterInfo.valid) continue; + var letterDef = shareLabelInfo.fontAtlas.getLetter(letterInfo.hash); + _tmpRect.height = letterDef.h; + _tmpRect.width = letterDef.w; + _tmpRect.x = letterDef.u; + _tmpRect.y = letterDef.v; + var py = letterInfo.y + _letterOffsetY; + if (_labelHeight > 0) { + if (py > _tailoredTopY) { + var clipTop = py - _tailoredTopY; + _tmpRect.y += clipTop; + _tmpRect.height -= clipTop; + py -= clipTop; + } + py - letterDef.h * _bmfontScale < _tailoredBottomY && _overflow === Overflow.CLAMP && (_tmpRect.height = py < _tailoredBottomY ? 0 : (py - _tailoredBottomY) / _bmfontScale); + } + var lineIndex = letterInfo.line; + var px = letterInfo.x + letterDef.w / 2 * _bmfontScale + _linesOffsetX[lineIndex]; + if (_labelWidth > 0 && this._isHorizontalClamped(px, lineIndex)) if (_overflow === Overflow.CLAMP) _tmpRect.width = 0; else if (_overflow === Overflow.SHRINK) { + if (_contentSize.width > letterDef.w) { + ret = false; + break; + } + _tmpRect.width = 0; + } + if (_tmpRect.height > 0 && _tmpRect.width > 0) { + var isRotated = this._determineRect(_tmpRect); + var letterPositionX = letterInfo.x + _linesOffsetX[letterInfo.line]; + this.appendQuad(_comp, texture, _tmpRect, isRotated, letterPositionX - appx, py - appy, _bmfontScale, letterDef); + } + } + this._quadsUpdated(_comp); + return ret; + }; + _proto._determineRect = function _determineRect(tempRect) { + var isRotated = _spriteFrame.isRotated(); + var originalSize = _spriteFrame._originalSize; + var rect = _spriteFrame._rect; + var offset = _spriteFrame._offset; + var trimmedLeft = offset.x + (originalSize.width - rect.width) / 2; + var trimmedTop = offset.y - (originalSize.height - rect.height) / 2; + if (isRotated) { + var originalX = tempRect.x; + tempRect.x = rect.x + rect.height - tempRect.y - tempRect.height - trimmedTop; + tempRect.y = originalX + rect.y - trimmedLeft; + tempRect.y < 0 && (tempRect.height = tempRect.height + trimmedTop); + } else { + tempRect.x += rect.x - trimmedLeft; + tempRect.y += rect.y + trimmedTop; + } + return isRotated; + }; + _proto._computeAlignmentOffset = function _computeAlignmentOffset() { + _linesOffsetX.length = 0; + switch (_hAlign) { + case macro.TextAlignment.LEFT: + for (var i = 0; i < _numberOfLines; ++i) _linesOffsetX.push(0); + break; + + case macro.TextAlignment.CENTER: + for (var _i = 0, l = _linesWidth.length; _i < l; _i++) _linesOffsetX.push((_contentSize.width - _linesWidth[_i]) / 2); + break; + + case macro.TextAlignment.RIGHT: + for (var _i2 = 0, _l = _linesWidth.length; _i2 < _l; _i2++) _linesOffsetX.push(_contentSize.width - _linesWidth[_i2]); + } + _letterOffsetY = _contentSize.height; + if (_vAlign !== macro.VerticalTextAlignment.TOP) { + var blank = _contentSize.height - _textDesiredHeight + _lineHeight * this._getFontScale() - _originFontSize * _bmfontScale; + _vAlign === macro.VerticalTextAlignment.BOTTOM ? _letterOffsetY -= blank : _letterOffsetY -= blank / 2; + } + }; + _proto._setupBMFontOverflowMetrics = function _setupBMFontOverflowMetrics() { + var newWidth = _contentSize.width, newHeight = _contentSize.height; + _overflow === Overflow.RESIZE_HEIGHT && (newHeight = 0); + if (_overflow === Overflow.NONE) { + newWidth = 0; + newHeight = 0; + } + _labelWidth = newWidth; + _labelHeight = newHeight; + _maxLineWidth = newWidth; + }; + _proto.updateWorldVerts = function updateWorldVerts() {}; + _proto.appendQuad = function appendQuad(comp, texture, rect, rotated, x, y, scale, letter) {}; + _proto._quadsUpdated = function _quadsUpdated(comp) {}; + _proto._reserveQuads = function _reserveQuads() {}; + _proto._finishMultilineTextWrap = function _finishMultilineTextWrap() {}; + return BmfontAssembler; + })(_assembler2d["default"]); + exports["default"] = BmfontAssembler; + module.exports = exports["default"]; + }), { + "../../../components/CCLabel": 93, + "../../../platform/CCMacro": 126, + "../../../utils/text-utils": 212, + "../../assembler-2d": 147, + "../utils": 160 + } ], + 157: [ (function(require, module, exports) { + "use strict"; + function LabelFrame() { + this._rect = null; + this.uv = []; + this._texture = null; + this._original = null; + } + LabelFrame.prototype = { + constructor: LabelFrame, + getRect: function getRect() { + return cc.rect(this._rect); + }, + setRect: function setRect(rect) { + this._rect = rect; + this._texture && this._calculateUV(); + }, + _setDynamicAtlasFrame: function _setDynamicAtlasFrame(frame) { + if (!frame) return; + this._original = { + _texture: this._texture, + _x: this._rect.x, + _y: this._rect.y + }; + this._texture = frame.texture; + this._rect.x = frame.x; + this._rect.y = frame.y; + this._calculateUV(); + }, + _resetDynamicAtlasFrame: function _resetDynamicAtlasFrame() { + if (!this._original) return; + this._rect.x = this._original._x; + this._rect.y = this._original._y; + this._texture = this._original._texture; + this._original = null; + this._calculateUV(); + }, + _refreshTexture: function _refreshTexture(texture) { + this._texture = texture; + this._rect = cc.rect(0, 0, texture.width, texture.height); + this._calculateUV(); + }, + _calculateUV: function _calculateUV() { + var rect = this._rect, texture = this._texture, uv = this.uv, texw = texture.width, texh = texture.height; + var l = 0 === texw ? 0 : rect.x / texw; + var r = 0 === texw ? 0 : (rect.x + rect.width) / texw; + var b = 0 === texh ? 0 : (rect.y + rect.height) / texh; + var t = 0 === texh ? 0 : rect.y / texh; + uv[0] = l; + uv[1] = b; + uv[2] = r; + uv[3] = b; + uv[4] = l; + uv[5] = t; + uv[6] = r; + uv[7] = t; + } + }; + module.exports = LabelFrame; + }), {} ], + 158: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _bmfont = _interopRequireDefault(require("../../webgl/assemblers/label/2d/bmfont")); + var _vertexFormat = require("../../webgl/vertex-format"); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + function _createForOfIteratorHelperLoose(o, allowArrayLike) { + var it = "undefined" !== typeof Symbol && o[Symbol.iterator] || o["@@iterator"]; + if (it) return (it = it.call(o)).next.bind(it); + if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && "number" === typeof o.length) { + it && (o = it); + var i = 0; + return function() { + if (i >= o.length) return { + done: true + }; + return { + done: false, + value: o[i++] + }; + }; + } + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if ("string" === typeof o) return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + "Object" === n && o.constructor && (n = o.constructor.name); + if ("Map" === n || "Set" === n) return Array.from(o); + if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); + } + function _arrayLikeToArray(arr, len) { + (null == len || len > arr.length) && (len = arr.length); + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + return arr2; + } + var Label = require("../../../components/CCLabel"); + var LabelOutline = require("../../../components/CCLabelOutline"); + var textUtils = require("../../../utils/text-utils"); + var Component = require("../../../components/CCComponent"); + var RenderTexture = require("../../../assets/CCRenderTexture"); + var OUTLINE_SUPPORTED = cc.js.isChildClassOf(LabelOutline, Component); + var getFontFamily = require("../utils").getFontFamily; + var shareLabelInfo = require("../utils").shareLabelInfo; + var FontLetterDefinition = cc.BitmapFont.FontLetterDefinition; + var FontAtlas = cc.BitmapFont.FontAtlas; + var WHITE = cc.Color.WHITE; + var space = 0; + var bleed = 2; + var _invisibleAlpha = (1 / 255).toFixed(3); + function LetterTexture(_char, labelInfo) { + this._texture = null; + this._labelInfo = labelInfo; + this._char = _char; + this._hash = null; + this._data = null; + this._canvas = null; + this._context = null; + this._width = 0; + this._height = 0; + this._offsetY = 0; + this._hash = _char.charCodeAt(0) + labelInfo.hash; + } + LetterTexture.prototype = { + constructor: LetterTexture, + updateRenderData: function updateRenderData() { + this._updateProperties(); + this._updateTexture(); + }, + _updateProperties: function _updateProperties() { + this._texture = new cc.Texture2D(); + this._data = Label._canvasPool.get(); + this._canvas = this._data.canvas; + this._context = this._data.context; + this._context.font = this._labelInfo.fontDesc; + var width = textUtils.safeMeasureText(this._context, this._char, this._labelInfo.fontDesc); + var blank = 2 * this._labelInfo.margin + bleed; + this._width = parseFloat(width.toFixed(2)) + blank; + this._height = (1 + textUtils.BASELINE_RATIO) * this._labelInfo.fontSize + blank; + this._offsetY = -this._labelInfo.fontSize * textUtils.BASELINE_RATIO / 2; + this._canvas.width !== this._width && (this._canvas.width = this._width); + this._canvas.height !== this._height && (this._canvas.height = this._height); + this._texture.initWithElement(this._canvas); + }, + _updateTexture: function _updateTexture() { + var context = this._context; + var labelInfo = this._labelInfo, width = this._canvas.width, height = this._canvas.height; + var fontSize = this._labelInfo.fontSize; + var startX = width / 2; + var startY = height / 2 + fontSize * textUtils.MIDDLE_RATIO + fontSize * textUtils.BASELINE_OFFSET; + var color = labelInfo.color; + context.lineJoin = "round"; + context.textAlign = "center"; + context.clearRect(0, 0, width, height); + context.fillStyle = "rgba(" + color.r + ", " + color.g + ", " + color.b + ", " + _invisibleAlpha + ")"; + context.fillRect(0, 0, width, height); + context.font = labelInfo.fontDesc; + context.fillStyle = "rgba(" + color.r + ", " + color.g + ", " + color.b + ", 1)"; + if (labelInfo.isOutlined && labelInfo.margin > 0) { + var strokeColor = labelInfo.out || WHITE; + context.strokeStyle = "rgba(" + strokeColor.r + ", " + strokeColor.g + ", " + strokeColor.b + ", " + strokeColor.a / 255 + ")"; + context.lineWidth = 2 * labelInfo.margin; + context.strokeText(this._char, startX, startY); + } + context.fillText(this._char, startX, startY); + this._texture.handleLoadedTexture(); + }, + destroy: function destroy() { + this._texture.destroy(); + this._texture = null; + Label._canvasPool.put(this._data); + } + }; + function LetterAtlas(atlases, width, height) { + var texture = new RenderTexture(); + texture.initWithSize(width, height); + texture.update(); + this._atlases = atlases; + this._texture = texture; + this._id = 0; + this._tmpId = -1; + this._x = space; + this._y = space; + this._nexty = space; + this.frees = []; + this.waitCleans = []; + this._width = width; + this._height = height; + } + cc.js.mixin(LetterAtlas.prototype, { + insertLetterTexture: function insertLetterTexture(letterTexture) { + var texture = letterTexture._texture; + var width = texture.width, height = texture.height; + if (this.frees.length > 0) { + var score = Number.MAX_VALUE; + var areaFit = 0; + var original = null; + var originalIndex = 0; + for (var i = 0; i < this.frees.length; i++) { + var freeLetter = this.frees[i]; + if (freeLetter._width >= width && freeLetter._height >= height) { + areaFit = freeLetter._width * freeLetter._height - width * height; + if (areaFit < score) { + original = freeLetter; + originalIndex = i; + score = areaFit; + } + } + } + if (original) { + original._hash = letterTexture._hash; + original.w = letterTexture._width - bleed; + original.h = letterTexture._height - bleed; + original.xAdvance = original.w; + original.offsetY = letterTexture._offsetY; + this._texture.drawTextureAt(texture, original.u - bleed / 2, original.v - bleed / 2); + this._dirty = true; + this.removeFreeLetter(originalIndex); + this._atlases._fontDefDictionary.addLetterDefinitions(letterTexture._hash, original); + return original; + } + } + width <= .75 * height ? width = .75 * height : width <= height && (width = height); + var oldx = this._x, oldy = this._y, oldnexty = this._nexty; + if (this._x + width + space > this._width) { + this._x = space; + this._y = this._nexty; + } + this._y + height > this._nexty && (this._nexty = this._y + height + space); + if (this._nexty > this._height) { + this._x = oldx; + this._y = oldy; + this._nexty = oldnexty; + if (this.waitCleans.length > 0) { + for (var _iterator = _createForOfIteratorHelperLoose(this.waitCleans), _step; !(_step = _iterator()).done; ) { + var _letter = _step.value; + _letter._inCleans = false; + if (0 === _letter.ref) { + delete this._atlases._fontDefDictionary._letterDefinitions[_letter._hash]; + this.frees.push(_letter); + } + } + this.waitCleans.length = 0; + return this.insertLetterTexture(letterTexture); + } + return null; + } + this._texture.drawTextureAt(texture, this._x, this._y); + this._dirty = true; + var letter = new FontLetterDefinition(); + letter.u = this._x + bleed / 2; + letter.v = this._y + bleed / 2; + letter.texture = this._texture; + letter.atlas = this; + letter.ref = 0; + letter.valid = true; + letter.w = letterTexture._width - bleed; + letter.h = letterTexture._height - bleed; + letter._inCleans = false; + letter._hash = letterTexture._hash; + letter._width = width; + letter._height = height; + letter.xAdvance = letter.w; + letter.offsetY = letterTexture._offsetY; + this._x += width + space; + this._atlases._fontDefDictionary.addLetterDefinitions(letterTexture._hash, letter); + return letter; + }, + pushFreeLetter: function pushFreeLetter(letter) { + var i = this.frees.push(letter) - 1; + }, + removeFreeLetter: function removeFreeLetter(index) { + var temp = this.frees[index]; + var temp2 = this.frees[this.frees.length - 1]; + this.frees[index] = temp2; + this.frees.pop(); + }, + update: function update() { + if (!this._dirty) return; + this._texture.update(); + this._dirty = false; + }, + reset: function reset() { + this._x = space; + this._y = space; + this._nexty = space; + var defs = this._atlases._fontDefDictionary._letterDefinitions; + for (var key in defs) { + var def = defs[key]; + def.atlas === this && delete defs[key]; + } + this.frees.length = 0; + this.waitCleans.length = 0; + }, + destroy: function destroy() { + this.reset(); + var handler = this._atlases.material.getMultiHandler(); + handler.removeTexture(this._texture); + this._texture.destroy(); + this._texture = null; + } + }); + var LetterAtlases = (function() { + function LetterAtlases() { + this.atlases = []; + this.material = null; + this.fakeMaterial = { + material: null + }; + this._fontDefDictionary = new FontAtlas(null); + var handler = new cc.sp.MultiHandler(); + this.material = handler.material; + this.fakeMaterial.material = this.material; + cc.director.on(cc.Director.EVENT_BEFORE_SCENE_LAUNCH, this.beforeSceneLoad, this); + } + var _proto = LetterAtlases.prototype; + _proto.insertLetterTexture = function insertLetterTexture(letterTexture) { + for (var _iterator2 = _createForOfIteratorHelperLoose(this.atlases), _step2; !(_step2 = _iterator2()).done; ) { + var _atlas = _step2.value; + var letter = _atlas.insertLetterTexture(letterTexture); + if (letter) return letter; + } + if (this.atlases.length >= 8) return null; + var atlas = new LetterAtlas(this, _atlasWidth, _atlasHeight); + var len = this.atlases.push(atlas); + atlas._id = len - 1; + var handler = this.material.getMultiHandler(); + handler.setTexture(atlas._id, atlas._texture); + (true, cc.sp.charAtlasAutoBatchCount >= len) && cc.sp.multiBatcher.requsetMaterial(atlas._texture); + return atlas.insertLetterTexture(letterTexture); + }; + _proto.deleteLetter = function deleteLetter(letter) { + letter.ref--; + if (0 === letter.ref && !letter._inCleans) { + letter._inCleans = true; + letter.atlas.waitCleans.push(letter); + } + }; + _proto.update = function update() { + for (var _iterator3 = _createForOfIteratorHelperLoose(this.atlases), _step3; !(_step3 = _iterator3()).done; ) { + var atlas = _step3.value; + atlas.update(); + } + }; + _proto.reset = function reset() { + this._fontDefDictionary.clear(); + for (var _iterator4 = _createForOfIteratorHelperLoose(this.atlases), _step4; !(_step4 = _iterator4()).done; ) { + var atlas = _step4.value; + atlas.reset(); + } + }; + _proto.destroy = function destroy() { + this._fontDefDictionary.clear(); + for (var _iterator5 = _createForOfIteratorHelperLoose(this.atlases), _step5; !(_step5 = _iterator5()).done; ) { + var atlas = _step5.value; + atlas.destroy(); + } + this.atlases.length = 0; + }; + _proto.beforeSceneLoad = function beforeSceneLoad() { + cc.sp.charAtlasAutoResetBeforeSceneLoad && this.clearAllCache(); + }; + _proto.clearAllCache = function clearAllCache() { + this.reset(); + }; + _proto.getTexture = function getTexture() { + if (!_emptyTexture) { + _emptyTexture = new RenderTexture(); + _emptyTexture.initWithSize(_atlasWidth, _atlasHeight); + _emptyTexture.update(); + } + return _emptyTexture; + }; + _proto.getLetter = function getLetter(key) { + return this._fontDefDictionary._letterDefinitions[key]; + }; + _proto.getLetterDefinitionForChar = function getLetterDefinitionForChar(_char2, labelInfo) { + var hash = _char2.charCodeAt(0) + labelInfo.hash; + var letter = this._fontDefDictionary._letterDefinitions[hash]; + if (!letter) { + var temp = new LetterTexture(_char2, labelInfo); + temp.updateRenderData(); + letter = this.insertLetterTexture(temp); + temp.destroy(); + } + if (letter && _firstTraverse) { + letter.ref++; + _assembler._letterRefs.push(letter); + this.checkMaterialAndUpdateTexId(letter); + } + return letter; + }; + _proto.checkMaterialAndUpdateTexId = function checkMaterialAndUpdateTexId(letter) { + var atlas = letter.atlas; + var comp = _assembler._renderComp; + if (_needCheckMaterial) { + _needCheckMaterial = false; + if (_usedMaterial.material !== _shareAtlas.material) { + _assembler.checkAndSwitchMaterial(comp, atlas._texture, _usedMaterial); + _usedMaterial = comp._materials[0]; + } + } + if (_usedMaterial.material !== _shareAtlas.material && -1 === atlas._tmpId) { + var handler = _usedMaterial.material.getMultiHandler(); + if (handler) { + var index = handler.getIndex(atlas._texture.getImpl()); + if (-1 !== index) { + atlas._tmpId = index; + return; + } + } + comp.setMaterial(0, _shareAtlas.material); + _usedMaterial = _shareAtlas.fakeMaterial; + } + }; + return LetterAtlases; + })(); + function computeHash(labelInfo) { + var hashData = "|"; + var color = labelInfo.color.toHEX(); + var out = ""; + labelInfo.isOutlined && labelInfo.margin > 0 && (out = out + labelInfo.margin + labelInfo.out.toHEX()); + return hashData + labelInfo.fontSize + labelInfo.fontFamily + color + out; + } + var _shareAtlas = null; + var _atlasWidth = 2048; + var _atlasHeight = 2048; + var _isBold = false; + var _usedMaterial = null; + var _needCheckMaterial = false; + var _firstTraverse = false; + var _assembler = null; + var _emptyTexture = null; + var LetterFontAssembler = (function(_WebglBmfontAssembler) { + _inheritsLoose(LetterFontAssembler, _WebglBmfontAssembler); + function LetterFontAssembler() { + var _this; + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) args[_key] = arguments[_key]; + _this = _WebglBmfontAssembler.call.apply(_WebglBmfontAssembler, [ this ].concat(args)) || this; + _this._letterRefs = []; + return _this; + } + var _proto2 = LetterFontAssembler.prototype; + _proto2.initData = function initData() { + var data = this._renderData; + data.createFlexData(0, this.verticesCount, this.indicesCount, this.getVfmt()); + }; + _proto2.getVfmt = function getVfmt() { + return _vertexFormat.vfmtPosUvColorTexId; + }; + _proto2.getBuffer = function getBuffer() { + return cc.renderer._handle.getBuffer("mesh", this.getVfmt()); + }; + _proto2._getAssemblerData = function _getAssemblerData() { + if (!_shareAtlas) { + _shareAtlas = new LetterAtlases(); + cc.Label._shareAtlas = _shareAtlas; + } + return _shareAtlas.getTexture(); + }; + _proto2._updateFontFamily = function _updateFontFamily(comp) { + shareLabelInfo.fontAtlas = _shareAtlas; + shareLabelInfo.fontFamily = getFontFamily(comp); + var outline = OUTLINE_SUPPORTED && comp.getComponent(LabelOutline); + if (outline && outline.enabled) { + shareLabelInfo.isOutlined = true; + shareLabelInfo.margin = outline.width; + shareLabelInfo.out = outline.color.clone(); + shareLabelInfo.out.a = outline.color.a * comp.node.color.a / 255; + } else { + shareLabelInfo.isOutlined = false; + shareLabelInfo.margin = 0; + } + }; + _proto2._updateLabelInfo = function _updateLabelInfo(comp) { + shareLabelInfo.fontDesc = this._getFontDesc(); + shareLabelInfo.color = comp.node.color; + shareLabelInfo.hash = computeHash(shareLabelInfo); + }; + _proto2._getFontDesc = function _getFontDesc() { + var fontDesc = shareLabelInfo.fontSize.toString() + "px "; + fontDesc += shareLabelInfo.fontFamily; + _isBold && (fontDesc = "bold " + fontDesc); + return fontDesc; + }; + _proto2._computeHorizontalKerningForText = function _computeHorizontalKerningForText() {}; + _proto2._determineRect = function _determineRect(tempRect) { + return false; + }; + _proto2._updateRenderData = function _updateRenderData(comp) { + _assembler = this; + _usedMaterial = _assembler._renderComp._materials[0]; + _needCheckMaterial = true; + _firstTraverse = true; + for (var _iterator6 = _createForOfIteratorHelperLoose(_shareAtlas.atlases), _step6; !(_step6 = _iterator6()).done; ) { + var atlas = _step6.value; + atlas._tmpId = -1; + } + this._recycleLetterRef(); + _WebglBmfontAssembler.prototype._updateRenderData.call(this, comp); + _usedMaterial = null; + _assembler = null; + }; + _proto2._finishMultilineTextWrap = function _finishMultilineTextWrap() { + _firstTraverse = false; + }; + _proto2._recycleLetterRef = function _recycleLetterRef() { + for (var _iterator7 = _createForOfIteratorHelperLoose(this._letterRefs), _step7; !(_step7 = _iterator7()).done; ) { + var letter = _step7.value; + _shareAtlas.deleteLetter(letter); + } + this._letterRefs.length = 0; + }; + _proto2._resetAssemblerData = function _resetAssemblerData(assemblerData) { + 0 !== this._letterRefs.length && this._recycleLetterRef(); + }; + _proto2.appendVerts = function appendVerts(comp, offset, l, r, b, t, letter) { + _WebglBmfontAssembler.prototype.appendVerts.call(this, comp, offset, l, r, b, t, letter); + var renderData = this._renderData; + var verts = renderData.vDatas[0]; + var floatsPerVert = this.floatsPerVert; + var texIdOffset = offset + this.texIdOffset; + var id = _usedMaterial.material !== _shareAtlas.material ? letter.atlas._tmpId : letter.atlas._id; + verts[texIdOffset] = id; + texIdOffset += floatsPerVert; + verts[texIdOffset] = id; + texIdOffset += floatsPerVert; + verts[texIdOffset] = id; + texIdOffset += floatsPerVert; + verts[texIdOffset] = id; + }; + return LetterFontAssembler; + })(_bmfont["default"]); + exports["default"] = LetterFontAssembler; + LetterFontAssembler.prototype.floatsPerVert = 6; + LetterFontAssembler.prototype.texIdOffset = 5; + LetterFontAssembler.prototype.isMulti = true; + module.exports = exports["default"]; + }), { + "../../../assets/CCRenderTexture": 65, + "../../../components/CCComponent": 91, + "../../../components/CCLabel": 93, + "../../../components/CCLabelOutline": 94, + "../../../utils/text-utils": 212, + "../../webgl/assemblers/label/2d/bmfont": 164, + "../../webgl/vertex-format": 190, + "../utils": 160 + } ], + 159: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _assembler2d = _interopRequireDefault(require("../../assembler-2d")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var textUtils = require("../../../utils/text-utils"); + var macro = require("../../../platform/CCMacro"); + var Label = require("../../../components/CCLabel"); + var LabelOutline = require("../../../components/CCLabelOutline"); + var LabelShadow = require("../../../components/CCLabelShadow"); + var Overflow = Label.Overflow; + var deleteFromDynamicAtlas = require("../utils").deleteFromDynamicAtlas; + var getFontFamily = require("../utils").getFontFamily; + var MAX_SIZE = 2048; + var _invisibleAlpha = (1 / 255).toFixed(3); + var _context = null; + var _canvas = null; + var _texture = null; + var _fontDesc = ""; + var _string = ""; + var _fontSize = 0; + var _drawFontSize = 0; + var _splitedStrings = []; + var _canvasSize = cc.Size.ZERO; + var _lineHeight = 0; + var _hAlign = 0; + var _vAlign = 0; + var _color = null; + var _fontFamily = ""; + var _overflow = Overflow.NONE; + var _isWrapText = false; + var _premultiply = false; + var _isRetina = false; + var _retinaScale = 1; + var _outlineComp = null; + var _outlineColor = cc.Color.WHITE; + var _shadowComp = null; + var _shadowColor = cc.Color.BLACK; + var _canvasPadding = cc.rect(); + var _contentSizeExtend = cc.Size.ZERO; + var _nodeContentSize = cc.Size.ZERO; + var _enableBold = false; + var _enableItalic = false; + var _enableUnderline = false; + var _underlineThickness = 0; + var _drawUnderlinePos = cc.Vec2.ZERO; + var _drawUnderlineWidth = 0; + var _sharedLabelData; + var Alignment = [ "left", "center", "right" ]; + var TTFAssembler = (function(_Assembler2D) { + _inheritsLoose(TTFAssembler, _Assembler2D); + function TTFAssembler() { + return _Assembler2D.apply(this, arguments) || this; + } + var _proto = TTFAssembler.prototype; + _proto._getAssemblerData = function _getAssemblerData() { + _sharedLabelData = Label._canvasPool.get(); + _sharedLabelData.canvas.width = _sharedLabelData.canvas.height = 1; + return _sharedLabelData; + }; + _proto._resetAssemblerData = function _resetAssemblerData(assemblerData) { + assemblerData && Label._canvasPool.put(assemblerData); + }; + _proto.updateRenderData = function updateRenderData(comp) { + _Assembler2D.prototype.updateRenderData.call(this, comp); + if (!comp._vertsDirty) return; + this._updateProperties(comp); + this._calculateLabelFont(); + this._updateLabelDimensions(); + this._updateTexture(comp); + var assemblerChanged = this._calDynamicAtlas(comp); + assemblerChanged || this._updateRenderData(comp); + }; + _proto._updateRenderData = function _updateRenderData(comp) { + if (_isRetina) { + _fontSize /= _retinaScale; + _nodeContentSize.width /= _retinaScale; + _nodeContentSize.height /= _retinaScale; + } + comp._actualFontSize = _fontSize; + comp.node.setContentSize(_nodeContentSize); + this.updateVerts(comp); + comp._vertsDirty = false; + _context = null; + _canvas = null; + _texture = null; + }; + _proto.getTTFTextureSizeScale = function getTTFTextureSizeScale() { + return _isRetina ? _retinaScale : 1; + }; + _proto.updateVerts = function updateVerts() {}; + _proto._updatePaddingRect = function _updatePaddingRect() { + var top = 0, bottom = 0, left = 0, right = 0; + var outlineWidth = 0; + _contentSizeExtend.width = _contentSizeExtend.height = 0; + if (_outlineComp) { + outlineWidth = _outlineComp.width; + _isRetina && (outlineWidth *= _retinaScale); + top = bottom = left = right = outlineWidth; + _contentSizeExtend.width = _contentSizeExtend.height = 2 * outlineWidth; + } + if (_shadowComp) { + var shadowWidth = _shadowComp.blur + outlineWidth; + left = Math.max(left, -_shadowComp._offset.x + shadowWidth); + right = Math.max(right, _shadowComp._offset.x + shadowWidth); + top = Math.max(top, _shadowComp._offset.y + shadowWidth); + bottom = Math.max(bottom, -_shadowComp._offset.y + shadowWidth); + } + if (_enableItalic) { + var offset = _drawFontSize * Math.tan(.20943951); + right += offset; + _contentSizeExtend.width += offset; + } + _canvasPadding.x = left; + _canvasPadding.y = top; + _canvasPadding.width = left + right; + _canvasPadding.height = top + bottom; + }; + _proto._updateProperties = function _updateProperties(comp) { + var assemblerData = comp._assemblerData; + _context = assemblerData.context; + _canvas = assemblerData.canvas; + _texture = comp._frame._original ? comp._frame._original._texture : comp._frame._texture; + _isRetina = cc.sp.enableLabelRetina && 0 === comp.enableRetina || 1 === comp.enableRetina; + _retinaScale = cc.sp.labelRetinaScale; + _string = comp.string.toString(); + _fontSize = comp._fontSize; + _nodeContentSize = comp.node.getContentSize(); + _lineHeight = comp._lineHeight; + _drawFontSize = _fontSize; + _underlineThickness = comp.underlineHeight || _drawFontSize / 8; + if (_isRetina) { + _fontSize *= _retinaScale; + _nodeContentSize.width *= _retinaScale; + _nodeContentSize.height *= _retinaScale; + _lineHeight *= _retinaScale; + comp.underlineHeight && (_underlineThickness *= _retinaScale); + _drawFontSize = _fontSize; + } + _overflow = comp.overflow; + _canvasSize.width = _nodeContentSize.width; + _canvasSize.height = _nodeContentSize.height; + _hAlign = comp.horizontalAlign; + _vAlign = comp.verticalAlign; + _color = comp.node.color; + _enableBold = comp.enableBold; + _enableItalic = comp.enableItalic; + _enableUnderline = comp.enableUnderline; + _fontFamily = getFontFamily(comp); + _premultiply = comp.srcBlendFactor === cc.macro.BlendFactor.ONE; + false; + _isWrapText = _overflow !== Overflow.NONE && (_overflow === Overflow.RESIZE_HEIGHT || comp.enableWrapText); + _outlineComp = LabelOutline && comp.getComponent(LabelOutline); + _outlineComp = _outlineComp && _outlineComp.enabled && _outlineComp.width > 0 ? _outlineComp : null; + _outlineComp && _outlineColor.set(_outlineComp.color); + _shadowComp = LabelShadow && comp.getComponent(LabelShadow); + _shadowComp = _shadowComp && _shadowComp.enabled ? _shadowComp : null; + if (_shadowComp) { + _shadowColor.set(_shadowComp.color); + _shadowColor.a = _shadowColor.a * comp.node.color.a / 255; + } + this._updatePaddingRect(); + }; + _proto._calculateFillTextStartPosition = function _calculateFillTextStartPosition() { + var labelX = 0; + _hAlign === macro.TextAlignment.RIGHT ? labelX = _canvasSize.width - _canvasPadding.width : _hAlign === macro.TextAlignment.CENTER && (labelX = (_canvasSize.width - _canvasPadding.width) / 2); + var lineHeight = this._getLineHeight(); + var drawStartY = lineHeight * (_splitedStrings.length - 1); + var firstLinelabelY = _fontSize * (1 - textUtils.BASELINE_RATIO / 2); + if (_vAlign !== macro.VerticalTextAlignment.TOP) { + var blank = drawStartY + _canvasPadding.height + _fontSize - _canvasSize.height; + if (_vAlign === macro.VerticalTextAlignment.BOTTOM) { + blank += textUtils.BASELINE_RATIO / 2 * _fontSize; + firstLinelabelY -= blank; + } else firstLinelabelY -= blank / 2; + } + firstLinelabelY += textUtils.BASELINE_OFFSET * _fontSize; + return cc.v2(labelX + _canvasPadding.x, firstLinelabelY + _canvasPadding.y); + }; + _proto._setupOutline = function _setupOutline() { + _context.strokeStyle = "rgba(" + _outlineColor.r + ", " + _outlineColor.g + ", " + _outlineColor.b + ", " + _outlineColor.a / 255 + ")"; + _context.lineWidth = 2 * _outlineComp.width * (_isRetina ? _retinaScale : 1); + }; + _proto._setupShadow = function _setupShadow() { + _context.shadowColor = "rgba(" + _shadowColor.r + ", " + _shadowColor.g + ", " + _shadowColor.b + ", " + _shadowColor.a / 255 + ")"; + _context.shadowBlur = _shadowComp.blur * (_isRetina ? _retinaScale : 1); + _context.shadowOffsetX = _shadowComp.offset.x * (_isRetina ? _retinaScale : 1); + _context.shadowOffsetY = -_shadowComp.offset.y * (_isRetina ? _retinaScale : 1); + }; + _proto._drawTextEffect = function _drawTextEffect(startPosition, lineHeight) { + if (!_shadowComp && !_outlineComp && !_enableUnderline) return; + var isMultiple = _splitedStrings.length > 1 && _shadowComp; + var measureText = this._measureText(_context, _fontDesc); + var drawTextPosX = 0, drawTextPosY = 0; + _shadowComp && this._setupShadow(); + _outlineComp && this._setupOutline(); + for (var i = 0; i < _splitedStrings.length; ++i) { + drawTextPosX = startPosition.x; + drawTextPosY = startPosition.y + i * lineHeight; + if (isMultiple) { + _outlineComp && _context.strokeText(_splitedStrings[i], drawTextPosX, drawTextPosY); + _context.fillText(_splitedStrings[i], drawTextPosX, drawTextPosY); + } + if (_enableUnderline) { + _drawUnderlineWidth = measureText(_splitedStrings[i]); + _hAlign === macro.TextAlignment.RIGHT ? _drawUnderlinePos.x = startPosition.x - _drawUnderlineWidth : _hAlign === macro.TextAlignment.CENTER ? _drawUnderlinePos.x = startPosition.x - _drawUnderlineWidth / 2 : _drawUnderlinePos.x = startPosition.x; + _drawUnderlinePos.y = drawTextPosY + _drawFontSize / 8; + _context.fillRect(_drawUnderlinePos.x, _drawUnderlinePos.y, _drawUnderlineWidth, _underlineThickness); + } + } + isMultiple && (_context.shadowColor = "transparent"); + }; + _proto._updateTexture = function _updateTexture() { + _context.clearRect(0, 0, _canvas.width, _canvas.height); + _context.lineJoin = "round"; + if (_premultiply) _context.fillStyle = "rgba(" + _color.r + ", " + _color.g + ", " + _color.b + ", " + _color.a / 255 + ")"; else { + var _fillColor = _outlineComp ? _outlineColor : _color; + _context.fillStyle = "rgba(" + _fillColor.r + ", " + _fillColor.g + ", " + _fillColor.b + ", " + _invisibleAlpha + ")"; + _context.fillRect(0, 0, _canvas.width, _canvas.height); + _context.fillStyle = "rgba(" + _color.r + ", " + _color.g + ", " + _color.b + ", 1)"; + } + var startPosition = this._calculateFillTextStartPosition(); + var lineHeight = this._getLineHeight(); + var drawTextPosX = startPosition.x, drawTextPosY = 0; + this._drawTextEffect(startPosition, lineHeight); + for (var i = 0; i < _splitedStrings.length; ++i) { + drawTextPosY = startPosition.y + i * lineHeight; + _outlineComp && _context.strokeText(_splitedStrings[i], drawTextPosX, drawTextPosY); + _context.fillText(_splitedStrings[i], drawTextPosX, drawTextPosY); + } + _shadowComp && (_context.shadowColor = "transparent"); + _texture.handleLoadedTexture(); + }; + _proto._calDynamicAtlas = function _calDynamicAtlas(comp) { + if (comp.cacheMode !== Label.CacheMode.BITMAP) return false; + var frame = comp._frame; + deleteFromDynamicAtlas(comp, frame); + frame._original || frame.setRect(cc.rect(0, 0, _canvas.width, _canvas.height)); + return this.packDynamicAtlasAndCheckMaterial(comp, frame); + }; + _proto.packDynamicAtlasAndCheckMaterial = function packDynamicAtlasAndCheckMaterial(comp, frame) { + var allowDynamicAtlas = comp.allowDynamicAtlas; + if (cc.sp.allowDynamicAtlas && 0 === allowDynamicAtlas || 1 === allowDynamicAtlas) { + frame._texture._uuid = _fontDesc + _overflow + (_premultiply ? "P" : "NP") + (_enableUnderline ? "UL" : "NUL") + _string; + _outlineComp && (frame._texture._uuid += _outlineComp.color.toHEX() + "," + _outlineComp.width + ","); + _shadowComp && (frame._texture._uuid += _shadowComp.color.toHEX() + _shadowComp.offset.x + "," + _shadowComp.offset.y + "," + _shadowComp.blur); + } + return _Assembler2D.prototype.packDynamicAtlasAndCheckMaterial.call(this, comp, frame); + }; + _proto._updateLabelDimensions = function _updateLabelDimensions() { + _canvasSize.width = Math.min(_canvasSize.width, MAX_SIZE); + _canvasSize.height = Math.min(_canvasSize.height, MAX_SIZE); + var recreate = false; + if (_canvas.width !== _canvasSize.width) { + _canvas.width = _canvasSize.width; + recreate = true; + } + if (_canvas.height !== _canvasSize.height) { + _canvas.height = _canvasSize.height; + recreate = true; + } + recreate && (_context.font = _fontDesc); + _context.textAlign = Alignment[_hAlign]; + }; + _proto._getFontDesc = function _getFontDesc() { + var fontDesc = _fontSize.toString() + "px "; + fontDesc += _fontFamily; + _enableBold && (fontDesc = "bold " + fontDesc); + _enableItalic && (fontDesc = "italic " + fontDesc); + return fontDesc; + }; + _proto._getLineHeight = function _getLineHeight() { + var nodeSpacingY = _lineHeight; + nodeSpacingY = 0 === nodeSpacingY ? _fontSize : nodeSpacingY * _fontSize / _drawFontSize; + return 0 | nodeSpacingY; + }; + _proto._calculateParagraphLength = function _calculateParagraphLength(paragraphedStrings, ctx) { + var paragraphLength = []; + for (var i = 0; i < paragraphedStrings.length; ++i) { + var width = textUtils.safeMeasureText(ctx, paragraphedStrings[i], _fontDesc); + paragraphLength.push(width); + } + return paragraphLength; + }; + _proto._measureText = function _measureText(ctx, fontDesc) { + return function(string) { + return textUtils.safeMeasureText(ctx, string, fontDesc); + }; + }; + _proto._calculateShrinkFont = function _calculateShrinkFont(paragraphedStrings) { + var paragraphLength = this._calculateParagraphLength(paragraphedStrings, _context); + var i = 0; + var totalHeight = 0; + var maxLength = 0; + if (_isWrapText) { + var canvasWidthNoMargin = _nodeContentSize.width; + var canvasHeightNoMargin = _nodeContentSize.height; + if (canvasWidthNoMargin < 0 || canvasHeightNoMargin < 0) return; + totalHeight = canvasHeightNoMargin + 1; + var actualFontSize = _fontSize + 1; + var textFragment = ""; + var left = 0, right = 0 | actualFontSize, mid = 0; + while (left < right) { + mid = left + right + 1 >> 1; + if (mid <= 0) { + cc.logID(4003); + break; + } + _fontSize = mid; + _fontDesc = this._getFontDesc(); + _context.font = _fontDesc; + var lineHeight = this._getLineHeight(); + totalHeight = 0; + for (i = 0; i < paragraphedStrings.length; ++i) { + var allWidth = textUtils.safeMeasureText(_context, paragraphedStrings[i], _fontDesc); + textFragment = textUtils.fragmentText(paragraphedStrings[i], allWidth, canvasWidthNoMargin, this._measureText(_context, _fontDesc)); + totalHeight += textFragment.length * lineHeight; + } + totalHeight > canvasHeightNoMargin ? right = mid - 1 : left = mid; + } + if (0 === left) cc.logID(4003); else { + _fontSize = left; + _fontDesc = this._getFontDesc(); + _context.font = _fontDesc; + } + } else { + totalHeight = paragraphedStrings.length * this._getLineHeight(); + for (i = 0; i < paragraphedStrings.length; ++i) maxLength < paragraphLength[i] && (maxLength = paragraphLength[i]); + var scaleX = (_canvasSize.width - _canvasPadding.width) / maxLength; + var scaleY = _canvasSize.height / totalHeight; + _fontSize = _drawFontSize * Math.min(1, scaleX, scaleY) | 0; + _fontDesc = this._getFontDesc(); + _context.font = _fontDesc; + } + }; + _proto._calculateWrapText = function _calculateWrapText(paragraphedStrings) { + if (!_isWrapText) return; + _splitedStrings = []; + var canvasWidthNoMargin = _nodeContentSize.width; + for (var i = 0; i < paragraphedStrings.length; ++i) { + var allWidth = textUtils.safeMeasureText(_context, paragraphedStrings[i], _fontDesc); + var textFragment = textUtils.fragmentText(paragraphedStrings[i], allWidth, canvasWidthNoMargin, this._measureText(_context, _fontDesc)); + _splitedStrings = _splitedStrings.concat(textFragment); + } + }; + _proto._calculateLabelFont = function _calculateLabelFont() { + var paragraphedStrings = _string.split("\n"); + _splitedStrings = paragraphedStrings; + _fontDesc = this._getFontDesc(); + _context.font = _fontDesc; + switch (_overflow) { + case Overflow.NONE: + var canvasSizeX = 0; + var canvasSizeY = 0; + for (var i = 0; i < paragraphedStrings.length; ++i) { + var paraLength = textUtils.safeMeasureText(_context, paragraphedStrings[i], _fontDesc); + canvasSizeX = canvasSizeX > paraLength ? canvasSizeX : paraLength; + } + canvasSizeY = (_splitedStrings.length + textUtils.BASELINE_RATIO) * this._getLineHeight(); + var rawWidth = parseFloat(canvasSizeX.toFixed(2)); + var rawHeight = parseFloat(canvasSizeY.toFixed(2)); + _canvasSize.width = rawWidth + _canvasPadding.width; + _canvasSize.height = rawHeight + _canvasPadding.height; + _nodeContentSize.width = rawWidth + _contentSizeExtend.width; + _nodeContentSize.height = rawHeight + _contentSizeExtend.height; + break; + + case Overflow.SHRINK: + this._calculateShrinkFont(paragraphedStrings); + this._calculateWrapText(paragraphedStrings); + break; + + case Overflow.CLAMP: + this._calculateWrapText(paragraphedStrings); + break; + + case Overflow.RESIZE_HEIGHT: + this._calculateWrapText(paragraphedStrings); + var _rawHeight = (_splitedStrings.length + textUtils.BASELINE_RATIO) * this._getLineHeight(); + _canvasSize.height = _rawHeight + _canvasPadding.height; + _nodeContentSize.height = _rawHeight + _contentSizeExtend.height; + } + }; + return TTFAssembler; + })(_assembler2d["default"]); + exports["default"] = TTFAssembler; + module.exports = exports["default"]; + }), { + "../../../components/CCLabel": 93, + "../../../components/CCLabelOutline": 94, + "../../../components/CCLabelShadow": 95, + "../../../platform/CCMacro": 126, + "../../../utils/text-utils": 212, + "../../assembler-2d": 147, + "../utils": 160 + } ], + 160: [ (function(require, module, exports) { + "use strict"; + var dynamicAtlasManager = require("./dynamic-atlas/manager"); + var WHITE = cc.Color.WHITE; + var shareLabelInfo = { + fontAtlas: null, + fontSize: 0, + lineHeight: 0, + hAlign: 0, + vAlign: 0, + hash: "", + fontFamily: "", + fontDesc: "Arial", + color: WHITE, + isOutlined: false, + out: WHITE, + margin: 0 + }; + module.exports = { + deleteFromDynamicAtlas: function deleteFromDynamicAtlas(comp, frame) { + if (frame && true && frame._original && dynamicAtlasManager) { + dynamicAtlasManager.deleteAtlasSpriteFrame(frame); + frame._resetDynamicAtlasFrame(); + } + }, + getFontFamily: function getFontFamily(comp) { + if (comp.useSystemFont) return comp.fontFamily || "Arial"; + if (comp.font) { + if (comp.font._nativeAsset) return comp.font._nativeAsset; + cc.assetManager.postLoadNative(comp.font, (function(err) { + comp.isValid && comp.setVertsDirty(); + })); + return "Arial"; + } + return "Arial"; + }, + shareLabelInfo: shareLabelInfo + }; + }), { + "./dynamic-atlas/manager": 154 + } ], + 161: [ (function(require, module, exports) { + "use strict"; + cc.assemblers = {}; + require("./sprite"); + require("./mask-assembler"); + require("./graphics"); + require("./label"); + require("./motion-streak"); + require("./motion-streak-multi"); + }), { + "./graphics": void 0, + "./label": 168, + "./mask-assembler": void 0, + "./motion-streak": 170, + "./motion-streak-multi": 169, + "./sprite": 183 + } ], + 162: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _bmfont = _interopRequireDefault(require("../2d/bmfont")); + var _vertexFormat = require("../../../../webgl/vertex-format"); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var MultiWebglBmfontAssembler = (function(_WebglBmfontAssembler) { + _inheritsLoose(MultiWebglBmfontAssembler, _WebglBmfontAssembler); + function MultiWebglBmfontAssembler() { + return _WebglBmfontAssembler.apply(this, arguments) || this; + } + var _proto = MultiWebglBmfontAssembler.prototype; + _proto.initData = function initData() { + var data = this._renderData; + data.createFlexData(0, this.verticesCount, this.indicesCount, this.getVfmt()); + }; + _proto.getVfmt = function getVfmt() { + return _vertexFormat.vfmtPosUvColorTexId; + }; + _proto.getBuffer = function getBuffer() { + return cc.renderer._handle.getBuffer("mesh", this.getVfmt()); + }; + _proto.updateRenderData = function updateRenderData(comp) { + _WebglBmfontAssembler.prototype.updateRenderData.call(this, comp); + comp._texIdDirty && comp._updateMultiTexId(comp.getMaterial(0), comp._frame._texture); + this.updateTexId(comp); + comp._texIdDirty = false; + }; + _proto.updateRenderDataForSwitchMaterial = function updateRenderDataForSwitchMaterial(comp) { + _WebglBmfontAssembler.prototype._preUpdateRenderData.call(this, comp); + _WebglBmfontAssembler.prototype._updateRenderData.call(this, comp); + comp._texIdDirty && comp._updateMultiTexId(comp.getMaterial(0), comp._frame._texture); + this.updateTexId(comp); + comp._texIdDirty = false; + }; + return MultiWebglBmfontAssembler; + })(_bmfont["default"]); + exports["default"] = MultiWebglBmfontAssembler; + MultiWebglBmfontAssembler.prototype.floatsPerVert = 6; + MultiWebglBmfontAssembler.prototype.texIdOffset = 5; + MultiWebglBmfontAssembler.prototype.isMulti = true; + module.exports = exports["default"]; + }), { + "../../../../webgl/vertex-format": 190, + "../2d/bmfont": 164 + } ], + 163: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _ttf = _interopRequireDefault(require("../2d/ttf")); + var _vertexFormat = require("../../../../webgl/vertex-format"); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var MultiWebglTTFAssembler = (function(_WebglTTFAssembler) { + _inheritsLoose(MultiWebglTTFAssembler, _WebglTTFAssembler); + function MultiWebglTTFAssembler() { + return _WebglTTFAssembler.apply(this, arguments) || this; + } + var _proto = MultiWebglTTFAssembler.prototype; + _proto.initData = function initData() { + var data = this._renderData; + data.createFlexData(0, this.verticesCount, this.indicesCount, this.getVfmt()); + var indices = data.iDatas[0]; + data.initQuadIndices(indices); + }; + _proto.getVfmt = function getVfmt() { + return _vertexFormat.vfmtPosUvColorTexId; + }; + _proto.getBuffer = function getBuffer() { + return cc.renderer._handle.getBuffer("mesh", this.getVfmt()); + }; + _proto.updateRenderData = function updateRenderData(comp) { + _WebglTTFAssembler.prototype.updateRenderData.call(this, comp); + comp._texIdDirty && comp._updateMultiTexId(comp.getMaterial(0), comp._frame._texture); + this.updateTexId(comp); + comp._texIdDirty = false; + }; + _proto.updateRenderDataForSwitchMaterial = function updateRenderDataForSwitchMaterial(comp) { + _WebglTTFAssembler.prototype._updateRenderData.call(this, comp); + comp._texIdDirty && comp._updateMultiTexId(comp.getMaterial(0), comp._frame._texture); + this.updateTexId(comp); + comp._texIdDirty = false; + }; + return MultiWebglTTFAssembler; + })(_ttf["default"]); + exports["default"] = MultiWebglTTFAssembler; + MultiWebglTTFAssembler.prototype.floatsPerVert = 6; + MultiWebglTTFAssembler.prototype.texIdOffset = 5; + MultiWebglTTFAssembler.prototype.isMulti = true; + module.exports = exports["default"]; + }), { + "../../../../webgl/vertex-format": 190, + "../2d/ttf": 167 + } ], + 164: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _bmfont = _interopRequireDefault(require("../../../../utils/label/bmfont")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var _dataOffset = 0; + var WebglBmfontAssembler = (function(_BmfontAssembler) { + _inheritsLoose(WebglBmfontAssembler, _BmfontAssembler); + function WebglBmfontAssembler() { + return _BmfontAssembler.apply(this, arguments) || this; + } + var _proto = WebglBmfontAssembler.prototype; + _proto.initData = function initData() { + this._renderData.createFlexData(0, 4, 6, this.getVfmt()); + }; + _proto._reserveQuads = function _reserveQuads(comp, count) { + var verticesCount = 4 * count; + var indicesCount = 6 * count; + var flexBuffer = this._renderData._flexBuffer; + flexBuffer.reserve(verticesCount, indicesCount); + flexBuffer.used(verticesCount, indicesCount); + var iData = this._renderData.iDatas[0]; + for (var i = 0, vid = 0, l = indicesCount; i < l; i += 6, vid += 4) { + iData[i] = vid; + iData[i + 1] = vid + 1; + iData[i + 2] = vid + 2; + iData[i + 3] = vid + 1; + iData[i + 4] = vid + 3; + iData[i + 5] = vid + 2; + } + _dataOffset = 0; + }; + _proto._quadsUpdated = function _quadsUpdated(comp) { + _dataOffset = 0; + var flexBuffer = this._renderData._flexBuffer; + flexBuffer.used(this.verticesCount, this.indicesCount); + }; + _proto._getColor = function _getColor(comp) { + return comp.node._color._val; + }; + _proto.appendQuad = function appendQuad(comp, texture, rect, rotated, x, y, scale, letter) { + var renderData = this._renderData; + var verts = renderData.vDatas[0], uintVerts = renderData.uintVDatas[0]; + this.verticesCount += 4; + this.indicesCount = this.verticesCount / 2 * 3; + var texw = texture.width, texh = texture.height, rectWidth = rect.width, rectHeight = rect.height, color = this._getColor(comp); + var l, b, r, t; + var floatsPerVert = this.floatsPerVert; + var uvDataOffset = _dataOffset + this.uvOffset; + if (rotated) { + l = rect.x / texw; + r = (rect.x + rectHeight) / texw; + b = (rect.y + rectWidth) / texh; + t = rect.y / texh; + verts[uvDataOffset] = l; + verts[uvDataOffset + 1] = t; + uvDataOffset += floatsPerVert; + verts[uvDataOffset] = l; + verts[uvDataOffset + 1] = b; + uvDataOffset += floatsPerVert; + verts[uvDataOffset] = r; + verts[uvDataOffset + 1] = t; + uvDataOffset += floatsPerVert; + verts[uvDataOffset] = r; + verts[uvDataOffset + 1] = b; + } else { + l = rect.x / texw; + r = (rect.x + rectWidth) / texw; + b = (rect.y + rectHeight) / texh; + t = rect.y / texh; + verts[uvDataOffset] = l; + verts[uvDataOffset + 1] = b; + uvDataOffset += floatsPerVert; + verts[uvDataOffset] = r; + verts[uvDataOffset + 1] = b; + uvDataOffset += floatsPerVert; + verts[uvDataOffset] = l; + verts[uvDataOffset + 1] = t; + uvDataOffset += floatsPerVert; + verts[uvDataOffset] = r; + verts[uvDataOffset + 1] = t; + } + var retinaScale = this.getTTFTextureSizeScale(); + x /= retinaScale; + y /= retinaScale; + rectWidth /= retinaScale; + rectHeight /= retinaScale; + l = x; + r = x + rectWidth * scale; + b = y - rectHeight * scale; + t = y; + this.appendVerts(comp, _dataOffset, l, r, b, t, letter); + var colorOffset = _dataOffset + this.colorOffset; + for (var i = 0; i < 4; i++) { + uintVerts[colorOffset] = color; + colorOffset += floatsPerVert; + } + _dataOffset += 4 * this.floatsPerVert; + }; + _proto.appendVerts = function appendVerts(comp, offset, l, r, b, t, letter) { + var local = this._local; + var floatsPerVert = this.floatsPerVert; + local[offset] = l; + local[offset + 1] = b; + offset += floatsPerVert; + local[offset] = r; + local[offset + 1] = b; + offset += floatsPerVert; + local[offset] = l; + local[offset + 1] = t; + offset += floatsPerVert; + local[offset] = r; + local[offset + 1] = t; + }; + _proto.updateWorldVerts = function updateWorldVerts(comp) { + var node = comp.node; + var matrix = node._worldMatrix; + var matrixm = matrix.m, a = matrixm[0], b = matrixm[1], c = matrixm[4], d = matrixm[5], tx = matrixm[12], ty = matrixm[13]; + var local = this._local; + var world = this._renderData.vDatas[0]; + var floatsPerVert = this.floatsPerVert; + for (var offset = 0; offset < local.length; offset += floatsPerVert) { + var x = local[offset]; + var y = local[offset + 1]; + world[offset] = x * a + y * c + tx; + world[offset + 1] = x * b + y * d + ty; + } + }; + return WebglBmfontAssembler; + })(_bmfont["default"]); + exports["default"] = WebglBmfontAssembler; + module.exports = exports["default"]; + }), { + "../../../../utils/label/bmfont": 156 + } ], + 165: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var js = require("../../../../../platform/js"); + var WebglBmfontAssembler = require("./bmfont"); + var LetterFontAssembler = require("../../../../utils/label/letter-font"); + var WHITE = cc.color(255, 255, 255, 255); + var WebglLetterFontAssembler = (function(_LetterFontAssembler) { + _inheritsLoose(WebglLetterFontAssembler, _LetterFontAssembler); + function WebglLetterFontAssembler() { + return _LetterFontAssembler.apply(this, arguments) || this; + } + var _proto = WebglLetterFontAssembler.prototype; + _proto.createData = function createData(comp) { + return comp.requestRenderData(); + }; + _proto._getColor = function _getColor(comp) { + WHITE._fastSetA(comp.node._color.a); + return WHITE._val; + }; + _proto.updateColor = function updateColor(comp) { + var color = this._getColor(comp); + _LetterFontAssembler.prototype.updateColor.call(this, comp, color); + }; + return WebglLetterFontAssembler; + })(LetterFontAssembler); + exports["default"] = WebglLetterFontAssembler; + module.exports = exports["default"]; + }), { + "../../../../../platform/js": 142, + "../../../../utils/label/letter-font": 158, + "./bmfont": 164 + } ], + 166: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _materialVariant = _interopRequireDefault(require("../../../../../assets/material/material-variant")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var Label = require("../../../../../components/CCLabel"); + var LabelShadow = require("../../../../../components/CCLabelShadow"); + var LabelOutline = require("../../../../../components/CCLabelOutline"); + var Material = require("../../../../../assets/material/CCMaterial"); + var UPDATE_CONTENT = 1; + var UPDATE_FONT = 2; + var UPDATE_EFFECT = 4; + var NativeTTF = (function() { + function NativeTTF() {} + var _proto = NativeTTF.prototype; + _proto.init = function init(comp) { + this.labelMaterial = null; + this._label = this._renderComp = comp; + renderer.CustomAssembler.prototype.ctor.call(this); + comp.node._proxy.setAssembler(this); + this._layout = new jsb.LabelRenderer(); + this._layout.init(comp); + this._cfg = new DataView(this._layout._cfg); + this._layoutInfo = new DataView(this._layout._layout); + this._cfgFields = jsb.LabelRenderer._cfgFields; + this._layoutFields = jsb.LabelRenderer._layoutFields; + this._layout.bindNodeProxy(comp.node._proxy); + this._bindMaterial(comp); + }; + _proto._setBufferFlag = function _setBufferFlag(dv, offset, size, type, flag) { + if ("int8" == type && 1 == size) { + var v = dv.getInt8(offset); + dv.setInt8(offset, flag | v); + } else if ("int32" == type && 4 == size) { + var _v = dv.getInt32(offset, jsb.__isLittleEndian__); + dv.setInt32(offset, flag | _v, jsb.__isLittleEndian__); + } else cc.warn("flag storage type should be int8/int32 only, type/size -> " + type + "/" + size + "."); + }; + _proto._updateCfgFlag = function _updateCfgFlag(flag) { + var field = this._cfgFields.updateFlags; + this._setBufferFlag(this._cfg, field.offset, field.size, field.type, flag); + }; + _proto._setBufferValue = function _setBufferValue(dv, offset, size, type, value) { + if ("float" == type && 4 == size) dv.setFloat32(offset, value, jsb.__isLittleEndian__); else if ("int32" == type && 4 == size) dv.setInt32(offset, value, jsb.__isLittleEndian__); else if ("bool" == type && 1 == size) dv.setInt8(offset, !value ? 0 : 1, jsb.__isLittleEndian__); else if ("Color4B" == type && 4 == size) { + dv.setUint8(offset, value.r); + dv.setUint8(offset + 1, value.g); + dv.setUint8(offset + 2, value.b); + dv.setUint8(offset + 3, value.a); + } else "int8" == type && 1 == size ? dv.setUint8(offset, value) : cc.warn("dont know how to set value to buffer, type/size -> " + type + "/" + size + "."); + }; + _proto._setFieldValue = function _setFieldValue(dv, desc, field_name, value) { + var field = desc[field_name]; + this._setBufferValue(dv, field.offset, field.size, field.type, value); + }; + _proto._getBufferValue = function _getBufferValue(dv, offset, size, type) { + if ("float" == type && 4 == size) return dv.getFloat32(offset, jsb.__isLittleEndian__); + if ("int32" == type && 4 == size) return dv.getInt32(offset, jsb.__isLittleEndian__); + if ("bool" == type && 1 == size) return 0 != dv.getInt8(offset, jsb.__isLittleEndian__); + if ("Color4B" == type && 4 == size) { + var r = dv.getUint8(offset); + var g = dv.getUint8(offset + 1); + var b = dv.getUint8(offset + 2); + var a = dv.getUint8(offset + 3); + return { + r: r, + g: g, + b: b, + a: a + }; + } + if ("int8" == type && 1 == size) return dv.getUint8(offset); + cc.warn("dont know how to get value from buffer, type/size -> " + type + "/" + size + "."); + return; + }; + _proto._getFieldValue = function _getFieldValue(dv, desc, field_name) { + var field = desc[field_name]; + return this._getBufferValue(dv, field.offset, field.size, field.type); + }; + _proto._getLayoutValue = function _getLayoutValue(field_name) { + return this._getFieldValue(this._layoutInfo, this._layoutFields, field_name); + }; + _proto._setLayoutValue = function _setLayoutValue(field_name, value) { + return this._setFieldValue(this._layoutInfo, this._layoutFields, field_name, value); + }; + _proto._updateCfgFlag_Content = function _updateCfgFlag_Content() { + this._updateCfgFlag(UPDATE_CONTENT); + }; + _proto._updateCfgFlag_Font = function _updateCfgFlag_Font() { + this._updateCfgFlag(UPDATE_FONT); + }; + _proto._colorEqual = function _colorEqual(a, b) { + return a.r == b.r && a.g == b.g && a.b == b.b && a.a == b.a; + }; + _proto._colorToObj = function _colorToObj(r, g, b, a) { + return { + r: r, + g: g, + b: b, + a: a + }; + }; + _proto.setString = function setString(str) { + if (str != this._layout.string) { + this._layout.string = str; + this._updateCfgFlag_Content(); + } + }; + _proto.setFontPath = function setFontPath(path) { + if (path != this._layout.fontPath) { + this._layout.fontPath = path; + this._updateCfgFlag_Font(); + } + }; + _proto.setFontSize = function setFontSize(fontSize, fontSizeRetina) { + var oldfontsize = this._getFieldValue(this._cfg, this._cfgFields, "fontSize"); + if (oldfontsize != fontSize) { + this._setFieldValue(this._cfg, this._cfgFields, "fontSize", fontSize); + this._setFieldValue(this._cfg, this._cfgFields, "fontSizeRetina", fontSizeRetina); + this._updateCfgFlag_Font(); + } + }; + _proto.setOutline = function setOutline(outline) { + var oldOutline = this._getLayoutValue("outlineSize"); + oldOutline > 0 != outline > 0 && this._updateCfgFlag_Font(); + if (oldOutline != outline) { + this._updateCfgFlag_Content(); + this._setLayoutValue("outlineSize", outline); + } + }; + _proto.setOutlineColor = function setOutlineColor(color) { + var oldColor = this._getLayoutValue("outlineColor"); + if (!this._colorEqual(oldColor, color)) { + this._setLayoutValue("outlineColor", color); + this._updateCfgFlag_Content(); + } + }; + _proto.setLineHeight = function setLineHeight(lineHeight) { + var oldLineHeight = this._getLayoutValue("lineHeight"); + if (oldLineHeight != lineHeight) { + this._setLayoutValue("lineHeight", lineHeight); + this._updateCfgFlag_Content(); + } + }; + _proto.setOverFlow = function setOverFlow(overflow) { + var oldValue = this._getLayoutValue("overflow"); + if (oldValue != overflow) { + this._setLayoutValue("overflow", overflow); + this._updateCfgFlag_Content(); + } + }; + _proto.setEnableWrap = function setEnableWrap(value) { + var oldValue = this._getLayoutValue("wrap"); + if (oldValue != value) { + this._setLayoutValue("wrap", value); + this._updateCfgFlag_Content(); + } + }; + _proto.setVerticalAlign = function setVerticalAlign(value) { + var oldValue = this._getLayoutValue("valign"); + if (oldValue != value) { + this._setLayoutValue("valign", value); + this._updateCfgFlag_Content(); + } + }; + _proto.setHorizontalAlign = function setHorizontalAlign(value) { + var oldValue = this._getLayoutValue("halign"); + if (oldValue != value) { + this._setLayoutValue("halign", value); + this._updateCfgFlag_Content(); + } + }; + _proto.setContentSize = function setContentSize(width, height) { + var oldWidth = this._getLayoutValue("width"); + var oldHeight = this._getLayoutValue("height"); + if (oldWidth != width || oldHeight != height) { + this._setLayoutValue("height", height); + this._setLayoutValue("width", width); + this._updateCfgFlag_Content(); + } + }; + _proto.setAnchorPoint = function setAnchorPoint(x, y) { + var oldX = this._getLayoutValue("anchorX"); + var oldY = this._getLayoutValue("anchorY"); + if (oldX != x || oldY != y) { + this._setLayoutValue("anchorX", x); + this._setLayoutValue("anchorY", y); + this._updateCfgFlag_Content(); + } + }; + _proto.setColor = function setColor(color) { + var oldColor = this._getLayoutValue("color"); + if (!this._colorEqual(oldColor, color)) { + this._setLayoutValue("color", color); + this._updateCfgFlag_Content(); + } + }; + _proto.setShadow = function setShadow(x, y, blur) { + var oldBlur = this._getLayoutValue("shadowBlur"); + var oldX = this._getLayoutValue("shadowX"); + var oldY = this._getLayoutValue("shadowY"); + oldBlur > 0 != blur > 0 && this._updateCfgFlag_Font(); + var updateContent = false; + if (oldBlur != blur) { + this._setLayoutValue("shadowBlur", blur); + updateContent = true; + } + if (oldX != x) { + this._setLayoutValue("shadowX", x); + updateContent = true; + } + if (oldY != y) { + this._setLayoutValue("shadowY", y); + updateContent = true; + } + updateContent && this._updateCfgFlag_Content(); + }; + _proto.setShadowColor = function setShadowColor(color) { + var oldColor = this._getLayoutValue("shadowColor"); + if (!this._colorEqual(oldColor, color)) { + this._setLayoutValue("shadowColor", color); + this._updateCfgFlag_Content(); + } + }; + _proto.setItalic = function setItalic(enabled) { + var oldItalic = this._getLayoutValue("italic"); + if (oldItalic != enabled) { + this._setLayoutValue("italic", enabled); + this._updateCfgFlag_Content(); + } + }; + _proto.setBold = function setBold(bold) { + var oldBold = this._getLayoutValue("bold"); + if (oldBold != bold) { + this._setLayoutValue("bold", bold); + this._updateCfgFlag_Content(); + this._updateCfgFlag_Font(); + } + }; + _proto.setUnderline = function setUnderline(underline) { + var oldBold = this._getLayoutValue("underline"); + if (oldBold != underline) { + this._setLayoutValue("underline", underline); + this._updateCfgFlag_Content(); + } + }; + _proto.setSpacingX = function setSpacingX(x) { + var oldX = this._getLayoutValue("spaceX"); + if (oldX != x && "number" == typeof x && !isNaN(x)) { + this._setLayoutValue("spaceX", x); + this._updateCfgFlag_Content(); + } + }; + _proto.updateRenderData = function updateRenderData(comp) { + if (!comp._vertsDirty) return; + comp.font && comp.font.nativeUrl && this.setFontPath(cc.assetManager.cacheManager.getCache(comp.font.nativeUrl) || comp.font.nativeUrl); + var layout = this._layout; + var c = comp.node.color; + var node = comp.node; + var retinaSize = comp.fontSize; + this.setString(comp.string); + this.setFontSize(comp.fontSize, retinaSize / 72 * comp.fontSize); + this.setLineHeight(comp.lineHeight); + this.setEnableWrap(comp.enableWrapText); + this.setItalic(comp.enableItalic); + this.setUnderline(comp.enableUnderline); + this.setBold(comp.enableBold); + this.setOverFlow(comp.overflow); + this.setVerticalAlign(comp.verticalAlign); + this.setHorizontalAlign(comp.horizontalAlign); + this.setSpacingX(comp.spacingX); + this.setContentSize(node.getContentSize().width, node.getContentSize().height); + this.setAnchorPoint(node.anchorX, node.anchorY); + this.setColor(this._colorToObj(c.getR(), c.getG(), c.getB(), Math.ceil(c.getA() * node.opacity / 255))); + var shadow = node.getComponent(cc.LabelShadow); + if (shadow && shadow.enabled) { + var shadowColor = shadow.color; + this.setShadow(shadow.offset.x, shadow.offset.y, shadow.blur); + this.setShadowColor(this._colorToObj(shadowColor.getR(), shadowColor.getG(), shadowColor.getB(), Math.ceil(shadowColor.getA() * node.opacity / 255))); + } else this.setShadow(0, 0, -1); + this._updateTTFMaterial(comp); + layout.render(); + }; + _proto._bindMaterial = function _bindMaterial(comp) { + var material = this.labelMaterial; + if (!material) { + material = _materialVariant["default"].createWithBuiltin("2d-label", comp); + this.labelMaterial = material; + } + return material; + }; + _proto._updateTTFMaterial = function _updateTTFMaterial(comp) { + var material = this._bindMaterial(comp); + var node = this._label.node; + var layout = this._layout; + var outline = node.getComponent(cc.LabelOutline); + var outlineSize = 0; + if (outline && outline.enabled && outline.width > 0) { + outlineSize = Math.max(Math.min(outline.width / 10, .4), .1); + var c = outline.color; + this.setOutlineColor(this._colorToObj(c.getR(), c.getG(), c.getB(), Math.ceil(c.getA() * node.opacity / 255))); + } + this.setOutline(outlineSize); + material.define("CC_USE_MODEL", true); + material.define("USE_TEXTURE_ALPHAONLY", true); + material.define("USE_SDF", outlineSize > 0 || comp.enableBold); + material.define("USE_SDF_EXTEND", comp.enableBold ? 1 : 0); + void 0 !== material.getDefine("CC_SUPPORT_standard_derivatives") && cc.sys.glExtension("OES_standard_derivatives") && material.define("CC_SUPPORT_standard_derivatives", true); + layout.setEffect(material.effect._nativeObj); + }; + _proto.fillBuffers = function fillBuffers(comp, renderer) { + this._layout.render(); + }; + _proto.getVfmt = function getVfmt() {}; + return NativeTTF; + })(); + exports["default"] = NativeTTF; + module.exports = exports["default"]; + }), { + "../../../../../assets/material/CCMaterial": 75, + "../../../../../assets/material/material-variant": 82, + "../../../../../components/CCLabel": 93, + "../../../../../components/CCLabelOutline": 94, + "../../../../../components/CCLabelShadow": 95 + } ], + 167: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _ttf = _interopRequireDefault(require("../../../../utils/label/ttf")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var LabelShadow = require("../../../../../components/CCLabelShadow"); + var WHITE = cc.color(255, 255, 255, 255); + var WebglTTFAssembler = (function(_TTFAssembler) { + _inheritsLoose(WebglTTFAssembler, _TTFAssembler); + function WebglTTFAssembler() { + return _TTFAssembler.apply(this, arguments) || this; + } + var _proto = WebglTTFAssembler.prototype; + _proto.updateUVs = function updateUVs(comp) { + var verts = this._renderData.vDatas[0]; + var uv = comp._frame.uv; + var uvOffset = this.uvOffset; + var floatsPerVert = this.floatsPerVert; + for (var i = 0; i < 4; i++) { + var srcOffset = 2 * i; + var dstOffset = floatsPerVert * i + uvOffset; + verts[dstOffset] = uv[srcOffset]; + verts[dstOffset + 1] = uv[srcOffset + 1]; + } + }; + _proto.updateColor = function updateColor(comp) { + WHITE._fastSetA(comp.node._color.a); + var color = WHITE._val; + _TTFAssembler.prototype.updateColor.call(this, comp, color); + }; + _proto.updateVerts = function updateVerts(comp) { + var scale = this.getTTFTextureSizeScale(); + var node = comp.node, canvasWidth = comp._ttfTexture.width / scale, canvasHeight = comp._ttfTexture.height / scale, appx = node.anchorX * node.width, appy = node.anchorY * node.height; + var shadow = LabelShadow && comp.getComponent(LabelShadow); + if (shadow && shadow._enabled) { + var offsetX = (canvasWidth - node.width) / 2; + var offsetY = (canvasHeight - node.height) / 2; + var shadowOffset = shadow.offset; + -shadowOffset.x > offsetX ? appx += canvasWidth - node.width : offsetX > shadowOffset.x && (appx += offsetX - shadowOffset.x); + -shadowOffset.y > offsetY ? appy += canvasHeight - node.height : offsetY > shadowOffset.y && (appy += offsetY - shadowOffset.y); + } + var local = this._local; + local[0] = -appx; + local[1] = -appy; + local[2] = canvasWidth - appx; + local[3] = canvasHeight - appy; + this.updateUVs(comp); + this.updateWorldVerts(comp); + }; + return WebglTTFAssembler; + })(_ttf["default"]); + exports["default"] = WebglTTFAssembler; + module.exports = exports["default"]; + }), { + "../../../../../components/CCLabelShadow": 95, + "../../../../utils/label/ttf": 159 + } ], + 168: [ (function(require, module, exports) { + "use strict"; + var _assembler = _interopRequireDefault(require("../../../assembler")); + var _CCLabel = _interopRequireDefault(require("../../../../components/CCLabel")); + var _ttf = _interopRequireDefault(require("./2d/ttf")); + var _bmfont = _interopRequireDefault(require("./2d/bmfont")); + var _letter = _interopRequireDefault(require("./2d/letter")); + var _ttf2 = _interopRequireDefault(require("./3d/ttf")); + var _bmfont2 = _interopRequireDefault(require("./3d/bmfont")); + var _letter2 = _interopRequireDefault(require("./3d/letter")); + var _ttf3 = _interopRequireDefault(require("./2d-multi/ttf")); + var _bmfont3 = _interopRequireDefault(require("./2d-multi/bmfont")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var NativeTTF = void 0; + false; + _CCLabel["default"]._canvasPool = { + pool: [], + get: function get() { + var data = this.pool.pop(); + if (!data) { + var canvas = document.createElement("canvas"); + var context = canvas.getContext("2d"); + data = { + canvas: canvas, + context: context + }; + context.textBaseline = "alphabetic"; + } + return data; + }, + put: function put(canvas) { + if (this.pool.length >= 32) return; + this.pool.push(canvas); + } + }; + _assembler["default"].register(cc.Label, { + getConstructor: function getConstructor(label) { + var is3DNode = label.node.is3DNode; + var material = label.getMaterials()[0]; + var isMultiMaterial = material && material.material.isMultiSupport(); + var ctor = is3DNode ? _ttf2["default"] : isMultiMaterial ? _ttf3["default"] : _ttf["default"]; + if (label.font instanceof cc.BitmapFont) ctor = is3DNode ? _bmfont2["default"] : isMultiMaterial ? _bmfont3["default"] : _bmfont["default"]; else if (label.cacheMode === _CCLabel["default"].CacheMode.CHAR) { + false; + cc.sys.platform === cc.sys.WECHAT_GAME_SUB ? cc.warn("sorry, subdomain does not support CHAR mode currently!") : ctor = is3DNode ? _letter2["default"] : _letter["default"]; + } + return ctor; + }, + TTF: _ttf["default"], + Bmfont: _bmfont["default"], + Letter: _letter["default"], + TTF3D: _ttf2["default"], + Bmfont3D: _bmfont2["default"], + Letter3D: _letter2["default"], + NativeTTF: NativeTTF, + TTFMulti: _ttf3["default"], + BmfontMulti: _bmfont3["default"] + }); + }), { + "../../../../components/CCLabel": 93, + "../../../assembler": 149, + "./2d-multi/bmfont": 162, + "./2d-multi/ttf": 163, + "./2d/bmfont": 164, + "./2d/letter": 165, + "./2d/nativeTTF": 166, + "./2d/ttf": 167, + "./3d/bmfont": void 0, + "./3d/letter": void 0, + "./3d/ttf": void 0 + } ], + 169: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _motionStreak = _interopRequireDefault(require("./motion-streak")); + var _vertexFormat = require("../../webgl/vertex-format"); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var MotionStreak = require("../../../components/CCMotionStreak"); + var RenderFlow = require("../../render-flow"); + function Point(point, dir) { + this.point = point || cc.v2(); + this.dir = dir || cc.v2(); + this.distance = 0; + this.time = 0; + } + Point.prototype.setPoint = function(x, y) { + this.point.x = x; + this.point.y = y; + }; + Point.prototype.setDir = function(x, y) { + this.dir.x = x; + this.dir.y = y; + }; + var _normal = cc.v2(); + var _vec2 = cc.v2(); + function normal(out, dir) { + out.x = -dir.y; + out.y = dir.x; + return out; + } + var MultiMotionStreakAssembler = (function(_MotionStreakAssemble) { + _inheritsLoose(MultiMotionStreakAssembler, _MotionStreakAssemble); + function MultiMotionStreakAssembler() { + return _MotionStreakAssemble.apply(this, arguments) || this; + } + var _proto = MultiMotionStreakAssembler.prototype; + _proto.initData = function initData() { + this._renderData.createFlexData(0, 16, 42, this.getVfmt()); + }; + _proto.getVfmt = function getVfmt() { + return _vertexFormat.vfmtPosUvColorTexId; + }; + _proto.getBuffer = function getBuffer() { + return cc.renderer._handle.getBuffer("mesh", this.getVfmt()); + }; + _proto.update = function update(comp, dt) { + false; + var stroke = comp._stroke / 2; + var node = comp.node; + var matrix = node._worldMatrix.m; + var tx = matrix[12], ty = matrix[13]; + var points = comp._points; + var cur; + if (points.length > 1) { + var difx = points[0].point.x - tx; + var dify = points[0].point.y - ty; + difx * difx + dify * dify < comp.minSeg && (cur = points[0]); + } + if (!cur) { + cur = new Point(); + points.splice(0, 0, cur); + } + cur.setPoint(tx, ty); + cur.time = comp._fadeTime + dt; + var verticesCount = 0; + var indicesCount = 0; + if (points.length < 2) return; + var color = comp._color, cr = color.r, cg = color.g, cb = color.b, ca = color.a; + var prev = points[1]; + prev.distance = cur.point.sub(prev.point, _vec2).mag(); + _vec2.normalizeSelf(); + prev.setDir(_vec2.x, _vec2.y); + cur.setDir(_vec2.x, _vec2.y); + var flexBuffer = this._renderData._flexBuffer; + flexBuffer.reserve(2 * points.length, 6 * (points.length - 1)); + var vData = flexBuffer.vData; + var uintVData = flexBuffer.uintVData; + var vertsOffset = 6; + var fadeTime = comp._fadeTime; + var findLast = false; + for (var i = points.length - 1; i >= 0; i--) { + var p = points[i]; + var point = p.point; + var dir = p.dir; + p.time -= dt; + if (p.time < 0) { + points.splice(i, 1); + continue; + } + var progress = p.time / fadeTime; + var next = points[i - 1]; + if (!findLast) { + if (!next) { + points.splice(i, 1); + continue; + } + point.x = next.point.x - dir.x * progress; + point.y = next.point.y - dir.y * progress; + } + findLast = true; + normal(_normal, dir); + var da = progress * ca; + var c = (da << 24 >>> 0) + (cb << 16) + (cg << 8) + cr; + var offset = verticesCount * vertsOffset; + vData[offset] = point.x + _normal.x * stroke; + vData[offset + 1] = point.y + _normal.y * stroke; + vData[offset + 2] = 1; + vData[offset + 3] = progress; + uintVData[offset + 4] = c; + vData[offset + 5] = comp._texId; + offset += vertsOffset; + vData[offset] = point.x - _normal.x * stroke; + vData[offset + 1] = point.y - _normal.y * stroke; + vData[offset + 2] = 0; + vData[offset + 3] = progress; + uintVData[offset + 4] = c; + vData[offset + 5] = comp._texId; + verticesCount += 2; + } + indicesCount = verticesCount <= 2 ? 0 : 3 * (verticesCount - 2); + flexBuffer.used(verticesCount, indicesCount); + }; + _proto.fillBuffers = function fillBuffers(comp, renderer) { + var _this$_renderData$_fl = this._renderData._flexBuffer, vData = _this$_renderData$_fl.vData, usedVertices = _this$_renderData$_fl.usedVertices, usedIndices = _this$_renderData$_fl.usedIndices, usedVerticesFloats = _this$_renderData$_fl.usedVerticesFloats; + var buffer = this.getBuffer(renderer); + var offsetInfo = buffer.request(usedVertices, usedIndices); + var vertexOffset = offsetInfo.byteOffset >> 2, vbuf = buffer._vData; + vData.length + vertexOffset > vbuf.length ? vbuf.set(vData.subarray(0, usedVerticesFloats), vertexOffset) : vbuf.set(vData, vertexOffset); + var ibuf = buffer._iData, indiceOffset = offsetInfo.indiceOffset, vertexId = offsetInfo.vertexOffset; + for (var i = 0, l = usedVertices; i < l; i += 2) { + var start = vertexId + i; + ibuf[indiceOffset++] = start; + ibuf[indiceOffset++] = start + 2; + ibuf[indiceOffset++] = start + 1; + ibuf[indiceOffset++] = start + 1; + ibuf[indiceOffset++] = start + 2; + ibuf[indiceOffset++] = start + 3; + } + comp.node._renderFlag |= RenderFlow.FLAG_UPDATE_RENDER_DATA; + }; + return MultiMotionStreakAssembler; + })(_motionStreak["default"]); + exports["default"] = MultiMotionStreakAssembler; + _motionStreak["default"].register(MotionStreak, { + getConstructor: function getConstructor(comp) { + var material = comp.getMaterials()[0]; + var isMultiMaterial = material && material.material.isMultiSupport(); + return isMultiMaterial ? MultiMotionStreakAssembler : _motionStreak["default"]; + }, + MotionStreakAssembler: _motionStreak["default"], + MultiMotionStreakAssembler: MultiMotionStreakAssembler + }); + MultiMotionStreakAssembler.prototype.floatsPerVert = 6; + MultiMotionStreakAssembler.prototype.texIdOffset = 5; + MultiMotionStreakAssembler.prototype.isMulti = true; + module.exports = exports["default"]; + }), { + "../../../components/CCMotionStreak": 97, + "../../render-flow": 153, + "../../webgl/vertex-format": 190, + "./motion-streak": 170 + } ], + 170: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _assembler2d = _interopRequireDefault(require("../../assembler-2d")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var RenderFlow = require("../../render-flow"); + function Point(point, dir) { + this.point = point || cc.v2(); + this.dir = dir || cc.v2(); + this.distance = 0; + this.time = 0; + } + Point.prototype.setPoint = function(x, y) { + this.point.x = x; + this.point.y = y; + }; + Point.prototype.setDir = function(x, y) { + this.dir.x = x; + this.dir.y = y; + }; + var _tangent = cc.v2(); + var _miter = cc.v2(); + var _normal = cc.v2(); + var _vec2 = cc.v2(); + function normal(out, dir) { + out.x = -dir.y; + out.y = dir.x; + return out; + } + function computeMiter(miter, lineA, lineB, halfThick, maxMultiple) { + lineA.add(lineB, _tangent); + _tangent.normalizeSelf(); + miter.x = -_tangent.y; + miter.y = _tangent.x; + _vec2.x = -lineA.y; + _vec2.y = lineA.x; + var multiple = 1 / miter.dot(_vec2); + maxMultiple && (multiple = Math.min(multiple, maxMultiple)); + return halfThick * multiple; + } + var MotionStreakAssembler = (function(_Assembler2D) { + _inheritsLoose(MotionStreakAssembler, _Assembler2D); + function MotionStreakAssembler() { + return _Assembler2D.apply(this, arguments) || this; + } + var _proto = MotionStreakAssembler.prototype; + _proto.initData = function initData() { + this._renderData.createFlexData(0, 16, 42); + }; + _proto.update = function update(comp, dt) { + false; + var stroke = comp._stroke / 2; + var node = comp.node; + var matrix = node._worldMatrix.m; + var tx = matrix[12], ty = matrix[13]; + var points = comp._points; + var cur; + if (points.length > 1) { + var difx = points[0].point.x - tx; + var dify = points[0].point.y - ty; + difx * difx + dify * dify < comp.minSeg && (cur = points[0]); + } + if (!cur) { + cur = new Point(); + points.splice(0, 0, cur); + } + cur.setPoint(tx, ty); + cur.time = comp._fadeTime + dt; + var verticesCount = 0; + var indicesCount = 0; + if (points.length < 2) return; + var color = comp._color, cr = color.r, cg = color.g, cb = color.b, ca = color.a; + var prev = points[1]; + prev.distance = cur.point.sub(prev.point, _vec2).mag(); + _vec2.normalizeSelf(); + prev.setDir(_vec2.x, _vec2.y); + cur.setDir(_vec2.x, _vec2.y); + var flexBuffer = this._renderData._flexBuffer; + flexBuffer.reserve(2 * points.length, 6 * (points.length - 1)); + var vData = flexBuffer.vData; + var uintVData = flexBuffer.uintVData; + var vertsOffset = 5; + var fadeTime = comp._fadeTime; + var findLast = false; + for (var i = points.length - 1; i >= 0; i--) { + var p = points[i]; + var point = p.point; + var dir = p.dir; + p.time -= dt; + if (p.time < 0) { + points.splice(i, 1); + continue; + } + var progress = p.time / fadeTime; + var next = points[i - 1]; + if (!findLast) { + if (!next) { + points.splice(i, 1); + continue; + } + point.x = next.point.x - dir.x * progress; + point.y = next.point.y - dir.y * progress; + } + findLast = true; + normal(_normal, dir); + var da = progress * ca; + var c = (da << 24 >>> 0) + (cb << 16) + (cg << 8) + cr; + var offset = verticesCount * vertsOffset; + vData[offset] = point.x + _normal.x * stroke; + vData[offset + 1] = point.y + _normal.y * stroke; + vData[offset + 2] = 1; + vData[offset + 3] = progress; + uintVData[offset + 4] = c; + offset += vertsOffset; + vData[offset] = point.x - _normal.x * stroke; + vData[offset + 1] = point.y - _normal.y * stroke; + vData[offset + 2] = 0; + vData[offset + 3] = progress; + uintVData[offset + 4] = c; + verticesCount += 2; + } + indicesCount = verticesCount <= 2 ? 0 : 3 * (verticesCount - 2); + flexBuffer.used(verticesCount, indicesCount); + }; + _proto.fillBuffers = function fillBuffers(comp, renderer) { + var _this$_renderData$_fl = this._renderData._flexBuffer, vData = _this$_renderData$_fl.vData, usedVertices = _this$_renderData$_fl.usedVertices, usedIndices = _this$_renderData$_fl.usedIndices, usedVerticesFloats = _this$_renderData$_fl.usedVerticesFloats; + var buffer = renderer._meshBuffer; + var offsetInfo = buffer.request(usedVertices, usedIndices); + var vertexOffset = offsetInfo.byteOffset >> 2, vbuf = buffer._vData; + vData.length + vertexOffset > vbuf.length ? vbuf.set(vData.subarray(0, usedVerticesFloats), vertexOffset) : vbuf.set(vData, vertexOffset); + var ibuf = buffer._iData, indiceOffset = offsetInfo.indiceOffset, vertexId = offsetInfo.vertexOffset; + for (var i = 0, l = usedVertices; i < l; i += 2) { + var start = vertexId + i; + ibuf[indiceOffset++] = start; + ibuf[indiceOffset++] = start + 2; + ibuf[indiceOffset++] = start + 1; + ibuf[indiceOffset++] = start + 1; + ibuf[indiceOffset++] = start + 2; + ibuf[indiceOffset++] = start + 3; + } + comp.node._renderFlag |= RenderFlow.FLAG_UPDATE_RENDER_DATA; + }; + return MotionStreakAssembler; + })(_assembler2d["default"]); + exports["default"] = MotionStreakAssembler; + module.exports = exports["default"]; + }), { + "../../assembler-2d": 147, + "../../render-flow": 153 + } ], + 171: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _vertexFormat = require("../../../../webgl/vertex-format"); + var _barFilled = _interopRequireDefault(require("../2d/bar-filled")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var BarFilledAssemblerMulti = (function(_BarFilledAssembler) { + _inheritsLoose(BarFilledAssemblerMulti, _BarFilledAssembler); + function BarFilledAssemblerMulti() { + return _BarFilledAssembler.apply(this, arguments) || this; + } + var _proto = BarFilledAssemblerMulti.prototype; + _proto.initData = function initData() { + var data = this._renderData; + data.createFlexData(0, this.verticesCount, this.indicesCount, this.getVfmt()); + var indices = data.iDatas[0]; + data.initQuadIndices(indices); + }; + _proto.getVfmt = function getVfmt() { + return _vertexFormat.vfmtPosUvColorTexId; + }; + _proto.getBuffer = function getBuffer() { + return cc.renderer._handle.getBuffer("mesh", this.getVfmt()); + }; + _proto.updateRenderData = function updateRenderData(sprite) { + _BarFilledAssembler.prototype.updateRenderData.call(this, sprite); + if (sprite._texIdDirty) { + sprite._updateMultiTexId(sprite.getMaterial(0), sprite._spriteFrame._texture); + if (sprite._texIdDirty) { + this.updateTexId(sprite); + sprite._texIdDirty = false; + } + } + }; + _proto.updateRenderDataForSwitchMaterial = function updateRenderDataForSwitchMaterial(sprite) { + if (sprite._vertsDirty) { + var fillStart = sprite._fillStart; + var fillRange = sprite._fillRange; + if (fillRange < 0) { + fillStart += fillRange; + fillRange = -fillRange; + } + fillRange = fillStart + fillRange; + fillStart = fillStart > 1 ? 1 : fillStart; + fillStart = fillStart < 0 ? 0 : fillStart; + fillRange = fillRange > 1 ? 1 : fillRange; + fillRange = fillRange < 0 ? 0 : fillRange; + fillRange -= fillStart; + fillRange = fillRange < 0 ? 0 : fillRange; + var fillEnd = fillStart + fillRange; + fillEnd = fillEnd > 1 ? 1 : fillEnd; + this.updateUVs(sprite, fillStart, fillEnd); + this.updateVerts(sprite, fillStart, fillEnd); + sprite._vertsDirty = false; + } + if (sprite._texIdDirty) { + sprite._updateMultiTexId(sprite.getMaterial(0), sprite._spriteFrame._texture); + if (sprite._texIdDirty) { + this.updateTexId(sprite); + sprite._texIdDirty = false; + } + } + }; + return BarFilledAssemblerMulti; + })(_barFilled["default"]); + exports["default"] = BarFilledAssemblerMulti; + BarFilledAssemblerMulti.prototype.floatsPerVert = 6; + BarFilledAssemblerMulti.prototype.texIdOffset = 5; + BarFilledAssemblerMulti.prototype.isMulti = true; + module.exports = exports["default"]; + }), { + "../../../../webgl/vertex-format": 190, + "../2d/bar-filled": 177 + } ], + 172: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _vertexFormat = require("../../../../webgl/vertex-format"); + var _mesh = _interopRequireDefault(require("../2d/mesh")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var MultiMeshSpriteAssembler = (function(_MeshSpriteAssembler) { + _inheritsLoose(MultiMeshSpriteAssembler, _MeshSpriteAssembler); + function MultiMeshSpriteAssembler() { + return _MeshSpriteAssembler.apply(this, arguments) || this; + } + var _proto = MultiMeshSpriteAssembler.prototype; + _proto.getVfmt = function getVfmt() { + return _vertexFormat.vfmtPosUvColorTexId; + }; + _proto.getBuffer = function getBuffer() { + return cc.renderer._handle.getBuffer("mesh", this.getVfmt()); + }; + _proto.updateRenderData = function updateRenderData(sprite) { + var frame = sprite.spriteFrame; + _MeshSpriteAssembler.prototype.updateRenderData.call(this, sprite); + if (frame) { + sprite._texIdDirty && sprite._updateMultiTexId(sprite.getMaterial(0), frame._texture); + this.updateTexId(sprite); + sprite._texIdDirty = false; + } + }; + _proto.updateRenderDataForSwitchMaterial = function updateRenderDataForSwitchMaterial(sprite) { + var frame = sprite.spriteFrame; + if (frame) { + var vertices = frame.vertices; + if (vertices) { + this.verticesCount = vertices.x.length; + this.indicesCount = vertices.triangles.length; + var renderData = this._renderData; + var flexBuffer = renderData._flexBuffer; + if (flexBuffer.reserve(this.verticesCount, this.indicesCount)) { + this.updateColor(sprite); + sprite._vertsDirty = true; + } + flexBuffer.used(this.verticesCount, this.indicesCount); + this.updateIndices(vertices.triangles); + if (sprite._vertsDirty) { + this.updateUVs(sprite); + this.updateVerts(sprite); + this.updateWorldVerts(sprite); + sprite._vertsDirty = false; + } + } + } + sprite._texIdDirty && sprite._updateMultiTexId(sprite.getMaterial(0), frame._texture); + this.updateTexId(sprite); + sprite._texIdDirty = false; + }; + return MultiMeshSpriteAssembler; + })(_mesh["default"]); + exports["default"] = MultiMeshSpriteAssembler; + MultiMeshSpriteAssembler.prototype.floatsPerVert = 6; + MultiMeshSpriteAssembler.prototype.texIdOffset = 5; + MultiMeshSpriteAssembler.prototype.isMulti = true; + module.exports = exports["default"]; + }), { + "../../../../webgl/vertex-format": 190, + "../2d/mesh": 178 + } ], + 173: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _vertexFormat = require("../../../../webgl/vertex-format"); + var _radialFilled = _interopRequireDefault(require("../2d/radial-filled")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var MultiRadialFilledAssembler = (function(_RadialFilledAssemble) { + _inheritsLoose(MultiRadialFilledAssembler, _RadialFilledAssemble); + function MultiRadialFilledAssembler() { + return _RadialFilledAssemble.apply(this, arguments) || this; + } + var _proto = MultiRadialFilledAssembler.prototype; + _proto.initData = function initData(sprite) { + this._renderData.createFlexData(0, 4, 6, this.getVfmt()); + this.updateIndices(); + }; + _proto.getVfmt = function getVfmt() { + return _vertexFormat.vfmtPosUvColorTexId; + }; + _proto.getBuffer = function getBuffer() { + return cc.renderer._handle.getBuffer("mesh", this.getVfmt()); + }; + _proto.updateRenderData = function updateRenderData(sprite) { + _RadialFilledAssemble.prototype.updateRenderData.call(this, sprite); + sprite._texIdDirty && sprite._updateMultiTexId(sprite.getMaterial(0), sprite.spriteFrame._texture); + this.updateTexId(sprite); + sprite._texIdDirty = false; + }; + _proto.updateRenderDataForSwitchMaterial = function updateRenderDataForSwitchMaterial(sprite) { + this._updateRenderData(sprite); + sprite._texIdDirty && sprite._updateMultiTexId(sprite.getMaterial(0), sprite.spriteFrame._texture); + this.updateTexId(sprite); + sprite._texIdDirty = false; + }; + return MultiRadialFilledAssembler; + })(_radialFilled["default"]); + exports["default"] = MultiRadialFilledAssembler; + MultiRadialFilledAssembler.prototype.floatsPerVert = 6; + MultiRadialFilledAssembler.prototype.texIdOffset = 5; + MultiRadialFilledAssembler.prototype.isMulti = true; + module.exports = exports["default"]; + }), { + "../../../../webgl/vertex-format": 190, + "../2d/radial-filled": 179 + } ], + 174: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _vertexFormat = require("../../../../webgl/vertex-format"); + var _simple = _interopRequireDefault(require("../2d/simple")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var MultiSimpleSpriteAssembler = (function(_SimpleSpriteAssemble) { + _inheritsLoose(MultiSimpleSpriteAssembler, _SimpleSpriteAssemble); + function MultiSimpleSpriteAssembler() { + return _SimpleSpriteAssemble.apply(this, arguments) || this; + } + var _proto = MultiSimpleSpriteAssembler.prototype; + _proto.initData = function initData() { + var data = this._renderData; + data.createFlexData(0, this.verticesCount, this.indicesCount, this.getVfmt()); + var indices = data.iDatas[0]; + data.initQuadIndices(indices); + }; + _proto.getVfmt = function getVfmt() { + return _vertexFormat.vfmtPosUvColorTexId; + }; + _proto.getBuffer = function getBuffer() { + return cc.renderer._handle.getBuffer("mesh", this.getVfmt()); + }; + _proto.updateRenderData = function updateRenderData(sprite) { + _SimpleSpriteAssemble.prototype.updateRenderData.call(this, sprite); + if (sprite._texIdDirty) { + sprite._updateMultiTexId(sprite.getMaterial(0), sprite._spriteFrame._texture); + if (sprite._texIdDirty) { + this.updateTexId(sprite); + sprite._texIdDirty = false; + } + } + }; + _proto.updateRenderDataForSwitchMaterial = function updateRenderDataForSwitchMaterial(sprite) { + if (sprite._vertsDirty) { + this.updateUVs(sprite); + this.updateVerts(sprite); + sprite._vertsDirty = false; + } + if (sprite._texIdDirty) { + sprite._updateMultiTexId(sprite.getMaterial(0), sprite._spriteFrame._texture); + if (sprite._texIdDirty) { + this.updateTexId(sprite); + sprite._texIdDirty = false; + } + } + }; + return MultiSimpleSpriteAssembler; + })(_simple["default"]); + exports["default"] = MultiSimpleSpriteAssembler; + MultiSimpleSpriteAssembler.prototype.floatsPerVert = 6; + MultiSimpleSpriteAssembler.prototype.texIdOffset = 5; + MultiSimpleSpriteAssembler.prototype.isMulti = true; + module.exports = exports["default"]; + }), { + "../../../../webgl/vertex-format": 190, + "../2d/simple": 180 + } ], + 175: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _vertexFormat = require("../../../../webgl/vertex-format"); + var _sliced = _interopRequireDefault(require("../2d/sliced")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var MultiSlicedAssembler = (function(_SlicedAssembler) { + _inheritsLoose(MultiSlicedAssembler, _SlicedAssembler); + function MultiSlicedAssembler() { + return _SlicedAssembler.apply(this, arguments) || this; + } + var _proto = MultiSlicedAssembler.prototype; + _proto.initData = function initData(sprite) { + if (this._renderData.meshCount > 0) return; + this._renderData.createFlexData(0, this.verticesCount, this.indicesCount, this.getVfmt()); + var indices = this._renderData.iDatas[0]; + var indexOffset = 0; + for (var r = 0; r < 3; ++r) for (var c = 0; c < 3; ++c) { + var start = 4 * r + c; + indices[indexOffset++] = start; + indices[indexOffset++] = start + 1; + indices[indexOffset++] = start + 4; + indices[indexOffset++] = start + 1; + indices[indexOffset++] = start + 5; + indices[indexOffset++] = start + 4; + } + }; + _proto.getVfmt = function getVfmt() { + return _vertexFormat.vfmtPosUvColorTexId; + }; + _proto.getBuffer = function getBuffer() { + return cc.renderer._handle.getBuffer("mesh", this.getVfmt()); + }; + _proto.updateRenderData = function updateRenderData(sprite) { + _SlicedAssembler.prototype.updateRenderData.call(this, sprite); + if (sprite._texIdDirty) { + sprite._updateMultiTexId(sprite.getMaterial(0), sprite._spriteFrame._texture); + if (sprite._texIdDirty) { + this.updateTexId(sprite); + sprite._texIdDirty = false; + } + } + }; + _proto.updateRenderDataForSwitchMaterial = function updateRenderDataForSwitchMaterial(sprite) { + if (sprite._vertsDirty) { + this.updateUVs(sprite); + this.updateVerts(sprite); + sprite._vertsDirty = false; + } + if (sprite._texIdDirty) { + sprite._updateMultiTexId(sprite.getMaterial(0), sprite._spriteFrame._texture); + if (sprite._texIdDirty) { + this.updateTexId(sprite); + sprite._texIdDirty = false; + } + } + }; + return MultiSlicedAssembler; + })(_sliced["default"]); + exports["default"] = MultiSlicedAssembler; + MultiSlicedAssembler.prototype.floatsPerVert = 6; + MultiSlicedAssembler.prototype.texIdOffset = 5; + MultiSlicedAssembler.prototype.isMulti = true; + module.exports = exports["default"]; + }), { + "../../../../webgl/vertex-format": 190, + "../2d/sliced": 181 + } ], + 176: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _vertexFormat = require("../../../../webgl/vertex-format"); + var _tiled = _interopRequireDefault(require("../2d/tiled")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var MultiTiledAssembler = (function(_TiledAssembler) { + _inheritsLoose(MultiTiledAssembler, _TiledAssembler); + function MultiTiledAssembler() { + return _TiledAssembler.apply(this, arguments) || this; + } + var _proto = MultiTiledAssembler.prototype; + _proto.getVfmt = function getVfmt() { + return _vertexFormat.vfmtPosUvColorTexId; + }; + _proto.getBuffer = function getBuffer() { + return cc.renderer._handle.getBuffer("mesh", this.getVfmt()); + }; + _proto.updateRenderData = function updateRenderData(sprite) { + _TiledAssembler.prototype.updateRenderData.call(this, sprite); + sprite._texIdDirty && sprite._updateMultiTexId(sprite.getMaterial(0), sprite.spriteFrame._texture); + this.updateTexId(sprite); + sprite._texIdDirty = false; + }; + _proto.updateRenderDataForSwitchMaterial = function updateRenderDataForSwitchMaterial(sprite) { + var frame = sprite._spriteFrame; + var node = sprite.node; + var contentWidth = this.contentWidth = Math.abs(node.width); + var contentHeight = this.contentHeight = Math.abs(node.height); + var rect = frame._rect; + var leftWidth = frame.insetLeft, rightWidth = frame.insetRight, centerWidth = rect.width - leftWidth - rightWidth, topHeight = frame.insetTop, bottomHeight = frame.insetBottom, centerHeight = rect.height - topHeight - bottomHeight; + this.sizableWidth = contentWidth - leftWidth - rightWidth; + this.sizableHeight = contentHeight - topHeight - bottomHeight; + this.sizableWidth = this.sizableWidth > 0 ? this.sizableWidth : 0; + this.sizableHeight = this.sizableHeight > 0 ? this.sizableHeight : 0; + var hRepeat = this.hRepeat = 0 === centerWidth ? this.sizableWidth : this.sizableWidth / centerWidth; + var vRepeat = this.vRepeat = 0 === centerHeight ? this.sizableHeight : this.sizableHeight / centerHeight; + var row = this.row = Math.ceil(vRepeat + 2); + var col = this.col = Math.ceil(hRepeat + 2); + var count = row * col; + this.verticesCount = 4 * count; + this.indicesCount = 6 * count; + var renderData = this._renderData; + var flexBuffer = renderData._flexBuffer; + if (flexBuffer.reserve(this.verticesCount, this.indicesCount)) { + this._updateIndices(); + this.updateColor(sprite); + } + flexBuffer.used(this.verticesCount, this.indicesCount); + if (sprite._vertsDirty) { + this.updateUVs(sprite); + this.updateVerts(sprite); + sprite._vertsDirty = false; + } + sprite._texIdDirty && sprite._updateMultiTexId(sprite.getMaterial(0), sprite.spriteFrame._texture); + this.updateTexId(sprite); + sprite._texIdDirty = false; + }; + return MultiTiledAssembler; + })(_tiled["default"]); + exports["default"] = MultiTiledAssembler; + MultiTiledAssembler.prototype.floatsPerVert = 6; + MultiTiledAssembler.prototype.texIdOffset = 5; + MultiTiledAssembler.prototype.isMulti = true; + module.exports = exports["default"]; + }), { + "../../../../webgl/vertex-format": 190, + "../2d/tiled": 182 + } ], + 177: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _assembler2d = _interopRequireDefault(require("../../../../assembler-2d")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var Sprite = require("../../../../../components/CCSprite"); + var FillType = Sprite.FillType; + var BarFilledAssembler = (function(_Assembler2D) { + _inheritsLoose(BarFilledAssembler, _Assembler2D); + function BarFilledAssembler() { + return _Assembler2D.apply(this, arguments) || this; + } + var _proto = BarFilledAssembler.prototype; + _proto.updateRenderData = function updateRenderData(sprite) { + var frame = sprite._spriteFrame; + var assemblerChanged = this.packDynamicAtlasAndCheckMaterial(sprite, frame); + if (!assemblerChanged && sprite._vertsDirty) { + var fillStart = sprite._fillStart; + var fillRange = sprite._fillRange; + if (fillRange < 0) { + fillStart += fillRange; + fillRange = -fillRange; + } + fillRange = fillStart + fillRange; + fillStart = fillStart > 1 ? 1 : fillStart; + fillStart = fillStart < 0 ? 0 : fillStart; + fillRange = fillRange > 1 ? 1 : fillRange; + fillRange = fillRange < 0 ? 0 : fillRange; + fillRange -= fillStart; + fillRange = fillRange < 0 ? 0 : fillRange; + var fillEnd = fillStart + fillRange; + fillEnd = fillEnd > 1 ? 1 : fillEnd; + this.updateUVs(sprite, fillStart, fillEnd); + this.updateVerts(sprite, fillStart, fillEnd); + sprite._vertsDirty = false; + } + }; + _proto.updateUVs = function updateUVs(sprite, fillStart, fillEnd) { + var spriteFrame = sprite._spriteFrame; + var atlasWidth = spriteFrame._texture.width; + var atlasHeight = spriteFrame._texture.height; + var textureRect = spriteFrame._rect; + var ul, vb, ur, vt; + var quadUV0, quadUV1, quadUV2, quadUV3, quadUV4, quadUV5, quadUV6, quadUV7; + if (spriteFrame._rotated) { + ul = textureRect.x / atlasWidth; + vb = (textureRect.y + textureRect.width) / atlasHeight; + ur = (textureRect.x + textureRect.height) / atlasWidth; + vt = textureRect.y / atlasHeight; + quadUV0 = quadUV2 = ul; + quadUV4 = quadUV6 = ur; + quadUV3 = quadUV7 = vb; + quadUV1 = quadUV5 = vt; + } else { + ul = textureRect.x / atlasWidth; + vb = (textureRect.y + textureRect.height) / atlasHeight; + ur = (textureRect.x + textureRect.width) / atlasWidth; + vt = textureRect.y / atlasHeight; + quadUV0 = quadUV4 = ul; + quadUV2 = quadUV6 = ur; + quadUV1 = quadUV3 = vb; + quadUV5 = quadUV7 = vt; + } + var verts = this._renderData.vDatas[0]; + var uvOffset = this.uvOffset; + var floatsPerVert = this.floatsPerVert; + switch (sprite._fillType) { + case FillType.HORIZONTAL: + verts[uvOffset] = quadUV0 + (quadUV2 - quadUV0) * fillStart; + verts[uvOffset + 1] = quadUV1 + (quadUV3 - quadUV1) * fillStart; + verts[uvOffset + floatsPerVert] = quadUV0 + (quadUV2 - quadUV0) * fillEnd; + verts[uvOffset + floatsPerVert + 1] = quadUV1 + (quadUV3 - quadUV1) * fillEnd; + verts[uvOffset + 2 * floatsPerVert] = quadUV4 + (quadUV6 - quadUV4) * fillStart; + verts[uvOffset + 2 * floatsPerVert + 1] = quadUV5 + (quadUV7 - quadUV5) * fillStart; + verts[uvOffset + 3 * floatsPerVert] = quadUV4 + (quadUV6 - quadUV4) * fillEnd; + verts[uvOffset + 3 * floatsPerVert + 1] = quadUV5 + (quadUV7 - quadUV5) * fillEnd; + break; + + case FillType.VERTICAL: + verts[uvOffset] = quadUV0 + (quadUV4 - quadUV0) * fillStart; + verts[uvOffset + 1] = quadUV1 + (quadUV5 - quadUV1) * fillStart; + verts[uvOffset + floatsPerVert] = quadUV2 + (quadUV6 - quadUV2) * fillStart; + verts[uvOffset + floatsPerVert + 1] = quadUV3 + (quadUV7 - quadUV3) * fillStart; + verts[uvOffset + 2 * floatsPerVert] = quadUV0 + (quadUV4 - quadUV0) * fillEnd; + verts[uvOffset + 2 * floatsPerVert + 1] = quadUV1 + (quadUV5 - quadUV1) * fillEnd; + verts[uvOffset + 3 * floatsPerVert] = quadUV2 + (quadUV6 - quadUV2) * fillEnd; + verts[uvOffset + 3 * floatsPerVert + 1] = quadUV3 + (quadUV7 - quadUV3) * fillEnd; + break; + + default: + cc.errorID(2626); + } + }; + _proto.updateVerts = function updateVerts(sprite, fillStart, fillEnd) { + var node = sprite.node, width = node.width, height = node.height, appx = node.anchorX * width, appy = node.anchorY * height; + var l = -appx, b = -appy, r = width - appx, t = height - appy; + var progressStart, progressEnd; + switch (sprite._fillType) { + case FillType.HORIZONTAL: + progressStart = l + (r - l) * fillStart; + progressEnd = l + (r - l) * fillEnd; + l = progressStart; + r = progressEnd; + break; + + case FillType.VERTICAL: + progressStart = b + (t - b) * fillStart; + progressEnd = b + (t - b) * fillEnd; + b = progressStart; + t = progressEnd; + break; + + default: + cc.errorID(2626); + } + var local = this._local; + local[0] = l; + local[1] = b; + local[2] = r; + local[3] = t; + this.updateWorldVerts(sprite); + }; + return BarFilledAssembler; + })(_assembler2d["default"]); + exports["default"] = BarFilledAssembler; + module.exports = exports["default"]; + }), { + "../../../../../components/CCSprite": 101, + "../../../../assembler-2d": 147 + } ], + 178: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _assembler2d = _interopRequireDefault(require("../../../../assembler-2d")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var MeshSpriteAssembler = (function(_Assembler2D) { + _inheritsLoose(MeshSpriteAssembler, _Assembler2D); + function MeshSpriteAssembler() { + return _Assembler2D.apply(this, arguments) || this; + } + var _proto = MeshSpriteAssembler.prototype; + _proto.initData = function initData(sprite) { + this._renderData.createFlexData(0, 4, 6, this.getVfmt()); + }; + _proto.updateRenderData = function updateRenderData(sprite) { + var frame = sprite.spriteFrame; + var assemblerChanged = this.packDynamicAtlasAndCheckMaterial(sprite, frame); + if (!assemblerChanged && frame) { + var vertices = frame.vertices; + if (vertices) { + this.verticesCount = vertices.x.length; + this.indicesCount = vertices.triangles.length; + var renderData = this._renderData; + var flexBuffer = renderData._flexBuffer; + if (flexBuffer.reserve(this.verticesCount, this.indicesCount)) { + this.updateColor(sprite); + sprite._vertsDirty = true; + } + flexBuffer.used(this.verticesCount, this.indicesCount); + this.updateIndices(vertices.triangles); + if (sprite._vertsDirty) { + this.updateUVs(sprite); + this.updateVerts(sprite); + this.updateWorldVerts(sprite); + sprite._vertsDirty = false; + } + } + } + }; + _proto.updateIndices = function updateIndices(triangles) { + this._renderData.iDatas[0].set(triangles); + }; + _proto.updateUVs = function updateUVs(sprite) { + var vertices = sprite.spriteFrame.vertices, u = vertices.nu, v = vertices.nv; + var uvOffset = this.uvOffset; + var floatsPerVert = this.floatsPerVert; + var verts = this._renderData.vDatas[0]; + for (var i = 0; i < u.length; i++) { + var dstOffset = floatsPerVert * i + uvOffset; + verts[dstOffset] = u[i]; + verts[dstOffset + 1] = v[i]; + } + }; + _proto.updateVerts = function updateVerts(sprite) { + var node = sprite.node, contentWidth = Math.abs(node.width), contentHeight = Math.abs(node.height), appx = node.anchorX * contentWidth, appy = node.anchorY * contentHeight; + var frame = sprite.spriteFrame, vertices = frame.vertices, x = vertices.x, y = vertices.y, originalWidth = frame._originalSize.width, originalHeight = frame._originalSize.height, rectWidth = frame._rect.width, rectHeight = frame._rect.height, offsetX = frame._offset.x, offsetY = frame._offset.y, trimX = offsetX + (originalWidth - rectWidth) / 2, trimY = offsetY + (originalHeight - rectHeight) / 2; + var scaleX = contentWidth / (sprite.trim ? rectWidth : originalWidth), scaleY = contentHeight / (sprite.trim ? rectHeight : originalHeight); + var local = this._local; + if (sprite.trim) for (var _i = 0, _l = x.length; _i < _l; _i++) { + var _offset = 2 * _i; + local[_offset] = (x[_i] - trimX) * scaleX - appx; + local[_offset + 1] = (originalHeight - y[_i] - trimY) * scaleY - appy; + } else for (var i = 0, l = x.length; i < l; i++) { + var offset = 2 * i; + local[offset] = x[i] * scaleX - appx; + local[offset + 1] = (originalHeight - y[i]) * scaleY - appy; + } + if (frame._flipX) for (var _i2 = 0, _l2 = this.verticesCount; _i2 < _l2; _i2++) local[2 * _i2] = contentWidth - local[2 * _i2] - 2 * appx; + if (frame._flipY) for (var _i3 = 0, _l3 = this.verticesCount; _i3 < _l3; _i3++) local[2 * _i3 + 1] = contentHeight - local[2 * _i3 + 1] - 2 * appy; + }; + _proto.updateWorldVerts = function updateWorldVerts(sprite) { + var node = sprite.node; + var matrix = node._worldMatrix; + var matrixm = matrix.m; + var a = matrixm[0], b = matrixm[1], c = matrixm[4], d = matrixm[5], tx = matrixm[12], ty = matrixm[13]; + var local = this._local; + var world = this._renderData.vDatas[0]; + var floatsPerVert = this.floatsPerVert; + for (var i = 0, l = this.verticesCount; i < l; i++) { + var lx = local[2 * i]; + var ly = local[2 * i + 1]; + world[floatsPerVert * i] = lx * a + ly * c + tx; + world[floatsPerVert * i + 1] = lx * b + ly * d + ty; + } + }; + return MeshSpriteAssembler; + })(_assembler2d["default"]); + exports["default"] = MeshSpriteAssembler; + module.exports = exports["default"]; + }), { + "../../../../assembler-2d": 147 + } ], + 179: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _assembler2d = _interopRequireDefault(require("../../../../assembler-2d")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var PI_2 = 2 * Math.PI; + var _vertPos = [ cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0) ]; + var _vertices = [ 0, 0, 0, 0 ]; + var _uvs = [ 0, 0, 0, 0, 0, 0, 0, 0 ]; + var _intersectPoint_1 = [ cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0) ]; + var _intersectPoint_2 = [ cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0) ]; + var _center = cc.v2(0, 0); + var _triangles = []; + function _calcInsectedPoints(left, right, bottom, top, center, angle, intersectPoints) { + var sinAngle = Math.sin(angle); + var cosAngle = Math.cos(angle); + var tanAngle, cotAngle; + if (0 !== Math.cos(angle)) { + tanAngle = sinAngle / cosAngle; + if ((left - center.x) * cosAngle > 0) { + var yleft = center.y + tanAngle * (left - center.x); + intersectPoints[0].x = left; + intersectPoints[0].y = yleft; + } + if ((right - center.x) * cosAngle > 0) { + var yright = center.y + tanAngle * (right - center.x); + intersectPoints[2].x = right; + intersectPoints[2].y = yright; + } + } + if (0 !== Math.sin(angle)) { + cotAngle = cosAngle / sinAngle; + if ((top - center.y) * sinAngle > 0) { + var xtop = center.x + cotAngle * (top - center.y); + intersectPoints[3].x = xtop; + intersectPoints[3].y = top; + } + if ((bottom - center.y) * sinAngle > 0) { + var xbottom = center.x + cotAngle * (bottom - center.y); + intersectPoints[1].x = xbottom; + intersectPoints[1].y = bottom; + } + } + } + function _calculateVertices(sprite) { + var node = sprite.node, width = node.width, height = node.height, appx = node.anchorX * width, appy = node.anchorY * height; + var l = -appx, b = -appy, r = width - appx, t = height - appy; + var vertices = _vertices; + vertices[0] = l; + vertices[1] = b; + vertices[2] = r; + vertices[3] = t; + var fillCenter = sprite._fillCenter, cx = _center.x = Math.min(Math.max(0, fillCenter.x), 1) * (r - l) + l, cy = _center.y = Math.min(Math.max(0, fillCenter.y), 1) * (t - b) + b; + _vertPos[0].x = _vertPos[3].x = l; + _vertPos[1].x = _vertPos[2].x = r; + _vertPos[0].y = _vertPos[1].y = b; + _vertPos[2].y = _vertPos[3].y = t; + _triangles.length = 0; + cx !== vertices[0] && (_triangles[0] = [ 3, 0 ]); + cx !== vertices[2] && (_triangles[2] = [ 1, 2 ]); + cy !== vertices[1] && (_triangles[1] = [ 0, 1 ]); + cy !== vertices[3] && (_triangles[3] = [ 2, 3 ]); + } + function _calculateUVs(spriteFrame) { + var atlasWidth = spriteFrame._texture.width; + var atlasHeight = spriteFrame._texture.height; + var textureRect = spriteFrame._rect; + var u0, u1, v0, v1; + var uvs = _uvs; + if (spriteFrame._rotated) { + u0 = textureRect.x / atlasWidth; + u1 = (textureRect.x + textureRect.height) / atlasWidth; + v0 = textureRect.y / atlasHeight; + v1 = (textureRect.y + textureRect.width) / atlasHeight; + uvs[0] = uvs[2] = u0; + uvs[4] = uvs[6] = u1; + uvs[3] = uvs[7] = v1; + uvs[1] = uvs[5] = v0; + } else { + u0 = textureRect.x / atlasWidth; + u1 = (textureRect.x + textureRect.width) / atlasWidth; + v0 = textureRect.y / atlasHeight; + v1 = (textureRect.y + textureRect.height) / atlasHeight; + uvs[0] = uvs[4] = u0; + uvs[2] = uvs[6] = u1; + uvs[1] = uvs[3] = v1; + uvs[5] = uvs[7] = v0; + } + } + function _getVertAngle(start, end) { + var placementX, placementY; + placementX = end.x - start.x; + placementY = end.y - start.y; + if (0 === placementX && 0 === placementY) return; + if (0 === placementX) return placementY > 0 ? .5 * Math.PI : 1.5 * Math.PI; + var angle = Math.atan(placementY / placementX); + placementX < 0 && (angle += Math.PI); + return angle; + } + var RadialFilledAssembler = (function(_Assembler2D) { + _inheritsLoose(RadialFilledAssembler, _Assembler2D); + function RadialFilledAssembler() { + return _Assembler2D.apply(this, arguments) || this; + } + var _proto = RadialFilledAssembler.prototype; + _proto.initData = function initData(sprite) { + this._renderData.createFlexData(0, 4, 6, this.getVfmt()); + this.updateIndices(); + }; + _proto.updateRenderData = function updateRenderData(sprite) { + _Assembler2D.prototype.updateRenderData.call(this, sprite); + var frame = sprite.spriteFrame; + var assemblerChanged = this.packDynamicAtlasAndCheckMaterial(sprite, frame); + assemblerChanged || this._updateRenderData(sprite); + }; + _proto._updateRenderData = function _updateRenderData(sprite) { + var frame = sprite.spriteFrame; + if (sprite._vertsDirty) { + var fillStart = sprite._fillStart; + var fillRange = sprite._fillRange; + if (fillRange < 0) { + fillStart += fillRange; + fillRange = -fillRange; + } + while (fillStart >= 1) fillStart -= 1; + while (fillStart < 0) fillStart += 1; + fillStart *= PI_2; + fillRange *= PI_2; + _calculateVertices(sprite); + _calculateUVs(frame); + _calcInsectedPoints(_vertices[0], _vertices[2], _vertices[1], _vertices[3], _center, fillStart, _intersectPoint_1); + _calcInsectedPoints(_vertices[0], _vertices[2], _vertices[1], _vertices[3], _center, fillStart + fillRange, _intersectPoint_2); + this.updateVerts(sprite, fillStart, fillRange); + sprite._vertsDirty = false; + } + }; + _proto.updateVerts = function updateVerts(sprite, fillStart, fillRange) { + var fillEnd = fillStart + fillRange; + var local = this._local; + local.length = 0; + var offset = 0; + var floatsPerTriangle = 3 * this.floatsPerVert; + for (var triangleIndex = 0; triangleIndex < 4; ++triangleIndex) { + var triangle = _triangles[triangleIndex]; + if (!triangle) continue; + if (fillRange >= PI_2) { + local.length = offset + floatsPerTriangle; + this._generateTriangle(local, offset, _center, _vertPos[triangle[0]], _vertPos[triangle[1]]); + offset += floatsPerTriangle; + continue; + } + var startAngle = _getVertAngle(_center, _vertPos[triangle[0]]); + var endAngle = _getVertAngle(_center, _vertPos[triangle[1]]); + endAngle < startAngle && (endAngle += PI_2); + startAngle -= PI_2; + endAngle -= PI_2; + for (var testIndex = 0; testIndex < 3; ++testIndex) { + if (startAngle >= fillEnd) ; else if (startAngle >= fillStart) { + local.length = offset + floatsPerTriangle; + endAngle >= fillEnd ? this._generateTriangle(local, offset, _center, _vertPos[triangle[0]], _intersectPoint_2[triangleIndex]) : this._generateTriangle(local, offset, _center, _vertPos[triangle[0]], _vertPos[triangle[1]]); + offset += floatsPerTriangle; + } else if (endAngle <= fillStart) ; else if (endAngle <= fillEnd) { + local.length = offset + floatsPerTriangle; + this._generateTriangle(local, offset, _center, _intersectPoint_1[triangleIndex], _vertPos[triangle[1]]); + offset += floatsPerTriangle; + } else { + local.length = offset + floatsPerTriangle; + this._generateTriangle(local, offset, _center, _intersectPoint_1[triangleIndex], _intersectPoint_2[triangleIndex]); + offset += floatsPerTriangle; + } + startAngle += PI_2; + endAngle += PI_2; + } + } + this.allocWorldVerts(sprite); + this.updateWorldVerts(sprite); + }; + _proto.allocWorldVerts = function allocWorldVerts(sprite) { + var color = sprite.node._color._val; + var renderData = this._renderData; + var floatsPerVert = this.floatsPerVert; + var local = this._local; + var verticesCount = local.length / floatsPerVert; + this.verticesCount = this.indicesCount = verticesCount; + var flexBuffer = renderData._flexBuffer; + flexBuffer.reserve(verticesCount, verticesCount) && this.updateIndices(); + flexBuffer.used(this.verticesCount, this.indicesCount); + var verts = renderData.vDatas[0], uintVerts = renderData.uintVDatas[0]; + var uvOffset = this.uvOffset; + for (var offset = 0; offset < local.length; offset += floatsPerVert) { + var start = offset + uvOffset; + verts[start] = local[start]; + verts[start + 1] = local[start + 1]; + uintVerts[start + 2] = color; + } + }; + _proto.updateIndices = function updateIndices() { + var iData = this._renderData.iDatas[0]; + for (var i = 0; i < iData.length; i++) iData[i] = i; + }; + _proto.updateWorldVerts = function updateWorldVerts(sprite) { + var node = sprite.node; + var matrix = node._worldMatrix; + var matrixm = matrix.m, a = matrixm[0], b = matrixm[1], c = matrixm[4], d = matrixm[5], tx = matrixm[12], ty = matrixm[13]; + var local = this._local; + var world = this._renderData.vDatas[0]; + var floatsPerVert = this.floatsPerVert; + for (var offset = 0; offset < local.length; offset += floatsPerVert) { + var x = local[offset]; + var y = local[offset + 1]; + world[offset] = x * a + y * c + tx; + world[offset + 1] = x * b + y * d + ty; + } + }; + _proto._generateTriangle = function _generateTriangle(verts, offset, vert0, vert1, vert2) { + var vertices = _vertices; + var v0x = vertices[0]; + var v0y = vertices[1]; + var v1x = vertices[2]; + var v1y = vertices[3]; + var floatsPerVert = this.floatsPerVert; + verts[offset] = vert0.x; + verts[offset + 1] = vert0.y; + verts[offset + floatsPerVert] = vert1.x; + verts[offset + floatsPerVert + 1] = vert1.y; + verts[offset + 2 * floatsPerVert] = vert2.x; + verts[offset + 2 * floatsPerVert + 1] = vert2.y; + var uvOffset = this.uvOffset; + var progressX, progressY; + progressX = (vert0.x - v0x) / (v1x - v0x); + progressY = (vert0.y - v0y) / (v1y - v0y); + this._generateUV(progressX, progressY, verts, offset + uvOffset); + progressX = (vert1.x - v0x) / (v1x - v0x); + progressY = (vert1.y - v0y) / (v1y - v0y); + this._generateUV(progressX, progressY, verts, offset + floatsPerVert + uvOffset); + progressX = (vert2.x - v0x) / (v1x - v0x); + progressY = (vert2.y - v0y) / (v1y - v0y); + this._generateUV(progressX, progressY, verts, offset + 2 * floatsPerVert + uvOffset); + }; + _proto._generateUV = function _generateUV(progressX, progressY, verts, offset) { + var uvs = _uvs; + var px1 = uvs[0] + (uvs[2] - uvs[0]) * progressX; + var px2 = uvs[4] + (uvs[6] - uvs[4]) * progressX; + var py1 = uvs[1] + (uvs[3] - uvs[1]) * progressX; + var py2 = uvs[5] + (uvs[7] - uvs[5]) * progressX; + verts[offset] = px1 + (px2 - px1) * progressY; + verts[offset + 1] = py1 + (py2 - py1) * progressY; + }; + return RadialFilledAssembler; + })(_assembler2d["default"]); + exports["default"] = RadialFilledAssembler; + module.exports = exports["default"]; + }), { + "../../../../assembler-2d": 147 + } ], + 180: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _assembler2d = _interopRequireDefault(require("../../../../assembler-2d")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var SimpleSpriteAssembler = (function(_Assembler2D) { + _inheritsLoose(SimpleSpriteAssembler, _Assembler2D); + function SimpleSpriteAssembler() { + return _Assembler2D.apply(this, arguments) || this; + } + var _proto = SimpleSpriteAssembler.prototype; + _proto.updateRenderData = function updateRenderData(sprite) { + var assemblerChanged = this.packDynamicAtlasAndCheckMaterial(sprite, sprite._spriteFrame); + if (!assemblerChanged && sprite._vertsDirty) { + this.updateUVs(sprite); + this.updateVerts(sprite); + sprite._vertsDirty = false; + } + }; + _proto.updateUVs = function updateUVs(sprite) { + var uv = sprite._spriteFrame.uv; + var uvOffset = this.uvOffset; + var floatsPerVert = this.floatsPerVert; + var verts = this._renderData.vDatas[0]; + for (var i = 0; i < 4; i++) { + var srcOffset = 2 * i; + var dstOffset = floatsPerVert * i + uvOffset; + verts[dstOffset] = uv[srcOffset]; + verts[dstOffset + 1] = uv[srcOffset + 1]; + } + }; + _proto.updateVerts = function updateVerts(sprite) { + var node = sprite.node, cw = node.width, ch = node.height, appx = node.anchorX * cw, appy = node.anchorY * ch, l, b, r, t; + if (sprite.trim) { + l = -appx; + b = -appy; + r = cw - appx; + t = ch - appy; + } else { + var frame = sprite.spriteFrame, ow = frame._originalSize.width, oh = frame._originalSize.height, rw = frame._rect.width, rh = frame._rect.height, offset = frame._offset, scaleX = cw / ow, scaleY = ch / oh; + var trimLeft = offset.x + (ow - rw) / 2; + var trimRight = offset.x - (ow - rw) / 2; + var trimBottom = offset.y + (oh - rh) / 2; + var trimTop = offset.y - (oh - rh) / 2; + l = trimLeft * scaleX - appx; + b = trimBottom * scaleY - appy; + r = cw + trimRight * scaleX - appx; + t = ch + trimTop * scaleY - appy; + } + var local = this._local; + local[0] = l; + local[1] = b; + local[2] = r; + local[3] = t; + this.updateWorldVerts(sprite); + }; + return SimpleSpriteAssembler; + })(_assembler2d["default"]); + exports["default"] = SimpleSpriteAssembler; + module.exports = exports["default"]; + }), { + "../../../../assembler-2d": 147 + } ], + 181: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _assembler2d = _interopRequireDefault(require("../../../../assembler-2d")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var SlicedAssembler = (function(_Assembler2D) { + _inheritsLoose(SlicedAssembler, _Assembler2D); + function SlicedAssembler() { + return _Assembler2D.apply(this, arguments) || this; + } + var _proto = SlicedAssembler.prototype; + _proto.initData = function initData(sprite) { + if (this._renderData.meshCount > 0) return; + this._renderData.createData(0, this.verticesFloats, this.indicesCount); + var indices = this._renderData.iDatas[0]; + var indexOffset = 0; + for (var r = 0; r < 3; ++r) for (var c = 0; c < 3; ++c) { + var start = 4 * r + c; + indices[indexOffset++] = start; + indices[indexOffset++] = start + 1; + indices[indexOffset++] = start + 4; + indices[indexOffset++] = start + 1; + indices[indexOffset++] = start + 5; + indices[indexOffset++] = start + 4; + } + }; + _proto.initLocal = function initLocal() { + this._local = []; + this._local.length = 8; + }; + _proto.updateRenderData = function updateRenderData(sprite) { + var frame = sprite._spriteFrame; + var assemblerChanged = this.packDynamicAtlasAndCheckMaterial(sprite, frame); + if (!assemblerChanged && sprite._vertsDirty) { + this.updateUVs(sprite); + this.updateVerts(sprite); + sprite._vertsDirty = false; + } + }; + _proto.updateVerts = function updateVerts(sprite) { + var node = sprite.node, width = node.width, height = node.height, appx = node.anchorX * width, appy = node.anchorY * height; + var frame = sprite.spriteFrame; + var leftWidth = frame.insetLeft; + var rightWidth = frame.insetRight; + var topHeight = frame.insetTop; + var bottomHeight = frame.insetBottom; + var sizableWidth = width - leftWidth - rightWidth; + var sizableHeight = height - topHeight - bottomHeight; + var xScale = width / (leftWidth + rightWidth); + var yScale = height / (topHeight + bottomHeight); + xScale = isNaN(xScale) || xScale > 1 ? 1 : xScale; + yScale = isNaN(yScale) || yScale > 1 ? 1 : yScale; + sizableWidth = sizableWidth < 0 ? 0 : sizableWidth; + sizableHeight = sizableHeight < 0 ? 0 : sizableHeight; + var local = this._local; + local[0] = -appx; + local[1] = -appy; + local[2] = leftWidth * xScale - appx; + local[3] = bottomHeight * yScale - appy; + local[4] = local[2] + sizableWidth; + local[5] = local[3] + sizableHeight; + local[6] = width - appx; + local[7] = height - appy; + this.updateWorldVerts(sprite); + }; + _proto.updateUVs = function updateUVs(sprite) { + var verts = this._renderData.vDatas[0]; + var uvSliced = sprite.spriteFrame.uvSliced; + var uvOffset = this.uvOffset; + var floatsPerVert = this.floatsPerVert; + for (var row = 0; row < 4; ++row) for (var col = 0; col < 4; ++col) { + var vid = 4 * row + col; + var uv = uvSliced[vid]; + var voffset = vid * floatsPerVert; + verts[voffset + uvOffset] = uv.u; + verts[voffset + uvOffset + 1] = uv.v; + } + }; + _proto.updateWorldVerts = function updateWorldVerts(sprite) { + var matrix = sprite.node._worldMatrix; + var matrixm = matrix.m, a = matrixm[0], b = matrixm[1], c = matrixm[4], d = matrixm[5], tx = matrixm[12], ty = matrixm[13]; + var local = this._local; + var world = this._renderData.vDatas[0]; + var floatsPerVert = this.floatsPerVert; + for (var row = 0; row < 4; ++row) { + var localRowY = local[2 * row + 1]; + for (var col = 0; col < 4; ++col) { + var localColX = local[2 * col]; + var worldIndex = (4 * row + col) * floatsPerVert; + world[worldIndex] = localColX * a + localRowY * c + tx; + world[worldIndex + 1] = localColX * b + localRowY * d + ty; + } + } + }; + return SlicedAssembler; + })(_assembler2d["default"]); + exports["default"] = SlicedAssembler; + Object.assign(SlicedAssembler.prototype, { + verticesCount: 16, + indicesCount: 54 + }); + module.exports = exports["default"]; + }), { + "../../../../assembler-2d": 147 + } ], + 182: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _assembler2d = _interopRequireDefault(require("../../../../assembler-2d")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var TiledAssembler = (function(_Assembler2D) { + _inheritsLoose(TiledAssembler, _Assembler2D); + function TiledAssembler() { + return _Assembler2D.apply(this, arguments) || this; + } + var _proto = TiledAssembler.prototype; + _proto.initData = function initData(sprite) { + this.verticesCount = 0; + this.contentWidth = 0; + this.contentHeight = 0; + this.rectWidth = 0; + this.rectHeight = 0; + this.hRepeat = 0; + this.vRepeat = 0; + this.row = 0; + this.col = 0; + this._renderData.createFlexData(0, 4, 6, this.getVfmt()); + this._updateIndices(); + }; + _proto.initLocal = function initLocal() { + this._local = { + x: [], + y: [] + }; + }; + _proto._updateIndices = function _updateIndices() { + var iData = this._renderData.iDatas[0]; + for (var i = 0, vid = 0, l = iData.length; i < l; i += 6, vid += 4) { + iData[i] = vid; + iData[i + 1] = vid + 1; + iData[i + 2] = vid + 2; + iData[i + 3] = vid + 1; + iData[i + 4] = vid + 3; + iData[i + 5] = vid + 2; + } + }; + _proto.updateRenderData = function updateRenderData(sprite) { + var frame = sprite._spriteFrame; + var assemblerChanged = this.packDynamicAtlasAndCheckMaterial(sprite, frame); + if (!assemblerChanged) { + var node = sprite.node; + var contentWidth = this.contentWidth = Math.abs(node.width); + var contentHeight = this.contentHeight = Math.abs(node.height); + var rect = frame._rect; + var leftWidth = frame.insetLeft, rightWidth = frame.insetRight, centerWidth = rect.width - leftWidth - rightWidth, topHeight = frame.insetTop, bottomHeight = frame.insetBottom, centerHeight = rect.height - topHeight - bottomHeight; + this.sizableWidth = contentWidth - leftWidth - rightWidth; + this.sizableHeight = contentHeight - topHeight - bottomHeight; + this.sizableWidth = this.sizableWidth > 0 ? this.sizableWidth : 0; + this.sizableHeight = this.sizableHeight > 0 ? this.sizableHeight : 0; + var hRepeat = this.hRepeat = 0 === centerWidth ? this.sizableWidth : this.sizableWidth / centerWidth; + var vRepeat = this.vRepeat = 0 === centerHeight ? this.sizableHeight : this.sizableHeight / centerHeight; + var row = this.row = Math.ceil(vRepeat + 2); + var col = this.col = Math.ceil(hRepeat + 2); + var count = row * col; + this.verticesCount = 4 * count; + this.indicesCount = 6 * count; + var renderData = this._renderData; + var flexBuffer = renderData._flexBuffer; + if (flexBuffer.reserve(this.verticesCount, this.indicesCount)) { + this._updateIndices(); + this.updateColor(sprite); + } + flexBuffer.used(this.verticesCount, this.indicesCount); + if (sprite._vertsDirty) { + this.updateUVs(sprite); + this.updateVerts(sprite); + sprite._vertsDirty = false; + } + } + }; + _proto.updateVerts = function updateVerts(sprite) { + var frame = sprite._spriteFrame; + var rect = frame._rect; + var node = sprite.node, appx = node.anchorX * node.width, appy = node.anchorY * node.height; + var row = this.row, col = this.col, contentWidth = this.contentWidth, contentHeight = this.contentHeight; + var _this$_local = this._local, x = _this$_local.x, y = _this$_local.y; + x.length = y.length = 0; + var leftWidth = frame.insetLeft, rightWidth = frame.insetRight, centerWidth = rect.width - leftWidth - rightWidth, topHeight = frame.insetTop, bottomHeight = frame.insetBottom, centerHeight = rect.height - topHeight - bottomHeight; + var xScale = node.width / (leftWidth + rightWidth) > 1 ? 1 : node.width / (leftWidth + rightWidth); + var yScale = node.height / (topHeight + bottomHeight) > 1 ? 1 : node.height / (topHeight + bottomHeight); + var offsetWidth = 0, offsetHeight = 0; + offsetWidth = centerWidth > 0 ? Math.floor(1e3 * this.sizableWidth) / 1e3 % centerWidth === 0 ? centerWidth : this.sizableWidth % centerWidth : this.sizableWidth; + offsetHeight = centerHeight > 0 ? Math.floor(1e3 * this.sizableHeight) / 1e3 % centerHeight === 0 ? centerHeight : this.sizableHeight % centerHeight : this.sizableHeight; + for (var i = 0; i <= col; i++) 0 === i ? x[i] = -appx : i > 0 && i < col ? x[i] = 1 === i ? leftWidth * xScale + Math.min(centerWidth, this.sizableWidth) - appx : centerWidth > 0 ? i === col - 1 ? leftWidth + offsetWidth + centerWidth * (i - 2) - appx : leftWidth + Math.min(centerWidth, this.sizableWidth) + centerWidth * (i - 2) - appx : leftWidth + this.sizableWidth - appx : i === col && (x[i] = Math.min(leftWidth + this.sizableWidth + rightWidth, contentWidth) - appx); + for (var _i = 0; _i <= row; _i++) 0 === _i ? y[_i] = -appy : _i > 0 && _i < row ? y[_i] = 1 === _i ? bottomHeight * yScale + Math.min(centerHeight, this.sizableHeight) - appy : centerHeight > 0 ? _i === row - 1 ? bottomHeight + offsetHeight + (_i - 2) * centerHeight - appy : bottomHeight + Math.min(centerHeight, this.sizableHeight) + (_i - 2) * centerHeight - appy : bottomHeight + this.sizableHeight - appy : _i === row && (y[_i] = Math.min(bottomHeight + this.sizableHeight + topHeight, contentHeight) - appy); + this.updateWorldVerts(sprite); + }; + _proto.updateWorldVerts = function updateWorldVerts(sprite) { + var renderData = this._renderData; + var local = this._local; + var localX = local.x, localY = local.y; + var world = renderData.vDatas[0]; + var row = this.row, col = this.col; + var matrix = sprite.node._worldMatrix; + var matrixm = matrix.m; + var a = matrixm[0], b = matrixm[1], c = matrixm[4], d = matrixm[5], tx = matrixm[12], ty = matrixm[13]; + var x, x1, y, y1; + var floatsPerVert = this.floatsPerVert; + var vertexOffset = 0; + for (var yindex = 0, ylength = row; yindex < ylength; ++yindex) { + y = localY[yindex]; + y1 = localY[yindex + 1]; + for (var xindex = 0, xlength = col; xindex < xlength; ++xindex) { + x = localX[xindex]; + x1 = localX[xindex + 1]; + world[vertexOffset] = x * a + y * c + tx; + world[vertexOffset + 1] = x * b + y * d + ty; + vertexOffset += floatsPerVert; + world[vertexOffset] = x1 * a + y * c + tx; + world[vertexOffset + 1] = x1 * b + y * d + ty; + vertexOffset += floatsPerVert; + world[vertexOffset] = x * a + y1 * c + tx; + world[vertexOffset + 1] = x * b + y1 * d + ty; + vertexOffset += floatsPerVert; + world[vertexOffset] = x1 * a + y1 * c + tx; + world[vertexOffset + 1] = x1 * b + y1 * d + ty; + vertexOffset += floatsPerVert; + } + } + }; + _proto.updateUVs = function updateUVs(sprite) { + var verts = this._renderData.vDatas[0]; + if (!verts) return; + var frame = sprite._spriteFrame; + var rect = frame._rect; + var leftWidth = frame.insetLeft, rightWidth = frame.insetRight, centerWidth = rect.width - leftWidth - rightWidth, topHeight = frame.insetTop, bottomHeight = frame.insetBottom, centerHeight = rect.height - topHeight - bottomHeight; + var row = this.row, col = this.col, hRepeat = this.hRepeat, vRepeat = this.vRepeat; + var coefu = 0, coefv = 0; + var uv = sprite.spriteFrame.uv; + var uvSliced = sprite.spriteFrame.uvSliced; + var rotated = sprite.spriteFrame._rotated; + var floatsPerVert = this.floatsPerVert, uvOffset = this.uvOffset; + var tempXVerts = [], tempYVerts = []; + for (var yindex = 0, ylength = row; yindex < ylength; ++yindex) { + coefv = this.sizableHeight > centerHeight ? this.sizableHeight >= yindex * centerHeight ? 1 : vRepeat % 1 : vRepeat; + for (var xindex = 0, xlength = col; xindex < xlength; ++xindex) { + coefu = this.sizableWidth > centerWidth ? this.sizableWidth >= xindex * centerWidth ? 1 : hRepeat % 1 : hRepeat; + if (rotated) { + if (0 === yindex) { + tempXVerts[0] = uvSliced[0].u; + tempXVerts[1] = uvSliced[0].u; + tempXVerts[2] = uvSliced[4].u + (uvSliced[8].u - uvSliced[4].u) * coefv; + } else if (yindex < row - 1) { + tempXVerts[0] = uvSliced[4].u; + tempXVerts[1] = uvSliced[4].u; + tempXVerts[2] = uvSliced[4].u + (uvSliced[8].u - uvSliced[4].u) * coefv; + } else if (yindex === row - 1) { + tempXVerts[0] = uvSliced[8].u; + tempXVerts[1] = uvSliced[8].u; + tempXVerts[2] = uvSliced[12].u; + } + if (0 === xindex) { + tempYVerts[0] = uvSliced[0].v; + tempYVerts[1] = uvSliced[1].v + (uvSliced[2].v - uvSliced[1].v) * coefu; + tempYVerts[2] = uvSliced[0].v; + } else if (xindex < col - 1) { + tempYVerts[0] = uvSliced[1].v; + tempYVerts[1] = uvSliced[1].v + (uvSliced[2].v - uvSliced[1].v) * coefu; + tempYVerts[2] = uvSliced[1].v; + } else if (xindex === col - 1) { + tempYVerts[0] = uvSliced[2].v; + tempYVerts[1] = uvSliced[3].v; + tempYVerts[2] = uvSliced[2].v; + } + tempXVerts[3] = tempXVerts[2]; + tempYVerts[3] = tempYVerts[1]; + } else { + if (0 === xindex) { + tempXVerts[0] = uvSliced[0].u; + tempXVerts[1] = uvSliced[1].u + (uvSliced[2].u - uvSliced[1].u) * coefu; + tempXVerts[2] = uv[0]; + } else if (xindex < col - 1) { + tempXVerts[0] = uvSliced[1].u; + tempXVerts[1] = uvSliced[1].u + (uvSliced[2].u - uvSliced[1].u) * coefu; + tempXVerts[2] = uvSliced[1].u; + } else if (xindex === col - 1) { + tempXVerts[0] = uvSliced[2].u; + tempXVerts[1] = uvSliced[3].u; + tempXVerts[2] = uvSliced[2].u; + } + if (0 === yindex) { + tempYVerts[0] = uvSliced[0].v; + tempYVerts[1] = uvSliced[0].v; + tempYVerts[2] = uvSliced[4].v + (uvSliced[8].v - uvSliced[4].v) * coefv; + } else if (yindex < row - 1) { + tempYVerts[0] = uvSliced[4].v; + tempYVerts[1] = uvSliced[4].v; + tempYVerts[2] = uvSliced[4].v + (uvSliced[8].v - uvSliced[4].v) * coefv; + } else if (yindex === row - 1) { + tempYVerts[0] = uvSliced[8].v; + tempYVerts[1] = uvSliced[8].v; + tempYVerts[2] = uvSliced[12].v; + } + tempXVerts[3] = tempXVerts[1]; + tempYVerts[3] = tempYVerts[2]; + } + verts[uvOffset] = tempXVerts[0]; + verts[uvOffset + 1] = tempYVerts[0]; + uvOffset += floatsPerVert; + verts[uvOffset] = tempXVerts[1]; + verts[uvOffset + 1] = tempYVerts[1]; + uvOffset += floatsPerVert; + verts[uvOffset] = tempXVerts[2]; + verts[uvOffset + 1] = tempYVerts[2]; + uvOffset += floatsPerVert; + verts[uvOffset] = tempXVerts[3]; + verts[uvOffset + 1] = tempYVerts[3]; + uvOffset += floatsPerVert; + } + } + }; + return TiledAssembler; + })(_assembler2d["default"]); + exports["default"] = TiledAssembler; + module.exports = exports["default"]; + }), { + "../../../../assembler-2d": 147 + } ], + 183: [ (function(require, module, exports) { + "use strict"; + var _assembler = _interopRequireDefault(require("../../../assembler")); + var _CCSprite = require("../../../../components/CCSprite"); + var _simple = _interopRequireDefault(require("./2d/simple")); + var _sliced = _interopRequireDefault(require("./2d/sliced")); + var _tiled = _interopRequireDefault(require("./2d/tiled")); + var _radialFilled = _interopRequireDefault(require("./2d/radial-filled")); + var _barFilled = _interopRequireDefault(require("./2d/bar-filled")); + var _mesh = _interopRequireDefault(require("./2d/mesh")); + var _simple2 = _interopRequireDefault(require("./3d/simple")); + var _sliced2 = _interopRequireDefault(require("./3d/sliced")); + var _tiled2 = _interopRequireDefault(require("./3d/tiled")); + var _radialFilled2 = _interopRequireDefault(require("./3d/radial-filled")); + var _barFilled2 = _interopRequireDefault(require("./3d/bar-filled")); + var _mesh2 = _interopRequireDefault(require("./3d/mesh")); + var _simple3 = _interopRequireDefault(require("./2d-multi/simple")); + var _sliced3 = _interopRequireDefault(require("./2d-multi/sliced")); + var _tiled3 = _interopRequireDefault(require("./2d-multi/tiled")); + var _radialFilled3 = _interopRequireDefault(require("./2d-multi/radial-filled")); + var _barFilled3 = _interopRequireDefault(require("./2d-multi/bar-filled")); + var _mesh3 = _interopRequireDefault(require("./2d-multi/mesh")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var ctor = { + getConstructor: function getConstructor(sprite) { + var is3DNode = sprite.node.is3DNode; + var material = sprite.getMaterials()[0]; + var isMultiMaterial = material && material.material.isMultiSupport(); + var ctor = is3DNode ? _simple2["default"] : isMultiMaterial ? _simple3["default"] : _simple["default"]; + switch (sprite.type) { + case _CCSprite.Type.SLICED: + ctor = is3DNode ? _sliced2["default"] : isMultiMaterial ? _sliced3["default"] : _sliced["default"]; + break; + + case _CCSprite.Type.TILED: + ctor = is3DNode ? _tiled2["default"] : isMultiMaterial ? _tiled3["default"] : _tiled["default"]; + break; + + case _CCSprite.Type.FILLED: + ctor = sprite._fillType === _CCSprite.FillType.RADIAL ? is3DNode ? _radialFilled2["default"] : isMultiMaterial ? _radialFilled3["default"] : _radialFilled["default"] : is3DNode ? _barFilled2["default"] : isMultiMaterial ? _barFilled3["default"] : _barFilled["default"]; + break; + + case _CCSprite.Type.MESH: + ctor = is3DNode ? _mesh2["default"] : isMultiMaterial ? _mesh3["default"] : _mesh["default"]; + } + return ctor; + }, + Simple: _simple["default"], + Sliced: _sliced["default"], + Tiled: _tiled["default"], + RadialFilled: _radialFilled["default"], + BarFilled: _barFilled["default"], + Mesh: _mesh["default"], + Simple3D: _simple2["default"], + Sliced3D: _sliced2["default"], + Tiled3D: _tiled2["default"], + RadialFilled3D: _radialFilled2["default"], + BarFilled3D: _barFilled2["default"], + Mesh3D: _mesh2["default"], + SimpleMulti: _simple3["default"], + SlicedMulti: _sliced3["default"], + TiledMulti: _tiled3["default"], + RadialFilledMulti: _radialFilled3["default"], + BarFilledMulti: _barFilled3["default"], + MeshMulti: _mesh3["default"] + }; + _assembler["default"].register(cc.Sprite, ctor); + }), { + "../../../../components/CCSprite": 101, + "../../../assembler": 149, + "./2d-multi/bar-filled": 171, + "./2d-multi/mesh": 172, + "./2d-multi/radial-filled": 173, + "./2d-multi/simple": 174, + "./2d-multi/sliced": 175, + "./2d-multi/tiled": 176, + "./2d/bar-filled": 177, + "./2d/mesh": 178, + "./2d/radial-filled": 179, + "./2d/simple": 180, + "./2d/sliced": 181, + "./2d/tiled": 182, + "./3d/bar-filled": void 0, + "./3d/mesh": void 0, + "./3d/radial-filled": void 0, + "./3d/simple": void 0, + "./3d/sliced": void 0, + "./3d/tiled": void 0 + } ], + 184: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var FlexBuffer = (function() { + function FlexBuffer(handler, index, verticesCount, indicesCount, vfmt) { + this._handler = handler; + this._index = index; + this._vfmt = vfmt; + this._verticesBytes = vfmt._bytes; + this._initVerticesCount = verticesCount; + this._initIndicesCount = indicesCount; + this.reset(); + } + var _proto = FlexBuffer.prototype; + _proto._reallocVData = function _reallocVData(floatsCount, oldData) { + this.vData = new Float32Array(floatsCount); + this.uintVData = new Uint32Array(this.vData.buffer); + oldData && this.vData.set(oldData); + this._handler.updateMesh(this._index, this.vData, this.iData); + }; + _proto._reallocIData = function _reallocIData(indicesCount, oldData) { + this.iData = new Uint16Array(indicesCount); + oldData && this.iData.set(oldData); + this._handler.updateMesh(this._index, this.vData, this.iData); + }; + _proto.reserve = function reserve(verticesCount, indicesCount) { + var floatsCount = verticesCount * this._verticesBytes >> 2; + var newFloatsCount = this.vData.length; + var realloced = false; + if (floatsCount > newFloatsCount) { + while (newFloatsCount < floatsCount) newFloatsCount *= 2; + this._reallocVData(newFloatsCount, this.vData); + realloced = true; + } + var newIndicesCount = this.iData.length; + if (indicesCount > newIndicesCount) { + while (newIndicesCount < indicesCount) newIndicesCount *= 2; + this._reallocIData(indicesCount, this.iData); + realloced = true; + } + return realloced; + }; + _proto.used = function used(verticesCount, indicesCount) { + this.usedVertices = verticesCount; + this.usedIndices = indicesCount; + this.usedVerticesFloats = verticesCount * this._verticesBytes >> 2; + this._handler.updateMeshRange(verticesCount, indicesCount); + }; + _proto.reset = function reset() { + var floatsCount = this._initVerticesCount * this._verticesBytes >> 2; + this._reallocVData(floatsCount); + this._reallocIData(this._initIndicesCount); + this.usedVertices = 0; + this.usedVerticesFloats = 0; + this.usedIndices = 0; + }; + return FlexBuffer; + })(); + exports["default"] = FlexBuffer; + cc.FlexBuffer = FlexBuffer; + module.exports = exports["default"]; + }), {} ], + 185: [ (function(require, module, exports) { + "use strict"; + var _gfx = _interopRequireDefault(require("../../../renderer/gfx")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var FIX_IOS14_BUFFER = (cc.sys.os === cc.sys.OS_IOS || cc.sys.os === cc.sys.OS_OSX) && cc.sys.isBrowser && /(OS 1[4-9])|(Version\/1[4-9])/.test(window.navigator.userAgent); + var MeshBuffer = cc.Class({ + name: "cc.MeshBuffer", + ctor: function ctor(batcher, vertexFormat) { + this.init(batcher, vertexFormat); + }, + init: function init(batcher, vertexFormat) { + this.byteOffset = 0; + this.indiceOffset = 0; + this.vertexOffset = 0; + this.indiceStart = 0; + this._dirty = false; + this._vertexFormat = vertexFormat; + this._vertexBytes = this._vertexFormat._bytes; + this._arrOffset = 0; + this._vbArr = []; + this._vb = new _gfx["default"].VertexBuffer(batcher._device, vertexFormat, _gfx["default"].USAGE_DYNAMIC, new ArrayBuffer(), 0); + this._vbArr[0] = this._vb; + this._ibArr = []; + this._ib = new _gfx["default"].IndexBuffer(batcher._device, _gfx["default"].INDEX_FMT_UINT16, _gfx["default"].USAGE_STATIC, new ArrayBuffer(), 0); + this._ibArr[0] = this._ib; + this._vData = null; + this._uintVData = null; + this._iData = null; + this._batcher = batcher; + this._initVDataCount = 256 * vertexFormat._bytes; + this._initIDataCount = 1536; + this._offsetInfo = { + byteOffset: 0, + vertexOffset: 0, + indiceOffset: 0 + }; + this._reallocBuffer(); + }, + uploadData: function uploadData() { + if (0 === this.byteOffset || !this._dirty) return; + var vertexsData = new Float32Array(this._vData.buffer, 0, this.byteOffset >> 2); + var indicesData = new Uint16Array(this._iData.buffer, 0, this.indiceOffset); + var vb = this._vb; + vb.update(0, vertexsData); + var ib = this._ib; + ib.update(0, indicesData); + this._dirty = false; + }, + switchBuffer: function switchBuffer() { + var offset = ++this._arrOffset; + this.byteOffset = 0; + this.vertexOffset = 0; + this.indiceOffset = 0; + this.indiceStart = 0; + if (offset < this._vbArr.length) { + this._vb = this._vbArr[offset]; + this._ib = this._ibArr[offset]; + } else { + this._vb = new _gfx["default"].VertexBuffer(this._batcher._device, this._vertexFormat, _gfx["default"].USAGE_DYNAMIC, new ArrayBuffer(), 0); + this._vbArr[offset] = this._vb; + this._ib = new _gfx["default"].IndexBuffer(this._batcher._device, _gfx["default"].INDEX_FMT_UINT16, _gfx["default"].USAGE_STATIC, new ArrayBuffer(), 0); + this._ibArr[offset] = this._ib; + } + }, + checkAndSwitchBuffer: function checkAndSwitchBuffer(vertexCount) { + if (this.vertexOffset + vertexCount > 65535) { + this.uploadData(); + this._batcher._flush(); + this.switchBuffer(); + } + }, + requestStatic: function requestStatic(vertexCount, indiceCount) { + this.checkAndSwitchBuffer(vertexCount); + var byteOffset = this.byteOffset + vertexCount * this._vertexBytes; + var indiceOffset = this.indiceOffset + indiceCount; + var byteLength = this._vData.byteLength; + var indiceLength = this._iData.length; + if (byteOffset > byteLength || indiceOffset > indiceLength) { + while (byteLength < byteOffset || indiceLength < indiceOffset) { + this._initVDataCount *= 2; + this._initIDataCount *= 2; + byteLength = 4 * this._initVDataCount; + indiceLength = this._initIDataCount; + } + this._reallocBuffer(); + } + this._updateOffset(vertexCount, indiceCount, byteOffset); + }, + _updateOffset: function _updateOffset(vertexCount, indiceCount, byteOffset) { + var offsetInfo = this._offsetInfo; + offsetInfo.vertexOffset = this.vertexOffset; + this.vertexOffset += vertexCount; + offsetInfo.indiceOffset = this.indiceOffset; + this.indiceOffset += indiceCount; + offsetInfo.byteOffset = this.byteOffset; + this.byteOffset = byteOffset; + this._dirty = true; + }, + request: function request(vertexCount, indiceCount) { + if (this._batcher._buffer !== this) { + this._batcher._flush(); + this._batcher._buffer = this; + } + this.requestStatic(vertexCount, indiceCount); + return this._offsetInfo; + }, + requestForSpine: function requestForSpine(vertexCount, indiceCount) { + if (this._batcher._buffer !== this) { + this._batcher._flush(); + this._batcher._buffer = this; + } + this.requestStaticForSpine(vertexCount, indiceCount); + return this._offsetInfo; + }, + requestStaticForSpine: function requestStaticForSpine(vertexCount, indiceCount) { + this.checkAndSwitchBuffer(vertexCount); + var byteOffset = this.byteOffset + vertexCount * this._vertexBytes; + var indiceOffset = this.indiceOffset + indiceCount; + var byteLength = this._vData.byteLength; + var indiceLength = this._iData.length; + if (byteOffset > byteLength || indiceOffset > indiceLength) { + while (byteLength < byteOffset || indiceLength < indiceOffset) { + this._initVDataCount *= 2; + this._initIDataCount *= 2; + byteLength = 4 * this._initVDataCount; + indiceLength = this._initIDataCount; + } + this._reallocBuffer(); + } + var offsetInfo = this._offsetInfo; + offsetInfo.vertexOffset = this.vertexOffset; + offsetInfo.indiceOffset = this.indiceOffset; + offsetInfo.byteOffset = this.byteOffset; + }, + adjustForSpine: function adjustForSpine(vertexCount, indiceCount) { + this.vertexOffset += vertexCount; + this.indiceOffset += indiceCount; + this.byteOffset = this.byteOffset + vertexCount * this._vertexBytes; + this._dirty = true; + }, + _reallocBuffer: function _reallocBuffer() { + this._reallocVData(true); + this._reallocIData(true); + }, + _reallocVData: function _reallocVData(copyOldData) { + var oldVData; + this._vData && (oldVData = new Uint8Array(this._vData.buffer)); + this._vData = new Float32Array(this._initVDataCount); + this._uintVData = new Uint32Array(this._vData.buffer); + var newData = new Uint8Array(this._uintVData.buffer); + if (oldVData && copyOldData) for (var i = 0, l = oldVData.length; i < l; i++) newData[i] = oldVData[i]; + }, + _reallocIData: function _reallocIData(copyOldData) { + var oldIData = this._iData; + this._iData = new Uint16Array(this._initIDataCount); + if (oldIData && copyOldData) { + var iData = this._iData; + for (var i = 0, l = oldIData.length; i < l; i++) iData[i] = oldIData[i]; + } + }, + reset: function reset() { + this._arrOffset = 0; + this._vb = this._vbArr[0]; + this._ib = this._ibArr[0]; + this.byteOffset = 0; + this.indiceOffset = 0; + this.vertexOffset = 0; + this.indiceStart = 0; + this._dirty = false; + }, + destroy: function destroy() { + this.reset(); + for (var i = 0; i < this._vbArr.length; i++) { + var vb = this._vbArr[i]; + vb.destroy(); + } + this._vbArr = null; + for (var _i = 0; _i < this._ibArr.length; _i++) { + var ib = this._ibArr[_i]; + ib.destroy(); + } + this._ibArr = null; + this._ib = null; + this._vb = null; + }, + forwardIndiceStartToOffset: function forwardIndiceStartToOffset() { + this.indiceStart = this.indiceOffset; + } + }); + if (FIX_IOS14_BUFFER) { + MeshBuffer.prototype.checkAndSwitchBuffer = function(vertexCount) { + if (this.vertexOffset + vertexCount > 65535) { + this.uploadData(); + this._batcher._flush(); + } + }; + MeshBuffer.prototype.forwardIndiceStartToOffset = function() { + this.uploadData(); + this.switchBuffer(); + }; + } + cc.MeshBuffer = module.exports = MeshBuffer; + }), { + "../../../renderer/gfx": 247 + } ], + 186: [ (function(require, module, exports) { + "use strict"; + var _inputAssembler = _interopRequireDefault(require("../../../renderer/core/input-assembler")); + var _recyclePool = _interopRequireDefault(require("../../../renderer/memop/recycle-pool")); + var _model = _interopRequireDefault(require("../../../renderer/scene/model")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var _require = require("./vertex-format"), vfmtPosUvColor = _require.vfmtPosUvColor, vfmt3D = _require.vfmt3D; + var QuadBuffer = require("./quad-buffer"); + var MeshBuffer = require("./mesh-buffer"); + var SpineBuffer = require("./spine-buffer"); + var Material = require("../../assets/material/CCMaterial"); + var idGenerater = new (require("../../platform/id-generater"))("VertextFormat"); + var _buffers = {}; + var empty_material = new Material(); + var empty_ia = new _inputAssembler["default"](); + empty_ia._count = 0; + var ModelBatcher = function ModelBatcher(device, renderScene) { + this._renderScene = renderScene; + this._device = device; + this.walking = false; + this.material = empty_material; + this.cullingMask = 1; + this._iaPool = new _recyclePool["default"](function() { + return new _inputAssembler["default"](); + }, 16); + this._modelPool = new _recyclePool["default"](function() { + return new _model["default"](); + }, 16); + this._quadBuffer = this.getBuffer("quad", vfmtPosUvColor); + this._meshBuffer = this.getBuffer("mesh", vfmtPosUvColor); + this._quadBuffer3D = this.getBuffer("quad", vfmt3D); + this._meshBuffer3D = this.getBuffer("mesh", vfmt3D); + this._buffer = this._meshBuffer; + this._batchedModels = []; + this._dummyNode = new cc.Node(); + this._sortKey = 0; + this.node = this._dummyNode; + this.parentOpacity = 1; + this.parentOpacityDirty = 0; + this.worldMatDirty = 0; + }; + ModelBatcher.prototype = { + constructor: ModelBatcher, + reset: function reset() { + this._iaPool.reset(); + var scene = this._renderScene; + var models = this._batchedModels; + for (var i = 0; i < models.length; ++i) { + models[i].setInputAssembler(null); + models[i].setEffect(null); + scene.removeModel(models[i]); + } + this._modelPool.reset(); + models.length = 0; + this._sortKey = 0; + for (var key in _buffers) _buffers[key].reset(); + this._buffer = this._meshBuffer; + this.node = this._dummyNode; + this.material = empty_material; + this.cullingMask = 1; + this.parentOpacity = 1; + this.parentOpacityDirty = 0; + this.worldMatDirty = 0; + }, + _flushMaterial: function _flushMaterial(material) { + if (!material) return; + this.material = material; + var effect = material.effect; + if (!effect) return; + var model = this._modelPool.add(); + this._batchedModels.push(model); + model.sortKey = this._sortKey++; + model._cullingMask = this.cullingMask; + model.setNode(this.node); + model.setEffect(effect, null); + model.setInputAssembler(empty_ia); + this._renderScene.addModel(model); + }, + _flush: function _flush() { + var material = this.material, buffer = this._buffer, indiceCount = buffer.indiceOffset - buffer.indiceStart; + if (!this.walking || !material || indiceCount <= 0) return; + var effect = material.effect; + if (!effect) return; + var ia = this._iaPool.add(); + ia._vertexBuffer = buffer._vb; + ia._indexBuffer = buffer._ib; + ia._start = buffer.indiceStart; + ia._count = indiceCount; + var model = this._modelPool.add(); + this._batchedModels.push(model); + model.sortKey = this._sortKey++; + model._cullingMask = this.cullingMask; + model.setNode(this.node); + model.setEffect(effect); + model.setInputAssembler(ia); + this._renderScene.addModel(model); + buffer.forwardIndiceStartToOffset(); + }, + _flushIA: function _flushIA(ia) { + if (!ia) return; + var material = this.material; + var effect = material.effect; + if (!effect) return; + var model = this._modelPool.add(); + this._batchedModels.push(model); + model.sortKey = this._sortKey++; + model._cullingMask = this.cullingMask; + model.setNode(this.node); + model.setEffect(effect); + model.setInputAssembler(ia); + this._renderScene.addModel(model); + }, + terminate: function terminate() { + cc.dynamicAtlasManager && cc.dynamicAtlasManager.enabled && cc.dynamicAtlasManager.update(); + this._flush(); + for (var key in _buffers) _buffers[key].uploadData(); + this.walking = false; + }, + getBuffer: function getBuffer(type, vertextFormat) { + var key = type + vertextFormat.getHash(); + var buffer = _buffers[key]; + if (!buffer) { + if ("mesh" === type) buffer = new MeshBuffer(this, vertextFormat); else if ("quad" === type) buffer = new QuadBuffer(this, vertextFormat); else { + if ("spine" !== type) { + cc.error("Not support buffer type [" + type + "]"); + return null; + } + buffer = new SpineBuffer(this, vertextFormat); + } + _buffers[key] = buffer; + } + return buffer; + } + }; + module.exports = ModelBatcher; + }), { + "../../../renderer/core/input-assembler": 237, + "../../../renderer/memop/recycle-pool": 262, + "../../../renderer/scene/model": 268, + "../../assets/material/CCMaterial": 75, + "../../platform/id-generater": 138, + "./mesh-buffer": 185, + "./quad-buffer": 187, + "./spine-buffer": 189, + "./vertex-format": 190 + } ], + 187: [ (function(require, module, exports) { + "use strict"; + var MeshBuffer = require("./mesh-buffer"); + var QuadBuffer = cc.Class({ + name: "cc.QuadBuffer", + extends: MeshBuffer, + _fillQuadBuffer: function _fillQuadBuffer() { + var count = this._initIDataCount / 6; + var buffer = this._iData; + for (var i = 0, idx = 0; i < count; i++) { + var vertextID = 4 * i; + buffer[idx++] = vertextID; + buffer[idx++] = vertextID + 1; + buffer[idx++] = vertextID + 2; + buffer[idx++] = vertextID + 1; + buffer[idx++] = vertextID + 3; + buffer[idx++] = vertextID + 2; + } + var indicesData = new Uint16Array(this._iData.buffer, 0, 6 * count); + this._ib.update(0, indicesData); + }, + uploadData: function uploadData() { + if (0 === this.byteOffset || !this._dirty) return; + var vertexsData = new Float32Array(this._vData.buffer, 0, this.byteOffset >> 2); + this._vb.update(0, vertexsData); + this._dirty = false; + }, + switchBuffer: function switchBuffer() { + this._super(); + var indicesData = new Uint16Array(this._iData.buffer, 0, this._initIDataCount); + this._ib.update(0, indicesData); + }, + _reallocBuffer: function _reallocBuffer() { + this._reallocVData(true); + this._reallocIData(); + this._fillQuadBuffer(); + } + }); + cc.QuadBuffer = module.exports = QuadBuffer; + }), { + "./mesh-buffer": 185 + } ], + 188: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = RenderData; + var _flexBuffer = _interopRequireDefault(require("./flex-buffer")); + var _vertexFormat = require("./vertex-format"); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function RenderData() { + this.vDatas = []; + this.uintVDatas = []; + this.iDatas = []; + this.meshCount = 0; + this._infos = null; + this._flexBuffer = null; + } + cc.js.mixin(RenderData.prototype, { + init: function init(assembler) {}, + clear: function clear() { + this.vDatas.length = 0; + this.iDatas.length = 0; + this.uintVDatas.length = 0; + this.meshCount = 0; + this._infos = null; + this._flexBuffer && this._flexBuffer.reset(); + }, + updateMesh: function updateMesh(index, vertices, indices) { + this.vDatas[index] = vertices; + this.uintVDatas[index] = new Uint32Array(vertices.buffer, 0, vertices.length); + this.iDatas[index] = indices; + this.meshCount = this.vDatas.length; + }, + updateMeshRange: function updateMeshRange(verticesCount, indicesCount) {}, + createData: function createData(index, verticesFloats, indicesCount) { + var vertices = new Float32Array(verticesFloats); + var indices = new Uint16Array(indicesCount); + this.updateMesh(index, vertices, indices); + }, + createQuadData: function createQuadData(index, verticesFloats, indicesCount) { + this.createData(index, verticesFloats, indicesCount); + this.initQuadIndices(this.iDatas[index]); + }, + createFlexData: function createFlexData(index, verticesFloats, indicesCount, vfmt) { + vfmt = vfmt || _vertexFormat.vfmtPosUvColor; + this._flexBuffer = new _flexBuffer["default"](this, index, verticesFloats, indicesCount, vfmt); + }, + initQuadIndices: function initQuadIndices(indices) { + var count = indices.length / 6; + for (var i = 0, idx = 0; i < count; i++) { + var vertextID = 4 * i; + indices[idx++] = vertextID; + indices[idx++] = vertextID + 1; + indices[idx++] = vertextID + 2; + indices[idx++] = vertextID + 1; + indices[idx++] = vertextID + 3; + indices[idx++] = vertextID + 2; + } + } + }); + cc.RenderData = RenderData; + module.exports = exports["default"]; + }), { + "./flex-buffer": 184, + "./vertex-format": 190 + } ], + 189: [ (function(require, module, exports) { + "use strict"; + var SpineBuffer = cc.Class({ + name: "cc.SpineBuffer", + extends: require("./mesh-buffer"), + requestStatic: function requestStatic(vertexCount, indiceCount) { + this.checkAndSwitchBuffer(vertexCount); + var byteOffset = this.byteOffset + vertexCount * this._vertexBytes; + var indiceOffset = this.indiceOffset + indiceCount; + var byteLength = this._vData.byteLength; + var indiceLength = this._iData.length; + if (byteOffset > byteLength || indiceOffset > indiceLength) { + while (byteLength < byteOffset || indiceLength < indiceOffset) { + this._initVDataCount *= 2; + this._initIDataCount *= 2; + byteLength = 4 * this._initVDataCount; + indiceLength = this._initIDataCount; + } + this._reallocBuffer(); + } + var offsetInfo = this._offsetInfo; + offsetInfo.vertexOffset = this.vertexOffset; + offsetInfo.indiceOffset = this.indiceOffset; + offsetInfo.byteOffset = this.byteOffset; + }, + adjust: function adjust(vertexCount, indiceCount) { + this.vertexOffset += vertexCount; + this.indiceOffset += indiceCount; + this.byteOffset = this.byteOffset + vertexCount * this._vertexBytes; + this._dirty = true; + } + }); + cc.SpineBuffer = module.exports = SpineBuffer; + }), { + "./mesh-buffer": 185 + } ], + 190: [ (function(require, module, exports) { + "use strict"; + var _gfx = _interopRequireDefault(require("../../../renderer/gfx")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var vfmt3D = new _gfx["default"].VertexFormat([ { + name: _gfx["default"].ATTR_POSITION, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 3 + }, { + name: _gfx["default"].ATTR_UV0, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 2 + }, { + name: _gfx["default"].ATTR_COLOR, + type: _gfx["default"].ATTR_TYPE_UINT8, + num: 4, + normalize: true + } ]); + vfmt3D.name = "vfmt3D"; + _gfx["default"].VertexFormat.XYZ_UV_Color = vfmt3D; + var vfmtPosUvColor = new _gfx["default"].VertexFormat([ { + name: _gfx["default"].ATTR_POSITION, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 2 + }, { + name: _gfx["default"].ATTR_UV0, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 2 + }, { + name: _gfx["default"].ATTR_COLOR, + type: _gfx["default"].ATTR_TYPE_UINT8, + num: 4, + normalize: true + } ]); + vfmtPosUvColor.name = "vfmtPosUvColor"; + _gfx["default"].VertexFormat.XY_UV_Color = vfmtPosUvColor; + var vfmtPosUvColorTexId = new _gfx["default"].VertexFormat([ { + name: _gfx["default"].ATTR_POSITION, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 2 + }, { + name: _gfx["default"].ATTR_UV0, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 2 + }, { + name: _gfx["default"].ATTR_COLOR, + type: _gfx["default"].ATTR_TYPE_UINT8, + num: 4, + normalize: true + }, { + name: _gfx["default"].ATTR_TEX_ID, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 1 + } ]); + vfmtPosUvColorTexId.name = "vfmtPosUvColorTexId"; + _gfx["default"].VertexFormat.XY_UV_Color_TexId = vfmtPosUvColorTexId; + var vfmtPosUvTwoColor = new _gfx["default"].VertexFormat([ { + name: _gfx["default"].ATTR_POSITION, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 2 + }, { + name: _gfx["default"].ATTR_UV0, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 2 + }, { + name: _gfx["default"].ATTR_COLOR, + type: _gfx["default"].ATTR_TYPE_UINT8, + num: 4, + normalize: true + }, { + name: _gfx["default"].ATTR_COLOR0, + type: _gfx["default"].ATTR_TYPE_UINT8, + num: 4, + normalize: true + } ]); + vfmtPosUvTwoColor.name = "vfmtPosUvTwoColor"; + _gfx["default"].VertexFormat.XY_UV_Two_Color = vfmtPosUvTwoColor; + var vfmtPosUv = new _gfx["default"].VertexFormat([ { + name: _gfx["default"].ATTR_POSITION, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 2 + }, { + name: _gfx["default"].ATTR_UV0, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 2 + } ]); + vfmtPosUv.name = "vfmtPosUv"; + _gfx["default"].VertexFormat.XY_UV = vfmtPosUv; + var vfmtPosColor = new _gfx["default"].VertexFormat([ { + name: _gfx["default"].ATTR_POSITION, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 2 + }, { + name: _gfx["default"].ATTR_COLOR, + type: _gfx["default"].ATTR_TYPE_UINT8, + num: 4, + normalize: true + } ]); + vfmtPosColor.name = "vfmtPosColor"; + _gfx["default"].VertexFormat.XY_Color = vfmtPosColor; + var vfmtPos = new _gfx["default"].VertexFormat([ { + name: _gfx["default"].ATTR_POSITION, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 2 + } ]); + vfmtPos.name = "vfmtPos"; + _gfx["default"].VertexFormat.XY = vfmtPos; + module.exports = { + vfmt3D: vfmt3D, + vfmtPosUvColor: vfmtPosUvColor, + vfmtPosUvTwoColor: vfmtPosUvTwoColor, + vfmtPosUv: vfmtPosUv, + vfmtPosColor: vfmtPosColor, + vfmtPos: vfmtPos, + vfmtPosUvColorTexId: vfmtPosUvColorTexId + }; + }), { + "../../../renderer/gfx": 247 + } ], + 191: [ (function(require, module, exports) { + "use strict"; + require("./sp"); + require("./multi-handler"); + require("./multi-batcher"); + }), { + "./multi-batcher": 192, + "./multi-handler": 193, + "./sp": 194 + } ], + 192: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.MultiBatcher = void 0; + var _multiHandler = require("./multi-handler"); + function _createForOfIteratorHelperLoose(o, allowArrayLike) { + var it = "undefined" !== typeof Symbol && o[Symbol.iterator] || o["@@iterator"]; + if (it) return (it = it.call(o)).next.bind(it); + if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && "number" === typeof o.length) { + it && (o = it); + var i = 0; + return function() { + if (i >= o.length) return { + done: true + }; + return { + done: false, + value: o[i++] + }; + }; + } + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if ("string" === typeof o) return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + "Object" === n && o.constructor && (n = o.constructor.name); + if ("Map" === n || "Set" === n) return Array.from(o); + if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); + } + function _arrayLikeToArray(arr, len) { + (null == len || len > arr.length) && (len = arr.length); + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + return arr2; + } + var MultiBatcher = (function() { + function MultiBatcher() { + this.handlers = []; + this.nextHandler = void 0; + } + var _proto = MultiBatcher.prototype; + _proto.init = function init() { + var handler = new _multiHandler.MultiHandler(); + this.handlers.push(handler); + this.nextHandler = handler; + }; + _proto.requsetMaterial = function requsetMaterial(texture) { + if (!texture._multiMaterial) { + var handler = this.nextHandler; + var index = handler.getEmptyIndex(); + if (-1 === index) { + for (var _iterator = _createForOfIteratorHelperLoose(this.handlers), _step; !(_step = _iterator()).done; ) { + var _handler = _step.value; + index = _handler.getEmptyIndex(); + if (-1 !== index) { + handler = _handler; + this.nextHandler = handler; + break; + } + } + if (-1 === index) { + handler = new _multiHandler.MultiHandler(); + this.handlers.push(handler); + this.nextHandler = handler; + index = 0; + } + } + texture.linkMaterial(handler.material, index); + } + return texture._multiMaterial; + }; + _proto.reset = function reset() { + this.handlers.length = 0; + }; + return MultiBatcher; + })(); + exports.MultiBatcher = MultiBatcher; + cc.sp.multiBatcher = new MultiBatcher(); + cc.sp.MultiBatcher = MultiBatcher; + }), { + "./multi-handler": 193 + } ], + 193: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.MultiHandler = void 0; + var MultiHandler = (function() { + function MultiHandler(material) { + this.material = void 0; + this.textures = []; + this.hasEmptySlot = false; + if (material) this.material = material; else { + this.material = cc.Material.create(cc.sp.multi2dSpriteEffectAsset); + this.material.name = "multi-2d-sprite"; + this.material.define("USE_TEXTURE", true); + this.material.define("USE_MULTI_TEXTURE", true); + } + this.material._multiHandler = this; + this.syncTextures(); + } + var _proto = MultiHandler.prototype; + _proto.syncTextures = function syncTextures() { + var effect = this.material["effect"]; + var properties = effect.passes[0]._properties; + this.textures[0] = properties.texture.value; + this.textures[1] = properties.texture2.value; + this.textures[2] = properties.texture3.value; + this.textures[3] = properties.texture4.value; + this.textures[4] = properties.texture5.value; + this.textures[5] = properties.texture6.value; + this.textures[6] = properties.texture7.value; + this.textures[7] = properties.texture8.value; + this.hasEmptySlot = true; + this.getEmptyIndex(); + }; + _proto.setTexture = function setTexture(index, texture) { + this.textures[index] = texture ? texture.getImpl() : null; + this.material.setProperty(cc.sp.propertyIndex2Name(index), texture); + null == texture && (this.hasEmptySlot = true); + }; + _proto.removeTexture = function removeTexture(texture) { + var index = this.getIndex(texture); + -1 !== index && this.setTexture(index, null); + }; + _proto.hasTexture = function hasTexture(texture) { + return -1 !== this.textures.indexOf(texture); + }; + _proto.getIndex = function getIndex(texture) { + return this.textures.indexOf(texture); + }; + _proto.getTexture = function getTexture(index) { + return this.textures[index]; + }; + _proto.getEmptyIndex = function getEmptyIndex() { + if (!this.hasEmptySlot) return -1; + var index = this.textures.indexOf(null); + if (-1 !== index) return index; + this.hasEmptySlot = false; + return -1; + }; + _proto.autoSetTexture = function autoSetTexture(texture) { + var index = this.getEmptyIndex(); + if (-1 === index) return -1; + this.setTexture(index, texture); + return index; + }; + return MultiHandler; + })(); + exports.MultiHandler = MultiHandler; + cc.sp.MultiHandler = MultiHandler; + }), {} ], + 194: [ (function(require, module, exports) { + "use strict"; + cc.sp = { + inited: false, + version: "1.0.0", + MAX_MULTITEXTURE_NUM: -1, + autoSwitchMaterial: true, + allowDynamicAtlas: true, + enableLabelRetina: true, + labelRetinaScale: 1, + charAtlasAutoBatchCount: 1, + charAtlasAutoResetBeforeSceneLoad: true, + multi2dSpriteEffectAsset: null, + i2nMap: [ "texture" ], + n2iMap: { + texture: 0 + }, + propertyIndex2Name: function propertyIndex2Name(index) { + return this.i2nMap[index]; + }, + propertyName2Index: function propertyName2Index(name) { + return this.n2iMap[name]; + } + }; + for (var i = 1; i < 8; i++) { + var name = "texture" + (i + 1); + cc.sp.i2nMap[i] = name; + cc.sp.n2iMap[name] = i; + } + }), {} ], + 195: [ (function(require, module, exports) { + "use strict"; + require("../platform/CCSys"); + var EXTNAME_RE = /(\.[^\.\/\?\\]*)(\?.*)?$/; + var DIRNAME_RE = /((.*)(\/|\\|\\\\))?(.*?\..*$)?/; + var NORMALIZE_RE = /[^\.\/]+\/\.\.\//; + cc.path = { + join: function join() { + var l = arguments.length; + var result = ""; + for (var i = 0; i < l; i++) result = (result + ("" === result ? "" : "/") + arguments[i]).replace(/(\/|\\\\)$/, ""); + return result; + }, + extname: function extname(pathStr) { + var temp = EXTNAME_RE.exec(pathStr); + return temp ? temp[1] : ""; + }, + mainFileName: function mainFileName(fileName) { + if (fileName) { + var idx = fileName.lastIndexOf("."); + if (-1 !== idx) return fileName.substring(0, idx); + } + return fileName; + }, + basename: function basename(pathStr, extname) { + var index = pathStr.indexOf("?"); + index > 0 && (pathStr = pathStr.substring(0, index)); + var reg = /(\/|\\)([^\/\\]+)$/g; + var result = reg.exec(pathStr.replace(/(\/|\\)$/, "")); + if (!result) return pathStr; + var baseName = result[2]; + if (extname && pathStr.substring(pathStr.length - extname.length).toLowerCase() === extname.toLowerCase()) return baseName.substring(0, baseName.length - extname.length); + return baseName; + }, + dirname: function dirname(pathStr) { + var temp = DIRNAME_RE.exec(pathStr); + return temp ? temp[2] : ""; + }, + changeExtname: function changeExtname(pathStr, extname) { + extname = extname || ""; + var index = pathStr.indexOf("?"); + var tempStr = ""; + if (index > 0) { + tempStr = pathStr.substring(index); + pathStr = pathStr.substring(0, index); + } + index = pathStr.lastIndexOf("."); + if (index < 0) return pathStr + extname + tempStr; + return pathStr.substring(0, index) + extname + tempStr; + }, + changeBasename: function changeBasename(pathStr, basename, isSameExt) { + if (0 === basename.indexOf(".")) return this.changeExtname(pathStr, basename); + var index = pathStr.indexOf("?"); + var tempStr = ""; + var ext = isSameExt ? this.extname(pathStr) : ""; + if (index > 0) { + tempStr = pathStr.substring(index); + pathStr = pathStr.substring(0, index); + } + index = pathStr.lastIndexOf("/"); + index = index <= 0 ? 0 : index + 1; + return pathStr.substring(0, index) + basename + ext + tempStr; + }, + _normalize: function _normalize(url) { + var oldUrl = url = String(url); + do { + oldUrl = url; + url = url.replace(NORMALIZE_RE, ""); + } while (oldUrl.length !== url.length); + return url; + }, + sep: cc.sys.os === cc.sys.OS_WINDOWS ? "\\" : "/", + stripSep: function stripSep(path) { + return path.replace(/[\/\\]$/, ""); + } + }; + module.exports = cc.path; + }), { + "../platform/CCSys": 130 + } ], + 196: [ (function(require, module, exports) { + "use strict"; + var AffineTransform = function AffineTransform(a, b, c, d, tx, ty) { + this.a = a; + this.b = b; + this.c = c; + this.d = d; + this.tx = tx; + this.ty = ty; + }; + AffineTransform.create = function(a, b, c, d, tx, ty) { + return { + a: a, + b: b, + c: c, + d: d, + tx: tx, + ty: ty + }; + }; + AffineTransform.identity = function() { + return { + a: 1, + b: 0, + c: 0, + d: 1, + tx: 0, + ty: 0 + }; + }; + AffineTransform.clone = function(t) { + return { + a: t.a, + b: t.b, + c: t.c, + d: t.d, + tx: t.tx, + ty: t.ty + }; + }; + AffineTransform.concat = function(out, t1, t2) { + var a = t1.a, b = t1.b, c = t1.c, d = t1.d, tx = t1.tx, ty = t1.ty; + out.a = a * t2.a + b * t2.c; + out.b = a * t2.b + b * t2.d; + out.c = c * t2.a + d * t2.c; + out.d = c * t2.b + d * t2.d; + out.tx = tx * t2.a + ty * t2.c + t2.tx; + out.ty = tx * t2.b + ty * t2.d + t2.ty; + return out; + }; + AffineTransform.invert = function(out, t) { + var a = t.a, b = t.b, c = t.c, d = t.d; + var determinant = 1 / (a * d - b * c); + var tx = t.tx, ty = t.ty; + out.a = determinant * d; + out.b = -determinant * b; + out.c = -determinant * c; + out.d = determinant * a; + out.tx = determinant * (c * ty - d * tx); + out.ty = determinant * (b * tx - a * ty); + return out; + }; + AffineTransform.fromMat4 = function(out, mat) { + var matm = mat.m; + out.a = matm[0]; + out.b = matm[1]; + out.c = matm[4]; + out.d = matm[5]; + out.tx = matm[12]; + out.ty = matm[13]; + return out; + }; + AffineTransform.transformVec2 = function(out, point, transOrY, t) { + var x, y; + if (void 0 === t) { + t = transOrY; + x = point.x; + y = point.y; + } else { + x = point; + y = transOrY; + } + out.x = t.a * x + t.c * y + t.tx; + out.y = t.b * x + t.d * y + t.ty; + return out; + }; + AffineTransform.transformSize = function(out, size, t) { + out.width = t.a * size.width + t.c * size.height; + out.height = t.b * size.width + t.d * size.height; + return out; + }; + AffineTransform.transformRect = function(out, rect, t) { + var ol = rect.x; + var ob = rect.y; + var or = ol + rect.width; + var ot = ob + rect.height; + var lbx = t.a * ol + t.c * ob + t.tx; + var lby = t.b * ol + t.d * ob + t.ty; + var rbx = t.a * or + t.c * ob + t.tx; + var rby = t.b * or + t.d * ob + t.ty; + var ltx = t.a * ol + t.c * ot + t.tx; + var lty = t.b * ol + t.d * ot + t.ty; + var rtx = t.a * or + t.c * ot + t.tx; + var rty = t.b * or + t.d * ot + t.ty; + var minX = Math.min(lbx, rbx, ltx, rtx); + var maxX = Math.max(lbx, rbx, ltx, rtx); + var minY = Math.min(lby, rby, lty, rty); + var maxY = Math.max(lby, rby, lty, rty); + out.x = minX; + out.y = minY; + out.width = maxX - minX; + out.height = maxY - minY; + return out; + }; + AffineTransform.transformObb = function(out_bl, out_tl, out_tr, out_br, rect, anAffineTransform) { + var x = rect.x; + var y = rect.y; + var width = rect.width; + var height = rect.height; + var tx = anAffineTransform.a * x + anAffineTransform.c * y + anAffineTransform.tx; + var ty = anAffineTransform.b * x + anAffineTransform.d * y + anAffineTransform.ty; + var xa = anAffineTransform.a * width; + var xb = anAffineTransform.b * width; + var yc = anAffineTransform.c * height; + var yd = anAffineTransform.d * height; + out_tl.x = tx; + out_tl.y = ty; + out_tr.x = xa + tx; + out_tr.y = xb + ty; + out_bl.x = yc + tx; + out_bl.y = yd + ty; + out_br.x = xa + yc + tx; + out_br.y = xb + yd + ty; + }; + cc.AffineTransform = module.exports = AffineTransform; + }), {} ], + 197: [ (function(require, module, exports) { + "use strict"; + var Flags = require("../platform/CCObject").Flags; + var misc = require("./misc"); + var js = require("../platform/js"); + var IdGenerater = require("../platform/id-generater"); + var eventManager = require("../event-manager"); + var RenderFlow = require("../renderer/render-flow"); + var Destroying = Flags.Destroying; + var DontDestroy = Flags.DontDestroy; + var Deactivating = Flags.Deactivating; + var CHILD_ADDED = "child-added"; + var CHILD_REMOVED = "child-removed"; + var idGenerater = new IdGenerater("Node"); + function getConstructor(typeOrClassName) { + if (!typeOrClassName) { + cc.errorID(3804); + return null; + } + if ("string" === typeof typeOrClassName) return js.getClassByName(typeOrClassName); + return typeOrClassName; + } + function findComponent(node, constructor) { + if (constructor._sealed) for (var i = 0; i < node._components.length; ++i) { + var comp = node._components[i]; + if (comp.constructor === constructor) return comp; + } else for (var _i = 0; _i < node._components.length; ++_i) { + var _comp = node._components[_i]; + if (_comp instanceof constructor) return _comp; + } + return null; + } + function findComponents(node, constructor, components) { + if (constructor._sealed) for (var i = 0; i < node._components.length; ++i) { + var comp = node._components[i]; + comp.constructor === constructor && components.push(comp); + } else for (var _i2 = 0; _i2 < node._components.length; ++_i2) { + var _comp2 = node._components[_i2]; + _comp2 instanceof constructor && components.push(_comp2); + } + } + function findChildComponent(children, constructor) { + for (var i = 0; i < children.length; ++i) { + var node = children[i]; + var comp = findComponent(node, constructor); + if (comp) return comp; + if (node._children.length > 0) { + comp = findChildComponent(node._children, constructor); + if (comp) return comp; + } + } + return null; + } + function findChildComponents(children, constructor, components) { + for (var i = 0; i < children.length; ++i) { + var node = children[i]; + findComponents(node, constructor, components); + node._children.length > 0 && findChildComponents(node._children, constructor, components); + } + } + var BaseNode = cc.Class({ + name: "cc._BaseNode", + extends: cc.Object, + properties: { + _parent: null, + _children: [], + _active: true, + _components: [], + _prefab: null, + _persistNode: { + get: function get() { + return (this._objFlags & DontDestroy) > 0; + }, + set: function set(value) { + value ? this._objFlags |= DontDestroy : this._objFlags &= ~DontDestroy; + } + }, + name: { + get: function get() { + return this._name; + }, + set: function set(value) { + false; + this._name = value; + false; + } + }, + uuid: { + get: function get() { + return this._id; + } + }, + children: { + get: function get() { + return this._children; + } + }, + childrenCount: { + get: function get() { + return this._children.length; + } + }, + active: { + get: function get() { + return this._active; + }, + set: function set(value) { + value = !!value; + if (this._active !== value) { + this._active = value; + var parent = this._parent; + if (parent) { + var couldActiveInScene = parent._activeInHierarchy; + couldActiveInScene && cc.director._nodeActivator.activateNode(this, value); + } + } + } + }, + activeInHierarchy: { + get: function get() { + return this._activeInHierarchy; + } + } + }, + ctor: function ctor(name) { + this._name = void 0 !== name ? name : "New Node"; + this._activeInHierarchy = false; + this._id = idGenerater.getNewId(); + cc.director._scheduler && cc.director._scheduler.enableForTarget(this); + this.__eventTargets = []; + }, + getParent: function getParent() { + return this._parent; + }, + setParent: function setParent(value) { + if (this._parent === value) return; + false; + var oldParent = this._parent; + (true, oldParent) && oldParent._objFlags & Deactivating && cc.errorID(3821); + this._parent = value || null; + this._onSetParent(value); + if (value) { + (true, value._objFlags & Deactivating) && cc.errorID(3821); + eventManager._setDirtyForNode(this); + value._children.push(this); + value.emit && value.emit(CHILD_ADDED, this); + value._renderFlag |= RenderFlow.FLAG_CHILDREN; + } + if (oldParent) { + if (!(oldParent._objFlags & Destroying)) { + var removeAt = oldParent._children.indexOf(this); + false; + oldParent._children.splice(removeAt, 1); + oldParent.emit && oldParent.emit(CHILD_REMOVED, this); + this._onHierarchyChanged(oldParent); + 0 === oldParent._children.length && (oldParent._renderFlag &= ~RenderFlow.FLAG_CHILDREN); + } + } else value && this._onHierarchyChanged(null); + }, + attr: function attr(attrs) { + js.mixin(this, attrs); + }, + getChildByUuid: function getChildByUuid(uuid) { + if (!uuid) { + cc.log("Invalid uuid"); + return null; + } + var locChildren = this._children; + for (var i = 0, len = locChildren.length; i < len; i++) if (locChildren[i]._id === uuid) return locChildren[i]; + return null; + }, + getChildByName: function getChildByName(name) { + if (!name) { + cc.log("Invalid name"); + return null; + } + var locChildren = this._children; + for (var i = 0, len = locChildren.length; i < len; i++) if (locChildren[i]._name === name) return locChildren[i]; + return null; + }, + addChild: function addChild(child) { + false; + cc.assertID(child, 1606); + cc.assertID(null === child._parent, 1605); + child.setParent(this); + }, + insertChild: function insertChild(child, siblingIndex) { + child.parent = this; + child.setSiblingIndex(siblingIndex); + }, + getSiblingIndex: function getSiblingIndex() { + return this._parent ? this._parent._children.indexOf(this) : 0; + }, + setSiblingIndex: function setSiblingIndex(index) { + if (!this._parent) return; + if (this._parent._objFlags & Deactivating) { + cc.errorID(3821); + return; + } + var siblings = this._parent._children; + index = -1 !== index ? index : siblings.length - 1; + var oldIndex = siblings.indexOf(this); + if (index !== oldIndex) { + siblings.splice(oldIndex, 1); + index < siblings.length ? siblings.splice(index, 0, this) : siblings.push(this); + this._onSiblingIndexChanged && this._onSiblingIndexChanged(index); + } + }, + walk: function walk(prefunc, postfunc) { + var BaseNode = cc._BaseNode; + var index = 1; + var children, child, curr, i, afterChildren; + var stack = BaseNode._stacks[BaseNode._stackId]; + if (!stack) { + stack = []; + BaseNode._stacks.push(stack); + } + BaseNode._stackId++; + stack.length = 0; + stack[0] = this; + var parent = null; + afterChildren = false; + while (index) { + index--; + curr = stack[index]; + if (!curr) continue; + !afterChildren && prefunc ? prefunc(curr) : afterChildren && postfunc && postfunc(curr); + stack[index] = null; + if (!afterChildren) { + if (curr._children.length > 0) { + parent = curr; + children = curr._children; + i = 0; + stack[index] = children[i]; + index++; + } else { + stack[index] = curr; + index++; + afterChildren = true; + } + continue; + } + if (parent === this._parent) break; + afterChildren = false; + if (children) { + i++; + if (children[i]) { + stack[index] = children[i]; + index++; + } else if (parent) { + stack[index] = parent; + index++; + afterChildren = true; + if (parent._parent) { + children = parent._parent._children; + i = children.indexOf(parent); + parent = parent._parent; + } else { + parent = null; + children = null; + } + if (i < 0) break; + } + } + } + stack.length = 0; + BaseNode._stackId--; + }, + cleanup: function cleanup() {}, + removeFromParent: function removeFromParent(cleanup) { + if (this._parent) { + void 0 === cleanup && (cleanup = true); + this._parent.removeChild(this, cleanup); + } + }, + removeChild: function removeChild(child, cleanup) { + if (this._children.indexOf(child) > -1) { + (cleanup || void 0 === cleanup) && child.cleanup(); + child.parent = null; + } + }, + removeAllChildren: function removeAllChildren(cleanup) { + var children = this._children; + void 0 === cleanup && (cleanup = true); + for (var i = children.length - 1; i >= 0; i--) { + var node = children[i]; + if (node) { + cleanup && node.cleanup(); + node.parent = null; + } + } + this._children.length = 0; + }, + isChildOf: function isChildOf(parent) { + var child = this; + do { + if (child === parent) return true; + child = child._parent; + } while (child); + return false; + }, + getComponent: function getComponent(typeOrClassName) { + var constructor = getConstructor(typeOrClassName); + if (constructor) return findComponent(this, constructor); + return null; + }, + getComponents: function getComponents(typeOrClassName) { + var constructor = getConstructor(typeOrClassName), components = []; + constructor && findComponents(this, constructor, components); + return components; + }, + getComponentInChildren: function getComponentInChildren(typeOrClassName) { + var constructor = getConstructor(typeOrClassName); + if (constructor) return findChildComponent(this._children, constructor); + return null; + }, + getComponentsInChildren: function getComponentsInChildren(typeOrClassName) { + var constructor = getConstructor(typeOrClassName), components = []; + if (constructor) { + findComponents(this, constructor, components); + findChildComponents(this._children, constructor, components); + } + return components; + }, + _checkMultipleComp: (false, false) && function(ctor) { + var existing = this.getComponent(ctor._disallowMultiple); + if (existing) { + existing.constructor === ctor ? cc.errorID(3805, js.getClassName(ctor), this._name) : cc.errorID(3806, js.getClassName(ctor), this._name, js.getClassName(existing)); + return false; + } + return true; + }, + addComponent: function addComponent(typeOrClassName) { + false; + var constructor; + if ("string" === typeof typeOrClassName) { + constructor = js.getClassByName(typeOrClassName); + if (!constructor) { + cc.errorID(3807, typeOrClassName); + cc._RFpeek() && cc.errorID(3808, typeOrClassName); + return null; + } + } else { + if (!typeOrClassName) { + cc.errorID(3804); + return null; + } + constructor = typeOrClassName; + } + if ("function" !== typeof constructor) { + cc.errorID(3809); + return null; + } + if (!js.isChildClassOf(constructor, cc.Component)) { + cc.errorID(3810); + return null; + } + if ((false, false) && constructor._disallowMultiple && !this._checkMultipleComp(constructor)) return null; + var ReqComp = constructor._requireComponent; + if (ReqComp && !this.getComponent(ReqComp)) { + var depended = this.addComponent(ReqComp); + if (!depended) return null; + } + var component = new constructor(); + component.node = this; + this._components.push(component); + (false, false) && cc.engine && this._id in cc.engine.attachedObjsForEditor && (cc.engine.attachedObjsForEditor[component._id] = component); + this._activeInHierarchy && cc.director._nodeActivator.activateComp(component); + return component; + }, + _addComponentAt: false, + removeComponent: function removeComponent(component) { + if (!component) { + cc.errorID(3813); + return; + } + component instanceof cc.Component || (component = this.getComponent(component)); + component && component.destroy(); + }, + _getDependComponent: false, + _removeComponent: function _removeComponent(component) { + if (!component) { + cc.errorID(3814); + return; + } + if (!(this._objFlags & Destroying)) { + var i = this._components.indexOf(component); + if (-1 !== i) { + this._components.splice(i, 1); + (false, false) && cc.engine && delete cc.engine.attachedObjsForEditor[component._id]; + } else component.node !== this && cc.errorID(3815); + } + }, + destroy: function destroy() { + cc.Object.prototype.destroy.call(this) && (this.active = false); + }, + destroyAllChildren: function destroyAllChildren() { + var children = this._children; + for (var i = 0; i < children.length; ++i) children[i].destroy(); + }, + _onSetParent: function _onSetParent(value) {}, + _onPostActivated: function _onPostActivated() {}, + _onBatchCreated: function _onBatchCreated(dontSyncChildPrefab) {}, + _onHierarchyChanged: function _onHierarchyChanged(oldParent) { + var newParent = this._parent; + if (this._persistNode && !(newParent instanceof cc.Scene)) { + cc.game.removePersistRootNode(this); + false; + } + var scene; + var inCurrentSceneBefore; + var inCurrentSceneNow; + var newPrefabRoot; + var myPrefabInfo; + var PrefabUtils; + false, false; + var shouldActiveNow = this._active && !!(newParent && newParent._activeInHierarchy); + this._activeInHierarchy !== shouldActiveNow && cc.director._nodeActivator.activateNode(this, shouldActiveNow); + }, + _instantiate: function _instantiate(cloned, isSyncedNode) { + cloned || (cloned = cc.instantiate._clone(this, this)); + var newPrefabInfo = cloned._prefab; + var PrefabUtils; + false; + var syncing; + false; + cloned._parent = null; + cloned._onBatchCreated(isSyncedNode); + return cloned; + }, + _registerIfAttached: (false, false) && function(register) { + var attachedObjsForEditor = cc.engine.attachedObjsForEditor; + if (register) { + attachedObjsForEditor[this._id] = this; + for (var i = 0; i < this._components.length; i++) { + var comp = this._components[i]; + attachedObjsForEditor[comp._id] = comp; + } + cc.engine.emit("node-attach-to-scene", this); + } else { + cc.engine.emit("node-detach-from-scene", this); + delete attachedObjsForEditor[this._id]; + for (var _i3 = 0; _i3 < this._components.length; _i3++) { + var _comp3 = this._components[_i3]; + delete attachedObjsForEditor[_comp3._id]; + } + } + var children = this._children; + for (var _i4 = 0, len = children.length; _i4 < len; ++_i4) { + var child = children[_i4]; + child._registerIfAttached(register); + } + }, + _onPreDestroy: function _onPreDestroy() { + var i, len; + this._objFlags |= Destroying; + var parent = this._parent; + var destroyByParent = parent && parent._objFlags & Destroying; + !destroyByParent && (false, false) && this._registerIfAttached(false); + var children = this._children; + for (i = 0, len = children.length; i < len; ++i) children[i]._destroyImmediate(); + for (i = 0, len = this._components.length; i < len; ++i) { + var component = this._components[i]; + component._destroyImmediate(); + } + var eventTargets = this.__eventTargets; + for (i = 0, len = eventTargets.length; i < len; ++i) { + var target = eventTargets[i]; + target && target.targetOff(this); + } + eventTargets.length = 0; + this._persistNode && cc.game.removePersistRootNode(this); + if (!destroyByParent && parent) { + var childIndex = parent._children.indexOf(this); + parent._children.splice(childIndex, 1); + parent.emit && parent.emit("child-removed", this); + } + return destroyByParent; + }, + onRestore: false + }); + BaseNode.idGenerater = idGenerater; + BaseNode._stacks = [ [] ]; + BaseNode._stackId = 0; + BaseNode.prototype._onPreDestroyBase = BaseNode.prototype._onPreDestroy; + false; + BaseNode.prototype._onHierarchyChangedBase = BaseNode.prototype._onHierarchyChanged; + false; + var SameNameGetSets = [ "parent", "name", "children", "childrenCount" ]; + misc.propertyDefine(BaseNode, SameNameGetSets, {}); + false; + cc._BaseNode = module.exports = BaseNode; + }), { + "../event-manager": 112, + "../platform/CCObject": 127, + "../platform/id-generater": 138, + "../platform/js": 142, + "../renderer/render-flow": 153, + "./misc": 205 + } ], + 198: [ (function(require, module, exports) { + "use strict"; + var EPSILON = 1e-6; + function binarySearchEpsilon(array, value) { + for (var l = 0, h = array.length - 1, m = h >>> 1; l <= h; m = l + h >>> 1) { + var test = array[m]; + if (test > value + EPSILON) h = m - 1; else { + if (!(test < value - EPSILON)) return m; + l = m + 1; + } + } + return ~l; + } + module.exports = { + binarySearchEpsilon: binarySearchEpsilon + }; + }), {} ], + 199: [ (function(require, module, exports) { + "use strict"; + var RenderComponent = require("../components/CCRenderComponent"); + var BlendFactor = require("../platform/CCMacro").BlendFactor; + var gfx = require("../../renderer/gfx"); + var BlendFunc = cc.Class({ + properties: { + _srcBlendFactor: BlendFactor.SRC_ALPHA, + _dstBlendFactor: BlendFactor.ONE_MINUS_SRC_ALPHA, + srcBlendFactor: { + get: function get() { + return this._srcBlendFactor; + }, + set: function set(value) { + if (this._srcBlendFactor === value) return; + this._srcBlendFactor = value; + this._updateBlendFunc(true); + this._onBlendChanged && this._onBlendChanged(); + }, + animatable: false, + type: BlendFactor, + tooltip: false, + visible: true + }, + dstBlendFactor: { + get: function get() { + return this._dstBlendFactor; + }, + set: function set(value) { + if (this._dstBlendFactor === value) return; + this._dstBlendFactor = value; + this._updateBlendFunc(true); + }, + animatable: false, + type: BlendFactor, + tooltip: false, + visible: true + } + }, + setMaterial: function setMaterial(index, material) { + var materialVar = RenderComponent.prototype.setMaterial.call(this, index, material); + this._srcBlendFactor === BlendFactor.SRC_ALPHA && this._dstBlendFactor === BlendFactor.ONE_MINUS_SRC_ALPHA || this._updateMaterialBlendFunc(materialVar); + return materialVar; + }, + _updateMaterial: function _updateMaterial() { + this._updateBlendFunc(); + }, + _updateBlendFunc: function _updateBlendFunc(force) { + if (!force && this._srcBlendFactor === BlendFactor.SRC_ALPHA && this._dstBlendFactor === BlendFactor.ONE_MINUS_SRC_ALPHA) return; + var materials = this.getMaterials(); + for (var i = 0; i < materials.length; i++) { + var material = materials[i]; + this._updateMaterialBlendFunc(material); + } + }, + _updateMaterialBlendFunc: function _updateMaterialBlendFunc(material) { + material.setBlend(true, gfx.BLEND_FUNC_ADD, this._srcBlendFactor, this._dstBlendFactor, gfx.BLEND_FUNC_ADD, this._srcBlendFactor, this._dstBlendFactor); + false; + } + }); + module.exports = cc.BlendFunc = BlendFunc; + }), { + "../../renderer/gfx": 247, + "../components/CCRenderComponent": 98, + "../platform/CCMacro": 126 + } ], + 200: [ (function(require, module, exports) { + "use strict"; + var Base64Values = require("./misc").BASE64_VALUES; + var HexChars = "0123456789abcdef".split(""); + var _t = [ "", "", "", "" ]; + var UuidTemplate = _t.concat(_t, "-", _t, "-", _t, "-", _t, "-", _t, _t, _t); + var Indices = UuidTemplate.map((function(x, i) { + return "-" === x ? NaN : i; + })).filter(isFinite); + module.exports = function(base64) { + if (22 !== base64.length) return base64; + UuidTemplate[0] = base64[0]; + UuidTemplate[1] = base64[1]; + for (var i = 2, j = 2; i < 22; i += 2) { + var lhs = Base64Values[base64.charCodeAt(i)]; + var rhs = Base64Values[base64.charCodeAt(i + 1)]; + UuidTemplate[Indices[j++]] = HexChars[lhs >> 2]; + UuidTemplate[Indices[j++]] = HexChars[(3 & lhs) << 2 | rhs >> 4]; + UuidTemplate[Indices[j++]] = HexChars[15 & rhs]; + } + return UuidTemplate.join(""); + }; + false; + }), { + "./misc": 205 + } ], + 201: [ (function(require, module, exports) { + "use strict"; + cc.find = module.exports = function(path, referenceNode) { + if (null == path) { + cc.errorID(3814); + return null; + } + if (referenceNode) false; else { + var scene = cc.director.getScene(); + if (!scene) { + false; + return null; + } + false; + referenceNode = scene; + } + var match = referenceNode; + var startIndex = "/" !== path[0] ? 0 : 1; + var nameList = path.split("/"); + for (var n = startIndex; n < nameList.length; n++) { + var name = nameList[n]; + var children = match._children; + match = null; + for (var t = 0, len = children.length; t < len; ++t) { + var subChild = children[t]; + if (subChild.name === name) { + match = subChild; + break; + } + } + if (!match) return null; + } + return match; + }; + }), {} ], + 202: [ (function(require, module, exports) { + "use strict"; + var _materialVariant = _interopRequireDefault(require("../assets/material/material-variant")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var Material = require("../assets/material/CCMaterial"); + var GraySpriteState = cc.Class({ + properties: { + _normalMaterial: null, + normalMaterial: { + get: function get() { + return this._normalMaterial; + }, + set: function set(val) { + this._normalMaterial = val; + this._updateDisabledState && this._updateDisabledState(); + }, + type: Material, + tooltip: false, + animatable: false + }, + _grayMaterial: null, + grayMaterial: { + get: function get() { + return this._grayMaterial; + }, + set: function set(val) { + this._grayMaterial = val; + this._updateDisabledState && this._updateDisabledState(); + }, + type: Material, + tooltip: false, + animatable: false + } + }, + _switchGrayMaterial: function _switchGrayMaterial(useGrayMaterial, renderComp) { + var material; + if (useGrayMaterial) { + material = this._grayMaterial; + material || (material = Material.getBuiltinMaterial("2d-gray-sprite")); + material = this._grayMaterial = _materialVariant["default"].create(material, renderComp); + } else { + material = this._normalMaterial; + material || (material = Material.getBuiltinMaterial("2d-sprite", renderComp)); + material = this._normalMaterial = _materialVariant["default"].create(material, renderComp); + } + renderComp.setMaterial(0, material); + } + }); + module.exports = GraySpriteState; + }), { + "../assets/material/CCMaterial": 75, + "../assets/material/material-variant": 82 + } ], + 203: [ (function(require, module, exports) { + "use strict"; + var eventRegx = /^(click)(\s)*=|(param)(\s)*=/; + var imageAttrReg = /(\s)*src(\s)*=|(\s)*height(\s)*=|(\s)*width(\s)*=|(\s)*align(\s)*=|(\s)*offset(\s)*=|(\s)*click(\s)*=|(\s)*param(\s)*=/; + var HtmlTextParser = function HtmlTextParser() { + this._parsedObject = {}; + this._specialSymbolArray = []; + this._specialSymbolArray.push([ /</g, "<" ]); + this._specialSymbolArray.push([ />/g, ">" ]); + this._specialSymbolArray.push([ /&/g, "&" ]); + this._specialSymbolArray.push([ /"/g, '"' ]); + this._specialSymbolArray.push([ /'/g, "'" ]); + this._specialSymbolArray.push([ / /g, " " ]); + }; + HtmlTextParser.prototype = { + constructor: HtmlTextParser, + parse: function parse(htmlString) { + this._resultObjectArray = []; + this._stack = []; + var startIndex = 0; + var length = htmlString.length; + while (startIndex < length) { + var tagEndIndex = htmlString.indexOf(">", startIndex); + var tagBeginIndex = -1; + if (tagEndIndex >= 0) { + tagBeginIndex = htmlString.lastIndexOf("<", tagEndIndex); + var noTagBegin = tagBeginIndex < startIndex - 1; + if (noTagBegin) { + tagBeginIndex = htmlString.indexOf("<", tagEndIndex + 1); + tagEndIndex = htmlString.indexOf(">", tagBeginIndex + 1); + } + } + if (tagBeginIndex < 0) { + this._stack.pop(); + this._processResult(htmlString.substring(startIndex)); + startIndex = length; + } else { + var newStr = htmlString.substring(startIndex, tagBeginIndex); + var tagStr = htmlString.substring(tagBeginIndex + 1, tagEndIndex); + "" === tagStr && (newStr = htmlString.substring(startIndex, tagEndIndex + 1)); + this._processResult(newStr); + -1 === tagEndIndex ? tagEndIndex = tagBeginIndex : "/" === htmlString.charAt(tagBeginIndex + 1) ? this._stack.pop() : this._addToStack(tagStr); + startIndex = tagEndIndex + 1; + } + } + return this._resultObjectArray; + }, + _attributeToObject: function _attributeToObject(attribute) { + attribute = attribute.trim(); + var obj = {}; + var header = attribute.match(/^(color|size)(\s)*=/); + var tagName; + var nextSpace; + var eventObj; + var eventHanlderString; + if (header) { + tagName = header[0]; + attribute = attribute.substring(tagName.length).trim(); + if ("" === attribute) return obj; + nextSpace = attribute.indexOf(" "); + switch (tagName[0]) { + case "c": + obj.color = nextSpace > -1 ? attribute.substring(0, nextSpace).trim() : attribute; + break; + + case "s": + obj.size = parseInt(attribute); + } + if (nextSpace > -1) { + eventHanlderString = attribute.substring(nextSpace + 1).trim(); + eventObj = this._processEventHandler(eventHanlderString); + obj.event = eventObj; + } + return obj; + } + header = attribute.match(/^(br(\s)*\/)/); + if (header && header[0].length > 0) { + tagName = header[0].trim(); + if (tagName.startsWith("br") && "/" === tagName[tagName.length - 1]) { + obj.isNewLine = true; + this._resultObjectArray.push({ + text: "", + style: { + newline: true + } + }); + return obj; + } + } + header = attribute.match(/^(img(\s)*src(\s)*=[^>]+\/)/); + if (header && header[0].length > 0) { + tagName = header[0].trim(); + if (tagName.startsWith("img") && "/" === tagName[tagName.length - 1]) { + header = attribute.match(imageAttrReg); + var tagValue; + var remainingArgument; + var isValidImageTag = false; + while (header) { + attribute = attribute.substring(attribute.indexOf(header[0])); + tagName = attribute.substr(0, header[0].length); + remainingArgument = attribute.substring(tagName.length).trim(); + nextSpace = remainingArgument.indexOf(" "); + tagValue = nextSpace > -1 ? remainingArgument.substr(0, nextSpace) : remainingArgument; + tagName = tagName.replace(/[^a-zA-Z]/g, "").trim(); + tagName = tagName.toLocaleLowerCase(); + attribute = remainingArgument.substring(nextSpace).trim(); + tagValue.endsWith("/") && (tagValue = tagValue.slice(0, -1)); + if ("src" === tagName) { + switch (tagValue.charCodeAt(0)) { + case 34: + case 39: + isValidImageTag = true; + tagValue = tagValue.slice(1, -1); + } + obj.isImage = true; + obj.src = tagValue; + } else if ("height" === tagName) obj.imageHeight = parseInt(tagValue); else if ("width" === tagName) obj.imageWidth = parseInt(tagValue); else if ("align" === tagName) { + switch (tagValue.charCodeAt(0)) { + case 34: + case 39: + tagValue = tagValue.slice(1, -1); + } + obj.imageAlign = tagValue.toLocaleLowerCase(); + } else "offset" === tagName ? obj.imageOffset = tagValue : "click" === tagName && (obj.event = this._processEventHandler(tagName + "=" + tagValue)); + obj.event && "param" === tagName && (obj.event.param = tagValue.replace(/^\"|\"$/g, "")); + header = attribute.match(imageAttrReg); + } + isValidImageTag && obj.isImage && this._resultObjectArray.push({ + text: "", + style: obj + }); + return {}; + } + } + header = attribute.match(/^(outline(\s)*[^>]*)/); + if (header) { + attribute = header[0].substring("outline".length).trim(); + var defaultOutlineObject = { + color: "#ffffff", + width: 1 + }; + if (attribute) { + var outlineAttrReg = /(\s)*color(\s)*=|(\s)*width(\s)*=|(\s)*click(\s)*=|(\s)*param(\s)*=/; + header = attribute.match(outlineAttrReg); + var tagValue; + while (header) { + attribute = attribute.substring(attribute.indexOf(header[0])); + tagName = attribute.substr(0, header[0].length); + remainingArgument = attribute.substring(tagName.length).trim(); + nextSpace = remainingArgument.indexOf(" "); + tagValue = nextSpace > -1 ? remainingArgument.substr(0, nextSpace) : remainingArgument; + tagName = tagName.replace(/[^a-zA-Z]/g, "").trim(); + tagName = tagName.toLocaleLowerCase(); + attribute = remainingArgument.substring(nextSpace).trim(); + "click" === tagName ? obj.event = this._processEventHandler(tagName + "=" + tagValue) : "color" === tagName ? defaultOutlineObject.color = tagValue : "width" === tagName && (defaultOutlineObject.width = parseInt(tagValue)); + obj.event && "param" === tagName && (obj.event.param = tagValue.replace(/^\"|\"$/g, "")); + header = attribute.match(outlineAttrReg); + } + } + obj.outline = defaultOutlineObject; + } + header = attribute.match(/^(on|u|b|i)(\s)*/); + if (header && header[0].length > 0) { + tagName = header[0]; + attribute = attribute.substring(tagName.length).trim(); + switch (tagName[0]) { + case "u": + obj.underline = true; + break; + + case "i": + obj.italic = true; + break; + + case "b": + obj.bold = true; + } + if ("" === attribute) return obj; + eventObj = this._processEventHandler(attribute); + obj.event = eventObj; + } + return obj; + }, + _processEventHandler: function _processEventHandler(eventString) { + var index = 0; + var obj = {}; + var eventNames = eventString.match(eventRegx); + var isValidTag = false; + while (eventNames) { + var eventName = eventNames[0]; + var eventValue = ""; + isValidTag = false; + eventString = eventString.substring(eventName.length).trim(); + if ('"' === eventString.charAt(0)) { + index = eventString.indexOf('"', 1); + if (index > -1) { + eventValue = eventString.substring(1, index).trim(); + isValidTag = true; + } + index++; + } else if ("'" === eventString.charAt(0)) { + index = eventString.indexOf("'", 1); + if (index > -1) { + eventValue = eventString.substring(1, index).trim(); + isValidTag = true; + } + index++; + } else { + var match = eventString.match(/(\S)+/); + eventValue = match ? match[0] : ""; + index = eventValue.length; + } + if (isValidTag) { + eventName = eventName.substring(0, eventName.length - 1).trim(); + obj[eventName] = eventValue; + } + eventString = eventString.substring(index).trim(); + eventNames = eventString.match(eventRegx); + } + return obj; + }, + _addToStack: function _addToStack(attribute) { + var obj = this._attributeToObject(attribute); + if (0 === this._stack.length) this._stack.push(obj); else { + if (obj.isNewLine || obj.isImage) return; + var previousTagObj = this._stack[this._stack.length - 1]; + for (var key in previousTagObj) obj[key] || (obj[key] = previousTagObj[key]); + this._stack.push(obj); + } + }, + _processResult: function _processResult(value) { + if ("" === value) return; + value = this._escapeSpecialSymbol(value); + this._stack.length > 0 ? this._resultObjectArray.push({ + text: value, + style: this._stack[this._stack.length - 1] + }) : this._resultObjectArray.push({ + text: value + }); + }, + _escapeSpecialSymbol: function _escapeSpecialSymbol(str) { + for (var i = 0; i < this._specialSymbolArray.length; ++i) { + var key = this._specialSymbolArray[i][0]; + var value = this._specialSymbolArray[i][1]; + str = str.replace(key, value); + } + return str; + } + }; + false; + module.exports = HtmlTextParser; + }), {} ], + 204: [ (function(require, module, exports) { + "use strict"; + require("./CCPath"); + true; + require("./profiler/CCProfiler"); + require("./find"); + require("./mutable-forward-iterator"); + }), { + "./CCPath": 195, + "./find": 201, + "./mutable-forward-iterator": 206, + "./profiler/CCProfiler": 209 + } ], + 205: [ (function(require, module, exports) { + "use strict"; + var js = require("../platform/js"); + var misc = {}; + misc.propertyDefine = function(ctor, sameNameGetSets, diffNameGetSets) { + function define(np, propName, getter, setter) { + var pd = Object.getOwnPropertyDescriptor(np, propName); + if (pd) { + pd.get && (np[getter] = pd.get); + pd.set && setter && (np[setter] = pd.set); + } else { + var getterFunc = np[getter]; + var clsName; + false; + js.getset(np, propName, getterFunc, np[setter]); + } + } + var propName, np = ctor.prototype; + for (var i = 0; i < sameNameGetSets.length; i++) { + propName = sameNameGetSets[i]; + var suffix = propName[0].toUpperCase() + propName.slice(1); + define(np, propName, "get" + suffix, "set" + suffix); + } + for (propName in diffNameGetSets) { + var getset = diffNameGetSets[propName]; + define(np, propName, getset[0], getset[1]); + } + }; + misc.NextPOT = function(x) { + x -= 1; + x |= x >> 1; + x |= x >> 2; + x |= x >> 4; + x |= x >> 8; + x |= x >> 16; + return x + 1; + }; + false; + misc.BUILTIN_CLASSID_RE = /^(?:cc|dragonBones|sp|ccsg)\..+/; + var BASE64_KEYS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + var BASE64_VALUES = new Array(123); + for (var i = 0; i < 123; ++i) BASE64_VALUES[i] = 64; + for (var _i = 0; _i < 64; ++_i) BASE64_VALUES[BASE64_KEYS.charCodeAt(_i)] = _i; + misc.BASE64_VALUES = BASE64_VALUES; + misc.pushToMap = function(map, key, value, pushFront) { + var exists = map[key]; + if (exists) if (Array.isArray(exists)) if (pushFront) { + exists.push(exists[0]); + exists[0] = value; + } else exists.push(value); else map[key] = pushFront ? [ value, exists ] : [ exists, value ]; else map[key] = value; + }; + misc.clampf = function(value, min_inclusive, max_inclusive) { + if (min_inclusive > max_inclusive) { + var temp = min_inclusive; + min_inclusive = max_inclusive; + max_inclusive = temp; + } + return value < min_inclusive ? min_inclusive : value < max_inclusive ? value : max_inclusive; + }; + misc.clamp01 = function(value) { + return value < 0 ? 0 : value < 1 ? value : 1; + }; + misc.lerp = function(a, b, r) { + return a + (b - a) * r; + }; + misc.degreesToRadians = function(angle) { + return angle * cc.macro.RAD; + }; + misc.radiansToDegrees = function(angle) { + return angle * cc.macro.DEG; + }; + cc.misc = module.exports = misc; + }), { + "../platform/js": 142 + } ], + 206: [ (function(require, module, exports) { + "use strict"; + function MutableForwardIterator(array) { + this.i = 0; + this.array = array; + } + var proto = MutableForwardIterator.prototype; + proto.remove = function(value) { + var index = this.array.indexOf(value); + index >= 0 && this.removeAt(index); + }; + proto.removeAt = function(i) { + this.array.splice(i, 1); + i <= this.i && --this.i; + }; + proto.fastRemove = function(value) { + var index = this.array.indexOf(value); + index >= 0 && this.fastRemoveAt(index); + }; + proto.fastRemoveAt = function(i) { + var array = this.array; + array[i] = array[array.length - 1]; + --array.length; + i <= this.i && --this.i; + }; + proto.push = function(item) { + this.array.push(item); + }; + module.exports = MutableForwardIterator; + }), {} ], + 207: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var Pool = (function() { + function Pool() { + this.enabled = false; + this.count = 0; + this.maxSize = 1024; + } + var _proto = Pool.prototype; + _proto.get = function get() {}; + _proto.put = function put() {}; + _proto.clear = function clear() {}; + return Pool; + })(); + exports["default"] = Pool; + cc.pool = {}; + Pool.register = function(name, pool) { + cc.pool[name] = pool; + }; + module.exports = exports["default"]; + }), {} ], + 208: [ (function(require, module, exports) { + "use strict"; + cc._PrefabInfo = cc.Class({ + name: "cc.PrefabInfo", + properties: { + root: null, + asset: null, + fileId: "", + sync: false + } + }); + module.exports = { + syncWithPrefab: function syncWithPrefab(node) { + var _prefab = node._prefab; + if (!_prefab.asset) { + var NodeUtils; + var PrefabUtils; + false; + cc.errorID(3701, node.name); + node._prefab = null; + return; + } + var _objFlags = node._objFlags; + var _parent = node._parent; + var _id = node._id; + var _name = node._name; + var _active = node._active; + var eulerAnglesX = node._eulerAngles.x; + var eulerAnglesY = node._eulerAngles.y; + var eulerAnglesZ = node._eulerAngles.z; + var _localZOrder = node._localZOrder; + var trs = node._trs; + var x = trs[0]; + var y = trs[1]; + var z = trs[2]; + cc.game._isCloning = true; + var prefabRoot; + true; + _prefab.asset._doInstantiate(node); + cc.game._isCloning = false; + node._objFlags = _objFlags; + node._parent = _parent; + node._id = _id; + node._prefab = _prefab; + node._name = _name; + node._active = _active; + node._localZOrder = _localZOrder; + trs = node._trs; + trs[0] = x; + trs[1] = y; + trs[2] = z; + node._eulerAngles.x = eulerAnglesX; + node._eulerAngles.y = eulerAnglesY; + node._eulerAngles.z = eulerAnglesZ; + } + }; + }), {} ], + 209: [ (function(require, module, exports) { + "use strict"; + var macro = require("../../platform/CCMacro"); + var PerfCounter = require("./perf-counter"); + var _showFPS = false; + var _fontSize = 15; + var _stats = null; + var _rootNode = null; + var _label = null; + function generateStats() { + if (_stats) return; + _stats = { + fps: { + desc: "Framerate (FPS)", + below: 30, + average: 500 + }, + draws: { + desc: "Draw Call" + }, + frame: { + desc: "Frame time (ms)", + min: 0, + max: 50, + average: 500 + }, + logic: { + desc: "Game Logic (ms)", + min: 0, + max: 50, + average: 500, + color: "#080" + }, + render: { + desc: "Renderer (ms)", + min: 0, + max: 50, + average: 500, + color: "#f90" + }, + mode: { + desc: cc.game.renderType === cc.game.RENDER_TYPE_WEBGL ? "WebGL" : "Canvas", + min: 1 + } + }; + var now = performance.now(); + for (var id in _stats) _stats[id]._counter = new PerfCounter(id, _stats[id], now); + } + function generateNode() { + if (_rootNode && _rootNode.isValid) return; + _rootNode = new cc.Node("PROFILER-NODE"); + _rootNode.x = _rootNode.y = 10; + _rootNode.groupIndex = cc.Node.BuiltinGroupIndex.DEBUG; + cc.Camera._setupDebugCamera(); + _rootNode.zIndex = macro.MAX_ZINDEX; + cc.game.addPersistRootNode(_rootNode); + var left = new cc.Node("LEFT-PANEL"); + left.anchorX = left.anchorY = 0; + var leftLabel = left.addComponent(cc.Label); + leftLabel.fontSize = _fontSize; + leftLabel.lineHeight = _fontSize; + left.parent = _rootNode; + var right = new cc.Node("RIGHT-PANEL"); + right.anchorX = 1; + right.anchorY = 0; + right.x = 200; + var rightLabel = right.addComponent(cc.Label); + rightLabel.horizontalAlign = cc.Label.HorizontalAlign.RIGHT; + rightLabel.fontSize = _fontSize; + rightLabel.lineHeight = _fontSize; + right.parent = _rootNode; + if (cc.sys.platform !== cc.sys.BAIDU_GAME_SUB && cc.sys.platform !== cc.sys.WECHAT_GAME_SUB) { + leftLabel.cacheMode = cc.Label.CacheMode.CHAR; + rightLabel.cacheMode = cc.Label.CacheMode.CHAR; + } + _label = { + left: leftLabel, + right: rightLabel + }; + } + function beforeUpdate() { + generateNode(); + var now = cc.director._lastUpdate; + _stats["frame"]._counter.start(now); + _stats["logic"]._counter.start(now); + } + function afterUpdate() { + var now = performance.now(); + cc.director.isPaused() ? _stats["frame"]._counter.start(now) : _stats["logic"]._counter.end(now); + _stats["render"]._counter.start(now); + } + function updateLabel(stat) { + var length = 20; + var desc = stat.desc; + var value = stat._counter.human() + ""; + stat.label.string = stat.desc + " " + stat._counter.human(); + } + function afterDraw() { + var now = performance.now(); + _stats["render"]._counter.end(now); + _stats["draws"]._counter.value = cc.renderer.drawCalls; + _stats["frame"]._counter.end(now); + _stats["fps"]._counter.frame(now); + var left = ""; + var right = ""; + for (var id in _stats) { + var stat = _stats[id]; + stat._counter.sample(now); + left += stat.desc + "\n"; + right += stat._counter.human() + "\n"; + } + if (_label) { + _label.left.string = left; + _label.right.string = right; + } + } + cc.profiler = module.exports = { + isShowingStats: function isShowingStats() { + return _showFPS; + }, + hideStats: function hideStats() { + if (_showFPS) { + _rootNode && (_rootNode.active = false); + cc.director.off(cc.Director.EVENT_BEFORE_UPDATE, beforeUpdate); + cc.director.off(cc.Director.EVENT_AFTER_UPDATE, afterUpdate); + cc.director.off(cc.Director.EVENT_AFTER_DRAW, afterDraw); + _showFPS = false; + } + }, + showStats: function showStats() { + if (!_showFPS) { + generateStats(); + _rootNode && (_rootNode.active = true); + cc.director.on(cc.Director.EVENT_BEFORE_UPDATE, beforeUpdate); + cc.director.on(cc.Director.EVENT_AFTER_UPDATE, afterUpdate); + cc.director.on(cc.Director.EVENT_AFTER_DRAW, afterDraw); + _showFPS = true; + } + } + }; + }), { + "../../platform/CCMacro": 126, + "./perf-counter": 211 + } ], + 210: [ (function(require, module, exports) { + "use strict"; + var Counter = cc.Class({ + name: "cc.Counter", + ctor: function ctor(id, opts, now) { + this._id = id; + this._opts = opts || {}; + this._value = 0; + this._total = 0; + this._averageValue = 0; + this._accumValue = 0; + this._accumSamples = 0; + this._accumStart = now; + }, + properties: { + value: { + get: function get() { + return this._value; + }, + set: function set(v) { + this._value = v; + } + } + }, + _average: function _average(v, now) { + if (this._opts.average) { + this._accumValue += v; + ++this._accumSamples; + var t = now; + if (t - this._accumStart >= this._opts.average) { + this._averageValue = this._accumValue / this._accumSamples; + this._accumValue = 0; + this._accumStart = t; + this._accumSamples = 0; + } + } + }, + sample: function sample(now) { + this._average(this._value, now); + }, + human: function human() { + var v = this._opts.average ? this._averageValue : this._value; + return Math.round(100 * v) / 100; + }, + alarm: function alarm() { + return this._opts.below && this._value < this._opts.below || this._opts.over && this._value > this._opts.over; + } + }); + module.exports = Counter; + }), {} ], + 211: [ (function(require, module, exports) { + "use strict"; + var Counter = require("./counter"); + var PerfCounter = cc.Class({ + name: "cc.PerfCounter", + extends: Counter, + ctor: function ctor(id, opts, now) { + this._time = now; + }, + start: function start(now) { + this._time = now; + }, + end: function end(now) { + this._value = now - this._time; + this._average(this._value); + }, + tick: function tick() { + this.end(); + this.start(); + }, + frame: function frame(now) { + var t = now; + var e = t - this._time; + this._total++; + var avg = this._opts.average || 1e3; + if (e > avg) { + this._value = 1e3 * this._total / e; + this._total = 0; + this._time = t; + this._average(this._value); + } + } + }); + module.exports = PerfCounter; + }), { + "./counter": 210 + } ], + 212: [ (function(require, module, exports) { + "use strict"; + var _js = _interopRequireDefault(require("../platform/js")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var _BASELINE_RATIO = .26; + var _BASELINE_OFFSET = 0; + false; + var MAX_CACHE_SIZE = 100; + var pool = new _js["default"].Pool(2); + pool.get = function() { + var node = this._get() || { + key: null, + value: null, + prev: null, + next: null + }; + return node; + }; + function LRUCache(size) { + this.count = 0; + this.limit = size; + this.datas = {}; + this.head = null; + this.tail = null; + } + LRUCache.prototype.moveToHead = function(node) { + node.next = this.head; + node.prev = null; + null !== this.head && (this.head.prev = node); + this.head = node; + null === this.tail && (this.tail = node); + this.count++; + this.datas[node.key] = node; + }; + LRUCache.prototype.put = function(key, value) { + var node = pool.get(); + node.key = key; + node.value = value; + if (this.count >= this.limit) { + var discard = this.tail; + delete this.datas[discard.key]; + this.count--; + this.tail = discard.prev; + this.tail.next = null; + discard.prev = null; + discard.next = null; + pool.put(discard); + } + this.moveToHead(node); + }; + LRUCache.prototype.remove = function(node) { + null !== node.prev ? node.prev.next = node.next : this.head = node.next; + null !== node.next ? node.next.prev = node.prev : this.tail = node.prev; + delete this.datas[node.key]; + this.count--; + }; + LRUCache.prototype.get = function(key) { + var node = this.datas[key]; + if (node) { + this.remove(node); + this.moveToHead(node); + return node.value; + } + return null; + }; + LRUCache.prototype.clear = function() { + this.count = 0; + this.datas = {}; + this.head = null; + this.tail = null; + }; + LRUCache.prototype.has = function(key) { + return !!this.datas[key]; + }; + LRUCache.prototype["delete"] = function(key) { + var node = this.datas[key]; + this.remove(node); + }; + var measureCache = new LRUCache(MAX_CACHE_SIZE); + var textUtils = { + BASELINE_RATIO: _BASELINE_RATIO, + MIDDLE_RATIO: (_BASELINE_RATIO + 1) / 2 - _BASELINE_RATIO, + BASELINE_OFFSET: _BASELINE_OFFSET, + label_wordRex: /([a-zA-Z0-9\xc4\xd6\xdc\xe4\xf6\xfc\xdf\xe9\xe8\xe7\xe0\xf9\xea\xe2\xee\xf4\xfb\u0430-\u044f\u0410-\u042f\u0401\u0451]+|\S)/, + label_symbolRex: /^[!,.:;'}\]%\?>\u3001\u2018\u201c\u300b\uff1f\u3002\uff0c\uff01]/, + label_lastWordRex: /([a-zA-Z0-9\xc4\xd6\xdc\xe4\xf6\xfc\xdf\xe9\xe8\xe7\xe0\xf9\xea\xe2\xee\xf4\xfb\u0430\xed\xec\xcd\xcc\xef\xc1\xc0\xe1\xe0\xc9\xc8\xd2\xd3\xf2\xf3\u0150\u0151\xd9\xda\u0170\xfa\u0171\xf1\xd1\xe6\xc6\u0153\u0152\xc3\xc2\xe3\xd4\xf5\u011b\u0161\u010d\u0159\u017e\xfd\xe1\xed\xe9\xf3\xfa\u016f\u0165\u010f\u0148\u011a\u0160\u010c\u0158\u017d\xc1\xcd\xc9\xd3\xda\u0164\u017c\u017a\u015b\xf3\u0144\u0142\u0119\u0107\u0105\u017b\u0179\u015a\xd3\u0143\u0141\u0118\u0106\u0104-\u044f\u0410-\u042f\u0401\u0451]+|\S)$/, + label_lastEnglish: /[a-zA-Z0-9\xc4\xd6\xdc\xe4\xf6\xfc\xdf\xe9\xe8\xe7\xe0\xf9\xea\xe2\xee\xf4\xfb\u0430\xed\xec\xcd\xcc\xef\xc1\xc0\xe1\xe0\xc9\xc8\xd2\xd3\xf2\xf3\u0150\u0151\xd9\xda\u0170\xfa\u0171\xf1\xd1\xe6\xc6\u0153\u0152\xc3\xc2\xe3\xd4\xf5\u011b\u0161\u010d\u0159\u017e\xfd\xe1\xed\xe9\xf3\xfa\u016f\u0165\u010f\u0148\u011a\u0160\u010c\u0158\u017d\xc1\xcd\xc9\xd3\xda\u0164\u017c\u017a\u015b\xf3\u0144\u0142\u0119\u0107\u0105\u017b\u0179\u015a\xd3\u0143\u0141\u0118\u0106\u0104-\u044f\u0410-\u042f\u0401\u0451]+$/, + label_firstEnglish: /^[a-zA-Z0-9\xc4\xd6\xdc\xe4\xf6\xfc\xdf\xe9\xe8\xe7\xe0\xf9\xea\xe2\xee\xf4\xfb\u0430\xed\xec\xcd\xcc\xef\xc1\xc0\xe1\xe0\xc9\xc8\xd2\xd3\xf2\xf3\u0150\u0151\xd9\xda\u0170\xfa\u0171\xf1\xd1\xe6\xc6\u0153\u0152\xc3\xc2\xe3\xd4\xf5\u011b\u0161\u010d\u0159\u017e\xfd\xe1\xed\xe9\xf3\xfa\u016f\u0165\u010f\u0148\u011a\u0160\u010c\u0158\u017d\xc1\xcd\xc9\xd3\xda\u0164\u017c\u017a\u015b\xf3\u0144\u0142\u0119\u0107\u0105\u017b\u0179\u015a\xd3\u0143\u0141\u0118\u0106\u0104-\u044f\u0410-\u042f\u0401\u0451]/, + highSurrogateRex: /[\uD800-\uDBFF]/, + lowSurrogateRex: /[\uDC00-\uDFFF]/, + label_wrapinspection: true, + __CHINESE_REG: /^[\u4E00-\u9FFF\u3400-\u4DFF]+$/, + __JAPANESE_REG: /[\u3000-\u303F]|[\u3040-\u309F]|[\u30A0-\u30FF]|[\uFF00-\uFFEF]|[\u4E00-\u9FAF]|[\u2605-\u2606]|[\u2190-\u2195]|\u203B/g, + __KOREAN_REG: /^[\u1100-\u11FF]|[\u3130-\u318F]|[\uA960-\uA97F]|[\uAC00-\uD7AF]|[\uD7B0-\uD7FF]+$/, + isUnicodeCJK: function isUnicodeCJK(ch) { + return this.__CHINESE_REG.test(ch) || this.__JAPANESE_REG.test(ch) || this.__KOREAN_REG.test(ch); + }, + isUnicodeSpace: function isUnicodeSpace(ch) { + ch = ch.charCodeAt(0); + return ch >= 9 && ch <= 13 || 32 === ch || 133 === ch || 160 === ch || 5760 === ch || ch >= 8192 && ch <= 8202 || 8232 === ch || 8233 === ch || 8239 === ch || 8287 === ch || 12288 === ch; + }, + safeMeasureText: function safeMeasureText(ctx, string, desc) { + var font = desc || ctx.font; + var key = font + "\ud83c\udfae" + string; + var cache = measureCache.get(key); + if (null !== cache) return cache; + var metric = ctx.measureText(string); + var width = metric && metric.width || 0; + measureCache.put(key, width); + return width; + }, + _safeSubstring: function _safeSubstring(targetString, startIndex, endIndex) { + var newStartIndex = startIndex, newEndIndex = endIndex; + var startChar = targetString[startIndex]; + this.lowSurrogateRex.test(startChar) && newStartIndex--; + if (void 0 !== endIndex) if (endIndex - 1 !== startIndex) { + var endChar = targetString[endIndex - 1]; + this.highSurrogateRex.test(endChar) && newEndIndex--; + } else this.highSurrogateRex.test(startChar) && newEndIndex++; + return targetString.substring(newStartIndex, newEndIndex); + }, + fragmentText: function fragmentText(stringToken, allWidth, maxWidth, measureText) { + var wrappedWords = []; + if (0 === stringToken.length || maxWidth < 0) { + wrappedWords.push(""); + return wrappedWords; + } + var text = stringToken; + while (allWidth > maxWidth && text.length > 1) { + var fuzzyLen = text.length * (maxWidth / allWidth) | 0; + var tmpText = this._safeSubstring(text, fuzzyLen); + var width = allWidth - measureText(tmpText); + var sLine = tmpText; + var pushNum = 0; + var checkWhile = 0; + var checkCount = 10; + while (width > maxWidth && checkWhile++ < checkCount) { + fuzzyLen *= maxWidth / width; + fuzzyLen |= 0; + tmpText = this._safeSubstring(text, fuzzyLen); + width = allWidth - measureText(tmpText); + } + checkWhile = 0; + while (width <= maxWidth && checkWhile++ < checkCount) { + if (tmpText) { + var exec = this.label_wordRex.exec(tmpText); + pushNum = exec ? exec[0].length : 1; + sLine = tmpText; + } + fuzzyLen += pushNum; + tmpText = this._safeSubstring(text, fuzzyLen); + width = allWidth - measureText(tmpText); + } + fuzzyLen -= pushNum; + if (0 === fuzzyLen) { + fuzzyLen = 1; + sLine = this._safeSubstring(text, 1); + } else if (1 === fuzzyLen && this.highSurrogateRex.test(text[0])) { + fuzzyLen = 2; + sLine = this._safeSubstring(text, 2); + } + var sText = this._safeSubstring(text, 0, fuzzyLen), result; + if (this.label_wrapinspection && this.label_symbolRex.test(sLine || tmpText)) { + result = this.label_lastWordRex.exec(sText); + fuzzyLen -= result ? result[0].length : 0; + 0 === fuzzyLen && (fuzzyLen = 1); + sLine = this._safeSubstring(text, fuzzyLen); + sText = this._safeSubstring(text, 0, fuzzyLen); + } + if (this.label_firstEnglish.test(sLine)) { + result = this.label_lastEnglish.exec(sText); + if (result && sText !== result[0]) { + fuzzyLen -= result[0].length; + sLine = this._safeSubstring(text, fuzzyLen); + sText = this._safeSubstring(text, 0, fuzzyLen); + } + } + if (0 === wrappedWords.length) wrappedWords.push(sText); else { + sText = sText.trimLeft(); + sText.length > 0 && wrappedWords.push(sText); + } + text = sLine || tmpText; + allWidth = measureText(text); + } + if (0 === wrappedWords.length) wrappedWords.push(text); else { + text = text.trimLeft(); + text.length > 0 && wrappedWords.push(text); + } + return wrappedWords; + } + }; + cc.textUtils = module.exports = textUtils; + }), { + "../platform/js": 142 + } ], + 213: [ (function(require, module, exports) { + "use strict"; + var Texture2D = require("../assets/CCTexture2D"); + var textureUtil = { + loadImage: function loadImage(url, cb, target) { + cc.assertID(url, 3103); + var tex = cc.assetManager.assets.get(url); + if (tex) { + if (tex.loaded) { + cb && cb.call(target, null, tex); + return tex; + } + tex.once("load", (function() { + cb && cb.call(target, null, tex); + }), target); + return tex; + } + cc.assetManager.loadRemote(url, (function(err, texture) { + cb && cb.call(target, err, texture); + })); + }, + cacheImage: function cacheImage(url, image) { + if (url && image) { + var tex = new Texture2D(); + tex.initWithElement(image); + cc.assetManager.assets.add(url, tex); + return tex; + } + }, + postLoadTexture: function postLoadTexture(texture, callback) { + if (texture.loaded) { + callback && callback(); + return; + } + if (!texture.nativeUrl) { + callback && callback(); + return; + } + cc.assetManager.postLoadNative(texture, callback); + } + }; + module.exports = textureUtil; + }), { + "../assets/CCTexture2D": 72 + } ], + 214: [ (function(require, module, exports) { + "use strict"; + var NodeUnit = require("./node-unit"); + var NodeMemPool = require("./node-mem-pool"); + module.exports = { + NodeMemPool: new NodeMemPool(NodeUnit) + }; + }), { + "./node-mem-pool": 216, + "./node-unit": 217 + } ], + 215: [ (function(require, module, exports) { + "use strict"; + var MemPool = function MemPool(unitClass) { + this._unitClass = unitClass; + this._pool = []; + this._findOrder = []; + false; + }; + var proto = MemPool.prototype; + proto._initNative = function() { + this._nativeMemPool = new renderer.MemPool(); + }; + proto._buildUnit = function(unitID) { + var unit = new this._unitClass(unitID, this); + false; + return unit; + }; + proto._destroyUnit = function(unitID) { + this._pool[unitID] = null; + for (var idx = 0, n = this._findOrder.length; idx < n; idx++) { + var unit = this._findOrder[idx]; + if (unit && unit.unitID == unitID) { + this._findOrder.splice(idx, 1); + break; + } + } + false; + }; + proto._findUnitID = function() { + var unitID = 0; + var pool = this._pool; + while (pool[unitID]) unitID++; + return unitID; + }; + proto.pop = function() { + var findUnit = null; + var idx = 0; + var findOrder = this._findOrder; + var pool = this._pool; + for (var n = findOrder.length; idx < n; idx++) { + var unit = findOrder[idx]; + if (unit && unit.hasSpace()) { + findUnit = unit; + break; + } + } + if (!findUnit) { + var unitID = this._findUnitID(); + findUnit = this._buildUnit(unitID); + pool[unitID] = findUnit; + findOrder.push(findUnit); + idx = findOrder.length - 1; + } + var firstUnit = findOrder[0]; + if (firstUnit !== findUnit) { + findOrder[0] = findUnit; + findOrder[idx] = firstUnit; + } + return findUnit.pop(); + }; + proto.push = function(info) { + var unit = this._pool[info.unitID]; + unit.push(info.index); + this._findOrder.length > 1 && unit.isAllFree() && this._destroyUnit(info.unitID); + return unit; + }; + module.exports = MemPool; + }), {} ], + 216: [ (function(require, module, exports) { + "use strict"; + var MemPool = require("./mem-pool"); + var NodeMemPool = function NodeMemPool(unitClass) { + MemPool.call(this, unitClass); + }; + (function() { + var Super = function Super() {}; + Super.prototype = MemPool.prototype; + NodeMemPool.prototype = new Super(); + })(); + var proto = NodeMemPool.prototype; + proto._initNative = function() { + this._nativeMemPool = new renderer.NodeMemPool(); + }; + proto._destroyUnit = function(unitID) { + MemPool.prototype._destroyUnit.call(this, unitID); + false; + }; + module.exports = NodeMemPool; + }), { + "./mem-pool": 215 + } ], + 217: [ (function(require, module, exports) { + "use strict"; + var _utils = require("../../value-types/utils"); + var Uint32_Bytes = 4; + var Uint8_Bytes = 1; + var Dirty_Type = Uint32Array; + var Dirty_Members = 1; + var Dirty_Stride = Dirty_Members * Uint32_Bytes; + var TRS_Members = 10; + var TRS_Stride = TRS_Members * _utils.FLOAT_BYTES; + var LocalMatrix_Members = 16; + var LocalMatrix_Stride = LocalMatrix_Members * _utils.FLOAT_BYTES; + var WorldMatrix_Members = 16; + var WorldMatrix_Stride = WorldMatrix_Members * _utils.FLOAT_BYTES; + var Parent_Type = Uint32Array; + var Parent_Members = 2; + var Parent_Stride = Parent_Members * Uint32_Bytes; + var ZOrder_Type = Uint32Array; + var ZOrder_Members = 1; + var ZOrder_Stride = ZOrder_Members * Uint32_Bytes; + var CullingMask_Type = Int32Array; + var CullingMask_Members = 1; + var CullingMask_Stride = CullingMask_Members * Uint32_Bytes; + var Opacity_Type = Uint8Array; + var Opacity_Members = 1; + var Opacity_Stride = Opacity_Members * Uint8_Bytes; + var Is3D_Type = Uint8Array; + var Is3D_Members = 1; + var Is3D_Stride = Is3D_Members * Uint8_Bytes; + var Node_Type = Uint32Array; + var Node_Members = 2; + var Skew_Members = 2; + var Skew_Stride = Skew_Members * _utils.FLOAT_BYTES; + var UnitBase = require("./unit-base"); + var NodeUnit = function NodeUnit(unitID, memPool) { + UnitBase.call(this, unitID, memPool); + var contentNum = this._contentNum; + this.trsList = new _utils.FLOAT_ARRAY_TYPE(contentNum * TRS_Members); + this.localMatList = new _utils.FLOAT_ARRAY_TYPE(contentNum * LocalMatrix_Members); + this.worldMatList = new _utils.FLOAT_ARRAY_TYPE(contentNum * WorldMatrix_Members); + false; + for (var i = 0; i < contentNum; i++) { + var space = this._spacesData[i]; + space.trs = new _utils.FLOAT_ARRAY_TYPE(this.trsList.buffer, i * TRS_Stride, TRS_Members); + space.localMat = new _utils.FLOAT_ARRAY_TYPE(this.localMatList.buffer, i * LocalMatrix_Stride, LocalMatrix_Members); + space.worldMat = new _utils.FLOAT_ARRAY_TYPE(this.worldMatList.buffer, i * WorldMatrix_Stride, WorldMatrix_Members); + false; + } + }; + (function() { + var Super = function Super() {}; + Super.prototype = UnitBase.prototype; + NodeUnit.prototype = new Super(); + })(); + module.exports = NodeUnit; + }), { + "../../value-types/utils": 227, + "./unit-base": 218 + } ], + 218: [ (function(require, module, exports) { + "use strict"; + var POINTER_INVALID_FLAG = 65535; + var SPACE_FREE_FLAG = 0; + var SPACE_USE_FLAG = 1; + var POS_NEXT_FREE = 0; + var POS_FREE_FLAG = 1; + var UnitBase = function UnitBase(unitID, memPool, contentNum) { + contentNum = contentNum || 128; + this.unitID = unitID; + this._memPool = memPool; + this._data = new Uint16Array(2); + this._data[0] = 0; + this._data[1] = 0; + this._contentNum = contentNum; + this._signData = new Uint16Array(2 * this._contentNum); + this._spacesData = []; + for (var i = 0; i < contentNum; i++) { + var signIndex = 2 * i; + this._signData[signIndex + POS_NEXT_FREE] = i + 1; + this._signData[signIndex + POS_FREE_FLAG] = SPACE_FREE_FLAG; + this._spacesData[i] = { + index: i, + unitID: unitID + }; + } + this._signData[2 * (contentNum - 1)] = POINTER_INVALID_FLAG; + }; + var UnitBaseProto = UnitBase.prototype; + UnitBaseProto.hasSpace = function() { + return this._data[0] !== POINTER_INVALID_FLAG; + }; + UnitBaseProto.isAllFree = function() { + return 0 == this._data[1]; + }; + UnitBaseProto.pop = function() { + var headFreeIndex = this._data[0]; + if (headFreeIndex === POINTER_INVALID_FLAG) return null; + var index = headFreeIndex; + var signIndex = 2 * index; + var space = this._spacesData[index]; + this._signData[signIndex + POS_FREE_FLAG] = SPACE_USE_FLAG; + this._data[0] = this._signData[signIndex + POS_NEXT_FREE]; + this._data[1]++; + return space; + }; + UnitBaseProto.push = function(index) { + var signIndex = 2 * index; + this._signData[signIndex + POS_FREE_FLAG] = SPACE_FREE_FLAG; + this._signData[signIndex + POS_NEXT_FREE] = this._data[0]; + this._data[0] = index; + this._data[1]--; + }; + UnitBaseProto.dump = function() { + var spaceNum = 0; + var index = this._data[0]; + var freeStr = ""; + while (index != POINTER_INVALID_FLAG) { + spaceNum++; + freeStr += index + "->"; + index = this._signData[2 * index + POS_NEXT_FREE]; + } + var usingNum = 0; + var usingStr = ""; + var contentNum = this._contentNum; + for (var i = 0; i < contentNum; i++) { + var freeFlag = this._signData[2 * i + POS_FREE_FLAG]; + if (freeFlag == SPACE_USE_FLAG) { + usingNum++; + usingStr += i + "->"; + } + } + var totalNum = spaceNum + usingNum; + console.log("unitID:", this.unitID, "spaceNum:", spaceNum, "calc using num:", usingNum, "store using num:", this._data[1], "calc total num:", totalNum, "actually total num:", this._contentNum); + console.log("free info:", freeStr); + console.log("using info:", usingStr); + usingNum != this._data[1] && cc.error("using num error", "calc using num:", usingNum, "store using num:", this._data[1]); + spaceNum + usingNum != this._contentNum && cc.error("total num error", "calc total num:", totalNum, "actually total num:", this._contentNum); + }; + module.exports = UnitBase; + }), {} ], + 219: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _valueType = _interopRequireDefault(require("./value-type")); + var _CCClass = _interopRequireDefault(require("../platform/CCClass")); + var _misc = _interopRequireDefault(require("../utils/misc")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var Color = (function(_ValueType) { + _inheritsLoose(Color, _ValueType); + Color.copy = function copy(out, a) { + out.r = a.r; + out.g = a.g; + out.b = a.b; + out.a = a.a; + return out; + }; + Color.clone = function clone(a) { + return new Color(a.r, a.g, a.b, a.a); + }; + Color.set = function set(out, r, g, b, a) { + void 0 === r && (r = 255); + void 0 === g && (g = 255); + void 0 === b && (b = 255); + void 0 === a && (a = 255); + out.r = r; + out.g = g; + out.b = b; + out.a = a; + return out; + }; + Color.fromHex = function fromHex(out, hex) { + var r = (hex >> 24) / 255; + var g = (hex >> 16 & 255) / 255; + var b = (hex >> 8 & 255) / 255; + var a = (255 & hex) / 255; + out.r = r; + out.g = g; + out.b = b; + out.a = a; + return out; + }; + Color.fromHEX = function fromHEX(out, hexString) { + hexString = 0 === hexString.indexOf("#") ? hexString.substring(1) : hexString; + out.r = parseInt(hexString.substr(0, 2), 16) || 0; + out.g = parseInt(hexString.substr(2, 2), 16) || 0; + out.b = parseInt(hexString.substr(4, 2), 16) || 0; + out.a = parseInt(hexString.substr(6, 2), 16) || 255; + out._val = (out.a << 24 >>> 0) + (out.b << 16) + (out.g << 8) + out.r; + return out; + }; + Color.add = function add(out, a, b) { + out.r = a.r + b.r; + out.g = a.g + b.g; + out.b = a.b + b.b; + out.a = a.a + b.a; + return out; + }; + Color.subtract = function subtract(out, a, b) { + out.r = a.r - b.r; + out.g = a.g - b.g; + out.b = a.b - b.b; + out.a = a.a - b.a; + return out; + }; + Color.multiply = function multiply(out, a, b) { + out.r = a.r * b.r; + out.g = a.g * b.g; + out.b = a.b * b.b; + out.a = a.a * b.a; + return out; + }; + Color.divide = function divide(out, a, b) { + out.r = a.r / b.r; + out.g = a.g / b.g; + out.b = a.b / b.b; + out.a = a.a / b.a; + return out; + }; + Color.scale = function scale(out, a, b) { + out.r = a.r * b; + out.g = a.g * b; + out.b = a.b * b; + out.a = a.a * b; + return out; + }; + Color.lerp = function lerp(out, a, b, t) { + var ar = a.r, ag = a.g, ab = a.b, aa = a.a; + out.r = ar + t * (b.r - ar); + out.g = ag + t * (b.g - ag); + out.b = ab + t * (b.b - ab); + out.a = aa + t * (b.a - aa); + return out; + }; + Color.toArray = function toArray(out, a, ofs) { + void 0 === ofs && (ofs = 0); + var scale = a instanceof Color || a.a > 1 ? 1 / 255 : 1; + out[ofs + 0] = a.r * scale; + out[ofs + 1] = a.g * scale; + out[ofs + 2] = a.b * scale; + out[ofs + 3] = a.a * scale; + return out; + }; + Color.fromArray = function fromArray(arr, out, ofs) { + void 0 === ofs && (ofs = 0); + out.r = 255 * arr[ofs + 0]; + out.g = 255 * arr[ofs + 1]; + out.b = 255 * arr[ofs + 2]; + out.a = 255 * arr[ofs + 3]; + return out; + }; + Color.premultiplyAlpha = function premultiplyAlpha(out, color) { + var alpha = color.a / 255; + out.r = color.r * alpha; + out.g = color.g * alpha; + out.b = color.b * alpha; + out._fastSetA(color.a); + return out; + }; + function Color(r, g, b, a) { + var _this; + void 0 === r && (r = 0); + void 0 === g && (g = 0); + void 0 === b && (b = 0); + void 0 === a && (a = 255); + _this = _ValueType.call(this) || this; + _this._val = 0; + if ("object" === typeof r) { + g = r.g; + b = r.b; + a = r.a; + r = r.r; + } + _this._val = (a << 24 >>> 0) + (b << 16) + (g << 8) + (0 | r); + return _this; + } + var _proto = Color.prototype; + _proto.clone = function clone() { + var ret = new Color(); + ret._val = this._val; + return ret; + }; + _proto.equals = function equals(other) { + return other && this._val === other._val; + }; + _proto.lerp = function lerp(to, ratio, out) { + out = out || new Color(); + var r = this.r; + var g = this.g; + var b = this.b; + var a = this.a; + out.r = r + (to.r - r) * ratio; + out.g = g + (to.g - g) * ratio; + out.b = b + (to.b - b) * ratio; + out.a = a + (to.a - a) * ratio; + return out; + }; + _proto.toString = function toString() { + return "rgba(" + this.r.toFixed() + ", " + this.g.toFixed() + ", " + this.b.toFixed() + ", " + this.a.toFixed() + ")"; + }; + _proto.getR = function getR() { + return 255 & this._val; + }; + _proto.setR = function setR(red) { + red = ~~_misc["default"].clampf(red, 0, 255); + this._val = (4294967040 & this._val | red) >>> 0; + return this; + }; + _proto.getG = function getG() { + return (65280 & this._val) >> 8; + }; + _proto.setG = function setG(green) { + green = ~~_misc["default"].clampf(green, 0, 255); + this._val = (4294902015 & this._val | green << 8) >>> 0; + return this; + }; + _proto.getB = function getB() { + return (16711680 & this._val) >> 16; + }; + _proto.setB = function setB(blue) { + blue = ~~_misc["default"].clampf(blue, 0, 255); + this._val = (4278255615 & this._val | blue << 16) >>> 0; + return this; + }; + _proto.getA = function getA() { + return (4278190080 & this._val) >>> 24; + }; + _proto.setA = function setA(alpha) { + alpha = ~~_misc["default"].clampf(alpha, 0, 255); + this._val = (16777215 & this._val | alpha << 24) >>> 0; + return this; + }; + _proto.toCSS = function toCSS(opt) { + return opt && "rgba" !== opt ? "rgb" === opt ? "rgb(" + this.r + "," + this.g + "," + this.b + ")" : "#" + this.toHEX(opt) : "rgba(" + this.r + "," + this.g + "," + this.b + "," + (this.a / 255).toFixed(2) + ")"; + }; + _proto.fromHEX = function fromHEX(hexString) { + hexString = 0 === hexString.indexOf("#") ? hexString.substring(1) : hexString; + var r = parseInt(hexString.substr(0, 2), 16) || 0; + var g = parseInt(hexString.substr(2, 2), 16) || 0; + var b = parseInt(hexString.substr(4, 2), 16) || 0; + var a = parseInt(hexString.substr(6, 2), 16) || 255; + this._val = (a << 24 >>> 0) + (b << 16) + (g << 8) + r; + return this; + }; + _proto.toHEX = function toHEX(fmt) { + var prefix = "0"; + var hex = [ (this.r < 16 ? prefix : "") + this.r.toString(16), (this.g < 16 ? prefix : "") + this.g.toString(16), (this.b < 16 ? prefix : "") + this.b.toString(16) ]; + if ("#rgb" === fmt) { + hex[0] = hex[0][0]; + hex[1] = hex[1][0]; + hex[2] = hex[2][0]; + } else "#rrggbbaa" === fmt && hex.push((this.a < 16 ? prefix : "") + this.a.toString(16)); + return hex.join(""); + }; + _proto.toRGBValue = function toRGBValue() { + return 16777215 & this._val; + }; + _proto.fromHSV = function fromHSV(h, s, v) { + var r, g, b; + if (0 === s) r = g = b = v; else if (0 === v) r = g = b = 0; else { + 1 === h && (h = 0); + h *= 6; + var i = Math.floor(h); + var f = h - i; + var p = v * (1 - s); + var q = v * (1 - s * f); + var t = v * (1 - s * (1 - f)); + switch (i) { + case 0: + r = v; + g = t; + b = p; + break; + + case 1: + r = q; + g = v; + b = p; + break; + + case 2: + r = p; + g = v; + b = t; + break; + + case 3: + r = p; + g = q; + b = v; + break; + + case 4: + r = t; + g = p; + b = v; + break; + + case 5: + r = v; + g = p; + b = q; + } + } + r *= 255; + g *= 255; + b *= 255; + this._val = (this.a << 24 >>> 0) + (b << 16) + (g << 8) + (0 | r); + return this; + }; + _proto.toHSV = function toHSV() { + var r = this.r / 255; + var g = this.g / 255; + var b = this.b / 255; + var hsv = { + h: 0, + s: 0, + v: 0 + }; + var max = Math.max(r, g, b); + var min = Math.min(r, g, b); + var delta = 0; + hsv.v = max; + hsv.s = max ? (max - min) / max : 0; + if (hsv.s) { + delta = max - min; + hsv.h = r === max ? (g - b) / delta : g === max ? 2 + (b - r) / delta : 4 + (r - g) / delta; + hsv.h /= 6; + hsv.h < 0 && (hsv.h += 1); + } else hsv.h = 0; + return hsv; + }; + _proto.set = function set(color) { + if (color._val) this._val = color._val; else { + this.r = color.r; + this.g = color.g; + this.b = color.b; + this.a = color.a; + } + return this; + }; + _proto._fastSetA = function _fastSetA(alpha) { + this._val = (16777215 & this._val | alpha << 24) >>> 0; + }; + _proto.multiply = function multiply(other) { + var r = (255 & this._val) * other.r >> 8; + var g = (65280 & this._val) * other.g >> 8; + var b = (16711680 & this._val) * other.b >> 8; + var a = ((4278190080 & this._val) >>> 8) * other.a; + this._val = 4278190080 & a | 16711680 & b | 65280 & g | 255 & r; + return this; + }; + _createClass(Color, [ { + key: "r", + get: function get() { + return this.getR(); + }, + set: function set(v) { + this.setR(v); + } + }, { + key: "g", + get: function get() { + return this.getG(); + }, + set: function set(v) { + this.setG(v); + } + }, { + key: "b", + get: function get() { + return this.getB(); + }, + set: function set(v) { + this.setB(v); + } + }, { + key: "a", + get: function get() { + return this.getA(); + }, + set: function set(v) { + this.setA(v); + } + } ], [ { + key: "WHITE", + get: function get() { + return new Color(255, 255, 255, 255); + } + }, { + key: "BLACK", + get: function get() { + return new Color(0, 0, 0, 255); + } + }, { + key: "TRANSPARENT", + get: function get() { + return new Color(0, 0, 0, 0); + } + }, { + key: "GRAY", + get: function get() { + return new Color(127.5, 127.5, 127.5); + } + }, { + key: "RED", + get: function get() { + return new Color(255, 0, 0); + } + }, { + key: "GREEN", + get: function get() { + return new Color(0, 255, 0); + } + }, { + key: "BLUE", + get: function get() { + return new Color(0, 0, 255); + } + }, { + key: "YELLOW", + get: function get() { + return new Color(255, 235, 4); + } + }, { + key: "ORANGE", + get: function get() { + return new Color(255, 127, 0); + } + }, { + key: "CYAN", + get: function get() { + return new Color(0, 255, 255); + } + }, { + key: "MAGENTA", + get: function get() { + return new Color(255, 0, 255); + } + } ]); + return Color; + })(_valueType["default"]); + exports["default"] = Color; + Color.div = Color.divide; + Color.sub = Color.subtract; + Color.mul = Color.multiply; + Color.WHITE_R = Color.WHITE; + Color.BLACK_R = Color.BLACK; + Color.TRANSPARENT_R = Color.TRANSPARENT; + Color.GRAY_R = Color.GRAY; + Color.RED_R = Color.RED; + Color.GREEN_R = Color.GREEN; + Color.BLUE_R = Color.BLUE; + Color.YELLOW_R = Color.YELLOW; + Color.ORANGE_R = Color.ORANGE; + Color.CYAN_R = Color.CYAN; + Color.MAGENTA_R = Color.MAGENTA; + _CCClass["default"].fastDefine("cc.Color", Color, { + r: 0, + g: 0, + b: 0, + a: 255 + }); + cc.Color = Color; + cc.color = function color(r, g, b, a) { + if ("string" === typeof r) { + var result = new Color(); + return result.fromHEX(r); + } + if ("object" === typeof r) return new Color(r.r, r.g, r.b, r.a); + return new Color(r, g, b, a); + }; + module.exports = exports["default"]; + }), { + "../platform/CCClass": 121, + "../utils/misc": 205, + "./value-type": 228 + } ], + 220: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + var _exportNames = { + Vec2: true, + Vec3: true, + Vec4: true, + Mat4: true, + Mat3: true, + Rect: true, + Size: true, + Color: true, + Quat: true, + Trs: true + }; + exports.Vec4 = exports.Vec3 = exports.Vec2 = exports.Trs = exports.Size = exports.Rect = exports.Quat = exports.Mat4 = exports.Mat3 = exports.Color = void 0; + var _vec = _interopRequireDefault(require("./vec2")); + exports.Vec2 = _vec["default"]; + var _vec2 = _interopRequireDefault(require("./vec3")); + exports.Vec3 = _vec2["default"]; + var _vec3 = _interopRequireDefault(require("./vec4")); + exports.Vec4 = _vec3["default"]; + var _mat = _interopRequireDefault(require("./mat4")); + exports.Mat4 = _mat["default"]; + var _mat2 = _interopRequireDefault(require("./mat3")); + exports.Mat3 = _mat2["default"]; + var _rect = _interopRequireDefault(require("./rect")); + exports.Rect = _rect["default"]; + var _size = _interopRequireDefault(require("./size")); + exports.Size = _size["default"]; + var _color = _interopRequireDefault(require("./color")); + exports.Color = _color["default"]; + var _quat = _interopRequireDefault(require("./quat")); + exports.Quat = _quat["default"]; + var _trs = _interopRequireDefault(require("./trs")); + exports.Trs = _trs["default"]; + var _utils = require("./utils"); + Object.keys(_utils).forEach((function(key) { + if ("default" === key || "__esModule" === key) return; + if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; + if (key in exports && exports[key] === _utils[key]) return; + exports[key] = _utils[key]; + })); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + cc.math = module.exports; + }), { + "./color": 219, + "./mat3": 221, + "./mat4": 222, + "./quat": 223, + "./rect": 224, + "./size": 225, + "./trs": 226, + "./utils": 227, + "./vec2": 229, + "./vec3": 230, + "./vec4": 231 + } ], + 221: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _utils = require("../value-types/utils"); + var _vec = _interopRequireDefault(require("./vec3")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var Mat3 = (function() { + Mat3.create = function create(m00, m01, m02, m03, m04, m05, m06, m07, m08) { + void 0 === m00 && (m00 = 1); + void 0 === m01 && (m01 = 0); + void 0 === m02 && (m02 = 0); + void 0 === m03 && (m03 = 0); + void 0 === m04 && (m04 = 1); + void 0 === m05 && (m05 = 0); + void 0 === m06 && (m06 = 0); + void 0 === m07 && (m07 = 0); + void 0 === m08 && (m08 = 1); + return new Mat3(m00, m01, m02, m03, m04, m05, m06, m07, m08); + }; + Mat3.clone = function clone(a) { + var am = a.m; + return new Mat3(am[0], am[1], am[2], am[3], am[4], am[5], am[6], am[7], am[8]); + }; + Mat3.copy = function copy(out, a) { + out.m.set(a.m); + return out; + }; + Mat3.set = function set(out, m00, m01, m02, m10, m11, m12, m20, m21, m22) { + var outm = out.m; + outm[0] = m00; + outm[1] = m01; + outm[2] = m02; + outm[3] = m10; + outm[4] = m11; + outm[5] = m12; + outm[6] = m20; + outm[7] = m21; + outm[8] = m22; + return out; + }; + Mat3.identity = function identity(out) { + var outm = out.m; + outm[0] = 1; + outm[1] = 0; + outm[2] = 0; + outm[3] = 0; + outm[4] = 1; + outm[5] = 0; + outm[6] = 0; + outm[7] = 0; + outm[8] = 1; + return out; + }; + Mat3.transpose = function transpose(out, a) { + var am = a.m, outm = out.m; + if (out === a) { + var a01 = am[1], a02 = am[2], a12 = am[5]; + outm[1] = am[3]; + outm[2] = am[6]; + outm[3] = a01; + outm[5] = am[7]; + outm[6] = a02; + outm[7] = a12; + } else { + outm[0] = am[0]; + outm[1] = am[3]; + outm[2] = am[6]; + outm[3] = am[1]; + outm[4] = am[4]; + outm[5] = am[7]; + outm[6] = am[2]; + outm[7] = am[5]; + outm[8] = am[8]; + } + return out; + }; + Mat3.invert = function invert(out, a) { + var am = a.m, outm = out.m; + var a00 = am[0], a01 = am[1], a02 = am[2], a10 = am[3], a11 = am[4], a12 = am[5], a20 = am[6], a21 = am[7], a22 = am[8]; + var b01 = a22 * a11 - a12 * a21; + var b11 = -a22 * a10 + a12 * a20; + var b21 = a21 * a10 - a11 * a20; + var det = a00 * b01 + a01 * b11 + a02 * b21; + if (!det) return out; + det = 1 / det; + outm[0] = b01 * det; + outm[1] = (-a22 * a01 + a02 * a21) * det; + outm[2] = (a12 * a01 - a02 * a11) * det; + outm[3] = b11 * det; + outm[4] = (a22 * a00 - a02 * a20) * det; + outm[5] = (-a12 * a00 + a02 * a10) * det; + outm[6] = b21 * det; + outm[7] = (-a21 * a00 + a01 * a20) * det; + outm[8] = (a11 * a00 - a01 * a10) * det; + return out; + }; + Mat3.adjoint = function adjoint(out, a) { + var am = a.m, outm = out.m; + var a00 = am[0], a01 = am[1], a02 = am[2], a10 = am[3], a11 = am[4], a12 = am[5], a20 = am[6], a21 = am[7], a22 = am[8]; + outm[0] = a11 * a22 - a12 * a21; + outm[1] = a02 * a21 - a01 * a22; + outm[2] = a01 * a12 - a02 * a11; + outm[3] = a12 * a20 - a10 * a22; + outm[4] = a00 * a22 - a02 * a20; + outm[5] = a02 * a10 - a00 * a12; + outm[6] = a10 * a21 - a11 * a20; + outm[7] = a01 * a20 - a00 * a21; + outm[8] = a00 * a11 - a01 * a10; + return out; + }; + Mat3.determinant = function determinant(a) { + var am = a.m; + var a00 = am[0], a01 = am[1], a02 = am[2], a10 = am[3], a11 = am[4], a12 = am[5], a20 = am[6], a21 = am[7], a22 = am[8]; + return a00 * (a22 * a11 - a12 * a21) + a01 * (-a22 * a10 + a12 * a20) + a02 * (a21 * a10 - a11 * a20); + }; + Mat3.multiply = function multiply(out, a, b) { + var am = a.m, bm = b.m, outm = out.m; + var a00 = am[0], a01 = am[1], a02 = am[2], a10 = am[3], a11 = am[4], a12 = am[5], a20 = am[6], a21 = am[7], a22 = am[8]; + var b00 = bm[0], b01 = bm[1], b02 = bm[2]; + var b10 = bm[3], b11 = bm[4], b12 = bm[5]; + var b20 = bm[6], b21 = bm[7], b22 = bm[8]; + outm[0] = b00 * a00 + b01 * a10 + b02 * a20; + outm[1] = b00 * a01 + b01 * a11 + b02 * a21; + outm[2] = b00 * a02 + b01 * a12 + b02 * a22; + outm[3] = b10 * a00 + b11 * a10 + b12 * a20; + outm[4] = b10 * a01 + b11 * a11 + b12 * a21; + outm[5] = b10 * a02 + b11 * a12 + b12 * a22; + outm[6] = b20 * a00 + b21 * a10 + b22 * a20; + outm[7] = b20 * a01 + b21 * a11 + b22 * a21; + outm[8] = b20 * a02 + b21 * a12 + b22 * a22; + return out; + }; + Mat3.multiplyMat4 = function multiplyMat4(out, a, b) { + var am = a.m, bm = b.m, outm = out.m; + var a00 = am[0], a01 = am[1], a02 = am[2], a10 = am[3], a11 = am[4], a12 = am[5], a20 = am[6], a21 = am[7], a22 = am[8]; + var b00 = bm[0], b01 = bm[1], b02 = bm[2]; + var b10 = bm[4], b11 = bm[5], b12 = bm[6]; + var b20 = bm[8], b21 = bm[9], b22 = bm[10]; + outm[0] = b00 * a00 + b01 * a10 + b02 * a20; + outm[1] = b00 * a01 + b01 * a11 + b02 * a21; + outm[2] = b00 * a02 + b01 * a12 + b02 * a22; + outm[3] = b10 * a00 + b11 * a10 + b12 * a20; + outm[4] = b10 * a01 + b11 * a11 + b12 * a21; + outm[5] = b10 * a02 + b11 * a12 + b12 * a22; + outm[6] = b20 * a00 + b21 * a10 + b22 * a20; + outm[7] = b20 * a01 + b21 * a11 + b22 * a21; + outm[8] = b20 * a02 + b21 * a12 + b22 * a22; + return out; + }; + Mat3.translate = function translate(out, a, v) { + var am = a.m, outm = out.m; + var a00 = am[0], a01 = am[1], a02 = am[2], a10 = am[3], a11 = am[4], a12 = am[5], a20 = am[6], a21 = am[7], a22 = am[8]; + var x = v.x, y = v.y; + outm[0] = a00; + outm[1] = a01; + outm[2] = a02; + outm[3] = a10; + outm[4] = a11; + outm[5] = a12; + outm[6] = x * a00 + y * a10 + a20; + outm[7] = x * a01 + y * a11 + a21; + outm[8] = x * a02 + y * a12 + a22; + return out; + }; + Mat3.rotate = function rotate(out, a, rad) { + var am = a.m, outm = out.m; + var a00 = am[0], a01 = am[1], a02 = am[2], a10 = am[3], a11 = am[4], a12 = am[5], a20 = am[6], a21 = am[7], a22 = am[8]; + var s = Math.sin(rad); + var c = Math.cos(rad); + outm[0] = c * a00 + s * a10; + outm[1] = c * a01 + s * a11; + outm[2] = c * a02 + s * a12; + outm[3] = c * a10 - s * a00; + outm[4] = c * a11 - s * a01; + outm[5] = c * a12 - s * a02; + outm[6] = a20; + outm[7] = a21; + outm[8] = a22; + return out; + }; + Mat3.scale = function scale(out, a, v) { + var x = v.x, y = v.y; + var am = a.m, outm = out.m; + outm[0] = x * am[0]; + outm[1] = x * am[1]; + outm[2] = x * am[2]; + outm[3] = y * am[3]; + outm[4] = y * am[4]; + outm[5] = y * am[5]; + outm[6] = am[6]; + outm[7] = am[7]; + outm[8] = am[8]; + return out; + }; + Mat3.fromMat4 = function fromMat4(out, a) { + var am = a.m, outm = out.m; + outm[0] = am[0]; + outm[1] = am[1]; + outm[2] = am[2]; + outm[3] = am[4]; + outm[4] = am[5]; + outm[5] = am[6]; + outm[6] = am[8]; + outm[7] = am[9]; + outm[8] = am[10]; + return out; + }; + Mat3.fromTranslation = function fromTranslation(out, v) { + var outm = out.m; + outm[0] = 1; + outm[1] = 0; + outm[2] = 0; + outm[3] = 0; + outm[4] = 1; + outm[5] = 0; + outm[6] = v.x; + outm[7] = v.y; + outm[8] = 1; + return out; + }; + Mat3.fromRotation = function fromRotation(out, rad) { + var s = Math.sin(rad), c = Math.cos(rad); + var outm = out.m; + outm[0] = c; + outm[1] = s; + outm[2] = 0; + outm[3] = -s; + outm[4] = c; + outm[5] = 0; + outm[6] = 0; + outm[7] = 0; + outm[8] = 1; + return out; + }; + Mat3.fromScaling = function fromScaling(out, v) { + var outm = out.m; + outm[0] = v.x; + outm[1] = 0; + outm[2] = 0; + outm[3] = 0; + outm[4] = v.y; + outm[5] = 0; + outm[6] = 0; + outm[7] = 0; + outm[8] = 1; + return out; + }; + Mat3.fromQuat = function fromQuat(out, q) { + var outm = out.m; + var x = q.x, y = q.y, z = q.z, w = q.w; + var x2 = x + x; + var y2 = y + y; + var z2 = z + z; + var xx = x * x2; + var yx = y * x2; + var yy = y * y2; + var zx = z * x2; + var zy = z * y2; + var zz = z * z2; + var wx = w * x2; + var wy = w * y2; + var wz = w * z2; + outm[0] = 1 - yy - zz; + outm[3] = yx - wz; + outm[6] = zx + wy; + outm[1] = yx + wz; + outm[4] = 1 - xx - zz; + outm[7] = zy - wx; + outm[2] = zx - wy; + outm[5] = zy + wx; + outm[8] = 1 - xx - yy; + return out; + }; + Mat3.fromViewUp = function fromViewUp(out, view, up) { + var _fromViewUpIIFE = (function() { + var default_up = new _vec["default"](0, 1, 0); + var x = new _vec["default"](); + var y = new _vec["default"](); + return function(out, view, up) { + if (_vec["default"].lengthSqr(view) < _utils.EPSILON * _utils.EPSILON) { + Mat3.identity(out); + return out; + } + up = up || default_up; + _vec["default"].normalize(x, _vec["default"].cross(x, up, view)); + if (_vec["default"].lengthSqr(x) < _utils.EPSILON * _utils.EPSILON) { + Mat3.identity(out); + return out; + } + _vec["default"].cross(y, view, x); + Mat3.set(out, x.x, x.y, x.z, y.x, y.y, y.z, view.x, view.y, view.z); + return out; + }; + })(); + return _fromViewUpIIFE(out, view, up); + }; + Mat3.normalFromMat4 = function normalFromMat4(out, a) { + var am = a.m, outm = out.m; + var a00 = am[0], a01 = am[1], a02 = am[2], a03 = am[3], a10 = am[4], a11 = am[5], a12 = am[6], a13 = am[7], a20 = am[8], a21 = am[9], a22 = am[10], a23 = am[11], a30 = am[12], a31 = am[13], a32 = am[14], a33 = am[15]; + var b00 = a00 * a11 - a01 * a10; + var b01 = a00 * a12 - a02 * a10; + var b02 = a00 * a13 - a03 * a10; + var b03 = a01 * a12 - a02 * a11; + var b04 = a01 * a13 - a03 * a11; + var b05 = a02 * a13 - a03 * a12; + var b06 = a20 * a31 - a21 * a30; + var b07 = a20 * a32 - a22 * a30; + var b08 = a20 * a33 - a23 * a30; + var b09 = a21 * a32 - a22 * a31; + var b10 = a21 * a33 - a23 * a31; + var b11 = a22 * a33 - a23 * a32; + var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06; + if (!det) return out; + det = 1 / det; + outm[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det; + outm[1] = (a12 * b08 - a10 * b11 - a13 * b07) * det; + outm[2] = (a10 * b10 - a11 * b08 + a13 * b06) * det; + outm[3] = (a02 * b10 - a01 * b11 - a03 * b09) * det; + outm[4] = (a00 * b11 - a02 * b08 + a03 * b07) * det; + outm[5] = (a01 * b08 - a00 * b10 - a03 * b06) * det; + outm[6] = (a31 * b05 - a32 * b04 + a33 * b03) * det; + outm[7] = (a32 * b02 - a30 * b05 - a33 * b01) * det; + outm[8] = (a30 * b04 - a31 * b02 + a33 * b00) * det; + return out; + }; + Mat3.frob = function frob(a) { + var am = a.m; + return Math.sqrt(Math.pow(am[0], 2) + Math.pow(am[1], 2) + Math.pow(am[2], 2) + Math.pow(am[3], 2) + Math.pow(am[4], 2) + Math.pow(am[5], 2) + Math.pow(am[6], 2) + Math.pow(am[7], 2) + Math.pow(am[8], 2)); + }; + Mat3.add = function add(out, a, b) { + var am = a.m, bm = b.m, outm = out.m; + outm[0] = am[0] + bm[0]; + outm[1] = am[1] + bm[1]; + outm[2] = am[2] + bm[2]; + outm[3] = am[3] + bm[3]; + outm[4] = am[4] + bm[4]; + outm[5] = am[5] + bm[5]; + outm[6] = am[6] + bm[6]; + outm[7] = am[7] + bm[7]; + outm[8] = am[8] + bm[8]; + return out; + }; + Mat3.subtract = function subtract(out, a, b) { + var am = a.m, bm = b.m, outm = out.m; + outm[0] = am[0] - bm[0]; + outm[1] = am[1] - bm[1]; + outm[2] = am[2] - bm[2]; + outm[3] = am[3] - bm[3]; + outm[4] = am[4] - bm[4]; + outm[5] = am[5] - bm[5]; + outm[6] = am[6] - bm[6]; + outm[7] = am[7] - bm[7]; + outm[8] = am[8] - bm[8]; + return out; + }; + Mat3.multiplyScalar = function multiplyScalar(out, a, b) { + var am = a.m, outm = out.m; + outm[0] = am[0] * b; + outm[1] = am[1] * b; + outm[2] = am[2] * b; + outm[3] = am[3] * b; + outm[4] = am[4] * b; + outm[5] = am[5] * b; + outm[6] = am[6] * b; + outm[7] = am[7] * b; + outm[8] = am[8] * b; + return out; + }; + Mat3.multiplyScalarAndAdd = function multiplyScalarAndAdd(out, a, b, scale) { + var am = a.m, bm = b.m, outm = out.m; + outm[0] = am[0] + bm[0] * scale; + outm[1] = am[1] + bm[1] * scale; + outm[2] = am[2] + bm[2] * scale; + outm[3] = am[3] + bm[3] * scale; + outm[4] = am[4] + bm[4] * scale; + outm[5] = am[5] + bm[5] * scale; + outm[6] = am[6] + bm[6] * scale; + outm[7] = am[7] + bm[7] * scale; + outm[8] = am[8] + bm[8] * scale; + return out; + }; + Mat3.exactEquals = function exactEquals(a, b) { + var am = a.m, bm = b.m; + return am[0] === bm[0] && am[1] === bm[1] && am[2] === bm[2] && am[3] === bm[3] && am[4] === bm[4] && am[5] === bm[5] && am[6] === bm[6] && am[7] === bm[7] && am[8] === bm[8]; + }; + Mat3.equals = function equals(a, b) { + var am = a.m, bm = b.m; + var a0 = am[0], a1 = am[1], a2 = am[2], a3 = am[3], a4 = am[4], a5 = am[5], a6 = am[6], a7 = am[7], a8 = am[8]; + var b0 = bm[0], b1 = bm[1], b2 = bm[2], b3 = bm[3], b4 = bm[4], b5 = bm[5], b6 = bm[6], b7 = bm[7], b8 = bm[8]; + return Math.abs(a0 - b0) <= _utils.EPSILON * Math.max(1, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= _utils.EPSILON * Math.max(1, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= _utils.EPSILON * Math.max(1, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= _utils.EPSILON * Math.max(1, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= _utils.EPSILON * Math.max(1, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= _utils.EPSILON * Math.max(1, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= _utils.EPSILON * Math.max(1, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= _utils.EPSILON * Math.max(1, Math.abs(a7), Math.abs(b7)) && Math.abs(a8 - b8) <= _utils.EPSILON * Math.max(1, Math.abs(a8), Math.abs(b8)); + }; + Mat3.toArray = function toArray(out, mat, ofs) { + void 0 === ofs && (ofs = 0); + var m = mat.m; + for (var i = 0; i < 9; i++) out[ofs + i] = m[i]; + return out; + }; + Mat3.fromArray = function fromArray(out, arr, ofs) { + void 0 === ofs && (ofs = 0); + var m = out.m; + for (var i = 0; i < 9; i++) m[i] = arr[ofs + i]; + return out; + }; + function Mat3(m00, m01, m02, m03, m04, m05, m06, m07, m08) { + void 0 === m00 && (m00 = 1); + void 0 === m01 && (m01 = 0); + void 0 === m02 && (m02 = 0); + void 0 === m03 && (m03 = 0); + void 0 === m04 && (m04 = 1); + void 0 === m05 && (m05 = 0); + void 0 === m06 && (m06 = 0); + void 0 === m07 && (m07 = 0); + void 0 === m08 && (m08 = 1); + this.m = void 0; + if (m00 instanceof _utils.FLOAT_ARRAY_TYPE) this.m = m00; else { + this.m = new _utils.FLOAT_ARRAY_TYPE(9); + var m = this.m; + m[0] = m00; + m[1] = m01; + m[2] = m02; + m[3] = m03; + m[4] = m04; + m[5] = m05; + m[6] = m06; + m[7] = m07; + m[8] = m08; + } + } + var _proto = Mat3.prototype; + _proto.toString = function toString() { + var am = this.m; + return "mat3(" + am[0] + ", " + am[1] + ", " + am[2] + ", " + am[3] + ", " + am[4] + ", " + am[5] + ", " + am[6] + ", " + am[7] + ", " + am[8] + ")"; + }; + return Mat3; + })(); + exports["default"] = Mat3; + Mat3.sub = Mat3.subtract; + Mat3.mul = Mat3.multiply; + Mat3.IDENTITY = Object.freeze(new Mat3()); + cc.Mat3 = Mat3; + module.exports = exports["default"]; + }), { + "../value-types/utils": 227, + "./vec3": 230 + } ], + 222: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _valueType = _interopRequireDefault(require("./value-type")); + var _CCClass = _interopRequireDefault(require("../platform/CCClass")); + var _vec = _interopRequireDefault(require("./vec3")); + var _quat = _interopRequireDefault(require("./quat")); + var _utils = require("./utils"); + var _mat = _interopRequireDefault(require("./mat3")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var _a00 = 0; + var _a01 = 0; + var _a02 = 0; + var _a03 = 0; + var _a10 = 0; + var _a11 = 0; + var _a12 = 0; + var _a13 = 0; + var _a20 = 0; + var _a21 = 0; + var _a22 = 0; + var _a23 = 0; + var _a30 = 0; + var _a31 = 0; + var _a32 = 0; + var _a33 = 0; + var Mat4 = (function(_ValueType) { + _inheritsLoose(Mat4, _ValueType); + var _proto = Mat4.prototype; + _proto.mul = function mul(m, out) { + return Mat4.multiply(out || new Mat4(), this, m); + }; + _proto.mulScalar = function mulScalar(num, out) { + Mat4.multiplyScalar(out || new Mat4(), this, num); + }; + _proto.sub = function sub(m, out) { + Mat4.subtract(out || new Mat4(), this, m); + }; + Mat4.clone = function clone(a) { + var m = a.m; + return new Mat4(m[0], m[1], m[2], m[3], m[4], m[5], m[6], m[7], m[8], m[9], m[10], m[11], m[12], m[13], m[14], m[15]); + }; + Mat4.copy = function copy(out, a) { + var m = out.m, am = a.m; + m[0] = am[0]; + m[1] = am[1]; + m[2] = am[2]; + m[3] = am[3]; + m[4] = am[4]; + m[5] = am[5]; + m[6] = am[6]; + m[7] = am[7]; + m[8] = am[8]; + m[9] = am[9]; + m[10] = am[10]; + m[11] = am[11]; + m[12] = am[12]; + m[13] = am[13]; + m[14] = am[14]; + m[15] = am[15]; + return out; + }; + Mat4.set = function set(out, m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) { + var m = out.m; + m[0] = m00; + m[1] = m01; + m[2] = m02; + m[3] = m03; + m[4] = m10; + m[5] = m11; + m[6] = m12; + m[7] = m13; + m[8] = m20; + m[9] = m21; + m[10] = m22; + m[11] = m23; + m[12] = m30; + m[13] = m31; + m[14] = m32; + m[15] = m33; + return out; + }; + Mat4.identity = function identity(out) { + var m = out.m; + m[0] = 1; + m[1] = 0; + m[2] = 0; + m[3] = 0; + m[4] = 0; + m[5] = 1; + m[6] = 0; + m[7] = 0; + m[8] = 0; + m[9] = 0; + m[10] = 1; + m[11] = 0; + m[12] = 0; + m[13] = 0; + m[14] = 0; + m[15] = 1; + return out; + }; + Mat4.transpose = function transpose(out, a) { + var m = out.m, am = a.m; + if (out === a) { + var a01 = am[1], a02 = am[2], a03 = am[3], a12 = am[6], a13 = am[7], a23 = am[11]; + m[1] = am[4]; + m[2] = am[8]; + m[3] = am[12]; + m[4] = a01; + m[6] = am[9]; + m[7] = am[13]; + m[8] = a02; + m[9] = a12; + m[11] = am[14]; + m[12] = a03; + m[13] = a13; + m[14] = a23; + } else { + m[0] = am[0]; + m[1] = am[4]; + m[2] = am[8]; + m[3] = am[12]; + m[4] = am[1]; + m[5] = am[5]; + m[6] = am[9]; + m[7] = am[13]; + m[8] = am[2]; + m[9] = am[6]; + m[10] = am[10]; + m[11] = am[14]; + m[12] = am[3]; + m[13] = am[7]; + m[14] = am[11]; + m[15] = am[15]; + } + return out; + }; + Mat4.invert = function invert(out, a) { + var am = a.m; + _a00 = am[0]; + _a01 = am[1]; + _a02 = am[2]; + _a03 = am[3]; + _a10 = am[4]; + _a11 = am[5]; + _a12 = am[6]; + _a13 = am[7]; + _a20 = am[8]; + _a21 = am[9]; + _a22 = am[10]; + _a23 = am[11]; + _a30 = am[12]; + _a31 = am[13]; + _a32 = am[14]; + _a33 = am[15]; + var b00 = _a00 * _a11 - _a01 * _a10; + var b01 = _a00 * _a12 - _a02 * _a10; + var b02 = _a00 * _a13 - _a03 * _a10; + var b03 = _a01 * _a12 - _a02 * _a11; + var b04 = _a01 * _a13 - _a03 * _a11; + var b05 = _a02 * _a13 - _a03 * _a12; + var b06 = _a20 * _a31 - _a21 * _a30; + var b07 = _a20 * _a32 - _a22 * _a30; + var b08 = _a20 * _a33 - _a23 * _a30; + var b09 = _a21 * _a32 - _a22 * _a31; + var b10 = _a21 * _a33 - _a23 * _a31; + var b11 = _a22 * _a33 - _a23 * _a32; + var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06; + if (0 === det) return null; + det = 1 / det; + var m = out.m; + m[0] = (_a11 * b11 - _a12 * b10 + _a13 * b09) * det; + m[1] = (_a02 * b10 - _a01 * b11 - _a03 * b09) * det; + m[2] = (_a31 * b05 - _a32 * b04 + _a33 * b03) * det; + m[3] = (_a22 * b04 - _a21 * b05 - _a23 * b03) * det; + m[4] = (_a12 * b08 - _a10 * b11 - _a13 * b07) * det; + m[5] = (_a00 * b11 - _a02 * b08 + _a03 * b07) * det; + m[6] = (_a32 * b02 - _a30 * b05 - _a33 * b01) * det; + m[7] = (_a20 * b05 - _a22 * b02 + _a23 * b01) * det; + m[8] = (_a10 * b10 - _a11 * b08 + _a13 * b06) * det; + m[9] = (_a01 * b08 - _a00 * b10 - _a03 * b06) * det; + m[10] = (_a30 * b04 - _a31 * b02 + _a33 * b00) * det; + m[11] = (_a21 * b02 - _a20 * b04 - _a23 * b00) * det; + m[12] = (_a11 * b07 - _a10 * b09 - _a12 * b06) * det; + m[13] = (_a00 * b09 - _a01 * b07 + _a02 * b06) * det; + m[14] = (_a31 * b01 - _a30 * b03 - _a32 * b00) * det; + m[15] = (_a20 * b03 - _a21 * b01 + _a22 * b00) * det; + return out; + }; + Mat4.determinant = function determinant(a) { + var m = a.m; + _a00 = m[0]; + _a01 = m[1]; + _a02 = m[2]; + _a03 = m[3]; + _a10 = m[4]; + _a11 = m[5]; + _a12 = m[6]; + _a13 = m[7]; + _a20 = m[8]; + _a21 = m[9]; + _a22 = m[10]; + _a23 = m[11]; + _a30 = m[12]; + _a31 = m[13]; + _a32 = m[14]; + _a33 = m[15]; + var b00 = _a00 * _a11 - _a01 * _a10; + var b01 = _a00 * _a12 - _a02 * _a10; + var b02 = _a00 * _a13 - _a03 * _a10; + var b03 = _a01 * _a12 - _a02 * _a11; + var b04 = _a01 * _a13 - _a03 * _a11; + var b05 = _a02 * _a13 - _a03 * _a12; + var b06 = _a20 * _a31 - _a21 * _a30; + var b07 = _a20 * _a32 - _a22 * _a30; + var b08 = _a20 * _a33 - _a23 * _a30; + var b09 = _a21 * _a32 - _a22 * _a31; + var b10 = _a21 * _a33 - _a23 * _a31; + var b11 = _a22 * _a33 - _a23 * _a32; + return b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06; + }; + Mat4.multiply = function multiply(out, a, b) { + var m = out.m, am = a.m, bm = b.m; + _a00 = am[0]; + _a01 = am[1]; + _a02 = am[2]; + _a03 = am[3]; + _a10 = am[4]; + _a11 = am[5]; + _a12 = am[6]; + _a13 = am[7]; + _a20 = am[8]; + _a21 = am[9]; + _a22 = am[10]; + _a23 = am[11]; + _a30 = am[12]; + _a31 = am[13]; + _a32 = am[14]; + _a33 = am[15]; + var b0 = bm[0], b1 = bm[1], b2 = bm[2], b3 = bm[3]; + m[0] = b0 * _a00 + b1 * _a10 + b2 * _a20 + b3 * _a30; + m[1] = b0 * _a01 + b1 * _a11 + b2 * _a21 + b3 * _a31; + m[2] = b0 * _a02 + b1 * _a12 + b2 * _a22 + b3 * _a32; + m[3] = b0 * _a03 + b1 * _a13 + b2 * _a23 + b3 * _a33; + b0 = bm[4]; + b1 = bm[5]; + b2 = bm[6]; + b3 = bm[7]; + m[4] = b0 * _a00 + b1 * _a10 + b2 * _a20 + b3 * _a30; + m[5] = b0 * _a01 + b1 * _a11 + b2 * _a21 + b3 * _a31; + m[6] = b0 * _a02 + b1 * _a12 + b2 * _a22 + b3 * _a32; + m[7] = b0 * _a03 + b1 * _a13 + b2 * _a23 + b3 * _a33; + b0 = bm[8]; + b1 = bm[9]; + b2 = bm[10]; + b3 = bm[11]; + m[8] = b0 * _a00 + b1 * _a10 + b2 * _a20 + b3 * _a30; + m[9] = b0 * _a01 + b1 * _a11 + b2 * _a21 + b3 * _a31; + m[10] = b0 * _a02 + b1 * _a12 + b2 * _a22 + b3 * _a32; + m[11] = b0 * _a03 + b1 * _a13 + b2 * _a23 + b3 * _a33; + b0 = bm[12]; + b1 = bm[13]; + b2 = bm[14]; + b3 = bm[15]; + m[12] = b0 * _a00 + b1 * _a10 + b2 * _a20 + b3 * _a30; + m[13] = b0 * _a01 + b1 * _a11 + b2 * _a21 + b3 * _a31; + m[14] = b0 * _a02 + b1 * _a12 + b2 * _a22 + b3 * _a32; + m[15] = b0 * _a03 + b1 * _a13 + b2 * _a23 + b3 * _a33; + return out; + }; + Mat4.transform = function transform(out, a, v) { + var x = v.x, y = v.y, z = v.z; + var m = out.m, am = a.m; + if (a === out) { + m[12] = am[0] * x + am[4] * y + am[8] * z + am[12]; + m[13] = am[1] * x + am[5] * y + am[9] * z + am[13]; + m[14] = am[2] * x + am[6] * y + am[10] * z + am[14]; + m[15] = am[3] * x + am[7] * y + am[11] * z + am[15]; + } else { + _a00 = am[0]; + _a01 = am[1]; + _a02 = am[2]; + _a03 = am[3]; + _a10 = am[4]; + _a11 = am[5]; + _a12 = am[6]; + _a13 = am[7]; + _a20 = am[8]; + _a21 = am[9]; + _a22 = am[10]; + _a23 = am[11]; + _a30 = am[12]; + _a31 = am[13]; + _a32 = am[14]; + _a33 = am[15]; + m[0] = _a00; + m[1] = _a01; + m[2] = _a02; + m[3] = _a03; + m[4] = _a10; + m[5] = _a11; + m[6] = _a12; + m[7] = _a13; + m[8] = _a20; + m[9] = _a21; + m[10] = _a22; + m[11] = _a23; + m[12] = _a00 * x + _a10 * y + _a20 * z + am[12]; + m[13] = _a01 * x + _a11 * y + _a21 * z + am[13]; + m[14] = _a02 * x + _a12 * y + _a22 * z + am[14]; + m[15] = _a03 * x + _a13 * y + _a23 * z + am[15]; + } + return out; + }; + Mat4.translate = function translate(out, a, v) { + var m = out.m, am = a.m; + if (a === out) { + m[12] += v.x; + m[13] += v.y; + m[14] += v.z; + } else { + m[0] = am[0]; + m[1] = am[1]; + m[2] = am[2]; + m[3] = am[3]; + m[4] = am[4]; + m[5] = am[5]; + m[6] = am[6]; + m[7] = am[7]; + m[8] = am[8]; + m[9] = am[9]; + m[10] = am[10]; + m[11] = am[11]; + m[12] += v.x; + m[13] += v.y; + m[14] += v.z; + m[15] = am[15]; + } + return out; + }; + Mat4.scale = function scale(out, a, v) { + var x = v.x, y = v.y, z = v.z; + var m = out.m, am = a.m; + m[0] = am[0] * x; + m[1] = am[1] * x; + m[2] = am[2] * x; + m[3] = am[3] * x; + m[4] = am[4] * y; + m[5] = am[5] * y; + m[6] = am[6] * y; + m[7] = am[7] * y; + m[8] = am[8] * z; + m[9] = am[9] * z; + m[10] = am[10] * z; + m[11] = am[11] * z; + m[12] = am[12]; + m[13] = am[13]; + m[14] = am[14]; + m[15] = am[15]; + return out; + }; + Mat4.rotate = function rotate(out, a, rad, axis) { + var x = axis.x, y = axis.y, z = axis.z; + var len = Math.sqrt(x * x + y * y + z * z); + if (Math.abs(len) < _utils.EPSILON) return null; + len = 1 / len; + x *= len; + y *= len; + z *= len; + var s = Math.sin(rad); + var c = Math.cos(rad); + var t = 1 - c; + var am = a.m; + _a00 = am[0]; + _a01 = am[1]; + _a02 = am[2]; + _a03 = am[3]; + _a10 = am[4]; + _a11 = am[5]; + _a12 = am[6]; + _a13 = am[7]; + _a20 = am[8]; + _a21 = am[9]; + _a22 = am[10]; + _a23 = am[11]; + var b00 = x * x * t + c, b01 = y * x * t + z * s, b02 = z * x * t - y * s; + var b10 = x * y * t - z * s, b11 = y * y * t + c, b12 = z * y * t + x * s; + var b20 = x * z * t + y * s, b21 = y * z * t - x * s, b22 = z * z * t + c; + var m = out.m; + m[0] = _a00 * b00 + _a10 * b01 + _a20 * b02; + m[1] = _a01 * b00 + _a11 * b01 + _a21 * b02; + m[2] = _a02 * b00 + _a12 * b01 + _a22 * b02; + m[3] = _a03 * b00 + _a13 * b01 + _a23 * b02; + m[4] = _a00 * b10 + _a10 * b11 + _a20 * b12; + m[5] = _a01 * b10 + _a11 * b11 + _a21 * b12; + m[6] = _a02 * b10 + _a12 * b11 + _a22 * b12; + m[7] = _a03 * b10 + _a13 * b11 + _a23 * b12; + m[8] = _a00 * b20 + _a10 * b21 + _a20 * b22; + m[9] = _a01 * b20 + _a11 * b21 + _a21 * b22; + m[10] = _a02 * b20 + _a12 * b21 + _a22 * b22; + m[11] = _a03 * b20 + _a13 * b21 + _a23 * b22; + if (a !== out) { + m[12] = am[12]; + m[13] = am[13]; + m[14] = am[14]; + m[15] = am[15]; + } + return out; + }; + Mat4.rotateX = function rotateX(out, a, rad) { + var m = out.m, am = a.m; + var s = Math.sin(rad), c = Math.cos(rad), a10 = am[4], a11 = am[5], a12 = am[6], a13 = am[7], a20 = am[8], a21 = am[9], a22 = am[10], a23 = am[11]; + if (a !== out) { + m[0] = am[0]; + m[1] = am[1]; + m[2] = am[2]; + m[3] = am[3]; + m[12] = am[12]; + m[13] = am[13]; + m[14] = am[14]; + m[15] = am[15]; + } + m[4] = a10 * c + a20 * s; + m[5] = a11 * c + a21 * s; + m[6] = a12 * c + a22 * s; + m[7] = a13 * c + a23 * s; + m[8] = a20 * c - a10 * s; + m[9] = a21 * c - a11 * s; + m[10] = a22 * c - a12 * s; + m[11] = a23 * c - a13 * s; + return out; + }; + Mat4.rotateY = function rotateY(out, a, rad) { + var m = out.m, am = a.m; + var s = Math.sin(rad), c = Math.cos(rad), a00 = am[0], a01 = am[1], a02 = am[2], a03 = am[3], a20 = am[8], a21 = am[9], a22 = am[10], a23 = am[11]; + if (a !== out) { + m[4] = am[4]; + m[5] = am[5]; + m[6] = am[6]; + m[7] = am[7]; + m[12] = am[12]; + m[13] = am[13]; + m[14] = am[14]; + m[15] = am[15]; + } + m[0] = a00 * c - a20 * s; + m[1] = a01 * c - a21 * s; + m[2] = a02 * c - a22 * s; + m[3] = a03 * c - a23 * s; + m[8] = a00 * s + a20 * c; + m[9] = a01 * s + a21 * c; + m[10] = a02 * s + a22 * c; + m[11] = a03 * s + a23 * c; + return out; + }; + Mat4.rotateZ = function rotateZ(out, a, rad) { + var am = a.m; + var m = out.m; + var s = Math.sin(rad), c = Math.cos(rad), a00 = a.m[0], a01 = a.m[1], a02 = a.m[2], a03 = a.m[3], a10 = a.m[4], a11 = a.m[5], a12 = a.m[6], a13 = a.m[7]; + if (a !== out) { + m[8] = am[8]; + m[9] = am[9]; + m[10] = am[10]; + m[11] = am[11]; + m[12] = am[12]; + m[13] = am[13]; + m[14] = am[14]; + m[15] = am[15]; + } + m[0] = a00 * c + a10 * s; + m[1] = a01 * c + a11 * s; + m[2] = a02 * c + a12 * s; + m[3] = a03 * c + a13 * s; + m[4] = a10 * c - a00 * s; + m[5] = a11 * c - a01 * s; + m[6] = a12 * c - a02 * s; + m[7] = a13 * c - a03 * s; + return out; + }; + Mat4.fromTranslation = function fromTranslation(out, v) { + var m = out.m; + m[0] = 1; + m[1] = 0; + m[2] = 0; + m[3] = 0; + m[4] = 0; + m[5] = 1; + m[6] = 0; + m[7] = 0; + m[8] = 0; + m[9] = 0; + m[10] = 1; + m[11] = 0; + m[12] = v.x; + m[13] = v.y; + m[14] = v.z; + m[15] = 1; + return out; + }; + Mat4.fromScaling = function fromScaling(out, v) { + var m = out.m; + m[0] = v.x; + m[1] = 0; + m[2] = 0; + m[3] = 0; + m[4] = 0; + m[5] = v.y; + m[6] = 0; + m[7] = 0; + m[8] = 0; + m[9] = 0; + m[10] = v.z; + m[11] = 0; + m[12] = 0; + m[13] = 0; + m[14] = 0; + m[15] = 1; + return out; + }; + Mat4.fromRotation = function fromRotation(out, rad, axis) { + var x = axis.x, y = axis.y, z = axis.z; + var len = Math.sqrt(x * x + y * y + z * z); + if (Math.abs(len) < _utils.EPSILON) return null; + len = 1 / len; + x *= len; + y *= len; + z *= len; + var s = Math.sin(rad); + var c = Math.cos(rad); + var t = 1 - c; + var m = out.m; + m[0] = x * x * t + c; + m[1] = y * x * t + z * s; + m[2] = z * x * t - y * s; + m[3] = 0; + m[4] = x * y * t - z * s; + m[5] = y * y * t + c; + m[6] = z * y * t + x * s; + m[7] = 0; + m[8] = x * z * t + y * s; + m[9] = y * z * t - x * s; + m[10] = z * z * t + c; + m[11] = 0; + m[12] = 0; + m[13] = 0; + m[14] = 0; + m[15] = 1; + return out; + }; + Mat4.fromXRotation = function fromXRotation(out, rad) { + var s = Math.sin(rad), c = Math.cos(rad); + var m = out.m; + m[0] = 1; + m[1] = 0; + m[2] = 0; + m[3] = 0; + m[4] = 0; + m[5] = c; + m[6] = s; + m[7] = 0; + m[8] = 0; + m[9] = -s; + m[10] = c; + m[11] = 0; + m[12] = 0; + m[13] = 0; + m[14] = 0; + m[15] = 1; + return out; + }; + Mat4.fromYRotation = function fromYRotation(out, rad) { + var s = Math.sin(rad), c = Math.cos(rad); + var m = out.m; + m[0] = c; + m[1] = 0; + m[2] = -s; + m[3] = 0; + m[4] = 0; + m[5] = 1; + m[6] = 0; + m[7] = 0; + m[8] = s; + m[9] = 0; + m[10] = c; + m[11] = 0; + m[12] = 0; + m[13] = 0; + m[14] = 0; + m[15] = 1; + return out; + }; + Mat4.fromZRotation = function fromZRotation(out, rad) { + var s = Math.sin(rad), c = Math.cos(rad); + var m = out.m; + m[0] = c; + m[1] = s; + m[2] = 0; + m[3] = 0; + m[4] = -s; + m[5] = c; + m[6] = 0; + m[7] = 0; + m[8] = 0; + m[9] = 0; + m[10] = 1; + m[11] = 0; + m[12] = 0; + m[13] = 0; + m[14] = 0; + m[15] = 1; + return out; + }; + Mat4.fromRT = function fromRT(out, q, v) { + var x = q.x, y = q.y, z = q.z, w = q.w; + var x2 = x + x; + var y2 = y + y; + var z2 = z + z; + var xx = x * x2; + var xy = x * y2; + var xz = x * z2; + var yy = y * y2; + var yz = y * z2; + var zz = z * z2; + var wx = w * x2; + var wy = w * y2; + var wz = w * z2; + var m = out.m; + m[0] = 1 - (yy + zz); + m[1] = xy + wz; + m[2] = xz - wy; + m[3] = 0; + m[4] = xy - wz; + m[5] = 1 - (xx + zz); + m[6] = yz + wx; + m[7] = 0; + m[8] = xz + wy; + m[9] = yz - wx; + m[10] = 1 - (xx + yy); + m[11] = 0; + m[12] = v.x; + m[13] = v.y; + m[14] = v.z; + m[15] = 1; + return out; + }; + Mat4.getTranslation = function getTranslation(out, mat) { + var m = mat.m; + out.x = m[12]; + out.y = m[13]; + out.z = m[14]; + return out; + }; + Mat4.getScaling = function getScaling(out, mat) { + var m = mat.m; + var m3 = m3_1.m; + var m00 = m3[0] = m[0]; + var m01 = m3[1] = m[1]; + var m02 = m3[2] = m[2]; + var m04 = m3[3] = m[4]; + var m05 = m3[4] = m[5]; + var m06 = m3[5] = m[6]; + var m08 = m3[6] = m[8]; + var m09 = m3[7] = m[9]; + var m10 = m3[8] = m[10]; + out.x = Math.sqrt(m00 * m00 + m01 * m01 + m02 * m02); + out.y = Math.sqrt(m04 * m04 + m05 * m05 + m06 * m06); + out.z = Math.sqrt(m08 * m08 + m09 * m09 + m10 * m10); + _mat["default"].determinant(m3_1) < 0 && (out.x *= -1); + return out; + }; + Mat4.getRotation = function getRotation(out, mat) { + var m = mat.m; + var trace = m[0] + m[5] + m[10]; + var S = 0; + if (trace > 0) { + S = 2 * Math.sqrt(trace + 1); + out.w = .25 * S; + out.x = (m[6] - m[9]) / S; + out.y = (m[8] - m[2]) / S; + out.z = (m[1] - m[4]) / S; + } else if (m[0] > m[5] && m[0] > m[10]) { + S = 2 * Math.sqrt(1 + m[0] - m[5] - m[10]); + out.w = (m[6] - m[9]) / S; + out.x = .25 * S; + out.y = (m[1] + m[4]) / S; + out.z = (m[8] + m[2]) / S; + } else if (m[5] > m[10]) { + S = 2 * Math.sqrt(1 + m[5] - m[0] - m[10]); + out.w = (m[8] - m[2]) / S; + out.x = (m[1] + m[4]) / S; + out.y = .25 * S; + out.z = (m[6] + m[9]) / S; + } else { + S = 2 * Math.sqrt(1 + m[10] - m[0] - m[5]); + out.w = (m[1] - m[4]) / S; + out.x = (m[8] + m[2]) / S; + out.y = (m[6] + m[9]) / S; + out.z = .25 * S; + } + return out; + }; + Mat4.toRTS = function toRTS(mat, q, v, s) { + var m = mat.m; + var m3 = m3_1.m; + s.x = _vec["default"].set(v3_1, m[0], m[1], m[2]).mag(); + m3[0] = m[0] / s.x; + m3[1] = m[1] / s.x; + m3[2] = m[2] / s.x; + s.y = _vec["default"].set(v3_1, m[4], m[5], m[6]).mag(); + m3[3] = m[4] / s.y; + m3[4] = m[5] / s.y; + m3[5] = m[6] / s.y; + s.z = _vec["default"].set(v3_1, m[8], m[9], m[10]).mag(); + m3[6] = m[8] / s.z; + m3[7] = m[9] / s.z; + m3[8] = m[10] / s.z; + var det = _mat["default"].determinant(m3_1); + if (det < 0) { + s.x *= -1; + m3[0] *= -1; + m3[1] *= -1; + m3[2] *= -1; + } + _quat["default"].fromMat3(q, m3_1); + _vec["default"].set(v, m[12], m[13], m[14]); + }; + Mat4.fromRTS = function fromRTS(out, q, v, s) { + var x = q.x, y = q.y, z = q.z, w = q.w; + var x2 = x + x; + var y2 = y + y; + var z2 = z + z; + var xx = x * x2; + var xy = x * y2; + var xz = x * z2; + var yy = y * y2; + var yz = y * z2; + var zz = z * z2; + var wx = w * x2; + var wy = w * y2; + var wz = w * z2; + var sx = s.x; + var sy = s.y; + var sz = s.z; + var m = out.m; + m[0] = (1 - (yy + zz)) * sx; + m[1] = (xy + wz) * sx; + m[2] = (xz - wy) * sx; + m[3] = 0; + m[4] = (xy - wz) * sy; + m[5] = (1 - (xx + zz)) * sy; + m[6] = (yz + wx) * sy; + m[7] = 0; + m[8] = (xz + wy) * sz; + m[9] = (yz - wx) * sz; + m[10] = (1 - (xx + yy)) * sz; + m[11] = 0; + m[12] = v.x; + m[13] = v.y; + m[14] = v.z; + m[15] = 1; + return out; + }; + Mat4.fromRTSOrigin = function fromRTSOrigin(out, q, v, s, o) { + var x = q.x, y = q.y, z = q.z, w = q.w; + var x2 = x + x; + var y2 = y + y; + var z2 = z + z; + var xx = x * x2; + var xy = x * y2; + var xz = x * z2; + var yy = y * y2; + var yz = y * z2; + var zz = z * z2; + var wx = w * x2; + var wy = w * y2; + var wz = w * z2; + var sx = s.x; + var sy = s.y; + var sz = s.z; + var ox = o.x; + var oy = o.y; + var oz = o.z; + var m = out.m; + m[0] = (1 - (yy + zz)) * sx; + m[1] = (xy + wz) * sx; + m[2] = (xz - wy) * sx; + m[3] = 0; + m[4] = (xy - wz) * sy; + m[5] = (1 - (xx + zz)) * sy; + m[6] = (yz + wx) * sy; + m[7] = 0; + m[8] = (xz + wy) * sz; + m[9] = (yz - wx) * sz; + m[10] = (1 - (xx + yy)) * sz; + m[11] = 0; + m[12] = v.x + ox - (m[0] * ox + m[4] * oy + m[8] * oz); + m[13] = v.y + oy - (m[1] * ox + m[5] * oy + m[9] * oz); + m[14] = v.z + oz - (m[2] * ox + m[6] * oy + m[10] * oz); + m[15] = 1; + return out; + }; + Mat4.fromQuat = function fromQuat(out, q) { + var x = q.x, y = q.y, z = q.z, w = q.w; + var x2 = x + x; + var y2 = y + y; + var z2 = z + z; + var xx = x * x2; + var yx = y * x2; + var yy = y * y2; + var zx = z * x2; + var zy = z * y2; + var zz = z * z2; + var wx = w * x2; + var wy = w * y2; + var wz = w * z2; + var m = out.m; + m[0] = 1 - yy - zz; + m[1] = yx + wz; + m[2] = zx - wy; + m[3] = 0; + m[4] = yx - wz; + m[5] = 1 - xx - zz; + m[6] = zy + wx; + m[7] = 0; + m[8] = zx + wy; + m[9] = zy - wx; + m[10] = 1 - xx - yy; + m[11] = 0; + m[12] = 0; + m[13] = 0; + m[14] = 0; + m[15] = 1; + return out; + }; + Mat4.frustum = function frustum(out, left, right, bottom, top, near, far) { + var rl = 1 / (right - left); + var tb = 1 / (top - bottom); + var nf = 1 / (near - far); + var m = out.m; + m[0] = 2 * near * rl; + m[1] = 0; + m[2] = 0; + m[3] = 0; + m[4] = 0; + m[5] = 2 * near * tb; + m[6] = 0; + m[7] = 0; + m[8] = (right + left) * rl; + m[9] = (top + bottom) * tb; + m[10] = (far + near) * nf; + m[11] = -1; + m[12] = 0; + m[13] = 0; + m[14] = far * near * 2 * nf; + m[15] = 0; + return out; + }; + Mat4.perspective = function perspective(out, fovy, aspect, near, far) { + var f = 1 / Math.tan(fovy / 2); + var nf = 1 / (near - far); + var m = out.m; + m[0] = f / aspect; + m[1] = 0; + m[2] = 0; + m[3] = 0; + m[4] = 0; + m[5] = f; + m[6] = 0; + m[7] = 0; + m[8] = 0; + m[9] = 0; + m[10] = (far + near) * nf; + m[11] = -1; + m[12] = 0; + m[13] = 0; + m[14] = 2 * far * near * nf; + m[15] = 0; + return out; + }; + Mat4.ortho = function ortho(out, left, right, bottom, top, near, far) { + var lr = 1 / (left - right); + var bt = 1 / (bottom - top); + var nf = 1 / (near - far); + var m = out.m; + m[0] = -2 * lr; + m[1] = 0; + m[2] = 0; + m[3] = 0; + m[4] = 0; + m[5] = -2 * bt; + m[6] = 0; + m[7] = 0; + m[8] = 0; + m[9] = 0; + m[10] = 2 * nf; + m[11] = 0; + m[12] = (left + right) * lr; + m[13] = (top + bottom) * bt; + m[14] = (far + near) * nf; + m[15] = 1; + return out; + }; + Mat4.lookAt = function lookAt(out, eye, center, up) { + var eyex = eye.x; + var eyey = eye.y; + var eyez = eye.z; + var upx = up.x; + var upy = up.y; + var upz = up.z; + var centerx = center.x; + var centery = center.y; + var centerz = center.z; + var z0 = eyex - centerx; + var z1 = eyey - centery; + var z2 = eyez - centerz; + var len = 1 / Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2); + z0 *= len; + z1 *= len; + z2 *= len; + var x0 = upy * z2 - upz * z1; + var x1 = upz * z0 - upx * z2; + var x2 = upx * z1 - upy * z0; + len = 1 / Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2); + x0 *= len; + x1 *= len; + x2 *= len; + var y0 = z1 * x2 - z2 * x1; + var y1 = z2 * x0 - z0 * x2; + var y2 = z0 * x1 - z1 * x0; + var m = out.m; + m[0] = x0; + m[1] = y0; + m[2] = z0; + m[3] = 0; + m[4] = x1; + m[5] = y1; + m[6] = z1; + m[7] = 0; + m[8] = x2; + m[9] = y2; + m[10] = z2; + m[11] = 0; + m[12] = -(x0 * eyex + x1 * eyey + x2 * eyez); + m[13] = -(y0 * eyex + y1 * eyey + y2 * eyez); + m[14] = -(z0 * eyex + z1 * eyey + z2 * eyez); + m[15] = 1; + return out; + }; + Mat4.inverseTranspose = function inverseTranspose(out, a) { + var m = a.m; + _a00 = m[0]; + _a01 = m[1]; + _a02 = m[2]; + _a03 = m[3]; + _a10 = m[4]; + _a11 = m[5]; + _a12 = m[6]; + _a13 = m[7]; + _a20 = m[8]; + _a21 = m[9]; + _a22 = m[10]; + _a23 = m[11]; + _a30 = m[12]; + _a31 = m[13]; + _a32 = m[14]; + _a33 = m[15]; + var b00 = _a00 * _a11 - _a01 * _a10; + var b01 = _a00 * _a12 - _a02 * _a10; + var b02 = _a00 * _a13 - _a03 * _a10; + var b03 = _a01 * _a12 - _a02 * _a11; + var b04 = _a01 * _a13 - _a03 * _a11; + var b05 = _a02 * _a13 - _a03 * _a12; + var b06 = _a20 * _a31 - _a21 * _a30; + var b07 = _a20 * _a32 - _a22 * _a30; + var b08 = _a20 * _a33 - _a23 * _a30; + var b09 = _a21 * _a32 - _a22 * _a31; + var b10 = _a21 * _a33 - _a23 * _a31; + var b11 = _a22 * _a33 - _a23 * _a32; + var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06; + if (!det) return null; + det = 1 / det; + m = out.m; + m[0] = (_a11 * b11 - _a12 * b10 + _a13 * b09) * det; + m[1] = (_a12 * b08 - _a10 * b11 - _a13 * b07) * det; + m[2] = (_a10 * b10 - _a11 * b08 + _a13 * b06) * det; + m[3] = 0; + m[4] = (_a02 * b10 - _a01 * b11 - _a03 * b09) * det; + m[5] = (_a00 * b11 - _a02 * b08 + _a03 * b07) * det; + m[6] = (_a01 * b08 - _a00 * b10 - _a03 * b06) * det; + m[7] = 0; + m[8] = (_a31 * b05 - _a32 * b04 + _a33 * b03) * det; + m[9] = (_a32 * b02 - _a30 * b05 - _a33 * b01) * det; + m[10] = (_a30 * b04 - _a31 * b02 + _a33 * b00) * det; + m[11] = 0; + m[12] = 0; + m[13] = 0; + m[14] = 0; + m[15] = 1; + return out; + }; + Mat4.add = function add(out, a, b) { + var m = out.m, am = a.m, bm = b.m; + m[0] = am[0] + bm[0]; + m[1] = am[1] + bm[1]; + m[2] = am[2] + bm[2]; + m[3] = am[3] + bm[3]; + m[4] = am[4] + bm[4]; + m[5] = am[5] + bm[5]; + m[6] = am[6] + bm[6]; + m[7] = am[7] + bm[7]; + m[8] = am[8] + bm[8]; + m[9] = am[9] + bm[9]; + m[10] = am[10] + bm[10]; + m[11] = am[11] + bm[11]; + m[12] = am[12] + bm[12]; + m[13] = am[13] + bm[13]; + m[14] = am[14] + bm[14]; + m[15] = am[15] + bm[15]; + return out; + }; + Mat4.subtract = function subtract(out, a, b) { + var m = out.m, am = a.m, bm = b.m; + m[0] = am[0] - bm[0]; + m[1] = am[1] - bm[1]; + m[2] = am[2] - bm[2]; + m[3] = am[3] - bm[3]; + m[4] = am[4] - bm[4]; + m[5] = am[5] - bm[5]; + m[6] = am[6] - bm[6]; + m[7] = am[7] - bm[7]; + m[8] = am[8] - bm[8]; + m[9] = am[9] - bm[9]; + m[10] = am[10] - bm[10]; + m[11] = am[11] - bm[11]; + m[12] = am[12] - bm[12]; + m[13] = am[13] - bm[13]; + m[14] = am[14] - bm[14]; + m[15] = am[15] - bm[15]; + return out; + }; + Mat4.multiplyScalar = function multiplyScalar(out, a, b) { + var m = out.m, am = a.m; + m[0] = am[0] * b; + m[1] = am[1] * b; + m[2] = am[2] * b; + m[3] = am[3] * b; + m[4] = am[4] * b; + m[5] = am[5] * b; + m[6] = am[6] * b; + m[7] = am[7] * b; + m[8] = am[8] * b; + m[9] = am[9] * b; + m[10] = am[10] * b; + m[11] = am[11] * b; + m[12] = am[12] * b; + m[13] = am[13] * b; + m[14] = am[14] * b; + m[15] = am[15] * b; + return out; + }; + Mat4.multiplyScalarAndAdd = function multiplyScalarAndAdd(out, a, b, scale) { + var m = out.m, am = a.m, bm = b.m; + m[0] = am[0] + bm[0] * scale; + m[1] = am[1] + bm[1] * scale; + m[2] = am[2] + bm[2] * scale; + m[3] = am[3] + bm[3] * scale; + m[4] = am[4] + bm[4] * scale; + m[5] = am[5] + bm[5] * scale; + m[6] = am[6] + bm[6] * scale; + m[7] = am[7] + bm[7] * scale; + m[8] = am[8] + bm[8] * scale; + m[9] = am[9] + bm[9] * scale; + m[10] = am[10] + bm[10] * scale; + m[11] = am[11] + bm[11] * scale; + m[12] = am[12] + bm[12] * scale; + m[13] = am[13] + bm[13] * scale; + m[14] = am[14] + bm[14] * scale; + m[15] = am[15] + bm[15] * scale; + return out; + }; + Mat4.strictEquals = function strictEquals(a, b) { + var am = a.m, bm = b.m; + return am[0] === bm[0] && am[1] === bm[1] && am[2] === bm[2] && am[3] === bm[3] && am[4] === bm[4] && am[5] === bm[5] && am[6] === bm[6] && am[7] === bm[7] && am[8] === bm[8] && am[9] === bm[9] && am[10] === bm[10] && am[11] === bm[11] && am[12] === bm[12] && am[13] === bm[13] && am[14] === bm[14] && am[15] === bm[15]; + }; + Mat4.equals = function equals(a, b, epsilon) { + void 0 === epsilon && (epsilon = _utils.EPSILON); + var am = a.m, bm = b.m; + return Math.abs(am[0] - bm[0]) <= epsilon * Math.max(1, Math.abs(am[0]), Math.abs(bm[0])) && Math.abs(am[1] - bm[1]) <= epsilon * Math.max(1, Math.abs(am[1]), Math.abs(bm[1])) && Math.abs(am[2] - bm[2]) <= epsilon * Math.max(1, Math.abs(am[2]), Math.abs(bm[2])) && Math.abs(am[3] - bm[3]) <= epsilon * Math.max(1, Math.abs(am[3]), Math.abs(bm[3])) && Math.abs(am[4] - bm[4]) <= epsilon * Math.max(1, Math.abs(am[4]), Math.abs(bm[4])) && Math.abs(am[5] - bm[5]) <= epsilon * Math.max(1, Math.abs(am[5]), Math.abs(bm[5])) && Math.abs(am[6] - bm[6]) <= epsilon * Math.max(1, Math.abs(am[6]), Math.abs(bm[6])) && Math.abs(am[7] - bm[7]) <= epsilon * Math.max(1, Math.abs(am[7]), Math.abs(bm[7])) && Math.abs(am[8] - bm[8]) <= epsilon * Math.max(1, Math.abs(am[8]), Math.abs(bm[8])) && Math.abs(am[9] - bm[9]) <= epsilon * Math.max(1, Math.abs(am[9]), Math.abs(bm[9])) && Math.abs(am[10] - bm[10]) <= epsilon * Math.max(1, Math.abs(am[10]), Math.abs(bm[10])) && Math.abs(am[11] - bm[11]) <= epsilon * Math.max(1, Math.abs(am[11]), Math.abs(bm[11])) && Math.abs(am[12] - bm[12]) <= epsilon * Math.max(1, Math.abs(am[12]), Math.abs(bm[12])) && Math.abs(am[13] - bm[13]) <= epsilon * Math.max(1, Math.abs(am[13]), Math.abs(bm[13])) && Math.abs(am[14] - bm[14]) <= epsilon * Math.max(1, Math.abs(am[14]), Math.abs(bm[14])) && Math.abs(am[15] - bm[15]) <= epsilon * Math.max(1, Math.abs(am[15]), Math.abs(bm[15])); + }; + Mat4.adjoint = function adjoint(out, a) { + var am = a.m, outm = out.m; + var a00 = am[0], a01 = am[1], a02 = am[2], a03 = am[3], a10 = am[4], a11 = am[5], a12 = am[6], a13 = am[7], a20 = am[8], a21 = am[9], a22 = am[10], a23 = am[11], a30 = am[12], a31 = am[13], a32 = am[14], a33 = am[15]; + outm[0] = a11 * (a22 * a33 - a23 * a32) - a21 * (a12 * a33 - a13 * a32) + a31 * (a12 * a23 - a13 * a22); + outm[1] = -(a01 * (a22 * a33 - a23 * a32) - a21 * (a02 * a33 - a03 * a32) + a31 * (a02 * a23 - a03 * a22)); + outm[2] = a01 * (a12 * a33 - a13 * a32) - a11 * (a02 * a33 - a03 * a32) + a31 * (a02 * a13 - a03 * a12); + outm[3] = -(a01 * (a12 * a23 - a13 * a22) - a11 * (a02 * a23 - a03 * a22) + a21 * (a02 * a13 - a03 * a12)); + outm[4] = -(a10 * (a22 * a33 - a23 * a32) - a20 * (a12 * a33 - a13 * a32) + a30 * (a12 * a23 - a13 * a22)); + outm[5] = a00 * (a22 * a33 - a23 * a32) - a20 * (a02 * a33 - a03 * a32) + a30 * (a02 * a23 - a03 * a22); + outm[6] = -(a00 * (a12 * a33 - a13 * a32) - a10 * (a02 * a33 - a03 * a32) + a30 * (a02 * a13 - a03 * a12)); + outm[7] = a00 * (a12 * a23 - a13 * a22) - a10 * (a02 * a23 - a03 * a22) + a20 * (a02 * a13 - a03 * a12); + outm[8] = a10 * (a21 * a33 - a23 * a31) - a20 * (a11 * a33 - a13 * a31) + a30 * (a11 * a23 - a13 * a21); + outm[9] = -(a00 * (a21 * a33 - a23 * a31) - a20 * (a01 * a33 - a03 * a31) + a30 * (a01 * a23 - a03 * a21)); + outm[10] = a00 * (a11 * a33 - a13 * a31) - a10 * (a01 * a33 - a03 * a31) + a30 * (a01 * a13 - a03 * a11); + outm[11] = -(a00 * (a11 * a23 - a13 * a21) - a10 * (a01 * a23 - a03 * a21) + a20 * (a01 * a13 - a03 * a11)); + outm[12] = -(a10 * (a21 * a32 - a22 * a31) - a20 * (a11 * a32 - a12 * a31) + a30 * (a11 * a22 - a12 * a21)); + outm[13] = a00 * (a21 * a32 - a22 * a31) - a20 * (a01 * a32 - a02 * a31) + a30 * (a01 * a22 - a02 * a21); + outm[14] = -(a00 * (a11 * a32 - a12 * a31) - a10 * (a01 * a32 - a02 * a31) + a30 * (a01 * a12 - a02 * a11)); + outm[15] = a00 * (a11 * a22 - a12 * a21) - a10 * (a01 * a22 - a02 * a21) + a20 * (a01 * a12 - a02 * a11); + return out; + }; + Mat4.toArray = function toArray(out, mat, ofs) { + void 0 === ofs && (ofs = 0); + var m = mat.m; + for (var i = 0; i < 16; i++) out[ofs + i] = m[i]; + return out; + }; + Mat4.fromArray = function fromArray(out, arr, ofs) { + void 0 === ofs && (ofs = 0); + var m = out.m; + for (var i = 0; i < 16; i++) m[i] = arr[ofs + i]; + return out; + }; + function Mat4(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) { + var _this; + void 0 === m00 && (m00 = 1); + void 0 === m01 && (m01 = 0); + void 0 === m02 && (m02 = 0); + void 0 === m03 && (m03 = 0); + void 0 === m10 && (m10 = 0); + void 0 === m11 && (m11 = 1); + void 0 === m12 && (m12 = 0); + void 0 === m13 && (m13 = 0); + void 0 === m20 && (m20 = 0); + void 0 === m21 && (m21 = 0); + void 0 === m22 && (m22 = 1); + void 0 === m23 && (m23 = 0); + void 0 === m30 && (m30 = 0); + void 0 === m31 && (m31 = 0); + void 0 === m32 && (m32 = 0); + void 0 === m33 && (m33 = 1); + _this = _ValueType.call(this) || this; + _this.m = void 0; + if (m00 instanceof _utils.FLOAT_ARRAY_TYPE) _this.m = m00; else { + _this.m = new _utils.FLOAT_ARRAY_TYPE(16); + var tm = _this.m; + tm[0] = m00; + tm[1] = m01; + tm[2] = m02; + tm[3] = m03; + tm[4] = m10; + tm[5] = m11; + tm[6] = m12; + tm[7] = m13; + tm[8] = m20; + tm[9] = m21; + tm[10] = m22; + tm[11] = m23; + tm[12] = m30; + tm[13] = m31; + tm[14] = m32; + tm[15] = m33; + } + return _this; + } + _proto.clone = function clone() { + var t = this; + var tm = t.m; + return new Mat4(tm[0], tm[1], tm[2], tm[3], tm[4], tm[5], tm[6], tm[7], tm[8], tm[9], tm[10], tm[11], tm[12], tm[13], tm[14], tm[15]); + }; + _proto.set = function set(s) { + var t = this; + var tm = t.m, sm = s.m; + tm[0] = sm[0]; + tm[1] = sm[1]; + tm[2] = sm[2]; + tm[3] = sm[3]; + tm[4] = sm[4]; + tm[5] = sm[5]; + tm[6] = sm[6]; + tm[7] = sm[7]; + tm[8] = sm[8]; + tm[9] = sm[9]; + tm[10] = sm[10]; + tm[11] = sm[11]; + tm[12] = sm[12]; + tm[13] = sm[13]; + tm[14] = sm[14]; + tm[15] = sm[15]; + return this; + }; + _proto.equals = function equals(other) { + return Mat4.strictEquals(this, other); + }; + _proto.fuzzyEquals = function fuzzyEquals(other) { + return Mat4.equals(this, other); + }; + _proto.toString = function toString() { + var tm = this.m; + return tm ? "[\n" + tm[0] + ", " + tm[1] + ", " + tm[2] + ", " + tm[3] + ",\n" + tm[4] + ", " + tm[5] + ", " + tm[6] + ", " + tm[7] + ",\n" + tm[8] + ", " + tm[9] + ", " + tm[10] + ", " + tm[11] + ",\n" + tm[12] + ", " + tm[13] + ", " + tm[14] + ", " + tm[15] + "\n]" : "[\n1, 0, 0, 0\n0, 1, 0, 0\n0, 0, 1, 0\n0, 0, 0, 1\n]"; + }; + _proto.identity = function identity() { + return Mat4.identity(this); + }; + _proto.transpose = function transpose(out) { + out = out || new Mat4(); + return Mat4.transpose(out, this); + }; + _proto.invert = function invert(out) { + out = out || new Mat4(); + return Mat4.invert(out, this); + }; + _proto.adjoint = function adjoint(out) { + out = out || new Mat4(); + return Mat4.adjoint(out, this); + }; + _proto.determinant = function determinant() { + return Mat4.determinant(this); + }; + _proto.add = function add(other, out) { + out = out || new Mat4(); + return Mat4.add(out, this, other); + }; + _proto.subtract = function subtract(other) { + return Mat4.subtract(this, this, other); + }; + _proto.multiply = function multiply(other) { + return Mat4.multiply(this, this, other); + }; + _proto.multiplyScalar = function multiplyScalar(number) { + return Mat4.multiplyScalar(this, this, number); + }; + _proto.translate = function translate(v, out) { + out = out || new Mat4(); + return Mat4.translate(out, this, v); + }; + _proto.scale = function scale(v, out) { + out = out || new Mat4(); + return Mat4.scale(out, this, v); + }; + _proto.rotate = function rotate(rad, axis, out) { + out = out || new Mat4(); + return Mat4.rotate(out, this, rad, axis); + }; + _proto.getTranslation = function getTranslation(out) { + out = out || new _vec["default"](); + return Mat4.getTranslation(out, this); + }; + _proto.getScale = function getScale(out) { + out = out || new _vec["default"](); + return Mat4.getScaling(out, this); + }; + _proto.getRotation = function getRotation(out) { + out = out || new _quat["default"](); + return Mat4.getRotation(out, this); + }; + _proto.fromRTS = function fromRTS(q, v, s) { + return Mat4.fromRTS(this, q, v, s); + }; + _proto.fromQuat = function fromQuat(quat) { + return Mat4.fromQuat(this, quat); + }; + return Mat4; + })(_valueType["default"]); + exports["default"] = Mat4; + Mat4.mul = Mat4.multiply; + Mat4.sub = Mat4.subtract; + Mat4.IDENTITY = Object.freeze(new Mat4()); + var v3_1 = new _vec["default"](); + var m3_1 = new _mat["default"](); + _CCClass["default"].fastDefine("cc.Mat4", Mat4, { + m00: 1, + m01: 0, + m02: 0, + m03: 0, + m04: 0, + m05: 1, + m06: 0, + m07: 0, + m08: 0, + m09: 0, + m10: 1, + m11: 0, + m12: 0, + m13: 0, + m14: 0, + m15: 1 + }); + var _loop = function _loop(i) { + Object.defineProperty(Mat4.prototype, "m" + i, { + get: function get() { + return this.m[i]; + }, + set: function set(value) { + this.m[i] = value; + } + }); + }; + for (var i = 0; i < 16; i++) _loop(i); + cc.mat4 = function(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) { + var mat = new Mat4(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33); + void 0 === m00 && Mat4.identity(mat); + return mat; + }; + cc.Mat4 = Mat4; + module.exports = exports["default"]; + }), { + "../platform/CCClass": 121, + "./mat3": 221, + "./quat": 223, + "./utils": 227, + "./value-type": 228, + "./vec3": 230 + } ], + 223: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _valueType = _interopRequireDefault(require("./value-type")); + var _CCClass = _interopRequireDefault(require("../platform/CCClass")); + var _vec = _interopRequireDefault(require("./vec3")); + var _mat = _interopRequireDefault(require("./mat3")); + var _utils = require("./utils"); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var _x = 0; + var _y = 0; + var _z = 0; + var _w = 0; + var Quat = (function(_ValueType) { + _inheritsLoose(Quat, _ValueType); + var _proto = Quat.prototype; + _proto.mul = function mul(other, out) { + return Quat.multiply(out || new Quat(), this, other); + }; + Quat.clone = function clone(a) { + return new Quat(a.x, a.y, a.z, a.w); + }; + Quat.copy = function copy(out, a) { + out.x = a.x; + out.y = a.y; + out.z = a.z; + out.w = a.w; + return out; + }; + Quat.set = function set(out, x, y, z, w) { + out.x = x; + out.y = y; + out.z = z; + out.w = w; + return out; + }; + Quat.identity = function identity(out) { + out.x = 0; + out.y = 0; + out.z = 0; + out.w = 1; + return out; + }; + Quat.rotationTo = function rotationTo(out, a, b) { + var dot = _vec["default"].dot(a, b); + if (dot < -.999999) { + _vec["default"].cross(v3_1, _vec["default"].RIGHT, a); + v3_1.mag() < 1e-6 && _vec["default"].cross(v3_1, _vec["default"].UP, a); + _vec["default"].normalize(v3_1, v3_1); + Quat.fromAxisAngle(out, v3_1, Math.PI); + return out; + } + if (dot > .999999) { + out.x = 0; + out.y = 0; + out.z = 0; + out.w = 1; + return out; + } + _vec["default"].cross(v3_1, a, b); + out.x = v3_1.x; + out.y = v3_1.y; + out.z = v3_1.z; + out.w = 1 + dot; + return Quat.normalize(out, out); + }; + Quat.getAxisAngle = function getAxisAngle(outAxis, q) { + var rad = 2 * Math.acos(q.w); + var s = Math.sin(rad / 2); + if (0 !== s) { + outAxis.x = q.x / s; + outAxis.y = q.y / s; + outAxis.z = q.z / s; + } else { + outAxis.x = 1; + outAxis.y = 0; + outAxis.z = 0; + } + return rad; + }; + Quat.multiply = function multiply(out, a, b) { + _x = a.x * b.w + a.w * b.x + a.y * b.z - a.z * b.y; + _y = a.y * b.w + a.w * b.y + a.z * b.x - a.x * b.z; + _z = a.z * b.w + a.w * b.z + a.x * b.y - a.y * b.x; + _w = a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z; + out.x = _x; + out.y = _y; + out.z = _z; + out.w = _w; + return out; + }; + Quat.multiplyScalar = function multiplyScalar(out, a, b) { + out.x = a.x * b; + out.y = a.y * b; + out.z = a.z * b; + out.w = a.w * b; + return out; + }; + Quat.scaleAndAdd = function scaleAndAdd(out, a, b, scale) { + out.x = a.x + b.x * scale; + out.y = a.y + b.y * scale; + out.z = a.z + b.z * scale; + out.w = a.w + b.w * scale; + return out; + }; + Quat.rotateX = function rotateX(out, a, rad) { + rad *= .5; + var bx = Math.sin(rad); + var bw = Math.cos(rad); + _x = a.x * bw + a.w * bx; + _y = a.y * bw + a.z * bx; + _z = a.z * bw - a.y * bx; + _w = a.w * bw - a.x * bx; + out.x = _x; + out.y = _y; + out.z = _z; + out.w = _w; + return out; + }; + Quat.rotateY = function rotateY(out, a, rad) { + rad *= .5; + var by = Math.sin(rad); + var bw = Math.cos(rad); + _x = a.x * bw - a.z * by; + _y = a.y * bw + a.w * by; + _z = a.z * bw + a.x * by; + _w = a.w * bw - a.y * by; + out.x = _x; + out.y = _y; + out.z = _z; + out.w = _w; + return out; + }; + Quat.rotateZ = function rotateZ(out, a, rad) { + rad *= .5; + var bz = Math.sin(rad); + var bw = Math.cos(rad); + _x = a.x * bw + a.y * bz; + _y = a.y * bw - a.x * bz; + _z = a.z * bw + a.w * bz; + _w = a.w * bw - a.z * bz; + out.x = _x; + out.y = _y; + out.z = _z; + out.w = _w; + return out; + }; + Quat.rotateAround = function rotateAround(out, rot, axis, rad) { + Quat.invert(qt_1, rot); + _vec["default"].transformQuat(v3_1, axis, qt_1); + Quat.fromAxisAngle(qt_1, v3_1, rad); + Quat.multiply(out, rot, qt_1); + return out; + }; + Quat.rotateAroundLocal = function rotateAroundLocal(out, rot, axis, rad) { + Quat.fromAxisAngle(qt_1, axis, rad); + Quat.multiply(out, rot, qt_1); + return out; + }; + Quat.calculateW = function calculateW(out, a) { + out.x = a.x; + out.y = a.y; + out.z = a.z; + out.w = Math.sqrt(Math.abs(1 - a.x * a.x - a.y * a.y - a.z * a.z)); + return out; + }; + Quat.dot = function dot(a, b) { + return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w; + }; + Quat.lerp = function lerp(out, a, b, t) { + out.x = a.x + t * (b.x - a.x); + out.y = a.y + t * (b.y - a.y); + out.z = a.z + t * (b.z - a.z); + out.w = a.w + t * (b.w - a.w); + return out; + }; + Quat.slerp = function slerp(out, a, b, t) { + var scale0 = 0; + var scale1 = 0; + var cosom = a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w; + if (cosom < 0) { + cosom = -cosom; + b.x = -b.x; + b.y = -b.y; + b.z = -b.z; + b.w = -b.w; + } + if (1 - cosom > 1e-6) { + var omega = Math.acos(cosom); + var sinom = Math.sin(omega); + scale0 = Math.sin((1 - t) * omega) / sinom; + scale1 = Math.sin(t * omega) / sinom; + } else { + scale0 = 1 - t; + scale1 = t; + } + out.x = scale0 * a.x + scale1 * b.x; + out.y = scale0 * a.y + scale1 * b.y; + out.z = scale0 * a.z + scale1 * b.z; + out.w = scale0 * a.w + scale1 * b.w; + return out; + }; + Quat.sqlerp = function sqlerp(out, a, b, c, d, t) { + Quat.slerp(qt_1, a, d, t); + Quat.slerp(qt_2, b, c, t); + Quat.slerp(out, qt_1, qt_2, 2 * t * (1 - t)); + return out; + }; + Quat.invert = function invert(out, a) { + var dot = a.x * a.x + a.y * a.y + a.z * a.z + a.w * a.w; + var invDot = dot ? 1 / dot : 0; + out.x = -a.x * invDot; + out.y = -a.y * invDot; + out.z = -a.z * invDot; + out.w = a.w * invDot; + return out; + }; + Quat.conjugate = function conjugate(out, a) { + out.x = -a.x; + out.y = -a.y; + out.z = -a.z; + out.w = a.w; + return out; + }; + Quat.len = function len(a) { + return Math.sqrt(a.x * a.x + a.y * a.y + a.z * a.z + a.w * a.w); + }; + Quat.lengthSqr = function lengthSqr(a) { + return a.x * a.x + a.y * a.y + a.z * a.z + a.w * a.w; + }; + Quat.normalize = function normalize(out, a) { + var len = a.x * a.x + a.y * a.y + a.z * a.z + a.w * a.w; + if (len > 0) { + len = 1 / Math.sqrt(len); + out.x = a.x * len; + out.y = a.y * len; + out.z = a.z * len; + out.w = a.w * len; + } + return out; + }; + Quat.fromAxes = function fromAxes(out, xAxis, yAxis, zAxis) { + _mat["default"].set(m3_1, xAxis.x, xAxis.y, xAxis.z, yAxis.x, yAxis.y, yAxis.z, zAxis.x, zAxis.y, zAxis.z); + return Quat.normalize(out, Quat.fromMat3(out, m3_1)); + }; + Quat.fromViewUp = function fromViewUp(out, view, up) { + _mat["default"].fromViewUp(m3_1, view, up); + return Quat.normalize(out, Quat.fromMat3(out, m3_1)); + }; + Quat.fromAxisAngle = function fromAxisAngle(out, axis, rad) { + rad *= .5; + var s = Math.sin(rad); + out.x = s * axis.x; + out.y = s * axis.y; + out.z = s * axis.z; + out.w = Math.cos(rad); + return out; + }; + Quat.fromAngleZ = function fromAngleZ(out, z) { + z *= halfToRad; + out.x = out.y = 0; + out.z = Math.sin(z); + out.w = Math.cos(z); + return out; + }; + Quat.fromMat3 = function fromMat3(out, mat) { + var m = mat.m; + var m00 = m[0], m10 = m[1], m20 = m[2], m01 = m[3], m11 = m[4], m21 = m[5], m02 = m[6], m12 = m[7], m22 = m[8]; + var trace = m00 + m11 + m22; + if (trace > 0) { + var s = .5 / Math.sqrt(trace + 1); + out.w = .25 / s; + out.x = (m21 - m12) * s; + out.y = (m02 - m20) * s; + out.z = (m10 - m01) * s; + } else if (m00 > m11 && m00 > m22) { + var _s = 2 * Math.sqrt(1 + m00 - m11 - m22); + out.w = (m21 - m12) / _s; + out.x = .25 * _s; + out.y = (m01 + m10) / _s; + out.z = (m02 + m20) / _s; + } else if (m11 > m22) { + var _s2 = 2 * Math.sqrt(1 + m11 - m00 - m22); + out.w = (m02 - m20) / _s2; + out.x = (m01 + m10) / _s2; + out.y = .25 * _s2; + out.z = (m12 + m21) / _s2; + } else { + var _s3 = 2 * Math.sqrt(1 + m22 - m00 - m11); + out.w = (m10 - m01) / _s3; + out.x = (m02 + m20) / _s3; + out.y = (m12 + m21) / _s3; + out.z = .25 * _s3; + } + return out; + }; + Quat.fromEuler = function fromEuler(out, x, y, z) { + x *= halfToRad; + y *= halfToRad; + z *= halfToRad; + var sx = Math.sin(x); + var cx = Math.cos(x); + var sy = Math.sin(y); + var cy = Math.cos(y); + var sz = Math.sin(z); + var cz = Math.cos(z); + out.x = sx * cy * cz + cx * sy * sz; + out.y = cx * sy * cz + sx * cy * sz; + out.z = cx * cy * sz - sx * sy * cz; + out.w = cx * cy * cz - sx * sy * sz; + return out; + }; + Quat.toAxisX = function toAxisX(out, q) { + var fy = 2 * q.y; + var fz = 2 * q.z; + out.x = 1 - fy * q.y - fz * q.z; + out.y = fy * q.x + fz * q.w; + out.z = fz * q.x + fy * q.w; + return out; + }; + Quat.toAxisY = function toAxisY(out, q) { + var fx = 2 * q.x; + var fy = 2 * q.y; + var fz = 2 * q.z; + out.x = fy * q.x - fz * q.w; + out.y = 1 - fx * q.x - fz * q.z; + out.z = fz * q.y + fx * q.w; + return out; + }; + Quat.toAxisZ = function toAxisZ(out, q) { + var fx = 2 * q.x; + var fy = 2 * q.y; + var fz = 2 * q.z; + out.x = fz * q.x - fy * q.w; + out.y = fz * q.y - fx * q.w; + out.z = 1 - fx * q.x - fy * q.y; + return out; + }; + Quat.toEuler = function toEuler(out, q, outerZ) { + var x = q.x, y = q.y, z = q.z, w = q.w; + var bank = 0; + var heading = 0; + var attitude = 0; + var test = x * y + z * w; + if (test > .499999) { + bank = 0; + heading = (0, _utils.toDegree)(2 * Math.atan2(x, w)); + attitude = 90; + } else if (test < -.499999) { + bank = 0; + heading = -(0, _utils.toDegree)(2 * Math.atan2(x, w)); + attitude = -90; + } else { + var sqx = x * x; + var sqy = y * y; + var sqz = z * z; + bank = (0, _utils.toDegree)(Math.atan2(2 * x * w - 2 * y * z, 1 - 2 * sqx - 2 * sqz)); + heading = (0, _utils.toDegree)(Math.atan2(2 * y * w - 2 * x * z, 1 - 2 * sqy - 2 * sqz)); + attitude = (0, _utils.toDegree)(Math.asin(2 * test)); + if (outerZ) { + bank = -180 * Math.sign(bank + 1e-6) + bank; + heading = -180 * Math.sign(heading + 1e-6) + heading; + attitude = 180 * Math.sign(attitude + 1e-6) - attitude; + } + } + out.x = bank; + out.y = heading; + out.z = attitude; + return out; + }; + Quat.strictEquals = function strictEquals(a, b) { + return a.x === b.x && a.y === b.y && a.z === b.z && a.w === b.w; + }; + Quat.equals = function equals(a, b, epsilon) { + void 0 === epsilon && (epsilon = _utils.EPSILON); + return Math.abs(a.x - b.x) <= epsilon * Math.max(1, Math.abs(a.x), Math.abs(b.x)) && Math.abs(a.y - b.y) <= epsilon * Math.max(1, Math.abs(a.y), Math.abs(b.y)) && Math.abs(a.z - b.z) <= epsilon * Math.max(1, Math.abs(a.z), Math.abs(b.z)) && Math.abs(a.w - b.w) <= epsilon * Math.max(1, Math.abs(a.w), Math.abs(b.w)); + }; + Quat.toArray = function toArray(out, q, ofs) { + void 0 === ofs && (ofs = 0); + out[ofs + 0] = q.x; + out[ofs + 1] = q.y; + out[ofs + 2] = q.z; + out[ofs + 3] = q.w; + return out; + }; + Quat.fromArray = function fromArray(out, arr, ofs) { + void 0 === ofs && (ofs = 0); + out.x = arr[ofs + 0]; + out.y = arr[ofs + 1]; + out.z = arr[ofs + 2]; + out.w = arr[ofs + 3]; + return out; + }; + function Quat(x, y, z, w) { + var _this; + void 0 === x && (x = 0); + void 0 === y && (y = 0); + void 0 === z && (z = 0); + void 0 === w && (w = 1); + _this = _ValueType.call(this) || this; + _this.x = void 0; + _this.y = void 0; + _this.z = void 0; + _this.w = void 0; + if (x && "object" === typeof x) { + _this.x = x.x; + _this.y = x.y; + _this.z = x.z; + _this.w = x.w; + } else { + _this.x = x; + _this.y = y; + _this.z = z; + _this.w = w; + } + return _this; + } + _proto.clone = function clone() { + return new Quat(this.x, this.y, this.z, this.w); + }; + _proto.set = function set(newValue) { + this.x = newValue.x; + this.y = newValue.y; + this.z = newValue.z; + this.w = newValue.w; + return this; + }; + _proto.equals = function equals(other) { + return other && this.x === other.x && this.y === other.y && this.z === other.z && this.w === other.w; + }; + _proto.toEuler = function toEuler(out) { + return Quat.toEuler(out, this); + }; + _proto.fromEuler = function fromEuler(euler) { + return Quat.fromEuler(this, euler.x, euler.y, euler.z); + }; + _proto.lerp = function lerp(to, ratio, out) { + out = out || new Quat(); + Quat.slerp(out, this, to, ratio); + return out; + }; + _proto.multiply = function multiply(other) { + return Quat.multiply(this, this, other); + }; + _proto.rotateAround = function rotateAround(rot, axis, rad, out) { + out = out || new Quat(); + return Quat.rotateAround(out, rot, axis, rad); + }; + return Quat; + })(_valueType["default"]); + exports["default"] = Quat; + Quat.mul = Quat.multiply; + Quat.scale = Quat.multiplyScalar; + Quat.mag = Quat.len; + Quat.IDENTITY = Object.freeze(new Quat()); + var qt_1 = new Quat(); + var qt_2 = new Quat(); + var v3_1 = new _vec["default"](); + var m3_1 = new _mat["default"](); + var halfToRad = .5 * Math.PI / 180; + _CCClass["default"].fastDefine("cc.Quat", Quat, { + x: 0, + y: 0, + z: 0, + w: 1 + }); + cc.quat = function quat(x, y, z, w) { + return new Quat(x, y, z, w); + }; + cc.Quat = Quat; + module.exports = exports["default"]; + }), { + "../platform/CCClass": 121, + "./mat3": 221, + "./utils": 227, + "./value-type": 228, + "./vec3": 230 + } ], + 224: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _valueType = _interopRequireDefault(require("./value-type")); + var _CCClass = _interopRequireDefault(require("../platform/CCClass")); + var _vec = _interopRequireDefault(require("./vec2")); + var _size = _interopRequireDefault(require("./size")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var Rect = (function(_ValueType) { + _inheritsLoose(Rect, _ValueType); + Rect.fromMinMax = function fromMinMax(v1, v2) { + var min_x = Math.min(v1.x, v2.x); + var min_y = Math.min(v1.y, v2.y); + var max_x = Math.max(v1.x, v2.x); + var max_y = Math.max(v1.y, v2.y); + return new Rect(min_x, min_y, max_x - min_x, max_y - min_y); + }; + function Rect(x, y, w, h) { + var _this; + void 0 === x && (x = 0); + void 0 === y && (y = 0); + void 0 === w && (w = 0); + void 0 === h && (h = 0); + _this = _ValueType.call(this) || this; + _this.x = void 0; + _this.y = void 0; + _this.width = void 0; + _this.height = void 0; + if (x && "object" === typeof x) { + y = x.y; + w = x.width; + h = x.height; + x = x.x; + } + _this.x = x || 0; + _this.y = y || 0; + _this.width = w || 0; + _this.height = h || 0; + return _this; + } + var _proto = Rect.prototype; + _proto.clone = function clone() { + return new Rect(this.x, this.y, this.width, this.height); + }; + _proto.equals = function equals(other) { + return other && this.x === other.x && this.y === other.y && this.width === other.width && this.height === other.height; + }; + _proto.lerp = function lerp(to, ratio, out) { + out = out || new Rect(); + var x = this.x; + var y = this.y; + var width = this.width; + var height = this.height; + out.x = x + (to.x - x) * ratio; + out.y = y + (to.y - y) * ratio; + out.width = width + (to.width - width) * ratio; + out.height = height + (to.height - height) * ratio; + return out; + }; + _proto.set = function set(source) { + this.x = source.x; + this.y = source.y; + this.width = source.width; + this.height = source.height; + return this; + }; + _proto.intersects = function intersects(rect) { + var maxax = this.x + this.width, maxay = this.y + this.height, maxbx = rect.x + rect.width, maxby = rect.y + rect.height; + return !(maxax < rect.x || maxbx < this.x || maxay < rect.y || maxby < this.y); + }; + _proto.intersection = function intersection(out, rectB) { + var axMin = this.x, ayMin = this.y, axMax = this.x + this.width, ayMax = this.y + this.height; + var bxMin = rectB.x, byMin = rectB.y, bxMax = rectB.x + rectB.width, byMax = rectB.y + rectB.height; + out.x = Math.max(axMin, bxMin); + out.y = Math.max(ayMin, byMin); + out.width = Math.min(axMax, bxMax) - out.x; + out.height = Math.min(ayMax, byMax) - out.y; + return out; + }; + _proto.contains = function contains(point) { + return this.x <= point.x && this.x + this.width >= point.x && this.y <= point.y && this.y + this.height >= point.y; + }; + _proto.containsRect = function containsRect(rect) { + return this.x <= rect.x && this.x + this.width >= rect.x + rect.width && this.y <= rect.y && this.y + this.height >= rect.y + rect.height; + }; + _proto.union = function union(out, rectB) { + var ax = this.x, ay = this.y, aw = this.width, ah = this.height; + var bx = rectB.x, by = rectB.y, bw = rectB.width, bh = rectB.height; + out.x = Math.min(ax, bx); + out.y = Math.min(ay, by); + out.width = Math.max(ax + aw, bx + bw) - out.x; + out.height = Math.max(ay + ah, by + bh) - out.y; + return out; + }; + _proto.transformMat4 = function transformMat4(out, mat) { + var ol = this.x; + var ob = this.y; + var or = ol + this.width; + var ot = ob + this.height; + var matm = mat.m; + var lbx = matm[0] * ol + matm[4] * ob + matm[12]; + var lby = matm[1] * ol + matm[5] * ob + matm[13]; + var rbx = matm[0] * or + matm[4] * ob + matm[12]; + var rby = matm[1] * or + matm[5] * ob + matm[13]; + var ltx = matm[0] * ol + matm[4] * ot + matm[12]; + var lty = matm[1] * ol + matm[5] * ot + matm[13]; + var rtx = matm[0] * or + matm[4] * ot + matm[12]; + var rty = matm[1] * or + matm[5] * ot + matm[13]; + var minX = Math.min(lbx, rbx, ltx, rtx); + var maxX = Math.max(lbx, rbx, ltx, rtx); + var minY = Math.min(lby, rby, lty, rty); + var maxY = Math.max(lby, rby, lty, rty); + out.x = minX; + out.y = minY; + out.width = maxX - minX; + out.height = maxY - minY; + return out; + }; + _proto.toString = function toString() { + return "(" + this.x.toFixed(2) + ", " + this.y.toFixed(2) + ", " + this.width.toFixed(2) + ", " + this.height.toFixed(2) + ")"; + }; + _createClass(Rect, [ { + key: "xMin", + get: function get() { + return this.x; + }, + set: function set(v) { + this.width += this.x - v; + this.x = v; + } + }, { + key: "yMin", + get: function get() { + return this.y; + }, + set: function set(v) { + this.height += this.y - v; + this.y = v; + } + }, { + key: "xMax", + get: function get() { + return this.x + this.width; + }, + set: function set(value) { + this.width = value - this.x; + } + }, { + key: "yMax", + get: function get() { + return this.y + this.height; + }, + set: function set(value) { + this.height = value - this.y; + } + }, { + key: "center", + get: function get() { + return new _vec["default"](this.x + .5 * this.width, this.y + .5 * this.height); + }, + set: function set(value) { + this.x = value.x - .5 * this.width; + this.y = value.y - .5 * this.height; + } + }, { + key: "origin", + get: function get() { + return new _vec["default"](this.x, this.y); + }, + set: function set(value) { + this.x = value.x; + this.y = value.y; + } + }, { + key: "size", + get: function get() { + return new _size["default"](this.width, this.height); + }, + set: function set(value) { + this.width = value.width; + this.height = value.height; + } + } ]); + return Rect; + })(_valueType["default"]); + exports["default"] = Rect; + _CCClass["default"].fastDefine("cc.Rect", Rect, { + x: 0, + y: 0, + width: 0, + height: 0 + }); + cc.Rect = Rect; + cc.rect = function rect(x, y, w, h) { + return new Rect(x, y, w, h); + }; + module.exports = exports["default"]; + }), { + "../platform/CCClass": 121, + "./size": 225, + "./value-type": 228, + "./vec2": 229 + } ], + 225: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _valueType = _interopRequireDefault(require("./value-type")); + var _CCClass = _interopRequireDefault(require("../platform/CCClass")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var Size = (function(_ValueType) { + _inheritsLoose(Size, _ValueType); + function Size(width, height) { + var _this; + void 0 === width && (width = 0); + void 0 === height && (height = 0); + _this = _ValueType.call(this) || this; + _this.width = void 0; + _this.height = void 0; + if (width && "object" === typeof width) { + _this.width = width.width; + _this.height = width.height; + } else { + _this.width = width || 0; + _this.height = height || 0; + } + return _this; + } + var _proto = Size.prototype; + _proto.clone = function clone() { + return new Size(this.width, this.height); + }; + _proto.equals = function equals(other) { + return other && this.width === other.width && this.height === other.height; + }; + _proto.lerp = function lerp(to, ratio, out) { + out = out || new Size(); + var width = this.width; + var height = this.height; + out.width = width + (to.width - width) * ratio; + out.height = height + (to.height - height) * ratio; + return out; + }; + _proto.set = function set(source) { + this.width = source.width; + this.height = source.height; + return this; + }; + _proto.toString = function toString() { + return "(" + this.width.toFixed(2) + ", " + this.height.toFixed(2) + ")"; + }; + _createClass(Size, null, [ { + key: "ZERO", + get: function get() { + return new Size(); + } + } ]); + return Size; + })(_valueType["default"]); + exports["default"] = Size; + Size.ZERO_R = Size.ZERO; + _CCClass["default"].fastDefine("cc.Size", Size, { + width: 0, + height: 0 + }); + cc.size = function(w, h) { + return new Size(w, h); + }; + cc.Size = Size; + module.exports = exports["default"]; + }), { + "../platform/CCClass": 121, + "./value-type": 228 + } ], + 226: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _quat = _interopRequireDefault(require("./quat")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var tmp_quat = new _quat["default"](); + var Trs = (function() { + function Trs() {} + Trs.toRotation = function toRotation(out, a) { + out.x = a[3]; + out.y = a[4]; + out.z = a[5]; + out.w = a[6]; + return out; + }; + Trs.fromRotation = function fromRotation(out, a) { + out[3] = a.x; + out[4] = a.y; + out[5] = a.z; + out[6] = a.w; + return out; + }; + Trs.toEuler = function toEuler(out, a) { + Trs.toRotation(tmp_quat, a); + _quat["default"].toEuler(out, tmp_quat); + return out; + }; + Trs.fromEuler = function fromEuler(out, a) { + _quat["default"].fromEuler(tmp_quat, a.x, a.y, a.z); + Trs.fromRotation(out, tmp_quat); + return out; + }; + Trs.fromEulerNumber = function fromEulerNumber(out, x, y, z) { + _quat["default"].fromEuler(tmp_quat, x, y, z); + Trs.fromRotation(out, tmp_quat); + return out; + }; + Trs.toScale = function toScale(out, a) { + out.x = a[7]; + out.y = a[8]; + out.z = a[9]; + return out; + }; + Trs.fromScale = function fromScale(out, a) { + out[7] = a.x; + out[8] = a.y; + out[9] = a.z; + return out; + }; + Trs.toPosition = function toPosition(out, a) { + out.x = a[0]; + out.y = a[1]; + out.z = a[2]; + return out; + }; + Trs.fromPosition = function fromPosition(out, a) { + out[0] = a.x; + out[1] = a.y; + out[2] = a.z; + return out; + }; + Trs.fromAngleZ = function fromAngleZ(out, a) { + _quat["default"].fromAngleZ(tmp_quat, a); + Trs.fromRotation(out, tmp_quat); + return out; + }; + Trs.toMat4 = function toMat4(out, trs) { + var x = trs[3], y = trs[4], z = trs[5], w = trs[6]; + var x2 = x + x; + var y2 = y + y; + var z2 = z + z; + var xx = x * x2; + var xy = x * y2; + var xz = x * z2; + var yy = y * y2; + var yz = y * z2; + var zz = z * z2; + var wx = w * x2; + var wy = w * y2; + var wz = w * z2; + var sx = trs[7]; + var sy = trs[8]; + var sz = trs[9]; + var m = out.m; + m[0] = (1 - (yy + zz)) * sx; + m[1] = (xy + wz) * sx; + m[2] = (xz - wy) * sx; + m[3] = 0; + m[4] = (xy - wz) * sy; + m[5] = (1 - (xx + zz)) * sy; + m[6] = (yz + wx) * sy; + m[7] = 0; + m[8] = (xz + wy) * sz; + m[9] = (yz - wx) * sz; + m[10] = (1 - (xx + yy)) * sz; + m[11] = 0; + m[12] = trs[0]; + m[13] = trs[1]; + m[14] = trs[2]; + m[15] = 1; + return out; + }; + return Trs; + })(); + exports["default"] = Trs; + cc.Trs = Trs; + module.exports = exports["default"]; + }), { + "./quat": 223 + } ], + 227: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.INT_MIN = exports.INT_MAX = exports.INT_BITS = exports.FLOAT_BYTES = exports.FLOAT_ARRAY_TYPE = exports.EPSILON = void 0; + exports.approx = approx; + exports.clamp = clamp; + exports.clamp01 = clamp01; + exports.equals = equals; + exports.inverseLerp = inverseLerp; + exports.lerp = lerp; + exports.nextPow2 = nextPow2; + exports.pingPong = pingPong; + exports.pseudoRandom = pseudoRandom; + exports.pseudoRandomRange = pseudoRandomRange; + exports.pseudoRandomRangeInt = pseudoRandomRangeInt; + exports.random = void 0; + exports.randomRange = randomRange; + exports.randomRangeInt = randomRangeInt; + exports.repeat = repeat; + exports.sign = sign; + exports.toDegree = toDegree; + exports.toRadian = toRadian; + var _d2r = Math.PI / 180; + var _r2d = 180 / Math.PI; + var EPSILON = 1e-6; + exports.EPSILON = EPSILON; + var INT_BITS = 32; + exports.INT_BITS = INT_BITS; + var INT_MAX = 2147483647; + exports.INT_MAX = INT_MAX; + var INT_MIN = -1 << INT_BITS - 1; + exports.INT_MIN = INT_MIN; + var FLOAT_ARRAY_TYPE = Float64Array; + exports.FLOAT_ARRAY_TYPE = FLOAT_ARRAY_TYPE; + var FLOAT_BYTES = 8; + exports.FLOAT_BYTES = FLOAT_BYTES; + function equals(a, b) { + return Math.abs(a - b) <= EPSILON * Math.max(1, Math.abs(a), Math.abs(b)); + } + function approx(a, b, maxDiff) { + maxDiff = maxDiff || EPSILON; + return Math.abs(a - b) <= maxDiff; + } + function clamp(val, min, max) { + return val < min ? min : val > max ? max : val; + } + function clamp01(val) { + return val < 0 ? 0 : val > 1 ? 1 : val; + } + function lerp(from, to, ratio) { + return from + (to - from) * ratio; + } + function toRadian(a) { + return a * _d2r; + } + function toDegree(a) { + return a * _r2d; + } + var random = Math.random; + exports.random = random; + function randomRange(min, max) { + return Math.random() * (max - min) + min; + } + function randomRangeInt(min, max) { + return Math.floor(randomRange(min, max)); + } + function pseudoRandom(seed) { + seed = (9301 * seed + 49297) % 233280; + return seed / 233280; + } + function pseudoRandomRange(seed, min, max) { + return pseudoRandom(seed) * (max - min) + min; + } + function pseudoRandomRangeInt(seed, min, max) { + return Math.floor(pseudoRandomRange(seed, min, max)); + } + function nextPow2(val) { + --val; + val |= val >> 1; + val |= val >> 2; + val |= val >> 4; + val |= val >> 8; + val |= val >> 16; + ++val; + return val; + } + function repeat(t, length) { + return t - Math.floor(t / length) * length; + } + function pingPong(t, length) { + t = repeat(t, 2 * length); + t = length - Math.abs(t - length); + return t; + } + function inverseLerp(from, to, value) { + return (value - from) / (to - from); + } + function sign(v) { + return (v > 0) - (v < 0); + } + }), {} ], + 228: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _js = _interopRequireDefault(require("../platform/js")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var ValueType = (function() { + function ValueType() {} + var _proto = ValueType.prototype; + _proto.clone = function clone() { + cc.errorID("0100", _js["default"].getClassName(this) + ".clone"); + return null; + }; + _proto.equals = function equals(other) { + cc.errorID("0100", _js["default"].getClassName(this) + ".equals"); + return false; + }; + _proto.lerp = function lerp(to, ratio) { + cc.errorID("0100", _js["default"].getClassName(this) + ".lerp"); + return this.clone(); + }; + _proto.set = function set(source) { + cc.errorID("0100", _js["default"].getClassName(this) + ".set"); + }; + _proto.toString = function toString() { + return "" + {}; + }; + return ValueType; + })(); + exports["default"] = ValueType; + _js["default"].setClassName("cc.ValueType", ValueType); + cc.ValueType = ValueType; + module.exports = exports["default"]; + }), { + "../platform/js": 142 + } ], + 229: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _valueType = _interopRequireDefault(require("./value-type")); + var _CCClass = _interopRequireDefault(require("../platform/CCClass")); + var _misc = _interopRequireDefault(require("../utils/misc")); + var _utils = require("./utils"); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var _x = 0; + var _y = 0; + var Vec2 = (function(_ValueType) { + _inheritsLoose(Vec2, _ValueType); + var _proto = Vec2.prototype; + _proto.sub = function sub(vector, out) { + return Vec2.subtract(out || new Vec2(), this, vector); + }; + _proto.mul = function mul(num, out) { + return Vec2.multiplyScalar(out || new Vec2(), this, num); + }; + _proto.div = function div(num, out) { + return Vec2.multiplyScalar(out || new Vec2(), this, 1 / num); + }; + _proto.scale = function scale(vector, out) { + return Vec2.multiply(out || new Vec2(), this, vector); + }; + _proto.neg = function neg(out) { + return Vec2.negate(out || new Vec2(), this); + }; + Vec2.clone = function clone(a) { + return new Vec2(a.x, a.y); + }; + Vec2.copy = function copy(out, a) { + out.x = a.x; + out.y = a.y; + return out; + }; + Vec2.set = function set(out, x, y) { + out.x = x; + out.y = y; + return out; + }; + Vec2.add = function add(out, a, b) { + out.x = a.x + b.x; + out.y = a.y + b.y; + return out; + }; + Vec2.subtract = function subtract(out, a, b) { + out.x = a.x - b.x; + out.y = a.y - b.y; + return out; + }; + Vec2.multiply = function multiply(out, a, b) { + out.x = a.x * b.x; + out.y = a.y * b.y; + return out; + }; + Vec2.divide = function divide(out, a, b) { + out.x = a.x / b.x; + out.y = a.y / b.y; + return out; + }; + Vec2.ceil = function ceil(out, a) { + out.x = Math.ceil(a.x); + out.y = Math.ceil(a.y); + return out; + }; + Vec2.floor = function floor(out, a) { + out.x = Math.floor(a.x); + out.y = Math.floor(a.y); + return out; + }; + Vec2.min = function min(out, a, b) { + out.x = Math.min(a.x, b.x); + out.y = Math.min(a.y, b.y); + return out; + }; + Vec2.max = function max(out, a, b) { + out.x = Math.max(a.x, b.x); + out.y = Math.max(a.y, b.y); + return out; + }; + Vec2.round = function round(out, a) { + out.x = Math.round(a.x); + out.y = Math.round(a.y); + return out; + }; + Vec2.multiplyScalar = function multiplyScalar(out, a, b) { + out.x = a.x * b; + out.y = a.y * b; + return out; + }; + Vec2.scaleAndAdd = function scaleAndAdd(out, a, b, scale) { + out.x = a.x + b.x * scale; + out.y = a.y + b.y * scale; + return out; + }; + Vec2.distance = function distance(a, b) { + _x = b.x - a.x; + _y = b.y - a.y; + return Math.sqrt(_x * _x + _y * _y); + }; + Vec2.squaredDistance = function squaredDistance(a, b) { + _x = b.x - a.x; + _y = b.y - a.y; + return _x * _x + _y * _y; + }; + Vec2.len = function len(a) { + _x = a.x; + _y = a.y; + return Math.sqrt(_x * _x + _y * _y); + }; + Vec2.lengthSqr = function lengthSqr(a) { + _x = a.x; + _y = a.y; + return _x * _x + _y * _y; + }; + Vec2.negate = function negate(out, a) { + out.x = -a.x; + out.y = -a.y; + return out; + }; + Vec2.inverse = function inverse(out, a) { + out.x = 1 / a.x; + out.y = 1 / a.y; + return out; + }; + Vec2.inverseSafe = function inverseSafe(out, a) { + _x = a.x; + _y = a.y; + Math.abs(_x) < _utils.EPSILON ? out.x = 0 : out.x = 1 / _x; + Math.abs(_y) < _utils.EPSILON ? out.y = 0 : out.y = 1 / _y; + return out; + }; + Vec2.normalize = function normalize(out, a) { + _x = a.x; + _y = a.y; + var len = _x * _x + _y * _y; + if (len > 0) { + len = 1 / Math.sqrt(len); + out.x = _x * len; + out.y = _y * len; + } + return out; + }; + Vec2.dot = function dot(a, b) { + return a.x * b.x + a.y * b.y; + }; + Vec2.cross = function cross(out, a, b) { + out.x = out.y = 0; + out.z = a.x * b.y - a.y * b.x; + return out; + }; + Vec2.lerp = function lerp(out, a, b, t) { + _x = a.x; + _y = a.y; + out.x = _x + t * (b.x - _x); + out.y = _y + t * (b.y - _y); + return out; + }; + Vec2.random = function random(out, scale) { + scale = scale || 1; + var r = 2 * (0, _utils.random)() * Math.PI; + out.x = Math.cos(r) * scale; + out.y = Math.sin(r) * scale; + return out; + }; + Vec2.transformMat3 = function transformMat3(out, a, mat) { + _x = a.x; + _y = a.y; + var m = mat.m; + out.x = m[0] * _x + m[3] * _y + m[6]; + out.y = m[1] * _x + m[4] * _y + m[7]; + return out; + }; + Vec2.transformMat4 = function transformMat4(out, a, mat) { + _x = a.x; + _y = a.y; + var m = mat.m; + out.x = m[0] * _x + m[4] * _y + m[12]; + out.y = m[1] * _x + m[5] * _y + m[13]; + return out; + }; + Vec2.strictEquals = function strictEquals(a, b) { + return a.x === b.x && a.y === b.y; + }; + Vec2.equals = function equals(a, b, epsilon) { + void 0 === epsilon && (epsilon = _utils.EPSILON); + return Math.abs(a.x - b.x) <= epsilon * Math.max(1, Math.abs(a.x), Math.abs(b.x)) && Math.abs(a.y - b.y) <= epsilon * Math.max(1, Math.abs(a.y), Math.abs(b.y)); + }; + Vec2.angle = function angle(a, b) { + Vec2.normalize(v2_1, a); + Vec2.normalize(v2_2, b); + var cosine = Vec2.dot(v2_1, v2_2); + if (cosine > 1) return 0; + if (cosine < -1) return Math.PI; + return Math.acos(cosine); + }; + Vec2.toArray = function toArray(out, v, ofs) { + void 0 === ofs && (ofs = 0); + out[ofs + 0] = v.x; + out[ofs + 1] = v.y; + return out; + }; + Vec2.fromArray = function fromArray(out, arr, ofs) { + void 0 === ofs && (ofs = 0); + out.x = arr[ofs + 0]; + out.y = arr[ofs + 1]; + return out; + }; + function Vec2(x, y) { + var _this; + void 0 === x && (x = 0); + void 0 === y && (y = 0); + _this = _ValueType.call(this) || this; + _this.mag = Vec2.prototype.len; + _this.magSqr = Vec2.prototype.lengthSqr; + _this.subSelf = Vec2.prototype.subtract; + _this.mulSelf = Vec2.prototype.multiplyScalar; + _this.divSelf = Vec2.prototype.divide; + _this.scaleSelf = Vec2.prototype.multiply; + _this.negSelf = Vec2.prototype.negate; + _this.x = void 0; + _this.y = void 0; + _this.z = 0; + if (x && "object" === typeof x) { + _this.x = x.x || 0; + _this.y = x.y || 0; + } else { + _this.x = x || 0; + _this.y = y || 0; + } + return _this; + } + _proto.clone = function clone() { + return new Vec2(this.x, this.y); + }; + _proto.set = function set(newValue) { + this.x = newValue.x; + this.y = newValue.y; + return this; + }; + _proto.equals = function equals(other) { + return other && this.x === other.x && this.y === other.y; + }; + _proto.fuzzyEquals = function fuzzyEquals(other, variance) { + if (this.x - variance <= other.x && other.x <= this.x + variance && this.y - variance <= other.y && other.y <= this.y + variance) return true; + return false; + }; + _proto.toString = function toString() { + return "(" + this.x.toFixed(2) + ", " + this.y.toFixed(2) + ")"; + }; + _proto.lerp = function lerp(to, ratio, out) { + out = out || new Vec2(); + var x = this.x; + var y = this.y; + out.x = x + (to.x - x) * ratio; + out.y = y + (to.y - y) * ratio; + return out; + }; + _proto.clampf = function clampf(min_inclusive, max_inclusive) { + this.x = _misc["default"].clampf(this.x, min_inclusive.x, max_inclusive.x); + this.y = _misc["default"].clampf(this.y, min_inclusive.y, max_inclusive.y); + return this; + }; + _proto.add = function add(vector, out) { + out = out || new Vec2(); + out.x = this.x + vector.x; + out.y = this.y + vector.y; + return out; + }; + _proto.addSelf = function addSelf(vector) { + this.x += vector.x; + this.y += vector.y; + return this; + }; + _proto.subtract = function subtract(vector) { + this.x -= vector.x; + this.y -= vector.y; + return this; + }; + _proto.multiplyScalar = function multiplyScalar(num) { + this.x *= num; + this.y *= num; + return this; + }; + _proto.multiply = function multiply(vector) { + this.x *= vector.x; + this.y *= vector.y; + return this; + }; + _proto.divide = function divide(num) { + this.x /= num; + this.y /= num; + return this; + }; + _proto.negate = function negate() { + this.x = -this.x; + this.y = -this.y; + return this; + }; + _proto.dot = function dot(vector) { + return this.x * vector.x + this.y * vector.y; + }; + _proto.cross = function cross(vector) { + return this.x * vector.y - this.y * vector.x; + }; + _proto.len = function len() { + return Math.sqrt(this.x * this.x + this.y * this.y); + }; + _proto.lengthSqr = function lengthSqr() { + return this.x * this.x + this.y * this.y; + }; + _proto.normalizeSelf = function normalizeSelf() { + var magSqr = this.x * this.x + this.y * this.y; + if (1 === magSqr) return this; + if (0 === magSqr) return this; + var invsqrt = 1 / Math.sqrt(magSqr); + this.x *= invsqrt; + this.y *= invsqrt; + return this; + }; + _proto.normalize = function normalize(out) { + out = out || new Vec2(); + out.x = this.x; + out.y = this.y; + out.normalizeSelf(); + return out; + }; + _proto.angle = function angle(vector) { + var magSqr1 = this.magSqr(); + var magSqr2 = vector.magSqr(); + if (0 === magSqr1 || 0 === magSqr2) { + console.warn("Can't get angle between zero vector"); + return 0; + } + var dot = this.dot(vector); + var theta = dot / Math.sqrt(magSqr1 * magSqr2); + theta = _misc["default"].clampf(theta, -1, 1); + return Math.acos(theta); + }; + _proto.signAngle = function signAngle(vector) { + var angle = this.angle(vector); + return this.cross(vector) < 0 ? -angle : angle; + }; + _proto.rotate = function rotate(radians, out) { + out = out || new Vec2(); + out.x = this.x; + out.y = this.y; + return out.rotateSelf(radians); + }; + _proto.rotateSelf = function rotateSelf(radians) { + var sin = Math.sin(radians); + var cos = Math.cos(radians); + var x = this.x; + this.x = cos * x - sin * this.y; + this.y = sin * x + cos * this.y; + return this; + }; + _proto.project = function project(vector) { + return vector.multiplyScalar(this.dot(vector) / vector.dot(vector)); + }; + _proto.transformMat4 = function transformMat4(m, out) { + out = out || new Vec2(); + Vec2.transformMat4(out, this, m); + return out; + }; + _proto.maxAxis = function maxAxis() { + return Math.max(this.x, this.y); + }; + _createClass(Vec2, null, [ { + key: "ONE", + get: function get() { + return new Vec2(1, 1); + } + }, { + key: "ZERO", + get: function get() { + return new Vec2(0, 0); + } + }, { + key: "UP", + get: function get() { + return new Vec2(0, 1); + } + }, { + key: "RIGHT", + get: function get() { + return new Vec2(1, 0); + } + } ]); + return Vec2; + })(_valueType["default"]); + exports["default"] = Vec2; + Vec2.sub = Vec2.subtract; + Vec2.mul = Vec2.multiply; + Vec2.scale = Vec2.multiplyScalar; + Vec2.mag = Vec2.len; + Vec2.squaredMagnitude = Vec2.lengthSqr; + Vec2.div = Vec2.divide; + Vec2.ONE_R = Vec2.ONE; + Vec2.ZERO_R = Vec2.ZERO; + Vec2.UP_R = Vec2.UP; + Vec2.RIGHT_R = Vec2.RIGHT; + var v2_1 = new Vec2(); + var v2_2 = new Vec2(); + _CCClass["default"].fastDefine("cc.Vec2", Vec2, { + x: 0, + y: 0 + }); + cc.v2 = function v2(x, y) { + return new Vec2(x, y); + }; + cc.Vec2 = Vec2; + module.exports = exports["default"]; + }), { + "../platform/CCClass": 121, + "../utils/misc": 205, + "./utils": 227, + "./value-type": 228 + } ], + 230: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _valueType = _interopRequireDefault(require("./value-type")); + var _CCClass = _interopRequireDefault(require("../platform/CCClass")); + var _misc = _interopRequireDefault(require("../utils/misc")); + var _vec = _interopRequireDefault(require("./vec2")); + var _utils = require("./utils"); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var _x = 0; + var _y = 0; + var _z = 0; + var Vec3 = (function(_ValueType) { + _inheritsLoose(Vec3, _ValueType); + var _proto = Vec3.prototype; + _proto.sub = function sub(vector, out) { + return Vec3.subtract(out || new Vec3(), this, vector); + }; + _proto.mul = function mul(num, out) { + return Vec3.multiplyScalar(out || new Vec3(), this, num); + }; + _proto.div = function div(num, out) { + return Vec3.multiplyScalar(out || new Vec3(), this, 1 / num); + }; + _proto.scale = function scale(vector, out) { + return Vec3.multiply(out || new Vec3(), this, vector); + }; + _proto.neg = function neg(out) { + return Vec3.negate(out || new Vec3(), this); + }; + Vec3.zero = function zero(out) { + out.x = 0; + out.y = 0; + out.z = 0; + return out; + }; + Vec3.clone = function clone(a) { + return new Vec3(a.x, a.y, a.z); + }; + Vec3.copy = function copy(out, a) { + out.x = a.x; + out.y = a.y; + out.z = a.z; + return out; + }; + Vec3.set = function set(out, x, y, z) { + out.x = x; + out.y = y; + out.z = z; + return out; + }; + Vec3.add = function add(out, a, b) { + out.x = a.x + b.x; + out.y = a.y + b.y; + out.z = a.z + b.z; + return out; + }; + Vec3.subtract = function subtract(out, a, b) { + out.x = a.x - b.x; + out.y = a.y - b.y; + out.z = a.z - b.z; + return out; + }; + Vec3.multiply = function multiply(out, a, b) { + out.x = a.x * b.x; + out.y = a.y * b.y; + out.z = a.z * b.z; + return out; + }; + Vec3.divide = function divide(out, a, b) { + out.x = a.x / b.x; + out.y = a.y / b.y; + out.z = a.z / b.z; + return out; + }; + Vec3.ceil = function ceil(out, a) { + out.x = Math.ceil(a.x); + out.y = Math.ceil(a.y); + out.z = Math.ceil(a.z); + return out; + }; + Vec3.floor = function floor(out, a) { + out.x = Math.floor(a.x); + out.y = Math.floor(a.y); + out.z = Math.floor(a.z); + return out; + }; + Vec3.min = function min(out, a, b) { + out.x = Math.min(a.x, b.x); + out.y = Math.min(a.y, b.y); + out.z = Math.min(a.z, b.z); + return out; + }; + Vec3.max = function max(out, a, b) { + out.x = Math.max(a.x, b.x); + out.y = Math.max(a.y, b.y); + out.z = Math.max(a.z, b.z); + return out; + }; + Vec3.round = function round(out, a) { + out.x = Math.round(a.x); + out.y = Math.round(a.y); + out.z = Math.round(a.z); + return out; + }; + Vec3.multiplyScalar = function multiplyScalar(out, a, b) { + out.x = a.x * b; + out.y = a.y * b; + out.z = a.z * b; + return out; + }; + Vec3.scaleAndAdd = function scaleAndAdd(out, a, b, scale) { + out.x = a.x + b.x * scale; + out.y = a.y + b.y * scale; + out.z = a.z + b.z * scale; + return out; + }; + Vec3.distance = function distance(a, b) { + _x = b.x - a.x; + _y = b.y - a.y; + _z = b.z - a.z; + return Math.sqrt(_x * _x + _y * _y + _z * _z); + }; + Vec3.squaredDistance = function squaredDistance(a, b) { + _x = b.x - a.x; + _y = b.y - a.y; + _z = b.z - a.z; + return _x * _x + _y * _y + _z * _z; + }; + Vec3.len = function len(a) { + _x = a.x; + _y = a.y; + _z = a.z; + return Math.sqrt(_x * _x + _y * _y + _z * _z); + }; + Vec3.lengthSqr = function lengthSqr(a) { + _x = a.x; + _y = a.y; + _z = a.z; + return _x * _x + _y * _y + _z * _z; + }; + Vec3.negate = function negate(out, a) { + out.x = -a.x; + out.y = -a.y; + out.z = -a.z; + return out; + }; + Vec3.inverse = function inverse(out, a) { + out.x = 1 / a.x; + out.y = 1 / a.y; + out.z = 1 / a.z; + return out; + }; + Vec3.inverseSafe = function inverseSafe(out, a) { + _x = a.x; + _y = a.y; + _z = a.z; + Math.abs(_x) < _utils.EPSILON ? out.x = 0 : out.x = 1 / _x; + Math.abs(_y) < _utils.EPSILON ? out.y = 0 : out.y = 1 / _y; + Math.abs(_z) < _utils.EPSILON ? out.z = 0 : out.z = 1 / _z; + return out; + }; + Vec3.normalize = function normalize(out, a) { + _x = a.x; + _y = a.y; + _z = a.z; + var len = _x * _x + _y * _y + _z * _z; + if (len > 0) { + len = 1 / Math.sqrt(len); + out.x = _x * len; + out.y = _y * len; + out.z = _z * len; + } + return out; + }; + Vec3.dot = function dot(a, b) { + return a.x * b.x + a.y * b.y + a.z * b.z; + }; + Vec3.cross = function cross(out, a, b) { + var ax = a.x, ay = a.y, az = a.z; + var bx = b.x, by = b.y, bz = b.z; + out.x = ay * bz - az * by; + out.y = az * bx - ax * bz; + out.z = ax * by - ay * bx; + return out; + }; + Vec3.lerp = function lerp(out, a, b, t) { + out.x = a.x + t * (b.x - a.x); + out.y = a.y + t * (b.y - a.y); + out.z = a.z + t * (b.z - a.z); + return out; + }; + Vec3.random = function random(out, scale) { + scale = scale || 1; + var phi = 2 * (0, _utils.random)() * Math.PI; + var cosTheta = 2 * (0, _utils.random)() - 1; + var sinTheta = Math.sqrt(1 - cosTheta * cosTheta); + out.x = sinTheta * Math.cos(phi) * scale; + out.y = sinTheta * Math.sin(phi) * scale; + out.z = cosTheta * scale; + return out; + }; + Vec3.transformMat4 = function transformMat4(out, a, mat) { + _x = a.x; + _y = a.y; + _z = a.z; + var m = mat.m; + var rhw = m[3] * _x + m[7] * _y + m[11] * _z + m[15]; + rhw = rhw ? 1 / rhw : 1; + out.x = (m[0] * _x + m[4] * _y + m[8] * _z + m[12]) * rhw; + out.y = (m[1] * _x + m[5] * _y + m[9] * _z + m[13]) * rhw; + out.z = (m[2] * _x + m[6] * _y + m[10] * _z + m[14]) * rhw; + return out; + }; + Vec3.transformMat4Normal = function transformMat4Normal(out, a, mat) { + _x = a.x; + _y = a.y; + _z = a.z; + var m = mat.m; + var rhw = m[3] * _x + m[7] * _y + m[11] * _z; + rhw = rhw ? 1 / rhw : 1; + out.x = (m[0] * _x + m[4] * _y + m[8] * _z) * rhw; + out.y = (m[1] * _x + m[5] * _y + m[9] * _z) * rhw; + out.z = (m[2] * _x + m[6] * _y + m[10] * _z) * rhw; + return out; + }; + Vec3.transformMat3 = function transformMat3(out, a, mat) { + _x = a.x; + _y = a.y; + _z = a.z; + var m = mat.m; + out.x = _x * m[0] + _y * m[3] + _z * m[6]; + out.y = _x * m[1] + _y * m[4] + _z * m[7]; + out.z = _x * m[2] + _y * m[5] + _z * m[8]; + return out; + }; + Vec3.transformAffine = function transformAffine(out, v, mat) { + _x = v.x; + _y = v.y; + _z = v.z; + var m = mat.m; + out.x = m[0] * _x + m[1] * _y + m[2] * _z + m[3]; + out.y = m[4] * _x + m[5] * _y + m[6] * _z + m[7]; + out.x = m[8] * _x + m[9] * _y + m[10] * _z + m[11]; + return out; + }; + Vec3.transformQuat = function transformQuat(out, a, q) { + var ix = q.w * a.x + q.y * a.z - q.z * a.y; + var iy = q.w * a.y + q.z * a.x - q.x * a.z; + var iz = q.w * a.z + q.x * a.y - q.y * a.x; + var iw = -q.x * a.x - q.y * a.y - q.z * a.z; + out.x = ix * q.w + iw * -q.x + iy * -q.z - iz * -q.y; + out.y = iy * q.w + iw * -q.y + iz * -q.x - ix * -q.z; + out.z = iz * q.w + iw * -q.z + ix * -q.y - iy * -q.x; + return out; + }; + Vec3.transformRTS = function transformRTS(out, a, r, t, s) { + var x = a.x * s.x; + var y = a.y * s.y; + var z = a.z * s.z; + var ix = r.w * x + r.y * z - r.z * y; + var iy = r.w * y + r.z * x - r.x * z; + var iz = r.w * z + r.x * y - r.y * x; + var iw = -r.x * x - r.y * y - r.z * z; + out.x = ix * r.w + iw * -r.x + iy * -r.z - iz * -r.y + t.x; + out.y = iy * r.w + iw * -r.y + iz * -r.x - ix * -r.z + t.y; + out.z = iz * r.w + iw * -r.z + ix * -r.y - iy * -r.x + t.z; + return out; + }; + Vec3.transformInverseRTS = function transformInverseRTS(out, a, r, t, s) { + var x = a.x - t.x; + var y = a.y - t.y; + var z = a.z - t.z; + var ix = r.w * x - r.y * z + r.z * y; + var iy = r.w * y - r.z * x + r.x * z; + var iz = r.w * z - r.x * y + r.y * x; + var iw = r.x * x + r.y * y + r.z * z; + out.x = (ix * r.w + iw * r.x + iy * r.z - iz * r.y) / s.x; + out.y = (iy * r.w + iw * r.y + iz * r.x - ix * r.z) / s.y; + out.z = (iz * r.w + iw * r.z + ix * r.y - iy * r.x) / s.z; + return out; + }; + Vec3.rotateX = function rotateX(out, v, o, a) { + _x = v.x - o.x; + _y = v.y - o.y; + _z = v.z - o.z; + var cos = Math.cos(a); + var sin = Math.sin(a); + var rx = _x; + var ry = _y * cos - _z * sin; + var rz = _y * sin + _z * cos; + out.x = rx + o.x; + out.y = ry + o.y; + out.z = rz + o.z; + return out; + }; + Vec3.rotateY = function rotateY(out, v, o, a) { + _x = v.x - o.x; + _y = v.y - o.y; + _z = v.z - o.z; + var cos = Math.cos(a); + var sin = Math.sin(a); + var rx = _z * sin + _x * cos; + var ry = _y; + var rz = _z * cos - _x * sin; + out.x = rx + o.x; + out.y = ry + o.y; + out.z = rz + o.z; + return out; + }; + Vec3.rotateZ = function rotateZ(out, v, o, a) { + _x = v.x - o.x; + _y = v.y - o.y; + _z = v.z - o.z; + var cos = Math.cos(a); + var sin = Math.sin(a); + var rx = _x * cos - _y * sin; + var ry = _x * sin + _y * cos; + var rz = _z; + out.x = rx + o.x; + out.y = ry + o.y; + out.z = rz + o.z; + return out; + }; + Vec3.strictEquals = function strictEquals(a, b) { + return a.x === b.x && a.y === b.y && a.z === b.z; + }; + Vec3.equals = function equals(a, b, epsilon) { + void 0 === epsilon && (epsilon = _utils.EPSILON); + var a0 = a.x, a1 = a.y, a2 = a.z; + var b0 = b.x, b1 = b.y, b2 = b.z; + return Math.abs(a0 - b0) <= epsilon * Math.max(1, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= epsilon * Math.max(1, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= epsilon * Math.max(1, Math.abs(a2), Math.abs(b2)); + }; + Vec3.angle = function angle(a, b) { + Vec3.normalize(v3_1, a); + Vec3.normalize(v3_2, b); + var cosine = Vec3.dot(v3_1, v3_2); + if (cosine > 1) return 0; + if (cosine < -1) return Math.PI; + return Math.acos(cosine); + }; + Vec3.projectOnPlane = function projectOnPlane(out, a, n) { + return Vec3.subtract(out, a, Vec3.project(out, a, n)); + }; + Vec3.project = function project(out, a, b) { + var sqrLen = Vec3.lengthSqr(b); + return sqrLen < 1e-6 ? Vec3.set(out, 0, 0, 0) : Vec3.multiplyScalar(out, b, Vec3.dot(a, b) / sqrLen); + }; + Vec3.toArray = function toArray(out, v, ofs) { + void 0 === ofs && (ofs = 0); + out[ofs + 0] = v.x; + out[ofs + 1] = v.y; + out[ofs + 2] = v.z; + return out; + }; + Vec3.fromArray = function fromArray(out, arr, ofs) { + void 0 === ofs && (ofs = 0); + out.x = arr[ofs + 0]; + out.y = arr[ofs + 1]; + out.z = arr[ofs + 2]; + return out; + }; + function Vec3(x, y, z) { + var _this; + void 0 === x && (x = 0); + void 0 === y && (y = 0); + void 0 === z && (z = 0); + _this = _ValueType.call(this) || this; + _this.mag = Vec3.prototype.len; + _this.magSqr = Vec3.prototype.lengthSqr; + _this.subSelf = Vec3.prototype.subtract; + _this.mulSelf = Vec3.prototype.multiplyScalar; + _this.divSelf = Vec3.prototype.divide; + _this.scaleSelf = Vec3.prototype.multiply; + _this.negSelf = Vec3.prototype.negate; + _this.x = void 0; + _this.y = void 0; + _this.z = void 0; + _this.angle = _vec["default"].prototype.angle; + _this.project = _vec["default"].prototype.project; + if (x && "object" === typeof x) { + _this.x = x.x; + _this.y = x.y; + _this.z = x.z; + } else { + _this.x = x; + _this.y = y; + _this.z = z; + } + return _this; + } + _proto.clone = function clone() { + return new Vec3(this.x, this.y, this.z); + }; + _proto.set = function set(newValue) { + this.x = newValue.x; + this.y = newValue.y; + this.z = newValue.z; + return this; + }; + _proto.equals = function equals(other) { + return other && this.x === other.x && this.y === other.y && this.z === other.z; + }; + _proto.fuzzyEquals = function fuzzyEquals(other, variance) { + if (this.x - variance <= other.x && other.x <= this.x + variance && this.y - variance <= other.y && other.y <= this.y + variance && this.z - variance <= other.z && other.z <= this.z + variance) return true; + return false; + }; + _proto.toString = function toString() { + return "(" + this.x.toFixed(2) + ", " + this.y.toFixed(2) + ", " + this.z.toFixed(2) + ")"; + }; + _proto.lerp = function lerp(to, ratio, out) { + out = out || new Vec3(); + Vec3.lerp(out, this, to, ratio); + return out; + }; + _proto.clampf = function clampf(min_inclusive, max_inclusive) { + this.x = _misc["default"].clampf(this.x, min_inclusive.x, max_inclusive.x); + this.y = _misc["default"].clampf(this.y, min_inclusive.y, max_inclusive.y); + this.z = _misc["default"].clampf(this.z, min_inclusive.z, max_inclusive.z); + return this; + }; + _proto.addSelf = function addSelf(vector) { + this.x += vector.x; + this.y += vector.y; + this.z += vector.z; + return this; + }; + _proto.add = function add(vector, out) { + out = out || new Vec3(); + out.x = this.x + vector.x; + out.y = this.y + vector.y; + out.z = this.z + vector.z; + return out; + }; + _proto.subtract = function subtract(vector) { + this.x -= vector.x; + this.y -= vector.y; + this.z -= vector.z; + return this; + }; + _proto.multiplyScalar = function multiplyScalar(num) { + this.x *= num; + this.y *= num; + this.z *= num; + return this; + }; + _proto.multiply = function multiply(vector) { + this.x *= vector.x; + this.y *= vector.y; + this.z *= vector.z; + return this; + }; + _proto.divide = function divide(num) { + this.x /= num; + this.y /= num; + this.z /= num; + return this; + }; + _proto.negate = function negate() { + this.x = -this.x; + this.y = -this.y; + this.z = -this.z; + return this; + }; + _proto.dot = function dot(vector) { + return this.x * vector.x + this.y * vector.y + this.z * vector.z; + }; + _proto.cross = function cross(vector, out) { + out = out || new Vec3(); + Vec3.cross(out, this, vector); + return out; + }; + _proto.len = function len() { + return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z); + }; + _proto.lengthSqr = function lengthSqr() { + return this.x * this.x + this.y * this.y + this.z * this.z; + }; + _proto.normalizeSelf = function normalizeSelf() { + Vec3.normalize(this, this); + return this; + }; + _proto.normalize = function normalize(out) { + out = out || new Vec3(); + Vec3.normalize(out, this); + return out; + }; + _proto.transformMat4 = function transformMat4(m, out) { + out = out || new Vec3(); + Vec3.transformMat4(out, this, m); + return out; + }; + _proto.maxAxis = function maxAxis() { + return Math.max(this.x, this.y, this.z); + }; + _proto.signAngle = function signAngle(vector) { + cc.warnID(1408, "vec3.signAngle", "v2.1", "cc.v2(selfVector).signAngle(vector)"); + var vec1 = new _vec["default"](this.x, this.y); + var vec2 = new _vec["default"](vector.x, vector.y); + return vec1.signAngle(vec2); + }; + _proto.rotate = function rotate(radians, out) { + cc.warnID(1408, "vec3.rotate", "v2.1", "cc.v2(selfVector).rotate(radians, out)"); + return _vec["default"].prototype.rotate.call(this, radians, out); + }; + _proto.rotateSelf = function rotateSelf(radians) { + cc.warnID(1408, "vec3.rotateSelf", "v2.1", "cc.v2(selfVector).rotateSelf(radians)"); + return _vec["default"].prototype.rotateSelf.call(this, radians); + }; + _createClass(Vec3, null, [ { + key: "ONE", + get: function get() { + return new Vec3(1, 1, 1); + } + }, { + key: "ZERO", + get: function get() { + return new Vec3(); + } + }, { + key: "UP", + get: function get() { + return new Vec3(0, 1, 0); + } + }, { + key: "RIGHT", + get: function get() { + return new Vec3(1, 0, 0); + } + }, { + key: "FORWARD", + get: function get() { + return new Vec3(0, 0, 1); + } + } ]); + return Vec3; + })(_valueType["default"]); + exports["default"] = Vec3; + Vec3.sub = Vec3.subtract; + Vec3.mul = Vec3.multiply; + Vec3.scale = Vec3.multiplyScalar; + Vec3.mag = Vec3.len; + Vec3.squaredMagnitude = Vec3.lengthSqr; + Vec3.div = Vec3.divide; + Vec3.ONE_R = Vec3.ONE; + Vec3.ZERO_R = Vec3.ZERO; + Vec3.UP_R = Vec3.UP; + Vec3.RIGHT_R = Vec3.RIGHT; + Vec3.FRONT_R = Vec3.FORWARD; + var v3_1 = new Vec3(); + var v3_2 = new Vec3(); + _CCClass["default"].fastDefine("cc.Vec3", Vec3, { + x: 0, + y: 0, + z: 0 + }); + cc.v3 = function v3(x, y, z) { + return new Vec3(x, y, z); + }; + cc.Vec3 = Vec3; + module.exports = exports["default"]; + }), { + "../platform/CCClass": 121, + "../utils/misc": 205, + "./utils": 227, + "./value-type": 228, + "./vec2": 229 + } ], + 231: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + exports.v4 = v4; + var _CCClass = _interopRequireDefault(require("../platform/CCClass")); + var _valueType = _interopRequireDefault(require("./value-type")); + var _utils = require("./utils"); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var _x = 0; + var _y = 0; + var _z = 0; + var _w = 0; + var Vec4 = (function(_ValueType) { + _inheritsLoose(Vec4, _ValueType); + var _proto = Vec4.prototype; + _proto.sub = function sub(vector, out) { + return Vec4.subtract(out || new Vec4(), this, vector); + }; + _proto.mul = function mul(num, out) { + return Vec4.multiplyScalar(out || new Vec4(), this, num); + }; + _proto.div = function div(num, out) { + return Vec4.multiplyScalar(out || new Vec4(), this, 1 / num); + }; + _proto.scale = function scale(vector, out) { + return Vec4.multiply(out || new Vec4(), this, vector); + }; + _proto.neg = function neg(out) { + return Vec4.negate(out || new Vec4(), this); + }; + Vec4.clone = function clone(a) { + return new Vec4(a.x, a.y, a.z, a.w); + }; + Vec4.copy = function copy(out, a) { + out.x = a.x; + out.y = a.y; + out.z = a.z; + out.w = a.w; + return out; + }; + Vec4.set = function set(out, x, y, z, w) { + out.x = x; + out.y = y; + out.z = z; + out.w = w; + return out; + }; + Vec4.add = function add(out, a, b) { + out.x = a.x + b.x; + out.y = a.y + b.y; + out.z = a.z + b.z; + out.w = a.w + b.w; + return out; + }; + Vec4.subtract = function subtract(out, a, b) { + out.x = a.x - b.x; + out.y = a.y - b.y; + out.z = a.z - b.z; + out.w = a.w - b.w; + return out; + }; + Vec4.multiply = function multiply(out, a, b) { + out.x = a.x * b.x; + out.y = a.y * b.y; + out.z = a.z * b.z; + out.w = a.w * b.w; + return out; + }; + Vec4.divide = function divide(out, a, b) { + out.x = a.x / b.x; + out.y = a.y / b.y; + out.z = a.z / b.z; + out.w = a.w / b.w; + return out; + }; + Vec4.ceil = function ceil(out, a) { + out.x = Math.ceil(a.x); + out.y = Math.ceil(a.y); + out.z = Math.ceil(a.z); + out.w = Math.ceil(a.w); + return out; + }; + Vec4.floor = function floor(out, a) { + out.x = Math.floor(a.x); + out.y = Math.floor(a.y); + out.z = Math.floor(a.z); + out.w = Math.floor(a.w); + return out; + }; + Vec4.min = function min(out, a, b) { + out.x = Math.min(a.x, b.x); + out.y = Math.min(a.y, b.y); + out.z = Math.min(a.z, b.z); + out.w = Math.min(a.w, b.w); + return out; + }; + Vec4.max = function max(out, a, b) { + out.x = Math.max(a.x, b.x); + out.y = Math.max(a.y, b.y); + out.z = Math.max(a.z, b.z); + out.w = Math.max(a.w, b.w); + return out; + }; + Vec4.round = function round(out, a) { + out.x = Math.round(a.x); + out.y = Math.round(a.y); + out.z = Math.round(a.z); + out.w = Math.round(a.w); + return out; + }; + Vec4.multiplyScalar = function multiplyScalar(out, a, b) { + out.x = a.x * b; + out.y = a.y * b; + out.z = a.z * b; + out.w = a.w * b; + return out; + }; + Vec4.scaleAndAdd = function scaleAndAdd(out, a, b, scale) { + out.x = a.x + b.x * scale; + out.y = a.y + b.y * scale; + out.z = a.z + b.z * scale; + out.w = a.w + b.w * scale; + return out; + }; + Vec4.distance = function distance(a, b) { + var x = b.x - a.x; + var y = b.y - a.y; + var z = b.z - a.z; + var w = b.w - a.w; + return Math.sqrt(x * x + y * y + z * z + w * w); + }; + Vec4.squaredDistance = function squaredDistance(a, b) { + var x = b.x - a.x; + var y = b.y - a.y; + var z = b.z - a.z; + var w = b.w - a.w; + return x * x + y * y + z * z + w * w; + }; + Vec4.len = function len(a) { + _x = a.x; + _y = a.y; + _z = a.z; + _w = a.w; + return Math.sqrt(_x * _x + _y * _y + _z * _z + _w * _w); + }; + Vec4.lengthSqr = function lengthSqr(a) { + _x = a.x; + _y = a.y; + _z = a.z; + _w = a.w; + return _x * _x + _y * _y + _z * _z + _w * _w; + }; + Vec4.negate = function negate(out, a) { + out.x = -a.x; + out.y = -a.y; + out.z = -a.z; + out.w = -a.w; + return out; + }; + Vec4.inverse = function inverse(out, a) { + out.x = 1 / a.x; + out.y = 1 / a.y; + out.z = 1 / a.z; + out.w = 1 / a.w; + return out; + }; + Vec4.inverseSafe = function inverseSafe(out, a) { + _x = a.x; + _y = a.y; + _z = a.z; + _w = a.w; + Math.abs(_x) < _utils.EPSILON ? out.x = 0 : out.x = 1 / _x; + Math.abs(_y) < _utils.EPSILON ? out.y = 0 : out.y = 1 / _y; + Math.abs(_z) < _utils.EPSILON ? out.z = 0 : out.z = 1 / _z; + Math.abs(_w) < _utils.EPSILON ? out.w = 0 : out.w = 1 / _w; + return out; + }; + Vec4.normalize = function normalize(out, a) { + _x = a.x; + _y = a.y; + _z = a.z; + _w = a.w; + var len = _x * _x + _y * _y + _z * _z + _w * _w; + if (len > 0) { + len = 1 / Math.sqrt(len); + out.x = _x * len; + out.y = _y * len; + out.z = _z * len; + out.w = _w * len; + } + return out; + }; + Vec4.dot = function dot(a, b) { + return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w; + }; + Vec4.lerp = function lerp(out, a, b, t) { + out.x = a.x + t * (b.x - a.x); + out.y = a.y + t * (b.y - a.y); + out.z = a.z + t * (b.z - a.z); + out.w = a.w + t * (b.w - a.w); + return out; + }; + Vec4.random = function random(out, scale) { + scale = scale || 1; + var phi = 2 * (0, _utils.random)() * Math.PI; + var cosTheta = 2 * (0, _utils.random)() - 1; + var sinTheta = Math.sqrt(1 - cosTheta * cosTheta); + out.x = sinTheta * Math.cos(phi) * scale; + out.y = sinTheta * Math.sin(phi) * scale; + out.z = cosTheta * scale; + out.w = 0; + return out; + }; + Vec4.transformMat4 = function transformMat4(out, a, mat) { + _x = a.x; + _y = a.y; + _z = a.z; + _w = a.w; + var m = mat.m; + out.x = m[0] * _x + m[4] * _y + m[8] * _z + m[12] * _w; + out.y = m[1] * _x + m[5] * _y + m[9] * _z + m[13] * _w; + out.z = m[2] * _x + m[6] * _y + m[10] * _z + m[14] * _w; + out.w = m[3] * _x + m[7] * _y + m[11] * _z + m[15] * _w; + return out; + }; + Vec4.transformAffine = function transformAffine(out, v, mat) { + _x = v.x; + _y = v.y; + _z = v.z; + _w = v.w; + var m = mat.m; + out.x = m[0] * _x + m[1] * _y + m[2] * _z + m[3] * _w; + out.y = m[4] * _x + m[5] * _y + m[6] * _z + m[7] * _w; + out.x = m[8] * _x + m[9] * _y + m[10] * _z + m[11] * _w; + out.w = v.w; + return out; + }; + Vec4.transformQuat = function transformQuat(out, a, q) { + var x = a.x, y = a.y, z = a.z; + _x = q.x; + _y = q.y; + _z = q.z; + _w = q.w; + var ix = _w * x + _y * z - _z * y; + var iy = _w * y + _z * x - _x * z; + var iz = _w * z + _x * y - _y * x; + var iw = -_x * x - _y * y - _z * z; + out.x = ix * _w + iw * -_x + iy * -_z - iz * -_y; + out.y = iy * _w + iw * -_y + iz * -_x - ix * -_z; + out.z = iz * _w + iw * -_z + ix * -_y - iy * -_x; + out.w = a.w; + return out; + }; + Vec4.strictEquals = function strictEquals(a, b) { + return a.x === b.x && a.y === b.y && a.z === b.z && a.w === b.w; + }; + Vec4.equals = function equals(a, b, epsilon) { + void 0 === epsilon && (epsilon = _utils.EPSILON); + return Math.abs(a.x - b.x) <= epsilon * Math.max(1, Math.abs(a.x), Math.abs(b.x)) && Math.abs(a.y - b.y) <= epsilon * Math.max(1, Math.abs(a.y), Math.abs(b.y)) && Math.abs(a.z - b.z) <= epsilon * Math.max(1, Math.abs(a.z), Math.abs(b.z)) && Math.abs(a.w - b.w) <= epsilon * Math.max(1, Math.abs(a.w), Math.abs(b.w)); + }; + Vec4.toArray = function toArray(out, v, ofs) { + void 0 === ofs && (ofs = 0); + out[ofs + 0] = v.x; + out[ofs + 1] = v.y; + out[ofs + 2] = v.z; + out[ofs + 3] = v.w; + return out; + }; + Vec4.fromArray = function fromArray(out, arr, ofs) { + void 0 === ofs && (ofs = 0); + out.x = arr[ofs + 0]; + out.y = arr[ofs + 1]; + out.z = arr[ofs + 2]; + out.w = arr[ofs + 3]; + return out; + }; + function Vec4(x, y, z, w) { + var _this; + void 0 === x && (x = 0); + void 0 === y && (y = 0); + void 0 === z && (z = 0); + void 0 === w && (w = 0); + _this = _ValueType.call(this) || this; + _this.mag = Vec4.prototype.len; + _this.magSqr = Vec4.prototype.lengthSqr; + _this.subSelf = Vec4.prototype.subtract; + _this.mulSelf = Vec4.prototype.multiplyScalar; + _this.divSelf = Vec4.prototype.divide; + _this.scaleSelf = Vec4.prototype.multiply; + _this.negSelf = Vec4.prototype.negate; + _this.x = void 0; + _this.y = void 0; + _this.z = void 0; + _this.w = void 0; + if (x && "object" === typeof x) { + _this.x = x.x; + _this.y = x.y; + _this.z = x.z; + _this.w = x.w; + } else { + _this.x = x; + _this.y = y; + _this.z = z; + _this.w = w; + } + return _this; + } + _proto.clone = function clone() { + return new Vec4(this.x, this.y, this.z, this.w); + }; + _proto.set = function set(x, y, z, w) { + if (x && "object" === typeof x) { + this.x = x.x; + this.y = x.y; + this.z = x.z; + this.w = x.w; + } else { + this.x = x || 0; + this.y = y || 0; + this.z = z || 0; + this.w = w || 0; + } + return this; + }; + _proto.equals = function equals(other, epsilon) { + void 0 === epsilon && (epsilon = _utils.EPSILON); + return Math.abs(this.x - other.x) <= epsilon * Math.max(1, Math.abs(this.x), Math.abs(other.x)) && Math.abs(this.y - other.y) <= epsilon * Math.max(1, Math.abs(this.y), Math.abs(other.y)) && Math.abs(this.z - other.z) <= epsilon * Math.max(1, Math.abs(this.z), Math.abs(other.z)) && Math.abs(this.w - other.w) <= epsilon * Math.max(1, Math.abs(this.w), Math.abs(other.w)); + }; + _proto.equals4f = function equals4f(x, y, z, w, epsilon) { + void 0 === epsilon && (epsilon = _utils.EPSILON); + return Math.abs(this.x - x) <= epsilon * Math.max(1, Math.abs(this.x), Math.abs(x)) && Math.abs(this.y - y) <= epsilon * Math.max(1, Math.abs(this.y), Math.abs(y)) && Math.abs(this.z - z) <= epsilon * Math.max(1, Math.abs(this.z), Math.abs(z)) && Math.abs(this.w - w) <= epsilon * Math.max(1, Math.abs(this.w), Math.abs(w)); + }; + _proto.strictEquals = function strictEquals(other) { + return this.x === other.x && this.y === other.y && this.z === other.z && this.w === other.w; + }; + _proto.strictEquals4f = function strictEquals4f(x, y, z, w) { + return this.x === x && this.y === y && this.z === z && this.w === w; + }; + _proto.lerp = function lerp(to, ratio) { + _x = this.x; + _y = this.y; + _z = this.z; + _w = this.w; + this.x = _x + ratio * (to.x - _x); + this.y = _y + ratio * (to.y - _y); + this.z = _z + ratio * (to.z - _z); + this.w = _w + ratio * (to.w - _w); + return this; + }; + _proto.toString = function toString() { + return "(" + this.x.toFixed(2) + ", " + this.y.toFixed(2) + ", " + this.z.toFixed(2) + ", " + this.w.toFixed(2) + ")"; + }; + _proto.clampf = function clampf(minInclusive, maxInclusive) { + this.x = (0, _utils.clamp)(this.x, minInclusive.x, maxInclusive.x); + this.y = (0, _utils.clamp)(this.y, minInclusive.y, maxInclusive.y); + this.z = (0, _utils.clamp)(this.z, minInclusive.z, maxInclusive.z); + this.w = (0, _utils.clamp)(this.w, minInclusive.w, maxInclusive.w); + return this; + }; + _proto.addSelf = function addSelf(vector) { + this.x += vector.x; + this.y += vector.y; + this.z += vector.z; + this.w += vector.w; + return this; + }; + _proto.add = function add(vector, out) { + out = out || new Vec4(); + out.x = this.x + vector.x; + out.y = this.y + vector.y; + out.z = this.z + vector.z; + out.w = this.w + vector.w; + return out; + }; + _proto.subtract = function subtract(vector, out) { + out = out || new Vec4(); + out.x = this.x - vector.x; + out.y = this.y - vector.y; + out.z = this.z - vector.z; + out.w = this.w - vector.w; + return out; + }; + _proto.multiplyScalar = function multiplyScalar(num) { + this.x *= num; + this.y *= num; + this.z *= num; + this.w *= num; + return this; + }; + _proto.multiply = function multiply(vector) { + this.x *= vector.x; + this.y *= vector.y; + this.z *= vector.z; + this.w *= vector.w; + return this; + }; + _proto.divide = function divide(num) { + this.x /= num; + this.y /= num; + this.z /= num; + this.w /= num; + return this; + }; + _proto.negate = function negate() { + this.x = -this.x; + this.y = -this.y; + this.z = -this.z; + this.w = -this.w; + return this; + }; + _proto.dot = function dot(vector) { + return this.x * vector.x + this.y * vector.y + this.z * vector.z + this.w * vector.w; + }; + _proto.cross = function cross(vector, out) { + out = out || new Vec4(); + var ax = this.x, ay = this.y, az = this.z; + var bx = vector.x, by = vector.y, bz = vector.z; + out.x = ay * bz - az * by; + out.y = az * bx - ax * bz; + out.z = ax * by - ay * bx; + return out; + }; + _proto.len = function len() { + var x = this.x, y = this.y, z = this.z, w = this.w; + return Math.sqrt(x * x + y * y + z * z + w * w); + }; + _proto.lengthSqr = function lengthSqr() { + var x = this.x, y = this.y, z = this.z, w = this.w; + return x * x + y * y + z * z + w * w; + }; + _proto.normalizeSelf = function normalizeSelf() { + this.normalize(this); + return this; + }; + _proto.normalize = function normalize(out) { + out = out || new Vec4(); + _x = this.x; + _y = this.y; + _z = this.z; + _w = this.w; + var len = _x * _x + _y * _y + _z * _z + _w * _w; + if (len > 0) { + len = 1 / Math.sqrt(len); + out.x = _x * len; + out.y = _y * len; + out.z = _z * len; + out.w = _w * len; + } + return out; + }; + _proto.transformMat4 = function transformMat4(matrix, out) { + out = out || new Vec4(); + _x = this.x; + _y = this.y; + _z = this.z; + _w = this.w; + var m = matrix.m; + out.x = m[0] * _x + m[4] * _y + m[8] * _z + m[12] * _w; + out.y = m[1] * _x + m[5] * _y + m[9] * _z + m[13] * _w; + out.z = m[2] * _x + m[6] * _y + m[10] * _z + m[14] * _w; + out.w = m[3] * _x + m[7] * _y + m[11] * _z + m[15] * _w; + return out; + }; + _proto.maxAxis = function maxAxis() { + return Math.max(this.x, this.y, this.z, this.w); + }; + _createClass(Vec4, null, [ { + key: "ZERO", + get: function get() { + return new Vec4(0, 0, 0, 0); + } + }, { + key: "ONE", + get: function get() { + return new Vec4(1, 1, 1, 1); + } + }, { + key: "NEG_ONE", + get: function get() { + return new Vec4(-1, -1, -1, -1); + } + } ]); + return Vec4; + })(_valueType["default"]); + exports["default"] = Vec4; + Vec4.sub = Vec4.subtract; + Vec4.mul = Vec4.multiply; + Vec4.div = Vec4.divide; + Vec4.scale = Vec4.multiplyScalar; + Vec4.mag = Vec4.len; + Vec4.squaredMagnitude = Vec4.lengthSqr; + Vec4.ZERO_R = Vec4.ZERO; + Vec4.ONE_R = Vec4.ONE; + Vec4.NEG_ONE_R = Vec4.NEG_ONE; + _CCClass["default"].fastDefine("cc.Vec4", Vec4, { + x: 0, + y: 0, + z: 0, + w: 0 + }); + function v4(x, y, z, w) { + return new Vec4(x, y, z, w); + } + cc.v4 = v4; + cc.Vec4 = Vec4; + }), { + "../platform/CCClass": 121, + "./utils": 227, + "./value-type": 228 + } ], + 232: [ (function(require, module, exports) { + "use strict"; + var js = cc.js; + true; + var deprecateEnum = function deprecateEnum(obj, oldPath, newPath, hasTypePrefixBefore) { + false; + hasTypePrefixBefore = false !== hasTypePrefixBefore; + var enumDef = Function("return " + newPath)(); + var entries = cc.Enum.getList(enumDef); + var delimiter = hasTypePrefixBefore ? "_" : "."; + for (var i = 0; i < entries.length; i++) { + var entry = entries[i].name; + var oldPropName; + if (hasTypePrefixBefore) { + var oldTypeName = oldPath.split(".").slice(-1)[0]; + oldPropName = oldTypeName + "_" + entry; + } else oldPropName = entry; + js.get(obj, oldPropName, function(entry) { + cc.errorID(1400, oldPath + delimiter + entry, newPath + "." + entry); + return enumDef[entry]; + }.bind(null, entry)); + } + }; + var markAsRemoved = function markAsRemoved(ownerCtor, removedProps, ownerName) { + if (!ownerCtor) return; + ownerName = ownerName || js.getClassName(ownerCtor); + removedProps.forEach((function(prop) { + function error() { + cc.errorID(1406, ownerName, prop); + } + js.getset(ownerCtor.prototype, prop, error, error); + })); + }; + var markAsDeprecated = function markAsDeprecated(ownerCtor, deprecatedProps, ownerName) { + if (!ownerCtor) return; + ownerName = ownerName || js.getClassName(ownerCtor); + var descriptors = Object.getOwnPropertyDescriptors(ownerCtor.prototype); + deprecatedProps.forEach((function(prop) { + var deprecatedProp = prop[0]; + var newProp = prop[1]; + var descriptor = descriptors[deprecatedProp]; + js.getset(ownerCtor.prototype, deprecatedProp, (function() { + cc.warnID(1400, ownerName + "." + deprecatedProp, ownerName + "." + newProp); + return descriptor.get.call(this); + }), (function(v) { + cc.warnID(1400, ownerName + "." + deprecatedProp, ownerName + "." + newProp); + descriptor.set.call(this, v); + })); + })); + }; + var markAsRemovedInObject = function markAsRemovedInObject(ownerObj, removedProps, ownerName) { + if (!ownerObj) return; + removedProps.forEach((function(prop) { + function error() { + cc.errorID(1406, ownerName, prop); + } + js.getset(ownerObj, prop, error); + })); + }; + var provideClearError = function provideClearError(owner, obj, ownerName) { + if (!owner) return; + var className = ownerName || cc.js.getClassName(owner); + var Info = "Sorry, " + className + ".%s is removed, please use %s instead."; + var _loop = function _loop() { + function define(prop, getset) { + function accessor(newProp) { + cc.error(Info, prop, newProp); + } + Array.isArray(getset) || (getset = getset.split(",").map((function(x) { + return x.trim(); + }))); + try { + js.getset(owner, prop, accessor.bind(null, getset[0]), getset[1] && accessor.bind(null, getset[1])); + } catch (e) {} + } + getset = obj[prop]; + if ("*" === prop[0]) { + etProp = prop.slice(1); + define("g" + etProp, getset); + define("s" + etProp, getset); + } else prop.split(",").map((function(x) { + return x.trim(); + })).forEach((function(x) { + define(x, getset); + })); + }; + for (var prop in obj) { + var getset; + var etProp; + _loop(); + } + }; + var markFunctionWarning = function markFunctionWarning(ownerCtor, obj, ownerName) { + if (!ownerCtor) return; + ownerName = ownerName || js.getClassName(ownerCtor); + for (var prop in obj) (function() { + var propName = prop; + var originFunc = ownerCtor[propName]; + if (!originFunc) return; + function warn() { + cc.warn("Sorry, %s.%s is deprecated. Please use %s instead", ownerName, propName, obj[propName]); + return originFunc.apply(this, arguments); + } + ownerCtor[propName] = warn; + })(); + }; + js.get(cc, "info", (function() { + cc.errorID(1400, "cc.info", "cc.log"); + return cc.log; + })); + js.get(cc, "spriteFrameCache", (function() { + cc.errorID(1404); + })); + js.get(cc, "vmath", (function() { + cc.warnID(1400, "cc.vmath", "cc.math"); + return cc.math; + })); + js.get(cc.math, "vec2", (function() { + cc.warnID(1400, "cc.vmath.vec2", "cc.Vec2"); + return cc.Vec2; + })); + js.get(cc.math, "vec3", (function() { + cc.warnID(1400, "cc.vmath.vec3", "cc.Vec3"); + return cc.Vec3; + })); + js.get(cc.math, "vec4", (function() { + cc.warnID(1400, "cc.vmath.vec4", "cc.Vec4"); + return cc.Vec4; + })); + js.get(cc.math, "mat4", (function() { + cc.warnID(1400, "cc.vmath.mat4", "cc.Mat4"); + return cc.Mat4; + })); + js.get(cc.math, "mat3", (function() { + cc.warnID(1400, "cc.vmath.mat3", "cc.Mat3"); + return cc.Mat3; + })); + js.get(cc.math, "quat", (function() { + cc.warnID(1400, "cc.vmath.quat", "cc.Quat"); + return cc.Quat; + })); + js.get(cc.SpriteFrame.prototype, "_textureLoaded", (function() { + cc.errorID(1400, "spriteFrame._textureLoaded", "spriteFrame.textureLoaded()"); + return this.textureLoaded(); + })); + markAsRemoved(cc.SpriteFrame, [ "addLoadedEventListener" ]); + markFunctionWarning(cc.Sprite.prototype, { + setState: "cc.Sprite.setMaterial", + getState: "cc.Sprite.getMaterial" + }, "cc.Sprite"); + js.get(cc.SpriteFrame.prototype, "clearTexture", (function() { + cc.errorID(1406, "cc.SpriteFrame", "clearTexture"); + return function() {}; + })); + js.get(cc, "textureCache", (function() { + cc.errorID(1406, "cc", "textureCache"); + })); + var Texture2D = cc.Texture2D; + js.get(Texture2D.prototype, "releaseTexture", (function() { + cc.errorID(1400, "texture.releaseTexture()", "texture.destroy()"); + return this.destroy; + })); + js.get(Texture2D.prototype, "getName", (function() { + cc.errorID(1400, "texture.getName()", "texture._glID"); + return function() { + return this._glID || null; + }; + })); + js.get(Texture2D.prototype, "isLoaded", (function() { + cc.errorID(1400, "texture.isLoaded function", "texture.loaded property"); + return function() { + return this.loaded; + }; + })); + js.get(Texture2D.prototype, "setAntiAliasTexParameters", (function() { + cc.errorID(1400, "texture.setAntiAliasTexParameters()", "texture.setFilters(cc.Texture2D.Filter.LINEAR, cc.Texture2D.Filter.LINEAR)"); + return function() { + this.setFilters(Texture2D.Filter.LINEAR, Texture2D.Filter.LINEAR); + }; + })); + js.get(Texture2D.prototype, "setAliasTexParameters", (function() { + cc.errorID(1400, "texture.setAntiAliasTexParameters()", "texture.setFilters(cc.Texture2D.Filter.NEAREST, cc.Texture2D.Filter.NEAREST)"); + return function() { + this.setFilters(Texture2D.Filter.NEAREST, Texture2D.Filter.NEAREST); + }; + })); + markAsRemovedInObject(cc.macro, [ "ENABLE_GL_STATE_CACHE", "FIX_ARTIFACTS_BY_STRECHING_TEXEL" ], "cc.macro"); + provideClearError(cc.macro, { + PI: "Math.PI", + PI2: "Math.PI * 2", + FLT_MAX: "Number.MAX_VALUE", + FLT_MIN: "Number.MIN_VALUE", + UINT_MAX: "Number.MAX_SAFE_INTEGER" + }, "cc.macro"); + markAsRemovedInObject(cc.game, [ "CONFIG_KEY" ], "cc.game"); + markAsRemovedInObject(cc.sys, [ "dumpRoot", "cleanScript", "BROWSER_TYPE_WECHAT_GAME", "BROWSER_TYPE_WECHAT_GAME_SUB", "BROWSER_TYPE_BAIDU_GAME", "BROWSER_TYPE_BAIDU_GAME_SUB", "BROWSER_TYPE_XIAOMI_GAME", "BROWSER_TYPE_ALIPAY_GAME" ], "cc.sys"); + provideClearError(cc.Director, { + EVENT_PROJECTION_CHANGED: "", + EVENT_BEFORE_VISIT: "EVENT_AFTER_UPDATE", + EVENT_AFTER_VISIT: "EVENT_BEFORE_DRAW" + }, "cc.Director"); + markFunctionWarning(cc.Director.prototype, { + convertToGL: "cc.view.convertToLocationInView", + convertToUI: "", + getWinSize: "cc.winSize", + getWinSizeInPixels: "cc.winSize", + getVisibleSize: "cc.view.getVisibleSize", + getVisibleOrigin: "cc.view.getVisibleOrigin", + purgeCachedData: "cc.assetManager.releaseAll", + setDepthTest: "cc.Camera.main.depth", + setClearColor: "cc.Camera.main.backgroundColor", + getRunningScene: "cc.director.getScene", + getAnimationInterval: "cc.game.getFrameRate", + setAnimationInterval: "cc.game.setFrameRate", + isDisplayStats: "cc.debug.isDisplayStats", + setDisplayStats: "cc.debug.setDisplayStats", + stopAnimation: "cc.game.pause", + startAnimation: "cc.game.resume" + }, "cc.Director"); + markAsRemoved(cc.Director, [ "pushScene", "popScene", "popToRootScene", "popToSceneStackLevel", "setProjection", "getProjection" ], "cc.Director"); + provideClearError(cc.Scheduler, { + scheduleCallbackForTarget: "schedule", + scheduleUpdateForTarget: "scheduleUpdate", + unscheduleCallbackForTarget: "unschedule", + unscheduleUpdateForTarget: "unscheduleUpdate", + unscheduleAllCallbacksForTarget: "unscheduleAllForTarget", + unscheduleAllCallbacks: "unscheduleAll", + unscheduleAllCallbacksWithMinPriority: "unscheduleAllWithMinPriority" + }, "cc.Scheduler"); + provideClearError(cc.view, { + adjustViewPort: "adjustViewportMeta", + setViewPortInPoints: "setViewportInPoints", + getViewPortRect: "getViewportRect" + }, "cc.view"); + markAsRemovedInObject(cc.view, [ "isViewReady", "setTargetDensityDPI", "getTargetDensityDPI", "setFrameZoomFactor", "canSetContentScaleFactor", "setContentTranslateLeftTop", "getContentTranslateLeftTop", "setViewName", "getViewName" ], "cc.view"); + markAsRemoved(cc.PhysicsManager, [ "attachDebugDrawToCamera", "detachDebugDrawFromCamera" ]); + markAsRemoved(cc.CollisionManager, [ "attachDebugDrawToCamera", "detachDebugDrawFromCamera" ]); + provideClearError(cc._BaseNode.prototype, { + tag: "name", + getTag: "name", + setTag: "name", + getChildByTag: "getChildByName", + removeChildByTag: "getChildByName(name).destroy()" + }); + markAsRemoved(cc.Node, [ "_cascadeColorEnabled", "cascadeColor", "isCascadeColorEnabled", "setCascadeColorEnabled", "_cascadeOpacityEnabled", "cascadeOpacity", "isCascadeOpacityEnabled", "setCascadeOpacityEnabled", "opacityModifyRGB", "isOpacityModifyRGB", "setOpacityModifyRGB", "ignoreAnchor", "isIgnoreAnchorPointForPosition", "ignoreAnchorPointForPosition", "isRunning", "_sgNode" ]); + markFunctionWarning(cc.Node.prototype, { + getNodeToParentTransform: "getLocalMatrix", + getNodeToParentTransformAR: "getLocalMatrix", + getNodeToWorldTransform: "getWorldMatrix", + getNodeToWorldTransformAR: "getWorldMatrix", + getParentToNodeTransform: "getLocalMatrix", + getWorldToNodeTransform: "getWorldMatrix", + convertTouchToNodeSpace: "convertToNodeSpaceAR", + convertTouchToNodeSpaceAR: "convertToNodeSpaceAR", + convertToWorldSpace: "convertToWorldSpaceAR", + convertToNodeSpace: "convertToNodeSpaceAR" + }); + provideClearError(cc.Node.prototype, { + getRotationX: "rotationX", + setRotationX: "rotationX", + getRotationY: "rotationY", + setRotationY: "rotationY", + getPositionX: "x", + setPositionX: "x", + getPositionY: "y", + setPositionY: "y", + getSkewX: "skewX", + setSkewX: "skewX", + getSkewY: "skewY", + setSkewY: "skewY", + getScaleX: "scaleX", + setScaleX: "scaleX", + getScaleY: "scaleY", + setScaleY: "scaleY", + getOpacity: "opacity", + setOpacity: "opacity", + getColor: "color", + setColor: "color", + getLocalZOrder: "zIndex", + setLocalZOrder: "zIndex" + }); + provideClearError(cc.Sprite.prototype, { + setInsetLeft: "cc.SpriteFrame insetLeft", + setInsetRight: "cc.SpriteFrame insetRight", + setInsetTop: "cc.SpriteFrame insetTop", + setInsetBottom: "cc.SpriteFrame insetBottom" + }); + cc.Material.getInstantiatedBuiltinMaterial = cc.MaterialVariant.createWithBuiltin; + cc.Material.getInstantiatedMaterial = cc.MaterialVariant.create; + markFunctionWarning(cc.Material, { + getInstantiatedBuiltinMaterial: "cc.MaterialVariant.createWithBuiltin", + getInstantiatedMaterial: "cc.MaterialVariant.create" + }); + cc.js.getset(cc.RenderComponent.prototype, "sharedMaterials", (function() { + cc.warnID(1400, "sharedMaterials", "getMaterials"); + return this.materials; + }), (function(v) { + cc.warnID(1400, "sharedMaterials", "setMaterial"); + this.materials = v; + })); + markFunctionWarning(cc.Camera.prototype, { + getNodeToCameraTransform: "getWorldToScreenMatrix2D", + getCameraToWorldPoint: "getScreenToWorldPoint", + getWorldToCameraPoint: "getWorldToScreenPoint", + getCameraToWorldMatrix: "getScreenToWorldMatrix2D", + getWorldToCameraMatrix: "getWorldToScreenMatrix2D" + }); + markAsRemoved(cc.Camera, [ "addTarget", "removeTarget", "getTargets" ]); + var ERR = '"%s" is not defined in the Scene, it is only defined in normal nodes.'; + false, Object.defineProperties(cc.Scene.prototype, { + active: { + get: function get() { + cc.error(ERR, "active"); + return true; + }, + set: function set() { + cc.error(ERR, "active"); + } + }, + activeInHierarchy: { + get: function get() { + cc.error(ERR, "activeInHierarchy"); + return true; + } + }, + getComponent: { + get: function get() { + cc.error(ERR, "getComponent"); + return function() { + return null; + }; + } + }, + addComponent: { + get: function get() { + cc.error(ERR, "addComponent"); + return function() { + return null; + }; + } + } + }); + markAsRemovedInObject(cc.dynamicAtlasManager, [ "minFrameSize" ], "cc.dynamicAtlasManager"); + cc.Light && markAsRemovedInObject(cc.Light.prototype, [ "shadowDepthScale" ], "cc.Light.prototype"); + provideClearError(cc, { + affineTransformMake: "cc.AffineTransform.create", + affineTransformMakeIdentity: "cc.AffineTransform.identity", + affineTransformClone: "cc.AffineTransform.clone", + affineTransformConcat: "cc.AffineTransform.concat", + affineTransformConcatIn: "cc.AffineTransform.concat", + affineTransformInvert: "cc.AffineTransform.invert", + affineTransformInvertIn: "cc.AffineTransform.invert", + affineTransformInvertOut: "cc.AffineTransform.invert", + affineTransformEqualToTransform: "cc.AffineTransform.equal", + pointApplyAffineTransform: "cc.AffineTransform.transformVec2", + sizeApplyAffineTransform: "cc.AffineTransform.transformSize", + rectApplyAffineTransform: "cc.AffineTransform.transformRect", + obbApplyAffineTransform: "cc.AffineTransform.transformObb", + pointEqualToPoint: "cc.Vec2 equals", + sizeEqualToSize: "cc.Size equals", + rectEqualToRect: "rectA.equals(rectB)", + rectContainsRect: "rectA.containsRect(rectB)", + rectContainsPoint: "rect.contains(vec2)", + rectOverlapsRect: "rectA.intersects(rectB)", + rectIntersectsRect: "rectA.intersects(rectB)", + rectIntersection: "rectA.intersection(intersection, rectB)", + rectUnion: "rectA.union(union, rectB)", + rectGetMaxX: "rect.xMax", + rectGetMidX: "rect.center.x", + rectGetMinX: "rect.xMin", + rectGetMaxY: "rect.yMax", + rectGetMidY: "rect.center.y", + rectGetMinY: "rect.yMin", + colorEqual: "colorA.equals(colorB)", + hexToColor: "color.fromHEX(hexColor)", + colorToHex: "color.toHEX()", + TextAlignment: "cc.macro.TextAlignment", + VerticalTextAlignment: "cc.macro.VerticalTextAlignment", + pNeg: "p.neg()", + pAdd: "p1.add(p2)", + pSub: "p1.sub(p2)", + pMult: "p.mul(factor)", + pMidpoint: "p1.add(p2).mul(0.5)", + pDot: "p1.dot(p2)", + pCross: "p1.cross(p2)", + pPerp: "p.rotate(-90 * Math.PI / 180)", + pRPerp: "p.rotate(90 * Math.PI / 180)", + pProject: "p1.project(p2)", + pLengthSQ: "p.magSqr()", + pDistanceSQ: "p1.sub(p2).magSqr()", + pLength: "p.mag()", + pDistance: "p1.sub(p2).mag()", + pNormalize: "p.normalize()", + pForAngle: "cc.v2(Math.cos(a), Math.sin(a))", + pToAngle: "Math.atan2(v.y, v.x)", + pZeroIn: "p.x = p.y = 0", + pIn: "p1.set(p2)", + pMultIn: "p.mulSelf(factor)", + pSubIn: "p1.subSelf(p2)", + pAddIn: "p1.addSelf(p2)", + pNormalizeIn: "p.normalizeSelf()", + pSameAs: "p1.equals(p2)", + pAngle: "v1.angle(v2)", + pAngleSigned: "v1.signAngle(v2)", + pRotateByAngle: "p.rotate(radians)", + pCompMult: "v1.multiply(v2)", + pFuzzyEqual: "v1.fuzzyEquals(v2, tolerance)", + pLerp: "p.lerp(endPoint, ratio)", + pClamp: "p.clampf(min_inclusive, max_inclusive)", + rand: "Math.random() * 0xffffff", + randomMinus1To1: "(Math.random() - 0.5) * 2", + container: "cc.game.container", + _canvas: "cc.game.canvas", + _renderType: "cc.game.renderType", + _getError: "cc.debug.getError", + _initDebugSetting: "cc.debug._resetDebugSetting", + DebugMode: "cc.debug.DebugMode" + }, "cc"); + markAsRemovedInObject(cc, [ "blendFuncDisable", "pFromSize", "pCompOp", "pIntersectPoint", "pSegmentIntersect", "pLineIntersect", "obbApplyMatrix", "getImageFormatByData", "initEngine" ], "cc"); + markFunctionWarning(cc, { + p: "cc.v2" + }, "cc"); + provideClearError(cc.Rect, { + contain: "rectA.contains(rectB)", + transformMat4: "rect.transformMat4(out, mat4)" + }); + provideClearError(cc.Color, { + rgb2hsv: "color.toHSV()", + hsv2rgb: "color.fromHSV(h, s, v)" + }); + markFunctionWarning(cc.Color, { + fromHex: "cc.Color.fromHEX" + }); + js.get(cc, "lerp", (function() { + cc.errorID(1400, "cc.lerp", "cc.misc.lerp"); + return cc.misc.lerp; + })); + js.get(cc, "random0To1", (function() { + cc.errorID(1400, "cc.random0To1", "Math.random"); + return Math.random; + })); + js.get(cc, "degreesToRadians", (function() { + cc.errorID(1400, "cc.degreesToRadians", "cc.misc.degreesToRadians"); + return cc.misc.degreesToRadians; + })); + js.get(cc, "radiansToDegrees", (function() { + cc.errorID(1400, "cc.radiansToDegrees", "cc.misc.radiansToDegrees"); + return cc.misc.radiansToDegrees; + })); + js.get(cc, "clampf", (function() { + cc.errorID(1400, "cc.clampf", "cc.misc.clampf"); + return cc.misc.clampf; + })); + js.get(cc, "clamp01", (function() { + cc.errorID(1400, "cc.clamp01", "cc.misc.clamp01"); + return cc.misc.clamp01; + })); + js.get(cc, "ImageFormat", (function() { + cc.errorID(1400, "cc.ImageFormat", "cc.macro.ImageFormat"); + return cc.macro.ImageFormat; + })); + js.get(cc, "KEY", (function() { + cc.errorID(1400, "cc.KEY", "cc.macro.KEY"); + return cc.macro.KEY; + })); + js.get(cc, "Easing", (function() { + cc.errorID(1400, "cc.Easing", "cc.easing"); + return cc.easing; + })); + js.get(cc, "isChildClassOf", (function() { + cc.errorID(1400, "cc.isChildClassOf", "cc.js.isChildClassOf"); + return cc.js.isChildClassOf; + })); + "undefined" !== typeof dragonBones && js.get(dragonBones.CCFactory, "getFactory", (function() { + cc.errorID(1400, "dragonBones.CCFactory.getFactory", "dragonBones.CCFactory.getInstance"); + return dragonBones.CCFactory.getInstance; + })); + cc.renderer.renderEngine = { + get gfx() { + cc.warnID(1400, "cc.renderer.renderEngine.gfx", "cc.gfx"); + return cc.gfx; + }, + get math() { + cc.warnID(1400, "cc.renderer.renderEngine.math", "cc.math"); + return cc.vmath; + }, + get InputAssembler() { + cc.warnID(1400, "cc.renderer.renderEngine.InputAssembler", "cc.renderer.InputAssembler"); + return cc.renderer.InputAssembler; + } + }; + markAsRemovedInObject(cc.audioEngine, [ "getProfile", "preload", "setMaxWebAudioSize" ], "cc.audioEngine"); + }), {} ], + 233: [ (function(require, module, exports) { + "use strict"; + require("./core/CCGame"); + require("./actions"); + }), { + "./actions": 8, + "./core/CCGame": 23 + } ], + 234: [ (function(require, module, exports) { + "use strict"; + var Asset = require("../core/assets/CCAsset"); + var CCSpriteFrame = require("../core/assets/CCSpriteFrame"); + var ParticleAsset = cc.Class({ + name: "cc.ParticleAsset", + extends: Asset, + properties: { + spriteFrame: { + default: null, + type: CCSpriteFrame + } + } + }); + cc.ParticleAsset = module.exports = ParticleAsset; + }), { + "../core/assets/CCAsset": 57, + "../core/assets/CCSpriteFrame": 69 + } ], + 235: [ (function(require, module, exports) { + "use strict"; + var enums = { + USAGE_STATIC: 35044, + USAGE_DYNAMIC: 35048, + USAGE_STREAM: 35040, + INDEX_FMT_UINT8: 5121, + INDEX_FMT_UINT16: 5123, + INDEX_FMT_UINT32: 5125, + ATTR_POSITION: "a_position", + ATTR_NORMAL: "a_normal", + ATTR_TANGENT: "a_tangent", + ATTR_BITANGENT: "a_bitangent", + ATTR_WEIGHTS: "a_weights", + ATTR_JOINTS: "a_joints", + ATTR_COLOR: "a_color", + ATTR_COLOR0: "a_color0", + ATTR_COLOR1: "a_color1", + ATTR_UV: "a_uv", + ATTR_UV0: "a_uv0", + ATTR_UV1: "a_uv1", + ATTR_UV2: "a_uv2", + ATTR_UV3: "a_uv3", + ATTR_UV4: "a_uv4", + ATTR_UV5: "a_uv5", + ATTR_UV6: "a_uv6", + ATTR_UV7: "a_uv7", + ATTR_TYPE_INT8: 5120, + ATTR_TYPE_UINT8: 5121, + ATTR_TYPE_INT16: 5122, + ATTR_TYPE_UINT16: 5123, + ATTR_TYPE_INT32: 5124, + ATTR_TYPE_UINT32: 5125, + ATTR_TYPE_FLOAT32: 5126, + FILTER_NEAREST: 0, + FILTER_LINEAR: 1, + WRAP_REPEAT: 10497, + WRAP_CLAMP: 33071, + WRAP_MIRROR: 33648, + TEXTURE_FMT_RGB_DXT1: 0, + TEXTURE_FMT_RGBA_DXT1: 1, + TEXTURE_FMT_RGBA_DXT3: 2, + TEXTURE_FMT_RGBA_DXT5: 3, + TEXTURE_FMT_RGB_ETC1: 4, + TEXTURE_FMT_RGB_PVRTC_2BPPV1: 5, + TEXTURE_FMT_RGBA_PVRTC_2BPPV1: 6, + TEXTURE_FMT_RGB_PVRTC_4BPPV1: 7, + TEXTURE_FMT_RGBA_PVRTC_4BPPV1: 8, + TEXTURE_FMT_A8: 9, + TEXTURE_FMT_L8: 10, + TEXTURE_FMT_L8_A8: 11, + TEXTURE_FMT_R5_G6_B5: 12, + TEXTURE_FMT_R5_G5_B5_A1: 13, + TEXTURE_FMT_R4_G4_B4_A4: 14, + TEXTURE_FMT_RGB8: 15, + TEXTURE_FMT_RGBA8: 16, + TEXTURE_FMT_RGB16F: 17, + TEXTURE_FMT_RGBA16F: 18, + TEXTURE_FMT_RGB32F: 19, + TEXTURE_FMT_RGBA32F: 20, + TEXTURE_FMT_R32F: 21, + TEXTURE_FMT_111110F: 22, + TEXTURE_FMT_SRGB: 23, + TEXTURE_FMT_SRGBA: 24, + TEXTURE_FMT_D16: 25, + TEXTURE_FMT_D32: 26, + TEXTURE_FMT_D24S8: 27, + TEXTURE_FMT_RGB_ETC2: 28, + TEXTURE_FMT_RGBA_ETC2: 29, + DS_FUNC_NEVER: 512, + DS_FUNC_LESS: 513, + DS_FUNC_EQUAL: 514, + DS_FUNC_LEQUAL: 515, + DS_FUNC_GREATER: 516, + DS_FUNC_NOTEQUAL: 517, + DS_FUNC_GEQUAL: 518, + DS_FUNC_ALWAYS: 519, + RB_FMT_RGBA4: 32854, + RB_FMT_RGB5_A1: 32855, + RB_FMT_RGB565: 36194, + RB_FMT_D16: 33189, + RB_FMT_S8: 36168, + RB_FMT_D24S8: 34041, + BLEND_FUNC_ADD: 32774, + BLEND_FUNC_SUBTRACT: 32778, + BLEND_FUNC_REVERSE_SUBTRACT: 32779, + BLEND_ZERO: 0, + BLEND_ONE: 1, + BLEND_SRC_COLOR: 768, + BLEND_ONE_MINUS_SRC_COLOR: 769, + BLEND_DST_COLOR: 774, + BLEND_ONE_MINUS_DST_COLOR: 775, + BLEND_SRC_ALPHA: 770, + BLEND_ONE_MINUS_SRC_ALPHA: 771, + BLEND_DST_ALPHA: 772, + BLEND_ONE_MINUS_DST_ALPHA: 773, + BLEND_CONSTANT_COLOR: 32769, + BLEND_ONE_MINUS_CONSTANT_COLOR: 32770, + BLEND_CONSTANT_ALPHA: 32771, + BLEND_ONE_MINUS_CONSTANT_ALPHA: 32772, + BLEND_SRC_ALPHA_SATURATE: 776, + STENCIL_DISABLE: 0, + STENCIL_ENABLE: 1, + STENCIL_INHERIT: 2, + STENCIL_OP_KEEP: 7680, + STENCIL_OP_ZERO: 0, + STENCIL_OP_REPLACE: 7681, + STENCIL_OP_INCR: 7682, + STENCIL_OP_INCR_WRAP: 34055, + STENCIL_OP_DECR: 7683, + STENCIL_OP_DECR_WRAP: 34056, + STENCIL_OP_INVERT: 5386, + CULL_NONE: 0, + CULL_FRONT: 1028, + CULL_BACK: 1029, + CULL_FRONT_AND_BACK: 1032, + PT_POINTS: 0, + PT_LINES: 1, + PT_LINE_LOOP: 2, + PT_LINE_STRIP: 3, + PT_TRIANGLES: 4, + PT_TRIANGLE_STRIP: 5, + PT_TRIANGLE_FAN: 6 + }; + var RenderQueue = { + OPAQUE: 0, + TRANSPARENT: 1, + OVERLAY: 2 + }; + function murmurhash2_32_gc(str, seed) { + var l = str.length, h = seed ^ l, i = 0, k; + while (l >= 4) { + k = 255 & str.charCodeAt(i) | (255 & str.charCodeAt(++i)) << 8 | (255 & str.charCodeAt(++i)) << 16 | (255 & str.charCodeAt(++i)) << 24; + k = 1540483477 * (65535 & k) + ((1540483477 * (k >>> 16) & 65535) << 16); + k ^= k >>> 24; + k = 1540483477 * (65535 & k) + ((1540483477 * (k >>> 16) & 65535) << 16); + h = 1540483477 * (65535 & h) + ((1540483477 * (h >>> 16) & 65535) << 16) ^ k; + l -= 4; + ++i; + } + switch (l) { + case 3: + h ^= (255 & str.charCodeAt(i + 2)) << 16; + + case 2: + h ^= (255 & str.charCodeAt(i + 1)) << 8; + + case 1: + h ^= 255 & str.charCodeAt(i); + h = 1540483477 * (65535 & h) + ((1540483477 * (h >>> 16) & 65535) << 16); + } + h ^= h >>> 13; + h = 1540483477 * (65535 & h) + ((1540483477 * (h >>> 16) & 65535) << 16); + h ^= h >>> 15; + return h >>> 0; + } + var WebGLEXT; + (function(WebGLEXT) { + WebGLEXT[WebGLEXT["COMPRESSED_RGB_S3TC_DXT1_EXT"] = 33776] = "COMPRESSED_RGB_S3TC_DXT1_EXT"; + WebGLEXT[WebGLEXT["COMPRESSED_RGBA_S3TC_DXT1_EXT"] = 33777] = "COMPRESSED_RGBA_S3TC_DXT1_EXT"; + WebGLEXT[WebGLEXT["COMPRESSED_RGBA_S3TC_DXT3_EXT"] = 33778] = "COMPRESSED_RGBA_S3TC_DXT3_EXT"; + WebGLEXT[WebGLEXT["COMPRESSED_RGBA_S3TC_DXT5_EXT"] = 33779] = "COMPRESSED_RGBA_S3TC_DXT5_EXT"; + WebGLEXT[WebGLEXT["COMPRESSED_SRGB_S3TC_DXT1_EXT"] = 35916] = "COMPRESSED_SRGB_S3TC_DXT1_EXT"; + WebGLEXT[WebGLEXT["COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT"] = 35917] = "COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT"; + WebGLEXT[WebGLEXT["COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT"] = 35918] = "COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT"; + WebGLEXT[WebGLEXT["COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT"] = 35919] = "COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT"; + WebGLEXT[WebGLEXT["COMPRESSED_RGB_PVRTC_4BPPV1_IMG"] = 35840] = "COMPRESSED_RGB_PVRTC_4BPPV1_IMG"; + WebGLEXT[WebGLEXT["COMPRESSED_RGB_PVRTC_2BPPV1_IMG"] = 35841] = "COMPRESSED_RGB_PVRTC_2BPPV1_IMG"; + WebGLEXT[WebGLEXT["COMPRESSED_RGBA_PVRTC_4BPPV1_IMG"] = 35842] = "COMPRESSED_RGBA_PVRTC_4BPPV1_IMG"; + WebGLEXT[WebGLEXT["COMPRESSED_RGBA_PVRTC_2BPPV1_IMG"] = 35843] = "COMPRESSED_RGBA_PVRTC_2BPPV1_IMG"; + WebGLEXT[WebGLEXT["COMPRESSED_RGB_ETC1_WEBGL"] = 36196] = "COMPRESSED_RGB_ETC1_WEBGL"; + })(WebGLEXT || (WebGLEXT = {})); + var GFXObjectType; + (function(GFXObjectType) { + GFXObjectType[GFXObjectType["UNKNOWN"] = 0] = "UNKNOWN"; + GFXObjectType[GFXObjectType["BUFFER"] = 1] = "BUFFER"; + GFXObjectType[GFXObjectType["TEXTURE"] = 2] = "TEXTURE"; + GFXObjectType[GFXObjectType["TEXTURE_VIEW"] = 3] = "TEXTURE_VIEW"; + GFXObjectType[GFXObjectType["RENDER_PASS"] = 4] = "RENDER_PASS"; + GFXObjectType[GFXObjectType["FRAMEBUFFER"] = 5] = "FRAMEBUFFER"; + GFXObjectType[GFXObjectType["SAMPLER"] = 6] = "SAMPLER"; + GFXObjectType[GFXObjectType["SHADER"] = 7] = "SHADER"; + GFXObjectType[GFXObjectType["PIPELINE_LAYOUT"] = 8] = "PIPELINE_LAYOUT"; + GFXObjectType[GFXObjectType["PIPELINE_STATE"] = 9] = "PIPELINE_STATE"; + GFXObjectType[GFXObjectType["BINDING_LAYOUT"] = 10] = "BINDING_LAYOUT"; + GFXObjectType[GFXObjectType["INPUT_ASSEMBLER"] = 11] = "INPUT_ASSEMBLER"; + GFXObjectType[GFXObjectType["COMMAND_ALLOCATOR"] = 12] = "COMMAND_ALLOCATOR"; + GFXObjectType[GFXObjectType["COMMAND_BUFFER"] = 13] = "COMMAND_BUFFER"; + GFXObjectType[GFXObjectType["QUEUE"] = 14] = "QUEUE"; + GFXObjectType[GFXObjectType["WINDOW"] = 15] = "WINDOW"; + })(GFXObjectType || (GFXObjectType = {})); + var GFXStatus; + (function(GFXStatus) { + GFXStatus[GFXStatus["UNREADY"] = 0] = "UNREADY"; + GFXStatus[GFXStatus["FAILED"] = 1] = "FAILED"; + GFXStatus[GFXStatus["SUCCESS"] = 2] = "SUCCESS"; + })(GFXStatus || (GFXStatus = {})); + var GFXObject = (function() { + function GFXObject(gfxType) { + this._gfxType = GFXObjectType.UNKNOWN; + this._status = GFXStatus.UNREADY; + this._gfxType = gfxType; + } + Object.defineProperty(GFXObject.prototype, "gfxType", { + get: function get() { + return this._gfxType; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(GFXObject.prototype, "status", { + get: function get() { + return this._status; + }, + enumerable: true, + configurable: true + }); + return GFXObject; + })(); + var GFXAttributeName; + (function(GFXAttributeName) { + GFXAttributeName["ATTR_POSITION"] = "a_position"; + GFXAttributeName["ATTR_NORMAL"] = "a_normal"; + GFXAttributeName["ATTR_TANGENT"] = "a_tangent"; + GFXAttributeName["ATTR_BITANGENT"] = "a_bitangent"; + GFXAttributeName["ATTR_WEIGHTS"] = "a_weights"; + GFXAttributeName["ATTR_JOINTS"] = "a_joints"; + GFXAttributeName["ATTR_COLOR"] = "a_color"; + GFXAttributeName["ATTR_COLOR1"] = "a_color1"; + GFXAttributeName["ATTR_COLOR2"] = "a_color2"; + GFXAttributeName["ATTR_TEX_COORD"] = "a_texCoord"; + GFXAttributeName["ATTR_TEX_COORD1"] = "a_texCoord1"; + GFXAttributeName["ATTR_TEX_COORD2"] = "a_texCoord2"; + GFXAttributeName["ATTR_TEX_COORD3"] = "a_texCoord3"; + GFXAttributeName["ATTR_TEX_COORD4"] = "a_texCoord4"; + GFXAttributeName["ATTR_TEX_COORD5"] = "a_texCoord5"; + GFXAttributeName["ATTR_TEX_COORD6"] = "a_texCoord6"; + GFXAttributeName["ATTR_TEX_COORD7"] = "a_texCoord7"; + GFXAttributeName["ATTR_TEX_COORD8"] = "a_texCoord8"; + })(GFXAttributeName || (GFXAttributeName = {})); + var GFXType; + (function(GFXType) { + GFXType[GFXType["UNKNOWN"] = 0] = "UNKNOWN"; + GFXType[GFXType["BOOL"] = 1] = "BOOL"; + GFXType[GFXType["BOOL2"] = 2] = "BOOL2"; + GFXType[GFXType["BOOL3"] = 3] = "BOOL3"; + GFXType[GFXType["BOOL4"] = 4] = "BOOL4"; + GFXType[GFXType["INT"] = 5] = "INT"; + GFXType[GFXType["INT2"] = 6] = "INT2"; + GFXType[GFXType["INT3"] = 7] = "INT3"; + GFXType[GFXType["INT4"] = 8] = "INT4"; + GFXType[GFXType["UINT"] = 9] = "UINT"; + GFXType[GFXType["UINT2"] = 10] = "UINT2"; + GFXType[GFXType["UINT3"] = 11] = "UINT3"; + GFXType[GFXType["UINT4"] = 12] = "UINT4"; + GFXType[GFXType["FLOAT"] = 13] = "FLOAT"; + GFXType[GFXType["FLOAT2"] = 14] = "FLOAT2"; + GFXType[GFXType["FLOAT3"] = 15] = "FLOAT3"; + GFXType[GFXType["FLOAT4"] = 16] = "FLOAT4"; + GFXType[GFXType["COLOR4"] = 17] = "COLOR4"; + GFXType[GFXType["MAT2"] = 18] = "MAT2"; + GFXType[GFXType["MAT2X3"] = 19] = "MAT2X3"; + GFXType[GFXType["MAT2X4"] = 20] = "MAT2X4"; + GFXType[GFXType["MAT3X2"] = 21] = "MAT3X2"; + GFXType[GFXType["MAT3"] = 22] = "MAT3"; + GFXType[GFXType["MAT3X4"] = 23] = "MAT3X4"; + GFXType[GFXType["MAT4X2"] = 24] = "MAT4X2"; + GFXType[GFXType["MAT4X3"] = 25] = "MAT4X3"; + GFXType[GFXType["MAT4"] = 26] = "MAT4"; + GFXType[GFXType["SAMPLER1D"] = 27] = "SAMPLER1D"; + GFXType[GFXType["SAMPLER1D_ARRAY"] = 28] = "SAMPLER1D_ARRAY"; + GFXType[GFXType["SAMPLER2D"] = 29] = "SAMPLER2D"; + GFXType[GFXType["SAMPLER2D_ARRAY"] = 30] = "SAMPLER2D_ARRAY"; + GFXType[GFXType["SAMPLER3D"] = 31] = "SAMPLER3D"; + GFXType[GFXType["SAMPLER_CUBE"] = 32] = "SAMPLER_CUBE"; + GFXType[GFXType["COUNT"] = 33] = "COUNT"; + })(GFXType || (GFXType = {})); + var GFXFormat; + (function(GFXFormat) { + GFXFormat[GFXFormat["UNKNOWN"] = 0] = "UNKNOWN"; + GFXFormat[GFXFormat["A8"] = 1] = "A8"; + GFXFormat[GFXFormat["L8"] = 2] = "L8"; + GFXFormat[GFXFormat["LA8"] = 3] = "LA8"; + GFXFormat[GFXFormat["R8"] = 4] = "R8"; + GFXFormat[GFXFormat["R8SN"] = 5] = "R8SN"; + GFXFormat[GFXFormat["R8UI"] = 6] = "R8UI"; + GFXFormat[GFXFormat["R8I"] = 7] = "R8I"; + GFXFormat[GFXFormat["R16F"] = 8] = "R16F"; + GFXFormat[GFXFormat["R16UI"] = 9] = "R16UI"; + GFXFormat[GFXFormat["R16I"] = 10] = "R16I"; + GFXFormat[GFXFormat["R32F"] = 11] = "R32F"; + GFXFormat[GFXFormat["R32UI"] = 12] = "R32UI"; + GFXFormat[GFXFormat["R32I"] = 13] = "R32I"; + GFXFormat[GFXFormat["RG8"] = 14] = "RG8"; + GFXFormat[GFXFormat["RG8SN"] = 15] = "RG8SN"; + GFXFormat[GFXFormat["RG8UI"] = 16] = "RG8UI"; + GFXFormat[GFXFormat["RG8I"] = 17] = "RG8I"; + GFXFormat[GFXFormat["RG16F"] = 18] = "RG16F"; + GFXFormat[GFXFormat["RG16UI"] = 19] = "RG16UI"; + GFXFormat[GFXFormat["RG16I"] = 20] = "RG16I"; + GFXFormat[GFXFormat["RG32F"] = 21] = "RG32F"; + GFXFormat[GFXFormat["RG32UI"] = 22] = "RG32UI"; + GFXFormat[GFXFormat["RG32I"] = 23] = "RG32I"; + GFXFormat[GFXFormat["RGB8"] = 24] = "RGB8"; + GFXFormat[GFXFormat["SRGB8"] = 25] = "SRGB8"; + GFXFormat[GFXFormat["RGB8SN"] = 26] = "RGB8SN"; + GFXFormat[GFXFormat["RGB8UI"] = 27] = "RGB8UI"; + GFXFormat[GFXFormat["RGB8I"] = 28] = "RGB8I"; + GFXFormat[GFXFormat["RGB16F"] = 29] = "RGB16F"; + GFXFormat[GFXFormat["RGB16UI"] = 30] = "RGB16UI"; + GFXFormat[GFXFormat["RGB16I"] = 31] = "RGB16I"; + GFXFormat[GFXFormat["RGB32F"] = 32] = "RGB32F"; + GFXFormat[GFXFormat["RGB32UI"] = 33] = "RGB32UI"; + GFXFormat[GFXFormat["RGB32I"] = 34] = "RGB32I"; + GFXFormat[GFXFormat["RGBA8"] = 35] = "RGBA8"; + GFXFormat[GFXFormat["SRGB8_A8"] = 36] = "SRGB8_A8"; + GFXFormat[GFXFormat["RGBA8SN"] = 37] = "RGBA8SN"; + GFXFormat[GFXFormat["RGBA8UI"] = 38] = "RGBA8UI"; + GFXFormat[GFXFormat["RGBA8I"] = 39] = "RGBA8I"; + GFXFormat[GFXFormat["RGBA16F"] = 40] = "RGBA16F"; + GFXFormat[GFXFormat["RGBA16UI"] = 41] = "RGBA16UI"; + GFXFormat[GFXFormat["RGBA16I"] = 42] = "RGBA16I"; + GFXFormat[GFXFormat["RGBA32F"] = 43] = "RGBA32F"; + GFXFormat[GFXFormat["RGBA32UI"] = 44] = "RGBA32UI"; + GFXFormat[GFXFormat["RGBA32I"] = 45] = "RGBA32I"; + GFXFormat[GFXFormat["R5G6B5"] = 46] = "R5G6B5"; + GFXFormat[GFXFormat["R11G11B10F"] = 47] = "R11G11B10F"; + GFXFormat[GFXFormat["RGB5A1"] = 48] = "RGB5A1"; + GFXFormat[GFXFormat["RGBA4"] = 49] = "RGBA4"; + GFXFormat[GFXFormat["RGB10A2"] = 50] = "RGB10A2"; + GFXFormat[GFXFormat["RGB10A2UI"] = 51] = "RGB10A2UI"; + GFXFormat[GFXFormat["RGB9E5"] = 52] = "RGB9E5"; + GFXFormat[GFXFormat["D16"] = 53] = "D16"; + GFXFormat[GFXFormat["D16S8"] = 54] = "D16S8"; + GFXFormat[GFXFormat["D24"] = 55] = "D24"; + GFXFormat[GFXFormat["D24S8"] = 56] = "D24S8"; + GFXFormat[GFXFormat["D32F"] = 57] = "D32F"; + GFXFormat[GFXFormat["D32F_S8"] = 58] = "D32F_S8"; + GFXFormat[GFXFormat["BC1"] = 59] = "BC1"; + GFXFormat[GFXFormat["BC1_ALPHA"] = 60] = "BC1_ALPHA"; + GFXFormat[GFXFormat["BC1_SRGB"] = 61] = "BC1_SRGB"; + GFXFormat[GFXFormat["BC1_SRGB_ALPHA"] = 62] = "BC1_SRGB_ALPHA"; + GFXFormat[GFXFormat["BC2"] = 63] = "BC2"; + GFXFormat[GFXFormat["BC2_SRGB"] = 64] = "BC2_SRGB"; + GFXFormat[GFXFormat["BC3"] = 65] = "BC3"; + GFXFormat[GFXFormat["BC3_SRGB"] = 66] = "BC3_SRGB"; + GFXFormat[GFXFormat["BC4"] = 67] = "BC4"; + GFXFormat[GFXFormat["BC4_SNORM"] = 68] = "BC4_SNORM"; + GFXFormat[GFXFormat["BC5"] = 69] = "BC5"; + GFXFormat[GFXFormat["BC5_SNORM"] = 70] = "BC5_SNORM"; + GFXFormat[GFXFormat["BC6H_UF16"] = 71] = "BC6H_UF16"; + GFXFormat[GFXFormat["BC6H_SF16"] = 72] = "BC6H_SF16"; + GFXFormat[GFXFormat["BC7"] = 73] = "BC7"; + GFXFormat[GFXFormat["BC7_SRGB"] = 74] = "BC7_SRGB"; + GFXFormat[GFXFormat["ETC_RGB8"] = 75] = "ETC_RGB8"; + GFXFormat[GFXFormat["ETC2_RGB8"] = 76] = "ETC2_RGB8"; + GFXFormat[GFXFormat["ETC2_SRGB8"] = 77] = "ETC2_SRGB8"; + GFXFormat[GFXFormat["ETC2_RGB8_A1"] = 78] = "ETC2_RGB8_A1"; + GFXFormat[GFXFormat["ETC2_SRGB8_A1"] = 79] = "ETC2_SRGB8_A1"; + GFXFormat[GFXFormat["ETC2_RGBA8"] = 80] = "ETC2_RGBA8"; + GFXFormat[GFXFormat["ETC2_SRGB8_A8"] = 81] = "ETC2_SRGB8_A8"; + GFXFormat[GFXFormat["EAC_R11"] = 82] = "EAC_R11"; + GFXFormat[GFXFormat["EAC_R11SN"] = 83] = "EAC_R11SN"; + GFXFormat[GFXFormat["EAC_RG11"] = 84] = "EAC_RG11"; + GFXFormat[GFXFormat["EAC_RG11SN"] = 85] = "EAC_RG11SN"; + GFXFormat[GFXFormat["PVRTC_RGB2"] = 86] = "PVRTC_RGB2"; + GFXFormat[GFXFormat["PVRTC_RGBA2"] = 87] = "PVRTC_RGBA2"; + GFXFormat[GFXFormat["PVRTC_RGB4"] = 88] = "PVRTC_RGB4"; + GFXFormat[GFXFormat["PVRTC_RGBA4"] = 89] = "PVRTC_RGBA4"; + GFXFormat[GFXFormat["PVRTC2_2BPP"] = 90] = "PVRTC2_2BPP"; + GFXFormat[GFXFormat["PVRTC2_4BPP"] = 91] = "PVRTC2_4BPP"; + })(GFXFormat || (GFXFormat = {})); + var GFXBufferUsageBit; + (function(GFXBufferUsageBit) { + GFXBufferUsageBit[GFXBufferUsageBit["NONE"] = 0] = "NONE"; + GFXBufferUsageBit[GFXBufferUsageBit["TRANSFER_SRC"] = 1] = "TRANSFER_SRC"; + GFXBufferUsageBit[GFXBufferUsageBit["TRANSFER_DST"] = 2] = "TRANSFER_DST"; + GFXBufferUsageBit[GFXBufferUsageBit["INDEX"] = 4] = "INDEX"; + GFXBufferUsageBit[GFXBufferUsageBit["VERTEX"] = 8] = "VERTEX"; + GFXBufferUsageBit[GFXBufferUsageBit["UNIFORM"] = 16] = "UNIFORM"; + GFXBufferUsageBit[GFXBufferUsageBit["STORAGE"] = 32] = "STORAGE"; + GFXBufferUsageBit[GFXBufferUsageBit["INDIRECT"] = 64] = "INDIRECT"; + })(GFXBufferUsageBit || (GFXBufferUsageBit = {})); + var GFXMemoryUsageBit; + (function(GFXMemoryUsageBit) { + GFXMemoryUsageBit[GFXMemoryUsageBit["NONE"] = 0] = "NONE"; + GFXMemoryUsageBit[GFXMemoryUsageBit["DEVICE"] = 1] = "DEVICE"; + GFXMemoryUsageBit[GFXMemoryUsageBit["HOST"] = 2] = "HOST"; + })(GFXMemoryUsageBit || (GFXMemoryUsageBit = {})); + var GFXBufferAccessBit; + (function(GFXBufferAccessBit) { + GFXBufferAccessBit[GFXBufferAccessBit["NONE"] = 0] = "NONE"; + GFXBufferAccessBit[GFXBufferAccessBit["READ"] = 1] = "READ"; + GFXBufferAccessBit[GFXBufferAccessBit["WRITE"] = 2] = "WRITE"; + })(GFXBufferAccessBit || (GFXBufferAccessBit = {})); + var GFXPrimitiveMode; + (function(GFXPrimitiveMode) { + GFXPrimitiveMode[GFXPrimitiveMode["POINT_LIST"] = 0] = "POINT_LIST"; + GFXPrimitiveMode[GFXPrimitiveMode["LINE_LIST"] = 1] = "LINE_LIST"; + GFXPrimitiveMode[GFXPrimitiveMode["LINE_STRIP"] = 2] = "LINE_STRIP"; + GFXPrimitiveMode[GFXPrimitiveMode["LINE_LOOP"] = 3] = "LINE_LOOP"; + GFXPrimitiveMode[GFXPrimitiveMode["LINE_LIST_ADJACENCY"] = 4] = "LINE_LIST_ADJACENCY"; + GFXPrimitiveMode[GFXPrimitiveMode["LINE_STRIP_ADJACENCY"] = 5] = "LINE_STRIP_ADJACENCY"; + GFXPrimitiveMode[GFXPrimitiveMode["ISO_LINE_LIST"] = 6] = "ISO_LINE_LIST"; + GFXPrimitiveMode[GFXPrimitiveMode["TRIANGLE_LIST"] = 7] = "TRIANGLE_LIST"; + GFXPrimitiveMode[GFXPrimitiveMode["TRIANGLE_STRIP"] = 8] = "TRIANGLE_STRIP"; + GFXPrimitiveMode[GFXPrimitiveMode["TRIANGLE_FAN"] = 9] = "TRIANGLE_FAN"; + GFXPrimitiveMode[GFXPrimitiveMode["TRIANGLE_LIST_ADJACENCY"] = 10] = "TRIANGLE_LIST_ADJACENCY"; + GFXPrimitiveMode[GFXPrimitiveMode["TRIANGLE_STRIP_ADJACENCY"] = 11] = "TRIANGLE_STRIP_ADJACENCY"; + GFXPrimitiveMode[GFXPrimitiveMode["TRIANGLE_PATCH_ADJACENCY"] = 12] = "TRIANGLE_PATCH_ADJACENCY"; + GFXPrimitiveMode[GFXPrimitiveMode["QUAD_PATCH_LIST"] = 13] = "QUAD_PATCH_LIST"; + })(GFXPrimitiveMode || (GFXPrimitiveMode = {})); + var GFXPolygonMode; + (function(GFXPolygonMode) { + GFXPolygonMode[GFXPolygonMode["FILL"] = 0] = "FILL"; + GFXPolygonMode[GFXPolygonMode["POINT"] = 1] = "POINT"; + GFXPolygonMode[GFXPolygonMode["LINE"] = 2] = "LINE"; + })(GFXPolygonMode || (GFXPolygonMode = {})); + var GFXShadeModel; + (function(GFXShadeModel) { + GFXShadeModel[GFXShadeModel["GOURAND"] = 0] = "GOURAND"; + GFXShadeModel[GFXShadeModel["FLAT"] = 1] = "FLAT"; + })(GFXShadeModel || (GFXShadeModel = {})); + var GFXCullMode; + (function(GFXCullMode) { + GFXCullMode[GFXCullMode["NONE"] = 0] = "NONE"; + GFXCullMode[GFXCullMode["FRONT"] = 1] = "FRONT"; + GFXCullMode[GFXCullMode["BACK"] = 2] = "BACK"; + })(GFXCullMode || (GFXCullMode = {})); + var GFXComparisonFunc; + (function(GFXComparisonFunc) { + GFXComparisonFunc[GFXComparisonFunc["NEVER"] = 0] = "NEVER"; + GFXComparisonFunc[GFXComparisonFunc["LESS"] = 1] = "LESS"; + GFXComparisonFunc[GFXComparisonFunc["EQUAL"] = 2] = "EQUAL"; + GFXComparisonFunc[GFXComparisonFunc["LESS_EQUAL"] = 3] = "LESS_EQUAL"; + GFXComparisonFunc[GFXComparisonFunc["GREATER"] = 4] = "GREATER"; + GFXComparisonFunc[GFXComparisonFunc["NOT_EQUAL"] = 5] = "NOT_EQUAL"; + GFXComparisonFunc[GFXComparisonFunc["GREATER_EQUAL"] = 6] = "GREATER_EQUAL"; + GFXComparisonFunc[GFXComparisonFunc["ALWAYS"] = 7] = "ALWAYS"; + })(GFXComparisonFunc || (GFXComparisonFunc = {})); + var GFXStencilOp; + (function(GFXStencilOp) { + GFXStencilOp[GFXStencilOp["ZERO"] = 0] = "ZERO"; + GFXStencilOp[GFXStencilOp["KEEP"] = 1] = "KEEP"; + GFXStencilOp[GFXStencilOp["REPLACE"] = 2] = "REPLACE"; + GFXStencilOp[GFXStencilOp["INCR"] = 3] = "INCR"; + GFXStencilOp[GFXStencilOp["DECR"] = 4] = "DECR"; + GFXStencilOp[GFXStencilOp["INVERT"] = 5] = "INVERT"; + GFXStencilOp[GFXStencilOp["INCR_WRAP"] = 6] = "INCR_WRAP"; + GFXStencilOp[GFXStencilOp["DECR_WRAP"] = 7] = "DECR_WRAP"; + })(GFXStencilOp || (GFXStencilOp = {})); + var GFXBlendOp; + (function(GFXBlendOp) { + GFXBlendOp[GFXBlendOp["ADD"] = 0] = "ADD"; + GFXBlendOp[GFXBlendOp["SUB"] = 1] = "SUB"; + GFXBlendOp[GFXBlendOp["REV_SUB"] = 2] = "REV_SUB"; + GFXBlendOp[GFXBlendOp["MIN"] = 3] = "MIN"; + GFXBlendOp[GFXBlendOp["MAX"] = 4] = "MAX"; + })(GFXBlendOp || (GFXBlendOp = {})); + var GFXBlendFactor; + (function(GFXBlendFactor) { + GFXBlendFactor[GFXBlendFactor["ZERO"] = 0] = "ZERO"; + GFXBlendFactor[GFXBlendFactor["ONE"] = 1] = "ONE"; + GFXBlendFactor[GFXBlendFactor["SRC_ALPHA"] = 2] = "SRC_ALPHA"; + GFXBlendFactor[GFXBlendFactor["DST_ALPHA"] = 3] = "DST_ALPHA"; + GFXBlendFactor[GFXBlendFactor["ONE_MINUS_SRC_ALPHA"] = 4] = "ONE_MINUS_SRC_ALPHA"; + GFXBlendFactor[GFXBlendFactor["ONE_MINUS_DST_ALPHA"] = 5] = "ONE_MINUS_DST_ALPHA"; + GFXBlendFactor[GFXBlendFactor["SRC_COLOR"] = 6] = "SRC_COLOR"; + GFXBlendFactor[GFXBlendFactor["DST_COLOR"] = 7] = "DST_COLOR"; + GFXBlendFactor[GFXBlendFactor["ONE_MINUS_SRC_COLOR"] = 8] = "ONE_MINUS_SRC_COLOR"; + GFXBlendFactor[GFXBlendFactor["ONE_MINUS_DST_COLOR"] = 9] = "ONE_MINUS_DST_COLOR"; + GFXBlendFactor[GFXBlendFactor["SRC_ALPHA_SATURATE"] = 10] = "SRC_ALPHA_SATURATE"; + GFXBlendFactor[GFXBlendFactor["CONSTANT_COLOR"] = 11] = "CONSTANT_COLOR"; + GFXBlendFactor[GFXBlendFactor["ONE_MINUS_CONSTANT_COLOR"] = 12] = "ONE_MINUS_CONSTANT_COLOR"; + GFXBlendFactor[GFXBlendFactor["CONSTANT_ALPHA"] = 13] = "CONSTANT_ALPHA"; + GFXBlendFactor[GFXBlendFactor["ONE_MINUS_CONSTANT_ALPHA"] = 14] = "ONE_MINUS_CONSTANT_ALPHA"; + })(GFXBlendFactor || (GFXBlendFactor = {})); + var GFXColorMask; + (function(GFXColorMask) { + GFXColorMask[GFXColorMask["NONE"] = 0] = "NONE"; + GFXColorMask[GFXColorMask["R"] = 1] = "R"; + GFXColorMask[GFXColorMask["G"] = 2] = "G"; + GFXColorMask[GFXColorMask["B"] = 4] = "B"; + GFXColorMask[GFXColorMask["A"] = 8] = "A"; + GFXColorMask[GFXColorMask["ALL"] = 15] = "ALL"; + })(GFXColorMask || (GFXColorMask = {})); + var GFXFilter; + (function(GFXFilter) { + GFXFilter[GFXFilter["NONE"] = 0] = "NONE"; + GFXFilter[GFXFilter["POINT"] = 1] = "POINT"; + GFXFilter[GFXFilter["LINEAR"] = 2] = "LINEAR"; + GFXFilter[GFXFilter["ANISOTROPIC"] = 3] = "ANISOTROPIC"; + })(GFXFilter || (GFXFilter = {})); + var GFXAddress; + (function(GFXAddress) { + GFXAddress[GFXAddress["WRAP"] = 0] = "WRAP"; + GFXAddress[GFXAddress["MIRROR"] = 1] = "MIRROR"; + GFXAddress[GFXAddress["CLAMP"] = 2] = "CLAMP"; + GFXAddress[GFXAddress["BORDER"] = 3] = "BORDER"; + })(GFXAddress || (GFXAddress = {})); + var GFXTextureType; + (function(GFXTextureType) { + GFXTextureType[GFXTextureType["TEX1D"] = 0] = "TEX1D"; + GFXTextureType[GFXTextureType["TEX2D"] = 1] = "TEX2D"; + GFXTextureType[GFXTextureType["TEX3D"] = 2] = "TEX3D"; + })(GFXTextureType || (GFXTextureType = {})); + var GFXTextureUsageBit; + (function(GFXTextureUsageBit) { + GFXTextureUsageBit[GFXTextureUsageBit["NONE"] = 0] = "NONE"; + GFXTextureUsageBit[GFXTextureUsageBit["TRANSFER_SRC"] = 1] = "TRANSFER_SRC"; + GFXTextureUsageBit[GFXTextureUsageBit["TRANSFER_DST"] = 2] = "TRANSFER_DST"; + GFXTextureUsageBit[GFXTextureUsageBit["SAMPLED"] = 4] = "SAMPLED"; + GFXTextureUsageBit[GFXTextureUsageBit["STORAGE"] = 8] = "STORAGE"; + GFXTextureUsageBit[GFXTextureUsageBit["COLOR_ATTACHMENT"] = 16] = "COLOR_ATTACHMENT"; + GFXTextureUsageBit[GFXTextureUsageBit["DEPTH_STENCIL_ATTACHMENT"] = 32] = "DEPTH_STENCIL_ATTACHMENT"; + GFXTextureUsageBit[GFXTextureUsageBit["TRANSIENT_ATTACHMENT"] = 64] = "TRANSIENT_ATTACHMENT"; + GFXTextureUsageBit[GFXTextureUsageBit["INPUT_ATTACHMENT"] = 128] = "INPUT_ATTACHMENT"; + })(GFXTextureUsageBit || (GFXTextureUsageBit = {})); + var GFXSampleCount; + (function(GFXSampleCount) { + GFXSampleCount[GFXSampleCount["X1"] = 0] = "X1"; + GFXSampleCount[GFXSampleCount["X2"] = 1] = "X2"; + GFXSampleCount[GFXSampleCount["X4"] = 2] = "X4"; + GFXSampleCount[GFXSampleCount["X8"] = 3] = "X8"; + GFXSampleCount[GFXSampleCount["X16"] = 4] = "X16"; + GFXSampleCount[GFXSampleCount["X32"] = 5] = "X32"; + GFXSampleCount[GFXSampleCount["X64"] = 6] = "X64"; + })(GFXSampleCount || (GFXSampleCount = {})); + var GFXTextureFlagBit; + (function(GFXTextureFlagBit) { + GFXTextureFlagBit[GFXTextureFlagBit["NONE"] = 0] = "NONE"; + GFXTextureFlagBit[GFXTextureFlagBit["GEN_MIPMAP"] = 1] = "GEN_MIPMAP"; + GFXTextureFlagBit[GFXTextureFlagBit["CUBEMAP"] = 2] = "CUBEMAP"; + GFXTextureFlagBit[GFXTextureFlagBit["BAKUP_BUFFER"] = 4] = "BAKUP_BUFFER"; + })(GFXTextureFlagBit || (GFXTextureFlagBit = {})); + var GFXTextureViewType; + (function(GFXTextureViewType) { + GFXTextureViewType[GFXTextureViewType["TV1D"] = 0] = "TV1D"; + GFXTextureViewType[GFXTextureViewType["TV2D"] = 1] = "TV2D"; + GFXTextureViewType[GFXTextureViewType["TV3D"] = 2] = "TV3D"; + GFXTextureViewType[GFXTextureViewType["CUBE"] = 3] = "CUBE"; + GFXTextureViewType[GFXTextureViewType["TV1D_ARRAY"] = 4] = "TV1D_ARRAY"; + GFXTextureViewType[GFXTextureViewType["TV2D_ARRAY"] = 5] = "TV2D_ARRAY"; + })(GFXTextureViewType || (GFXTextureViewType = {})); + var GFXShaderType; + (function(GFXShaderType) { + GFXShaderType[GFXShaderType["VERTEX"] = 0] = "VERTEX"; + GFXShaderType[GFXShaderType["HULL"] = 1] = "HULL"; + GFXShaderType[GFXShaderType["DOMAIN"] = 2] = "DOMAIN"; + GFXShaderType[GFXShaderType["GEOMETRY"] = 3] = "GEOMETRY"; + GFXShaderType[GFXShaderType["FRAGMENT"] = 4] = "FRAGMENT"; + GFXShaderType[GFXShaderType["COMPUTE"] = 5] = "COMPUTE"; + GFXShaderType[GFXShaderType["COUNT"] = 6] = "COUNT"; + })(GFXShaderType || (GFXShaderType = {})); + var GFXBindingType; + (function(GFXBindingType) { + GFXBindingType[GFXBindingType["UNKNOWN"] = 0] = "UNKNOWN"; + GFXBindingType[GFXBindingType["UNIFORM_BUFFER"] = 1] = "UNIFORM_BUFFER"; + GFXBindingType[GFXBindingType["SAMPLER"] = 2] = "SAMPLER"; + GFXBindingType[GFXBindingType["STORAGE_BUFFER"] = 3] = "STORAGE_BUFFER"; + })(GFXBindingType || (GFXBindingType = {})); + var GFXCommandBufferType; + (function(GFXCommandBufferType) { + GFXCommandBufferType[GFXCommandBufferType["PRIMARY"] = 0] = "PRIMARY"; + GFXCommandBufferType[GFXCommandBufferType["SECONDARY"] = 1] = "SECONDARY"; + })(GFXCommandBufferType || (GFXCommandBufferType = {})); + var GFXLoadOp; + (function(GFXLoadOp) { + GFXLoadOp[GFXLoadOp["LOAD"] = 0] = "LOAD"; + GFXLoadOp[GFXLoadOp["CLEAR"] = 1] = "CLEAR"; + GFXLoadOp[GFXLoadOp["DISCARD"] = 2] = "DISCARD"; + })(GFXLoadOp || (GFXLoadOp = {})); + var GFXStoreOp; + (function(GFXStoreOp) { + GFXStoreOp[GFXStoreOp["STORE"] = 0] = "STORE"; + GFXStoreOp[GFXStoreOp["DISCARD"] = 1] = "DISCARD"; + })(GFXStoreOp || (GFXStoreOp = {})); + var GFXTextureLayout; + (function(GFXTextureLayout) { + GFXTextureLayout[GFXTextureLayout["UNDEFINED"] = 0] = "UNDEFINED"; + GFXTextureLayout[GFXTextureLayout["GENERAL"] = 1] = "GENERAL"; + GFXTextureLayout[GFXTextureLayout["COLOR_ATTACHMENT_OPTIMAL"] = 2] = "COLOR_ATTACHMENT_OPTIMAL"; + GFXTextureLayout[GFXTextureLayout["DEPTH_STENCIL_ATTACHMENT_OPTIMAL"] = 3] = "DEPTH_STENCIL_ATTACHMENT_OPTIMAL"; + GFXTextureLayout[GFXTextureLayout["DEPTH_STENCIL_READONLY_OPTIMAL"] = 4] = "DEPTH_STENCIL_READONLY_OPTIMAL"; + GFXTextureLayout[GFXTextureLayout["SHADER_READONLY_OPTIMAL"] = 5] = "SHADER_READONLY_OPTIMAL"; + GFXTextureLayout[GFXTextureLayout["TRANSFER_SRC_OPTIMAL"] = 6] = "TRANSFER_SRC_OPTIMAL"; + GFXTextureLayout[GFXTextureLayout["TRANSFER_DST_OPTIMAL"] = 7] = "TRANSFER_DST_OPTIMAL"; + GFXTextureLayout[GFXTextureLayout["PREINITIALIZED"] = 8] = "PREINITIALIZED"; + GFXTextureLayout[GFXTextureLayout["PRESENT_SRC"] = 9] = "PRESENT_SRC"; + })(GFXTextureLayout || (GFXTextureLayout = {})); + var GFXPipelineBindPoint; + (function(GFXPipelineBindPoint) { + GFXPipelineBindPoint[GFXPipelineBindPoint["GRAPHICS"] = 0] = "GRAPHICS"; + GFXPipelineBindPoint[GFXPipelineBindPoint["COMPUTE"] = 1] = "COMPUTE"; + GFXPipelineBindPoint[GFXPipelineBindPoint["RAY_TRACING"] = 2] = "RAY_TRACING"; + })(GFXPipelineBindPoint || (GFXPipelineBindPoint = {})); + var GFXDynamicState; + (function(GFXDynamicState) { + GFXDynamicState[GFXDynamicState["VIEWPORT"] = 0] = "VIEWPORT"; + GFXDynamicState[GFXDynamicState["SCISSOR"] = 1] = "SCISSOR"; + GFXDynamicState[GFXDynamicState["LINE_WIDTH"] = 2] = "LINE_WIDTH"; + GFXDynamicState[GFXDynamicState["DEPTH_BIAS"] = 3] = "DEPTH_BIAS"; + GFXDynamicState[GFXDynamicState["BLEND_CONSTANTS"] = 4] = "BLEND_CONSTANTS"; + GFXDynamicState[GFXDynamicState["DEPTH_BOUNDS"] = 5] = "DEPTH_BOUNDS"; + GFXDynamicState[GFXDynamicState["STENCIL_WRITE_MASK"] = 6] = "STENCIL_WRITE_MASK"; + GFXDynamicState[GFXDynamicState["STENCIL_COMPARE_MASK"] = 7] = "STENCIL_COMPARE_MASK"; + })(GFXDynamicState || (GFXDynamicState = {})); + var GFXStencilFace; + (function(GFXStencilFace) { + GFXStencilFace[GFXStencilFace["FRONT"] = 0] = "FRONT"; + GFXStencilFace[GFXStencilFace["BACK"] = 1] = "BACK"; + GFXStencilFace[GFXStencilFace["ALL"] = 2] = "ALL"; + })(GFXStencilFace || (GFXStencilFace = {})); + var GFXQueueType; + (function(GFXQueueType) { + GFXQueueType[GFXQueueType["GRAPHICS"] = 0] = "GRAPHICS"; + GFXQueueType[GFXQueueType["COMPUTE"] = 1] = "COMPUTE"; + GFXQueueType[GFXQueueType["TRANSFER"] = 2] = "TRANSFER"; + })(GFXQueueType || (GFXQueueType = {})); + var GFXClearFlag; + (function(GFXClearFlag) { + GFXClearFlag[GFXClearFlag["NONE"] = 0] = "NONE"; + GFXClearFlag[GFXClearFlag["COLOR"] = 1] = "COLOR"; + GFXClearFlag[GFXClearFlag["DEPTH"] = 2] = "DEPTH"; + GFXClearFlag[GFXClearFlag["STENCIL"] = 4] = "STENCIL"; + GFXClearFlag[GFXClearFlag["DEPTH_STENCIL"] = 6] = "DEPTH_STENCIL"; + GFXClearFlag[GFXClearFlag["ALL"] = 7] = "ALL"; + })(GFXClearFlag || (GFXClearFlag = {})); + function GFXGetTypeSize(type) { + switch (type) { + case GFXType.BOOL: + case GFXType.INT: + case GFXType.UINT: + case GFXType.FLOAT: + return 4; + + case GFXType.BOOL2: + case GFXType.INT2: + case GFXType.UINT2: + case GFXType.FLOAT2: + return 8; + + case GFXType.BOOL3: + case GFXType.INT3: + case GFXType.UINT3: + case GFXType.FLOAT3: + return 12; + + case GFXType.BOOL4: + case GFXType.INT4: + case GFXType.UINT4: + case GFXType.FLOAT4: + case GFXType.MAT2: + return 16; + + case GFXType.MAT2X3: + return 24; + + case GFXType.MAT2X4: + return 32; + + case GFXType.MAT3X2: + return 24; + + case GFXType.MAT3: + return 36; + + case GFXType.MAT3X4: + return 48; + + case GFXType.MAT4X2: + case GFXType.MAT4X2: + return 32; + + case GFXType.MAT4: + return 64; + + case GFXType.SAMPLER1D: + case GFXType.SAMPLER1D_ARRAY: + case GFXType.SAMPLER2D: + case GFXType.SAMPLER2D_ARRAY: + case GFXType.SAMPLER3D: + case GFXType.SAMPLER_CUBE: + return 4; + + default: + return 0; + } + } + var RenderPassStage; + (function(RenderPassStage) { + RenderPassStage[RenderPassStage["DEFAULT"] = 100] = "DEFAULT"; + })(RenderPassStage || (RenderPassStage = {})); + var RenderPriority; + (function(RenderPriority) { + RenderPriority[RenderPriority["MIN"] = 0] = "MIN"; + RenderPriority[RenderPriority["MAX"] = 255] = "MAX"; + RenderPriority[RenderPriority["DEFAULT"] = 128] = "DEFAULT"; + })(RenderPriority || (RenderPriority = {})); + var MAX_BINDING_SUPPORTED = 24; + var UniformBinding; + (function(UniformBinding) { + UniformBinding[UniformBinding["UBO_GLOBAL"] = MAX_BINDING_SUPPORTED - 1] = "UBO_GLOBAL"; + UniformBinding[UniformBinding["UBO_SHADOW"] = MAX_BINDING_SUPPORTED - 2] = "UBO_SHADOW"; + UniformBinding[UniformBinding["UBO_LOCAL"] = MAX_BINDING_SUPPORTED - 3] = "UBO_LOCAL"; + UniformBinding[UniformBinding["UBO_FORWARD_LIGHTS"] = MAX_BINDING_SUPPORTED - 4] = "UBO_FORWARD_LIGHTS"; + UniformBinding[UniformBinding["UBO_SKINNING"] = MAX_BINDING_SUPPORTED - 5] = "UBO_SKINNING"; + UniformBinding[UniformBinding["UBO_SKINNING_TEXTURE"] = MAX_BINDING_SUPPORTED - 6] = "UBO_SKINNING_TEXTURE"; + UniformBinding[UniformBinding["UBO_UI"] = MAX_BINDING_SUPPORTED - 7] = "UBO_UI"; + UniformBinding[UniformBinding["SAMPLER_JOINTS"] = MAX_BINDING_SUPPORTED + 1] = "SAMPLER_JOINTS"; + UniformBinding[UniformBinding["SAMPLER_ENVIRONMENT"] = MAX_BINDING_SUPPORTED + 2] = "SAMPLER_ENVIRONMENT"; + UniformBinding[UniformBinding["CUSTUM_UBO_BINDING_END_POINT"] = MAX_BINDING_SUPPORTED - 7] = "CUSTUM_UBO_BINDING_END_POINT"; + UniformBinding[UniformBinding["CUSTOM_SAMPLER_BINDING_START_POINT"] = MAX_BINDING_SUPPORTED + 6] = "CUSTOM_SAMPLER_BINDING_START_POINT"; + })(UniformBinding || (UniformBinding = {})); + var _a, _b; + var SamplerInfoIndex; + (function(SamplerInfoIndex) { + SamplerInfoIndex[SamplerInfoIndex["minFilter"] = 0] = "minFilter"; + SamplerInfoIndex[SamplerInfoIndex["magFilter"] = 1] = "magFilter"; + SamplerInfoIndex[SamplerInfoIndex["mipFilter"] = 2] = "mipFilter"; + SamplerInfoIndex[SamplerInfoIndex["addressU"] = 3] = "addressU"; + SamplerInfoIndex[SamplerInfoIndex["addressV"] = 4] = "addressV"; + SamplerInfoIndex[SamplerInfoIndex["addressW"] = 5] = "addressW"; + SamplerInfoIndex[SamplerInfoIndex["maxAnisotropy"] = 6] = "maxAnisotropy"; + SamplerInfoIndex[SamplerInfoIndex["cmpFunc"] = 7] = "cmpFunc"; + SamplerInfoIndex[SamplerInfoIndex["minLOD"] = 8] = "minLOD"; + SamplerInfoIndex[SamplerInfoIndex["maxLOD"] = 9] = "maxLOD"; + SamplerInfoIndex[SamplerInfoIndex["mipLODBias"] = 10] = "mipLODBias"; + SamplerInfoIndex[SamplerInfoIndex["borderColor"] = 11] = "borderColor"; + SamplerInfoIndex[SamplerInfoIndex["total"] = 15] = "total"; + })(SamplerInfoIndex || (SamplerInfoIndex = {})); + var typeMap = {}; + typeMap[typeMap["bool"] = GFXType.BOOL] = "bool"; + typeMap[typeMap["int"] = GFXType.INT] = "int"; + typeMap[typeMap["ivec2"] = GFXType.INT2] = "ivec2invTypeParams"; + typeMap[typeMap["ivec3"] = GFXType.INT3] = "ivec3"; + typeMap[typeMap["ivec4"] = GFXType.INT4] = "ivec4"; + typeMap[typeMap["float"] = GFXType.FLOAT] = "float"; + typeMap[typeMap["vec2"] = GFXType.FLOAT2] = "vec2"; + typeMap[typeMap["vec3"] = GFXType.FLOAT3] = "vec3"; + typeMap[typeMap["vec4"] = GFXType.FLOAT4] = "vec4"; + typeMap[typeMap["mat2"] = GFXType.MAT2] = "mat2"; + typeMap[typeMap["mat3"] = GFXType.MAT3] = "mat3"; + typeMap[typeMap["mat4"] = GFXType.MAT4] = "mat4"; + typeMap[typeMap["sampler2D"] = GFXType.SAMPLER2D] = "sampler2D"; + typeMap[typeMap["samplerCube"] = GFXType.SAMPLER_CUBE] = "samplerCube"; + var sizeMap = (_a = {}, _a[GFXType.BOOL] = 4, _a[GFXType.INT] = 4, _a[GFXType.INT2] = 8, + _a[GFXType.INT3] = 12, _a[GFXType.INT4] = 16, _a[GFXType.FLOAT] = 4, _a[GFXType.FLOAT2] = 8, + _a[GFXType.FLOAT3] = 12, _a[GFXType.FLOAT4] = 16, _a[GFXType.MAT2] = 16, _a[GFXType.MAT3] = 36, + _a[GFXType.MAT4] = 64, _a[GFXType.SAMPLER2D] = 4, _a[GFXType.SAMPLER_CUBE] = 4, + _a); + var formatMap = (_b = {}, _b[GFXType.BOOL] = GFXFormat.R32I, _b[GFXType.INT] = GFXFormat.R32I, + _b[GFXType.INT2] = GFXFormat.RG32I, _b[GFXType.INT3] = GFXFormat.RGB32I, _b[GFXType.INT4] = GFXFormat.RGBA32I, + _b[GFXType.FLOAT] = GFXFormat.R32F, _b[GFXType.FLOAT2] = GFXFormat.RG32F, _b[GFXType.FLOAT3] = GFXFormat.RGB32F, + _b[GFXType.FLOAT4] = GFXFormat.RGBA32F, _b); + var passParams = { + BACK: enums.CULL_BACK, + FRONT: enums.CULL_FRONT, + NONE: enums.CULL_NONE, + ADD: enums.BLEND_FUNC_ADD, + SUB: enums.BLEND_FUNC_SUBTRACT, + REV_SUB: enums.BLEND_FUNC_REVERSE_SUBTRACT, + ZERO: enums.BLEND_ZERO, + ONE: enums.BLEND_ONE, + SRC_COLOR: enums.BLEND_SRC_COLOR, + ONE_MINUS_SRC_COLOR: enums.BLEND_ONE_MINUS_SRC_COLOR, + DST_COLOR: enums.BLEND_DST_COLOR, + ONE_MINUS_DST_COLOR: enums.BLEND_ONE_MINUS_DST_COLOR, + SRC_ALPHA: enums.BLEND_SRC_ALPHA, + ONE_MINUS_SRC_ALPHA: enums.BLEND_ONE_MINUS_SRC_ALPHA, + DST_ALPHA: enums.BLEND_DST_ALPHA, + ONE_MINUS_DST_ALPHA: enums.BLEND_ONE_MINUS_DST_ALPHA, + CONSTANT_COLOR: enums.BLEND_CONSTANT_COLOR, + ONE_MINUS_CONSTANT_COLOR: enums.BLEND_ONE_MINUS_CONSTANT_COLOR, + CONSTANT_ALPHA: enums.BLEND_CONSTANT_ALPHA, + ONE_MINUS_CONSTANT_ALPHA: enums.BLEND_ONE_MINUS_CONSTANT_ALPHA, + SRC_ALPHA_SATURATE: enums.BLEND_SRC_ALPHA_SATURATE, + NEVER: enums.DS_FUNC_NEVER, + LESS: enums.DS_FUNC_LESS, + EQUAL: enums.DS_FUNC_EQUAL, + LEQUAL: enums.DS_FUNC_LEQUAL, + GREATER: enums.DS_FUNC_GREATER, + NOTEQUAL: enums.DS_FUNC_NOTEQUAL, + GEQUAL: enums.DS_FUNC_GEQUAL, + ALWAYS: enums.DS_FUNC_ALWAYS, + KEEP: enums.STENCIL_OP_KEEP, + REPLACE: enums.STENCIL_OP_REPLACE, + INCR: enums.STENCIL_OP_INCR, + INCR_WRAP: enums.STENCIL_OP_INCR_WRAP, + DECR: enums.STENCIL_OP_DECR, + DECR_WRAP: enums.STENCIL_OP_DECR_WRAP, + INVERT: enums.STENCIL_OP_INVERT + }; + Object.assign(passParams, RenderPassStage); + var effectStructure = { + $techniques: [ { + $passes: [ { + depthStencilState: {}, + rasterizerState: {}, + blendState: { + targets: [ {} ] + }, + properties: { + any: { + sampler: {}, + inspector: {} + } + } + } ] + } ] + }; + var mappings = { + murmurhash2_32_gc: murmurhash2_32_gc, + SamplerInfoIndex: SamplerInfoIndex, + effectStructure: effectStructure, + typeMap: typeMap, + sizeMap: sizeMap, + formatMap: formatMap, + passParams: passParams, + RenderQueue: RenderQueue, + RenderPriority: RenderPriority, + GFXGetTypeSize: GFXGetTypeSize, + UniformBinding: UniformBinding + }; + module.exports = mappings; + }), {} ], + 236: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _memop = require("../memop"); + var _enums = _interopRequireDefault(require("../enums")); + var _valueTypes = require("../../core/value-types"); + var _programLib = _interopRequireDefault(require("./program-lib")); + var _view = _interopRequireDefault(require("./view")); + var _gfx = _interopRequireDefault(require("../gfx")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var _m4_tmp = new _valueTypes.Mat4(); + var _stageInfos = new _memop.RecyclePool(function() { + return { + stage: null, + items: null + }; + }, 8); + var _float2_pool = new _memop.RecyclePool(function() { + return new Float32Array(2); + }, 8); + var _float3_pool = new _memop.RecyclePool(function() { + return new Float32Array(3); + }, 8); + var _float4_pool = new _memop.RecyclePool(function() { + return new Float32Array(4); + }, 8); + var _float9_pool = new _memop.RecyclePool(function() { + return new Float32Array(9); + }, 8); + var _float16_pool = new _memop.RecyclePool(function() { + return new Float32Array(16); + }, 8); + var _float64_pool = new _memop.RecyclePool(function() { + return new Float32Array(64); + }, 8); + var _int2_pool = new _memop.RecyclePool(function() { + return new Int32Array(2); + }, 8); + var _int3_pool = new _memop.RecyclePool(function() { + return new Int32Array(3); + }, 8); + var _int4_pool = new _memop.RecyclePool(function() { + return new Int32Array(4); + }, 8); + var _int64_pool = new _memop.RecyclePool(function() { + return new Int32Array(64); + }, 8); + var Base = (function() { + function Base(device, opts) { + var _this$_type2defaultVa; + this._device = device; + this._programLib = new _programLib["default"](device); + this._opts = opts; + this._type2defaultValue = (_this$_type2defaultVa = {}, _this$_type2defaultVa[_enums["default"].PARAM_INT] = 0, + _this$_type2defaultVa[_enums["default"].PARAM_INT2] = new _valueTypes.Vec2(0, 0), + _this$_type2defaultVa[_enums["default"].PARAM_INT3] = new _valueTypes.Vec3(0, 0, 0), + _this$_type2defaultVa[_enums["default"].PARAM_INT4] = new _valueTypes.Vec4(0, 0, 0, 0), + _this$_type2defaultVa[_enums["default"].PARAM_FLOAT] = 0, _this$_type2defaultVa[_enums["default"].PARAM_FLOAT2] = new _valueTypes.Vec2(0, 0), + _this$_type2defaultVa[_enums["default"].PARAM_FLOAT3] = new _valueTypes.Vec3(0, 0, 0), + _this$_type2defaultVa[_enums["default"].PARAM_FLOAT4] = new _valueTypes.Vec4(0, 0, 0, 0), + _this$_type2defaultVa[_enums["default"].PARAM_COLOR4] = new _valueTypes.Color(0, 0, 0, 1), + _this$_type2defaultVa[_enums["default"].PARAM_MAT3] = new _valueTypes.Mat3(), _this$_type2defaultVa[_enums["default"].PARAM_MAT4] = new _valueTypes.Mat4(), + _this$_type2defaultVa[_enums["default"].PARAM_TEXTURE_2D] = opts.defaultTexture, + _this$_type2defaultVa[_enums["default"].PARAM_TEXTURE_CUBE] = opts.defaultTextureCube, + _this$_type2defaultVa); + this._stage2fn = {}; + this._usedTextureUnits = 0; + this._viewPools = new _memop.RecyclePool(function() { + return new _view["default"](); + }, 8); + this._drawItemsPools = new _memop.RecyclePool(function() { + return { + model: null, + node: null, + ia: null, + effect: null, + defines: null, + uniforms: null + }; + }, 100); + this._stageItemsPools = new _memop.RecyclePool(function() { + return new _memop.RecyclePool(function() { + return { + model: null, + node: null, + ia: null, + effect: null, + defines: null, + passes: [], + sortKey: -1, + uniforms: null + }; + }, 100); + }, 16); + this._definesChanged = false; + } + var _proto = Base.prototype; + _proto._resetTextuerUnit = function _resetTextuerUnit() { + this._usedTextureUnits = 0; + }; + _proto._allocTextureUnit = function _allocTextureUnit() { + var device = this._device; + var unit = this._usedTextureUnits; + unit >= device._caps.maxTextureUnits && console.warn("Trying to use " + unit + " texture units while this GPU supports only " + device._caps.maxTextureUnits); + this._usedTextureUnits += 1; + return unit; + }; + _proto._registerStage = function _registerStage(name, fn) { + this._stage2fn[name] = fn; + }; + _proto.clear = function clear() { + this._programLib.clear(); + this.reset(); + }; + _proto.reset = function reset() { + this._viewPools.reset(); + this._stageItemsPools.reset(); + this._definesChanged = false; + }; + _proto._requestView = function _requestView() { + return this._viewPools.add(); + }; + _proto._render = function _render(view, scene) { + var device = this._device; + device.setFrameBuffer(view._framebuffer); + device.setViewport(view._rect.x, view._rect.y, view._rect.w, view._rect.h); + var clearOpts = {}; + view._clearFlags & _enums["default"].CLEAR_COLOR && (clearOpts.color = _valueTypes.Vec4.toArray([], view._color)); + view._clearFlags & _enums["default"].CLEAR_DEPTH && (clearOpts.depth = view._depth); + view._clearFlags & _enums["default"].CLEAR_STENCIL && (clearOpts.stencil = view._stencil); + device.clear(clearOpts); + this._drawItemsPools.reset(); + for (var i = 0; i < scene._models.length; ++i) { + var model = scene._models.data[i]; + if (0 === (model._cullingMask & view._cullingMask)) continue; + var drawItem = this._drawItemsPools.add(); + model.extractDrawItem(drawItem); + } + _stageInfos.reset(); + for (var _i = 0; _i < view._stages.length; ++_i) { + var stage = view._stages[_i]; + var stageItems = this._stageItemsPools.add(); + stageItems.reset(); + for (var j = 0; j < this._drawItemsPools.length; ++j) { + var _drawItem = this._drawItemsPools.data[j]; + var passes = _drawItem.effect.stagePasses[stage]; + if (!passes || 0 === passes.length) continue; + var stageItem = stageItems.add(); + stageItem.passes = passes; + stageItem.model = _drawItem.model; + stageItem.node = _drawItem.node; + stageItem.ia = _drawItem.ia; + stageItem.effect = _drawItem.effect; + stageItem.defines = _drawItem.defines; + stageItem.sortKey = -1; + stageItem.uniforms = _drawItem.uniforms; + } + var stageInfo = _stageInfos.add(); + stageInfo.stage = stage; + stageInfo.items = stageItems; + } + for (var _i2 = 0; _i2 < _stageInfos.length; ++_i2) { + var info = _stageInfos.data[_i2]; + var fn = this._stage2fn[info.stage]; + fn(view, info.items); + } + }; + _proto._setProperty = function _setProperty(prop) { + var device = this._device; + var param = prop.value; + void 0 === param && (param = prop.val); + void 0 === param && (param = this._type2defaultValue[prop.type]); + if (void 0 === param) { + console.warn("Failed to set technique property " + prop.name + ", value not found."); + return; + } + if (prop.type === _enums["default"].PARAM_TEXTURE_2D || prop.type === _enums["default"].PARAM_TEXTURE_CUBE) if (Array.isArray(param)) { + if (param.length > prop.count) { + console.error("Failed to set property [" + prop.name + "] : The length of texture array [" + param.length + "] is bigger than [" + prop.count + "]."); + return; + } + var slots = _int64_pool.add(); + for (var index = 0; index < param.length; ++index) slots[index] = this._allocTextureUnit(); + device.setTextureArray(prop.name, param, slots); + } else device.setTexture(prop.name, param, this._allocTextureUnit()); else prop.directly ? device.setUniformDirectly(prop.name, param) : device.setUniform(prop.name, param); + }; + _proto._draw = function _draw(item) { + var device = this._device; + var programLib = this._programLib; + var node = item.node, ia = item.ia, passes = item.passes, effect = item.effect; + _float2_pool.reset(); + _float3_pool.reset(); + _float4_pool.reset(); + _float9_pool.reset(); + _float16_pool.reset(); + _float64_pool.reset(); + _int2_pool.reset(); + _int3_pool.reset(); + _int4_pool.reset(); + _int64_pool.reset(); + node.getWorldMatrix(_m4_tmp); + device.setUniform("cc_matWorld", _valueTypes.Mat4.toArray(_float16_pool.add(), _m4_tmp)); + _valueTypes.Mat4.invert(_m4_tmp, _m4_tmp); + _valueTypes.Mat4.transpose(_m4_tmp, _m4_tmp); + device.setUniform("cc_matWorldIT", _valueTypes.Mat4.toArray(_float16_pool.add(), _m4_tmp)); + var defines = this._defines; + for (var i = 0; i < passes.length; ++i) { + var pass = passes[i]; + this._definesChanged && (pass._programKey = null); + var count = ia.count; + ia._vertexBuffer && device.setVertexBuffer(0, ia._vertexBuffer); + ia._indexBuffer && device.setIndexBuffer(ia._indexBuffer); + device.setPrimitiveType(ia._primitiveType); + Object.setPrototypeOf(defines, pass._defines); + var program = programLib.getProgram(pass, defines, effect.name); + device.setProgram(program); + var uniforms = program._uniforms; + var variants = pass._properties; + for (var j = 0; j < uniforms.length; j++) { + var prop = variants[uniforms[j].name]; + void 0 !== prop && this._setProperty(prop); + } + device.setCullMode(pass._cullMode); + if (pass._blend) { + device.enableBlend(); + device.setBlendFuncSep(pass._blendSrc, pass._blendDst, pass._blendSrcAlpha, pass._blendDstAlpha); + device.setBlendEqSep(pass._blendEq, pass._blendAlphaEq); + device.setBlendColor32(pass._blendColor); + } + if (pass._depthTest) { + device.enableDepthTest(); + device.setDepthFunc(pass._depthFunc); + } + pass._depthWrite && device.enableDepthWrite(); + device.setStencilTest(pass._stencilTest); + if (pass._stencilTest === _gfx["default"].STENCIL_ENABLE) { + device.setStencilFuncFront(pass._stencilFuncFront, pass._stencilRefFront, pass._stencilMaskFront); + device.setStencilOpFront(pass._stencilFailOpFront, pass._stencilZFailOpFront, pass._stencilZPassOpFront, pass._stencilWriteMaskFront); + device.setStencilFuncBack(pass._stencilFuncBack, pass._stencilRefBack, pass._stencilMaskBack); + device.setStencilOpBack(pass._stencilFailOpBack, pass._stencilZFailOpBack, pass._stencilZPassOpBack, pass._stencilWriteMaskBack); + } + device.draw(ia._start, count); + this._resetTextuerUnit(); + } + }; + return Base; + })(); + exports["default"] = Base; + module.exports = exports["default"]; + }), { + "../../core/value-types": 220, + "../enums": 242, + "../gfx": 247, + "../memop": 259, + "./program-lib": 239, + "./view": 241 + } ], + 237: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _gfx = _interopRequireDefault(require("../gfx")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + var InputAssembler = (function() { + function InputAssembler(vb, ib, pt) { + void 0 === pt && (pt = _gfx["default"].PT_TRIANGLES); + this._vertexBuffer = vb; + this._indexBuffer = ib; + this._primitiveType = pt; + this._start = 0; + this._count = -1; + } + _createClass(InputAssembler, [ { + key: "count", + get: function get() { + if (-1 !== this._count) return this._count; + if (this._indexBuffer) return this._indexBuffer.count; + if (this._vertexBuffer) return this._vertexBuffer.count; + return 0; + } + } ]); + return InputAssembler; + })(); + exports["default"] = InputAssembler; + module.exports = exports["default"]; + }), { + "../gfx": 247 + } ], + 238: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _gfx = _interopRequireDefault(require("../gfx")); + var _enums = _interopRequireDefault(require("../enums")); + var _valueType = _interopRequireDefault(require("../../core/value-types/value-type")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var Pass = (function() { + function Pass(name, detailName, programName, stage, properties, defines) { + void 0 === properties && (properties = {}); + void 0 === defines && (defines = {}); + this._name = name; + this._detailName = detailName; + this._programName = programName; + this._programKey = null; + this._stage = stage; + this._properties = properties; + this._defines = defines; + this._cullMode = _gfx["default"].CULL_BACK; + this._blend = false; + this._blendEq = _gfx["default"].BLEND_FUNC_ADD; + this._blendAlphaEq = _gfx["default"].BLEND_FUNC_ADD; + this._blendSrc = _gfx["default"].BLEND_SRC_ALPHA; + this._blendDst = _gfx["default"].BLEND_ONE_MINUS_SRC_ALPHA; + this._blendSrcAlpha = _gfx["default"].BLEND_SRC_ALPHA; + this._blendDstAlpha = _gfx["default"].BLEND_ONE_MINUS_SRC_ALPHA; + this._blendColor = 4294967295; + this._depthTest = false; + this._depthWrite = false; + this._depthFunc = _gfx["default"].DS_FUNC_LESS, this._stencilTest = _gfx["default"].STENCIL_INHERIT; + this._stencilFuncFront = _gfx["default"].DS_FUNC_ALWAYS; + this._stencilRefFront = 0; + this._stencilMaskFront = 255; + this._stencilFailOpFront = _gfx["default"].STENCIL_OP_KEEP; + this._stencilZFailOpFront = _gfx["default"].STENCIL_OP_KEEP; + this._stencilZPassOpFront = _gfx["default"].STENCIL_OP_KEEP; + this._stencilWriteMaskFront = 255; + this._stencilFuncBack = _gfx["default"].DS_FUNC_ALWAYS; + this._stencilRefBack = 0; + this._stencilMaskBack = 255; + this._stencilFailOpBack = _gfx["default"].STENCIL_OP_KEEP; + this._stencilZFailOpBack = _gfx["default"].STENCIL_OP_KEEP; + this._stencilZPassOpBack = _gfx["default"].STENCIL_OP_KEEP; + this._stencilWriteMaskBack = 255; + } + var _proto = Pass.prototype; + _proto.setCullMode = function setCullMode(cullMode) { + void 0 === cullMode && (cullMode = _gfx["default"].CULL_BACK); + this._cullMode = cullMode; + }; + _proto.setBlend = function setBlend(enabled, blendEq, blendSrc, blendDst, blendAlphaEq, blendSrcAlpha, blendDstAlpha, blendColor) { + void 0 === enabled && (enabled = false); + void 0 === blendEq && (blendEq = _gfx["default"].BLEND_FUNC_ADD); + void 0 === blendSrc && (blendSrc = _gfx["default"].BLEND_SRC_ALPHA); + void 0 === blendDst && (blendDst = _gfx["default"].BLEND_ONE_MINUS_SRC_ALPHA); + void 0 === blendAlphaEq && (blendAlphaEq = _gfx["default"].BLEND_FUNC_ADD); + void 0 === blendSrcAlpha && (blendSrcAlpha = _gfx["default"].BLEND_SRC_ALPHA); + void 0 === blendDstAlpha && (blendDstAlpha = _gfx["default"].BLEND_ONE_MINUS_SRC_ALPHA); + void 0 === blendColor && (blendColor = 4294967295); + this._blend = enabled; + this._blendEq = blendEq; + this._blendSrc = blendSrc; + this._blendDst = blendDst; + this._blendAlphaEq = blendAlphaEq; + this._blendSrcAlpha = blendSrcAlpha; + this._blendDstAlpha = blendDstAlpha; + this._blendColor = blendColor; + }; + _proto.setDepth = function setDepth(depthTest, depthWrite, depthFunc) { + void 0 === depthTest && (depthTest = false); + void 0 === depthWrite && (depthWrite = false); + void 0 === depthFunc && (depthFunc = _gfx["default"].DS_FUNC_LESS); + this._depthTest = depthTest; + this._depthWrite = depthWrite; + this._depthFunc = depthFunc; + }; + _proto.setStencilFront = function setStencilFront(enabled, stencilFunc, stencilRef, stencilMask, stencilFailOp, stencilZFailOp, stencilZPassOp, stencilWriteMask) { + void 0 === enabled && (enabled = _gfx["default"].STENCIL_INHERIT); + void 0 === stencilFunc && (stencilFunc = _gfx["default"].DS_FUNC_ALWAYS); + void 0 === stencilRef && (stencilRef = 0); + void 0 === stencilMask && (stencilMask = 255); + void 0 === stencilFailOp && (stencilFailOp = _gfx["default"].STENCIL_OP_KEEP); + void 0 === stencilZFailOp && (stencilZFailOp = _gfx["default"].STENCIL_OP_KEEP); + void 0 === stencilZPassOp && (stencilZPassOp = _gfx["default"].STENCIL_OP_KEEP); + void 0 === stencilWriteMask && (stencilWriteMask = 255); + this._stencilTest = enabled; + this._stencilFuncFront = stencilFunc; + this._stencilRefFront = stencilRef; + this._stencilMaskFront = stencilMask; + this._stencilFailOpFront = stencilFailOp; + this._stencilZFailOpFront = stencilZFailOp; + this._stencilZPassOpFront = stencilZPassOp; + this._stencilWriteMaskFront = stencilWriteMask; + }; + _proto.setStencilEnabled = function setStencilEnabled(stencilTest) { + void 0 === stencilTest && (stencilTest = _gfx["default"].STENCIL_INHERIT); + this._stencilTest = stencilTest; + }; + _proto.setStencilBack = function setStencilBack(stencilTest, stencilFunc, stencilRef, stencilMask, stencilFailOp, stencilZFailOp, stencilZPassOp, stencilWriteMask) { + void 0 === stencilTest && (stencilTest = _gfx["default"].STENCIL_INHERIT); + void 0 === stencilFunc && (stencilFunc = _gfx["default"].DS_FUNC_ALWAYS); + void 0 === stencilRef && (stencilRef = 0); + void 0 === stencilMask && (stencilMask = 255); + void 0 === stencilFailOp && (stencilFailOp = _gfx["default"].STENCIL_OP_KEEP); + void 0 === stencilZFailOp && (stencilZFailOp = _gfx["default"].STENCIL_OP_KEEP); + void 0 === stencilZPassOp && (stencilZPassOp = _gfx["default"].STENCIL_OP_KEEP); + void 0 === stencilWriteMask && (stencilWriteMask = 255); + this._stencilTest = stencilTest; + this._stencilFuncBack = stencilFunc; + this._stencilRefBack = stencilRef; + this._stencilMaskBack = stencilMask; + this._stencilFailOpBack = stencilFailOp; + this._stencilZFailOpBack = stencilZFailOp; + this._stencilZPassOpBack = stencilZPassOp; + this._stencilWriteMaskBack = stencilWriteMask; + }; + _proto.setStage = function setStage(stage) { + this._stage = stage; + }; + _proto.setProperties = function setProperties(properties) { + this._properties = properties; + }; + _proto.getProperty = function getProperty(name) { + if (!this._properties[name]) return; + return this._properties[name].value; + }; + _proto.setProperty = function setProperty(name, value, directly) { + var prop = this._properties[name]; + if (!prop) return false; + prop.directly = directly; + if (Array.isArray(value)) { + var array = prop.value; + if (array.length !== value.length) { + cc.warnID(9105, this._name, name); + return; + } + for (var i = 0; i < value.length; i++) array[i] = value[i]; + } else if (value && !ArrayBuffer.isView(value)) if (prop.type === _enums["default"].PARAM_TEXTURE_2D) prop.value = value.getImpl(); else if (value instanceof _valueType["default"]) value.constructor.toArray(prop.value, value); else { + "object" === typeof value && cc.warnID(9106, this._name, name); + prop.value = value; + } else prop.value = value; + return true; + }; + _proto.getDefine = function getDefine(name) { + return this._defines[name]; + }; + _proto.define = function define(name, value, force) { + var oldValue = this._defines[name]; + if (!force && void 0 === oldValue) return false; + if (oldValue !== value) { + this._defines[name] = value; + this._programKey = null; + } + return true; + }; + _proto.clone = function clone() { + var pass = new Pass(this._programName); + Object.assign(pass, this); + var newProperties = {}; + var properties = this._properties; + for (var name in properties) { + var prop = properties[name]; + var newProp = newProperties[name] = {}; + var value = prop.value; + Array.isArray(value) ? newProp.value = value.concat() : ArrayBuffer.isView(value) ? newProp.value = new value.__proto__.constructor(value) : newProp.value = value; + for (var _name in prop) { + if ("value" === _name) continue; + newProp[_name] = prop[_name]; + } + } + pass._properties = newProperties; + pass._defines = Object.assign({}, this._defines); + return pass; + }; + return Pass; + })(); + exports["default"] = Pass; + module.exports = exports["default"]; + }), { + "../../core/value-types/value-type": 228, + "../enums": 242, + "../gfx": 247 + } ], + 239: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _gfx = _interopRequireDefault(require("../gfx")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var _shdID = 0; + function _generateDefines(tmpDefines, defines) { + var results = []; + for (var i = 0; i < tmpDefines.length; i++) { + var name = tmpDefines[i].name; + var value = defines[name]; + "number" !== typeof value && (value = value ? 1 : 0); + results.push("#define " + name + " " + value); + } + return results.join("\n") + "\n"; + } + function _replaceMacroNums(string, tmpDefines, defines) { + var tmp = string; + for (var i = 0; i < tmpDefines.length; i++) { + var name = tmpDefines[i].name; + var value = defines[name]; + if (Number.isInteger(value)) { + var reg = new RegExp(name, "g"); + tmp = tmp.replace(reg, value); + } + } + return tmp; + } + function _unrollLoops(string) { + var pattern = /#pragma for (\w+) in range\(\s*(\d+)\s*,\s*(\d+)\s*\)([\s\S]+?)#pragma endFor/g; + function replace(match, index, begin, end, snippet) { + var unroll = ""; + var parsedBegin = parseInt(begin); + var parsedEnd = parseInt(end); + (parsedBegin.isNaN || parsedEnd.isNaN) && console.error("Unroll For Loops Error: begin and end of range must be an int num."); + for (var i = parsedBegin; i < parsedEnd; ++i) unroll += snippet.replace(new RegExp("{" + index + "}", "g"), i); + return unroll; + } + return string.replace(pattern, replace); + } + function _replaceHighp(string) { + return string.replace(/\bhighp\b/g, "mediump"); + } + var ProgramLib = (function() { + function ProgramLib(device) { + this._device = device; + this._templates = {}; + this._cache = {}; + this._checkPrecision(); + } + var _proto = ProgramLib.prototype; + _proto.clear = function clear() { + this._templates = {}; + this._cache = {}; + }; + _proto.define = function define(prog) { + var name = prog.name, defines = prog.defines, glsl1 = prog.glsl1; + var _ref = glsl1 || prog, vert = _ref.vert, frag = _ref.frag; + if (this._templates[name]) return; + var id = ++_shdID; + var offset = 0; + for (var i = 0; i < defines.length; ++i) { + var def = defines[i]; + var cnt = 1; + if ("number" === def.type) { + var range = def.range || []; + def.min = range[0] || 0; + def.max = range[1] || 4; + cnt = Math.ceil(Math.log2(def.max - def.min)); + def._map = function(value) { + return value - this.min << this._offset; + }.bind(def); + } else def._map = function(value) { + if (value) return 1 << this._offset; + return 0; + }.bind(def); + def._offset = offset; + offset += cnt; + } + var uniforms = prog.uniforms || []; + if (prog.samplers) for (var _i = 0; _i < prog.samplers.length; _i++) uniforms.push(prog.samplers[_i]); + if (prog.blocks) for (var _i2 = 0; _i2 < prog.blocks.length; _i2++) { + var _defines = prog.blocks[_i2].defines; + var members = prog.blocks[_i2].members; + for (var j = 0; j < members.length; j++) uniforms.push({ + defines: _defines, + name: members[j].name, + type: members[j].type + }); + } + this._templates[name] = { + id: id, + name: name, + vert: vert, + frag: frag, + defines: defines, + attributes: prog.attributes, + uniforms: uniforms, + extensions: prog.extensions + }; + }; + _proto.getTemplate = function getTemplate(name) { + return this._templates[name]; + }; + _proto.hasProgram = function hasProgram(name) { + return void 0 !== this._templates[name]; + }; + _proto.getKey = function getKey(name, defines) { + var tmpl = this._templates[name]; + var key = 0; + for (var i = 0; i < tmpl.defines.length; ++i) { + var tmplDefs = tmpl.defines[i]; + var value = defines[tmplDefs.name]; + if (void 0 === value) continue; + key |= tmplDefs._map(value); + } + return tmpl.id + ":" + key; + }; + _proto.getProgram = function getProgram(pass, defines, errPrefix) { + var key = pass._programKey = pass._programKey || this.getKey(pass._programName, defines); + var program = this._cache[key]; + if (program) return program; + var tmpl = this._templates[pass._programName]; + var customDef = _generateDefines(tmpl.defines, defines); + var vert = _replaceMacroNums(tmpl.vert, tmpl.defines, defines); + vert = customDef + _unrollLoops(vert); + this._highpSupported || (vert = _replaceHighp(vert)); + var frag = _replaceMacroNums(tmpl.frag, tmpl.defines, defines); + frag = customDef + _unrollLoops(frag); + this._highpSupported || (frag = _replaceHighp(frag)); + program = new _gfx["default"].Program(this._device, { + vert: vert, + frag: frag + }); + var errors = program.link(); + if (errors) { + var vertLines = vert.split("\n"); + var fragLines = frag.split("\n"); + var defineLength = tmpl.defines.length; + errors.forEach((function(err) { + var line = err.line - 1; + var originLine = err.line - defineLength; + var lines = "vs" === err.type ? vertLines : fragLines; + var source = lines[line]; + var info = err.info || "Failed to compile " + err.type + " " + err.fileID + " (ln " + originLine + "): \n " + err.message + ": \n " + source; + cc.error(errPrefix + " : " + info); + })); + } + this._cache[key] = program; + return program; + }; + _proto._checkPrecision = function _checkPrecision() { + var gl = this._device._gl; + var highpSupported = false; + if (gl.getShaderPrecisionFormat) { + var vertHighp = gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_FLOAT); + var fragHighp = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT); + highpSupported = vertHighp && vertHighp.precision > 0 && fragHighp && fragHighp.precision > 0; + } + highpSupported || cc.warnID(9102); + this._highpSupported = highpSupported; + }; + return ProgramLib; + })(); + exports["default"] = ProgramLib; + module.exports = exports["default"]; + }), { + "../gfx": 247 + } ], + 240: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + var Technique = (function() { + function Technique(name, passes) { + this._name = name; + this._passes = passes; + } + var _proto = Technique.prototype; + _proto.clone = function clone() { + var passes = []; + for (var i = 0; i < this._passes.length; i++) passes.push(this._passes[i].clone()); + return new Technique(this._name, passes); + }; + _createClass(Technique, [ { + key: "name", + get: function get() { + return this._name; + } + }, { + key: "passes", + get: function get() { + return this._passes; + } + } ]); + return Technique; + })(); + exports["default"] = Technique; + module.exports = exports["default"]; + }), {} ], + 241: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _valueTypes = require("../../core/value-types"); + var _enums = _interopRequireDefault(require("../enums")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var _m4_tmp = new _valueTypes.Mat4(); + var _genID = 0; + var View = (function() { + function View() { + this._id = _genID++; + this._priority = 0; + this._rect = { + x: 0, + y: 0, + w: 1, + h: 1 + }; + this._color = new _valueTypes.Vec4(.3, .3, .3, 1); + this._depth = 1; + this._stencil = 0; + this._clearFlags = _enums["default"].CLEAR_COLOR | _enums["default"].CLEAR_DEPTH; + this._clearModel = null; + this._matView = cc.mat4(); + this._matViewInv = cc.mat4(); + this._matProj = cc.mat4(); + this._matViewProj = cc.mat4(); + this._matInvViewProj = cc.mat4(); + this._stages = []; + this._cullingByID = false; + this._framebuffer = null; + this._shadowLight = null; + this._cullingMask = 4294967295; + } + var _proto = View.prototype; + _proto.getForward = function getForward(out) { + var m = this._matView.m; + return _valueTypes.Vec3.set(out, -m[2], -m[6], -m[10]); + }; + _proto.getPosition = function getPosition(out) { + _valueTypes.Mat4.invert(_m4_tmp, this._matView); + return _valueTypes.Mat4.getTranslation(out, _m4_tmp); + }; + return View; + })(); + exports["default"] = View; + module.exports = exports["default"]; + }), { + "../../core/value-types": 220, + "../enums": 242 + } ], + 242: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _mappings = require("./build/mappings"); + var _default = { + PROJ_PERSPECTIVE: 0, + PROJ_ORTHO: 1, + LIGHT_DIRECTIONAL: 0, + LIGHT_POINT: 1, + LIGHT_SPOT: 2, + LIGHT_AMBIENT: 3, + SHADOW_NONE: 0, + SHADOW_HARD: 1, + SHADOW_SOFT: 2, + PARAM_INT: _mappings.typeMap["int"], + PARAM_INT2: _mappings.typeMap.ivec2, + PARAM_INT3: _mappings.typeMap.ivec3, + PARAM_INT4: _mappings.typeMap.ivec4, + PARAM_FLOAT: _mappings.typeMap["float"], + PARAM_FLOAT2: _mappings.typeMap.vec2, + PARAM_FLOAT3: _mappings.typeMap.vec3, + PARAM_FLOAT4: _mappings.typeMap.vec4, + PARAM_MAT2: _mappings.typeMap.mat2, + PARAM_MAT3: _mappings.typeMap.mat3, + PARAM_MAT4: _mappings.typeMap.mat4, + PARAM_TEXTURE_2D: _mappings.typeMap.sampler2D, + PARAM_TEXTURE_CUBE: _mappings.typeMap.samplerCube, + CLEAR_COLOR: 1, + CLEAR_DEPTH: 2, + CLEAR_STENCIL: 4, + CLEAR_SKYBOX: 8, + BUFFER_VIEW_INT8: 0, + BUFFER_VIEW_UINT8: 1, + BUFFER_VIEW_INT16: 2, + BUFFER_VIEW_UINT16: 3, + BUFFER_VIEW_INT32: 4, + BUFFER_VIEW_UINT32: 5, + BUFFER_VIEW_FLOAT32: 6 + }; + exports["default"] = _default; + module.exports = exports["default"]; + }), { + "./build/mappings": 235 + } ], + 243: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _state = _interopRequireDefault(require("./state")); + var _enums = require("./enums"); + var _texture2d = _interopRequireDefault(require("./texture-2d")); + var _textureCube = _interopRequireDefault(require("./texture-cube")); + var _type2uniformCommit2, _type2uniformArrayCom; + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + var GL_INT = 5124; + var GL_FLOAT = 5126; + var GL_FLOAT_VEC2 = 35664; + var GL_FLOAT_VEC3 = 35665; + var GL_FLOAT_VEC4 = 35666; + var GL_INT_VEC2 = 35667; + var GL_INT_VEC3 = 35668; + var GL_INT_VEC4 = 35669; + var GL_BOOL = 35670; + var GL_BOOL_VEC2 = 35671; + var GL_BOOL_VEC3 = 35672; + var GL_BOOL_VEC4 = 35673; + var GL_FLOAT_MAT2 = 35674; + var GL_FLOAT_MAT3 = 35675; + var GL_FLOAT_MAT4 = 35676; + var GL_SAMPLER_2D = 35678; + var GL_SAMPLER_CUBE = 35680; + var _type2uniformCommit = (_type2uniformCommit2 = {}, _type2uniformCommit2[GL_INT] = function(gl, id, value) { + gl.uniform1i(id, value); + }, _type2uniformCommit2[GL_FLOAT] = function(gl, id, value) { + gl.uniform1f(id, value); + }, _type2uniformCommit2[GL_FLOAT_VEC2] = function(gl, id, value) { + gl.uniform2fv(id, value); + }, _type2uniformCommit2[GL_FLOAT_VEC3] = function(gl, id, value) { + gl.uniform3fv(id, value); + }, _type2uniformCommit2[GL_FLOAT_VEC4] = function(gl, id, value) { + gl.uniform4fv(id, value); + }, _type2uniformCommit2[GL_INT_VEC2] = function(gl, id, value) { + gl.uniform2iv(id, value); + }, _type2uniformCommit2[GL_INT_VEC3] = function(gl, id, value) { + gl.uniform3iv(id, value); + }, _type2uniformCommit2[GL_INT_VEC4] = function(gl, id, value) { + gl.uniform4iv(id, value); + }, _type2uniformCommit2[GL_BOOL] = function(gl, id, value) { + gl.uniform1i(id, value); + }, _type2uniformCommit2[GL_BOOL_VEC2] = function(gl, id, value) { + gl.uniform2iv(id, value); + }, _type2uniformCommit2[GL_BOOL_VEC3] = function(gl, id, value) { + gl.uniform3iv(id, value); + }, _type2uniformCommit2[GL_BOOL_VEC4] = function(gl, id, value) { + gl.uniform4iv(id, value); + }, _type2uniformCommit2[GL_FLOAT_MAT2] = function(gl, id, value) { + gl.uniformMatrix2fv(id, false, value); + }, _type2uniformCommit2[GL_FLOAT_MAT3] = function(gl, id, value) { + gl.uniformMatrix3fv(id, false, value); + }, _type2uniformCommit2[GL_FLOAT_MAT4] = function(gl, id, value) { + gl.uniformMatrix4fv(id, false, value); + }, _type2uniformCommit2[GL_SAMPLER_2D] = function(gl, id, value) { + gl.uniform1i(id, value); + }, _type2uniformCommit2[GL_SAMPLER_CUBE] = function(gl, id, value) { + gl.uniform1i(id, value); + }, _type2uniformCommit2); + var _type2uniformArrayCommit = (_type2uniformArrayCom = {}, _type2uniformArrayCom[GL_INT] = function(gl, id, value) { + gl.uniform1iv(id, value); + }, _type2uniformArrayCom[GL_FLOAT] = function(gl, id, value) { + gl.uniform1fv(id, value); + }, _type2uniformArrayCom[GL_FLOAT_VEC2] = function(gl, id, value) { + gl.uniform2fv(id, value); + }, _type2uniformArrayCom[GL_FLOAT_VEC3] = function(gl, id, value) { + gl.uniform3fv(id, value); + }, _type2uniformArrayCom[GL_FLOAT_VEC4] = function(gl, id, value) { + gl.uniform4fv(id, value); + }, _type2uniformArrayCom[GL_INT_VEC2] = function(gl, id, value) { + gl.uniform2iv(id, value); + }, _type2uniformArrayCom[GL_INT_VEC3] = function(gl, id, value) { + gl.uniform3iv(id, value); + }, _type2uniformArrayCom[GL_INT_VEC4] = function(gl, id, value) { + gl.uniform4iv(id, value); + }, _type2uniformArrayCom[GL_BOOL] = function(gl, id, value) { + gl.uniform1iv(id, value); + }, _type2uniformArrayCom[GL_BOOL_VEC2] = function(gl, id, value) { + gl.uniform2iv(id, value); + }, _type2uniformArrayCom[GL_BOOL_VEC3] = function(gl, id, value) { + gl.uniform3iv(id, value); + }, _type2uniformArrayCom[GL_BOOL_VEC4] = function(gl, id, value) { + gl.uniform4iv(id, value); + }, _type2uniformArrayCom[GL_FLOAT_MAT2] = function(gl, id, value) { + gl.uniformMatrix2fv(id, false, value); + }, _type2uniformArrayCom[GL_FLOAT_MAT3] = function(gl, id, value) { + gl.uniformMatrix3fv(id, false, value); + }, _type2uniformArrayCom[GL_FLOAT_MAT4] = function(gl, id, value) { + gl.uniformMatrix4fv(id, false, value); + }, _type2uniformArrayCom[GL_SAMPLER_2D] = function(gl, id, value) { + gl.uniform1iv(id, value); + }, _type2uniformArrayCom[GL_SAMPLER_CUBE] = function(gl, id, value) { + gl.uniform1iv(id, value); + }, _type2uniformArrayCom); + function _commitBlendStates(gl, cur, next) { + if (cur.blend !== next.blend) { + if (!next.blend) { + gl.disable(gl.BLEND); + return; + } + gl.enable(gl.BLEND); + next.blendSrc !== _enums.enums.BLEND_CONSTANT_COLOR && next.blendSrc !== _enums.enums.BLEND_ONE_MINUS_CONSTANT_COLOR && next.blendDst !== _enums.enums.BLEND_CONSTANT_COLOR && next.blendDst !== _enums.enums.BLEND_ONE_MINUS_CONSTANT_COLOR || gl.blendColor((next.blendColor >> 24) / 255, (next.blendColor >> 16 & 255) / 255, (next.blendColor >> 8 & 255) / 255, (255 & next.blendColor) / 255); + if (next.blendSep) { + gl.blendFuncSeparate(next.blendSrc, next.blendDst, next.blendSrcAlpha, next.blendDstAlpha); + gl.blendEquationSeparate(next.blendEq, next.blendAlphaEq); + } else { + gl.blendFunc(next.blendSrc, next.blendDst); + gl.blendEquation(next.blendEq); + } + return; + } + if (false === next.blend) return; + cur.blendColor !== next.blendColor && gl.blendColor((next.blendColor >> 24) / 255, (next.blendColor >> 16 & 255) / 255, (next.blendColor >> 8 & 255) / 255, (255 & next.blendColor) / 255); + if (cur.blendSep !== next.blendSep) { + if (next.blendSep) { + gl.blendFuncSeparate(next.blendSrc, next.blendDst, next.blendSrcAlpha, next.blendDstAlpha); + gl.blendEquationSeparate(next.blendEq, next.blendAlphaEq); + } else { + gl.blendFunc(next.blendSrc, next.blendDst); + gl.blendEquation(next.blendEq); + } + return; + } + if (next.blendSep) { + cur.blendSrc === next.blendSrc && cur.blendDst === next.blendDst && cur.blendSrcAlpha === next.blendSrcAlpha && cur.blendDstAlpha === next.blendDstAlpha || gl.blendFuncSeparate(next.blendSrc, next.blendDst, next.blendSrcAlpha, next.blendDstAlpha); + cur.blendEq === next.blendEq && cur.blendAlphaEq === next.blendAlphaEq || gl.blendEquationSeparate(next.blendEq, next.blendAlphaEq); + } else { + cur.blendSrc === next.blendSrc && cur.blendDst === next.blendDst || gl.blendFunc(next.blendSrc, next.blendDst); + cur.blendEq !== next.blendEq && gl.blendEquation(next.blendEq); + } + } + function _commitDepthStates(gl, cur, next) { + if (cur.depthTest !== next.depthTest) { + if (!next.depthTest) { + gl.disable(gl.DEPTH_TEST); + return; + } + gl.enable(gl.DEPTH_TEST); + gl.depthFunc(next.depthFunc); + gl.depthMask(next.depthWrite); + return; + } + cur.depthWrite !== next.depthWrite && gl.depthMask(next.depthWrite); + if (false === next.depthTest) { + if (next.depthWrite) { + next.depthTest = true; + next.depthFunc = _enums.enums.DS_FUNC_ALWAYS; + gl.enable(gl.DEPTH_TEST); + gl.depthFunc(next.depthFunc); + } + return; + } + cur.depthFunc !== next.depthFunc && gl.depthFunc(next.depthFunc); + } + function _commitStencilStates(gl, cur, next) { + if (next.stencilTest === _enums.enums.STENCIL_INHERIT) return; + if (next.stencilTest !== cur.stencilTest) { + if (next.stencilTest === _enums.enums.STENCIL_DISABLE) { + gl.disable(gl.STENCIL_TEST); + return; + } + gl.enable(gl.STENCIL_TEST); + if (next.stencilSep) { + gl.stencilFuncSeparate(gl.FRONT, next.stencilFuncFront, next.stencilRefFront, next.stencilMaskFront); + gl.stencilMaskSeparate(gl.FRONT, next.stencilWriteMaskFront); + gl.stencilOpSeparate(gl.FRONT, next.stencilFailOpFront, next.stencilZFailOpFront, next.stencilZPassOpFront); + gl.stencilFuncSeparate(gl.BACK, next.stencilFuncBack, next.stencilRefBack, next.stencilMaskBack); + gl.stencilMaskSeparate(gl.BACK, next.stencilWriteMaskBack); + gl.stencilOpSeparate(gl.BACK, next.stencilFailOpBack, next.stencilZFailOpBack, next.stencilZPassOpBack); + } else { + gl.stencilFunc(next.stencilFuncFront, next.stencilRefFront, next.stencilMaskFront); + gl.stencilMask(next.stencilWriteMaskFront); + gl.stencilOp(next.stencilFailOpFront, next.stencilZFailOpFront, next.stencilZPassOpFront); + } + return; + } + if (next.stencilTest === _enums.enums.STENCIL_DISABLE) return; + if (cur.stencilSep !== next.stencilSep) { + if (next.stencilSep) { + gl.stencilFuncSeparate(gl.FRONT, next.stencilFuncFront, next.stencilRefFront, next.stencilMaskFront); + gl.stencilMaskSeparate(gl.FRONT, next.stencilWriteMaskFront); + gl.stencilOpSeparate(gl.FRONT, next.stencilFailOpFront, next.stencilZFailOpFront, next.stencilZPassOpFront); + gl.stencilFuncSeparate(gl.BACK, next.stencilFuncBack, next.stencilRefBack, next.stencilMaskBack); + gl.stencilMaskSeparate(gl.BACK, next.stencilWriteMaskBack); + gl.stencilOpSeparate(gl.BACK, next.stencilFailOpBack, next.stencilZFailOpBack, next.stencilZPassOpBack); + } else { + gl.stencilFunc(next.stencilFuncFront, next.stencilRefFront, next.stencilMaskFront); + gl.stencilMask(next.stencilWriteMaskFront); + gl.stencilOp(next.stencilFailOpFront, next.stencilZFailOpFront, next.stencilZPassOpFront); + } + return; + } + if (next.stencilSep) { + cur.stencilFuncFront === next.stencilFuncFront && cur.stencilRefFront === next.stencilRefFront && cur.stencilMaskFront === next.stencilMaskFront || gl.stencilFuncSeparate(gl.FRONT, next.stencilFuncFront, next.stencilRefFront, next.stencilMaskFront); + cur.stencilWriteMaskFront !== next.stencilWriteMaskFront && gl.stencilMaskSeparate(gl.FRONT, next.stencilWriteMaskFront); + cur.stencilFailOpFront === next.stencilFailOpFront && cur.stencilZFailOpFront === next.stencilZFailOpFront && cur.stencilZPassOpFront === next.stencilZPassOpFront || gl.stencilOpSeparate(gl.FRONT, next.stencilFailOpFront, next.stencilZFailOpFront, next.stencilZPassOpFront); + cur.stencilFuncBack === next.stencilFuncBack && cur.stencilRefBack === next.stencilRefBack && cur.stencilMaskBack === next.stencilMaskBack || gl.stencilFuncSeparate(gl.BACK, next.stencilFuncBack, next.stencilRefBack, next.stencilMaskBack); + cur.stencilWriteMaskBack !== next.stencilWriteMaskBack && gl.stencilMaskSeparate(gl.BACK, next.stencilWriteMaskBack); + cur.stencilFailOpBack === next.stencilFailOpBack && cur.stencilZFailOpBack === next.stencilZFailOpBack && cur.stencilZPassOpBack === next.stencilZPassOpBack || gl.stencilOpSeparate(gl.BACK, next.stencilFailOpBack, next.stencilZFailOpBack, next.stencilZPassOpBack); + } else { + cur.stencilFuncFront === next.stencilFuncFront && cur.stencilRefFront === next.stencilRefFront && cur.stencilMaskFront === next.stencilMaskFront || gl.stencilFunc(next.stencilFuncFront, next.stencilRefFront, next.stencilMaskFront); + cur.stencilWriteMaskFront !== next.stencilWriteMaskFront && gl.stencilMask(next.stencilWriteMaskFront); + cur.stencilFailOpFront === next.stencilFailOpFront && cur.stencilZFailOpFront === next.stencilZFailOpFront && cur.stencilZPassOpFront === next.stencilZPassOpFront || gl.stencilOp(next.stencilFailOpFront, next.stencilZFailOpFront, next.stencilZPassOpFront); + } + } + function _commitCullMode(gl, cur, next) { + if (cur.cullMode === next.cullMode) return; + if (next.cullMode === _enums.enums.CULL_NONE) { + gl.disable(gl.CULL_FACE); + return; + } + gl.enable(gl.CULL_FACE); + gl.cullFace(next.cullMode); + } + function _commitVertexBuffers(device, gl, cur, next) { + var attrsDirty = false; + if (-1 === next.maxStream) return; + if (cur.maxStream !== next.maxStream) attrsDirty = true; else if (cur.program !== next.program) attrsDirty = true; else for (var i = 0; i < next.maxStream + 1; ++i) if (cur.vertexBuffers[i] !== next.vertexBuffers[i] || cur.vertexBufferOffsets[i] !== next.vertexBufferOffsets[i]) { + attrsDirty = true; + break; + } + if (attrsDirty) { + for (var _i = 0; _i < device._caps.maxVertexAttribs; ++_i) device._newAttributes[_i] = 0; + for (var _i2 = 0; _i2 < next.maxStream + 1; ++_i2) { + var vb = next.vertexBuffers[_i2]; + var vbOffset = next.vertexBufferOffsets[_i2]; + if (!vb || -1 === vb._glID) continue; + gl.bindBuffer(gl.ARRAY_BUFFER, vb._glID); + for (var j = 0; j < next.program._attributes.length; ++j) { + var attr = next.program._attributes[j]; + var el = vb._format.element(attr.name); + if (!el) { + console.warn("Can not find vertex attribute: " + attr.name); + continue; + } + if (0 === device._enabledAttributes[attr.location]) { + gl.enableVertexAttribArray(attr.location); + device._enabledAttributes[attr.location] = 1; + } + device._newAttributes[attr.location] = 1; + gl.vertexAttribPointer(attr.location, el.num, el.type, el.normalize, el.stride, el.offset + vbOffset * el.stride); + } + } + for (var _i3 = 0; _i3 < device._caps.maxVertexAttribs; ++_i3) if (device._enabledAttributes[_i3] !== device._newAttributes[_i3]) { + gl.disableVertexAttribArray(_i3); + device._enabledAttributes[_i3] = 0; + } + } + } + function _commitTextures(gl, cur, next) { + for (var i = 0; i < next.maxTextureSlot + 1; ++i) if (cur.textureUnits[i] !== next.textureUnits[i]) { + var texture = next.textureUnits[i]; + if (texture && -1 !== texture._glID) { + gl.activeTexture(gl.TEXTURE0 + i); + gl.bindTexture(texture._target, texture._glID); + } + } + } + function _attach(gl, location, attachment, face) { + void 0 === face && (face = 0); + attachment instanceof _texture2d["default"] ? gl.framebufferTexture2D(gl.FRAMEBUFFER, location, gl.TEXTURE_2D, attachment._glID, 0) : attachment instanceof _textureCube["default"] ? gl.framebufferTexture2D(gl.FRAMEBUFFER, location, gl.TEXTURE_CUBE_MAP_POSITIVE_X + face, attachment._glID, 0) : gl.framebufferRenderbuffer(gl.FRAMEBUFFER, location, gl.RENDERBUFFER, attachment._glID); + } + var Device = (function() { + function Device(canvasEL, opts) { + var gl; + opts = opts || {}; + void 0 === opts.alpha && (opts.alpha = false); + void 0 === opts.stencil && (opts.stencil = true); + void 0 === opts.depth && (opts.depth = true); + void 0 === opts.antialias && (opts.antialias = false); + void 0 === opts.preserveDrawingBuffer && (opts.preserveDrawingBuffer = false); + try { + gl = canvasEL.getContext("webgl", opts) || canvasEL.getContext("experimental-webgl", opts) || canvasEL.getContext("webkit-3d", opts) || canvasEL.getContext("moz-webgl", opts); + } catch (err) { + console.error(err); + return; + } + gl || console.error("This device does not support webgl"); + this._gl = gl; + this._extensions = {}; + this._caps = {}; + this._stats = { + texture: 0, + vb: 0, + ib: 0, + drawcalls: 0 + }; + this._initExtensions([ "EXT_texture_filter_anisotropic", "EXT_shader_texture_lod", "OES_standard_derivatives", "OES_texture_float", "OES_texture_float_linear", "OES_texture_half_float", "OES_texture_half_float_linear", "OES_vertex_array_object", "WEBGL_compressed_texture_atc", "WEBGL_compressed_texture_etc", "WEBGL_compressed_texture_etc1", "WEBGL_compressed_texture_pvrtc", "WEBGL_compressed_texture_s3tc", "WEBGL_depth_texture", "WEBGL_draw_buffers" ]); + this._initCaps(); + this._initStates(); + _state["default"].initDefault(this); + this._current = new _state["default"](this); + this._next = new _state["default"](this); + this._uniforms = {}; + this._vx = this._vy = this._vw = this._vh = 0; + this._sx = this._sy = this._sw = this._sh = 0; + this._framebuffer = null; + this._enabledAttributes = new Array(this._caps.maxVertexAttribs); + this._newAttributes = new Array(this._caps.maxVertexAttribs); + for (var i = 0; i < this._caps.maxVertexAttribs; ++i) { + this._enabledAttributes[i] = 0; + this._newAttributes[i] = 0; + } + } + var _proto = Device.prototype; + _proto._initExtensions = function _initExtensions(extensions) { + var gl = this._gl; + for (var i = 0; i < extensions.length; ++i) { + var name = extensions[i]; + var vendorPrefixes = [ "", "WEBKIT_", "MOZ_" ]; + for (var j = 0; j < vendorPrefixes.length; j++) try { + var ext = gl.getExtension(vendorPrefixes[j] + name); + if (ext) { + this._extensions[name] = ext; + break; + } + } catch (e) { + console.error(e); + } + } + }; + _proto._initCaps = function _initCaps() { + var gl = this._gl; + var extDrawBuffers = this.ext("WEBGL_draw_buffers"); + this._caps.maxVertexStreams = 4; + this._caps.maxVertexTextures = gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS); + this._caps.maxFragUniforms = gl.getParameter(gl.MAX_FRAGMENT_UNIFORM_VECTORS); + this._caps.maxTextureUnits = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS); + this._caps.maxVertexAttribs = gl.getParameter(gl.MAX_VERTEX_ATTRIBS); + this._caps.maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE); + this._caps.maxDrawBuffers = extDrawBuffers ? gl.getParameter(extDrawBuffers.MAX_DRAW_BUFFERS_WEBGL) : 1; + this._caps.maxColorAttachments = extDrawBuffers ? gl.getParameter(extDrawBuffers.MAX_COLOR_ATTACHMENTS_WEBGL) : 1; + }; + _proto._initStates = function _initStates() { + var gl = this._gl; + gl.disable(gl.BLEND); + gl.blendFunc(gl.ONE, gl.ZERO); + gl.blendEquation(gl.FUNC_ADD); + gl.blendColor(1, 1, 1, 1); + gl.colorMask(true, true, true, true); + gl.enable(gl.CULL_FACE); + gl.cullFace(gl.BACK); + gl.disable(gl.DEPTH_TEST); + gl.depthFunc(gl.LESS); + gl.depthMask(false); + gl.disable(gl.POLYGON_OFFSET_FILL); + gl.depthRange(0, 1); + gl.disable(gl.STENCIL_TEST); + gl.stencilFunc(gl.ALWAYS, 0, 255); + gl.stencilMask(255); + gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP); + gl.clearDepth(1); + gl.clearColor(0, 0, 0, 0); + gl.clearStencil(0); + gl.disable(gl.SCISSOR_TEST); + }; + _proto._restoreTexture = function _restoreTexture(unit) { + var gl = this._gl; + var texture = this._current.textureUnits[unit]; + texture && -1 !== texture._glID ? gl.bindTexture(texture._target, texture._glID) : gl.bindTexture(gl.TEXTURE_2D, null); + }; + _proto._restoreIndexBuffer = function _restoreIndexBuffer() { + var gl = this._gl; + var ib = this._current.indexBuffer; + ib && -1 !== ib._glID ? gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ib._glID) : gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null); + }; + _proto.ext = function ext(name) { + return this._extensions[name]; + }; + _proto.allowFloatTexture = function allowFloatTexture() { + return null != this.ext("OES_texture_float"); + }; + _proto.setFrameBuffer = function setFrameBuffer(fb) { + if (this._framebuffer === fb) return; + this._framebuffer = fb; + var gl = this._gl; + if (!fb) { + gl.bindFramebuffer(gl.FRAMEBUFFER, null); + return; + } + gl.bindFramebuffer(gl.FRAMEBUFFER, fb._glID); + var numColors = fb._colors.length; + for (var i = 0; i < numColors; ++i) { + var colorBuffer = fb._colors[i]; + _attach(gl, gl.COLOR_ATTACHMENT0 + i, colorBuffer); + } + for (var _i4 = numColors; _i4 < this._caps.maxColorAttachments; ++_i4) gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0 + _i4, gl.TEXTURE_2D, null, 0); + fb._depth && _attach(gl, gl.DEPTH_ATTACHMENT, fb._depth); + fb._stencil && _attach(gl, gl.STENCIL_ATTACHMENT, fb._stencil); + fb._depthStencil && _attach(gl, gl.DEPTH_STENCIL_ATTACHMENT, fb._depthStencil); + }; + _proto.setViewport = function setViewport(x, y, w, h) { + if (this._vx !== x || this._vy !== y || this._vw !== w || this._vh !== h) { + this._gl.viewport(x, y, w, h); + this._vx = x; + this._vy = y; + this._vw = w; + this._vh = h; + } + }; + _proto.setScissor = function setScissor(x, y, w, h) { + if (this._sx !== x || this._sy !== y || this._sw !== w || this._sh !== h) { + this._gl.scissor(x, y, w, h); + this._sx = x; + this._sy = y; + this._sw = w; + this._sh = h; + } + }; + _proto.clear = function clear(opts) { + if (void 0 === opts.color && void 0 === opts.depth && void 0 === opts.stencil) return; + var gl = this._gl; + var flags = 0; + if (void 0 !== opts.color) { + flags |= gl.COLOR_BUFFER_BIT; + gl.clearColor(opts.color[0], opts.color[1], opts.color[2], opts.color[3]); + } + if (void 0 !== opts.depth) { + flags |= gl.DEPTH_BUFFER_BIT; + gl.clearDepth(opts.depth); + gl.enable(gl.DEPTH_TEST); + gl.depthMask(true); + gl.depthFunc(gl.ALWAYS); + } + if (void 0 !== opts.stencil) { + flags |= gl.STENCIL_BUFFER_BIT; + gl.clearStencil(opts.stencil); + } + gl.clear(flags); + if (void 0 !== opts.depth) if (false === this._current.depthTest) gl.disable(gl.DEPTH_TEST); else { + false === this._current.depthWrite && gl.depthMask(false); + this._current.depthFunc !== _enums.enums.DS_FUNC_ALWAYS && gl.depthFunc(this._current.depthFunc); + } + }; + _proto.enableBlend = function enableBlend() { + this._next.blend = true; + }; + _proto.enableDepthTest = function enableDepthTest() { + this._next.depthTest = true; + }; + _proto.enableDepthWrite = function enableDepthWrite() { + this._next.depthWrite = true; + }; + _proto.setStencilTest = function setStencilTest(stencilTest) { + this._next.stencilTest = stencilTest; + }; + _proto.setStencilFunc = function setStencilFunc(func, ref, mask) { + this._next.stencilSep = false; + this._next.stencilFuncFront = this._next.stencilFuncBack = func; + this._next.stencilRefFront = this._next.stencilRefBack = ref; + this._next.stencilMaskFront = this._next.stencilMaskBack = mask; + }; + _proto.setStencilFuncFront = function setStencilFuncFront(func, ref, mask) { + this._next.stencilSep = true; + this._next.stencilFuncFront = func; + this._next.stencilRefFront = ref; + this._next.stencilMaskFront = mask; + }; + _proto.setStencilFuncBack = function setStencilFuncBack(func, ref, mask) { + this._next.stencilSep = true; + this._next.stencilFuncBack = func; + this._next.stencilRefBack = ref; + this._next.stencilMaskBack = mask; + }; + _proto.setStencilOp = function setStencilOp(failOp, zFailOp, zPassOp, writeMask) { + this._next.stencilFailOpFront = this._next.stencilFailOpBack = failOp; + this._next.stencilZFailOpFront = this._next.stencilZFailOpBack = zFailOp; + this._next.stencilZPassOpFront = this._next.stencilZPassOpBack = zPassOp; + this._next.stencilWriteMaskFront = this._next.stencilWriteMaskBack = writeMask; + }; + _proto.setStencilOpFront = function setStencilOpFront(failOp, zFailOp, zPassOp, writeMask) { + this._next.stencilSep = true; + this._next.stencilFailOpFront = failOp; + this._next.stencilZFailOpFront = zFailOp; + this._next.stencilZPassOpFront = zPassOp; + this._next.stencilWriteMaskFront = writeMask; + }; + _proto.setStencilOpBack = function setStencilOpBack(failOp, zFailOp, zPassOp, writeMask) { + this._next.stencilSep = true; + this._next.stencilFailOpBack = failOp; + this._next.stencilZFailOpBack = zFailOp; + this._next.stencilZPassOpBack = zPassOp; + this._next.stencilWriteMaskBack = writeMask; + }; + _proto.setDepthFunc = function setDepthFunc(depthFunc) { + this._next.depthFunc = depthFunc; + }; + _proto.setBlendColor32 = function setBlendColor32(rgba) { + this._next.blendColor = rgba; + }; + _proto.setBlendColor = function setBlendColor(r, g, b, a) { + this._next.blendColor = (255 * r << 24 | 255 * g << 16 | 255 * b << 8 | 255 * a) >>> 0; + }; + _proto.setBlendFunc = function setBlendFunc(src, dst) { + this._next.blendSep = false; + this._next.blendSrc = src; + this._next.blendDst = dst; + }; + _proto.setBlendFuncSep = function setBlendFuncSep(src, dst, srcAlpha, dstAlpha) { + this._next.blendSep = true; + this._next.blendSrc = src; + this._next.blendDst = dst; + this._next.blendSrcAlpha = srcAlpha; + this._next.blendDstAlpha = dstAlpha; + }; + _proto.setBlendEq = function setBlendEq(eq) { + this._next.blendSep = false; + this._next.blendEq = eq; + }; + _proto.setBlendEqSep = function setBlendEqSep(eq, alphaEq) { + this._next.blendSep = true; + this._next.blendEq = eq; + this._next.blendAlphaEq = alphaEq; + }; + _proto.setCullMode = function setCullMode(mode) { + this._next.cullMode = mode; + }; + _proto.setVertexBuffer = function setVertexBuffer(stream, buffer, start) { + void 0 === start && (start = 0); + this._next.vertexBuffers[stream] = buffer; + this._next.vertexBufferOffsets[stream] = start; + this._next.maxStream < stream && (this._next.maxStream = stream); + }; + _proto.setIndexBuffer = function setIndexBuffer(buffer) { + this._next.indexBuffer = buffer; + }; + _proto.setProgram = function setProgram(program) { + this._next.program = program; + }; + _proto.setTexture = function setTexture(name, texture, slot) { + if (slot >= this._caps.maxTextureUnits) { + console.warn("Can not set texture " + name + " at stage " + slot + ", max texture exceed: " + this._caps.maxTextureUnits); + return; + } + this._next.textureUnits[slot] = texture; + this.setUniform(name, slot); + this._next.maxTextureSlot < slot && (this._next.maxTextureSlot = slot); + }; + _proto.setTextureArray = function setTextureArray(name, textures, slots) { + var len = textures.length; + if (len >= this._caps.maxTextureUnits) { + console.warn("Can not set " + len + " textures for " + name + ", max texture exceed: " + this._caps.maxTextureUnits); + return; + } + for (var i = 0; i < len; ++i) { + var slot = slots[i]; + this._next.textureUnits[slot] = textures[i]; + this._next.maxTextureSlot < slot && (this._next.maxTextureSlot = slot); + } + this.setUniform(name, slots); + }; + _proto.setUniform = function setUniform(name, value) { + var uniform = this._uniforms[name]; + var sameType = false; + var isArray = false, isFloat32Array = false, isInt32Array = false; + do { + if (!uniform) break; + isFloat32Array = Array.isArray(value) || value instanceof Float32Array; + isInt32Array = value instanceof Int32Array; + isArray = isFloat32Array || isInt32Array; + if (uniform.isArray !== isArray) break; + if (uniform.isArray && uniform.value.length !== value.length) break; + sameType = true; + } while (false); + if (sameType) { + var oldValue = uniform.value; + var dirty = false; + if (uniform.isArray) { + for (var i = 0, l = oldValue.length; i < l; i++) if (oldValue[i] !== value[i]) { + dirty = true; + oldValue[i] = value[i]; + } + } else if (oldValue !== value) { + dirty = true; + uniform.value = value; + } + dirty && (uniform.dirty = true); + } else { + var newValue = value; + isFloat32Array ? newValue = new Float32Array(value) : isInt32Array && (newValue = new Int32Array(value)); + uniform = { + dirty: true, + value: newValue, + isArray: isArray + }; + } + this._uniforms[name] = uniform; + }; + _proto.setUniformDirectly = function setUniformDirectly(name, value) { + var uniform = this._uniforms[name]; + uniform || (this._uniforms[name] = uniform = {}); + uniform.dirty = true; + uniform.value = value; + }; + _proto.setPrimitiveType = function setPrimitiveType(type) { + this._next.primitiveType = type; + }; + _proto.resetDrawCalls = function resetDrawCalls() { + this._stats.drawcalls = 0; + }; + _proto.getDrawCalls = function getDrawCalls() { + return this._stats.drawcalls; + }; + _proto.draw = function draw(base, count) { + var gl = this._gl; + var cur = this._current; + var next = this._next; + _commitBlendStates(gl, cur, next); + _commitDepthStates(gl, cur, next); + _commitStencilStates(gl, cur, next); + _commitCullMode(gl, cur, next); + _commitVertexBuffers(this, gl, cur, next); + cur.indexBuffer !== next.indexBuffer && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, next.indexBuffer && -1 !== next.indexBuffer._glID ? next.indexBuffer._glID : null); + var programDirty = false; + if (cur.program !== next.program) { + next.program._linked ? gl.useProgram(next.program._glID) : console.warn("Failed to use program: has not linked yet."); + programDirty = true; + } + _commitTextures(gl, cur, next); + for (var i = 0; i < next.program._uniforms.length; ++i) { + var uniformInfo = next.program._uniforms[i]; + var uniform = this._uniforms[uniformInfo.name]; + if (!uniform) continue; + if (!programDirty && !uniform.dirty) continue; + uniform.dirty = false; + var commitFunc = void 0 === uniformInfo.size ? _type2uniformCommit[uniformInfo.type] : _type2uniformArrayCommit[uniformInfo.type]; + if (!commitFunc) { + console.warn("Can not find commit function for uniform " + uniformInfo.name); + continue; + } + commitFunc(gl, uniformInfo.location, uniform.value); + } + if (count) { + next.indexBuffer ? gl.drawElements(this._next.primitiveType, count, next.indexBuffer._format, base * next.indexBuffer._bytesPerIndex) : gl.drawArrays(this._next.primitiveType, base, count); + this._stats.drawcalls++; + } + cur.set(next); + next.reset(); + }; + _createClass(Device, [ { + key: "caps", + get: function get() { + return this._caps; + } + } ]); + return Device; + })(); + exports["default"] = Device; + module.exports = exports["default"]; + }), { + "./enums": 244, + "./state": 251, + "./texture-2d": 252, + "./texture-cube": 253 + } ], + 244: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.attrTypeBytes = attrTypeBytes; + exports.enums = void 0; + exports.glFilter = glFilter; + exports.glTextureFmt = glTextureFmt; + var GL_NEAREST = 9728; + var GL_LINEAR = 9729; + var GL_NEAREST_MIPMAP_NEAREST = 9984; + var GL_LINEAR_MIPMAP_NEAREST = 9985; + var GL_NEAREST_MIPMAP_LINEAR = 9986; + var GL_LINEAR_MIPMAP_LINEAR = 9987; + var GL_UNSIGNED_BYTE = 5121; + var GL_UNSIGNED_SHORT = 5123; + var GL_UNSIGNED_INT = 5125; + var GL_FLOAT = 5126; + var GL_UNSIGNED_SHORT_5_6_5 = 33635; + var GL_UNSIGNED_SHORT_4_4_4_4 = 32819; + var GL_UNSIGNED_SHORT_5_5_5_1 = 32820; + var GL_HALF_FLOAT_OES = 36193; + var GL_DEPTH_COMPONENT = 6402; + var GL_ALPHA = 6406; + var GL_RGB = 6407; + var GL_RGBA = 6408; + var GL_LUMINANCE = 6409; + var GL_LUMINANCE_ALPHA = 6410; + var GL_COMPRESSED_RGB_S3TC_DXT1_EXT = 33776; + var GL_COMPRESSED_RGBA_S3TC_DXT1_EXT = 33777; + var GL_COMPRESSED_RGBA_S3TC_DXT3_EXT = 33778; + var GL_COMPRESSED_RGBA_S3TC_DXT5_EXT = 33779; + var GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG = 35840; + var GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG = 35841; + var GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG = 35842; + var GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG = 35843; + var GL_COMPRESSED_RGB_ETC1_WEBGL = 36196; + var GL_COMPRESSED_RGB8_ETC2 = 37492; + var GL_COMPRESSED_RGBA8_ETC2_EAC = 37496; + var _filterGL = [ [ GL_NEAREST, GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST_MIPMAP_LINEAR ], [ GL_LINEAR, GL_LINEAR_MIPMAP_NEAREST, GL_LINEAR_MIPMAP_LINEAR ] ]; + var _textureFmtGL = [ { + format: GL_RGB, + internalFormat: GL_COMPRESSED_RGB_S3TC_DXT1_EXT, + pixelType: null + }, { + format: GL_RGBA, + internalFormat: GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, + pixelType: null + }, { + format: GL_RGBA, + internalFormat: GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, + pixelType: null + }, { + format: GL_RGBA, + internalFormat: GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, + pixelType: null + }, { + format: GL_RGB, + internalFormat: GL_COMPRESSED_RGB_ETC1_WEBGL, + pixelType: null + }, { + format: GL_RGB, + internalFormat: GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG, + pixelType: null + }, { + format: GL_RGBA, + internalFormat: GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG, + pixelType: null + }, { + format: GL_RGB, + internalFormat: GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG, + pixelType: null + }, { + format: GL_RGBA, + internalFormat: GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG, + pixelType: null + }, { + format: GL_ALPHA, + internalFormat: GL_ALPHA, + pixelType: GL_UNSIGNED_BYTE + }, { + format: GL_LUMINANCE, + internalFormat: GL_LUMINANCE, + pixelType: GL_UNSIGNED_BYTE + }, { + format: GL_LUMINANCE_ALPHA, + internalFormat: GL_LUMINANCE_ALPHA, + pixelType: GL_UNSIGNED_BYTE + }, { + format: GL_RGB, + internalFormat: GL_RGB, + pixelType: GL_UNSIGNED_SHORT_5_6_5 + }, { + format: GL_RGBA, + internalFormat: GL_RGBA, + pixelType: GL_UNSIGNED_SHORT_5_5_5_1 + }, { + format: GL_RGBA, + internalFormat: GL_RGBA, + pixelType: GL_UNSIGNED_SHORT_4_4_4_4 + }, { + format: GL_RGB, + internalFormat: GL_RGB, + pixelType: GL_UNSIGNED_BYTE + }, { + format: GL_RGBA, + internalFormat: GL_RGBA, + pixelType: GL_UNSIGNED_BYTE + }, { + format: GL_RGB, + internalFormat: GL_RGB, + pixelType: GL_HALF_FLOAT_OES + }, { + format: GL_RGBA, + internalFormat: GL_RGBA, + pixelType: GL_HALF_FLOAT_OES + }, { + format: GL_RGB, + internalFormat: GL_RGB, + pixelType: GL_FLOAT + }, { + format: GL_RGBA, + internalFormat: GL_RGBA, + pixelType: GL_FLOAT + }, { + format: null, + internalFormat: null, + pixelType: null + }, { + format: null, + internalFormat: null, + pixelType: null + }, { + format: null, + internalFormat: null, + pixelType: null + }, { + format: null, + internalFormat: null, + pixelType: null + }, { + format: GL_DEPTH_COMPONENT, + internalFormat: GL_DEPTH_COMPONENT, + pixelType: GL_UNSIGNED_SHORT + }, { + format: GL_DEPTH_COMPONENT, + internalFormat: GL_DEPTH_COMPONENT, + pixelType: GL_UNSIGNED_INT + }, { + format: GL_DEPTH_COMPONENT, + internalFormat: GL_DEPTH_COMPONENT, + pixelType: GL_UNSIGNED_INT + }, { + format: GL_RGB, + internalFormat: GL_COMPRESSED_RGB8_ETC2, + pixelType: null + }, { + format: GL_RGBA, + internalFormat: GL_COMPRESSED_RGBA8_ETC2_EAC, + pixelType: null + } ]; + var enums = { + USAGE_STATIC: 35044, + USAGE_DYNAMIC: 35048, + USAGE_STREAM: 35040, + INDEX_FMT_UINT8: 5121, + INDEX_FMT_UINT16: 5123, + INDEX_FMT_UINT32: 5125, + ATTR_POSITION: "a_position", + ATTR_NORMAL: "a_normal", + ATTR_TANGENT: "a_tangent", + ATTR_BITANGENT: "a_bitangent", + ATTR_WEIGHTS: "a_weights", + ATTR_JOINTS: "a_joints", + ATTR_COLOR: "a_color", + ATTR_COLOR0: "a_color0", + ATTR_COLOR1: "a_color1", + ATTR_UV: "a_uv", + ATTR_UV0: "a_uv0", + ATTR_UV1: "a_uv1", + ATTR_UV2: "a_uv2", + ATTR_UV3: "a_uv3", + ATTR_UV4: "a_uv4", + ATTR_UV5: "a_uv5", + ATTR_UV6: "a_uv6", + ATTR_UV7: "a_uv7", + ATTR_TEX_COORD: "a_texCoord", + ATTR_TEX_COORD1: "a_texCoord1", + ATTR_TEX_COORD2: "a_texCoord2", + ATTR_TEX_COORD3: "a_texCoord3", + ATTR_TEX_COORD4: "a_texCoord4", + ATTR_TEX_COORD5: "a_texCoord5", + ATTR_TEX_COORD6: "a_texCoord6", + ATTR_TEX_COORD7: "a_texCoord7", + ATTR_TEX_COORD8: "a_texCoord8", + ATTR_TEX_ID: "a_texId", + ATTR_TYPE_INT8: 5120, + ATTR_TYPE_UINT8: 5121, + ATTR_TYPE_INT16: 5122, + ATTR_TYPE_UINT16: 5123, + ATTR_TYPE_INT32: 5124, + ATTR_TYPE_UINT32: 5125, + ATTR_TYPE_FLOAT32: 5126, + FILTER_NEAREST: 0, + FILTER_LINEAR: 1, + WRAP_REPEAT: 10497, + WRAP_CLAMP: 33071, + WRAP_MIRROR: 33648, + TEXTURE_FMT_RGB_DXT1: 0, + TEXTURE_FMT_RGBA_DXT1: 1, + TEXTURE_FMT_RGBA_DXT3: 2, + TEXTURE_FMT_RGBA_DXT5: 3, + TEXTURE_FMT_RGB_ETC1: 4, + TEXTURE_FMT_RGB_PVRTC_2BPPV1: 5, + TEXTURE_FMT_RGBA_PVRTC_2BPPV1: 6, + TEXTURE_FMT_RGB_PVRTC_4BPPV1: 7, + TEXTURE_FMT_RGBA_PVRTC_4BPPV1: 8, + TEXTURE_FMT_A8: 9, + TEXTURE_FMT_L8: 10, + TEXTURE_FMT_L8_A8: 11, + TEXTURE_FMT_R5_G6_B5: 12, + TEXTURE_FMT_R5_G5_B5_A1: 13, + TEXTURE_FMT_R4_G4_B4_A4: 14, + TEXTURE_FMT_RGB8: 15, + TEXTURE_FMT_RGBA8: 16, + TEXTURE_FMT_RGB16F: 17, + TEXTURE_FMT_RGBA16F: 18, + TEXTURE_FMT_RGB32F: 19, + TEXTURE_FMT_RGBA32F: 20, + TEXTURE_FMT_R32F: 21, + TEXTURE_FMT_111110F: 22, + TEXTURE_FMT_SRGB: 23, + TEXTURE_FMT_SRGBA: 24, + TEXTURE_FMT_D16: 25, + TEXTURE_FMT_D32: 26, + TEXTURE_FMT_D24S8: 27, + TEXTURE_FMT_RGB_ETC2: 28, + TEXTURE_FMT_RGBA_ETC2: 29, + DS_FUNC_NEVER: 512, + DS_FUNC_LESS: 513, + DS_FUNC_EQUAL: 514, + DS_FUNC_LEQUAL: 515, + DS_FUNC_GREATER: 516, + DS_FUNC_NOTEQUAL: 517, + DS_FUNC_GEQUAL: 518, + DS_FUNC_ALWAYS: 519, + RB_FMT_RGBA4: 32854, + RB_FMT_RGB5_A1: 32855, + RB_FMT_RGB565: 36194, + RB_FMT_D16: 33189, + RB_FMT_S8: 36168, + RB_FMT_D24S8: 34041, + BLEND_FUNC_ADD: 32774, + BLEND_FUNC_SUBTRACT: 32778, + BLEND_FUNC_REVERSE_SUBTRACT: 32779, + BLEND_ZERO: 0, + BLEND_ONE: 1, + BLEND_SRC_COLOR: 768, + BLEND_ONE_MINUS_SRC_COLOR: 769, + BLEND_DST_COLOR: 774, + BLEND_ONE_MINUS_DST_COLOR: 775, + BLEND_SRC_ALPHA: 770, + BLEND_ONE_MINUS_SRC_ALPHA: 771, + BLEND_DST_ALPHA: 772, + BLEND_ONE_MINUS_DST_ALPHA: 773, + BLEND_CONSTANT_COLOR: 32769, + BLEND_ONE_MINUS_CONSTANT_COLOR: 32770, + BLEND_CONSTANT_ALPHA: 32771, + BLEND_ONE_MINUS_CONSTANT_ALPHA: 32772, + BLEND_SRC_ALPHA_SATURATE: 776, + STENCIL_DISABLE: 0, + STENCIL_ENABLE: 1, + STENCIL_INHERIT: 2, + STENCIL_OP_KEEP: 7680, + STENCIL_OP_ZERO: 0, + STENCIL_OP_REPLACE: 7681, + STENCIL_OP_INCR: 7682, + STENCIL_OP_INCR_WRAP: 34055, + STENCIL_OP_DECR: 7683, + STENCIL_OP_DECR_WRAP: 34056, + STENCIL_OP_INVERT: 5386, + CULL_NONE: 0, + CULL_FRONT: 1028, + CULL_BACK: 1029, + CULL_FRONT_AND_BACK: 1032, + PT_POINTS: 0, + PT_LINES: 1, + PT_LINE_LOOP: 2, + PT_LINE_STRIP: 3, + PT_TRIANGLES: 4, + PT_TRIANGLE_STRIP: 5, + PT_TRIANGLE_FAN: 6 + }; + exports.enums = enums; + function attrTypeBytes(attrType) { + if (attrType === enums.ATTR_TYPE_INT8) return 1; + if (attrType === enums.ATTR_TYPE_UINT8) return 1; + if (attrType === enums.ATTR_TYPE_INT16) return 2; + if (attrType === enums.ATTR_TYPE_UINT16) return 2; + if (attrType === enums.ATTR_TYPE_INT32) return 4; + if (attrType === enums.ATTR_TYPE_UINT32) return 4; + if (attrType === enums.ATTR_TYPE_FLOAT32) return 4; + console.warn("Unknown ATTR_TYPE: " + attrType); + return 0; + } + function glFilter(gl, filter, mipFilter) { + void 0 === mipFilter && (mipFilter = -1); + var result = _filterGL[filter][mipFilter + 1]; + if (void 0 === result) { + console.warn("Unknown FILTER: " + filter); + return -1 === mipFilter ? gl.LINEAR : gl.LINEAR_MIPMAP_LINEAR; + } + return result; + } + function glTextureFmt(fmt) { + var result = _textureFmtGL[fmt]; + if (void 0 === result) { + console.warn("Unknown TEXTURE_FMT: " + fmt); + return _textureFmtGL[enums.TEXTURE_FMT_RGBA8]; + } + return result; + } + }), {} ], + 245: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var FrameBuffer = (function() { + function FrameBuffer(device, width, height, options) { + this._device = device; + this._width = width; + this._height = height; + this._colors = options.colors || []; + this._depth = options.depth || null; + this._stencil = options.stencil || null; + this._depthStencil = options.depthStencil || null; + this._glID = device._gl.createFramebuffer(); + } + var _proto = FrameBuffer.prototype; + _proto.destroy = function destroy() { + if (null === this._glID) { + console.error("The frame-buffer already destroyed"); + return; + } + var gl = this._device._gl; + gl.deleteFramebuffer(this._glID); + this._glID = null; + }; + _proto.getHandle = function getHandle() { + return this._glID; + }; + return FrameBuffer; + })(); + exports["default"] = FrameBuffer; + module.exports = exports["default"]; + }), {} ], + 246: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _enums = require("./enums"); + var _BYTES_PER_INDEX; + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + var BYTES_PER_INDEX = (_BYTES_PER_INDEX = {}, _BYTES_PER_INDEX[_enums.enums.INDEX_FMT_UINT8] = 1, + _BYTES_PER_INDEX[_enums.enums.INDEX_FMT_UINT16] = 2, _BYTES_PER_INDEX[_enums.enums.INDEX_FMT_UINT32] = 4, + _BYTES_PER_INDEX); + var IndexBuffer = (function() { + function IndexBuffer(device, format, usage, data) { + this._device = device; + this._format = format; + this._usage = usage; + this._bytesPerIndex = BYTES_PER_INDEX[format]; + this._bytes = data.byteLength; + this._numIndices = this._bytes / this._bytesPerIndex; + this._needExpandDataStore = true; + this._glID = device._gl.createBuffer(); + this.update(0, data); + device._stats.ib += this._bytes; + } + var _proto = IndexBuffer.prototype; + _proto.destroy = function destroy() { + if (-1 === this._glID) { + console.error("The buffer already destroyed"); + return; + } + var gl = this._device._gl; + gl.deleteBuffer(this._glID); + this._device._stats.ib -= this.bytes; + this._glID = -1; + }; + _proto.update = function update(byteOffset, data) { + if (-1 === this._glID) { + console.error("The buffer is destroyed"); + return; + } + if (0 === data.byteLength) return; + if (byteOffset + data.byteLength > this._bytes) { + if (byteOffset) { + console.error("Failed to update data, bytes exceed."); + return; + } + this._needExpandDataStore = true; + this._bytes = byteOffset + data.byteLength; + this._numIndices = this._bytes / this._bytesPerIndex; + } + var gl = this._device._gl; + var glUsage = this._usage; + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._glID); + if (this._needExpandDataStore) { + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, data, glUsage); + this._needExpandDataStore = false; + } else gl.bufferSubData(gl.ELEMENT_ARRAY_BUFFER, byteOffset, data); + this._device._restoreIndexBuffer(); + }; + _proto.setUsage = function setUsage(usage) { + this._usage = usage; + }; + _createClass(IndexBuffer, [ { + key: "count", + get: function get() { + return this._numIndices; + } + } ]); + return IndexBuffer; + })(); + IndexBuffer.BYTES_PER_INDEX = BYTES_PER_INDEX; + var _default = IndexBuffer; + exports["default"] = _default; + module.exports = exports["default"]; + }), { + "./enums": 244 + } ], + 247: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _enums = require("./enums"); + var gfx = null; + false; + var VertexFormat = require("./vertex-format"); + var IndexBuffer = require("./index-buffer"); + var VertexBuffer = require("./vertex-buffer"); + var Program = require("./program"); + var Texture = require("./texture"); + var Texture2D = require("./texture-2d"); + var TextureCube = require("./texture-cube"); + var RenderBuffer = require("./render-buffer"); + var FrameBuffer = require("./frame-buffer"); + var Device = require("./device"); + gfx = { + VertexFormat: VertexFormat, + IndexBuffer: IndexBuffer, + VertexBuffer: VertexBuffer, + Program: Program, + Texture: Texture, + Texture2D: Texture2D, + TextureCube: TextureCube, + RenderBuffer: RenderBuffer, + FrameBuffer: FrameBuffer, + Device: Device, + attrTypeBytes: _enums.attrTypeBytes, + glFilter: _enums.glFilter, + glTextureFmt: _enums.glTextureFmt + }; + Object.assign(gfx, _enums.enums); + var _default = gfx; + exports["default"] = _default; + cc.gfx = gfx; + module.exports = exports["default"]; + }), { + "./device": 243, + "./enums": 244, + "./frame-buffer": 245, + "./index-buffer": 246, + "./program": 249, + "./render-buffer": 250, + "./texture": 254, + "./texture-2d": 252, + "./texture-cube": 253, + "./vertex-buffer": 255, + "./vertex-format": 256 + } ], + 248: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.isPow2 = isPow2; + function isPow2(v) { + return !(v & v - 1) && !!v; + } + }), {} ], + 249: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + var _genID = 0; + function _parseError(out, type, errorLog) { + if (!errorLog) return; + errorLog.split("\n").forEach((function(msg) { + if (msg.length < 5) return; + var parts = /^ERROR:\s+(\d+):(\d+):\s*(.*)$/.exec(msg); + parts ? out.push({ + type: type, + fileID: 0 | parts[1], + line: 0 | parts[2], + message: parts[3].trim() + }) : msg.length > 0 && out.push({ + type: type, + fileID: -1, + line: 0, + message: msg + }); + })); + } + var Program = (function() { + function Program(device, options) { + this._device = device; + this._attributes = []; + this._uniforms = []; + this._samplers = []; + this._errors = []; + this._linked = false; + this._vertSource = options.vert; + this._fragSource = options.frag; + this._glID = null; + this._id = _genID++; + } + var _proto = Program.prototype; + _proto.link = function link() { + if (this._linked) return; + var gl = this._device._gl; + var vertShader = _createShader(gl, gl.VERTEX_SHADER, this._vertSource); + var fragShader = _createShader(gl, gl.FRAGMENT_SHADER, this._fragSource); + var program = gl.createProgram(); + gl.attachShader(program, vertShader); + gl.attachShader(program, fragShader); + gl.linkProgram(program); + var failed = false; + var errors = this._errors; + if (!gl.getShaderParameter(vertShader, gl.COMPILE_STATUS)) { + _parseError(errors, "vs", gl.getShaderInfoLog(vertShader)); + failed = true; + } + if (!gl.getShaderParameter(fragShader, gl.COMPILE_STATUS)) { + _parseError(errors, "fs", gl.getShaderInfoLog(fragShader)); + failed = true; + } + gl.deleteShader(vertShader); + gl.deleteShader(fragShader); + if (failed) return errors; + if (!gl.getProgramParameter(program, gl.LINK_STATUS)) { + errors.push({ + info: "Failed to link shader program: " + gl.getProgramInfoLog(program) + }); + return errors; + } + this._glID = program; + var numAttributes = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES); + for (var i = 0; i < numAttributes; ++i) { + var info = gl.getActiveAttrib(program, i); + var location = gl.getAttribLocation(program, info.name); + this._attributes.push({ + name: info.name, + location: location, + type: info.type + }); + } + var numUniforms = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS); + for (var _i = 0; _i < numUniforms; ++_i) { + var _info = gl.getActiveUniform(program, _i); + var name = _info.name; + var _location = gl.getUniformLocation(program, name); + var isArray = "[0]" === name.substr(name.length - 3); + isArray && (name = name.substr(0, name.length - 3)); + var uniform = { + name: name, + location: _location, + type: _info.type, + size: isArray ? _info.size : void 0 + }; + this._uniforms.push(uniform); + } + this._linked = true; + }; + _proto.destroy = function destroy() { + var gl = this._device._gl; + gl.deleteProgram(this._glID); + this._linked = false; + this._glID = null; + this._attributes = []; + this._uniforms = []; + this._samplers = []; + }; + _createClass(Program, [ { + key: "id", + get: function get() { + return this._id; + } + } ]); + return Program; + })(); + exports["default"] = Program; + function _createShader(gl, type, src) { + var shader = gl.createShader(type); + gl.shaderSource(shader, src); + gl.compileShader(shader); + return shader; + } + module.exports = exports["default"]; + }), {} ], + 250: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var RenderBuffer = (function() { + function RenderBuffer(device, format, width, height) { + this._device = device; + this._format = format; + this._glID = device._gl.createRenderbuffer(); + this.update(width, height); + } + var _proto = RenderBuffer.prototype; + _proto.update = function update(width, height) { + this._width = width; + this._height = height; + var gl = this._device._gl; + gl.bindRenderbuffer(gl.RENDERBUFFER, this._glID); + gl.renderbufferStorage(gl.RENDERBUFFER, this._format, width, height); + gl.bindRenderbuffer(gl.RENDERBUFFER, null); + }; + _proto.destroy = function destroy() { + if (null === this._glID) { + console.error("The render-buffer already destroyed"); + return; + } + var gl = this._device._gl; + gl.bindRenderbuffer(gl.RENDERBUFFER, null); + gl.deleteRenderbuffer(this._glID); + this._glID = null; + }; + return RenderBuffer; + })(); + exports["default"] = RenderBuffer; + module.exports = exports["default"]; + }), {} ], + 251: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _enums = require("./enums"); + var _default = { + blend: false, + blendSep: false, + blendColor: 4294967295, + blendEq: _enums.enums.BLEND_FUNC_ADD, + blendAlphaEq: _enums.enums.BLEND_FUNC_ADD, + blendSrc: _enums.enums.BLEND_ONE, + blendDst: _enums.enums.BLEND_ZERO, + blendSrcAlpha: _enums.enums.BLEND_ONE, + blendDstAlpha: _enums.enums.BLEND_ZERO, + depthTest: false, + depthWrite: false, + depthFunc: _enums.enums.DS_FUNC_LESS, + stencilTest: false, + stencilSep: false, + stencilFuncFront: _enums.enums.DS_FUNC_ALWAYS, + stencilRefFront: 0, + stencilMaskFront: 255, + stencilFailOpFront: _enums.enums.STENCIL_OP_KEEP, + stencilZFailOpFront: _enums.enums.STENCIL_OP_KEEP, + stencilZPassOpFront: _enums.enums.STENCIL_OP_KEEP, + stencilWriteMaskFront: 255, + stencilFuncBack: _enums.enums.DS_FUNC_ALWAYS, + stencilRefBack: 0, + stencilMaskBack: 255, + stencilFailOpBack: _enums.enums.STENCIL_OP_KEEP, + stencilZFailOpBack: _enums.enums.STENCIL_OP_KEEP, + stencilZPassOpBack: _enums.enums.STENCIL_OP_KEEP, + stencilWriteMaskBack: 255, + cullMode: _enums.enums.CULL_BACK, + primitiveType: _enums.enums.PT_TRIANGLES, + maxStream: -1, + vertexBuffers: [], + vertexBufferOffsets: [], + indexBuffer: null, + maxTextureSlot: -1, + textureUnits: [], + program: null + }; + var State = (function() { + function State(device) { + this.vertexBuffers = new Array(device._caps.maxVertexStreams); + this.vertexBufferOffsets = new Array(device._caps.maxVertexStreams); + this.textureUnits = new Array(device._caps.maxTextureUnits); + this.set(_default); + } + State.initDefault = function initDefault(device) { + _default.vertexBuffers = new Array(device._caps.maxVertexStreams); + _default.vertexBufferOffsets = new Array(device._caps.maxVertexStreams); + _default.textureUnits = new Array(device._caps.maxTextureUnits); + }; + var _proto = State.prototype; + _proto.reset = function reset() { + this.set(_default); + }; + _proto.set = function set(cpy) { + this.blend = cpy.blend; + this.blendSep = cpy.blendSep; + this.blendColor = cpy.blendColor; + this.blendEq = cpy.blendEq; + this.blendAlphaEq = cpy.blendAlphaEq; + this.blendSrc = cpy.blendSrc; + this.blendDst = cpy.blendDst; + this.blendSrcAlpha = cpy.blendSrcAlpha; + this.blendDstAlpha = cpy.blendDstAlpha; + this.depthTest = cpy.depthTest; + this.depthWrite = cpy.depthWrite; + this.depthFunc = cpy.depthFunc; + this.stencilTest = cpy.stencilTest; + this.stencilSep = cpy.stencilSep; + this.stencilFuncFront = cpy.stencilFuncFront; + this.stencilRefFront = cpy.stencilRefFront; + this.stencilMaskFront = cpy.stencilMaskFront; + this.stencilFailOpFront = cpy.stencilFailOpFront; + this.stencilZFailOpFront = cpy.stencilZFailOpFront; + this.stencilZPassOpFront = cpy.stencilZPassOpFront; + this.stencilWriteMaskFront = cpy.stencilWriteMaskFront; + this.stencilFuncBack = cpy.stencilFuncBack; + this.stencilRefBack = cpy.stencilRefBack; + this.stencilMaskBack = cpy.stencilMaskBack; + this.stencilFailOpBack = cpy.stencilFailOpBack; + this.stencilZFailOpBack = cpy.stencilZFailOpBack; + this.stencilZPassOpBack = cpy.stencilZPassOpBack; + this.stencilWriteMaskBack = cpy.stencilWriteMaskBack; + this.cullMode = cpy.cullMode; + this.primitiveType = cpy.primitiveType; + this.maxStream = cpy.maxStream; + for (var i = 0; i < cpy.vertexBuffers.length; ++i) this.vertexBuffers[i] = cpy.vertexBuffers[i]; + for (var _i = 0; _i < cpy.vertexBufferOffsets.length; ++_i) this.vertexBufferOffsets[_i] = cpy.vertexBufferOffsets[_i]; + this.indexBuffer = cpy.indexBuffer; + this.maxTextureSlot = cpy.maxTextureSlot; + for (var _i2 = 0; _i2 < cpy.textureUnits.length; ++_i2) this.textureUnits[_i2] = cpy.textureUnits[_i2]; + this.program = cpy.program; + }; + return State; + })(); + exports["default"] = State; + module.exports = exports["default"]; + }), { + "./enums": 244 + } ], + 252: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _texture = _interopRequireDefault(require("./texture")); + var _enums = require("./enums"); + var _misc = require("./misc"); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var Texture2D = (function(_Texture) { + _inheritsLoose(Texture2D, _Texture); + function Texture2D(device, options) { + var _this; + _this = _Texture.call(this, device) || this; + var gl = _this._device._gl; + _this._target = gl.TEXTURE_2D; + _this._glID = gl.createTexture(); + options.images = options.images || [ null ]; + _this.update(options); + return _this; + } + var _proto = Texture2D.prototype; + _proto.update = function update(options) { + var gl = this._device._gl; + var genMipmaps = this._genMipmap; + if (options) { + void 0 !== options.width && (this._width = options.width); + void 0 !== options.height && (this._height = options.height); + void 0 !== options.anisotropy && (this._anisotropy = options.anisotropy); + void 0 !== options.minFilter && (this._minFilter = options.minFilter); + void 0 !== options.magFilter && (this._magFilter = options.magFilter); + void 0 !== options.mipFilter && (this._mipFilter = options.mipFilter); + void 0 !== options.wrapS && (this._wrapS = options.wrapS); + void 0 !== options.wrapT && (this._wrapT = options.wrapT); + if (void 0 !== options.format) { + this._format = options.format; + this._compressed = this._format >= _enums.enums.TEXTURE_FMT_RGB_DXT1 && this._format <= _enums.enums.TEXTURE_FMT_RGBA_PVRTC_4BPPV1 || this._format >= _enums.enums.TEXTURE_FMT_RGB_ETC2 && this._format <= _enums.enums.TEXTURE_FMT_RGBA_ETC2; + } + if (void 0 !== options.genMipmaps) { + this._genMipmap = options.genMipmaps; + genMipmaps = options.genMipmaps; + } + var maxSize = this._device.caps.maxTextureSize || Number.MAX_VALUE; + var textureMaxSize = Math.max(options.width || 0, options.height || 0); + maxSize < textureMaxSize && console.warn("The current texture size " + textureMaxSize + " exceeds the maximum size [" + maxSize + "] supported on the device."); + if (void 0 !== options.images && options.images.length > 1) { + genMipmaps = false; + var maxLength = options.width > options.height ? options.width : options.height; + maxLength >> options.images.length - 1 !== 1 && console.error("texture-2d mipmap is invalid, should have a 1x1 mipmap."); + } + } + var pot = (0, _misc.isPow2)(this._width) && (0, _misc.isPow2)(this._height); + pot || (genMipmaps = false); + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, this._glID); + if (void 0 !== options.images && options.images.length > 0) { + this._setMipmap(options.images, options.flipY, options.premultiplyAlpha); + options.images.length > 1 && (this._genMipmap = true); + } + if (genMipmaps) { + gl.hint(gl.GENERATE_MIPMAP_HINT, gl.NICEST); + gl.generateMipmap(gl.TEXTURE_2D); + this._genMipmap = true; + } + this._setTexInfo(); + this._device._restoreTexture(0); + }; + _proto.updateSubImage = function updateSubImage(options) { + var gl = this._device._gl; + var glFmt = (0, _enums.glTextureFmt)(this._format); + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, this._glID); + this._setSubImage(glFmt, options); + this._device._restoreTexture(0); + }; + _proto.updateImage = function updateImage(options) { + var gl = this._device._gl; + var glFmt = (0, _enums.glTextureFmt)(this._format); + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, this._glID); + this._setImage(glFmt, options); + this._device._restoreTexture(0); + }; + _proto._setSubImage = function _setSubImage(glFmt, options) { + var gl = this._device._gl; + var flipY = options.flipY; + var premultiplyAlpha = options.premultiplyAlpha; + var img = options.image; + if (!img || ArrayBuffer.isView(img) || img instanceof ArrayBuffer) { + void 0 === flipY ? gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false) : gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY); + void 0 === premultiplyAlpha ? gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false) : gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultiplyAlpha); + this._compressed ? gl.compressedTexSubImage2D(gl.TEXTURE_2D, options.level, options.x, options.y, options.width, options.height, glFmt.format, img) : gl.texSubImage2D(gl.TEXTURE_2D, options.level, options.x, options.y, options.width, options.height, glFmt.format, glFmt.pixelType, img); + } else { + void 0 === flipY ? gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true) : gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY); + void 0 === premultiplyAlpha ? gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false) : gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultiplyAlpha); + gl.texSubImage2D(gl.TEXTURE_2D, options.level, options.x, options.y, glFmt.format, glFmt.pixelType, img); + } + }; + _proto._setImage = function _setImage(glFmt, options) { + var gl = this._device._gl; + var flipY = options.flipY; + var premultiplyAlpha = options.premultiplyAlpha; + var img = options.image; + if (!img || ArrayBuffer.isView(img) || img instanceof ArrayBuffer) { + void 0 === flipY ? gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false) : gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY); + void 0 === premultiplyAlpha ? gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false) : gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultiplyAlpha); + this._compressed ? gl.compressedTexImage2D(gl.TEXTURE_2D, options.level, glFmt.internalFormat, options.width, options.height, 0, img) : gl.texImage2D(gl.TEXTURE_2D, options.level, glFmt.internalFormat, options.width, options.height, 0, glFmt.format, glFmt.pixelType, img); + } else { + void 0 === flipY ? gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true) : gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY); + void 0 === premultiplyAlpha ? gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false) : gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultiplyAlpha); + gl.texImage2D(gl.TEXTURE_2D, options.level, glFmt.internalFormat, glFmt.format, glFmt.pixelType, img); + } + }; + _proto._setMipmap = function _setMipmap(images, flipY, premultiplyAlpha) { + var glFmt = (0, _enums.glTextureFmt)(this._format); + var options = { + width: this._width, + height: this._height, + flipY: flipY, + premultiplyAlpha: premultiplyAlpha, + level: 0, + image: null + }; + for (var i = 0; i < images.length; ++i) { + options.level = i; + options.width = this._width >> i; + options.height = this._height >> i; + options.image = images[i]; + this._setImage(glFmt, options); + } + }; + _proto._setTexInfo = function _setTexInfo() { + var gl = this._device._gl; + var pot = (0, _misc.isPow2)(this._width) && (0, _misc.isPow2)(this._height); + if (!pot && (this._wrapS !== _enums.enums.WRAP_CLAMP || this._wrapT !== _enums.enums.WRAP_CLAMP)) { + console.warn("WebGL1 doesn't support all wrap modes with NPOT textures"); + this._wrapS = _enums.enums.WRAP_CLAMP; + this._wrapT = _enums.enums.WRAP_CLAMP; + } + var mipFilter = this._genMipmap ? this._mipFilter : -1; + if (!pot && -1 !== mipFilter) { + console.warn("NPOT textures do not support mipmap filter"); + mipFilter = -1; + } + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, (0, _enums.glFilter)(gl, this._minFilter, mipFilter)); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, (0, _enums.glFilter)(gl, this._magFilter, -1)); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, this._wrapS); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, this._wrapT); + var ext = this._device.ext("EXT_texture_filter_anisotropic"); + ext && gl.texParameteri(gl.TEXTURE_2D, ext.TEXTURE_MAX_ANISOTROPY_EXT, this._anisotropy); + }; + return Texture2D; + })(_texture["default"]); + exports["default"] = Texture2D; + module.exports = exports["default"]; + }), { + "./enums": 244, + "./misc": 248, + "./texture": 254 + } ], + 253: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _texture = _interopRequireDefault(require("./texture")); + var _enums = require("./enums"); + var _misc = require("./misc"); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var TextureCube = (function(_Texture) { + _inheritsLoose(TextureCube, _Texture); + function TextureCube(device, options) { + var _this; + _this = _Texture.call(this, device) || this; + var gl = _this._device._gl; + _this._target = gl.TEXTURE_CUBE_MAP; + _this._glID = gl.createTexture(); + _this.update(options); + return _this; + } + var _proto = TextureCube.prototype; + _proto.update = function update(options) { + var gl = this._device._gl; + var genMipmaps = this._genMipmaps; + if (options) { + void 0 !== options.width && (this._width = options.width); + void 0 !== options.height && (this._height = options.height); + void 0 !== options.anisotropy && (this._anisotropy = options.anisotropy); + void 0 !== options.minFilter && (this._minFilter = options.minFilter); + void 0 !== options.magFilter && (this._magFilter = options.magFilter); + void 0 !== options.mipFilter && (this._mipFilter = options.mipFilter); + void 0 !== options.wrapS && (this._wrapS = options.wrapS); + void 0 !== options.wrapT && (this._wrapT = options.wrapT); + if (void 0 !== options.format) { + this._format = options.format; + this._compressed = this._format >= _enums.enums.TEXTURE_FMT_RGB_DXT1 && this._format <= _enums.enums.TEXTURE_FMT_RGBA_PVRTC_4BPPV1 || this._format >= _enums.enums.TEXTURE_FMT_RGB_ETC2 && this._format <= _enums.enums.TEXTURE_FMT_RGBA_ETC2; + } + if (void 0 !== options.genMipmaps) { + this._genMipmaps = options.genMipmaps; + genMipmaps = options.genMipmaps; + } + if (void 0 !== options.images && options.images.length > 1) { + genMipmaps = false; + options.width !== options.height && console.warn("texture-cube width and height should be identical."); + options.width >> options.images.length - 1 !== 1 && console.error("texture-cube mipmap is invalid. please set mipmap as 1x1, 2x2, 4x4 ... nxn"); + } + } + var pot = (0, _misc.isPow2)(this._width) && (0, _misc.isPow2)(this._height); + pot || (genMipmaps = false); + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_CUBE_MAP, this._glID); + if (void 0 !== options.images && options.images.length > 0) { + this._setMipmap(options.images, options.flipY, options.premultiplyAlpha); + options.images.length > 1 && (this._genMipmaps = true); + } + if (genMipmaps) { + gl.hint(gl.GENERATE_MIPMAP_HINT, gl.NICEST); + gl.generateMipmap(gl.TEXTURE_CUBE_MAP); + this._genMipmaps = true; + } + this._setTexInfo(); + this._device._restoreTexture(0); + }; + _proto.updateSubImage = function updateSubImage(options) { + var gl = this._device._gl; + var glFmt = (0, _enums.glTextureFmt)(this._format); + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_CUBE_MAP, this._glID); + this._setSubImage(glFmt, options); + this._device._restoreTexture(0); + }; + _proto.updateImage = function updateImage(options) { + var gl = this._device._gl; + var glFmt = (0, _enums.glTextureFmt)(this._format); + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_CUBE_MAP, this._glID); + this._setImage(glFmt, options); + this._device._restoreTexture(0); + }; + _proto._setSubImage = function _setSubImage(glFmt, options) { + var gl = this._device._gl; + var flipY = options.flipY; + var premultiplyAlpha = options.premultiplyAlpha; + var faceIndex = options.faceIndex; + var img = options.image; + void 0 === flipY ? gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false) : gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY); + void 0 === premultiplyAlpha ? gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false) : gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultiplyAlpha); + !img || ArrayBuffer.isView(img) || img instanceof ArrayBuffer ? this._compressed ? gl.compressedTexSubImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex, options.level, options.x, options.y, options.width, options.height, glFmt.format, img) : gl.texSubImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex, options.level, options.x, options.y, options.width, options.height, glFmt.format, glFmt.pixelType, img) : gl.texSubImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex, options.level, options.x, options.y, glFmt.format, glFmt.pixelType, img); + }; + _proto._setImage = function _setImage(glFmt, options) { + var gl = this._device._gl; + var flipY = options.flipY; + var premultiplyAlpha = options.premultiplyAlpha; + var faceIndex = options.faceIndex; + var img = options.image; + void 0 === flipY ? gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false) : gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY); + void 0 === premultiplyAlpha ? gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false) : gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultiplyAlpha); + !img || ArrayBuffer.isView(img) || img instanceof ArrayBuffer ? this._compressed ? gl.compressedTexImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex, options.level, glFmt.internalFormat, options.width, options.height, 0, img) : gl.texImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex, options.level, glFmt.internalFormat, options.width, options.height, 0, glFmt.format, glFmt.pixelType, img) : gl.texImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex, options.level, glFmt.internalFormat, glFmt.format, glFmt.pixelType, img); + }; + _proto._setMipmap = function _setMipmap(images, flipY, premultiplyAlpha) { + var glFmt = (0, _enums.glTextureFmt)(this._format); + var options = { + width: this._width, + height: this._height, + faceIndex: 0, + flipY: flipY, + premultiplyAlpha: premultiplyAlpha, + level: 0, + image: null + }; + for (var i = 0; i < images.length; ++i) { + var levelImages = images[i]; + options.level = i; + options.width = this._width >> i; + options.height = this._height >> i; + for (var face = 0; face < 6; ++face) { + options.faceIndex = face; + options.image = levelImages[face]; + this._setImage(glFmt, options); + } + } + }; + _proto._setTexInfo = function _setTexInfo() { + var gl = this._device._gl; + var pot = (0, _misc.isPow2)(this._width) && (0, _misc.isPow2)(this._height); + if (!pot && (this._wrapS !== _enums.enums.WRAP_CLAMP || this._wrapT !== _enums.enums.WRAP_CLAMP)) { + console.warn("WebGL1 doesn't support all wrap modes with NPOT textures"); + this._wrapS = _enums.enums.WRAP_CLAMP; + this._wrapT = _enums.enums.WRAP_CLAMP; + } + var mipFilter = this._genMipmaps ? this._mipFilter : -1; + if (!pot && -1 !== mipFilter) { + console.warn("NPOT textures do not support mipmap filter"); + mipFilter = -1; + } + gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MIN_FILTER, (0, _enums.glFilter)(gl, this._minFilter, mipFilter)); + gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MAG_FILTER, (0, _enums.glFilter)(gl, this._magFilter, -1)); + gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_S, this._wrapS); + gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_T, this._wrapT); + var ext = this._device.ext("EXT_texture_filter_anisotropic"); + ext && gl.texParameteri(gl.TEXTURE_CUBE_MAP, ext.TEXTURE_MAX_ANISOTROPY_EXT, this._anisotropy); + }; + return TextureCube; + })(_texture["default"]); + exports["default"] = TextureCube; + module.exports = exports["default"]; + }), { + "./enums": 244, + "./misc": 248, + "./texture": 254 + } ], + 254: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _enums = require("./enums"); + var _nullWebGLTexture = null; + var _textureID = 0; + var Texture = (function() { + function Texture(device) { + this._device = device; + this._width = 4; + this._height = 4; + this._genMipmaps = false; + this._compressed = false; + this._anisotropy = 1; + this._minFilter = _enums.enums.FILTER_LINEAR; + this._magFilter = _enums.enums.FILTER_LINEAR; + this._mipFilter = _enums.enums.FILTER_LINEAR; + this._wrapS = _enums.enums.WRAP_REPEAT; + this._wrapT = _enums.enums.WRAP_REPEAT; + this._format = _enums.enums.TEXTURE_FMT_RGBA8; + this._target = -1; + this._id = _textureID++; + } + var _proto = Texture.prototype; + _proto.destroy = function destroy() { + if (this._glID === _nullWebGLTexture) { + console.error("The texture already destroyed"); + return; + } + var gl = this._device._gl; + gl.deleteTexture(this._glID); + this._device._stats.tex -= this.bytes; + this._glID = _nullWebGLTexture; + }; + return Texture; + })(); + exports["default"] = Texture; + module.exports = exports["default"]; + }), { + "./enums": 244 + } ], + 255: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _enums = require("./enums"); + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + var VertexBuffer = (function() { + function VertexBuffer(device, format, usage, data) { + this._device = device; + this._format = format; + this._usage = usage; + this._bytesPerVertex = this._format._bytes; + this._bytes = data.byteLength; + this._numVertices = this._bytes / this._bytesPerVertex; + this._needExpandDataStore = true; + this._glID = device._gl.createBuffer(); + this.update(0, data); + device._stats.vb += this._bytes; + } + var _proto = VertexBuffer.prototype; + _proto.destroy = function destroy() { + if (-1 === this._glID) { + console.error("The buffer already destroyed"); + return; + } + var gl = this._device._gl; + gl.deleteBuffer(this._glID); + this._device._stats.vb -= this.bytes; + this._glID = -1; + }; + _proto.update = function update(byteOffset, data) { + if (-1 === this._glID) { + console.error("The buffer is destroyed"); + return; + } + if (0 === data.byteLength) return; + if (byteOffset + data.byteLength > this._bytes) { + if (byteOffset) { + console.error("Failed to update data, bytes exceed."); + return; + } + this._needExpandDataStore = true; + this._bytes = byteOffset + data.byteLength; + this._numVertices = this._bytes / this._bytesPerVertex; + } + var gl = this._device._gl; + var glUsage = this._usage; + gl.bindBuffer(gl.ARRAY_BUFFER, this._glID); + if (this._needExpandDataStore) { + gl.bufferData(gl.ARRAY_BUFFER, data, glUsage); + this._needExpandDataStore = false; + } else gl.bufferSubData(gl.ARRAY_BUFFER, byteOffset, data); + gl.bindBuffer(gl.ARRAY_BUFFER, null); + }; + _proto.getFormat = function getFormat(name) { + return this._format.element(name); + }; + _proto.setUsage = function setUsage(usage) { + this._usage = usage; + }; + _createClass(VertexBuffer, [ { + key: "count", + get: function get() { + return this._numVertices; + } + } ]); + return VertexBuffer; + })(); + var _default = VertexBuffer; + exports["default"] = _default; + module.exports = exports["default"]; + }), { + "./enums": 244 + } ], + 256: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _enums = require("./enums"); + var _murmurhash2_gc = _interopRequireDefault(require("../murmurhash2_gc")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var VertexFormat = (function() { + function VertexFormat(infos) { + this._attr2el = {}; + this._elements = []; + this._bytes = 0; + var hash = ""; + for (var i = 0, len = infos.length; i < len; ++i) { + var info = infos[i]; + var el = { + name: info.name, + offset: this._bytes, + stride: 0, + stream: -1, + type: info.type, + num: info.num, + normalize: void 0 !== info.normalize && info.normalize, + bytes: info.num * (0, _enums.attrTypeBytes)(info.type) + }; + this._attr2el[el.name] = el; + this._elements.push(el); + this._bytes += el.bytes; + hash += el.name + ":" + el.num + ":" + el.type + ":" + el.normalize; + } + for (var _i = 0, _len = this._elements.length; _i < _len; ++_i) { + var _el = this._elements[_i]; + _el.stride = this._bytes; + } + this._hash = (0, _murmurhash2_gc["default"])(hash, 666); + } + var _proto = VertexFormat.prototype; + _proto.element = function element(attrName) { + return this._attr2el[attrName]; + }; + _proto.getHash = function getHash() { + return this._hash; + }; + return VertexFormat; + })(); + exports["default"] = VertexFormat; + module.exports = exports["default"]; + }), { + "../murmurhash2_gc": 265, + "./enums": 244 + } ], + 257: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var CircularPool = (function() { + function CircularPool(fn, size) { + this._cursor = 0; + this._data = new Array(size); + for (var i = 0; i < size; ++i) this._data[i] = fn(); + } + var _proto = CircularPool.prototype; + _proto.request = function request() { + var item = this._data[this._cursor]; + this._cursor = (this._cursor + 1) % this._data.length; + return item; + }; + return CircularPool; + })(); + exports["default"] = CircularPool; + module.exports = exports["default"]; + }), {} ], + 258: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _timsort = _interopRequireDefault(require("./timsort")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + var FixedArray = (function() { + function FixedArray(size) { + this._count = 0; + this._data = new Array(size); + } + var _proto = FixedArray.prototype; + _proto._resize = function _resize(size) { + if (size > this._data.length) for (var i = this._data.length; i < size; ++i) this._data[i] = void 0; + }; + _proto.reset = function reset() { + for (var i = 0; i < this._count; ++i) this._data[i] = void 0; + this._count = 0; + }; + _proto.push = function push(val) { + this._count >= this._data.length && this._resize(2 * this._data.length); + this._data[this._count] = val; + ++this._count; + }; + _proto.pop = function pop() { + --this._count; + this._count < 0 && (this._count = 0); + var ret = this._data[this._count]; + this._data[this._count] = void 0; + return ret; + }; + _proto.fastRemove = function fastRemove(idx) { + if (idx >= this._count || idx < 0) return; + var last = this._count - 1; + this._data[idx] = this._data[last]; + this._data[last] = void 0; + this._count -= 1; + }; + _proto.indexOf = function indexOf(val) { + return this._data.indexOf(val); + }; + _proto.sort = function sort(cmp) { + return (0, _timsort["default"])(this._data, 0, this._count, cmp); + }; + _createClass(FixedArray, [ { + key: "length", + get: function get() { + return this._count; + } + }, { + key: "data", + get: function get() { + return this._data; + } + } ]); + return FixedArray; + })(); + exports["default"] = FixedArray; + module.exports = exports["default"]; + }), { + "./timsort": 263 + } ], + 259: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.TypedArrayPool = exports.RecyclePool = exports.Pool = exports.LinkedArray = exports.FixedArray = exports.CircularPool = void 0; + var _circularPool = _interopRequireDefault(require("./circular-pool")); + exports.CircularPool = _circularPool["default"]; + var _fixedArray = _interopRequireDefault(require("./fixed-array")); + exports.FixedArray = _fixedArray["default"]; + var _linkedArray = _interopRequireDefault(require("./linked-array")); + exports.LinkedArray = _linkedArray["default"]; + var _pool = _interopRequireDefault(require("./pool")); + exports.Pool = _pool["default"]; + var _recyclePool = _interopRequireDefault(require("./recycle-pool")); + exports.RecyclePool = _recyclePool["default"]; + var _typedArrayPool = _interopRequireDefault(require("./typed-array-pool")); + exports.TypedArrayPool = _typedArrayPool["default"]; + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + }), { + "./circular-pool": 257, + "./fixed-array": 258, + "./linked-array": 260, + "./pool": 261, + "./recycle-pool": 262, + "./typed-array-pool": 264 + } ], + 260: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _pool = _interopRequireDefault(require("./pool")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + var LinkedArray = (function() { + function LinkedArray(fn, size) { + this._fn = fn; + this._count = 0; + this._head = null; + this._tail = null; + this._pool = new _pool["default"](fn, size); + } + var _proto = LinkedArray.prototype; + _proto.add = function add() { + var node = this._pool.alloc(); + if (this._tail) { + this._tail._next = node; + node._prev = this._tail; + } else this._head = node; + this._tail = node; + this._count += 1; + return node; + }; + _proto.remove = function remove(node) { + node._prev ? node._prev._next = node._next : this._head = node._next; + node._next ? node._next._prev = node._prev : this._tail = node._prev; + node._next = null; + node._prev = null; + this._pool.free(node); + this._count -= 1; + }; + _proto.forEach = function forEach(fn, binder) { + var cursor = this._head; + if (!cursor) return; + binder && (fn = fn.bind(binder)); + var idx = 0; + var next = cursor; + while (cursor) { + next = cursor._next; + fn(cursor, idx, this); + cursor = next; + ++idx; + } + }; + _createClass(LinkedArray, [ { + key: "head", + get: function get() { + return this._head; + } + }, { + key: "tail", + get: function get() { + return this._tail; + } + }, { + key: "length", + get: function get() { + return this._count; + } + } ]); + return LinkedArray; + })(); + exports["default"] = LinkedArray; + module.exports = exports["default"]; + }), { + "./pool": 261 + } ], + 261: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var Pool = (function() { + function Pool(fn, size) { + this._fn = fn; + this._idx = size - 1; + this._frees = new Array(size); + for (var i = 0; i < size; ++i) this._frees[i] = fn(); + } + var _proto = Pool.prototype; + _proto._expand = function _expand(size) { + var old = this._frees; + this._frees = new Array(size); + var len = size - old.length; + for (var i = 0; i < len; ++i) this._frees[i] = this._fn(); + for (var _i = len, j = 0; _i < size; ++_i, ++j) this._frees[_i] = old[j]; + this._idx += len; + }; + _proto.alloc = function alloc() { + this._idx < 0 && this._expand(Math.round(1.2 * this._frees.length) + 1); + var ret = this._frees[this._idx]; + this._frees[this._idx] = null; + --this._idx; + return ret; + }; + _proto.free = function free(obj) { + ++this._idx; + this._frees[this._idx] = obj; + }; + _proto.clear = function clear(fn) { + for (var i = 0; i <= this._idx; i++) fn && fn(this._frees[i]); + this._frees.length = 0; + this._idx = -1; + }; + return Pool; + })(); + exports["default"] = Pool; + module.exports = exports["default"]; + }), {} ], + 262: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _timsort = _interopRequireDefault(require("./timsort")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + var RecyclePool = (function() { + function RecyclePool(fn, size) { + this._fn = fn; + this._count = 0; + this._data = new Array(size); + for (var i = 0; i < size; ++i) this._data[i] = fn(); + } + var _proto = RecyclePool.prototype; + _proto.reset = function reset() { + this._count = 0; + }; + _proto.resize = function resize(size) { + if (size > this._data.length) for (var i = this._data.length; i < size; ++i) this._data[i] = this._fn(); + }; + _proto.add = function add() { + this._count >= this._data.length && this.resize(2 * this._data.length); + return this._data[this._count++]; + }; + _proto.remove = function remove(idx) { + if (idx >= this._count) return; + var last = this._count - 1; + var tmp = this._data[idx]; + this._data[idx] = this._data[last]; + this._data[last] = tmp; + this._count -= 1; + }; + _proto.sort = function sort(cmp) { + return (0, _timsort["default"])(this._data, 0, this._count, cmp); + }; + _createClass(RecyclePool, [ { + key: "length", + get: function get() { + return this._count; + } + }, { + key: "data", + get: function get() { + return this._data; + } + } ]); + return RecyclePool; + })(); + exports["default"] = RecyclePool; + cc.RecyclePool = RecyclePool; + module.exports = exports["default"]; + }), { + "./timsort": 263 + } ], + 263: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = _default; + var DEFAULT_MIN_MERGE = 32; + var DEFAULT_MIN_GALLOPING = 7; + var DEFAULT_TMP_STORAGE_LENGTH = 256; + var POWERS_OF_TEN = [ 1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9 ]; + function log10(x) { + if (x < 1e5) { + if (x < 100) return x < 10 ? 0 : 1; + if (x < 1e4) return x < 1e3 ? 2 : 3; + return 4; + } + if (x < 1e7) return x < 1e6 ? 5 : 6; + if (x < 1e9) return x < 1e8 ? 7 : 8; + return 9; + } + function alphabeticalCompare(a, b) { + if (a === b) return 0; + if (~~a === a && ~~b === b) { + if (0 === a || 0 === b) return a < b ? -1 : 1; + if (a < 0 || b < 0) { + if (b >= 0) return -1; + if (a >= 0) return 1; + a = -a; + b = -b; + } + var al = log10(a); + var bl = log10(b); + var t = 0; + if (al < bl) { + a *= POWERS_OF_TEN[bl - al - 1]; + b /= 10; + t = -1; + } else if (al > bl) { + b *= POWERS_OF_TEN[al - bl - 1]; + a /= 10; + t = 1; + } + if (a === b) return t; + return a < b ? -1 : 1; + } + var aStr = String(a); + var bStr = String(b); + if (aStr === bStr) return 0; + return aStr < bStr ? -1 : 1; + } + function minRunLength(n) { + var r = 0; + while (n >= DEFAULT_MIN_MERGE) { + r |= 1 & n; + n >>= 1; + } + return n + r; + } + function makeAscendingRun(array, lo, hi, compare) { + var runHi = lo + 1; + if (runHi === hi) return 1; + if (compare(array[runHi++], array[lo]) < 0) { + while (runHi < hi && compare(array[runHi], array[runHi - 1]) < 0) runHi++; + reverseRun(array, lo, runHi); + } else while (runHi < hi && compare(array[runHi], array[runHi - 1]) >= 0) runHi++; + return runHi - lo; + } + function reverseRun(array, lo, hi) { + hi--; + while (lo < hi) { + var t = array[lo]; + array[lo++] = array[hi]; + array[hi--] = t; + } + } + function binaryInsertionSort(array, lo, hi, start, compare) { + start === lo && start++; + for (;start < hi; start++) { + var pivot = array[start]; + var left = lo; + var right = start; + while (left < right) { + var mid = left + right >>> 1; + compare(pivot, array[mid]) < 0 ? right = mid : left = mid + 1; + } + var n = start - left; + switch (n) { + case 3: + array[left + 3] = array[left + 2]; + + case 2: + array[left + 2] = array[left + 1]; + + case 1: + array[left + 1] = array[left]; + break; + + default: + while (n > 0) { + array[left + n] = array[left + n - 1]; + n--; + } + } + array[left] = pivot; + } + } + function gallopLeft(value, array, start, length, hint, compare) { + var lastOffset = 0; + var maxOffset = 0; + var offset = 1; + if (compare(value, array[start + hint]) > 0) { + maxOffset = length - hint; + while (offset < maxOffset && compare(value, array[start + hint + offset]) > 0) { + lastOffset = offset; + offset = 1 + (offset << 1); + offset <= 0 && (offset = maxOffset); + } + offset > maxOffset && (offset = maxOffset); + lastOffset += hint; + offset += hint; + } else { + maxOffset = hint + 1; + while (offset < maxOffset && compare(value, array[start + hint - offset]) <= 0) { + lastOffset = offset; + offset = 1 + (offset << 1); + offset <= 0 && (offset = maxOffset); + } + offset > maxOffset && (offset = maxOffset); + var tmp = lastOffset; + lastOffset = hint - offset; + offset = hint - tmp; + } + lastOffset++; + while (lastOffset < offset) { + var m = lastOffset + (offset - lastOffset >>> 1); + compare(value, array[start + m]) > 0 ? lastOffset = m + 1 : offset = m; + } + return offset; + } + function gallopRight(value, array, start, length, hint, compare) { + var lastOffset = 0; + var maxOffset = 0; + var offset = 1; + if (compare(value, array[start + hint]) < 0) { + maxOffset = hint + 1; + while (offset < maxOffset && compare(value, array[start + hint - offset]) < 0) { + lastOffset = offset; + offset = 1 + (offset << 1); + offset <= 0 && (offset = maxOffset); + } + offset > maxOffset && (offset = maxOffset); + var tmp = lastOffset; + lastOffset = hint - offset; + offset = hint - tmp; + } else { + maxOffset = length - hint; + while (offset < maxOffset && compare(value, array[start + hint + offset]) >= 0) { + lastOffset = offset; + offset = 1 + (offset << 1); + offset <= 0 && (offset = maxOffset); + } + offset > maxOffset && (offset = maxOffset); + lastOffset += hint; + offset += hint; + } + lastOffset++; + while (lastOffset < offset) { + var m = lastOffset + (offset - lastOffset >>> 1); + compare(value, array[start + m]) < 0 ? offset = m : lastOffset = m + 1; + } + return offset; + } + var TimSort = (function() { + function TimSort(array, compare) { + this.array = array; + this.compare = compare; + this.minGallop = DEFAULT_MIN_GALLOPING; + this.length = array.length; + this.tmpStorageLength = DEFAULT_TMP_STORAGE_LENGTH; + this.length < 2 * DEFAULT_TMP_STORAGE_LENGTH && (this.tmpStorageLength = this.length >>> 1); + this.tmp = new Array(this.tmpStorageLength); + this.stackLength = this.length < 120 ? 5 : this.length < 1542 ? 10 : this.length < 119151 ? 19 : 40; + this.runStart = new Array(this.stackLength); + this.runLength = new Array(this.stackLength); + this.stackSize = 0; + } + var _proto = TimSort.prototype; + _proto.pushRun = function pushRun(runStart, runLength) { + this.runStart[this.stackSize] = runStart; + this.runLength[this.stackSize] = runLength; + this.stackSize += 1; + }; + _proto.mergeRuns = function mergeRuns() { + while (this.stackSize > 1) { + var n = this.stackSize - 2; + if (n >= 1 && this.runLength[n - 1] <= this.runLength[n] + this.runLength[n + 1] || n >= 2 && this.runLength[n - 2] <= this.runLength[n] + this.runLength[n - 1]) this.runLength[n - 1] < this.runLength[n + 1] && n--; else if (this.runLength[n] > this.runLength[n + 1]) break; + this.mergeAt(n); + } + }; + _proto.forceMergeRuns = function forceMergeRuns() { + while (this.stackSize > 1) { + var n = this.stackSize - 2; + n > 0 && this.runLength[n - 1] < this.runLength[n + 1] && n--; + this.mergeAt(n); + } + }; + _proto.mergeAt = function mergeAt(i) { + var compare = this.compare; + var array = this.array; + var start1 = this.runStart[i]; + var length1 = this.runLength[i]; + var start2 = this.runStart[i + 1]; + var length2 = this.runLength[i + 1]; + this.runLength[i] = length1 + length2; + if (i === this.stackSize - 3) { + this.runStart[i + 1] = this.runStart[i + 2]; + this.runLength[i + 1] = this.runLength[i + 2]; + } + this.stackSize--; + var k = gallopRight(array[start2], array, start1, length1, 0, compare); + start1 += k; + length1 -= k; + if (0 === length1) return; + length2 = gallopLeft(array[start1 + length1 - 1], array, start2, length2, length2 - 1, compare); + if (0 === length2) return; + length1 <= length2 ? this.mergeLow(start1, length1, start2, length2) : this.mergeHigh(start1, length1, start2, length2); + }; + _proto.mergeLow = function mergeLow(start1, length1, start2, length2) { + var compare = this.compare; + var array = this.array; + var tmp = this.tmp; + var i = 0; + for (i = 0; i < length1; i++) tmp[i] = array[start1 + i]; + var cursor1 = 0; + var cursor2 = start2; + var dest = start1; + array[dest++] = array[cursor2++]; + if (0 === --length2) { + for (i = 0; i < length1; i++) array[dest + i] = tmp[cursor1 + i]; + return; + } + if (1 === length1) { + for (i = 0; i < length2; i++) array[dest + i] = array[cursor2 + i]; + array[dest + length2] = tmp[cursor1]; + return; + } + var minGallop = this.minGallop; + while (true) { + var count1 = 0; + var count2 = 0; + var exit = false; + do { + if (compare(array[cursor2], tmp[cursor1]) < 0) { + array[dest++] = array[cursor2++]; + count2++; + count1 = 0; + if (0 === --length2) { + exit = true; + break; + } + } else { + array[dest++] = tmp[cursor1++]; + count1++; + count2 = 0; + if (1 === --length1) { + exit = true; + break; + } + } + } while ((count1 | count2) < minGallop); + if (exit) break; + do { + count1 = gallopRight(array[cursor2], tmp, cursor1, length1, 0, compare); + if (0 !== count1) { + for (i = 0; i < count1; i++) array[dest + i] = tmp[cursor1 + i]; + dest += count1; + cursor1 += count1; + length1 -= count1; + if (length1 <= 1) { + exit = true; + break; + } + } + array[dest++] = array[cursor2++]; + if (0 === --length2) { + exit = true; + break; + } + count2 = gallopLeft(tmp[cursor1], array, cursor2, length2, 0, compare); + if (0 !== count2) { + for (i = 0; i < count2; i++) array[dest + i] = array[cursor2 + i]; + dest += count2; + cursor2 += count2; + length2 -= count2; + if (0 === length2) { + exit = true; + break; + } + } + array[dest++] = tmp[cursor1++]; + if (1 === --length1) { + exit = true; + break; + } + minGallop--; + } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING); + if (exit) break; + minGallop < 0 && (minGallop = 0); + minGallop += 2; + } + this.minGallop = minGallop; + minGallop < 1 && (this.minGallop = 1); + if (1 === length1) { + for (i = 0; i < length2; i++) array[dest + i] = array[cursor2 + i]; + array[dest + length2] = tmp[cursor1]; + } else { + if (0 === length1) throw new Error("mergeLow preconditions were not respected"); + for (i = 0; i < length1; i++) array[dest + i] = tmp[cursor1 + i]; + } + }; + _proto.mergeHigh = function mergeHigh(start1, length1, start2, length2) { + var compare = this.compare; + var array = this.array; + var tmp = this.tmp; + var i = 0; + for (i = 0; i < length2; i++) tmp[i] = array[start2 + i]; + var cursor1 = start1 + length1 - 1; + var cursor2 = length2 - 1; + var dest = start2 + length2 - 1; + var customCursor = 0; + var customDest = 0; + array[dest--] = array[cursor1--]; + if (0 === --length1) { + customCursor = dest - (length2 - 1); + for (i = 0; i < length2; i++) array[customCursor + i] = tmp[i]; + return; + } + if (1 === length2) { + dest -= length1; + cursor1 -= length1; + customDest = dest + 1; + customCursor = cursor1 + 1; + for (i = length1 - 1; i >= 0; i--) array[customDest + i] = array[customCursor + i]; + array[dest] = tmp[cursor2]; + return; + } + var minGallop = this.minGallop; + while (true) { + var count1 = 0; + var count2 = 0; + var exit = false; + do { + if (compare(tmp[cursor2], array[cursor1]) < 0) { + array[dest--] = array[cursor1--]; + count1++; + count2 = 0; + if (0 === --length1) { + exit = true; + break; + } + } else { + array[dest--] = tmp[cursor2--]; + count2++; + count1 = 0; + if (1 === --length2) { + exit = true; + break; + } + } + } while ((count1 | count2) < minGallop); + if (exit) break; + do { + count1 = length1 - gallopRight(tmp[cursor2], array, start1, length1, length1 - 1, compare); + if (0 !== count1) { + dest -= count1; + cursor1 -= count1; + length1 -= count1; + customDest = dest + 1; + customCursor = cursor1 + 1; + for (i = count1 - 1; i >= 0; i--) array[customDest + i] = array[customCursor + i]; + if (0 === length1) { + exit = true; + break; + } + } + array[dest--] = tmp[cursor2--]; + if (1 === --length2) { + exit = true; + break; + } + count2 = length2 - gallopLeft(array[cursor1], tmp, 0, length2, length2 - 1, compare); + if (0 !== count2) { + dest -= count2; + cursor2 -= count2; + length2 -= count2; + customDest = dest + 1; + customCursor = cursor2 + 1; + for (i = 0; i < count2; i++) array[customDest + i] = tmp[customCursor + i]; + if (length2 <= 1) { + exit = true; + break; + } + } + array[dest--] = array[cursor1--]; + if (0 === --length1) { + exit = true; + break; + } + minGallop--; + } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING); + if (exit) break; + minGallop < 0 && (minGallop = 0); + minGallop += 2; + } + this.minGallop = minGallop; + minGallop < 1 && (this.minGallop = 1); + if (1 === length2) { + dest -= length1; + cursor1 -= length1; + customDest = dest + 1; + customCursor = cursor1 + 1; + for (i = length1 - 1; i >= 0; i--) array[customDest + i] = array[customCursor + i]; + array[dest] = tmp[cursor2]; + } else { + if (0 === length2) throw new Error("mergeHigh preconditions were not respected"); + customCursor = dest - (length2 - 1); + for (i = 0; i < length2; i++) array[customCursor + i] = tmp[i]; + } + }; + return TimSort; + })(); + function _default(array, lo, hi, compare) { + if (!Array.isArray(array)) throw new TypeError("Can only sort arrays"); + void 0 === lo && (lo = 0); + void 0 === hi && (hi = array.length); + void 0 === compare && (compare = alphabeticalCompare); + var remaining = hi - lo; + if (remaining < 2) return; + var runLength = 0; + if (remaining < DEFAULT_MIN_MERGE) { + runLength = makeAscendingRun(array, lo, hi, compare); + binaryInsertionSort(array, lo, hi, lo + runLength, compare); + return; + } + var ts = new TimSort(array, compare); + var minRun = minRunLength(remaining); + do { + runLength = makeAscendingRun(array, lo, hi, compare); + if (runLength < minRun) { + var force = remaining; + force > minRun && (force = minRun); + binaryInsertionSort(array, lo, lo + force, lo + runLength, compare); + runLength = force; + } + ts.pushRun(lo, runLength); + ts.mergeRuns(); + remaining -= runLength; + lo += runLength; + } while (0 !== remaining); + ts.forceMergeRuns(); + } + module.exports = exports["default"]; + }), {} ], + 264: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _bufferPools = Array(8); + for (var i = 0; i < 8; ++i) _bufferPools[i] = []; + function _nextPow16(v) { + for (var _i = 16; _i <= 1 << 28; _i *= 16) if (v <= _i) return _i; + return 0; + } + function _log2(v) { + var r, shift; + r = (v > 65535) << 4; + v >>>= r; + shift = (v > 255) << 3; + v >>>= shift; + r |= shift; + shift = (v > 15) << 2; + v >>>= shift; + r |= shift; + shift = (v > 3) << 1; + v >>>= shift; + r |= shift; + return r | v >> 1; + } + function _alloc(n) { + var sz = _nextPow16(n); + var bin = _bufferPools[_log2(sz) >> 2]; + if (bin.length > 0) return bin.pop(); + return new ArrayBuffer(sz); + } + function _free(buf) { + _bufferPools[_log2(buf.byteLength) >> 2].push(buf); + } + var _default = { + alloc_int8: function alloc_int8(n) { + var result = new Int8Array(_alloc(n), 0, n); + if (result.length !== n) return result.subarray(0, n); + return result; + }, + alloc_uint8: function alloc_uint8(n) { + var result = new Uint8Array(_alloc(n), 0, n); + if (result.length !== n) return result.subarray(0, n); + return result; + }, + alloc_int16: function alloc_int16(n) { + var result = new Int16Array(_alloc(2 * n), 0, n); + if (result.length !== n) return result.subarray(0, n); + return result; + }, + alloc_uint16: function alloc_uint16(n) { + var result = new Uint16Array(_alloc(2 * n), 0, n); + if (result.length !== n) return result.subarray(0, n); + return result; + }, + alloc_int32: function alloc_int32(n) { + var result = new Int32Array(_alloc(4 * n), 0, n); + if (result.length !== n) return result.subarray(0, n); + return result; + }, + alloc_uint32: function alloc_uint32(n) { + var result = new Uint32Array(_alloc(4 * n), 0, n); + if (result.length !== n) return result.subarray(0, n); + return result; + }, + alloc_float32: function alloc_float32(n) { + var result = new Float32Array(_alloc(4 * n), 0, n); + if (result.length !== n) return result.subarray(0, n); + return result; + }, + alloc_float64: function alloc_float64(n) { + var result = new Float64Array(_alloc(8 * n), 0, n); + if (result.length !== n) return result.subarray(0, n); + return result; + }, + alloc_dataview: function alloc_dataview(n) { + var result = new DataView(_alloc(n), 0, n); + if (result.length !== n) return result.subarray(0, n); + return result; + }, + free: function free(array) { + _free(array.buffer); + }, + reset: function reset() { + var _bufferPools = Array(8); + for (var _i2 = 0; _i2 < 8; ++_i2) _bufferPools[_i2] = []; + } + }; + exports["default"] = _default; + module.exports = exports["default"]; + }), {} ], + 265: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = murmurhash2_32_gc; + function murmurhash2_32_gc(str, seed) { + var l = str.length, h = seed ^ l, i = 0, k; + while (l >= 4) { + k = 255 & str.charCodeAt(i) | (255 & str.charCodeAt(++i)) << 8 | (255 & str.charCodeAt(++i)) << 16 | (255 & str.charCodeAt(++i)) << 24; + k = 1540483477 * (65535 & k) + ((1540483477 * (k >>> 16) & 65535) << 16); + k ^= k >>> 24; + k = 1540483477 * (65535 & k) + ((1540483477 * (k >>> 16) & 65535) << 16); + h = 1540483477 * (65535 & h) + ((1540483477 * (h >>> 16) & 65535) << 16) ^ k; + l -= 4; + ++i; + } + switch (l) { + case 3: + h ^= (255 & str.charCodeAt(i + 2)) << 16; + + case 2: + h ^= (255 & str.charCodeAt(i + 1)) << 8; + + case 1: + h ^= 255 & str.charCodeAt(i); + h = 1540483477 * (65535 & h) + ((1540483477 * (h >>> 16) & 65535) << 16); + } + h ^= h >>> 13; + h = 1540483477 * (65535 & h) + ((1540483477 * (h >>> 16) & 65535) << 16); + h ^= h >>> 15; + return h >>> 0; + } + module.exports = exports["default"]; + }), {} ], + 266: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _valueTypes = require("../../core/value-types"); + var _baseRenderer = _interopRequireDefault(require("../core/base-renderer")); + var _enums = _interopRequireDefault(require("../enums")); + var _memop = require("../memop"); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _assertThisInitialized(self) { + if (void 0 === self) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return self; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var _a16_view = new Float32Array(16); + var _a16_view_inv = new Float32Array(16); + var _a16_proj = new Float32Array(16); + var _a16_viewProj = new Float32Array(16); + var _a4_camPos = new Float32Array(4); + var _a64_shadow_lightViewProj = new Float32Array(64); + var _a16_shadow_lightViewProjs = []; + var _a4_shadow_info = new Float32Array(4); + var _camPos = new _valueTypes.Vec4(0, 0, 0, 0); + var _camFwd = new _valueTypes.Vec3(0, 0, 0); + var _v3_tmp1 = new _valueTypes.Vec3(0, 0, 0); + var CC_MAX_LIGHTS = 4; + var CC_MAX_SHADOW_LIGHTS = 2; + var _float16_pool = new _memop.RecyclePool(function() { + return new Float32Array(16); + }, 8); + function sortView(a, b) { + return a._priority - b._priority; + } + var ForwardRenderer = (function(_BaseRenderer) { + _inheritsLoose(ForwardRenderer, _BaseRenderer); + function ForwardRenderer(device, builtin) { + var _this; + _this = _BaseRenderer.call(this, device, builtin) || this; + _this._time = new Float32Array(4); + _this._lights = []; + _this._shadowLights = []; + _this._numLights = 0; + _this._defines = {}; + _this._registerStage("shadowcast", _this._shadowStage.bind(_assertThisInitialized(_this))); + _this._registerStage("opaque", _this._opaqueStage.bind(_assertThisInitialized(_this))); + _this._registerStage("transparent", _this._transparentStage.bind(_assertThisInitialized(_this))); + return _this; + } + var _proto = ForwardRenderer.prototype; + _proto.reset = function reset() { + _float16_pool.reset(); + _BaseRenderer.prototype.reset.call(this); + }; + _proto.render = function render(scene, dt) { + this.reset(); + true; + if (dt) { + this._time[0] += dt; + this._time[1] = dt; + this._time[2]++; + } + this._device.setUniform("cc_time", this._time); + this._updateLights(scene); + var canvas = this._device._gl.canvas; + for (var i = 0; i < scene._cameras.length; ++i) { + var view = this._requestView(); + var width = canvas.width; + var height = canvas.height; + var camera = scene._cameras.data[i]; + camera.extractView(view, width, height); + } + this._viewPools.sort(sortView); + for (var _i = 0; _i < this._viewPools.length; ++_i) { + var _view = this._viewPools.data[_i]; + this._render(_view, scene); + } + }; + _proto.renderCamera = function renderCamera(camera, scene) { + this.reset(); + this._updateLights(scene); + var canvas = this._device._gl.canvas; + var width = canvas.width; + var height = canvas.height; + var view = this._requestView(); + camera.extractView(view, width, height); + this._viewPools.sort(sortView); + for (var i = 0; i < this._viewPools.length; ++i) { + var _view2 = this._viewPools.data[i]; + this._render(_view2, scene); + } + }; + _proto._updateLights = function _updateLights(scene) { + this._lights.length = 0; + this._shadowLights.length = 0; + var lights = scene._lights; + for (var i = 0; i < lights.length; ++i) { + var light = lights.data[i]; + light.update(this._device); + if (light.shadowType !== _enums["default"].SHADOW_NONE) { + this._shadowLights.length < CC_MAX_SHADOW_LIGHTS && this._shadowLights.splice(0, 0, light); + var view = this._requestView(); + light.extractView(view, [ "shadowcast" ]); + this._lights.splice(0, 0, light); + } else this._lights.push(light); + } + this._updateLightDefines(); + this._numLights = lights._count; + }; + _proto._updateLightDefines = function _updateLightDefines() { + var defines = this._defines; + for (var i = 0; i < this._lights.length; ++i) { + var light = this._lights[i]; + var lightKey = "CC_LIGHT_" + i + "_TYPE"; + var shadowKey = "CC_SHADOW_" + i + "_TYPE"; + if (defines[lightKey] !== light._type) { + defines[lightKey] = light._type; + this._definesChanged = true; + } + if (defines[shadowKey] !== light._shadowType) { + defines[shadowKey] = light._shadowType; + this._definesChanged = true; + } + } + var newCount = Math.min(CC_MAX_LIGHTS, this._lights.length); + if (defines.CC_NUM_LIGHTS !== newCount) { + defines.CC_NUM_LIGHTS = newCount; + this._definesChanged = true; + } + newCount = Math.min(CC_MAX_LIGHTS, this._shadowLights.length); + if (defines.CC_NUM_SHADOW_LIGHTS !== newCount) { + defines.CC_NUM_SHADOW_LIGHTS = newCount; + this._definesChanged = true; + } + }; + _proto._submitLightsUniforms = function _submitLightsUniforms() { + var device = this._device; + if (this._lights.length > 0) { + var positionAndRanges = _float16_pool.add(); + var directions = _float16_pool.add(); + var colors = _float16_pool.add(); + var lightNum = Math.min(CC_MAX_LIGHTS, this._lights.length); + for (var i = 0; i < lightNum; ++i) { + var light = this._lights[i]; + var index = 4 * i; + colors.set(light._colorUniform, index); + directions.set(light._directionUniform, index); + positionAndRanges.set(light._positionUniform, index); + positionAndRanges[index + 3] = light._range; + if (light._type === _enums["default"].LIGHT_SPOT) { + directions[index + 3] = light._spotUniform[0]; + colors[index + 3] = light._spotUniform[1]; + } else { + directions[index + 3] = 0; + colors[index + 3] = 0; + } + } + device.setUniform("cc_lightDirection", directions); + device.setUniform("cc_lightColor", colors); + device.setUniform("cc_lightPositionAndRange", positionAndRanges); + } + }; + _proto._submitShadowStageUniforms = function _submitShadowStageUniforms(view) { + var light = view._shadowLight; + var shadowInfo = _a4_shadow_info; + shadowInfo[0] = light.shadowMinDepth; + shadowInfo[1] = light.shadowMaxDepth; + shadowInfo[2] = light.shadowDepthScale; + shadowInfo[3] = light.shadowDarkness; + this._device.setUniform("cc_shadow_map_lightViewProjMatrix", _valueTypes.Mat4.toArray(_a16_viewProj, view._matViewProj)); + this._device.setUniform("cc_shadow_map_info", shadowInfo); + this._device.setUniform("cc_shadow_map_bias", light.shadowBias); + this._defines.CC_SHADOW_TYPE = light._shadowType; + }; + _proto._submitOtherStagesUniforms = function _submitOtherStagesUniforms() { + var shadowInfo = _float16_pool.add(); + for (var i = 0; i < this._shadowLights.length; ++i) { + var light = this._shadowLights[i]; + var view = _a16_shadow_lightViewProjs[i]; + view || (view = _a16_shadow_lightViewProjs[i] = new Float32Array(_a64_shadow_lightViewProj.buffer, 64 * i, 16)); + _valueTypes.Mat4.toArray(view, light.viewProjMatrix); + var index = 4 * i; + shadowInfo[index] = light.shadowMinDepth; + shadowInfo[index + 1] = light.shadowMaxDepth; + shadowInfo[index + 2] = light._shadowResolution; + shadowInfo[index + 3] = light.shadowDarkness; + } + this._device.setUniform("cc_shadow_lightViewProjMatrix", _a64_shadow_lightViewProj); + this._device.setUniform("cc_shadow_info", shadowInfo); + }; + _proto._sortItems = function _sortItems(items) { + items.sort((function(a, b) { + if (a.passes.length !== b.passes.length) return a.passes.length - b.passes.length; + return a.sortKey - b.sortKey; + })); + }; + _proto._shadowStage = function _shadowStage(view, items) { + this._submitShadowStageUniforms(view); + for (var i = 0; i < items.length; ++i) { + var item = items.data[i]; + item.effect.getDefine("CC_CASTING_SHADOW") && this._draw(item); + } + }; + _proto._drawItems = function _drawItems(view, items) { + var shadowLights = this._shadowLights; + if (0 === shadowLights.length && 0 === this._numLights) for (var i = 0; i < items.length; ++i) { + var item = items.data[i]; + this._draw(item); + } else for (var _i2 = 0; _i2 < items.length; ++_i2) { + var _item = items.data[_i2]; + for (var shadowIdx = 0; shadowIdx < shadowLights.length; ++shadowIdx) this._device.setTexture("cc_shadow_map_" + shadowIdx, shadowLights[shadowIdx].shadowMap, this._allocTextureUnit()); + this._draw(_item); + } + }; + _proto._opaqueStage = function _opaqueStage(view, items) { + view.getPosition(_camPos); + this._device.setUniform("cc_matView", _valueTypes.Mat4.toArray(_a16_view, view._matView)); + this._device.setUniform("cc_matViewInv", _valueTypes.Mat4.toArray(_a16_view_inv, view._matViewInv)); + this._device.setUniform("cc_matProj", _valueTypes.Mat4.toArray(_a16_proj, view._matProj)); + this._device.setUniform("cc_matViewProj", _valueTypes.Mat4.toArray(_a16_viewProj, view._matViewProj)); + this._device.setUniform("cc_cameraPos", _valueTypes.Vec4.toArray(_a4_camPos, _camPos)); + this._submitLightsUniforms(); + this._submitOtherStagesUniforms(); + this._drawItems(view, items); + }; + _proto._transparentStage = function _transparentStage(view, items) { + view.getPosition(_camPos); + view.getForward(_camFwd); + this._device.setUniform("cc_matView", _valueTypes.Mat4.toArray(_a16_view, view._matView)); + this._device.setUniform("cc_matViewInv", _valueTypes.Mat4.toArray(_a16_view_inv, view._matViewInv)); + this._device.setUniform("cc_matProj", _valueTypes.Mat4.toArray(_a16_proj, view._matProj)); + this._device.setUniform("cc_matViewProj", _valueTypes.Mat4.toArray(_a16_viewProj, view._matViewProj)); + this._device.setUniform("cc_cameraPos", _valueTypes.Vec4.toArray(_a4_camPos, _camPos)); + this._submitLightsUniforms(); + this._submitOtherStagesUniforms(); + for (var i = 0; i < items.length; ++i) { + var item = items.data[i]; + item.node.getWorldPosition(_v3_tmp1); + _valueTypes.Vec3.sub(_v3_tmp1, _v3_tmp1, _camPos); + item.sortKey = -_valueTypes.Vec3.dot(_v3_tmp1, _camFwd); + } + this._sortItems(items); + this._drawItems(view, items); + }; + return ForwardRenderer; + })(_baseRenderer["default"]); + exports["default"] = ForwardRenderer; + module.exports = exports["default"]; + }), { + "../../core/value-types": 220, + "../core/base-renderer": 236, + "../enums": 242, + "../memop": 259 + } ], + 267: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _valueTypes = require("../../core/value-types"); + var _geomUtils = require("../../core/geom-utils"); + var _enums = _interopRequireDefault(require("../enums")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + "value" in descriptor && (descriptor.writable = true); + Object.defineProperty(target, descriptor.key, descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + protoProps && _defineProperties(Constructor.prototype, protoProps); + staticProps && _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + var _tmp_mat4 = new _valueTypes.Mat4(); + var _matView = new _valueTypes.Mat4(); + var _matViewInv = new _valueTypes.Mat4(); + var _matProj = new _valueTypes.Mat4(); + var _matViewProj = new _valueTypes.Mat4(); + var _matInvViewProj = new _valueTypes.Mat4(); + var _tmp_v3 = new _valueTypes.Vec3(); + var _tmp2_v3 = new _valueTypes.Vec3(); + var Camera = (function() { + function Camera() { + this._poolID = -1; + this._node = null; + this._projection = _enums["default"].PROJ_PERSPECTIVE; + this._priority = 0; + this._color = new _valueTypes.Vec4(.2, .3, .47, 1); + this._depth = 1; + this._stencil = 0; + this._clearFlags = _enums["default"].CLEAR_COLOR | _enums["default"].CLEAR_DEPTH; + this._clearModel = null; + this._stages = []; + this._framebuffer = null; + this._near = .01; + this._far = 1e3; + this._fov = Math.PI / 4; + this._rect = { + x: 0, + y: 0, + w: 1, + h: 1 + }; + this._orthoHeight = 10; + this._cullingMask = 4294967295; + } + var _proto = Camera.prototype; + _proto.setCullingMask = function setCullingMask(mask) { + this._cullingMask = mask; + }; + _proto.getNode = function getNode() { + return this._node; + }; + _proto.setNode = function setNode(node) { + this._node = node; + }; + _proto.getType = function getType() { + return this._projection; + }; + _proto.setType = function setType(type) { + this._projection = type; + }; + _proto.getPriority = function getPriority() { + return this._priority; + }; + _proto.setPriority = function setPriority(priority) { + this._priority = priority; + }; + _proto.getOrthoHeight = function getOrthoHeight() { + return this._orthoHeight; + }; + _proto.setOrthoHeight = function setOrthoHeight(val) { + this._orthoHeight = val; + }; + _proto.getFov = function getFov() { + return this._fov; + }; + _proto.setFov = function setFov(fov) { + this._fov = fov; + }; + _proto.getNear = function getNear() { + return this._near; + }; + _proto.setNear = function setNear(near) { + this._near = near; + }; + _proto.getFar = function getFar() { + return this._far; + }; + _proto.setFar = function setFar(far) { + this._far = far; + }; + _proto.getColor = function getColor(out) { + return _valueTypes.Vec4.copy(out, this._color); + }; + _proto.setColor = function setColor(r, g, b, a) { + _valueTypes.Vec4.set(this._color, r, g, b, a); + }; + _proto.getDepth = function getDepth() { + return this._depth; + }; + _proto.setDepth = function setDepth(depth) { + this._depth = depth; + }; + _proto.getStencil = function getStencil() { + return this._stencil; + }; + _proto.setStencil = function setStencil(stencil) { + this._stencil = stencil; + }; + _proto.getClearFlags = function getClearFlags() { + return this._clearFlags; + }; + _proto.setClearFlags = function setClearFlags(flags) { + this._clearFlags = flags; + }; + _proto.getRect = function getRect(out) { + out.x = this._rect.x; + out.y = this._rect.y; + out.w = this._rect.w; + out.h = this._rect.h; + return out; + }; + _proto.setRect = function setRect(x, y, w, h) { + this._rect.x = x; + this._rect.y = y; + this._rect.w = w; + this._rect.h = h; + }; + _proto.getStages = function getStages() { + return this._stages; + }; + _proto.setStages = function setStages(stages) { + this._stages = stages; + }; + _proto.getFramebuffer = function getFramebuffer() { + return this._framebuffer; + }; + _proto.setFrameBuffer = function setFrameBuffer(framebuffer) { + this._framebuffer = framebuffer; + }; + _proto._calcMatrices = function _calcMatrices(width, height) { + this._node.getWorldRT(_matViewInv); + _valueTypes.Mat4.invert(_matView, _matViewInv); + var aspect = width / height; + if (this._projection === _enums["default"].PROJ_PERSPECTIVE) _valueTypes.Mat4.perspective(_matProj, this._fov, aspect, this._near, this._far); else { + var x = this._orthoHeight * aspect; + var y = this._orthoHeight; + _valueTypes.Mat4.ortho(_matProj, -x, x, -y, y, this._near, this._far); + } + _valueTypes.Mat4.mul(_matViewProj, _matProj, _matView); + _valueTypes.Mat4.invert(_matInvViewProj, _matViewProj); + }; + _proto.extractView = function extractView(out, width, height) { + if (this._framebuffer) { + width = this._framebuffer._width; + height = this._framebuffer._height; + } + out._priority = this._priority; + out._rect.x = this._rect.x * width; + out._rect.y = this._rect.y * height; + out._rect.w = this._rect.w * width; + out._rect.h = this._rect.h * height; + this.getColor(out._color); + out._depth = this._depth; + out._stencil = this._stencil; + out._clearFlags = this._clearFlags; + out._clearModel = this._clearModel; + out._stages = this._stages; + out._framebuffer = this._framebuffer; + this._calcMatrices(width, height); + _valueTypes.Mat4.copy(out._matView, _matView); + _valueTypes.Mat4.copy(out._matViewInv, _matViewInv); + _valueTypes.Mat4.copy(out._matProj, _matProj); + _valueTypes.Mat4.copy(out._matViewProj, _matViewProj); + _valueTypes.Mat4.copy(out._matInvViewProj, _matInvViewProj); + out._cullingMask = this._cullingMask; + }; + _proto.screenPointToRay = function screenPointToRay(x, y, width, height, out) { + if (!cc.geomUtils) return out; + out = out || new _geomUtils.Ray(); + this._calcMatrices(width, height); + var cx = this._rect.x * width; + var cy = this._rect.y * height; + var cw = this._rect.w * width; + var ch = this._rect.h * height; + _valueTypes.Vec3.set(_tmp2_v3, (x - cx) / cw * 2 - 1, (y - cy) / ch * 2 - 1, 1); + _valueTypes.Vec3.transformMat4(_tmp2_v3, _tmp2_v3, _matInvViewProj); + if (this._projection === _enums["default"].PROJ_PERSPECTIVE) this._node.getWorldPosition(_tmp_v3); else { + _valueTypes.Vec3.set(_tmp_v3, (x - cx) / cw * 2 - 1, (y - cy) / ch * 2 - 1, -1); + _valueTypes.Vec3.transformMat4(_tmp_v3, _tmp_v3, _matInvViewProj); + } + return _geomUtils.Ray.fromPoints(out, _tmp_v3, _tmp2_v3); + }; + _proto.screenToWorld = function screenToWorld(out, screenPos, width, height) { + this._calcMatrices(width, height); + var cx = this._rect.x * width; + var cy = this._rect.y * height; + var cw = this._rect.w * width; + var ch = this._rect.h * height; + if (this._projection === _enums["default"].PROJ_PERSPECTIVE) { + _valueTypes.Vec3.set(out, (screenPos.x - cx) / cw * 2 - 1, (screenPos.y - cy) / ch * 2 - 1, .9999); + _valueTypes.Vec3.transformMat4(out, out, _matInvViewProj); + this._node.getWorldPosition(_tmp_v3); + _valueTypes.Vec3.lerp(out, _tmp_v3, out, (0, _valueTypes.lerp)(this._near / this._far, 1, screenPos.z)); + } else { + _valueTypes.Vec3.set(out, (screenPos.x - cx) / cw * 2 - 1, (screenPos.y - cy) / ch * 2 - 1, 2 * screenPos.z - 1); + _valueTypes.Vec3.transformMat4(out, out, _matInvViewProj); + } + return out; + }; + _proto.worldToScreen = function worldToScreen(out, worldPos, width, height) { + this._calcMatrices(width, height); + var cx = this._rect.x * width; + var cy = this._rect.y * height; + var cw = this._rect.w * width; + var ch = this._rect.h * height; + _valueTypes.Vec3.transformMat4(out, worldPos, _matViewProj); + out.x = cx + .5 * (out.x + 1) * cw; + out.y = cy + .5 * (out.y + 1) * ch; + out.z = .5 * out.z + .5; + return out; + }; + _proto.worldMatrixToScreen = function worldMatrixToScreen(out, worldMatrix, width, height) { + this._calcMatrices(width, height); + _valueTypes.Mat4.mul(out, _matViewProj, worldMatrix); + var halfWidth = width / 2; + var halfHeight = height / 2; + _valueTypes.Mat4.identity(_tmp_mat4); + _valueTypes.Mat4.transform(_tmp_mat4, _tmp_mat4, _valueTypes.Vec3.set(_tmp_v3, halfWidth, halfHeight, 0)); + _valueTypes.Mat4.scale(_tmp_mat4, _tmp_mat4, _valueTypes.Vec3.set(_tmp_v3, halfWidth, halfHeight, 1)); + _valueTypes.Mat4.mul(out, _tmp_mat4, out); + return out; + }; + _createClass(Camera, [ { + key: "cullingMask", + get: function get() { + return this._cullingMask; + }, + set: function set(mask) { + this._cullingMask = mask; + } + } ]); + return Camera; + })(); + exports["default"] = Camera; + module.exports = exports["default"]; + }), { + "../../core/geom-utils": void 0, + "../../core/value-types": 220, + "../enums": 242 + } ], + 268: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var Model = (function() { + function Model() { + this._type = "default"; + this._poolID = -1; + this._node = null; + this._inputAssembler = null; + this._effect = null; + this._viewID = -1; + this._cameraID = -1; + this._userKey = -1; + this._castShadow = false; + this._boundingShape = null; + } + var _proto = Model.prototype; + _proto.setNode = function setNode(node) { + this._node = node; + }; + _proto.setInputAssembler = function setInputAssembler(ia) { + this._inputAssembler = ia; + }; + _proto.setEffect = function setEffect(effect) { + this._effect = effect; + }; + _proto.setUserKey = function setUserKey(key) { + this._userKey = key; + }; + _proto.extractDrawItem = function extractDrawItem(out) { + out.model = this; + out.node = this._node; + out.ia = this._inputAssembler; + out.effect = this._effect; + }; + return Model; + })(); + exports["default"] = Model; + module.exports = exports["default"]; + }), {} ], + 269: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _memop = require("../memop"); + var Scene = (function() { + function Scene(app) { + this._lights = new _memop.FixedArray(16); + this._models = new _memop.FixedArray(16); + this._cameras = new _memop.FixedArray(16); + this._debugCamera = null; + this._app = app; + this._views = []; + } + var _proto = Scene.prototype; + _proto._add = function _add(pool, item) { + if (-1 !== item._poolID) return; + pool.push(item); + item._poolID = pool.length - 1; + }; + _proto._remove = function _remove(pool, item) { + if (-1 === item._poolID) return; + pool.data[pool.length - 1]._poolID = item._poolID; + pool.fastRemove(item._poolID); + item._poolID = -1; + }; + _proto.reset = function reset() { + for (var i = 0; i < this._models.length; ++i) { + var model = this._models.data[i]; + model._viewID = -1; + } + }; + _proto.setDebugCamera = function setDebugCamera(cam) { + this._debugCamera = cam; + }; + _proto.getCameraCount = function getCameraCount() { + return this._cameras.length; + }; + _proto.getCamera = function getCamera(idx) { + return this._cameras.data[idx]; + }; + _proto.addCamera = function addCamera(camera) { + this._add(this._cameras, camera); + }; + _proto.removeCamera = function removeCamera(camera) { + this._remove(this._cameras, camera); + }; + _proto.getModelCount = function getModelCount() { + return this._models.length; + }; + _proto.getModel = function getModel(idx) { + return this._models.data[idx]; + }; + _proto.addModel = function addModel(model) { + this._add(this._models, model); + }; + _proto.removeModel = function removeModel(model) { + this._remove(this._models, model); + }; + _proto.getLightCount = function getLightCount() { + return this._lights.length; + }; + _proto.getLight = function getLight(idx) { + return this._lights.data[idx]; + }; + _proto.addLight = function addLight(light) { + this._add(this._lights, light); + }; + _proto.removeLight = function removeLight(light) { + this._remove(this._lights, light); + }; + _proto.addView = function addView(view) { + -1 === this._views.indexOf(view) && this._views.push(view); + }; + _proto.removeView = function removeView(view) { + var idx = this._views.indexOf(view); + -1 !== idx && this._views.splice(idx, 1); + }; + return Scene; + })(); + var _default = Scene; + exports["default"] = _default; + module.exports = exports["default"]; + }), { + "../memop": 259 + } ], + 270: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.getClassName = exports.enums2default = exports.ctor2enums = void 0; + exports.getInspectorProps = getInspectorProps; + exports.getInstanceType = exports.getInstanceCtor = void 0; + var _enums = _interopRequireDefault(require("./enums")); + var _valueTypes = require("../core/value-types"); + var _CCTexture2D = _interopRequireDefault(require("../core/assets/CCTexture2D")); + var _ctor2default, _enums2ctor, _ctor2enums, _enums2default; + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var gfxTexture2D = null, gfxTextureCube = null; + false; + gfxTexture2D = require("./gfx/texture-2d"); + var CCObject = cc.Object; + var ctor2default = (_ctor2default = {}, _ctor2default[Boolean] = function(v) { + return v || false; + }, _ctor2default[Number] = function(v) { + return v ? ArrayBuffer.isView(v) ? v[0] : v : 0; + }, _ctor2default[_valueTypes.Vec2] = function(v) { + return v ? cc.v2(v[0], v[1]) : cc.v2(); + }, _ctor2default[_valueTypes.Vec3] = function(v) { + return v ? cc.v3(v[0], v[1], v[2]) : cc.v3(); + }, _ctor2default[_valueTypes.Vec4] = function(v) { + return v ? cc.v4(v[0], v[1], v[2], v[3]) : cc.v4(); + }, _ctor2default[_valueTypes.Color] = function(v) { + return v ? cc.color(255 * v[0], 255 * v[1], 255 * v[2], 255 * (v[3] || 1)) : cc.color(); + }, _ctor2default[_valueTypes.Mat4] = function(v) { + return v ? cc.mat4(v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9], v[10], v[11], v[12], v[13], v[14], v[15]) : cc.mat4(); + }, _ctor2default[_CCTexture2D["default"]] = function() { + return null; + }, _ctor2default[CCObject] = function() { + return null; + }, _ctor2default); + var enums2ctor = (_enums2ctor = {}, _enums2ctor[_enums["default"].PARAM_INT] = Number, + _enums2ctor[_enums["default"].PARAM_INT2] = _valueTypes.Vec2, _enums2ctor[_enums["default"].PARAM_INT3] = _valueTypes.Vec3, + _enums2ctor[_enums["default"].PARAM_INT4] = _valueTypes.Vec4, _enums2ctor[_enums["default"].PARAM_FLOAT] = Number, + _enums2ctor[_enums["default"].PARAM_FLOAT2] = _valueTypes.Vec2, _enums2ctor[_enums["default"].PARAM_FLOAT3] = _valueTypes.Vec3, + _enums2ctor[_enums["default"].PARAM_FLOAT4] = _valueTypes.Vec4, _enums2ctor[_enums["default"].PARAM_MAT4] = _valueTypes.Mat4, + _enums2ctor[_enums["default"].PARAM_TEXTURE_2D] = _CCTexture2D["default"], _enums2ctor.color = _valueTypes.Color, + _enums2ctor.number = Number, _enums2ctor["boolean"] = Boolean, _enums2ctor["default"] = CCObject, + _enums2ctor); + var ctor2enums = (_ctor2enums = {}, _ctor2enums[Number] = _enums["default"].PARAM_FLOAT, + _ctor2enums[_valueTypes.Vec2] = _enums["default"].PARAM_FLOAT2, _ctor2enums[_valueTypes.Vec3] = _enums["default"].PARAM_FLOAT3, + _ctor2enums[_valueTypes.Vec4] = _enums["default"].PARAM_FLOAT4, _ctor2enums[_valueTypes.Color] = _enums["default"].PARAM_COLOR3, + _ctor2enums[_valueTypes.Color] = _enums["default"].PARAM_COLOR4, _ctor2enums[_valueTypes.Mat4] = _enums["default"].PARAM_MAT4, + _ctor2enums[_CCTexture2D["default"]] = _enums["default"].PARAM_TEXTURE_2D, _ctor2enums[gfxTexture2D] = _enums["default"].PARAM_TEXTURE_2D, + _ctor2enums); + exports.ctor2enums = ctor2enums; + var enums2default = (_enums2default = {}, _enums2default[_enums["default"].PARAM_INT] = new Uint32Array([ 0 ]), + _enums2default[_enums["default"].PARAM_INT2] = new Uint32Array([ 0, 0 ]), _enums2default[_enums["default"].PARAM_INT3] = new Uint32Array([ 0, 0, 0 ]), + _enums2default[_enums["default"].PARAM_INT4] = new Uint32Array([ 0, 0, 0, 0 ]), + _enums2default[_enums["default"].PARAM_FLOAT] = new Float32Array([ 0 ]), _enums2default[_enums["default"].PARAM_FLOAT2] = new Float32Array([ 0, 0 ]), + _enums2default[_enums["default"].PARAM_FLOAT3] = new Float32Array([ 0, 0, 0 ]), + _enums2default[_enums["default"].PARAM_FLOAT4] = new Float32Array([ 0, 0, 0, 0 ]), + _enums2default[_enums["default"].PARAM_MAT4] = cc.mat4().m, _enums2default[_enums["default"].PARAM_TEXTURE_2D] = null, + _enums2default.number = 0, _enums2default["boolean"] = false, _enums2default); + exports.enums2default = enums2default; + var getInstanceType = function getInstanceType(t) { + return enums2ctor[t] || enums2ctor["default"]; + }; + exports.getInstanceType = getInstanceType; + var getInstanceCtor = function getInstanceCtor(t) { + return ctor2default[getInstanceType(t)]; + }; + exports.getInstanceCtor = getInstanceCtor; + var getClassName = function getClassName(t) { + return cc.js.getClassName(getInstanceType(t)); + }; + exports.getClassName = getClassName; + var className2InspectorName = { + Number: "number", + Boolean: "boolean" + }; + function getInspectorProps(prop) { + var editor = { + type: prop.type + }; + Object.assign(editor, prop.editor || prop.inspector); + editor.defines = prop.defines; + editor.value = getInstanceCtor(editor.type)(prop.value); + prop.range && (editor.range = prop.range); + var className = getClassName(editor.type); + editor.typeName = className2InspectorName[className] || className; + editor.valueCtor = enums2ctor[editor.type]; + if ("cc.Texture2D" == editor.typeName) { + editor.typeName = "cc.Asset"; + editor.assetType = "cc.Texture2D"; + } + return editor; + } + }), { + "../core/assets/CCTexture2D": 72, + "../core/value-types": 220, + "./enums": 242, + "./gfx/texture-2d": 252 + } ], + 271: [ (function(require, module, exports) { + "use strict"; + var TiledMapAsset = cc.Class({ + name: "cc.TiledMapAsset", + extends: cc.Asset, + properties: { + tmxXmlStr: "", + textures: { + default: [], + type: [ cc.Texture2D ] + }, + textureNames: [ cc.String ], + textureSizes: { + default: [], + type: [ cc.Size ] + }, + imageLayerTextures: { + default: [], + type: [ cc.Texture2D ] + }, + imageLayerTextureNames: [ cc.String ], + tsxFiles: [ cc.TextAsset ], + tsxFileNames: [ cc.String ] + }, + statics: { + preventDeferredLoadDependents: true + }, + createNode: false + }); + cc.TiledMapAsset = TiledMapAsset; + module.exports = TiledMapAsset; + }), {} ], + 272: [ (function(require, module, exports) { + "use strict"; + require("./cocos2d/core"); + require("./cocos2d/animation"); + false; + require("./cocos2d/particle"); + require("./cocos2d/tilemap"); + require("./cocos2d/videoplayer/CCVideoPlayer"); + require("./cocos2d/webview/CCWebView"); + require("./cocos2d/core/components/CCStudioComponent"); + require("./extensions/ccpool/CCNodePool"); + require("./cocos2d/actions"); + require("./extensions/spine"); + require("./extensions/dragonbones"); + true; + require("./cocos2d/deprecated"); + }), { + "./cocos2d/actions": 8, + "./cocos2d/animation": 17, + "./cocos2d/core": 119, + "./cocos2d/core/components/CCStudioComponent": void 0, + "./cocos2d/deprecated": 232, + "./cocos2d/particle": void 0, + "./cocos2d/particle/CCParticleAsset": 234, + "./cocos2d/tilemap": void 0, + "./cocos2d/tilemap/CCTiledMapAsset": 271, + "./cocos2d/videoplayer/CCVideoPlayer": void 0, + "./cocos2d/webview/CCWebView": void 0, + "./extensions/ccpool/CCNodePool": void 0, + "./extensions/dragonbones": void 0, + "./extensions/spine": 275 + } ], + 273: [ (function(require, module, exports) { + "use strict"; + var _mat = _interopRequireDefault(require("../../cocos2d/core/value-types/mat4")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var RenderFlow = require("../../cocos2d/core/renderer/render-flow"); + var FLAG_TRANSFORM = RenderFlow.FLAG_TRANSFORM; + var EmptyHandle = function EmptyHandle() {}; + var ATTACHED_ROOT_NAME = "ATTACHED_NODE_TREE"; + var ATTACHED_PRE_NAME = "ATTACHED_NODE:"; + var limitNode = function limitNode(node) { + Object.defineProperty(node, "_worldMatDirty", { + get: function get() { + return true; + }, + set: function set(value) {} + }); + node._calculWorldMatrix = EmptyHandle; + node._mulMat = EmptyHandle; + }; + var _tempMat4 = new _mat["default"](); + var AttachUtil = cc.Class({ + name: "sp.AttachUtil", + ctor: function ctor() { + this._inited = false; + this._skeleton = null; + this._skeletonNode = null; + this._skeletonComp = null; + this._attachedRootNode = null; + this._attachedNodeArray = []; + this._boneIndexToNode = {}; + }, + init: function init(skeletonComp) { + this._inited = true; + this._skeleton = skeletonComp._skeleton; + this._skeletonNode = skeletonComp.node; + this._skeletonComp = skeletonComp; + }, + reset: function reset() { + this._inited = false; + this._skeleton = null; + this._skeletonNode = null; + this._skeletonComp = null; + }, + _prepareAttachNode: function _prepareAttachNode() { + var armature = this._skeleton; + if (!armature) return; + var rootNode = this._skeletonNode.getChildByName(ATTACHED_ROOT_NAME); + if (!rootNode || !rootNode.isValid) { + rootNode = new cc.Node(ATTACHED_ROOT_NAME); + limitNode(rootNode); + this._skeletonNode.addChild(rootNode); + } + var isCached = this._skeletonComp.isAnimationCached(); + isCached && this._skeletonComp._frameCache && this._skeletonComp._frameCache.enableCacheAttachedInfo(); + this._attachedRootNode = rootNode; + return rootNode; + }, + _buildBoneAttachedNode: function _buildBoneAttachedNode(bone, boneIndex) { + var boneNodeName = ATTACHED_PRE_NAME + bone.data.name; + var boneNode = new cc.Node(boneNodeName); + this._buildBoneRelation(boneNode, bone, boneIndex); + return boneNode; + }, + _buildBoneRelation: function _buildBoneRelation(boneNode, bone, boneIndex) { + limitNode(boneNode); + boneNode._bone = bone; + boneNode._boneIndex = boneIndex; + this._attachedNodeArray.push(boneNode); + this._boneIndexToNode[boneIndex] = boneNode; + }, + getAttachedRootNode: function getAttachedRootNode() { + return this._attachedRootNode; + }, + getAttachedNodes: function getAttachedNodes(boneName) { + var nodeArray = this._attachedNodeArray; + var res = []; + if (!this._inited) return res; + for (var i = 0, n = nodeArray.length; i < n; i++) { + var boneNode = nodeArray[i]; + if (!boneNode || !boneNode.isValid) continue; + boneNode.name === ATTACHED_PRE_NAME + boneName && res.push(boneNode); + } + return res; + }, + _rebuildNodeArray: function _rebuildNodeArray() { + var findMap = this._boneIndexToNode = {}; + var oldNodeArray = this._attachedNodeArray; + var nodeArray = this._attachedNodeArray = []; + for (var i = 0, n = oldNodeArray.length; i < n; i++) { + var boneNode = oldNodeArray[i]; + if (!boneNode || !boneNode.isValid || boneNode._toRemove) continue; + nodeArray.push(boneNode); + findMap[boneNode._boneIndex] = boneNode; + } + }, + _sortNodeArray: function _sortNodeArray() { + var nodeArray = this._attachedNodeArray; + nodeArray.sort((function(a, b) { + return a._boneIndex < b._boneIndex ? -1 : 1; + })); + }, + _getNodeByBoneIndex: function _getNodeByBoneIndex(boneIndex) { + var findMap = this._boneIndexToNode; + var boneNode = findMap[boneIndex]; + if (!boneNode || !boneNode.isValid) return null; + return boneNode; + }, + destroyAttachedNodes: function destroyAttachedNodes(boneName) { + if (!this._inited) return; + var nodeArray = this._attachedNodeArray; + var markTree = function markTree(rootNode) { + var children = rootNode.children; + for (var i = 0, n = children.length; i < n; i++) { + var c = children[i]; + c && markTree(c); + } + rootNode._toRemove = true; + }; + for (var i = 0, n = nodeArray.length; i < n; i++) { + var boneNode = nodeArray[i]; + if (!boneNode || !boneNode.isValid) continue; + var delName = boneNode.name.split(ATTACHED_PRE_NAME)[1]; + if (delName === boneName) { + markTree(boneNode); + boneNode.removeFromParent(true); + boneNode.destroy(); + nodeArray[i] = null; + } + } + this._rebuildNodeArray(); + }, + generateAttachedNodes: function generateAttachedNodes(boneName) { + var targetNodes = []; + if (!this._inited) return targetNodes; + var rootNode = this._prepareAttachNode(); + if (!rootNode) return targetNodes; + var res = []; + var bones = this._skeleton.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + var boneData = bone.data; + boneData.name == boneName && res.push(bone); + } + var buildBoneTree = function(bone) { + if (!bone) return; + var boneData = bone.data; + var boneNode = this._getNodeByBoneIndex(boneData.index); + if (boneNode) return boneNode; + boneNode = this._buildBoneAttachedNode(bone, boneData.index); + var parentBoneNode = buildBoneTree(bone.parent) || rootNode; + boneNode.parent = parentBoneNode; + return boneNode; + }.bind(this); + for (var _i = 0, _n = res.length; _i < _n; _i++) { + var targetNode = buildBoneTree(res[_i]); + targetNodes.push(targetNode); + } + this._sortNodeArray(); + return targetNodes; + }, + destroyAllAttachedNodes: function destroyAllAttachedNodes() { + this._attachedRootNode = null; + this._attachedNodeArray.length = 0; + this._boneIndexToNode = {}; + if (!this._inited) return; + var rootNode = this._skeletonNode.getChildByName(ATTACHED_ROOT_NAME); + if (rootNode) { + rootNode.removeFromParent(true); + rootNode.destroy(); + rootNode = null; + } + }, + generateAllAttachedNodes: function generateAllAttachedNodes() { + if (!this._inited) return; + this._boneIndexToNode = {}; + this._attachedNodeArray.length = 0; + var rootNode = this._prepareAttachNode(); + if (!rootNode) return; + var bones = this._skeleton.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + var boneData = bone.data; + var parentNode = null; + if (bone.parent) { + var parentIndex = bone.parent.data.index; + parentNode = this._boneIndexToNode[parentIndex]; + } else parentNode = rootNode; + if (parentNode) { + var boneNode = parentNode.getChildByName(ATTACHED_PRE_NAME + boneData.name); + if (boneNode && boneNode.isValid) this._buildBoneRelation(boneNode, bone, boneData.index); else { + boneNode = this._buildBoneAttachedNode(bone, boneData.index); + parentNode.addChild(boneNode); + } + } + } + return rootNode; + }, + _hasAttachedNode: function _hasAttachedNode() { + if (!this._inited) return false; + var attachedRootNode = this._skeletonNode.getChildByName(ATTACHED_ROOT_NAME); + return !!attachedRootNode; + }, + _associateAttachedNode: function _associateAttachedNode() { + if (!this._inited) return; + var rootNode = this._skeletonNode.getChildByName(ATTACHED_ROOT_NAME); + if (!rootNode || !rootNode.isValid) return; + this._attachedRootNode = rootNode; + this._boneIndexToNode = {}; + var nodeArray = this._attachedNodeArray; + nodeArray.length = 0; + limitNode(rootNode); + true; + var isCached = this._skeletonComp.isAnimationCached(); + isCached && this._skeletonComp._frameCache && this._skeletonComp._frameCache.enableCacheAttachedInfo(); + var bones = this._skeleton.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + var boneData = bone.data; + var parentNode = null; + if (bone.parent) { + var parentIndex = bone.parent.data.index; + parentNode = this._boneIndexToNode[parentIndex]; + } else parentNode = rootNode; + if (parentNode) { + var boneNode = parentNode.getChildByName(ATTACHED_PRE_NAME + boneData.name); + boneNode && boneNode.isValid && this._buildBoneRelation(boneNode, bone, boneData.index); + } + } + }, + _syncAttachedNode: function _syncAttachedNode() { + if (!this._inited) return; + var rootNode = this._attachedRootNode; + var nodeArray = this._attachedNodeArray; + if (!rootNode || !rootNode.isValid) { + this._attachedRootNode = null; + nodeArray.length = 0; + return; + } + var rootMatrix = this._skeletonNode._worldMatrix; + _mat["default"].copy(rootNode._worldMatrix, rootMatrix); + rootNode._renderFlag &= ~FLAG_TRANSFORM; + var boneInfos = null; + var isCached = this._skeletonComp.isAnimationCached(); + boneInfos = isCached ? this._skeletonComp._curFrame && this._skeletonComp._curFrame.boneInfos : this._skeleton.bones; + if (!boneInfos) return; + var mulMat = this._skeletonNode._mulMat; + var matrixHandle = function matrixHandle(nodeMat, parentMat, bone) { + var tm = _tempMat4.m; + tm[0] = bone.a; + tm[1] = bone.c; + tm[4] = bone.b; + tm[5] = bone.d; + tm[12] = bone.worldX; + tm[13] = bone.worldY; + mulMat(nodeMat, parentMat, _tempMat4); + }; + var nodeArrayDirty = false; + for (var i = 0, n = nodeArray.length; i < n; i++) { + var boneNode = nodeArray[i]; + if (!boneNode || !boneNode.isValid) { + nodeArray[i] = null; + nodeArrayDirty = true; + continue; + } + var bone = boneInfos[boneNode._boneIndex]; + if (!bone) { + boneNode.removeFromParent(true); + boneNode.destroy(); + nodeArray[i] = null; + nodeArrayDirty = true; + continue; + } + matrixHandle(boneNode._worldMatrix, rootNode._worldMatrix, bone); + boneNode._renderFlag &= ~FLAG_TRANSFORM; + } + nodeArrayDirty && this._rebuildNodeArray(); + } + }); + module.exports = sp.AttachUtil = AttachUtil; + }), { + "../../cocos2d/core/renderer/render-flow": 153, + "../../cocos2d/core/value-types/mat4": 222 + } ], + 274: [ (function(require, module, exports) { + "use strict"; + var TrackEntryListeners = require("./track-entry-listeners"); + var RenderComponent = require("../../cocos2d/core/components/CCRenderComponent"); + var spine = require("./lib/spine"); + var Graphics = require("../../cocos2d/core/graphics/graphics"); + var RenderFlow = require("../../cocos2d/core/renderer/render-flow"); + var FLAG_POST_RENDER = RenderFlow.FLAG_POST_RENDER; + var SkeletonCache = require("./skeleton-cache"); + var AttachUtil = require("./AttachUtil"); + var DefaultSkinsEnum = cc.Enum({ + default: -1 + }); + var DefaultAnimsEnum = cc.Enum({ + "": 0 + }); + var AnimationCacheMode = cc.Enum({ + REALTIME: 0, + SHARED_CACHE: 1, + PRIVATE_CACHE: 2 + }); + function setEnumAttr(obj, propName, enumDef) { + cc.Class.Attr.setClassAttr(obj, propName, "type", "Enum"); + cc.Class.Attr.setClassAttr(obj, propName, "enumList", cc.Enum.getList(enumDef)); + } + sp.Skeleton = cc.Class({ + name: "sp.Skeleton", + extends: RenderComponent, + editor: false, + statics: { + AnimationCacheMode: AnimationCacheMode + }, + properties: { + paused: { + default: false, + visible: false + }, + skeletonData: { + default: null, + type: sp.SkeletonData, + notify: function notify() { + this.defaultSkin = ""; + this.defaultAnimation = ""; + false; + this._updateSkeletonData(); + }, + tooltip: false + }, + defaultSkin: { + default: "", + visible: false + }, + defaultAnimation: { + default: "", + visible: false + }, + animation: { + get: function get() { + if (this.isAnimationCached()) return this._animationName; + var entry = this.getCurrent(0); + return entry && entry.animation.name || ""; + }, + set: function set(value) { + this.defaultAnimation = value; + if (value) this.setAnimation(0, value, this.loop); else if (!this.isAnimationCached()) { + this.clearTrack(0); + this.setToSetupPose(); + } + }, + visible: false + }, + _defaultSkinIndex: { + get: function get() { + if (this.skeletonData) { + var skinsEnum = this.skeletonData.getSkinsEnum(); + if (skinsEnum) if ("" === this.defaultSkin) { + if (skinsEnum.hasOwnProperty(0)) { + this._defaultSkinIndex = 0; + return 0; + } + } else { + var skinIndex = skinsEnum[this.defaultSkin]; + if (void 0 !== skinIndex) return skinIndex; + } + } + return 0; + }, + set: function set(value) { + var skinsEnum; + this.skeletonData && (skinsEnum = this.skeletonData.getSkinsEnum()); + if (!skinsEnum) return cc.errorID("", this.name); + var skinName = skinsEnum[value]; + if (void 0 !== skinName) { + this.defaultSkin = skinName; + this.setSkin(this.defaultSkin); + false; + } else cc.errorID(7501, this.name); + }, + type: DefaultSkinsEnum, + visible: true, + animatable: false, + displayName: "Default Skin", + tooltip: false + }, + _animationIndex: { + get: function get() { + var animationName = this.animation; + if (this.skeletonData && animationName) { + var animsEnum = this.skeletonData.getAnimsEnum(); + if (animsEnum) { + var animIndex = animsEnum[animationName]; + if (void 0 !== animIndex) return animIndex; + } + } + return 0; + }, + set: function set(value) { + if (0 === value) { + this.animation = ""; + return; + } + var animsEnum; + this.skeletonData && (animsEnum = this.skeletonData.getAnimsEnum()); + if (!animsEnum) return cc.errorID(7502, this.name); + var animName = animsEnum[value]; + void 0 !== animName ? this.animation = animName : cc.errorID(7503, this.name); + }, + type: DefaultAnimsEnum, + visible: true, + animatable: false, + displayName: "Animation", + tooltip: false + }, + _preCacheMode: -1, + _cacheMode: AnimationCacheMode.REALTIME, + _defaultCacheMode: { + default: 0, + type: AnimationCacheMode, + notify: function notify() { + this.setAnimationCacheMode(this._defaultCacheMode); + }, + editorOnly: true, + visible: true, + animatable: false, + displayName: "Animation Cache Mode", + tooltip: false + }, + loop: { + default: true, + tooltip: false + }, + premultipliedAlpha: { + default: true, + tooltip: false + }, + timeScale: { + default: 1, + tooltip: false + }, + debugSlots: { + default: false, + editorOnly: true, + tooltip: false, + notify: function notify() { + this._updateDebugDraw(); + } + }, + debugBones: { + default: false, + editorOnly: true, + tooltip: false, + notify: function notify() { + this._updateDebugDraw(); + } + }, + debugMesh: { + default: false, + editorOnly: true, + tooltip: false, + notify: function notify() { + this._updateDebugDraw(); + } + }, + useTint: { + default: false, + tooltip: false, + notify: function notify() { + this._updateUseTint(); + } + }, + enableBatch: { + default: false, + notify: function notify() { + this._updateBatch(); + }, + tooltip: false + }, + _accTime: 0, + _playCount: 0, + _frameCache: null, + _curFrame: null, + _skeletonCache: null, + _animationName: "", + _animationQueue: [], + _headAniInfo: null, + _playTimes: 0, + _isAniComplete: true, + autoSwitchMaterial: { + type: RenderComponent.EnableType, + default: RenderComponent.EnableType.GLOBAL, + notify: function notify(oldValue) { + if (this.autoSwitchMaterial === oldValue) return; + this.setVertsDirty(); + } + }, + allowDynamicAtlas: { + type: RenderComponent.EnableType, + default: RenderComponent.EnableType.GLOBAL, + notify: function notify(oldValue) { + if (this.allowDynamicAtlas === oldValue) return; + this.setVertsDirty(); + } + } + }, + ctor: function ctor() { + this._effectDelegate = null; + this._skeleton = null; + this._rootBone = null; + this._listener = null; + this._materialCache = {}; + this._debugRenderer = null; + this._startSlotIndex = -1; + this._endSlotIndex = -1; + this._startEntry = { + animation: { + name: "" + }, + trackIndex: 0 + }; + this._endEntry = { + animation: { + name: "" + }, + trackIndex: 0 + }; + this.attachUtil = new AttachUtil(); + this._dataDirty = true; + }, + setVertsDirty: function setVertsDirty() { + this.invalidAnimationCache(); + this._dataDirty = true; + this._materialCache = {}; + this._super(); + }, + _getDefaultMaterial: function _getDefaultMaterial() { + return cc.Material.getBuiltinMaterial("2d-spine"); + }, + _updateMaterial: function _updateMaterial() { + var useTint = this.useTint || this.isAnimationCached() && true; + var baseMaterial = this.getMaterial(0); + if (baseMaterial) { + var isMultiSupport = baseMaterial.material.isMultiSupport(); + if (!isMultiSupport) { + baseMaterial.define("USE_TINT", useTint); + baseMaterial.define("CC_USE_MODEL", !this.enableBatch); + } + var srcBlendFactor = this.premultipliedAlpha ? cc.gfx.BLEND_ONE : cc.gfx.BLEND_SRC_ALPHA; + var dstBlendFactor = cc.gfx.BLEND_ONE_MINUS_SRC_ALPHA; + baseMaterial.setBlend(true, cc.gfx.BLEND_FUNC_ADD, srcBlendFactor, srcBlendFactor, cc.gfx.BLEND_FUNC_ADD, dstBlendFactor, dstBlendFactor); + if (isMultiSupport) { + this.useTint && (this.useTint = false); + this.enableBatch || (this.enableBatch = true); + } + } + this._materialCache = {}; + }, + disableRender: function disableRender() { + this._super(); + this.node._renderFlag &= ~FLAG_POST_RENDER; + }, + markForRender: function markForRender(enable) { + this._super(enable); + enable ? this.node._renderFlag |= FLAG_POST_RENDER : this.node._renderFlag &= ~FLAG_POST_RENDER; + }, + _updateUseTint: function _updateUseTint() { + var baseMaterial = this.getMaterial(0); + if (baseMaterial) { + var useTint = this.useTint || this.isAnimationCached() && true; + baseMaterial.material.isMultiSupport() ? this.useTint && (this.useTint = false) : baseMaterial.define("USE_TINT", useTint); + } + this._materialCache = {}; + }, + _updateBatch: function _updateBatch() { + var baseMaterial = this.getMaterial(0); + baseMaterial && (baseMaterial.material.isMultiSupport() ? this.enableBatch || (this.enableBatch = true) : baseMaterial.define("CC_USE_MODEL", !this.enableBatch)); + this._materialCache = {}; + }, + _validateRender: function _validateRender() { + var skeletonData = this.skeletonData; + if (!skeletonData || !skeletonData.isTexturesLoaded()) { + this.disableRender(); + return; + } + this._super(); + }, + setSkeletonData: function setSkeletonData(skeletonData) { + null != skeletonData.width && null != skeletonData.height && this.node.setContentSize(skeletonData.width, skeletonData.height); + true; + if (this._cacheMode === AnimationCacheMode.SHARED_CACHE) this._skeletonCache = SkeletonCache.sharedCache; else if (this._cacheMode === AnimationCacheMode.PRIVATE_CACHE) { + this._skeletonCache = new SkeletonCache(); + this._skeletonCache.enablePrivateMode(); + } + if (this.isAnimationCached()) { + (this.debugBones || this.debugSlots) && cc.warn("Debug bones or slots is invalid in cached mode"); + var skeletonInfo = this._skeletonCache.getSkeletonCache(this.skeletonData._uuid, skeletonData); + this._skeleton = skeletonInfo.skeleton; + this._clipper = skeletonInfo.clipper; + this._rootBone = this._skeleton.getRootBone(); + } else { + this._skeleton = new spine.Skeleton(skeletonData); + this._clipper = new spine.SkeletonClipping(); + this._rootBone = this._skeleton.getRootBone(); + } + this.markForRender(true); + }, + setSlotsRange: function setSlotsRange(startSlotIndex, endSlotIndex) { + if (this.isAnimationCached()) cc.warn("Slots visible range can not be modified in cached mode."); else { + this._startSlotIndex = startSlotIndex; + this._endSlotIndex = endSlotIndex; + } + }, + setAnimationStateData: function setAnimationStateData(stateData) { + if (this.isAnimationCached()) cc.warn("'setAnimationStateData' interface can not be invoked in cached mode."); else { + var state = new spine.AnimationState(stateData); + if (this._listener) { + this._state && this._state.removeListener(this._listener); + state.addListener(this._listener); + } + this._state = state; + } + }, + __preload: function __preload() { + this._super(); + var Flags; + false; + var children = this.node.children; + for (var i = 0, n = children.length; i < n; i++) { + var child = children[i]; + child && "DEBUG_DRAW_NODE" === child._name && child.destroy(); + } + this._updateSkeletonData(); + this._updateDebugDraw(); + this._updateUseTint(); + this._updateBatch(); + }, + setAnimationCacheMode: function setAnimationCacheMode(cacheMode) { + if (this._preCacheMode !== cacheMode) { + this._cacheMode = cacheMode; + this._updateSkeletonData(); + this._updateUseTint(); + } + }, + isAnimationCached: function isAnimationCached() { + false; + return this._cacheMode !== AnimationCacheMode.REALTIME; + }, + update: function update(dt) { + false; + if (this.paused) return; + dt *= this.timeScale * sp.timeScale; + if (this.isAnimationCached()) { + if (this._isAniComplete) { + if (0 === this._animationQueue.length && !this._headAniInfo) { + var frameCache = this._frameCache; + if (frameCache && frameCache.isInvalid()) { + frameCache.updateToFrame(); + var frames = frameCache.frames; + this._curFrame = frames[frames.length - 1]; + } + return; + } + this._headAniInfo || (this._headAniInfo = this._animationQueue.shift()); + this._accTime += dt; + if (this._accTime > this._headAniInfo.delay) { + var aniInfo = this._headAniInfo; + this._headAniInfo = null; + this.setAnimation(0, aniInfo.animationName, aniInfo.loop); + } + return; + } + this._updateCache(dt); + } else this._updateRealtime(dt); + }, + _emitCacheCompleteEvent: function _emitCacheCompleteEvent() { + if (!this._listener) return; + this._endEntry.animation.name = this._animationName; + this._listener.complete && this._listener.complete(this._endEntry); + this._listener.end && this._listener.end(this._endEntry); + }, + _updateCache: function _updateCache(dt) { + var frameCache = this._frameCache; + if (!frameCache.isInited()) return; + var frames = frameCache.frames; + var frameTime = SkeletonCache.FrameTime; + if (0 == this._accTime && 0 == this._playCount) { + this._startEntry.animation.name = this._animationName; + this._listener && this._listener.start && this._listener.start(this._startEntry); + } + this._accTime += dt; + var frameIdx = Math.floor(this._accTime / frameTime); + frameCache.isCompleted || frameCache.updateToFrame(frameIdx); + if (frameCache.isCompleted && frameIdx >= frames.length) { + this._playCount++; + if (this._playTimes > 0 && this._playCount >= this._playTimes) { + this._curFrame = frames[frames.length - 1]; + this._accTime = 0; + this._playCount = 0; + this._isAniComplete = true; + this._emitCacheCompleteEvent(); + return; + } + this._accTime = 0; + frameIdx = 0; + this._emitCacheCompleteEvent(); + } + this._curFrame = frames[frameIdx]; + }, + _updateRealtime: function _updateRealtime(dt) { + var skeleton = this._skeleton; + var state = this._state; + if (skeleton) { + skeleton.update(dt); + if (state) { + state.update(dt); + state.apply(skeleton); + } + } + }, + setVertexEffectDelegate: function setVertexEffectDelegate(effectDelegate) { + this._effectDelegate = effectDelegate; + }, + updateWorldTransform: function updateWorldTransform() { + if (!this.isAnimationCached()) return; + this._skeleton && this._skeleton.updateWorldTransform(); + }, + setToSetupPose: function setToSetupPose() { + this._skeleton && this._skeleton.setToSetupPose(); + }, + setBonesToSetupPose: function setBonesToSetupPose() { + this._skeleton && this._skeleton.setBonesToSetupPose(); + }, + setSlotsToSetupPose: function setSlotsToSetupPose() { + this._skeleton && this._skeleton.setSlotsToSetupPose(); + }, + updateAnimationCache: function updateAnimationCache(animName) { + if (!this.isAnimationCached()) return; + var uuid = this.skeletonData._uuid; + this._skeletonCache && this._skeletonCache.updateAnimationCache(uuid, animName); + }, + invalidAnimationCache: function invalidAnimationCache() { + if (!this.isAnimationCached()) return; + this._skeletonCache && this._skeletonCache.invalidAnimationCache(this.skeletonData._uuid); + }, + findBone: function findBone(boneName) { + if (this._skeleton) return this._skeleton.findBone(boneName); + return null; + }, + findSlot: function findSlot(slotName) { + if (this._skeleton) return this._skeleton.findSlot(slotName); + return null; + }, + setSkin: function setSkin(skinName) { + if (this._skeleton) { + this._skeleton.setSkinByName(skinName); + this._skeleton.setSlotsToSetupPose(); + } + this.invalidAnimationCache(); + }, + getAttachment: function getAttachment(slotName, attachmentName) { + if (this._skeleton) return this._skeleton.getAttachmentByName(slotName, attachmentName); + return null; + }, + setAttachment: function setAttachment(slotName, attachmentName) { + this._skeleton && this._skeleton.setAttachment(slotName, attachmentName); + this.invalidAnimationCache(); + }, + getRegion: function getRegion(slotName, attachmentName) { + var attachment = this.getAttachment(slotName, attachmentName); + if (attachment) return attachment.region; + return null; + }, + setRegion: function setRegion(slotName, attachmentName, region) { + var attachment = this.getAttachment(slotName, attachmentName); + if (attachment) { + attachment.region = region; + if (attachment instanceof sp.spine.MeshAttachment) attachment.updateUVs(); else if (attachment instanceof sp.spine.RegionAttachment) { + attachment.setRegion(region); + attachment.updateOffset(); + } + this.setVertsDirty(); + return true; + } + return false; + }, + getTextureAtlas: function getTextureAtlas(regionAttachment) { + return regionAttachment.region; + }, + setMix: function setMix(fromAnimation, toAnimation, duration) { + this._state && this._state.data.setMix(fromAnimation, toAnimation, duration); + }, + setAnimation: function setAnimation(trackIndex, name, loop) { + this._playTimes = loop ? 0 : 1; + this._animationName = name; + if (this.isAnimationCached()) { + 0 !== trackIndex && cc.warn("Track index can not greater than 0 in cached mode."); + if (!this._skeletonCache) return null; + var cache = this._skeletonCache.getAnimationCache(this.skeletonData._uuid, name); + cache || (cache = this._skeletonCache.initAnimationCache(this.skeletonData._uuid, name)); + if (cache) { + this._isAniComplete = false; + this._accTime = 0; + this._playCount = 0; + this._frameCache = cache; + this.attachUtil._hasAttachedNode() && this._frameCache.enableCacheAttachedInfo(); + this._frameCache.updateToFrame(0); + this._curFrame = this._frameCache.frames[0]; + } + } else if (this._skeleton) { + var animation = this._skeleton.data.findAnimation(name); + if (!animation) { + cc.logID(7509, name); + return null; + } + var res = this._state.setAnimationWith(trackIndex, animation, loop); + this._state.apply(this._skeleton); + return res; + } + return null; + }, + addAnimation: function addAnimation(trackIndex, name, loop, delay) { + delay = delay || 0; + if (this.isAnimationCached()) { + 0 !== trackIndex && cc.warn("Track index can not greater than 0 in cached mode."); + this._animationQueue.push({ + animationName: name, + loop: loop, + delay: delay + }); + } else if (this._skeleton) { + var animation = this._skeleton.data.findAnimation(name); + if (!animation) { + cc.logID(7510, name); + return null; + } + return this._state.addAnimationWith(trackIndex, animation, loop, delay); + } + return null; + }, + findAnimation: function findAnimation(name) { + if (this._skeleton) return this._skeleton.data.findAnimation(name); + return null; + }, + getCurrent: function getCurrent(trackIndex) { + if (this.isAnimationCached()) cc.warn("'getCurrent' interface can not be invoked in cached mode."); else if (this._state) return this._state.getCurrent(trackIndex); + return null; + }, + clearTracks: function clearTracks() { + this.isAnimationCached() ? cc.warn("'clearTracks' interface can not be invoked in cached mode.") : this._state && this._state.clearTracks(); + }, + clearTrack: function clearTrack(trackIndex) { + if (this.isAnimationCached()) cc.warn("'clearTrack' interface can not be invoked in cached mode."); else if (this._state) { + this._state.clearTrack(trackIndex); + false; + } + }, + setStartListener: function setStartListener(listener) { + this._ensureListener(); + this._listener.start = listener; + }, + setInterruptListener: function setInterruptListener(listener) { + this._ensureListener(); + this._listener.interrupt = listener; + }, + setEndListener: function setEndListener(listener) { + this._ensureListener(); + this._listener.end = listener; + }, + setDisposeListener: function setDisposeListener(listener) { + this._ensureListener(); + this._listener.dispose = listener; + }, + setCompleteListener: function setCompleteListener(listener) { + this._ensureListener(); + this._listener.complete = listener; + }, + setEventListener: function setEventListener(listener) { + this._ensureListener(); + this._listener.event = listener; + }, + setTrackStartListener: function setTrackStartListener(entry, listener) { + TrackEntryListeners.getListeners(entry).start = listener; + }, + setTrackInterruptListener: function setTrackInterruptListener(entry, listener) { + TrackEntryListeners.getListeners(entry).interrupt = listener; + }, + setTrackEndListener: function setTrackEndListener(entry, listener) { + TrackEntryListeners.getListeners(entry).end = listener; + }, + setTrackDisposeListener: function setTrackDisposeListener(entry, listener) { + TrackEntryListeners.getListeners(entry).dispose = listener; + }, + setTrackCompleteListener: function setTrackCompleteListener(entry, listener) { + TrackEntryListeners.getListeners(entry).complete = function(trackEntry) { + var loopCount = Math.floor(trackEntry.trackTime / trackEntry.animationEnd); + listener(trackEntry, loopCount); + }; + }, + setTrackEventListener: function setTrackEventListener(entry, listener) { + TrackEntryListeners.getListeners(entry).event = listener; + }, + getState: function getState() { + return this._state; + }, + _updateAnimEnum: false, + _updateSkinEnum: false, + _ensureListener: function _ensureListener() { + if (!this._listener) { + this._listener = new TrackEntryListeners(); + this._state && this._state.addListener(this._listener); + } + }, + _updateSkeletonData: function _updateSkeletonData() { + if (!this.skeletonData) { + this.disableRender(); + return; + } + var data = this.skeletonData.getRuntimeData(); + if (!data) { + this.disableRender(); + return; + } + try { + this.setSkeletonData(data); + this.isAnimationCached() || this.setAnimationStateData(new spine.AnimationStateData(this._skeleton.data)); + this.defaultSkin && this.setSkin(this.defaultSkin); + } catch (e) { + cc.warn(e); + } + this.attachUtil.init(this); + this.attachUtil._associateAttachedNode(); + this._preCacheMode = this._cacheMode; + this.animation = this.defaultAnimation; + this._dataDirty = true; + }, + _refreshInspector: function _refreshInspector() { + this._updateAnimEnum(); + this._updateSkinEnum(); + Editor.Utils.refreshSelectedInspector("node", this.node.uuid); + }, + _updateDebugDraw: function _updateDebugDraw() { + if (this.debugBones || this.debugSlots) { + if (!this._debugRenderer) { + var debugDrawNode = new cc.PrivateNode(); + debugDrawNode.name = "DEBUG_DRAW_NODE"; + var debugDraw = debugDrawNode.addComponent(Graphics); + debugDraw.lineWidth = 1; + debugDraw.strokeColor = cc.color(255, 0, 0, 255); + this._debugRenderer = debugDraw; + } + this._debugRenderer.node.parent = this.node; + this.isAnimationCached() && cc.warn("Debug bones or slots is invalid in cached mode"); + } else this._debugRenderer && (this._debugRenderer.node.parent = null); + } + }); + module.exports = sp.Skeleton; + }), { + "../../cocos2d/core/components/CCRenderComponent": 98, + "../../cocos2d/core/graphics/graphics": void 0, + "../../cocos2d/core/renderer/render-flow": 153, + "./AttachUtil": 273, + "./lib/spine": 276, + "./skeleton-cache": 277, + "./track-entry-listeners": 281 + } ], + 275: [ (function(require, module, exports) { + "use strict"; + var _global = "undefined" === typeof window ? global : window; + var _isUseSpine = true; + true; + _global.spine = require("./lib/spine"); + if (_isUseSpine) { + _global.sp = {}; + sp._timeScale = 1; + Object.defineProperty(sp, "timeScale", { + get: function get() { + return this._timeScale; + }, + set: function set(value) { + this._timeScale = value; + }, + configurable: true + }); + sp.ATTACHMENT_TYPE = { + REGION: 0, + BOUNDING_BOX: 1, + MESH: 2, + SKINNED_MESH: 3 + }; + sp.AnimationEventType = cc.Enum({ + START: 0, + INTERRUPT: 1, + END: 2, + DISPOSE: 3, + COMPLETE: 4, + EVENT: 5 + }); + true; + sp.spine = _global.spine; + true; + require("./skeleton-texture"); + require("./skeleton-data"); + require("./vertex-effect-delegate"); + require("./Skeleton"); + require("./spine-assembler"); + } + }), { + "./Skeleton": 274, + "./lib/spine": 276, + "./skeleton-data": 278, + "./skeleton-texture": 279, + "./spine-assembler": 280, + "./vertex-effect-delegate": 282 + } ], + 276: [ (function(require, module, exports) { + "use strict"; + var __extends = (void 0, (function() { + var _extendStatics = function extendStatics(d, b) { + _extendStatics = Object.setPrototypeOf || { + __proto__: [] + } instanceof Array && function(d, b) { + d.__proto__ = b; + } || function(d, b) { + for (var p in b) b.hasOwnProperty(p) && (d[p] = b[p]); + }; + return _extendStatics(d, b); + }; + return function(d, b) { + _extendStatics(d, b); + function __() { + this.constructor = d; + } + d.prototype = null === b ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })()); + var spine; + (function(spine) { + var Animation = (function() { + function Animation(name, timelines, duration) { + if (null == name) throw new Error("name cannot be null."); + if (null == timelines) throw new Error("timelines cannot be null."); + this.name = name; + this.timelines = timelines; + this.timelineIds = []; + for (var i = 0; i < timelines.length; i++) this.timelineIds[timelines[i].getPropertyId()] = true; + this.duration = duration; + } + Animation.prototype.hasTimeline = function(id) { + return true == this.timelineIds[id]; + }; + Animation.prototype.apply = function(skeleton, lastTime, time, loop, events, alpha, blend, direction) { + if (null == skeleton) throw new Error("skeleton cannot be null."); + if (loop && 0 != this.duration) { + time %= this.duration; + lastTime > 0 && (lastTime %= this.duration); + } + var timelines = this.timelines; + for (var i = 0, n = timelines.length; i < n; i++) timelines[i].apply(skeleton, lastTime, time, events, alpha, blend, direction); + }; + Animation.binarySearch = function(values, target, step) { + void 0 === step && (step = 1); + var low = 0; + var high = values.length / step - 2; + if (0 == high) return step; + var current = high >>> 1; + while (true) { + values[(current + 1) * step] <= target ? low = current + 1 : high = current; + if (low == high) return (low + 1) * step; + current = low + high >>> 1; + } + }; + Animation.linearSearch = function(values, target, step) { + for (var i = 0, last = values.length - step; i <= last; i += step) if (values[i] > target) return i; + return -1; + }; + return Animation; + })(); + spine.Animation = Animation; + var MixBlend; + (function(MixBlend) { + MixBlend[MixBlend["setup"] = 0] = "setup"; + MixBlend[MixBlend["first"] = 1] = "first"; + MixBlend[MixBlend["replace"] = 2] = "replace"; + MixBlend[MixBlend["add"] = 3] = "add"; + })(MixBlend = spine.MixBlend || (spine.MixBlend = {})); + var MixDirection; + (function(MixDirection) { + MixDirection[MixDirection["mixIn"] = 0] = "mixIn"; + MixDirection[MixDirection["mixOut"] = 1] = "mixOut"; + })(MixDirection = spine.MixDirection || (spine.MixDirection = {})); + var TimelineType; + (function(TimelineType) { + TimelineType[TimelineType["rotate"] = 0] = "rotate"; + TimelineType[TimelineType["translate"] = 1] = "translate"; + TimelineType[TimelineType["scale"] = 2] = "scale"; + TimelineType[TimelineType["shear"] = 3] = "shear"; + TimelineType[TimelineType["attachment"] = 4] = "attachment"; + TimelineType[TimelineType["color"] = 5] = "color"; + TimelineType[TimelineType["deform"] = 6] = "deform"; + TimelineType[TimelineType["event"] = 7] = "event"; + TimelineType[TimelineType["drawOrder"] = 8] = "drawOrder"; + TimelineType[TimelineType["ikConstraint"] = 9] = "ikConstraint"; + TimelineType[TimelineType["transformConstraint"] = 10] = "transformConstraint"; + TimelineType[TimelineType["pathConstraintPosition"] = 11] = "pathConstraintPosition"; + TimelineType[TimelineType["pathConstraintSpacing"] = 12] = "pathConstraintSpacing"; + TimelineType[TimelineType["pathConstraintMix"] = 13] = "pathConstraintMix"; + TimelineType[TimelineType["twoColor"] = 14] = "twoColor"; + })(TimelineType = spine.TimelineType || (spine.TimelineType = {})); + var CurveTimeline = (function() { + function CurveTimeline(frameCount) { + if (frameCount <= 0) throw new Error("frameCount must be > 0: " + frameCount); + this.curves = spine.Utils.newFloatArray((frameCount - 1) * CurveTimeline.BEZIER_SIZE); + } + CurveTimeline.prototype.getFrameCount = function() { + return this.curves.length / CurveTimeline.BEZIER_SIZE + 1; + }; + CurveTimeline.prototype.setLinear = function(frameIndex) { + this.curves[frameIndex * CurveTimeline.BEZIER_SIZE] = CurveTimeline.LINEAR; + }; + CurveTimeline.prototype.setStepped = function(frameIndex) { + this.curves[frameIndex * CurveTimeline.BEZIER_SIZE] = CurveTimeline.STEPPED; + }; + CurveTimeline.prototype.getCurveType = function(frameIndex) { + var index = frameIndex * CurveTimeline.BEZIER_SIZE; + if (index == this.curves.length) return CurveTimeline.LINEAR; + var type = this.curves[index]; + if (type == CurveTimeline.LINEAR) return CurveTimeline.LINEAR; + if (type == CurveTimeline.STEPPED) return CurveTimeline.STEPPED; + return CurveTimeline.BEZIER; + }; + CurveTimeline.prototype.setCurve = function(frameIndex, cx1, cy1, cx2, cy2) { + var tmpx = .03 * (2 * -cx1 + cx2), tmpy = .03 * (2 * -cy1 + cy2); + var dddfx = .006 * (3 * (cx1 - cx2) + 1), dddfy = .006 * (3 * (cy1 - cy2) + 1); + var ddfx = 2 * tmpx + dddfx, ddfy = 2 * tmpy + dddfy; + var dfx = .3 * cx1 + tmpx + .16666667 * dddfx, dfy = .3 * cy1 + tmpy + .16666667 * dddfy; + var i = frameIndex * CurveTimeline.BEZIER_SIZE; + var curves = this.curves; + curves[i++] = CurveTimeline.BEZIER; + var x = dfx, y = dfy; + for (var n = i + CurveTimeline.BEZIER_SIZE - 1; i < n; i += 2) { + curves[i] = x; + curves[i + 1] = y; + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + x += dfx; + y += dfy; + } + }; + CurveTimeline.prototype.getCurvePercent = function(frameIndex, percent) { + percent = spine.MathUtils.clamp(percent, 0, 1); + var curves = this.curves; + var i = frameIndex * CurveTimeline.BEZIER_SIZE; + var type = curves[i]; + if (type == CurveTimeline.LINEAR) return percent; + if (type == CurveTimeline.STEPPED) return 0; + i++; + var x = 0; + for (var start = i, n = i + CurveTimeline.BEZIER_SIZE - 1; i < n; i += 2) { + x = curves[i]; + if (x >= percent) { + var prevX = void 0, prevY = void 0; + if (i == start) { + prevX = 0; + prevY = 0; + } else { + prevX = curves[i - 2]; + prevY = curves[i - 1]; + } + return prevY + (curves[i + 1] - prevY) * (percent - prevX) / (x - prevX); + } + } + var y = curves[i - 1]; + return y + (1 - y) * (percent - x) / (1 - x); + }; + CurveTimeline.LINEAR = 0; + CurveTimeline.STEPPED = 1; + CurveTimeline.BEZIER = 2; + CurveTimeline.BEZIER_SIZE = 19; + return CurveTimeline; + })(); + spine.CurveTimeline = CurveTimeline; + var RotateTimeline = (function(_super) { + __extends(RotateTimeline, _super); + function RotateTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount << 1); + return _this; + } + RotateTimeline.prototype.getPropertyId = function() { + return (TimelineType.rotate << 24) + this.boneIndex; + }; + RotateTimeline.prototype.setFrame = function(frameIndex, time, degrees) { + frameIndex <<= 1; + this.frames[frameIndex] = time; + this.frames[frameIndex + RotateTimeline.ROTATION] = degrees; + }; + RotateTimeline.prototype.apply = function(skeleton, lastTime, time, events, alpha, blend, direction) { + var frames = this.frames; + var bone = skeleton.bones[this.boneIndex]; + if (!bone.active) return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.rotation = bone.data.rotation; + return; + + case MixBlend.first: + var r_1 = bone.data.rotation - bone.rotation; + bone.rotation += (r_1 - 360 * (16384 - (16384.499999999996 - r_1 / 360 | 0))) * alpha; + } + return; + } + if (time >= frames[frames.length - RotateTimeline.ENTRIES]) { + var r_2 = frames[frames.length + RotateTimeline.PREV_ROTATION]; + switch (blend) { + case MixBlend.setup: + bone.rotation = bone.data.rotation + r_2 * alpha; + break; + + case MixBlend.first: + case MixBlend.replace: + r_2 += bone.data.rotation - bone.rotation; + r_2 -= 360 * (16384 - (16384.499999999996 - r_2 / 360 | 0)); + + case MixBlend.add: + bone.rotation += r_2 * alpha; + } + return; + } + var frame = Animation.binarySearch(frames, time, RotateTimeline.ENTRIES); + var prevRotation = frames[frame + RotateTimeline.PREV_ROTATION]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent((frame >> 1) - 1, 1 - (time - frameTime) / (frames[frame + RotateTimeline.PREV_TIME] - frameTime)); + var r = frames[frame + RotateTimeline.ROTATION] - prevRotation; + r = prevRotation + (r - 360 * (16384 - (16384.499999999996 - r / 360 | 0))) * percent; + switch (blend) { + case MixBlend.setup: + bone.rotation = bone.data.rotation + (r - 360 * (16384 - (16384.499999999996 - r / 360 | 0))) * alpha; + break; + + case MixBlend.first: + case MixBlend.replace: + r += bone.data.rotation - bone.rotation; + + case MixBlend.add: + bone.rotation += (r - 360 * (16384 - (16384.499999999996 - r / 360 | 0))) * alpha; + } + }; + RotateTimeline.ENTRIES = 2; + RotateTimeline.PREV_TIME = -2; + RotateTimeline.PREV_ROTATION = -1; + RotateTimeline.ROTATION = 1; + return RotateTimeline; + })(CurveTimeline); + spine.RotateTimeline = RotateTimeline; + var TranslateTimeline = (function(_super) { + __extends(TranslateTimeline, _super); + function TranslateTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * TranslateTimeline.ENTRIES); + return _this; + } + TranslateTimeline.prototype.getPropertyId = function() { + return (TimelineType.translate << 24) + this.boneIndex; + }; + TranslateTimeline.prototype.setFrame = function(frameIndex, time, x, y) { + frameIndex *= TranslateTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + TranslateTimeline.X] = x; + this.frames[frameIndex + TranslateTimeline.Y] = y; + }; + TranslateTimeline.prototype.apply = function(skeleton, lastTime, time, events, alpha, blend, direction) { + var frames = this.frames; + var bone = skeleton.bones[this.boneIndex]; + if (!bone.active) return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.x = bone.data.x; + bone.y = bone.data.y; + return; + + case MixBlend.first: + bone.x += (bone.data.x - bone.x) * alpha; + bone.y += (bone.data.y - bone.y) * alpha; + } + return; + } + var x = 0, y = 0; + if (time >= frames[frames.length - TranslateTimeline.ENTRIES]) { + x = frames[frames.length + TranslateTimeline.PREV_X]; + y = frames[frames.length + TranslateTimeline.PREV_Y]; + } else { + var frame = Animation.binarySearch(frames, time, TranslateTimeline.ENTRIES); + x = frames[frame + TranslateTimeline.PREV_X]; + y = frames[frame + TranslateTimeline.PREV_Y]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / TranslateTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + TranslateTimeline.PREV_TIME] - frameTime)); + x += (frames[frame + TranslateTimeline.X] - x) * percent; + y += (frames[frame + TranslateTimeline.Y] - y) * percent; + } + switch (blend) { + case MixBlend.setup: + bone.x = bone.data.x + x * alpha; + bone.y = bone.data.y + y * alpha; + break; + + case MixBlend.first: + case MixBlend.replace: + bone.x += (bone.data.x + x - bone.x) * alpha; + bone.y += (bone.data.y + y - bone.y) * alpha; + break; + + case MixBlend.add: + bone.x += x * alpha; + bone.y += y * alpha; + } + }; + TranslateTimeline.ENTRIES = 3; + TranslateTimeline.PREV_TIME = -3; + TranslateTimeline.PREV_X = -2; + TranslateTimeline.PREV_Y = -1; + TranslateTimeline.X = 1; + TranslateTimeline.Y = 2; + return TranslateTimeline; + })(CurveTimeline); + spine.TranslateTimeline = TranslateTimeline; + var ScaleTimeline = (function(_super) { + __extends(ScaleTimeline, _super); + function ScaleTimeline(frameCount) { + return _super.call(this, frameCount) || this; + } + ScaleTimeline.prototype.getPropertyId = function() { + return (TimelineType.scale << 24) + this.boneIndex; + }; + ScaleTimeline.prototype.apply = function(skeleton, lastTime, time, events, alpha, blend, direction) { + var frames = this.frames; + var bone = skeleton.bones[this.boneIndex]; + if (!bone.active) return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.scaleX = bone.data.scaleX; + bone.scaleY = bone.data.scaleY; + return; + + case MixBlend.first: + bone.scaleX += (bone.data.scaleX - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - bone.scaleY) * alpha; + } + return; + } + var x = 0, y = 0; + if (time >= frames[frames.length - ScaleTimeline.ENTRIES]) { + x = frames[frames.length + ScaleTimeline.PREV_X] * bone.data.scaleX; + y = frames[frames.length + ScaleTimeline.PREV_Y] * bone.data.scaleY; + } else { + var frame = Animation.binarySearch(frames, time, ScaleTimeline.ENTRIES); + x = frames[frame + ScaleTimeline.PREV_X]; + y = frames[frame + ScaleTimeline.PREV_Y]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / ScaleTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + ScaleTimeline.PREV_TIME] - frameTime)); + x = (x + (frames[frame + ScaleTimeline.X] - x) * percent) * bone.data.scaleX; + y = (y + (frames[frame + ScaleTimeline.Y] - y) * percent) * bone.data.scaleY; + } + if (1 == alpha) if (blend == MixBlend.add) { + bone.scaleX += x - bone.data.scaleX; + bone.scaleY += y - bone.data.scaleY; + } else { + bone.scaleX = x; + bone.scaleY = y; + } else { + var bx = 0, by = 0; + if (direction == MixDirection.mixOut) switch (blend) { + case MixBlend.setup: + bx = bone.data.scaleX; + by = bone.data.scaleY; + bone.scaleX = bx + (Math.abs(x) * spine.MathUtils.signum(bx) - bx) * alpha; + bone.scaleY = by + (Math.abs(y) * spine.MathUtils.signum(by) - by) * alpha; + break; + + case MixBlend.first: + case MixBlend.replace: + bx = bone.scaleX; + by = bone.scaleY; + bone.scaleX = bx + (Math.abs(x) * spine.MathUtils.signum(bx) - bx) * alpha; + bone.scaleY = by + (Math.abs(y) * spine.MathUtils.signum(by) - by) * alpha; + break; + + case MixBlend.add: + bx = bone.scaleX; + by = bone.scaleY; + bone.scaleX = bx + (Math.abs(x) * spine.MathUtils.signum(bx) - bone.data.scaleX) * alpha; + bone.scaleY = by + (Math.abs(y) * spine.MathUtils.signum(by) - bone.data.scaleY) * alpha; + } else switch (blend) { + case MixBlend.setup: + bx = Math.abs(bone.data.scaleX) * spine.MathUtils.signum(x); + by = Math.abs(bone.data.scaleY) * spine.MathUtils.signum(y); + bone.scaleX = bx + (x - bx) * alpha; + bone.scaleY = by + (y - by) * alpha; + break; + + case MixBlend.first: + case MixBlend.replace: + bx = Math.abs(bone.scaleX) * spine.MathUtils.signum(x); + by = Math.abs(bone.scaleY) * spine.MathUtils.signum(y); + bone.scaleX = bx + (x - bx) * alpha; + bone.scaleY = by + (y - by) * alpha; + break; + + case MixBlend.add: + bx = spine.MathUtils.signum(x); + by = spine.MathUtils.signum(y); + bone.scaleX = Math.abs(bone.scaleX) * bx + (x - Math.abs(bone.data.scaleX) * bx) * alpha; + bone.scaleY = Math.abs(bone.scaleY) * by + (y - Math.abs(bone.data.scaleY) * by) * alpha; + } + } + }; + return ScaleTimeline; + })(TranslateTimeline); + spine.ScaleTimeline = ScaleTimeline; + var ShearTimeline = (function(_super) { + __extends(ShearTimeline, _super); + function ShearTimeline(frameCount) { + return _super.call(this, frameCount) || this; + } + ShearTimeline.prototype.getPropertyId = function() { + return (TimelineType.shear << 24) + this.boneIndex; + }; + ShearTimeline.prototype.apply = function(skeleton, lastTime, time, events, alpha, blend, direction) { + var frames = this.frames; + var bone = skeleton.bones[this.boneIndex]; + if (!bone.active) return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.shearX = bone.data.shearX; + bone.shearY = bone.data.shearY; + return; + + case MixBlend.first: + bone.shearX += (bone.data.shearX - bone.shearX) * alpha; + bone.shearY += (bone.data.shearY - bone.shearY) * alpha; + } + return; + } + var x = 0, y = 0; + if (time >= frames[frames.length - ShearTimeline.ENTRIES]) { + x = frames[frames.length + ShearTimeline.PREV_X]; + y = frames[frames.length + ShearTimeline.PREV_Y]; + } else { + var frame = Animation.binarySearch(frames, time, ShearTimeline.ENTRIES); + x = frames[frame + ShearTimeline.PREV_X]; + y = frames[frame + ShearTimeline.PREV_Y]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / ShearTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + ShearTimeline.PREV_TIME] - frameTime)); + x += (frames[frame + ShearTimeline.X] - x) * percent; + y += (frames[frame + ShearTimeline.Y] - y) * percent; + } + switch (blend) { + case MixBlend.setup: + bone.shearX = bone.data.shearX + x * alpha; + bone.shearY = bone.data.shearY + y * alpha; + break; + + case MixBlend.first: + case MixBlend.replace: + bone.shearX += (bone.data.shearX + x - bone.shearX) * alpha; + bone.shearY += (bone.data.shearY + y - bone.shearY) * alpha; + break; + + case MixBlend.add: + bone.shearX += x * alpha; + bone.shearY += y * alpha; + } + }; + return ShearTimeline; + })(TranslateTimeline); + spine.ShearTimeline = ShearTimeline; + var ColorTimeline = (function(_super) { + __extends(ColorTimeline, _super); + function ColorTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * ColorTimeline.ENTRIES); + return _this; + } + ColorTimeline.prototype.getPropertyId = function() { + return (TimelineType.color << 24) + this.slotIndex; + }; + ColorTimeline.prototype.setFrame = function(frameIndex, time, r, g, b, a) { + frameIndex *= ColorTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + ColorTimeline.R] = r; + this.frames[frameIndex + ColorTimeline.G] = g; + this.frames[frameIndex + ColorTimeline.B] = b; + this.frames[frameIndex + ColorTimeline.A] = a; + }; + ColorTimeline.prototype.apply = function(skeleton, lastTime, time, events, alpha, blend, direction) { + var slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) return; + var frames = this.frames; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + slot.color.setFromColor(slot.data.color); + return; + + case MixBlend.first: + var color = slot.color, setup = slot.data.color; + color.add((setup.r - color.r) * alpha, (setup.g - color.g) * alpha, (setup.b - color.b) * alpha, (setup.a - color.a) * alpha); + } + return; + } + var r = 0, g = 0, b = 0, a = 0; + if (time >= frames[frames.length - ColorTimeline.ENTRIES]) { + var i = frames.length; + r = frames[i + ColorTimeline.PREV_R]; + g = frames[i + ColorTimeline.PREV_G]; + b = frames[i + ColorTimeline.PREV_B]; + a = frames[i + ColorTimeline.PREV_A]; + } else { + var frame = Animation.binarySearch(frames, time, ColorTimeline.ENTRIES); + r = frames[frame + ColorTimeline.PREV_R]; + g = frames[frame + ColorTimeline.PREV_G]; + b = frames[frame + ColorTimeline.PREV_B]; + a = frames[frame + ColorTimeline.PREV_A]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / ColorTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + ColorTimeline.PREV_TIME] - frameTime)); + r += (frames[frame + ColorTimeline.R] - r) * percent; + g += (frames[frame + ColorTimeline.G] - g) * percent; + b += (frames[frame + ColorTimeline.B] - b) * percent; + a += (frames[frame + ColorTimeline.A] - a) * percent; + } + if (1 == alpha) slot.color.set(r, g, b, a); else { + var color = slot.color; + blend == MixBlend.setup && color.setFromColor(slot.data.color); + color.add((r - color.r) * alpha, (g - color.g) * alpha, (b - color.b) * alpha, (a - color.a) * alpha); + } + }; + ColorTimeline.ENTRIES = 5; + ColorTimeline.PREV_TIME = -5; + ColorTimeline.PREV_R = -4; + ColorTimeline.PREV_G = -3; + ColorTimeline.PREV_B = -2; + ColorTimeline.PREV_A = -1; + ColorTimeline.R = 1; + ColorTimeline.G = 2; + ColorTimeline.B = 3; + ColorTimeline.A = 4; + return ColorTimeline; + })(CurveTimeline); + spine.ColorTimeline = ColorTimeline; + var TwoColorTimeline = (function(_super) { + __extends(TwoColorTimeline, _super); + function TwoColorTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * TwoColorTimeline.ENTRIES); + return _this; + } + TwoColorTimeline.prototype.getPropertyId = function() { + return (TimelineType.twoColor << 24) + this.slotIndex; + }; + TwoColorTimeline.prototype.setFrame = function(frameIndex, time, r, g, b, a, r2, g2, b2) { + frameIndex *= TwoColorTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + TwoColorTimeline.R] = r; + this.frames[frameIndex + TwoColorTimeline.G] = g; + this.frames[frameIndex + TwoColorTimeline.B] = b; + this.frames[frameIndex + TwoColorTimeline.A] = a; + this.frames[frameIndex + TwoColorTimeline.R2] = r2; + this.frames[frameIndex + TwoColorTimeline.G2] = g2; + this.frames[frameIndex + TwoColorTimeline.B2] = b2; + }; + TwoColorTimeline.prototype.apply = function(skeleton, lastTime, time, events, alpha, blend, direction) { + var slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) return; + var frames = this.frames; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + slot.color.setFromColor(slot.data.color); + slot.darkColor.setFromColor(slot.data.darkColor); + return; + + case MixBlend.first: + var light = slot.color, dark = slot.darkColor, setupLight = slot.data.color, setupDark = slot.data.darkColor; + light.add((setupLight.r - light.r) * alpha, (setupLight.g - light.g) * alpha, (setupLight.b - light.b) * alpha, (setupLight.a - light.a) * alpha); + dark.add((setupDark.r - dark.r) * alpha, (setupDark.g - dark.g) * alpha, (setupDark.b - dark.b) * alpha, 0); + } + return; + } + var r = 0, g = 0, b = 0, a = 0, r2 = 0, g2 = 0, b2 = 0; + if (time >= frames[frames.length - TwoColorTimeline.ENTRIES]) { + var i = frames.length; + r = frames[i + TwoColorTimeline.PREV_R]; + g = frames[i + TwoColorTimeline.PREV_G]; + b = frames[i + TwoColorTimeline.PREV_B]; + a = frames[i + TwoColorTimeline.PREV_A]; + r2 = frames[i + TwoColorTimeline.PREV_R2]; + g2 = frames[i + TwoColorTimeline.PREV_G2]; + b2 = frames[i + TwoColorTimeline.PREV_B2]; + } else { + var frame = Animation.binarySearch(frames, time, TwoColorTimeline.ENTRIES); + r = frames[frame + TwoColorTimeline.PREV_R]; + g = frames[frame + TwoColorTimeline.PREV_G]; + b = frames[frame + TwoColorTimeline.PREV_B]; + a = frames[frame + TwoColorTimeline.PREV_A]; + r2 = frames[frame + TwoColorTimeline.PREV_R2]; + g2 = frames[frame + TwoColorTimeline.PREV_G2]; + b2 = frames[frame + TwoColorTimeline.PREV_B2]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / TwoColorTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + TwoColorTimeline.PREV_TIME] - frameTime)); + r += (frames[frame + TwoColorTimeline.R] - r) * percent; + g += (frames[frame + TwoColorTimeline.G] - g) * percent; + b += (frames[frame + TwoColorTimeline.B] - b) * percent; + a += (frames[frame + TwoColorTimeline.A] - a) * percent; + r2 += (frames[frame + TwoColorTimeline.R2] - r2) * percent; + g2 += (frames[frame + TwoColorTimeline.G2] - g2) * percent; + b2 += (frames[frame + TwoColorTimeline.B2] - b2) * percent; + } + if (1 == alpha) { + slot.color.set(r, g, b, a); + slot.darkColor.set(r2, g2, b2, 1); + } else { + var light = slot.color, dark = slot.darkColor; + if (blend == MixBlend.setup) { + light.setFromColor(slot.data.color); + dark.setFromColor(slot.data.darkColor); + } + light.add((r - light.r) * alpha, (g - light.g) * alpha, (b - light.b) * alpha, (a - light.a) * alpha); + dark.add((r2 - dark.r) * alpha, (g2 - dark.g) * alpha, (b2 - dark.b) * alpha, 0); + } + }; + TwoColorTimeline.ENTRIES = 8; + TwoColorTimeline.PREV_TIME = -8; + TwoColorTimeline.PREV_R = -7; + TwoColorTimeline.PREV_G = -6; + TwoColorTimeline.PREV_B = -5; + TwoColorTimeline.PREV_A = -4; + TwoColorTimeline.PREV_R2 = -3; + TwoColorTimeline.PREV_G2 = -2; + TwoColorTimeline.PREV_B2 = -1; + TwoColorTimeline.R = 1; + TwoColorTimeline.G = 2; + TwoColorTimeline.B = 3; + TwoColorTimeline.A = 4; + TwoColorTimeline.R2 = 5; + TwoColorTimeline.G2 = 6; + TwoColorTimeline.B2 = 7; + return TwoColorTimeline; + })(CurveTimeline); + spine.TwoColorTimeline = TwoColorTimeline; + var AttachmentTimeline = (function() { + function AttachmentTimeline(frameCount) { + this.frames = spine.Utils.newFloatArray(frameCount); + this.attachmentNames = new Array(frameCount); + } + AttachmentTimeline.prototype.getPropertyId = function() { + return (TimelineType.attachment << 24) + this.slotIndex; + }; + AttachmentTimeline.prototype.getFrameCount = function() { + return this.frames.length; + }; + AttachmentTimeline.prototype.setFrame = function(frameIndex, time, attachmentName) { + this.frames[frameIndex] = time; + this.attachmentNames[frameIndex] = attachmentName; + }; + AttachmentTimeline.prototype.apply = function(skeleton, lastTime, time, events, alpha, blend, direction) { + var slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) return; + if (direction == MixDirection.mixOut && blend == MixBlend.setup) { + var attachmentName_1 = slot.data.attachmentName; + slot.setAttachment(null == attachmentName_1 ? null : skeleton.getAttachment(this.slotIndex, attachmentName_1)); + return; + } + var frames = this.frames; + if (time < frames[0]) { + if (blend == MixBlend.setup || blend == MixBlend.first) { + var attachmentName_2 = slot.data.attachmentName; + slot.setAttachment(null == attachmentName_2 ? null : skeleton.getAttachment(this.slotIndex, attachmentName_2)); + } + return; + } + var frameIndex = 0; + frameIndex = time >= frames[frames.length - 1] ? frames.length - 1 : Animation.binarySearch(frames, time, 1) - 1; + var attachmentName = this.attachmentNames[frameIndex]; + skeleton.slots[this.slotIndex].setAttachment(null == attachmentName ? null : skeleton.getAttachment(this.slotIndex, attachmentName)); + }; + return AttachmentTimeline; + })(); + spine.AttachmentTimeline = AttachmentTimeline; + var zeros = null; + var DeformTimeline = (function(_super) { + __extends(DeformTimeline, _super); + function DeformTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount); + _this.frameVertices = new Array(frameCount); + null == zeros && (zeros = spine.Utils.newFloatArray(64)); + return _this; + } + DeformTimeline.prototype.getPropertyId = function() { + return (TimelineType.deform << 27) + +this.attachment.id + this.slotIndex; + }; + DeformTimeline.prototype.setFrame = function(frameIndex, time, vertices) { + this.frames[frameIndex] = time; + this.frameVertices[frameIndex] = vertices; + }; + DeformTimeline.prototype.apply = function(skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) return; + var slotAttachment = slot.getAttachment(); + if (!(slotAttachment instanceof spine.VertexAttachment) || !(slotAttachment.deformAttachment == this.attachment)) return; + var deformArray = slot.deform; + 0 == deformArray.length && (blend = MixBlend.setup); + var frameVertices = this.frameVertices; + var vertexCount = frameVertices[0].length; + var frames = this.frames; + if (time < frames[0]) { + var vertexAttachment = slotAttachment; + switch (blend) { + case MixBlend.setup: + deformArray.length = 0; + return; + + case MixBlend.first: + if (1 == alpha) { + deformArray.length = 0; + break; + } + var deform_1 = spine.Utils.setArraySize(deformArray, vertexCount); + if (null == vertexAttachment.bones) { + var setupVertices = vertexAttachment.vertices; + for (var i = 0; i < vertexCount; i++) deform_1[i] += (setupVertices[i] - deform_1[i]) * alpha; + } else { + alpha = 1 - alpha; + for (var i = 0; i < vertexCount; i++) deform_1[i] *= alpha; + } + } + return; + } + var deform = spine.Utils.setArraySize(deformArray, vertexCount); + if (time >= frames[frames.length - 1]) { + var lastVertices = frameVertices[frames.length - 1]; + if (1 == alpha) if (blend == MixBlend.add) { + var vertexAttachment = slotAttachment; + if (null == vertexAttachment.bones) { + var setupVertices = vertexAttachment.vertices; + for (var i_1 = 0; i_1 < vertexCount; i_1++) deform[i_1] += lastVertices[i_1] - setupVertices[i_1]; + } else for (var i_2 = 0; i_2 < vertexCount; i_2++) deform[i_2] += lastVertices[i_2]; + } else spine.Utils.arrayCopy(lastVertices, 0, deform, 0, vertexCount); else switch (blend) { + case MixBlend.setup: + var vertexAttachment_1 = slotAttachment; + if (null == vertexAttachment_1.bones) { + var setupVertices = vertexAttachment_1.vertices; + for (var i_3 = 0; i_3 < vertexCount; i_3++) { + var setup = setupVertices[i_3]; + deform[i_3] = setup + (lastVertices[i_3] - setup) * alpha; + } + } else for (var i_4 = 0; i_4 < vertexCount; i_4++) deform[i_4] = lastVertices[i_4] * alpha; + break; + + case MixBlend.first: + case MixBlend.replace: + for (var i_5 = 0; i_5 < vertexCount; i_5++) deform[i_5] += (lastVertices[i_5] - deform[i_5]) * alpha; + + case MixBlend.add: + var vertexAttachment = slotAttachment; + if (null == vertexAttachment.bones) { + var setupVertices = vertexAttachment.vertices; + for (var i_6 = 0; i_6 < vertexCount; i_6++) deform[i_6] += (lastVertices[i_6] - setupVertices[i_6]) * alpha; + } else for (var i_7 = 0; i_7 < vertexCount; i_7++) deform[i_7] += lastVertices[i_7] * alpha; + } + return; + } + var frame = Animation.binarySearch(frames, time); + var prevVertices = frameVertices[frame - 1]; + var nextVertices = frameVertices[frame]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame - 1, 1 - (time - frameTime) / (frames[frame - 1] - frameTime)); + if (1 == alpha) if (blend == MixBlend.add) { + var vertexAttachment = slotAttachment; + if (null == vertexAttachment.bones) { + var setupVertices = vertexAttachment.vertices; + for (var i_8 = 0; i_8 < vertexCount; i_8++) { + var prev = prevVertices[i_8]; + deform[i_8] += prev + (nextVertices[i_8] - prev) * percent - setupVertices[i_8]; + } + } else for (var i_9 = 0; i_9 < vertexCount; i_9++) { + var prev = prevVertices[i_9]; + deform[i_9] += prev + (nextVertices[i_9] - prev) * percent; + } + } else for (var i_10 = 0; i_10 < vertexCount; i_10++) { + var prev = prevVertices[i_10]; + deform[i_10] = prev + (nextVertices[i_10] - prev) * percent; + } else switch (blend) { + case MixBlend.setup: + var vertexAttachment_2 = slotAttachment; + if (null == vertexAttachment_2.bones) { + var setupVertices = vertexAttachment_2.vertices; + for (var i_11 = 0; i_11 < vertexCount; i_11++) { + var prev = prevVertices[i_11], setup = setupVertices[i_11]; + deform[i_11] = setup + (prev + (nextVertices[i_11] - prev) * percent - setup) * alpha; + } + } else for (var i_12 = 0; i_12 < vertexCount; i_12++) { + var prev = prevVertices[i_12]; + deform[i_12] = (prev + (nextVertices[i_12] - prev) * percent) * alpha; + } + break; + + case MixBlend.first: + case MixBlend.replace: + for (var i_13 = 0; i_13 < vertexCount; i_13++) { + var prev = prevVertices[i_13]; + deform[i_13] += (prev + (nextVertices[i_13] - prev) * percent - deform[i_13]) * alpha; + } + break; + + case MixBlend.add: + var vertexAttachment = slotAttachment; + if (null == vertexAttachment.bones) { + var setupVertices = vertexAttachment.vertices; + for (var i_14 = 0; i_14 < vertexCount; i_14++) { + var prev = prevVertices[i_14]; + deform[i_14] += (prev + (nextVertices[i_14] - prev) * percent - setupVertices[i_14]) * alpha; + } + } else for (var i_15 = 0; i_15 < vertexCount; i_15++) { + var prev = prevVertices[i_15]; + deform[i_15] += (prev + (nextVertices[i_15] - prev) * percent) * alpha; + } + } + }; + return DeformTimeline; + })(CurveTimeline); + spine.DeformTimeline = DeformTimeline; + var EventTimeline = (function() { + function EventTimeline(frameCount) { + this.frames = spine.Utils.newFloatArray(frameCount); + this.events = new Array(frameCount); + } + EventTimeline.prototype.getPropertyId = function() { + return TimelineType.event << 24; + }; + EventTimeline.prototype.getFrameCount = function() { + return this.frames.length; + }; + EventTimeline.prototype.setFrame = function(frameIndex, event) { + this.frames[frameIndex] = event.time; + this.events[frameIndex] = event; + }; + EventTimeline.prototype.apply = function(skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + if (null == firedEvents) return; + var frames = this.frames; + var frameCount = this.frames.length; + if (lastTime > time) { + this.apply(skeleton, lastTime, Number.MAX_VALUE, firedEvents, alpha, blend, direction); + lastTime = -1; + } else if (lastTime >= frames[frameCount - 1]) return; + if (time < frames[0]) return; + var frame = 0; + if (lastTime < frames[0]) frame = 0; else { + frame = Animation.binarySearch(frames, lastTime); + var frameTime = frames[frame]; + while (frame > 0) { + if (frames[frame - 1] != frameTime) break; + frame--; + } + } + for (;frame < frameCount && time >= frames[frame]; frame++) firedEvents.push(this.events[frame]); + }; + return EventTimeline; + })(); + spine.EventTimeline = EventTimeline; + var DrawOrderTimeline = (function() { + function DrawOrderTimeline(frameCount) { + this.frames = spine.Utils.newFloatArray(frameCount); + this.drawOrders = new Array(frameCount); + } + DrawOrderTimeline.prototype.getPropertyId = function() { + return TimelineType.drawOrder << 24; + }; + DrawOrderTimeline.prototype.getFrameCount = function() { + return this.frames.length; + }; + DrawOrderTimeline.prototype.setFrame = function(frameIndex, time, drawOrder) { + this.frames[frameIndex] = time; + this.drawOrders[frameIndex] = drawOrder; + }; + DrawOrderTimeline.prototype.apply = function(skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var drawOrder = skeleton.drawOrder; + var slots = skeleton.slots; + if (direction == MixDirection.mixOut && blend == MixBlend.setup) { + spine.Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length); + return; + } + var frames = this.frames; + if (time < frames[0]) { + blend != MixBlend.setup && blend != MixBlend.first || spine.Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length); + return; + } + var frame = 0; + frame = time >= frames[frames.length - 1] ? frames.length - 1 : Animation.binarySearch(frames, time) - 1; + var drawOrderToSetupIndex = this.drawOrders[frame]; + if (null == drawOrderToSetupIndex) spine.Utils.arrayCopy(slots, 0, drawOrder, 0, slots.length); else for (var i = 0, n = drawOrderToSetupIndex.length; i < n; i++) drawOrder[i] = slots[drawOrderToSetupIndex[i]]; + }; + return DrawOrderTimeline; + })(); + spine.DrawOrderTimeline = DrawOrderTimeline; + var IkConstraintTimeline = (function(_super) { + __extends(IkConstraintTimeline, _super); + function IkConstraintTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * IkConstraintTimeline.ENTRIES); + return _this; + } + IkConstraintTimeline.prototype.getPropertyId = function() { + return (TimelineType.ikConstraint << 24) + this.ikConstraintIndex; + }; + IkConstraintTimeline.prototype.setFrame = function(frameIndex, time, mix, softness, bendDirection, compress, stretch) { + frameIndex *= IkConstraintTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + IkConstraintTimeline.MIX] = mix; + this.frames[frameIndex + IkConstraintTimeline.SOFTNESS] = softness; + this.frames[frameIndex + IkConstraintTimeline.BEND_DIRECTION] = bendDirection; + this.frames[frameIndex + IkConstraintTimeline.COMPRESS] = compress ? 1 : 0; + this.frames[frameIndex + IkConstraintTimeline.STRETCH] = stretch ? 1 : 0; + }; + IkConstraintTimeline.prototype.apply = function(skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.ikConstraints[this.ikConstraintIndex]; + if (!constraint.active) return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.mix = constraint.data.mix; + constraint.softness = constraint.data.softness; + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + return; + + case MixBlend.first: + constraint.mix += (constraint.data.mix - constraint.mix) * alpha; + constraint.softness += (constraint.data.softness - constraint.softness) * alpha; + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + } + return; + } + if (time >= frames[frames.length - IkConstraintTimeline.ENTRIES]) { + if (blend == MixBlend.setup) { + constraint.mix = constraint.data.mix + (frames[frames.length + IkConstraintTimeline.PREV_MIX] - constraint.data.mix) * alpha; + constraint.softness = constraint.data.softness + (frames[frames.length + IkConstraintTimeline.PREV_SOFTNESS] - constraint.data.softness) * alpha; + if (direction == MixDirection.mixOut) { + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + } else { + constraint.bendDirection = frames[frames.length + IkConstraintTimeline.PREV_BEND_DIRECTION]; + constraint.compress = 0 != frames[frames.length + IkConstraintTimeline.PREV_COMPRESS]; + constraint.stretch = 0 != frames[frames.length + IkConstraintTimeline.PREV_STRETCH]; + } + } else { + constraint.mix += (frames[frames.length + IkConstraintTimeline.PREV_MIX] - constraint.mix) * alpha; + constraint.softness += (frames[frames.length + IkConstraintTimeline.PREV_SOFTNESS] - constraint.softness) * alpha; + if (direction == MixDirection.mixIn) { + constraint.bendDirection = frames[frames.length + IkConstraintTimeline.PREV_BEND_DIRECTION]; + constraint.compress = 0 != frames[frames.length + IkConstraintTimeline.PREV_COMPRESS]; + constraint.stretch = 0 != frames[frames.length + IkConstraintTimeline.PREV_STRETCH]; + } + } + return; + } + var frame = Animation.binarySearch(frames, time, IkConstraintTimeline.ENTRIES); + var mix = frames[frame + IkConstraintTimeline.PREV_MIX]; + var softness = frames[frame + IkConstraintTimeline.PREV_SOFTNESS]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / IkConstraintTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + IkConstraintTimeline.PREV_TIME] - frameTime)); + if (blend == MixBlend.setup) { + constraint.mix = constraint.data.mix + (mix + (frames[frame + IkConstraintTimeline.MIX] - mix) * percent - constraint.data.mix) * alpha; + constraint.softness = constraint.data.softness + (softness + (frames[frame + IkConstraintTimeline.SOFTNESS] - softness) * percent - constraint.data.softness) * alpha; + if (direction == MixDirection.mixOut) { + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + } else { + constraint.bendDirection = frames[frame + IkConstraintTimeline.PREV_BEND_DIRECTION]; + constraint.compress = 0 != frames[frame + IkConstraintTimeline.PREV_COMPRESS]; + constraint.stretch = 0 != frames[frame + IkConstraintTimeline.PREV_STRETCH]; + } + } else { + constraint.mix += (mix + (frames[frame + IkConstraintTimeline.MIX] - mix) * percent - constraint.mix) * alpha; + constraint.softness += (softness + (frames[frame + IkConstraintTimeline.SOFTNESS] - softness) * percent - constraint.softness) * alpha; + if (direction == MixDirection.mixIn) { + constraint.bendDirection = frames[frame + IkConstraintTimeline.PREV_BEND_DIRECTION]; + constraint.compress = 0 != frames[frame + IkConstraintTimeline.PREV_COMPRESS]; + constraint.stretch = 0 != frames[frame + IkConstraintTimeline.PREV_STRETCH]; + } + } + }; + IkConstraintTimeline.ENTRIES = 6; + IkConstraintTimeline.PREV_TIME = -6; + IkConstraintTimeline.PREV_MIX = -5; + IkConstraintTimeline.PREV_SOFTNESS = -4; + IkConstraintTimeline.PREV_BEND_DIRECTION = -3; + IkConstraintTimeline.PREV_COMPRESS = -2; + IkConstraintTimeline.PREV_STRETCH = -1; + IkConstraintTimeline.MIX = 1; + IkConstraintTimeline.SOFTNESS = 2; + IkConstraintTimeline.BEND_DIRECTION = 3; + IkConstraintTimeline.COMPRESS = 4; + IkConstraintTimeline.STRETCH = 5; + return IkConstraintTimeline; + })(CurveTimeline); + spine.IkConstraintTimeline = IkConstraintTimeline; + var TransformConstraintTimeline = (function(_super) { + __extends(TransformConstraintTimeline, _super); + function TransformConstraintTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * TransformConstraintTimeline.ENTRIES); + return _this; + } + TransformConstraintTimeline.prototype.getPropertyId = function() { + return (TimelineType.transformConstraint << 24) + this.transformConstraintIndex; + }; + TransformConstraintTimeline.prototype.setFrame = function(frameIndex, time, rotateMix, translateMix, scaleMix, shearMix) { + frameIndex *= TransformConstraintTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + TransformConstraintTimeline.ROTATE] = rotateMix; + this.frames[frameIndex + TransformConstraintTimeline.TRANSLATE] = translateMix; + this.frames[frameIndex + TransformConstraintTimeline.SCALE] = scaleMix; + this.frames[frameIndex + TransformConstraintTimeline.SHEAR] = shearMix; + }; + TransformConstraintTimeline.prototype.apply = function(skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.transformConstraints[this.transformConstraintIndex]; + if (!constraint.active) return; + if (time < frames[0]) { + var data = constraint.data; + switch (blend) { + case MixBlend.setup: + constraint.rotateMix = data.rotateMix; + constraint.translateMix = data.translateMix; + constraint.scaleMix = data.scaleMix; + constraint.shearMix = data.shearMix; + return; + + case MixBlend.first: + constraint.rotateMix += (data.rotateMix - constraint.rotateMix) * alpha; + constraint.translateMix += (data.translateMix - constraint.translateMix) * alpha; + constraint.scaleMix += (data.scaleMix - constraint.scaleMix) * alpha; + constraint.shearMix += (data.shearMix - constraint.shearMix) * alpha; + } + return; + } + var rotate = 0, translate = 0, scale = 0, shear = 0; + if (time >= frames[frames.length - TransformConstraintTimeline.ENTRIES]) { + var i = frames.length; + rotate = frames[i + TransformConstraintTimeline.PREV_ROTATE]; + translate = frames[i + TransformConstraintTimeline.PREV_TRANSLATE]; + scale = frames[i + TransformConstraintTimeline.PREV_SCALE]; + shear = frames[i + TransformConstraintTimeline.PREV_SHEAR]; + } else { + var frame = Animation.binarySearch(frames, time, TransformConstraintTimeline.ENTRIES); + rotate = frames[frame + TransformConstraintTimeline.PREV_ROTATE]; + translate = frames[frame + TransformConstraintTimeline.PREV_TRANSLATE]; + scale = frames[frame + TransformConstraintTimeline.PREV_SCALE]; + shear = frames[frame + TransformConstraintTimeline.PREV_SHEAR]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / TransformConstraintTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + TransformConstraintTimeline.PREV_TIME] - frameTime)); + rotate += (frames[frame + TransformConstraintTimeline.ROTATE] - rotate) * percent; + translate += (frames[frame + TransformConstraintTimeline.TRANSLATE] - translate) * percent; + scale += (frames[frame + TransformConstraintTimeline.SCALE] - scale) * percent; + shear += (frames[frame + TransformConstraintTimeline.SHEAR] - shear) * percent; + } + if (blend == MixBlend.setup) { + var data = constraint.data; + constraint.rotateMix = data.rotateMix + (rotate - data.rotateMix) * alpha; + constraint.translateMix = data.translateMix + (translate - data.translateMix) * alpha; + constraint.scaleMix = data.scaleMix + (scale - data.scaleMix) * alpha; + constraint.shearMix = data.shearMix + (shear - data.shearMix) * alpha; + } else { + constraint.rotateMix += (rotate - constraint.rotateMix) * alpha; + constraint.translateMix += (translate - constraint.translateMix) * alpha; + constraint.scaleMix += (scale - constraint.scaleMix) * alpha; + constraint.shearMix += (shear - constraint.shearMix) * alpha; + } + }; + TransformConstraintTimeline.ENTRIES = 5; + TransformConstraintTimeline.PREV_TIME = -5; + TransformConstraintTimeline.PREV_ROTATE = -4; + TransformConstraintTimeline.PREV_TRANSLATE = -3; + TransformConstraintTimeline.PREV_SCALE = -2; + TransformConstraintTimeline.PREV_SHEAR = -1; + TransformConstraintTimeline.ROTATE = 1; + TransformConstraintTimeline.TRANSLATE = 2; + TransformConstraintTimeline.SCALE = 3; + TransformConstraintTimeline.SHEAR = 4; + return TransformConstraintTimeline; + })(CurveTimeline); + spine.TransformConstraintTimeline = TransformConstraintTimeline; + var PathConstraintPositionTimeline = (function(_super) { + __extends(PathConstraintPositionTimeline, _super); + function PathConstraintPositionTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * PathConstraintPositionTimeline.ENTRIES); + return _this; + } + PathConstraintPositionTimeline.prototype.getPropertyId = function() { + return (TimelineType.pathConstraintPosition << 24) + this.pathConstraintIndex; + }; + PathConstraintPositionTimeline.prototype.setFrame = function(frameIndex, time, value) { + frameIndex *= PathConstraintPositionTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + PathConstraintPositionTimeline.VALUE] = value; + }; + PathConstraintPositionTimeline.prototype.apply = function(skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.pathConstraints[this.pathConstraintIndex]; + if (!constraint.active) return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.position = constraint.data.position; + return; + + case MixBlend.first: + constraint.position += (constraint.data.position - constraint.position) * alpha; + } + return; + } + var position = 0; + if (time >= frames[frames.length - PathConstraintPositionTimeline.ENTRIES]) position = frames[frames.length + PathConstraintPositionTimeline.PREV_VALUE]; else { + var frame = Animation.binarySearch(frames, time, PathConstraintPositionTimeline.ENTRIES); + position = frames[frame + PathConstraintPositionTimeline.PREV_VALUE]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / PathConstraintPositionTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PathConstraintPositionTimeline.PREV_TIME] - frameTime)); + position += (frames[frame + PathConstraintPositionTimeline.VALUE] - position) * percent; + } + blend == MixBlend.setup ? constraint.position = constraint.data.position + (position - constraint.data.position) * alpha : constraint.position += (position - constraint.position) * alpha; + }; + PathConstraintPositionTimeline.ENTRIES = 2; + PathConstraintPositionTimeline.PREV_TIME = -2; + PathConstraintPositionTimeline.PREV_VALUE = -1; + PathConstraintPositionTimeline.VALUE = 1; + return PathConstraintPositionTimeline; + })(CurveTimeline); + spine.PathConstraintPositionTimeline = PathConstraintPositionTimeline; + var PathConstraintSpacingTimeline = (function(_super) { + __extends(PathConstraintSpacingTimeline, _super); + function PathConstraintSpacingTimeline(frameCount) { + return _super.call(this, frameCount) || this; + } + PathConstraintSpacingTimeline.prototype.getPropertyId = function() { + return (TimelineType.pathConstraintSpacing << 24) + this.pathConstraintIndex; + }; + PathConstraintSpacingTimeline.prototype.apply = function(skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.pathConstraints[this.pathConstraintIndex]; + if (!constraint.active) return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.spacing = constraint.data.spacing; + return; + + case MixBlend.first: + constraint.spacing += (constraint.data.spacing - constraint.spacing) * alpha; + } + return; + } + var spacing = 0; + if (time >= frames[frames.length - PathConstraintSpacingTimeline.ENTRIES]) spacing = frames[frames.length + PathConstraintSpacingTimeline.PREV_VALUE]; else { + var frame = Animation.binarySearch(frames, time, PathConstraintSpacingTimeline.ENTRIES); + spacing = frames[frame + PathConstraintSpacingTimeline.PREV_VALUE]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / PathConstraintSpacingTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PathConstraintSpacingTimeline.PREV_TIME] - frameTime)); + spacing += (frames[frame + PathConstraintSpacingTimeline.VALUE] - spacing) * percent; + } + blend == MixBlend.setup ? constraint.spacing = constraint.data.spacing + (spacing - constraint.data.spacing) * alpha : constraint.spacing += (spacing - constraint.spacing) * alpha; + }; + return PathConstraintSpacingTimeline; + })(PathConstraintPositionTimeline); + spine.PathConstraintSpacingTimeline = PathConstraintSpacingTimeline; + var PathConstraintMixTimeline = (function(_super) { + __extends(PathConstraintMixTimeline, _super); + function PathConstraintMixTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * PathConstraintMixTimeline.ENTRIES); + return _this; + } + PathConstraintMixTimeline.prototype.getPropertyId = function() { + return (TimelineType.pathConstraintMix << 24) + this.pathConstraintIndex; + }; + PathConstraintMixTimeline.prototype.setFrame = function(frameIndex, time, rotateMix, translateMix) { + frameIndex *= PathConstraintMixTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + PathConstraintMixTimeline.ROTATE] = rotateMix; + this.frames[frameIndex + PathConstraintMixTimeline.TRANSLATE] = translateMix; + }; + PathConstraintMixTimeline.prototype.apply = function(skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.pathConstraints[this.pathConstraintIndex]; + if (!constraint.active) return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.rotateMix = constraint.data.rotateMix; + constraint.translateMix = constraint.data.translateMix; + return; + + case MixBlend.first: + constraint.rotateMix += (constraint.data.rotateMix - constraint.rotateMix) * alpha; + constraint.translateMix += (constraint.data.translateMix - constraint.translateMix) * alpha; + } + return; + } + var rotate = 0, translate = 0; + if (time >= frames[frames.length - PathConstraintMixTimeline.ENTRIES]) { + rotate = frames[frames.length + PathConstraintMixTimeline.PREV_ROTATE]; + translate = frames[frames.length + PathConstraintMixTimeline.PREV_TRANSLATE]; + } else { + var frame = Animation.binarySearch(frames, time, PathConstraintMixTimeline.ENTRIES); + rotate = frames[frame + PathConstraintMixTimeline.PREV_ROTATE]; + translate = frames[frame + PathConstraintMixTimeline.PREV_TRANSLATE]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / PathConstraintMixTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PathConstraintMixTimeline.PREV_TIME] - frameTime)); + rotate += (frames[frame + PathConstraintMixTimeline.ROTATE] - rotate) * percent; + translate += (frames[frame + PathConstraintMixTimeline.TRANSLATE] - translate) * percent; + } + if (blend == MixBlend.setup) { + constraint.rotateMix = constraint.data.rotateMix + (rotate - constraint.data.rotateMix) * alpha; + constraint.translateMix = constraint.data.translateMix + (translate - constraint.data.translateMix) * alpha; + } else { + constraint.rotateMix += (rotate - constraint.rotateMix) * alpha; + constraint.translateMix += (translate - constraint.translateMix) * alpha; + } + }; + PathConstraintMixTimeline.ENTRIES = 3; + PathConstraintMixTimeline.PREV_TIME = -3; + PathConstraintMixTimeline.PREV_ROTATE = -2; + PathConstraintMixTimeline.PREV_TRANSLATE = -1; + PathConstraintMixTimeline.ROTATE = 1; + PathConstraintMixTimeline.TRANSLATE = 2; + return PathConstraintMixTimeline; + })(CurveTimeline); + spine.PathConstraintMixTimeline = PathConstraintMixTimeline; + })(spine || (spine = {})); + var spine; + (function(spine) { + var AnimationState = (function() { + function AnimationState(data) { + this.tracks = new Array(); + this.timeScale = 1; + this.events = new Array(); + this.listeners = new Array(); + this.queue = new EventQueue(this); + this.propertyIDs = new spine.IntSet(); + this.animationsChanged = false; + this.trackEntryPool = new spine.Pool(function() { + return new TrackEntry(); + }); + this.data = data; + } + AnimationState.prototype.update = function(delta) { + delta *= this.timeScale; + var tracks = this.tracks; + for (var i = 0, n = tracks.length; i < n; i++) { + var current = tracks[i]; + if (null == current) continue; + current.animationLast = current.nextAnimationLast; + current.trackLast = current.nextTrackLast; + var currentDelta = delta * current.timeScale; + if (current.delay > 0) { + current.delay -= currentDelta; + if (current.delay > 0) continue; + currentDelta = -current.delay; + current.delay = 0; + } + var next = current.next; + if (null != next) { + var nextTime = current.trackLast - next.delay; + if (nextTime >= 0) { + next.delay = 0; + next.trackTime += 0 == current.timeScale ? 0 : (nextTime / current.timeScale + delta) * next.timeScale; + current.trackTime += currentDelta; + this.setCurrent(i, next, true); + while (null != next.mixingFrom) { + next.mixTime += delta; + next = next.mixingFrom; + } + continue; + } + } else if (current.trackLast >= current.trackEnd && null == current.mixingFrom) { + tracks[i] = null; + this.queue.end(current); + this.disposeNext(current); + continue; + } + if (null != current.mixingFrom && this.updateMixingFrom(current, delta)) { + var from = current.mixingFrom; + current.mixingFrom = null; + null != from && (from.mixingTo = null); + while (null != from) { + this.queue.end(from); + from = from.mixingFrom; + } + } + current.trackTime += currentDelta; + } + this.queue.drain(); + }; + AnimationState.prototype.updateMixingFrom = function(to, delta) { + var from = to.mixingFrom; + if (null == from) return true; + var finished = this.updateMixingFrom(from, delta); + from.animationLast = from.nextAnimationLast; + from.trackLast = from.nextTrackLast; + if (to.mixTime > 0 && to.mixTime >= to.mixDuration) { + if (0 == from.totalAlpha || 0 == to.mixDuration) { + to.mixingFrom = from.mixingFrom; + null != from.mixingFrom && (from.mixingFrom.mixingTo = to); + to.interruptAlpha = from.interruptAlpha; + this.queue.end(from); + } + return finished; + } + from.trackTime += delta * from.timeScale; + to.mixTime += delta; + return false; + }; + AnimationState.prototype.apply = function(skeleton) { + if (null == skeleton) throw new Error("skeleton cannot be null."); + this.animationsChanged && this._animationsChanged(); + var events = this.events; + var tracks = this.tracks; + var applied = false; + for (var i = 0, n = tracks.length; i < n; i++) { + var current = tracks[i]; + if (null == current || current.delay > 0) continue; + applied = true; + var blend = 0 == i ? spine.MixBlend.first : current.mixBlend; + var mix = current.alpha; + null != current.mixingFrom ? mix *= this.applyMixingFrom(current, skeleton, blend) : current.trackTime >= current.trackEnd && null == current.next && (mix = 0); + var animationLast = current.animationLast, animationTime = current.getAnimationTime(); + var timelineCount = current.animation.timelines.length; + var timelines = current.animation.timelines; + if (0 == i && 1 == mix || blend == spine.MixBlend.add) for (var ii = 0; ii < timelineCount; ii++) { + spine.Utils.webkit602BugfixHelper(mix, blend); + timelines[ii].apply(skeleton, animationLast, animationTime, events, mix, blend, spine.MixDirection.mixIn); + } else { + var timelineMode = current.timelineMode; + var firstFrame = 0 == current.timelinesRotation.length; + firstFrame && spine.Utils.setArraySize(current.timelinesRotation, timelineCount << 1, null); + var timelinesRotation = current.timelinesRotation; + for (var ii = 0; ii < timelineCount; ii++) { + var timeline = timelines[ii]; + var timelineBlend = (timelineMode[ii] & AnimationState.NOT_LAST - 1) == AnimationState.SUBSEQUENT ? blend : spine.MixBlend.setup; + if (timeline instanceof spine.RotateTimeline) this.applyRotateTimeline(timeline, skeleton, animationTime, mix, timelineBlend, timelinesRotation, ii << 1, firstFrame); else { + spine.Utils.webkit602BugfixHelper(mix, blend); + timeline.apply(skeleton, animationLast, animationTime, events, mix, timelineBlend, spine.MixDirection.mixIn); + } + } + } + this.queueEvents(current, animationTime); + events.length = 0; + current.nextAnimationLast = animationTime; + current.nextTrackLast = current.trackTime; + } + this.queue.drain(); + return applied; + }; + AnimationState.prototype.applyMixingFrom = function(to, skeleton, blend) { + var from = to.mixingFrom; + null != from.mixingFrom && this.applyMixingFrom(from, skeleton, blend); + var mix = 0; + if (0 == to.mixDuration) { + mix = 1; + blend == spine.MixBlend.first && (blend = spine.MixBlend.setup); + } else { + mix = to.mixTime / to.mixDuration; + mix > 1 && (mix = 1); + blend != spine.MixBlend.first && (blend = from.mixBlend); + } + var events = mix < from.eventThreshold ? this.events : null; + var attachments = mix < from.attachmentThreshold, drawOrder = mix < from.drawOrderThreshold; + var animationLast = from.animationLast, animationTime = from.getAnimationTime(); + var timelineCount = from.animation.timelines.length; + var timelines = from.animation.timelines; + var alphaHold = from.alpha * to.interruptAlpha, alphaMix = alphaHold * (1 - mix); + if (blend == spine.MixBlend.add) for (var i = 0; i < timelineCount; i++) timelines[i].apply(skeleton, animationLast, animationTime, events, alphaMix, blend, spine.MixDirection.mixOut); else { + var timelineMode = from.timelineMode; + var timelineHoldMix = from.timelineHoldMix; + var firstFrame = 0 == from.timelinesRotation.length; + firstFrame && spine.Utils.setArraySize(from.timelinesRotation, timelineCount << 1, null); + var timelinesRotation = from.timelinesRotation; + from.totalAlpha = 0; + for (var i = 0; i < timelineCount; i++) { + var timeline = timelines[i]; + var direction = spine.MixDirection.mixOut; + var timelineBlend = void 0; + var alpha = 0; + switch (timelineMode[i] & AnimationState.NOT_LAST - 1) { + case AnimationState.SUBSEQUENT: + timelineBlend = blend; + if (!attachments && timeline instanceof spine.AttachmentTimeline) { + if ((timelineMode[i] & AnimationState.NOT_LAST) == AnimationState.NOT_LAST) continue; + timelineBlend = spine.MixBlend.setup; + } + if (!drawOrder && timeline instanceof spine.DrawOrderTimeline) continue; + alpha = alphaMix; + break; + + case AnimationState.FIRST: + timelineBlend = spine.MixBlend.setup; + alpha = alphaMix; + break; + + case AnimationState.HOLD: + timelineBlend = spine.MixBlend.setup; + alpha = alphaHold; + break; + + default: + timelineBlend = spine.MixBlend.setup; + var holdMix = timelineHoldMix[i]; + alpha = alphaHold * Math.max(0, 1 - holdMix.mixTime / holdMix.mixDuration); + } + from.totalAlpha += alpha; + if (timeline instanceof spine.RotateTimeline) this.applyRotateTimeline(timeline, skeleton, animationTime, alpha, timelineBlend, timelinesRotation, i << 1, firstFrame); else { + spine.Utils.webkit602BugfixHelper(alpha, blend); + timelineBlend == spine.MixBlend.setup && (timeline instanceof spine.AttachmentTimeline ? (attachments || (timelineMode[i] & AnimationState.NOT_LAST) == AnimationState.NOT_LAST) && (direction = spine.MixDirection.mixIn) : timeline instanceof spine.DrawOrderTimeline && drawOrder && (direction = spine.MixDirection.mixIn)); + timeline.apply(skeleton, animationLast, animationTime, events, alpha, timelineBlend, direction); + } + } + } + to.mixDuration > 0 && this.queueEvents(from, animationTime); + this.events.length = 0; + from.nextAnimationLast = animationTime; + from.nextTrackLast = from.trackTime; + return mix; + }; + AnimationState.prototype.applyRotateTimeline = function(timeline, skeleton, time, alpha, blend, timelinesRotation, i, firstFrame) { + firstFrame && (timelinesRotation[i] = 0); + if (1 == alpha) { + timeline.apply(skeleton, 0, time, null, 1, blend, spine.MixDirection.mixIn); + return; + } + var rotateTimeline = timeline; + var frames = rotateTimeline.frames; + var bone = skeleton.bones[rotateTimeline.boneIndex]; + if (!bone.active) return; + var r1 = 0, r2 = 0; + if (time < frames[0]) switch (blend) { + case spine.MixBlend.setup: + bone.rotation = bone.data.rotation; + + default: + return; + + case spine.MixBlend.first: + r1 = bone.rotation; + r2 = bone.data.rotation; + } else { + r1 = blend == spine.MixBlend.setup ? bone.data.rotation : bone.rotation; + if (time >= frames[frames.length - spine.RotateTimeline.ENTRIES]) r2 = bone.data.rotation + frames[frames.length + spine.RotateTimeline.PREV_ROTATION]; else { + var frame = spine.Animation.binarySearch(frames, time, spine.RotateTimeline.ENTRIES); + var prevRotation = frames[frame + spine.RotateTimeline.PREV_ROTATION]; + var frameTime = frames[frame]; + var percent = rotateTimeline.getCurvePercent((frame >> 1) - 1, 1 - (time - frameTime) / (frames[frame + spine.RotateTimeline.PREV_TIME] - frameTime)); + r2 = frames[frame + spine.RotateTimeline.ROTATION] - prevRotation; + r2 -= 360 * (16384 - (16384.499999999996 - r2 / 360 | 0)); + r2 = prevRotation + r2 * percent + bone.data.rotation; + r2 -= 360 * (16384 - (16384.499999999996 - r2 / 360 | 0)); + } + } + var total = 0, diff = r2 - r1; + diff -= 360 * (16384 - (16384.499999999996 - diff / 360 | 0)); + if (0 == diff) total = timelinesRotation[i]; else { + var lastTotal = 0, lastDiff = 0; + if (firstFrame) { + lastTotal = 0; + lastDiff = diff; + } else { + lastTotal = timelinesRotation[i]; + lastDiff = timelinesRotation[i + 1]; + } + var current = diff > 0, dir = lastTotal >= 0; + if (spine.MathUtils.signum(lastDiff) != spine.MathUtils.signum(diff) && Math.abs(lastDiff) <= 90) { + Math.abs(lastTotal) > 180 && (lastTotal += 360 * spine.MathUtils.signum(lastTotal)); + dir = current; + } + total = diff + lastTotal - lastTotal % 360; + dir != current && (total += 360 * spine.MathUtils.signum(lastTotal)); + timelinesRotation[i] = total; + } + timelinesRotation[i + 1] = diff; + r1 += total * alpha; + bone.rotation = r1 - 360 * (16384 - (16384.499999999996 - r1 / 360 | 0)); + }; + AnimationState.prototype.queueEvents = function(entry, animationTime) { + var animationStart = entry.animationStart, animationEnd = entry.animationEnd; + var duration = animationEnd - animationStart; + var trackLastWrapped = entry.trackLast % duration; + var events = this.events; + var i = 0, n = events.length; + for (;i < n; i++) { + var event_1 = events[i]; + if (event_1.time < trackLastWrapped) break; + if (event_1.time > animationEnd) continue; + this.queue.event(entry, event_1); + } + var complete = false; + complete = entry.loop ? 0 == duration || trackLastWrapped > entry.trackTime % duration : animationTime >= animationEnd && entry.animationLast < animationEnd; + complete && this.queue.complete(entry); + for (;i < n; i++) { + var event_2 = events[i]; + if (event_2.time < animationStart) continue; + this.queue.event(entry, events[i]); + } + }; + AnimationState.prototype.clearTracks = function() { + var oldDrainDisabled = this.queue.drainDisabled; + this.queue.drainDisabled = true; + for (var i = 0, n = this.tracks.length; i < n; i++) this.clearTrack(i); + this.tracks.length = 0; + this.queue.drainDisabled = oldDrainDisabled; + this.queue.drain(); + }; + AnimationState.prototype.clearTrack = function(trackIndex) { + if (trackIndex >= this.tracks.length) return; + var current = this.tracks[trackIndex]; + if (null == current) return; + this.queue.end(current); + this.disposeNext(current); + var entry = current; + while (true) { + var from = entry.mixingFrom; + if (null == from) break; + this.queue.end(from); + entry.mixingFrom = null; + entry.mixingTo = null; + entry = from; + } + this.tracks[current.trackIndex] = null; + this.queue.drain(); + }; + AnimationState.prototype.setCurrent = function(index, current, interrupt) { + var from = this.expandToIndex(index); + this.tracks[index] = current; + if (null != from) { + interrupt && this.queue.interrupt(from); + current.mixingFrom = from; + from.mixingTo = current; + current.mixTime = 0; + null != from.mixingFrom && from.mixDuration > 0 && (current.interruptAlpha *= Math.min(1, from.mixTime / from.mixDuration)); + from.timelinesRotation.length = 0; + } + this.queue.start(current); + }; + AnimationState.prototype.setAnimation = function(trackIndex, animationName, loop) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (null == animation) throw new Error("Animation not found: " + animationName); + return this.setAnimationWith(trackIndex, animation, loop); + }; + AnimationState.prototype.setAnimationWith = function(trackIndex, animation, loop) { + if (null == animation) throw new Error("animation cannot be null."); + var interrupt = true; + var current = this.expandToIndex(trackIndex); + if (null != current) if (-1 == current.nextTrackLast) { + this.tracks[trackIndex] = current.mixingFrom; + this.queue.interrupt(current); + this.queue.end(current); + this.disposeNext(current); + current = current.mixingFrom; + interrupt = false; + } else this.disposeNext(current); + var entry = this.trackEntry(trackIndex, animation, loop, current); + this.setCurrent(trackIndex, entry, interrupt); + this.queue.drain(); + return entry; + }; + AnimationState.prototype.addAnimation = function(trackIndex, animationName, loop, delay) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (null == animation) throw new Error("Animation not found: " + animationName); + return this.addAnimationWith(trackIndex, animation, loop, delay); + }; + AnimationState.prototype.addAnimationWith = function(trackIndex, animation, loop, delay) { + if (null == animation) throw new Error("animation cannot be null."); + var last = this.expandToIndex(trackIndex); + if (null != last) while (null != last.next) last = last.next; + var entry = this.trackEntry(trackIndex, animation, loop, last); + if (null == last) { + this.setCurrent(trackIndex, entry, true); + this.queue.drain(); + } else { + last.next = entry; + if (delay <= 0) { + var duration = last.animationEnd - last.animationStart; + if (0 != duration) { + last.loop ? delay += duration * (1 + (last.trackTime / duration | 0)) : delay += Math.max(duration, last.trackTime); + delay -= this.data.getMix(last.animation, animation); + } else delay = last.trackTime; + } + } + entry.delay = delay; + return entry; + }; + AnimationState.prototype.setEmptyAnimation = function(trackIndex, mixDuration) { + var entry = this.setAnimationWith(trackIndex, AnimationState.emptyAnimation, false); + entry.mixDuration = mixDuration; + entry.trackEnd = mixDuration; + return entry; + }; + AnimationState.prototype.addEmptyAnimation = function(trackIndex, mixDuration, delay) { + delay <= 0 && (delay -= mixDuration); + var entry = this.addAnimationWith(trackIndex, AnimationState.emptyAnimation, false, delay); + entry.mixDuration = mixDuration; + entry.trackEnd = mixDuration; + return entry; + }; + AnimationState.prototype.setEmptyAnimations = function(mixDuration) { + var oldDrainDisabled = this.queue.drainDisabled; + this.queue.drainDisabled = true; + for (var i = 0, n = this.tracks.length; i < n; i++) { + var current = this.tracks[i]; + null != current && this.setEmptyAnimation(current.trackIndex, mixDuration); + } + this.queue.drainDisabled = oldDrainDisabled; + this.queue.drain(); + }; + AnimationState.prototype.expandToIndex = function(index) { + if (index < this.tracks.length) return this.tracks[index]; + spine.Utils.ensureArrayCapacity(this.tracks, index + 1, null); + this.tracks.length = index + 1; + return null; + }; + AnimationState.prototype.trackEntry = function(trackIndex, animation, loop, last) { + var entry = this.trackEntryPool.obtain(); + entry.trackIndex = trackIndex; + entry.animation = animation; + entry.loop = loop; + entry.holdPrevious = false; + entry.eventThreshold = 0; + entry.attachmentThreshold = 0; + entry.drawOrderThreshold = 0; + entry.animationStart = 0; + entry.animationEnd = animation.duration; + entry.animationLast = -1; + entry.nextAnimationLast = -1; + entry.delay = 0; + entry.trackTime = 0; + entry.trackLast = -1; + entry.nextTrackLast = -1; + entry.trackEnd = Number.MAX_VALUE; + entry.timeScale = 1; + entry.alpha = 1; + entry.interruptAlpha = 1; + entry.mixTime = 0; + entry.mixDuration = null == last ? 0 : this.data.getMix(last.animation, animation); + return entry; + }; + AnimationState.prototype.disposeNext = function(entry) { + var next = entry.next; + while (null != next) { + this.queue.dispose(next); + next = next.next; + } + entry.next = null; + }; + AnimationState.prototype._animationsChanged = function() { + this.animationsChanged = false; + this.propertyIDs.clear(); + for (var i = 0, n = this.tracks.length; i < n; i++) { + var entry = this.tracks[i]; + if (null == entry) continue; + while (null != entry.mixingFrom) entry = entry.mixingFrom; + do { + null != entry.mixingFrom && entry.mixBlend == spine.MixBlend.add || this.computeHold(entry); + entry = entry.mixingTo; + } while (null != entry); + } + this.propertyIDs.clear(); + for (var i = this.tracks.length - 1; i >= 0; i--) { + var entry = this.tracks[i]; + while (null != entry) { + this.computeNotLast(entry); + entry = entry.mixingFrom; + } + } + }; + AnimationState.prototype.computeHold = function(entry) { + var to = entry.mixingTo; + var timelines = entry.animation.timelines; + var timelinesCount = entry.animation.timelines.length; + var timelineMode = spine.Utils.setArraySize(entry.timelineMode, timelinesCount); + entry.timelineHoldMix.length = 0; + var timelineDipMix = spine.Utils.setArraySize(entry.timelineHoldMix, timelinesCount); + var propertyIDs = this.propertyIDs; + if (null != to && to.holdPrevious) { + for (var i = 0; i < timelinesCount; i++) { + propertyIDs.add(timelines[i].getPropertyId()); + timelineMode[i] = AnimationState.HOLD; + } + return; + } + outer: for (var i = 0; i < timelinesCount; i++) { + var timeline = timelines[i]; + var id = timeline.getPropertyId(); + if (propertyIDs.add(id)) if (null == to || timeline instanceof spine.AttachmentTimeline || timeline instanceof spine.DrawOrderTimeline || timeline instanceof spine.EventTimeline || !to.animation.hasTimeline(id)) timelineMode[i] = AnimationState.FIRST; else { + for (var next = to.mixingTo; null != next; next = next.mixingTo) { + if (next.animation.hasTimeline(id)) continue; + if (entry.mixDuration > 0) { + timelineMode[i] = AnimationState.HOLD_MIX; + timelineDipMix[i] = next; + continue outer; + } + break; + } + timelineMode[i] = AnimationState.HOLD; + } else timelineMode[i] = AnimationState.SUBSEQUENT; + } + }; + AnimationState.prototype.computeNotLast = function(entry) { + var timelines = entry.animation.timelines; + var timelinesCount = entry.animation.timelines.length; + var timelineMode = entry.timelineMode; + var propertyIDs = this.propertyIDs; + for (var i = 0; i < timelinesCount; i++) if (timelines[i] instanceof spine.AttachmentTimeline) { + var timeline = timelines[i]; + propertyIDs.add(timeline.slotIndex) || (timelineMode[i] |= AnimationState.NOT_LAST); + } + }; + AnimationState.prototype.getCurrent = function(trackIndex) { + if (trackIndex >= this.tracks.length) return null; + return this.tracks[trackIndex]; + }; + AnimationState.prototype.addListener = function(listener) { + if (null == listener) throw new Error("listener cannot be null."); + this.listeners.push(listener); + }; + AnimationState.prototype.removeListener = function(listener) { + var index = this.listeners.indexOf(listener); + index >= 0 && this.listeners.splice(index, 1); + }; + AnimationState.prototype.clearListeners = function() { + this.listeners.length = 0; + }; + AnimationState.prototype.clearListenerNotifications = function() { + this.queue.clear(); + }; + AnimationState.emptyAnimation = new spine.Animation("", [], 0); + AnimationState.SUBSEQUENT = 0; + AnimationState.FIRST = 1; + AnimationState.HOLD = 2; + AnimationState.HOLD_MIX = 3; + AnimationState.NOT_LAST = 4; + return AnimationState; + })(); + spine.AnimationState = AnimationState; + var TrackEntry = (function() { + function TrackEntry() { + this.mixBlend = spine.MixBlend.replace; + this.timelineMode = new Array(); + this.timelineHoldMix = new Array(); + this.timelinesRotation = new Array(); + } + TrackEntry.prototype.reset = function() { + this.next = null; + this.mixingFrom = null; + this.mixingTo = null; + this.animation = null; + this.listener = null; + this.timelineMode.length = 0; + this.timelineHoldMix.length = 0; + this.timelinesRotation.length = 0; + }; + TrackEntry.prototype.getAnimationTime = function() { + if (this.loop) { + var duration = this.animationEnd - this.animationStart; + if (0 == duration) return this.animationStart; + return this.trackTime % duration + this.animationStart; + } + return Math.min(this.trackTime + this.animationStart, this.animationEnd); + }; + TrackEntry.prototype.setAnimationLast = function(animationLast) { + this.animationLast = animationLast; + this.nextAnimationLast = animationLast; + }; + TrackEntry.prototype.isComplete = function() { + return this.trackTime >= this.animationEnd - this.animationStart; + }; + TrackEntry.prototype.resetRotationDirections = function() { + this.timelinesRotation.length = 0; + }; + return TrackEntry; + })(); + spine.TrackEntry = TrackEntry; + var EventQueue = (function() { + function EventQueue(animState) { + this.objects = []; + this.drainDisabled = false; + this.animState = animState; + } + EventQueue.prototype.start = function(entry) { + this.objects.push(EventType.start); + this.objects.push(entry); + this.animState.animationsChanged = true; + }; + EventQueue.prototype.interrupt = function(entry) { + this.objects.push(EventType.interrupt); + this.objects.push(entry); + }; + EventQueue.prototype.end = function(entry) { + this.objects.push(EventType.end); + this.objects.push(entry); + this.animState.animationsChanged = true; + }; + EventQueue.prototype.dispose = function(entry) { + this.objects.push(EventType.dispose); + this.objects.push(entry); + }; + EventQueue.prototype.complete = function(entry) { + this.objects.push(EventType.complete); + this.objects.push(entry); + }; + EventQueue.prototype.event = function(entry, event) { + this.objects.push(EventType.event); + this.objects.push(entry); + this.objects.push(event); + }; + EventQueue.prototype.drain = function() { + if (this.drainDisabled) return; + this.drainDisabled = true; + var objects = this.objects; + var listeners = this.animState.listeners; + for (var i = 0; i < objects.length; i += 2) { + var type = objects[i]; + var entry = objects[i + 1]; + switch (type) { + case EventType.start: + null != entry.listener && entry.listener.start && entry.listener.start(entry); + for (var ii = 0; ii < listeners.length; ii++) listeners[ii].start && listeners[ii].start(entry); + break; + + case EventType.interrupt: + null != entry.listener && entry.listener.interrupt && entry.listener.interrupt(entry); + for (var ii = 0; ii < listeners.length; ii++) listeners[ii].interrupt && listeners[ii].interrupt(entry); + break; + + case EventType.end: + null != entry.listener && entry.listener.end && entry.listener.end(entry); + for (var ii = 0; ii < listeners.length; ii++) listeners[ii].end && listeners[ii].end(entry); + + case EventType.dispose: + null != entry.listener && entry.listener.dispose && entry.listener.dispose(entry); + for (var ii = 0; ii < listeners.length; ii++) listeners[ii].dispose && listeners[ii].dispose(entry); + this.animState.trackEntryPool.free(entry); + break; + + case EventType.complete: + null != entry.listener && entry.listener.complete && entry.listener.complete(entry); + for (var ii = 0; ii < listeners.length; ii++) listeners[ii].complete && listeners[ii].complete(entry); + break; + + case EventType.event: + var event_3 = objects[2 + i++]; + null != entry.listener && entry.listener.event && entry.listener.event(entry, event_3); + for (var ii = 0; ii < listeners.length; ii++) listeners[ii].event && listeners[ii].event(entry, event_3); + } + } + this.clear(); + this.drainDisabled = false; + }; + EventQueue.prototype.clear = function() { + this.objects.length = 0; + }; + return EventQueue; + })(); + spine.EventQueue = EventQueue; + var EventType; + (function(EventType) { + EventType[EventType["start"] = 0] = "start"; + EventType[EventType["interrupt"] = 1] = "interrupt"; + EventType[EventType["end"] = 2] = "end"; + EventType[EventType["dispose"] = 3] = "dispose"; + EventType[EventType["complete"] = 4] = "complete"; + EventType[EventType["event"] = 5] = "event"; + })(EventType = spine.EventType || (spine.EventType = {})); + var AnimationStateAdapter = (function() { + function AnimationStateAdapter() {} + AnimationStateAdapter.prototype.start = function(entry) {}; + AnimationStateAdapter.prototype.interrupt = function(entry) {}; + AnimationStateAdapter.prototype.end = function(entry) {}; + AnimationStateAdapter.prototype.dispose = function(entry) {}; + AnimationStateAdapter.prototype.complete = function(entry) {}; + AnimationStateAdapter.prototype.event = function(entry, event) {}; + return AnimationStateAdapter; + })(); + spine.AnimationStateAdapter = AnimationStateAdapter; + })(spine || (spine = {})); + var spine; + (function(spine) { + var AnimationStateData = (function() { + function AnimationStateData(skeletonData) { + this.animationToMixTime = {}; + this.defaultMix = 0; + if (null == skeletonData) throw new Error("skeletonData cannot be null."); + this.skeletonData = skeletonData; + } + AnimationStateData.prototype.setMix = function(fromName, toName, duration) { + var from = this.skeletonData.findAnimation(fromName); + if (null == from) throw new Error("Animation not found: " + fromName); + var to = this.skeletonData.findAnimation(toName); + if (null == to) throw new Error("Animation not found: " + toName); + this.setMixWith(from, to, duration); + }; + AnimationStateData.prototype.setMixWith = function(from, to, duration) { + if (null == from) throw new Error("from cannot be null."); + if (null == to) throw new Error("to cannot be null."); + var key = from.name + "." + to.name; + this.animationToMixTime[key] = duration; + }; + AnimationStateData.prototype.getMix = function(from, to) { + var key = from.name + "." + to.name; + var value = this.animationToMixTime[key]; + return void 0 === value ? this.defaultMix : value; + }; + return AnimationStateData; + })(); + spine.AnimationStateData = AnimationStateData; + })(spine || (spine = {})); + var spine; + (function(spine) { + var AssetManager = (function() { + function AssetManager(textureLoader, pathPrefix) { + void 0 === pathPrefix && (pathPrefix = ""); + this.assets = {}; + this.errors = {}; + this.toLoad = 0; + this.loaded = 0; + this.textureLoader = textureLoader; + this.pathPrefix = pathPrefix; + } + AssetManager.downloadText = function(url, success, error) { + var request = new XMLHttpRequest(); + request.open("GET", url, true); + request.onload = function() { + 200 == request.status ? success(request.responseText) : error(request.status, request.responseText); + }; + request.onerror = function() { + error(request.status, request.responseText); + }; + request.send(); + }; + AssetManager.downloadBinary = function(url, success, error) { + var request = new XMLHttpRequest(); + request.open("GET", url, true); + request.responseType = "arraybuffer"; + request.onload = function() { + 200 == request.status ? success(new Uint8Array(request.response)) : error(request.status, request.responseText); + }; + request.onerror = function() { + error(request.status, request.responseText); + }; + request.send(); + }; + AssetManager.prototype.loadBinary = function(path, success, error) { + var _this = this; + void 0 === success && (success = null); + void 0 === error && (error = null); + path = this.pathPrefix + path; + this.toLoad++; + AssetManager.downloadBinary(path, (function(data) { + _this.assets[path] = data; + success && success(path, data); + _this.toLoad--; + _this.loaded++; + }), (function(state, responseText) { + _this.errors[path] = "Couldn't load binary " + path + ": status " + status + ", " + responseText; + error && error(path, "Couldn't load binary " + path + ": status " + status + ", " + responseText); + _this.toLoad--; + _this.loaded++; + })); + }; + AssetManager.prototype.loadText = function(path, success, error) { + var _this = this; + void 0 === success && (success = null); + void 0 === error && (error = null); + path = this.pathPrefix + path; + this.toLoad++; + AssetManager.downloadText(path, (function(data) { + _this.assets[path] = data; + success && success(path, data); + _this.toLoad--; + _this.loaded++; + }), (function(state, responseText) { + _this.errors[path] = "Couldn't load text " + path + ": status " + status + ", " + responseText; + error && error(path, "Couldn't load text " + path + ": status " + status + ", " + responseText); + _this.toLoad--; + _this.loaded++; + })); + }; + AssetManager.prototype.loadTexture = function(path, success, error) { + var _this = this; + void 0 === success && (success = null); + void 0 === error && (error = null); + path = this.pathPrefix + path; + this.toLoad++; + var img = new Image(); + img.crossOrigin = "anonymous"; + img.onload = function(ev) { + var texture = _this.textureLoader(img); + _this.assets[path] = texture; + _this.toLoad--; + _this.loaded++; + success && success(path, img); + }; + img.onerror = function(ev) { + _this.errors[path] = "Couldn't load image " + path; + _this.toLoad--; + _this.loaded++; + error && error(path, "Couldn't load image " + path); + }; + img.src = path; + }; + AssetManager.prototype.loadTextureData = function(path, data, success, error) { + var _this = this; + void 0 === success && (success = null); + void 0 === error && (error = null); + path = this.pathPrefix + path; + this.toLoad++; + var img = new Image(); + img.onload = function(ev) { + var texture = _this.textureLoader(img); + _this.assets[path] = texture; + _this.toLoad--; + _this.loaded++; + success && success(path, img); + }; + img.onerror = function(ev) { + _this.errors[path] = "Couldn't load image " + path; + _this.toLoad--; + _this.loaded++; + error && error(path, "Couldn't load image " + path); + }; + img.src = data; + }; + AssetManager.prototype.loadTextureAtlas = function(path, success, error) { + var _this = this; + void 0 === success && (success = null); + void 0 === error && (error = null); + var parent = path.lastIndexOf("/") >= 0 ? path.substring(0, path.lastIndexOf("/")) : ""; + path = this.pathPrefix + path; + this.toLoad++; + AssetManager.downloadText(path, (function(atlasData) { + var pagesLoaded = { + count: 0 + }; + var atlasPages = new Array(); + try { + var atlas = new spine.TextureAtlas(atlasData, function(path) { + atlasPages.push(parent + "/" + path); + var image = document.createElement("img"); + image.width = 16; + image.height = 16; + return new spine.FakeTexture(image); + }); + } catch (e) { + var ex = e; + _this.errors[path] = "Couldn't load texture atlas " + path + ": " + ex.message; + error && error(path, "Couldn't load texture atlas " + path + ": " + ex.message); + _this.toLoad--; + _this.loaded++; + return; + } + var _loop_1 = function _loop_1(atlasPage) { + var pageLoadError = false; + _this.loadTexture(atlasPage, (function(imagePath, image) { + pagesLoaded.count++; + if (pagesLoaded.count == atlasPages.length) if (pageLoadError) { + _this.errors[path] = "Couldn't load texture atlas page " + imagePath + "} of atlas " + path; + error && error(path, "Couldn't load texture atlas page " + imagePath + " of atlas " + path); + _this.toLoad--; + _this.loaded++; + } else try { + var atlas = new spine.TextureAtlas(atlasData, function(path) { + return _this.get(parent + "/" + path); + }); + _this.assets[path] = atlas; + success && success(path, atlas); + _this.toLoad--; + _this.loaded++; + } catch (e) { + var ex = e; + _this.errors[path] = "Couldn't load texture atlas " + path + ": " + ex.message; + error && error(path, "Couldn't load texture atlas " + path + ": " + ex.message); + _this.toLoad--; + _this.loaded++; + } + }), (function(imagePath, errorMessage) { + pageLoadError = true; + pagesLoaded.count++; + if (pagesLoaded.count == atlasPages.length) { + _this.errors[path] = "Couldn't load texture atlas page " + imagePath + "} of atlas " + path; + error && error(path, "Couldn't load texture atlas page " + imagePath + " of atlas " + path); + _this.toLoad--; + _this.loaded++; + } + })); + }; + for (var _i = 0, atlasPages_1 = atlasPages; _i < atlasPages_1.length; _i++) { + var atlasPage = atlasPages_1[_i]; + _loop_1(atlasPage); + } + }), (function(state, responseText) { + _this.errors[path] = "Couldn't load texture atlas " + path + ": status " + status + ", " + responseText; + error && error(path, "Couldn't load texture atlas " + path + ": status " + status + ", " + responseText); + _this.toLoad--; + _this.loaded++; + })); + }; + AssetManager.prototype.get = function(path) { + path = this.pathPrefix + path; + return this.assets[path]; + }; + AssetManager.prototype.remove = function(path) { + path = this.pathPrefix + path; + var asset = this.assets[path]; + asset.dispose && asset.dispose(); + this.assets[path] = null; + }; + AssetManager.prototype.removeAll = function() { + for (var key in this.assets) { + var asset = this.assets[key]; + asset.dispose && asset.dispose(); + } + this.assets = {}; + }; + AssetManager.prototype.isLoadingComplete = function() { + return 0 == this.toLoad; + }; + AssetManager.prototype.getToLoad = function() { + return this.toLoad; + }; + AssetManager.prototype.getLoaded = function() { + return this.loaded; + }; + AssetManager.prototype.dispose = function() { + this.removeAll(); + }; + AssetManager.prototype.hasErrors = function() { + return Object.keys(this.errors).length > 0; + }; + AssetManager.prototype.getErrors = function() { + return this.errors; + }; + return AssetManager; + })(); + spine.AssetManager = AssetManager; + })(spine || (spine = {})); + var spine; + (function(spine) { + var AtlasAttachmentLoader = (function() { + function AtlasAttachmentLoader(atlas) { + this.atlas = atlas; + } + AtlasAttachmentLoader.prototype.newRegionAttachment = function(skin, name, path) { + var region = this.atlas.findRegion(path); + if (null == region) return null; + region.renderObject = region; + var attachment = new spine.RegionAttachment(name); + attachment.setRegion(region); + return attachment; + }; + AtlasAttachmentLoader.prototype.newMeshAttachment = function(skin, name, path) { + var region = this.atlas.findRegion(path); + if (null == region) return null; + region.renderObject = region; + var attachment = new spine.MeshAttachment(name); + attachment.region = region; + return attachment; + }; + AtlasAttachmentLoader.prototype.newBoundingBoxAttachment = function(skin, name) { + return new spine.BoundingBoxAttachment(name); + }; + AtlasAttachmentLoader.prototype.newPathAttachment = function(skin, name) { + return new spine.PathAttachment(name); + }; + AtlasAttachmentLoader.prototype.newPointAttachment = function(skin, name) { + return new spine.PointAttachment(name); + }; + AtlasAttachmentLoader.prototype.newClippingAttachment = function(skin, name) { + return new spine.ClippingAttachment(name); + }; + return AtlasAttachmentLoader; + })(); + spine.AtlasAttachmentLoader = AtlasAttachmentLoader; + })(spine || (spine = {})); + var spine; + (function(spine) { + var BlendMode; + (function(BlendMode) { + BlendMode[BlendMode["Normal"] = 0] = "Normal"; + BlendMode[BlendMode["Additive"] = 1] = "Additive"; + BlendMode[BlendMode["Multiply"] = 2] = "Multiply"; + BlendMode[BlendMode["Screen"] = 3] = "Screen"; + })(BlendMode = spine.BlendMode || (spine.BlendMode = {})); + })(spine || (spine = {})); + var spine; + (function(spine) { + var Bone = (function() { + function Bone(data, skeleton, parent) { + this.children = new Array(); + this.x = 0; + this.y = 0; + this.rotation = 0; + this.scaleX = 0; + this.scaleY = 0; + this.shearX = 0; + this.shearY = 0; + this.ax = 0; + this.ay = 0; + this.arotation = 0; + this.ascaleX = 0; + this.ascaleY = 0; + this.ashearX = 0; + this.ashearY = 0; + this.appliedValid = false; + this.a = 0; + this.b = 0; + this.c = 0; + this.d = 0; + this.worldY = 0; + this.worldX = 0; + this.sorted = false; + this.active = false; + if (null == data) throw new Error("data cannot be null."); + if (null == skeleton) throw new Error("skeleton cannot be null."); + this.data = data; + this.skeleton = skeleton; + this.parent = parent; + this.setToSetupPose(); + } + Bone.prototype.isActive = function() { + return this.active; + }; + Bone.prototype.update = function() { + this.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY); + }; + Bone.prototype.updateWorldTransform = function() { + this.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY); + }; + Bone.prototype.updateWorldTransformWith = function(x, y, rotation, scaleX, scaleY, shearX, shearY) { + this.ax = x; + this.ay = y; + this.arotation = rotation; + this.ascaleX = scaleX; + this.ascaleY = scaleY; + this.ashearX = shearX; + this.ashearY = shearY; + this.appliedValid = true; + var parent = this.parent; + if (null == parent) { + var skeleton = this.skeleton; + var rotationY = rotation + 90 + shearY; + var sx = skeleton.scaleX; + var sy = skeleton.scaleY; + this.a = spine.MathUtils.cosDeg(rotation + shearX) * scaleX * sx; + this.b = spine.MathUtils.cosDeg(rotationY) * scaleY * sx; + this.c = spine.MathUtils.sinDeg(rotation + shearX) * scaleX * sy; + this.d = spine.MathUtils.sinDeg(rotationY) * scaleY * sy; + this.worldX = x * sx + skeleton.x; + this.worldY = y * sy + skeleton.y; + return; + } + var pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d; + this.worldX = pa * x + pb * y + parent.worldX; + this.worldY = pc * x + pd * y + parent.worldY; + switch (this.data.transformMode) { + case spine.TransformMode.Normal: + var rotationY = rotation + 90 + shearY; + var la = spine.MathUtils.cosDeg(rotation + shearX) * scaleX; + var lb = spine.MathUtils.cosDeg(rotationY) * scaleY; + var lc = spine.MathUtils.sinDeg(rotation + shearX) * scaleX; + var ld = spine.MathUtils.sinDeg(rotationY) * scaleY; + this.a = pa * la + pb * lc; + this.b = pa * lb + pb * ld; + this.c = pc * la + pd * lc; + this.d = pc * lb + pd * ld; + return; + + case spine.TransformMode.OnlyTranslation: + var rotationY = rotation + 90 + shearY; + this.a = spine.MathUtils.cosDeg(rotation + shearX) * scaleX; + this.b = spine.MathUtils.cosDeg(rotationY) * scaleY; + this.c = spine.MathUtils.sinDeg(rotation + shearX) * scaleX; + this.d = spine.MathUtils.sinDeg(rotationY) * scaleY; + break; + + case spine.TransformMode.NoRotationOrReflection: + var s = pa * pa + pc * pc; + var prx = 0; + if (s > 1e-4) { + s = Math.abs(pa * pd - pb * pc) / s; + pb = pc * s; + pd = pa * s; + prx = Math.atan2(pc, pa) * spine.MathUtils.radDeg; + } else { + pa = 0; + pc = 0; + prx = 90 - Math.atan2(pd, pb) * spine.MathUtils.radDeg; + } + var rx = rotation + shearX - prx; + var ry = rotation + shearY - prx + 90; + var la = spine.MathUtils.cosDeg(rx) * scaleX; + var lb = spine.MathUtils.cosDeg(ry) * scaleY; + var lc = spine.MathUtils.sinDeg(rx) * scaleX; + var ld = spine.MathUtils.sinDeg(ry) * scaleY; + this.a = pa * la - pb * lc; + this.b = pa * lb - pb * ld; + this.c = pc * la + pd * lc; + this.d = pc * lb + pd * ld; + break; + + case spine.TransformMode.NoScale: + case spine.TransformMode.NoScaleOrReflection: + var cos = spine.MathUtils.cosDeg(rotation); + var sin = spine.MathUtils.sinDeg(rotation); + var za = (pa * cos + pb * sin) / this.skeleton.scaleX; + var zc = (pc * cos + pd * sin) / this.skeleton.scaleY; + var s = Math.sqrt(za * za + zc * zc); + s > 1e-5 && (s = 1 / s); + za *= s; + zc *= s; + s = Math.sqrt(za * za + zc * zc); + this.data.transformMode == spine.TransformMode.NoScale && pa * pd - pb * pc < 0 != (this.skeleton.scaleX < 0 != this.skeleton.scaleY < 0) && (s = -s); + var r = Math.PI / 2 + Math.atan2(zc, za); + var zb = Math.cos(r) * s; + var zd = Math.sin(r) * s; + var la = spine.MathUtils.cosDeg(shearX) * scaleX; + var lb = spine.MathUtils.cosDeg(90 + shearY) * scaleY; + var lc = spine.MathUtils.sinDeg(shearX) * scaleX; + var ld = spine.MathUtils.sinDeg(90 + shearY) * scaleY; + this.a = za * la + zb * lc; + this.b = za * lb + zb * ld; + this.c = zc * la + zd * lc; + this.d = zc * lb + zd * ld; + } + this.a *= this.skeleton.scaleX; + this.b *= this.skeleton.scaleX; + this.c *= this.skeleton.scaleY; + this.d *= this.skeleton.scaleY; + }; + Bone.prototype.setToSetupPose = function() { + var data = this.data; + this.x = data.x; + this.y = data.y; + this.rotation = data.rotation; + this.scaleX = data.scaleX; + this.scaleY = data.scaleY; + this.shearX = data.shearX; + this.shearY = data.shearY; + }; + Bone.prototype.getWorldRotationX = function() { + return Math.atan2(this.c, this.a) * spine.MathUtils.radDeg; + }; + Bone.prototype.getWorldRotationY = function() { + return Math.atan2(this.d, this.b) * spine.MathUtils.radDeg; + }; + Bone.prototype.getWorldScaleX = function() { + return Math.sqrt(this.a * this.a + this.c * this.c); + }; + Bone.prototype.getWorldScaleY = function() { + return Math.sqrt(this.b * this.b + this.d * this.d); + }; + Bone.prototype.updateAppliedTransform = function() { + this.appliedValid = true; + var parent = this.parent; + if (null == parent) { + this.ax = this.worldX; + this.ay = this.worldY; + this.arotation = Math.atan2(this.c, this.a) * spine.MathUtils.radDeg; + this.ascaleX = Math.sqrt(this.a * this.a + this.c * this.c); + this.ascaleY = Math.sqrt(this.b * this.b + this.d * this.d); + this.ashearX = 0; + this.ashearY = Math.atan2(this.a * this.b + this.c * this.d, this.a * this.d - this.b * this.c) * spine.MathUtils.radDeg; + return; + } + var pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d; + var pid = 1 / (pa * pd - pb * pc); + var dx = this.worldX - parent.worldX, dy = this.worldY - parent.worldY; + this.ax = dx * pd * pid - dy * pb * pid; + this.ay = dy * pa * pid - dx * pc * pid; + var ia = pid * pd; + var id = pid * pa; + var ib = pid * pb; + var ic = pid * pc; + var ra = ia * this.a - ib * this.c; + var rb = ia * this.b - ib * this.d; + var rc = id * this.c - ic * this.a; + var rd = id * this.d - ic * this.b; + this.ashearX = 0; + this.ascaleX = Math.sqrt(ra * ra + rc * rc); + if (this.ascaleX > 1e-4) { + var det = ra * rd - rb * rc; + this.ascaleY = det / this.ascaleX; + this.ashearY = Math.atan2(ra * rb + rc * rd, det) * spine.MathUtils.radDeg; + this.arotation = Math.atan2(rc, ra) * spine.MathUtils.radDeg; + } else { + this.ascaleX = 0; + this.ascaleY = Math.sqrt(rb * rb + rd * rd); + this.ashearY = 0; + this.arotation = 90 - Math.atan2(rd, rb) * spine.MathUtils.radDeg; + } + }; + Bone.prototype.worldToLocal = function(world) { + var a = this.a, b = this.b, c = this.c, d = this.d; + var invDet = 1 / (a * d - b * c); + var x = world.x - this.worldX, y = world.y - this.worldY; + world.x = x * d * invDet - y * b * invDet; + world.y = y * a * invDet - x * c * invDet; + return world; + }; + Bone.prototype.localToWorld = function(local) { + var x = local.x, y = local.y; + local.x = x * this.a + y * this.b + this.worldX; + local.y = x * this.c + y * this.d + this.worldY; + return local; + }; + Bone.prototype.worldToLocalRotation = function(worldRotation) { + var sin = spine.MathUtils.sinDeg(worldRotation), cos = spine.MathUtils.cosDeg(worldRotation); + return Math.atan2(this.a * sin - this.c * cos, this.d * cos - this.b * sin) * spine.MathUtils.radDeg + this.rotation - this.shearX; + }; + Bone.prototype.localToWorldRotation = function(localRotation) { + localRotation -= this.rotation - this.shearX; + var sin = spine.MathUtils.sinDeg(localRotation), cos = spine.MathUtils.cosDeg(localRotation); + return Math.atan2(cos * this.c + sin * this.d, cos * this.a + sin * this.b) * spine.MathUtils.radDeg; + }; + Bone.prototype.rotateWorld = function(degrees) { + var a = this.a, b = this.b, c = this.c, d = this.d; + var cos = spine.MathUtils.cosDeg(degrees), sin = spine.MathUtils.sinDeg(degrees); + this.a = cos * a - sin * c; + this.b = cos * b - sin * d; + this.c = sin * a + cos * c; + this.d = sin * b + cos * d; + this.appliedValid = false; + }; + return Bone; + })(); + spine.Bone = Bone; + })(spine || (spine = {})); + var spine; + (function(spine) { + var BoneData = (function() { + function BoneData(index, name, parent) { + this.x = 0; + this.y = 0; + this.rotation = 0; + this.scaleX = 1; + this.scaleY = 1; + this.shearX = 0; + this.shearY = 0; + this.transformMode = TransformMode.Normal; + this.skinRequired = false; + this.color = new spine.Color(); + if (index < 0) throw new Error("index must be >= 0."); + if (null == name) throw new Error("name cannot be null."); + this.index = index; + this.name = name; + this.parent = parent; + } + return BoneData; + })(); + spine.BoneData = BoneData; + var TransformMode; + (function(TransformMode) { + TransformMode[TransformMode["Normal"] = 0] = "Normal"; + TransformMode[TransformMode["OnlyTranslation"] = 1] = "OnlyTranslation"; + TransformMode[TransformMode["NoRotationOrReflection"] = 2] = "NoRotationOrReflection"; + TransformMode[TransformMode["NoScale"] = 3] = "NoScale"; + TransformMode[TransformMode["NoScaleOrReflection"] = 4] = "NoScaleOrReflection"; + })(TransformMode = spine.TransformMode || (spine.TransformMode = {})); + })(spine || (spine = {})); + var spine; + (function(spine) { + var ConstraintData = (function() { + function ConstraintData(name, order, skinRequired) { + this.name = name; + this.order = order; + this.skinRequired = skinRequired; + } + return ConstraintData; + })(); + spine.ConstraintData = ConstraintData; + })(spine || (spine = {})); + var spine; + (function(spine) { + var Event = (function() { + function Event(time, data) { + if (null == data) throw new Error("data cannot be null."); + this.time = time; + this.data = data; + } + return Event; + })(); + spine.Event = Event; + })(spine || (spine = {})); + var spine; + (function(spine) { + var EventData = (function() { + function EventData(name) { + this.name = name; + } + return EventData; + })(); + spine.EventData = EventData; + })(spine || (spine = {})); + var spine; + (function(spine) { + var IkConstraint = (function() { + function IkConstraint(data, skeleton) { + this.bendDirection = 0; + this.compress = false; + this.stretch = false; + this.mix = 1; + this.softness = 0; + this.active = false; + if (null == data) throw new Error("data cannot be null."); + if (null == skeleton) throw new Error("skeleton cannot be null."); + this.data = data; + this.mix = data.mix; + this.softness = data.softness; + this.bendDirection = data.bendDirection; + this.compress = data.compress; + this.stretch = data.stretch; + this.bones = new Array(); + for (var i = 0; i < data.bones.length; i++) this.bones.push(skeleton.findBone(data.bones[i].name)); + this.target = skeleton.findBone(data.target.name); + } + IkConstraint.prototype.isActive = function() { + return this.active; + }; + IkConstraint.prototype.apply = function() { + this.update(); + }; + IkConstraint.prototype.update = function() { + var target = this.target; + var bones = this.bones; + switch (bones.length) { + case 1: + this.apply1(bones[0], target.worldX, target.worldY, this.compress, this.stretch, this.data.uniform, this.mix); + break; + + case 2: + this.apply2(bones[0], bones[1], target.worldX, target.worldY, this.bendDirection, this.stretch, this.softness, this.mix); + } + }; + IkConstraint.prototype.apply1 = function(bone, targetX, targetY, compress, stretch, uniform, alpha) { + bone.appliedValid || bone.updateAppliedTransform(); + var p = bone.parent; + var id = 1 / (p.a * p.d - p.b * p.c); + var x = targetX - p.worldX, y = targetY - p.worldY; + var tx = (x * p.d - y * p.b) * id - bone.ax, ty = (y * p.a - x * p.c) * id - bone.ay; + var rotationIK = Math.atan2(ty, tx) * spine.MathUtils.radDeg - bone.ashearX - bone.arotation; + bone.ascaleX < 0 && (rotationIK += 180); + rotationIK > 180 ? rotationIK -= 360 : rotationIK < -180 && (rotationIK += 360); + var sx = bone.ascaleX, sy = bone.ascaleY; + if (compress || stretch) { + var b = bone.data.length * sx, dd = Math.sqrt(tx * tx + ty * ty); + if (compress && dd < b || stretch && dd > b && b > 1e-4) { + var s = (dd / b - 1) * alpha + 1; + sx *= s; + uniform && (sy *= s); + } + } + bone.updateWorldTransformWith(bone.ax, bone.ay, bone.arotation + rotationIK * alpha, sx, sy, bone.ashearX, bone.ashearY); + }; + IkConstraint.prototype.apply2 = function(parent, child, targetX, targetY, bendDir, stretch, softness, alpha) { + if (0 == alpha) { + child.updateWorldTransform(); + return; + } + parent.appliedValid || parent.updateAppliedTransform(); + child.appliedValid || child.updateAppliedTransform(); + var px = parent.ax, py = parent.ay, psx = parent.ascaleX, sx = psx, psy = parent.ascaleY, csx = child.ascaleX; + var os1 = 0, os2 = 0, s2 = 0; + if (psx < 0) { + psx = -psx; + os1 = 180; + s2 = -1; + } else { + os1 = 0; + s2 = 1; + } + if (psy < 0) { + psy = -psy; + s2 = -s2; + } + if (csx < 0) { + csx = -csx; + os2 = 180; + } else os2 = 0; + var cx = child.ax, cy = 0, cwx = 0, cwy = 0, a = parent.a, b = parent.b, c = parent.c, d = parent.d; + var u = Math.abs(psx - psy) <= 1e-4; + if (u) { + cy = child.ay; + cwx = a * cx + b * cy + parent.worldX; + cwy = c * cx + d * cy + parent.worldY; + } else { + cy = 0; + cwx = a * cx + parent.worldX; + cwy = c * cx + parent.worldY; + } + var pp = parent.parent; + a = pp.a; + b = pp.b; + c = pp.c; + d = pp.d; + var id = 1 / (a * d - b * c), x = cwx - pp.worldX, y = cwy - pp.worldY; + var dx = (x * d - y * b) * id - px, dy = (y * a - x * c) * id - py; + var l1 = Math.sqrt(dx * dx + dy * dy), l2 = child.data.length * csx, a1, a2; + if (l1 < 1e-4) { + this.apply1(parent, targetX, targetY, false, stretch, false, alpha); + child.updateWorldTransformWith(cx, cy, 0, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY); + return; + } + x = targetX - pp.worldX; + y = targetY - pp.worldY; + var tx = (x * d - y * b) * id - px, ty = (y * a - x * c) * id - py; + var dd = tx * tx + ty * ty; + if (0 != softness) { + softness *= psx * (csx + 1) / 2; + var td = Math.sqrt(dd), sd = td - l1 - l2 * psx + softness; + if (sd > 0) { + var p = Math.min(1, sd / (2 * softness)) - 1; + p = (sd - softness * (1 - p * p)) / td; + tx -= p * tx; + ty -= p * ty; + dd = tx * tx + ty * ty; + } + } + outer: if (u) { + l2 *= psx; + var cos = (dd - l1 * l1 - l2 * l2) / (2 * l1 * l2); + if (cos < -1) cos = -1; else if (cos > 1) { + cos = 1; + stretch && (sx *= (Math.sqrt(dd) / (l1 + l2) - 1) * alpha + 1); + } + a2 = Math.acos(cos) * bendDir; + a = l1 + l2 * cos; + b = l2 * Math.sin(a2); + a1 = Math.atan2(ty * a - tx * b, tx * a + ty * b); + } else { + a = psx * l2; + b = psy * l2; + var aa = a * a, bb = b * b, ta = Math.atan2(ty, tx); + c = bb * l1 * l1 + aa * dd - aa * bb; + var c1 = -2 * bb * l1, c2 = bb - aa; + d = c1 * c1 - 4 * c2 * c; + if (d >= 0) { + var q = Math.sqrt(d); + c1 < 0 && (q = -q); + q = -(c1 + q) / 2; + var r0 = q / c2, r1 = c / q; + var r = Math.abs(r0) < Math.abs(r1) ? r0 : r1; + if (r * r <= dd) { + y = Math.sqrt(dd - r * r) * bendDir; + a1 = ta - Math.atan2(y, r); + a2 = Math.atan2(y / psy, (r - l1) / psx); + break outer; + } + } + var minAngle = spine.MathUtils.PI, minX = l1 - a, minDist = minX * minX, minY = 0; + var maxAngle = 0, maxX = l1 + a, maxDist = maxX * maxX, maxY = 0; + c = -a * l1 / (aa - bb); + if (c >= -1 && c <= 1) { + c = Math.acos(c); + x = a * Math.cos(c) + l1; + y = b * Math.sin(c); + d = x * x + y * y; + if (d < minDist) { + minAngle = c; + minDist = d; + minX = x; + minY = y; + } + if (d > maxDist) { + maxAngle = c; + maxDist = d; + maxX = x; + maxY = y; + } + } + if (dd <= (minDist + maxDist) / 2) { + a1 = ta - Math.atan2(minY * bendDir, minX); + a2 = minAngle * bendDir; + } else { + a1 = ta - Math.atan2(maxY * bendDir, maxX); + a2 = maxAngle * bendDir; + } + } + var os = Math.atan2(cy, cx) * s2; + var rotation = parent.arotation; + a1 = (a1 - os) * spine.MathUtils.radDeg + os1 - rotation; + a1 > 180 ? a1 -= 360 : a1 < -180 && (a1 += 360); + parent.updateWorldTransformWith(px, py, rotation + a1 * alpha, sx, parent.ascaleY, 0, 0); + rotation = child.arotation; + a2 = ((a2 + os) * spine.MathUtils.radDeg - child.ashearX) * s2 + os2 - rotation; + a2 > 180 ? a2 -= 360 : a2 < -180 && (a2 += 360); + child.updateWorldTransformWith(cx, cy, rotation + a2 * alpha, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY); + }; + return IkConstraint; + })(); + spine.IkConstraint = IkConstraint; + })(spine || (spine = {})); + var spine; + (function(spine) { + var IkConstraintData = (function(_super) { + __extends(IkConstraintData, _super); + function IkConstraintData(name) { + var _this = _super.call(this, name, 0, false) || this; + _this.bones = new Array(); + _this.bendDirection = 1; + _this.compress = false; + _this.stretch = false; + _this.uniform = false; + _this.mix = 1; + _this.softness = 0; + return _this; + } + return IkConstraintData; + })(spine.ConstraintData); + spine.IkConstraintData = IkConstraintData; + })(spine || (spine = {})); + var spine; + (function(spine) { + var PathConstraint = (function() { + function PathConstraint(data, skeleton) { + this.position = 0; + this.spacing = 0; + this.rotateMix = 0; + this.translateMix = 0; + this.spaces = new Array(); + this.positions = new Array(); + this.world = new Array(); + this.curves = new Array(); + this.lengths = new Array(); + this.segments = new Array(); + this.active = false; + if (null == data) throw new Error("data cannot be null."); + if (null == skeleton) throw new Error("skeleton cannot be null."); + this.data = data; + this.bones = new Array(); + for (var i = 0, n = data.bones.length; i < n; i++) this.bones.push(skeleton.findBone(data.bones[i].name)); + this.target = skeleton.findSlot(data.target.name); + this.position = data.position; + this.spacing = data.spacing; + this.rotateMix = data.rotateMix; + this.translateMix = data.translateMix; + } + PathConstraint.prototype.isActive = function() { + return this.active; + }; + PathConstraint.prototype.apply = function() { + this.update(); + }; + PathConstraint.prototype.update = function() { + var attachment = this.target.getAttachment(); + if (!(attachment instanceof spine.PathAttachment)) return; + var rotateMix = this.rotateMix, translateMix = this.translateMix; + var translate = translateMix > 0, rotate = rotateMix > 0; + if (!translate && !rotate) return; + var data = this.data; + var percentSpacing = data.spacingMode == spine.SpacingMode.Percent; + var rotateMode = data.rotateMode; + var tangents = rotateMode == spine.RotateMode.Tangent, scale = rotateMode == spine.RotateMode.ChainScale; + var boneCount = this.bones.length, spacesCount = tangents ? boneCount : boneCount + 1; + var bones = this.bones; + var spaces = spine.Utils.setArraySize(this.spaces, spacesCount), lengths = null; + var spacing = this.spacing; + if (scale || !percentSpacing) { + scale && (lengths = spine.Utils.setArraySize(this.lengths, boneCount)); + var lengthSpacing = data.spacingMode == spine.SpacingMode.Length; + for (var i = 0, n = spacesCount - 1; i < n; ) { + var bone = bones[i]; + var setupLength = bone.data.length; + if (setupLength < PathConstraint.epsilon) { + scale && (lengths[i] = 0); + spaces[++i] = 0; + } else if (percentSpacing) { + if (scale) { + var x = setupLength * bone.a, y = setupLength * bone.c; + var length_1 = Math.sqrt(x * x + y * y); + lengths[i] = length_1; + } + spaces[++i] = spacing; + } else { + var x = setupLength * bone.a, y = setupLength * bone.c; + var length_2 = Math.sqrt(x * x + y * y); + scale && (lengths[i] = length_2); + spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length_2 / setupLength; + } + } + } else for (var i = 1; i < spacesCount; i++) spaces[i] = spacing; + var positions = this.computeWorldPositions(attachment, spacesCount, tangents, data.positionMode == spine.PositionMode.Percent, percentSpacing); + var boneX = positions[0], boneY = positions[1], offsetRotation = data.offsetRotation; + var tip = false; + if (0 == offsetRotation) tip = rotateMode == spine.RotateMode.Chain; else { + tip = false; + var p = this.target.bone; + offsetRotation *= p.a * p.d - p.b * p.c > 0 ? spine.MathUtils.degRad : -spine.MathUtils.degRad; + } + for (var i = 0, p = 3; i < boneCount; i++, p += 3) { + var bone = bones[i]; + bone.worldX += (boneX - bone.worldX) * translateMix; + bone.worldY += (boneY - bone.worldY) * translateMix; + var x = positions[p], y = positions[p + 1], dx = x - boneX, dy = y - boneY; + if (scale) { + var length_3 = lengths[i]; + if (0 != length_3) { + var s = (Math.sqrt(dx * dx + dy * dy) / length_3 - 1) * rotateMix + 1; + bone.a *= s; + bone.c *= s; + } + } + boneX = x; + boneY = y; + if (rotate) { + var a = bone.a, b = bone.b, c = bone.c, d = bone.d, r = 0, cos = 0, sin = 0; + r = tangents ? positions[p - 1] : 0 == spaces[i + 1] ? positions[p + 2] : Math.atan2(dy, dx); + r -= Math.atan2(c, a); + if (tip) { + cos = Math.cos(r); + sin = Math.sin(r); + var length_4 = bone.data.length; + boneX += (length_4 * (cos * a - sin * c) - dx) * rotateMix; + boneY += (length_4 * (sin * a + cos * c) - dy) * rotateMix; + } else r += offsetRotation; + r > spine.MathUtils.PI ? r -= spine.MathUtils.PI2 : r < -spine.MathUtils.PI && (r += spine.MathUtils.PI2); + r *= rotateMix; + cos = Math.cos(r); + sin = Math.sin(r); + bone.a = cos * a - sin * c; + bone.b = cos * b - sin * d; + bone.c = sin * a + cos * c; + bone.d = sin * b + cos * d; + } + bone.appliedValid = false; + } + }; + PathConstraint.prototype.computeWorldPositions = function(path, spacesCount, tangents, percentPosition, percentSpacing) { + var target = this.target; + var position = this.position; + var spaces = this.spaces, out = spine.Utils.setArraySize(this.positions, 3 * spacesCount + 2), world = null; + var closed = path.closed; + var verticesLength = path.worldVerticesLength, curveCount = verticesLength / 6, prevCurve = PathConstraint.NONE; + if (!path.constantSpeed) { + var lengths = path.lengths; + curveCount -= closed ? 1 : 2; + var pathLength_1 = lengths[curveCount]; + percentPosition && (position *= pathLength_1); + if (percentSpacing) for (var i = 1; i < spacesCount; i++) spaces[i] *= pathLength_1; + world = spine.Utils.setArraySize(this.world, 8); + for (var i = 0, o = 0, curve = 0; i < spacesCount; i++, o += 3) { + var space = spaces[i]; + position += space; + var p = position; + if (closed) { + p %= pathLength_1; + p < 0 && (p += pathLength_1); + curve = 0; + } else { + if (p < 0) { + if (prevCurve != PathConstraint.BEFORE) { + prevCurve = PathConstraint.BEFORE; + path.computeWorldVertices(target, 2, 4, world, 0, 2); + } + this.addBeforePosition(p, world, 0, out, o); + continue; + } + if (p > pathLength_1) { + if (prevCurve != PathConstraint.AFTER) { + prevCurve = PathConstraint.AFTER; + path.computeWorldVertices(target, verticesLength - 6, 4, world, 0, 2); + } + this.addAfterPosition(p - pathLength_1, world, 0, out, o); + continue; + } + } + for (;;curve++) { + var length_5 = lengths[curve]; + if (p > length_5) continue; + if (0 == curve) p /= length_5; else { + var prev = lengths[curve - 1]; + p = (p - prev) / (length_5 - prev); + } + break; + } + if (curve != prevCurve) { + prevCurve = curve; + if (closed && curve == curveCount) { + path.computeWorldVertices(target, verticesLength - 4, 4, world, 0, 2); + path.computeWorldVertices(target, 0, 4, world, 4, 2); + } else path.computeWorldVertices(target, 6 * curve + 2, 8, world, 0, 2); + } + this.addCurvePosition(p, world[0], world[1], world[2], world[3], world[4], world[5], world[6], world[7], out, o, tangents || i > 0 && 0 == space); + } + return out; + } + if (closed) { + verticesLength += 2; + world = spine.Utils.setArraySize(this.world, verticesLength); + path.computeWorldVertices(target, 2, verticesLength - 4, world, 0, 2); + path.computeWorldVertices(target, 0, 2, world, verticesLength - 4, 2); + world[verticesLength - 2] = world[0]; + world[verticesLength - 1] = world[1]; + } else { + curveCount--; + verticesLength -= 4; + world = spine.Utils.setArraySize(this.world, verticesLength); + path.computeWorldVertices(target, 2, verticesLength, world, 0, 2); + } + var curves = spine.Utils.setArraySize(this.curves, curveCount); + var pathLength = 0; + var x1 = world[0], y1 = world[1], cx1 = 0, cy1 = 0, cx2 = 0, cy2 = 0, x2 = 0, y2 = 0; + var tmpx = 0, tmpy = 0, dddfx = 0, dddfy = 0, ddfx = 0, ddfy = 0, dfx = 0, dfy = 0; + for (var i = 0, w = 2; i < curveCount; i++, w += 6) { + cx1 = world[w]; + cy1 = world[w + 1]; + cx2 = world[w + 2]; + cy2 = world[w + 3]; + x2 = world[w + 4]; + y2 = world[w + 5]; + tmpx = .1875 * (x1 - 2 * cx1 + cx2); + tmpy = .1875 * (y1 - 2 * cy1 + cy2); + dddfx = .09375 * (3 * (cx1 - cx2) - x1 + x2); + dddfy = .09375 * (3 * (cy1 - cy2) - y1 + y2); + ddfx = 2 * tmpx + dddfx; + ddfy = 2 * tmpy + dddfy; + dfx = .75 * (cx1 - x1) + tmpx + .16666667 * dddfx; + dfy = .75 * (cy1 - y1) + tmpy + .16666667 * dddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx; + dfy += ddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx + dddfx; + dfy += ddfy + dddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + curves[i] = pathLength; + x1 = x2; + y1 = y2; + } + position *= percentPosition ? pathLength : pathLength / path.lengths[curveCount - 1]; + if (percentSpacing) for (var i = 1; i < spacesCount; i++) spaces[i] *= pathLength; + var segments = this.segments; + var curveLength = 0; + for (var i = 0, o = 0, curve = 0, segment = 0; i < spacesCount; i++, o += 3) { + var space = spaces[i]; + position += space; + var p = position; + if (closed) { + p %= pathLength; + p < 0 && (p += pathLength); + curve = 0; + } else { + if (p < 0) { + this.addBeforePosition(p, world, 0, out, o); + continue; + } + if (p > pathLength) { + this.addAfterPosition(p - pathLength, world, verticesLength - 4, out, o); + continue; + } + } + for (;;curve++) { + var length_6 = curves[curve]; + if (p > length_6) continue; + if (0 == curve) p /= length_6; else { + var prev = curves[curve - 1]; + p = (p - prev) / (length_6 - prev); + } + break; + } + if (curve != prevCurve) { + prevCurve = curve; + var ii = 6 * curve; + x1 = world[ii]; + y1 = world[ii + 1]; + cx1 = world[ii + 2]; + cy1 = world[ii + 3]; + cx2 = world[ii + 4]; + cy2 = world[ii + 5]; + x2 = world[ii + 6]; + y2 = world[ii + 7]; + tmpx = .03 * (x1 - 2 * cx1 + cx2); + tmpy = .03 * (y1 - 2 * cy1 + cy2); + dddfx = .006 * (3 * (cx1 - cx2) - x1 + x2); + dddfy = .006 * (3 * (cy1 - cy2) - y1 + y2); + ddfx = 2 * tmpx + dddfx; + ddfy = 2 * tmpy + dddfy; + dfx = .3 * (cx1 - x1) + tmpx + .16666667 * dddfx; + dfy = .3 * (cy1 - y1) + tmpy + .16666667 * dddfy; + curveLength = Math.sqrt(dfx * dfx + dfy * dfy); + segments[0] = curveLength; + for (ii = 1; ii < 8; ii++) { + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[ii] = curveLength; + } + dfx += ddfx; + dfy += ddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[8] = curveLength; + dfx += ddfx + dddfx; + dfy += ddfy + dddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[9] = curveLength; + segment = 0; + } + p *= curveLength; + for (;;segment++) { + var length_7 = segments[segment]; + if (p > length_7) continue; + if (0 == segment) p /= length_7; else { + var prev = segments[segment - 1]; + p = segment + (p - prev) / (length_7 - prev); + } + break; + } + this.addCurvePosition(.1 * p, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents || i > 0 && 0 == space); + } + return out; + }; + PathConstraint.prototype.addBeforePosition = function(p, temp, i, out, o) { + var x1 = temp[i], y1 = temp[i + 1], dx = temp[i + 2] - x1, dy = temp[i + 3] - y1, r = Math.atan2(dy, dx); + out[o] = x1 + p * Math.cos(r); + out[o + 1] = y1 + p * Math.sin(r); + out[o + 2] = r; + }; + PathConstraint.prototype.addAfterPosition = function(p, temp, i, out, o) { + var x1 = temp[i + 2], y1 = temp[i + 3], dx = x1 - temp[i], dy = y1 - temp[i + 1], r = Math.atan2(dy, dx); + out[o] = x1 + p * Math.cos(r); + out[o + 1] = y1 + p * Math.sin(r); + out[o + 2] = r; + }; + PathConstraint.prototype.addCurvePosition = function(p, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents) { + if (0 == p || isNaN(p)) { + out[o] = x1; + out[o + 1] = y1; + out[o + 2] = Math.atan2(cy1 - y1, cx1 - x1); + return; + } + var tt = p * p, ttt = tt * p, u = 1 - p, uu = u * u, uuu = uu * u; + var ut = u * p, ut3 = 3 * ut, uut3 = u * ut3, utt3 = ut3 * p; + var x = x1 * uuu + cx1 * uut3 + cx2 * utt3 + x2 * ttt, y = y1 * uuu + cy1 * uut3 + cy2 * utt3 + y2 * ttt; + out[o] = x; + out[o + 1] = y; + tangents && (out[o + 2] = p < .001 ? Math.atan2(cy1 - y1, cx1 - x1) : Math.atan2(y - (y1 * uu + cy1 * ut * 2 + cy2 * tt), x - (x1 * uu + cx1 * ut * 2 + cx2 * tt))); + }; + PathConstraint.NONE = -1; + PathConstraint.BEFORE = -2; + PathConstraint.AFTER = -3; + PathConstraint.epsilon = 1e-5; + return PathConstraint; + })(); + spine.PathConstraint = PathConstraint; + })(spine || (spine = {})); + var spine; + (function(spine) { + var PathConstraintData = (function(_super) { + __extends(PathConstraintData, _super); + function PathConstraintData(name) { + var _this = _super.call(this, name, 0, false) || this; + _this.bones = new Array(); + return _this; + } + return PathConstraintData; + })(spine.ConstraintData); + spine.PathConstraintData = PathConstraintData; + var PositionMode; + (function(PositionMode) { + PositionMode[PositionMode["Fixed"] = 0] = "Fixed"; + PositionMode[PositionMode["Percent"] = 1] = "Percent"; + })(PositionMode = spine.PositionMode || (spine.PositionMode = {})); + var SpacingMode; + (function(SpacingMode) { + SpacingMode[SpacingMode["Length"] = 0] = "Length"; + SpacingMode[SpacingMode["Fixed"] = 1] = "Fixed"; + SpacingMode[SpacingMode["Percent"] = 2] = "Percent"; + })(SpacingMode = spine.SpacingMode || (spine.SpacingMode = {})); + var RotateMode; + (function(RotateMode) { + RotateMode[RotateMode["Tangent"] = 0] = "Tangent"; + RotateMode[RotateMode["Chain"] = 1] = "Chain"; + RotateMode[RotateMode["ChainScale"] = 2] = "ChainScale"; + })(RotateMode = spine.RotateMode || (spine.RotateMode = {})); + })(spine || (spine = {})); + var spine; + (function(spine) { + var Assets = (function() { + function Assets(clientId) { + this.toLoad = new Array(); + this.assets = {}; + this.clientId = clientId; + } + Assets.prototype.loaded = function() { + var i = 0; + for (var v in this.assets) i++; + return i; + }; + return Assets; + })(); + var SharedAssetManager = (function() { + function SharedAssetManager(pathPrefix) { + void 0 === pathPrefix && (pathPrefix = ""); + this.clientAssets = {}; + this.queuedAssets = {}; + this.rawAssets = {}; + this.errors = {}; + this.pathPrefix = pathPrefix; + } + SharedAssetManager.prototype.queueAsset = function(clientId, textureLoader, path) { + var clientAssets = this.clientAssets[clientId]; + if (null === clientAssets || void 0 === clientAssets) { + clientAssets = new Assets(clientId); + this.clientAssets[clientId] = clientAssets; + } + null !== textureLoader && (clientAssets.textureLoader = textureLoader); + clientAssets.toLoad.push(path); + if (this.queuedAssets[path] === path) return false; + this.queuedAssets[path] = path; + return true; + }; + SharedAssetManager.prototype.loadText = function(clientId, path) { + var _this = this; + path = this.pathPrefix + path; + if (!this.queueAsset(clientId, null, path)) return; + var request = new XMLHttpRequest(); + request.onreadystatechange = function() { + request.readyState == XMLHttpRequest.DONE && (request.status >= 200 && request.status < 300 ? _this.rawAssets[path] = request.responseText : _this.errors[path] = "Couldn't load text " + path + ": status " + request.status + ", " + request.responseText); + }; + request.open("GET", path, true); + request.send(); + }; + SharedAssetManager.prototype.loadJson = function(clientId, path) { + var _this = this; + path = this.pathPrefix + path; + if (!this.queueAsset(clientId, null, path)) return; + var request = new XMLHttpRequest(); + request.onreadystatechange = function() { + request.readyState == XMLHttpRequest.DONE && (request.status >= 200 && request.status < 300 ? _this.rawAssets[path] = JSON.parse(request.responseText) : _this.errors[path] = "Couldn't load text " + path + ": status " + request.status + ", " + request.responseText); + }; + request.open("GET", path, true); + request.send(); + }; + SharedAssetManager.prototype.loadTexture = function(clientId, textureLoader, path) { + var _this = this; + path = this.pathPrefix + path; + if (!this.queueAsset(clientId, textureLoader, path)) return; + var img = new Image(); + img.src = path; + img.crossOrigin = "anonymous"; + img.onload = function(ev) { + _this.rawAssets[path] = img; + }; + img.onerror = function(ev) { + _this.errors[path] = "Couldn't load image " + path; + }; + }; + SharedAssetManager.prototype.get = function(clientId, path) { + path = this.pathPrefix + path; + var clientAssets = this.clientAssets[clientId]; + if (null === clientAssets || void 0 === clientAssets) return true; + return clientAssets.assets[path]; + }; + SharedAssetManager.prototype.updateClientAssets = function(clientAssets) { + for (var i = 0; i < clientAssets.toLoad.length; i++) { + var path = clientAssets.toLoad[i]; + var asset = clientAssets.assets[path]; + if (null === asset || void 0 === asset) { + var rawAsset = this.rawAssets[path]; + if (null === rawAsset || void 0 === rawAsset) continue; + rawAsset instanceof HTMLImageElement ? clientAssets.assets[path] = clientAssets.textureLoader(rawAsset) : clientAssets.assets[path] = rawAsset; + } + } + }; + SharedAssetManager.prototype.isLoadingComplete = function(clientId) { + var clientAssets = this.clientAssets[clientId]; + if (null === clientAssets || void 0 === clientAssets) return true; + this.updateClientAssets(clientAssets); + return clientAssets.toLoad.length == clientAssets.loaded(); + }; + SharedAssetManager.prototype.dispose = function() {}; + SharedAssetManager.prototype.hasErrors = function() { + return Object.keys(this.errors).length > 0; + }; + SharedAssetManager.prototype.getErrors = function() { + return this.errors; + }; + return SharedAssetManager; + })(); + spine.SharedAssetManager = SharedAssetManager; + })(spine || (spine = {})); + var spine; + (function(spine) { + var Skeleton = (function() { + function Skeleton(data) { + this._updateCache = new Array(); + this.updateCacheReset = new Array(); + this.time = 0; + this.scaleX = 1; + this.scaleY = 1; + this.x = 0; + this.y = 0; + if (null == data) throw new Error("data cannot be null."); + this.data = data; + this.bones = new Array(); + for (var i = 0; i < data.bones.length; i++) { + var boneData = data.bones[i]; + var bone = void 0; + if (null == boneData.parent) bone = new spine.Bone(boneData, this, null); else { + var parent_1 = this.bones[boneData.parent.index]; + bone = new spine.Bone(boneData, this, parent_1); + parent_1.children.push(bone); + } + this.bones.push(bone); + } + this.slots = new Array(); + this.drawOrder = new Array(); + for (var i = 0; i < data.slots.length; i++) { + var slotData = data.slots[i]; + var bone = this.bones[slotData.boneData.index]; + var slot = new spine.Slot(slotData, bone); + this.slots.push(slot); + this.drawOrder.push(slot); + } + this.ikConstraints = new Array(); + for (var i = 0; i < data.ikConstraints.length; i++) { + var ikConstraintData = data.ikConstraints[i]; + this.ikConstraints.push(new spine.IkConstraint(ikConstraintData, this)); + } + this.transformConstraints = new Array(); + for (var i = 0; i < data.transformConstraints.length; i++) { + var transformConstraintData = data.transformConstraints[i]; + this.transformConstraints.push(new spine.TransformConstraint(transformConstraintData, this)); + } + this.pathConstraints = new Array(); + for (var i = 0; i < data.pathConstraints.length; i++) { + var pathConstraintData = data.pathConstraints[i]; + this.pathConstraints.push(new spine.PathConstraint(pathConstraintData, this)); + } + this.color = new spine.Color(1, 1, 1, 1); + this.updateCache(); + } + Skeleton.prototype.updateCache = function() { + var updateCache = this._updateCache; + updateCache.length = 0; + this.updateCacheReset.length = 0; + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + bone.sorted = bone.data.skinRequired; + bone.active = !bone.sorted; + } + if (null != this.skin) { + var skinBones = this.skin.bones; + for (var i = 0, n = this.skin.bones.length; i < n; i++) { + var bone = this.bones[skinBones[i].index]; + do { + bone.sorted = false; + bone.active = true; + bone = bone.parent; + } while (null != bone); + } + } + var ikConstraints = this.ikConstraints; + var transformConstraints = this.transformConstraints; + var pathConstraints = this.pathConstraints; + var ikCount = ikConstraints.length, transformCount = transformConstraints.length, pathCount = pathConstraints.length; + var constraintCount = ikCount + transformCount + pathCount; + outer: for (var i = 0; i < constraintCount; i++) { + for (var ii = 0; ii < ikCount; ii++) { + var constraint = ikConstraints[ii]; + if (constraint.data.order == i) { + this.sortIkConstraint(constraint); + continue outer; + } + } + for (var ii = 0; ii < transformCount; ii++) { + var constraint = transformConstraints[ii]; + if (constraint.data.order == i) { + this.sortTransformConstraint(constraint); + continue outer; + } + } + for (var ii = 0; ii < pathCount; ii++) { + var constraint = pathConstraints[ii]; + if (constraint.data.order == i) { + this.sortPathConstraint(constraint); + continue outer; + } + } + } + for (var i = 0, n = bones.length; i < n; i++) this.sortBone(bones[i]); + }; + Skeleton.prototype.sortIkConstraint = function(constraint) { + constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || null != this.skin && spine.Utils.contains(this.skin.constraints, constraint.data, true)); + if (!constraint.active) return; + var target = constraint.target; + this.sortBone(target); + var constrained = constraint.bones; + var parent = constrained[0]; + this.sortBone(parent); + if (constrained.length > 1) { + var child = constrained[constrained.length - 1]; + this._updateCache.indexOf(child) > -1 || this.updateCacheReset.push(child); + } + this._updateCache.push(constraint); + this.sortReset(parent.children); + constrained[constrained.length - 1].sorted = true; + }; + Skeleton.prototype.sortPathConstraint = function(constraint) { + constraint.active = constraint.target.bone.isActive() && (!constraint.data.skinRequired || null != this.skin && spine.Utils.contains(this.skin.constraints, constraint.data, true)); + if (!constraint.active) return; + var slot = constraint.target; + var slotIndex = slot.data.index; + var slotBone = slot.bone; + null != this.skin && this.sortPathConstraintAttachment(this.skin, slotIndex, slotBone); + null != this.data.defaultSkin && this.data.defaultSkin != this.skin && this.sortPathConstraintAttachment(this.data.defaultSkin, slotIndex, slotBone); + for (var i = 0, n = this.data.skins.length; i < n; i++) this.sortPathConstraintAttachment(this.data.skins[i], slotIndex, slotBone); + var attachment = slot.getAttachment(); + attachment instanceof spine.PathAttachment && this.sortPathConstraintAttachmentWith(attachment, slotBone); + var constrained = constraint.bones; + var boneCount = constrained.length; + for (var i = 0; i < boneCount; i++) this.sortBone(constrained[i]); + this._updateCache.push(constraint); + for (var i = 0; i < boneCount; i++) this.sortReset(constrained[i].children); + for (var i = 0; i < boneCount; i++) constrained[i].sorted = true; + }; + Skeleton.prototype.sortTransformConstraint = function(constraint) { + constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || null != this.skin && spine.Utils.contains(this.skin.constraints, constraint.data, true)); + if (!constraint.active) return; + this.sortBone(constraint.target); + var constrained = constraint.bones; + var boneCount = constrained.length; + if (constraint.data.local) for (var i = 0; i < boneCount; i++) { + var child = constrained[i]; + this.sortBone(child.parent); + this._updateCache.indexOf(child) > -1 || this.updateCacheReset.push(child); + } else for (var i = 0; i < boneCount; i++) this.sortBone(constrained[i]); + this._updateCache.push(constraint); + for (var ii = 0; ii < boneCount; ii++) this.sortReset(constrained[ii].children); + for (var ii = 0; ii < boneCount; ii++) constrained[ii].sorted = true; + }; + Skeleton.prototype.sortPathConstraintAttachment = function(skin, slotIndex, slotBone) { + var attachments = skin.attachments[slotIndex]; + if (!attachments) return; + for (var key in attachments) this.sortPathConstraintAttachmentWith(attachments[key], slotBone); + }; + Skeleton.prototype.sortPathConstraintAttachmentWith = function(attachment, slotBone) { + if (!(attachment instanceof spine.PathAttachment)) return; + var pathBones = attachment.bones; + if (null == pathBones) this.sortBone(slotBone); else { + var bones = this.bones; + var i = 0; + while (i < pathBones.length) { + var boneCount = pathBones[i++]; + for (var n = i + boneCount; i < n; i++) { + var boneIndex = pathBones[i]; + this.sortBone(bones[boneIndex]); + } + } + } + }; + Skeleton.prototype.sortBone = function(bone) { + if (bone.sorted) return; + var parent = bone.parent; + null != parent && this.sortBone(parent); + bone.sorted = true; + this._updateCache.push(bone); + }; + Skeleton.prototype.sortReset = function(bones) { + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (!bone.active) continue; + bone.sorted && this.sortReset(bone.children); + bone.sorted = false; + } + }; + Skeleton.prototype.updateWorldTransform = function() { + var updateCacheReset = this.updateCacheReset; + for (var i = 0, n = updateCacheReset.length; i < n; i++) { + var bone = updateCacheReset[i]; + bone.ax = bone.x; + bone.ay = bone.y; + bone.arotation = bone.rotation; + bone.ascaleX = bone.scaleX; + bone.ascaleY = bone.scaleY; + bone.ashearX = bone.shearX; + bone.ashearY = bone.shearY; + bone.appliedValid = true; + } + var updateCache = this._updateCache; + for (var i = 0, n = updateCache.length; i < n; i++) updateCache[i].update(); + }; + Skeleton.prototype.setToSetupPose = function() { + this.setBonesToSetupPose(); + this.setSlotsToSetupPose(); + }; + Skeleton.prototype.setBonesToSetupPose = function() { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) bones[i].setToSetupPose(); + var ikConstraints = this.ikConstraints; + for (var i = 0, n = ikConstraints.length; i < n; i++) { + var constraint = ikConstraints[i]; + constraint.mix = constraint.data.mix; + constraint.softness = constraint.data.softness; + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + } + var transformConstraints = this.transformConstraints; + for (var i = 0, n = transformConstraints.length; i < n; i++) { + var constraint = transformConstraints[i]; + var data = constraint.data; + constraint.rotateMix = data.rotateMix; + constraint.translateMix = data.translateMix; + constraint.scaleMix = data.scaleMix; + constraint.shearMix = data.shearMix; + } + var pathConstraints = this.pathConstraints; + for (var i = 0, n = pathConstraints.length; i < n; i++) { + var constraint = pathConstraints[i]; + var data = constraint.data; + constraint.position = data.position; + constraint.spacing = data.spacing; + constraint.rotateMix = data.rotateMix; + constraint.translateMix = data.translateMix; + } + }; + Skeleton.prototype.setSlotsToSetupPose = function() { + var slots = this.slots; + spine.Utils.arrayCopy(slots, 0, this.drawOrder, 0, slots.length); + for (var i = 0, n = slots.length; i < n; i++) slots[i].setToSetupPose(); + }; + Skeleton.prototype.getRootBone = function() { + if (0 == this.bones.length) return null; + return this.bones[0]; + }; + Skeleton.prototype.findBone = function(boneName) { + if (null == boneName) throw new Error("boneName cannot be null."); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (bone.data.name == boneName) return bone; + } + return null; + }; + Skeleton.prototype.findBoneIndex = function(boneName) { + if (null == boneName) throw new Error("boneName cannot be null."); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) if (bones[i].data.name == boneName) return i; + return -1; + }; + Skeleton.prototype.findSlot = function(slotName) { + if (null == slotName) throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + if (slot.data.name == slotName) return slot; + } + return null; + }; + Skeleton.prototype.findSlotIndex = function(slotName) { + if (null == slotName) throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) if (slots[i].data.name == slotName) return i; + return -1; + }; + Skeleton.prototype.setSkinByName = function(skinName) { + var skin = this.data.findSkin(skinName); + if (null == skin) throw new Error("Skin not found: " + skinName); + this.setSkin(skin); + }; + Skeleton.prototype.setSkin = function(newSkin) { + if (newSkin == this.skin) return; + if (null != newSkin) if (null != this.skin) newSkin.attachAll(this, this.skin); else { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + var name_1 = slot.data.attachmentName; + if (null != name_1) { + var attachment = newSkin.getAttachment(i, name_1); + null != attachment && slot.setAttachment(attachment); + } + } + } + this.skin = newSkin; + this.updateCache(); + }; + Skeleton.prototype.getAttachmentByName = function(slotName, attachmentName) { + return this.getAttachment(this.data.findSlotIndex(slotName), attachmentName); + }; + Skeleton.prototype.getAttachment = function(slotIndex, attachmentName) { + if (null == attachmentName) throw new Error("attachmentName cannot be null."); + if (null != this.skin) { + var attachment = this.skin.getAttachment(slotIndex, attachmentName); + if (null != attachment) return attachment; + } + if (null != this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName); + return null; + }; + Skeleton.prototype.setAttachment = function(slotName, attachmentName) { + if (null == slotName) throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + if (slot.data.name == slotName) { + var attachment = null; + if (null != attachmentName) { + attachment = this.getAttachment(i, attachmentName); + if (null == attachment) throw new Error("Attachment not found: " + attachmentName + ", for slot: " + slotName); + } + slot.setAttachment(attachment); + return; + } + } + throw new Error("Slot not found: " + slotName); + }; + Skeleton.prototype.findIkConstraint = function(constraintName) { + if (null == constraintName) throw new Error("constraintName cannot be null."); + var ikConstraints = this.ikConstraints; + for (var i = 0, n = ikConstraints.length; i < n; i++) { + var ikConstraint = ikConstraints[i]; + if (ikConstraint.data.name == constraintName) return ikConstraint; + } + return null; + }; + Skeleton.prototype.findTransformConstraint = function(constraintName) { + if (null == constraintName) throw new Error("constraintName cannot be null."); + var transformConstraints = this.transformConstraints; + for (var i = 0, n = transformConstraints.length; i < n; i++) { + var constraint = transformConstraints[i]; + if (constraint.data.name == constraintName) return constraint; + } + return null; + }; + Skeleton.prototype.findPathConstraint = function(constraintName) { + if (null == constraintName) throw new Error("constraintName cannot be null."); + var pathConstraints = this.pathConstraints; + for (var i = 0, n = pathConstraints.length; i < n; i++) { + var constraint = pathConstraints[i]; + if (constraint.data.name == constraintName) return constraint; + } + return null; + }; + Skeleton.prototype.getBounds = function(offset, size, temp) { + void 0 === temp && (temp = new Array(2)); + if (null == offset) throw new Error("offset cannot be null."); + if (null == size) throw new Error("size cannot be null."); + var drawOrder = this.drawOrder; + var minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY; + for (var i = 0, n = drawOrder.length; i < n; i++) { + var slot = drawOrder[i]; + if (!slot.bone.active) continue; + var verticesLength = 0; + var vertices = null; + var attachment = slot.getAttachment(); + if (attachment instanceof spine.RegionAttachment) { + verticesLength = 8; + vertices = spine.Utils.setArraySize(temp, verticesLength, 0); + attachment.computeWorldVertices(slot.bone, vertices, 0, 2); + } else if (attachment instanceof spine.MeshAttachment) { + var mesh = attachment; + verticesLength = mesh.worldVerticesLength; + vertices = spine.Utils.setArraySize(temp, verticesLength, 0); + mesh.computeWorldVertices(slot, 0, verticesLength, vertices, 0, 2); + } + if (null != vertices) for (var ii = 0, nn = vertices.length; ii < nn; ii += 2) { + var x = vertices[ii], y = vertices[ii + 1]; + minX = Math.min(minX, x); + minY = Math.min(minY, y); + maxX = Math.max(maxX, x); + maxY = Math.max(maxY, y); + } + } + offset.set(minX, minY); + size.set(maxX - minX, maxY - minY); + }; + Skeleton.prototype.update = function(delta) { + this.time += delta; + }; + return Skeleton; + })(); + spine.Skeleton = Skeleton; + })(spine || (spine = {})); + var spine; + (function(spine) { + var SkeletonBinary = (function() { + function SkeletonBinary(attachmentLoader) { + this.scale = 1; + this.linkedMeshes = new Array(); + this.attachmentLoader = attachmentLoader; + } + SkeletonBinary.prototype.readSkeletonData = function(binary) { + var scale = this.scale; + var skeletonData = new spine.SkeletonData(); + skeletonData.name = ""; + var input = new BinaryInput(binary); + skeletonData.hash = input.readString(); + skeletonData.version = input.readString(); + skeletonData.x = input.readFloat(); + skeletonData.y = input.readFloat(); + skeletonData.width = input.readFloat(); + skeletonData.height = input.readFloat(); + var nonessential = input.readBoolean(); + if (nonessential) { + skeletonData.fps = input.readFloat(); + skeletonData.imagesPath = input.readString(); + skeletonData.audioPath = input.readString(); + } + var n = 0; + n = input.readInt(true); + for (var i = 0; i < n; i++) input.strings.push(input.readString()); + n = input.readInt(true); + for (var i = 0; i < n; i++) { + var name_2 = input.readString(); + var parent_2 = 0 == i ? null : skeletonData.bones[input.readInt(true)]; + var data = new spine.BoneData(i, name_2, parent_2); + data.rotation = input.readFloat(); + data.x = input.readFloat() * scale; + data.y = input.readFloat() * scale; + data.scaleX = input.readFloat(); + data.scaleY = input.readFloat(); + data.shearX = input.readFloat(); + data.shearY = input.readFloat(); + data.length = input.readFloat() * scale; + data.transformMode = SkeletonBinary.TransformModeValues[input.readInt(true)]; + data.skinRequired = input.readBoolean(); + nonessential && spine.Color.rgba8888ToColor(data.color, input.readInt32()); + skeletonData.bones.push(data); + } + n = input.readInt(true); + for (var i = 0; i < n; i++) { + var slotName = input.readString(); + var boneData = skeletonData.bones[input.readInt(true)]; + var data = new spine.SlotData(i, slotName, boneData); + spine.Color.rgba8888ToColor(data.color, input.readInt32()); + var darkColor = input.readInt32(); + -1 != darkColor && spine.Color.rgb888ToColor(data.darkColor = new spine.Color(), darkColor); + data.attachmentName = input.readStringRef(); + data.blendMode = SkeletonBinary.BlendModeValues[input.readInt(true)]; + skeletonData.slots.push(data); + } + n = input.readInt(true); + for (var i = 0, nn = void 0; i < n; i++) { + var data = new spine.IkConstraintData(input.readString()); + data.order = input.readInt(true); + data.skinRequired = input.readBoolean(); + nn = input.readInt(true); + for (var ii = 0; ii < nn; ii++) data.bones.push(skeletonData.bones[input.readInt(true)]); + data.target = skeletonData.bones[input.readInt(true)]; + data.mix = input.readFloat(); + data.softness = input.readFloat() * scale; + data.bendDirection = input.readByte(); + data.compress = input.readBoolean(); + data.stretch = input.readBoolean(); + data.uniform = input.readBoolean(); + skeletonData.ikConstraints.push(data); + } + n = input.readInt(true); + for (var i = 0, nn = void 0; i < n; i++) { + var data = new spine.TransformConstraintData(input.readString()); + data.order = input.readInt(true); + data.skinRequired = input.readBoolean(); + nn = input.readInt(true); + for (var ii = 0; ii < nn; ii++) data.bones.push(skeletonData.bones[input.readInt(true)]); + data.target = skeletonData.bones[input.readInt(true)]; + data.local = input.readBoolean(); + data.relative = input.readBoolean(); + data.offsetRotation = input.readFloat(); + data.offsetX = input.readFloat() * scale; + data.offsetY = input.readFloat() * scale; + data.offsetScaleX = input.readFloat(); + data.offsetScaleY = input.readFloat(); + data.offsetShearY = input.readFloat(); + data.rotateMix = input.readFloat(); + data.translateMix = input.readFloat(); + data.scaleMix = input.readFloat(); + data.shearMix = input.readFloat(); + skeletonData.transformConstraints.push(data); + } + n = input.readInt(true); + for (var i = 0, nn = void 0; i < n; i++) { + var data = new spine.PathConstraintData(input.readString()); + data.order = input.readInt(true); + data.skinRequired = input.readBoolean(); + nn = input.readInt(true); + for (var ii = 0; ii < nn; ii++) data.bones.push(skeletonData.bones[input.readInt(true)]); + data.target = skeletonData.slots[input.readInt(true)]; + data.positionMode = SkeletonBinary.PositionModeValues[input.readInt(true)]; + data.spacingMode = SkeletonBinary.SpacingModeValues[input.readInt(true)]; + data.rotateMode = SkeletonBinary.RotateModeValues[input.readInt(true)]; + data.offsetRotation = input.readFloat(); + data.position = input.readFloat(); + data.positionMode == spine.PositionMode.Fixed && (data.position *= scale); + data.spacing = input.readFloat(); + data.spacingMode != spine.SpacingMode.Length && data.spacingMode != spine.SpacingMode.Fixed || (data.spacing *= scale); + data.rotateMix = input.readFloat(); + data.translateMix = input.readFloat(); + skeletonData.pathConstraints.push(data); + } + var defaultSkin = this.readSkin(input, skeletonData, true, nonessential); + if (null != defaultSkin) { + skeletonData.defaultSkin = defaultSkin; + skeletonData.skins.push(defaultSkin); + } + var i = skeletonData.skins.length; + spine.Utils.setArraySize(skeletonData.skins, n = i + input.readInt(true)); + for (;i < n; i++) skeletonData.skins[i] = this.readSkin(input, skeletonData, false, nonessential); + n = this.linkedMeshes.length; + for (var i = 0; i < n; i++) { + var linkedMesh = this.linkedMeshes[i]; + var skin = null == linkedMesh.skin ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin); + if (null == skin) throw new Error("Skin not found: " + linkedMesh.skin); + var parent_3 = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent); + if (null == parent_3) throw new Error("Parent mesh not found: " + linkedMesh.parent); + linkedMesh.mesh.deformAttachment = linkedMesh.inheritDeform ? parent_3 : linkedMesh.mesh; + linkedMesh.mesh.setParentMesh(parent_3); + linkedMesh.mesh.updateUVs(); + } + this.linkedMeshes.length = 0; + n = input.readInt(true); + for (var i = 0; i < n; i++) { + var data = new spine.EventData(input.readStringRef()); + data.intValue = input.readInt(false); + data.floatValue = input.readFloat(); + data.stringValue = input.readString(); + data.audioPath = input.readString(); + if (null != data.audioPath) { + data.volume = input.readFloat(); + data.balance = input.readFloat(); + } + skeletonData.events.push(data); + } + n = input.readInt(true); + for (var i = 0; i < n; i++) skeletonData.animations.push(this.readAnimation(input, input.readString(), skeletonData)); + return skeletonData; + }; + SkeletonBinary.prototype.readSkin = function(input, skeletonData, defaultSkin, nonessential) { + var skin = null; + var slotCount = 0; + if (defaultSkin) { + slotCount = input.readInt(true); + if (0 == slotCount) return null; + skin = new spine.Skin("default"); + } else { + skin = new spine.Skin(input.readStringRef()); + skin.bones.length = input.readInt(true); + for (var i = 0, n = skin.bones.length; i < n; i++) skin.bones[i] = skeletonData.bones[input.readInt(true)]; + for (var i = 0, n = input.readInt(true); i < n; i++) skin.constraints.push(skeletonData.ikConstraints[input.readInt(true)]); + for (var i = 0, n = input.readInt(true); i < n; i++) skin.constraints.push(skeletonData.transformConstraints[input.readInt(true)]); + for (var i = 0, n = input.readInt(true); i < n; i++) skin.constraints.push(skeletonData.pathConstraints[input.readInt(true)]); + slotCount = input.readInt(true); + } + for (var i = 0; i < slotCount; i++) { + var slotIndex = input.readInt(true); + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var name_3 = input.readStringRef(); + var attachment = this.readAttachment(input, skeletonData, skin, slotIndex, name_3, nonessential); + null != attachment && skin.setAttachment(slotIndex, name_3, attachment); + } + } + return skin; + }; + SkeletonBinary.prototype.readAttachment = function(input, skeletonData, skin, slotIndex, attachmentName, nonessential) { + var scale = this.scale; + var name = input.readStringRef(); + null == name && (name = attachmentName); + var typeIndex = input.readByte(); + var type = SkeletonBinary.AttachmentTypeValues[typeIndex]; + switch (type) { + case spine.AttachmentType.Region: + var path = input.readStringRef(); + var rotation = input.readFloat(); + var x = input.readFloat(); + var y = input.readFloat(); + var scaleX = input.readFloat(); + var scaleY = input.readFloat(); + var width = input.readFloat(); + var height = input.readFloat(); + var color = input.readInt32(); + null == path && (path = name); + var region = this.attachmentLoader.newRegionAttachment(skin, name, path); + if (null == region) return null; + region.path = path; + region.x = x * scale; + region.y = y * scale; + region.scaleX = scaleX; + region.scaleY = scaleY; + region.rotation = rotation; + region.width = width * scale; + region.height = height * scale; + spine.Color.rgba8888ToColor(region.color, color); + region.updateOffset(); + return region; + + case spine.AttachmentType.BoundingBox: + var vertexCount = input.readInt(true); + var vertices = this.readVertices(input, vertexCount); + var color = nonessential ? input.readInt32() : 0; + var box = this.attachmentLoader.newBoundingBoxAttachment(skin, name); + if (null == box) return null; + box.worldVerticesLength = vertexCount << 1; + box.vertices = vertices.vertices; + box.bones = vertices.bones; + nonessential && spine.Color.rgba8888ToColor(box.color, color); + return box; + + case spine.AttachmentType.Mesh: + var path = input.readStringRef(); + var color = input.readInt32(); + var vertexCount = input.readInt(true); + var uvs = this.readFloatArray(input, vertexCount << 1, 1); + var triangles = this.readShortArray(input); + var vertices = this.readVertices(input, vertexCount); + var hullLength = input.readInt(true); + var edges = null; + var width = 0, height = 0; + if (nonessential) { + edges = this.readShortArray(input); + width = input.readFloat(); + height = input.readFloat(); + } + null == path && (path = name); + var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path); + if (null == mesh) return null; + mesh.path = path; + spine.Color.rgba8888ToColor(mesh.color, color); + mesh.bones = vertices.bones; + mesh.vertices = vertices.vertices; + mesh.worldVerticesLength = vertexCount << 1; + mesh.triangles = triangles; + mesh.regionUVs = uvs; + mesh.updateUVs(); + mesh.hullLength = hullLength << 1; + if (nonessential) { + mesh.edges = edges; + mesh.width = width * scale; + mesh.height = height * scale; + } + return mesh; + + case spine.AttachmentType.LinkedMesh: + var path = input.readStringRef(); + var color = input.readInt32(); + var skinName = input.readStringRef(); + var parent_4 = input.readStringRef(); + var inheritDeform = input.readBoolean(); + var width = 0, height = 0; + if (nonessential) { + width = input.readFloat(); + height = input.readFloat(); + } + null == path && (path = name); + var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path); + if (null == mesh) return null; + mesh.path = path; + spine.Color.rgba8888ToColor(mesh.color, color); + if (nonessential) { + mesh.width = width * scale; + mesh.height = height * scale; + } + this.linkedMeshes.push(new LinkedMesh(mesh, skinName, slotIndex, parent_4, inheritDeform)); + return mesh; + + case spine.AttachmentType.Path: + var closed_1 = input.readBoolean(); + var constantSpeed = input.readBoolean(); + var vertexCount = input.readInt(true); + var vertices = this.readVertices(input, vertexCount); + var lengths = spine.Utils.newArray(vertexCount / 3, 0); + for (var i = 0, n = lengths.length; i < n; i++) lengths[i] = input.readFloat() * scale; + var color = nonessential ? input.readInt32() : 0; + var path = this.attachmentLoader.newPathAttachment(skin, name); + if (null == path) return null; + path.closed = closed_1; + path.constantSpeed = constantSpeed; + path.worldVerticesLength = vertexCount << 1; + path.vertices = vertices.vertices; + path.bones = vertices.bones; + path.lengths = lengths; + nonessential && spine.Color.rgba8888ToColor(path.color, color); + return path; + + case spine.AttachmentType.Point: + var rotation = input.readFloat(); + var x = input.readFloat(); + var y = input.readFloat(); + var color = nonessential ? input.readInt32() : 0; + var point = this.attachmentLoader.newPointAttachment(skin, name); + if (null == point) return null; + point.x = x * scale; + point.y = y * scale; + point.rotation = rotation; + nonessential && spine.Color.rgba8888ToColor(point.color, color); + return point; + + case spine.AttachmentType.Clipping: + var endSlotIndex = input.readInt(true); + var vertexCount = input.readInt(true); + var vertices = this.readVertices(input, vertexCount); + var color = nonessential ? input.readInt32() : 0; + var clip = this.attachmentLoader.newClippingAttachment(skin, name); + if (null == clip) return null; + clip.endSlot = skeletonData.slots[endSlotIndex]; + clip.worldVerticesLength = vertexCount << 1; + clip.vertices = vertices.vertices; + clip.bones = vertices.bones; + nonessential && spine.Color.rgba8888ToColor(clip.color, color); + return clip; + } + return null; + }; + SkeletonBinary.prototype.readVertices = function(input, vertexCount) { + var verticesLength = vertexCount << 1; + var vertices = new Vertices(); + var scale = this.scale; + if (!input.readBoolean()) { + vertices.vertices = this.readFloatArray(input, verticesLength, scale); + return vertices; + } + var weights = new Array(); + var bonesArray = new Array(); + for (var i = 0; i < vertexCount; i++) { + var boneCount = input.readInt(true); + bonesArray.push(boneCount); + for (var ii = 0; ii < boneCount; ii++) { + bonesArray.push(input.readInt(true)); + weights.push(input.readFloat() * scale); + weights.push(input.readFloat() * scale); + weights.push(input.readFloat()); + } + } + vertices.vertices = spine.Utils.toFloatArray(weights); + vertices.bones = bonesArray; + return vertices; + }; + SkeletonBinary.prototype.readFloatArray = function(input, n, scale) { + var array = new Array(n); + if (1 == scale) for (var i = 0; i < n; i++) array[i] = input.readFloat(); else for (var i = 0; i < n; i++) array[i] = input.readFloat() * scale; + return array; + }; + SkeletonBinary.prototype.readShortArray = function(input) { + var n = input.readInt(true); + var array = new Array(n); + for (var i = 0; i < n; i++) array[i] = input.readShort(); + return array; + }; + SkeletonBinary.prototype.readAnimation = function(input, name, skeletonData) { + var timelines = new Array(); + var scale = this.scale; + var duration = 0; + var tempColor1 = new spine.Color(); + var tempColor2 = new spine.Color(); + for (var i = 0, n = input.readInt(true); i < n; i++) { + var slotIndex = input.readInt(true); + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var timelineType = input.readByte(); + var frameCount = input.readInt(true); + switch (timelineType) { + case SkeletonBinary.SLOT_ATTACHMENT: + var timeline = new spine.AttachmentTimeline(frameCount); + timeline.slotIndex = slotIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) timeline.setFrame(frameIndex, input.readFloat(), input.readStringRef()); + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[frameCount - 1]); + break; + + case SkeletonBinary.SLOT_COLOR: + var timeline = new spine.ColorTimeline(frameCount); + timeline.slotIndex = slotIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + var time = input.readFloat(); + spine.Color.rgba8888ToColor(tempColor1, input.readInt32()); + timeline.setFrame(frameIndex, time, tempColor1.r, tempColor1.g, tempColor1.b, tempColor1.a); + frameIndex < frameCount - 1 && this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.ColorTimeline.ENTRIES]); + break; + + case SkeletonBinary.SLOT_TWO_COLOR: + var timeline = new spine.TwoColorTimeline(frameCount); + timeline.slotIndex = slotIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + var time = input.readFloat(); + spine.Color.rgba8888ToColor(tempColor1, input.readInt32()); + spine.Color.rgb888ToColor(tempColor2, input.readInt32()); + timeline.setFrame(frameIndex, time, tempColor1.r, tempColor1.g, tempColor1.b, tempColor1.a, tempColor2.r, tempColor2.g, tempColor2.b); + frameIndex < frameCount - 1 && this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.TwoColorTimeline.ENTRIES]); + } + } + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var boneIndex = input.readInt(true); + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var timelineType = input.readByte(); + var frameCount = input.readInt(true); + switch (timelineType) { + case SkeletonBinary.BONE_ROTATE: + var timeline = new spine.RotateTimeline(frameCount); + timeline.boneIndex = boneIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat()); + frameIndex < frameCount - 1 && this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.RotateTimeline.ENTRIES]); + break; + + case SkeletonBinary.BONE_TRANSLATE: + case SkeletonBinary.BONE_SCALE: + case SkeletonBinary.BONE_SHEAR: + var timeline = void 0; + var timelineScale = 1; + if (timelineType == SkeletonBinary.BONE_SCALE) timeline = new spine.ScaleTimeline(frameCount); else if (timelineType == SkeletonBinary.BONE_SHEAR) timeline = new spine.ShearTimeline(frameCount); else { + timeline = new spine.TranslateTimeline(frameCount); + timelineScale = scale; + } + timeline.boneIndex = boneIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat() * timelineScale, input.readFloat() * timelineScale); + frameIndex < frameCount - 1 && this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.TranslateTimeline.ENTRIES]); + } + } + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var index = input.readInt(true); + var frameCount = input.readInt(true); + var timeline = new spine.IkConstraintTimeline(frameCount); + timeline.ikConstraintIndex = index; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat() * scale, input.readByte(), input.readBoolean(), input.readBoolean()); + frameIndex < frameCount - 1 && this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.IkConstraintTimeline.ENTRIES]); + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var index = input.readInt(true); + var frameCount = input.readInt(true); + var timeline = new spine.TransformConstraintTimeline(frameCount); + timeline.transformConstraintIndex = index; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat(), input.readFloat(), input.readFloat()); + frameIndex < frameCount - 1 && this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.TransformConstraintTimeline.ENTRIES]); + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var index = input.readInt(true); + var data = skeletonData.pathConstraints[index]; + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var timelineType = input.readByte(); + var frameCount = input.readInt(true); + switch (timelineType) { + case SkeletonBinary.PATH_POSITION: + case SkeletonBinary.PATH_SPACING: + var timeline = void 0; + var timelineScale = 1; + if (timelineType == SkeletonBinary.PATH_SPACING) { + timeline = new spine.PathConstraintSpacingTimeline(frameCount); + data.spacingMode != spine.SpacingMode.Length && data.spacingMode != spine.SpacingMode.Fixed || (timelineScale = scale); + } else { + timeline = new spine.PathConstraintPositionTimeline(frameCount); + data.positionMode == spine.PositionMode.Fixed && (timelineScale = scale); + } + timeline.pathConstraintIndex = index; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat() * timelineScale); + frameIndex < frameCount - 1 && this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.PathConstraintPositionTimeline.ENTRIES]); + break; + + case SkeletonBinary.PATH_MIX: + var timeline = new spine.PathConstraintMixTimeline(frameCount); + timeline.pathConstraintIndex = index; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat()); + frameIndex < frameCount - 1 && this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.PathConstraintMixTimeline.ENTRIES]); + } + } + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var skin = skeletonData.skins[input.readInt(true)]; + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var slotIndex = input.readInt(true); + for (var iii = 0, nnn = input.readInt(true); iii < nnn; iii++) { + var attachment = skin.getAttachment(slotIndex, input.readStringRef()); + var weighted = null != attachment.bones; + var vertices = attachment.vertices; + var deformLength = weighted ? vertices.length / 3 * 2 : vertices.length; + var frameCount = input.readInt(true); + var timeline = new spine.DeformTimeline(frameCount); + timeline.slotIndex = slotIndex; + timeline.attachment = attachment; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + var time = input.readFloat(); + var deform = void 0; + var end = input.readInt(true); + if (0 == end) deform = weighted ? spine.Utils.newFloatArray(deformLength) : vertices; else { + deform = spine.Utils.newFloatArray(deformLength); + var start = input.readInt(true); + end += start; + if (1 == scale) for (var v = start; v < end; v++) deform[v] = input.readFloat(); else for (var v = start; v < end; v++) deform[v] = input.readFloat() * scale; + if (!weighted) for (var v = 0, vn = deform.length; v < vn; v++) deform[v] += vertices[v]; + } + timeline.setFrame(frameIndex, time, deform); + frameIndex < frameCount - 1 && this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[frameCount - 1]); + } + } + } + var drawOrderCount = input.readInt(true); + if (drawOrderCount > 0) { + var timeline = new spine.DrawOrderTimeline(drawOrderCount); + var slotCount = skeletonData.slots.length; + for (var i = 0; i < drawOrderCount; i++) { + var time = input.readFloat(); + var offsetCount = input.readInt(true); + var drawOrder = spine.Utils.newArray(slotCount, 0); + for (var ii = slotCount - 1; ii >= 0; ii--) drawOrder[ii] = -1; + var unchanged = spine.Utils.newArray(slotCount - offsetCount, 0); + var originalIndex = 0, unchangedIndex = 0; + for (var ii = 0; ii < offsetCount; ii++) { + var slotIndex = input.readInt(true); + while (originalIndex != slotIndex) unchanged[unchangedIndex++] = originalIndex++; + drawOrder[originalIndex + input.readInt(true)] = originalIndex++; + } + while (originalIndex < slotCount) unchanged[unchangedIndex++] = originalIndex++; + for (var ii = slotCount - 1; ii >= 0; ii--) -1 == drawOrder[ii] && (drawOrder[ii] = unchanged[--unchangedIndex]); + timeline.setFrame(i, time, drawOrder); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[drawOrderCount - 1]); + } + var eventCount = input.readInt(true); + if (eventCount > 0) { + var timeline = new spine.EventTimeline(eventCount); + for (var i = 0; i < eventCount; i++) { + var time = input.readFloat(); + var eventData = skeletonData.events[input.readInt(true)]; + var event_4 = new spine.Event(time, eventData); + event_4.intValue = input.readInt(false); + event_4.floatValue = input.readFloat(); + event_4.stringValue = input.readBoolean() ? input.readString() : eventData.stringValue; + if (null != event_4.data.audioPath) { + event_4.volume = input.readFloat(); + event_4.balance = input.readFloat(); + } + timeline.setFrame(i, event_4); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[eventCount - 1]); + } + return new spine.Animation(name, timelines, duration); + }; + SkeletonBinary.prototype.readCurve = function(input, frameIndex, timeline) { + switch (input.readByte()) { + case SkeletonBinary.CURVE_STEPPED: + timeline.setStepped(frameIndex); + break; + + case SkeletonBinary.CURVE_BEZIER: + this.setCurve(timeline, frameIndex, input.readFloat(), input.readFloat(), input.readFloat(), input.readFloat()); + } + }; + SkeletonBinary.prototype.setCurve = function(timeline, frameIndex, cx1, cy1, cx2, cy2) { + timeline.setCurve(frameIndex, cx1, cy1, cx2, cy2); + }; + SkeletonBinary.AttachmentTypeValues = [ 0, 1, 2, 3, 4, 5, 6 ]; + SkeletonBinary.TransformModeValues = [ spine.TransformMode.Normal, spine.TransformMode.OnlyTranslation, spine.TransformMode.NoRotationOrReflection, spine.TransformMode.NoScale, spine.TransformMode.NoScaleOrReflection ]; + SkeletonBinary.PositionModeValues = [ spine.PositionMode.Fixed, spine.PositionMode.Percent ]; + SkeletonBinary.SpacingModeValues = [ spine.SpacingMode.Length, spine.SpacingMode.Fixed, spine.SpacingMode.Percent ]; + SkeletonBinary.RotateModeValues = [ spine.RotateMode.Tangent, spine.RotateMode.Chain, spine.RotateMode.ChainScale ]; + SkeletonBinary.BlendModeValues = [ spine.BlendMode.Normal, spine.BlendMode.Additive, spine.BlendMode.Multiply, spine.BlendMode.Screen ]; + SkeletonBinary.BONE_ROTATE = 0; + SkeletonBinary.BONE_TRANSLATE = 1; + SkeletonBinary.BONE_SCALE = 2; + SkeletonBinary.BONE_SHEAR = 3; + SkeletonBinary.SLOT_ATTACHMENT = 0; + SkeletonBinary.SLOT_COLOR = 1; + SkeletonBinary.SLOT_TWO_COLOR = 2; + SkeletonBinary.PATH_POSITION = 0; + SkeletonBinary.PATH_SPACING = 1; + SkeletonBinary.PATH_MIX = 2; + SkeletonBinary.CURVE_LINEAR = 0; + SkeletonBinary.CURVE_STEPPED = 1; + SkeletonBinary.CURVE_BEZIER = 2; + return SkeletonBinary; + })(); + spine.SkeletonBinary = SkeletonBinary; + var BinaryInput = (function() { + function BinaryInput(data, strings, index, buffer) { + void 0 === strings && (strings = new Array()); + void 0 === index && (index = 0); + void 0 === buffer && (buffer = new DataView(data.buffer)); + this.strings = strings; + this.index = index; + this.buffer = buffer; + } + BinaryInput.prototype.readByte = function() { + return this.buffer.getInt8(this.index++); + }; + BinaryInput.prototype.readShort = function() { + var value = this.buffer.getInt16(this.index); + this.index += 2; + return value; + }; + BinaryInput.prototype.readInt32 = function() { + var value = this.buffer.getInt32(this.index); + this.index += 4; + return value; + }; + BinaryInput.prototype.readInt = function(optimizePositive) { + var b = this.readByte(); + var result = 127 & b; + if (0 != (128 & b)) { + b = this.readByte(); + result |= (127 & b) << 7; + if (0 != (128 & b)) { + b = this.readByte(); + result |= (127 & b) << 14; + if (0 != (128 & b)) { + b = this.readByte(); + result |= (127 & b) << 21; + if (0 != (128 & b)) { + b = this.readByte(); + result |= (127 & b) << 28; + } + } + } + } + return optimizePositive ? result : result >>> 1 ^ -(1 & result); + }; + BinaryInput.prototype.readStringRef = function() { + var index = this.readInt(true); + return 0 == index ? null : this.strings[index - 1]; + }; + BinaryInput.prototype.readString = function() { + var byteCount = this.readInt(true); + switch (byteCount) { + case 0: + return null; + + case 1: + return ""; + } + byteCount--; + var chars = ""; + var charCount = 0; + for (var i = 0; i < byteCount; ) { + var b = this.readByte(); + switch (b >> 4) { + case 12: + case 13: + chars += String.fromCharCode((31 & b) << 6 | 63 & this.readByte()); + i += 2; + break; + + case 14: + chars += String.fromCharCode((15 & b) << 12 | (63 & this.readByte()) << 6 | 63 & this.readByte()); + i += 3; + break; + + default: + chars += String.fromCharCode(b); + i++; + } + } + return chars; + }; + BinaryInput.prototype.readFloat = function() { + var value = this.buffer.getFloat32(this.index); + this.index += 4; + return value; + }; + BinaryInput.prototype.readBoolean = function() { + return 0 != this.readByte(); + }; + return BinaryInput; + })(); + var LinkedMesh = (function() { + function LinkedMesh(mesh, skin, slotIndex, parent, inheritDeform) { + this.mesh = mesh; + this.skin = skin; + this.slotIndex = slotIndex; + this.parent = parent; + this.inheritDeform = inheritDeform; + } + return LinkedMesh; + })(); + var Vertices = (function() { + function Vertices(bones, vertices) { + void 0 === bones && (bones = null); + void 0 === vertices && (vertices = null); + this.bones = bones; + this.vertices = vertices; + } + return Vertices; + })(); + })(spine || (spine = {})); + var spine; + (function(spine) { + var SkeletonBounds = (function() { + function SkeletonBounds() { + this.minX = 0; + this.minY = 0; + this.maxX = 0; + this.maxY = 0; + this.boundingBoxes = new Array(); + this.polygons = new Array(); + this.polygonPool = new spine.Pool(function() { + return spine.Utils.newFloatArray(16); + }); + } + SkeletonBounds.prototype.update = function(skeleton, updateAabb) { + if (null == skeleton) throw new Error("skeleton cannot be null."); + var boundingBoxes = this.boundingBoxes; + var polygons = this.polygons; + var polygonPool = this.polygonPool; + var slots = skeleton.slots; + var slotCount = slots.length; + boundingBoxes.length = 0; + polygonPool.freeAll(polygons); + polygons.length = 0; + for (var i = 0; i < slotCount; i++) { + var slot = slots[i]; + if (!slot.bone.active) continue; + var attachment = slot.getAttachment(); + if (attachment instanceof spine.BoundingBoxAttachment) { + var boundingBox = attachment; + boundingBoxes.push(boundingBox); + var polygon = polygonPool.obtain(); + polygon.length != boundingBox.worldVerticesLength && (polygon = spine.Utils.newFloatArray(boundingBox.worldVerticesLength)); + polygons.push(polygon); + boundingBox.computeWorldVertices(slot, 0, boundingBox.worldVerticesLength, polygon, 0, 2); + } + } + if (updateAabb) this.aabbCompute(); else { + this.minX = Number.POSITIVE_INFINITY; + this.minY = Number.POSITIVE_INFINITY; + this.maxX = Number.NEGATIVE_INFINITY; + this.maxY = Number.NEGATIVE_INFINITY; + } + }; + SkeletonBounds.prototype.aabbCompute = function() { + var minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY; + var polygons = this.polygons; + for (var i = 0, n = polygons.length; i < n; i++) { + var polygon = polygons[i]; + var vertices = polygon; + for (var ii = 0, nn = polygon.length; ii < nn; ii += 2) { + var x = vertices[ii]; + var y = vertices[ii + 1]; + minX = Math.min(minX, x); + minY = Math.min(minY, y); + maxX = Math.max(maxX, x); + maxY = Math.max(maxY, y); + } + } + this.minX = minX; + this.minY = minY; + this.maxX = maxX; + this.maxY = maxY; + }; + SkeletonBounds.prototype.aabbContainsPoint = function(x, y) { + return x >= this.minX && x <= this.maxX && y >= this.minY && y <= this.maxY; + }; + SkeletonBounds.prototype.aabbIntersectsSegment = function(x1, y1, x2, y2) { + var minX = this.minX; + var minY = this.minY; + var maxX = this.maxX; + var maxY = this.maxY; + if (x1 <= minX && x2 <= minX || y1 <= minY && y2 <= minY || x1 >= maxX && x2 >= maxX || y1 >= maxY && y2 >= maxY) return false; + var m = (y2 - y1) / (x2 - x1); + var y = m * (minX - x1) + y1; + if (y > minY && y < maxY) return true; + y = m * (maxX - x1) + y1; + if (y > minY && y < maxY) return true; + var x = (minY - y1) / m + x1; + if (x > minX && x < maxX) return true; + x = (maxY - y1) / m + x1; + if (x > minX && x < maxX) return true; + return false; + }; + SkeletonBounds.prototype.aabbIntersectsSkeleton = function(bounds) { + return this.minX < bounds.maxX && this.maxX > bounds.minX && this.minY < bounds.maxY && this.maxY > bounds.minY; + }; + SkeletonBounds.prototype.containsPoint = function(x, y) { + var polygons = this.polygons; + for (var i = 0, n = polygons.length; i < n; i++) if (this.containsPointPolygon(polygons[i], x, y)) return this.boundingBoxes[i]; + return null; + }; + SkeletonBounds.prototype.containsPointPolygon = function(polygon, x, y) { + var vertices = polygon; + var nn = polygon.length; + var prevIndex = nn - 2; + var inside = false; + for (var ii = 0; ii < nn; ii += 2) { + var vertexY = vertices[ii + 1]; + var prevY = vertices[prevIndex + 1]; + if (vertexY < y && prevY >= y || prevY < y && vertexY >= y) { + var vertexX = vertices[ii]; + vertexX + (y - vertexY) / (prevY - vertexY) * (vertices[prevIndex] - vertexX) < x && (inside = !inside); + } + prevIndex = ii; + } + return inside; + }; + SkeletonBounds.prototype.intersectsSegment = function(x1, y1, x2, y2) { + var polygons = this.polygons; + for (var i = 0, n = polygons.length; i < n; i++) if (this.intersectsSegmentPolygon(polygons[i], x1, y1, x2, y2)) return this.boundingBoxes[i]; + return null; + }; + SkeletonBounds.prototype.intersectsSegmentPolygon = function(polygon, x1, y1, x2, y2) { + var vertices = polygon; + var nn = polygon.length; + var width12 = x1 - x2, height12 = y1 - y2; + var det1 = x1 * y2 - y1 * x2; + var x3 = vertices[nn - 2], y3 = vertices[nn - 1]; + for (var ii = 0; ii < nn; ii += 2) { + var x4 = vertices[ii], y4 = vertices[ii + 1]; + var det2 = x3 * y4 - y3 * x4; + var width34 = x3 - x4, height34 = y3 - y4; + var det3 = width12 * height34 - height12 * width34; + var x = (det1 * width34 - width12 * det2) / det3; + if ((x >= x3 && x <= x4 || x >= x4 && x <= x3) && (x >= x1 && x <= x2 || x >= x2 && x <= x1)) { + var y = (det1 * height34 - height12 * det2) / det3; + if ((y >= y3 && y <= y4 || y >= y4 && y <= y3) && (y >= y1 && y <= y2 || y >= y2 && y <= y1)) return true; + } + x3 = x4; + y3 = y4; + } + return false; + }; + SkeletonBounds.prototype.getPolygon = function(boundingBox) { + if (null == boundingBox) throw new Error("boundingBox cannot be null."); + var index = this.boundingBoxes.indexOf(boundingBox); + return -1 == index ? null : this.polygons[index]; + }; + SkeletonBounds.prototype.getWidth = function() { + return this.maxX - this.minX; + }; + SkeletonBounds.prototype.getHeight = function() { + return this.maxY - this.minY; + }; + return SkeletonBounds; + })(); + spine.SkeletonBounds = SkeletonBounds; + })(spine || (spine = {})); + var spine; + (function(spine) { + var SkeletonClipping = (function() { + function SkeletonClipping() { + this.triangulator = new spine.Triangulator(); + this.clippingPolygon = new Array(); + this.clipOutput = new Array(); + this.clippedVertices = new Array(); + this.clippedTriangles = new Array(); + this.scratch = new Array(); + } + SkeletonClipping.prototype.clipStart = function(slot, clip) { + if (null != this.clipAttachment) return 0; + this.clipAttachment = clip; + var n = clip.worldVerticesLength; + var vertices = spine.Utils.setArraySize(this.clippingPolygon, n); + clip.computeWorldVertices(slot, 0, n, vertices, 0, 2); + var clippingPolygon = this.clippingPolygon; + SkeletonClipping.makeClockwise(clippingPolygon); + var clippingPolygons = this.clippingPolygons = this.triangulator.decompose(clippingPolygon, this.triangulator.triangulate(clippingPolygon)); + for (var i = 0, n_1 = clippingPolygons.length; i < n_1; i++) { + var polygon = clippingPolygons[i]; + SkeletonClipping.makeClockwise(polygon); + polygon.push(polygon[0]); + polygon.push(polygon[1]); + } + return clippingPolygons.length; + }; + SkeletonClipping.prototype.clipEndWithSlot = function(slot) { + null != this.clipAttachment && this.clipAttachment.endSlot == slot.data && this.clipEnd(); + }; + SkeletonClipping.prototype.clipEnd = function() { + if (null == this.clipAttachment) return; + this.clipAttachment = null; + this.clippingPolygons = null; + this.clippedVertices.length = 0; + this.clippedTriangles.length = 0; + this.clippingPolygon.length = 0; + }; + SkeletonClipping.prototype.isClipping = function() { + return null != this.clipAttachment; + }; + SkeletonClipping.prototype.clipTriangles = function(vertices, verticesLength, triangles, trianglesLength, uvs, light, dark, twoColor, stride, originIndexOffset, originVertOffset, originUVSOffset) { + var clipOutput = this.clipOutput, clippedVertices = this.clippedVertices; + var clippedTriangles = this.clippedTriangles; + var polygons = this.clippingPolygons; + var polygonsCount = this.clippingPolygons.length; + var vertexSize = twoColor ? 12 : 8; + var index = 0; + originIndexOffset = originIndexOffset || 0; + originVertOffset = originVertOffset || 0; + originUVSOffset = originUVSOffset || 0; + clippedVertices.length = 0; + clippedTriangles.length = 0; + outer: for (var i = originIndexOffset, n = originIndexOffset + trianglesLength; i < n; i += 3) { + var vertexOffset = triangles[i] * stride; + var xyOffset = vertexOffset + originVertOffset; + var uvOffset = vertexOffset + originUVSOffset; + var x1 = vertices[xyOffset], y1 = vertices[xyOffset + 1]; + var u1 = uvs[uvOffset], v1 = uvs[uvOffset + 1]; + vertexOffset = triangles[i + 1] * stride; + xyOffset = vertexOffset + originVertOffset; + uvOffset = vertexOffset + originUVSOffset; + var x2 = vertices[xyOffset], y2 = vertices[xyOffset + 1]; + var u2 = uvs[uvOffset], v2 = uvs[uvOffset + 1]; + vertexOffset = triangles[i + 2] * stride; + xyOffset = vertexOffset + originVertOffset; + uvOffset = vertexOffset + originUVSOffset; + var x3 = vertices[xyOffset], y3 = vertices[xyOffset + 1]; + var u3 = uvs[uvOffset], v3 = uvs[uvOffset + 1]; + for (var p = 0; p < polygonsCount; p++) { + var s = clippedVertices.length; + if (!this.clip(x1, y1, x2, y2, x3, y3, polygons[p], clipOutput)) { + var clippedVerticesItems = spine.Utils.setArraySize(clippedVertices, s + 3 * vertexSize); + clippedVerticesItems[s] = x1; + clippedVerticesItems[s + 1] = y1; + clippedVerticesItems[s + 2] = light.r; + clippedVerticesItems[s + 3] = light.g; + clippedVerticesItems[s + 4] = light.b; + clippedVerticesItems[s + 5] = light.a; + if (twoColor) { + clippedVerticesItems[s + 6] = u1; + clippedVerticesItems[s + 7] = v1; + clippedVerticesItems[s + 8] = dark.r; + clippedVerticesItems[s + 9] = dark.g; + clippedVerticesItems[s + 10] = dark.b; + clippedVerticesItems[s + 11] = dark.a; + clippedVerticesItems[s + 12] = x2; + clippedVerticesItems[s + 13] = y2; + clippedVerticesItems[s + 14] = light.r; + clippedVerticesItems[s + 15] = light.g; + clippedVerticesItems[s + 16] = light.b; + clippedVerticesItems[s + 17] = light.a; + clippedVerticesItems[s + 18] = u2; + clippedVerticesItems[s + 19] = v2; + clippedVerticesItems[s + 20] = dark.r; + clippedVerticesItems[s + 21] = dark.g; + clippedVerticesItems[s + 22] = dark.b; + clippedVerticesItems[s + 23] = dark.a; + clippedVerticesItems[s + 24] = x3; + clippedVerticesItems[s + 25] = y3; + clippedVerticesItems[s + 26] = light.r; + clippedVerticesItems[s + 27] = light.g; + clippedVerticesItems[s + 28] = light.b; + clippedVerticesItems[s + 29] = light.a; + clippedVerticesItems[s + 30] = u3; + clippedVerticesItems[s + 31] = v3; + clippedVerticesItems[s + 32] = dark.r; + clippedVerticesItems[s + 33] = dark.g; + clippedVerticesItems[s + 34] = dark.b; + clippedVerticesItems[s + 35] = dark.a; + } else { + clippedVerticesItems[s + 6] = u1; + clippedVerticesItems[s + 7] = v1; + clippedVerticesItems[s + 8] = x2; + clippedVerticesItems[s + 9] = y2; + clippedVerticesItems[s + 10] = light.r; + clippedVerticesItems[s + 11] = light.g; + clippedVerticesItems[s + 12] = light.b; + clippedVerticesItems[s + 13] = light.a; + clippedVerticesItems[s + 14] = u2; + clippedVerticesItems[s + 15] = v2; + clippedVerticesItems[s + 16] = x3; + clippedVerticesItems[s + 17] = y3; + clippedVerticesItems[s + 18] = light.r; + clippedVerticesItems[s + 19] = light.g; + clippedVerticesItems[s + 20] = light.b; + clippedVerticesItems[s + 21] = light.a; + clippedVerticesItems[s + 22] = u3; + clippedVerticesItems[s + 23] = v3; + } + s = clippedTriangles.length; + var clippedTrianglesItems = spine.Utils.setArraySize(clippedTriangles, s + 3); + clippedTrianglesItems[s] = index; + clippedTrianglesItems[s + 1] = index + 1; + clippedTrianglesItems[s + 2] = index + 2; + index += 3; + continue outer; + } + var clipOutputLength = clipOutput.length; + if (0 == clipOutputLength) continue; + var d0 = y2 - y3, d1 = x3 - x2, d2 = x1 - x3, d4 = y3 - y1; + var d = 1 / (d0 * d2 + d1 * (y1 - y3)); + var clipOutputCount = clipOutputLength >> 1; + var clipOutputItems = this.clipOutput; + var clippedVerticesItems = spine.Utils.setArraySize(clippedVertices, s + clipOutputCount * vertexSize); + for (var ii = 0; ii < clipOutputLength; ii += 2) { + var x = clipOutputItems[ii], y = clipOutputItems[ii + 1]; + clippedVerticesItems[s] = x; + clippedVerticesItems[s + 1] = y; + clippedVerticesItems[s + 2] = light.r; + clippedVerticesItems[s + 3] = light.g; + clippedVerticesItems[s + 4] = light.b; + clippedVerticesItems[s + 5] = light.a; + var c0 = x - x3, c1 = y - y3; + var a = (d0 * c0 + d1 * c1) * d; + var b = (d4 * c0 + d2 * c1) * d; + var c = 1 - a - b; + clippedVerticesItems[s + 6] = u1 * a + u2 * b + u3 * c; + clippedVerticesItems[s + 7] = v1 * a + v2 * b + v3 * c; + if (twoColor) { + clippedVerticesItems[s + 8] = dark.r; + clippedVerticesItems[s + 9] = dark.g; + clippedVerticesItems[s + 10] = dark.b; + clippedVerticesItems[s + 11] = dark.a; + } + s += vertexSize; + } + s = clippedTriangles.length; + var clippedTrianglesItems = spine.Utils.setArraySize(clippedTriangles, s + 3 * (clipOutputCount - 2)); + clipOutputCount--; + for (var ii = 1; ii < clipOutputCount; ii++) { + clippedTrianglesItems[s] = index; + clippedTrianglesItems[s + 1] = index + ii; + clippedTrianglesItems[s + 2] = index + ii + 1; + s += 3; + } + index += clipOutputCount + 1; + } + } + }; + SkeletonClipping.prototype.clip = function(x1, y1, x2, y2, x3, y3, clippingArea, output) { + var originalOutput = output; + var clipped = false; + var input = null; + if (clippingArea.length % 4 >= 2) { + input = output; + output = this.scratch; + } else input = this.scratch; + input.length = 0; + input.push(x1); + input.push(y1); + input.push(x2); + input.push(y2); + input.push(x3); + input.push(y3); + input.push(x1); + input.push(y1); + output.length = 0; + var clippingVertices = clippingArea; + var clippingVerticesLast = clippingArea.length - 4; + for (var i = 0; ;i += 2) { + var edgeX = clippingVertices[i], edgeY = clippingVertices[i + 1]; + var edgeX2 = clippingVertices[i + 2], edgeY2 = clippingVertices[i + 3]; + var deltaX = edgeX - edgeX2, deltaY = edgeY - edgeY2; + var inputVertices = input; + var inputVerticesLength = input.length - 2, outputStart = output.length; + for (var ii = 0; ii < inputVerticesLength; ii += 2) { + var inputX = inputVertices[ii], inputY = inputVertices[ii + 1]; + var inputX2 = inputVertices[ii + 2], inputY2 = inputVertices[ii + 3]; + var side2 = deltaX * (inputY2 - edgeY2) - deltaY * (inputX2 - edgeX2) > 0; + if (deltaX * (inputY - edgeY2) - deltaY * (inputX - edgeX2) > 0) { + if (side2) { + output.push(inputX2); + output.push(inputY2); + continue; + } + var c0 = inputY2 - inputY, c2 = inputX2 - inputX; + var s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY); + if (Math.abs(s) > 1e-6) { + var ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s; + output.push(edgeX + (edgeX2 - edgeX) * ua); + output.push(edgeY + (edgeY2 - edgeY) * ua); + } else { + output.push(edgeX); + output.push(edgeY); + } + } else if (side2) { + var c0 = inputY2 - inputY, c2 = inputX2 - inputX; + var s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY); + if (Math.abs(s) > 1e-6) { + var ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s; + output.push(edgeX + (edgeX2 - edgeX) * ua); + output.push(edgeY + (edgeY2 - edgeY) * ua); + } else { + output.push(edgeX); + output.push(edgeY); + } + output.push(inputX2); + output.push(inputY2); + } + clipped = true; + } + if (outputStart == output.length) { + originalOutput.length = 0; + return true; + } + output.push(output[0]); + output.push(output[1]); + if (i == clippingVerticesLast) break; + var temp = output; + output = input; + output.length = 0; + input = temp; + } + if (originalOutput != output) { + originalOutput.length = 0; + for (var i = 0, n = output.length - 2; i < n; i++) originalOutput[i] = output[i]; + } else originalOutput.length = originalOutput.length - 2; + return clipped; + }; + SkeletonClipping.makeClockwise = function(polygon) { + var vertices = polygon; + var verticeslength = polygon.length; + var area = vertices[verticeslength - 2] * vertices[1] - vertices[0] * vertices[verticeslength - 1], p1x = 0, p1y = 0, p2x = 0, p2y = 0; + for (var i = 0, n = verticeslength - 3; i < n; i += 2) { + p1x = vertices[i]; + p1y = vertices[i + 1]; + p2x = vertices[i + 2]; + p2y = vertices[i + 3]; + area += p1x * p2y - p2x * p1y; + } + if (area < 0) return; + for (var i = 0, lastX = verticeslength - 2, n = verticeslength >> 1; i < n; i += 2) { + var x = vertices[i], y = vertices[i + 1]; + var other = lastX - i; + vertices[i] = vertices[other]; + vertices[i + 1] = vertices[other + 1]; + vertices[other] = x; + vertices[other + 1] = y; + } + }; + return SkeletonClipping; + })(); + spine.SkeletonClipping = SkeletonClipping; + })(spine || (spine = {})); + var spine; + (function(spine) { + var SkeletonData = (function() { + function SkeletonData() { + this.bones = new Array(); + this.slots = new Array(); + this.skins = new Array(); + this.events = new Array(); + this.animations = new Array(); + this.ikConstraints = new Array(); + this.transformConstraints = new Array(); + this.pathConstraints = new Array(); + this.fps = 0; + } + SkeletonData.prototype.findBone = function(boneName) { + if (null == boneName) throw new Error("boneName cannot be null."); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (bone.name == boneName) return bone; + } + return null; + }; + SkeletonData.prototype.findBoneIndex = function(boneName) { + if (null == boneName) throw new Error("boneName cannot be null."); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) if (bones[i].name == boneName) return i; + return -1; + }; + SkeletonData.prototype.findSlot = function(slotName) { + if (null == slotName) throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + if (slot.name == slotName) return slot; + } + return null; + }; + SkeletonData.prototype.findSlotIndex = function(slotName) { + if (null == slotName) throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) if (slots[i].name == slotName) return i; + return -1; + }; + SkeletonData.prototype.findSkin = function(skinName) { + if (null == skinName) throw new Error("skinName cannot be null."); + var skins = this.skins; + for (var i = 0, n = skins.length; i < n; i++) { + var skin = skins[i]; + if (skin.name == skinName) return skin; + } + return null; + }; + SkeletonData.prototype.findEvent = function(eventDataName) { + if (null == eventDataName) throw new Error("eventDataName cannot be null."); + var events = this.events; + for (var i = 0, n = events.length; i < n; i++) { + var event_5 = events[i]; + if (event_5.name == eventDataName) return event_5; + } + return null; + }; + SkeletonData.prototype.findAnimation = function(animationName) { + if (null == animationName) throw new Error("animationName cannot be null."); + var animations = this.animations; + for (var i = 0, n = animations.length; i < n; i++) { + var animation = animations[i]; + if (animation.name == animationName) return animation; + } + return null; + }; + SkeletonData.prototype.findIkConstraint = function(constraintName) { + if (null == constraintName) throw new Error("constraintName cannot be null."); + var ikConstraints = this.ikConstraints; + for (var i = 0, n = ikConstraints.length; i < n; i++) { + var constraint = ikConstraints[i]; + if (constraint.name == constraintName) return constraint; + } + return null; + }; + SkeletonData.prototype.findTransformConstraint = function(constraintName) { + if (null == constraintName) throw new Error("constraintName cannot be null."); + var transformConstraints = this.transformConstraints; + for (var i = 0, n = transformConstraints.length; i < n; i++) { + var constraint = transformConstraints[i]; + if (constraint.name == constraintName) return constraint; + } + return null; + }; + SkeletonData.prototype.findPathConstraint = function(constraintName) { + if (null == constraintName) throw new Error("constraintName cannot be null."); + var pathConstraints = this.pathConstraints; + for (var i = 0, n = pathConstraints.length; i < n; i++) { + var constraint = pathConstraints[i]; + if (constraint.name == constraintName) return constraint; + } + return null; + }; + SkeletonData.prototype.findPathConstraintIndex = function(pathConstraintName) { + if (null == pathConstraintName) throw new Error("pathConstraintName cannot be null."); + var pathConstraints = this.pathConstraints; + for (var i = 0, n = pathConstraints.length; i < n; i++) if (pathConstraints[i].name == pathConstraintName) return i; + return -1; + }; + return SkeletonData; + })(); + spine.SkeletonData = SkeletonData; + })(spine || (spine = {})); + var spine; + (function(spine) { + var SkeletonJson = (function() { + function SkeletonJson(attachmentLoader) { + this.scale = 1; + this.linkedMeshes = new Array(); + this.attachmentLoader = attachmentLoader; + } + SkeletonJson.prototype.readSkeletonData = function(json) { + var scale = this.scale; + var skeletonData = new spine.SkeletonData(); + var root = "string" === typeof json ? JSON.parse(json) : json; + var skeletonMap = root.skeleton; + if (null != skeletonMap) { + skeletonData.hash = skeletonMap.hash; + skeletonData.version = skeletonMap.spine; + skeletonData.x = skeletonMap.x; + skeletonData.y = skeletonMap.y; + skeletonData.width = skeletonMap.width; + skeletonData.height = skeletonMap.height; + skeletonData.fps = skeletonMap.fps; + skeletonData.imagesPath = skeletonMap.images; + } + if (root.bones) for (var i = 0; i < root.bones.length; i++) { + var boneMap = root.bones[i]; + var parent_5 = null; + var parentName = this.getValue(boneMap, "parent", null); + if (null != parentName) { + parent_5 = skeletonData.findBone(parentName); + if (null == parent_5) throw new Error("Parent bone not found: " + parentName); + } + var data = new spine.BoneData(skeletonData.bones.length, boneMap.name, parent_5); + data.length = this.getValue(boneMap, "length", 0) * scale; + data.x = this.getValue(boneMap, "x", 0) * scale; + data.y = this.getValue(boneMap, "y", 0) * scale; + data.rotation = this.getValue(boneMap, "rotation", 0); + data.scaleX = this.getValue(boneMap, "scaleX", 1); + data.scaleY = this.getValue(boneMap, "scaleY", 1); + data.shearX = this.getValue(boneMap, "shearX", 0); + data.shearY = this.getValue(boneMap, "shearY", 0); + data.transformMode = SkeletonJson.transformModeFromString(this.getValue(boneMap, "transform", "normal")); + data.skinRequired = this.getValue(boneMap, "skin", false); + skeletonData.bones.push(data); + } + if (root.slots) for (var i = 0; i < root.slots.length; i++) { + var slotMap = root.slots[i]; + var slotName = slotMap.name; + var boneName = slotMap.bone; + var boneData = skeletonData.findBone(boneName); + if (null == boneData) throw new Error("Slot bone not found: " + boneName); + var data = new spine.SlotData(skeletonData.slots.length, slotName, boneData); + var color = this.getValue(slotMap, "color", null); + null != color && data.color.setFromString(color); + var dark = this.getValue(slotMap, "dark", null); + if (null != dark) { + data.darkColor = new spine.Color(1, 1, 1, 1); + data.darkColor.setFromString(dark); + } + data.attachmentName = this.getValue(slotMap, "attachment", null); + data.blendMode = SkeletonJson.blendModeFromString(this.getValue(slotMap, "blend", "normal")); + skeletonData.slots.push(data); + } + if (root.ik) for (var i = 0; i < root.ik.length; i++) { + var constraintMap = root.ik[i]; + var data = new spine.IkConstraintData(constraintMap.name); + data.order = this.getValue(constraintMap, "order", 0); + data.skinRequired = this.getValue(constraintMap, "skin", false); + for (var j = 0; j < constraintMap.bones.length; j++) { + var boneName = constraintMap.bones[j]; + var bone = skeletonData.findBone(boneName); + if (null == bone) throw new Error("IK bone not found: " + boneName); + data.bones.push(bone); + } + var targetName = constraintMap.target; + data.target = skeletonData.findBone(targetName); + if (null == data.target) throw new Error("IK target bone not found: " + targetName); + data.mix = this.getValue(constraintMap, "mix", 1); + data.softness = this.getValue(constraintMap, "softness", 0) * scale; + data.bendDirection = this.getValue(constraintMap, "bendPositive", true) ? 1 : -1; + data.compress = this.getValue(constraintMap, "compress", false); + data.stretch = this.getValue(constraintMap, "stretch", false); + data.uniform = this.getValue(constraintMap, "uniform", false); + skeletonData.ikConstraints.push(data); + } + if (root.transform) for (var i = 0; i < root.transform.length; i++) { + var constraintMap = root.transform[i]; + var data = new spine.TransformConstraintData(constraintMap.name); + data.order = this.getValue(constraintMap, "order", 0); + data.skinRequired = this.getValue(constraintMap, "skin", false); + for (var j = 0; j < constraintMap.bones.length; j++) { + var boneName = constraintMap.bones[j]; + var bone = skeletonData.findBone(boneName); + if (null == bone) throw new Error("Transform constraint bone not found: " + boneName); + data.bones.push(bone); + } + var targetName = constraintMap.target; + data.target = skeletonData.findBone(targetName); + if (null == data.target) throw new Error("Transform constraint target bone not found: " + targetName); + data.local = this.getValue(constraintMap, "local", false); + data.relative = this.getValue(constraintMap, "relative", false); + data.offsetRotation = this.getValue(constraintMap, "rotation", 0); + data.offsetX = this.getValue(constraintMap, "x", 0) * scale; + data.offsetY = this.getValue(constraintMap, "y", 0) * scale; + data.offsetScaleX = this.getValue(constraintMap, "scaleX", 0); + data.offsetScaleY = this.getValue(constraintMap, "scaleY", 0); + data.offsetShearY = this.getValue(constraintMap, "shearY", 0); + data.rotateMix = this.getValue(constraintMap, "rotateMix", 1); + data.translateMix = this.getValue(constraintMap, "translateMix", 1); + data.scaleMix = this.getValue(constraintMap, "scaleMix", 1); + data.shearMix = this.getValue(constraintMap, "shearMix", 1); + skeletonData.transformConstraints.push(data); + } + if (root.path) for (var i = 0; i < root.path.length; i++) { + var constraintMap = root.path[i]; + var data = new spine.PathConstraintData(constraintMap.name); + data.order = this.getValue(constraintMap, "order", 0); + data.skinRequired = this.getValue(constraintMap, "skin", false); + for (var j = 0; j < constraintMap.bones.length; j++) { + var boneName = constraintMap.bones[j]; + var bone = skeletonData.findBone(boneName); + if (null == bone) throw new Error("Transform constraint bone not found: " + boneName); + data.bones.push(bone); + } + var targetName = constraintMap.target; + data.target = skeletonData.findSlot(targetName); + if (null == data.target) throw new Error("Path target slot not found: " + targetName); + data.positionMode = SkeletonJson.positionModeFromString(this.getValue(constraintMap, "positionMode", "percent")); + data.spacingMode = SkeletonJson.spacingModeFromString(this.getValue(constraintMap, "spacingMode", "length")); + data.rotateMode = SkeletonJson.rotateModeFromString(this.getValue(constraintMap, "rotateMode", "tangent")); + data.offsetRotation = this.getValue(constraintMap, "rotation", 0); + data.position = this.getValue(constraintMap, "position", 0); + data.positionMode == spine.PositionMode.Fixed && (data.position *= scale); + data.spacing = this.getValue(constraintMap, "spacing", 0); + data.spacingMode != spine.SpacingMode.Length && data.spacingMode != spine.SpacingMode.Fixed || (data.spacing *= scale); + data.rotateMix = this.getValue(constraintMap, "rotateMix", 1); + data.translateMix = this.getValue(constraintMap, "translateMix", 1); + skeletonData.pathConstraints.push(data); + } + if (root.skins) { + var skins = root.skins; + var isArray = skins instanceof Array; + if (!isArray) { + var skinArr = []; + for (var skinName in skins) skinArr.push({ + name: skinName, + attachments: skins[skinName] + }); + skins = skinArr; + } + for (var i = 0; i < skins.length; i++) { + var skinMap = skins[i]; + var skin = new spine.Skin(skinMap.name); + if (skinMap.bones) for (var ii = 0; ii < skinMap.bones.length; ii++) { + var bone = skeletonData.findBone(skinMap.bones[ii]); + if (null == bone) throw new Error("Skin bone not found: " + skinMap.bones[i]); + skin.bones.push(bone); + } + if (skinMap.ik) for (var ii = 0; ii < skinMap.ik.length; ii++) { + var constraint = skeletonData.findIkConstraint(skinMap.ik[ii]); + if (null == constraint) throw new Error("Skin IK constraint not found: " + skinMap.ik[i]); + skin.constraints.push(constraint); + } + if (skinMap.transform) for (var ii = 0; ii < skinMap.transform.length; ii++) { + var constraint = skeletonData.findTransformConstraint(skinMap.transform[ii]); + if (null == constraint) throw new Error("Skin transform constraint not found: " + skinMap.transform[i]); + skin.constraints.push(constraint); + } + if (skinMap.path) for (var ii = 0; ii < skinMap.path.length; ii++) { + var constraint = skeletonData.findPathConstraint(skinMap.path[ii]); + if (null == constraint) throw new Error("Skin path constraint not found: " + skinMap.path[i]); + skin.constraints.push(constraint); + } + for (var slotName in skinMap.attachments) { + var slot = skeletonData.findSlot(slotName); + if (null == slot) throw new Error("Slot not found: " + slotName); + var slotMap = skinMap.attachments[slotName]; + for (var entryName in slotMap) { + var attachment = this.readAttachment(slotMap[entryName], skin, slot.index, entryName, skeletonData); + null != attachment && skin.setAttachment(slot.index, entryName, attachment); + } + } + skeletonData.skins.push(skin); + "default" == skin.name && (skeletonData.defaultSkin = skin); + } + } + for (var i = 0, n = this.linkedMeshes.length; i < n; i++) { + var linkedMesh = this.linkedMeshes[i]; + var skin = null == linkedMesh.skin ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin); + if (null == skin) throw new Error("Skin not found: " + linkedMesh.skin); + var parent_6 = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent); + if (null == parent_6) throw new Error("Parent mesh not found: " + linkedMesh.parent); + linkedMesh.mesh.deformAttachment = linkedMesh.inheritDeform ? parent_6 : linkedMesh.mesh; + linkedMesh.mesh.setParentMesh(parent_6); + linkedMesh.mesh.updateUVs(); + } + this.linkedMeshes.length = 0; + if (root.events) for (var eventName in root.events) { + var eventMap = root.events[eventName]; + var data = new spine.EventData(eventName); + data.intValue = this.getValue(eventMap, "int", 0); + data.floatValue = this.getValue(eventMap, "float", 0); + data.stringValue = this.getValue(eventMap, "string", ""); + data.audioPath = this.getValue(eventMap, "audio", null); + if (null != data.audioPath) { + data.volume = this.getValue(eventMap, "volume", 1); + data.balance = this.getValue(eventMap, "balance", 0); + } + skeletonData.events.push(data); + } + if (root.animations) for (var animationName in root.animations) { + var animationMap = root.animations[animationName]; + this.readAnimation(animationMap, animationName, skeletonData); + } + return skeletonData; + }; + SkeletonJson.prototype.readAttachment = function(map, skin, slotIndex, name, skeletonData) { + var scale = this.scale; + name = this.getValue(map, "name", name); + var type = this.getValue(map, "type", "region"); + switch (type) { + case "region": + var path = this.getValue(map, "path", name); + var region = this.attachmentLoader.newRegionAttachment(skin, name, path); + if (null == region) return null; + region.path = path; + region.x = this.getValue(map, "x", 0) * scale; + region.y = this.getValue(map, "y", 0) * scale; + region.scaleX = this.getValue(map, "scaleX", 1); + region.scaleY = this.getValue(map, "scaleY", 1); + region.rotation = this.getValue(map, "rotation", 0); + region.width = map.width * scale; + region.height = map.height * scale; + var color = this.getValue(map, "color", null); + null != color && region.color.setFromString(color); + region.updateOffset(); + return region; + + case "boundingbox": + var box = this.attachmentLoader.newBoundingBoxAttachment(skin, name); + if (null == box) return null; + this.readVertices(map, box, map.vertexCount << 1); + var color = this.getValue(map, "color", null); + null != color && box.color.setFromString(color); + return box; + + case "mesh": + case "linkedmesh": + var path = this.getValue(map, "path", name); + var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path); + if (null == mesh) return null; + mesh.path = path; + var color = this.getValue(map, "color", null); + null != color && mesh.color.setFromString(color); + mesh.width = this.getValue(map, "width", 0) * scale; + mesh.height = this.getValue(map, "height", 0) * scale; + var parent_7 = this.getValue(map, "parent", null); + if (null != parent_7) { + this.linkedMeshes.push(new LinkedMesh(mesh, this.getValue(map, "skin", null), slotIndex, parent_7, this.getValue(map, "deform", true))); + return mesh; + } + var uvs = map.uvs; + this.readVertices(map, mesh, uvs.length); + mesh.triangles = map.triangles; + mesh.regionUVs = uvs; + mesh.updateUVs(); + mesh.edges = this.getValue(map, "edges", null); + mesh.hullLength = 2 * this.getValue(map, "hull", 0); + return mesh; + + case "path": + var path = this.attachmentLoader.newPathAttachment(skin, name); + if (null == path) return null; + path.closed = this.getValue(map, "closed", false); + path.constantSpeed = this.getValue(map, "constantSpeed", true); + var vertexCount = map.vertexCount; + this.readVertices(map, path, vertexCount << 1); + var lengths = spine.Utils.newArray(vertexCount / 3, 0); + for (var i = 0; i < map.lengths.length; i++) lengths[i] = map.lengths[i] * scale; + path.lengths = lengths; + var color = this.getValue(map, "color", null); + null != color && path.color.setFromString(color); + return path; + + case "point": + var point = this.attachmentLoader.newPointAttachment(skin, name); + if (null == point) return null; + point.x = this.getValue(map, "x", 0) * scale; + point.y = this.getValue(map, "y", 0) * scale; + point.rotation = this.getValue(map, "rotation", 0); + var color = this.getValue(map, "color", null); + null != color && point.color.setFromString(color); + return point; + + case "clipping": + var clip = this.attachmentLoader.newClippingAttachment(skin, name); + if (null == clip) return null; + var end = this.getValue(map, "end", null); + if (null != end) { + var slot = skeletonData.findSlot(end); + if (null == slot) throw new Error("Clipping end slot not found: " + end); + clip.endSlot = slot; + } + var vertexCount = map.vertexCount; + this.readVertices(map, clip, vertexCount << 1); + var color = this.getValue(map, "color", null); + null != color && clip.color.setFromString(color); + return clip; + } + return null; + }; + SkeletonJson.prototype.readVertices = function(map, attachment, verticesLength) { + var scale = this.scale; + attachment.worldVerticesLength = verticesLength; + var vertices = map.vertices; + if (verticesLength == vertices.length) { + var scaledVertices = spine.Utils.toFloatArray(vertices); + if (1 != scale) for (var i = 0, n = vertices.length; i < n; i++) scaledVertices[i] *= scale; + attachment.vertices = scaledVertices; + return; + } + var weights = new Array(); + var bones = new Array(); + for (var i = 0, n = vertices.length; i < n; ) { + var boneCount = vertices[i++]; + bones.push(boneCount); + for (var nn = i + 4 * boneCount; i < nn; i += 4) { + bones.push(vertices[i]); + weights.push(vertices[i + 1] * scale); + weights.push(vertices[i + 2] * scale); + weights.push(vertices[i + 3]); + } + } + attachment.bones = bones; + attachment.vertices = spine.Utils.toFloatArray(weights); + }; + SkeletonJson.prototype.readAnimation = function(map, name, skeletonData) { + var scale = this.scale; + var timelines = new Array(); + var duration = 0; + if (map.slots) for (var slotName in map.slots) { + var slotMap = map.slots[slotName]; + var slotIndex = skeletonData.findSlotIndex(slotName); + if (-1 == slotIndex) throw new Error("Slot not found: " + slotName); + for (var timelineName in slotMap) { + var timelineMap = slotMap[timelineName]; + if ("attachment" == timelineName) { + var timeline = new spine.AttachmentTimeline(timelineMap.length); + timeline.slotIndex = slotIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + timeline.setFrame(frameIndex++, this.getValue(valueMap, "time", 0), valueMap.name); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } else if ("color" == timelineName) { + var timeline = new spine.ColorTimeline(timelineMap.length); + timeline.slotIndex = slotIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + var color = new spine.Color(); + color.setFromString(valueMap.color); + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), color.r, color.g, color.b, color.a); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.ColorTimeline.ENTRIES]); + } else { + if ("twoColor" != timelineName) throw new Error("Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")"); + var timeline = new spine.TwoColorTimeline(timelineMap.length); + timeline.slotIndex = slotIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + var light = new spine.Color(); + var dark = new spine.Color(); + light.setFromString(valueMap.light); + dark.setFromString(valueMap.dark); + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), light.r, light.g, light.b, light.a, dark.r, dark.g, dark.b); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.TwoColorTimeline.ENTRIES]); + } + } + } + if (map.bones) for (var boneName in map.bones) { + var boneMap = map.bones[boneName]; + var boneIndex = skeletonData.findBoneIndex(boneName); + if (-1 == boneIndex) throw new Error("Bone not found: " + boneName); + for (var timelineName in boneMap) { + var timelineMap = boneMap[timelineName]; + if ("rotate" === timelineName) { + var timeline = new spine.RotateTimeline(timelineMap.length); + timeline.boneIndex = boneIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "angle", 0)); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.RotateTimeline.ENTRIES]); + } else { + if ("translate" !== timelineName && "scale" !== timelineName && "shear" !== timelineName) throw new Error("Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")"); + var timeline = null; + var timelineScale = 1, defaultValue = 0; + if ("scale" === timelineName) { + timeline = new spine.ScaleTimeline(timelineMap.length); + defaultValue = 1; + } else if ("shear" === timelineName) timeline = new spine.ShearTimeline(timelineMap.length); else { + timeline = new spine.TranslateTimeline(timelineMap.length); + timelineScale = scale; + } + timeline.boneIndex = boneIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + var x = this.getValue(valueMap, "x", defaultValue), y = this.getValue(valueMap, "y", defaultValue); + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), x * timelineScale, y * timelineScale); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.TranslateTimeline.ENTRIES]); + } + } + } + if (map.ik) for (var constraintName in map.ik) { + var constraintMap = map.ik[constraintName]; + var constraint = skeletonData.findIkConstraint(constraintName); + var timeline = new spine.IkConstraintTimeline(constraintMap.length); + timeline.ikConstraintIndex = skeletonData.ikConstraints.indexOf(constraint); + var frameIndex = 0; + for (var i = 0; i < constraintMap.length; i++) { + var valueMap = constraintMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "mix", 1), this.getValue(valueMap, "softness", 0) * scale, this.getValue(valueMap, "bendPositive", true) ? 1 : -1, this.getValue(valueMap, "compress", false), this.getValue(valueMap, "stretch", false)); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.IkConstraintTimeline.ENTRIES]); + } + if (map.transform) for (var constraintName in map.transform) { + var constraintMap = map.transform[constraintName]; + var constraint = skeletonData.findTransformConstraint(constraintName); + var timeline = new spine.TransformConstraintTimeline(constraintMap.length); + timeline.transformConstraintIndex = skeletonData.transformConstraints.indexOf(constraint); + var frameIndex = 0; + for (var i = 0; i < constraintMap.length; i++) { + var valueMap = constraintMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "rotateMix", 1), this.getValue(valueMap, "translateMix", 1), this.getValue(valueMap, "scaleMix", 1), this.getValue(valueMap, "shearMix", 1)); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.TransformConstraintTimeline.ENTRIES]); + } + var mapPath = map.path || map.paths; + if (mapPath) for (var constraintName in mapPath) { + var constraintMap = mapPath[constraintName]; + var index = skeletonData.findPathConstraintIndex(constraintName); + if (-1 == index) throw new Error("Path constraint not found: " + constraintName); + var data = skeletonData.pathConstraints[index]; + for (var timelineName in constraintMap) { + var timelineMap = constraintMap[timelineName]; + if ("position" === timelineName || "spacing" === timelineName) { + var timeline = null; + var timelineScale = 1; + if ("spacing" === timelineName) { + timeline = new spine.PathConstraintSpacingTimeline(timelineMap.length); + data.spacingMode != spine.SpacingMode.Length && data.spacingMode != spine.SpacingMode.Fixed || (timelineScale = scale); + } else { + timeline = new spine.PathConstraintPositionTimeline(timelineMap.length); + data.positionMode == spine.PositionMode.Fixed && (timelineScale = scale); + } + timeline.pathConstraintIndex = index; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, timelineName, 0) * timelineScale); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.PathConstraintPositionTimeline.ENTRIES]); + } else if ("mix" === timelineName) { + var timeline = new spine.PathConstraintMixTimeline(timelineMap.length); + timeline.pathConstraintIndex = index; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "rotateMix", 1), this.getValue(valueMap, "translateMix", 1)); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.PathConstraintMixTimeline.ENTRIES]); + } + } + } + if (map.deform) for (var deformName in map.deform) { + var deformMap = map.deform[deformName]; + var skin = skeletonData.findSkin(deformName); + if (null == skin) throw new Error("Skin not found: " + deformName); + for (var slotName in deformMap) { + var slotMap = deformMap[slotName]; + var slotIndex = skeletonData.findSlotIndex(slotName); + if (-1 == slotIndex) throw new Error("Slot not found: " + slotMap.name); + for (var timelineName in slotMap) { + var timelineMap = slotMap[timelineName]; + var attachment = skin.getAttachment(slotIndex, timelineName); + if (null == attachment) continue; + var weighted = null != attachment.bones; + var vertices = attachment.vertices; + var deformLength = weighted ? vertices.length / 3 * 2 : vertices.length; + var timeline = new spine.DeformTimeline(timelineMap.length); + timeline.slotIndex = slotIndex; + timeline.attachment = attachment; + var frameIndex = 0; + for (var j = 0; j < timelineMap.length; j++) { + var valueMap = timelineMap[j]; + var deform = void 0; + var verticesValue = this.getValue(valueMap, "vertices", null); + if (null == verticesValue) deform = weighted ? spine.Utils.newFloatArray(deformLength) : vertices; else { + deform = spine.Utils.newFloatArray(deformLength); + var start = this.getValue(valueMap, "offset", 0); + spine.Utils.arrayCopy(verticesValue, 0, deform, start, verticesValue.length); + if (1 != scale) for (var i = start, n = i + verticesValue.length; i < n; i++) deform[i] *= scale; + if (!weighted) for (var i = 0; i < deformLength; i++) deform[i] += vertices[i]; + } + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), deform); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } + } + } + var drawOrderNode = map.drawOrder; + null == drawOrderNode && (drawOrderNode = map.draworder); + if (null != drawOrderNode) { + var timeline = new spine.DrawOrderTimeline(drawOrderNode.length); + var slotCount = skeletonData.slots.length; + var frameIndex = 0; + for (var j = 0; j < drawOrderNode.length; j++) { + var drawOrderMap = drawOrderNode[j]; + var drawOrder = null; + var offsets = this.getValue(drawOrderMap, "offsets", null); + if (null != offsets) { + drawOrder = spine.Utils.newArray(slotCount, -1); + var unchanged = spine.Utils.newArray(slotCount - offsets.length, 0); + var originalIndex = 0, unchangedIndex = 0; + for (var i = 0; i < offsets.length; i++) { + var offsetMap = offsets[i]; + var slotIndex = skeletonData.findSlotIndex(offsetMap.slot); + if (-1 == slotIndex) throw new Error("Slot not found: " + offsetMap.slot); + while (originalIndex != slotIndex) unchanged[unchangedIndex++] = originalIndex++; + drawOrder[originalIndex + offsetMap.offset] = originalIndex++; + } + while (originalIndex < slotCount) unchanged[unchangedIndex++] = originalIndex++; + for (var i = slotCount - 1; i >= 0; i--) -1 == drawOrder[i] && (drawOrder[i] = unchanged[--unchangedIndex]); + } + timeline.setFrame(frameIndex++, this.getValue(drawOrderMap, "time", 0), drawOrder); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } + if (map.events) { + var timeline = new spine.EventTimeline(map.events.length); + var frameIndex = 0; + for (var i = 0; i < map.events.length; i++) { + var eventMap = map.events[i]; + var eventData = skeletonData.findEvent(eventMap.name); + if (null == eventData) throw new Error("Event not found: " + eventMap.name); + var event_6 = new spine.Event(spine.Utils.toSinglePrecision(this.getValue(eventMap, "time", 0)), eventData); + event_6.intValue = this.getValue(eventMap, "int", eventData.intValue); + event_6.floatValue = this.getValue(eventMap, "float", eventData.floatValue); + event_6.stringValue = this.getValue(eventMap, "string", eventData.stringValue); + if (null != event_6.data.audioPath) { + event_6.volume = this.getValue(eventMap, "volume", 1); + event_6.balance = this.getValue(eventMap, "balance", 0); + } + timeline.setFrame(frameIndex++, event_6); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } + if (isNaN(duration)) throw new Error("Error while parsing animation, duration is NaN"); + skeletonData.animations.push(new spine.Animation(name, timelines, duration)); + }; + SkeletonJson.prototype.readCurve = function(map, timeline, frameIndex) { + var curve = map.curve; + if (!curve) return; + "stepped" == curve ? timeline.setStepped(frameIndex) : "[object Array]" === Object.prototype.toString.call(curve) ? timeline.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]) : timeline.setCurve(frameIndex, curve, this.getValue(map, "c2", 0), this.getValue(map, "c3", 1), this.getValue(map, "c4", 1)); + }; + SkeletonJson.prototype.getValue = function(map, prop, defaultValue) { + return void 0 !== map[prop] ? map[prop] : defaultValue; + }; + SkeletonJson.blendModeFromString = function(str) { + str = str.toLowerCase(); + if ("normal" == str) return spine.BlendMode.Normal; + if ("additive" == str) return spine.BlendMode.Additive; + if ("multiply" == str) return spine.BlendMode.Multiply; + if ("screen" == str) return spine.BlendMode.Screen; + throw new Error("Unknown blend mode: " + str); + }; + SkeletonJson.positionModeFromString = function(str) { + str = str.toLowerCase(); + if ("fixed" == str) return spine.PositionMode.Fixed; + if ("percent" == str) return spine.PositionMode.Percent; + throw new Error("Unknown position mode: " + str); + }; + SkeletonJson.spacingModeFromString = function(str) { + str = str.toLowerCase(); + if ("length" == str) return spine.SpacingMode.Length; + if ("fixed" == str) return spine.SpacingMode.Fixed; + if ("percent" == str) return spine.SpacingMode.Percent; + throw new Error("Unknown position mode: " + str); + }; + SkeletonJson.rotateModeFromString = function(str) { + str = str.toLowerCase(); + if ("tangent" == str) return spine.RotateMode.Tangent; + if ("chain" == str) return spine.RotateMode.Chain; + if ("chainscale" == str) return spine.RotateMode.ChainScale; + throw new Error("Unknown rotate mode: " + str); + }; + SkeletonJson.transformModeFromString = function(str) { + str = str.toLowerCase(); + if ("normal" == str) return spine.TransformMode.Normal; + if ("onlytranslation" == str) return spine.TransformMode.OnlyTranslation; + if ("norotationorreflection" == str) return spine.TransformMode.NoRotationOrReflection; + if ("noscale" == str) return spine.TransformMode.NoScale; + if ("noscaleorreflection" == str) return spine.TransformMode.NoScaleOrReflection; + throw new Error("Unknown transform mode: " + str); + }; + return SkeletonJson; + })(); + spine.SkeletonJson = SkeletonJson; + var LinkedMesh = (function() { + function LinkedMesh(mesh, skin, slotIndex, parent, inheritDeform) { + this.mesh = mesh; + this.skin = skin; + this.slotIndex = slotIndex; + this.parent = parent; + this.inheritDeform = inheritDeform; + } + return LinkedMesh; + })(); + })(spine || (spine = {})); + var spine; + (function(spine) { + var SkinEntry = (function() { + function SkinEntry(slotIndex, name, attachment) { + this.slotIndex = slotIndex; + this.name = name; + this.attachment = attachment; + } + return SkinEntry; + })(); + spine.SkinEntry = SkinEntry; + var Skin = (function() { + function Skin(name) { + this.attachments = new Array(); + this.bones = Array(); + this.constraints = new Array(); + if (null == name) throw new Error("name cannot be null."); + this.name = name; + } + Skin.prototype.setAttachment = function(slotIndex, name, attachment) { + if (null == attachment) throw new Error("attachment cannot be null."); + var attachments = this.attachments; + slotIndex >= attachments.length && (attachments.length = slotIndex + 1); + attachments[slotIndex] || (attachments[slotIndex] = {}); + attachments[slotIndex][name] = attachment; + }; + Skin.prototype.addSkin = function(skin) { + for (var i = 0; i < skin.bones.length; i++) { + var bone = skin.bones[i]; + var contained = false; + for (var j = 0; j < this.bones.length; j++) if (this.bones[j] == bone) { + contained = true; + break; + } + contained || this.bones.push(bone); + } + for (var i = 0; i < skin.constraints.length; i++) { + var constraint = skin.constraints[i]; + var contained = false; + for (var j = 0; j < this.constraints.length; j++) if (this.constraints[j] == constraint) { + contained = true; + break; + } + contained || this.constraints.push(constraint); + } + var attachments = skin.getAttachments(); + for (var i = 0; i < attachments.length; i++) { + var attachment = attachments[i]; + this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment); + } + }; + Skin.prototype.copySkin = function(skin) { + for (var i = 0; i < skin.bones.length; i++) { + var bone = skin.bones[i]; + var contained = false; + for (var j = 0; j < this.bones.length; j++) if (this.bones[j] == bone) { + contained = true; + break; + } + contained || this.bones.push(bone); + } + for (var i = 0; i < skin.constraints.length; i++) { + var constraint = skin.constraints[i]; + var contained = false; + for (var j = 0; j < this.constraints.length; j++) if (this.constraints[j] == constraint) { + contained = true; + break; + } + contained || this.constraints.push(constraint); + } + var attachments = skin.getAttachments(); + for (var i = 0; i < attachments.length; i++) { + var attachment = attachments[i]; + if (null == attachment.attachment) continue; + if (attachment.attachment instanceof spine.MeshAttachment) { + attachment.attachment = attachment.attachment.newLinkedMesh(); + this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment); + } else { + attachment.attachment = attachment.attachment.copy(); + this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment); + } + } + }; + Skin.prototype.getAttachment = function(slotIndex, name) { + var dictionary = this.attachments[slotIndex]; + return dictionary ? dictionary[name] : null; + }; + Skin.prototype.removeAttachment = function(slotIndex, name) { + var dictionary = this.attachments[slotIndex]; + dictionary && (dictionary[name] = null); + }; + Skin.prototype.getAttachments = function() { + var entries = new Array(); + for (var i = 0; i < this.attachments.length; i++) { + var slotAttachments = this.attachments[i]; + if (slotAttachments) for (var name_4 in slotAttachments) { + var attachment = slotAttachments[name_4]; + attachment && entries.push(new SkinEntry(i, name_4, attachment)); + } + } + return entries; + }; + Skin.prototype.getAttachmentsForSlot = function(slotIndex, attachments) { + var slotAttachments = this.attachments[slotIndex]; + if (slotAttachments) for (var name_5 in slotAttachments) { + var attachment = slotAttachments[name_5]; + attachment && attachments.push(new SkinEntry(slotIndex, name_5, attachment)); + } + }; + Skin.prototype.clear = function() { + this.attachments.length = 0; + this.bones.length = 0; + this.constraints.length = 0; + }; + Skin.prototype.attachAll = function(skeleton, oldSkin) { + var slotIndex = 0; + for (var i = 0; i < skeleton.slots.length; i++) { + var slot = skeleton.slots[i]; + var slotAttachment = slot.getAttachment(); + if (slotAttachment && slotIndex < oldSkin.attachments.length) { + var dictionary = oldSkin.attachments[slotIndex]; + for (var key in dictionary) { + var skinAttachment = dictionary[key]; + if (slotAttachment == skinAttachment) { + var attachment = this.getAttachment(slotIndex, key); + null != attachment && slot.setAttachment(attachment); + break; + } + } + } + slotIndex++; + } + }; + return Skin; + })(); + spine.Skin = Skin; + })(spine || (spine = {})); + var spine; + (function(spine) { + var Slot = (function() { + function Slot(data, bone) { + this.deform = new Array(); + if (null == data) throw new Error("data cannot be null."); + if (null == bone) throw new Error("bone cannot be null."); + this.data = data; + this.bone = bone; + this.color = new spine.Color(); + this.darkColor = null == data.darkColor ? null : new spine.Color(); + this.setToSetupPose(); + } + Slot.prototype.getSkeleton = function() { + return this.bone.skeleton; + }; + Slot.prototype.getAttachment = function() { + return this.attachment; + }; + Slot.prototype.setAttachment = function(attachment) { + if (this.attachment == attachment) return; + this.attachment = attachment; + this.attachmentTime = this.bone.skeleton.time; + this.deform.length = 0; + }; + Slot.prototype.setAttachmentTime = function(time) { + this.attachmentTime = this.bone.skeleton.time - time; + }; + Slot.prototype.getAttachmentTime = function() { + return this.bone.skeleton.time - this.attachmentTime; + }; + Slot.prototype.setToSetupPose = function() { + this.color.setFromColor(this.data.color); + null != this.darkColor && this.darkColor.setFromColor(this.data.darkColor); + if (null == this.data.attachmentName) this.attachment = null; else { + this.attachment = null; + this.setAttachment(this.bone.skeleton.getAttachment(this.data.index, this.data.attachmentName)); + } + }; + return Slot; + })(); + spine.Slot = Slot; + })(spine || (spine = {})); + var spine; + (function(spine) { + var SlotData = (function() { + function SlotData(index, name, boneData) { + this.color = new spine.Color(1, 1, 1, 1); + if (index < 0) throw new Error("index must be >= 0."); + if (null == name) throw new Error("name cannot be null."); + if (null == boneData) throw new Error("boneData cannot be null."); + this.index = index; + this.name = name; + this.boneData = boneData; + } + return SlotData; + })(); + spine.SlotData = SlotData; + })(spine || (spine = {})); + var spine; + (function(spine) { + var Texture = (function() { + function Texture(image) { + this._image = image; + } + Texture.prototype.getImage = function() { + return this._image; + }; + Texture.filterFromString = function(text) { + switch (text.toLowerCase()) { + case "nearest": + return TextureFilter.Nearest; + + case "linear": + return TextureFilter.Linear; + + case "mipmap": + return TextureFilter.MipMap; + + case "mipmapnearestnearest": + return TextureFilter.MipMapNearestNearest; + + case "mipmaplinearnearest": + return TextureFilter.MipMapLinearNearest; + + case "mipmapnearestlinear": + return TextureFilter.MipMapNearestLinear; + + case "mipmaplinearlinear": + return TextureFilter.MipMapLinearLinear; + + default: + throw new Error("Unknown texture filter " + text); + } + }; + Texture.wrapFromString = function(text) { + switch (text.toLowerCase()) { + case "mirroredtepeat": + return TextureWrap.MirroredRepeat; + + case "clamptoedge": + return TextureWrap.ClampToEdge; + + case "repeat": + return TextureWrap.Repeat; + + default: + throw new Error("Unknown texture wrap " + text); + } + }; + return Texture; + })(); + spine.Texture = Texture; + var TextureFilter; + (function(TextureFilter) { + TextureFilter[TextureFilter["Nearest"] = 9728] = "Nearest"; + TextureFilter[TextureFilter["Linear"] = 9729] = "Linear"; + TextureFilter[TextureFilter["MipMap"] = 9987] = "MipMap"; + TextureFilter[TextureFilter["MipMapNearestNearest"] = 9984] = "MipMapNearestNearest"; + TextureFilter[TextureFilter["MipMapLinearNearest"] = 9985] = "MipMapLinearNearest"; + TextureFilter[TextureFilter["MipMapNearestLinear"] = 9986] = "MipMapNearestLinear"; + TextureFilter[TextureFilter["MipMapLinearLinear"] = 9987] = "MipMapLinearLinear"; + })(TextureFilter = spine.TextureFilter || (spine.TextureFilter = {})); + var TextureWrap; + (function(TextureWrap) { + TextureWrap[TextureWrap["MirroredRepeat"] = 33648] = "MirroredRepeat"; + TextureWrap[TextureWrap["ClampToEdge"] = 33071] = "ClampToEdge"; + TextureWrap[TextureWrap["Repeat"] = 10497] = "Repeat"; + })(TextureWrap = spine.TextureWrap || (spine.TextureWrap = {})); + var TextureRegion = (function() { + function TextureRegion() { + this.u = 0; + this.v = 0; + this.u2 = 0; + this.v2 = 0; + this.width = 0; + this.height = 0; + this.rotate = false; + this.offsetX = 0; + this.offsetY = 0; + this.originalWidth = 0; + this.originalHeight = 0; + } + return TextureRegion; + })(); + spine.TextureRegion = TextureRegion; + var FakeTexture = (function(_super) { + __extends(FakeTexture, _super); + function FakeTexture() { + return null !== _super && _super.apply(this, arguments) || this; + } + FakeTexture.prototype.setFilters = function(minFilter, magFilter) {}; + FakeTexture.prototype.setWraps = function(uWrap, vWrap) {}; + FakeTexture.prototype.dispose = function() {}; + return FakeTexture; + })(Texture); + spine.FakeTexture = FakeTexture; + })(spine || (spine = {})); + var spine; + (function(spine) { + var TextureAtlas = (function() { + function TextureAtlas(atlasText, textureLoader) { + this.pages = new Array(); + this.regions = new Array(); + this.load(atlasText, textureLoader); + } + TextureAtlas.prototype.load = function(atlasText, textureLoader) { + if (null == textureLoader) throw new Error("textureLoader cannot be null."); + var reader = new TextureAtlasReader(atlasText); + var tuple = new Array(4); + var page = null; + while (true) { + var line = reader.readLine(); + if (null == line) break; + line = line.trim(); + if (0 == line.length) page = null; else if (page) { + var region = new TextureAtlasRegion(); + region.name = line; + region.page = page; + var rotateValue = reader.readValue(); + "true" == rotateValue.toLocaleLowerCase() ? region.degrees = 90 : "false" == rotateValue.toLocaleLowerCase() ? region.degrees = 0 : region.degrees = parseFloat(rotateValue); + region.rotate = 90 == region.degrees; + reader.readTuple(tuple); + var x = parseInt(tuple[0]); + var y = parseInt(tuple[1]); + reader.readTuple(tuple); + var width = parseInt(tuple[0]); + var height = parseInt(tuple[1]); + region.u = x / page.width; + region.v = y / page.height; + if (region.rotate) { + region.u2 = (x + height) / page.width; + region.v2 = (y + width) / page.height; + } else { + region.u2 = (x + width) / page.width; + region.v2 = (y + height) / page.height; + } + region.x = x; + region.y = y; + region.width = Math.abs(width); + region.height = Math.abs(height); + 4 == reader.readTuple(tuple) && 4 == reader.readTuple(tuple) && reader.readTuple(tuple); + region.originalWidth = parseInt(tuple[0]); + region.originalHeight = parseInt(tuple[1]); + reader.readTuple(tuple); + region.offsetX = parseInt(tuple[0]); + region.offsetY = parseInt(tuple[1]); + region.index = parseInt(reader.readValue()); + region.texture = page.texture; + this.regions.push(region); + } else { + page = new TextureAtlasPage(); + page.name = line; + if (2 == reader.readTuple(tuple)) { + page.width = parseInt(tuple[0]); + page.height = parseInt(tuple[1]); + reader.readTuple(tuple); + } + reader.readTuple(tuple); + page.minFilter = spine.Texture.filterFromString(tuple[0]); + page.magFilter = spine.Texture.filterFromString(tuple[1]); + var direction = reader.readValue(); + page.uWrap = spine.TextureWrap.ClampToEdge; + page.vWrap = spine.TextureWrap.ClampToEdge; + "x" == direction ? page.uWrap = spine.TextureWrap.Repeat : "y" == direction ? page.vWrap = spine.TextureWrap.Repeat : "xy" == direction && (page.uWrap = page.vWrap = spine.TextureWrap.Repeat); + page.texture = textureLoader(line); + page.texture.setFilters(page.minFilter, page.magFilter); + page.texture.setWraps(page.uWrap, page.vWrap); + page.width = page.texture.getImage().width; + page.height = page.texture.getImage().height; + this.pages.push(page); + } + } + }; + TextureAtlas.prototype.findRegion = function(name) { + for (var i = 0; i < this.regions.length; i++) if (this.regions[i].name == name) return this.regions[i]; + return null; + }; + TextureAtlas.prototype.dispose = function() { + for (var i = 0; i < this.pages.length; i++) this.pages[i].texture.dispose(); + }; + return TextureAtlas; + })(); + spine.TextureAtlas = TextureAtlas; + var TextureAtlasReader = (function() { + function TextureAtlasReader(text) { + this.index = 0; + this.lines = text.split(/\r\n|\r|\n/); + } + TextureAtlasReader.prototype.readLine = function() { + if (this.index >= this.lines.length) return null; + return this.lines[this.index++]; + }; + TextureAtlasReader.prototype.readValue = function() { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (-1 == colon) throw new Error("Invalid line: " + line); + return line.substring(colon + 1).trim(); + }; + TextureAtlasReader.prototype.readTuple = function(tuple) { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (-1 == colon) throw new Error("Invalid line: " + line); + var i = 0, lastMatch = colon + 1; + for (;i < 3; i++) { + var comma = line.indexOf(",", lastMatch); + if (-1 == comma) break; + tuple[i] = line.substr(lastMatch, comma - lastMatch).trim(); + lastMatch = comma + 1; + } + tuple[i] = line.substring(lastMatch).trim(); + return i + 1; + }; + return TextureAtlasReader; + })(); + var TextureAtlasPage = (function() { + function TextureAtlasPage() {} + return TextureAtlasPage; + })(); + spine.TextureAtlasPage = TextureAtlasPage; + var TextureAtlasRegion = (function(_super) { + __extends(TextureAtlasRegion, _super); + function TextureAtlasRegion() { + return null !== _super && _super.apply(this, arguments) || this; + } + return TextureAtlasRegion; + })(spine.TextureRegion); + spine.TextureAtlasRegion = TextureAtlasRegion; + })(spine || (spine = {})); + var spine; + (function(spine) { + var TransformConstraint = (function() { + function TransformConstraint(data, skeleton) { + this.rotateMix = 0; + this.translateMix = 0; + this.scaleMix = 0; + this.shearMix = 0; + this.temp = new spine.Vector2(); + this.active = false; + if (null == data) throw new Error("data cannot be null."); + if (null == skeleton) throw new Error("skeleton cannot be null."); + this.data = data; + this.rotateMix = data.rotateMix; + this.translateMix = data.translateMix; + this.scaleMix = data.scaleMix; + this.shearMix = data.shearMix; + this.bones = new Array(); + for (var i = 0; i < data.bones.length; i++) this.bones.push(skeleton.findBone(data.bones[i].name)); + this.target = skeleton.findBone(data.target.name); + } + TransformConstraint.prototype.isActive = function() { + return this.active; + }; + TransformConstraint.prototype.apply = function() { + this.update(); + }; + TransformConstraint.prototype.update = function() { + this.data.local ? this.data.relative ? this.applyRelativeLocal() : this.applyAbsoluteLocal() : this.data.relative ? this.applyRelativeWorld() : this.applyAbsoluteWorld(); + }; + TransformConstraint.prototype.applyAbsoluteWorld = function() { + var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix; + var target = this.target; + var ta = target.a, tb = target.b, tc = target.c, td = target.d; + var degRadReflect = ta * td - tb * tc > 0 ? spine.MathUtils.degRad : -spine.MathUtils.degRad; + var offsetRotation = this.data.offsetRotation * degRadReflect; + var offsetShearY = this.data.offsetShearY * degRadReflect; + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + var modified = false; + if (0 != rotateMix) { + var a = bone.a, b = bone.b, c = bone.c, d = bone.d; + var r = Math.atan2(tc, ta) - Math.atan2(c, a) + offsetRotation; + r > spine.MathUtils.PI ? r -= spine.MathUtils.PI2 : r < -spine.MathUtils.PI && (r += spine.MathUtils.PI2); + r *= rotateMix; + var cos = Math.cos(r), sin = Math.sin(r); + bone.a = cos * a - sin * c; + bone.b = cos * b - sin * d; + bone.c = sin * a + cos * c; + bone.d = sin * b + cos * d; + modified = true; + } + if (0 != translateMix) { + var temp = this.temp; + target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY)); + bone.worldX += (temp.x - bone.worldX) * translateMix; + bone.worldY += (temp.y - bone.worldY) * translateMix; + modified = true; + } + if (scaleMix > 0) { + var s = Math.sqrt(bone.a * bone.a + bone.c * bone.c); + var ts = Math.sqrt(ta * ta + tc * tc); + s > 1e-5 && (s = (s + (ts - s + this.data.offsetScaleX) * scaleMix) / s); + bone.a *= s; + bone.c *= s; + s = Math.sqrt(bone.b * bone.b + bone.d * bone.d); + ts = Math.sqrt(tb * tb + td * td); + s > 1e-5 && (s = (s + (ts - s + this.data.offsetScaleY) * scaleMix) / s); + bone.b *= s; + bone.d *= s; + modified = true; + } + if (shearMix > 0) { + var b = bone.b, d = bone.d; + var by = Math.atan2(d, b); + var r = Math.atan2(td, tb) - Math.atan2(tc, ta) - (by - Math.atan2(bone.c, bone.a)); + r > spine.MathUtils.PI ? r -= spine.MathUtils.PI2 : r < -spine.MathUtils.PI && (r += spine.MathUtils.PI2); + r = by + (r + offsetShearY) * shearMix; + var s = Math.sqrt(b * b + d * d); + bone.b = Math.cos(r) * s; + bone.d = Math.sin(r) * s; + modified = true; + } + modified && (bone.appliedValid = false); + } + }; + TransformConstraint.prototype.applyRelativeWorld = function() { + var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix; + var target = this.target; + var ta = target.a, tb = target.b, tc = target.c, td = target.d; + var degRadReflect = ta * td - tb * tc > 0 ? spine.MathUtils.degRad : -spine.MathUtils.degRad; + var offsetRotation = this.data.offsetRotation * degRadReflect, offsetShearY = this.data.offsetShearY * degRadReflect; + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + var modified = false; + if (0 != rotateMix) { + var a = bone.a, b = bone.b, c = bone.c, d = bone.d; + var r = Math.atan2(tc, ta) + offsetRotation; + r > spine.MathUtils.PI ? r -= spine.MathUtils.PI2 : r < -spine.MathUtils.PI && (r += spine.MathUtils.PI2); + r *= rotateMix; + var cos = Math.cos(r), sin = Math.sin(r); + bone.a = cos * a - sin * c; + bone.b = cos * b - sin * d; + bone.c = sin * a + cos * c; + bone.d = sin * b + cos * d; + modified = true; + } + if (0 != translateMix) { + var temp = this.temp; + target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY)); + bone.worldX += temp.x * translateMix; + bone.worldY += temp.y * translateMix; + modified = true; + } + if (scaleMix > 0) { + var s = (Math.sqrt(ta * ta + tc * tc) - 1 + this.data.offsetScaleX) * scaleMix + 1; + bone.a *= s; + bone.c *= s; + s = (Math.sqrt(tb * tb + td * td) - 1 + this.data.offsetScaleY) * scaleMix + 1; + bone.b *= s; + bone.d *= s; + modified = true; + } + if (shearMix > 0) { + var r = Math.atan2(td, tb) - Math.atan2(tc, ta); + r > spine.MathUtils.PI ? r -= spine.MathUtils.PI2 : r < -spine.MathUtils.PI && (r += spine.MathUtils.PI2); + var b = bone.b, d = bone.d; + r = Math.atan2(d, b) + (r - spine.MathUtils.PI / 2 + offsetShearY) * shearMix; + var s = Math.sqrt(b * b + d * d); + bone.b = Math.cos(r) * s; + bone.d = Math.sin(r) * s; + modified = true; + } + modified && (bone.appliedValid = false); + } + }; + TransformConstraint.prototype.applyAbsoluteLocal = function() { + var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix; + var target = this.target; + target.appliedValid || target.updateAppliedTransform(); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + bone.appliedValid || bone.updateAppliedTransform(); + var rotation = bone.arotation; + if (0 != rotateMix) { + var r = target.arotation - rotation + this.data.offsetRotation; + r -= 360 * (16384 - (16384.499999999996 - r / 360 | 0)); + rotation += r * rotateMix; + } + var x = bone.ax, y = bone.ay; + if (0 != translateMix) { + x += (target.ax - x + this.data.offsetX) * translateMix; + y += (target.ay - y + this.data.offsetY) * translateMix; + } + var scaleX = bone.ascaleX, scaleY = bone.ascaleY; + if (0 != scaleMix) { + scaleX > 1e-5 && (scaleX = (scaleX + (target.ascaleX - scaleX + this.data.offsetScaleX) * scaleMix) / scaleX); + scaleY > 1e-5 && (scaleY = (scaleY + (target.ascaleY - scaleY + this.data.offsetScaleY) * scaleMix) / scaleY); + } + var shearY = bone.ashearY; + if (0 != shearMix) { + var r = target.ashearY - shearY + this.data.offsetShearY; + r -= 360 * (16384 - (16384.499999999996 - r / 360 | 0)); + bone.shearY += r * shearMix; + } + bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY); + } + }; + TransformConstraint.prototype.applyRelativeLocal = function() { + var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix; + var target = this.target; + target.appliedValid || target.updateAppliedTransform(); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + bone.appliedValid || bone.updateAppliedTransform(); + var rotation = bone.arotation; + 0 != rotateMix && (rotation += (target.arotation + this.data.offsetRotation) * rotateMix); + var x = bone.ax, y = bone.ay; + if (0 != translateMix) { + x += (target.ax + this.data.offsetX) * translateMix; + y += (target.ay + this.data.offsetY) * translateMix; + } + var scaleX = bone.ascaleX, scaleY = bone.ascaleY; + if (0 != scaleMix) { + scaleX > 1e-5 && (scaleX *= (target.ascaleX - 1 + this.data.offsetScaleX) * scaleMix + 1); + scaleY > 1e-5 && (scaleY *= (target.ascaleY - 1 + this.data.offsetScaleY) * scaleMix + 1); + } + var shearY = bone.ashearY; + 0 != shearMix && (shearY += (target.ashearY + this.data.offsetShearY) * shearMix); + bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY); + } + }; + return TransformConstraint; + })(); + spine.TransformConstraint = TransformConstraint; + })(spine || (spine = {})); + var spine; + (function(spine) { + var TransformConstraintData = (function(_super) { + __extends(TransformConstraintData, _super); + function TransformConstraintData(name) { + var _this = _super.call(this, name, 0, false) || this; + _this.bones = new Array(); + _this.rotateMix = 0; + _this.translateMix = 0; + _this.scaleMix = 0; + _this.shearMix = 0; + _this.offsetRotation = 0; + _this.offsetX = 0; + _this.offsetY = 0; + _this.offsetScaleX = 0; + _this.offsetScaleY = 0; + _this.offsetShearY = 0; + _this.relative = false; + _this.local = false; + return _this; + } + return TransformConstraintData; + })(spine.ConstraintData); + spine.TransformConstraintData = TransformConstraintData; + })(spine || (spine = {})); + var spine; + (function(spine) { + var Triangulator = (function() { + function Triangulator() { + this.convexPolygons = new Array(); + this.convexPolygonsIndices = new Array(); + this.indicesArray = new Array(); + this.isConcaveArray = new Array(); + this.triangles = new Array(); + this.polygonPool = new spine.Pool(function() { + return new Array(); + }); + this.polygonIndicesPool = new spine.Pool(function() { + return new Array(); + }); + } + Triangulator.prototype.triangulate = function(verticesArray) { + var vertices = verticesArray; + var vertexCount = verticesArray.length >> 1; + var indices = this.indicesArray; + indices.length = 0; + for (var i = 0; i < vertexCount; i++) indices[i] = i; + var isConcave = this.isConcaveArray; + isConcave.length = 0; + for (var i = 0, n = vertexCount; i < n; ++i) isConcave[i] = Triangulator.isConcave(i, vertexCount, vertices, indices); + var triangles = this.triangles; + triangles.length = 0; + while (vertexCount > 3) { + var previous = vertexCount - 1, i = 0, next = 1; + while (true) { + outer: if (!isConcave[i]) { + var p1 = indices[previous] << 1, p2 = indices[i] << 1, p3 = indices[next] << 1; + var p1x = vertices[p1], p1y = vertices[p1 + 1]; + var p2x = vertices[p2], p2y = vertices[p2 + 1]; + var p3x = vertices[p3], p3y = vertices[p3 + 1]; + for (var ii = (next + 1) % vertexCount; ii != previous; ii = (ii + 1) % vertexCount) { + if (!isConcave[ii]) continue; + var v = indices[ii] << 1; + var vx = vertices[v], vy = vertices[v + 1]; + if (Triangulator.positiveArea(p3x, p3y, p1x, p1y, vx, vy) && Triangulator.positiveArea(p1x, p1y, p2x, p2y, vx, vy) && Triangulator.positiveArea(p2x, p2y, p3x, p3y, vx, vy)) break outer; + } + break; + } + if (0 == next) { + do { + if (!isConcave[i]) break; + i--; + } while (i > 0); + break; + } + previous = i; + i = next; + next = (next + 1) % vertexCount; + } + triangles.push(indices[(vertexCount + i - 1) % vertexCount]); + triangles.push(indices[i]); + triangles.push(indices[(i + 1) % vertexCount]); + indices.splice(i, 1); + isConcave.splice(i, 1); + vertexCount--; + var previousIndex = (vertexCount + i - 1) % vertexCount; + var nextIndex = i == vertexCount ? 0 : i; + isConcave[previousIndex] = Triangulator.isConcave(previousIndex, vertexCount, vertices, indices); + isConcave[nextIndex] = Triangulator.isConcave(nextIndex, vertexCount, vertices, indices); + } + if (3 == vertexCount) { + triangles.push(indices[2]); + triangles.push(indices[0]); + triangles.push(indices[1]); + } + return triangles; + }; + Triangulator.prototype.decompose = function(verticesArray, triangles) { + var vertices = verticesArray; + var convexPolygons = this.convexPolygons; + this.polygonPool.freeAll(convexPolygons); + convexPolygons.length = 0; + var convexPolygonsIndices = this.convexPolygonsIndices; + this.polygonIndicesPool.freeAll(convexPolygonsIndices); + convexPolygonsIndices.length = 0; + var polygonIndices = this.polygonIndicesPool.obtain(); + polygonIndices.length = 0; + var polygon = this.polygonPool.obtain(); + polygon.length = 0; + var fanBaseIndex = -1, lastWinding = 0; + for (var i = 0, n = triangles.length; i < n; i += 3) { + var t1 = triangles[i] << 1, t2 = triangles[i + 1] << 1, t3 = triangles[i + 2] << 1; + var x1 = vertices[t1], y1 = vertices[t1 + 1]; + var x2 = vertices[t2], y2 = vertices[t2 + 1]; + var x3 = vertices[t3], y3 = vertices[t3 + 1]; + var merged = false; + if (fanBaseIndex == t1) { + var o = polygon.length - 4; + var winding1 = Triangulator.winding(polygon[o], polygon[o + 1], polygon[o + 2], polygon[o + 3], x3, y3); + var winding2 = Triangulator.winding(x3, y3, polygon[0], polygon[1], polygon[2], polygon[3]); + if (winding1 == lastWinding && winding2 == lastWinding) { + polygon.push(x3); + polygon.push(y3); + polygonIndices.push(t3); + merged = true; + } + } + if (!merged) { + if (polygon.length > 0) { + convexPolygons.push(polygon); + convexPolygonsIndices.push(polygonIndices); + } else { + this.polygonPool.free(polygon); + this.polygonIndicesPool.free(polygonIndices); + } + polygon = this.polygonPool.obtain(); + polygon.length = 0; + polygon.push(x1); + polygon.push(y1); + polygon.push(x2); + polygon.push(y2); + polygon.push(x3); + polygon.push(y3); + polygonIndices = this.polygonIndicesPool.obtain(); + polygonIndices.length = 0; + polygonIndices.push(t1); + polygonIndices.push(t2); + polygonIndices.push(t3); + lastWinding = Triangulator.winding(x1, y1, x2, y2, x3, y3); + fanBaseIndex = t1; + } + } + if (polygon.length > 0) { + convexPolygons.push(polygon); + convexPolygonsIndices.push(polygonIndices); + } + for (var i = 0, n = convexPolygons.length; i < n; i++) { + polygonIndices = convexPolygonsIndices[i]; + if (0 == polygonIndices.length) continue; + var firstIndex = polygonIndices[0]; + var lastIndex = polygonIndices[polygonIndices.length - 1]; + polygon = convexPolygons[i]; + var o = polygon.length - 4; + var prevPrevX = polygon[o], prevPrevY = polygon[o + 1]; + var prevX = polygon[o + 2], prevY = polygon[o + 3]; + var firstX = polygon[0], firstY = polygon[1]; + var secondX = polygon[2], secondY = polygon[3]; + var winding = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, firstX, firstY); + for (var ii = 0; ii < n; ii++) { + if (ii == i) continue; + var otherIndices = convexPolygonsIndices[ii]; + if (3 != otherIndices.length) continue; + var otherFirstIndex = otherIndices[0]; + var otherSecondIndex = otherIndices[1]; + var otherLastIndex = otherIndices[2]; + var otherPoly = convexPolygons[ii]; + var x3 = otherPoly[otherPoly.length - 2], y3 = otherPoly[otherPoly.length - 1]; + if (otherFirstIndex != firstIndex || otherSecondIndex != lastIndex) continue; + var winding1 = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, x3, y3); + var winding2 = Triangulator.winding(x3, y3, firstX, firstY, secondX, secondY); + if (winding1 == winding && winding2 == winding) { + otherPoly.length = 0; + otherIndices.length = 0; + polygon.push(x3); + polygon.push(y3); + polygonIndices.push(otherLastIndex); + prevPrevX = prevX; + prevPrevY = prevY; + prevX = x3; + prevY = y3; + ii = 0; + } + } + } + for (var i = convexPolygons.length - 1; i >= 0; i--) { + polygon = convexPolygons[i]; + if (0 == polygon.length) { + convexPolygons.splice(i, 1); + this.polygonPool.free(polygon); + polygonIndices = convexPolygonsIndices[i]; + convexPolygonsIndices.splice(i, 1); + this.polygonIndicesPool.free(polygonIndices); + } + } + return convexPolygons; + }; + Triangulator.isConcave = function(index, vertexCount, vertices, indices) { + var previous = indices[(vertexCount + index - 1) % vertexCount] << 1; + var current = indices[index] << 1; + var next = indices[(index + 1) % vertexCount] << 1; + return !this.positiveArea(vertices[previous], vertices[previous + 1], vertices[current], vertices[current + 1], vertices[next], vertices[next + 1]); + }; + Triangulator.positiveArea = function(p1x, p1y, p2x, p2y, p3x, p3y) { + return p1x * (p3y - p2y) + p2x * (p1y - p3y) + p3x * (p2y - p1y) >= 0; + }; + Triangulator.winding = function(p1x, p1y, p2x, p2y, p3x, p3y) { + var px = p2x - p1x, py = p2y - p1y; + return p3x * py - p3y * px + px * p1y - p1x * py >= 0 ? 1 : -1; + }; + return Triangulator; + })(); + spine.Triangulator = Triangulator; + })(spine || (spine = {})); + var spine; + (function(spine) { + var IntSet = (function() { + function IntSet() { + this.array = new Array(); + } + IntSet.prototype.add = function(value) { + var contains = this.contains(value); + this.array[0 | value] = 0 | value; + return !contains; + }; + IntSet.prototype.contains = function(value) { + return void 0 != this.array[0 | value]; + }; + IntSet.prototype.remove = function(value) { + this.array[0 | value] = void 0; + }; + IntSet.prototype.clear = function() { + this.array.length = 0; + }; + return IntSet; + })(); + spine.IntSet = IntSet; + var Color = (function() { + function Color(r, g, b, a) { + void 0 === r && (r = 0); + void 0 === g && (g = 0); + void 0 === b && (b = 0); + void 0 === a && (a = 0); + this.r = r; + this.g = g; + this.b = b; + this.a = a; + } + Color.prototype.set = function(r, g, b, a) { + this.r = r; + this.g = g; + this.b = b; + this.a = a; + this.clamp(); + return this; + }; + Color.prototype.setFromColor = function(c) { + this.r = c.r; + this.g = c.g; + this.b = c.b; + this.a = c.a; + return this; + }; + Color.prototype.setFromString = function(hex) { + hex = "#" == hex.charAt(0) ? hex.substr(1) : hex; + this.r = parseInt(hex.substr(0, 2), 16) / 255; + this.g = parseInt(hex.substr(2, 2), 16) / 255; + this.b = parseInt(hex.substr(4, 2), 16) / 255; + this.a = (8 != hex.length ? 255 : parseInt(hex.substr(6, 2), 16)) / 255; + return this; + }; + Color.prototype.add = function(r, g, b, a) { + this.r += r; + this.g += g; + this.b += b; + this.a += a; + this.clamp(); + return this; + }; + Color.prototype.clamp = function() { + this.r < 0 ? this.r = 0 : this.r > 1 && (this.r = 1); + this.g < 0 ? this.g = 0 : this.g > 1 && (this.g = 1); + this.b < 0 ? this.b = 0 : this.b > 1 && (this.b = 1); + this.a < 0 ? this.a = 0 : this.a > 1 && (this.a = 1); + return this; + }; + Color.rgba8888ToColor = function(color, value) { + color.r = ((4278190080 & value) >>> 24) / 255; + color.g = ((16711680 & value) >>> 16) / 255; + color.b = ((65280 & value) >>> 8) / 255; + color.a = (255 & value) / 255; + }; + Color.rgb888ToColor = function(color, value) { + color.r = ((16711680 & value) >>> 16) / 255; + color.g = ((65280 & value) >>> 8) / 255; + color.b = (255 & value) / 255; + }; + Color.WHITE = new Color(1, 1, 1, 1); + Color.RED = new Color(1, 0, 0, 1); + Color.GREEN = new Color(0, 1, 0, 1); + Color.BLUE = new Color(0, 0, 1, 1); + Color.MAGENTA = new Color(1, 0, 1, 1); + return Color; + })(); + spine.Color = Color; + var MathUtils = (function() { + function MathUtils() {} + MathUtils.clamp = function(value, min, max) { + if (value < min) return min; + if (value > max) return max; + return value; + }; + MathUtils.cosDeg = function(degrees) { + return Math.cos(degrees * MathUtils.degRad); + }; + MathUtils.sinDeg = function(degrees) { + return Math.sin(degrees * MathUtils.degRad); + }; + MathUtils.signum = function(value) { + return value > 0 ? 1 : value < 0 ? -1 : 0; + }; + MathUtils.toInt = function(x) { + return x > 0 ? Math.floor(x) : Math.ceil(x); + }; + MathUtils.cbrt = function(x) { + var y = Math.pow(Math.abs(x), 1 / 3); + return x < 0 ? -y : y; + }; + MathUtils.randomTriangular = function(min, max) { + return MathUtils.randomTriangularWith(min, max, .5 * (min + max)); + }; + MathUtils.randomTriangularWith = function(min, max, mode) { + var u = Math.random(); + var d = max - min; + if (u <= (mode - min) / d) return min + Math.sqrt(u * d * (mode - min)); + return max - Math.sqrt((1 - u) * d * (max - mode)); + }; + MathUtils.PI = 3.1415927; + MathUtils.PI2 = 2 * MathUtils.PI; + MathUtils.radiansToDegrees = 180 / MathUtils.PI; + MathUtils.radDeg = MathUtils.radiansToDegrees; + MathUtils.degreesToRadians = MathUtils.PI / 180; + MathUtils.degRad = MathUtils.degreesToRadians; + return MathUtils; + })(); + spine.MathUtils = MathUtils; + var Interpolation = (function() { + function Interpolation() {} + Interpolation.prototype.apply = function(start, end, a) { + return start + (end - start) * this.applyInternal(a); + }; + return Interpolation; + })(); + spine.Interpolation = Interpolation; + var Pow = (function(_super) { + __extends(Pow, _super); + function Pow(power) { + var _this = _super.call(this) || this; + _this.power = 2; + _this.power = power; + return _this; + } + Pow.prototype.applyInternal = function(a) { + if (a <= .5) return Math.pow(2 * a, this.power) / 2; + return Math.pow(2 * (a - 1), this.power) / (this.power % 2 == 0 ? -2 : 2) + 1; + }; + return Pow; + })(Interpolation); + spine.Pow = Pow; + var PowOut = (function(_super) { + __extends(PowOut, _super); + function PowOut(power) { + return _super.call(this, power) || this; + } + PowOut.prototype.applyInternal = function(a) { + return Math.pow(a - 1, this.power) * (this.power % 2 == 0 ? -1 : 1) + 1; + }; + return PowOut; + })(Pow); + spine.PowOut = PowOut; + var Utils = (function() { + function Utils() {} + Utils.arrayCopy = function(source, sourceStart, dest, destStart, numElements) { + for (var i = sourceStart, j = destStart; i < sourceStart + numElements; i++, j++) dest[j] = source[i]; + }; + Utils.setArraySize = function(array, size, value) { + void 0 === value && (value = 0); + var oldSize = array.length; + if (oldSize == size) return array; + array.length = size; + if (oldSize < size) for (var i = oldSize; i < size; i++) array[i] = value; + return array; + }; + Utils.ensureArrayCapacity = function(array, size, value) { + void 0 === value && (value = 0); + if (array.length >= size) return array; + return Utils.setArraySize(array, size, value); + }; + Utils.newArray = function(size, defaultValue) { + var array = new Array(size); + for (var i = 0; i < size; i++) array[i] = defaultValue; + return array; + }; + Utils.newFloatArray = function(size) { + if (Utils.SUPPORTS_TYPED_ARRAYS) return new Float32Array(size); + var array = new Array(size); + for (var i = 0; i < array.length; i++) array[i] = 0; + return array; + }; + Utils.newShortArray = function(size) { + if (Utils.SUPPORTS_TYPED_ARRAYS) return new Int16Array(size); + var array = new Array(size); + for (var i = 0; i < array.length; i++) array[i] = 0; + return array; + }; + Utils.toFloatArray = function(array) { + return Utils.SUPPORTS_TYPED_ARRAYS ? new Float32Array(array) : array; + }; + Utils.toSinglePrecision = function(value) { + return Utils.SUPPORTS_TYPED_ARRAYS ? Math.fround(value) : value; + }; + Utils.webkit602BugfixHelper = function(alpha, blend) {}; + Utils.contains = function(array, element, identity) { + void 0 === identity && (identity = true); + for (var i = 0; i < array.length; i++) if (array[i] == element) return true; + return false; + }; + Utils.SUPPORTS_TYPED_ARRAYS = "undefined" !== typeof Float32Array; + return Utils; + })(); + spine.Utils = Utils; + var DebugUtils = (function() { + function DebugUtils() {} + DebugUtils.logBones = function(skeleton) { + for (var i = 0; i < skeleton.bones.length; i++) { + var bone = skeleton.bones[i]; + console.log(bone.data.name + ", " + bone.a + ", " + bone.b + ", " + bone.c + ", " + bone.d + ", " + bone.worldX + ", " + bone.worldY); + } + }; + return DebugUtils; + })(); + spine.DebugUtils = DebugUtils; + var Pool = (function() { + function Pool(instantiator) { + this.items = new Array(); + this.instantiator = instantiator; + } + Pool.prototype.obtain = function() { + return this.items.length > 0 ? this.items.pop() : this.instantiator(); + }; + Pool.prototype.free = function(item) { + item.reset && item.reset(); + this.items.push(item); + }; + Pool.prototype.freeAll = function(items) { + for (var i = 0; i < items.length; i++) { + items[i].reset && items[i].reset(); + this.items[i] = items[i]; + } + }; + Pool.prototype.clear = function() { + this.items.length = 0; + }; + return Pool; + })(); + spine.Pool = Pool; + var Vector2 = (function() { + function Vector2(x, y) { + void 0 === x && (x = 0); + void 0 === y && (y = 0); + this.x = x; + this.y = y; + } + Vector2.prototype.set = function(x, y) { + this.x = x; + this.y = y; + return this; + }; + Vector2.prototype.length = function() { + var x = this.x; + var y = this.y; + return Math.sqrt(x * x + y * y); + }; + Vector2.prototype.normalize = function() { + var len = this.length(); + if (0 != len) { + this.x /= len; + this.y /= len; + } + return this; + }; + return Vector2; + })(); + spine.Vector2 = Vector2; + var TimeKeeper = (function() { + function TimeKeeper() { + this.maxDelta = .064; + this.framesPerSecond = 0; + this.delta = 0; + this.totalTime = 0; + this.lastTime = Date.now() / 1e3; + this.frameCount = 0; + this.frameTime = 0; + } + TimeKeeper.prototype.update = function() { + var now = Date.now() / 1e3; + this.delta = now - this.lastTime; + this.frameTime += this.delta; + this.totalTime += this.delta; + this.delta > this.maxDelta && (this.delta = this.maxDelta); + this.lastTime = now; + this.frameCount++; + if (this.frameTime > 1) { + this.framesPerSecond = this.frameCount / this.frameTime; + this.frameTime = 0; + this.frameCount = 0; + } + }; + return TimeKeeper; + })(); + spine.TimeKeeper = TimeKeeper; + var WindowedMean = (function() { + function WindowedMean(windowSize) { + void 0 === windowSize && (windowSize = 32); + this.addedValues = 0; + this.lastValue = 0; + this.mean = 0; + this.dirty = true; + this.values = new Array(windowSize); + } + WindowedMean.prototype.hasEnoughData = function() { + return this.addedValues >= this.values.length; + }; + WindowedMean.prototype.addValue = function(value) { + this.addedValues < this.values.length && this.addedValues++; + this.values[this.lastValue++] = value; + this.lastValue > this.values.length - 1 && (this.lastValue = 0); + this.dirty = true; + }; + WindowedMean.prototype.getMean = function() { + if (this.hasEnoughData()) { + if (this.dirty) { + var mean = 0; + for (var i = 0; i < this.values.length; i++) mean += this.values[i]; + this.mean = mean / this.values.length; + this.dirty = false; + } + return this.mean; + } + return 0; + }; + return WindowedMean; + })(); + spine.WindowedMean = WindowedMean; + })(spine || (spine = {})); + (function() { + Math.fround || (Math.fround = (function(array) { + return function(x) { + return array[0] = x, array[0]; + }; + })(new Float32Array(1))); + })(); + var spine; + (function(spine) { + var Attachment = (function() { + function Attachment(name) { + if (null == name) throw new Error("name cannot be null."); + this.name = name; + } + return Attachment; + })(); + spine.Attachment = Attachment; + var VertexAttachment = (function(_super) { + __extends(VertexAttachment, _super); + function VertexAttachment(name) { + var _this = _super.call(this, name) || this; + _this.id = (65535 & VertexAttachment.nextID++) << 11; + _this.worldVerticesLength = 0; + _this.deformAttachment = _this; + return _this; + } + VertexAttachment.prototype.computeWorldVertices = function(slot, start, count, worldVertices, offset, stride) { + count = offset + (count >> 1) * stride; + var skeleton = slot.bone.skeleton; + var deformArray = slot.deform; + var vertices = this.vertices; + var bones = this.bones; + if (null == bones) { + deformArray.length > 0 && (vertices = deformArray); + var bone = slot.bone; + var x = bone.worldX; + var y = bone.worldY; + var a = bone.a, b = bone.b, c = bone.c, d = bone.d; + for (var v_1 = start, w = offset; w < count; v_1 += 2, w += stride) { + var vx = vertices[v_1], vy = vertices[v_1 + 1]; + worldVertices[w] = vx * a + vy * b + x; + worldVertices[w + 1] = vx * c + vy * d + y; + } + return; + } + var v = 0, skip = 0; + for (var i = 0; i < start; i += 2) { + var n = bones[v]; + v += n + 1; + skip += n; + } + var skeletonBones = skeleton.bones; + if (0 == deformArray.length) for (var w = offset, b = 3 * skip; w < count; w += stride) { + var wx = 0, wy = 0; + var n = bones[v++]; + n += v; + for (;v < n; v++, b += 3) { + var bone = skeletonBones[bones[v]]; + var vx = vertices[b], vy = vertices[b + 1], weight = vertices[b + 2]; + wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight; + wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight; + } + worldVertices[w] = wx; + worldVertices[w + 1] = wy; + } else { + var deform = deformArray; + for (var w = offset, b = 3 * skip, f = skip << 1; w < count; w += stride) { + var wx = 0, wy = 0; + var n = bones[v++]; + n += v; + for (;v < n; v++, b += 3, f += 2) { + var bone = skeletonBones[bones[v]]; + var vx = vertices[b] + deform[f], vy = vertices[b + 1] + deform[f + 1], weight = vertices[b + 2]; + wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight; + wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight; + } + worldVertices[w] = wx; + worldVertices[w + 1] = wy; + } + } + }; + VertexAttachment.prototype.copyTo = function(attachment) { + if (null != this.bones) { + attachment.bones = new Array(this.bones.length); + spine.Utils.arrayCopy(this.bones, 0, attachment.bones, 0, this.bones.length); + } else attachment.bones = null; + if (null != this.vertices) { + attachment.vertices = spine.Utils.newFloatArray(this.vertices.length); + spine.Utils.arrayCopy(this.vertices, 0, attachment.vertices, 0, this.vertices.length); + } else attachment.vertices = null; + attachment.worldVerticesLength = this.worldVerticesLength; + attachment.deformAttachment = this.deformAttachment; + }; + VertexAttachment.nextID = 0; + return VertexAttachment; + })(Attachment); + spine.VertexAttachment = VertexAttachment; + })(spine || (spine = {})); + var spine; + (function(spine) { + var AttachmentType; + (function(AttachmentType) { + AttachmentType[AttachmentType["Region"] = 0] = "Region"; + AttachmentType[AttachmentType["BoundingBox"] = 1] = "BoundingBox"; + AttachmentType[AttachmentType["Mesh"] = 2] = "Mesh"; + AttachmentType[AttachmentType["LinkedMesh"] = 3] = "LinkedMesh"; + AttachmentType[AttachmentType["Path"] = 4] = "Path"; + AttachmentType[AttachmentType["Point"] = 5] = "Point"; + AttachmentType[AttachmentType["Clipping"] = 6] = "Clipping"; + })(AttachmentType = spine.AttachmentType || (spine.AttachmentType = {})); + })(spine || (spine = {})); + var spine; + (function(spine) { + var BoundingBoxAttachment = (function(_super) { + __extends(BoundingBoxAttachment, _super); + function BoundingBoxAttachment(name) { + var _this = _super.call(this, name) || this; + _this.color = new spine.Color(1, 1, 1, 1); + return _this; + } + BoundingBoxAttachment.prototype.copy = function() { + var copy = new BoundingBoxAttachment(name); + this.copyTo(copy); + copy.color.setFromColor(this.color); + return copy; + }; + return BoundingBoxAttachment; + })(spine.VertexAttachment); + spine.BoundingBoxAttachment = BoundingBoxAttachment; + })(spine || (spine = {})); + var spine; + (function(spine) { + var ClippingAttachment = (function(_super) { + __extends(ClippingAttachment, _super); + function ClippingAttachment(name) { + var _this = _super.call(this, name) || this; + _this.color = new spine.Color(.2275, .2275, .8078, 1); + return _this; + } + ClippingAttachment.prototype.copy = function() { + var copy = new ClippingAttachment(name); + this.copyTo(copy); + copy.endSlot = this.endSlot; + copy.color.setFromColor(this.color); + return copy; + }; + return ClippingAttachment; + })(spine.VertexAttachment); + spine.ClippingAttachment = ClippingAttachment; + })(spine || (spine = {})); + var spine; + (function(spine) { + var MeshAttachment = (function(_super) { + __extends(MeshAttachment, _super); + function MeshAttachment(name) { + var _this = _super.call(this, name) || this; + _this.color = new spine.Color(1, 1, 1, 1); + _this.tempColor = new spine.Color(0, 0, 0, 0); + return _this; + } + MeshAttachment.prototype.updateUVs = function() { + var regionUVs = this.regionUVs; + null != this.uvs && this.uvs.length == regionUVs.length || (this.uvs = spine.Utils.newFloatArray(regionUVs.length)); + var uvs = this.uvs; + var n = this.uvs.length; + var u = this.region.u, v = this.region.v, width = 0, height = 0; + if (this.region instanceof spine.TextureAtlasRegion) { + var region = this.region; + var textureWidth = region.texture.getImage().width, textureHeight = region.texture.getImage().height; + switch (region.degrees) { + case 90: + u -= (region.originalHeight - region.offsetY - region.height) / textureWidth; + v -= (region.originalWidth - region.offsetX - region.width) / textureHeight; + width = region.originalHeight / textureWidth; + height = region.originalWidth / textureHeight; + for (var i = 0; i < n; i += 2) { + uvs[i] = u + regionUVs[i + 1] * width; + uvs[i + 1] = v + (1 - regionUVs[i]) * height; + } + return; + + case 180: + u -= (region.originalWidth - region.offsetX - region.width) / textureWidth; + v -= region.offsetY / textureHeight; + width = region.originalWidth / textureWidth; + height = region.originalHeight / textureHeight; + for (var i = 0; i < n; i += 2) { + uvs[i] = u + (1 - regionUVs[i]) * width; + uvs[i + 1] = v + (1 - regionUVs[i + 1]) * height; + } + return; + + case 270: + u -= region.offsetY / textureWidth; + v -= region.offsetX / textureHeight; + width = region.originalHeight / textureWidth; + height = region.originalWidth / textureHeight; + for (var i = 0; i < n; i += 2) { + uvs[i] = u + (1 - regionUVs[i + 1]) * width; + uvs[i + 1] = v + regionUVs[i] * height; + } + return; + } + u -= region.offsetX / textureWidth; + v -= (region.originalHeight - region.offsetY - region.height) / textureHeight; + width = region.originalWidth / textureWidth; + height = region.originalHeight / textureHeight; + } else if (null == this.region) { + u = v = 0; + width = height = 1; + } else { + width = this.region.u2 - u; + height = this.region.v2 - v; + } + for (var i = 0; i < n; i += 2) { + uvs[i] = u + regionUVs[i] * width; + uvs[i + 1] = v + regionUVs[i + 1] * height; + } + }; + MeshAttachment.prototype.getParentMesh = function() { + return this.parentMesh; + }; + MeshAttachment.prototype.setParentMesh = function(parentMesh) { + this.parentMesh = parentMesh; + if (null != parentMesh) { + this.bones = parentMesh.bones; + this.vertices = parentMesh.vertices; + this.worldVerticesLength = parentMesh.worldVerticesLength; + this.regionUVs = parentMesh.regionUVs; + this.triangles = parentMesh.triangles; + this.hullLength = parentMesh.hullLength; + this.worldVerticesLength = parentMesh.worldVerticesLength; + } + }; + MeshAttachment.prototype.copy = function() { + if (null != this.parentMesh) return this.newLinkedMesh(); + var copy = new MeshAttachment(this.name); + copy.region = this.region; + copy.path = this.path; + copy.color.setFromColor(this.color); + this.copyTo(copy); + copy.regionUVs = new Array(this.regionUVs.length); + spine.Utils.arrayCopy(this.regionUVs, 0, copy.regionUVs, 0, this.regionUVs.length); + copy.uvs = new Array(this.uvs.length); + spine.Utils.arrayCopy(this.uvs, 0, copy.uvs, 0, this.uvs.length); + copy.triangles = new Array(this.triangles.length); + spine.Utils.arrayCopy(this.triangles, 0, copy.triangles, 0, this.triangles.length); + copy.hullLength = this.hullLength; + if (null != this.edges) { + copy.edges = new Array(this.edges.length); + spine.Utils.arrayCopy(this.edges, 0, copy.edges, 0, this.edges.length); + } + copy.width = this.width; + copy.height = this.height; + return copy; + }; + MeshAttachment.prototype.newLinkedMesh = function() { + var copy = new MeshAttachment(this.name); + copy.region = this.region; + copy.path = this.path; + copy.color.setFromColor(this.color); + copy.deformAttachment = this.deformAttachment; + copy.setParentMesh(null != this.parentMesh ? this.parentMesh : this); + copy.updateUVs(); + return copy; + }; + return MeshAttachment; + })(spine.VertexAttachment); + spine.MeshAttachment = MeshAttachment; + })(spine || (spine = {})); + var spine; + (function(spine) { + var PathAttachment = (function(_super) { + __extends(PathAttachment, _super); + function PathAttachment(name) { + var _this = _super.call(this, name) || this; + _this.closed = false; + _this.constantSpeed = false; + _this.color = new spine.Color(1, 1, 1, 1); + return _this; + } + PathAttachment.prototype.copy = function() { + var copy = new PathAttachment(name); + this.copyTo(copy); + copy.lengths = new Array(this.lengths.length); + spine.Utils.arrayCopy(this.lengths, 0, copy.lengths, 0, this.lengths.length); + copy.closed = closed; + copy.constantSpeed = this.constantSpeed; + copy.color.setFromColor(this.color); + return copy; + }; + return PathAttachment; + })(spine.VertexAttachment); + spine.PathAttachment = PathAttachment; + })(spine || (spine = {})); + var spine; + (function(spine) { + var PointAttachment = (function(_super) { + __extends(PointAttachment, _super); + function PointAttachment(name) { + var _this = _super.call(this, name) || this; + _this.color = new spine.Color(.38, .94, 0, 1); + return _this; + } + PointAttachment.prototype.computeWorldPosition = function(bone, point) { + point.x = this.x * bone.a + this.y * bone.b + bone.worldX; + point.y = this.x * bone.c + this.y * bone.d + bone.worldY; + return point; + }; + PointAttachment.prototype.computeWorldRotation = function(bone) { + var cos = spine.MathUtils.cosDeg(this.rotation), sin = spine.MathUtils.sinDeg(this.rotation); + var x = cos * bone.a + sin * bone.b; + var y = cos * bone.c + sin * bone.d; + return Math.atan2(y, x) * spine.MathUtils.radDeg; + }; + PointAttachment.prototype.copy = function() { + var copy = new PointAttachment(name); + copy.x = this.x; + copy.y = this.y; + copy.rotation = this.rotation; + copy.color.setFromColor(this.color); + return copy; + }; + return PointAttachment; + })(spine.VertexAttachment); + spine.PointAttachment = PointAttachment; + })(spine || (spine = {})); + var spine; + (function(spine) { + var RegionAttachment = (function(_super) { + __extends(RegionAttachment, _super); + function RegionAttachment(name) { + var _this = _super.call(this, name) || this; + _this.x = 0; + _this.y = 0; + _this.scaleX = 1; + _this.scaleY = 1; + _this.rotation = 0; + _this.width = 0; + _this.height = 0; + _this.color = new spine.Color(1, 1, 1, 1); + _this.offset = spine.Utils.newFloatArray(8); + _this.uvs = spine.Utils.newFloatArray(8); + _this.tempColor = new spine.Color(1, 1, 1, 1); + return _this; + } + RegionAttachment.prototype.updateOffset = function() { + var regionScaleX = this.width / this.region.originalWidth * this.scaleX; + var regionScaleY = this.height / this.region.originalHeight * this.scaleY; + var localX = -this.width / 2 * this.scaleX + this.region.offsetX * regionScaleX; + var localY = -this.height / 2 * this.scaleY + this.region.offsetY * regionScaleY; + var localX2 = localX + this.region.width * regionScaleX; + var localY2 = localY + this.region.height * regionScaleY; + var radians = this.rotation * Math.PI / 180; + var cos = Math.cos(radians); + var sin = Math.sin(radians); + var localXCos = localX * cos + this.x; + var localXSin = localX * sin; + var localYCos = localY * cos + this.y; + var localYSin = localY * sin; + var localX2Cos = localX2 * cos + this.x; + var localX2Sin = localX2 * sin; + var localY2Cos = localY2 * cos + this.y; + var localY2Sin = localY2 * sin; + var offset = this.offset; + offset[RegionAttachment.OX1] = localXCos - localYSin; + offset[RegionAttachment.OY1] = localYCos + localXSin; + offset[RegionAttachment.OX2] = localXCos - localY2Sin; + offset[RegionAttachment.OY2] = localY2Cos + localXSin; + offset[RegionAttachment.OX3] = localX2Cos - localY2Sin; + offset[RegionAttachment.OY3] = localY2Cos + localX2Sin; + offset[RegionAttachment.OX4] = localX2Cos - localYSin; + offset[RegionAttachment.OY4] = localYCos + localX2Sin; + }; + RegionAttachment.prototype.setRegion = function(region) { + this.region = region; + var uvs = this.uvs; + if (90 === region.degrees) { + uvs[2] = region.u; + uvs[3] = region.v2; + uvs[4] = region.u; + uvs[5] = region.v; + uvs[6] = region.u2; + uvs[7] = region.v; + uvs[0] = region.u2; + uvs[1] = region.v2; + } else if (270 === region.degrees) { + uvs[6] = region.u; + uvs[7] = region.v2; + uvs[0] = region.u; + uvs[1] = region.v; + uvs[2] = region.u2; + uvs[3] = region.v; + uvs[4] = region.u2; + uvs[5] = region.v2; + } else { + uvs[0] = region.u; + uvs[1] = region.v2; + uvs[2] = region.u; + uvs[3] = region.v; + uvs[4] = region.u2; + uvs[5] = region.v; + uvs[6] = region.u2; + uvs[7] = region.v2; + } + }; + RegionAttachment.prototype.computeWorldVertices = function(bone, worldVertices, offset, stride) { + var vertexOffset = this.offset; + var x = bone.worldX, y = bone.worldY; + var a = bone.a, b = bone.b, c = bone.c, d = bone.d; + var offsetX = 0, offsetY = 0; + offsetX = vertexOffset[RegionAttachment.OX1]; + offsetY = vertexOffset[RegionAttachment.OY1]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + offsetX = vertexOffset[RegionAttachment.OX2]; + offsetY = vertexOffset[RegionAttachment.OY2]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + offsetX = vertexOffset[RegionAttachment.OX3]; + offsetY = vertexOffset[RegionAttachment.OY3]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + offsetX = vertexOffset[RegionAttachment.OX4]; + offsetY = vertexOffset[RegionAttachment.OY4]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + }; + RegionAttachment.prototype.copy = function() { + var copy = new RegionAttachment(name); + copy.region = this.region; + copy.rendererObject = this.rendererObject; + copy.path = this.path; + copy.x = this.x; + copy.y = this.y; + copy.scaleX = this.scaleX; + copy.scaleY = this.scaleY; + copy.rotation = this.rotation; + copy.width = this.width; + copy.height = this.height; + spine.Utils.arrayCopy(this.uvs, 0, copy.uvs, 0, 8); + spine.Utils.arrayCopy(this.offset, 0, copy.offset, 0, 8); + copy.color.setFromColor(this.color); + return copy; + }; + RegionAttachment.OX1 = 0; + RegionAttachment.OY1 = 1; + RegionAttachment.OX2 = 2; + RegionAttachment.OY2 = 3; + RegionAttachment.OX3 = 4; + RegionAttachment.OY3 = 5; + RegionAttachment.OX4 = 6; + RegionAttachment.OY4 = 7; + RegionAttachment.X1 = 0; + RegionAttachment.Y1 = 1; + RegionAttachment.C1R = 2; + RegionAttachment.C1G = 3; + RegionAttachment.C1B = 4; + RegionAttachment.C1A = 5; + RegionAttachment.U1 = 6; + RegionAttachment.V1 = 7; + RegionAttachment.X2 = 8; + RegionAttachment.Y2 = 9; + RegionAttachment.C2R = 10; + RegionAttachment.C2G = 11; + RegionAttachment.C2B = 12; + RegionAttachment.C2A = 13; + RegionAttachment.U2 = 14; + RegionAttachment.V2 = 15; + RegionAttachment.X3 = 16; + RegionAttachment.Y3 = 17; + RegionAttachment.C3R = 18; + RegionAttachment.C3G = 19; + RegionAttachment.C3B = 20; + RegionAttachment.C3A = 21; + RegionAttachment.U3 = 22; + RegionAttachment.V3 = 23; + RegionAttachment.X4 = 24; + RegionAttachment.Y4 = 25; + RegionAttachment.C4R = 26; + RegionAttachment.C4G = 27; + RegionAttachment.C4B = 28; + RegionAttachment.C4A = 29; + RegionAttachment.U4 = 30; + RegionAttachment.V4 = 31; + return RegionAttachment; + })(spine.Attachment); + spine.RegionAttachment = RegionAttachment; + })(spine || (spine = {})); + var spine; + (function(spine) { + var JitterEffect = (function() { + function JitterEffect(jitterX, jitterY) { + this.jitterX = 0; + this.jitterY = 0; + this.jitterX = jitterX; + this.jitterY = jitterY; + } + JitterEffect.prototype.begin = function(skeleton) {}; + JitterEffect.prototype.transform = function(position, uv, light, dark) { + position.x += spine.MathUtils.randomTriangular(-this.jitterX, this.jitterY); + position.y += spine.MathUtils.randomTriangular(-this.jitterX, this.jitterY); + }; + JitterEffect.prototype.end = function() {}; + return JitterEffect; + })(); + spine.JitterEffect = JitterEffect; + })(spine || (spine = {})); + var spine; + (function(spine) { + var SwirlEffect = (function() { + function SwirlEffect(radius, interpolation) { + this.centerX = 0; + this.centerY = 0; + this.radius = 0; + this.angle = 0; + this.worldX = 0; + this.worldY = 0; + this.radius = radius; + this.interpolation = interpolation; + } + SwirlEffect.prototype.begin = function(skeleton) { + this.worldX = skeleton.x + this.centerX; + this.worldY = skeleton.y + this.centerY; + }; + SwirlEffect.prototype.transform = function(position, uv, light, dark) { + var radAngle = this.angle * spine.MathUtils.degreesToRadians; + var x = position.x - this.worldX; + var y = position.y - this.worldY; + var dist = Math.sqrt(x * x + y * y); + if (dist < this.radius) { + var theta = this.interpolation.apply(0, radAngle, (this.radius - dist) / this.radius); + var cos = Math.cos(theta); + var sin = Math.sin(theta); + position.x = cos * x - sin * y + this.worldX; + position.y = sin * x + cos * y + this.worldY; + } + }; + SwirlEffect.prototype.end = function() {}; + SwirlEffect.interpolation = new spine.PowOut(2); + return SwirlEffect; + })(); + spine.SwirlEffect = SwirlEffect; + })(spine || (spine = {})); + module.exports = spine; + }), {} ], + 277: [ (function(require, module, exports) { + "use strict"; + var TrackEntryListeners = require("./track-entry-listeners"); + var spine = require("./lib/spine"); + var MaxCacheTime = 30; + var FrameTime = 1 / 60; + var _vertices = []; + var _indices = []; + var _boneInfoOffset = 0; + var _vertexOffset = 0; + var _indexOffset = 0; + var _vfOffset = 0; + var _preTexUrl = null; + var _preBlendMode = null; + var _segVCount = 0; + var _segICount = 0; + var _segOffset = 0; + var _colorOffset = 0; + var _preFinalColor = null; + var _preDarkColor = null; + var _perVertexSize = 6; + var _perClipVertexSize = 12; + var _vfCount = 0, _indexCount = 0; + var _tempr, _tempg, _tempb, _tempa; + var _finalColor32, _darkColor32; + var _finalColor = new spine.Color(1, 1, 1, 1); + var _darkColor = new spine.Color(1, 1, 1, 1); + var _quadTriangles = [ 0, 1, 2, 2, 3, 0 ]; + var AnimationCache = cc.Class({ + ctor: function ctor() { + this._privateMode = false; + this._inited = false; + this._invalid = true; + this._enableCacheAttachedInfo = false; + this.frames = []; + this.totalTime = 0; + this._frameIdx = -1; + this.isCompleted = false; + this._skeletonInfo = null; + this._animationName = null; + this._tempSegments = null; + this._tempColors = null; + this._tempBoneInfos = null; + }, + init: function init(skeletonInfo, animationName) { + this._inited = true; + this._animationName = animationName; + this._skeletonInfo = skeletonInfo; + }, + clear: function clear() { + this._inited = false; + for (var i = 0, n = this.frames.length; i < n; i++) { + var frame = this.frames[i]; + frame.segments.length = 0; + } + this.invalidAllFrame(); + }, + bind: function bind(listener) { + var completeHandle = function(entry) { + entry && entry.animation.name === this._animationName && (this.isCompleted = true); + }.bind(this); + listener.complete = completeHandle; + }, + unbind: function unbind(listener) { + listener.complete = null; + }, + begin: function begin() { + if (!this._invalid) return; + var skeletonInfo = this._skeletonInfo; + var preAnimationCache = skeletonInfo.curAnimationCache; + preAnimationCache && preAnimationCache !== this && (this._privateMode ? preAnimationCache.invalidAllFrame() : preAnimationCache.updateToFrame()); + var skeleton = skeletonInfo.skeleton; + var listener = skeletonInfo.listener; + var state = skeletonInfo.state; + var animation = skeleton.data.findAnimation(this._animationName); + state.setAnimationWith(0, animation, false); + this.bind(listener); + skeletonInfo.curAnimationCache = this; + this._frameIdx = -1; + this.isCompleted = false; + this.totalTime = 0; + this._invalid = false; + }, + end: function end() { + if (!this._needToUpdate()) { + this._skeletonInfo.curAnimationCache = null; + this.frames.length = this._frameIdx + 1; + this.isCompleted = true; + this.unbind(this._skeletonInfo.listener); + } + }, + _needToUpdate: function _needToUpdate(toFrameIdx) { + return !this.isCompleted && this.totalTime < MaxCacheTime && (void 0 == toFrameIdx || this._frameIdx < toFrameIdx); + }, + updateToFrame: function updateToFrame(toFrameIdx) { + if (!this._inited) return; + this.begin(); + if (!this._needToUpdate(toFrameIdx)) return; + var skeletonInfo = this._skeletonInfo; + var skeleton = skeletonInfo.skeleton; + var clipper = skeletonInfo.clipper; + var state = skeletonInfo.state; + do { + skeleton.update(FrameTime); + state.update(FrameTime); + state.apply(skeleton); + skeleton.updateWorldTransform(); + this._frameIdx++; + this._updateFrame(skeleton, clipper, this._frameIdx); + this.totalTime += FrameTime; + } while (this._needToUpdate(toFrameIdx)); + this.end(); + }, + isInited: function isInited() { + return this._inited; + }, + isInvalid: function isInvalid() { + return this._invalid; + }, + invalidAllFrame: function invalidAllFrame() { + this.isCompleted = false; + this._invalid = true; + }, + updateAllFrame: function updateAllFrame() { + this.invalidAllFrame(); + this.updateToFrame(); + }, + enableCacheAttachedInfo: function enableCacheAttachedInfo() { + if (!this._enableCacheAttachedInfo) { + this._enableCacheAttachedInfo = true; + this.invalidAllFrame(); + } + }, + _updateFrame: function _updateFrame(skeleton, clipper, index) { + _vfOffset = 0; + _boneInfoOffset = 0; + _indexOffset = 0; + _vertexOffset = 0; + _preTexUrl = null; + _preBlendMode = null; + _segVCount = 0; + _segICount = 0; + _segOffset = 0; + _colorOffset = 0; + _preFinalColor = null; + _preDarkColor = null; + this.frames[index] = this.frames[index] || { + segments: [], + colors: [], + boneInfos: [], + vertices: null, + uintVert: null, + indices: null + }; + var frame = this.frames[index]; + var segments = this._tempSegments = frame.segments; + var colors = this._tempColors = frame.colors; + var boneInfos = this._tempBoneInfos = frame.boneInfos; + this._traverseSkeleton(skeleton, clipper); + _colorOffset > 0 && (colors[_colorOffset - 1].vfOffset = _vfOffset); + colors.length = _colorOffset; + boneInfos.length = _boneInfoOffset; + var preSegOffset = _segOffset - 1; + if (preSegOffset >= 0) if (_segICount > 0) { + var preSegInfo = segments[preSegOffset]; + preSegInfo.indexCount = _segICount; + preSegInfo.vfCount = _segVCount * _perVertexSize; + preSegInfo.vertexCount = _segVCount; + segments.length = _segOffset; + } else segments.length = _segOffset - 1; + if (0 == segments.length) return; + var vertices = frame.vertices; + var uintVert = frame.uintVert; + if (!vertices || vertices.length < _vfOffset) { + vertices = frame.vertices = new Float32Array(_vfOffset); + uintVert = frame.uintVert = new Uint32Array(vertices.buffer); + } + for (var i = 0, j = 0; i < _vfOffset; ) { + vertices[i++] = _vertices[j++]; + vertices[i++] = _vertices[j++]; + vertices[i++] = _vertices[j++]; + vertices[i++] = _vertices[j++]; + uintVert[i++] = _vertices[j++]; + uintVert[i++] = _vertices[j++]; + } + var indices = frame.indices; + (!indices || indices.length < _indexOffset) && (indices = frame.indices = new Uint16Array(_indexOffset)); + for (var _i = 0; _i < _indexOffset; _i++) indices[_i] = _indices[_i]; + frame.vertices = vertices; + frame.uintVert = uintVert; + frame.indices = indices; + }, + fillVertices: function fillVertices(skeletonColor, attachmentColor, slotColor, clipper, slot) { + _tempa = slotColor.a * attachmentColor.a * skeletonColor.a * 255; + _tempr = attachmentColor.r * skeletonColor.r * 255; + _tempg = attachmentColor.g * skeletonColor.g * 255; + _tempb = attachmentColor.b * skeletonColor.b * 255; + _finalColor.r = _tempr * slotColor.r; + _finalColor.g = _tempg * slotColor.g; + _finalColor.b = _tempb * slotColor.b; + _finalColor.a = _tempa; + if (null == slot.darkColor) _darkColor.set(0, 0, 0, 1); else { + _darkColor.r = slot.darkColor.r * _tempr; + _darkColor.g = slot.darkColor.g * _tempg; + _darkColor.b = slot.darkColor.b * _tempb; + } + _darkColor.a = 0; + _finalColor32 = (_finalColor.a << 24 >>> 0) + (_finalColor.b << 16) + (_finalColor.g << 8) + _finalColor.r; + _darkColor32 = (_darkColor.a << 24 >>> 0) + (_darkColor.b << 16) + (_darkColor.g << 8) + _darkColor.r; + if (_preFinalColor !== _finalColor32 || _preDarkColor !== _darkColor32) { + var colors = this._tempColors; + _preFinalColor = _finalColor32; + _preDarkColor = _darkColor32; + _colorOffset > 0 && (colors[_colorOffset - 1].vfOffset = _vfOffset); + colors[_colorOffset++] = { + fr: _finalColor.r, + fg: _finalColor.g, + fb: _finalColor.b, + fa: _finalColor.a, + dr: _darkColor.r, + dg: _darkColor.g, + db: _darkColor.b, + da: _darkColor.a, + vfOffset: 0 + }; + } + if (clipper.isClipping()) { + clipper.clipTriangles(_vertices, _vfCount, _indices, _indexCount, _vertices, _finalColor, _darkColor, true, _perVertexSize, _indexOffset, _vfOffset, _vfOffset + 2); + var clippedVertices = clipper.clippedVertices; + var clippedTriangles = clipper.clippedTriangles; + _indexCount = clippedTriangles.length; + _vfCount = clippedVertices.length / _perClipVertexSize * _perVertexSize; + for (var ii = 0, jj = _indexOffset, nn = clippedTriangles.length; ii < nn; ) _indices[jj++] = clippedTriangles[ii++]; + for (var _v = 0, _n = clippedVertices.length, offset = _vfOffset; _v < _n; _v += 12, + offset += _perVertexSize) { + _vertices[offset] = clippedVertices[_v]; + _vertices[offset + 1] = clippedVertices[_v + 1]; + _vertices[offset + 2] = clippedVertices[_v + 6]; + _vertices[offset + 3] = clippedVertices[_v + 7]; + _vertices[offset + 4] = _finalColor32; + _vertices[offset + 5] = _darkColor32; + } + } else for (var v = _vfOffset, n = _vfOffset + _vfCount; v < n; v += _perVertexSize) { + _vertices[v + 4] = _finalColor32; + _vertices[v + 5] = _darkColor32; + } + }, + _traverseSkeleton: function _traverseSkeleton(skeleton, clipper) { + var segments = this._tempSegments; + var boneInfos = this._tempBoneInfos; + var skeletonColor = skeleton.color; + var attachment, attachmentColor, slotColor, uvs, triangles; + var isRegion, isMesh, isClip; + var texture; + var preSegOffset, preSegInfo; + var blendMode; + var slot; + var bones = skeleton.bones; + if (this._enableCacheAttachedInfo) for (var i = 0, l = bones.length; i < l; i++, + _boneInfoOffset++) { + var bone = bones[i]; + var boneInfo = boneInfos[_boneInfoOffset]; + boneInfo || (boneInfo = boneInfos[_boneInfoOffset] = {}); + boneInfo.a = bone.a; + boneInfo.b = bone.b; + boneInfo.c = bone.c; + boneInfo.d = bone.d; + boneInfo.worldX = bone.worldX; + boneInfo.worldY = bone.worldY; + } + for (var slotIdx = 0, slotCount = skeleton.drawOrder.length; slotIdx < slotCount; slotIdx++) { + slot = skeleton.drawOrder[slotIdx]; + _vfCount = 0; + _indexCount = 0; + attachment = slot.getAttachment(); + if (!attachment) { + clipper.clipEndWithSlot(slot); + continue; + } + isRegion = attachment instanceof spine.RegionAttachment; + isMesh = attachment instanceof spine.MeshAttachment; + isClip = attachment instanceof spine.ClippingAttachment; + if (isClip) { + clipper.clipStart(slot, attachment); + continue; + } + if (!isRegion && !isMesh) { + clipper.clipEndWithSlot(slot); + continue; + } + texture = attachment.region.texture._texture; + if (!texture) { + clipper.clipEndWithSlot(slot); + continue; + } + blendMode = slot.data.blendMode; + if (_preTexUrl !== texture.nativeUrl || _preBlendMode !== blendMode) { + _preTexUrl = texture.nativeUrl; + _preBlendMode = blendMode; + preSegOffset = _segOffset - 1; + if (preSegOffset >= 0) if (_segICount > 0) { + preSegInfo = segments[preSegOffset]; + preSegInfo.indexCount = _segICount; + preSegInfo.vertexCount = _segVCount; + preSegInfo.vfCount = _segVCount * _perVertexSize; + } else _segOffset--; + segments[_segOffset] = { + tex: texture, + blendMode: blendMode, + indexCount: 0, + vertexCount: 0, + vfCount: 0 + }; + _segOffset++; + _segICount = 0; + _segVCount = 0; + } + if (isRegion) { + triangles = _quadTriangles; + _vfCount = 4 * _perVertexSize; + _indexCount = 6; + attachment.computeWorldVertices(slot.bone, _vertices, _vfOffset, _perVertexSize); + } else if (isMesh) { + triangles = attachment.triangles; + _vfCount = (attachment.worldVerticesLength >> 1) * _perVertexSize; + _indexCount = triangles.length; + attachment.computeWorldVertices(slot, 0, attachment.worldVerticesLength, _vertices, _vfOffset, _perVertexSize); + } + if (0 == _vfCount || 0 == _indexCount) { + clipper.clipEndWithSlot(slot); + continue; + } + for (var ii = 0, jj = _indexOffset, nn = triangles.length; ii < nn; ) _indices[jj++] = triangles[ii++]; + uvs = attachment.uvs; + for (var v = _vfOffset, n = _vfOffset + _vfCount, u = 0; v < n; v += _perVertexSize, + u += 2) { + _vertices[v + 2] = uvs[u]; + _vertices[v + 3] = uvs[u + 1]; + } + attachmentColor = attachment.color; + slotColor = slot.color; + this.fillVertices(skeletonColor, attachmentColor, slotColor, clipper, slot); + if (_indexCount > 0) { + for (var _ii = _indexOffset, _nn = _indexOffset + _indexCount; _ii < _nn; _ii++) _indices[_ii] += _segVCount; + _indexOffset += _indexCount; + _vfOffset += _vfCount; + _vertexOffset = _vfOffset / _perVertexSize; + _segICount += _indexCount; + _segVCount += _vfCount / _perVertexSize; + } + clipper.clipEndWithSlot(slot); + } + clipper.clipEnd(); + } + }); + var SkeletonCache = cc.Class({ + ctor: function ctor() { + this._privateMode = false; + this._animationPool = {}; + this._skeletonCache = {}; + }, + enablePrivateMode: function enablePrivateMode() { + this._privateMode = true; + }, + clear: function clear() { + this._animationPool = {}; + this._skeletonCache = {}; + }, + removeSkeleton: function removeSkeleton(uuid) { + var skeletonInfo = this._skeletonCache[uuid]; + if (!skeletonInfo) return; + var animationsCache = skeletonInfo.animationsCache; + for (var aniKey in animationsCache) { + var animationCache = animationsCache[aniKey]; + if (!animationCache) continue; + this._animationPool[uuid + "#" + aniKey] = animationCache; + animationCache.clear(); + } + delete this._skeletonCache[uuid]; + }, + getSkeletonCache: function getSkeletonCache(uuid, skeletonData) { + var skeletonInfo = this._skeletonCache[uuid]; + if (!skeletonInfo) { + var skeleton = new spine.Skeleton(skeletonData); + var clipper = new spine.SkeletonClipping(); + var stateData = new spine.AnimationStateData(skeleton.data); + var state = new spine.AnimationState(stateData); + var listener = new TrackEntryListeners(); + state.addListener(listener); + this._skeletonCache[uuid] = skeletonInfo = { + skeleton: skeleton, + clipper: clipper, + state: state, + listener: listener, + animationsCache: {}, + curAnimationCache: null + }; + } + return skeletonInfo; + }, + getAnimationCache: function getAnimationCache(uuid, animationName) { + var skeletonInfo = this._skeletonCache[uuid]; + if (!skeletonInfo) return null; + var animationsCache = skeletonInfo.animationsCache; + return animationsCache[animationName]; + }, + invalidAnimationCache: function invalidAnimationCache(uuid) { + var skeletonInfo = this._skeletonCache[uuid]; + var skeleton = skeletonInfo && skeletonInfo.skeleton; + if (!skeleton) return; + var animationsCache = skeletonInfo.animationsCache; + for (var aniKey in animationsCache) { + var animationCache = animationsCache[aniKey]; + animationCache.invalidAllFrame(); + } + }, + initAnimationCache: function initAnimationCache(uuid, animationName) { + if (!animationName) return null; + var skeletonInfo = this._skeletonCache[uuid]; + var skeleton = skeletonInfo && skeletonInfo.skeleton; + if (!skeleton) return null; + var animation = skeleton.data.findAnimation(animationName); + if (!animation) return null; + var animationsCache = skeletonInfo.animationsCache; + var animationCache = animationsCache[animationName]; + if (!animationCache) { + var poolKey = uuid + "#" + animationName; + animationCache = this._animationPool[poolKey]; + if (animationCache) delete this._animationPool[poolKey]; else { + animationCache = new AnimationCache(); + animationCache._privateMode = this._privateMode; + } + animationCache.init(skeletonInfo, animationName); + animationsCache[animationName] = animationCache; + } + return animationCache; + }, + updateAnimationCache: function updateAnimationCache(uuid, animationName) { + if (animationName) { + var animationCache = this.initAnimationCache(uuid, animationName); + if (!animationCache) return null; + animationCache.updateAllFrame(); + } else { + var skeletonInfo = this._skeletonCache[uuid]; + var skeleton = skeletonInfo && skeletonInfo.skeleton; + if (!skeleton) return; + var animationsCache = skeletonInfo.animationsCache; + for (var aniKey in animationsCache) { + var _animationCache = animationsCache[aniKey]; + _animationCache.updateAllFrame(); + } + } + } + }); + SkeletonCache.FrameTime = FrameTime; + SkeletonCache.sharedCache = new SkeletonCache(); + module.exports = SkeletonCache; + }), { + "./lib/spine": 276, + "./track-entry-listeners": 281 + } ], + 278: [ (function(require, module, exports) { + "use strict"; + function _createForOfIteratorHelperLoose(o, allowArrayLike) { + var it = "undefined" !== typeof Symbol && o[Symbol.iterator] || o["@@iterator"]; + if (it) return (it = it.call(o)).next.bind(it); + if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && "number" === typeof o.length) { + it && (o = it); + var i = 0; + return function() { + if (i >= o.length) return { + done: true + }; + return { + done: false, + value: o[i++] + }; + }; + } + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if ("string" === typeof o) return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + "Object" === n && o.constructor && (n = o.constructor.name); + if ("Map" === n || "Set" === n) return Array.from(o); + if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); + } + function _arrayLikeToArray(arr, len) { + (null == len || len > arr.length) && (len = arr.length); + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + return arr2; + } + var SkeletonCache = (true, require("./skeleton-cache").sharedCache); + var SkeletonData = cc.Class({ + name: "sp.SkeletonData", + extends: cc.Asset, + ctor: function ctor() { + this.reset(); + }, + properties: { + _skeletonJson: null, + skeletonJsonStr: { + get: function get() { + return this._skeletonJson ? JSON.stringify(this._skeletonJson) : ""; + } + }, + skeletonJson: { + get: function get() { + return this._skeletonJson; + }, + set: function set(value) { + this.reset(); + this._skeletonJson = "string" == typeof value ? JSON.parse(value) : value; + !this._uuid && value.skeleton && (this._uuid = value.skeleton.hash); + } + }, + _atlasText: "", + atlasText: { + get: function get() { + return this._atlasText; + }, + set: function set(value) { + this._atlasText = value; + this.reset(); + } + }, + textures: { + default: [], + type: [ cc.Texture2D ] + }, + textureNames: { + default: [], + type: [ cc.String ] + }, + scale: 1, + _nativeAsset: { + get: function get() { + return this._buffer; + }, + set: function set(bin) { + this._buffer = bin.buffer || bin; + this.reset(); + }, + override: true + } + }, + statics: { + preventDeferredLoadDependents: true, + createRegion: function createRegion(spriteFrame, original) { + void 0 === original && (original = void 0); + var region = new sp.spine.TextureAtlasRegion(); + var texture = spriteFrame.getTexture(); + var rect = spriteFrame.getRect(); + var origSize = spriteFrame.getOriginalSize(); + var _offset = spriteFrame.getOffset(); + var rotate = spriteFrame.isRotated(); + var offset = cc.v2(.5 * (origSize.width - rect.width) + _offset.x, .5 * (origSize.height - rect.height) + _offset.y); + var degrees = rotate ? 270 : 0; + if (original) { + region.name = original.name; + region.page = original.page; + } + region.x = rect.x; + region.y = rect.y; + region.width = rect.width; + region.height = rect.height; + region.originalWidth = origSize.width; + region.originalHeight = origSize.height; + region.offsetX = offset.x; + region.offsetY = offset.y; + region.rotate = 0 != degrees; + region.degrees = degrees; + var skelTex = new sp.SkeletonTexture({ + width: texture.width, + height: texture.height + }); + skelTex.setRealTexture(texture); + region.texture = skelTex; + this.updateRegionUV(region); + return region; + }, + updateRegionUV: function updateRegionUV(region) { + var texture = region.texture._texture; + if (region.rotate) { + region.u = region.x / texture.width; + region.v = region.y / texture.height; + region.u2 = (region.x + region.height) / texture.width; + region.v2 = (region.y + region.width) / texture.height; + } else { + region.u = region.x / texture.width; + region.v = region.y / texture.height; + region.u2 = (region.x + region.width) / texture.width; + region.v2 = (region.y + region.height) / texture.height; + } + }, + createSpriteFrame: function createSpriteFrame(region) { + var frame = new cc.SpriteFrame(region.texture._texture, cc.rect(region.x, region.y, region.width, region.height), region.rotate, cc.v2(region.offsetX - .5 * (region.originalWidth - region.width), region.offsetY - .5 * (region.originalHeight - region.height)), cc.size(region.originalWidth, region.originalHeight)); + return frame; + } + }, + createNode: false, + reset: function reset() { + this._skeletonCache = null; + this._atlasCache = null; + false; + this._cloneId = 0; + }, + ensureTexturesLoaded: function ensureTexturesLoaded(loaded, caller) { + var textures = this.textures; + var texsLen = textures.length; + if (0 == texsLen) { + loaded.call(caller, false); + return; + } + var loadedCount = 0; + var loadedItem = function loadedItem() { + loadedCount++; + if (loadedCount >= texsLen) { + loaded && loaded.call(caller, true); + loaded = null; + } + }; + for (var i = 0; i < texsLen; i++) { + var tex = textures[i]; + tex.loaded ? loadedItem() : tex.once("load", loadedItem); + } + }, + isTexturesLoaded: function isTexturesLoaded() { + var textures = this.textures; + var texsLen = textures.length; + for (var i = 0; i < texsLen; i++) { + var tex = textures[i]; + if (!tex.loaded) return false; + } + return true; + }, + getRuntimeData: function getRuntimeData(quiet) { + if (this._skeletonCache) return this._skeletonCache; + if (!(this.textures && this.textures.length > 0) && this.textureNames && this.textureNames.length > 0) { + quiet || cc.errorID(7507, this.name); + return null; + } + var atlas = this._getAtlas(quiet); + if (!atlas) return null; + var attachmentLoader = new sp.spine.AtlasAttachmentLoader(atlas); + var resData = null; + var reader = null; + if (this.skeletonJson) { + reader = new sp.spine.SkeletonJson(attachmentLoader); + resData = this.skeletonJson; + } else { + reader = new sp.spine.SkeletonBinary(attachmentLoader); + resData = new Uint8Array(this._nativeAsset); + } + reader.scale = this.scale; + this._skeletonCache = reader.readSkeletonData(resData); + atlas.dispose(); + return this._skeletonCache; + }, + getSkinsEnum: false, + getAnimsEnum: false, + _getTexture: function _getTexture(line) { + var names = this.textureNames; + for (var i = 0; i < names.length; i++) if (names[i] === line) { + var texture = this.textures[i]; + var tex = new sp.SkeletonTexture({ + width: texture.width, + height: texture.height + }); + tex.setRealTexture(texture); + return tex; + } + cc.errorID(7506, line); + return null; + }, + _getAtlas: function _getAtlas(quiet) { + if (this._atlasCache) return this._atlasCache; + if (!this.atlasText) { + quiet || cc.errorID(7508, this.name); + return null; + } + return this._atlasCache = new sp.spine.TextureAtlas(this.atlasText, this._getTexture.bind(this)); + }, + clone: function clone() { + var cloned = new SkeletonData(); + cloned._cloneId = this._cloneId + 1; + var suffix = "(clone " + String(cloned._cloneId) + ")"; + cloned._uuid = this._uuid + suffix; + cloned.name = this.name + suffix; + cloned.scale = this.scale; + cloned.textureNames = this.textureNames; + cloned.textures = this.textures; + cloned._atlasText = this._atlasText; + cloned._skeletonJson = this._skeletonJson; + cloned._buffer = this._buffer; + return cloned; + }, + destroy: function destroy() { + if (this._atlasCache) { + var regions = this._atlasCache.regions; + for (var _iterator = _createForOfIteratorHelperLoose(regions), _step; !(_step = _iterator()).done; ) { + var region = _step.value; + if (region._spriteFrame) { + region._spriteFrame.destroy(); + region._spriteFrame = null; + } + } + } + if (this._skeletonCache) { + var skins = this._skeletonCache.skins; + for (var _iterator2 = _createForOfIteratorHelperLoose(skins), _step2; !(_step2 = _iterator2()).done; ) { + var skin = _step2.value; + for (var _iterator3 = _createForOfIteratorHelperLoose(skin.attachments), _step3; !(_step3 = _iterator3()).done; ) { + var attachments = _step3.value; + for (var key in attachments) { + var _region = attachments[key].region; + if (_region && _region._spriteFrame) { + _region._spriteFrame.destroy(); + _region._spriteFrame = null; + } + } + } + } + } + SkeletonCache.removeSkeleton(this._uuid); + this._super(); + } + }); + sp.SkeletonData = module.exports = SkeletonData; + }), { + "./skeleton-cache": 277 + } ], + 279: [ (function(require, module, exports) { + "use strict"; + sp.SkeletonTexture = cc.Class({ + name: "sp.SkeletonTexture", + extends: sp.spine.Texture, + _texture: null, + _material: null, + setRealTexture: function setRealTexture(tex) { + this._texture = tex; + }, + getRealTexture: function getRealTexture() { + return this._texture; + }, + setFilters: function setFilters(minFilter, magFilter) { + this._texture && this._texture.setFilters(minFilter, magFilter); + }, + setWraps: function setWraps(uWrap, vWrap) { + this._texture && this._texture.setWrapMode(uWrap, vWrap); + }, + dispose: function dispose() {} + }); + }), {} ], + 280: [ (function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _assembler = _interopRequireDefault(require("../../cocos2d/core/renderer/assembler")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _createForOfIteratorHelperLoose(o, allowArrayLike) { + var it = "undefined" !== typeof Symbol && o[Symbol.iterator] || o["@@iterator"]; + if (it) return (it = it.call(o)).next.bind(it); + if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && "number" === typeof o.length) { + it && (o = it); + var i = 0; + return function() { + if (i >= o.length) return { + done: true + }; + return { + done: false, + value: o[i++] + }; + }; + } + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if ("string" === typeof o) return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + "Object" === n && o.constructor && (n = o.constructor.name); + if ("Map" === n || "Set" === n) return Array.from(o); + if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); + } + function _arrayLikeToArray(arr, len) { + (null == len || len > arr.length) && (len = arr.length); + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + return arr2; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + var Skeleton = require("./Skeleton"); + var spine = require("./lib/spine"); + var RenderFlow = require("../../cocos2d/core/renderer/render-flow"); + var VertexFormat = require("../../cocos2d/core/renderer/webgl/vertex-format"); + var VFOneColor = VertexFormat.vfmtPosUvColor; + var VFOneColorTexId = VertexFormat.vfmtPosUvColorTexId; + var VFTwoColor = VertexFormat.vfmtPosUvTwoColor; + var gfx = cc.gfx; + var FLAG_BATCH = 16; + var FLAG_TWO_COLOR = 1; + var _handleVal = 0; + var _quadTriangles = [ 0, 1, 2, 2, 3, 0 ]; + var _slotColor = cc.color(0, 0, 255, 255); + var _boneColor = cc.color(255, 0, 0, 255); + var _originColor = cc.color(0, 255, 0, 255); + var _meshColor = cc.color(255, 255, 0, 255); + var _finalColor = null; + var _darkColor = null; + var _tempPos = null, _tempUv = null; + true; + _finalColor = new spine.Color(1, 1, 1, 1); + _darkColor = new spine.Color(1, 1, 1, 1); + _tempPos = new spine.Vector2(); + _tempUv = new spine.Vector2(); + var _premultipliedAlpha; + var _multiplier; + var _slotRangeStart; + var _slotRangeEnd; + var _useTint; + var _useMulti; + var _texId; + var _debugSlots; + var _debugBones; + var _debugMesh; + var _nodeR, _nodeG, _nodeB, _nodeA; + var _finalColor32, _darkColor32; + var _vertexFormat; + var _perVertexSize; + var _perClipVertexSize; + var _vertexFloatCount = 0, _vertexCount = 0, _vertexFloatOffset = 0, _vertexOffset = 0, _indexCount = 0, _indexOffset = 0, _vfOffset = 0; + var _tempr, _tempg, _tempb; + var _inRange; + var _mustFlush; + var _x, _y, _m00, _m04, _m12, _m01, _m05, _m13; + var _r, _g, _b, _fr, _fg, _fb, _fa, _dr, _dg, _db, _da; + var _comp, _buffer, _renderer, _node, _needColor, _vertexEffect; + function _getSlotMaterial(tex, blendMode) { + var src, dst; + switch (blendMode) { + case spine.BlendMode.Additive: + src = _premultipliedAlpha ? cc.macro.ONE : cc.macro.SRC_ALPHA; + dst = cc.macro.ONE; + break; + + case spine.BlendMode.Multiply: + src = cc.macro.DST_COLOR; + dst = cc.macro.ONE_MINUS_SRC_ALPHA; + break; + + case spine.BlendMode.Screen: + src = cc.macro.ONE; + dst = cc.macro.ONE_MINUS_SRC_COLOR; + break; + + case spine.BlendMode.Normal: + default: + src = _premultipliedAlpha ? cc.macro.ONE : cc.macro.SRC_ALPHA; + dst = cc.macro.ONE_MINUS_SRC_ALPHA; + } + var useModel = !_comp.enableBatch; + var baseMaterial = _comp._materials[0]; + if (!baseMaterial) return null; + if (_useMulti) { + var key = tex.getId() + src + dst; + var materialCache = _comp._materialCache; + var materialInfo = materialCache[key]; + if (!materialInfo) { + var texId = baseMaterial.material.getMultiHandler().getIndex(tex.getImpl()); + if (materialCache.baseMaterial) materialInfo = { + material: cc.MaterialVariant.create(baseMaterial), + texId: texId + }; else { + materialInfo = { + material: baseMaterial, + texId: texId + }; + materialCache.baseMaterial = materialInfo; + } + if (-1 === texId) { + materialInfo.material.setProperty("texture", tex); + materialInfo.texId = 0; + } + materialInfo.material.setBlend(true, gfx.BLEND_FUNC_ADD, src, dst, gfx.BLEND_FUNC_ADD, src, dst); + materialCache[key] = materialInfo; + } + _texId = materialInfo.texId; + return materialInfo.material; + } + var _key = tex.getId() + src + dst + _useTint + useModel; + var _materialCache = _comp._materialCache; + var material = _materialCache[_key]; + if (!material) { + if (_materialCache.baseMaterial) material = cc.MaterialVariant.create(baseMaterial); else { + material = baseMaterial; + _materialCache.baseMaterial = baseMaterial; + } + material.define("CC_USE_MODEL", useModel); + material.define("USE_TINT", _useTint); + material.setProperty("texture", tex); + material.setBlend(true, gfx.BLEND_FUNC_ADD, src, dst, gfx.BLEND_FUNC_ADD, src, dst); + _materialCache[_key] = material; + } + return material; + } + function _handleColor(color) { + _fa = color.fa * _nodeA; + _multiplier = _premultipliedAlpha ? _fa / 255 : 1; + _r = _nodeR * _multiplier; + _g = _nodeG * _multiplier; + _b = _nodeB * _multiplier; + _fr = color.fr * _r; + _fg = color.fg * _g; + _fb = color.fb * _b; + _finalColor32 = (_fa << 24 >>> 0) + (_fb << 16) + (_fg << 8) + _fr; + _dr = color.dr * _r; + _dg = color.dg * _g; + _db = color.db * _b; + _da = _premultipliedAlpha ? 255 : 0; + _darkColor32 = (_da << 24 >>> 0) + (_db << 16) + (_dg << 8) + _dr; + } + function _spineColorToInt32(spineColor) { + return (spineColor.a << 24 >>> 0) + (spineColor.b << 16) + (spineColor.g << 8) + spineColor.r; + } + var SpineAssembler = (function(_Assembler) { + _inheritsLoose(SpineAssembler, _Assembler); + function SpineAssembler() { + return _Assembler.apply(this, arguments) || this; + } + var _proto = SpineAssembler.prototype; + _proto.updateRenderData = function updateRenderData(comp) { + if (comp.isAnimationCached()) return; + if (comp._dataDirty) { + this.packDynamicAtlasForSpine(comp); + var autoSwitchMaterial = comp.autoSwitchMaterial; + if (cc.sp.autoSwitchMaterial && 0 === autoSwitchMaterial || 1 === autoSwitchMaterial) { + var material = comp._materials[0]; + if (!material) return false; + var skins = comp.skeletonData._skeletonCache.skins; + for (var _iterator = _createForOfIteratorHelperLoose(skins), _step; !(_step = _iterator()).done; ) { + var skin = _step.value; + for (var _iterator2 = _createForOfIteratorHelperLoose(skin.attachments), _step2; !(_step2 = _iterator2()).done; ) { + var attachment = _step2.value; + for (var key in attachment) { + var region = attachment[key].region; + if (region && region.texture) { + this.checkAndSwitchMaterial(comp, region.texture._texture, material); + break; + } + } + } + } + } + comp._dataDirty = false; + } + var skeleton = comp._skeleton; + skeleton && skeleton.updateWorldTransform(); + }; + _proto.packDynamicAtlasForSpine = function packDynamicAtlasForSpine(comp) { + false; + var allowDynamicAtlas = comp.allowDynamicAtlas; + if ((cc.sp.allowDynamicAtlas && 0 === allowDynamicAtlas || 1 === allowDynamicAtlas) && cc.dynamicAtlasManager) { + var skins = comp.skeletonData._skeletonCache.skins; + for (var _iterator3 = _createForOfIteratorHelperLoose(skins), _step3; !(_step3 = _iterator3()).done; ) { + var skin = _step3.value; + for (var _iterator4 = _createForOfIteratorHelperLoose(skin.attachments), _step4; !(_step4 = _iterator4()).done; ) { + var attachments = _step4.value; + var _loop = function _loop(key) { + var attachment = attachments[key]; + var region = attachment.region; + if (region && !region._original && region.texture && region.texture._texture.packable) { + if (region._spriteFrame) { + region._spriteFrame.destroy(); + region._spriteFrame = null; + } + var frame = sp.SkeletonData.createSpriteFrame(region); + var packedFrame = cc.dynamicAtlasManager.insertSpriteFrame(frame); + if (packedFrame) { + frame._setDynamicAtlasFrame(packedFrame); + region._original = { + _texture: region.texture, + _x: region.x, + _y: region.y + }; + region.texture = new sp.SkeletonTexture({ + width: packedFrame.texture.width, + height: packedFrame.texture.height + }); + region.texture.setRealTexture(packedFrame.texture); + region.x = packedFrame.x; + region.y = packedFrame.y; + sp.SkeletonData.updateRegionUV(region); + if (attachment instanceof sp.spine.MeshAttachment) attachment.updateUVs(); else { + attachment.setRegion(region); + attachment.updateOffset(); + } + frame.once("_resetDynamicAtlasFrame", (function() { + region.x = region._original._x; + region.y = region._original._y; + region.texture = region._original._texture; + region._original = null; + sp.SkeletonData.updateRegionUV(region); + if (attachment instanceof sp.spine.MeshAttachment) attachment.updateUVs(); else { + attachment.setRegion(region); + attachment.updateOffset(); + } + })); + region._spriteFrame = frame; + } else frame.destroy(); + } + }; + for (var key in attachments) _loop(key); + } + } + } + }; + _proto.fillVertices = function fillVertices(skeletonColor, attachmentColor, slotColor, clipper, slot) { + var vbuf = _buffer._vData, ibuf = _buffer._iData, uintVData = _buffer._uintVData; + var offsetInfo; + _finalColor.a = slotColor.a * attachmentColor.a * skeletonColor.a * _nodeA * 255; + _multiplier = _premultipliedAlpha ? _finalColor.a : 255; + _tempr = _nodeR * attachmentColor.r * skeletonColor.r * _multiplier; + _tempg = _nodeG * attachmentColor.g * skeletonColor.g * _multiplier; + _tempb = _nodeB * attachmentColor.b * skeletonColor.b * _multiplier; + _finalColor.r = _tempr * slotColor.r; + _finalColor.g = _tempg * slotColor.g; + _finalColor.b = _tempb * slotColor.b; + if (null == slot.darkColor) _darkColor.set(0, 0, 0, 1); else { + _darkColor.r = slot.darkColor.r * _tempr; + _darkColor.g = slot.darkColor.g * _tempg; + _darkColor.b = slot.darkColor.b * _tempb; + } + _darkColor.a = _premultipliedAlpha ? 255 : 0; + if (clipper.isClipping()) { + var uvs = vbuf.subarray(_vertexFloatOffset + 2); + clipper.clipTriangles(vbuf.subarray(_vertexFloatOffset), _vertexFloatCount, ibuf.subarray(_indexOffset), _indexCount, uvs, _finalColor, _darkColor, _useTint, _perVertexSize); + var clippedVertices = new Float32Array(clipper.clippedVertices); + var clippedTriangles = clipper.clippedTriangles; + _indexCount = clippedTriangles.length; + _vertexFloatCount = clippedVertices.length / _perClipVertexSize * _perVertexSize; + offsetInfo = _buffer.requestForSpine(_vertexFloatCount / _perVertexSize, _indexCount); + _indexOffset = offsetInfo.indiceOffset, _vertexOffset = offsetInfo.vertexOffset, + _vertexFloatOffset = offsetInfo.byteOffset >> 2; + vbuf = _buffer._vData, ibuf = _buffer._iData; + uintVData = _buffer._uintVData; + ibuf.set(clippedTriangles, _indexOffset); + if (_vertexEffect) for (var _v2 = 0, _n2 = clippedVertices.length, offset = _vertexFloatOffset; _v2 < _n2; _v2 += _perClipVertexSize, + offset += _perVertexSize) { + _tempPos.x = clippedVertices[_v2]; + _tempPos.y = clippedVertices[_v2 + 1]; + _finalColor.set(clippedVertices[_v2 + 2], clippedVertices[_v2 + 3], clippedVertices[_v2 + 4], clippedVertices[_v2 + 5]); + _tempUv.x = clippedVertices[_v2 + 6]; + _tempUv.y = clippedVertices[_v2 + 7]; + _useTint ? _darkColor.set(clippedVertices[_v2 + 8], clippedVertices[_v2 + 9], clippedVertices[_v2 + 10], clippedVertices[_v2 + 11]) : _darkColor.set(0, 0, 0, 0); + _vertexEffect.transform(_tempPos, _tempUv, _finalColor, _darkColor); + vbuf[offset] = _tempPos.x; + vbuf[offset + 1] = _tempPos.y; + vbuf[offset + 2] = _tempUv.x; + vbuf[offset + 3] = _tempUv.y; + uintVData[offset + 4] = _spineColorToInt32(_finalColor); + _useMulti ? vbuf[offset + 5] = _texId : _useTint && (uintVData[offset + 5] = _spineColorToInt32(_darkColor)); + } else for (var _v3 = 0, _n3 = clippedVertices.length, _offset = _vertexFloatOffset; _v3 < _n3; _v3 += _perClipVertexSize, + _offset += _perVertexSize) { + vbuf[_offset] = clippedVertices[_v3]; + vbuf[_offset + 1] = clippedVertices[_v3 + 1]; + vbuf[_offset + 2] = clippedVertices[_v3 + 6]; + vbuf[_offset + 3] = clippedVertices[_v3 + 7]; + _finalColor32 = (clippedVertices[_v3 + 5] << 24 >>> 0) + (clippedVertices[_v3 + 4] << 16) + (clippedVertices[_v3 + 3] << 8) + clippedVertices[_v3 + 2]; + uintVData[_offset + 4] = _finalColor32; + if (_useMulti) vbuf[_offset + 5] = _texId; else if (_useTint) { + _darkColor32 = (clippedVertices[_v3 + 11] << 24 >>> 0) + (clippedVertices[_v3 + 10] << 16) + (clippedVertices[_v3 + 9] << 8) + clippedVertices[_v3 + 8]; + uintVData[_offset + 5] = _darkColor32; + } + } + } else if (_vertexEffect) for (var v = _vertexFloatOffset, n = _vertexFloatOffset + _vertexFloatCount; v < n; v += _perVertexSize) { + _tempPos.x = vbuf[v]; + _tempPos.y = vbuf[v + 1]; + _tempUv.x = vbuf[v + 2]; + _tempUv.y = vbuf[v + 3]; + _vertexEffect.transform(_tempPos, _tempUv, _finalColor, _darkColor); + vbuf[v] = _tempPos.x; + vbuf[v + 1] = _tempPos.y; + vbuf[v + 2] = _tempUv.x; + vbuf[v + 3] = _tempUv.y; + uintVData[v + 4] = _spineColorToInt32(_finalColor); + _useMulti ? vbuf[v + 5] = _texId : _useTint && (uintVData[v + 5] = _spineColorToInt32(_darkColor)); + } else { + _finalColor32 = _spineColorToInt32(_finalColor); + _darkColor32 = _spineColorToInt32(_darkColor); + for (var _v = _vertexFloatOffset, _n = _vertexFloatOffset + _vertexFloatCount; _v < _n; _v += _perVertexSize) { + uintVData[_v + 4] = _finalColor32; + _useMulti ? vbuf[_v + 5] = _texId : _useTint && (uintVData[_v + 5] = _darkColor32); + } + } + }; + _proto.realTimeTraverse = function realTimeTraverse(worldMat) { + var vbuf; + var ibuf; + var locSkeleton = _comp._skeleton; + var skeletonColor = locSkeleton.color; + var graphics = _comp._debugRenderer; + var clipper = _comp._clipper; + var material = null; + var attachment, attachmentColor, slotColor, uvs, triangles; + var isRegion, isMesh, isClip; + var offsetInfo; + var slot; + var worldMatm; + _slotRangeStart = _comp._startSlotIndex; + _slotRangeEnd = _comp._endSlotIndex; + _inRange = false; + -1 == _slotRangeStart && (_inRange = true); + _debugSlots = _comp.debugSlots; + _debugBones = _comp.debugBones; + _debugMesh = _comp.debugMesh; + if (graphics && (_debugBones || _debugSlots || _debugMesh)) { + graphics.clear(); + graphics.lineWidth = 2; + } + _perClipVertexSize = _useMulti ? 12 : _useTint ? 12 : 8; + _vertexFloatCount = 0; + _vertexFloatOffset = 0; + _vertexOffset = 0; + _indexCount = 0; + _indexOffset = 0; + for (var slotIdx = 0, slotCount = locSkeleton.drawOrder.length; slotIdx < slotCount; slotIdx++) { + slot = locSkeleton.drawOrder[slotIdx]; + if (void 0 == slot) continue; + _slotRangeStart >= 0 && _slotRangeStart == slot.data.index && (_inRange = true); + if (!_inRange) { + clipper.clipEndWithSlot(slot); + continue; + } + _slotRangeEnd >= 0 && _slotRangeEnd == slot.data.index && (_inRange = false); + _vertexFloatCount = 0; + _indexCount = 0; + attachment = slot.getAttachment(); + if (!attachment) { + clipper.clipEndWithSlot(slot); + continue; + } + isRegion = attachment instanceof spine.RegionAttachment; + isMesh = attachment instanceof spine.MeshAttachment; + isClip = attachment instanceof spine.ClippingAttachment; + if (isClip) { + clipper.clipStart(slot, attachment); + continue; + } + if (!isRegion && !isMesh) { + clipper.clipEndWithSlot(slot); + continue; + } + material = _getSlotMaterial(attachment.region.texture._texture, slot.data.blendMode); + if (!material) { + clipper.clipEndWithSlot(slot); + continue; + } + if (_mustFlush || material.getHash() !== _renderer.material.getHash()) { + _mustFlush = false; + _renderer._flush(); + _renderer.node = _node; + _renderer.material = material; + } + if (isRegion) { + triangles = _quadTriangles; + _vertexFloatCount = 4 * _perVertexSize; + _indexCount = 6; + offsetInfo = _buffer.requestForSpine(4, 6); + _indexOffset = offsetInfo.indiceOffset, _vertexOffset = offsetInfo.vertexOffset, + _vertexFloatOffset = offsetInfo.byteOffset >> 2; + vbuf = _buffer._vData, ibuf = _buffer._iData; + attachment.computeWorldVertices(slot.bone, vbuf, _vertexFloatOffset, _perVertexSize); + if (graphics && _debugSlots) { + graphics.strokeColor = _slotColor; + graphics.moveTo(vbuf[_vertexFloatOffset], vbuf[_vertexFloatOffset + 1]); + for (var ii = _vertexFloatOffset + _perVertexSize, nn = _vertexFloatOffset + _vertexFloatCount; ii < nn; ii += _perVertexSize) graphics.lineTo(vbuf[ii], vbuf[ii + 1]); + graphics.close(); + graphics.stroke(); + } + } else if (isMesh) { + triangles = attachment.triangles; + _vertexFloatCount = (attachment.worldVerticesLength >> 1) * _perVertexSize; + _indexCount = triangles.length; + offsetInfo = _buffer.requestForSpine(_vertexFloatCount / _perVertexSize, _indexCount); + _indexOffset = offsetInfo.indiceOffset, _vertexOffset = offsetInfo.vertexOffset, + _vertexFloatOffset = offsetInfo.byteOffset >> 2; + vbuf = _buffer._vData, ibuf = _buffer._iData; + attachment.computeWorldVertices(slot, 0, attachment.worldVerticesLength, vbuf, _vertexFloatOffset, _perVertexSize); + if (graphics && _debugMesh) { + graphics.strokeColor = _meshColor; + for (var _ii = 0, _nn = triangles.length; _ii < _nn; _ii += 3) { + var v1 = triangles[_ii] * _perVertexSize + _vertexFloatOffset; + var v2 = triangles[_ii + 1] * _perVertexSize + _vertexFloatOffset; + var v3 = triangles[_ii + 2] * _perVertexSize + _vertexFloatOffset; + graphics.moveTo(vbuf[v1], vbuf[v1 + 1]); + graphics.lineTo(vbuf[v2], vbuf[v2 + 1]); + graphics.lineTo(vbuf[v3], vbuf[v3 + 1]); + graphics.close(); + graphics.stroke(); + } + } + } + if (0 == _vertexFloatCount || 0 == _indexCount) { + clipper.clipEndWithSlot(slot); + continue; + } + ibuf.set(triangles, _indexOffset); + uvs = attachment.uvs; + for (var v = _vertexFloatOffset, n = _vertexFloatOffset + _vertexFloatCount, u = 0; v < n; v += _perVertexSize, + u += 2) { + vbuf[v + 2] = uvs[u]; + vbuf[v + 3] = uvs[u + 1]; + } + attachmentColor = attachment.color, slotColor = slot.color; + this.fillVertices(skeletonColor, attachmentColor, slotColor, clipper, slot); + vbuf = _buffer._vData, ibuf = _buffer._iData; + if (_indexCount > 0) { + for (var _ii2 = _indexOffset, _nn2 = _indexOffset + _indexCount; _ii2 < _nn2; _ii2++) ibuf[_ii2] += _vertexOffset; + if (worldMat) { + worldMatm = worldMat.m; + _m00 = worldMatm[0]; + _m04 = worldMatm[4]; + _m12 = worldMatm[12]; + _m01 = worldMatm[1]; + _m05 = worldMatm[5]; + _m13 = worldMatm[13]; + for (var _ii3 = _vertexFloatOffset, _nn3 = _vertexFloatOffset + _vertexFloatCount; _ii3 < _nn3; _ii3 += _perVertexSize) { + _x = vbuf[_ii3]; + _y = vbuf[_ii3 + 1]; + vbuf[_ii3] = _x * _m00 + _y * _m04 + _m12; + vbuf[_ii3 + 1] = _x * _m01 + _y * _m05 + _m13; + } + } + _buffer.adjustForSpine(_vertexFloatCount / _perVertexSize, _indexCount); + } + clipper.clipEndWithSlot(slot); + } + clipper.clipEnd(); + if (graphics && _debugBones) { + var bone; + graphics.strokeColor = _boneColor; + graphics.fillColor = _slotColor; + for (var i = 0, _n4 = locSkeleton.bones.length; i < _n4; i++) { + bone = locSkeleton.bones[i]; + var x = bone.data.length * bone.a + bone.worldX; + var y = bone.data.length * bone.c + bone.worldY; + graphics.moveTo(bone.worldX, bone.worldY); + graphics.lineTo(x, y); + graphics.stroke(); + graphics.circle(bone.worldX, bone.worldY, 1.5 * Math.PI); + graphics.fill(); + 0 === i && (graphics.fillColor = _originColor); + } + } + }; + _proto.cacheTraverse = function cacheTraverse(worldMat) { + var frame = _comp._curFrame; + if (!frame) return; + var segments = frame.segments; + if (0 == segments.length) return; + var vbuf, ibuf, uintbuf; + var material; + var offsetInfo; + var vertices = frame.vertices; + var indices = frame.indices; + var worldMatm; + var frameVFOffset = 0, frameIndexOffset = 0, segVFCount = 0; + if (worldMat) { + worldMatm = worldMat.m; + _m00 = worldMatm[0]; + _m01 = worldMatm[1]; + _m04 = worldMatm[4]; + _m05 = worldMatm[5]; + _m12 = worldMatm[12]; + _m13 = worldMatm[13]; + } + var justTranslate = 1 === _m00 && 0 === _m01 && 0 === _m04 && 1 === _m05; + var needBatch = _handleVal & FLAG_BATCH; + var calcTranslate = needBatch && justTranslate; + var colorOffset = 0; + var colors = frame.colors; + var nowColor = colors[colorOffset++]; + var maxVFOffset = nowColor.vfOffset; + _handleColor(nowColor); + for (var i = 0, n = segments.length; i < n; i++) { + var segInfo = segments[i]; + material = _getSlotMaterial(segInfo.tex, segInfo.blendMode); + if (!material) continue; + if (_mustFlush || material.getHash() !== _renderer.material.getHash()) { + _mustFlush = false; + _renderer._flush(); + _renderer.node = _node; + _renderer.material = material; + } + _vertexCount = segInfo.vertexCount; + _indexCount = segInfo.indexCount; + offsetInfo = _buffer.requestForSpine(_vertexCount, _indexCount); + _indexOffset = offsetInfo.indiceOffset; + _vertexOffset = offsetInfo.vertexOffset; + _vfOffset = offsetInfo.byteOffset >> 2; + vbuf = _buffer._vData; + ibuf = _buffer._iData; + uintbuf = _buffer._uintVData; + for (var ii = _indexOffset, il = _indexOffset + _indexCount; ii < il; ii++) ibuf[ii] = _vertexOffset + indices[frameIndexOffset++]; + segVFCount = segInfo.vfCount; + vbuf.set(vertices.subarray(frameVFOffset, frameVFOffset + segVFCount), _vfOffset); + frameVFOffset += segVFCount; + if (calcTranslate) for (var _ii4 = _vfOffset, _il = _vfOffset + segVFCount; _ii4 < _il; _ii4 += 6) { + vbuf[_ii4] += _m12; + vbuf[_ii4 + 1] += _m13; + } else if (needBatch) for (var _ii5 = _vfOffset, _il2 = _vfOffset + segVFCount; _ii5 < _il2; _ii5 += 6) { + _x = vbuf[_ii5]; + _y = vbuf[_ii5 + 1]; + vbuf[_ii5] = _x * _m00 + _y * _m04 + _m12; + vbuf[_ii5 + 1] = _x * _m01 + _y * _m05 + _m13; + } + _buffer.adjustForSpine(_vertexCount, _indexCount); + if (!_needColor) continue; + var frameColorOffset = frameVFOffset - segVFCount; + for (var _ii6 = _vfOffset + 4, _il3 = _vfOffset + 4 + segVFCount; _ii6 < _il3; _ii6 += 6, + frameColorOffset += 6) { + if (frameColorOffset >= maxVFOffset) { + nowColor = colors[colorOffset++]; + _handleColor(nowColor); + maxVFOffset = nowColor.vfOffset; + } + uintbuf[_ii6] = _finalColor32; + uintbuf[_ii6 + 1] = _darkColor32; + } + } + }; + _proto.fillBuffers = function fillBuffers(comp, renderer) { + var node = comp.node; + node._renderFlag |= RenderFlow.FLAG_UPDATE_RENDER_DATA; + if (!comp._skeleton) return; + var nodeColor = node._color; + _nodeR = nodeColor.r / 255; + _nodeG = nodeColor.g / 255; + _nodeB = nodeColor.b / 255; + _nodeA = nodeColor.a / 255; + var baseMaterial = comp._materials[0]; + if (!baseMaterial) return; + _useMulti = baseMaterial.material.isMultiSupport(); + _useTint = !_useMulti && (comp.useTint || comp.isAnimationCached()); + _vertexFormat = _useMulti ? VFOneColorTexId : _useTint ? VFTwoColor : VFOneColor; + _perVertexSize = _useMulti ? 6 : _useTint ? 6 : 5; + _node = comp.node; + _buffer = renderer.getBuffer("mesh", _vertexFormat); + _renderer = renderer; + _comp = comp; + _mustFlush = true; + _premultipliedAlpha = comp.premultipliedAlpha; + _multiplier = 1; + _handleVal = 0; + _needColor = false; + _vertexEffect = comp._effectDelegate && comp._effectDelegate._vertexEffect; + (4294967295 !== nodeColor._val || _premultipliedAlpha) && (_needColor = true); + _useTint && (_handleVal |= FLAG_TWO_COLOR); + var worldMat = void 0; + if (_comp.enableBatch) { + worldMat = _node._worldMatrix; + _mustFlush = false; + _handleVal |= FLAG_BATCH; + } + if (comp.isAnimationCached()) this.cacheTraverse(worldMat); else { + _vertexEffect && _vertexEffect.begin(comp._skeleton); + this.realTimeTraverse(worldMat); + _vertexEffect && _vertexEffect.end(); + } + renderer.worldMatDirty++; + comp.attachUtil._syncAttachedNode(); + _node = void 0; + _buffer = void 0; + _renderer = void 0; + _comp = void 0; + _vertexEffect = null; + }; + _proto.postFillBuffers = function postFillBuffers(comp, renderer) { + renderer.worldMatDirty--; + }; + return SpineAssembler; + })(_assembler["default"]); + exports["default"] = SpineAssembler; + _assembler["default"].register(Skeleton, SpineAssembler); + module.exports = exports["default"]; + }), { + "../../cocos2d/core/renderer/assembler": 149, + "../../cocos2d/core/renderer/render-flow": 153, + "../../cocos2d/core/renderer/webgl/vertex-format": 190, + "./Skeleton": 274, + "./lib/spine": 276 + } ], + 281: [ (function(require, module, exports) { + "use strict"; + var TrackEntryListeners = function TrackEntryListeners() { + this.start = null; + this.end = null; + this.complete = null; + this.event = null; + this.interrupt = null; + this.dispose = null; + }; + TrackEntryListeners.getListeners = function(entry) { + entry.listener || (entry.listener = new TrackEntryListeners()); + return entry.listener; + }; + module.exports = TrackEntryListeners; + }), {} ], + 282: [ (function(require, module, exports) { + "use strict"; + var spine = require("./lib/spine"); + sp.VertexEffectDelegate = cc.Class({ + name: "sp.VertexEffectDelegate", + ctor: function ctor() { + this._vertexEffect = null; + this._interpolation = null; + this._effectType = "none"; + }, + clear: function clear() { + this._vertexEffect = null; + this._interpolation = null; + this._effectType = "none"; + }, + initJitter: function initJitter(jitterX, jitterY) { + this._effectType = "jitter"; + this._vertexEffect = new spine.JitterEffect(jitterX, jitterY); + return this._vertexEffect; + }, + initSwirlWithPow: function initSwirlWithPow(radius, power) { + this._interpolation = new spine.Pow(power); + this._vertexEffect = new spine.SwirlEffect(radius, this._interpolation); + return this._vertexEffect; + }, + initSwirlWithPowOut: function initSwirlWithPowOut(radius, power) { + this._interpolation = new spine.PowOut(power); + this._vertexEffect = new spine.SwirlEffect(radius, this._interpolation); + return this._vertexEffect; + }, + getJitterVertexEffect: function getJitterVertexEffect() { + return this._vertexEffect; + }, + getSwirlVertexEffect: function getSwirlVertexEffect() { + return this._vertexEffect; + }, + getVertexEffect: function getVertexEffect() { + return this._vertexEffect; + }, + getEffectType: function getEffectType() { + return this._effectType; + } + }); + module.exports = sp.VertexEffectDelegate; + }), { + "./lib/spine": 276 + } ], + 283: [ (function(require, module, exports) { + "use strict"; + var _global = "undefined" === typeof window ? global : window; + _global.cc = _global.cc || {}; + cc.internal = cc.internal || {}; + require("./predefine"); + require("./polyfill/string"); + require("./polyfill/misc"); + require("./polyfill/array"); + require("./polyfill/object"); + require("./polyfill/array-buffer"); + require("./polyfill/number"); + true; + require("./polyfill/typescript"); + require("./cocos2d/core/predefine"); + true; + require("./cocos2d"); + require("./extends"); + false; + module.exports = _global.cc; + }), { + "./cocos2d": 233, + "./cocos2d/core/predefine": 146, + "./extends": 272, + "./package": void 0, + "./polyfill/array": 285, + "./polyfill/array-buffer": 284, + "./polyfill/misc": 286, + "./polyfill/number": 287, + "./polyfill/object": 288, + "./polyfill/string": 289, + "./polyfill/typescript": 290, + "./predefine": 291 + } ], + 284: [ (function(require, module, exports) { + "use strict"; + if (!ArrayBuffer.isView) { + var TypedArray = Object.getPrototypeOf(Int8Array); + ArrayBuffer.isView = "function" === typeof TypedArray ? function(obj) { + return obj instanceof TypedArray; + } : function(obj) { + if ("object" !== typeof obj) return false; + var ctor = obj.constructor; + return ctor === Float64Array || ctor === Float32Array || ctor === Uint8Array || ctor === Uint32Array || ctor === Int8Array; + }; + } + }), {} ], + 285: [ (function(require, module, exports) { + "use strict"; + Array.isArray || (Array.isArray = function(arg) { + return "[object Array]" === Object.prototype.toString.call(arg); + }); + Array.prototype.find || (Array.prototype.find = function(callback) { + var length = this.length; + for (var i = 0; i < length; i++) { + var element = this[i]; + if (callback.call(this, element, i, this)) return element; + } + return; + }); + Array.prototype.includes || (Array.prototype.includes = function(value) { + return -1 !== this.indexOf(value); + }); + }), {} ], + 286: [ (function(require, module, exports) { + "use strict"; + Math.sign || (Math.sign = function(x) { + x = +x; + if (0 === x || isNaN(x)) return x; + return x > 0 ? 1 : -1; + }); + Math.log2 || (Math.log2 = function(x) { + return Math.log(x) * Math.LOG2E; + }); + Number.isInteger || (Number.isInteger = function(value) { + return "number" === typeof value && isFinite(value) && Math.floor(value) === value; + }); + if ((false, false) || !console.time) { + var Timer = window.performance || Date; + var _timerTable = Object.create(null); + console.time = function(label) { + _timerTable[label] = Timer.now(); + }; + console.timeEnd = function(label) { + var startTime = _timerTable[label]; + var duration = Timer.now() - startTime; + console.log(label + ": " + duration + "ms"); + }; + } + }), {} ], + 287: [ (function(require, module, exports) { + "use strict"; + Number.parseFloat = Number.parseFloat || parseFloat; + Number.parseInt = Number.parseInt || parseInt; + }), {} ], + 288: [ (function(require, module, exports) { + "use strict"; + Object.assign || (Object.assign = function(target, source) { + return cc.js.mixin(target, source); + }); + Object.getOwnPropertyDescriptors || (Object.getOwnPropertyDescriptors = function(obj) { + var descriptors = {}; + var ownKeys = Object.getOwnPropertyNames(obj); + Object.getOwnPropertySymbols && (ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(obj))); + for (var i = 0; i < ownKeys.length; ++i) { + var key = ownKeys[i]; + descriptors[key] = Object.getOwnPropertyDescriptor(obj, key); + } + return descriptors; + }); + }), {} ], + 289: [ (function(require, module, exports) { + "use strict"; + String.prototype.startsWith || (String.prototype.startsWith = function(searchString, position) { + position = position || 0; + return this.lastIndexOf(searchString, position) === position; + }); + String.prototype.endsWith || (String.prototype.endsWith = function(searchString, position) { + ("undefined" === typeof position || position > this.length) && (position = this.length); + position -= searchString.length; + var lastIndex = this.indexOf(searchString, position); + return -1 !== lastIndex && lastIndex === position; + }); + String.prototype.trimLeft || (String.prototype.trimLeft = function() { + return this.replace(/^\s+/, ""); + }); + }), {} ], + 290: [ (function(require, module, exports) { + "use strict"; + var extendStatics = Object.setPrototypeOf || { + __proto__: [] + } instanceof Array && function(d, b) { + d.__proto__ = b; + } || function(d, b) { + for (var p in b) b.hasOwnProperty(p) && (d[p] = b[p]); + }; + window.__extends = function(d, b) { + extendStatics(d, b); + function __() { + this.constructor = d; + } + d.prototype = null === b ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + window.__assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) Object.prototype.hasOwnProperty.call(s, p) && (t[p] = s[p]); + } + return t; + }; + window.__rest = function(s, e) { + var t = {}; + for (var p in s) Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0 && (t[p] = s[p]); + if (null != s && "function" === typeof Object.getOwnPropertySymbols) for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]) && (t[p[i]] = s[p[i]]); + return t; + }; + window.__decorate = function(decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : null === desc ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if ("object" === typeof Reflect && "function" === typeof Reflect.decorate) r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) (d = decorators[i]) && (r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r); + return c > 3 && r && Object.defineProperty(target, key, r), r; + }; + window.__param = function(paramIndex, decorator) { + return function(target, key) { + decorator(target, key, paramIndex); + }; + }; + window.__metadata = function(metadataKey, metadataValue) { + if ("object" === typeof Reflect && "function" === typeof Reflect.metadata) return Reflect.metadata(metadataKey, metadataValue); + }; + window.__awaiter = function(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function(resolve) { + resolve(value); + }); + } + return new (P || (P = Promise))(function(resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + } + function rejected(value) { + try { + step(generator["throw"](value)); + } catch (e) { + reject(e); + } + } + function step(result) { + result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); + }; + window.__generator = function(thisArg, body) { + var _ = { + label: 0, + sent: function sent() { + if (1 & t[0]) throw t[1]; + return t[1]; + }, + trys: [], + ops: [] + }, f, y, t, g; + return g = { + next: verb(0), + throw: verb(1), + return: verb(2) + }, "function" === typeof Symbol && (g[Symbol.iterator] = function() { + return this; + }), g; + function verb(n) { + return function(v) { + return step([ n, v ]); + }; + } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = 2 & op[0] ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), + 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + (y = 0, t) && (op = [ 2 & op[0], t.value ]); + switch (op[0]) { + case 0: + case 1: + t = op; + break; + + case 4: + _.label++; + return { + value: op[1], + done: false + }; + + case 5: + _.label++; + y = op[1]; + op = [ 0 ]; + continue; + + case 7: + op = _.ops.pop(); + _.trys.pop(); + continue; + + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (6 === op[0] || 2 === op[0])) { + _ = 0; + continue; + } + if (3 === op[0] && (!t || op[1] > t[0] && op[1] < t[3])) { + _.label = op[1]; + break; + } + if (6 === op[0] && _.label < t[1]) { + _.label = t[1]; + t = op; + break; + } + if (t && _.label < t[2]) { + _.label = t[2]; + _.ops.push(op); + break; + } + t[2] && _.ops.pop(); + _.trys.pop(); + continue; + } + op = body.call(thisArg, _); + } catch (e) { + op = [ 6, e ]; + y = 0; + } finally { + f = t = 0; + } + if (5 & op[0]) throw op[1]; + return { + value: op[0] ? op[1] : void 0, + done: true + }; + } + }; + window.__exportStar = function(m, o) { + for (var p in m) "default" === p || Object.prototype.hasOwnProperty.call(o, p) || __createBinding(o, m, p); + }; + window.__createBinding = Object.create ? function(o, m, k, k2) { + void 0 === k2 && (k2 = k); + Object.defineProperty(o, k2, { + enumerable: true, + get: function get() { + return m[k]; + } + }); + } : function(o, m, k, k2) { + void 0 === k2 && (k2 = k); + o[k2] = m[k]; + }; + window.__values = function(o) { + var s = "function" === typeof Symbol && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && "number" === typeof o.length) return { + next: function next() { + o && i >= o.length && (o = void 0); + return { + value: o && o[i++], + done: !o + }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); + }; + window.__read = function(o, n) { + var m = "function" === typeof Symbol && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((void 0 === n || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } catch (error) { + e = { + error: error + }; + } finally { + try { + r && !r.done && (m = i["return"]) && m.call(i); + } finally { + if (e) throw e.error; + } + } + return ar; + }; + window.__spread = function() { + for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i])); + return ar; + }; + window.__spreadArrays = function() { + for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; + for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, + k++) r[k] = a[j]; + return r; + }; + window.__await = function(v) { + return this instanceof __await ? (this.v = v, this) : new __await(v); + }; + window.__asyncGenerator = function(thisArg, _arguments, generator) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function() { + return this; + }, i; + function verb(n) { + g[n] && (i[n] = function(v) { + return new Promise(function(a, b) { + q.push([ n, v, a, b ]) > 1 || resume(n, v); + }); + }); + } + function resume(n, v) { + try { + step(g[n](v)); + } catch (e) { + settle(q[0][3], e); + } + } + function step(r) { + r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); + } + function fulfill(value) { + resume("next", value); + } + function reject(value) { + resume("throw", value); + } + function settle(f, v) { + (f(v), q.shift(), q.length) && resume(q[0][0], q[0][1]); + } + }; + window.__asyncDelegator = function(o) { + var i, p; + return i = {}, verb("next"), verb("throw", (function(e) { + throw e; + })), verb("return"), i[Symbol.iterator] = function() { + return this; + }, i; + function verb(n, f) { + i[n] = o[n] ? function(v) { + return (p = !p) ? { + value: __await(o[n](v)), + done: "return" === n + } : f ? f(v) : v; + } : f; + } + }; + window.__asyncValues = function(o) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = "function" === typeof __values ? __values(o) : o[Symbol.iterator](), + i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function() { + return this; + }, i); + function verb(n) { + i[n] = o[n] && function(v) { + return new Promise(function(resolve, reject) { + v = o[n](v), settle(resolve, reject, v.done, v.value); + }); + }; + } + function settle(resolve, reject, d, v) { + Promise.resolve(v).then((function(v) { + resolve({ + value: v, + done: d + }); + }), reject); + } + }; + window.__makeTemplateObject = function(cooked, raw) { + Object.defineProperty ? Object.defineProperty(cooked, "raw", { + value: raw + }) : cooked.raw = raw; + return cooked; + }; + var __setModuleDefault = Object.create ? function(o, v) { + Object.defineProperty(o, "default", { + enumerable: true, + value: v + }); + } : function(o, v) { + o["default"] = v; + }; + window.__importStar = function(mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (null != mod) for (var k in mod) "default" !== k && Object.prototype.hasOwnProperty.call(mod, k) && __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; + }; + window.__importDefault = function(mod) { + return mod && mod.__esModule ? mod : { + default: mod + }; + }; + window.__classPrivateFieldGet = function(receiver, privateMap) { + if (!privateMap.has(receiver)) throw new TypeError("attempted to get private field on non-instance"); + return privateMap.get(receiver); + }; + window.__classPrivateFieldSet = function(receiver, privateMap, value) { + if (!privateMap.has(receiver)) throw new TypeError("attempted to set private field on non-instance"); + privateMap.set(receiver, value); + return value; + }; + }), {} ], + 291: [ (function(require, module, exports) { + "use strict"; + var _global = "undefined" === typeof window ? global : window; + function defineMacro(name, defaultValue) { + "undefined" === typeof _global[name] && (_global[name] = defaultValue); + } + function defineDeprecatedMacroGetter(name, defaultValue) { + "undefined" === typeof _global[name] && Object.defineProperty(_global, name, { + get: function get() { + var recommandedUsage; + "CC_WECHATGAMESUB" === name ? recommandedUsage = "cc.sys.platform === cc.sys.WECHAT_GAME_SUB" : "CC_WECHATGAME" === name ? recommandedUsage = "cc.sys.platform === cc.sys.WECHAT_GAME" : "CC_QQPLAY" === name && (recommandedUsage = "cc.sys.platform === cc.sys.QQ_PLAY"); + cc.warnID(1400, name, recommandedUsage); + return defaultValue; + } + }); + } + function defined(name) { + return "object" === typeof _global[name]; + } + defineMacro("CC_BUILD", false); + true; + _global.CC_BUILD = true; + _global.CC_DEV = false; + _global.CC_DEBUG = true; + _global.CC_JSB = false; + _global.CC_NATIVERENDERER = false; + _global.CC_SUPPORT_JIT = true; + _global.CC_PHYSICS_BUILTIN = false; + _global.CC_PHYSICS_CANNON = false; + _global.CC_EDITOR = false; + _global.CC_PREVIEW = false; + _global.CC_TEST = false; + _global.CC_RUNTIME = false; + _global.CC_JSB = false; + var WECHATGAMESUB = !!(defined("wx") && wx.getSharedCanvas); + var WECHATGAME = !!(defined("wx") && (wx.getSystemInfoSync || wx.getSharedCanvas)); + var QQPLAY = defined("bk"); + defineDeprecatedMacroGetter("CC_WECHATGAMESUB", WECHATGAMESUB); + defineDeprecatedMacroGetter("CC_WECHATGAME", WECHATGAME); + defineDeprecatedMacroGetter("CC_QQPLAY", QQPLAY); + false; + var engineVersion = "2.4.5"; + _global["CocosEngine"] = cc.ENGINE_VERSION = engineVersion; + }), {} ] +}, {}, [ 283 ]); +//# sourceMappingURL=cocos2d-js.js.map diff --git a/demo/web-mobile/cocos2d-js.js.e3018.map b/demo/web-mobile/cocos2d-js.js.e3018.map new file mode 100644 index 00000000..de1598a5 --- /dev/null +++ b/demo/web-mobile/cocos2d-js.js.e3018.map @@ -0,0 +1 @@ +{"version":3,"sources":["Users/smallmain/Documents/Work/test/engine/gulp/browserify_prelude.js","Users/smallmain/Documents/Work/test/engine/DebugInfos.json","cocos2d-js.c901d.js","Users/smallmain/Documents/Work/test/engine/cocos2d/actions/CCAction.js","Users/smallmain/Documents/Work/test/engine/cocos2d/actions/CCActionCatmullRom.js","Users/smallmain/Documents/Work/test/engine/cocos2d/actions/CCActionEase.js","Users/smallmain/Documents/Work/test/engine/cocos2d/actions/CCActionInstant.js","Users/smallmain/Documents/Work/test/engine/cocos2d/actions/CCActionInterval.js","Users/smallmain/Documents/Work/test/engine/cocos2d/actions/CCActionManager.js","Users/smallmain/Documents/Work/test/engine/cocos2d/actions/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/actions/tween.js","Users/smallmain/Documents/Work/test/engine/cocos2d/animation/animation-animator.js","Users/smallmain/Documents/Work/test/engine/cocos2d/animation/animation-clip.js","Users/smallmain/Documents/Work/test/engine/cocos2d/animation/animation-curves.js","Users/smallmain/Documents/Work/test/engine/cocos2d/animation/animation-manager.js","Users/smallmain/Documents/Work/test/engine/cocos2d/animation/animation-state.js","Users/smallmain/Documents/Work/test/engine/cocos2d/animation/bezier.js","Users/smallmain/Documents/Work/test/engine/cocos2d/animation/easing.js","Users/smallmain/Documents/Work/test/engine/cocos2d/animation/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/animation/motion-path-helper.js","Users/smallmain/Documents/Work/test/engine/cocos2d/animation/playable.js","Users/smallmain/Documents/Work/test/engine/cocos2d/animation/types.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/CCDebug.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/CCDirector.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/CCGame.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/CCNode.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/CCPrivateNode.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/CCScene.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/CCScheduler.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/CCAssetManager.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/builtins.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/bundle.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/cache.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/config.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/depend-util.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/deprecated.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/deserialize.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/download-dom-audio.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/download-dom-image.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/download-file.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/download-script.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/downloader.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/factory.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/fetch.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/font-loader.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/helper.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/load.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/pack-manager.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/parser.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/pipeline.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/preprocess.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/releaseManager.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/request-item.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/shared.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/task.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/urlTransformer.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/asset-manager/utilities.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/CCAsset.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/CCAudioClip.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/CCBitmapFont.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/CCBufferAsset.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/CCFont.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/CCJsonAsset.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/CCLabelAtlas.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/CCPrefab.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/CCRenderTexture.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/CCSceneAsset.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/CCScripts.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/CCSpriteAtlas.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/CCSpriteFrame.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/CCTTFFont.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/CCTextAsset.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/CCTexture2D.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/material/CCEffectAsset.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/material/CCMaterial.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/material/effect-base.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/material/effect-parser.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/material/effect-variant.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/material/effect.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/material/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/material/material-pool.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/material/material-variant.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/assets/material/utils.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/base-ui/CCWidgetManager.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/camera/CCCamera.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/component-scheduler.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/CCAnimation.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/CCBlockInputEvents.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/CCButton.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/CCCanvas.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/CCComponent.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/CCComponentEventHandler.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/CCLabel.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/CCLabelOutline.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/CCLabelShadow.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/CCLayout.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/CCMotionStreak.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/CCRenderComponent.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/CCRichText.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/CCScrollBar.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/CCSprite.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/CCToggle.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/CCToggleContainer.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/CCToggleGroup.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/CCWidget.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/components/missing-script.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/event-manager/CCEvent.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/event-manager/CCEventListener.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/event-manager/CCEventManager.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/event-manager/CCTouch.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/event-manager/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/event/event-listeners.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/event/event-target.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/event/event.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/event/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/event/system-event.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/graphics/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/node-activator.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/CCClass.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/CCClassDecorator.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/CCEnum.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/CCInputExtension.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/CCInputManager.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/CCMacro.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/CCObject.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/CCSAXParser.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/CCScreen.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/CCSys.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/CCView.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/CCVisibleRect.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/attribute.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/callbacks-invoker.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/compiler.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/deserialize-compiled.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/deserialize.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/id-generater.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/instantiate-jit.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/instantiate.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/js.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/preprocess-class.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/requiring-frame.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/platform/utils.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/predefine.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/assembler-2d.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/assembler-pool.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/assembler.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/canvas/Device.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/canvas/Texture2D.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/render-flow.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/utils/dynamic-atlas/manager.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/utils/dynamic-atlas/reusable-atlas.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/utils/label/bmfont.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/utils/label/label-frame.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/utils/label/letter-font.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/utils/label/ttf.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/utils/utils.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/label/2d-multi/bmfont.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/label/2d-multi/ttf.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/label/2d/bmfont.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/label/2d/letter.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/label/2d/nativeTTF.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/label/2d/ttf.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/label/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/motion-streak-multi.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/motion-streak.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/sprite/2d-multi/bar-filled.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/sprite/2d-multi/mesh.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/sprite/2d-multi/radial-filled.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/sprite/2d-multi/simple.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/sprite/2d-multi/sliced.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/sprite/2d-multi/tiled.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/sprite/2d/bar-filled.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/sprite/2d/mesh.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/sprite/2d/radial-filled.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/sprite/2d/simple.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/sprite/2d/sliced.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/sprite/2d/tiled.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/assemblers/sprite/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/flex-buffer.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/mesh-buffer.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/model-batcher.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/quad-buffer.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/render-data.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/spine-buffer.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/renderer/webgl/vertex-format.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/sp/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/sp/multi-batcher.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/sp/multi-handler.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/sp/sp.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/CCPath.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/affine-transform.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/base-node.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/binary-search.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/blend-func.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/decode-uuid.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/find.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/gray-sprite-state.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/html-text-parser.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/misc.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/mutable-forward-iterator.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/pool.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/prefab-helper.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/profiler/CCProfiler.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/profiler/counter.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/profiler/perf-counter.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/text-utils.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/texture-util.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/trans-pool/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/trans-pool/mem-pool.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/trans-pool/node-mem-pool.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/trans-pool/node-unit.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/utils/trans-pool/unit-base.js","Users/smallmain/Documents/Work/test/engine/cocos2d/core/value-types/color.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/value-types/index.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/value-types/mat3.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/value-types/mat4.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/value-types/quat.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/value-types/rect.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/value-types/size.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/value-types/trs.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/value-types/utils.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/value-types/value-type.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/value-types/vec2.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/value-types/vec3.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/core/value-types/vec4.ts","Users/smallmain/Documents/Work/test/engine/cocos2d/deprecated.js","Users/smallmain/Documents/Work/test/engine/cocos2d/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/particle/CCParticleAsset.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/build/mappings/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/core/base-renderer.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/core/input-assembler.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/core/pass.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/core/program-lib.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/core/technique.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/core/view.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/enums.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/gfx/device.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/gfx/enums.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/gfx/frame-buffer.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/gfx/index-buffer.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/gfx/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/gfx/misc.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/gfx/program.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/gfx/render-buffer.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/gfx/state.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/gfx/texture-2d.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/gfx/texture-cube.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/gfx/texture.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/gfx/vertex-buffer.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/gfx/vertex-format.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/memop/circular-pool.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/memop/fixed-array.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/memop/index.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/memop/linked-array.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/memop/pool.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/memop/recycle-pool.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/memop/timsort.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/memop/typed-array-pool.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/murmurhash2_gc.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/renderers/forward-renderer.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/scene/camera.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/scene/model.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/scene/scene.js","Users/smallmain/Documents/Work/test/engine/cocos2d/renderer/types.js","Users/smallmain/Documents/Work/test/engine/cocos2d/tilemap/CCTiledMapAsset.js","Users/smallmain/Documents/Work/test/engine/extends.js","Users/smallmain/Documents/Work/test/engine/extensions/spine/AttachUtil.js","Users/smallmain/Documents/Work/test/engine/extensions/spine/Skeleton.js","Users/smallmain/Documents/Work/test/engine/extensions/spine/index.js","Users/smallmain/Documents/Work/test/engine/extensions/spine/lib/spine.js","Users/smallmain/Documents/Work/test/engine/extensions/spine/skeleton-cache.js","Users/smallmain/Documents/Work/test/engine/extensions/spine/skeleton-data.js","Users/smallmain/Documents/Work/test/engine/extensions/spine/skeleton-texture.js","Users/smallmain/Documents/Work/test/engine/extensions/spine/spine-assembler.js","Users/smallmain/Documents/Work/test/engine/extensions/spine/track-entry-listeners.js","Users/smallmain/Documents/Work/test/engine/extensions/spine/vertex-effect-delegate.js","Users/smallmain/Documents/Work/test/engine/index.js","Users/smallmain/Documents/Work/test/engine/polyfill/array-buffer.js","Users/smallmain/Documents/Work/test/engine/polyfill/array.js","Users/smallmain/Documents/Work/test/engine/polyfill/misc.js","Users/smallmain/Documents/Work/test/engine/polyfill/number.js","Users/smallmain/Documents/Work/test/engine/polyfill/object.js","Users/smallmain/Documents/Work/test/engine/polyfill/string.js","Users/smallmain/Documents/Work/test/engine/polyfill/typescript.js","Users/smallmain/Documents/Work/test/engine/predefine.js"],"names":["outer","modules","cache","entry","newRequire","name","jumped","module","moduleData","exports","x","i","length","1","require","1001","1002","1003","1004","1005","1006","1007","1008","1009","1010","1011","1012","1013","1014","1015","1016","1019","1020","1021","1022","1023","1024","1025","1026","1027","1028","1029","1030","1031","1100","1101","1200","1201","1203","1204","1205","1206","1207","1208","1209","1210","1211","1212","1213","1214","1215","1216","1300","1400","1404","1405","1406","1408","1502","1503","1504","1505","1506","1507","1508","1509","1510","1511","1513","1605","1606","1610","1612","1613","1617","1618","1619","1620","1623","1624","1625","1626","1627","1632","1633","1634","1635","1636","1637","1638","1639","1800","1801","1802","1803","1900","2000","2200","2201","2300","2400","2602","2603","2606","2607","2608","2609","2610","2614","2616","2617","2618","2619","2623","2625","2626","2627","2628","2712","3005","3006","3007","3103","3112","3113","3116","3117","3119","3120","3121","3300","3400","3401","3500","3501","3502","3503","3504","3505","3506","3507","3508","3509","3510","3511","3600","3601","3602","3603","3604","3605","3606","3607","3608","3609","3610","3611","3612","3613","3614","3615","3616","3617","3618","3619","3620","3621","3622","3623","3624","3625","3626","3627","3628","3633","3634","3635","3636","3637","3638","3639","3640","3641","3642","3643","3644","3645","3646","3647","3648","3649","3651","3652","3653","3654","3655","3700","3701","3800","3801","3802","3803","3804","3805","3806","3807","3808","3809","3810","3811","3812","3813","3814","3815","3816","3817","3818","3819","3820","3821","3900","3901","3902","3903","3904","3905","3906","3907","3912","4003","4004","4011","4012","4013","4200","4201","4202","4300","4400","4600","4700","4800","4901","4902","4914","4915","4916","4921","4922","4923","4924","4925","4926","4927","4928","4929","4930","4932","4933","5000","5001","5100","5200","5201","5202","5300","5301","5302","5303","5304","5402","5403","5404","5405","5406","5500","5501","5507","5508","5510","5511","5512","5513","5514","5515","5516","5517","5601","5602","5603","5700","5800","5801","5802","5900","5901","5902","6000","6001","6017","6018","6019","6020","6021","6022","6023","6024","6025","6026","6027","6028","6029","6030","6031","6032","6400","6402","6500","6600","6601","6700","6800","6801","6900","6901","6902","6903","6904","6905","7100","7101","7200","7201","7202","7203","7210","7211","7215","7216","7217","7218","7219","7221","7222","7236","7237","7238","7239","7240","7241","7401","7402","7501","7502","7503","7504","7506","7507","7508","7509","7510","7600","7601","7602","7603","7604","7605","7700","7701","7702","7800","7801","7802","7803","7804","7805","7900","7901","7902","7903","7904","7905","7906","7907","7908","7909","8000","8001","8002","8003","8103","8104","8105","8106","8107","8108","8109","8200","8300","8301","8400","8401","9000","9001","9100","9101","9102","9103","9104","9105","9106","9107","9200","0100","2","misc","cc","Action","Class","ctor","this","originalTarget","target","tag","TAG_INVALID","clone","action","isDone","startWithTarget","stop","step","dt","logID","update","getTarget","setTarget","getOriginalTarget","setOriginalTarget","getTag","setTag","retain","release","FiniteTimeAction","extends","_duration","getDuration","_timesForRepeat","setDuration","duration","reverse","Speed","speed","_speed","_innerAction","initWithAction","getSpeed","setSpeed","errorID","prototype","call","setInnerAction","getInnerAction","Follow","followedNode","rect","_followedNode","_boundarySet","_boundaryFullyCovered","_halfScreenSize","_fullScreenSize","leftBoundary","rightBoundary","topBoundary","bottomBoundary","_worldRect","initWithTarget","locRect","Rect","y","width","height","isBoundarySet","setBoudarySet","value","_this","winSize","v2","mul","targetWorldPos","convertToWorldSpaceAR","Vec2","ZERO","followedWorldPos","delta","sub","tempPos","parent","convertToNodeSpaceAR","add","setPosition","clampf","activeInHierarchy","follow","../core/platform/CCClass","../core/utils/misc","3","cardinalSplineAt","p0","p1","p2","p3","tension","t","t2","t3","s","b1","b2","b3","b4","getControlPointAt","controlPoints","pos","p","Math","min","max","reverseControlPoints","newArray","push","cloneControlPoints","CardinalSplineTo","ActionInterval","points","_points","_deltaT","_tension","_previousPosition","_accumulatedDiff","undefined","initWithDuration","setPoints","_computeEaseTime","lt","ps","locDT","newPos","macro","ENABLE_STACKABLE_ACTIONS","tempX","tempY","locAccDiff","updatePosition","reversePoints","cardinalSplineTo","getPoints","CardinalSplineBy","_startPosition","copyConfig","slice","current","reverseArray","pop","unshift","cardinalSplineBy","posX","posY","a","CatmullRomTo","catmullRomTo","CatmullRomBy","catmullRomBy","4","easeIn","rate","_rate","easing","pow","easeOut","easeInOut","_easeExponentialInObj","_easeExponentialOutObj","easeExponentialIn","easeExponentialOut","_easeExponentialInOutObj","easeExponentialInOut","_easeSineInObj","cos","PI","_easeSineOutObj","easeSineIn","sin","easeSineOut","_easeSineInOutObj","easeSineInOut","_easeElasticInObj","_easeElasticOutObj","easeElasticIn","period","_period","easeElasticOut","easeElasticInOut","newT","locPeriod","_bounceTime","time1","_easeBounceInObj","_easeBounceOutObj","easeBounceIn","easeBounceOut","_easeBounceInOutObj","easeBounceInOut","_easeBackInObj","overshoot","_easeBackOutObj","easeBackIn","easeBackOut","_easeBackInOutObj","easeBackInOut","easeBezierAction","b","c","d","_easeQuadraticActionIn","time","easeQuadraticActionIn","_easeQuadraticActionOut","easeQuadraticActionOut","_easeQuadraticActionInOut","resultTime","easeQuadraticActionInOut","_easeQuarticActionIn","easeQuarticActionIn","_easeQuarticActionOut","easeQuarticActionOut","_easeQuarticActionInOut","easeQuarticActionInOut","_easeQuinticActionIn","easeQuinticActionIn","_easeQuinticActionOut","easeQuinticActionOut","_easeQuinticActionInOut","easeQuinticActionInOut","_easeCircleActionIn","sqrt","easeCircleActionIn","_easeCircleActionOut","easeCircleActionOut","_easeCircleActionInOut","easeCircleActionInOut","_easeCubicActionIn","easeCubicActionIn","_easeCubicActionOut","easeCubicActionOut","_easeCubicActionInOut","easeCubicActionInOut","5","ActionInstant","Show","_renderComps","getComponentsInChildren","RenderComponent","render","enabled","Hide","show","hide","ToggleVisibility","toggleVisibility","RemoveSelf","isNeedCleanUp","_isNeedCleanUp","init","removeFromParent","removeSelf","DestroySelf","destroy","destroySelf","FlipX","flip","_flippedX","initWithFlipX","scaleX","abs","flipX","FlipY","_flippedY","initWithFlipY","scaleY","flipY","Place","_x","_y","initWithPosition","place","CallFunc","selector","selectorTarget","data","_selectorTarget","_function","_data","initWithFunction","execute","getTargetCallback","setTargetCallback","sel","callFunc","6","MAX_VALUE","_elapsed","_firstTick","_easeList","_repeatForever","_repeatMethod","_speedMethod","getElapsed","FLT_EPSILON","_cloneDecoration","_reverseEaseList","easeObj","arguments","locList","n","setAmplitudeRate","amp","getAmplitudeRate","repeat","times","round","isNaN","repeatForever","actionInterval","Sequence","tempArray","_actions","_split","_last","_reversed","paramArray","Array","last","prev","action1","_actionOneTwo","initWithTwoActions","actionOne","actionTwo","durationOne","durationTwo","new_t","found","locSplit","locActions","locLast","actionFound","sequence","result","Repeat","_times","_total","_nextDt","_actionInstant","locInnerAction","locDuration","locTimes","locNextDt","RepeatForever","Spawn","_one","_two","action2","ret","d1","d2","delayTime","spawn","pSpawn","RotateTo","statics","_reverse","dstAngle","_startAngle","_dstAngle","_angle","startAngle","angle","rotateTo","RotateBy","deltaAngle","_deltaAngle","rotateBy","MoveBy","deltaPos","deltaY","_positionDelta","position","locPosX","locPosY","locStartPosition","targetX","targetY","locPreviousPosition","moveBy","MoveTo","_endPosition","moveTo","SkewTo","sx","sy","_skewX","_skewY","_startSkewX","_startSkewY","_endSkewX","_endSkewY","_deltaX","_deltaY","skewX","skewY","skewTo","SkewBy","deltaSkewX","deltaSkewY","skewBy","JumpBy","jumps","_delta","_height","_jumps","frac","jumpBy","JumpTo","jumpTo","bezierAt","BezierBy","_config","newConfigs","selConf","locConfig","xa","xb","xc","xd","ya","yb","yc","yd","x0","y0","x1","y1","x2","y2","r","bezierBy","BezierTo","_toConfig","locStartPos","locToConfig","bezierTo","ScaleTo","_scaleX","_scaleY","_startScaleX","_startScaleY","_endScaleX","_endScaleY","scaleTo","ScaleBy","scaleBy","Blink","blinks","_originalState","m","opacity","blink","FadeTo","_toOpacity","_fromOpacity","fromOpacity","fadeTo","FadeIn","_reverseAction","FadeOut","fadeIn","fadeOut","TintTo","red","green","blue","_to","color","_from","Color","g","locTo","locFrom","tintTo","TintBy","deltaRed","deltaGreen","deltaBlue","_deltaR","_deltaG","_deltaB","_fromR","_fromG","_fromB","tintBy","DelayTime","ReverseTime","_other","reverseTime","TargetedAction","_action","_forcedTarget","getForcedTarget","setForcedTarget","forcedTarget","targetedAction","7","js","HashElement","actions","actionIndex","currentAction","paused","lock","ActionManager","_hashTargets","createMap","_arrayTargets","_currentTarget","director","_scheduler","enableForTarget","constructor","_elementPool","_searchElementByTarget","arr","k","_getElement","element","_putElement","addAction","_id","removeAllActions","locTargets","removeAllActionsFromTarget","forceDelete","_deleteHashElement","removeAction","splice","_removeActionByTag","l","_removeActionAtIndex","removeActionByTag","hashTargets","_element","getActionByTag","getNumberOfRunningActionsInTarget","pauseTarget","resumeTarget","pauseAllRunningActions","idsWithActions","resumeTargets","targetsToResume","pauseTargets","targetsToPause","purgeSharedManager","getScheduler","unscheduleUpdate","index","targets","locCurrTarget","elt","CC_TEST","../core/platform/js","8","./CCAction","./CCActionCatmullRom","./CCActionEase","./CCActionInstant","./CCActionInterval","./CCActionManager","./tween","9","_bezier","_tweenID","TweenAction","props","opts","_opts","Object","create","_props","progress","easingName","warnID","relative","isNumber","lerp","warn","prop","_originProps","start","end","easingTime","onUpdate","SetAction","Tween","_finalAction","_target","_tag","stopAll","getActionManager","stopAllByTag","stopAllByTarget","then","other","_union","isValid","tween","union","assign","c1","c2","to","c0x","c0y","c1x","c1y","bezier","by","_this2","tmp_args","wrapAction","arg","apply","set","delay","parallel","previousAsInputActions","keys","_loop","key","_loop2","_i","args","_i2","../animation/bezier","10","Playable","_require","EventAnimCurve","EventInfo","WrapModeMask","binarySearch","binarySearchEpsilon","AnimationAnimator","animation","_anims","array","MutableForwardIterator","extend","playState","state","startTime","clip","curveLoaded","initClipData","animator","play","setTime","stopStatesExcept","iterator","anim","stopState","addAnimation","indexOf","_setEventTarget","removeAnimation","fastRemoveAt","sample","pauseState","pause","resumeState","resume","isPaused","setStateTime","onStop","onPause","onResume","_reloadClip","createBatchedProperty","propPath","firstDotIndex","mainValue","animValue","nextValue","leftIndex","rightIndex","nextName","lastPropName","root","wrapMode","frameRate","Loop","repeatCount","Infinity","curves","createCurves","events","curve","eventData","ratio","frame","eventInfo","ratios","func","params","../core/utils/binary-search","./animation-curves","./playable","./types","11","WrapMode","DynamicAnimCurve","quickFindIndex","sampleMotionPaths","AnimationClip","Asset","properties","default","type","Float","get","Normal","curveData","visible","createWithSpriteFrames","spriteFrames","isArray","frames","comps","cc.Sprite","spriteFrame","onLoad","Number","parseFloat","parseInt","createPropCurve","keyframes","motionPaths","isMotionPathProp","Node","keyframe","motionPath","curveValue","values","curveTypes","types","Linear","Bezier","currRatioDif","lastRatioDif","canOptimize","EPSILON","_l","_findFrameIndex","firstValue","_lerp","_lerpNumber","Quat","_lerpQuat","_lerpVector2","Vec3","_lerpVector3","_lerpObject","createTargetCurves","propsData","compsData","compName","comp","getComponent","compData","_propPath","_curve","childrenCurveDatas","paths","namePath","find","childCurveDatas","./motion-path-helper","12","bezierByTime","WrappedInfo","computeRatioByType","AnimCurve","onTimeChangedManually","eachLength","floorIndex","_cachedIndex","from","out","quat","v3","frameCount","shoudRefind","cachedIndex","_fromRatio","_toRatio","fromVal","fromRatio","toRatio","ratioBetweenFrames","toVal","_wrappedInfo","_default","_lastWrappedInfo","_ignoreIndex","NaN","_wrapIterations","iterations","currentWrappedInfo","getWrappedInfo","direction","currentIndex","frameIndex","_fireEvent","currentIterations","lastWrappedInfo","lastIterations","lastIndex","lastDirection","interationsChanged","PingPong","getAnimationManager","pushDelayEvent","components","_components","event","funcName","j","component","info","./bezier","13","AnimationManager","_delayEvents","_isPlaying","_isPaused","destruct","14","Types","AnimationState","_currentFramePlayed","_delay","_delayTime","_process","process","_clip","_name","_lastframeEventOn","emit","proto","_emit","on","callback","once","self","off","hasEventListener","onPlay","lastInfo","stopped","simpleProcess","len","_lastIterations","_needRevers","needRevers","isEnd","isOddIteration","Reverse","tempRatio","tempTime","shouldWrap","_wrapMode","ShouldWrap","obsolete","getset","CC_EDITOR","_repeatCount","15","C1","C2","C3","C4","t1","acos","pi","tau","crt","v","cardano","pa","pb","pc","pd","pa3","pb3","pc3","rd","r3","a3","q","q2","discriminant","u1","v1","x3","mp3","mp33","cosphi","phi","crtr","sd","percent","p1y","p2y","16","constant","linear","quadIn","quadOut","quadInOut","cubicIn","cubicOut","cubicInOut","quartIn","quartOut","quartInOut","quintIn","quintOut","quintInOut","sineIn","sineOut","sineInOut","expoIn","expoOut","expoInOut","circIn","circOut","circInOut","elasticIn","asin","elasticOut","elasticInOut","backIn","backOut","backInOut","bounceIn","bounceOut","bounceInOut","smooth","fade","_makeOutIn","fnIn","fnOut","quadOutIn","cubicOutIn","quartOutIn","quintOutIn","sineOutIn","expoOutIn","circOutIn","backOutIn","bounceOutIn","17","./animation-animator","./animation-clip","./animation-manager","./animation-state","./easing","18","Curve","beziers","progresses","computeBeziers","startPoint","endPoint","startCtrlPoint","endCtrlPoint","getLength","getPointAt","u","getUtoTmapping","getPoint","lengths","getLengths","divisions","__arcLengthDivisions","cacheArcLengths","vector","sum","mag","distance","arcLengths","il","targetArcLength","low","high","comparison","floor","lengthBefore","lengthAfter","segmentLength","segmentFraction","checkMotionPath","controls","fps","createControlPoints","in","map","motionPathValid","_motionPath","newValues","newTypes","newRatios","addNewDatas","startRatioOffset","newType","nextRatio","betweenRatio","results","finalProgress","l2","normal","normalize","bezierIndex","newRatio","19","debug","_stepOnce","virtual","onError","getError","../core/CCDebug","20","Enum","Default","LoopReverse","PingPongReverse","21","utils","debugInfos","ERROR_MAP_URL","logList","log","error","assert","console","bind","resetDebugSetting","mode","DebugMode","NONE","ERROR","logToWebPage","msg","game","canvas","logDiv","document","createElement","setAttribute","logDivStyle","style","zIndex","top","left","logListStyle","backgroundColor","borderBottom","borderTopWidth","borderLeftWidth","borderRightWidth","borderTopStyle","borderLeftStyle","borderRightStyle","padding","margin","appendChild","parentNode","scrollTop","scrollHeight","formatStr","cond","shiftArguments","ERROR_FOR_WEB_PAGE","INFO_FOR_WEB_PAGE","CC_JSB","CC_DEV","Error","INFO","CC_RUNTIME","_throw","callInNextTick","getTypedFormatter","id","argsArray","concat","logFormatter","warnFormatter","errorFormatter","assertFormatter","assertID","WARN","WARN_FOR_WEB_PAGE","_resetDebugSetting","isDisplayStats","profiler","isShowingStats","setDisplayStats","displayStats","renderType","RENDER_TYPE_CANVAS","showStats","hideStats","config","showFPS","../../DebugInfos","./platform/utils","22","EventTarget","ComponentScheduler","NodeActivator","Obj","renderer","eventManager","Scheduler","Director","_paused","_purgeDirectorInNextLoop","_winSizeInPoints","_scene","_loadingScene","_totalFrames","_lastUpdate","_deltaTime","_startTime","_maxParticleDeltaTime","_compScheduler","_nodeActivator","_actionManager","EVENT_SHOW","performance","now","EVENT_ENGINE_INITED","size","scheduleUpdate","PRIORITY_SYSTEM","sharedInit","setEnabled","_animationManager","CollisionManager","_collisionManager","PhysicsManager","_physicsManager","Physics3DManager","CC_PHYSICS_BUILTIN","CC_PHYSICS_CANNON","_physics3DManager","_widgetManager","calculateDeltaTime","CC_DEBUG","convertToGL","uiPoint","container","view","box","getBoundingClientRect","window","pageXOffset","clientLeft","pageYOffset","clientTop","_devicePixelRatio","_isRotated","_viewportRect","convertToUI","glPoint","getWinSize","getWinSizeInPixels","purgeCachedData","assetManager","releaseAll","purgeDirector","unscheduleAll","reset","clear","builtins","runSceneImmediate","scene","onBeforeLoadScene","onLaunched","Scene","SceneAsset","CC_BUILD","_load","timeEnd","persistNodeList","_persistRootNodes","node","existNode","getChildByUuid","uuid","getSiblingIndex","_destroyImmediate","insertChild","oldScene","_releaseManager","_autoRelease","_deferredDestroy","EVENT_BEFORE_SCENE_LAUNCH","_activate","EVENT_AFTER_SCENE_LAUNCH","runScene","EVENT_AFTER_DRAW","loadScene","sceneName","_onUnloaded","bundle","bundles","getSceneInfo","EVENT_BEFORE_SCENE_LOADING","err","preloadScene","onProgress","onLoaded","setDepthTest","Camera","main","depth","setClearColor","clearColor","getRunningScene","getScene","getAnimationInterval","getFrameRate","setAnimationInterval","setFrameRate","getDeltaTime","getTotalTime","getTotalFrames","setScheduler","scheduler","setActionManager","actionManager","getCollisionManager","getPhysicsManager","getPhysics3DManager","startAnimation","stopAnimation","_resetDeltaTime","mainLoop","EVENT_BEFORE_UPDATE","startPhase","updatePhase","lateUpdatePhase","EVENT_AFTER_UPDATE","EVENT_BEFORE_DRAW","frameUpdateListeners","__fastOn","__fastOff","addon","EVENT_PROJECTION_CHANGED","EVENT_BEFORE_VISIT","EVENT_AFTER_VISIT","PROJECTION_2D","PROJECTION_3D","PROJECTION_CUSTOM","PROJECTION_DEFAULT","EVENT_BEFORE_PHYSICS","EVENT_AFTER_PHYSICS","./CCGame","./CCScheduler","./component-scheduler","./event-manager","./event/event-target","./node-activator","./platform/CCObject","./renderer","23","dynamicAtlasManager","EVENT_HIDE","EVENT_RESTART","EVENT_GAME_INITED","EVENT_RENDERER_INITED","RENDER_TYPE_WEBGL","RENDER_TYPE_OPENGL","_configLoaded","_isCloning","_prepared","_rendererInitialized","_renderContext","_intervalId","_lastTime","_frameTime","onStart","cancelAnimFrame","_setAnimFrame","_runMainLoop","audioEngine","_break","_restore","restart","removePersistRootNode","uncacheAll","close","_initEngine","_initRenderer","_initEvents","_loadPreviewScript","cb","CC_PREVIEW","_prepareFinished","ENGINE_VERSION","eventTargetOn","eventTargetOnce","prepare","run","_initConfig","addPersistRootNode","isNode","_persistNode","_addPersistNodeRef","_removePersistNodeRef","isPersistRootNode","rAF","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","requestAnimFrame","_stTimeWithRAF","_stTime","_ctTime","cancelAnimationFrame","cancelRequestAnimationFrame","msCancelRequestAnimationFrame","mozCancelRequestAnimationFrame","oCancelRequestAnimationFrame","webkitCancelRequestAnimationFrame","msCancelAnimationFrame","mozCancelAnimationFrame","webkitCancelAnimationFrame","oCancelAnimationFrame","currTime","timeToCall","setTimeout","clearTimeout","_callback","skip","debugMode","exposeClassName","renderMode","registerSystemEvent","collisionMatrix","groupList","_determineRenderType","userRenderMode","supportRender","sys","capabilities","el","localCanvas","localContainer","addClass","hasClass","className","HTMLElement","querySelector","tagName","insertBefore","clientWidth","clientHeight","body","documentElement","stencil","antialias","ENABLE_WEBGL_ANTIALIAS","alpha","ENABLE_TRANSPARENT_CANVAS","initWebGL","device","_gl","CLEANUP_IMAGE_CACHE","initCanvas","_ctx","oncontextmenu","_isContextMenuEnable","win","hiddenPropName","internal","inputManager","hidden","mozHidden","msHidden","webkitHidden","onHidden","onShown","arg0","arg1","arg2","arg3","arg4","changeList","addEventListener","navigator","userAgent","onfocus","../audio/CCAudioEngine","../core/renderer/utils/dynamic-atlas/manager","./CCDebug","./renderer/index.js","24","_valueTypes","BaseNode","PrefabHelper","nodeMemPool","NodeMemPool","AffineTrans","Event","RenderFlow","Flags","Destroying","ERR_INVALID_NUMBER","ONE_DEGREE","ActionManagerExist","emptyFunc","_gwpVec3","_gwpQuat","_tpVec3a","_tpVec3b","_tpQuata","_tpQuatb","_swpVec3","_gwsVec3","_swsVec3","_gwrtVec3a","_gwrtVec3b","_gwrtQuata","_gwrtQuatb","_laVec3","_laQuat","_urfVec3","_urfQuat","_htVec3a","_htVec3b","_gwrQuat","_swrQuat","_quata","_mat4_temp","mat4","_vec3_temp","_cachedArray","POSITION_ON","SCALE_ON","ROTATION_ON","SIZE_ON","ANCHOR_ON","COLOR_ON","BuiltinGroupIndex","DEBUG","LocalDirtyFlag","POSITION","SCALE","ROTATION","SKEW","TRS","RS","TRSS","PHYSICS_POSITION","PHYSICS_SCALE","PHYSICS_ROTATION","PHYSICS_TRS","PHYSICS_RS","ALL_POSITION","ALL_SCALE","ALL_ROTATION","ALL_TRS","ALL","EventType","TOUCH_START","TOUCH_MOVE","TOUCH_END","TOUCH_CANCEL","MOUSE_DOWN","MOUSE_MOVE","MOUSE_ENTER","MOUSE_LEAVE","MOUSE_UP","MOUSE_WHEEL","POSITION_CHANGED","ROTATION_CHANGED","SCALE_CHANGED","SIZE_CHANGED","ANCHOR_CHANGED","COLOR_CHANGED","CHILD_ADDED","CHILD_REMOVED","CHILD_REORDER","GROUP_CHANGED","SIBLING_ORDER_CHANGED","_touchEvents","_mouseEvents","_skewNeedWarn","_skewWarn","nodePath","NodeUtils","_currentHovered","_touchStartHandler","touch","getLocation","owner","_hitTest","bubbles","dispatchEvent","_touchMoveHandler","_touchEndHandler","_touchCancelHandler","_mouseDownHandler","_mouseMoveHandler","hit","_previousIn","_mouseListener","stopPropagation","_mouseUpHandler","_mouseWheelHandler","_searchComponentsInParent","list","curr","_parent","next","_checkListeners","_objFlags","_bubblingListeners","_capturingListeners","_doDispatchEvent","_getCapturingTargets","eventPhase","currentTarget","_propagationStopped","_propagationImmediateStopped","_getBubblingTargets","_getActualGroupIndex","groupIndex","_updateCullingMask","_cullingMask","_children","updateLocalMatrix3D","_localMatDirty","_matrix","tm","Trs","toMat4","_trs","skx","tan","sky","_worldMatDirty","updateLocalMatrix2D","dirtyFlag","trs","rotation","_eulerAngles","z","hasSkew","rotationRadians","_a","_b","_c","_d","calculWorldMatrix3D","_updateLocalMatrix","parentMat","_worldMatrix","Mat4","copy","calculWorldMatrix2D","_mulMat","mulMat2D","am","bm","outm","aa","ab","ac","ad","atx","aty","ba","bb","bc","bd","btx","bty","mulMat3D","NodeDefines","_opacity","_color","WHITE","_contentSize","Size","_anchorPoint","_position","_scale","_zIndex","Integer","_localZOrder","serializable","_is3DNode","_groupIndex","formerlySerializedAs","group","oldValue","setLocalDirty","_eventMask","_renderFlag","FLAG_WORLD_TRANSFORM","fromAngleZ","rotationX","fromEulerNumber","rotationY","eulerAngles","toEuler","fromEuler","FLAG_TRANSFORM","setRotation","scale","setScale","scaleZ","FLAG_OPACITY_COLOR","range","equals","FLAG_COLOR","anchorX","anchorPoint","anchorY","MAX_ZINDEX","MIN_ZINDEX","_onSiblingIndexChanged","is3DNode","_update3DFunction","up","_up","transformQuat","UP","getWorldRotation","right","_right","RIGHT","forward","_forward","FORWARD","_reorderChildDirty","_widget","_renderComponent","_touchListener","_initDataFromPool","_childArrivalOrder","_LocalDirtyFlag","obj","_delaySort","_onPreDestroy","destroyByParent","_onPreDestroyBase","removeListeners","mask","_backDataIntoPool","sortAllChildren","_onPostActivated","active","_checkListenerMask","_onHierarchyChanged","oldParent","_updateOrderOfArrival","_onHierarchyChangedBase","_nodesOrderDirty","_activeInHierarchy","_calculWorldMatrix","_on3DNodeChanged","_spaceInfo","spaceInfo","localMat","identity","worldMat","_toEuler","_fromEuler","_initProperties","desTrs","subarray","_onBatchCreated","dontSyncChildPrefab","children","child","prefabInfo","_prefab","sync","syncWithPrefab","FLAG_CHILDREN","Mask","_checknSetupSysEvent","newAdded","forDispatch","EventListener","TOUCH_ONE_BY_ONE","swallowTouches","onTouchBegan","onTouchMoved","onTouchEnded","onTouchCancelled","addListener","MOUSE","onMouseDown","onMouseMove","onMouseUp","onMouseScroll","schedule","useCapture","_onDispatch","listeners","__eventTargets","touchEvent","mouseEvent","_offDispatch","removeListener","hasListeners","fastRemove","removeAll","targetOff","has","arg5","pauseSystemEvents","recursive","resumeSystemEvents","point","listener","w","h","cameraPt","testPt","camera","findCamera","getScreenToWorldPoint","_updateWorldMatrix","invert","transformMat4","temp","_enabled","runAction","_suppressDeprecation","pauseAllActions","resumeAllActions","stopAllActions","stopAction","stopActionByTag","getNumberOfRunningActions","getPosition","toPosition","newPosOrX","oldPosition","getScale","toScale","newScaleOrX","getRotation","toRotation","getContentSize","setContentSize","locContentSize","getAnchorPoint","setAnchorPoint","locAnchorPoint","_invTransformPoint","ltrs","conjugate","inverseSafe","getWorldPosition","setWorldPosition","fromPosition","setWorldRotation","val","fromRotation","getWorldScale","setWorldScale","div","fromScale","getWorldRT","opos","orot","fromRT","lookAt","fromViewUp","flag","setWorldDirty","getLocalMatrix","getWorldMatrix","worldPoint","nodePoint","convertToNodeSpace","convertToWorldSpace","getNodeToParentTransform","contentSize","transform","fromMat4","getNodeToParentTransformAR","getNodeToWorldTransform","getNodeToWorldTransformAR","getParentToNodeTransform","getWorldToNodeTransform","convertTouchToNodeSpace","convertTouchToNodeSpaceAR","getBoundingBox","getBoundingBoxToWorld","_getBoundingBoxTo","locChildren","childRect","arrivalOrder","addChild","cleanup","_setDirtyForNode","_child","child2","count","_restoreProperties","onRestore","_p","vec3_tmp","./event/event","./platform/CCMacro","./platform/js","./renderer/render-flow","./utils/affine-transform","./utils/base-node","./utils/prefab-helper","./utils/trans-pool","./value-types","25","_createForOfIteratorHelperLoose","o","allowArrayLike","it","Symbol","_unsupportedIterableToArray","done","TypeError","minLen","_arrayLikeToArray","toString","test","arr2","HideInHierarchy","PrivateNode","_originPos","localPosition","_posDirty","override","showInEditor","editorOnly","sendEvent","_super","setParent","getParent","./CCNode","26","NIL","autoReleaseAssets","_inited","dependAssets","_active","_instantiate","activateNode","27","IdGenerater","MAX_POOL_SIZE","idGenerater","ListEntry","priority","markedForDeletion","_listEntries","put","HashUpdateEntry","_hashUpdateEntries","HashTimerEntry","timers","timerIndex","currentTimer","currentTimerSalvaged","_t","_hashTimerEntries","CallbackTimer","_lock","_runForever","_useDelay","_timesExecuted","_repeat","_interval","initWithCallback","seconds","REPEAT_FOREVER","getInterval","setInterval","interval","trigger","cancel","getCallback","unschedule","_timers","timer","_timeScale","_updatesNegList","_updates0List","_updatesPosList","_hashForUpdates","_hashForTimers","_currentTargetSalvaged","_updateHashLocked","_arrayForTimers","_removeHashElement","_removeUpdateFromHash","targetId","listEntry","_priorityIn","ppList","listElement","_appendIn","__instanceId","getNewId","setTimeScale","timeScale","getTimeScale","tmp","hashElement","li","unscheduleAllForTarget","unscheduleAllWithMinPriority","minPriority","temp_length","isScheduled","pauseAllTargets","pauseAllTargetsWithMinPriority","idsWithSelectors","locArrayForTimers","elementUpdate","isTargetPaused","PRIORITY_NON_SYSTEM","./platform/id-generater","28","preprocess","fetch","Cache","helper","releaseManager","dependUtil","load","Pipeline","Task","RequestItem","downloader","parser","packManager","Bundle","factory","parse","combine","_require2","parseParameters","asyncify","_require3","assets","files","parsed","pipeline","transformPipeline","fetchPipeline","RequestType","BuiltinBundleName","AssetManager","_preprocessPipe","_fetchPipe","_loadPipe","append","_files","_parsed","generalImportBase","generalNativeBase","cacheAsset","force","cacheManager","presets","preload","maxConcurrency","maxRequestsPerFrame","remote","maxRetryCount","script","MAIN","resources","RESOURCES","INTERNAL","options","bundleVers","server","importBase","nativeBase","getBundle","removeBundle","_destroy","remove","loadAny","requests","onComplete","_parseParameters","preset","task","input","async","preloadAny","_parseParameters2","postLoadNative","asset","_parseParameters3","_native","_nativeAsset","depend","getNativeDep","_uuid","getAssetInfo","message","stack","loadRemote","url","_parseParameters4","__isNative__","ext","path","extname","loadScript","_parseParameters5","__requestType__","URL","loadBundle","nameOrUrl","_parseParameters6","bundleName","basename","releaseAsset","tryRelease","releaseUnusedAssets","forEach","_transform","subTask","urls","item","recycle","e","output","defineProperty","./builtins","./bundle","./cache","./depend-util","./downloader","./factory","./fetch","./helper","./load","./pack-manager","./parser","./pipeline","./preprocess","./releaseManager","./request-item","./shared","./task","./urlTransformer","./utilities","29","_assets","material","effect","_loadBuiltins","dirname","builtin","loadDir","addRef","_loadBuiltinsSP","sp","MAX_MULTITEXTURE_NUM","_loadMultiEffect","multi2dSpriteEffectAsset","inited","multiBatcher","maxAtlasCount","charAtlasAutoBatchCount","EffectAsset","getBuiltin","30","Config","parseLoadResArgs","deps","base","getInfoWithPath","getDirWithPath","_parseLoadResArgs","PATH","__outputAsArray__","_parseLoadResArgs2","dir","_parseLoadResArgs3","DIR","preloadDir","_parseLoadResArgs4","sceneAsset","redirect","./config","31","_map","_count","predicate","../platform/js","32","processOptions","assetInfos","scenes","_initUuid","uuids","_initPath","_initScene","_initPackage","packs","_initVersion","versions","_initRedirect","uuidList","pathList","isSubAsset","assetInfo","_getClassById","sceneList","packageList","packUuid","pack","assetPacks","entries","ver","nativeVer","items","isChildClassOf","infos","isMatchByWord","nextAscii","charCodeAt","startsWith","endsWith","33","_deserializeCompiled","_interopRequireWildcard","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","__esModule","newObj","hasPropertyDescriptor","getOwnPropertyDescriptor","hasOwnProperty","desc","deserialize","_depends","nativeDep","getDeps","getDepsRecursively","exclude","depends","_descend","json","__type__","hasNativeDep","_parseDepsFromJson","_parseDepsFromAsset","parsedFromExistAsset","preventPreloadNativeObject","preventDeferredLoadDependents","__depends__","dep","__nativeDepend__","_nativeDep","getDependUuidList","decodeUuid","../platform/deserialize-compiled","./deserialize","34","utilities","ImageFmts","AudioFmts","GetTrue","md5Pipe","transformURL","getUuidFromURL","hashValue","hashPatchInFolder","replace","match","loader","_autoReleaseSetting","_cache","progressCallback","completeCallback","images","audios","finish","total","content","includes","res","image","audio","isCompleted","getXMLHttpRequest","XMLHttpRequest","getItem","loadRes","_this$_parseLoadResAr","loadResArray","_this$_parseLoadResAr2","loadResDir","_this$_parseLoadResAr3","getRes","getResCount","getDependsRecursively","assetLoader","addDownloadHandlers","extMap","handler","register","addLoadHandlers","file","flowInDeps","isBuiltin","builtinAsset","_isBuiltin","releaseRes","releaseResDir","removeItem","setAutoRelease","autoRelease","setAutoReleaseRecursively","isAutoRelease","loadSubpackage","AssetLibrary","libraryPath","rawAssetsBase","rawAssets","loadAsset","getLibUrlNoExt","queryAssetInfo","raw","changeExtname","substr","onceWarns","assetLibrary","defineProperties","LoadingItems","DOWNLOAD_MAX_CONCURRENT","_getSceneUuid","_sceneInfos","releaseSettings","../CCDirector","35","MissingClass","classFinder","missingClass","_MissingScript","safeFindClass","pool","deserializeForCompiled","deserializeForEditor","Details","tdInfo","customEnv","objList","uuidObjList","propList","uuidPropList","dependUuid","../platform/deserialize","../platform/deserialize-editor","36","__audioSupport","downloadDomAudio","dom","src","clearEvent","removeEventListener","success","failure","USE_LOADER_EVENT","readyState","37","downloadDomImage","img","Image","location","protocol","crossOrigin","loadCallback","errorCallback","38","downloadFile","xhr","errInfo","open","responseType","withCredentials","mimeType","overrideMimeType","timeout","header","setRequestHeader","onload","status","response","onprogress","lengthComputable","loaded","onerror","ontimeout","onabort","send","39","downloaded","downloadScript","loadHandler","removeChild","errorHandler","40","loadFont","_require4","urlAppendTimestamp","retry","REGEX","formatSupport","format","unsupported","downloadAudio","audioLoadMode","AudioClip","LoadMode","DOM_AUDIO","downloadArrayBuffer","WEB_AUDIO","downloadImage","imageBitmap","ALLOW_IMAGE_BITMAP","downloadBlob","onFileProgress","downloadJson","JSON","downloadText","downloadVideo","downloadBundle","version","_downloading","_queue","_queueDirty","_totalNum","_totalNumThisPeriod","_lastDate","_checkNextPeriod","updateTime","Date","_maxInterval","handleQueue","sort","nextOne","invoke","_remoteServerAddress","remoteServerAddress","appendTimeStamp","limited","retryInterval","mixin","downloaders","download","downloadCallbacks","finale","callbacks",".png",".jpg",".bmp",".jpeg",".gif",".ico",".tiff",".webp",".image",".pvr",".pkm",".mp3",".ogg",".wav",".m4a",".txt",".xml",".vsh",".fsh",".atlas",".tmx",".tsx",".json",".ExportJson",".plist",".fnt",".font",".eot",".ttf",".woff",".svg",".ttc",".mp4",".avi",".mov",".mpg",".mpeg",".rm",".rmvb",".binary",".bin",".dbbin",".skel",".js","_downloaders","../CCDebug","../platform/CCSys","../platform/utils","./download-dom-audio","./download-dom-image","./download-file","./download-script.js","./font-loader","41","_creating","createTexture","Texture2D","_nativeUrl","createAudioClip","createJsonAsset","JsonAsset","createTextAsset","TextAsset","text","createFont","TTFFont","createBufferAsset","BufferAsset","createAsset","createBundle","producers","creating","42","getDepends","firstTask","canInvoke","__exclude__","isNative","handle","__asyncLoadAssets__","isFinish","dispatch","decreaseRef","decRef","loadDepends","43","textUtils","_canvasContext","_testString","_fontFaces","_loadingFonts","_timeout","useNativeCheck","nativeCheck","FontFace","exec","safari10Match","vendor","_checkFontLoaded","allFontsLoaded","fontLoadHandle","fontFamily","fontFamilyName","oldWidth","refWidth","fontDesc","font","newWidth","safeMeasureText","clearInterval","nativeCheckFontLoaded","Promise","resolve","reject","check","fonts","timeoutId","race","fontLoader","_getFontFamily","labelCanvas","getContext","fontStyle","fontStr","textContent","preloadDiv","divStyle","innerHTML","fontHandle","ttfIndex","lastIndexOf","slashPos","substring","../utils/text-utils","44","_uuidRegex","matches","getUrlWithUuid","nativeExt","isScene","../utils/decode-uuid","45","./CCAssetManager","./deprecated","46","gatherAsset","setProperties","checkCircleReference","loadOneAssetPipeline","reload","_exclude$uuid","repeatItem","dependAsset","missingAsset","__onLoadInvoked__","47","_loading","isLoading","unpackJson","unpackJSONs","textureType","_getClassId","datas","split","packCustomObjData","unpackers","unpack","unpacker","48","plistParser","_parsing","parseImage","Blob","imageOptions","imageOrientation","__flipY__","premultiplyAlpha","__premultiplyAlpha__","createImageBitmap","parseAudio","ArrayBuffer","context","decodeAudioData","buffer","parsePVRTex","PVR_HEADER_LENGTH","PVR_MAGIC","PVR_HEADER_MAGIC","PVR_HEADER_FORMAT","PVR_HEADER_HEIGHT","PVR_HEADER_WIDTH","PVR_HEADER_MIPMAPCOUNT","PVR_HEADER_METADATA","Int32Array","dataOffset","pvrtcData","Uint8Array","_compressed","parsePKMTex","ETC_PKM_HEADER_SIZE","ETC_PKM_FORMAT_OFFSET","ETC_PKM_ENCODED_WIDTH_OFFSET","ETC_PKM_ENCODED_HEIGHT_OFFSET","ETC_PKM_WIDTH_OFFSET","ETC_PKM_HEIGHT_OFFSET","ETC1_RGB_NO_MIPMAPS","ETC2_RGB_NO_MIPMAPS","ETC2_RGBA_NO_MIPMAPS","readBEUint16","offset","encodedWidth","encodedHeight","etcData","parsePlist","parseImport","parsers","parsedAsset","parsing","parseHandler","import","../platform/CCSAXParser","49","_pipelineId","funcs","pipes","insert","_isFinish","pipe","_flow","50","subOptions","leftOptions","op","UUID","SCENE","source","51","visitAsset","visitComponent","getOwnPropertyNames","propName","_j","_val","_temp","visitNode","descendOpRef","refs","refCount","checkCircularReference","_persistNodeDeps","_toDelete","eventListener","freeAssets","_free","newScene","persistNodes","childs","dependencies","persistDeps","_asset","sceneDeps","_i3","_l2","../assets/CCAsset","52","MAX_DEAD_NUM","_deadPool","53","START_SCENE","54","_taskId","param1","param2","param3","param4","str","toUpperCase","55","stringify","__nativeName__","56","MissingObjectReporter","realEntries","_entry","packId","packedIds","folder","_uuid2","clearRef","wait","asyncLoadAssets","includeNative","_i4","_dep","_isScene","assetsMap","missingAssetReporter","reportByOwner","errs","isCallback","isValidType","checked","57","CCObject","writable","_ref","nativeUrl","_$nativeAsset","serialize","createNode","_setRawAsset","filename","inLibrary","../platform/CCObject","58","mixins","_audio","loadMode","_loadByUrl","audioClip","_ensureLoaded","uncache","../event/event-target","./CCAsset","59","FontLetterDefinition","offsetX","offsetY","textureID","valid","xAdvance","FontAtlas","texture","_letterDefinitions","_texture","addLetterDefinitions","letter","letterDefinition","cloneLetterDefinition","copyLetterDefinitions","getTexture","getLetter","getLetterDefinitionForChar","_char","hasKey","BitmapFont","Font","fntDataStr","SpriteFrame","fontSize","_fntConfig","_fontDefDictionary","fntConfig","fontDict","fontDefDictionary","fontDef","xOffset","yOffset","60","_buffer","bin","61","62","63","LabelAtlas","64","OptimizationPolicy","AUTO","SINGLE_INSTANCE","MULTI_INSTANCE","Prefab","_createFunction","_instantiatedTimes","optimizationPolicy","readonly","OptimizationPolicyThreshold","compileCreateFunction","jit","compile","_doInstantiate","rootToRedirect","useJit","CC_SUPPORT_JIT","PrefabUtils","../platform/instantiate-jit","65","_gfx","_interopRequireDefault","DepthStencilFormat","RB_FMT_D24S8","RB_FMT_S8","RB_FMT_D16","RenderTexture","_framebuffer","initWithSize","depthStencilFormat","visibleRect","_resetUnderlyingMipmaps","colors","_depthStencilBuffer","depthStencilBuffer","RenderBuffer","depthStencil","FrameBuffer","_packable","updateSize","rbo","_width","drawTextureAt","_image","updateSubImage","level","_premultiplyAlpha","readPixels","gl","oldFBO","getParameter","FRAMEBUFFER_BINDING","bindFramebuffer","FRAMEBUFFER","getHandle","RGBA","UNSIGNED_BYTE","../../renderer/gfx","../renderer","./CCTexture2D","66","67","Script","_Script","JavaScript","_JavaScript","TypeScript","_TypeScript","68","SpriteAtlas","_spriteFrames","getSpriteFrame","sf","getSpriteFrames","69","INSET_LEFT","INSET_TOP","INSET_RIGHT","INSET_BOTTOM","temp_uvs","_textureSetter","_refreshTexture","insetTop","_capInsets","_calculateSlicedUV","insetBottom","insetLeft","insetRight","rotated","originalSize","_rect","uv","_original","_offset","_originalSize","_rotated","_flipX","_flipY","vertices","uvSliced","setTexture","textureLoaded","onTextureLoaded","ensureLoadTexture","isRotated","setRotated","bRotated","_calculateUV","isFlipX","isFlipY","setFlipX","setFlipY","getRect","setRect","getOriginalSize","setOriginalSize","_textureLoadedCallback","_checkRect","setOffset","getOffset","offsets","maxX","maxY","_flipXY","uvs","tempVal","_tempVal","atlasWidth","atlasHeight","leftWidth","rightWidth","centerWidth","topHeight","bottomHeight","centerHeight","row","rowD","col","colD","_row","_rowD","_col","_colD","_setDynamicAtlasFrame","_resetDynamicAtlasFrame","texw","texh","_r","_tempVal2","nu","nv","_serialize","exporting","ctx","_textureFilename","Editor","Utils","UuidCache","urlToUuid","UuidUtils","compressUuid","dependsOn","triangles","atlas","_atlasUuid","capInsets","_deserialize","textureUuid","deleteSpriteFrame","copyWithZone","initWithTexture","70","_fontFamily","String","./CCFont","71","72","GL_NEAREST","GL_LINEAR","GL_REPEAT","GL_CLAMP_TO_EDGE","GL_MIRRORED_REPEAT","GL_RGBA","CHAR_CODE_0","CHAR_CODE_1","CUSTOM_PIXEL_FORMAT","PixelFormat","RGB565","TEXTURE_FMT_R5_G6_B5","RGB5A1","TEXTURE_FMT_R5_G5_B5_A1","RGBA4444","TEXTURE_FMT_R4_G4_B4_A4","RGB888","TEXTURE_FMT_RGB8","RGBA8888","TEXTURE_FMT_RGBA8","RGBA32F","TEXTURE_FMT_RGBA32F","A8","TEXTURE_FMT_A8","I8","TEXTURE_FMT_L8","AI8","TEXTURE_FMT_L8_A8","RGB_PVRTC_2BPPV1","TEXTURE_FMT_RGB_PVRTC_2BPPV1","RGBA_PVRTC_2BPPV1","TEXTURE_FMT_RGBA_PVRTC_2BPPV1","RGB_A_PVRTC_2BPPV1","RGB_PVRTC_4BPPV1","TEXTURE_FMT_RGB_PVRTC_4BPPV1","RGBA_PVRTC_4BPPV1","TEXTURE_FMT_RGBA_PVRTC_4BPPV1","RGB_A_PVRTC_4BPPV1","RGB_ETC1","TEXTURE_FMT_RGB_ETC1","RGBA_ETC1","RGB_ETC2","TEXTURE_FMT_RGB_ETC2","RGBA_ETC2","TEXTURE_FMT_RGBA_ETC2","REPEAT","CLAMP_TO_EDGE","MIRRORED_REPEAT","Filter","LINEAR","NEAREST","FilterIndex","9728","9729","_images","_sharedOpts","minFilter","magFilter","wrapS","wrapT","genMipmaps","_getSharedOptions","initWithData","_format","initWithElement","_minFilter","_magFilter","_mipFilter","_wrapS","_wrapT","_isAlphaAtlas","_genMipmaps","packable","_FilterIndex","extnames","_parseExt","extIdStr","defaultFormat","extIds","defaultExt","bestExt","bestIndex","bestFormat","SupportTextureFormats","SUPPORT_TEXTURE_FORMATS","extFormat","tmpExt","tmpFormat","webp","_hashDirty","_hash","_multiMaterial","getImpl","getId","updateImg","mipFilter","ImageBitmap","_checkImageBitmap","_upload","complete","HTMLCanvasElement","handleLoadedTexture","pixelFormat","pixelsWidth","pixelsHeight","_getGFXPixelFormat","_updateFormat","_checkPackable","getHtmlElementObj","deleteAtlasTexture","unlinkMaterial","getPixelFormat","hasPremultipliedAlpha","isAlphaAtlas","HTMLImageElement","_clearImage","description","releaseTexture","setWrapMode","setFilters","setPremultiplyAlpha","premultiply","dynamicAtlas","_isCompressed","maxFrameSize","_getHash","Atlas","DEFAULT_HASH","_getOpts","anisotropy","_anisotropy","mipmapSources","extId","exportedExts","_exportedExts","exts","_extId","join","fields","linkMaterial","getMultiHandler","autoSetTexture","removeTexture","getLinkedMaterial","hasLinkedMaterial","../platform/CCClass","../platform/id-generater","73","./CCAudioClip","./CCBitmapFont","./CCBufferAsset","./CCJsonAsset","./CCLabelAtlas","./CCPrefab","./CCRenderTexture","./CCSceneAsset","./CCScripts","./CCSpriteAtlas","./CCSpriteFrame","./CCTTFFont","./CCTextAsset","./material","74","_CCAsset","_effectParser","_effect","techniques","shaders","lib","_programLib","define","_initEffect","parseEffect","freeze","getInstantiatedEffect","getEffect","../CCAsset","./effect-parser","75","Texture","textureUtil","gfx","BUILTIN_NAME","SPRITE","GRAY_SPRITE","UNLIT","Material","_manualHash","_dirty","_multiHandler","_defines","_effectAsset","_techniqueIndex","_techniqueData","effectName","effectAsset","updateMultiSupport","techniqueIndex","switchTechnique","getBuiltinMaterial","createWithBuiltin","setProperty","passIdx","directly","def","getDefine","getProperty","setCullMode","cullMode","CULL_BACK","setDepth","depthTest","depthWrite","depthFunc","DS_FUNC_LESS","setBlend","blendEq","blendSrc","blendDst","blendAlphaEq","blendSrcAlpha","blendDstAlpha","blendColor","BLEND_FUNC_ADD","BLEND_SRC_ALPHA","BLEND_ONE_MINUS_SRC_ALPHA","setStencilEnabled","stencilTest","STENCIL_INHERIT","setStencil","stencilFunc","stencilRef","stencilMask","stencilFailOp","stencilZFailOp","stencilZPassOp","stencilWriteMask","DS_FUNC_ALWAYS","STENCIL_OP_KEEP","updateHash","hash","getHash","passDatas","passData","defines","syncTextures","passes","technique","setMultiSupport","isMultiSupport","bool","MultiHandler","../../utils/texture-util","../CCTexture2D","./CCEffectAsset","76","_pass","_defineProperties","descriptor","enumerable","configurable","_createClass","Constructor","protoProps","staticProps","EffectBase","_dirtyCode","_technique","_proto","_createPassProp","pass","_properties","uniform","Float32Array","Float64Array","_setPassProperty","setStencilFront","setStencilBack","../../../renderer/core/pass","77","_types","_enums","getInvolvedProgram","programName","getTemplate","parseProperties","passJson","propertiesJson","program","uniformInfo","uniforms","_ret","propInfo","PARAM_TEXTURE_2D","PARAM_INT","PARAM_FLOAT","enums2default","passDefines","parseTechniques","techNum","tech","techName","passNum","passName","detailName","stage","newPass","rasterizerState","blendState","blend","depthStencilState","stencilFuncFront","stencilRefFront","stencilMaskFront","stencilFailOpFront","stencilZFailOpFront","stencilZPassOpFront","stencilWriteMaskFront","stencilFuncBack","stencilRefBack","stencilMaskBack","stencilFailOpBack","stencilZFailOpBack","stencilZPassOpBack","stencilWriteMaskBack","../../../renderer/core/technique","../../../renderer/enums","../../../renderer/types","./effect","78","_murmurhash2_gc","_utils","_effectBase","_inheritsLoose","subClass","superClass","_setPrototypeOf","setPrototypeOf","__proto__","EffectVariant","_EffectBase","_passes","_stagePasses","_effectDirtyCode","_onEffectChanged","variantPasses","stagePasses","variant","_stage","serializePasses","../../../renderer/murmurhash2_gc","./effect-base","./utils","79","Effect","_techniques","createNative","80","./CCMaterial","./material-variant","81","_pool","MaterialPool","_Pool","_len","_key","exampleMat","renderComponent","MaterialVariant","_owner","instance","serializeDefines","serializeTechniques","mat","maxSize","_clean","materialPool","../../utils/pool","82","_CCMaterial","_effectVariant","_materialPool","_dec","_class","ccclass","_decorator","_Material","materialName","_material","./effect-variant","./material-pool","83","serializePass","excludeProperties","_programName","_cullMode","_blend","_blendEq","_blendAlphaEq","_blendSrc","_blendDst","_blendSrcAlpha","_blendDstAlpha","_blendColor","_depthTest","_depthWrite","_depthFunc","_stencilTest","_stencilFuncFront","_stencilRefFront","_stencilMaskFront","_stencilFailOpFront","_stencilZFailOpFront","_stencilZPassOpFront","_stencilWriteMaskFront","_stencilFuncBack","_stencilRefBack","_stencilMaskBack","_stencilFailOpBack","_stencilZFailOpBack","_stencilZPassOpBack","_stencilWriteMaskBack","serializeUniforms","hashData","param","PARAM_TEXTURE_CUBE","84","TOP","MID","BOT","LEFT","CENTER","HORIZONTAL","VERTICAL","AlignMode","ONCE","ON_WINDOW_RESIZE","ALWAYS","getReadonlyNodeSize","computeInverseTransForTarget","widgetNode","out_inverseTranslate","out_inverseScale","translateX","translateY","tInverseTranslate","tInverseScale","ONE","align","widget","hasTarget","inverseTranslate","inverseScale","targetSize","targetAnchor","isRoot","anchor","_alignFlags","localLeft","localRight","targetWidth","_isAbsLeft","_left","_isAbsRight","isStretchWidth","isAlignHorizontalCenter","localHorizontalCenter","_isAbsHorizontalCenter","_horizontalCenter","targetCenter","isAlignLeft","localTop","localBottom","targetHeight","bottom","_isAbsBottom","_bottom","_isAbsTop","_top","isStretchHeight","isAlignVerticalCenter","localVerticalCenter","_isAbsVerticalCenter","_verticalCenter","targetMiddle","isAlignBottom","alignMode","widgetManager","activeWidgets","animationState","refreshScene","AnimUtils","EditMode","nowPreviewing","_component","_animation","isAligning","_activeWidgetsIterator","editingNode","adjustWidgetToAllowMovingInEditor","adjustWidgetToAllowResizingInEditor","updateAlignment","Widget","_AlignFlags","thisOnResized","onResized","refreshWidgetOnResized","../CCNode","85","_geomUtils","RendererCamera","_mat4_temp_1","_mat4_temp_2","_v3_temp_1","_v3_temp_2","_v3_temp_3","_cameras","updateMainCamera","minDepth","_depth","_debugCamera","repositionDebugCamera","getNode","ClearFlags","COLOR","DEPTH","STENCIL","StageFlags","OPAQUE","TRANSPARENT","Component","setStages","dirty","_camera","editor","_clearFlags","_backgroundColor","_zoomRatio","_targetTexture","_fov","_orthoSize","_nearClip","_farClip","_ortho","_renderStages","_alignWithScreen","zoomRatio","tooltip","fov","orthoSize","nearClip","_updateClippingpPlanes","farClip","ortho","_updateProjection","_updateRect","cullingMask","_updateCameraMask","clearFlags","setClearFlags","_updateBackgroundColor","setPriority","targetTexture","_updateTargetTexture","renderStages","_updateStages","alignWithScreen","_is3D","cameras","containsNode","_findRendererCamera","_setupDebugCamera","setFov","setNear","setFar","setColor","setNode","addCamera","setFrameBuffer","setType","flags","stages","_init","beforeDraw","__preload","onEnable","onDisable","removeCamera","getScreenToWorldMatrix2D","getWorldToScreenMatrix2D","_mat4_temp_1m","m12","m13","center","screenPosition","screenToWorld","getWorldToScreenPoint","worldPosition","worldToScreen","getRay","screenPos","geomUtils","Ray","fromPoints","rootNode","renderCamera","_onAlignWithScreen","RAD","atan","setOrthoHeight","getNodeToCameraTransform","getWorldToCameraMatrix","getCameraToWorldPoint","getWorldToCameraPoint","getCameraToWorldMatrix","../../renderer/scene/camera","../CCGame","../geom-utils","../renderer/index","../renderer/render-flow","../utils/affine-transform","../value-types","86","jsArray","IsStartCalled","IsOnEnableCalled","IsEditorOnEnableCalled","callerFunctor","callOnEnableInTryCatch","callOnDisableInTryCatch","sortedIndex","order","_executionOrder","testOrder","testId","stableRemoveInactive","flagToClear","removeAt","LifeCycleInvoker","__ctor__","invokeFunc","Iterator","_zero","_neg","_pos","_invoke","compareOrder","OneOffInvoker","cancelInactive","compsNeg","compsPos","ReusableInvoker","enableInEditor","engine","createInvokeImpl","indiePath","useDt","ensureFlag","fastPath","Function","invokeStart","invokeUpdate","invokeLateUpdate","startInvoker","updateInvoker","lateUpdateInvoker","_deferredComps","_updating","invokeOnEnable","compScheduler","deactivatedDuringOnEnable","_onEnabled","_scheduleImmediate","_onDisabled","lateUpdate","enableComp","invoker","disableComp","_deferredSchedule","_startForNewComps","./platform/CCClass","./utils/misc","87","equalClips","clip1","clip2","PLAY","STOP","PAUSE","RESUME","LASTFRAME","FINISHED","Animation","_animator","_nameToState","_didInit","_currentClip","_defaultClip","defaultClip","contain","currentClip","_writableClips","_clips","playOnLoad","isPlaying","getAnimationState","onDestroy","getClips","playAdditive","enabledInHierarchy","setCurrentTime","addClip","newName","contains","oldState","newState","removeClip","filter","_EventTargetOn","states","_EventTargetOff","_createStates","defaultClipState","../../animation/animation-animator","../../animation/animation-clip","./CCComponent","88","BlockEvents","BlockInputEvents","menu","inspector","help","89","GraySpriteState","Transition","State","NORMAL","HOVER","PRESSED","DISABLED","Button","_pressed","_hovered","_fromColor","_toColor","_time","_transitionFinished","_fromScale","_toScale","_originalScale","_graySpriteMaterial","_spriteMaterial","_sprite","interactable","notify","_updateState","_resetState","animatable","_resizeToTarget","_resizeNodeToTargetNode","enableAutoGrayEffect","_updateDisabledState","transition","_updateTransition","normalColor","displayName","_getButtonState","_getTarget","pressedColor","hoverColor","disabledColor","zoomScale","normalSprite","pressedSprite","hoverSprite","disabledSprite","_applyTarget","_unregisterTargetEvent","clickEvents","EventHandler","originalScale","_setTargetColor","_registerNodeEvent","_unregisterNodeEvent","_onTargetSpriteFrameChanged","_setCurrentStateSprite","_onTargetColorChanged","_setCurrentStateColor","_onTargetScaleChanged","cloneColor","_getStateColor","_getStateSprite","_onTouchBegan","_onTouchMove","_onTouchEnded","_onTouchCancel","_onMouseMoveIn","_onMouseMoveOut","_registerTargetEvent","_getTargetSprite","sprite","Sprite","_applyTransition","emitEvents","_updateColorTransitionImmediately","_updateColorTransition","_updateSpriteTransition","_updateScaleTransition","_zoomUp","_zoomBack","oldTransition","useGrayMaterial","_switchGrayMaterial","../utils/gray-sprite-state","90","resetWidgetComponent","addComponent","isAlignTop","isAlignRight","Canvas","resetInEditor","_designResolution","designResolution","applySettings","_fitWidth","_fitHeight","fitHeight","fitWidth","_fitDesignResolution","cameraNode","setSiblingIndex","ResolutionPolicy","policy","SHOW_ALL","FIXED_WIDTH","FIXED_HEIGHT","NO_BORDER","designRes","setDesignResolutionSize","../camera/CCCamera","91","IsOnLoadCalled","getClassName","trimLeft","__scriptAsset","_isOnLoadCalled","onFocusInEditor","onLostFocusInEditor","typeOrClassName","getComponents","getComponentInChildren","_getLocalBounds","unscheduleAllCallbacks","eventTargets","destroyComp","_removeComponent","cloned","instantiate","_clone","scheduleOnce","callback_fn","_requireComponent","cls","reqComp","requireComponent","executionOrder","_disallowMultiple","willExecuteInEditMode","__scriptUuid","92","_componentId","_componentName","_genCompIdIfNeeded","_compId2Name","_compName2Id","customEventData","compType","getClassByName","compId","93","LabelFrame","BlendFunc","deleteFromDynamicAtlas","HorizontalAlign","TextAlignment","VerticalAlign","VerticalTextAlignment","Overflow","CLAMP","SHRINK","RESIZE_HEIGHT","CacheMode","BITMAP","CHAR","BOLD_FLAG","ITALIC_FLAG","UNDERLINE_FLAG","Label","_actualFontSize","_assemblerData","_frame","_ttfTexture","_letterTexture","_updateMaterial","_updateMaterialCanvas","_updateMaterialWebgl","_string","string","setVertsDirty","_checkStringEmpty","multiline","horizontalAlign","verticalAlign","actualFontSize","_fontSize","_lineHeight","lineHeight","overflow","_enableWrapText","enableWrapText","_N$file","_isSystemFontUsed","_forceUpdateRenderData","useSystemFont","markForValidate","_bmFontOriginalSize","_spacingX","spacingX","_batchAsBitmap","cacheMode","_materials","_shareAtlas","setMaterial","_getDefaultMaterial","_styleFlags","enableBold","enableItalic","enableUnderline","_underlineHeight","underlineHeight","autoSwitchMaterial","EnableType","GLOBAL","allowDynamicAtlas","enableRetina","clearCharCache","clearAllCache","_nodeSizeChanged","_nodeColorChanged","_assembler","_resetAssemblerData","_updateColor","_srcBlendFactor","BlendFactor","SRC_ALPHA","FLAG_OPACITY","_validateRender","disableRender","_resetAssembler","_resetFrame","markForRender","_applyFontTexture","_onBMFontTextureLoaded","updateRenderData","_onBlendChanged","_nativeTTF","_getAssemblerData","getMaterial","_updateTTFMaterial","isMultiMaterial","_texIdDirty","isMulti","_forceUseCanvas","_useNativeTTF","ENABLE_NATIVE_TTF_RENDERER","_enableBold","_enableItalics","_enableUnderline","../assets/material/CCMaterial","../platform/CCMacro","../renderer/utils/label/label-frame","../renderer/utils/utils","../utils/blend-func","./CCRenderComponent","94","LabelOutline","_updateRenderData","label","95","LabelShadow","_blur","blur","96","NodeEvent","Type","GRID","ResizeMode","CONTAINER","CHILDREN","AxisDirection","VerticalDirection","BOTTOM_TO_TOP","TOP_TO_BOTTOM","HorizontalDirection","LEFT_TO_RIGHT","RIGHT_TO_LEFT","Layout","_layoutSize","_layoutDirty","_resize","_N$layoutType","reLayouted","_doLayoutDirty","resizeMode","cellSize","startAxis","paddingLeft","paddingRight","paddingTop","paddingBottom","spacingY","verticalDirection","horizontalDirection","affectedByScale","_addEventListeners","_removeEventListeners","_doScaleDirty","updateLayout","_resized","_childAdded","_childRemoved","_addChildrenEventListeners","_removeChildrenEventListeners","_doLayoutHorizontally","baseWidth","rowBreak","fnPositionY","applyChildren","layoutAnchor","sign","paddingX","leftBoundaryOfLayout","nextX","rowMaxHeight","tempMaxHeight","secondMaxHeight","containerResizeBoundary","maxHeightChildAnchorY","activeChildCount","newChildWidth","childScaleX","_getUsedScaleValue","childScaleY","childBoundingBoxWidth","childBoundingBoxHeight","rightBoundaryOfChild","rowBreakBoundary","leftToRightRowBreak","rightToLeftRowBreak","finalPositionY","signX","tempFinalPositionY","topMarign","_getVerticalBaseHeight","newHeight","_doLayoutVertically","baseHeight","columnBreak","fnPositionX","paddingY","bottomBoundaryOfLayout","nextY","columnMaxWidth","tempMaxWidth","secondMaxWidth","column","maxWidthChildAnchorX","newChildHeight","topBoundaryOfChild","columnBreakBoundary","bottomToTopColumnBreak","topToBottomColumnBreak","finalPositionX","tempFinalPositionX","rightMarign","_doLayoutBasic","allChildrenBoundingBox","leftBottomSpace","rightTopSpace","xMax","yMax","newSize","toFixed","newAnchorX","newAnchorY","_doLayoutGridAxisHorizontal","layoutSize","topOffset","boundary","_doLayoutGridAxisVertical","leftOffset","_doLayoutGrid","_getHorizontalBaseWidth","_doLayout","97","MotionStreak","preview","_fadeTime","fadeTime","_minSeg","minSeg","_stroke","stroke","_checkSwitchMaterial","_fastMode","fastMode","checkAndSwitchMaterial","_updateMultiTexId","updateTexId","_renderData","../../core/utils/blend-func","../components/CCRenderComponent","98","_materialVariant","_temp_color","ENABLE","DISABLE","materials","_activateMaterial","_vertsDirty","_texId","assembler","registerValidate","enable","FLAG_RENDER","FLAG_UPDATE_RENDER_DATA","instantiated","getMaterials","updateColor","srcBlendFactor","_checkBacth","_flush","_dummyNode","multi","spTexture","nSpTexture","same","isChanged","texId","getIndex","../assets/material/material-variant","../renderer/assembler","99","HtmlTextParser","_htmlTextParser","RichTextChildName","RichTextChildImageName","debounce","immediate","later","callNow","Pool","outline","richtext","labelNode","_get","labelComponent","RichText","_textArray","_labelSegments","_labelSegmentsCache","_linesWidth","_updateRichTextStatus","_updateRichText","_onTTFLoaded","maxWidth","imageAtlas","handleTouchEvent","customMaterial","spriteComponent","_labelComponent","_labelComponent2","_labelComponent3","_labelComponent4","_activateChildren","_onColorChanged","parentColor","childNode","_updateLabelSegmentTextAttributes","_applyTextAttribute","_createFontLabel","_measureText","styleIndex","_styleIndex","labelSize","labelSegment","clickHandler","_clickHandler","clickParam","_clickParam","_containsTouchLocation","myRect","_lineOffsetX","_lineCount","_labelWidth","_labelHeight","_addLabelSegment","stringToken","_updateRichTextWithMaxWidth","labelString","labelWidth","fragmentWidth","checkStartIndex","checkEndIndex","_getFirstWordLen","checkString","checkStringWidth","remainingString","_updateLineInfo","fragments","fragmentText","splitString","_isLastComponentCR","_needsUpdateTextLayout","newTextArray","oldItem","newItem","oldStyle","newStyle","italic","isImage","imageAlign","imageHeight","imageWidth","imageOffset","_addRichTextImageElement","richTextElement","spriteFrameName","spriteNode","_imageOffset","SLICED","sizeMode","SizeMode","CUSTOM","spriteRect","scaleFactor","spriteWidth","spriteHeight","expectWidth","expectHeight","click","lastEmptyLine","newline","multilineTexts","BASELINE_RATIO","_updateRichTextPosition","startIndex","textLen","character","charAt","isUnicodeCJK","isUnicodeSpace","nextTokenX","nextLineIndex","totalLineCount","lineCount","lineOffsetX","lineHeightSet","lineHeightReal","isInteger","_offsetY","_convertLiteralColorValue","colorValue","fromHEX","textStyle","isAsset","bold","enableItalics","underline","labelOutlineComponent","../utils/html-text-parser","100","GETTINGSHORTERFACTOR","Direction","Scrollbar","_scrollView","_touching","_autoHideRemainingTime","_onScroll","enableAutoHide","autoHideTime","setTargetScrollView","scrollView","_convertToScrollViewSpace","scrollViewNode","worldSpacePos","scrollViewSpacePos","_setOpacity","outOfBoundary","scrollViewSize","handleNodeSize","_conditionalDisableScrollBar","contentMeasure","scrollViewMeasure","outOfBoundaryValue","contentPosition","handleNodeMeasure","_calculateLength","_calculatePosition","_updateLength","_updateHanlderPosition","_fixupHandlerPosition","barSize","barAnchor","handleSize","handleParent","leftBottomWorldPosition","fixupPosition","denominatorValue","lengthRation","actualLenth","positionRatio","clamp01","handleNode","_processAutoHide","deltaTime","../utils/misc","101","SpriteType","SIMPLE","TILED","FILLED","MESH","FillType","RADIAL","TRIMMED","RAW","GRAY","_spriteFrame","_type","_sizeMode","_fillType","_fillCenter","_fillStart","_fillRange","_isTrimmedMode","_atlas","lastSprite","_applySpriteFrame","fillType","fillCenter","fillStart","fillRange","trim","_applySpriteSize","setVisible","setState","getState","_applyAtlas","oldFrame","oldTexture","newTexture","102","Toggle","_N$isChecked","isChecked","toggleGroup","_toggleContainer","allowSwitchOff","_updateCheckMark","updateToggles","_triggerEventInScript_isChecked","_emitToggleEvents","checkMark","checkEvents","_triggerEventInScript_check","_registerToggleEvent","addToggle","_unregisterToggleEvent","removeToggle","_hideCheckMark","toggle","uncheck","ToggleContainer","./CCButton","./CCToggleGroup","103","toggleItems","_allowOnlyOneToggleChecked","_makeAtLeastOneToggleChecked","Boolean","104","ToggleGroup","_toggleItems","showed","105","WidgetManager","AlignFlags","TOP_BOT","LEFT_RIGHT","_setAlign","horizontalCenter","verticalCenter","isAbsoluteHorizontalCenter","isAbsoluteVerticalCenter","isAbsoluteTop","isAbsoluteBottom","isAbsoluteLeft","isAbsoluteRight","_wasAlignOnce","_originalWidth","_originalHeight","_validateTargetInDEV","isAlign","isHorizontal","../base-ui/CCWidgetManager","106","SubContextView","WXSubContextView","SwanSubContextView","./CCAnimation","./CCAudioSource","./CCBlockInputEvents","./CCCanvas","./CCComponentEventHandler","./CCLabel","./CCLabelOutline","./CCLabelShadow","./CCLayout","./CCMask","./CCMotionStreak","./CCPageView","./CCPageViewIndicator","./CCProgressBar","./CCRichText","./CCSafeArea","./CCScrollBar","./CCScrollView","./CCSlider","./CCSprite","./CCToggle","./CCToggleContainer","./CCWidget","./SubContextView","./editbox/CCEditBox","./missing-script","107","MissingScript","compiled","_$erialized","reportMissingClass","108","EventMouse","eventType","_eventType","_button","_prevX","_prevY","_scrollX","_scrollY","setScrollData","scrollX","scrollY","getScrollX","getScrollY","setLocation","getLocationInView","_designResolutionSize","_setPrevCursor","getPreviousLocation","getDelta","getDeltaX","getDeltaY","setButton","button","getButton","getLocationX","getLocationY","DOWN","MOVE","SCROLL","BUTTON_LEFT","BUTTON_RIGHT","BUTTON_MIDDLE","BUTTON_4","BUTTON_5","BUTTON_6","BUTTON_7","BUTTON_8","EventTouch","touchArr","TOUCH","_eventCode","_touches","currentTouch","getEventCode","getTouches","_setEventCode","eventCode","_setTouches","touches","setTouchInfo","getID","getStartLocation","MAX_TOUCHES","BEGAN","MOVED","ENDED","CANCELED","EventAcceleration","acc","ACCELERATION","EventKeyboard","keyCode","isPressed","KEYBOARD","../event/event","109","listenerID","_onEvent","_listenerID","_registered","_fixedPriority","_node","_isEnabled","_setPaused","_setRegistered","registered","_isRegistered","_getType","_getListenerID","_setFixedPriority","fixedPriority","_getFixedPriority","_setSceneGraphPriority","_getSceneGraphPriority","checkAvailable","isEnabled","UNKNOWN","TOUCH_ALL_AT_ONCE","ListenerID","Custom","listenerId","_onCustomEvent","Mouse","TouchOneByOne","_claimedTouches","setSwallowTouches","needSwallow","isSwallowTouches","TouchAllAtOnce","onTouchesBegan","onTouchesMoved","onTouchesEnded","onTouchesCancelled","Acceleration","_onAccelerationEvent","Keyboard","onKeyPressed","onKeyReleased","argObj","listenerType","eventName","110","_EventListenerVector","_fixedListeners","_sceneGraphListeners","gt0Index","empty","clearSceneGraphListeners","clearFixedListeners","getFixedPriorityListeners","getSceneGraphPriorityListeners","__getListenerID","DIRTY_NONE","DIRTY_FIXED_PRIORITY","DIRTY_SCENE_GRAPH_PRIORITY","DIRTY_ALL","_listenersMap","_priorityDirtyFlagMap","_nodeListenersMap","_toAddedListeners","_toRemovedListeners","_dirtyListeners","_inDispatch","_currentTouch","_currentTouchListener","_internalCustomListenerIDs","selListeners","selListener","childrenCount","_BaseNode","_addListener","_forceAddEventListener","_setDirty","_associateNodeAndEventListener","_getListeners","_updateDirtyFlagForSceneGraph","locDirtyListeners","selKey","_removeAllListenersInVector","listenerVector","_dissociateNodeAndEventListener","_removeListenersForListenerID","fixedPriorityListeners","sceneGraphPriorityListeners","locToAddedListeners","_sortEventListeners","locFlagMap","_sortListenersOfFixedPriority","rootEntity","_sortListenersOfSceneGraphPriority","sceneGraphListener","_sortEventListenersOfSceneGraphPriorityDes","l1","node1","node2","ex","fixedListeners","_sortListenersOfFixedPriorityAsc","_onUpdateListeners","idx","toRemovedListeners","locListenersMap","locPriorityDirtyFlagMap","_cleanToRemovedListeners","_updateTouchListeners","locInDispatch","_onTouchEventCallback","argsObj","selTouch","isClaimed","removedIdx","getCode","ENABLE_MULTI_TOUCH","_clearCurTouch","isStopped","needsMutableSet","_dispatchTouchEvent","oneByOneListeners","allAtOnceListeners","originalTouches","mutableTouches","oneByOneArgsObj","_dispatchEventToListeners","_onTouchesEventCallback","callbackParams","onEvent","eventOrArgs","shouldStopPropagation","locDirtyFlagMap","_sortNumberAsc","nodeOrPriority","addCustomListener","isFound","locListener","_removeListenerInVector","_removeListenerInCallback","listenersCopy","removeCustomListeners","customEventName","removeAllListeners","locListeners","locInternalCustomEventIDs","getType","_onListenerCallback","dispatchCustomEvent","optionalUserData","ev","EventCustom","setUserData","./CCEventListener","111","Touch","_lastModified","_point","_prevPoint","_startPoint","getPreviousLocationInView","getStartLocationInView","_startPointCaptured","_convertPointWithScale","_setPoint","_setPrevPoint","112","./CCEvent","./CCEventManager","./CCTouch","113","CallbacksInvoker","EventListeners","captureListeners","_callbackTable","rootInvoker","isInvoking","callbackInfos","containCanceled","purgeCanceled","../platform/callbacks-invoker","114","__on","__off","115","unuse","NO_TYPE","reuse","stopPropagationImmediate","getCurrentTarget","CAPTURING_PHASE","AT_TARGET","BUBBLING_PHASE","detail","getUserData","getEventName","_eventPool","116","./event","./event-listeners","./event-target","./system-event","117","inputManger","KEY_DOWN","KEY_UP","DEVICEMOTION","keyboardListener","accelerationListener","SystemEvent","setAccelerometerEnabled","isEnable","DeviceMotionEvent","requestPermission","setAccelerometerInterval","systemEvent","hasKeyDownEventListener","hasKeyUpEventListener","../event-manager","../platform/CCInputManager","118","./graphics","119","./3d","./CCPrivateNode","./CCScene","./assets","./base-ui/CCWidgetManager","./camera/CCCamera","./collider","./collider/CCIntersection","./components","./geom-utils","./mesh","./physics","./platform","./sp","120","CompScheduler","IsPreloadStarted","IsOnLoadStarted","Deactivating","callPreloadInTryCatch","callOnLoadInTryCatch","callOnDestroyInTryCatch","callOnFocusInTryCatch","callOnLostFocusInTryCatch","UnsortedInvoker","invokePreload","invokeOnLoad","activateTasksPool","getActivateTask","_componentCorrupted","_onLoadInEditor","focused","Selection","curActivate","_Scene","AssetsWatcher","_activatingStack","_activateNodeRecursively","preloadInvoker","onLoadInvoker","onEnableInvoker","originCount","activateComp","_deactivateNodeRecursively","lastTask","deactivatedOnLoading","resetComp","121","_isPlainEmptyObj_DEV","isPlainEmptyObj_DEV","_cloneable_DEV","cloneable_DEV","Attr","DELIMETER","BUILTIN_ENTRIES","INVALID_STATICS_DEV","pushUnique","deferredInitializer","declareProperties","$super","appendProp","__props__","defineProp","es6","defaultValue","setClassAttr","parseAttributes","defineGetSet","getter","setter","setterUndefined","getDefault","defaultVal","mixinWithInherited","dest","getPropertyDescriptor","doDefine","baseClass","shouldAddProtoCtor","__es6__","__ES6__","ctorToUse","ctors","fireClass","_getAllCtors","_createCtor","CCClass","_isCCClass","getClassAttrs","__initProps__","compileProps","setClassName","_RF","peek","_setClassId","normalizeClassName_DEV","DefaultName","getNewValueTypeCodeJit","clsName","propVal","escapeForJS","getInitPropsJit","attrs","F","attrKey","statement","IDENTIFIER_RE","expression","ValueType","initProps","getInitProps","simpleEnd","valueTypeEnd","simples","valueTypes","advanceds","totalLength","actualClass","superCallBounded","boundSuperCalls","ctorName","ctorLen","useTryCatch","SNIPPET","_validateCtor_DEV","originCtor","getCtors","__ctors__","baseOrMixins","baseOrMixin","baseCtors","SuperCallReg","xyz","SuperCallRegStrict","hasSuperCall","superFunc","preprocessAttrs","__values__","_sealed","some","staticPropName","validateMethodWithProps","_registerEditorProps","_fastDefine","serializableFields","attr","getInheritanceChain","klass","chain","getSuper","PrimitiveTypes","onAfterProps_ET","attributes","usedInGetter","ERR_Type","propNamePrefix","initAttrs","primitiveType","_short","getTypeChecker_ET","ScriptUuid","ScriptAsset","isEnum","getList","getObjTypeChecker_ET","parseSimpleAttr","attrName","expectType","startsWithUS","fastDefine","getNewValueTypeCode","./CCEnum","./attribute","./js","./preprocess-class","./requiring-frame","122","Preprocess","CACHE_KEY","fNOP","getSubDict","checkCtorArgument","decorate","_checkNormalArgument","validator_DEV","decoratorName","checkCompArgument","_argumentChecker","checkStringArgument","checkNumberArgument","getClassCache","getDefaultFromInitializer","initializer","extractActualDefaultValues","dummyObj","genProperty","fullOptions","isGetset","getFullFormOfProperty","existsProperty","errorProps","isDefaultValueSpecified","actualDefaultValues","decoratedProto","propNames","property","ctorProtoOrOptions","normalized","ctorProto","ccclassProto","createEditorDecorator","argCheckFunc","editorPropName","staticValue","decoratedValue","createDummyDecorator","executeInEditMode","disallowMultiple","playOnFocus","icon","./CCClass","123","reverseKey","enumType","enumDef","__enums__","enums","_TestEnum","124","PORTRAIT","LANDSCAPE_LEFT","PORTRAIT_UPSIDE_DOWN","LANDSCAPE_RIGHT","_didAccelerateFun","timestamp","_accelEnabled","_registerAccelerometerEvent","_accelCurTime","_unregisterAccelerometerEvent","_accelInterval","_registerKeyboardEvent","preventDefault","_acceleration","_accelDeviceEvent","DeviceOrientationEvent","browserType","BROWSER_TYPE_MOBILE_QQ","_deviceEventType","ua","BROWSER_TYPE_UC","_minus","didAccelerate","mAcceleration","eventAcceleration","_accelMinus","timeStamp","tmpX","orientation","os","OS_ANDROID","./CCInputManager","125","TOUCH_TIMEOUT","_vec2","_mousePressed","_isRegisterEvent","_preTouchPoint","_prevMousePoint","_preTouchPool","_preTouchPoolPointer","_touchesIntegerDict","_indexBitsUsed","_maxTouches","_canvasBoundingRect","adjustedLeft","adjustedTop","_getUnUsedIndex","_removeUsedIndexBit","_glView","_updateCanvasBoundingRect","canvasBoundingRect","docElem","handleTouchesBegin","curTouch","touchID","handleTouches","locTouchIntDict","unusedIndex","_convertTouchesWithScale","handleTouchesMove","locTouches","handleTouchesEnd","getSetOfTouchesEndOrCancel","handleTouchesCancel","locTouchesIntDict","getPreTouch","preTouch","locPreTouchPool","setPreTouch","getTouchByXY","tx","ty","locPreTouch","convertToLocationInView","getMouseEvent","locPreMouse","_convertMouseToLocationInView","getPointByEvent","BROWSER_TYPE_QQ","BROWSER_TYPE_SAFARI","pageX","pageY","scrollLeft","clientX","clientY","getTouchesByEvent","locView","touch_event","preLocation","changedTouches","BROWSER_TYPE_FIREFOX","identifier","selfPointer","prohibition","isMobile","supportMouse","supportTouches","_mouseEventsOnElement","focus","wheelDelta","msPointerEnabled","_pointerEventsMap","MSPointerDown","MSPointerMove","MSPointerUp","MSPointerCancel","_touchEventsMap","touchstart","touchesToHandle","touchmove","touchend","touchcancel","registerTouchEvent","_eventName","./CCMacro","./CCSys","126","DEG","SRC_ALPHA_SATURATE","SRC_COLOR","DST_ALPHA","DST_COLOR","ONE_MINUS_SRC_ALPHA","ONE_MINUS_SRC_COLOR","ONE_MINUS_DST_ALPHA","ONE_MINUS_DST_COLOR","ONE_MINUS_CONSTANT_ALPHA","ONE_MINUS_CONSTANT_COLOR","ORIENTATION_PORTRAIT","ORIENTATION_LANDSCAPE","ORIENTATION_AUTO","DENSITYDPI_DEVICE","DENSITYDPI_HIGH","DENSITYDPI_MEDIUM","DENSITYDPI_LOW","FIX_ARTIFACTS_BY_STRECHING_TEXEL_TMX","DIRECTOR_STATS_POSITION","BATCH_VERTEX_COUNT","ENABLE_TILEDMAP_CULLING","ENABLE_CULLING","SHOW_MESH_WIREFRAME","SHOW_MESH_NORMAL","KEY","none","back","backspace","tab","enter","shift","ctrl","alt","capslock","escape","space","pageup","pagedown","home","down","select","Delete","0","f","num0","num1","num2","num3","num4","num5","num6","num7","num8","num9","*","+","-","numdel","/","f1","f2","f3","f4","f5","f6","f7","f8","f9","f10","f11","f12","numlock","scrolllock",";","semicolon","equal","=",",","comma","dash",".","forwardslash","grave","[","openbracket","backslash","]","closebracket","quote","dpadLeft","dpadRight","dpadUp","dpadDown","dpadCenter","ImageFormat","JPG","PNG","TIFF","WEBP","PVR","ETC","S3TC","ATITC","TGA","RAWDATA","BOTTOM","127","Destroyed","RealDestroyed","ToDestroy","DontSave","EditorOnly","Dirty","DontDestroy","LockedInEditor","IsRotationLocked","IsScaleLocked","IsAnchorLocked","IsSizeLocked","IsPositionLocked","PersistentMask","objectsToDestroy","deferredDestroy","deleteCount","deferredDestroyTimer","compileDestruct","shouldSkipId","idToSkip","propsToReset","_destruct","__destruct__","strictMode","128","SAXParser","DOMParser","_isSupportDOMParser","_parser","xmlTxt","_parseXML","textxml","xmlDoc","parseFromString","ActiveXObject","loadXML","PlistParser","plist","childNodes","nodeType","_parseNode","_parseDict","_parseArray","firstChild","nodeValue","saxParser","129","screen","_supportsFullScreen","_onfullscreenchange","_onfullscreenerror","_preOnFullScreenChange","_preOnFullScreenError","_preOnTouch","_touchEvent","_fn","_fnMap","valL","requestFullscreen","fullScreen","fullscreenElement","webkitFullscreenElement","mozFullScreenElement","requestFullScreen","onFullScreenChange","onFullScreenError","toLowerCase","OS_IOS","isBrowser","webkitEnterFullscreen","fullscreenchange","fullscreenerror","requestPromise","exitFullScreen","webkitExitFullscreen","exitFullscreen","autoFullScreen","_ensureFullScreen","disableAutoFullScreen","touchTarget","touchEventName","fullScreenErrorEventName","onTouch","130","settingPlatform","_CCSettings","platform","isVivoGame","isOppoGame","isHuaweiGame","isJKWGame","isQttGame","isLinkSure","_global","global","initSys","LANGUAGE_ENGLISH","LANGUAGE_CHINESE","LANGUAGE_FRENCH","LANGUAGE_ITALIAN","LANGUAGE_GERMAN","LANGUAGE_SPANISH","LANGUAGE_DUTCH","LANGUAGE_RUSSIAN","LANGUAGE_KOREAN","LANGUAGE_JAPANESE","LANGUAGE_HUNGARIAN","LANGUAGE_PORTUGUESE","LANGUAGE_ARABIC","LANGUAGE_NORWEGIAN","LANGUAGE_POLISH","LANGUAGE_TURKISH","LANGUAGE_UKRAINIAN","LANGUAGE_ROMANIAN","LANGUAGE_BULGARIAN","LANGUAGE_UNKNOWN","OS_WINDOWS","OS_MARMALADE","OS_LINUX","OS_BADA","OS_BLACKBERRY","OS_OSX","OS_WP8","OS_WINRT","OS_UNKNOWN","WIN32","LINUX","MACOS","ANDROID","IPHONE","IPAD","BLACKBERRY","NACL","EMSCRIPTEN","TIZEN","WINRT","WP8","MOBILE_BROWSER","DESKTOP_BROWSER","EDITOR_PAGE","EDITOR_CORE","WECHAT_GAME","QQ_PLAY","FB_PLAYABLE_ADS","BAIDU_GAME","VIVO_GAME","OPPO_GAME","HUAWEI_GAME","XIAOMI_GAME","JKW_GAME","ALIPAY_GAME","WECHAT_GAME_SUB","BAIDU_GAME_SUB","QTT_GAME","BYTEDANCE_GAME","BYTEDANCE_GAME_SUB","LINKSURE","BROWSER_TYPE_WECHAT","BROWSER_TYPE_ANDROID","BROWSER_TYPE_IE","BROWSER_TYPE_EDGE","BROWSER_TYPE_UCBS","BROWSER_TYPE_360","BROWSER_TYPE_BAIDU_APP","BROWSER_TYPE_BAIDU","BROWSER_TYPE_MAXTHON","BROWSER_TYPE_OPERA","BROWSER_TYPE_OUPENG","BROWSER_TYPE_MIUI","BROWSER_TYPE_CHROME","BROWSER_TYPE_LIEBAO","BROWSER_TYPE_QZONE","BROWSER_TYPE_SOUGOU","BROWSER_TYPE_HUAWEI","BROWSER_TYPE_UNKNOWN","glExtension","getMaxJointMatrixSize","_maxJointMatrixSize","JOINT_MATRICES_SIZE","LEFT_UNIFORM_SIZE","maxUniforms","MAX_VERTEX_UNIFORM_VECTORS","getSafeAreaRect","visibleSize","getVisibleSize","__globalAdapter","adaptSys","languageCode","nav","doc","docEle","FbPlayableAd","currLanguage","language","browserLanguage","isAndroid","iOS","osVersion","osMainVersion","uaResult","maxTouchPoints","osName","appVersion","OS_UNIX","typeReg1","typeReg2","typeReg3","browserTypes","typeMap","micromessenger","trident","edge","360 aphone","mxbrowser","opr/","ubrowser","huaweibrowser","browserVersion","versionReg1","versionReg2","innerWidth","innerHeight","devicePixelRatio","windowPixelResolution","_checkWebGLRenderMode","_tmpCanvas1","create3DContext","opt_attribs","opt_contextType","localStorage","setItem","_supportWebp","toDataURL","_supportCanvas","_supportWebGL","WebGLRenderingContext","opengl","supportWebAudio","AudioContext","webkitAudioContext","mozAudioContext","ONLY_ONE","DELAY_CREATE_CTX","ONE_SOURCE","MULTI_CHANNEL","AUTOPLAY","canPlayType","ogg","wav","mp4","m4a","NetworkType","LAN","WWAN","getNetworkType","getBatteryLevel","garbageCollect","restartVM","isObjectValid","dump","openURL","131","__BrowserGetter","html","getElementsByTagName","availWidth","availHeight","meta","adaptationType","_scissorRect","View","_strategyer","ContainerStrategy","_strategy","ContentStrategy","_frameSize","_originalDesignResolutionSize","_visibleRect","_autoFullScreen","_maxPixelRatio","_retinaEnabled","_resizeCallback","_resizing","_resizeWithBrowserSize","_orientationChanging","_orientation","_isAdjustViewport","_antiAliasEnabled","_resolutionPolicy","_rpExactFit","EQUAL_TO_FRAME","EXACT_FIT","_rpShowAll","_rpNoBorder","_rpFixedHeight","_rpFixedWidth","_initFrameSize","_resizeEvent","forceOrEvent","prevFrameW","prevFrameH","prevRotated","containerStyle","display","_orientationChange","scrollTo","resizeWithBrowserSize","setResizeCallback","setOrientation","designWidth","designHeight","locFrameSize","isLandscape","transformOrigin","_setViewportMeta","metas","overwrite","vp","getElementById","head","elems","getElementsByName","currentVP","pattern","RegExp","_adjustViewportMeta","adjustViewportMeta","isRetinaEnabled","enableAntiAlias","imageSmoothingEnabled","mozImageSmoothingEnabled","isAntiAliasEnabled","enableAutoFullScreen","isAutoFullScreenEnabled","setCanvasSize","getCanvasSize","getFrameSize","setFrameSize","getVisibleSizeInPixel","getVisibleOrigin","getVisibleOriginInPixel","getResolutionPolicy","setResolutionPolicy","resolutionPolicy","_locPolicy","preApply","viewport","vb","rv","postApply","updateCameraViewport","getDesignResolutionSize","setRealPixelResolution","setViewportInPoints","locScaleX","locScaleY","setScissorInPoints","ceil","sw","sh","boxArr","SCISSOR_BOX","scissor","isScissorEnabled","SCISSOR_TEST","getScissorRect","scaleXFactor","scaleYFactor","getViewportRect","getScaleX","getScaleY","getDevicePixelRatio","relatedPos","posLeft","posTop","in_out_point","selPoint","selPrePoint","designedResolution","_setupContainer","locCanvas","_setupStyle","locContainer","_fixContainer","bs","contStyle","_result","_buildResult","containerW","containerH","contentW","contentH","EqualToFrame","frameH","ProportionalToFrame","frameW","designW","designH","offx","offy","EqualToWindow","ProportionalToWindow","OriginalContainer","globalAdapter","adaptContainerStrategy","adaptView","PROPORTION_TO_FRAME","ORIGINAL_CONTAINER","ExactFit","ShowAll","NoBorder","FixedHeight","FixedWidth","containerStg","contentStg","_containerStrategy","_contentStrategy","setContainerStrategy","setContentStrategy","132","topLeft","topRight","bottomLeft","bottomRight","133","isPlainEmptyObj","createAttrsSingle","superAttrs","createAttrs","subclass","chains","__attrs__","newAttrs","prefix","PrimitiveType","getTypeChecker","mainPropName","mainPropAttrs","mainPropAttrsType","isContainer","defaultType","type_lowerCase","getObjTypeChecker","typeCtor","classCtor","defaultDef","typename","134","CallbackInfo","callbackInfoPool","CallbackList","removeByCallback","removeByTarget","cancelAll","MAX_SIZE","callbackListPool","keyOrTarget","_list","135","deepFlatten","strList","flattenCodeArray","separator","136","_js","_vec","_vec3","_size","_quat","_mat","SUPPORT_MIN_FORMAT_VERSION","EMPTY_PLACEHOLDER","BuiltinValueTypes","BuiltinValueTypeParsers_xyzw","BuiltinValueTypeSetters","fromArray","serializeBuiltinValueTypes","typeId","toArray","DataTypeID","SimpleType","InstanceRef","Array_InstanceRef","Array_AssetRefByInnerObj","ValueTypeCreated","AssetRefByInnerObj","Array_Class","CustomizedClass","Dict","ARRAY_LENGTH","CLASS_TYPE","CLASS_KEYS","CLASS_PROP_TYPE_OFFSET","MASK_CLASS","OBJ_DATA_MASK","CUSTOM_OBJ_DATA_CLASS","CUSTOM_OBJ_DATA_CONTENT","VALUETYPE_SETTER","DICT_JSON_LAYOUT","ARRAY_ITEM_VALUES","Refs","EACH_RECORD_LENGTH","OWNER_OFFSET","KEY_OFFSET","TARGET_OFFSET","File","Version","Context","SharedUuids","SharedStrings","SharedClasses","SharedMasks","Instances","InstanceTypes","DependObjs","DependKeys","DependUuidIndices","PACKED_SECTIONS","dereference","instances","strings","dataLength","instanceOffset","keyIndex","_owner2","_keyIndex","deserializeCCObject","objectData","clazz","classTypeOffset","maskTypeOffset","_key2","ASSIGNMENTS","deserializeCustomCCObject","assignSimple","assignInstanceRef","genArrayParser","parseAssetRefByInnerObj","parseClass","parseCustomClass","parseValueTypeCreated","parseValueType","parseTRS","typedArray","parseDict","dict","_key3","_type2","subValue","parseArray","_type3","parseInstances","instanceTypes","instanceTypesLen","rootIndex","normalObjectCount","insIndex","classes","typeIndex","_type4","eachData","getMissingClass","hasCustomFinder","doLookupClass","silent","proxy","lookupClasses","customFinder","klassLayout","_type5","cacheMasks","masks","parseResult","sharedStrings","dependSharedUuids","dependObjs","dependKeys","dependUuids","_obj","_key4","details","borrowDetails","preprocessed","_version","FileInfo","sharedUuids","sharedClasses","sharedMasks","sections","rootInfo","../value-types/color","../value-types/mat4","../value-types/quat","../value-types/rect","../value-types/size","../value-types/vec2","../value-types/vec3","../value-types/vec4","137","./deserialize-compiled","./deserialize-editor","138","NonUuidMark","category","random","139","./CCClassDecorator","./CCObject","./CCVisibleRect","./callbacks-invoker","./instantiate","./instantiate-jit","140","Compiler","DEFAULT","VAR","LOCAL_OBJ","LOCAL_TEMP_OBJ","LOCAL_ARRAY","LINE_INDEX_OF_NEW_OBJ","DEFAULT_MODULE_CACHE","cc.Node","cc.Label","cc.Button","cc.Widget","cc.Animation","cc.ClickEvent","cc.PrefabInfo","Int8Array","Int16Array","Uint16Array","Uint32Array","Uint8ClampedArray","getTypedArrayName","Declaration","varName","mergeDeclaration","writeAssignment","codeArray","Assignments","targetExpression","_exps","_targetExp","writeCode","targetVar","pair","getPropAccessor","equalsToDefault","isEmptyObject","Parser","objsToClear_iN$t","objs","funcModuleCache","globalVariables","globalVariableId","localVariableId","getFuncModule","globalVar","enumerateObject","globalVariablesDeclaration","code","_iN$t","usedInNew","clsNameIsModule","getObjRef","setValueType","srcValue","assignments","fastDefinedProps","enumerateField","enumerateCCClass","setObjProp","instantiateArray","arrayVar","declaration","instantiateTypedArray","line","isView","instantiateObj","createCode","isChildOf","./compiler","141","CCValueType","_isDomNode","isDomNode","original","internal_force","doInstantiate","objsToClearTmpVar","initValue","../value-types/value-type","142","tempCIDGenerater","_getPropertyDescriptor","getPrototypeOf","_copyprop","isString","dunderProto","superclass","tmpValueDesc","tmpGetSetDesc","tmpGetDesc","tmpSetDesc","objOrCtor","__classname__","retval","isTempClassId","_idToClass","_nameToClass","setup","publicName","table","doSetClassName","unregisterClass","classId","__cid__","classname","allowTempId","obsoleted","newExpr","extractPropName","oldProp","newProp","obsoletes","objName","REGEXP_NUM_OR_STR","REGEXP_STR","argLen","hasSubstitution","regExpToTest","notReplaceFunction","forceDictMode","INVALID_IDENTIFIER_1","INVALID_IDENTIFIER_2","verifyType","removeArray","minusArr","appendObjectsAt","addObjs","arr_clone","cleanupFunc","_cleanup","resize","../utils/mutable-forward-iterator","./id-generater","143","Attrs","SerializableAttrs","TYPO_TO_CORRECT_DEV","parseNotify","newKey","newValue","canUsedInGet","parseType","STATIC_CHECK","getBaseClassWherePropertyDefined_DEV","_wrapOptions","isES6Getset","isLiteral","fullForm","maybeTypeScript","CALL_SUPER_DESTROY_REG_DEV","overrided","baseFuc","subFuc","correct","144","requiringFrames","beh","frameInfo","anyKey","145","refNode","otherNode","compareDocumentPosition","nodeName","146","./CCDirector","./asset-manager","./platform/CCInputExtension","./platform/CCInputManager","./platform/CCScreen","./platform/CCSys","./platform/CCView","147","_manager","_assertThisInitialized","ReferenceError","Assembler2D","_Assembler","initData","initLocal","createQuadData","verticesFloats","indicesCount","_local","uintVerts","uintVDatas","floatsPerVert","colorOffset","getBuffer","_handle","_meshBuffer","updateWorldVerts","local","verts","vDatas","matrix","matrixm","vl","vr","vt","vertexOffset","justTranslate","al","ar","bl","br","ct","db","fillBuffers","worldMatDirty","renderData","vData","iData","iDatas","offsetInfo","request","verticesCount","byteOffset","vbuf","_vData","ibuf","_iData","indiceOffset","vertexId","texIdOffset","uvOffset","./assembler","./utils/dynamic-atlas/manager","./webgl/render-data","148","_pool3","_assemblerId","getAssemblerId","assemblerCtor","__assemblerId__","AssemblerPool","_pool2","assemblers","_renderComp","../utils/pool","149","_vertexFormat","_assemblerPool","Assembler","_extendNative","renderComp","updateRenderDataForSwitchMaterial","getVfmt","vfmtPosUvColor","packDynamicAtlasAndCheckMaterial","packedFrame","insertSpriteFrame","renderCompCtor","__assembler__","getConstructor","./assembler-pool","./webgl/vertex-format","150","Device","canvasEL","_canvas","_caps","_stats","drawcalls","_vx","_vy","_vw","_vh","_sx","_sy","_sw","_sh","_restoreTexture","unit","setViewport","setScissor","clearRect","fillStyle","globalAlpha","fillRect","resetDrawCalls","getDrawCalls","151","_device","updateImage","152","_inputAssembler","_initBuiltins","defaultTexture","WRAP_REPEAT","programTemplates","programChunks","InputAssembler","Pass","renderEngine","drawCalls","_cameraNode","ModelBatcher","nativeFlow","ForwardRenderer","_builtins","canvasRenderer","RenderComponentHandle","ecScene","../../renderer/core/input-assembler","../../renderer/core/pass","../../renderer/renderers/forward-renderer","../../renderer/scene/scene","./canvas","./canvas/Device","./canvas/Texture2D","./webgl/assemblers","./webgl/model-batcher","153","FlagOfset","DONOTHING","BREAK_FLOW","LOCAL_TRANSFORM","WORLD_TRANSFORM","TRANSFORM","UPDATE_RENDER_DATA","OPACITY","OPACITY_COLOR","RENDER","POST_RENDER","FINAL","_batcher","_func","_next","_doNothing","_localTransform","_worldTransform","parentOpacityDirty","_render","batcher","parentOpacity","worldTransformFlag","worldOpacityFlag","worldDirtyFlag","colorVal","_fastSetA","flows","_postRender","postFillBuffers","EMPTY_FLOW","createFlow","flow","getFlow","tFlag","_validateList","_inValidateList","validateRenderers","visitRootNode","preCullingMask","walking","terminate","_renderScene","forwardRenderer","getBachther","FLAG_DONOTHING","FLAG_BREAK_FLOW","FLAG_LOCAL_TRANSFORM","FLAG_POST_RENDER","FLAG_FINAL","154","_reusableAtlas","_atlases","_atlasIndex","_maxAtlasCount","_textureSize","_maxFrameSize","_textureBleeding","_autoMultiBatch","_autoResetBeforeSceneLoad","_debugNode","newAtlas","autoMultiBatch","requsetMaterial","beforeSceneLoad","atlasCount","textureBleeding","textureSize","autoResetBeforeSceneLoad","atlases","rects","deleteAtlasSpriteFrame","deleteTexture","deleteInnerTexture","showDebug","scroll","ScrollView","layout","./reusable-atlas","155","pointer","parentRect","subRectA","subRectB","subRectC","cacheIndex","used","border","rootRect","freeRects","pushFreeRect","removeFreeRect","temp2","replaceFreeRect","score","areaFit","originalIndex","sizes","best","ignoreRectSize","deleteInnerRect","_iterator","_step","tryMergeRecycle","old","isEmpty","_iterator2","_step2","_iterator3","_step3","../../../assets/CCRenderTexture","156","_assembler2d","shareLabelInfo","LetterInfo","_tmpRect","_comp","_horizontalKernings","_lettersInfo","_linesOffsetX","_numberOfLines","_textDesiredHeight","_letterOffsetY","_tailoredTopY","_tailoredBottomY","_bmfontScale","_lineBreakWithoutSpaces","_lineSpacing","_originFontSize","_hAlign","_vAlign","_overflow","_isWrapText","_maxLineWidth","_isRetina","_retinaScale","BmfontAssembler","_Assembler2D","_reserveQuads","assemblerChanged","_updateFontFamily","_preUpdateRenderData","fontAsset","fontAtlas","_updateProperties","_updateLabelInfo","_updateContent","_resetProperties","_updateFontScale","getTTFTextureSizeScale","enableLabelRetina","labelRetinaScale","_setupBMFontOverflowMetrics","_computeHorizontalKerningForText","_alignText","stringLen","horizontalKernings","kerningDict","kerningAmount","_multilineTextWrap","nextTokenFunc","lineIndex","nextTokenY","longestLine","letterRight","highestY","lowestY","letterDef","letterPosition","_getFontScale","_recordPlaceholderInfo","tokenLen","tokenHighestY","tokenLowestY","tokenRight","nextLetterX","newLine","letterIndex","atlasName","letterX","_recordLetterInfo","_finishMultilineTextWrap","_getFirstCharLen","_multilineTextWrapByWord","_multilineTextWrapByChar","tmpInfo","_char2","_computeAlignmentOffset","_isVerticalClamp","_shrinkLabelToContentSize","_updateQuads","_isHorizontalClamp","_scaleFontSizeDown","shouldUpdateContent","lambda","mid","newFontSize","letterClamp","ctr","letterInfo","px","wordWidth","_isHorizontalClamped","letterOverClamp","appx","appy","py","clipTop","_determineRect","letterPositionX","appendQuad","_quadsUpdated","tempRect","trimmedLeft","trimmedTop","originalX","blank","../../../components/CCLabel","../../../platform/CCMacro","../../../utils/text-utils","../../assembler-2d","../utils","157","158","_bmfont","OUTLINE_SUPPORTED","getFontFamily","bleed","_invisibleAlpha","LetterTexture","labelInfo","_labelInfo","_context","_updateTexture","_canvasPool","startX","startY","MIDDLE_RATIO","BASELINE_OFFSET","lineJoin","textAlign","isOutlined","strokeColor","strokeStyle","lineWidth","strokeText","fillText","LetterAtlas","_tmpId","_nexty","frees","waitCleans","insertLetterTexture","letterTexture","freeLetter","removeFreeLetter","oldx","oldy","oldnexty","_letter","_inCleans","ref","pushFreeLetter","defs","LetterAtlases","fakeMaterial","_atlasWidth","_atlasHeight","deleteLetter","_iterator4","_step4","_iterator5","_step5","charAtlasAutoResetBeforeSceneLoad","_emptyTexture","_firstTraverse","_letterRefs","checkMaterialAndUpdateTexId","_needCheckMaterial","_usedMaterial","computeHash","toHEX","_isBold","LetterFontAssembler","_WebglBmfontAssembler","_proto2","createFlexData","vfmtPosUvColorTexId","_getFontDesc","_iterator6","_step6","_recycleLetterRef","_iterator7","_step7","assemblerData","appendVerts","../../../components/CCComponent","../../../components/CCLabelOutline","../../webgl/assemblers/label/2d/bmfont","../../webgl/vertex-format","159","_fontDesc","_drawFontSize","_splitedStrings","_canvasSize","_premultiply","_outlineComp","_outlineColor","_shadowComp","_shadowColor","BLACK","_canvasPadding","_contentSizeExtend","_nodeContentSize","_enableItalic","_underlineThickness","_drawUnderlinePos","_drawUnderlineWidth","_sharedLabelData","Alignment","TTFAssembler","_calculateLabelFont","_updateLabelDimensions","_calDynamicAtlas","updateVerts","_updatePaddingRect","outlineWidth","shadowWidth","CC_NATIVERENDERER","_calculateFillTextStartPosition","labelX","_getLineHeight","drawStartY","firstLinelabelY","_setupOutline","_setupShadow","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY","_drawTextEffect","startPosition","isMultiple","measureText","drawTextPosX","drawTextPosY","_fillColor","recreate","nodeSpacingY","_calculateParagraphLength","paragraphedStrings","paragraphLength","_calculateShrinkFont","totalHeight","maxLength","canvasWidthNoMargin","canvasHeightNoMargin","textFragment","allWidth","_calculateWrapText","canvasSizeX","canvasSizeY","paraLength","rawWidth","rawHeight","_rawHeight","../../../components/CCLabelShadow","160","hAlign","vAlign","./dynamic-atlas/manager","161","./label","./mask-assembler","./motion-streak","./motion-streak-multi","./sprite","162","MultiWebglBmfontAssembler","../../../../webgl/vertex-format","../2d/bmfont","163","_ttf","MultiWebglTTFAssembler","_WebglTTFAssembler","indices","initQuadIndices","../2d/ttf","164","_dataOffset","WebglBmfontAssembler","_BmfontAssembler","flexBuffer","_flexBuffer","reserve","vid","_getColor","rectWidth","rectHeight","uvDataOffset","retinaScale","world","../../../../utils/label/bmfont","165","WebglLetterFontAssembler","_LetterFontAssembler","createData","requestRenderData","../../../../../platform/js","../../../../utils/label/letter-font","./bmfont","166","UPDATE_CONTENT","UPDATE_FONT","UPDATE_EFFECT","NativeTTF","labelMaterial","_label","CustomAssembler","_proxy","setAssembler","_layout","jsb","LabelRenderer","_cfg","DataView","_layoutInfo","_cfgFields","_layoutFields","bindNodeProxy","_bindMaterial","_setBufferFlag","dv","getInt8","setInt8","_v","getInt32","__isLittleEndian__","setInt32","_updateCfgFlag","field","updateFlags","_setBufferValue","setFloat32","setUint8","_setFieldValue","field_name","_getBufferValue","getFloat32","getUint8","_getFieldValue","_getLayoutValue","_setLayoutValue","_updateCfgFlag_Content","_updateCfgFlag_Font","_colorEqual","_colorToObj","setString","setFontPath","fontPath","setFontSize","fontSizeRetina","oldfontsize","setOutline","oldOutline","setOutlineColor","oldColor","setLineHeight","oldLineHeight","setOverFlow","setEnableWrap","setVerticalAlign","setHorizontalAlign","oldHeight","oldX","oldY","setShadow","oldBlur","updateContent","setShadowColor","setItalic","oldItalic","setBold","oldBold","setUnderline","setSpacingX","getCache","retinaSize","getR","getG","getB","getA","shadow","outlineSize","setEffect","_nativeObj","../../../../../assets/material/CCMaterial","../../../../../assets/material/material-variant","../../../../../components/CCLabel","../../../../../components/CCLabelOutline","../../../../../components/CCLabelShadow","167","WebglTTFAssembler","_TTFAssembler","updateUVs","srcOffset","dstOffset","canvasWidth","canvasHeight","shadowOffset","../../../../utils/label/ttf","168","_CCLabel","_ttf2","_bmfont2","_letter2","_ttf3","_bmfont3","textBaseline","TTF","Bmfont","Letter","TTF3D","Bmfont3D","Letter3D","TTFMulti","BmfontMulti","../../../../components/CCLabel","../../../assembler","./2d-multi/bmfont","./2d-multi/ttf","./2d/bmfont","./2d/letter","./2d/nativeTTF","./2d/ttf","./3d/bmfont","./3d/letter","./3d/ttf","169","_motionStreak","Point","setPoint","setDir","_normal","MultiMotionStreakAssembler","_MotionStreakAssemble","cur","difx","dify","cr","cg","ca","normalizeSelf","uintVData","vertsOffset","findLast","da","_this$_renderData$_fl","usedVertices","usedIndices","usedVerticesFloats","MotionStreakAssembler","../../../components/CCMotionStreak","../../render-flow","170","_tangent","_miter","computeMiter","miter","lineA","lineB","halfThick","maxMultiple","multiple","dot","171","_barFilled","BarFilledAssemblerMulti","_BarFilledAssembler","fillEnd","../2d/bar-filled","172","_mesh","MultiMeshSpriteAssembler","_MeshSpriteAssembler","updateIndices","../2d/mesh","173","_radialFilled","MultiRadialFilledAssembler","_RadialFilledAssemble","../2d/radial-filled","174","_simple","MultiSimpleSpriteAssembler","_SimpleSpriteAssemble","../2d/simple","175","_sliced","MultiSlicedAssembler","_SlicedAssembler","meshCount","indexOffset","../2d/sliced","176","_tiled","MultiTiledAssembler","_TiledAssembler","contentWidth","contentHeight","sizableWidth","sizableHeight","hRepeat","vRepeat","_updateIndices","../2d/tiled","177","BarFilledAssembler","textureRect","ul","ur","quadUV0","quadUV1","quadUV2","quadUV3","quadUV4","quadUV5","quadUV6","quadUV7","progressStart","progressEnd","../../../../../components/CCSprite","../../../../assembler-2d","178","MeshSpriteAssembler","originalWidth","originalHeight","trimX","trimY","_l3","lx","ly","179","PI_2","_vertPos","_vertices","_uvs","_intersectPoint_1","_intersectPoint_2","_center","_triangles","_calcInsectedPoints","intersectPoints","sinAngle","cosAngle","tanAngle","cotAngle","yleft","yright","xtop","xbottom","_calculateVertices","cx","cy","_calculateUVs","u0","v0","_getVertAngle","placementX","placementY","RadialFilledAssembler","floatsPerTriangle","triangleIndex","triangle","_generateTriangle","endAngle","testIndex","allocWorldVerts","vert0","vert1","vert2","v0x","v0y","v1x","v1y","progressX","progressY","_generateUV","px1","px2","py1","py2","180","SimpleSpriteAssembler","cw","ch","ow","oh","rw","rh","trimRight","trimBottom","trimTop","181","SlicedAssembler","xScale","yScale","voffset","localRowY","localColX","worldIndex","182","TiledAssembler","_this$_local","offsetWidth","offsetHeight","localX","localY","yindex","ylength","xindex","xlength","coefu","coefv","tempXVerts","tempYVerts","183","_CCSprite","_simple2","_sliced2","_tiled2","_radialFilled2","_barFilled2","_mesh2","_simple3","_sliced3","_tiled3","_radialFilled3","_barFilled3","_mesh3","Simple","Sliced","Tiled","RadialFilled","BarFilled","Mesh","Simple3D","Sliced3D","Tiled3D","RadialFilled3D","BarFilled3D","Mesh3D","SimpleMulti","SlicedMulti","TiledMulti","RadialFilledMulti","BarFilledMulti","MeshMulti","../../../../components/CCSprite","./2d-multi/bar-filled","./2d-multi/mesh","./2d-multi/radial-filled","./2d-multi/simple","./2d-multi/sliced","./2d-multi/tiled","./2d/bar-filled","./2d/mesh","./2d/radial-filled","./2d/simple","./2d/sliced","./2d/tiled","./3d/bar-filled","./3d/mesh","./3d/radial-filled","./3d/simple","./3d/sliced","./3d/tiled","184","FlexBuffer","vfmt","_handler","_index","_vfmt","_verticesBytes","_bytes","_initVerticesCount","_initIndicesCount","_reallocVData","floatsCount","oldData","updateMesh","_reallocIData","newFloatsCount","realloced","newIndicesCount","updateMeshRange","185","FIX_IOS14_BUFFER","MeshBuffer","vertexFormat","indiceStart","_vertexBytes","_arrOffset","_vbArr","_vb","VertexBuffer","USAGE_DYNAMIC","_ibArr","_ib","IndexBuffer","INDEX_FMT_UINT16","USAGE_STATIC","_uintVData","_initVDataCount","_initIDataCount","_offsetInfo","_reallocBuffer","uploadData","vertexsData","indicesData","ib","switchBuffer","checkAndSwitchBuffer","vertexCount","requestStatic","indiceCount","byteLength","indiceLength","_updateOffset","requestForSpine","requestStaticForSpine","adjustForSpine","copyOldData","oldVData","newData","oldIData","forwardIndiceStartToOffset","../../../renderer/gfx","186","_recyclePool","_model","vfmt3D","QuadBuffer","SpineBuffer","_buffers","empty_material","empty_ia","renderScene","_iaPool","_modelPool","_quadBuffer","_quadBuffer3D","_meshBuffer3D","_batchedModels","_sortKey","models","setInputAssembler","removeModel","_flushMaterial","model","sortKey","addModel","ia","_vertexBuffer","_indexBuffer","_start","_flushIA","vertextFormat","../../../renderer/core/input-assembler","../../../renderer/memop/recycle-pool","../../../renderer/scene/model","../../assets/material/CCMaterial","../../platform/id-generater","./mesh-buffer","./quad-buffer","./spine-buffer","./vertex-format","187","_fillQuadBuffer","vertextID","188","RenderData","_infos","./flex-buffer","189","adjust","190","VertexFormat","ATTR_POSITION","ATTR_TYPE_FLOAT32","num","ATTR_UV0","ATTR_COLOR","ATTR_TYPE_UINT8","XYZ_UV_Color","XY_UV_Color","ATTR_TEX_ID","XY_UV_Color_TexId","vfmtPosUvTwoColor","ATTR_COLOR0","XY_UV_Two_Color","vfmtPosUv","XY_UV","vfmtPosColor","XY_Color","vfmtPos","XY","191","./multi-batcher","./multi-handler","192","MultiBatcher","handlers","nextHandler","getEmptyIndex","193","textures","hasEmptySlot","texture2","texture3","texture4","texture5","texture6","texture7","texture8","propertyIndex2Name","hasTexture","194","i2nMap","n2iMap","propertyName2Index","195","EXTNAME_RE","DIRNAME_RE","NORMALIZE_RE","pathStr","mainFileName","fileName","reg","baseName","tempStr","changeBasename","isSameExt","_normalize","oldUrl","sep","stripSep","196","AffineTransform","determinant","matm","transformVec2","transOrY","transformSize","transformRect","ol","ob","or","ot","lbx","lby","rbx","rby","ltx","lty","rtx","rty","minX","minY","transformObb","out_bl","out_tl","out_tr","out_br","anAffineTransform","197","findComponent","findComponents","_comp2","findChildComponent","findChildComponents","couldActiveInScene","_onSetParent","getChildByName","siblingIndex","siblings","oldIndex","walk","prefunc","postfunc","afterChildren","_stacks","_stackId","removeAllChildren","_checkMultipleComp","existing","_RFpeek","ReqComp","depended","attachedObjsForEditor","_addComponentAt","removeComponent","_getDependComponent","destroyAllChildren","newParent","inCurrentSceneBefore","inCurrentSceneNow","newPrefabRoot","myPrefabInfo","shouldActiveNow","isSyncedNode","newPrefabInfo","syncing","_registerIfAttached","_comp3","childIndex","SameNameGetSets","propertyDefine","./misc","198","199","_dstBlendFactor","_updateBlendFunc","dstBlendFactor","materialVar","_updateMaterialBlendFunc","200","Base64Values","BASE64_VALUES","HexChars","UuidTemplate","Indices","isFinite","base64","lhs","rhs","201","referenceNode","nameList","subChild","202","_normalMaterial","normalMaterial","_grayMaterial","grayMaterial","203","eventRegx","imageAttrReg","_parsedObject","_specialSymbolArray","htmlString","_resultObjectArray","_stack","tagEndIndex","tagBeginIndex","noTagBegin","_processResult","newStr","tagStr","_addToStack","_attributeToObject","attribute","nextSpace","eventObj","eventHanlderString","_processEventHandler","isNewLine","tagValue","remainingArgument","isValidImageTag","toLocaleLowerCase","defaultOutlineObject","outlineAttrReg","eventString","eventNames","isValidTag","eventValue","previousTagObj","_escapeSpecialSymbol","204","./CCPath","./find","./mutable-forward-iterator","./profiler/CCProfiler","205","sameNameGetSets","diffNameGetSets","np","getterFunc","suffix","NextPOT","BUILTIN_CLASSID_RE","BASE64_KEYS","pushToMap","pushFront","exists","min_inclusive","max_inclusive","degreesToRadians","radiansToDegrees","206","207","208","_PrefabInfo","fileId","eulerAnglesX","eulerAnglesY","eulerAnglesZ","prefabRoot","209","PerfCounter","_showFPS","_rootNode","generateStats","below","average","draws","logic","_counter","generateNode","leftLabel","rightLabel","beforeUpdate","afterUpdate","updateLabel","stat","human","afterDraw","../../platform/CCMacro","./perf-counter","210","Counter","_value","_averageValue","_accumValue","_accumSamples","_accumStart","_average","alarm","over","211","tick","avg","./counter","212","_BASELINE_RATIO","_BASELINE_OFFSET","MAX_CACHE_SIZE","LRUCache","limit","tail","moveToHead","discard","measureCache","label_wordRex","label_symbolRex","label_lastWordRex","label_lastEnglish","label_firstEnglish","highSurrogateRex","lowSurrogateRex","label_wrapinspection","__CHINESE_REG","__JAPANESE_REG","__KOREAN_REG","metric","_safeSubstring","targetString","endIndex","newStartIndex","newEndIndex","startChar","endChar","wrappedWords","fuzzyLen","tmpText","sLine","pushNum","checkWhile","checkCount","sText","213","loadImage","tex","cacheImage","postLoadTexture","../assets/CCTexture2D","214","NodeUnit","./node-mem-pool","./node-unit","215","MemPool","unitClass","_unitClass","_findOrder","_initNative","_nativeMemPool","_buildUnit","unitID","_destroyUnit","_findUnitID","findUnit","findOrder","hasSpace","firstUnit","isAllFree","216","Super","./mem-pool","217","Uint32_Bytes","Uint8_Bytes","Dirty_Type","Dirty_Members","Dirty_Stride","TRS_Members","TRS_Stride","FLOAT_BYTES","LocalMatrix_Members","LocalMatrix_Stride","WorldMatrix_Members","WorldMatrix_Stride","Parent_Type","Parent_Members","Parent_Stride","ZOrder_Type","ZOrder_Members","ZOrder_Stride","CullingMask_Type","CullingMask_Members","CullingMask_Stride","Opacity_Type","Opacity_Members","Opacity_Stride","Is3D_Type","Is3D_Members","Is3D_Stride","Node_Type","Node_Members","Skew_Members","Skew_Stride","UnitBase","memPool","contentNum","_contentNum","trsList","FLOAT_ARRAY_TYPE","localMatList","worldMatList","_spacesData","../../value-types/utils","./unit-base","218","POINTER_INVALID_FLAG","SPACE_FREE_FLAG","SPACE_USE_FLAG","POS_NEXT_FREE","POS_FREE_FLAG","_memPool","_signData","signIndex","UnitBaseProto","headFreeIndex","spaceNum","freeStr","usingNum","usingStr","freeFlag","totalNum","219","_valueType","_CCClass","_misc","_ValueType","fromHex","hex","hexString","subtract","multiply","divide","ag","ofs","setR","setG","setB","setA","toCSS","opt","fmt","toRGBValue","fromHSV","toHSV","hsv","WHITE_R","BLACK_R","TRANSPARENT_R","GRAY_R","RED_R","RED","GREEN_R","GREEN","BLUE_R","BLUE","YELLOW_R","YELLOW","ORANGE_R","ORANGE","CYAN_R","CYAN","MAGENTA_R","MAGENTA","./value-type","220","_exportNames","Vec4","Mat3","_mat2","math","./color","./mat3","./mat4","./quat","./rect","./size","./trs","./vec2","./vec3","./vec4","221","m00","m01","m02","m03","m04","m05","m06","m07","m08","m10","m11","m20","m21","m22","transpose","a01","a02","a12","a00","a10","a11","a20","a21","a22","b01","b11","b21","det","adjoint","b00","b02","b10","b12","b20","b22","multiplyMat4","translate","rotate","rad","fromTranslation","fromScaling","fromQuat","z2","xx","yx","yy","zx","zy","zz","wx","wy","wz","_fromViewUpIIFE","default_up","lengthSqr","cross","normalFromMat4","a03","a13","a23","a30","a31","a32","a33","b03","b04","b05","b06","b07","b08","b09","frob","multiplyScalar","multiplyScalarAndAdd","exactEquals","a0","a1","a2","a4","a5","a6","a7","a8","b0","b5","b6","b7","b8","IDENTITY","../value-types/utils","222","_a00","_a01","_a02","_a03","_a10","_a11","_a12","_a13","_a20","_a21","_a22","_a23","_a30","_a31","_a32","_a33","mulScalar","m23","m30","m31","m32","m33","axis","rotateX","rotateY","rotateZ","fromXRotation","fromYRotation","fromZRotation","xy","xz","yz","getTranslation","getScaling","m3","m3_1","m09","trace","S","toRTS","v3_1","fromMat3","fromRTS","sz","fromRTSOrigin","ox","oy","oz","frustum","near","far","rl","tb","nf","perspective","fovy","aspect","lr","bt","eye","eyex","eyey","eyez","upx","upy","upz","centerx","centery","centerz","z0","z1","inverseTranspose","strictEquals","epsilon","sm","fuzzyEquals","number","m14","m15","223","_z","_w","rotationTo","fromAxisAngle","getAxisAngle","outAxis","scaleAndAdd","bx","bw","bz","rotateAround","rot","qt_1","rotateAroundLocal","calculateW","slerp","scale0","scale1","cosom","omega","sinom","sqlerp","qt_2","invDot","fromAxes","xAxis","yAxis","zAxis","halfToRad","_s","_s2","_s3","cz","toAxisX","fy","fz","toAxisY","fx","toAxisZ","outerZ","bank","heading","attitude","toDegree","atan2","sqx","sqy","sqz","euler","224","fromMinMax","min_x","min_y","max_x","max_y","intersects","maxax","maxay","maxbx","maxby","intersection","rectB","axMin","ayMin","axMax","ayMax","bxMin","byMin","bxMax","byMax","containsRect","ax","ay","aw","ah","bh","225","ZERO_R","226","tmp_quat","227","INT_MIN","INT_MAX","INT_BITS","approx","clamp","inverseLerp","nextPow2","pingPong","pseudoRandom","pseudoRandomRange","pseudoRandomRangeInt","randomRange","randomRangeInt","toRadian","_d2r","_r2d","maxDiff","seed","228","229","neg","negate","squaredDistance","inverse","transformMat3","v2_1","v2_2","cosine","magSqr","subSelf","mulSelf","divSelf","scaleSelf","negSelf","variance","addSelf","invsqrt","magSqr1","magSqr2","theta","signAngle","radians","rotateSelf","project","maxAxis","squaredMagnitude","ONE_R","UP_R","RIGHT_R","230","zero","az","cosTheta","sinTheta","rhw","transformMat4Normal","transformAffine","ix","iy","iz","iw","transformRTS","transformInverseRTS","rx","ry","rz","v3_2","projectOnPlane","sqrLen","vec1","vec2","FRONT_R","231","v4","equals4f","strictEquals4f","minInclusive","maxInclusive","NEG_ONE_R","NEG_ONE","232","deprecateEnum","oldPath","newPath","hasTypePrefixBefore","delimiter","oldPropName","oldTypeName","markAsRemoved","ownerCtor","removedProps","ownerName","markAsDeprecated","deprecatedProps","descriptors","getOwnPropertyDescriptors","deprecatedProp","markAsRemovedInObject","ownerObj","provideClearError","Info","accessor","etProp","markFunctionWarning","originFunc","_glID","PI2","FLT_MAX","FLT_MIN","UINT_MAX","scheduleCallbackForTarget","scheduleUpdateForTarget","unscheduleCallbackForTarget","unscheduleUpdateForTarget","unscheduleAllCallbacksForTarget","unscheduleAllCallbacksWithMinPriority","adjustViewPort","setViewPortInPoints","getViewPortRect","getChildByTag","removeChildByTag","getRotationX","setRotationX","getRotationY","setRotationY","getPositionX","setPositionX","getPositionY","setPositionY","getSkewX","setSkewX","getSkewY","setSkewY","setScaleX","setScaleY","getOpacity","setOpacity","getColor","getLocalZOrder","setLocalZOrder","setInsetLeft","setInsetRight","setInsetTop","setInsetBottom","getInstantiatedBuiltinMaterial","getInstantiatedMaterial","ERR","Light","affineTransformMake","affineTransformMakeIdentity","affineTransformClone","affineTransformConcat","affineTransformConcatIn","affineTransformInvert","affineTransformInvertIn","affineTransformInvertOut","affineTransformEqualToTransform","pointApplyAffineTransform","sizeApplyAffineTransform","rectApplyAffineTransform","obbApplyAffineTransform","pointEqualToPoint","sizeEqualToSize","rectEqualToRect","rectContainsRect","rectContainsPoint","rectOverlapsRect","rectIntersectsRect","rectIntersection","rectUnion","rectGetMaxX","rectGetMidX","rectGetMinX","rectGetMaxY","rectGetMidY","rectGetMinY","colorEqual","hexToColor","colorToHex","pNeg","pAdd","pSub","pMult","pMidpoint","pDot","pCross","pPerp","pRPerp","pProject","pLengthSQ","pDistanceSQ","pLength","pDistance","pNormalize","pForAngle","pToAngle","pZeroIn","pIn","pMultIn","pSubIn","pAddIn","pNormalizeIn","pSameAs","pAngle","pAngleSigned","pRotateByAngle","pCompMult","pFuzzyEqual","pLerp","pClamp","rand","randomMinus1To1","_renderType","_getError","_initDebugSetting","rgb2hsv","hsv2rgb","dragonBones","CCFactory","getInstance","vmath","233","./actions","./core/CCGame","234","CCSpriteFrame","ParticleAsset","../core/assets/CCAsset","../core/assets/CCSpriteFrame","235","USAGE_STREAM","INDEX_FMT_UINT8","INDEX_FMT_UINT32","ATTR_NORMAL","ATTR_TANGENT","ATTR_BITANGENT","ATTR_WEIGHTS","ATTR_JOINTS","ATTR_COLOR1","ATTR_UV","ATTR_UV1","ATTR_UV2","ATTR_UV3","ATTR_UV4","ATTR_UV5","ATTR_UV6","ATTR_UV7","ATTR_TYPE_INT8","ATTR_TYPE_INT16","ATTR_TYPE_UINT16","ATTR_TYPE_INT32","ATTR_TYPE_UINT32","FILTER_NEAREST","FILTER_LINEAR","WRAP_CLAMP","WRAP_MIRROR","TEXTURE_FMT_RGB_DXT1","TEXTURE_FMT_RGBA_DXT1","TEXTURE_FMT_RGBA_DXT3","TEXTURE_FMT_RGBA_DXT5","TEXTURE_FMT_RGB16F","TEXTURE_FMT_RGBA16F","TEXTURE_FMT_RGB32F","TEXTURE_FMT_R32F","TEXTURE_FMT_111110F","TEXTURE_FMT_SRGB","TEXTURE_FMT_SRGBA","TEXTURE_FMT_D16","TEXTURE_FMT_D32","TEXTURE_FMT_D24S8","DS_FUNC_NEVER","DS_FUNC_EQUAL","DS_FUNC_LEQUAL","DS_FUNC_GREATER","DS_FUNC_NOTEQUAL","DS_FUNC_GEQUAL","RB_FMT_RGBA4","RB_FMT_RGB5_A1","RB_FMT_RGB565","BLEND_FUNC_SUBTRACT","BLEND_FUNC_REVERSE_SUBTRACT","BLEND_ZERO","BLEND_ONE","BLEND_SRC_COLOR","BLEND_ONE_MINUS_SRC_COLOR","BLEND_DST_COLOR","BLEND_ONE_MINUS_DST_COLOR","BLEND_DST_ALPHA","BLEND_ONE_MINUS_DST_ALPHA","BLEND_CONSTANT_COLOR","BLEND_ONE_MINUS_CONSTANT_COLOR","BLEND_CONSTANT_ALPHA","BLEND_ONE_MINUS_CONSTANT_ALPHA","BLEND_SRC_ALPHA_SATURATE","STENCIL_DISABLE","STENCIL_ENABLE","STENCIL_OP_ZERO","STENCIL_OP_REPLACE","STENCIL_OP_INCR","STENCIL_OP_INCR_WRAP","STENCIL_OP_DECR","STENCIL_OP_DECR_WRAP","STENCIL_OP_INVERT","CULL_NONE","CULL_FRONT","CULL_FRONT_AND_BACK","PT_POINTS","PT_LINES","PT_LINE_LOOP","PT_LINE_STRIP","PT_TRIANGLES","PT_TRIANGLE_STRIP","PT_TRIANGLE_FAN","RenderQueue","OVERLAY","murmurhash2_32_gc","WebGLEXT","GFXObjectType","GFXStatus","GFXObject","gfxType","_gfxType","_status","UNREADY","GFXAttributeName","GFXType","GFXFormat","GFXBufferUsageBit","GFXMemoryUsageBit","GFXBufferAccessBit","GFXPrimitiveMode","GFXPolygonMode","GFXShadeModel","GFXCullMode","GFXComparisonFunc","GFXStencilOp","GFXBlendOp","GFXBlendFactor","GFXColorMask","GFXFilter","GFXAddress","GFXTextureType","GFXTextureUsageBit","GFXSampleCount","GFXTextureFlagBit","GFXTextureViewType","GFXShaderType","GFXBindingType","GFXCommandBufferType","GFXLoadOp","GFXStoreOp","GFXTextureLayout","GFXPipelineBindPoint","GFXDynamicState","GFXStencilFace","GFXQueueType","GFXClearFlag","GFXGetTypeSize","BOOL","INT","UINT","FLOAT","BOOL2","INT2","UINT2","FLOAT2","BOOL3","INT3","UINT3","FLOAT3","BOOL4","INT4","UINT4","FLOAT4","MAT2","MAT2X3","MAT2X4","MAT3X2","MAT3","MAT3X4","MAT4X2","MAT4","SAMPLER1D","SAMPLER1D_ARRAY","SAMPLER2D","SAMPLER2D_ARRAY","SAMPLER3D","SAMPLER_CUBE","RenderPassStage","RenderPriority","MAX_BINDING_SUPPORTED","UniformBinding","SamplerInfoIndex","sizeMap","formatMap","R32I","RG32I","RGB32I","RGBA32I","R32F","RG32F","RGB32F","passParams","BACK","FRONT","ADD","SUB","REV_SUB","CONSTANT_COLOR","CONSTANT_ALPHA","NEVER","LESS","EQUAL","LEQUAL","GREATER","NOTEQUAL","GEQUAL","KEEP","REPLACE","INCR","INCR_WRAP","DECR","DECR_WRAP","INVERT","effectStructure","$techniques","$passes","any","sampler","mappings","236","_memop","_view","_m4_tmp","_stageInfos","RecyclePool","_float2_pool","_float3_pool","_float4_pool","_float9_pool","_float16_pool","_float64_pool","_int2_pool","_int3_pool","_int4_pool","_int64_pool","Base","_this$_type2defaultVa","_type2defaultValue","PARAM_INT2","PARAM_INT3","PARAM_INT4","PARAM_FLOAT2","PARAM_FLOAT3","PARAM_FLOAT4","PARAM_COLOR4","PARAM_MAT3","PARAM_MAT4","defaultTextureCube","_stage2fn","_usedTextureUnits","_viewPools","_drawItemsPools","_stageItemsPools","_definesChanged","_resetTextuerUnit","_allocTextureUnit","maxTextureUnits","_registerStage","fn","_requestView","clearOpts","CLEAR_COLOR","CLEAR_DEPTH","CLEAR_STENCIL","_stencil","_models","drawItem","extractDrawItem","_stages","stageItems","_drawItem","stageItem","stageInfo","_setProperty","slots","setTextureArray","setUniformDirectly","setUniform","_draw","programLib","_programKey","setVertexBuffer","setIndexBuffer","setPrimitiveType","_primitiveType","getProgram","setProgram","_uniforms","variants","enableBlend","setBlendFuncSep","setBlendEqSep","setBlendColor32","enableDepthTest","setDepthFunc","enableDepthWrite","setStencilTest","setStencilFuncFront","setStencilOpFront","setStencilFuncBack","setStencilOpBack","draw","../../core/value-types","../enums","../gfx","../memop","./program-lib","./view","237","pt","238","_detailName","setStage","newProperties","../../core/value-types/value-type","239","_shdID","_generateDefines","tmpDefines","_replaceMacroNums","_unrollLoops","begin","snippet","unroll","parsedBegin","parsedEnd","_replaceHighp","ProgramLib","_templates","_checkPrecision","prog","glsl1","vert","frag","cnt","log2","samplers","blocks","members","extensions","hasProgram","getKey","tmpl","tmplDefs","errPrefix","customDef","_highpSupported","Program","errors","link","vertLines","fragLines","defineLength","originLine","lines","fileID","highpSupported","getShaderPrecisionFormat","vertHighp","VERTEX_SHADER","HIGH_FLOAT","fragHighp","FRAGMENT_SHADER","precision","240","Technique","241","_genID","_priority","_clearModel","_matView","_matViewInv","_matProj","_matViewProj","_matInvViewProj","_cullingByID","_shadowLight","getForward","242","_mappings","PROJ_PERSPECTIVE","PROJ_ORTHO","LIGHT_DIRECTIONAL","LIGHT_POINT","LIGHT_SPOT","LIGHT_AMBIENT","SHADOW_NONE","SHADOW_HARD","SHADOW_SOFT","ivec2","ivec3","ivec4","vec3","vec4","PARAM_MAT2","mat2","mat3","sampler2D","samplerCube","CLEAR_SKYBOX","BUFFER_VIEW_INT8","BUFFER_VIEW_UINT8","BUFFER_VIEW_INT16","BUFFER_VIEW_UINT16","BUFFER_VIEW_INT32","BUFFER_VIEW_UINT32","BUFFER_VIEW_FLOAT32","./build/mappings","243","_state","_texture2d","_textureCube","_type2uniformCommit2","_type2uniformArrayCom","GL_INT","GL_FLOAT","GL_FLOAT_VEC2","GL_FLOAT_VEC3","GL_FLOAT_VEC4","GL_INT_VEC2","GL_INT_VEC3","GL_INT_VEC4","GL_BOOL","GL_BOOL_VEC2","GL_BOOL_VEC3","GL_BOOL_VEC4","GL_FLOAT_MAT2","GL_FLOAT_MAT3","GL_FLOAT_MAT4","GL_SAMPLER_2D","GL_SAMPLER_CUBE","_type2uniformCommit","uniform1i","uniform1f","uniform2fv","uniform3fv","uniform4fv","uniform2iv","uniform3iv","uniform4iv","uniformMatrix2fv","uniformMatrix3fv","uniformMatrix4fv","_type2uniformArrayCommit","uniform1iv","uniform1fv","_commitBlendStates","disable","BLEND","blendSep","blendFuncSeparate","blendEquationSeparate","blendFunc","blendEquation","_commitDepthStates","DEPTH_TEST","depthMask","_commitStencilStates","STENCIL_TEST","stencilSep","stencilFuncSeparate","stencilMaskSeparate","stencilOpSeparate","stencilOp","_commitCullMode","CULL_FACE","cullFace","_commitVertexBuffers","attrsDirty","maxStream","vertexBuffers","vertexBufferOffsets","maxVertexAttribs","_newAttributes","vbOffset","bindBuffer","ARRAY_BUFFER","_attributes","_enabledAttributes","enableVertexAttribArray","vertexAttribPointer","stride","disableVertexAttribArray","_commitTextures","maxTextureSlot","textureUnits","activeTexture","TEXTURE0","bindTexture","_attach","attachment","face","framebufferTexture2D","TEXTURE_2D","TEXTURE_CUBE_MAP_POSITIVE_X","framebufferRenderbuffer","RENDERBUFFER","preserveDrawingBuffer","_extensions","_initExtensions","_initCaps","_initStates","initDefault","_current","vendorPrefixes","getExtension","extDrawBuffers","maxVertexStreams","maxVertexTextures","MAX_VERTEX_TEXTURE_IMAGE_UNITS","maxFragUniforms","MAX_FRAGMENT_UNIFORM_VECTORS","MAX_TEXTURE_IMAGE_UNITS","MAX_VERTEX_ATTRIBS","maxTextureSize","MAX_TEXTURE_SIZE","maxDrawBuffers","MAX_DRAW_BUFFERS_WEBGL","maxColorAttachments","MAX_COLOR_ATTACHMENTS_WEBGL","FUNC_ADD","colorMask","POLYGON_OFFSET_FILL","depthRange","clearDepth","clearStencil","_restoreIndexBuffer","indexBuffer","ELEMENT_ARRAY_BUFFER","allowFloatTexture","fb","numColors","_colors","colorBuffer","COLOR_ATTACHMENT0","DEPTH_ATTACHMENT","STENCIL_ATTACHMENT","_depthStencil","DEPTH_STENCIL_ATTACHMENT","COLOR_BUFFER_BIT","DEPTH_BUFFER_BIT","STENCIL_BUFFER_BIT","setStencilFunc","setStencilOp","failOp","zFailOp","zPassOp","writeMask","rgba","setBlendColor","setBlendFunc","dst","srcAlpha","dstAlpha","setBlendEq","eq","alphaEq","stream","slot","sameType","isFloat32Array","isInt32Array","programDirty","_linked","useProgram","commitFunc","drawElements","_bytesPerIndex","drawArrays","./enums","./state","./texture-2d","./texture-cube","244","attrTypeBytes","glFilter","glTextureFmt","GL_NEAREST_MIPMAP_NEAREST","GL_LINEAR_MIPMAP_NEAREST","GL_NEAREST_MIPMAP_LINEAR","GL_LINEAR_MIPMAP_LINEAR","GL_UNSIGNED_BYTE","GL_UNSIGNED_SHORT","GL_UNSIGNED_INT","GL_UNSIGNED_SHORT_5_6_5","GL_UNSIGNED_SHORT_4_4_4_4","GL_UNSIGNED_SHORT_5_5_5_1","GL_HALF_FLOAT_OES","GL_DEPTH_COMPONENT","GL_ALPHA","GL_RGB","GL_LUMINANCE","GL_LUMINANCE_ALPHA","GL_COMPRESSED_RGB_S3TC_DXT1_EXT","GL_COMPRESSED_RGBA_S3TC_DXT1_EXT","GL_COMPRESSED_RGBA_S3TC_DXT3_EXT","GL_COMPRESSED_RGBA_S3TC_DXT5_EXT","GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG","GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG","GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG","GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG","GL_COMPRESSED_RGB_ETC1_WEBGL","GL_COMPRESSED_RGB8_ETC2","GL_COMPRESSED_RGBA8_ETC2_EAC","_filterGL","_textureFmtGL","internalFormat","pixelType","ATTR_TEX_COORD","ATTR_TEX_COORD1","ATTR_TEX_COORD2","ATTR_TEX_COORD3","ATTR_TEX_COORD4","ATTR_TEX_COORD5","ATTR_TEX_COORD6","ATTR_TEX_COORD7","ATTR_TEX_COORD8","attrType","LINEAR_MIPMAP_LINEAR","245","createFramebuffer","deleteFramebuffer","246","_BYTES_PER_INDEX","BYTES_PER_INDEX","usage","_usage","_numIndices","_needExpandDataStore","createBuffer","deleteBuffer","bytes","glUsage","bufferData","bufferSubData","setUsage","247","TextureCube","./device","./frame-buffer","./index-buffer","./program","./render-buffer","./texture","./vertex-buffer","248","isPow2","249","_parseError","errorLog","parts","_samplers","_errors","_vertSource","_fragSource","vertShader","_createShader","fragShader","createProgram","attachShader","linkProgram","failed","getShaderParameter","COMPILE_STATUS","getShaderInfoLog","deleteShader","getProgramParameter","LINK_STATUS","getProgramInfoLog","numAttributes","ACTIVE_ATTRIBUTES","getActiveAttrib","getAttribLocation","numUniforms","ACTIVE_UNIFORMS","_info","getActiveUniform","_location","getUniformLocation","deleteProgram","shader","createShader","shaderSource","compileShader","250","createRenderbuffer","bindRenderbuffer","renderbufferStorage","deleteRenderbuffer","251","cpy","252","_Texture","_genMipmap","caps","textureMaxSize","pot","_setMipmap","hint","GENERATE_MIPMAP_HINT","NICEST","generateMipmap","_setTexInfo","glFmt","_setSubImage","_setImage","pixelStorei","UNPACK_FLIP_Y_WEBGL","UNPACK_PREMULTIPLY_ALPHA_WEBGL","compressedTexSubImage2D","texSubImage2D","compressedTexImage2D","texImage2D","texParameteri","TEXTURE_MIN_FILTER","TEXTURE_MAG_FILTER","TEXTURE_WRAP_S","TEXTURE_WRAP_T","TEXTURE_MAX_ANISOTROPY_EXT","253","TEXTURE_CUBE_MAP","faceIndex","levelImages","254","_nullWebGLTexture","_textureID","255","_bytesPerVertex","_numVertices","getFormat","256","_attr2el","_elements","_el","../murmurhash2_gc","257","CircularPool","_cursor","258","_timsort","FixedArray","cmp","./timsort","259","TypedArrayPool","LinkedArray","_circularPool","_fixedArray","_linkedArray","_typedArrayPool","./circular-pool","./fixed-array","./linked-array","./pool","./recycle-pool","./typed-array-pool","260","_head","_tail","alloc","_prev","free","binder","cursor","261","_idx","_frees","_expand","262","263","DEFAULT_MIN_MERGE","DEFAULT_MIN_GALLOPING","DEFAULT_TMP_STORAGE_LENGTH","POWERS_OF_TEN","log10","alphabeticalCompare","aStr","bStr","minRunLength","makeAscendingRun","lo","hi","compare","runHi","reverseRun","binaryInsertionSort","pivot","gallopLeft","lastOffset","maxOffset","gallopRight","TimSort","minGallop","tmpStorageLength","stackLength","runStart","runLength","stackSize","pushRun","mergeRuns","mergeAt","forceMergeRuns","start1","length1","start2","length2","mergeLow","mergeHigh","cursor1","cursor2","count1","count2","exit","customCursor","customDest","remaining","ts","minRun","264","_bufferPools","_nextPow16","_log2","_alloc","buf","alloc_int8","alloc_uint8","alloc_int16","alloc_uint16","alloc_int32","alloc_uint32","alloc_float32","alloc_float64","alloc_dataview","265","266","_baseRenderer","_a16_view","_a16_view_inv","_a16_proj","_a16_viewProj","_a4_camPos","_a64_shadow_lightViewProj","_a16_shadow_lightViewProjs","_a4_shadow_info","_camPos","_camFwd","_v3_tmp1","CC_MAX_LIGHTS","CC_MAX_SHADOW_LIGHTS","sortView","_BaseRenderer","_lights","_shadowLights","_numLights","_shadowStage","_opaqueStage","_transparentStage","_updateLights","extractView","_view2","lights","light","shadowType","_updateLightDefines","lightKey","shadowKey","_shadowType","newCount","CC_NUM_LIGHTS","CC_NUM_SHADOW_LIGHTS","_submitLightsUniforms","positionAndRanges","directions","lightNum","_colorUniform","_directionUniform","_positionUniform","_range","_spotUniform","_submitShadowStageUniforms","shadowInfo","shadowMinDepth","shadowMaxDepth","shadowDepthScale","shadowDarkness","shadowBias","CC_SHADOW_TYPE","_submitOtherStagesUniforms","viewProjMatrix","_shadowResolution","_sortItems","_drawItems","shadowLights","_item","shadowIdx","shadowMap","../core/base-renderer","267","_tmp_mat4","_tmp_v3","_tmp2_v3","_poolID","_projection","_near","_far","_orthoHeight","setCullingMask","getPriority","getOrthoHeight","getFov","getNear","getFar","getDepth","getStencil","getClearFlags","getStages","getFramebuffer","framebuffer","_calcMatrices","screenPointToRay","worldPos","worldMatrixToScreen","worldMatrix","halfWidth","halfHeight","../../core/geom-utils","268","Model","_viewID","_cameraID","_userKey","_castShadow","_boundingShape","setUserKey","269","app","_app","_views","_add","_remove","setDebugCamera","cam","getCameraCount","getCamera","getModelCount","getModel","getLightCount","getLight","addLight","removeLight","addView","removeView","270","ctor2enums","getInspectorProps","getInstanceType","getInstanceCtor","_CCTexture2D","_ctor2default","_enums2ctor","_ctor2enums","_enums2default","gfxTexture2D","gfxTextureCube","ctor2default","enums2ctor","PARAM_COLOR3","className2InspectorName","typeName","valueCtor","assetType","../core/assets/CCTexture2D","../core/value-types","./gfx/texture-2d","271","TiledMapAsset","tmxXmlStr","textureNames","textureSizes","imageLayerTextures","imageLayerTextureNames","tsxFiles","tsxFileNames","272","./cocos2d/actions","./cocos2d/animation","./cocos2d/core","./cocos2d/core/components/CCStudioComponent","./cocos2d/deprecated","./cocos2d/particle","./cocos2d/particle/CCParticleAsset","./cocos2d/tilemap","./cocos2d/tilemap/CCTiledMapAsset","./cocos2d/videoplayer/CCVideoPlayer","./cocos2d/webview/CCWebView","./extensions/ccpool/CCNodePool","./extensions/dragonbones","./extensions/spine","273","EmptyHandle","ATTACHED_ROOT_NAME","ATTACHED_PRE_NAME","limitNode","_tempMat4","AttachUtil","_skeleton","_skeletonNode","_skeletonComp","_attachedRootNode","_attachedNodeArray","_boneIndexToNode","skeletonComp","_prepareAttachNode","armature","isCached","isAnimationCached","_frameCache","enableCacheAttachedInfo","_buildBoneAttachedNode","bone","boneIndex","boneNodeName","boneNode","_buildBoneRelation","_bone","_boneIndex","getAttachedRootNode","getAttachedNodes","boneName","nodeArray","_rebuildNodeArray","findMap","oldNodeArray","_toRemove","_sortNodeArray","_getNodeByBoneIndex","destroyAttachedNodes","markTree","delName","generateAttachedNodes","targetNodes","bones","boneData","buildBoneTree","parentBoneNode","_n","targetNode","destroyAllAttachedNodes","generateAllAttachedNodes","parentIndex","_hasAttachedNode","attachedRootNode","_associateAttachedNode","_syncAttachedNode","rootMatrix","boneInfos","_curFrame","mulMat","matrixHandle","nodeMat","worldX","worldY","nodeArrayDirty","../../cocos2d/core/renderer/render-flow","../../cocos2d/core/value-types/mat4","274","TrackEntryListeners","spine","Graphics","SkeletonCache","DefaultSkinsEnum","DefaultAnimsEnum","","AnimationCacheMode","REALTIME","SHARED_CACHE","PRIVATE_CACHE","setEnumAttr","Skeleton","skeletonData","SkeletonData","defaultSkin","defaultAnimation","_updateSkeletonData","_animationName","getCurrent","setAnimation","loop","clearTrack","setToSetupPose","_defaultSkinIndex","skinsEnum","getSkinsEnum","skinIndex","skinName","setSkin","_animationIndex","animationName","animsEnum","getAnimsEnum","animIndex","animName","_preCacheMode","_cacheMode","_defaultCacheMode","setAnimationCacheMode","premultipliedAlpha","debugSlots","_updateDebugDraw","debugBones","debugMesh","useTint","_updateUseTint","enableBatch","_updateBatch","_accTime","_playCount","_skeletonCache","_animationQueue","_headAniInfo","_playTimes","_isAniComplete","_effectDelegate","_rootBone","_listener","_materialCache","_debugRenderer","_startSlotIndex","_endSlotIndex","_startEntry","trackIndex","_endEntry","attachUtil","_dataDirty","invalidAnimationCache","baseMaterial","isTexturesLoaded","setSkeletonData","sharedCache","enablePrivateMode","skeletonInfo","getSkeletonCache","skeleton","_clipper","clipper","getRootBone","SkeletonClipping","setSlotsRange","startSlotIndex","endSlotIndex","setAnimationStateData","stateData","frameCache","isInvalid","updateToFrame","aniInfo","_updateCache","_updateRealtime","_emitCacheCompleteEvent","isInited","frameTime","FrameTime","frameIdx","setVertexEffectDelegate","effectDelegate","updateWorldTransform","setBonesToSetupPose","setSlotsToSetupPose","updateAnimationCache","findBone","findSlot","slotName","setSkinByName","getAttachment","attachmentName","getAttachmentByName","setAttachment","getRegion","region","setRegion","MeshAttachment","RegionAttachment","updateOffset","getTextureAtlas","regionAttachment","setMix","fromAnimation","toAnimation","getAnimationCache","initAnimationCache","findAnimation","setAnimationWith","addAnimationWith","clearTracks","setStartListener","_ensureListener","setInterruptListener","interrupt","setEndListener","setDisposeListener","dispose","setCompleteListener","setEventListener","setTrackStartListener","getListeners","setTrackInterruptListener","setTrackEndListener","setTrackDisposeListener","setTrackCompleteListener","trackEntry","loopCount","trackTime","animationEnd","setTrackEventListener","_updateAnimEnum","_updateSkinEnum","getRuntimeData","AnimationStateData","_refreshInspector","refreshSelectedInspector","debugDrawNode","debugDraw","../../cocos2d/core/components/CCRenderComponent","../../cocos2d/core/graphics/graphics","./AttachUtil","./lib/spine","./skeleton-cache","./track-entry-listeners","275","_isUseSpine","ATTACHMENT_TYPE","REGION","BOUNDING_BOX","SKINNED_MESH","AnimationEventType","START","INTERRUPT","END","DISPOSE","COMPLETE","EVENT","./Skeleton","./skeleton-data","./skeleton-texture","./spine-assembler","./vertex-effect-delegate","276","__extends","_extendStatics","extendStatics","__","timelines","timelineIds","getPropertyId","hasTimeline","lastTime","linearSearch","MixBlend","MixDirection","TimelineType","CurveTimeline","newFloatArray","BEZIER_SIZE","getFrameCount","setLinear","setStepped","STEPPED","getCurveType","BEZIER","setCurve","cx1","cy1","cx2","cy2","tmpx","tmpy","dddfx","dddfy","ddfx","ddfy","dfx","dfy","getCurvePercent","MathUtils","prevX","prevY","RotateTimeline","setFrame","degrees","first","r_1","ENTRIES","r_2","PREV_ROTATION","prevRotation","PREV_TIME","TranslateTimeline","X","Y","PREV_X","PREV_Y","ScaleTimeline","mixOut","signum","ShearTimeline","shear","shearX","shearY","ColorTimeline","slotIndex","R","G","B","A","setFromColor","PREV_R","PREV_G","PREV_B","PREV_A","TwoColorTimeline","twoColor","r2","g2","R2","G2","B2","darkColor","dark","setupLight","setupDark","PREV_R2","PREV_G2","PREV_B2","AttachmentTimeline","attachmentNames","attachmentName_1","attachmentName_2","zeros","DeformTimeline","frameVertices","deform","firedEvents","slotAttachment","VertexAttachment","deformAttachment","deformArray","vertexAttachment","deform_1","setArraySize","setupVertices","lastVertices","i_1","i_2","arrayCopy","vertexAttachment_1","i_3","i_4","i_5","i_6","i_7","prevVertices","nextVertices","i_8","i_9","i_10","vertexAttachment_2","i_11","i_12","i_13","i_14","i_15","EventTimeline","DrawOrderTimeline","drawOrders","drawOrder","drawOrderToSetupIndex","IkConstraintTimeline","ikConstraint","ikConstraintIndex","mix","softness","bendDirection","compress","stretch","MIX","SOFTNESS","BEND_DIRECTION","COMPRESS","STRETCH","constraint","ikConstraints","PREV_MIX","PREV_SOFTNESS","PREV_BEND_DIRECTION","PREV_COMPRESS","PREV_STRETCH","mixIn","TransformConstraintTimeline","transformConstraint","transformConstraintIndex","rotateMix","translateMix","scaleMix","shearMix","ROTATE","TRANSLATE","SHEAR","transformConstraints","PREV_ROTATE","PREV_TRANSLATE","PREV_SCALE","PREV_SHEAR","PathConstraintPositionTimeline","pathConstraintPosition","pathConstraintIndex","VALUE","pathConstraints","PREV_VALUE","PathConstraintSpacingTimeline","pathConstraintSpacing","spacing","PathConstraintMixTimeline","pathConstraintMix","tracks","queue","EventQueue","propertyIDs","IntSet","animationsChanged","trackEntryPool","TrackEntry","animationLast","nextAnimationLast","trackLast","nextTrackLast","currentDelta","nextTime","setCurrent","mixingFrom","mixTime","trackEnd","disposeNext","updateMixingFrom","mixingTo","drain","finished","mixDuration","totalAlpha","interruptAlpha","_animationsChanged","applied","mixBlend","applyMixingFrom","animationTime","getAnimationTime","timelineCount","ii","webkit602BugfixHelper","timelineMode","firstFrame","timelinesRotation","timeline","timelineBlend","NOT_LAST","SUBSEQUENT","applyRotateTimeline","queueEvents","eventThreshold","attachments","attachmentThreshold","drawOrderThreshold","alphaHold","alphaMix","timelineHoldMix","FIRST","HOLD","holdMix","rotateTimeline","r1","diff","lastTotal","lastDiff","animationStart","trackLastWrapped","event_1","event_2","oldDrainDisabled","drainDisabled","expandToIndex","getMix","setEmptyAnimation","emptyAnimation","addEmptyAnimation","setEmptyAnimations","ensureArrayCapacity","obtain","holdPrevious","computeHold","computeNotLast","timelinesCount","timelineDipMix","HOLD_MIX","clearListeners","clearListenerNotifications","setAnimationLast","isComplete","resetRotationDirections","animState","objects","event_3","AnimationStateAdapter","animationToMixTime","defaultMix","fromName","toName","setMixWith","textureLoader","pathPrefix","toLoad","responseText","downloadBinary","loadBinary","loadText","loadTexture","loadTextureData","loadTextureAtlas","atlasData","pagesLoaded","atlasPages","TextureAtlas","FakeTexture","_loop_1","atlasPage","pageLoadError","imagePath","errorMessage","atlasPages_1","isLoadingComplete","getToLoad","getLoaded","hasErrors","getErrors","AtlasAttachmentLoader","newRegionAttachment","skin","findRegion","renderObject","newMeshAttachment","newBoundingBoxAttachment","BoundingBoxAttachment","newPathAttachment","PathAttachment","newPointAttachment","PointAttachment","newClippingAttachment","ClippingAttachment","BlendMode","Bone","arotation","ascaleX","ascaleY","ashearX","ashearY","appliedValid","sorted","isActive","updateWorldTransformWith","cosDeg","sinDeg","transformMode","TransformMode","la","lb","lc","ld","OnlyTranslation","NoRotationOrReflection","prx","radDeg","NoScale","NoScaleOrReflection","za","zc","zb","zd","getWorldRotationX","getWorldRotationY","getWorldScaleX","getWorldScaleY","updateAppliedTransform","pid","dx","dy","ic","ra","rb","rc","worldToLocal","invDet","localToWorld","worldToLocalRotation","worldRotation","localToWorldRotation","localRotation","rotateWorld","BoneData","skinRequired","ConstraintData","EventData","IkConstraint","apply1","apply2","rotationIK","dd","bendDir","psx","psy","csx","os1","os2","s2","cwx","cwy","pp","td","ta","r0","minAngle","minDist","maxAngle","maxDist","IkConstraintData","PathConstraint","spaces","positions","segments","percentSpacing","spacingMode","SpacingMode","Percent","rotateMode","tangents","RotateMode","Tangent","ChainScale","boneCount","spacesCount","lengthSpacing","Length","setupLength","length_1","length_2","computeWorldPositions","positionMode","PositionMode","boneX","boneY","offsetRotation","tip","Chain","degRad","length_3","length_4","percentPosition","closed","verticesLength","worldVerticesLength","curveCount","prevCurve","constantSpeed","pathLength_1","BEFORE","computeWorldVertices","addBeforePosition","AFTER","addAfterPosition","length_5","addCurvePosition","pathLength","curveLength","segment","length_6","length_7","tt","ttt","uu","uuu","ut","ut3","uut3","utt3","PathConstraintData","Assets","clientId","SharedAssetManager","clientAssets","queuedAssets","queueAsset","onreadystatechange","DONE","loadJson","updateClientAssets","rawAsset","updateCacheReset","parent_1","slotData","Slot","ikConstraintData","transformConstraintData","TransformConstraint","pathConstraintData","updateCache","skinBones","ikCount","transformCount","pathCount","constraintCount","sortIkConstraint","sortTransformConstraint","sortPathConstraint","sortBone","constraints","constrained","sortReset","slotBone","sortPathConstraintAttachment","skins","sortPathConstraintAttachmentWith","pathBones","findBoneIndex","findSlotIndex","findSkin","newSkin","attachAll","name_1","findIkConstraint","constraintName","findTransformConstraint","findPathConstraint","getBounds","POSITIVE_INFINITY","NEGATIVE_INFINITY","mesh","nn","SkeletonBinary","attachmentLoader","linkedMeshes","readSkeletonData","binary","BinaryInput","readString","readFloat","nonessential","readBoolean","imagesPath","audioPath","readInt","name_2","parent_2","TransformModeValues","rgba8888ToColor","readInt32","SlotData","rgb888ToColor","readStringRef","blendMode","BlendModeValues","readByte","TransformConstraintData","offsetScaleX","offsetScaleY","offsetShearY","PositionModeValues","SpacingModeValues","RotateModeValues","Fixed","readSkin","linkedMesh","parent_3","inheritDeform","setParentMesh","intValue","floatValue","stringValue","volume","balance","animations","readAnimation","slotCount","Skin","name_3","readAttachment","AttachmentTypeValues","AttachmentType","Region","BoundingBox","readVertices","readFloatArray","readShortArray","hullLength","edges","regionUVs","LinkedMesh","parent_4","Path","closed_1","Clipping","endSlot","Vertices","weights","bonesArray","toFloatArray","readShort","tempColor1","tempColor2","timelineType","SLOT_ATTACHMENT","SLOT_COLOR","readCurve","SLOT_TWO_COLOR","BONE_ROTATE","BONE_TRANSLATE","BONE_SCALE","BONE_SHEAR","timelineScale","PATH_POSITION","PATH_SPACING","PATH_MIX","iii","nnn","weighted","deformLength","vn","drawOrderCount","offsetCount","unchanged","unchangedIndex","eventCount","event_4","CURVE_STEPPED","CURVE_BEZIER","Additive","Multiply","Screen","CURVE_LINEAR","getInt16","optimizePositive","byteCount","chars","charCount","fromCharCode","SkeletonBounds","boundingBoxes","polygons","polygonPool","updateAabb","freeAll","boundingBox","polygon","aabbCompute","aabbContainsPoint","aabbIntersectsSegment","aabbIntersectsSkeleton","bounds","containsPoint","containsPointPolygon","prevIndex","inside","vertexY","vertexX","intersectsSegment","intersectsSegmentPolygon","width12","height12","det1","y3","x4","y4","det2","width34","height34","det3","getPolygon","getWidth","getHeight","triangulator","Triangulator","clippingPolygon","clipOutput","clippedVertices","clippedTriangles","scratch","clipStart","clipAttachment","makeClockwise","clippingPolygons","decompose","triangulate","n_1","clipEndWithSlot","clipEnd","isClipping","clipTriangles","trianglesLength","originIndexOffset","originVertOffset","originUVSOffset","polygonsCount","vertexSize","xyOffset","u2","u3","clippedVerticesItems","clippedTrianglesItems","clipOutputLength","d0","d4","clipOutputCount","clipOutputItems","c0","clippingArea","originalOutput","clipped","clippingVertices","clippingVerticesLast","edgeX","edgeY","edgeX2","edgeY2","deltaX","inputVertices","inputVerticesLength","outputStart","inputX","inputY","inputX2","inputY2","side2","verticeslength","area","p1x","p2x","lastX","findEvent","eventDataName","event_5","findPathConstraintIndex","pathConstraintName","SkeletonJson","skeletonMap","boneMap","parent_5","parentName","getValue","transformModeFromString","slotMap","setFromString","blendModeFromString","ik","constraintMap","targetName","positionModeFromString","spacingModeFromString","rotateModeFromString","skinArr","skinMap","entryName","parent_6","eventMap","animationMap","parent_7","scaledVertices","timelineName","timelineMap","valueMap","mapPath","deformName","deformMap","verticesValue","drawOrderNode","draworder","drawOrderMap","offsetMap","event_6","toSinglePrecision","SkinEntry","addSkin","contained","getAttachments","copySkin","newLinkedMesh","dictionary","removeAttachment","slotAttachments","name_4","getAttachmentsForSlot","name_5","oldSkin","skinAttachment","getSkeleton","attachmentTime","setAttachmentTime","getAttachmentTime","getImage","filterFromString","TextureFilter","Nearest","MipMap","MipMapNearestNearest","MipMapLinearNearest","MipMapNearestLinear","MipMapLinearLinear","wrapFromString","TextureWrap","MirroredRepeat","ClampToEdge","TextureRegion","setWraps","uWrap","vWrap","atlasText","pages","regions","reader","TextureAtlasReader","tuple","page","readLine","TextureAtlasRegion","rotateValue","readValue","readTuple","TextureAtlasPage","colon","lastMatch","Vector2","applyRelativeLocal","applyAbsoluteLocal","applyRelativeWorld","applyAbsoluteWorld","tc","degRadReflect","modified","convexPolygons","convexPolygonsIndices","indicesArray","isConcaveArray","polygonIndicesPool","verticesArray","isConcave","previous","p3x","p3y","vx","vy","positiveArea","previousIndex","nextIndex","polygonIndices","fanBaseIndex","lastWinding","merged","winding1","winding","winding2","firstIndex","prevPrevX","prevPrevY","firstX","firstY","secondX","secondY","otherIndices","otherFirstIndex","otherSecondIndex","otherLastIndex","otherPoly","toInt","cbrt","randomTriangular","randomTriangularWith","Interpolation","applyInternal","Pow","power","PowOut","sourceStart","destStart","numElements","oldSize","SUPPORTS_TYPED_ARRAYS","newShortArray","fround","DebugUtils","logBones","instantiator","TimeKeeper","maxDelta","framesPerSecond","totalTime","WindowedMean","windowSize","addedValues","lastValue","mean","hasEnoughData","addValue","getMean","Attachment","nextID","worldVertices","v_1","skeletonBones","weight","copyTo","tempColor","textureWidth","textureHeight","getParentMesh","parentMesh","computeWorldPosition","computeWorldRotation","regionScaleX","regionScaleY","localX2","localY2","localXCos","localXSin","localYCos","localYSin","localX2Cos","localX2Sin","localY2Cos","localY2Sin","OX1","OY1","OX2","OY2","OX3","OY3","OX4","OY4","rendererObject","X1","Y1","C1R","C1G","C1B","C1A","U1","V1","X2","Y2","C2R","C2G","C2B","C2A","U2","V2","X3","Y3","C3R","C3G","C3B","C3A","U3","V3","X4","Y4","C4R","C4G","C4B","C4A","U4","V4","JitterEffect","jitterX","jitterY","SwirlEffect","radius","interpolation","centerX","centerY","radAngle","dist","277","MaxCacheTime","_indices","_boneInfoOffset","_vertexOffset","_indexOffset","_vfOffset","_preTexUrl","_preBlendMode","_segVCount","_segICount","_segOffset","_colorOffset","_preFinalColor","_preDarkColor","_perVertexSize","_perClipVertexSize","_vfCount","_indexCount","_tempr","_tempg","_tempb","_tempa","_finalColor32","_darkColor32","_finalColor","_darkColor","_quadTriangles","AnimationCache","_privateMode","_invalid","_enableCacheAttachedInfo","_frameIdx","_skeletonInfo","_tempSegments","_tempColors","_tempBoneInfos","invalidAllFrame","completeHandle","unbind","preAnimationCache","curAnimationCache","_needToUpdate","toFrameIdx","_updateFrame","updateAllFrame","uintVert","_traverseSkeleton","vfOffset","preSegOffset","preSegInfo","indexCount","vfCount","fillVertices","skeletonColor","attachmentColor","slotColor","fr","fg","fa","dr","dg","jj","isRegion","isMesh","isClip","boneInfo","slotIdx","_ii","_nn","_animationPool","removeSkeleton","animationsCache","aniKey","animationCache","poolKey","_animationCache","278","_skeletonJson","skeletonJsonStr","skeletonJson","_atlasText","createRegion","origSize","skelTex","SkeletonTexture","setRealTexture","updateRegionUV","createSpriteFrame","_atlasCache","_cloneId","ensureTexturesLoaded","caller","texsLen","loadedCount","loadedItem","quiet","_getAtlas","resData","_getTexture","names","_region","279","getRealTexture","280","VFOneColor","VFOneColorTexId","VFTwoColor","FLAG_BATCH","FLAG_TWO_COLOR","_handleVal","_slotColor","_boneColor","_originColor","_meshColor","_tempPos","_tempUv","_premultipliedAlpha","_multiplier","_slotRangeStart","_slotRangeEnd","_useTint","_useMulti","_debugSlots","_debugBones","_debugMesh","_nodeR","_nodeG","_nodeB","_nodeA","_vertexFloatCount","_vertexCount","_vertexFloatOffset","_inRange","_mustFlush","_m00","_m04","_m12","_m01","_m05","_m13","_g","_fr","_fg","_fb","_fa","_dr","_dg","_db","_da","_renderer","_needColor","_vertexEffect","_getSlotMaterial","useModel","materialCache","materialInfo","_handleColor","_spineColorToInt32","spineColor","SpineAssembler","packDynamicAtlasForSpine","_v2","_n2","_v3","_n3","realTimeTraverse","locSkeleton","graphics","worldMatm","lineTo","_ii2","_nn2","_ii3","_nn3","fillColor","_n4","circle","fill","cacheTraverse","uintbuf","frameVFOffset","frameIndexOffset","segVFCount","needBatch","calcTranslate","nowColor","maxVFOffset","segInfo","_ii4","_il","_ii5","_il2","frameColorOffset","_ii6","_il3","nodeColor","../../cocos2d/core/renderer/assembler","../../cocos2d/core/renderer/webgl/vertex-format","281","282","VertexEffectDelegate","_interpolation","_effectType","initJitter","initSwirlWithPow","initSwirlWithPowOut","getJitterVertexEffect","getSwirlVertexEffect","getVertexEffect","getEffectType","283","./cocos2d","./cocos2d/core/predefine","./extends","./package","./polyfill/array","./polyfill/array-buffer","./polyfill/misc","./polyfill/number","./polyfill/object","./polyfill/string","./polyfill/typescript","./predefine","284","TypedArray","285","286","LOG2E","Timer","_timerTable","287","288","ownKeys","getOwnPropertySymbols","289","searchString","290","__assign","__rest","propertyIsEnumerable","__decorate","decorators","Reflect","__param","paramIndex","decorator","__metadata","metadataKey","metadataValue","metadata","__awaiter","thisArg","_arguments","P","generator","adopt","fulfilled","rejected","__generator","_","sent","trys","ops","verb","throw","return","__exportStar","__createBinding","k2","__values","__read","__spread","__spreadArrays","jl","__await","__asyncGenerator","asyncIterator","settle","fulfill","__asyncDelegator","__asyncValues","__makeTemplateObject","cooked","__setModuleDefault","__importStar","mod","__importDefault","__classPrivateFieldGet","receiver","privateMap","__classPrivateFieldSet","291","defineMacro","defineDeprecatedMacroGetter","recommandedUsage","defined","WECHATGAMESUB","getSharedCanvas","WECHATGAME","getSystemInfoSync","QQPLAY","engineVersion"],"mappings":"CAWA,SAAAA,MAAAC,SAAAC,OAAAC;EACA,SAAAC,WAAAC,MAAAC;IACA,IAAAC,SAAAL,MAAAG;IACA,KAAAE,QAAA;MACA,IAAAC,aAAAP,QAAAI;MACA,KAAAG,YAEA;MAEA,IAAAC,UAAA;MACAF,SAAAL,MAAAG,QAAA;QAAAI,SAAAA;;MACAD,WAAA,GAAA,SAAAE;QACA,OAAAN,WAAAI,WAAA,GAAAE,MAAAA;SACAH,QAAAE;;IAEA,OAAAF,OAAAE;;EAEA,KAAA,IAAAE,IAAA,GAAAA,IAAAR,MAAAS,QAAAD,KAAAP,WAAAD,MAAAQ;EAGA,OAAAP;EApBA,CAsBA;EAAAS,GAAA,EAAA,SAAAC,SAAAP,QAAAE;ICjCAF,OAAAE,UAAA;MACAM,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,KAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,KAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,KAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,KAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,MAAA;MACAC,KAAA;MACAC,MAAA;MACA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","file":"cocos2d-js.c901d.js","sourcesContent":["\n// Based on https://github.com/substack/browser-pack/blob/master/prelude.js\n\n// modules are defined as an array\n// [ module function, map of requireuires ]\n//\n// map of requireuires is short require name -> numeric require\n//\n// anything defined in a previous bundle is accessed via the\n// orig method which is the requireuire for previous bundles\n\n(function outer (modules, cache, entry) {\n function newRequire(name, jumped){\n var module = cache[name];\n if(!module) {\n var moduleData = modules[name];\n if(!moduleData) {\n // this module is excluded from engine\n return undefined;\n }\n var exports = {};\n module = cache[name] = {exports: exports};\n moduleData[0](function(x){\n return newRequire(moduleData[1][x] || x);\n },module,exports);\n }\n return module.exports;\n }\n for(var i=0;i\n step:function (dt) {\n cc.logID(1006);\n },\n\n // Called once per frame. Time is the number of seconds of a frame interval.\n update:function (dt) {\n cc.logID(1007);\n },\n\n /**\n * !#en get the target.\n * !#zh 获取当前目标节点。\n * @method getTarget\n * @return {Node}\n */\n getTarget:function () {\n return this.target;\n },\n\n /**\n * !#en The action will modify the target properties.\n * !#zh 设置目标节点。\n * @method setTarget\n * @param {Node} target\n */\n setTarget:function (target) {\n this.target = target;\n },\n\n /**\n * !#en get the original target.\n * !#zh 获取原始目标节点。\n * @method getOriginalTarget\n * @return {Node}\n */\n getOriginalTarget:function () {\n return this.originalTarget;\n },\n\n // Set the original target, since target can be nil.\n // Is the target that were used to run the action.\n // Unless you are doing something complex, like cc.ActionManager, you should NOT call this method.\n setOriginalTarget:function (originalTarget) {\n this.originalTarget = originalTarget;\n },\n\n /**\n * !#en get tag number.\n * !#zh 获取用于识别动作的标签。\n * @method getTag\n * @return {Number}\n */\n getTag:function () {\n return this.tag;\n },\n\n /**\n * !#en set tag number.\n * !#zh 设置标签,用于识别动作。\n * @method setTag\n * @param {Number} tag\n */\n setTag:function (tag) {\n this.tag = tag;\n },\n\n // Currently JavaScript Bindigns (JSB), in some cases, needs to use retain and release. This is a bug in JSB,\n // and the ugly workaround is to use retain/release. So, these 2 methods were added to be compatible with JSB.\n // This is a hack, and should be removed once JSB fixes the retain/release bug.\n retain:function () {\n },\n\n // Currently JavaScript Bindigns (JSB), in some cases, needs to use retain and release. This is a bug in JSB,\n // and the ugly workaround is to use retain/release. So, these 2 methods were added to be compatible with JSB.\n // This is a hack, and should be removed once JSB fixes the retain/release bug.\n release:function () {\n }\n});\n\n/**\n * !#en Default Action tag.\n * !#zh 默认动作标签。\n * @property TAG_INVALID\n * @constant\n * @static\n * @type {Number}\n * @default -1\n */\ncc.Action.TAG_INVALID = -1;\n\n\n/**\n * !#en\n * Base class actions that do have a finite time duration.
\n * Possible actions:
\n * - An action with a duration of 0 seconds.
\n * - An action with a duration of 35.5 seconds.\n *\n * Infinite time actions are valid\n * !#zh 有限时间动作,这种动作拥有时长 duration 属性。\n * @class FiniteTimeAction\n * @extends Action\n */\ncc.FiniteTimeAction = cc.Class({\n name: 'cc.FiniteTimeAction',\n extends: cc.Action,\n\n ctor:function () {\n //! duration in seconds\n this._duration = 0;\n },\n\n /**\n * !#en get duration of the action. (seconds).\n * !#zh 获取动作以秒为单位的持续时间。\n * @method getDuration\n * @return {Number}\n */\n getDuration:function () {\n return this._duration * (this._timesForRepeat || 1);\n },\n\n /**\n * !#en set duration of the action. (seconds).\n * !#zh 设置动作以秒为单位的持续时间。\n * @method setDuration\n * @param {Number} duration\n */\n setDuration:function (duration) {\n this._duration = duration;\n },\n\n /**\n * !#en\n * Returns a reversed action.
\n * For example:
\n * - The action will be x coordinates of 0 move to 100.
\n * - The reversed action will be x of 100 move to 0.\n * - Will be rewritten\n * !#zh 返回一个新的动作,执行与原动作完全相反的动作。\n * @method reverse\n * @return {Null}\n */\n reverse:function () {\n cc.logID(1008);\n return null;\n },\n\n /**\n * !#en\n * to copy object with deep copy.\n * returns a clone of action.\n * !#zh 返回一个克隆的动作。\n * @method clone\n * @return {FiniteTimeAction}\n */\n clone:function () {\n return new cc.FiniteTimeAction();\n }\n});\n\n/**\n * @module cc\n */\n\n/*\n * Changes the speed of an action, making it take longer (speed > 1)\n * or less (speed < 1) time.
\n * Useful to simulate 'slow motion' or 'fast forward' effect.\n *\n * @warning This action can't be Sequenceable because it is not an cc.IntervalAction\n * @class Speed\n * @extends Action\n *\n * @param {ActionInterval} action\n * @param {Number} speed\n */\ncc.Speed = cc.Class({\n name: 'cc.Speed',\n extends: cc.Action,\n\n ctor:function (action, speed) {\n this._speed = 0;\n this._innerAction = null;\n\n\t\taction && this.initWithAction(action, speed);\n },\n\n /*\n * Gets the current running speed.
\n * Will get a percentage number, compared to the original speed.\n *\n * @method getSpeed\n * @return {Number}\n */\n getSpeed:function () {\n return this._speed;\n },\n\n /*\n * alter the speed of the inner function in runtime.\n * @method setSpeed\n * @param {Number} speed\n */\n setSpeed:function (speed) {\n this._speed = speed;\n },\n\n /*\n * initializes the action.\n * @method initWithAction\n * @param {ActionInterval} action\n * @param {Number} speed\n * @return {Boolean}\n */\n initWithAction:function (action, speed) {\n if (!action) {\n cc.errorID(1021);\n return false;\n }\n\n this._innerAction = action;\n this._speed = speed;\n return true;\n },\n\n clone:function () {\n var action = new cc.Speed();\n action.initWithAction(this._innerAction.clone(), this._speed);\n return action;\n },\n\n startWithTarget:function (target) {\n cc.Action.prototype.startWithTarget.call(this, target);\n this._innerAction.startWithTarget(target);\n },\n\n stop:function () {\n this._innerAction.stop();\n cc.Action.prototype.stop.call(this);\n },\n\n step:function (dt) {\n this._innerAction.step(dt * this._speed);\n },\n\n isDone:function () {\n return this._innerAction.isDone();\n },\n\n reverse:function () {\n return new cc.Speed(this._innerAction.reverse(), this._speed);\n },\n\n /*\n * Set inner Action.\n * @method setInnerAction\n * @param {ActionInterval} action\n */\n setInnerAction:function (action) {\n if (this._innerAction !== action) {\n this._innerAction = action;\n }\n },\n\n /*\n * Get inner Action.\n * @method getInnerAction\n * @return {ActionInterval}\n */\n getInnerAction:function () {\n return this._innerAction;\n }\n});\n\n/**\n * @module cc\n */\n\n/**\n * !#en\n * Creates the speed action which changes the speed of an action, making it take longer (speed > 1)\n * or less (speed < 1) time.
\n * Useful to simulate 'slow motion' or 'fast forward' effect.\n * !#zh 修改目标动作的速率。\n * @warning This action can't be Sequenceable because it is not an cc.IntervalAction\n *\n * @method speed\n * @param {ActionInterval} action\n * @param {Number} speed\n * @return {Action}\n * @example\n * // change the target action speed;\n * var action = cc.scaleTo(0.2, 1, 0.6);\n * var newAction = cc.speed(action, 0.5);\n */\ncc.speed = function (action, speed) {\n return new cc.Speed(action, speed);\n};\n\n/*\n * cc.Follow is a follow action which makes its target follows another node.\n *\n * @example\n * //example\n * //Instead of using cc.Camera as a \"follower\", use this action instead.\n * layer.runAction(cc.follow(hero));\n *\n * @property {Number} leftBoundary - world leftBoundary.\n * @property {Number} rightBoundary - world rightBoundary.\n * @property {Number} topBoundary - world topBoundary.\n * @property {Number} bottomBoundary - world bottomBoundary.\n *\n * @param {cc.Node} followedNode\n * @param {Rect} rect\n * @example\n * // creates the action with a set boundary\n * var followAction = new cc.Follow(node, cc.rect(0, 0, s.width * 2 - 100, s.height));\n * this.runAction(followAction);\n *\n * // creates the action with no boundary set\n * var followAction = new cc.Follow(node);\n * this.runAction(followAction);\n *\n * @class\n * @extends Action\n */\ncc.Follow = cc.Class({\n name: 'cc.Follow',\n extends: cc.Action,\n\n\t/*\n * Constructor function, override it to extend the construction behavior, remember to call \"this._super()\" in the extended \"ctor\" function.
\n\t * creates the action with a set boundary.
\n\t * creates the action with no boundary set.\n * @param {cc.Node} followedNode\n * @param {Rect} rect\n\t */\n ctor:function (followedNode, rect) {\n // node to follow\n this._followedNode = null;\n // whether camera should be limited to certain area\n this._boundarySet = false;\n // if screen size is bigger than the boundary - update not needed\n this._boundaryFullyCovered = false;\n // fast access to the screen dimensions\n this._halfScreenSize = null;\n this._fullScreenSize = null;\n\n this.leftBoundary = 0.0;\n this.rightBoundary = 0.0;\n this.topBoundary = 0.0;\n this.bottomBoundary = 0.0;\n this._worldRect = cc.rect(0, 0, 0, 0);\n\n\t\tif(followedNode)\n\t\t\trect ? this.initWithTarget(followedNode, rect)\n\t\t\t\t : this.initWithTarget(followedNode);\n },\n\n clone:function () {\n var action = new cc.Follow();\n var locRect = this._worldRect;\n var rect = new cc.Rect(locRect.x, locRect.y, locRect.width, locRect.height);\n action.initWithTarget(this._followedNode, rect);\n return action;\n },\n\n /*\n * Get whether camera should be limited to certain area.\n *\n * @return {Boolean}\n */\n isBoundarySet:function () {\n return this._boundarySet;\n },\n\n /*\n * alter behavior - turn on/off boundary.\n *\n * @param {Boolean} value\n */\n setBoudarySet:function (value) {\n this._boundarySet = value;\n },\n\n /*\n * initializes the action with a set boundary.\n *\n * @param {cc.Node} followedNode\n * @param {Rect} [rect=]\n * @return {Boolean}\n */\n initWithTarget:function (followedNode, rect) {\n if (!followedNode) {\n cc.errorID(1022);\n return false;\n }\n\n var _this = this;\n rect = rect || cc.rect(0, 0, 0, 0);\n _this._followedNode = followedNode;\n _this._worldRect = rect;\n\n _this._boundarySet = !(rect.width === 0 && rect.height === 0);\n\n _this._boundaryFullyCovered = false;\n\n var winSize = cc.winSize;\n _this._fullScreenSize = cc.v2(winSize.width, winSize.height);\n _this._halfScreenSize = _this._fullScreenSize.mul(0.5);\n\n if (_this._boundarySet) {\n _this.leftBoundary = -((rect.x + rect.width) - _this._fullScreenSize.x);\n _this.rightBoundary = -rect.x;\n _this.topBoundary = -rect.y;\n _this.bottomBoundary = -((rect.y + rect.height) - _this._fullScreenSize.y);\n\n if (_this.rightBoundary < _this.leftBoundary) {\n // screen width is larger than world's boundary width\n //set both in the middle of the world\n _this.rightBoundary = _this.leftBoundary = (_this.leftBoundary + _this.rightBoundary) / 2;\n }\n if (_this.topBoundary < _this.bottomBoundary) {\n // screen width is larger than world's boundary width\n //set both in the middle of the world\n _this.topBoundary = _this.bottomBoundary = (_this.topBoundary + _this.bottomBoundary) / 2;\n }\n\n if ((_this.topBoundary === _this.bottomBoundary) && (_this.leftBoundary === _this.rightBoundary))\n _this._boundaryFullyCovered = true;\n }\n return true;\n },\n\n step:function (dt) {\n var targetWorldPos = this.target.convertToWorldSpaceAR(cc.Vec2.ZERO);\n var followedWorldPos = this._followedNode.convertToWorldSpaceAR(cc.Vec2.ZERO);\n // compute the offset between followed and target node\n var delta = targetWorldPos.sub(followedWorldPos);\n var tempPos = this.target.parent.convertToNodeSpaceAR(delta.add(this._halfScreenSize));\n\n if (this._boundarySet) {\n // whole map fits inside a single screen, no need to modify the position - unless map boundaries are increased\n if (this._boundaryFullyCovered)\n return;\n\n\t this.target.setPosition(misc.clampf(tempPos.x, this.leftBoundary, this.rightBoundary), misc.clampf(tempPos.y, this.bottomBoundary, this.topBoundary));\n } else {\n this.target.setPosition(tempPos.x, tempPos.y);\n }\n },\n\n isDone:function () {\n return ( !this._followedNode.activeInHierarchy );\n },\n\n stop:function () {\n this.target = null;\n cc.Action.prototype.stop.call(this);\n }\n});\n\n/**\n * !#en Create a follow action which makes its target follows another node.\n * !#zh 追踪目标节点的位置。\n * @method follow\n * @param {Node} followedNode\n * @param {Rect} rect\n * @return {Action|Null} returns the cc.Follow object on success\n * @example\n * // example\n * // creates the action with a set boundary\n * var followAction = cc.follow(targetNode, cc.rect(0, 0, screenWidth * 2 - 100, screenHeight));\n * node.runAction(followAction);\n *\n * // creates the action with no boundary set\n * var followAction = cc.follow(targetNode);\n * node.runAction(followAction);\n */\ncc.follow = function (followedNode, rect) {\n return new cc.Follow(followedNode, rect);\n};\n","/****************************************************************************\n Copyright (c) 2008 Radu Gruian\n Copyright (c) 2008-2010 Ricardo Quesada\n Copyright (c) 2011 Vit Valentin\n Copyright (c) 2011-2012 cocos2d-x.org\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos2d-x.org\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n\n Orignal code by Radu Gruian: http://www.codeproject.com/Articles/30838/Overhauser-Catmull-Rom-Splines-for-Camera-Animatio.So\n\n Adapted to cocos2d-x by Vit Valentin\n\n Adapted from cocos2d-x to cocos2d-iphone by Ricardo Quesada\n ****************************************************************************/\n\n/**\n * @module cc\n */\n\n/*\n * Returns the Cardinal Spline position for a given set of control points, tension and time.
\n * CatmullRom Spline formula.
\n * s(-ttt + 2tt - t)P1 + s(-ttt + tt)P2 + (2ttt - 3tt + 1)P2 + s(ttt - 2tt + t)P3 + (-2ttt + 3tt)P3 + s(ttt - tt)P4\n *\n * @method cardinalSplineAt\n * @param {Vec2} p0\n * @param {Vec2} p1\n * @param {Vec2} p2\n * @param {Vec2} p3\n * @param {Number} tension\n * @param {Number} t\n * @return {Vec2}\n */\nfunction cardinalSplineAt (p0, p1, p2, p3, tension, t) {\n var t2 = t * t;\n var t3 = t2 * t;\n\n /*\n * Formula: s(-ttt + 2tt - t)P1 + s(-ttt + tt)P2 + (2ttt - 3tt + 1)P2 + s(ttt - 2tt + t)P3 + (-2ttt + 3tt)P3 + s(ttt - tt)P4\n */\n var s = (1 - tension) / 2;\n\n var b1 = s * ((-t3 + (2 * t2)) - t); // s(-t3 + 2 t2 - t)P1\n var b2 = s * (-t3 + t2) + (2 * t3 - 3 * t2 + 1); // s(-t3 + t2)P2 + (2 t3 - 3 t2 + 1)P2\n var b3 = s * (t3 - 2 * t2 + t) + (-2 * t3 + 3 * t2); // s(t3 - 2 t2 + t)P3 + (-2 t3 + 3 t2)P3\n var b4 = s * (t3 - t2); // s(t3 - t2)P4\n\n var x = (p0.x * b1 + p1.x * b2 + p2.x * b3 + p3.x * b4);\n var y = (p0.y * b1 + p1.y * b2 + p2.y * b3 + p3.y * b4);\n return cc.v2(x, y);\n};\n\n/*\n * returns a point from the array\n * @method getControlPointAt\n * @param {Array} controlPoints\n * @param {Number} pos\n * @return {Array}\n */\nfunction getControlPointAt (controlPoints, pos) {\n var p = Math.min(controlPoints.length - 1, Math.max(pos, 0));\n return controlPoints[p];\n};\n\nfunction reverseControlPoints (controlPoints) {\n var newArray = [];\n for (var i = controlPoints.length - 1; i >= 0; i--) {\n newArray.push(cc.v2(controlPoints[i].x, controlPoints[i].y));\n }\n return newArray;\n}\n\nfunction cloneControlPoints (controlPoints) {\n var newArray = [];\n for (var i = 0; i < controlPoints.length; i++)\n newArray.push(cc.v2(controlPoints[i].x, controlPoints[i].y));\n return newArray;\n}\n\n\n/*\n * Cardinal Spline path. http://en.wikipedia.org/wiki/Cubic_Hermite_spline#Cardinal_spline\n * Absolute coordinates.\n *\n * @class CardinalSplineTo\n * @extends ActionInterval\n *\n * @param {Number} duration\n * @param {Array} points array of control points\n * @param {Number} tension\n *\n * @example\n * //create a cc.CardinalSplineTo\n * var action1 = cc.cardinalSplineTo(3, array, 0);\n */\ncc.CardinalSplineTo = cc.Class({\n name: 'cc.CardinalSplineTo',\n extends: cc.ActionInterval,\n\n ctor: function (duration, points, tension) {\n /* Array of control points */\n this._points = [];\n this._deltaT = 0;\n this._tension = 0;\n this._previousPosition = null;\n this._accumulatedDiff = null;\n tension !== undefined && cc.CardinalSplineTo.prototype.initWithDuration.call(this, duration, points, tension);\n },\n\n initWithDuration:function (duration, points, tension) {\n if (!points || points.length === 0) {\n cc.errorID(1024);\n return false;\n }\n\n if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) {\n this.setPoints(points);\n this._tension = tension;\n return true;\n }\n return false;\n },\n\n clone:function () {\n var action = new cc.CardinalSplineTo();\n action.initWithDuration(this._duration, cloneControlPoints(this._points), this._tension);\n return action;\n },\n\n startWithTarget:function (target) {\n cc.ActionInterval.prototype.startWithTarget.call(this, target);\n // Issue #1441 from cocos2d-iphone\n this._deltaT = 1 / (this._points.length - 1);\n this._previousPosition = cc.v2(this.target.x, this.target.y);\n this._accumulatedDiff = cc.v2(0, 0);\n },\n\n update:function (dt) {\n dt = this._computeEaseTime(dt);\n var p, lt;\n var ps = this._points;\n // eg.\n // p..p..p..p..p..p..p\n // 1..2..3..4..5..6..7\n // want p to be 1, 2, 3, 4, 5, 6\n if (dt === 1) {\n p = ps.length - 1;\n lt = 1;\n } else {\n var locDT = this._deltaT;\n p = 0 | (dt / locDT);\n lt = (dt - locDT * p) / locDT;\n }\n\n var newPos = cardinalSplineAt(\n getControlPointAt(ps, p - 1),\n getControlPointAt(ps, p - 0),\n getControlPointAt(ps, p + 1),\n getControlPointAt(ps, p + 2),\n this._tension, lt);\n\n if (cc.macro.ENABLE_STACKABLE_ACTIONS) {\n var tempX, tempY;\n tempX = this.target.x - this._previousPosition.x;\n tempY = this.target.y - this._previousPosition.y;\n if (tempX !== 0 || tempY !== 0) {\n var locAccDiff = this._accumulatedDiff;\n tempX = locAccDiff.x + tempX;\n tempY = locAccDiff.y + tempY;\n locAccDiff.x = tempX;\n locAccDiff.y = tempY;\n newPos.x += tempX;\n newPos.y += tempY;\n }\n }\n this.updatePosition(newPos);\n },\n\n reverse:function () {\n var reversePoints = reverseControlPoints(this._points);\n return cc.cardinalSplineTo(this._duration, reversePoints, this._tension);\n },\n\n /*\n * update position of target\n * @method updatePosition\n * @param {Vec2} newPos\n */\n updatePosition:function (newPos) {\n this.target.setPosition(newPos);\n this._previousPosition = newPos;\n },\n\n /*\n * Points getter\n * @method getPoints\n * @return {Array}\n */\n getPoints:function () {\n return this._points;\n },\n\n /**\n * Points setter\n * @method setPoints\n * @param {Array} points\n */\n setPoints:function (points) {\n this._points = points;\n }\n});\n\n/**\n * !#en Creates an action with a Cardinal Spline array of points and tension.\n * !#zh 按基数样条曲线轨迹移动到目标位置。\n * @method cardinalSplineTo\n * @param {Number} duration\n * @param {Array} points array of control points\n * @param {Number} tension\n * @return {ActionInterval}\n *\n * @example\n * //create a cc.CardinalSplineTo\n * var action1 = cc.cardinalSplineTo(3, array, 0);\n */\ncc.cardinalSplineTo = function (duration, points, tension) {\n return new cc.CardinalSplineTo(duration, points, tension);\n};\n\n/*\n * Cardinal Spline path. http://en.wikipedia.org/wiki/Cubic_Hermite_spline#Cardinal_spline\n * Relative coordinates.\n *\n * @class CardinalSplineBy\n * @extends CardinalSplineTo\n *\n * @param {Number} duration\n * @param {Array} points\n * @param {Number} tension\n *\n * @example\n * //create a cc.CardinalSplineBy\n * var action1 = cc.cardinalSplineBy(3, array, 0);\n */\ncc.CardinalSplineBy = cc.Class({\n name: 'cc.CardinalSplineBy',\n extends: cc.CardinalSplineTo,\n\n ctor:function (duration, points, tension) {\n this._startPosition = cc.v2(0, 0);\n tension !== undefined && this.initWithDuration(duration, points, tension);\n },\n\n startWithTarget:function (target) {\n cc.CardinalSplineTo.prototype.startWithTarget.call(this, target);\n this._startPosition.x = target.x;\n this._startPosition.y = target.y;\n },\n\n reverse:function () {\n var copyConfig = this._points.slice();\n var current;\n //\n // convert \"absolutes\" to \"diffs\"\n //\n var p = copyConfig[0];\n for (var i = 1; i < copyConfig.length; ++i) {\n current = copyConfig[i];\n copyConfig[i] = current.sub(p);\n p = current;\n }\n\n // convert to \"diffs\" to \"reverse absolute\"\n var reverseArray = reverseControlPoints(copyConfig);\n\n // 1st element (which should be 0,0) should be here too\n p = reverseArray[ reverseArray.length - 1 ];\n reverseArray.pop();\n\n p.x = -p.x;\n p.y = -p.y;\n\n reverseArray.unshift(p);\n for (var i = 1; i < reverseArray.length; ++i) {\n current = reverseArray[i];\n current.x = -current.x;\n current.y = -current.y;\n current.x += p.x;\n current.y += p.y;\n reverseArray[i] = current;\n p = current;\n }\n return cc.cardinalSplineBy(this._duration, reverseArray, this._tension);\n },\n\n /**\n * update position of target\n * @method updatePosition\n * @param {Vec2} newPos\n */\n updatePosition:function (newPos) {\n var pos = this._startPosition;\n var posX = newPos.x + pos.x;\n var posY = newPos.y + pos.y;\n this._previousPosition.x = posX;\n this._previousPosition.y = posY;\n this.target.setPosition(posX, posY);\n },\n\n clone:function () {\n var a = new cc.CardinalSplineBy();\n a.initWithDuration(this._duration, cloneControlPoints(this._points), this._tension);\n return a;\n }\n});\n\n/**\n * !#en Creates an action with a Cardinal Spline array of points and tension.\n * !#zh 按基数样条曲线轨迹移动指定的距离。\n * @method cardinalSplineBy\n * @param {Number} duration\n * @param {Array} points\n * @param {Number} tension\n *\n * @return {ActionInterval}\n */\ncc.cardinalSplineBy = function (duration, points, tension) {\n return new cc.CardinalSplineBy(duration, points, tension);\n};\n\n/*\n * An action that moves the target with a CatmullRom curve to a destination point.
\n * A Catmull Rom is a Cardinal Spline with a tension of 0.5.
\n * http://en.wikipedia.org/wiki/Cubic_Hermite_spline#Catmull.E2.80.93Rom_spline\n * Absolute coordinates.\n *\n * @class CatmullRomTo\n * @extends CardinalSplineTo\n *\n * @param {Number} dt\n * @param {Array} points\n *\n * @example\n * var action1 = cc.catmullRomTo(3, array);\n */\ncc.CatmullRomTo = cc.Class({\n name: 'cc.CatmullRomTo',\n extends: cc.CardinalSplineTo,\n\n ctor: function(dt, points) {\n points && this.initWithDuration(dt, points);\n },\n\n initWithDuration:function (dt, points) {\n return cc.CardinalSplineTo.prototype.initWithDuration.call(this, dt, points, 0.5);\n },\n\n clone:function () {\n var action = new cc.CatmullRomTo();\n action.initWithDuration(this._duration, cloneControlPoints(this._points));\n return action;\n }\n});\n\n/**\n * !#en Creates an action with a Cardinal Spline array of points and tension.\n * !#zh 按 Catmull Rom 样条曲线轨迹移动到目标位置。\n * @method catmullRomTo\n * @param {Number} dt\n * @param {Array} points\n * @return {ActionInterval}\n *\n * @example\n * var action1 = cc.catmullRomTo(3, array);\n */\ncc.catmullRomTo = function (dt, points) {\n return new cc.CatmullRomTo(dt, points);\n};\n\n/*\n * An action that moves the target with a CatmullRom curve by a certain distance.
\n * A Catmull Rom is a Cardinal Spline with a tension of 0.5.
\n * http://en.wikipedia.org/wiki/Cubic_Hermite_spline#Catmull.E2.80.93Rom_spline\n * Relative coordinates.\n *\n * @class CatmullRomBy\n * @extends CardinalSplineBy\n *\n * @param {Number} dt\n * @param {Array} points\n *\n * @example\n * var action1 = cc.catmullRomBy(3, array);\n */\ncc.CatmullRomBy = cc.Class({\n name: 'cc.CatmullRomBy',\n extends: cc.CardinalSplineBy,\n\n ctor: function(dt, points) {\n points && this.initWithDuration(dt, points);\n },\n\n initWithDuration:function (dt, points) {\n return cc.CardinalSplineTo.prototype.initWithDuration.call(this, dt, points, 0.5);\n },\n\n clone:function () {\n var action = new cc.CatmullRomBy();\n action.initWithDuration(this._duration, cloneControlPoints(this._points));\n return action;\n }\n});\n\n/**\n * !#en Creates an action with a Cardinal Spline array of points and tension.\n * !#zh 按 Catmull Rom 样条曲线轨迹移动指定的距离。\n * @method catmullRomBy\n * @param {Number} dt\n * @param {Array} points\n * @return {ActionInterval}\n * @example\n * var action1 = cc.catmullRomBy(3, array);\n */\ncc.catmullRomBy = function (dt, points) {\n return new cc.CatmullRomBy(dt, points);\n};\n","/****************************************************************************\n Copyright (c) 2008-2010 Ricardo Quesada\n Copyright (c) 2011-2012 cocos2d-x.org\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos2d-x.org\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * @module cc\n */\n\n/**\n * !#en\n * Creates the action easing object with the rate parameter.
\n * From slow to fast.\n * !#zh 创建 easeIn 缓动对象,由慢到快。\n * @method easeIn\n * @param {Number} rate\n * @return {Object}\n * @example\n * action.easing(cc.easeIn(3.0));\n */\ncc.easeIn = function (rate) {\n return {\n _rate: rate,\n easing: function (dt) {\n return Math.pow(dt, this._rate);\n },\n reverse: function(){\n return cc.easeIn(1 / this._rate);\n }\n };\n};\n\n/**\n * !#en\n * Creates the action easing object with the rate parameter.
\n * From fast to slow.\n * !#zh 创建 easeOut 缓动对象,由快到慢。\n * @method easeOut\n * @param {Number} rate\n * @return {Object}\n * @example\n * action.easing(cc.easeOut(3.0));\n */\ncc.easeOut = function (rate) {\n return {\n _rate: rate,\n easing: function (dt) {\n return Math.pow(dt, 1 / this._rate);\n },\n reverse: function(){\n return cc.easeOut(1 / this._rate);\n }\n };\n};\n\n/**\n * !#en\n * Creates the action easing object with the rate parameter.
\n * Slow to fast then to slow.\n * !#zh 创建 easeInOut 缓动对象,慢到快,然后慢。\n * @method easeInOut\n * @param {Number} rate\n * @return {Object}\n *\n * @example\n * action.easing(cc.easeInOut(3.0));\n */\ncc.easeInOut = function (rate) {\n return {\n _rate: rate,\n easing: function (dt) {\n dt *= 2;\n if (dt < 1)\n return 0.5 * Math.pow(dt, this._rate);\n else\n return 1.0 - 0.5 * Math.pow(2 - dt, this._rate);\n },\n reverse: function(){\n return cc.easeInOut(this._rate);\n }\n };\n};\n\n/**\n * !#en\n * Creates the action easing object with the rate parameter.
\n * Reference easeInExpo:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeExponentialIn 缓动对象。
\n * EaseExponentialIn 是按指数函数缓动进入的动作。
\n * 参考 easeInExpo:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeExponentialIn\n * @return {Object}\n * @example\n * action.easing(cc.easeExponentialIn());\n */\nvar _easeExponentialInObj = {\n easing: function(dt){\n return dt === 0 ? 0 : Math.pow(2, 10 * (dt - 1));\n },\n reverse: function(){\n return _easeExponentialOutObj;\n }\n};\ncc.easeExponentialIn = function(){\n return _easeExponentialInObj;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Reference easeOutExpo:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeExponentialOut 缓动对象。
\n * EaseExponentialOut 是按指数函数缓动退出的动作。
\n * 参考 easeOutExpo:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeExponentialOut\n * @return {Object}\n * @example\n * action.easing(cc.easeExponentialOut());\n */\nvar _easeExponentialOutObj = {\n easing: function(dt){\n return dt === 1 ? 1 : (-(Math.pow(2, -10 * dt)) + 1);\n },\n reverse: function(){\n return _easeExponentialInObj;\n }\n};\ncc.easeExponentialOut = function(){\n return _easeExponentialOutObj;\n};\n\n/**\n * !#en\n * Creates an EaseExponentialInOut action easing object.
\n * Reference easeInOutExpo:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeExponentialInOut 缓动对象。
\n * EaseExponentialInOut 是按指数函数缓动进入并退出的动作。
\n * 参考 easeInOutExpo:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeExponentialInOut\n * @return {Object}\n * @example\n * action.easing(cc.easeExponentialInOut());\n */\nvar _easeExponentialInOutObj = {\n easing: function(dt){\n if( dt !== 1 && dt !== 0) {\n dt *= 2;\n if (dt < 1)\n return 0.5 * Math.pow(2, 10 * (dt - 1));\n else\n return 0.5 * (-Math.pow(2, -10 * (dt - 1)) + 2);\n }\n return dt;\n },\n reverse: function(){\n return _easeExponentialInOutObj;\n }\n};\ncc.easeExponentialInOut = function(){\n return _easeExponentialInOutObj;\n};\n\n/**\n * !#en\n * Creates an EaseSineIn action.
\n * Reference easeInSine:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 EaseSineIn 缓动对象。
\n * EaseSineIn 是按正弦函数缓动进入的动作。
\n * 参考 easeInSine:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeSineIn\n * @return {Object}\n * @example\n * action.easing(cc.easeSineIn());\n */\nvar _easeSineInObj = {\n easing: function(dt){\n return (dt===0 || dt===1) ? dt : -1 * Math.cos(dt * Math.PI / 2) + 1;\n },\n reverse: function(){\n return _easeSineOutObj;\n }\n};\ncc.easeSineIn = function(){\n return _easeSineInObj;\n};\n\n/**\n * !#en\n * Creates an EaseSineOut action easing object.
\n * Reference easeOutSine:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 EaseSineOut 缓动对象。
\n * EaseSineIn 是按正弦函数缓动退出的动作。
\n * 参考 easeOutSine:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeSineOut\n * @return {Object}\n * @example\n * action.easing(cc.easeSineOut());\n */\nvar _easeSineOutObj = {\n easing: function(dt){\n return (dt===0 || dt===1) ? dt : Math.sin(dt * Math.PI / 2);\n },\n reverse: function(){\n return _easeSineInObj;\n }\n};\ncc.easeSineOut = function(){\n return _easeSineOutObj;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Reference easeInOutSine:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeSineInOut 缓动对象。
\n * EaseSineIn 是按正弦函数缓动进入并退出的动作。
\n * 参考 easeInOutSine:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeSineInOut\n * @return {Object}\n * @example\n * action.easing(cc.easeSineInOut());\n */\nvar _easeSineInOutObj = {\n easing: function(dt){\n return (dt === 0 || dt === 1) ? dt : -0.5 * (Math.cos(Math.PI * dt) - 1);\n },\n reverse: function(){\n return _easeSineInOutObj;\n }\n};\ncc.easeSineInOut = function(){\n return _easeSineInOutObj;\n};\n\n/**\n * @module cc\n */\n\n/**\n * !#en\n * Creates the action easing object with the period in radians (default is 0.3).
\n * Reference easeInElastic:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeElasticIn 缓动对象。
\n * EaseElasticIn 是按弹性曲线缓动进入的动作。
\n * 参数 easeInElastic:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeElasticIn\n * @param {Number} period\n * @return {Object}\n * @example\n * // example\n * action.easing(cc.easeElasticIn(3.0));\n */\n//default ease elastic in object (period = 0.3)\nvar _easeElasticInObj = {\n easing:function(dt){\n if (dt === 0 || dt === 1)\n return dt;\n dt = dt - 1;\n return -Math.pow(2, 10 * dt) * Math.sin((dt - (0.3 / 4)) * Math.PI * 2 / 0.3);\n },\n reverse:function(){\n return _easeElasticOutObj;\n }\n };\ncc.easeElasticIn = function (period) {\n if(period && period !== 0.3){\n return {\n _period: period,\n easing: function (dt) {\n if (dt === 0 || dt === 1)\n return dt;\n dt = dt - 1;\n return -Math.pow(2, 10 * dt) * Math.sin((dt - (this._period / 4)) * Math.PI * 2 / this._period);\n },\n reverse:function () {\n return cc.easeElasticOut(this._period);\n }\n };\n }\n return _easeElasticInObj;\n};\n\n/**\n * !#en\n * Creates the action easing object with the period in radians (default is 0.3).
\n * Reference easeOutElastic:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeElasticOut 缓动对象。
\n * EaseElasticOut 是按弹性曲线缓动退出的动作。
\n * 参考 easeOutElastic:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeElasticOut\n * @param {Number} period\n * @return {Object}\n * @example\n * // example\n * action.easing(cc.easeElasticOut(3.0));\n */\n//default ease elastic out object (period = 0.3)\nvar _easeElasticOutObj = {\n easing: function (dt) {\n return (dt === 0 || dt === 1) ? dt : Math.pow(2, -10 * dt) * Math.sin((dt - (0.3 / 4)) * Math.PI * 2 / 0.3) + 1;\n },\n reverse:function(){\n return _easeElasticInObj;\n }\n};\ncc.easeElasticOut = function (period) {\n if(period && period !== 0.3){\n return {\n _period: period,\n easing: function (dt) {\n return (dt === 0 || dt === 1) ? dt : Math.pow(2, -10 * dt) * Math.sin((dt - (this._period / 4)) * Math.PI * 2 / this._period) + 1;\n },\n reverse:function(){\n return cc.easeElasticIn(this._period);\n }\n };\n }\n return _easeElasticOutObj;\n};\n\n/**\n * !#en\n * Creates the action easing object with the period in radians (default is 0.3).
\n * Reference easeInOutElastic:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeElasticInOut 缓动对象。
\n * EaseElasticInOut 是按弹性曲线缓动进入并退出的动作。
\n * 参考 easeInOutElastic:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeElasticInOut\n * @param {Number} period\n * @return {Object}\n * @example\n * // example\n * action.easing(cc.easeElasticInOut(3.0));\n */\ncc.easeElasticInOut = function (period) {\n period = period || 0.3;\n return {\n _period: period,\n easing: function (dt) {\n var newT = 0;\n var locPeriod = this._period;\n if (dt === 0 || dt === 1) {\n newT = dt;\n } else {\n dt = dt * 2;\n if (!locPeriod)\n locPeriod = this._period = 0.3 * 1.5;\n var s = locPeriod / 4;\n dt = dt - 1;\n if (dt < 0)\n newT = -0.5 * Math.pow(2, 10 * dt) * Math.sin((dt - s) * Math.PI * 2 / locPeriod);\n else\n newT = Math.pow(2, -10 * dt) * Math.sin((dt - s) * Math.PI * 2 / locPeriod) * 0.5 + 1;\n }\n return newT;\n },\n reverse: function(){\n return cc.easeElasticInOut(this._period);\n }\n };\n};\n\n/**\n * @module cc\n */\n\nfunction _bounceTime (time1) {\n if (time1 < 1 / 2.75) {\n return 7.5625 * time1 * time1;\n } else if (time1 < 2 / 2.75) {\n time1 -= 1.5 / 2.75;\n return 7.5625 * time1 * time1 + 0.75;\n } else if (time1 < 2.5 / 2.75) {\n time1 -= 2.25 / 2.75;\n return 7.5625 * time1 * time1 + 0.9375;\n }\n\n time1 -= 2.625 / 2.75;\n return 7.5625 * time1 * time1 + 0.984375;\n};\n\nvar _easeBounceInObj = {\n easing: function(dt){\n return 1 - _bounceTime(1 - dt);\n },\n reverse: function(){\n return _easeBounceOutObj;\n }\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Eased bounce effect at the beginning.\n * !#zh\n * 创建 easeBounceIn 缓动对象。
\n * EaseBounceIn 是按弹跳动作缓动进入的动作。\n * @method easeBounceIn\n * @return {Object}\n * @example\n * // example\n * action.easing(cc.easeBounceIn());\n */\ncc.easeBounceIn = function(){\n return _easeBounceInObj;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Eased bounce effect at the ending.\n * !#zh\n * 创建 easeBounceOut 缓动对象。
\n * EaseBounceOut 是按弹跳动作缓动退出的动作。\n * @method easeBounceOut\n * @return {Object}\n * @example\n * // example\n * action.easing(cc.easeBounceOut());\n */\nvar _easeBounceOutObj = {\n easing: function(dt){\n return _bounceTime(dt);\n },\n reverse:function () {\n return _easeBounceInObj;\n }\n};\ncc.easeBounceOut = function(){\n return _easeBounceOutObj;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Eased bounce effect at the begining and ending.\n * !#zh\n * 创建 easeBounceInOut 缓动对象。
\n * EaseBounceInOut 是按弹跳动作缓动进入并退出的动作。\n * @method easeBounceInOut\n * @return {Object}\n * @example\n * // example\n * action.easing(cc.easeBounceInOut());\n */\nvar _easeBounceInOutObj = {\n easing: function (time1) {\n var newT;\n if (time1 < 0.5) {\n time1 = time1 * 2;\n newT = (1 - _bounceTime(1 - time1)) * 0.5;\n } else {\n newT = _bounceTime(time1 * 2 - 1) * 0.5 + 0.5;\n }\n return newT;\n },\n reverse: function(){\n return _easeBounceInOutObj;\n }\n};\ncc.easeBounceInOut = function(){\n return _easeBounceInOutObj;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * In the opposite direction to move slowly, and then accelerated to the right direction.\n * !#zh\n * 创建 easeBackIn 缓动对象。
\n * easeBackIn 是在相反的方向缓慢移动,然后加速到正确的方向。
\n * @method easeBackIn\n * @return {Object}\n * @example\n * // example\n * action.easing(cc.easeBackIn());\n */\nvar _easeBackInObj = {\n easing: function (time1) {\n var overshoot = 1.70158;\n return (time1===0 || time1===1) ? time1 : time1 * time1 * ((overshoot + 1) * time1 - overshoot);\n },\n reverse: function(){\n return _easeBackOutObj;\n }\n};\ncc.easeBackIn = function(){\n return _easeBackInObj;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Fast moving more than the finish, and then slowly back to the finish.\n * !#zh\n * 创建 easeBackOut 缓动对象。
\n * easeBackOut 快速移动超出目标,然后慢慢回到目标点。\n * @method easeBackOut\n * @return {Object}\n * @example\n * // example\n * action.easing(cc.easeBackOut());\n */\nvar _easeBackOutObj = {\n easing: function (time1) {\n if (time1 === 0) {\n return 0;\n }\n var overshoot = 1.70158;\n time1 = time1 - 1;\n return time1 * time1 * ((overshoot + 1) * time1 + overshoot) + 1;\n },\n reverse: function(){\n return _easeBackInObj;\n }\n};\ncc.easeBackOut = function(){\n return _easeBackOutObj;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Begining of cc.EaseBackIn. Ending of cc.EaseBackOut.\n * !#zh\n * 创建 easeBackInOut 缓动对象。
\n * @method easeBackInOut\n * @return {Object}\n * @example\n * // example\n * action.easing(cc.easeBackInOut());\n */\nvar _easeBackInOutObj = {\n easing: function (time1) {\n var overshoot = 1.70158 * 1.525;\n time1 = time1 * 2;\n if (time1 < 1) {\n return (time1 * time1 * ((overshoot + 1) * time1 - overshoot)) / 2;\n } else {\n time1 = time1 - 2;\n return (time1 * time1 * ((overshoot + 1) * time1 + overshoot)) / 2 + 1;\n }\n },\n reverse: function(){\n return _easeBackInOutObj;\n }\n};\ncc.easeBackInOut = function(){\n return _easeBackInOutObj;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Into the 4 reference point.
\n * To calculate the motion curve.\n * !#zh\n * 创建 easeBezierAction 缓动对象。
\n * EaseBezierAction 是按贝塞尔曲线缓动的动作。\n * @method easeBezierAction\n * @param {Number} p0 The first bezier parameter\n * @param {Number} p1 The second bezier parameter\n * @param {Number} p2 The third bezier parameter\n * @param {Number} p3 The fourth bezier parameter\n * @returns {Object}\n * @example\n * // example\n * action.easing(cc.easeBezierAction(0.5, 0.5, 1.0, 1.0));\n */\ncc.easeBezierAction = function(a, b, c, d){\n return {\n easing: function(t){\n return (Math.pow(1-t,3) * a + 3*t*(Math.pow(1-t,2))*b + 3*Math.pow(t,2)*(1-t)*c + Math.pow(t,3)*d);\n },\n reverse: function(){\n return cc.easeBezierAction(d, c, b, a);\n }\n };\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Reference easeInQuad:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeQuadraticActionIn 缓动对象。
\n * EaseQuadraticIn是按二次函数缓动进入的动作。
\n * 参考 easeInQuad:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeQuadraticActionIn\n * @returns {Object}\n * @example\n * //example\n * action.easing(cc.easeQuadraticActionIn());\n */\nvar _easeQuadraticActionIn = {\n easing: function(time){\n return Math.pow(time, 2);\n },\n reverse: function(){\n return _easeQuadraticActionIn;\n }\n};\ncc.easeQuadraticActionIn = function(){\n return _easeQuadraticActionIn;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Reference easeOutQuad:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeQuadraticActionOut 缓动对象。
\n * EaseQuadraticOut 是按二次函数缓动退出的动作。
\n * 参考 easeOutQuad:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeQuadraticActionOut\n * @returns {Object}\n * @example\n * //example\n * action.easing(cc.easeQuadraticActionOut());\n */\nvar _easeQuadraticActionOut = {\n easing: function(time){\n return -time*(time-2);\n },\n reverse: function(){\n return _easeQuadraticActionOut;\n }\n};\ncc.easeQuadraticActionOut = function(){\n return _easeQuadraticActionOut;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Reference easeInOutQuad:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeQuadraticActionInOut 缓动对象。
\n * EaseQuadraticInOut 是按二次函数缓动进入并退出的动作。
\n * 参考 easeInOutQuad:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeQuadraticActionInOut\n * @returns {Object}\n * @example\n * //example\n * action.easing(cc.easeQuadraticActionInOut());\n */\nvar _easeQuadraticActionInOut = {\n easing: function(time){\n var resultTime = time;\n time *= 2;\n if(time < 1){\n resultTime = time * time * 0.5;\n }else{\n --time;\n resultTime = -0.5 * ( time * ( time - 2 ) - 1)\n }\n return resultTime;\n },\n reverse: function(){\n return _easeQuadraticActionInOut;\n }\n};\ncc.easeQuadraticActionInOut = function(){\n return _easeQuadraticActionInOut;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Reference easeIntQuart:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeQuarticActionIn 缓动对象。
\n * EaseQuarticIn 是按四次函数缓动进入的动作。
\n * 参考 easeIntQuart:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeQuarticActionIn\n * @returns {Object}\n * @example\n * //example\n * action.easing(cc.easeQuarticActionIn());\n */\nvar _easeQuarticActionIn = {\n easing: function(time){\n return time * time * time * time;\n },\n reverse: function(){\n return _easeQuarticActionIn;\n }\n};\ncc.easeQuarticActionIn = function(){\n return _easeQuarticActionIn;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Reference easeOutQuart:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeQuarticActionOut 缓动对象。
\n * EaseQuarticOut 是按四次函数缓动退出的动作。
\n * 参考 easeOutQuart:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeQuarticActionOut\n * @returns {Object}\n * @example\n * //example\n * action.easing(cc.QuarticActionOut());\n */\nvar _easeQuarticActionOut = {\n easing: function(time){\n time -= 1;\n return -(time * time * time * time - 1);\n },\n reverse: function(){\n return _easeQuarticActionOut;\n }\n};\ncc.easeQuarticActionOut = function(){\n return _easeQuarticActionOut;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Reference easeInOutQuart:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeQuarticActionInOut 缓动对象。
\n * EaseQuarticInOut 是按四次函数缓动进入并退出的动作。
\n * 参考 easeInOutQuart:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeQuarticActionInOut\n * @returns {Object}\n */\nvar _easeQuarticActionInOut = {\n easing: function(time){\n time = time*2;\n if (time < 1)\n return 0.5 * time * time * time * time;\n time -= 2;\n return -0.5 * (time * time * time * time - 2);\n },\n reverse: function(){\n return _easeQuarticActionInOut;\n }\n};\ncc.easeQuarticActionInOut = function(){\n return _easeQuarticActionInOut;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Reference easeInQuint:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeQuinticActionIn 缓动对象。
\n * EaseQuinticIn 是按五次函数缓动进的动作。
\n * 参考 easeInQuint:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeQuinticActionIn\n * @returns {Object}\n * @example\n * //example\n * action.easing(cc.easeQuinticActionIn());\n */\nvar _easeQuinticActionIn = {\n easing: function(time){\n return time * time * time * time * time;\n },\n reverse: function(){\n return _easeQuinticActionIn;\n }\n};\ncc.easeQuinticActionIn = function(){\n return _easeQuinticActionIn;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Reference easeOutQuint:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeQuinticActionOut 缓动对象。
\n * EaseQuinticOut 是按五次函数缓动退出的动作\n * 参考 easeOutQuint:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeQuinticActionOut\n * @returns {Object}\n * @example\n * //example\n * action.easing(cc.easeQuadraticActionOut());\n */\nvar _easeQuinticActionOut = {\n easing: function(time){\n time -=1;\n return (time * time * time * time * time + 1);\n },\n reverse: function(){\n return _easeQuinticActionOut;\n }\n};\ncc.easeQuinticActionOut = function(){\n return _easeQuinticActionOut;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Reference easeInOutQuint:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeQuinticActionInOut 缓动对象。
\n * EaseQuinticInOut是按五次函数缓动进入并退出的动作。
\n * 参考 easeInOutQuint:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeQuinticActionInOut\n * @returns {Object}\n * @example\n * //example\n * action.easing(cc.easeQuinticActionInOut());\n */\nvar _easeQuinticActionInOut = {\n easing: function(time){\n time = time*2;\n if (time < 1)\n return 0.5 * time * time * time * time * time;\n time -= 2;\n return 0.5 * (time * time * time * time * time + 2);\n },\n reverse: function(){\n return _easeQuinticActionInOut;\n }\n};\ncc.easeQuinticActionInOut = function(){\n return _easeQuinticActionInOut;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Reference easeInCirc:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeCircleActionIn 缓动对象。
\n * EaseCircleIn是按圆形曲线缓动进入的动作。
\n * 参考 easeInCirc:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeCircleActionIn\n * @returns {Object}\n * @example\n * //example\n * action.easing(cc.easeCircleActionIn());\n */\nvar _easeCircleActionIn = {\n easing: function(time){\n return -1 * (Math.sqrt(1 - time * time) - 1);\n },\n reverse: function(){\n return _easeCircleActionIn;\n }\n};\ncc.easeCircleActionIn = function(){\n return _easeCircleActionIn;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Reference easeOutCirc:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeCircleActionOut 缓动对象。
\n * EaseCircleOut是按圆形曲线缓动退出的动作。
\n * 参考 easeOutCirc:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeCircleActionOut\n * @returns {Object}\n * @example\n * //example\n * actioneasing(cc.easeCircleActionOut());\n */\nvar _easeCircleActionOut = {\n easing: function(time){\n time = time - 1;\n return Math.sqrt(1 - time * time);\n },\n reverse: function(){\n return _easeCircleActionOut;\n }\n};\ncc.easeCircleActionOut = function(){\n return _easeCircleActionOut;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Reference easeInOutCirc:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeCircleActionInOut 缓动对象。
\n * EaseCircleInOut 是按圆形曲线缓动进入并退出的动作。
\n * 参考 easeInOutCirc:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeCircleActionInOut\n * @returns {Object}\n * @example\n * //example\n * action.easing(cc.easeCircleActionInOut());\n */\nvar _easeCircleActionInOut = {\n easing: function(time){\n time = time * 2;\n if (time < 1)\n return -0.5 * (Math.sqrt(1 - time * time) - 1);\n time -= 2;\n return 0.5 * (Math.sqrt(1 - time * time) + 1);\n },\n reverse: function(){\n return _easeCircleActionInOut;\n }\n};\ncc.easeCircleActionInOut = function(){\n return _easeCircleActionInOut;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Reference easeInCubic:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeCubicActionIn 缓动对象。
\n * EaseCubicIn 是按三次函数缓动进入的动作。
\n * 参考 easeInCubic:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeCubicActionIn\n * @returns {Object}\n * @example\n * //example\n * action.easing(cc.easeCubicActionIn());\n */\nvar _easeCubicActionIn = {\n easing: function(time){\n return time * time * time;\n },\n reverse: function(){\n return _easeCubicActionIn;\n }\n};\ncc.easeCubicActionIn = function(){\n return _easeCubicActionIn;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Reference easeOutCubic:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeCubicActionOut 缓动对象。
\n * EaseCubicOut 是按三次函数缓动退出的动作。
\n * 参考 easeOutCubic:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeCubicActionOut\n * @returns {Object}\n * @example\n * //example\n * action.easing(cc.easeCubicActionOut());\n */\nvar _easeCubicActionOut = {\n easing: function(time){\n time -= 1;\n return (time * time * time + 1);\n },\n reverse: function(){\n return _easeCubicActionOut;\n }\n};\ncc.easeCubicActionOut = function(){\n return _easeCubicActionOut;\n};\n\n/**\n * !#en\n * Creates the action easing object.
\n * Reference easeInOutCubic:
\n * http://www.zhihu.com/question/21981571/answer/19925418\n * !#zh\n * 创建 easeCubicActionInOut 缓动对象。
\n * EaseCubicInOut是按三次函数缓动进入并退出的动作。
\n * 参考 easeInOutCubic:http://www.zhihu.com/question/21981571/answer/19925418\n * @method easeCubicActionInOut\n * @returns {Object}\n */\nvar _easeCubicActionInOut = {\n easing: function(time){\n time = time*2;\n if (time < 1)\n return 0.5 * time * time * time;\n time -= 2;\n return 0.5 * (time * time * time + 2);\n },\n reverse: function(){\n return _easeCubicActionInOut;\n }\n};\ncc.easeCubicActionInOut = function(){\n return _easeCubicActionInOut;\n};\n\n","/****************************************************************************\n Copyright (c) 2008-2010 Ricardo Quesada\n Copyright (c) 2011-2012 cocos2d-x.org\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos2d-x.org\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * @module cc\n */\n\n/**\n * !#en Instant actions are immediate actions. They don't have a duration like the ActionInterval actions.\n * !#zh 即时动作,这种动作立即就会执行,继承自 FiniteTimeAction。\n * @class ActionInstant\n * @extends FiniteTimeAction\n */\ncc.ActionInstant = cc.Class({\n name: 'cc.ActionInstant',\n extends: cc.FiniteTimeAction,\n isDone:function () {\n return true;\n },\n\n step:function (dt) {\n this.update(1);\n },\n\n update:function (dt) {\n //nothing\n },\n\n /**\n * returns a reversed action.
\n * For example:
\n * - The action is x coordinates of 0 move to 100.
\n * - The reversed action will be x of 100 move to 0.\n * @returns {Action}\n */\n reverse:function(){\n return this.clone();\n },\n\n clone:function(){\n return new cc.ActionInstant();\n }\n});\n\n/**\n * @module cc\n */\n\n/*\n * Show the node.\n * @class Show\n * @extends ActionInstant\n */\ncc.Show = cc.Class({\n name: 'cc.Show',\n extends: cc.ActionInstant,\n\n update:function (dt) {\n var _renderComps = this.target.getComponentsInChildren(cc.RenderComponent);\n for (var i = 0; i < _renderComps.length; ++i) {\n var render = _renderComps[i];\n render.enabled = true;\n }\n },\n\n reverse:function () {\n return new cc.Hide();\n },\n\n clone:function(){\n return new cc.Show();\n }\n});\n\n/**\n * !#en Show the Node.\n * !#zh 立即显示。\n * @method show\n * @return {ActionInstant}\n * @example\n * // example\n * var showAction = cc.show();\n */\ncc.show = function () {\n return new cc.Show();\n};\n\n/*\n * Hide the node.\n * @class Hide\n * @extends ActionInstant\n */\ncc.Hide = cc.Class({\n name: 'cc.Hide',\n extends: cc.ActionInstant,\n\n update:function (dt) {\n var _renderComps = this.target.getComponentsInChildren(cc.RenderComponent);\n for (var i = 0; i < _renderComps.length; ++i) {\n var render = _renderComps[i];\n render.enabled = false;\n }\n },\n\n reverse:function () {\n return new cc.Show();\n },\n\n clone:function(){\n return new cc.Hide();\n }\n});\n\n/**\n * !#en Hide the node.\n * !#zh 立即隐藏。\n * @method hide\n * @return {ActionInstant}\n * @example\n * // example\n * var hideAction = cc.hide();\n */\ncc.hide = function () {\n return new cc.Hide();\n};\n\n/*\n * Toggles the visibility of a node.\n * @class ToggleVisibility\n * @extends ActionInstant\n */\ncc.ToggleVisibility = cc.Class({\n name: 'cc.ToggleVisibility',\n extends: cc.ActionInstant,\n\n update:function (dt) {\n var _renderComps = this.target.getComponentsInChildren(cc.RenderComponent);\n for (var i = 0; i < _renderComps.length; ++i) {\n var render = _renderComps[i];\n render.enabled = !render.enabled;\n }\n },\n\n reverse:function () {\n return new cc.ToggleVisibility();\n },\n\n clone:function(){\n return new cc.ToggleVisibility();\n }\n});\n\n/**\n * !#en Toggles the visibility of a node.\n * !#zh 显隐状态切换。\n * @method toggleVisibility\n * @return {ActionInstant}\n * @example\n * // example\n * var toggleVisibilityAction = cc.toggleVisibility();\n */\ncc.toggleVisibility = function () {\n return new cc.ToggleVisibility();\n};\n\n/*\n * Delete self in the next frame.\n * @class RemoveSelf\n * @extends ActionInstant\n * @param {Boolean} [isNeedCleanUp=true]\n *\n * @example\n * // example\n * var removeSelfAction = new cc.RemoveSelf(false);\n */\ncc.RemoveSelf = cc.Class({\n name: 'cc.RemoveSelf',\n extends: cc.ActionInstant,\n\n ctor:function(isNeedCleanUp){\n this._isNeedCleanUp = true;\n\t isNeedCleanUp !== undefined && this.init(isNeedCleanUp);\n },\n\n update:function(dt){\n this.target.removeFromParent(this._isNeedCleanUp);\n },\n\n init:function(isNeedCleanUp){\n this._isNeedCleanUp = isNeedCleanUp;\n return true;\n },\n\n reverse:function(){\n return new cc.RemoveSelf(this._isNeedCleanUp);\n },\n\n clone:function(){\n return new cc.RemoveSelf(this._isNeedCleanUp);\n }\n});\n\n/**\n * !#en Create a RemoveSelf object with a flag indicate whether the target should be cleaned up while removing.\n * !#zh 从父节点移除自身。\n * @method removeSelf\n * @param {Boolean} [isNeedCleanUp = true]\n * @return {ActionInstant}\n *\n * @example\n * // example\n * var removeSelfAction = cc.removeSelf();\n */\ncc.removeSelf = function(isNeedCleanUp){\n return new cc.RemoveSelf(isNeedCleanUp);\n};\n\n/*\n * Create an action to destroy self.\n * @class DestroySelf\n * @extends ActionInstant\n *\n * @example\n * var destroySelfAction = new cc.DestroySelf();\n */\ncc.DestroySelf = cc.Class({\n name: 'cc.DestroySelf',\n extends: cc.ActionInstant,\n\n update () {\n this.target.destroy();\n },\n\n reverse () {\n return new cc.DestroySelf();\n },\n\n clone () {\n return new cc.DestroySelf();\n }\n});\n\n/**\n * !#en Destroy self\n * !#zh 创建一个销毁自身的动作。\n * @method destroySelf\n * @return {ActionInstant}\n *\n * @example\n * var destroySelfAction = cc.destroySelf();\n */\ncc.destroySelf = function () {\n return new cc.DestroySelf();\n};\n\n/*\n * Flips the sprite horizontally.\n * @class FlipX\n * @extends ActionInstant\n * @param {Boolean} flip Indicate whether the target should be flipped or not\n *\n * @example\n * var flipXAction = new cc.FlipX(true);\n */\ncc.FlipX = cc.Class({\n name: 'cc.FlipX',\n extends: cc.ActionInstant,\n\n ctor:function(flip){\n this._flippedX = false;\n\t\tflip !== undefined && this.initWithFlipX(flip);\n },\n\n /*\n * initializes the action with a set flipX.\n * @param {Boolean} flip\n * @return {Boolean}\n */\n initWithFlipX:function (flip) {\n this._flippedX = flip;\n return true;\n },\n\n update:function (dt) {\n this.target.scaleX = Math.abs(this.target.scaleX) * (this._flippedX ? -1 : 1);\n },\n\n reverse:function () {\n return new cc.FlipX(!this._flippedX);\n },\n\n clone:function(){\n var action = new cc.FlipX();\n action.initWithFlipX(this._flippedX);\n return action;\n }\n});\n\n/**\n * !#en Create a FlipX action to flip or unflip the target.\n * !#zh X轴翻转。\n * @method flipX\n * @param {Boolean} flip Indicate whether the target should be flipped or not\n * @return {ActionInstant}\n * @example\n * var flipXAction = cc.flipX(true);\n */\ncc.flipX = function (flip) {\n return new cc.FlipX(flip);\n};\n\n/*\n * Flips the sprite vertically\n * @class FlipY\n * @extends ActionInstant\n * @param {Boolean} flip\n * @example\n * var flipYAction = new cc.FlipY(true);\n */\ncc.FlipY = cc.Class({\n name: 'cc.FlipY',\n extends: cc.ActionInstant,\n\n ctor: function(flip){\n this._flippedY = false;\n\t\tflip !== undefined && this.initWithFlipY(flip);\n },\n\n /*\n * initializes the action with a set flipY.\n * @param {Boolean} flip\n * @return {Boolean}\n */\n initWithFlipY:function (flip) {\n this._flippedY = flip;\n return true;\n },\n\n update:function (dt) {\n this.target.scaleY = Math.abs(this.target.scaleY) * (this._flippedY ? -1 : 1);\n },\n\n reverse:function () {\n return new cc.FlipY(!this._flippedY);\n },\n\n clone:function(){\n var action = new cc.FlipY();\n action.initWithFlipY(this._flippedY);\n return action;\n }\n});\n\n/**\n * !#en Create a FlipY action to flip or unflip the target.\n * !#zh Y轴翻转。\n * @method flipY\n * @param {Boolean} flip\n * @return {ActionInstant}\n * @example\n * var flipYAction = cc.flipY(true);\n */\ncc.flipY = function (flip) {\n return new cc.FlipY(flip);\n};\n\n/*\n * Places the node in a certain position\n * @class Place\n * @extends ActionInstant\n * @param {Vec2|Number} pos\n * @param {Number} [y]\n * @example\n * var placeAction = new cc.Place(cc.v2(200, 200));\n * var placeAction = new cc.Place(200, 200);\n */\ncc.Place = cc.Class({\n name: 'cc.Place',\n extends: cc.ActionInstant,\n\n ctor:function(pos, y){\n this._x = 0;\n\t this._y = 0;\n\n\t\tif (pos !== undefined) {\n\t\t\tif (pos.x !== undefined) {\n\t\t\t\ty = pos.y;\n\t\t\t\tpos = pos.x;\n\t\t\t}\n\t\t\tthis.initWithPosition(pos, y);\n\t\t}\n },\n\n /*\n * Initializes a Place action with a position\n * @param {number} x\n * @param {number} y\n * @return {Boolean}\n */\n initWithPosition: function (x, y) {\n this._x = x;\n this._y = y;\n return true;\n },\n\n update:function (dt) {\n this.target.setPosition(this._x, this._y);\n },\n\n clone:function(){\n var action = new cc.Place();\n action.initWithPosition(this._x, this._y);\n return action;\n }\n});\n\n/**\n * !#en Creates a Place action with a position.\n * !#zh 放置在目标位置。\n * @method place\n * @param {Vec2|Number} pos\n * @param {Number} [y]\n * @return {ActionInstant}\n * @example\n * // example\n * var placeAction = cc.place(cc.v2(200, 200));\n * var placeAction = cc.place(200, 200);\n */\ncc.place = function (pos, y) {\n return new cc.Place(pos, y);\n};\n\n\n/*\n * Calls a 'callback'.\n * @class CallFunc\n * @extends ActionInstant\n * @param {function} selector\n * @param {object} [selectorTarget=null]\n * @param {*} [data=null] data for function, it accepts all data types.\n * @example\n * // example\n * // CallFunc without data\n * var finish = new cc.CallFunc(this.removeSprite, this);\n *\n * // CallFunc with data\n * var finish = new cc.CallFunc(this.removeFromParentAndCleanup, this, true);\n */\ncc.CallFunc = cc.Class({\n name: 'cc.CallFunc',\n extends: cc.ActionInstant,\n\n /*\n * Constructor function, override it to extend the construction behavior, remember to call \"this._super()\" in the extended \"ctor\" function.
\n\t * Creates a CallFunc action with the callback.\n\t * @param {function} selector\n\t * @param {object} [selectorTarget=null]\n\t * @param {*} [data=null] data for function, it accepts all data types.\n\t */\n ctor:function(selector, selectorTarget, data){\n this._selectorTarget = null;\n this._function = null;\n this._data = null;\n this.initWithFunction(selector, selectorTarget, data);\n },\n\n /*\n * Initializes the action with a function or function and its target\n * @param {function} selector\n * @param {object|Null} selectorTarget\n * @param {*|Null} [data] data for function, it accepts all data types.\n * @return {Boolean}\n */\n initWithFunction:function (selector, selectorTarget, data) {\n if (selector) {\n this._function = selector;\n }\n if (selectorTarget) {\n this._selectorTarget = selectorTarget;\n }\n if (data !== undefined) {\n this._data = data;\n }\n return true;\n },\n\n /*\n * execute the function.\n */\n execute:function () {\n if (this._function) {\n this._function.call(this._selectorTarget, this.target, this._data);\n }\n },\n\n update:function (dt) {\n this.execute();\n },\n\n /*\n * Get selectorTarget.\n * @return {object}\n */\n getTargetCallback:function () {\n return this._selectorTarget;\n },\n\n /*\n * Set selectorTarget.\n * @param {object} sel\n */\n setTargetCallback:function (sel) {\n if (sel !== this._selectorTarget) {\n if (this._selectorTarget)\n this._selectorTarget = null;\n this._selectorTarget = sel;\n }\n },\n\n clone:function(){\n var action = new cc.CallFunc();\n action.initWithFunction(this._function, this._selectorTarget, this._data);\n return action;\n }\n});\n\n/**\n * !#en Creates the action with the callback.\n * !#zh 执行回调函数。\n * @method callFunc\n * @param {function} selector\n * @param {object} [selectorTarget=null]\n * @param {*} [data=null] - data for function, it accepts all data types.\n * @return {ActionInstant}\n * @example\n * // example\n * // CallFunc without data\n * var finish = cc.callFunc(this.removeSprite, this);\n *\n * // CallFunc with data\n * var finish = cc.callFunc(this.removeFromParentAndCleanup, this._grossini, true);\n */\ncc.callFunc = function (selector, selectorTarget, data) {\n return new cc.CallFunc(selector, selectorTarget, data);\n};\n","/****************************************************************************\n Copyright (c) 2008-2010 Ricardo Quesada\n Copyright (c) 2011-2012 cocos2d-x.org\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos2d-x.org\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n\n/**\n * @module cc\n */\n\n/**\n * !#en\n *

An interval action is an action that takes place within a certain period of time.
\n * It has an start time, and a finish time. The finish time is the parameter
\n * duration plus the start time.

\n *\n *

These CCActionInterval actions have some interesting properties, like:
\n * - They can run normally (default)
\n * - They can run reversed with the reverse method
\n * - They can run with the time altered with the Accelerate, AccelDeccel and Speed actions.

\n *\n *

For example, you can simulate a Ping Pong effect running the action normally and
\n * then running it again in Reverse mode.

\n * !#zh 时间间隔动作,这种动作在已定时间内完成,继承 FiniteTimeAction。\n * @class ActionInterval\n * @extends FiniteTimeAction\n * @param {Number} d duration in seconds\n */\ncc.ActionInterval = cc.Class({\n name: 'cc.ActionInterval',\n extends: cc.FiniteTimeAction,\n\n ctor:function (d) {\n this.MAX_VALUE = 2;\n this._elapsed = 0;\n this._firstTick = false;\n this._easeList = null;\n this._speed = 1;\n this._timesForRepeat = 1;\n this._repeatForever = false;\n this._repeatMethod = false;//Compatible with repeat class, Discard after can be deleted\n this._speedMethod = false;//Compatible with repeat class, Discard after can be deleted\n d !== undefined && cc.ActionInterval.prototype.initWithDuration.call(this, d);\n },\n\n /*\n * How many seconds had elapsed since the actions started to run.\n * @return {Number}\n */\n getElapsed:function () {\n return this._elapsed;\n },\n\n /*\n * Initializes the action.\n * @param {Number} d duration in seconds\n * @return {Boolean}\n */\n initWithDuration:function (d) {\n this._duration = (d === 0) ? cc.macro.FLT_EPSILON : d;\n // prevent division by 0\n // This comparison could be in step:, but it might decrease the performance\n // by 3% in heavy based action games.\n this._elapsed = 0;\n this._firstTick = true;\n return true;\n },\n\n isDone:function () {\n return (this._elapsed >= this._duration);\n },\n\n _cloneDecoration: function(action){\n action._repeatForever = this._repeatForever;\n action._speed = this._speed;\n action._timesForRepeat = this._timesForRepeat;\n action._easeList = this._easeList;\n action._speedMethod = this._speedMethod;\n action._repeatMethod = this._repeatMethod;\n },\n\n _reverseEaseList: function(action){\n if(this._easeList){\n action._easeList = [];\n for(var i=0; i (this._elapsed / this._duration)) ? this._elapsed / this._duration : 1);\n //this.update(Math.max(0, Math.min(1, this._elapsed / Math.max(this._duration, cc.macro.FLT_EPSILON))));\n var t = this._elapsed / (this._duration > 0.0000001192092896 ? this._duration : 0.0000001192092896);\n t = (1 > t ? t : 1);\n this.update(t > 0 ? t : 0);\n\n //Compatible with repeat class, Discard after can be deleted (this._repeatMethod)\n if(this._repeatMethod && this._timesForRepeat > 1 && this.isDone()){\n if(!this._repeatForever){\n this._timesForRepeat--;\n }\n //var diff = locInnerAction.getElapsed() - locInnerAction._duration;\n this.startWithTarget(this.target);\n // to prevent jerk. issue #390 ,1247\n //this._innerAction.step(0);\n //this._innerAction.step(diff);\n this.step(this._elapsed - this._duration);\n\n }\n },\n\n startWithTarget:function (target) {\n cc.Action.prototype.startWithTarget.call(this, target);\n this._elapsed = 0;\n this._firstTick = true;\n },\n\n reverse:function () {\n cc.logID(1010);\n return null;\n },\n\n /*\n * Set amplitude rate.\n * @warning It should be overridden in subclass.\n * @param {Number} amp\n */\n setAmplitudeRate:function (amp) {\n // Abstract class needs implementation\n cc.logID(1011);\n },\n\n /*\n * Get amplitude rate.\n * @warning It should be overridden in subclass.\n * @return {Number} 0\n */\n getAmplitudeRate:function () {\n // Abstract class needs implementation\n cc.logID(1012);\n return 0;\n },\n\n /**\n * !#en\n * Changes the speed of an action, making it take longer (speed>1)\n * or less (speed<1) time.
\n * Useful to simulate 'slow motion' or 'fast forward' effect.\n * !#zh\n * 改变一个动作的速度,使它的执行使用更长的时间(speed > 1)
\n * 或更少(speed < 1)可以有效得模拟“慢动作”或“快进”的效果。\n * @param {Number} speed\n * @returns {Action}\n */\n speed: function(speed){\n if(speed <= 0){\n cc.logID(1013);\n return this;\n }\n\n this._speedMethod = true;//Compatible with repeat class, Discard after can be deleted\n this._speed *= speed;\n return this;\n },\n\n /**\n * Get this action speed.\n * @return {Number}\n */\n getSpeed: function(){\n return this._speed;\n },\n\n /**\n * Set this action speed.\n * @param {Number} speed\n * @returns {ActionInterval}\n */\n setSpeed: function(speed){\n this._speed = speed;\n return this;\n },\n\n /**\n * !#en\n * Repeats an action a number of times.\n * To repeat an action forever use the CCRepeatForever action.\n * !#zh 重复动作可以按一定次数重复一个动作,使用 RepeatForever 动作来永远重复一个动作。\n * @method repeat\n * @param {Number} times\n * @returns {ActionInterval}\n */\n repeat: function(times){\n times = Math.round(times);\n if(isNaN(times) || times < 1){\n cc.logID(1014);\n return this;\n }\n this._repeatMethod = true;//Compatible with repeat class, Discard after can be deleted\n this._timesForRepeat *= times;\n return this;\n },\n\n /**\n * !#en\n * Repeats an action for ever.
\n * To repeat the an action for a limited number of times use the Repeat action.
\n * !#zh 永远地重复一个动作,有限次数内重复一个动作请使用 Repeat 动作。\n * @method repeatForever\n * @returns {ActionInterval}\n */\n repeatForever: function(){\n this._repeatMethod = true;//Compatible with repeat class, Discard after can be deleted\n this._timesForRepeat = this.MAX_VALUE;\n this._repeatForever = true;\n return this;\n }\n});\n\ncc.actionInterval = function (d) {\n return new cc.ActionInterval(d);\n};\n\n/**\n * @module cc\n */\n\n/*\n * Runs actions sequentially, one after another.\n * @class Sequence\n * @extends ActionInterval\n * @param {Array|FiniteTimeAction} tempArray\n * @example\n * // create sequence with actions\n * var seq = new cc.Sequence(act1, act2);\n *\n * // create sequence with array\n * var seq = new cc.Sequence(actArray);\n */\ncc.Sequence = cc.Class({\n name: 'cc.Sequence',\n extends: cc.ActionInterval,\n\n ctor:function (tempArray) {\n this._actions = [];\n this._split = null;\n this._last = 0;\n this._reversed = false;\n\n var paramArray = (tempArray instanceof Array) ? tempArray : arguments;\n if (paramArray.length === 1) {\n cc.errorID(1019);\n return;\n }\n var last = paramArray.length - 1;\n if ((last >= 0) && (paramArray[last] == null))\n cc.logID(1015);\n\n if (last >= 0) {\n var prev = paramArray[0], action1;\n for (var i = 1; i < last; i++) {\n if (paramArray[i]) {\n action1 = prev;\n prev = cc.Sequence._actionOneTwo(action1, paramArray[i]);\n }\n }\n this.initWithTwoActions(prev, paramArray[last]);\n }\n },\n\n /*\n * Initializes the action
\n * @param {FiniteTimeAction} actionOne\n * @param {FiniteTimeAction} actionTwo\n * @return {Boolean}\n */\n initWithTwoActions:function (actionOne, actionTwo) {\n if (!actionOne || !actionTwo) {\n cc.errorID(1025);\n return false;\n }\n\n var durationOne = actionOne._duration, durationTwo = actionTwo._duration;\n durationOne *= actionOne._repeatMethod ? actionOne._timesForRepeat : 1;\n durationTwo *= actionTwo._repeatMethod ? actionTwo._timesForRepeat : 1;\n var d = durationOne + durationTwo;\n this.initWithDuration(d);\n\n this._actions[0] = actionOne;\n this._actions[1] = actionTwo;\n return true;\n },\n\n clone:function () {\n var action = new cc.Sequence();\n this._cloneDecoration(action);\n action.initWithTwoActions(this._actions[0].clone(), this._actions[1].clone());\n return action;\n },\n\n startWithTarget:function (target) {\n cc.ActionInterval.prototype.startWithTarget.call(this, target);\n this._split = this._actions[0]._duration / this._duration;\n this._split *= this._actions[0]._repeatMethod ? this._actions[0]._timesForRepeat : 1;\n this._last = -1;\n },\n\n stop:function () {\n // Issue #1305\n if (this._last !== -1)\n this._actions[this._last].stop();\n cc.Action.prototype.stop.call(this);\n },\n\n update:function (dt) {\n var new_t, found = 0;\n var locSplit = this._split, locActions = this._actions, locLast = this._last, actionFound;\n\n dt = this._computeEaseTime(dt);\n if (dt < locSplit) {\n // action[0]\n new_t = (locSplit !== 0) ? dt / locSplit : 1;\n\n if (found === 0 && locLast === 1 && this._reversed) {\n // Reverse mode ?\n // XXX: Bug. this case doesn't contemplate when _last==-1, found=0 and in \"reverse mode\"\n // since it will require a hack to know if an action is on reverse mode or not.\n // \"step\" should be overriden, and the \"reverseMode\" value propagated to inner Sequences.\n locActions[1].update(0);\n locActions[1].stop();\n }\n } else {\n // action[1]\n found = 1;\n new_t = (locSplit === 1) ? 1 : (dt - locSplit) / (1 - locSplit);\n\n if (locLast === -1) {\n // action[0] was skipped, execute it.\n locActions[0].startWithTarget(this.target);\n locActions[0].update(1);\n locActions[0].stop();\n }\n if (locLast === 0) {\n // switching to action 1. stop action 0.\n locActions[0].update(1);\n locActions[0].stop();\n }\n }\n\n actionFound = locActions[found];\n // Last action found and it is done.\n if (locLast === found && actionFound.isDone())\n return;\n\n // Last action not found\n if (locLast !== found)\n actionFound.startWithTarget(this.target);\n\n new_t = new_t * actionFound._timesForRepeat;\n actionFound.update(new_t > 1 ? new_t % 1 : new_t);\n this._last = found;\n },\n\n reverse:function () {\n var action = cc.Sequence._actionOneTwo(this._actions[1].reverse(), this._actions[0].reverse());\n this._cloneDecoration(action);\n this._reverseEaseList(action);\n action._reversed = true;\n return action;\n }\n});\n\n/**\n * !#en\n * Helper constructor to create an array of sequenceable actions\n * The created action will run actions sequentially, one after another.\n * !#zh 顺序执行动作,创建的动作将按顺序依次运行。\n * @method sequence\n * @param {FiniteTimeAction|FiniteTimeAction[]} actionOrActionArray\n * @param {FiniteTimeAction} ...tempArray\n * @return {ActionInterval}\n * @example\n * // example\n * // create sequence with actions\n * var seq = cc.sequence(act1, act2);\n *\n * // create sequence with array\n * var seq = cc.sequence(actArray);\n */\n// todo: It should be use new\ncc.sequence = function (/*Multiple Arguments*/tempArray) {\n var paramArray = (tempArray instanceof Array) ? tempArray : arguments;\n if (paramArray.length === 1) {\n cc.errorID(1019);\n return null;\n }\n var last = paramArray.length - 1;\n if ((last >= 0) && (paramArray[last] == null))\n cc.logID(1015);\n\n var result = null;\n if (last >= 0) {\n result = paramArray[0];\n for (var i = 1; i <= last; i++) {\n if (paramArray[i]) {\n result = cc.Sequence._actionOneTwo(result, paramArray[i]);\n }\n }\n }\n\n return result;\n};\n\ncc.Sequence._actionOneTwo = function (actionOne, actionTwo) {\n var sequence = new cc.Sequence();\n sequence.initWithTwoActions(actionOne, actionTwo);\n return sequence;\n};\n\n/*\n * Repeats an action a number of times.\n * To repeat an action forever use the CCRepeatForever action.\n * @class Repeat\n * @extends ActionInterval\n * @param {FiniteTimeAction} action\n * @param {Number} times\n * @example\n * var rep = new cc.Repeat(cc.sequence(jump2, jump1), 5);\n */\ncc.Repeat = cc.Class({\n name: 'cc.Repeat',\n extends: cc.ActionInterval,\n\n ctor: function (action, times) {\n this._times = 0;\n this._total = 0;\n this._nextDt = 0;\n this._actionInstant = false;\n this._innerAction = null;\n\t\ttimes !== undefined && this.initWithAction(action, times);\n },\n\n /*\n * @param {FiniteTimeAction} action\n * @param {Number} times\n * @return {Boolean}\n */\n initWithAction:function (action, times) {\n var duration = action._duration * times;\n\n if (this.initWithDuration(duration)) {\n this._times = times;\n this._innerAction = action;\n if (action instanceof cc.ActionInstant){\n this._actionInstant = true;\n this._times -= 1;\n }\n this._total = 0;\n return true;\n }\n return false;\n },\n\n clone:function () {\n var action = new cc.Repeat();\n this._cloneDecoration(action);\n action.initWithAction(this._innerAction.clone(), this._times);\n return action;\n },\n\n startWithTarget:function (target) {\n this._total = 0;\n this._nextDt = this._innerAction._duration / this._duration;\n cc.ActionInterval.prototype.startWithTarget.call(this, target);\n this._innerAction.startWithTarget(target);\n },\n\n stop:function () {\n this._innerAction.stop();\n cc.Action.prototype.stop.call(this);\n },\n\n update:function (dt) {\n dt = this._computeEaseTime(dt);\n var locInnerAction = this._innerAction;\n var locDuration = this._duration;\n var locTimes = this._times;\n var locNextDt = this._nextDt;\n\n if (dt >= locNextDt) {\n while (dt > locNextDt && this._total < locTimes) {\n locInnerAction.update(1);\n this._total++;\n locInnerAction.stop();\n locInnerAction.startWithTarget(this.target);\n locNextDt += locInnerAction._duration / locDuration;\n this._nextDt = locNextDt > 1 ? 1 : locNextDt;\n }\n\n // fix for issue #1288, incorrect end value of repeat\n if (dt >= 1.0 && this._total < locTimes) {\n // fix for cocos-creator/fireball/issues/4310\n locInnerAction.update(1);\n this._total++;\n }\n\n // don't set a instant action back or update it, it has no use because it has no duration\n if (!this._actionInstant) {\n if (this._total === locTimes) {\n locInnerAction.stop();\n } else {\n // issue #390 prevent jerk, use right update\n locInnerAction.update(dt - (locNextDt - locInnerAction._duration / locDuration));\n }\n }\n } else {\n locInnerAction.update((dt * locTimes) % 1.0);\n }\n },\n\n isDone:function () {\n return this._total === this._times;\n },\n\n reverse:function () {\n var action = new cc.Repeat(this._innerAction.reverse(), this._times);\n this._cloneDecoration(action);\n this._reverseEaseList(action);\n return action;\n },\n\n /*\n * Set inner Action.\n * @param {FiniteTimeAction} action\n */\n setInnerAction:function (action) {\n if (this._innerAction !== action) {\n this._innerAction = action;\n }\n },\n\n /*\n * Get inner Action.\n * @return {FiniteTimeAction}\n */\n getInnerAction:function () {\n return this._innerAction;\n }\n});\n\n/**\n * !#en Creates a Repeat action. Times is an unsigned integer between 1 and pow(2,30)\n * !#zh 重复动作,可以按一定次数重复一个动,如果想永远重复一个动作请使用 repeatForever 动作来完成。\n * @method repeat\n * @param {FiniteTimeAction} action\n * @param {Number} times\n * @return {ActionInterval}\n * @example\n * // example\n * var rep = cc.repeat(cc.sequence(jump2, jump1), 5);\n */\ncc.repeat = function (action, times) {\n return new cc.Repeat(action, times);\n};\n\n\n/*\n * Repeats an action for ever.
\n * To repeat the an action for a limited number of times use the Repeat action.
\n * @warning This action can't be Sequenceable because it is not an IntervalAction\n * @class RepeatForever\n * @extends ActionInterval\n * @param {FiniteTimeAction} action\n * @example\n * var rep = new cc.RepeatForever(cc.sequence(jump2, jump1), 5);\n */\ncc.RepeatForever = cc.Class({\n name: 'cc.RepeatForever',\n extends: cc.ActionInterval,\n\n ctor:function (action) {\n this._innerAction = null;\n\t\taction && this.initWithAction(action);\n },\n\n /*\n * @param {ActionInterval} action\n * @return {Boolean}\n */\n initWithAction:function (action) {\n if (!action) {\n cc.errorID(1026);\n return false;\n }\n\n this._innerAction = action;\n return true;\n },\n\n clone:function () {\n var action = new cc.RepeatForever();\n this._cloneDecoration(action);\n action.initWithAction(this._innerAction.clone());\n return action;\n },\n\n startWithTarget:function (target) {\n cc.ActionInterval.prototype.startWithTarget.call(this, target);\n this._innerAction.startWithTarget(target);\n },\n\n step:function (dt) {\n var locInnerAction = this._innerAction;\n locInnerAction.step(dt);\n if (locInnerAction.isDone()) {\n //var diff = locInnerAction.getElapsed() - locInnerAction._duration;\n locInnerAction.startWithTarget(this.target);\n // to prevent jerk. issue #390 ,1247\n //this._innerAction.step(0);\n //this._innerAction.step(diff);\n locInnerAction.step(locInnerAction.getElapsed() - locInnerAction._duration);\n }\n },\n\n isDone:function () {\n return false;\n },\n\n reverse:function () {\n var action = new cc.RepeatForever(this._innerAction.reverse());\n this._cloneDecoration(action);\n this._reverseEaseList(action);\n return action;\n },\n\n /*\n * Set inner action.\n * @param {ActionInterval} action\n */\n setInnerAction:function (action) {\n if (this._innerAction !== action) {\n this._innerAction = action;\n }\n },\n\n /*\n * Get inner action.\n * @return {ActionInterval}\n */\n getInnerAction:function () {\n return this._innerAction;\n }\n});\n\n/**\n * !#en Create a acton which repeat forever, as it runs forever, it can't be added into cc.sequence and cc.spawn.\n * !#zh 永远地重复一个动作,有限次数内重复一个动作请使用 repeat 动作,由于这个动作不会停止,所以不能被添加到 cc.sequence 或 cc.spawn 中。\n * @method repeatForever\n * @param {FiniteTimeAction} action\n * @return {ActionInterval}\n * @example\n * // example\n * var repeat = cc.repeatForever(cc.rotateBy(1.0, 360));\n */\ncc.repeatForever = function (action) {\n return new cc.RepeatForever(action);\n};\n\n\n/* \n * Spawn a new action immediately\n * @class Spawn\n * @extends ActionInterval\n */\ncc.Spawn = cc.Class({\n name: 'cc.Spawn',\n extends: cc.ActionInterval,\n\n ctor:function (tempArray) {\n this._one = null;\n this._two = null;\n\n\t\tvar paramArray = (tempArray instanceof Array) ? tempArray : arguments;\n if (paramArray.length === 1) {\n cc.errorID(1020);\n return;\n }\n\t\tvar last = paramArray.length - 1;\n\t\tif ((last >= 0) && (paramArray[last] == null))\n\t\t\tcc.logID(1015);\n\n if (last >= 0) {\n var prev = paramArray[0], action1;\n for (var i = 1; i < last; i++) {\n if (paramArray[i]) {\n action1 = prev;\n prev = cc.Spawn._actionOneTwo(action1, paramArray[i]);\n }\n }\n this.initWithTwoActions(prev, paramArray[last]);\n }\n },\n\n /* initializes the Spawn action with the 2 actions to spawn\n * @param {FiniteTimeAction} action1\n * @param {FiniteTimeAction} action2\n * @return {Boolean}\n */\n initWithTwoActions:function (action1, action2) {\n if (!action1 || !action2) {\n cc.errorID(1027);\n return false;\n }\n\n var ret = false;\n\n var d1 = action1._duration;\n var d2 = action2._duration;\n\n if (this.initWithDuration(Math.max(d1, d2))) {\n this._one = action1;\n this._two = action2;\n\n if (d1 > d2) {\n this._two = cc.Sequence._actionOneTwo(action2, cc.delayTime(d1 - d2));\n } else if (d1 < d2) {\n this._one = cc.Sequence._actionOneTwo(action1, cc.delayTime(d2 - d1));\n }\n\n ret = true;\n }\n return ret;\n },\n\n clone:function () {\n var action = new cc.Spawn();\n this._cloneDecoration(action);\n action.initWithTwoActions(this._one.clone(), this._two.clone());\n return action;\n },\n\n startWithTarget:function (target) {\n cc.ActionInterval.prototype.startWithTarget.call(this, target);\n this._one.startWithTarget(target);\n this._two.startWithTarget(target);\n },\n\n stop:function () {\n this._one.stop();\n this._two.stop();\n cc.Action.prototype.stop.call(this);\n },\n\n update:function (dt) {\n dt = this._computeEaseTime(dt);\n if (this._one)\n this._one.update(dt);\n if (this._two)\n this._two.update(dt);\n },\n\n reverse:function () {\n var action = cc.Spawn._actionOneTwo(this._one.reverse(), this._two.reverse());\n this._cloneDecoration(action);\n this._reverseEaseList(action);\n return action;\n }\n});\n\n/**\n * !#en Create a spawn action which runs several actions in parallel.\n * !#zh 同步执行动作,同步执行一组动作。\n * @method spawn\n * @param {FiniteTimeAction|FiniteTimeAction[]} actionOrActionArray\n * @param {FiniteTimeAction} ...tempArray\n * @return {FiniteTimeAction}\n * @example\n * // example\n * var action = cc.spawn(cc.jumpBy(2, cc.v2(300, 0), 50, 4), cc.rotateBy(2, 720));\n * todo: It should be the direct use new\n */\ncc.spawn = function (/*Multiple Arguments*/tempArray) {\n var paramArray = (tempArray instanceof Array) ? tempArray : arguments;\n if (paramArray.length === 1) {\n cc.errorID(1020);\n return null;\n }\n if ((paramArray.length > 0) && (paramArray[paramArray.length - 1] == null))\n cc.logID(1015);\n\n var prev = paramArray[0];\n for (var i = 1; i < paramArray.length; i++) {\n if (paramArray[i] != null)\n prev = cc.Spawn._actionOneTwo(prev, paramArray[i]);\n }\n return prev;\n};\n\ncc.Spawn._actionOneTwo = function (action1, action2) {\n var pSpawn = new cc.Spawn();\n pSpawn.initWithTwoActions(action1, action2);\n return pSpawn;\n};\n\n\n/*\n * Rotates a Node object to a certain angle by modifying its angle property.
\n * The direction will be decided by the shortest angle.\n * @class RotateTo\n * @extends ActionInterval\n * @param {Number} duration duration in seconds\n * @param {Number} dstAngle dstAngle in degrees.\n * @example\n * var rotateTo = new cc.RotateTo(2, 61.0);\n */\ncc.RotateTo = cc.Class({\n name: 'cc.RotateTo',\n extends: cc.ActionInterval,\n\n statics: {\n _reverse: false,\n },\n\n ctor:function (duration, dstAngle) {\n this._startAngle = 0;\n this._dstAngle = 0;\n this._angle = 0;\n dstAngle !== undefined && this.initWithDuration(duration, dstAngle);\n },\n\n /*\n * Initializes the action.\n * @param {Number} duration\n * @param {Number} dstAngle\n * @return {Boolean}\n */\n initWithDuration:function (duration, dstAngle) {\n if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) {\n this._dstAngle = dstAngle;\n return true;\n }\n return false;\n },\n\n clone:function () {\n var action = new cc.RotateTo();\n this._cloneDecoration(action);\n action.initWithDuration(this._duration, this._dstAngle);\n return action;\n },\n\n startWithTarget:function (target) {\n cc.ActionInterval.prototype.startWithTarget.call(this, target);\n\n let startAngle = target.angle % 360;\n\n let angle = cc.RotateTo._reverse ? (this._dstAngle - startAngle) : (this._dstAngle + startAngle);\n if (angle > 180) angle -= 360;\n if (angle < -180) angle += 360;\n\n this._startAngle = startAngle;\n this._angle = cc.RotateTo._reverse ? angle : -angle;\n },\n\n reverse:function () {\n cc.logID(1016);\n },\n\n update:function (dt) {\n dt = this._computeEaseTime(dt);\n if (this.target) {\n this.target.angle = this._startAngle + this._angle * dt;\n }\n }\n});\n\n/**\n * !#en\n * Rotates a Node object to a certain angle by modifying its angle property.
\n * The direction will be decided by the shortest angle.\n * !#zh 旋转到目标角度,通过逐帧修改它的 angle 属性,旋转方向将由最短的角度决定。\n * @method rotateTo\n * @param {Number} duration duration in seconds\n * @param {Number} dstAngle dstAngle in degrees.\n * @return {ActionInterval}\n * @example\n * // example\n * var rotateTo = cc.rotateTo(2, 61.0);\n */\ncc.rotateTo = function (duration, dstAngle) {\n return new cc.RotateTo(duration, dstAngle);\n};\n\n\n/*\n * Rotates a Node object clockwise a number of degrees by modifying its angle property.\n * Relative to its properties to modify.\n * @class RotateBy\n * @extends ActionInterval\n * @param {Number} duration duration in seconds\n * @param {Number} deltaAngle deltaAngle in degrees\n * @example\n * var actionBy = new cc.RotateBy(2, 360);\n */\ncc.RotateBy = cc.Class({\n name: 'cc.RotateBy',\n extends: cc.ActionInterval,\n\n statics: {\n _reverse: false,\n },\n\n ctor: function (duration, deltaAngle) {\n deltaAngle *= cc.RotateBy._reverse ? 1 : -1;\n\n this._deltaAngle = 0;\n this._startAngle = 0;\n deltaAngle !== undefined && this.initWithDuration(duration, deltaAngle);\n },\n\n /*\n * Initializes the action.\n * @param {Number} duration duration in seconds\n * @param {Number} deltaAngle deltaAngle in degrees\n * @return {Boolean}\n */\n initWithDuration:function (duration, deltaAngle) {\n if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) {\n this._deltaAngle = deltaAngle;\n return true;\n }\n return false;\n },\n\n clone:function () {\n var action = new cc.RotateBy();\n this._cloneDecoration(action);\n action.initWithDuration(this._duration, this._deltaAngle);\n return action;\n },\n\n startWithTarget:function (target) {\n cc.ActionInterval.prototype.startWithTarget.call(this, target);\n this._startAngle = target.angle;\n },\n\n update:function (dt) {\n dt = this._computeEaseTime(dt);\n if (this.target) {\n this.target.angle = this._startAngle + this._deltaAngle * dt;\n }\n },\n\n reverse:function () {\n var action = new cc.RotateBy();\n action.initWithDuration(this._duration, -this._deltaAngle);\n this._cloneDecoration(action);\n this._reverseEaseList(action);\n return action;\n }\n});\n\n/**\n * !#en\n * Rotates a Node object clockwise a number of degrees by modifying its angle property.\n * Relative to its properties to modify.\n * !#zh 旋转指定的角度。\n * @method rotateBy\n * @param {Number} duration duration in seconds\n * @param {Number} deltaAngle deltaAngle in degrees\n * @return {ActionInterval}\n * @example\n * // example\n * var actionBy = cc.rotateBy(2, 360);\n */\ncc.rotateBy = function (duration, deltaAngle) {\n return new cc.RotateBy(duration, deltaAngle);\n};\n\n\n/*\n *

\n * Moves a Node object x,y pixels by modifying its position property.
\n * x and y are relative to the position of the object.
\n * Several MoveBy actions can be concurrently called, and the resulting
\n * movement will be the sum of individual movements.\n *

\n * @class MoveBy\n * @extends ActionInterval\n * @param {Number} duration duration in seconds\n * @param {Vec2|Number} deltaPos\n * @param {Number} [deltaY]\n * @example\n * var actionTo = cc.moveBy(2, cc.v2(windowSize.width - 40, windowSize.height - 40));\n */\ncc.MoveBy = cc.Class({\n name: 'cc.MoveBy',\n extends: cc.ActionInterval,\n\n ctor:function (duration, deltaPos, deltaY) {\n this._positionDelta = cc.v2(0, 0);\n this._startPosition = cc.v2(0, 0);\n this._previousPosition = cc.v2(0, 0);\n\n deltaPos !== undefined && cc.MoveBy.prototype.initWithDuration.call(this, duration, deltaPos, deltaY);\t\n },\n\n /*\n * Initializes the action.\n * @param {Number} duration duration in seconds\n * @param {Vec2} position\n * @param {Number} [y]\n * @return {Boolean}\n */\n initWithDuration:function (duration, position, y) {\n if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) {\n\t if(position.x !== undefined) {\n\t\t y = position.y;\n\t\t position = position.x;\n\t }\n\n this._positionDelta.x = position;\n this._positionDelta.y = y;\n return true;\n }\n return false;\n },\n\n clone:function () {\n var action = new cc.MoveBy();\n this._cloneDecoration(action);\n action.initWithDuration(this._duration, this._positionDelta);\n return action;\n },\n\n startWithTarget:function (target) {\n cc.ActionInterval.prototype.startWithTarget.call(this, target);\n var locPosX = target.x;\n var locPosY = target.y;\n this._previousPosition.x = locPosX;\n this._previousPosition.y = locPosY;\n this._startPosition.x = locPosX;\n this._startPosition.y = locPosY;\n },\n\n update:function (dt) {\n dt = this._computeEaseTime(dt);\n if (this.target) {\n var x = this._positionDelta.x * dt;\n var y = this._positionDelta.y * dt;\n var locStartPosition = this._startPosition;\n if (cc.macro.ENABLE_STACKABLE_ACTIONS) {\n var targetX = this.target.x;\n var targetY = this.target.y;\n var locPreviousPosition = this._previousPosition;\n\n locStartPosition.x = locStartPosition.x + targetX - locPreviousPosition.x;\n locStartPosition.y = locStartPosition.y + targetY - locPreviousPosition.y;\n x = x + locStartPosition.x;\n y = y + locStartPosition.y;\n\t locPreviousPosition.x = x;\n\t locPreviousPosition.y = y;\n\t this.target.setPosition(x, y);\n } else {\n this.target.setPosition(locStartPosition.x + x, locStartPosition.y + y);\n }\n }\n },\n\n reverse:function () {\n var action = new cc.MoveBy(this._duration, cc.v2(-this._positionDelta.x, -this._positionDelta.y));\n this._cloneDecoration(action);\n this._reverseEaseList(action);\n return action;\n }\n});\n\n/**\n * !#en\n * Moves a Node object x,y pixels by modifying its position property.
\n * x and y are relative to the position of the object.
\n * Several MoveBy actions can be concurrently called, and the resulting
\n * movement will be the sum of individual movements.\n * !#zh 移动指定的距离。\n * @method moveBy\n * @param {Number} duration duration in seconds\n * @param {Vec2|Number} deltaPos\n * @param {Number} [deltaY]\n * @return {ActionInterval}\n * @example\n * // example\n * var actionTo = cc.moveBy(2, cc.v2(windowSize.width - 40, windowSize.height - 40));\n */\ncc.moveBy = function (duration, deltaPos, deltaY) {\n return new cc.MoveBy(duration, deltaPos, deltaY);\n};\n\n\n/*\n * Moves a Node object to the position x,y. x and y are absolute coordinates by modifying its position property.
\n * Several MoveTo actions can be concurrently called, and the resulting
\n * movement will be the sum of individual movements.\n * @class MoveTo\n * @extends MoveBy\n * @param {Number} duration duration in seconds\n * @param {Vec2|Number} position\n * @param {Number} [y]\n * @example\n * var actionBy = new cc.MoveTo(2, cc.v2(80, 80));\n */\ncc.MoveTo = cc.Class({\n name: 'cc.MoveTo',\n extends: cc.MoveBy,\n\n ctor:function (duration, position, y) {\n this._endPosition = cc.v2(0, 0);\n\t\tposition !== undefined && this.initWithDuration(duration, position, y);\n },\n\n /*\n * Initializes the action.\n * @param {Number} duration duration in seconds\n * @param {Vec2} position\n * @param {Number} [y]\n * @return {Boolean}\n */\n initWithDuration:function (duration, position, y) {\n if (cc.MoveBy.prototype.initWithDuration.call(this, duration, position, y)) {\n\t if(position.x !== undefined) {\n\t\t y = position.y;\n\t\t position = position.x;\n\t }\n\n this._endPosition.x = position;\n this._endPosition.y = y;\n return true;\n }\n return false;\n },\n\n clone:function () {\n var action = new cc.MoveTo();\n this._cloneDecoration(action);\n action.initWithDuration(this._duration, this._endPosition);\n return action;\n },\n\n startWithTarget:function (target) {\n cc.MoveBy.prototype.startWithTarget.call(this, target);\n this._positionDelta.x = this._endPosition.x - target.x;\n this._positionDelta.y = this._endPosition.y - target.y;\n }\n});\n\n/**\n * !#en\n * Moves a Node object to the position x,y. x and y are absolute coordinates by modifying its position property.
\n * Several MoveTo actions can be concurrently called, and the resulting
\n * movement will be the sum of individual movements.\n * !#zh 移动到目标位置。\n * @method moveTo\n * @param {Number} duration duration in seconds\n * @param {Vec2|Number} position\n * @param {Number} [y]\n * @return {ActionInterval}\n * @example\n * // example\n * var actionBy = cc.moveTo(2, cc.v2(80, 80));\n */\ncc.moveTo = function (duration, position, y) {\n return new cc.MoveTo(duration, position, y);\n};\n\n/*\n * Skews a Node object to given angles by modifying its skewX and skewY properties\n * @class SkewTo\n * @extends ActionInterval\n * @param {Number} t time in seconds\n * @param {Number} sx\n * @param {Number} sy\n * @example\n * var actionTo = new cc.SkewTo(2, 37.2, -37.2);\n */\ncc.SkewTo = cc.Class({\n name: 'cc.SkewTo',\n extends: cc.ActionInterval,\n\n ctor: function (t, sx, sy) {\n this._skewX = 0;\n this._skewY = 0;\n this._startSkewX = 0;\n this._startSkewY = 0;\n this._endSkewX = 0;\n this._endSkewY = 0;\n this._deltaX = 0;\n this._deltaY = 0;\n sy !== undefined && cc.SkewTo.prototype.initWithDuration.call(this, t, sx, sy);\n },\n\n /*\n * Initializes the action.\n * @param {Number} t time in seconds\n * @param {Number} sx\n * @param {Number} sy\n * @return {Boolean}\n */\n initWithDuration:function (t, sx, sy) {\n var ret = false;\n if (cc.ActionInterval.prototype.initWithDuration.call(this, t)) {\n this._endSkewX = sx;\n this._endSkewY = sy;\n ret = true;\n }\n return ret;\n },\n\n clone:function () {\n var action = new cc.SkewTo();\n this._cloneDecoration(action);\n action.initWithDuration(this._duration, this._endSkewX, this._endSkewY);\n return action;\n },\n\n startWithTarget:function (target) {\n cc.ActionInterval.prototype.startWithTarget.call(this, target);\n\n this._startSkewX = target.skewX % 180;\n this._deltaX = this._endSkewX - this._startSkewX;\n if (this._deltaX > 180)\n this._deltaX -= 360;\n if (this._deltaX < -180)\n this._deltaX += 360;\n\n this._startSkewY = target.skewY % 360;\n this._deltaY = this._endSkewY - this._startSkewY;\n if (this._deltaY > 180)\n this._deltaY -= 360;\n if (this._deltaY < -180)\n this._deltaY += 360;\n },\n\n update:function (dt) {\n dt = this._computeEaseTime(dt);\n this.target.skewX = this._startSkewX + this._deltaX * dt;\n this.target.skewY = this._startSkewY + this._deltaY * dt;\n }\n});\n\n/**\n * !#en\n * Create a action which skews a Node object to given angles by modifying its skewX and skewY properties.\n * Changes to the specified value.\n * !#zh 偏斜到目标角度。\n * @method skewTo\n * @param {Number} t time in seconds\n * @param {Number} sx\n * @param {Number} sy\n * @return {ActionInterval}\n * @example\n * // example\n * var actionTo = cc.skewTo(2, 37.2, -37.2);\n */\ncc.skewTo = function (t, sx, sy) {\n return new cc.SkewTo(t, sx, sy);\n};\n\n/*\n * Skews a Node object by skewX and skewY degrees.\n * Relative to its property modification.\n * @class SkewBy\n * @extends SkewTo\n * @param {Number} t time in seconds\n * @param {Number} sx skew in degrees for X axis\n * @param {Number} sy skew in degrees for Y axis\n */\ncc.SkewBy = cc.Class({\n name: 'cc.SkewBy',\n extends: cc.SkewTo,\n\n\tctor: function(t, sx, sy) {\n\t\tsy !== undefined && this.initWithDuration(t, sx, sy);\n\t},\n\n /*\n * Initializes the action.\n * @param {Number} t time in seconds\n * @param {Number} deltaSkewX skew in degrees for X axis\n * @param {Number} deltaSkewY skew in degrees for Y axis\n * @return {Boolean}\n */\n initWithDuration:function (t, deltaSkewX, deltaSkewY) {\n var ret = false;\n if (cc.SkewTo.prototype.initWithDuration.call(this, t, deltaSkewX, deltaSkewY)) {\n this._skewX = deltaSkewX;\n this._skewY = deltaSkewY;\n ret = true;\n }\n return ret;\n },\n\n clone:function () {\n var action = new cc.SkewBy();\n this._cloneDecoration(action);\n action.initWithDuration(this._duration, this._skewX, this._skewY);\n return action;\n },\n\n startWithTarget:function (target) {\n cc.SkewTo.prototype.startWithTarget.call(this, target);\n this._deltaX = this._skewX;\n this._deltaY = this._skewY;\n this._endSkewX = this._startSkewX + this._deltaX;\n this._endSkewY = this._startSkewY + this._deltaY;\n },\n\n reverse:function () {\n var action = new cc.SkewBy(this._duration, -this._skewX, -this._skewY);\n this._cloneDecoration(action);\n this._reverseEaseList(action);\n return action;\n }\n});\n\n/**\n * !#en\n * Skews a Node object by skewX and skewY degrees.
\n * Relative to its property modification.\n * !#zh 偏斜指定的角度。\n * @method skewBy\n * @param {Number} t time in seconds\n * @param {Number} sx sx skew in degrees for X axis\n * @param {Number} sy sy skew in degrees for Y axis\n * @return {ActionInterval}\n * @example\n * // example\n * var actionBy = cc.skewBy(2, 0, -90);\n */\ncc.skewBy = function (t, sx, sy) {\n return new cc.SkewBy(t, sx, sy);\n};\n\n\n/*\n * Moves a Node object simulating a parabolic jump movement by modifying its position property.\n * Relative to its movement.\n * @class JumpBy\n * @extends ActionInterval\n * @param {Number} duration\n * @param {Vec2|Number} position\n * @param {Number} [y]\n * @param {Number} height\n * @param {Number} jumps\n * @example\n * var actionBy = new cc.JumpBy(2, cc.v2(300, 0), 50, 4);\n * var actionBy = new cc.JumpBy(2, 300, 0, 50, 4);\n */\ncc.JumpBy = cc.Class({\n name: 'cc.JumpBy',\n extends: cc.ActionInterval,\n\n ctor:function (duration, position, y, height, jumps) {\n this._startPosition = cc.v2(0, 0);\n this._previousPosition = cc.v2(0, 0);\n this._delta = cc.v2(0, 0);\n this._height = 0;\n this._jumps = 0;\n\n height !== undefined && cc.JumpBy.prototype.initWithDuration.call(this, duration, position, y, height, jumps);\n },\n /*\n * Initializes the action.\n * @param {Number} duration\n * @param {Vec2|Number} position\n * @param {Number} [y]\n * @param {Number} height\n * @param {Number} jumps\n * @return {Boolean}\n * @example\n * actionBy.initWithDuration(2, cc.v2(300, 0), 50, 4);\n * actionBy.initWithDuration(2, 300, 0, 50, 4);\n */\n initWithDuration:function (duration, position, y, height, jumps) {\n if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) {\n\t if (jumps === undefined) {\n\t\t jumps = height;\n\t\t height = y;\n\t\t y = position.y;\n\t\t position = position.x;\n\t }\n this._delta.x = position;\n this._delta.y = y;\n this._height = height;\n this._jumps = jumps;\n return true;\n }\n return false;\n },\n\n clone:function () {\n var action = new cc.JumpBy();\n this._cloneDecoration(action);\n action.initWithDuration(this._duration, this._delta, this._height, this._jumps);\n return action;\n },\n\n startWithTarget:function (target) {\n cc.ActionInterval.prototype.startWithTarget.call(this, target);\n var locPosX = target.x;\n var locPosY = target.y;\n this._previousPosition.x = locPosX;\n this._previousPosition.y = locPosY;\n this._startPosition.x = locPosX;\n this._startPosition.y = locPosY;\n },\n\n update:function (dt) {\n dt = this._computeEaseTime(dt);\n if (this.target) {\n var frac = dt * this._jumps % 1.0;\n var y = this._height * 4 * frac * (1 - frac);\n y += this._delta.y * dt;\n\n var x = this._delta.x * dt;\n var locStartPosition = this._startPosition;\n if (cc.macro.ENABLE_STACKABLE_ACTIONS) {\n var targetX = this.target.x;\n var targetY = this.target.y;\n var locPreviousPosition = this._previousPosition;\n\n locStartPosition.x = locStartPosition.x + targetX - locPreviousPosition.x;\n locStartPosition.y = locStartPosition.y + targetY - locPreviousPosition.y;\n x = x + locStartPosition.x;\n y = y + locStartPosition.y;\n\t locPreviousPosition.x = x;\n\t locPreviousPosition.y = y;\n\t this.target.setPosition(x, y);\n } else {\n this.target.setPosition(locStartPosition.x + x, locStartPosition.y + y);\n }\n }\n },\n\n reverse:function () {\n var action = new cc.JumpBy(this._duration, cc.v2(-this._delta.x, -this._delta.y), this._height, this._jumps);\n this._cloneDecoration(action);\n this._reverseEaseList(action);\n return action;\n }\n});\n\n/**\n * !#en\n * Moves a Node object simulating a parabolic jump movement by modifying it's position property.\n * Relative to its movement.\n * !#zh 用跳跃的方式移动指定的距离。\n * @method jumpBy\n * @param {Number} duration\n * @param {Vec2|Number} position\n * @param {Number} [y]\n * @param {Number} [height]\n * @param {Number} [jumps]\n * @return {ActionInterval}\n * @example\n * // example\n * var actionBy = cc.jumpBy(2, cc.v2(300, 0), 50, 4);\n * var actionBy = cc.jumpBy(2, 300, 0, 50, 4);\n */\ncc.jumpBy = function (duration, position, y, height, jumps) {\n return new cc.JumpBy(duration, position, y, height, jumps);\n};\n\n/*\n * Moves a Node object to a parabolic position simulating a jump movement by modifying it's position property.
\n * Jump to the specified location.\n * @class JumpTo\n * @extends JumpBy\n * @param {Number} duration\n * @param {Vec2|Number} position\n * @param {Number} [y]\n * @param {Number} [height]\n * @param {Number} [jumps]\n * @example\n * var actionTo = new cc.JumpTo(2, cc.v2(300, 0), 50, 4);\n * var actionTo = new cc.JumpTo(2, 300, 0, 50, 4);\n */\ncc.JumpTo = cc.Class({\n name: 'cc.JumpTo',\n extends: cc.JumpBy,\n\n ctor:function (duration, position, y, height, jumps) {\n this._endPosition = cc.v2(0, 0);\n height !== undefined && this.initWithDuration(duration, position, y, height, jumps);\n },\n /*\n * Initializes the action.\n * @param {Number} duration\n * @param {Vec2|Number} position\n * @param {Number} [y]\n * @param {Number} height\n * @param {Number} jumps\n * @return {Boolean}\n * @example\n * actionTo.initWithDuration(2, cc.v2(300, 0), 50, 4);\n * actionTo.initWithDuration(2, 300, 0, 50, 4);\n */\n initWithDuration:function (duration, position, y, height, jumps) {\n if (cc.JumpBy.prototype.initWithDuration.call(this, duration, position, y, height, jumps)) {\n if (jumps === undefined) {\n y = position.y;\n position = position.x;\n }\n this._endPosition.x = position;\n this._endPosition.y = y;\n return true;\n }\n return false;\n },\n\n startWithTarget:function (target) {\n cc.JumpBy.prototype.startWithTarget.call(this, target);\n this._delta.x = this._endPosition.x - this._startPosition.x;\n this._delta.y = this._endPosition.y - this._startPosition.y;\n },\n\n clone:function () {\n var action = new cc.JumpTo();\n this._cloneDecoration(action);\n action.initWithDuration(this._duration, this._endPosition, this._height, this._jumps);\n return action;\n }\n});\n\n/**\n * !#en\n * Moves a Node object to a parabolic position simulating a jump movement by modifying its position property.
\n * Jump to the specified location.\n * !#zh 用跳跃的方式移动到目标位置。\n * @method jumpTo\n * @param {Number} duration\n * @param {Vec2|Number} position\n * @param {Number} [y]\n * @param {Number} [height]\n * @param {Number} [jumps]\n * @return {ActionInterval}\n * @example\n * // example\n * var actionTo = cc.jumpTo(2, cc.v2(300, 300), 50, 4);\n * var actionTo = cc.jumpTo(2, 300, 300, 50, 4);\n */\ncc.jumpTo = function (duration, position, y, height, jumps) {\n return new cc.JumpTo(duration, position, y, height, jumps);\n};\n\n/* An action that moves the target with a cubic Bezier curve by a certain distance.\n * Relative to its movement.\n * @class BezierBy\n * @extends ActionInterval\n * @param {Number} t - time in seconds\n * @param {Vec2[]} c - Array of points\n * @example\n * var bezier = [cc.v2(0, windowSize.height / 2), cc.v2(300, -windowSize.height / 2), cc.v2(300, 100)];\n * var bezierForward = new cc.BezierBy(3, bezier);\n */\nfunction bezierAt (a, b, c, d, t) {\n return (Math.pow(1 - t, 3) * a +\n 3 * t * (Math.pow(1 - t, 2)) * b +\n 3 * Math.pow(t, 2) * (1 - t) * c +\n Math.pow(t, 3) * d );\n};\ncc.BezierBy = cc.Class({\n name: 'cc.BezierBy',\n extends: cc.ActionInterval,\n\n ctor:function (t, c) {\n this._config = [];\n this._startPosition = cc.v2(0, 0);\n this._previousPosition = cc.v2(0, 0);\n c && cc.BezierBy.prototype.initWithDuration.call(this, t, c);\n },\n\n /*\n * Initializes the action.\n * @param {Number} t - time in seconds\n * @param {Vec2[]} c - Array of points\n * @return {Boolean}\n */\n initWithDuration:function (t, c) {\n if (cc.ActionInterval.prototype.initWithDuration.call(this, t)) {\n this._config = c;\n return true;\n }\n return false;\n },\n\n clone:function () {\n var action = new cc.BezierBy();\n this._cloneDecoration(action);\n var newConfigs = [];\n for (var i = 0; i < this._config.length; i++) {\n var selConf = this._config[i];\n newConfigs.push(cc.v2(selConf.x, selConf.y));\n }\n action.initWithDuration(this._duration, newConfigs);\n return action;\n },\n\n startWithTarget:function (target) {\n cc.ActionInterval.prototype.startWithTarget.call(this, target);\n var locPosX = target.x;\n var locPosY = target.y;\n this._previousPosition.x = locPosX;\n this._previousPosition.y = locPosY;\n this._startPosition.x = locPosX;\n this._startPosition.y = locPosY;\n },\n\n update:function (dt) {\n dt = this._computeEaseTime(dt);\n if (this.target) {\n var locConfig = this._config;\n var xa = 0;\n var xb = locConfig[0].x;\n var xc = locConfig[1].x;\n var xd = locConfig[2].x;\n\n var ya = 0;\n var yb = locConfig[0].y;\n var yc = locConfig[1].y;\n var yd = locConfig[2].y;\n\n var x = bezierAt(xa, xb, xc, xd, dt);\n var y = bezierAt(ya, yb, yc, yd, dt);\n\n var locStartPosition = this._startPosition;\n if (cc.macro.ENABLE_STACKABLE_ACTIONS) {\n var targetX = this.target.x;\n var targetY = this.target.y;\n var locPreviousPosition = this._previousPosition;\n\n locStartPosition.x = locStartPosition.x + targetX - locPreviousPosition.x;\n locStartPosition.y = locStartPosition.y + targetY - locPreviousPosition.y;\n x = x + locStartPosition.x;\n y = y + locStartPosition.y;\n\t locPreviousPosition.x = x;\n\t locPreviousPosition.y = y;\n\t this.target.setPosition(x, y);\n } else {\n this.target.setPosition(locStartPosition.x + x, locStartPosition.y + y);\n }\n }\n },\n\n reverse:function () {\n var locConfig = this._config;\n var x0 = locConfig[0].x, y0 = locConfig[0].y;\n var x1 = locConfig[1].x, y1 = locConfig[1].y;\n var x2 = locConfig[2].x, y2 = locConfig[2].y;\n var r = [\n cc.v2(x1 - x2, y1 - y2),\n cc.v2(x0 - x2, y0 - y2),\n cc.v2(-x2, -y2) ];\n var action = new cc.BezierBy(this._duration, r);\n this._cloneDecoration(action);\n this._reverseEaseList(action);\n return action;\n }\n});\n\n/**\n * !#en\n * An action that moves the target with a cubic Bezier curve by a certain distance.\n * Relative to its movement.\n * !#zh 按贝赛尔曲线轨迹移动指定的距离。\n * @method bezierBy\n * @param {Number} t - time in seconds\n * @param {Vec2[]} c - Array of points\n * @return {ActionInterval}\n * @example\n * // example\n * var bezier = [cc.v2(0, windowSize.height / 2), cc.v2(300, -windowSize.height / 2), cc.v2(300, 100)];\n * var bezierForward = cc.bezierBy(3, bezier);\n */\ncc.bezierBy = function (t, c) {\n return new cc.BezierBy(t, c);\n};\n\n\n/* An action that moves the target with a cubic Bezier curve to a destination point.\n * @class BezierTo\n * @extends BezierBy\n * @param {Number} t\n * @param {Vec2[]} c - Array of points\n * @example\n * var bezier = [cc.v2(0, windowSize.height / 2), cc.v2(300, -windowSize.height / 2), cc.v2(300, 100)];\n * var bezierTo = new cc.BezierTo(2, bezier);\n */\ncc.BezierTo = cc.Class({\n name: 'cc.BezierTo',\n extends: cc.BezierBy,\n\n ctor:function (t, c) {\n this._toConfig = [];\n\t\tc && this.initWithDuration(t, c);\n },\n\n /*\n * Initializes the action.\n * @param {Number} t time in seconds\n * @param {Vec2[]} c - Array of points\n * @return {Boolean}\n */\n initWithDuration:function (t, c) {\n if (cc.ActionInterval.prototype.initWithDuration.call(this, t)) {\n this._toConfig = c;\n return true;\n }\n return false;\n },\n\n clone:function () {\n var action = new cc.BezierTo();\n this._cloneDecoration(action);\n action.initWithDuration(this._duration, this._toConfig);\n return action;\n },\n\n startWithTarget:function (target) {\n cc.BezierBy.prototype.startWithTarget.call(this, target);\n var locStartPos = this._startPosition;\n var locToConfig = this._toConfig;\n var locConfig = this._config;\n\n locConfig[0] = locToConfig[0].sub(locStartPos);\n locConfig[1] = locToConfig[1].sub(locStartPos);\n locConfig[2] = locToConfig[2].sub(locStartPos);\n }\n});\n/**\n * !#en An action that moves the target with a cubic Bezier curve to a destination point.\n * !#zh 按贝赛尔曲线轨迹移动到目标位置。\n * @method bezierTo\n * @param {Number} t\n * @param {Vec2[]} c - Array of points\n * @return {ActionInterval}\n * @example\n * // example\n * var bezier = [cc.v2(0, windowSize.height / 2), cc.v2(300, -windowSize.height / 2), cc.v2(300, 100)];\n * var bezierTo = cc.bezierTo(2, bezier);\n */\ncc.bezierTo = function (t, c) {\n return new cc.BezierTo(t, c);\n};\n\n\n/* Scales a Node object to a zoom factor by modifying it's scale property.\n * @warning This action doesn't support \"reverse\"\n * @class ScaleTo\n * @extends ActionInterval\n * @param {Number} duration\n * @param {Number} sx scale parameter in X\n * @param {Number} [sy] scale parameter in Y, if Null equal to sx\n * @example\n * // It scales to 0.5 in both X and Y.\n * var actionTo = new cc.ScaleTo(2, 0.5);\n *\n * // It scales to 0.5 in x and 2 in Y\n * var actionTo = new cc.ScaleTo(2, 0.5, 2);\n */\ncc.ScaleTo = cc.Class({\n name: 'cc.ScaleTo',\n extends: cc.ActionInterval,\n\n ctor:function (duration, sx, sy) {\n this._scaleX = 1;\n this._scaleY = 1;\n this._startScaleX = 1;\n this._startScaleY = 1;\n this._endScaleX = 0;\n this._endScaleY = 0;\n this._deltaX = 0;\n this._deltaY = 0;\n sx !== undefined && cc.ScaleTo.prototype.initWithDuration.call(this, duration, sx, sy);\n },\n\n /*\n * Initializes the action.\n * @param {Number} duration\n * @param {Number} sx\n * @param {Number} [sy=]\n * @return {Boolean}\n */\n initWithDuration:function (duration, sx, sy) { //function overload here\n if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) {\n this._endScaleX = sx;\n this._endScaleY = (sy != null) ? sy : sx;\n return true;\n }\n return false;\n },\n\n clone:function () {\n var action = new cc.ScaleTo();\n this._cloneDecoration(action);\n action.initWithDuration(this._duration, this._endScaleX, this._endScaleY);\n return action;\n },\n\n startWithTarget:function (target) {\n cc.ActionInterval.prototype.startWithTarget.call(this, target);\n this._startScaleX = target.scaleX;\n this._startScaleY = target.scaleY;\n this._deltaX = this._endScaleX - this._startScaleX;\n this._deltaY = this._endScaleY - this._startScaleY;\n },\n\n update:function (dt) {\n dt = this._computeEaseTime(dt);\n if (this.target) {\n this.target.scaleX = this._startScaleX + this._deltaX * dt;\n\t this.target.scaleY = this._startScaleY + this._deltaY * dt;\n }\n }\n});\n/**\n * !#en Scales a Node object to a zoom factor by modifying it's scale property.\n * !#zh 将节点大小缩放到指定的倍数。\n * @method scaleTo\n * @param {Number} duration\n * @param {Number} sx scale parameter in X\n * @param {Number} [sy] scale parameter in Y, if Null equal to sx\n * @return {ActionInterval}\n * @example\n * // example\n * // It scales to 0.5 in both X and Y.\n * var actionTo = cc.scaleTo(2, 0.5);\n *\n * // It scales to 0.5 in x and 2 in Y\n * var actionTo = cc.scaleTo(2, 0.5, 2);\n */\ncc.scaleTo = function (duration, sx, sy) { //function overload\n return new cc.ScaleTo(duration, sx, sy);\n};\n\n\n/* Scales a Node object a zoom factor by modifying it's scale property.\n * Relative to its changes.\n * @class ScaleBy\n * @extends ScaleTo\n */\ncc.ScaleBy = cc.Class({\n name: 'cc.ScaleBy',\n extends: cc.ScaleTo,\n\n startWithTarget:function (target) {\n cc.ScaleTo.prototype.startWithTarget.call(this, target);\n this._deltaX = this._startScaleX * this._endScaleX - this._startScaleX;\n this._deltaY = this._startScaleY * this._endScaleY - this._startScaleY;\n },\n\n reverse:function () {\n var action = new cc.ScaleBy(this._duration, 1 / this._endScaleX, 1 / this._endScaleY);\n this._cloneDecoration(action);\n this._reverseEaseList(action);\n return action;\n },\n\n clone:function () {\n var action = new cc.ScaleBy();\n this._cloneDecoration(action);\n action.initWithDuration(this._duration, this._endScaleX, this._endScaleY);\n return action;\n }\n});\n/**\n * !#en\n * Scales a Node object a zoom factor by modifying it's scale property.\n * Relative to its changes.\n * !#zh 按指定的倍数缩放节点大小。\n * @method scaleBy\n * @param {Number} duration duration in seconds\n * @param {Number} sx sx scale parameter in X\n * @param {Number|Null} [sy=] sy scale parameter in Y, if Null equal to sx\n * @return {ActionInterval}\n * @example\n * // example without sy, it scales by 2 both in X and Y\n * var actionBy = cc.scaleBy(2, 2);\n *\n * //example with sy, it scales by 0.25 in X and 4.5 in Y\n * var actionBy2 = cc.scaleBy(2, 0.25, 4.5);\n */\ncc.scaleBy = function (duration, sx, sy) {\n return new cc.ScaleBy(duration, sx, sy);\n};\n\n/* Blinks a Node object by modifying it's visible property\n * @class Blink\n * @extends ActionInterval\n * @param {Number} duration duration in seconds\n * @param {Number} blinks blinks in times\n * @example\n * var action = new cc.Blink(2, 10);\n */\ncc.Blink = cc.Class({\n name: 'cc.Blink',\n extends: cc.ActionInterval,\n\n ctor:function (duration, blinks) {\n this._times = 0;\n this._originalState = false;\n\t\tblinks !== undefined && this.initWithDuration(duration, blinks);\n },\n\n /*\n * Initializes the action.\n * @param {Number} duration duration in seconds\n * @param {Number} blinks blinks in times\n * @return {Boolean}\n */\n initWithDuration:function (duration, blinks) {\n if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) {\n this._times = blinks;\n return true;\n }\n return false;\n },\n\n clone:function () {\n var action = new cc.Blink();\n this._cloneDecoration(action);\n action.initWithDuration(this._duration, this._times);\n return action;\n },\n\n update:function (dt) {\n dt = this._computeEaseTime(dt);\n if (this.target && !this.isDone()) {\n var slice = 1.0 / this._times;\n var m = dt % slice;\n this.target.opacity = (m > (slice / 2)) ? 255 : 0;\n }\n },\n\n startWithTarget:function (target) {\n cc.ActionInterval.prototype.startWithTarget.call(this, target);\n this._originalState = target.opacity;\n },\n\n stop:function () {\n this.target.opacity = this._originalState;\n cc.ActionInterval.prototype.stop.call(this);\n },\n\n reverse:function () {\n var action = new cc.Blink(this._duration, this._times);\n this._cloneDecoration(action);\n this._reverseEaseList(action);\n return action;\n }\n});\n/**\n * !#en Blinks a Node object by modifying it's visible property.\n * !#zh 闪烁(基于透明度)。\n * @method blink\n * @param {Number} duration duration in seconds\n * @param {Number} blinks blinks in times\n * @return {ActionInterval}\n * @example\n * // example\n * var action = cc.blink(2, 10);\n */\ncc.blink = function (duration, blinks) {\n return new cc.Blink(duration, blinks);\n};\n\n/* Fades an object that implements the cc.RGBAProtocol protocol. It modifies the opacity from the current value to a custom one.\n * @warning This action doesn't support \"reverse\"\n * @class FadeTo\n * @extends ActionInterval\n * @param {Number} duration\n * @param {Number} opacity 0-255, 0 is transparent\n * @example\n * var action = new cc.FadeTo(1.0, 0);\n */\ncc.FadeTo = cc.Class({\n name: 'cc.FadeTo',\n extends: cc.ActionInterval,\n\n ctor:function (duration, opacity) {\n this._toOpacity = 0;\n this._fromOpacity = 0;\n opacity !== undefined && cc.FadeTo.prototype.initWithDuration.call(this, duration, opacity);\n },\n\n /*\n * Initializes the action.\n * @param {Number} duration duration in seconds\n * @param {Number} opacity\n * @return {Boolean}\n */\n initWithDuration:function (duration, opacity) {\n if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) {\n this._toOpacity = opacity;\n return true;\n }\n return false;\n },\n\n clone:function () {\n var action = new cc.FadeTo();\n this._cloneDecoration(action);\n action.initWithDuration(this._duration, this._toOpacity);\n return action;\n },\n\n update:function (time) {\n time = this._computeEaseTime(time);\n var fromOpacity = this._fromOpacity !== undefined ? this._fromOpacity : 255;\n this.target.opacity = fromOpacity + (this._toOpacity - fromOpacity) * time;\n },\n\n startWithTarget:function (target) {\n cc.ActionInterval.prototype.startWithTarget.call(this, target);\n this._fromOpacity = target.opacity;\n }\n});\n\n/**\n * !#en\n * Fades an object that implements the cc.RGBAProtocol protocol.\n * It modifies the opacity from the current value to a custom one.\n * !#zh 修改透明度到指定值。\n * @method fadeTo\n * @param {Number} duration\n * @param {Number} opacity 0-255, 0 is transparent\n * @return {ActionInterval}\n * @example\n * // example\n * var action = cc.fadeTo(1.0, 0);\n */\ncc.fadeTo = function (duration, opacity) {\n return new cc.FadeTo(duration, opacity);\n};\n\n/* Fades In an object that implements the cc.RGBAProtocol protocol. It modifies the opacity from 0 to 255.
\n * The \"reverse\" of this action is FadeOut\n * @class FadeIn\n * @extends FadeTo\n * @param {Number} duration duration in seconds\n */\ncc.FadeIn = cc.Class({\n name: 'cc.FadeIn',\n extends: cc.FadeTo,\n\n ctor:function (duration) {\n if (duration == null)\n duration = 0;\n this._reverseAction = null;\n this.initWithDuration(duration, 255);\n },\n\n reverse:function () {\n var action = new cc.FadeOut();\n action.initWithDuration(this._duration, 0);\n this._cloneDecoration(action);\n this._reverseEaseList(action);\n return action;\n },\n\n clone:function () {\n var action = new cc.FadeIn();\n this._cloneDecoration(action);\n action.initWithDuration(this._duration, this._toOpacity);\n return action;\n },\n\n startWithTarget:function (target) {\n if(this._reverseAction)\n this._toOpacity = this._reverseAction._fromOpacity;\n cc.FadeTo.prototype.startWithTarget.call(this, target);\n }\n});\n\n/**\n * !#en Fades In an object that implements the cc.RGBAProtocol protocol. It modifies the opacity from 0 to 255.\n * !#zh 渐显效果。\n * @method fadeIn\n * @param {Number} duration duration in seconds\n * @return {ActionInterval}\n * @example\n * //example\n * var action = cc.fadeIn(1.0);\n */\ncc.fadeIn = function (duration) {\n return new cc.FadeIn(duration);\n};\n\n\n/* Fades Out an object that implements the cc.RGBAProtocol protocol. It modifies the opacity from 255 to 0.\n * The \"reverse\" of this action is FadeIn\n * @class FadeOut\n * @extends FadeTo\n * @param {Number} duration duration in seconds\n */\ncc.FadeOut = cc.Class({\n name: 'cc.FadeOut',\n extends: cc.FadeTo,\n\n ctor:function (duration) {\n if (duration == null)\n duration = 0;\n this._reverseAction = null;\n this.initWithDuration(duration, 0);\n },\n\n reverse:function () {\n var action = new cc.FadeIn();\n action._reverseAction = this;\n action.initWithDuration(this._duration, 255);\n this._cloneDecoration(action);\n this._reverseEaseList(action);\n return action;\n },\n\n clone:function () {\n var action = new cc.FadeOut();\n this._cloneDecoration(action);\n action.initWithDuration(this._duration, this._toOpacity);\n return action;\n }\n});\n\n/**\n * !#en Fades Out an object that implements the cc.RGBAProtocol protocol. It modifies the opacity from 255 to 0.\n * !#zh 渐隐效果。\n * @method fadeOut\n * @param {Number} d duration in seconds\n * @return {ActionInterval}\n * @example\n * // example\n * var action = cc.fadeOut(1.0);\n */\ncc.fadeOut = function (d) {\n return new cc.FadeOut(d);\n};\n\n/* Tints a Node that implements the cc.NodeRGB protocol from current tint to a custom one.\n * @warning This action doesn't support \"reverse\"\n * @class TintTo\n * @extends ActionInterval\n * @param {Number} duration\n * @param {Number} red 0-255\n * @param {Number} green 0-255\n * @param {Number} blue 0-255\n * @example\n * var action = new cc.TintTo(2, 255, 0, 255);\n */\ncc.TintTo = cc.Class({\n name: 'cc.TintTo',\n extends: cc.ActionInterval,\n\n ctor:function (duration, red, green, blue) {\n this._to = cc.color(0, 0, 0);\n this._from = cc.color(0, 0, 0);\n\n if (red instanceof cc.Color) {\n blue = red.b;\n green = red.g;\n red = red.r;\n }\n\n blue !== undefined && this.initWithDuration(duration, red, green, blue);\n },\n\n /*\n * Initializes the action.\n * @param {Number} duration\n * @param {Number} red 0-255\n * @param {Number} green 0-255\n * @param {Number} blue 0-255\n * @return {Boolean}\n */\n initWithDuration:function (duration, red, green, blue) {\n if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) {\n this._to = cc.color(red, green, blue);\n return true;\n }\n return false;\n },\n\n clone:function () {\n var action = new cc.TintTo();\n this._cloneDecoration(action);\n var locTo = this._to;\n action.initWithDuration(this._duration, locTo.r, locTo.g, locTo.b);\n return action;\n },\n\n startWithTarget:function (target) {\n cc.ActionInterval.prototype.startWithTarget.call(this, target);\n\n this._from = this.target.color;\n },\n\n update:function (dt) {\n dt = this._computeEaseTime(dt);\n var locFrom = this._from, locTo = this._to;\n if (locFrom) {\n this.target.color = cc.color(\n locFrom.r + (locTo.r - locFrom.r) * dt,\n locFrom.g + (locTo.g - locFrom.g) * dt,\n locFrom.b + (locTo.b - locFrom.b) * dt);\n }\n }\n});\n\n/**\n * !#en Tints a Node that implements the cc.NodeRGB protocol from current tint to a custom one.\n * !#zh 修改颜色到指定值。\n * @method tintTo\n * @param {Number} duration\n * @param {Number} red 0-255\n * @param {Number} green 0-255\n * @param {Number} blue 0-255\n * @return {ActionInterval}\n * @example\n * // example\n * var action = cc.tintTo(2, 255, 0, 255);\n */\ncc.tintTo = function (duration, red, green, blue) {\n return new cc.TintTo(duration, red, green, blue);\n};\n\n\n/* Tints a Node that implements the cc.NodeRGB protocol from current tint to a custom one.\n * Relative to their own color change.\n * @class TintBy\n * @extends ActionInterval\n * @param {Number} duration duration in seconds\n * @param {Number} deltaRed\n * @param {Number} deltaGreen\n * @param {Number} deltaBlue\n * @example\n * var action = new cc.TintBy(2, -127, -255, -127);\n */\ncc.TintBy = cc.Class({\n name: 'cc.TintBy',\n extends: cc.ActionInterval,\n\n ctor:function (duration, deltaRed, deltaGreen, deltaBlue) {\n this._deltaR = 0;\n this._deltaG = 0;\n this._deltaB = 0;\n this._fromR = 0;\n this._fromG = 0;\n this._fromB = 0;\n\t\tdeltaBlue !== undefined && this.initWithDuration(duration, deltaRed, deltaGreen, deltaBlue);\n },\n\n /*\n * Initializes the action.\n * @param {Number} duration\n * @param {Number} deltaRed 0-255\n * @param {Number} deltaGreen 0-255\n * @param {Number} deltaBlue 0-255\n * @return {Boolean}\n */\n initWithDuration:function (duration, deltaRed, deltaGreen, deltaBlue) {\n if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) {\n this._deltaR = deltaRed;\n this._deltaG = deltaGreen;\n this._deltaB = deltaBlue;\n return true;\n }\n return false;\n },\n\n clone:function () {\n var action = new cc.TintBy();\n this._cloneDecoration(action);\n action.initWithDuration(this._duration, this._deltaR, this._deltaG, this._deltaB);\n return action;\n },\n\n startWithTarget:function (target) {\n cc.ActionInterval.prototype.startWithTarget.call(this, target);\n\n var color = target.color;\n this._fromR = color.r;\n this._fromG = color.g;\n this._fromB = color.b;\n },\n\n update:function (dt) {\n dt = this._computeEaseTime(dt);\n\n this.target.color = cc.color(this._fromR + this._deltaR * dt,\n this._fromG + this._deltaG * dt,\n this._fromB + this._deltaB * dt);\n },\n\n reverse:function () {\n var action = new cc.TintBy(this._duration, -this._deltaR, -this._deltaG, -this._deltaB);\n this._cloneDecoration(action);\n this._reverseEaseList(action);\n return action;\n }\n});\n\n/**\n * !#en\n * Tints a Node that implements the cc.NodeRGB protocol from current tint to a custom one.\n * Relative to their own color change.\n * !#zh 按照指定的增量修改颜色。\n * @method tintBy\n * @param {Number} duration duration in seconds\n * @param {Number} deltaRed\n * @param {Number} deltaGreen\n * @param {Number} deltaBlue\n * @return {ActionInterval}\n * @example\n * // example\n * var action = cc.tintBy(2, -127, -255, -127);\n */\ncc.tintBy = function (duration, deltaRed, deltaGreen, deltaBlue) {\n return new cc.TintBy(duration, deltaRed, deltaGreen, deltaBlue);\n};\n\n/* Delays the action a certain amount of seconds\n * @class DelayTime\n * @extends ActionInterval\n */\ncc.DelayTime = cc.Class({\n name: 'cc.DelayTime',\n extends: cc.ActionInterval,\n\n update:function (dt) {},\n\n reverse:function () {\n var action = new cc.DelayTime(this._duration);\n this._cloneDecoration(action);\n this._reverseEaseList(action);\n return action;\n },\n\n clone:function () {\n var action = new cc.DelayTime();\n this._cloneDecoration(action);\n action.initWithDuration(this._duration);\n return action;\n }\n});\n\n/**\n * !#en Delays the action a certain amount of seconds.\n * !#zh 延迟指定的时间量。\n * @method delayTime\n * @param {Number} d duration in seconds\n * @return {ActionInterval}\n * @example\n * // example\n * var delay = cc.delayTime(1);\n */\ncc.delayTime = function (d) {\n return new cc.DelayTime(d);\n};\n\n/*\n *

\n * Executes an action in reverse order, from time=duration to time=0
\n * @warning Use this action carefully. This action is not sequenceable.
\n * Use it as the default \"reversed\" method of your own actions, but using it outside the \"reversed\"
\n * scope is not recommended.\n *

\n * @class ReverseTime\n * @extends ActionInterval\n * @param {FiniteTimeAction} action\n * @example\n * var reverse = new cc.ReverseTime(this);\n */\ncc.ReverseTime = cc.Class({\n name: 'cc.ReverseTime',\n extends: cc.ActionInterval,\n\n ctor:function (action) {\n this._other = null;\n\t\taction && this.initWithAction(action);\n },\n\n /*\n * @param {FiniteTimeAction} action\n * @return {Boolean}\n */\n initWithAction:function (action) {\n if (!action) {\n cc.errorID(1028);\n return false;\n }\n if (action === this._other) {\n cc.errorID(1029);\n return false;\n }\n\n if (cc.ActionInterval.prototype.initWithDuration.call(this, action._duration)) {\n // Don't leak if action is reused\n this._other = action;\n return true;\n }\n return false;\n },\n\n clone:function () {\n var action = new cc.ReverseTime();\n this._cloneDecoration(action);\n action.initWithAction(this._other.clone());\n return action;\n },\n\n startWithTarget:function (target) {\n cc.ActionInterval.prototype.startWithTarget.call(this, target);\n this._other.startWithTarget(target);\n },\n\n update:function (dt) {\n dt = this._computeEaseTime(dt);\n if (this._other)\n this._other.update(1 - dt);\n },\n\n reverse:function () {\n return this._other.clone();\n },\n\n stop:function () {\n this._other.stop();\n cc.Action.prototype.stop.call(this);\n }\n});\n\n/**\n * !#en Executes an action in reverse order, from time=duration to time=0.\n * !#zh 反转目标动作的时间轴。\n * @method reverseTime\n * @param {FiniteTimeAction} action\n * @return {ActionInterval}\n * @example\n * // example\n * var reverse = cc.reverseTime(this);\n */\ncc.reverseTime = function (action) {\n return new cc.ReverseTime(action);\n};\n\n/*\n *

\n * Overrides the target of an action so that it always runs on the target
\n * specified at action creation rather than the one specified by runAction.\n *

\n * @class TargetedAction\n * @extends ActionInterval\n * @param {Node} target\n * @param {FiniteTimeAction} action\n */\ncc.TargetedAction = cc.Class({\n name: 'cc.TargetedAction',\n extends: cc.ActionInterval,\n\n ctor: function (target, action) {\n this._action = null;\n this._forcedTarget = null;\n\t\taction && this.initWithTarget(target, action);\n },\n\n /*\n * Init an action with the specified action and forced target\n * @param {Node} target\n * @param {FiniteTimeAction} action\n * @return {Boolean}\n */\n initWithTarget:function (target, action) {\n if (this.initWithDuration(action._duration)) {\n this._forcedTarget = target;\n this._action = action;\n return true;\n }\n return false;\n },\n\n clone:function () {\n var action = new cc.TargetedAction();\n this._cloneDecoration(action);\n action.initWithTarget(this._forcedTarget, this._action.clone());\n return action;\n },\n\n startWithTarget:function (target) {\n cc.ActionInterval.prototype.startWithTarget.call(this, target);\n this._action.startWithTarget(this._forcedTarget);\n },\n\n stop:function () {\n this._action.stop();\n },\n\n update:function (dt) {\n dt = this._computeEaseTime(dt);\n this._action.update(dt);\n },\n\n /*\n * return the target that the action will be forced to run with\n * @return {Node}\n */\n getForcedTarget:function () {\n return this._forcedTarget;\n },\n\n /*\n * set the target that the action will be forced to run with\n * @param {Node} forcedTarget\n */\n setForcedTarget:function (forcedTarget) {\n if (this._forcedTarget !== forcedTarget)\n this._forcedTarget = forcedTarget;\n }\n});\n\n/**\n * !#en Create an action with the specified action and forced target.\n * !#zh 用已有动作和一个新的目标节点创建动作。\n * @method targetedAction\n * @param {Node} target\n * @param {FiniteTimeAction} action\n * @return {ActionInterval}\n */\ncc.targetedAction = function (target, action) {\n return new cc.TargetedAction(target, action);\n};\n","/****************************************************************************\n Copyright (c) 2008-2010 Ricardo Quesada\n Copyright (c) 2011-2012 cocos2d-x.org\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos2d-x.org\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nrequire('../core/platform/CCClass');\nvar js = require('../core/platform/js');\n\n/*\n * @class HashElement\n * @constructor\n * @private\n */\nvar HashElement = function () {\n this.actions = [];\n this.target = null; //ccobject\n this.actionIndex = 0;\n this.currentAction = null; //CCAction\n this.paused = false;\n this.lock = false;\n};\n\n/**\n * !#en\n * cc.ActionManager is a class that can manage actions.
\n * Normally you won't need to use this class directly. 99% of the cases you will use the CCNode interface,\n * which uses this class's singleton object.\n * But there are some cases where you might need to use this class.
\n * Examples:
\n * - When you want to run an action where the target is different from a CCNode.
\n * - When you want to pause / resume the actions
\n * !#zh\n * cc.ActionManager 是可以管理动作的单例类。
\n * 通常你并不需要直接使用这个类,99%的情况您将使用 CCNode 的接口。
\n * 但也有一些情况下,您可能需要使用这个类。
\n * 例如:\n * - 当你想要运行一个动作,但目标不是 CCNode 类型时。
\n * - 当你想要暂停/恢复动作时。
\n * @class ActionManager\n * @example {@link cocos2d/core/CCActionManager/ActionManager.js}\n */\ncc.ActionManager = function () {\n this._hashTargets = js.createMap(true);\n this._arrayTargets = [];\n this._currentTarget = null;\n cc.director._scheduler && cc.director._scheduler.enableForTarget(this);\n};\ncc.ActionManager.prototype = {\n constructor: cc.ActionManager,\n _elementPool: [],\n\n _searchElementByTarget:function (arr, target) {\n for (var k = 0; k < arr.length; k++) {\n if (target === arr[k].target)\n return arr[k];\n }\n return null;\n },\n\n _getElement: function (target, paused) {\n var element = this._elementPool.pop();\n if (!element) {\n element = new HashElement();\n }\n element.target = target;\n element.paused = !!paused;\n return element;\n },\n\n _putElement: function (element) {\n element.actions.length = 0;\n element.actionIndex = 0;\n element.currentAction = null;\n element.paused = false;\n element.target = null;\n element.lock = false;\n this._elementPool.push(element);\n },\n\n /**\n * !#en\n * Adds an action with a target.
\n * If the target is already present, then the action will be added to the existing target.\n * If the target is not present, a new instance of this target will be created either paused or not, and the action will be added to the newly created target.\n * When the target is paused, the queued actions won't be 'ticked'.\n * !#zh\n * 增加一个动作,同时还需要提供动作的目标对象,目标对象是否暂停作为参数。
\n * 如果目标已存在,动作将会被直接添加到现有的节点中。
\n * 如果目标不存在,将为这一目标创建一个新的实例,并将动作添加进去。
\n * 当目标状态的 paused 为 true,动作将不会被执行\n *\n * @method addAction\n * @param {Action} action\n * @param {Node} target\n * @param {Boolean} paused\n */\n addAction:function (action, target, paused) {\n if (!action || !target) {\n cc.errorID(1000);\n return;\n }\n\n //check if the action target already exists\n var element = this._hashTargets[target._id];\n //if doesn't exists, create a hashelement and push in mpTargets\n if (!element) {\n element = this._getElement(target, paused);\n this._hashTargets[target._id] = element;\n this._arrayTargets.push(element);\n }\n else if (!element.actions) {\n element.actions = [];\n }\n\n element.actions.push(action);\n action.startWithTarget(target);\n },\n\n /**\n * !#en Removes all actions from all the targets.\n * !#zh 移除所有对象的所有动作。\n * @method removeAllActions\n */\n removeAllActions:function () {\n var locTargets = this._arrayTargets;\n for (var i = 0; i < locTargets.length; i++) {\n var element = locTargets[i];\n if (element)\n this._putElement(element);\n }\n this._arrayTargets.length = 0;\n this._hashTargets = js.createMap(true);\n },\n /**\n * !#en\n * Removes all actions from a certain target.
\n * All the actions that belongs to the target will be removed.\n * !#zh\n * 移除指定对象上的所有动作。
\n * 属于该目标的所有的动作将被删除。\n * @method removeAllActionsFromTarget\n * @param {Node} target\n * @param {Boolean} forceDelete\n */\n removeAllActionsFromTarget:function (target, forceDelete) {\n // explicit null handling\n if (target == null)\n return;\n var element = this._hashTargets[target._id];\n if (element) {\n element.actions.length = 0;\n this._deleteHashElement(element);\n }\n },\n /**\n * !#en Removes an action given an action reference.\n * !#zh 移除指定的动作。\n * @method removeAction \n * @param {Action} action\n */\n removeAction:function (action) {\n // explicit null handling\n if (!action) {\n return;\n }\n var target = action.getOriginalTarget();\n var element = this._hashTargets[target._id];\n\n if (!element) {\n return;\n }\n\n for (var i = 0; i < element.actions.length; i++) {\n if (element.actions[i] === action) {\n element.actions.splice(i, 1);\n // update actionIndex in case we are in tick. looping over the actions\n if (element.actionIndex >= i)\n element.actionIndex--;\n break;\n }\n }\n },\n\n _removeActionByTag (tag, element, target) {\n for (var i = 0, l = element.actions.length; i < l; ++i) {\n var action = element.actions[i];\n if (action && action.getTag() === tag) {\n if (target && action.getOriginalTarget() !== target) {\n continue;\n }\n this._removeActionAtIndex(i, element);\n break;\n }\n }\n },\n\n /**\n * !#en Removes an action given its tag and the target.\n * !#zh 删除指定对象下特定标签的一个动作,将删除首个匹配到的动作。\n * @method removeActionByTag\n * @param {Number} tag\n * @param {Node} [target]\n */\n removeActionByTag:function (tag, target) {\n if(tag === cc.Action.TAG_INVALID)\n cc.logID(1002);\n\n let hashTargets = this._hashTargets;\n if (target) {\n var element = hashTargets[target._id];\n if (element) {\n this._removeActionByTag(tag, element, target);\n }\n }\n else {\n for (let name in hashTargets) {\n let element = hashTargets[name];\n this._removeActionByTag(tag, element);\n }\n }\n },\n\n /**\n * !#en Gets an action given its tag an a target.\n * !#zh 通过目标对象和标签获取一个动作。\n * @method getActionByTag\n * @param {Number} tag\n * @param {Node} target\n * @return {Action|Null} return the Action with the given tag on success\n */\n getActionByTag:function (tag, target) {\n if(tag === cc.Action.TAG_INVALID)\n cc.logID(1004);\n\n var element = this._hashTargets[target._id];\n if (element) {\n if (element.actions != null) {\n for (var i = 0; i < element.actions.length; ++i) {\n var action = element.actions[i];\n if (action && action.getTag() === tag)\n return action;\n }\n }\n cc.logID(1005, tag);\n }\n return null;\n },\n\n\n /**\n * !#en\n * Returns the numbers of actions that are running in a certain target.
\n * Composable actions are counted as 1 action.
\n * Example:
\n * - If you are running 1 Sequence of 7 actions, it will return 1.
\n * - If you are running 7 Sequences of 2 actions, it will return 7.\n * !#zh\n * 返回指定对象下所有正在运行的动作数量。
\n * 组合动作被算作一个动作。
\n * 例如:
\n * - 如果您正在运行 7 个动作组成的序列动作(Sequence),这个函数将返回 1。
\n * - 如果你正在运行 2 个序列动作(Sequence)和 5 个普通动作,这个函数将返回 7。
\n *\n * @method getNumberOfRunningActionsInTarget\n * @param {Node} target\n * @return {Number}\n */\n getNumberOfRunningActionsInTarget:function (target) {\n var element = this._hashTargets[target._id];\n if (element)\n return (element.actions) ? element.actions.length : 0;\n\n return 0;\n },\n /**\n * !#en Pauses the target: all running actions and newly added actions will be paused.\n * !#zh 暂停指定对象:所有正在运行的动作和新添加的动作都将会暂停。\n * @method pauseTarget\n * @param {Node} target\n */\n pauseTarget:function (target) {\n var element = this._hashTargets[target._id];\n if (element)\n element.paused = true;\n },\n /**\n * !#en Resumes the target. All queued actions will be resumed.\n * !#zh 让指定目标恢复运行。在执行序列中所有被暂停的动作将重新恢复运行。\n * @method resumeTarget\n * @param {Node} target\n */\n resumeTarget:function (target) {\n var element = this._hashTargets[target._id];\n if (element)\n element.paused = false;\n },\n\n /**\n * !#en Pauses all running actions, returning a list of targets whose actions were paused.\n * !#zh 暂停所有正在运行的动作,返回一个包含了那些动作被暂停了的目标对象的列表。\n * @method pauseAllRunningActions\n * @return {Array} a list of targets whose actions were paused.\n */\n pauseAllRunningActions:function(){\n var idsWithActions = [];\n var locTargets = this._arrayTargets;\n for(var i = 0; i< locTargets.length; i++){\n var element = locTargets[i];\n if(element && !element.paused){\n element.paused = true;\n idsWithActions.push(element.target);\n }\n }\n return idsWithActions;\n },\n\n /**\n * !#en Resume a set of targets (convenience function to reverse a pauseAllRunningActions or pauseTargets call).\n * !#zh 让一组指定对象恢复运行(用来逆转 pauseAllRunningActions 效果的便捷函数)。\n * @method resumeTargets\n * @param {Array} targetsToResume\n */\n resumeTargets:function(targetsToResume){\n if (!targetsToResume)\n return;\n\n for (var i = 0; i< targetsToResume.length; i++) {\n if(targetsToResume[i])\n this.resumeTarget(targetsToResume[i]);\n }\n },\n\n /**\n * !#en Pause a set of targets.\n * !#zh 暂停一组指定对象。\n * @method pauseTargets\n * @param {Array} targetsToPause\n */\n pauseTargets:function(targetsToPause){\n if (!targetsToPause)\n return;\n\n for (var i = 0; i< targetsToPause.length; i++) {\n if (targetsToPause[i])\n this.pauseTarget(targetsToPause[i]);\n }\n },\n\n /**\n * !#en\n * purges the shared action manager. It releases the retained instance.
\n * because it uses this, so it can not be static.\n * !#zh\n * 清除共用的动作管理器。它释放了持有的实例。
\n * 因为它使用 this,因此它不能是静态的。\n * @method purgeSharedManager\n */\n purgeSharedManager:function () {\n cc.director.getScheduler().unscheduleUpdate(this);\n },\n\n //protected\n _removeActionAtIndex:function (index, element) {\n var action = element.actions[index];\n\n element.actions.splice(index, 1);\n\n // update actionIndex in case we are in tick. looping over the actions\n if (element.actionIndex >= index)\n element.actionIndex--;\n\n if (element.actions.length === 0) {\n this._deleteHashElement(element);\n }\n },\n\n _deleteHashElement:function (element) {\n var ret = false;\n if (element && !element.lock) {\n if (this._hashTargets[element.target._id]) {\n delete this._hashTargets[element.target._id];\n var targets = this._arrayTargets;\n for (var i = 0, l = targets.length; i < l; i++) {\n if (targets[i] === element) {\n targets.splice(i, 1);\n break;\n }\n }\n this._putElement(element);\n ret = true;\n }\n }\n return ret;\n },\n\n /**\n * !#en The ActionManager update。\n * !#zh ActionManager 主循环。\n * @method update\n * @param {Number} dt delta time in seconds\n */\n update:function (dt) {\n var locTargets = this._arrayTargets , locCurrTarget;\n for (var elt = 0; elt < locTargets.length; elt++) {\n this._currentTarget = locTargets[elt];\n locCurrTarget = this._currentTarget;\n if (!locCurrTarget.paused && locCurrTarget.actions) {\n locCurrTarget.lock = true;\n // The 'actions' CCMutableArray may change while inside this loop.\n for (locCurrTarget.actionIndex = 0; locCurrTarget.actionIndex < locCurrTarget.actions.length; locCurrTarget.actionIndex++) {\n locCurrTarget.currentAction = locCurrTarget.actions[locCurrTarget.actionIndex];\n if (!locCurrTarget.currentAction)\n continue;\n\n //use for speed\n locCurrTarget.currentAction.step(dt * ( locCurrTarget.currentAction._speedMethod ? locCurrTarget.currentAction._speed : 1 ) );\n \n if (locCurrTarget.currentAction && locCurrTarget.currentAction.isDone()) {\n locCurrTarget.currentAction.stop();\n var action = locCurrTarget.currentAction;\n // Make currentAction nil to prevent removeAction from salvaging it.\n locCurrTarget.currentAction = null;\n this.removeAction(action);\n }\n\n locCurrTarget.currentAction = null;\n }\n locCurrTarget.lock = false;\n }\n // only delete currentTarget if no actions were scheduled during the cycle (issue #481)\n if (locCurrTarget.actions.length === 0) {\n this._deleteHashElement(locCurrTarget) && elt--;\n }\n }\n }\n};\n\nif (CC_TEST) {\n cc.ActionManager.prototype.isTargetPaused_TEST = function (target) {\n var element = this._hashTargets[target._id];\n return element.paused;\n };\n}\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nrequire('./CCActionManager');\nrequire('./CCAction');\nrequire('./CCActionInterval');\nrequire('./CCActionInstant');\nrequire('./CCActionEase');\nrequire('./CCActionCatmullRom');\nrequire('./tween');\n","import { bezier } from '../animation/bezier';\n\nlet _tweenID = 0;\n\nlet TweenAction = cc.Class({\n name: 'cc.TweenAction',\n extends: cc.ActionInterval,\n\n ctor (duration, props, opts) {\n this._opts = opts = opts || Object.create(null);\n this._props = Object.create(null);\n\n // global easing or progress used for this action\n opts.progress = opts.progress || this.progress;\n if (opts.easing && typeof opts.easing === 'string') {\n let easingName = opts.easing;\n opts.easing = cc.easing[easingName];\n !opts.easing && cc.warnID(1031, easingName);\n }\n\n let relative = this._opts.relative;\n\n for (let name in props) {\n let value = props[name];\n\n // property may have custom easing or progress function\n let easing, progress;\n if (value.value !== undefined && (value.easing || value.progress)) {\n if (typeof value.easing === 'string') {\n easing = cc.easing[value.easing];\n !easing && cc.warnID(1031, value.easing);\n }\n else {\n easing = value.easing;\n }\n progress = value.progress;\n value = value.value;\n }\n\n let isNumber = typeof value === 'number';\n if (!isNumber && (!value.lerp || (relative && !value.add && !value.mul) || !value.clone)) {\n cc.warn(`Can not animate ${name} property, because it do not have [lerp, (add|mul), clone] function.`);\n continue;\n }\n\n let prop = Object.create(null);\n prop.value = value;\n prop.easing = easing;\n prop.progress = progress;\n this._props[name] = prop;\n }\n\n this._originProps = props;\n this.initWithDuration(duration);\n },\n\n clone () {\n var action = new TweenAction(this._duration, this._originProps, this._opts);\n this._cloneDecoration(action);\n return action;\n },\n\n startWithTarget (target) {\n cc.ActionInterval.prototype.startWithTarget.call(this, target);\n\n let relative = !!this._opts.relative;\n let props = this._props;\n for (let name in props) {\n let value = target[name];\n let prop = props[name];\n\n if (typeof value === 'number') {\n prop.start = value;\n prop.current = value;\n prop.end = relative ? value + prop.value : prop.value;\n }\n else {\n prop.start = value.clone();\n prop.current = value.clone();\n prop.end = relative ? (value.add || value.mul).call(value, prop.value) : prop.value;\n }\n }\n },\n\n update (t) {\n let opts = this._opts;\n let easingTime = t;\n if (opts.easing) easingTime = opts.easing(t);\n\n let target = this.target;\n if (!target) return;\n\n let props = this._props;\n let progress = opts.progress;\n for (let name in props) {\n let prop = props[name];\n let time = prop.easing ? prop.easing(t) : easingTime;\n let current = prop.current = (prop.progress || progress)(prop.start, prop.end, prop.current, time);\n target[name] = current;\n }\n\n let onUpdate = opts.onUpdate;\n if (onUpdate) {\n onUpdate(target, t)\n }\n },\n\n progress (start, end, current, t) {\n if (typeof start === 'number') {\n current = start + (end - start) * t;\n }\n else {\n start.lerp(end, t, current);\n }\n return current;\n }\n});\n\nlet SetAction = cc.Class({\n name: 'cc.SetAction',\n extends: cc.ActionInstant,\n\n ctor (props) {\n this._props = {};\n props !== undefined && this.init(props);\n },\n\n init (props) {\n for (let name in props) {\n this._props[name] = props[name];\n }\n return true;\n },\n\n update () {\n let props = this._props;\n let target = this.target;\n for (let name in props) {\n target[name] = props[name];\n }\n },\n\n clone () {\n var action = new SetAction();\n action.init(this._props);\n return action;\n }\n});\n\n\n\n/**\n * !#en\n * Tween provide a simple and flexible way to create action. Tween's api is more flexible than `cc.Action`:\n * - Support creating an action sequence in chained api.\n * - Support animate any objects' any properties, not limited to node's properties. By contrast, `cc.Action` needs to create a new action class to support new node property.\n * - Support working with `cc.Action`.\n * - Support easing and progress function.\n * !#zh\n * Tween 提供了一个简单灵活的方法来创建 action。相对于 Cocos 传统的 `cc.Action`,`cc.Tween` 在创建动画上要灵活非常多:\n * - 支持以链式结构的方式创建一个动画序列。\n * - 支持对任意对象的任意属性进行缓动,不再局限于节点上的属性,而 `cc.Action` 添加一个属性的支持时还需要添加一个新的 action 类型。\n * - 支持与 `cc.Action` 混用。\n * - 支持设置 {{#crossLink \"Easing\"}}{{/crossLink}} 或者 progress 函数。\n * @class Tween\n * @example\n * cc.tween(node)\n * .to(1, {scale: 2, position: cc.v3(100, 100, 100)})\n * .call(() => { console.log('This is a callback'); })\n * .by(1, {scale: 3, position: cc.v3(200, 200, 200)}, {easing: 'sineOutIn'})\n * .start(cc.find('Canvas/cocos'));\n * @typescript Tween\n */\nfunction Tween (target) {\n this._actions = [];\n this._finalAction = null;\n this._target = target;\n this._tag = cc.Action.TAG_INVALID;\n}\n\n/**\n * @method constructor\n * @param {Object} [target]\n */\n\n/**\n * !#en Stop all tweens\n * !#zh 停止所有缓动\n * @method stopAll\n * @static\n */\nTween.stopAll = function () {\n cc.director.getActionManager().removeAllActions();\n}\n/**\n * !#en Stop all tweens by tag\n * !#zh 停止所有指定标签的缓动\n * @method stopAllByTag\n * @static\n * @param {number} tag\n */\nTween.stopAllByTag = function (tag) {\n cc.director.getActionManager().removeActionByTag(tag);\n}\n/**\n * !#en Stop all tweens by target\n * !#zh 停止所有指定对象的缓动\n * @method stopAllByTarget\n * @static\n * @param {Object} target\n */\nTween.stopAllByTarget = function (target) {\n cc.director.getActionManager().removeAllActionsFromTarget(target);\n}\n\n/**\n * !#en\n * Insert an action or tween to this sequence\n * !#zh\n * 插入一个 action 或者 tween 到队列中\n * @method then \n * @param {Action|Tween} other\n * @return {Tween}\n * @typescript then(other: Action|Tween): Tween\n */\nTween.prototype.then = function (other) {\n if (other instanceof cc.Action) {\n this._actions.push(other.clone());\n }\n else {\n this._actions.push(other._union());\n }\n return this;\n};\n\n\n/**\n * !#en\n * Set tween target\n * !#zh\n * 设置 tween 的 target\n * @method target\n * @param {Object} target\n * @return {Tween}\n * @typescript target(target: any): Tween\n */\nTween.prototype.target = function (target) {\n this._target = target;\n return this;\n};\n\n/**\n * !#en\n * Start this tween\n * !#zh\n * 运行当前 tween\n * @method start\n * @return {Tween}\n * @typescript start(): Tween\n */\nTween.prototype.start = function () {\n let target = this._target;\n if (!target) {\n cc.warn('Please set target to tween first');\n return this;\n }\n if (target instanceof cc.Object && !target.isValid) {\n return;\n }\n\n if (this._finalAction) {\n cc.director.getActionManager().removeAction(this._finalAction);\n }\n this._finalAction = this._union();\n\n if (target._id === undefined) {\n target._id = ++_tweenID;\n }\n\n this._finalAction.setTag(this._tag);\n cc.director.getActionManager().addAction(this._finalAction, target, false);\n return this;\n};\n\n/**\n * !#en\n * Stop this tween\n * !#zh\n * 停止当前 tween\n * @method stop\n * @return {Tween}\n * @typescript stop(): Tween\n */\nTween.prototype.stop = function () {\n if (this._finalAction) {\n cc.director.getActionManager().removeAction(this._finalAction);\n }\n return this;\n};\n\n\n/**\n * !#en Sets tween tag\n * !#zh 设置缓动的标签\n * @method tag\n * @param {number} tag\n * @return {Tween}\n * @typescript tag(tag: number): Tween\n */\nTween.prototype.tag = function (tag) {\n this._tag = tag;\n return this;\n};\n\n\n/**\n * !#en\n * Clone a tween\n * !#zh\n * 克隆当前 tween\n * @method clone\n * @param {Object} [target]\n * @return {Tween}\n * @typescript clone(target?: any): Tween\n */\nTween.prototype.clone = function (target) {\n let action = this._union();\n return cc.tween(target).then(action.clone());\n};\n\n/**\n * !#en\n * Integrate all previous actions to an action.\n * !#zh\n * 将之前所有的 action 整合为一个 action。\n * @method union\n * @return {Tween}\n * @typescritp union(): Tween\n */\nTween.prototype.union = function () {\n let action = this._union();\n this._actions.length = 0;\n this._actions.push(action);\n return this;\n};\n\nTween.prototype._union = function () {\n let actions = this._actions;\n\n if (actions.length === 1) {\n actions = actions[0];\n }\n else {\n actions = cc.sequence(actions);\n }\n\n return actions;\n};\n\nObject.assign(Tween.prototype, {\n /**\n * !#en Sets target's position property according to the bezier curve.\n * !#zh 按照贝塞尔路径设置目标的 position 属性。\n * @method bezierTo\n * @param {number} duration\n * @param {cc.Vec2} c1\n * @param {cc.Vec2} c2\n * @param {cc.Vec2} to\n * @return {Tween}\n * @typescript bezierTo(duration: number, c1: Vec2, c2: Vec2, to: Vec2): Tween\n */\n bezierTo (duration, c1, c2, to, opts) {\n let c0x = c1.x, c0y = c1.y,\n c1x = c2.x, c1y = c2.y;\n opts = opts || Object.create(null);\n opts.progress = function (start, end, current, t) {\n current.x = bezier(start.x, c0x, c1x, end.x, t);\n current.y = bezier(start.y, c0y, c1y, end.y, t);\n return current;\n }\n return this.to(duration, { position: to }, opts);\n },\n\n /**\n * !#en Sets target's position property according to the bezier curve.\n * !#zh 按照贝塞尔路径设置目标的 position 属性。\n * @method bezierBy\n * @param {number} duration\n * @param {cc.Vec2} c1\n * @param {cc.Vec2} c2\n * @param {cc.Vec2} to\n * @return {Tween}\n * @typescript bezierBy(duration: number, c1: Vec2, c2: Vec2, to: Vec2): Tween\n */\n bezierBy (duration, c1, c2, to, opts) {\n let c0x = c1.x, c0y = c1.y,\n c1x = c2.x, c1y = c2.y;\n opts = opts || Object.create(null);\n opts.progress = function (start, end, current, t) {\n let sx = start.x, sy = start.y;\n current.x = bezier(sx, c0x + sx, c1x + sx, end.x, t);\n current.y = bezier(sy, c0y + sy, c1y + sy, end.y, t);\n return current;\n }\n return this.by(duration, { position: to }, opts);\n },\n\n /**\n * !#en Flips target's scaleX\n * !#zh 翻转目标的 scaleX 属性\n * @method flipX\n * @return {Tween}\n * @typescript flipX(): Tween\n */\n flipX () {\n return this.call(() => { this._target.scaleX *= -1; }, this);\n \n },\n /**\n * !#en Flips target's scaleY\n * !#zh 翻转目标的 scaleY 属性\n * @method flipY\n * @return {Tween}\n * @typescript flipY(): Tween\n */\n flipY () {\n return this.call(() => { this._target.scaleY *= -1; }, this);\n },\n\n /**\n * !#en Blinks target by set target's opacity property\n * !#zh 通过设置目标的 opacity 属性达到闪烁效果\n * @method blink\n * @param {number} duration\n * @param {number} times\n * @param {Object} [opts]\n * @param {Function} [opts.progress]\n * @param {Function|String} [opts.easing]\n * @return {Tween}\n * @typescript blink(duration: number, times: number, opts?: {progress?: Function; easing?: Function|string; }): Tween\n */\n blink (duration, times, opts) {\n var slice = 1.0 / times;\n opts = opts || Object.create(null);\n opts.progress = function (start, end, current, t) {\n if (t >= 1) {\n return start;\n }\n else {\n var m = t % slice;\n return (m > (slice / 2)) ? 255 : 0;\n }\n };\n return this.to(duration, { opacity: 1 }, opts);\n },\n})\n\nlet tmp_args = [];\n\nfunction wrapAction (action) {\n return function () {\n tmp_args.length = 0;\n for (let l = arguments.length, i = 0; i < l; i++) {\n let arg = tmp_args[i] = arguments[i];\n if (arg instanceof Tween) {\n tmp_args[i] = arg._union();\n }\n }\n\n return action.apply(this, tmp_args);\n };\n}\n\nlet actions = {\n /**\n * !#en\n * Add an action which calculate with absolute value\n * !#zh\n * 添加一个对属性进行绝对值计算的 action\n * @method to\n * @param {Number} duration\n * @param {Object} props - {scale: 2, position: cc.v3(100, 100, 100)}\n * @param {Object} [opts]\n * @param {Function} [opts.progress]\n * @param {Function|String} [opts.easing]\n * @return {Tween}\n * @typescript\n * to>(duration: number, props: ConstructorType, opts?: OPTS): Tween\n */\n to (duration, props, opts) {\n opts = opts || Object.create(null);\n opts.relative = false;\n return new TweenAction(duration, props, opts);\n },\n\n /**\n * !#en\n * Add an action which calculate with relative value\n * !#zh\n * 添加一个对属性进行相对值计算的 action\n * @method by\n * @param {Number} duration\n * @param {Object} props - {scale: 2, position: cc.v3(100, 100, 100)}\n * @param {Object} [opts]\n * @param {Function} [opts.progress]\n * @param {Function|String} [opts.easing]\n * @return {Tween}\n * @typescript\n * by>(duration: number, props: ConstructorType, opts?: OPTS): Tween\n */\n by (duration, props, opts) {\n opts = opts || Object.create(null);\n opts.relative = true;\n return new TweenAction(duration, props, opts);\n },\n\n /**\n * !#en\n * Directly set target properties\n * !#zh\n * 直接设置 target 的属性\n * @method set\n * @param {Object} props\n * @return {Tween}\n * @typescript\n * set (props: ConstructorType) : Tween\n */\n set (props) {\n return new SetAction(props);\n },\n\n /**\n * !#en\n * Add an delay action\n * !#zh\n * 添加一个延时 action\n * @method delay\n * @param {Number} duration\n * @return {Tween}\n * @typescript delay(duration: number): Tween\n */\n delay: cc.delayTime,\n /**\n * !#en\n * Add an callback action\n * !#zh\n * 添加一个回调 action\n * @method call\n * @param {Function} callback\n * @param {object} [selectTarget]\n * @return {Tween}\n * @typescript call(callback: Function, selectTarget?: object): Tween\n */\n call: cc.callFunc,\n /**\n * !#en\n * Add an hide action\n * !#zh\n * 添加一个隐藏 action\n * @method hide\n * @return {Tween}\n * @typescript hide(): Tween\n */\n hide: cc.hide,\n /**\n * !#en\n * Add an show action\n * !#zh\n * 添加一个显示 action\n * @method show\n * @return {Tween}\n * @typescript show(): Tween\n */\n show: cc.show,\n /**\n * !#en\n * Add an removeSelf action\n * !#zh\n * 添加一个移除自己 action\n * @method removeSelf\n * @return {Tween}\n * @typescript removeSelf(): Tween\n */\n removeSelf: cc.removeSelf,\n /**\n * !#en\n * Add an sequence action\n * !#zh\n * 添加一个队列 action\n * @method sequence\n * @param {Action|Tween} action\n * @param {Action|Tween} ...actions\n * @return {Tween}\n * @typescript sequence(action: Action|Tween, ...actions: (Action|Tween)[]): Tween\n */\n sequence: wrapAction(cc.sequence),\n /**\n * !#en\n * Add an parallel action\n * !#zh\n * 添加一个并行 action\n * @method parallel\n * @param {Action|Tween} action\n * @param {Action|Tween} ...actions\n * @return {Tween}\n * @typescript parallel(action: Action|Tween, ...actions: (Action|Tween)[]): Tween\n */\n parallel: wrapAction(cc.spawn)\n};\n\n// these action will use previous action as their parameters\nlet previousAsInputActions = {\n /**\n * !#en\n * Add an repeat action. This action will integrate before actions to a sequence action as their parameters.\n * !#zh\n * 添加一个重复 action,这个 action 会将前一个动作作为他的参数。\n * @method repeat\n * @param {Number} repeatTimes\n * @param {Action | Tween} [action]\n * @return {Tween}\n * @typescript repeat(repeatTimes: number, action?: Action|Tween): Tween\n */\n repeat: cc.repeat,\n /**\n * !#en\n * Add an repeat forever action. This action will integrate before actions to a sequence action as their parameters.\n * !#zh\n * 添加一个永久重复 action,这个 action 会将前一个动作作为他的参数。\n * @method repeatForever\n * @param {Action | Tween} [action]\n * @return {Tween}\n * @typescript repeatForever(action?: Action|Tween): Tween\n */\n repeatForever: function (action) {\n // TODO: fixed with cc.repeatForever\n return cc.repeat(action, 10e8);\n },\n /**\n * !#en\n * Add an reverse time action. This action will integrate before actions to a sequence action as their parameters.\n * !#zh\n * 添加一个倒置时间 action,这个 action 会将前一个动作作为他的参数。\n * @method reverseTime\n * @param {Action | Tween} [action]\n * @return {Tween}\n * @typescript reverseTime(action?: Action|Tween): Tween\n */\n reverseTime: cc.reverseTime,\n};\n\n\nlet keys = Object.keys(actions);\nfor (let i = 0; i < keys.length; i++) {\n let key = keys[i];\n Tween.prototype[key] = function () {\n let action = actions[key].apply(this, arguments);\n this._actions.push(action);\n return this;\n };\n}\n\nkeys = Object.keys(previousAsInputActions);\nfor (let i = 0; i < keys.length; i++) {\n let key = keys[i];\n Tween.prototype[key] = function () {\n\n let actions = this._actions;\n let action = arguments[arguments.length - 1];\n let length = arguments.length - 1;\n\n if (action instanceof cc.Tween) {\n action = action._union();\n }\n else if (!(action instanceof cc.Action)) {\n action = actions[actions.length - 1];\n actions.length -= 1;\n length += 1;\n }\n\n let args = [action];\n for (let i = 0; i < length; i++) {\n args.push(arguments[i]);\n }\n\n action = previousAsInputActions[key].apply(this, args);\n actions.push(action);\n\n return this;\n };\n}\n\n/**\n * @module cc\n */\n\n/**\n * @method tween\n * @param {Object} [target] - the target to animate\n * @return {Tween}\n * @typescript\n * tween (target?: T) : Tween\n */\ncc.tween = function (target) {\n return new Tween(target);\n};\n\ncc.Tween = Tween;\n \n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst js = cc.js;\nconst Playable = require('./playable');\nconst { EventAnimCurve, EventInfo } = require('./animation-curves');\nconst WrapModeMask = require('./types').WrapModeMask;\nconst binarySearch = require('../core/utils/binary-search').binarySearchEpsilon;\n\n// The actual animator for Animation Component\n\nfunction AnimationAnimator (target, animation) {\n Playable.call(this);\n this.target = target;\n this.animation = animation;\n\n this._anims = new js.array.MutableForwardIterator([]);\n}\njs.extend(AnimationAnimator, Playable);\nlet p = AnimationAnimator.prototype;\n\np.playState = function (state, startTime) {\n if (!state.clip) {\n return;\n }\n\n if (!state.curveLoaded) {\n initClipData(this.target, state);\n }\n\n state.animator = this;\n state.play();\n\n if (typeof startTime === 'number') {\n state.setTime(startTime);\n }\n\n this.play();\n};\n\np.stopStatesExcept = function (state) {\n let iterator = this._anims;\n let array = iterator.array;\n for (iterator.i = 0; iterator.i < array.length; ++iterator.i) {\n let anim = array[iterator.i];\n if (anim === state) {\n continue;\n }\n\n this.stopState(anim);\n }\n};\n\np.addAnimation = function (anim) {\n let index = this._anims.array.indexOf(anim);\n if (index === -1) {\n this._anims.push(anim);\n }\n\n anim._setEventTarget(this.animation);\n};\n\np.removeAnimation = function (anim) {\n let index = this._anims.array.indexOf(anim);\n if (index >= 0) {\n this._anims.fastRemoveAt(index);\n\n if (this._anims.array.length === 0) {\n this.stop();\n }\n }\n else {\n cc.errorID(3907);\n }\n\n anim.animator = null;\n};\n\np.sample = function () {\n let iterator = this._anims;\n let array = iterator.array;\n for (iterator.i = 0; iterator.i < array.length; ++iterator.i) {\n let anim = array[iterator.i];\n anim.sample();\n }\n};\n\np.stopState = function (state) {\n if (state) {\n state.stop();\n }\n};\n\np.pauseState = function (state) {\n if (state) {\n state.pause();\n }\n};\n\np.resumeState = function (state) {\n if (state) {\n state.resume();\n }\n\n if (this.isPaused) {\n this.resume();\n }\n};\n\np.setStateTime = function (state, time) {\n if (time !== undefined) {\n if (state) {\n state.setTime(time);\n state.sample();\n } \n }\n else {\n time = state;\n\n let array = this._anims.array;\n for (let i = 0; i < array.length; ++i) {\n let anim = array[i];\n anim.setTime(time);\n anim.sample();\n }\n }\n};\n\np.onStop = function () {\n let iterator = this._anims;\n let array = iterator.array;\n for (iterator.i = 0; iterator.i < array.length; ++iterator.i) {\n let anim = array[iterator.i];\n anim.stop();\n }\n};\n\np.onPause = function () {\n let array = this._anims.array;\n for (let i = 0; i < array.length; ++i) {\n let anim = array[i];\n anim.pause();\n\n // need to unbind animator to anim, or it maybe cannot be gc.\n anim.animator = null;\n }\n};\n\np.onResume = function () {\n let array = this._anims.array;\n for (let i = 0; i < array.length; ++i) {\n let anim = array[i];\n \n // rebind animator to anim\n anim.animator = this;\n\n anim.resume();\n }\n};\n\np._reloadClip = function (state) {\n initClipData(this.target, state);\n};\n\n// 这个方法应该是 SampledAnimCurve 才能用\nfunction createBatchedProperty (propPath, firstDotIndex, mainValue, animValue) {\n mainValue = mainValue.clone();\n let nextValue = mainValue;\n let leftIndex = firstDotIndex + 1;\n let rightIndex = propPath.indexOf('.', leftIndex);\n\n // scan property path\n while (rightIndex !== -1) {\n let nextName = propPath.slice(leftIndex, rightIndex);\n nextValue = nextValue[nextName];\n leftIndex = rightIndex + 1;\n rightIndex = propPath.indexOf('.', leftIndex);\n }\n let lastPropName = propPath.slice(leftIndex);\n nextValue[lastPropName] = animValue;\n\n return mainValue;\n}\n\nif (CC_TEST) {\n cc._Test.createBatchedProperty = createBatchedProperty;\n}\n\n\nfunction initClipData (root, state) {\n let clip = state.clip;\n\n state.duration = clip.duration;\n state.speed = clip.speed;\n state.wrapMode = clip.wrapMode;\n state.frameRate = clip.sample;\n\n if ((state.wrapMode & WrapModeMask.Loop) === WrapModeMask.Loop) {\n state.repeatCount = Infinity;\n }\n else {\n state.repeatCount = 1;\n }\n\n let curves = state.curves = clip.createCurves(state, root);\n\n // events curve\n\n let events = clip.events;\n\n if (!CC_EDITOR && events) {\n let curve;\n\n for (let i = 0, l = events.length; i < l; i++) {\n if (!curve) {\n curve = new EventAnimCurve();\n curve.target = root;\n curves.push(curve);\n }\n\n let eventData = events[i];\n let ratio = eventData.frame / state.duration;\n\n let eventInfo;\n let index = binarySearch(curve.ratios, ratio);\n if (index >= 0) {\n eventInfo = curve.events[index];\n }\n else {\n eventInfo = new EventInfo();\n curve.ratios.push(ratio);\n curve.events.push(eventInfo);\n }\n\n eventInfo.add(eventData.func, eventData.params);\n }\n }\n}\n\nif (CC_TEST) {\n cc._Test.initClipData = initClipData;\n}\n\n\nmodule.exports = AnimationAnimator;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst WrapMode = require('./types').WrapMode;\nconst { DynamicAnimCurve, quickFindIndex } = require('./animation-curves');\nconst sampleMotionPaths = require('./motion-path-helper').sampleMotionPaths;\nconst binarySearch = require('../core/utils/binary-search').binarySearchEpsilon;\n\n/**\n * !#en Class for animation data handling.\n * !#zh 动画剪辑,用于存储动画数据。\n * @class AnimationClip\n * @extends Asset\n */\nvar AnimationClip = cc.Class({\n name: 'cc.AnimationClip',\n extends: cc.Asset,\n\n properties: {\n _duration: {\n default: 0,\n type: cc.Float,\n },\n\n /**\n * !#en Duration of this animation.\n * !#zh 动画的持续时间。\n * @property duration\n * @type {Number}\n */\n duration: {\n get: function () { return this._duration; },\n },\n\n /**\n * !#en FrameRate of this animation.\n * !#zh 动画的帧速率。\n * @property sample\n * @type {Number}\n */\n sample: {\n default: 60,\n },\n\n /**\n * !#en Speed of this animation.\n * !#zh 动画的播放速度。\n * @property speed\n * @type {Number}\n */\n speed: {\n default: 1\n },\n\n /**\n * !#en WrapMode of this animation.\n * !#zh 动画的循环模式。\n * @property wrapMode\n * @type {WrapMode}\n */\n wrapMode: {\n default: WrapMode.Normal\n },\n\n /**\n * !#en Curve data.\n * !#zh 曲线数据。\n * @property curveData\n * @type {Object}\n * @example {@link cocos2d/core/animation-clip/curve-data.js}\n */\n curveData: {\n default: {},\n visible: false,\n },\n\n /**\n * !#en Event data.\n * !#zh 事件数据。\n * @property events\n * @type {Object[]}\n * @example {@link cocos2d/core/animation-clip/event-data.js}\n * @typescript events: {frame: number, func: string, params: string[]}[]\n */\n events: {\n default: [],\n visible: false,\n }\n },\n\n statics: {\n /**\n * !#en Crate clip with a set of sprite frames\n * !#zh 使用一组序列帧图片来创建动画剪辑\n * @method createWithSpriteFrames\n * @param {[SpriteFrame]} spriteFrames\n * @param {Number} sample\n * @return {AnimationClip}\n * @static\n * @example\n *\n * var clip = cc.AnimationClip.createWithSpriteFrames(spriteFrames, 10);\n *\n */\n createWithSpriteFrames: function (spriteFrames, sample) {\n if (!Array.isArray(spriteFrames)) {\n cc.errorID(3905);\n return null;\n }\n\n var clip = new AnimationClip();\n clip.sample = sample || clip.sample;\n\n clip._duration = spriteFrames.length / clip.sample;\n\n var frames = [];\n var step = 1 / clip.sample;\n\n for (var i = 0, l = spriteFrames.length; i < l; i++) {\n frames[i] = { frame: (i * step), value: spriteFrames[i] };\n }\n\n clip.curveData = {\n comps: {\n // component\n 'cc.Sprite': {\n // component properties\n 'spriteFrame': frames\n }\n }\n };\n\n return clip;\n }\n },\n\n onLoad () {\n this._duration = Number.parseFloat(this.duration);\n this.speed = Number.parseFloat(this.speed);\n this.wrapMode = Number.parseInt(this.wrapMode);\n this.frameRate = Number.parseFloat(this.sample);\n },\n\n createPropCurve (target, propPath, keyframes) {\n let motionPaths = [];\n let isMotionPathProp = target instanceof cc.Node && propPath === 'position';\n\n let curve = new DynamicAnimCurve();\n\n // 缓存目标对象,所以 Component 必须一开始都创建好并且不能运行时动态替换……\n curve.target = target;\n curve.prop = propPath;\n\n // for each keyframes\n for (let i = 0, l = keyframes.length; i < l; i++) {\n let keyframe = keyframes[i];\n let ratio = keyframe.frame / this.duration;\n curve.ratios.push(ratio);\n\n if (isMotionPathProp) {\n motionPaths.push(keyframe.motionPath);\n }\n\n let curveValue = keyframe.value;\n curve.values.push(curveValue);\n\n let curveTypes = keyframe.curve;\n if (curveTypes) {\n if (typeof curveTypes === 'string') {\n curve.types.push(curveTypes);\n continue;\n }\n else if (Array.isArray(curveTypes)) {\n if (curveTypes[0] === curveTypes[1] &&\n curveTypes[2] === curveTypes[3]) {\n curve.types.push(DynamicAnimCurve.Linear);\n }\n else {\n curve.types.push(DynamicAnimCurve.Bezier(curveTypes));\n }\n continue;\n }\n }\n curve.types.push(DynamicAnimCurve.Linear);\n }\n \n if (isMotionPathProp) {\n sampleMotionPaths(motionPaths, curve, this.duration, this.sample, target);\n }\n\n // if every piece of ratios are the same, we can use the quick function to find frame index.\n let ratios = curve.ratios;\n let currRatioDif, lastRatioDif;\n let canOptimize = true;\n let EPSILON = 1e-6;\n for (let i = 1, l = ratios.length; i < l; i++) {\n currRatioDif = ratios[i] - ratios[i-1];\n if (i === 1) {\n lastRatioDif = currRatioDif;\n }\n else if (Math.abs(currRatioDif - lastRatioDif) > EPSILON) {\n canOptimize = false; \n break;\n }\n }\n\n curve._findFrameIndex = canOptimize ? quickFindIndex : binarySearch;\n\n // find the lerp function\n let firstValue = curve.values[0];\n if (firstValue !== undefined && firstValue !== null && !curve._lerp) {\n if (typeof firstValue === 'number') {\n curve._lerp = DynamicAnimCurve.prototype._lerpNumber;\n }\n else if (firstValue instanceof cc.Quat) {\n curve._lerp = DynamicAnimCurve.prototype._lerpQuat;\n }\n else if (firstValue instanceof cc.Vec2) {\n curve._lerp = DynamicAnimCurve.prototype._lerpVector2;\n }\n else if (firstValue instanceof cc.Vec3) {\n curve._lerp = DynamicAnimCurve.prototype._lerpVector3;\n }\n else if (firstValue.lerp) {\n curve._lerp = DynamicAnimCurve.prototype._lerpObject;\n }\n }\n\n return curve;\n },\n\n createTargetCurves (target, curveData, curves) {\n let propsData = curveData.props;\n let compsData = curveData.comps;\n\n if (propsData) {\n for (let propPath in propsData) {\n let data = propsData[propPath];\n let curve = this.createPropCurve(target, propPath, data);\n\n curves.push(curve);\n }\n }\n\n if (compsData) {\n for (let compName in compsData) {\n let comp = target.getComponent(compName);\n\n if (!comp) {\n continue;\n }\n\n let compData = compsData[compName];\n for (let propPath in compData) {\n let data = compData[propPath];\n let curve = this.createPropCurve(comp, propPath, data);\n\n curves.push(curve);\n }\n }\n }\n },\n\n createCurves (state, root) {\n let curveData = this.curveData;\n let childrenCurveDatas = curveData.paths;\n let curves = [];\n\n this.createTargetCurves(root, curveData, curves);\n\n for (let namePath in childrenCurveDatas) {\n let target = cc.find(namePath, root);\n\n if (!target) {\n continue;\n }\n\n let childCurveDatas = childrenCurveDatas[namePath];\n this.createTargetCurves(target, childCurveDatas, curves);\n }\n\n return curves;\n }\n});\n\ncc.AnimationClip = module.exports = AnimationClip;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n\nconst bezierByTime = require('./bezier').bezierByTime;\n\nconst binarySearch = require('../core/utils/binary-search').binarySearchEpsilon;\nconst WrapModeMask = require('./types').WrapModeMask;\nconst WrappedInfo = require('./types').WrappedInfo;\n\n/**\n * Compute a new ratio by curve type\n * @param {Number} ratio - The origin ratio\n * @param {Array|String} type - If it's Array, then ratio will be computed with bezierByTime. If it's string, then ratio will be computed with cc.easing function\n */\nfunction computeRatioByType (ratio, type) {\n if (typeof type === 'string') {\n var func = cc.easing[type];\n if (func) {\n ratio = func(ratio);\n }\n else {\n cc.errorID(3906, type);\n }\n }\n else if (Array.isArray(type)) {\n // bezier curve\n ratio = bezierByTime(type, ratio);\n }\n\n return ratio;\n}\n\n//\n// 动画数据类,相当于 AnimationClip。\n// 虽然叫做 AnimCurve,但除了曲线,可以保存任何类型的值。\n//\n// @class AnimCurve\n//\n//\nvar AnimCurve = cc.Class({\n name: 'cc.AnimCurve',\n\n //\n // @method sample\n // @param {number} time\n // @param {number} ratio - The normalized time specified as a number between 0.0 and 1.0 inclusive.\n // @param {AnimationState} state\n //\n sample: function (time, ratio, state) {},\n\n onTimeChangedManually: undefined\n});\n\n/**\n * 当每两帧之前的间隔都一样的时候可以使用此函数快速查找 index\n */\nfunction quickFindIndex (ratios, ratio) {\n var length = ratios.length - 1;\n\n if (length === 0) return 0;\n\n var start = ratios[0];\n if (ratio < start) return 0;\n\n var end = ratios[length];\n if (ratio > end) return ~ratios.length;\n\n ratio = (ratio - start) / (end - start);\n\n var eachLength = 1 / length;\n var index = ratio / eachLength;\n var floorIndex = index | 0;\n var EPSILON = 1e-6;\n\n if ((index - floorIndex) < EPSILON) {\n return floorIndex;\n }\n else if ((floorIndex + 1 - index) < EPSILON) {\n return floorIndex + 1;\n }\n\n return ~(floorIndex + 1);\n}\n\n//\n//\n// @class DynamicAnimCurve\n//\n// @extends AnimCurve\n//\nvar DynamicAnimCurve = cc.Class({\n name: 'cc.DynamicAnimCurve',\n extends: AnimCurve,\n\n ctor () {\n // cache last frame index\n this._cachedIndex = 0;\n },\n\n properties: {\n\n // The object being animated.\n // @property target\n // @type {object}\n target: null,\n\n // The name of the property being animated.\n // @property prop\n // @type {string}\n prop: '',\n\n // The values of the keyframes. (y)\n // @property values\n // @type {any[]}\n values: [],\n\n // The keyframe ratio of the keyframe specified as a number between 0.0 and 1.0 inclusive. (x)\n // @property ratios\n // @type {number[]}\n ratios: [],\n\n // @property types\n // @param {object[]}\n // Each array item maybe type:\n // - [x, x, x, x]: Four control points for bezier\n // - null: linear\n types: [],\n },\n\n _findFrameIndex: binarySearch,\n _lerp: undefined,\n\n _lerpNumber (from, to, t) {\n return from + (to - from) * t;\n },\n\n _lerpObject (from, to, t) {\n return from.lerp(to, t);\n },\n\n _lerpQuat: (function () {\n let out = cc.quat();\n return function (from, to, t) {\n return from.lerp(to, t, out);\n };\n })(),\n\n _lerpVector2: (function () {\n let out = cc.v2();\n return function (from, to, t) {\n return from.lerp(to, t, out);\n };\n })(),\n\n _lerpVector3: (function () {\n let out = cc.v3();\n return function (from, to, t) {\n return from.lerp(to, t, out);\n };\n })(),\n\n sample (time, ratio, state) {\n let values = this.values;\n let ratios = this.ratios;\n let frameCount = ratios.length;\n\n if (frameCount === 0) {\n return;\n }\n\n // only need to refind frame index when ratio is out of range of last from ratio and to ratio.\n let shoudRefind = true;\n let cachedIndex = this._cachedIndex;\n if (cachedIndex < 0) {\n cachedIndex = ~cachedIndex;\n if (cachedIndex > 0 && cachedIndex < ratios.length) {\n let fromRatio = ratios[cachedIndex - 1];\n let toRatio = ratios[cachedIndex];\n if (ratio > fromRatio && ratio < toRatio) {\n shoudRefind = false;\n }\n }\n }\n\n if (shoudRefind) {\n this._cachedIndex = this._findFrameIndex(ratios, ratio);\n }\n\n // evaluate value\n let value;\n let index = this._cachedIndex;\n if (index < 0) {\n index = ~index;\n\n if (index <= 0) {\n value = values[0];\n }\n else if (index >= frameCount) {\n value = values[frameCount - 1];\n }\n else {\n var fromVal = values[index - 1];\n\n if (!this._lerp) {\n value = fromVal;\n }\n else {\n var fromRatio = ratios[index - 1];\n var toRatio = ratios[index];\n var type = this.types[index - 1];\n var ratioBetweenFrames = (ratio - fromRatio) / (toRatio - fromRatio);\n\n if (type) {\n ratioBetweenFrames = computeRatioByType(ratioBetweenFrames, type);\n }\n\n // calculate value\n var toVal = values[index];\n\n value = this._lerp(fromVal, toVal, ratioBetweenFrames);\n }\n }\n }\n else {\n value = values[index];\n }\n\n this.target[this.prop] = value;\n }\n});\n\nDynamicAnimCurve.Linear = null;\nDynamicAnimCurve.Bezier = function (controlPoints) {\n return controlPoints;\n};\n\n\n/**\n * Event information,\n * @class EventInfo\n *\n */\nvar EventInfo = function () {\n this.events = [];\n};\n\n/**\n * @param {Function} [func] event function\n * @param {Object[]} [params] event params\n */\nEventInfo.prototype.add = function (func, params) {\n this.events.push({\n func: func || '',\n params: params || []\n });\n};\n\n\n/**\n *\n * @class EventAnimCurve\n *\n * @extends AnimCurve\n */\nvar EventAnimCurve = cc.Class({\n name: 'cc.EventAnimCurve',\n extends: AnimCurve,\n\n properties: {\n /**\n * The object being animated.\n * @property target\n * @type {object}\n */\n target: null,\n\n /** The keyframe ratio of the keyframe specified as a number between 0.0 and 1.0 inclusive. (x)\n * @property ratios\n * @type {number[]}\n */\n ratios: [],\n\n /**\n * @property events\n * @type {EventInfo[]}\n */\n events: [],\n\n _wrappedInfo: {\n default: function () {\n return new WrappedInfo();\n }\n },\n\n _lastWrappedInfo: null,\n\n _ignoreIndex: NaN\n },\n\n _wrapIterations: function (iterations) {\n if (iterations - (iterations | 0) === 0) iterations -= 1;\n return iterations | 0;\n },\n\n sample: function (time, ratio, state) {\n var length = this.ratios.length;\n\n var currentWrappedInfo = state.getWrappedInfo(state.time, this._wrappedInfo);\n var direction = currentWrappedInfo.direction;\n var currentIndex = binarySearch(this.ratios, currentWrappedInfo.ratio);\n if (currentIndex < 0) {\n currentIndex = ~currentIndex - 1;\n\n // if direction is inverse, then increase index\n if (direction < 0) currentIndex += 1;\n }\n\n if (this._ignoreIndex !== currentIndex) {\n this._ignoreIndex = NaN;\n }\n\n currentWrappedInfo.frameIndex = currentIndex;\n\n if (!this._lastWrappedInfo) {\n this._fireEvent(currentIndex);\n this._lastWrappedInfo = new WrappedInfo(currentWrappedInfo);\n return;\n }\n\n var wrapMode = state.wrapMode;\n var currentIterations = this._wrapIterations(currentWrappedInfo.iterations);\n\n var lastWrappedInfo = this._lastWrappedInfo;\n var lastIterations = this._wrapIterations(lastWrappedInfo.iterations);\n var lastIndex = lastWrappedInfo.frameIndex;\n var lastDirection = lastWrappedInfo.direction;\n\n var interationsChanged = lastIterations !== -1 && currentIterations !== lastIterations;\n\n if (lastIndex === currentIndex && interationsChanged && length === 1) {\n this._fireEvent(0);\n }\n else if (lastIndex !== currentIndex || interationsChanged) {\n direction = lastDirection;\n\n do {\n if (lastIndex !== currentIndex) {\n if (direction === -1 && lastIndex === 0 && currentIndex > 0) {\n if ((wrapMode & WrapModeMask.PingPong) === WrapModeMask.PingPong) {\n direction *= -1;\n }\n else {\n lastIndex = length;\n }\n\n lastIterations ++;\n }\n else if (direction === 1 && lastIndex === length - 1 && currentIndex < length - 1) {\n if ((wrapMode & WrapModeMask.PingPong) === WrapModeMask.PingPong) {\n direction *= -1;\n }\n else {\n lastIndex = -1;\n }\n\n lastIterations ++;\n }\n\n if (lastIndex === currentIndex) break;\n if (lastIterations > currentIterations) break;\n }\n\n lastIndex += direction;\n\n cc.director.getAnimationManager().pushDelayEvent(this, '_fireEvent', [lastIndex]);\n } while (lastIndex !== currentIndex && lastIndex > -1 && lastIndex < length);\n }\n\n this._lastWrappedInfo.set(currentWrappedInfo);\n },\n\n _fireEvent: function (index) {\n if (index < 0 || index >= this.events.length || this._ignoreIndex === index) return;\n\n var eventInfo = this.events[index];\n var events = eventInfo.events;\n \n if ( !this.target.isValid ) { \n return; \n }\n \n var components = this.target._components;\n\n for (var i = 0; i < events.length; i++) {\n var event = events[i];\n var funcName = event.func;\n\n for (var j = 0; j < components.length; j++) {\n var component = components[j];\n var func = component[funcName];\n\n if (func) func.apply(component, event.params);\n }\n }\n },\n\n onTimeChangedManually: function (time, state) {\n this._lastWrappedInfo = null;\n this._ignoreIndex = NaN;\n\n var info = state.getWrappedInfo(time, this._wrappedInfo);\n var direction = info.direction;\n var frameIndex = binarySearch(this.ratios, info.ratio);\n\n // only ignore when time not on a frame index\n if (frameIndex < 0) {\n frameIndex = ~frameIndex - 1;\n\n // if direction is inverse, then increase index\n if (direction < 0) frameIndex += 1;\n\n this._ignoreIndex = frameIndex;\n }\n }\n});\n\n\nif (CC_TEST) {\n cc._Test.DynamicAnimCurve = DynamicAnimCurve;\n cc._Test.EventAnimCurve = EventAnimCurve;\n cc._Test.quickFindIndex = quickFindIndex;\n}\n\nmodule.exports = {\n AnimCurve: AnimCurve,\n DynamicAnimCurve: DynamicAnimCurve,\n EventAnimCurve: EventAnimCurve,\n EventInfo: EventInfo,\n computeRatioByType: computeRatioByType,\n quickFindIndex: quickFindIndex\n};\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar js = cc.js;\n\nvar AnimationManager = cc.Class({\n ctor: function () {\n this._anims = new js.array.MutableForwardIterator([]);\n this._delayEvents = [];\n\n cc.director._scheduler && cc.director._scheduler.enableForTarget(this);\n },\n\n // for manager\n\n update: function (dt) {\n var iterator = this._anims;\n var array = iterator.array;\n for (iterator.i = 0; iterator.i < array.length; ++iterator.i) {\n var anim = array[iterator.i];\n if (anim._isPlaying && !anim._isPaused) {\n anim.update(dt);\n }\n }\n\n var events = this._delayEvents;\n for (let i = 0; i < events.length; i++) {\n var event = events[i];\n event.target[event.func].apply(event.target, event.args);\n }\n events.length = 0;\n \n },\n\n destruct: function () {},\n\n\n /**\n * @param {AnimationState} anim\n */\n addAnimation: function (anim) {\n var index = this._anims.array.indexOf(anim);\n if (index === -1) {\n this._anims.push(anim);\n }\n },\n\n /**\n * @param {AnimationState} anim\n */\n removeAnimation: function (anim) {\n var index = this._anims.array.indexOf(anim);\n if (index >= 0) {\n this._anims.fastRemoveAt(index);\n }\n else {\n cc.errorID(3907);\n }\n },\n\n pushDelayEvent: function (target, func, args) {\n this._delayEvents.push({\n target: target,\n func: func,\n args: args\n });\n }\n});\n\n\ncc.AnimationManager = module.exports = AnimationManager;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n\nvar js = cc.js;\nvar Playable = require('./playable');\n\nvar Types = require('./types');\nvar WrappedInfo = Types.WrappedInfo;\nvar WrapMode = Types.WrapMode;\nvar WrapModeMask = Types.WrapModeMask;\n\n/**\n * !#en\n * The AnimationState gives full control over animation playback process.\n * In most cases the Animation Component is sufficient and easier to use. Use the AnimationState if you need full control.\n * !#zh\n * AnimationState 完全控制动画播放过程。
\n * 大多数情况下 动画组件 是足够和易于使用的。如果您需要更多的动画控制接口,请使用 AnimationState。\n * @class AnimationState\n * @extends Playable\n *\n */\n\n/**\n * @method constructor\n * @param {AnimationClip} clip\n * @param {String} [name]\n */\nfunction AnimationState (clip, name) {\n Playable.call(this);\n \n // Mark whether the current frame is played.\n // When set new time to animation state, we should ensure the frame at the specified time being played at next update.\n this._currentFramePlayed = false;\n \n this._delay = 0;\n this._delayTime = 0;\n\n this._wrappedInfo = new WrappedInfo();\n this._lastWrappedInfo = null;\n\n this._process = process;\n\n this._clip = clip;\n this._name = name || (clip && clip.name);\n\n /**\n * @property animator\n * @type {AnimationAnimator}\n * @private\n */\n this.animator = null;\n\n /**\n * !#en The curves list.\n * !#zh 曲线列表。\n * @property curves\n * @type {Object[]}\n */\n this.curves = [];\n\n // http://www.w3.org/TR/web-animations/#idl-def-AnimationTiming\n\n /**\n * !#en The start delay which represents the number of seconds from an animation's start time to the start of\n * the active interval.\n * !#zh 延迟多少秒播放。\n *\n * @property delay\n * @type {Number}\n * @default 0\n */\n this.delay = 0;\n\n /**\n * !#en The animation's iteration count property.\n *\n * A real number greater than or equal to zero (including positive infinity) representing the number of times\n * to repeat the animation node.\n *\n * Values less than zero and NaN values are treated as the value 1.0 for the purpose of timing model\n * calculations.\n *\n * !#zh 迭代次数,指动画播放多少次后结束, normalize time。 如 2.5(2次半)\n *\n * @property repeatCount\n * @type {Number}\n * @default 1\n */\n this.repeatCount = 1;\n\n /**\n * !#en The iteration duration of this animation in seconds. (length)\n * !#zh 单次动画的持续时间,秒。\n *\n * @property duration\n * @type {Number}\n * @readOnly\n */\n this.duration = 1;\n\n /**\n * !#en The animation's playback speed. 1 is normal playback speed.\n * !#zh 播放速率。\n * @property speed\n * @type {Number}\n * @default: 1.0\n */\n this.speed = 1;\n\n /**\n * !#en\n * Wrapping mode of the playing animation.\n * Notice : dynamic change wrapMode will reset time and repeatCount property\n * !#zh\n * 动画循环方式。\n * 需要注意的是,动态修改 wrapMode 时,会重置 time 以及 repeatCount\n *\n * @property wrapMode\n * @type {WrapMode}\n * @default: WrapMode.Normal\n */\n this.wrapMode = WrapMode.Normal;\n\n /**\n * !#en The current time of this animation in seconds.\n * !#zh 动画当前的时间,秒。\n * @property time\n * @type {Number}\n * @default 0\n */\n this.time = 0;\n\n // Animation as event target\n this._target = null;\n this._lastframeEventOn = false;\n this.emit = function () {\n var args = new Array(arguments.length);\n for (var i = 0, l = args.length; i < l; i++) {\n args[i] = arguments[i];\n }\n cc.director.getAnimationManager().pushDelayEvent(this, '_emit', args);\n };\n}\njs.extend(AnimationState, Playable);\n\nvar proto = AnimationState.prototype;\n\nproto._emit = function (type, state) {\n if (this._target && this._target.isValid) {\n this._target.emit(type, type, state);\n }\n};\n\nproto.on = function (type, callback, target) {\n if (this._target && this._target.isValid) {\n if (type === 'lastframe') {\n this._lastframeEventOn = true;\n }\n return this._target.on(type, callback, target);\n }\n else {\n return null;\n }\n};\n\nproto.once = function (type, callback, target) {\n if (this._target && this._target.isValid) {\n if (type === 'lastframe') {\n this._lastframeEventOn = true;\n }\n let self = this;\n return this._target.once(type, function (event) {\n callback.call(target, event);\n self._lastframeEventOn = false;\n });\n }\n else {\n return null;\n }\n};\n\nproto.off = function (type, callback, target) {\n if (this._target && this._target.isValid) {\n if (type === 'lastframe') {\n if (!this._target.hasEventListener(type)) {\n this._lastframeEventOn = false;\n }\n }\n this._target.off(type, callback, target);\n }\n};\n\nproto._setEventTarget = function (target) {\n this._target = target;\n};\n\nproto.onPlay = function () {\n // replay\n this.setTime(0);\n this._delayTime = this._delay;\n \n cc.director.getAnimationManager().addAnimation(this);\n\n if (this.animator) {\n this.animator.addAnimation(this);\n }\n \n this.emit('play', this);\n};\n\nproto.onStop = function () {\n if (!this.isPaused) {\n cc.director.getAnimationManager().removeAnimation(this);\n }\n\n if (this.animator) {\n this.animator.removeAnimation(this);\n }\n\n this.emit('stop', this);\n};\n\nproto.onResume = function () {\n cc.director.getAnimationManager().addAnimation(this);\n this.emit('resume', this);\n};\n\nproto.onPause = function () {\n cc.director.getAnimationManager().removeAnimation(this);\n this.emit('pause', this);\n};\n\nproto.setTime = function (time) {\n this._currentFramePlayed = false;\n this.time = time || 0;\n\n var curves = this.curves;\n for (var i = 0, l = curves.length; i < l; i++) {\n var curve = curves[i];\n if (curve.onTimeChangedManually) {\n curve.onTimeChangedManually(time, this);\n }\n }\n};\n\nfunction process () {\n // sample\n var info = this.sample();\n\n if (this._lastframeEventOn) {\n var lastInfo;\n if (!this._lastWrappedInfo) {\n lastInfo = this._lastWrappedInfo = new WrappedInfo(info);\n } else {\n lastInfo = this._lastWrappedInfo;\n }\n\n if (this.repeatCount > 1 && ((info.iterations | 0) > (lastInfo.iterations | 0))) {\n this.emit('lastframe', this);\n }\n\n lastInfo.set(info);\n }\n\n if (info.stopped) {\n this.stop();\n this.emit('finished', this);\n }\n}\n\nfunction simpleProcess () {\n var time = this.time;\n var duration = this.duration;\n\n if (time > duration) {\n time = time % duration;\n if (time === 0) time = duration;\n }\n else if (time < 0) {\n time = time % duration;\n if (time !== 0) time += duration;\n }\n\n var ratio = time / duration;\n\n var curves = this.curves;\n for (var i = 0, len = curves.length; i < len; i++) {\n var curve = curves[i];\n curve.sample(time, ratio, this);\n }\n\n if (this._lastframeEventOn) {\n if (this._lastIterations === undefined) {\n this._lastIterations = ratio;\n }\n\n if ((this.time > 0 && this._lastIterations > ratio) || (this.time < 0 && this._lastIterations < ratio)) {\n this.emit('lastframe', this);\n }\n\n this._lastIterations = ratio;\n }\n}\n\nproto.update = function (delta) {\n // calculate delay time\n\n if (this._delayTime > 0) {\n this._delayTime -= delta;\n if (this._delayTime > 0) {\n // still waiting\n return;\n }\n }\n\n // make first frame perfect\n\n //var playPerfectFirstFrame = (this.time === 0);\n if (this._currentFramePlayed) {\n this.time += (delta * this.speed);\n }\n else {\n this._currentFramePlayed = true;\n }\n\n this._process();\n};\n\nproto._needRevers = function (currentIterations) {\n var wrapMode = this.wrapMode;\n var needRevers = false;\n\n if ((wrapMode & WrapModeMask.PingPong) === WrapModeMask.PingPong) {\n var isEnd = currentIterations - (currentIterations | 0) === 0;\n if (isEnd && (currentIterations > 0)) {\n currentIterations -= 1;\n }\n\n var isOddIteration = currentIterations & 1;\n if (isOddIteration) {\n needRevers = !needRevers;\n }\n }\n if ((wrapMode & WrapModeMask.Reverse) === WrapModeMask.Reverse) {\n needRevers = !needRevers;\n }\n return needRevers;\n};\n\nproto.getWrappedInfo = function (time, info) {\n info = info || new WrappedInfo();\n \n var stopped = false;\n var duration = this.duration;\n var repeatCount = this.repeatCount;\n\n var currentIterations = time > 0 ? (time / duration) : -(time / duration);\n if (currentIterations >= repeatCount) {\n currentIterations = repeatCount;\n\n stopped = true;\n var tempRatio = repeatCount - (repeatCount | 0);\n if (tempRatio === 0) {\n tempRatio = 1; // 如果播放过,动画不复位\n }\n time = tempRatio * duration * (time > 0 ? 1 : -1);\n }\n\n if (time > duration) {\n var tempTime = time % duration;\n time = tempTime === 0 ? duration : tempTime;\n }\n else if (time < 0) {\n time = time % duration;\n if (time !== 0 ) time += duration;\n }\n\n var needRevers = false;\n var shouldWrap = this._wrapMode & WrapModeMask.ShouldWrap;\n if (shouldWrap) {\n needRevers = this._needRevers(currentIterations);\n }\n\n var direction = needRevers ? -1 : 1;\n if (this.speed < 0) {\n direction *= -1;\n }\n\n // calculate wrapped time\n if (shouldWrap && needRevers) {\n time = duration - time;\n }\n\n info.ratio = time / duration;\n info.time = time;\n info.direction = direction;\n info.stopped = stopped;\n info.iterations = currentIterations;\n\n return info;\n};\n\nproto.sample = function () {\n var info = this.getWrappedInfo(this.time, this._wrappedInfo);\n var curves = this.curves;\n for (var i = 0, len = curves.length; i < len; i++) {\n var curve = curves[i];\n curve.sample(info.time, info.ratio, this);\n }\n\n return info;\n};\n\n\n/**\n * !#en The clip that is being played by this animation state.\n * !#zh 此动画状态正在播放的剪辑。\n * @property clip\n * @type {AnimationClip}\n * @final\n */\njs.get(proto, 'clip', function () {\n return this._clip;\n});\n\n/**\n * !#en The name of the playing animation.\n * !#zh 动画的名字\n * @property name\n * @type {String}\n * @readOnly\n */\njs.get(proto, 'name', function () {\n return this._name;\n});\n\njs.obsolete(proto, 'AnimationState.length', 'duration');\n\njs.getset(proto, 'curveLoaded',\n function () {\n return this.curves.length > 0;\n },\n function () {\n this.curves.length = 0;\n }\n);\n\n\njs.getset(proto, 'wrapMode',\n function () {\n return this._wrapMode;\n },\n function (value) {\n this._wrapMode = value;\n\n if (CC_EDITOR) return;\n\n // dynamic change wrapMode will need reset time to 0\n this.time = 0;\n\n if (value & WrapModeMask.Loop) {\n this.repeatCount = Infinity;\n }\n else {\n this.repeatCount = 1;\n }\n \n }\n);\n\njs.getset(proto, 'repeatCount',\n function () {\n return this._repeatCount;\n },\n function (value) {\n this._repeatCount = value;\n \n var shouldWrap = this._wrapMode & WrapModeMask.ShouldWrap;\n var reverse = (this.wrapMode & WrapModeMask.Reverse) === WrapModeMask.Reverse;\n if (value === Infinity && !shouldWrap && !reverse) {\n this._process = simpleProcess;\n }\n else {\n this._process = process;\n }\n }\n);\n\njs.getset(proto, 'delay', \n function () {\n return this._delay;\n },\n function (value) {\n this._delayTime = this._delay = value;\n }\n);\n\n\ncc.AnimationState = module.exports = AnimationState;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n//var bezier = (function () {\n// function B1 (t) { return (t * t * t); }\n// function B2 (t) { return (3 * t * t * (1 - t)); }\n// function B3 (t) { return (3 * t * (1 - t) * (1 - t)); }\n// function B4 (t) { return ((1 - t) * (1 - t) * (1 - t)); }\n// function bezier (C1, C2, C3, C4, t) {\n// return C1 * B1(t) + C2 * B2(t) + C3 * B3(t) + C4 * B4(t);\n// }\n//\n// //function bezier (C1, C2, C3, C4, t, out) {\n// // out.x = C1.x * B1(t) + C2.x * B2(t) + C3.x * B3(t) + C4.x * B4(t);\n// // out.y = C1.y * B1(t) + C2.y * B2(t) + C3.y * B3(t) + C4.y * B4(t);\n// //}\n//\n// return bezier;\n//})();\nfunction bezier (C1, C2, C3, C4, t) {\n var t1 = 1 - t;\n return t1 * (t1 * (C1 + (C2 * 3 - C1) * t) + C3 * 3 * t * t) + C4 * t * t * t;\n}\n//function bezier (c0, c1, c2, c3, t) {\n// var cy = 3.0 * (c1);\n// var by = 3.0 * (c3 - c1) - cy;\n// var ay = 1 - cy - by;\n// return (ay * t * t * t) + (by * t * t) + (cy * t);\n//}\n\n//var sin = Math.sin;\nvar cos = Math.cos,\n acos = Math.acos,\n max = Math.max,\n //atan2 = Math.atan2,\n pi = Math.PI,\n tau = 2 * pi,\n sqrt = Math.sqrt;\n\nfunction crt (v) {\n if (v < 0) {\n return -Math.pow(-v, 1 / 3);\n }\n else {\n return Math.pow(v, 1 / 3);\n }\n}\n\n//function align (curve, line) {\n// var tx = line.p1.x,\n// ty = line.p1.y,\n// a = -atan2(line.p2.y-ty, line.p2.x-tx);\n// curve = [{x:0, y:1}, {x: curve[0], y: 1-curve[1]}, {x: curve[2], y: 1-curve[3]}, {x:1, y:0}];\n// return curve.map(function(v) {\n// return {\n// x: (v.x-tx)*cos(a) - (v.y-ty)*sin(a),\n// y: (v.x-tx)*sin(a) + (v.y-ty)*cos(a)\n// };\n// });\n//}\n\n// Modified from http://jsbin.com/yibipofeqi/1/edit, optimized for animations.\n// The origin Cardano's algorithm is based on http://www.trans4mind.com/personal_development/mathematics/polynomials/cubicAlgebra.htm\nfunction cardano (curve, x) {\n // align curve with the intersecting line:\n //var line = {p1: {x: x, y: 0}, p2: {x: x, y: 1}};\n //var aligned = align(curve, line);\n //// and rewrite from [a(1-t)^3 + 3bt(1-t)^2 + 3c(1-t)t^2 + dt^3] form\n // pa = aligned[0].y,\n // pb = aligned[1].y,\n // pc = aligned[2].y,\n // pd = aligned[3].y;\n ////// curve = [{x:0, y:1}, {x: curve[0], y: 1-curve[1]}, {x: curve[2], y: 1-curve[3]}, {x:1, y:0}];\n var pa = x - 0;\n var pb = x - curve[0];\n var pc = x - curve[2];\n var pd = x - 1;\n\n // to [t^3 + at^2 + bt + c] form:\n var pa3 = pa * 3;\n var pb3 = pb * 3;\n var pc3 = pc * 3;\n var d = (-pa + pb3 - pc3 + pd),\n rd = 1 / d,\n r3 = 1 / 3,\n a = (pa3 - 6 * pb + pc3) * rd,\n a3 = a * r3,\n b = (-pa3 + pb3) * rd,\n c = pa * rd,\n // then, determine p and q:\n p = (3 * b - a * a) * r3,\n p3 = p * r3,\n q = (2 * a * a * a - 9 * a * b + 27 * c) / 27,\n q2 = q / 2,\n // and determine the discriminant:\n discriminant = q2 * q2 + p3 * p3 * p3,\n // and some reserved variables\n u1, v1, x1, x2, x3;\n\n // If the discriminant is negative, use polar coordinates\n // to get around square roots of negative numbers\n if (discriminant < 0) {\n var mp3 = -p * r3,\n mp33 = mp3 * mp3 * mp3,\n r = sqrt(mp33),\n // compute cosphi corrected for IEEE float rounding:\n t = -q / (2 * r),\n cosphi = t < -1 ? -1 : t > 1 ? 1 : t,\n phi = acos(cosphi),\n crtr = crt(r),\n t1 = 2 * crtr;\n x1 = t1 * cos(phi * r3) - a3;\n x2 = t1 * cos((phi + tau) * r3) - a3;\n x3 = t1 * cos((phi + 2 * tau) * r3) - a3;\n\n // choose best percentage\n if (0 <= x1 && x1 <= 1) {\n if (0 <= x2 && x2 <= 1) {\n if (0 <= x3 && x3 <= 1) {\n return max(x1, x2, x3);\n }\n else {\n return max(x1, x2);\n }\n }\n else if (0 <= x3 && x3 <= 1) {\n return max(x1, x3);\n }\n else {\n return x1;\n }\n }\n else {\n if (0 <= x2 && x2 <= 1) {\n if (0 <= x3 && x3 <= 1) {\n return max(x2, x3);\n }\n else {\n return x2;\n }\n }\n else {\n return x3;\n }\n }\n }\n else if (discriminant === 0) {\n u1 = q2 < 0 ? crt(-q2) : -crt(q2);\n x1 = 2 * u1 - a3;\n x2 = -u1 - a3;\n\n // choose best percentage\n if (0 <= x1 && x1 <= 1) {\n if (0 <= x2 && x2 <= 1) {\n return max(x1, x2);\n }\n else {\n return x1;\n }\n }\n else {\n return x2;\n }\n }\n // one real root, and two imaginary roots\n else {\n var sd = sqrt(discriminant);\n u1 = crt(-q2 + sd);\n v1 = crt(q2 + sd);\n x1 = u1 - v1 - a3;\n return x1;\n }\n}\n\nfunction bezierByTime (controlPoints, x) {\n var percent = cardano(controlPoints, x); // t\n var p1y = controlPoints[1]; // b\n var p2y = controlPoints[3]; // c\n // return bezier(0, p1y, p2y, 1, percent);\n return ((1 - percent) * (p1y + (p2y - p1y) * percent) * 3 + percent * percent) * percent;\n}\n\nif (CC_TEST) {\n cc._Test.bezier = bezier;\n cc._Test.bezierByTime = bezierByTime;\n}\n\nmodule.exports = {\n bezier: bezier,\n bezierByTime: bezierByTime\n};\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * @module cc\n */\n\n /**\n * !#en\n * This class provide easing methods for {{#crossLink \"tween\"}}{{/crossLink}} class.
\n * Demonstratio: https://easings.net/\n * !#zh\n * 缓动函数类,为 {{#crossLink \"Tween\"}}{{/crossLink}} 提供缓动效果函数。
\n * 函数效果演示: https://easings.net/\n * @class Easing\n */\n\nvar easing = {\n constant: function () { return 0; },\n linear: function (k) { return k; },\n\n // quad\n // easing equation function for a quadratic (t^2)\n // @param t: Current time (in frames or seconds).\n // @return: The correct value.\n\n /**\n * !#en Easing in with quadratic formula. From slow to fast.\n * !#zh 平方曲线缓入函数。运动由慢到快。\n * @method quadIn\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value\n */\n quadIn: function (k) { return k * k; },\n /**\n * !#en Easing out with quadratic formula. From fast to slow.\n * !#zh 平方曲线缓出函数。运动由快到慢。\n * @method quadOut\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value\n */\n quadOut: function (k) { return k * ( 2 - k ); },\n /**\n * !#en Easing in and out with quadratic formula. From slow to fast, then back to slow.\n * !#zh 平方曲线缓入缓出函数。运动由慢到快再到慢。\n * @method quadInOut\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value\n */\n quadInOut: function (k) {\n if (( k *= 2 ) < 1) {\n return 0.5 * k * k;\n }\n return -0.5 * ( --k * ( k - 2 ) - 1 );\n },\n\n // cubic\n // easing equation function for a cubic (t^3)\n // @param t: Current time (in frames or seconds).\n // @return: The correct value.\n\n /**\n * !#en Easing in with cubic formula. From slow to fast.\n * !#zh 立方曲线缓入函数。运动由慢到快。\n * @method cubicIn\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n cubicIn: function (k) { return k * k * k; },\n /**\n * !#en Easing out with cubic formula. From slow to fast.\n * !#zh 立方曲线缓出函数。运动由快到慢。\n * @method cubicOut\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n cubicOut: function (k) { return --k * k * k + 1; },\n /**\n * !#en Easing in and out with cubic formula. From slow to fast, then back to slow.\n * !#zh 立方曲线缓入缓出函数。运动由慢到快再到慢。\n * @method cubicInOut\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n cubicInOut: function (k) {\n if (( k *= 2 ) < 1) {\n return 0.5 * k * k * k;\n }\n return 0.5 * ( ( k -= 2 ) * k * k + 2 );\n },\n\n // quart\n // easing equation function for a quartic (t^4)\n // @param t: Current time (in frames or seconds).\n // @return: The correct value.\n\n /**\n * !#en Easing in with quartic formula. From slow to fast.\n * !#zh 四次方曲线缓入函数。运动由慢到快。\n * @method quartIn\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n quartIn: function (k) { return k * k * k * k; },\n /**\n * !#en Easing out with quartic formula. From fast to slow.\n * !#zh 四次方曲线缓出函数。运动由快到慢。\n * @method quartOut\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n quartOut: function (k) { return 1 - ( --k * k * k * k ); },\n /**\n * !#en Easing in and out with quartic formula. From slow to fast, then back to slow.\n * !#zh 四次方曲线缓入缓出函数。运动由慢到快再到慢。\n * @method quartInOut\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n quartInOut: function (k) {\n if (( k *= 2 ) < 1) {\n return 0.5 * k * k * k * k;\n }\n return -0.5 * ( ( k -= 2 ) * k * k * k - 2 );\n },\n\n // quint\n // easing equation function for a quintic (t^5)\n // @param t: Current time (in frames or seconds).\n // @return: The correct value.\n\n /**\n * !#en Easing in with quintic formula. From slow to fast.\n * !#zh 五次方曲线缓入函数。运动由慢到快。\n * @method quintIn\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n quintIn: function (k) { return k * k * k * k * k; },\n /**\n * !#en Easing out with quintic formula. From fast to slow.\n * !#zh 五次方曲线缓出函数。运动由快到慢。\n * @method quintOut\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n quintOut: function (k) { return --k * k * k * k * k + 1; },\n /**\n * !#en Easing in and out with quintic formula. From slow to fast, then back to slow.\n * !#zh 五次方曲线缓入缓出函数。运动由慢到快再到慢。\n * @method quintInOut\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n quintInOut: function (k) {\n if (( k *= 2 ) < 1) {\n return 0.5 * k * k * k * k * k;\n }\n return 0.5 * ( ( k -= 2 ) * k * k * k * k + 2 );\n },\n\n // sine\n // easing equation function for a sinusoidal (sin(t))\n // @param t: Current time (in frames or seconds).\n // @return: The correct value.\n\n /**\n * !#en Easing in and out with sine formula. From slow to fast.\n * !#zh 正弦曲线缓入函数。运动由慢到快。\n * @method sineIn\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n sineIn: function (k) { return 1 - Math.cos(k * Math.PI / 2); },\n /**\n * !#en Easing in and out with sine formula. From fast to slow.\n * !#zh 正弦曲线缓出函数。运动由快到慢。\n * @method sineOut\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n sineOut: function (k) { return Math.sin(k * Math.PI / 2); },\n /**\n * !#en Easing in and out with sine formula. From slow to fast, then back to slow.\n * !#zh 正弦曲线缓入缓出函数。运动由慢到快再到慢。\n * @method sineInOut\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n sineInOut: function (k) { return 0.5 * ( 1 - Math.cos(Math.PI * k) ); },\n\n // expo\n // easing equation function for an exponential (2^t)\n // param t: Current time (in frames or seconds).\n // return: The correct value.\n\n /**\n * !#en Easing in and out with exponential formula. From slow to fast.\n * !#zh 指数曲线缓入函数。运动由慢到快。\n * @method expoIn\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n expoIn: function (k) { return k === 0 ? 0 : Math.pow(1024, k - 1); },\n /**\n * !#en Easing in and out with exponential formula. From fast to slow.\n * !#zh 指数曲线缓出函数。运动由快到慢。\n * @method expoOut\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n expoOut: function (k) { return k === 1 ? 1 : 1 - Math.pow(2, -10 * k); },\n /**\n * !#en Easing in and out with exponential formula. From slow to fast.\n * !#zh 指数曲线缓入和缓出函数。运动由慢到很快再到慢。\n * @method expoInOut\n * @param {Number} t The current time as a percentage of the total time, then back to slow.\n * @return {Number} The correct value.\n */\n expoInOut: function (k) {\n if (k === 0) {\n return 0;\n }\n if (k === 1) {\n return 1;\n }\n if (( k *= 2 ) < 1) {\n return 0.5 * Math.pow(1024, k - 1);\n }\n return 0.5 * ( -Math.pow(2, -10 * ( k - 1 )) + 2 );\n },\n\n // circ\n // easing equation function for a circular (sqrt(1-t^2))\n // @param t: Current time (in frames or seconds).\n // @return:\tThe correct value.\n\n /**\n * !#en Easing in and out with circular formula. From slow to fast.\n * !#zh 循环公式缓入函数。运动由慢到快。\n * @method circIn\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n circIn: function (k) { return 1 - Math.sqrt(1 - k * k); },\n /**\n * !#en Easing in and out with circular formula. From fast to slow.\n * !#zh 循环公式缓出函数。运动由快到慢。\n * @method circOut\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n circOut: function (k) { return Math.sqrt(1 - ( --k * k )); },\n /**\n * !#en Easing in and out with circular formula. From slow to fast.\n * !#zh 指数曲线缓入缓出函数。运动由慢到很快再到慢。\n * @method circInOut\n * @param {Number} t The current time as a percentage of the total time, then back to slow.\n * @return {Number} The correct value.\n */\n circInOut: function (k) {\n if (( k *= 2 ) < 1) {\n return -0.5 * ( Math.sqrt(1 - k * k) - 1);\n }\n return 0.5 * ( Math.sqrt(1 - ( k -= 2) * k) + 1);\n },\n\n // elastic\n // easing equation function for an elastic (exponentially decaying sine wave)\n // @param t: Current time (in frames or seconds).\n // @return: The correct value.\n // recommand value: elastic (t)\n\n /**\n * !#en Easing in action with a spring oscillating effect.\n * !#zh 弹簧回震效果的缓入函数。\n * @method elasticIn\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n elasticIn: function (k) {\n var s, a = 0.1, p = 0.4;\n if (k === 0) {\n return 0;\n }\n if (k === 1) {\n return 1;\n }\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n }\n else {\n s = p * Math.asin(1 / a) / ( 2 * Math.PI );\n }\n return -( a * Math.pow(2, 10 * ( k -= 1 )) * Math.sin(( k - s ) * ( 2 * Math.PI ) / p) );\n },\n /**\n * !#en Easing out action with a spring oscillating effect.\n * !#zh 弹簧回震效果的缓出函数。\n * @method elasticOut\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n elasticOut: function (k) {\n var s, a = 0.1, p = 0.4;\n if (k === 0) {\n return 0;\n }\n if (k === 1) {\n return 1;\n }\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n }\n else {\n s = p * Math.asin(1 / a) / ( 2 * Math.PI );\n }\n return ( a * Math.pow(2, -10 * k) * Math.sin(( k - s ) * ( 2 * Math.PI ) / p) + 1 );\n },\n /**\n * !#en Easing in and out action with a spring oscillating effect.\n * !#zh 弹簧回震效果的缓入缓出函数。\n * @method elasticInOut\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n elasticInOut: function (k) {\n var s, a = 0.1, p = 0.4;\n if (k === 0) {\n return 0;\n }\n if (k === 1) {\n return 1;\n }\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n }\n else {\n s = p * Math.asin(1 / a) / ( 2 * Math.PI );\n }\n if (( k *= 2 ) < 1) {\n return -0.5 *\n ( a * Math.pow(2, 10 * ( k -= 1 )) * Math.sin(( k - s ) * ( 2 * Math.PI ) / p) );\n }\n return a * Math.pow(2, -10 * ( k -= 1 )) * Math.sin(( k - s ) * ( 2 * Math.PI ) / p) * 0.5 + 1;\n },\n\n // back\n // easing equation function for a back (overshooting cubic easing: (s+1)*t^3 - s*t^2)\n // @param t: Current time (in frames or seconds).\n // @return: The correct value.\n\n /**\n * !#en Easing in action with \"back up\" behavior.\n * !#zh 回退效果的缓入函数。\n * @method backIn\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n backIn: function (k) {\n var s = 1.70158;\n return k * k * ( ( s + 1 ) * k - s );\n },\n /**\n * !#en Easing out action with \"back up\" behavior.\n * !#zh 回退效果的缓出函数。\n * @method backOut\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n backOut: function (k) {\n var s = 1.70158;\n return --k * k * ( ( s + 1 ) * k + s ) + 1;\n },\n /**\n * !#en Easing in and out action with \"back up\" behavior.\n * !#zh 回退效果的缓入缓出函数。\n * @method backInOut\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n backInOut: function (k) {\n var s = 1.70158 * 1.525;\n if (( k *= 2 ) < 1) {\n return 0.5 * ( k * k * ( ( s + 1 ) * k - s ) );\n }\n return 0.5 * ( ( k -= 2 ) * k * ( ( s + 1 ) * k + s ) + 2 );\n },\n\n // bounce\n // easing equation function for a bounce (exponentially decaying parabolic bounce)\n // @param t: Current time (in frames or seconds).\n // @return: The correct value.\n\n /**\n * !#en Easing in action with bouncing effect.\n * !#zh 弹跳效果的缓入函数。\n * @method bounceIn\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n bounceIn: function (k) {\n return 1 - easing.bounceOut(1 - k);\n },\n /**\n * !#en Easing out action with bouncing effect.\n * !#zh 弹跳效果的缓出函数。\n * @method bounceOut\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n bounceOut: function (k) {\n if (k < ( 1 / 2.75 )) {\n return 7.5625 * k * k;\n }\n else if (k < ( 2 / 2.75 )) {\n return 7.5625 * ( k -= ( 1.5 / 2.75 ) ) * k + 0.75;\n }\n else if (k < ( 2.5 / 2.75 )) {\n return 7.5625 * ( k -= ( 2.25 / 2.75 ) ) * k + 0.9375;\n }\n else {\n return 7.5625 * ( k -= ( 2.625 / 2.75 ) ) * k + 0.984375;\n }\n },\n /**\n * !#en Easing in and out action with bouncing effect.\n * !#zh 弹跳效果的缓入缓出函数。\n * @method bounceInOut\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n bounceInOut: function (k) {\n if (k < 0.5) {\n return easing.bounceIn(k * 2) * 0.5;\n }\n return easing.bounceOut(k * 2 - 1) * 0.5 + 0.5;\n },\n\n /**\n * !#en Target will run action with smooth effect.\n * !#zh 平滑效果函数。\n * @method smooth\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n // t<=0: 0 | 0=1: 1\n smooth: function (t) {\n if (t <= 0) {\n return 0;\n }\n if (t >= 1) {\n return 1;\n }\n return t * t * (3 - 2 * t);\n },\n\n /**\n * !#en Target will run action with fade effect.\n * !#zh 渐褪效果函数。\n * @method fade\n * @param {Number} t The current time as a percentage of the total time.\n * @return {Number} The correct value.\n */\n // t<=0: 0 | 0=1: 1\n fade: function (t) {\n if (t <= 0) {\n return 0;\n }\n if (t >= 1) {\n return 1;\n }\n return t * t * t * (t * (t * 6 - 15) + 10);\n },\n};\n\nfunction _makeOutIn (fnIn, fnOut) {\n return function (k) {\n if (k < 0.5) {\n return fnOut(k * 2) / 2;\n }\n return fnIn(2 * k - 1) / 2 + 0.5;\n };\n}\neasing.quadOutIn = _makeOutIn(easing.quadIn, easing.quadOut);\neasing.cubicOutIn = _makeOutIn(easing.cubicIn, easing.cubicOut);\neasing.quartOutIn = _makeOutIn(easing.quartIn, easing.quartOut);\neasing.quintOutIn = _makeOutIn(easing.quintIn, easing.quintOut);\neasing.sineOutIn = _makeOutIn(easing.sineIn, easing.sineOut);\neasing.expoOutIn = _makeOutIn(easing.expoIn, easing.expoOut);\neasing.circOutIn = _makeOutIn(easing.circIn, easing.circOut);\neasing.backOutIn = _makeOutIn(easing.backIn, easing.backOut);\neasing.bounceIn = function (k) { return 1 - easing.bounceOut(1 - k); };\neasing.bounceInOut = function (k) {\n if (k < 0.5) {\n return easing.bounceIn(k * 2) * 0.5;\n }\n return easing.bounceOut(k * 2 - 1) * 0.5 + 0.5;\n};\neasing.bounceOutIn = _makeOutIn(easing.bounceIn, easing.bounceOut);\n\n/**\n * @module cc\n */\n\n/**\n * !#en This is a Easing instance.\n * !#zh 这是一个 Easing 类实例。\n * @property easing\n * @type Easing\n */\n\ncc.easing = module.exports = easing;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nrequire('./bezier');\nrequire('./easing');\nrequire('./types');\nrequire('./motion-path-helper');\nrequire('./animation-curves');\nrequire('./animation-clip');\nrequire('./animation-manager');\nrequire('./animation-state');\nrequire('./animation-animator');\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar DynamicAnimCurve = require('./animation-curves').DynamicAnimCurve;\nvar computeRatioByType = require('./animation-curves').computeRatioByType;\n\nvar bezier = require('./bezier').bezier;\nvar binarySearch = require('../core/utils/binary-search').binarySearchEpsilon;\n\nvar v2 = cc.v2;\n\nfunction Curve (points) {\n this.points = points || [];\n this.beziers = [];\n this.ratios = [];\n this.progresses = [];\n\n this.length = 0;\n\n this.computeBeziers();\n}\nCurve.prototype.computeBeziers = function () {\n this.beziers.length = 0;\n this.ratios.length = 0;\n this.progresses.length = 0;\n this.length = 0;\n\n var bezier;\n\n for (var i = 1; i < this.points.length; i++) {\n var startPoint = this.points[i - 1];\n var endPoint = this.points[i];\n bezier = new Bezier();\n bezier.start = startPoint.pos;\n bezier.startCtrlPoint = startPoint.out;\n bezier.end = endPoint.pos;\n bezier.endCtrlPoint = endPoint.in;\n this.beziers.push(bezier);\n\n this.length += bezier.getLength();\n }\n\n var current = 0;\n for (var i = 0; i < this.beziers.length; i++) {\n bezier = this.beziers[i];\n this.ratios[i] = bezier.getLength() / this.length;\n this.progresses[i] = current = current + this.ratios[i];\n }\n\n return this.beziers;\n};\n\nfunction Bezier () {\n this.start = v2();\n this.end = v2();\n this.startCtrlPoint = v2(); // cp0, cp1\n this.endCtrlPoint = v2(); // cp2, cp3\n}\n\n// Get point at relative position in curve according to arc length\n// - u [0 .. 1]\nBezier.prototype.getPointAt = function ( u ) {\n var t = this.getUtoTmapping( u );\n return this.getPoint( t );\n};\n\n\n// Get point at time t\n// - t [0 .. 1]\nBezier.prototype.getPoint = function ( t ) {\n var x = bezier(this.start.x, this.startCtrlPoint.x, this.endCtrlPoint.x, this.end.x, t);\n var y = bezier(this.start.y, this.startCtrlPoint.y, this.endCtrlPoint.y, this.end.y, t);\n\n return new v2(x, y);\n};\n\n// Get total curve arc length\nBezier.prototype.getLength = function () {\n\n var lengths = this.getLengths();\n return lengths[ lengths.length - 1 ];\n\n};\n\n// Get list of cumulative segment lengths\nBezier.prototype.getLengths = function ( divisions ) {\n\n if ( ! divisions ) divisions = (this.__arcLengthDivisions) ? (this.__arcLengthDivisions): 200;\n\n if ( this.cacheArcLengths\n && ( this.cacheArcLengths.length === divisions + 1 )) {\n\n //console.log( \"cached\", this.cacheArcLengths );\n return this.cacheArcLengths;\n\n }\n\n var cache = [];\n var current, last = this.getPoint( 0 ), vector = v2();\n var p, sum = 0;\n\n cache.push( 0 );\n\n for ( p = 1; p <= divisions; p ++ ) {\n\n current = this.getPoint ( p / divisions );\n vector.x = last.x - current.x;\n vector.y = last.y - current.y;\n sum += vector.mag();\n cache.push( sum );\n last = current;\n\n }\n\n this.cacheArcLengths = cache;\n\n return cache; // { sums: cache, sum:sum }; Sum is in the last element.\n};\n\nBezier.prototype.getUtoTmapping = function ( u, distance ) {\n\n var arcLengths = this.getLengths();\n\n var i = 0, il = arcLengths.length;\n\n var targetArcLength; // The targeted u distance value to get\n\n if ( distance ) {\n targetArcLength = distance;\n } else {\n targetArcLength = u * arcLengths[ il - 1 ];\n }\n\n //var time = Date.now();\n\n // binary search for the index with largest value smaller than target u distance\n\n var low = 0, high = il - 1, comparison;\n\n while ( low <= high ) {\n\n i = Math.floor( low + ( high - low ) / 2 ); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats\n\n comparison = arcLengths[ i ] - targetArcLength;\n\n if ( comparison < 0 ) {\n\n low = i + 1;\n continue;\n\n } else if ( comparison > 0 ) {\n\n high = i - 1;\n continue;\n\n } else {\n\n high = i;\n break;\n\n // DONE\n\n }\n\n }\n\n i = high;\n\n //console.log('b' , i, low, high, Date.now()- time);\n\n if ( arcLengths[ i ] === targetArcLength ) {\n\n var t = i / ( il - 1 );\n return t;\n\n }\n\n // we could get finer grain at lengths, or use simple interpolatation between two points\n\n var lengthBefore = arcLengths[ i ];\n var lengthAfter = arcLengths[ i + 1 ];\n\n var segmentLength = lengthAfter - lengthBefore;\n\n // determine where we are between the 'before' and 'after' points\n\n var segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength;\n\n // add that fractional amount to t\n\n var t = ( i + segmentFraction ) / ( il -1 );\n\n return t;\n};\n\n\nfunction checkMotionPath(motionPath) {\n if (!Array.isArray(motionPath)) return false;\n\n for (let i = 0, l = motionPath.length; i < l; i++) {\n let controls = motionPath[i];\n\n if (!Array.isArray(controls) || controls.length !== 6) return false;\n }\n\n return true;\n}\n\nfunction sampleMotionPaths (motionPaths, data, duration, fps, target) {\n\n function createControlPoints(array) {\n if (array instanceof cc.Vec2) {\n return {\n in: array,\n pos: array,\n out: array\n };\n }\n else if (Array.isArray(array) && array.length === 6) {\n return {\n in: v2(array[2], array[3]),\n pos: v2(array[0], array[1]),\n out: v2(array[4], array[5])\n };\n }\n\n return {\n in: cc.Vec2.ZERO,\n pos: cc.Vec2.ZERO,\n out: cc.Vec2.ZERO\n };\n }\n\n let values = data.values = data.values.map(function (value) {\n if (Array.isArray(value)) {\n value = value.length === 2 ? cc.v2(value[0], value[1]) : cc.v3(value[0], value[1], value[2]);\n }\n return value;\n });\n\n if (motionPaths.length === 0 || values.length === 0) {\n return;\n }\n\n let motionPathValid = false;\n for (let i = 0; i < motionPaths.length; i++) {\n let motionPath = motionPaths[i];\n if (motionPath && !checkMotionPath(motionPath)) {\n cc.errorID(3904, target ? target.name : '', 'position', i);\n motionPath = null;\n }\n if (motionPath && motionPath.length > 0) {\n motionPathValid = true;\n break;\n }\n }\n\n if (!motionPathValid) {\n return;\n }\n\n if (values.length === 1) {\n return;\n }\n\n var types = data.types;\n var ratios = data.ratios;\n\n var newValues = data.values = [];\n var newTypes = data.types = [];\n var newRatios = data.ratios = [];\n\n function addNewDatas (value, type, ratio) {\n newValues.push(value);\n newTypes.push(type);\n newRatios.push(ratio);\n }\n\n // ensure every ratio section's length is the same\n var startRatioOffset = 0;\n\n var EPSILON = 1e-6;\n var newType = DynamicAnimCurve.Linear;\n\n // do not need to compute last path\n for (var i = 0, l = motionPaths.length; i < l-1; i++) {\n var motionPath = motionPaths[i];\n\n var ratio = ratios[i];\n var nextRatio = ratios[i + 1];\n var betweenRatio = nextRatio - ratio;\n\n var value = values[i];\n var nextValue = values[i + 1];\n\n var type = types[i];\n\n var results = [];\n var progress = startRatioOffset / betweenRatio;\n var speed = 1 / (betweenRatio * duration * fps);\n var finalProgress;\n\n if (motionPath && motionPath.length > 0) {\n var points = [];\n points.push(createControlPoints(value));\n\n for (var j = 0, l2 = motionPath.length; j < l2; j++) {\n var controlPoints = createControlPoints(motionPath[j]);\n points.push(controlPoints);\n }\n\n points.push(createControlPoints(nextValue));\n\n // create Curve to compute beziers\n var curve = new Curve(points);\n curve.computeBeziers();\n\n // sample beziers\n var progresses = curve.progresses;\n\n while ( 1 - progress > EPSILON) {\n finalProgress = progress;\n\n finalProgress = computeRatioByType(finalProgress, type);\n\n var pos, bezier, normal, length;\n\n if (finalProgress < 0) {\n bezier = curve.beziers[0];\n length = (0 - finalProgress) * bezier.getLength();\n normal = bezier.start.sub(bezier.endCtrlPoint).normalize();\n pos = bezier.start.add(normal.mul(length));\n }\n else if (finalProgress > 1) {\n bezier = curve.beziers[curve.beziers.length - 1];\n length = (finalProgress - 1) * bezier.getLength();\n normal = bezier.end.sub(bezier.startCtrlPoint).normalize();\n pos = bezier.end.add(normal.mul(length));\n }\n else {\n var bezierIndex = binarySearch(progresses, finalProgress);\n if (bezierIndex < 0) bezierIndex = ~bezierIndex;\n\n finalProgress -= bezierIndex > 0 ? progresses[bezierIndex - 1] : 0;\n finalProgress = finalProgress / curve.ratios[bezierIndex];\n\n pos = curve.beziers[bezierIndex].getPointAt(finalProgress);\n }\n\n results.push(pos);\n progress += speed;\n }\n\n }\n else {\n while ( 1 - progress > EPSILON) {\n finalProgress = progress;\n\n finalProgress = computeRatioByType(finalProgress, type);\n\n results.push(value.lerp(nextValue, finalProgress));\n\n progress += speed;\n }\n }\n\n newType = type === 'constant' ? type : DynamicAnimCurve.Linear;\n\n for (var j = 0, l2 = results.length; j < l2; j++) {\n var newRatio = ratio + startRatioOffset + speed * j * betweenRatio;\n addNewDatas(results[j], newType, newRatio);\n }\n\n if (Math.abs(progress - 1) > EPSILON) // progress > 1\n startRatioOffset = (progress - 1) * betweenRatio;\n else\n startRatioOffset = 0;\n }\n\n if (ratios[ratios.length - 1] !== newRatios[newRatios.length -1]) {\n addNewDatas(values[values.length - 1], newType, ratios[ratios.length - 1]);\n }\n}\n\nif (CC_TEST) {\n cc._Test.sampleMotionPaths = sampleMotionPaths;\n}\n\nmodule.exports = {\n sampleMotionPaths: sampleMotionPaths,\n Curve: Curve,\n Bezier: Bezier\n};\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar js = cc.js;\nconst debug = require('../core/CCDebug');\n\n/**\n * @class Playable\n *\n */\nfunction Playable () {\n this._isPlaying = false;\n this._isPaused = false;\n this._stepOnce = false;\n}\n\nvar prototype = Playable.prototype;\n\n/**\n * !#en Is playing or paused in play mode?\n * !#zh 当前是否正在播放。\n * @property isPlaying\n * @type {boolean}\n * @default false\n * @readOnly\n */\njs.get(prototype, 'isPlaying', function () {\n return this._isPlaying;\n}, true);\n\n/**\n * !#en Is currently paused? This can be true even if in edit mode(isPlaying == false).\n * !#zh 当前是否正在暂停\n * @property isPaused\n * @type {boolean}\n * @default false\n * @readOnly\n */\njs.get(prototype, 'isPaused', function () {\n return this._isPaused;\n}, true);\n\n// virtual\n\nvar virtual = function () {};\n/**\n * @method onPlay\n * @private\n */\nprototype.onPlay = virtual;\n/**\n * @method onPause\n * @private\n */\nprototype.onPause = virtual;\n/**\n * @method onResume\n * @private\n */\nprototype.onResume = virtual;\n/**\n * @method onStop\n * @private\n */\nprototype.onStop = virtual;\n/**\n * @method onError\n * @param {string} errorCode\n * @private\n */\nprototype.onError = virtual;\n\n// public\n\n/**\n * !#en Play this animation.\n * !#zh 播放动画。\n * @method play\n */\nprototype.play = function () {\n if (this._isPlaying) {\n if (this._isPaused) {\n this._isPaused = false;\n this.onResume();\n }\n else {\n this.onError(debug.getError(3912));\n }\n }\n else {\n this._isPlaying = true;\n this.onPlay();\n }\n};\n\n/**\n * !#en Stop this animation.\n * !#zh 停止动画播放。\n * @method stop\n */\nprototype.stop = function () {\n if (this._isPlaying) {\n this._isPlaying = false;\n this.onStop();\n\n // need reset pause flag after onStop\n this._isPaused = false;\n }\n};\n\n/**\n * !#en Pause this animation.\n * !#zh 暂停动画。\n * @method pause\n */\nprototype.pause = function () {\n if (this._isPlaying && !this._isPaused) {\n this._isPaused = true;\n this.onPause();\n }\n};\n\n/**\n * !#en Resume this animation.\n * !#zh 重新播放动画。\n * @method resume\n */\nprototype.resume = function () {\n if (this._isPlaying && this._isPaused) {\n this._isPaused = false;\n this.onResume();\n }\n};\n\n/**\n * !#en Perform a single frame step.\n * !#zh 执行一帧动画。\n * @method step\n */\nprototype.step = function () {\n this.pause();\n this._stepOnce = true;\n if (!this._isPlaying) {\n this.play();\n }\n};\n\nmodule.exports = Playable;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar WrapModeMask = {\n Loop: 1 << 1,\n ShouldWrap: 1 << 2,\n // Reserved: 1 << 3,\n PingPong: 1 << 4 | 1 << 1 | 1 << 2, // Loop, ShouldWrap\n Reverse: 1 << 5 | 1 << 2, // ShouldWrap\n};\n\n/**\n * !#en Specifies how time is treated when it is outside of the keyframe range of an Animation.\n * !#zh 动画使用的循环模式。\n * @enum WrapMode\n * @memberof cc\n */\nvar WrapMode = cc.Enum({\n\n /**\n * !#en Reads the default wrap mode set higher up.\n * !#zh 向 Animation Component 或者 AnimationClip 查找 wrapMode\n * @property {Number} Default\n */\n Default: 0,\n\n /**\n * !#en All iterations are played as specified.\n * !#zh 动画只播放一遍\n * @property {Number} Normal\n */\n Normal: 1,\n\n /**\n * !#en All iterations are played in the reverse direction from the way they are specified.\n * !#zh 从最后一帧或结束位置开始反向播放,到第一帧或开始位置停止\n * @property {Number} Reverse\n */\n Reverse: WrapModeMask.Reverse,\n\n /**\n * !#en When time reaches the end of the animation, time will continue at the beginning.\n * !#zh 循环播放\n * @property {Number} Loop\n */\n Loop: WrapModeMask.Loop,\n\n /**\n * !#en All iterations are played in the reverse direction from the way they are specified.\n * And when time reaches the start of the animation, time will continue at the ending.\n * !#zh 反向循环播放\n * @property {Number} LoopReverse\n */\n LoopReverse: WrapModeMask.Loop | WrapModeMask.Reverse,\n\n /**\n * !#en Even iterations are played as specified, odd iterations are played in the reverse direction from the way they\n * are specified.\n * !#zh 从第一帧播放到最后一帧,然后反向播放回第一帧,到第一帧后再正向播放,如此循环\n * @property {Number} PingPong\n */\n PingPong: WrapModeMask.PingPong,\n\n /**\n * !#en Even iterations are played in the reverse direction from the way they are specified, odd iterations are played\n * as specified.\n * !#zh 从最后一帧开始反向播放,其他同 PingPong\n * @property {Number} PingPongReverse\n */\n PingPongReverse: WrapModeMask.PingPong | WrapModeMask.Reverse\n});\n\ncc.WrapMode = WrapMode;\n\n// For internal\nfunction WrappedInfo (info) {\n if (info) {\n this.set(info);\n return;\n }\n\n this.ratio = 0;\n this.time = 0;\n this.direction = 1;\n this.stopped = true;\n this.iterations = 0;\n this.frameIndex = undefined;\n}\n\nWrappedInfo.prototype.set = function (info) {\n this.ratio = info.ratio;\n this.time = info.time;\n this.direction = info.direction;\n this.stopped = info.stopped;\n this.iterations = info.iterations;\n this.frameIndex = info.frameIndex;\n};\n\nmodule.exports = {\n WrapModeMask,\n WrapMode,\n WrappedInfo\n};\n","/****************************************************************************\n Copyright (c) 2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst utils = require('./platform/utils');\nconst debugInfos = require('../../DebugInfos') || {};\nconst ERROR_MAP_URL = 'https://github.com/cocos-creator/engine/blob/master/EngineErrorMap.md';\n\n// the html element displays log in web page (DebugMode.INFO_FOR_WEB_PAGE)\nlet logList;\n\n/**\n * @module cc\n */\n\ncc.log = cc.warn = cc.error = cc.assert = console.log.bind ? console.log.bind(console) : console.log;\n\nlet resetDebugSetting = function (mode) {\n // reset\n cc.log = cc.warn = cc.error = cc.assert = function () {};\n\n if (mode === DebugMode.NONE)\n return;\n\n if (mode > DebugMode.ERROR) {\n //log to web page\n\n function logToWebPage (msg) {\n if (!cc.game.canvas)\n return;\n\n if (!logList) {\n var logDiv = document.createElement(\"Div\");\n logDiv.setAttribute(\"id\", \"logInfoDiv\");\n logDiv.setAttribute(\"width\", \"200\");\n logDiv.setAttribute(\"height\", cc.game.canvas.height);\n var logDivStyle = logDiv.style;\n logDivStyle.zIndex = \"99999\";\n logDivStyle.position = \"absolute\";\n logDivStyle.top = logDivStyle.left = \"0\";\n\n logList = document.createElement(\"textarea\");\n logList.setAttribute(\"rows\", \"20\");\n logList.setAttribute(\"cols\", \"30\");\n logList.setAttribute(\"disabled\", \"true\");\n var logListStyle = logList.style;\n logListStyle.backgroundColor = \"transparent\";\n logListStyle.borderBottom = \"1px solid #cccccc\";\n logListStyle.borderTopWidth = logListStyle.borderLeftWidth = logListStyle.borderRightWidth = \"0px\";\n logListStyle.borderTopStyle = logListStyle.borderLeftStyle = logListStyle.borderRightStyle = \"none\";\n logListStyle.padding = \"0px\";\n logListStyle.margin = 0;\n\n logDiv.appendChild(logList);\n cc.game.canvas.parentNode.appendChild(logDiv);\n }\n\n logList.value = logList.value + msg + \"\\r\\n\";\n logList.scrollTop = logList.scrollHeight;\n }\n\n cc.error = function () {\n logToWebPage(\"ERROR : \" + cc.js.formatStr.apply(null, arguments));\n };\n cc.assert = function (cond, msg) {\n 'use strict';\n if (!cond && msg) {\n msg = cc.js.formatStr.apply(null, cc.js.shiftArguments.apply(null, arguments));\n logToWebPage(\"ASSERT: \" + msg);\n }\n };\n if (mode !== DebugMode.ERROR_FOR_WEB_PAGE) {\n cc.warn = function () {\n logToWebPage(\"WARN : \" + cc.js.formatStr.apply(null, arguments));\n };\n }\n if (mode === DebugMode.INFO_FOR_WEB_PAGE) {\n cc.log = function () {\n logToWebPage(cc.js.formatStr.apply(null, arguments));\n };\n }\n }\n else if (console && console.log.apply) {//console is null when user doesn't open dev tool on IE9\n //log to console\n\n // For JSB\n if (!console.error) console.error = console.log;\n if (!console.warn) console.warn = console.log;\n\n /**\n * !#en\n * Outputs an error message to the Cocos Creator Console (editor) or Web Console (runtime).
\n * - In Cocos Creator, error is red.
\n * - In Chrome, error have a red icon along with red message text.
\n * !#zh\n * 输出错误消息到 Cocos Creator 编辑器的 Console 或运行时页面端的 Console 中。
\n * - 在 Cocos Creator 中,错误信息显示是红色的。
\n * - 在 Chrome 中,错误信息有红色的图标以及红色的消息文本。
\n *\n * @method error\n * @param {any} msg - A JavaScript string containing zero or more substitution strings.\n * @param {any} ...subst - JavaScript objects with which to replace substitution strings within msg. This gives you additional control over the format of the output.\n */\n if (CC_EDITOR) {\n cc.error = Editor.error;\n }\n else if (console.error.bind) {\n // use bind to avoid pollute call stacks\n cc.error = console.error.bind(console);\n }\n else {\n cc.error = CC_JSB || CC_RUNTIME ? console.error : function () {\n return console.error.apply(console, arguments);\n };\n }\n cc.assert = function (cond, msg) {\n if (!cond) {\n if (msg) {\n msg = cc.js.formatStr.apply(null, cc.js.shiftArguments.apply(null, arguments));\n }\n if (CC_DEV) {\n debugger;\n }\n if (CC_TEST) {\n ok(false, msg);\n }\n else {\n throw new Error(msg);\n }\n }\n }\n }\n if (mode !== DebugMode.ERROR) {\n /**\n * !#en\n * Outputs a warning message to the Cocos Creator Console (editor) or Web Console (runtime).\n * - In Cocos Creator, warning is yellow.\n * - In Chrome, warning have a yellow warning icon with the message text.\n * !#zh\n * 输出警告消息到 Cocos Creator 编辑器的 Console 或运行时 Web 端的 Console 中。
\n * - 在 Cocos Creator 中,警告信息显示是黄色的。
\n * - 在 Chrome 中,警告信息有着黄色的图标以及黄色的消息文本。
\n * @method warn\n * @param {any} msg - A JavaScript string containing zero or more substitution strings.\n * @param {any} ...subst - JavaScript objects with which to replace substitution strings within msg. This gives you additional control over the format of the output.\n */\n if (CC_EDITOR) {\n cc.warn = Editor.warn;\n }\n else if (console.warn.bind) {\n // use bind to avoid pollute call stacks\n cc.warn = console.warn.bind(console);\n }\n else {\n cc.warn = CC_JSB || CC_RUNTIME ? console.warn : function () {\n return console.warn.apply(console, arguments);\n };\n }\n }\n if (CC_EDITOR) {\n cc.log = Editor.log;\n }\n else if (mode === DebugMode.INFO) {\n /**\n * !#en Outputs a message to the Cocos Creator Console (editor) or Web Console (runtime).\n * !#zh 输出一条消息到 Cocos Creator 编辑器的 Console 或运行时 Web 端的 Console 中。\n * @method log\n * @param {String|any} msg - A JavaScript string containing zero or more substitution strings.\n * @param {any} ...subst - JavaScript objects with which to replace substitution strings within msg. This gives you additional control over the format of the output.\n */\n if (CC_JSB || CC_RUNTIME) {\n if (scriptEngineType === \"JavaScriptCore\") {\n // console.log has to use `console` as its context for iOS 8~9. Therefore, apply it.\n cc.log = function () {\n return console.log.apply(console, arguments);\n };\n } else {\n cc.log = console.log;\n }\n }\n else if (console.log.bind) {\n // use bind to avoid pollute call stacks\n cc.log = console.log.bind(console);\n }\n else {\n cc.log = function () {\n return console.log.apply(console, arguments);\n };\n }\n }\n};\n\ncc._throw = CC_EDITOR ? Editor.error : function (error) {\n utils.callInNextTick(function () {\n throw error;\n });\n};\n\nfunction getTypedFormatter (type) {\n return function () {\n var id = arguments[0];\n var msg = CC_DEBUG ? (debugInfos[id] || 'unknown id') : `${type} ${id}, please go to ${ERROR_MAP_URL}#${id} to see details.`;\n if (arguments.length === 1) {\n return msg;\n }\n else if (arguments.length === 2) {\n return CC_DEBUG ? cc.js.formatStr(msg, arguments[1]) :\n msg + ' Arguments: ' + arguments[1];\n }\n else {\n var argsArray = cc.js.shiftArguments.apply(null, arguments);\n return CC_DEBUG ? cc.js.formatStr.apply(null, [msg].concat(argsArray)) :\n msg + ' Arguments: ' + argsArray.join(', ');\n }\n };\n}\n\nvar logFormatter = getTypedFormatter('Log');\ncc.logID = function () {\n cc.log(logFormatter.apply(null, arguments));\n};\n\nvar warnFormatter = getTypedFormatter('Warning');\ncc.warnID = function () {\n cc.warn(warnFormatter.apply(null, arguments));\n};\n\nvar errorFormatter = getTypedFormatter('Error');\ncc.errorID = function () {\n cc.error(errorFormatter.apply(null, arguments));\n};\n\nvar assertFormatter = getTypedFormatter('Assert');\ncc.assertID = function (cond) {\n 'use strict';\n if (cond) {\n return;\n }\n cc.assert(false, assertFormatter.apply(null, cc.js.shiftArguments.apply(null, arguments)));\n};\n\n/**\n* !#en Enum for debug modes.\n* !#zh 调试模式\n* @enum debug.DebugMode\n* @memberof cc\n */\nvar DebugMode = cc.Enum({\n /**\n * !#en The debug mode none.\n * !#zh 禁止模式,禁止显示任何日志信息。\n * @property NONE\n * @type {Number}\n * @static\n */\n NONE: 0,\n /**\n * !#en The debug mode info.\n * !#zh 信息模式,在 console 中显示所有日志。\n * @property INFO\n * @type {Number}\n * @static\n */\n INFO: 1,\n /**\n * !#en The debug mode warn.\n * !#zh 警告模式,在 console 中只显示 warn 级别以上的(包含 error)日志。\n * @property WARN\n * @type {Number}\n * @static\n */\n WARN: 2,\n /**\n * !#en The debug mode error.\n * !#zh 错误模式,在 console 中只显示 error 日志。\n * @property ERROR\n * @type {Number}\n * @static\n */\n ERROR: 3,\n /**\n * !#en The debug mode info for web page.\n * !#zh 信息模式(仅 WEB 端有效),在画面上输出所有信息。\n * @property INFO_FOR_WEB_PAGE\n * @type {Number}\n * @static\n */\n INFO_FOR_WEB_PAGE: 4,\n /**\n * !#en The debug mode warn for web page.\n * !#zh 警告模式(仅 WEB 端有效),在画面上输出 warn 级别以上的(包含 error)信息。\n * @property WARN_FOR_WEB_PAGE\n * @type {Number}\n * @static\n */\n WARN_FOR_WEB_PAGE: 5,\n /**\n * !#en The debug mode error for web page.\n * !#zh 错误模式(仅 WEB 端有效),在画面上输出 error 信息。\n * @property ERROR_FOR_WEB_PAGE\n * @type {Number}\n * @static\n */\n ERROR_FOR_WEB_PAGE: 6\n});\n/**\n * !#en An object to boot the game.\n * !#zh 包含游戏主体信息并负责驱动游戏的游戏对象。\n * @class debug\n * @main\n * @static\n */\nmodule.exports = cc.debug = {\n DebugMode: DebugMode,\n\n _resetDebugSetting: resetDebugSetting,\n\n /**\n * !#en Gets error message with the error id and possible parameters.\n * !#zh 通过 error id 和必要的参数来获取错误信息。\n * @method getError\n * @param {Number} errorId\n * @param {any} [param]\n * @return {String}\n */\n getError: getTypedFormatter('ERROR'),\n\n /**\n * !#en Returns whether or not to display the FPS informations.\n * !#zh 是否显示 FPS 信息。\n * @method isDisplayStats\n * @return {Boolean}\n */\n isDisplayStats: function () {\n return cc.profiler ? cc.profiler.isShowingStats() : false;\n },\n\n /**\n * !#en Sets whether display the FPS on the bottom-left corner.\n * !#zh 设置是否在左下角显示 FPS。\n * @method setDisplayStats\n * @param {Boolean} displayStats\n */\n setDisplayStats: function (displayStats) {\n if (cc.profiler && cc.game.renderType !== cc.game.RENDER_TYPE_CANVAS) {\n displayStats ? cc.profiler.showStats() : cc.profiler.hideStats();\n cc.game.config.showFPS = !!displayStats;\n }\n },\n}","/****************************************************************************\n Copyright (c) 2008-2010 Ricardo Quesada\n Copyright (c) 2011-2012 cocos2d-x.org\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos2d-x.org\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst EventTarget = require('./event/event-target');\nconst ComponentScheduler = require('./component-scheduler');\nconst NodeActivator = require('./node-activator');\nconst Obj = require('./platform/CCObject');\nconst game = require('./CCGame');\nconst renderer = require('./renderer');\nconst eventManager = require('./event-manager');\nconst Scheduler = require('./CCScheduler');\n\n//----------------------------------------------------------------------------------------------------------------------\n\n/**\n * !#en\n *

\n * ATTENTION: USE cc.director INSTEAD OF cc.Director.
\n * cc.director is a singleton object which manage your game's logic flow.
\n * Since the cc.director is a singleton, you don't need to call any constructor or create functions,
\n * the standard way to use it is by calling:
\n * - cc.director.methodName();
\n *\n * It creates and handle the main Window and manages how and when to execute the Scenes.
\n *
\n * The cc.director is also responsible for:
\n * - initializing the OpenGL context
\n * - setting the OpenGL pixel format (default on is RGB565)
\n * - setting the OpenGL buffer depth (default on is 0-bit)
\n * - setting the color for clear screen (default one is BLACK)
\n * - setting the projection (default one is 3D)
\n * - setting the orientation (default one is Portrait)
\n *
\n *
\n * The cc.director also sets the default OpenGL context:
\n * - GL_TEXTURE_2D is enabled
\n * - GL_VERTEX_ARRAY is enabled
\n * - GL_COLOR_ARRAY is enabled
\n * - GL_TEXTURE_COORD_ARRAY is enabled
\n *

\n *

\n * cc.director also synchronizes timers with the refresh rate of the display.
\n * Features and Limitations:
\n * - Scheduled timers & drawing are synchronizes with the refresh rate of the display
\n * - Only supports animation intervals of 1/60 1/30 & 1/15
\n *

\n *\n * !#zh\n *

\n * 注意:用 cc.director 代替 cc.Director。
\n * cc.director 一个管理你的游戏的逻辑流程的单例对象。
\n * 由于 cc.director 是一个单例,你不需要调用任何构造函数或创建函数,
\n * 使用它的标准方法是通过调用:
\n * - cc.director.methodName();\n *
\n * 它创建和处理主窗口并且管理什么时候执行场景。
\n *
\n * cc.director 还负责:
\n * - 初始化 OpenGL 环境。
\n * - 设置OpenGL像素格式。(默认是 RGB565)
\n * - 设置OpenGL缓冲区深度 (默认是 0-bit)
\n * - 设置空白场景的颜色 (默认是 黑色)
\n * - 设置投影 (默认是 3D)
\n * - 设置方向 (默认是 Portrait)
\n *
\n * cc.director 设置了 OpenGL 默认环境
\n * - GL_TEXTURE_2D 启用。
\n * - GL_VERTEX_ARRAY 启用。
\n * - GL_COLOR_ARRAY 启用。
\n * - GL_TEXTURE_COORD_ARRAY 启用。
\n *

\n *

\n * cc.director 也同步定时器与显示器的刷新速率。\n *
\n * 特点和局限性:
\n * - 将计时器 & 渲染与显示器的刷新频率同步。
\n * - 只支持动画的间隔 1/60 1/30 & 1/15。
\n *

\n *\n * @class Director\n * @extends EventTarget\n */\ncc.Director = function () {\n EventTarget.call(this);\n\n // paused?\n this._paused = false;\n // purge?\n this._purgeDirectorInNextLoop = false;\n\n this._winSizeInPoints = null;\n\n // scenes\n this._scene = null;\n this._loadingScene = '';\n\n // FPS\n this._totalFrames = 0;\n this._lastUpdate = 0;\n this._deltaTime = 0.0;\n this._startTime = 0.0;\n\n // ParticleSystem max step delta time\n this._maxParticleDeltaTime = 0.0;\n\n // Scheduler for user registration update\n this._scheduler = null;\n // Scheduler for life-cycle methods in component\n this._compScheduler = null;\n // Node activator\n this._nodeActivator = null;\n // Action manager\n this._actionManager = null;\n\n var self = this;\n game.on(game.EVENT_SHOW, function () {\n self._lastUpdate = performance.now();\n });\n\n game.once(game.EVENT_ENGINE_INITED, this.init, this);\n};\n\ncc.Director.prototype = {\n constructor: cc.Director,\n init: function () {\n this._totalFrames = 0;\n this._lastUpdate = performance.now();\n this._startTime = this._lastUpdate;\n this._paused = false;\n this._purgeDirectorInNextLoop = false;\n this._winSizeInPoints = cc.size(0, 0);\n this._scheduler = new Scheduler();\n\n if (cc.ActionManager) {\n this._actionManager = new cc.ActionManager();\n this._scheduler.scheduleUpdate(this._actionManager, Scheduler.PRIORITY_SYSTEM, false);\n } else {\n this._actionManager = null;\n }\n\n this.sharedInit();\n return true;\n },\n\n /*\n * Manage all init process shared between the web engine and jsb engine.\n * All platform independent init process should be occupied here.\n */\n sharedInit: function () {\n this._compScheduler = new ComponentScheduler();\n this._nodeActivator = new NodeActivator();\n\n // Event manager\n if (eventManager) {\n eventManager.setEnabled(true);\n }\n\n // Animation manager\n if (cc.AnimationManager) {\n this._animationManager = new cc.AnimationManager();\n this._scheduler.scheduleUpdate(this._animationManager, Scheduler.PRIORITY_SYSTEM, false);\n }\n else {\n this._animationManager = null;\n }\n\n // collision manager\n if (cc.CollisionManager) {\n this._collisionManager = new cc.CollisionManager();\n this._scheduler.scheduleUpdate(this._collisionManager, Scheduler.PRIORITY_SYSTEM, false);\n }\n else {\n this._collisionManager = null;\n }\n\n // physics manager\n if (cc.PhysicsManager) {\n this._physicsManager = new cc.PhysicsManager();\n this._scheduler.scheduleUpdate(this._physicsManager, Scheduler.PRIORITY_SYSTEM, false);\n }\n else {\n this._physicsManager = null;\n }\n\n // physics 3d manager\n if (cc.Physics3DManager && (CC_PHYSICS_BUILTIN || CC_PHYSICS_CANNON)) {\n this._physics3DManager = new cc.Physics3DManager();\n this._scheduler.scheduleUpdate(this._physics3DManager, Scheduler.PRIORITY_SYSTEM, false);\n } else {\n this._physics3DManager = null;\n }\n\n // WidgetManager\n if (cc._widgetManager) {\n cc._widgetManager.init(this);\n }\n },\n\n /**\n * calculates delta time since last time it was called\n */\n calculateDeltaTime: function (now) {\n if (!now) now = performance.now();\n\n // avoid delta time from being negative\n // negative deltaTime would be caused by the precision of now's value, for details please see: https://developer.mozilla.org/zh-CN/docs/Web/API/window/requestAnimationFrame\n this._deltaTime = now > this._lastUpdate ? (now - this._lastUpdate) / 1000 : 0;\n if (CC_DEBUG && (this._deltaTime > 1))\n this._deltaTime = 1 / 60.0;\n\n this._lastUpdate = now;\n },\n\n /**\n * !#en\n * Converts a view coordinate to an WebGL coordinate
\n * Useful to convert (multi) touches coordinates to the current layout (portrait or landscape)
\n * Implementation can be found in CCDirectorWebGL.\n * !#zh 将触摸点的屏幕坐标转换为 WebGL View 下的坐标。\n * @method convertToGL\n * @param {Vec2} uiPoint\n * @return {Vec2}\n * @deprecated since v2.0\n */\n convertToGL: function (uiPoint) {\n var container = game.container;\n var view = cc.view;\n var box = container.getBoundingClientRect();\n var left = box.left + window.pageXOffset - container.clientLeft;\n var top = box.top + window.pageYOffset - container.clientTop;\n var x = view._devicePixelRatio * (uiPoint.x - left);\n var y = view._devicePixelRatio * (top + box.height - uiPoint.y);\n return view._isRotated ? cc.v2(view._viewportRect.width - y, x) : cc.v2(x, y);\n },\n\n /**\n * !#en\n * Converts an OpenGL coordinate to a view coordinate
\n * Useful to convert node points to window points for calls such as glScissor
\n * Implementation can be found in CCDirectorWebGL.\n * !#zh 将触摸点的 WebGL View 坐标转换为屏幕坐标。\n * @method convertToUI\n * @param {Vec2} glPoint\n * @return {Vec2}\n * @deprecated since v2.0\n */\n convertToUI: function (glPoint) {\n var container = game.container;\n var view = cc.view;\n var box = container.getBoundingClientRect();\n var left = box.left + window.pageXOffset - container.clientLeft;\n var top = box.top + window.pageYOffset - container.clientTop;\n var uiPoint = cc.v2(0, 0);\n if (view._isRotated) {\n uiPoint.x = left + glPoint.y / view._devicePixelRatio;\n uiPoint.y = top + box.height - (view._viewportRect.width - glPoint.x) / view._devicePixelRatio;\n }\n else {\n uiPoint.x = left + glPoint.x * view._devicePixelRatio;\n uiPoint.y = top + box.height - glPoint.y * view._devicePixelRatio;\n }\n return uiPoint;\n },\n\n /**\n * End the life of director in the next frame\n * @method end\n */\n end: function () {\n this._purgeDirectorInNextLoop = true;\n },\n\n /**\n * !#en\n * Returns the size of the WebGL view in points.
\n * It takes into account any possible rotation (device orientation) of the window.\n * !#zh 获取视图的大小,以点为单位。\n * @method getWinSize\n * @return {Size}\n * @deprecated since v2.0\n */\n getWinSize: function () {\n return cc.size(cc.winSize);\n },\n\n /**\n * !#en\n * Returns the size of the OpenGL view in pixels.
\n * It takes into account any possible rotation (device orientation) of the window.
\n * On Mac winSize and winSizeInPixels return the same value.\n * (The pixel here refers to the resource resolution. If you want to get the physics resolution of device, you need to use cc.view.getFrameSize())\n * !#zh\n * 获取视图大小,以像素为单位(这里的像素指的是资源分辨率。\n * 如果要获取屏幕物理分辨率,需要用 cc.view.getFrameSize())\n * @method getWinSizeInPixels\n * @return {Size}\n * @deprecated since v2.0\n */\n getWinSizeInPixels: function () {\n return cc.size(cc.winSize);\n },\n\n /**\n * !#en Pause the director's ticker, only involve the game logic execution.\n * It won't pause the rendering process nor the event manager.\n * If you want to pause the entier game including rendering, audio and event, \n * please use {{#crossLink \"Game.pause\"}}cc.game.pause{{/crossLink}}\n * !#zh 暂停正在运行的场景,该暂停只会停止游戏逻辑执行,但是不会停止渲染和 UI 响应。\n * 如果想要更彻底得暂停游戏,包含渲染,音频和事件,请使用 {{#crossLink \"Game.pause\"}}cc.game.pause{{/crossLink}}。\n * @method pause\n */\n pause: function () {\n if (this._paused)\n return;\n this._paused = true;\n },\n\n /**\n * Removes cached all cocos2d cached data.\n * @deprecated since v2.0\n */\n purgeCachedData: function () {\n cc.assetManager.releaseAll();\n },\n\n /**\n * Purge the cc.director itself, including unschedule all schedule, remove all event listeners, clean up and exit the running scene, stops all animations, clear cached data.\n */\n purgeDirector: function () {\n //cleanup scheduler\n this._scheduler.unscheduleAll();\n this._compScheduler.unscheduleAll();\n\n this._nodeActivator.reset();\n\n // Disable event dispatching\n if (eventManager)\n eventManager.setEnabled(false);\n\n if (!CC_EDITOR) {\n if (cc.isValid(this._scene)) {\n this._scene.destroy();\n }\n this._scene = null;\n\n cc.renderer.clear();\n cc.assetManager.builtins.clear();\n }\n\n cc.game.pause();\n\n // Clear all caches\n cc.assetManager.releaseAll();\n },\n\n /**\n * Reset the cc.director, can be used to restart the director after purge\n */\n reset: function () {\n this.purgeDirector();\n\n if (eventManager)\n eventManager.setEnabled(true);\n\n // Action manager\n if (this._actionManager){\n this._scheduler.scheduleUpdate(this._actionManager, cc.Scheduler.PRIORITY_SYSTEM, false);\n }\n\n // Animation manager\n if (this._animationManager) {\n this._scheduler.scheduleUpdate(this._animationManager, cc.Scheduler.PRIORITY_SYSTEM, false);\n }\n\n // Collider manager\n if (this._collisionManager) {\n this._scheduler.scheduleUpdate(this._collisionManager, cc.Scheduler.PRIORITY_SYSTEM, false);\n }\n\n // Physics manager\n if (this._physicsManager) {\n this._scheduler.scheduleUpdate(this._physicsManager, cc.Scheduler.PRIORITY_SYSTEM, false);\n }\n\n cc.game.resume();\n },\n\n /**\n * !#en\n * Run a scene. Replaces the running scene with a new one or enter the first scene.
\n * The new scene will be launched immediately.\n * !#zh 立刻切换指定场景。\n * @method runSceneImmediate\n * @param {Scene|SceneAsset} scene - The need run scene.\n * @param {Function} [onBeforeLoadScene] - The function invoked at the scene before loading.\n * @param {Function} [onLaunched] - The function invoked at the scene after launch.\n */\n runSceneImmediate: function (scene, onBeforeLoadScene, onLaunched) {\n cc.assertID(scene instanceof cc.Scene || scene instanceof cc.SceneAsset, 1216);\n\n if (scene instanceof cc.SceneAsset) scene = scene.scene;\n\n CC_BUILD && CC_DEBUG && console.time('InitScene');\n scene._load(); // ensure scene initialized\n CC_BUILD && CC_DEBUG && console.timeEnd('InitScene');\n\n // Re-attach or replace persist nodes\n CC_BUILD && CC_DEBUG && console.time('AttachPersist');\n var persistNodeList = Object.keys(game._persistRootNodes).map(function (x) {\n return game._persistRootNodes[x];\n });\n for (let i = 0; i < persistNodeList.length; i++) {\n let node = persistNodeList[i];\n var existNode = scene.getChildByUuid(node.uuid);\n if (existNode) {\n // scene also contains the persist node, select the old one\n var index = existNode.getSiblingIndex();\n existNode._destroyImmediate();\n scene.insertChild(node, index);\n }\n else {\n node.parent = scene;\n }\n }\n CC_BUILD && CC_DEBUG && console.timeEnd('AttachPersist');\n\n var oldScene = this._scene;\n if (!CC_EDITOR) {\n // auto release assets\n CC_BUILD && CC_DEBUG && console.time('AutoRelease');\n cc.assetManager._releaseManager._autoRelease(oldScene, scene, game._persistRootNodes);\n CC_BUILD && CC_DEBUG && console.timeEnd('AutoRelease');\n }\n\n // unload scene\n CC_BUILD && CC_DEBUG && console.time('Destroy');\n if (cc.isValid(oldScene)) {\n oldScene.destroy();\n }\n\n this._scene = null;\n\n // purge destroyed nodes belongs to old scene\n Obj._deferredDestroy();\n CC_BUILD && CC_DEBUG && console.timeEnd('Destroy');\n\n if (onBeforeLoadScene) {\n onBeforeLoadScene();\n }\n this.emit(cc.Director.EVENT_BEFORE_SCENE_LAUNCH, scene);\n\n // Run an Entity Scene\n this._scene = scene;\n\n CC_BUILD && CC_DEBUG && console.time('Activate');\n scene._activate();\n CC_BUILD && CC_DEBUG && console.timeEnd('Activate');\n\n //start scene\n cc.game.resume();\n\n if (onLaunched) {\n onLaunched(null, scene);\n }\n this.emit(cc.Director.EVENT_AFTER_SCENE_LAUNCH, scene);\n },\n\n /**\n * !#en\n * Run a scene. Replaces the running scene with a new one or enter the first scene.\n * The new scene will be launched at the end of the current frame.\n * !#zh 运行指定场景。\n * @method runScene\n * @param {Scene|SceneAsset} scene - The need run scene.\n * @param {Function} [onBeforeLoadScene] - The function invoked at the scene before loading.\n * @param {Function} [onLaunched] - The function invoked at the scene after launch.\n */\n runScene: function (scene, onBeforeLoadScene, onLaunched) {\n cc.assertID(scene, 1205);\n cc.assertID(scene instanceof cc.Scene || scene instanceof cc.SceneAsset, 1216);\n\n if (scene instanceof cc.SceneAsset) scene = scene.scene;\n // ensure scene initialized\n scene._load();\n\n // Delay run / replace scene to the end of the frame\n this.once(cc.Director.EVENT_AFTER_DRAW, function () {\n this.runSceneImmediate(scene, onBeforeLoadScene, onLaunched);\n }, this);\n },\n\n /**\n * !#en Loads the scene by its name.\n * !#zh 通过场景名称进行加载场景。\n *\n * @method loadScene\n * @param {String} sceneName - The name of the scene to load.\n * @param {Function} [onLaunched] - callback, will be called after scene launched.\n * @return {Boolean} if error, return false\n */\n loadScene: function (sceneName, onLaunched, _onUnloaded) {\n if (this._loadingScene) {\n cc.warnID(1208, sceneName, this._loadingScene);\n return false;\n }\n var bundle = cc.assetManager.bundles.find(function (bundle) {\n return bundle.getSceneInfo(sceneName);\n });\n if (bundle) {\n this.emit(cc.Director.EVENT_BEFORE_SCENE_LOADING, sceneName);\n this._loadingScene = sceneName;\n var self = this;\n console.time('LoadScene ' + sceneName);\n bundle.loadScene(sceneName, function (err, scene) {\n console.timeEnd('LoadScene ' + sceneName);\n self._loadingScene = '';\n if (err) {\n err = 'Failed to load scene: ' + err;\n cc.error(err);\n onLaunched && onLaunched(err);\n }\n else {\n self.runSceneImmediate(scene, _onUnloaded, onLaunched);\n }\n });\n return true;\n }\n else {\n cc.errorID(1209, sceneName);\n return false;\n }\n },\n\n /**\n * !#en\n * Preloads the scene to reduces loading time. You can call this method at any time you want.\n * After calling this method, you still need to launch the scene by `cc.director.loadScene`.\n * It will be totally fine to call `cc.director.loadScene` at any time even if the preloading is not\n * yet finished, the scene will be launched after loaded automatically.\n * !#zh 预加载场景,你可以在任何时候调用这个方法。\n * 调用完后,你仍然需要通过 `cc.director.loadScene` 来启动场景,因为这个方法不会执行场景加载操作。\n * 就算预加载还没完成,你也可以直接调用 `cc.director.loadScene`,加载完成后场景就会启动。\n *\n * @method preloadScene\n * @param {String} sceneName - The name of the scene to preload.\n * @param {Function} [onProgress] - callback, will be called when the load progression change.\n * @param {Number} onProgress.completedCount - The number of the items that are already completed\n * @param {Number} onProgress.totalCount - The total number of the items\n * @param {Object} onProgress.item - The latest item which flow out the pipeline\n * @param {Function} [onLoaded] - callback, will be called after scene loaded.\n * @param {Error} onLoaded.error - null or the error object.\n */\n preloadScene (sceneName, onProgress, onLoaded) {\n var bundle = cc.assetManager.bundles.find(function (bundle) {\n return bundle.getSceneInfo(sceneName);\n });\n if (bundle) {\n bundle.preloadScene(sceneName, null, onProgress, onLoaded);\n }\n else {\n cc.errorID(1209, sceneName);\n return null;\n }\n },\n\n\n /**\n * !#en Resume game logic execution after pause, if the current scene is not paused, nothing will happen.\n * !#zh 恢复暂停场景的游戏逻辑,如果当前场景没有暂停将没任何事情发生。\n * @method resume\n */\n resume: function () {\n if (!this._paused) {\n return;\n }\n\n this._lastUpdate = performance.now();\n if (!this._lastUpdate) {\n cc.logID(1200);\n }\n\n this._paused = false;\n this._deltaTime = 0;\n },\n\n /**\n * !#en\n * Enables or disables WebGL depth test.
\n * Implementation can be found in CCDirectorCanvas.js/CCDirectorWebGL.js\n * !#zh 启用/禁用深度测试(在 Canvas 渲染模式下不会生效)。\n * @method setDepthTest\n * @param {Boolean} on\n * @deprecated since v2.0\n */\n setDepthTest: function (value) {\n if (!cc.Camera.main) {\n return;\n }\n cc.Camera.main.depth = !!value;\n },\n\n /**\n * !#en\n * Set color for clear screen.
\n * (Implementation can be found in CCDirectorCanvas.js/CCDirectorWebGL.js)\n * !#zh\n * 设置场景的默认擦除颜色。
\n * 支持全透明,但不支持透明度为中间值。要支持全透明需手工开启 cc.macro.ENABLE_TRANSPARENT_CANVAS。\n * @method setClearColor\n * @param {Color} clearColor\n * @deprecated since v2.0\n */\n setClearColor: function (clearColor) {\n if (!cc.Camera.main) {\n return;\n }\n cc.Camera.main.backgroundColor = clearColor;\n },\n\n /**\n * !#en Returns current logic Scene.\n * !#zh 获取当前逻辑场景。\n * @method getRunningScene\n * @private\n * @return {Scene}\n * @deprecated since v2.0\n */\n getRunningScene: function () {\n return this._scene;\n },\n\n /**\n * !#en Returns current logic Scene.\n * !#zh 获取当前逻辑场景。\n * @method getScene\n * @return {Scene}\n * @example\n * // This will help you to get the Canvas node in scene\n * cc.director.getScene().getChildByName('Canvas');\n */\n getScene: function () {\n return this._scene;\n },\n\n /**\n * !#en Returns the FPS value. Please use {{#crossLink \"Game.setFrameRate\"}}cc.game.setFrameRate{{/crossLink}} to control animation interval.\n * !#zh 获取单位帧执行时间。请使用 {{#crossLink \"Game.setFrameRate\"}}cc.game.setFrameRate{{/crossLink}} 来控制游戏帧率。\n * @method getAnimationInterval\n * @deprecated since v2.0\n * @return {Number}\n */\n getAnimationInterval: function () {\n return 1000 / game.getFrameRate();\n },\n\n /**\n * Sets animation interval, this doesn't control the main loop.\n * To control the game's frame rate overall, please use {{#crossLink \"Game.setFrameRate\"}}cc.game.setFrameRate{{/crossLink}}\n * @method setAnimationInterval\n * @deprecated since v2.0\n * @param {Number} value - The animation interval desired.\n */\n setAnimationInterval: function (value) {\n game.setFrameRate(Math.round(1000 / value));\n },\n\n /**\n * !#en Returns the delta time since last frame.\n * !#zh 获取上一帧的增量时间。\n * @method getDeltaTime\n * @return {Number}\n */\n getDeltaTime: function () {\n return this._deltaTime;\n },\n\n /**\n * !#en Returns the total passed time since game start, unit: ms\n * !#zh 获取从游戏开始到现在总共经过的时间,单位为 ms\n * @method getTotalTime\n * @return {Number}\n */\n getTotalTime: function () {\n return performance.now() - this._startTime;\n },\n\n /**\n * !#en Returns how many frames were called since the director started.\n * !#zh 获取 director 启动以来游戏运行的总帧数。\n * @method getTotalFrames\n * @return {Number}\n */\n getTotalFrames: function () {\n return this._totalFrames;\n },\n\n /**\n * !#en Returns whether or not the Director is paused.\n * !#zh 是否处于暂停状态。\n * @method isPaused\n * @return {Boolean}\n */\n isPaused: function () {\n return this._paused;\n },\n\n /**\n * !#en Returns the cc.Scheduler associated with this director.\n * !#zh 获取和 director 相关联的 cc.Scheduler。\n * @method getScheduler\n * @return {Scheduler}\n */\n getScheduler: function () {\n return this._scheduler;\n },\n\n /**\n * !#en Sets the cc.Scheduler associated with this director.\n * !#zh 设置和 director 相关联的 cc.Scheduler。\n * @method setScheduler\n * @param {Scheduler} scheduler\n */\n setScheduler: function (scheduler) {\n if (this._scheduler !== scheduler) {\n this._scheduler = scheduler;\n }\n },\n\n /**\n * !#en Returns the cc.ActionManager associated with this director.\n * !#zh 获取和 director 相关联的 cc.ActionManager(动作管理器)。\n * @method getActionManager\n * @return {ActionManager}\n */\n getActionManager: function () {\n return this._actionManager;\n },\n /**\n * !#en Sets the cc.ActionManager associated with this director.\n * !#zh 设置和 director 相关联的 cc.ActionManager(动作管理器)。\n * @method setActionManager\n * @param {ActionManager} actionManager\n */\n setActionManager: function (actionManager) {\n if (this._actionManager !== actionManager) {\n if (this._actionManager) {\n this._scheduler.unscheduleUpdate(this._actionManager);\n }\n this._actionManager = actionManager;\n this._scheduler.scheduleUpdate(this._actionManager, cc.Scheduler.PRIORITY_SYSTEM, false);\n }\n },\n\n /* \n * !#en Returns the cc.AnimationManager associated with this director.\n * !#zh 获取和 director 相关联的 cc.AnimationManager(动画管理器)。\n * @method getAnimationManager\n * @return {AnimationManager}\n */\n getAnimationManager: function () {\n return this._animationManager;\n },\n\n /**\n * !#en Returns the cc.CollisionManager associated with this director.\n * !#zh 获取和 director 相关联的 cc.CollisionManager (碰撞管理器)。\n * @method getCollisionManager\n * @return {CollisionManager}\n */\n getCollisionManager: function () {\n return this._collisionManager;\n },\n\n /**\n * !#en Returns the cc.PhysicsManager associated with this director.\n * !#zh 返回与 director 相关联的 cc.PhysicsManager (物理管理器)。\n * @method getPhysicsManager\n * @return {PhysicsManager}\n */\n getPhysicsManager: function () {\n return this._physicsManager;\n },\n\n /**\n * !#en Returns the cc.Physics3DManager associated with this director.\n * !#zh 返回与 director 相关联的 cc.Physics3DManager (物理管理器)。\n * @method getPhysics3DManager\n * @return {Physics3DManager}\n */\n getPhysics3DManager: function () {\n return this._physics3DManager;\n },\n\n // Loop management\n /*\n * Starts Animation\n * @deprecated since v2.1.2\n */\n startAnimation: function () {\n cc.game.resume();\n },\n\n /*\n * Stops animation\n * @deprecated since v2.1.2\n */\n stopAnimation: function () {\n cc.game.pause();\n },\n\n _resetDeltaTime () {\n this._lastUpdate = performance.now();\n this._deltaTime = 0;\n },\n\n /*\n * Run main loop of director\n */\n mainLoop: CC_EDITOR ? function (deltaTime, updateAnimate) {\n this._deltaTime = deltaTime;\n\n // Update\n if (!this._paused) {\n this.emit(cc.Director.EVENT_BEFORE_UPDATE);\n\n this._compScheduler.startPhase();\n this._compScheduler.updatePhase(deltaTime);\n\n if (updateAnimate) {\n this._scheduler.update(deltaTime);\n }\n\n this._compScheduler.lateUpdatePhase(deltaTime);\n\n this.emit(cc.Director.EVENT_AFTER_UPDATE);\n }\n\n // Render\n this.emit(cc.Director.EVENT_BEFORE_DRAW);\n renderer.render(this._scene, deltaTime);\n \n // After draw\n this.emit(cc.Director.EVENT_AFTER_DRAW);\n\n this._totalFrames++;\n\n } : function (now) {\n if (this._purgeDirectorInNextLoop) {\n this._purgeDirectorInNextLoop = false;\n this.purgeDirector();\n }\n else {\n // calculate \"global\" dt\n this.calculateDeltaTime(now);\n\n // Update\n if (!this._paused) {\n // before update\n this.emit(cc.Director.EVENT_BEFORE_UPDATE);\n\n // Call start for new added components\n this._compScheduler.startPhase();\n\n // Update for components\n this._compScheduler.updatePhase(this._deltaTime);\n // Engine update with scheduler\n this._scheduler.update(this._deltaTime);\n\n // Late update for components\n this._compScheduler.lateUpdatePhase(this._deltaTime);\n\n // User can use this event to do things after update\n this.emit(cc.Director.EVENT_AFTER_UPDATE);\n \n // Destroy entities that have been removed recently\n Obj._deferredDestroy();\n }\n\n // Render\n this.emit(cc.Director.EVENT_BEFORE_DRAW);\n renderer.render(this._scene, this._deltaTime);\n\n // After draw\n this.emit(cc.Director.EVENT_AFTER_DRAW);\n\n eventManager.frameUpdateListeners();\n this._totalFrames++;\n }\n },\n\n __fastOn: function (type, callback, target) {\n this.on(type, callback, target);\n },\n\n __fastOff: function (type, callback, target) {\n this.off(type, callback, target);\n },\n};\n\n// Event target\ncc.js.addon(cc.Director.prototype, EventTarget.prototype);\n\n/**\n * !#en The event projection changed of cc.Director. This event will not get triggered since v2.0\n * !#zh cc.Director 投影变化的事件。从 v2.0 开始这个事件不会再被触发\n * @property {String} EVENT_PROJECTION_CHANGED\n * @readonly\n * @static\n * @deprecated since v2.0\n */\ncc.Director.EVENT_PROJECTION_CHANGED = \"director_projection_changed\";\n\n/**\n * !#en The event which will be triggered before loading a new scene.\n * !#zh 加载新场景之前所触发的事件。\n * @event cc.Director.EVENT_BEFORE_SCENE_LOADING\n * @param {String} sceneName - The loading scene name\n */\n/**\n * !#en The event which will be triggered before loading a new scene.\n * !#zh 加载新场景之前所触发的事件。\n * @property {String} EVENT_BEFORE_SCENE_LOADING\n * @readonly\n * @static\n */\ncc.Director.EVENT_BEFORE_SCENE_LOADING = \"director_before_scene_loading\";\n\n/*\n * !#en The event which will be triggered before launching a new scene.\n * !#zh 运行新场景之前所触发的事件。\n * @event cc.Director.EVENT_BEFORE_SCENE_LAUNCH\n * @param {String} sceneName - New scene which will be launched\n */\n/**\n * !#en The event which will be triggered before launching a new scene.\n * !#zh 运行新场景之前所触发的事件。\n * @property {String} EVENT_BEFORE_SCENE_LAUNCH\n * @readonly\n * @static\n */\ncc.Director.EVENT_BEFORE_SCENE_LAUNCH = \"director_before_scene_launch\";\n\n/**\n * !#en The event which will be triggered after launching a new scene.\n * !#zh 运行新场景之后所触发的事件。\n * @event cc.Director.EVENT_AFTER_SCENE_LAUNCH\n * @param {String} sceneName - New scene which is launched\n */\n/**\n * !#en The event which will be triggered after launching a new scene.\n * !#zh 运行新场景之后所触发的事件。\n * @property {String} EVENT_AFTER_SCENE_LAUNCH\n * @readonly\n * @static\n */\ncc.Director.EVENT_AFTER_SCENE_LAUNCH = \"director_after_scene_launch\";\n\n/**\n * !#en The event which will be triggered at the beginning of every frame.\n * !#zh 每个帧的开始时所触发的事件。\n * @event cc.Director.EVENT_BEFORE_UPDATE\n */\n/**\n * !#en The event which will be triggered at the beginning of every frame.\n * !#zh 每个帧的开始时所触发的事件。\n * @property {String} EVENT_BEFORE_UPDATE\n * @readonly\n * @static\n */\ncc.Director.EVENT_BEFORE_UPDATE = \"director_before_update\";\n\n/**\n * !#en The event which will be triggered after engine and components update logic.\n * !#zh 将在引擎和组件 “update” 逻辑之后所触发的事件。\n * @event cc.Director.EVENT_AFTER_UPDATE\n */\n/**\n * !#en The event which will be triggered after engine and components update logic.\n * !#zh 将在引擎和组件 “update” 逻辑之后所触发的事件。\n * @property {String} EVENT_AFTER_UPDATE\n * @readonly\n * @static\n */\ncc.Director.EVENT_AFTER_UPDATE = \"director_after_update\";\n\n/**\n * !#en The event is deprecated since v2.0, please use cc.Director.EVENT_BEFORE_DRAW instead\n * !#zh 这个事件从 v2.0 开始被废弃,请直接使用 cc.Director.EVENT_BEFORE_DRAW\n * @property {String} EVENT_BEFORE_VISIT\n * @readonly\n * @deprecated since v2.0\n * @static\n */\ncc.Director.EVENT_BEFORE_VISIT = \"director_before_draw\";\n\n/**\n * !#en The event is deprecated since v2.0, please use cc.Director.EVENT_BEFORE_DRAW instead\n * !#zh 这个事件从 v2.0 开始被废弃,请直接使用 cc.Director.EVENT_BEFORE_DRAW\n * @property {String} EVENT_AFTER_VISIT\n * @readonly\n * @deprecated since v2.0\n * @static\n */\ncc.Director.EVENT_AFTER_VISIT = \"director_before_draw\";\n\n/**\n * !#en The event which will be triggered before the rendering process.\n * !#zh 渲染过程之前所触发的事件。\n * @event cc.Director.EVENT_BEFORE_DRAW\n */\n/**\n * !#en The event which will be triggered before the rendering process.\n * !#zh 渲染过程之前所触发的事件。\n * @property {String} EVENT_BEFORE_DRAW\n * @readonly\n * @static\n */\ncc.Director.EVENT_BEFORE_DRAW = \"director_before_draw\";\n\n/**\n * !#en The event which will be triggered after the rendering process.\n * !#zh 渲染过程之后所触发的事件。\n * @event cc.Director.EVENT_AFTER_DRAW\n */\n/**\n * !#en The event which will be triggered after the rendering process.\n * !#zh 渲染过程之后所触发的事件。\n * @property {String} EVENT_AFTER_DRAW\n * @readonly\n * @static\n */\ncc.Director.EVENT_AFTER_DRAW = \"director_after_draw\";\n\n//Possible OpenGL projections used by director\n\n/**\n * Constant for 2D projection (orthogonal projection)\n * @property {Number} PROJECTION_2D\n * @default 0\n * @readonly\n * @static\n * @deprecated since v2.0\n */\ncc.Director.PROJECTION_2D = 0;\n\n/**\n * Constant for 3D projection with a fovy=60, znear=0.5f and zfar=1500.\n * @property {Number} PROJECTION_3D\n * @default 1\n * @readonly\n * @static\n * @deprecated since v2.0\n */\ncc.Director.PROJECTION_3D = 1;\n\n/**\n * Constant for custom projection, if cc.Director's projection set to it, it calls \"updateProjection\" on the projection delegate.\n * @property {Number} PROJECTION_CUSTOM\n * @default 3\n * @readonly\n * @static\n * @deprecated since v2.0\n */\ncc.Director.PROJECTION_CUSTOM = 3;\n\n/**\n * Constant for default projection of cc.Director, default projection is 2D projection\n * @property {Number} PROJECTION_DEFAULT\n * @default cc.Director.PROJECTION_2D\n * @readonly\n * @static\n * @deprecated since v2.0\n */\ncc.Director.PROJECTION_DEFAULT = cc.Director.PROJECTION_2D;\n\n/**\n * The event which will be triggered before the physics process.
\n * 物理过程之前所触发的事件。\n * @event Director.EVENT_BEFORE_PHYSICS\n * @readonly\n */\ncc.Director.EVENT_BEFORE_PHYSICS = 'director_before_physics';\n\n/**\n * The event which will be triggered after the physics process.
\n * 物理过程之后所触发的事件。\n * @event Director.EVENT_AFTER_PHYSICS\n * @readonly\n */\ncc.Director.EVENT_AFTER_PHYSICS = 'director_after_physics';\n\n/**\n * @module cc\n */\n\n/**\n * !#en Director\n * !#zh 导演类。\n * @property director\n * @type {Director}\n */\ncc.director = new cc.Director();\n\nmodule.exports = cc.director;","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar EventTarget = require('./event/event-target');\nrequire('../audio/CCAudioEngine');\nconst debug = require('./CCDebug');\nconst renderer = require('./renderer/index.js');\nconst dynamicAtlasManager = require('../core/renderer/utils/dynamic-atlas/manager');\n\n/**\n * @module cc\n */\n\n/**\n * !#en An object to boot the game.\n * !#zh 包含游戏主体信息并负责驱动游戏的游戏对象。\n * @class Game\n * @extends EventTarget\n */\nvar game = {\n /**\n * !#en Event triggered when game hide to background.\n * Please note that this event is not 100% guaranteed to be fired on Web platform,\n * on native platforms, it corresponds to enter background event, os status bar or notification center may not trigger this event.\n * !#zh 游戏进入后台时触发的事件。\n * 请注意,在 WEB 平台,这个事件不一定会 100% 触发,这完全取决于浏览器的回调行为。\n * 在原生平台,它对应的是应用被切换到后台事件,下拉菜单和上拉状态栏等不一定会触发这个事件,这取决于系统行为。\n * @property EVENT_HIDE\n * @type {String}\n * @example\n * cc.game.on(cc.game.EVENT_HIDE, function () {\n * cc.audioEngine.pauseMusic();\n * cc.audioEngine.pauseAllEffects();\n * });\n */\n EVENT_HIDE: \"game_on_hide\",\n\n /**\n * !#en Event triggered when game back to foreground\n * Please note that this event is not 100% guaranteed to be fired on Web platform,\n * on native platforms, it corresponds to enter foreground event.\n * !#zh 游戏进入前台运行时触发的事件。\n * 请注意,在 WEB 平台,这个事件不一定会 100% 触发,这完全取决于浏览器的回调行为。\n * 在原生平台,它对应的是应用被切换到前台事件。\n * @property EVENT_SHOW\n * @constant\n * @type {String}\n */\n EVENT_SHOW: \"game_on_show\",\n\n /**\n * !#en Event triggered when game restart\n * !#zh 调用restart后,触发事件。\n * @property EVENT_RESTART\n * @constant\n * @type {String}\n */\n EVENT_RESTART: \"game_on_restart\",\n\n /**\n * Event triggered after game inited, at this point all engine objects and game scripts are loaded\n * @property EVENT_GAME_INITED\n * @constant\n * @type {String}\n */\n EVENT_GAME_INITED: \"game_inited\",\n\n /**\n * Event triggered after engine inited, at this point you will be able to use all engine classes.\n * It was defined as EVENT_RENDERER_INITED in cocos creator v1.x and renamed in v2.0\n * @property EVENT_ENGINE_INITED\n * @constant\n * @type {String}\n */\n EVENT_ENGINE_INITED: \"engine_inited\",\n // deprecated\n EVENT_RENDERER_INITED: \"engine_inited\",\n\n /**\n * Web Canvas 2d API as renderer backend\n * @property RENDER_TYPE_CANVAS\n * @constant\n * @type {Number}\n */\n RENDER_TYPE_CANVAS: 0,\n /**\n * WebGL API as renderer backend\n * @property RENDER_TYPE_WEBGL\n * @constant\n * @type {Number}\n */\n RENDER_TYPE_WEBGL: 1,\n /**\n * OpenGL API as renderer backend\n * @property RENDER_TYPE_OPENGL\n * @constant\n * @type {Number}\n */\n RENDER_TYPE_OPENGL: 2,\n\n _persistRootNodes: {},\n\n // states\n _paused: true,//whether the game is paused\n _configLoaded: false,//whether config loaded\n _isCloning: false, // deserializing or instantiating\n _prepared: false, //whether the engine has prepared\n _rendererInitialized: false,\n\n _renderContext: null,\n\n _intervalId: null,//interval target of main\n\n _lastTime: null,\n _frameTime: null,\n\n /**\n * !#en The outer frame of the game canvas, parent of game container.\n * !#zh 游戏画布的外框,container 的父容器。\n * @property frame\n * @type {Object}\n */\n frame: null,\n /**\n * !#en The container of game canvas.\n * !#zh 游戏画布的容器。\n * @property container\n * @type {HTMLDivElement}\n */\n container: null,\n /**\n * !#en The canvas of the game.\n * !#zh 游戏的画布。\n * @property canvas\n * @type {HTMLCanvasElement}\n */\n canvas: null,\n\n /**\n * !#en The renderer backend of the game.\n * !#zh 游戏的渲染器类型。\n * @property renderType\n * @type {Number}\n */\n renderType: -1,\n\n /**\n * !#en\n * The current game configuration, including:
\n * 1. debugMode
\n * \"debugMode\" possible values :
\n * 0 - No message will be printed.
\n * 1 - cc.error, cc.assert, cc.warn, cc.log will print in console.
\n * 2 - cc.error, cc.assert, cc.warn will print in console.
\n * 3 - cc.error, cc.assert will print in console.
\n * 4 - cc.error, cc.assert, cc.warn, cc.log will print on canvas, available only on web.
\n * 5 - cc.error, cc.assert, cc.warn will print on canvas, available only on web.
\n * 6 - cc.error, cc.assert will print on canvas, available only on web.
\n * 2. showFPS
\n * Left bottom corner fps information will show when \"showFPS\" equals true, otherwise it will be hide.
\n * 3. exposeClassName
\n * Expose class name to chrome debug tools, the class intantiate performance is a little bit slower when exposed.
\n * 4. frameRate
\n * \"frameRate\" set the wanted frame rate for your game, but the real fps depends on your game implementation and the running environment.
\n * 5. id
\n * \"gameCanvas\" sets the id of your canvas element on the web page, it's useful only on web.
\n * 6. renderMode
\n * \"renderMode\" sets the renderer type, only useful on web :
\n * 0 - Automatically chosen by engine
\n * 1 - Forced to use canvas renderer
\n * 2 - Forced to use WebGL renderer, but this will be ignored on mobile browsers
\n *
\n * Please DO NOT modify this object directly, it won't have any effect.
\n * !#zh\n * 当前的游戏配置,包括:
\n * 1. debugMode(debug 模式,但是在浏览器中这个选项会被忽略)
\n * \"debugMode\" 各种设置选项的意义。
\n * 0 - 没有消息被打印出来。
\n * 1 - cc.error,cc.assert,cc.warn,cc.log 将打印在 console 中。
\n * 2 - cc.error,cc.assert,cc.warn 将打印在 console 中。
\n * 3 - cc.error,cc.assert 将打印在 console 中。
\n * 4 - cc.error,cc.assert,cc.warn,cc.log 将打印在 canvas 中(仅适用于 web 端)。
\n * 5 - cc.error,cc.assert,cc.warn 将打印在 canvas 中(仅适用于 web 端)。
\n * 6 - cc.error,cc.assert 将打印在 canvas 中(仅适用于 web 端)。
\n * 2. showFPS(显示 FPS)
\n * 当 showFPS 为 true 的时候界面的左下角将显示 fps 的信息,否则被隐藏。
\n * 3. exposeClassName
\n * 暴露类名让 Chrome DevTools 可以识别,如果开启会稍稍降低类的创建过程的性能,但对对象构造没有影响。
\n * 4. frameRate (帧率)
\n * “frameRate” 设置想要的帧率你的游戏,但真正的FPS取决于你的游戏实现和运行环境。
\n * 5. id
\n * \"gameCanvas\" Web 页面上的 Canvas Element ID,仅适用于 web 端。
\n * 6. renderMode(渲染模式)
\n * “renderMode” 设置渲染器类型,仅适用于 web 端:
\n * 0 - 通过引擎自动选择。
\n * 1 - 强制使用 canvas 渲染。\n * 2 - 强制使用 WebGL 渲染,但是在部分 Android 浏览器中这个选项会被忽略。
\n *
\n * 注意:请不要直接修改这个对象,它不会有任何效果。\n * @property config\n * @type {Object}\n */\n config: null,\n\n /**\n * !#en Callback when the scripts of engine have been load.\n * !#zh 当引擎完成启动后的回调函数。\n * @method onStart\n * @type {Function}\n */\n onStart: null,\n\n//@Public Methods\n\n// @Game play control\n /**\n * !#en Set frame rate of game.\n * !#zh 设置游戏帧率。\n * @method setFrameRate\n * @param {Number} frameRate\n */\n setFrameRate: function (frameRate) {\n var config = this.config;\n config.frameRate = frameRate;\n if (this._intervalId)\n window.cancelAnimFrame(this._intervalId);\n this._intervalId = 0;\n this._paused = true;\n this._setAnimFrame();\n this._runMainLoop();\n },\n\n /**\n * !#en Get frame rate set for the game, it doesn't represent the real frame rate.\n * !#zh 获取设置的游戏帧率(不等同于实际帧率)。\n * @method getFrameRate\n * @return {Number} frame rate\n */\n getFrameRate: function () {\n return this.config.frameRate;\n },\n\n /**\n * !#en Run the game frame by frame.\n * !#zh 执行一帧游戏循环。\n * @method step\n */\n step: function () {\n cc.director.mainLoop();\n },\n\n /**\n * !#en Pause the game main loop. This will pause:\n * game logic execution, rendering process, event manager, background music and all audio effects.\n * This is different with cc.director.pause which only pause the game logic execution.\n * !#zh 暂停游戏主循环。包含:游戏逻辑,渲染,事件处理,背景音乐和所有音效。这点和只暂停游戏逻辑的 cc.director.pause 不同。\n * @method pause\n */\n pause: function () {\n if (this._paused) return;\n this._paused = true;\n // Pause audio engine\n if (cc.audioEngine) {\n cc.audioEngine._break();\n }\n // Pause main loop\n if (this._intervalId)\n window.cancelAnimFrame(this._intervalId);\n this._intervalId = 0;\n },\n\n /**\n * !#en Resume the game from pause. This will resume:\n * game logic execution, rendering process, event manager, background music and all audio effects.\n * !#zh 恢复游戏主循环。包含:游戏逻辑,渲染,事件处理,背景音乐和所有音效。\n * @method resume\n */\n resume: function () {\n if (!this._paused) return;\n this._paused = false;\n // Resume audio engine\n if (cc.audioEngine) {\n cc.audioEngine._restore();\n }\n cc.director._resetDeltaTime();\n // Resume main loop\n this._runMainLoop();\n },\n\n /**\n * !#en Check whether the game is paused.\n * !#zh 判断游戏是否暂停。\n * @method isPaused\n * @return {Boolean}\n */\n isPaused: function () {\n return this._paused;\n },\n\n /**\n * !#en Restart game.\n * !#zh 重新开始游戏\n * @method restart\n */\n restart: function () {\n cc.director.once(cc.Director.EVENT_AFTER_DRAW, function () {\n for (var id in game._persistRootNodes) {\n game.removePersistRootNode(game._persistRootNodes[id]);\n }\n\n // Clear scene\n cc.director.getScene().destroy();\n cc.Object._deferredDestroy();\n\n // Clean up audio\n if (cc.audioEngine) {\n cc.audioEngine.uncacheAll();\n }\n\n cc.director.reset();\n\n game.pause();\n cc.assetManager.builtins.init(() => {\n game.onStart();\n game.emit(game.EVENT_RESTART);\n });\n });\n },\n\n /**\n * !#en End game, it will close the game window\n * !#zh 退出游戏\n * @method end\n */\n end: function () {\n close();\n },\n\n// @Game loading\n\n _initEngine () {\n if (this._rendererInitialized) {\n return;\n }\n\n this._initRenderer();\n\n if (!CC_EDITOR) {\n this._initEvents();\n }\n\n this.emit(this.EVENT_ENGINE_INITED);\n },\n\n _loadPreviewScript (cb) {\n if (CC_PREVIEW && window.__quick_compile_project__) {\n window.__quick_compile_project__.load(cb);\n }\n else {\n cb();\n }\n },\n\n _prepareFinished (cb) {\n // Init engine\n this._initEngine();\n this._setAnimFrame();\n cc.assetManager.builtins.init(() => {\n // Log engine version\n console.log('Cocos Creator SP v' + cc.ENGINE_VERSION);\n this._prepared = true;\n this._runMainLoop();\n\n this.emit(this.EVENT_GAME_INITED);\n\n if (cb) cb();\n });\n },\n\n eventTargetOn: EventTarget.prototype.on,\n eventTargetOnce: EventTarget.prototype.once,\n\n /**\n * !#en\n * Register an callback of a specific event type on the game object.\n * This type of event should be triggered via `emit`.\n * !#zh\n * 注册 game 的特定事件类型回调。这种类型的事件应该被 `emit` 触发。\n *\n * @method on\n * @param {String} type - A string representing the event type to listen for.\n * @param {Function} callback - The callback that will be invoked when the event is dispatched.\n * The callback is ignored if it is a duplicate (the callbacks are unique).\n * @param {any} [callback.arg1] arg1\n * @param {any} [callback.arg2] arg2\n * @param {any} [callback.arg3] arg3\n * @param {any} [callback.arg4] arg4\n * @param {any} [callback.arg5] arg5\n * @param {Object} [target] - The target (this object) to invoke the callback, can be null\n * @return {Function} - Just returns the incoming callback so you can save the anonymous function easier.\n * @typescript\n * on(type: string, callback: T, target?: any, useCapture?: boolean): T\n */\n on (type, callback, target, once) {\n // Make sure EVENT_ENGINE_INITED and EVENT_GAME_INITED callbacks to be invoked\n if ((this._prepared && type === this.EVENT_ENGINE_INITED) ||\n (!this._paused && type === this.EVENT_GAME_INITED)) {\n callback.call(target);\n }\n else {\n this.eventTargetOn(type, callback, target, once);\n }\n },\n /**\n * !#en\n * Register an callback of a specific event type on the game object,\n * the callback will remove itself after the first time it is triggered.\n * !#zh\n * 注册 game 的特定事件类型回调,回调会在第一时间被触发后删除自身。\n *\n * @method once\n * @param {String} type - A string representing the event type to listen for.\n * @param {Function} callback - The callback that will be invoked when the event is dispatched.\n * The callback is ignored if it is a duplicate (the callbacks are unique).\n * @param {any} [callback.arg1] arg1\n * @param {any} [callback.arg2] arg2\n * @param {any} [callback.arg3] arg3\n * @param {any} [callback.arg4] arg4\n * @param {any} [callback.arg5] arg5\n * @param {Object} [target] - The target (this object) to invoke the callback, can be null\n */\n once (type, callback, target) {\n // Make sure EVENT_ENGINE_INITED and EVENT_GAME_INITED callbacks to be invoked\n if ((this._prepared && type === this.EVENT_ENGINE_INITED) ||\n (!this._paused && type === this.EVENT_GAME_INITED)) {\n callback.call(target);\n }\n else {\n this.eventTargetOnce(type, callback, target);\n }\n },\n\n /**\n * !#en Prepare game.\n * !#zh 准备引擎,请不要直接调用这个函数。\n * @param {Function} cb\n * @method prepare\n */\n prepare (cb) {\n // Already prepared\n if (this._prepared) {\n if (cb) cb();\n return;\n }\n\n this._loadPreviewScript(() => {\n this._prepareFinished(cb);\n });\n },\n\n /**\n * !#en Run game with configuration object and onStart function.\n * !#zh 运行游戏,并且指定引擎配置和 onStart 的回调。\n * @method run\n * @param {Object} config - Pass configuration object or onStart function\n * @param {Function} onStart - function to be executed after game initialized\n */\n run: function (config, onStart) {\n this._initConfig(config);\n this.onStart = onStart;\n this.prepare(game.onStart && game.onStart.bind(game));\n },\n\n// @ Persist root node section\n /**\n * !#en\n * Add a persistent root node to the game, the persistent node won't be destroyed during scene transition.
\n * The target node must be placed in the root level of hierarchy, otherwise this API won't have any effect.\n * !#zh\n * 声明常驻根节点,该节点不会被在场景切换中被销毁。
\n * 目标节点必须位于为层级的根节点,否则无效。\n * @method addPersistRootNode\n * @param {Node} node - The node to be made persistent\n */\n addPersistRootNode: function (node) {\n if (!cc.Node.isNode(node) || !node.uuid) {\n cc.warnID(3800);\n return;\n }\n var id = node.uuid;\n if (!this._persistRootNodes[id]) {\n var scene = cc.director._scene;\n if (cc.isValid(scene)) {\n if (!node.parent) {\n node.parent = scene;\n }\n else if ( !(node.parent instanceof cc.Scene) ) {\n cc.warnID(3801);\n return;\n }\n else if (node.parent !== scene) {\n cc.warnID(3802);\n return;\n }\n }\n this._persistRootNodes[id] = node;\n node._persistNode = true;\n cc.assetManager._releaseManager._addPersistNodeRef(node);\n }\n },\n\n /**\n * !#en Remove a persistent root node.\n * !#zh 取消常驻根节点。\n * @method removePersistRootNode\n * @param {Node} node - The node to be removed from persistent node list\n */\n removePersistRootNode: function (node) {\n var id = node.uuid || '';\n if (node === this._persistRootNodes[id]) {\n delete this._persistRootNodes[id];\n node._persistNode = false;\n cc.assetManager._releaseManager._removePersistNodeRef(node);\n }\n },\n\n /**\n * !#en Check whether the node is a persistent root node.\n * !#zh 检查节点是否是常驻根节点。\n * @method isPersistRootNode\n * @param {Node} node - The node to be checked\n * @return {Boolean}\n */\n isPersistRootNode: function (node) {\n return node._persistNode;\n },\n\n//@Private Methods\n\n// @Time ticker section\n _setAnimFrame: function () {\n this._lastTime = performance.now();\n var frameRate = game.config.frameRate;\n this._frameTime = 1000 / frameRate;\n cc.director._maxParticleDeltaTime = this._frameTime / 1000 * 2;\n if (CC_JSB || CC_RUNTIME) {\n jsb.setPreferredFramesPerSecond(frameRate);\n window.requestAnimFrame = window.requestAnimationFrame;\n window.cancelAnimFrame = window.cancelAnimationFrame;\n }\n else {\n let rAF = window.requestAnimationFrame = window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.oRequestAnimationFrame ||\n window.msRequestAnimationFrame;\n\n if (frameRate !== 60 && frameRate !== 30) {\n window.requestAnimFrame = rAF ? this._stTimeWithRAF : this._stTime;\n window.cancelAnimFrame = this._ctTime;\n }\n else {\n window.requestAnimFrame = rAF || this._stTime;\n\n window.cancelAnimFrame = window.cancelAnimationFrame ||\n window.cancelRequestAnimationFrame ||\n window.msCancelRequestAnimationFrame ||\n window.mozCancelRequestAnimationFrame ||\n window.oCancelRequestAnimationFrame ||\n window.webkitCancelRequestAnimationFrame ||\n window.msCancelAnimationFrame ||\n window.mozCancelAnimationFrame ||\n window.webkitCancelAnimationFrame ||\n window.oCancelAnimationFrame ||\n this._ctTime;\n }\n }\n },\n\n _stTimeWithRAF: function(callback){\n var currTime = performance.now();\n var timeToCall = Math.max(0, game._frameTime - (currTime - game._lastTime));\n var id = window.setTimeout(function() {\n window.requestAnimationFrame(callback);\n }, timeToCall);\n game._lastTime = currTime + timeToCall;\n return id;\n },\n\n _stTime: function(callback){\n var currTime = performance.now();\n var timeToCall = Math.max(0, game._frameTime - (currTime - game._lastTime));\n var id = window.setTimeout(function() { callback(); },\n timeToCall);\n game._lastTime = currTime + timeToCall;\n return id;\n },\n _ctTime: function(id){\n window.clearTimeout(id);\n },\n //Run game.\n _runMainLoop: function () {\n if (CC_EDITOR) {\n return;\n }\n if (!this._prepared) return;\n\n var self = this, callback, config = self.config,\n director = cc.director,\n skip = true, frameRate = config.frameRate;\n\n debug.setDisplayStats(config.showFPS);\n\n callback = function (now) {\n if (!self._paused) {\n self._intervalId = window.requestAnimFrame(callback);\n if (!CC_JSB && !CC_RUNTIME && frameRate === 30) {\n if (skip = !skip) {\n return;\n }\n }\n director.mainLoop(now);\n }\n };\n\n self._intervalId = window.requestAnimFrame(callback);\n self._paused = false;\n },\n\n// @Game loading section\n _initConfig (config) {\n // Configs adjustment\n if (typeof config.debugMode !== 'number') {\n config.debugMode = 0;\n }\n config.exposeClassName = !!config.exposeClassName;\n if (typeof config.frameRate !== 'number') {\n config.frameRate = 60;\n }\n let renderMode = config.renderMode;\n if (typeof renderMode !== 'number' || renderMode > 2 || renderMode < 0) {\n config.renderMode = 0;\n }\n if (typeof config.registerSystemEvent !== 'boolean') {\n config.registerSystemEvent = true;\n }\n if (renderMode === 1) {\n config.showFPS = false;\n }\n else {\n config.showFPS = !!config.showFPS;\n }\n\n // Collide Map and Group List\n this.collisionMatrix = config.collisionMatrix || [];\n this.groupList = config.groupList || [];\n\n debug._resetDebugSetting(config.debugMode);\n\n this.config = config;\n this._configLoaded = true;\n },\n\n _determineRenderType () {\n let config = this.config,\n userRenderMode = parseInt(config.renderMode) || 0;\n\n // Determine RenderType\n this.renderType = this.RENDER_TYPE_CANVAS;\n let supportRender = false;\n\n if (userRenderMode === 0) {\n if (cc.sys.capabilities['opengl']) {\n this.renderType = this.RENDER_TYPE_WEBGL;\n supportRender = true;\n }\n else if (cc.sys.capabilities['canvas']) {\n this.renderType = this.RENDER_TYPE_CANVAS;\n supportRender = true;\n }\n }\n else if (userRenderMode === 1 && cc.sys.capabilities['canvas']) {\n this.renderType = this.RENDER_TYPE_CANVAS;\n supportRender = true;\n }\n else if (userRenderMode === 2 && cc.sys.capabilities['opengl']) {\n this.renderType = this.RENDER_TYPE_WEBGL;\n supportRender = true;\n }\n\n if (!supportRender) {\n throw new Error(debug.getError(3820, userRenderMode));\n }\n },\n\n _initRenderer () {\n // Avoid setup to be called twice.\n if (this._rendererInitialized) return;\n\n let el = this.config.id,\n width, height,\n localCanvas, localContainer;\n\n if (CC_JSB || CC_RUNTIME) {\n this.container = localContainer = document.createElement(\"DIV\");\n this.frame = localContainer.parentNode === document.body ? document.documentElement : localContainer.parentNode;\n localCanvas = window.__canvas;\n this.canvas = localCanvas;\n }\n else {\n var element = (el instanceof HTMLElement) ? el : (document.querySelector(el) || document.querySelector('#' + el));\n\n if (element.tagName === \"CANVAS\") {\n width = element.width;\n height = element.height;\n\n //it is already a canvas, we wrap it around with a div\n this.canvas = localCanvas = element;\n this.container = localContainer = document.createElement(\"DIV\");\n if (localCanvas.parentNode)\n localCanvas.parentNode.insertBefore(localContainer, localCanvas);\n } else {\n //we must make a new canvas and place into this element\n if (element.tagName !== \"DIV\") {\n cc.warnID(3819);\n }\n width = element.clientWidth;\n height = element.clientHeight;\n this.canvas = localCanvas = document.createElement(\"CANVAS\");\n this.container = localContainer = document.createElement(\"DIV\");\n element.appendChild(localContainer);\n }\n localContainer.setAttribute('id', 'Cocos2dGameContainer');\n localContainer.appendChild(localCanvas);\n this.frame = (localContainer.parentNode === document.body) ? document.documentElement : localContainer.parentNode;\n\n function addClass (element, name) {\n var hasClass = (' ' + element.className + ' ').indexOf(' ' + name + ' ') > -1;\n if (!hasClass) {\n if (element.className) {\n element.className += \" \";\n }\n element.className += name;\n }\n }\n addClass(localCanvas, \"gameCanvas\");\n localCanvas.setAttribute(\"width\", width || 480);\n localCanvas.setAttribute(\"height\", height || 320);\n localCanvas.setAttribute(\"tabindex\", 99);\n }\n\n this._determineRenderType();\n // WebGL context created successfully\n if (this.renderType === this.RENDER_TYPE_WEBGL) {\n var opts = {\n 'stencil': true,\n // MSAA is causing serious performance dropdown on some browsers.\n 'antialias': cc.macro.ENABLE_WEBGL_ANTIALIAS,\n 'alpha': cc.macro.ENABLE_TRANSPARENT_CANVAS\n };\n renderer.initWebGL(localCanvas, opts);\n this._renderContext = renderer.device._gl;\n\n // Enable dynamic atlas manager by default\n if (!cc.macro.CLEANUP_IMAGE_CACHE && dynamicAtlasManager) {\n dynamicAtlasManager.enabled = true;\n }\n }\n if (!this._renderContext) {\n this.renderType = this.RENDER_TYPE_CANVAS;\n // Could be ignored by module settings\n renderer.initCanvas(localCanvas);\n this._renderContext = renderer.device._ctx;\n }\n\n this.canvas.oncontextmenu = function () {\n if (!cc._isContextMenuEnable) return false;\n };\n\n this._rendererInitialized = true;\n },\n\n _initEvents: function () {\n var win = window, hiddenPropName;\n\n // register system events\n if (this.config.registerSystemEvent)\n cc.internal.inputManager.registerSystemEvent(this.canvas);\n\n if (typeof document.hidden !== 'undefined') {\n hiddenPropName = \"hidden\";\n } else if (typeof document.mozHidden !== 'undefined') {\n hiddenPropName = \"mozHidden\";\n } else if (typeof document.msHidden !== 'undefined') {\n hiddenPropName = \"msHidden\";\n } else if (typeof document.webkitHidden !== 'undefined') {\n hiddenPropName = \"webkitHidden\";\n }\n\n var hidden = false;\n\n function onHidden () {\n if (!hidden) {\n hidden = true;\n game.emit(game.EVENT_HIDE);\n }\n }\n // In order to adapt the most of platforms the onshow API.\n function onShown (arg0, arg1, arg2, arg3, arg4) {\n if (hidden) {\n hidden = false;\n game.emit(game.EVENT_SHOW, arg0, arg1, arg2, arg3, arg4);\n }\n }\n\n if (hiddenPropName) {\n var changeList = [\n \"visibilitychange\",\n \"mozvisibilitychange\",\n \"msvisibilitychange\",\n \"webkitvisibilitychange\",\n \"qbrowserVisibilityChange\"\n ];\n for (var i = 0; i < changeList.length; i++) {\n document.addEventListener(changeList[i], function (event) {\n var visible = document[hiddenPropName];\n // QQ App\n visible = visible || event[\"hidden\"];\n if (visible)\n onHidden();\n else\n onShown();\n });\n }\n } else {\n win.addEventListener(\"blur\", onHidden);\n win.addEventListener(\"focus\", onShown);\n }\n\n if (navigator.userAgent.indexOf(\"MicroMessenger\") > -1) {\n win.onfocus = onShown;\n }\n\n if (\"onpageshow\" in window && \"onpagehide\" in window) {\n win.addEventListener(\"pagehide\", onHidden);\n win.addEventListener(\"pageshow\", onShown);\n // Taobao UIWebKit\n document.addEventListener(\"pagehide\", onHidden);\n document.addEventListener(\"pageshow\", onShown);\n }\n\n this.on(game.EVENT_HIDE, function () {\n game.pause();\n });\n this.on(game.EVENT_SHOW, function () {\n game.resume();\n });\n }\n};\n\nEventTarget.call(game);\ncc.js.addon(game, EventTarget.prototype);\n\n/**\n * @module cc\n */\n\n/**\n * !#en This is a Game instance.\n * !#zh 这是一个 Game 类的实例,包含游戏主体信息并负责驱动游戏的游戏对象。。\n * @property game\n * @type Game\n */\ncc.game = module.exports = game;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos2d-x.org\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n'use strict';\n\nimport { Mat4, Vec2, Vec3, Quat, Trs } from './value-types';\n\nconst BaseNode = require('./utils/base-node');\nconst PrefabHelper = require('./utils/prefab-helper');\nconst nodeMemPool = require('./utils/trans-pool').NodeMemPool;\nconst AffineTrans = require('./utils/affine-transform');\nconst eventManager = require('./event-manager');\nconst macro = require('./platform/CCMacro');\nconst js = require('./platform/js');\nconst Event = require('./event/event');\nconst EventTarget = require('./event/event-target');\nconst RenderFlow = require('./renderer/render-flow');\n\nconst Flags = cc.Object.Flags;\nconst Destroying = Flags.Destroying;\n\nconst ERR_INVALID_NUMBER = CC_EDITOR && 'The %s is invalid';\nconst ONE_DEGREE = Math.PI / 180;\n\nvar ActionManagerExist = !!cc.ActionManager;\nvar emptyFunc = function () {};\n\n// getWorldPosition temp var\nvar _gwpVec3 = new Vec3();\nvar _gwpQuat = new Quat();\n\n// _invTransformPoint temp var\nvar _tpVec3a = new Vec3();\nvar _tpVec3b = new Vec3();\nvar _tpQuata = new Quat();\nvar _tpQuatb = new Quat();\n\n// setWorldPosition temp var\nvar _swpVec3 = new Vec3();\n\n// getWorldScale temp var\nvar _gwsVec3 = new Vec3();\n\n// setWorldScale temp var\nvar _swsVec3 = new Vec3();\n\n// getWorldRT temp var\nvar _gwrtVec3a = new Vec3();\nvar _gwrtVec3b = new Vec3();\nvar _gwrtQuata = new Quat();\nvar _gwrtQuatb = new Quat();\n\n// lookAt temp var\nvar _laVec3 = new Vec3();\nvar _laQuat = new Quat();\n\n//up、right、forward temp var\nvar _urfVec3 = new Vec3();\nvar _urfQuat = new Quat();\n\n// _hitTest temp var\nvar _htVec3a = new Vec3();\nvar _htVec3b = new Vec3();\n\n// getWorldRotation temp var\nvar _gwrQuat = new Quat();\n\n// setWorldRotation temp var\nvar _swrQuat = new Quat();\n\nvar _quata = new Quat();\nvar _mat4_temp = cc.mat4();\nvar _vec3_temp = new Vec3();\n\nvar _cachedArray = new Array(16);\n_cachedArray.length = 0;\n\nconst POSITION_ON = 1 << 0;\nconst SCALE_ON = 1 << 1;\nconst ROTATION_ON = 1 << 2;\nconst SIZE_ON = 1 << 3;\nconst ANCHOR_ON = 1 << 4;\nconst COLOR_ON = 1 << 5;\n\n\nlet BuiltinGroupIndex = cc.Enum({\n DEBUG: 31\n});\n\n/**\n * !#en Node's local dirty properties flag\n * !#zh Node 的本地属性 dirty 状态位\n * @enum Node._LocalDirtyFlag\n * @static\n * @private\n * @namespace Node\n */\nvar LocalDirtyFlag = cc.Enum({\n /**\n * !#en Flag for position dirty\n * !#zh 位置 dirty 的标记位\n * @property {Number} POSITION\n * @static\n */\n POSITION: 1 << 0,\n /**\n * !#en Flag for scale dirty\n * !#zh 缩放 dirty 的标记位\n * @property {Number} SCALE\n * @static\n */\n SCALE: 1 << 1,\n /**\n * !#en Flag for rotation dirty\n * !#zh 旋转 dirty 的标记位\n * @property {Number} ROTATION\n * @static\n */\n ROTATION: 1 << 2,\n /**\n * !#en Flag for skew dirty\n * !#zh skew dirty 的标记位\n * @property {Number} SKEW\n * @static\n */\n SKEW: 1 << 3,\n /**\n * !#en Flag for rotation, scale or position dirty\n * !#zh 旋转,缩放,或位置 dirty 的标记位\n * @property {Number} TRS\n * @static\n */\n TRS: 1 << 0 | 1 << 1 | 1 << 2,\n /**\n * !#en Flag for rotation or scale dirty\n * !#zh 旋转或缩放 dirty 的标记位\n * @property {Number} RS\n * @static\n */\n RS: 1 << 1 | 1 << 2,\n /**\n * !#en Flag for rotation, scale, position, skew dirty\n * !#zh 旋转,缩放,位置,或斜角 dirty 的标记位\n * @property {Number} TRS\n * @static\n */\n TRSS: 1 << 0 | 1 << 1 | 1 << 2 | 1 << 3,\n\n /**\n * !#en Flag for physics position dirty\n * !#zh 物理位置 dirty 的标记位\n * @property {Number} PHYSICS_POSITION\n * @static\n */\n PHYSICS_POSITION: 1 << 4,\n\n /**\n * !#en Flag for physics scale dirty\n * !#zh 物理缩放 dirty 的标记位\n * @property {Number} PHYSICS_SCALE\n * @static\n */\n PHYSICS_SCALE: 1 << 5,\n\n /**\n * !#en Flag for physics rotation dirty\n * !#zh 物理旋转 dirty 的标记位\n * @property {Number} PHYSICS_ROTATION\n * @static\n */\n PHYSICS_ROTATION: 1 << 6,\n\n /**\n * !#en Flag for physics trs dirty\n * !#zh 物理位置旋转缩放 dirty 的标记位\n * @property {Number} PHYSICS_TRS\n * @static\n */\n PHYSICS_TRS: 1 << 4 | 1 << 5 | 1 << 6,\n\n /**\n * !#en Flag for physics rs dirty\n * !#zh 物理旋转缩放 dirty 的标记位\n * @property {Number} PHYSICS_RS\n * @static\n */\n PHYSICS_RS: 1 << 5 | 1 << 6,\n\n /**\n * !#en Flag for node and physics position dirty\n * !#zh 所有位置 dirty 的标记位\n * @property {Number} ALL_POSITION\n * @static\n */\n ALL_POSITION: 1 << 0 | 1 << 4,\n\n /**\n * !#en Flag for node and physics scale dirty\n * !#zh 所有缩放 dirty 的标记位\n * @property {Number} ALL_SCALE\n * @static\n */\n ALL_SCALE: 1 << 1 | 1 << 5,\n\n /**\n * !#en Flag for node and physics rotation dirty\n * !#zh 所有旋转 dirty 的标记位\n * @property {Number} ALL_ROTATION\n * @static\n */\n ALL_ROTATION: 1 << 2 | 1 << 6,\n\n /**\n * !#en Flag for node and physics trs dirty\n * !#zh 所有trs dirty 的标记位\n * @property {Number} ALL_TRS\n * @static\n */\n ALL_TRS: 1 << 0 | 1 << 1 | 1 << 2 | 1 << 4 | 1 << 5 | 1 << 6,\n\n /**\n * !#en Flag for all dirty properties\n * !#zh 覆盖所有 dirty 状态的标记位\n * @property {Number} ALL\n * @static\n */\n ALL: 0xffff,\n});\n\n/**\n * !#en The event type supported by Node\n * !#zh Node 支持的事件类型\n * @class Node.EventType\n * @static\n * @namespace Node\n */\n// Why EventType defined as class, because the first parameter of Node.on method needs set as 'string' type.\nvar EventType = cc.Enum({\n /**\n * !#en The event type for touch start event, you can use its value directly: 'touchstart'\n * !#zh 当手指触摸到屏幕时。\n * @property {String} TOUCH_START\n * @static\n */\n TOUCH_START: 'touchstart',\n /**\n * !#en The event type for touch move event, you can use its value directly: 'touchmove'\n * !#zh 当手指在屏幕上移动时。\n * @property {String} TOUCH_MOVE\n * @static\n */\n TOUCH_MOVE: 'touchmove',\n /**\n * !#en The event type for touch end event, you can use its value directly: 'touchend'\n * !#zh 当手指在目标节点区域内离开屏幕时。\n * @property {String} TOUCH_END\n * @static\n */\n TOUCH_END: 'touchend',\n /**\n * !#en The event type for touch end event, you can use its value directly: 'touchcancel'\n * !#zh 当手指在目标节点区域外离开屏幕时。\n * @property {String} TOUCH_CANCEL\n * @static\n */\n TOUCH_CANCEL: 'touchcancel',\n\n /**\n * !#en The event type for mouse down events, you can use its value directly: 'mousedown'\n * !#zh 当鼠标按下时触发一次。\n * @property {String} MOUSE_DOWN\n * @static\n */\n MOUSE_DOWN: 'mousedown',\n /**\n * !#en The event type for mouse move events, you can use its value directly: 'mousemove'\n * !#zh 当鼠标在目标节点在目标节点区域中移动时,不论是否按下。\n * @property {String} MOUSE_MOVE\n * @static\n */\n MOUSE_MOVE: 'mousemove',\n /**\n * !#en The event type for mouse enter target events, you can use its value directly: 'mouseenter'\n * !#zh 当鼠标移入目标节点区域时,不论是否按下。\n * @property {String} MOUSE_ENTER\n * @static\n */\n MOUSE_ENTER: 'mouseenter',\n /**\n * !#en The event type for mouse leave target events, you can use its value directly: 'mouseleave'\n * !#zh 当鼠标移出目标节点区域时,不论是否按下。\n * @property {String} MOUSE_LEAVE\n * @static\n */\n MOUSE_LEAVE: 'mouseleave',\n /**\n * !#en The event type for mouse up events, you can use its value directly: 'mouseup'\n * !#zh 当鼠标从按下状态松开时触发一次。\n * @property {String} MOUSE_UP\n * @static\n */\n MOUSE_UP: 'mouseup',\n /**\n * !#en The event type for mouse wheel events, you can use its value directly: 'mousewheel'\n * !#zh 当鼠标滚轮滚动时。\n * @property {String} MOUSE_WHEEL\n * @static\n */\n MOUSE_WHEEL: 'mousewheel',\n\n /**\n * !#en The event type for position change events.\n * Performance note, this event will be triggered every time corresponding properties being changed,\n * if the event callback have heavy logic it may have great performance impact, try to avoid such scenario.\n * !#zh 当节点位置改变时触发的事件。\n * 性能警告:这个事件会在每次对应的属性被修改时触发,如果事件回调损耗较高,有可能对性能有很大的负面影响,请尽量避免这种情况。\n * @property {String} POSITION_CHANGED\n * @static\n */\n POSITION_CHANGED: 'position-changed',\n /**\n * !#en The event type for rotation change events.\n * Performance note, this event will be triggered every time corresponding properties being changed,\n * if the event callback have heavy logic it may have great performance impact, try to avoid such scenario.\n * !#zh 当节点旋转改变时触发的事件。\n * 性能警告:这个事件会在每次对应的属性被修改时触发,如果事件回调损耗较高,有可能对性能有很大的负面影响,请尽量避免这种情况。\n * @property {String} ROTATION_CHANGED\n * @static\n */\n ROTATION_CHANGED: 'rotation-changed',\n /**\n * !#en The event type for scale change events.\n * Performance note, this event will be triggered every time corresponding properties being changed,\n * if the event callback have heavy logic it may have great performance impact, try to avoid such scenario.\n * !#zh 当节点缩放改变时触发的事件。\n * 性能警告:这个事件会在每次对应的属性被修改时触发,如果事件回调损耗较高,有可能对性能有很大的负面影响,请尽量避免这种情况。\n * @property {String} SCALE_CHANGED\n * @static\n */\n SCALE_CHANGED: 'scale-changed',\n /**\n * !#en The event type for size change events.\n * Performance note, this event will be triggered every time corresponding properties being changed,\n * if the event callback have heavy logic it may have great performance impact, try to avoid such scenario.\n * !#zh 当节点尺寸改变时触发的事件。\n * 性能警告:这个事件会在每次对应的属性被修改时触发,如果事件回调损耗较高,有可能对性能有很大的负面影响,请尽量避免这种情况。\n * @property {String} SIZE_CHANGED\n * @static\n */\n SIZE_CHANGED: 'size-changed',\n /**\n * !#en The event type for anchor point change events.\n * Performance note, this event will be triggered every time corresponding properties being changed,\n * if the event callback have heavy logic it may have great performance impact, try to avoid such scenario.\n * !#zh 当节点锚点改变时触发的事件。\n * 性能警告:这个事件会在每次对应的属性被修改时触发,如果事件回调损耗较高,有可能对性能有很大的负面影响,请尽量避免这种情况。\n * @property {String} ANCHOR_CHANGED\n * @static\n */\n ANCHOR_CHANGED: 'anchor-changed',\n /**\n * !#en The event type for color change events.\n * Performance note, this event will be triggered every time corresponding properties being changed,\n * if the event callback have heavy logic it may have great performance impact, try to avoid such scenario.\n * !#zh 当节点颜色改变时触发的事件。\n * 性能警告:这个事件会在每次对应的属性被修改时触发,如果事件回调损耗较高,有可能对性能有很大的负面影响,请尽量避免这种情况。\n * @property {String} COLOR_CHANGED\n * @static\n */\n COLOR_CHANGED: 'color-changed',\n /**\n * !#en The event type for new child added events.\n * !#zh 当新的子节点被添加时触发的事件。\n * @property {String} CHILD_ADDED\n * @static\n */\n CHILD_ADDED: 'child-added',\n /**\n * !#en The event type for child removed events.\n * !#zh 当子节点被移除时触发的事件。\n * @property {String} CHILD_REMOVED\n * @static\n */\n CHILD_REMOVED: 'child-removed',\n /**\n * !#en The event type for children reorder events.\n * !#zh 当子节点顺序改变时触发的事件。\n * @property {String} CHILD_REORDER\n * @static\n */\n CHILD_REORDER: 'child-reorder',\n /**\n * !#en The event type for node group changed events.\n * !#zh 当节点归属群组发生变化时触发的事件。\n * @property {String} GROUP_CHANGED\n * @static\n */\n GROUP_CHANGED: 'group-changed',\n /**\n * !#en The event type for node's sibling order changed.\n * !#zh 当节点在兄弟节点中的顺序发生变化时触发的事件。\n * @property {String} SIBLING_ORDER_CHANGED\n * @static\n */\n SIBLING_ORDER_CHANGED: 'sibling-order-changed',\n});\n\nvar _touchEvents = [\n EventType.TOUCH_START,\n EventType.TOUCH_MOVE,\n EventType.TOUCH_END,\n EventType.TOUCH_CANCEL,\n];\nvar _mouseEvents = [\n EventType.MOUSE_DOWN,\n EventType.MOUSE_ENTER,\n EventType.MOUSE_MOVE,\n EventType.MOUSE_LEAVE,\n EventType.MOUSE_UP,\n EventType.MOUSE_WHEEL,\n];\n\nvar _skewNeedWarn = true;\nvar _skewWarn = function (value, node) {\n if (value !== 0) {\n var nodePath = \"\";\n if (CC_EDITOR) {\n var NodeUtils = Editor.require('scene://utils/node');\n nodePath = `Node: ${NodeUtils.getNodePath(node)}.`\n }\n _skewNeedWarn && cc.warn(\"`cc.Node.skewX/Y` is deprecated since v2.2.1, please use 3D node instead.\", nodePath);\n !CC_EDITOR && (_skewNeedWarn = false);\n }\n}\n\nvar _currentHovered = null;\n\nvar _touchStartHandler = function (touch, event) {\n var pos = touch.getLocation();\n var node = this.owner;\n\n if (node._hitTest(pos, this)) {\n event.type = EventType.TOUCH_START;\n event.touch = touch;\n event.bubbles = true;\n node.dispatchEvent(event);\n return true;\n }\n return false;\n};\nvar _touchMoveHandler = function (touch, event) {\n var node = this.owner;\n event.type = EventType.TOUCH_MOVE;\n event.touch = touch;\n event.bubbles = true;\n node.dispatchEvent(event);\n};\nvar _touchEndHandler = function (touch, event) {\n var pos = touch.getLocation();\n var node = this.owner;\n\n if (node._hitTest(pos, this)) {\n event.type = EventType.TOUCH_END;\n }\n else {\n event.type = EventType.TOUCH_CANCEL;\n }\n event.touch = touch;\n event.bubbles = true;\n node.dispatchEvent(event);\n};\nvar _touchCancelHandler = function (touch, event) {\n var pos = touch.getLocation();\n var node = this.owner;\n\n event.type = EventType.TOUCH_CANCEL;\n event.touch = touch;\n event.bubbles = true;\n node.dispatchEvent(event);\n};\n\nvar _mouseDownHandler = function (event) {\n var pos = event.getLocation();\n var node = this.owner;\n\n if (node._hitTest(pos, this)) {\n event.type = EventType.MOUSE_DOWN;\n event.bubbles = true;\n node.dispatchEvent(event);\n }\n};\nvar _mouseMoveHandler = function (event) {\n var pos = event.getLocation();\n var node = this.owner;\n var hit = node._hitTest(pos, this);\n if (hit) {\n if (!this._previousIn) {\n // Fix issue when hover node switched, previous hovered node won't get MOUSE_LEAVE notification\n if (_currentHovered && _currentHovered._mouseListener) {\n event.type = EventType.MOUSE_LEAVE;\n _currentHovered.dispatchEvent(event);\n _currentHovered._mouseListener._previousIn = false;\n }\n _currentHovered = this.owner;\n event.type = EventType.MOUSE_ENTER;\n node.dispatchEvent(event);\n this._previousIn = true;\n }\n event.type = EventType.MOUSE_MOVE;\n event.bubbles = true;\n node.dispatchEvent(event);\n }\n else if (this._previousIn) {\n event.type = EventType.MOUSE_LEAVE;\n node.dispatchEvent(event);\n this._previousIn = false;\n _currentHovered = null;\n }\n else {\n // continue dispatching\n return;\n }\n\n // Event processed, cleanup\n event.stopPropagation();\n};\nvar _mouseUpHandler = function (event) {\n var pos = event.getLocation();\n var node = this.owner;\n\n if (node._hitTest(pos, this)) {\n event.type = EventType.MOUSE_UP;\n event.bubbles = true;\n node.dispatchEvent(event);\n event.stopPropagation();\n }\n};\nvar _mouseWheelHandler = function (event) {\n var pos = event.getLocation();\n var node = this.owner;\n\n if (node._hitTest(pos, this)) {\n event.type = EventType.MOUSE_WHEEL;\n event.bubbles = true;\n node.dispatchEvent(event);\n event.stopPropagation();\n }\n};\n\nfunction _searchComponentsInParent (node, comp) {\n if (comp) {\n let index = 0;\n let list = null;\n for (var curr = node; curr && cc.Node.isNode(curr); curr = curr._parent, ++index) {\n if (curr.getComponent(comp)) {\n let next = {\n index: index,\n node: curr,\n };\n\n if (list) {\n list.push(next);\n } else {\n list = [next];\n }\n }\n }\n\n return list;\n }\n\n return null;\n}\n\nfunction _checkListeners (node, events) {\n if (!(node._objFlags & Destroying)) {\n if (node._bubblingListeners) {\n for (let i = 0, l = events.length; i < l; ++i) {\n if (node._bubblingListeners.hasEventListener(events[i])) {\n return true;\n }\n }\n }\n if (node._capturingListeners) {\n for (let i = 0, l = events.length; i < l; ++i) {\n if (node._capturingListeners.hasEventListener(events[i])) {\n return true;\n }\n }\n }\n return false;\n }\n return true;\n}\n\nfunction _doDispatchEvent (owner, event) {\n var target, i;\n event.target = owner;\n\n // Event.CAPTURING_PHASE\n _cachedArray.length = 0;\n owner._getCapturingTargets(event.type, _cachedArray);\n // capturing\n event.eventPhase = 1;\n for (i = _cachedArray.length - 1; i >= 0; --i) {\n target = _cachedArray[i];\n if (target._capturingListeners) {\n event.currentTarget = target;\n // fire event\n target._capturingListeners.emit(event.type, event, _cachedArray);\n // check if propagation stopped\n if (event._propagationStopped) {\n _cachedArray.length = 0;\n return;\n }\n }\n }\n _cachedArray.length = 0;\n\n // Event.AT_TARGET\n // checks if destroyed in capturing callbacks\n event.eventPhase = 2;\n event.currentTarget = owner;\n if (owner._capturingListeners) {\n owner._capturingListeners.emit(event.type, event);\n }\n if (!event._propagationImmediateStopped && owner._bubblingListeners) {\n owner._bubblingListeners.emit(event.type, event);\n }\n\n if (!event._propagationStopped && event.bubbles) {\n // Event.BUBBLING_PHASE\n owner._getBubblingTargets(event.type, _cachedArray);\n // propagate\n event.eventPhase = 3;\n for (i = 0; i < _cachedArray.length; ++i) {\n target = _cachedArray[i];\n if (target._bubblingListeners) {\n event.currentTarget = target;\n // fire event\n target._bubblingListeners.emit(event.type, event);\n // check if propagation stopped\n if (event._propagationStopped) {\n _cachedArray.length = 0;\n return;\n }\n }\n }\n }\n _cachedArray.length = 0;\n}\n\n// traversal the node tree, child cullingMask must keep the same with the parent.\nfunction _getActualGroupIndex (node) {\n let groupIndex = node.groupIndex;\n if (groupIndex === 0 && node.parent) {\n groupIndex = _getActualGroupIndex(node.parent);\n }\n return groupIndex;\n}\n\nfunction _updateCullingMask (node) {\n let index = _getActualGroupIndex(node);\n node._cullingMask = 1 << index;\n if (CC_JSB && CC_NATIVERENDERER) {\n node._proxy && node._proxy.updateCullingMask();\n }\n for (let i = 0; i < node._children.length; i++) {\n _updateCullingMask(node._children[i]);\n }\n}\n\n// 2D/3D matrix functions\nfunction updateLocalMatrix3D () {\n if (this._localMatDirty & LocalDirtyFlag.TRSS) {\n // Update transform\n let t = this._matrix;\n let tm = t.m;\n Trs.toMat4(t, this._trs);\n\n // skew\n if (this._skewX || this._skewY) {\n let a = tm[0], b = tm[1], c = tm[4], d = tm[5];\n let skx = Math.tan(this._skewX * ONE_DEGREE);\n let sky = Math.tan(this._skewY * ONE_DEGREE);\n if (skx === Infinity)\n skx = 99999999;\n if (sky === Infinity)\n sky = 99999999;\n tm[0] = a + c * sky;\n tm[1] = b + d * sky;\n tm[4] = c + a * skx;\n tm[5] = d + b * skx;\n }\n this._localMatDirty &= ~LocalDirtyFlag.TRSS;\n // Register dirty status of world matrix so that it can be recalculated\n this._worldMatDirty = true;\n }\n}\n\nfunction updateLocalMatrix2D () {\n let dirtyFlag = this._localMatDirty;\n if (!(dirtyFlag & LocalDirtyFlag.TRSS)) return;\n\n // Update transform\n let t = this._matrix;\n let tm = t.m;\n let trs = this._trs;\n\n if (dirtyFlag & (LocalDirtyFlag.RS | LocalDirtyFlag.SKEW)) {\n let rotation = -this._eulerAngles.z;\n let hasSkew = this._skewX || this._skewY;\n let sx = trs[7], sy = trs[8];\n\n if (rotation || hasSkew) {\n let a = 1, b = 0, c = 0, d = 1;\n // rotation\n if (rotation) {\n let rotationRadians = rotation * ONE_DEGREE;\n c = Math.sin(rotationRadians);\n d = Math.cos(rotationRadians);\n a = d;\n b = -c;\n }\n // scale\n tm[0] = a *= sx;\n tm[1] = b *= sx;\n tm[4] = c *= sy;\n tm[5] = d *= sy;\n // skew\n if (hasSkew) {\n let a = tm[0], b = tm[1], c = tm[4], d = tm[5];\n let skx = Math.tan(this._skewX * ONE_DEGREE);\n let sky = Math.tan(this._skewY * ONE_DEGREE);\n if (skx === Infinity)\n skx = 99999999;\n if (sky === Infinity)\n sky = 99999999;\n tm[0] = a + c * sky;\n tm[1] = b + d * sky;\n tm[4] = c + a * skx;\n tm[5] = d + b * skx;\n }\n }\n else {\n tm[0] = sx;\n tm[1] = 0;\n tm[4] = 0;\n tm[5] = sy;\n }\n }\n\n // position\n tm[12] = trs[0];\n tm[13] = trs[1];\n\n this._localMatDirty &= ~LocalDirtyFlag.TRSS;\n // Register dirty status of world matrix so that it can be recalculated\n this._worldMatDirty = true;\n}\n\nfunction calculWorldMatrix3D () {\n // Avoid as much function call as possible\n if (this._localMatDirty & LocalDirtyFlag.TRSS) {\n this._updateLocalMatrix();\n }\n\n if (this._parent) {\n let parentMat = this._parent._worldMatrix;\n Mat4.mul(this._worldMatrix, parentMat, this._matrix);\n }\n else {\n Mat4.copy(this._worldMatrix, this._matrix);\n }\n this._worldMatDirty = false;\n}\n\nfunction calculWorldMatrix2D () {\n // Avoid as much function call as possible\n if (this._localMatDirty & LocalDirtyFlag.TRSS) {\n this._updateLocalMatrix();\n }\n\n // Assume parent world matrix is correct\n let parent = this._parent;\n if (parent) {\n this._mulMat(this._worldMatrix, parent._worldMatrix, this._matrix);\n }\n else {\n Mat4.copy(this._worldMatrix, this._matrix);\n }\n this._worldMatDirty = false;\n}\n\nfunction mulMat2D (out, a, b) {\n let am = a.m, bm = b.m, outm = out.m;\n let aa=am[0], ab=am[1], ac=am[4], ad=am[5], atx=am[12], aty=am[13];\n let ba=bm[0], bb=bm[1], bc=bm[4], bd=bm[5], btx=bm[12], bty=bm[13];\n if (ab !== 0 || ac !== 0) {\n outm[0] = ba * aa + bb * ac;\n outm[1] = ba * ab + bb * ad;\n outm[4] = bc * aa + bd * ac;\n outm[5] = bc * ab + bd * ad;\n outm[12] = aa * btx + ac * bty + atx;\n outm[13] = ab * btx + ad * bty + aty;\n }\n else {\n outm[0] = ba * aa;\n outm[1] = bb * ad;\n outm[4] = bc * aa;\n outm[5] = bd * ad;\n outm[12] = aa * btx + atx;\n outm[13] = ad * bty + aty;\n }\n}\n\nconst mulMat3D = Mat4.mul;\n\n/**\n * !#en\n * Class of all entities in Cocos Creator scenes.
\n * For events supported by Node, please refer to {{#crossLink \"Node.EventType\"}}{{/crossLink}}\n * !#zh\n * Cocos Creator 场景中的所有节点类。
\n * 支持的节点事件,请参阅 {{#crossLink \"Node.EventType\"}}{{/crossLink}}。\n * @class Node\n * @extends _BaseNode\n */\nlet NodeDefines = {\n name: 'cc.Node',\n extends: BaseNode,\n\n properties: {\n // SERIALIZABLE\n _opacity: 255,\n _color: cc.Color.WHITE,\n _contentSize: cc.Size,\n _anchorPoint: cc.v2(0.5, 0.5),\n _position: undefined,\n _scale: undefined,\n _trs: null,\n _eulerAngles: cc.Vec3,\n _skewX: 0.0,\n _skewY: 0.0,\n _zIndex: {\n default: undefined,\n type: cc.Integer\n },\n _localZOrder: {\n default: 0,\n serializable: false\n },\n\n _is3DNode: false,\n\n // internal properties\n /**\n * !#en\n * Group index of node.
\n * Which Group this node belongs to will resolve that this node's collision components can collide with which other collision componentns.
\n * !#zh\n * 节点的分组索引。
\n * 节点的分组将关系到节点的碰撞组件可以与哪些碰撞组件相碰撞。
\n * @property groupIndex\n * @type {Integer}\n * @default 0\n */\n _groupIndex: {\n default: 0,\n formerlySerializedAs: 'groupIndex'\n },\n groupIndex: {\n get () {\n return this._groupIndex;\n },\n set (value) {\n this._groupIndex = value;\n _updateCullingMask(this);\n this.emit(EventType.GROUP_CHANGED, this);\n }\n },\n\n /**\n * !#en\n * Group of node.
\n * Which Group this node belongs to will resolve that this node's collision components can collide with which other collision componentns.
\n * !#zh\n * 节点的分组。
\n * 节点的分组将关系到节点的碰撞组件可以与哪些碰撞组件相碰撞。
\n * @property group\n * @type {String}\n */\n group: {\n get () {\n return cc.game.groupList[this.groupIndex] || '';\n },\n\n set (value) {\n // update the groupIndex\n this.groupIndex = cc.game.groupList.indexOf(value);\n }\n },\n\n //properties moved from base node begin\n\n /**\n * !#en The position (x, y) of the node in its parent's coordinates.\n * !#zh 节点在父节点坐标系中的位置(x, y)。\n * @property {Vec3} position\n * @example\n * cc.log(\"Node Position: \" + node.position);\n */\n\n /**\n * !#en x axis position of node.\n * !#zh 节点 X 轴坐标。\n * @property x\n * @type {Number}\n * @example\n * node.x = 100;\n * cc.log(\"Node Position X: \" + node.x);\n */\n x: {\n get () {\n return this._trs[0];\n },\n set (value) {\n let trs = this._trs;\n if (value !== trs[0]) {\n if (!CC_EDITOR || isFinite(value)) {\n let oldValue;\n if (CC_EDITOR) {\n oldValue = trs[0];\n }\n\n trs[0] = value;\n this.setLocalDirty(LocalDirtyFlag.ALL_POSITION);\n\n // fast check event\n if (this._eventMask & POSITION_ON) {\n // send event\n if (CC_EDITOR) {\n this.emit(EventType.POSITION_CHANGED, new cc.Vec3(oldValue, trs[1], trs[2]));\n }\n else {\n this.emit(EventType.POSITION_CHANGED);\n }\n }\n }\n else {\n cc.error(ERR_INVALID_NUMBER, 'new x');\n }\n }\n },\n },\n\n /**\n * !#en y axis position of node.\n * !#zh 节点 Y 轴坐标。\n * @property y\n * @type {Number}\n * @example\n * node.y = 100;\n * cc.log(\"Node Position Y: \" + node.y);\n */\n y: {\n get () {\n return this._trs[1];\n },\n set (value) {\n let trs = this._trs;\n if (value !== trs[1]) {\n if (!CC_EDITOR || isFinite(value)) {\n let oldValue;\n if (CC_EDITOR) {\n oldValue = trs[1];\n }\n\n trs[1] = value;\n this.setLocalDirty(LocalDirtyFlag.ALL_POSITION);\n\n // fast check event\n if (this._eventMask & POSITION_ON) {\n // send event\n if (CC_EDITOR) {\n this.emit(EventType.POSITION_CHANGED, new cc.Vec3(trs[0], oldValue, trs[2]));\n }\n else {\n this.emit(EventType.POSITION_CHANGED);\n }\n }\n }\n else {\n cc.error(ERR_INVALID_NUMBER, 'new y');\n }\n }\n },\n },\n\n /**\n * !#en z axis position of node.\n * !#zh 节点 Z 轴坐标。\n * @property z\n * @type {Number}\n */\n z: {\n get () {\n return this._trs[2];\n },\n set (value) {\n let trs = this._trs;\n if (value !== trs[2]) {\n if (!CC_EDITOR || isFinite(value)) {\n let oldValue;\n if (CC_EDITOR) {\n oldValue = trs[2];\n }\n trs[2] = value;\n this.setLocalDirty(LocalDirtyFlag.ALL_POSITION);\n !CC_NATIVERENDERER && (this._renderFlag |= RenderFlow.FLAG_WORLD_TRANSFORM);\n // fast check event\n if (this._eventMask & POSITION_ON) {\n if (CC_EDITOR) {\n this.emit(EventType.POSITION_CHANGED, new cc.Vec3(trs[0], trs[1], oldValue));\n }\n else {\n this.emit(EventType.POSITION_CHANGED);\n }\n }\n }\n else {\n cc.error(ERR_INVALID_NUMBER, 'new z');\n }\n }\n }\n },\n\n /**\n * !#en Rotation of node.\n * !#zh 该节点旋转角度。\n * @property rotation\n * @type {Number}\n * @deprecated since v2.1\n * @example\n * node.rotation = 90;\n * cc.log(\"Node Rotation: \" + node.rotation);\n */\n rotation: {\n get () {\n if (CC_DEBUG) {\n cc.warn(\"`cc.Node.rotation` is deprecated since v2.1.0, please use `-angle` instead. (`this.node.rotation` -> `-this.node.angle`)\");\n }\n return -this.angle;\n },\n set (value) {\n if (CC_DEBUG) {\n cc.warn(\"`cc.Node.rotation` is deprecated since v2.1.0, please set `-angle` instead. (`this.node.rotation = x` -> `this.node.angle = -x`)\");\n }\n this.angle = -value;\n }\n },\n\n /**\n * !#en\n * Angle of node, the positive value is anti-clockwise direction.\n * !#zh\n * 该节点的旋转角度,正值为逆时针方向。\n * @property angle\n * @type {Number}\n */\n angle: {\n get () {\n return this._eulerAngles.z;\n },\n set (value) {\n Vec3.set(this._eulerAngles, 0, 0, value);\n Trs.fromAngleZ(this._trs, value);\n this.setLocalDirty(LocalDirtyFlag.ALL_ROTATION);\n\n if (this._eventMask & ROTATION_ON) {\n this.emit(EventType.ROTATION_CHANGED);\n }\n }\n },\n\n /**\n * !#en The rotation as Euler angles in degrees, used in 3D node.\n * !#zh 该节点的欧拉角度,用于 3D 节点。\n * @property eulerAngles\n * @type {Vec3}\n * @example\n * node.is3DNode = true;\n * node.eulerAngles = cc.v3(45, 45, 45);\n * cc.log(\"Node eulerAngles (X, Y, Z): \" + node.eulerAngles.toString());\n */\n\n /**\n * !#en Rotation on x axis.\n * !#zh 该节点 X 轴旋转角度。\n * @property rotationX\n * @type {Number}\n * @deprecated since v2.1\n * @example\n * node.is3DNode = true;\n * node.eulerAngles = cc.v3(45, 0, 0);\n * cc.log(\"Node eulerAngles X: \" + node.eulerAngles.x);\n */\n rotationX: {\n get () {\n if (CC_DEBUG) {\n cc.warn(\"`cc.Node.rotationX` is deprecated since v2.1.0, please use `eulerAngles.x` instead. (`this.node.rotationX` -> `this.node.eulerAngles.x`)\");\n }\n return this._eulerAngles.x;\n },\n set (value) {\n if (CC_DEBUG) {\n cc.warn(\"`cc.Node.rotationX` is deprecated since v2.1.0, please set `eulerAngles` instead. (`this.node.rotationX = x` -> `this.node.is3DNode = true; this.node.eulerAngles = cc.v3(x, 0, 0)`\");\n }\n if (this._eulerAngles.x !== value) {\n this._eulerAngles.x = value;\n // Update quaternion from rotation\n if (this._eulerAngles.x === this._eulerAngles.y) {\n Trs.fromAngleZ(this._trs, -value);\n }\n else {\n Trs.fromEulerNumber(this._trs, value, this._eulerAngles.y, 0);\n }\n this.setLocalDirty(LocalDirtyFlag.ALL_ROTATION);\n\n if (this._eventMask & ROTATION_ON) {\n this.emit(EventType.ROTATION_CHANGED);\n }\n }\n },\n },\n\n /**\n * !#en Rotation on y axis.\n * !#zh 该节点 Y 轴旋转角度。\n * @property rotationY\n * @type {Number}\n * @deprecated since v2.1\n * @example\n * node.is3DNode = true;\n * node.eulerAngles = cc.v3(0, 45, 0);\n * cc.log(\"Node eulerAngles Y: \" + node.eulerAngles.y);\n */\n rotationY: {\n get () {\n if (CC_DEBUG) {\n cc.warn(\"`cc.Node.rotationY` is deprecated since v2.1.0, please use `eulerAngles.y` instead. (`this.node.rotationY` -> `this.node.eulerAngles.y`)\");\n }\n return this._eulerAngles.y;\n },\n set (value) {\n if (CC_DEBUG) {\n cc.warn(\"`cc.Node.rotationY` is deprecated since v2.1.0, please set `eulerAngles` instead. (`this.node.rotationY = y` -> `this.node.is3DNode = true; this.node.eulerAngles = cc.v3(0, y, 0)`\");\n }\n if (this._eulerAngles.y !== value) {\n this._eulerAngles.y = value;\n // Update quaternion from rotation\n if (this._eulerAngles.x === this._eulerAngles.y) {\n Trs.fromAngleZ(this._trs, -value);\n }\n else {\n Trs.fromEulerNumber(this._trs, this._eulerAngles.x, value, 0);\n }\n this.setLocalDirty(LocalDirtyFlag.ALL_ROTATION);\n\n if (this._eventMask & ROTATION_ON) {\n this.emit(EventType.ROTATION_CHANGED);\n }\n }\n },\n },\n\n eulerAngles: {\n get () {\n if (CC_EDITOR) {\n return this._eulerAngles;\n }\n else {\n return Trs.toEuler(this._eulerAngles, this._trs);\n }\n }, set (v) {\n if (CC_EDITOR) {\n this._eulerAngles.set(v);\n }\n\n Trs.fromEuler(this._trs, v);\n this.setLocalDirty(LocalDirtyFlag.ALL_ROTATION);\n !CC_NATIVERENDERER && (this._renderFlag |= RenderFlow.FLAG_TRANSFORM);\n\n if (this._eventMask & ROTATION_ON) {\n this.emit(EventType.ROTATION_CHANGED);\n }\n }\n },\n\n // This property is used for Mesh Skeleton Animation\n // Should be removed when node.rotation upgrade to quaternion value\n quat: {\n get () {\n let trs = this._trs;\n return new Quat(trs[3], trs[4], trs[5], trs[6]);\n }, set (v) {\n this.setRotation(v);\n }\n },\n\n /**\n * !#en The local scale relative to the parent.\n * !#zh 节点相对父节点的缩放。\n * @property scale\n * @type {Number}\n * @example\n * node.scale = 1;\n */\n scale: {\n get () {\n return this._trs[7];\n },\n set (v) {\n this.setScale(v);\n }\n },\n\n /**\n * !#en Scale on x axis.\n * !#zh 节点 X 轴缩放。\n * @property scaleX\n * @type {Number}\n * @example\n * node.scaleX = 0.5;\n * cc.log(\"Node Scale X: \" + node.scaleX);\n */\n scaleX: {\n get () {\n return this._trs[7];\n },\n set (value) {\n if (this._trs[7] !== value) {\n this._trs[7] = value;\n this.setLocalDirty(LocalDirtyFlag.ALL_SCALE);\n\n if (this._eventMask & SCALE_ON) {\n this.emit(EventType.SCALE_CHANGED);\n }\n }\n },\n },\n\n /**\n * !#en Scale on y axis.\n * !#zh 节点 Y 轴缩放。\n * @property scaleY\n * @type {Number}\n * @example\n * node.scaleY = 0.5;\n * cc.log(\"Node Scale Y: \" + node.scaleY);\n */\n scaleY: {\n get () {\n return this._trs[8];\n },\n set (value) {\n if (this._trs[8] !== value) {\n this._trs[8] = value;\n this.setLocalDirty(LocalDirtyFlag.ALL_SCALE);\n\n if (this._eventMask & SCALE_ON) {\n this.emit(EventType.SCALE_CHANGED);\n }\n }\n },\n },\n\n /**\n * !#en Scale on z axis.\n * !#zh 节点 Z 轴缩放。\n * @property scaleZ\n * @type {Number}\n */\n scaleZ: {\n get () {\n return this._trs[9];\n },\n set (value) {\n if (this._trs[9] !== value) {\n this._trs[9] = value;\n this.setLocalDirty(LocalDirtyFlag.ALL_SCALE);\n !CC_NATIVERENDERER && (this._renderFlag |= RenderFlow.FLAG_TRANSFORM);\n\n if (this._eventMask & SCALE_ON) {\n this.emit(EventType.SCALE_CHANGED);\n }\n }\n }\n },\n\n /**\n * !#en Skew x\n * !#zh 该节点 X 轴倾斜角度。\n * @property skewX\n * @type {Number}\n * @example\n * node.skewX = 0;\n * cc.log(\"Node SkewX: \" + node.skewX);\n * @deprecated since v2.2.1\n */\n skewX: {\n get () {\n return this._skewX;\n },\n set (value) {\n _skewWarn(value, this);\n\n this._skewX = value;\n this.setLocalDirty(LocalDirtyFlag.SKEW);\n if (CC_JSB && CC_NATIVERENDERER) {\n this._proxy.updateSkew();\n }\n }\n },\n\n /**\n * !#en Skew y\n * !#zh 该节点 Y 轴倾斜角度。\n * @property skewY\n * @type {Number}\n * @example\n * node.skewY = 0;\n * cc.log(\"Node SkewY: \" + node.skewY);\n * @deprecated since v2.2.1\n */\n skewY: {\n get () {\n return this._skewY;\n },\n set (value) {\n _skewWarn(value, this);\n\n this._skewY = value;\n this.setLocalDirty(LocalDirtyFlag.SKEW);\n if (CC_JSB && CC_NATIVERENDERER) {\n this._proxy.updateSkew();\n }\n }\n },\n\n /**\n * !#en Opacity of node, default value is 255.\n * !#zh 节点透明度,默认值为 255。\n * @property opacity\n * @type {Number}\n * @example\n * node.opacity = 255;\n */\n opacity: {\n get () {\n return this._opacity;\n },\n set (value) {\n value = cc.misc.clampf(value, 0, 255);\n if (this._opacity !== value) {\n this._opacity = value;\n if (CC_JSB && CC_NATIVERENDERER) {\n this._proxy.updateOpacity();\n }\n this._renderFlag |= RenderFlow.FLAG_OPACITY_COLOR;\n }\n },\n range: [0, 255]\n },\n\n /**\n * !#en Color of node, default value is white: (255, 255, 255).\n * !#zh 节点颜色。默认为白色,数值为:(255,255,255)。\n * @property color\n * @type {Color}\n * @example\n * node.color = new cc.Color(255, 255, 255);\n */\n color: {\n get () {\n return this._color.clone()\n },\n set (value) {\n if (!this._color.equals(value)) {\n this._color.set(value);\n if (CC_DEV && value.a !== 255) {\n cc.warnID(1626);\n }\n\n this._renderFlag |= RenderFlow.FLAG_COLOR;\n\n if (this._eventMask & COLOR_ON) {\n this.emit(EventType.COLOR_CHANGED, value);\n }\n }\n },\n },\n\n /**\n * !#en Anchor point's position on x axis.\n * !#zh 节点 X 轴锚点位置。\n * @property anchorX\n * @type {Number}\n * @example\n * node.anchorX = 0;\n */\n anchorX: {\n get () {\n return this._anchorPoint.x;\n },\n set (value) {\n var anchorPoint = this._anchorPoint;\n if (anchorPoint.x !== value) {\n anchorPoint.x = value;\n if (this._eventMask & ANCHOR_ON) {\n this.emit(EventType.ANCHOR_CHANGED);\n }\n }\n },\n },\n\n /**\n * !#en Anchor point's position on y axis.\n * !#zh 节点 Y 轴锚点位置。\n * @property anchorY\n * @type {Number}\n * @example\n * node.anchorY = 0;\n */\n anchorY: {\n get () {\n return this._anchorPoint.y;\n },\n set (value) {\n var anchorPoint = this._anchorPoint;\n if (anchorPoint.y !== value) {\n anchorPoint.y = value;\n if (this._eventMask & ANCHOR_ON) {\n this.emit(EventType.ANCHOR_CHANGED);\n }\n }\n },\n },\n\n /**\n * !#en Width of node.\n * !#zh 节点宽度。\n * @property width\n * @type {Number}\n * @example\n * node.width = 100;\n */\n width: {\n get () {\n return this._contentSize.width;\n },\n set (value) {\n if (value !== this._contentSize.width) {\n if (CC_EDITOR) {\n var clone = cc.size(this._contentSize.width, this._contentSize.height);\n }\n this._contentSize.width = value;\n if (this._eventMask & SIZE_ON) {\n if (CC_EDITOR) {\n this.emit(EventType.SIZE_CHANGED, clone);\n }\n else {\n this.emit(EventType.SIZE_CHANGED);\n }\n }\n }\n },\n },\n\n /**\n * !#en Height of node.\n * !#zh 节点高度。\n * @property height\n * @type {Number}\n * @example\n * node.height = 100;\n */\n height: {\n get () {\n return this._contentSize.height;\n },\n set (value) {\n if (value !== this._contentSize.height) {\n if (CC_EDITOR) {\n var clone = cc.size(this._contentSize.width, this._contentSize.height);\n }\n this._contentSize.height = value;\n if (this._eventMask & SIZE_ON) {\n if (CC_EDITOR) {\n this.emit(EventType.SIZE_CHANGED, clone);\n }\n else {\n this.emit(EventType.SIZE_CHANGED);\n }\n }\n }\n },\n },\n\n /**\n * !#en zIndex is the 'key' used to sort the node relative to its siblings.
\n * The value of zIndex should be in the range between cc.macro.MIN_ZINDEX and cc.macro.MAX_ZINDEX.
\n * The Node's parent will sort all its children based on the zIndex value and the arrival order.
\n * Nodes with greater zIndex will be sorted after nodes with smaller zIndex.
\n * If two nodes have the same zIndex, then the node that was added first to the children's array will be in front of the other node in the array.
\n * Node's order in children list will affect its rendering order. Parent is always rendering before all children.\n * !#zh zIndex 是用来对节点进行排序的关键属性,它决定一个节点在兄弟节点之间的位置。
\n * zIndex 的取值应该介于 cc.macro.MIN_ZINDEX 和 cc.macro.MAX_ZINDEX 之间\n * 父节点主要根据节点的 zIndex 和添加次序来排序,拥有更高 zIndex 的节点将被排在后面,如果两个节点的 zIndex 一致,先添加的节点会稳定排在另一个节点之前。
\n * 节点在 children 中的顺序决定了其渲染顺序。父节点永远在所有子节点之前被渲染\n * @property zIndex\n * @type {Number}\n * @example\n * node.zIndex = 1;\n * cc.log(\"Node zIndex: \" + node.zIndex);\n */\n zIndex: {\n get () {\n return this._localZOrder >> 16;\n },\n set (value) {\n if (value > macro.MAX_ZINDEX) {\n cc.warnID(1636);\n value = macro.MAX_ZINDEX;\n }\n else if (value < macro.MIN_ZINDEX) {\n cc.warnID(1637);\n value = macro.MIN_ZINDEX;\n }\n\n if (this.zIndex !== value) {\n this._localZOrder = (this._localZOrder & 0x0000ffff) | (value << 16);\n this.emit(EventType.SIBLING_ORDER_CHANGED);\n\n this._onSiblingIndexChanged();\n }\n }\n },\n\n /**\n * !#en\n * Switch 2D/3D node. The 2D nodes will run faster.\n * !#zh\n * 切换 2D/3D 节点,2D 节点会有更高的运行效率\n * @property {Boolean} is3DNode\n * @default false\n */\n is3DNode: {\n get () {\n return this._is3DNode;\n }, set (v) {\n this._is3DNode = v;\n this._update3DFunction();\n }\n },\n\n /**\n * !#en Returns a normalized vector representing the up direction (Y axis) of the node in world space.\n * !#zh 获取节点正上方(y 轴)面对的方向,返回值为世界坐标系下的归一化向量\n *\n * @property up\n * @type {Vec3}\n */\n up: {\n get () {\n var _up = Vec3.transformQuat(_urfVec3, Vec3.UP, this.getWorldRotation(_urfQuat));\n return _up.clone();\n }\n },\n\n /**\n * !#en Returns a normalized vector representing the right direction (X axis) of the node in world space.\n * !#zh 获取节点正右方(x 轴)面对的方向,返回值为世界坐标系下的归一化向量\n *\n * @property right\n * @type {Vec3}\n */\n right: {\n get () {\n var _right = Vec3.transformQuat(_urfVec3, Vec3.RIGHT, this.getWorldRotation(_urfQuat));\n return _right.clone();\n }\n },\n\n /**\n * !#en Returns a normalized vector representing the forward direction (Z axis) of the node in world space.\n * !#zh 获取节点正前方(z 轴)面对的方向,返回值为世界坐标系下的归一化向量\n *\n * @property forward\n * @type {Vec3}\n */\n forward: {\n get () {\n var _forward = Vec3.transformQuat(_urfVec3, Vec3.FORWARD, this.getWorldRotation(_urfQuat));\n return _forward.clone();\n }\n },\n },\n\n /**\n * @method constructor\n * @param {String} [name]\n */\n ctor () {\n this._reorderChildDirty = false;\n\n // cache component\n this._widget = null;\n // fast render component access\n this._renderComponent = null;\n // Event listeners\n this._capturingListeners = null;\n this._bubblingListeners = null;\n // Touch event listener\n this._touchListener = null;\n // Mouse event listener\n this._mouseListener = null;\n\n this._initDataFromPool();\n\n this._eventMask = 0;\n this._cullingMask = 1;\n this._childArrivalOrder = 1;\n\n // Proxy\n if (CC_JSB && CC_NATIVERENDERER) {\n this._proxy = new renderer.NodeProxy(this._spaceInfo.unitID, this._spaceInfo.index, this._id, this._name);\n this._proxy.init(this);\n }\n // should reset _renderFlag for both web and native\n this._renderFlag = RenderFlow.FLAG_TRANSFORM | RenderFlow.FLAG_OPACITY_COLOR;\n },\n\n statics: {\n EventType,\n _LocalDirtyFlag: LocalDirtyFlag,\n // is node but not scene\n isNode (obj) {\n return obj instanceof Node && (obj.constructor === Node || !(obj instanceof cc.Scene));\n },\n BuiltinGroupIndex\n },\n\n // OVERRIDES\n\n _onSiblingIndexChanged () {\n // update rendering scene graph, sort them by arrivalOrder\n if (this._parent) {\n this._parent._delaySort();\n }\n },\n\n _onPreDestroy () {\n var destroyByParent = this._onPreDestroyBase();\n\n // Actions\n if (ActionManagerExist) {\n cc.director.getActionManager().removeAllActionsFromTarget(this);\n }\n\n // Remove Node.currentHovered\n if (_currentHovered === this) {\n _currentHovered = null;\n }\n\n this._bubblingListeners && this._bubblingListeners.clear();\n this._capturingListeners && this._capturingListeners.clear();\n\n // Remove all event listeners if necessary\n if (this._touchListener || this._mouseListener) {\n eventManager.removeListeners(this);\n if (this._touchListener) {\n this._touchListener.owner = null;\n this._touchListener.mask = null;\n this._touchListener = null;\n }\n if (this._mouseListener) {\n this._mouseListener.owner = null;\n this._mouseListener.mask = null;\n this._mouseListener = null;\n }\n }\n\n if (CC_JSB && CC_NATIVERENDERER) {\n this._proxy.destroy();\n this._proxy = null;\n }\n\n this._backDataIntoPool();\n\n if (this._reorderChildDirty) {\n cc.director.__fastOff(cc.Director.EVENT_AFTER_UPDATE, this.sortAllChildren, this);\n }\n\n if (!destroyByParent) {\n // simulate some destruct logic to make undo system work correctly\n if (CC_EDITOR) {\n // ensure this node can reattach to scene by undo system\n this._parent = null;\n }\n }\n },\n\n _onPostActivated (active) {\n var actionManager = ActionManagerExist ? cc.director.getActionManager() : null;\n if (active) {\n // Refresh transform\n this._renderFlag |= RenderFlow.FLAG_WORLD_TRANSFORM;\n // ActionManager & EventManager\n actionManager && actionManager.resumeTarget(this);\n eventManager.resumeTarget(this);\n // Search Mask in parent\n this._checkListenerMask();\n } else {\n // deactivate\n actionManager && actionManager.pauseTarget(this);\n eventManager.pauseTarget(this);\n }\n },\n\n _onHierarchyChanged (oldParent) {\n this._updateOrderOfArrival();\n // Fixed a bug where children and parent node groups were forced to synchronize, instead of only synchronizing `_cullingMask` value\n _updateCullingMask(this);\n if (this._parent) {\n this._parent._delaySort();\n }\n this._renderFlag |= RenderFlow.FLAG_WORLD_TRANSFORM;\n this._onHierarchyChangedBase(oldParent);\n if (cc._widgetManager) {\n cc._widgetManager._nodesOrderDirty = true;\n }\n\n if (oldParent && this._activeInHierarchy) {\n //TODO: It may be necessary to update the listener mask of all child nodes.\n this._checkListenerMask();\n }\n\n // Node proxy\n if (CC_JSB && CC_NATIVERENDERER) {\n this._proxy.updateParent();\n }\n },\n\n // INTERNAL\n\n _update3DFunction () {\n if (this._is3DNode) {\n this._updateLocalMatrix = updateLocalMatrix3D;\n this._calculWorldMatrix = calculWorldMatrix3D;\n this._mulMat = mulMat3D;\n }\n else {\n this._updateLocalMatrix = updateLocalMatrix2D;\n this._calculWorldMatrix = calculWorldMatrix2D;\n this._mulMat = mulMat2D;\n }\n if (this._renderComponent && this._renderComponent._on3DNodeChanged) {\n this._renderComponent._on3DNodeChanged();\n }\n this._renderFlag |= RenderFlow.FLAG_TRANSFORM;\n this._localMatDirty = LocalDirtyFlag.ALL;\n\n if (CC_JSB && CC_NATIVERENDERER) {\n this._proxy.update3DNode();\n }\n },\n\n _initDataFromPool () {\n if (!this._spaceInfo) {\n if (CC_EDITOR || CC_TEST) {\n this._spaceInfo = {\n trs: new Float64Array(10),\n localMat: new Float64Array(16),\n worldMat: new Float64Array(16),\n };\n } else {\n this._spaceInfo = nodeMemPool.pop();\n }\n }\n\n let spaceInfo = this._spaceInfo;\n this._matrix = cc.mat4(spaceInfo.localMat);\n Mat4.identity(this._matrix);\n this._worldMatrix = cc.mat4(spaceInfo.worldMat);\n Mat4.identity(this._worldMatrix);\n this._localMatDirty = LocalDirtyFlag.ALL;\n this._worldMatDirty = true;\n\n let trs = this._trs = spaceInfo.trs;\n trs[0] = 0; // position.x\n trs[1] = 0; // position.y\n trs[2] = 0; // position.z\n trs[3] = 0; // rotation.x\n trs[4] = 0; // rotation.y\n trs[5] = 0; // rotation.z\n trs[6] = 1; // rotation.w\n trs[7] = 1; // scale.x\n trs[8] = 1; // scale.y\n trs[9] = 1; // scale.z\n },\n\n _backDataIntoPool () {\n if (!(CC_EDITOR || CC_TEST)) {\n // push back to pool\n nodeMemPool.push(this._spaceInfo);\n this._matrix = null;\n this._worldMatrix = null;\n this._trs = null;\n this._spaceInfo = null;\n }\n },\n\n _toEuler () {\n if (this.is3DNode) {\n Trs.toEuler(this._eulerAngles, this._trs);\n }\n else {\n let z = Math.asin(this._trs[5]) / ONE_DEGREE * 2;\n Vec3.set(this._eulerAngles, 0, 0, z);\n }\n },\n\n _fromEuler () {\n if (this.is3DNode) {\n Trs.fromEuler(this._trs, this._eulerAngles);\n }\n else {\n Trs.fromAngleZ(this._trs, this._eulerAngles.z);\n }\n },\n\n _initProperties () {\n if (this._is3DNode) {\n this._update3DFunction();\n }\n\n let trs = this._trs;\n if (trs) {\n let desTrs = trs;\n trs = this._trs = this._spaceInfo.trs;\n // just adapt to old trs\n if (desTrs.length === 11) {\n trs.set(desTrs.subarray(1));\n } else {\n trs.set(desTrs);\n }\n } else {\n trs = this._trs = this._spaceInfo.trs;\n }\n\n if (CC_EDITOR) {\n if (this._skewX !== 0 || this._skewY !== 0) {\n var NodeUtils = Editor.require('scene://utils/node');\n cc.warn(\"`cc.Node.skewX/Y` is deprecated since v2.2.1, please use 3D node instead.\", `Node: ${NodeUtils.getNodePath(this)}.`);\n }\n }\n\n this._fromEuler();\n\n if (CC_JSB && CC_NATIVERENDERER) {\n this._renderFlag |= RenderFlow.FLAG_TRANSFORM | RenderFlow.FLAG_OPACITY_COLOR;\n }\n },\n\n /*\n * The initializer for Node which will be called before all components onLoad\n */\n _onBatchCreated (dontSyncChildPrefab) {\n this._initProperties();\n\n // Fixed a bug where children and parent node groups were forced to synchronize, instead of only synchronizing `_cullingMask` value\n this._cullingMask = 1 << _getActualGroupIndex(this);\n if (CC_JSB && CC_NATIVERENDERER) {\n this._proxy && this._proxy.updateCullingMask();\n }\n\n if (!this._activeInHierarchy) {\n if (CC_EDITOR ? cc.director.getActionManager() : ActionManagerExist) {\n // deactivate ActionManager and EventManager by default\n cc.director.getActionManager().pauseTarget(this);\n }\n eventManager.pauseTarget(this);\n }\n\n let children = this._children;\n for (let i = 0, len = children.length; i < len; i++) {\n let child = children[i];\n if (!dontSyncChildPrefab) {\n // sync child prefab\n let prefabInfo = child._prefab;\n if (prefabInfo && prefabInfo.sync && prefabInfo.root === child) {\n PrefabHelper.syncWithPrefab(child);\n }\n child._updateOrderOfArrival();\n }\n child._onBatchCreated(dontSyncChildPrefab);\n }\n\n if (children.length > 0) {\n this._renderFlag |= RenderFlow.FLAG_CHILDREN;\n }\n\n if (CC_JSB && CC_NATIVERENDERER) {\n this._proxy.initNative();\n }\n },\n\n // EVENT TARGET\n _checkListenerMask () {\n // Because Mask may be nested, need to find all the Mask components in the parent node.\n // The click area must satisfy all Masks to trigger the click.\n if (this._touchListener) {\n var mask = this._touchListener.mask = _searchComponentsInParent(this, cc.Mask);\n if (this._mouseListener) {\n this._mouseListener.mask = mask;\n }\n } else if (this._mouseListener) {\n this._mouseListener.mask = _searchComponentsInParent(this, cc.Mask);\n }\n },\n\n _checknSetupSysEvent (type) {\n let newAdded = false;\n let forDispatch = false;\n if (_touchEvents.indexOf(type) !== -1) {\n if (!this._touchListener) {\n this._touchListener = cc.EventListener.create({\n event: cc.EventListener.TOUCH_ONE_BY_ONE,\n swallowTouches: true,\n owner: this,\n mask: _searchComponentsInParent(this, cc.Mask),\n onTouchBegan: _touchStartHandler,\n onTouchMoved: _touchMoveHandler,\n onTouchEnded: _touchEndHandler,\n onTouchCancelled: _touchCancelHandler\n });\n eventManager.addListener(this._touchListener, this);\n newAdded = true;\n }\n forDispatch = true;\n }\n else if (_mouseEvents.indexOf(type) !== -1) {\n if (!this._mouseListener) {\n this._mouseListener = cc.EventListener.create({\n event: cc.EventListener.MOUSE,\n _previousIn: false,\n owner: this,\n mask: _searchComponentsInParent(this, cc.Mask),\n onMouseDown: _mouseDownHandler,\n onMouseMove: _mouseMoveHandler,\n onMouseUp: _mouseUpHandler,\n onMouseScroll: _mouseWheelHandler,\n });\n eventManager.addListener(this._mouseListener, this);\n newAdded = true;\n }\n forDispatch = true;\n }\n if (newAdded && !this._activeInHierarchy) {\n cc.director.getScheduler().schedule(function () {\n if (!this._activeInHierarchy) {\n eventManager.pauseTarget(this);\n }\n }, this, 0, 0, 0, false);\n }\n return forDispatch;\n },\n\n /**\n * !#en\n * Register a callback of a specific event type on Node.
\n * Use this method to register touch or mouse event permit propagation based on scene graph,
\n * These kinds of event are triggered with dispatchEvent, the dispatch process has three steps:
\n * 1. Capturing phase: dispatch in capture targets (`_getCapturingTargets`), e.g. parents in node tree, from root to the real target
\n * 2. At target phase: dispatch to the listeners of the real target
\n * 3. Bubbling phase: dispatch in bubble targets (`_getBubblingTargets`), e.g. parents in node tree, from the real target to root
\n * In any moment of the dispatching process, it can be stopped via `event.stopPropagation()` or `event.stopPropagationImmidiate()`.
\n * It's the recommended way to register touch/mouse event for Node,
\n * please do not use cc.eventManager directly for Node.
\n * You can also register custom event and use `emit` to trigger custom event on Node.
\n * For such events, there won't be capturing and bubbling phase, your event will be dispatched directly to its listeners registered on the same node.
\n * You can also pass event callback parameters with `emit` by passing parameters after `type`.\n * !#zh\n * 在节点上注册指定类型的回调函数,也可以设置 target 用于绑定响应函数的 this 对象。
\n * 鼠标或触摸事件会被系统调用 dispatchEvent 方法触发,触发的过程包含三个阶段:
\n * 1. 捕获阶段:派发事件给捕获目标(通过 `_getCapturingTargets` 获取),比如,节点树中注册了捕获阶段的父节点,从根节点开始派发直到目标节点。
\n * 2. 目标阶段:派发给目标节点的监听器。
\n * 3. 冒泡阶段:派发事件给冒泡目标(通过 `_getBubblingTargets` 获取),比如,节点树中注册了冒泡阶段的父节点,从目标节点开始派发直到根节点。
\n * 同时您可以将事件派发到父节点或者通过调用 stopPropagation 拦截它。
\n * 推荐使用这种方式来监听节点上的触摸或鼠标事件,请不要在节点上直接使用 cc.eventManager。
\n * 你也可以注册自定义事件到节点上,并通过 emit 方法触发此类事件,对于这类事件,不会发生捕获冒泡阶段,只会直接派发给注册在该节点上的监听器
\n * 你可以通过在 emit 方法调用时在 type 之后传递额外的参数作为事件回调的参数列表\n * @method on\n * @param {String|Node.EventType} type - A string representing the event type to listen for.
See {{#crossLink \"Node/EventTyupe/POSITION_CHANGED\"}}Node Events{{/crossLink}} for all builtin events.\n * @param {Function} callback - The callback that will be invoked when the event is dispatched. The callback is ignored if it is a duplicate (the callbacks are unique).\n * @param {Event|any} [callback.event] event or first argument when emit\n * @param {any} [callback.arg2] arg2\n * @param {any} [callback.arg3] arg3\n * @param {any} [callback.arg4] arg4\n * @param {any} [callback.arg5] arg5\n * @param {Object} [target] - The target (this object) to invoke the callback, can be null\n * @param {Boolean} [useCapture=false] - When set to true, the listener will be triggered at capturing phase which is ahead of the final target emit, otherwise it will be triggered during bubbling phase.\n * @return {Function} - Just returns the incoming callback so you can save the anonymous function easier.\n * @typescript\n * on(type: string, callback: T, target?: any, useCapture?: boolean): T\n * @example\n * this.node.on(cc.Node.EventType.TOUCH_START, this.memberFunction, this); // if \"this\" is component and the \"memberFunction\" declared in CCClass.\n * node.on(cc.Node.EventType.TOUCH_START, callback, this);\n * node.on(cc.Node.EventType.TOUCH_MOVE, callback, this);\n * node.on(cc.Node.EventType.TOUCH_END, callback, this);\n * node.on(cc.Node.EventType.TOUCH_CANCEL, callback, this);\n * node.on(cc.Node.EventType.ANCHOR_CHANGED, callback);\n * node.on(cc.Node.EventType.COLOR_CHANGED, callback);\n */\n on (type, callback, target, useCapture) {\n let forDispatch = this._checknSetupSysEvent(type);\n if (forDispatch) {\n return this._onDispatch(type, callback, target, useCapture);\n }\n else {\n switch (type) {\n case EventType.POSITION_CHANGED:\n this._eventMask |= POSITION_ON;\n break;\n case EventType.SCALE_CHANGED:\n this._eventMask |= SCALE_ON;\n break;\n case EventType.ROTATION_CHANGED:\n this._eventMask |= ROTATION_ON;\n break;\n case EventType.SIZE_CHANGED:\n this._eventMask |= SIZE_ON;\n break;\n case EventType.ANCHOR_CHANGED:\n this._eventMask |= ANCHOR_ON;\n break;\n case EventType.COLOR_CHANGED:\n this._eventMask |= COLOR_ON;\n break;\n }\n if (!this._bubblingListeners) {\n this._bubblingListeners = new EventTarget();\n }\n return this._bubblingListeners.on(type, callback, target);\n }\n },\n\n /**\n * !#en\n * Register an callback of a specific event type on the Node,\n * the callback will remove itself after the first time it is triggered.\n * !#zh\n * 注册节点的特定事件类型回调,回调会在第一时间被触发后删除自身。\n *\n * @method once\n * @param {String} type - A string representing the event type to listen for.\n * @param {Function} callback - The callback that will be invoked when the event is dispatched.\n * The callback is ignored if it is a duplicate (the callbacks are unique).\n * @param {Event|any} [callback.event] event or first argument when emit\n * @param {any} [callback.arg2] arg2\n * @param {any} [callback.arg3] arg3\n * @param {any} [callback.arg4] arg4\n * @param {any} [callback.arg5] arg5\n * @param {Object} [target] - The target (this object) to invoke the callback, can be null\n * @typescript\n * once(type: string, callback: T, target?: any, useCapture?: boolean): T\n * @example\n * node.once(cc.Node.EventType.ANCHOR_CHANGED, callback);\n */\n once (type, callback, target, useCapture) {\n let forDispatch = this._checknSetupSysEvent(type);\n\n let listeners = null;\n if (forDispatch && useCapture) {\n listeners = this._capturingListeners = this._capturingListeners || new EventTarget();\n }\n else {\n listeners = this._bubblingListeners = this._bubblingListeners || new EventTarget();\n }\n\n listeners.once(type, callback, target);\n listeners.once(type, () => {\n this.off(type, callback, target);\n }, undefined);\n },\n\n _onDispatch (type, callback, target, useCapture) {\n // Accept also patameters like: (type, callback, useCapture)\n if (typeof target === 'boolean') {\n useCapture = target;\n target = undefined;\n }\n else useCapture = !!useCapture;\n if (!callback) {\n cc.errorID(6800);\n return;\n }\n\n var listeners = null;\n if (useCapture) {\n listeners = this._capturingListeners = this._capturingListeners || new EventTarget();\n }\n else {\n listeners = this._bubblingListeners = this._bubblingListeners || new EventTarget();\n }\n\n if ( !listeners.hasEventListener(type, callback, target) ) {\n listeners.on(type, callback, target);\n\n if (target && target.__eventTargets) {\n target.__eventTargets.push(this);\n }\n }\n\n return callback;\n },\n\n /**\n * !#en\n * Removes the callback previously registered with the same type, callback, target and or useCapture.\n * This method is merely an alias to removeEventListener.\n * !#zh 删除之前与同类型,回调,目标或 useCapture 注册的回调。\n * @method off\n * @param {String} type - A string representing the event type being removed.\n * @param {Function} [callback] - The callback to remove.\n * @param {Object} [target] - The target (this object) to invoke the callback, if it's not given, only callback without target will be removed\n * @param {Boolean} [useCapture=false] - When set to true, the listener will be triggered at capturing phase which is ahead of the final target emit, otherwise it will be triggered during bubbling phase.\n * @example\n * this.node.off(cc.Node.EventType.TOUCH_START, this.memberFunction, this);\n * node.off(cc.Node.EventType.TOUCH_START, callback, this.node);\n * node.off(cc.Node.EventType.ANCHOR_CHANGED, callback, this);\n */\n off (type, callback, target, useCapture) {\n let touchEvent = _touchEvents.indexOf(type) !== -1;\n let mouseEvent = !touchEvent && _mouseEvents.indexOf(type) !== -1;\n if (touchEvent || mouseEvent) {\n this._offDispatch(type, callback, target, useCapture);\n\n if (touchEvent) {\n if (this._touchListener && !_checkListeners(this, _touchEvents)) {\n eventManager.removeListener(this._touchListener);\n this._touchListener = null;\n }\n }\n else if (mouseEvent) {\n if (this._mouseListener && !_checkListeners(this, _mouseEvents)) {\n eventManager.removeListener(this._mouseListener);\n this._mouseListener = null;\n }\n }\n }\n else if (this._bubblingListeners) {\n this._bubblingListeners.off(type, callback, target);\n\n var hasListeners = this._bubblingListeners.hasEventListener(type);\n // All listener removed\n if (!hasListeners) {\n switch (type) {\n case EventType.POSITION_CHANGED:\n this._eventMask &= ~POSITION_ON;\n break;\n case EventType.SCALE_CHANGED:\n this._eventMask &= ~SCALE_ON;\n break;\n case EventType.ROTATION_CHANGED:\n this._eventMask &= ~ROTATION_ON;\n break;\n case EventType.SIZE_CHANGED:\n this._eventMask &= ~SIZE_ON;\n break;\n case EventType.ANCHOR_CHANGED:\n this._eventMask &= ~ANCHOR_ON;\n break;\n case EventType.COLOR_CHANGED:\n this._eventMask &= ~COLOR_ON;\n break;\n }\n }\n }\n },\n\n _offDispatch (type, callback, target, useCapture) {\n // Accept also patameters like: (type, callback, useCapture)\n if (typeof target === 'boolean') {\n useCapture = target;\n target = undefined;\n }\n else useCapture = !!useCapture;\n if (!callback) {\n this._capturingListeners && this._capturingListeners.removeAll(type);\n this._bubblingListeners && this._bubblingListeners.removeAll(type);\n }\n else {\n var listeners = useCapture ? this._capturingListeners : this._bubblingListeners;\n if (listeners) {\n listeners.off(type, callback, target);\n\n if (target && target.__eventTargets) {\n js.array.fastRemove(target.__eventTargets, this);\n }\n }\n\n }\n },\n\n /**\n * !#en Removes all callbacks previously registered with the same target.\n * !#zh 移除目标上的所有注册事件。\n * @method targetOff\n * @param {Object} target - The target to be searched for all related callbacks\n * @example\n * node.targetOff(target);\n */\n targetOff (target) {\n let listeners = this._bubblingListeners;\n if (listeners) {\n listeners.targetOff(target);\n\n // Check for event mask reset\n if ((this._eventMask & POSITION_ON) && !listeners.hasEventListener(EventType.POSITION_CHANGED)) {\n this._eventMask &= ~POSITION_ON;\n }\n if ((this._eventMask & SCALE_ON) && !listeners.hasEventListener(EventType.SCALE_CHANGED)) {\n this._eventMask &= ~SCALE_ON;\n }\n if ((this._eventMask & ROTATION_ON) && !listeners.hasEventListener(EventType.ROTATION_CHANGED)) {\n this._eventMask &= ~ROTATION_ON;\n }\n if ((this._eventMask & SIZE_ON) && !listeners.hasEventListener(EventType.SIZE_CHANGED)) {\n this._eventMask &= ~SIZE_ON;\n }\n if ((this._eventMask & ANCHOR_ON) && !listeners.hasEventListener(EventType.ANCHOR_CHANGED)) {\n this._eventMask &= ~ANCHOR_ON;\n }\n if ((this._eventMask & COLOR_ON) && !listeners.hasEventListener(EventType.COLOR_CHANGED)) {\n this._eventMask &= ~COLOR_ON;\n }\n }\n if (this._capturingListeners) {\n this._capturingListeners.targetOff(target);\n }\n\n if (target && target.__eventTargets) {\n js.array.fastRemove(target.__eventTargets, this);\n }\n\n if (this._touchListener && !_checkListeners(this, _touchEvents)) {\n eventManager.removeListener(this._touchListener);\n this._touchListener = null;\n }\n if (this._mouseListener && !_checkListeners(this, _mouseEvents)) {\n eventManager.removeListener(this._mouseListener);\n this._mouseListener = null;\n }\n },\n\n /**\n * !#en Checks whether the EventTarget object has any callback registered for a specific type of event.\n * !#zh 检查事件目标对象是否有为特定类型的事件注册的回调。\n * @method hasEventListener\n * @param {String} type - The type of event.\n * @return {Boolean} True if a callback of the specified type is registered; false otherwise.\n */\n hasEventListener (type) {\n let has = false;\n if (this._bubblingListeners) {\n has = this._bubblingListeners.hasEventListener(type);\n }\n if (!has && this._capturingListeners) {\n has = this._capturingListeners.hasEventListener(type);\n }\n return has;\n },\n\n /**\n * !#en\n * Trigger an event directly with the event name and necessary arguments.\n * !#zh\n * 通过事件名发送自定义事件\n *\n * @method emit\n * @param {String} type - event type\n * @param {*} [arg1] - First argument in callback\n * @param {*} [arg2] - Second argument in callback\n * @param {*} [arg3] - Third argument in callback\n * @param {*} [arg4] - Fourth argument in callback\n * @param {*} [arg5] - Fifth argument in callback\n * @example\n *\n * eventTarget.emit('fire', event);\n * eventTarget.emit('fire', message, emitter);\n */\n emit (type, arg1, arg2, arg3, arg4, arg5) {\n if (this._bubblingListeners) {\n this._bubblingListeners.emit(type, arg1, arg2, arg3, arg4, arg5);\n }\n },\n\n /**\n * !#en\n * Dispatches an event into the event flow.\n * The event target is the EventTarget object upon which the dispatchEvent() method is called.\n * !#zh 分发事件到事件流中。\n *\n * @method dispatchEvent\n * @param {Event} event - The Event object that is dispatched into the event flow\n */\n dispatchEvent (event) {\n _doDispatchEvent(this, event);\n _cachedArray.length = 0;\n },\n\n /**\n * !#en Pause node related system events registered with the current Node. Node system events includes touch and mouse events.\n * If recursive is set to true, then this API will pause the node system events for the node and all nodes in its sub node tree.\n * Reference: http://docs.cocos2d-x.org/editors_and_tools/creator-chapters/scripting/internal-events/\n * !#zh 暂停当前节点上注册的所有节点系统事件,节点系统事件包含触摸和鼠标事件。\n * 如果传递 recursive 为 true,那么这个 API 将暂停本节点和它的子树上所有节点的节点系统事件。\n * 参考:https://www.cocos.com/docs/creator/scripting/internal-events.html\n * @method pauseSystemEvents\n * @param {Boolean} recursive - Whether to pause node system events on the sub node tree.\n * @example\n * node.pauseSystemEvents(true);\n */\n pauseSystemEvents (recursive) {\n eventManager.pauseTarget(this, recursive);\n },\n\n /**\n * !#en Resume node related system events registered with the current Node. Node system events includes touch and mouse events.\n * If recursive is set to true, then this API will resume the node system events for the node and all nodes in its sub node tree.\n * Reference: http://docs.cocos2d-x.org/editors_and_tools/creator-chapters/scripting/internal-events/\n * !#zh 恢复当前节点上注册的所有节点系统事件,节点系统事件包含触摸和鼠标事件。\n * 如果传递 recursive 为 true,那么这个 API 将恢复本节点和它的子树上所有节点的节点系统事件。\n * 参考:https://www.cocos.com/docs/creator/scripting/internal-events.html\n * @method resumeSystemEvents\n * @param {Boolean} recursive - Whether to resume node system events on the sub node tree.\n * @example\n * node.resumeSystemEvents(true);\n */\n resumeSystemEvents (recursive) {\n eventManager.resumeTarget(this, recursive);\n },\n\n _hitTest (point, listener) {\n let w = this._contentSize.width,\n h = this._contentSize.height,\n cameraPt = _htVec3a,\n testPt = _htVec3b;\n\n let camera = cc.Camera.findCamera(this);\n if (camera) {\n camera.getScreenToWorldPoint(point, cameraPt);\n }\n else {\n cameraPt.set(point);\n }\n\n this._updateWorldMatrix();\n // If scale is 0, it can't be hit.\n if (!Mat4.invert(_mat4_temp, this._worldMatrix)) {\n return false;\n }\n Vec2.transformMat4(testPt, cameraPt, _mat4_temp);\n testPt.x += this._anchorPoint.x * w;\n testPt.y += this._anchorPoint.y * h;\n\n let hit = false;\n if (testPt.x >= 0 && testPt.y >= 0 && testPt.x <= w && testPt.y <= h) {\n hit = true;\n if (listener && listener.mask) {\n let mask = listener.mask;\n let parent = this;\n let length = mask ? mask.length : 0;\n // find mask parent, should hit test it\n for (let i = 0, j = 0; parent && j < length; ++i, parent = parent.parent) {\n let temp = mask[j];\n if (i === temp.index) {\n if (parent === temp.node) {\n let comp = parent.getComponent(cc.Mask);\n if (comp && comp._enabled && !comp._hitTest(cameraPt)) {\n hit = false;\n break\n }\n\n j++;\n } else {\n // mask parent no longer exists\n mask.length = j;\n break\n }\n } else if (i > temp.index) {\n // mask parent no longer exists\n mask.length = j;\n break\n }\n }\n }\n }\n\n return hit;\n },\n\n /**\n * Get all the targets listening to the supplied type of event in the target's capturing phase.\n * The capturing phase comprises the journey from the root to the last node BEFORE the event target's node.\n * The result should save in the array parameter, and MUST SORT from child nodes to parent nodes.\n *\n * Subclasses can override this method to make event propagable.\n * @method _getCapturingTargets\n * @private\n * @param {String} type - the event type\n * @param {Array} array - the array to receive targets\n * @example {@link cocos2d/core/event/_getCapturingTargets.js}\n */\n _getCapturingTargets (type, array) {\n var parent = this.parent;\n while (parent) {\n if (parent._capturingListeners && parent._capturingListeners.hasEventListener(type)) {\n array.push(parent);\n }\n parent = parent.parent;\n }\n },\n\n /**\n * Get all the targets listening to the supplied type of event in the target's bubbling phase.\n * The bubbling phase comprises any SUBSEQUENT nodes encountered on the return trip to the root of the tree.\n * The result should save in the array parameter, and MUST SORT from child nodes to parent nodes.\n *\n * Subclasses can override this method to make event propagable.\n * @method _getBubblingTargets\n * @private\n * @param {String} type - the event type\n * @param {Array} array - the array to receive targets\n */\n _getBubblingTargets (type, array) {\n var parent = this.parent;\n while (parent) {\n if (parent._bubblingListeners && parent._bubblingListeners.hasEventListener(type)) {\n array.push(parent);\n }\n parent = parent.parent;\n }\n },\n\n// ACTIONS\n /**\n * !#en\n * Executes an action, and returns the action that is executed.
\n * The node becomes the action's target. Refer to cc.Action's getTarget()
\n * Calling runAction while the node is not active won't have any effect.
\n * Note:You shouldn't modify the action after runAction, that won't take any effect.
\n * if you want to modify, when you define action plus.\n * !#zh\n * 执行并返回该执行的动作。该节点将会变成动作的目标。
\n * 调用 runAction 时,节点自身处于不激活状态将不会有任何效果。
\n * 注意:你不应该修改 runAction 后的动作,将无法发挥作用,如果想进行修改,请在定义 action 时加入。\n * @method runAction\n * @param {Action} action\n * @return {Action} An Action pointer\n * @example\n * var action = cc.scaleTo(0.2, 1, 0.6);\n * node.runAction(action);\n * node.runAction(action).repeatForever(); // fail\n * node.runAction(action.repeatForever()); // right\n */\n runAction: ActionManagerExist ? function (action) {\n if (!this.active)\n return;\n cc.assertID(action, 1618);\n let am = cc.director.getActionManager();\n if (!am._suppressDeprecation) {\n am._suppressDeprecation = true;\n cc.warnID(1639);\n }\n am.addAction(action, this, false);\n return action;\n } : emptyFunc,\n\n /**\n * !#en Pause all actions running on the current node. Equals to `cc.director.getActionManager().pauseTarget(node)`.\n * !#zh 暂停本节点上所有正在运行的动作。和 `cc.director.getActionManager().pauseTarget(node);` 等价。\n * @method pauseAllActions\n * @example\n * node.pauseAllActions();\n */\n pauseAllActions: ActionManagerExist ? function () {\n cc.director.getActionManager().pauseTarget(this);\n } : emptyFunc,\n\n /**\n * !#en Resume all paused actions on the current node. Equals to `cc.director.getActionManager().resumeTarget(node)`.\n * !#zh 恢复运行本节点上所有暂停的动作。和 `cc.director.getActionManager().resumeTarget(node);` 等价。\n * @method resumeAllActions\n * @example\n * node.resumeAllActions();\n */\n resumeAllActions: ActionManagerExist ? function () {\n cc.director.getActionManager().resumeTarget(this);\n } : emptyFunc,\n\n /**\n * !#en Stops and removes all actions from the running action list .\n * !#zh 停止并且移除所有正在运行的动作列表。\n * @method stopAllActions\n * @example\n * node.stopAllActions();\n */\n stopAllActions: ActionManagerExist ? function () {\n cc.director.getActionManager().removeAllActionsFromTarget(this);\n } : emptyFunc,\n\n /**\n * !#en Stops and removes an action from the running action list.\n * !#zh 停止并移除指定的动作。\n * @method stopAction\n * @param {Action} action An action object to be removed.\n * @example\n * var action = cc.scaleTo(0.2, 1, 0.6);\n * node.stopAction(action);\n */\n stopAction: ActionManagerExist ? function (action) {\n cc.director.getActionManager().removeAction(action);\n } : emptyFunc,\n\n /**\n * !#en Removes an action from the running action list by its tag.\n * !#zh 停止并且移除指定标签的动作。\n * @method stopActionByTag\n * @param {Number} tag A tag that indicates the action to be removed.\n * @example\n * node.stopActionByTag(1);\n */\n stopActionByTag: ActionManagerExist ? function (tag) {\n if (tag === cc.Action.TAG_INVALID) {\n cc.logID(1612);\n return;\n }\n cc.director.getActionManager().removeActionByTag(tag, this);\n } : emptyFunc,\n\n /**\n * !#en Returns an action from the running action list by its tag.\n * !#zh 通过标签获取指定动作。\n * @method getActionByTag\n * @see cc.Action#getTag and cc.Action#setTag\n * @param {Number} tag\n * @return {Action} The action object with the given tag.\n * @example\n * var action = node.getActionByTag(1);\n */\n getActionByTag: ActionManagerExist ? function (tag) {\n if (tag === cc.Action.TAG_INVALID) {\n cc.logID(1613);\n return null;\n }\n return cc.director.getActionManager().getActionByTag(tag, this);\n } : function () {\n return null;\n },\n\n /**\n * !#en\n * Returns the numbers of actions that are running plus the ones that are schedule to run (actions in actionsToAdd and actions arrays).
\n * Composable actions are counted as 1 action. Example:
\n * If you are running 1 Sequence of 7 actions, it will return 1.
\n * If you are running 7 Sequences of 2 actions, it will return 7.

\n * !#zh\n * 获取运行着的动作加上正在调度运行的动作的总数。
\n * 例如:
\n * - 如果你正在运行 7 个动作中的 1 个 Sequence,它将返回 1。
\n * - 如果你正在运行 2 个动作中的 7 个 Sequence,它将返回 7。
\n *\n * @method getNumberOfRunningActions\n * @return {Number} The number of actions that are running plus the ones that are schedule to run\n * @example\n * var count = node.getNumberOfRunningActions();\n * cc.log(\"Running Action Count: \" + count);\n */\n getNumberOfRunningActions: ActionManagerExist ? function () {\n return cc.director.getActionManager().getNumberOfRunningActionsInTarget(this);\n } : function () {\n return 0;\n },\n\n\n// TRANSFORM RELATED\n /**\n * !#en\n * Returns a copy of the position (x, y, z) of the node in its parent's coordinates.\n * You can pass a cc.Vec2 or cc.Vec3 as the argument to receive the return values.\n * !#zh\n * 获取节点在父节点坐标系中的位置(x, y, z)。\n * 你可以传一个 cc.Vec2 或者 cc.Vec3 作为参数来接收返回值。\n * @method getPosition\n * @param {Vec2|Vec3} [out] - The return value to receive position\n * @return {Vec2|Vec3} The position (x, y, z) of the node in its parent's coordinates\n * @example\n * cc.log(\"Node Position: \" + node.getPosition());\n */\n getPosition (out) {\n out = out || new Vec3();\n return Trs.toPosition(out, this._trs);\n },\n\n /**\n * !#en\n * Sets the position (x, y, z) of the node in its parent's coordinates.
\n * Usually we use cc.v2(x, y) to compose cc.Vec2 object, in this case, position.z will become 0.
\n * and passing two numbers (x, y) is more efficient than passing cc.Vec2 object, in this case, position.z will remain unchanged.\n * For 3D node we can use cc.v3(x, y, z) to compose cc.Vec3 object,
\n * and passing three numbers (x, y, z) is more efficient than passing cc.Vec3 object.\n * !#zh\n * 设置节点在父节点坐标系中的位置。
\n * 可以通过下面的方式设置坐标点:
\n * 1. 传入 2 个数值 x, y (此时不会改变 position.z 的值)。
\n * 2. 传入 cc.v2(x, y) 类型为 cc.Vec2 的对象 (此时 position.z 的值将被设置为0)。\n * 3. 对于 3D 节点可以传入 3 个数值 x, y, z。
\n * 4. 对于 3D 节点可以传入 cc.v3(x, y, z) 类型为 cc.Vec3 的对象。\n * @method setPosition\n * @param {Vec2|Vec3|Number} x - X coordinate for position or the position object\n * @param {Number} [y] - Y coordinate for position\n * @param {Number} [z] - Z coordinate for position\n */\n setPosition (newPosOrX, y, z) {\n let x;\n if (y === undefined) {\n x = newPosOrX.x;\n y = newPosOrX.y;\n z = newPosOrX.z;\n }\n else {\n x = newPosOrX;\n }\n\n let trs = this._trs;\n\n if (z === undefined) {\n z = trs[2];\n }\n\n if (trs[0] === x && trs[1] === y && trs[2] === z) {\n return;\n }\n\n if (CC_EDITOR) {\n var oldPosition = new cc.Vec3(trs[0], trs[1], trs[2]);\n }\n\n trs[0] = x;\n trs[1] = y;\n trs[2] = z;\n\n this.setLocalDirty(LocalDirtyFlag.ALL_POSITION);\n !CC_NATIVERENDERER && (this._renderFlag |= RenderFlow.FLAG_WORLD_TRANSFORM);\n\n // fast check event\n if (this._eventMask & POSITION_ON) {\n if (CC_EDITOR) {\n this.emit(EventType.POSITION_CHANGED, oldPosition);\n }\n else {\n this.emit(EventType.POSITION_CHANGED);\n }\n }\n },\n\n /**\n * !#en\n * Returns the scale factor of the node.\n * Need pass a cc.Vec2 or cc.Vec3 as the argument to receive the return values.\n * !#zh 获取节点的缩放,需要传一个 cc.Vec2 或者 cc.Vec3 作为参数来接收返回值。\n * @method getScale\n * @param {Vec2|Vec3} out\n * @return {Vec2|Vec3} The scale factor\n * @example\n * cc.log(\"Node Scale: \" + node.getScale(cc.v3()));\n */\n getScale (out) {\n if (out !== undefined) {\n return Trs.toScale(out, this._trs);\n }\n else {\n cc.errorID(1400, 'cc.Node.getScale', 'cc.Node.scale or cc.Node.getScale(cc.Vec3)');\n return this._trs[7];\n }\n },\n\n /**\n * !#en\n * Sets the scale of axis in local coordinates of the node.\n * You can operate 2 axis in 2D node, and 3 axis in 3D node.\n * When only (x, y) is passed, the value of scale.z will not be changed.\n * When a Vec2 is passed in, the value of scale.z will be set to 0.\n * !#zh\n * 设置节点在本地坐标系中坐标轴上的缩放比例。\n * 2D 节点可以操作两个坐标轴,而 3D 节点可以操作三个坐标轴。\n * 当只传入 (x, y) 时,scale.z 的值不会被改变。\n * 当只传入 Vec2 对象时,scale.z 的值将被设置为0。\n * @method setScale\n * @param {Number|Vec2|Vec3} x - scaleX or scale object\n * @param {Number} [y]\n * @param {Number} [z]\n * @example\n * node.setScale(cc.v2(2, 2)); // Notice: scaleZ will be 0\n * node.setScale(cc.v3(2, 2, 2)); // for 3D node\n * node.setScale(2);\n */\n setScale (newScaleOrX, y, z) {\n let x;\n // only one parameter, and it's a Vec2/Vec3:\n if (newScaleOrX && typeof newScaleOrX !== 'number') {\n x = newScaleOrX.x;\n y = newScaleOrX.y;\n z = newScaleOrX.z;\n }\n // only one parameter, and it's a number:\n else if (newScaleOrX !== undefined && y === undefined) {\n x = newScaleOrX;\n y = newScaleOrX;\n z = newScaleOrX;\n }\n // two or three paramters:\n else {\n x = newScaleOrX;\n }\n\n let trs = this._trs;\n\n if (z === undefined) {\n z = trs[9];\n }\n\n if (trs[7] !== x || trs[8] !== y || trs[9] !== z) {\n trs[7] = x;\n trs[8] = y;\n trs[9] = z;\n this.setLocalDirty(LocalDirtyFlag.ALL_SCALE);\n !CC_NATIVERENDERER && (this._renderFlag |= RenderFlow.FLAG_TRANSFORM);\n\n if (this._eventMask & SCALE_ON) {\n this.emit(EventType.SCALE_CHANGED);\n }\n }\n },\n\n /**\n * !#en\n * Get rotation of node (in quaternion).\n * Need pass a cc.Quat as the argument to receive the return values.\n * !#zh\n * 获取该节点的 quaternion 旋转角度,需要传一个 cc.Quat 作为参数来接收返回值。\n * @method getRotation\n * @param {Quat} out\n * @return {Quat} Quaternion object represents the rotation\n */\n getRotation (out) {\n if (out instanceof Quat) {\n return Trs.toRotation(out, this._trs);\n }\n else {\n if (CC_DEBUG) {\n cc.warn(\"`cc.Node.getRotation()` is deprecated since v2.1.0, please use `-cc.Node.angle` instead. (`this.node.getRotation()` -> `-this.node.angle`)\");\n }\n return -this.angle;\n }\n },\n\n /**\n * !#en Set rotation of node (in quaternion).\n * !#zh 设置该节点的 quaternion 旋转角度。\n * @method setRotation\n * @param {cc.Quat|Number} quat Quaternion object represents the rotation or the x value of quaternion\n * @param {Number} [y] y value of quternion\n * @param {Number} [z] z value of quternion\n * @param {Number} [w] w value of quternion\n */\n setRotation (rotation, y, z, w) {\n if (typeof rotation === 'number' && y === undefined) {\n if (CC_DEBUG) {\n cc.warn(\"`cc.Node.setRotation(degree)` is deprecated since v2.1.0, please set `-cc.Node.angle` instead. (`this.node.setRotation(x)` -> `this.node.angle = -x`)\");\n }\n this.angle = -rotation;\n }\n else {\n let x = rotation;\n if (y === undefined) {\n x = rotation.x;\n y = rotation.y;\n z = rotation.z;\n w = rotation.w;\n }\n\n let trs = this._trs;\n if (trs[3] !== x || trs[4] !== y || trs[5] !== z || trs[6] !== w) {\n trs[3] = x;\n trs[4] = y;\n trs[5] = z;\n trs[6] = w;\n this.setLocalDirty(LocalDirtyFlag.ALL_ROTATION);\n\n if (this._eventMask & ROTATION_ON) {\n this.emit(EventType.ROTATION_CHANGED);\n }\n\n if (CC_EDITOR) {\n this._toEuler();\n }\n }\n }\n },\n\n /**\n * !#en\n * Returns a copy the untransformed size of the node.
\n * The contentSize remains the same no matter the node is scaled or rotated.
\n * All nodes has a size. Layer and Scene has the same size of the screen by default.
\n * !#zh 获取节点自身大小,不受该节点是否被缩放或者旋转的影响。\n * @method getContentSize\n * @return {Size} The untransformed size of the node.\n * @example\n * cc.log(\"Content Size: \" + node.getContentSize());\n */\n getContentSize () {\n return cc.size(this._contentSize.width, this._contentSize.height);\n },\n\n /**\n * !#en\n * Sets the untransformed size of the node.
\n * The contentSize remains the same no matter the node is scaled or rotated.
\n * All nodes has a size. Layer and Scene has the same size of the screen.\n * !#zh 设置节点原始大小,不受该节点是否被缩放或者旋转的影响。\n * @method setContentSize\n * @param {Size|Number} size - The untransformed size of the node or The untransformed size's width of the node.\n * @param {Number} [height] - The untransformed size's height of the node.\n * @example\n * node.setContentSize(cc.size(100, 100));\n * node.setContentSize(100, 100);\n */\n setContentSize (size, height) {\n var locContentSize = this._contentSize;\n var clone;\n if (height === undefined) {\n if ((size.width === locContentSize.width) && (size.height === locContentSize.height))\n return;\n if (CC_EDITOR) {\n clone = cc.size(locContentSize.width, locContentSize.height);\n }\n locContentSize.width = size.width;\n locContentSize.height = size.height;\n } else {\n if ((size === locContentSize.width) && (height === locContentSize.height))\n return;\n if (CC_EDITOR) {\n clone = cc.size(locContentSize.width, locContentSize.height);\n }\n locContentSize.width = size;\n locContentSize.height = height;\n }\n if (this._eventMask & SIZE_ON) {\n if (CC_EDITOR) {\n this.emit(EventType.SIZE_CHANGED, clone);\n }\n else {\n this.emit(EventType.SIZE_CHANGED);\n }\n }\n },\n\n /**\n * !#en\n * Returns a copy of the anchor point.
\n * Anchor point is the point around which all transformations and positioning manipulations take place.
\n * It's like a pin in the node where it is \"attached\" to its parent.
\n * The anchorPoint is normalized, like a percentage. (0,0) means the bottom-left corner and (1,1) means the top-right corner.
\n * But you can use values higher than (1,1) and lower than (0,0) too.
\n * The default anchor point is (0.5,0.5), so it starts at the center of the node.\n * !#zh\n * 获取节点锚点,用百分比表示。
\n * 锚点应用于所有变换和坐标点的操作,它就像在节点上连接其父节点的大头针。
\n * 锚点是标准化的,就像百分比一样。(0,0) 表示左下角,(1,1) 表示右上角。
\n * 但是你可以使用比(1,1)更高的值或者比(0,0)更低的值。
\n * 默认的锚点是(0.5,0.5),因此它开始于节点的中心位置。
\n * 注意:Creator 中的锚点仅用于定位所在的节点,子节点的定位不受影响。\n * @method getAnchorPoint\n * @return {Vec2} The anchor point of node.\n * @example\n * cc.log(\"Node AnchorPoint: \" + node.getAnchorPoint());\n */\n getAnchorPoint () {\n return cc.v2(this._anchorPoint);\n },\n\n /**\n * !#en\n * Sets the anchor point in percent.
\n * anchor point is the point around which all transformations and positioning manipulations take place.
\n * It's like a pin in the node where it is \"attached\" to its parent.
\n * The anchorPoint is normalized, like a percentage. (0,0) means the bottom-left corner and (1,1) means the top-right corner.
\n * But you can use values higher than (1,1) and lower than (0,0) too.
\n * The default anchor point is (0.5,0.5), so it starts at the center of the node.\n * !#zh\n * 设置锚点的百分比。
\n * 锚点应用于所有变换和坐标点的操作,它就像在节点上连接其父节点的大头针。
\n * 锚点是标准化的,就像百分比一样。(0,0) 表示左下角,(1,1) 表示右上角。
\n * 但是你可以使用比(1,1)更高的值或者比(0,0)更低的值。
\n * 默认的锚点是(0.5,0.5),因此它开始于节点的中心位置。
\n * 注意:Creator 中的锚点仅用于定位所在的节点,子节点的定位不受影响。\n * @method setAnchorPoint\n * @param {Vec2|Number} point - The anchor point of node or The x axis anchor of node.\n * @param {Number} [y] - The y axis anchor of node.\n * @example\n * node.setAnchorPoint(cc.v2(1, 1));\n * node.setAnchorPoint(1, 1);\n */\n setAnchorPoint (point, y) {\n var locAnchorPoint = this._anchorPoint;\n if (y === undefined) {\n if ((point.x === locAnchorPoint.x) && (point.y === locAnchorPoint.y))\n return;\n locAnchorPoint.x = point.x;\n locAnchorPoint.y = point.y;\n } else {\n if ((point === locAnchorPoint.x) && (y === locAnchorPoint.y))\n return;\n locAnchorPoint.x = point;\n locAnchorPoint.y = y;\n }\n this.setLocalDirty(LocalDirtyFlag.ALL_POSITION);\n if (this._eventMask & ANCHOR_ON) {\n this.emit(EventType.ANCHOR_CHANGED);\n }\n },\n\n /*\n * Transforms position from world space to local space.\n * @method _invTransformPoint\n * @param {Vec3} out\n * @param {Vec3} vec3\n */\n _invTransformPoint (out, pos) {\n if (this._parent) {\n this._parent._invTransformPoint(out, pos);\n } else {\n Vec3.copy(out, pos);\n }\n\n let ltrs = this._trs;\n // out = parent_inv_pos - pos\n Trs.toPosition(_tpVec3a, ltrs);\n Vec3.sub(out, out, _tpVec3a);\n\n // out = inv(rot) * out\n Trs.toRotation(_tpQuata, ltrs);\n Quat.conjugate(_tpQuatb, _tpQuata);\n Vec3.transformQuat(out, out, _tpQuatb);\n\n // out = (1/scale) * out\n Trs.toScale(_tpVec3a, ltrs);\n Vec3.inverseSafe(_tpVec3b, _tpVec3a);\n Vec3.mul(out, out, _tpVec3b);\n\n return out;\n },\n\n /*\n * Calculate and return world position.\n * This is not a public API yet, its usage could be updated\n * @method getWorldPosition\n * @param {Vec3} out\n * @return {Vec3}\n */\n getWorldPosition (out) {\n Trs.toPosition(out, this._trs);\n let curr = this._parent;\n let ltrs;\n while (curr) {\n ltrs = curr._trs;\n // out = parent_scale * pos\n Trs.toScale(_gwpVec3, ltrs);\n Vec3.mul(out, out, _gwpVec3);\n // out = parent_quat * out\n Trs.toRotation(_gwpQuat, ltrs);\n Vec3.transformQuat(out, out, _gwpQuat);\n // out = out + pos\n Trs.toPosition(_gwpVec3, ltrs);\n Vec3.add(out, out, _gwpVec3);\n curr = curr._parent;\n }\n return out;\n },\n\n /*\n * Set world position.\n * This is not a public API yet, its usage could be updated\n * @method setWorldPosition\n * @param {Vec3} pos\n */\n setWorldPosition (pos) {\n let ltrs = this._trs;\n if (CC_EDITOR) {\n var oldPosition = new cc.Vec3(ltrs[0], ltrs[1], ltrs[2]);\n }\n // NOTE: this is faster than invert world matrix and transform the point\n if (this._parent) {\n this._parent._invTransformPoint(_swpVec3, pos);\n }\n else {\n Vec3.copy(_swpVec3, pos);\n }\n Trs.fromPosition(ltrs, _swpVec3);\n this.setLocalDirty(LocalDirtyFlag.ALL_POSITION);\n\n // fast check event\n if (this._eventMask & POSITION_ON) {\n // send event\n if (CC_EDITOR) {\n this.emit(EventType.POSITION_CHANGED, oldPosition);\n }\n else {\n this.emit(EventType.POSITION_CHANGED);\n }\n }\n },\n\n /*\n * Calculate and return world rotation\n * This is not a public API yet, its usage could be updated\n * @method getWorldRotation\n * @param {Quat} out\n * @return {Quat}\n */\n getWorldRotation (out) {\n Trs.toRotation(_gwrQuat, this._trs);\n Quat.copy(out, _gwrQuat);\n let curr = this._parent;\n while (curr) {\n Trs.toRotation(_gwrQuat, curr._trs);\n Quat.mul(out, _gwrQuat, out);\n curr = curr._parent;\n }\n return out;\n },\n\n /*\n * Set world rotation with quaternion\n * This is not a public API yet, its usage could be updated\n * @method setWorldRotation\n * @param {Quat} val\n */\n setWorldRotation (val) {\n if (this._parent) {\n this._parent.getWorldRotation(_swrQuat);\n Quat.conjugate(_swrQuat, _swrQuat);\n Quat.mul(_swrQuat, _swrQuat, val);\n }\n else {\n Quat.copy(_swrQuat, val);\n }\n Trs.fromRotation(this._trs, _swrQuat);\n if (CC_EDITOR) {\n this._toEuler();\n }\n this.setLocalDirty(LocalDirtyFlag.ALL_ROTATION);\n },\n\n /*\n * Calculate and return world scale\n * This is not a public API yet, its usage could be updated\n * @method getWorldScale\n * @param {Vec3} out\n * @return {Vec3}\n */\n getWorldScale (out) {\n Trs.toScale(_gwsVec3, this._trs);\n Vec3.copy(out, _gwsVec3);\n let curr = this._parent;\n while (curr) {\n Trs.toScale(_gwsVec3, curr._trs);\n Vec3.mul(out, out, _gwsVec3);\n curr = curr._parent;\n }\n return out;\n },\n\n /*\n * Set world scale with vec3\n * This is not a public API yet, its usage could be updated\n * @method setWorldScale\n * @param {Vec3} scale\n */\n setWorldScale (scale) {\n if (this._parent) {\n this._parent.getWorldScale(_swsVec3);\n Vec3.div(_swsVec3, scale, _swsVec3);\n }\n else {\n Vec3.copy(_swsVec3, scale);\n }\n Trs.fromScale(this._trs, _swsVec3);\n this.setLocalDirty(LocalDirtyFlag.ALL_SCALE);\n },\n\n getWorldRT (out) {\n let opos = _gwrtVec3a;\n let orot = _gwrtQuata;\n let ltrs = this._trs;\n Trs.toPosition(opos, ltrs);\n Trs.toRotation(orot, ltrs);\n\n let curr = this._parent;\n while (curr) {\n ltrs = curr._trs;\n // opos = parent_lscale * lpos\n Trs.toScale(_gwrtVec3b, ltrs);\n Vec3.mul(opos, opos, _gwrtVec3b);\n // opos = parent_lrot * opos\n Trs.toRotation(_gwrtQuatb, ltrs);\n Vec3.transformQuat(opos, opos, _gwrtQuatb);\n // opos = opos + lpos\n Trs.toPosition(_gwrtVec3b, ltrs);\n Vec3.add(opos, opos, _gwrtVec3b);\n // orot = lrot * orot\n Quat.mul(orot, _gwrtQuatb, orot);\n curr = curr._parent;\n }\n Mat4.fromRT(out, orot, opos);\n return out;\n },\n\n /**\n * !#en Set rotation by lookAt target point, normally used by Camera Node\n * !#zh 通过观察目标来设置 rotation,一般用于 Camera Node 上\n * @method lookAt\n * @param {Vec3} pos\n * @param {Vec3} [up] - default is (0,1,0)\n */\n lookAt (pos, up) {\n this.getWorldPosition(_laVec3);\n Vec3.sub(_laVec3, _laVec3, pos); // NOTE: we use -z for view-dir\n Vec3.normalize(_laVec3, _laVec3);\n Quat.fromViewUp(_laQuat, _laVec3, up);\n\n this.setWorldRotation(_laQuat);\n },\n\n _updateLocalMatrix: updateLocalMatrix2D,\n\n _calculWorldMatrix () {\n // Avoid as much function call as possible\n if (this._localMatDirty & LocalDirtyFlag.TRSS) {\n this._updateLocalMatrix();\n }\n\n // Assume parent world matrix is correct\n let parent = this._parent;\n if (parent) {\n this._mulMat(this._worldMatrix, parent._worldMatrix, this._matrix);\n }\n else {\n Mat4.copy(this._worldMatrix, this._matrix);\n }\n this._worldMatDirty = false;\n },\n\n _mulMat: mulMat2D,\n\n _updateWorldMatrix () {\n if (this._parent) {\n this._parent._updateWorldMatrix();\n }\n if (this._worldMatDirty) {\n this._calculWorldMatrix();\n // Sync dirty to children\n let children = this._children;\n for (let i = 0, l = children.length; i < l; i++) {\n children[i]._worldMatDirty = true;\n }\n }\n },\n\n setLocalDirty (flag) {\n this._localMatDirty |= flag;\n this._worldMatDirty = true;\n\n if (flag === LocalDirtyFlag.ALL_POSITION || flag === LocalDirtyFlag.POSITION) {\n this._renderFlag |= RenderFlow.FLAG_WORLD_TRANSFORM;\n }\n else {\n this._renderFlag |= RenderFlow.FLAG_TRANSFORM;\n }\n },\n\n setWorldDirty () {\n this._worldMatDirty = true;\n },\n\n /**\n * !#en\n * Get the local transform matrix (4x4), based on parent node coordinates\n * !#zh 返回局部空间坐标系的矩阵,基于父节点坐标系。\n * @method getLocalMatrix\n * @param {Mat4} out The matrix object to be filled with data\n * @return {Mat4} Same as the out matrix object\n * @example\n * let mat4 = cc.mat4();\n * node.getLocalMatrix(mat4);\n */\n getLocalMatrix (out) {\n this._updateLocalMatrix();\n return Mat4.copy(out, this._matrix);\n },\n\n /**\n * !#en\n * Get the world transform matrix (4x4)\n * !#zh 返回世界空间坐标系的矩阵。\n * @method getWorldMatrix\n * @param {Mat4} out The matrix object to be filled with data\n * @return {Mat4} Same as the out matrix object\n * @example\n * let mat4 = cc.mat4();\n * node.getWorldMatrix(mat4);\n */\n getWorldMatrix (out) {\n this._updateWorldMatrix();\n return Mat4.copy(out, this._worldMatrix);\n },\n\n /**\n * !#en\n * Converts a Point to node (local) space coordinates.\n * !#zh\n * 将一个点转换到节点 (局部) 空间坐标系。\n * @method convertToNodeSpaceAR\n * @param {Vec3|Vec2} worldPoint\n * @param {Vec3|Vec2} [out]\n * @return {Vec3|Vec2}\n * @typescript\n * convertToNodeSpaceAR(worldPoint: T, out?: T): T\n * @example\n * var newVec2 = node.convertToNodeSpaceAR(cc.v2(100, 100));\n * var newVec3 = node.convertToNodeSpaceAR(cc.v3(100, 100, 100));\n */\n convertToNodeSpaceAR (worldPoint, out) {\n this._updateWorldMatrix();\n Mat4.invert(_mat4_temp, this._worldMatrix);\n\n if (worldPoint instanceof cc.Vec2) {\n out = out || new cc.Vec2();\n return Vec2.transformMat4(out, worldPoint, _mat4_temp);\n }\n else {\n out = out || new cc.Vec3();\n return Vec3.transformMat4(out, worldPoint, _mat4_temp);\n }\n },\n\n /**\n * !#en\n * Converts a Point in node coordinates to world space coordinates.\n * !#zh\n * 将节点坐标系下的一个点转换到世界空间坐标系。\n * @method convertToWorldSpaceAR\n * @param {Vec3|Vec2} nodePoint\n * @param {Vec3|Vec2} [out]\n * @return {Vec3|Vec2}\n * @typescript\n * convertToWorldSpaceAR(nodePoint: T, out?: T): T\n * @example\n * var newVec2 = node.convertToWorldSpaceAR(cc.v2(100, 100));\n * var newVec3 = node.convertToWorldSpaceAR(cc.v3(100, 100, 100));\n */\n convertToWorldSpaceAR (nodePoint, out) {\n this._updateWorldMatrix();\n if (nodePoint instanceof cc.Vec2) {\n out = out || new cc.Vec2();\n return Vec2.transformMat4(out, nodePoint, this._worldMatrix);\n }\n else {\n out = out || new cc.Vec3();\n return Vec3.transformMat4(out, nodePoint, this._worldMatrix);\n }\n },\n\n// OLD TRANSFORM ACCESS APIs\n /**\n * !#en Converts a Point to node (local) space coordinates then add the anchor point position.\n * So the return position will be related to the left bottom corner of the node's bounding box.\n * This equals to the API behavior of cocos2d-x, you probably want to use convertToNodeSpaceAR instead\n * !#zh 将一个点转换到节点 (局部) 坐标系,并加上锚点的坐标。
\n * 也就是说返回的坐标是相对于节点包围盒左下角的坐标。
\n * 这个 API 的设计是为了和 cocos2d-x 中行为一致,更多情况下你可能需要使用 convertToNodeSpaceAR。\n * @method convertToNodeSpace\n * @deprecated since v2.1.3\n * @param {Vec2} worldPoint\n * @return {Vec2}\n * @example\n * var newVec2 = node.convertToNodeSpace(cc.v2(100, 100));\n */\n convertToNodeSpace (worldPoint) {\n this._updateWorldMatrix();\n Mat4.invert(_mat4_temp, this._worldMatrix);\n let out = new cc.Vec2();\n Vec2.transformMat4(out, worldPoint, _mat4_temp);\n out.x += this._anchorPoint.x * this._contentSize.width;\n out.y += this._anchorPoint.y * this._contentSize.height;\n return out;\n },\n\n /**\n * !#en Converts a Point related to the left bottom corner of the node's bounding box to world space coordinates.\n * This equals to the API behavior of cocos2d-x, you probably want to use convertToWorldSpaceAR instead\n * !#zh 将一个相对于节点左下角的坐标位置转换到世界空间坐标系。\n * 这个 API 的设计是为了和 cocos2d-x 中行为一致,更多情况下你可能需要使用 convertToWorldSpaceAR\n * @method convertToWorldSpace\n * @deprecated since v2.1.3\n * @param {Vec2} nodePoint\n * @return {Vec2}\n * @example\n * var newVec2 = node.convertToWorldSpace(cc.v2(100, 100));\n */\n convertToWorldSpace (nodePoint) {\n this._updateWorldMatrix();\n let out = new cc.Vec2(\n nodePoint.x - this._anchorPoint.x * this._contentSize.width,\n nodePoint.y - this._anchorPoint.y * this._contentSize.height\n );\n return Vec2.transformMat4(out, out, this._worldMatrix);\n },\n\n /**\n * !#en\n * Returns the matrix that transform the node's (local) space coordinates into the parent's space coordinates.
\n * The matrix is in Pixels.\n * !#zh 返回这个将节点(局部)的空间坐标系转换成父节点的空间坐标系的矩阵。这个矩阵以像素为单位。\n * @method getNodeToParentTransform\n * @deprecated since v2.0\n * @param {AffineTransform} [out] The affine transform object to be filled with data\n * @return {AffineTransform} Same as the out affine transform object\n * @example\n * let affineTransform = cc.AffineTransform.create();\n * node.getNodeToParentTransform(affineTransform);\n */\n getNodeToParentTransform (out) {\n if (!out) {\n out = AffineTrans.identity();\n }\n this._updateLocalMatrix();\n\n var contentSize = this._contentSize;\n _vec3_temp.x = -this._anchorPoint.x * contentSize.width;\n _vec3_temp.y = -this._anchorPoint.y * contentSize.height;\n\n Mat4.copy(_mat4_temp, this._matrix);\n Mat4.transform(_mat4_temp, _mat4_temp, _vec3_temp);\n return AffineTrans.fromMat4(out, _mat4_temp);\n },\n\n /**\n * !#en\n * Returns the matrix that transform the node's (local) space coordinates into the parent's space coordinates.
\n * The matrix is in Pixels.
\n * This method is AR (Anchor Relative).\n * !#zh\n * 返回这个将节点(局部)的空间坐标系转换成父节点的空间坐标系的矩阵。
\n * 这个矩阵以像素为单位。
\n * 该方法基于节点坐标。\n * @method getNodeToParentTransformAR\n * @deprecated since v2.0\n * @param {AffineTransform} [out] The affine transform object to be filled with data\n * @return {AffineTransform} Same as the out affine transform object\n * @example\n * let affineTransform = cc.AffineTransform.create();\n * node.getNodeToParentTransformAR(affineTransform);\n */\n getNodeToParentTransformAR (out) {\n if (!out) {\n out = AffineTrans.identity();\n }\n this._updateLocalMatrix();\n return AffineTrans.fromMat4(out, this._matrix);\n },\n\n /**\n * !#en Returns the world affine transform matrix. The matrix is in Pixels.\n * !#zh 返回节点到世界坐标系的仿射变换矩阵。矩阵单位是像素。\n * @method getNodeToWorldTransform\n * @deprecated since v2.0\n * @param {AffineTransform} [out] The affine transform object to be filled with data\n * @return {AffineTransform} Same as the out affine transform object\n * @example\n * let affineTransform = cc.AffineTransform.create();\n * node.getNodeToWorldTransform(affineTransform);\n */\n getNodeToWorldTransform (out) {\n if (!out) {\n out = AffineTrans.identity();\n }\n this._updateWorldMatrix();\n\n var contentSize = this._contentSize;\n _vec3_temp.x = -this._anchorPoint.x * contentSize.width;\n _vec3_temp.y = -this._anchorPoint.y * contentSize.height;\n\n Mat4.copy(_mat4_temp, this._worldMatrix);\n Mat4.transform(_mat4_temp, _mat4_temp, _vec3_temp);\n\n return AffineTrans.fromMat4(out, _mat4_temp);\n },\n\n /**\n * !#en\n * Returns the world affine transform matrix. The matrix is in Pixels.
\n * This method is AR (Anchor Relative).\n * !#zh\n * 返回节点到世界坐标仿射变换矩阵。矩阵单位是像素。
\n * 该方法基于节点坐标。\n * @method getNodeToWorldTransformAR\n * @deprecated since v2.0\n * @param {AffineTransform} [out] The affine transform object to be filled with data\n * @return {AffineTransform} Same as the out affine transform object\n * @example\n * let affineTransform = cc.AffineTransform.create();\n * node.getNodeToWorldTransformAR(affineTransform);\n */\n getNodeToWorldTransformAR (out) {\n if (!out) {\n out = AffineTrans.identity();\n }\n this._updateWorldMatrix();\n return AffineTrans.fromMat4(out, this._worldMatrix);\n },\n\n /**\n * !#en\n * Returns the matrix that transform parent's space coordinates to the node's (local) space coordinates.
\n * The matrix is in Pixels. The returned transform is readonly and cannot be changed.\n * !#zh\n * 返回将父节点的坐标系转换成节点(局部)的空间坐标系的矩阵。
\n * 该矩阵以像素为单位。返回的矩阵是只读的,不能更改。\n * @method getParentToNodeTransform\n * @deprecated since v2.0\n * @param {AffineTransform} [out] The affine transform object to be filled with data\n * @return {AffineTransform} Same as the out affine transform object\n * @example\n * let affineTransform = cc.AffineTransform.create();\n * node.getParentToNodeTransform(affineTransform);\n */\n getParentToNodeTransform (out) {\n if (!out) {\n out = AffineTrans.identity();\n }\n this._updateLocalMatrix();\n Mat4.invert(_mat4_temp, this._matrix);\n return AffineTrans.fromMat4(out, _mat4_temp);\n },\n\n /**\n * !#en Returns the inverse world affine transform matrix. The matrix is in Pixels.\n * !#en 返回世界坐标系到节点坐标系的逆矩阵。\n * @method getWorldToNodeTransform\n * @deprecated since v2.0\n * @param {AffineTransform} [out] The affine transform object to be filled with data\n * @return {AffineTransform} Same as the out affine transform object\n * @example\n * let affineTransform = cc.AffineTransform.create();\n * node.getWorldToNodeTransform(affineTransform);\n */\n getWorldToNodeTransform (out) {\n if (!out) {\n out = AffineTrans.identity();\n }\n this._updateWorldMatrix();\n Mat4.invert(_mat4_temp, this._worldMatrix);\n return AffineTrans.fromMat4(out, _mat4_temp);\n },\n\n /**\n * !#en convenience methods which take a cc.Touch instead of cc.Vec2.\n * !#zh 将触摸点转换成本地坐标系中位置。\n * @method convertTouchToNodeSpace\n * @deprecated since v2.0\n * @param {Touch} touch - The touch object\n * @return {Vec2}\n * @example\n * var newVec2 = node.convertTouchToNodeSpace(touch);\n */\n convertTouchToNodeSpace (touch) {\n return this.convertToNodeSpace(touch.getLocation());\n },\n\n /**\n * !#en converts a cc.Touch (world coordinates) into a local coordinate. This method is AR (Anchor Relative).\n * !#zh 转换一个 cc.Touch(世界坐标)到一个局部坐标,该方法基于节点坐标。\n * @method convertTouchToNodeSpaceAR\n * @deprecated since v2.0\n * @param {Touch} touch - The touch object\n * @return {Vec2}\n * @example\n * var newVec2 = node.convertTouchToNodeSpaceAR(touch);\n */\n convertTouchToNodeSpaceAR (touch) {\n return this.convertToNodeSpaceAR(touch.getLocation());\n },\n\n /**\n * !#en\n * Returns a \"local\" axis aligned bounding box of the node.
\n * The returned box is relative only to its parent.\n * !#zh 返回父节坐标系下的轴向对齐的包围盒。\n * @method getBoundingBox\n * @return {Rect} The calculated bounding box of the node\n * @example\n * var boundingBox = node.getBoundingBox();\n */\n getBoundingBox () {\n this._updateLocalMatrix();\n let width = this._contentSize.width;\n let height = this._contentSize.height;\n let rect = cc.rect(\n -this._anchorPoint.x * width,\n -this._anchorPoint.y * height,\n width,\n height);\n return rect.transformMat4(rect, this._matrix);\n },\n\n /**\n * !#en\n * Returns a \"world\" axis aligned bounding box of the node.
\n * The bounding box contains self and active children's world bounding box.\n * !#zh\n * 返回节点在世界坐标系下的对齐轴向的包围盒(AABB)。
\n * 该边框包含自身和已激活的子节点的世界边框。\n * @method getBoundingBoxToWorld\n * @return {Rect}\n * @example\n * var newRect = node.getBoundingBoxToWorld();\n */\n getBoundingBoxToWorld () {\n if (this._parent) {\n this._parent._updateWorldMatrix();\n return this._getBoundingBoxTo();\n }\n else {\n return this.getBoundingBox();\n }\n },\n\n _getBoundingBoxTo () {\n let width = this._contentSize.width;\n let height = this._contentSize.height;\n let rect = cc.rect(\n -this._anchorPoint.x * width,\n -this._anchorPoint.y * height,\n width,\n height);\n\n this._calculWorldMatrix();\n rect.transformMat4(rect, this._worldMatrix);\n\n //query child's BoundingBox\n if (!this._children)\n return rect;\n\n var locChildren = this._children;\n for (var i = 0; i < locChildren.length; i++) {\n var child = locChildren[i];\n if (child && child.active) {\n var childRect = child._getBoundingBoxTo();\n if (childRect)\n rect.union(rect, childRect);\n }\n }\n return rect;\n },\n\n _updateOrderOfArrival () {\n var arrivalOrder = this._parent ? ++this._parent._childArrivalOrder : 0;\n this._localZOrder = (this._localZOrder & 0xffff0000) | arrivalOrder;\n\n this.emit(EventType.SIBLING_ORDER_CHANGED);\n },\n\n /**\n * !#en\n * Adds a child to the node with z order and name.\n * !#zh\n * 添加子节点,并且可以修改该节点的 局部 Z 顺序和名字。\n * @method addChild\n * @param {Node} child - A child node\n * @param {Number} [zIndex] - Z order for drawing priority. Please refer to zIndex property\n * @param {String} [name] - A name to identify the node easily. Please refer to name property\n * @example\n * node.addChild(newNode, 1, \"node\");\n */\n addChild (child, zIndex, name) {\n if (CC_DEV && !cc.Node.isNode(child)) {\n return cc.errorID(1634, cc.js.getClassName(child));\n }\n cc.assertID(child, 1606);\n cc.assertID(child._parent === null, 1605);\n\n // invokes the parent setter\n child.parent = this;\n\n if (zIndex !== undefined) {\n child.zIndex = zIndex;\n }\n if (name !== undefined) {\n child.name = name;\n }\n },\n\n /**\n * !#en Stops all running actions and schedulers.\n * !#zh 停止所有正在播放的动作和计时器。\n * @method cleanup\n * @example\n * node.cleanup();\n */\n cleanup () {\n // actions\n ActionManagerExist && cc.director.getActionManager().removeAllActionsFromTarget(this);\n // event\n eventManager.removeListeners(this);\n\n // children\n var i, len = this._children.length, node;\n for (i = 0; i < len; ++i) {\n node = this._children[i];\n if (node)\n node.cleanup();\n }\n },\n\n /**\n * !#en Sorts the children array depends on children's zIndex and arrivalOrder,\n * normally you won't need to invoke this function.\n * !#zh 根据子节点的 zIndex 和 arrivalOrder 进行排序,正常情况下开发者不需要手动调用这个函数。\n *\n * @method sortAllChildren\n */\n sortAllChildren () {\n if (this._reorderChildDirty) {\n\n this._reorderChildDirty = false;\n\n // delay update arrivalOrder before sort children\n var _children = this._children, child;\n // reset arrivalOrder before sort children\n this._childArrivalOrder = 1;\n for (let i = 0, len = _children.length; i < len; i++) {\n child = _children[i];\n child._updateOrderOfArrival();\n }\n\n // Optimize reordering event code to fix problems with setting zindex\n // https://github.com/cocos-creator/2d-tasks/issues/1186\n eventManager._setDirtyForNode(this);\n\n if (_children.length > 1) {\n // insertion sort\n let child, child2;\n for (let i = 1, count = _children.length; i < count; i++) {\n child = _children[i];\n let j = i;\n for (; j > 0 &&\n (child2 = _children[j - 1])._localZOrder > child._localZOrder; j--) {\n _children[j] = child2;\n }\n _children[j] = child;\n }\n\n this.emit(EventType.CHILD_REORDER, this);\n }\n cc.director.__fastOff(cc.Director.EVENT_AFTER_UPDATE, this.sortAllChildren, this);\n }\n },\n\n _delaySort () {\n if (!this._reorderChildDirty) {\n this._reorderChildDirty = true;\n cc.director.__fastOn(cc.Director.EVENT_AFTER_UPDATE, this.sortAllChildren, this);\n }\n },\n\n _restoreProperties: CC_EDITOR && function () {\n /*\n * TODO: Refine this code after completing undo/redo 2.0.\n * The node will be destroyed when deleting in the editor,\n * but it will be reserved and reused for undo.\n */\n\n // restore 3d node\n this.is3DNode = this.is3DNode;\n\n if (!this._matrix) {\n this._matrix = cc.mat4(this._spaceInfo.localMat);\n Mat4.identity(this._matrix);\n }\n if (!this._worldMatrix) {\n this._worldMatrix = cc.mat4(this._spaceInfo.worldMat);\n Mat4.identity(this._worldMatrix);\n }\n\n this._localMatDirty = LocalDirtyFlag.ALL;\n this._worldMatDirty = true;\n\n this._fromEuler();\n\n this._renderFlag |= RenderFlow.FLAG_TRANSFORM;\n if (this._renderComponent) {\n this._renderComponent.markForRender(true);\n }\n\n if (this._children.length > 0) {\n this._renderFlag |= RenderFlow.FLAG_CHILDREN;\n }\n },\n\n onRestore: CC_EDITOR && function () {\n this._onRestoreBase();\n\n this._restoreProperties();\n\n var actionManager = cc.director.getActionManager();\n if (this._activeInHierarchy) {\n actionManager && actionManager.resumeTarget(this);\n eventManager.resumeTarget(this);\n }\n else {\n actionManager && actionManager.pauseTarget(this);\n eventManager.pauseTarget(this);\n }\n },\n\n};\n\nif (CC_EDITOR) {\n // deprecated, only used to import old data in editor\n js.mixin(NodeDefines.properties, {\n _scaleX: {\n default: undefined,\n type: cc.Float,\n editorOnly: true\n },\n _scaleY: {\n default: undefined,\n type: cc.Float,\n editorOnly: true\n },\n });\n}\n\nlet Node = cc.Class(NodeDefines);\n\n// 3D Node Property\n\n\n// Node Event\n\n/**\n * !#en\n * The position changing event, you can listen to this event through the statement this.node.on(cc.Node.EventType.POSITION_CHANGED, callback, this);\n * !#zh\n * 位置变动监听事件, 通过 this.node.on(cc.Node.EventType.POSITION_CHANGED, callback, this); 进行监听。\n * @event position-changed\n * @param {Vec2} oldPos - The old position, but this parameter is only available in editor!\n */\n/**\n * !#en\n * The size changing event, you can listen to this event through the statement this.node.on(cc.Node.EventType.SIZE_CHANGED, callback, this);\n * !#zh\n * 尺寸变动监听事件,通过 this.node.on(cc.Node.EventType.SIZE_CHANGED, callback, this); 进行监听。\n * @event size-changed\n * @param {Size} oldSize - The old size, but this parameter is only available in editor!\n */\n/**\n * !#en\n * The anchor changing event, you can listen to this event through the statement this.node.on(cc.Node.EventType.ANCHOR_CHANGED, callback, this);\n * !#zh\n * 锚点变动监听事件,通过 this.node.on(cc.Node.EventType.ANCHOR_CHANGED, callback, this); 进行监听。\n * @event anchor-changed\n */\n/**\n * !#en\n * The adding child event, you can listen to this event through the statement this.node.on(cc.Node.EventType.CHILD_ADDED, callback, this);\n * !#zh\n * 增加子节点监听事件,通过 this.node.on(cc.Node.EventType.CHILD_ADDED, callback, this); 进行监听。\n * @event child-added\n * @param {Node} child - child which have been added\n */\n/**\n * !#en\n * The removing child event, you can listen to this event through the statement this.node.on(cc.Node.EventType.CHILD_REMOVED, callback, this);\n * !#zh\n * 删除子节点监听事件,通过 this.node.on(cc.Node.EventType.CHILD_REMOVED, callback, this); 进行监听。\n * @event child-removed\n * @param {Node} child - child which have been removed\n */\n/**\n * !#en\n * The reordering child event, you can listen to this event through the statement this.node.on(cc.Node.EventType.CHILD_REORDER, callback, this);\n * !#zh\n * 子节点顺序变动监听事件,通过 this.node.on(cc.Node.EventType.CHILD_REORDER, callback, this); 进行监听。\n * @event child-reorder\n * @param {Node} node - node whose children have been reordered\n */\n/**\n * !#en\n * The group changing event, you can listen to this event through the statement this.node.on(cc.Node.EventType.GROUP_CHANGED, callback, this);\n * !#zh\n * 节点分组变动监听事件,通过 this.node.on(cc.Node.EventType.GROUP_CHANGED, callback, this); 进行监听。\n * @event group-changed\n * @param {Node} node - node whose group has changed\n */\n\n// Deprecated APIs\n\n/**\n * !#en\n * Returns the displayed opacity of Node,\n * the difference between displayed opacity and opacity is that displayed opacity is calculated based on opacity and parent node's opacity when cascade opacity enabled.\n * !#zh\n * 获取节点显示透明度,\n * 显示透明度和透明度之间的不同之处在于当启用级连透明度时,\n * 显示透明度是基于自身透明度和父节点透明度计算的。\n *\n * @method getDisplayedOpacity\n * @return {number} displayed opacity\n * @deprecated since v2.0, please use opacity property, cascade opacity is removed\n */\n\n/**\n * !#en\n * Returns the displayed color of Node,\n * the difference between displayed color and color is that displayed color is calculated based on color and parent node's color when cascade color enabled.\n * !#zh\n * 获取节点的显示颜色,\n * 显示颜色和颜色之间的不同之处在于当启用级连颜色时,\n * 显示颜色是基于自身颜色和父节点颜色计算的。\n *\n * @method getDisplayedColor\n * @return {Color}\n * @deprecated since v2.0, please use color property, cascade color is removed\n */\n\n/**\n * !#en Cascade opacity is removed from v2.0\n * Indicate whether node's opacity value affect its child nodes, default value is true.\n * !#zh 透明度级联功能从 v2.0 开始已移除\n * 节点的不透明度值是否影响其子节点,默认值为 true。\n * @property cascadeOpacity\n * @deprecated since v2.0\n * @type {Boolean}\n */\n\n/**\n * !#en Cascade opacity is removed from v2.0\n * Returns whether node's opacity value affect its child nodes.\n * !#zh 透明度级联功能从 v2.0 开始已移除\n * 返回节点的不透明度值是否影响其子节点。\n * @method isCascadeOpacityEnabled\n * @deprecated since v2.0\n * @return {Boolean}\n */\n\n/**\n * !#en Cascade opacity is removed from v2.0\n * Enable or disable cascade opacity, if cascade enabled, child nodes' opacity will be the multiplication of parent opacity and its own opacity.\n * !#zh 透明度级联功能从 v2.0 开始已移除\n * 启用或禁用级连不透明度,如果级连启用,子节点的不透明度将是父不透明度乘上它自己的不透明度。\n * @method setCascadeOpacityEnabled\n * @deprecated since v2.0\n * @param {Boolean} cascadeOpacityEnabled\n */\n\n/**\n * !#en Opacity modify RGB have been removed since v2.0\n * Set whether color should be changed with the opacity value,\n * useless in ccsg.Node, but this function is override in some class to have such behavior.\n * !#zh 透明度影响颜色配置已经被废弃\n * 设置更改透明度时是否修改RGB值,\n * @method setOpacityModifyRGB\n * @deprecated since v2.0\n * @param {Boolean} opacityValue\n */\n\n/**\n * !#en Opacity modify RGB have been removed since v2.0\n * Get whether color should be changed with the opacity value.\n * !#zh 透明度影响颜色配置已经被废弃\n * 获取更改透明度时是否修改RGB值。\n * @method isOpacityModifyRGB\n * @deprecated since v2.0\n * @return {Boolean}\n */\n\n\nlet _p = Node.prototype;\njs.getset(_p, 'position', _p.getPosition, _p.setPosition, false, true);\n\nif (CC_EDITOR) {\n let vec3_tmp = new Vec3();\n cc.js.getset(_p, 'worldEulerAngles', function () {\n let angles = new Vec3(this._eulerAngles);\n let parent = this.parent;\n while (parent) {\n angles.addSelf(parent._eulerAngles);\n parent = parent.parent;\n }\n return angles;\n }, function (v) {\n vec3_tmp.set(v);\n let parent = this.parent;\n while (parent) {\n vec3_tmp.subSelf(parent._eulerAngles);\n parent = parent.parent;\n }\n this.eulerAngles = vec3_tmp;\n });\n}\n\ncc.Node = module.exports = Node;\n","/****************************************************************************\n Copyright (c) 2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n'use strict';\n\nconst Node = require('./CCNode');\nconst RenderFlow = require('./renderer/render-flow');\n\nconst HideInHierarchy = cc.Object.Flags.HideInHierarchy;\nconst LocalDirtyFlag = Node._LocalDirtyFlag;\nconst POSITION_ON = 1 << 0;\n\n/**\n * !#en\n * Class of private entities in Cocos Creator scenes.
\n * The PrivateNode is hidden in editor, and completely transparent to users.
\n * It's normally used as Node's private content created by components in parent node.
\n * So in theory private nodes are not children, they are part of the parent node.
\n * Private node have two important characteristics:
\n * 1. It has the minimum z index and cannot be modified, because they can't be displayed over real children.
\n * 2. The positioning of private nodes is also special, they will consider the left bottom corner of the parent node's bounding box as the origin of local coordinates.
\n * In this way, they can be easily kept inside the bounding box.
\n * Currently, it's used by RichText component and TileMap component.\n * !#zh\n * Cocos Creator 场景中的私有节点类。
\n * 私有节点在编辑器中不可见,对用户透明。
\n * 通常私有节点是被一些特殊的组件创建出来作为父节点的一部分而存在的,理论上来说,它们不是子节点,而是父节点的组成部分。
\n * 私有节点有两个非常重要的特性:
\n * 1. 它有着最小的渲染排序的 Z 轴深度,并且无法被更改,因为它们不能被显示在其他正常子节点之上。
\n * 2. 它的定位也是特殊的,对于私有节点来说,父节点包围盒的左下角是它的局部坐标系原点,这个原点相当于父节点的位置减去它锚点的偏移。这样私有节点可以比较容易被控制在包围盒之中。
\n * 目前在引擎中,RichText 和 TileMap 都有可能生成私有节点。\n * @class PrivateNode\n * @constructor\n * @param {String} name\n * @extends Node\n */\nlet PrivateNode = cc.Class({\n name: 'cc.PrivateNode',\n extends: Node,\n\n properties: {\n x: {\n get () {\n return this._originPos.x;\n },\n set (value) {\n var localPosition = this._originPos;\n if (value !== localPosition.x) {\n localPosition.x = value;\n this._posDirty(true);\n }\n },\n override: true\n },\n y: {\n get () {\n return this._originPos.y;\n },\n set (value) {\n var localPosition = this._originPos;\n if (value !== localPosition.y) {\n localPosition.y = value;\n this._posDirty(true);\n }\n },\n override: true\n },\n zIndex: {\n get () {\n return cc.macro.MIN_ZINDEX;\n },\n set () {\n },\n override: true\n },\n showInEditor: {\n default: false,\n editorOnly: true,\n override: true\n }\n },\n\n /**\n * @method constructor\n * @param {String} [name]\n */\n ctor (name) {\n this._localZOrder = cc.macro.MIN_ZINDEX << 16;\n this._originPos = cc.v2();\n if (CC_EDITOR) {\n this._objFlags |= HideInHierarchy;\n }\n },\n\n _posDirty (sendEvent) {\n this.setLocalDirty(LocalDirtyFlag.POSITION);\n !CC_NATIVERENDERER && (this._renderFlag |= RenderFlow.FLAG_TRANSFORM);\n if (sendEvent === true && (this._eventMask & POSITION_ON)) {\n this.emit(Node.EventType.POSITION_CHANGED);\n }\n },\n\n _updateLocalMatrix() {\n if (!this._localMatDirty) return;\n\n let parent = this.parent;\n if (parent) {\n // Position correction for transform calculation\n this._trs[0] = this._originPos.x - (parent._anchorPoint.x - 0.5) * parent._contentSize.width;\n this._trs[1] = this._originPos.y - (parent._anchorPoint.y - 0.5) * parent._contentSize.height;\n }\n\n this._super();\n },\n\n getPosition () {\n return new cc.Vec2(this._originPos);\n },\n\n setPosition (x, y) {\n if (y === undefined) {\n x = x.x;\n y = x.y;\n }\n\n let pos = this._originPos;\n if (pos.x === x && pos.y === y) {\n return;\n }\n pos.x = x;\n pos.y = y;\n this._posDirty(true);\n },\n\n setParent(value) {\n let oldParent = this._parent;\n this._super(value);\n if (oldParent !== value) {\n if (oldParent) {\n oldParent.off(Node.EventType.ANCHOR_CHANGED, this._posDirty, this);\n }\n if (value) {\n value.on(Node.EventType.ANCHOR_CHANGED, this._posDirty, this);\n }\n }\n },\n\n // do not update order of arrival\n _updateOrderOfArrival() {},\n});\n\nlet proto = PrivateNode.prototype;\ncc.js.getset(proto, \"parent\", proto.getParent, proto.setParent);\ncc.js.getset(proto, \"position\", proto.getPosition, proto.setPosition);\n\nif (CC_EDITOR) {\n // check components to avoid missing node reference serialied in previous version\n proto._onBatchCreated = function (dontSyncChildPrefab) {\n for (let comp of this._components) {\n comp.node = this;\n }\n\n Node.prototype._onBatchCreated.call(this, dontSyncChildPrefab);\n };\n}\n\ncc.PrivateNode = module.exports = PrivateNode;\n","/****************************************************************************\n Copyright (c) 2015-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos2d-x.org\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar NIL = function () {};\n\n/**\n * !#en\n * cc.Scene is a subclass of cc.Node that is used only as an abstract concept.
\n * cc.Scene and cc.Node are almost identical with the difference that users can not modify cc.Scene manually.\n * !#zh\n * cc.Scene 是 cc.Node 的子类,仅作为一个抽象的概念。
\n * cc.Scene 和 cc.Node 有点不同,用户不应直接修改 cc.Scene。\n * @class Scene\n * @extends Node\n */\ncc.Scene = cc.Class({\n name: 'cc.Scene',\n extends: require('./CCNode'),\n\n properties: {\n _is3DNode: {\n default: true,\n override: true\n },\n\n /**\n * !#en Indicates whether all (directly or indirectly) static referenced assets of this scene are releasable by default after scene unloading.\n * !#zh 指示该场景中直接或间接静态引用到的所有资源是否默认在场景切换后自动释放。\n * @property {Boolean} autoReleaseAssets\n * @default false\n */\n autoReleaseAssets: false,\n },\n\n ctor: function () {\n this._anchorPoint.x = 0.0;\n this._anchorPoint.y = 0.0;\n\n this._activeInHierarchy = false;\n this._inited = !cc.game._isCloning;\n\n if (CC_EDITOR) {\n this._prefabSyncedInLiveReload = false;\n }\n\n // cache all depend assets for auto release\n this.dependAssets = null;\n },\n\n destroy: function () {\n if (cc.Object.prototype.destroy.call(this)) {\n var children = this._children;\n for (var i = 0; i < children.length; ++i) {\n children[i].active = false;\n }\n }\n this._active = false;\n this._activeInHierarchy = false;\n },\n\n _onHierarchyChanged: NIL,\n _instantiate : null,\n\n _load: function () {\n if (!this._inited) {\n if (CC_TEST) {\n cc.assert(!this._activeInHierarchy, 'Should deactivate ActionManager and EventManager by default');\n }\n this._onBatchCreated(CC_EDITOR && this._prefabSyncedInLiveReload);\n this._inited = true;\n }\n },\n\n _activate: function (active) {\n active = (active !== false);\n if (CC_EDITOR || CC_TEST) {\n // register all nodes to editor\n this._registerIfAttached(active);\n }\n cc.director._nodeActivator.activateNode(this, active);\n }\n});\n\nmodule.exports = cc.Scene;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * @module cc\n */\nconst js = require('./platform/js');\nconst IdGenerater = require('./platform/id-generater');\nconst MAX_POOL_SIZE = 20;\n\nvar idGenerater = new IdGenerater('Scheduler');\n\n//data structures\n/*\n * A list double-linked list used for \"updates with priority\"\n * @class ListEntry\n * @param {Object} target not retained (retained by hashUpdateEntry)\n * @param {Number} priority\n * @param {Boolean} paused\n * @param {Boolean} markedForDeletion selector will no longer be called and entry will be removed at end of the next tick\n */\nvar ListEntry = function (target, priority, paused, markedForDeletion) {\n this.target = target;\n this.priority = priority;\n this.paused = paused;\n this.markedForDeletion = markedForDeletion;\n};\n\nvar _listEntries = [];\nListEntry.get = function (target, priority, paused, markedForDeletion) {\n var result = _listEntries.pop();\n if (result) {\n result.target = target;\n result.priority = priority;\n result.paused = paused;\n result.markedForDeletion = markedForDeletion;\n }\n else {\n result = new ListEntry(target, priority, paused, markedForDeletion);\n }\n return result;\n};\nListEntry.put = function (entry) {\n if (_listEntries.length < MAX_POOL_SIZE) {\n entry.target = null;\n _listEntries.push(entry);\n }\n};\n\n/*\n * A update entry list\n * @class HashUpdateEntry\n * @param {Array} list Which list does it belong to ?\n * @param {ListEntry} entry entry in the list\n * @param {Object} target hash key (retained)\n * @param {function} callback\n */\nvar HashUpdateEntry = function (list, entry, target, callback) {\n this.list = list;\n this.entry = entry;\n this.target = target;\n this.callback = callback;\n};\nvar _hashUpdateEntries = [];\nHashUpdateEntry.get = function (list, entry, target, callback) {\n var result = _hashUpdateEntries.pop();\n if (result) {\n result.list = list;\n result.entry = entry;\n result.target = target;\n result.callback = callback;\n }\n else {\n result = new HashUpdateEntry(list, entry, target, callback);\n }\n return result;\n};\nHashUpdateEntry.put = function (entry) {\n if (_hashUpdateEntries.length < MAX_POOL_SIZE) {\n entry.list = entry.entry = entry.target = entry.callback = null;\n _hashUpdateEntries.push(entry);\n }\n};\n\n//\n/*\n * Hash Element used for \"selectors with interval\"\n * @class HashTimerEntry\n * @param {Array} timers\n * @param {Object} target hash key (retained)\n * @param {Number} timerIndex\n * @param {Timer} currentTimer\n * @param {Boolean} currentTimerSalvaged\n * @param {Boolean} paused\n */\nvar HashTimerEntry = function (timers, target, timerIndex, currentTimer, currentTimerSalvaged, paused) {\n var _t = this;\n _t.timers = timers;\n _t.target = target;\n _t.timerIndex = timerIndex;\n _t.currentTimer = currentTimer;\n _t.currentTimerSalvaged = currentTimerSalvaged;\n _t.paused = paused;\n};\nvar _hashTimerEntries = [];\nHashTimerEntry.get = function (timers, target, timerIndex, currentTimer, currentTimerSalvaged, paused) {\n var result = _hashTimerEntries.pop();\n if (result) {\n result.timers = timers;\n result.target = target;\n result.timerIndex = timerIndex;\n result.currentTimer = currentTimer;\n result.currentTimerSalvaged = currentTimerSalvaged;\n result.paused = paused;\n }\n else {\n result = new HashTimerEntry(timers, target, timerIndex, currentTimer, currentTimerSalvaged, paused);\n }\n return result;\n};\nHashTimerEntry.put = function (entry) {\n if (_hashTimerEntries.length < MAX_POOL_SIZE) {\n entry.timers = entry.target = entry.currentTimer = null;\n _hashTimerEntries.push(entry);\n }\n};\n\n/*\n * Light weight timer\n * @extends cc.Class\n */\nfunction CallbackTimer () {\n this._lock = false;\n this._scheduler = null;\n this._elapsed = -1;\n this._runForever = false;\n this._useDelay = false;\n this._timesExecuted = 0;\n this._repeat = 0;\n this._delay = 0;\n this._interval = 0;\n\n this._target = null;\n this._callback = null;\n}\n\nvar proto = CallbackTimer.prototype;\n\nproto.initWithCallback = function (scheduler, callback, target, seconds, repeat, delay) {\n this._lock = false;\n this._scheduler = scheduler;\n this._target = target;\n this._callback = callback;\n\n this._elapsed = -1;\n this._interval = seconds;\n this._delay = delay;\n this._useDelay = (this._delay > 0);\n this._repeat = repeat;\n this._runForever = (this._repeat === cc.macro.REPEAT_FOREVER);\n return true;\n};\n/**\n * @return {Number} returns interval of timer\n */\nproto.getInterval = function(){return this._interval;};\n/**\n * @param {Number} interval set interval in seconds\n */\nproto.setInterval = function(interval){this._interval = interval;};\n\n/**\n * triggers the timer\n * @param {Number} dt delta time\n */\nproto.update = function (dt) {\n if (this._elapsed === -1) {\n this._elapsed = 0;\n this._timesExecuted = 0;\n } else {\n this._elapsed += dt;\n if (this._runForever && !this._useDelay) {//standard timer usage\n if (this._elapsed >= this._interval) {\n this.trigger();\n this._elapsed = 0;\n }\n } else {//advanced usage\n if (this._useDelay) {\n if (this._elapsed >= this._delay) {\n this.trigger();\n\n this._elapsed -= this._delay;\n this._timesExecuted += 1;\n this._useDelay = false;\n }\n } else {\n if (this._elapsed >= this._interval) {\n this.trigger();\n\n this._elapsed = 0;\n this._timesExecuted += 1;\n }\n }\n\n if (this._callback && !this._runForever && this._timesExecuted > this._repeat)\n this.cancel();\n }\n }\n};\n\nproto.getCallback = function(){\n return this._callback;\n};\n\nproto.trigger = function () {\n if (this._target && this._callback) {\n this._lock = true;\n this._callback.call(this._target, this._elapsed);\n this._lock = false;\n }\n};\n\nproto.cancel = function () {\n //override\n this._scheduler.unschedule(this._callback, this._target);\n};\n\nvar _timers = [];\nCallbackTimer.get = function () {\n return _timers.pop() || new CallbackTimer();\n};\nCallbackTimer.put = function (timer) {\n if (_timers.length < MAX_POOL_SIZE && !timer._lock) {\n timer._scheduler = timer._target = timer._callback = null;\n _timers.push(timer);\n }\n};\n\n/**\n * !#en\n * Scheduler is responsible of triggering the scheduled callbacks.
\n * You should not use NSTimer. Instead use this class.
\n *
\n * There are 2 different types of callbacks (selectors):
\n * - update callback: the 'update' callback will be called every frame. You can customize the priority.
\n * - custom callback: A custom callback will be called every frame, or with a custom interval of time
\n *
\n * The 'custom selectors' should be avoided when possible. It is faster,\n * and consumes less memory to use the 'update callback'. *\n * !#zh\n * Scheduler 是负责触发回调函数的类。
\n * 通常情况下,建议使用 cc.director.getScheduler() 来获取系统定时器。
\n * 有两种不同类型的定时器:
\n * - update 定时器:每一帧都会触发。您可以自定义优先级。
\n * - 自定义定时器:自定义定时器可以每一帧或者自定义的时间间隔触发。
\n * 如果希望每帧都触发,应该使用 update 定时器,使用 update 定时器更快,而且消耗更少的内存。\n *\n * @class Scheduler\n */\ncc.Scheduler = function () {\n this._timeScale = 1.0;\n this._updatesNegList = []; // list of priority < 0\n this._updates0List = []; // list of priority == 0\n this._updatesPosList = []; // list of priority > 0\n this._hashForUpdates = js.createMap(true); // hash used to fetch quickly the list entries for pause, delete, etc\n this._hashForTimers = js.createMap(true); // Used for \"selectors with interval\"\n this._currentTarget = null;\n this._currentTargetSalvaged = false;\n this._updateHashLocked = false; // If true unschedule will not remove anything from a hash. Elements will only be marked for deletion.\n\n this._arrayForTimers = []; // Speed up indexing\n //this._arrayForUpdates = []; // Speed up indexing\n};\n\ncc.Scheduler.prototype = {\n constructor: cc.Scheduler,\n //-----------------------private method----------------------\n\n _removeHashElement: function (element) {\n delete this._hashForTimers[element.target._id];\n var arr = this._arrayForTimers;\n for (var i = 0, l = arr.length; i < l; i++) {\n if (arr[i] === element) {\n arr.splice(i, 1);\n break;\n }\n }\n HashTimerEntry.put(element);\n },\n\n _removeUpdateFromHash: function (entry) {\n var targetId = entry.target._id;\n var self = this, element = self._hashForUpdates[targetId];\n if (element) {\n // Remove list entry from list\n var list = element.list, listEntry = element.entry;\n for (var i = 0, l = list.length; i < l; i++) {\n if (list[i] === listEntry) {\n list.splice(i, 1);\n break;\n }\n }\n\n delete self._hashForUpdates[targetId];\n ListEntry.put(listEntry);\n HashUpdateEntry.put(element);\n }\n },\n\n _priorityIn: function (ppList, listElement, priority) {\n for (var i = 0; i < ppList.length; i++){\n if (priority < ppList[i].priority) {\n ppList.splice(i, 0, listElement);\n return;\n }\n }\n ppList.push(listElement);\n },\n\n _appendIn: function (ppList, listElement) {\n ppList.push(listElement);\n },\n\n //-----------------------public method-------------------------\n /**\n * !#en This method should be called for any target which needs to schedule tasks, and this method should be called before any scheduler API usage.\n * This method will add a `_id` property if it doesn't exist.\n * !#zh 任何需要用 Scheduler 管理任务的对象主体都应该调用这个方法,并且应该在调用任何 Scheduler API 之前调用这个方法。\n * 这个方法会给对象添加一个 `_id` 属性,如果这个属性不存在的话。\n * @method enableForTarget\n * @param {Object} target\n */\n enableForTarget: function (target) {\n if (!target._id) {\n if (target.__instanceId) {\n cc.warnID(1513);\n }\n else {\n target._id = idGenerater.getNewId();\n }\n }\n },\n\n /**\n * !#en\n * Modifies the time of all scheduled callbacks.
\n * You can use this property to create a 'slow motion' or 'fast forward' effect.
\n * Default is 1.0. To create a 'slow motion' effect, use values below 1.0.
\n * To create a 'fast forward' effect, use values higher than 1.0.
\n * Note:It will affect EVERY scheduled selector / action.\n * !#zh\n * 设置时间间隔的缩放比例。
\n * 您可以使用这个方法来创建一个 “slow motion(慢动作)” 或 “fast forward(快进)” 的效果。
\n * 默认是 1.0。要创建一个 “slow motion(慢动作)” 效果,使用值低于 1.0。
\n * 要使用 “fast forward(快进)” 效果,使用值大于 1.0。
\n * 注意:它影响该 Scheduler 下管理的所有定时器。\n * @method setTimeScale\n * @param {Number} timeScale\n */\n setTimeScale: function (timeScale) {\n this._timeScale = timeScale;\n },\n\n /**\n * !#en Returns time scale of scheduler.\n * !#zh 获取时间间隔的缩放比例。\n * @method getTimeScale\n * @return {Number}\n */\n getTimeScale: function () {\n return this._timeScale;\n },\n\n /**\n * !#en 'update' the scheduler. (You should NEVER call this method, unless you know what you are doing.)\n * !#zh update 调度函数。(不应该直接调用这个方法,除非完全了解这么做的结果)\n * @method update\n * @param {Number} dt delta time\n */\n update: function (dt) {\n this._updateHashLocked = true;\n if(this._timeScale !== 1)\n dt *= this._timeScale;\n\n var i, list, len, entry;\n\n for(i=0,list=this._updatesNegList, len = list.length; i\n * The scheduled method will be called every 'interval' seconds.
\n * If paused is YES, then it won't be called until it is resumed.
\n * If 'interval' is 0, it will be called every frame, but if so, it recommended to use 'scheduleUpdateForTarget:' instead.
\n * If the callback function is already scheduled, then only the interval parameter will be updated without re-scheduling it again.
\n * repeat let the action be repeated repeat + 1 times, use cc.macro.REPEAT_FOREVER to let the action run continuously
\n * delay is the amount of time the action will wait before it'll start
\n *

\n * !#zh\n * 指定回调函数,调用对象等信息来添加一个新的定时器。
\n * 如果 paused 值为 true,那么直到 resume 被调用才开始计时。
\n * 当时间间隔达到指定值时,设置的回调函数将会被调用。
\n * 如果 interval 值为 0,那么回调函数每一帧都会被调用,但如果是这样,\n * 建议使用 scheduleUpdateForTarget 代替。
\n * 如果回调函数已经被定时器使用,那么只会更新之前定时器的时间间隔参数,不会设置新的定时器。
\n * repeat 值可以让定时器触发 repeat + 1 次,使用 cc.macro.REPEAT_FOREVER\n * 可以让定时器一直循环触发。
\n * delay 值指定延迟时间,定时器会在延迟指定的时间之后开始计时。\n * @method schedule\n * @param {Function} callback\n * @param {Object} target\n * @param {Number} interval\n * @param {Number} [repeat=cc.macro.REPEAT_FOREVER]\n * @param {Number} [delay=0]\n * @param {Boolean} paused\n * @example {@link cocos2d/core/CCScheduler/schedule.js}\n * @typescript\n * schedule(callback: Function, target: any, interval: number, repeat: number, delay: number, paused?: boolean): void\n * schedule(callback: Function, target: any, interval: number, paused?: boolean): void\n */\n schedule: function (callback, target, interval, repeat, delay, paused) {\n 'use strict';\n if (typeof callback !== 'function') {\n var tmp = callback;\n callback = target;\n target = tmp;\n }\n //selector, target, interval, repeat, delay, paused\n //selector, target, interval, paused\n if (arguments.length === 4 || arguments.length === 5) {\n paused = !!repeat;\n repeat = cc.macro.REPEAT_FOREVER;\n delay = 0;\n }\n\n cc.assertID(target, 1502);\n\n var targetId = target._id;\n if (!targetId) {\n if (target.__instanceId) {\n cc.warnID(1513);\n targetId = target._id = target.__instanceId;\n }\n else {\n cc.errorID(1510);\n }\n }\n var element = this._hashForTimers[targetId];\n if (!element) {\n // Is this the 1st element ? Then set the pause level to all the callback_fns of this target\n element = HashTimerEntry.get(null, target, 0, null, null, paused);\n this._arrayForTimers.push(element);\n this._hashForTimers[targetId] = element;\n } else if (element.paused !== paused) {\n cc.warnID(1511);\n }\n\n var timer, i;\n if (element.timers == null) {\n element.timers = [];\n }\n else {\n for (i = 0; i < element.timers.length; ++i) {\n timer = element.timers[i];\n if (timer && callback === timer._callback) {\n cc.logID(1507, timer.getInterval(), interval);\n timer._interval = interval;\n return;\n }\n }\n }\n\n timer = CallbackTimer.get();\n timer.initWithCallback(this, callback, target, interval, repeat, delay);\n element.timers.push(timer);\n\n if (this._currentTarget === element && this._currentTargetSalvaged) {\n this._currentTargetSalvaged = false;\n }\n },\n\n /**\n * !#en\n * Schedules the update callback for a given target,\n * During every frame after schedule started, the \"update\" function of target will be invoked.\n * !#zh\n * 使用指定的优先级为指定的对象设置 update 定时器。\n * update 定时器每一帧都会被触发,触发时自动调用指定对象的 \"update\" 函数。\n * 优先级的值越低,定时器被触发的越早。\n * @method scheduleUpdate\n * @param {Object} target\n * @param {Number} priority\n * @param {Boolean} paused\n */\n scheduleUpdate: function(target, priority, paused) {\n var targetId = target._id;\n if (!targetId) {\n if (target.__instanceId) {\n cc.warnID(1513);\n targetId = target._id = target.__instanceId;\n }\n else {\n cc.errorID(1510);\n }\n }\n var hashElement = this._hashForUpdates[targetId];\n if (hashElement && hashElement.entry){\n // check if priority has changed\n if (hashElement.entry.priority !== priority){\n if (this._updateHashLocked){\n cc.logID(1506);\n hashElement.entry.markedForDeletion = false;\n hashElement.entry.paused = paused;\n return;\n }else{\n // will be added again outside if (hashElement).\n this.unscheduleUpdate(target);\n }\n }else{\n hashElement.entry.markedForDeletion = false;\n hashElement.entry.paused = paused;\n return;\n }\n }\n\n var listElement = ListEntry.get(target, priority, paused, false);\n var ppList;\n\n // most of the updates are going to be 0, that's way there\n // is an special list for updates with priority 0\n if (priority === 0) {\n ppList = this._updates0List;\n this._appendIn(ppList, listElement);\n }\n else {\n ppList = priority < 0 ? this._updatesNegList : this._updatesPosList;\n this._priorityIn(ppList, listElement, priority);\n }\n\n //update hash entry for quick access\n this._hashForUpdates[targetId] = HashUpdateEntry.get(ppList, listElement, target, null);\n },\n\n /**\n * !#en\n * Unschedules a callback for a callback and a given target.\n * If you want to unschedule the \"update\", use `unscheduleUpdate()`\n * !#zh\n * 取消指定对象定时器。\n * 如果需要取消 update 定时器,请使用 unscheduleUpdate()。\n * @method unschedule\n * @param {Function} callback The callback to be unscheduled\n * @param {Object} target The target bound to the callback.\n */\n unschedule: function (callback, target) {\n //callback, target\n\n // explicity handle nil arguments when removing an object\n if (!target || !callback)\n return;\n var targetId = target._id;\n if (!targetId) {\n if (target.__instanceId) {\n cc.warnID(1513);\n targetId = target._id = target.__instanceId;\n }\n else {\n cc.errorID(1510);\n }\n }\n\n var self = this, element = self._hashForTimers[targetId];\n if (element) {\n var timers = element.timers;\n for(var i = 0, li = timers.length; i < li; i++){\n var timer = timers[i];\n if (callback === timer._callback) {\n if ((timer === element.currentTimer) && (!element.currentTimerSalvaged)) {\n element.currentTimerSalvaged = true;\n }\n timers.splice(i, 1);\n CallbackTimer.put(timer);\n //update timerIndex in case we are in tick;, looping over the actions\n if (element.timerIndex >= i) {\n element.timerIndex--;\n }\n\n if (timers.length === 0) {\n if (self._currentTarget === element) {\n self._currentTargetSalvaged = true;\n } else {\n self._removeHashElement(element);\n }\n }\n return;\n }\n }\n }\n },\n\n /** \n * !#en Unschedules the update callback for a given target.\n * !#zh 取消指定对象的 update 定时器。\n * @method unscheduleUpdate\n * @param {Object} target The target to be unscheduled.\n */\n unscheduleUpdate: function (target) {\n if (!target)\n return;\n var targetId = target._id;\n if (!targetId) {\n if (target.__instanceId) {\n cc.warnID(1513);\n targetId = target._id = target.__instanceId;\n }\n else {\n cc.errorID(1510);\n }\n }\n\n var element = this._hashForUpdates[targetId];\n if (element) {\n if (this._updateHashLocked) {\n element.entry.markedForDeletion = true;\n } else {\n this._removeUpdateFromHash(element.entry);\n }\n }\n },\n\n /** \n * !#en\n * Unschedules all scheduled callbacks for a given target.\n * This also includes the \"update\" callback.\n * !#zh 取消指定对象的所有定时器,包括 update 定时器。\n * @method unscheduleAllForTarget\n * @param {Object} target The target to be unscheduled.\n */\n unscheduleAllForTarget: function (target) {\n // explicit nullptr handling\n if (!target){\n return;\n }\n var targetId = target._id;\n if (!targetId) {\n if (target.__instanceId) {\n cc.warnID(1513);\n targetId = target._id = target.__instanceId;\n }\n else {\n cc.errorID(1510);\n }\n }\n\n // Custom Selectors\n var element = this._hashForTimers[targetId];\n if (element) {\n var timers = element.timers;\n if (timers.indexOf(element.currentTimer) > -1 && \n (!element.currentTimerSalvaged)) {\n element.currentTimerSalvaged = true;\n }\n for (var i = 0, l = timers.length; i < l; i++) {\n CallbackTimer.put(timers[i]);\n }\n timers.length = 0;\n\n if (this._currentTarget === element){\n this._currentTargetSalvaged = true;\n }else{\n this._removeHashElement(element);\n }\n }\n\n // update selector\n this.unscheduleUpdate(target);\n },\n\n /**\n * !#en\n * Unschedules all scheduled callbacks from all targets including the system callbacks.
\n * You should NEVER call this method, unless you know what you are doing.\n * !#zh\n * 取消所有对象的所有定时器,包括系统定时器。
\n * 不要调用此函数,除非你确定你在做什么。\n * @method unscheduleAll\n */\n unscheduleAll: function(){\n this.unscheduleAllWithMinPriority(cc.Scheduler.PRIORITY_SYSTEM);\n },\n\n /**\n * !#en\n * Unschedules all callbacks from all targets with a minimum priority.
\n * You should only call this with `PRIORITY_NON_SYSTEM_MIN` or higher.\n * !#zh\n * 取消所有优先级的值大于指定优先级的定时器。
\n * 你应该只取消优先级的值大于 PRIORITY_NON_SYSTEM_MIN 的定时器。\n * @method unscheduleAllWithMinPriority\n * @param {Number} minPriority The minimum priority of selector to be unscheduled. Which means, all selectors which\n * priority is higher than minPriority will be unscheduled.\n */\n unscheduleAllWithMinPriority: function(minPriority){\n // Custom Selectors\n var i, element, arr = this._arrayForTimers;\n for(i=arr.length-1; i>=0; i--){\n element = arr[i];\n this.unscheduleAllForTarget(element.target);\n }\n\n // Updates selectors\n var entry;\n var temp_length = 0;\n if(minPriority < 0){\n for(i=0; i= minPriority)\n this.unscheduleUpdate(entry.target);\n if (temp_length == this._updatesNegList.length)\n i++;\n }\n }\n\n if(minPriority <= 0){\n for(i=0; i= minPriority)\n this.unscheduleUpdate(entry.target);\n if (temp_length == this._updatesPosList.length)\n i++;\n }\n },\n\n /** \n * !#en Checks whether a callback for a given target is scheduled.\n * !#zh 检查指定的回调函数和回调对象组合是否存在定时器。\n * @method isScheduled\n * @param {Function} callback The callback to check.\n * @param {Object} target The target of the callback.\n * @return {Boolean} True if the specified callback is invoked, false if not.\n */\n isScheduled: function(callback, target){\n //key, target\n //selector, target\n cc.assertID(callback, 1508);\n cc.assertID(target, 1509);\n var targetId = target._id;\n if (!targetId) {\n if (target.__instanceId) {\n cc.warnID(1513);\n targetId = target._id = target.__instanceId;\n }\n else {\n cc.errorID(1510);\n }\n }\n \n var element = this._hashForTimers[targetId];\n\n if (!element) {\n return false;\n }\n\n if (element.timers == null){\n return false;\n }\n else {\n var timers = element.timers;\n for (var i = 0; i < timers.length; ++i) {\n var timer = timers[i];\n\n if (callback === timer._callback){\n return true;\n }\n }\n return false;\n }\n },\n\n /**\n * !#en\n * Pause all selectors from all targets.
\n * You should NEVER call this method, unless you know what you are doing.\n * !#zh\n * 暂停所有对象的所有定时器。
\n * 不要调用这个方法,除非你知道你正在做什么。\n * @method pauseAllTargets\n */\n pauseAllTargets: function () {\n return this.pauseAllTargetsWithMinPriority(cc.Scheduler.PRIORITY_SYSTEM);\n },\n\n /**\n * !#en\n * Pause all selectors from all targets with a minimum priority.
\n * You should only call this with kCCPriorityNonSystemMin or higher.\n * !#zh\n * 暂停所有优先级的值大于指定优先级的定时器。
\n * 你应该只暂停优先级的值大于 PRIORITY_NON_SYSTEM_MIN 的定时器。\n * @method pauseAllTargetsWithMinPriority\n * @param {Number} minPriority\n */\n pauseAllTargetsWithMinPriority: function (minPriority) {\n var idsWithSelectors = [];\n\n var self = this, element, locArrayForTimers = self._arrayForTimers;\n var i, li;\n // Custom Selectors\n for(i = 0, li = locArrayForTimers.length; i < li; i++){\n element = locArrayForTimers[i];\n if (element) {\n element.paused = true;\n idsWithSelectors.push(element.target);\n }\n }\n\n var entry;\n if(minPriority < 0){\n for(i=0; i= minPriority){\n entry.paused = true;\n idsWithSelectors.push(entry.target);\n }\n }\n }\n }\n\n if(minPriority <= 0){\n for(i=0; i= minPriority){\n entry.paused = true;\n idsWithSelectors.push(entry.target);\n }\n }\n }\n\n return idsWithSelectors;\n },\n\n /**\n * !#en\n * Resume selectors on a set of targets.
\n * This can be useful for undoing a call to pauseAllCallbacks.\n * !#zh\n * 恢复指定数组中所有对象的定时器。
\n * 这个函数是 pauseAllCallbacks 的逆操作。\n * @method resumeTargets\n * @param {Array} targetsToResume\n */\n resumeTargets: function (targetsToResume) {\n if (!targetsToResume)\n return;\n\n for (var i = 0; i < targetsToResume.length; i++) {\n this.resumeTarget(targetsToResume[i]);\n }\n },\n\n /**\n * !#en\n * Pauses the target.
\n * All scheduled selectors/update for a given target won't be 'ticked' until the target is resumed.
\n * If the target is not present, nothing happens.\n * !#zh\n * 暂停指定对象的定时器。
\n * 指定对象的所有定时器都会被暂停。
\n * 如果指定的对象没有定时器,什么也不会发生。\n * @method pauseTarget\n * @param {Object} target\n */\n pauseTarget: function (target) {\n cc.assertID(target, 1503);\n var targetId = target._id;\n if (!targetId) {\n if (target.__instanceId) {\n cc.warnID(1513);\n targetId = target._id = target.__instanceId;\n }\n else {\n cc.errorID(1510);\n }\n }\n\n //customer selectors\n var self = this, \n element = self._hashForTimers[targetId];\n if (element) {\n element.paused = true;\n }\n\n //update callback\n var elementUpdate = self._hashForUpdates[targetId];\n if (elementUpdate) {\n elementUpdate.entry.paused = true;\n }\n },\n\n /**\n * !#en\n * Resumes the target.
\n * The 'target' will be unpaused, so all schedule selectors/update will be 'ticked' again.
\n * If the target is not present, nothing happens.\n * !#zh\n * 恢复指定对象的所有定时器。
\n * 指定对象的所有定时器将继续工作。
\n * 如果指定的对象没有定时器,什么也不会发生。\n * @method resumeTarget\n * @param {Object} target\n */\n resumeTarget: function (target) {\n cc.assertID(target, 1504);\n var targetId = target._id;\n if (!targetId) {\n if (target.__instanceId) {\n cc.warnID(1513);\n targetId = target._id = target.__instanceId;\n }\n else {\n cc.errorID(1510);\n }\n }\n\n // custom selectors\n var self = this,\n element = self._hashForTimers[targetId];\n if (element) {\n element.paused = false;\n }\n\n //update callback\n var elementUpdate = self._hashForUpdates[targetId];\n if (elementUpdate) {\n elementUpdate.entry.paused = false;\n }\n },\n\n /**\n * !#en Returns whether or not the target is paused.\n * !#zh 返回指定对象的定时器是否暂停了。\n * @method isTargetPaused\n * @param {Object} target\n * @return {Boolean}\n */\n isTargetPaused: function (target) {\n cc.assertID(target, 1505);\n var targetId = target._id;\n if (!targetId) {\n if (target.__instanceId) {\n cc.warnID(1513);\n targetId = target._id = target.__instanceId;\n }\n else {\n cc.errorID(1510);\n }\n }\n\n // Custom selectors\n var element = this._hashForTimers[targetId];\n if (element) {\n return element.paused;\n }\n var elementUpdate = this._hashForUpdates[targetId];\n if (elementUpdate) {\n return elementUpdate.entry.paused;\n }\n return false;\n },\n};\n\n/**\n * !#en Priority level reserved for system services.\n * !#zh 系统服务的优先级。\n * @property PRIORITY_SYSTEM\n * @type {Number}\n * @static\n */\ncc.Scheduler.PRIORITY_SYSTEM = 1 << 31;\n\n/**\n * !#en Minimum priority level for user scheduling.\n * !#zh 用户调度最低优先级。\n * @property PRIORITY_NON_SYSTEM\n * @type {Number}\n * @static\n */\ncc.Scheduler.PRIORITY_NON_SYSTEM = cc.Scheduler.PRIORITY_SYSTEM + 1;\n\nmodule.exports = cc.Scheduler;\n","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst preprocess = require('./preprocess');\nconst fetch = require('./fetch');\nconst Cache = require('./cache');\nconst helper = require('./helper');\nconst releaseManager = require('./releaseManager');\nconst dependUtil = require('./depend-util');\nconst load = require('./load');\nconst Pipeline = require('./pipeline');\nconst Task = require('./task');\nconst RequestItem = require('./request-item');\nconst downloader = require('./downloader');\nconst parser = require('./parser');\nconst packManager = require('./pack-manager');\nconst Bundle = require('./bundle');\nconst builtins = require('./builtins');\nconst factory = require('./factory');\nconst { parse, combine } = require('./urlTransformer');\nconst { parseParameters, asyncify } = require('./utilities');\nconst { assets, files, parsed, pipeline, transformPipeline, fetchPipeline, RequestType, bundles, BuiltinBundleName } = require('./shared');\n\n\n/**\n * @module cc\n */\n/**\n * !#en\n * This module controls asset's behaviors and information, include loading, releasing etc. it is a singleton\n * All member can be accessed with `cc.assetManager`.\n * \n * !#zh\n * 此模块管理资源的行为和信息,包括加载,释放等,这是一个单例,所有成员能够通过 `cc.assetManager` 调用\n * \n * @class AssetManager\n */\nfunction AssetManager () {\n\n this._preprocessPipe = preprocess;\n\n this._fetchPipe = fetch;\n\n this._loadPipe = load;\n\n /**\n * !#en \n * Normal loading pipeline\n * \n * !#zh\n * 正常加载管线\n * \n * @property pipeline\n * @type {Pipeline}\n */\n this.pipeline = pipeline.append(preprocess).append(load);\n \n /**\n * !#en \n * Fetching pipeline\n * \n * !#zh\n * 下载管线\n * \n * @property fetchPipeline\n * @type {Pipeline}\n */\n this.fetchPipeline = fetchPipeline.append(preprocess).append(fetch);\n\n /**\n * !#en \n * Url transformer\n * \n * !#zh\n * Url 转换器\n * \n * @property transformPipeline\n * @type {Pipeline}\n */\n this.transformPipeline = transformPipeline.append(parse).append(combine);\n\n\n /**\n * !#en \n * The collection of bundle which is already loaded, you can remove cache with {{#crossLink \"AssetManager/removeBundle:method\"}}{{/crossLink}}\n * \n * !#zh\n * 已加载 bundle 的集合, 你能通过 {{#crossLink \"AssetManager/removeBundle:method\"}}{{/crossLink}} 来移除缓存\n * \n * @property bundles\n * @type {Cache}\n * @typescript\n * bundles: AssetManager.Cache\n */\n this.bundles = bundles;\n\n /**\n * !#en \n * The collection of asset which is already loaded, you can remove cache with {{#crossLink \"AssetManager/releaseAsset:method\"}}{{/crossLink}}\n * \n * !#zh\n * 已加载资源的集合, 你能通过 {{#crossLink \"AssetManager/releaseAsset:method\"}}{{/crossLink}} 来移除缓存\n * \n * @property assets\n * @type {Cache}\n * @typescript\n * assets: AssetManager.Cache\n */\n this.assets = assets;\n \n this._files = files;\n \n this._parsed = parsed;\n\n this.generalImportBase = '';\n\n this.generalNativeBase = '';\n\n /**\n * !#en \n * Manage relationship between asset and its dependencies\n * \n * !#zh\n * 管理资源依赖关系\n * \n * @property dependUtil\n * @type {DependUtil}\n */\n this.dependUtil = dependUtil;\n\n this._releaseManager = releaseManager;\n\n /**\n * !#en \n * Whether or not cache the loaded asset\n * \n * !#zh\n * 是否缓存已加载的资源\n * \n * @property cacheAsset\n * @type {boolean}\n */\n this.cacheAsset = true;\n\n /**\n * !#en \n * Whether or not load asset forcely, if it is true, asset will be loaded regardless of error\n * \n * !#zh\n * 是否强制加载资源, 如果为 true ,加载资源将会忽略报错\n * \n * @property force\n * @type {boolean}\n */\n this.force = false;\n\n /**\n * !#en \n * Some useful function\n * \n * !#zh\n * 一些有用的方法\n * \n * @property utils\n * @type {Helper}\n */\n this.utils = helper;\n\n /**\n * !#en \n * Manage all downloading task\n * \n * !#zh\n * 管理所有下载任务\n * \n * @property downloader\n * @type {Downloader}\n */\n this.downloader = downloader; \n\n /**\n * !#en \n * Manage all parsing task\n * \n * !#zh\n * 管理所有解析任务\n * \n * @property parser\n * @type {Parser}\n */\n this.parser = parser;\n\n /**\n * !#en \n * Manage internal asset\n * \n * !#zh\n * 管理内置资源\n * \n * @property builtins\n * @type {Builtins}\n */\n this.builtins = builtins;\n\n /**\n * !#en \n * Manage all packed asset\n * \n * !#zh\n * 管理所有合并后的资源\n * \n * @property packManager\n * @type {PackManager}\n */\n this.packManager = packManager;\n\n this.factory = factory;\n\n /**\n * !#en \n * Cache manager is a module which controls all caches downloaded from server in non-web platform.\n * \n * !#zh\n * 缓存管理器是一个模块,在非 WEB 平台上,用于管理所有从服务器上下载下来的缓存\n * \n * @property cacheManager\n * @type {cc.AssetManager.CacheManager}\n * @typescript\n * cacheManager: cc.AssetManager.CacheManager|null\n */\n this.cacheManager = null;\n\n /**\n * !#en \n * The preset of options\n * \n * !#zh\n * 可选参数的预设集\n * \n * @property presets\n * @type {Object}\n * @typescript\n * presets: Record>\n */\n this.presets = {\n 'default': {\n priority: 0,\n },\n\n 'preload': {\n maxConcurrency: 2, \n maxRequestsPerFrame: 2,\n priority: -1,\n },\n\n 'scene': {\n maxConcurrency: 8, \n maxRequestsPerFrame: 8,\n priority: 1,\n },\n\n 'bundle': {\n maxConcurrency: 8, \n maxRequestsPerFrame: 8,\n priority: 2,\n },\n\n 'remote': {\n maxRetryCount: 4\n },\n\n 'script': {\n maxConcurrency: 1024,\n maxRequestsPerFrame: 1024,\n priority: 2\n }\n }\n\n}\n\nAssetManager.Pipeline = Pipeline;\nAssetManager.Task = Task;\nAssetManager.Cache = Cache;\nAssetManager.RequestItem = RequestItem;\nAssetManager.Bundle = Bundle;\nAssetManager.BuiltinBundleName = BuiltinBundleName;\n\nAssetManager.prototype = {\n\n constructor: AssetManager,\n\n /**\n * !#en \n * The builtin 'main' bundle\n * \n * !#zh\n * 内置 main 包\n * \n * @property main\n * @readonly\n * @type {Bundle}\n */\n get main () {\n return bundles.get(BuiltinBundleName.MAIN);\n },\n\n /**\n * !#en \n * The builtin 'resources' bundle\n * \n * !#zh\n * 内置 resources 包\n * \n * @property resources\n * @readonly\n * @type {Bundle}\n */\n get resources () {\n return bundles.get(BuiltinBundleName.RESOURCES);\n },\n\n /**\n * !#en \n * The builtin 'internal' bundle\n * \n * !#zh\n * 内置 internal 包\n * \n * @property internal\n * @readonly\n * @type {Bundle}\n */\n get internal () {\n return bundles.get(BuiltinBundleName.INTERNAL);\n },\n\n /**\n * !#en\n * Initialize assetManager with options\n * \n * !#zh\n * 初始化资源管理器\n * \n * @method init\n * @param {Object} options \n * \n * @typescript\n * init(options: Record): void\n */\n init (options) {\n options = options || Object.create(null);\n this._files.clear();\n this._parsed.clear();\n this._releaseManager.init();\n this.assets.clear();\n this.bundles.clear();\n this.packManager.init();\n this.downloader.init(options.bundleVers, options.server);\n this.parser.init();\n this.dependUtil.init();\n this.generalImportBase = options.importBase;\n this.generalNativeBase = options.nativeBase;\n },\n\n /**\n * !#en \n * Get the bundle which has been loaded\n * \n * !#zh\n * 获取已加载的分包\n * \n * @method getBundle\n * @param {String} name - The name of bundle \n * @return {Bundle} - The loaded bundle\n * \n * @example\n * // ${project}/assets/test1\n * cc.assetManager.getBundle('test1');\n * \n * cc.assetManager.getBundle('resources');\n * \n * @typescript\n * getBundle (name: string): cc.AssetManager.Bundle\n */\n getBundle (name) {\n return bundles.get(name);\n },\n\n /**\n * !#en \n * Remove this bundle. NOTE: The asset whthin this bundle will not be released automatically, you can call {{#crossLink \"Bundle/releaseAll:method\"}}{{/crossLink}} manually before remove it if you need\n * \n * !#zh \n * 移除此包, 注意:这个包内的资源不会自动释放, 如果需要的话你可以在摧毁之前手动调用 {{#crossLink \"Bundle/releaseAll:method\"}}{{/crossLink}} 进行释放\n *\n * @method removeBundle\n * @param {Bundle} bundle - The bundle to be removed \n * \n * @typescript\n * removeBundle(bundle: cc.AssetManager.Bundle): void\n */\n removeBundle (bundle) {\n bundle._destroy();\n bundles.remove(bundle.name);\n },\n\n /**\n * !#en\n * General interface used to load assets with a progression callback and a complete callback. You can achieve almost all effect you want with combination of `requests` and `options`.\n * It is highly recommended that you use more simple API, such as `load`, `loadDir` etc. Every custom parameter in `options` will be distribute to each of `requests`. \n * if request already has same one, the parameter in request will be given priority. Besides, if request has dependencies, `options` will distribute to dependencies too.\n * Every custom parameter in `requests` will be tranfered to handler of `downloader` and `parser` as `options`. \n * You can register you own handler downloader or parser to collect these custom parameters for some effect.\n * \n * Reserved Keyword: `uuid`, `url`, `path`, `dir`, `scene`, `type`, `priority`, `preset`, `audioLoadMode`, `ext`, `bundle`, `onFileProgress`, `maxConcurrency`, `maxRequestsPerFrame`\n * `maxRetryCount`, `version`, `responseType`, `withCredentials`, `mimeType`, `timeout`, `header`, `reload`, `cacheAsset`, `cacheEnabled`,\n * Please DO NOT use these words as custom options!\n * \n * !#zh\n * 通用加载资源接口,可传入进度回调以及完成回调,通过组合 `request` 和 `options` 参数,几乎可以实现和扩展所有想要的加载效果。非常建议你使用更简单的API,例如 `load`、`loadDir` 等。\n * `options` 中的自定义参数将会分发到 `requests` 的每一项中,如果request中已存在同名的参数则以 `requests` 中为准,同时如果有其他\n * 依赖资源,则 `options` 中的参数会继续向依赖项中分发。request中的自定义参数都会以 `options` 形式传入加载流程中的 `downloader`, `parser` 的方法中, 你可以\n * 扩展 `downloader`, `parser` 收集参数完成想实现的效果。\n * \n * 保留关键字: `uuid`, `url`, `path`, `dir`, `scene`, `type`, `priority`, `preset`, `audioLoadMode`, `ext`, `bundle`, `onFileProgress`, `maxConcurrency`, `maxRequestsPerFrame`\n * `maxRetryCount`, `version`, `responseType`, `withCredentials`, `mimeType`, `timeout`, `header`, `reload`, `cacheAsset`, `cacheEnabled`,\n * 请不要使用这些字段为自定义参数!\n * \n * @method loadAny\n * @param {string|string[]|Object|Object[]} requests - The request you want to load\n * @param {Object} [options] - Optional parameters\n * @param {Function} [onProgress] - Callback invoked when progression change\n * @param {Number} onProgress.finished - The number of the items that are already completed\n * @param {Number} onProgress.total - The total number of the items\n * @param {RequestItem} onProgress.item - The current request item\n * @param {Function} [onComplete] - Callback invoked when finish loading\n * @param {Error} onComplete.err - The error occured in loading process.\n * @param {Object} onComplete.data - The loaded content\n * \n * @example\n * cc.assetManager.loadAny({url: 'http://example.com/a.png'}, (err, img) => cc.log(img));\n * cc.assetManager.loadAny(['60sVXiTH1D/6Aft4MRt9VC'], (err, assets) => cc.log(assets));\n * cc.assetManager.loadAny([{ uuid: '0cbZa5Y71CTZAccaIFluuZ'}, {url: 'http://example.com/a.png'}], (err, assets) => cc.log(assets));\n * cc.assetManager.downloader.register('.asset', (url, options, onComplete) => {\n * url += '?userName=' + options.userName + \"&password=\" + options.password;\n * cc.assetManager.downloader.downloadFile(url, null, onComplete);\n * });\n * cc.assetManager.parser.register('.asset', (file, options, onComplete) => {\n * var json = JSON.parse(file);\n * var skin = json[options.skin];\n * var model = json[options.model];\n * onComplete(null, {skin, model});\n * });\n * cc.assetManager.loadAny({ url: 'http://example.com/my.asset', skin: 'xxx', model: 'xxx', userName: 'xxx', password: 'xxx' });\n * \n * @typescript\n * loadAny(requests: string | string[] | Record | Record[], options: Record, onProgress: (finished: number, total: number, item: cc.AssetManager.RequestItem) => void, onComplete: (err: Error, data: any) => void): void\n * loadAny(requests: string | string[] | Record | Record[], onProgress: (finished: number, total: number, item: cc.AssetManager.RequestItem) => void, onComplete: (err: Error, data: any) => void): void\n * loadAny(requests: string | string[] | Record | Record[], options: Record, onComplete: (err: Error, data: any) => void): void\n * loadAny(requests: string | string[] | Record | Record[], onComplete: (err: Error, data: any) => void): void\n * loadAny(requests: string | string[] | Record | Record[], options: Record): void\n * loadAny(requests: string | string[] | Record | Record[]): void\n */\n loadAny (requests, options, onProgress, onComplete) {\n var { options, onProgress, onComplete } = parseParameters(options, onProgress, onComplete);\n \n options.preset = options.preset || 'default';\n requests = Array.isArray(requests) ? requests.concat() : requests;\n let task = new Task({input: requests, onProgress, onComplete: asyncify(onComplete), options});\n pipeline.async(task);\n },\n\n /**\n * !#en\n * General interface used to preload assets with a progression callback and a complete callback.It is highly recommended that you use more simple API, such as `preloadRes`, `preloadResDir` etc.\n * Everything about preload is just likes `cc.assetManager.loadAny`, the difference is `cc.assetManager.preloadAny` will only download asset but not parse asset. You need to invoke `cc.assetManager.loadAny(preloadTask)` \n * to finish loading asset\n * \n * !#zh\n * 通用预加载资源接口,可传入进度回调以及完成回调,非常建议你使用更简单的 API ,例如 `preloadRes`, `preloadResDir` 等。`preloadAny` 和 `loadAny` 几乎一样,区别在于 `preloadAny` 只会下载资源,不会去解析资源,你需要调用 `cc.assetManager.loadAny(preloadTask)`\n * 来完成资源加载。\n * \n * @method preloadAny\n * @param {string|string[]|Object|Object[]} requests - The request you want to preload\n * @param {Object} [options] - Optional parameters\n * @param {Function} [onProgress] - Callback invoked when progression change\n * @param {Number} onProgress.finished - The number of the items that are already completed\n * @param {Number} onProgress.total - The total number of the items\n * @param {RequestItem} onProgress.item - The current request item\n * @param {Function} [onComplete] - Callback invoked when finish preloading\n * @param {Error} onComplete.err - The error occured in preloading process.\n * @param {RequestItem[]} onComplete.items - The preloaded content\n * \n * @example\n * cc.assetManager.preloadAny('0cbZa5Y71CTZAccaIFluuZ', (err) => cc.assetManager.loadAny('0cbZa5Y71CTZAccaIFluuZ'));\n * \n * @typescript\n * preloadAny(requests: string | string[] | Record | Record[], options: Record, onProgress: (finished: number, total: number, item: cc.AssetManager.RequestItem) => void, onComplete: (err: Error, items: cc.AssetManager.RequestItem[]) => void): void\n * preloadAny(requests: string | string[] | Record | Record[], onProgress: (finished: number, total: number, item: cc.AssetManager.RequestItem) => void, onComplete: (err: Error, items: cc.AssetManager.RequestItem[]) => void): void\n * preloadAny(requests: string | string[] | Record | Record[], options: Record, onComplete: (err: Error, items: cc.AssetManager.RequestItem[]) => void): void\n * preloadAny(requests: string | string[] | Record | Record[], onComplete: (err: Error, items: cc.AssetManager.RequestItem[]) => void): void\n * preloadAny(requests: string | string[] | Record | Record[], options: Record): void\n * preloadAny(requests: string | string[] | Record | Record[]): void\n */\n preloadAny (requests, options, onProgress, onComplete) {\n var { options, onProgress, onComplete } = parseParameters(options, onProgress, onComplete);\n \n options.preset = options.preset || 'preload';\n requests = Array.isArray(requests) ? requests.concat() : requests;\n var task = new Task({input: requests, onProgress, onComplete: asyncify(onComplete), options});\n fetchPipeline.async(task);\n },\n\n /**\n * !#en\n * Load native file of asset, if you check the option 'Async Load Assets', you may need to load native file with this before you use the asset\n * \n * !#zh\n * 加载资源的原生文件,如果你勾选了'延迟加载资源'选项,你可能需要在使用资源之前调用此方法来加载原生文件\n * \n * @method postLoadNative\n * @param {Asset} asset - The asset\n * @param {Object} [options] - Some optional parameters\n * @param {Function} [onComplete] - Callback invoked when finish loading\n * @param {Error} onComplete.err - The error occured in loading process.\n * \n * @example\n * cc.assetManager.postLoadNative(texture, (err) => console.log(err));\n * \n * @typescript\n * postLoadNative(asset: cc.Asset, options: Record, onComplete: (err: Error) => void): void\n * postLoadNative(asset: cc.Asset, onComplete: (err: Error) => void): void\n * postLoadNative(asset: cc.Asset, options: Record): void\n * postLoadNative(asset: cc.Asset): void\n */\n postLoadNative (asset, options, onComplete) {\n if (!(asset instanceof cc.Asset)) throw new Error('input is not asset');\n var { options, onComplete } = parseParameters(options, undefined, onComplete);\n\n if (!asset._native || asset._nativeAsset) {\n return asyncify(onComplete)(null);\n }\n\n var depend = dependUtil.getNativeDep(asset._uuid);\n if (depend) {\n if (!bundles.has(depend.bundle)) {\n var bundle = bundles.find(function (bundle) {\n return bundle.getAssetInfo(asset._uuid);\n });\n if (bundle) {\n depend.bundle = bundle.name;\n }\n }\n \n this.loadAny(depend, options, function (err, native) {\n if (!err) {\n if (asset.isValid && !asset._nativeAsset) {\n asset._nativeAsset = native\n }\n }\n else {\n cc.error(err.message, err.stack);\n }\n onComplete && onComplete(err);\n });\n }\n },\n\n /**\n * !#en\n * Load remote asset with url, such as audio, image, text and so on.\n * \n * !#zh\n * 使用 url 加载远程资源,例如音频,图片,文本等等。\n * \n * @method loadRemote\n * @param {string} url - The url of asset\n * @param {Object} [options] - Some optional parameters\n * @param {cc.AudioClip.LoadMode} [options.audioLoadMode] - Indicate which mode audio you want to load\n * @param {string} [options.ext] - If the url does not have a extension name, you can specify one manually.\n * @param {Function} [onComplete] - Callback invoked when finish loading\n * @param {Error} onComplete.err - The error occured in loading process.\n * @param {Asset} onComplete.asset - The loaded texture\n * \n * @example\n * cc.assetManager.loadRemote('http://www.cloud.com/test1.jpg', (err, texture) => console.log(err));\n * cc.assetManager.loadRemote('http://www.cloud.com/test2.mp3', (err, audioClip) => console.log(err));\n * cc.assetManager.loadRemote('http://www.cloud.com/test3', { ext: '.png' }, (err, texture) => console.log(err));\n * \n * @typescript\n * loadRemote(url: string, options: Record, onComplete: (err: Error, asset: T) => void): void\n * loadRemote(url: string, onComplete: (err: Error, asset: T) => void): void\n * loadRemote(url: string, options: Record): void\n * loadRemote(url: string): void\n */\n loadRemote (url, options, onComplete) {\n var { options, onComplete } = parseParameters(options, undefined, onComplete);\n\n if (this.assets.has(url)) {\n return asyncify(onComplete)(null, this.assets.get(url));\n }\n\n options.__isNative__ = true;\n options.preset = options.preset || 'remote';\n this.loadAny({url}, options, null, function (err, data) {\n if (err) {\n cc.error(err.message, err.stack);\n onComplete && onComplete(err, null);\n }\n else {\n factory.create(url, data, options.ext || cc.path.extname(url), options, function (err, out) {\n onComplete && onComplete(err, out);\n });\n }\n });\n },\n\n /**\n * !#en\n * Load script \n * \n * !#zh\n * 加载脚本\n * \n * @method loadScript\n * @param {string|string[]} url - Url of the script\n * @param {Object} [options] - Some optional paramters\n * @param {boolean} [options.async] - Indicate whether or not loading process should be async\n * @param {Function} [onComplete] - Callback when script loaded or failed\n * @param {Error} onComplete.err - The occurred error, null indicetes success\n * \n * @example\n * loadScript('http://localhost:8080/index.js', null, (err) => console.log(err));\n * \n * @typescript\n * loadScript(url: string|string[], options: Record, onComplete: (err: Error) => void): void\n * loadScript(url: string|string[], onComplete: (err: Error) => void): void\n * loadScript(url: string|string[], options: Record): void\n * loadScript(url: string|string[]): void\n */\n loadScript (url, options, onComplete) {\n var { options, onComplete } = parseParameters(options, undefined, onComplete);\n options.__requestType__ = RequestType.URL;\n options.preset = options.preset || 'script';\n this.loadAny(url, options, onComplete);\n },\n\n /**\n * !#en\n * load bundle\n * \n * !#zh\n * 加载资源包\n * \n * @method loadBundle\n * @param {string} nameOrUrl - The name or root path of bundle\n * @param {Object} [options] - Some optional paramter, same like downloader.downloadFile\n * @param {string} [options.version] - The version of this bundle, you can check config.json in this bundle\n * @param {Function} [onComplete] - Callback when bundle loaded or failed\n * @param {Error} onComplete.err - The occurred error, null indicetes success\n * @param {Bundle} onComplete.bundle - The loaded bundle\n * \n * @example\n * loadBundle('http://localhost:8080/test', null, (err, bundle) => console.log(err));\n * \n * @typescript\n * loadBundle(nameOrUrl: string, options: Record, onComplete: (err: Error, bundle: cc.AssetManager.Bundle) => void): void\n * loadBundle(nameOrUrl: string, onComplete: (err: Error, bundle: cc.AssetManager.Bundle) => void): void\n * loadBundle(nameOrUrl: string, options: Record): void\n * loadBundle(nameOrUrl: string): void\n */\n loadBundle (nameOrUrl, options, onComplete) {\n var { options, onComplete } = parseParameters(options, undefined, onComplete);\n\n let bundleName = cc.path.basename(nameOrUrl);\n\n if (this.bundles.has(bundleName)) {\n return asyncify(onComplete)(null, this.getBundle(bundleName));\n }\n\n options.preset = options.preset || 'bundle';\n options.ext = 'bundle';\n this.loadRemote(nameOrUrl, options, onComplete);\n },\n\n /**\n * !#en\n * Release asset and it's dependencies.\n * This method will not only remove the cache of the asset in assetManager, but also clean up its content.\n * For example, if you release a texture, the texture asset and its gl texture data will be freed up.\n * Notice, this method may cause the texture to be unusable, if there are still other nodes use the same texture, they may turn to black and report gl errors.\n * \n * !#zh\n * 释放资源以及其依赖资源, 这个方法不仅会从 assetManager 中删除资源的缓存引用,还会清理它的资源内容。\n * 比如说,当你释放一个 texture 资源,这个 texture 和它的 gl 贴图数据都会被释放。\n * 注意,这个函数可能会导致资源贴图或资源所依赖的贴图不可用,如果场景中存在节点仍然依赖同样的贴图,它们可能会变黑并报 GL 错误。\n *\n * @method releaseAsset\n * @param {Asset} asset - The asset to be released\n * \n * @example\n * // release a texture which is no longer need\n * cc.assetManager.releaseAsset(texture);\n *\n * @typescript\n * releaseAsset(asset: cc.Asset): void\n */\n releaseAsset (asset) {\n releaseManager.tryRelease(asset, true);\n },\n\n /**\n * !#en \n * Release all unused assets. Refer to {{#crossLink \"AssetManager/releaseAsset:method\"}}{{/crossLink}} for detailed informations.\n * \n * !#zh \n * 释放所有没有用到的资源。详细信息请参考 {{#crossLink \"AssetManager/releaseAsset:method\"}}{{/crossLink}}\n *\n * @method releaseUnusedAssets\n * @private\n * \n * @typescript\n * releaseUnusedAssets(): void\n */\n releaseUnusedAssets () {\n assets.forEach(function (asset) {\n releaseManager.tryRelease(asset);\n });\n },\n\n /**\n * !#en \n * Release all assets. Refer to {{#crossLink \"AssetManager/releaseAsset:method\"}}{{/crossLink}} for detailed informations.\n * \n * !#zh \n * 释放所有资源。详细信息请参考 {{#crossLink \"AssetManager/releaseAsset:method\"}}{{/crossLink}}\n *\n * @method releaseAll\n * \n * @typescript\n * releaseAll(): void\n */\n releaseAll () {\n assets.forEach(function (asset) {\n releaseManager.tryRelease(asset, true);\n });\n },\n\n _transform (input, options) {\n var subTask = Task.create({input, options});\n var urls = [];\n try {\n var result = transformPipeline.sync(subTask);\n for (var i = 0, l = result.length; i < l; i++) {\n var item = result[i];\n var url = item.url;\n item.recycle();\n urls.push(url);\n }\n }\n catch (e) {\n for (var i = 0, l = subTask.output.length; i < l; i++) {\n subTask.output[i].recycle();\n }\n cc.error(e.message, e.stack);\n }\n subTask.recycle();\n return urls.length > 1 ? urls : urls[0];\n }\n};\n\ncc.AssetManager = AssetManager;\n/**\n * @module cc\n */\n/**\n * @property assetManager\n * @type {AssetManager}\n */\ncc.assetManager = new AssetManager();\n\nObject.defineProperty(cc, 'resources', {\n /**\n * !#en\n * cc.resources is a bundle and controls all asset under assets/resources\n * \n * !#zh\n * cc.resources 是一个 bundle,用于管理所有在 assets/resources 下的资源\n * \n * @property resources\n * @readonly\n * @type {AssetManager.Bundle}\n */\n get () {\n return bundles.get(BuiltinBundleName.RESOURCES);\n }\n});\n\n\nmodule.exports = cc.assetManager;\n\n/**\n * !#en\n * This module controls asset's behaviors and information, include loading, releasing etc. \n * All member can be accessed with `cc.assetManager`. All class or enum can be accessed with `cc.AssetManager`\n * \n * !#zh\n * 此模块管理资源的行为和信息,包括加载,释放等,所有成员能够通过 `cc.assetManager` 调用. 所有类型或枚举能通过 `cc.AssetManager` 访问\n * \n * @module cc.AssetManager\n */","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nconst Cache = require('./cache');\nconst releaseManager = require('./releaseManager');\nconst { BuiltinBundleName } = require('./shared'); \n\n/**\n * @module cc.AssetManager\n */\n/**\n * !#en\n * This module contains the builtin asset, it's a singleton, all member can be accessed with `cc.assetManager.builtins` \n * \n * !#zh\n * 此模块包含内建资源,这是一个单例,所有成员能通过 `cc.assetManager.builtins` 访问\n * \n * @class Builtins\n */\nvar builtins = {\n \n _assets: new Cache({ material: new Cache(), effect: new Cache() }), // builtin assets\n\n _loadBuiltins (name, cb) {\n let dirname = name + 's';\n let builtin = this._assets.get(name);\n return cc.assetManager.internal.loadDir(dirname, null, null, (err, assets) => {\n if (err) {\n cc.error(err.message, err.stack);\n }\n else {\n for (let i = 0; i < assets.length; i++) {\n var asset = assets[i];\n builtin.add(asset.name, asset.addRef());\n }\n }\n\n cb();\n });\n },\n\n /**\n * !#en\n * Initialize\n * \n * !#zh\n * 初始化 \n * \n * @method init\n * @param {Function} cb - Callback when finish loading built-in assets\n * \n * @typescript\n * init (cb: () => void): void\n */\n init (cb) {\n this.clear();\n if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS || !cc.assetManager.bundles.has(BuiltinBundleName.INTERNAL)) {\n return cb && cb();\n }\n\n this._loadBuiltins('effect', () => {\n this._loadBuiltins('material', () => {\n this._loadBuiltinsSP(cb);\n });\n });\n },\n\n _loadBuiltinsSP(cb) {\n cc.sp.MAX_MULTITEXTURE_NUM = 8;\n // cc.renderer.device.caps.maxTextureUnits\n\n this._loadMultiEffect('multi-2d-sprite', (effect) => {\n cc.sp.multi2dSpriteEffectAsset = effect;\n effect.addRef();\n cc.sp.inited = true;\n cc.sp.multiBatcher.init();\n if (cc.dynamicAtlasManager.maxAtlasCount === -1) cc.dynamicAtlasManager.maxAtlasCount = Math.max(0, cc.sp.MAX_MULTITEXTURE_NUM - cc.sp.charAtlasAutoBatchCount);\n cb();\n });\n },\n\n _loadMultiEffect(name, cb) {\n if (CC_EDITOR) {\n cc.assetManager.loadAny(Editor.assetdb.remote.urlToUuid('db://service-pack-resources/sp/effects/' + name + '.effect'), function (err, effect) {\n if (err) {\n return Editor.error(err);\n } else {\n cb(effect);\n }\n });\n } else {\n cc.assetManager.loadBundle('sp', (err, bundle) => {\n if (err) {\n cc.error(err);\n } else {\n bundle.load('effects/' + name, cc.EffectAsset, (err, effect) => {\n if (err) {\n cc.error(err);\n } else {\n cb(effect);\n }\n });\n }\n });\n }\n },\n\n /**\n * !#en\n * Get the built-in asset using specific type and name.\n * \n * !#zh\n * 通过特定的类型和名称获取内建资源\n * \n * @method getBuiltin\n * @param {string} [type] - The type of asset, such as `effect`\n * @param {string} [name] - The name of asset, such as `phong`\n * @return {Asset|Cache} Builtin-assets\n * \n * @example\n * cc.assetManaer.builtins.getBuiltin('effect', 'phone');\n * \n * @typescript\n * getBuiltin(type?: string, name?: string): cc.Asset | Cache\n */\n getBuiltin (type, name) {\n if (arguments.length === 0) return this._assets;\n else if (arguments.length === 1) return this._assets.get(type);\n else return this._assets.get(type).get(name);\n },\n\n /**\n * !#en\n * Clear all builtin assets\n * \n * !#zh\n * 清空所有内置资源\n * \n * @method clear\n * \n * @typescript\n * clear(): void\n */\n clear () {\n this._assets.forEach(function (assets) {\n assets.forEach(function (asset) {\n releaseManager.tryRelease(asset, true);\n });\n assets.clear();\n });\n }\n}\n\nmodule.exports = builtins;\n","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nconst Config = require('./config');\nconst releaseManager = require('./releaseManager');\nconst { parseParameters, parseLoadResArgs } = require('./utilities');\nconst { RequestType, assets, bundles } = require('./shared');\n\n/**\n * @module cc.AssetManager\n */\n\n/**\n * !#en\n * A bundle contains an amount of assets(includes scene), you can load, preload, release asset which is in this bundle\n * \n * !#zh\n * 一个包含一定数量资源(包括场景)的包,你可以加载,预加载,释放此包内的资源\n * \n * @class Bundle\n */\nfunction Bundle () {\n this._config = new Config();\n}\n\nBundle.prototype = {\n \n /**\n * !#en\n * Create a bundle\n * \n * !#zh\n * 创建一个 bundle\n * \n * @method constructor\n * \n * @typescript\n * constructor()\n */\n constructor: Bundle,\n\n /**\n * !#en\n * The name of this bundle\n * \n * !#zh\n * 此 bundle 的名称\n * \n * @property name\n * @type {string}\n */\n get name () {\n return this._config.name;\n },\n\n /**\n * !#en\n * The dependency of this bundle\n * \n * !#zh\n * 此 bundle 的依赖\n * \n * @property deps\n * @type {string[]}\n */\n get deps () {\n return this._config.deps;\n },\n\n /**\n * !#en\n * The root path of this bundle, such like 'http://example.com/bundle1'\n * \n * !#zh\n * 此 bundle 的根路径, 例如 'http://example.com/bundle1'\n * \n * @property base\n * @type {string}\n */\n get base () {\n return this._config.base;\n },\n\n /**\n * !#en\n * Get asset's info using path, only valid when asset is in bundle folder.\n * \n * !#zh\n * 使用 path 获取资源的配置信息\n * \n * @method getInfoWithPath\n * @param {string} path - The relative path of asset, such as 'images/a'\n * @param {Function} [type] - The constructor of asset, such as `cc.Texture2D`\n * @returns {Object} The asset info \n * \n * @example\n * var info = bundle.getInfoWithPath('image/a', cc.Texture2D);\n * \n * @typescript\n * getInfoWithPath (path: string, type?: typeof cc.Asset): Record\n */\n getInfoWithPath (path, type) {\n return this._config.getInfoWithPath(path, type);\n },\n\n /**\n * !#en\n * Get all asset's info within specific folder\n * \n * !#zh\n * 获取在某个指定文件夹下的所有资源信息\n * \n * @method getDirWithPath\n * @param {string} path - The relative path of folder, such as 'images'\n * @param {Function} [type] - The constructor should be used to filter paths\n * @param {Array} [out] - The output array\n * @returns {Object[]} Infos\n * \n * @example \n * var infos = [];\n * bundle.getDirWithPath('images', cc.Texture2D, infos);\n * \n * @typescript\n * getDirWithPath (path: string, type: typeof cc.Asset, out: Array>): Array>\n * getDirWithPath (path: string, type: typeof cc.Asset): Array>\n * getDirWithPath (path: string): Array>\n */\n getDirWithPath (path, type, out) {\n return this._config.getDirWithPath(path, type, out);\n },\n\n /**\n * !#en\n * Get asset's info with uuid\n * \n * !#zh\n * 通过 uuid 获取资源信息\n * \n * @method getAssetInfo\n * @param {string} uuid - The asset's uuid\n * @returns {Object} info \n * \n * @example\n * var info = bundle.getAssetInfo('fcmR3XADNLgJ1ByKhqcC5Z');\n * \n * @typescript\n * getAssetInfo (uuid: string): Record\n */\n getAssetInfo (uuid) {\n return this._config.getAssetInfo(uuid);\n },\n\n /**\n * !#en\n * Get scene'info with name\n * \n * !#zh\n * 通过场景名获取场景信息\n * \n * @method getSceneInfo\n * @param {string} name - The name of scene\n * @return {Object} info\n * \n * @example\n * var info = bundle.getSceneInfo('first.fire');\n * \n * @typescript\n * getSceneInfo(name: string): Record\n */\n getSceneInfo (name) {\n return this._config.getSceneInfo(name);\n },\n\n /**\n * !#en\n * Initialize this bundle with options\n * \n * !#zh\n * 初始化此 bundle\n * \n * @method init\n * @param {Object} options \n * \n * @typescript\n * init(options: Record): void\n */\n init (options) {\n this._config.init(options);\n bundles.add(options.name, this);\n },\n\n /**\n * !#en\n * Load the asset within this bundle by the path which is relative to bundle's path\n * \n * !#zh\n * 通过相对路径加载分包中的资源。路径是相对分包文件夹路径的相对路径\n *\n * @method load\n * @param {String|String[]} paths - Paths of the target assets.The path is relative to the bundle's folder, extensions must be omitted.\n * @param {Function} [type] - Only asset of type will be loaded if this argument is supplied.\n * @param {Function} [onProgress] - Callback invoked when progression change.\n * @param {Number} onProgress.finish - The number of the items that are already completed.\n * @param {Number} onProgress.total - The total number of the items.\n * @param {RequestItem} onProgress.item - The finished request item.\n * @param {Function} [onComplete] - Callback invoked when all assets loaded.\n * @param {Error} onComplete.error - The error info or null if loaded successfully.\n * @param {Asset|Asset[]} onComplete.assets - The loaded assets.\n *\n * @example\n * // load the texture (${project}/assets/resources/textures/background.jpg) from resources\n * cc.resources.load('textures/background', cc.Texture2D, (err, texture) => console.log(err));\n * \n * // load the audio (${project}/assets/resources/music/hit.mp3) from resources\n * cc.resources.load('music/hit', cc.AudioClip, (err, audio) => console.log(err));\n * \n * // load the prefab (${project}/assets/bundle1/misc/character/cocos) from bundle1 folder\n * bundle1.load('misc/character/cocos', cc.Prefab, (err, prefab) => console.log(err));\n *\n * // load the sprite frame (${project}/assets/some/xxx/bundle2/imgs/cocos.png) from bundle2 folder\n * bundle2.load('imgs/cocos', cc.SpriteFrame, null, (err, spriteFrame) => console.log(err));\n * \n * @typescript\n * load(paths: string, type: typeof cc.Asset, onProgress: (finish: number, total: number, item: RequestItem) => void, onComplete: (error: Error, assets: T) => void): void\n * load(paths: string[], type: typeof cc.Asset, onProgress: (finish: number, total: number, item: RequestItem) => void, onComplete: (error: Error, assets: Array) => void): void\n * load(paths: string, onProgress: (finish: number, total: number, item: RequestItem) => void, onComplete: (error: Error, assets: T) => void): void\n * load(paths: string[], onProgress: (finish: number, total: number, item: RequestItem) => void, onComplete: (error: Error, assets: Array) => void): void\n * load(paths: string, type: typeof cc.Asset, onComplete?: (error: Error, assets: T) => void): void\n * load(paths: string[], type: typeof cc.Asset, onComplete?: (error: Error, assets: Array) => void): void\n * load(paths: string, onComplete?: (error: Error, assets: T) => void): void\n * load(paths: string[], onComplete?: (error: Error, assets: Array) => void): void\n */\n load (paths, type, onProgress, onComplete) {\n var { type, onProgress, onComplete } = parseLoadResArgs(type, onProgress, onComplete);\n cc.assetManager.loadAny(paths, { __requestType__: RequestType.PATH, type: type, bundle: this.name, __outputAsArray__: Array.isArray(paths) }, onProgress, onComplete);\n },\n\n /**\n * !#en\n * Preload the asset within this bundle by the path which is relative to bundle's path. \n * After calling this method, you still need to finish loading by calling `Bundle.load`.\n * It will be totally fine to call `Bundle.load` at any time even if the preloading is not\n * yet finished\n * \n * !#zh\n * 通过相对路径预加载分包中的资源。路径是相对分包文件夹路径的相对路径。调用完后,你仍然需要通过 `Bundle.load` 来完成加载。\n * 就算预加载还没完成,你也可以直接调用 `Bundle.load`。\n *\n * @method preload\n * @param {String|String[]} paths - Paths of the target asset.The path is relative to bundle folder, extensions must be omitted.\n * @param {Function} [type] - Only asset of type will be loaded if this argument is supplied.\n * @param {Function} [onProgress] - Callback invoked when progression change.\n * @param {Number} onProgress.finish - The number of the items that are already completed.\n * @param {Number} onProgress.total - The total number of the items.\n * @param {RequestItem} onProgress.item - The finished request item.\n * @param {Function} [onComplete] - Callback invoked when the resource loaded.\n * @param {Error} onComplete.error - The error info or null if loaded successfully.\n * @param {RequestItem[]} onComplete.items - The preloaded items.\n * \n * @example\n * // preload the texture (${project}/assets/resources/textures/background.jpg) from resources\n * cc.resources.preload('textures/background', cc.Texture2D);\n * \n * // preload the audio (${project}/assets/resources/music/hit.mp3) from resources\n * cc.resources.preload('music/hit', cc.AudioClip);\n * // wait for while\n * cc.resources.load('music/hit', cc.AudioClip, (err, audioClip) => {});\n * \n * * // preload the prefab (${project}/assets/bundle1/misc/character/cocos) from bundle1 folder\n * bundle1.preload('misc/character/cocos', cc.Prefab);\n *\n * // load the sprite frame of (${project}/assets/bundle2/imgs/cocos.png) from bundle2 folder\n * bundle2.preload('imgs/cocos', cc.SpriteFrame);\n * // wait for while\n * bundle2.load('imgs/cocos', cc.SpriteFrame, (err, spriteFrame) => {});\n * \n * @typescript\n * preload(paths: string|string[], type: typeof cc.Asset, onProgress: (finish: number, total: number, item: RequestItem) => void, onComplete: (error: Error, items: RequestItem[]) => void): void\n * preload(paths: string|string[], onProgress: (finish: number, total: number, item: RequestItem) => void, onComplete: (error: Error, items: RequestItem[]) => void): void\n * preload(paths: string|string[], type: typeof cc.Asset, onComplete: (error: Error, items: RequestItem[]) => void): void\n * preload(paths: string|string[], type: typeof cc.Asset): void\n * preload(paths: string|string[], onComplete: (error: Error, items: RequestItem[]) => void): void\n * preload(paths: string|string[]): void\n */\n preload (paths, type, onProgress, onComplete) {\n var { type, onProgress, onComplete } = parseLoadResArgs(type, onProgress, onComplete);\n cc.assetManager.preloadAny(paths, { __requestType__: RequestType.PATH, type: type, bundle: this.name }, onProgress, onComplete);\n },\n\n /**\n * !#en\n * Load all assets under a folder inside the bundle folder.
\n *
\n * Note: All asset paths in Creator use forward slashes, paths using backslashes will not work.\n * \n * !#zh\n * 加载目标文件夹中的所有资源, 注意:路径中只能使用斜杠,反斜杠将停止工作\n *\n * @method loadDir\n * @param {string} dir - path of the target folder.The path is relative to the bundle folder, extensions must be omitted.\n * @param {Function} [type] - Only asset of type will be loaded if this argument is supplied.\n * @param {Function} [onProgress] - Callback invoked when progression change.\n * @param {Number} onProgress.finish - The number of the items that are already completed.\n * @param {Number} onProgress.total - The total number of the items.\n * @param {Object} onProgress.item - The latest request item\n * @param {Function} [onComplete] - A callback which is called when all assets have been loaded, or an error occurs.\n * @param {Error} onComplete.error - If one of the asset failed, the complete callback is immediately called with the error. If all assets are loaded successfully, error will be null.\n * @param {Asset[]|Asset} onComplete.assets - An array of all loaded assets.\n * \n * @example\n * // load all audios (resources/audios/) \n * cc.resources.loadDir('audios', cc.AudioClip, (err, audios) => {});\n *\n * // load all textures in \"resources/imgs/\"\n * cc.resources.loadDir('imgs', cc.Texture2D, null, function (err, textures) {\n * var texture1 = textures[0];\n * var texture2 = textures[1];\n * });\n * \n * // load all prefabs (${project}/assets/bundle1/misc/characters/) from bundle1 folder\n * bundle1.loadDir('misc/characters', cc.Prefab, (err, prefabs) => console.log(err));\n *\n * // load all sprite frame (${project}/assets/some/xxx/bundle2/skills/) from bundle2 folder\n * bundle2.loadDir('skills', cc.SpriteFrame, null, (err, spriteFrames) => console.log(err));\n *\n * @typescript\n * loadDir(dir: string, type: typeof cc.Asset, onProgress: (finish: number, total: number, item: RequestItem) => void, onComplete: (error: Error, assets: Array) => void): void\n * loadDir(dir: string, onProgress: (finish: number, total: number, item: RequestItem) => void, onComplete: (error: Error, assets: Array) => void): void\n * loadDir(dir: string, type: typeof cc.Asset, onComplete: (error: Error, assets: Array) => void): void\n * loadDir(dir: string, type: typeof cc.Asset): void\n * loadDir(dir: string, onComplete: (error: Error, assets: Array) => void): void\n * loadDir(dir: string): void\n */\n loadDir (dir, type, onProgress, onComplete) {\n var { type, onProgress, onComplete } = parseLoadResArgs(type, onProgress, onComplete);\n cc.assetManager.loadAny(dir, { __requestType__: RequestType.DIR, type: type, bundle: this.name, __outputAsArray__: true }, onProgress, onComplete);\n },\n\n /**\n * !#en\n * Preload all assets under a folder inside the bundle folder.
After calling this method, you still need to finish loading by calling `Bundle.loadDir`.\n * It will be totally fine to call `Bundle.loadDir` at any time even if the preloading is not yet finished\n * \n * !#zh\n * 预加载目标文件夹中的所有资源。调用完后,你仍然需要通过 `Bundle.loadDir` 来完成加载。\n * 就算预加载还没完成,你也可以直接调用 `Bundle.loadDir`。\n *\n * @method preloadDir\n * @param {string} dir - path of the target folder.The path is relative to the bundle folder, extensions must be omitted.\n * @param {Function} [type] - Only asset of type will be preloaded if this argument is supplied.\n * @param {Function} [onProgress] - Callback invoked when progression change.\n * @param {Number} onProgress.finish - The number of the items that are already completed.\n * @param {Number} onProgress.total - The total number of the items.\n * @param {Object} onProgress.item - The latest request item\n * @param {Function} [onComplete] - A callback which is called when all assets have been loaded, or an error occurs.\n * @param {Error} onComplete.error - If one of the asset failed, the complete callback is immediately called with the error. If all assets are preloaded successfully, error will be null.\n * @param {RequestItem[]} onComplete.items - An array of all preloaded items.\n * \n * @example\n * // preload all audios (resources/audios/) \n * cc.resources.preloadDir('audios', cc.AudioClip);\n *\n * // preload all textures in \"resources/imgs/\"\n * cc.resources.preloadDir('imgs', cc.Texture2D);\n * // wait for while\n * cc.resources.loadDir('imgs', cc.Texture2D, (err, textures) => {});\n * \n * // preload all prefabs (${project}/assets/bundle1/misc/characters/) from bundle1 folder\n * bundle1.preloadDir('misc/characters', cc.Prefab);\n *\n * // preload all sprite frame (${project}/assets/some/xxx/bundle2/skills/) from bundle2 folder\n * bundle2.preloadDir('skills', cc.SpriteFrame);\n * // wait for while\n * bundle2.loadDir('skills', cc.SpriteFrame, (err, spriteFrames) => {});\n * \n * @typescript\n * preloadDir(dir: string, type: typeof cc.Asset, onProgress: (finish: number, total: number, item: RequestItem) => void, onComplete: (error: Error, items: RequestItem[]) => void): void\n * preloadDir(dir: string, onProgress: (finish: number, total: number, item: RequestItem) => void, onComplete: (error: Error, items: RequestItem[]) => void): void\n * preloadDir(dir: string, type: typeof cc.Asset, onComplete: (error: Error, items: RequestItem[]) => void): void\n * preloadDir(dir: string, type: typeof cc.Asset): void\n * preloadDir(dir: string, onComplete: (error: Error, items: RequestItem[]) => void): void\n * preloadDir(dir: string): void\n */\n preloadDir (dir, type, onProgress, onComplete) {\n var { type, onProgress, onComplete } = parseLoadResArgs(type, onProgress, onComplete);\n cc.assetManager.preloadAny(dir, { __requestType__: RequestType.DIR, type: type, bundle: this.name }, onProgress, onComplete);\n },\n\n /**\n * !#en \n * Loads the scene within this bundle by its name. \n * \n * !#zh \n * 通过场景名称加载分包中的场景。\n *\n * @method loadScene\n * @param {String} sceneName - The name of the scene to load.\n * @param {Object} [options] - Some optional parameters\n * @param {Function} [onProgress] - Callback invoked when progression change.\n * @param {Number} onProgress.finish - The number of the items that are already completed.\n * @param {Number} onProgress.total - The total number of the items.\n * @param {Object} onProgress.item - The latest request item\n * @param {Function} [onComplete] - callback, will be called after scene launched.\n * @param {Error} onComplete.err - The occurred error, null indicetes success\n * @param {SceneAsset} onComplete.sceneAsset - The scene asset\n * \n * @example\n * bundle1.loadScene('first', (err, sceneAsset) => cc.director.runScene(sceneAsset));\n * \n * @typescript\n * loadScene(sceneName: string, options: Record, onProgress: (finish: number, total: number, item: RequestItem) => void, onComplete: (error: Error, sceneAsset: cc.SceneAsset) => void): void\n * loadScene(sceneName: string, onProgress: (finish: number, total: number, item: RequestItem) => void, onComplete: (error: Error, sceneAsset: cc.SceneAsset) => void): void\n * loadScene(sceneName: string, options: Record, onComplete: (error: Error, sceneAsset: cc.SceneAsset) => void): void\n * loadScene(sceneName: string, onComplete: (error: Error, sceneAsset: cc.SceneAsset) => void): void\n * loadScene(sceneName: string, options: Record): void\n * loadScene(sceneName: string): void\n */\n loadScene (sceneName, options, onProgress, onComplete) {\n var { options, onProgress, onComplete } = parseParameters(options, onProgress, onComplete);\n \n options.preset = options.preset || 'scene';\n options.bundle = this.name;\n cc.assetManager.loadAny({ 'scene': sceneName }, options, onProgress, function (err, sceneAsset) {\n if (err) {\n cc.error(err.message, err.stack);\n onComplete && onComplete(err);\n }\n else if (sceneAsset instanceof cc.SceneAsset) {\n var scene = sceneAsset.scene;\n scene._id = sceneAsset._uuid;\n scene._name = sceneAsset._name;\n onComplete && onComplete(null, sceneAsset);\n }\n else {\n onComplete && onComplete(new Error('The asset ' + sceneAsset._uuid + ' is not a scene'));\n }\n });\n },\n\n /**\n * !#en\n * Preloads the scene within this bundle by its name. After calling this method, you still need to finish loading by calling `Bundle.loadScene` or `cc.director.loadScene`.\n * It will be totally fine to call `Bundle.loadDir` at any time even if the preloading is not yet finished\n * \n * !#zh \n * 通过场景名称预加载分包中的场景.调用完后,你仍然需要通过 `Bundle.loadScene` 或 `cc.director.loadScene` 来完成加载。\n * 就算预加载还没完成,你也可以直接调用 `Bundle.loadScene` 或 `cc.director.loadScene`。\n *\n * @method preloadScene\n * @param {String} sceneName - The name of the scene to preload.\n * @param {Object} [options] - Some optional parameters\n * @param {Function} [onProgress] - callback, will be called when the load progression change.\n * @param {Number} onProgress.finish - The number of the items that are already completed\n * @param {Number} onProgress.total - The total number of the items\n * @param {RequestItem} onProgress.item The latest request item\n * @param {Function} [onComplete] - callback, will be called after scene loaded.\n * @param {Error} onComplete.error - null or the error object.\n * \n * @example\n * bundle1.preloadScene('first');\n * // wait for a while\n * bundle1.loadScene('first', (err, scene) => cc.director.runScene(scene));\n * \n * @typescript\n * preloadScene(sceneName: string, options: Record, onProgress: (finish: number, total: number, item: RequestItem) => void, onComplete: (error: Error) => void): void\n * preloadScene(sceneName: string, onProgress: (finish: number, total: number, item: RequestItem) => void, onComplete: (error: Error) => void): void\n * preloadScene(sceneName: string, options: Record, onComplete: (error: Error) => void): void\n * preloadScene(sceneName: string, onComplete: (error: Error) => void): void\n * preloadScene(sceneName: string, options: Record): void\n * preloadScene(sceneName: string): void\n */\n preloadScene (sceneName, options, onProgress, onComplete) {\n var { options, onProgress, onComplete } = parseParameters(options, onProgress, onComplete);\n\n options.bundle = this.name;\n cc.assetManager.preloadAny({'scene': sceneName}, options, onProgress, function (err) {\n if (err) {\n cc.errorID(1210, sceneName, err.message);\n }\n onComplete && onComplete(err);\n });\n },\n\n /**\n * !#en\n * Get asset within this bundle by path and type.
\n * After you load asset with {{#crossLink \"Bundle/load:method\"}}{{/crossLink}} or {{#crossLink \"Bundle/loadDir:method\"}}{{/crossLink}},\n * you can acquire them by passing the path to this API.\n * \n * !#zh\n * 通过路径与类型获取资源。在你使用 {{#crossLink \"Bundle/load:method\"}}{{/crossLink}} 或者 {{#crossLink \"Bundle/loadDir:method\"}}{{/crossLink}} 之后,\n * 你能通过传路径通过这个 API 获取到这些资源。\n * \n * @method get\n * @param {String} path - The path of asset\n * @param {Function} [type] - Only asset of type will be returned if this argument is supplied.\n * @returns {Asset} \n * \n * @example\n * bundle1.get('music/hit', cc.AudioClip);\n * \n * @typescript\n * get (path: string, type?: typeof cc.Asset): T\n */\n get (path, type) {\n var info = this.getInfoWithPath(path, type);\n return assets.get(info && info.uuid);\n },\n\n /**\n * !#en \n * Release the asset loaded by {{#crossLink \"Bundle/load:method\"}}{{/crossLink}} or {{#crossLink \"Bundle/loadDir:method\"}}{{/crossLink}} and it's dependencies. \n * Refer to {{#crossLink \"AssetManager/releaseAsset:method\"}}{{/crossLink}} for detailed informations.\n * \n * !#zh \n * 释放通过 {{#crossLink \"Bundle/load:method\"}}{{/crossLink}} 或者 {{#crossLink \"Bundle/loadDir:method\"}}{{/crossLink}} 加载的资源。详细信息请参考 {{#crossLink \"AssetManager/releaseAsset:method\"}}{{/crossLink}}\n * \n * @method release\n * @param {String} path - The path of asset\n * @param {Function} [type] - Only asset of type will be released if this argument is supplied.\n * \n * @example\n * // release a texture which is no longer need\n * bundle1.release('misc/character/cocos');\n *\n * @typescript\n * release(path: string, type: typeof cc.Asset): void\n * release(path: string): void\n */\n release (path, type) {\n releaseManager.tryRelease(this.get(path, type), true);\n },\n\n /**\n * !#en \n * Release all unused assets within this bundle. Refer to {{#crossLink \"AssetManager/releaseAll:method\"}}{{/crossLink}} for detailed informations.\n * \n * !#zh \n * 释放此包中的所有没有用到的资源。详细信息请参考 {{#crossLink \"AssetManager/releaseAll:method\"}}{{/crossLink}}\n *\n * @method releaseUnusedAssets\n * @private\n * \n * @example\n * // release all unused asset within bundle1\n * bundle1.releaseUnusedAssets();\n * \n * @typescript\n * releaseUnusedAssets(): void\n */\n releaseUnusedAssets () {\n var self = this;\n assets.forEach(function (asset) {\n let info = self.getAssetInfo(asset._uuid);\n if (info && !info.redirect) {\n releaseManager.tryRelease(asset);\n }\n });\n },\n\n /**\n * !#en \n * Release all assets within this bundle. Refer to {{#crossLink \"AssetManager/releaseAll:method\"}}{{/crossLink}} for detailed informations.\n * \n * !#zh \n * 释放此包中的所有资源。详细信息请参考 {{#crossLink \"AssetManager/releaseAll:method\"}}{{/crossLink}}\n *\n * @method releaseAll\n * \n * @example\n * // release all asset within bundle1\n * bundle1.releaseAll();\n * \n * @typescript\n * releaseAll(): void\n */\n releaseAll () {\n var self = this;\n assets.forEach(function (asset) {\n let info = self.getAssetInfo(asset._uuid);\n if (info && !info.redirect) {\n releaseManager.tryRelease(asset, true);\n }\n });\n },\n\n _destroy () {\n this._config.destroy();\n }\n\n};\n\nmodule.exports = Bundle;","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n/**\n * @module cc.AssetManager\n */\n\nconst js = require('../platform/js');\n/**\n * !#en\n * use to cache something\n * \n * !#zh\n * 用于缓存某些内容\n * \n * @class Cache\n * @typescript Cache\n */\nfunction Cache (map) {\n if (map) {\n this._map = map;\n this._count = Object.keys(map).length;\n }\n else {\n this._map = js.createMap(true);\n this._count = 0;\n }\n}\n\nCache.prototype = {\n \n /**\n * !#en\n * Create a cache\n * \n * !#zh\n * 创建一个 cache\n * \n * @method constructor\n * @param {Object} [map] - An object used to initialize \n * \n * @typescript\n * constructor(map?: Record)\n */\n constructor: Cache,\n\n /**\n * !#en\n * Add Key-Value to cache\n * \n * !#zh\n * 增加键值对到缓存中\n * \n * @method add\n * @param {String} key - The key\n * @param {*} val - The value\n * @returns {*} The value\n * \n * @example\n * var cache = new Cache();\n * cache.add('test', null);\n * \n * @typescript\n * add(key: string, val: T): T\n */\n add (key, val) { \n if (!(key in this._map)) this._count++;\n return this._map[key] = val;\n },\n\n /**\n * !#en\n * Get the cached content by key\n * \n * !#zh\n * 通过 key 获取对应的 value\n * \n * @method get\n * @param {string} key - The key\n * @returns {*} The corresponding content\n * \n * @example\n * var cache = new Cache();\n * var test = cache.get('test');\n * \n * @typescript\n * get(key: string): T\n */\n get (key) {\n return this._map[key];\n },\n\n /**\n * !#en\n * Check whether or not content exists by key\n * \n * !#zh\n * 通过 Key 判断是否存在对应的内容\n * \n * @method has\n * @param {string} key - The key\n * @returns {boolean} True indecates that content of the key exists\n * \n * @example\n * var cache = new Cache();\n * var exist = cache.has('test');\n * \n * @typescript\n * has(key: string): boolean\n */\n has (key) {\n return key in this._map;\n },\n\n /**\n * !#en\n * Remove the cached content by key\n * \n * !#zh\n * 通过 Key 移除对应的内容\n * \n * @method remove\n * @param {string} key - The key\n * @returns {*} The removed content\n * \n * @example\n * var cache = new Cache();\n * var content = cache.remove('test');\n * \n * @typescript\n * remove(key: string): T\n */\n remove (key) {\n var out = this._map[key];\n if (key in this._map) {\n delete this._map[key];\n this._count--;\n }\n return out;\n },\n\n /**\n * !#en\n * Clear all content\n * \n * !#zh\n * 清除所有内容\n * \n * @method clear\n * \n * @example\n * var cache = new Cache();\n * cache.clear();\n * \n * @typescript\n * clear():void\n */\n clear () {\n if (this._count !== 0) {\n this._map = js.createMap(true);\n this._count = 0;\n }\n },\n\n /**\n * !#en\n * Enumerate all content and invoke function\n * \n * !#zh\n * 枚举所有内容并执行方法\n * \n * @method forEach\n * @param {Function} func - Function to be invoked\n * @param {*} func.val - The value \n * @param {String} func.key - The corresponding key\n * \n * @example\n * var cache = new Cache();\n * cache.forEach((val, key) => console.log(key));\n * \n * @typescript\n * forEach(func: (val: T, key: string) => void): void\n */\n forEach (func) {\n for (var key in this._map) {\n func(this._map[key], key);\n }\n },\n\n /**\n * !#en\n * Enumerate all content to find one element which can fulfill condition\n * \n * !#zh\n * 枚举所有内容,找到一个可以满足条件的元素\n * \n * @method find\n * @param {Function} predicate - The condition\n * @returns {*} content\n * \n * @example\n * var cache = new Cache();\n * var val = cache.find((val, key) => key === 'test');\n * \n * @typescript\n * find(predicate: (val: T, key: string) => boolean): T\n */\n find (predicate) {\n for (var key in this._map) {\n if (predicate(this._map[key], key)) return this._map[key];\n }\n return null;\n },\n\n /**\n * !#en\n * The count of cached content\n * \n * !#zh\n * 缓存数量\n * \n * @property count\n * @type {Number}\n */\n get count () {\n return this._count;\n },\n\n /**\n * !#en\n * Destroy this cache\n * \n * !#zh\n * 销毁这个 cache\n * \n * @method destroy\n * \n * @typescript\n * destroy(): void\n */\n destroy () {\n this._map = null;\n }\n};\n\nmodule.exports = Cache;","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nconst js = require('../platform/js');\nconst Cache = require('./cache');\nconst { normalize } = require('./helper');\nconst { processOptions } = require('./utilities');\n\nfunction Config () {\n\n this.name = '';\n\n this.base = '';\n\n this.importBase = '';\n\n this.nativeBase = '';\n\n this.deps = null;\n\n this.assetInfos = new Cache();\n\n this.scenes = new Cache();\n\n this.paths = new Cache();\n}\n\nConfig.prototype = {\n\n constructor: Config,\n\n init: function (options) {\n processOptions(options);\n\n this.importBase = options.importBase || '';\n this.nativeBase = options.nativeBase || '';\n this.base = options.base || '';\n this.name = options.name || '';\n this.deps = options.deps || [];\n // init\n this._initUuid(options.uuids);\n this._initPath(options.paths);\n this._initScene(options.scenes);\n this._initPackage(options.packs);\n this._initVersion(options.versions);\n this._initRedirect(options.redirect);\n },\n\n _initUuid: function (uuidList) {\n if (!uuidList) return;\n this.assetInfos.clear();\n for (var i = 0, l = uuidList.length; i < l; i++) {\n var uuid = uuidList[i];\n this.assetInfos.add(uuid, {uuid});\n }\n },\n\n _initPath: function (pathList) {\n if (!pathList) return;\n var paths = this.paths;\n paths.clear();\n for (var uuid in pathList) {\n var info = pathList[uuid];\n var path = info[0];\n var type = info[1];\n var isSubAsset = info.length === 3;\n\n var assetInfo = this.assetInfos.get(uuid);\n assetInfo.path = path;\n assetInfo.ctor = js._getClassById(type);\n if (paths.has(path)) {\n if (isSubAsset) {\n paths.get(path).push(assetInfo);\n }\n else {\n paths.get(path).splice(0, 0, assetInfo);\n } \n }\n else {\n paths.add(path, [assetInfo]);\n }\n }\n },\n\n _initScene: function (sceneList) {\n if (!sceneList) return;\n var scenes = this.scenes;\n scenes.clear();\n var assetInfos = this.assetInfos;\n for (var sceneName in sceneList) {\n var uuid = sceneList[sceneName];\n var assetInfo = assetInfos.get(uuid);\n assetInfo.url = sceneName;\n scenes.add(sceneName, assetInfo);\n }\n },\n\n _initPackage: function (packageList) {\n if (!packageList) return;\n var assetInfos = this.assetInfos;\n for (var packUuid in packageList) {\n var uuids = packageList[packUuid];\n var pack = {uuid: packUuid, packs: uuids, ext:'.json'};\n assetInfos.add(packUuid, pack);\n\n for (var i = 0, l = uuids.length; i < l; i++) {\n var uuid = uuids[i];\n var assetInfo = assetInfos.get(uuid);\n var assetPacks = assetInfo.packs;\n if (assetPacks) {\n if (l === 1) {\n assetPacks.splice(0, 0, pack);\n }\n else {\n assetPacks.push(pack);\n }\n }\n else {\n assetInfo.packs = [pack];\n }\n }\n }\n },\n\n _initVersion: function (versions) {\n if (!versions) return;\n var assetInfos = this.assetInfos;\n var entries = versions.import;\n if (entries) {\n for (var i = 0, l = entries.length; i < l; i += 2) {\n var uuid = entries[i];\n var assetInfo = assetInfos.get(uuid);\n assetInfo.ver = entries[i + 1];\n }\n }\n entries = versions.native;\n if (entries) {\n for (var i = 0, l = entries.length; i < l; i += 2) {\n var uuid = entries[i];\n var assetInfo = assetInfos.get(uuid);\n assetInfo.nativeVer = entries[i + 1];\n }\n }\n },\n\n _initRedirect: function (redirect) {\n if (!redirect) return;\n var assetInfos = this.assetInfos;\n for (var i = 0, l = redirect.length; i < l; i += 2) {\n var uuid = redirect[i];\n var assetInfo = assetInfos.get(uuid);\n assetInfo.redirect = redirect[i + 1];\n }\n },\n\n getInfoWithPath: function (path, type) {\n\n if (!path) {\n return null;\n }\n path = normalize(path);\n var items = this.paths.get(path);\n if (items) {\n if (type) {\n for (var i = 0, l = items.length; i < l; i++) {\n var assetInfo = items[i];\n if (js.isChildClassOf(assetInfo.ctor, type)) {\n return assetInfo;\n }\n }\n }\n else {\n return items[0];\n }\n }\n return null;\n },\n\n getDirWithPath: function (path, type, out) {\n path = normalize(path);\n if (path[path.length - 1] === '/') {\n path = path.slice(0, -1);\n }\n\n var infos = out || [];\n function isMatchByWord (path, test) {\n if (path.length > test.length) {\n var nextAscii = path.charCodeAt(test.length);\n return nextAscii === 47; // '/'\n }\n return true;\n }\n this.paths.forEach(function (items, p) {\n if ((p.startsWith(path) && isMatchByWord(p, path)) || !path) {\n for (var i = 0, l = items.length; i < l; i++) {\n var entry = items[i];\n if (!type || js.isChildClassOf(entry.ctor, type)) {\n infos.push(entry);\n }\n }\n }\n });\n\n return infos;\n },\n\n getAssetInfo: function (uuid) {\n return this.assetInfos.get(uuid);\n },\n\n getSceneInfo: function (name) {\n if (!name.endsWith('.fire')) {\n name += '.fire';\n }\n if (name[0] !== '/' && !name.startsWith('db://')) {\n name = '/' + name; // 使用全名匹配\n }\n // search scene\n var info = this.scenes.find(function (val, key) {\n return key.endsWith(name);\n });\n return info;\n },\n\n destroy: function () {\n this.paths.destroy();\n this.scenes.destroy();\n this.assetInfos.destroy();\n }\n};\n\nif (CC_TEST) {\n cc._Test.Config = Config;\n}\n\nmodule.exports = Config;","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nconst Cache = require('./cache');\nconst deserialize = require('./deserialize');\nconst { files, parsed } = require('./shared');\nimport { hasNativeDep , getDependUuidList } from '../platform/deserialize-compiled';\nimport deserializeForCompiled from '../platform/deserialize-compiled';\n\n/**\n * @module cc.AssetManager\n */\n/**\n * !#en\n * Control asset's dependency list, it is a singleton. All member can be accessed with `cc.assetManager.dependUtil`\n * \n * !#zh\n * 控制资源的依赖列表,这是一个单例, 所有成员能通过 `cc.assetManager.dependUtil` 访问\n * \n * @class DependUtil\n */\nvar dependUtil = {\n _depends: new Cache(),\n\n init () {\n this._depends.clear();\n },\n\n /**\n * !#en\n * Get asset's native dependency. For example, Texture's native dependency is image.\n * \n * !#zh\n * 获取资源的原生依赖,例如 Texture 的原生依赖是图片\n * \n * @method getNativeDep\n * @param {string} uuid - asset's uuid\n * @returns {Object} native dependency\n * \n * @example\n * var dep = dependUtil.getNativeDep('fcmR3XADNLgJ1ByKhqcC5Z');\n * \n * @typescript\n * getNativeDep(uuid: string): Record\n */\n getNativeDep (uuid) {\n let depend = this._depends.get(uuid);\n if (depend) return depend.nativeDep && Object.assign({}, depend.nativeDep);\n return null;\n },\n\n /**\n * !#en\n * Get asset's direct referencing non-native dependency list. For example, Material's non-native dependencies are Texture.\n * \n * !#zh\n * 获取资源直接引用的非原生依赖列表,例如,材质的非原生依赖是 Texture\n * \n * @method getDeps\n * @param {string} uuid - asset's uuid\n * @returns {string[]} direct referencing non-native dependency list\n * \n * @example\n * var deps = dependUtil.getDeps('fcmR3XADNLgJ1ByKhqcC5Z');\n * \n * @typescript\n * getDeps(uuid: string): string[]\n */\n getDeps (uuid) {\n if (this._depends.has(uuid)) {\n return this._depends.get(uuid).deps;\n }\n return [];\n },\n \n /**\n * !#en\n * Get non-native dependency list of the loaded asset, include indirect reference.\n * The returned array stores the dependencies with their uuid, after retrieve dependencies,\n * \n * !#zh\n * 获取某个已经加载好的资源的所有非原生依赖资源列表,包括间接引用的资源,并保存在数组中返回。\n * 返回的数组将仅保存依赖资源的 uuid。\n *\n * @method getDependsRecursively\n * @param {String} uuid - The asset's uuid\n * @returns {string[]} non-native dependency list\n * \n * @example\n * var deps = dependUtil.getDepsRecursively('fcmR3XADNLgJ1ByKhqcC5Z');\n * \n * @typescript\n * getDepsRecursively(uuid: string): string[]\n */\n getDepsRecursively (uuid) {\n var exclude = Object.create(null), depends = [];\n this._descend(uuid, exclude, depends);\n return depends;\n },\n\n _descend (uuid, exclude, depends) {\n var deps = this.getDeps(uuid);\n for (var i = 0; i < deps.length; i++) {\n var depend = deps[i];\n if ( !exclude[depend] ) {\n exclude[depend] = true;\n depends.push(depend);\n this._descend(depend, exclude, depends);\n }\n }\n },\n\n remove (uuid) {\n this._depends.remove(uuid);\n },\n \n /**\n * !#en\n * Extract dependency list from serialized data or asset and then store in cache.\n * \n * !#zh\n * 从序列化数据或资源中提取出依赖列表,并且存储在缓存中。\n * \n * @param {string} uuid - The uuid of serialized data or asset\n * @param {Object} json - Serialized data or asset\n * @returns {Object} dependency list, include non-native and native dependency\n * \n * @example\n * downloader.downloadFile('test.json', {responseType: 'json'}, null, (err, file) => {\n * var dependencies = parse('fcmR3XADNLgJ1ByKhqcC5Z', file);\n * });\n * \n * @typescript\n * parse(uuid: string, json: any): { deps?: string[], nativeDep?: any }\n */\n parse (uuid, json) {\n var out = null;\n if (Array.isArray(json) || json.__type__) {\n\n if (out = this._depends.get(uuid)) return out;\n\n if (Array.isArray(json) && (!(CC_BUILD || deserializeForCompiled.isCompiledJson(json)) || !hasNativeDep(json))) {\n out = {\n deps: this._parseDepsFromJson(json),\n };\n }\n else {\n try {\n var asset = deserialize(json);\n out = this._parseDepsFromAsset(asset);\n out.nativeDep && (out.nativeDep.uuid = uuid);\n parsed.add(uuid + '@import', asset);\n }\n catch (e) {\n files.remove(uuid + '@import');\n out = { deps: [] };\n }\n }\n }\n // get deps from an existing asset \n else {\n if (!CC_EDITOR && (out = this._depends.get(uuid)) && out.parsedFromExistAsset) return out;\n out = this._parseDepsFromAsset(json);\n }\n // cache dependency list\n this._depends.add(uuid, out);\n return out;\n },\n\n _parseDepsFromAsset: function (asset) {\n var out = {\n deps: [],\n parsedFromExistAsset: true,\n preventPreloadNativeObject: asset.constructor.preventPreloadNativeObject,\n preventDeferredLoadDependents: asset.constructor.preventDeferredLoadDependents\n };\n let deps = asset.__depends__;\n for (var i = 0, l = deps.length; i < l; i++) {\n var dep = deps[i].uuid;\n out.deps.push(dep);\n }\n \n if (asset.__nativeDepend__) {\n out.nativeDep = asset._nativeDep;\n }\n\n return out;\n },\n\n _parseDepsFromJson: CC_EDITOR || CC_PREVIEW ? function (json) {\n\n if (deserializeForCompiled.isCompiledJson(json)) {\n let depends = getDependUuidList(json);\n depends.forEach((uuid, index) => depends[index] = cc.assetManager.utils.decodeUuid(uuid));\n return depends;\n }\n \n var depends = [];\n function parseDependRecursively (data, out) {\n if (!data || typeof data !== 'object' || data.__id__) return;\n var uuid = data.__uuid__;\n if (Array.isArray(data)) {\n for (let i = 0, l = data.length; i < l; i++) {\n parseDependRecursively(data[i], out);\n }\n }\n else if (uuid) { \n out.push(cc.assetManager.utils.decodeUuid(uuid));\n }\n else {\n for (var prop in data) {\n parseDependRecursively(data[prop], out);\n }\n }\n }\n parseDependRecursively(json, depends);\n return depends;\n } : function (json) {\n let depends = getDependUuidList(json);\n depends.forEach((uuid, index) => depends[index] = cc.assetManager.utils.decodeUuid(uuid));\n return depends;\n }\n};\n\nmodule.exports = dependUtil;","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst js = require('../platform/js');\nrequire('../CCDirector');\nconst utilities = require('./utilities');\nconst dependUtil = require('./depend-util');\nconst releaseManager = require('./releaseManager');\nconst downloader = require('./downloader');\nconst factory = require('./factory');\nconst helper = require('./helper');\n\nconst ImageFmts = ['.png', '.jpg', '.bmp', '.jpeg', '.gif', '.ico', '.tiff', '.webp', '.image', '.pvr', '.pkm'];\nconst AudioFmts = ['.mp3', '.ogg', '.wav', '.m4a'];\n\nfunction GetTrue () { return true; }\n\nconst md5Pipe = {\n transformURL (url) {\n let uuid = helper.getUuidFromURL(url);\n if (!uuid) { return url; }\n let bundle = cc.assetManager.bundles.find((b) => {\n return !!b.getAssetInfo(uuid);\n });\n if (!bundle) { return url; }\n let hashValue = '';\n let info = bundle.getAssetInfo(uuid);\n if (url.startsWith(bundle.base + bundle._config.nativeBase)) {\n hashValue = info.nativeVer || '';\n }\n else {\n hashValue = info.ver || '';\n }\n if (!hashValue || url.indexOf(hashValue) !== -1) { return url; }\n let hashPatchInFolder = false;\n if (cc.path.extname(url) === '.ttf') {\n hashPatchInFolder = true;\n }\n if (hashPatchInFolder) {\n let dirname = cc.path.dirname(url);\n let basename = cc.path.basename(url);\n url = `${dirname}.${hashValue}/${basename}`;\n } else {\n url = url.replace(/.*[/\\\\][0-9a-fA-F]{2}[/\\\\]([0-9a-fA-F-]{8,})/, (match, uuid) => {\n return match + '.' + hashValue;\n });\n }\n \n return url;\n },\n};\n\n/**\n * `cc.loader` is deprecated, please backup your project and upgrade to {{#crossLink \"AssetManager\"}}{{/crossLink}}\n *\n * @class loader\n * @static\n * @deprecated cc.loader is deprecated, please backup your project and upgrade to cc.assetManager\n */\nconst loader = {\n /**\n * `cc.loader.onProgress` is deprecated, please transfer onProgress to API as a parameter\n * @property onProgress\n * @deprecated cc.loader.onProgress is deprecated, please transfer onProgress to API as a parameter\n */\n onProgress: null,\n _autoReleaseSetting: Object.create(null),\n\n get _cache () {\n return cc.assetManager.assets._map;\n },\n\n /**\n * `cc.loader.load` is deprecated, please use {{#crossLink \"AssetManager/loadAny:method\"}}{{/crossLink}} instead\n *\n * @deprecated cc.loader.load is deprecated, please use cc.assetManager.loadAny instead\n *\n * @method load\n * @param {String|String[]|Object} resources - Url list in an array\n * @param {Function} [progressCallback] - Callback invoked when progression change\n * @param {Number} progressCallback.completedCount - The number of the items that are already completed\n * @param {Number} progressCallback.totalCount - The total number of the items\n * @param {Object} progressCallback.item - The latest item which flow out the pipeline\n * @param {Function} [completeCallback] - Callback invoked when all resources loaded\n * @typescript\n * load(resources: string|string[]|{uuid?: string, url?: string, type?: string}, completeCallback?: Function): void\n * load(resources: string|string[]|{uuid?: string, url?: string, type?: string}, progressCallback: (completedCount: number, totalCount: number, item: any) => void, completeCallback: Function|null): void\n */\n load (resources, progressCallback, completeCallback) {\n if (completeCallback === undefined) {\n if (progressCallback !== undefined) {\n completeCallback = progressCallback;\n progressCallback = null;\n }\n }\n resources = Array.isArray(resources) ? resources : [resources];\n for (var i = 0; i < resources.length; i++) {\n var item = resources[i];\n if (typeof item === 'string') {\n resources[i] = { url: item, __isNative__: true};\n }\n else {\n if (item.type) {\n item.ext = '.' + item.type;\n item.type = undefined;\n }\n\n if (item.url) {\n item.__isNative__ = true;\n }\n }\n }\n var images = [];\n var audios = [];\n cc.assetManager.loadAny(resources, null, (finish, total, item) => {\n if (item.content) {\n if (ImageFmts.includes(item.ext)) {\n images.push(item.content);\n }\n else if (AudioFmts.includes(item.ext)) {\n audios.push(item.content);\n }\n }\n progressCallback && progressCallback(finish, total, item);\n }, (err, native) => {\n var res = null;\n if (!err) {\n native = Array.isArray(native) ? native : [native];\n for (var i = 0; i < native.length; i++) {\n var item = native[i];\n if (!(item instanceof cc.Asset)) {\n var asset = item;\n var url = resources[i].url;\n if (images.includes(asset)) {\n factory.create(url, item, '.png', null, (err, image) => {\n asset = native[i] = image;\n });\n }\n else if (audios.includes(asset)) {\n factory.create(url, item, '.mp3', null, (err, audio) => {\n asset = native[i] = audio;\n });\n }\n cc.assetManager.assets.add(url, asset);\n }\n }\n if (native.length > 1) {\n var map = Object.create(null);\n native.forEach(function (asset) {\n map[asset._uuid] = asset;\n });\n res = { isCompleted: GetTrue, _map: map };\n }\n else {\n res = native[0];\n }\n }\n completeCallback && completeCallback(err, res);\n });\n },\n\n /**\n * `cc.loader.getXMLHttpRequest` is deprecated, please use `XMLHttpRequest` directly\n *\n * @method getXMLHttpRequest\n * @deprecated cc.loader.getXMLHttpRequest is deprecated, please use XMLHttpRequest directly\n * @returns {XMLHttpRequest}\n */\n getXMLHttpRequest () {\n return new XMLHttpRequest();\n },\n\n _parseLoadResArgs: utilities.parseLoadResArgs,\n\n /**\n * `cc.loader.getItem` is deprecated, please use `cc.assetManager.asset.get` instead\n *\n * @method getItem\n * @param {Object} id The id of the item\n * @return {Object}\n * @deprecated cc.loader.getItem is deprecated, please use cc.assetManager.assets.get instead\n */\n getItem (key) {\n return cc.assetManager.assets.has(key) ? { content: cc.assetManager.assets.get(key) } : null;\n },\n\n /**\n * `cc.loader.loadRes` is deprecated, please use {{#crossLink \"Bundle/load:method\"}}{{/crossLink}} instead\n *\n * @deprecated cc.loader.loadRes is deprecated, please use cc.resources.load instead\n * @method loadRes\n * @param {String} url - Url of the target resource.\n * The url is relative to the \"resources\" folder, extensions must be omitted.\n * @param {Function} [type] - Only asset of type will be loaded if this argument is supplied.\n * @param {Function} [progressCallback] - Callback invoked when progression change.\n * @param {Number} progressCallback.completedCount - The number of the items that are already completed.\n * @param {Number} progressCallback.totalCount - The total number of the items.\n * @param {Object} progressCallback.item - The latest item which flow out the pipeline.\n * @param {Function} [completeCallback] - Callback invoked when the resource loaded.\n * @param {Error} completeCallback.error - The error info or null if loaded successfully.\n * @param {Object} completeCallback.resource - The loaded resource if it can be found otherwise returns null.\n *\n * @typescript\n * loadRes(url: string, type: typeof cc.Asset, progressCallback: (completedCount: number, totalCount: number, item: any) => void, completeCallback: ((error: Error, resource: any) => void)|null): void\n * loadRes(url: string, type: typeof cc.Asset, completeCallback: (error: Error, resource: any) => void): void\n * loadRes(url: string, type: typeof cc.Asset): void\n * loadRes(url: string, progressCallback: (completedCount: number, totalCount: number, item: any) => void, completeCallback: ((error: Error, resource: any) => void)|null): void\n * loadRes(url: string, completeCallback: (error: Error, resource: any) => void): void\n * loadRes(url: string): void\n */\n loadRes (url, type, progressCallback, completeCallback) {\n var { type, onProgress, onComplete } = this._parseLoadResArgs(type, progressCallback, completeCallback);\n var extname = cc.path.extname(url);\n if (extname) {\n // strip extname\n url = url.slice(0, - extname.length);\n }\n cc.resources.load(url, type, onProgress, onComplete);\n },\n\n /**\n * `cc.loader.loadResArray` is deprecated, please use {{#crossLink \"Bundle/load:method\"}}{{/crossLink}} instead\n *\n * @deprecated cc.loader.loadResArray is deprecated, please use cc.resources.load instead\n * @method loadResArray\n * @param {String[]} urls - Array of URLs of the target resource.\n * The url is relative to the \"resources\" folder, extensions must be omitted.\n * @param {Function} [type] - Only asset of type will be loaded if this argument is supplied.\n * @param {Function} [progressCallback] - Callback invoked when progression change.\n * @param {Number} progressCallback.completedCount - The number of the items that are already completed.\n * @param {Number} progressCallback.totalCount - The total number of the items.\n * @param {Object} progressCallback.item - The latest item which flow out the pipeline.\n * @param {Function} [completeCallback] - A callback which is called when all assets have been loaded, or an error occurs.\n * @param {Error} completeCallback.error - If one of the asset failed, the complete callback is immediately called\n * with the error. If all assets are loaded successfully, error will be null.\n * @param {Asset[]|Array} completeCallback.assets - An array of all loaded assets.\n * If nothing to load, assets will be an empty array.\n * @typescript\n * loadResArray(url: string[], type: typeof cc.Asset, progressCallback: (completedCount: number, totalCount: number, item: any) => void, completeCallback: ((error: Error, resource: any[]) => void)|null): void\n * loadResArray(url: string[], type: typeof cc.Asset, completeCallback: (error: Error, resource: any[]) => void): void\n * loadResArray(url: string[], type: typeof cc.Asset): void\n * loadResArray(url: string[], progressCallback: (completedCount: number, totalCount: number, item: any) => void, completeCallback: ((error: Error, resource: any[]) => void)|null): void\n * loadResArray(url: string[], completeCallback: (error: Error, resource: any[]) => void): void\n * loadResArray(url: string[]): void\n * loadResArray(url: string[], type: typeof cc.Asset[]): void\n */\n loadResArray (urls, type, progressCallback, completeCallback) {\n var { type, onProgress, onComplete } = this._parseLoadResArgs(type, progressCallback, completeCallback);\n urls.forEach((url, i) => {\n var extname = cc.path.extname(url);\n if (extname) {\n // strip extname\n urls[i] = url.slice(0, - extname.length);\n }\n })\n cc.resources.load(urls, type, onProgress, onComplete);\n },\n\n /**\n * `cc.loader.loadResDir` is deprecated, please use {{#crossLink \"Bundle/loadDir:method\"}}{{/crossLink}} instead\n *\n * @deprecated cc.loader.loadResDir is deprecated, please use cc.resources.loadDir instead\n * @method loadResDir\n * @param {String} url - Url of the target folder.\n * The url is relative to the \"resources\" folder, extensions must be omitted.\n * @param {Function} [type] - Only asset of type will be loaded if this argument is supplied.\n * @param {Function} [progressCallback] - Callback invoked when progression change.\n * @param {Number} progressCallback.completedCount - The number of the items that are already completed.\n * @param {Number} progressCallback.totalCount - The total number of the items.\n * @param {Object} progressCallback.item - The latest item which flow out the pipeline.\n * @param {Function} [completeCallback] - A callback which is called when all assets have been loaded, or an error occurs.\n * @param {Error} completeCallback.error - If one of the asset failed, the complete callback is immediately called\n * with the error. If all assets are loaded successfully, error will be null.\n * @param {Asset[]|Array} completeCallback.assets - An array of all loaded assets.\n * If nothing to load, assets will be an empty array.\n * @param {String[]} completeCallback.urls - An array that lists all the URLs of loaded assets.\n *\n * @typescript\n * loadResDir(url: string, type: typeof cc.Asset, progressCallback: (completedCount: number, totalCount: number, item: any) => void, completeCallback: ((error: Error, resource: any[], urls: string[]) => void)|null): void\n * loadResDir(url: string, type: typeof cc.Asset, completeCallback: (error: Error, resource: any[], urls: string[]) => void): void\n * loadResDir(url: string, type: typeof cc.Asset): void\n * loadResDir(url: string, progressCallback: (completedCount: number, totalCount: number, item: any) => void, completeCallback: ((error: Error, resource: any[], urls: string[]) => void)|null): void\n * loadResDir(url: string, completeCallback: (error: Error, resource: any[], urls: string[]) => void): void\n * loadResDir(url: string): void\n */\n loadResDir (url, type, progressCallback, completeCallback) {\n var { type, onProgress, onComplete } = this._parseLoadResArgs(type, progressCallback, completeCallback);\n cc.resources.loadDir(url, type, onProgress, function (err, assets) {\n var urls = [];\n if (!err) {\n var infos = cc.resources.getDirWithPath(url, type);\n urls = infos.map(function (info) {\n return info.path;\n });\n }\n onComplete && onComplete(err, assets, urls);\n });\n },\n\n /**\n * `cc.loader.getRes` is deprecated, please use {{#crossLink \"Bundle/get:method\"}}{{/crossLink}} instead\n *\n * @method getRes\n * @param {String} url\n * @param {Function} [type] - Only asset of type will be returned if this argument is supplied.\n * @returns {*}\n * @deprecated cc.loader.getRes is deprecated, please use cc.resources.get instead\n */\n getRes (url, type) {\n return cc.assetManager.assets.has(url) ? cc.assetManager.assets.get(url) : cc.resources.get(url, type);\n },\n\n getResCount () {\n return cc.assetManager.assets.count;\n },\n\n /**\n * `cc.loader.getDependsRecursively` is deprecated, please use use {{#crossLink \"DependUtil/getDepsRecursively:method\"}}{{/crossLink}} instead\n *\n * @deprecated cc.loader.getDependsRecursively is deprecated, please use use cc.assetManager.dependUtil.getDepsRecursively instead\n * @method getDependsRecursively\n * @param {Asset|String} owner - The owner asset or the resource url or the asset's uuid\n * @returns {Array}\n */\n getDependsRecursively (owner) {\n if (!owner) return [];\n return dependUtil.getDepsRecursively(typeof owner === 'string' ? owner : owner._uuid).concat([ owner._uuid ]);\n },\n\n /**\n * `cc.loader.assetLoader` was removed, assetLoader and md5Pipe were merged into {{#crossLink \"AssetManager/transformPipeline:property\"}}{{/crossLink}}\n *\n * @property assetLoader\n * @deprecated cc.loader.assetLoader was removed, assetLoader and md5Pipe were merged into cc.assetManager.transformPipeline\n * @type {Object}\n */\n get assetLoader () {\n if (CC_DEBUG) {\n cc.error('cc.loader.assetLoader was removed, assetLoader and md5Pipe were merged into cc.assetManager.transformPipeline');\n }\n },\n\n /**\n * `cc.loader.md5Pipe` is deprecated, assetLoader and md5Pipe were merged into {{#crossLink \"AssetManager/transformPipeline:property\"}}{{/crossLink}}\n *\n * @property md5Pipe\n * @deprecated cc.loader.md5Pipe is deprecated, assetLoader and md5Pipe were merged into cc.assetManager.transformPipeline\n * @type {Object}\n */\n get md5Pipe () {\n return md5Pipe;\n },\n\n /**\n * `cc.loader.downloader` is deprecated, please use {{#crossLink \"AssetManager/downloader:property\"}}{{/crossLink}} instead\n *\n * @deprecated cc.loader.downloader is deprecated, please use cc.assetManager.downloader instead\n * @property downloader\n * @type {Object}\n */\n get downloader () {\n return cc.assetManager.downloader;\n },\n\n /**\n * `cc.loader.loader` is deprecated, please use {{#crossLink \"AssetManager/parser:property\"}}{{/crossLink}} instead\n *\n * @property loader\n * @type {Object}\n * @deprecated cc.loader.loader is deprecated, please use cc.assetManager.parser instead\n */\n get loader () {\n return cc.assetManager.parser;\n },\n\n /**\n * `cc.loader.addDownloadHandlers` is deprecated, please use `cc.assetManager.downloader.register` instead\n *\n * @method addDownloadHandlers\n * @param {Object} extMap Custom supported types with corresponded handler\n * @deprecated cc.loader.addDownloadHandlers is deprecated, please use cc.assetManager.downloader.register instead\n */\n addDownloadHandlers (extMap) {\n if (CC_DEBUG) {\n cc.warn('`cc.loader.addDownloadHandlers` is deprecated, please use `cc.assetManager.downloader.register` instead');\n }\n var handler = Object.create(null);\n for (var type in extMap) {\n var func = extMap[type];\n handler['.' + type] = function (url, options, onComplete) {\n func({url}, onComplete);\n };\n }\n cc.assetManager.downloader.register(handler);\n },\n\n /**\n * `cc.loader.addLoadHandlers` is deprecated, please use `cc.assetManager.parser.register` instead\n *\n * @method addLoadHandlers\n * @param {Object} extMap Custom supported types with corresponded handler\n * @deprecated cc.loader.addLoadHandlers is deprecated, please use cc.assetManager.parser.register instead\n */\n addLoadHandlers (extMap) {\n if (CC_DEBUG) {\n cc.warn('`cc.loader.addLoadHandlers` is deprecated, please use `cc.assetManager.parser.register` instead');\n }\n var handler = Object.create(null);\n for (var type in extMap) {\n var func = extMap[type];\n handler['.' + type] = function (file, options, onComplete) {\n func({content: file}, onComplete);\n };\n }\n cc.assetManager.parser.register(handler);\n },\n\n flowInDeps () {\n if (CC_DEBUG) {\n cc.error('cc.loader.flowInDeps was removed');\n }\n },\n\n /**\n * `cc.loader.release` is deprecated, please use {{#crossLink \"AssetManager/releaseAsset:method\"}}{{/crossLink}} instead\n *\n * @method release\n * @param {Asset|String|Array} asset\n * @deprecated cc.loader.release is deprecated, please use cc.assetManager.releaseAsset instead\n */\n release (asset) {\n if (Array.isArray(asset)) {\n for (let i = 0; i < asset.length; i++) {\n var key = asset[i];\n if (typeof key === 'string') key = cc.assetManager.assets.get(key);\n let isBuiltin = cc.assetManager.builtins._assets.find(function (assets) {\n return assets.find(builtinAsset => builtinAsset === key);\n });\n if (isBuiltin) continue;\n cc.assetManager.releaseAsset(key);\n }\n }\n else if (asset) {\n if (typeof asset === 'string') asset = cc.assetManager.assets.get(asset);\n let isBuiltin = cc.assetManager.builtins._assets.find(function (assets) {\n return assets.find(builtinAsset => builtinAsset === asset);\n });\n if (isBuiltin) return;\n cc.assetManager.releaseAsset(asset);\n }\n },\n\n /**\n * `cc.loader.releaseAsset` is deprecated, please use {{#crossLink \"AssetManager/releaseAsset:method\"}}{{/crossLink}} instead\n *\n * @deprecated cc.loader.releaseAsset is deprecated, please use cc.assetManager.releaseAsset instead\n * @method releaseAsset\n * @param {Asset} asset\n */\n releaseAsset (asset) {\n cc.assetManager.releaseAsset(asset);\n },\n\n /**\n * `cc.loader.releaseRes` is deprecated, please use {{#crossLink \"AssetManager/releaseRes:method\"}}{{/crossLink}} instead\n *\n * @deprecated cc.loader.releaseRes is deprecated, please use cc.assetManager.releaseRes instead\n * @method releaseRes\n * @param {String} url\n * @param {Function} [type] - Only asset of type will be released if this argument is supplied.\n */\n releaseRes (url, type) {\n cc.resources.release(url, type);\n },\n\n /**\n * `cc.loader.releaseResDir` was removed, please use {{#crossLink \"AssetManager/releaseRes:method\"}}{{/crossLink}} instead\n *\n * @deprecated cc.loader.releaseResDir was removed, please use cc.assetManager.releaseRes instead\n * @method releaseResDir\n */\n releaseResDir () {\n if (CC_DEBUG) {\n cc.error('cc.loader.releaseResDir was removed, please use cc.assetManager.releaseAsset instead');\n }\n },\n\n /**\n * `cc.loader.releaseAll` is deprecated, please use {{#crossLink \"AssetManager/releaseAll:method\"}}{{/crossLink}} instead\n *\n * @deprecated cc.loader.releaseAll is deprecated, please use cc.assetManager.releaseAll instead\n * @method releaseAll\n */\n releaseAll () {\n cc.assetManager.releaseAll();\n cc.assetManager.assets.clear();\n },\n\n /**\n * `cc.loader.removeItem` is deprecated, please use `cc.assetManager.assets.remove` instead\n *\n * @deprecated cc.loader.removeItem is deprecated, please use cc.assetManager.assets.remove instead\n * @method removeItem\n * @param {Object} id The id of the item\n * @return {Boolean} succeed or not\n */\n removeItem (key) {\n cc.assetManager.assets.remove(key);\n },\n\n /**\n * `cc.loader.setAutoRelease` is deprecated, if you want to prevent some asset from auto releasing, please use {{#crossLink \"Asset/addRef:method\"}}{{/crossLink}} instead\n *\n * @deprecated cc.loader.setAutoRelease is deprecated, if you want to prevent some asset from auto releasing, please use cc.Asset.addRef instead\n * @method setAutoRelease\n * @param {Asset|String} assetOrUrlOrUuid - asset object or the raw asset's url or uuid\n * @param {Boolean} autoRelease - indicates whether should release automatically\n */\n setAutoRelease (asset, autoRelease) {\n if (typeof asset === 'object') asset = asset._uuid;\n this._autoReleaseSetting[asset] = !!autoRelease;\n },\n\n /**\n * `cc.loader.setAutoReleaseRecursively` is deprecated, if you want to prevent some asset from auto releasing, please use {{#crossLink \"Asset/addRef:method\"}}{{/crossLink}} instead\n *\n * @method setAutoReleaseRecursively\n * @param {Asset|String} assetOrUrlOrUuid - asset object or the raw asset's url or uuid\n * @param {Boolean} autoRelease - indicates whether should release automatically\n * @deprecated cc.loader.setAutoReleaseRecursively is deprecated, if you want to prevent some asset from auto releasing, please use cc.Asset.addRef instead\n */\n setAutoReleaseRecursively (asset, autoRelease) {\n if (typeof asset === 'object') asset = asset._uuid;\n autoRelease = !!autoRelease;\n this._autoReleaseSetting[asset] = autoRelease;\n var depends = dependUtil.getDepsRecursively(asset);\n for (var i = 0; i < depends.length; i++) {\n var depend = depends[i];\n this._autoReleaseSetting[depend] = autoRelease;\n }\n },\n\n /**\n * `cc.loader.isAutoRelease` is deprecated\n *\n * @method isAutoRelease\n * @param {Asset|String} assetOrUrl - asset object or the raw asset's url\n * @returns {Boolean}\n * @deprecated cc.loader.isAutoRelease is deprecated\n */\n isAutoRelease (asset) {\n if (typeof asset === 'object') asset = asset._uuid;\n return !!this._autoReleaseSetting[asset];\n }\n};\n\n/**\n * @class Downloader\n */\n/**\n * `cc.loader.downloader.loadSubpackage` is deprecated, please use {{#crossLink \"AssetManager/loadBundle:method\"}}{{/crossLink}} instead\n *\n * @deprecated cc.loader.downloader.loadSubpackage is deprecated, please use AssetManager.loadBundle instead\n * @method loadSubpackage\n * @param {String} name - Subpackage name\n * @param {Function} [completeCallback] - Callback invoked when subpackage loaded\n * @param {Error} completeCallback.error - error information\n */\ndownloader.loadSubpackage = function (name, completeCallback) {\n cc.assetManager.loadBundle(name, null, completeCallback);\n};\n\n/**\n * @deprecated cc.AssetLibrary is deprecated, please backup your project and upgrade to cc.assetManager\n */\nvar AssetLibrary = {\n\n /**\n * @deprecated cc.AssetLibrary.init is deprecated, please use cc.assetManager.init instead\n */\n init (options) {\n options.importBase = options.libraryPath;\n options.nativeBase = CC_BUILD ? options.rawAssetsBase : options.libraryPath;\n cc.assetManager.init(options);\n if (options.rawAssets) {\n var resources = new cc.AssetManager.Bundle();\n resources.init({\n name: cc.AssetManager.BuiltinBundleName.RESOURCES,\n importBase: options.importBase,\n nativeBase: options.nativeBase,\n paths: options.rawAssets.assets,\n uuids: Object.keys(options.rawAssets.assets),\n });\n }\n },\n\n /**\n * @deprecated cc.AssetLibrary is deprecated, please use cc.assetManager.loadAny instead\n */\n loadAsset (uuid, onComplete) {\n cc.assetManager.loadAny(uuid, onComplete);\n },\n\n getLibUrlNoExt () {\n if (CC_DEBUG) {\n cc.error('cc.AssetLibrary.getLibUrlNoExt was removed, if you want to transform url, please use cc.assetManager.utils.getUrlWithUuid instead');\n }\n },\n\n queryAssetInfo () {\n if (CC_DEBUG) {\n cc.error('cc.AssetLibrary.queryAssetInfo was removed, only available in the editor by using cc.assetManager.editorExtend.queryAssetInfo');\n }\n }\n};\n\n/**\n * `cc.url` is deprecated\n *\n * @deprecated cc.url is deprecated\n * @class url\n * @static\n */\ncc.url = {\n normalize (url) {\n cc.warnID(1400, 'cc.url.normalize', 'cc.assetManager.utils.normalize');\n return cc.assetManager.utils.normalize(url);\n },\n\n /**\n * `cc.url.raw` is deprecated, please use `cc.resources.load` directly, or use `Asset.nativeUrl` instead.\n *\n * @deprecated cc.url.raw is deprecated, please use cc.resources.load directly, or use Asset.nativeUrl instead.\n * @method raw\n * @param {String} url\n * @return {String}\n */\n raw (url) {\n cc.warnID(1400, 'cc.url.raw', 'cc.resources.load');\n if (url.startsWith('resources/')) {\n return cc.assetManager._transform({'path': cc.path.changeExtname(url.substr(10)), bundle: cc.AssetManager.BuiltinBundleName.RESOURCES, __isNative__: true, ext: cc.path.extname(url)});\n }\n return '';\n }\n};\n\nlet onceWarns = {\n loader: true,\n assetLibrary: true,\n};\n\nObject.defineProperties(cc, {\n loader: {\n get () {\n if (CC_DEBUG) {\n if (onceWarns.loader) {\n onceWarns.loader = false;\n cc.log('cc.loader is deprecated, use cc.assetManager instead please. See https://docs.cocos.com/creator/manual/zh/release-notes/asset-manager-upgrade-guide.html');\n }\n }\n return loader;\n }\n },\n\n AssetLibrary: {\n get () {\n if (CC_DEBUG) {\n if (onceWarns.assetLibrary) {\n onceWarns.assetLibrary = false;\n cc.log('cc.AssetLibrary is deprecated, use cc.assetManager instead please. See https://docs.cocos.com/creator/manual/zh/release-notes/asset-manager-upgrade-guide.html');\n }\n }\n return AssetLibrary;\n }\n },\n\n /**\n * `cc.LoadingItems` was removed, please use {{#crossLink \"Task\"}}{{/crossLink}} instead\n *\n * @deprecated cc.LoadingItems was removed, please use cc.AssetManager.Task instead\n * @class LoadingItems\n */\n LoadingItems: {\n get () {\n cc.warnID(1400, 'cc.LoadingItems', 'cc.AssetManager.Task');\n return cc.AssetManager.Task;\n }\n },\n\n Pipeline: {\n get () {\n cc.warnID(1400, 'cc.Pipeline', 'cc.AssetManager.Pipeline');\n return cc.AssetManager.Pipeline;\n }\n }\n});\n\njs.obsolete(cc, 'cc.RawAsset', 'cc.Asset');\n\n/**\n * @class Asset\n */\n/**\n * `cc.Asset.url` is deprecated, please use {{#crossLink \"Asset/nativeUrl:property\"}}{{/crossLink}} instead\n * @property url\n * @type {String}\n * @deprecated cc.Asset.url is deprecated, please use cc.Asset.nativeUrl instead\n */\njs.obsolete(cc.Asset.prototype, 'cc.Asset.url', 'nativeUrl');\n\n/**\n * @class macro\n * @static\n */\nObject.defineProperties(cc.macro, {\n /**\n * `cc.macro.DOWNLOAD_MAX_CONCURRENT` is deprecated now, please use {{#crossLink \"Downloader/maxConcurrency:property\"}}{{/crossLink}} instead\n * \n * @property DOWNLOAD_MAX_CONCURRENT\n * @type {Number}\n * @deprecated cc.macro.DOWNLOAD_MAX_CONCURRENT is deprecated now, please use cc.assetManager.downloader.maxConcurrency instead\n */\n DOWNLOAD_MAX_CONCURRENT: {\n get () {\n return cc.assetManager.downloader.maxConcurrency;\n },\n\n set (val) {\n cc.assetManager.downloader.maxConcurrency = val;\n }\n }\n});\n\nObject.assign(cc.director, {\n _getSceneUuid (sceneName) {\n cc.assetManager.main.getSceneInfo(sceneName);\n }\n});\n\nObject.defineProperties(cc.game, {\n _sceneInfos: {\n get () {\n var scenes = [];\n cc.assetManager.main._config.scenes.forEach(function (val) {\n scenes.push(val);\n });\n return scenes;\n }\n }\n});\n\nvar parseParameters = utilities.parseParameters;\nutilities.parseParameters = function (options, onProgress, onComplete) {\n var result = parseParameters(options, onProgress, onComplete);\n result.onProgress = result.onProgress || loader.onProgress;\n return result;\n};\n\nvar autoRelease = releaseManager._autoRelease;\nreleaseManager._autoRelease = function () {\n autoRelease.apply(this, arguments);\n var releaseSettings = loader._autoReleaseSetting;\n var keys = Object.keys(releaseSettings);\n for (let i = 0; i < keys.length; i++) {\n let key = keys[i];\n if (releaseSettings[key] === true) {\n var asset = cc.assetManager.assets.get(key);\n asset && releaseManager.tryRelease(asset);\n }\n }\n};","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst helper = require('./helper');\nconst MissingClass = CC_EDITOR && Editor.require('app://editor/page/scene-utils/missing-class-reporter').MissingClass;\nrequire('../platform/deserialize');\n\nfunction deserialize (json, options) {\n var classFinder, missingClass;\n if (CC_EDITOR) {\n missingClass = MissingClass;\n classFinder = function (type, data, owner, propName) {\n var res = missingClass.classFinder(type, data, owner, propName);\n if (res) {\n return res;\n }\n return cc._MissingScript;\n };\n classFinder.onDereferenced = missingClass.classFinder.onDereferenced;\n }\n else {\n classFinder = cc._MissingScript.safeFindClass;\n }\n\n let pool = null;\n if (!CC_PREVIEW) {\n pool = cc.deserialize.Details.pool;\n }\n else {\n let { default: deserializeForCompiled } = require('../platform/deserialize-compiled');\n let deserializeForEditor = require('../platform/deserialize-editor');\n if (deserializeForCompiled.isCompiledJson(json)) {\n pool = deserializeForCompiled.Details.pool;\n }\n else {\n pool = deserializeForEditor.Details.pool;\n }\n }\n var tdInfo = pool.get();\n\n var asset;\n try {\n asset = cc.deserialize(json, tdInfo, {\n classFinder: classFinder,\n customEnv: options\n });\n }\n catch (e) {\n pool.put(tdInfo);\n throw e;\n }\n\n if (CC_EDITOR && missingClass) {\n missingClass.reportMissingClass(asset);\n missingClass.reset();\n }\n\n var uuidList = tdInfo.uuidList;\n var objList = tdInfo.uuidObjList;\n var propList = tdInfo.uuidPropList;\n var depends = [];\n\n for (var i = 0; i < uuidList.length; i++) {\n var dependUuid = uuidList[i];\n depends[i] = {\n uuid: helper.decodeUuid(dependUuid),\n owner: objList[i],\n prop: propList[i]\n };\n }\n\n // non-native deps\n asset.__depends__ = depends;\n // native dep\n asset._native && (asset.__nativeDepend__ = true);\n pool.put(tdInfo);\n return asset;\n\n}\n\nmodule.exports = deserialize;\n","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nvar __audioSupport = cc.sys.__audioSupport;\nconst { parseParameters } = require('./utilities');\n\nfunction downloadDomAudio (url, options, onComplete) {\n var { options, onComplete } = parseParameters(options, undefined, onComplete);\n\n var dom = document.createElement('audio');\n dom.src = url;\n\n var clearEvent = function () {\n clearTimeout(timer);\n dom.removeEventListener(\"canplaythrough\", success, false);\n dom.removeEventListener(\"error\", failure, false);\n if(__audioSupport.USE_LOADER_EVENT)\n dom.removeEventListener(__audioSupport.USE_LOADER_EVENT, success, false);\n };\n\n var timer = setTimeout(function () {\n if (dom.readyState === 0)\n failure();\n else\n success();\n }, 8000);\n\n var success = function () {\n clearEvent();\n onComplete && onComplete(null, dom);\n };\n \n var failure = function () {\n clearEvent();\n var message = 'load audio failure - ' + url;\n cc.log(message);\n onComplete && onComplete(new Error(message));\n };\n\n dom.addEventListener(\"canplaythrough\", success, false);\n dom.addEventListener(\"error\", failure, false);\n if(__audioSupport.USE_LOADER_EVENT)\n dom.addEventListener(__audioSupport.USE_LOADER_EVENT, success, false);\n return dom;\n}\n\nmodule.exports = downloadDomAudio;","\n/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst { parseParameters } = require('./utilities');\n\nfunction downloadDomImage (url, options, onComplete) {\n var { options, onComplete } = parseParameters(options, undefined, onComplete);\n\n var img = new Image();\n\n if (window.location.protocol !== 'file:') {\n img.crossOrigin = 'anonymous';\n }\n\n function loadCallback () {\n img.removeEventListener('load', loadCallback);\n img.removeEventListener('error', errorCallback);\n onComplete && onComplete(null, img);\n }\n \n function errorCallback () {\n img.removeEventListener('load', loadCallback);\n img.removeEventListener('error', errorCallback);\n onComplete && onComplete(new Error(cc.debug.getError(4930, url)));\n }\n\n img.addEventListener('load', loadCallback);\n img.addEventListener('error', errorCallback);\n img.src = url;\n return img;\n}\n\nmodule.exports = downloadDomImage;","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nconst { parseParameters } = require('./utilities');\n\nfunction downloadFile (url, options, onProgress, onComplete) {\n var { options, onProgress, onComplete } = parseParameters(options, onProgress, onComplete);\n\n var xhr = new XMLHttpRequest(), errInfo = 'download failed: ' + url + ', status: ';\n\n xhr.open('GET', url, true);\n\n if (options.responseType !== undefined) xhr.responseType = options.responseType;\n if (options.withCredentials !== undefined) xhr.withCredentials = options.withCredentials;\n if (options.mimeType !== undefined && xhr.overrideMimeType ) xhr.overrideMimeType(options.mimeType);\n if (options.timeout !== undefined) xhr.timeout = options.timeout;\n\n if (options.header) {\n for (var header in options.header) {\n xhr.setRequestHeader(header, options.header[header]);\n }\n }\n\n xhr.onload = function () {\n if ( xhr.status === 200 || xhr.status === 0 ) {\n onComplete && onComplete(null, xhr.response);\n } else {\n onComplete && onComplete(new Error(errInfo + xhr.status + '(no response)'));\n }\n\n };\n\n if (onProgress) {\n xhr.onprogress = function (e) {\n if (e.lengthComputable) {\n onProgress(e.loaded, e.total);\n }\n };\n }\n\n xhr.onerror = function(){\n onComplete && onComplete(new Error(errInfo + xhr.status + '(error)'));\n };\n\n xhr.ontimeout = function(){\n onComplete && onComplete(new Error(errInfo + xhr.status + '(time out)'));\n };\n\n xhr.onabort = function(){\n onComplete && onComplete(new Error(errInfo + xhr.status + '(abort)'));\n };\n\n xhr.send(null);\n \n return xhr;\n}\n\nmodule.exports = downloadFile;","\n/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nconst { parseParameters } = require('./utilities');\n\nconst downloaded = {};\n\nfunction downloadScript (url, options, onComplete) {\n var { options, onComplete } = parseParameters(options, undefined, onComplete);\n\n // no need to load script again\n if (downloaded[url]) {\n return onComplete && onComplete(null);\n }\n\n var d = document, s = document.createElement('script');\n\n if (window.location.protocol !== 'file:') {\n s.crossOrigin = 'anonymous';\n }\n\n s.async = options.async;\n s.src = url;\n function loadHandler () {\n s.parentNode.removeChild(s);\n s.removeEventListener('load', loadHandler, false);\n s.removeEventListener('error', errorHandler, false);\n downloaded[url] = true;\n onComplete && onComplete(null);\n }\n\n function errorHandler() {\n s.parentNode.removeChild(s);\n s.removeEventListener('load', loadHandler, false);\n s.removeEventListener('error', errorHandler, false);\n onComplete && onComplete(new Error(cc.debug.getError(4928, url)));\n }\n \n s.addEventListener('load', loadHandler, false);\n s.addEventListener('error', errorHandler, false);\n d.body.appendChild(s);\n}\n\nmodule.exports = downloadScript;","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n/**\n * @module cc.AssetManager\n */\nconst js = require('../platform/js');\nconst debug = require('../CCDebug');\nconst { loadFont } = require('./font-loader');\nconst callInNextTick = require('../platform/utils').callInNextTick;\nconst downloadDomImage = require('./download-dom-image');\nconst downloadDomAudio = require('./download-dom-audio');\nconst downloadFile = require('./download-file');\nconst downloadScript = require('./download-script.js');\nconst Cache = require('./cache');\nconst { files } = require('./shared');\nconst { __audioSupport, capabilities } = require('../platform/CCSys');\nconst { urlAppendTimestamp, retry } = require('./utilities');\n\nconst REGEX = /^(?:\\w+:\\/\\/|\\.+\\/).+/;\n\n\nvar formatSupport = __audioSupport.format || [];\n\nvar unsupported = function (url, options, onComplete) {\n onComplete(new Error(debug.getError(4927)));\n}\n\nvar downloadAudio = function (url, options, onComplete) {\n // web audio need to download file as arrayBuffer\n if (options.audioLoadMode !== cc.AudioClip.LoadMode.DOM_AUDIO) {\n downloadArrayBuffer(url, options, onComplete);\n }\n else {\n downloadDomAudio(url, options, onComplete);\n }\n};\n\nvar downloadAudio = (!CC_EDITOR || !Editor.isMainProcess) ? (formatSupport.length === 0 ? unsupported : (__audioSupport.WEB_AUDIO ? downloadAudio : downloadDomAudio)) : null;\n\nvar downloadImage = function (url, options, onComplete) {\n // if createImageBitmap is valid, we can transform blob to ImageBitmap. Otherwise, just use HTMLImageElement to load\n var func = capabilities.imageBitmap && cc.macro.ALLOW_IMAGE_BITMAP ? downloadBlob : downloadDomImage;\n func.apply(this, arguments);\n};\n\nvar downloadBlob = function (url, options, onComplete) {\n options.responseType = \"blob\";\n downloadFile(url, options, options.onFileProgress, onComplete);\n};\n\nvar downloadJson = function (url, options, onComplete) {\n options.responseType = \"json\";\n downloadFile(url, options, options.onFileProgress, function (err, data) {\n if (!err && typeof data === 'string') {\n try {\n data = JSON.parse(data);\n }\n catch (e) {\n err = e;\n }\n }\n onComplete && onComplete(err, data);\n });\n};\n\nvar downloadArrayBuffer = function (url, options, onComplete) {\n options.responseType = \"arraybuffer\";\n downloadFile(url, options, options.onFileProgress, onComplete);\n};\n\nvar downloadText = function (url, options, onComplete) {\n options.responseType = \"text\";\n downloadFile(url, options, options.onFileProgress, onComplete);\n};\n\nvar downloadVideo = function (url, options, onComplete) {\n onComplete(null, url);\n};\n\nvar downloadBundle = function (nameOrUrl, options, onComplete) {\n let bundleName = cc.path.basename(nameOrUrl);\n let url = nameOrUrl;\n if (!REGEX.test(url)) url = 'assets/' + bundleName;\n var version = options.version || downloader.bundleVers[bundleName];\n var count = 0;\n var config = `${url}/config.${version ? version + '.' : ''}json`;\n let out = null, error = null;\n downloadJson(config, options, function (err, response) {\n if (err) {\n error = err;\n }\n out = response;\n out && (out.base = url + '/');\n count++;\n if (count === 2) {\n onComplete(error, out);\n }\n });\n\n var js = `${url}/index.${version ? version + '.' : ''}js`;\n downloadScript(js, options, function (err) {\n if (err) {\n error = err;\n }\n count++;\n if (count === 2) {\n onComplete(error, out);\n }\n });\n};\n\nvar _downloading = new Cache();\nvar _queue = [];\nvar _queueDirty = false;\n\n// the number of loading thread\nvar _totalNum = 0;\n\n// the number of request that launched in this period\nvar _totalNumThisPeriod = 0;\n\n// last time, if now - lastTime > period, refresh _totalNumThisPeriod.\nvar _lastDate = -1;\n\n// if _totalNumThisPeriod equals max, move request to next period using setTimeOut.\nvar _checkNextPeriod = false;\n\nvar updateTime = function () {\n var now = Date.now();\n // use deltaTime as interval\n let interval = cc.director._deltaTime > downloader._maxInterval ? downloader._maxInterval : cc.director._deltaTime;\n if (now - _lastDate > interval * 1000) {\n _totalNumThisPeriod = 0;\n _lastDate = now;\n }\n};\n\n// handle the rest request in next period\nvar handleQueue = function (maxConcurrency, maxRequestsPerFrame) {\n _checkNextPeriod = false;\n updateTime();\n while (_queue.length > 0 && _totalNum < maxConcurrency && _totalNumThisPeriod < maxRequestsPerFrame) {\n if (_queueDirty) {\n _queue.sort(function (a, b) {\n return a.priority - b.priority;\n });\n _queueDirty = false;\n }\n var nextOne = _queue.pop();\n if (!nextOne) {\n break;\n }\n _totalNum++;\n _totalNumThisPeriod++;\n nextOne.invoke();\n }\n\n if (_queue.length > 0 && _totalNum < maxConcurrency) {\n callInNextTick(handleQueue, maxConcurrency, maxRequestsPerFrame);\n _checkNextPeriod = true;\n }\n}\n\n\n/**\n * !#en\n * Control all download process, it is a singleton. All member can be accessed with `cc.assetManager.downloader` , it can download several types of files:\n * 1. Text\n * 2. Image\n * 3. Audio\n * 4. Assets\n * 5. Scripts\n * \n * !#zh\n * 管理所有下载过程,downloader 是个单例,所有成员能通过 `cc.assetManager.downloader` 访问,它能下载以下几种类型的文件:\n * 1. 文本\n * 2. 图片\n * 3. 音频\n * 4. 资源\n * 5. 脚本\n * \n * @class Downloader\n */\nvar downloader = {\n\n _remoteServerAddress: '',\n _maxInterval: 1 / 30,\n \n /**\n * !#en \n * The address of remote server\n * \n * !#zh\n * 远程服务器地址\n * \n * @property remoteServerAddress\n * @type {string}\n * @default ''\n */\n get remoteServerAddress () {\n return this._remoteServerAddress;\n },\n\n /**\n * !#en \n * The maximum number of concurrent when downloading\n * \n * !#zh\n * 下载时的最大并发数\n * \n * @property maxConcurrency\n * @type {number}\n * @default 6\n */\n maxConcurrency: 6,\n\n /**\n * !#en \n * The maximum number of request can be launched per frame when downloading\n * \n * !#zh\n * 下载时每帧可以启动的最大请求数\n * \n * @property maxRequestsPerFrame\n * @type {number}\n * @default 6\n */\n maxRequestsPerFrame: 6,\n\n /**\n * !#en\n * The max number of retries when fail\n * \n * !#zh\n * 失败重试次数\n * \n * @property maxRetryCount\n * @type {Number}\n */\n maxRetryCount: 3,\n\n appendTimeStamp: false,\n\n limited: true,\n\n /**\n * !#en\n * Wait for while before another retry, unit: ms\n * \n * !#zh\n * 重试的间隔时间\n * \n * @property retryInterval\n * @type {Number}\n */\n retryInterval: 2000,\n\n bundleVers: null,\n\n /*\n * !#en\n * Use Image element to download image\n * \n * !#zh\n * 使用 Image 元素来下载图片\n * \n * @method downloadDomImage\n * @param {string} url - Url of the image\n * @param {Object} [options] - Some optional paramters\n * @param {Function} [onComplete] - Callback when image loaded or failed\n * @param {Error} onComplete.err - The occurred error, null indicetes success\n * @param {HTMLImageElement} onComplete.img - The loaded Image element, null if error occurred\n * @returns {HTMLImageElement} The image element\n * \n * @example\n * downloadDomImage('http://example.com/test.jpg', null, (err, img) => console.log(err));\n * \n * @typescript\n * downloadDomImage(url: string, options?: Record , onComplete?: (err: Error, img: HTMLImageElement) => void): HTMLImageElement\n * downloadDomImage(url: string, onComplete?: (err: Error, img: HTMLImageElement) => void): HTMLImageElement\n */\n downloadDomImage: downloadDomImage,\n\n /*\n * !#en\n * Use audio element to download audio\n * \n * !#zh\n * 使用 Audio 元素来下载音频 \n * \n * @method downloadDomAudio\n * @param {string} url - Url of the audio\n * @param {Object} [options] - Some optional paramters\n * @param {Function} [onComplete] - Callback invoked when audio loaded or failed\n * @param {Error} onComplete.err - The occurred error, null indicetes success\n * @param {HTMLAudioElement} onComplete.audio - The loaded audio element, null if error occurred\n * @returns {HTMLAudioElement} The audio element\n * \n * @example\n * downloadDomAudio('http://example.com/test.mp3', null, (err, audio) => console.log(err));\n * \n * @typescript\n * downloadDomAudio(url: string, options?: Record, onComplete?: (err: Error, audio: HTMLAudioElement) => void): HTMLAudioElement\n * downloadDomAudio(url: string, onComplete?: (err: Error, audio: HTMLAudioElement) => void): HTMLAudioElement\n */\n downloadDomAudio: downloadDomAudio,\n \n /*\n * !#en\n * Use XMLHttpRequest to download file\n * \n * !#zh\n * 使用 XMLHttpRequest 来下载文件\n * \n * @method downloadFile\n * @param {string} url - Url of the file\n * @param {Object} [options] - Some optional paramters\n * @param {string} [options.responseType] - Indicate which type of content should be returned\n * @param {boolean} [options.withCredentials] - Indicate whether or not cross-site Access-Contorl requests should be made using credentials\n * @param {string} [options.mimeType] - Indicate which type of content should be returned. In some browsers, responseType does't work, you can use mimeType instead\n * @param {Number} [options.timeout] - Represent the number of ms a request can take before being terminated.\n * @param {Object} [options.header] - The header should be tranferred to server\n * @param {Function} [onFileProgress] - Callback continuously during download is processing\n * @param {Number} onFileProgress.loaded - Size of downloaded content.\n * @param {Number} onFileProgress.total - Total size of content.\n * @param {Function} [onComplete] - Callback when file loaded or failed\n * @param {Error} onComplete.err - The occurred error, null indicetes success\n * @param {*} onComplete.response - The loaded content, null if error occurred, type of content can be indicated by options.responseType\n * @returns {XMLHttpRequest} The xhr to be send\n * \n * @example\n * downloadFile('http://example.com/test.bin', {responseType: 'arraybuffer'}, null, (err, arrayBuffer) => console.log(err));\n * \n * @typescript\n * downloadFile(url: string, options?: Record, onFileProgress?: (loaded: Number, total: Number) => void, onComplete?: (err: Error, response: any) => void): XMLHttpRequest\n * downloadFile(url: string, onFileProgress?: (loaded: Number, total: Number) => void, onComplete?: (err: Error, response: any) => void): XMLHttpRequest\n * downloadFile(url: string, options?: Record, onComplete?: (err: Error, response: any) => void): XMLHttpRequest\n * downloadFile(url: string, onComplete?: (err: Error, response: any) => void): XMLHttpRequest\n */\n downloadFile: downloadFile,\n\n /*\n * !#en\n * Load script \n * \n * !#zh\n * 加载脚本\n * \n * @method downloadScript\n * @param {string} url - Url of the script\n * @param {Object} [options] - Some optional paramters\n * @param {boolean} [options.isAsync] - Indicate whether or not loading process should be async\n * @param {Function} [onComplete] - Callback when script loaded or failed\n * @param {Error} onComplete.err - The occurred error, null indicetes success\n * \n * @example\n * downloadScript('http://localhost:8080/index.js', null, (err) => console.log(err));\n * \n * @typescript\n * downloadScript(url: string, options?: Record, onComplete?: (err: Error) => void): void\n * downloadScript(url: string, onComplete?: (err: Error) => void): void\n */\n downloadScript: downloadScript,\n\n init (bundleVers, remoteServerAddress) {\n _downloading.clear();\n _queue.length = 0;\n this._remoteServerAddress = remoteServerAddress || '';\n this.bundleVers = bundleVers || Object.create(null);\n },\n\n /**\n * !#en\n * Register custom handler if you want to change default behavior or extend downloader to download other format file\n * \n * !#zh\n * 当你想修改默认行为或者拓展 downloader 来下载其他格式文件时可以注册自定义的 handler \n * \n * @method register\n * @param {string|Object} type - Extension likes '.jpg' or map likes {'.jpg': jpgHandler, '.png': pngHandler}\n * @param {Function} [handler] - handler\n * @param {string} handler.url - url\n * @param {Object} handler.options - some optional paramters will be transferred to handler.\n * @param {Function} handler.onComplete - callback when finishing downloading\n * \n * @example\n * downloader.register('.tga', (url, options, onComplete) => onComplete(null, null));\n * downloader.register({'.tga': (url, options, onComplete) => onComplete(null, null), '.ext': (url, options, onComplete) => onComplete(null, null)});\n * \n * @typescript\n * register(type: string, handler: (url: string, options: Record, onComplete: (err: Error, content: any) => void) => void): void\n * register(map: Record, onComplete: (err: Error, content: any) => void) => void>): void\n */\n register (type, handler) {\n if (typeof type === 'object') {\n js.mixin(downloaders, type);\n }\n else {\n downloaders[type] = handler;\n }\n },\n\n /**\n * !#en\n * Use corresponding handler to download file under limitation \n * \n * !#zh\n * 在限制下使用对应的 handler 来下载文件\n * \n * @method download\n * @param {string} url - The url should be downloaded\n * @param {string} type - The type indicates that which handler should be used to download, such as '.jpg'\n * @param {Object} options - some optional paramters will be transferred to the corresponding handler.\n * @param {Function} [options.onFileProgress] - progressive callback will be transferred to handler.\n * @param {Number} [options.maxRetryCount] - How many times should retry when download failed\n * @param {Number} [options.maxConcurrency] - The maximum number of concurrent when downloading\n * @param {Number} [options.maxRequestsPerFrame] - The maximum number of request can be launched per frame when downloading\n * @param {Number} [options.priority] - The priority of this url, default is 0, the greater number is higher priority.\n * @param {Function} onComplete - callback when finishing downloading\n * @param {Error} onComplete.err - The occurred error, null indicetes success\n * @param {*} onComplete.contetnt - The downloaded file\n * \n * @example\n * download('http://example.com/test.tga', '.tga', {onFileProgress: (loaded, total) => console.lgo(loaded/total)}, onComplete: (err) => console.log(err));\n * \n * @typescript\n * download(id: string, url: string, type: string, options: Record, onComplete: (err: Error, content: any) => void): void\n */\n download (id, url, type, options, onComplete) {\n let func = downloaders[type] || downloaders['default'];\n let self = this;\n // if it is downloaded, don't download again\n let file, downloadCallbacks;\n if (file = files.get(id)) {\n onComplete(null, file);\n }\n else if (downloadCallbacks = _downloading.get(id)) {\n downloadCallbacks.push(onComplete);\n for (let i = 0, l = _queue.length; i < l; i++) {\n var item = _queue[i];\n if (item.id === id) {\n var priority = options.priority || 0;\n if (item.priority < priority) {\n item.priority = priority;\n _queueDirty = true;\n } \n return;\n }\n } \n }\n else {\n // if download fail, should retry\n var maxRetryCount = typeof options.maxRetryCount !== 'undefined' ? options.maxRetryCount : this.maxRetryCount;\n var maxConcurrency = typeof options.maxConcurrency !== 'undefined' ? options.maxConcurrency : this.maxConcurrency;\n var maxRequestsPerFrame = typeof options.maxRequestsPerFrame !== 'undefined' ? options.maxRequestsPerFrame : this.maxRequestsPerFrame;\n\n function process (index, callback) {\n if (index === 0) {\n _downloading.add(id, [onComplete]);\n }\n \n if (!self.limited) return func(urlAppendTimestamp(url), options, callback);\n\n // refresh\n updateTime();\n\n function invoke () {\n func(urlAppendTimestamp(url), options, function () {\n // when finish downloading, update _totalNum\n _totalNum--;\n if (!_checkNextPeriod && _queue.length > 0) {\n callInNextTick(handleQueue, maxConcurrency, maxRequestsPerFrame);\n _checkNextPeriod = true;\n }\n callback.apply(this, arguments);\n });\n }\n\n if (_totalNum < maxConcurrency && _totalNumThisPeriod < maxRequestsPerFrame) {\n invoke();\n _totalNum++;\n _totalNumThisPeriod++;\n }\n else {\n // when number of request up to limitation, cache the rest\n _queue.push({ id, priority: options.priority || 0, invoke });\n _queueDirty = true;\n \n if (!_checkNextPeriod && _totalNum < maxConcurrency) {\n callInNextTick(handleQueue, maxConcurrency, maxRequestsPerFrame);\n _checkNextPeriod = true;\n }\n }\n }\n\n // when retry finished, invoke callbacks\n function finale (err, result) {\n if (!err) files.add(id, result);\n var callbacks = _downloading.remove(id);\n for (let i = 0, l = callbacks.length; i < l; i++) {\n callbacks[i](err, result);\n }\n }\n \n retry(process, maxRetryCount, this.retryInterval, finale);\n }\n }\n};\n\n// dafault handler map\nvar downloaders = {\n // Images\n '.png' : downloadImage,\n '.jpg' : downloadImage,\n '.bmp' : downloadImage,\n '.jpeg' : downloadImage,\n '.gif' : downloadImage,\n '.ico' : downloadImage,\n '.tiff' : downloadImage,\n '.webp' : downloadImage,\n '.image' : downloadImage,\n '.pvr': downloadArrayBuffer,\n '.pkm': downloadArrayBuffer,\n\n // Audio\n '.mp3' : downloadAudio,\n '.ogg' : downloadAudio,\n '.wav' : downloadAudio,\n '.m4a' : downloadAudio,\n\n // Txt\n '.txt' : downloadText,\n '.xml' : downloadText,\n '.vsh' : downloadText,\n '.fsh' : downloadText,\n '.atlas' : downloadText,\n\n '.tmx' : downloadText,\n '.tsx' : downloadText,\n\n '.json' : downloadJson,\n '.ExportJson' : downloadJson,\n '.plist' : downloadText,\n\n '.fnt' : downloadText,\n\n // font\n '.font' : loadFont,\n '.eot' : loadFont,\n '.ttf' : loadFont,\n '.woff' : loadFont,\n '.svg' : loadFont,\n '.ttc' : loadFont,\n\n // Video\n '.mp4': downloadVideo,\n '.avi': downloadVideo,\n '.mov': downloadVideo,\n '.mpg': downloadVideo,\n '.mpeg': downloadVideo,\n '.rm': downloadVideo,\n '.rmvb': downloadVideo,\n\n // Binary\n '.binary' : downloadArrayBuffer,\n '.bin': downloadArrayBuffer,\n '.dbbin': downloadArrayBuffer,\n '.skel': downloadArrayBuffer,\n\n '.js': downloadScript,\n\n 'bundle': downloadBundle,\n\n 'default': downloadText\n\n};\n\ndownloader._downloaders = downloaders;\nmodule.exports = downloader;\n","/****************************************************************************\n Copyright (c) 2020 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nconst Bundle = require('./bundle');\nconst Cache = require('./cache');\nconst { assets, bundles } = require('./shared');\n\nconst _creating = new Cache();\n\nfunction createTexture (id, data, options, onComplete) {\n let out = null, err = null;\n try {\n out = new cc.Texture2D();\n out._nativeUrl = id;\n out._nativeAsset = data;\n }\n catch (e) {\n err = e;\n }\n onComplete && onComplete(err, out);\n}\n\nfunction createAudioClip (id, data, options, onComplete) {\n let out = new cc.AudioClip();\n out._nativeUrl = id;\n out._nativeAsset = data;\n out.duration = data.duration;\n onComplete && onComplete(null, out);\n}\n\nfunction createJsonAsset (id, data, options, onComplete) {\n let out = new cc.JsonAsset();\n out.json = data;\n onComplete && onComplete(null, out);\n}\n\nfunction createTextAsset (id, data, options, onComplete) {\n let out = new cc.TextAsset();\n out.text = data;\n onComplete && onComplete(null, out);\n}\n\nfunction createFont (id, data, options, onComplete) {\n let out = new cc.TTFFont();\n out._nativeUrl = id;\n out._nativeAsset = data;\n onComplete && onComplete(null, out);\n}\n\nfunction createBufferAsset (id, data, options, onComplete) {\n let out = new cc.BufferAsset();\n out._nativeUrl = id;\n out._nativeAsset = data;\n onComplete && onComplete(null, out);\n}\n\nfunction createAsset (id, data, options, onComplete) {\n let out = new cc.Asset();\n out._nativeUrl = id;\n out._nativeAsset = data;\n onComplete && onComplete(null, out);\n}\n\nfunction createBundle (id, data, options, onComplete) {\n let bundle = bundles.get(data.name);\n if (!bundle) {\n bundle = new Bundle();\n data.base = data.base || id + '/';\n bundle.init(data);\n }\n onComplete && onComplete(null, bundle);\n}\n\nconst factory = {\n\n register (type, handler) {\n if (typeof type === 'object') {\n cc.js.mixin(producers, type);\n }\n else {\n producers[type] = handler;\n }\n },\n\n create (id, data, type, options, onComplete) {\n var func = producers[type] || producers['default'];\n let asset, creating;\n if (asset = assets.get(id)) {\n onComplete(null, asset);\n }\n else if (creating = _creating.get(id)) {\n creating.push(onComplete);\n }\n else {\n _creating.add(id, [onComplete]);\n func(id, data, options, function (err, data) {\n if (!err && data instanceof cc.Asset) {\n data._uuid = id;\n assets.add(id, data);\n }\n let callbacks = _creating.remove(id);\n for (let i = 0, l = callbacks.length; i < l; i++) {\n callbacks[i](err, data);\n }\n });\n }\n }\n};\n\nconst producers = {\n // Images\n '.png' : createTexture,\n '.jpg' : createTexture,\n '.bmp' : createTexture,\n '.jpeg' : createTexture,\n '.gif' : createTexture,\n '.ico' : createTexture,\n '.tiff' : createTexture,\n '.webp' : createTexture,\n '.image' : createTexture,\n '.pvr': createTexture,\n '.pkm': createTexture,\n\n // Audio\n '.mp3' : createAudioClip,\n '.ogg' : createAudioClip,\n '.wav' : createAudioClip,\n '.m4a' : createAudioClip,\n\n // Txt\n '.txt' : createTextAsset,\n '.xml' : createTextAsset,\n '.vsh' : createTextAsset,\n '.fsh' : createTextAsset,\n '.atlas' : createTextAsset,\n\n '.tmx' : createTextAsset,\n '.tsx' : createTextAsset,\n '.fnt' : createTextAsset,\n\n '.json' : createJsonAsset,\n '.ExportJson' : createJsonAsset,\n\n // font\n '.font' : createFont,\n '.eot' : createFont,\n '.ttf' : createFont,\n '.woff' : createFont,\n '.svg' : createFont,\n '.ttc' : createFont,\n\n // Binary\n '.binary': createBufferAsset,\n '.bin': createBufferAsset,\n '.dbbin': createBufferAsset,\n '.skel': createBufferAsset,\n\n 'bundle': createBundle,\n\n 'default': createAsset\n\n};\n\nmodule.exports = factory;\n","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nconst packManager = require('./pack-manager');\nconst Task = require('./task');\nconst { getDepends, clear, forEach } = require('./utilities');\nconst { assets, fetchPipeline } = require('./shared');\n\nfunction fetch (task, done) {\n\n let firstTask = false;\n if (!task.progress) {\n task.progress = { finish: 0, total: task.input.length, canInvoke: true }; \n firstTask = true;\n }\n\n let options = task.options, depends = [], progress = task.progress, total = progress.total;\n options.__exclude__ = options.__exclude__ || Object.create(null);\n\n task.output = [];\n\n forEach(task.input, function (item, cb) {\n \n if (!item.isNative && assets.has(item.uuid)) {\n var asset = assets.get(item.uuid);\n asset.addRef();\n handle(item, task, asset, null, asset.__asyncLoadAssets__, depends, total, done);\n return cb();\n }\n\n packManager.load(item, task.options, function (err, data) {\n if (err) {\n if (!task.isFinish) {\n if (!cc.assetManager.force || firstTask) {\n cc.error(err.message, err.stack);\n progress.canInvoke = false;\n done(err);\n }\n else {\n handle(item, task, null, null, false, depends, total, done);\n }\n }\n }\n else {\n if (!task.isFinish) handle(item, task, null, data, !item.isNative, depends, total, done);\n }\n cb();\n });\n \n }, function () {\n\n if (task.isFinish) {\n clear(task, true);\n return task.dispatch('error');\n } \n if (depends.length > 0) {\n\n // stage 2 , download depend asset\n let subTask = Task.create({\n name: task.name + ' dependencies',\n input: depends,\n progress,\n options,\n onProgress: task.onProgress,\n onError: Task.prototype.recycle,\n onComplete: function (err) {\n if (!err) {\n task.output.push.apply(task.output, this.output);\n subTask.recycle();\n }\n if (firstTask) decreaseRef(task);\n done(err);\n },\n });\n fetchPipeline.async(subTask);\n return;\n }\n if (firstTask) decreaseRef(task);\n done();\n });\n}\n\nfunction decreaseRef (task) {\n let output = task.output;\n for (let i = 0, l = output.length; i < l; i++) {\n output[i].content && output[i].content.decRef(false);\n }\n}\n\nfunction handle (item, task, content, file, loadDepends, depends, last, done) {\n\n var exclude = task.options.__exclude__;\n var progress = task.progress;\n\n item.content = content;\n item.file = file;\n task.output.push(item);\n\n if (loadDepends) {\n exclude[item.uuid] = true;\n getDepends(item.uuid, file || content, exclude, depends, true, false, item.config);\n progress.total = last + depends.length;\n }\n\n progress.canInvoke && task.dispatch('progress', ++progress.finish, progress.total, item);\n}\n\nmodule.exports = fetch;","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst textUtils = require('../utils/text-utils');\n\nlet _canvasContext = null;\n// letter symbol number CJK\nlet _testString = \"BES bswy:->@123\\u4E01\\u3041\\u1101\";\n\nlet _fontFaces = Object.create(null);\nlet _intervalId = -1;\nlet _loadingFonts = [];\n// 3 seconds timeout\nlet _timeout = 3000;\n\n// Refer to https://github.com/typekit/webfontloader/blob/master/src/core/fontwatcher.js\nlet useNativeCheck = (function () {\n var nativeCheck = undefined;\n return function () {\n if (nativeCheck === undefined) {\n if (!!window.FontFace) {\n var match = /Gecko.*Firefox\\/(\\d+)/.exec(window.navigator.userAgent);\n var safari10Match = /OS X.*Version\\/10\\..*Safari/.exec(window.navigator.userAgent) && /Apple/.exec(window.navigator.vendor);\n \n if (match) {\n nativeCheck = parseInt(match[1], 10) > 42;\n } \n else if (safari10Match) {\n nativeCheck = false;\n } \n else {\n nativeCheck = true;\n }\n \n } else {\n nativeCheck = false;\n }\n }\n\n return nativeCheck;\n \n }\n})();\n\nfunction _checkFontLoaded () {\n let allFontsLoaded = true;\n let now = Date.now();\n\n for (let i = _loadingFonts.length - 1; i >= 0; i--) {\n let fontLoadHandle = _loadingFonts[i];\n let fontFamily = fontLoadHandle.fontFamilyName;\n // load timeout\n if (now - fontLoadHandle.startTime > _timeout) {\n cc.warnID(4933, fontFamily);\n fontLoadHandle.onComplete(null, fontFamily);\n _loadingFonts.splice(i, 1);\n continue;\n }\n\n let oldWidth = fontLoadHandle.refWidth;\n let fontDesc = '40px ' + fontFamily;\n _canvasContext.font = fontDesc;\n let newWidth = textUtils.safeMeasureText(_canvasContext, _testString, fontDesc);\n // loaded successfully\n if (oldWidth !== newWidth) {\n _loadingFonts.splice(i, 1);\n fontLoadHandle.onComplete(null, fontFamily);\n }\n else {\n allFontsLoaded = false;\n }\n }\n\n if (allFontsLoaded) {\n clearInterval(_intervalId);\n _intervalId = -1;\n }\n}\n\n// refer to https://github.com/typekit/webfontloader/blob/master/src/core/nativefontwatchrunner.js\nfunction nativeCheckFontLoaded (start, font, callback) {\n var loader = new Promise(function (resolve, reject) {\n var check = function () {\n var now = Date.now();\n\n if (now - start >= _timeout) {\n reject();\n } \n else {\n document.fonts.load('40px ' + font).then(function (fonts) {\n if (fonts.length >= 1) {\n resolve();\n } \n else {\n setTimeout(check, 100);\n }\n }, function () {\n reject();\n });\n }\n };\n\n check();\n });\n \n var timeoutId = null,\n timer = new Promise(function (resolve, reject) {\n timeoutId = setTimeout(reject, _timeout);\n });\n \n Promise.race([timer, loader]).then(function () {\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n \n callback(null, font);\n }, function () {\n cc.warnID(4933, font);\n callback(null, font);\n });\n}\n\nvar fontLoader = {\n loadFont: function (url, options, onComplete) {\n let fontFamilyName = fontLoader._getFontFamily(url);\n\n // Already loaded fonts\n if (_fontFaces[fontFamilyName]) {\n return onComplete(null, fontFamilyName);\n }\n\n if (!_canvasContext) {\n let labelCanvas = document.createElement('canvas');\n labelCanvas.width = 100;\n labelCanvas.height = 100;\n _canvasContext = labelCanvas.getContext('2d');\n }\n \n // Default width reference to test whether new font is loaded correctly\n let fontDesc = '40px ' + fontFamilyName;\n _canvasContext.font = fontDesc;\n let refWidth = textUtils.safeMeasureText(_canvasContext, _testString, fontDesc);\n\n // Setup font face style\n let fontStyle = document.createElement(\"style\");\n fontStyle.type = \"text/css\";\n let fontStr = \"\";\n if (isNaN(fontFamilyName - 0))\n fontStr += \"@font-face { font-family:\" + fontFamilyName + \"; src:\";\n else\n fontStr += \"@font-face { font-family:'\" + fontFamilyName + \"'; src:\";\n fontStr += \"url('\" + url + \"');\";\n fontStyle.textContent = fontStr + \"}\";\n document.body.appendChild(fontStyle);\n\n // Preload font with div\n let preloadDiv = document.createElement(\"div\");\n let divStyle = preloadDiv.style;\n divStyle.fontFamily = fontFamilyName;\n preloadDiv.innerHTML = \".\";\n divStyle.position = \"absolute\";\n divStyle.left = \"-100px\";\n divStyle.top = \"-100px\";\n document.body.appendChild(preloadDiv);\n\n if (useNativeCheck()) {\n nativeCheckFontLoaded(Date.now(), fontFamilyName, onComplete);\n }\n else {\n // Save loading font\n let fontLoadHandle = {\n fontFamilyName,\n refWidth,\n onComplete,\n startTime: Date.now()\n }\n _loadingFonts.push(fontLoadHandle);\n if (_intervalId === -1) {\n _intervalId = setInterval(_checkFontLoaded, 100);\n }\n }\n _fontFaces[fontFamilyName] = fontStyle;\n },\n\n _getFontFamily: function (fontHandle) {\n var ttfIndex = fontHandle.lastIndexOf(\".ttf\");\n if (ttfIndex === -1) return fontHandle;\n\n var slashPos = fontHandle.lastIndexOf(\"/\");\n var fontFamilyName;\n if (slashPos === -1) {\n fontFamilyName = fontHandle.substring(0, ttfIndex) + \"_LABEL\";\n } else {\n fontFamilyName = fontHandle.substring(slashPos + 1, ttfIndex) + \"_LABEL\";\n }\n if (fontFamilyName.indexOf(' ') !== -1) {\n fontFamilyName = '\"' + fontFamilyName + '\"';\n }\n return fontFamilyName;\n }\n};\n\nmodule.exports = fontLoader","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nconst { bundles } = require('./shared');\n/**\n * @module cc.AssetManager\n */\n/**\n * !#en\n * Provide some helpful function, it is a singleton. All member can be accessed with `cc.assetManager.utils`\n * \n * !#zh\n * 提供一些辅助方法,helper 是一个单例, 所有成员能通过 `cc.assetManager.utils` 访问\n * \n * @class Helper\n */\nvar helper = {\n /**\n * !#en\n * Decode uuid, returns the original uuid\n * \n * !#zh\n * 解码 uuid,返回原始 uuid\n * \n * @method decodeUuid\n * @param {String} base64 - the encoded uuid\n * @returns {String} the original uuid \n * \n * @example\n * var uuid = 'fcmR3XADNLgJ1ByKhqcC5Z';\n * var originalUuid = decodeUuid(uuid); // fc991dd7-0033-4b80-9d41-c8a86a702e59\n * \n * @typescript\n * decodeUuid(base64: string): string\n */\n decodeUuid: require('../utils/decode-uuid'),\n\n /**\n * !#en\n * Extract uuid from url\n * \n * !#zh\n * 从 url 中提取 uuid\n * \n * @method getUuidFromURL\n * @param {String} url - url\n * @returns {String} the uuid parsed from url\n * \n * @example\n * var url = 'assets/main/import/fc/fc991dd7-0033-4b80-9d41-c8a86a702e59.json';\n * var uuid = getUuidFromURL(url); // fc991dd7-0033-4b80-9d41-c8a86a702e59\n * \n * @typescript\n * getUuidFromURL(url: string): string\n */\n getUuidFromURL: (function () {\n var _uuidRegex = /.*[/\\\\][0-9a-fA-F]{2}[/\\\\]([0-9a-fA-F-]{8,})/;\n return function (url) {\n var matches = url.match(_uuidRegex);\n if (matches) {\n return matches[1];\n }\n return '';\n }\n })(),\n\n /**\n * !#en\n * Transform uuid to url\n * \n * !#zh\n * 转换 uuid 为 url\n * \n * @method getUrlWithUuid\n * @param {string} uuid - The uuid of asset\n * @param {Object} [options] - Some optional parameters\n * @param {Boolean} [options.isNative] - Indicates whether the path you want is a native resource path\n * @param {string} [options.nativeExt] - Extension of the native resource path, it is required when isNative is true\n * @returns {string} url\n * \n * @example\n * // json path, 'assets/main/import/fc/fc991dd7-0033-4b80-9d41-c8a86a702e59.json';\n * var url = getUrlWithUuid('fcmR3XADNLgJ1ByKhqcC5Z', {isNative: false});\n * \n * // png path, 'assets/main/native/fc/fc991dd7-0033-4b80-9d41-c8a86a702e59.png';\n * var url = getUrlWithUuid('fcmR3XADNLgJ1ByKhqcC5Z', {isNative: true, nativeExt: '.png'});\n * \n * @typescript\n * getUrlWithUuid(uuid: string, options?: Record): string\n */\n getUrlWithUuid: function (uuid, options) {\n options = options || Object.create(null);\n options.__isNative__ = options.isNative;\n options.ext = options.nativeExt;\n var bundle = bundles.find(function (bundle) {\n return bundle.getAssetInfo(uuid);\n });\n\n if (bundle) {\n options.bundle = bundle.name;\n }\n\n return cc.assetManager._transform(uuid, options);\n },\n\n /**\n * !#en\n * Check if the type of asset is scene\n * \n * !#zh\n * 检查资源类型是否是场景\n * \n * @method isScene\n * @param {*} asset - asset\n * @returns {boolean} - whether or not type is cc.SceneAsset\n * \n * @typescript\n * isScene(asset: any): boolean\n */\n isScene: function (asset) {\n return asset && (asset.constructor === cc.SceneAsset || asset instanceof cc.Scene);\n },\n\n /**\n * !#en\n * Normalize url, strip './' and '/'\n * \n * !#zh\n * 标准化 url ,去除 './' 和 '/' \n * \n * @method normalize\n * @param {string} url - url\n * @returns {string} - The normalized url\n * \n * @typescript\n * normalize(url: string): string\n */\n normalize: function (url) {\n if (url) {\n if (url.charCodeAt(0) === 46 && url.charCodeAt(1) === 47) {\n // strip './'\n url = url.slice(2);\n }\n else if (url.charCodeAt(0) === 47) {\n // strip '/'\n url = url.slice(1);\n }\n }\n return url;\n }\n};\n\nmodule.exports = helper;","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nrequire('./deprecated');\nrequire('./CCAssetManager');\n\n","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nconst packManager = require('./pack-manager');\nconst Pipeline = require('./pipeline');\nconst parser = require('./parser');\nconst { getDepends, cache, gatherAsset, setProperties, forEach, clear, checkCircleReference } = require('./utilities');\nconst { assets, files, parsed, pipeline } = require('./shared');\nconst Task = require('./task');\n\nfunction load (task, done) {\n\n let firstTask = false;\n if (!task.progress) {\n task.progress = { finish: 0, total: task.input.length, canInvoke: true };\n firstTask = true;\n }\n \n var options = task.options, progress = task.progress;\n\n options.__exclude__ = options.__exclude__ || Object.create(null);\n\n task.output = [];\n \n forEach(task.input, function (item, cb) {\n\n let subTask = Task.create({ \n input: item, \n onProgress: task.onProgress, \n options, \n progress, \n onComplete: function (err, item) {\n if (err && !task.isFinish) {\n if (!cc.assetManager.force || firstTask) {\n if (!CC_EDITOR) {\n cc.error(err.message, err.stack);\n }\n progress.canInvoke = false;\n done(err);\n }\n else {\n progress.canInvoke && task.dispatch('progress', ++progress.finish, progress.total, item);\n }\n }\n task.output.push(item);\n subTask.recycle();\n cb();\n }\n });\n\n loadOneAssetPipeline.async(subTask);\n\n }, function () {\n\n options.__exclude__ = null;\n\n if (task.isFinish) {\n clear(task, true);\n return task.dispatch('error');\n }\n\n gatherAsset(task);\n clear(task, true);\n done();\n });\n}\n\nvar loadOneAssetPipeline = new Pipeline('loadOneAsset', [\n\n function fetch (task, done) {\n var item = task.output = task.input;\n var { options, isNative, uuid, file } = item;\n var { reload } = options;\n\n if (file || (!reload && !isNative && assets.has(uuid))) return done();\n\n packManager.load(item, task.options, function (err, data) {\n item.file = data;\n done(err);\n });\n },\n\n function parse (task, done) {\n\n var item = task.output = task.input, progress = task.progress, exclude = task.options.__exclude__;\n var { id, file, options } = item;\n\n if (item.isNative) {\n parser.parse(id, file, item.ext, options, function (err, asset) {\n if (err) return done(err);\n item.content = asset;\n progress.canInvoke && task.dispatch('progress', ++progress.finish, progress.total, item);\n files.remove(id);\n parsed.remove(id);\n done();\n });\n }\n else {\n var { uuid } = item;\n if (uuid in exclude) {\n \n var { finish, content, err, callbacks } = exclude[uuid];\n progress.canInvoke && task.dispatch('progress', ++progress.finish, progress.total, item);\n \n if (finish || checkCircleReference(uuid, uuid, exclude) ) {\n content && content.addRef && content.addRef();\n item.content = content;\n done(err);\n }\n else {\n callbacks.push({ done, item });\n }\n }\n else {\n if (!options.reload && assets.has(uuid)) {\n var asset = assets.get(uuid);\n if (options.__asyncLoadAssets__ || !asset.__asyncLoadAssets__) {\n item.content = asset.addRef();\n progress.canInvoke && task.dispatch('progress', ++progress.finish, progress.total, item);\n done();\n }\n else {\n loadDepends(task, asset, done, false);\n }\n }\n else {\n parser.parse(id, file, 'import', options, function (err, asset) {\n if (err) return done(err);\n asset._uuid = uuid;\n loadDepends(task, asset, done, true);\n });\n }\n }\n }\n }\n]);\n\nfunction loadDepends (task, asset, done, init) {\n\n var item = task.input, progress = task.progress;\n var { uuid, id, options, config } = item;\n var { __asyncLoadAssets__, cacheAsset } = options;\n\n var depends = [];\n // add reference avoid being released during loading dependencies\n asset.addRef && asset.addRef();\n getDepends(uuid, asset, Object.create(null), depends, false, __asyncLoadAssets__, config);\n progress.canInvoke && task.dispatch('progress', ++progress.finish, progress.total += depends.length, item);\n\n var repeatItem = task.options.__exclude__[uuid] = { content: asset, finish: false, callbacks: [{ done, item }] };\n\n let subTask = Task.create({ \n input: depends, \n options: task.options, \n onProgress: task.onProgress, \n onError: Task.prototype.recycle, \n progress, \n onComplete: function (err) {\n asset.decRef && asset.decRef(false);\n asset.__asyncLoadAssets__ = __asyncLoadAssets__;\n repeatItem.finish = true;\n repeatItem.err = err;\n\n if (!err) {\n\n var assets = Array.isArray(subTask.output) ? subTask.output : [subTask.output];\n var map = Object.create(null);\n for (let i = 0, l = assets.length; i < l; i++) {\n var dependAsset = assets[i];\n dependAsset && (map[dependAsset instanceof cc.Asset ? dependAsset._uuid + '@import' : uuid + '@native'] = dependAsset);\n }\n\n if (!init) {\n if (asset.__nativeDepend__ && !asset._nativeAsset) {\n var missingAsset = setProperties(uuid, asset, map);\n if (!missingAsset && !asset.__onLoadInvoked__) {\n try {\n asset.onLoad && asset.onLoad();\n asset.__onLoadInvoked__ = true;\n }\n catch (e) {\n cc.error(e.message, e.stack);\n }\n }\n }\n }\n else {\n var missingAsset = setProperties(uuid, asset, map);\n if (!missingAsset && !asset.__onLoadInvoked__) {\n try {\n asset.onLoad && asset.onLoad();\n asset.__onLoadInvoked__ = true;\n }\n catch (e) {\n cc.error(e.message, e.stack);\n }\n }\n files.remove(id);\n parsed.remove(id);\n cache(uuid, asset, cacheAsset !== undefined ? cacheAsset : cc.assetManager.cacheAsset); \n }\n subTask.recycle();\n }\n \n var callbacks = repeatItem.callbacks;\n\n for (var i = 0, l = callbacks.length; i < l; i++) {\n\n var cb = callbacks[i];\n asset.addRef && asset.addRef();\n cb.item.content = asset;\n cb.done(err);\n\n }\n\n callbacks.length = 0;\n }\n });\n\n pipeline.async(subTask);\n}\n\nmodule.exports = load;","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport { unpackJSONs, packCustomObjData } from '../platform/deserialize-compiled';\n\nconst downloader = require('./downloader');\nconst Cache = require('./cache');\nconst js = require('../platform/js');\nconst { files } = require('./shared');\n\nvar _loading = new Cache();\n\nfunction isLoading (val) {\n return _loading.has(val.uuid);\n}\n\n\n/**\n * @module cc.AssetManager\n */\n/**\n * !#en\n * Handle the packed asset, include unpacking, loading, cache and so on. It is a singleton. All member can be accessed with `cc.assetManager.packManager`\n * \n * !#zh\n * 处理打包资源,包括拆包,加载,缓存等等,这是一个单例, 所有成员能通过 `cc.assetManager.packManager` 访问\n * \n * @class PackManager\n */\nvar packManager = {\n\n /**\n * !#en\n * Unpack the json, revert to what it was before packing\n * \n * !#zh\n * 拆解 json 包,恢复为打包之前的内容\n * \n * @method unpackJson\n * @param {String[]} pack - The pack\n * @param {Object} json - The content of pack\n * @param {Object} options - Some optional parameters\n * @param {Function} onComplete - Callback when finish unpacking\n * @param {Error} onComplete.err - The occurred error, null indicetes success\n * @param {Object} onComplete.content - The unpacked assets\n * \n * @example\n * downloader.downloadFile('pack.json', {responseType: 'json'}, null, (err, file) => {\n * packManager.unpackJson(['a', 'b'], file, null, (err, data) => console.log(err));\n * });\n * \n * @typescript\n * unpackJson(pack: string[], json: any, options: Record, onComplete?: (err: Error, content: any) => void): void\n */\n unpackJson (pack, json, options, onComplete) {\n\n var out = js.createMap(true), err = null;\n \n if (Array.isArray(json)) {\n\n json = unpackJSONs(json);\n\n if (json.length !== pack.length) {\n cc.errorID(4915);\n }\n for (let i = 0; i < pack.length; i++) {\n var key = pack[i] + '@import';\n out[key] = json[i];\n }\n }\n else {\n const textureType = js._getClassId(cc.Texture2D);\n if (json.type === textureType) {\n if (json.data) {\n var datas = json.data.split('|');\n if (datas.length !== pack.length) {\n cc.errorID(4915);\n }\n for (let i = 0; i < pack.length; i++) {\n out[pack[i] + '@import'] = packCustomObjData(textureType, datas[i], true);\n }\n }\n }\n else {\n err = new Error('unmatched type pack!');\n out = null;\n }\n }\n onComplete && onComplete(err, out);\n },\n\n init () {\n _loading.clear();\n },\n\n /**\n * !#en\n * Register custom handler if you want to change default behavior or extend packManager to unpack other format pack\n * \n * !#zh\n * 当你想修改默认行为或者拓展 packManager 来拆分其他格式的包时可以注册自定义的 handler\n * \n * @method register\n * @param {string|Object} type - Extension likes '.bin' or map likes {'.bin': binHandler, '.ab': abHandler}\n * @param {Function} [handler] - handler\n * @param {string} handler.packUuid - The uuid of pack\n * @param {*} handler.data - The content of pack\n * @param {Object} handler.options - Some optional parameters\n * @param {Function} handler.onComplete - Callback when finishing unpacking\n * \n * @example\n * packManager.register('.bin', (packUuid, file, options, onComplete) => onComplete(null, null));\n * packManager.register({'.bin': (packUuid, file, options, onComplete) => onComplete(null, null), '.ab': (packUuid, file, options, onComplete) => onComplete(null, null)});\n * \n * @typescript\n * register(type: string, handler: (packUuid: string, data: any, options: Record, onComplete: (err: Error, content: any) => void) => void): void\n * register(map: Record, onComplete: (err: Error, content: any) => void) => void>): void\n */\n register (type, handler) {\n if (typeof type === 'object') {\n js.mixin(unpackers, type);\n }\n else {\n unpackers[type] = handler;\n }\n },\n \n /**\n * !#en\n * Use corresponding handler to unpack package\n * \n * !#zh\n * 用对应的 handler 来进行解包 \n * \n * @method unpack\n * @param {String[]} pack - The uuid of packed assets \n * @param {*} data - The packed data\n * @param {string} type - The type indicates that which handler should be used to download, such as '.jpg'\n * @param {Object} options - Some optional parameter\n * @param {Function} onComplete - callback when finishing unpacking\n * @param {Error} onComplete.err - The occurred error, null indicetes success\n * @param {*} onComplete.data - Original assets\n * \n * @example\n * downloader.downloadFile('pack.json', {responseType: 'json'}, null, (err, file) => {\n * packManager.unpack(['2fawq123d', '1zsweq23f'], file, '.json', null, (err, data) => console.log(err));\n * });\n * \n * @typescript\n * unpack(pack: string[], data: any, type: string, options: Record, onComplete?: (err: Error, data: any) => void): void\n */\n unpack (pack, data, type, options, onComplete) {\n if (!data) {\n onComplete && onComplete(new Error('package data is wrong!'));\n return;\n }\n var unpacker = unpackers[type];\n unpacker(pack, data, options, onComplete);\n },\n\n /**\n * !#en\n * Download request item, If item is not in any package, download as usual. Otherwise, download the corresponding package and unpack it. \n * And then retrieve the corresponding content form it.\n * \n * !#zh\n * 下载请求对象,如果请求对象不在任何包内,则正常下载,否则下载对应的 package 并进行拆解,并取回包内对应的内容\n * \n * @method load\n * @param {RequestItem} item - Some item you want to download\n * @param {Object} options - Some optional parameters\n * @param {Function} onComplete - Callback when finished\n * @param {Err} onComplete.err - The occurred error, null indicetes success\n * @param {*} onComplete.data - The unpacked data retrieved from package\n * \n * @example\n * var requestItem = cc.AssetManager.RequestItem.create();\n * requestItem.uuid = 'fcmR3XADNLgJ1ByKhqcC5Z';\n * requestItem.info = config.getAssetInfo('fcmR3XADNLgJ1ByKhqcC5Z');\n * packManager.load(requestItem, null, (err, data) => console.log(err));\n * \n * @typescript\n * load(item: RequestItem, options: Record, onComplete: (err: Error, data: any) => void): void\n * \n */\n load (item, options, onComplete) {\n // if not in any package, download as uausl\n if (item.isNative || !item.info || !item.info.packs) return downloader.download(item.id, item.url, item.ext, item.options, onComplete);\n\n if (files.has(item.id)) return onComplete(null, files.get(item.id));\n\n var packs = item.info.packs;\n\n // find a loading package\n var pack = packs.find(isLoading);\n \n if (pack) return _loading.get(pack.uuid).push({ onComplete, id: item.id });\n\n // download a new package\n pack = packs[0];\n _loading.add(pack.uuid, [{ onComplete, id: item.id }]);\n\n let url = cc.assetManager._transform(pack.uuid, {ext: pack.ext, bundle: item.config.name});\n\n downloader.download(pack.uuid, url, pack.ext, item.options, function (err, data) {\n files.remove(pack.uuid);\n if (err) {\n cc.error(err.message, err.stack);\n }\n // unpack package\n packManager.unpack(pack.packs, data, pack.ext, item.options, function (err, result) {\n if (!err) {\n for (var id in result) {\n files.add(id, result[id]);\n }\n }\n var callbacks = _loading.remove(pack.uuid);\n for (var i = 0, l = callbacks.length; i < l; i++) {\n var cb = callbacks[i];\n if (err) {\n cb.onComplete(err);\n continue;\n }\n\n var data = result[cb.id];\n if (!data) {\n cb.onComplete(new Error('can not retrieve data from package'));\n }\n else {\n cb.onComplete(null, data);\n }\n }\n });\n });\n }\n};\n\nvar unpackers = {\n '.json': packManager.unpackJson\n};\n\nmodule.exports = packManager;\n","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * @module cc.AssetManager\n */\n\nconst plistParser = require('../platform/CCSAXParser').plistParser;\nconst js = require('../platform/js');\nconst deserialize = require('./deserialize');\nconst Cache = require('./cache');\nconst { isScene } = require('./helper');\nconst { parsed, files } = require('./shared');\nconst { __audioSupport, capabilities } = require('../platform/CCSys');\n\nvar _parsing = new Cache();\n\n/**\n * !#en\n * Parse the downloaded file, it's a singleton, all member can be accessed with `cc.assetManager.parser`\n * \n * !#zh\n * 解析已下载的文件,parser 是一个单例, 所有成员能通过 `cc.assetManaager.parser` 访问\n * \n * @class Parser\n */\nvar parser = {\n /*\n * !#en\n * Parse image file\n * \n * !#zh\n * 解析图片文件\n * \n * @method parseImage\n * @param {Blob} file - The downloaded file\n * @param {Object} options - Some optional paramters \n * @param {Function} [onComplete] - callback when finish parsing.\n * @param {Error} onComplete.err - The occurred error, null indicetes success\n * @param {ImageBitmap|HTMLImageElement} onComplete.img - The parsed content\n * \n * @example\n * downloader.downloadFile('test.jpg', {responseType: 'blob'}, null, (err, file) => {\n * parser.parseImage(file, null, (err, img) => console.log(err));\n * });\n * \n * @typescript\n * parseImage(file: Blob, options: Record, onComplete?: (err: Error, img: ImageBitmap|HTMLImageElement) => void): void\n */\n parseImage (file, options, onComplete) {\n if (capabilities.imageBitmap && file instanceof Blob) {\n let imageOptions = {};\n imageOptions.imageOrientation = options.__flipY__ ? 'flipY' : 'none';\n imageOptions.premultiplyAlpha = options.__premultiplyAlpha__ ? 'premultiply' : 'none';\n createImageBitmap(file, imageOptions).then(function (result) {\n result.flipY = !!options.__flipY__;\n result.premultiplyAlpha = !!options.__premultiplyAlpha__;\n onComplete && onComplete(null, result);\n }, function (err) {\n onComplete && onComplete(err, null);\n });\n }\n else {\n onComplete && onComplete(null, file);\n }\n },\n\n /*\n * !#en\n * Parse audio file\n * \n * !#zh\n * 解析音频文件\n * \n * @method parseAudio\n * @param {ArrayBuffer|HTMLAudioElement} file - The downloaded file\n * @param {Object} options - Some optional paramters\n * @param {Function} onComplete - Callback when finish parsing.\n * @param {Error} onComplete.err - The occurred error, null indicetes success\n * @param {AudioBuffer|HTMLAudioElement} onComplete.audio - The parsed content\n * \n * @example\n * downloader.downloadFile('test.mp3', {responseType: 'arraybuffer'}, null, (err, file) => {\n * parser.parseAudio(file, null, (err, audio) => console.log(err));\n * });\n * \n * @typescript\n * parseAudio(file: ArrayBuffer|HTMLAudioElement, options: Record, onComplete?: (err: Error, audio: AudioBuffer|HTMLAudioElement) => void): void\n */\n parseAudio (file, options, onComplete) {\n if (file instanceof ArrayBuffer) { \n __audioSupport.context.decodeAudioData(file, function (buffer) {\n onComplete && onComplete(null, buffer);\n }, function(e){\n onComplete && onComplete(e, null);\n });\n }\n else {\n onComplete && onComplete(null, file);\n }\n },\n\n /*\n * !#en\n * Parse pvr file \n * \n * !#zh\n * 解析压缩纹理格式 pvr 文件\n * \n * @method parsePVRTex\n * @param {ArrayBuffer|ArrayBufferView} file - The downloaded file\n * @param {Object} options - Some optional paramters\n * @param {Function} onComplete - Callback when finish parsing.\n * @param {Error} onComplete.err - The occurred error, null indicetes success\n * @param {Object} onComplete.pvrAsset - The parsed content\n * \n * @example\n * downloader.downloadFile('test.pvr', {responseType: 'arraybuffer'}, null, (err, file) => {\n * parser.parsePVRTex(file, null, (err, pvrAsset) => console.log(err));\n * });\n * \n * @typescript\n * parsePVRTex(file: ArrayBuffer|ArrayBufferView, options: Record, onComplete: (err: Error, pvrAsset: {_data: Uint8Array, _compressed: boolean, width: number, height: number}) => void): void\n */\n parsePVRTex : (function () {\n //===============//\n // PVR constants //\n //===============//\n // https://github.com/toji/texture-tester/blob/master/js/webgl-texture-util.js#L424\n const PVR_HEADER_LENGTH = 13; // The header length in 32 bit ints.\n const PVR_MAGIC = 0x03525650; //0x50565203;\n \n // Offsets into the header array.\n const PVR_HEADER_MAGIC = 0;\n const PVR_HEADER_FORMAT = 2;\n const PVR_HEADER_HEIGHT = 6;\n const PVR_HEADER_WIDTH = 7;\n const PVR_HEADER_MIPMAPCOUNT = 11;\n const PVR_HEADER_METADATA = 12;\n \n return function (file, options, onComplete) {\n let err = null, out = null;\n try {\n let buffer = file instanceof ArrayBuffer ? file : file.buffer;\n // Get a view of the arrayBuffer that represents the DDS header.\n let header = new Int32Array(buffer, 0, PVR_HEADER_LENGTH);\n \n // Do some sanity checks to make sure this is a valid DDS file.\n if(header[PVR_HEADER_MAGIC] != PVR_MAGIC) {\n throw new Error(\"Invalid magic number in PVR header\");\n }\n \n // Gather other basic metrics and a view of the raw the DXT data.\n let width = header[PVR_HEADER_WIDTH];\n let height = header[PVR_HEADER_HEIGHT];\n let dataOffset = header[PVR_HEADER_METADATA] + 52;\n let pvrtcData = new Uint8Array(buffer, dataOffset);\n \n out = {\n _data: pvrtcData,\n _compressed: true,\n width: width,\n height: height,\n };\n \n }\n catch (e) {\n err = e;\n }\n onComplete && onComplete(err, out);\n };\n })(),\n\n /*\n * !#en\n * Parse pkm file\n * \n * !#zh\n * 解析压缩纹理格式 pkm 文件\n * \n * @method parsePKMTex\n * @param {ArrayBuffer|ArrayBufferView} file - The downloaded file\n * @param {Object} options - Some optional paramters\n * @param {Function} onComplete - Callback when finish parsing.\n * @param {Error} onComplete.err - The occurred error, null indicetes success\n * @param {Object} onComplete.etcAsset - The parsed content\n * \n * @example\n * downloader.downloadFile('test.pkm', {responseType: 'arraybuffer'}, null, (err, file) => {\n * parser.parsePKMTex(file, null, (err, etcAsset) => console.log(err));\n * });\n * \n * @typescript\n * parsePKMTex(file: ArrayBuffer|ArrayBufferView, options: Record, onComplete: (err: Error, etcAsset: {_data: Uint8Array, _compressed: boolean, width: number, height: number}) => void): void\n */\n parsePKMTex: (function () {\n //===============//\n // ETC constants //\n //===============//\n const ETC_PKM_HEADER_SIZE = 16;\n\n const ETC_PKM_FORMAT_OFFSET = 6;\n const ETC_PKM_ENCODED_WIDTH_OFFSET = 8;\n const ETC_PKM_ENCODED_HEIGHT_OFFSET = 10;\n const ETC_PKM_WIDTH_OFFSET = 12;\n const ETC_PKM_HEIGHT_OFFSET = 14;\n\n const ETC1_RGB_NO_MIPMAPS = 0;\n const ETC2_RGB_NO_MIPMAPS = 1;\n const ETC2_RGBA_NO_MIPMAPS = 3;\n\n function readBEUint16(header, offset) {\n return (header[offset] << 8) | header[offset+1];\n }\n return function (file, options, onComplete) {\n let err = null, out = null;\n try {\n let buffer = file instanceof ArrayBuffer ? file : file.buffer;\n let header = new Uint8Array(buffer);\n let format = readBEUint16(header, ETC_PKM_FORMAT_OFFSET);\n if (format !== ETC1_RGB_NO_MIPMAPS && format !== ETC2_RGB_NO_MIPMAPS && format !== ETC2_RGBA_NO_MIPMAPS) {\n return new Error(\"Invalid magic number in ETC header\");\n }\n let width = readBEUint16(header, ETC_PKM_WIDTH_OFFSET);\n let height = readBEUint16(header, ETC_PKM_HEIGHT_OFFSET);\n let encodedWidth = readBEUint16(header, ETC_PKM_ENCODED_WIDTH_OFFSET);\n let encodedHeight = readBEUint16(header, ETC_PKM_ENCODED_HEIGHT_OFFSET);\n let etcData = new Uint8Array(buffer, ETC_PKM_HEADER_SIZE);\n out = {\n _data: etcData,\n _compressed: true,\n width: width,\n height: height\n };\n \n }\n catch (e) {\n err = e;\n }\n onComplete && onComplete(err, out);\n }\n })(),\n\n /*\n * !#en\n * Parse plist file\n * \n * !#zh\n * 解析 plist 文件\n * \n * @method parsePlist\n * @param {string} file - The downloaded file\n * @param {Object} options - Some optional paramters\n * @param {Function} onComplete - Callback when finish parsing\n * @param {Error} onComplete.err - The occurred error, null indicetes success\n * @param {*} onComplete.data - The parsed content\n * \n * @example\n * downloader.downloadFile('test.plist', {responseType: 'text'}, null, (err, file) => {\n * parser.parsePlist(file, null, (err, data) => console.log(err));\n * });\n * \n * @typescript\n * parsePlist(file: string, options: Record, onComplete?: (err: Error, data: any) => void): void\n */\n parsePlist (file, options, onComplete) {\n var err = null;\n var result = plistParser.parse(file);\n if (!result) err = new Error('parse failed');\n onComplete && onComplete(err, result);\n },\n\n /*\n * !#en\n * Deserialize asset file\n * \n * !#zh\n * 反序列化资源文件\n * \n * @method parseImport\n * @param {Object} file - The serialized json\n * @param {Object} options - Some optional paramters\n * @param {Function} onComplete - Callback when finish parsing\n * @param {Error} onComplete.err - The occurred error, null indicetes success\n * @param {Asset} onComplete.asset - The parsed content\n * \n * @example\n * downloader.downloadFile('test.json', {responseType: 'json'}, null, (err, file) => {\n * parser.parseImport(file, null, (err, data) => console.log(err));\n * });\n * \n * @typescript\n * parseImport (file: any, options: Record, onComplete?: (err: Error, asset: cc.Asset) => void): void\n */\n parseImport (file, options, onComplete) {\n if (!file) return onComplete && onComplete(new Error('Json is empty'));\n var result, err = null;\n try {\n result = deserialize(file, options);\n }\n catch (e) {\n err = e;\n }\n onComplete && onComplete(err, result);\n },\n\n init () {\n _parsing.clear();\n },\n\n /**\n * !#en\n * Register custom handler if you want to change default behavior or extend parser to parse other format file\n * \n * !#zh\n * 当你想修改默认行为或者拓展 parser 来解析其他格式文件时可以注册自定义的handler\n * \n * @method register\n * @param {string|Object} type - Extension likes '.jpg' or map likes {'.jpg': jpgHandler, '.png': pngHandler}\n * @param {Function} [handler] - The corresponding handler\n * @param {*} handler.file - File\n * @param {Object} handler.options - Some optional paramter\n * @param {Function} handler.onComplete - callback when finishing parsing\n * \n * @example\n * parser.register('.tga', (file, options, onComplete) => onComplete(null, null));\n * parser.register({'.tga': (file, options, onComplete) => onComplete(null, null), '.ext': (file, options, onComplete) => onComplete(null, null)});\n * \n * @typescript\n * register(type: string, handler: (file: any, options: Record, onComplete: (err: Error, data: any) => void) => void): void\n * register(map: Record, onComplete: (err: Error, data: any) => void) => void>): void\n */\n register (type, handler) {\n if (typeof type === 'object') {\n js.mixin(parsers, type);\n }\n else {\n parsers[type] = handler;\n }\n },\n\n /**\n * !#en\n * Use corresponding handler to parse file \n * \n * !#zh\n * 使用对应的handler来解析文件\n * \n * @method parse\n * @param {string} id - The id of file\n * @param {*} file - File\n * @param {string} type - The corresponding type of file, likes '.jpg'.\n * @param {Object} options - Some optional paramters will be transferred to the corresponding handler.\n * @param {Function} onComplete - callback when finishing downloading\n * @param {Error} onComplete.err - The occurred error, null indicetes success\n * @param {*} onComplete.contetnt - The parsed file\n * \n * @example\n * downloader.downloadFile('test.jpg', {responseType: 'blob'}, null, (err, file) => {\n * parser.parse('test.jpg', file, '.jpg', null, (err, img) => console.log(err));\n * });\n * \n * @typescript\n * parse(id: string, file: any, type: string, options: Record, onComplete: (err: Error, content: any) => void): void\n */\n parse (id, file, type, options, onComplete) {\n let parsedAsset, parsing, parseHandler;\n if (parsedAsset = parsed.get(id)) {\n onComplete(null, parsedAsset);\n }\n else if (parsing = _parsing.get(id)){\n parsing.push(onComplete);\n }\n else if (parseHandler = parsers[type]){\n _parsing.add(id, [onComplete]);\n parseHandler(file, options, function (err, data) {\n if (err) {\n files.remove(id);\n } \n else if (!isScene(data)){\n parsed.add(id, data);\n }\n let callbacks = _parsing.remove(id);\n for (let i = 0, l = callbacks.length; i < l; i++) {\n callbacks[i](err, data);\n }\n });\n }\n else {\n onComplete(null, file);\n }\n }\n};\n\nvar parsers = {\n '.png' : parser.parseImage,\n '.jpg' : parser.parseImage,\n '.bmp' : parser.parseImage,\n '.jpeg' : parser.parseImage,\n '.gif' : parser.parseImage,\n '.ico' : parser.parseImage,\n '.tiff' : parser.parseImage,\n '.webp' : parser.parseImage,\n '.image' : parser.parseImage,\n '.pvr' : parser.parsePVRTex,\n '.pkm' : parser.parsePKMTex,\n // Audio\n '.mp3' : parser.parseAudio,\n '.ogg' : parser.parseAudio,\n '.wav' : parser.parseAudio,\n '.m4a' : parser.parseAudio,\n\n // plist\n '.plist' : parser.parsePlist,\n 'import' : parser.parseImport\n};\n\nmodule.exports = parser;","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n/**\n * @module cc.AssetManager\n */\n\nconst Task = require('./task');\n\nvar _pipelineId = 0;\n/**\n * !#en\n * Pipeline can execute the task for some effect.\n * \n * !#zh\n * 管线能执行任务达到某个效果\n * \n * @class Pipeline\n */\nfunction Pipeline (name, funcs) {\n if (!Array.isArray(funcs)) {\n cc.warn('funcs must be an array');\n return;\n } \n \n /**\n * !#en\n * The id of pipeline\n * \n * !#zh\n * 管线的 id\n * \n * @property id\n * @type {Number}\n */\n this.id = _pipelineId++;\n\n /**\n * !#en\n * The name of pipeline\n * \n * !#zh\n * 管线的名字\n * \n * @property name\n * @type {String}\n */\n this.name = name;\n\n /**\n * !#en\n * All pipes of pipeline\n * \n * !#zh\n * 所有的管道\n * \n * @property pipes\n * @type {Function[]}\n */\n this.pipes = [];\n\n for (var i = 0, l = funcs.length; i < l; i++) {\n if (typeof funcs[i] === 'function') {\n this.pipes.push(funcs[i]);\n }\n }\n\n}\n\nPipeline.prototype = {\n\n\n /**\n * !#en\n * Create a new pipeline\n * \n * !#zh\n * 创建一个管线\n * \n * @method constructor\n * @param {string} name - The name of pipeline\n * @param {Function[]} funcs - The array of pipe, every pipe must be function which take two parameters, the first is a `Task` flowed in pipeline, the second is complete callback\n * \n * @example\n * var pipeline = new Pipeline('download', [\n * (task, done) => {\n * var url = task.input;\n * cc.assetManager.downloader.downloadFile(url, null, null, (err, result) => {\n * task.output = result;\n * done(err);\n * });\n * },\n * (task, done) => {\n * var text = task.input;\n * var json = JSON.stringify(text);\n * task.output = json;\n * done();\n * }\n * ]);\n * \n * @typescript\n * constructor(name: string, funcs: Array<(task: Task, done?: (err: Error) => void) => void>)\n */\n constructor: Pipeline,\n\n /**\n * !#en\n * At specific point insert a new pipe to pipeline\n * \n * !#zh\n * 在某个特定的点为管线插入一个新的 pipe\n * \n * @method insert\n * @param {Function} func - The new pipe\n * @param {Task} func.task - The task handled with pipeline will be transferred to this function\n * @param {Function} [func.callback] - Callback you need to invoke manually when this pipe is finished. if the pipeline is synchronous, callback is unnecessary.\n * @param {number} index - The specific point you want to insert at.\n * @return {Pipeline} pipeline\n * \n * @example\n * var pipeline = new Pipeline('test', []);\n * pipeline.insert((task, done) => {\n * // do something\n * done();\n * }, 0);\n * \n * @typescript\n * insert(func: (task: Task, callback?: (err: Error) => void) => void, index: number): Pipeline\n */\n insert (func, index) {\n if (typeof func !== 'function' || index > this.pipes.length) {\n cc.warnID(4921);\n return;\n }\n \n this.pipes.splice(index, 0, func);\n return this;\n },\n\n\n /**\n * !#en\n * Append a new pipe to the pipeline\n * \n * !#zh\n * 添加一个管道到管线中\n * \n * @method append\n * @param {Function} func - The new pipe\n * @param {Task} func.task - The task handled with pipeline will be transferred to this function\n * @param {Function} [func.callback] - Callback you need to invoke manually when this pipe is finished. if the pipeline is synchronous, callback is unnecessary.\n * @return {Pipeline} pipeline\n * \n * @example\n * var pipeline = new Pipeline('test', []);\n * pipeline.append((task, done) => {\n * // do something\n * done();\n * });\n * \n * @typescript\n * append(func: (task: Task, callback?: (err: Error) => void) => void): Pipeline\n */\n append (func) {\n if (typeof func !== 'function') {\n return;\n }\n \n this.pipes.push(func);\n return this;\n },\n\n /**\n * !#en\n * Remove pipe which at specific point\n * \n * !#zh\n * 移除特定位置的管道\n * \n * @method remove\n * @param {number} index - The specific point\n * @return {Pipeline} pipeline\n * \n * @example\n * var pipeline = new Pipeline('test', (task, done) => {\n * // do something\n * done(); \n * });\n * pipeline.remove(0);\n * \n * @typescript\n * remove(index: number): Pipeline\n */\n remove (index) {\n if (typeof index !== 'number') {\n return;\n }\n \n this.pipes.splice(index, 1);\n return this;\n },\n\n /**\n * !#en\n * Execute task synchronously\n * \n * !#zh\n * 同步执行任务\n * \n * @method sync\n * @param {Task} task - The task will be executed\n * @returns {*} result\n * \n * @example\n * var pipeline = new Pipeline('sync', [(task) => {\n * let input = task.input;\n * task.output = doSomething(task.input);\n * }]);\n * \n * var task = new Task({input: 'test'});\n * console.log(pipeline.sync(task));\n * \n * @typescript\n * sync(task: Task): any \n */\n sync (task) {\n var pipes = this.pipes;\n if (!(task instanceof Task) || pipes.length === 0) return;\n if (task.output != null) {\n task.input = task.output;\n task.output = null;\n }\n task._isFinish = false;\n for (var i = 0, l = pipes.length; i < l;) {\n var pipe = pipes[i];\n var result = pipe(task);\n if (result) {\n task._isFinish = true;\n return result;\n }\n i++;\n if (i !== l) {\n task.input = task.output;\n task.output = null;\n }\n }\n task._isFinish = true;\n return task.output;\n },\n\n /**\n * !#en\n * Execute task asynchronously\n * \n * !#zh\n * 异步执行任务\n * \n * @method async\n * @param {Task} task - The task will be executed\n * \n * @example\n * var pipeline = new Pipeline('sync', [(task, done) => {\n * let input = task.input;\n * task.output = doSomething(task.input);\n * done();\n * }]);\n * var task = new Task({input: 'test', onComplete: (err, result) => console.log(result)});\n * pipeline.async(task);\n * \n * @typescript\n * async(task: Task): void\n */\n async (task) {\n var pipes = this.pipes;\n if (!(task instanceof Task) || pipes.length === 0) return;\n if (task.output != null) {\n task.input = task.output;\n task.output = null;\n }\n task._isFinish = false;\n this._flow(0, task);\n },\n\n _flow (index, task) {\n var self = this;\n var pipe = this.pipes[index];\n pipe(task, function (result) {\n if (result) {\n task._isFinish = true;\n task.onComplete && task.onComplete(result);\n }\n else {\n index++;\n if (index < self.pipes.length) {\n // move output to input\n task.input = task.output;\n task.output = null;\n self._flow(index, task);\n }\n else {\n task._isFinish = true;\n task.onComplete && task.onComplete(result, task.output);\n }\n }\n });\n }\n};\n\nmodule.exports = Pipeline;\n","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nconst Task = require('./task');\nconst { transformPipeline, RequestType } = require('./shared');\n\nfunction preprocess (task, done) {\n var options = task.options, subOptions = Object.create(null), leftOptions = Object.create(null);\n\n for (var op in options) {\n switch (op) {\n // can't set these attributes in options\n case RequestType.PATH:\n case RequestType.UUID:\n case RequestType.DIR:\n case RequestType.SCENE:\n case RequestType.URL : break;\n // only need these attributes to transform url\n case '__requestType__':\n case '__isNative__':\n case 'ext' :\n case 'type':\n case '__nativeName__':\n case 'audioLoadMode':\n case 'bundle':\n subOptions[op] = options[op];\n break;\n // other settings, left to next pipe\n case '__exclude__':\n case '__outputAsArray__':\n leftOptions[op] = options[op];\n break;\n default: \n subOptions[op] = options[op];\n leftOptions[op] = options[op];\n break;\n }\n }\n task.options = leftOptions;\n\n // transform url\n let subTask = Task.create({input: task.input, options: subOptions});\n var err = null;\n try {\n task.output = task.source = transformPipeline.sync(subTask);\n }\n catch (e) {\n err = e;\n for (var i = 0, l = subTask.output.length; i < l; i++) {\n subTask.output[i].recycle();\n }\n }\n subTask.recycle();\n done(err);\n}\n\nmodule.exports = preprocess;","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nconst dependUtil = require('./depend-util');\nconst Cache = require('./cache');\nrequire('../assets/CCAsset');\nconst { assets } = require('./shared');\nconst { callInNextTick } = require('../platform/utils');\n\nfunction visitAsset (asset, deps) {\n // Skip assets generated programmatically or by user (e.g. label texture)\n if (!asset._uuid) {\n return;\n }\n deps.push(asset._uuid);\n}\n\nfunction visitComponent (comp, deps) {\n var props = Object.getOwnPropertyNames(comp);\n for (let i = 0; i < props.length; i++) {\n var propName = props[i];\n if (propName === 'node' || propName === '__eventTargets') continue;\n var value = comp[propName];\n if (typeof value === 'object' && value) {\n if (Array.isArray(value)) {\n for (let j = 0; j < value.length; j++) {\n let val = value[j];\n if (val instanceof cc.Asset) {\n visitAsset(val, deps);\n }\n }\n }\n else if (!value.constructor || value.constructor === Object) {\n let keys = Object.getOwnPropertyNames(value);\n for (let j = 0; j < keys.length; j++) {\n let val = value[keys[j]];\n if (val instanceof cc.Asset) {\n visitAsset(val, deps);\n }\n }\n }\n else if (value instanceof cc.Asset) {\n visitAsset(value, deps);\n }\n }\n }\n}\n\nlet _temp = [];\n\nfunction visitNode (node, deps) {\n for (let i = 0; i < node._components.length; i++) {\n visitComponent(node._components[i], deps);\n }\n for (let i = 0; i < node._children.length; i++) {\n visitNode(node._children[i], deps);\n }\n}\n\nfunction descendOpRef (asset, refs, exclude, op) {\n exclude.push(asset._uuid);\n var depends = dependUtil.getDeps(asset._uuid);\n for (let i = 0, l = depends.length; i < l; i++) {\n var dependAsset = assets.get(depends[i]);\n if (dependAsset) {\n let uuid = dependAsset._uuid;\n if (!(uuid in refs)) { \n refs[uuid] = dependAsset.refCount + op;\n }\n else {\n refs[uuid] += op;\n }\n if (exclude.includes(uuid)) continue; \n descendOpRef(dependAsset, refs, exclude, op);\n }\n }\n}\n\nfunction checkCircularReference (asset) {\n // check circular reference\n var refs = Object.create(null);\n refs[asset._uuid] = asset.refCount;\n descendOpRef(asset, refs, _temp, -1);\n _temp.length = 0;\n if (refs[asset._uuid] !== 0) return refs[asset._uuid];\n\n for (let uuid in refs) {\n if (refs[uuid] !== 0) {\n descendOpRef(assets.get(uuid), refs, _temp, 1);\n }\n }\n _temp.length = 0;\n\n return refs[asset._uuid];\n}\n\nvar _persistNodeDeps = new Cache();\nvar _toDelete = new Cache();\nvar eventListener = false;\n\nfunction freeAssets () {\n eventListener = false;\n _toDelete.forEach(function (asset) {\n releaseManager._free(asset);\n });\n _toDelete.clear();\n}\n\nvar releaseManager = {\n init () {\n _persistNodeDeps.clear();\n _toDelete.clear();\n },\n\n _addPersistNodeRef (node) {\n var deps = [];\n visitNode(node, deps);\n for (let i = 0, l = deps.length; i < l; i++) {\n var dependAsset = assets.get(deps[i]);\n if (dependAsset) {\n dependAsset.addRef();\n }\n }\n _persistNodeDeps.add(node.uuid, deps);\n },\n\n _removePersistNodeRef (node) {\n if (_persistNodeDeps.has(node.uuid)) {\n var deps = _persistNodeDeps.get(node.uuid);\n for (let i = 0, l = deps.length; i < l; i++) {\n var dependAsset = assets.get(deps[i]);\n if (dependAsset) {\n dependAsset.decRef();\n }\n }\n _persistNodeDeps.remove(node.uuid);\n }\n },\n\n // do auto release\n _autoRelease (oldScene, newScene, persistNodes) { \n\n if (oldScene) {\n var childs = dependUtil.getDeps(oldScene._id);\n for (let i = 0, l = childs.length; i < l; i++) {\n let asset = assets.get(childs[i]);\n asset && asset.decRef(CC_TEST || oldScene.autoReleaseAssets);\n }\n var dependencies = dependUtil._depends.get(oldScene._id);\n if (dependencies && dependencies.persistDeps) {\n var persistDeps = dependencies.persistDeps;\n for (let i = 0, l = persistDeps.length; i < l; i++) {\n let asset = assets.get(persistDeps[i]);\n asset && asset.decRef(CC_TEST || oldScene.autoReleaseAssets);\n }\n }\n oldScene._id !== newScene._id && dependUtil.remove(oldScene._id);\n }\n\n var sceneDeps = dependUtil._depends.get(newScene._id);\n sceneDeps && (sceneDeps.persistDeps = []);\n // transfer refs from persist nodes to new scene\n for (let key in persistNodes) {\n var node = persistNodes[key];\n var deps = _persistNodeDeps.get(node.uuid);\n for (let i = 0, l = deps.length; i < l; i++) {\n var dependAsset = assets.get(deps[i]);\n if (dependAsset) {\n dependAsset.addRef();\n }\n }\n if (sceneDeps) {\n sceneDeps.persistDeps.push.apply(sceneDeps.persistDeps, deps);\n }\n }\n },\n\n _free (asset, force) {\n _toDelete.remove(asset._uuid);\n\n if (!cc.isValid(asset, true)) return;\n\n if (!force) {\n if (asset.refCount > 0) {\n if (checkCircularReference(asset) > 0) return; \n }\n }\n \n // remove from cache\n assets.remove(asset._uuid);\n var depends = dependUtil.getDeps(asset._uuid);\n for (let i = 0, l = depends.length; i < l; i++) {\n var dependAsset = assets.get(depends[i]);\n if (dependAsset) {\n dependAsset.decRef(false);\n releaseManager._free(dependAsset, false);\n }\n }\n asset.destroy();\n dependUtil.remove(asset._uuid);\n },\n\n tryRelease (asset, force) {\n if (!(asset instanceof cc.Asset)) return;\n if (force) {\n releaseManager._free(asset, force);\n }\n else {\n _toDelete.add(asset._uuid, asset);\n if (!eventListener) {\n eventListener = true;\n callInNextTick(freeAssets);\n }\n }\n }\n};\n\nmodule.exports = releaseManager;","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * @module cc.AssetManager\n */\n\nvar MAX_DEAD_NUM = 500;\nvar _deadPool = [];\n\n/**\n * !#en\n * A collection of information about a request\n * \n * !#zh\n * 请求的相关信息集合\n * \n * @class RequestItem\n */\nfunction RequestItem () {\n\n this._id = '';\n\n /**\n * !#en \n * The uuid of request\n * \n * !#zh \n * 请求资源的uuid\n * \n * @property uuid\n * @type {String}\n */\n this.uuid = '';\n\n /**\n * !#en \n * The final url of request\n * \n * !#zh\n * 请求的最终url\n * \n * @property url\n * @type {String}\n */\n this.url = '';\n\n /**\n * !#en\n * The extension name of asset\n * \n * !#zh\n * 资源的扩展名\n * \n * @property ext\n * @type {String}\n */\n this.ext = '.json';\n\n /**\n * !#en\n * The content of asset\n * \n * !#zh\n * 资源的内容\n * \n * @property content\n * @type {*}\n */\n this.content = null;\n\n /**\n * !#en\n * The file of asset\n * \n * !#zh\n * 资源的文件\n * \n * @property file\n * @type {*}\n */\n this.file = null;\n\n /**\n * !#en\n * The information of asset\n * \n * !#zh\n * 资源的相关信息\n * \n * @property info\n * @type {Object}\n */\n this.info = null;\n\n this.config = null;\n\n /**\n * !#en\n * Whether or not it is native asset\n * \n * !#zh\n * 资源是否是原生资源\n * \n * @property isNative\n * @type {Boolean}\n */\n this.isNative = false;\n\n /**\n * !#en\n * Custom options\n * \n * !#zh\n * 自定义参数\n * \n * @property options\n * @type {Object}\n */\n this.options = Object.create(null);\n}\n\nRequestItem.prototype = {\n\n /**\n * !#en\n * Create a request item\n * \n * !#zh\n * 创建一个 request item\n * \n * @method constructor\n * \n * @typescript\n * constructor()\n */\n constructor: RequestItem,\n\n /**\n * !#en\n * The id of request, combined from uuid and isNative\n * \n * !#zh\n * 请求的 id, 由 uuid 和 isNative 组合而成\n * \n * @property id\n * @type {String}\n */\n get id () {\n if (!this._id) {\n this._id = this.uuid + '@' + (this.isNative ? 'native' : 'import');\n }\n return this._id;\n },\n\n /**\n * !#en\n * Recycle this for reuse\n * \n * !#zh\n * 回收 requestItem 用于复用\n * \n * @method recycle\n * \n * @typescript\n * recycle(): void\n */\n recycle () {\n if (_deadPool.length === MAX_DEAD_NUM) return;\n this._id = '';\n this.uuid = '';\n this.url = '';\n this.ext = '.json';\n this.content = null;\n this.file = null;\n this.info = null;\n this.config = null;\n this.isNative = false;\n this.options = Object.create(null);\n _deadPool.push(this);\n }\n};\n\n/**\n * !#en\n * Create a new request item from pool\n * \n * !#zh\n * 从对象池中创建 requestItem\n * \n * @static\n * @method create\n * @returns {RequestItem} requestItem\n * \n * @typescript \n * create(): RequestItem\n */\nRequestItem.create = function () {\n var out = null;\n if (_deadPool.length !== 0) {\n out = _deadPool.pop();\n }\n else {\n out = new RequestItem();\n }\n\n return out;\n};\n\nmodule.exports = RequestItem;","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nconst Cache = require('./cache');\nconst Pipeline = require('./pipeline');\n\nvar assets = new Cache();\nvar files = new Cache();\nvar parsed = new Cache();\nvar bundles = new Cache();\nvar pipeline = new Pipeline('normal load', []);\nvar fetchPipeline = new Pipeline('fetch', []);\nvar transformPipeline = new Pipeline('transform url', []);\n\n/**\n * @module cc.AssetManager\n */\n\nvar RequestType = {\n \n UUID: 'uuid',\n\n PATH: 'path',\n\n DIR: 'dir',\n\n URL: 'url',\n\n SCENE: 'scene'\n};\n\n/**\n * !#en\n * The builtin bundles \n * \n * !#zh\n * 内置 bundle\n * \n * @enum BuiltinBundleName\n */\nvar BuiltinBundleName = {\n /**\n * !#en\n * The builtin bundle corresponds to 'assets/resources'.\n * \n * !#zh\n * 内置 bundle, 对应 'assets/resources' 目录\n * \n * @property RESOURCES\n * @readonly\n * @type {String}\n */\n RESOURCES: 'resources',\n\n /**\n * !#en\n * The builtin bundle corresponds to 'internal/resources'.\n * \n * !#zh\n * 内置 bundle, 对应 'internal/resources' 目录\n * \n * @property INTERNAL\n * @readonly\n * @type {String}\n */\n INTERNAL: 'internal',\n\n /**\n * !#en\n * The builtin bundle\n * \n * !#zh\n * 内置 bundle\n * \n * @property MAIN\n * @readonly\n * @type {String}\n */\n MAIN: 'main',\n\n /**\n * !#en\n * The builtin bundle, exists when Start Scene asset bundle is checked on the project building panel\n * \n * !#zh\n * 内置 bundle, 如果构建面板开启了首场景分包,则会有 START_SCENE bundle\n * \n * @property START_SCENE\n * @readonly\n * @type {String}\n */\n START_SCENE: 'start-scene',\n};\n\nmodule.exports = { assets, files, parsed, pipeline, fetchPipeline, transformPipeline, RequestType, bundles, BuiltinBundleName };","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * @module cc.AssetManager\n */\n\nvar _taskId = 0;\nvar MAX_DEAD_NUM = 500;\nvar _deadPool = [];\n\n/**\n * !#en\n * Task is used to run in the pipeline for some effect\n * \n * !#zh\n * 任务用于在管线中运行以达成某种效果\n * \n * @class Task\n */\nfunction Task (options) {\n /**\n * !#en\n * The id of task\n * \n * !#zh\n * 任务id\n * \n * @property id\n * @type {Number}\n */\n this.id = _taskId++;\n\n this._isFinish = true;\n\n /**\n * !#en\n * The callback when task is completed\n * \n * !#zh\n * 完成回调\n * \n * @property onComplete\n * @type {Function}\n */\n this.onComplete = null;\n\n /**\n * !#en\n * The callback of progression\n * \n * !#zh\n * 进度回调\n * \n * @property onProgress\n * @type {Function}\n */\n this.onProgress = null;\n\n /**\n * !#en\n * The callback when something goes wrong\n * \n * !#zh\n * 错误回调\n * \n * @property onError\n * @type {Function}\n */\n this.onError = null;\n\n /**\n * !#en\n * The source of task\n * \n * !#zh\n * 任务的源\n * \n * @property source\n * @type {*}\n */\n this.source = null;\n\n /**\n * !#en\n * The output of task\n * \n * !#zh\n * 任务的输出\n * \n * @property output\n * @type {*}\n */\n this.output = null\n\n /**\n * !#en\n * The input of task\n * \n * !#zh\n * 任务的输入\n * \n * @property input\n * @type {*}\n */\n this.input = null;\n\n /**\n * !#en\n * The progression of task\n * \n * !#zh\n * 任务的进度\n * \n * @property progress\n * @type {*}\n */\n this.progress = null;\n\n /**\n * !#en\n * Custom options\n * \n * !#zh\n * 自定义参数\n * \n * @property options\n * @type {Object}\n */\n this.options = null;\n this.set(options);\n};\n\nTask.prototype = {\n \n /**\n * !#en\n * Create a new Task\n * \n * !#zh\n * 创建一个任务\n * \n * @method constructor\n * @param {Object} [options] - Some optional paramters\n * @param {Function} [options.onComplete] - Callback when the task is completed, if the pipeline is synchronous, onComplete is unnecessary.\n * @param {Function} [options.onProgress] - Continuously callback when the task is runing, if the pipeline is synchronous, onProgress is unnecessary.\n * @param {Function} [options.onError] - Callback when something goes wrong, if the pipeline is synchronous, onError is unnecessary.\n * @param {*} options.input - Something will be handled with pipeline\n * @param {*} [options.progress] - Progress information, you may need to assign it manually when multiple pipeline share one progress\n * @param {Object} [options.options] - Custom parameters\n * \n * @typescript\n * constructor(options?: {onComplete?: (err: Error, result: any) => void, onError?: () => void, onProgress?: Function, input: any, progress?: any, options?: Record})\n */\n constructor: Task,\n\n /**\n * !#en\n * Set paramters of this task\n * \n * !#zh\n * 设置任务的参数\n * \n * @method set\n * @param {Object} [options] - Some optional paramters\n * @param {Function} [options.onComplete] - Callback when the task complete, if the pipeline is synchronous, onComplete is unnecessary.\n * @param {Function} [options.onProgress] - Continuously callback when the task is runing, if the pipeline is synchronous, onProgress is unnecessary.\n * @param {Function} [options.onError] - Callback when something goes wrong, if the pipeline is synchronous, onError is unnecessary.\n * @param {*} options.input - Something will be handled with pipeline\n * @param {*} [options.progress] - Progress information, you may need to assign it manually when multiple pipeline share one progress\n * @param {Object} [options.options] - Custom parameters\n * \n * @example \n * var task = new Task();\n * task.set({input: ['test'], onComplete: (err, result) => console.log(err), onProgress: (finish, total) => console.log(finish / total)});\n * \n * @typescript\n * set(options?: {onComplete?: (err: Error, result: any) => void, onError?: () => void, onProgress?: Function, input: any, progress?: any, options?: Record}): void\n */\n set (options) {\n options = options || Object.create(null);\n this.onComplete = options.onComplete;\n this.onProgress = options.onProgress;\n this.onError = options.onError;\n this.source = this.input = options.input;\n this.output = null;\n this.progress = options.progress;\n // custom data\n this.options = options.options || Object.create(null);\n },\n\n /**\n * !#en\n * Dispatch event\n * \n * !#zh\n * 发布事件\n * \n * @method dispatch\n * @param {string} event - The event name\n * @param {*} param1 - Parameter 1\n * @param {*} param2 - Parameter 2\n * @param {*} param3 - Parameter 3\n * @param {*} param4 - Parameter 4\n * \n * @example\n * var task = Task.create();\n * Task.onComplete = (msg) => console.log(msg);\n * Task.dispatch('complete', 'hello world');\n * \n * @typescript\n * dispatch(event: string, param1?: any, param2?: any, param3?: any, param4?: any): void\n */\n dispatch (event, param1, param2, param3, param4) {\n switch (event) {\n case 'complete' :\n this.onComplete && this.onComplete(param1, param2, param3, param4);\n break; \n case 'progress': \n this.onProgress && this.onProgress(param1, param2, param3, param4);\n break;\n case 'error': \n this.onError && this.onError(param1, param2, param3, param4);\n break;\n default:\n var str = 'on' + event[0].toUpperCase() + event.substr(1);\n if (typeof this[str] === 'function') {\n this[str](param1, param2, param3, param4);\n }\n break;\n }\n },\n\n /**\n * !#en\n * Recycle this for reuse\n * \n * !#zh\n * 回收 task 用于复用\n * \n * @method recycle\n * \n * @typescript\n * recycle(): void\n */\n recycle () {\n if (_deadPool.length === MAX_DEAD_NUM) return;\n this.onComplete = null;\n this.onProgress = null;\n this.onError = null;\n this.source = this.output = this.input = null;\n this.progress = null;\n this.options = null;\n _deadPool.push(this);\n },\n\n /**\n * !#en\n * Whether or not this task is completed\n * \n * !#zh\n * 此任务是否已经完成\n * \n * @property isFinish\n * @type {Boolean}\n */\n get isFinish () {\n return this._isFinish;\n }\n};\n\n/**\n * !#en\n * Create a new task from pool\n * \n * !#zh\n * 从对象池中创建 task\n * \n * @static\n * @method create\n * @param {Object} [options] - Some optional paramters\n * @param {Function} [options.onComplete] - Callback when the task complete, if the pipeline is synchronous, onComplete is unnecessary.\n * @param {Function} [options.onProgress] - Continuously callback when the task is runing, if the pipeline is synchronous, onProgress is unnecessary.\n * @param {Function} [options.onError] - Callback when something goes wrong, if the pipeline is synchronous, onError is unnecessary.\n * @param {*} options.input - Something will be handled with pipeline\n * @param {*} [options.progress] - Progress information, you may need to assign it manually when multiple pipeline share one progress\n * @param {Object} [options.options] - Custom parameters\n * @returns {Task} task\n * \n * @typescript \n * create(options?: {onComplete?: (err: Error, result: any) => void, onError?: () => void, onProgress?: Function, input: any, progress?: any, options?: Record}): Task\n */\nTask.create = function (options) {\n var out = null;\n if (_deadPool.length !== 0) {\n out = _deadPool.pop();\n out.set(options);\n }\n else {\n out = new Task(options);\n }\n\n return out;\n};\n\nmodule.exports = Task;","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nconst { decodeUuid } = require('./helper');\nconst RequestItem = require('./request-item');\nconst { RequestType, bundles } = require('./shared');\n\nfunction parse (task) {\n\n var input = task.input, options = task.options;\n input = Array.isArray(input) ? input : [ input ];\n\n task.output = [];\n for (var i = 0; i < input.length; i ++ ) {\n var item = input[i];\n var out = RequestItem.create();\n if (typeof item === 'string') {\n item = Object.create(null);\n item[options.__requestType__ || RequestType.UUID] = input[i];\n }\n if (typeof item === 'object') {\n // local options will overlap glabal options\n cc.js.addon(item, options);\n if (item.preset) {\n cc.js.addon(item, cc.assetManager.presets[item.preset]);\n }\n for (var key in item) {\n switch (key) {\n case RequestType.UUID: \n var uuid = out.uuid = decodeUuid(item.uuid);\n if (bundles.has(item.bundle)) {\n var config = bundles.get(item.bundle)._config;\n var info = config.getAssetInfo(uuid);\n if (info && info.redirect) {\n if (!bundles.has(info.redirect)) throw new Error(`Please load bundle ${info.redirect} first`);\n config = bundles.get(info.redirect)._config;\n info = config.getAssetInfo(uuid);\n }\n out.config = config;\n out.info = info;\n }\n out.ext = item.ext || '.json';\n break;\n case '__requestType__':\n case 'ext': \n case 'bundle':\n case 'preset':\n case 'type': break;\n case RequestType.DIR: \n if (bundles.has(item.bundle)) {\n var infos = [];\n bundles.get(item.bundle)._config.getDirWithPath(item.dir, item.type, infos);\n for (let i = 0, l = infos.length; i < l; i++) {\n var info = infos[i];\n input.push({uuid: info.uuid, __isNative__: false, ext: '.json', bundle: item.bundle});\n }\n }\n out.recycle();\n out = null;\n break;\n case RequestType.PATH: \n if (bundles.has(item.bundle)) {\n var config = bundles.get(item.bundle)._config;\n var info = config.getInfoWithPath(item.path, item.type);\n \n if (info && info.redirect) {\n if (!bundles.has(info.redirect)) throw new Error(`you need to load bundle ${info.redirect} first`);\n config = bundles.get(info.redirect)._config;\n info = config.getAssetInfo(info.uuid);\n }\n\n if (!info) {\n out.recycle();\n throw new Error(`Bundle ${item.bundle} doesn't contain ${item.path}`);\n }\n out.config = config; \n out.uuid = info.uuid;\n out.info = info;\n }\n out.ext = item.ext || '.json';\n break;\n case RequestType.SCENE:\n if (bundles.has(item.bundle)) {\n var config = bundles.get(item.bundle)._config;\n var info = config.getSceneInfo(item.scene);\n \n if (info && info.redirect) {\n if (!bundles.has(info.redirect)) throw new Error(`you need to load bundle ${info.redirect} first`);\n config = bundles.get(info.redirect)._config;\n info = config.getAssetInfo(info.uuid);\n }\n if (!info) {\n out.recycle();\n throw new Error(`Bundle ${config.name} doesn't contain scene ${item.scene}`);\n }\n out.config = config; \n out.uuid = info.uuid;\n out.info = info;\n }\n break;\n case '__isNative__': \n out.isNative = item.__isNative__;\n break;\n case RequestType.URL: \n out.url = item.url;\n out.uuid = item.uuid || item.url;\n out.ext = item.ext || cc.path.extname(item.url);\n out.isNative = item.__isNative__ !== undefined ? item.__isNative__ : true;\n break;\n default: out.options[key] = item[key];\n }\n if (!out) break;\n }\n }\n if (!out) continue;\n task.output.push(out);\n if (!out.uuid && !out.url) throw new Error('Can not parse this input:' + JSON.stringify(item));\n }\n return null;\n}\n\nfunction combine (task) {\n var input = task.output = task.input;\n for (var i = 0; i < input.length; i++) {\n var item = input[i];\n if (item.url) continue;\n\n var url = '', base = '';\n var config = item.config;\n if (item.isNative) {\n base = (config && config.nativeBase) ? (config.base + config.nativeBase) : cc.assetManager.generalNativeBase;\n } \n else {\n base = (config && config.importBase) ? (config.base + config.importBase) : cc.assetManager.generalImportBase;\n }\n\n let uuid = item.uuid;\n \n var ver = '';\n if (item.info) {\n if (item.isNative) {\n ver = item.info.nativeVer ? ('.' + item.info.nativeVer) : '';\n }\n else {\n ver = item.info.ver ? ('.' + item.info.ver) : '';\n }\n }\n\n // ugly hack, WeChat does not support loading font likes 'myfont.dw213.ttf'. So append hash to directory\n if (item.ext === '.ttf') {\n url = `${base}/${uuid.slice(0, 2)}/${uuid}${ver}/${item.options.__nativeName__}`;\n }\n else {\n url = `${base}/${uuid.slice(0, 2)}/${uuid}${ver}${item.ext}`;\n }\n \n item.url = url;\n }\n return null;\n}\n\nmodule.exports = { parse, combine };","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nconst dependUtil = require('./depend-util');\nconst { isScene, decodeUuid } = require('./helper');\nconst { assets } = require('./shared');\nconst { callInNextTick } = require('../platform/utils');\nconst MissingObjectReporter = CC_EDITOR && Editor.require('app://editor/page/scene-utils/missing-object-reporter');\nrequire('../assets/CCAsset');\n\nvar utils = {\n\n processOptions (options) {\n if (CC_EDITOR) return;\n var uuids = options.uuids;\n var paths = options.paths;\n var types = options.types;\n var bundles = options.deps;\n var realEntries = options.paths = Object.create(null);\n\n if (options.debug === false) {\n for (let i = 0, l = uuids.length; i < l; i++) {\n uuids[i] = decodeUuid(uuids[i]);\n }\n\n for (let id in paths) {\n let entry = paths[id];\n let type = entry[1];\n entry[1] = types[type];\n }\n }\n else {\n var out = Object.create(null);\n for (let i = 0, l = uuids.length; i < l; i++) {\n let uuid = uuids[i];\n uuids[i] = out[uuid] = decodeUuid(uuid);\n }\n uuids = out;\n }\n\n for (let id in paths) {\n let entry = paths[id];\n realEntries[uuids[id]] = entry;\n }\n\n var scenes = options.scenes;\n for (let name in scenes) {\n let uuid = scenes[name];\n scenes[name] = uuids[uuid];\n }\n\n var packs = options.packs;\n for (let packId in packs) {\n let packedIds = packs[packId];\n for (let j = 0; j < packedIds.length; ++j) {\n packedIds[j] = uuids[packedIds[j]];\n }\n }\n\n var versions = options.versions;\n if (versions) {\n for (let folder in versions) {\n var entries = versions[folder];\n for (let i = 0; i < entries.length; i += 2) {\n let uuid = entries[i];\n entries[i] = uuids[uuid] || uuid;\n }\n }\n }\n\n var redirect = options.redirect;\n if (redirect) {\n for (let i = 0; i < redirect.length; i += 2) {\n redirect[i] = uuids[redirect[i]];\n redirect[i + 1] = bundles[redirect[i + 1]];\n }\n }\n\n },\n\n clear (task, clearRef) {\n for (var i = 0, l = task.input.length; i < l; i++) {\n var item = task.input[i];\n if (clearRef) {\n !item.isNative && item.content && item.content.decRef && item.content.decRef(false);\n }\n item.recycle();\n }\n task.input = null;\n },\n\n urlAppendTimestamp (url) {\n if (cc.assetManager.downloader.appendTimeStamp && typeof url === 'string') {\n if (/\\?/.test(url))\n return url + '&_t=' + (new Date() - 0);\n else\n return url + '?_t=' + (new Date() - 0);\n }\n return url;\n },\n\n retry (process, times, wait, onComplete, index) {\n index = index || 0;\n process(index, function (err, result) {\n index++;\n if (!err || index > times) {\n onComplete && onComplete(err, result);\n }\n else {\n setTimeout(function () {\n utils.retry(process, times, wait, onComplete, index);\n }, wait);\n }\n });\n },\n\n getDepends (uuid, data, exclude, depends, preload, asyncLoadAssets, config) {\n try {\n var info = dependUtil.parse(uuid, data);\n var includeNative = true;\n if (data instanceof cc.Asset && (!data.__nativeDepend__ || data._nativeAsset)) includeNative = false; \n if (!preload) {\n asyncLoadAssets = !CC_EDITOR && (!!data.asyncLoadAssets || (asyncLoadAssets && !info.preventDeferredLoadDependents));\n for (let i = 0, l = info.deps.length; i < l; i++) {\n let dep = info.deps[i];\n if (!(dep in exclude)) {\n exclude[dep] = true;\n depends.push({uuid: dep, __asyncLoadAssets__: asyncLoadAssets, bundle: config && config.name});\n }\n }\n\n if (includeNative && !asyncLoadAssets && !info.preventPreloadNativeObject && info.nativeDep) {\n config && (info.nativeDep.bundle = config.name);\n depends.push(Object.assign({}, info.nativeDep));\n }\n \n } else {\n for (let i = 0, l = info.deps.length; i < l; i++) {\n let dep = info.deps[i];\n if (!(dep in exclude)) {\n exclude[dep] = true;\n depends.push({uuid: dep, bundle: config && config.name});\n }\n }\n if (includeNative && info.nativeDep) {\n config && (info.nativeDep.bundle = config.name);\n depends.push(Object.assign({}, info.nativeDep));\n }\n }\n }\n catch (e) {\n cc.error(e.message, e.stack);\n }\n },\n \n cache (id, asset, cacheAsset) {\n if (!asset) return;\n var _isScene = isScene(asset);\n if (!_isScene && cacheAsset) {\n assets.add(id, asset);\n }\n if (_isScene) {\n if (CC_EDITOR && !asset.scene) {\n Editor.error('Sorry, the scene data of \"%s\" is corrupted!', asset._uuid);\n }\n }\n },\n\n setProperties (uuid, asset, assetsMap) {\n\n var missingAsset = false;\n let depends = asset.__depends__;\n if (depends) {\n var missingAssetReporter = null;\n for (var i = 0, l = depends.length; i < l; i++) {\n var depend = depends[i];\n var dependAsset = assetsMap[depend.uuid + '@import'];\n if (!dependAsset) {\n if (CC_EDITOR) {\n !missingAssetReporter && (missingAssetReporter = new MissingObjectReporter(asset));\n missingAssetReporter.stashByOwner(depend.owner, depend.prop, Editor.serialize.asAsset(depend.uuid));\n }\n else {\n cc.error('The asset ' + depend.uuid + ' is missing!');\n }\n missingAsset = true;\n }\n else {\n depend.owner[depend.prop] = dependAsset.addRef();\n }\n }\n\n missingAssetReporter && missingAssetReporter.reportByOwner();\n asset.__depends__ = undefined;\n }\n \n if (asset.__nativeDepend__) {\n if (!asset._nativeAsset) {\n if (assetsMap[uuid + '@native']) {\n asset._nativeAsset = assetsMap[uuid + '@native'];\n }\n else {\n missingAsset = true;\n if (CC_EDITOR) {\n console.error(`the native asset of ${uuid} is missing!`);\n }\n }\n }\n asset.__nativeDepend__ = undefined;\n }\n return missingAsset;\n },\n\n gatherAsset (task) {\n let source = task.source;\n if (!task.options.__outputAsArray__ && source.length === 1) {\n task.output = source[0].content;\n }\n else {\n let output = task.output = [];\n for (var i = 0, l = source.length; i < l; i++) {\n output.push(source[i].content);\n }\n }\n },\n\n forEach (array, process, onComplete) {\n var count = 0;\n var errs = [];\n if (array.length === 0) onComplete && onComplete(errs);\n for (var i = 0, l = array.length; i < l; i++) {\n process(array[i], function (err) {\n if (err) {\n errs.push(err);\n }\n count ++;\n if (count === l) {\n onComplete && onComplete(errs);\n }\n });\n }\n },\n\n parseParameters (options, onProgress, onComplete) {\n if (onComplete === undefined) {\n var isCallback = typeof options === 'function';\n if (onProgress) {\n onComplete = onProgress;\n if (!isCallback) {\n onProgress = null;\n }\n }\n else if (onProgress === undefined && isCallback) {\n onComplete = options;\n options = null;\n onProgress = null;\n }\n if (onProgress !== undefined && isCallback) {\n onProgress = options;\n options = null;\n }\n }\n options = options || Object.create(null);\n return { options, onProgress, onComplete };\n },\n\n parseLoadResArgs (type, onProgress, onComplete) {\n if (onComplete === undefined) {\n var isValidType = cc.js.isChildClassOf(type, cc.Asset);\n if (onProgress) {\n onComplete = onProgress;\n if (isValidType) {\n onProgress = null;\n }\n }\n else if (onProgress === undefined && !isValidType) {\n onComplete = type;\n onProgress = null;\n type = null;\n }\n if (onProgress !== undefined && !isValidType) {\n onProgress = type;\n type = null;\n }\n }\n return { type, onProgress, onComplete };\n },\n\n checkCircleReference (owner, uuid, map, checked) {\n if (!checked) { \n checked = Object.create(null);\n }\n let item = map[uuid];\n if (!item || checked[uuid]) {\n return false;\n }\n checked[uuid] = true;\n var result = false;\n var deps = dependUtil.getDeps(uuid);\n if (deps) {\n for (var i = 0, l = deps.length; i < l; i++) {\n var dep = deps[i];\n if (dep === owner || utils.checkCircleReference(owner, dep, map, checked)) {\n result = true;\n break;\n }\n }\n }\n return result;\n },\n\n asyncify (cb) {\n return function (p1, p2) {\n if (!cb) return;\n let refs = [];\n if (Array.isArray(p2)) {\n p2.forEach(x => x instanceof cc.Asset && refs.push(x.addRef()));\n } else {\n p2 instanceof cc.Asset && refs.push(p2.addRef());\n }\n callInNextTick(() => {\n refs.forEach(x => x.decRef(false));\n cb(p1, p2);\n }); \n }\n }\n};\n\nmodule.exports = utils;","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar CCObject = require('../platform/CCObject');\n\n/**\n * !#en\n * Base class for handling assets used in Creator.
\n *\n * You may want to override:
\n * - createNode
\n * - getset functions of _nativeAsset
\n * - cc.Object._serialize
\n * - cc.Object._deserialize
\n * !#zh\n * Creator 中的资源基类。
\n *\n * 您可能需要重写:
\n * - createNode
\n * - _nativeAsset 的 getset 方法
\n * - cc.Object._serialize
\n * - cc.Object._deserialize
\n *\n * @class Asset\n * @extends Object\n */\ncc.Asset = cc.Class({\n name: 'cc.Asset', extends: CCObject,\n\n ctor () {\n /**\n * @property {String} _uuid\n * @private\n */\n // enumerable is false by default, to avoid uuid being assigned to empty string during destroy\n Object.defineProperty(this, '_uuid', {\n value: '',\n writable: true,\n });\n /**\n * !#en\n * Whether the asset is loaded or not.\n * !#zh\n * 该资源是否已经成功加载。\n *\n * @property loaded\n * @type {Boolean}\n */\n this.loaded = true;\n this._nativeUrl = '';\n this._ref = 0;\n },\n\n properties: {\n /**\n * !#en\n * Returns the url of this asset's native object, if none it will returns an empty string.\n * !#zh\n * 返回该资源对应的目标平台资源的 URL,如果没有将返回一个空字符串。\n * @property nativeUrl\n * @type {String}\n * @readOnly\n */\n nativeUrl: {\n get: function () {\n if (!this._nativeUrl) {\n if (this._native) {\n var name = this._native;\n if (name.charCodeAt(0) === 47) { // '/'\n // remove library tag\n // not imported in library, just created on-the-fly\n return name.slice(1);\n }\n if (name.charCodeAt(0) === 46) { // '.'\n // imported in dir where json exist\n this._nativeUrl = cc.assetManager.utils.getUrlWithUuid(this._uuid, {nativeExt: name, isNative: true });\n }\n else {\n // imported in an independent dir\n this._nativeUrl = cc.assetManager.utils.getUrlWithUuid(this._uuid, {__nativeName__: name, nativeExt: cc.path.extname(name), isNative: true});\n }\n }\n }\n return this._nativeUrl;\n },\n visible: false\n },\n\n /**\n * !#en\n * The number of reference\n * \n * !#zh\n * 引用的数量\n * \n * @property refCount\n * @type {Number}\n */\n refCount: {\n get () {\n return this._ref;\n }\n },\n\n /**\n * !#en\n * Serializable url for native asset.\n * !#zh\n * 保存原生资源的 URL。\n * @property {String} _native\n * @default undefined\n * @private\n */\n _native: \"\",\n\n /**\n * !#en\n * The underlying native asset of this asset if one is available.\n * This property can be used to access additional details or functionality releated to the asset.\n * This property will be initialized by the loader if `_native` is available.\n * !#zh\n * 此资源依赖的底层原生资源(如果有的话)。\n * 此属性可用于访问与资源相关的其他详细信息或功能。\n * 如果 `_native` 可用,则此属性将由加载器初始化。\n * @property {Object} _nativeAsset\n * @default null\n * @private\n */\n _nativeAsset: {\n get () {\n return this._$nativeAsset;\n },\n set (obj) {\n this._$nativeAsset = obj;\n }\n },\n\n _nativeDep: {\n get () {\n if (this._native) {\n return {__isNative__: true, uuid: this._uuid, ext: this._native};\n }\n }\n }\n },\n\n statics: {\n /**\n * !#en\n * Provide this method at the request of AssetDB.\n * !#zh\n * 应 AssetDB 要求提供这个方法。\n *\n * @method deserialize\n * @param {String} data\n * @return {Asset}\n * @static\n * @private\n */\n deserialize: CC_EDITOR && function (data) {\n return cc.deserialize(data);\n },\n\n /**\n * !#en Indicates whether its dependent raw assets can support deferred load if the owner scene (or prefab) is marked as `asyncLoadAssets`.\n * !#zh 当场景或 Prefab 被标记为 `asyncLoadAssets`,禁止延迟加载该资源所依赖的其它原始资源。\n *\n * @property {Boolean} preventDeferredLoadDependents\n * @default false\n * @static\n */\n preventDeferredLoadDependents: false,\n\n /**\n * !#en Indicates whether its native object should be preloaded from native url.\n * !#zh 禁止预加载原生对象。\n *\n * @property {Boolean} preventPreloadNativeObject\n * @default false\n * @static\n */\n preventPreloadNativeObject: false\n\n },\n\n /**\n * !#en\n * Returns the asset's url.\n\n * The `Asset` object overrides the `toString()` method of the `Object` object.\n * For `Asset` objects, the `toString()` method returns a string representation of the object.\n * JavaScript calls the `toString()` method automatically when an asset is to be represented as a text value or when a texture is referred to in a string concatenation.\n * !#zh\n * 返回资源的 URL。\n * \n * Asset 对象将会重写 Object 对象的 `toString()` 方法。\n * 对于 Asset 对象,`toString()` 方法返回该对象的字符串表示形式。\n * 当资源要表示为文本值时或在字符串连接时引用时,JavaScript 会自动调用 `toString()` 方法。\n * @method toString\n * @return {String}\n */\n toString () {\n return this.nativeUrl;\n },\n\n /**\n * !#en\n * Provide this method at the request of AssetDB.\n * !#zh\n * 应 AssetDB 要求提供这个方法。\n *\n * @method serialize\n * @return {String}\n * @private\n */\n serialize: CC_EDITOR && function () {\n return Editor.serialize(this);\n },\n\n /**\n * !#en\n * Create a new node using this asset in the scene.
\n * If this type of asset dont have its corresponding node type, this method should be null.\n * !#zh\n * 使用该资源在场景中创建一个新节点。
\n * 如果这类资源没有相应的节点类型,该方法应该是空的。\n *\n * @method createNode\n * @param {Function} callback\n * @param {String} callback.error - null or the error info\n * @param {Object} callback.node - the created node or null\n */\n createNode: null,\n\n /**\n * !#en\n * Set native file name for this asset.\n * !#zh\n * 为此资源设置原生文件名。\n * \n * @seealso nativeUrl\n *\n * @method _setRawAsset\n * @param {String} filename\n * @param {Boolean} [inLibrary=true]\n * @private\n */\n _setRawAsset: function (filename, inLibrary) {\n if (inLibrary !== false) {\n this._native = filename || undefined;\n }\n else {\n this._native = '/' + filename; // simply use '/' to tag location where is not in the library\n }\n },\n\n /**\n * !#en\n * Add references of asset\n * \n * !#zh\n * 增加资源的引用\n * \n * @method addRef\n * @return {Asset} itself\n * \n * @typescript\n * addRef(): cc.Asset\n */\n addRef () {\n this._ref++;\n return this;\n },\n\n /**\n * !#en\n * Reduce references of asset and it will be auto released when refCount equals 0.\n * \n * !#zh\n * 减少资源的引用并尝试进行自动释放。\n * \n * @method decRef\n * @return {Asset} itself\n * \n * @typescript\n * decRef(): cc.Asset\n */\n decRef (autoRelease) {\n this._ref > 0 && this._ref--;\n autoRelease !== false && cc.assetManager._releaseManager.tryRelease(this);\n return this;\n }\n});\n\nmodule.exports = cc.Asset;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst Asset = require('./CCAsset');\nconst EventTarget = require('../event/event-target');\n\nvar LoadMode = cc.Enum({\n WEB_AUDIO: 0,\n DOM_AUDIO: 1,\n});\n\n/**\n * !#en Class for audio data handling.\n * !#zh 音频资源类。\n * @class AudioClip\n * @extends Asset\n * @uses EventTarget\n */\nvar AudioClip = cc.Class({\n name: 'cc.AudioClip',\n extends: Asset,\n mixins: [EventTarget],\n\n ctor () {\n this._loading = false;\n this.loaded = false;\n\n // the web audio buffer or
Text',\n multiline: true,\n tooltip: CC_DEV && 'i18n:COMPONENT.richtext.string',\n notify: function () {\n this._updateRichTextStatus();\n }\n },\n\n /**\n * !#en Horizontal Alignment of each line in RichText.\n * !#zh 文本内容的水平对齐方式。\n * @property {macro.TextAlignment} horizontalAlign\n */\n horizontalAlign: {\n default: HorizontalAlign.LEFT,\n type: HorizontalAlign,\n tooltip: CC_DEV && 'i18n:COMPONENT.richtext.horizontal_align',\n animatable: false,\n notify: function (oldValue) {\n if (this.horizontalAlign === oldValue) return;\n\n this._layoutDirty = true;\n this._updateRichTextStatus();\n }\n },\n\n /**\n * !#en Font size of RichText.\n * !#zh 富文本字体大小。\n * @property {Number} fontSize\n */\n fontSize: {\n default: 40,\n tooltip: CC_DEV && 'i18n:COMPONENT.richtext.font_size',\n notify: function (oldValue) {\n if (this.fontSize === oldValue) return;\n\n this._layoutDirty = true;\n this._updateRichTextStatus();\n }\n },\n\n /**\n * !#en Custom System font of RichText\n * !#zh 富文本定制系统字体\n * @property {String} fontFamily\n */\n _fontFamily: \"Arial\",\n fontFamily: {\n tooltip: CC_DEV && 'i18n:COMPONENT.richtext.font_family',\n get () {\n return this._fontFamily;\n },\n set (value) {\n if (this._fontFamily === value) return;\n this._fontFamily = value;\n this._layoutDirty = true;\n this._updateRichTextStatus();\n },\n animatable: false\n },\n\n /**\n * !#en Custom TTF font of RichText\n * !#zh 富文本定制字体\n * @property {cc.TTFFont} font\n */\n font: {\n default: null,\n type: cc.TTFFont,\n tooltip: CC_DEV && 'i18n:COMPONENT.richtext.font',\n notify: function (oldValue) {\n if (this.font === oldValue) return;\n\n this._layoutDirty = true;\n if (this.font) {\n if (CC_EDITOR) {\n this._userDefinedFont = this.font;\n }\n this.useSystemFont = false;\n this._onTTFLoaded();\n }\n else {\n this.useSystemFont = true;\n }\n this._updateRichTextStatus();\n }\n },\n\n /**\n * !#en Whether use system font name or not.\n * !#zh 是否使用系统字体。\n * @property {Boolean} useSystemFont\n */\n _isSystemFontUsed: true,\n useSystemFont: {\n get () {\n return this._isSystemFontUsed;\n },\n set (value) {\n if (this._isSystemFontUsed === value) {\n return;\n }\n this._isSystemFontUsed = value;\n\n if (CC_EDITOR) {\n if (value) {\n this.font = null;\n }\n else if (this._userDefinedFont) {\n this.font = this._userDefinedFont;\n return;\n }\n }\n\n this._layoutDirty = true;\n this._updateRichTextStatus();\n },\n animatable: false,\n tooltip: CC_DEV && 'i18n:COMPONENT.richtext.system_font',\n },\n\n /**\n * !#en The cache mode of label. This mode only supports system fonts.\n * !#zh 文本缓存模式, 该模式只支持系统字体。\n * @property {Label.CacheMode} cacheMode\n */\n cacheMode: {\n default: CacheMode.NONE,\n type: CacheMode,\n tooltip: CC_DEV && 'i18n:COMPONENT.label.cacheMode',\n notify (oldValue) {\n if (this.cacheMode === oldValue) return;\n\n this._updateRichTextStatus();\n },\n animatable: false\n },\n\n /**\n * !#en The maximize width of the RichText\n * !#zh 富文本的最大宽度\n * @property {Number} maxWidth\n */\n maxWidth: {\n default: 0,\n tooltip: CC_DEV && 'i18n:COMPONENT.richtext.max_width',\n notify: function (oldValue) {\n if (this.maxWidth === oldValue) return;\n\n this._layoutDirty = true;\n this._updateRichTextStatus();\n }\n },\n\n /**\n * !#en Line Height of RichText.\n * !#zh 富文本行高。\n * @property {Number} lineHeight\n */\n lineHeight: {\n default: 40,\n tooltip: CC_DEV && 'i18n:COMPONENT.richtext.line_height',\n notify: function (oldValue) {\n if (this.lineHeight === oldValue) return;\n\n this._layoutDirty = true;\n this._updateRichTextStatus();\n }\n },\n\n /**\n * !#en The image atlas for the img tag. For each src value in the img tag, there should be a valid spriteFrame in the image atlas.\n * !#zh 对于 img 标签里面的 src 属性名称,都需要在 imageAtlas 里面找到一个有效的 spriteFrame,否则 img tag 会判定为无效。\n * @property {SpriteAtlas} imageAtlas\n */\n imageAtlas: {\n default: null,\n type: cc.SpriteAtlas,\n tooltip: CC_DEV && 'i18n:COMPONENT.richtext.image_atlas',\n notify: function (oldValue) {\n if (this.imageAtlas === oldValue) return;\n\n this._layoutDirty = true;\n this._updateRichTextStatus();\n }\n },\n\n /**\n * !#en\n * Once checked, the RichText will block all input events (mouse and touch) within\n * the bounding box of the node, preventing the input from penetrating into the underlying node.\n * !#zh\n * 选中此选项后,RichText 将阻止节点边界框中的所有输入事件(鼠标和触摸),从而防止输入事件穿透到底层节点。\n * @property {Boolean} handleTouchEvent\n * @default true\n */\n handleTouchEvent: {\n default: true,\n tooltip: CC_DEV && 'i18n:COMPONENT.richtext.handleTouchEvent',\n notify: function (oldValue) {\n if (this.handleTouchEvent === oldValue) return;\n if (this.enabledInHierarchy) {\n this.handleTouchEvent ? this._addEventListeners() : this._removeEventListeners();\n }\n }\n },\n\n /**\n * 自定义内部使用的材质\n */\n customMaterial: {\n default: null,\n type: cc.Material,\n notify: function (oldValue) {\n if (this.customMaterial === oldValue) return;\n const material = this.customMaterial == null ? this._getDefaultMaterial() : this.customMaterial;\n for (let i = 0; i < this._labelSegments.length; i++) {\n const labelComponent = this._labelSegments[i].getComponent(cc.Label);\n if (labelComponent) {\n if (labelComponent._materials.length === 0) {\n labelComponent._materials[0] = MaterialVariant.create(material, labelComponent);\n } else {\n labelComponent.setMaterial(0, material);\n }\n }\n const spriteComponent = this._labelSegments[i].getComponent(cc.Sprite);\n if (spriteComponent) {\n if (spriteComponent._materials.length === 0) {\n spriteComponent._materials[0] = MaterialVariant.create(material, spriteComponent);\n } else {\n spriteComponent.setMaterial(0, material);\n }\n }\n }\n for (let i = 0; i < this._labelSegmentsCache.length; i++) {\n const labelComponent = this._labelSegmentsCache[i].getComponent(cc.Label);\n if (labelComponent) {\n if (labelComponent._materials.length === 0) {\n labelComponent._materials[0] = MaterialVariant.create(material, labelComponent);\n } else {\n labelComponent.setMaterial(0, material);\n }\n }\n }\n }\n },\n\n autoSwitchMaterial: {\n type: RenderComponent.EnableType,\n default: RenderComponent.EnableType.GLOBAL,\n notify: function (oldValue) {\n if (this.autoSwitchMaterial === oldValue) return;\n for (let i = 0; i < this._labelSegments.length; i++) {\n const labelComponent = this._labelSegments[i].getComponent(cc.Label);\n if (labelComponent) {\n labelComponent.autoSwitchMaterial = this.autoSwitchMaterial;\n }\n const spriteComponent = this._labelSegments[i].getComponent(cc.Sprite);\n if (spriteComponent) {\n spriteComponent.autoSwitchMaterial = this.autoSwitchMaterial;\n }\n }\n for (let i = 0; i < this._labelSegmentsCache.length; i++) {\n const labelComponent = this._labelSegmentsCache[i].getComponent(cc.Label);\n if (labelComponent) {\n labelComponent.autoSwitchMaterial = this.autoSwitchMaterial;\n }\n }\n }\n },\n\n allowDynamicAtlas: {\n type: RenderComponent.EnableType,\n default: RenderComponent.EnableType.GLOBAL,\n notify: function (oldValue) {\n if (this.allowDynamicAtlas === oldValue) return;\n for (let i = 0; i < this._labelSegments.length; i++) {\n const labelComponent = this._labelSegments[i].getComponent(cc.Label);\n if (labelComponent) {\n labelComponent.allowDynamicAtlas = this.allowDynamicAtlas;\n }\n const spriteComponent = this._labelSegments[i].getComponent(cc.Sprite);\n if (spriteComponent) {\n spriteComponent.allowDynamicAtlas = this.allowDynamicAtlas;\n }\n }\n for (let i = 0; i < this._labelSegmentsCache.length; i++) {\n const labelComponent = this._labelSegmentsCache[i].getComponent(cc.Label);\n if (labelComponent) {\n labelComponent.allowDynamicAtlas = this.allowDynamicAtlas;\n }\n }\n }\n },\n\n enableRetina: {\n type: RenderComponent.EnableType,\n default: RenderComponent.EnableType.GLOBAL,\n notify: function (oldValue) {\n if (this.enableRetina === oldValue) return;\n for (let i = 0; i < this._labelSegments.length; i++) {\n const labelComponent = this._labelSegments[i].getComponent(cc.Label);\n if (labelComponent) {\n labelComponent.enableRetina = this.enableRetina;\n }\n }\n for (let i = 0; i < this._labelSegmentsCache.length; i++) {\n const labelComponent = this._labelSegmentsCache[i].getComponent(cc.Label);\n if (labelComponent) {\n labelComponent.enableRetina = this.enableRetina;\n }\n }\n }\n },\n },\n\n statics: {\n HorizontalAlign: HorizontalAlign,\n VerticalAlign: VerticalAlign\n },\n\n onEnable () {\n if (this.handleTouchEvent) {\n this._addEventListeners();\n }\n this._updateRichText();\n this._activateChildren(true);\n },\n\n onDisable () {\n if (this.handleTouchEvent) {\n this._removeEventListeners();\n }\n this._activateChildren(false);\n },\n\n start () {\n this._onTTFLoaded();\n },\n\n _onColorChanged (parentColor) {\n let children = this.node.children;\n children.forEach(function (childNode) {\n childNode.color = parentColor;\n });\n },\n\n _addEventListeners () {\n this.node.on(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this);\n this.node.on(cc.Node.EventType.COLOR_CHANGED, this._onColorChanged, this);\n },\n\n _removeEventListeners () {\n this.node.off(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this);\n this.node.off(cc.Node.EventType.COLOR_CHANGED, this._onColorChanged, this);\n },\n\n _updateLabelSegmentTextAttributes () {\n this._labelSegments.forEach(function (item) {\n this._applyTextAttribute(item, null, true);\n }.bind(this));\n },\n\n _createFontLabel (string) {\n return pool.get(string, this);\n },\n\n _onTTFLoaded () {\n if (this.font instanceof cc.TTFFont) {\n if (this.font._nativeAsset) {\n this._layoutDirty = true;\n this._updateRichText();\n }\n else {\n let self = this;\n cc.assetManager.postLoadNative(this.font, function (err) {\n self._layoutDirty = true;\n self._updateRichText();\n });\n }\n }\n else {\n this._layoutDirty = true;\n this._updateRichText();\n }\n },\n\n _measureText (styleIndex, string) {\n let self = this;\n let func = function (string) {\n let label;\n if (self._labelSegmentsCache.length === 0) {\n label = self._createFontLabel(string);\n self._labelSegmentsCache.push(label);\n } else {\n label = self._labelSegmentsCache[0];\n }\n label._styleIndex = styleIndex;\n self._applyTextAttribute(label, string, true);\n let labelSize = label.getContentSize();\n return labelSize.width;\n };\n if (string) {\n return func(string);\n }\n else {\n return func;\n }\n },\n\n _onTouchEnded (event) {\n let components = this.node.getComponents(cc.Component);\n\n for (let i = 0; i < this._labelSegments.length; ++i) {\n let labelSegment = this._labelSegments[i];\n let clickHandler = labelSegment._clickHandler;\n let clickParam = labelSegment._clickParam;\n if (clickHandler && this._containsTouchLocation(labelSegment, event.touch.getLocation())) {\n components.forEach(function (component) {\n if (component.enabledInHierarchy && component[clickHandler]) {\n component[clickHandler](event, clickParam);\n }\n });\n event.stopPropagation();\n }\n }\n },\n\n _containsTouchLocation (label, point) {\n let myRect = label.getBoundingBoxToWorld();\n return myRect.contains(point);\n },\n\n _resetState () {\n let children = this.node.children;\n for (let i = children.length - 1; i >= 0; i--) {\n let child = children[i];\n if (child.name === RichTextChildName || child.name === RichTextChildImageName) {\n if (child.parent === this.node) {\n child.parent = null;\n }\n else {\n // In case child.parent !== this.node, child cannot be removed from children\n children.splice(i, 1);\n }\n if (child.name === RichTextChildName) {\n pool.put(child);\n }\n }\n }\n\n this._labelSegments.length = 0;\n this._labelSegmentsCache.length = 0;\n this._linesWidth.length = 0;\n this._lineOffsetX = 0;\n this._lineCount = 1;\n this._labelWidth = 0;\n this._labelHeight = 0;\n this._layoutDirty = true;\n },\n\n onRestore: CC_EDITOR && function () {\n // TODO: refine undo/redo system\n // Because undo/redo will not call onEnable/onDisable,\n // we need call onEnable/onDisable manually to active/disactive children nodes.\n if (this.enabledInHierarchy) {\n this.onEnable();\n }\n else {\n this.onDisable();\n }\n },\n\n _activateChildren (active) {\n for (let i = this.node.children.length - 1; i >= 0; i--) {\n let child = this.node.children[i];\n if (child.name === RichTextChildName || child.name === RichTextChildImageName) {\n child.active = active;\n }\n }\n },\n\n _addLabelSegment (stringToken, styleIndex) {\n let labelSegment;\n if (this._labelSegmentsCache.length === 0) {\n labelSegment = this._createFontLabel(stringToken);\n } else {\n labelSegment = this._labelSegmentsCache.pop();\n }\n labelSegment._styleIndex = styleIndex;\n labelSegment._lineCount = this._lineCount;\n labelSegment.active = this.node.active;\n\n labelSegment.setAnchorPoint(0, 0);\n this._applyTextAttribute(labelSegment, stringToken);\n\n this.node.addChild(labelSegment);\n this._labelSegments.push(labelSegment);\n\n return labelSegment;\n },\n\n _updateRichTextWithMaxWidth (labelString, labelWidth, styleIndex) {\n let fragmentWidth = labelWidth;\n let labelSegment;\n\n if (this._lineOffsetX > 0 && fragmentWidth + this._lineOffsetX > this.maxWidth) {\n //concat previous line\n let checkStartIndex = 0;\n while (this._lineOffsetX <= this.maxWidth) {\n let checkEndIndex = this._getFirstWordLen(labelString,\n checkStartIndex,\n labelString.length);\n let checkString = labelString.substr(checkStartIndex, checkEndIndex);\n let checkStringWidth = this._measureText(styleIndex, checkString);\n\n if (this._lineOffsetX + checkStringWidth <= this.maxWidth) {\n this._lineOffsetX += checkStringWidth;\n checkStartIndex += checkEndIndex;\n }\n else {\n\n if (checkStartIndex > 0) {\n let remainingString = labelString.substr(0, checkStartIndex);\n this._addLabelSegment(remainingString, styleIndex);\n labelString = labelString.substr(checkStartIndex, labelString.length);\n fragmentWidth = this._measureText(styleIndex, labelString);\n }\n this._updateLineInfo();\n break;\n }\n }\n }\n if (fragmentWidth > this.maxWidth) {\n let fragments = textUtils.fragmentText(labelString,\n fragmentWidth,\n this.maxWidth,\n this._measureText(styleIndex));\n for (let k = 0; k < fragments.length; ++k) {\n let splitString = fragments[k];\n labelSegment = this._addLabelSegment(splitString, styleIndex);\n let labelSize = labelSegment.getContentSize();\n this._lineOffsetX += labelSize.width;\n if (fragments.length > 1 && k < fragments.length - 1) {\n this._updateLineInfo();\n }\n }\n }\n else {\n this._lineOffsetX += fragmentWidth;\n this._addLabelSegment(labelString, styleIndex);\n }\n },\n\n _isLastComponentCR (stringToken) {\n return stringToken.length - 1 === stringToken.lastIndexOf(\"\\n\");\n },\n\n _updateLineInfo () {\n this._linesWidth.push(this._lineOffsetX);\n this._lineOffsetX = 0;\n this._lineCount++;\n },\n\n _needsUpdateTextLayout (newTextArray) {\n if (this._layoutDirty || !this._textArray || !newTextArray) {\n return true;\n }\n\n if (this._textArray.length !== newTextArray.length) {\n return true;\n }\n\n for (let i = 0; i < this._textArray.length; ++i) {\n let oldItem = this._textArray[i];\n let newItem = newTextArray[i];\n if (oldItem.text !== newItem.text) {\n return true;\n }\n else {\n let oldStyle = oldItem.style, newStyle = newItem.style;\n if (oldStyle) {\n if (newStyle) {\n if (!oldStyle.outline !== !newStyle.outline) {\n return true;\n }\n if (oldStyle.size !== newStyle.size\n || !oldStyle.italic !== !newStyle.italic\n || oldStyle.isImage !== newStyle.isImage) {\n return true;\n }\n if (oldStyle.src !== newStyle.src ||\n oldStyle.imageAlign !== newStyle.imageAlign ||\n oldStyle.imageHeight !== newStyle.imageHeight ||\n oldStyle.imageWidth !== newStyle.imageWidth ||\n oldStyle.imageOffset !== newStyle.imageOffset) {\n return true;\n }\n }\n else {\n if (oldStyle.size || oldStyle.italic || oldStyle.isImage || oldStyle.outline) {\n return true;\n }\n }\n }\n else {\n if (newStyle) {\n if (newStyle.size || newStyle.italic || newStyle.isImage || newStyle.outline) {\n return true;\n }\n }\n }\n }\n }\n return false;\n },\n\n _addRichTextImageElement (richTextElement) {\n let spriteFrameName = richTextElement.style.src;\n let spriteFrame = this.imageAtlas.getSpriteFrame(spriteFrameName);\n if (spriteFrame) {\n let spriteNode = new cc.PrivateNode(RichTextChildImageName);\n let spriteComponent = spriteNode.addComponent(cc.Sprite);\n\n spriteComponent.autoSwitchMaterial = this.autoSwitchMaterial;\n spriteComponent.allowDynamicAtlas = this.allowDynamicAtlas;\n\n // 更新材质\n if (this.customMaterial) {\n if (spriteComponent._materials.length === 0) {\n spriteComponent._materials[0] = MaterialVariant.create(this.customMaterial, spriteComponent);\n } else {\n if (spriteComponent._materials[0].material !== this.customMaterial) {\n spriteComponent.setMaterial(0, this.customMaterial);\n }\n }\n }\n\n switch (richTextElement.style.imageAlign)\n {\n case 'top':\n spriteNode.setAnchorPoint(0, 1);\n break;\n case 'center':\n spriteNode.setAnchorPoint(0, 0.5);\n break;\n default:\n spriteNode.setAnchorPoint(0, 0);\n break;\n }\n if (richTextElement.style.imageOffset) spriteNode._imageOffset = richTextElement.style.imageOffset;\n spriteComponent.type = cc.Sprite.Type.SLICED;\n spriteComponent.sizeMode = cc.Sprite.SizeMode.CUSTOM;\n this.node.addChild(spriteNode);\n this._labelSegments.push(spriteNode);\n\n let spriteRect = spriteFrame.getRect();\n let scaleFactor = 1;\n let spriteWidth = spriteRect.width;\n let spriteHeight = spriteRect.height;\n let expectWidth = richTextElement.style.imageWidth;\n let expectHeight = richTextElement.style.imageHeight;\n\n if (expectHeight > 0) {\n scaleFactor = expectHeight / spriteHeight;\n spriteWidth = spriteWidth * scaleFactor;\n spriteHeight = spriteHeight * scaleFactor;\n }\n else {\n scaleFactor = this.lineHeight / spriteHeight;\n spriteWidth = spriteWidth * scaleFactor;\n spriteHeight = spriteHeight * scaleFactor;\n }\n\n if (expectWidth > 0) spriteWidth = expectWidth;\n\n if (this.maxWidth > 0) {\n if (this._lineOffsetX + spriteWidth > this.maxWidth) {\n this._updateLineInfo();\n }\n this._lineOffsetX += spriteWidth;\n\n }\n else {\n this._lineOffsetX += spriteWidth;\n if (this._lineOffsetX > this._labelWidth) {\n this._labelWidth = this._lineOffsetX;\n }\n }\n spriteComponent.spriteFrame = spriteFrame;\n spriteNode.setContentSize(spriteWidth, spriteHeight);\n spriteNode._lineCount = this._lineCount;\n\n if (richTextElement.style.event) {\n if (richTextElement.style.event.click) {\n spriteNode._clickHandler = richTextElement.style.event.click;\n }\n if (richTextElement.style.event.param) {\n spriteNode._clickParam = richTextElement.style.event.param;\n }\n else {\n spriteNode._clickParam = '';\n }\n }\n else {\n spriteNode._clickHandler = null;\n }\n }\n else {\n cc.warnID(4400);\n }\n },\n\n _updateRichText () {\n if (!this.enabledInHierarchy) return;\n\n let newTextArray = _htmlTextParser.parse(this.string);\n if (!this._needsUpdateTextLayout(newTextArray)) {\n this._textArray = newTextArray;\n this._updateLabelSegmentTextAttributes();\n return;\n }\n\n this._textArray = newTextArray;\n this._resetState();\n\n let lastEmptyLine = false;\n let label;\n let labelSize;\n\n for (let i = 0; i < this._textArray.length; ++i) {\n let richTextElement = this._textArray[i];\n let text = richTextElement.text;\n //handle
tag\n if (text === \"\") {\n if (richTextElement.style && richTextElement.style.newline) {\n this._updateLineInfo();\n continue;\n }\n if (richTextElement.style && richTextElement.style.isImage && this.imageAtlas) {\n this._addRichTextImageElement(richTextElement);\n continue;\n }\n }\n let multilineTexts = text.split(\"\\n\");\n\n for (let j = 0; j < multilineTexts.length; ++j) {\n let labelString = multilineTexts[j];\n if (labelString === \"\") {\n //for continues \\n\n if (this._isLastComponentCR(text)\n && j === multilineTexts.length - 1) {\n continue;\n }\n this._updateLineInfo();\n lastEmptyLine = true;\n continue;\n }\n lastEmptyLine = false;\n\n if (this.maxWidth > 0) {\n let labelWidth = this._measureText(i, labelString);\n this._updateRichTextWithMaxWidth(labelString, labelWidth, i);\n\n if (multilineTexts.length > 1 && j < multilineTexts.length - 1) {\n this._updateLineInfo();\n }\n }\n else {\n label = this._addLabelSegment(labelString, i);\n labelSize = label.getContentSize();\n\n this._lineOffsetX += labelSize.width;\n if (this._lineOffsetX > this._labelWidth) {\n this._labelWidth = this._lineOffsetX;\n }\n\n if (multilineTexts.length > 1 && j < multilineTexts.length - 1) {\n this._updateLineInfo();\n }\n }\n }\n }\n if (!lastEmptyLine) {\n this._linesWidth.push(this._lineOffsetX);\n }\n\n if (this.maxWidth > 0) {\n this._labelWidth = this.maxWidth;\n }\n this._labelHeight = (this._lineCount + textUtils.BASELINE_RATIO) * this.lineHeight;\n\n // trigger \"size-changed\" event\n this.node.setContentSize(this._labelWidth, this._labelHeight);\n\n this._updateRichTextPosition();\n this._layoutDirty = false;\n },\n\n _getFirstWordLen (text, startIndex, textLen) {\n let character = text.charAt(startIndex);\n if (textUtils.isUnicodeCJK(character)\n || textUtils.isUnicodeSpace(character)) {\n return 1;\n }\n\n let len = 1;\n for (let index = startIndex + 1; index < textLen; ++index) {\n character = text.charAt(index);\n if (textUtils.isUnicodeSpace(character)\n || textUtils.isUnicodeCJK(character)) {\n break;\n }\n len++;\n }\n\n return len;\n },\n\n _updateRichTextPosition () {\n let nextTokenX = 0;\n let nextLineIndex = 1;\n let totalLineCount = this._lineCount;\n for (let i = 0; i < this._labelSegments.length; ++i) {\n let label = this._labelSegments[i];\n let lineCount = label._lineCount;\n if (lineCount > nextLineIndex) {\n nextTokenX = 0;\n nextLineIndex = lineCount;\n }\n let lineOffsetX = 0;\n // let nodeAnchorXOffset = (0.5 - this.node.anchorX) * this._labelWidth;\n switch (this.horizontalAlign) {\n case HorizontalAlign.LEFT:\n lineOffsetX = - this._labelWidth / 2;\n break;\n case HorizontalAlign.CENTER:\n lineOffsetX = - this._linesWidth[lineCount - 1] / 2;\n break;\n case HorizontalAlign.RIGHT:\n lineOffsetX = this._labelWidth / 2 - this._linesWidth[lineCount - 1];\n break;\n default:\n break;\n }\n label.x = nextTokenX + lineOffsetX;\n\n let labelSize = label.getContentSize();\n\n label.y = this.lineHeight * (totalLineCount - lineCount) - this._labelHeight / 2;\n\n if (lineCount === nextLineIndex) {\n nextTokenX += labelSize.width;\n }\n\n let sprite = label.getComponent(cc.Sprite);\n if (sprite) {\n // adjust img align (from )\n let lineHeightSet = this.lineHeight;\n let lineHeightReal = this.lineHeight * (1 + textUtils.BASELINE_RATIO); //single line node height\n switch (label.anchorY)\n {\n case 1:\n label.y += ( lineHeightSet + ( ( lineHeightReal - lineHeightSet) / 2 ) );\n break;\n case 0.5:\n label.y += ( lineHeightReal / 2 );\n break;\n default:\n label.y += ( (lineHeightReal - lineHeightSet) / 2 );\n break;\n }\n // adjust img offset (from )\n if (label._imageOffset)\n {\n let offsets = label._imageOffset.split(',');\n if (offsets.length === 1 && offsets[0])\n {\n let offsetY = parseFloat(offsets[0]);\n if (Number.isInteger(offsetY)) label.y += offsetY;\n }\n else if(offsets.length === 2)\n {\n let offsetX = parseFloat(offsets[0]);\n let offsetY = parseFloat(offsets[1]);\n if (Number.isInteger(offsetX)) label.x += offsetX;\n if (Number.isInteger(offsetY)) label.y += offsetY;\n }\n }\n }\n\n //adjust y for label with outline\n let outline = label.getComponent(cc.LabelOutline);\n if (outline && outline.width) label.y = label.y - outline.width;\n }\n },\n\n _convertLiteralColorValue (color) {\n let colorValue = color.toUpperCase();\n if (cc.Color[colorValue]) {\n return cc.Color[colorValue];\n }\n else {\n let out = cc.color();\n return out.fromHEX(color);\n }\n },\n\n // When string is null, it means that the text does not need to be updated.\n _applyTextAttribute (labelNode, string, force) {\n let labelComponent = labelNode.getComponent(cc.Label);\n if (!labelComponent) {\n return;\n }\n\n let index = labelNode._styleIndex;\n\n let textStyle = null;\n if (this._textArray[index]) {\n textStyle = this._textArray[index].style;\n }\n\n if (textStyle && textStyle.color) {\n labelNode.color = this._convertLiteralColorValue(textStyle.color);\n }else {\n labelNode.color = this.node.color;\n }\n\n labelComponent.cacheMode = this.cacheMode;\n\n labelComponent.autoSwitchMaterial = this.autoSwitchMaterial;\n labelComponent.allowDynamicAtlas = this.allowDynamicAtlas;\n labelComponent.enableRetina = this.enableRetina;\n\n // 更新材质\n if (this.customMaterial) {\n if (labelComponent._materials.length === 0) {\n labelComponent._materials[0] = MaterialVariant.create(this.customMaterial, labelComponent);\n } else {\n if (labelComponent._materials[0].material !== this.customMaterial) {\n labelComponent.setMaterial(0, this.customMaterial);\n }\n }\n }\n\n let isAsset = this.font instanceof cc.Font;\n if (isAsset && !this._isSystemFontUsed) {\n labelComponent.font = this.font;\n } else {\n labelComponent.fontFamily = this.fontFamily;\n }\n\n labelComponent.useSystemFont = this._isSystemFontUsed;\n labelComponent.lineHeight = this.lineHeight;\n labelComponent.enableBold = textStyle && textStyle.bold;\n labelComponent.enableItalics = textStyle && textStyle.italic;\n //TODO: temporary implementation, the italic effect should be implemented in the internal of label-assembler.\n if (textStyle && textStyle.italic) {\n labelNode.skewX = 12;\n }\n\n labelComponent.enableUnderline = textStyle && textStyle.underline;\n\n if (textStyle && textStyle.outline) {\n let labelOutlineComponent = labelNode.getComponent(cc.LabelOutline);\n if (!labelOutlineComponent) {\n labelOutlineComponent = labelNode.addComponent(cc.LabelOutline);\n }\n labelOutlineComponent.color = this._convertLiteralColorValue(textStyle.outline.color);\n labelOutlineComponent.width = textStyle.outline.width;\n }\n\n if (textStyle && textStyle.size) {\n labelComponent.fontSize = textStyle.size;\n }\n else {\n labelComponent.fontSize = this.fontSize;\n }\n\n if (string !== null) {\n if (typeof string !== 'string') {\n string = '' + string;\n }\n labelComponent.string = string;\n }\n\n force && labelComponent._forceUpdateRenderData();\n\n if (textStyle && textStyle.event) {\n if (textStyle.event.click) {\n labelNode._clickHandler = textStyle.event.click;\n }\n if (textStyle.event.param) {\n labelNode._clickParam = textStyle.event.param;\n }\n else {\n labelNode._clickParam = '';\n }\n }\n else {\n labelNode._clickHandler = null;\n }\n },\n\n onDestroy () {\n for (let i = 0; i < this._labelSegments.length; ++i) {\n this._labelSegments[i].removeFromParent();\n pool.put(this._labelSegments[i]);\n }\n },\n});\n\ncc.RichText = module.exports = RichText;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst misc = require('../utils/misc');\nconst Component = require('./CCComponent');\n\nvar GETTINGSHORTERFACTOR = 20;\n\n/**\n * Enum for Scrollbar direction\n * @enum Scrollbar.Direction\n */\nvar Direction = cc.Enum({\n /**\n * @property {Number} HORIZONTAL\n */\n HORIZONTAL: 0,\n\n /**\n * @property {Number} VERTICAL\n */\n VERTICAL: 1\n});\n\n/**\n * !#en\n * The Scrollbar control allows the user to scroll an image or other view that is too large to see completely\n * !#zh 滚动条组件\n * @class Scrollbar\n * @extends Component\n */\nvar Scrollbar = cc.Class({\n name: 'cc.Scrollbar',\n extends: require('./CCComponent'),\n\n editor: CC_EDITOR && {\n menu: 'i18n:MAIN_MENU.component.ui/ScrollBar',\n help: 'i18n:COMPONENT.help_url.scrollbar',\n },\n\n properties: {\n _scrollView: null,\n _touching: false,\n _autoHideRemainingTime: {\n default: 0,\n serializable: false\n },\n _opacity: 255,\n\n /**\n * !#en The \"handle\" part of the scrollbar.\n * !#zh 作为当前滚动区域位置显示的滑块 Sprite。\n * @property {Sprite} handle\n */\n handle: {\n default: null,\n type: cc.Sprite,\n tooltip: CC_DEV && 'i18n:COMPONENT.scrollbar.handle',\n notify: function() {\n this._onScroll(cc.v2(0, 0));\n },\n animatable: false\n },\n\n /**\n * !#en The direction of scrollbar.\n * !#zh ScrollBar 的滚动方向。\n * @property {Scrollbar.Direction} direction\n */\n direction: {\n default: Direction.HORIZONTAL,\n type: Direction,\n tooltip: CC_DEV && 'i18n:COMPONENT.scrollbar.direction',\n notify: function() {\n this._onScroll(cc.v2(0, 0));\n },\n animatable: false\n },\n\n /**\n * !#en Whether enable auto hide or not.\n * !#zh 是否在没有滚动动作时自动隐藏 ScrollBar。\n * @property {Boolean} enableAutoHide\n */\n enableAutoHide: {\n default: true,\n animatable: false,\n tooltip: CC_DEV && 'i18n:COMPONENT.scrollbar.auto_hide',\n },\n\n /**\n * !#en\n * The time to hide scrollbar when scroll finished.\n * Note: This value is only useful when enableAutoHide is true.\n * !#zh\n * 没有滚动动作后经过多久会自动隐藏。\n * 注意:只要当 “enableAutoHide” 为 true 时,才有效。\n * @property {Number} autoHideTime\n */\n autoHideTime: {\n default: 1.0,\n animatable: false,\n tooltip: CC_DEV && 'i18n:COMPONENT.scrollbar.auto_hide_time',\n }\n },\n\n statics: {\n Direction: Direction\n },\n\n setTargetScrollView: function(scrollView) {\n this._scrollView = scrollView;\n },\n\n _convertToScrollViewSpace: function(content) {\n let scrollViewNode = this._scrollView.node;\n var worldSpacePos = content.convertToWorldSpaceAR(cc.v2(-content.anchorX * content.width, -content.anchorY * content.height));\n var scrollViewSpacePos = scrollViewNode.convertToNodeSpaceAR(worldSpacePos);\n scrollViewSpacePos.x += scrollViewNode.anchorX * scrollViewNode.width;\n scrollViewSpacePos.y += scrollViewNode.anchorY * scrollViewNode.height;\n return scrollViewSpacePos;\n },\n\n _setOpacity: function(opacity) {\n if (this.handle) {\n this.node.opacity = opacity;\n this.handle.node.opacity = opacity;\n }\n },\n\n _onScroll: function(outOfBoundary) {\n if (this._scrollView) {\n\n var content = this._scrollView.content;\n if(content){\n var contentSize = content.getContentSize();\n var scrollViewSize = this._scrollView.node.getContentSize();\n var handleNodeSize = this.node.getContentSize();\n\n if(this._conditionalDisableScrollBar(contentSize, scrollViewSize)) {\n return;\n }\n\n if (this.enableAutoHide) {\n this._autoHideRemainingTime = this.autoHideTime;\n this._setOpacity(this._opacity);\n }\n\n var contentMeasure = 0;\n var scrollViewMeasure = 0;\n var outOfBoundaryValue = 0;\n var contentPosition = 0;\n var handleNodeMeasure = 0;\n\n if (this.direction === Direction.HORIZONTAL) {\n contentMeasure = contentSize.width;\n scrollViewMeasure = scrollViewSize.width;\n handleNodeMeasure = handleNodeSize.width;\n outOfBoundaryValue = outOfBoundary.x;\n\n contentPosition = -this._convertToScrollViewSpace(content).x;\n } else if (this.direction === Direction.VERTICAL) {\n contentMeasure = contentSize.height;\n scrollViewMeasure = scrollViewSize.height;\n handleNodeMeasure = handleNodeSize.height;\n outOfBoundaryValue = outOfBoundary.y;\n\n contentPosition = -this._convertToScrollViewSpace(content).y;\n }\n\n var length = this._calculateLength(contentMeasure, scrollViewMeasure, handleNodeMeasure, outOfBoundaryValue);\n var position = this._calculatePosition(contentMeasure, scrollViewMeasure, handleNodeMeasure, contentPosition, outOfBoundaryValue, length);\n\n this._updateLength(length);\n this._updateHanlderPosition(position);\n }\n }\n },\n\n _updateHanlderPosition: function(position) {\n if (this.handle) {\n var oldPosition = this._fixupHandlerPosition();\n\n this.handle.node.setPosition(position.x + oldPosition.x, position.y + oldPosition.y);\n }\n },\n\n _fixupHandlerPosition: function() {\n var barSize = this.node.getContentSize();\n var barAnchor = this.node.getAnchorPoint();\n var handleSize = this.handle.node.getContentSize();\n\n var handleParent = this.handle.node.parent;\n\n var leftBottomWorldPosition = this.node.convertToWorldSpaceAR(cc.v2(-barSize.width * barAnchor.x, -barSize.height * barAnchor.y));\n var fixupPosition = handleParent.convertToNodeSpaceAR(leftBottomWorldPosition);\n\n if (this.direction === Direction.HORIZONTAL) {\n fixupPosition = cc.v2(fixupPosition.x, fixupPosition.y + (barSize.height - handleSize.height) / 2);\n } else if (this.direction === Direction.VERTICAL) {\n fixupPosition = cc.v2(fixupPosition.x + (barSize.width - handleSize.width) / 2, fixupPosition.y);\n }\n\n this.handle.node.setPosition(fixupPosition);\n\n return fixupPosition;\n },\n\n _onTouchBegan: function() {\n if (!this.enableAutoHide) {\n return;\n }\n this._touching = true;\n },\n\n _conditionalDisableScrollBar: function (contentSize, scrollViewSize) {\n if(contentSize.width <= scrollViewSize.width\n && this.direction === Direction.HORIZONTAL){\n return true;\n }\n\n if(contentSize.height <= scrollViewSize.height\n && this.direction === Direction.VERTICAL){\n return true;\n }\n return false;\n },\n\n _onTouchEnded: function() {\n if (!this.enableAutoHide) {\n return;\n }\n\n this._touching = false;\n\n if (this.autoHideTime <= 0) {\n return;\n }\n\n\n if (this._scrollView) {\n var content = this._scrollView.content;\n if(content){\n var contentSize = content.getContentSize();\n var scrollViewSize = this._scrollView.node.getContentSize();\n\n if(this._conditionalDisableScrollBar(contentSize, scrollViewSize)) {\n return;\n }\n }\n }\n\n this._autoHideRemainingTime = this.autoHideTime;\n },\n\n _calculateLength: function(contentMeasure, scrollViewMeasure, handleNodeMeasure, outOfBoundary) {\n var denominatorValue = contentMeasure;\n if (outOfBoundary) {\n denominatorValue += (outOfBoundary > 0 ? outOfBoundary : -outOfBoundary) * GETTINGSHORTERFACTOR;\n }\n\n var lengthRation = scrollViewMeasure / denominatorValue;\n return handleNodeMeasure * lengthRation;\n },\n\n _calculatePosition: function(contentMeasure, scrollViewMeasure, handleNodeMeasure, contentPosition, outOfBoundary, actualLenth) {\n var denominatorValue = contentMeasure - scrollViewMeasure;\n if (outOfBoundary) {\n denominatorValue += Math.abs(outOfBoundary);\n }\n\n var positionRatio = 0;\n if (denominatorValue) {\n positionRatio = contentPosition / denominatorValue;\n positionRatio = misc.clamp01(positionRatio);\n }\n\n var position = (handleNodeMeasure - actualLenth) * positionRatio;\n if (this.direction === Direction.VERTICAL) {\n return cc.v2(0, position);\n } else {\n return cc.v2(position, 0);\n }\n },\n\n _updateLength: function(length) {\n if (this.handle) {\n var handleNode = this.handle.node;\n var handleNodeSize = handleNode.getContentSize();\n handleNode.setAnchorPoint(cc.v2(0, 0));\n if (this.direction === Direction.HORIZONTAL) {\n handleNode.setContentSize(length, handleNodeSize.height);\n } else {\n handleNode.setContentSize(handleNodeSize.width, length);\n }\n }\n },\n\n _processAutoHide: function(deltaTime) {\n if (!this.enableAutoHide || this._autoHideRemainingTime <= 0) {\n return;\n } else if (this._touching) {\n return;\n }\n\n\n this._autoHideRemainingTime -= deltaTime;\n if (this._autoHideRemainingTime <= this.autoHideTime) {\n this._autoHideRemainingTime = Math.max(0, this._autoHideRemainingTime);\n var opacity = this._opacity * (this._autoHideRemainingTime / this.autoHideTime);\n this._setOpacity(opacity);\n }\n },\n\n start: function() {\n if (this.enableAutoHide) {\n this._setOpacity(0);\n }\n },\n\n hide: function() {\n this._autoHideRemainingTime = 0;\n this._setOpacity(0);\n },\n\n show: function() {\n this._autoHideRemainingTime = this.autoHideTime;\n this._setOpacity(this._opacity);\n },\n\n update: function(dt) {\n this._processAutoHide(dt);\n }\n});\n\n\ncc.Scrollbar = module.exports = Scrollbar;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst misc = require('../utils/misc');\nconst NodeEvent = require('../CCNode').EventType;\nconst RenderComponent = require('./CCRenderComponent');\nconst BlendFunc = require('../utils/blend-func');\n\n\n/**\n * !#en Enum for sprite type.\n * !#zh Sprite 类型\n * @enum Sprite.Type\n */\nvar SpriteType = cc.Enum({\n /**\n * !#en The simple type.\n * !#zh 普通类型\n * @property {Number} SIMPLE\n */\n SIMPLE: 0,\n /**\n * !#en The sliced type.\n * !#zh 切片(九宫格)类型\n * @property {Number} SLICED\n */\n SLICED: 1,\n /**\n * !#en The tiled type.\n * !#zh 平铺类型\n * @property {Number} TILED\n */\n TILED: 2,\n /**\n * !#en The filled type.\n * !#zh 填充类型\n * @property {Number} FILLED\n */\n FILLED: 3,\n /**\n * !#en The mesh type.\n * !#zh 以 Mesh 三角形组成的类型\n * @property {Number} MESH\n */\n MESH: 4\n});\n\n/**\n * !#en Enum for fill type.\n * !#zh 填充类型\n * @enum Sprite.FillType\n */\nvar FillType = cc.Enum({\n /**\n * !#en The horizontal fill.\n * !#zh 水平方向填充\n * @property {Number} HORIZONTAL\n */\n HORIZONTAL: 0,\n /**\n * !#en The vertical fill.\n * !#zh 垂直方向填充\n * @property {Number} VERTICAL\n */\n VERTICAL: 1,\n /**\n * !#en The radial fill.\n * !#zh 径向填充\n * @property {Number} RADIAL\n */\n RADIAL:2,\n});\n\n/**\n * !#en Sprite Size can track trimmed size, raw size or none.\n * !#zh 精灵尺寸调整模式\n * @enum Sprite.SizeMode\n */\nvar SizeMode = cc.Enum({\n /**\n * !#en Use the customized node size.\n * !#zh 使用节点预设的尺寸\n * @property {Number} CUSTOM\n */\n CUSTOM: 0,\n /**\n * !#en Match the trimmed size of the sprite frame automatically.\n * !#zh 自动适配为精灵裁剪后的尺寸\n * @property {Number} TRIMMED\n */\n TRIMMED: 1,\n /**\n * !#en Match the raw size of the sprite frame automatically.\n * !#zh 自动适配为精灵原图尺寸\n * @property {Number} RAW\n */\n RAW: 2\n});\n/**\n * !#en Sprite state can choice the normal or grayscale.\n * !#zh 精灵颜色通道模式。\n * @enum Sprite.State\n * @deprecated\n */\nvar State = cc.Enum({\n /**\n * !#en The normal state\n * !#zh 正常状态\n * @property {Number} NORMAL\n */\n NORMAL: 0,\n /**\n * !#en The gray state, all color will be modified to grayscale value.\n * !#zh 灰色状态,所有颜色会被转换成灰度值\n * @property {Number} GRAY\n */\n GRAY: 1\n});\n\n/**\n * !#en Renders a sprite in the scene.\n * !#zh 该组件用于在场景中渲染精灵。\n * @class Sprite\n * @extends RenderComponent\n * @uses BlendFunc\n * @example\n * // Create a new node and add sprite components.\n * var node = new cc.Node(\"New Sprite\");\n * var sprite = node.addComponent(cc.Sprite);\n * node.parent = this.node;\n */\nvar Sprite = cc.Class({\n name: 'cc.Sprite',\n extends: RenderComponent,\n mixins: [BlendFunc],\n\n editor: CC_EDITOR && {\n menu: 'i18n:MAIN_MENU.component.renderers/Sprite',\n help: 'i18n:COMPONENT.help_url.sprite',\n inspector: 'packages://service-pack/inspectors/comps/sprite.js',\n },\n\n properties: {\n _spriteFrame: {\n default: null,\n type: cc.SpriteFrame\n },\n _type: SpriteType.SIMPLE,\n _sizeMode: SizeMode.TRIMMED,\n _fillType: 0,\n _fillCenter: cc.v2(0,0),\n _fillStart: 0,\n _fillRange: 0,\n _isTrimmedMode: true,\n _atlas: {\n default: null,\n type: cc.SpriteAtlas,\n tooltip: CC_DEV && 'i18n:COMPONENT.sprite.atlas',\n editorOnly: true,\n visible: true,\n animatable: false\n },\n\n /**\n * !#en The sprite frame of the sprite.\n * !#zh 精灵的精灵帧\n * @property spriteFrame\n * @type {SpriteFrame}\n * @example\n * sprite.spriteFrame = newSpriteFrame;\n */\n spriteFrame: {\n get () {\n return this._spriteFrame;\n },\n set (value, force) {\n var lastSprite = this._spriteFrame;\n if (CC_EDITOR) {\n if (!force && ((lastSprite && lastSprite._uuid) === (value && value._uuid))) {\n return;\n }\n }\n else {\n if (lastSprite === value) {\n return;\n }\n }\n this._spriteFrame = value;\n this._applySpriteFrame(lastSprite);\n if (CC_EDITOR) {\n this.node.emit('spriteframe-changed', this);\n }\n },\n type: cc.SpriteFrame,\n },\n\n /**\n * !#en The sprite render type.\n * !#zh 精灵渲染类型\n * @property type\n * @type {Sprite.Type}\n * @example\n * sprite.type = cc.Sprite.Type.SIMPLE;\n */\n type: {\n get () {\n return this._type;\n },\n set (value) {\n if (this._type !== value) {\n this._type = value;\n this.setVertsDirty();\n this._resetAssembler();\n }\n },\n type: SpriteType,\n animatable: false,\n tooltip: CC_DEV && 'i18n:COMPONENT.sprite.type',\n },\n\n /**\n * !#en\n * The fill type, This will only have any effect if the \"type\" is set to “cc.Sprite.Type.FILLED”.\n * !#zh\n * 精灵填充类型,仅渲染类型设置为 cc.Sprite.Type.FILLED 时有效。\n * @property fillType\n * @type {Sprite.FillType}\n * @example\n * sprite.fillType = cc.Sprite.FillType.HORIZONTAL;\n */\n fillType : {\n get () {\n return this._fillType;\n },\n set (value) {\n if (value !== this._fillType) {\n this._fillType = value;\n this.setVertsDirty();\n this._resetAssembler();\n }\n },\n type: FillType,\n tooltip: CC_DEV && 'i18n:COMPONENT.sprite.fill_type'\n },\n\n /**\n * !#en\n * The fill Center, This will only have any effect if the \"type\" is set to “cc.Sprite.Type.FILLED”.\n * !#zh\n * 填充中心点,仅渲染类型设置为 cc.Sprite.Type.FILLED 时有效。\n * @property fillCenter\n * @type {Vec2}\n * @example\n * sprite.fillCenter = new cc.Vec2(0, 0);\n */\n fillCenter: {\n get () {\n return this._fillCenter;\n },\n set (value) {\n this._fillCenter.x = value.x;\n this._fillCenter.y = value.y;\n if (this._type === SpriteType.FILLED) {\n this.setVertsDirty();\n }\n },\n tooltip: CC_DEV && 'i18n:COMPONENT.sprite.fill_center',\n },\n\n /**\n * !#en\n * The fill Start, This will only have any effect if the \"type\" is set to “cc.Sprite.Type.FILLED”.\n * !#zh\n * 填充起始点,仅渲染类型设置为 cc.Sprite.Type.FILLED 时有效。\n * @property fillStart\n * @type {Number}\n * @example\n * // -1 To 1 between the numbers\n * sprite.fillStart = 0.5;\n */\n fillStart: {\n get () {\n return this._fillStart;\n },\n set (value) {\n this._fillStart = misc.clampf(value, -1, 1);\n if (this._type === SpriteType.FILLED) {\n this.setVertsDirty();\n }\n },\n tooltip: CC_DEV && 'i18n:COMPONENT.sprite.fill_start'\n },\n\n /**\n * !#en\n * The fill Range, This will only have any effect if the \"type\" is set to “cc.Sprite.Type.FILLED”.\n * !#zh\n * 填充范围,仅渲染类型设置为 cc.Sprite.Type.FILLED 时有效。\n * @property fillRange\n * @type {Number}\n * @example\n * // -1 To 1 between the numbers\n * sprite.fillRange = 1;\n */\n fillRange: {\n get () {\n return this._fillRange;\n },\n set (value) {\n this._fillRange = misc.clampf(value, -1, 1);\n if (this._type === SpriteType.FILLED) {\n this.setVertsDirty();\n }\n },\n tooltip: CC_DEV && 'i18n:COMPONENT.sprite.fill_range'\n },\n /**\n * !#en specify the frame is trimmed or not.\n * !#zh 是否使用裁剪模式\n * @property trim\n * @type {Boolean}\n * @example\n * sprite.trim = true;\n */\n trim: {\n get () {\n return this._isTrimmedMode;\n },\n set (value) {\n if (this._isTrimmedMode !== value) {\n this._isTrimmedMode = value;\n if (this._type === SpriteType.SIMPLE || this._type === SpriteType.MESH) {\n this.setVertsDirty();\n }\n }\n },\n animatable: false,\n tooltip: CC_DEV && 'i18n:COMPONENT.sprite.trim'\n },\n\n \n /**\n * !#en specify the size tracing mode.\n * !#zh 精灵尺寸调整模式\n * @property sizeMode\n * @type {Sprite.SizeMode}\n * @example\n * sprite.sizeMode = cc.Sprite.SizeMode.CUSTOM;\n */\n sizeMode: {\n get () {\n return this._sizeMode;\n },\n set (value) {\n this._sizeMode = value;\n if (value !== SizeMode.CUSTOM) {\n this._applySpriteSize();\n }\n },\n animatable: false,\n type: SizeMode,\n tooltip: CC_DEV && 'i18n:COMPONENT.sprite.size_mode'\n },\n\n autoSwitchMaterial: {\n type: RenderComponent.EnableType,\n default: RenderComponent.EnableType.GLOBAL,\n notify(oldValue) {\n if (this.autoSwitchMaterial === oldValue) return;\n this.setVertsDirty();\n },\n },\n allowDynamicAtlas: {\n type: RenderComponent.EnableType,\n default: RenderComponent.EnableType.GLOBAL,\n notify(oldValue) {\n if (this.allowDynamicAtlas === oldValue) return;\n this.setVertsDirty();\n },\n },\n },\n\n statics: {\n FillType: FillType,\n Type: SpriteType,\n SizeMode: SizeMode,\n State: State,\n },\n\n setVisible (visible) {\n this.enabled = visible;\n },\n\n /**\n * Change the state of sprite.\n * @method setState\n * @see `Sprite.State`\n * @param state {Sprite.State} NORMAL or GRAY State.\n * @deprecated\n */\n setState () {},\n\n /**\n * Gets the current state.\n * @method getState\n * @see `Sprite.State`\n * @return {Sprite.State}\n * @deprecated\n */\n getState () {},\n\n __preload () {\n this._super();\n CC_EDITOR && this.node.on(NodeEvent.SIZE_CHANGED, this._resizedInEditor, this);\n this._applySpriteFrame();\n },\n\n onEnable () {\n this._super();\n this._spriteFrame && this._spriteFrame.ensureLoadTexture();\n\n this.node.on(cc.Node.EventType.SIZE_CHANGED, this.setVertsDirty, this);\n this.node.on(cc.Node.EventType.ANCHOR_CHANGED, this.setVertsDirty, this);\n },\n\n onDisable () {\n this._super();\n \n this.node.off(cc.Node.EventType.SIZE_CHANGED, this.setVertsDirty, this);\n this.node.off(cc.Node.EventType.ANCHOR_CHANGED, this.setVertsDirty, this);\n },\n\n _updateMaterial () {\n let texture = null;\n \n if (this._spriteFrame) {\n texture = this._spriteFrame.getTexture();\n }\n \n // make sure material is belong to self.\n let material = this.getMaterial(0);\n if (material) {\n if (material.getDefine('USE_TEXTURE') !== undefined) {\n material.define('USE_TEXTURE', true);\n }\n\n // 根据材质更新 uniform\n const isMultiMaterial = material.material.isMultiSupport();\n if (isMultiMaterial) {\n // 在 assembler 中进行更新性能会更好,不需要每次 setSpriteFrame 都更新,并且动态图集会导致两次触发\n // if (texture) this._updateMultiTexId(material, texture);\n this._texIdDirty = true;\n } else {\n if (material.getProperty('texture') !== texture) {\n material.setProperty('texture', texture);\n }\n }\n\n // 根据材质更新 assembler\n if (this._assembler) {\n if ((isMultiMaterial && !this._assembler.isMulti) || !isMultiMaterial && this._assembler.isMulti) {\n this._resetAssembler();\n }\n }\n }\n\n BlendFunc.prototype._updateMaterial.call(this);\n },\n\n _applyAtlas: CC_EDITOR && function (spriteFrame) {\n // Set atlas\n if (spriteFrame && spriteFrame._atlasUuid) {\n var self = this;\n cc.assetManager.loadAny(spriteFrame._atlasUuid, function (err, asset) {\n self._atlas = asset;\n });\n } else {\n this._atlas = null;\n }\n },\n\n _validateRender () {\n let spriteFrame = this._spriteFrame;\n if (this._materials[0] &&\n spriteFrame && \n spriteFrame.textureLoaded()) {\n return;\n }\n\n this.disableRender();\n },\n\n _applySpriteSize () {\n if (!this._spriteFrame || !this.isValid) return;\n \n if (SizeMode.RAW === this._sizeMode) {\n var size = this._spriteFrame._originalSize;\n this.node.setContentSize(size);\n } else if (SizeMode.TRIMMED === this._sizeMode) {\n var rect = this._spriteFrame._rect;\n this.node.setContentSize(rect.width, rect.height);\n }\n \n this.setVertsDirty();\n },\n\n _applySpriteFrame (oldFrame) {\n if (!this.isValid) return;\n\n let oldTexture = oldFrame && oldFrame.getTexture();\n if (oldTexture && !oldTexture.loaded) {\n oldFrame.off('load', this._applySpriteSize, this);\n }\n\n this._updateMaterial();\n let spriteFrame = this._spriteFrame;\n if (spriteFrame) {\n let newTexture = spriteFrame.getTexture();\n if (newTexture && newTexture.loaded) {\n this._applySpriteSize();\n }\n else {\n this.disableRender();\n spriteFrame.once('load', this._applySpriteSize, this);\n }\n }\n else {\n this.disableRender();\n }\n\n if (CC_EDITOR) {\n // Set atlas\n this._applyAtlas(spriteFrame);\n }\n },\n});\n\nif (CC_EDITOR) {\n Sprite.prototype._resizedInEditor = function () {\n if (this._spriteFrame) {\n var actualSize = this.node.getContentSize();\n var expectedW = actualSize.width;\n var expectedH = actualSize.height;\n if (this._sizeMode === SizeMode.RAW) {\n var size = this._spriteFrame.getOriginalSize();\n expectedW = size.width;\n expectedH = size.height;\n } else if (this._sizeMode === SizeMode.TRIMMED) {\n var rect = this._spriteFrame.getRect();\n expectedW = rect.width;\n expectedH = rect.height;\n\n }\n\n if (expectedW !== actualSize.width || expectedH !== actualSize.height) {\n this._sizeMode = SizeMode.CUSTOM;\n }\n }\n };\n\n // override onDestroy\n Sprite.prototype.__superOnDestroy = cc.Component.prototype.onDestroy;\n Sprite.prototype.onDestroy = function () {\n if (this.__superOnDestroy) this.__superOnDestroy();\n this.node.off(NodeEvent.SIZE_CHANGED, this._resizedInEditor, this);\n };\n}\n\ncc.Sprite = module.exports = Sprite;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst GraySpriteState = require('../utils/gray-sprite-state');\n\n/**\n * !#en The toggle component is a CheckBox, when it used together with a ToggleGroup, it\n * could be treated as a RadioButton.\n * !#zh Toggle 是一个 CheckBox,当它和 ToggleGroup 一起使用的时候,可以变成 RadioButton。\n * @class Toggle\n * @extends Button\n * @uses GraySpriteState\n */\nlet Toggle = cc.Class({\n name: 'cc.Toggle',\n extends: require('./CCButton'),\n mixins: [GraySpriteState],\n editor: CC_EDITOR && {\n menu: 'i18n:MAIN_MENU.component.ui/Toggle',\n help: 'i18n:COMPONENT.help_url.toggle',\n inspector: 'packages://inspector/inspectors/comps/toggle.js',\n },\n\n properties: {\n /**\n * !#en When this value is true, the check mark component will be enabled, otherwise\n * the check mark component will be disabled.\n * !#zh 如果这个设置为 true,则 check mark 组件会处于 enabled 状态,否则处于 disabled 状态。\n * @property {Boolean} isChecked\n */\n _N$isChecked: true,\n isChecked: {\n get: function () {\n return this._N$isChecked;\n },\n set: function (value) {\n if (value === this._N$isChecked) {\n return;\n }\n\n var group = this.toggleGroup || this._toggleContainer;\n if (group && group.enabled && this._N$isChecked) {\n if (!group.allowSwitchOff) {\n return;\n }\n\n }\n\n this._N$isChecked = value;\n this._updateCheckMark();\n\n if (group && group.enabled) {\n group.updateToggles(this);\n }\n\n if (cc.Toggle._triggerEventInScript_isChecked) {\n this._emitToggleEvents();\n }\n },\n tooltip: CC_DEV && 'i18n:COMPONENT.toggle.isChecked',\n },\n\n /**\n * !#en The toggle group which the toggle belongs to, when it is null, the toggle is a CheckBox.\n * Otherwise, the toggle is a RadioButton.\n * !#zh Toggle 所属的 ToggleGroup,这个属性是可选的。如果这个属性为 null,则 Toggle 是一个 CheckBox,\n * 否则,Toggle 是一个 RadioButton。\n * @property {ToggleGroup} toggleGroup\n */\n toggleGroup: {\n default: null,\n tooltip: CC_DEV && 'i18n:COMPONENT.toggle.toggleGroup',\n type: require('./CCToggleGroup')\n },\n\n /**\n * !#en The image used for the checkmark.\n * !#zh Toggle 处于选中状态时显示的图片\n * @property {Sprite} checkMark\n */\n checkMark: {\n default: null,\n type: cc.Sprite,\n tooltip: CC_DEV && 'i18n:COMPONENT.toggle.checkMark'\n },\n\n /**\n * !#en If Toggle is clicked, it will trigger event's handler\n * !#zh Toggle 按钮的点击事件列表。\n * @property {Component.EventHandler[]} checkEvents\n */\n checkEvents: {\n default: [],\n type: cc.Component.EventHandler\n },\n\n _resizeToTarget: {\n animatable: false,\n set: function (value) {\n if (value) {\n this._resizeNodeToTargetNode();\n }\n }\n },\n\n },\n\n statics: {\n _triggerEventInScript_check: false,\n _triggerEventInScript_isChecked: false,\n },\n\n onEnable: function () {\n this._super();\n if (!CC_EDITOR) {\n this._registerToggleEvent();\n }\n if (this.toggleGroup && this.toggleGroup.enabledInHierarchy) {\n this.toggleGroup.addToggle(this);\n }\n },\n\n onDisable: function () {\n this._super();\n if (!CC_EDITOR) {\n this._unregisterToggleEvent();\n }\n if (this.toggleGroup && this.toggleGroup.enabledInHierarchy) {\n this.toggleGroup.removeToggle(this);\n }\n },\n\n _hideCheckMark () {\n this._N$isChecked = false;\n this._updateCheckMark();\n },\n\n toggle: function (event) {\n this.isChecked = !this.isChecked;\n if (!cc.Toggle._triggerEventInScript_isChecked && (cc.Toggle._triggerEventInScript_check || event)) {\n this._emitToggleEvents();\n }\n },\n\n /**\n * !#en Make the toggle button checked.\n * !#zh 使 toggle 按钮处于选中状态\n * @method check\n */\n check: function () {\n this.isChecked = true;\n if (!cc.Toggle._triggerEventInScript_isChecked && cc.Toggle._triggerEventInScript_check) {\n this._emitToggleEvents();\n }\n },\n\n /**\n * !#en Make the toggle button unchecked.\n * !#zh 使 toggle 按钮处于未选中状态\n * @method uncheck\n */\n uncheck: function () {\n this.isChecked = false;\n if (!cc.Toggle._triggerEventInScript_isChecked && cc.Toggle._triggerEventInScript_check) {\n this._emitToggleEvents();\n }\n },\n\n _updateCheckMark: function () {\n if (this.checkMark) {\n this.checkMark.node.active = !!this.isChecked;\n }\n },\n\n _updateDisabledState: function () {\n this._super();\n\n if (this.enableAutoGrayEffect && this.checkMark) {\n let useGrayMaterial = !this.interactable;\n this._switchGrayMaterial(useGrayMaterial, this.checkMark);\n }\n },\n\n _registerToggleEvent: function () {\n this.node.on('click', this.toggle, this);\n },\n\n _unregisterToggleEvent: function () {\n this.node.off('click', this.toggle, this);\n },\n\n _emitToggleEvents: function () {\n this.node.emit('toggle', this);\n if (this.checkEvents) {\n cc.Component.EventHandler.emitEvents(this.checkEvents, this);\n }\n }\n\n});\n\ncc.Toggle = module.exports = Toggle;\n\nconst js = require('../platform/js');\n\njs.get(Toggle.prototype, '_toggleContainer',\n function () {\n let parent = this.node.parent;\n if (cc.Node.isNode(parent)) {\n return parent.getComponent(cc.ToggleContainer);\n }\n return null;\n }\n);\n\n/**\n * !#en\n * Note: This event is emitted from the node to which the component belongs.\n * !#zh\n * 注意:此事件是从该组件所属的 Node 上面派发出来的,需要用 node.on 来监听。\n * @event toggle\n * @param {Event.EventCustom} event\n * @param {Toggle} toggle - The Toggle component.\n */\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * !#en ToggleContainer is not a visiable UI component but a way to modify the behavior of a set of Toggles.
\n * Toggles that belong to the same group could only have one of them to be switched on at a time.
\n * Note: All the first layer child node containing the toggle component will auto be added to the container\n * !#zh ToggleContainer 不是一个可见的 UI 组件,它可以用来修改一组 Toggle 组件的行为。
\n * 当一组 Toggle 属于同一个 ToggleContainer 的时候,任何时候只能有一个 Toggle 处于选中状态。
\n * 注意:所有包含 Toggle 组件的一级子节点都会自动被添加到该容器中\n * @class ToggleContainer\n * @extends Component\n */\nvar ToggleContainer = cc.Class({\n name: 'cc.ToggleContainer',\n extends: cc.Component,\n editor: CC_EDITOR && {\n menu: 'i18n:MAIN_MENU.component.ui/ToggleContainer',\n help: 'i18n:COMPONENT.help_url.toggleContainer',\n executeInEditMode: true\n },\n\n properties: {\n /**\n * !#en If this setting is true, a toggle could be switched off and on when pressed.\n * If it is false, it will make sure there is always only one toggle could be switched on\n * and the already switched on toggle can't be switched off.\n * !#zh 如果这个设置为 true, 那么 toggle 按钮在被点击的时候可以反复地被选中和未选中。\n * @property {Boolean} allowSwitchOff\n */\n allowSwitchOff: {\n tooltip: CC_DEV && 'i18n:COMPONENT.toggle_group.allowSwitchOff',\n default: false\n },\n\n /**\n * !#en If Toggle is clicked, it will trigger event's handler\n * !#zh Toggle 按钮的点击事件列表。\n * @property {Component.EventHandler[]} checkEvents\n */\n checkEvents: {\n default: [],\n type: cc.Component.EventHandler\n },\n },\n\n updateToggles: function (toggle) {\n if(!this.enabledInHierarchy) return;\n\n if (toggle.isChecked) {\n this.toggleItems.forEach(function (item) {\n if (item !== toggle && item.isChecked && item.enabled) {\n item._hideCheckMark();\n }\n });\n\n if (this.checkEvents) {\n cc.Component.EventHandler.emitEvents(this.checkEvents, toggle);\n }\n }\n },\n\n _allowOnlyOneToggleChecked: function () {\n var isChecked = false;\n this.toggleItems.forEach(function (item) {\n if (isChecked) {\n item._hideCheckMark();\n }\n else if (item.isChecked) {\n isChecked = true;\n }\n });\n\n return isChecked;\n },\n\n _makeAtLeastOneToggleChecked: function () {\n var isChecked = this._allowOnlyOneToggleChecked();\n\n if (!isChecked && !this.allowSwitchOff) {\n var toggleItems = this.toggleItems;\n if (toggleItems.length > 0) {\n toggleItems[0].check();\n }\n }\n },\n\n onEnable: function () {\n this._makeAtLeastOneToggleChecked();\n this.node.on('child-added', this._allowOnlyOneToggleChecked, this);\n this.node.on('child-removed', this._makeAtLeastOneToggleChecked, this);\n },\n\n onDisable: function () {\n this.node.off('child-added', this._allowOnlyOneToggleChecked, this);\n this.node.off('child-removed', this._makeAtLeastOneToggleChecked, this);\n },\n});\n\n/**\n * !#en Read only property, return the toggle items array reference managed by ToggleContainer.\n * !#zh 只读属性,返回 ToggleContainer 管理的 toggle 数组引用\n * @property {Toggle[]} toggleItems\n */\nvar js = require('../platform/js');\njs.get(ToggleContainer.prototype, 'toggleItems',\n function () {\n return this.node._children.map(function (item) {\n return item.getComponent(cc.Toggle);\n }).filter(Boolean);\n }\n);\n\ncc.ToggleContainer = module.exports = ToggleContainer;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * !#en ToggleGroup is not a visiable UI component but a way to modify the behavior of a set of Toggles.\n * Toggles that belong to the same group could only have one of them to be switched on at a time.\n * !#zh ToggleGroup 不是一个可见的 UI 组件,它可以用来修改一组 Toggle 组件的行为。当一组 Toggle 属于同一个 ToggleGroup 的时候,\n * 任何时候只能有一个 Toggle 处于选中状态。\n * @class ToggleGroup\n * @extends Component\n */\nvar ToggleGroup = cc.Class({\n name: 'cc.ToggleGroup',\n extends: cc.Component,\n ctor: function () {\n this._toggleItems = [];\n },\n editor: CC_EDITOR && {\n menu: 'i18n:MAIN_MENU.component.ui/ToggleGroup (Legacy)',\n help: 'i18n:COMPONENT.help_url.toggleGroup'\n },\n\n properties: {\n /**\n * !#en If this setting is true, a toggle could be switched off and on when pressed.\n * If it is false, it will make sure there is always only one toggle could be switched on\n * and the already switched on toggle can't be switched off.\n * !#zh 如果这个设置为 true, 那么 toggle 按钮在被点击的时候可以反复地被选中和未选中。\n * @property {Boolean} allowSwitchOff\n */\n allowSwitchOff: {\n tooltip: CC_DEV && 'i18n:COMPONENT.toggle_group.allowSwitchOff',\n default: false\n },\n\n /**\n * !#en Read only property, return the toggle items array reference managed by toggleGroup.\n * !#zh 只读属性,返回 toggleGroup 管理的 toggle 数组引用\n * @property {Array} toggleItems\n */\n toggleItems: {\n get: function () {\n return this._toggleItems;\n }\n }\n },\n\n updateToggles: function (toggle) {\n if(!this.enabledInHierarchy) return;\n\n this._toggleItems.forEach(function (item){\n if(toggle.isChecked) {\n if (item !== toggle && item.isChecked && item.enabled) {\n item._hideCheckMark();\n }\n }\n });\n },\n\n addToggle: function (toggle) {\n var index = this._toggleItems.indexOf(toggle);\n if (index === -1) {\n this._toggleItems.push(toggle);\n }\n this._allowOnlyOneToggleChecked();\n },\n\n removeToggle: function (toggle) {\n var index = this._toggleItems.indexOf(toggle);\n if(index > -1) {\n this._toggleItems.splice(index, 1);\n }\n this._makeAtLeastOneToggleChecked();\n },\n\n _allowOnlyOneToggleChecked: function () {\n var isChecked = false;\n this._toggleItems.forEach(function (item) {\n if(isChecked && item.enabled) {\n item._hideCheckMark();\n }\n\n if (item.isChecked && item.enabled) {\n isChecked = true;\n }\n });\n\n return isChecked;\n },\n\n _makeAtLeastOneToggleChecked: function () {\n var isChecked = this._allowOnlyOneToggleChecked();\n\n if(!isChecked && !this.allowSwitchOff) {\n if(this._toggleItems.length > 0) {\n this._toggleItems[0].isChecked = true;\n }\n }\n },\n\n start: function () {\n this._makeAtLeastOneToggleChecked();\n }\n});\n\nvar js = require('../platform/js');\nvar showed = false;\njs.get(cc, 'ToggleGroup', function () {\n if (!showed) {\n cc.errorID(1405, 'cc.ToggleGroup', 'cc.ToggleContainer');\n showed = true;\n }\n return ToggleGroup;\n});\n\nmodule.exports = ToggleGroup;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar WidgetManager = require('../base-ui/CCWidgetManager');\n\n/**\n * !#en Enum for Widget's alignment mode, indicating when the widget should refresh.\n * !#zh Widget 的对齐模式,表示 Widget 应该何时刷新。\n * @enum Widget.AlignMode\n */\n/**\n * !#en\n * Only align once when the Widget is enabled for the first time.\n * This will allow the script or animation to continue controlling the current node.\n * It will only be aligned once before the end of frame when onEnable is called,\n * then immediately disables the Widget.\n * !#zh\n * 仅在 Widget 第一次激活时对齐一次,便于脚本或动画继续控制当前节点。\n * 开启后会在 onEnable 时所在的那一帧结束前对齐一次,然后立刻禁用该 Widget。\n * @property {Number} ONCE\n */\n/**\n * !#en Align first from the beginning as ONCE, and then realign it every time the window is resized.\n * !#zh 一开始会像 ONCE 一样对齐一次,之后每当窗口大小改变时还会重新对齐。\n * @property {Number} ON_WINDOW_RESIZE\n */\n/**\n * !#en Keep aligning all the way.\n * !#zh 始终保持对齐。\n * @property {Number} ALWAYS\n */\nvar AlignMode = WidgetManager.AlignMode;\n\nvar AlignFlags = WidgetManager._AlignFlags;\nvar TOP = AlignFlags.TOP;\nvar MID = AlignFlags.MID;\nvar BOT = AlignFlags.BOT;\nvar LEFT = AlignFlags.LEFT;\nvar CENTER = AlignFlags.CENTER;\nvar RIGHT = AlignFlags.RIGHT;\nvar TOP_BOT = TOP | BOT;\nvar LEFT_RIGHT = LEFT | RIGHT;\n\n/**\n * !#en\n * Stores and manipulate the anchoring based on its parent.\n * Widget are used for GUI but can also be used for other things.\n * Widget will adjust current node's position and size automatically, but the results after adjustment can not be obtained until the next frame unless you call {{#crossLink \"Widget/updateAlignment:method\"}}{{/crossLink}} manually.\n * !#zh\n * Widget 组件,用于设置和适配其相对于父节点的边距,Widget 通常被用于 UI 界面,也可以用于其他地方。\n * Widget 会自动调整当前节点的坐标和宽高,不过目前调整后的结果要到下一帧才能在脚本里获取到,除非你先手动调用 {{#crossLink \"Widget/updateAlignment:method\"}}{{/crossLink}}。\n *\n * @class Widget\n * @extends Component\n */\nvar Widget = cc.Class({\n name: 'cc.Widget', extends: require('./CCComponent'),\n\n editor: CC_EDITOR && {\n menu: 'i18n:MAIN_MENU.component.ui/Widget',\n help: 'i18n:COMPONENT.help_url.widget',\n inspector: 'packages://inspector/inspectors/comps/ccwidget.js',\n executeInEditMode: true,\n disallowMultiple: true,\n },\n\n properties: {\n\n /**\n * !#en Specifies an alignment target that can only be one of the parent nodes of the current node.\n * The default value is null, and when null, indicates the current parent.\n * !#zh 指定一个对齐目标,只能是当前节点的其中一个父节点,默认为空,为空时表示当前父节点。\n * @property {Node} target\n * @default null\n */\n target: {\n get: function () {\n return this._target;\n },\n set: function (value) {\n this._target = value;\n if (CC_EDITOR && !cc.engine._isPlaying && this.node._parent) {\n // adjust the offsets to keep the size and position unchanged after target chagned\n WidgetManager.updateOffsetsToStayPut(this);\n }\n },\n type: cc.Node,\n tooltip: CC_DEV && 'i18n:COMPONENT.widget.target',\n },\n\n // ENABLE ALIGN ?\n\n /**\n * !#en Whether to align the top.\n * !#zh 是否对齐上边。\n * @property isAlignTop\n * @type {Boolean}\n * @default false\n */\n isAlignTop: {\n get: function () {\n return (this._alignFlags & TOP) > 0;\n },\n set: function (value) {\n this._setAlign(TOP, value);\n },\n animatable: false,\n tooltip: CC_DEV && 'i18n:COMPONENT.widget.align_top',\n },\n\n /**\n * !#en\n * Vertically aligns the midpoint, This will open the other vertical alignment options cancel.\n * !#zh\n * 是否垂直方向对齐中点,开启此项会将垂直方向其他对齐选项取消。\n * @property isAlignVerticalCenter\n * @type {Boolean}\n * @default false\n */\n isAlignVerticalCenter: {\n get: function () {\n return (this._alignFlags & MID) > 0;\n },\n set: function (value) {\n if (value) {\n this.isAlignTop = false;\n this.isAlignBottom = false;\n this._alignFlags |= MID;\n }\n else {\n this._alignFlags &= ~MID;\n }\n },\n animatable: false,\n tooltip: CC_DEV && 'i18n:COMPONENT.widget.align_v_center',\n },\n\n /**\n * !#en Whether to align the bottom.\n * !#zh 是否对齐下边。\n * @property isAlignBottom\n * @type {Boolean}\n * @default false\n */\n isAlignBottom: {\n get: function () {\n return (this._alignFlags & BOT) > 0;\n },\n set: function (value) {\n this._setAlign(BOT, value);\n },\n animatable: false,\n tooltip: CC_DEV && 'i18n:COMPONENT.widget.align_bottom',\n },\n\n /**\n * !#en Whether to align the left.\n * !#zh 是否对齐左边\n * @property isAlignLeft\n * @type {Boolean}\n * @default false\n */\n isAlignLeft: {\n get: function () {\n return (this._alignFlags & LEFT) > 0;\n },\n set: function (value) {\n this._setAlign(LEFT, value);\n },\n animatable: false,\n tooltip: CC_DEV && 'i18n:COMPONENT.widget.align_left',\n },\n\n /**\n * !#en\n * Horizontal aligns the midpoint. This will open the other horizontal alignment options canceled.\n * !#zh\n * 是否水平方向对齐中点,开启此选项会将水平方向其他对齐选项取消。\n * @property isAlignHorizontalCenter\n * @type {Boolean}\n * @default false\n */\n isAlignHorizontalCenter: {\n get: function () {\n return (this._alignFlags & CENTER) > 0;\n },\n set: function (value) {\n if (value) {\n this.isAlignLeft = false;\n this.isAlignRight = false;\n this._alignFlags |= CENTER;\n }\n else {\n this._alignFlags &= ~CENTER;\n }\n },\n animatable: false,\n tooltip: CC_DEV && 'i18n:COMPONENT.widget.align_h_center',\n },\n\n /**\n * !#en Whether to align the right.\n * !#zh 是否对齐右边。\n * @property isAlignRight\n * @type {Boolean}\n * @default false\n */\n isAlignRight: {\n get: function () {\n return (this._alignFlags & RIGHT) > 0;\n },\n set: function (value) {\n this._setAlign(RIGHT, value);\n },\n animatable: false,\n tooltip: CC_DEV && 'i18n:COMPONENT.widget.align_right',\n },\n\n /**\n * !#en\n * Whether the stretched horizontally, when enable the left and right alignment will be stretched horizontally,\n * the width setting is invalid (read only).\n * !#zh\n * 当前是否水平拉伸。当同时启用左右对齐时,节点将会被水平拉伸,此时节点的宽度只读。\n * @property isStretchWidth\n * @type {Boolean}\n * @default false\n * @readOnly\n */\n isStretchWidth: {\n get: function () {\n return (this._alignFlags & LEFT_RIGHT) === LEFT_RIGHT;\n },\n visible: false\n },\n /**\n * !#en\n * Whether the stretched vertically, when enable the left and right alignment will be stretched vertically,\n * then height setting is invalid (read only)\n * !#zh\n * 当前是否垂直拉伸。当同时启用上下对齐时,节点将会被垂直拉伸,此时节点的高度只读。\n * @property isStretchHeight\n * @type {Boolean}\n * @default false\n * @readOnly\n */\n isStretchHeight: {\n get: function () {\n return (this._alignFlags & TOP_BOT) === TOP_BOT;\n },\n visible: false\n },\n\n // ALIGN MARGINS\n\n /**\n * !#en\n * The margins between the top of this node and the top of parent node,\n * the value can be negative, Only available in 'isAlignTop' open.\n * !#zh\n * 本节点顶边和父节点顶边的距离,可填写负值,只有在 isAlignTop 开启时才有作用。\n * @property top\n * @type {Number}\n * @default 0\n */\n top: {\n get: function () {\n return this._top;\n },\n set: function (value) {\n this._top = value;\n },\n tooltip: CC_DEV && 'i18n:COMPONENT.widget.top',\n },\n\n /**\n * !#en\n * The margins between the bottom of this node and the bottom of parent node,\n * the value can be negative, Only available in 'isAlignBottom' open.\n * !#zh\n * 本节点底边和父节点底边的距离,可填写负值,只有在 isAlignBottom 开启时才有作用。\n * @property bottom\n * @type {Number}\n * @default 0\n */\n bottom: {\n get: function () {\n return this._bottom;\n },\n set: function (value) {\n this._bottom = value;\n },\n tooltip: CC_DEV && 'i18n:COMPONENT.widget.bottom',\n },\n\n /**\n * !#en\n * The margins between the left of this node and the left of parent node,\n * the value can be negative, Only available in 'isAlignLeft' open.\n * !#zh\n * 本节点左边和父节点左边的距离,可填写负值,只有在 isAlignLeft 开启时才有作用。\n * @property left\n * @type {Number}\n * @default 0\n */\n left: {\n get: function () {\n return this._left;\n },\n set: function (value) {\n this._left = value;\n },\n tooltip: CC_DEV && 'i18n:COMPONENT.widget.left',\n },\n\n /**\n * !#en\n * The margins between the right of this node and the right of parent node,\n * the value can be negative, Only available in 'isAlignRight' open.\n * !#zh\n * 本节点右边和父节点右边的距离,可填写负值,只有在 isAlignRight 开启时才有作用。\n * @property right\n * @type {Number}\n * @default 0\n */\n right: {\n get: function () {\n return this._right;\n },\n set: function (value) {\n this._right = value;\n },\n tooltip: CC_DEV && 'i18n:COMPONENT.widget.right',\n },\n\n /**\n * !#en\n * Horizontal aligns the midpoint offset value,\n * the value can be negative, Only available in 'isAlignHorizontalCenter' open.\n * !#zh 水平居中的偏移值,可填写负值,只有在 isAlignHorizontalCenter 开启时才有作用。\n * @property horizontalCenter\n * @type {Number}\n * @default 0\n */\n horizontalCenter: {\n get: function () {\n return this._horizontalCenter;\n },\n set: function (value) {\n this._horizontalCenter = value;\n },\n tooltip: CC_DEV && 'i18n:COMPONENT.widget.horizontal_center',\n },\n\n /**\n * !#en\n * Vertical aligns the midpoint offset value,\n * the value can be negative, Only available in 'isAlignVerticalCenter' open.\n * !#zh 垂直居中的偏移值,可填写负值,只有在 isAlignVerticalCenter 开启时才有作用。\n * @property verticalCenter\n * @type {Number}\n * @default 0\n */\n verticalCenter: {\n get: function () {\n return this._verticalCenter;\n },\n set: function (value) {\n this._verticalCenter = value;\n },\n tooltip: CC_DEV && 'i18n:COMPONENT.widget.vertical_center',\n },\n\n // PARCENTAGE OR ABSOLUTE\n\n /**\n * !#en If true, horizontalCenter is pixel margin, otherwise is percentage (0 - 1) margin.\n * !#zh 如果为 true,\"horizontalCenter\" 将会以像素作为偏移值,反之为百分比(0 到 1)。\n * @property isAbsoluteHorizontalCenter\n * @type {Boolean}\n * @default true\n */\n isAbsoluteHorizontalCenter: {\n get: function () {\n return this._isAbsHorizontalCenter;\n },\n set: function (value) {\n this._isAbsHorizontalCenter = value;\n },\n animatable: false\n },\n\n /**\n * !#en If true, verticalCenter is pixel margin, otherwise is percentage (0 - 1) margin.\n * !#zh 如果为 true,\"verticalCenter\" 将会以像素作为偏移值,反之为百分比(0 到 1)。\n * @property isAbsoluteVerticalCenter\n * @type {Boolean}\n * @default true\n */\n isAbsoluteVerticalCenter: {\n get: function () {\n return this._isAbsVerticalCenter;\n },\n set: function (value) {\n this._isAbsVerticalCenter = value;\n },\n animatable: false\n },\n\n /**\n * !#en\n * If true, top is pixel margin, otherwise is percentage (0 - 1) margin relative to the parent's height.\n * !#zh\n * 如果为 true,\"top\" 将会以像素作为边距,否则将会以相对父物体高度的百分比(0 到 1)作为边距。\n * @property isAbsoluteTop\n * @type {Boolean}\n * @default true\n */\n isAbsoluteTop: {\n get: function () {\n return this._isAbsTop;\n },\n set: function (value) {\n this._isAbsTop = value;\n },\n animatable: false\n },\n\n /**\n * !#en\n * If true, bottom is pixel margin, otherwise is percentage (0 - 1) margin relative to the parent's height.\n * !#zh\n * 如果为 true,\"bottom\" 将会以像素作为边距,否则将会以相对父物体高度的百分比(0 到 1)作为边距。\n * @property isAbsoluteBottom\n * @type {Boolean}\n * @default true\n */\n isAbsoluteBottom: {\n get: function () {\n return this._isAbsBottom;\n },\n set: function (value) {\n this._isAbsBottom = value;\n },\n animatable: false\n },\n\n /**\n * !#en\n * If true, left is pixel margin, otherwise is percentage (0 - 1) margin relative to the parent's width.\n * !#zh\n * 如果为 true,\"left\" 将会以像素作为边距,否则将会以相对父物体宽度的百分比(0 到 1)作为边距。\n * @property isAbsoluteLeft\n * @type {Boolean}\n * @default true\n */\n isAbsoluteLeft: {\n get: function () {\n return this._isAbsLeft;\n },\n set: function (value) {\n this._isAbsLeft = value;\n },\n animatable: false\n },\n\n /**\n * !#en\n * If true, right is pixel margin, otherwise is percentage (0 - 1) margin relative to the parent's width.\n * !#zh\n * 如果为 true,\"right\" 将会以像素作为边距,否则将会以相对父物体宽度的百分比(0 到 1)作为边距。\n * @property isAbsoluteRight\n * @type {Boolean}\n * @default true\n */\n isAbsoluteRight: {\n get: function () {\n return this._isAbsRight;\n },\n set: function (value) {\n this._isAbsRight = value;\n },\n animatable: false\n },\n\n /**\n * !#en Specifies the alignment mode of the Widget, which determines when the widget should refresh.\n * !#zh 指定 Widget 的对齐模式,用于决定 Widget 应该何时刷新。\n * @property {Widget.AlignMode} alignMode\n * @example\n * widget.alignMode = cc.Widget.AlignMode.ON_WINDOW_RESIZE;\n */\n alignMode: {\n default: AlignMode.ON_WINDOW_RESIZE,\n type: AlignMode,\n tooltip: CC_DEV && 'i18n:COMPONENT.widget.align_mode',\n },\n\n //\n\n _wasAlignOnce: {\n default: undefined,\n formerlySerializedAs: 'isAlignOnce',\n },\n\n _target: null,\n\n /**\n * !#zh: 对齐开关,由 AlignFlags 组成\n *\n * @property _alignFlags\n * @type {Number}\n * @default 0\n * @private\n */\n _alignFlags: 0,\n\n _left: 0,\n _right: 0,\n _top: 0,\n _bottom: 0,\n _verticalCenter: 0,\n _horizontalCenter: 0,\n _isAbsLeft: true,\n _isAbsRight: true,\n _isAbsTop: true,\n _isAbsBottom: true,\n _isAbsHorizontalCenter: true,\n _isAbsVerticalCenter: true,\n\n // original size before align\n _originalWidth: 0,\n _originalHeight: 0\n },\n\n statics: {\n AlignMode: AlignMode,\n },\n\n onLoad: function () {\n if (this._wasAlignOnce !== undefined) {\n // migrate for old version\n this.alignMode = this._wasAlignOnce ? AlignMode.ONCE : AlignMode.ALWAYS;\n this._wasAlignOnce = undefined;\n }\n },\n\n onEnable: function () {\n WidgetManager.add(this);\n },\n\n onDisable: function () {\n WidgetManager.remove(this);\n },\n\n _validateTargetInDEV: CC_DEV && function () {\n var target = this._target;\n if (target) {\n var isParent = this.node !== target && this.node.isChildOf(target);\n if (!isParent) {\n cc.errorID(6500);\n this._target = null;\n }\n }\n\n },\n\n _setAlign: function (flag, isAlign) {\n var current = (this._alignFlags & flag) > 0;\n if (isAlign === current) {\n return;\n }\n var isHorizontal = (flag & LEFT_RIGHT) > 0;\n if (isAlign) {\n this._alignFlags |= flag;\n\n if (isHorizontal) {\n this.isAlignHorizontalCenter = false;\n if (this.isStretchWidth) {\n // become stretch\n this._originalWidth = this.node.width;\n // test check conflict\n if (CC_EDITOR && !cc.engine.isPlaying) {\n _Scene.DetectConflict.checkConflict_Widget(this);\n }\n }\n }\n else {\n this.isAlignVerticalCenter = false;\n if (this.isStretchHeight) {\n // become stretch\n this._originalHeight = this.node.height;\n // test check conflict\n if (CC_EDITOR && !cc.engine.isPlaying) {\n _Scene.DetectConflict.checkConflict_Widget(this);\n }\n }\n }\n\n if (CC_EDITOR && !cc.engine._isPlaying && this.node._parent) {\n // adjust the offsets to keep the size and position unchanged after alignment chagned\n WidgetManager.updateOffsetsToStayPut(this, flag);\n }\n }\n else {\n if (isHorizontal) {\n if (this.isStretchWidth) {\n // will cancel stretch\n this.node.width = this._originalWidth;\n }\n }\n else {\n if (this.isStretchHeight) {\n // will cancel stretch\n this.node.height = this._originalHeight;\n }\n }\n\n this._alignFlags &= ~flag;\n }\n },\n\n /**\n * !#en\n * Immediately perform the widget alignment. You need to manually call this method only if\n * you need to get the latest results after the alignment before the end of current frame.\n * !#zh\n * 立刻执行 widget 对齐操作。这个接口一般不需要手工调用。\n * 只有当你需要在当前帧结束前获得 widget 对齐后的最新结果时才需要手动调用这个方法。\n *\n * @method updateAlignment\n *\n * @example\n * widget.top = 10; // change top margin\n * cc.log(widget.node.y); // not yet changed\n * widget.updateAlignment();\n * cc.log(widget.node.y); // changed\n */\n updateAlignment: function () {\n WidgetManager.updateAlignment(this.node);\n },\n});\n\n/**\n * !#en\n * When turned on, it will only be aligned once at the end of the onEnable frame,\n * then immediately disables the current component.\n * This will allow the script or animation to continue controlling the current node.\n * Note: It will still be aligned at the frame when onEnable is called.\n * !#zh\n * 开启后仅会在 onEnable 的当帧结束时对齐一次,然后立刻禁用当前组件。\n * 这样便于脚本或动画继续控制当前节点。\n * 注意:onEnable 时所在的那一帧仍然会进行对齐。\n * @property {Boolean} isAlignOnce\n * @default false\n * @deprecated\n */\nObject.defineProperty(Widget.prototype, 'isAlignOnce', {\n get () {\n if (CC_DEBUG) {\n cc.warn('`widget.isAlignOnce` is deprecated, use `widget.alignMode === cc.Widget.AlignMode.ONCE` instead please.');\n }\n return this.alignMode === AlignMode.ONCE;\n },\n set (value) {\n if (CC_DEBUG) {\n cc.warn('`widget.isAlignOnce` is deprecated, use `widget.alignMode = cc.Widget.AlignMode.*` instead please.');\n }\n this.alignMode = value ? AlignMode.ONCE : AlignMode.ALWAYS;\n }\n});\n\n\ncc.Widget = module.exports = Widget;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nrequire('./CCComponent');\nrequire('./CCComponentEventHandler');\nrequire('./missing-script');\n\n// In case subContextView modules are excluded\nlet SubContextView = require('./SubContextView');\nif (!SubContextView) {\n SubContextView = cc.Class({\n name: 'cc.SubContextView',\n extends: cc.Component,\n });\n cc.SubContextView = cc.WXSubContextView = cc.SwanSubContextView = SubContextView;\n}\n\nvar components = [\n require('./CCSprite'),\n require('./CCWidget'),\n require('./CCCanvas'),\n require('./CCAudioSource'),\n require('./CCAnimation'),\n require('./CCButton'),\n require('./CCLabel'),\n require('./CCProgressBar'),\n require('./CCMask'),\n require('./CCScrollBar'),\n require('./CCScrollView'),\n require('./CCPageViewIndicator'),\n require('./CCPageView'),\n require('./CCSlider'),\n require('./CCLayout'),\n require('./editbox/CCEditBox'),\n require('./CCLabelOutline'),\n require('./CCLabelShadow'),\n require('./CCRichText'),\n require('./CCToggleContainer'),\n require('./CCToggleGroup'),\n require('./CCToggle'),\n require('./CCBlockInputEvents'),\n require('./CCMotionStreak'),\n require('./CCSafeArea'),\n SubContextView,\n];\n\nmodule.exports = components;","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar js = cc.js;\n\n/*\n * A temp fallback to contain the original serialized data which can not be loaded.\n * Deserialized as a component by default.\n */\nvar MissingScript = cc.Class({\n name: 'cc.MissingScript', \n extends: cc.Component,\n editor: {\n inspector: 'packages://inspector/inspectors/comps/missing-script.js',\n },\n properties: {\n //_scriptUuid: {\n // get: function () {\n // var id = this._$erialized.__type__;\n // if (Editor.Utils.UuidUtils.isUuid(id)) {\n // return Editor.Utils.UuidUtils.decompressUuid(id);\n // }\n // return '';\n // },\n // set: function (value) {\n // if ( !sandbox.compiled ) {\n // cc.error('Scripts not yet compiled, please fix script errors and compile first.');\n // return;\n // }\n // if (value && Editor.Utils.UuidUtils.isUuid(value._uuid)) {\n // var classId = Editor.Utils.UuidUtils.compressUuid(value);\n // if (cc.js._getClassById(classId)) {\n // this._$erialized.__type__ = classId;\n // Editor.Ipc.sendToWins('reload:window-scripts', sandbox.compiled);\n // }\n // else {\n // cc.error('Can not find a component in the script which uuid is \"%s\".', value);\n // }\n // }\n // else {\n // cc.error('invalid script');\n // }\n // }\n //},\n compiled: {\n default: false,\n serializable: false\n },\n // the serialized data for original script object\n _$erialized: {\n default: null,\n visible: false,\n editorOnly: true\n }\n },\n ctor: CC_EDITOR && function () {\n this.compiled = _Scene.Sandbox.compiled;\n },\n statics: {\n /*\n * @param {string} id\n * @return {function} constructor\n */\n safeFindClass: function (id) {\n var cls = js._getClassById(id);\n if (cls) {\n return cls;\n }\n cc.deserialize.reportMissingClass(id);\n return MissingScript;\n },\n },\n onLoad: function () {\n cc.warnID(4600, this.node.name);\n }\n});\n\ncc._MissingScript = module.exports = MissingScript;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar js = cc.js;\n\nrequire('../event/event');\n\n/**\n * !#en The mouse event\n * !#zh 鼠标事件类型\n * @class Event.EventMouse\n *\n * @extends Event\n * @param {Number} eventType - The mouse event type, UP, DOWN, MOVE, CANCELED\n * @param {Boolean} [bubbles=false] - A boolean indicating whether the event bubbles up through the tree or not\n */\nvar EventMouse = function (eventType, bubbles) {\n cc.Event.call(this, cc.Event.MOUSE, bubbles);\n this._eventType = eventType;\n this._button = 0;\n this._x = 0;\n this._y = 0;\n this._prevX = 0;\n this._prevY = 0;\n this._scrollX = 0;\n this._scrollY = 0;\n};\n\njs.extend(EventMouse, cc.Event);\nvar proto = EventMouse.prototype;\n\n/**\n * !#en Sets scroll data.\n * !#zh 设置鼠标的滚动数据。\n * @method setScrollData\n * @param {Number} scrollX\n * @param {Number} scrollY\n */\nproto.setScrollData = function (scrollX, scrollY) {\n this._scrollX = scrollX;\n this._scrollY = scrollY;\n};\n\n/**\n * !#en Returns the x axis scroll value.\n * !#zh 获取鼠标滚动的X轴距离,只有滚动时才有效。\n * @method getScrollX\n * @returns {Number}\n */\nproto.getScrollX = function () {\n return this._scrollX;\n};\n\n/**\n * !#en Returns the y axis scroll value.\n * !#zh 获取滚轮滚动的 Y 轴距离,只有滚动时才有效。\n * @method getScrollY\n * @returns {Number}\n */\nproto.getScrollY = function () {\n return this._scrollY;\n};\n\n/**\n * !#en Sets cursor location.\n * !#zh 设置当前鼠标位置。\n * @method setLocation\n * @param {Number} x\n * @param {Number} y\n */\nproto.setLocation = function (x, y) {\n this._x = x;\n this._y = y;\n};\n\n/**\n * !#en Returns cursor location.\n * !#zh 获取鼠标位置对象,对象包含 x 和 y 属性。\n * @method getLocation\n * @return {Vec2} location\n */\nproto.getLocation = function () {\n return cc.v2(this._x, this._y);\n};\n\n/**\n * !#en Returns the current cursor location in screen coordinates.\n * !#zh 获取当前事件在游戏窗口内的坐标位置对象,对象包含 x 和 y 属性。\n * @method getLocationInView\n * @return {Vec2}\n */\nproto.getLocationInView = function() {\n return cc.v2(this._x, cc.view._designResolutionSize.height - this._y);\n};\n\nproto._setPrevCursor = function (x, y) {\n this._prevX = x;\n this._prevY = y;\n};\n\n/**\n * !#en Returns the previous touch location.\n * !#zh 获取鼠标点击在上一次事件时的位置对象,对象包含 x 和 y 属性。\n * @method getPreviousLocation\n * @return {Vec2}\n */\nproto.getPreviousLocation = function () {\n return cc.v2(this._prevX, this._prevY);\n};\n\n/**\n * !#en Returns the delta distance from the previous location to current location.\n * !#zh 获取鼠标距离上一次事件移动的距离对象,对象包含 x 和 y 属性。\n * @method getDelta\n * @return {Vec2}\n */\nproto.getDelta = function () {\n return cc.v2(this._x - this._prevX, this._y - this._prevY);\n};\n\n/**\n * !#en Returns the X axis delta distance from the previous location to current location.\n * !#zh 获取鼠标距离上一次事件移动的 X 轴距离。\n * @method getDeltaX\n * @return {Number}\n */\nproto.getDeltaX = function () {\n return this._x - this._prevX;\n};\n\n/**\n * !#en Returns the Y axis delta distance from the previous location to current location.\n * !#zh 获取鼠标距离上一次事件移动的 Y 轴距离。\n * @method getDeltaY\n * @return {Number}\n */\nproto.getDeltaY = function () {\n return this._y - this._prevY;\n};\n\n/**\n * !#en Sets mouse button.\n * !#zh 设置鼠标按键。\n * @method setButton\n * @param {Number} button\n */\nproto.setButton = function (button) {\n this._button = button;\n};\n\n/**\n * !#en Returns mouse button.\n * !#zh 获取鼠标按键。\n * @method getButton\n * @returns {Number}\n */\nproto.getButton = function () {\n return this._button;\n};\n\n/**\n * !#en Returns location X axis data.\n * !#zh 获取鼠标当前位置 X 轴。\n * @method getLocationX\n * @returns {Number}\n */\nproto.getLocationX = function () {\n return this._x;\n};\n\n/**\n * !#en Returns location Y axis data.\n * !#zh 获取鼠标当前位置 Y 轴。\n * @method getLocationY\n * @returns {Number}\n */\nproto.getLocationY = function () {\n return this._y;\n};\n\n//Inner event types of MouseEvent\n/**\n * !#en The none event code of mouse event.\n * !#zh 无。\n * @property NONE\n * @static\n * @type {Number}\n */\nEventMouse.NONE = 0;\n/**\n * !#en The event type code of mouse down event.\n * !#zh 鼠标按下事件。\n * @property DOWN\n * @static\n * @type {Number}\n */\nEventMouse.DOWN = 1;\n/**\n * !#en The event type code of mouse up event.\n * !#zh 鼠标按下后释放事件。\n * @property UP\n * @static\n * @type {Number}\n */\nEventMouse.UP = 2;\n/**\n * !#en The event type code of mouse move event.\n * !#zh 鼠标移动事件。\n * @property MOVE\n * @static\n * @type {Number}\n */\nEventMouse.MOVE = 3;\n/**\n * !#en The event type code of mouse scroll event.\n * !#zh 鼠标滚轮事件。\n * @property SCROLL\n * @static\n * @type {Number}\n */\nEventMouse.SCROLL = 4;\n\n/**\n * !#en The tag of Mouse left button.\n * !#zh 鼠标左键的标签。\n * @property BUTTON_LEFT\n * @static\n * @type {Number}\n */\nEventMouse.BUTTON_LEFT = 0;\n\n/**\n * !#en The tag of Mouse right button (The right button number is 2 on browser).\n * !#zh 鼠标右键的标签。\n * @property BUTTON_RIGHT\n * @static\n * @type {Number}\n */\nEventMouse.BUTTON_RIGHT = 2;\n\n/**\n * !#en The tag of Mouse middle button (The right button number is 1 on browser).\n * !#zh 鼠标中键的标签。\n * @property BUTTON_MIDDLE\n * @static\n * @type {Number}\n */\nEventMouse.BUTTON_MIDDLE = 1;\n\n/**\n * !#en The tag of Mouse button 4.\n * !#zh 鼠标按键 4 的标签。\n * @property BUTTON_4\n * @static\n * @type {Number}\n */\nEventMouse.BUTTON_4 = 3;\n\n/**\n * !#en The tag of Mouse button 5.\n * !#zh 鼠标按键 5 的标签。\n * @property BUTTON_5\n * @static\n * @type {Number}\n */\nEventMouse.BUTTON_5 = 4;\n\n/**\n * !#en The tag of Mouse button 6.\n * !#zh 鼠标按键 6 的标签。\n * @property BUTTON_6\n * @static\n * @type {Number}\n */\nEventMouse.BUTTON_6 = 5;\n\n/**\n * !#en The tag of Mouse button 7.\n * !#zh 鼠标按键 7 的标签。\n * @property BUTTON_7\n * @static\n * @type {Number}\n */\nEventMouse.BUTTON_7 = 6;\n\n/**\n * !#en The tag of Mouse button 8.\n * !#zh 鼠标按键 8 的标签。\n * @property BUTTON_8\n * @static\n * @type {Number}\n */\nEventMouse.BUTTON_8 = 7;\n\n/**\n * !#en The touch event\n * !#zh 触摸事件\n * @class Event.EventTouch\n * @constructor\n * @extends Event\n */\n/**\n * @method constructor\n * @param {Array} touchArr - The array of the touches\n * @param {Boolean} bubbles - A boolean indicating whether the event bubbles up through the tree or not\n */\nvar EventTouch = function (touchArr, bubbles) {\n cc.Event.call(this, cc.Event.TOUCH, bubbles);\n this._eventCode = 0;\n this._touches = touchArr || [];\n /**\n * !#en The current touch object\n * !#zh 当前触点对象\n * @property touch\n * @type {Touch}\n */\n this.touch = null;\n // Actually duplicated, because of history issue, currentTouch was in the original design, touch was added in creator engine\n // They should point to the same object\n this.currentTouch = null;\n};\n\njs.extend(EventTouch, cc.Event);\nproto = EventTouch.prototype;\n\n/**\n * !#en Returns event code.\n * !#zh 获取事件类型。\n * @method getEventCode\n * @returns {Number}\n */\nproto.getEventCode = function () {\n return this._eventCode;\n};\n\n/**\n * !#en Returns touches of event.\n * !#zh 获取触摸点的列表。\n * @method getTouches\n * @returns {Array}\n */\nproto.getTouches = function () {\n return this._touches;\n};\n\nproto._setEventCode = function (eventCode) {\n this._eventCode = eventCode;\n};\n\nproto._setTouches = function (touches) {\n this._touches = touches;\n};\n\n/**\n * !#en Sets touch location.\n * !#zh 设置当前触点位置\n * @method setLocation\n * @param {Number} x\n * @param {Number} y\n */\nproto.setLocation = function (x, y) {\n this.touch && this.touch.setTouchInfo(this.touch.getID(), x, y);\n};\n\n/**\n * !#en Returns touch location.\n * !#zh 获取触点位置。\n * @method getLocation\n * @return {Vec2} location\n */\nproto.getLocation = function () {\n return this.touch ? this.touch.getLocation() : cc.v2();\n};\n\n/**\n * !#en Returns the current touch location in screen coordinates.\n * !#zh 获取当前触点在游戏窗口中的位置。\n * @method getLocationInView\n * @return {Vec2}\n */\nproto.getLocationInView = function() {\n return this.touch ? this.touch.getLocationInView() : cc.v2();\n};\n\n/**\n * !#en Returns the previous touch location.\n * !#zh 获取触点在上一次事件时的位置对象,对象包含 x 和 y 属性。\n * @method getPreviousLocation\n * @return {Vec2}\n */\nproto.getPreviousLocation = function () {\n return this.touch ? this.touch.getPreviousLocation() : cc.v2();\n};\n\n/**\n * !#en Returns the start touch location.\n * !#zh 获取触点落下时的位置对象,对象包含 x 和 y 属性。\n * @method getStartLocation\n * @returns {Vec2}\n */\nproto.getStartLocation = function() {\n return this.touch ? this.touch.getStartLocation() : cc.v2();\n};\n\n/**\n * !#en Returns the id of cc.Touch.\n * !#zh 触点的标识 ID,可以用来在多点触摸中跟踪触点。\n * @method getID\n * @return {Number}\n */\nproto.getID = function () {\n return this.touch ? this.touch.getID() : null;\n};\n\n/**\n * !#en Returns the delta distance from the previous location to current location.\n * !#zh 获取触点距离上一次事件移动的距离对象,对象包含 x 和 y 属性。\n * @method getDelta\n * @return {Vec2}\n */\nproto.getDelta = function () {\n return this.touch ? this.touch.getDelta() : cc.v2();\n};\n\n/**\n * !#en Returns the X axis delta distance from the previous location to current location.\n * !#zh 获取触点距离上一次事件移动的 x 轴距离。\n * @method getDeltaX\n * @return {Number}\n */\nproto.getDeltaX = function () {\n return this.touch ? this.touch.getDelta().x : 0;\n};\n\n/**\n * !#en Returns the Y axis delta distance from the previous location to current location.\n * !#zh 获取触点距离上一次事件移动的 y 轴距离。\n * @method getDeltaY\n * @return {Number}\n */\nproto.getDeltaY = function () {\n return this.touch ? this.touch.getDelta().y : 0;\n};\n\n/**\n * !#en Returns location X axis data.\n * !#zh 获取当前触点 X 轴位置。\n * @method getLocationX\n * @returns {Number}\n */\nproto.getLocationX = function () {\n return this.touch ? this.touch.getLocationX() : 0;\n};\n\n/**\n * !#en Returns location Y axis data.\n * !#zh 获取当前触点 Y 轴位置。\n * @method getLocationY\n * @returns {Number}\n */\nproto.getLocationY = function () {\n return this.touch ? this.touch.getLocationY() : 0;\n};\n\n/**\n * !#en The maximum touch numbers\n * !#zh 最大触摸数量。\n * @constant\n * @type {Number}\n */\nEventTouch.MAX_TOUCHES = 5;\n\n/**\n * !#en The event type code of touch began event.\n * !#zh 开始触摸事件\n * @constant\n * @type {Number}\n */\nEventTouch.BEGAN = 0;\n/**\n * !#en The event type code of touch moved event.\n * !#zh 触摸后移动事件\n * @constant\n * @type {Number}\n */\nEventTouch.MOVED = 1;\n/**\n * !#en The event type code of touch ended event.\n * !#zh 结束触摸事件\n * @constant\n * @type {Number}\n */\nEventTouch.ENDED = 2;\n/**\n * !#en The event type code of touch cancelled event.\n * !#zh 取消触摸事件\n * @constant\n * @type {Number}\n */\nEventTouch.CANCELED = 3;\n\n/**\n * !#en The acceleration event\n * !#zh 加速度事件\n * @class Event.EventAcceleration\n * @extends Event\n *\n * @param {Object} acc - The acceleration\n * @param {Boolean} bubbles - A boolean indicating whether the event bubbles up through the tree or not\n */\nvar EventAcceleration = function (acc, bubbles) {\n cc.Event.call(this, cc.Event.ACCELERATION, bubbles);\n this.acc = acc;\n};\njs.extend(EventAcceleration, cc.Event);\n\n/**\n * !#en The keyboard event\n * !#zh 键盘事件\n * @class Event.EventKeyboard\n * @extends Event\n *\n * @param {Number} keyCode - The key code of which triggered this event\n * @param {Boolean} isPressed - A boolean indicating whether the key have been pressed\n * @param {Boolean} bubbles - A boolean indicating whether the event bubbles up through the tree or not\n */\nvar EventKeyboard = function (keyCode, isPressed, bubbles) {\n cc.Event.call(this, cc.Event.KEYBOARD, bubbles);\n /**\n * !#en\n * The keyCode read-only property represents a system and implementation dependent numerical code identifying the unmodified value of the pressed key.\n * This is usually the decimal ASCII (RFC 20) or Windows 1252 code corresponding to the key.\n * If the key can't be identified, this value is 0.\n *\n * !#zh\n * keyCode 是只读属性它表示一个系统和依赖于实现的数字代码,可以识别按键的未修改值。\n * 这通常是十进制 ASCII (RFC20) 或者 Windows 1252 代码,所对应的密钥。\n * 如果无法识别该键,则该值为 0。\n *\n * @property keyCode\n * @type {Number}\n */\n this.keyCode = keyCode;\n this.isPressed = isPressed;\n};\njs.extend(EventKeyboard, cc.Event);\n\ncc.Event.EventMouse = EventMouse;\ncc.Event.EventTouch = EventTouch;\ncc.Event.EventAcceleration = EventAcceleration;\ncc.Event.EventKeyboard = EventKeyboard;\n\nmodule.exports = cc.Event;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar js = require('../platform/js');\n\n/**\n * !#en\n *

\n * The base class of event listener.
\n * If you need custom listener which with different callback, you need to inherit this class.
\n * For instance, you could refer to EventListenerAcceleration, EventListenerKeyboard,
\n * EventListenerTouchOneByOne, EventListenerCustom.\n *

\n *\n * !#zh\n * 封装用户的事件处理逻辑。\n * 注意:这是一个抽象类,开发者不应该直接实例化这个类,请参考 {{#crossLink \"EventListener/create:method\"}}cc.EventListener.create{{/crossLink}}。\n *\n * @class EventListener\n */\n\n/**\n * Constructor\n * @method constructor\n * @param {Number} type\n * @param {Number} listenerID\n * @param {Number} callback\n */\ncc.EventListener = function (type, listenerID, callback) {\n this._onEvent = callback; // Event callback function\n this._type = type || 0; // Event listener type\n this._listenerID = listenerID || \"\"; // Event listener ID\n this._registered = false; // Whether the listener has been added to dispatcher.\n\n this._fixedPriority = 0; // The higher the number, the higher the priority, 0 is for scene graph base priority.\n this._node = null; // scene graph based priority\n this._target = null;\n this._paused = true; // Whether the listener is paused\n this._isEnabled = true; // Whether the listener is enabled\n};\n\ncc.EventListener.prototype = {\n constructor: cc.EventListener,\n /*\n *

\n * Sets paused state for the listener\n * The paused state is only used for scene graph priority listeners.\n * `EventDispatcher::resumeAllEventListenersForTarget(node)` will set the paused state to `true`,\n * while `EventDispatcher::pauseAllEventListenersForTarget(node)` will set it to `false`.\n * @note 1) Fixed priority listeners will never get paused. If a fixed priority doesn't want to receive events,\n * call `setEnabled(false)` instead.\n * 2) In `Node`'s onEnter and onExit, the `paused state` of the listeners which associated with that node will be automatically updated.\n *

\n * @param {Boolean} paused\n * @private\n */\n _setPaused: function (paused) {\n this._paused = paused;\n },\n\n /*\n * Checks whether the listener is paused.\n * @returns {Boolean}\n * @private\n */\n _isPaused: function () {\n return this._paused;\n },\n\n /*\n * Marks the listener was registered by EventDispatcher.\n * @param {Boolean} registered\n * @private\n */\n _setRegistered: function (registered) {\n this._registered = registered;\n },\n\n /*\n * Checks whether the listener was registered by EventDispatcher\n * @returns {Boolean}\n * @private\n */\n _isRegistered: function () {\n return this._registered;\n },\n\n /*\n * Gets the type of this listener\n * @note It's different from `EventType`, e.g. TouchEvent has two kinds of event listeners - EventListenerOneByOne, EventListenerAllAtOnce\n * @returns {Number}\n * @private\n */\n _getType: function () {\n return this._type;\n },\n\n /*\n * Gets the listener ID of this listener\n * When event is being dispatched, listener ID is used as key for searching listeners according to event type.\n * @returns {String}\n * @private\n */\n _getListenerID: function () {\n return this._listenerID;\n },\n\n /*\n * Sets the fixed priority for this listener\n * @note This method is only used for `fixed priority listeners`, it needs to access a non-zero value. 0 is reserved for scene graph priority listeners\n * @param {Number} fixedPriority\n * @private\n */\n _setFixedPriority: function (fixedPriority) {\n this._fixedPriority = fixedPriority;\n },\n\n /*\n * Gets the fixed priority of this listener\n * @returns {Number} 0 if it's a scene graph priority listener, non-zero for fixed priority listener\n * @private\n */\n _getFixedPriority: function () {\n return this._fixedPriority;\n },\n\n /*\n * Sets scene graph priority for this listener\n * @param {cc.Node} node\n * @private\n */\n _setSceneGraphPriority: function (node) {\n this._target = node;\n this._node = node;\n },\n\n /*\n * Gets scene graph priority of this listener\n * @returns {cc.Node} if it's a fixed priority listener, non-null for scene graph priority listener\n * @private\n */\n _getSceneGraphPriority: function () {\n return this._node;\n },\n\n /**\n * !#en Checks whether the listener is available.\n * !#zh 检测监听器是否有效\n * @method checkAvailable\n * @returns {Boolean}\n */\n checkAvailable: function () {\n return this._onEvent !== null;\n },\n\n /**\n * !#en Clones the listener, its subclasses have to override this method.\n * !#zh 克隆监听器,它的子类必须重写此方法。\n * @method clone\n * @returns {EventListener}\n */\n clone: function () {\n return null;\n },\n\n /**\n * !#en Enables or disables the listener\n * !#zh 启用或禁用监听器。\n * @method setEnabled\n * @param {Boolean} enabled\n * @note Only listeners with `enabled` state will be able to receive events.\n * When an listener was initialized, it's enabled by default.\n * An event listener can receive events when it is enabled and is not paused.\n * paused state is always false when it is a fixed priority listener.\n */\n setEnabled: function(enabled){\n this._isEnabled = enabled;\n },\n\n /**\n * !#en Checks whether the listener is enabled\n * !#zh 检查监听器是否可用。\n * @method isEnabled\n * @returns {Boolean}\n */\n isEnabled: function(){\n return this._isEnabled;\n },\n\n /*\n *

Currently JavaScript Bindings (JSB), in some cases, needs to use retain and release. This is a bug in JSB,\n * and the ugly workaround is to use retain/release. So, these 2 methods were added to be compatible with JSB.\n * This is a hack, and should be removed once JSB fixes the retain/release bug
\n * You will need to retain an object if you created a listener and haven't added it any target node during the same frame.
\n * Otherwise, JSB's native autorelease pool will consider this object a useless one and release it directly,
\n * when you want to use it later, a \"Invalid Native Object\" error will be raised.
\n * The retain function can increase a reference count for the native object to avoid it being released,
\n * you need to manually invoke release function when you think this object is no longer needed, otherwise, there will be memory learks.
\n * retain and release function call should be paired in developer's game code.

\n *\n * @method retain\n * @see cc.EventListener#release\n */\n retain:function () {\n },\n /*\n *

Currently JavaScript Bindings (JSB), in some cases, needs to use retain and release. This is a bug in JSB,\n * and the ugly workaround is to use retain/release. So, these 2 methods were added to be compatible with JSB.\n * This is a hack, and should be removed once JSB fixes the retain/release bug
\n * You will need to retain an object if you created a listener and haven't added it any target node during the same frame.
\n * Otherwise, JSB's native autorelease pool will consider this object a useless one and release it directly,
\n * when you want to use it later, a \"Invalid Native Object\" error will be raised.
\n * The retain function can increase a reference count for the native object to avoid it being released,
\n * you need to manually invoke release function when you think this object is no longer needed, otherwise, there will be memory learks.
\n * retain and release function call should be paired in developer's game code.

\n *\n * @method release\n * @see cc.EventListener#retain\n */\n release:function () {\n }\n};\n\n// event listener type\n/**\n * !#en The type code of unknown event listener.\n * !#zh 未知的事件监听器类型\n * @property UNKNOWN\n * @type {Number}\n * @static\n */\ncc.EventListener.UNKNOWN = 0;\n/*\n * !#en The type code of one by one touch event listener.\n * !#zh 触摸事件监听器类型,触点会一个一个得分开被派发\n * @property TOUCH_ONE_BY_ONE\n * @type {Number}\n * @static\n */\ncc.EventListener.TOUCH_ONE_BY_ONE = 1;\n/*\n * !#en The type code of all at once touch event listener.\n * !#zh 触摸事件监听器类型,触点会被一次性全部派发\n * @property TOUCH_ALL_AT_ONCE\n * @type {Number}\n * @static\n */\ncc.EventListener.TOUCH_ALL_AT_ONCE = 2;\n/**\n * !#en The type code of keyboard event listener.\n * !#zh 键盘事件监听器类型\n * @property KEYBOARD\n * @type {Number}\n * @static\n */\ncc.EventListener.KEYBOARD = 3;\n/*\n * !#en The type code of mouse event listener.\n * !#zh 鼠标事件监听器类型\n * @property MOUSE\n * @type {Number}\n * @static\n */\ncc.EventListener.MOUSE = 4;\n/**\n * !#en The type code of acceleration event listener.\n * !#zh 加速器事件监听器类型\n * @property ACCELERATION\n * @type {Number}\n * @static\n */\ncc.EventListener.ACCELERATION = 6;\n/*\n * !#en The type code of custom event listener.\n * !#zh 自定义事件监听器类型\n * @property CUSTOM\n * @type {Number}\n * @static\n */\ncc.EventListener.CUSTOM = 8;\n\nvar ListenerID = cc.EventListener.ListenerID = {\n MOUSE: '__cc_mouse',\n TOUCH_ONE_BY_ONE: '__cc_touch_one_by_one',\n TOUCH_ALL_AT_ONCE: '__cc_touch_all_at_once',\n KEYBOARD: '__cc_keyboard',\n ACCELERATION: '__cc_acceleration',\n};\n\nvar Custom = function (listenerId, callback) {\n this._onCustomEvent = callback;\n cc.EventListener.call(this, cc.EventListener.CUSTOM, listenerId, this._callback);\n};\njs.extend(Custom, cc.EventListener);\njs.mixin(Custom.prototype, {\n _onCustomEvent: null,\n \n _callback: function (event) {\n if (this._onCustomEvent !== null)\n this._onCustomEvent(event);\n },\n\n checkAvailable: function () {\n return (cc.EventListener.prototype.checkAvailable.call(this) && this._onCustomEvent !== null);\n },\n\n clone: function () {\n return new Custom(this._listenerID, this._onCustomEvent);\n }\n});\n\nvar Mouse = function () {\n cc.EventListener.call(this, cc.EventListener.MOUSE, ListenerID.MOUSE, this._callback);\n};\njs.extend(Mouse, cc.EventListener);\njs.mixin(Mouse.prototype, {\n onMouseDown: null,\n onMouseUp: null,\n onMouseMove: null,\n onMouseScroll: null,\n\n _callback: function (event) {\n var eventType = cc.Event.EventMouse;\n switch (event._eventType) {\n case eventType.DOWN:\n if (this.onMouseDown)\n this.onMouseDown(event);\n break;\n case eventType.UP:\n if (this.onMouseUp)\n this.onMouseUp(event);\n break;\n case eventType.MOVE:\n if (this.onMouseMove)\n this.onMouseMove(event);\n break;\n case eventType.SCROLL:\n if (this.onMouseScroll)\n this.onMouseScroll(event);\n break;\n default:\n break;\n }\n },\n\n clone: function () {\n var eventListener = new Mouse();\n eventListener.onMouseDown = this.onMouseDown;\n eventListener.onMouseUp = this.onMouseUp;\n eventListener.onMouseMove = this.onMouseMove;\n eventListener.onMouseScroll = this.onMouseScroll;\n return eventListener;\n },\n\n checkAvailable: function () {\n return true;\n }\n});\n\nvar TouchOneByOne = function () {\n cc.EventListener.call(this, cc.EventListener.TOUCH_ONE_BY_ONE, ListenerID.TOUCH_ONE_BY_ONE, null);\n this._claimedTouches = [];\n};\njs.extend(TouchOneByOne, cc.EventListener);\njs.mixin(TouchOneByOne.prototype, {\n constructor: TouchOneByOne,\n _claimedTouches: null,\n swallowTouches: false,\n onTouchBegan: null,\n onTouchMoved: null,\n onTouchEnded: null,\n onTouchCancelled: null,\n\n setSwallowTouches: function (needSwallow) {\n this.swallowTouches = needSwallow;\n },\n\n isSwallowTouches: function(){\n return this.swallowTouches;\n },\n\n clone: function () {\n var eventListener = new TouchOneByOne();\n eventListener.onTouchBegan = this.onTouchBegan;\n eventListener.onTouchMoved = this.onTouchMoved;\n eventListener.onTouchEnded = this.onTouchEnded;\n eventListener.onTouchCancelled = this.onTouchCancelled;\n eventListener.swallowTouches = this.swallowTouches;\n return eventListener;\n },\n\n checkAvailable: function () {\n if(!this.onTouchBegan){\n cc.logID(1801);\n return false;\n }\n return true;\n }\n});\n\nvar TouchAllAtOnce = function () {\n cc.EventListener.call(this, cc.EventListener.TOUCH_ALL_AT_ONCE, ListenerID.TOUCH_ALL_AT_ONCE, null);\n};\njs.extend(TouchAllAtOnce, cc.EventListener);\njs.mixin(TouchAllAtOnce.prototype, {\n constructor: TouchAllAtOnce,\n onTouchesBegan: null,\n onTouchesMoved: null,\n onTouchesEnded: null,\n onTouchesCancelled: null,\n\n clone: function(){\n var eventListener = new TouchAllAtOnce();\n eventListener.onTouchesBegan = this.onTouchesBegan;\n eventListener.onTouchesMoved = this.onTouchesMoved;\n eventListener.onTouchesEnded = this.onTouchesEnded;\n eventListener.onTouchesCancelled = this.onTouchesCancelled;\n return eventListener;\n },\n\n checkAvailable: function(){\n if (this.onTouchesBegan === null && this.onTouchesMoved === null\n && this.onTouchesEnded === null && this.onTouchesCancelled === null) {\n cc.logID(1802);\n return false;\n }\n return true;\n }\n});\n\n//Acceleration\nvar Acceleration = function (callback) {\n this._onAccelerationEvent = callback;\n cc.EventListener.call(this, cc.EventListener.ACCELERATION, ListenerID.ACCELERATION, this._callback);\n};\njs.extend(Acceleration, cc.EventListener);\njs.mixin(Acceleration.prototype, {\n constructor: Acceleration,\n _onAccelerationEvent: null,\n\n _callback: function (event) {\n this._onAccelerationEvent(event.acc, event);\n },\n\n checkAvailable: function () {\n cc.assertID(this._onAccelerationEvent, 1803);\n\n return true;\n },\n\n clone: function () {\n return new Acceleration(this._onAccelerationEvent);\n }\n});\n\n\n//Keyboard\nvar Keyboard = function () {\n cc.EventListener.call(this, cc.EventListener.KEYBOARD, ListenerID.KEYBOARD, this._callback);\n};\njs.extend(Keyboard, cc.EventListener);\njs.mixin(Keyboard.prototype, {\n constructor: Keyboard,\n onKeyPressed: null,\n onKeyReleased: null,\n\n _callback: function (event) {\n if (event.isPressed) {\n if (this.onKeyPressed)\n this.onKeyPressed(event.keyCode, event);\n } else {\n if (this.onKeyReleased)\n this.onKeyReleased(event.keyCode, event);\n }\n },\n\n clone: function () {\n var eventListener = new Keyboard();\n eventListener.onKeyPressed = this.onKeyPressed;\n eventListener.onKeyReleased = this.onKeyReleased;\n return eventListener;\n },\n\n checkAvailable: function () {\n if (this.onKeyPressed === null && this.onKeyReleased === null) {\n cc.logID(1800);\n return false;\n }\n return true;\n }\n});\n\n/**\n * !#en\n * Create a EventListener object with configuration including the event type, handlers and other parameters.\n * In handlers, this refer to the event listener object itself.\n * You can also pass custom parameters in the configuration object,\n * all custom parameters will be polyfilled into the event listener object and can be accessed in handlers.\n * !#zh 通过指定不同的 Event 对象来设置想要创建的事件监听器。\n * @method create\n * @param {Object} argObj a json object\n * @returns {EventListener}\n * @static\n * @example {@link cocos2d/core/event-manager/CCEventListener/create.js}\n */\ncc.EventListener.create = function (argObj) {\n cc.assertID(argObj&&argObj.event, 1900);\n\n var listenerType = argObj.event;\n delete argObj.event;\n\n var listener = null;\n if(listenerType === cc.EventListener.TOUCH_ONE_BY_ONE)\n listener = new TouchOneByOne();\n else if(listenerType === cc.EventListener.TOUCH_ALL_AT_ONCE)\n listener = new TouchAllAtOnce();\n else if(listenerType === cc.EventListener.MOUSE)\n listener = new Mouse();\n else if(listenerType === cc.EventListener.CUSTOM){\n listener = new Custom(argObj.eventName, argObj.callback);\n delete argObj.eventName;\n delete argObj.callback;\n } else if(listenerType === cc.EventListener.KEYBOARD)\n listener = new Keyboard();\n else if(listenerType === cc.EventListener.ACCELERATION){\n listener = new Acceleration(argObj.callback);\n delete argObj.callback;\n }\n\n for(var key in argObj) {\n listener[key] = argObj[key];\n }\n return listener;\n};\n\nmodule.exports = cc.EventListener;","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nvar js = require('../platform/js');\nrequire('./CCEventListener');\nvar ListenerID = cc.EventListener.ListenerID;\n\nvar _EventListenerVector = function () {\n this._fixedListeners = [];\n this._sceneGraphListeners = [];\n this.gt0Index = 0;\n};\n_EventListenerVector.prototype = {\n constructor: _EventListenerVector,\n size: function () {\n return this._fixedListeners.length + this._sceneGraphListeners.length;\n },\n\n empty: function () {\n return (this._fixedListeners.length === 0) && (this._sceneGraphListeners.length === 0);\n },\n\n push: function (listener) {\n if (listener._getFixedPriority() === 0)\n this._sceneGraphListeners.push(listener);\n else\n this._fixedListeners.push(listener);\n },\n\n clearSceneGraphListeners: function () {\n this._sceneGraphListeners.length = 0;\n },\n\n clearFixedListeners: function () {\n this._fixedListeners.length = 0;\n },\n\n clear: function () {\n this._sceneGraphListeners.length = 0;\n this._fixedListeners.length = 0;\n },\n\n getFixedPriorityListeners: function () {\n return this._fixedListeners;\n },\n\n getSceneGraphPriorityListeners: function () {\n return this._sceneGraphListeners;\n }\n};\n\nvar __getListenerID = function (event) {\n var eventType = cc.Event, type = event.type;\n if (type === eventType.ACCELERATION)\n return ListenerID.ACCELERATION;\n if (type === eventType.KEYBOARD)\n return ListenerID.KEYBOARD;\n if (type.startsWith(eventType.MOUSE))\n return ListenerID.MOUSE;\n if (type.startsWith(eventType.TOUCH)){\n // Touch listener is very special, it contains two kinds of listeners, EventListenerTouchOneByOne and EventListenerTouchAllAtOnce.\n // return UNKNOWN instead.\n cc.logID(2000);\n }\n return \"\";\n};\n\n/**\n * !#en\n * This class has been deprecated, please use cc.systemEvent or cc.EventTarget instead. See [Listen to and launch events](../../../manual/en/scripting/events.html) for details.
\n *
\n * cc.eventManager is a singleton object which manages event listener subscriptions and event dispatching.\n * The EventListener list is managed in such way so that event listeners can be added and removed\n * while events are being dispatched.\n *\n * !#zh\n * 该类已废弃,请使用 cc.systemEvent 或 cc.EventTarget 代替,详见 [监听和发射事件](../../../manual/zh/scripting/events.html)。
\n *
\n * 事件管理器,它主要管理事件监听器注册和派发系统事件。\n *\n * @class eventManager\n * @static\n * @example {@link cocos2d/core/event-manager/CCEventManager/addListener.js}\n * @deprecated\n */\nvar eventManager = {\n //Priority dirty flag\n DIRTY_NONE: 0,\n DIRTY_FIXED_PRIORITY: 1 << 0,\n DIRTY_SCENE_GRAPH_PRIORITY: 1 << 1,\n DIRTY_ALL: 3,\n \n _listenersMap: {},\n _priorityDirtyFlagMap: {},\n _nodeListenersMap: {},\n _toAddedListeners: [],\n _toRemovedListeners: [],\n _dirtyListeners: {},\n _inDispatch: 0,\n _isEnabled: false,\n _currentTouch: null,\n _currentTouchListener: null,\n\n _internalCustomListenerIDs:[],\n\n _setDirtyForNode: function (node) {\n // Mark the node dirty only when there is an event listener associated with it.\n let selListeners = this._nodeListenersMap[node._id];\n if (selListeners !== undefined) {\n for (let j = 0, len = selListeners.length; j < len; j++) {\n let selListener = selListeners[j];\n let listenerID = selListener._getListenerID();\n if (this._dirtyListeners[listenerID] == null)\n this._dirtyListeners[listenerID] = true;\n }\n }\n if (node.childrenCount > 0) {\n let children = node._children;\n for(let i = 0, len = children.length; i < len; i++)\n this._setDirtyForNode(children[i]);\n }\n },\n\n /**\n * !#en Pauses all listeners which are associated the specified target.\n * !#zh 暂停传入的 node 相关的所有监听器的事件响应。\n * @method pauseTarget\n * @param {Node} node\n * @param {Boolean} [recursive=false]\n */\n pauseTarget: function (node, recursive) {\n if (!(node instanceof cc._BaseNode)) {\n cc.warnID(3506);\n return;\n }\n var listeners = this._nodeListenersMap[node._id], i, len;\n if (listeners) {\n for (i = 0, len = listeners.length; i < len; i++)\n listeners[i]._setPaused(true);\n }\n if (recursive === true) {\n var locChildren = node._children;\n for (i = 0, len = locChildren ? locChildren.length : 0; i < len; i++)\n this.pauseTarget(locChildren[i], true);\n }\n },\n\n /**\n * !#en Resumes all listeners which are associated the specified target.\n * !#zh 恢复传入的 node 相关的所有监听器的事件响应。\n * @method resumeTarget\n * @param {Node} node\n * @param {Boolean} [recursive=false]\n */\n resumeTarget: function (node, recursive) {\n if (!(node instanceof cc._BaseNode)) {\n cc.warnID(3506);\n return;\n }\n var listeners = this._nodeListenersMap[node._id], i, len;\n if (listeners){\n for ( i = 0, len = listeners.length; i < len; i++)\n listeners[i]._setPaused(false);\n }\n this._setDirtyForNode(node);\n if (recursive === true) {\n var locChildren = node._children;\n for (i = 0, len = locChildren ? locChildren.length : 0; i < len; i++)\n this.resumeTarget(locChildren[i], true);\n }\n },\n\n _addListener: function (listener) {\n if (this._inDispatch === 0)\n this._forceAddEventListener(listener);\n else\n this._toAddedListeners.push(listener);\n },\n\n _forceAddEventListener: function (listener) {\n var listenerID = listener._getListenerID();\n var listeners = this._listenersMap[listenerID];\n if (!listeners) {\n listeners = new _EventListenerVector();\n this._listenersMap[listenerID] = listeners;\n }\n listeners.push(listener);\n\n if (listener._getFixedPriority() === 0) {\n this._setDirty(listenerID, this.DIRTY_SCENE_GRAPH_PRIORITY);\n\n var node = listener._getSceneGraphPriority();\n if (node === null)\n cc.logID(3507);\n\n this._associateNodeAndEventListener(node, listener);\n if (node.activeInHierarchy)\n this.resumeTarget(node);\n } else\n this._setDirty(listenerID, this.DIRTY_FIXED_PRIORITY);\n },\n\n _getListeners: function (listenerID) {\n return this._listenersMap[listenerID];\n },\n\n _updateDirtyFlagForSceneGraph: function () {\n let locDirtyListeners = this._dirtyListeners\n for (var selKey in locDirtyListeners) {\n this._setDirty(selKey, this.DIRTY_SCENE_GRAPH_PRIORITY);\n }\n\n this._dirtyListeners = {};\n },\n\n _removeAllListenersInVector: function (listenerVector) {\n if (!listenerVector)\n return;\n var selListener;\n for (var i = listenerVector.length - 1; i >= 0; i--) {\n selListener = listenerVector[i];\n selListener._setRegistered(false);\n if (selListener._getSceneGraphPriority() != null) {\n this._dissociateNodeAndEventListener(selListener._getSceneGraphPriority(), selListener);\n selListener._setSceneGraphPriority(null); // NULL out the node pointer so we don't have any dangling pointers to destroyed nodes.\n }\n\n if (this._inDispatch === 0)\n cc.js.array.removeAt(listenerVector, i);\n }\n },\n\n _removeListenersForListenerID: function (listenerID) {\n var listeners = this._listenersMap[listenerID], i;\n if (listeners) {\n var fixedPriorityListeners = listeners.getFixedPriorityListeners();\n var sceneGraphPriorityListeners = listeners.getSceneGraphPriorityListeners();\n\n this._removeAllListenersInVector(sceneGraphPriorityListeners);\n this._removeAllListenersInVector(fixedPriorityListeners);\n\n // Remove the dirty flag according the 'listenerID'.\n // No need to check whether the dispatcher is dispatching event.\n delete this._priorityDirtyFlagMap[listenerID];\n\n if (!this._inDispatch) {\n listeners.clear();\n delete this._listenersMap[listenerID];\n }\n }\n\n var locToAddedListeners = this._toAddedListeners, listener;\n for (i = locToAddedListeners.length - 1; i >= 0; i--) {\n listener = locToAddedListeners[i];\n if (listener && listener._getListenerID() === listenerID)\n cc.js.array.removeAt(locToAddedListeners, i);\n }\n },\n\n _sortEventListeners: function (listenerID) {\n var dirtyFlag = this.DIRTY_NONE, locFlagMap = this._priorityDirtyFlagMap;\n if (locFlagMap[listenerID])\n dirtyFlag = locFlagMap[listenerID];\n \n if (dirtyFlag !== this.DIRTY_NONE) {\n // Clear the dirty flag first, if `rootNode` is null, then set its dirty flag of scene graph priority\n locFlagMap[listenerID] = this.DIRTY_NONE;\n\n if (dirtyFlag & this.DIRTY_FIXED_PRIORITY)\n this._sortListenersOfFixedPriority(listenerID);\n\n if (dirtyFlag & this.DIRTY_SCENE_GRAPH_PRIORITY){\n var rootEntity = cc.director.getScene();\n if(rootEntity)\n this._sortListenersOfSceneGraphPriority(listenerID);\n }\n }\n },\n\n _sortListenersOfSceneGraphPriority: function (listenerID) {\n var listeners = this._getListeners(listenerID);\n if (!listeners)\n return;\n\n var sceneGraphListener = listeners.getSceneGraphPriorityListeners();\n if (!sceneGraphListener || sceneGraphListener.length === 0)\n return;\n\n // After sort: priority < 0, > 0\n listeners.getSceneGraphPriorityListeners().sort(this._sortEventListenersOfSceneGraphPriorityDes);\n },\n\n _sortEventListenersOfSceneGraphPriorityDes: function (l1, l2) {\n let node1 = l1._getSceneGraphPriority(),\n node2 = l2._getSceneGraphPriority();\n\n if (!l2 || !node2 || !node2._activeInHierarchy || node2._parent === null)\n return -1;\n else if (!l1 || !node1 || !node1._activeInHierarchy || node1._parent === null)\n return 1;\n \n let p1 = node1, p2 = node2, ex = false;\n while (p1._parent._id !== p2._parent._id) {\n p1 = p1._parent._parent === null ? (ex = true) && node2 : p1._parent;\n p2 = p2._parent._parent === null ? (ex = true) && node1 : p2._parent;\n }\n\n if (p1._id === p2._id) {\n if (p1._id === node2._id) \n return -1;\n if (p1._id === node1._id)\n return 1;\n }\n\n return ex ? p1._localZOrder - p2._localZOrder : p2._localZOrder - p1._localZOrder;\n },\n\n _sortListenersOfFixedPriority: function (listenerID) {\n var listeners = this._listenersMap[listenerID];\n if (!listeners)\n return;\n\n var fixedListeners = listeners.getFixedPriorityListeners();\n if(!fixedListeners || fixedListeners.length === 0)\n return;\n // After sort: priority < 0, > 0\n fixedListeners.sort(this._sortListenersOfFixedPriorityAsc);\n\n // FIXME: Should use binary search\n var index = 0;\n for (var len = fixedListeners.length; index < len;) {\n if (fixedListeners[index]._getFixedPriority() >= 0)\n break;\n ++index;\n }\n listeners.gt0Index = index;\n },\n\n _sortListenersOfFixedPriorityAsc: function (l1, l2) {\n return l1._getFixedPriority() - l2._getFixedPriority();\n },\n\n _onUpdateListeners: function (listeners) {\n var fixedPriorityListeners = listeners.getFixedPriorityListeners();\n var sceneGraphPriorityListeners = listeners.getSceneGraphPriorityListeners();\n var i, selListener, idx, toRemovedListeners = this._toRemovedListeners;\n\n if (sceneGraphPriorityListeners) {\n for (i = sceneGraphPriorityListeners.length - 1; i >= 0; i--) {\n selListener = sceneGraphPriorityListeners[i];\n if (!selListener._isRegistered()) {\n cc.js.array.removeAt(sceneGraphPriorityListeners, i);\n // if item in toRemove list, remove it from the list\n idx = toRemovedListeners.indexOf(selListener);\n if(idx !== -1)\n toRemovedListeners.splice(idx, 1);\n }\n }\n }\n\n if (fixedPriorityListeners) {\n for (i = fixedPriorityListeners.length - 1; i >= 0; i--) {\n selListener = fixedPriorityListeners[i];\n if (!selListener._isRegistered()) {\n cc.js.array.removeAt(fixedPriorityListeners, i);\n // if item in toRemove list, remove it from the list\n idx = toRemovedListeners.indexOf(selListener);\n if(idx !== -1)\n toRemovedListeners.splice(idx, 1);\n }\n }\n }\n\n if (sceneGraphPriorityListeners && sceneGraphPriorityListeners.length === 0)\n listeners.clearSceneGraphListeners();\n\n if (fixedPriorityListeners && fixedPriorityListeners.length === 0)\n listeners.clearFixedListeners();\n },\n\n frameUpdateListeners: function () {\n var locListenersMap = this._listenersMap, locPriorityDirtyFlagMap = this._priorityDirtyFlagMap;\n for (var selKey in locListenersMap) {\n if (locListenersMap[selKey].empty()) {\n delete locPriorityDirtyFlagMap[selKey];\n delete locListenersMap[selKey];\n }\n }\n\n var locToAddedListeners = this._toAddedListeners;\n if (locToAddedListeners.length !== 0) {\n for (var i = 0, len = locToAddedListeners.length; i < len; i++)\n this._forceAddEventListener(locToAddedListeners[i]);\n locToAddedListeners.length = 0;\n }\n if (this._toRemovedListeners.length !== 0) {\n this._cleanToRemovedListeners();\n }\n },\n\n _updateTouchListeners: function (event) {\n var locInDispatch = this._inDispatch;\n cc.assertID(locInDispatch > 0, 3508);\n\n if (locInDispatch > 1)\n return;\n\n var listeners;\n listeners = this._listenersMap[ListenerID.TOUCH_ONE_BY_ONE];\n if (listeners) {\n this._onUpdateListeners(listeners);\n }\n listeners = this._listenersMap[ListenerID.TOUCH_ALL_AT_ONCE];\n if (listeners) {\n this._onUpdateListeners(listeners);\n }\n\n cc.assertID(locInDispatch === 1, 3509);\n\n var locToAddedListeners = this._toAddedListeners;\n if (locToAddedListeners.length !== 0) {\n for (var i = 0, len = locToAddedListeners.length; i < len; i++)\n this._forceAddEventListener(locToAddedListeners[i]);\n this._toAddedListeners.length = 0;\n }\n\n if (this._toRemovedListeners.length !== 0) {\n this._cleanToRemovedListeners();\n }\n },\n\n //Remove all listeners in _toRemoveListeners list and cleanup\n _cleanToRemovedListeners: function () {\n var toRemovedListeners = this._toRemovedListeners;\n for (var i = 0; i < toRemovedListeners.length; i++) {\n var selListener = toRemovedListeners[i];\n var listeners = this._listenersMap[selListener._getListenerID()];\n if (!listeners)\n continue;\n\n var idx, fixedPriorityListeners = listeners.getFixedPriorityListeners(),\n sceneGraphPriorityListeners = listeners.getSceneGraphPriorityListeners();\n\n if (sceneGraphPriorityListeners) {\n idx = sceneGraphPriorityListeners.indexOf(selListener);\n if (idx !== -1) {\n sceneGraphPriorityListeners.splice(idx, 1);\n }\n }\n if (fixedPriorityListeners) {\n idx = fixedPriorityListeners.indexOf(selListener);\n if (idx !== -1) {\n fixedPriorityListeners.splice(idx, 1);\n }\n }\n }\n toRemovedListeners.length = 0;\n },\n\n _onTouchEventCallback: function (listener, argsObj) {\n // Skip if the listener was removed.\n if (!listener._isRegistered())\n return false;\n\n var event = argsObj.event, selTouch = event.currentTouch;\n event.currentTarget = listener._node;\n\n var isClaimed = false, removedIdx;\n var getCode = event.getEventCode(), EventTouch = cc.Event.EventTouch;\n if (getCode === EventTouch.BEGAN) {\n if (!cc.macro.ENABLE_MULTI_TOUCH && eventManager._currentTouch) {\n let node = eventManager._currentTouchListener._node;\n if (node && node.activeInHierarchy) {\n return false;\n }\n }\n\n if (listener.onTouchBegan) {\n isClaimed = listener.onTouchBegan(selTouch, event);\n if (isClaimed && listener._registered) {\n listener._claimedTouches.push(selTouch);\n eventManager._currentTouchListener = listener;\n eventManager._currentTouch = selTouch;\n }\n }\n } else if (listener._claimedTouches.length > 0\n && ((removedIdx = listener._claimedTouches.indexOf(selTouch)) !== -1)) {\n isClaimed = true;\n \n if (!cc.macro.ENABLE_MULTI_TOUCH && eventManager._currentTouch && eventManager._currentTouch !== selTouch) {\n return false;\n }\n\n if (getCode === EventTouch.MOVED && listener.onTouchMoved) {\n listener.onTouchMoved(selTouch, event);\n } else if (getCode === EventTouch.ENDED) {\n if (listener.onTouchEnded)\n listener.onTouchEnded(selTouch, event);\n if (listener._registered)\n listener._claimedTouches.splice(removedIdx, 1);\n eventManager._clearCurTouch();\n } else if (getCode === EventTouch.CANCELED) {\n if (listener.onTouchCancelled)\n listener.onTouchCancelled(selTouch, event);\n if (listener._registered)\n listener._claimedTouches.splice(removedIdx, 1);\n eventManager._clearCurTouch();\n }\n }\n\n // If the event was stopped, return directly.\n if (event.isStopped()) {\n eventManager._updateTouchListeners(event);\n return true;\n }\n\n if (isClaimed && listener.swallowTouches) {\n if (argsObj.needsMutableSet)\n argsObj.touches.splice(selTouch, 1);\n return true;\n }\n return false;\n },\n\n _dispatchTouchEvent: function (event) {\n this._sortEventListeners(ListenerID.TOUCH_ONE_BY_ONE);\n this._sortEventListeners(ListenerID.TOUCH_ALL_AT_ONCE);\n\n var oneByOneListeners = this._getListeners(ListenerID.TOUCH_ONE_BY_ONE);\n var allAtOnceListeners = this._getListeners(ListenerID.TOUCH_ALL_AT_ONCE);\n\n // If there aren't any touch listeners, return directly.\n if (null === oneByOneListeners && null === allAtOnceListeners)\n return;\n\n var originalTouches = event.getTouches(), mutableTouches = cc.js.array.copy(originalTouches);\n var oneByOneArgsObj = {event: event, needsMutableSet: (oneByOneListeners && allAtOnceListeners), touches: mutableTouches, selTouch: null};\n\n //\n // process the target handlers 1st\n //\n if (oneByOneListeners) {\n for (var i = 0; i < originalTouches.length; i++) {\n event.currentTouch = originalTouches[i];\n event._propagationStopped = event._propagationImmediateStopped = false;\n this._dispatchEventToListeners(oneByOneListeners, this._onTouchEventCallback, oneByOneArgsObj);\n }\n }\n\n //\n // process standard handlers 2nd\n //\n if (allAtOnceListeners && mutableTouches.length > 0) {\n this._dispatchEventToListeners(allAtOnceListeners, this._onTouchesEventCallback, {event: event, touches: mutableTouches});\n if (event.isStopped())\n return;\n }\n this._updateTouchListeners(event);\n },\n\n _onTouchesEventCallback: function (listener, callbackParams) {\n // Skip if the listener was removed.\n if (!listener._registered)\n return false;\n\n var EventTouch = cc.Event.EventTouch, event = callbackParams.event, touches = callbackParams.touches, getCode = event.getEventCode();\n event.currentTarget = listener._node;\n if (getCode === EventTouch.BEGAN && listener.onTouchesBegan)\n listener.onTouchesBegan(touches, event);\n else if (getCode === EventTouch.MOVED && listener.onTouchesMoved)\n listener.onTouchesMoved(touches, event);\n else if (getCode === EventTouch.ENDED && listener.onTouchesEnded)\n listener.onTouchesEnded(touches, event);\n else if (getCode === EventTouch.CANCELED && listener.onTouchesCancelled)\n listener.onTouchesCancelled(touches, event);\n\n // If the event was stopped, return directly.\n if (event.isStopped()) {\n eventManager._updateTouchListeners(event);\n return true;\n }\n return false;\n },\n\n _associateNodeAndEventListener: function (node, listener) {\n var listeners = this._nodeListenersMap[node._id];\n if (!listeners) {\n listeners = [];\n this._nodeListenersMap[node._id] = listeners;\n }\n listeners.push(listener);\n },\n\n _dissociateNodeAndEventListener: function (node, listener) {\n var listeners = this._nodeListenersMap[node._id];\n if (listeners) {\n cc.js.array.remove(listeners, listener);\n if (listeners.length === 0)\n delete this._nodeListenersMap[node._id];\n }\n },\n\n _dispatchEventToListeners: function (listeners, onEvent, eventOrArgs) {\n var shouldStopPropagation = false;\n var fixedPriorityListeners = listeners.getFixedPriorityListeners();\n var sceneGraphPriorityListeners = listeners.getSceneGraphPriorityListeners();\n\n var i = 0, j, selListener;\n if (fixedPriorityListeners) { // priority < 0\n if (fixedPriorityListeners.length !== 0) {\n for (; i < listeners.gt0Index; ++i) {\n selListener = fixedPriorityListeners[i];\n if (selListener.isEnabled() && !selListener._isPaused() && selListener._isRegistered() && onEvent(selListener, eventOrArgs)) {\n shouldStopPropagation = true;\n break;\n }\n }\n }\n }\n\n if (sceneGraphPriorityListeners && !shouldStopPropagation) { // priority == 0, scene graph priority\n for (j = 0; j < sceneGraphPriorityListeners.length; j++) {\n selListener = sceneGraphPriorityListeners[j];\n if (selListener.isEnabled() && !selListener._isPaused() && selListener._isRegistered() && onEvent(selListener, eventOrArgs)) {\n shouldStopPropagation = true;\n break;\n }\n }\n }\n\n if (fixedPriorityListeners && !shouldStopPropagation) { // priority > 0\n for (; i < fixedPriorityListeners.length; ++i) {\n selListener = fixedPriorityListeners[i];\n if (selListener.isEnabled() && !selListener._isPaused() && selListener._isRegistered() && onEvent(selListener, eventOrArgs)) {\n shouldStopPropagation = true;\n break;\n }\n }\n }\n },\n\n _setDirty: function (listenerID, flag) {\n var locDirtyFlagMap = this._priorityDirtyFlagMap;\n if (locDirtyFlagMap[listenerID] == null)\n locDirtyFlagMap[listenerID] = flag;\n else\n locDirtyFlagMap[listenerID] = flag | locDirtyFlagMap[listenerID];\n },\n\n _sortNumberAsc: function (a, b) {\n return a - b;\n },\n\n /**\n * !#en Query whether the specified event listener id has been added.\n * !#zh 查询指定的事件 ID 是否存在\n * @method hasEventListener\n * @param {String|Number} listenerID - The listener id.\n * @return {Boolean} true or false\n */\n hasEventListener: function (listenerID) {\n return !!this._getListeners(listenerID);\n },\n\n /**\n * !#en\n *

\n * Adds a event listener for a specified event.
\n * if the parameter \"nodeOrPriority\" is a node,\n * it means to add a event listener for a specified event with the priority of scene graph.
\n * if the parameter \"nodeOrPriority\" is a Number,\n * it means to add a event listener for a specified event with the fixed priority.
\n *

\n * !#zh\n * 将事件监听器添加到事件管理器中。
\n * 如果参数 “nodeOrPriority” 是节点,优先级由 node 的渲染顺序决定,显示在上层的节点将优先收到事件。
\n * 如果参数 “nodeOrPriority” 是数字,优先级则固定为该参数的数值,数字越小,优先级越高。
\n *\n * @method addListener\n * @param {EventListener|Object} listener - The listener of a specified event or a object of some event parameters.\n * @param {Node|Number} nodeOrPriority - The priority of the listener is based on the draw order of this node or fixedPriority The fixed priority of the listener.\n * @note The priority of scene graph will be fixed value 0. So the order of listener item in the vector will be ' <0, scene graph (0 priority), >0'.\n * A lower priority will be called before the ones that have a higher value. 0 priority is forbidden for fixed priority since it's used for scene graph based priority.\n * The listener must be a cc.EventListener object when adding a fixed priority listener, because we can't remove a fixed priority listener without the listener handler,\n * except calls removeAllListeners().\n * @return {EventListener} Return the listener. Needed in order to remove the event from the dispatcher.\n */\n addListener: function (listener, nodeOrPriority) {\n cc.assertID(listener && nodeOrPriority, 3503);\n if (!(cc.js.isNumber(nodeOrPriority) || nodeOrPriority instanceof cc._BaseNode)) {\n cc.warnID(3506);\n return;\n }\n if (!(listener instanceof cc.EventListener)) {\n cc.assertID(!cc.js.isNumber(nodeOrPriority), 3504);\n listener = cc.EventListener.create(listener);\n } else {\n if (listener._isRegistered()) {\n cc.logID(3505);\n return;\n }\n }\n\n if (!listener.checkAvailable())\n return;\n\n if (cc.js.isNumber(nodeOrPriority)) {\n if (nodeOrPriority === 0) {\n cc.logID(3500);\n return;\n }\n\n listener._setSceneGraphPriority(null);\n listener._setFixedPriority(nodeOrPriority);\n listener._setRegistered(true);\n listener._setPaused(false);\n this._addListener(listener);\n } else {\n listener._setSceneGraphPriority(nodeOrPriority);\n listener._setFixedPriority(0);\n listener._setRegistered(true);\n this._addListener(listener);\n }\n\n return listener;\n },\n\n /*\n * !#en Adds a Custom event listener. It will use a fixed priority of 1.\n * !#zh 向事件管理器添加一个自定义事件监听器。\n * @method addCustomListener\n * @param {String} eventName\n * @param {Function} callback\n * @return {EventListener} the generated event. Needed in order to remove the event from the dispatcher\n */\n addCustomListener: function (eventName, callback) {\n var listener = new cc.EventListener.create({\n event: cc.EventListener.CUSTOM,\n eventName: eventName, \n callback: callback\n });\n this.addListener(listener, 1);\n return listener;\n },\n\n /**\n * !#en Remove a listener.\n * !#zh 移除一个已添加的监听器。\n * @method removeListener\n * @param {EventListener} listener - an event listener or a registered node target\n * @example {@link cocos2d/core/event-manager/CCEventManager/removeListener.js}\n */\n removeListener: function (listener) {\n if (listener == null)\n return;\n\n var isFound, locListener = this._listenersMap;\n for (var selKey in locListener) {\n var listeners = locListener[selKey];\n var fixedPriorityListeners = listeners.getFixedPriorityListeners(), sceneGraphPriorityListeners = listeners.getSceneGraphPriorityListeners();\n\n isFound = this._removeListenerInVector(sceneGraphPriorityListeners, listener);\n if (isFound){\n // fixed #4160: Dirty flag need to be updated after listeners were removed.\n this._setDirty(listener._getListenerID(), this.DIRTY_SCENE_GRAPH_PRIORITY);\n }else{\n isFound = this._removeListenerInVector(fixedPriorityListeners, listener);\n if (isFound)\n this._setDirty(listener._getListenerID(), this.DIRTY_FIXED_PRIORITY);\n }\n\n if (listeners.empty()) {\n delete this._priorityDirtyFlagMap[listener._getListenerID()];\n delete locListener[selKey];\n }\n\n if (isFound)\n break;\n }\n\n if (!isFound) {\n var locToAddedListeners = this._toAddedListeners;\n for (var i = locToAddedListeners.length - 1; i >= 0; i--) {\n var selListener = locToAddedListeners[i];\n if (selListener === listener) {\n cc.js.array.removeAt(locToAddedListeners, i);\n selListener._setRegistered(false);\n break;\n }\n }\n }\n\n this._currentTouchListener === listener && this._clearCurTouch();\n },\n\n _clearCurTouch () {\n this._currentTouchListener = null;\n this._currentTouch = null;\n },\n\n _removeListenerInCallback: function(listeners, callback){\n if (listeners == null)\n return false;\n\n for (var i = listeners.length - 1; i >= 0; i--) {\n var selListener = listeners[i];\n if (selListener._onCustomEvent === callback || selListener._onEvent === callback) {\n selListener._setRegistered(false);\n if (selListener._getSceneGraphPriority() != null){\n this._dissociateNodeAndEventListener(selListener._getSceneGraphPriority(), selListener);\n selListener._setSceneGraphPriority(null); // NULL out the node pointer so we don't have any dangling pointers to destroyed nodes.\n }\n\n if (this._inDispatch === 0)\n cc.js.array.removeAt(listeners, i);\n else\n this._toRemovedListeners.push(selListener);\n return true;\n }\n }\n return false;\n },\n\n _removeListenerInVector: function (listeners, listener) {\n if (listeners == null)\n return false;\n\n for (var i = listeners.length - 1; i >= 0; i--) {\n var selListener = listeners[i];\n if (selListener === listener) {\n selListener._setRegistered(false);\n if (selListener._getSceneGraphPriority() != null) {\n this._dissociateNodeAndEventListener(selListener._getSceneGraphPriority(), selListener);\n selListener._setSceneGraphPriority(null); // NULL out the node pointer so we don't have any dangling pointers to destroyed nodes.\n }\n\n if (this._inDispatch === 0)\n cc.js.array.removeAt(listeners, i);\n else\n this._toRemovedListeners.push(selListener);\n return true;\n }\n }\n return false;\n },\n\n /**\n * !#en Removes all listeners with the same event listener type or removes all listeners of a node.\n * !#zh\n * 移除注册到 eventManager 中指定类型的所有事件监听器。
\n * 1. 如果传入的第一个参数类型是 Node,那么事件管理器将移除与该对象相关的所有事件监听器。\n * (如果第二参数 recursive 是 true 的话,就会连同该对象的子控件上所有的事件监听器也一并移除)
\n * 2. 如果传入的第一个参数类型是 Number(该类型 EventListener 中定义的事件类型),\n * 那么事件管理器将移除该类型的所有事件监听器。
\n *\n * 下列是目前存在监听器类型:
\n * cc.EventListener.UNKNOWN
\n * cc.EventListener.KEYBOARD
\n * cc.EventListener.ACCELERATION,
\n *\n * @method removeListeners\n * @param {Number|Node} listenerType - listenerType or a node\n * @param {Boolean} [recursive=false]\n */\n removeListeners: function (listenerType, recursive) {\n var i, _t = this;\n if (!(cc.js.isNumber(listenerType) || listenerType instanceof cc._BaseNode)) {\n cc.warnID(3506);\n return;\n }\n if (listenerType._id !== undefined) {\n // Ensure the node is removed from these immediately also.\n // Don't want any dangling pointers or the possibility of dealing with deleted objects..\n var listeners = _t._nodeListenersMap[listenerType._id], i;\n if (listeners) {\n var listenersCopy = cc.js.array.copy(listeners);\n for (i = 0; i < listenersCopy.length; i++)\n _t.removeListener(listenersCopy[i]);\n delete _t._nodeListenersMap[listenerType._id];\n }\n\n // Bug fix: ensure there are no references to the node in the list of listeners to be added.\n // If we find any listeners associated with the destroyed node in this list then remove them.\n // This is to catch the scenario where the node gets destroyed before it's listener\n // is added into the event dispatcher fully. This could happen if a node registers a listener\n // and gets destroyed while we are dispatching an event (touch etc.)\n var locToAddedListeners = _t._toAddedListeners;\n for (i = 0; i < locToAddedListeners.length; ) {\n var listener = locToAddedListeners[i];\n if (listener._getSceneGraphPriority() === listenerType) {\n listener._setSceneGraphPriority(null); // Ensure no dangling ptr to the target node.\n listener._setRegistered(false);\n locToAddedListeners.splice(i, 1);\n } else\n ++i;\n }\n\n if (recursive === true) {\n var locChildren = listenerType.children, len;\n for (i = 0, len = locChildren.length; i< len; i++)\n _t.removeListeners(locChildren[i], true);\n }\n } else {\n if (listenerType === cc.EventListener.TOUCH_ONE_BY_ONE)\n _t._removeListenersForListenerID(ListenerID.TOUCH_ONE_BY_ONE);\n else if (listenerType === cc.EventListener.TOUCH_ALL_AT_ONCE)\n _t._removeListenersForListenerID(ListenerID.TOUCH_ALL_AT_ONCE);\n else if (listenerType === cc.EventListener.MOUSE)\n _t._removeListenersForListenerID(ListenerID.MOUSE);\n else if (listenerType === cc.EventListener.ACCELERATION)\n _t._removeListenersForListenerID(ListenerID.ACCELERATION);\n else if (listenerType === cc.EventListener.KEYBOARD)\n _t._removeListenersForListenerID(ListenerID.KEYBOARD);\n else\n cc.logID(3501);\n }\n },\n\n /*\n * !#en Removes all custom listeners with the same event name.\n * !#zh 移除同一事件名的自定义事件监听器。\n * @method removeCustomListeners\n * @param {String} customEventName\n */\n removeCustomListeners: function (customEventName) {\n this._removeListenersForListenerID(customEventName);\n },\n\n /**\n * !#en Removes all listeners\n * !#zh 移除所有事件监听器。\n * @method removeAllListeners\n */\n removeAllListeners: function () {\n var locListeners = this._listenersMap, locInternalCustomEventIDs = this._internalCustomListenerIDs;\n for (var selKey in locListeners){\n if(locInternalCustomEventIDs.indexOf(selKey) === -1)\n this._removeListenersForListenerID(selKey);\n }\n },\n\n /**\n * !#en Sets listener's priority with fixed value.\n * !#zh 设置 FixedPriority 类型监听器的优先级。\n * @method setPriority\n * @param {EventListener} listener\n * @param {Number} fixedPriority\n */\n setPriority: function (listener, fixedPriority) {\n if (listener == null)\n return;\n\n var locListeners = this._listenersMap;\n for (var selKey in locListeners) {\n var selListeners = locListeners[selKey];\n var fixedPriorityListeners = selListeners.getFixedPriorityListeners();\n if (fixedPriorityListeners) {\n var found = fixedPriorityListeners.indexOf(listener);\n if (found !== -1) {\n if(listener._getSceneGraphPriority() != null)\n cc.logID(3502);\n if (listener._getFixedPriority() !== fixedPriority) {\n listener._setFixedPriority(fixedPriority);\n this._setDirty(listener._getListenerID(), this.DIRTY_FIXED_PRIORITY);\n }\n return;\n }\n }\n }\n },\n\n /**\n * !#en Whether to enable dispatching events\n * !#zh 启用或禁用事件管理器,禁用后不会分发任何事件。\n * @method setEnabled\n * @param {Boolean} enabled\n */\n setEnabled: function (enabled) {\n this._isEnabled = enabled;\n },\n\n /**\n * !#en Checks whether dispatching events is enabled\n * !#zh 检测事件管理器是否启用。\n * @method isEnabled\n * @returns {Boolean}\n */\n isEnabled: function () {\n return this._isEnabled;\n },\n\n /*\n * !#en Dispatches the event, also removes all EventListeners marked for deletion from the event dispatcher list.\n * !#zh 分发事件。\n * @method dispatchEvent\n * @param {Event} event\n */\n dispatchEvent: function (event) {\n if (!this._isEnabled)\n return;\n\n this._updateDirtyFlagForSceneGraph();\n this._inDispatch++;\n if (!event || !event.getType) {\n cc.errorID(3511);\n return;\n }\n if (event.getType().startsWith(cc.Event.TOUCH)) {\n this._dispatchTouchEvent(event);\n this._inDispatch--;\n return;\n }\n\n var listenerID = __getListenerID(event);\n this._sortEventListeners(listenerID);\n var selListeners = this._listenersMap[listenerID];\n if (selListeners != null) {\n this._dispatchEventToListeners(selListeners, this._onListenerCallback, event);\n this._onUpdateListeners(selListeners);\n }\n\n this._inDispatch--;\n },\n\n _onListenerCallback: function(listener, event){\n event.currentTarget = listener._target;\n listener._onEvent(event);\n return event.isStopped();\n },\n\n /*\n * !#en Dispatches a Custom Event with a event name an optional user data\n * !#zh 分发自定义事件。\n * @method dispatchCustomEvent\n * @param {String} eventName\n * @param {*} optionalUserData\n */\n dispatchCustomEvent: function (eventName, optionalUserData) {\n var ev = new cc.Event.EventCustom(eventName);\n ev.setUserData(optionalUserData);\n this.dispatchEvent(ev);\n }\n};\n\n\njs.get(cc, 'eventManager', function () {\n cc.errorID(1405, 'cc.eventManager', 'cc.EventTarget or cc.systemEvent');\n return eventManager;\n});\n\nmodule.exports = cc.internal.eventManager = eventManager;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * !#en The touch event class\n * !#zh 封装了触摸相关的信息。\n * @class Touch\n *\n * @param {Number} x\n * @param {Number} y\n * @param {Number} id\n */\ncc.Touch = function (x, y, id) {\n this._lastModified = 0;\n this.setTouchInfo(id, x, y);\n};\ncc.Touch.prototype = {\n constructor: cc.Touch,\n /**\n * !#en Returns the current touch location in OpenGL coordinates.、\n * !#zh 获取当前触点位置。\n * @method getLocation\n * @return {Vec2}\n */\n getLocation:function () {\n return cc.v2(this._point.x, this._point.y);\n },\n\n\t/**\n\t * !#en Returns X axis location value.\n * !#zh 获取当前触点 X 轴位置。\n * @method getLocationX\n\t * @returns {Number}\n\t */\n\tgetLocationX: function () {\n\t\treturn this._point.x;\n\t},\n\n\t/**\n * !#en Returns Y axis location value.\n * !#zh 获取当前触点 Y 轴位置。\n * @method getLocationY\n\t * @returns {Number}\n\t */\n\tgetLocationY: function () {\n\t\treturn this._point.y;\n\t},\n\n /**\n * !#en Returns the previous touch location in OpenGL coordinates.\n * !#zh 获取触点在上一次事件时的位置对象,对象包含 x 和 y 属性。\n * @method getPreviousLocation\n * @return {Vec2}\n */\n getPreviousLocation:function () {\n return cc.v2(this._prevPoint.x, this._prevPoint.y);\n },\n\n /**\n * !#en Returns the start touch location in OpenGL coordinates.\n * !#zh 获取触点落下时的位置对象,对象包含 x 和 y 属性。\n * @method getStartLocation\n * @returns {Vec2}\n */\n getStartLocation: function() {\n return cc.v2(this._startPoint.x, this._startPoint.y);\n },\n\n /**\n * !#en Returns the delta distance from the previous touche to the current one in screen coordinates.\n * !#zh 获取触点距离上一次事件移动的距离对象,对象包含 x 和 y 属性。\n * @method getDelta\n * @return {Vec2}\n */\n getDelta:function () {\n return this._point.sub(this._prevPoint);\n },\n\n /**\n * !#en Returns the current touch location in screen coordinates.\n * !#zh 获取当前事件在游戏窗口内的坐标位置对象,对象包含 x 和 y 属性。\n * @method getLocationInView\n * @return {Vec2}\n */\n getLocationInView: function() {\n return cc.v2(this._point.x, cc.view._designResolutionSize.height - this._point.y);\n },\n\n /**\n * !#en Returns the previous touch location in screen coordinates.\n * !#zh 获取触点在上一次事件时在游戏窗口中的位置对象,对象包含 x 和 y 属性。\n * @method getPreviousLocationInView\n * @return {Vec2}\n */\n getPreviousLocationInView: function(){\n return cc.v2(this._prevPoint.x, cc.view._designResolutionSize.height - this._prevPoint.y);\n },\n\n /**\n * !#en Returns the start touch location in screen coordinates.\n * !#zh 获取触点落下时在游戏窗口中的位置对象,对象包含 x 和 y 属性。\n * @method getStartLocationInView\n * @return {Vec2}\n */\n getStartLocationInView: function(){\n return cc.v2(this._startPoint.x, cc.view._designResolutionSize.height - this._startPoint.y);\n },\n\n /**\n * !#en Returns the id of cc.Touch.\n * !#zh 触点的标识 ID,可以用来在多点触摸中跟踪触点。\n * @method getID\n * @return {Number}\n */\n getID:function () {\n return this._id;\n },\n\n /**\n * !#en Sets information to touch.\n * !#zh 设置触摸相关的信息。用于监控触摸事件。\n * @method setTouchInfo\n * @param {Number} id\n * @param {Number} x\n * @param {Number} y\n */\n setTouchInfo:function (id, x, y) {\n this._prevPoint = this._point;\n this._point = cc.v2(x || 0, y || 0);\n this._id = id;\n if(!this._startPointCaptured){\n this._startPoint = cc.v2(this._point);\n cc.view._convertPointWithScale(this._startPoint);\n this._startPointCaptured = true;\n }\n },\n\n _setPoint: function(x, y){\n if(y === undefined){\n this._point.x = x.x;\n this._point.y = x.y;\n }else{\n this._point.x = x;\n this._point.y = y;\n }\n },\n\n _setPrevPoint:function (x, y) {\n if(y === undefined)\n this._prevPoint = cc.v2(x.x, x.y);\n else\n this._prevPoint = cc.v2(x || 0, y || 0);\n }\n};","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nrequire('./CCEvent');\nrequire('./CCTouch');\nrequire('./CCEventListener');\n\nvar eventManager = require('./CCEventManager');;\n\nmodule.exports = eventManager;\n\nif (CC_TEST) {\n cc._Test.eventManager = eventManager;\n}\n\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst js = cc.js;\nconst CallbacksInvoker = require('../platform/callbacks-invoker');\n\n// Extends CallbacksInvoker to handle and invoke event callbacks.\nfunction EventListeners () {\n CallbacksInvoker.call(this);\n}\njs.extend(EventListeners, CallbacksInvoker);\n\nEventListeners.prototype.emit = function (event, captureListeners) {\n let key = event.type;\n const list = this._callbackTable[key];\n if (list) {\n let rootInvoker = !list.isInvoking;\n list.isInvoking = true;\n\n const infos = list.callbackInfos;\n for (let i = 0, len = infos.length; i < len; ++i) {\n const info = infos[i];\n if (info && info.callback) {\n info.callback.call(info.target, event, captureListeners);\n if (event._propagationImmediateStopped) {\n break;\n }\n }\n }\n\n if (rootInvoker) {\n list.isInvoking = false;\n if (list.containCanceled) {\n list.purgeCanceled();\n }\n }\n }\n};\n\nmodule.exports = EventListeners;\nif (CC_TEST) {\n cc._Test.EventListeners = EventListeners;\n}\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst js = require('../platform/js');\nconst CallbacksInvoker = require('../platform/callbacks-invoker');\n\nvar fastRemove = js.array.fastRemove;\n\n/**\n * !#en\n * EventTarget is an object to which an event is dispatched when something has occurred.\n * Entity are the most common event targets, but other objects can be event targets too.\n *\n * Event targets are an important part of the Fireball event model.\n * The event target serves as the focal point for how events flow through the scene graph.\n * When an event such as a mouse click or a keypress occurs, Fireball dispatches an event object\n * into the event flow from the root of the hierarchy. The event object then makes its way through\n * the scene graph until it reaches the event target, at which point it begins its return trip through\n * the scene graph. This round-trip journey to the event target is conceptually divided into three phases:\n * - The capture phase comprises the journey from the root to the last node before the event target's node\n * - The target phase comprises only the event target node\n * - The bubbling phase comprises any subsequent nodes encountered on the return trip to the root of the tree\n * See also: http://www.w3.org/TR/DOM-Level-3-Events/#event-flow\n *\n * Event targets can implement the following methods:\n * - _getCapturingTargets\n * - _getBubblingTargets\n *\n * !#zh\n * 事件目标是事件触发时,分派的事件对象,Node 是最常见的事件目标,\n * 但是其他对象也可以是事件目标。
\n *\n * @class EventTarget\n * @extends CallbacksInvoker\n */\nfunction EventTarget () {\n CallbacksInvoker.call(this);\n}\njs.extend(EventTarget, CallbacksInvoker);\n\nvar proto = EventTarget.prototype;\n\n/**\n * !#en Checks whether the EventTarget object has any callback registered for a specific type of event.\n * !#zh 检查事件目标对象是否有为特定类型的事件注册的回调。\n * @method hasEventListener\n * @param {String} type - The type of event.\n * @return {Boolean} True if a callback of the specified type is registered; false otherwise.\n */\n\n/**\n * !#en\n * Register an callback of a specific event type on the EventTarget.\n * This type of event should be triggered via `emit`.\n * !#zh\n * 注册事件目标的特定事件类型回调。这种类型的事件应该被 `emit` 触发。\n *\n * @method on\n * @param {String} type - A string representing the event type to listen for.\n * @param {Function} callback - The callback that will be invoked when the event is dispatched.\n * The callback is ignored if it is a duplicate (the callbacks are unique).\n * @param {any} [callback.arg1] arg1\n * @param {any} [callback.arg2] arg2\n * @param {any} [callback.arg3] arg3\n * @param {any} [callback.arg4] arg4\n * @param {any} [callback.arg5] arg5\n * @param {Object} [target] - The target (this object) to invoke the callback, can be null\n * @return {Function} - Just returns the incoming callback so you can save the anonymous function easier.\n * @typescript\n * on(type: string, callback: T, target?: any, useCapture?: boolean): T\n * @example\n * eventTarget.on('fire', function () {\n * cc.log(\"fire in the hole\");\n * }, node);\n */\nproto.__on = proto.on;\nproto.on = function (type, callback, target, once) {\n if (!callback) {\n cc.errorID(6800);\n return;\n }\n\n if ( !this.hasEventListener(type, callback, target) ) {\n this.__on(type, callback, target, once);\n\n if (target && target.__eventTargets) {\n target.__eventTargets.push(this);\n }\n }\n return callback;\n};\n\n/**\n * !#en\n * Removes the listeners previously registered with the same type, callback, target and or useCapture,\n * if only type is passed as parameter, all listeners registered with that type will be removed.\n * !#zh\n * 删除之前用同类型,回调,目标或 useCapture 注册的事件监听器,如果只传递 type,将会删除 type 类型的所有事件监听器。\n *\n * @method off\n * @param {String} type - A string representing the event type being removed.\n * @param {Function} [callback] - The callback to remove.\n * @param {Object} [target] - The target (this object) to invoke the callback, if it's not given, only callback without target will be removed\n * @example\n * // register fire eventListener\n * var callback = eventTarget.on('fire', function () {\n * cc.log(\"fire in the hole\");\n * }, target);\n * // remove fire event listener\n * eventTarget.off('fire', callback, target);\n * // remove all fire event listeners\n * eventTarget.off('fire');\n */\nproto.__off = proto.off;\nproto.off = function (type, callback, target) {\n if (!callback) {\n let list = this._callbackTable[type];\n if (!list) return;\n let infos = list.callbackInfos;\n for (let i = 0; i < infos.length; ++i) {\n let target = infos[i] && infos[i].target;\n if (target && target.__eventTargets) {\n fastRemove(target.__eventTargets, this);\n }\n }\n this.removeAll(type);\n }\n else {\n this.__off(type, callback, target);\n\n if (target && target.__eventTargets) {\n fastRemove(target.__eventTargets, this);\n }\n }\n};\n\n/**\n * !#en Removes all callbacks previously registered with the same target (passed as parameter).\n * This is not for removing all listeners in the current event target,\n * and this is not for removing all listeners the target parameter have registered.\n * It's only for removing all listeners (callback and target couple) registered on the current event target by the target parameter.\n * !#zh 在当前 EventTarget 上删除指定目标(target 参数)注册的所有事件监听器。\n * 这个函数无法删除当前 EventTarget 的所有事件监听器,也无法删除 target 参数所注册的所有事件监听器。\n * 这个函数只能删除 target 参数在当前 EventTarget 上注册的所有事件监听器。\n * @method targetOff\n * @param {Object} target - The target to be searched for all related listeners\n */\nproto.targetOff = function (target) {\n this.removeAll(target);\n \n if (target && target.__eventTargets) {\n fastRemove(target.__eventTargets, this);\n }\n};\n\n/**\n * !#en\n * Register an callback of a specific event type on the EventTarget,\n * the callback will remove itself after the first time it is triggered.\n * !#zh\n * 注册事件目标的特定事件类型回调,回调会在第一时间被触发后删除自身。\n *\n * @method once\n * @param {String} type - A string representing the event type to listen for.\n * @param {Function} callback - The callback that will be invoked when the event is dispatched.\n * The callback is ignored if it is a duplicate (the callbacks are unique).\n * @param {any} [callback.arg1] arg1\n * @param {any} [callback.arg2] arg2\n * @param {any} [callback.arg3] arg3\n * @param {any} [callback.arg4] arg4\n * @param {any} [callback.arg5] arg5\n * @param {Object} [target] - The target (this object) to invoke the callback, can be null\n * @example\n * eventTarget.once('fire', function () {\n * cc.log(\"this is the callback and will be invoked only once\");\n * }, node);\n */\nproto.once = function (type, callback, target) {\n this.on(type, callback, target, true);\n};\n\n/**\n * !#en\n * Send an event with the event object.\n * !#zh\n * 通过事件对象派发事件\n *\n * @method dispatchEvent\n * @param {Event} event\n */\nproto.dispatchEvent = function (event) {\n this.emit(event.type, event);\n};\n\n/**\n * !#en\n * Destroy all callbackInfos.\n * !#zh\n * 销毁记录的事件\n *\n * @method clear\n */\nproto.clear = function () {\n // remove all callback\n for (const key in this._callbackTable) {\n const list = this._callbackTable[key];\n const infos = list.callbackInfos;\n for (let i = infos.length - 1; i >= 0; i--) {\n const info = infos[i];\n if (info) {\n this.off(key, info.callback, info.target);\n }\n }\n }\n};\n\ncc.EventTarget = module.exports = EventTarget;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar js = require(\"../platform/js\");\n\n/**\n * !#en Base class of all kinds of events.\n * !#zh 包含事件相关信息的对象。\n * @class Event\n */\n\n/**\n * @method constructor\n * @param {String} type - The name of the event (case-sensitive), e.g. \"click\", \"fire\", or \"submit\"\n * @param {Boolean} bubbles - A boolean indicating whether the event bubbles up through the tree or not\n */\ncc.Event = function(type, bubbles) {\n /**\n * !#en The name of the event (case-sensitive), e.g. \"click\", \"fire\", or \"submit\".\n * !#zh 事件类型。\n * @property type\n * @type {String}\n */\n this.type = type;\n\n /**\n * !#en Indicate whether the event bubbles up through the tree or not.\n * !#zh 表示该事件是否进行冒泡。\n * @property bubbles\n * @type {Boolean}\n */\n this.bubbles = !!bubbles;\n\n /**\n * !#en A reference to the target to which the event was originally dispatched.\n * !#zh 最初事件触发的目标\n * @property target\n * @type {Object}\n */\n this.target = null;\n\n /**\n * !#en A reference to the currently registered target for the event.\n * !#zh 当前目标\n * @property currentTarget\n * @type {Object}\n */\n this.currentTarget = null;\n\n /**\n * !#en\n * Indicates which phase of the event flow is currently being evaluated.\n * Returns an integer value represented by 4 constants:\n * - Event.NONE = 0\n * - Event.CAPTURING_PHASE = 1\n * - Event.AT_TARGET = 2\n * - Event.BUBBLING_PHASE = 3\n * The phases are explained in the [section 3.1, Event dispatch and DOM event flow]\n * (http://www.w3.org/TR/DOM-Level-3-Events/#event-flow), of the DOM Level 3 Events specification.\n * !#zh 事件阶段\n * @property eventPhase\n * @type {Number}\n */\n this.eventPhase = 0;\n\n /*\n * Indicates whether or not event.stopPropagation() has been called on the event.\n * @property _propagationStopped\n * @type {Boolean}\n * @private\n */\n this._propagationStopped = false;\n\n /*\n * Indicates whether or not event.stopPropagationImmediate() has been called on the event.\n * @property _propagationImmediateStopped\n * @type {Boolean}\n * @private\n */\n this._propagationImmediateStopped = false;\n};\ncc.Event.prototype = {\n constructor: cc.Event,\n\n /**\n * !#en Reset the event for being stored in the object pool.\n * !#zh 重置对象池中存储的事件。\n * @method unuse\n * @returns {String}\n */\n unuse: function () {\n this.type = cc.Event.NO_TYPE;\n this.target = null;\n this.currentTarget = null;\n this.eventPhase = cc.Event.NONE;\n this._propagationStopped = false;\n this._propagationImmediateStopped = false;\n },\n\n /**\n * !#en Reuse the event for being used again by the object pool.\n * !#zh 用于对象池再次使用的事件。\n * @method reuse\n * @returns {String}\n */\n reuse: function (type, bubbles) {\n this.type = type;\n this.bubbles = bubbles || false;\n },\n\n /**\n * !#en Stops propagation for current event.\n * !#zh 停止传递当前事件。\n * @method stopPropagation\n */\n stopPropagation: function () {\n this._propagationStopped = true;\n },\n\n /**\n * !#en Stops propagation for current event immediately,\n * the event won't even be dispatched to the listeners attached in the current target.\n * !#zh 立即停止当前事件的传递,事件甚至不会被分派到所连接的当前目标。\n * @method stopPropagationImmediate\n */\n stopPropagationImmediate: function () {\n this._propagationImmediateStopped = true;\n },\n\n /**\n * !#en Checks whether the event has been stopped.\n * !#zh 检查该事件是否已经停止传递.\n * @method isStopped\n * @returns {Boolean}\n */\n isStopped: function () {\n return this._propagationStopped || this._propagationImmediateStopped;\n },\n\n /**\n * !#en\n *

\n * Gets current target of the event
\n * note: It only be available when the event listener is associated with node.
\n * It returns 0 when the listener is associated with fixed priority.\n *

\n * !#zh 获取当前目标节点\n * @method getCurrentTarget\n * @returns {Node} The target with which the event associates.\n */\n getCurrentTarget: function () {\n return this.currentTarget;\n },\n\n /**\n * !#en Gets the event type.\n * !#zh 获取事件类型\n * @method getType\n * @returns {String}\n */\n getType: function () {\n return this.type;\n }\n};\n\n//event type\n/**\n * !#en Code for event without type.\n * !#zh 没有类型的事件\n * @property NO_TYPE\n * @static\n * @type {string}\n */\ncc.Event.NO_TYPE = 'no_type';\n\n/**\n * !#en The type code of Touch event.\n * !#zh 触摸事件类型\n * @property TOUCH\n * @static\n * @type {String}\n */\ncc.Event.TOUCH = 'touch';\n/**\n * !#en The type code of Mouse event.\n * !#zh 鼠标事件类型\n * @property MOUSE\n * @static\n * @type {String}\n */\ncc.Event.MOUSE = 'mouse';\n/**\n * !#en The type code of Keyboard event.\n * !#zh 键盘事件类型\n * @property KEYBOARD\n * @static\n * @type {String}\n */\ncc.Event.KEYBOARD = 'keyboard';\n/**\n * !#en The type code of Acceleration event.\n * !#zh 加速器事件类型\n * @property ACCELERATION\n * @static\n * @type {String}\n */\ncc.Event.ACCELERATION = 'acceleration';\n\n//event phase\n/**\n * !#en Events not currently dispatched are in this phase\n * !#zh 尚未派发事件阶段\n * @property NONE\n * @type {Number}\n * @static\n */\ncc.Event.NONE = 0;\n/**\n * !#en\n * The capturing phase comprises the journey from the root to the last node before the event target's node\n * see http://www.w3.org/TR/DOM-Level-3-Events/#event-flow\n * !#zh 捕获阶段,包括事件目标节点之前从根节点到最后一个节点的过程。\n * @property CAPTURING_PHASE\n * @type {Number}\n * @static\n */\ncc.Event.CAPTURING_PHASE = 1;\n/**\n * !#en\n * The target phase comprises only the event target node\n * see http://www.w3.org/TR/DOM-Level-3-Events/#event-flow\n * !#zh 目标阶段仅包括事件目标节点。\n * @property AT_TARGET\n * @type {Number}\n * @static\n */\ncc.Event.AT_TARGET = 2;\n/**\n * !#en\n * The bubbling phase comprises any subsequent nodes encountered on the return trip to the root of the hierarchy\n * see http://www.w3.org/TR/DOM-Level-3-Events/#event-flow\n * !#zh 冒泡阶段, 包括回程遇到到层次根节点的任何后续节点。\n * @property BUBBLING_PHASE\n * @type {Number}\n * @static\n */\ncc.Event.BUBBLING_PHASE = 3;\n\n/**\n * !#en The Custom event\n * !#zh 自定义事件\n * @class Event.EventCustom\n *\n * @extends Event\n */\n\n/**\n * @method constructor\n * @param {String} type - The name of the event (case-sensitive), e.g. \"click\", \"fire\", or \"submit\"\n * @param {Boolean} bubbles - A boolean indicating whether the event bubbles up through the tree or not\n */\nvar EventCustom = function (type, bubbles) {\n cc.Event.call(this, type, bubbles);\n\n /**\n * !#en A reference to the detailed data of the event\n * !#zh 事件的详细数据\n * @property detail\n * @type {Object}\n */\n this.detail = null;\n};\n\njs.extend(EventCustom, cc.Event);\n\nEventCustom.prototype.reset = EventCustom;\n\n/**\n * !#en Sets user data\n * !#zh 设置用户数据\n * @method setUserData\n * @param {*} data\n */\nEventCustom.prototype.setUserData = function (data) {\n this.detail = data;\n};\n\n/**\n * !#en Gets user data\n * !#zh 获取用户数据\n * @method getUserData\n * @returns {*}\n */\nEventCustom.prototype.getUserData = function () {\n return this.detail;\n};\n\n/**\n * !#en Gets event name\n * !#zh 获取事件名称\n * @method getEventName\n * @returns {String}\n */\nEventCustom.prototype.getEventName = cc.Event.prototype.getType;\n\nvar MAX_POOL_SIZE = 10;\nvar _eventPool = new js.Pool(MAX_POOL_SIZE);\nEventCustom.put = function (event) {\n _eventPool.put(event);\n};\nEventCustom.get = function (type, bubbles) {\n var event = _eventPool._get();\n if (event) {\n event.reset(type, bubbles);\n }\n else {\n event = new EventCustom(type, bubbles);\n }\n return event;\n};\n\ncc.Event.EventCustom = EventCustom;\n\nmodule.exports = cc.Event;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n \nrequire('./event');\nrequire('./event-listeners');\nrequire('./event-target');\nrequire('./system-event');\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar EventTarget = require('../event/event-target');\nvar eventManager = require('../event-manager');\nvar inputManger = require('../platform/CCInputManager');;\n\n/**\n * !#en The event type supported by SystemEvent\n * !#zh SystemEvent 支持的事件类型\n * @class SystemEvent.EventType\n * @static\n * @namespace SystemEvent\n */\nvar EventType = cc.Enum({\n /**\n * !#en The event type for press the key down event, you can use its value directly: 'keydown'\n * !#zh 当按下按键时触发的事件\n * @property KEY_DOWN\n * @type {String}\n * @static\n */\n KEY_DOWN: 'keydown',\n /**\n * !#en The event type for press the key up event, you can use its value directly: 'keyup'\n * !#zh 当松开按键时触发的事件\n * @property KEY_UP\n * @type {String}\n * @static\n */\n KEY_UP: 'keyup',\n /**\n * !#en The event type for press the devicemotion event, you can use its value directly: 'devicemotion'\n * !#zh 重力感应\n * @property DEVICEMOTION\n * @type {String}\n * @static\n */\n DEVICEMOTION: 'devicemotion'\n\n});\n\n/**\n * !#en\n * The System event, it currently supports keyboard events and accelerometer events.
\n * You can get the SystemEvent instance with cc.systemEvent.
\n * !#zh\n * 系统事件,它目前支持按键事件和重力感应事件。
\n * 你可以通过 cc.systemEvent 获取到 SystemEvent 的实例。
\n * @class SystemEvent\n * @extends EventTarget\n * @example\n * cc.systemEvent.on(cc.SystemEvent.EventType.DEVICEMOTION, this.onDeviceMotionEvent, this);\n * cc.systemEvent.off(cc.SystemEvent.EventType.DEVICEMOTION, this.onDeviceMotionEvent, this);\n */\n\nvar keyboardListener = null;\nvar accelerationListener = null;\nvar SystemEvent = cc.Class({\n name: 'SystemEvent',\n extends: EventTarget,\n\n statics: {\n EventType: EventType\n },\n\n /**\n * !#en whether enable accelerometer event\n * !#zh 是否启用加速度计事件\n * @method setAccelerometerEnabled\n * @param {Boolean} isEnable\n */\n setAccelerometerEnabled: function (isEnable) {\n if (CC_EDITOR) {\n return;\n }\n\n // for iOS 13+\n if (isEnable && window.DeviceMotionEvent && typeof DeviceMotionEvent.requestPermission === 'function') {\n DeviceMotionEvent.requestPermission().then(response => {\n console.log(`Device Motion Event request permission: ${response}`);\n inputManger.setAccelerometerEnabled(response === 'granted');\n });\n } else {\n inputManger.setAccelerometerEnabled(isEnable);\n }\n },\n\n /**\n * !#en set accelerometer interval value\n * !#zh 设置加速度计间隔值\n * @method setAccelerometerInterval\n * @param {Number} interval\n */\n setAccelerometerInterval: function(interval) {\n if (CC_EDITOR) {\n return;\n }\n inputManger.setAccelerometerInterval(interval);\n },\n\n on: function (type, callback, target, once) {\n if (CC_EDITOR) {\n return;\n }\n this._super(type, callback, target, once);\n\n // Keyboard\n if (type === EventType.KEY_DOWN || type === EventType.KEY_UP) {\n if (!keyboardListener) {\n keyboardListener = cc.EventListener.create({\n event: cc.EventListener.KEYBOARD,\n onKeyPressed: function (keyCode, event) {\n event.type = EventType.KEY_DOWN;\n cc.systemEvent.dispatchEvent(event);\n },\n onKeyReleased: function (keyCode, event) {\n event.type = EventType.KEY_UP;\n cc.systemEvent.dispatchEvent(event);\n }\n });\n }\n if (!eventManager.hasEventListener(cc.EventListener.ListenerID.KEYBOARD)) {\n eventManager.addListener(keyboardListener, 1);\n }\n }\n\n // Acceleration\n if (type === EventType.DEVICEMOTION) {\n if (!accelerationListener) {\n accelerationListener = cc.EventListener.create({\n event: cc.EventListener.ACCELERATION,\n callback: function (acc, event) {\n event.type = EventType.DEVICEMOTION;\n cc.systemEvent.dispatchEvent(event);\n }\n });\n }\n if (!eventManager.hasEventListener(cc.EventListener.ListenerID.ACCELERATION)) {\n eventManager.addListener(accelerationListener, 1);\n }\n }\n },\n\n\n off: function (type, callback, target) {\n if (CC_EDITOR) {\n return;\n }\n this._super(type, callback, target);\n\n // Keyboard\n if (keyboardListener && (type === EventType.KEY_DOWN || type === EventType.KEY_UP)) {\n var hasKeyDownEventListener = this.hasEventListener(EventType.KEY_DOWN);\n var hasKeyUpEventListener = this.hasEventListener(EventType.KEY_UP);\n if (!hasKeyDownEventListener && !hasKeyUpEventListener) {\n eventManager.removeListener(keyboardListener);\n }\n }\n\n // Acceleration\n if (accelerationListener && type === EventType.DEVICEMOTION) {\n eventManager.removeListener(accelerationListener);\n }\n }\n\n});\n\ncc.SystemEvent = module.exports = SystemEvent;\n/**\n * @module cc\n */\n\n/**\n * !#en The System event singleton for global usage\n * !#zh 系统事件单例,方便全局使用\n * @property systemEvent\n * @type {SystemEvent}\n */\ncc.systemEvent = new cc.SystemEvent();\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n'use strict';\n\nrequire('./graphics');\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nrequire('./platform');\nrequire('./assets');\n\nif (!CC_EDITOR || !Editor.isMainProcess) {\n require('./CCNode');\n require('./CCPrivateNode');\n require('./CCScene');\n\n require('./components');\n require('./graphics');\n require('./collider');\n // CCIntersection can be used separately.\n require('./collider/CCIntersection');\n require('./physics');\n require('./camera/CCCamera');\n require('./geom-utils');\n\n require('./sp');\n}\n\nrequire('./mesh');\nrequire('./3d');\n\nrequire('./base-ui/CCWidgetManager');\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar CompScheduler = require('./component-scheduler');\nvar Flags = require('./platform/CCObject').Flags;\nvar js = require('./platform/js');\nvar callerFunctor = CC_EDITOR && require('./utils/misc').tryCatchFunctor_EDITOR;\n\nvar MAX_POOL_SIZE = 4;\n\nvar IsPreloadStarted = Flags.IsPreloadStarted;\nvar IsOnLoadStarted = Flags.IsOnLoadStarted;\nvar IsOnLoadCalled = Flags.IsOnLoadCalled;\nvar Deactivating = Flags.Deactivating;\n\nvar callPreloadInTryCatch = CC_EDITOR && callerFunctor('__preload');\nvar callOnLoadInTryCatch = CC_EDITOR && function (c) {\n try {\n c.onLoad();\n }\n catch (e) {\n cc._throw(e);\n }\n c._objFlags |= IsOnLoadCalled;\n _onLoadInEditor(c);\n};\nvar callOnDestroyInTryCatch = CC_EDITOR && callerFunctor('onDestroy');\nvar callOnFocusInTryCatch = CC_EDITOR && callerFunctor('onFocusInEditor');\nvar callOnLostFocusInTryCatch = CC_EDITOR && callerFunctor('onLostFocusInEditor');\n\n// for __preload: use internally, no sort\nvar UnsortedInvoker = cc.Class({\n extends: CompScheduler.LifeCycleInvoker,\n add (comp) {\n this._zero.array.push(comp);\n },\n remove (comp) {\n this._zero.fastRemove(comp);\n },\n cancelInactive (flagToClear) {\n CompScheduler.LifeCycleInvoker.stableRemoveInactive(this._zero, flagToClear);\n },\n invoke () {\n this._invoke(this._zero);\n this._zero.array.length = 0;\n },\n});\n\nvar invokePreload = CC_SUPPORT_JIT ?\n CompScheduler.createInvokeImpl('c.__preload();') :\n CompScheduler.createInvokeImpl(function (c) { c.__preload(); }, false, undefined, function (iterator) {\n var array = iterator.array;\n for (iterator.i = 0; iterator.i < array.length; ++iterator.i) {\n array[iterator.i].__preload();\n }\n });\nvar invokeOnLoad = CC_SUPPORT_JIT ?\n CompScheduler.createInvokeImpl('c.onLoad();c._objFlags|=' + IsOnLoadCalled, false, IsOnLoadCalled) :\n CompScheduler.createInvokeImpl(function (c) {\n c.onLoad();\n c._objFlags |= IsOnLoadCalled;\n },\n false,\n IsOnLoadCalled,\n function (iterator) {\n var array = iterator.array;\n for (iterator.i = 0; iterator.i < array.length; ++iterator.i) {\n let comp = array[iterator.i];\n comp.onLoad();\n comp._objFlags |= IsOnLoadCalled;\n }\n }\n );\n\n\nvar activateTasksPool = new js.Pool(MAX_POOL_SIZE);\nactivateTasksPool.get = function getActivateTask () {\n var task = this._get() || {\n preload: new UnsortedInvoker(invokePreload),\n onLoad: new CompScheduler.OneOffInvoker(invokeOnLoad),\n onEnable: new CompScheduler.OneOffInvoker(CompScheduler.invokeOnEnable)\n };\n\n // reset index to -1 so we can skip invoked component in cancelInactive\n task.preload._zero.i = -1;\n var invoker = task.onLoad;\n invoker._zero.i = -1;\n invoker._neg.i = -1;\n invoker._pos.i = -1;\n invoker = task.onEnable;\n invoker._zero.i = -1;\n invoker._neg.i = -1;\n invoker._pos.i = -1;\n\n return task;\n};\n\nfunction _componentCorrupted (node, comp, index) {\n if (CC_DEV) {\n cc.errorID(3817, node.name, index);\n console.log('Corrupted component value:', comp);\n }\n if (comp) {\n node._removeComponent(comp);\n }\n else {\n js.array.removeAt(node._components, index);\n }\n}\n\nfunction _onLoadInEditor (comp) {\n if (comp.onLoad && !cc.engine._isPlaying) {\n var focused = Editor.Selection.curActivate('node') === comp.node.uuid;\n if (focused) {\n comp.onFocusInEditor && callOnFocusInTryCatch(comp);\n }\n else {\n comp.onLostFocusInEditor && callOnLostFocusInTryCatch(comp);\n }\n }\n if ( !CC_TEST ) {\n _Scene.AssetsWatcher.start(comp);\n }\n}\n\n/**\n * The class used to perform activating and deactivating operations of node and component.\n */\nfunction ctor () {\n // a stack of node's activating tasks\n this._activatingStack = [];\n}\nvar NodeActivator = cc.Class({\n ctor: ctor,\n reset: ctor,\n\n _activateNodeRecursively (node, preloadInvoker, onLoadInvoker, onEnableInvoker) {\n if (node._objFlags & Deactivating) {\n // en:\n // Forbid reactive the same node during its deactivating procedure\n // to avoid endless loop and simplify the implementation.\n // zh:\n // 对相同节点而言,无法撤销反激活,防止反激活 - 激活 - 反激活的死循环发生。\n // 这样设计简化了一些引擎的实现,而且对调用者来说能保证反激活操作都能成功。\n cc.errorID(3816, node.name);\n return;\n }\n\n node._activeInHierarchy = true;\n\n // component maybe added during onEnable, and the onEnable of new component is already called\n // so we should record the origin length\n var originCount = node._components.length;\n // activate components\n for (let i = 0; i < originCount; ++i) {\n let component = node._components[i];\n if (component instanceof cc.Component) {\n this.activateComp(component, preloadInvoker, onLoadInvoker, onEnableInvoker);\n }\n else {\n _componentCorrupted(node, component, i);\n --i;\n --originCount;\n }\n }\n\n node._childArrivalOrder = node._children.length;\n \n // activate children recursively\n for (let i = 0, len = node._children.length; i < len; ++i) {\n let child = node._children[i];\n child._localZOrder = (child._localZOrder & 0xffff0000) | (i + 1);\n if (child._active) {\n this._activateNodeRecursively(child, preloadInvoker, onLoadInvoker, onEnableInvoker);\n }\n }\n node._onPostActivated(true);\n },\n\n _deactivateNodeRecursively (node) {\n if (CC_DEV) {\n cc.assert(!(node._objFlags & Deactivating), 'node should not deactivating');\n // ensures _activeInHierarchy is always changing when Deactivating flagged\n cc.assert(node._activeInHierarchy, 'node should not deactivated');\n }\n node._objFlags |= Deactivating;\n node._activeInHierarchy = false;\n\n // component maybe added during onEnable, and the onEnable of new component is already called\n // so we should record the origin length\n var originCount = node._components.length;\n for (let c = 0; c < originCount; ++c) {\n let component = node._components[c];\n if (component._enabled) {\n cc.director._compScheduler.disableComp(component);\n\n if (node._activeInHierarchy) {\n // reactivated from root\n node._objFlags &= ~Deactivating;\n return;\n }\n }\n }\n for (let i = 0, len = node._children.length; i < len; ++i) {\n let child = node._children[i];\n if (child._activeInHierarchy) {\n this._deactivateNodeRecursively(child);\n\n if (node._activeInHierarchy) {\n // reactivated from root\n node._objFlags &= ~Deactivating;\n return;\n }\n }\n }\n\n node._onPostActivated(false);\n node._objFlags &= ~Deactivating;\n },\n\n activateNode (node, active) {\n if (active) {\n var task = activateTasksPool.get();\n this._activatingStack.push(task);\n\n this._activateNodeRecursively(node, task.preload, task.onLoad, task.onEnable);\n task.preload.invoke();\n task.onLoad.invoke();\n task.onEnable.invoke();\n\n this._activatingStack.pop();\n activateTasksPool.put(task);\n }\n else {\n this._deactivateNodeRecursively(node);\n\n // remove children of this node from previous activating tasks to debounce\n // (this is an inefficient operation but it ensures general case could be implemented in a efficient way)\n var stack = this._activatingStack;\n for (var i = 0; i < stack.length; i++) {\n var lastTask = stack[i];\n lastTask.preload.cancelInactive(IsPreloadStarted);\n lastTask.onLoad.cancelInactive(IsOnLoadStarted);\n lastTask.onEnable.cancelInactive();\n }\n }\n node.emit('active-in-hierarchy-changed', node);\n },\n\n activateComp: CC_EDITOR ? function (comp, preloadInvoker, onLoadInvoker, onEnableInvoker) {\n if (!cc.isValid(comp, true)) {\n // destroyed before activating\n return;\n }\n if (cc.engine._isPlaying || comp.constructor._executeInEditMode) {\n if (!(comp._objFlags & IsPreloadStarted)) {\n comp._objFlags |= IsPreloadStarted;\n if (comp.__preload) {\n if (preloadInvoker) {\n preloadInvoker.add(comp);\n }\n else {\n callPreloadInTryCatch(comp);\n }\n }\n }\n if (!(comp._objFlags & IsOnLoadStarted)) {\n comp._objFlags |= IsOnLoadStarted;\n if (comp.onLoad) {\n if (onLoadInvoker) {\n onLoadInvoker.add(comp);\n }\n else {\n callOnLoadInTryCatch(comp);\n }\n }\n else {\n comp._objFlags |= IsOnLoadCalled;\n _onLoadInEditor(comp);\n }\n }\n }\n if (comp._enabled) {\n var deactivatedOnLoading = !comp.node._activeInHierarchy;\n if (deactivatedOnLoading) {\n return;\n }\n cc.director._compScheduler.enableComp(comp, onEnableInvoker);\n }\n } : function (comp, preloadInvoker, onLoadInvoker, onEnableInvoker) {\n if (!cc.isValid(comp, true)) {\n // destroyed before activating\n return;\n }\n if (!(comp._objFlags & IsPreloadStarted)) {\n comp._objFlags |= IsPreloadStarted;\n if (comp.__preload) {\n if (preloadInvoker) {\n preloadInvoker.add(comp);\n }\n else {\n comp.__preload();\n }\n }\n }\n if (!(comp._objFlags & IsOnLoadStarted)) {\n comp._objFlags |= IsOnLoadStarted;\n if (comp.onLoad) {\n if (onLoadInvoker) {\n onLoadInvoker.add(comp);\n }\n else {\n comp.onLoad();\n comp._objFlags |= IsOnLoadCalled;\n }\n }\n else {\n comp._objFlags |= IsOnLoadCalled;\n }\n }\n if (comp._enabled) {\n var deactivatedOnLoading = !comp.node._activeInHierarchy;\n if (deactivatedOnLoading) {\n return;\n }\n cc.director._compScheduler.enableComp(comp, onEnableInvoker);\n }\n },\n\n destroyComp: CC_EDITOR ? function (comp) {\n // ensure onDisable called\n cc.director._compScheduler.disableComp(comp);\n\n if (comp.onDestroy && (comp._objFlags & IsOnLoadCalled)) {\n if (cc.engine._isPlaying || comp.constructor._executeInEditMode) {\n callOnDestroyInTryCatch(comp);\n comp._objFlags &= ~IsOnLoadCalled; // In case call onDestroy twice in undo operation\n }\n }\n } : function (comp) {\n // ensure onDisable called\n cc.director._compScheduler.disableComp(comp);\n\n if (comp.onDestroy && (comp._objFlags & IsOnLoadCalled)) {\n comp.onDestroy();\n }\n },\n\n resetComp: CC_EDITOR && function (comp, didResetToDefault) {\n if (comp.resetInEditor) {\n try {\n comp.resetInEditor(didResetToDefault);\n }\n catch (e) {\n cc._throw(e);\n }\n }\n }\n});\n\nmodule.exports = NodeActivator;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar js = require('./js');\nvar Enum = require('./CCEnum');\nvar utils = require('./utils');\nvar _isPlainEmptyObj_DEV = utils.isPlainEmptyObj_DEV;\nvar _cloneable_DEV = utils.cloneable_DEV;\nvar Attr = require('./attribute');\nvar DELIMETER = Attr.DELIMETER;\nvar preprocess = require('./preprocess-class');\nrequire('./requiring-frame');\n\nvar BUILTIN_ENTRIES = ['name', 'extends', 'mixins', 'ctor', '__ctor__', 'properties', 'statics', 'editor', '__ES6__'];\n\nvar INVALID_STATICS_DEV = CC_DEV && ['name', '__ctors__', '__props__', '__values__', 'arguments', 'call', 'apply', 'caller',\n 'length', 'prototype'];\n\nfunction pushUnique (array, item) {\n if (array.indexOf(item) < 0) {\n array.push(item);\n }\n}\n\nvar deferredInitializer = {\n\n // Configs for classes which needs deferred initialization\n datas: null,\n\n // register new class\n // data - {cls: cls, cb: properties, mixins: options.mixins}\n push: function (data) {\n if (this.datas) {\n this.datas.push(data);\n }\n else {\n this.datas = [data];\n // start a new timer to initialize\n var self = this;\n setTimeout(function () {\n self.init();\n }, 0);\n }\n },\n\n init: function () {\n var datas = this.datas;\n if (datas) {\n for (var i = 0; i < datas.length; ++i) {\n var data = datas[i];\n var cls = data.cls;\n var properties = data.props;\n if (typeof properties === 'function') {\n properties = properties();\n }\n var name = js.getClassName(cls);\n if (properties) {\n declareProperties(cls, name, properties, cls.$super, data.mixins);\n }\n else {\n cc.errorID(3633, name);\n }\n }\n this.datas = null;\n }\n }\n};\n\n// both getter and prop must register the name into __props__ array\nfunction appendProp (cls, name) {\n if (CC_DEV) {\n //if (!IDENTIFIER_RE.test(name)) {\n // cc.error('The property name \"' + name + '\" is not compliant with JavaScript naming standards');\n // return;\n //}\n if (name.indexOf('.') !== -1) {\n cc.errorID(3634);\n return;\n }\n }\n pushUnique(cls.__props__, name);\n}\n\nfunction defineProp (cls, className, propName, val, es6) {\n var defaultValue = val.default;\n\n if (CC_DEV) {\n if (!es6) {\n // check default object value\n if (typeof defaultValue === 'object' && defaultValue) {\n if (Array.isArray(defaultValue)) {\n // check array empty\n if (defaultValue.length > 0) {\n cc.errorID(3635, className, propName, propName);\n return;\n }\n }\n else if (!_isPlainEmptyObj_DEV(defaultValue)) {\n // check cloneable\n if (!_cloneable_DEV(defaultValue)) {\n cc.errorID(3636, className, propName, propName);\n return;\n }\n }\n }\n }\n\n // check base prototype to avoid name collision\n if (CCClass.getInheritanceChain(cls)\n .some(function (x) { return x.prototype.hasOwnProperty(propName); }))\n {\n cc.errorID(3637, className, propName, className);\n return;\n }\n }\n\n // set default value\n Attr.setClassAttr(cls, propName, 'default', defaultValue);\n\n appendProp(cls, propName);\n\n // apply attributes\n parseAttributes(cls, val, className, propName, false);\n if ((CC_EDITOR && !Editor.isBuilder) || CC_TEST) {\n for (let i = 0; i < onAfterProps_ET.length; i++) {\n onAfterProps_ET[i](cls, propName);\n }\n onAfterProps_ET.length = 0;\n }\n}\n\nfunction defineGetSet (cls, name, propName, val, es6) {\n var getter = val.get;\n var setter = val.set;\n var proto = cls.prototype;\n var d = Object.getOwnPropertyDescriptor(proto, propName);\n var setterUndefined = !d;\n\n if (getter) {\n if (CC_DEV && !es6 && d && d.get) {\n cc.errorID(3638, name, propName);\n return;\n }\n\n parseAttributes(cls, val, name, propName, true);\n if ((CC_EDITOR && !Editor.isBuilder) || CC_TEST) {\n onAfterProps_ET.length = 0;\n }\n\n Attr.setClassAttr(cls, propName, 'serializable', false);\n\n if (CC_DEV) {\n // 不论是否 visible 都要添加到 props,否则 asset watcher 不能正常工作\n appendProp(cls, propName);\n }\n\n if (!es6) {\n js.get(proto, propName, getter, setterUndefined, setterUndefined);\n }\n\n if (CC_EDITOR || CC_DEV) {\n Attr.setClassAttr(cls, propName, 'hasGetter', true); // 方便 editor 做判断\n }\n }\n\n if (setter) {\n if (!es6) {\n if (CC_DEV && d && d.set) {\n return cc.errorID(3640, name, propName);\n }\n js.set(proto, propName, setter, setterUndefined, setterUndefined);\n }\n if (CC_EDITOR || CC_DEV) {\n Attr.setClassAttr(cls, propName, 'hasSetter', true); // 方便 editor 做判断\n }\n }\n}\n\nfunction getDefault (defaultVal) {\n if (typeof defaultVal === 'function') {\n if (CC_EDITOR) {\n try {\n return defaultVal();\n }\n catch (e) {\n cc._throw(e);\n return undefined;\n }\n }\n else {\n return defaultVal();\n }\n }\n return defaultVal;\n}\n\nfunction mixinWithInherited (dest, src, filter) {\n for (var prop in src) {\n if (!dest.hasOwnProperty(prop) && (!filter || filter(prop))) {\n Object.defineProperty(dest, prop, js.getPropertyDescriptor(src, prop));\n }\n }\n}\n\nfunction doDefine (className, baseClass, mixins, options) {\n var shouldAddProtoCtor;\n var __ctor__ = options.__ctor__;\n var ctor = options.ctor;\n var __es6__ = options.__ES6__;\n\n if (CC_DEV) {\n // check ctor\n var ctorToUse = __ctor__ || ctor;\n if (ctorToUse) {\n if (CCClass._isCCClass(ctorToUse)) {\n cc.errorID(3618, className);\n }\n else if (typeof ctorToUse !== 'function') {\n cc.errorID(3619, className);\n }\n else {\n if (baseClass && /\\bprototype.ctor\\b/.test(ctorToUse)) {\n if (__es6__) {\n cc.errorID(3651, className || \"\");\n }\n else {\n cc.warnID(3600, className || \"\");\n shouldAddProtoCtor = true;\n }\n }\n }\n if (ctor) {\n if (__ctor__) {\n cc.errorID(3649, className);\n }\n else {\n ctor = options.ctor = _validateCtor_DEV(ctor, baseClass, className, options);\n }\n }\n }\n }\n\n var ctors;\n var fireClass;\n if (__es6__) {\n ctors = [ctor];\n fireClass = ctor;\n }\n else {\n ctors = __ctor__ ? [__ctor__] : _getAllCtors(baseClass, mixins, options);\n fireClass = _createCtor(ctors, baseClass, className, options);\n\n // extend - Create a new Class that inherits from this Class\n js.value(fireClass, 'extend', function (options) {\n options.extends = this;\n return CCClass(options);\n }, true);\n }\n\n js.value(fireClass, '__ctors__', ctors.length > 0 ? ctors : null, true);\n\n\n var prototype = fireClass.prototype;\n if (baseClass) {\n if (!__es6__) {\n js.extend(fireClass, baseClass); // 这里会把父类的 __props__ 复制给子类\n prototype = fireClass.prototype; // get extended prototype\n }\n fireClass.$super = baseClass;\n if (CC_DEV && shouldAddProtoCtor) {\n prototype.ctor = function () {};\n }\n }\n\n if (mixins) {\n for (var m = mixins.length - 1; m >= 0; m--) {\n var mixin = mixins[m];\n mixinWithInherited(prototype, mixin.prototype);\n\n // mixin statics (this will also copy editor attributes for component)\n mixinWithInherited(fireClass, mixin, function (prop) {\n return mixin.hasOwnProperty(prop) && (!CC_DEV || INVALID_STATICS_DEV.indexOf(prop) < 0);\n });\n\n // mixin attributes\n if (CCClass._isCCClass(mixin)) {\n mixinWithInherited(Attr.getClassAttrs(fireClass), Attr.getClassAttrs(mixin));\n }\n }\n // restore constuctor overridden by mixin\n prototype.constructor = fireClass;\n }\n\n if (!__es6__) {\n prototype.__initProps__ = compileProps;\n }\n\n js.setClassName(className, fireClass);\n return fireClass;\n}\n\nfunction define (className, baseClass, mixins, options) {\n var Component = cc.Component;\n var frame = cc._RF.peek();\n if (frame && js.isChildClassOf(baseClass, Component)) {\n // project component\n if (js.isChildClassOf(frame.cls, Component)) {\n cc.errorID(3615);\n return null;\n }\n if (CC_DEV && frame.uuid && className) {\n cc.warnID(3616, className);\n }\n className = className || frame.script;\n }\n\n var cls = doDefine(className, baseClass, mixins, options);\n\n if (frame) {\n if (js.isChildClassOf(baseClass, Component)) {\n var uuid = frame.uuid;\n if (uuid) {\n js._setClassId(uuid, cls);\n if (CC_EDITOR) {\n Component._addMenuItem(cls, 'i18n:MAIN_MENU.component.scripts/' + className, -1);\n cls.prototype.__scriptUuid = Editor.Utils.UuidUtils.decompressUuid(uuid);\n }\n }\n frame.cls = cls;\n }\n else if (!js.isChildClassOf(frame.cls, Component)) {\n frame.cls = cls;\n }\n }\n return cls;\n}\n\nfunction normalizeClassName_DEV (className) {\n var DefaultName = 'CCClass';\n if (className) {\n className = className.replace(/^[^$A-Za-z_]/, '_').replace(/[^0-9A-Za-z_$]/g, '_');\n try {\n // validate name\n Function('function ' + className + '(){}')();\n return className;\n }\n catch (e) {\n ;\n }\n }\n return DefaultName;\n}\n\nfunction getNewValueTypeCodeJit (value) {\n var clsName = js.getClassName(value);\n var type = value.constructor;\n var res = 'new ' + clsName + '(';\n for (var i = 0; i < type.__props__.length; i++) {\n var prop = type.__props__[i];\n var propVal = value[prop];\n if (CC_DEV && typeof propVal === 'object') {\n cc.errorID(3641, clsName);\n return 'new ' + clsName + '()';\n }\n res += propVal;\n if (i < type.__props__.length - 1) {\n res += ',';\n }\n }\n return res + ')';\n}\n\n// TODO - move escapeForJS, IDENTIFIER_RE, getNewValueTypeCodeJit to misc.js or a new source file\n\n// convert a normal string including newlines, quotes and unicode characters into a string literal\n// ready to use in JavaScript source\nfunction escapeForJS (s) {\n return JSON.stringify(s).\n // see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify\n replace(/\\u2028/g, '\\\\u2028').\n replace(/\\u2029/g, '\\\\u2029');\n}\n\nfunction getInitPropsJit (attrs, propList) {\n // functions for generated code\n var F = [];\n var func = '';\n\n for (var i = 0; i < propList.length; i++) {\n var prop = propList[i];\n var attrKey = prop + DELIMETER + 'default';\n if (attrKey in attrs) { // getter does not have default\n var statement;\n if (IDENTIFIER_RE.test(prop)) {\n statement = 'this.' + prop + '=';\n }\n else {\n statement = 'this[' + escapeForJS(prop) + ']=';\n }\n var expression;\n var def = attrs[attrKey];\n if (typeof def === 'object' && def) {\n if (def instanceof cc.ValueType) {\n expression = getNewValueTypeCodeJit(def);\n }\n else if (Array.isArray(def)) {\n expression = '[]';\n }\n else {\n expression = '{}';\n }\n }\n else if (typeof def === 'function') {\n var index = F.length;\n F.push(def);\n expression = 'F[' + index + ']()';\n if (CC_EDITOR) {\n func += 'try {\\n' + statement + expression + ';\\n}\\ncatch(e) {\\ncc._throw(e);\\n' + statement + 'undefined;\\n}\\n';\n continue;\n }\n }\n else if (typeof def === 'string') {\n expression = escapeForJS(def);\n }\n else {\n // number, boolean, null, undefined\n expression = def;\n }\n statement = statement + expression + ';\\n';\n func += statement;\n }\n }\n\n // if (CC_TEST && !isPhantomJS) {\n // console.log(func);\n // }\n\n var initProps;\n if (F.length === 0) {\n initProps = Function(func);\n }\n else {\n initProps = Function('F', 'return (function(){\\n' + func + '})')(F);\n }\n\n return initProps;\n}\n\nfunction getInitProps (attrs, propList) {\n var props = null;\n var simpleEnd = 0;\n var valueTypeEnd = 0;\n\n (function () {\n\n // triage properties\n\n var simples = null;\n var valueTypes = null;\n var advanceds = null;\n\n for (let i = 0; i < propList.length; ++i) {\n var prop = propList[i];\n var attrKey = prop + DELIMETER + 'default';\n if (attrKey in attrs) { // getter does not have default\n var def = attrs[attrKey];\n if ((typeof def === 'object' && def) || typeof def === 'function') {\n if (def instanceof cc.ValueType) {\n if (!valueTypes) {\n valueTypes = [];\n }\n valueTypes.push(prop, def);\n }\n else {\n if (!advanceds) {\n advanceds = [];\n }\n advanceds.push(prop, def);\n }\n }\n else {\n // number, boolean, null, undefined, string\n if (!simples) {\n simples = [];\n }\n simples.push(prop, def);\n }\n }\n }\n\n // concat in compact memory\n\n simpleEnd = simples ? simples.length : 0;\n valueTypeEnd = simpleEnd + (valueTypes ? valueTypes.length : 0);\n let totalLength = valueTypeEnd + (advanceds ? advanceds.length : 0);\n props = new Array(totalLength);\n\n for (let i = 0; i < simpleEnd; ++i) {\n props[i] = simples[i];\n }\n for (let i = simpleEnd; i < valueTypeEnd; ++i) {\n props[i] = valueTypes[i - simpleEnd];\n }\n for (let i = valueTypeEnd; i < totalLength; ++i) {\n props[i] = advanceds[i - valueTypeEnd];\n }\n })();\n\n return function () {\n let i = 0;\n for (; i < simpleEnd; i += 2) {\n this[props[i]] = props[i + 1];\n }\n for (; i < valueTypeEnd; i += 2) {\n this[props[i]] = props[i + 1].clone();\n }\n for (; i < props.length; i += 2) {\n var def = props[i + 1];\n if (Array.isArray(def)) {\n this[props[i]] = [];\n }\n else {\n var value;\n if (typeof def === 'object') {\n value = {};\n }\n else {\n // def is function\n if (CC_EDITOR) {\n try {\n value = def();\n }\n catch (err) {\n cc._throw(e);\n continue;\n }\n }\n else {\n value = def();\n }\n }\n this[props[i]] = value;\n }\n }\n };\n}\n\n// simple test variable name\nvar IDENTIFIER_RE = /^[A-Za-z_$][0-9A-Za-z_$]*$/;\nfunction compileProps (actualClass) {\n // init deferred properties\n var attrs = Attr.getClassAttrs(actualClass);\n var propList = actualClass.__props__;\n if (propList === null) {\n deferredInitializer.init();\n propList = actualClass.__props__;\n }\n\n // Overwite __initProps__ to avoid compile again.\n var initProps = CC_SUPPORT_JIT ? getInitPropsJit(attrs, propList) : getInitProps(attrs, propList);\n actualClass.prototype.__initProps__ = initProps;\n\n // call instantiateProps immediately, no need to pass actualClass into it anymore\n // (use call to manually bind `this` because `this` may not instanceof actualClass)\n initProps.call(this);\n}\n\nvar _createCtor = CC_SUPPORT_JIT ? function (ctors, baseClass, className, options) {\n var superCallBounded = baseClass && boundSuperCalls(baseClass, options, className);\n\n var ctorName = CC_DEV ? normalizeClassName_DEV(className) : 'CCClass';\n var body = 'return function ' + ctorName + '(){\\n';\n\n if (superCallBounded) {\n body += 'this._super=null;\\n';\n }\n\n // instantiate props\n body += 'this.__initProps__(' + ctorName + ');\\n';\n\n // call user constructors\n var ctorLen = ctors.length;\n if (ctorLen > 0) {\n var useTryCatch = CC_DEV && ! (className && className.startsWith('cc.'));\n if (useTryCatch) {\n body += 'try{\\n';\n }\n var SNIPPET = '].apply(this,arguments);\\n';\n if (ctorLen === 1) {\n body += ctorName + '.__ctors__[0' + SNIPPET;\n }\n else {\n body += 'var cs=' + ctorName + '.__ctors__;\\n';\n for (var i = 0; i < ctorLen; i++) {\n body += 'cs[' + i + SNIPPET;\n }\n }\n if (useTryCatch) {\n body += '}catch(e){\\n' +\n 'cc._throw(e);\\n' +\n '}\\n';\n }\n }\n body += '}';\n\n return Function(body)();\n} : function (ctors, baseClass, className, options) {\n var superCallBounded = baseClass && boundSuperCalls(baseClass, options, className);\n var ctorLen = ctors.length;\n\n var Class;\n\n if (ctorLen > 0) {\n if (superCallBounded) {\n if (ctorLen === 2) {\n // User Component\n Class = function () {\n this._super = null;\n this.__initProps__(Class);\n ctors[0].apply(this, arguments);\n ctors[1].apply(this, arguments);\n };\n }\n else {\n Class = function () {\n this._super = null;\n this.__initProps__(Class);\n for (let i = 0; i < ctors.length; ++i) {\n ctors[i].apply(this, arguments);\n }\n };\n }\n }\n else {\n if (ctorLen === 3) {\n // Node\n Class = function () {\n this.__initProps__(Class);\n ctors[0].apply(this, arguments);\n ctors[1].apply(this, arguments);\n ctors[2].apply(this, arguments);\n };\n }\n else {\n Class = function () {\n this.__initProps__(Class);\n var ctors = Class.__ctors__;\n for (let i = 0; i < ctors.length; ++i) {\n ctors[i].apply(this, arguments);\n }\n };\n }\n }\n }\n else {\n Class = function () {\n if (superCallBounded) {\n this._super = null;\n }\n this.__initProps__(Class);\n };\n }\n return Class;\n};\n\nfunction _validateCtor_DEV (ctor, baseClass, className, options) {\n if (CC_EDITOR && baseClass) {\n // check super call in constructor\n var originCtor = ctor;\n if (SuperCallReg.test(ctor)) {\n if (options.__ES6__) {\n cc.errorID(3651, className);\n }\n else {\n cc.warnID(3600, className);\n // suppresss super call\n ctor = function () {\n this._super = function () {};\n var ret = originCtor.apply(this, arguments);\n this._super = null;\n return ret;\n };\n }\n }\n }\n\n // check ctor\n if (ctor.length > 0 && (!className || !className.startsWith('cc.'))) {\n // To make a unified CCClass serialization process,\n // we don't allow parameters for constructor when creating instances of CCClass.\n // For advanced user, construct arguments can still get from 'arguments'.\n cc.warnID(3617, className);\n }\n\n return ctor;\n}\n\nfunction _getAllCtors (baseClass, mixins, options) {\n // get base user constructors\n function getCtors (cls) {\n if (CCClass._isCCClass(cls)) {\n return cls.__ctors__ || [];\n }\n else {\n return [cls];\n }\n }\n\n var ctors = [];\n // if (options.__ES6__) {\n // if (mixins) {\n // let baseOrMixins = getCtors(baseClass);\n // for (let b = 0; b < mixins.length; b++) {\n // let mixin = mixins[b];\n // if (mixin) {\n // let baseCtors = getCtors(mixin);\n // for (let c = 0; c < baseCtors.length; c++) {\n // if (baseOrMixins.indexOf(baseCtors[c]) < 0) {\n // pushUnique(ctors, baseCtors[c]);\n // }\n // }\n // }\n // }\n // }\n // }\n // else {\n let baseOrMixins = [baseClass].concat(mixins);\n for (let b = 0; b < baseOrMixins.length; b++) {\n let baseOrMixin = baseOrMixins[b];\n if (baseOrMixin) {\n let baseCtors = getCtors(baseOrMixin);\n for (let c = 0; c < baseCtors.length; c++) {\n pushUnique(ctors, baseCtors[c]);\n }\n }\n }\n // }\n\n // append subclass user constructors\n var ctor = options.ctor;\n if (ctor) {\n ctors.push(ctor);\n }\n\n return ctors;\n}\n\nvar SuperCallReg = /xyz/.test(function(){xyz}) ? /\\b\\._super\\b/ : /.*/;\nvar SuperCallRegStrict = /xyz/.test(function(){xyz}) ? /this\\._super\\s*\\(/ : /(NONE){99}/;\nfunction boundSuperCalls (baseClass, options, className) {\n var hasSuperCall = false;\n for (var funcName in options) {\n if (BUILTIN_ENTRIES.indexOf(funcName) >= 0) {\n continue;\n }\n var func = options[funcName];\n if (typeof func !== 'function') {\n continue;\n }\n var pd = js.getPropertyDescriptor(baseClass.prototype, funcName);\n if (pd) {\n var superFunc = pd.value;\n // ignore pd.get, assume that function defined by getter is just for warnings\n if (typeof superFunc === 'function') {\n if (SuperCallReg.test(func)) {\n hasSuperCall = true;\n // boundSuperCall\n options[funcName] = (function (superFunc, func) {\n return function () {\n var tmp = this._super;\n\n // Add a new ._super() method that is the same method but on the super-Class\n this._super = superFunc;\n\n var ret = func.apply(this, arguments);\n\n // The method only need to be bound temporarily, so we remove it when we're done executing\n this._super = tmp;\n\n return ret;\n };\n })(superFunc, func);\n }\n continue;\n }\n }\n if (CC_DEV && SuperCallRegStrict.test(func)) {\n cc.warnID(3620, className, funcName);\n }\n }\n return hasSuperCall;\n}\n\nfunction declareProperties (cls, className, properties, baseClass, mixins, es6) {\n cls.__props__ = [];\n\n if (baseClass && baseClass.__props__) {\n cls.__props__ = baseClass.__props__.slice();\n }\n\n if (mixins) {\n for (var m = 0; m < mixins.length; ++m) {\n var mixin = mixins[m];\n if (mixin.__props__) {\n cls.__props__ = cls.__props__.concat(mixin.__props__.filter(function (x) {\n return cls.__props__.indexOf(x) < 0;\n }));\n }\n }\n }\n\n if (properties) {\n // 预处理属性\n preprocess.preprocessAttrs(properties, className, cls, es6);\n\n for (var propName in properties) {\n var val = properties[propName];\n if ('default' in val) {\n defineProp(cls, className, propName, val, es6);\n }\n else {\n defineGetSet(cls, className, propName, val, es6);\n }\n }\n }\n\n var attrs = Attr.getClassAttrs(cls);\n cls.__values__ = cls.__props__.filter(function (prop) {\n return attrs[prop + DELIMETER + 'serializable'] !== false;\n });\n}\n\n/**\n * @module cc\n */\n\n/**\n * !#en Defines a CCClass using the given specification, please see [Class](/docs/editors_and_tools/creator-chapters/scripting/class.html) for details.\n * !#zh 定义一个 CCClass,传入参数必须是一个包含类型参数的字面量对象,具体用法请查阅[类型定义](/docs/creator/scripting/class.html)。\n *\n * @method Class\n *\n * @param {Object} [options]\n * @param {String} [options.name] - The class name used for serialization.\n * @param {Function} [options.extends] - The base class.\n * @param {Function} [options.ctor] - The constructor.\n * @param {Function} [options.__ctor__] - The same as ctor, but less encapsulated.\n * @param {Object} [options.properties] - The property definitions.\n * @param {Object} [options.statics] - The static members.\n * @param {Function[]} [options.mixins]\n *\n * @param {Object} [options.editor] - attributes for Component listed below.\n * @param {Boolean} [options.editor.executeInEditMode=false] - Allows the current component to run in edit mode. By default, all components are executed only at runtime, meaning that they will not have their callback functions executed while the Editor is in edit mode.\n * @param {Function} [options.editor.requireComponent] - Automatically add required component as a dependency.\n * @param {String} [options.editor.menu] - The menu path to register a component to the editors \"Component\" menu. Eg. \"Rendering/Camera\".\n * @param {Number} [options.editor.executionOrder=0] - The execution order of lifecycle methods for Component. Those less than 0 will execute before while those greater than 0 will execute after. The order will only affect onLoad, onEnable, start, update and lateUpdate while onDisable and onDestroy will not be affected.\n * @param {Boolean} [options.editor.disallowMultiple] - If specified to a type, prevents Component of the same type (or subtype) to be added more than once to a Node.\n * @param {Boolean} [options.editor.playOnFocus=false] - This property is only available when executeInEditMode is set. If specified, the editor's scene view will keep updating this node in 60 fps when it is selected, otherwise, it will update only if necessary.\n * @param {String} [options.editor.inspector] - Customize the page url used by the current component to render in the Properties.\n * @param {String} [options.editor.icon] - Customize the icon that the current component displays in the editor.\n * @param {String} [options.editor.help] - The custom documentation URL\n *\n * @param {Function} [options.update] - lifecycle method for Component, see {{#crossLink \"Component/update:method\"}}{{/crossLink}}\n * @param {Function} [options.lateUpdate] - lifecycle method for Component, see {{#crossLink \"Component/lateUpdate:method\"}}{{/crossLink}}\n * @param {Function} [options.onLoad] - lifecycle method for Component, see {{#crossLink \"Component/onLoad:method\"}}{{/crossLink}}\n * @param {Function} [options.start] - lifecycle method for Component, see {{#crossLink \"Component/start:method\"}}{{/crossLink}}\n * @param {Function} [options.onEnable] - lifecycle method for Component, see {{#crossLink \"Component/onEnable:method\"}}{{/crossLink}}\n * @param {Function} [options.onDisable] - lifecycle method for Component, see {{#crossLink \"Component/onDisable:method\"}}{{/crossLink}}\n * @param {Function} [options.onDestroy] - lifecycle method for Component, see {{#crossLink \"Component/onDestroy:method\"}}{{/crossLink}}\n * @param {Function} [options.onFocusInEditor] - lifecycle method for Component, see {{#crossLink \"Component/onFocusInEditor:method\"}}{{/crossLink}}\n * @param {Function} [options.onLostFocusInEditor] - lifecycle method for Component, see {{#crossLink \"Component/onLostFocusInEditor:method\"}}{{/crossLink}}\n * @param {Function} [options.resetInEditor] - lifecycle method for Component, see {{#crossLink \"Component/resetInEditor:method\"}}{{/crossLink}}\n * @param {Function} [options.onRestore] - for Component only, see {{#crossLink \"Component/onRestore:method\"}}{{/crossLink}}\n * @param {Function} [options._getLocalBounds] - for Component only, see {{#crossLink \"Component/_getLocalBounds:method\"}}{{/crossLink}}\n *\n * @return {Function} - the created class\n *\n * @example\n\n // define base class\n var Node = cc.Class();\n\n // define sub class\n var Sprite = cc.Class({\n name: 'Sprite',\n extends: Node,\n\n ctor: function () {\n this.url = \"\";\n this.id = 0;\n },\n\n statics: {\n // define static members\n count: 0,\n getBounds: function (spriteList) {\n // compute bounds...\n }\n },\n\n properties {\n width: {\n default: 128,\n type: cc.Integer,\n tooltip: 'The width of sprite'\n },\n height: 128,\n size: {\n get: function () {\n return cc.v2(this.width, this.height);\n }\n }\n },\n\n load: function () {\n // load this.url...\n };\n });\n\n // instantiate\n\n var obj = new Sprite();\n obj.url = 'sprite.png';\n obj.load();\n */\nfunction CCClass (options) {\n options = options || {};\n\n var name = options.name;\n var base = options.extends/* || CCObject*/;\n var mixins = options.mixins;\n\n // create constructor\n var cls = define(name, base, mixins, options);\n if (!name) {\n name = cc.js.getClassName(cls);\n }\n\n cls._sealed = true;\n if (base) {\n base._sealed = false;\n }\n\n // define Properties\n var properties = options.properties;\n if (typeof properties === 'function' ||\n (base && base.__props__ === null) ||\n (mixins && mixins.some(function (x) {\n return x.__props__ === null;\n }))\n ) {\n if (CC_DEV && options.__ES6__) {\n cc.error('not yet implement deferred properties for ES6 Classes');\n }\n else {\n deferredInitializer.push({cls: cls, props: properties, mixins: mixins});\n cls.__props__ = cls.__values__ = null;\n }\n }\n else {\n declareProperties(cls, name, properties, base, options.mixins, options.__ES6__);\n }\n\n // define statics\n var statics = options.statics;\n if (statics) {\n var staticPropName;\n if (CC_DEV) {\n for (staticPropName in statics) {\n if (INVALID_STATICS_DEV.indexOf(staticPropName) !== -1) {\n cc.errorID(3642, name, staticPropName,\n staticPropName);\n }\n }\n }\n for (staticPropName in statics) {\n cls[staticPropName] = statics[staticPropName];\n }\n }\n\n // define functions\n for (var funcName in options) {\n if (BUILTIN_ENTRIES.indexOf(funcName) >= 0) {\n continue;\n }\n var func = options[funcName];\n if (!preprocess.validateMethodWithProps(func, funcName, name, cls, base)) {\n continue;\n }\n // use value to redefine some super method defined as getter\n js.value(cls.prototype, funcName, func, true, true);\n }\n\n\n var editor = options.editor;\n if (editor) {\n cc.Component._registerEditorProps(cls, editor);\n }\n\n return cls;\n}\n\n/**\n * Checks whether the constructor is created by cc.Class\n *\n * @method _isCCClass\n * @param {Function} constructor\n * @return {Boolean}\n * @private\n */\nCCClass._isCCClass = function (constructor) {\n return constructor &&\n constructor.hasOwnProperty('__ctors__'); // is not inherited __ctors__\n};\n\n//\n// Optimized define function only for internal classes\n//\n// @method _fastDefine\n// @param {String} className\n// @param {Function} constructor\n// @param {Object} serializableFields\n// @private\n//\nCCClass._fastDefine = function (className, constructor, serializableFields) {\n js.setClassName(className, constructor);\n //constructor.__ctors__ = constructor.__ctors__ || null;\n var props = constructor.__props__ = constructor.__values__ = Object.keys(serializableFields);\n var attrs = Attr.getClassAttrs(constructor);\n for (var i = 0; i < props.length; i++) {\n var key = props[i];\n attrs[key + DELIMETER + 'visible'] = false;\n attrs[key + DELIMETER + 'default'] = serializableFields[key];\n }\n};\n\nCCClass.Attr = Attr;\nCCClass.attr = Attr.attr;\n\n/*\n * Return all super classes\n * @method getInheritanceChain\n * @param {Function} constructor\n * @return {Function[]}\n */\nCCClass.getInheritanceChain = function (klass) {\n var chain = [];\n for (;;) {\n klass = js.getSuper(klass);\n if (!klass) {\n break;\n }\n if (klass !== Object) {\n chain.push(klass);\n }\n }\n return chain;\n};\n\nvar PrimitiveTypes = {\n // Specify that the input value must be integer in Properties.\n // Also used to indicates that the type of elements in array or the type of value in dictionary is integer.\n Integer: 'Number',\n // Indicates that the type of elements in array or the type of value in dictionary is double.\n Float: 'Number',\n Boolean: 'Boolean',\n String: 'String',\n};\nvar onAfterProps_ET = [];\nfunction parseAttributes (cls, attributes, className, propName, usedInGetter) {\n var ERR_Type = CC_DEV ? 'The %s of %s must be type %s' : '';\n\n var attrs = null;\n var propNamePrefix = '';\n function initAttrs () {\n propNamePrefix = propName + DELIMETER;\n return attrs = Attr.getClassAttrs(cls);\n }\n\n if ((CC_EDITOR && !Editor.isBuilder) || CC_TEST) {\n onAfterProps_ET.length = 0;\n }\n\n var type = attributes.type;\n if (type) {\n var primitiveType = PrimitiveTypes[type];\n if (primitiveType) {\n (attrs || initAttrs())[propNamePrefix + 'type'] = type;\n if (((CC_EDITOR && !Editor.isBuilder) || CC_TEST) && !attributes._short) {\n onAfterProps_ET.push(Attr.getTypeChecker_ET(primitiveType, 'cc.' + type));\n }\n }\n else if (type === 'Object') {\n if (CC_DEV) {\n cc.errorID(3644, className, propName);\n }\n }\n else {\n if (type === Attr.ScriptUuid) {\n (attrs || initAttrs())[propNamePrefix + 'type'] = 'Script';\n attrs[propNamePrefix + 'ctor'] = cc.ScriptAsset;\n }\n else {\n if (typeof type === 'object') {\n if (Enum.isEnum(type)) {\n (attrs || initAttrs())[propNamePrefix + 'type'] = 'Enum';\n attrs[propNamePrefix + 'enumList'] = Enum.getList(type);\n }\n else if (CC_DEV) {\n cc.errorID(3645, className, propName, type);\n }\n }\n else if (typeof type === 'function') {\n (attrs || initAttrs())[propNamePrefix + 'type'] = 'Object';\n attrs[propNamePrefix + 'ctor'] = type;\n if (((CC_EDITOR && !Editor.isBuilder) || CC_TEST) && !attributes._short) {\n onAfterProps_ET.push(Attr.getObjTypeChecker_ET(type));\n }\n }\n else if (CC_DEV) {\n cc.errorID(3646, className, propName, type);\n }\n }\n }\n }\n\n function parseSimpleAttr (attrName, expectType) {\n if (attrName in attributes) {\n var val = attributes[attrName];\n if (typeof val === expectType) {\n (attrs || initAttrs())[propNamePrefix + attrName] = val;\n }\n else if (CC_DEV) {\n cc.error(ERR_Type, attrName, className, propName, expectType);\n }\n }\n }\n\n if (attributes.editorOnly) {\n if (CC_DEV && usedInGetter) {\n cc.errorID(3613, \"editorOnly\", name, propName);\n }\n else {\n (attrs || initAttrs())[propNamePrefix + 'editorOnly'] = true;\n }\n }\n //parseSimpleAttr('preventDeferredLoad', 'boolean');\n if (CC_DEV) {\n parseSimpleAttr('displayName', 'string');\n parseSimpleAttr('multiline', 'boolean');\n if (attributes.readonly) {\n (attrs || initAttrs())[propNamePrefix + 'readonly'] = true;\n }\n parseSimpleAttr('tooltip', 'string');\n parseSimpleAttr('slide', 'boolean');\n }\n\n if (attributes.serializable === false) {\n if (CC_DEV && usedInGetter) {\n cc.errorID(3613, \"serializable\", name, propName);\n }\n else {\n (attrs || initAttrs())[propNamePrefix + 'serializable'] = false;\n }\n }\n \n // if (CC_BUILD || CC_TEST) {\n // let fsa = attributes.formerlySerializedAs;\n // if (fsa) {\n // // js.set(cls.prototype, fsa, function (val) {\n // // this[propName] = val;\n // // });\n // (attrs || initAttrs())[propNamePrefix + 'formerlySerializedAs'] = fsa;\n // // used by deserialize-compiled\n // attrs[fsa + DELIMETER + 'deserializeAs'] = propName;\n // cls.__FSA__ = true; // inheritable\n // }\n // }\n // else {\n // parseSimpleAttr('formerlySerializedAs', 'string');\n // }\n\n parseSimpleAttr('formerlySerializedAs', 'string');\n\n if (CC_EDITOR) {\n parseSimpleAttr('notifyFor', 'string');\n\n if ('animatable' in attributes) {\n (attrs || initAttrs())[propNamePrefix + 'animatable'] = !!attributes.animatable;\n }\n }\n\n if (CC_DEV) {\n var visible = attributes.visible;\n if (typeof visible !== 'undefined') {\n if (!visible) {\n (attrs || initAttrs())[propNamePrefix + 'visible'] = false;\n }\n else if (typeof visible === 'function') {\n (attrs || initAttrs())[propNamePrefix + 'visible'] = visible;\n }\n }\n else {\n var startsWithUS = (propName.charCodeAt(0) === 95);\n if (startsWithUS) {\n (attrs || initAttrs())[propNamePrefix + 'visible'] = false;\n }\n }\n }\n\n var range = attributes.range;\n if (range) {\n if (Array.isArray(range)) {\n if (range.length >= 2) {\n (attrs || initAttrs())[propNamePrefix + 'min'] = range[0];\n attrs[propNamePrefix + 'max'] = range[1];\n if (range.length > 2) {\n attrs[propNamePrefix + 'step'] = range[2];\n }\n }\n else if (CC_DEV) {\n cc.errorID(3647);\n }\n }\n else if (CC_DEV) {\n cc.error(ERR_Type, 'range', className, propName, 'array');\n }\n }\n parseSimpleAttr('min', 'number');\n parseSimpleAttr('max', 'number');\n parseSimpleAttr('step', 'number');\n parseSimpleAttr('userData', 'object');\n}\n\ncc.Class = CCClass;\n\nmodule.exports = {\n isArray: function (defaultVal) {\n defaultVal = getDefault(defaultVal);\n return Array.isArray(defaultVal);\n },\n fastDefine: CCClass._fastDefine,\n getNewValueTypeCode: CC_SUPPORT_JIT && getNewValueTypeCodeJit,\n IDENTIFIER_RE,\n escapeForJS,\n getDefault,\n};\n\nif (CC_TEST) {\n js.mixin(CCClass, module.exports);\n}\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n// const FIX_BABEL6 = true;\n\n/**\n * !#en Some JavaScript decorators which can be accessed with \"cc._decorator\".\n * !#zh 一些 JavaScript 装饰器,目前可以通过 \"cc._decorator\" 来访问。\n * (这些 API 仍不完全稳定,有可能随着 JavaScript 装饰器的标准实现而调整)\n *\n * @submodule _decorator\n * @module _decorator\n * @main\n */\n\n// inspired by toddlxt (https://github.com/toddlxt/Creator-TypeScript-Boilerplate)\n\nrequire('./CCClass');\nconst Preprocess = require('./preprocess-class');\nconst js = require('./js');\nconst isPlainEmptyObj_DEV = CC_DEV && require('./utils').isPlainEmptyObj_DEV;\n\n// caches for class construction\nconst CACHE_KEY = '__ccclassCache__';\n\nfunction fNOP (ctor) {\n return ctor;\n}\n\nfunction getSubDict (obj, key) {\n return obj[key] || (obj[key] = {});\n}\n\nfunction checkCtorArgument (decorate) {\n return function (target) {\n if (typeof target === 'function') {\n // no parameter, target is ctor\n return decorate(target);\n }\n return function (ctor) {\n return decorate(ctor, target);\n };\n };\n}\n\nfunction _checkNormalArgument (validator_DEV, decorate, decoratorName) {\n return function (target) {\n if (CC_DEV && validator_DEV(target, decoratorName) === false) {\n return function () {\n return fNOP;\n };\n }\n return function (ctor) {\n return decorate(ctor, target);\n };\n };\n}\n\nvar checkCompArgument = _checkNormalArgument.bind(null, CC_DEV && function (arg, decoratorName) {\n if (!cc.Class._isCCClass(arg)) {\n cc.error('The parameter for %s is missing.', decoratorName);\n return false;\n }\n});\n\nfunction _argumentChecker (type) {\n return _checkNormalArgument.bind(null, CC_DEV && function (arg, decoratorName) {\n if (arg instanceof cc.Component || arg === undefined) {\n cc.error('The parameter for %s is missing.', decoratorName);\n return false;\n }\n else if (typeof arg !== type) {\n cc.error('The parameter for %s must be type %s.', decoratorName, type);\n return false;\n }\n });\n}\nvar checkStringArgument = _argumentChecker('string');\nvar checkNumberArgument = _argumentChecker('number');\n// var checkBooleanArgument = _argumentChecker('boolean');\n\n\nfunction getClassCache (ctor, decoratorName) {\n if (CC_DEV && cc.Class._isCCClass(ctor)) {\n cc.error('`@%s` should be used after @ccclass for class \"%s\"', decoratorName, js.getClassName(ctor));\n return null;\n }\n return getSubDict(ctor, CACHE_KEY);\n}\n\nfunction getDefaultFromInitializer (initializer) {\n var value;\n try {\n value = initializer();\n }\n catch (e) {\n // just lazy initialize by CCClass\n return initializer;\n }\n if (typeof value !== 'object' || value === null) {\n // string boolean number function undefined null\n return value;\n }\n else {\n // The default attribute will not be used in ES6 constructor actually,\n // so we dont need to simplify into `{}` or `[]` or vec2 completely.\n return initializer;\n }\n}\n\n\nfunction extractActualDefaultValues (ctor) {\n var dummyObj;\n try {\n dummyObj = new ctor();\n }\n catch (e) {\n if (CC_DEV) {\n cc.errorID(3652, js.getClassName(ctor), e);\n }\n return {};\n }\n return dummyObj;\n}\n\nfunction genProperty (ctor, properties, propName, options, desc, cache) {\n var fullOptions;\n var isGetset = desc && (desc.get || desc.set);\n if (options) {\n fullOptions = Preprocess.getFullFormOfProperty(options, isGetset);\n }\n var existsProperty = properties[propName];\n var prop = js.mixin(existsProperty || {}, fullOptions || options || {});\n\n if (isGetset) {\n // typescript or babel\n if (CC_DEV && options && ((fullOptions || options).get || (fullOptions || options).set)) {\n var errorProps = getSubDict(cache, 'errorProps');\n if (!errorProps[propName]) {\n errorProps[propName] = true;\n cc.warnID(3655, propName, js.getClassName(ctor), propName, propName);\n }\n }\n if (desc.get) {\n prop.get = desc.get;\n }\n if (desc.set) {\n prop.set = desc.set;\n }\n }\n else {\n if (CC_DEV && (prop.get || prop.set)) {\n // @property({\n // get () { ... },\n // set (...) { ... },\n // })\n // value;\n cc.errorID(3655, propName, js.getClassName(ctor), propName, propName);\n return;\n }\n // member variables\n var defaultValue = undefined;\n var isDefaultValueSpecified = false;\n if (desc) {\n // babel\n if (desc.initializer) {\n // @property(...)\n // value = null;\n defaultValue = getDefaultFromInitializer(desc.initializer);\n isDefaultValueSpecified = true;\n }\n else {\n // @property(...)\n // value;\n }\n }\n else {\n // typescript\n var actualDefaultValues = cache.default || (cache.default = extractActualDefaultValues(ctor));\n if (actualDefaultValues.hasOwnProperty(propName)) {\n // @property(...)\n // value = null;\n defaultValue = actualDefaultValues[propName];\n isDefaultValueSpecified = true;\n }\n else {\n // @property(...)\n // value;\n }\n }\n\n if ((CC_EDITOR && !Editor.isBuilder) || CC_TEST) {\n if (!fullOptions && options && options.hasOwnProperty('default')) {\n cc.warnID(3653, propName, js.getClassName(ctor));\n // prop.default = options.default;\n }\n else if (!isDefaultValueSpecified) {\n cc.warnID(3654, js.getClassName(ctor), propName);\n // prop.default = fullOptions.hasOwnProperty('default') ? fullOptions.default : undefined;\n }\n }\n prop.default = defaultValue;\n }\n\n properties[propName] = prop;\n}\n\n/**\n * !#en\n * Declare the standard [ES6 Class](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes)\n * as CCClass, please see [Class](../../../manual/en/scripting/class.html) for details.\n * !#zh\n * 将标准写法的 [ES6 Class](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes) 声明为 CCClass,具体用法请参阅[类型定义](../../../manual/zh/scripting/class.html)。\n *\n * @method ccclass\n * @param {String} [name] - The class name used for serialization.\n * @example\n * const {ccclass} = cc._decorator;\n *\n * // define a CCClass, omit the name\n * @ccclass\n * class NewScript extends cc.Component {\n * // ...\n * }\n *\n * // define a CCClass with a name\n * @ccclass('LoginData')\n * class LoginData {\n * // ...\n * }\n * @typescript\n * ccclass(name?: string): Function\n * ccclass(_class?: Function): void\n */\nvar ccclass = checkCtorArgument(function (ctor, name) {\n // if (FIX_BABEL6) {\n // eval('if(typeof _classCallCheck===\"function\"){_classCallCheck=function(){};}');\n // }\n var base = js.getSuper(ctor);\n if (base === Object) {\n base = null;\n }\n\n var proto = {\n name,\n extends: base,\n ctor,\n __ES6__: true,\n };\n var cache = ctor[CACHE_KEY];\n if (cache) {\n var decoratedProto = cache.proto;\n if (decoratedProto) {\n // decoratedProto.properties = createProperties(ctor, decoratedProto.properties);\n js.mixin(proto, decoratedProto);\n }\n ctor[CACHE_KEY] = undefined;\n }\n\n var res = cc.Class(proto);\n\n // validate methods\n if (CC_DEV) {\n var propNames = Object.getOwnPropertyNames(ctor.prototype);\n for (var i = 0; i < propNames.length; ++i) {\n var prop = propNames[i];\n if (prop !== 'constructor') {\n var desc = Object.getOwnPropertyDescriptor(ctor.prototype, prop);\n var func = desc && desc.value;\n if (typeof func === 'function') {\n Preprocess.doValidateMethodWithProps_DEV(func, prop, js.getClassName(ctor), ctor, base);\n }\n }\n }\n }\n\n return res;\n});\n\n/**\n * !#en\n * Declare property for [CCClass](../../../manual/en/scripting/reference/attributes.html).\n * !#zh\n * 定义 [CCClass](../../../manual/zh/scripting/reference/attributes.html) 所用的属性。\n *\n * @method property\n * @param {Object} [options] - an object with some property attributes\n * @param {Any} [options.type]\n * @param {Boolean|Function} [options.visible]\n * @param {String} [options.displayName]\n * @param {String} [options.tooltip]\n * @param {Boolean} [options.multiline]\n * @param {Boolean} [options.readonly]\n * @param {Number} [options.min]\n * @param {Number} [options.max]\n * @param {Number} [options.step]\n * @param {Number[]} [options.range]\n * @param {Boolean} [options.slide]\n * @param {Boolean} [options.serializable]\n * @param {Boolean} [options.editorOnly]\n * @param {Boolean} [options.override]\n * @param {Boolean} [options.animatable]\n * @param {String} [options.formerlySerializedAs]\n * @example\n * const {ccclass, property} = cc._decorator;\n *\n * @ccclass\n * class NewScript extends cc.Component {\n * @property({\n * type: cc.Node\n * })\n * targetNode1 = null;\n *\n * @property(cc.Node)\n * targetNode2 = null;\n *\n * @property(cc.Button)\n * targetButton = null;\n *\n * @property\n * _width = 100;\n *\n * @property\n * get width () {\n * return this._width;\n * }\n *\n * @property\n * set width (value) {\n * this._width = value;\n * }\n *\n * @property\n * offset = new cc.Vec2(100, 100);\n *\n * @property(cc.Vec2)\n * offsets = [];\n *\n * @property(cc.SpriteFrame)\n * frame = null;\n * }\n *\n * // above is equivalent to (上面的代码相当于):\n *\n * var NewScript = cc.Class({\n * properties: {\n * targetNode1: {\n * default: null,\n * type: cc.Node\n * },\n *\n * targetNode2: {\n * default: null,\n * type: cc.Node\n * },\n *\n * targetButton: {\n * default: null,\n * type: cc.Button\n * },\n *\n * _width: 100,\n *\n * width: {\n * get () {\n * return this._width;\n * },\n * set (value) {\n * this._width = value;\n * }\n * },\n *\n * offset: new cc.Vec2(100, 100)\n *\n * offsets: {\n * default: [],\n * type: cc.Vec2\n * }\n *\n * frame: {\n * default: null,\n * type: cc.SpriteFrame\n * },\n * }\n * });\n * @typescript\n * property(options?: {type?: any; visible?: boolean|(() => boolean); displayName?: string; tooltip?: string; multiline?: boolean; readonly?: boolean; min?: number; max?: number; step?: number; range?: number[]; slide?: boolean; serializable?: boolean; formerlySerializedAs?: string; editorOnly?: boolean; override?: boolean; animatable?: boolean, userData?: Record } | any[]|Function|cc.ValueType|number|string|boolean): Function\n * property(_target: Object, _key: any, _desc?: any): void\n */\nfunction property (ctorProtoOrOptions, propName, desc) {\n var options = null;\n function normalized (ctorProto, propName, desc) {\n var cache = getClassCache(ctorProto.constructor);\n if (cache) {\n var ccclassProto = getSubDict(cache, 'proto');\n var properties = getSubDict(ccclassProto, 'properties');\n genProperty(ctorProto.constructor, properties, propName, options, desc, cache);\n }\n }\n if (typeof propName === 'undefined') {\n options = ctorProtoOrOptions;\n return normalized;\n }\n else {\n normalized(ctorProtoOrOptions, propName, desc);\n }\n}\n\n// Editor Decorators\n\nfunction createEditorDecorator (argCheckFunc, editorPropName, staticValue) {\n return argCheckFunc(function (ctor, decoratedValue) {\n var cache = getClassCache(ctor, editorPropName);\n if (cache) {\n var value = (staticValue !== undefined) ? staticValue : decoratedValue;\n var proto = getSubDict(cache, 'proto');\n getSubDict(proto, 'editor')[editorPropName] = value;\n }\n }, editorPropName);\n}\n\nfunction createDummyDecorator (argCheckFunc) {\n return argCheckFunc(fNOP);\n}\n\n/**\n * !#en\n * Makes a CCClass that inherit from component execute in edit mode.
\n * By default, all components are only executed in play mode,\n * which means they will not have their callback functions executed while the Editor is in edit mode.\n * !#zh\n * 允许继承自 Component 的 CCClass 在编辑器里执行。
\n * 默认情况下,所有 Component 都只会在运行时才会执行,也就是说它们的生命周期回调不会在编辑器里触发。\n *\n * @method executeInEditMode\n * @example\n * const {ccclass, executeInEditMode} = cc._decorator;\n *\n * @ccclass\n * @executeInEditMode\n * class NewScript extends cc.Component {\n * // ...\n * }\n * @typescript\n * executeInEditMode(): Function\n * executeInEditMode(_class: Function): void\n */\nvar executeInEditMode = (CC_DEV ? createEditorDecorator : createDummyDecorator)(checkCtorArgument, 'executeInEditMode', true);\n\n/**\n * !#en\n * Automatically add required component as a dependency for the CCClass that inherit from component.\n * !#zh\n * 为声明为 CCClass 的组件添加依赖的其它组件。当组件添加到节点上时,如果依赖的组件不存在,引擎将会自动将依赖组件添加到同一个节点,防止脚本出错。该设置在运行时同样有效。\n *\n * @method requireComponent\n * @param {Component} requiredComponent\n * @example\n * const {ccclass, requireComponent} = cc._decorator;\n *\n * @ccclass\n * @requireComponent(cc.Sprite)\n * class SpriteCtrl extends cc.Component {\n * // ...\n * }\n * @typescript\n * requireComponent(requiredComponent: typeof cc.Component): Function\n */\nvar requireComponent = createEditorDecorator(checkCompArgument, 'requireComponent');\n\n/**\n * !#en\n * The menu path to register a component to the editors \"Component\" menu. Eg. \"Rendering/CameraCtrl\".\n * !#zh\n * 将当前组件添加到组件菜单中,方便用户查找。例如 \"Rendering/CameraCtrl\"。\n *\n * @method menu\n * @param {String} path - The path is the menu represented like a pathname.\n * For example the menu could be \"Rendering/CameraCtrl\".\n * @example\n * const {ccclass, menu} = cc._decorator;\n *\n * @ccclass\n * @menu(\"Rendering/CameraCtrl\")\n * class NewScript extends cc.Component {\n * // ...\n * }\n * @typescript\n * menu(path: string): Function\n */\nvar menu = (CC_DEV ? createEditorDecorator : createDummyDecorator)(checkStringArgument, 'menu');\n\n/**\n * !#en\n * The execution order of lifecycle methods for Component.\n * Those less than 0 will execute before while those greater than 0 will execute after.\n * The order will only affect onLoad, onEnable, start, update and lateUpdate while onDisable and onDestroy will not be affected.\n * !#zh\n * 设置脚本生命周期方法调用的优先级。优先级小于 0 的组件将会优先执行,优先级大于 0 的组件将会延后执行。优先级仅会影响 onLoad, onEnable, start, update 和 lateUpdate,而 onDisable 和 onDestroy 不受影响。\n *\n * @method executionOrder\n * @param {Number} order - The execution order of lifecycle methods for Component. Those less than 0 will execute before while those greater than 0 will execute after.\n * @example\n * const {ccclass, executionOrder} = cc._decorator;\n *\n * @ccclass\n * @executionOrder(1)\n * class CameraCtrl extends cc.Component {\n * // ...\n * }\n * @typescript\n * executionOrder(order: number): Function\n */\nvar executionOrder = createEditorDecorator(checkNumberArgument, 'executionOrder');\n\n/**\n * !#en\n * Prevents Component of the same type (or subtype) to be added more than once to a Node.\n * !#zh\n * 防止多个相同类型(或子类型)的组件被添加到同一个节点。\n *\n * @method disallowMultiple\n * @example\n * const {ccclass, disallowMultiple} = cc._decorator;\n *\n * @ccclass\n * @disallowMultiple\n * class CameraCtrl extends cc.Component {\n * // ...\n * }\n * @typescript\n * disallowMultiple(): Function\n * disallowMultiple(_class: Function): void\n */\nvar disallowMultiple = (CC_DEV ? createEditorDecorator : createDummyDecorator)(checkCtorArgument, 'disallowMultiple');\n\n/**\n * !#en\n * If specified, the editor's scene view will keep updating this node in 60 fps when it is selected, otherwise, it will update only if necessary.
\n * This property is only available if executeInEditMode is true.\n * !#zh\n * 当指定了 \"executeInEditMode\" 以后,playOnFocus 可以在选中当前组件所在的节点时,提高编辑器的场景刷新频率到 60 FPS,否则场景就只会在必要的时候进行重绘。\n *\n * @method playOnFocus\n * @example\n * const {ccclass, playOnFocus, executeInEditMode} = cc._decorator;\n *\n * @ccclass\n * @executeInEditMode\n * @playOnFocus\n * class CameraCtrl extends cc.Component {\n * // ...\n * }\n * @typescript\n * playOnFocus(): Function\n * playOnFocus(_class: Function): void\n */\nvar playOnFocus = (CC_DEV ? createEditorDecorator : createDummyDecorator)(checkCtorArgument, 'playOnFocus', true);\n\n/**\n * !#en\n * Specifying the url of the custom html to draw the component in **Properties**.\n * !#zh\n * 自定义当前组件在 **属性检查器** 中渲染时所用的网页 url。\n *\n * @method inspector\n * @param {String} url\n * @example\n * const {ccclass, inspector} = cc._decorator;\n *\n * @ccclass\n * @inspector(\"packages://inspector/inspectors/comps/camera-ctrl.js\")\n * class NewScript extends cc.Component {\n * // ...\n * }\n * @typescript\n * inspector(path: string): Function\n */\nvar inspector = (CC_DEV ? createEditorDecorator : createDummyDecorator)(checkStringArgument, 'inspector');\n\n/**\n * !#en\n * Specifying the url of the icon to display in the editor.\n * !#zh\n * 自定义当前组件在编辑器中显示的图标 url。\n *\n * @method icon\n * @param {String} url\n * @private\n * @example\n * const {ccclass, icon} = cc._decorator;\n *\n * @ccclass\n * @icon(\"xxxx.png\")\n * class NewScript extends cc.Component {\n * // ...\n * }\n * @typescript\n * icon(path: string): Function\n */\nvar icon = (CC_DEV ? createEditorDecorator : createDummyDecorator)(checkStringArgument, 'icon');\n\n/**\n * !#en\n * The custom documentation URL.\n * !#zh\n * 指定当前组件的帮助文档的 url,设置过后,在 **属性检查器** 中就会出现一个帮助图标,用户点击将打开指定的网页。\n *\n * @method help\n * @param {String} url\n * @example\n * const {ccclass, help} = cc._decorator;\n *\n * @ccclass\n * @help(\"app://docs/html/components/spine.html\")\n * class NewScript extends cc.Component {\n * // ...\n * }\n * @typescript\n * help(path: string): Function\n */\nvar help = (CC_DEV ? createEditorDecorator : createDummyDecorator)(checkStringArgument, 'help');\n\n// Other Decorators\n\n/**\n * NOTE:
\n * The old mixins implemented in cc.Class(ES5) behaves exact the same as multiple inheritance.\n * But since ES6, class constructor can't be function-called and class methods become non-enumerable,\n * so we can not mix in ES6 Classes.
\n * See:
\n * [https://esdiscuss.org/topic/traits-are-now-impossible-in-es6-until-es7-since-rev32](https://esdiscuss.org/topic/traits-are-now-impossible-in-es6-until-es7-since-rev32)
\n * One possible solution (but IDE unfriendly):
\n * [http://justinfagnani.com/2015/12/21/real-mixins-with-javascript-classes](http://justinfagnani.com/2015/12/21/real-mixins-with-javascript-classes/)
\n *
\n * NOTE:
\n * You must manually call mixins constructor, this is different from cc.Class(ES5).\n *\n * @method mixins\n * @param {Function} ...ctor - constructors to mix, only support ES5 constructors or classes defined by using `cc.Class`,\n * not support ES6 Classes.\n * @example\n * const {ccclass, mixins} = cc._decorator;\n *\n * class Animal { ... }\n *\n * const Fly = cc.Class({\n * constructor () { ... }\n * });\n *\n * @ccclass\n * @mixins(cc.EventTarget, Fly)\n * class Bird extends Animal {\n * constructor () {\n * super();\n *\n * // You must manually call mixins constructor, this is different from cc.Class(ES5)\n * cc.EventTarget.call(this);\n * Fly.call(this);\n * }\n * // ...\n * }\n * @typescript\n * mixins(ctor: Function, ...rest: Function[]): Function\n */\nfunction mixins () {\n var mixins = [];\n for (var i = 0; i < arguments.length; i++) {\n mixins[i] = arguments[i];\n }\n return function (ctor) {\n var cache = getClassCache(ctor, 'mixins');\n if (cache) {\n getSubDict(cache, 'proto').mixins = mixins;\n }\n }\n}\n\ncc._decorator = module.exports = {\n ccclass,\n property,\n executeInEditMode,\n requireComponent,\n menu,\n executionOrder,\n disallowMultiple,\n playOnFocus,\n inspector,\n icon,\n help,\n mixins,\n};\n\n// fix submodule pollute ...\n/**\n * @submodule cc\n */\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar js = require('./js');\n\n// enum\n\n/**\n * !#en\n * Define an enum type.
\n * If a enum item has a value of -1, it will be given an Integer number according to it's order in the list.
\n * Otherwise it will use the value specified by user who writes the enum definition.\n *\n * !#zh\n * 定义一个枚举类型。
\n * 用户可以把枚举值设为任意的整数,如果设为 -1,系统将会分配为上一个枚举值 + 1。\n *\n * @method Enum\n * @param {object} obj - a JavaScript literal object containing enum names and values, or a TypeScript enum type\n * @return {object} the defined enum type\n * @example {@link cocos2d/core/platform/CCEnum/Enum.js}\n * @typescript Enum(obj: T): T\n */\nfunction Enum (obj) {\n if ('__enums__' in obj) {\n return obj;\n }\n js.value(obj, '__enums__', null, true);\n\n var lastIndex = -1;\n var keys = Object.keys(obj);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var val = obj[key];\n\n if (val === -1) {\n val = ++lastIndex;\n obj[key] = val;\n }\n else {\n if (typeof val === 'number') {\n lastIndex = val;\n }\n else if (typeof val === 'string' && Number.isInteger(parseFloat(key))) {\n continue;\n }\n }\n var reverseKey = '' + val;\n if (key !== reverseKey) {\n if ((CC_EDITOR || CC_TEST) && reverseKey in obj && obj[reverseKey] !== key) {\n cc.errorID(7100, reverseKey);\n continue;\n }\n js.value(obj, reverseKey, key);\n }\n }\n return obj;\n}\n\nEnum.isEnum = function (enumType) {\n return enumType && enumType.hasOwnProperty('__enums__');\n};\n\n/**\n * @method getList\n * @param {Object} enumDef - the enum type defined from cc.Enum\n * @return {Object[]}\n * @private\n */\nEnum.getList = function (enumDef) {\n if (enumDef.__enums__)\n return enumDef.__enums__;\n\n var enums = enumDef.__enums__ = [];\n for (var name in enumDef) {\n var value = enumDef[name];\n if (Number.isInteger(value)) {\n enums.push({ name, value });\n }\n }\n enums.sort( function ( a, b ) { return a.value - b.value; } );\n return enums;\n};\n\nif (CC_DEV) {\n // check key order in object literal\n var _TestEnum = Enum({\n ZERO: -1,\n ONE: -1,\n TWO: -1,\n THREE: -1\n });\n if (_TestEnum.ZERO !== 0 || _TestEnum.ONE !== 1 || _TestEnum.THREE !== 3) {\n cc.errorID(7101);\n }\n}\n\nmodule.exports = cc.Enum = Enum;\n","/****************************************************************************\n Copyright (c) 2011-2012 cocos2d-x.org\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos2d-x.org\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst eventManager = require('../event-manager');\nconst inputManager = require(\"./CCInputManager\");\n\nconst PORTRAIT = 0;\nconst LANDSCAPE_LEFT = -90;\nconst PORTRAIT_UPSIDE_DOWN = 180;\nconst LANDSCAPE_RIGHT = 90;\n\nlet _didAccelerateFun;\n\n/**\n * !#en the device accelerometer reports values for each axis in units of g-force.\n * !#zh 设备重力传感器传递的各个轴的数据。\n * @class Acceleration\n * @method constructor\n * @param {Number} x\n * @param {Number} y\n * @param {Number} z\n * @param {Number} timestamp\n */\ncc.Acceleration = function (x, y, z, timestamp) {\n this.x = x || 0;\n this.y = y || 0;\n this.z = z || 0;\n this.timestamp = timestamp || 0;\n};\n\n/**\n * whether enable accelerometer event\n * @method setAccelerometerEnabled\n * @param {Boolean} isEnable\n */\ninputManager.setAccelerometerEnabled = function (isEnable) {\n let _t = this;\n if(_t._accelEnabled === isEnable)\n return;\n\n _t._accelEnabled = isEnable;\n let scheduler = cc.director.getScheduler();\n scheduler.enableForTarget(_t);\n if (_t._accelEnabled) {\n _t._registerAccelerometerEvent();\n _t._accelCurTime = 0;\n scheduler.scheduleUpdate(_t);\n } else {\n _t._unregisterAccelerometerEvent();\n _t._accelCurTime = 0;\n scheduler.unscheduleUpdate(_t);\n }\n\n if (CC_JSB || CC_RUNTIME) {\n jsb.device.setMotionEnabled(isEnable);\n }\n};\n\n/**\n * set accelerometer interval value\n * @method setAccelerometerInterval\n * @param {Number} interval\n */\ninputManager.setAccelerometerInterval = function (interval) {\n if (this._accelInterval !== interval) {\n this._accelInterval = interval;\n\n if (CC_JSB || CC_RUNTIME) {\n jsb.device.setMotionInterval(interval);\n }\n }\n};\n\ninputManager._registerKeyboardEvent = function () {\n cc.game.canvas.addEventListener(\"keydown\", function (e) {\n eventManager.dispatchEvent(new cc.Event.EventKeyboard(e.keyCode, true));\n e.stopPropagation();\n e.preventDefault();\n }, false);\n cc.game.canvas.addEventListener(\"keyup\", function (e) {\n eventManager.dispatchEvent(new cc.Event.EventKeyboard(e.keyCode, false));\n e.stopPropagation();\n e.preventDefault();\n }, false);\n};\n\ninputManager._registerAccelerometerEvent = function () {\n let w = window, _t = this;\n _t._acceleration = new cc.Acceleration();\n _t._accelDeviceEvent = w.DeviceMotionEvent || w.DeviceOrientationEvent;\n\n //TODO fix DeviceMotionEvent bug on QQ Browser version 4.1 and below.\n if (cc.sys.browserType === cc.sys.BROWSER_TYPE_MOBILE_QQ)\n _t._accelDeviceEvent = window.DeviceOrientationEvent;\n\n let _deviceEventType = (_t._accelDeviceEvent === w.DeviceMotionEvent) ? \"devicemotion\" : \"deviceorientation\";\n let ua = navigator.userAgent;\n if (/Android/.test(ua) || (/Adr/.test(ua) && cc.sys.browserType === cc.BROWSER_TYPE_UC)) {\n _t._minus = -1;\n }\n\n _didAccelerateFun = _t.didAccelerate.bind(_t);\n w.addEventListener(_deviceEventType, _didAccelerateFun, false);\n};\n\ninputManager._unregisterAccelerometerEvent = function () {\n let w = window, _t = this;\n let _deviceEventType = (_t._accelDeviceEvent === w.DeviceMotionEvent) ? \"devicemotion\" : \"deviceorientation\";\n if (_didAccelerateFun) {\n w.removeEventListener(_deviceEventType, _didAccelerateFun, false);\n }\n};\n\ninputManager.didAccelerate = function (eventData) {\n let _t = this, w = window;\n if (!_t._accelEnabled)\n return;\n\n let mAcceleration = _t._acceleration;\n\n let x, y, z;\n\n if (_t._accelDeviceEvent === window.DeviceMotionEvent) {\n let eventAcceleration = eventData[\"accelerationIncludingGravity\"];\n x = _t._accelMinus * eventAcceleration.x * 0.1;\n y = _t._accelMinus * eventAcceleration.y * 0.1;\n z = eventAcceleration.z * 0.1;\n } else {\n x = (eventData[\"gamma\"] / 90) * 0.981;\n y = -(eventData[\"beta\"] / 90) * 0.981;\n z = (eventData[\"alpha\"] / 90) * 0.981;\n }\n\n if (cc.view._isRotated) {\n let tmp = x;\n x = -y;\n y = tmp;\n }\n mAcceleration.x = x;\n mAcceleration.y = y;\n mAcceleration.z = z;\n\n mAcceleration.timestamp = eventData.timeStamp || Date.now();\n\n let tmpX = mAcceleration.x;\n if (w.orientation === LANDSCAPE_RIGHT) {\n mAcceleration.x = -mAcceleration.y;\n mAcceleration.y = tmpX;\n } else if (w.orientation === LANDSCAPE_LEFT) {\n mAcceleration.x = mAcceleration.y;\n mAcceleration.y = -tmpX;\n } else if (w.orientation === PORTRAIT_UPSIDE_DOWN) {\n mAcceleration.x = -mAcceleration.x;\n mAcceleration.y = -mAcceleration.y;\n }\n // fix android acc values are opposite\n if (cc.sys.os === cc.sys.OS_ANDROID &&\n cc.sys.browserType !== cc.sys.BROWSER_TYPE_MOBILE_QQ) {\n mAcceleration.x = -mAcceleration.x;\n mAcceleration.y = -mAcceleration.y;\n }\n};","/****************************************************************************\n Copyright (c) 2011-2012 cocos2d-x.org\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos2d-x.org\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst macro = require('./CCMacro');\nconst sys = require('./CCSys');\nconst eventManager = require('../event-manager');\n\nconst TOUCH_TIMEOUT = macro.TOUCH_TIMEOUT;\n\nlet _vec2 = cc.v2();\n\n/**\n * This class manages all events of input. include: touch, mouse, accelerometer, keyboard\n */\nlet inputManager = {\n _mousePressed: false,\n\n _isRegisterEvent: false,\n\n _preTouchPoint: cc.v2(0,0),\n _prevMousePoint: cc.v2(0,0),\n\n _preTouchPool: [],\n _preTouchPoolPointer: 0,\n\n _touches: [],\n _touchesIntegerDict:{},\n\n _indexBitsUsed: 0,\n _maxTouches: 8,\n\n _accelEnabled: false,\n _accelInterval: 1/5,\n _accelMinus: 1,\n _accelCurTime: 0,\n _acceleration: null,\n _accelDeviceEvent: null,\n\n _canvasBoundingRect: {\n left: 0,\n top: 0,\n adjustedLeft: 0,\n adjustedTop: 0,\n width: 0,\n height: 0,\n },\n\n _getUnUsedIndex () {\n let temp = this._indexBitsUsed;\n let now = cc.sys.now();\n\n for (let i = 0; i < this._maxTouches; i++) {\n if (!(temp & 0x00000001)) {\n this._indexBitsUsed |= (1 << i);\n return i;\n }\n else {\n let touch = this._touches[i];\n if (now - touch._lastModified > TOUCH_TIMEOUT) {\n this._removeUsedIndexBit(i);\n delete this._touchesIntegerDict[touch.getID()];\n return i;\n }\n }\n temp >>= 1;\n }\n\n // all bits are used\n return -1;\n },\n\n _removeUsedIndexBit (index) {\n if (index < 0 || index >= this._maxTouches)\n return;\n\n let temp = 1 << index;\n temp = ~temp;\n this._indexBitsUsed &= temp;\n },\n\n _glView: null,\n\n _updateCanvasBoundingRect () {\n let element = cc.game.canvas;\n let canvasBoundingRect = this._canvasBoundingRect;\n\n let docElem = document.documentElement;\n let leftOffset = window.pageXOffset - docElem.clientLeft;\n let topOffset = window.pageYOffset - docElem.clientTop;\n if (element.getBoundingClientRect) {\n let box = element.getBoundingClientRect();\n canvasBoundingRect.left = box.left + leftOffset;\n canvasBoundingRect.top = box.top + topOffset;\n canvasBoundingRect.width = box.width;\n canvasBoundingRect.height = box.height;\n }\n else if (element instanceof HTMLCanvasElement) {\n canvasBoundingRect.left = leftOffset;\n canvasBoundingRect.top = topOffset;\n canvasBoundingRect.width = element.width;\n canvasBoundingRect.height = element.height;\n }\n else {\n canvasBoundingRect.left = leftOffset;\n canvasBoundingRect.top = topOffset;\n canvasBoundingRect.width = parseInt(element.style.width);\n canvasBoundingRect.height = parseInt(element.style.height);\n }\n },\n\n /**\n * @method handleTouchesBegin\n * @param {Array} touches\n */\n handleTouchesBegin (touches) {\n let selTouch, index, curTouch, touchID,\n handleTouches = [], locTouchIntDict = this._touchesIntegerDict,\n now = sys.now();\n for (let i = 0, len = touches.length; i < len; i ++) {\n selTouch = touches[i];\n touchID = selTouch.getID();\n index = locTouchIntDict[touchID];\n\n if (index == null) {\n let unusedIndex = this._getUnUsedIndex();\n if (unusedIndex === -1) {\n cc.logID(2300, unusedIndex);\n continue;\n }\n //curTouch = this._touches[unusedIndex] = selTouch;\n curTouch = this._touches[unusedIndex] = new cc.Touch(selTouch._point.x, selTouch._point.y, selTouch.getID());\n curTouch._lastModified = now;\n curTouch._setPrevPoint(selTouch._prevPoint);\n locTouchIntDict[touchID] = unusedIndex;\n handleTouches.push(curTouch);\n }\n }\n if (handleTouches.length > 0) {\n this._glView._convertTouchesWithScale(handleTouches);\n let touchEvent = new cc.Event.EventTouch(handleTouches);\n touchEvent._eventCode = cc.Event.EventTouch.BEGAN;\n eventManager.dispatchEvent(touchEvent);\n }\n },\n\n /**\n * @method handleTouchesMove\n * @param {Array} touches\n */\n handleTouchesMove (touches) {\n let selTouch, index, touchID,\n handleTouches = [], locTouches = this._touches,\n now = sys.now();\n for (let i = 0, len = touches.length; i < len; i++) {\n selTouch = touches[i];\n touchID = selTouch.getID();\n index = this._touchesIntegerDict[touchID];\n\n if (index == null) {\n //cc.log(\"if the index doesn't exist, it is an error\");\n continue;\n }\n if (locTouches[index]) {\n locTouches[index]._setPoint(selTouch._point);\n locTouches[index]._setPrevPoint(selTouch._prevPoint);\n locTouches[index]._lastModified = now;\n handleTouches.push(locTouches[index]);\n }\n }\n if (handleTouches.length > 0) {\n this._glView._convertTouchesWithScale(handleTouches);\n let touchEvent = new cc.Event.EventTouch(handleTouches);\n touchEvent._eventCode = cc.Event.EventTouch.MOVED;\n eventManager.dispatchEvent(touchEvent);\n }\n },\n\n /**\n * @method handleTouchesEnd\n * @param {Array} touches\n */\n handleTouchesEnd (touches) {\n let handleTouches = this.getSetOfTouchesEndOrCancel(touches);\n if (handleTouches.length > 0) {\n this._glView._convertTouchesWithScale(handleTouches);\n let touchEvent = new cc.Event.EventTouch(handleTouches);\n touchEvent._eventCode = cc.Event.EventTouch.ENDED;\n eventManager.dispatchEvent(touchEvent);\n }\n this._preTouchPool.length = 0;\n },\n\n /**\n * @method handleTouchesCancel\n * @param {Array} touches\n */\n handleTouchesCancel (touches) {\n let handleTouches = this.getSetOfTouchesEndOrCancel(touches);\n if (handleTouches.length > 0) {\n this._glView._convertTouchesWithScale(handleTouches);\n let touchEvent = new cc.Event.EventTouch(handleTouches);\n touchEvent._eventCode = cc.Event.EventTouch.CANCELED;\n eventManager.dispatchEvent(touchEvent);\n }\n this._preTouchPool.length = 0;\n },\n\n /**\n * @method getSetOfTouchesEndOrCancel\n * @param {Array} touches\n * @returns {Array}\n */\n getSetOfTouchesEndOrCancel (touches) {\n let selTouch, index, touchID, handleTouches = [], locTouches = this._touches, locTouchesIntDict = this._touchesIntegerDict;\n for (let i = 0, len = touches.length; i< len; i ++) {\n selTouch = touches[i];\n touchID = selTouch.getID();\n index = locTouchesIntDict[touchID];\n\n if (index == null) {\n continue; //cc.log(\"if the index doesn't exist, it is an error\");\n }\n if (locTouches[index]) {\n locTouches[index]._setPoint(selTouch._point);\n locTouches[index]._setPrevPoint(selTouch._prevPoint);\n handleTouches.push(locTouches[index]);\n this._removeUsedIndexBit(index);\n delete locTouchesIntDict[touchID];\n }\n }\n return handleTouches;\n },\n\n /**\n * @method getPreTouch\n * @param {Touch} touch\n * @return {Touch}\n */\n getPreTouch (touch) {\n let preTouch = null;\n let locPreTouchPool = this._preTouchPool;\n let id = touch.getID();\n for (let i = locPreTouchPool.length - 1; i >= 0; i--) {\n if (locPreTouchPool[i].getID() === id) {\n preTouch = locPreTouchPool[i];\n break;\n }\n }\n if (!preTouch)\n preTouch = touch;\n return preTouch;\n },\n\n /**\n * @method setPreTouch\n * @param {Touch} touch\n */\n setPreTouch (touch) {\n let find = false;\n let locPreTouchPool = this._preTouchPool;\n let id = touch.getID();\n for (let i = locPreTouchPool.length - 1; i >= 0; i--) {\n if (locPreTouchPool[i].getID() === id) {\n locPreTouchPool[i] = touch;\n find = true;\n break;\n }\n }\n if (!find) {\n if (locPreTouchPool.length <= 50) {\n locPreTouchPool.push(touch);\n } else {\n locPreTouchPool[this._preTouchPoolPointer] = touch;\n this._preTouchPoolPointer = (this._preTouchPoolPointer + 1) % 50;\n }\n }\n },\n\n /**\n * @method getTouchByXY\n * @param {Number} tx\n * @param {Number} ty\n * @param {Vec2} pos\n * @return {Touch}\n */\n getTouchByXY (tx, ty, pos) {\n let locPreTouch = this._preTouchPoint;\n let location = this._glView.convertToLocationInView(tx, ty, pos);\n let touch = new cc.Touch(location.x, location.y, 0);\n touch._setPrevPoint(locPreTouch.x, locPreTouch.y);\n locPreTouch.x = location.x;\n locPreTouch.y = location.y;\n return touch;\n },\n\n /**\n * @method getMouseEvent\n * @param {Vec2} location\n * @param {Vec2} pos\n * @param {Number} eventType\n * @returns {Event.EventMouse}\n */\n getMouseEvent (location, pos, eventType) {\n let locPreMouse = this._prevMousePoint;\n let mouseEvent = new cc.Event.EventMouse(eventType);\n mouseEvent._setPrevCursor(locPreMouse.x, locPreMouse.y);\n locPreMouse.x = location.x;\n locPreMouse.y = location.y;\n this._glView._convertMouseToLocationInView(locPreMouse, pos);\n mouseEvent.setLocation(locPreMouse.x, locPreMouse.y);\n return mouseEvent;\n },\n\n /**\n * @method getPointByEvent\n * @param {Touch} event\n * @param {Vec2} pos\n * @return {Vec2}\n */\n getPointByEvent (event, pos) {\n // qq , uc and safari browser can't calculate pageY correctly, need to refresh canvas bounding rect\n if (cc.sys.browserType === cc.sys.BROWSER_TYPE_QQ \n || cc.sys.browserType === cc.sys.BROWSER_TYPE_UC\n || cc.sys.browserType === cc.sys.BROWSER_TYPE_SAFARI) {\n this._updateCanvasBoundingRect();\n }\n \n if (event.pageX != null) //not avalable in <= IE8\n return {x: event.pageX, y: event.pageY};\n\n pos.left -= document.body.scrollLeft;\n pos.top -= document.body.scrollTop;\n\n return {x: event.clientX, y: event.clientY};\n },\n\n /**\n * @method getTouchesByEvent\n * @param {Touch} event\n * @param {Vec2} pos\n * @returns {Array}\n */\n getTouchesByEvent (event, pos) {\n let touchArr = [], locView = this._glView;\n let touch_event, touch, preLocation;\n let locPreTouch = this._preTouchPoint;\n\n let length = event.changedTouches.length;\n for (let i = 0; i < length; i++) {\n touch_event = event.changedTouches[i];\n if (touch_event) {\n let location;\n if (sys.BROWSER_TYPE_FIREFOX === sys.browserType)\n location = locView.convertToLocationInView(touch_event.pageX, touch_event.pageY, pos, _vec2);\n else\n location = locView.convertToLocationInView(touch_event.clientX, touch_event.clientY, pos, _vec2);\n if (touch_event.identifier != null) {\n touch = new cc.Touch(location.x, location.y, touch_event.identifier);\n //use Touch Pool\n preLocation = this.getPreTouch(touch).getLocation();\n touch._setPrevPoint(preLocation.x, preLocation.y);\n this.setPreTouch(touch);\n } else {\n touch = new cc.Touch(location.x, location.y);\n touch._setPrevPoint(locPreTouch.x, locPreTouch.y);\n }\n locPreTouch.x = location.x;\n locPreTouch.y = location.y;\n touchArr.push(touch);\n }\n }\n return touchArr;\n },\n\n /**\n * @method registerSystemEvent\n * @param {HTMLElement} element\n */\n registerSystemEvent (element) {\n if(this._isRegisterEvent) return;\n\n this._glView = cc.view;\n let selfPointer = this;\n let canvasBoundingRect = this._canvasBoundingRect;\n\n window.addEventListener('resize', this._updateCanvasBoundingRect.bind(this));\n\n let prohibition = sys.isMobile;\n let supportMouse = ('mouse' in sys.capabilities);\n let supportTouches = ('touches' in sys.capabilities);\n\n if (supportMouse) {\n //HACK\n // - At the same time to trigger the ontouch event and onmouse event\n // - The function will execute 2 times\n //The known browser:\n // liebiao\n // miui\n // WECHAT\n if (!prohibition) {\n window.addEventListener('mousedown', function () {\n selfPointer._mousePressed = true;\n }, false);\n\n window.addEventListener('mouseup', function (event) {\n if (!selfPointer._mousePressed)\n return;\n \n selfPointer._mousePressed = false;\n\n let location = selfPointer.getPointByEvent(event, canvasBoundingRect);\n if (!cc.rect(canvasBoundingRect.left, canvasBoundingRect.top, canvasBoundingRect.width, canvasBoundingRect.height).contains(location)){\n selfPointer.handleTouchesEnd([selfPointer.getTouchByXY(location.x, location.y, canvasBoundingRect)]);\n\n let mouseEvent = selfPointer.getMouseEvent(location, canvasBoundingRect, cc.Event.EventMouse.UP);\n mouseEvent.setButton(event.button);\n eventManager.dispatchEvent(mouseEvent);\n }\n }, false);\n }\n\n // register canvas mouse event\n let EventMouse = cc.Event.EventMouse;\n let _mouseEventsOnElement = [\n !prohibition && [\"mousedown\", EventMouse.DOWN, function (event, mouseEvent, location, canvasBoundingRect) {\n selfPointer._mousePressed = true;\n selfPointer.handleTouchesBegin([selfPointer.getTouchByXY(location.x, location.y, canvasBoundingRect)]);\n element.focus();\n }],\n !prohibition && [\"mouseup\", EventMouse.UP, function (event, mouseEvent, location, canvasBoundingRect) {\n selfPointer._mousePressed = false;\n selfPointer.handleTouchesEnd([selfPointer.getTouchByXY(location.x, location.y, canvasBoundingRect)]);\n }],\n !prohibition && [\"mousemove\", EventMouse.MOVE, function (event, mouseEvent, location, canvasBoundingRect) {\n selfPointer.handleTouchesMove([selfPointer.getTouchByXY(location.x, location.y, canvasBoundingRect)]);\n if (!selfPointer._mousePressed) {\n mouseEvent.setButton(null);\n }\n }],\n [\"mousewheel\", EventMouse.SCROLL, function (event, mouseEvent) {\n mouseEvent.setScrollData(0, event.wheelDelta);\n }],\n /* firefox fix */\n [\"DOMMouseScroll\", EventMouse.SCROLL, function (event, mouseEvent) {\n mouseEvent.setScrollData(0, event.detail * -120);\n }]\n ];\n for (let i = 0; i < _mouseEventsOnElement.length; ++i) {\n let entry = _mouseEventsOnElement[i];\n if (entry) {\n let name = entry[0];\n let type = entry[1];\n let handler = entry[2];\n element.addEventListener(name, function (event) {\n let location = selfPointer.getPointByEvent(event, canvasBoundingRect);\n let mouseEvent = selfPointer.getMouseEvent(location, canvasBoundingRect, type);\n mouseEvent.setButton(event.button);\n\n handler(event, mouseEvent, location, canvasBoundingRect);\n\n eventManager.dispatchEvent(mouseEvent);\n event.stopPropagation();\n event.preventDefault();\n }, false);\n }\n }\n }\n\n if (window.navigator.msPointerEnabled) {\n let _pointerEventsMap = {\n \"MSPointerDown\" : selfPointer.handleTouchesBegin,\n \"MSPointerMove\" : selfPointer.handleTouchesMove,\n \"MSPointerUp\" : selfPointer.handleTouchesEnd,\n \"MSPointerCancel\" : selfPointer.handleTouchesCancel\n };\n for (let eventName in _pointerEventsMap) {\n let touchEvent = _pointerEventsMap[eventName];\n element.addEventListener(eventName, function (event){\n let documentElement = document.documentElement;\n canvasBoundingRect.adjustedLeft = canvasBoundingRect.left - documentElement.scrollLeft;\n canvasBoundingRect.adjustedTop = canvasBoundingRect.top - documentElement.scrollTop;\n\n touchEvent.call(selfPointer, [selfPointer.getTouchByXY(event.clientX, event.clientY, canvasBoundingRect)]);\n event.stopPropagation();\n }, false);\n }\n }\n\n //register touch event\n if (supportTouches) {\n let _touchEventsMap = {\n \"touchstart\": function (touchesToHandle) {\n selfPointer.handleTouchesBegin(touchesToHandle);\n element.focus();\n },\n \"touchmove\": function (touchesToHandle) {\n selfPointer.handleTouchesMove(touchesToHandle);\n },\n \"touchend\": function (touchesToHandle) {\n selfPointer.handleTouchesEnd(touchesToHandle);\n },\n \"touchcancel\": function (touchesToHandle) {\n selfPointer.handleTouchesCancel(touchesToHandle);\n }\n };\n\n let registerTouchEvent = function (eventName) {\n let handler = _touchEventsMap[eventName];\n element.addEventListener(eventName, (function(event) {\n if (!event.changedTouches) return;\n let body = document.body;\n\n canvasBoundingRect.adjustedLeft = canvasBoundingRect.left - (body.scrollLeft || window.scrollX || 0);\n canvasBoundingRect.adjustedTop = canvasBoundingRect.top - (body.scrollTop || window.scrollY || 0);\n handler(selfPointer.getTouchesByEvent(event, canvasBoundingRect));\n event.stopPropagation();\n event.preventDefault();\n }), false);\n };\n for (let eventName in _touchEventsMap) {\n registerTouchEvent(eventName);\n }\n }\n\n this._registerKeyboardEvent();\n\n this._isRegisterEvent = true;\n },\n\n _registerKeyboardEvent () {},\n\n _registerAccelerometerEvent () {},\n\n /**\n * @method update\n * @param {Number} dt\n */\n update (dt) {\n if (this._accelCurTime > this._accelInterval) {\n this._accelCurTime -= this._accelInterval;\n eventManager.dispatchEvent(new cc.Event.EventAcceleration(this._acceleration));\n }\n this._accelCurTime += dt;\n }\n};\n\nmodule.exports = cc.internal.inputManager = inputManager;\n","/****************************************************************************\n Copyright (c) 2008-2010 Ricardo Quesada\n Copyright (c) 2011-2012 cocos2d-x.org\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos2d-x.org\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * Predefined constants\n * @class macro\n * @static\n */\ncc.macro = {\n /**\n * PI / 180\n * @property RAD\n * @type {Number}\n */\n RAD: Math.PI / 180,\n\n /**\n * One degree\n * @property DEG\n * @type {Number}\n */\n DEG: 180 / Math.PI,\n\n /**\n * @property REPEAT_FOREVER\n * @type {Number}\n */\n REPEAT_FOREVER: (Number.MAX_VALUE - 1),\n\n /**\n * @property FLT_EPSILON\n * @type {Number}\n */\n FLT_EPSILON: 0.0000001192092896,\n\n /**\n * Minimum z index value for node\n * @property MIN_ZINDEX\n * @type {Number}\n */\n MIN_ZINDEX: -Math.pow(2, 15),\n\n /**\n * Maximum z index value for node\n * @property MAX_ZINDEX\n * @type {Number}\n */\n MAX_ZINDEX: Math.pow(2, 15) - 1,\n\n //some gl constant variable\n /**\n * @property ONE\n * @type {Number}\n */\n ONE: 1,\n\n /**\n * @property ZERO\n * @type {Number}\n */\n ZERO: 0,\n\n /**\n * @property SRC_ALPHA\n * @type {Number}\n */\n SRC_ALPHA: 0x0302,\n\n /**\n * @property SRC_ALPHA_SATURATE\n * @type {Number}\n */\n SRC_ALPHA_SATURATE: 0x308,\n\n /**\n * @property SRC_COLOR\n * @type {Number}\n */\n SRC_COLOR: 0x300,\n\n /**\n * @property DST_ALPHA\n * @type {Number}\n */\n DST_ALPHA: 0x304,\n\n /**\n * @property DST_COLOR\n * @type {Number}\n */\n DST_COLOR: 0x306,\n\n /**\n * @property ONE_MINUS_SRC_ALPHA\n * @type {Number}\n */\n ONE_MINUS_SRC_ALPHA: 0x0303,\n\n /**\n * @property ONE_MINUS_SRC_COLOR\n * @type {Number}\n */\n ONE_MINUS_SRC_COLOR: 0x301,\n\n /**\n * @property ONE_MINUS_DST_ALPHA\n * @type {Number}\n */\n ONE_MINUS_DST_ALPHA: 0x305,\n\n /**\n * @property ONE_MINUS_DST_COLOR\n * @type {Number}\n */\n ONE_MINUS_DST_COLOR: 0x0307,\n\n /**\n * @property ONE_MINUS_CONSTANT_ALPHA\n * @type {Number}\n */\n ONE_MINUS_CONSTANT_ALPHA: 0x8004,\n\n /**\n * @property ONE_MINUS_CONSTANT_COLOR\n * @type {Number}\n */\n ONE_MINUS_CONSTANT_COLOR: 0x8002,\n\n //Possible device orientations\n /**\n * Oriented vertically\n * @property ORIENTATION_PORTRAIT\n * @type {Number}\n */\n ORIENTATION_PORTRAIT: 1,\n\n /**\n * Oriented horizontally\n * @property ORIENTATION_LANDSCAPE\n * @type {Number}\n */\n ORIENTATION_LANDSCAPE: 2,\n\n /**\n * Oriented automatically\n * @property ORIENTATION_AUTO\n * @type {Number}\n */\n ORIENTATION_AUTO: 3,\n\n DENSITYDPI_DEVICE: 'device-dpi',\n DENSITYDPI_HIGH: 'high-dpi',\n DENSITYDPI_MEDIUM: 'medium-dpi',\n DENSITYDPI_LOW: 'low-dpi',\n\n // General configurations\n\n /**\n *

\n * If enabled, the texture coordinates will be calculated by using this formula:
\n * - texCoord.left = (rect.x*2+1) / (texture.wide*2);
\n * - texCoord.right = texCoord.left + (rect.width*2-2)/(texture.wide*2);
\n *
\n * The same for bottom and top.
\n *
\n * This formula prevents artifacts by using 99% of the texture.
\n * The \"correct\" way to prevent artifacts is by expand the texture's border with the same color by 1 pixel
\n *
\n * Affected component:
\n * - cc.TMXLayer
\n *
\n * Enabled by default. To disabled set it to 0.
\n * To modify it, in Web engine please refer to CCMacro.js, in JSB please refer to CCConfig.h\n *

\n *\n * @property {Number} FIX_ARTIFACTS_BY_STRECHING_TEXEL_TMX\n */\n FIX_ARTIFACTS_BY_STRECHING_TEXEL_TMX: true,\n\n /**\n * Position of the FPS (Default: 0,0 (bottom-left corner))
\n * To modify it, in Web engine please refer to CCMacro.js, in JSB please refer to CCConfig.h\n * @property {Vec2} DIRECTOR_STATS_POSITION\n */\n DIRECTOR_STATS_POSITION: cc.v2(0, 0),\n\n /**\n *

\n * If enabled, actions that alter the position property (eg: CCMoveBy, CCJumpBy, CCBezierBy, etc..) will be stacked.
\n * If you run 2 or more 'position' actions at the same time on a node, then end position will be the sum of all the positions.
\n * If disabled, only the last run action will take effect.\n *

\n * @property {Number} ENABLE_STACKABLE_ACTIONS\n */\n ENABLE_STACKABLE_ACTIONS: true,\n\n /**\n * !#en \n * The timeout to determine whether a touch is no longer active and should be removed.\n * The reason to add this timeout is due to an issue in X5 browser core, \n * when X5 is presented in wechat on Android, if a touch is glissed from the bottom up, and leave the page area,\n * no touch cancel event is triggered, and the touch will be considered active forever. \n * After multiple times of this action, our maximum touches number will be reached and all new touches will be ignored.\n * So this new mechanism can remove the touch that should be inactive if it's not updated during the last 5000 milliseconds.\n * Though it might remove a real touch if it's just not moving for the last 5 seconds which is not easy with the sensibility of mobile touch screen.\n * You can modify this value to have a better behavior if you find it's not enough.\n * !#zh\n * 用于甄别一个触点对象是否已经失效并且可以被移除的延时时长\n * 添加这个时长的原因是 X5 内核在微信浏览器中出现的一个 bug。\n * 在这个环境下,如果用户将一个触点从底向上移出页面区域,将不会触发任何 touch cancel 或 touch end 事件,而这个触点会被永远当作停留在页面上的有效触点。\n * 重复这样操作几次之后,屏幕上的触点数量将达到我们的事件系统所支持的最高触点数量,之后所有的触摸事件都将被忽略。\n * 所以这个新的机制可以在触点在一定时间内没有任何更新的情况下视为失效触点并从事件系统中移除。\n * 当然,这也可能移除一个真实的触点,如果用户的触点真的在一定时间段内完全没有移动(这在当前手机屏幕的灵敏度下会很难)。\n * 你可以修改这个值来获得你需要的效果,默认值是 5000 毫秒。\n * @property {Number} TOUCH_TIMEOUT\n */\n TOUCH_TIMEOUT: 5000,\n\n /**\n * !#en \n * The maximum vertex count for a single batched draw call.\n * !#zh\n * 最大可以被单次批处理渲染的顶点数量。\n * @property {Number} BATCH_VERTEX_COUNT\n */\n BATCH_VERTEX_COUNT: 20000,\n\n /**\n * !#en \n * Whether or not enabled tiled map auto culling. If you set the TiledMap skew or rotation, then need to manually disable this, otherwise, the rendering will be wrong.\n * !#zh\n * 是否开启瓦片地图的自动裁减功能。瓦片地图如果设置了 skew, rotation 或者采用了摄像机的话,需要手动关闭,否则渲染会出错。\n * @property {Boolean} ENABLE_TILEDMAP_CULLING\n * @default true\n */\n ENABLE_TILEDMAP_CULLING: true,\n\n /**\n * !#en \n * Boolean that indicates if the canvas contains an alpha channel, default sets to false for better performance.\n * Though if you want to make your canvas background transparent and show other dom elements at the background, \n * you can set it to true before `cc.game.run`.\n * Web only.\n * !#zh\n * 用于设置 Canvas 背景是否支持 alpha 通道,默认为 false,这样可以有更高的性能表现。\n * 如果你希望 Canvas 背景是透明的,并显示背后的其他 DOM 元素,你可以在 `cc.game.run` 之前将这个值设为 true。\n * 仅支持 Web\n * @property {Boolean} ENABLE_TRANSPARENT_CANVAS\n * @default false\n */\n ENABLE_TRANSPARENT_CANVAS: false,\n\n /**\n * !#en\n * Boolean that indicates if the WebGL context is created with `antialias` option turned on, default value is false.\n * Set it to true could make your game graphics slightly smoother, like texture hard edges when rotated.\n * Whether to use this really depend on your game design and targeted platform, \n * device with retina display usually have good detail on graphics with or without this option, \n * you probably don't want antialias if your game style is pixel art based.\n * Also, it could have great performance impact with some browser / device using software MSAA.\n * You can set it to true before `cc.game.run`.\n * Web only.\n * !#zh\n * 用于设置在创建 WebGL Context 时是否开启抗锯齿选项,默认值是 false。\n * 将这个选项设置为 true 会让你的游戏画面稍稍平滑一些,比如旋转硬边贴图时的锯齿。是否开启这个选项很大程度上取决于你的游戏和面向的平台。\n * 在大多数拥有 retina 级别屏幕的设备上用户往往无法区分这个选项带来的变化;如果你的游戏选择像素艺术风格,你也多半不会想开启这个选项。\n * 同时,在少部分使用软件级别抗锯齿算法的设备或浏览器上,这个选项会对性能产生比较大的影响。\n * 你可以在 `cc.game.run` 之前设置这个值,否则它不会生效。\n * 仅支持 Web\n * @property {Boolean} ENABLE_WEBGL_ANTIALIAS\n * @default false\n */\n ENABLE_WEBGL_ANTIALIAS: false,\n\n /**\n * !#en\n * Whether or not enable auto culling.\n * This feature have been removed in v2.0 new renderer due to overall performance consumption.\n * We have no plan currently to re-enable auto culling.\n * If your game have more dynamic objects, we suggest to disable auto culling.\n * If your game have more static objects, we suggest to enable auto culling.\n * !#zh\n * 是否开启自动裁减功能,开启裁减功能将会把在屏幕外的物体从渲染队列中去除掉。\n * 这个功能在 v2.0 的新渲染器中被移除了,因为它在大多数游戏中所带来的损耗要高于性能的提升,目前我们没有计划重新支持自动裁剪。\n * 如果游戏中的动态物体比较多的话,建议将此选项关闭。\n * 如果游戏中的静态物体比较多的话,建议将此选项打开。\n * @property {Boolean} ENABLE_CULLING\n * @deprecated since v2.0\n * @default false\n */\n ENABLE_CULLING: false,\n\n /**\n * !#en\n * Whether to clear the original image cache after uploaded a texture to GPU. If cleared, [Dynamic Atlas](https://docs.cocos.com/creator/manual/en/advanced-topics/dynamic-atlas.html) will not be supported.\n * Normally you don't need to enable this option on the web platform, because Image object doesn't consume too much memory.\n * But on WeChat Game platform, the current version cache decoded data in Image object, which has high memory usage.\n * So we enabled this option by default on WeChat, so that we can release Image cache immediately after uploaded to GPU.\n * !#zh\n * 是否在将贴图上传至 GPU 之后删除原始图片缓存,删除之后图片将无法进行 [动态合图](https://docs.cocos.com/creator/manual/zh/advanced-topics/dynamic-atlas.html)。\n * 在 Web 平台,你通常不需要开启这个选项,因为在 Web 平台 Image 对象所占用的内存很小。\n * 但是在微信小游戏平台的当前版本,Image 对象会缓存解码后的图片数据,它所占用的内存空间很大。\n * 所以我们在微信平台默认开启了这个选项,这样我们就可以在上传 GL 贴图之后立即释放 Image 对象的内存,避免过高的内存占用。\n * @property {Boolean} CLEANUP_IMAGE_CACHE\n * @default false\n */\n CLEANUP_IMAGE_CACHE: false,\n\n /**\n * !#en\n * Whether or not show mesh wire frame.\n * !#zh\n * 是否显示网格的线框。\n * @property {Boolean} SHOW_MESH_WIREFRAME\n * @default false\n */\n SHOW_MESH_WIREFRAME: false,\n\n /**\n * !#en\n * Whether or not show mesh normal.\n * !#zh\n * 是否显示网格的法线。\n * @property {Boolean} SHOW_MESH_NORMAL\n * @default false\n */\n SHOW_MESH_NORMAL: false,\n\n /**\n * !#en\n * Whether to enable multi-touch.\n * !#zh\n * 是否开启多点触摸\n * @property {Boolean} ENABLE_MULTI_TOUCH\n * @default true\n */\n ENABLE_MULTI_TOUCH: true,\n\n /**\n * References: \n * https://developer.mozilla.org/en-US/docs/Web/API/ImageBitmap\n * https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/createImageBitmap\n * \n * !#en\n * Whether to use image bitmap first. If enabled, memory usage will increase.\n * \n * !#zh\n * 是否优先使用 image bitmap,启用之后,内存占用会变高\n * \n * @property {Boolean} ALLOW_IMAGE_BITMAP\n * @default true\n */\n ALLOW_IMAGE_BITMAP: !cc.sys.isMobile,\n\n /**\n * !#en\n * Whether to use native TTF renderer which is faster but layout slightly different.\n * \n * !#zh\n * 是否使用原生的文本渲染机制, 布局和编辑器有差异.\n * \n * @property {Boolean} ENABLE_NATIVE_TTF_RENDERER\n * @default false\n */\n ENABLE_NATIVE_TTF_RENDERER: false\n\n};\n\nObject.defineProperty(cc.macro, 'ROTATE_ACTION_CCW', {\n set (value) {\n if (cc.RotateTo && cc.RotateBy) {\n cc.RotateTo._reverse = cc.RotateBy._reverse = value;\n }\n }\n});\n\nlet SUPPORT_TEXTURE_FORMATS = ['.pkm', '.pvr', '.webp', '.jpg', '.jpeg', '.bmp', '.png'];\n\n/**\n * !#en\n * The image format supported by the engine defaults, and the supported formats may differ in different build platforms and device types.\n * Currently all platform and device support ['.webp', '.jpg', '.jpeg', '.bmp', '.png'], The iOS mobile platform also supports the PVR format。\n * !#zh\n * 引擎默认支持的图片格式,支持的格式可能在不同的构建平台和设备类型上有所差别。\n * 目前所有平台和设备支持的格式有 ['.webp', '.jpg', '.jpeg', '.bmp', '.png']. 另外 Ios 手机平台还额外支持了 PVR 格式。\n * @property {String[]} SUPPORT_TEXTURE_FORMATS\n */\ncc.macro.SUPPORT_TEXTURE_FORMATS = SUPPORT_TEXTURE_FORMATS;\n\n\n/**\n * !#en Key map for keyboard event\n * !#zh 键盘事件的按键值\n * @enum macro.KEY\n * @example {@link cocos2d/core/platform/CCCommon/KEY.js}\n */\ncc.macro.KEY = {\n /**\n * !#en None\n * !#zh 没有分配\n * @property none\n * @type {Number}\n * @readonly\n */\n none:0,\n\n // android\n /**\n * !#en The back key\n * !#zh 返回键\n * @property back\n * @type {Number}\n * @readonly\n */\n back:6,\n /**\n * !#en The menu key\n * !#zh 菜单键\n * @property menu\n * @type {Number}\n * @readonly\n */\n menu:18,\n\n /**\n * !#en The backspace key\n * !#zh 退格键\n * @property backspace\n * @type {Number}\n * @readonly\n */\n backspace:8,\n\n /**\n * !#en The tab key\n * !#zh Tab 键\n * @property tab\n * @type {Number}\n * @readonly\n */\n tab:9,\n\n /**\n * !#en The enter key\n * !#zh 回车键\n * @property enter\n * @type {Number}\n * @readonly\n */\n enter:13,\n\n /**\n * !#en The shift key\n * !#zh Shift 键\n * @property shift\n * @type {Number}\n * @readonly\n */\n shift:16, //should use shiftkey instead\n\n /**\n * !#en The ctrl key\n * !#zh Ctrl 键\n * @property ctrl\n * @type {Number}\n * @readonly\n */\n ctrl:17, //should use ctrlkey\n\n /**\n * !#en The alt key\n * !#zh Alt 键\n * @property alt\n * @type {Number}\n * @readonly\n */\n alt:18, //should use altkey\n\n /**\n * !#en The pause key\n * !#zh 暂停键\n * @property pause\n * @type {Number}\n * @readonly\n */\n pause:19,\n\n /**\n * !#en The caps lock key\n * !#zh 大写锁定键\n * @property capslock\n * @type {Number}\n * @readonly\n */\n capslock:20,\n\n /**\n * !#en The esc key\n * !#zh ESC 键\n * @property escape\n * @type {Number}\n * @readonly\n */\n escape:27,\n\n /**\n * !#en The space key\n * !#zh 空格键\n * @property space\n * @type {Number}\n * @readonly\n */\n space:32,\n\n /**\n * !#en The page up key\n * !#zh 向上翻页键\n * @property pageup\n * @type {Number}\n * @readonly\n */\n pageup:33,\n\n /**\n * !#en The page down key\n * !#zh 向下翻页键\n * @property pagedown\n * @type {Number}\n * @readonly\n */\n pagedown:34,\n\n /**\n * !#en The end key\n * !#zh 结束键\n * @property end\n * @type {Number}\n * @readonly\n */\n end:35,\n\n /**\n * !#en The home key\n * !#zh 主菜单键\n * @property home\n * @type {Number}\n * @readonly\n */\n home:36,\n\n /**\n * !#en The left key\n * !#zh 向左箭头键\n * @property left\n * @type {Number}\n * @readonly\n */\n left:37,\n\n /**\n * !#en The up key\n * !#zh 向上箭头键\n * @property up\n * @type {Number}\n * @readonly\n */\n up:38,\n\n /**\n * !#en The right key\n * !#zh 向右箭头键\n * @property right\n * @type {Number}\n * @readonly\n */\n right:39,\n\n /**\n * !#en The down key\n * !#zh 向下箭头键\n * @property down\n * @type {Number}\n * @readonly\n */\n down:40,\n\n /**\n * !#en The select key\n * !#zh Select 键\n * @property select\n * @type {Number}\n * @readonly\n */\n select:41,\n\n /**\n * !#en The insert key\n * !#zh 插入键\n * @property insert\n * @type {Number}\n * @readonly\n */\n insert:45,\n\n /**\n * !#en The Delete key\n * !#zh 删除键\n * @property Delete\n * @type {Number}\n * @readonly\n */\n Delete:46,\n\n /**\n * !#en The '0' key on the top of the alphanumeric keyboard.\n * !#zh 字母键盘上的 0 键\n * @property 0\n * @type {Number}\n * @readonly\n */\n 0:48,\n\n /**\n * !#en The '1' key on the top of the alphanumeric keyboard.\n * !#zh 字母键盘上的 1 键\n * @property 1\n * @type {Number}\n * @readonly\n */\n 1:49,\n\n /**\n * !#en The '2' key on the top of the alphanumeric keyboard.\n * !#zh 字母键盘上的 2 键\n * @property 2\n * @type {Number}\n * @readonly\n */\n 2:50,\n\n /**\n * !#en The '3' key on the top of the alphanumeric keyboard.\n * !#zh 字母键盘上的 3 键\n * @property 3\n * @type {Number}\n * @readonly\n */\n 3:51,\n\n /**\n * !#en The '4' key on the top of the alphanumeric keyboard.\n * !#zh 字母键盘上的 4 键\n * @property 4\n * @type {Number}\n * @readonly\n */\n 4:52,\n\n /**\n * !#en The '5' key on the top of the alphanumeric keyboard.\n * !#zh 字母键盘上的 5 键\n * @property 5\n * @type {Number}\n * @readonly\n */\n 5:53,\n\n /**\n * !#en The '6' key on the top of the alphanumeric keyboard.\n * !#zh 字母键盘上的 6 键\n * @property 6\n * @type {Number}\n * @readonly\n */\n 6:54,\n\n /**\n * !#en The '7' key on the top of the alphanumeric keyboard.\n * !#zh 字母键盘上的 7 键\n * @property 7\n * @type {Number}\n * @readonly\n */\n 7:55,\n\n /**\n * !#en The '8' key on the top of the alphanumeric keyboard.\n * !#zh 字母键盘上的 8 键\n * @property 8\n * @type {Number}\n * @readonly\n */\n 8:56,\n\n /**\n * !#en The '9' key on the top of the alphanumeric keyboard.\n * !#zh 字母键盘上的 9 键\n * @property 9\n * @type {Number}\n * @readonly\n */\n 9:57,\n\n /**\n * !#en The a key\n * !#zh A 键\n * @property a\n * @type {Number}\n * @readonly\n */\n a:65,\n\n /**\n * !#en The b key\n * !#zh B 键\n * @property b\n * @type {Number}\n * @readonly\n */\n b:66,\n\n /**\n * !#en The c key\n * !#zh C 键\n * @property c\n * @type {Number}\n * @readonly\n */\n c:67,\n\n /**\n * !#en The d key\n * !#zh D 键\n * @property d\n * @type {Number}\n * @readonly\n */\n d:68,\n\n /**\n * !#en The e key\n * !#zh E 键\n * @property e\n * @type {Number}\n * @readonly\n */\n e:69,\n\n /**\n * !#en The f key\n * !#zh F 键\n * @property f\n * @type {Number}\n * @readonly\n */\n f:70,\n\n /**\n * !#en The g key\n * !#zh G 键\n * @property g\n * @type {Number}\n * @readonly\n */\n g:71,\n\n /**\n * !#en The h key\n * !#zh H 键\n * @property h\n * @type {Number}\n * @readonly\n */\n h:72,\n\n /**\n * !#en The i key\n * !#zh I 键\n * @property i\n * @type {Number}\n * @readonly\n */\n i:73,\n\n /**\n * !#en The j key\n * !#zh J 键\n * @property j\n * @type {Number}\n * @readonly\n */\n j:74,\n\n /**\n * !#en The k key\n * !#zh K 键\n * @property k\n * @type {Number}\n * @readonly\n */\n k:75,\n\n /**\n * !#en The l key\n * !#zh L 键\n * @property l\n * @type {Number}\n * @readonly\n */\n l:76,\n\n /**\n * !#en The m key\n * !#zh M 键\n * @property m\n * @type {Number}\n * @readonly\n */\n m:77,\n\n /**\n * !#en The n key\n * !#zh N 键\n * @property n\n * @type {Number}\n * @readonly\n */\n n:78,\n\n /**\n * !#en The o key\n * !#zh O 键\n * @property o\n * @type {Number}\n * @readonly\n */\n o:79,\n\n /**\n * !#en The p key\n * !#zh P 键\n * @property p\n * @type {Number}\n * @readonly\n */\n p:80,\n\n /**\n * !#en The q key\n * !#zh Q 键\n * @property q\n * @type {Number}\n * @readonly\n */\n q:81,\n\n /**\n * !#en The r key\n * !#zh R 键\n * @property r\n * @type {Number}\n * @readonly\n */\n r:82,\n\n /**\n * !#en The s key\n * !#zh S 键\n * @property s\n * @type {Number}\n * @readonly\n */\n s:83,\n\n /**\n * !#en The t key\n * !#zh T 键\n * @property t\n * @type {Number}\n * @readonly\n */\n t:84,\n\n /**\n * !#en The u key\n * !#zh U 键\n * @property u\n * @type {Number}\n * @readonly\n */\n u:85,\n\n /**\n * !#en The v key\n * !#zh V 键\n * @property v\n * @type {Number}\n * @readonly\n */\n v:86,\n\n /**\n * !#en The w key\n * !#zh W 键\n * @property w\n * @type {Number}\n * @readonly\n */\n w:87,\n\n /**\n * !#en The x key\n * !#zh X 键\n * @property x\n * @type {Number}\n * @readonly\n */\n x:88,\n\n /**\n * !#en The y key\n * !#zh Y 键\n * @property y\n * @type {Number}\n * @readonly\n */\n y:89,\n\n /**\n * !#en The z key\n * !#zh Z 键\n * @property z\n * @type {Number}\n * @readonly\n */\n z:90,\n\n /**\n * !#en The numeric keypad 0\n * !#zh 数字键盘 0\n * @property num0\n * @type {Number}\n * @readonly\n */\n num0:96,\n\n /**\n * !#en The numeric keypad 1\n * !#zh 数字键盘 1\n * @property num1\n * @type {Number}\n * @readonly\n */\n num1:97,\n\n /**\n * !#en The numeric keypad 2\n * !#zh 数字键盘 2\n * @property num2\n * @type {Number}\n * @readonly\n */\n num2:98,\n\n /**\n * !#en The numeric keypad 3\n * !#zh 数字键盘 3\n * @property num3\n * @type {Number}\n * @readonly\n */\n num3:99,\n\n /**\n * !#en The numeric keypad 4\n * !#zh 数字键盘 4\n * @property num4\n * @type {Number}\n * @readonly\n */\n num4:100,\n\n /**\n * !#en The numeric keypad 5\n * !#zh 数字键盘 5\n * @property num5\n * @type {Number}\n * @readonly\n */\n num5:101,\n\n /**\n * !#en The numeric keypad 6\n * !#zh 数字键盘 6\n * @property num6\n * @type {Number}\n * @readonly\n */\n num6:102,\n\n /**\n * !#en The numeric keypad 7\n * !#zh 数字键盘 7\n * @property num7\n * @type {Number}\n * @readonly\n */\n num7:103,\n\n /**\n * !#en The numeric keypad 8\n * !#zh 数字键盘 8\n * @property num8\n * @type {Number}\n * @readonly\n */\n num8:104,\n\n /**\n * !#en The numeric keypad 9\n * !#zh 数字键盘 9\n * @property num9\n * @type {Number}\n * @readonly\n */\n num9:105,\n\n /**\n * !#en The numeric keypad '*'\n * !#zh 数字键盘 *\n * @property *\n * @type {Number}\n * @readonly\n */\n '*':106,\n\n /**\n * !#en The numeric keypad '+'\n * !#zh 数字键盘 +\n * @property +\n * @type {Number}\n * @readonly\n */\n '+':107,\n\n /**\n * !#en The numeric keypad '-'\n * !#zh 数字键盘 -\n * @property -\n * @type {Number}\n * @readonly\n */\n '-':109,\n\n /**\n * !#en The numeric keypad 'delete'\n * !#zh 数字键盘删除键\n * @property numdel\n * @type {Number}\n * @readonly\n */\n 'numdel':110,\n\n /**\n * !#en The numeric keypad '/'\n * !#zh 数字键盘 /\n * @property /\n * @type {Number}\n * @readonly\n */\n '/':111,\n\n /**\n * !#en The F1 function key\n * !#zh F1 功能键\n * @property f1\n * @type {Number}\n * @readonly\n */\n f1:112, //f1-f12 dont work on ie\n\n /**\n * !#en The F2 function key\n * !#zh F2 功能键\n * @property f2\n * @type {Number}\n * @readonly\n */\n f2:113,\n\n /**\n * !#en The F3 function key\n * !#zh F3 功能键\n * @property f3\n * @type {Number}\n * @readonly\n */\n f3:114,\n\n /**\n * !#en The F4 function key\n * !#zh F4 功能键\n * @property f4\n * @type {Number}\n * @readonly\n */\n f4:115,\n\n /**\n * !#en The F5 function key\n * !#zh F5 功能键\n * @property f5\n * @type {Number}\n * @readonly\n */\n f5:116,\n\n /**\n * !#en The F6 function key\n * !#zh F6 功能键\n * @property f6\n * @type {Number}\n * @readonly\n */\n f6:117,\n\n /**\n * !#en The F7 function key\n * !#zh F7 功能键\n * @property f7\n * @type {Number}\n * @readonly\n */\n f7:118,\n\n /**\n * !#en The F8 function key\n * !#zh F8 功能键\n * @property f8\n * @type {Number}\n * @readonly\n */\n f8:119,\n\n /**\n * !#en The F9 function key\n * !#zh F9 功能键\n * @property f9\n * @type {Number}\n * @readonly\n */\n f9:120,\n\n /**\n * !#en The F10 function key\n * !#zh F10 功能键\n * @property f10\n * @type {Number}\n * @readonly\n */\n f10:121,\n\n /**\n * !#en The F11 function key\n * !#zh F11 功能键\n * @property f11\n * @type {Number}\n * @readonly\n */\n f11:122,\n\n /**\n * !#en The F12 function key\n * !#zh F12 功能键\n * @property f12\n * @type {Number}\n * @readonly\n */\n f12:123,\n\n /**\n * !#en The numlock key\n * !#zh 数字锁定键\n * @property numlock\n * @type {Number}\n * @readonly\n */\n numlock:144,\n\n /**\n * !#en The scroll lock key\n * !#zh 滚动锁定键\n * @property scrolllock\n * @type {Number}\n * @readonly\n */\n scrolllock:145,\n\n /**\n * !#en The ';' key.\n * !#zh 分号键\n * @property ;\n * @type {Number}\n * @readonly\n */\n ';':186,\n\n /**\n * !#en The ';' key.\n * !#zh 分号键\n * @property semicolon\n * @type {Number}\n * @readonly\n */\n semicolon:186,\n\n /**\n * !#en The '=' key.\n * !#zh 等于号键\n * @property equal\n * @type {Number}\n * @readonly\n */\n equal:187,\n\n /**\n * !#en The '=' key.\n * !#zh 等于号键\n * @property =\n * @type {Number}\n * @readonly\n */\n '=':187,\n\n /**\n * !#en The ',' key.\n * !#zh 逗号键\n * @property ,\n * @type {Number}\n * @readonly\n */\n ',':188,\n\n /**\n * !#en The ',' key.\n * !#zh 逗号键\n * @property comma\n * @type {Number}\n * @readonly\n */\n comma:188,\n\n /**\n * !#en The dash '-' key.\n * !#zh 中划线键\n * @property dash\n * @type {Number}\n * @readonly\n */\n dash:189,\n\n /**\n * !#en The '.' key.\n * !#zh 句号键\n * @property .\n * @type {Number}\n * @readonly\n */\n '.':190,\n\n /**\n * !#en The '.' key\n * !#zh 句号键\n * @property period\n * @type {Number}\n * @readonly\n */\n period:190,\n\n /**\n * !#en The forward slash key\n * !#zh 正斜杠键\n * @property forwardslash\n * @type {Number}\n * @readonly\n */\n forwardslash:191,\n\n /**\n * !#en The grave key\n * !#zh 按键 `\n * @property grave\n * @type {Number}\n * @readonly\n */\n grave:192,\n\n /**\n * !#en The '[' key\n * !#zh 按键 [\n * @property [\n * @type {Number}\n * @readonly\n */\n '[':219,\n\n /**\n * !#en The '[' key\n * !#zh 按键 [\n * @property openbracket\n * @type {Number}\n * @readonly\n */\n openbracket:219,\n\n /**\n * !#en The '\\' key\n * !#zh 反斜杠键\n * @property backslash\n * @type {Number}\n * @readonly\n */\n backslash:220,\n\n /**\n * !#en The ']' key\n * !#zh 按键 ]\n * @property ]\n * @type {Number}\n * @readonly\n */\n ']':221,\n\n /**\n * !#en The ']' key\n * !#zh 按键 ]\n * @property closebracket\n * @type {Number}\n * @readonly\n */\n closebracket:221,\n\n /**\n * !#en The quote key\n * !#zh 单引号键\n * @property quote\n * @type {Number}\n * @readonly\n */\n quote:222,\n\n // gamepad controll\n\n /**\n * !#en The dpad left key\n * !#zh 导航键 向左\n * @property dpadLeft\n * @type {Number}\n * @readonly\n */\n dpadLeft:1000,\n\n /**\n * !#en The dpad right key\n * !#zh 导航键 向右\n * @property dpadRight\n * @type {Number}\n * @readonly\n */\n dpadRight:1001,\n\n /**\n * !#en The dpad up key\n * !#zh 导航键 向上\n * @property dpadUp\n * @type {Number}\n * @readonly\n */\n dpadUp:1003,\n\n /**\n * !#en The dpad down key\n * !#zh 导航键 向下\n * @property dpadDown\n * @type {Number}\n * @readonly\n */\n dpadDown:1004,\n\n /**\n * !#en The dpad center key\n * !#zh 导航键 确定键\n * @property dpadCenter\n * @type {Number}\n * @readonly\n */\n dpadCenter:1005\n};\n\n/**\n * Image formats\n * @enum macro.ImageFormat\n */\ncc.macro.ImageFormat = cc.Enum({\n /**\n * Image Format:JPG\n * @property JPG\n * @type {Number}\n */\n JPG: 0,\n /**\n * Image Format:PNG\n * @property PNG\n * @type {Number}\n */\n PNG: 1,\n /**\n * Image Format:TIFF\n * @property TIFF\n * @type {Number}\n */\n TIFF: 2,\n /**\n * Image Format:WEBP\n * @property WEBP\n * @type {Number}\n */\n WEBP: 3,\n /**\n * Image Format:PVR\n * @property PVR\n * @type {Number}\n */\n PVR: 4,\n /**\n * Image Format:ETC\n * @property ETC\n * @type {Number}\n */\n ETC: 5,\n /**\n * Image Format:S3TC\n * @property S3TC\n * @type {Number}\n */\n S3TC: 6,\n /**\n * Image Format:ATITC\n * @property ATITC\n * @type {Number}\n */\n ATITC: 7,\n /**\n * Image Format:TGA\n * @property TGA\n * @type {Number}\n */\n TGA: 8,\n /**\n * Image Format:RAWDATA\n * @property RAWDATA\n * @type {Number}\n */\n RAWDATA: 9,\n /**\n * Image Format:UNKNOWN\n * @property UNKNOWN\n * @type {Number}\n */\n UNKNOWN: 10\n});\n\n/**\n * !#en\n * Enum for blend factor\n * Refer to: http://www.andersriggelsen.dk/glblendfunc.php\n * !#zh\n * 混合因子\n * 可参考: http://www.andersriggelsen.dk/glblendfunc.php\n * @enum macro.BlendFactor\n */\ncc.macro.BlendFactor = cc.Enum({\n /**\n * !#en All use\n * !#zh 全部使用\n * @property {Number} ONE\n */\n ONE: 1, //cc.macro.ONE\n /**\n * !#en Not all\n * !#zh 全部不用\n * @property {Number} ZERO\n */\n ZERO: 0, //cc.ZERO\n /**\n * !#en Using the source alpha\n * !#zh 使用源颜色的透明度\n * @property {Number} SRC_ALPHA\n */\n SRC_ALPHA: 0x302, //cc.SRC_ALPHA\n /**\n * !#en Using the source color\n * !#zh 使用源颜色\n * @property {Number} SRC_COLOR\n */\n SRC_COLOR: 0x300, //cc.SRC_COLOR\n /**\n * !#en Using the target alpha\n * !#zh 使用目标颜色的透明度\n * @property {Number} DST_ALPHA\n */\n DST_ALPHA: 0x304, //cc.DST_ALPHA\n /**\n * !#en Using the target color\n * !#zh 使用目标颜色\n * @property {Number} DST_COLOR\n */\n DST_COLOR: 0x306, //cc.DST_COLOR\n /**\n * !#en Minus the source alpha\n * !#zh 减去源颜色的透明度\n * @property {Number} ONE_MINUS_SRC_ALPHA\n */\n ONE_MINUS_SRC_ALPHA: 0x303, //cc.ONE_MINUS_SRC_ALPHA\n /**\n * !#en Minus the source color\n * !#zh 减去源颜色\n * @property {Number} ONE_MINUS_SRC_COLOR\n */\n ONE_MINUS_SRC_COLOR: 0x301, //cc.ONE_MINUS_SRC_COLOR\n /**\n * !#en Minus the target alpha\n * !#zh 减去目标颜色的透明度\n * @property {Number} ONE_MINUS_DST_ALPHA\n */\n ONE_MINUS_DST_ALPHA: 0x305, //cc.ONE_MINUS_DST_ALPHA\n /**\n * !#en Minus the target color\n * !#zh 减去目标颜色\n * @property {Number} ONE_MINUS_DST_COLOR\n */\n ONE_MINUS_DST_COLOR: 0x307, //cc.ONE_MINUS_DST_COLOR\n});\n\n/**\n * @enum macro.TextAlignment\n */\ncc.macro.TextAlignment = cc.Enum({\n /**\n * @property {Number} LEFT\n */\n LEFT: 0,\n /**\n * @property {Number} CENTER\n */\n CENTER: 1,\n /**\n * @property {Number} RIGHT\n */\n RIGHT: 2\n});\n\n/**\n * @enum VerticalTextAlignment\n */\ncc.macro.VerticalTextAlignment = cc.Enum({\n /**\n * @property {Number} TOP\n */\n TOP: 0,\n /**\n * @property {Number} CENTER\n */\n CENTER: 1,\n /**\n * @property {Number} BOTTOM\n */\n BOTTOM: 2\n});\n\nmodule.exports = cc.macro;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar js = require('./js');\nvar CCClass = require('./CCClass');\n\n// definitions for CCObject.Flags\n\nvar Destroyed = 1 << 0;\nvar RealDestroyed = 1 << 1;\nvar ToDestroy = 1 << 2;\nvar DontSave = 1 << 3;\nvar EditorOnly = 1 << 4;\nvar Dirty = 1 << 5;\nvar DontDestroy = 1 << 6;\nvar Destroying = 1 << 7;\nvar Deactivating = 1 << 8;\nvar LockedInEditor = 1 << 9;\n//var HideInGame = 1 << 9;\nvar HideInHierarchy = 1 << 10;\n\nvar IsOnEnableCalled = 1 << 11;\nvar IsEditorOnEnableCalled = 1 << 12;\nvar IsPreloadStarted = 1 << 13;\nvar IsOnLoadCalled = 1 << 14;\nvar IsOnLoadStarted = 1 << 15;\nvar IsStartCalled = 1 << 16;\n\nvar IsRotationLocked = 1 << 17;\nvar IsScaleLocked = 1 << 18;\nvar IsAnchorLocked = 1 << 19;\nvar IsSizeLocked = 1 << 20;\nvar IsPositionLocked = 1 << 21;\n\n// var Hide = HideInGame | HideInHierarchy;\n// should not clone or serialize these flags\nvar PersistentMask = ~(ToDestroy | Dirty | Destroying | DontDestroy | Deactivating |\n IsPreloadStarted | IsOnLoadStarted | IsOnLoadCalled | IsStartCalled |\n IsOnEnableCalled | IsEditorOnEnableCalled |\n IsRotationLocked | IsScaleLocked | IsAnchorLocked | IsSizeLocked | IsPositionLocked\n /*RegisteredInEditor*/);\n\n/**\n * The base class of most of all the objects in Fireball.\n * @class Object\n *\n * @main\n * @private\n */\nfunction CCObject () {\n /**\n * @property {String} _name\n * @default \"\"\n * @private\n */\n this._name = '';\n\n /**\n * @property {Number} _objFlags\n * @default 0\n * @private\n */\n this._objFlags = 0;\n}\nCCClass.fastDefine('cc.Object', CCObject, { _name: '', _objFlags: 0 });\n\n/**\n * Bit mask that controls object states.\n * @enum Flags\n * @static\n * @private\n */\njs.value(CCObject, 'Flags', {\n\n Destroyed,\n //ToDestroy: ToDestroy,\n\n /**\n * !#en The object will not be saved.\n * !#zh 该对象将不会被保存。\n * @property {Number} DontSave\n */\n DontSave,\n\n /**\n * !#en The object will not be saved when building a player.\n * !#zh 构建项目时,该对象将不会被保存。\n * @property {Number} EditorOnly\n */\n EditorOnly,\n\n Dirty,\n\n /**\n * !#en Dont destroy automatically when loading a new scene.\n * !#zh 加载一个新场景时,不自动删除该对象。\n * @property DontDestroy\n * @private\n */\n DontDestroy,\n\n PersistentMask,\n\n // FLAGS FOR ENGINE\n\n Destroying,\n\n /**\n * !#en The node is deactivating.\n * !#zh 节点正在反激活的过程中。\n * @property Deactivating\n * @private\n */\n Deactivating,\n\n /**\n * !#en The lock node, when the node is locked, cannot be clicked in the scene.\n * !#zh 锁定节点,锁定后场景内不能点击。\n * \n * @property LockedInEditor\n * @private\n */\n LockedInEditor,\n\n ///**\n // * !#en\n // * Hide in game and hierarchy.\n // * This flag is readonly, it can only be used as an argument of `scene.addEntity()` or `Entity.createWithFlags()`.\n // * !#zh\n // * 在游戏和层级中隐藏该对象。
\n // * 该标记只读,它只能被用作 `scene.addEntity()` 或者 `Entity.createWithFlags()` 的一个参数。\n // * @property {Number} HideInGame\n // */\n //HideInGame: HideInGame,\n\n // FLAGS FOR EDITOR\n\n /**\n * !#en Hide the object in editor.\n * !#zh 在编辑器中隐藏该对象。\n * @property {Number} HideInHierarchy\n */\n HideInHierarchy: HideInHierarchy,\n\n ///**\n // * !#en\n // * Hide in game view, hierarchy, and scene view... etc.\n // * This flag is readonly, it can only be used as an argument of `scene.addEntity()` or `Entity.createWithFlags()`.\n // * !#zh\n // * 在游戏视图,层级,场景视图等等...中隐藏该对象。\n // * 该标记只读,它只能被用作 `scene.addEntity()` 或者 `Entity.createWithFlags()` 的一个参数。\n // * @property {Number} Hide\n // */\n //Hide: Hide,\n\n // FLAGS FOR COMPONENT\n\n IsPreloadStarted,\n IsOnLoadStarted,\n IsOnLoadCalled,\n IsOnEnableCalled,\n IsStartCalled,\n IsEditorOnEnableCalled,\n\n IsPositionLocked,\n IsRotationLocked,\n IsScaleLocked,\n IsAnchorLocked,\n IsSizeLocked,\n});\n\nvar objectsToDestroy = [];\n\nfunction deferredDestroy () {\n var deleteCount = objectsToDestroy.length;\n for (var i = 0; i < deleteCount; ++i) {\n var obj = objectsToDestroy[i];\n if (!(obj._objFlags & Destroyed)) {\n obj._destroyImmediate();\n }\n }\n // if we called b.destory() in a.onDestroy(), objectsToDestroy will be resized,\n // but we only destroy the objects which called destory in this frame.\n if (deleteCount === objectsToDestroy.length) {\n objectsToDestroy.length = 0;\n }\n else {\n objectsToDestroy.splice(0, deleteCount);\n }\n\n if (CC_EDITOR) {\n deferredDestroyTimer = null;\n }\n}\n\njs.value(CCObject, '_deferredDestroy', deferredDestroy);\n\nif (CC_EDITOR) {\n js.value(CCObject, '_clearDeferredDestroyTimer', function () {\n if (deferredDestroyTimer !== null) {\n clearImmediate(deferredDestroyTimer);\n deferredDestroyTimer = null;\n }\n });\n}\n\n// MEMBER\n\n/**\n * @class Object\n */\n\nvar prototype = CCObject.prototype;\n\n/**\n * !#en The name of the object.\n * !#zh 该对象的名称。\n * @property {String} name\n * @default \"\"\n * @example\n * obj.name = \"New Obj\";\n */\njs.getset(prototype, 'name',\n function () {\n return this._name;\n },\n function (value) {\n this._name = value;\n },\n true\n);\n\n/**\n * !#en\n * Indicates whether the object is not yet destroyed. (It will not be available after being destroyed)
\n * When an object's `destroy` is called, it is actually destroyed after the end of this frame.\n * So `isValid` will return false from the next frame, while `isValid` in the current frame will still be true.\n * If you want to determine whether the current frame has called `destroy`, use `cc.isValid(obj, true)`,\n * but this is often caused by a particular logical requirements, which is not normally required.\n *\n * !#zh\n * 表示该对象是否可用(被 destroy 后将不可用)。
\n * 当一个对象的 `destroy` 调用以后,会在这一帧结束后才真正销毁。因此从下一帧开始 `isValid` 就会返回 false,而当前帧内 `isValid` 仍然会是 true。如果希望判断当前帧是否调用过 `destroy`,请使用 `cc.isValid(obj, true)`,不过这往往是特殊的业务需求引起的,通常情况下不需要这样。\n *\n * @property {Boolean} isValid\n * @default true\n * @readOnly\n * @example\n * var node = new cc.Node();\n * cc.log(node.isValid); // true\n * node.destroy();\n * cc.log(node.isValid); // true, still valid in this frame\n * // after a frame...\n * cc.log(node.isValid); // false, destroyed in the end of last frame\n */\njs.get(prototype, 'isValid', function () {\n return !(this._objFlags & Destroyed);\n}, true);\n\nif (CC_EDITOR || CC_TEST) {\n js.get(prototype, 'isRealValid', function () {\n return !(this._objFlags & RealDestroyed);\n });\n}\n\nvar deferredDestroyTimer = null;\n\n/**\n * !#en\n * Destroy this Object, and release all its own references to other objects.
\n * Actual object destruction will delayed until before rendering.\n * From the next frame, this object is not usable anymore.\n * You can use `cc.isValid(obj)` to check whether the object is destroyed before accessing it.\n * !#zh\n * 销毁该对象,并释放所有它对其它对象的引用。
\n * 实际销毁操作会延迟到当前帧渲染前执行。从下一帧开始,该对象将不再可用。\n * 您可以在访问对象之前使用 `cc.isValid(obj)` 来检查对象是否已被销毁。\n * @method destroy\n * @return {Boolean} whether it is the first time the destroy being called\n * @example\n * obj.destroy();\n */\nprototype.destroy = function () {\n if (this._objFlags & Destroyed) {\n cc.warnID(5000);\n return false;\n }\n if (this._objFlags & ToDestroy) {\n return false;\n }\n this._objFlags |= ToDestroy;\n objectsToDestroy.push(this);\n\n if (CC_EDITOR && deferredDestroyTimer === null && cc.engine && ! cc.engine._isUpdating) {\n // auto destroy immediate in edit mode\n deferredDestroyTimer = setImmediate(deferredDestroy);\n }\n return true;\n};\n\nif (CC_EDITOR || CC_TEST) {\n /*\n * !#en\n * In fact, Object's \"destroy\" will not trigger the destruct operation in Firebal Editor.\n * The destruct operation will be executed by Undo system later.\n * !#zh\n * 事实上,对象的 “destroy” 不会在编辑器中触发析构操作,\n * 析构操作将在 Undo 系统中 **延后** 执行。\n * @method realDestroyInEditor\n * @private\n */\n prototype.realDestroyInEditor = function () {\n if ( !(this._objFlags & Destroyed) ) {\n cc.warnID(5001);\n return;\n }\n if (this._objFlags & RealDestroyed) {\n cc.warnID(5000);\n return;\n }\n this._destruct();\n this._objFlags |= RealDestroyed;\n };\n}\n\nfunction compileDestruct (obj, ctor) {\n var shouldSkipId = obj instanceof cc._BaseNode || obj instanceof cc.Component;\n var idToSkip = shouldSkipId ? '_id' : null;\n\n var key, propsToReset = {};\n for (key in obj) {\n if (obj.hasOwnProperty(key)) {\n if (key === idToSkip) {\n continue;\n }\n switch (typeof obj[key]) {\n case 'string':\n propsToReset[key] = '';\n break;\n case 'object':\n case 'function':\n propsToReset[key] = null;\n break;\n }\n }\n }\n // Overwrite propsToReset according to Class\n if (cc.Class._isCCClass(ctor)) {\n var attrs = cc.Class.Attr.getClassAttrs(ctor);\n var propList = ctor.__props__;\n for (var i = 0; i < propList.length; i++) {\n key = propList[i];\n var attrKey = key + cc.Class.Attr.DELIMETER + 'default';\n if (attrKey in attrs) {\n if (shouldSkipId && key === '_id') {\n continue;\n }\n switch (typeof attrs[attrKey]) {\n case 'string':\n propsToReset[key] = '';\n break;\n case 'object':\n case 'function':\n propsToReset[key] = null;\n break;\n case 'undefined':\n propsToReset[key] = undefined;\n break;\n }\n }\n }\n }\n\n if (CC_SUPPORT_JIT) {\n // compile code\n var func = '';\n for (key in propsToReset) {\n var statement;\n if (CCClass.IDENTIFIER_RE.test(key)) {\n statement = 'o.' + key + '=';\n }\n else {\n statement = 'o[' + CCClass.escapeForJS(key) + ']=';\n }\n var val = propsToReset[key];\n if (val === '') {\n val = '\"\"';\n }\n func += (statement + val + ';\\n');\n }\n return Function('o', func);\n }\n else {\n return function (o) {\n for (var key in propsToReset) {\n o[key] = propsToReset[key];\n }\n };\n }\n}\n\n/**\n * !#en\n * Clear all references in the instance.\n *\n * NOTE: this method will not clear the `getter` or `setter` functions which defined in the instance of `CCObject`.\n * You can override the `_destruct` method if you need, for example:\n * ```js\n * _destruct: function () {\n * for (var key in this) {\n * if (this.hasOwnProperty(key)) {\n * switch (typeof this[key]) {\n * case 'string':\n * this[key] = '';\n * break;\n * case 'object':\n * case 'function':\n * this[key] = null;\n * break;\n * }\n * }\n * }\n * ```\n * !#zh\n * 清除实例中的所有引用。\n * \n * 注意:此方法不会清除在 `CCObject` 实例中定义的 `getter` 或 `setter`。如果需要,你可以重写 `_destruct` 方法。例如:\n * \n * ```js\n * _destruct: function () {\n * for (var key in this) {\n * if (this.hasOwnProperty(key)) {\n * switch (typeof this[key]) {\n * case 'string':\n * this[key] = '';\n * break;\n * case 'object':\n * case 'function':\n * this[key] = null;\n * break;\n * }\n * }\n * }\n * ```\n * @method _destruct\n * @private\n */\nprototype._destruct = function () {\n var ctor = this.constructor;\n var destruct = ctor.__destruct__;\n if (!destruct) {\n destruct = compileDestruct(this, ctor);\n js.value(ctor, '__destruct__', destruct, true);\n }\n destruct(this);\n};\n\n/**\n * !#en\n * Called before the object being destroyed.\n * !#zh\n * 在对象被销毁之前调用。\n * @method _onPreDestroy\n * @private\n */\nprototype._onPreDestroy = null;\n\nprototype._destroyImmediate = function () {\n if (this._objFlags & Destroyed) {\n cc.errorID(5000);\n return;\n }\n // engine internal callback\n if (this._onPreDestroy) {\n this._onPreDestroy();\n }\n\n if ((CC_TEST ? (/* make CC_EDITOR mockable*/ Function('return !CC_EDITOR'))() : !CC_EDITOR) || cc.engine._isPlaying) {\n this._destruct();\n }\n\n this._objFlags |= Destroyed;\n};\n\nif (CC_EDITOR) {\n /**\n * !#en\n * The customized serialization for this object. (Editor Only)\n * !#zh\n * 为此对象定制序列化。\n * @method _serialize\n * @param {Boolean} exporting\n * @return {object} the serialized json data object\n * @private\n */\n prototype._serialize = null;\n}\n\n/**\n * !#en\n * Init this object from the custom serialized data.\n * !#zh\n * 从自定义序列化数据初始化此对象。\n * @method _deserialize\n * @param {Object} data - the serialized json data\n * @param {_Deserializer} ctx\n * @private\n */\nprototype._deserialize = null;\n\n/**\n * @module cc\n */\n\n/**\n * !#en\n * Checks whether the object is non-nil and not yet destroyed.
\n * When an object's `destroy` is called, it is actually destroyed after the end of this frame.\n * So `isValid` will return false from the next frame, while `isValid` in the current frame will still be true.\n * If you want to determine whether the current frame has called `destroy`, use `cc.isValid(obj, true)`,\n * but this is often caused by a particular logical requirements, which is not normally required.\n *\n * !#zh\n * 检查该对象是否不为 null 并且尚未销毁。
\n * 当一个对象的 `destroy` 调用以后,会在这一帧结束后才真正销毁。因此从下一帧开始 `isValid` 就会返回 false,而当前帧内 `isValid` 仍然会是 true。如果希望判断当前帧是否调用过 `destroy`,请使用 `cc.isValid(obj, true)`,不过这往往是特殊的业务需求引起的,通常情况下不需要这样。\n *\n * @method isValid\n * @param {any} value\n * @param {Boolean} [strictMode=false] - If true, Object called destroy() in this frame will also treated as invalid.\n * @return {Boolean} whether is valid\n * @example\n * var node = new cc.Node();\n * cc.log(cc.isValid(node)); // true\n * node.destroy();\n * cc.log(cc.isValid(node)); // true, still valid in this frame\n * // after a frame...\n * cc.log(cc.isValid(node)); // false, destroyed in the end of last frame\n */\ncc.isValid = function (value, strictMode) {\n if (typeof value === 'object') {\n return !!value && !(value._objFlags & (strictMode ? (Destroyed | ToDestroy) : Destroyed));\n }\n else {\n return typeof value !== 'undefined';\n }\n};\n\nif (CC_EDITOR || CC_TEST) {\n js.value(CCObject, '_willDestroy', function (obj) {\n return !(obj._objFlags & Destroyed) && (obj._objFlags & ToDestroy) > 0;\n });\n js.value(CCObject, '_cancelDestroy', function (obj) {\n obj._objFlags &= ~ToDestroy;\n js.array.fastRemove(objectsToDestroy, obj);\n });\n}\n\ncc.Object = module.exports = CCObject;\n","/****************************************************************************\n Copyright (c) 2008-2010 Ricardo Quesada\n Copyright (c) 2011-2012 cocos2d-x.org\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos2d-x.org\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar js = require('../platform/js');\n\n/**\n * A SAX Parser\n * @class saxParser\n */\ncc.SAXParser = function () {\n if (!(CC_EDITOR && Editor.isMainProcess) && window.DOMParser) {\n this._isSupportDOMParser = true;\n this._parser = new DOMParser();\n } else {\n this._isSupportDOMParser = false;\n this._parser = null;\n }\n};\ncc.SAXParser.prototype = {\n constructor: cc.SAXParser,\n /**\n * @method parse\n * @param {String} xmlTxt\n * @return {Document}\n */\n parse : function(xmlTxt){\n return this._parseXML(xmlTxt);\n },\n\n _parseXML: function (textxml) {\n // get a reference to the requested corresponding xml file\n var xmlDoc;\n if (this._isSupportDOMParser) {\n xmlDoc = this._parser.parseFromString(textxml, \"text/xml\");\n } else {\n // Internet Explorer (untested!)\n xmlDoc = new ActiveXObject(\"Microsoft.XMLDOM\");\n xmlDoc.async = \"false\";\n xmlDoc.loadXML(textxml);\n }\n return xmlDoc;\n }\n};\n\n/**\n *\n * cc.plistParser is a singleton object for parsing plist files\n * @class plistParser\n * @extends SAXParser\n */\ncc.PlistParser = function () {\n cc.SAXParser.call(this);\n};\njs.extend(cc.PlistParser, cc.SAXParser);\njs.mixin(cc.PlistParser.prototype, {\n /**\n * parse a xml string as plist object.\n * @param {String} xmlTxt - plist xml contents\n * @return {*} plist object\n */\n parse : function (xmlTxt) {\n var xmlDoc = this._parseXML(xmlTxt);\n var plist = xmlDoc.documentElement;\n if (plist.tagName !== 'plist') {\n cc.warnID(5100);\n return {};\n }\n\n // Get first real node\n var node = null;\n for (var i = 0, len = plist.childNodes.length; i < len; i++) {\n node = plist.childNodes[i];\n if (node.nodeType === 1)\n break;\n }\n xmlDoc = null;\n return this._parseNode(node);\n },\n\n _parseNode: function (node) {\n var data = null, tagName = node.tagName;\n if(tagName === \"dict\"){\n data = this._parseDict(node);\n }else if(tagName === \"array\"){\n data = this._parseArray(node);\n }else if(tagName === \"string\"){\n if (node.childNodes.length === 1)\n data = node.firstChild.nodeValue;\n else {\n //handle Firefox's 4KB nodeValue limit\n data = \"\";\n for (var i = 0; i < node.childNodes.length; i++)\n data += node.childNodes[i].nodeValue;\n }\n }else if(tagName === \"false\"){\n data = false;\n }else if(tagName === \"true\"){\n data = true;\n }else if(tagName === \"real\"){\n data = parseFloat(node.firstChild.nodeValue);\n }else if(tagName === \"integer\"){\n data = parseInt(node.firstChild.nodeValue, 10);\n }\n return data;\n },\n\n _parseArray: function (node) {\n var data = [];\n for (var i = 0, len = node.childNodes.length; i < len; i++) {\n var child = node.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n data.push(this._parseNode(child));\n }\n return data;\n },\n\n _parseDict: function (node) {\n var data = {};\n var key = null;\n for (var i = 0, len = node.childNodes.length; i < len; i++) {\n var child = node.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n\n // Grab the key, next noe should be the value\n if (child.tagName === 'key')\n key = child.firstChild.nodeValue;\n else\n data[key] = this._parseNode(child); // Parse the value node\n }\n return data;\n }\n});\n\ncc.saxParser = new cc.SAXParser();\n/**\n * @type {PlistParser}\n * @name plistParser\n * A Plist Parser\n */\ncc.plistParser = new cc.PlistParser();\n\nmodule.exports = {\n saxParser: cc.saxParser,\n plistParser: cc.plistParser\n}\n","/****************************************************************************\n Copyright (c) 2008-2010 Ricardo Quesada\n Copyright (c) 2011-2012 cocos2d-x.org\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n \n http://www.cocos2d-x.org\n \n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n \n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n \n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * The fullscreen API provides an easy way for web content to be presented using the user's entire screen.\n * It's invalid on safari, QQbrowser and android browser\n * @class screen\n */\ncc.screen = /** @lends cc.screen# */{\n _supportsFullScreen: false,\n _onfullscreenchange: null,\n _onfullscreenerror: null,\n // the pre fullscreenchange function\n _preOnFullScreenChange: null,\n _preOnFullScreenError: null,\n _preOnTouch: null,\n _touchEvent: \"\",\n _fn: null,\n // Function mapping for cross browser support\n _fnMap: [\n [\n 'requestFullscreen',\n 'exitFullscreen',\n 'fullscreenchange',\n 'fullscreenEnabled',\n 'fullscreenElement',\n 'fullscreenerror',\n ],\n [\n 'requestFullScreen',\n 'exitFullScreen',\n 'fullScreenchange',\n 'fullScreenEnabled',\n 'fullScreenElement',\n 'fullscreenerror',\n ],\n [\n 'webkitRequestFullScreen',\n 'webkitCancelFullScreen',\n 'webkitfullscreenchange',\n 'webkitIsFullScreen',\n 'webkitCurrentFullScreenElement',\n 'webkitfullscreenerror',\n ],\n [\n 'mozRequestFullScreen',\n 'mozCancelFullScreen',\n 'mozfullscreenchange',\n 'mozFullScreen',\n 'mozFullScreenElement',\n 'mozfullscreenerror',\n ],\n [\n 'msRequestFullscreen',\n 'msExitFullscreen',\n 'MSFullscreenChange',\n 'msFullscreenEnabled',\n 'msFullscreenElement',\n 'msfullscreenerror',\n ]\n ],\n \n /**\n * initialize\n * @method init\n */\n init: function () {\n this._fn = {};\n var i, l, val, map = this._fnMap, valL;\n for (i = 0, l = map.length; i < l; i++) {\n val = map[i];\n if (val && (typeof document[val[1]] !== 'undefined')) {\n for (i = 0, valL = val.length; i < valL; i++) {\n this._fn[map[0][i]] = val[i];\n }\n break;\n }\n }\n\n this._supportsFullScreen = (this._fn.requestFullscreen !== undefined);\n\n // Bug fix only for v2.1, don't merge into v2.0\n // In v2.0, screen touchend events conflict with editBox touchend events if it's not stayOnTop.\n // While in v2.1, editBox always keep stayOnTop and it doesn't support touchend events.\n this._touchEvent = ('ontouchend' in window) ? 'touchend' : 'mousedown';\n },\n \n /**\n * return true if it's full now.\n * @method fullScreen\n * @returns {Boolean}\n */\n fullScreen: function () {\n if (!this._supportsFullScreen) return false;\n else if (!document[this._fn.fullscreenElement] && !document[this._fn.webkitFullscreenElement] && !document[this._fn.mozFullScreenElement]) {\n return false;\n }\n else {\n return true;\n }\n },\n \n /**\n * change the screen to full mode.\n * @method requestFullScreen\n * @param {Element} element\n * @param {Function} onFullScreenChange\n * @param {Function} onFullScreenError\n */\n requestFullScreen: function (element, onFullScreenChange, onFullScreenError) {\n if (element && element.tagName.toLowerCase() === \"video\") {\n if (cc.sys.os === cc.sys.OS_IOS && cc.sys.isBrowser && element.readyState > 0) {\n element.webkitEnterFullscreen && element.webkitEnterFullscreen();\n return;\n }\n else {\n element.setAttribute(\"x5-video-player-fullscreen\", \"true\");\n }\n }\n\n if (!this._supportsFullScreen) {\n return;\n }\n\n element = element || document.documentElement;\n\n if (onFullScreenChange) {\n let eventName = this._fn.fullscreenchange;\n if (this._onfullscreenchange) {\n document.removeEventListener(eventName, this._onfullscreenchange);\n }\n this._onfullscreenchange = onFullScreenChange;\n document.addEventListener(eventName, onFullScreenChange, false);\n }\n if (onFullScreenError) {\n let eventName = this._fn.fullscreenerror;\n if (this._onfullscreenerror) {\n document.removeEventListener(eventName, this._onfullscreenerror);\n }\n this._onfullscreenerror = onFullScreenError;\n document.addEventListener(eventName, onFullScreenError, { once: true });\n }\n\n let requestPromise = element[this._fn.requestFullscreen]();\n // the requestFullscreen API can only be initiated by user gesture.\n if (typeof document[this._fn.fullscreenerror] === 'undefined' \n && window.Promise && requestPromise instanceof Promise) {\n requestPromise.catch(function (err) {\n // do nothing ... \n });\n }\n },\n \n /**\n * exit the full mode.\n * @method exitFullScreen\n * @return {Boolean}\n */\n exitFullScreen: function (element) {\n if (element && element.tagName.toLowerCase() === \"video\") {\n if (cc.sys.os === cc.sys.OS_IOS && cc.sys.isBrowser) {\n element.webkitExitFullscreen && element.webkitExitFullscreen();\n return;\n }\n else {\n element.setAttribute(\"x5-video-player-fullscreen\", \"false\");\n }\n }\n return this._supportsFullScreen ? document[this._fn.exitFullscreen]() : true;\n },\n \n /**\n * Automatically request full screen with a touch/click event\n * @method autoFullScreen\n * @param {Element} element\n * @param {Function} onFullScreenChange\n */\n autoFullScreen: function (element, onFullScreenChange) {\n element = element || document.body;\n\n this._ensureFullScreen(element, onFullScreenChange);\n this.requestFullScreen(element, onFullScreenChange);\n },\n\n disableAutoFullScreen (element) {\n let touchTarget = cc.game.canvas || element;\n let touchEventName = this._touchEvent;\n if (this._preOnTouch) {\n touchTarget.removeEventListener(touchEventName, this._preOnTouch);\n this._preOnTouch = null;\n }\n },\n\n // Register touch event if request full screen failed\n _ensureFullScreen (element, onFullScreenChange) {\n let self = this;\n let touchTarget = cc.game.canvas || element;\n let fullScreenErrorEventName = this._fn.fullscreenerror;\n let touchEventName = this._touchEvent;\n \n function onFullScreenError () {\n self._preOnFullScreenError = null;\n\n // handle touch event listener\n function onTouch() {\n self._preOnTouch = null;\n self.requestFullScreen(element, onFullScreenChange);\n }\n if (self._preOnTouch) {\n touchTarget.removeEventListener(touchEventName, self._preOnTouch);\n }\n self._preOnTouch = onTouch;\n touchTarget.addEventListener(touchEventName, self._preOnTouch, { once: true });\n }\n\n // handle full screen error\n if (this._preOnFullScreenError) {\n element.removeEventListener(fullScreenErrorEventName, this._preOnFullScreenError);\n }\n this._preOnFullScreenError = onFullScreenError;\n element.addEventListener(fullScreenErrorEventName, onFullScreenError, { once: true });\n },\n};\ncc.screen.init();\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nlet settingPlatform;\n if (!CC_EDITOR) {\n settingPlatform = window._CCSettings ? _CCSettings.platform: undefined;\n }\nconst isVivoGame = (settingPlatform === 'qgame');\nconst isOppoGame = (settingPlatform === 'quickgame');\nconst isHuaweiGame = (settingPlatform === 'huawei');\nconst isJKWGame = (settingPlatform === 'jkw-game');\nconst isQttGame = (settingPlatform === 'qtt-game');\nconst isLinkSure = (settingPlatform === 'link-sure');\n\nconst _global = typeof window === 'undefined' ? global : window;\n \nfunction initSys () {\n /**\n * System variables\n * @class sys\n * @main\n * @static\n */\n cc.sys = {};\n var sys = cc.sys;\n\n /**\n * English language code\n * @property {String} LANGUAGE_ENGLISH\n * @readOnly\n */\n sys.LANGUAGE_ENGLISH = \"en\";\n\n /**\n * Chinese language code\n * @property {String} LANGUAGE_CHINESE\n * @readOnly\n */\n sys.LANGUAGE_CHINESE = \"zh\";\n\n /**\n * French language code\n * @property {String} LANGUAGE_FRENCH\n * @readOnly\n */\n sys.LANGUAGE_FRENCH = \"fr\";\n\n /**\n * Italian language code\n * @property {String} LANGUAGE_ITALIAN\n * @readOnly\n */\n sys.LANGUAGE_ITALIAN = \"it\";\n\n /**\n * German language code\n * @property {String} LANGUAGE_GERMAN\n * @readOnly\n */\n sys.LANGUAGE_GERMAN = \"de\";\n\n /**\n * Spanish language code\n * @property {String} LANGUAGE_SPANISH\n * @readOnly\n */\n sys.LANGUAGE_SPANISH = \"es\";\n\n /**\n * Spanish language code\n * @property {String} LANGUAGE_DUTCH\n * @readOnly\n */\n sys.LANGUAGE_DUTCH = \"du\";\n\n /**\n * Russian language code\n * @property {String} LANGUAGE_RUSSIAN\n * @readOnly\n */\n sys.LANGUAGE_RUSSIAN = \"ru\";\n\n /**\n * Korean language code\n * @property {String} LANGUAGE_KOREAN\n * @readOnly\n */\n sys.LANGUAGE_KOREAN = \"ko\";\n\n /**\n * Japanese language code\n * @property {String} LANGUAGE_JAPANESE\n * @readOnly\n */\n sys.LANGUAGE_JAPANESE = \"ja\";\n\n /**\n * Hungarian language code\n * @property {String} LANGUAGE_HUNGARIAN\n * @readonly\n */\n sys.LANGUAGE_HUNGARIAN = \"hu\";\n\n /**\n * Portuguese language code\n * @property {String} LANGUAGE_PORTUGUESE\n * @readOnly\n */\n sys.LANGUAGE_PORTUGUESE = \"pt\";\n\n /**\n * Arabic language code\n * @property {String} LANGUAGE_ARABIC\n * @readOnly\n */\n sys.LANGUAGE_ARABIC = \"ar\";\n\n /**\n * Norwegian language code\n * @property {String} LANGUAGE_NORWEGIAN\n * @readOnly\n */\n sys.LANGUAGE_NORWEGIAN = \"no\";\n\n /**\n * Polish language code\n * @property {String} LANGUAGE_POLISH\n * @readOnly\n */\n sys.LANGUAGE_POLISH = \"pl\";\n\n /**\n * Turkish language code\n * @property {String} LANGUAGE_TURKISH\n * @readOnly\n */\n sys.LANGUAGE_TURKISH = \"tr\";\n\n /**\n * Ukrainian language code\n * @property {String} LANGUAGE_UKRAINIAN\n * @readOnly\n */\n sys.LANGUAGE_UKRAINIAN = \"uk\";\n\n /**\n * Romanian language code\n * @property {String} LANGUAGE_ROMANIAN\n * @readOnly\n */\n sys.LANGUAGE_ROMANIAN = \"ro\";\n\n /**\n * Bulgarian language code\n * @property {String} LANGUAGE_BULGARIAN\n * @readOnly\n */\n sys.LANGUAGE_BULGARIAN = \"bg\";\n\n /**\n * Unknown language code\n * @property {String} LANGUAGE_UNKNOWN\n * @readOnly\n */\n sys.LANGUAGE_UNKNOWN = \"unknown\";\n\n /**\n * @property {String} OS_IOS\n * @readOnly\n */\n sys.OS_IOS = \"iOS\";\n /**\n * @property {String} OS_ANDROID\n * @readOnly\n */\n sys.OS_ANDROID = \"Android\";\n /**\n * @property {String} OS_WINDOWS\n * @readOnly\n */\n sys.OS_WINDOWS = \"Windows\";\n /**\n * @property {String} OS_MARMALADE\n * @readOnly\n */\n sys.OS_MARMALADE = \"Marmalade\";\n /**\n * @property {String} OS_LINUX\n * @readOnly\n */\n sys.OS_LINUX = \"Linux\";\n /**\n * @property {String} OS_BADA\n * @readOnly\n */\n sys.OS_BADA = \"Bada\";\n /**\n * @property {String} OS_BLACKBERRY\n * @readOnly\n */\n sys.OS_BLACKBERRY = \"Blackberry\";\n /**\n * @property {String} OS_OSX\n * @readOnly\n */\n sys.OS_OSX = \"OS X\";\n /**\n * @property {String} OS_WP8\n * @readOnly\n */\n sys.OS_WP8 = \"WP8\";\n /**\n * @property {String} OS_WINRT\n * @readOnly\n */\n sys.OS_WINRT = \"WINRT\";\n /**\n * @property {String} OS_UNKNOWN\n * @readOnly\n */\n sys.OS_UNKNOWN = \"Unknown\";\n\n /**\n * @property {Number} UNKNOWN\n * @readOnly\n * @default -1\n */\n sys.UNKNOWN = -1;\n /**\n * @property {Number} WIN32\n * @readOnly\n * @default 0\n */\n sys.WIN32 = 0;\n /**\n * @property {Number} LINUX\n * @readOnly\n * @default 1\n */\n sys.LINUX = 1;\n /**\n * @property {Number} MACOS\n * @readOnly\n * @default 2\n */\n sys.MACOS = 2;\n /**\n * @property {Number} ANDROID\n * @readOnly\n * @default 3\n */\n sys.ANDROID = 3;\n /**\n * @property {Number} IPHONE\n * @readOnly\n * @default 4\n */\n sys.IPHONE = 4;\n /**\n * @property {Number} IPAD\n * @readOnly\n * @default 5\n */\n sys.IPAD = 5;\n /**\n * @property {Number} BLACKBERRY\n * @readOnly\n * @default 6\n */\n sys.BLACKBERRY = 6;\n /**\n * @property {Number} NACL\n * @readOnly\n * @default 7\n */\n sys.NACL = 7;\n /**\n * @property {Number} EMSCRIPTEN\n * @readOnly\n * @default 8\n */\n sys.EMSCRIPTEN = 8;\n /**\n * @property {Number} TIZEN\n * @readOnly\n * @default 9\n */\n sys.TIZEN = 9;\n /**\n * @property {Number} WINRT\n * @readOnly\n * @default 10\n */\n sys.WINRT = 10;\n /**\n * @property {Number} WP8\n * @readOnly\n * @default 11\n */\n sys.WP8 = 11;\n /**\n * @property {Number} MOBILE_BROWSER\n * @readOnly\n * @default 100\n */\n sys.MOBILE_BROWSER = 100;\n /**\n * @property {Number} DESKTOP_BROWSER\n * @readOnly\n * @default 101\n */\n sys.DESKTOP_BROWSER = 101;\n\n /**\n * Indicates whether executes in editor's window process (Electron's renderer context)\n * @property {Number} EDITOR_PAGE\n * @readOnly\n * @default 102\n */\n sys.EDITOR_PAGE = 102;\n /**\n * Indicates whether executes in editor's main process (Electron's browser context)\n * @property {Number} EDITOR_CORE\n * @readOnly\n * @default 103\n */\n sys.EDITOR_CORE = 103;\n /**\n * @property {Number} WECHAT_GAME\n * @readOnly\n * @default 104\n */\n sys.WECHAT_GAME = 104;\n /**\n * @property {Number} QQ_PLAY\n * @readOnly\n * @default 105\n */\n sys.QQ_PLAY = 105;\n /**\n * @property {Number} FB_PLAYABLE_ADS\n * @readOnly\n * @default 106\n */\n sys.FB_PLAYABLE_ADS = 106;\n /**\n * @property {Number} BAIDU_GAME\n * @readOnly\n * @default 107\n */\n sys.BAIDU_GAME = 107;\n /**\n * @property {Number} VIVO_GAME\n * @readOnly\n * @default 108\n */\n sys.VIVO_GAME = 108;\n /**\n * @property {Number} OPPO_GAME\n * @readOnly\n * @default 109\n */\n sys.OPPO_GAME = 109;\n /**\n * @property {Number} HUAWEI_GAME\n * @readOnly\n * @default 110\n */\n sys.HUAWEI_GAME = 110;\n /**\n * @property {Number} XIAOMI_GAME\n * @readOnly\n * @default 111\n */\n sys.XIAOMI_GAME = 111;\n /**\n * @property {Number} JKW_GAME\n * @readOnly\n * @default 112\n */\n sys.JKW_GAME = 112;\n /**\n * @property {Number} ALIPAY_GAME\n * @readOnly\n * @default 113\n */\n sys.ALIPAY_GAME = 113;\n /**\n * @property {Number} WECHAT_GAME_SUB\n * @readOnly\n * @default 114\n */\n sys.WECHAT_GAME_SUB = 114;\n /**\n * @property {Number} BAIDU_GAME_SUB\n * @readOnly\n * @default 115\n */\n sys.BAIDU_GAME_SUB = 115;\n /**\n * @property {Number} QTT_GAME\n * @readOnly\n * @default 116\n */\n sys.QTT_GAME = 116;\n /**\n * @property {Number} BYTEDANCE_GAME\n * @readOnly\n * @default 117\n */\n sys.BYTEDANCE_GAME = 117;\n /**\n * @property {Number} BYTEDANCE_GAME_SUB\n * @readOnly\n * @default 118\n */\n sys.BYTEDANCE_GAME_SUB = 118;\n /**\n * @property {Number} LINKSURE\n * @readOnly\n * @default 119\n */\n sys.LINKSURE = 119;\n /**\n * BROWSER_TYPE_WECHAT\n * @property {String} BROWSER_TYPE_WECHAT\n * @readOnly\n * @default \"wechat\"\n */\n sys.BROWSER_TYPE_WECHAT = \"wechat\";\n /**\n *\n * @property {String} BROWSER_TYPE_ANDROID\n * @readOnly\n * @default \"androidbrowser\"\n */\n sys.BROWSER_TYPE_ANDROID = \"androidbrowser\";\n /**\n *\n * @property {String} BROWSER_TYPE_IE\n * @readOnly\n * @default \"ie\"\n */\n sys.BROWSER_TYPE_IE = \"ie\";\n /**\n *\n * @property {String} BROWSER_TYPE_EDGE\n * @readOnly\n * @default \"edge\"\n */\n sys.BROWSER_TYPE_EDGE = \"edge\";\n /**\n *\n * @property {String} BROWSER_TYPE_QQ\n * @readOnly\n * @default \"qqbrowser\"\n */\n sys.BROWSER_TYPE_QQ = \"qqbrowser\";\n /**\n *\n * @property {String} BROWSER_TYPE_MOBILE_QQ\n * @readOnly\n * @default \"mqqbrowser\"\n */\n sys.BROWSER_TYPE_MOBILE_QQ = \"mqqbrowser\";\n /**\n *\n * @property {String} BROWSER_TYPE_UC\n * @readOnly\n * @default \"ucbrowser\"\n */\n sys.BROWSER_TYPE_UC = \"ucbrowser\";\n /**\n * uc third party integration.\n * @property {String} BROWSER_TYPE_UCBS\n * @readOnly\n * @default \"ucbs\"\n */\n sys.BROWSER_TYPE_UCBS = \"ucbs\";\n /**\n *\n * @property {String} BROWSER_TYPE_360\n * @readOnly\n * @default \"360browser\"\n */\n sys.BROWSER_TYPE_360 = \"360browser\";\n /**\n *\n * @property {String} BROWSER_TYPE_BAIDU_APP\n * @readOnly\n * @default \"baiduboxapp\"\n */\n sys.BROWSER_TYPE_BAIDU_APP = \"baiduboxapp\";\n /**\n *\n * @property {String} BROWSER_TYPE_BAIDU\n * @readOnly\n * @default \"baidubrowser\"\n */\n sys.BROWSER_TYPE_BAIDU = \"baidubrowser\";\n /**\n *\n * @property {String} BROWSER_TYPE_MAXTHON\n * @readOnly\n * @default \"maxthon\"\n */\n sys.BROWSER_TYPE_MAXTHON = \"maxthon\";\n /**\n *\n * @property {String} BROWSER_TYPE_OPERA\n * @readOnly\n * @default \"opera\"\n */\n sys.BROWSER_TYPE_OPERA = \"opera\";\n /**\n *\n * @property {String} BROWSER_TYPE_OUPENG\n * @readOnly\n * @default \"oupeng\"\n */\n sys.BROWSER_TYPE_OUPENG = \"oupeng\";\n /**\n *\n * @property {String} BROWSER_TYPE_MIUI\n * @readOnly\n * @default \"miuibrowser\"\n */\n sys.BROWSER_TYPE_MIUI = \"miuibrowser\";\n /**\n *\n * @property {String} BROWSER_TYPE_FIREFOX\n * @readOnly\n * @default \"firefox\"\n */\n sys.BROWSER_TYPE_FIREFOX = \"firefox\";\n /**\n *\n * @property {String} BROWSER_TYPE_SAFARI\n * @readOnly\n * @default \"safari\"\n */\n sys.BROWSER_TYPE_SAFARI = \"safari\";\n /**\n *\n * @property {String} BROWSER_TYPE_CHROME\n * @readOnly\n * @default \"chrome\"\n */\n sys.BROWSER_TYPE_CHROME = \"chrome\";\n /**\n *\n * @property {String} BROWSER_TYPE_LIEBAO\n * @readOnly\n * @default \"liebao\"\n */\n sys.BROWSER_TYPE_LIEBAO = \"liebao\";\n /**\n *\n * @property {String} BROWSER_TYPE_QZONE\n * @readOnly\n * @default \"qzone\"\n */\n sys.BROWSER_TYPE_QZONE = \"qzone\";\n /**\n *\n * @property {String} BROWSER_TYPE_SOUGOU\n * @readOnly\n * @default \"sogou\"\n */\n sys.BROWSER_TYPE_SOUGOU = \"sogou\";\n /**\n *\n * @property {String} BROWSER_TYPE_HUAWEI\n * @readOnly\n * @default \"huawei\"\n */\n sys.BROWSER_TYPE_HUAWEI = \"huawei\";\n /**\n *\n * @property {String} BROWSER_TYPE_UNKNOWN\n * @readOnly\n * @default \"unknown\"\n */\n sys.BROWSER_TYPE_UNKNOWN = \"unknown\";\n\n /**\n * Is native ? This is set to be true in jsb auto.\n * @property {Boolean} isNative\n */\n sys.isNative = CC_JSB || CC_RUNTIME;\n\n /**\n * Is web browser ?\n * @property {Boolean} isBrowser\n */\n sys.isBrowser = typeof window === 'object' && typeof document === 'object' && !CC_JSB && !CC_RUNTIME;\n\n /**\n * Is webgl extension support?\n * @method glExtension\n * @param name\n * @return {Boolean}\n */\n sys.glExtension = function (name) {\n return !!cc.renderer.device.ext(name);\n }\n\n /**\n * Get max joint matrix size for skinned mesh renderer.\n * @method getMaxJointMatrixSize\n */\n sys.getMaxJointMatrixSize = function () {\n if (!sys._maxJointMatrixSize) {\n const JOINT_MATRICES_SIZE = 50;\n const LEFT_UNIFORM_SIZE = 10;\n\n let gl = cc.game._renderContext;\n let maxUniforms = Math.floor(gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS) / 4) - LEFT_UNIFORM_SIZE;\n if (maxUniforms < JOINT_MATRICES_SIZE) {\n sys._maxJointMatrixSize = 0;\n }\n else {\n sys._maxJointMatrixSize = JOINT_MATRICES_SIZE;\n }\n }\n return sys._maxJointMatrixSize;\n };\n\n /**\n * !#en\n * Returns the safe area of the screen (in design resolution). If the screen is not notched, the visibleRect will be returned by default.\n * Currently supports Android, iOS and WeChat Mini Game platform.\n * !#zh\n * 返回手机屏幕安全区域(设计分辨率为单位),如果不是异形屏将默认返回 visibleRect。目前支持安卓、iOS 原生平台和微信小游戏平台。\n * @method getSafeAreaRect\n * @return {Rect}\n */\n sys.getSafeAreaRect = function () {\n let visibleSize = cc.view.getVisibleSize();\n return cc.rect(0, 0, visibleSize.width, visibleSize.height);\n };\n\n if (_global.__globalAdapter && _global.__globalAdapter.adaptSys) {\n // init sys info in adapter\n _global.__globalAdapter.adaptSys(sys);\n }\n else if (CC_EDITOR && Editor.isMainProcess) {\n sys.isMobile = false;\n sys.platform = sys.EDITOR_CORE;\n sys.language = sys.LANGUAGE_UNKNOWN;\n sys.languageCode = undefined;\n sys.os = ({\n darwin: sys.OS_OSX,\n win32: sys.OS_WINDOWS,\n linux: sys.OS_LINUX\n })[process.platform] || sys.OS_UNKNOWN;\n sys.browserType = null;\n sys.browserVersion = null;\n sys.windowPixelResolution = {\n width: 0,\n height: 0\n };\n sys.capabilities = {\n 'imageBitmap': false\n };\n sys.__audioSupport = {};\n }\n else if (CC_JSB || CC_RUNTIME) {\n let platform;\n if (isVivoGame) {\n platform = sys.VIVO_GAME;\n } else if (isOppoGame) {\n platform = sys.OPPO_GAME;\n } else if (isHuaweiGame) {\n platform = sys.HUAWEI_GAME;\n } else if (isJKWGame) {\n platform = sys.JKW_GAME;\n } else if (isQttGame) {\n platform = sys.QTT_GAME;\n } else if (isLinkSure) {\n platform = sys.LINKSURE;\n }\n else {\n platform = __getPlatform();\n }\n sys.platform = platform;\n sys.isMobile = (platform === sys.ANDROID ||\n platform === sys.IPAD ||\n platform === sys.IPHONE ||\n platform === sys.WP8 ||\n platform === sys.TIZEN ||\n platform === sys.BLACKBERRY ||\n platform === sys.XIAOMI_GAME ||\n isVivoGame ||\n isOppoGame ||\n isHuaweiGame ||\n isJKWGame ||\n isQttGame);\n\n sys.os = __getOS();\n sys.language = __getCurrentLanguage();\n var languageCode; \n if (CC_JSB) {\n languageCode = __getCurrentLanguageCode();\n }\n sys.languageCode = languageCode ? languageCode.toLowerCase() : undefined;\n sys.osVersion = __getOSVersion();\n sys.osMainVersion = parseInt(sys.osVersion);\n sys.browserType = null;\n sys.browserVersion = null;\n\n var w = window.innerWidth;\n var h = window.innerHeight;\n var ratio = window.devicePixelRatio || 1;\n sys.windowPixelResolution = {\n width: ratio * w,\n height: ratio * h\n };\n\n sys.localStorage = window.localStorage;\n\n var capabilities;\n capabilities = sys.capabilities = {\n \"canvas\": false,\n \"opengl\": true,\n \"webp\": true,\n };\n\n if (sys.isMobile) {\n capabilities[\"accelerometer\"] = true;\n capabilities[\"touches\"] = true;\n } else {\n // desktop\n capabilities[\"keyboard\"] = true;\n capabilities[\"mouse\"] = true;\n capabilities[\"touches\"] = false;\n }\n\n capabilities['imageBitmap'] = false;\n\n sys.__audioSupport = {\n ONLY_ONE: false,\n WEB_AUDIO: false,\n DELAY_CREATE_CTX: false,\n format: ['.mp3']\n };\n }\n else {\n // browser or runtime\n var win = window, nav = win.navigator, doc = document, docEle = doc.documentElement;\n var ua = nav.userAgent.toLowerCase();\n\n if (CC_EDITOR) {\n sys.isMobile = false;\n sys.platform = sys.EDITOR_PAGE;\n }\n else {\n /**\n * Indicate whether system is mobile system\n * @property {Boolean} isMobile\n */\n sys.isMobile = /mobile|android|iphone|ipad/.test(ua);\n\n /**\n * Indicate the running platform\n * @property {Number} platform\n */\n if (typeof FbPlayableAd !== \"undefined\") {\n sys.platform = sys.FB_PLAYABLE_ADS;\n }\n else {\n sys.platform = sys.isMobile ? sys.MOBILE_BROWSER : sys.DESKTOP_BROWSER;\n }\n }\n\n var currLanguage = nav.language;\n currLanguage = currLanguage ? currLanguage : nav.browserLanguage;\n\n /**\n * Get current language iso 639-1 code.\n * Examples of valid language codes include \"zh-tw\", \"en\", \"en-us\", \"fr\", \"fr-fr\", \"es-es\", etc.\n * The actual value totally depends on results provided by destination platform.\n * @property {String} languageCode\n */\n sys.languageCode = currLanguage.toLowerCase();\n\n currLanguage = currLanguage ? currLanguage.split(\"-\")[0] : sys.LANGUAGE_ENGLISH;\n\n /**\n * Indicate the current language of the running system\n * @property {String} language\n */\n sys.language = currLanguage;\n\n // Get the os of system\n var isAndroid = false, iOS = false, osVersion = '', osMainVersion = 0;\n var uaResult = /android\\s*(\\d+(?:\\.\\d+)*)/i.exec(ua) || /android\\s*(\\d+(?:\\.\\d+)*)/i.exec(nav.platform);\n if (uaResult) {\n isAndroid = true;\n osVersion = uaResult[1] || '';\n osMainVersion = parseInt(osVersion) || 0;\n }\n uaResult = /(iPad|iPhone|iPod).*OS ((\\d+_?){2,3})/i.exec(ua);\n if (uaResult) {\n iOS = true;\n osVersion = uaResult[2] || '';\n osMainVersion = parseInt(osVersion) || 0;\n }\n // refer to https://github.com/cocos-creator/engine/pull/5542 , thanks for contribition from @krapnikkk\n // ipad OS 13 safari identifies itself as \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/605.1.15 (KHTML, like Gecko)\" \n // so use maxTouchPoints to check whether it's desktop safari or not. \n // reference: https://stackoverflow.com/questions/58019463/how-to-detect-device-name-in-safari-on-ios-13-while-it-doesnt-show-the-correct\n // FIXME: should remove it when touch-enabled macs are available\n else if (/(iPhone|iPad|iPod)/.exec(nav.platform) || (nav.platform === 'MacIntel' && nav.maxTouchPoints && nav.maxTouchPoints > 1)) { \n iOS = true;\n osVersion = '';\n osMainVersion = 0;\n }\n\n var osName = sys.OS_UNKNOWN;\n if (nav.appVersion.indexOf(\"Win\") !== -1) osName = sys.OS_WINDOWS;\n else if (iOS) osName = sys.OS_IOS;\n else if (nav.appVersion.indexOf(\"Mac\") !== -1) osName = sys.OS_OSX;\n else if (nav.appVersion.indexOf(\"X11\") !== -1 && nav.appVersion.indexOf(\"Linux\") === -1) osName = sys.OS_UNIX;\n else if (isAndroid) osName = sys.OS_ANDROID;\n else if (nav.appVersion.indexOf(\"Linux\") !== -1 || ua.indexOf(\"ubuntu\") !== -1) osName = sys.OS_LINUX;\n\n /**\n * Indicate the running os name\n * @property {String} os\n */\n sys.os = osName;\n /**\n * Indicate the running os version\n * @property {String} osVersion\n */\n sys.osVersion = osVersion;\n /**\n * Indicate the running os main version\n * @property {Number} osMainVersion\n */\n sys.osMainVersion = osMainVersion;\n\n /**\n * Indicate the running browser type\n * @property {String | null} browserType\n */\n sys.browserType = sys.BROWSER_TYPE_UNKNOWN;\n /* Determine the browser type */\n (function(){\n var typeReg1 = /mqqbrowser|micromessenger|qqbrowser|sogou|qzone|liebao|maxthon|ucbs|360 aphone|360browser|baiduboxapp|baidubrowser|maxthon|mxbrowser|miuibrowser/i;\n var typeReg2 = /qq|ucbrowser|ubrowser|edge|HuaweiBrowser/i;\n var typeReg3 = /chrome|safari|firefox|trident|opera|opr\\/|oupeng/i;\n var browserTypes = typeReg1.exec(ua) || typeReg2.exec(ua) || typeReg3.exec(ua);\n\n var browserType = browserTypes ? browserTypes[0].toLowerCase() : sys.BROWSER_TYPE_UNKNOWN;\n\n if (browserType === \"safari\" && isAndroid)\n browserType = sys.BROWSER_TYPE_ANDROID;\n else if (browserType === \"qq\" && ua.match(/android.*applewebkit/i))\n browserType = sys.BROWSER_TYPE_ANDROID;\n let typeMap = {\n 'micromessenger': sys.BROWSER_TYPE_WECHAT,\n 'trident': sys.BROWSER_TYPE_IE,\n 'edge': sys.BROWSER_TYPE_EDGE,\n '360 aphone': sys.BROWSER_TYPE_360,\n 'mxbrowser': sys.BROWSER_TYPE_MAXTHON,\n 'opr/': sys.BROWSER_TYPE_OPERA,\n 'ubrowser': sys.BROWSER_TYPE_UC,\n 'huaweibrowser': sys.BROWSER_TYPE_HUAWEI,\n };\n \n if(browserType === \"qqbrowser\" || browserType === \"mqqbrowser\"){\n if(ua.match(/wechat|micromessenger/i)){\n browserType = sys.BROWSER_TYPE_WECHAT;\n }\n }\n\n sys.browserType = typeMap[browserType] || browserType;\n })();\n\n /**\n * Indicate the running browser version\n * @property {String | null} browserVersion\n */\n sys.browserVersion = \"\";\n /* Determine the browser version number */\n (function(){\n var versionReg1 = /(mqqbrowser|micromessenger|qqbrowser|sogou|qzone|liebao|maxthon|uc|ucbs|360 aphone|360|baiduboxapp|baidu|maxthon|mxbrowser|miui(?:.hybrid)?)(mobile)?(browser)?\\/?([\\d.]+)/i;\n var versionReg2 = /(qq|chrome|safari|firefox|trident|opera|opr\\/|oupeng)(mobile)?(browser)?\\/?([\\d.]+)/i;\n var tmp = ua.match(versionReg1);\n if(!tmp) tmp = ua.match(versionReg2);\n sys.browserVersion = tmp ? tmp[4] : \"\";\n })();\n\n var w = window.innerWidth || document.documentElement.clientWidth;\n var h = window.innerHeight || document.documentElement.clientHeight;\n var ratio = window.devicePixelRatio || 1;\n\n /**\n * Indicate the real pixel resolution of the whole game window\n * @property {Size} windowPixelResolution\n */\n sys.windowPixelResolution = {\n width: ratio * w,\n height: ratio * h\n };\n\n sys._checkWebGLRenderMode = function () {\n if (cc.game.renderType !== cc.game.RENDER_TYPE_WEBGL)\n throw new Error(\"This feature supports WebGL render mode only.\");\n };\n\n var _tmpCanvas1 = document.createElement(\"canvas\");\n\n var create3DContext = function (canvas, opt_attribs, opt_contextType) {\n if (opt_contextType) {\n try {\n return canvas.getContext(opt_contextType, opt_attribs);\n } catch (e) {\n return null;\n }\n }\n else {\n return create3DContext(canvas, opt_attribs, \"webgl\") ||\n create3DContext(canvas, opt_attribs, \"experimental-webgl\") ||\n create3DContext(canvas, opt_attribs, \"webkit-3d\") ||\n create3DContext(canvas, opt_attribs, \"moz-webgl\") ||\n null;\n }\n };\n\n /**\n * cc.sys.localStorage is a local storage component.\n * @property {Object} localStorage\n */\n try {\n var localStorage = sys.localStorage = win.localStorage;\n localStorage.setItem(\"storage\", \"\");\n localStorage.removeItem(\"storage\");\n localStorage = null;\n } catch (e) {\n var warn = function () {\n cc.warnID(5200);\n };\n sys.localStorage = {\n getItem : warn,\n setItem : warn,\n removeItem : warn,\n clear : warn\n };\n }\n\n var _supportWebp = _tmpCanvas1.toDataURL('image/webp').startsWith('data:image/webp');\n var _supportCanvas = !!_tmpCanvas1.getContext(\"2d\");\n var _supportWebGL = false;\n if (CC_TEST) {\n _supportWebGL = false;\n }\n else if (win.WebGLRenderingContext) {\n _supportWebGL = true;\n }\n\n /**\n * The capabilities of the current platform\n * @property {Object} capabilities\n */\n var capabilities = sys.capabilities = {\n \"canvas\": _supportCanvas,\n \"opengl\": _supportWebGL,\n \"webp\": _supportWebp,\n 'imageBitmap': false,\n };\n\n if (typeof createImageBitmap !== 'undefined' && typeof Blob !== 'undefined') {\n _tmpCanvas1.width = _tmpCanvas1.height = 2;\n createImageBitmap(_tmpCanvas1, {}).then(imageBitmap => {\n capabilities.imageBitmap = true;\n imageBitmap.close && imageBitmap.close();\n }).catch(err => {});\n }\n if (docEle['ontouchstart'] !== undefined || doc['ontouchstart'] !== undefined || nav.msPointerEnabled)\n capabilities[\"touches\"] = true;\n if (docEle['onmouseup'] !== undefined)\n capabilities[\"mouse\"] = true;\n if (docEle['onkeyup'] !== undefined)\n capabilities[\"keyboard\"] = true;\n if (win.DeviceMotionEvent || win.DeviceOrientationEvent)\n capabilities[\"accelerometer\"] = true;\n\n var __audioSupport;\n\n /**\n * Audio support in the browser\n *\n * MULTI_CHANNEL : Multiple audio while playing - If it doesn't, you can only play background music\n * WEB_AUDIO : Support for WebAudio - Support W3C WebAudio standards, all of the audio can be played\n * AUTOPLAY : Supports auto-play audio - if Don‘t support it, On a touch detecting background music canvas, and then replay\n * REPLAY_AFTER_TOUCH : The first music will fail, must be replay after touchstart\n * USE_EMPTIED_EVENT : Whether to use the emptied event to replace load callback\n * DELAY_CREATE_CTX : delay created the context object - only webAudio\n * NEED_MANUAL_LOOP : loop attribute failure, need to perform loop manually\n *\n * May be modifications for a few browser version\n */\n (function(){\n\n var DEBUG = false;\n\n var version = sys.browserVersion;\n\n // check if browser supports Web Audio\n // check Web Audio's context\n var supportWebAudio = !!(window.AudioContext || window.webkitAudioContext || window.mozAudioContext);\n\n __audioSupport = { ONLY_ONE: false, WEB_AUDIO: supportWebAudio, DELAY_CREATE_CTX: false };\n\n if (sys.os === sys.OS_IOS) {\n // IOS no event that used to parse completed callback\n // this time is not complete, can not play\n //\n __audioSupport.USE_LOADER_EVENT = 'loadedmetadata';\n }\n\n if (sys.browserType === sys.BROWSER_TYPE_FIREFOX) {\n __audioSupport.DELAY_CREATE_CTX = true;\n __audioSupport.USE_LOADER_EVENT = 'canplay';\n }\n\n if (sys.os === sys.OS_ANDROID) {\n if (sys.browserType === sys.BROWSER_TYPE_UC) {\n __audioSupport.ONE_SOURCE = true;\n }\n }\n\n if(DEBUG){\n setTimeout(function(){\n cc.log('browse type: ' + sys.browserType);\n cc.log('browse version: ' + version);\n cc.log('MULTI_CHANNEL: ' + __audioSupport.MULTI_CHANNEL);\n cc.log('WEB_AUDIO: ' + __audioSupport.WEB_AUDIO);\n cc.log('AUTOPLAY: ' + __audioSupport.AUTOPLAY);\n }, 0);\n }\n })();\n\n try {\n if (__audioSupport.WEB_AUDIO) {\n __audioSupport.context = new (window.AudioContext || window.webkitAudioContext || window.mozAudioContext)();\n if(__audioSupport.DELAY_CREATE_CTX) {\n setTimeout(function(){ __audioSupport.context = new (window.AudioContext || window.webkitAudioContext || window.mozAudioContext)(); }, 0);\n }\n }\n } catch(error) {\n __audioSupport.WEB_AUDIO = false;\n cc.logID(5201);\n }\n\n var formatSupport = [];\n\n (function(){\n var audio = document.createElement('audio');\n if(audio.canPlayType) {\n var ogg = audio.canPlayType('audio/ogg; codecs=\"vorbis\"');\n if (ogg) formatSupport.push('.ogg');\n var mp3 = audio.canPlayType('audio/mpeg');\n if (mp3) formatSupport.push('.mp3');\n var wav = audio.canPlayType('audio/wav; codecs=\"1\"');\n if (wav) formatSupport.push('.wav');\n var mp4 = audio.canPlayType('audio/mp4');\n if (mp4) formatSupport.push('.mp4');\n var m4a = audio.canPlayType('audio/x-m4a');\n if (m4a) formatSupport.push('.m4a');\n }\n })();\n __audioSupport.format = formatSupport;\n\n sys.__audioSupport = __audioSupport;\n }\n\n /**\n * !#en\n * Network type enumeration\n * !#zh\n * 网络类型枚举\n *\n * @enum sys.NetworkType\n */\n sys.NetworkType = {\n /**\n * !#en\n * Network is unreachable.\n * !#zh\n * 网络不通\n *\n * @property {Number} NONE\n */\n NONE: 0,\n /**\n * !#en\n * Network is reachable via WiFi or cable.\n * !#zh\n * 通过无线或者有线本地网络连接因特网\n *\n * @property {Number} LAN\n */\n LAN: 1,\n /**\n * !#en\n * Network is reachable via Wireless Wide Area Network\n * !#zh\n * 通过蜂窝移动网络连接因特网\n *\n * @property {Number} WWAN\n */\n WWAN: 2\n };\n\n /**\n * @class sys\n */\n\n /**\n * !#en\n * Get the network type of current device, return cc.sys.NetworkType.LAN if failure.\n * !#zh\n * 获取当前设备的网络类型, 如果网络类型无法获取,默认将返回 cc.sys.NetworkType.LAN\n *\n * @method getNetworkType\n * @return {sys.NetworkType}\n */\n sys.getNetworkType = function() {\n // TODO: need to implement this for mobile phones.\n return sys.NetworkType.LAN;\n };\n\n /**\n * !#en\n * Get the battery level of current device, return 1.0 if failure.\n * !#zh\n * 获取当前设备的电池电量,如果电量无法获取,默认将返回 1\n *\n * @method getBatteryLevel\n * @return {Number} - 0.0 ~ 1.0\n */\n sys.getBatteryLevel = function() {\n // TODO: need to implement this for mobile phones.\n return 1.0;\n };\n\n /**\n * Forces the garbage collection, only available in JSB\n * @method garbageCollect\n */\n sys.garbageCollect = function () {\n // N/A in web\n };\n\n /**\n * Restart the JS VM, only available in JSB\n * @method restartVM\n */\n sys.restartVM = function () {\n // N/A in web\n };\n\n /**\n * Check whether an object is valid,\n * In web engine, it will return true if the object exist\n * In native engine, it will return true if the JS object and the correspond native object are both valid\n * @method isObjectValid\n * @param {Object} obj\n * @return {Boolean} Validity of the object\n */\n sys.isObjectValid = function (obj) {\n if (obj) {\n return true;\n }\n return false;\n };\n\n /**\n * Dump system informations\n * @method dump\n */\n sys.dump = function () {\n var self = this;\n var str = \"\";\n str += \"isMobile : \" + self.isMobile + \"\\r\\n\";\n str += \"language : \" + self.language + \"\\r\\n\";\n str += \"browserType : \" + self.browserType + \"\\r\\n\";\n str += \"browserVersion : \" + self.browserVersion + \"\\r\\n\";\n str += \"capabilities : \" + JSON.stringify(self.capabilities) + \"\\r\\n\";\n str += \"os : \" + self.os + \"\\r\\n\";\n str += \"osVersion : \" + self.osVersion + \"\\r\\n\";\n str += \"platform : \" + self.platform + \"\\r\\n\";\n str += \"Using \" + (cc.game.renderType === cc.game.RENDER_TYPE_WEBGL ? \"WEBGL\" : \"CANVAS\") + \" renderer.\" + \"\\r\\n\";\n cc.log(str);\n };\n\n /**\n * Open a url in browser\n * @method openURL\n * @param {String} url\n */\n sys.openURL = function (url) {\n if (CC_JSB || CC_RUNTIME) {\n jsb.openURL(url);\n }\n else {\n window.open(url);\n }\n };\n\n /**\n * Get the number of milliseconds elapsed since 1 January 1970 00:00:00 UTC.\n * @method now\n * @return {Number}\n */\n sys.now = function () {\n if (Date.now) {\n return Date.now();\n }\n else {\n return +(new Date);\n }\n };\n\n return sys;\n}\n\nvar sys = cc && cc.sys ? cc.sys : initSys();\n\nmodule.exports = sys;\n","/****************************************************************************\n Copyright (c) 2008-2010 Ricardo Quesada\n Copyright (c) 2011-2012 cocos2d-x.org\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos2d-x.org\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst EventTarget = require('../event/event-target');\nconst js = require('../platform/js');\nconst renderer = require('../renderer');\nrequire('../platform/CCClass');\n\nvar __BrowserGetter = {\n init: function(){\n this.html = document.getElementsByTagName(\"html\")[0];\n },\n availWidth: function(frame){\n if (!frame || frame === this.html)\n return window.innerWidth;\n else\n return frame.clientWidth;\n },\n availHeight: function(frame){\n if (!frame || frame === this.html)\n return window.innerHeight;\n else\n return frame.clientHeight;\n },\n meta: {\n \"width\": \"device-width\"\n },\n adaptationType: cc.sys.browserType\n};\n\nif (cc.sys.os === cc.sys.OS_IOS) // All browsers are WebView\n __BrowserGetter.adaptationType = cc.sys.BROWSER_TYPE_SAFARI;\n\nswitch (__BrowserGetter.adaptationType) {\n case cc.sys.BROWSER_TYPE_SAFARI:\n case cc.sys.BROWSER_TYPE_SOUGOU:\n case cc.sys.BROWSER_TYPE_UC:\n __BrowserGetter.meta[\"minimal-ui\"] = \"true\";\n __BrowserGetter.availWidth = function(frame){\n return frame.clientWidth;\n };\n __BrowserGetter.availHeight = function(frame){\n return frame.clientHeight;\n };\n break;\n}\n\nvar _scissorRect = null;\n\n/**\n * cc.view is the singleton object which represents the game window.
\n * It's main task include:
\n * - Apply the design resolution policy
\n * - Provide interaction with the window, like resize event on web, retina display support, etc...
\n * - Manage the game view port which can be different with the window
\n * - Manage the content scale and translation
\n *
\n * Since the cc.view is a singleton, you don't need to call any constructor or create functions,
\n * the standard way to use it is by calling:
\n * - cc.view.methodName();
\n *\n * @class View\n * @extends EventTarget\n */\nvar View = function () {\n EventTarget.call(this);\n\n var _t = this, _strategyer = cc.ContainerStrategy, _strategy = cc.ContentStrategy;\n\n __BrowserGetter.init(this);\n\n // Size of parent node that contains cc.game.container and cc.game.canvas\n _t._frameSize = cc.size(0, 0);\n\n // resolution size, it is the size appropriate for the app resources.\n _t._designResolutionSize = cc.size(0, 0);\n _t._originalDesignResolutionSize = cc.size(0, 0);\n _t._scaleX = 1;\n _t._scaleY = 1;\n // Viewport is the container's rect related to content's coordinates in pixel\n _t._viewportRect = cc.rect(0, 0, 0, 0);\n // The visible rect in content's coordinate in point\n _t._visibleRect = cc.rect(0, 0, 0, 0);\n // Auto full screen disabled by default\n _t._autoFullScreen = false;\n // The device's pixel ratio (for retina displays)\n _t._devicePixelRatio = 1;\n if(CC_JSB) {\n _t._maxPixelRatio = 4;\n } else {\n _t._maxPixelRatio = 2;\n }\n // Retina disabled by default\n _t._retinaEnabled = false;\n // Custom callback for resize event\n _t._resizeCallback = null;\n _t._resizing = false;\n _t._resizeWithBrowserSize = false;\n _t._orientationChanging = true;\n _t._isRotated = false;\n _t._orientation = cc.macro.ORIENTATION_AUTO;\n _t._isAdjustViewport = true;\n _t._antiAliasEnabled = false;\n\n // Setup system default resolution policies\n _t._resolutionPolicy = null;\n _t._rpExactFit = new cc.ResolutionPolicy(_strategyer.EQUAL_TO_FRAME, _strategy.EXACT_FIT);\n _t._rpShowAll = new cc.ResolutionPolicy(_strategyer.EQUAL_TO_FRAME, _strategy.SHOW_ALL);\n _t._rpNoBorder = new cc.ResolutionPolicy(_strategyer.EQUAL_TO_FRAME, _strategy.NO_BORDER);\n _t._rpFixedHeight = new cc.ResolutionPolicy(_strategyer.EQUAL_TO_FRAME, _strategy.FIXED_HEIGHT);\n _t._rpFixedWidth = new cc.ResolutionPolicy(_strategyer.EQUAL_TO_FRAME, _strategy.FIXED_WIDTH);\n\n cc.game.once(cc.game.EVENT_ENGINE_INITED, this.init, this);\n};\n\ncc.js.extend(View, EventTarget);\n\ncc.js.mixin(View.prototype, {\n init () {\n this._initFrameSize();\n\n var w = cc.game.canvas.width, h = cc.game.canvas.height;\n this._designResolutionSize.width = w;\n this._designResolutionSize.height = h;\n this._originalDesignResolutionSize.width = w;\n this._originalDesignResolutionSize.height = h;\n this._viewportRect.width = w;\n this._viewportRect.height = h;\n this._visibleRect.width = w;\n this._visibleRect.height = h;\n\n cc.winSize.width = this._visibleRect.width;\n cc.winSize.height = this._visibleRect.height;\n cc.visibleRect && cc.visibleRect.init(this._visibleRect);\n },\n\n // Resize helper functions\n _resizeEvent: function (forceOrEvent) {\n var view;\n if (this.setDesignResolutionSize) {\n view = this;\n } else {\n view = cc.view;\n }\n // HACK: some browsers can't update window size immediately\n // need to handle resize event callback on the next tick\n let sys = cc.sys;\n if (sys.browserType === sys.BROWSER_TYPE_UC && sys.os === sys.OS_IOS) {\n setTimeout(function () {\n view._resizeEvent(forceOrEvent);\n }, 0)\n return;\n }\n\n // Check frame size changed or not\n var prevFrameW = view._frameSize.width, prevFrameH = view._frameSize.height, prevRotated = view._isRotated;\n if (cc.sys.isMobile) {\n var containerStyle = cc.game.container.style,\n margin = containerStyle.margin;\n containerStyle.margin = '0';\n containerStyle.display = 'none';\n view._initFrameSize();\n containerStyle.margin = margin;\n containerStyle.display = 'block';\n }\n else {\n view._initFrameSize();\n }\n if (forceOrEvent !== true && view._isRotated === prevRotated && view._frameSize.width === prevFrameW && view._frameSize.height === prevFrameH)\n return;\n\n // Frame size changed, do resize works\n var width = view._originalDesignResolutionSize.width;\n var height = view._originalDesignResolutionSize.height;\n view._resizing = true;\n if (width > 0)\n view.setDesignResolutionSize(width, height, view._resolutionPolicy);\n view._resizing = false;\n\n view.emit('canvas-resize');\n if (view._resizeCallback) {\n view._resizeCallback.call();\n }\n },\n\n _orientationChange: function () {\n cc.view._orientationChanging = true;\n cc.view._resizeEvent();\n // HACK: show nav bar on iOS safari\n // safari will enter fullscreen when rotate to landscape\n // need to exit fullscreen when rotate back to portrait, scrollTo(0, 1) works.\n if (cc.sys.browserType === cc.sys.BROWSER_TYPE_SAFARI && cc.sys.isMobile) {\n setTimeout(() => {\n if (window.innerHeight > window.innerWidth) {\n window.scrollTo(0, 1);\n }\n }, 500);\n }\n },\n\n _resize: function() {\n //force resize when size is changed at native\n cc.view._resizeEvent(CC_JSB);\n },\n\n /**\n * !#en\n * Sets view's target-densitydpi for android mobile browser. it can be set to:
\n * 1. cc.macro.DENSITYDPI_DEVICE, value is \"device-dpi\"
\n * 2. cc.macro.DENSITYDPI_HIGH, value is \"high-dpi\" (default value)
\n * 3. cc.macro.DENSITYDPI_MEDIUM, value is \"medium-dpi\" (browser's default value)
\n * 4. cc.macro.DENSITYDPI_LOW, value is \"low-dpi\"
\n * 5. Custom value, e.g: \"480\"
\n * !#zh 设置目标内容的每英寸像素点密度。\n *\n * @method setTargetDensityDPI\n * @param {String} densityDPI\n * @deprecated since v2.0\n */\n\n /**\n * !#en\n * Returns the current target-densitydpi value of cc.view.\n * !#zh 获取目标内容的每英寸像素点密度。\n * @method getTargetDensityDPI\n * @returns {String}\n * @deprecated since v2.0\n */\n\n /**\n * !#en\n * Sets whether resize canvas automatically when browser's size changed.
\n * Useful only on web.\n * !#zh 设置当发现浏览器的尺寸改变时,是否自动调整 canvas 尺寸大小。\n * 仅在 Web 模式下有效。\n * @method resizeWithBrowserSize\n * @param {Boolean} enabled - Whether enable automatic resize with browser's resize event\n */\n resizeWithBrowserSize: function (enabled) {\n if (enabled) {\n //enable\n if (!this._resizeWithBrowserSize) {\n this._resizeWithBrowserSize = true;\n window.addEventListener('resize', this._resize);\n window.addEventListener('orientationchange', this._orientationChange);\n }\n } else {\n //disable\n if (this._resizeWithBrowserSize) {\n this._resizeWithBrowserSize = false;\n window.removeEventListener('resize', this._resize);\n window.removeEventListener('orientationchange', this._orientationChange);\n }\n }\n },\n\n /**\n * !#en\n * Sets the callback function for cc.view's resize action,
\n * this callback will be invoked before applying resolution policy,
\n * so you can do any additional modifications within the callback.
\n * Useful only on web.\n * !#zh 设置 cc.view 调整视窗尺寸行为的回调函数,\n * 这个回调函数会在应用适配模式之前被调用,\n * 因此你可以在这个回调函数内添加任意附加改变,\n * 仅在 Web 平台下有效。\n * @method setResizeCallback\n * @param {Function|Null} callback - The callback function\n */\n setResizeCallback: function (callback) {\n if (CC_EDITOR) return;\n if (typeof callback === 'function' || callback == null) {\n this._resizeCallback = callback;\n }\n },\n\n /**\n * !#en\n * Sets the orientation of the game, it can be landscape, portrait or auto.\n * When set it to landscape or portrait, and screen w/h ratio doesn't fit, \n * cc.view will automatically rotate the game canvas using CSS.\n * Note that this function doesn't have any effect in native, \n * in native, you need to set the application orientation in native project settings\n * !#zh 设置游戏屏幕朝向,它能够是横版,竖版或自动。\n * 当设置为横版或竖版,并且屏幕的宽高比例不匹配时,\n * cc.view 会自动用 CSS 旋转游戏场景的 canvas,\n * 这个方法不会对 native 部分产生任何影响,对于 native 而言,你需要在应用设置中的设置排版。\n * @method setOrientation\n * @param {Number} orientation - Possible values: cc.macro.ORIENTATION_LANDSCAPE | cc.macro.ORIENTATION_PORTRAIT | cc.macro.ORIENTATION_AUTO\n */\n setOrientation: function (orientation) {\n orientation = orientation & cc.macro.ORIENTATION_AUTO;\n if (orientation && this._orientation !== orientation) {\n this._orientation = orientation;\n var designWidth = this._originalDesignResolutionSize.width;\n var designHeight = this._originalDesignResolutionSize.height;\n this.setDesignResolutionSize(designWidth, designHeight, this._resolutionPolicy);\n }\n },\n\n _initFrameSize: function () {\n var locFrameSize = this._frameSize;\n var w = __BrowserGetter.availWidth(cc.game.frame);\n var h = __BrowserGetter.availHeight(cc.game.frame);\n var isLandscape = w >= h;\n\n if (CC_EDITOR || !cc.sys.isMobile ||\n (isLandscape && this._orientation & cc.macro.ORIENTATION_LANDSCAPE) || \n (!isLandscape && this._orientation & cc.macro.ORIENTATION_PORTRAIT)) {\n locFrameSize.width = w;\n locFrameSize.height = h;\n cc.game.container.style['-webkit-transform'] = 'rotate(0deg)';\n cc.game.container.style.transform = 'rotate(0deg)';\n this._isRotated = false;\n }\n else {\n locFrameSize.width = h;\n locFrameSize.height = w;\n cc.game.container.style['-webkit-transform'] = 'rotate(90deg)';\n cc.game.container.style.transform = 'rotate(90deg)';\n cc.game.container.style['-webkit-transform-origin'] = '0px 0px 0px';\n cc.game.container.style.transformOrigin = '0px 0px 0px';\n this._isRotated = true;\n }\n if (this._orientationChanging) {\n setTimeout(function () {\n cc.view._orientationChanging = false;\n }, 1000);\n }\n },\n\n _setViewportMeta: function (metas, overwrite) {\n var vp = document.getElementById(\"cocosMetaElement\");\n if(vp && overwrite){\n document.head.removeChild(vp);\n }\n\n var elems = document.getElementsByName(\"viewport\"),\n currentVP = elems ? elems[0] : null,\n content, key, pattern;\n\n content = currentVP ? currentVP.content : \"\";\n vp = vp || document.createElement(\"meta\");\n vp.id = \"cocosMetaElement\";\n vp.name = \"viewport\";\n vp.content = \"\";\n\n for (key in metas) {\n if (content.indexOf(key) == -1) {\n content += \",\" + key + \"=\" + metas[key];\n }\n else if (overwrite) {\n pattern = new RegExp(key+\"\\s*=\\s*[^,]+\");\n content = content.replace(pattern, key + \"=\" + metas[key]);\n }\n }\n if(/^,/.test(content))\n content = content.substr(1);\n\n vp.content = content;\n // For adopting certain android devices which don't support second viewport\n if (currentVP)\n currentVP.content = content;\n\n document.head.appendChild(vp);\n },\n\n _adjustViewportMeta: function () {\n if (this._isAdjustViewport && !CC_JSB && !CC_RUNTIME) {\n this._setViewportMeta(__BrowserGetter.meta, false);\n this._isAdjustViewport = false;\n }\n },\n\n /**\n * !#en\n * Sets whether the engine modify the \"viewport\" meta in your web page.
\n * It's enabled by default, we strongly suggest you not to disable it.
\n * And even when it's enabled, you can still set your own \"viewport\" meta, it won't be overridden
\n * Only useful on web\n * !#zh 设置引擎是否调整 viewport meta 来配合屏幕适配。\n * 默认设置为启动,我们强烈建议你不要将它设置为关闭。\n * 即使当它启动时,你仍然能够设置你的 viewport meta,它不会被覆盖。\n * 仅在 Web 模式下有效\n * @method adjustViewportMeta\n * @param {Boolean} enabled - Enable automatic modification to \"viewport\" meta\n */\n adjustViewportMeta: function (enabled) {\n this._isAdjustViewport = enabled;\n },\n\n /**\n * !#en\n * Retina support is enabled by default for Apple device but disabled for other devices,
\n * it takes effect only when you called setDesignResolutionPolicy
\n * Only useful on web\n * !#zh 对于 Apple 这种支持 Retina 显示的设备上默认进行优化而其他类型设备默认不进行优化,\n * 它仅会在你调用 setDesignResolutionPolicy 方法时有影响。\n * 仅在 Web 模式下有效。\n * @method enableRetina\n * @param {Boolean} enabled - Enable or disable retina display\n */\n enableRetina: function(enabled) {\n if (CC_EDITOR && enabled) {\n cc.warn('Can not enable retina in Editor.');\n return;\n }\n this._retinaEnabled = !!enabled;\n },\n\n /**\n * !#en\n * Check whether retina display is enabled.
\n * Only useful on web\n * !#zh 检查是否对 Retina 显示设备进行优化。\n * 仅在 Web 模式下有效。\n * @method isRetinaEnabled\n * @return {Boolean}\n */\n isRetinaEnabled: function() {\n if (CC_EDITOR) {\n return false;\n }\n return this._retinaEnabled;\n },\n\n /**\n * !#en Whether to Enable on anti-alias\n * !#zh 控制抗锯齿是否开启\n * @method enableAntiAlias\n * @param {Boolean} enabled - Enable or not anti-alias\n * @deprecated cc.view.enableAntiAlias is deprecated, please use cc.Texture2D.setFilters instead\n * @since v2.3.0\n */\n enableAntiAlias: function (enabled) {\n cc.warnID(9200);\n if (this._antiAliasEnabled === enabled) {\n return;\n }\n this._antiAliasEnabled = enabled;\n if(cc.game.renderType === cc.game.RENDER_TYPE_WEBGL) {\n var cache = cc.assetManager.assets;\n cache.forEach(function (asset) {\n if (asset instanceof cc.Texture2D) {\n var Filter = cc.Texture2D.Filter;\n if (enabled) {\n asset.setFilters(Filter.LINEAR, Filter.LINEAR);\n }\n else {\n asset.setFilters(Filter.NEAREST, Filter.NEAREST);\n }\n }\n });\n }\n else if(cc.game.renderType === cc.game.RENDER_TYPE_CANVAS) {\n var ctx = cc.game.canvas.getContext('2d');\n ctx.imageSmoothingEnabled = enabled;\n ctx.mozImageSmoothingEnabled = enabled;\n }\n },\n\n /**\n * !#en Returns whether the current enable on anti-alias\n * !#zh 返回当前是否抗锯齿\n * @method isAntiAliasEnabled\n * @return {Boolean}\n */\n isAntiAliasEnabled: function () {\n return this._antiAliasEnabled;\n },\n /**\n * !#en\n * If enabled, the application will try automatically to enter full screen mode on mobile devices
\n * You can pass true as parameter to enable it and disable it by passing false.
\n * Only useful on web\n * !#zh 启动时,移动端游戏会在移动端自动尝试进入全屏模式。\n * 你能够传入 true 为参数去启动它,用 false 参数来关闭它。\n * @method enableAutoFullScreen\n * @param {Boolean} enabled - Enable or disable auto full screen on mobile devices\n */\n enableAutoFullScreen: function(enabled) {\n if (enabled && \n enabled !== this._autoFullScreen && \n cc.sys.isMobile) {\n // Automatically full screen when user touches on mobile version\n this._autoFullScreen = true;\n cc.screen.autoFullScreen(cc.game.frame);\n }\n else {\n this._autoFullScreen = false;\n cc.screen.disableAutoFullScreen(cc.game.frame);\n }\n },\n\n /**\n * !#en\n * Check whether auto full screen is enabled.
\n * Only useful on web\n * !#zh 检查自动进入全屏模式是否启动。\n * 仅在 Web 模式下有效。\n * @method isAutoFullScreenEnabled\n * @return {Boolean} Auto full screen enabled or not\n */\n isAutoFullScreenEnabled: function() {\n return this._autoFullScreen;\n },\n\n /*\n * Not support on native.
\n * On web, it sets the size of the canvas.\n * !#zh 这个方法并不支持 native 平台,在 Web 平台下,可以用来设置 canvas 尺寸。\n * @method setCanvasSize\n * @param {Number} width\n * @param {Number} height\n */\n setCanvasSize: function (width, height) {\n var canvas = cc.game.canvas;\n var container = cc.game.container;\n\n canvas.width = width * this._devicePixelRatio;\n canvas.height = height * this._devicePixelRatio;\n\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n\n container.style.width = width + 'px';\n container.style.height = height + 'px';\n\n this._resizeEvent();\n },\n\n /**\n * !#en\n * Returns the canvas size of the view.
\n * On native platforms, it returns the screen size since the view is a fullscreen view.
\n * On web, it returns the size of the canvas element.\n * !#zh 返回视图中 canvas 的尺寸。\n * 在 native 平台下,它返回全屏视图下屏幕的尺寸。\n * 在 Web 平台下,它返回 canvas 元素尺寸。\n * @method getCanvasSize\n * @return {Size}\n */\n getCanvasSize: function () {\n return cc.size(cc.game.canvas.width, cc.game.canvas.height);\n },\n\n /**\n * !#en\n * Returns the frame size of the view.
\n * On native platforms, it returns the screen size since the view is a fullscreen view.
\n * On web, it returns the size of the canvas's outer DOM element.\n * !#zh 返回视图中边框尺寸。\n * 在 native 平台下,它返回全屏视图下屏幕的尺寸。\n * 在 web 平台下,它返回 canvas 元素的外层 DOM 元素尺寸。\n * @method getFrameSize\n * @return {Size}\n */\n getFrameSize: function () {\n return cc.size(this._frameSize.width, this._frameSize.height);\n },\n\n /**\n * !#en\n * On native, it sets the frame size of view.
\n * On web, it sets the size of the canvas's outer DOM element.\n * !#zh 在 native 平台下,设置视图框架尺寸。\n * 在 web 平台下,设置 canvas 外层 DOM 元素尺寸。\n * @method setFrameSize\n * @param {Number} width\n * @param {Number} height\n */\n setFrameSize: function (width, height) {\n this._frameSize.width = width;\n this._frameSize.height = height;\n cc.game.frame.style.width = width + \"px\";\n cc.game.frame.style.height = height + \"px\";\n this._resizeEvent(true);\n },\n\n /**\n * !#en\n * Returns the visible area size of the view port.\n * !#zh 返回视图窗口可见区域尺寸。\n * @method getVisibleSize\n * @return {Size}\n */\n getVisibleSize: function () {\n return cc.size(this._visibleRect.width,this._visibleRect.height);\n },\n\n /**\n * !#en\n * Returns the visible area size of the view port.\n * !#zh 返回视图窗口可见区域像素尺寸。\n * @method getVisibleSizeInPixel\n * @return {Size}\n */\n getVisibleSizeInPixel: function () {\n return cc.size( this._visibleRect.width * this._scaleX,\n this._visibleRect.height * this._scaleY );\n },\n\n /**\n * !#en\n * Returns the visible origin of the view port.\n * !#zh 返回视图窗口可见区域原点。\n * @method getVisibleOrigin\n * @return {Vec2}\n */\n getVisibleOrigin: function () {\n return cc.v2(this._visibleRect.x,this._visibleRect.y);\n },\n\n /**\n * !#en\n * Returns the visible origin of the view port.\n * !#zh 返回视图窗口可见区域像素原点。\n * @method getVisibleOriginInPixel\n * @return {Vec2}\n */\n getVisibleOriginInPixel: function () {\n return cc.v2(this._visibleRect.x * this._scaleX,\n this._visibleRect.y * this._scaleY);\n },\n\n /**\n * !#en\n * Returns the current resolution policy\n * !#zh 返回当前分辨率方案\n * @see cc.ResolutionPolicy\n * @method getResolutionPolicy\n * @return {ResolutionPolicy}\n */\n getResolutionPolicy: function () {\n return this._resolutionPolicy;\n },\n\n /**\n * !#en\n * Sets the current resolution policy\n * !#zh 设置当前分辨率模式\n * @see cc.ResolutionPolicy\n * @method setResolutionPolicy\n * @param {ResolutionPolicy|Number} resolutionPolicy\n */\n setResolutionPolicy: function (resolutionPolicy) {\n var _t = this;\n if (resolutionPolicy instanceof cc.ResolutionPolicy) {\n _t._resolutionPolicy = resolutionPolicy;\n }\n // Ensure compatibility with JSB\n else {\n var _locPolicy = cc.ResolutionPolicy;\n if(resolutionPolicy === _locPolicy.EXACT_FIT)\n _t._resolutionPolicy = _t._rpExactFit;\n if(resolutionPolicy === _locPolicy.SHOW_ALL)\n _t._resolutionPolicy = _t._rpShowAll;\n if(resolutionPolicy === _locPolicy.NO_BORDER)\n _t._resolutionPolicy = _t._rpNoBorder;\n if(resolutionPolicy === _locPolicy.FIXED_HEIGHT)\n _t._resolutionPolicy = _t._rpFixedHeight;\n if(resolutionPolicy === _locPolicy.FIXED_WIDTH)\n _t._resolutionPolicy = _t._rpFixedWidth;\n }\n },\n\n /**\n * !#en\n * Sets the resolution policy with designed view size in points.
\n * The resolution policy include:
\n * [1] ResolutionExactFit Fill screen by stretch-to-fit: if the design resolution ratio of width to height is different from the screen resolution ratio, your game view will be stretched.
\n * [2] ResolutionNoBorder Full screen without black border: if the design resolution ratio of width to height is different from the screen resolution ratio, two areas of your game view will be cut.
\n * [3] ResolutionShowAll Full screen with black border: if the design resolution ratio of width to height is different from the screen resolution ratio, two black borders will be shown.
\n * [4] ResolutionFixedHeight Scale the content's height to screen's height and proportionally scale its width
\n * [5] ResolutionFixedWidth Scale the content's width to screen's width and proportionally scale its height
\n * [cc.ResolutionPolicy] [Web only feature] Custom resolution policy, constructed by cc.ResolutionPolicy
\n * !#zh 通过设置设计分辨率和匹配模式来进行游戏画面的屏幕适配。\n * @method setDesignResolutionSize\n * @param {Number} width Design resolution width.\n * @param {Number} height Design resolution height.\n * @param {ResolutionPolicy|Number} resolutionPolicy The resolution policy desired\n */\n setDesignResolutionSize: function (width, height, resolutionPolicy) {\n // Defensive code\n if( !(width > 0 && height > 0) ){\n cc.errorID(2200);\n return;\n }\n\n this.setResolutionPolicy(resolutionPolicy);\n var policy = this._resolutionPolicy;\n if (policy) {\n policy.preApply(this);\n }\n\n // Reinit frame size\n if (cc.sys.isMobile)\n this._adjustViewportMeta();\n\n // Permit to re-detect the orientation of device.\n this._orientationChanging = true;\n // If resizing, then frame size is already initialized, this logic should be improved\n if (!this._resizing)\n this._initFrameSize();\n\n if (!policy) {\n cc.logID(2201);\n return;\n }\n\n this._originalDesignResolutionSize.width = this._designResolutionSize.width = width;\n this._originalDesignResolutionSize.height = this._designResolutionSize.height = height;\n\n var result = policy.apply(this, this._designResolutionSize);\n\n if(result.scale && result.scale.length === 2){\n this._scaleX = result.scale[0];\n this._scaleY = result.scale[1];\n }\n\n if(result.viewport){\n var vp = this._viewportRect,\n vb = this._visibleRect,\n rv = result.viewport;\n\n vp.x = rv.x;\n vp.y = rv.y;\n vp.width = rv.width;\n vp.height = rv.height;\n\n vb.x = 0;\n vb.y = 0;\n vb.width = rv.width / this._scaleX;\n vb.height = rv.height / this._scaleY;\n }\n\n policy.postApply(this);\n cc.winSize.width = this._visibleRect.width;\n cc.winSize.height = this._visibleRect.height;\n\n cc.visibleRect && cc.visibleRect.init(this._visibleRect);\n\n renderer.updateCameraViewport();\n cc.internal.inputManager._updateCanvasBoundingRect();\n this.emit('design-resolution-changed');\n },\n\n /**\n * !#en\n * Returns the designed size for the view.\n * Default resolution size is the same as 'getFrameSize'.\n * !#zh 返回视图的设计分辨率。\n * 默认下分辨率尺寸同 `getFrameSize` 方法相同\n * @method getDesignResolutionSize\n * @return {Size}\n */\n getDesignResolutionSize: function () {\n return cc.size(this._designResolutionSize.width, this._designResolutionSize.height);\n },\n\n /**\n * !#en\n * Sets the container to desired pixel resolution and fit the game content to it.\n * This function is very useful for adaptation in mobile browsers.\n * In some HD android devices, the resolution is very high, but its browser performance may not be very good.\n * In this case, enabling retina display is very costy and not suggested, and if retina is disabled, the image may be blurry.\n * But this API can be helpful to set a desired pixel resolution which is in between.\n * This API will do the following:\n * 1. Set viewport's width to the desired width in pixel\n * 2. Set body width to the exact pixel resolution\n * 3. The resolution policy will be reset with designed view size in points.\n * !#zh 设置容器(container)需要的像素分辨率并且适配相应分辨率的游戏内容。\n * @method setRealPixelResolution\n * @param {Number} width Design resolution width.\n * @param {Number} height Design resolution height.\n * @param {ResolutionPolicy|Number} resolutionPolicy The resolution policy desired\n */\n setRealPixelResolution: function (width, height, resolutionPolicy) {\n if (!CC_JSB && !CC_RUNTIME) {\n // Set viewport's width\n this._setViewportMeta({\"width\": width}, true);\n\n // Set body width to the exact pixel resolution\n document.documentElement.style.width = width + \"px\";\n document.body.style.width = width + \"px\";\n document.body.style.left = \"0px\";\n document.body.style.top = \"0px\";\n }\n\n // Reset the resolution size and policy\n this.setDesignResolutionSize(width, height, resolutionPolicy);\n },\n\n /**\n * !#en\n * Sets view port rectangle with points.\n * !#zh 用设计分辨率下的点尺寸来设置视窗。\n * @method setViewportInPoints\n * @deprecated since v2.0\n * @param {Number} x\n * @param {Number} y\n * @param {Number} w width\n * @param {Number} h height\n */\n setViewportInPoints: function (x, y, w, h) {\n var locScaleX = this._scaleX, locScaleY = this._scaleY;\n cc.game._renderContext.viewport((x * locScaleX + this._viewportRect.x),\n (y * locScaleY + this._viewportRect.y),\n (w * locScaleX),\n (h * locScaleY));\n },\n\n /**\n * !#en\n * Sets Scissor rectangle with points.\n * !#zh 用设计分辨率下的点的尺寸来设置 scissor 剪裁区域。\n * @method setScissorInPoints\n * @deprecated since v2.0\n * @param {Number} x\n * @param {Number} y\n * @param {Number} w\n * @param {Number} h\n */\n setScissorInPoints: function (x, y, w, h) {\n let scaleX = this._scaleX, scaleY = this._scaleY;\n let sx = Math.ceil(x * scaleX + this._viewportRect.x);\n let sy = Math.ceil(y * scaleY + this._viewportRect.y);\n let sw = Math.ceil(w * scaleX);\n let sh = Math.ceil(h * scaleY);\n let gl = cc.game._renderContext;\n\n if (!_scissorRect) {\n var boxArr = gl.getParameter(gl.SCISSOR_BOX);\n _scissorRect = cc.rect(boxArr[0], boxArr[1], boxArr[2], boxArr[3]);\n }\n\n if (_scissorRect.x !== sx || _scissorRect.y !== sy || _scissorRect.width !== sw || _scissorRect.height !== sh) {\n _scissorRect.x = sx;\n _scissorRect.y = sy;\n _scissorRect.width = sw;\n _scissorRect.height = sh;\n gl.scissor(sx, sy, sw, sh);\n }\n },\n\n /**\n * !#en\n * Returns whether GL_SCISSOR_TEST is enable\n * !#zh 检查 scissor 是否生效。\n * @method isScissorEnabled\n * @deprecated since v2.0\n * @return {Boolean}\n */\n isScissorEnabled: function () {\n return cc.game._renderContext.isEnabled(gl.SCISSOR_TEST);\n },\n\n /**\n * !#en\n * Returns the current scissor rectangle\n * !#zh 返回当前的 scissor 剪裁区域。\n * @method getScissorRect\n * @deprecated since v2.0\n * @return {Rect}\n */\n getScissorRect: function () {\n if (!_scissorRect) {\n var boxArr = gl.getParameter(gl.SCISSOR_BOX);\n _scissorRect = cc.rect(boxArr[0], boxArr[1], boxArr[2], boxArr[3]);\n }\n var scaleXFactor = 1 / this._scaleX;\n var scaleYFactor = 1 / this._scaleY;\n return cc.rect(\n (_scissorRect.x - this._viewportRect.x) * scaleXFactor,\n (_scissorRect.y - this._viewportRect.y) * scaleYFactor,\n _scissorRect.width * scaleXFactor,\n _scissorRect.height * scaleYFactor\n );\n },\n\n /**\n * !#en\n * Returns the view port rectangle.\n * !#zh 返回视窗剪裁区域。\n * @method getViewportRect\n * @return {Rect}\n */\n getViewportRect: function () {\n return this._viewportRect;\n },\n\n /**\n * !#en\n * Returns scale factor of the horizontal direction (X axis).\n * !#zh 返回横轴的缩放比,这个缩放比是将画布像素分辨率放到设计分辨率的比例。\n * @method getScaleX\n * @return {Number}\n */\n getScaleX: function () {\n return this._scaleX;\n },\n\n /**\n * !#en\n * Returns scale factor of the vertical direction (Y axis).\n * !#zh 返回纵轴的缩放比,这个缩放比是将画布像素分辨率缩放到设计分辨率的比例。\n * @method getScaleY\n * @return {Number}\n */\n getScaleY: function () {\n return this._scaleY;\n },\n\n /**\n * !#en\n * Returns device pixel ratio for retina display.\n * !#zh 返回设备或浏览器像素比例。\n * @method getDevicePixelRatio\n * @return {Number}\n */\n getDevicePixelRatio: function() {\n return this._devicePixelRatio;\n },\n\n /**\n * !#en\n * Returns the real location in view for a translation based on a related position\n * !#zh 将屏幕坐标转换为游戏视图下的坐标。\n * @method convertToLocationInView\n * @param {Number} tx - The X axis translation\n * @param {Number} ty - The Y axis translation\n * @param {Object} relatedPos - The related position object including \"left\", \"top\", \"width\", \"height\" informations\n * @return {Vec2}\n */\n convertToLocationInView: function (tx, ty, relatedPos, out) {\n let result = out || cc.v2();\n let posLeft = relatedPos.adjustedLeft ? relatedPos.adjustedLeft : relatedPos.left;\n let posTop = relatedPos.adjustedTop ? relatedPos.adjustedTop : relatedPos.top;\n let x = this._devicePixelRatio * (tx - posLeft);\n let y = this._devicePixelRatio * (posTop + relatedPos.height - ty);\n if (this._isRotated) {\n result.x = cc.game.canvas.width - y;\n result.y = x;\n }\n else {\n result.x = x;\n result.y = y;\n }\n return result;\n },\n\n _convertMouseToLocationInView: function (in_out_point, relatedPos) {\n var viewport = this._viewportRect, _t = this;\n in_out_point.x = ((_t._devicePixelRatio * (in_out_point.x - relatedPos.left)) - viewport.x) / _t._scaleX;\n in_out_point.y = (_t._devicePixelRatio * (relatedPos.top + relatedPos.height - in_out_point.y) - viewport.y) / _t._scaleY;\n },\n\n _convertPointWithScale: function (point) {\n var viewport = this._viewportRect;\n point.x = (point.x - viewport.x) / this._scaleX;\n point.y = (point.y - viewport.y) / this._scaleY;\n },\n\n _convertTouchesWithScale: function (touches) {\n var viewport = this._viewportRect, scaleX = this._scaleX, scaleY = this._scaleY,\n selTouch, selPoint, selPrePoint;\n for (var i = 0; i < touches.length; i++) {\n selTouch = touches[i];\n selPoint = selTouch._point;\n selPrePoint = selTouch._prevPoint;\n\n selPoint.x = (selPoint.x - viewport.x) / scaleX;\n selPoint.y = (selPoint.y - viewport.y) / scaleY;\n selPrePoint.x = (selPrePoint.x - viewport.x) / scaleX;\n selPrePoint.y = (selPrePoint.y - viewport.y) / scaleY;\n }\n }\n});\n\n/**\n * !#en\n * Emit when design resolution changed.\n * !#zh\n * 当设计分辨率改变时发送。\n * @event design-resolution-changed\n */\n /**\n * !#en\n * Emit when canvas resize.\n * !#zh\n * 当画布大小改变时发送。\n * @event canvas-resize\n */\n\n\n/**\n *

cc.game.containerStrategy class is the root strategy class of container's scale strategy,\n * it controls the behavior of how to scale the cc.game.container and cc.game.canvas object

\n *\n * @class ContainerStrategy\n */\ncc.ContainerStrategy = cc.Class({\n name: \"ContainerStrategy\",\n /**\n * !#en\n * Manipulation before appling the strategy\n * !#zh 在应用策略之前的操作\n * @method preApply\n * @param {View} view - The target view\n */\n preApply: function (view) {\n },\n\n /**\n * !#en\n * Function to apply this strategy\n * !#zh 策略应用方法\n * @method apply\n * @param {View} view\n * @param {Size} designedResolution\n */\n apply: function (view, designedResolution) {\n },\n\n /**\n * !#en\n * Manipulation after applying the strategy\n * !#zh 策略调用之后的操作\n * @method postApply\n * @param {View} view The target view\n */\n postApply: function (view) {\n\n },\n\n _setupContainer: function (view, w, h) {\n var locCanvas = cc.game.canvas;\n\n this._setupStyle(view, w, h);\n \n // Setup pixel ratio for retina display\n var devicePixelRatio = view._devicePixelRatio = 1;\n if(CC_JSB){\n // view.isRetinaEnabled only work on web. \n devicePixelRatio = view._devicePixelRatio = window.devicePixelRatio;\n }else if (view.isRetinaEnabled()) {\n devicePixelRatio = view._devicePixelRatio = Math.min(view._maxPixelRatio, window.devicePixelRatio || 1);\n }\n // Setup canvas\n locCanvas.width = w * devicePixelRatio;\n locCanvas.height = h * devicePixelRatio;\n },\n\n _setupStyle: function (view, w, h) {\n let locCanvas = cc.game.canvas;\n let locContainer = cc.game.container;\n if (cc.sys.os === cc.sys.OS_ANDROID) {\n document.body.style.width = (view._isRotated ? h : w) + 'px';\n document.body.style.height = (view._isRotated ? w : h) + 'px';\n }\n // Setup style\n locContainer.style.width = locCanvas.style.width = w + 'px';\n locContainer.style.height = locCanvas.style.height = h + 'px';\n },\n\n _fixContainer: function () {\n // Add container to document body\n document.body.insertBefore(cc.game.container, document.body.firstChild);\n // Set body's width height to window's size, and forbid overflow, so that game will be centered\n var bs = document.body.style;\n bs.width = window.innerWidth + \"px\";\n bs.height = window.innerHeight + \"px\";\n bs.overflow = \"hidden\";\n // Body size solution doesn't work on all mobile browser so this is the aleternative: fixed container\n var contStyle = cc.game.container.style;\n contStyle.position = \"fixed\";\n contStyle.left = contStyle.top = \"0px\";\n // Reposition body\n document.body.scrollTop = 0;\n }\n});\n\n/**\n *

cc.ContentStrategy class is the root strategy class of content's scale strategy,\n * it controls the behavior of how to scale the scene and setup the viewport for the game

\n *\n * @class ContentStrategy\n */\ncc.ContentStrategy = cc.Class({\n name: \"ContentStrategy\",\n\n ctor: function () {\n this._result = {\n scale: [1, 1],\n viewport: null\n };\n },\n\n _buildResult: function (containerW, containerH, contentW, contentH, scaleX, scaleY) {\n // Makes content fit better the canvas\n Math.abs(containerW - contentW) < 2 && (contentW = containerW);\n Math.abs(containerH - contentH) < 2 && (contentH = containerH);\n\n var viewport = cc.rect((containerW - contentW) / 2, (containerH - contentH) / 2, contentW, contentH);\n\n // Translate the content\n if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS){\n //TODO: modify something for setTransform\n //cc.game._renderContext.translate(viewport.x, viewport.y + contentH);\n }\n\n this._result.scale = [scaleX, scaleY];\n this._result.viewport = viewport;\n return this._result;\n },\n\n /**\n * !#en\n * Manipulation before applying the strategy\n * !#zh 策略应用前的操作\n * @method preApply\n * @param {View} view - The target view\n */\n preApply: function (view) {\n },\n\n /**\n * !#en Function to apply this strategy\n * The return value is {scale: [scaleX, scaleY], viewport: {cc.Rect}},\n * The target view can then apply these value to itself, it's preferred not to modify directly its private variables\n * !#zh 调用策略方法\n * @method apply\n * @param {View} view\n * @param {Size} designedResolution\n * @return {Object} scaleAndViewportRect\n */\n apply: function (view, designedResolution) {\n return {\"scale\": [1, 1]};\n },\n\n /**\n * !#en\n * Manipulation after applying the strategy\n * !#zh 策略调用之后的操作\n * @method postApply\n * @param {View} view - The target view\n */\n postApply: function (view) {\n }\n});\n\n(function () {\n\n// Container scale strategys\n /**\n * @class EqualToFrame\n * @extends ContainerStrategy\n */\n var EqualToFrame = cc.Class({\n name: \"EqualToFrame\",\n extends: cc.ContainerStrategy,\n apply: function (view) {\n var frameH = view._frameSize.height, containerStyle = cc.game.container.style;\n this._setupContainer(view, view._frameSize.width, view._frameSize.height);\n // Setup container's margin and padding\n if (view._isRotated) {\n containerStyle.margin = '0 0 0 ' + frameH + 'px';\n }\n else {\n containerStyle.margin = '0px';\n }\n containerStyle.padding = \"0px\";\n }\n });\n\n /**\n * @class ProportionalToFrame\n * @extends ContainerStrategy\n */\n var ProportionalToFrame = cc.Class({\n name: \"ProportionalToFrame\",\n extends: cc.ContainerStrategy,\n apply: function (view, designedResolution) {\n var frameW = view._frameSize.width, frameH = view._frameSize.height, containerStyle = cc.game.container.style,\n designW = designedResolution.width, designH = designedResolution.height,\n scaleX = frameW / designW, scaleY = frameH / designH,\n containerW, containerH;\n\n scaleX < scaleY ? (containerW = frameW, containerH = designH * scaleX) : (containerW = designW * scaleY, containerH = frameH);\n\n // Adjust container size with integer value\n var offx = Math.round((frameW - containerW) / 2);\n var offy = Math.round((frameH - containerH) / 2);\n containerW = frameW - 2 * offx;\n containerH = frameH - 2 * offy;\n\n this._setupContainer(view, containerW, containerH);\n if (!CC_EDITOR) {\n // Setup container's margin and padding\n if (view._isRotated) {\n containerStyle.margin = '0 0 0 ' + frameH + 'px';\n }\n else {\n containerStyle.margin = '0px';\n }\n containerStyle.paddingLeft = offx + \"px\";\n containerStyle.paddingRight = offx + \"px\";\n containerStyle.paddingTop = offy + \"px\";\n containerStyle.paddingBottom = offy + \"px\";\n }\n }\n });\n\n /**\n * @class EqualToWindow\n * @extends EqualToFrame\n */\n var EqualToWindow = cc.Class({\n name: \"EqualToWindow\",\n extends: EqualToFrame,\n preApply: function (view) {\n this._super(view);\n cc.game.frame = document.documentElement;\n },\n\n apply: function (view) {\n this._super(view);\n this._fixContainer();\n }\n });\n\n /**\n * @class ProportionalToWindow\n * @extends ProportionalToFrame\n */\n var ProportionalToWindow = cc.Class({\n name: \"ProportionalToWindow\",\n extends: ProportionalToFrame,\n preApply: function (view) {\n this._super(view);\n cc.game.frame = document.documentElement;\n },\n\n apply: function (view, designedResolution) {\n this._super(view, designedResolution);\n this._fixContainer();\n }\n });\n\n /**\n * @class OriginalContainer\n * @extends ContainerStrategy\n */\n var OriginalContainer = cc.Class({\n name: \"OriginalContainer\",\n extends: cc.ContainerStrategy,\n apply: function (view) {\n this._setupContainer(view, cc.game.canvas.width, cc.game.canvas.height);\n }\n });\n\n // need to adapt prototype before instantiating\n let _global = typeof window === 'undefined' ? global : window;\n let globalAdapter = _global.__globalAdapter;\n if (globalAdapter) {\n if (globalAdapter.adaptContainerStrategy) {\n globalAdapter.adaptContainerStrategy(cc.ContainerStrategy.prototype);\n }\n if (globalAdapter.adaptView) {\n globalAdapter.adaptView(View.prototype);\n }\n }\n\n// #NOT STABLE on Android# Alias: Strategy that makes the container's size equals to the window's size\n// cc.ContainerStrategy.EQUAL_TO_WINDOW = new EqualToWindow();\n// #NOT STABLE on Android# Alias: Strategy that scale proportionally the container's size to window's size\n// cc.ContainerStrategy.PROPORTION_TO_WINDOW = new ProportionalToWindow();\n// Alias: Strategy that makes the container's size equals to the frame's size\n cc.ContainerStrategy.EQUAL_TO_FRAME = new EqualToFrame();\n// Alias: Strategy that scale proportionally the container's size to frame's size\n cc.ContainerStrategy.PROPORTION_TO_FRAME = new ProportionalToFrame();\n// Alias: Strategy that keeps the original container's size\n cc.ContainerStrategy.ORIGINAL_CONTAINER = new OriginalContainer();\n\n// Content scale strategys\n var ExactFit = cc.Class({\n name: \"ExactFit\",\n extends: cc.ContentStrategy,\n apply: function (view, designedResolution) {\n var containerW = cc.game.canvas.width, containerH = cc.game.canvas.height,\n scaleX = containerW / designedResolution.width, scaleY = containerH / designedResolution.height;\n\n return this._buildResult(containerW, containerH, containerW, containerH, scaleX, scaleY);\n }\n });\n\n var ShowAll = cc.Class({\n name: \"ShowAll\",\n extends: cc.ContentStrategy,\n apply: function (view, designedResolution) {\n var containerW = cc.game.canvas.width, containerH = cc.game.canvas.height,\n designW = designedResolution.width, designH = designedResolution.height,\n scaleX = containerW / designW, scaleY = containerH / designH, scale = 0,\n contentW, contentH;\n\n scaleX < scaleY ? (scale = scaleX, contentW = containerW, contentH = designH * scale)\n : (scale = scaleY, contentW = designW * scale, contentH = containerH);\n\n return this._buildResult(containerW, containerH, contentW, contentH, scale, scale);\n }\n });\n\n var NoBorder = cc.Class({\n name: \"NoBorder\",\n extends: cc.ContentStrategy,\n apply: function (view, designedResolution) {\n var containerW = cc.game.canvas.width, containerH = cc.game.canvas.height,\n designW = designedResolution.width, designH = designedResolution.height,\n scaleX = containerW / designW, scaleY = containerH / designH, scale,\n contentW, contentH;\n\n scaleX < scaleY ? (scale = scaleY, contentW = designW * scale, contentH = containerH)\n : (scale = scaleX, contentW = containerW, contentH = designH * scale);\n\n return this._buildResult(containerW, containerH, contentW, contentH, scale, scale);\n }\n });\n\n var FixedHeight = cc.Class({\n name: \"FixedHeight\",\n extends: cc.ContentStrategy,\n apply: function (view, designedResolution) {\n var containerW = cc.game.canvas.width, containerH = cc.game.canvas.height,\n designH = designedResolution.height, scale = containerH / designH,\n contentW = containerW, contentH = containerH;\n\n return this._buildResult(containerW, containerH, contentW, contentH, scale, scale);\n }\n });\n\n var FixedWidth = cc.Class({\n name: \"FixedWidth\",\n extends: cc.ContentStrategy,\n apply: function (view, designedResolution) {\n var containerW = cc.game.canvas.width, containerH = cc.game.canvas.height,\n designW = designedResolution.width, scale = containerW / designW,\n contentW = containerW, contentH = containerH;\n\n return this._buildResult(containerW, containerH, contentW, contentH, scale, scale);\n }\n });\n\n// Alias: Strategy to scale the content's size to container's size, non proportional\n cc.ContentStrategy.EXACT_FIT = new ExactFit();\n// Alias: Strategy to scale the content's size proportionally to maximum size and keeps the whole content area to be visible\n cc.ContentStrategy.SHOW_ALL = new ShowAll();\n// Alias: Strategy to scale the content's size proportionally to fill the whole container area\n cc.ContentStrategy.NO_BORDER = new NoBorder();\n// Alias: Strategy to scale the content's height to container's height and proportionally scale its width\n cc.ContentStrategy.FIXED_HEIGHT = new FixedHeight();\n// Alias: Strategy to scale the content's width to container's width and proportionally scale its height\n cc.ContentStrategy.FIXED_WIDTH = new FixedWidth();\n\n})();\n\n/**\n *

cc.ResolutionPolicy class is the root strategy class of scale strategy,\n * its main task is to maintain the compatibility with Cocos2d-x

\n *\n * @class ResolutionPolicy\n */\n/**\n * @method constructor\n * @param {ContainerStrategy} containerStg The container strategy\n * @param {ContentStrategy} contentStg The content strategy\n */\ncc.ResolutionPolicy = cc.Class({\n name: \"cc.ResolutionPolicy\",\n /**\n * Constructor of cc.ResolutionPolicy\n * @param {ContainerStrategy} containerStg\n * @param {ContentStrategy} contentStg\n */\n ctor: function (containerStg, contentStg) {\n this._containerStrategy = null;\n this._contentStrategy = null;\n this.setContainerStrategy(containerStg);\n this.setContentStrategy(contentStg);\n },\n\n /**\n * !#en Manipulation before applying the resolution policy\n * !#zh 策略应用前的操作\n * @method preApply\n * @param {View} view The target view\n */\n preApply: function (view) {\n this._containerStrategy.preApply(view);\n this._contentStrategy.preApply(view);\n },\n\n /**\n * !#en Function to apply this resolution policy\n * The return value is {scale: [scaleX, scaleY], viewport: {cc.Rect}},\n * The target view can then apply these value to itself, it's preferred not to modify directly its private variables\n * !#zh 调用策略方法\n * @method apply\n * @param {View} view - The target view\n * @param {Size} designedResolution - The user defined design resolution\n * @return {Object} An object contains the scale X/Y values and the viewport rect\n */\n apply: function (view, designedResolution) {\n this._containerStrategy.apply(view, designedResolution);\n return this._contentStrategy.apply(view, designedResolution);\n },\n\n /**\n * !#en Manipulation after appyling the strategy\n * !#zh 策略应用之后的操作\n * @method postApply\n * @param {View} view - The target view\n */\n postApply: function (view) {\n this._containerStrategy.postApply(view);\n this._contentStrategy.postApply(view);\n },\n\n /**\n * !#en\n * Setup the container's scale strategy\n * !#zh 设置容器的适配策略\n * @method setContainerStrategy\n * @param {ContainerStrategy} containerStg\n */\n setContainerStrategy: function (containerStg) {\n if (containerStg instanceof cc.ContainerStrategy)\n this._containerStrategy = containerStg;\n },\n\n /**\n * !#en\n * Setup the content's scale strategy\n * !#zh 设置内容的适配策略\n * @method setContentStrategy\n * @param {ContentStrategy} contentStg\n */\n setContentStrategy: function (contentStg) {\n if (contentStg instanceof cc.ContentStrategy)\n this._contentStrategy = contentStg;\n }\n});\n\njs.get(cc.ResolutionPolicy.prototype, \"canvasSize\", function () {\n return cc.v2(cc.game.canvas.width, cc.game.canvas.height);\n});\n\n/**\n * The entire application is visible in the specified area without trying to preserve the original aspect ratio.
\n * Distortion can occur, and the application may appear stretched or compressed.\n * @property {Number} EXACT_FIT\n * @readonly\n * @static\n */\ncc.ResolutionPolicy.EXACT_FIT = 0;\n\n/**\n * The entire application fills the specified area, without distortion but possibly with some cropping,
\n * while maintaining the original aspect ratio of the application.\n * @property {Number} NO_BORDER\n * @readonly\n * @static\n */\ncc.ResolutionPolicy.NO_BORDER = 1;\n\n/**\n * The entire application is visible in the specified area without distortion while maintaining the original
\n * aspect ratio of the application. Borders can appear on two sides of the application.\n * @property {Number} SHOW_ALL\n * @readonly\n * @static\n */\ncc.ResolutionPolicy.SHOW_ALL = 2;\n\n/**\n * The application takes the height of the design resolution size and modifies the width of the internal
\n * canvas so that it fits the aspect ratio of the device
\n * no distortion will occur however you must make sure your application works on different
\n * aspect ratios\n * @property {Number} FIXED_HEIGHT\n * @readonly\n * @static\n */\ncc.ResolutionPolicy.FIXED_HEIGHT = 3;\n\n/**\n * The application takes the width of the design resolution size and modifies the height of the internal
\n * canvas so that it fits the aspect ratio of the device
\n * no distortion will occur however you must make sure your application works on different
\n * aspect ratios\n * @property {Number} FIXED_WIDTH\n * @readonly\n * @static\n */\ncc.ResolutionPolicy.FIXED_WIDTH = 4;\n\n/**\n * Unknow policy\n * @property {Number} UNKNOWN\n * @readonly\n * @static\n */\ncc.ResolutionPolicy.UNKNOWN = 5;\n\n/**\n * @module cc\n */\n\n/**\n * !#en cc.view is the shared view object.\n * !#zh cc.view 是全局的视图对象。\n * @property view\n * @static\n * @type {View}\n */\ncc.view = new View();\n\n/**\n * !#en cc.winSize is the alias object for the size of the current game window.\n * !#zh cc.winSize 为当前的游戏窗口的大小。\n * @property winSize\n * @type Size\n */\ncc.winSize = cc.size();\n\nmodule.exports = cc.view;\n","/****************************************************************************\n Copyright (c) 2011-2012 cocos2d-x.org\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos2d-x.org\n\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * cc.visibleRect is a singleton object which defines the actual visible rect of the current view,\n * it should represent the same rect as cc.view.getViewportRect()\n *\n * @class visibleRect\n */\ncc.visibleRect = {\n topLeft:cc.v2(0,0),\n topRight:cc.v2(0,0),\n top:cc.v2(0,0),\n bottomLeft:cc.v2(0,0),\n bottomRight:cc.v2(0,0),\n bottom:cc.v2(0,0),\n center:cc.v2(0,0),\n left:cc.v2(0,0),\n right:cc.v2(0,0),\n width:0,\n height:0,\n\n /**\n * initialize\n * @static\n * @method init\n * @param {Rect} visibleRect\n */\n init:function(visibleRect){\n\n var w = this.width = visibleRect.width;\n var h = this.height = visibleRect.height;\n var l = visibleRect.x,\n b = visibleRect.y,\n t = b + h,\n r = l + w;\n\n //top\n this.topLeft.x = l;\n this.topLeft.y = t;\n this.topRight.x = r;\n this.topRight.y = t;\n this.top.x = l + w/2;\n this.top.y = t;\n\n //bottom\n this.bottomLeft.x = l;\n this.bottomLeft.y = b;\n this.bottomRight.x = r;\n this.bottomRight.y = b;\n this.bottom.x = l + w/2;\n this.bottom.y = b;\n\n //center\n this.center.x = l + w/2;\n this.center.y = b + h/2;\n\n //left\n this.left.x = l;\n this.left.y = b + h/2;\n\n //right\n this.right.x = r;\n this.right.y = b + h/2;\n }\n};\n\n/**\n * Top left coordinate of the screen related to the game scene.\n * @static\n * @property {Vec2} topLeft\n */\n\n/**\n * Top right coordinate of the screen related to the game scene.\n * @static\n * @property {Vec2} topRight\n */\n\n/**\n * Top center coordinate of the screen related to the game scene.\n * @static\n * @property {Vec2} top\n */\n\n/**\n * Bottom left coordinate of the screen related to the game scene.\n * @static\n * @property {Vec2} bottomLeft\n */\n\n/**\n * Bottom right coordinate of the screen related to the game scene.\n * @static\n * @property {Vec2} bottomRight\n */\n\n/**\n * Bottom center coordinate of the screen related to the game scene.\n * @static\n * @property {Vec2} bottom\n */\n\n/**\n * Center coordinate of the screen related to the game scene.\n * @static\n * @property {Vec2} center\n */\n\n/**\n * Left center coordinate of the screen related to the game scene.\n * @static\n * @property {Vec2} left\n */\n\n/**\n * Right center coordinate of the screen related to the game scene.\n * @static\n * @property {Vec2} right\n */\n\n/**\n * Width of the screen.\n * @static\n * @property {Number} width\n */\n\n/**\n * Height of the screen.\n * @static\n * @property {Number} height\n */\n\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar js = require('./js');\nvar isPlainEmptyObj = require('./utils').isPlainEmptyObj_DEV;\n\nconst DELIMETER = '$_$';\n\nfunction createAttrsSingle (owner, superAttrs) {\n var attrs = superAttrs ? Object.create(superAttrs) : {};\n js.value(owner, '__attrs__', attrs);\n return attrs;\n}\n\n// subclass should not have __attrs__\nfunction createAttrs (subclass) {\n if (typeof subclass !== 'function') {\n // attributes only in instance\n let instance = subclass;\n return createAttrsSingle(instance, getClassAttrs(instance.constructor));\n }\n var superClass;\n var chains = cc.Class.getInheritanceChain(subclass);\n for (var i = chains.length - 1; i >= 0; i--) {\n var cls = chains[i];\n var attrs = cls.hasOwnProperty('__attrs__') && cls.__attrs__;\n if (!attrs) {\n superClass = chains[i + 1];\n createAttrsSingle(cls, superClass && superClass.__attrs__);\n }\n }\n superClass = chains[0];\n createAttrsSingle(subclass, superClass && superClass.__attrs__);\n return subclass.__attrs__;\n}\n\n// /**\n// * @class Class\n// */\n\n// *\n// * Tag the class with any meta attributes, then return all current attributes assigned to it.\n// * This function holds only the attributes, not their implementations.\n// *\n// * @method attr\n// * @param {Function|Object} ctor - the class or instance. If instance, the attribute will be dynamic and only available for the specified instance.\n// * @param {String} propName - the name of property or function, used to retrieve the attributes\n// * @param {Object} [newAttrs] - the attribute table to mark, new attributes will merged with existed attributes. Attribute whose key starts with '_' will be ignored.\n// * @static\n// * @private\nfunction attr (ctor, propName, newAttrs) {\n var attrs = getClassAttrs(ctor);\n if (!CC_DEV || typeof newAttrs === 'undefined') {\n // get\n var prefix = propName + DELIMETER;\n var ret = {};\n for (let key in attrs) {\n if (key.startsWith(prefix)) {\n ret[key.slice(prefix.length)] = attrs[key];\n }\n }\n return ret;\n }\n else if (CC_DEV && typeof newAttrs === 'object') {\n // set\n cc.warn(`\\`cc.Class.attr(obj, prop, { key: value });\\` is deprecated, use \\`cc.Class.Attr.setClassAttr(obj, prop, 'key', value);\\` instead please.`);\n for (let key in newAttrs) {\n attrs[propName + DELIMETER + key] = newAttrs[key];\n }\n }\n}\n\n// returns a readonly meta object\nfunction getClassAttrs (ctor) {\n return (ctor.hasOwnProperty('__attrs__') && ctor.__attrs__) || createAttrs(ctor);\n}\n\nfunction setClassAttr (ctor, propName, key, value) {\n getClassAttrs(ctor)[propName + DELIMETER + key] = value;\n}\n\n/**\n * @module cc\n */\n\nfunction PrimitiveType (name, def) {\n this.name = name;\n this.default = def;\n}\nPrimitiveType.prototype.toString = function () {\n return this.name;\n};\n\n/**\n * Specify that the input value must be integer in Inspector.\n * Also used to indicates that the elements in array should be type integer.\n * @property {string} Integer\n * @readonly\n * @example\n * // in cc.Class\n * member: {\n * default: [],\n * type: cc.Integer\n * }\n * // ES6 ccclass\n * @cc._decorator.property({\n * type: cc.Integer\n * })\n * member = [];\n */\ncc.Integer = new PrimitiveType('Integer', 0);\n\n/**\n * Indicates that the elements in array should be type double.\n * @property {string} Float\n * @readonly\n * @example\n * // in cc.Class\n * member: {\n * default: [],\n * type: cc.Float\n * }\n * // ES6 ccclass\n * @cc._decorator.property({\n * type: cc.Float\n * })\n * member = [];\n */\ncc.Float = new PrimitiveType('Float', 0);\n\nif (CC_EDITOR) {\n js.get(cc, 'Number', function () {\n cc.warnID(3603);\n return cc.Float;\n });\n}\n\n/**\n * Indicates that the elements in array should be type boolean.\n * @property {string} Boolean\n * @readonly\n * @example\n * // in cc.Class\n * member: {\n * default: [],\n * type: cc.Boolean\n * }\n * // ES6 ccclass\n * @cc._decorator.property({\n * type: cc.Boolean\n * })\n * member = [];\n */\ncc.Boolean = new PrimitiveType('Boolean', false);\n\n/**\n * Indicates that the elements in array should be type string.\n * @property {string} String\n * @readonly\n * @example\n * // in cc.Class\n * member: {\n * default: [],\n * type: cc.String\n * }\n * // ES6 ccclass\n * @cc._decorator.property({\n * type: cc.String\n * })\n * member = [];\n */\ncc.String = new PrimitiveType('String', '');\n\n// Ensures the type matches its default value\nfunction getTypeChecker (type, attrName) {\n return function (constructor, mainPropName) {\n var propInfo = '\"' + js.getClassName(constructor) + '.' + mainPropName + '\"';\n var mainPropAttrs = attr(constructor, mainPropName);\n\n var mainPropAttrsType = mainPropAttrs.type;\n if (mainPropAttrsType === cc.Integer || mainPropAttrsType === cc.Float) {\n mainPropAttrsType = 'Number';\n }\n else if (mainPropAttrsType === cc.String || mainPropAttrsType === cc.Boolean) {\n mainPropAttrsType = '' + mainPropAttrsType;\n }\n if (mainPropAttrsType !== type) {\n cc.warnID(3604, propInfo);\n return;\n }\n\n if (!mainPropAttrs.hasOwnProperty('default')) {\n return;\n }\n var defaultVal = mainPropAttrs.default;\n if (typeof defaultVal === 'undefined') {\n return;\n }\n var isContainer = Array.isArray(defaultVal) || isPlainEmptyObj(defaultVal);\n if (isContainer) {\n return;\n }\n var defaultType = typeof defaultVal;\n var type_lowerCase = type.toLowerCase();\n if (defaultType === type_lowerCase) {\n if (type_lowerCase === 'object') {\n if (defaultVal && !(defaultVal instanceof mainPropAttrs.ctor)) {\n cc.warnID(3605, propInfo, js.getClassName(mainPropAttrs.ctor));\n }\n else {\n return;\n }\n }\n else if (type !== 'Number') {\n cc.warnID(3606, attrName, propInfo, type);\n }\n }\n else if (defaultType !== 'function') {\n if (type === cc.String && defaultVal == null) {\n cc.warnID(3607, propInfo);\n }\n else {\n cc.warnID(3611, attrName, propInfo, defaultType);\n }\n }\n else {\n return;\n }\n delete mainPropAttrs.type;\n };\n}\n\n// Ensures the type matches its default value\nfunction getObjTypeChecker (typeCtor) {\n return function (classCtor, mainPropName) {\n getTypeChecker('Object', 'type')(classCtor, mainPropName);\n // check ValueType\n var defaultDef = getClassAttrs(classCtor)[mainPropName + DELIMETER + 'default'];\n var defaultVal = require('./CCClass').getDefault(defaultDef);\n if (!Array.isArray(defaultVal) && js.isChildClassOf(typeCtor, cc.ValueType)) {\n var typename = js.getClassName(typeCtor);\n var info = cc.js.formatStr('No need to specify the \"type\" of \"%s.%s\" because %s is a child class of ValueType.',\n js.getClassName(classCtor), mainPropName, typename);\n if (defaultDef) {\n cc.log(info);\n }\n else {\n cc.warnID(3612, info, typename, js.getClassName(classCtor), mainPropName, typename);\n }\n }\n };\n}\n\nmodule.exports = {\n PrimitiveType,\n attr: attr,\n getClassAttrs: getClassAttrs,\n setClassAttr: setClassAttr,\n DELIMETER: DELIMETER,\n getTypeChecker_ET: ((CC_EDITOR && !Editor.isBuilder) || CC_TEST) && getTypeChecker,\n getObjTypeChecker_ET: ((CC_EDITOR && !Editor.isBuilder) || CC_TEST) && getObjTypeChecker,\n ScriptUuid: {}, // the value will be represented as a uuid string\n};\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst js = require('./js');\nconst fastRemoveAt = js.array.fastRemoveAt;\n\nfunction empty () {}\n\nfunction CallbackInfo () {\n this.callback = empty;\n this.target = undefined;\n this.once = false;\n}\n\nCallbackInfo.prototype.set = function (callback, target, once) {\n this.callback = callback;\n this.target = target;\n this.once = !!once;\n};\n\nlet callbackInfoPool = new js.Pool(function (info) {\n info.callback = empty;\n info.target = undefined;\n info.once = false;\n return true;\n}, 32);\n\ncallbackInfoPool.get = function () {\n return this._get() || new CallbackInfo();\n};\n\nfunction CallbackList () {\n this.callbackInfos = [];\n this.isInvoking = false;\n this.containCanceled = false;\n}\n\nlet proto = CallbackList.prototype;\n\n/**\n * !#zh\n * 从列表中移除与指定目标相同回调函数的事件。\n * @param cb\n */\nproto.removeByCallback = function (cb) {\n for (let i = 0; i < this.callbackInfos.length; ++i) {\n let info = this.callbackInfos[i];\n if (info && info.callback === cb) {\n callbackInfoPool.put(info);\n fastRemoveAt(this.callbackInfos, i);\n --i;\n }\n }\n};\n\n/**\n * !#zh\n * 从列表中移除与指定目标相同调用者的事件。\n * @param target\n */\nproto.removeByTarget = function (target) {\n for (let i = 0; i < this.callbackInfos.length; ++i) {\n const info = this.callbackInfos[i];\n if (info && info.target === target) {\n callbackInfoPool.put(info);\n fastRemoveAt(this.callbackInfos, i);\n --i;\n }\n }\n};\n\n/**\n * !#zh\n * 移除指定编号事件。\n *\n * @param index\n */\nproto.cancel = function (index) {\n const info = this.callbackInfos[index];\n if (info) {\n callbackInfoPool.put(info);\n this.callbackInfos[index] = null;\n }\n this.containCanceled = true;\n};\n\n/**\n * !#zh\n * 注销所有事件。\n */\nproto.cancelAll = function () {\n for (let i = 0; i < this.callbackInfos.length; i++) {\n const info = this.callbackInfos[i];\n if (info) {\n callbackInfoPool.put(info);\n this.callbackInfos[i] = null;\n }\n }\n this.containCanceled = true;\n};\n\n// filter all removed callbacks and compact array\nproto.purgeCanceled = function () {\n for (let i = this.callbackInfos.length - 1; i >= 0; --i) {\n const info = this.callbackInfos[i];\n if (!info) {\n fastRemoveAt(this.callbackInfos, i);\n }\n }\n this.containCanceled = false;\n};\n\nproto.clear = function () {\n this.cancelAll();\n this.callbackInfos.length = 0;\n this.isInvoking = false;\n this.containCanceled = false;\n};\n\nconst MAX_SIZE = 16;\nlet callbackListPool = new js.Pool(function (info) {\n info.callbackInfos = [];\n info.isInvoking = false;\n info.containCanceled = false;\n return true;\n}, MAX_SIZE);\n\ncallbackListPool.get = function () {\n return this._get() || new CallbackList();\n};\n\n/**\n * !#en The callbacks invoker to handle and invoke callbacks by key.\n * !#zh CallbacksInvoker 用来根据 Key 管理并调用回调方法。\n * @class CallbacksInvoker\n */\nfunction CallbacksInvoker () {\n this._callbackTable = js.createMap(true);\n}\n\nproto = CallbacksInvoker.prototype;\n\n/**\n * !#zh\n * 事件添加管理\n *\n * @param key\n * @param callback\n * @param target\n * @param once\n */\nproto.on = function (key, callback, target, once) {\n let list = this._callbackTable[key];\n if (!list) {\n list = this._callbackTable[key] = callbackListPool.get();\n }\n let info = callbackInfoPool.get();\n info.set(callback, target, once);\n list.callbackInfos.push(info);\n};\n\n/**\n *\n * !#zh\n * 检查指定事件是否已注册回调。\n *\n * !#en\n * Check if the specified key has any registered callback. If a callback is also specified,\n * it will only return true if the callback is registered.\n *\n * @method hasEventListener\n * @param {String} key\n * @param {Function} [callback]\n * @param {Object} [target]\n * @return {Boolean}\n */\nproto.hasEventListener = function (key, callback, target) {\n const list = this._callbackTable[key];\n if (!list) {\n return false;\n }\n\n // check any valid callback\n const infos = list.callbackInfos;\n if (!callback) {\n // Make sure no cancelled callbacks\n if (list.isInvoking) {\n for (let i = 0; i < infos.length; ++i) {\n if (infos[i]) {\n return true;\n }\n }\n return false;\n }\n else {\n return infos.length > 0;\n }\n }\n\n for (let i = 0; i < infos.length; ++i) {\n const info = infos[i];\n if (info && info.callback === callback && info.target === target) {\n return true;\n }\n }\n return false;\n};\n\n/**\n * !#zh\n * 移除在特定事件类型中注册的所有回调或在某个目标中注册的所有回调。\n *\n * !#en\n * Removes all callbacks registered in a certain event type or all callbacks registered with a certain target\n * @method removeAll\n * @param {String|Object} keyOrTarget - The event key to be removed or the target to be removed\n */\nproto.removeAll = function (keyOrTarget) {\n if (typeof keyOrTarget === 'string') {\n // remove by key\n const list = this._callbackTable[keyOrTarget];\n if (list) {\n if (list.isInvoking) {\n list.cancelAll();\n }\n else {\n list.clear();\n callbackListPool.put(list);\n delete this._callbackTable[keyOrTarget];\n }\n }\n }\n else if (keyOrTarget) {\n // remove by target\n for (const key in this._callbackTable) {\n const list = this._callbackTable[key];\n if (list.isInvoking) {\n const infos = list.callbackInfos;\n for (let i = 0; i < infos.length; ++i) {\n const info = infos[i];\n if (info && info.target === keyOrTarget) {\n list.cancel(i);\n }\n }\n }\n else {\n list.removeByTarget(keyOrTarget);\n }\n }\n }\n};\n\n/**\n * !#zh\n * 删除之前与同类型,回调,目标注册的回调。\n *\n * @method off\n * @param {String} key\n * @param {Function} callback\n * @param {Object} [target]\n */\nproto.off = function (key, callback, target) {\n const list = this._callbackTable[key];\n if (list) {\n const infos = list.callbackInfos;\n for (let i = 0; i < infos.length; ++i) {\n const info = infos[i];\n if (info && info.callback === callback && info.target === target) {\n if (list.isInvoking) {\n list.cancel(i);\n }\n else {\n fastRemoveAt(infos, i);\n callbackInfoPool.put(info);\n }\n break;\n }\n }\n }\n};\n\n\n/**\n * !#en\n * Trigger an event directly with the event name and necessary arguments.\n * !#zh\n * 通过事件名发送自定义事件\n *\n * @method emit\n * @param {String} key - event type\n * @param {*} [arg1] - First argument\n * @param {*} [arg2] - Second argument\n * @param {*} [arg3] - Third argument\n * @param {*} [arg4] - Fourth argument\n * @param {*} [arg5] - Fifth argument\n * @example\n *\n * eventTarget.emit('fire', event);\n * eventTarget.emit('fire', message, emitter);\n */\nproto.emit = function (key, arg1, arg2, arg3, arg4, arg5) {\n const list = this._callbackTable[key];\n if (list) {\n const rootInvoker = !list.isInvoking;\n list.isInvoking = true;\n\n const infos = list.callbackInfos;\n for (let i = 0, len = infos.length; i < len; ++i) {\n const info = infos[i];\n if (info) {\n let target = info.target;\n let callback = info.callback;\n if (info.once) {\n this.off(key, callback, target);\n }\n\n if (target) {\n callback.call(target, arg1, arg2, arg3, arg4, arg5);\n }\n else {\n callback(arg1, arg2, arg3, arg4, arg5);\n }\n }\n }\n\n if (rootInvoker) {\n list.isInvoking = false;\n if (list.containCanceled) {\n list.purgeCanceled();\n }\n }\n }\n};\n\nif (CC_TEST) {\n cc._Test.CallbacksInvoker = CallbacksInvoker;\n}\n\nmodule.exports = CallbacksInvoker;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nfunction deepFlatten (strList, array) {\n for (var i = 0; i < array.length; i++) {\n var item = array[i];\n if (Array.isArray(item)) {\n deepFlatten(strList, item);\n }\n // else if (item instanceof Declaration) {\n // strList.push(item.toString());\n // }\n else {\n strList.push(item);\n }\n }\n}\n\nfunction flattenCodeArray (array) {\n var separator = CC_DEV ? '\\n' : '';\n var strList = [];\n deepFlatten(strList, array);\n return strList.join(separator);\n}\n\nmodule.exports = {\n flattenCodeArray\n};\n","/****************************************************************************\n Copyright (c) present Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport js from './js';\nimport ValueType from '../value-types/value-type';\nimport Vec2 from '../value-types/vec2';\nimport Vec3 from '../value-types/vec3';\nimport Vec4 from '../value-types/vec4';\nimport Color from '../value-types/color';\nimport Size from '../value-types/size';\nimport Rect from '../value-types/rect';\nimport Quat from '../value-types/quat';\nimport Mat4 from '../value-types/mat4';\n// import Attr from './attribute';\n\n/****************************************************************************\n * BUILT-IN TYPES / CONSTAINTS\n ****************************************************************************/\n\nconst SUPPORT_MIN_FORMAT_VERSION = 1;\nconst EMPTY_PLACEHOLDER = 0;\n\n// Used for Data.ValueType.\n// If a value type is not registered in this list, it will be serialized to Data.Class.\nconst BuiltinValueTypes: Array = [\n Vec2, // 0\n Vec3, // 1\n Vec4, // 2\n Quat, // 3\n Color, // 4\n Size, // 5\n Rect, // 6\n Mat4, // 7\n];\n\n// Used for Data.ValueTypeCreated.\nfunction BuiltinValueTypeParsers_xyzw (obj: Vec4, data: Array) {\n obj.x = data[1];\n obj.y = data[2];\n obj.z = data[3];\n obj.w = data[4];\n}\nconst BuiltinValueTypeSetters: Array<((obj: ValueType, data: Array) => void)> = [\n function (obj: Vec2, data: Array) {\n obj.x = data[1];\n obj.y = data[2];\n },\n function (obj: Vec3, data: Array) {\n obj.x = data[1];\n obj.y = data[2];\n obj.z = data[3];\n },\n BuiltinValueTypeParsers_xyzw, // Vec4\n BuiltinValueTypeParsers_xyzw, // Quat\n function (obj: Color, data: Array) {\n obj._val = data[1];\n },\n function (obj: Size, data: Array) {\n obj.width = data[1];\n obj.height = data[2];\n },\n function (obj: Rect, data: Array) {\n obj.x = data[1];\n obj.y = data[2];\n obj.width = data[3];\n obj.height = data[4];\n },\n function (obj: Mat4, data: Array) {\n Mat4.fromArray(obj, data, 1);\n }\n];\n\nfunction serializeBuiltinValueTypes(obj: ValueType): IValueTypeData | null {\n let ctor = obj.constructor as typeof ValueType;\n let typeId = BuiltinValueTypes.indexOf(ctor);\n switch (ctor) {\n case Vec2:\n // @ts-ignore\n return [typeId, obj.x, obj.y];\n case Vec3:\n // @ts-ignore\n return [typeId, obj.x, obj.y, obj.z];\n case Vec4:\n case Quat:\n // @ts-ignore\n return [typeId, obj.x, obj.y, obj.z, obj.w];\n case Color:\n // @ts-ignore\n return [typeId, obj._val];\n case Size:\n // @ts-ignore\n return [typeId, obj.width, obj.height];\n case Rect:\n // @ts-ignore\n return [typeId, obj.x, obj.y, obj.width, obj.height];\n case Mat4:\n // @ts-ignore\n let res: IValueTypeData = new Array(1 + 16);\n res[0] = typeId;\n Mat4.toArray(res, obj as Mat4, 1);\n return res;\n default:\n return null;\n }\n}\n\n// // TODO: Used for Data.TypedArray.\n// const TypedArrays = [\n// Float32Array,\n// Float64Array,\n//\n// Int8Array,\n// Int16Array,\n// Int32Array,\n//\n// Uint8Array,\n// Uint16Array,\n// Uint32Array,\n//\n// Uint8ClampedArray,\n// // BigInt64Array,\n// // BigUint64Array,\n// ];\n\n\n/****************************************************************************\n * TYPE DECLARATIONS\n ****************************************************************************/\n\n// Includes Bitwise NOT value.\n// Both T and U have non-negative integer ranges.\n// When the value >= 0 represents T\n// When the value is < 0, it represents ~U. Use ~x to extract the value of U.\nexport type Bnot = T|U;\n\n// Combines a boolean and a number into one value.\n// The number must >= 0.\n// When the value >= 0, the boolean is true, the number is value.\n// When the value < 0, the boolean is false, the number is ~value.\nexport type BoolAndNum = Bnot;\n\nexport type SharedString = string;\nexport type Empty = typeof EMPTY_PLACEHOLDER;\nexport type StringIndex = number;\nexport type InstanceIndex = number;\nexport type RootInstanceIndex = InstanceIndex;\nexport type NoNativeDep = boolean; // Indicates whether the asset depends on a native asset\nexport type RootInfo = BoolAndNum;\n\n// When the value >= 0 represents the string index\n// When the value is < 0, it just represents non-negative integer. Use ~x to extract the value.\nexport type StringIndexBnotNumber = Bnot;\n\n// A reverse index used to assign current parsing object to target command buffer so it could be assembled later.\n// Should >= REF.OBJ_OFFSET\nexport type ReverseIndex = number;\n\n// Used to index the current object\nexport type InstanceBnotReverseIndex = Bnot;\n\n/*@__DROP_PURE_EXPORT__*/\nconst enum DataTypeID {\n\n // Fields that can be assigned directly, can be values in any JSON, or even a complex JSON array, object (no type).\n // Contains null, no undefined, JSON does not support serialization of undefined.\n // This is the only type that supports null, and all other advanced fields are forbidden with null values.\n // If the value of an object is likely to be null, it needs to exist as a new class,\n // but the probability of this is very low and will be analyzed below.\n SimpleType = 0,\n\n //--------------------------------------------------------------------------\n // Except Simple, the rest belong to Advanced Type.\n\n // Rarely will it be NULL, as NULL will be dropped as the default value.\n InstanceRef,\n\n // Arrays of exactly equal types.\n // Arrays will have default values that developers will rarely assign to null manually.\n Array_InstanceRef,\n Array_AssetRefByInnerObj,\n\n // Embedded object\n // Rarely will it be NULL, as NULL will be dropped as the default value.\n Class,\n\n // Existing ValueType (created by the Class constructor).\n // Developers will rarely manually assign a null.\n ValueTypeCreated,\n\n // Resource reference for embedded objects (such as arrays), the value is the index of DEPEND_OBJS.\n // (The objects in INSTANCES do not need to dynamically resolve resource reference relationships, so there is no need to have the AssetRef type.)\n AssetRefByInnerObj,\n\n // Common TypedArray for cc.Node only. Never be null.\n TRS,\n\n // // From the point of view of simplified implementation,\n // // it is not supported to deserialize TypedArray that is initialized to null in the constructor.\n // // Also, the length of TypedArray cannot be changed.\n // // Developers will rarely manually assign a null.\n // TypedArray,\n\n // ValueType without default value (in arrays, dictionaries).\n // Developers will rarely manually assign a null.\n ValueType,\n\n Array_Class,\n\n // CustomizedClass embedded in Class\n CustomizedClass,\n\n // Universal dictionary with unlimited types of values (except TypedArray)\n Dict,\n\n // Universal arrays, of any type (except TypedArray) and can be unequal.\n // (The editor doesn't seem to have a good way of stopping arrays of unequal types either)\n Array,\n\n ARRAY_LENGTH,\n}\n\nexport type DataTypes = {\n [DataTypeID.SimpleType]: number | string | boolean | null | object;\n [DataTypeID.InstanceRef]: InstanceBnotReverseIndex;\n [DataTypeID.Array_InstanceRef]: Array;\n [DataTypeID.Array_AssetRefByInnerObj]: Array;\n [DataTypeID.Class]: IClassObjectData;\n [DataTypeID.ValueTypeCreated]: IValueTypeData;\n [DataTypeID.AssetRefByInnerObj]: number;\n [DataTypeID.TRS]: ITRSData;\n // [DataTypeID.TypedArray]: Array;\n [DataTypeID.ValueType]: IValueTypeData;\n [DataTypeID.Array_Class]: Array;\n [DataTypeID.CustomizedClass]: ICustomObjectData;\n [DataTypeID.Dict]: IDictData;\n [DataTypeID.Array]: IArrayData;\n};\n\nexport type PrimitiveObjectTypeID = (\n DataTypeID.SimpleType | // SimpleType also includes any pure JSON object\n DataTypeID.Array |\n DataTypeID.Array_Class |\n DataTypeID.Array_AssetRefByInnerObj |\n DataTypeID.Array_InstanceRef |\n DataTypeID.Dict\n);\n\nexport type AdvancedTypeID = Exclude\n\n\n// Collection of all data types\nexport type AnyData = DataTypes[keyof DataTypes];\n\nexport type AdvancedData = DataTypes[Exclude];\n\nexport type OtherObjectData = ICustomObjectDataContent | Exclude;\n\n// class Index of DataTypeID.CustomizedClass or PrimitiveObjectTypeID\nexport type OtherObjectTypeID = Bnot;\n\nexport interface Ctor extends Function {\n new(): T;\n}\n// Includes normal CCClass and fast defined class\nexport interface CCClass extends Ctor {\n __values__: string[]\n}\nexport type AnyCtor = Ctor;\nexport type AnyCCClass = CCClass;\n\n/**\n * If the value type is different, different Classes will be generated\n */\nconst CLASS_TYPE = 0;\nconst CLASS_KEYS = 1;\nconst CLASS_PROP_TYPE_OFFSET = 2;\nexport type IClass = [\n string|AnyCtor,\n string[],\n // offset - It is used to specify the correspondence between the elements in 1 and their AdvancedType,\n // which is only valid for AdvancedType.\n // When parsing, the type of IClass[1][x] is IClass[x + IClass[2]]\n // When serializing, IClass[2] = 2 + 1 - (The number of SimpleType)\n number,\n // The AdvancedType type corresponding to the property.\n ...DataTypeID[]\n];\n\n/**\n * Mask is used to define the properties and types that need to be deserialized.\n * Instances of the same class may have different Masks due to different default properties removed.\n */\nconst MASK_CLASS = 0;\nexport type IMask = [\n // The index of its Class\n number,\n // The indices of the property that needs to be deserialized in IClass, except that the last number represents OFFSET.\n // All properties before OFFSET are SimpleType, and those starting at OFFSET are AdvancedType.\n // default is 1\n ...number[]\n];\n\nconst OBJ_DATA_MASK = 0;\nexport type IClassObjectData = [\n // The index of its Mask\n number,\n // Starting from 1, the values corresponding to the properties in the Mask\n ...AnyData[]\n];\n\nexport type ICustomObjectDataContent = any;\n\nconst CUSTOM_OBJ_DATA_CLASS = 0;\nconst CUSTOM_OBJ_DATA_CONTENT = 1;\nexport interface ICustomObjectData extends Array {\n // The index of its Class\n [0]: number;\n // Content\n [1]: ICustomObjectDataContent;\n}\n\nconst VALUETYPE_SETTER = 0;\nexport type IValueTypeData = [\n // Predefined parsing function index\n number,\n // Starting with 1, the corresponding value in the attributes are followed in order\n ...number[]\n];\n\nexport type ITRSData = [number, number, number, number, number,\n number, number, number, number, number];\n\nconst DICT_JSON_LAYOUT = 0;\nexport interface IDictData extends Array {\n // The raw json object\n [0]: any,\n // key\n // Shared strings are not considered here, can be defined as CCClass if it is required.\n [1]: string;\n // value type\n // Should not be SimpleType, SimpleType is built directly into 0.\n [2]: AdvancedTypeID;\n // value\n [3]: AdvancedData;\n // More repeated key values\n [index: number]: any,\n}\n\nconst ARRAY_ITEM_VALUES = 0;\nexport type IArrayData = [\n AnyData[],\n // types\n ...DataTypeID[]\n];\n\n// const TYPEDARRAY_TYPE = 0;\n// const TYPEDARRAY_ELEMENTS = 1;\n// export interface ITypedArrayData extends Array {\n// [TYPEDARRAY_TYPE]: number,\n// [TYPEDARRAY_ELEMENTS]: number[],\n// }\n\n/*@__DROP_PURE_EXPORT__*/\nconst enum Refs {\n EACH_RECORD_LENGTH = 3,\n OWNER_OFFSET = 0,\n KEY_OFFSET = 1,\n TARGET_OFFSET = 2,\n}\n\nexport interface IRefs extends Array {\n // owner\n // The owner of all the objects in the front is of type object, starting from OFFSET * 3 are of type InstanceIndex\n [0]: (object | InstanceIndex),\n // property name\n [1]?: StringIndexBnotNumber;\n // target object\n [2]?: InstanceIndex;\n // All the following objects are arranged in the order of the first three values,\n // except that the last number represents OFFSET.\n [index: number]: any;\n}\n\n/*@__DROP_PURE_EXPORT__*/\nconst enum File {\n Version = 0,\n Context = 0,\n\n SharedUuids,\n SharedStrings,\n SharedClasses,\n SharedMasks,\n\n Instances,\n InstanceTypes,\n\n Refs,\n\n DependObjs,\n DependKeys,\n DependUuidIndices,\n\n ARRAY_LENGTH,\n}\n\n// Main file structure\nexport interface IFileData extends Array {\n // version\n [File.Version]: number | FileInfo | any;\n\n // Shared data area, the higher the number of references, the higher the position\n\n [File.SharedUuids]: SharedString[] | Empty; // Shared uuid strings for dependent assets\n [File.SharedStrings]: SharedString[] | Empty;\n [File.SharedClasses]: (IClass|string|AnyCCClass)[];\n [File.SharedMasks]: IMask[] | Empty; // Shared Object layouts for IClassObjectData\n\n // Data area\n\n // A one-dimensional array to represent object datas, layout is [...IClassObjectData[], ...OtherObjectData[], RootInfo]\n // If the last element is not RootInfo(number), the first element will be the root object to return and it doesn't have native asset\n [File.Instances]: (IClassObjectData|OtherObjectData|RootInfo)[];\n [File.InstanceTypes]: OtherObjectTypeID[] | Empty;\n // Object references infomation\n [File.Refs]: IRefs | Empty;\n\n // Result area\n\n // Asset-dependent objects that are deserialized and parsed into object arrays\n [File.DependObjs]: (object|InstanceIndex)[];\n // Asset-dependent key name or array index\n [File.DependKeys]: (StringIndexBnotNumber|string)[];\n // UUID of dependent assets\n [File.DependUuidIndices]: (StringIndex|string)[];\n}\n\n// type Body = Pick\ntype Shared = Pick\nconst PACKED_SECTIONS = File.Instances;\nexport interface IPackedFileData extends Shared {\n [PACKED_SECTIONS]: IFileData[];\n}\n\ninterface ICustomHandler {\n result: Details,\n customEnv: any,\n}\ntype ClassFinder = {\n (type: string): AnyCtor;\n // // for editor\n // onDereferenced: (curOwner: object, curPropName: string, newOwner: object, newPropName: string) => void;\n};\ninterface IOptions extends Partial {\n classFinder?: ClassFinder;\n _version?: number;\n}\ninterface ICustomClass {\n _deserialize: (content: any, context: ICustomHandler) => void;\n}\n\n/****************************************************************************\n * IMPLEMENTS\n ****************************************************************************/\n\n/**\n * !#en Contains meta information collected during deserialization\n * !#zh 包含反序列化后附带的元信息\n * @class Details\n */\nclass Details {\n /**\n * the obj list whose field needs to load asset by uuid\n * @property {Object[]} uuidObjList\n */\n uuidObjList: IFileData[File.DependObjs] | null = null;\n /**\n * the corresponding field name which referenced to the asset\n * @property {(String|Number)[]} uuidPropList\n */\n uuidPropList: IFileData[File.DependKeys] | null = null;\n /**\n * list of the depends assets' uuid\n * @property {String[]} uuidList\n */\n uuidList: IFileData[File.DependUuidIndices] | null = null;\n\n static pool = new js.Pool(function (obj) {\n obj.reset();\n }, 5);\n\n /**\n * @method init\n * @param {Object} data\n */\n init (data: IFileData) {\n this.uuidObjList = data[File.DependObjs];\n this.uuidPropList = data[File.DependKeys];\n this.uuidList = data[File.DependUuidIndices];\n }\n\n /**\n * @method reset\n */\n reset () {\n this.uuidList = null;\n this.uuidObjList = null;\n this.uuidPropList = null;\n };\n\n /**\n * @method push\n * @param {Object} obj\n * @param {String} propName\n * @param {String} uuid\n */\n push (obj: object, propName: string, uuid: string) {\n (this.uuidObjList as object[]).push(obj);\n (this.uuidPropList as string[]).push(propName);\n (this.uuidList as string[]).push(uuid);\n };\n}\nDetails.pool.get = function () {\n return this._get() || new Details();\n};\nif (CC_EDITOR || CC_TEST) {\n // @ts-ignore\n Details.prototype.assignAssetsBy = function (getter: (uuid: string) => any) {\n for (var i = 0, len = (this.uuidList as string[]).length; i < len; i++) {\n var obj = (this.uuidObjList as object)[i];\n var prop = (this.uuidPropList as any[])[i];\n var uuid = (this.uuidList as string[])[i];\n obj[prop] = getter(uuid as string);\n }\n };\n}\n\nfunction dereference(refs: IRefs, instances: IFileData[File.Instances], strings: IFileData[File.SharedStrings]): void {\n let dataLength = refs.length - 1;\n let i = 0;\n // owner is object\n let instanceOffset: number = refs[dataLength] * Refs.EACH_RECORD_LENGTH;\n for (; i < instanceOffset; i += Refs.EACH_RECORD_LENGTH) {\n const owner = refs[i] as any;\n\n const target = instances[refs[i + Refs.TARGET_OFFSET]];\n const keyIndex = refs[i + Refs.KEY_OFFSET] as StringIndexBnotNumber;\n if (keyIndex >= 0) {\n owner[strings[keyIndex]] = target;\n }\n else {\n owner[~keyIndex] = target;\n }\n }\n // owner is instance index\n for (; i < dataLength; i += Refs.EACH_RECORD_LENGTH) {\n const owner = instances[refs[i]] as any;\n\n const target = instances[refs[i + Refs.TARGET_OFFSET]];\n const keyIndex = refs[i + Refs.KEY_OFFSET] as StringIndexBnotNumber;\n if (keyIndex >= 0) {\n owner[strings[keyIndex]] = target;\n }\n else {\n owner[~keyIndex] = target;\n }\n }\n}\n\n//\n\nfunction deserializeCCObject (data: IFileData, objectData: IClassObjectData) {\n let mask = data[File.SharedMasks][objectData[0]];\n let clazz = mask[0];\n let ctor = clazz[0] as Exclude;\n // if (!ctor) {\n // return null;\n // }\n\n let obj = new ctor();\n\n let keys = clazz[1];\n let classTypeOffset = clazz[2];\n let maskTypeOffset = mask[mask.length - 1];\n\n // parse simple type\n let i = 0 + 1;\n for (; i < maskTypeOffset; ++i) {\n let key = keys[mask[i]];\n obj[key] = objectData[i];\n }\n\n // parse advanced type\n for (; i < objectData.length; ++i) {\n let key = keys[mask[i]];\n let type = clazz[mask[i] + classTypeOffset];\n let op = ASSIGNMENTS[type];\n op(data, obj, key, objectData[i]);\n }\n\n return obj;\n}\n\nfunction deserializeCustomCCObject (data: IFileData, ctor: Ctor, value: ICustomObjectDataContent) {\n let obj = new ctor();\n if (obj._deserialize) {\n obj._deserialize(value, data[File.Context]);\n }\n else {\n cc.errorID(5303, js.getClassName(ctor));\n }\n return obj;\n}\n\n// Parse Functions\n\ntype ParseFunction = (data: IFileData, owner: any, key: string, value: AnyData) => void;\n\nfunction assignSimple (data: IFileData, owner: any, key: string, value: DataTypes[DataTypeID.SimpleType]) {\n owner[key] = value;\n}\n\nfunction assignInstanceRef (data: IFileData, owner: any, key: string, value: InstanceBnotReverseIndex) {\n if (value >= 0) {\n owner[key] = data[File.Instances][value];\n }\n else {\n (data[File.Refs] as IRefs)[(~value) * Refs.EACH_RECORD_LENGTH] = owner;\n }\n}\n\nfunction genArrayParser (parser: ParseFunction): ParseFunction {\n return function (data: IFileData, owner: any, key: string, value: Array) {\n owner[key] = value;\n for (let i = 0; i < value.length; ++i) {\n // @ts-ignore\n parser(data, value, i, value[i]);\n }\n };\n}\n\nfunction parseAssetRefByInnerObj (data: IFileData, owner: any, key: string, value: number) {\n owner[key] = null;\n data[File.DependObjs][value] = owner;\n}\n\nfunction parseClass (data: IFileData, owner: any, key: string, value: IClassObjectData) {\n owner[key] = deserializeCCObject(data, value);\n}\n\nfunction parseCustomClass (data: IFileData, owner: any, key: string, value: ICustomObjectData) {\n let ctor = data[File.SharedClasses][value[0]] as CCClass;\n owner[key] = deserializeCustomCCObject(data, ctor, value[1]);\n}\n\nfunction parseValueTypeCreated (data: IFileData, owner: any, key: string, value: IValueTypeData) {\n BuiltinValueTypeSetters[value[0]](owner[key], value);\n}\n\nfunction parseValueType (data: IFileData, owner: any, key: string, value: IValueTypeData) {\n let val: ValueType = new BuiltinValueTypes[value[0]]();\n BuiltinValueTypeSetters[value[0]](val, value);\n owner[key] = val;\n}\n\nfunction parseTRS (data: IFileData, owner: any, key: string, value: ITRSData) {\n let typedArray = owner[key] as (Float32Array | Float64Array);\n typedArray.set(value);\n}\n\nfunction parseDict (data: IFileData, owner: any, key: string, value: IDictData) {\n let dict = value[0];\n owner[key] = dict;\n for (let i = 0 + 1; i < value.length; i += 3) {\n let key = value[i] as string;\n let type = value[i + 1] as DataTypeID;\n let subValue = value[i + 2] as AnyData;\n let op = ASSIGNMENTS[type];\n op(data, dict, key, subValue);\n }\n}\n\nfunction parseArray (data: IFileData, owner: any, key: string, value: IArrayData) {\n let array = value[0];\n owner[key] = array;\n for (let i = 0; i < array.length; ++i) {\n let subValue = array[i] as AnyData;\n let type = value[i + 1] as DataTypeID;\n if (type !== DataTypeID.SimpleType) {\n let op = ASSIGNMENTS[type];\n // @ts-ignore\n op(data, array, i, subValue);\n }\n }\n}\n\n// function parseTypedArray (data: IFileData, owner: any, key: string, value: ITypedArrayData) {\n// let val: ValueType = new TypedArrays[value[TYPEDARRAY_TYPE]]();\n// BuiltinValueTypeSetters[value[0]](val, value);\n// // obj = new window[serialized.ctor](array.length);\n// // for (let i = 0; i < array.length; ++i) {\n// // obj[i] = array[i];\n// // }\n// // return obj;\n// owner[key] = val;\n// }\n\nconst ASSIGNMENTS = new Array(DataTypeID.ARRAY_LENGTH);\nASSIGNMENTS[DataTypeID.SimpleType] = assignSimple; // Only be used in the instances array\nASSIGNMENTS[DataTypeID.InstanceRef] = assignInstanceRef;\nASSIGNMENTS[DataTypeID.Array_InstanceRef] = genArrayParser(assignInstanceRef);\nASSIGNMENTS[DataTypeID.Array_AssetRefByInnerObj] = genArrayParser(parseAssetRefByInnerObj);\nASSIGNMENTS[DataTypeID.Class] = parseClass;\nASSIGNMENTS[DataTypeID.ValueTypeCreated] = parseValueTypeCreated;\nASSIGNMENTS[DataTypeID.AssetRefByInnerObj] = parseAssetRefByInnerObj;\nASSIGNMENTS[DataTypeID.TRS] = parseTRS;\nASSIGNMENTS[DataTypeID.ValueType] = parseValueType;\nASSIGNMENTS[DataTypeID.Array_Class] = genArrayParser(parseClass);\nASSIGNMENTS[DataTypeID.CustomizedClass] = parseCustomClass;\nASSIGNMENTS[DataTypeID.Dict] = parseDict;\nASSIGNMENTS[DataTypeID.Array] = parseArray;\n// ASSIGNMENTS[DataTypeID.TypedArray] = parseTypedArray;\n\n\n\nfunction parseInstances (data: IFileData): RootInstanceIndex {\n let instances = data[File.Instances];\n let instanceTypes = data[File.InstanceTypes];\n let instanceTypesLen = instanceTypes === 0 ? 0 : (instanceTypes as OtherObjectTypeID[]).length;\n let rootIndex = instances[instances.length - 1];\n let normalObjectCount = instances.length - instanceTypesLen;\n if (typeof rootIndex !== 'number') {\n rootIndex = 0;\n }\n else {\n if (rootIndex < 0) {\n rootIndex = ~rootIndex;\n }\n --normalObjectCount;\n }\n\n // DataTypeID.Class\n\n let insIndex = 0;\n for (; insIndex < normalObjectCount; ++insIndex) {\n instances[insIndex] = deserializeCCObject(data, instances[insIndex] as IClassObjectData);\n }\n\n let classes = data[File.SharedClasses];\n for (let typeIndex = 0; typeIndex < instanceTypesLen; ++typeIndex, ++insIndex) {\n let type = instanceTypes[typeIndex] as OtherObjectTypeID;\n let eachData = instances[insIndex];\n if (type >= 0) {\n\n // class index for DataTypeID.CustomizedClass\n\n let ctor = classes[type] as CCClass; // class\n instances[insIndex] = deserializeCustomCCObject(data, ctor, eachData as ICustomObjectDataContent);\n }\n else {\n\n // Other\n\n type = (~type) as PrimitiveObjectTypeID;\n let op = ASSIGNMENTS[type];\n // @ts-ignore\n op(data, instances, insIndex, eachData);\n }\n }\n\n return rootIndex;\n}\n\n// const DESERIALIZE_AS = Attr.DELIMETER + 'deserializeAs';\n// function deserializeAs(klass: AnyCCClass, klassLayout: IClass) {\n// var attrs = Attr.getClassAttrs(klass);\n// let keys = klassLayout[1];\n// for (let i = 0; i < keys.length; ++i) {\n// let newKey = attrs[keys[i] + DESERIALIZE_AS];\n// if (newKey) {\n// // @ts-ignore\n// if (keys.includes(newKey)) {\n// // %s cannot be deserialized by property %s because %s was also present in the serialized data.\n// cc.warnID(, newKey, keys[i], newKey);\n// }\n// else {\n// keys[i] = newKey;\n// }\n// }\n// }\n// }\n\nfunction getMissingClass (hasCustomFinder, type) {\n if (!hasCustomFinder) {\n // @ts-ignore\n deserialize.reportMissingClass(type);\n }\n return Object;\n}\nfunction doLookupClass(classFinder, type: string, container: any[], index: number, silent: boolean, hasCustomFinder) {\n let klass = classFinder(type);\n if (!klass) {\n // if (klass.__FSA__) {\n // deserializeAs(klass, klassLayout as IClass);\n // }\n if (silent) {\n // generate a lazy proxy for ctor\n container[index] = (function (container, index, type) {\n return function proxy () {\n let klass = classFinder(type) || getMissingClass(hasCustomFinder, type);\n container[index] = klass;\n return new klass();\n };\n })(container, index, type);\n return;\n }\n else {\n klass = getMissingClass(hasCustomFinder, type);\n }\n }\n container[index] = klass;\n}\n\nfunction lookupClasses (data: IPackedFileData, silent: boolean, customFinder?: ClassFinder) {\n let classFinder = customFinder || js._getClassById;\n let classes = data[File.SharedClasses];\n for (let i = 0; i < classes.length; ++i) {\n let klassLayout = classes[i];\n if (typeof klassLayout !== 'string') {\n if (CC_DEBUG) {\n if (typeof klassLayout[0] === 'function') {\n throw new Error('Can not deserialize the same JSON data again.');\n }\n }\n let type: string = klassLayout[0];\n doLookupClass(classFinder, type, klassLayout as IClass, CLASS_TYPE, silent, customFinder);\n }\n else {\n doLookupClass(classFinder, klassLayout, classes, i, silent, customFinder);\n }\n }\n}\n\nfunction cacheMasks (data: IPackedFileData) {\n let masks = data[File.SharedMasks];\n if (masks) {\n let classes = data[File.SharedClasses];\n for (let i = 0; i < masks.length; ++i) {\n let mask = masks[i];\n // @ts-ignore\n mask[0] = classes[mask[0]];\n }\n }\n}\n\nfunction parseResult (data: IFileData) {\n let instances = data[File.Instances];\n let sharedStrings = data[File.SharedStrings];\n let dependSharedUuids = data[File.SharedUuids];\n\n let dependObjs = data[File.DependObjs];\n let dependKeys = data[File.DependKeys];\n let dependUuids = data[File.DependUuidIndices];\n\n for (let i = 0; i < dependObjs.length; ++i) {\n let obj: any = dependObjs[i];\n if (typeof obj === 'number') {\n dependObjs[i] = instances[obj];\n }\n else {\n // assigned by DataTypeID.AssetRefByInnerObj or added by Details object directly in _deserialize\n }\n let key: any = dependKeys[i];\n if (typeof key === 'number') {\n if (key >= 0) {\n key = sharedStrings[key];\n }\n else {\n key = ~key;\n }\n dependKeys[i] = key;\n }\n else {\n // added by Details object directly in _deserialize\n }\n let uuid = dependUuids[i];\n if (typeof uuid === 'number') {\n dependUuids[i] = (dependSharedUuids as SharedString[])[uuid as StringIndex];\n }\n else {\n // added by Details object directly in _deserialize\n }\n }\n}\n\nexport default function deserialize (data: IFileData, details: Details, options?: IOptions): object {\n // @ts-ignore\n if (CC_EDITOR && Buffer.isBuffer(data)) {\n // @ts-ignore\n data = data.toString();\n }\n if (typeof data === 'string') {\n data = JSON.parse(data);\n }\n let borrowDetails = !details;\n details = details || Details.pool.get();\n details.init(data);\n options = options || {};\n\n let version = data[File.Version];\n let preprocessed = false;\n if (typeof version === 'object') {\n preprocessed = version.preprocessed;\n version = version.version;\n }\n if (version < SUPPORT_MIN_FORMAT_VERSION) {\n throw new Error(cc.debug.getError(5304, version));\n }\n options._version = version;\n options.result = details;\n data[File.Context] = options;\n\n if (!preprocessed) {\n lookupClasses(data, false, options.classFinder);\n cacheMasks(data);\n }\n\n cc.game._isCloning = true;\n let instances = data[File.Instances];\n let rootIndex = parseInstances(data);\n cc.game._isCloning = false;\n\n if (data[File.Refs]) {\n dereference(data[File.Refs] as IRefs, instances, data[File.SharedStrings]);\n }\n\n parseResult(data);\n\n if (borrowDetails) {\n Details.pool.put(details);\n }\n\n return instances[rootIndex];\n};\n\ndeserialize.Details = Details;\n\nclass FileInfo {\n declare version: number;\n preprocessed = true;\n constructor (version: number) {\n this.version = version;\n }\n}\n\nexport function unpackJSONs (data: IPackedFileData, classFinder?: ClassFinder): IFileData[] {\n if (data[File.Version] < SUPPORT_MIN_FORMAT_VERSION) {\n throw new Error(cc.debug.getError(5304, data[File.Version]));\n }\n lookupClasses(data, true, classFinder);\n cacheMasks(data);\n\n let version = new FileInfo(data[File.Version]);\n let sharedUuids = data[File.SharedUuids];\n let sharedStrings = data[File.SharedStrings];\n let sharedClasses = data[File.SharedClasses];\n let sharedMasks = data[File.SharedMasks];\n\n let sections = data[PACKED_SECTIONS];\n for (let i = 0; i < sections.length; ++i) {\n sections[i].unshift(version, sharedUuids, sharedStrings, sharedClasses, sharedMasks);\n }\n return sections;\n}\n\nexport function packCustomObjData (type: string, data: IClassObjectData|OtherObjectData, hasNativeDep?: boolean): IFileData {\n return [\n SUPPORT_MIN_FORMAT_VERSION, EMPTY_PLACEHOLDER, EMPTY_PLACEHOLDER,\n [type],\n EMPTY_PLACEHOLDER,\n hasNativeDep ? [data, ~0] : [data],\n [0],\n EMPTY_PLACEHOLDER, [], [], []\n ];\n}\n\nexport function hasNativeDep (data: IFileData): boolean {\n let instances = data[File.Instances];\n let rootInfo = instances[instances.length - 1];\n if (typeof rootInfo !== 'number') {\n return false;\n }\n else {\n return rootInfo < 0;\n }\n}\n\nif (CC_PREVIEW) {\n deserialize.isCompiledJson = function (json: object): boolean {\n if (Array.isArray(json)) {\n let version = json[0];\n // array[0] will not be a number in the editor version\n return typeof version === 'number' || version instanceof FileInfo;\n }\n else {\n return false;\n }\n };\n}\n\nexport function getDependUuidList (json: IFileData): Array {\n let sharedUuids = json[File.SharedUuids];\n return json[File.DependUuidIndices].map(index => sharedUuids[index]);\n}\n\nif (CC_EDITOR || CC_TEST) {\n cc._deserializeCompiled = deserialize;\n deserialize.macros = {\n EMPTY_PLACEHOLDER,\n CUSTOM_OBJ_DATA_CLASS,\n CUSTOM_OBJ_DATA_CONTENT,\n CLASS_TYPE,\n CLASS_KEYS,\n CLASS_PROP_TYPE_OFFSET,\n MASK_CLASS,\n OBJ_DATA_MASK,\n DICT_JSON_LAYOUT,\n ARRAY_ITEM_VALUES,\n PACKED_SECTIONS,\n };\n deserialize._BuiltinValueTypes = BuiltinValueTypes;\n deserialize._serializeBuiltinValueTypes = serializeBuiltinValueTypes;\n}\n\nif (CC_TEST) {\n cc._Test.deserializeCompiled = {\n deserialize,\n dereference,\n deserializeCCObject,\n deserializeCustomCCObject,\n parseInstances,\n parseResult,\n cacheMasks,\n File: {\n Version: File.Version,\n Context: File.Context,\n SharedUuids: File.SharedUuids,\n SharedStrings: File.SharedStrings,\n SharedClasses: File.SharedClasses,\n SharedMasks: File.SharedMasks,\n Instances: File.Instances,\n InstanceTypes: File.InstanceTypes,\n Refs: File.Refs,\n DependObjs: File.DependObjs,\n DependKeys: File.DependKeys,\n DependUuidIndices: File.DependUuidIndices,\n // ArrayLength: File.ArrayLength,\n },\n DataTypeID: {\n SimpleType: DataTypeID.SimpleType,\n InstanceRef: DataTypeID.InstanceRef,\n Array_InstanceRef: DataTypeID.Array_InstanceRef,\n Array_AssetRefByInnerObj: DataTypeID.Array_AssetRefByInnerObj,\n Class: DataTypeID.Class,\n ValueTypeCreated: DataTypeID.ValueTypeCreated,\n AssetRefByInnerObj: DataTypeID.AssetRefByInnerObj,\n TRS: DataTypeID.TRS,\n ValueType: DataTypeID.ValueType,\n Array_Class: DataTypeID.Array_Class,\n CustomizedClass: DataTypeID.CustomizedClass,\n Dict: DataTypeID.Dict,\n Array: DataTypeID.Array,\n // TypedArray: DataTypeID.TypedArray,\n },\n BuiltinValueTypes,\n unpackJSONs,\n };\n}\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2020 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport deserializeForCompiled from './deserialize-compiled';\n\ndeserializeForCompiled.reportMissingClass = function (id) {\n if (CC_EDITOR && Editor.Utils.UuidUtils.isUuid(id)) {\n id = Editor.Utils.UuidUtils.decompressUuid(id);\n cc.warnID(5301, id);\n }\n else {\n cc.warnID(5302, id);\n }\n};\n\nif (CC_BUILD) {\n cc.deserialize = deserializeForCompiled;\n}\nelse {\n let deserializeForEditor = require('./deserialize-editor');\n\n cc.deserialize = function (data, details, options) {\n if (CC_EDITOR && Buffer.isBuffer(data)) {\n data = data.toString();\n }\n if (typeof data === 'string') {\n data = JSON.parse(data);\n }\n if (CC_PREVIEW) {\n // support for loading Asset Bundle from server\n if (deserializeForCompiled.isCompiledJson(data)) {\n return deserializeForCompiled(data, details, options);\n }\n }\n return deserializeForEditor(data, details, options);\n };\n cc.deserialize.reportMissingClass = deserializeForCompiled.reportMissingClass;\n cc.deserialize.Details = deserializeForEditor.Details;\n}\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n// ID generater for runtime\n\nvar NonUuidMark = '.';\n\n/*\n * @param {string} [category] - You can specify a unique category to avoid id collision with other instance of IdGenerater\n */\nfunction IdGenerater (category) {\n // init with a random id to emphasize that the returns id should not be stored in persistence data\n this.id = 0 | (Math.random() * 998);\n \n this.prefix = category ? (category + NonUuidMark) : '';\n}\n\n/*\n * @method getNewId\n * @return {string}\n */\nIdGenerater.prototype.getNewId = function () {\n return this.prefix + (++this.id);\n};\n\n/*\n * The global id generater might have a conflict problem once every 365 days,\n * if the game runs at 60 FPS and each frame 4760273 counts of new id are requested.\n */\nIdGenerater.global = new IdGenerater('global');\n\nmodule.exports = IdGenerater;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nrequire('./js');\nrequire('./CCClass');\nrequire('./CCClassDecorator');\nrequire('./CCEnum');\nrequire('./CCObject');\nrequire('./callbacks-invoker');\nrequire('./deserialize');\nrequire('./instantiate');\nrequire('./instantiate-jit');\nrequire('./requiring-frame');\nrequire('./CCSys');\nrequire('./CCMacro');\n\nif (!(CC_EDITOR && Editor.isMainProcess)) {\n require('./CCVisibleRect');\n}","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n// Some helper methods for compile instantiation code\n\nvar CCObject = require('./CCObject');\nvar Destroyed = CCObject.Flags.Destroyed;\nvar PersistentMask = CCObject.Flags.PersistentMask;\nvar Attr = require('./attribute');\nvar js = require('./js');\nvar CCClass = require('./CCClass');\nvar Compiler = require('./compiler');\n\nvar DEFAULT = Attr.DELIMETER + 'default';\nvar IDENTIFIER_RE = CCClass.IDENTIFIER_RE;\nvar escapeForJS = CCClass.escapeForJS;\n\nconst VAR = 'var ';\nconst LOCAL_OBJ = 'o';\nconst LOCAL_TEMP_OBJ = 't';\nconst LOCAL_ARRAY = 'a';\nconst LINE_INDEX_OF_NEW_OBJ = 0;\n\nconst DEFAULT_MODULE_CACHE = {\n 'cc.Node': 'cc.Node',\n 'cc.Sprite': 'cc.Sprite',\n 'cc.Label': 'cc.Label',\n 'cc.Button': 'cc.Button',\n 'cc.Widget': 'cc.Widget',\n 'cc.Animation': 'cc.Animation',\n 'cc.ClickEvent': false,\n 'cc.PrefabInfo': false\n};\n\ntry {\n // compatible for IE\n !Float32Array.name && (Float32Array.name = 'Float32Array');\n !Float64Array.name && (Float64Array.name = 'Float64Array');\n\n !Int8Array.name && (Int8Array.name = 'Int8Array');\n !Int16Array.name && (Int16Array.name = 'Int16Array');\n !Int32Array.name && (Int32Array.name = 'Int32Array');\n\n !Uint8Array.name && (Uint8Array.name = 'Uint8Array');\n !Uint16Array.name && (Uint16Array.name = 'Uint16Array');\n !Uint32Array.name && (Uint32Array.name = 'Uint32Array');\n\n !Uint8ClampedArray.name && (Uint8ClampedArray.name = 'Uint8ClampedArray');\n}\ncatch (e) {}\n\n// compatible for iOS 9\nfunction getTypedArrayName (constructor) {\n if (constructor === Float32Array) { return 'Float32Array'; }\n else if (constructor === Float64Array) { return 'Float64Array'; }\n\n else if (constructor === Int8Array) { return 'Int8Array'; }\n else if (constructor === Int16Array) { return 'Int16Array'; }\n else if (constructor === Int32Array) { return 'Int32Array'; }\n\n else if (constructor === Uint8Array) { return 'Uint8Array'; }\n else if (constructor === Uint16Array) { return 'Uint16Array'; }\n else if (constructor === Uint32Array) { return 'Uint32Array'; }\n\n else if (constructor === Uint8ClampedArray) { return 'Uint8ClampedArray'; }\n else {\n throw new Error(`Unknown TypedArray to instantiate: ${constructor}`);\n }\n}\n\n// HELPER CLASSES\n\n// ('foo', 'bar')\n// -> 'var foo = bar;'\nfunction Declaration (varName, expression) {\n this.varName = varName;\n this.expression = expression;\n}\nDeclaration.prototype.toString = function () {\n return VAR + this.varName + '=' + this.expression + ';';\n};\n\n// ('a =', 'var b = x')\n// -> 'var b = a = x';\n// ('a =', 'x')\n// -> 'a = x';\nfunction mergeDeclaration (statement, expression) {\n if (expression instanceof Declaration) {\n return new Declaration(expression.varName, statement + expression.expression);\n }\n else {\n return statement + expression;\n }\n}\n\n// ('a', ['var b = x', 'b.foo = bar'])\n// -> 'var b = a = x;'\n// -> 'b.foo = bar;'\n// ('a', 'var b = x')\n// -> 'var b = a = x;'\n// ('a', 'x')\n// -> 'a = x;'\nfunction writeAssignment (codeArray, statement, expression) {\n if (Array.isArray(expression)) {\n expression[0] = mergeDeclaration(statement, expression[0]);\n codeArray.push(expression);\n }\n else {\n codeArray.push(mergeDeclaration(statement, expression) + ';');\n }\n}\n\n// ('foo', 'bar')\n// -> 'targetExpression.foo = bar'\n// ('foo1', 'bar1')\n// ('foo2', 'bar2')\n// -> 't = targetExpression;'\n// -> 't.foo1 = bar1;'\n// -> 't.foo2 = bar2;'\nfunction Assignments (targetExpression) {\n this._exps = [];\n this._targetExp = targetExpression;\n}\nAssignments.prototype.append = function (key, expression) {\n this._exps.push([key, expression]);\n};\nAssignments.prototype.writeCode = function (codeArray) {\n var targetVar;\n if (this._exps.length > 1) {\n codeArray.push(LOCAL_TEMP_OBJ + '=' + this._targetExp + ';');\n targetVar = LOCAL_TEMP_OBJ;\n }\n else if (this._exps.length === 1) {\n targetVar = this._targetExp;\n }\n else {\n return;\n }\n for (var i = 0; i < this._exps.length; i++) {\n var pair = this._exps[i];\n writeAssignment(codeArray, targetVar + getPropAccessor(pair[0]) + '=', pair[1]);\n }\n};\n\nAssignments.pool = new js.Pool(function (obj) {\n obj._exps.length = 0;\n obj._targetExp = null;\n }, 1);\nAssignments.pool.get = function (targetExpression) {\n var cache = this._get() || new Assignments();\n cache._targetExp = targetExpression;\n return cache;\n};\n\n// HELPER FUNCTIONS\n\nfunction equalsToDefault (def, value) {\n if (typeof def === 'function') {\n try {\n def = def();\n }\n catch (e) {\n return false;\n }\n }\n if (def === value) {\n return true;\n }\n if (def && value &&\n typeof def === 'object' && typeof value === 'object' &&\n def.constructor === value.constructor)\n {\n if (def instanceof cc.ValueType) {\n if (def.equals(value)) {\n return true;\n }\n }\n else if (Array.isArray(def)) {\n return def.length === 0 && value.length === 0;\n }\n else if (def.constructor === Object) {\n return js.isEmptyObject(def) && js.isEmptyObject(value);\n }\n }\n return false;\n}\n\nfunction getPropAccessor (key) {\n return IDENTIFIER_RE.test(key) ? ('.' + key) : ('[' + escapeForJS(key) + ']');\n}\n\n//\n\n/*\n * Variables:\n * {Object[]} O - objs list\n * {Function[]} F - constructor list\n * {Node} [R] - specify an instantiated prefabRoot that all references to prefabRoot in prefab will redirect to\n * {Object} o - current creating object\n */\n\n/*\n * @param {Object} obj - the object to parse\n * @param {Node} [parent]\n */\nfunction Parser (obj, parent) {\n this.parent = parent;\n\n this.objsToClear_iN$t = []; // used to reset _iN$t variable\n this.codeArray = [];\n\n // datas for generated code\n this.objs = [];\n this.funcs = [];\n\n this.funcModuleCache = js.createMap();\n js.mixin(this.funcModuleCache, DEFAULT_MODULE_CACHE);\n\n // {String[]} - variable names for circular references,\n // not really global, just local variables shared between sub functions\n this.globalVariables = [];\n // incremental id for new global variables\n this.globalVariableId = 0;\n // incremental id for new local variables\n this.localVariableId = 0;\n\n // generate codeArray\n //if (Array.isArray(obj)) {\n // this.codeArray.push(this.instantiateArray(obj));\n //}\n //else {\n this.codeArray.push(VAR + LOCAL_OBJ + ',' + LOCAL_TEMP_OBJ + ';',\n 'if(R){',\n LOCAL_OBJ + '=R;',\n '}else{',\n LOCAL_OBJ + '=R=new ' + this.getFuncModule(obj.constructor, true) + '();',\n '}');\n js.value(obj, '_iN$t', { globalVar: 'R' }, true);\n this.objsToClear_iN$t.push(obj);\n this.enumerateObject(this.codeArray, obj);\n //}\n\n // generate code\n var globalVariablesDeclaration;\n if (this.globalVariables.length > 0) {\n globalVariablesDeclaration = VAR + this.globalVariables.join(',') + ';';\n }\n var code = Compiler.flattenCodeArray(['return (function(R){',\n globalVariablesDeclaration || [],\n this.codeArray,\n 'return o;',\n '})']);\n\n // generate method and bind with objs\n this.result = Function('O', 'F', code)(this.objs, this.funcs);\n\n // if (CC_TEST && !isPhantomJS) {\n // console.log(code);\n // }\n\n // cleanup\n for (var i = 0, len = this.objsToClear_iN$t.length; i < len; ++i) {\n this.objsToClear_iN$t[i]._iN$t = null;\n }\n this.objsToClear_iN$t.length = 0;\n}\n\nvar proto = Parser.prototype;\n\nproto.getFuncModule = function (func, usedInNew) {\n var clsName = js.getClassName(func);\n if (clsName) {\n var cache = this.funcModuleCache[clsName];\n if (cache) {\n return cache;\n }\n else if (cache === undefined) {\n var clsNameIsModule = clsName.indexOf('.') !== -1;\n if (clsNameIsModule) {\n try {\n // ensure is module\n clsNameIsModule = (func === Function('return ' + clsName)());\n if (clsNameIsModule) {\n this.funcModuleCache[clsName] = clsName;\n return clsName;\n }\n }\n catch (e) {}\n }\n }\n }\n var index = this.funcs.indexOf(func);\n if (index < 0) {\n index = this.funcs.length;\n this.funcs.push(func);\n }\n var res = 'F[' + index + ']';\n if (usedInNew) {\n res = '(' + res + ')';\n }\n this.funcModuleCache[clsName] = res;\n return res;\n};\n\nproto.getObjRef = function (obj) {\n var index = this.objs.indexOf(obj);\n if (index < 0) {\n index = this.objs.length;\n this.objs.push(obj);\n }\n return 'O[' + index + ']';\n};\n\nproto.setValueType = function (codeArray, defaultValue, srcValue, targetExpression) {\n var assignments = Assignments.pool.get(targetExpression);\n var fastDefinedProps = defaultValue.constructor.__props__;\n if (!fastDefinedProps) {\n fastDefinedProps = Object.keys(defaultValue);\n }\n for (var i = 0; i < fastDefinedProps.length; i++) {\n var propName = fastDefinedProps[i];\n var prop = srcValue[propName];\n if (defaultValue[propName] === prop) {\n continue;\n }\n var expression = this.enumerateField(srcValue, propName, prop);\n assignments.append(propName, expression);\n }\n assignments.writeCode(codeArray);\n Assignments.pool.put(assignments);\n};\n\nproto.enumerateCCClass = function (codeArray, obj, klass) {\n var props = klass.__values__;\n var attrs = Attr.getClassAttrs(klass);\n for (var p = 0; p < props.length; p++) {\n var key = props[p];\n var val = obj[key];\n var defaultValue = attrs[key + DEFAULT];\n if (equalsToDefault(defaultValue, val)) {\n continue;\n }\n if (typeof val === 'object' && val instanceof cc.ValueType) {\n defaultValue = CCClass.getDefault(defaultValue);\n if (defaultValue && defaultValue.constructor === val.constructor) {\n // fast case\n var targetExpression = LOCAL_OBJ + getPropAccessor(key);\n this.setValueType(codeArray, defaultValue, val, targetExpression);\n continue;\n }\n }\n this.setObjProp(codeArray, obj, key, val);\n }\n};\n\nproto.instantiateArray = function (value) {\n if (value.length === 0) {\n return '[]';\n }\n\n var arrayVar = LOCAL_ARRAY + (++this.localVariableId);\n var declaration = new Declaration(arrayVar, 'new Array(' + value.length + ')');\n var codeArray = [declaration];\n\n // assign a _iN$t flag to indicate that this object has been parsed.\n js.value(value, '_iN$t', {\n globalVar: '', // the name of declared global variable used to access this object\n source: codeArray, // the source code array for this object\n }, true);\n this.objsToClear_iN$t.push(value);\n\n for (var i = 0; i < value.length; ++i) {\n var statement = arrayVar + '[' + i + ']=';\n var expression = this.enumerateField(value, i, value[i]);\n writeAssignment(codeArray, statement, expression);\n }\n return codeArray;\n};\n\nproto.instantiateTypedArray = function (value) {\n let type = value.constructor.name || getTypedArrayName(value.constructor);\n if (value.length === 0) {\n return 'new ' + type;\n }\n\n let arrayVar = LOCAL_ARRAY + (++this.localVariableId);\n let declaration = new Declaration(arrayVar, 'new ' + type + '(' + value.length + ')');\n let codeArray = [declaration];\n\n // assign a _iN$t flag to indicate that this object has been parsed.\n value._iN$t = {\n globalVar: '', // the name of declared global variable used to access this object\n source: codeArray, // the source code array for this object\n };\n this.objsToClear_iN$t.push(value);\n\n for (var i = 0; i < value.length; ++i) {\n if (value[i] !== 0) {\n var statement = arrayVar + '[' + i + ']=';\n writeAssignment(codeArray, statement, value[i]);\n }\n }\n return codeArray;\n};\n\nproto.enumerateField = function (obj, key, value) {\n if (typeof value === 'object' && value) {\n var _iN$t = value._iN$t;\n if (_iN$t) {\n // parsed\n var globalVar = _iN$t.globalVar;\n if (!globalVar) {\n // declare a global var\n globalVar = _iN$t.globalVar = 'v' + (++this.globalVariableId);\n this.globalVariables.push(globalVar);\n // insert assignment statement to assign to global var\n var line = _iN$t.source[LINE_INDEX_OF_NEW_OBJ];\n _iN$t.source[LINE_INDEX_OF_NEW_OBJ] = mergeDeclaration(globalVar + '=', line);\n // if (typeof line ==='string' && line.startsWith(VAR)) {\n // // var o=xxx -> var o=global=xxx\n // var LEN_OF_VAR_O = 5;\n // _iN$t.source[LINE_INDEX_OF_NEW_OBJ] = line.slice(0, LEN_OF_VAR_O) + '=' + globalVar + line.slice(LEN_OF_VAR_O);\n // }\n }\n return globalVar;\n }\n else if (ArrayBuffer.isView(value)) {\n return this.instantiateTypedArray(value);\n }\n else if (Array.isArray(value)) {\n return this.instantiateArray(value);\n }\n else {\n return this.instantiateObj(value);\n }\n }\n else if (typeof value === 'function') {\n return this.getFuncModule(value);\n }\n else if (typeof value === 'string') {\n return escapeForJS(value);\n }\n else {\n if (key === '_objFlags' && (obj instanceof CCObject)) {\n value &= PersistentMask;\n }\n return value;\n }\n};\n\nproto.setObjProp = function (codeArray, obj, key, value) {\n var statement = LOCAL_OBJ + getPropAccessor(key) + '=';\n var expression = this.enumerateField(obj, key, value);\n writeAssignment(codeArray, statement, expression);\n};\n\n// codeArray - the source code array for this object\nproto.enumerateObject = function (codeArray, obj) {\n var klass = obj.constructor;\n if (cc.Class._isCCClass(klass)) {\n this.enumerateCCClass(codeArray, obj, klass);\n }\n else {\n // primitive javascript object\n for (var key in obj) {\n if (!obj.hasOwnProperty(key) ||\n (key.charCodeAt(0) === 95 && key.charCodeAt(1) === 95 && // starts with \"__\"\n key !== '__type__')\n ) {\n continue;\n }\n var value = obj[key];\n if (typeof value === 'object' && value && value === obj._iN$t) {\n continue;\n }\n this.setObjProp(codeArray, obj, key, value);\n }\n }\n};\n\nproto.instantiateObj = function (obj) {\n if (obj instanceof cc.ValueType) {\n return CCClass.getNewValueTypeCode(obj);\n }\n if (obj instanceof cc.Asset) {\n // register to asset list and just return the reference.\n return this.getObjRef(obj);\n }\n if (obj._objFlags & Destroyed) {\n // the same as cc.isValid(obj)\n return null;\n }\n\n var createCode;\n var ctor = obj.constructor;\n if (cc.Class._isCCClass(ctor)) {\n if (this.parent) {\n if (this.parent instanceof cc.Component) {\n if (obj instanceof cc._BaseNode || obj instanceof cc.Component) {\n return this.getObjRef(obj);\n }\n }\n else if (this.parent instanceof cc._BaseNode) {\n if (obj instanceof cc._BaseNode) {\n if (!obj.isChildOf(this.parent)) {\n // should not clone other nodes if not descendant\n return this.getObjRef(obj);\n }\n }\n else if (obj instanceof cc.Component) {\n if (!obj.node.isChildOf(this.parent)) {\n // should not clone other component if not descendant\n return this.getObjRef(obj);\n }\n }\n }\n }\n createCode = new Declaration(LOCAL_OBJ, 'new ' + this.getFuncModule(ctor, true) + '()');\n }\n else if (ctor === Object) {\n createCode = new Declaration(LOCAL_OBJ, '{}');\n }\n else if (!ctor) {\n createCode = new Declaration(LOCAL_OBJ, 'Object.create(null)');\n }\n else {\n // do not clone unknown type\n return this.getObjRef(obj);\n }\n\n var codeArray = [createCode];\n\n // assign a _iN$t flag to indicate that this object has been parsed.\n js.value(obj, '_iN$t', {\n globalVar: '', // the name of declared global variable used to access this object\n source: codeArray, // the source code array for this object\n //propName: '', // the propName this object defined in its source code,\n // // if defined, use LOCAL_OBJ.propName to access the obj, else just use o\n }, true);\n this.objsToClear_iN$t.push(obj);\n\n this.enumerateObject(codeArray, obj);\n return ['(function(){',\n codeArray,\n 'return o;})();'];\n};\n\n\nfunction compile (node) {\n var root = (node instanceof cc._BaseNode) && node;\n var parser = new Parser(node, root);\n return parser.result;\n}\n\nmodule.exports = {\n compile: compile,\n equalsToDefault: equalsToDefault\n};\n\nif (CC_TEST) {\n cc._Test.IntantiateJit = module.exports;\n}\n","/****************************************************************************\r\n Copyright (c) 2013-2016 Chukong Technologies Inc.\r\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\r\n\r\n https://www.cocos.com/\r\n\r\n Permission is hereby granted, free of charge, to any person obtaining a copy\r\n of this software and associated engine source code (the \"Software\"), a limited,\r\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\r\n to use Cocos Creator solely to develop games on your target platforms. You shall\r\n not use Cocos Creator software for developing other software or tools that's\r\n used for developing games. You are not granted to publish, distribute,\r\n sublicense, and/or sell copies of Cocos Creator.\r\n\r\n The software or tools in this License Agreement are licensed, not sold.\r\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\r\n\r\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n THE SOFTWARE.\r\n ****************************************************************************/\r\n\r\nvar CCObject = require('./CCObject');\r\nvar CCValueType = require('../value-types/value-type');\r\nvar Destroyed = CCObject.Flags.Destroyed;\r\nvar PersistentMask = CCObject.Flags.PersistentMask;\r\nvar _isDomNode = require('./utils').isDomNode;\r\nvar js = require('./js');\r\n\r\n/**\r\n * !#en Clones the object `original` and returns the clone, or instantiate a node from the Prefab.\r\n * !#zh 克隆指定的任意类型的对象,或者从 Prefab 实例化出新节点。\r\n *\r\n * (Instantiate 时,function 和 dom 等非可序列化对象会直接保留原有引用,Asset 会直接进行浅拷贝,可序列化类型会进行深拷贝。)\r\n *\r\n * @method instantiate\r\n * @param {Prefab|Node|Object} original - An existing object that you want to make a copy of.\r\n * @return {Node|Object} the newly instantiated object\r\n * @typescript\r\n * instantiate(original: Prefab): Node\r\n * instantiate(original: T): T\r\n * @example\r\n * // instantiate node from prefab\r\n * var scene = cc.director.getScene();\r\n * var node = cc.instantiate(prefabAsset);\r\n * node.parent = scene;\r\n * // clone node\r\n * var scene = cc.director.getScene();\r\n * var node = cc.instantiate(targetNode);\r\n * node.parent = scene;\r\n */\r\nfunction instantiate (original, internal_force) {\r\n if (!internal_force) {\r\n if (typeof original !== 'object' || Array.isArray(original)) {\r\n if (CC_DEV) {\r\n cc.errorID(6900);\r\n }\r\n return null;\r\n }\r\n if (!original) {\r\n if (CC_DEV) {\r\n cc.errorID(6901);\r\n }\r\n return null;\r\n }\r\n if (!cc.isValid(original)) {\r\n if (CC_DEV) {\r\n cc.errorID(6902);\r\n }\r\n return null;\r\n }\r\n if (CC_DEV && original instanceof cc.Component) {\r\n cc.warn('Should not instantiate a single cc.Component directly, you must instantiate the entire node.');\r\n }\r\n }\r\n\r\n var clone;\r\n if (original instanceof CCObject) {\r\n // Invoke _instantiate method if supplied.\r\n // The _instantiate callback will be called only on the root object, its associated object will not be called.\r\n // @callback associated\r\n // @param {Object} [instantiated] - If supplied, _instantiate just need to initialize the instantiated object,\r\n // no need to create new object by itself.\r\n // @returns {Object} - the instantiated object\r\n if (original._instantiate) {\r\n cc.game._isCloning = true;\r\n clone = original._instantiate(null, true);\r\n cc.game._isCloning = false;\r\n return clone;\r\n }\r\n else if (original instanceof cc.Asset) {\r\n // 不允许用通用方案实例化资源\r\n if (CC_DEV) {\r\n cc.errorID(6903);\r\n }\r\n return null;\r\n }\r\n }\r\n\r\n cc.game._isCloning = true;\r\n clone = doInstantiate(original);\r\n cc.game._isCloning = false;\r\n return clone;\r\n}\r\n\r\nvar objsToClearTmpVar = []; // used to reset _iN$t variable\r\n\r\n///**\r\n// * Do instantiate object, the object to instantiate must be non-nil.\r\n// * 这是一个通用的 instantiate 方法,可能效率比较低。\r\n// * 之后可以给各种类型重写快速实例化的特殊实现,但应该在单元测试中将结果和这个方法的结果进行对比。\r\n// * 值得注意的是,这个方法不可重入。\r\n// *\r\n// * @param {Object} obj - 该方法仅供内部使用,用户需负责保证参数合法。什么参数是合法的请参考 cc.instantiate 的实现。\r\n// * @param {Node} [parent] - 只有在该对象下的场景物体会被克隆。\r\n// * @return {Object}\r\n// * @private\r\n// */\r\nfunction doInstantiate (obj, parent) {\r\n if (Array.isArray(obj)) {\r\n if (CC_DEV) {\r\n cc.errorID(6904);\r\n }\r\n return null;\r\n }\r\n if (_isDomNode && _isDomNode(obj)) {\r\n if (CC_DEV) {\r\n cc.errorID(6905);\r\n }\r\n return null;\r\n }\r\n\r\n var clone;\r\n if (obj._iN$t) {\r\n // User can specify an existing object by assigning the \"_iN$t\" property.\r\n // enumerateObject will always push obj to objsToClearTmpVar\r\n clone = obj._iN$t;\r\n }\r\n else if (obj.constructor) {\r\n var klass = obj.constructor;\r\n clone = new klass();\r\n }\r\n else {\r\n clone = Object.create(null);\r\n }\r\n\r\n enumerateObject(obj, clone, parent);\r\n\r\n for (var i = 0, len = objsToClearTmpVar.length; i < len; ++i) {\r\n objsToClearTmpVar[i]._iN$t = null;\r\n }\r\n objsToClearTmpVar.length = 0;\r\n\r\n return clone;\r\n}\r\n\r\n// @param {Object} obj - The object to instantiate, typeof must be 'object' and should not be an array.\r\n\r\nfunction enumerateCCClass (klass, obj, clone, parent) {\r\n var props = klass.__values__;\r\n for (var p = 0; p < props.length; p++) {\r\n var key = props[p];\r\n var value = obj[key];\r\n if (typeof value === 'object' && value) {\r\n var initValue = clone[key];\r\n if (initValue instanceof CCValueType &&\r\n initValue.constructor === value.constructor) {\r\n initValue.set(value);\r\n }\r\n else {\r\n clone[key] = value._iN$t || instantiateObj(value, parent);\r\n }\r\n }\r\n else {\r\n clone[key] = value;\r\n }\r\n }\r\n}\r\n\r\nfunction enumerateObject (obj, clone, parent) {\r\n // 目前使用“_iN$t”这个特殊字段来存实例化后的对象,这样做主要是为了防止循环引用\r\n // 注意,为了避免循环引用,所有新创建的实例,必须在赋值前被设为源对象的_iN$t\r\n js.value(obj, '_iN$t', clone, true);\r\n objsToClearTmpVar.push(obj);\r\n var klass = obj.constructor;\r\n if (cc.Class._isCCClass(klass)) {\r\n enumerateCCClass(klass, obj, clone, parent);\r\n }\r\n else {\r\n // primitive javascript object\r\n for (var key in obj) {\r\n if (!obj.hasOwnProperty(key) ||\r\n (key.charCodeAt(0) === 95 && key.charCodeAt(1) === 95 && // starts with \"__\"\r\n key !== '__type__')\r\n ) {\r\n continue;\r\n }\r\n var value = obj[key];\r\n if (typeof value === 'object' && value) {\r\n if (value === clone) {\r\n continue; // value is obj._iN$t\r\n }\r\n clone[key] = value._iN$t || instantiateObj(value, parent);\r\n }\r\n else {\r\n clone[key] = value;\r\n }\r\n }\r\n }\r\n if (obj instanceof CCObject) {\r\n clone._objFlags &= PersistentMask;\r\n }\r\n}\r\n\r\n/*\r\n * @param {Object|Array} obj - the original non-nil object, typeof must be 'object'\r\n * @return {Object|Array} - the original non-nil object, typeof must be 'object'\r\n */\r\nfunction instantiateObj (obj, parent) {\r\n if (obj instanceof CCValueType) {\r\n return obj.clone();\r\n }\r\n if (obj instanceof cc.Asset) {\r\n // 所有资源直接引用,不需要拷贝\r\n return obj;\r\n }\r\n var clone;\r\n if (ArrayBuffer.isView(obj)) {\r\n let len = obj.length;\r\n clone = new (obj.constructor)(len);\r\n obj._iN$t = clone;\r\n objsToClearTmpVar.push(obj);\r\n for (let i = 0; i < len; ++i) {\r\n clone[i] = obj[i];\r\n }\r\n return clone;\r\n }\r\n if (Array.isArray(obj)) {\r\n let len = obj.length;\r\n clone = new Array(len);\r\n js.value(obj, '_iN$t', clone, true);\r\n objsToClearTmpVar.push(obj);\r\n for (let i = 0; i < len; ++i) {\r\n var value = obj[i];\r\n if (typeof value === 'object' && value) {\r\n clone[i] = value._iN$t || instantiateObj(value, parent);\r\n }\r\n else {\r\n clone[i] = value;\r\n }\r\n }\r\n return clone;\r\n }\r\n else if (obj._objFlags & Destroyed) {\r\n // the same as cc.isValid(obj)\r\n return null;\r\n }\r\n\r\n var ctor = obj.constructor;\r\n if (cc.Class._isCCClass(ctor)) {\r\n if (parent) {\r\n if (parent instanceof cc.Component) {\r\n if (obj instanceof cc._BaseNode || obj instanceof cc.Component) {\r\n return obj;\r\n }\r\n }\r\n else if (parent instanceof cc._BaseNode) {\r\n if (obj instanceof cc._BaseNode) {\r\n if (!obj.isChildOf(parent)) {\r\n // should not clone other nodes if not descendant\r\n return obj;\r\n }\r\n }\r\n else if (obj instanceof cc.Component) {\r\n if (!obj.node.isChildOf(parent)) {\r\n // should not clone other component if not descendant\r\n return obj;\r\n }\r\n }\r\n }\r\n }\r\n clone = new ctor();\r\n }\r\n else if (ctor === Object) {\r\n clone = {};\r\n }\r\n else if (!ctor) {\r\n clone = Object.create(null);\r\n }\r\n else {\r\n // unknown type\r\n return obj;\r\n }\r\n enumerateObject(obj, clone, parent);\r\n return clone;\r\n}\r\n\r\ninstantiate._clone = doInstantiate;\r\ncc.instantiate = instantiate;\r\nmodule.exports = instantiate;\r\n","/****************************************************************************\n Copyright (c) 2008-2010 Ricardo Quesada\n Copyright (c) 2011-2012 cocos2d-x.org\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos2d-x.org\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst tempCIDGenerater = new (require('./id-generater'))('TmpCId.');\n\n\nfunction _getPropertyDescriptor (obj, name) {\n while (obj) {\n var pd = Object.getOwnPropertyDescriptor(obj, name);\n if (pd) {\n return pd;\n }\n obj = Object.getPrototypeOf(obj);\n }\n return null;\n}\n\nfunction _copyprop(name, source, target) {\n var pd = _getPropertyDescriptor(source, name);\n Object.defineProperty(target, name, pd);\n}\n\n/**\n * !#en This module provides some JavaScript utilities. All members can be accessed with `cc.js`.\n * !#zh 这个模块封装了 JavaScript 相关的一些实用函数,你可以通过 `cc.js` 来访问这个模块。\n * @submodule js\n * @module js\n */\nvar js = {\n\n /**\n * Check the obj whether is number or not\n * If a number is created by using 'new Number(10086)', the typeof it will be \"object\"...\n * Then you can use this function if you care about this case.\n * @method isNumber\n * @param {*} obj\n * @returns {Boolean}\n */\n isNumber: function(obj) {\n return typeof obj === 'number' || obj instanceof Number;\n },\n\n /**\n * Check the obj whether is string or not.\n * If a string is created by using 'new String(\"blabla\")', the typeof it will be \"object\"...\n * Then you can use this function if you care about this case.\n * @method isString\n * @param {*} obj\n * @returns {Boolean}\n */\n isString: function(obj) {\n return typeof obj === 'string' || obj instanceof String;\n },\n\n /**\n * Copy all properties not defined in obj from arguments[1...n]\n * @method addon\n * @param {Object} obj object to extend its properties\n * @param {Object} ...sourceObj source object to copy properties from\n * @return {Object} the result obj\n */\n addon: function (obj) {\n 'use strict';\n obj = obj || {};\n for (var i = 1, length = arguments.length; i < length; i++) {\n var source = arguments[i];\n if (source) {\n if (typeof source !== 'object') {\n cc.errorID(5402, source);\n continue;\n }\n for ( var name in source) {\n if ( !(name in obj) ) {\n _copyprop( name, source, obj);\n }\n }\n }\n }\n return obj;\n },\n\n /**\n * copy all properties from arguments[1...n] to obj\n * @method mixin\n * @param {Object} obj\n * @param {Object} ...sourceObj\n * @return {Object} the result obj\n */\n mixin: function (obj) {\n 'use strict';\n obj = obj || {};\n for (var i = 1, length = arguments.length; i < length; i++) {\n var source = arguments[i];\n if (source) {\n if (typeof source !== 'object') {\n cc.errorID(5403, source);\n continue;\n }\n for ( var name in source) {\n _copyprop( name, source, obj);\n }\n }\n }\n return obj;\n },\n\n /**\n * Derive the class from the supplied base class.\n * Both classes are just native javascript constructors, not created by cc.Class, so\n * usually you will want to inherit using {{#crossLink \"cc/Class:method\"}}cc.Class {{/crossLink}} instead.\n * @method extend\n * @param {Function} cls\n * @param {Function} base - the baseclass to inherit\n * @return {Function} the result class\n */\n extend: function (cls, base) {\n if (CC_DEV) {\n if (!base) {\n cc.errorID(5404);\n return;\n }\n if (!cls) {\n cc.errorID(5405);\n return;\n }\n if (Object.keys(cls.prototype).length > 0) {\n cc.errorID(5406);\n }\n }\n for (var p in base) if (base.hasOwnProperty(p)) cls[p] = base[p];\n cls.prototype = Object.create(base.prototype, {\n constructor: {\n value: cls,\n writable: true,\n configurable: true\n }\n });\n return cls;\n },\n\n /**\n * Get super class\n * @method getSuper\n * @param {Function} ctor - the constructor of subclass\n * @return {Function}\n */\n getSuper (ctor) {\n var proto = ctor.prototype; // binded function do not have prototype\n var dunderProto = proto && Object.getPrototypeOf(proto);\n return dunderProto && dunderProto.constructor;\n },\n\n /**\n * Checks whether subclass is child of superclass or equals to superclass\n *\n * @method isChildClassOf\n * @param {Function} subclass\n * @param {Function} superclass\n * @return {Boolean}\n */\n isChildClassOf (subclass, superclass) {\n if (subclass && superclass) {\n if (typeof subclass !== 'function') {\n return false;\n }\n if (typeof superclass !== 'function') {\n if (CC_DEV) {\n cc.warnID(3625, superclass);\n }\n return false;\n }\n if (subclass === superclass) {\n return true;\n }\n for (;;) {\n subclass = js.getSuper(subclass);\n if (!subclass) {\n return false;\n }\n if (subclass === superclass) {\n return true;\n }\n }\n }\n return false;\n },\n\n /**\n * Removes all enumerable properties from object\n * @method clear\n * @param {any} obj\n */\n clear: function (obj) {\n var keys = Object.keys(obj);\n for (var i = 0; i < keys.length; i++) {\n delete obj[keys[i]];\n }\n },\n\n /**\n * Checks whether obj is an empty object\n * @method isEmptyObject\n * @param {any} obj \n * @returns {Boolean}\n */\n isEmptyObject: function (obj) {\n for (var key in obj) {\n return false;\n }\n return true;\n },\n\n /**\n * Get property descriptor in object and all its ancestors\n * @method getPropertyDescriptor\n * @param {Object} obj\n * @param {String} name\n * @return {Object}\n */\n getPropertyDescriptor: _getPropertyDescriptor\n};\n\n\nvar tmpValueDesc = {\n value: undefined,\n enumerable: false,\n writable: false,\n configurable: true\n};\n\n/**\n * Define value, just help to call Object.defineProperty.
\n * The configurable will be true.\n * @method value\n * @param {Object} obj\n * @param {String} prop\n * @param {any} value\n * @param {Boolean} [writable=false]\n * @param {Boolean} [enumerable=false]\n */\njs.value = function (obj, prop, value, writable, enumerable) {\n tmpValueDesc.value = value;\n tmpValueDesc.writable = writable;\n tmpValueDesc.enumerable = enumerable;\n Object.defineProperty(obj, prop, tmpValueDesc);\n tmpValueDesc.value = undefined;\n};\n\nvar tmpGetSetDesc = {\n get: null,\n set: null,\n enumerable: false,\n};\n\n/**\n * Define get set accessor, just help to call Object.defineProperty(...)\n * @method getset\n * @param {Object} obj\n * @param {String} prop\n * @param {Function} getter\n * @param {Function} [setter=null]\n * @param {Boolean} [enumerable=false]\n * @param {Boolean} [configurable=false]\n */\njs.getset = function (obj, prop, getter, setter, enumerable, configurable) {\n if (typeof setter !== 'function') {\n enumerable = setter;\n setter = undefined;\n }\n tmpGetSetDesc.get = getter;\n tmpGetSetDesc.set = setter;\n tmpGetSetDesc.enumerable = enumerable;\n tmpGetSetDesc.configurable = configurable;\n Object.defineProperty(obj, prop, tmpGetSetDesc);\n tmpGetSetDesc.get = null;\n tmpGetSetDesc.set = null;\n};\n\nvar tmpGetDesc = {\n get: null,\n enumerable: false,\n configurable: false\n};\n\n/**\n * Define get accessor, just help to call Object.defineProperty(...)\n * @method get\n * @param {Object} obj\n * @param {String} prop\n * @param {Function} getter\n * @param {Boolean} [enumerable=false]\n * @param {Boolean} [configurable=false]\n */\njs.get = function (obj, prop, getter, enumerable, configurable) {\n tmpGetDesc.get = getter;\n tmpGetDesc.enumerable = enumerable;\n tmpGetDesc.configurable = configurable;\n Object.defineProperty(obj, prop, tmpGetDesc);\n tmpGetDesc.get = null;\n};\n\nvar tmpSetDesc = {\n set: null,\n enumerable: false,\n configurable: false\n};\n\n/**\n * Define set accessor, just help to call Object.defineProperty(...)\n * @method set\n * @param {Object} obj\n * @param {String} prop\n * @param {Function} setter\n * @param {Boolean} [enumerable=false]\n * @param {Boolean} [configurable=false]\n */\njs.set = function (obj, prop, setter, enumerable, configurable) {\n tmpSetDesc.set = setter;\n tmpSetDesc.enumerable = enumerable;\n tmpSetDesc.configurable = configurable;\n Object.defineProperty(obj, prop, tmpSetDesc);\n tmpSetDesc.set = null;\n};\n\n/**\n * Get class name of the object, if object is just a {} (and which class named 'Object'), it will return \"\".\n * (modified from the code from this stackoverflow post)\n * @method getClassName\n * @param {Object|Function} objOrCtor - instance or constructor\n * @return {String}\n */\njs.getClassName = function (objOrCtor) {\n if (typeof objOrCtor === 'function') {\n var prototype = objOrCtor.prototype;\n if (prototype && prototype.hasOwnProperty('__classname__') && prototype.__classname__) {\n return prototype.__classname__;\n }\n var retval = '';\n // for browsers which have name property in the constructor of the object, such as chrome\n if (objOrCtor.name) {\n retval = objOrCtor.name;\n }\n if (objOrCtor.toString) {\n var arr, str = objOrCtor.toString();\n if (str.charAt(0) === '[') {\n // str is \"[object objectClass]\"\n arr = str.match(/\\[\\w+\\s*(\\w+)\\]/);\n }\n else {\n // str is function objectClass () {} for IE Firefox\n arr = str.match(/function\\s*(\\w+)/);\n }\n if (arr && arr.length === 2) {\n retval = arr[1];\n }\n }\n return retval !== 'Object' ? retval : '';\n }\n else if (objOrCtor && objOrCtor.constructor) {\n return js.getClassName(objOrCtor.constructor);\n }\n return '';\n};\n\nfunction isTempClassId (id) {\n return typeof id !== 'string' || id.startsWith(tempCIDGenerater.prefix);\n}\n\n// id 注册\n(function () {\n var _idToClass = {};\n var _nameToClass = {};\n\n function setup (key, publicName, table) {\n js.getset(js, publicName,\n function () {\n return Object.assign({}, table);\n },\n function (value) {\n js.clear(table);\n Object.assign(table, value);\n }\n );\n return function (id, constructor) {\n // deregister old\n if (constructor.prototype.hasOwnProperty(key)) {\n delete table[constructor.prototype[key]];\n }\n js.value(constructor.prototype, key, id);\n // register class\n if (id) {\n var registered = table[id];\n if (registered && registered !== constructor) {\n var error = 'A Class already exists with the same ' + key + ' : \"' + id + '\".';\n if (CC_TEST) {\n error += ' (This may be caused by error of unit test.) \\\nIf you dont need serialization, you can set class id to \"\". You can also call \\\ncc.js.unregisterClass to remove the id of unused class';\n }\n cc.error(error);\n }\n else {\n table[id] = constructor;\n }\n //if (id === \"\") {\n // console.trace(\"\", table === _nameToClass);\n //}\n }\n };\n }\n\n /**\n * Register the class by specified id, if its classname is not defined, the class name will also be set.\n * @method _setClassId\n * @param {String} classId\n * @param {Function} constructor\n * @private\n */\n /**\n * !#en All classes registered in the engine, indexed by ID.\n * !#zh 引擎中已注册的所有类型,通过 ID 进行索引。\n * @property _registeredClassIds\n * @example\n * // save all registered classes before loading scripts\n * let builtinClassIds = cc.js._registeredClassIds;\n * let builtinClassNames = cc.js._registeredClassNames;\n * // load some scripts that contain CCClass\n * ...\n * // clear all loaded classes\n * cc.js._registeredClassIds = builtinClassIds;\n * cc.js._registeredClassNames = builtinClassNames;\n */\n js._setClassId = setup('__cid__', '_registeredClassIds', _idToClass);\n\n /**\n * !#en All classes registered in the engine, indexed by name.\n * !#zh 引擎中已注册的所有类型,通过名称进行索引。\n * @property _registeredClassNames\n * @example\n * // save all registered classes before loading scripts\n * let builtinClassIds = cc.js._registeredClassIds;\n * let builtinClassNames = cc.js._registeredClassNames;\n * // load some scripts that contain CCClass\n * ...\n * // clear all loaded classes\n * cc.js._registeredClassIds = builtinClassIds;\n * cc.js._registeredClassNames = builtinClassNames;\n */\n var doSetClassName = setup('__classname__', '_registeredClassNames', _nameToClass);\n\n /**\n * Register the class by specified name manually\n * @method setClassName\n * @param {String} className\n * @param {Function} constructor\n */\n js.setClassName = function (className, constructor) {\n doSetClassName(className, constructor);\n // auto set class id\n if (!constructor.prototype.hasOwnProperty('__cid__')) {\n var id = className || tempCIDGenerater.getNewId();\n if (id) {\n js._setClassId(id, constructor);\n }\n }\n };\n\n /**\n * Unregister a class from fireball.\n *\n * If you dont need a registered class anymore, you should unregister the class so that Fireball will not keep its reference anymore.\n * Please note that its still your responsibility to free other references to the class.\n *\n * @method unregisterClass\n * @param {Function} ...constructor - the class you will want to unregister, any number of classes can be added\n */\n js.unregisterClass = function () {\n for (var i = 0; i < arguments.length; i++) {\n var p = arguments[i].prototype;\n var classId = p.__cid__;\n if (classId) {\n delete _idToClass[classId];\n }\n var classname = p.__classname__;\n if (classname) {\n delete _nameToClass[classname];\n }\n }\n };\n\n /**\n * Get the registered class by id\n * @method _getClassById\n * @param {String} classId\n * @return {Function} constructor\n * @private\n */\n js._getClassById = function (classId) {\n return _idToClass[classId];\n };\n\n /**\n * Get the registered class by name\n * @method getClassByName\n * @param {String} classname\n * @return {Function} constructor\n */\n js.getClassByName = function (classname) {\n return _nameToClass[classname];\n };\n\n /**\n * Get class id of the object\n * @method _getClassId\n * @param {Object|Function} obj - instance or constructor\n * @param {Boolean} [allowTempId=true] - can return temp id in editor\n * @return {String}\n * @private\n */\n js._getClassId = function (obj, allowTempId) {\n allowTempId = (typeof allowTempId !== 'undefined' ? allowTempId: true);\n\n var res;\n if (typeof obj === 'function' && obj.prototype.hasOwnProperty('__cid__')) {\n res = obj.prototype.__cid__;\n if (!allowTempId && (CC_DEV || CC_EDITOR) && isTempClassId(res)) {\n return '';\n }\n return res;\n }\n if (obj && obj.constructor) {\n var prototype = obj.constructor.prototype;\n if (prototype && prototype.hasOwnProperty('__cid__')) {\n res = obj.__cid__;\n if (!allowTempId && (CC_DEV || CC_EDITOR) && isTempClassId(res)) {\n return '';\n }\n return res;\n }\n }\n return '';\n };\n})();\n\n/**\n * Defines a polyfill field for deprecated codes.\n * @method obsolete\n * @param {any} obj - YourObject or YourClass.prototype\n * @param {String} obsoleted - \"OldParam\" or \"YourClass.OldParam\"\n * @param {String} newExpr - \"NewParam\" or \"YourClass.NewParam\"\n * @param {Boolean} [writable=false]\n */\njs.obsolete = function (obj, obsoleted, newExpr, writable) {\n var extractPropName = /([^.]+)$/;\n var oldProp = extractPropName.exec(obsoleted)[0];\n var newProp = extractPropName.exec(newExpr)[0];\n function get () {\n if (CC_DEV) {\n cc.warnID(1400, obsoleted, newExpr);\n }\n return this[newProp];\n }\n if (writable) {\n js.getset(obj, oldProp,\n get,\n function (value) {\n if (CC_DEV) {\n cc.warnID(1400, obsoleted, newExpr);\n }\n this[newProp] = value;\n }\n );\n }\n else {\n js.get(obj, oldProp, get);\n }\n};\n\n/**\n * Defines all polyfill fields for obsoleted codes corresponding to the enumerable properties of props.\n * @method obsoletes\n * @param {any} obj - YourObject or YourClass.prototype\n * @param {any} objName - \"YourObject\" or \"YourClass\"\n * @param {Object} props\n * @param {Boolean} [writable=false]\n */\njs.obsoletes = function (obj, objName, props, writable) {\n for (var obsoleted in props) {\n var newName = props[obsoleted];\n js.obsolete(obj, objName + '.' + obsoleted, newName, writable);\n }\n};\n\nvar REGEXP_NUM_OR_STR = /(%d)|(%s)/;\nvar REGEXP_STR = /%s/;\n\n/**\n * A string tool to construct a string with format string.\n * @method formatStr\n * @param {String|any} msg - A JavaScript string containing zero or more substitution strings (%s).\n * @param {any} ...subst - JavaScript objects with which to replace substitution strings within msg. This gives you additional control over the format of the output.\n * @returns {String}\n * @example\n * cc.js.formatStr(\"a: %s, b: %s\", a, b);\n * cc.js.formatStr(a, b, c);\n */\njs.formatStr = function () {\n var argLen = arguments.length;\n if (argLen === 0) {\n return '';\n }\n var msg = arguments[0];\n if (argLen === 1) {\n return '' + msg;\n }\n\n var hasSubstitution = typeof msg === 'string' && REGEXP_NUM_OR_STR.test(msg);\n if (hasSubstitution) {\n for (let i = 1; i < argLen; ++i) {\n var arg = arguments[i];\n var regExpToTest = typeof arg === 'number' ? REGEXP_NUM_OR_STR : REGEXP_STR;\n if (regExpToTest.test(msg)) {\n const notReplaceFunction = '' + arg;\n msg = msg.replace(regExpToTest, notReplaceFunction);\n }\n else\n msg += ' ' + arg;\n }\n }\n else {\n for (let i = 1; i < argLen; ++i) {\n msg += ' ' + arguments[i];\n }\n }\n return msg;\n};\n\n// see https://github.com/petkaantonov/bluebird/issues/1389\njs.shiftArguments = function () {\n var len = arguments.length - 1;\n var args = new Array(len);\n for(var i = 0; i < len; ++i) {\n args[i] = arguments[i + 1];\n }\n return args;\n};\n\n/**\n * !#en\n * A simple wrapper of `Object.create(null)` which ensures the return object have no prototype (and thus no inherited members). So we can skip `hasOwnProperty` calls on property lookups. It is a worthwhile optimization than the `{}` literal when `hasOwnProperty` calls are necessary.\n * !#zh\n * 该方法是对 `Object.create(null)` 的简单封装。`Object.create(null)` 用于创建无 prototype (也就无继承)的空对象。这样我们在该对象上查找属性时,就不用进行 `hasOwnProperty` 判断。在需要频繁判断 `hasOwnProperty` 时,使用这个方法性能会比 `{}` 更高。\n *\n * @method createMap\n * @param {Boolean} [forceDictMode=false] - Apply the delete operator to newly created map object. This causes V8 to put the object in \"dictionary mode\" and disables creation of hidden classes which are very expensive for objects that are constantly changing shape.\n * @return {Object}\n */\njs.createMap = function (forceDictMode) {\n var map = Object.create(null);\n if (forceDictMode) {\n const INVALID_IDENTIFIER_1 = '.';\n const INVALID_IDENTIFIER_2 = '/';\n map[INVALID_IDENTIFIER_1] = true;\n map[INVALID_IDENTIFIER_2] = true;\n delete map[INVALID_IDENTIFIER_1];\n delete map[INVALID_IDENTIFIER_2];\n }\n return map;\n};\n\n/**\n * @class array\n * @static\n */\n\n/**\n * Removes the array item at the specified index.\n * @method removeAt\n * @param {any[]} array\n * @param {Number} index\n */\nfunction removeAt (array, index) {\n array.splice(index, 1);\n}\n\n/**\n * Removes the array item at the specified index.\n * It's faster but the order of the array will be changed.\n * @method fastRemoveAt\n * @param {any[]} array\n * @param {Number} index\n */\nfunction fastRemoveAt (array, index) {\n var length = array.length;\n if (index < 0 || index >= length) {\n return;\n }\n array[index] = array[length - 1];\n array.length = length - 1;\n}\n\n/**\n * Removes the first occurrence of a specific object from the array.\n * @method remove\n * @param {any[]} array\n * @param {any} value\n * @return {Boolean}\n */\nfunction remove (array, value) {\n var index = array.indexOf(value);\n if (index >= 0) {\n removeAt(array, index);\n return true;\n }\n else {\n return false;\n }\n}\n\n/**\n * Removes the first occurrence of a specific object from the array.\n * It's faster but the order of the array will be changed.\n * @method fastRemove\n * @param {any[]} array\n * @param {Number} value\n */\nfunction fastRemove (array, value) {\n var index = array.indexOf(value);\n if (index >= 0) {\n array[index] = array[array.length - 1];\n --array.length;\n }\n}\n\n/**\n * Verify array's Type\n * @method verifyType\n * @param {array} array\n * @param {Function} type\n * @return {Boolean}\n */\nfunction verifyType (array, type) {\n if (array && array.length > 0) {\n for (var i = 0; i < array.length; i++) {\n if (!(array[i] instanceof type)) {\n cc.logID(1300);\n return false;\n }\n }\n }\n return true;\n}\n\n/**\n * Removes from array all values in minusArr. For each Value in minusArr, the first matching instance in array will be removed.\n * @method removeArray\n * @param {Array} array Source Array\n * @param {Array} minusArr minus Array\n */\nfunction removeArray (array, minusArr) {\n for (var i = 0, l = minusArr.length; i < l; i++) {\n remove(array, minusArr[i]);\n }\n}\n\n/**\n * Inserts some objects at index\n * @method appendObjectsAt\n * @param {Array} array\n * @param {Array} addObjs\n * @param {Number} index\n * @return {Array}\n */\nfunction appendObjectsAt (array, addObjs, index) {\n array.splice.apply(array, [index, 0].concat(addObjs));\n return array;\n}\n\n/**\n * Determines whether the array contains a specific value.\n * @method contains\n * @param {any[]} array\n * @param {any} value\n * @return {Boolean}\n */\nfunction contains (array, value) {\n return array.indexOf(value) >= 0;\n}\n\n/**\n * Copy an array's item to a new array (its performance is better than Array.slice)\n * @method copy\n * @param {Array} array\n * @return {Array}\n */\nfunction copy (array) {\n var i, len = array.length, arr_clone = new Array(len);\n for (i = 0; i < len; i += 1)\n arr_clone[i] = array[i];\n return arr_clone;\n}\n\njs.array = {\n remove,\n fastRemove,\n removeAt,\n fastRemoveAt,\n contains,\n verifyType,\n removeArray,\n appendObjectsAt,\n copy,\n MutableForwardIterator: require('../utils/mutable-forward-iterator')\n};\n\n// OBJECT POOL\n\n/**\n * !#en\n * A fixed-length object pool designed for general type.
\n * The implementation of this object pool is very simple,\n * it can helps you to improve your game performance for objects which need frequent release and recreate operations
\n * !#zh\n * 长度固定的对象缓存池,可以用来缓存各种对象类型。
\n * 这个对象池的实现非常精简,它可以帮助您提高游戏性能,适用于优化对象的反复创建和销毁。\n * @class Pool\n * @example\n *\n *Example 1:\n *\n *function Details () {\n * this.uuidList = [];\n *};\n *Details.prototype.reset = function () {\n * this.uuidList.length = 0;\n *};\n *Details.pool = new js.Pool(function (obj) {\n * obj.reset();\n *}, 5);\n *Details.pool.get = function () {\n * return this._get() || new Details();\n *};\n *\n *var detail = Details.pool.get();\n *...\n *Details.pool.put(detail);\n *\n *Example 2:\n *\n *function Details (buffer) {\n * this.uuidList = buffer;\n *};\n *...\n *Details.pool.get = function (buffer) {\n * var cached = this._get();\n * if (cached) {\n * cached.uuidList = buffer;\n * return cached;\n * }\n * else {\n * return new Details(buffer);\n * }\n *};\n *\n *var detail = Details.pool.get( [] );\n *...\n */\n/**\n * !#en\n * Constructor for creating an object pool for the specific object type.\n * You can pass a callback argument for process the cleanup logic when the object is recycled.\n * !#zh\n * 使用构造函数来创建一个指定对象类型的对象池,您可以传递一个回调函数,用于处理对象回收时的清理逻辑。\n * @method constructor\n * @param {Function} [cleanupFunc] - the callback method used to process the cleanup logic when the object is recycled.\n * @param {Object} cleanupFunc.obj\n * @param {Number} size - initializes the length of the array\n * @typescript\n * constructor(cleanupFunc: (obj: any) => void, size: number)\n * constructor(size: number)\n */\nfunction Pool (cleanupFunc, size) {\n if (size === undefined) {\n size = cleanupFunc;\n cleanupFunc = null;\n }\n this.get = null;\n this.count = 0;\n this._pool = new Array(size);\n this._cleanup = cleanupFunc;\n}\n\n/**\n * !#en\n * Get and initialize an object from pool. This method defaults to null and requires the user to implement it.\n * !#zh\n * 获取并初始化对象池中的对象。这个方法默认为空,需要用户自己实现。\n * @method get\n * @param {any} ...params - parameters to used to initialize the object\n * @returns {Object}\n */\n\n/**\n * !#en\n * The current number of available objects, the default is 0, it will gradually increase with the recycle of the object,\n * the maximum will not exceed the size specified when the constructor is called.\n * !#zh\n * 当前可用对象数量,一开始默认是 0,随着对象的回收会逐渐增大,最大不会超过调用构造函数时指定的 size。\n * @property {Number} count\n * @default 0\n */\n\n/**\n * !#en\n * Get an object from pool, if no available object in the pool, null will be returned.\n * !#zh\n * 获取对象池中的对象,如果对象池没有可用对象,则返回空。\n * @method _get\n * @returns {Object|null}\n */\nPool.prototype._get = function () {\n if (this.count > 0) {\n --this.count;\n var cache = this._pool[this.count];\n this._pool[this.count] = null;\n return cache;\n }\n return null;\n};\n\n/**\n * !#en Put an object into the pool.\n * !#zh 向对象池返还一个不再需要的对象。\n * @method put\n */\nPool.prototype.put = function (obj) {\n var pool = this._pool;\n if (this.count < pool.length) {\n if (this._cleanup && this._cleanup(obj) === false) {\n return;\n }\n pool[this.count] = obj;\n ++this.count;\n }\n};\n\n/**\n * !#en Resize the pool.\n * !#zh 设置对象池容量。\n * @method resize\n */\nPool.prototype.resize = function (length) {\n if (length >= 0) {\n this._pool.length = length;\n if (this.count > length) {\n this.count = length;\n }\n }\n};\n\njs.Pool = Pool;\n\n//\n\ncc.js = js;\n\nmodule.exports = js;\n\n// fix submodule pollute ...\n/**\n * @submodule cc\n */\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst js = require('./js');\nconst Attrs = require('./attribute');\n\n// 增加预处理属性这个步骤的目的是降低 CCClass 的实现难度,将比较稳定的通用逻辑和一些需求比较灵活的属性需求分隔开。\n\nvar SerializableAttrs = {\n default: {},\n serializable: {},\n editorOnly: {},\n formerlySerializedAs: {}\n};\n\nvar TYPO_TO_CORRECT_DEV = CC_DEV && {\n extend: 'extends',\n property: 'properties',\n static: 'statics',\n constructor: 'ctor'\n};\n\n// 预处理 notify 等扩展属性\nfunction parseNotify (val, propName, notify, properties) {\n if (val.get || val.set) {\n if (CC_DEV) {\n cc.warnID(5500);\n }\n return;\n }\n if (val.hasOwnProperty('default')) {\n // 添加新的内部属性,将原来的属性修改为 getter/setter 形式\n // (以 _ 开头将自动设置property 为 visible: false)\n var newKey = \"_N$\" + propName;\n\n val.get = function () {\n return this[newKey];\n };\n val.set = function (value) {\n var oldValue = this[newKey];\n this[newKey] = value;\n notify.call(this, oldValue);\n };\n\n if (CC_EDITOR) {\n val.notifyFor = newKey;\n }\n\n var newValue = {};\n properties[newKey] = newValue;\n // 将不能用于get方法中的属性移动到newValue中\n for (var attr in SerializableAttrs) {\n var v = SerializableAttrs[attr];\n if (val.hasOwnProperty(attr)) {\n newValue[attr] = val[attr];\n if (!v.canUsedInGet) {\n delete val[attr];\n }\n }\n }\n }\n else if (CC_DEV) {\n cc.warnID(5501);\n }\n}\n\nfunction parseType (val, type, className, propName) {\n const STATIC_CHECK = (CC_EDITOR && CC_DEV) || CC_TEST;\n\n if (Array.isArray(type)) {\n if (STATIC_CHECK && 'default' in val) {\n var isArray = require('./CCClass').isArray; // require lazily to avoid circular require() calls\n if (!isArray(val.default)) {\n cc.warnID(5507, className, propName);\n }\n }\n if (type.length > 0) {\n val.type = type = type[0];\n }\n else {\n return cc.errorID(5508, className, propName);\n }\n }\n if (typeof type === 'function') {\n if (type === String) {\n val.type = cc.String;\n if (STATIC_CHECK) {\n cc.warnID(3608, `\"${className}.${propName}\"`);\n }\n }\n else if (type === Boolean) {\n val.type = cc.Boolean;\n if (STATIC_CHECK) {\n cc.warnID(3609, `\"${className}.${propName}\"`);\n }\n }\n else if (type === Number) {\n val.type = cc.Float;\n if (STATIC_CHECK) {\n cc.warnID(3610, `\"${className}.${propName}\"`);\n }\n }\n }\n else if (STATIC_CHECK) {\n switch (type) {\n case 'Number':\n cc.warnID(5510, className, propName);\n break;\n case 'String':\n cc.warn(`The type of \"${className}.${propName}\" must be cc.String, not \"String\".`);\n break;\n case 'Boolean':\n cc.warn(`The type of \"${className}.${propName}\" must be cc.Boolean, not \"Boolean\".`);\n break;\n case 'Float':\n cc.warn(`The type of \"${className}.${propName}\" must be cc.Float, not \"Float\".`);\n break;\n case 'Integer':\n cc.warn(`The type of \"${className}.${propName}\" must be cc.Integer, not \"Integer\".`);\n break;\n case null:\n cc.warnID(5511, className, propName);\n break;\n }\n }\n\n if (CC_EDITOR && typeof type === 'function') {\n if (cc.Class._isCCClass(type) && val.serializable !== false && !js._getClassId(type, false)) {\n cc.warnID(5512, className, propName, className, propName);\n }\n }\n}\n\nfunction getBaseClassWherePropertyDefined_DEV (propName, cls) {\n if (CC_DEV) {\n var res;\n for (; cls && cls.__props__ && cls.__props__.indexOf(propName) !== -1; cls = cls.$super) {\n res = cls;\n }\n if (!res) {\n cc.error('unknown error');\n }\n return res;\n }\n}\n\nfunction _wrapOptions (isES6Getset, _default, type) {\n let res = isES6Getset ? { _short: true } : { _short: true, default: _default };\n if (type) {\n res.type = type;\n }\n return res;\n}\n\nexports.getFullFormOfProperty = function (options, isES6Getset) {\n var isLiteral = options && options.constructor === Object;\n if (isLiteral) {\n return null;\n }\n if (Array.isArray(options) && options.length > 0) {\n return _wrapOptions(isES6Getset, [], options);\n }\n else if (typeof options === 'function') {\n return _wrapOptions(isES6Getset, js.isChildClassOf(options, cc.ValueType) ? new options() : null, options);\n }\n else if (options instanceof Attrs.PrimitiveType) {\n return _wrapOptions(isES6Getset, options.default);\n }\n else {\n return _wrapOptions(isES6Getset, options);\n }\n};\n\nexports.preprocessAttrs = function (properties, className, cls, es6) {\n for (var propName in properties) {\n var val = properties[propName];\n var fullForm = exports.getFullFormOfProperty(val, false);\n if (fullForm) {\n val = properties[propName] = fullForm;\n }\n if (val) {\n if (CC_EDITOR) {\n if ('default' in val) {\n if (val.get) {\n cc.errorID(5513, className, propName);\n }\n else if (val.set) {\n cc.errorID(5514, className, propName);\n }\n else if (cc.Class._isCCClass(val.default)) {\n val.default = null;\n cc.errorID(5515, className, propName);\n }\n }\n else if (!val.get && !val.set) {\n var maybeTypeScript = es6;\n if (!maybeTypeScript) {\n cc.errorID(5516, className, propName);\n }\n }\n }\n if (CC_DEV && !val.override && cls.__props__.indexOf(propName) !== -1) {\n // check override\n var baseClass = js.getClassName(getBaseClassWherePropertyDefined_DEV(propName, cls));\n cc.warnID(5517, className, propName, baseClass, propName);\n }\n var notify = val.notify;\n if (notify) {\n if (CC_DEV && es6) {\n cc.error('not yet support notify attribute for ES6 Classes');\n }\n else {\n parseNotify(val, propName, notify, properties);\n }\n }\n\n if ('type' in val) {\n parseType(val, val.type, className, propName);\n }\n }\n }\n};\n\nif (CC_DEV) {\n const CALL_SUPER_DESTROY_REG_DEV = /\\b\\._super\\b|destroy\\s*\\.\\s*call\\s*\\(\\s*\\w+\\s*[,|)]/;\n exports.doValidateMethodWithProps_DEV = function (func, funcName, className, cls, base) {\n if (cls.__props__ && cls.__props__.indexOf(funcName) >= 0) {\n // find class that defines this method as a property\n var baseClassName = js.getClassName(getBaseClassWherePropertyDefined_DEV(funcName, cls));\n cc.errorID(3648, className, funcName, baseClassName);\n return false;\n }\n if (funcName === 'destroy' &&\n js.isChildClassOf(base, cc.Component) &&\n !CALL_SUPER_DESTROY_REG_DEV.test(func)\n ) {\n cc.error(`Overwriting '${funcName}' function in '${className}' class without calling super is not allowed. Call the super function in '${funcName}' please.`);\n }\n };\n}\n\nexports.validateMethodWithProps = function (func, funcName, className, cls, base) {\n if (CC_DEV && funcName === 'constructor') {\n cc.errorID(3643, className);\n return false;\n }\n if (typeof func === 'function' || func === null) {\n if (CC_DEV) {\n this.doValidateMethodWithProps_DEV(func, funcName, className, cls, base);\n }\n }\n else {\n if (CC_DEV) {\n if (func === false && base && base.prototype) {\n // check override\n var overrided = base.prototype[funcName];\n if (typeof overrided === 'function') {\n var baseFuc = js.getClassName(base) + '.' + funcName;\n var subFuc = className + '.' + funcName;\n cc.warnID(3624, subFuc, baseFuc, subFuc, subFuc);\n }\n }\n var correct = TYPO_TO_CORRECT_DEV[funcName];\n if (correct) {\n cc.warnID(3621, className, funcName, correct);\n }\n else if (func) {\n cc.errorID(3622, className, funcName);\n }\n }\n return false;\n }\n return true;\n};\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar requiringFrames = []; // the requiring frame infos\n\ncc._RF = {\n push: function (module, uuid, script) {\n if (script === undefined) {\n script = uuid;\n uuid = '';\n }\n requiringFrames.push({\n uuid: uuid,\n script: script,\n module: module,\n exports: module.exports, // original exports\n beh: null\n });\n },\n pop: function () {\n var frameInfo = requiringFrames.pop();\n // check exports\n var module = frameInfo.module;\n var exports = module.exports;\n if (exports === frameInfo.exports) {\n for (var anyKey in exports) {\n // exported\n return;\n }\n // auto export component\n module.exports = exports = frameInfo.cls;\n }\n },\n peek: function () {\n return requiringFrames[requiringFrames.length - 1];\n }\n};\n\nif (CC_EDITOR) {\n cc._RF.reset = function () {\n requiringFrames = [];\n };\n}\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n// TODO - merge with misc.js\nconst js = require('./js');\n\nmodule.exports = {\n contains: function (refNode, otherNode) {\n if(typeof refNode.contains == 'function'){\n return refNode.contains(otherNode);\n }else if(typeof refNode.compareDocumentPosition == 'function' ) {\n return !!(refNode.compareDocumentPosition(otherNode) & 16);\n }else {\n var node = otherNode.parentNode;\n if (node) {\n do {\n if (node === refNode) {\n return true;\n } else {\n node = node.parentNode;\n }\n } while (node !==null);\n }\n return false;\n }\n },\n\n isDomNode: typeof window === 'object' && (typeof Node === 'function' ?\n function (obj) {\n // If \"TypeError: Right-hand side of 'instanceof' is not callback\" is thrown,\n // it should because window.Node was overwritten.\n return obj instanceof Node;\n } :\n function (obj) {\n return obj &&\n typeof obj === 'object' &&\n typeof obj.nodeType === 'number' &&\n typeof obj.nodeName === 'string';\n }\n ),\n\n callInNextTick: CC_EDITOR ?\n function (callback, p1, p2) {\n if (callback) {\n process.nextTick(function () {\n callback(p1, p2);\n });\n }\n }\n :\n (\n \n function (callback, p1, p2) {\n if (callback) {\n setTimeout(function () {\n callback(p1, p2);\n }, 0);\n }\n }\n )\n};\n\nif (CC_DEV) {\n ///**\n // * @param {Object} obj\n // * @return {Boolean} is {} ?\n // */\n module.exports.isPlainEmptyObj_DEV = function (obj) {\n if (!obj || obj.constructor !== Object) {\n return false;\n }\n \n return js.isEmptyObject(obj);\n };\n module.exports.cloneable_DEV = function (obj) {\n return obj &&\n typeof obj.clone === 'function' &&\n ( (obj.constructor && obj.constructor.prototype.hasOwnProperty('clone')) || obj.hasOwnProperty('clone') );\n };\n}\n\nif (CC_TEST) {\n // editor mocks using in unit tests\n if (typeof Editor === 'undefined') {\n window.Editor = {\n UuidUtils: {\n NonUuidMark: '.',\n uuid: function () {\n return '' + ((new Date()).getTime() + Math.random());\n }\n }\n };\n }\n}\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n// predefine some modules for cocos\nrequire('./platform/js');\nrequire('./value-types');\nrequire('./utils');\nrequire('./platform/CCInputManager');\nrequire('./platform/CCInputExtension');\nrequire('./event');\nrequire('./platform/CCSys');\nrequire('./platform/CCMacro');\nrequire('./asset-manager');\nrequire('./CCDirector');\nrequire('./renderer');\n\nif (!(CC_EDITOR && Editor.isMainProcess)) {\n require('./platform/CCView');\n require('./platform/CCScreen');\n require('./CCScheduler');\n require('./event-manager');\n}\n","import Assembler from './assembler';\nimport dynamicAtlasManager from './utils/dynamic-atlas/manager';\nimport RenderData from './webgl/render-data';\nimport { Color } from '../value-types';\n\nexport default class Assembler2D extends Assembler {\n constructor () {\n super();\n\n this._renderData = new RenderData();\n this._renderData.init(this);\n \n this.initData();\n this.initLocal();\n }\n\n get verticesFloats () {\n return this.verticesCount * this.floatsPerVert;\n }\n\n initData () {\n let data = this._renderData;\n data.createQuadData(0, this.verticesFloats, this.indicesCount);\n }\n initLocal () {\n this._local = [];\n this._local.length = 4;\n }\n\n updateColor (comp, color) {\n let uintVerts = this._renderData.uintVDatas[0];\n if (!uintVerts) return;\n color = color != null ? color : comp.node.color._val;\n let floatsPerVert = this.floatsPerVert;\n let colorOffset = this.colorOffset;\n for (let i = colorOffset, l = uintVerts.length; i < l; i += floatsPerVert) {\n uintVerts[i] = color;\n }\n }\n\n getBuffer () {\n return cc.renderer._handle._meshBuffer;\n }\n\n updateWorldVerts (comp) {\n let local = this._local;\n let verts = this._renderData.vDatas[0];\n\n let matrix = comp.node._worldMatrix;\n let matrixm = matrix.m,\n a = matrixm[0], b = matrixm[1], c = matrixm[4], d = matrixm[5],\n tx = matrixm[12], ty = matrixm[13];\n\n let vl = local[0], vr = local[2],\n vb = local[1], vt = local[3];\n \n let floatsPerVert = this.floatsPerVert;\n let vertexOffset = 0;\n let justTranslate = a === 1 && b === 0 && c === 0 && d === 1;\n\n if (justTranslate) {\n // left bottom\n verts[vertexOffset] = vl + tx;\n verts[vertexOffset + 1] = vb + ty;\n vertexOffset += floatsPerVert;\n // right bottom\n verts[vertexOffset] = vr + tx;\n verts[vertexOffset + 1] = vb + ty;\n vertexOffset += floatsPerVert;\n // left top\n verts[vertexOffset] = vl + tx;\n verts[vertexOffset + 1] = vt + ty;\n vertexOffset += floatsPerVert;\n // right top\n verts[vertexOffset] = vr + tx;\n verts[vertexOffset + 1] = vt + ty;\n } else {\n let al = a * vl, ar = a * vr,\n bl = b * vl, br = b * vr,\n cb = c * vb, ct = c * vt,\n db = d * vb, dt = d * vt;\n\n // left bottom\n verts[vertexOffset] = al + cb + tx;\n verts[vertexOffset + 1] = bl + db + ty;\n vertexOffset += floatsPerVert;\n // right bottom\n verts[vertexOffset] = ar + cb + tx;\n verts[vertexOffset + 1] = br + db + ty;\n vertexOffset += floatsPerVert;\n // left top\n verts[vertexOffset] = al + ct + tx;\n verts[vertexOffset + 1] = bl + dt + ty;\n vertexOffset += floatsPerVert;\n // right top\n verts[vertexOffset] = ar + ct + tx;\n verts[vertexOffset + 1] = br + dt + ty;\n }\n }\n\n fillBuffers (comp, renderer) {\n if (renderer.worldMatDirty) {\n this.updateWorldVerts(comp);\n }\n\n let renderData = this._renderData;\n let vData = renderData.vDatas[0];\n let iData = renderData.iDatas[0];\n\n let buffer = this.getBuffer(renderer);\n let offsetInfo = buffer.request(this.verticesCount, this.indicesCount);\n\n // buffer data may be realloc, need get reference after request.\n\n // fill vertices\n let vertexOffset = offsetInfo.byteOffset >> 2,\n vbuf = buffer._vData;\n\n if (vData.length + vertexOffset > vbuf.length) {\n vbuf.set(vData.subarray(0, vbuf.length - vertexOffset), vertexOffset);\n } else {\n vbuf.set(vData, vertexOffset);\n }\n\n // fill indices\n let ibuf = buffer._iData,\n indiceOffset = offsetInfo.indiceOffset,\n vertexId = offsetInfo.vertexOffset;\n for (let i = 0, l = iData.length; i < l; i++) {\n ibuf[indiceOffset++] = vertexId + iData[i];\n }\n }\n\n updateTexId(comp) {\n const texId = comp._texId;\n let texIdOffset = this.texIdOffset;\n let floatsPerVert = this.floatsPerVert;\n let verts = this._renderData.vDatas[0];\n for (let i = 0, l = verts.length; i < l; i++) {\n verts[floatsPerVert * i + texIdOffset] = texId;\n }\n }\n}\n\ncc.js.addon(Assembler2D.prototype, {\n floatsPerVert: 5,\n\n verticesCount: 4,\n indicesCount: 6,\n\n uvOffset: 2,\n colorOffset: 4,\n \n isMulti: false,\n});\n\ncc.Assembler2D = Assembler2D;\n","import Pool from '../utils/pool';\n\nlet _assemblerId = 0;\n\nfunction getAssemblerId (assemblerCtor) {\n if (!Object.getOwnPropertyDescriptor(assemblerCtor, '__assemblerId__')) {\n assemblerCtor.__assemblerId__ = ++_assemblerId;\n }\n return assemblerCtor.__assemblerId__;\n}\n\n/**\n * {\n * assembler_ctor_id: []\n * }\n */\nclass AssemblerPool extends Pool {\n _pool = {};\n\n put (assembler) {\n if (!assembler) return;\n if (!this.enabled) {\n if (CC_JSB && CC_NATIVERENDERER) {\n assembler.destroy && assembler.destroy();\n }\n return;\n }\n\n let id = getAssemblerId(assembler.constructor);\n let pool = this._pool;\n if (!pool[id]) {\n pool[id] = [];\n }\n if (this.count > this.maxSize) return;\n\n this._clean(assembler);\n pool[id].push(assembler);\n this.count++;\n }\n\n get (assemblerCtor) {\n let assembler;\n \n if (this.enabled) {\n let pool = this._pool;\n let id = getAssemblerId(assemblerCtor);\n assembler = pool[id] && pool[id].pop();\n }\n\n if (!assembler) {\n assembler = new assemblerCtor();\n }\n else {\n this.count--;\n }\n return assembler;\n }\n\n clear () {\n if (CC_JSB && CC_NATIVERENDERER) {\n let pool = this._pool;\n for (let name in pool) {\n let assemblers = pool[name];\n if (!assemblers) continue;\n\n for (let i = 0; i < assemblers.length; i++) {\n assemblers[i].destroy && assemblers[i].destroy();\n }\n }\n }\n \n this._pool = {};\n this.count = 0;\n }\n\n _clean (assembler) {\n if (CC_JSB && CC_NATIVERENDERER) {\n assembler.reset();\n }\n assembler._renderComp = null;\n }\n}\n\nlet pool = new AssemblerPool();\nPool.register('assembler', pool);\nexport default pool;\n","import { vfmtPosUvColor } from './webgl/vertex-format';\nimport assemblerPool from './assembler-pool';\nimport dynamicAtlasManager from './utils/dynamic-atlas/manager';\n\nexport default class Assembler {\n constructor () {\n this._extendNative && this._extendNative();\n }\n init (renderComp) {\n this._renderComp = renderComp;\n }\n \n updateRenderData (comp) {\n }\n\n updateRenderDataForSwitchMaterial(comp) {\n \n }\n\n fillBuffers (comp, renderer) {\n }\n \n getVfmt () {\n return vfmtPosUvColor;\n }\n\n packDynamicAtlasAndCheckMaterial(comp, frame) {\n if (CC_TEST) return false;\n\n const allowDynamicAtlas = comp.allowDynamicAtlas;\n if ((cc.sp.allowDynamicAtlas && allowDynamicAtlas === 0) || allowDynamicAtlas === 1) {\n if (!frame._original && dynamicAtlasManager && frame._texture.packable) {\n let packedFrame = dynamicAtlasManager.insertSpriteFrame(frame);\n if (packedFrame) {\n frame._setDynamicAtlasFrame(packedFrame);\n }\n }\n }\n\n const material = comp._materials[0];\n if (!material) return false;\n\n // 自动切换材质\n if (this.checkAndSwitchMaterial(comp, frame._texture, material)) {\n return true;\n }\n\n if (material.material.isMultiSupport()) {\n comp._texIdDirty = true;\n } else {\n if (material.getProperty('texture') !== frame._texture) {\n // texture was packed to dynamic atlas, should update uvs\n comp._vertsDirty = true;\n comp._updateMaterial();\n }\n }\n\n return false;\n }\n\n checkAndSwitchMaterial(comp, texture, material) {\n const autoSwitchMaterial = comp.autoSwitchMaterial;\n if ((cc.sp.autoSwitchMaterial && autoSwitchMaterial === 0) || autoSwitchMaterial === 1) {\n if (texture._multiMaterial) {\n if (material.material !== texture._multiMaterial) {\n comp.setMaterial(0, texture._multiMaterial);\n // setMaterial 中会置 comp._texIdDirty = true;\n if (!this.isMulti) {\n comp._assembler.updateRenderDataForSwitchMaterial(comp);\n return true;\n }\n }\n }\n }\n }\n\n}\n\n\nAssembler.register = function (renderCompCtor, assembler) {\n renderCompCtor.__assembler__ = assembler;\n};\n\nAssembler.init = function (renderComp) {\n let renderCompCtor = renderComp.constructor;\n let assemblerCtor = renderCompCtor.__assembler__;\n while (!assemblerCtor) {\n renderCompCtor = renderCompCtor.$super;\n if (!renderCompCtor) {\n cc.warn(`Can not find assembler for render component : [${cc.js.getClassName(renderComp)}]`);\n return;\n }\n assemblerCtor = renderCompCtor.__assembler__;\n }\n if (assemblerCtor.getConstructor) {\n assemblerCtor = assemblerCtor.getConstructor(renderComp);\n }\n \n if (!renderComp._assembler || renderComp._assembler.constructor !== assemblerCtor) {\n let assembler = assemblerPool.get(assemblerCtor);\n assembler.init(renderComp);\n renderComp._assembler = assembler;\n }\n};\n\ncc.Assembler = Assembler;\n","\n// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. \n \nvar Device = function Device(canvasEL) {\n var ctx;\n\n try {\n ctx = canvasEL.getContext('2d');\n } catch (err) {\n console.error(err);\n return;\n }\n\n // statics\n this._canvas = canvasEL;\n this._ctx = ctx;\n this._caps = {}; // capability\n this._stats = {\n drawcalls: 0,\n };\n\n // runtime\n this._vx = this._vy = this._vw = this._vh = 0;\n this._sx = this._sy = this._sw = this._sh = 0;\n};\n\nDevice.prototype._restoreTexture = function _restoreTexture (unit) {\n};\n\n// ===============================\n// Immediate Settings\n// ===============================\n\n/**\n * @method setViewport\n * @param {Number} x\n * @param {Number} y\n * @param {Number} w\n * @param {Number} h\n */\nDevice.prototype.setViewport = function setViewport (x, y, w, h) {\n if (\n this._vx !== x ||\n this._vy !== y ||\n this._vw !== w ||\n this._vh !== h\n ) {\n this._vx = x;\n this._vy = y;\n this._vw = w;\n this._vh = h;\n }\n};\n\n/**\n * @method setScissor\n * @param {Number} x\n * @param {Number} y\n * @param {Number} w\n * @param {Number} h\n */\nDevice.prototype.setScissor = function setScissor (x, y, w, h) {\n if (\n this._sx !== x ||\n this._sy !== y ||\n this._sw !== w ||\n this._sh !== h\n ) {\n this._sx = x;\n this._sy = y;\n this._sw = w;\n this._sh = h;\n }\n};\n\nDevice.prototype.clear = function clear (color) {\n var ctx = this._ctx;\n ctx.clearRect(this._vx, this._vy, this._vw, this._vh);\n if (color && (color[0] !== 0 || color[1] !== 0 || color[2] !== 0)) {\n ctx.fillStyle = 'rgb(' + color[0] + ',' + color[1] + ',' + color[2] +')';\n ctx.globalAlpha = color[3];\n ctx.fillRect(this._vx, this._vy, this._vw, this._vh);\n }\n};\n\nDevice.prototype.resetDrawCalls = function () {\n this._stats.drawcalls = 0;\n}\n\nDevice.prototype.getDrawCalls = function () {\n return this._stats.drawcalls;\n}\n\nmodule.exports = Device;\n","\n// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. \n \nvar Texture2D = function Texture2D(device, options) {\n this._device = device;\n \n this._width = 4;\n this._height = 4;\n\n this._image = null;\n\n if (options) {\n if (options.width !== undefined) {\n this._width = options.width;\n }\n if (options.height !== undefined) {\n this._height = options.height;\n }\n\n this.updateImage(options);\n }\n};\n\nTexture2D.prototype.update = function update (options) {\n this.updateImage(options);\n};\n\nTexture2D.prototype.updateImage = function updateImage (options) {\n if (options.images && options.images[0]) {\n var image = options.images[0];\n if (image && image !== this._image) {\n this._image = image;\n }\n }\n};\n\nTexture2D.prototype.destroy = function destroy () {\n this._image = null;\n};\n\nmodule.exports = Texture2D;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nimport gfx from '../../renderer/gfx';\n\nimport InputAssembler from '../../renderer/core/input-assembler';\nimport Pass from '../../renderer/core/pass';\n\n// const RenderFlow = require('./render-flow');\n\nfunction _initBuiltins(device) {\n let defaultTexture = new gfx.Texture2D(device, {\n images: [],\n width: 128,\n height: 128,\n wrapS: gfx.WRAP_REPEAT,\n wrapT: gfx.WRAP_REPEAT,\n format: gfx.TEXTURE_FMT_RGB8,\n genMipmaps: false,\n });\n\n return {\n defaultTexture: defaultTexture,\n programTemplates: [],\n programChunks: {},\n };\n}\n\n/**\n * @module cc\n */\n\n/**\n * !#en The renderer object which provide access to render system APIs, \n * detailed APIs will be available progressively.\n * !#zh 提供基础渲染接口的渲染器对象,渲染层的基础接口将逐步开放给用户\n * @class renderer\n * @static\n */\nexport default cc.renderer = {\n Texture2D: null,\n\n InputAssembler: InputAssembler,\n Pass: Pass,\n\n /**\n * !#en The render engine is available only after cc.game.EVENT_ENGINE_INITED event.
\n * Normally it will be inited as the webgl render engine, but in wechat open context domain,\n * it will be inited as the canvas render engine. Canvas render engine is no longer available for other use case since v2.0.\n * !#zh 基础渲染引擎对象只在 cc.game.EVENT_ENGINE_INITED 事件触发后才可获取。
\n * 大多数情况下,它都会是 WebGL 渲染引擎实例,但是在微信开放数据域当中,它会是 Canvas 渲染引擎实例。请注意,从 2.0 开始,我们在其他平台和环境下都废弃了 Canvas 渲染器。\n * @property renderEngine\n * @deprecated\n * @type {Object}\n */\n renderEngine: null,\n\n /*\n * !#en The canvas object which provides the rendering context\n * !#zh 用于渲染的 Canvas 对象\n * @property canvas\n * @type {HTMLCanvasElement}\n */\n canvas: null,\n /*\n * !#en The device object which provides device related rendering functionality, it divers for different render engine type.\n * !#zh 提供设备渲染能力的对象,它对于不同的渲染环境功能也不相同。\n * @property device\n * @type {renderer.Device}\n */\n device: null,\n scene: null,\n /**\n * !#en The total draw call count in last rendered frame.\n * !#zh 上一次渲染帧所提交的渲染批次总数。\n * @property drawCalls\n * @type {Number}\n */\n drawCalls: 0,\n // Render component handler\n _handle: null,\n _cameraNode: null,\n _camera: null,\n _forward: null,\n _flow: null,\n\n initWebGL (canvas, opts) {\n require('./webgl/assemblers');\n const ModelBatcher = require('./webgl/model-batcher');\n\n this.Texture2D = gfx.Texture2D;\n this.canvas = canvas;\n this._flow = cc.RenderFlow;\n \n if (CC_JSB && CC_NATIVERENDERER) {\n // native codes will create an instance of Device, so just use the global instance.\n this.device = gfx.Device.getInstance();\n this.scene = new renderer.Scene();\n let builtins = _initBuiltins(this.device);\n this._forward = new renderer.ForwardRenderer(this.device, builtins);\n let nativeFlow = new renderer.RenderFlow(this.device, this.scene, this._forward);\n this._flow.init(nativeFlow);\n }\n else {\n let Scene = require('../../renderer/scene/scene');\n let ForwardRenderer = require('../../renderer/renderers/forward-renderer');\n this.device = new gfx.Device(canvas, opts);\n this.scene = new Scene();\n let builtins = _initBuiltins(this.device);\n this._forward = new ForwardRenderer(this.device, builtins);\n this._handle = new ModelBatcher(this.device, this.scene);\n this._flow.init(this._handle, this._forward);\n }\n },\n\n initCanvas (canvas) {\n const canvasRenderer = require('./canvas');\n const Texture2D = require('./canvas/Texture2D');\n const Device = require('./canvas/Device');\n\n // It's actually running with original render engine\n this.Device = Device;\n\n this.Texture2D = Texture2D;\n\n this.canvas = canvas;\n this.device = new Device(canvas);\n this._camera = {\n a: 1, b: 0, c: 0, d: 1, tx: 0, ty: 0\n };\n this._handle = new canvasRenderer.RenderComponentHandle(this.device, this._camera);\n this._forward = new canvasRenderer.ForwardRenderer();\n this._flow = cc.RenderFlow;\n this._flow.init(this._handle, this._forward);\n },\n\n updateCameraViewport () {\n // TODO: remove HACK\n if (!CC_EDITOR && cc.director) {\n let ecScene = cc.director.getScene();\n if (ecScene) ecScene.setScale(1, 1, 1);\n }\n\n if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS) {\n let vp = cc.view.getViewportRect();\n this.device.setViewport(vp.x, vp.y, vp.width, vp.height);\n this._camera.a = cc.view.getScaleX();\n this._camera.d = cc.view.getScaleY();\n this._camera.tx = vp.x;\n this._camera.ty = vp.y + vp.height;\n }\n },\n\n render (ecScene, dt) {\n this.device.resetDrawCalls();\n if (ecScene) {\n // walk entity component scene to generate models\n this._flow.render(ecScene, dt);\n this.drawCalls = this.device.getDrawCalls();\n }\n },\n\n clear () {\n this._handle.reset();\n this._forward.clear();\n }\n};\n","let FlagOfset = 0;\n\nconst DONOTHING = 1 << FlagOfset++;\nconst BREAK_FLOW = 1 << FlagOfset++;\nconst LOCAL_TRANSFORM = 1 << FlagOfset++;\nconst WORLD_TRANSFORM = 1 << FlagOfset++;\nconst TRANSFORM = LOCAL_TRANSFORM | WORLD_TRANSFORM;\nconst UPDATE_RENDER_DATA = 1 << FlagOfset++;\nconst OPACITY = 1 << FlagOfset++;\nconst COLOR = 1 << FlagOfset++;\nconst OPACITY_COLOR = OPACITY | COLOR;\nconst RENDER = 1 << FlagOfset++;\nconst CHILDREN = 1 << FlagOfset++;\nconst POST_RENDER = 1 << FlagOfset++;\nconst FINAL = 1 << FlagOfset++;\n\nlet _batcher, _forward;\nlet _cullingMask = 0;\n\nfunction RenderFlow () {\n this._func = init;\n this._next = null;\n}\n\nlet _proto = RenderFlow.prototype;\n_proto._doNothing = function () {\n};\n\n_proto._localTransform = function (node) {\n node._updateLocalMatrix();\n node._renderFlag &= ~LOCAL_TRANSFORM;\n this._next._func(node);\n};\n\n_proto._worldTransform = function (node) {\n _batcher.worldMatDirty ++;\n\n let t = node._matrix;\n let trs = node._trs;\n let tm = t.m;\n tm[12] = trs[0];\n tm[13] = trs[1];\n tm[14] = trs[2];\n\n node._mulMat(node._worldMatrix, node._parent._worldMatrix, t);\n node._renderFlag &= ~WORLD_TRANSFORM;\n this._next._func(node);\n\n _batcher.worldMatDirty --;\n};\n\n_proto._opacity = function (node) {\n _batcher.parentOpacityDirty++;\n\n this._next._func(node);\n\n node._renderFlag &= ~OPACITY;\n _batcher.parentOpacityDirty--;\n};\n\n_proto._color = function (node) {\n let comp = node._renderComponent;\n if (comp) {\n comp._updateColor();\n }\n\n node._renderFlag &= ~COLOR;\n this._next._func(node);\n};\n\n_proto._updateRenderData = function (node) {\n let comp = node._renderComponent;\n comp._assembler.updateRenderData(comp);\n node._renderFlag &= ~UPDATE_RENDER_DATA;\n this._next._func(node);\n};\n\n_proto._render = function (node) {\n let comp = node._renderComponent;\n comp._checkBacth(_batcher, node._cullingMask);\n comp._assembler.fillBuffers(comp, _batcher);\n this._next._func(node);\n};\n\n\n_proto._children = function (node) {\n let cullingMask = _cullingMask;\n let batcher = _batcher;\n\n let parentOpacity = batcher.parentOpacity;\n let opacity = (batcher.parentOpacity *= (node._opacity / 255));\n\n let worldTransformFlag = batcher.worldMatDirty ? WORLD_TRANSFORM : 0;\n let worldOpacityFlag = batcher.parentOpacityDirty ? OPACITY_COLOR : 0;\n let worldDirtyFlag = worldTransformFlag | worldOpacityFlag;\n\n let children = node._children;\n for (let i = 0, l = children.length; i < l; i++) {\n let c = children[i];\n\n // Advance the modification of the flag to avoid node attribute modification is invalid when opacity === 0.\n c._renderFlag |= worldDirtyFlag;\n if (!c._activeInHierarchy || c._opacity === 0) continue;\n\n _cullingMask = c._cullingMask = c.groupIndex === 0 ? cullingMask : 1 << c.groupIndex;\n\n // TODO: Maybe has better way to implement cascade opacity\n let colorVal = c._color._val;\n c._color._fastSetA(c._opacity * opacity);\n flows[c._renderFlag]._func(c);\n c._color._val = colorVal;\n }\n\n batcher.parentOpacity = parentOpacity;\n\n this._next._func(node);\n};\n\n_proto._postRender = function (node) {\n let comp = node._renderComponent;\n comp._checkBacth(_batcher, node._cullingMask);\n comp._assembler.postFillBuffers(comp, _batcher);\n this._next._func(node);\n};\n\nconst EMPTY_FLOW = new RenderFlow();\nEMPTY_FLOW._func = EMPTY_FLOW._doNothing;\nEMPTY_FLOW._next = EMPTY_FLOW;\n\nlet flows = {};\n\nfunction createFlow (flag, next) {\n let flow = new RenderFlow();\n flow._next = next || EMPTY_FLOW;\n\n switch (flag) {\n case DONOTHING: \n flow._func = flow._doNothing;\n break;\n case BREAK_FLOW:\n flow._func = flow._doNothing;\n break;\n case LOCAL_TRANSFORM: \n flow._func = flow._localTransform;\n break;\n case WORLD_TRANSFORM: \n flow._func = flow._worldTransform;\n break;\n case OPACITY:\n flow._func = flow._opacity;\n break;\n case COLOR:\n flow._func = flow._color;\n break;\n case UPDATE_RENDER_DATA:\n flow._func = flow._updateRenderData;\n break;\n case RENDER: \n flow._func = flow._render;\n break;\n case CHILDREN: \n flow._func = flow._children;\n break;\n case POST_RENDER: \n flow._func = flow._postRender;\n break;\n }\n\n return flow;\n}\n\nfunction getFlow (flag) {\n let flow = null;\n let tFlag = FINAL;\n while (tFlag > 0) {\n if (tFlag & flag)\n flow = createFlow(tFlag, flow);\n tFlag = tFlag >> 1;\n }\n return flow;\n}\n\n// \nfunction init (node) {\n let flag = node._renderFlag;\n let r = flows[flag] = getFlow(flag);\n r._func(node);\n}\n\nRenderFlow.flows = flows;\nRenderFlow.createFlow = createFlow;\n\n// validate whether render component is ready to be rendered.\nlet _validateList = [];\nRenderFlow.registerValidate = function (renderComp) {\n if (renderComp._inValidateList) return;\n _validateList.push(renderComp);\n renderComp._inValidateList = true;\n};\nRenderFlow.validateRenderers = function () {\n for (let i = 0, l = _validateList.length; i < l; i++) {\n let renderComp = _validateList[i];\n if (!renderComp.isValid) continue;\n if (!renderComp.enabledInHierarchy) {\n renderComp.disableRender();\n }\n else {\n renderComp._validateRender();\n }\n renderComp._inValidateList = false;\n }\n _validateList.length = 0;\n};\n\n\nRenderFlow.visitRootNode = function (rootNode) {\n RenderFlow.validateRenderers(); \n\n let preCullingMask = _cullingMask;\n _cullingMask = rootNode._cullingMask;\n\n if (rootNode._renderFlag & WORLD_TRANSFORM) {\n _batcher.worldMatDirty ++;\n rootNode._calculWorldMatrix();\n rootNode._renderFlag &= ~WORLD_TRANSFORM;\n\n flows[rootNode._renderFlag]._func(rootNode);\n\n _batcher.worldMatDirty --;\n }\n else {\n flows[rootNode._renderFlag]._func(rootNode);\n }\n\n _cullingMask = preCullingMask;\n};\n\nRenderFlow.render = function (rootNode, dt) {\n _batcher.reset();\n _batcher.walking = true;\n\n RenderFlow.visitRootNode(rootNode);\n\n _batcher.terminate();\n _batcher.walking = false;\n\n _forward.render(_batcher._renderScene, dt);\n};\n\nRenderFlow.renderCamera = function (camera, rootNode) {\n _batcher.reset();\n _batcher.walking = true;\n\n RenderFlow.visitRootNode(rootNode);\n\n _batcher.terminate();\n _batcher.walking = false;\n\n _forward.renderCamera(camera, _batcher._renderScene);\n};\n\nRenderFlow.init = function (batcher, forwardRenderer) {\n _batcher = batcher;\n _forward = forwardRenderer;\n\n flows[0] = EMPTY_FLOW;\n for (let i = 1; i < FINAL; i++) {\n flows[i] = new RenderFlow();\n }\n};\n\nRenderFlow.getBachther = function () {\n return _batcher;\n};\n\nRenderFlow.FLAG_DONOTHING = DONOTHING;\nRenderFlow.FLAG_BREAK_FLOW = BREAK_FLOW;\nRenderFlow.FLAG_LOCAL_TRANSFORM = LOCAL_TRANSFORM;\nRenderFlow.FLAG_WORLD_TRANSFORM = WORLD_TRANSFORM;\nRenderFlow.FLAG_TRANSFORM = TRANSFORM;\nRenderFlow.FLAG_OPACITY = OPACITY;\nRenderFlow.FLAG_COLOR = COLOR;\nRenderFlow.FLAG_OPACITY_COLOR = OPACITY_COLOR;\nRenderFlow.FLAG_UPDATE_RENDER_DATA = UPDATE_RENDER_DATA;\nRenderFlow.FLAG_RENDER = RENDER;\nRenderFlow.FLAG_CHILDREN = CHILDREN;\nRenderFlow.FLAG_POST_RENDER = POST_RENDER;\nRenderFlow.FLAG_FINAL = FINAL;\n\nmodule.exports = cc.RenderFlow = RenderFlow;\n","// const Atlas = require('./atlas');\nimport { Atlas, Rect } from './reusable-atlas';\n\nlet _atlases = [];\nlet _atlasIndex = -1;\n\nlet _maxAtlasCount = -1;\nlet _textureSize = 2048;\nlet _maxFrameSize = 512;\nlet _textureBleeding = true;\nlet _autoMultiBatch = true;\nlet _autoResetBeforeSceneLoad = true;\n\nlet _debugNode = null;\n\nfunction newAtlas () {\n let atlas = _atlases[++_atlasIndex]\n if (!atlas) {\n atlas = new Atlas(_textureSize, _textureSize);\n _atlases.push(atlas);\n if (dynamicAtlasManager.autoMultiBatch) cc.sp.multiBatcher.requsetMaterial(atlas._texture);\n }\n return atlas;\n}\n\nfunction beforeSceneLoad() {\n if (_autoResetBeforeSceneLoad) {\n dynamicAtlasManager.reset();\n }\n}\n\nlet _enabled = false;\n\n/**\n * !#en Manage Dynamic Atlas Manager. Dynamic Atlas Manager is used for merging textures at runtime, see [Dynamic Atlas](https://docs.cocos.com/creator/manual/en/advanced-topics/dynamic-atlas.html) for details.\n * !#zh 管理动态图集。动态图集用于在运行时对贴图进行合并,详见 [动态合图](https://docs.cocos.com/creator/manual/zh/advanced-topics/dynamic-atlas.html)。\n * @class DynamicAtlasManager\n */\nlet dynamicAtlasManager = {\n Atlas: Atlas,\n Rect: Rect,\n\n /**\n * !#en Enable or disable the dynamic atlas, see [Dynamic Atlas](https://docs.cocos.com/creator/manual/en/advanced-topics/dynamic-atlas.html) for details.\n * !#zh 开启或者关闭动态图集,详见 [动态合图](https://docs.cocos.com/creator/manual/zh/advanced-topics/dynamic-atlas.html)。\n * @property enabled\n * @type {Boolean}\n */\n get enabled() {\n return _enabled;\n },\n set enabled(value) {\n if (_enabled === value) return;\n\n if (value) {\n this.reset();\n cc.director.on(cc.Director.EVENT_BEFORE_SCENE_LAUNCH, beforeSceneLoad);\n }\n else {\n cc.director.off(cc.Director.EVENT_BEFORE_SCENE_LAUNCH, beforeSceneLoad);\n }\n\n _enabled = value;\n },\n\n /**\n * !#en The maximum number of atlas that can be created.\n * !#zh 可以创建的最大图集数量。\n * @property maxAtlasCount\n * @type {Number}\n */\n get maxAtlasCount() {\n return _maxAtlasCount;\n },\n set maxAtlasCount(value) {\n _maxAtlasCount = value;\n },\n\n /**\n * !#en Get the current created atlas count.\n * !#zh 获取当前已经创建的图集数量。\n * @property atlasCount\n * @type {Number}\n */\n get atlasCount() {\n return _atlases.length;\n },\n\n /**\n * !#en Is enable textureBleeding.\n * !#zh 是否开启 textureBleeding\n * @property textureBleeding\n * @type {Boolean}\n */\n get textureBleeding() {\n return _textureBleeding;\n },\n\n set textureBleeding(enable) {\n _textureBleeding = enable;\n },\n\n /**\n * !#en The size of the atlas that was created\n * !#zh 创建的图集的宽高\n * @property textureSize\n * @type {Number}\n */\n get textureSize() {\n return _textureSize;\n },\n set textureSize(value) {\n _textureSize = value;\n },\n\n /**\n * !#en The maximum size of the picture that can be added to the atlas.\n * !#zh 可以添加进图集的图片的最大尺寸。\n * @property maxFrameSize\n * @type {Number}\n */\n get maxFrameSize() {\n return _maxFrameSize;\n },\n set maxFrameSize(value) {\n _maxFrameSize = value;\n },\n\n /**\n * !#en Is enable autoMultiBatch.\n * !#zh 是否开启自动多纹理合批\n * @property autoMultiBatch\n * @type {Boolean}\n */\n get autoMultiBatch() {\n return _autoMultiBatch;\n },\n\n set autoMultiBatch(enable) {\n if (_autoMultiBatch === enable) return;\n\n if (enable) {\n for (let i = 0, l = _atlases.length; i < l; i++) {\n cc.sp.multiBatcher.requsetMaterial(_atlases[i]._texture);\n }\n }\n\n _autoMultiBatch = enable;\n },\n\n /**\n * !#en Is enable autoResetBeforeSceneLoad.\n * !#zh 是否在场景切换时清空所有图集\n * @property autoResetBeforeSceneLoad\n * @type {Boolean}\n */\n get autoResetBeforeSceneLoad() {\n return _autoResetBeforeSceneLoad;\n },\n\n set autoResetBeforeSceneLoad(enable) {\n if (_autoResetBeforeSceneLoad === enable) return;\n _autoResetBeforeSceneLoad = enable;\n },\n\n /**\n * !#en atlases\n * !#zh 图集数组\n * @property atlases\n * @type {Atlas}\n */\n get atlases() {\n return _atlases;\n },\n\n /**\n * 已用空间集合\n */\n rects: Object.create(null),\n\n /**\n * !#en The minimum size of the picture that can be added to the atlas.\n * !#zh 可以添加进图集的图片的最小尺寸。\n * @property minFrameSize\n * @type {Number}\n * @deprecated\n */\n\n /**\n * !#en Append a sprite frame into the dynamic atlas.\n * !#zh 添加碎图进入动态图集。\n * @method insertSpriteFrame\n * @param {SpriteFrame} spriteFrame\n */\n insertSpriteFrame(spriteFrame) {\n if (CC_EDITOR) return null;\n if (!_enabled || !spriteFrame || spriteFrame._original) return null;\n\n let atlas, frame;\n\n // 是否贴图已经在图集中\n let rect = spriteFrame._rect,\n texture = spriteFrame._texture,\n info = this.rects[texture._uuid];\n \n let sx = rect.x, sy = rect.y;\n\n if (info) {\n sx += info.x;\n sy += info.y;\n\n info.spriteFrames.push(spriteFrame);\n\n frame = {\n x: sx,\n y: sy,\n texture: info.atlas._texture,\n };\n\n return frame;\n }\n\n // 尝试加入已有图集\n for (let i = 0; i <= _atlasIndex; i++) {\n atlas = _atlases[i];\n frame = atlas.insertSpriteFrame(spriteFrame);\n if (frame) {\n return frame;\n }\n }\n\n // 创建新图集尝试加入\n if (_atlasIndex + 1 < _maxAtlasCount) {\n atlas = newAtlas();\n return atlas.insertSpriteFrame(spriteFrame);\n }\n\n return frame;\n },\n\n /**\n * !#en Delete a sprite frame from the dynamic atlas.\n * !#zh 使精灵帧取消使用动态图集\n * @method deleteSpriteFrame\n * @param {SpriteFrame} spriteFrame\n */\n deleteSpriteFrame(spriteFrame) {\n if (spriteFrame && !CC_TEST) {\n if (spriteFrame._original) {\n this.deleteAtlasSpriteFrame(spriteFrame);\n spriteFrame._resetDynamicAtlasFrame();\n }\n }\n },\n\n /**\n * !#en Delete a texture from the dynamic atlas.\n * !#zh 从动态图集删除该贴图,使用该贴图的精灵帧会被还原\n * @method deleteTexture\n * @param {Texture2D} texture\n */\n deleteTexture(texture) {\n this.deleteAtlasTexture(texture);\n },\n\n /**\n * !#en Resets all dynamic atlas, and the existing ones will be destroyed.\n * !#zh 重置所有动态图集,已有的动态图集会被销毁。\n * @method reset\n */\n reset () {\n for (let i = 0, l = _atlases.length; i < l; i++) {\n _atlases[i].destroy();\n }\n _atlases.length = 0;\n _atlasIndex = -1;\n },\n\n deleteAtlasSpriteFrame (spriteFrame) {\n if (!spriteFrame._original) return;\n\n let texture = spriteFrame._original._texture;\n for (let i = _atlases.length - 1; i >= 0; i--) {\n if (_atlases[i].deleteSpriteFrame(texture, spriteFrame)) {\n return;\n }\n }\n },\n\n deleteAtlasTexture (texture) {\n if (texture) {\n for (let i = _atlases.length - 1; i >= 0; i--) {\n if (_atlases[i].deleteInnerTexture(texture, true)) {\n return;\n }\n }\n }\n },\n\n /**\n * !#en Displays all the dynamic atlas in the current scene, which you can use to view the current atlas state.\n * !#zh 在当前场景中显示所有动态图集,可以用来查看当前的合图状态。\n * @method showDebug\n * @param {Boolean} show\n * @return {Node}\n */\n showDebug: CC_DEBUG && function (show) {\n if (show) {\n if (!_debugNode || !_debugNode.isValid) {\n let width = cc.visibleRect.width;\n let height = cc.visibleRect.height;\n\n _debugNode = new cc.Node('DYNAMIC_ATLAS_DEBUG_NODE');\n _debugNode.width = width;\n _debugNode.height = height;\n _debugNode.x = width/2;\n _debugNode.y = height/2;\n _debugNode.zIndex = cc.macro.MAX_ZINDEX;\n _debugNode.parent = cc.director.getScene();\n\n _debugNode.groupIndex = cc.Node.BuiltinGroupIndex.DEBUG;\n cc.Camera._setupDebugCamera();\n\n let scroll = _debugNode.addComponent(cc.ScrollView);\n\n let content = new cc.Node('CONTENT');\n let layout = content.addComponent(cc.Layout);\n layout.type = cc.Layout.Type.VERTICAL;\n layout.resizeMode = cc.Layout.ResizeMode.CONTAINER;\n content.parent = _debugNode;\n content.width = _textureSize;\n content.anchorY = 1;\n content.x = _textureSize;\n\n scroll.content = content;\n\n for (let i = 0; i <= _atlasIndex; i++) {\n let node = new cc.Node('ATLAS');\n\n let texture = _atlases[i]._texture;\n let spriteFrame = new cc.SpriteFrame();\n spriteFrame.setTexture(_atlases[i]._texture);\n\n let sprite = node.addComponent(cc.Sprite);\n sprite.spriteFrame = spriteFrame;\n\n node.parent = content;\n }\n }\n return _debugNode;\n }\n else {\n if (_debugNode) {\n _debugNode.parent = null;\n _debugNode = null;\n }\n }\n },\n\n update () {\n if (!this.enabled) return;\n\n for (let i = 0; i <= _atlasIndex; i++) {\n _atlases[i].update();\n }\n },\n};\n\n/**\n * @module cc\n */\n\n/**\n * @property dynamicAtlasManager\n * @type DynamicAtlasManager\n */\nmodule.exports = cc.dynamicAtlasManager = dynamicAtlasManager;\n","// @ts-expect-error\nconst RenderTexture = require('../../../assets/CCRenderTexture');\n\n\n/**\n * 矩形\n */\nexport class Rect {\n\n /**\n * 对象池\n */\n static pool: Rect[] = [];\n\n /**\n * 对象池指针\n */\n static pointer: number = 0;\n\n\n /**\n * 复用\n */\n static reuse(atlas: Atlas, width: number, height: number, x: number, y: number) {\n if (this.pointer === 0) {\n for (let i = 0; i < 128; i++) {\n Rect.pool[i] = new Rect(atlas, 0, 0, 0, 0);\n }\n this.pointer += 128;\n }\n\n this.pointer--;\n const rect = this.pool[this.pointer];\n\n rect.atlas = atlas;\n rect.width = width;\n rect.height = height;\n rect.x = x;\n rect.y = y;\n\n return rect;\n }\n\n\n /**\n * 回收\n */\n static recycle(rect: Rect) {\n rect.atlas = undefined!;\n rect.uuid = \"\";\n rect.spriteFrames.length = 0;\n rect.parentRect = undefined;\n rect.subRectA = undefined;\n rect.subRectB = undefined;\n rect.subRectC = undefined;\n\n rect.cacheIndex = -1;\n\n this.pool[this.pointer] = rect;\n this.pointer++;\n }\n\n\n /**\n * 所属 Atlas\n */\n atlas: Atlas;\n\n /**\n * 宽度\n */\n width: number = 0;\n\n /**\n * 高度\n */\n height: number = 0;\n\n /**\n * 横坐标\n */\n x: number = 0;\n\n /**\n * 纵坐标\n */\n y: number = 0;\n\n /**\n * 在 freeRects 中的下标\n */\n cacheIndex: number = -1;\n\n /**\n * cc.Texture2D UUID\n */\n uuid: string = '';\n\n /**\n * 使用该贴图的精灵帧数组\n */\n spriteFrames: any[] = [];\n\n /**\n * 父矩形\n */\n parentRect: Rect | undefined;\n\n /**\n * 子矩形之一\n */\n subRectA: Rect | undefined;\n\n /**\n * 子矩形之一\n */\n subRectB: Rect | undefined;\n\n /**\n * 子矩形之一\n */\n subRectC: Rect | undefined;\n\n /**\n * 子矩形或自身计数\n */\n used: number = 0;\n\n /**\n * 像素数\n */\n get sizes() {\n return this.width * this.height;\n }\n\n\n constructor(atlas: Atlas, width: number, height: number, x: number, y: number) {\n this.atlas = atlas;\n this.width = width;\n this.height = height;\n this.x = x;\n this.y = y;\n }\n\n}\n\n\n/**\n * 动态图集\n *\n * 装箱算法:类似断头台装箱算法\n * 合并算法:树形回退模式\n */\nexport class Atlas {\n\n /**\n * 当自由空间的某边长度不足该值则直接忽略该空间\n */\n static ignoreRectSize: number = 10;\n\n /**\n * 默认 Atlas\n */\n static DEFAULT_HASH = (new RenderTexture())._getHash();\n\n /**\n * 宽度\n */\n width: number = 0;\n\n /**\n * 高度\n */\n height: number = 0;\n\n /**\n * 间距\n */\n padding: number = 0;\n\n /**\n * 边距\n */\n border: number = 0;\n\n /**\n * 根矩形\n */\n rootRect: Rect;\n\n /**\n * 自由空间\n */\n freeRects: Rect[] = [];\n\n /**\n * 已使用数量\n */\n _count = 0;\n\n /**\n * cc.RenderTexture\n */\n _texture: any;\n\n /**\n * texture update dirty\n */\n _dirty: boolean = false;\n\n\n constructor(width: number, height: number, padding: number = 2, border: number = 2) {\n const texture = new RenderTexture();\n texture.initWithSize(width, height);\n texture.update();\n this._texture = texture;\n\n this.width = width;\n this.height = height;\n this.padding = padding;\n this.border = border;\n\n this.rootRect = Rect.reuse(\n this,\n this.width + this.padding - this.border * 2,\n this.height + this.padding - this.border * 2,\n this.border,\n this.border,\n );\n this.pushFreeRect(this.rootRect);\n }\n\n\n /**\n * push to free rects\n */\n protected pushFreeRect(rect: Rect) {\n const i = this.freeRects.push(rect) - 1;\n rect.cacheIndex = i;\n }\n\n\n /**\n * faster remove from free rects\n */\n protected removeFreeRect(index: number) {\n const temp = this.freeRects[index];\n const temp2 = this.freeRects[this.freeRects.length - 1];\n temp2.cacheIndex = index;\n temp.cacheIndex = -1;\n this.freeRects[index] = temp2;\n this.freeRects.pop();\n }\n\n\n /**\n * change member from free rects\n */\n protected replaceFreeRect(index: number, rect: Rect) {\n this.freeRects[index].cacheIndex = -1;\n rect.cacheIndex = index;\n this.freeRects[index] = rect;\n }\n\n\n /**\n * 插入 SpriteFrame\n */\n insertSpriteFrame(spriteFrame: any) {\n let rect = spriteFrame._rect,\n texture = spriteFrame._texture;\n\n let sx = rect.x, sy = rect.y;\n let width = texture.width, height = texture.height;\n\n const result = this.insert(texture);\n\n if (!result) {\n return null;\n }\n\n // texture bleeding\n if (cc.dynamicAtlasManager.textureBleeding) {\n // Smaller frame is more likely to be affected by linear filter\n if (width <= 8 || height <= 8) {\n this._texture.drawTextureAt(texture, result.x - 1, result.y - 1);\n this._texture.drawTextureAt(texture, result.x - 1, result.y + 1);\n this._texture.drawTextureAt(texture, result.x + 1, result.y - 1);\n this._texture.drawTextureAt(texture, result.x + 1, result.y + 1);\n }\n\n this._texture.drawTextureAt(texture, result.x - 1, result.y);\n this._texture.drawTextureAt(texture, result.x + 1, result.y);\n this._texture.drawTextureAt(texture, result.x, result.y - 1);\n this._texture.drawTextureAt(texture, result.x, result.y + 1);\n }\n\n this._texture.drawTextureAt(texture, result.x, result.y);\n\n this._count++;\n\n sx += result.x;\n sy += result.y;\n\n result.spriteFrames.push(spriteFrame);\n\n this._dirty = true;\n\n let frame = {\n x: sx,\n y: sy,\n texture: this._texture,\n };\n\n return frame;\n }\n\n\n /**\n * 插入子函数\n */\n insert(texture: any) {\n const width = texture.width + this.padding, height = texture.height + this.padding;\n let score = Number.MAX_VALUE;\n let areaFit = 0;\n let original: Rect | undefined = undefined;\n let originalIndex = 0;\n\n // 查找足够容纳的空区域\n for (let i = 0; i < this.freeRects.length; i++) {\n const rect = this.freeRects[i];\n if (rect.width >= width && rect.height >= height) {\n areaFit = rect.sizes - width * height;\n if (areaFit < score) {\n original = rect;\n originalIndex = i;\n score = areaFit;\n }\n }\n }\n\n // 切割空区域\n if (original) {\n if (original.width === width && original.height === height) {\n original.uuid = texture._uuid;\n original.used++;\n if (original.parentRect) original.parentRect.used++;\n cc.dynamicAtlasManager.rects[texture._uuid] = original;\n this.removeFreeRect(originalIndex);\n return original;\n }\n\n const best = Rect.reuse(this, width, height, original.x, original.y);\n let tmp: Rect;\n if (best.y + best.height < original.y + original.height) {\n tmp = Rect.reuse(\n this,\n original.width,\n original.y + original.height - (best.y + best.height),\n original.x,\n best.y + best.height,\n );\n\n tmp.parentRect = original;\n original.subRectB = tmp;\n\n if (tmp.width > Atlas.ignoreRectSize && tmp.height > Atlas.ignoreRectSize) {\n // 替换旧区域\n this.replaceFreeRect(originalIndex, tmp);\n originalIndex = -1;\n }\n }\n\n if (best.x + best.width < original.x + original.width) {\n tmp = Rect.reuse(\n this,\n original.x + original.width - (best.x + best.width),\n original.height - (original.y + original.height - (best.y + best.height)),\n best.x + best.width,\n original.y,\n );\n\n tmp.parentRect = original;\n original.subRectC = tmp;\n\n if (tmp.width > Atlas.ignoreRectSize && tmp.height > Atlas.ignoreRectSize) {\n if (originalIndex !== -1) {\n // 替换旧区域\n this.replaceFreeRect(originalIndex, tmp);\n originalIndex = -1;\n } else {\n this.pushFreeRect(tmp);\n }\n }\n }\n\n if (originalIndex !== -1) {\n this.removeFreeRect(originalIndex);\n }\n\n best.parentRect = original;\n original.subRectA = best;\n best.used++;\n original.used++;\n if (original.used === 1 && original.parentRect) original.parentRect.used++;\n best.uuid = texture._uuid;\n cc.dynamicAtlasManager.rects[texture._uuid] = best;\n return best;\n } else {\n return undefined;\n }\n }\n\n\n /**\n * update texture\n */\n update() {\n if (!this._dirty) return;\n this._texture.update();\n this._dirty = false;\n }\n\n\n /**\n * 删除精灵帧\n */\n deleteSpriteFrame(texture: any, frame: any) {\n if (texture) {\n const rect: Rect | undefined = cc.dynamicAtlasManager.rects[texture._uuid];\n if (rect) {\n const index = rect.spriteFrames.indexOf(frame);\n if (index !== -1) {\n rect.spriteFrames.splice(index, 1);\n\n // 判断如果没有引用则删除 Texture\n if (rect.spriteFrames.length === 0) {\n rect.atlas.deleteInnerRect(rect);\n }\n } else {\n cc.warn('[Dynamic Atlas] can\\'t find spriteFrame in Rect.');\n }\n\n return true;\n }\n }\n\n return false;\n }\n\n\n /**\n * 删除子矩形\n */\n deleteInnerRect(rect: Rect) {\n delete cc.dynamicAtlasManager.rects[rect.uuid];\n rect.uuid = \"\";\n this._count--;\n\n // 还原 SpriteFrame\n for (const spriteFrame of rect.spriteFrames) {\n if (spriteFrame.isValid) {\n spriteFrame._resetDynamicAtlasFrame();\n }\n }\n rect.spriteFrames.length = 0;\n\n this.tryMergeRecycle(rect);\n }\n\n\n /**\n * 删除贴图\n */\n deleteInnerTexture(texture: any) {\n if (texture) {\n const rect: Rect | undefined = cc.dynamicAtlasManager.rects[texture._uuid];\n if (rect) {\n rect.atlas.deleteInnerRect(rect);\n return true;\n }\n }\n return false;\n }\n\n\n /**\n * 尝试合并和回收\n */\n protected tryMergeRecycle(rect: Rect) {\n let old: Rect | undefined = undefined;\n let parent: Rect | undefined = rect;\n while (parent) {\n parent.used--;\n if (parent.used === 0) {\n // 回收所有子矩形\n if (parent.subRectA) {\n // 可能是 ignoreRect\n const i = parent.subRectA.cacheIndex;\n if (i !== -1) {\n this.removeFreeRect(i);\n }\n Rect.recycle(parent.subRectA);\n parent.subRectA = undefined;\n }\n if (parent.subRectB) {\n const i = parent.subRectB.cacheIndex;\n if (i !== -1) {\n this.removeFreeRect(i);\n }\n Rect.recycle(parent.subRectB);\n parent.subRectB = undefined;\n }\n if (parent.subRectC) {\n const i = parent.subRectC.cacheIndex;\n if (i !== -1) {\n this.removeFreeRect(i);\n }\n Rect.recycle(parent.subRectC);\n parent.subRectC = undefined;\n }\n old = parent;\n parent = parent.parentRect;\n } else {\n if (old) {\n if (old.width > Atlas.ignoreRectSize && old.height > Atlas.ignoreRectSize) {\n this.pushFreeRect(old);\n }\n }\n old = parent;\n parent = undefined;\n }\n }\n\n if (old === this.rootRect && old.used === 0) {\n this.pushFreeRect(old);\n }\n }\n\n\n /**\n * 是否未使用\n */\n isEmpty() {\n return this._count <= 0;\n }\n\n\n /**\n * 清空\n */\n reset() {\n const rects = cc.dynamicAtlasManager.rects;\n for (const key in rects) {\n const rect: Rect = rects[key];\n if (rect.atlas === this) {\n delete rects[key];\n for (const spriteFrame of rect.spriteFrames) {\n if (spriteFrame.isValid) {\n spriteFrame._resetDynamicAtlasFrame();\n }\n }\n Rect.recycle(rect);\n }\n }\n\n for (const rect of this.freeRects) {\n Rect.recycle(rect);\n }\n\n this.freeRects.length = 0;\n this._count = 0;\n\n this.rootRect = Rect.reuse(\n this,\n this.width + this.padding - this.border * 2,\n this.height + this.padding - this.border * 2,\n this.border,\n this.border,\n );\n this.pushFreeRect(this.rootRect)\n }\n\n\n /**\n * 销毁\n */\n destroy() {\n this.reset();\n this._texture.destroy();\n }\n\n}\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport Assembler2D from '../../assembler-2d';\n\nconst textUtils = require('../../../utils/text-utils');\nconst macro = require('../../../platform/CCMacro');\nconst Label = require('../../../components/CCLabel');\nconst Overflow = Label.Overflow;\n\nconst shareLabelInfo = require('../utils').shareLabelInfo;\n\nlet LetterInfo = function() {\n this.char = '';\n this.valid = true;\n this.x = 0;\n this.y = 0;\n this.line = 0;\n this.hash = \"\";\n};\n\nlet _tmpRect = cc.rect();\n\nlet _comp = null;\n\nlet _horizontalKernings = [];\nlet _lettersInfo = [];\nlet _linesWidth = [];\nlet _linesOffsetX = [];\n\nlet _fntConfig = null;\nlet _numberOfLines = 0;\nlet _textDesiredHeight = 0;\nlet _letterOffsetY = 0;\nlet _tailoredTopY = 0;\n\nlet _tailoredBottomY = 0;\nlet _bmfontScale = 1.0;\n\nlet _lineBreakWithoutSpaces = false;\nlet _spriteFrame = null;\nlet _lineSpacing = 0;\nlet _contentSize = cc.size();\nlet _string = '';\nlet _fontSize = 0;\nlet _originFontSize = 0;\nlet _hAlign = 0;\nlet _vAlign = 0;\nlet _spacingX = 0;\nlet _lineHeight = 0;\nlet _overflow = 0;\nlet _isWrapText = false;\nlet _labelWidth = 0;\nlet _labelHeight = 0;\nlet _maxLineWidth = 0;\nlet _isRetina = false;\nlet _retinaScale = 1;\n\nexport default class BmfontAssembler extends Assembler2D {\n updateRenderData (comp) {\n if (!comp._vertsDirty) return;\n if (_comp === comp) return;\n\n _comp = comp;\n \n this._reserveQuads(comp, comp.string.toString().length);\n\n const assemblerChanged = this._updateFontFamily(comp);\n\n // 打包到动态图集时可能会切换 Assembler\n if (!assemblerChanged) {\n this._updateRenderData(comp);\n }\n }\n\n _preUpdateRenderData(comp) {\n _comp = comp;\n\n this._reserveQuads(comp, comp.string.toString().length);\n\n let fontAsset = comp.font;\n _spriteFrame = fontAsset.spriteFrame;\n _fntConfig = fontAsset._fntConfig;\n shareLabelInfo.fontAtlas = fontAsset._fontDefDictionary;\n }\n\n _updateRenderData(comp) {\n this._updateProperties(comp);\n this._updateLabelInfo(comp);\n this._updateContent();\n this.updateWorldVerts(comp);\n\n if (_isRetina) {\n _contentSize.width /= _retinaScale;\n _contentSize.height /= _retinaScale;\n _fontSize /= _retinaScale;\n }\n\n _comp._actualFontSize = _fontSize;\n _comp.node.setContentSize(_contentSize);\n\n _comp._vertsDirty = false;\n _comp = null;\n this._resetProperties();\n }\n\n _updateFontScale () {\n _bmfontScale = _fontSize / _originFontSize;\n }\n\n _updateFontFamily (comp) {\n let fontAsset = comp.font;\n _spriteFrame = fontAsset.spriteFrame;\n _fntConfig = fontAsset._fntConfig;\n shareLabelInfo.fontAtlas = fontAsset._fontDefDictionary;\n\n return this.packDynamicAtlasAndCheckMaterial(comp, _spriteFrame);\n }\n\n _updateLabelInfo() {\n // clear\n shareLabelInfo.hash = \"\";\n shareLabelInfo.margin = 0;\n }\n\n getTTFTextureSizeScale() {\n return _isRetina ? _retinaScale : 1;\n }\n\n _updateProperties (comp) {\n _string = comp.string.toString();\n _isRetina = !(comp.font instanceof cc.BitmapFont) && (cc.sp.enableLabelRetina && comp.enableRetina === 0) || comp.enableRetina === 1;\n _retinaScale = cc.sp.labelRetinaScale;\n _fontSize = comp.fontSize;\n _originFontSize = _fntConfig ? _fntConfig.fontSize : comp.fontSize;\n _hAlign = comp.horizontalAlign;\n _vAlign = comp.verticalAlign;\n _spacingX = comp.spacingX;\n _overflow = comp.overflow;\n _lineHeight = comp._lineHeight;\n \n _contentSize.width = comp.node.width;\n _contentSize.height = comp.node.height;\n\n if (_isRetina) {\n _fontSize *= _retinaScale;\n if (!_fntConfig) _originFontSize *= _retinaScale;\n _contentSize.width *= _retinaScale;\n _contentSize.height *= _retinaScale;\n _lineHeight *= _retinaScale;\n shareLabelInfo.margin *= _retinaScale;\n }\n\n // should wrap text\n if (_overflow === Overflow.NONE) {\n _isWrapText = false;\n _contentSize.width += shareLabelInfo.margin * 2;\n _contentSize.height += shareLabelInfo.margin * 2;\n }\n else if (_overflow === Overflow.RESIZE_HEIGHT) {\n _isWrapText = true;\n _contentSize.height += shareLabelInfo.margin * 2;\n }\n else {\n _isWrapText = comp.enableWrapText;\n }\n \n shareLabelInfo.lineHeight = _lineHeight;\n shareLabelInfo.fontSize = _fontSize;\n\n this._setupBMFontOverflowMetrics();\n }\n\n _resetProperties () {\n _fntConfig = null;\n _spriteFrame = null;\n shareLabelInfo.hash = \"\";\n shareLabelInfo.margin = 0;\n }\n\n _updateContent () {\n this._updateFontScale();\n this._computeHorizontalKerningForText();\n this._alignText();\n }\n\n _computeHorizontalKerningForText () {\n let string = _string;\n let stringLen = string.length;\n\n let horizontalKernings = _horizontalKernings;\n let kerningDict;\n _fntConfig && (kerningDict = _fntConfig.kerningDict);\n if (kerningDict && !cc.js.isEmptyObject(kerningDict)) {\n let prev = -1;\n for (let i = 0; i < stringLen; ++i) {\n let key = string.charCodeAt(i);\n let kerningAmount = kerningDict[(prev << 16) | (key & 0xffff)] || 0;\n if (i < stringLen - 1) {\n horizontalKernings[i] = kerningAmount;\n } else {\n horizontalKernings[i] = 0;\n }\n prev = key;\n }\n } else {\n horizontalKernings.length = 0;\n }\n }\n\n _multilineTextWrap (nextTokenFunc) {\n let textLen = _string.length;\n\n let lineIndex = 0;\n let nextTokenX = 0;\n let nextTokenY = 0;\n let longestLine = 0;\n let letterRight = 0;\n\n let highestY = 0;\n let lowestY = 0;\n let letterDef = null;\n let letterPosition = cc.v2(0, 0);\n\n for (let index = 0; index < textLen;) {\n let character = _string.charAt(index);\n if (character === \"\\n\") {\n _linesWidth.push(letterRight);\n letterRight = 0;\n lineIndex++;\n nextTokenX = 0;\n nextTokenY -= _lineHeight * this._getFontScale() + _lineSpacing;\n this._recordPlaceholderInfo(index, character);\n index++;\n continue;\n }\n\n let tokenLen = nextTokenFunc(_string, index, textLen);\n let tokenHighestY = highestY;\n let tokenLowestY = lowestY;\n let tokenRight = letterRight;\n let nextLetterX = nextTokenX;\n let newLine = false;\n\n for (let tmp = 0; tmp < tokenLen; ++tmp) {\n let letterIndex = index + tmp;\n character = _string.charAt(letterIndex);\n if (character === \"\\r\") {\n this._recordPlaceholderInfo(letterIndex, character);\n continue;\n }\n letterDef = shareLabelInfo.fontAtlas.getLetterDefinitionForChar(character, shareLabelInfo);\n if (!letterDef) {\n this._recordPlaceholderInfo(letterIndex, character);\n let atlasName = \"\";\n _fntConfig && (atlasName = _fntConfig.atlasName);\n console.log(\"Can't find letter definition in texture atlas \" + atlasName + \" for letter:\" + character);\n continue;\n }\n\n let letterX = nextLetterX + letterDef.offsetX * _bmfontScale - shareLabelInfo.margin;\n\n if (_isWrapText\n && _maxLineWidth > 0\n && nextTokenX > 0\n && letterX + letterDef.w * _bmfontScale > _maxLineWidth\n && !textUtils.isUnicodeSpace(character)) {\n _linesWidth.push(letterRight);\n letterRight = 0;\n lineIndex++;\n nextTokenX = 0;\n nextTokenY -= (_lineHeight * this._getFontScale() + _lineSpacing);\n newLine = true;\n break;\n } else {\n letterPosition.x = letterX;\n }\n\n letterPosition.y = nextTokenY - letterDef.offsetY * _bmfontScale + shareLabelInfo.margin;\n this._recordLetterInfo(letterPosition, character, letterIndex, lineIndex);\n\n if (letterIndex + 1 < _horizontalKernings.length && letterIndex < textLen - 1) {\n nextLetterX += _horizontalKernings[letterIndex + 1];\n }\n\n nextLetterX += letterDef.xAdvance * _bmfontScale + _spacingX - shareLabelInfo.margin * 2;\n\n tokenRight = letterPosition.x + letterDef.w * _bmfontScale - shareLabelInfo.margin;\n\n if (tokenHighestY < letterPosition.y) {\n tokenHighestY = letterPosition.y;\n }\n\n if (tokenLowestY > letterPosition.y - letterDef.h * _bmfontScale) {\n tokenLowestY = letterPosition.y - letterDef.h * _bmfontScale;\n }\n\n } //end of for loop\n\n if (newLine) continue;\n\n nextTokenX = nextLetterX;\n letterRight = tokenRight;\n\n if (highestY < tokenHighestY) {\n highestY = tokenHighestY;\n }\n if (lowestY > tokenLowestY) {\n lowestY = tokenLowestY;\n }\n if (longestLine < letterRight) {\n longestLine = letterRight;\n }\n\n index += tokenLen;\n } //end of for loop\n\n this._finishMultilineTextWrap();\n\n _linesWidth.push(letterRight);\n\n _numberOfLines = lineIndex + 1;\n _textDesiredHeight = _numberOfLines * _lineHeight * this._getFontScale();\n if (_numberOfLines > 1) {\n _textDesiredHeight += (_numberOfLines - 1) * _lineSpacing;\n }\n\n _contentSize.width = _labelWidth;\n _contentSize.height = _labelHeight;\n if (_labelWidth <= 0) {\n _contentSize.width = parseFloat(longestLine.toFixed(2)) + shareLabelInfo.margin * 2;\n }\n if (_labelHeight <= 0) {\n _contentSize.height = parseFloat(_textDesiredHeight.toFixed(2)) + shareLabelInfo.margin * 2;\n }\n\n _tailoredTopY = _contentSize.height;\n _tailoredBottomY = 0;\n\n if (_overflow !== Overflow.CLAMP) {\n if (highestY > 0) {\n _tailoredTopY = _contentSize.height + highestY;\n }\n \n if (lowestY < -_textDesiredHeight) {\n _tailoredBottomY = _textDesiredHeight + lowestY;\n }\n }\n\n return true;\n }\n\n _getFirstCharLen () {\n return 1;\n }\n\n _getFontScale () {\n return _overflow === Overflow.SHRINK ? _bmfontScale : 1;\n }\n\n _getFirstWordLen (text, startIndex, textLen) {\n let character = text.charAt(startIndex);\n if (textUtils.isUnicodeCJK(character)\n || character === \"\\n\"\n || textUtils.isUnicodeSpace(character)) {\n return 1;\n }\n\n let len = 1;\n let letterDef = shareLabelInfo.fontAtlas.getLetterDefinitionForChar(character, shareLabelInfo);\n if (!letterDef) {\n return len;\n }\n let nextLetterX = letterDef.xAdvance * _bmfontScale + _spacingX;\n let letterX;\n for (let index = startIndex + 1; index < textLen; ++index) {\n character = text.charAt(index);\n\n letterDef = shareLabelInfo.fontAtlas.getLetterDefinitionForChar(character, shareLabelInfo);\n if (!letterDef) {\n break;\n }\n letterX = nextLetterX + letterDef.offsetX * _bmfontScale;\n\n if(letterX + letterDef.w * _bmfontScale > _maxLineWidth\n && !textUtils.isUnicodeSpace(character)\n && _maxLineWidth > 0) {\n return len;\n }\n nextLetterX += letterDef.xAdvance * _bmfontScale + _spacingX;\n if (character === \"\\n\"\n || textUtils.isUnicodeSpace(character)\n || textUtils.isUnicodeCJK(character)) {\n break;\n }\n len++;\n }\n\n return len;\n }\n\n _multilineTextWrapByWord () {\n return this._multilineTextWrap(this._getFirstWordLen);\n }\n\n _multilineTextWrapByChar () {\n return this._multilineTextWrap(this._getFirstCharLen);\n }\n\n _recordPlaceholderInfo (letterIndex, char) {\n if (letterIndex >= _lettersInfo.length) {\n let tmpInfo = new LetterInfo();\n _lettersInfo.push(tmpInfo);\n }\n\n _lettersInfo[letterIndex].char = char;\n _lettersInfo[letterIndex].hash = char.charCodeAt(0) + shareLabelInfo.hash;\n _lettersInfo[letterIndex].valid = false;\n }\n\n _recordLetterInfo (letterPosition, character, letterIndex, lineIndex) {\n if (letterIndex >= _lettersInfo.length) {\n let tmpInfo = new LetterInfo();\n _lettersInfo.push(tmpInfo);\n }\n let char = character.charCodeAt(0);\n let key = char + shareLabelInfo.hash;\n\n _lettersInfo[letterIndex].line= lineIndex;\n _lettersInfo[letterIndex].char = character;\n _lettersInfo[letterIndex].hash = key;\n _lettersInfo[letterIndex].valid = shareLabelInfo.fontAtlas.getLetter(key).valid;\n _lettersInfo[letterIndex].x = letterPosition.x;\n _lettersInfo[letterIndex].y = letterPosition.y;\n }\n\n _alignText () {\n _textDesiredHeight = 0;\n _linesWidth.length = 0;\n\n if (!_lineBreakWithoutSpaces) {\n this._multilineTextWrapByWord();\n } else {\n this._multilineTextWrapByChar();\n }\n\n this._computeAlignmentOffset();\n\n //shrink\n if (_overflow === Overflow.SHRINK) {\n if (_fontSize > 0 && this._isVerticalClamp()) {\n this._shrinkLabelToContentSize(this._isVerticalClamp);\n }\n }\n\n if (!this._updateQuads()) {\n if (_overflow === Overflow.SHRINK) {\n this._shrinkLabelToContentSize(this._isHorizontalClamp);\n }\n }\n }\n\n _scaleFontSizeDown (fontSize) {\n let shouldUpdateContent = true;\n if (!fontSize) {\n fontSize = 0.1;\n shouldUpdateContent = false;\n }\n _fontSize = fontSize;\n\n if (shouldUpdateContent) {\n this._updateContent();\n }\n }\n\n _shrinkLabelToContentSize (lambda) {\n let fontSize = _fontSize;\n\n let left = 0, right = fontSize | 0, mid = 0;\n while (left < right) {\n mid = (left + right + 1) >> 1;\n\n let newFontSize = mid;\n if (newFontSize <= 0) {\n break;\n }\n\n _bmfontScale = newFontSize / _originFontSize;\n \n if (!_lineBreakWithoutSpaces) {\n this._multilineTextWrapByWord();\n } else {\n this._multilineTextWrapByChar();\n }\n this._computeAlignmentOffset();\n\n if (lambda()) {\n right = mid - 1;\n } else {\n left = mid;\n }\n }\n\n let actualFontSize = left;\n if (actualFontSize >= 0) {\n this._scaleFontSizeDown(actualFontSize);\n }\n }\n\n _isVerticalClamp () {\n if (_textDesiredHeight > _contentSize.height) {\n return true;\n } else {\n return false;\n }\n }\n\n _isHorizontalClamp () {\n let letterClamp = false;\n for (let ctr = 0, l = _string.length; ctr < l; ++ctr) {\n let letterInfo = _lettersInfo[ctr];\n if (letterInfo.valid) {\n let letterDef = shareLabelInfo.fontAtlas.getLetter(letterInfo.hash);\n\n let px = letterInfo.x + letterDef.w * _bmfontScale;\n let lineIndex = letterInfo.line;\n if (_labelWidth > 0) {\n if (!_isWrapText) {\n if(px > _contentSize.width){\n letterClamp = true;\n break;\n }\n }else{\n let wordWidth = _linesWidth[lineIndex];\n if (wordWidth > _contentSize.width && (px > _contentSize.width || px < 0)) {\n letterClamp = true;\n break;\n }\n }\n }\n }\n }\n\n return letterClamp;\n }\n\n _isHorizontalClamped (px, lineIndex) {\n let wordWidth = _linesWidth[lineIndex];\n let letterOverClamp = (px > _contentSize.width || px < 0);\n\n if(!_isWrapText){\n return letterOverClamp;\n }else{\n return (wordWidth > _contentSize.width && letterOverClamp);\n }\n }\n\n _updateQuads () {\n let texture = _spriteFrame ? _spriteFrame._texture : shareLabelInfo.fontAtlas.getTexture();\n\n let node = _comp.node;\n\n this.verticesCount = this.indicesCount = 0;\n \n // Need to reset dataLength in Canvas rendering mode.\n this._renderData && (this._renderData.dataLength = 0);\n\n let contentSize = _contentSize,\n appx = node._anchorPoint.x * contentSize.width,\n appy = node._anchorPoint.y * contentSize.height;\n \n let ret = true;\n for (let ctr = 0, l = _string.length; ctr < l; ++ctr) {\n let letterInfo = _lettersInfo[ctr];\n if (!letterInfo.valid) continue;\n let letterDef = shareLabelInfo.fontAtlas.getLetter(letterInfo.hash);\n\n _tmpRect.height = letterDef.h;\n _tmpRect.width = letterDef.w;\n _tmpRect.x = letterDef.u;\n _tmpRect.y = letterDef.v;\n\n let py = letterInfo.y + _letterOffsetY;\n\n if (_labelHeight > 0) {\n if (py > _tailoredTopY) {\n let clipTop = py - _tailoredTopY;\n _tmpRect.y += clipTop;\n _tmpRect.height -= clipTop;\n py = py - clipTop;\n }\n\n if ((py - letterDef.h * _bmfontScale < _tailoredBottomY) && _overflow === Overflow.CLAMP) {\n _tmpRect.height = (py < _tailoredBottomY) ? 0 : (py - _tailoredBottomY) / _bmfontScale;\n }\n }\n\n let lineIndex = letterInfo.line;\n let px = letterInfo.x + letterDef.w / 2 * _bmfontScale + _linesOffsetX[lineIndex];\n\n if (_labelWidth > 0) {\n if (this._isHorizontalClamped(px, lineIndex)) {\n if (_overflow === Overflow.CLAMP) {\n _tmpRect.width = 0;\n } else if (_overflow === Overflow.SHRINK) {\n if (_contentSize.width > letterDef.w) {\n ret = false;\n break;\n } else {\n _tmpRect.width = 0;\n }\n }\n }\n }\n\n if (_tmpRect.height > 0 && _tmpRect.width > 0) {\n let isRotated = this._determineRect(_tmpRect);\n let letterPositionX = letterInfo.x + _linesOffsetX[letterInfo.line];\n this.appendQuad(_comp, texture, _tmpRect, isRotated, letterPositionX - appx, py - appy, _bmfontScale, letterDef);\n }\n }\n this._quadsUpdated(_comp);\n\n return ret;\n }\n\n _determineRect (tempRect) {\n let isRotated = _spriteFrame.isRotated();\n\n let originalSize = _spriteFrame._originalSize;\n let rect = _spriteFrame._rect;\n let offset = _spriteFrame._offset;\n let trimmedLeft = offset.x + (originalSize.width - rect.width) / 2;\n let trimmedTop = offset.y - (originalSize.height - rect.height) / 2;\n\n if(!isRotated) {\n tempRect.x += (rect.x - trimmedLeft);\n tempRect.y += (rect.y + trimmedTop);\n } else {\n let originalX = tempRect.x;\n tempRect.x = rect.x + rect.height - tempRect.y - tempRect.height - trimmedTop;\n tempRect.y = originalX + rect.y - trimmedLeft;\n if (tempRect.y < 0) {\n tempRect.height = tempRect.height + trimmedTop;\n }\n }\n\n return isRotated;\n }\n\n _computeAlignmentOffset () {\n _linesOffsetX.length = 0;\n \n switch (_hAlign) {\n case macro.TextAlignment.LEFT:\n for (let i = 0; i < _numberOfLines; ++i) {\n _linesOffsetX.push(0);\n }\n break;\n case macro.TextAlignment.CENTER:\n for (let i = 0, l = _linesWidth.length; i < l; i++) {\n _linesOffsetX.push((_contentSize.width - _linesWidth[i]) / 2);\n }\n break;\n case macro.TextAlignment.RIGHT:\n for (let i = 0, l = _linesWidth.length; i < l; i++) {\n _linesOffsetX.push(_contentSize.width - _linesWidth[i]);\n }\n break;\n default:\n break;\n }\n\n // TOP\n _letterOffsetY = _contentSize.height;\n if (_vAlign !== macro.VerticalTextAlignment.TOP) {\n let blank = _contentSize.height - _textDesiredHeight + _lineHeight * this._getFontScale() - _originFontSize * _bmfontScale;\n if (_vAlign === macro.VerticalTextAlignment.BOTTOM) {\n // BOTTOM\n _letterOffsetY -= blank;\n } else {\n // CENTER:\n _letterOffsetY -= blank / 2;\n }\n }\n }\n\n _setupBMFontOverflowMetrics () {\n let newWidth = _contentSize.width,\n newHeight = _contentSize.height;\n\n if (_overflow === Overflow.RESIZE_HEIGHT) {\n newHeight = 0;\n }\n\n if (_overflow === Overflow.NONE) {\n newWidth = 0;\n newHeight = 0;\n }\n\n _labelWidth = newWidth;\n _labelHeight = newHeight;\n _maxLineWidth = newWidth;\n }\n\n updateWorldVerts() {}\n\n appendQuad(comp, texture, rect, rotated, x, y, scale, letter) {}\n _quadsUpdated (comp) {}\n\n _reserveQuads () {}\n _finishMultilineTextWrap() { }\n}\n","/****************************************************************************\n Copyright (c) 2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * !#en Class for Label Frame.\n * !#zh LabelFrame\n */\nfunction LabelFrame () {\n // the location of the label on rendering texture\n this._rect = null;\n // uv data of frame\n this.uv = [];\n // texture of frame\n this._texture = null;\n // store original info before packed to dynamic atlas\n this._original = null;\n}\n\nLabelFrame.prototype = {\n constructor: LabelFrame,\n\n /**\n * !#en Returns the rect of the label frame in the texture.\n * !#zh 获取 LabelFrame 的纹理矩形区域\n * @method getRect\n * @return {Rect}\n */\n getRect: function () {\n return cc.rect(this._rect);\n },\n \n /**\n * !#en Sets the rect of the label frame in the texture.\n * !#zh 设置 LabelFrame 的纹理矩形区域\n * @method setRect\n * @param {Rect} rect\n */\n setRect: function (rect) {\n this._rect = rect;\n if (this._texture)\n this._calculateUV();\n },\n\n _setDynamicAtlasFrame (frame) {\n if (!frame) return;\n\n this._original = {\n _texture : this._texture,\n _x : this._rect.x,\n _y : this._rect.y\n }\n \n this._texture = frame.texture;\n this._rect.x = frame.x;\n this._rect.y = frame.y;\n this._calculateUV();\n },\n _resetDynamicAtlasFrame () {\n if (!this._original) return;\n this._rect.x = this._original._x;\n this._rect.y = this._original._y;\n this._texture = this._original._texture;\n this._original = null;\n this._calculateUV();\n },\n\n _refreshTexture: function (texture) {\n this._texture = texture;\n this._rect = cc.rect(0, 0, texture.width, texture.height);\n this._calculateUV();\n },\n\n _calculateUV() {\n let rect = this._rect,\n texture = this._texture,\n uv = this.uv,\n texw = texture.width,\n texh = texture.height;\n\n let l = texw === 0 ? 0 : rect.x / texw;\n let r = texw === 0 ? 0 : (rect.x + rect.width) / texw;\n let b = texh === 0 ? 0 : (rect.y + rect.height) / texh;\n let t = texh === 0 ? 0 : rect.y / texh;\n\n uv[0] = l;\n uv[1] = b;\n uv[2] = r;\n uv[3] = b;\n uv[4] = l;\n uv[5] = t;\n uv[6] = r;\n uv[7] = t;\n }\n}\n\nmodule.exports = LabelFrame;\n","/****************************************************************************\n Copyright (c) 2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport WebglBmfontAssembler from '../../webgl/assemblers/label/2d/bmfont';\nimport { vfmtPosUvColorTexId } from '../../webgl/vertex-format';\n\nconst Label = require('../../../components/CCLabel');\nconst LabelOutline = require('../../../components/CCLabelOutline');\nconst textUtils = require('../../../utils/text-utils');\nconst Component = require('../../../components/CCComponent');\nconst RenderTexture = require('../../../assets/CCRenderTexture');\nconst OUTLINE_SUPPORTED = cc.js.isChildClassOf(LabelOutline, Component);\nconst getFontFamily = require('../utils').getFontFamily;\nconst shareLabelInfo = require('../utils').shareLabelInfo;\n\n\nconst FontLetterDefinition = cc.BitmapFont.FontLetterDefinition;\nconst FontAtlas = cc.BitmapFont.FontAtlas;\n\nconst WHITE = cc.Color.WHITE;\nconst space = 0;\nconst bleed = 2;\nconst _invisibleAlpha = (1 / 255).toFixed(3);\n\nfunction LetterTexture(char, labelInfo) {\n this._texture = null;\n this._labelInfo = labelInfo;\n this._char = char;\n this._hash = null;\n this._data = null;\n this._canvas = null;\n this._context = null;\n this._width = 0;\n this._height = 0;\n this._offsetY = 0;\n this._hash = char.charCodeAt(0) + labelInfo.hash;\n}\n\nLetterTexture.prototype = {\n constructor: LetterTexture,\n\n updateRenderData () {\n this._updateProperties();\n this._updateTexture();\n },\n _updateProperties () {\n this._texture = new cc.Texture2D();\n this._data = Label._canvasPool.get();\n this._canvas = this._data.canvas;\n this._context = this._data.context;\n this._context.font = this._labelInfo.fontDesc;\n let width = textUtils.safeMeasureText(this._context, this._char, this._labelInfo.fontDesc);\n let blank = this._labelInfo.margin * 2 + bleed;\n this._width = parseFloat(width.toFixed(2)) + blank;\n this._height = (1 + textUtils.BASELINE_RATIO) * this._labelInfo.fontSize + blank;\n this._offsetY = - (this._labelInfo.fontSize * textUtils.BASELINE_RATIO) / 2;\n\n if (this._canvas.width !== this._width) {\n this._canvas.width = this._width;\n }\n\n if (this._canvas.height !== this._height) {\n this._canvas.height = this._height;\n }\n\n this._texture.initWithElement(this._canvas);\n },\n _updateTexture () {\n let context = this._context;\n let labelInfo = this._labelInfo,\n width = this._canvas.width,\n height = this._canvas.height;\n\n const fontSize = this._labelInfo.fontSize;\n let startX = width / 2;\n let startY = height / 2 + fontSize * textUtils.MIDDLE_RATIO + fontSize * textUtils.BASELINE_OFFSET;\n let color = labelInfo.color;\n\n // use round for line join to avoid sharp intersect point\n context.lineJoin = 'round';\n context.textAlign = 'center';\n context.clearRect(0, 0, width, height);\n //Add a white background to avoid black edges.\n context.fillStyle = `rgba(${color.r}, ${color.g}, ${color.b}, ${_invisibleAlpha})`;\n context.fillRect(0, 0, width, height);\n context.font = labelInfo.fontDesc;\n\n context.fillStyle = `rgba(${color.r}, ${color.g}, ${color.b}, 1)`;\n if (labelInfo.isOutlined && labelInfo.margin > 0) {\n let strokeColor = labelInfo.out || WHITE;\n context.strokeStyle = `rgba(${strokeColor.r}, ${strokeColor.g}, ${strokeColor.b}, ${strokeColor.a / 255})`;\n context.lineWidth = labelInfo.margin * 2;\n context.strokeText(this._char, startX, startY);\n }\n context.fillText(this._char, startX, startY);\n\n this._texture.handleLoadedTexture();\n },\n\n destroy () {\n this._texture.destroy();\n this._texture = null;\n Label._canvasPool.put(this._data);\n },\n}\n\nfunction LetterAtlas(atlases, width, height) {\n let texture = new RenderTexture();\n texture.initWithSize(width, height);\n texture.update();\n\n this._atlases = atlases;\n this._texture = texture;\n this._id = 0;\n this._tmpId = -1;\n\n this._x = space;\n this._y = space;\n this._nexty = space;\n\n this.frees = [];\n this.waitCleans = [];\n\n this._width = width;\n this._height = height;\n}\n\ncc.js.mixin(LetterAtlas.prototype, {\n insertLetterTexture(letterTexture) {\n let texture = letterTexture._texture;\n let width = texture.width, height = texture.height;\n\n // 先寻找是否有可用的被回收的区域\n if (this.frees.length > 0) {\n let score = Number.MAX_VALUE;\n let areaFit = 0;\n let original = null;\n let originalIndex = 0;\n\n for (let i = 0; i < this.frees.length; i++) {\n const freeLetter = this.frees[i];\n if (freeLetter._width >= width && freeLetter._height >= height) {\n areaFit = freeLetter._width * freeLetter._height - width * height;\n if (areaFit < score) {\n original = freeLetter;\n originalIndex = i;\n score = areaFit;\n }\n }\n }\n\n if (original) {\n original._hash = letterTexture._hash;\n original.w = letterTexture._width - bleed;\n original.h = letterTexture._height - bleed;\n original.xAdvance = original.w;\n original.offsetY = letterTexture._offsetY;\n\n this._texture.drawTextureAt(texture, original.u - bleed / 2, original.v - bleed / 2);\n\n this._dirty = true;\n\n this.removeFreeLetter(originalIndex);\n\n this._atlases._fontDefDictionary.addLetterDefinitions(letterTexture._hash, original);\n return original;\n }\n }\n\n // 矫正宽度为三档: <0.75x height <1x height >1x height\n if (width <= height * 0.75) {\n width = height * 0.75;\n } else if (width <= height) {\n width = height;\n }\n\n // 没有可用的被回收区域,尝试直接插入\n const oldx = this._x, oldy = this._y, oldnexty = this._nexty;\n\n if ((this._x + width + space) > this._width) {\n // TODO 跳到下一行之前将这行的剩余区域切成多个正方形并放入 frees,避免浪费\n this._x = space;\n this._y = this._nexty;\n }\n\n if ((this._y + height) > this._nexty) {\n this._nexty = this._y + height + space;\n }\n\n if (this._nexty > this._height) {\n this._x = oldx;\n this._y = oldy;\n this._nexty = oldnexty;\n \n // 回收 waitCleans\n if (this.waitCleans.length > 0) {\n for (const letter of this.waitCleans) {\n letter._inCleans = false;\n if (letter.ref === 0) {\n delete this._atlases._fontDefDictionary._letterDefinitions[letter._hash];\n this.frees.push(letter);\n }\n }\n this.waitCleans.length = 0;\n return this.insertLetterTexture(letterTexture);\n } else {\n return null; \n }\n }\n\n this._texture.drawTextureAt(texture, this._x, this._y);\n\n this._dirty = true;\n \n let letter = new FontLetterDefinition();\n letter.u = this._x + bleed / 2;\n letter.v = this._y + bleed / 2;\n letter.texture = this._texture;\n letter.atlas = this;\n letter.ref = 0;\n letter.valid = true;\n letter.w = letterTexture._width - bleed;\n letter.h = letterTexture._height - bleed;\n letter._inCleans = false;\n letter._hash = letterTexture._hash;\n letter._width = width;\n letter._height = height;\n letter.xAdvance = letter.w;\n letter.offsetY = letterTexture._offsetY;\n\n this._x += width + space;\n\n this._atlases._fontDefDictionary.addLetterDefinitions(letterTexture._hash, letter);\n \n return letter\n },\n\n pushFreeLetter(letter) {\n const i = this.frees.push(letter) - 1;\n },\n\n removeFreeLetter(index) {\n const temp = this.frees[index];\n const temp2 = this.frees[this.frees.length - 1];\n // temp2.cacheIndex = index;\n // temp.cacheIndex = -1;\n this.frees[index] = temp2;\n this.frees.pop();\n },\n\n update () {\n if (!this._dirty) return;\n this._texture.update();\n this._dirty = false;\n },\n\n reset () {\n this._x = space;\n this._y = space;\n this._nexty = space;\n\n const defs = this._atlases._fontDefDictionary._letterDefinitions;\n for (const key in defs) {\n const def = defs[key];\n if (def.atlas === this) {\n delete defs[key];\n }\n }\n\n this.frees.length = 0;\n this.waitCleans.length = 0;\n },\n\n destroy () {\n this.reset();\n const handler = this._atlases.material.getMultiHandler();\n handler.removeTexture(this._texture);\n this._texture.destroy();\n this._texture = null;\n },\n\n});\n\nclass LetterAtlases {\n\n /**\n * 图集数组\n */\n atlases = [];\n\n /**\n * Char 多纹理材质\n */\n material = null;\n\n /**\n * Fake MaterialVariant\n */\n fakeMaterial = { material: null };\n\n /**\n * 抽象图集\n */\n _fontDefDictionary = new FontAtlas(null);\n\n\n constructor() {\n const handler = new cc.sp.MultiHandler();\n this.material = handler.material;\n this.fakeMaterial.material = this.material;\n\n cc.director.on(cc.Director.EVENT_BEFORE_SCENE_LAUNCH, this.beforeSceneLoad, this);\n }\n\n\n insertLetterTexture(letterTexture) {\n for (const atlas of this.atlases) {\n const letter = atlas.insertLetterTexture(letterTexture);\n if (letter) {\n return letter;\n }\n }\n\n if (this.atlases.length >= 8) {\n return null;\n } else {\n const atlas = new LetterAtlas(this, _atlasWidth, _atlasHeight);\n const len = this.atlases.push(atlas);\n atlas._id = len - 1;\n const handler = this.material.getMultiHandler();\n handler.setTexture(atlas._id, atlas._texture);\n if (!CC_EDITOR && cc.sp.charAtlasAutoBatchCount >= len) {\n cc.sp.multiBatcher.requsetMaterial(atlas._texture);\n }\n return atlas.insertLetterTexture(letterTexture);\n }\n }\n\n\n deleteLetter(letter) {\n letter.ref--;\n if (letter.ref === 0 && !letter._inCleans) {\n letter._inCleans = true;\n letter.atlas.waitCleans.push(letter);\n }\n }\n\n\n update() {\n for (const atlas of this.atlases) {\n atlas.update();\n }\n }\n\n\n reset() {\n this._fontDefDictionary.clear();\n\n for (const atlas of this.atlases) {\n atlas.reset();\n }\n }\n\n\n destroy() {\n this._fontDefDictionary.clear();\n\n for (const atlas of this.atlases) {\n atlas.destroy();\n }\n\n this.atlases.length = 0;\n }\n\n\n beforeSceneLoad() {\n if (cc.sp.charAtlasAutoResetBeforeSceneLoad) {\n this.clearAllCache();\n }\n }\n\n\n clearAllCache() {\n this.reset();\n }\n\n\n getTexture() {\n if (!_emptyTexture) {\n _emptyTexture = new RenderTexture();\n _emptyTexture.initWithSize(_atlasWidth, _atlasHeight);\n _emptyTexture.update();\n }\n return _emptyTexture;\n }\n\n\n getLetter(key) {\n return this._fontDefDictionary._letterDefinitions[key];\n }\n\n\n getLetterDefinitionForChar(char, labelInfo) {\n let hash = char.charCodeAt(0) + labelInfo.hash;\n let letter = this._fontDefDictionary._letterDefinitions[hash];\n if (!letter) {\n let temp = new LetterTexture(char, labelInfo);\n temp.updateRenderData();\n letter = this.insertLetterTexture(temp);\n temp.destroy();\n }\n\n if (letter && _firstTraverse) {\n letter.ref++;\n _assembler._letterRefs.push(letter);\n this.checkMaterialAndUpdateTexId(letter);\n }\n\n return letter;\n }\n\n\n checkMaterialAndUpdateTexId(letter) {\n const atlas = letter.atlas;\n const comp = _assembler._renderComp;\n\n // 检查是否需要自动切换材质\n if (_needCheckMaterial) {\n _needCheckMaterial = false;\n if (_usedMaterial.material !== _shareAtlas.material) {\n _assembler.checkAndSwitchMaterial(comp, atlas._texture, _usedMaterial);\n _usedMaterial = comp._materials[0];\n }\n }\n\n // 检查是否需要更新 atlas tmpId,使用内置材质则不检查\n if (_usedMaterial.material !== _shareAtlas.material && atlas._tmpId === -1) {\n const handler = _usedMaterial.material.getMultiHandler();\n if (handler) {\n const index = handler.getIndex(atlas._texture.getImpl());\n if (index !== -1) {\n atlas._tmpId = index;\n return;\n }\n }\n\n // 如果无法在材质中找到 texture,则切换至内置材质\n comp.setMaterial(0, _shareAtlas.material);\n _usedMaterial = _shareAtlas.fakeMaterial;\n }\n }\n\n}\n\nfunction computeHash (labelInfo) {\n let hashData = '|';\n let color = labelInfo.color.toHEX();\n let out = '';\n if (labelInfo.isOutlined && labelInfo.margin > 0) {\n out = out + labelInfo.margin + labelInfo.out.toHEX();\n }\n \n return hashData + labelInfo.fontSize + labelInfo.fontFamily + color + out;\n}\n\nlet _shareAtlas = null;\n\nlet _atlasWidth = 2048;\nlet _atlasHeight = 2048;\nlet _isBold = false;\nlet _usedMaterial = null;\nlet _needCheckMaterial = false;\nlet _firstTraverse = false;\nlet _assembler = null;\nlet _emptyTexture = null;\n\nexport default class LetterFontAssembler extends WebglBmfontAssembler {\n _letterRefs = [];\n\n initData() {\n let data = this._renderData;\n data.createFlexData(0, this.verticesCount, this.indicesCount, this.getVfmt());\n }\n\n getVfmt() {\n return vfmtPosUvColorTexId;\n }\n\n getBuffer() {\n return cc.renderer._handle.getBuffer(\"mesh\", this.getVfmt());\n }\n\n _getAssemblerData () {\n if (!_shareAtlas) {\n _shareAtlas = new LetterAtlases();\n cc.Label._shareAtlas = _shareAtlas;\n }\n \n return _shareAtlas.getTexture();\n }\n\n _updateFontFamily (comp) {\n shareLabelInfo.fontAtlas = _shareAtlas;\n shareLabelInfo.fontFamily = getFontFamily(comp);\n\n // outline\n let outline = OUTLINE_SUPPORTED && comp.getComponent(LabelOutline);\n if (outline && outline.enabled) {\n shareLabelInfo.isOutlined = true;\n shareLabelInfo.margin = outline.width;\n shareLabelInfo.out = outline.color.clone();\n shareLabelInfo.out.a = outline.color.a * comp.node.color.a / 255.0;\n }\n else {\n shareLabelInfo.isOutlined = false;\n shareLabelInfo.margin = 0;\n }\n }\n\n _updateLabelInfo (comp) {\n shareLabelInfo.fontDesc = this._getFontDesc();\n shareLabelInfo.color = comp.node.color;\n shareLabelInfo.hash = computeHash(shareLabelInfo);\n }\n\n _getFontDesc () {\n let fontDesc = shareLabelInfo.fontSize.toString() + 'px ';\n fontDesc = fontDesc + shareLabelInfo.fontFamily;\n if (_isBold) {\n fontDesc = \"bold \" + fontDesc;\n }\n\n return fontDesc;\n }\n _computeHorizontalKerningForText () {}\n _determineRect (tempRect) {\n return false;\n }\n\n _updateRenderData(comp) {\n // 还原 tex id 与当前使用材质\n _assembler = this;\n _usedMaterial = _assembler._renderComp._materials[0];\n _needCheckMaterial = true;\n _firstTraverse = true;\n for (const atlas of _shareAtlas.atlases) {\n atlas._tmpId = -1;\n }\n\n // 还原 letterRef\n this._recycleLetterRef();\n\n super._updateRenderData(comp);\n\n _usedMaterial = null;\n _assembler = null;\n }\n\n _finishMultilineTextWrap() {\n _firstTraverse = false;\n }\n\n _recycleLetterRef() {\n for (const letter of this._letterRefs) {\n _shareAtlas.deleteLetter(letter);\n }\n this._letterRefs.length = 0;\n }\n\n _resetAssemblerData(assemblerData) {\n if (this._letterRefs.length !== 0) {\n this._recycleLetterRef();\n }\n }\n\n appendVerts(comp, offset, l, r, b, t, letter) {\n super.appendVerts(comp, offset, l, r, b, t, letter);\n\n // update texId\n const renderData = this._renderData;\n const verts = renderData.vDatas[0];\n const floatsPerVert = this.floatsPerVert;\n let texIdOffset = offset + this.texIdOffset;\n const id = _usedMaterial.material !== _shareAtlas.material ? letter.atlas._tmpId : letter.atlas._id;\n\n verts[texIdOffset] = id;\n texIdOffset += floatsPerVert;\n verts[texIdOffset] = id;\n texIdOffset += floatsPerVert;\n verts[texIdOffset] = id;\n texIdOffset += floatsPerVert;\n verts[texIdOffset] = id;\n }\n\n}\n\nLetterFontAssembler.prototype.floatsPerVert = 6;\nLetterFontAssembler.prototype.texIdOffset = 5;\nLetterFontAssembler.prototype.isMulti = true;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport Assembler2D from '../../assembler-2d';\n\nlet textUtils = require('../../../utils/text-utils');\nconst macro = require('../../../platform/CCMacro');\nconst Label = require('../../../components/CCLabel');\nconst LabelOutline = require('../../../components/CCLabelOutline');\nconst LabelShadow = require('../../../components/CCLabelShadow');\nconst Overflow = Label.Overflow;\nconst deleteFromDynamicAtlas = require('../utils').deleteFromDynamicAtlas;\nconst getFontFamily = require('../utils').getFontFamily;\n\nconst MAX_SIZE = 2048;\nconst _invisibleAlpha = (1 / 255).toFixed(3);\n\nlet _context = null;\nlet _canvas = null;\nlet _texture = null;\n\nlet _fontDesc = '';\nlet _string = '';\nlet _fontSize = 0;\nlet _drawFontSize = 0;\nlet _splitedStrings = [];\nlet _canvasSize = cc.Size.ZERO;\nlet _lineHeight = 0;\nlet _hAlign = 0;\nlet _vAlign = 0;\nlet _color = null;\nlet _fontFamily = '';\nlet _overflow = Overflow.NONE;\nlet _isWrapText = false;\nlet _premultiply = false;\nlet _isRetina = false;\nlet _retinaScale = 1;\n\n// outline\nlet _outlineComp = null;\nlet _outlineColor = cc.Color.WHITE;\n\n// shadow\nlet _shadowComp = null;\nlet _shadowColor = cc.Color.BLACK;\n\nlet _canvasPadding = cc.rect();\nlet _contentSizeExtend = cc.Size.ZERO;\nlet _nodeContentSize = cc.Size.ZERO;\n\nlet _enableBold = false;\nlet _enableItalic = false;\nlet _enableUnderline = false;\nlet _underlineThickness = 0;\n\nlet _drawUnderlinePos = cc.Vec2.ZERO;\nlet _drawUnderlineWidth = 0;\n\nlet _sharedLabelData;\n\nconst Alignment = [\n 'left', // macro.TextAlignment.LEFT\n 'center', // macro.TextAlignment.CENTER\n 'right' // macro.TextAlignment.RIGHT\n];\n\nexport default class TTFAssembler extends Assembler2D {\n _getAssemblerData () {\n _sharedLabelData = Label._canvasPool.get();\n _sharedLabelData.canvas.width = _sharedLabelData.canvas.height = 1;\n return _sharedLabelData;\n }\n\n _resetAssemblerData (assemblerData) {\n if (assemblerData) {\n Label._canvasPool.put(assemblerData);\n }\n }\n\n updateRenderData (comp) {\n super.updateRenderData(comp);\n \n if (!comp._vertsDirty) return;\n\n this._updateProperties(comp);\n this._calculateLabelFont();\n this._updateLabelDimensions();\n this._updateTexture(comp);\n const assemblerChanged = this._calDynamicAtlas(comp);\n\n // 打包到动态图集时可能会切换 Assembler\n if (!assemblerChanged) {\n this._updateRenderData(comp);\n }\n }\n\n _updateRenderData(comp) {\n if (_isRetina) {\n _fontSize /= _retinaScale;\n _nodeContentSize.width /= _retinaScale;\n _nodeContentSize.height /= _retinaScale;\n }\n\n comp._actualFontSize = _fontSize;\n comp.node.setContentSize(_nodeContentSize);\n\n this.updateVerts(comp);\n\n comp._vertsDirty = false;\n\n _context = null;\n _canvas = null;\n _texture = null;\n }\n\n getTTFTextureSizeScale() {\n return _isRetina ? _retinaScale : 1;\n }\n\n updateVerts () {\n }\n\n _updatePaddingRect () {\n let top = 0, bottom = 0, left = 0, right = 0;\n let outlineWidth = 0;\n _contentSizeExtend.width = _contentSizeExtend.height = 0;\n if (_outlineComp) {\n outlineWidth = _outlineComp.width;\n if (_isRetina) {\n outlineWidth *= _retinaScale;\n }\n top = bottom = left = right = outlineWidth;\n _contentSizeExtend.width = _contentSizeExtend.height = outlineWidth * 2;\n }\n if (_shadowComp) {\n let shadowWidth = _shadowComp.blur + outlineWidth;\n left = Math.max(left, -_shadowComp._offset.x + shadowWidth);\n right = Math.max(right, _shadowComp._offset.x + shadowWidth);\n top = Math.max(top, _shadowComp._offset.y + shadowWidth);\n bottom = Math.max(bottom, -_shadowComp._offset.y + shadowWidth);\n }\n if (_enableItalic) {\n //0.0174532925 = 3.141592653 / 180\n let offset = _drawFontSize * Math.tan(12 * 0.0174532925);\n right += offset;\n _contentSizeExtend.width += offset;\n }\n _canvasPadding.x = left;\n _canvasPadding.y = top;\n _canvasPadding.width = left + right;\n _canvasPadding.height = top + bottom;\n }\n\n _updateProperties (comp) {\n let assemblerData = comp._assemblerData;\n _context = assemblerData.context;\n _canvas = assemblerData.canvas;\n _texture = comp._frame._original ? comp._frame._original._texture : comp._frame._texture;\n\n _isRetina = (cc.sp.enableLabelRetina && comp.enableRetina === 0) || comp.enableRetina === 1;\n _retinaScale = cc.sp.labelRetinaScale;\n _string = comp.string.toString();\n _fontSize = comp._fontSize;\n _nodeContentSize = comp.node.getContentSize();\n _lineHeight = comp._lineHeight;\n _drawFontSize = _fontSize;\n _underlineThickness = comp.underlineHeight || _drawFontSize / 8;\n\n if (_isRetina) {\n _fontSize *= _retinaScale;\n _nodeContentSize.width *= _retinaScale;\n _nodeContentSize.height *= _retinaScale;\n _lineHeight *= _retinaScale;\n if (comp.underlineHeight) _underlineThickness *= _retinaScale;\n _drawFontSize = _fontSize;\n }\n\n _overflow = comp.overflow;\n _canvasSize.width = _nodeContentSize.width;\n _canvasSize.height = _nodeContentSize.height;\n _hAlign = comp.horizontalAlign;\n _vAlign = comp.verticalAlign;\n _color = comp.node.color;\n _enableBold = comp.enableBold;\n _enableItalic = comp.enableItalic;\n _enableUnderline = comp.enableUnderline;\n _fontFamily = getFontFamily(comp);\n _premultiply = comp.srcBlendFactor === cc.macro.BlendFactor.ONE;\n\n if (CC_NATIVERENDERER) {\n _context._setPremultiply(_premultiply);\n }\n\n if (_overflow === Overflow.NONE) {\n _isWrapText = false;\n }\n else if (_overflow === Overflow.RESIZE_HEIGHT) {\n _isWrapText = true;\n }\n else {\n _isWrapText = comp.enableWrapText;\n }\n\n // outline\n _outlineComp = LabelOutline && comp.getComponent(LabelOutline);\n _outlineComp = (_outlineComp && _outlineComp.enabled && _outlineComp.width > 0) ? _outlineComp : null;\n if (_outlineComp) {\n _outlineColor.set(_outlineComp.color);\n }\n\n // shadow\n _shadowComp = LabelShadow && comp.getComponent(LabelShadow);\n _shadowComp = (_shadowComp && _shadowComp.enabled) ? _shadowComp : null;\n if (_shadowComp) {\n _shadowColor.set(_shadowComp.color);\n // TODO: temporary solution, cascade opacity for outline color\n _shadowColor.a = _shadowColor.a * comp.node.color.a / 255.0;\n }\n\n this._updatePaddingRect();\n }\n\n _calculateFillTextStartPosition () {\n let labelX = 0;\n if (_hAlign === macro.TextAlignment.RIGHT) {\n labelX = _canvasSize.width - _canvasPadding.width;\n } else if (_hAlign === macro.TextAlignment.CENTER) {\n labelX = (_canvasSize.width - _canvasPadding.width) / 2;\n }\n\n let lineHeight = this._getLineHeight();\n let drawStartY = lineHeight * (_splitedStrings.length - 1);\n // TOP\n let firstLinelabelY = _fontSize * (1 - textUtils.BASELINE_RATIO / 2);\n if (_vAlign !== macro.VerticalTextAlignment.TOP) {\n // free space in vertical direction\n let blank = drawStartY + _canvasPadding.height + _fontSize - _canvasSize.height;\n if (_vAlign === macro.VerticalTextAlignment.BOTTOM) {\n // Unlike BMFont, needs to reserve space below.\n blank += textUtils.BASELINE_RATIO / 2 * _fontSize;\n // BOTTOM\n firstLinelabelY -= blank;\n } else {\n // CENTER\n firstLinelabelY -= blank / 2;\n }\n }\n\n firstLinelabelY += textUtils.BASELINE_OFFSET * _fontSize;\n\n return cc.v2(labelX + _canvasPadding.x, firstLinelabelY + _canvasPadding.y);\n }\n\n _setupOutline () {\n _context.strokeStyle = `rgba(${_outlineColor.r}, ${_outlineColor.g}, ${_outlineColor.b}, ${_outlineColor.a / 255})`;\n _context.lineWidth = _outlineComp.width * 2 * (_isRetina ? _retinaScale : 1);\n }\n\n _setupShadow () {\n _context.shadowColor = `rgba(${_shadowColor.r}, ${_shadowColor.g}, ${_shadowColor.b}, ${_shadowColor.a / 255})`;\n _context.shadowBlur = _shadowComp.blur * (_isRetina ? _retinaScale : 1);\n _context.shadowOffsetX = _shadowComp.offset.x * (_isRetina ? _retinaScale : 1);\n _context.shadowOffsetY = -_shadowComp.offset.y * (_isRetina ? _retinaScale : 1);\n }\n\n _drawTextEffect (startPosition, lineHeight) {\n if (!_shadowComp && !_outlineComp && !_enableUnderline) return;\n\n let isMultiple = _splitedStrings.length > 1 && _shadowComp;\n let measureText = this._measureText(_context, _fontDesc);\n let drawTextPosX = 0, drawTextPosY = 0;\n\n // only one set shadow and outline\n if (_shadowComp) {\n this._setupShadow();\n }\n \n if (_outlineComp) {\n this._setupOutline();\n }\n\n // draw shadow and (outline or text)\n for (let i = 0; i < _splitedStrings.length; ++i) {\n drawTextPosX = startPosition.x;\n drawTextPosY = startPosition.y + i * lineHeight;\n // multiple lines need to be drawn outline and fill text\n if (isMultiple) {\n if (_outlineComp) {\n _context.strokeText(_splitedStrings[i], drawTextPosX, drawTextPosY);\n }\n _context.fillText(_splitedStrings[i], drawTextPosX, drawTextPosY);\n }\n\n // draw underline\n if (_enableUnderline) {\n _drawUnderlineWidth = measureText(_splitedStrings[i]);\n if (_hAlign === macro.TextAlignment.RIGHT) {\n _drawUnderlinePos.x = startPosition.x - _drawUnderlineWidth;\n } else if (_hAlign === macro.TextAlignment.CENTER) {\n _drawUnderlinePos.x = startPosition.x - (_drawUnderlineWidth / 2);\n } else {\n _drawUnderlinePos.x = startPosition.x;\n }\n _drawUnderlinePos.y = drawTextPosY + _drawFontSize / 8;\n _context.fillRect(_drawUnderlinePos.x, _drawUnderlinePos.y, _drawUnderlineWidth, _underlineThickness);\n }\n }\n\n if (isMultiple) {\n _context.shadowColor = 'transparent';\n }\n }\n\n _updateTexture () {\n _context.clearRect(0, 0, _canvas.width, _canvas.height);\n // use round for line join to avoid sharp intersect point\n _context.lineJoin = 'round';\n //Add a white background to avoid black edges.\n if (!_premultiply) {\n //TODO: it is best to add alphaTest to filter out the background color.\n let _fillColor = _outlineComp ? _outlineColor : _color;\n _context.fillStyle = `rgba(${_fillColor.r}, ${_fillColor.g}, ${_fillColor.b}, ${_invisibleAlpha})`;\n _context.fillRect(0, 0, _canvas.width, _canvas.height);\n _context.fillStyle = `rgba(${_color.r}, ${_color.g}, ${_color.b}, 1)`;\n } else {\n _context.fillStyle = `rgba(${_color.r}, ${_color.g}, ${_color.b}, ${_color.a / 255.0})`;\n }\n\n let startPosition = this._calculateFillTextStartPosition();\n let lineHeight = this._getLineHeight();\n let drawTextPosX = startPosition.x, drawTextPosY = 0;\n // draw shadow and underline\n this._drawTextEffect(startPosition, lineHeight);\n // draw text and outline\n for (let i = 0; i < _splitedStrings.length; ++i) {\n drawTextPosY = startPosition.y + i * lineHeight;\n if (_outlineComp) {\n _context.strokeText(_splitedStrings[i], drawTextPosX, drawTextPosY);\n }\n _context.fillText(_splitedStrings[i], drawTextPosX, drawTextPosY);\n }\n\n if (_shadowComp) {\n _context.shadowColor = 'transparent';\n }\n\n _texture.handleLoadedTexture();\n }\n\n _calDynamicAtlas (comp) {\n if(comp.cacheMode !== Label.CacheMode.BITMAP) return false;\n let frame = comp._frame;\n // Delete cache in atlas.\n deleteFromDynamicAtlas(comp, frame);\n if (!frame._original) {\n frame.setRect(cc.rect(0, 0, _canvas.width, _canvas.height));\n }\n return this.packDynamicAtlasAndCheckMaterial(comp, frame);\n }\n\n packDynamicAtlasAndCheckMaterial(comp, frame) {\n const allowDynamicAtlas = comp.allowDynamicAtlas;\n if ((cc.sp.allowDynamicAtlas && allowDynamicAtlas === 0) || allowDynamicAtlas === 1) {\n frame._texture._uuid = _fontDesc\n + _overflow\n + (_premultiply ? 'P' : 'NP')\n + (_enableUnderline ? 'UL' : 'NUL')\n + _string;\n \n if (_outlineComp) {\n frame._texture._uuid += _outlineComp.color.toHEX()\n + ','\n + _outlineComp.width\n + ',';\n }\n\n if (_shadowComp) {\n frame._texture._uuid += _shadowComp.color.toHEX()\n + _shadowComp.offset.x\n + ','\n + _shadowComp.offset.y\n + ','\n + _shadowComp.blur;\n }\n }\n return super.packDynamicAtlasAndCheckMaterial(comp, frame);\n }\n\n _updateLabelDimensions () {\n _canvasSize.width = Math.min(_canvasSize.width, MAX_SIZE);\n _canvasSize.height = Math.min(_canvasSize.height, MAX_SIZE);\n\n let recreate = false;\n if (_canvas.width !== _canvasSize.width) {\n _canvas.width = _canvasSize.width;\n recreate = true\n }\n\n if (_canvas.height !== _canvasSize.height) {\n _canvas.height = _canvasSize.height;\n recreate = true\n }\n\n recreate && (_context.font = _fontDesc);\n // align\n _context.textAlign = Alignment[_hAlign];\n }\n\n _getFontDesc () {\n let fontDesc = _fontSize.toString() + 'px ';\n fontDesc = fontDesc + _fontFamily;\n if (_enableBold) {\n fontDesc = \"bold \" + fontDesc;\n }\n if (_enableItalic) {\n fontDesc = \"italic \" + fontDesc;\n }\n return fontDesc;\n }\n\n _getLineHeight () {\n let nodeSpacingY = _lineHeight;\n if (nodeSpacingY === 0) {\n nodeSpacingY = _fontSize;\n } else {\n nodeSpacingY = nodeSpacingY * _fontSize / _drawFontSize;\n }\n\n return nodeSpacingY | 0;\n }\n\n _calculateParagraphLength (paragraphedStrings, ctx) {\n let paragraphLength = [];\n\n for (let i = 0; i < paragraphedStrings.length; ++i) {\n let width = textUtils.safeMeasureText(ctx, paragraphedStrings[i], _fontDesc);\n paragraphLength.push(width);\n }\n\n return paragraphLength;\n }\n\n _measureText (ctx, fontDesc) {\n return function (string) {\n return textUtils.safeMeasureText(ctx, string, fontDesc);\n };\n }\n\n _calculateShrinkFont (paragraphedStrings) {\n let paragraphLength = this._calculateParagraphLength(paragraphedStrings, _context);\n \n let i = 0;\n let totalHeight = 0;\n let maxLength = 0;\n\n if (_isWrapText) {\n let canvasWidthNoMargin = _nodeContentSize.width;\n let canvasHeightNoMargin = _nodeContentSize.height;\n if (canvasWidthNoMargin < 0 || canvasHeightNoMargin < 0) {\n return;\n }\n totalHeight = canvasHeightNoMargin + 1;\n let actualFontSize = _fontSize + 1;\n let textFragment = \"\";\n //let startShrinkFontSize = actualFontSize | 0;\n let left = 0, right = actualFontSize | 0, mid = 0;\n\n while (left < right) {\n mid = (left + right + 1) >> 1;\n\n if (mid <= 0) {\n cc.logID(4003);\n break;\n }\n\n _fontSize = mid;\n _fontDesc = this._getFontDesc();\n _context.font = _fontDesc;\n let lineHeight = this._getLineHeight();\n\n totalHeight = 0;\n for (i = 0; i < paragraphedStrings.length; ++i) {\n let allWidth = textUtils.safeMeasureText(_context, paragraphedStrings[i], _fontDesc);\n textFragment = textUtils.fragmentText(paragraphedStrings[i],\n allWidth,\n canvasWidthNoMargin,\n this._measureText(_context, _fontDesc));\n totalHeight += textFragment.length * lineHeight;\n }\n\n if (totalHeight > canvasHeightNoMargin) {\n right = mid - 1;\n } else {\n left = mid;\n }\n }\n\n if (left === 0) {\n cc.logID(4003);\n } else {\n _fontSize = left;\n _fontDesc = this._getFontDesc();\n _context.font = _fontDesc;\n }\n } else {\n totalHeight = paragraphedStrings.length * this._getLineHeight();\n\n for (i = 0; i < paragraphedStrings.length; ++i) {\n if (maxLength < paragraphLength[i]) {\n maxLength = paragraphLength[i];\n }\n }\n let scaleX = (_canvasSize.width - _canvasPadding.width) / maxLength;\n let scaleY = _canvasSize.height / totalHeight;\n\n _fontSize = (_drawFontSize * Math.min(1, scaleX, scaleY)) | 0;\n _fontDesc = this._getFontDesc();\n _context.font = _fontDesc;\n }\n }\n\n _calculateWrapText (paragraphedStrings) {\n if (!_isWrapText) return;\n\n _splitedStrings = [];\n let canvasWidthNoMargin = _nodeContentSize.width;\n for (let i = 0; i < paragraphedStrings.length; ++i) {\n let allWidth = textUtils.safeMeasureText(_context, paragraphedStrings[i], _fontDesc);\n let textFragment = textUtils.fragmentText(paragraphedStrings[i],\n allWidth,\n canvasWidthNoMargin,\n this._measureText(_context, _fontDesc));\n _splitedStrings = _splitedStrings.concat(textFragment);\n }\n }\n\n _calculateLabelFont () {\n let paragraphedStrings = _string.split('\\n');\n\n _splitedStrings = paragraphedStrings;\n _fontDesc = this._getFontDesc();\n _context.font = _fontDesc;\n\n switch (_overflow) {\n case Overflow.NONE: {\n let canvasSizeX = 0;\n let canvasSizeY = 0;\n for (let i = 0; i < paragraphedStrings.length; ++i) {\n let paraLength = textUtils.safeMeasureText(_context, paragraphedStrings[i], _fontDesc);\n canvasSizeX = canvasSizeX > paraLength ? canvasSizeX : paraLength;\n }\n canvasSizeY = (_splitedStrings.length + textUtils.BASELINE_RATIO) * this._getLineHeight();\n let rawWidth = parseFloat(canvasSizeX.toFixed(2));\n let rawHeight = parseFloat(canvasSizeY.toFixed(2));\n _canvasSize.width = rawWidth + _canvasPadding.width;\n _canvasSize.height = rawHeight + _canvasPadding.height;\n _nodeContentSize.width = rawWidth + _contentSizeExtend.width;\n _nodeContentSize.height = rawHeight + _contentSizeExtend.height;\n break;\n }\n case Overflow.SHRINK: {\n this._calculateShrinkFont(paragraphedStrings);\n this._calculateWrapText(paragraphedStrings);\n break;\n }\n case Overflow.CLAMP: {\n this._calculateWrapText(paragraphedStrings);\n break;\n }\n case Overflow.RESIZE_HEIGHT: {\n this._calculateWrapText(paragraphedStrings);\n let rawHeight = (_splitedStrings.length + textUtils.BASELINE_RATIO) * this._getLineHeight();\n _canvasSize.height = rawHeight + _canvasPadding.height;\n // set node height\n _nodeContentSize.height = rawHeight + _contentSizeExtend.height;\n break;\n }\n }\n }\n}\n\n","const dynamicAtlasManager = require('./dynamic-atlas/manager');\nconst WHITE = cc.Color.WHITE;\n\n// share data of bmfont\nlet shareLabelInfo = {\n fontAtlas: null,\n \n fontSize:0,\n lineHeight:0,\n hAlign:0,\n vAlign:0,\n\n hash:\"\",\n fontFamily:\"\",\n fontDesc:\"Arial\",\n color:WHITE,\n isOutlined:false,\n out:WHITE,\n margin:0,\n}\n\nmodule.exports = {\n\n deleteFromDynamicAtlas (comp, frame) {\n if (frame && !CC_TEST) {\n if (frame._original && dynamicAtlasManager) {\n dynamicAtlasManager.deleteAtlasSpriteFrame(frame);\n frame._resetDynamicAtlasFrame();\n }\n }\n },\n\n getFontFamily (comp) {\n if (!comp.useSystemFont) {\n if (comp.font) {\n if (comp.font._nativeAsset) {\n return comp.font._nativeAsset;\n }\n cc.assetManager.postLoadNative(comp.font, function (err) {\n comp.isValid && comp.setVertsDirty();\n });\n return 'Arial';\n }\n \n return 'Arial';\n }\n else {\n return comp.fontFamily || 'Arial';\n }\n },\n\n shareLabelInfo: shareLabelInfo\n}\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\ncc.assemblers = {};\n\nrequire('./sprite');\nrequire('./mask-assembler');\nrequire('./graphics');\nrequire('./label');\nrequire('./motion-streak');\nrequire('./motion-streak-multi');\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport WebglBmfontAssembler from '../2d/bmfont';\nimport { vfmtPosUvColorTexId } from '../../../../webgl/vertex-format';\n\nexport default class MultiWebglBmfontAssembler extends WebglBmfontAssembler {\n initData () {\n let data = this._renderData;\n data.createFlexData(0, this.verticesCount, this.indicesCount, this.getVfmt());\n }\n\n getVfmt() {\n return vfmtPosUvColorTexId;\n }\n\n getBuffer() {\n return cc.renderer._handle.getBuffer(\"mesh\", this.getVfmt());\n }\n\n updateRenderData(comp) {\n super.updateRenderData(comp);\n\n if (comp._texIdDirty) {\n comp._updateMultiTexId(comp.getMaterial(0), comp._frame._texture);\n }\n\n // 不进行 Dirty 判断,文本可能会变化,但是纹理不会变\n this.updateTexId(comp);\n comp._texIdDirty = false;\n }\n\n updateRenderDataForSwitchMaterial(comp) {\n super._preUpdateRenderData(comp);\n super._updateRenderData(comp);\n\n if (comp._texIdDirty) {\n comp._updateMultiTexId(comp.getMaterial(0), comp._frame._texture);\n }\n\n // 不进行 Dirty 判断,文本可能会变化,但是纹理不会变\n this.updateTexId(comp);\n comp._texIdDirty = false;\n }\n}\n\nMultiWebglBmfontAssembler.prototype.floatsPerVert = 6;\nMultiWebglBmfontAssembler.prototype.texIdOffset = 5;\nMultiWebglBmfontAssembler.prototype.isMulti = true;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport WebglTTFAssembler from '../2d/ttf';\nimport { vfmtPosUvColorTexId } from '../../../../webgl/vertex-format';\n\nexport default class MultiWebglTTFAssembler extends WebglTTFAssembler {\n initData() {\n let data = this._renderData;\n data.createFlexData(0, this.verticesCount, this.indicesCount, this.getVfmt());\n const indices = data.iDatas[0];\n data.initQuadIndices(indices);\n }\n\n getVfmt() {\n return vfmtPosUvColorTexId;\n }\n\n getBuffer() {\n return cc.renderer._handle.getBuffer(\"mesh\", this.getVfmt());\n }\n\n updateRenderData(comp) {\n super.updateRenderData(comp);\n\n if (comp._texIdDirty) {\n comp._updateMultiTexId(comp.getMaterial(0), comp._frame._texture);\n }\n\n // 不进行 Dirty 判断,文本可能会变化,但是纹理不会变\n this.updateTexId(comp);\n comp._texIdDirty = false;\n }\n\n updateRenderDataForSwitchMaterial(comp) {\n super._updateRenderData(comp);\n\n if (comp._texIdDirty) {\n comp._updateMultiTexId(comp.getMaterial(0), comp._frame._texture);\n }\n\n // 不进行 Dirty 判断,文本可能会变化,但是纹理不会变\n this.updateTexId(comp);\n comp._texIdDirty = false;\n }\n}\n\nMultiWebglTTFAssembler.prototype.floatsPerVert = 6;\nMultiWebglTTFAssembler.prototype.texIdOffset = 5;\nMultiWebglTTFAssembler.prototype.isMulti = true;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport BmfontAssembler from '../../../../utils/label/bmfont';\n\nlet _dataOffset = 0;\n\nexport default class WebglBmfontAssembler extends BmfontAssembler {\n initData () {\n this._renderData.createFlexData(0, 4, 6, this.getVfmt());\n }\n\n _reserveQuads (comp, count) {\n let verticesCount = count * 4;\n let indicesCount = count * 6;\n \n let flexBuffer = this._renderData._flexBuffer;\n flexBuffer.reserve(verticesCount, indicesCount);\n flexBuffer.used(verticesCount, indicesCount);\n \n let iData = this._renderData.iDatas[0];\n\n for (let i = 0, vid = 0, l = indicesCount; i < l; i += 6, vid += 4) {\n iData[i] = vid;\n iData[i + 1] = vid + 1;\n iData[i + 2] = vid + 2;\n iData[i + 3] = vid + 1;\n iData[i + 4] = vid + 3;\n iData[i + 5] = vid + 2;\n }\n\n _dataOffset = 0;\n }\n\n _quadsUpdated (comp) {\n _dataOffset = 0;\n\n let flexBuffer = this._renderData._flexBuffer;\n flexBuffer.used(this.verticesCount, this.indicesCount);\n }\n\n _getColor (comp) {\n return comp.node._color._val;\n }\n\n appendQuad(comp, texture, rect, rotated, x, y, scale, letter) {\n let renderData = this._renderData;\n let verts = renderData.vDatas[0],\n uintVerts = renderData.uintVDatas[0];\n\n this.verticesCount += 4;\n this.indicesCount = this.verticesCount / 2 * 3;\n\n let texw = texture.width,\n texh = texture.height,\n rectWidth = rect.width,\n rectHeight = rect.height,\n color = this._getColor(comp);\n\n let l, b, r, t;\n let floatsPerVert = this.floatsPerVert;\n // uvs\n let uvDataOffset = _dataOffset + this.uvOffset;\n if (!rotated) {\n l = (rect.x) / texw;\n r = (rect.x + rectWidth) / texw;\n b = (rect.y + rectHeight) / texh;\n t = (rect.y) / texh;\n\n verts[uvDataOffset] = l;\n verts[uvDataOffset + 1] = b;\n uvDataOffset += floatsPerVert;\n verts[uvDataOffset] = r;\n verts[uvDataOffset + 1] = b;\n uvDataOffset += floatsPerVert;\n verts[uvDataOffset] = l;\n verts[uvDataOffset + 1] = t;\n uvDataOffset += floatsPerVert;\n verts[uvDataOffset] = r;\n verts[uvDataOffset + 1] = t;\n } else {\n l = (rect.x) / texw;\n r = (rect.x + rectHeight) / texw;\n b = (rect.y + rectWidth) / texh;\n t = (rect.y) / texh;\n\n verts[uvDataOffset] = l;\n verts[uvDataOffset + 1] = t;\n uvDataOffset += floatsPerVert;\n verts[uvDataOffset] = l;\n verts[uvDataOffset + 1] = b;\n uvDataOffset += floatsPerVert;\n verts[uvDataOffset] = r;\n verts[uvDataOffset + 1] = t;\n uvDataOffset += floatsPerVert;\n verts[uvDataOffset] = r;\n verts[uvDataOffset + 1] = b;\n }\n\n\n // positions\n const retinaScale = this.getTTFTextureSizeScale();\n x /= retinaScale;\n y /= retinaScale;\n rectWidth /= retinaScale;\n rectHeight /= retinaScale;\n l = x;\n r = x + rectWidth * scale;\n b = y - rectHeight * scale;\n t = y;\n\n this.appendVerts(comp, _dataOffset, l, r, b, t, letter);\n\n // colors\n let colorOffset = _dataOffset + this.colorOffset;\n for (let i = 0; i < 4; i++) {\n uintVerts[colorOffset] = color;\n colorOffset += floatsPerVert;\n }\n\n _dataOffset += this.floatsPerVert * 4;\n }\n\n appendVerts(comp, offset, l, r, b, t, letter) {\n let local = this._local;\n let floatsPerVert = this.floatsPerVert;\n\n local[offset] = l;\n local[offset + 1] = b;\n\n offset += floatsPerVert;\n local[offset] = r;\n local[offset + 1] = b;\n\n offset += floatsPerVert;\n local[offset] = l;\n local[offset + 1] = t;\n\n offset += floatsPerVert;\n local[offset] = r;\n local[offset + 1] = t;\n }\n\n updateWorldVerts (comp) {\n let node = comp.node;\n\n let matrix = node._worldMatrix;\n let matrixm = matrix.m,\n a = matrixm[0], b = matrixm[1], c = matrixm[4], d = matrixm[5],\n tx = matrixm[12], ty = matrixm[13];\n\n let local = this._local;\n let world = this._renderData.vDatas[0];\n let floatsPerVert = this.floatsPerVert;\n for (let offset = 0; offset < local.length; offset += floatsPerVert) {\n let x = local[offset];\n let y = local[offset + 1];\n world[offset] = x * a + y * c + tx;\n world[offset+1] = x * b + y * d + ty;\n }\n }\n}\n\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst js = require('../../../../../platform/js');\nconst WebglBmfontAssembler = require('./bmfont');\nconst LetterFontAssembler = require('../../../../utils/label/letter-font');\nconst WHITE = cc.color(255, 255, 255, 255);\n\nexport default class WebglLetterFontAssembler extends LetterFontAssembler {\n createData (comp) {\n return comp.requestRenderData();\n }\n\n _getColor (comp) {\n WHITE._fastSetA(comp.node._color.a);\n return WHITE._val;\n }\n\n updateColor (comp) {\n let color = this._getColor(comp);\n\n super.updateColor(comp, color);\n }\n}\n\n","\nimport MaterialVariant from '../../../../../assets/material/material-variant';\n\nconst Label = require('../../../../../components/CCLabel');\nconst LabelShadow = require('../../../../../components/CCLabelShadow');\nconst LabelOutline = require('../../../../../components/CCLabelOutline');\nconst Material = require('../../../../../assets/material/CCMaterial');\n\n\n\nconst UPDATE_CONTENT = 1 << 0;\nconst UPDATE_FONT = 1 << 1;\nconst UPDATE_EFFECT = 1 << 2;\n\nexport default class NativeTTF {\n\n\n init(comp) {\n this.labelMaterial = null;\n this._label = this._renderComp = comp;\n renderer.CustomAssembler.prototype.ctor.call(this);\n comp.node._proxy.setAssembler(this);\n this._layout = new jsb.LabelRenderer();\n this._layout.init(comp);\n this._cfg = new DataView(this._layout._cfg);\n this._layoutInfo = new DataView(this._layout._layout);\n\n this._cfgFields = jsb.LabelRenderer._cfgFields;\n this._layoutFields = jsb.LabelRenderer._layoutFields;\n this._layout.bindNodeProxy(comp.node._proxy);\n this._bindMaterial(comp);\n }\n\n\n _setBufferFlag(dv, offset, size, type, flag){\n if ( type == \"int8\" && size == 1) {\n let v = dv.getInt8(offset);\n dv.setInt8(offset, flag | v);\n } else if(type == \"int32\" && size == 4) {\n let v = dv.getInt32(offset, jsb.__isLittleEndian__);\n dv.setInt32(offset, flag|v , jsb.__isLittleEndian__);\n } else {\n cc.warn(\"flag storage type should be int8/int32 only, type/size -> \" + type+\"/\"+size + \".\");\n }\n }\n\n _updateCfgFlag(flag) {\n let field = this._cfgFields.updateFlags;\n this._setBufferFlag(this._cfg, field.offset, field.size, field.type, flag);\n }\n\n _setBufferValue(dv, offset, size, type, value) {\n if(type == \"float\" && size == 4) {\n dv.setFloat32(offset, value, jsb.__isLittleEndian__);\n } else if(type == \"int32\" && size == 4) {\n dv.setInt32(offset, value, jsb.__isLittleEndian__);\n } else if (type == \"bool\" && size == 1) {\n dv.setInt8(offset, !!value ? 1 : 0, jsb.__isLittleEndian__);\n } else if(type == \"Color4B\" && size == 4) {\n dv.setUint8(offset, value.r);\n dv.setUint8(offset + 1, value.g);\n dv.setUint8(offset + 2, value.b);\n dv.setUint8(offset + 3, value.a);\n } else if(type == \"int8\" && size == 1) {\n dv.setUint8(offset, value);\n } else {\n cc.warn(\"dont know how to set value to buffer, type/size -> \" + type+\"/\"+size + \".\");\n }\n }\n\n _setFieldValue(dv, desc, field_name, value) {\n let field = desc[field_name];\n this._setBufferValue(dv, field.offset, field.size, field.type, value);\n }\n\n _getBufferValue(dv, offset, size, type) {\n if(type == \"float\" && size == 4) {\n return dv.getFloat32(offset, jsb.__isLittleEndian__);\n } else if(type == \"int32\" && size == 4) {\n return dv.getInt32(offset, jsb.__isLittleEndian__);\n } else if (type == \"bool\" && size == 1) {\n return dv.getInt8(offset, jsb.__isLittleEndian__) != 0;\n } else if(type == \"Color4B\" && size == 4) {\n let r = dv.getUint8(offset);\n let g = dv.getUint8(offset + 1);\n let b = dv.getUint8(offset + 2);\n let a = dv.getUint8(offset + 3);\n return {r, g, b, a};\n } else if(type == \"int8\" && size == 1) {\n return dv.getUint8(offset);\n } else {\n cc.warn(\"dont know how to get value from buffer, type/size -> \" + type+\"/\"+size + \".\");\n return undefined;\n }\n }\n\n _getFieldValue(dv, desc, field_name) {\n let field = desc[field_name];\n return this._getBufferValue(dv, field.offset, field.size, field.type);\n }\n\n _getLayoutValue(field_name) {\n return this._getFieldValue(this._layoutInfo, this._layoutFields, field_name);\n }\n\n _setLayoutValue(field_name, value) {\n return this._setFieldValue(this._layoutInfo, this._layoutFields, field_name, value);\n }\n\n _updateCfgFlag_Content() {\n this._updateCfgFlag(UPDATE_CONTENT);\n }\n\n _updateCfgFlag_Font() {\n this._updateCfgFlag(UPDATE_FONT);\n }\n \n _colorEqual(a, b) {\n return a.r == b.r && a.g == b.g && a.b == b.b && a.a == b.a;\n } \n\n _colorToObj(r, g, b, a) {\n return {r, g, b, a};\n }\n\n setString(str)\n {\n if(str != this._layout.string) {\n this._layout.string = str;\n this._updateCfgFlag_Content();\n }\n }\n\n setFontPath(path) {\n if(path != this._layout.fontPath) {\n this._layout.fontPath = path;\n this._updateCfgFlag_Font();\n }\n }\n\n setFontSize(fontSize, fontSizeRetina)\n {\n let oldfontsize = this._getFieldValue(this._cfg, this._cfgFields, \"fontSize\");\n if(oldfontsize != fontSize) {\n this._setFieldValue(this._cfg, this._cfgFields, \"fontSize\", fontSize);\n this._setFieldValue(this._cfg, this._cfgFields, \"fontSizeRetina\", fontSizeRetina);\n this._updateCfgFlag_Font();\n }\n }\n\n setOutline(outline) {\n let oldOutline = this._getLayoutValue(\"outlineSize\");\n if((oldOutline > 0) != (outline > 0)) {\n this._updateCfgFlag_Font();\n }\n if(oldOutline != outline) {\n this._updateCfgFlag_Content();\n this._setLayoutValue(\"outlineSize\", outline);\n }\n }\n\n setOutlineColor(color) {\n let oldColor = this._getLayoutValue( \"outlineColor\");\n if(!this._colorEqual(oldColor, color)) {\n this._setLayoutValue(\"outlineColor\", color);\n this._updateCfgFlag_Content();\n }\n }\n\n setLineHeight(lineHeight) {\n let oldLineHeight = this._getLayoutValue(\"lineHeight\");\n if(oldLineHeight != lineHeight) {\n this._setLayoutValue(\"lineHeight\", lineHeight);\n this._updateCfgFlag_Content();\n }\n }\n\n setOverFlow(overflow) {\n let oldValue = this._getLayoutValue(\"overflow\");\n if(oldValue != overflow) {\n this._setLayoutValue(\"overflow\", overflow);\n this._updateCfgFlag_Content();\n }\n }\n\n setEnableWrap(value) {\n let oldValue = this._getLayoutValue(\"wrap\");\n if(oldValue != value) {\n this._setLayoutValue(\"wrap\", value);\n this._updateCfgFlag_Content();\n }\n }\n\n setVerticalAlign(value) {\n let oldValue = this._getLayoutValue(\"valign\");\n if(oldValue != value) {\n this._setLayoutValue(\"valign\", value);\n this._updateCfgFlag_Content();\n }\n }\n\n setHorizontalAlign(value) {\n let oldValue = this._getLayoutValue(\"halign\");\n if(oldValue != value) {\n this._setLayoutValue(\"halign\", value);\n this._updateCfgFlag_Content();\n }\n }\n\n setContentSize(width, height) {\n let oldWidth = this._getLayoutValue(\"width\");\n let oldHeight = this._getLayoutValue(\"height\");\n if(oldWidth != width || oldHeight != height) {\n this._setLayoutValue(\"height\", height);\n this._setLayoutValue(\"width\", width);\n this._updateCfgFlag_Content();\n }\n }\n\n setAnchorPoint(x, y) {\n let oldX = this._getLayoutValue(\"anchorX\");\n let oldY = this._getLayoutValue(\"anchorY\");\n if(oldX != x || oldY != y) {\n this._setLayoutValue(\"anchorX\", x);\n this._setLayoutValue(\"anchorY\", y);\n this._updateCfgFlag_Content();\n }\n }\n\n setColor(color) {\n let oldColor = this._getLayoutValue(\"color\");\n if(!this._colorEqual(oldColor, color)) {\n this._setLayoutValue(\"color\", color);\n this._updateCfgFlag_Content();\n }\n }\n\n setShadow( x, y, blur) {\n let oldBlur = this._getLayoutValue(\"shadowBlur\");\n let oldX = this._getLayoutValue(\"shadowX\");\n let oldY = this._getLayoutValue(\"shadowY\");\n if((oldBlur > 0) != (blur > 0)) {\n this._updateCfgFlag_Font();\n }\n let updateContent = false;\n if(oldBlur != blur) {\n this._setLayoutValue(\"shadowBlur\", blur);\n updateContent = true;\n }\n if(oldX != x) {\n this._setLayoutValue(\"shadowX\", x);\n updateContent = true;\n }\n if(oldY != y) {\n this._setLayoutValue(\"shadowY\", y);\n updateContent = true;\n }\n if(updateContent) {\n this._updateCfgFlag_Content();\n }\n }\n\n setShadowColor(color) {\n let oldColor = this._getLayoutValue(\"shadowColor\");\n if(!this._colorEqual(oldColor, color)) {\n this._setLayoutValue(\"shadowColor\", color);\n this._updateCfgFlag_Content();\n }\n }\n\n setItalic(enabled) {\n let oldItalic = this._getLayoutValue(\"italic\");\n if(oldItalic!=enabled) {\n this._setLayoutValue(\"italic\", enabled);\n this._updateCfgFlag_Content();\n }\n }\n\n setBold(bold) {\n let oldBold = this._getLayoutValue(\"bold\");\n if(oldBold!=bold) {\n this._setLayoutValue(\"bold\", bold);\n this._updateCfgFlag_Content();\n this._updateCfgFlag_Font(); //enable sdf\n }\n }\n\n setUnderline(underline)\n {\n let oldBold = this._getLayoutValue(\"underline\");\n if(oldBold != underline) {\n this._setLayoutValue(\"underline\", underline);\n this._updateCfgFlag_Content();\n }\n }\n\n setSpacingX(x) {\n let oldX = this._getLayoutValue(\"spaceX\");\n if(oldX != x && typeof x == \"number\" && ! isNaN(x)) {\n this._setLayoutValue(\"spaceX\", x);\n this._updateCfgFlag_Content();\n }\n }\n\n updateRenderData(comp) {\n\n if (!comp._vertsDirty) return;\n\n if (comp.font && comp.font.nativeUrl) {\n this.setFontPath(cc.assetManager.cacheManager.getCache(comp.font.nativeUrl) || comp.font.nativeUrl);\n }\n let layout = this._layout;\n let c = comp.node.color;\n let node = comp.node;\n let retinaSize = comp.fontSize;\n\n this.setString(comp.string);\n this.setFontSize(comp.fontSize, retinaSize / 72 * comp.fontSize);\n this.setLineHeight(comp.lineHeight);\n this.setEnableWrap(comp.enableWrapText);\n this.setItalic(comp.enableItalic);\n this.setUnderline(comp.enableUnderline);\n this.setBold(comp.enableBold);\n this.setOverFlow(comp.overflow);\n this.setVerticalAlign(comp.verticalAlign);\n this.setHorizontalAlign(comp.horizontalAlign);\n this.setSpacingX(comp.spacingX);\n this.setContentSize(node.getContentSize().width, node.getContentSize().height);\n this.setAnchorPoint(node.anchorX, node.anchorY);\n this.setColor(this._colorToObj(c.getR(), c.getG(), c.getB(), Math.ceil(c.getA() * node.opacity / 255)));\n\n\n let shadow = node.getComponent(cc.LabelShadow);\n if (shadow && shadow.enabled) {\n let shadowColor = shadow.color;\n this.setShadow(shadow.offset.x, shadow.offset.y, shadow.blur);\n this.setShadowColor(this._colorToObj(shadowColor.getR(), shadowColor.getG(), shadowColor.getB(), Math.ceil(shadowColor.getA() * node.opacity / 255)));\n } else {\n this.setShadow(0, 0, -1);\n }\n\n this._updateTTFMaterial(comp);\n \n layout.render();\n //comp._vertsDirty = false;\n }\n\n _bindMaterial(comp) {\n let material = this.labelMaterial;\n if(!material) {\n material = MaterialVariant.createWithBuiltin(\"2d-label\", comp);\n this.labelMaterial = material;\n }\n return material;\n }\n\n _updateTTFMaterial(comp) {\n let material = this._bindMaterial(comp)\n let node = this._label.node;\n let layout = this._layout;\n let outline = node.getComponent(cc.LabelOutline);\n let outlineSize = 0;\n if (outline && outline.enabled && outline.width > 0) {\n outlineSize = Math.max(Math.min(outline.width / 10, 0.4), 0.1);\n let c = outline.color;\n this.setOutlineColor(this._colorToObj(c.getR(), c.getG(), c.getB(), Math.ceil(c.getA() * node.opacity / 255)));\n }\n this.setOutline(outlineSize);\n material.define('CC_USE_MODEL', true);\n material.define('USE_TEXTURE_ALPHAONLY', true);\n material.define('USE_SDF', outlineSize > 0.0 || comp.enableBold );\n material.define('USE_SDF_EXTEND', comp.enableBold ? 1 : 0);\n if (material.getDefine('CC_SUPPORT_standard_derivatives') !== undefined && cc.sys.glExtension('OES_standard_derivatives')) {\n material.define('CC_SUPPORT_standard_derivatives', true);\n }\n layout.setEffect(material.effect._nativeObj);\n }\n\n fillBuffers (comp, renderer) {\n this._layout.render();\n }\n getVfmt() {\n }\n}","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport TTFAssembler from '../../../../utils/label/ttf';\n\nconst LabelShadow = require('../../../../../components/CCLabelShadow');\nconst WHITE = cc.color(255, 255, 255, 255);\n\nexport default class WebglTTFAssembler extends TTFAssembler {\n updateUVs (comp) {\n let verts = this._renderData.vDatas[0];\n let uv = comp._frame.uv;\n let uvOffset = this.uvOffset;\n let floatsPerVert = this.floatsPerVert;\n for (let i = 0; i < 4; i++) {\n let srcOffset = i * 2;\n let dstOffset = floatsPerVert * i + uvOffset;\n verts[dstOffset] = uv[srcOffset];\n verts[dstOffset + 1] = uv[srcOffset + 1];\n }\n }\n\n updateColor (comp) {\n WHITE._fastSetA(comp.node._color.a);\n let color = WHITE._val;\n\n super.updateColor(comp, color);\n }\n\n updateVerts(comp) {\n const scale = this.getTTFTextureSizeScale();\n let node = comp.node,\n canvasWidth = comp._ttfTexture.width / scale,\n canvasHeight = comp._ttfTexture.height / scale,\n appx = node.anchorX * node.width,\n appy = node.anchorY * node.height;\n\n let shadow = LabelShadow && comp.getComponent(LabelShadow);\n if (shadow && shadow._enabled) {\n // adapt size changed caused by shadow\n let offsetX = (canvasWidth - node.width) / 2;\n let offsetY = (canvasHeight - node.height) / 2;\n\n let shadowOffset = shadow.offset;\n if (-shadowOffset.x > offsetX) {\n // expand to left\n appx += (canvasWidth - node.width);\n }\n else if (offsetX > shadowOffset.x) {\n // expand to left and right\n appx += (offsetX - shadowOffset.x);\n }\n else {\n // expand to right, no need to change render position\n }\n\n if (-shadowOffset.y > offsetY) {\n // expand to top\n appy += (canvasHeight - node.height);\n }\n else if (offsetY > shadowOffset.y) {\n // expand to top and bottom\n appy += (offsetY - shadowOffset.y);\n }\n else {\n // expand to bottom, no need to change render position\n }\n }\n\n let local = this._local;\n local[0] = -appx;\n local[1] = -appy;\n local[2] = canvasWidth - appx;\n local[3] = canvasHeight - appy;\n\n this.updateUVs(comp);\n this.updateWorldVerts(comp);\n }\n}\n\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport Assembler from '../../../assembler';\nimport Label from '../../../../components/CCLabel';\n\nimport TTF from './2d/ttf';\nimport Bmfont from './2d/bmfont';\nimport Letter from './2d/letter';\n\nimport TTF3D from './3d/ttf';\nimport Bmfont3D from './3d/bmfont';\nimport Letter3D from './3d/letter';\n\nimport TTFMulti from './2d-multi/ttf';\nimport BmfontMulti from './2d-multi/bmfont';\n\nlet NativeTTF = undefined;\nif(CC_JSB) {\n NativeTTF = require(\"./2d/nativeTTF\");\n}\n\nLabel._canvasPool = {\n pool: [],\n get () {\n let data = this.pool.pop();\n\n if (!data) {\n let canvas = document.createElement(\"canvas\");\n let context = canvas.getContext(\"2d\");\n data = {\n canvas: canvas,\n context: context\n }\n\n // default text info\n context.textBaseline = 'alphabetic';\n }\n\n return data;\n },\n put (canvas) {\n if (this.pool.length >= 32) {\n return;\n }\n this.pool.push(canvas);\n }\n};\n\nAssembler.register(cc.Label, {\n getConstructor(label) {\n let is3DNode = label.node.is3DNode;\n const material = label.getMaterials()[0];\n let isMultiMaterial = material && material.material.isMultiSupport();\n\n let ctor = is3DNode ? TTF3D : (isMultiMaterial ? TTFMulti : TTF);\n \n if (label.font instanceof cc.BitmapFont) {\n ctor = is3DNode ? Bmfont3D : (isMultiMaterial ? BmfontMulti : Bmfont);\n } else if (label.cacheMode === Label.CacheMode.CHAR) {\n\n if(CC_JSB && !is3DNode && !!jsb.LabelRenderer && label.font instanceof cc.TTFFont && label._useNativeTTF()){\n ctor = NativeTTF;\n } else if (cc.sys.platform === cc.sys.WECHAT_GAME_SUB) {\n cc.warn('sorry, subdomain does not support CHAR mode currently!');\n } else {\n ctor = is3DNode ? Letter3D : Letter;\n } \n }\n\n return ctor;\n },\n\n TTF,\n Bmfont,\n Letter,\n\n TTF3D,\n Bmfont3D,\n Letter3D,\n NativeTTF,\n\n TTFMulti,\n BmfontMulti\n});\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport MotionStreakAssembler from \"./motion-streak\";\nimport { vfmtPosUvColorTexId } from '../../webgl/vertex-format';\nconst MotionStreak = require('../../../components/CCMotionStreak');\nconst RenderFlow = require('../../render-flow');\n\nfunction Point(point, dir) {\n this.point = point || cc.v2();\n this.dir = dir || cc.v2();\n this.distance = 0;\n this.time = 0;\n}\n\nPoint.prototype.setPoint = function (x, y) {\n this.point.x = x;\n this.point.y = y;\n};\n\nPoint.prototype.setDir = function (x, y) {\n this.dir.x = x;\n this.dir.y = y;\n};\n\nlet _normal = cc.v2();\nlet _vec2 = cc.v2();\n\nfunction normal(out, dir) {\n //get perpendicular\n out.x = -dir.y;\n out.y = dir.x;\n return out\n}\n\nexport default class MultiMotionStreakAssembler extends MotionStreakAssembler {\n initData() {\n this._renderData.createFlexData(0, 16, (16 - 2) * 3, this.getVfmt());\n }\n\n getVfmt() {\n return vfmtPosUvColorTexId;\n }\n\n getBuffer() {\n return cc.renderer._handle.getBuffer(\"mesh\", this.getVfmt());\n }\n\n update(comp, dt) {\n if (CC_EDITOR && !comp.preview) return;\n\n let stroke = comp._stroke / 2;\n\n let node = comp.node;\n let matrix = node._worldMatrix.m;\n let tx = matrix[12], ty = matrix[13];\n\n let points = comp._points;\n\n let cur;\n if (points.length > 1) {\n let difx = points[0].point.x - tx;\n let dify = points[0].point.y - ty;\n if ((difx * difx + dify * dify) < comp.minSeg) {\n cur = points[0];\n }\n }\n\n if (!cur) {\n cur = new Point();\n points.splice(0, 0, cur);\n }\n\n cur.setPoint(tx, ty);\n cur.time = comp._fadeTime + dt;\n\n let verticesCount = 0;\n let indicesCount = 0;\n\n if (points.length < 2) {\n return;\n }\n\n let color = comp._color,\n cr = color.r, cg = color.g, cb = color.b, ca = color.a;\n\n let prev = points[1];\n prev.distance = cur.point.sub(prev.point, _vec2).mag();\n _vec2.normalizeSelf();\n prev.setDir(_vec2.x, _vec2.y);\n cur.setDir(_vec2.x, _vec2.y);\n\n let flexBuffer = this._renderData._flexBuffer;\n flexBuffer.reserve(points.length * 2, (points.length - 1) * 6);\n let vData = flexBuffer.vData;\n let uintVData = flexBuffer.uintVData;\n let vertsOffset = 6;\n\n let fadeTime = comp._fadeTime;\n let findLast = false;\n for (let i = points.length - 1; i >= 0; i--) {\n let p = points[i];\n let point = p.point;\n let dir = p.dir;\n p.time -= dt;\n\n if (p.time < 0) {\n points.splice(i, 1);\n continue;\n }\n\n let progress = p.time / fadeTime;\n\n let next = points[i - 1];\n if (!findLast) {\n if (!next) {\n points.splice(i, 1);\n continue;\n }\n\n point.x = next.point.x - dir.x * progress;\n point.y = next.point.y - dir.y * progress;\n }\n findLast = true;\n\n normal(_normal, dir);\n\n\n let da = progress * ca;\n let c = ((da << 24) >>> 0) + (cb << 16) + (cg << 8) + cr;\n\n let offset = verticesCount * vertsOffset;\n\n vData[offset] = point.x + _normal.x * stroke;\n vData[offset + 1] = point.y + _normal.y * stroke;\n vData[offset + 2] = 1;\n vData[offset + 3] = progress;\n uintVData[offset + 4] = c;\n vData[offset + 5] = comp._texId;\n\n offset += vertsOffset;\n\n vData[offset] = point.x - _normal.x * stroke;\n vData[offset + 1] = point.y - _normal.y * stroke;\n vData[offset + 2] = 0;\n vData[offset + 3] = progress;\n uintVData[offset + 4] = c;\n vData[offset + 5] = comp._texId;\n\n verticesCount += 2;\n }\n\n indicesCount = verticesCount <= 2 ? 0 : (verticesCount - 2) * 3;\n\n flexBuffer.used(verticesCount, indicesCount);\n }\n\n fillBuffers(comp, renderer) {\n let { vData, usedVertices, usedIndices, usedVerticesFloats } = this._renderData._flexBuffer;\n\n let buffer = this.getBuffer(renderer);\n let offsetInfo = buffer.request(usedVertices, usedIndices);\n\n // buffer data may be realloc, need get reference after request.\n\n // fill vertices\n let vertexOffset = offsetInfo.byteOffset >> 2,\n vbuf = buffer._vData;\n\n if (vData.length + vertexOffset > vbuf.length) {\n vbuf.set(vData.subarray(0, usedVerticesFloats), vertexOffset);\n }\n else {\n vbuf.set(vData, vertexOffset);\n }\n\n // fill indices\n let ibuf = buffer._iData,\n indiceOffset = offsetInfo.indiceOffset,\n vertexId = offsetInfo.vertexOffset;\n\n // index buffer\n for (let i = 0, l = usedVertices; i < l; i += 2) {\n let start = vertexId + i;\n ibuf[indiceOffset++] = start;\n ibuf[indiceOffset++] = start + 2;\n ibuf[indiceOffset++] = start + 1;\n ibuf[indiceOffset++] = start + 1;\n ibuf[indiceOffset++] = start + 2;\n ibuf[indiceOffset++] = start + 3;\n }\n\n comp.node._renderFlag |= RenderFlow.FLAG_UPDATE_RENDER_DATA;\n }\n\n}\n\nMotionStreakAssembler.register(MotionStreak, {\n getConstructor(comp) {\n const material = comp.getMaterials()[0];\n let isMultiMaterial = material && material.material.isMultiSupport();\n return isMultiMaterial ? MultiMotionStreakAssembler : MotionStreakAssembler;\n },\n\n MotionStreakAssembler,\n MultiMotionStreakAssembler\n});\n\nMultiMotionStreakAssembler.prototype.floatsPerVert = 6;\nMultiMotionStreakAssembler.prototype.texIdOffset = 5;\nMultiMotionStreakAssembler.prototype.isMulti = true;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport Assembler2D from '../../assembler-2d';\n\nconst RenderFlow = require('../../render-flow');\n\nfunction Point (point, dir) {\n this.point = point || cc.v2();\n this.dir = dir || cc.v2();\n this.distance = 0;\n this.time = 0;\n}\n\nPoint.prototype.setPoint = function (x, y) {\n this.point.x = x;\n this.point.y = y;\n};\n\nPoint.prototype.setDir = function (x, y) {\n this.dir.x = x;\n this.dir.y = y;\n};\n\nlet _tangent = cc.v2();\nlet _miter = cc.v2();\nlet _normal = cc.v2();\nlet _vec2 = cc.v2();\n\nfunction normal (out, dir) {\n //get perpendicular\n out.x = -dir.y;\n out.y = dir.x;\n return out\n}\n\nfunction computeMiter (miter, lineA, lineB, halfThick, maxMultiple) {\n //get tangent line\n lineA.add(lineB, _tangent);\n _tangent.normalizeSelf();\n\n //get miter as a unit vector\n miter.x = -_tangent.y;\n miter.y = _tangent.x;\n _vec2.x = -lineA.y; \n _vec2.y = lineA.x;\n\n //get the necessary length of our miter\n let multiple = 1 / miter.dot(_vec2);\n if (maxMultiple) {\n multiple = Math.min(multiple, maxMultiple);\n }\n return halfThick * multiple;\n}\n\nexport default class MotionStreakAssembler extends Assembler2D {\n initData () {\n this._renderData.createFlexData(0, 16, (16 - 2) * 3);\n }\n\n update (comp, dt) {\n if (CC_EDITOR && !comp.preview) return;\n\n let stroke = comp._stroke / 2;\n\n let node = comp.node;\n let matrix = node._worldMatrix.m;\n let tx = matrix[12], ty = matrix[13];\n\n let points = comp._points;\n\n let cur;\n if (points.length > 1) {\n let difx = points[0].point.x - tx;\n let dify = points[0].point.y - ty;\n if ((difx*difx + dify*dify) < comp.minSeg) {\n cur = points[0];\n }\n }\n\n if (!cur) {\n cur = new Point();\n points.splice(0, 0, cur);\n }\n\n cur.setPoint(tx, ty);\n cur.time = comp._fadeTime + dt;\n \n let verticesCount = 0;\n let indicesCount = 0;\n\n if (points.length < 2) {\n return;\n }\n\n let color = comp._color,\n cr = color.r, cg = color.g, cb = color.b, ca = color.a;\n\n let prev = points[1];\n prev.distance = cur.point.sub(prev.point, _vec2).mag();\n _vec2.normalizeSelf();\n prev.setDir(_vec2.x, _vec2.y);\n cur.setDir(_vec2.x, _vec2.y);\n\n let flexBuffer = this._renderData._flexBuffer;\n flexBuffer.reserve(points.length*2, (points.length-1)*6);\n let vData = flexBuffer.vData;\n let uintVData = flexBuffer.uintVData;\n let vertsOffset = 5;\n\n let fadeTime = comp._fadeTime;\n let findLast = false;\n for (let i = points.length - 1; i >=0 ; i--) {\n let p = points[i];\n let point = p.point;\n let dir = p.dir;\n p.time -= dt;\n \n if (p.time < 0) {\n points.splice(i, 1);\n continue;\n }\n\n let progress = p.time / fadeTime;\n\n let next = points[i - 1];\n if (!findLast) {\n if (!next) {\n points.splice(i, 1);\n continue;\n }\n \n point.x = next.point.x - dir.x * progress;\n point.y = next.point.y - dir.y * progress;\n }\n findLast = true;\n\n normal(_normal, dir);\n\n \n let da = progress*ca;\n let c = ((da<<24) >>> 0) + (cb<<16) + (cg<<8) + cr;\n\n let offset = verticesCount * vertsOffset;\n\n vData[offset] = point.x + _normal.x * stroke;\n vData[offset + 1] = point.y + _normal.y * stroke;\n vData[offset + 2] = 1;\n vData[offset + 3] = progress;\n uintVData[offset + 4] = c;\n \n offset += vertsOffset;\n\n vData[offset] = point.x - _normal.x * stroke;\n vData[offset + 1] = point.y - _normal.y * stroke;\n vData[offset + 2] = 0;\n vData[offset + 3] = progress;\n uintVData[offset + 4] = c;\n \n verticesCount += 2;\n }\n\n indicesCount = verticesCount <= 2 ? 0 : (verticesCount - 2)*3;\n\n flexBuffer.used(verticesCount, indicesCount);\n }\n\n fillBuffers (comp, renderer) {\n let { vData, usedVertices, usedIndices, usedVerticesFloats } = this._renderData._flexBuffer;\n\n let buffer = renderer._meshBuffer;\n let offsetInfo = buffer.request(usedVertices, usedIndices);\n\n // buffer data may be realloc, need get reference after request.\n\n // fill vertices\n let vertexOffset = offsetInfo.byteOffset >> 2,\n vbuf = buffer._vData;\n\n if (vData.length + vertexOffset > vbuf.length) {\n vbuf.set(vData.subarray(0, usedVerticesFloats), vertexOffset);\n }\n else {\n vbuf.set(vData, vertexOffset);\n }\n\n // fill indices\n let ibuf = buffer._iData,\n indiceOffset = offsetInfo.indiceOffset,\n vertexId = offsetInfo.vertexOffset;\n\n // index buffer\n for (let i = 0, l = usedVertices; i < l; i += 2) {\n let start = vertexId + i;\n ibuf[indiceOffset++] = start;\n ibuf[indiceOffset++] = start + 2;\n ibuf[indiceOffset++] = start + 1;\n ibuf[indiceOffset++] = start + 1;\n ibuf[indiceOffset++] = start + 2;\n ibuf[indiceOffset++] = start + 3;\n }\n\n comp.node._renderFlag |= RenderFlow.FLAG_UPDATE_RENDER_DATA;\n }\n}\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport { vfmtPosUvColorTexId } from '../../../../webgl/vertex-format';\nimport BarFilledAssembler from '../2d/bar-filled';\n\nexport default class BarFilledAssemblerMulti extends BarFilledAssembler {\n initData() {\n let data = this._renderData;\n data.createFlexData(0, this.verticesCount, this.indicesCount, this.getVfmt());\n const indices = data.iDatas[0];\n data.initQuadIndices(indices);\n }\n\n getVfmt() {\n return vfmtPosUvColorTexId;\n }\n\n getBuffer() {\n return cc.renderer._handle.getBuffer(\"mesh\", this.getVfmt());\n }\n\n updateRenderData (sprite) {\n super.updateRenderData(sprite);\n\n if (sprite._texIdDirty) {\n sprite._updateMultiTexId(sprite.getMaterial(0), sprite._spriteFrame._texture);\n if (sprite._texIdDirty) {\n this.updateTexId(sprite);\n sprite._texIdDirty = false;\n }\n }\n }\n\n updateRenderDataForSwitchMaterial(sprite) {\n if (sprite._vertsDirty) {\n let fillStart = sprite._fillStart;\n let fillRange = sprite._fillRange;\n\n if (fillRange < 0) {\n fillStart += fillRange;\n fillRange = -fillRange;\n }\n\n fillRange = fillStart + fillRange;\n\n fillStart = fillStart > 1.0 ? 1.0 : fillStart;\n fillStart = fillStart < 0.0 ? 0.0 : fillStart;\n\n fillRange = fillRange > 1.0 ? 1.0 : fillRange;\n fillRange = fillRange < 0.0 ? 0.0 : fillRange;\n fillRange = fillRange - fillStart;\n fillRange = fillRange < 0 ? 0 : fillRange;\n\n let fillEnd = fillStart + fillRange;\n fillEnd = fillEnd > 1 ? 1 : fillEnd;\n\n this.updateUVs(sprite, fillStart, fillEnd);\n this.updateVerts(sprite, fillStart, fillEnd);\n\n sprite._vertsDirty = false;\n }\n\n if (sprite._texIdDirty) {\n sprite._updateMultiTexId(sprite.getMaterial(0), sprite._spriteFrame._texture);\n if (sprite._texIdDirty) {\n this.updateTexId(sprite);\n sprite._texIdDirty = false;\n }\n }\n }\n\n}\n\nBarFilledAssemblerMulti.prototype.floatsPerVert = 6;\nBarFilledAssemblerMulti.prototype.texIdOffset = 5;\nBarFilledAssemblerMulti.prototype.isMulti = true;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport { vfmtPosUvColorTexId } from '../../../../webgl/vertex-format';\nimport MeshSpriteAssembler from '../2d/mesh';\n\nexport default class MultiMeshSpriteAssembler extends MeshSpriteAssembler {\n getVfmt() {\n return vfmtPosUvColorTexId;\n }\n\n getBuffer() {\n return cc.renderer._handle.getBuffer(\"mesh\", this.getVfmt());\n }\n\n updateRenderData(sprite) {\n let frame = sprite.spriteFrame;\n\n super.updateRenderData(sprite);\n\n if (frame) {\n if (sprite._texIdDirty) {\n sprite._updateMultiTexId(sprite.getMaterial(0), frame._texture);\n }\n\n // 不进行 Dirty 判断,Mesh 可能会变化,但是纹理不会变\n this.updateTexId(sprite);\n sprite._texIdDirty = false;\n }\n }\n\n updateRenderDataForSwitchMaterial(sprite) {\n let frame = sprite.spriteFrame;\n\n if (frame) {\n let vertices = frame.vertices;\n if (vertices) {\n this.verticesCount = vertices.x.length;\n this.indicesCount = vertices.triangles.length;\n\n let renderData = this._renderData;\n let flexBuffer = renderData._flexBuffer;\n if (flexBuffer.reserve(this.verticesCount, this.indicesCount)) {\n this.updateColor(sprite);\n sprite._vertsDirty = true;\n }\n flexBuffer.used(this.verticesCount, this.indicesCount);\n\n this.updateIndices(vertices.triangles);\n\n if (sprite._vertsDirty) {\n this.updateUVs(sprite);\n this.updateVerts(sprite);\n this.updateWorldVerts(sprite);\n sprite._vertsDirty = false;\n }\n }\n }\n\n if (sprite._texIdDirty) {\n sprite._updateMultiTexId(sprite.getMaterial(0), frame._texture);\n }\n\n // 不进行 Dirty 判断,Mesh 可能会变化,但是纹理不会变\n this.updateTexId(sprite);\n sprite._texIdDirty = false;\n }\n}\n\nMultiMeshSpriteAssembler.prototype.floatsPerVert = 6;\nMultiMeshSpriteAssembler.prototype.texIdOffset = 5;\nMultiMeshSpriteAssembler.prototype.isMulti = true;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport { vfmtPosUvColorTexId } from '../../../../webgl/vertex-format';\nimport RadialFilledAssembler from '../2d/radial-filled';\n\nexport default class MultiRadialFilledAssembler extends RadialFilledAssembler {\n initData (sprite) {\n this._renderData.createFlexData(0, 4, 6, this.getVfmt());\n this.updateIndices();\n }\n\n getVfmt() {\n return vfmtPosUvColorTexId;\n }\n\n getBuffer() {\n return cc.renderer._handle.getBuffer(\"mesh\", this.getVfmt());\n }\n\n updateRenderData (sprite) {\n super.updateRenderData(sprite);\n\n if (sprite._texIdDirty) {\n sprite._updateMultiTexId(sprite.getMaterial(0), sprite.spriteFrame._texture);\n }\n\n // 不进行 Dirty 判断,Mesh 可能会变化,但是纹理不会变\n this.updateTexId(sprite);\n sprite._texIdDirty = false;\n }\n\n updateRenderDataForSwitchMaterial(sprite) {\n this._updateRenderData(sprite);\n\n if (sprite._texIdDirty) {\n sprite._updateMultiTexId(sprite.getMaterial(0), sprite.spriteFrame._texture);\n }\n\n // 不进行 Dirty 判断,Mesh 可能会变化,但是纹理不会变\n this.updateTexId(sprite);\n sprite._texIdDirty = false;\n }\n}\n\nMultiRadialFilledAssembler.prototype.floatsPerVert = 6;\nMultiRadialFilledAssembler.prototype.texIdOffset = 5;\nMultiRadialFilledAssembler.prototype.isMulti = true;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport { vfmtPosUvColorTexId } from '../../../../webgl/vertex-format';\nimport SimpleSpriteAssembler from '../2d/simple';\n\nexport default class MultiSimpleSpriteAssembler extends SimpleSpriteAssembler {\n initData() {\n let data = this._renderData;\n data.createFlexData(0, this.verticesCount, this.indicesCount, this.getVfmt());\n const indices = data.iDatas[0];\n data.initQuadIndices(indices);\n }\n\n getVfmt() {\n return vfmtPosUvColorTexId;\n }\n\n getBuffer() {\n return cc.renderer._handle.getBuffer(\"mesh\", this.getVfmt());\n }\n\n updateRenderData (sprite) {\n super.updateRenderData(sprite);\n\n if (sprite._texIdDirty) {\n sprite._updateMultiTexId(sprite.getMaterial(0), sprite._spriteFrame._texture);\n if (sprite._texIdDirty) {\n this.updateTexId(sprite);\n sprite._texIdDirty = false;\n }\n }\n }\n\n updateRenderDataForSwitchMaterial(sprite) {\n if (sprite._vertsDirty) {\n this.updateUVs(sprite);\n this.updateVerts(sprite);\n sprite._vertsDirty = false;\n }\n\n if (sprite._texIdDirty) {\n sprite._updateMultiTexId(sprite.getMaterial(0), sprite._spriteFrame._texture);\n if (sprite._texIdDirty) {\n this.updateTexId(sprite);\n sprite._texIdDirty = false;\n }\n }\n }\n}\n\nMultiSimpleSpriteAssembler.prototype.floatsPerVert = 6;\nMultiSimpleSpriteAssembler.prototype.texIdOffset = 5;\nMultiSimpleSpriteAssembler.prototype.isMulti = true;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos.com\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport { vfmtPosUvColorTexId } from '../../../../webgl/vertex-format';\nimport SlicedAssembler from '../2d/sliced';\n\nexport default class MultiSlicedAssembler extends SlicedAssembler {\n initData (sprite) {\n if (this._renderData.meshCount > 0) return;\n this._renderData.createFlexData(0, this.verticesCount, this.indicesCount, this.getVfmt());\n\n let indices = this._renderData.iDatas[0];\n let indexOffset = 0;\n for (let r = 0; r < 3; ++r) {\n for (let c = 0; c < 3; ++c) {\n let start = r * 4 + c;\n indices[indexOffset++] = start;\n indices[indexOffset++] = start + 1;\n indices[indexOffset++] = start + 4;\n indices[indexOffset++] = start + 1;\n indices[indexOffset++] = start + 5;\n indices[indexOffset++] = start + 4;\n }\n }\n }\n\n getVfmt() {\n return vfmtPosUvColorTexId;\n }\n\n getBuffer() {\n return cc.renderer._handle.getBuffer(\"mesh\", this.getVfmt());\n }\n\n updateRenderData (sprite) {\n super.updateRenderData(sprite);\n\n if (sprite._texIdDirty) {\n sprite._updateMultiTexId(sprite.getMaterial(0), sprite._spriteFrame._texture);\n if (sprite._texIdDirty) {\n this.updateTexId(sprite);\n sprite._texIdDirty = false;\n }\n }\n }\n\n updateRenderDataForSwitchMaterial(sprite) {\n if (sprite._vertsDirty) {\n this.updateUVs(sprite);\n this.updateVerts(sprite);\n sprite._vertsDirty = false;\n }\n\n if (sprite._texIdDirty) {\n sprite._updateMultiTexId(sprite.getMaterial(0), sprite._spriteFrame._texture);\n if (sprite._texIdDirty) {\n this.updateTexId(sprite);\n sprite._texIdDirty = false;\n }\n }\n }\n\n}\n\nMultiSlicedAssembler.prototype.floatsPerVert = 6;\nMultiSlicedAssembler.prototype.texIdOffset = 5;\nMultiSlicedAssembler.prototype.isMulti = true;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport { vfmtPosUvColorTexId } from '../../../../webgl/vertex-format';\nimport TiledAssembler from '../2d/tiled';\n\nexport default class MultiTiledAssembler extends TiledAssembler {\n getVfmt() {\n return vfmtPosUvColorTexId;\n }\n\n getBuffer() {\n return cc.renderer._handle.getBuffer(\"mesh\", this.getVfmt());\n }\n\n updateRenderData(sprite) {\n super.updateRenderData(sprite);\n\n if (sprite._texIdDirty) {\n sprite._updateMultiTexId(sprite.getMaterial(0), sprite.spriteFrame._texture);\n }\n\n // 不进行 Dirty 判断,Mesh 可能会变化,但是纹理不会变\n this.updateTexId(sprite);\n sprite._texIdDirty = false;\n }\n\n updateRenderDataForSwitchMaterial(sprite) {\n let frame = sprite._spriteFrame;\n let node = sprite.node;\n\n let contentWidth = this.contentWidth = Math.abs(node.width);\n let contentHeight = this.contentHeight = Math.abs(node.height);\n let rect = frame._rect;\n let leftWidth = frame.insetLeft, rightWidth = frame.insetRight, centerWidth = rect.width - leftWidth - rightWidth,\n topHeight = frame.insetTop, bottomHeight = frame.insetBottom, centerHeight = rect.height - topHeight - bottomHeight;\n this.sizableWidth = contentWidth - leftWidth - rightWidth;\n this.sizableHeight = contentHeight - topHeight - bottomHeight;\n this.sizableWidth = this.sizableWidth > 0 ? this.sizableWidth : 0;\n this.sizableHeight = this.sizableHeight > 0 ? this.sizableHeight : 0;\n let hRepeat = this.hRepeat = centerWidth === 0 ? this.sizableWidth : this.sizableWidth / centerWidth;\n let vRepeat = this.vRepeat = centerHeight === 0 ? this.sizableHeight : this.sizableHeight / centerHeight;\n let row = this.row = Math.ceil(vRepeat + 2);\n let col = this.col = Math.ceil(hRepeat + 2);\n\n // update data property\n let count = row * col;\n this.verticesCount = count * 4;\n this.indicesCount = count * 6;\n\n let renderData = this._renderData;\n let flexBuffer = renderData._flexBuffer;\n if (flexBuffer.reserve(this.verticesCount, this.indicesCount)) {\n this._updateIndices();\n this.updateColor(sprite);\n }\n flexBuffer.used(this.verticesCount, this.indicesCount);\n\n if (sprite._vertsDirty) {\n this.updateUVs(sprite);\n this.updateVerts(sprite);\n sprite._vertsDirty = false;\n }\n\n if (sprite._texIdDirty) {\n sprite._updateMultiTexId(sprite.getMaterial(0), sprite.spriteFrame._texture);\n }\n\n // 不进行 Dirty 判断,Mesh 可能会变化,但是纹理不会变\n this.updateTexId(sprite);\n sprite._texIdDirty = false;\n }\n}\n\nMultiTiledAssembler.prototype.floatsPerVert = 6;\nMultiTiledAssembler.prototype.texIdOffset = 5;\nMultiTiledAssembler.prototype.isMulti = true;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport Assembler2D from '../../../../assembler-2d';\n\nconst Sprite = require('../../../../../components/CCSprite');\nconst FillType = Sprite.FillType;\n\nexport default class BarFilledAssembler extends Assembler2D {\n updateRenderData (sprite) {\n let frame = sprite._spriteFrame;\n const assemblerChanged = this.packDynamicAtlasAndCheckMaterial(sprite, frame);\n\n // 打包到动态图集时可能会切换 Assembler\n if (!assemblerChanged) {\n if (sprite._vertsDirty) {\n let fillStart = sprite._fillStart;\n let fillRange = sprite._fillRange;\n\n if (fillRange < 0) {\n fillStart += fillRange;\n fillRange = -fillRange;\n }\n\n fillRange = fillStart + fillRange;\n\n fillStart = fillStart > 1.0 ? 1.0 : fillStart;\n fillStart = fillStart < 0.0 ? 0.0 : fillStart;\n\n fillRange = fillRange > 1.0 ? 1.0 : fillRange;\n fillRange = fillRange < 0.0 ? 0.0 : fillRange;\n fillRange = fillRange - fillStart;\n fillRange = fillRange < 0 ? 0 : fillRange;\n\n let fillEnd = fillStart + fillRange;\n fillEnd = fillEnd > 1 ? 1 : fillEnd;\n\n this.updateUVs(sprite, fillStart, fillEnd);\n this.updateVerts(sprite, fillStart, fillEnd);\n\n sprite._vertsDirty = false;\n }\n }\n }\n\n updateUVs (sprite, fillStart, fillEnd) {\n let spriteFrame = sprite._spriteFrame;\n\n //build uvs\n let atlasWidth = spriteFrame._texture.width;\n let atlasHeight = spriteFrame._texture.height;\n let textureRect = spriteFrame._rect;\n //uv computation should take spritesheet into account.\n let ul, vb, ur, vt;\n let quadUV0, quadUV1, quadUV2, quadUV3, quadUV4, quadUV5, quadUV6, quadUV7;\n if (spriteFrame._rotated) {\n ul = (textureRect.x) / atlasWidth;\n vb = (textureRect.y + textureRect.width) / atlasHeight;\n ur = (textureRect.x + textureRect.height) / atlasWidth;\n vt = (textureRect.y) / atlasHeight;\n\n quadUV0 = quadUV2 = ul;\n quadUV4 = quadUV6 = ur;\n quadUV3 = quadUV7 = vb;\n quadUV1 = quadUV5 = vt;\n }\n else {\n ul = (textureRect.x) / atlasWidth;\n vb = (textureRect.y + textureRect.height) / atlasHeight;\n ur = (textureRect.x + textureRect.width) / atlasWidth;\n vt = (textureRect.y) / atlasHeight;\n\n quadUV0 = quadUV4 = ul;\n quadUV2 = quadUV6 = ur;\n quadUV1 = quadUV3 = vb;\n quadUV5 = quadUV7 = vt;\n }\n\n let verts = this._renderData.vDatas[0];\n let uvOffset = this.uvOffset;\n let floatsPerVert = this.floatsPerVert;\n switch (sprite._fillType) {\n case FillType.HORIZONTAL:\n verts[uvOffset] = quadUV0 + (quadUV2 - quadUV0) * fillStart;\n verts[uvOffset + 1] = quadUV1 + (quadUV3 - quadUV1) * fillStart;\n verts[uvOffset + floatsPerVert] = quadUV0 + (quadUV2 - quadUV0) * fillEnd;\n verts[uvOffset + floatsPerVert + 1] = quadUV1 + (quadUV3 - quadUV1) * fillEnd;\n verts[uvOffset + floatsPerVert * 2] = quadUV4 + (quadUV6 - quadUV4) * fillStart;\n verts[uvOffset + floatsPerVert * 2 + 1] = quadUV5 + (quadUV7 - quadUV5) * fillStart;\n verts[uvOffset + floatsPerVert * 3] = quadUV4 + (quadUV6 - quadUV4) * fillEnd;\n verts[uvOffset + floatsPerVert * 3 + 1] = quadUV5 + (quadUV7 - quadUV5) * fillEnd;\n break;\n case FillType.VERTICAL:\n verts[uvOffset] = quadUV0 + (quadUV4 - quadUV0) * fillStart;\n verts[uvOffset + 1] = quadUV1 + (quadUV5 - quadUV1) * fillStart;\n verts[uvOffset + floatsPerVert] = quadUV2 + (quadUV6 - quadUV2) * fillStart;\n verts[uvOffset + floatsPerVert + 1] = quadUV3 + (quadUV7 - quadUV3) * fillStart;\n verts[uvOffset + floatsPerVert * 2] = quadUV0 + (quadUV4 - quadUV0) * fillEnd;\n verts[uvOffset + floatsPerVert * 2 + 1] = quadUV1 + (quadUV5 - quadUV1) * fillEnd;\n verts[uvOffset + floatsPerVert * 3] = quadUV2 + (quadUV6 - quadUV2) * fillEnd;\n verts[uvOffset + floatsPerVert * 3 + 1] = quadUV3 + (quadUV7 - quadUV3) * fillEnd;\n break;\n default:\n cc.errorID(2626);\n break;\n }\n }\n\n updateVerts (sprite, fillStart, fillEnd) {\n let node = sprite.node,\n width = node.width, height = node.height,\n appx = node.anchorX * width, appy = node.anchorY * height;\n\n let l = -appx, b = -appy,\n r = width - appx, t = height - appy;\n\n let progressStart, progressEnd;\n switch (sprite._fillType) {\n case FillType.HORIZONTAL:\n progressStart = l + (r - l) * fillStart;\n progressEnd = l + (r - l) * fillEnd;\n\n l = progressStart;\n r = progressEnd;\n break;\n case FillType.VERTICAL:\n progressStart = b + (t - b) * fillStart;\n progressEnd = b + (t - b) * fillEnd;\n\n b = progressStart;\n t = progressEnd;\n break;\n default:\n cc.errorID(2626);\n break;\n }\n\n let local = this._local;\n local[0] = l;\n local[1] = b;\n local[2] = r;\n local[3] = t;\n\n this.updateWorldVerts(sprite);\n }\n}\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport Assembler2D from '../../../../assembler-2d';\n\nexport default class MeshSpriteAssembler extends Assembler2D {\n initData (sprite) {\n this._renderData.createFlexData(0, 4, 6, this.getVfmt());\n }\n \n updateRenderData (sprite) {\n let frame = sprite.spriteFrame;\n\n const assemblerChanged = this.packDynamicAtlasAndCheckMaterial(sprite, frame);\n \n // 打包到动态图集时可能会切换 Assembler\n if (!assemblerChanged) {\n if (frame) {\n let vertices = frame.vertices;\n if (vertices) {\n this.verticesCount = vertices.x.length;\n this.indicesCount = vertices.triangles.length;\n\n let renderData = this._renderData;\n let flexBuffer = renderData._flexBuffer;\n if (flexBuffer.reserve(this.verticesCount, this.indicesCount)) {\n this.updateColor(sprite);\n sprite._vertsDirty = true;\n }\n flexBuffer.used(this.verticesCount, this.indicesCount);\n\n this.updateIndices(vertices.triangles);\n\n if (sprite._vertsDirty) {\n this.updateUVs(sprite);\n this.updateVerts(sprite);\n this.updateWorldVerts(sprite);\n sprite._vertsDirty = false;\n }\n }\n }\n }\n }\n\n updateIndices (triangles) {\n this._renderData.iDatas[0].set(triangles);\n }\n\n updateUVs (sprite) {\n let vertices = sprite.spriteFrame.vertices,\n u = vertices.nu,\n v = vertices.nv;\n\n let uvOffset = this.uvOffset;\n let floatsPerVert = this.floatsPerVert;\n let verts = this._renderData.vDatas[0];\n for (let i = 0; i < u.length; i++) {\n let dstOffset = floatsPerVert * i + uvOffset;\n verts[dstOffset] = u[i];\n verts[dstOffset + 1] = v[i];\n }\n }\n\n updateVerts (sprite) {\n let node = sprite.node,\n contentWidth = Math.abs(node.width),\n contentHeight = Math.abs(node.height),\n appx = node.anchorX * contentWidth,\n appy = node.anchorY * contentHeight;\n\n let frame = sprite.spriteFrame,\n vertices = frame.vertices,\n x = vertices.x,\n y = vertices.y,\n originalWidth = frame._originalSize.width,\n originalHeight = frame._originalSize.height,\n rectWidth = frame._rect.width,\n rectHeight = frame._rect.height,\n offsetX = frame._offset.x,\n offsetY = frame._offset.y,\n trimX = offsetX + (originalWidth - rectWidth) / 2,\n trimY = offsetY + (originalHeight - rectHeight) / 2;\n\n let scaleX = contentWidth / (sprite.trim ? rectWidth : originalWidth),\n scaleY = contentHeight / (sprite.trim ? rectHeight : originalHeight);\n\n let local = this._local;\n if (!sprite.trim) {\n for (let i = 0, l = x.length; i < l; i++) {\n let offset = i * 2;\n local[offset] = (x[i]) * scaleX - appx;\n local[offset + 1] = (originalHeight - y[i]) * scaleY - appy;\n }\n }\n else {\n for (let i = 0, l = x.length; i < l; i++) {\n let offset = i * 2;\n local[offset] = (x[i] - trimX) * scaleX - appx;\n local[offset + 1] = (originalHeight - y[i] - trimY) * scaleY - appy;\n }\n }\n if (frame._flipX) {\n for (let i = 0, l = this.verticesCount; i < l; i++) {\n local[i * 2] = contentWidth - local[i * 2] - 2 * appx;\n }\n }\n if (frame._flipY) {\n for (let i = 0, l = this.verticesCount; i < l; i++) {\n local[i * 2 + 1] = contentHeight - local[i * 2 + 1] - 2 * appy;\n }\n }\n }\n\n updateWorldVerts (sprite) {\n let node = sprite.node;\n let matrix = node._worldMatrix;\n let matrixm = matrix.m;\n let a = matrixm[0], b = matrixm[1], c = matrixm[4], d = matrixm[5],\n tx = matrixm[12], ty = matrixm[13];\n let local = this._local;\n let world = this._renderData.vDatas[0];\n let floatsPerVert = this.floatsPerVert;\n for (let i = 0, l = this.verticesCount; i < l; i++) {\n let lx = local[i*2];\n let ly = local[i*2 + 1];\n world[floatsPerVert * i] = lx * a + ly * c + tx;\n world[floatsPerVert * i + 1] = lx * b + ly * d + ty;\n }\n }\n}\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport Assembler2D from '../../../../assembler-2d';\n\nconst PI_2 = Math.PI * 2;\n\nlet _vertPos = [cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0)];\nlet _vertices = [0, 0, 0, 0];\nlet _uvs = [0, 0, 0, 0, 0, 0, 0, 0];\nlet _intersectPoint_1 = [cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0)];\nlet _intersectPoint_2 = [cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0)];\nlet _center = cc.v2(0, 0);\nlet _triangles = [];\n\nfunction _calcInsectedPoints (left, right, bottom, top, center, angle, intersectPoints) {\n //left bottom, right, top\n let sinAngle = Math.sin(angle);\n let cosAngle = Math.cos(angle);\n let tanAngle, cotAngle;\n if (Math.cos(angle) !== 0) {\n tanAngle = sinAngle / cosAngle;\n //calculate right and left\n if ((left - center.x) * cosAngle > 0) {\n let yleft = center.y + tanAngle * (left - center.x);\n intersectPoints[0].x = left;\n intersectPoints[0].y = yleft;\n }\n if ((right - center.x) * cosAngle > 0) {\n let yright = center.y + tanAngle * (right - center.x);\n\n intersectPoints[2].x = right;\n intersectPoints[2].y = yright;\n }\n\n }\n\n if (Math.sin(angle) !== 0) {\n cotAngle = cosAngle / sinAngle;\n //calculate top and bottom\n if ((top - center.y) * sinAngle > 0) {\n let xtop = center.x + cotAngle * (top - center.y);\n intersectPoints[3].x = xtop;\n intersectPoints[3].y = top;\n }\n if ((bottom - center.y) * sinAngle > 0) {\n let xbottom = center.x + cotAngle * (bottom - center.y);\n intersectPoints[1].x = xbottom;\n intersectPoints[1].y = bottom;\n }\n\n }\n}\n\nfunction _calculateVertices (sprite) {\n let node = sprite.node,\n width = node.width, height = node.height,\n appx = node.anchorX * width, appy = node.anchorY * height;\n\n let l = -appx, b = -appy,\n r = width - appx, t = height - appy;\n\n let vertices = _vertices;\n vertices[0] = l;\n vertices[1] = b;\n vertices[2] = r;\n vertices[3] = t;\n\n let fillCenter = sprite._fillCenter,\n cx = _center.x = Math.min(Math.max(0, fillCenter.x), 1) * (r - l) + l,\n cy = _center.y = Math.min(Math.max(0, fillCenter.y), 1) * (t - b) + b;\n\n _vertPos[0].x = _vertPos[3].x = l;\n _vertPos[1].x = _vertPos[2].x = r;\n _vertPos[0].y = _vertPos[1].y = b;\n _vertPos[2].y = _vertPos[3].y = t;\n\n _triangles.length = 0;\n if (cx !== vertices[0]) {\n _triangles[0] = [3, 0];\n }\n if (cx !== vertices[2]) {\n _triangles[2] = [1, 2];\n }\n if (cy !== vertices[1]) {\n _triangles[1] = [0, 1];\n }\n if (cy !== vertices[3]) {\n _triangles[3] = [2, 3];\n }\n}\n\nfunction _calculateUVs (spriteFrame) {\n let atlasWidth = spriteFrame._texture.width;\n let atlasHeight = spriteFrame._texture.height;\n let textureRect = spriteFrame._rect;\n\n let u0, u1, v0, v1;\n let uvs = _uvs;\n\n if (spriteFrame._rotated) {\n u0 = (textureRect.x) / atlasWidth;\n u1 = (textureRect.x + textureRect.height) / atlasWidth;\n\n v0 = (textureRect.y) / atlasHeight;\n v1 = (textureRect.y + textureRect.width) / atlasHeight;\n\n uvs[0] = uvs[2] = u0;\n uvs[4] = uvs[6] = u1;\n uvs[3] = uvs[7] = v1;\n uvs[1] = uvs[5] = v0;\n }\n else {\n u0 = (textureRect.x) / atlasWidth;\n u1 = (textureRect.x + textureRect.width) / atlasWidth;\n\n v0 = (textureRect.y) / atlasHeight;\n v1 = (textureRect.y + textureRect.height) / atlasHeight;\n\n uvs[0] = uvs[4] = u0;\n uvs[2] = uvs[6] = u1;\n uvs[1] = uvs[3] = v1;\n uvs[5] = uvs[7] = v0;\n }\n}\n\nfunction _getVertAngle (start, end) {\n let placementX, placementY;\n placementX = end.x - start.x;\n placementY = end.y - start.y;\n\n if (placementX === 0 && placementY === 0) {\n return undefined;\n } else if (placementX === 0) {\n if (placementY > 0) {\n return Math.PI * 0.5;\n } else {\n return Math.PI * 1.5;\n }\n } else {\n let angle = Math.atan(placementY / placementX);\n if (placementX < 0) {\n angle += Math.PI;\n }\n\n return angle;\n }\n}\n\nexport default class RadialFilledAssembler extends Assembler2D {\n initData (sprite) {\n this._renderData.createFlexData(0, 4, 6, this.getVfmt());\n this.updateIndices();\n }\n\n updateRenderData (sprite) {\n super.updateRenderData(sprite);\n\n let frame = sprite.spriteFrame;\n const assemblerChanged = this.packDynamicAtlasAndCheckMaterial(sprite, frame);\n\n // 打包到动态图集时可能会切换 Assembler\n if (!assemblerChanged) {\n this._updateRenderData(sprite);\n }\n }\n\n _updateRenderData(sprite) {\n let frame = sprite.spriteFrame;\n\n if (sprite._vertsDirty) {\n let fillStart = sprite._fillStart;\n let fillRange = sprite._fillRange;\n if (fillRange < 0) {\n fillStart += fillRange;\n fillRange = -fillRange;\n }\n\n //do round fill start [0,1), include 0, exclude 1\n while (fillStart >= 1.0) fillStart -= 1.0;\n while (fillStart < 0.0) fillStart += 1.0;\n\n fillStart *= PI_2;\n fillRange *= PI_2;\n\n //build vertices\n _calculateVertices(sprite);\n //build uvs\n _calculateUVs(frame);\n\n _calcInsectedPoints(_vertices[0], _vertices[2], _vertices[1], _vertices[3], _center, fillStart, _intersectPoint_1);\n _calcInsectedPoints(_vertices[0], _vertices[2], _vertices[1], _vertices[3], _center, fillStart + fillRange, _intersectPoint_2);\n\n this.updateVerts(sprite, fillStart, fillRange);\n\n sprite._vertsDirty = false;\n }\n }\n\n updateVerts (sprite, fillStart, fillRange) {\n let fillEnd = fillStart + fillRange;\n \n let local = this._local;\n local.length = 0;\n\n let offset = 0;\n let floatsPerTriangle = 3 * this.floatsPerVert;\n for (let triangleIndex = 0; triangleIndex < 4; ++triangleIndex) {\n let triangle = _triangles[triangleIndex];\n if (!triangle) {\n continue;\n }\n //all in\n if (fillRange >= PI_2) {\n local.length = offset + floatsPerTriangle;\n this._generateTriangle(local, offset, _center, _vertPos[triangle[0]], _vertPos[triangle[1]]);\n offset += floatsPerTriangle;\n continue;\n }\n //test against\n let startAngle = _getVertAngle(_center, _vertPos[triangle[0]]);\n let endAngle = _getVertAngle(_center, _vertPos[triangle[1]]);\n if (endAngle < startAngle) endAngle += PI_2;\n startAngle -= PI_2;\n endAngle -= PI_2;\n //testing\n for (let testIndex = 0; testIndex < 3; ++testIndex) {\n if (startAngle >= fillEnd) {\n //all out\n } else if (startAngle >= fillStart) {\n local.length = offset + floatsPerTriangle;\n if (endAngle >= fillEnd) {\n //startAngle to fillEnd\n this._generateTriangle(local, offset, _center, _vertPos[triangle[0]], _intersectPoint_2[triangleIndex]);\n } else {\n //startAngle to endAngle\n this._generateTriangle(local, offset, _center, _vertPos[triangle[0]], _vertPos[triangle[1]]);\n }\n offset += floatsPerTriangle;\n } else {\n //startAngle < fillStart\n if (endAngle <= fillStart) {\n //all out\n } else if (endAngle <= fillEnd) {\n local.length = offset + floatsPerTriangle;\n //fillStart to endAngle\n this._generateTriangle(local, offset, _center, _intersectPoint_1[triangleIndex], _vertPos[triangle[1]]);\n offset += floatsPerTriangle;\n } else {\n local.length = offset + floatsPerTriangle;\n //fillStart to fillEnd\n this._generateTriangle(local, offset, _center, _intersectPoint_1[triangleIndex], _intersectPoint_2[triangleIndex]);\n offset += floatsPerTriangle;\n }\n }\n //add 2 * PI\n startAngle += PI_2;\n endAngle += PI_2;\n }\n }\n\n this.allocWorldVerts(sprite);\n this.updateWorldVerts(sprite);\n }\n\n allocWorldVerts(sprite) {\n let color = sprite.node._color._val;\n let renderData = this._renderData;\n let floatsPerVert = this.floatsPerVert;\n\n let local = this._local;\n let verticesCount = local.length / floatsPerVert;\n this.verticesCount = this.indicesCount = verticesCount;\n\n let flexBuffer = renderData._flexBuffer;\n if (flexBuffer.reserve(verticesCount, verticesCount)) {\n this.updateIndices();\n }\n flexBuffer.used(this.verticesCount, this.indicesCount);\n\n let verts = renderData.vDatas[0],\n uintVerts = renderData.uintVDatas[0];\n \n let uvOffset = this.uvOffset;\n for (let offset = 0; offset < local.length; offset += floatsPerVert) {\n let start = offset + uvOffset;\n verts[start] = local[start];\n verts[start + 1] = local[start + 1];\n uintVerts[start + 2] = color;\n }\n }\n\n updateIndices () {\n let iData = this._renderData.iDatas[0];\n for (let i = 0; i < iData.length; i ++) {\n iData[i] = i;\n }\n }\n\n updateWorldVerts (sprite) {\n let node = sprite.node;\n\n let matrix = node._worldMatrix;\n let matrixm = matrix.m,\n a = matrixm[0], b = matrixm[1], c = matrixm[4], d = matrixm[5],\n tx = matrixm[12], ty = matrixm[13];\n\n let local = this._local;\n let world = this._renderData.vDatas[0];\n let floatsPerVert = this.floatsPerVert;\n for (let offset = 0; offset < local.length; offset += floatsPerVert) {\n let x = local[offset];\n let y = local[offset + 1];\n world[offset] = x * a + y * c + tx;\n world[offset+1] = x * b + y * d + ty;\n }\n }\n\n _generateTriangle (verts, offset, vert0, vert1, vert2) {\n let vertices = _vertices;\n let v0x = vertices[0];\n let v0y = vertices[1];\n let v1x = vertices[2];\n let v1y = vertices[3];\n\n let floatsPerVert = this.floatsPerVert;\n verts[offset] = vert0.x;\n verts[offset + 1] = vert0.y;\n verts[offset + floatsPerVert] = vert1.x;\n verts[offset + floatsPerVert + 1] = vert1.y;\n verts[offset + floatsPerVert*2] = vert2.x;\n verts[offset + floatsPerVert*2 + 1] = vert2.y;\n\n let uvOffset = this.uvOffset;\n let progressX, progressY;\n progressX = (vert0.x - v0x) / (v1x - v0x);\n progressY = (vert0.y - v0y) / (v1y - v0y);\n this._generateUV(progressX, progressY, verts, offset + uvOffset);\n\n progressX = (vert1.x - v0x) / (v1x - v0x);\n progressY = (vert1.y - v0y) / (v1y - v0y);\n this._generateUV(progressX, progressY, verts, offset + floatsPerVert + uvOffset);\n\n progressX = (vert2.x - v0x) / (v1x - v0x);\n progressY = (vert2.y - v0y) / (v1y - v0y);\n this._generateUV(progressX, progressY, verts, offset + floatsPerVert*2 + uvOffset);\n }\n\n _generateUV (progressX, progressY, verts, offset) {\n let uvs = _uvs;\n let px1 = uvs[0] + (uvs[2] - uvs[0]) * progressX;\n let px2 = uvs[4] + (uvs[6] - uvs[4]) * progressX;\n let py1 = uvs[1] + (uvs[3] - uvs[1]) * progressX;\n let py2 = uvs[5] + (uvs[7] - uvs[5]) * progressX;\n verts[offset] = px1 + (px2 - px1) * progressY;\n verts[offset + 1] = py1 + (py2 - py1) * progressY;\n }\n}\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport Assembler2D from '../../../../assembler-2d';\n\nexport default class SimpleSpriteAssembler extends Assembler2D {\n updateRenderData (sprite) {\n const assemblerChanged = this.packDynamicAtlasAndCheckMaterial(sprite, sprite._spriteFrame);\n\n // 打包到动态图集时可能会切换 Assembler\n if (!assemblerChanged) {\n if (sprite._vertsDirty) {\n this.updateUVs(sprite);\n this.updateVerts(sprite);\n sprite._vertsDirty = false;\n }\n }\n }\n\n updateUVs (sprite) {\n let uv = sprite._spriteFrame.uv;\n let uvOffset = this.uvOffset;\n let floatsPerVert = this.floatsPerVert;\n let verts = this._renderData.vDatas[0];\n for (let i = 0; i < 4; i++) {\n let srcOffset = i * 2;\n let dstOffset = floatsPerVert * i + uvOffset;\n verts[dstOffset] = uv[srcOffset];\n verts[dstOffset + 1] = uv[srcOffset + 1];\n }\n }\n\n updateVerts (sprite) {\n let node = sprite.node,\n cw = node.width, ch = node.height,\n appx = node.anchorX * cw, appy = node.anchorY * ch,\n l, b, r, t;\n if (sprite.trim) {\n l = -appx;\n b = -appy;\n r = cw - appx;\n t = ch - appy;\n }\n else {\n let frame = sprite.spriteFrame,\n ow = frame._originalSize.width, oh = frame._originalSize.height,\n rw = frame._rect.width, rh = frame._rect.height,\n offset = frame._offset,\n scaleX = cw / ow, scaleY = ch / oh;\n let trimLeft = offset.x + (ow - rw) / 2;\n let trimRight = offset.x - (ow - rw) / 2;\n let trimBottom = offset.y + (oh - rh) / 2;\n let trimTop = offset.y - (oh - rh) / 2;\n l = trimLeft * scaleX - appx;\n b = trimBottom * scaleY - appy;\n r = cw + trimRight * scaleX - appx;\n t = ch + trimTop * scaleY - appy;\n }\n\n let local = this._local;\n local[0] = l;\n local[1] = b;\n local[2] = r;\n local[3] = t;\n this.updateWorldVerts(sprite);\n }\n}\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos.com\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport Assembler2D from '../../../../assembler-2d';\n\nexport default class SlicedAssembler extends Assembler2D {\n initData (sprite) {\n if (this._renderData.meshCount > 0) return;\n this._renderData.createData(0, this.verticesFloats, this.indicesCount);\n\n let indices = this._renderData.iDatas[0];\n let indexOffset = 0;\n for (let r = 0; r < 3; ++r) {\n for (let c = 0; c < 3; ++c) {\n let start = r * 4 + c;\n indices[indexOffset++] = start;\n indices[indexOffset++] = start + 1;\n indices[indexOffset++] = start + 4;\n indices[indexOffset++] = start + 1;\n indices[indexOffset++] = start + 5;\n indices[indexOffset++] = start + 4;\n }\n }\n }\n\n initLocal () {\n this._local = [];\n this._local.length = 8;\n }\n\n updateRenderData (sprite) {\n let frame = sprite._spriteFrame;\n const assemblerChanged = this.packDynamicAtlasAndCheckMaterial(sprite, frame);\n\n // 打包到动态图集时可能会切换 Assembler\n if (!assemblerChanged) {\n if (sprite._vertsDirty) {\n this.updateUVs(sprite);\n this.updateVerts(sprite);\n sprite._vertsDirty = false;\n }\n }\n }\n\n updateVerts (sprite) {\n let node = sprite.node,\n width = node.width, height = node.height,\n appx = node.anchorX * width, appy = node.anchorY * height;\n\n let frame = sprite.spriteFrame;\n let leftWidth = frame.insetLeft;\n let rightWidth = frame.insetRight;\n let topHeight = frame.insetTop;\n let bottomHeight = frame.insetBottom;\n\n let sizableWidth = width - leftWidth - rightWidth;\n let sizableHeight = height - topHeight - bottomHeight;\n let xScale = width / (leftWidth + rightWidth);\n let yScale = height / (topHeight + bottomHeight);\n xScale = (isNaN(xScale) || xScale > 1) ? 1 : xScale;\n yScale = (isNaN(yScale) || yScale > 1) ? 1 : yScale;\n sizableWidth = sizableWidth < 0 ? 0 : sizableWidth;\n sizableHeight = sizableHeight < 0 ? 0 : sizableHeight;\n\n // update local\n let local = this._local;\n local[0] = -appx;\n local[1] = -appy;\n local[2] = leftWidth * xScale - appx;\n local[3] = bottomHeight * yScale - appy;\n local[4] = local[2] + sizableWidth;\n local[5] = local[3] + sizableHeight;\n local[6] = width - appx;\n local[7] = height - appy;\n\n this.updateWorldVerts(sprite);\n }\n\n updateUVs (sprite) {\n let verts = this._renderData.vDatas[0];\n let uvSliced = sprite.spriteFrame.uvSliced;\n let uvOffset = this.uvOffset;\n let floatsPerVert = this.floatsPerVert;\n for (let row = 0; row < 4; ++row) {\n for (let col = 0; col < 4; ++col) {\n let vid = row * 4 + col;\n let uv = uvSliced[vid];\n let voffset = vid * floatsPerVert;\n verts[voffset + uvOffset] = uv.u;\n verts[voffset + uvOffset + 1] = uv.v;\n }\n }\n }\n\n updateWorldVerts (sprite) {\n let matrix = sprite.node._worldMatrix;\n let matrixm = matrix.m,\n a = matrixm[0], b = matrixm[1], c = matrixm[4], d = matrixm[5],\n tx = matrixm[12], ty = matrixm[13];\n\n let local = this._local;\n let world = this._renderData.vDatas[0];\n\n let floatsPerVert = this.floatsPerVert;\n for (let row = 0; row < 4; ++row) {\n let localRowY = local[row * 2 + 1];\n for (let col = 0; col < 4; ++col) {\n let localColX = local[col * 2];\n let worldIndex = (row * 4 + col) * floatsPerVert;\n world[worldIndex] = localColX * a + localRowY * c + tx;\n world[worldIndex + 1] = localColX * b + localRowY * d + ty;\n }\n }\n }\n}\n\nObject.assign(SlicedAssembler.prototype, {\n verticesCount: 16,\n indicesCount: 54\n});\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport Assembler2D from '../../../../assembler-2d';\n\nexport default class TiledAssembler extends Assembler2D {\n initData (sprite) {\n this.verticesCount = 0;\n this.contentWidth = 0;\n this.contentHeight = 0;\n this.rectWidth = 0;\n this.rectHeight = 0;\n this.hRepeat = 0;\n this.vRepeat = 0;\n this.row = 0;\n this.col = 0;\n\n this._renderData.createFlexData(0, 4, 6, this.getVfmt());\n this._updateIndices();\n }\n\n initLocal () {\n this._local = { x: [], y: []};\n }\n\n _updateIndices () {\n let iData = this._renderData.iDatas[0];\n for (let i = 0, vid = 0, l = iData.length; i < l; i += 6, vid += 4) {\n iData[i] = vid;\n iData[i + 1] = vid + 1;\n iData[i + 2] = vid + 2;\n iData[i + 3] = vid + 1;\n iData[i + 4] = vid + 3;\n iData[i + 5] = vid + 2;\n }\n }\n\n updateRenderData (sprite) {\n let frame = sprite._spriteFrame;\n const assemblerChanged = this.packDynamicAtlasAndCheckMaterial(sprite, frame);\n\n // 打包到动态图集时可能会切换 Assembler\n if (!assemblerChanged) {\n let node = sprite.node;\n\n let contentWidth = this.contentWidth = Math.abs(node.width);\n let contentHeight = this.contentHeight = Math.abs(node.height);\n let rect = frame._rect;\n let leftWidth = frame.insetLeft, rightWidth = frame.insetRight, centerWidth = rect.width - leftWidth - rightWidth,\n topHeight = frame.insetTop, bottomHeight = frame.insetBottom, centerHeight = rect.height - topHeight - bottomHeight;\n this.sizableWidth = contentWidth - leftWidth - rightWidth;\n this.sizableHeight = contentHeight - topHeight - bottomHeight;\n this.sizableWidth = this.sizableWidth > 0 ? this.sizableWidth : 0;\n this.sizableHeight = this.sizableHeight > 0 ? this.sizableHeight : 0;\n let hRepeat = this.hRepeat = centerWidth === 0 ? this.sizableWidth : this.sizableWidth / centerWidth;\n let vRepeat = this.vRepeat = centerHeight === 0 ? this.sizableHeight : this.sizableHeight / centerHeight;\n let row = this.row = Math.ceil(vRepeat + 2);\n let col = this.col = Math.ceil(hRepeat + 2);\n\n // update data property\n let count = row * col;\n this.verticesCount = count * 4;\n this.indicesCount = count * 6;\n\n let renderData = this._renderData;\n let flexBuffer = renderData._flexBuffer;\n if (flexBuffer.reserve(this.verticesCount, this.indicesCount)) {\n this._updateIndices();\n this.updateColor(sprite);\n }\n flexBuffer.used(this.verticesCount, this.indicesCount);\n\n if (sprite._vertsDirty) {\n this.updateUVs(sprite);\n this.updateVerts(sprite);\n sprite._vertsDirty = false;\n }\n }\n }\n\n updateVerts (sprite) {\n let frame = sprite._spriteFrame;\n let rect = frame._rect;\n let node = sprite.node,\n appx = node.anchorX * node.width, appy = node.anchorY * node.height;\n\n let { row, col, contentWidth, contentHeight } = this;\n let { x, y } = this._local;\n x.length = y.length = 0;\n let leftWidth = frame.insetLeft, rightWidth = frame.insetRight, centerWidth = rect.width - leftWidth - rightWidth,\n topHeight = frame.insetTop, bottomHeight = frame.insetBottom, centerHeight = rect.height - topHeight - bottomHeight;\n let xScale = (node.width / (leftWidth + rightWidth)) > 1 ? 1 : (node.width / (leftWidth + rightWidth));\n let yScale = (node.height / (topHeight + bottomHeight)) > 1 ? 1 : (node.height / (topHeight + bottomHeight));\n let offsetWidth = 0, offsetHeight = 0;\n if (centerWidth > 0) {\n /*\n * Because the float numerical calculation in javascript is not accurate enough, \n * there is an expected result of 1.0, but the actual result is 1.000001.\n */\n offsetWidth = Math.floor(this.sizableWidth * 1000) / 1000 % centerWidth === 0 ? centerWidth : this.sizableWidth % centerWidth;\n }\n else {\n offsetWidth = this.sizableWidth;\n }\n if (centerHeight > 0) {\n offsetHeight = Math.floor(this.sizableHeight * 1000) / 1000 % centerHeight === 0 ? centerHeight : this.sizableHeight % centerHeight;\n }\n else {\n offsetHeight = this.sizableHeight;\n }\n\n for (let i = 0; i <= col; i++) {\n if (i === 0) {\n x[i] = - appx;\n }\n else if (i > 0 && i < col) {\n if (i === 1) {\n x[i] = leftWidth * xScale + Math.min(centerWidth, this.sizableWidth) - appx;\n }\n else {\n if (centerWidth > 0) {\n if (i === (col - 1)) {\n x[i] = leftWidth + offsetWidth + centerWidth * (i - 2) - appx;\n }\n else {\n x[i] = leftWidth + Math.min(centerWidth, this.sizableWidth) + centerWidth * (i - 2) - appx;\n }\n }\n else {\n x[i] = leftWidth + this.sizableWidth - appx;\n }\n }\n }\n else if (i === col) {\n x[i] = Math.min(leftWidth + this.sizableWidth + rightWidth, contentWidth) - appx;\n }\n }\n for (let i = 0; i <= row; i++) {\n if (i === 0) {\n y[i] = - appy;\n }\n else if (i > 0 && i < row) {\n if (i === 1) {\n y[i] = bottomHeight * yScale + Math.min(centerHeight, this.sizableHeight) - appy;\n }\n else {\n if (centerHeight > 0) {\n if (i === (row - 1)) {\n y[i] = bottomHeight + offsetHeight + (i - 2) * centerHeight - appy;\n }\n else {\n y[i] = bottomHeight + Math.min(centerHeight, this.sizableHeight) + (i - 2) * centerHeight - appy;\n }\n }\n else {\n y[i] = bottomHeight + this.sizableHeight - appy;\n }\n }\n }\n else if (i === row) {\n y[i] = Math.min(bottomHeight + this.sizableHeight + topHeight, contentHeight) - appy;\n }\n }\n\n this.updateWorldVerts(sprite);\n }\n \n updateWorldVerts (sprite) {\n let renderData = this._renderData;\n let local = this._local;\n let localX = local.x, localY = local.y;\n let world = renderData.vDatas[0];\n let { row, col } = this;\n let matrix = sprite.node._worldMatrix;\n let matrixm = matrix.m;\n let a = matrixm[0], b = matrixm[1], c = matrixm[4], d = matrixm[5],\n tx = matrixm[12], ty = matrixm[13];\n\n let x, x1, y, y1;\n let floatsPerVert = this.floatsPerVert;\n let vertexOffset = 0;\n for (let yindex = 0, ylength = row; yindex < ylength; ++yindex) {\n y = localY[yindex];\n y1 = localY[yindex + 1];\n for (let xindex = 0, xlength = col; xindex < xlength; ++xindex) {\n x = localX[xindex];\n x1 = localX[xindex + 1];\n\n // lb\n world[vertexOffset] = x * a + y * c + tx;\n world[vertexOffset + 1] = x * b + y * d + ty;\n vertexOffset += floatsPerVert;\n // rb\n world[vertexOffset] = x1 * a + y * c + tx;\n world[vertexOffset + 1] = x1 * b + y * d + ty;\n vertexOffset += floatsPerVert;\n // lt\n world[vertexOffset] = x * a + y1 * c + tx;\n world[vertexOffset + 1] = x * b + y1 * d + ty;\n vertexOffset += floatsPerVert;\n // rt\n world[vertexOffset] = x1 * a + y1 * c + tx;\n world[vertexOffset + 1] = x1 * b + y1 * d + ty;\n vertexOffset += floatsPerVert;\n }\n }\n }\n\n updateUVs (sprite) {\n let verts = this._renderData.vDatas[0];\n if (!verts) return;\n \n let frame = sprite._spriteFrame;\n let rect = frame._rect;\n let leftWidth = frame.insetLeft, rightWidth = frame.insetRight, centerWidth = rect.width - leftWidth - rightWidth,\n topHeight = frame.insetTop, bottomHeight = frame.insetBottom, centerHeight = rect.height - topHeight - bottomHeight;\n\n let { row, col, hRepeat, vRepeat } = this;\n let coefu = 0, coefv = 0;\n let uv = sprite.spriteFrame.uv;\n let uvSliced = sprite.spriteFrame.uvSliced;\n let rotated = sprite.spriteFrame._rotated;\n let floatsPerVert = this.floatsPerVert, uvOffset = this.uvOffset;\n let tempXVerts = [], tempYVerts = [];\n for (let yindex = 0, ylength = row; yindex < ylength; ++yindex) {\n if (this.sizableHeight > centerHeight) {\n if (this.sizableHeight >= yindex * centerHeight) {\n coefv = 1;\n }\n else {\n coefv = vRepeat % 1;\n }\n }\n else {\n coefv = vRepeat;\n }\n for (let xindex = 0, xlength = col; xindex < xlength; ++xindex) {\n if (this.sizableWidth > centerWidth) {\n if (this.sizableWidth >= xindex * centerWidth) {\n coefu = 1;\n }\n else {\n coefu = hRepeat % 1;\n }\n }\n else {\n coefu = hRepeat;\n }\n\n if (rotated) {\n if (yindex === 0) {\n tempXVerts[0] = uvSliced[0].u;\n tempXVerts[1] = uvSliced[0].u;\n tempXVerts[2] = uvSliced[4].u + (uvSliced[8].u - uvSliced[4].u) * coefv;\n } else if (yindex < (row - 1)) {\n tempXVerts[0] = uvSliced[4].u;\n tempXVerts[1] = uvSliced[4].u;\n tempXVerts[2] = uvSliced[4].u + (uvSliced[8].u - uvSliced[4].u) * coefv;\n } else if (yindex === (row - 1)) {\n tempXVerts[0] = uvSliced[8].u;\n tempXVerts[1] = uvSliced[8].u;\n tempXVerts[2] = uvSliced[12].u;\n }\n if (xindex === 0) {\n tempYVerts[0] = uvSliced[0].v;\n tempYVerts[1] = uvSliced[1].v + (uvSliced[2].v - uvSliced[1].v) * coefu;\n tempYVerts[2] = uvSliced[0].v;\n } else if (xindex < (col - 1)) {\n tempYVerts[0] = uvSliced[1].v;\n tempYVerts[1] = uvSliced[1].v + (uvSliced[2].v - uvSliced[1].v) * coefu;\n tempYVerts[2] = uvSliced[1].v;\n } else if (xindex === (col - 1)) {\n tempYVerts[0] = uvSliced[2].v;\n tempYVerts[1] = uvSliced[3].v;\n tempYVerts[2] = uvSliced[2].v;\n }\n tempXVerts[3] = tempXVerts[2];\n tempYVerts[3] = tempYVerts[1];\n }\n else {\n if (xindex === 0) {\n tempXVerts[0] = uvSliced[0].u;\n tempXVerts[1] = uvSliced[1].u + (uvSliced[2].u - uvSliced[1].u) * coefu;\n tempXVerts[2] = uv[0];\n } else if (xindex < (col - 1)) {\n tempXVerts[0] = uvSliced[1].u;\n tempXVerts[1] = uvSliced[1].u + (uvSliced[2].u - uvSliced[1].u) * coefu;\n tempXVerts[2] = uvSliced[1].u;\n } else if (xindex === (col - 1)) {\n tempXVerts[0] = uvSliced[2].u;\n tempXVerts[1] = uvSliced[3].u;\n tempXVerts[2] = uvSliced[2].u;\n }\n if (yindex === 0) {\n tempYVerts[0] = uvSliced[0].v;\n tempYVerts[1] = uvSliced[0].v;\n tempYVerts[2] = uvSliced[4].v + (uvSliced[8].v - uvSliced[4].v) * coefv;\n } else if (yindex < (row - 1)) {\n tempYVerts[0] = uvSliced[4].v;\n tempYVerts[1] = uvSliced[4].v;\n tempYVerts[2] = uvSliced[4].v + (uvSliced[8].v - uvSliced[4].v) * coefv;\n } else if (yindex === (row - 1)) {\n tempYVerts[0] = uvSliced[8].v;\n tempYVerts[1] = uvSliced[8].v;\n tempYVerts[2] = uvSliced[12].v;\n }\n tempXVerts[3] = tempXVerts[1];\n tempYVerts[3] = tempYVerts[2];\n }\n // lb\n verts[uvOffset] = tempXVerts[0];\n verts[uvOffset + 1] = tempYVerts[0];\n uvOffset += floatsPerVert;\n // rb\n verts[uvOffset] = tempXVerts[1];\n verts[uvOffset + 1] = tempYVerts[1];\n uvOffset += floatsPerVert;\n // lt\n verts[uvOffset] = tempXVerts[2];\n verts[uvOffset + 1] = tempYVerts[2];\n uvOffset += floatsPerVert;\n // rt\n verts[uvOffset] = tempXVerts[3];\n verts[uvOffset + 1] = tempYVerts[3];\n uvOffset += floatsPerVert;\n }\n }\n }\n}\n\n","import Assembler from '../../../assembler';\nimport { Type, FillType } from '../../../../components/CCSprite';\n\nimport Simple from \"./2d/simple\";\nimport Sliced from \"./2d/sliced\";\nimport Tiled from \"./2d/tiled\";\nimport RadialFilled from \"./2d/radial-filled\";\nimport BarFilled from \"./2d/bar-filled\";\nimport Mesh from './2d/mesh';\n\nimport Simple3D from \"./3d/simple\";\nimport Sliced3D from \"./3d/sliced\";\nimport Tiled3D from \"./3d/tiled\";\nimport RadialFilled3D from \"./3d/radial-filled\";\nimport BarFilled3D from \"./3d/bar-filled\";\nimport Mesh3D from './3d/mesh';\n\nimport SimpleMulti from \"./2d-multi/simple\";\nimport SlicedMulti from \"./2d-multi/sliced\";\nimport TiledMulti from \"./2d-multi/tiled\";\nimport RadialFilledMulti from \"./2d-multi/radial-filled\";\nimport BarFilledMulti from \"./2d-multi/bar-filled\";\nimport MeshMulti from \"./2d-multi/mesh\";\n\nlet ctor = {\n getConstructor(sprite) {\n let is3DNode = sprite.node.is3DNode;\n const material = sprite.getMaterials()[0];\n let isMultiMaterial = material && material.material.isMultiSupport();\n\n let ctor = is3DNode ? Simple3D : (isMultiMaterial ? SimpleMulti : Simple);\n switch (sprite.type) {\n case Type.SLICED:\n ctor = is3DNode ? Sliced3D : (isMultiMaterial ? SlicedMulti : Sliced);\n break;\n case Type.TILED:\n ctor = is3DNode ? Tiled3D : (isMultiMaterial ? TiledMulti : Tiled);\n break;\n case Type.FILLED:\n if (sprite._fillType === FillType.RADIAL) {\n ctor = is3DNode ? RadialFilled3D : (isMultiMaterial ? RadialFilledMulti : RadialFilled);\n } else {\n ctor = is3DNode ? BarFilled3D : (isMultiMaterial ? BarFilledMulti : BarFilled);\n }\n break;\n case Type.MESH:\n ctor = is3DNode ? Mesh3D : (isMultiMaterial ? MeshMulti : Mesh);\n break;\n }\n\n return ctor;\n },\n\n Simple,\n Sliced,\n Tiled,\n RadialFilled,\n BarFilled,\n Mesh,\n\n Simple3D,\n Sliced3D,\n Tiled3D,\n RadialFilled3D,\n BarFilled3D,\n Mesh3D,\n\n SimpleMulti,\n SlicedMulti,\n TiledMulti,\n RadialFilledMulti,\n BarFilledMulti,\n MeshMulti,\n};\n\nAssembler.register(cc.Sprite, ctor);\n","/****************************************************************************\n LICENSING AGREEMENT\n \n Xiamen Yaji Software Co., Ltd., (the “Licensor”) grants the user (the “Licensee”) non-exclusive and non-transferable rights to use the software according to the following conditions:\n a. The Licensee shall pay royalties to the Licensor, and the amount of those royalties and the payment method are subject to separate negotiations between the parties.\n b. The software is licensed for use rather than sold, and the Licensor reserves all rights over the software that are not expressly granted (whether by implication, reservation or prohibition).\n c. The open source codes contained in the software are subject to the MIT Open Source Licensing Agreement (see the attached for the details);\n d. The Licensee acknowledges and consents to the possibility that errors may occur during the operation of the software for one or more technical reasons, and the Licensee shall take precautions and prepare remedies for such events. In such circumstance, the Licensor shall provide software patches or updates according to the agreement between the two parties. The Licensor will not assume any liability beyond the explicit wording of this Licensing Agreement.\n e. Where the Licensor must assume liability for the software according to relevant laws, the Licensor’s entire liability is limited to the annual royalty payable by the Licensee.\n f. The Licensor owns the portions listed in the root directory and subdirectory (if any) in the software and enjoys the intellectual property rights over those portions. As for the portions owned by the Licensor, the Licensee shall not:\n - i. Bypass or avoid any relevant technical protection measures in the products or services;\n - ii. Release the source codes to any other parties;\n - iii. Disassemble, decompile, decipher, attack, emulate, exploit or reverse-engineer these portion of code;\n - iv. Apply it to any third-party products or services without Licensor’s permission;\n - v. Publish, copy, rent, lease, sell, export, import, distribute or lend any products containing these portions of code;\n - vi. Allow others to use any services relevant to the technology of these codes;\n - vii. Conduct any other act beyond the scope of this Licensing Agreement.\n g. This Licensing Agreement terminates immediately if the Licensee breaches this Agreement. The Licensor may claim compensation from the Licensee where the Licensee’s breach causes any damage to the Licensor.\n h. The laws of the People's Republic of China apply to this Licensing Agreement.\n i. This Agreement is made in both Chinese and English, and the Chinese version shall prevail the event of conflict.\n ****************************************************************************/\n\nexport default class FlexBuffer {\n constructor (handler, index, verticesCount, indicesCount, vfmt) {\n this._handler = handler;\n this._index = index;\n this._vfmt = vfmt;\n this._verticesBytes = vfmt._bytes;\n\n this._initVerticesCount = verticesCount;\n this._initIndicesCount = indicesCount;\n\n this.reset();\n }\n\n _reallocVData (floatsCount, oldData) {\n this.vData = new Float32Array(floatsCount);\n this.uintVData = new Uint32Array(this.vData.buffer);\n\n if (oldData) {\n this.vData.set(oldData);\n }\n\n this._handler.updateMesh(this._index, this.vData, this.iData);\n }\n\n _reallocIData (indicesCount, oldData) {\n this.iData = new Uint16Array(indicesCount);\n \n if (oldData) {\n this.iData.set(oldData);\n }\n\n this._handler.updateMesh(this._index, this.vData, this.iData);\n }\n\n reserve (verticesCount, indicesCount) {\n let floatsCount = verticesCount * this._verticesBytes >> 2;\n let newFloatsCount = this.vData.length;\n let realloced = false;\n\n if (floatsCount > newFloatsCount) {\n while (newFloatsCount < floatsCount) {\n newFloatsCount *= 2;\n }\n this._reallocVData(newFloatsCount, this.vData);\n realloced = true;\n }\n\n let newIndicesCount = this.iData.length;\n if (indicesCount > newIndicesCount) {\n while (newIndicesCount < indicesCount) {\n newIndicesCount *= 2;\n }\n this._reallocIData(indicesCount, this.iData);\n realloced = true;\n }\n\n return realloced;\n }\n\n used (verticesCount, indicesCount) {\n this.usedVertices = verticesCount;\n this.usedIndices = indicesCount;\n this.usedVerticesFloats = verticesCount * this._verticesBytes >> 2;\n\n this._handler.updateMeshRange(verticesCount, indicesCount);\n }\n\n reset () {\n let floatsCount = this._initVerticesCount * this._verticesBytes >> 2;\n this._reallocVData(floatsCount);\n this._reallocIData(this._initIndicesCount);\n\n this.usedVertices = 0;\n this.usedVerticesFloats = 0;\n this.usedIndices = 0;\n }\n} \n\ncc.FlexBuffer = FlexBuffer\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport gfx from '../../../renderer/gfx';\n\nconst FIX_IOS14_BUFFER = (cc.sys.os === cc.sys.OS_IOS || cc.sys.os === cc.sys.OS_OSX) && cc.sys.isBrowser && /(OS 1[4-9])|(Version\\/1[4-9])/.test(window.navigator.userAgent);\n\nlet MeshBuffer = cc.Class({\n name: 'cc.MeshBuffer',\n ctor (batcher, vertexFormat) {\n this.init (batcher, vertexFormat);\n },\n\n init (batcher, vertexFormat) {\n this.byteOffset = 0;\n this.indiceOffset = 0;\n this.vertexOffset = 0;\n this.indiceStart = 0;\n\n this._dirty = false;\n\n this._vertexFormat = vertexFormat;\n this._vertexBytes = this._vertexFormat._bytes;\n\n this._arrOffset = 0;\n this._vbArr = [];\n this._vb = new gfx.VertexBuffer(\n batcher._device,\n vertexFormat,\n gfx.USAGE_DYNAMIC,\n new ArrayBuffer(),\n 0\n );\n this._vbArr[0] = this._vb;\n\n this._ibArr = [];\n this._ib = new gfx.IndexBuffer(\n batcher._device,\n gfx.INDEX_FMT_UINT16,\n gfx.USAGE_STATIC,\n new ArrayBuffer(),\n 0\n );\n this._ibArr[0] = this._ib;\n\n this._vData = null;\n this._uintVData = null;\n this._iData = null;\n\n this._batcher = batcher;\n\n this._initVDataCount = 256 * vertexFormat._bytes;// actually 256 * 4 * (vertexFormat._bytes / 4)\n this._initIDataCount = 256 * 6;\n \n this._offsetInfo = {\n byteOffset : 0,\n vertexOffset : 0,\n indiceOffset : 0\n }\n this._reallocBuffer();\n },\n\n uploadData () {\n if (this.byteOffset === 0 || !this._dirty) {\n return;\n }\n\n // update vertext data\n let vertexsData = new Float32Array(this._vData.buffer, 0, this.byteOffset >> 2);\n let indicesData = new Uint16Array(this._iData.buffer, 0, this.indiceOffset);\n\n let vb = this._vb;\n vb.update(0, vertexsData);\n\n let ib = this._ib;\n ib.update(0, indicesData);\n\n this._dirty = false;\n },\n\n switchBuffer () {\n let offset = ++this._arrOffset;\n\n this.byteOffset = 0;\n this.vertexOffset = 0;\n this.indiceOffset = 0;\n this.indiceStart = 0;\n\n if (offset < this._vbArr.length) {\n this._vb = this._vbArr[offset];\n this._ib = this._ibArr[offset];\n } else {\n\n this._vb = new gfx.VertexBuffer(\n this._batcher._device,\n this._vertexFormat,\n gfx.USAGE_DYNAMIC,\n new ArrayBuffer(),\n 0\n );\n this._vbArr[offset] = this._vb;\n\n this._ib = new gfx.IndexBuffer(\n this._batcher._device,\n gfx.INDEX_FMT_UINT16,\n gfx.USAGE_STATIC,\n new ArrayBuffer(),\n 0\n );\n this._ibArr[offset] = this._ib;\n }\n },\n\n checkAndSwitchBuffer (vertexCount) {\n if (this.vertexOffset + vertexCount > 65535) {\n this.uploadData();\n this._batcher._flush();\n this.switchBuffer();\n }\n },\n\n requestStatic (vertexCount, indiceCount) {\n\n this.checkAndSwitchBuffer(vertexCount);\n\n let byteOffset = this.byteOffset + vertexCount * this._vertexBytes;\n let indiceOffset = this.indiceOffset + indiceCount;\n\n let byteLength = this._vData.byteLength;\n let indiceLength = this._iData.length;\n if (byteOffset > byteLength || indiceOffset > indiceLength) {\n while (byteLength < byteOffset || indiceLength < indiceOffset) {\n this._initVDataCount *= 2;\n this._initIDataCount *= 2;\n\n byteLength = this._initVDataCount * 4;\n indiceLength = this._initIDataCount;\n }\n\n this._reallocBuffer();\n }\n this._updateOffset(vertexCount, indiceCount, byteOffset);\n },\n\n _updateOffset (vertexCount, indiceCount, byteOffset) {\n let offsetInfo = this._offsetInfo;\n offsetInfo.vertexOffset = this.vertexOffset;\n this.vertexOffset += vertexCount;\n\n offsetInfo.indiceOffset = this.indiceOffset;\n this.indiceOffset += indiceCount;\n\n offsetInfo.byteOffset = this.byteOffset;\n this.byteOffset = byteOffset;\n\n this._dirty = true;\n },\n\n request (vertexCount, indiceCount) {\n if (this._batcher._buffer !== this) {\n this._batcher._flush();\n this._batcher._buffer = this;\n }\n\n this.requestStatic(vertexCount, indiceCount);\n return this._offsetInfo;\n },\n\n requestForSpine(vertexCount, indiceCount) {\n if (this._batcher._buffer !== this) {\n this._batcher._flush();\n this._batcher._buffer = this;\n }\n\n this.requestStaticForSpine(vertexCount, indiceCount);\n return this._offsetInfo;\n },\n\n requestStaticForSpine(vertexCount, indiceCount) {\n\n this.checkAndSwitchBuffer(vertexCount);\n\n let byteOffset = this.byteOffset + vertexCount * this._vertexBytes;\n let indiceOffset = this.indiceOffset + indiceCount;\n\n let byteLength = this._vData.byteLength;\n let indiceLength = this._iData.length;\n if (byteOffset > byteLength || indiceOffset > indiceLength) {\n while (byteLength < byteOffset || indiceLength < indiceOffset) {\n this._initVDataCount *= 2;\n this._initIDataCount *= 2;\n\n byteLength = this._initVDataCount * 4;\n indiceLength = this._initIDataCount;\n }\n\n this._reallocBuffer();\n }\n\n let offsetInfo = this._offsetInfo;\n offsetInfo.vertexOffset = this.vertexOffset;\n offsetInfo.indiceOffset = this.indiceOffset;\n offsetInfo.byteOffset = this.byteOffset;\n },\n\n adjustForSpine(vertexCount, indiceCount) {\n this.vertexOffset += vertexCount;\n this.indiceOffset += indiceCount;\n\n this.byteOffset = this.byteOffset + vertexCount * this._vertexBytes;\n\n this._dirty = true;\n },\n \n _reallocBuffer () {\n this._reallocVData(true);\n this._reallocIData(true);\n },\n\n _reallocVData (copyOldData) {\n let oldVData;\n if (this._vData) {\n oldVData = new Uint8Array(this._vData.buffer);\n }\n\n this._vData = new Float32Array(this._initVDataCount);\n this._uintVData = new Uint32Array(this._vData.buffer);\n\n let newData = new Uint8Array(this._uintVData.buffer);\n\n if (oldVData && copyOldData) {\n for (let i = 0, l = oldVData.length; i < l; i++) {\n newData[i] = oldVData[i];\n }\n }\n },\n\n _reallocIData (copyOldData) {\n let oldIData = this._iData;\n\n this._iData = new Uint16Array(this._initIDataCount);\n\n if (oldIData && copyOldData) {\n let iData = this._iData;\n for (let i = 0, l = oldIData.length; i < l; i++) {\n iData[i] = oldIData[i];\n }\n }\n },\n\n reset () {\n this._arrOffset = 0;\n this._vb = this._vbArr[0];\n this._ib = this._ibArr[0];\n\n this.byteOffset = 0;\n this.indiceOffset = 0;\n this.vertexOffset = 0;\n this.indiceStart = 0;\n\n this._dirty = false;\n },\n\n destroy () {\n this.reset();\n for (let i = 0; i < this._vbArr.length; i++) {\n let vb = this._vbArr[i];\n vb.destroy();\n }\n this._vbArr = null;\n\n for (let i = 0; i < this._ibArr.length; i++) {\n let ib = this._ibArr[i];\n ib.destroy();\n }\n this._ibArr = null;\n\n this._ib = null;\n this._vb = null;\n },\n\n forwardIndiceStartToOffset () {\n this.indiceStart = this.indiceOffset;\n }\n});\n\n// Should not share vb and id between multiple drawcalls on iOS14, it will cost a lot of time.\n// TODO: maybe remove it after iOS14 fix it?\nif (FIX_IOS14_BUFFER) {\n MeshBuffer.prototype.checkAndSwitchBuffer = function (vertexCount) {\n if (this.vertexOffset + vertexCount > 65535) {\n this.uploadData();\n this._batcher._flush();\n }\n }; \n MeshBuffer.prototype.forwardIndiceStartToOffset = function () {\n this.uploadData();\n this.switchBuffer();\n } \n}\n\ncc.MeshBuffer = module.exports = MeshBuffer;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst { vfmtPosUvColor, vfmt3D } = require('./vertex-format');\nconst QuadBuffer = require('./quad-buffer');\nconst MeshBuffer = require('./mesh-buffer');\nconst SpineBuffer = require('./spine-buffer');\nconst Material = require('../../assets/material/CCMaterial');\n\nlet idGenerater = new (require('../../platform/id-generater'))('VertextFormat');\n\nimport InputAssembler from '../../../renderer/core/input-assembler';\nimport RecyclePool from '../../../renderer/memop/recycle-pool';\nimport Model from '../../../renderer/scene/model';\n\nlet _buffers = {};\n\nconst empty_material = new Material();\nconst empty_ia = new InputAssembler();\nempty_ia._count = 0;\n\nvar ModelBatcher = function (device, renderScene) {\n this._renderScene = renderScene;\n this._device = device;\n\n this.walking = false;\n this.material = empty_material;\n this.cullingMask = 1;\n\n this._iaPool = new RecyclePool(function () {\n return new InputAssembler();\n }, 16);\n\n this._modelPool = new RecyclePool(function () {\n return new Model();\n }, 16);\n\n // buffers\n this._quadBuffer = this.getBuffer('quad', vfmtPosUvColor);\n this._meshBuffer = this.getBuffer('mesh', vfmtPosUvColor);\n this._quadBuffer3D = this.getBuffer('quad', vfmt3D);\n this._meshBuffer3D = this.getBuffer('mesh', vfmt3D);\n this._buffer = this._meshBuffer;\n\n this._batchedModels = [];\n this._dummyNode = new cc.Node();\n this._sortKey = 0;\n\n this.node = this._dummyNode;\n \n this.parentOpacity = 1;\n this.parentOpacityDirty = 0;\n this.worldMatDirty = 0;\n};\n\nModelBatcher.prototype = {\n constructor: ModelBatcher,\n \n reset() {\n // Reset pools\n this._iaPool.reset();\n\n // Reset scene\n let scene = this._renderScene;\n let models = this._batchedModels;\n for (let i = 0; i < models.length; ++i) {\n // remove from scene\n // models[i].clearInputAssemblers();\n // models[i].clearEffects();\n models[i].setInputAssembler(null);\n models[i].setEffect(null);\n scene.removeModel(models[i]);\n }\n this._modelPool.reset();\n models.length = 0;\n this._sortKey = 0;\n\n for (let key in _buffers) {\n _buffers[key].reset();\n }\n this._buffer = this._meshBuffer;\n\n // reset caches for handle render components\n this.node = this._dummyNode;\n this.material = empty_material;\n this.cullingMask = 1;\n\n this.parentOpacity = 1;\n this.parentOpacityDirty = 0;\n this.worldMatDirty = 0;\n },\n\n _flushMaterial (material) {\n if (!material) {\n return;\n }\n this.material = material;\n let effect = material.effect;\n if (!effect) return;\n \n // Generate model\n let model = this._modelPool.add();\n this._batchedModels.push(model);\n model.sortKey = this._sortKey++;\n model._cullingMask = this.cullingMask;\n model.setNode(this.node);\n model.setEffect(effect, null);\n model.setInputAssembler(empty_ia);\n \n this._renderScene.addModel(model);\n },\n\n _flush () {\n let material = this.material,\n buffer = this._buffer,\n indiceCount = buffer.indiceOffset - buffer.indiceStart;\n if (!this.walking || !material || indiceCount <= 0) {\n return;\n }\n\n let effect = material.effect;\n if (!effect) return;\n \n // Generate ia\n let ia = this._iaPool.add();\n ia._vertexBuffer = buffer._vb;\n ia._indexBuffer = buffer._ib;\n ia._start = buffer.indiceStart;\n ia._count = indiceCount;\n \n // Generate model\n let model = this._modelPool.add();\n this._batchedModels.push(model);\n model.sortKey = this._sortKey++;\n model._cullingMask = this.cullingMask;\n model.setNode(this.node);\n model.setEffect(effect);\n model.setInputAssembler(ia);\n \n this._renderScene.addModel(model);\n buffer.forwardIndiceStartToOffset();\n },\n\n _flushIA (ia) {\n if (!ia) {\n return;\n }\n\n let material = this.material;\n let effect = material.effect;\n if (!effect) return;\n \n // Generate model\n let model = this._modelPool.add();\n this._batchedModels.push(model);\n model.sortKey = this._sortKey++;\n model._cullingMask = this.cullingMask;\n model.setNode(this.node);\n model.setEffect(effect);\n model.setInputAssembler(ia);\n \n this._renderScene.addModel(model);\n },\n\n terminate () {\n if (cc.dynamicAtlasManager && cc.dynamicAtlasManager.enabled) {\n cc.dynamicAtlasManager.update();\n }\n\n // flush current rest Model\n this._flush();\n\n for (let key in _buffers) {\n _buffers[key].uploadData();\n }\n \n this.walking = false;\n },\n\n getBuffer (type, vertextFormat) {\n let key = type + vertextFormat.getHash();\n let buffer = _buffers[key];\n if (!buffer) {\n if (type === 'mesh') {\n buffer = new MeshBuffer(this, vertextFormat);\n }\n else if (type === 'quad') {\n buffer = new QuadBuffer(this, vertextFormat);\n }\n else if (type === 'spine') {\n buffer = new SpineBuffer(this, vertextFormat);\n }\n else {\n cc.error(`Not support buffer type [${type}]`);\n return null;\n }\n\n _buffers[key] = buffer;\n }\n\n return buffer;\n }\n}\n\nmodule.exports = ModelBatcher;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst MeshBuffer = require('./mesh-buffer');\n\nlet QuadBuffer = cc.Class({\n name: 'cc.QuadBuffer',\n extends: MeshBuffer,\n \n _fillQuadBuffer () {\n let count = this._initIDataCount / 6;\n let buffer = this._iData;\n for (let i = 0, idx = 0; i < count; i++) {\n let vertextID = i * 4;\n buffer[idx++] = vertextID;\n buffer[idx++] = vertextID+1;\n buffer[idx++] = vertextID+2;\n buffer[idx++] = vertextID+1;\n buffer[idx++] = vertextID+3;\n buffer[idx++] = vertextID+2;\n }\n\n let indicesData = new Uint16Array(this._iData.buffer, 0, count * 6);\n this._ib.update(0, indicesData);\n },\n\n uploadData () {\n if (this.byteOffset === 0 || !this._dirty) {\n return;\n }\n\n // update vertext data\n let vertexsData = new Float32Array(this._vData.buffer, 0, this.byteOffset >> 2);\n this._vb.update(0, vertexsData);\n\n this._dirty = false;\n },\n\n switchBuffer () {\n this._super();\n // upload index buffer data\n let indicesData = new Uint16Array(this._iData.buffer, 0, this._initIDataCount);\n this._ib.update(0, indicesData);\n },\n\n _reallocBuffer () {\n this._reallocVData(true);\n this._reallocIData();\n this._fillQuadBuffer();\n }\n});\n\ncc.QuadBuffer = module.exports = QuadBuffer;\n","import FlexBuffer from \"./flex-buffer\";\nimport { vfmtPosUvColor } from './vertex-format';\n\nexport default function RenderData () {\n this.vDatas = [];\n this.uintVDatas = [];\n this.iDatas = [];\n this.meshCount = 0;\n\n this._infos = null;\n this._flexBuffer = null;\n}\n\ncc.js.mixin(RenderData.prototype, {\n init (assembler) {\n },\n clear () {\n this.vDatas.length = 0;\n this.iDatas.length = 0;\n this.uintVDatas.length = 0;\n this.meshCount = 0;\n\n this._infos = null;\n\n if (this._flexBuffer) {\n this._flexBuffer.reset();\n }\n },\n\n updateMesh (index, vertices, indices) {\n this.vDatas[index] = vertices;\n this.uintVDatas[index] = new Uint32Array(vertices.buffer, 0, vertices.length);\n this.iDatas[index] = indices;\n \n this.meshCount = this.vDatas.length;\n },\n\n updateMeshRange (verticesCount, indicesCount) {\n },\n \n createData (index, verticesFloats, indicesCount) {\n let vertices = new Float32Array(verticesFloats);\n let indices = new Uint16Array(indicesCount);\n this.updateMesh(index, vertices, indices);\n },\n \n createQuadData (index, verticesFloats, indicesCount) {\n this.createData(index, verticesFloats, indicesCount);\n this.initQuadIndices(this.iDatas[index]);\n },\n\n createFlexData (index, verticesFloats, indicesCount, vfmt) {\n vfmt = vfmt || vfmtPosUvColor;\n this._flexBuffer = new FlexBuffer(this, index, verticesFloats, indicesCount, vfmt);\n },\n\n initQuadIndices(indices) {\n let count = indices.length / 6;\n for (let i = 0, idx = 0; i < count; i++) {\n let vertextID = i * 4;\n indices[idx++] = vertextID;\n indices[idx++] = vertextID+1;\n indices[idx++] = vertextID+2;\n indices[idx++] = vertextID+1;\n indices[idx++] = vertextID+3;\n indices[idx++] = vertextID+2;\n }\n }\n})\n\ncc.RenderData = RenderData;\n\n","var SpineBuffer = cc.Class({\n name: 'cc.SpineBuffer',\n extends: require('./mesh-buffer'),\n\n requestStatic (vertexCount, indiceCount) {\n \n this.checkAndSwitchBuffer(vertexCount);\n\n let byteOffset = this.byteOffset + vertexCount * this._vertexBytes;\n let indiceOffset = this.indiceOffset + indiceCount;\n\n let byteLength = this._vData.byteLength;\n let indiceLength = this._iData.length;\n if (byteOffset > byteLength || indiceOffset > indiceLength) {\n while (byteLength < byteOffset || indiceLength < indiceOffset) {\n this._initVDataCount *= 2;\n this._initIDataCount *= 2;\n\n byteLength = this._initVDataCount * 4;\n indiceLength = this._initIDataCount;\n }\n\n this._reallocBuffer();\n }\n\n let offsetInfo = this._offsetInfo;\n offsetInfo.vertexOffset = this.vertexOffset;\n offsetInfo.indiceOffset = this.indiceOffset;\n offsetInfo.byteOffset = this.byteOffset;\n },\n\n adjust (vertexCount, indiceCount) {\n this.vertexOffset += vertexCount;\n this.indiceOffset += indiceCount;\n \n this.byteOffset = this.byteOffset + vertexCount * this._vertexBytes;\n\n this._dirty = true;\n }\n});\n\ncc.SpineBuffer = module.exports = SpineBuffer;","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport gfx from '../../../renderer/gfx';\n\nvar vfmt3D = new gfx.VertexFormat([\n { name: gfx.ATTR_POSITION, type: gfx.ATTR_TYPE_FLOAT32, num: 3 },\n { name: gfx.ATTR_UV0, type: gfx.ATTR_TYPE_FLOAT32, num: 2 },\n { name: gfx.ATTR_COLOR, type: gfx.ATTR_TYPE_UINT8, num: 4, normalize: true },\n]);\nvfmt3D.name = 'vfmt3D';\ngfx.VertexFormat.XYZ_UV_Color = vfmt3D;\n\nvar vfmtPosUvColor = new gfx.VertexFormat([\n { name: gfx.ATTR_POSITION, type: gfx.ATTR_TYPE_FLOAT32, num: 2 },\n { name: gfx.ATTR_UV0, type: gfx.ATTR_TYPE_FLOAT32, num: 2 },\n { name: gfx.ATTR_COLOR, type: gfx.ATTR_TYPE_UINT8, num: 4, normalize: true },\n]);\nvfmtPosUvColor.name = 'vfmtPosUvColor';\ngfx.VertexFormat.XY_UV_Color = vfmtPosUvColor;\n\nvar vfmtPosUvColorTexId = new gfx.VertexFormat([\n { name: gfx.ATTR_POSITION, type: gfx.ATTR_TYPE_FLOAT32, num: 2 },\n { name: gfx.ATTR_UV0, type: gfx.ATTR_TYPE_FLOAT32, num: 2 },\n { name: gfx.ATTR_COLOR, type: gfx.ATTR_TYPE_UINT8, num: 4, normalize: true },\n { name: gfx.ATTR_TEX_ID, type: gfx.ATTR_TYPE_FLOAT32, num: 1 },\n]);\nvfmtPosUvColorTexId.name = 'vfmtPosUvColorTexId';\ngfx.VertexFormat.XY_UV_Color_TexId = vfmtPosUvColorTexId;\n\nvar vfmtPosUvTwoColor = new gfx.VertexFormat([\n { name: gfx.ATTR_POSITION, type: gfx.ATTR_TYPE_FLOAT32, num: 2 },\n { name: gfx.ATTR_UV0, type: gfx.ATTR_TYPE_FLOAT32, num: 2 },\n { name: gfx.ATTR_COLOR, type: gfx.ATTR_TYPE_UINT8, num: 4, normalize: true },\n { name: gfx.ATTR_COLOR0, type: gfx.ATTR_TYPE_UINT8, num: 4, normalize: true },\n]);\nvfmtPosUvTwoColor.name = 'vfmtPosUvTwoColor';\ngfx.VertexFormat.XY_UV_Two_Color = vfmtPosUvTwoColor;\n\nvar vfmtPosUv = new gfx.VertexFormat([\n { name: gfx.ATTR_POSITION, type: gfx.ATTR_TYPE_FLOAT32, num: 2 },\n { name: gfx.ATTR_UV0, type: gfx.ATTR_TYPE_FLOAT32, num: 2 }\n]);\nvfmtPosUv.name = 'vfmtPosUv';\ngfx.VertexFormat.XY_UV = vfmtPosUv;\n\nvar vfmtPosColor = new gfx.VertexFormat([\n { name: gfx.ATTR_POSITION, type: gfx.ATTR_TYPE_FLOAT32, num: 2 },\n { name: gfx.ATTR_COLOR, type: gfx.ATTR_TYPE_UINT8, num: 4, normalize: true },\n]);\nvfmtPosColor.name = 'vfmtPosColor';\ngfx.VertexFormat.XY_Color = vfmtPosColor;\n\nvar vfmtPos = new gfx.VertexFormat([\n { name: gfx.ATTR_POSITION, type: gfx.ATTR_TYPE_FLOAT32, num: 2 },\n]);\nvfmtPos.name = 'vfmtPos';\ngfx.VertexFormat.XY = vfmtPos;\n\nmodule.exports = {\n vfmt3D,\n vfmtPosUvColor,\n vfmtPosUvTwoColor,\n vfmtPosUv,\n vfmtPosColor,\n vfmtPos,\n vfmtPosUvColorTexId\n};\n","require('./sp');\nrequire('./multi-handler');\nrequire('./multi-batcher');\n","import { MultiHandler } from \"./multi-handler\";\n\n\n/**\n * 多纹理合批器\n */\nexport class MultiBatcher {\n\n /**\n * 多纹理材质管理器数组\n */\n handlers: MultiHandler[] = [];\n\n /**\n * 有空槽的材质\n */\n nextHandler!: MultiHandler;\n\n\n /**\n * 初始化\n */\n init() {\n const handler = new MultiHandler();\n this.handlers.push(handler);\n this.nextHandler = handler;\n }\n\n\n /**\n * 传入 cc.Texture2D,会关联并返回一个多纹理材质,如果已经有关联的材质则会返回已关联的材质\n */\n requsetMaterial(texture: any) {\n if (!texture._multiMaterial) {\n let handler = this.nextHandler;\n let index = handler.getEmptyIndex();\n if (index === -1) {\n // 没有空位,尝试在已有 handlers 里查找\n for (const _handler of this.handlers) {\n index = _handler.getEmptyIndex();\n if (index !== -1) {\n handler = _handler;\n this.nextHandler = handler;\n break;\n }\n }\n\n // 已有的没有空位,创建新材质\n if (index === -1) {\n handler = new MultiHandler();\n this.handlers.push(handler);\n this.nextHandler = handler;\n index = 0;\n }\n }\n\n texture.linkMaterial(handler.material, index);\n }\n return texture._multiMaterial;\n }\n\n\n /**\n * 重置多纹理材质数组,再次使用请先初始化\n */\n reset() {\n this.handlers.length = 0;\n }\n\n}\n\n\ncc.sp.multiBatcher = new MultiBatcher();\ncc.sp.MultiBatcher = MultiBatcher;\n","/**\n * 多纹理 Material 管理类\n */\nexport class MultiHandler {\n\n /**\n * 材质\n */\n material: any;\n\n /**\n * Texture 数组\n *\n * 注意:不是 cc.Texture2D\n */\n protected textures: any[] = [];\n\n /**\n * 有空槽(缓存值,并不是完全正确,只是为了降低当材质没有空槽时避免数组遍历的性能消耗)\n */\n protected hasEmptySlot: boolean = false;\n\n\n constructor(material?) {\n if (material) {\n this.material = material;\n } else {\n this.material = (cc.Material as any).create(cc.sp.multi2dSpriteEffectAsset);\n this.material.name = \"multi-2d-sprite\";\n this.material.define('USE_TEXTURE', true);\n this.material.define('USE_MULTI_TEXTURE', true);\n }\n this.material._multiHandler = this;\n this.syncTextures();\n }\n\n\n /**\n * 同步 Material 的纹理插槽数据\n *\n * 当自行设置插槽可调用此函数同步数组\n */\n syncTextures() {\n const effect = this.material['effect'];\n const properties = effect.passes[0]._properties;\n\n this.textures[0] = properties.texture.value;\n this.textures[1] = properties.texture2.value;\n this.textures[2] = properties.texture3.value;\n this.textures[3] = properties.texture4.value;\n this.textures[4] = properties.texture5.value;\n this.textures[5] = properties.texture6.value;\n this.textures[6] = properties.texture7.value;\n this.textures[7] = properties.texture8.value;\n\n // refresh has empty slot state\n this.hasEmptySlot = true;\n this.getEmptyIndex();\n }\n\n\n /**\n * 设置纹理插槽(提供 cc.Texture2D)\n */\n setTexture(index: number, texture: any) {\n this.textures[index] = texture ? texture.getImpl() : null;\n this.material.setProperty(cc.sp.propertyIndex2Name(index), texture);\n if (texture == null) this.hasEmptySlot = true;\n }\n\n\n /**\n * 移除指定纹理\n *\n * 注意:不是 cc.Texture2D\n */\n removeTexture(texture: any) {\n const index = this.getIndex(texture);\n if (index !== -1) {\n this.setTexture(index, null);\n }\n }\n\n\n /**\n * 纹理是否在插槽中\n *\n * 注意:不是 cc.Texture2D\n */\n hasTexture(texture: any) {\n return this.textures.indexOf(texture) !== -1;\n }\n\n\n /**\n * 获取纹理在插槽中的 Index,没有返回 -1\n *\n * 注意:不是 cc.Texture2D\n */\n getIndex(texture: any) {\n return this.textures.indexOf(texture);\n }\n\n\n /**\n * 获取指定 index 中的纹理\n *\n * 注意:不是 cc.Texture2D\n */\n getTexture(index: number) {\n return this.textures[index];\n }\n\n\n /**\n * 获取空插槽 Index,没有返回 -1\n */\n getEmptyIndex() {\n if (!this.hasEmptySlot) return -1;\n const index = this.textures.indexOf(null);\n if (index !== -1) {\n return index;\n } else {\n this.hasEmptySlot = false;\n return -1;\n }\n }\n\n\n /**\n * 自动设置纹理到空插槽,返回插槽下标,失败返回 -1(提供 cc.Texture2D)\n */\n autoSetTexture(texture: any) {\n const index = this.getEmptyIndex();\n if (index === -1) {\n return -1;\n }\n\n this.setTexture(index, texture);\n return index;\n }\n\n}\n\n\ncc.sp.MultiHandler = MultiHandler;\n","cc.sp = {\n\n /**\n * 是否初始化完成\n */\n inited: false,\n\n /**\n * 版本号\n */\n version: \"1.0.0\",\n\n /**\n * 最大纹理插槽数量\n *\n * 固定为 8\n */\n MAX_MULTITEXTURE_NUM: -1,\n\n /**\n * 渲染组件是否默认自动切换至贴图关联的材质\n */\n autoSwitchMaterial: true,\n\n /**\n * 渲染组件是否默认参与动态合图\n */\n allowDynamicAtlas: true,\n\n /**\n * Label 组件是否默认启用渲染时进行缩放以适配高 DPI 屏幕\n */\n enableLabelRetina: true,\n\n /**\n * Label 组件渲染时进行缩放的缩放比例\n */\n labelRetinaScale: 1,\n\n /**\n * Char 图集会进行自动多纹理合批的数量\n */\n charAtlasAutoBatchCount: 1,\n\n /**\n * Char 图集是否在场景切换时清空\n */\n charAtlasAutoResetBeforeSceneLoad: true,\n\n /**\n * 内置的多纹理合批 Effect Asset\n */\n multi2dSpriteEffectAsset: null,\n\n /**\n * property index to name map\n */\n i2nMap: ['texture'],\n\n /**\n * property name to index map\n */\n n2iMap: { texture: 0 },\n\n /**\n * property index to name\n */\n propertyIndex2Name(index) {\n return this.i2nMap[index];\n },\n\n /**\n * property name to index\n */\n propertyName2Index(name) {\n return this.n2iMap[name];\n },\n\n};\n\n// 初始化\nfor (let i = 1; i < 8; i++) {\n const name = \"texture\" + (i + 1);\n cc.sp.i2nMap[i] = name;\n cc.sp.n2iMap[name] = i;\n}\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nrequire('../platform/CCSys');\n\nvar EXTNAME_RE = /(\\.[^\\.\\/\\?\\\\]*)(\\?.*)?$/;\nvar DIRNAME_RE = /((.*)(\\/|\\\\|\\\\\\\\))?(.*?\\..*$)?/;\nvar NORMALIZE_RE = /[^\\.\\/]+\\/\\.\\.\\//;\n\n/**\n * !#en The module provides utilities for working with file and directory paths\n * !#zh 用于处理文件与目录的路径的模块\n * @class path\n * @static\n */\ncc.path = /** @lends cc.path# */{\n /**\n * !#en Join strings to be a path.\n * !#zh 拼接字符串为 Path\n * @method join\n * @example {@link cocos2d/core/utils/CCPath/join.js}\n * @returns {String}\n */\n join: function () {\n var l = arguments.length;\n var result = \"\";\n for (var i = 0; i < l; i++) {\n result = (result + (result === \"\" ? \"\" : \"/\") + arguments[i]).replace(/(\\/|\\\\\\\\)$/, \"\");\n }\n return result;\n },\n\n /**\n * !#en Get the ext name of a path including '.', like '.png'.\n * !#zh 返回 Path 的扩展名,包括 '.',例如 '.png'。\n * @method extname\n * @example {@link cocos2d/core/utils/CCPath/extname.js}\n * @param {String} pathStr\n * @returns {*}\n */\n extname: function (pathStr) {\n var temp = EXTNAME_RE.exec(pathStr);\n return temp ? temp[1] : '';\n },\n\n /**\n * !#en Get the main name of a file name\n * !#zh 获取文件名的主名称\n * @method mainFileName\n * @param {String} fileName\n * @returns {String}\n * @deprecated\n */\n mainFileName: function (fileName) {\n if (fileName) {\n var idx = fileName.lastIndexOf(\".\");\n if (idx !== -1)\n return fileName.substring(0, idx);\n }\n return fileName;\n },\n\n /**\n * !#en Get the file name of a file path.\n * !#zh 获取文件路径的文件名。\n * @method basename\n * @example {@link cocos2d/core/utils/CCPath/basename.js}\n * @param {String} pathStr\n * @param {String} [extname]\n * @returns {*}\n */\n basename: function (pathStr, extname) {\n var index = pathStr.indexOf(\"?\");\n if (index > 0) pathStr = pathStr.substring(0, index);\n var reg = /(\\/|\\\\)([^\\/\\\\]+)$/g;\n var result = reg.exec(pathStr.replace(/(\\/|\\\\)$/, \"\"));\n if (!result) return pathStr;\n var baseName = result[2];\n if (extname && pathStr.substring(pathStr.length - extname.length).toLowerCase() === extname.toLowerCase())\n return baseName.substring(0, baseName.length - extname.length);\n return baseName;\n },\n\n /**\n * !#en Get dirname of a file path.\n * !#zh 获取文件路径的目录名。\n * @method dirname\n * @example {@link cocos2d/core/utils/CCPath/dirname.js}\n * @param {String} pathStr\n * @returns {*}\n */\n dirname: function (pathStr) {\n var temp = DIRNAME_RE.exec(pathStr);\n return temp ? temp[2] : '';\n },\n\n /**\n * !#en Change extname of a file path.\n * !#zh 更改文件路径的扩展名。\n * @method changeExtname\n * @example {@link cocos2d/core/utils/CCPath/changeExtname.js}\n * @param {String} pathStr\n * @param {String} [extname]\n * @returns {String}\n */\n changeExtname: function (pathStr, extname) {\n extname = extname || \"\";\n var index = pathStr.indexOf(\"?\");\n var tempStr = \"\";\n if (index > 0) {\n tempStr = pathStr.substring(index);\n pathStr = pathStr.substring(0, index);\n }\n index = pathStr.lastIndexOf(\".\");\n if (index < 0) return pathStr + extname + tempStr;\n return pathStr.substring(0, index) + extname + tempStr;\n },\n /**\n * !#en Change file name of a file path.\n * !#zh 更改文件路径的文件名。\n * @example {@link cocos2d/core/utils/CCPath/changeBasename.js}\n * @param {String} pathStr\n * @param {String} basename\n * @param {Boolean} [isSameExt]\n * @returns {String}\n */\n changeBasename: function (pathStr, basename, isSameExt) {\n if (basename.indexOf(\".\") === 0) return this.changeExtname(pathStr, basename);\n var index = pathStr.indexOf(\"?\");\n var tempStr = \"\";\n var ext = isSameExt ? this.extname(pathStr) : \"\";\n if (index > 0) {\n tempStr = pathStr.substring(index);\n pathStr = pathStr.substring(0, index);\n }\n index = pathStr.lastIndexOf(\"/\");\n index = index <= 0 ? 0 : index + 1;\n return pathStr.substring(0, index) + basename + ext + tempStr;\n },\n //todo make public after verification\n _normalize: function (url) {\n var oldUrl = url = String(url);\n\n //removing all ../\n do {\n oldUrl = url;\n url = url.replace(NORMALIZE_RE, \"\");\n } while (oldUrl.length !== url.length);\n return url;\n },\n\n // The platform-specific file separator. '\\\\' or '/'.\n sep: (cc.sys.os === cc.sys.OS_WINDOWS ? '\\\\' : '/'),\n\n // @param {string} path\n stripSep (path) {\n return path.replace(/[\\/\\\\]$/, '');\n }\n};\n\nmodule.exports = cc.path;","/****************************************************************************\n Copyright (c) 2008-2010 Ricardo Quesada\n Copyright (c) 2011-2012 cocos2d-x.org\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos2d-x.org\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * !#en\n * AffineTransform class represent an affine transform matrix. It's composed basically by translation, rotation, scale transformations.
\n * !#zh\n * AffineTransform 类代表一个仿射变换矩阵。它基本上是由平移旋转,缩放转变所组成。
\n * @class AffineTransform\n * @constructor\n * @param {Number} a\n * @param {Number} b\n * @param {Number} c\n * @param {Number} d\n * @param {Number} tx\n * @param {Number} ty\n * @see AffineTransform.create\n */\nvar AffineTransform = function (a, b, c, d, tx, ty) {\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.tx = tx;\n this.ty = ty;\n};\n\n/**\n * !#en Create a AffineTransform object with all contents in the matrix.\n * !#zh 用在矩阵中的所有内容创建一个 AffineTransform 对象。\n * @method create\n * @static\n * @param {Number} a\n * @param {Number} b\n * @param {Number} c\n * @param {Number} d\n * @param {Number} tx\n * @param {Number} ty\n * @return {AffineTransform}\n */\nAffineTransform.create = function (a, b, c, d, tx, ty) {\n return {a: a, b: b, c: c, d: d, tx: tx, ty: ty};\n};\n\n/**\n * !#en\n * Create a identity transformation matrix:
\n * [ 1, 0, 0,
\n * 0, 1, 0 ]\n * !#zh\n * 单位矩阵:
\n * [ 1, 0, 0,
\n * 0, 1, 0 ]\n *\n * @method identity\n * @static\n * @return {AffineTransform}\n */\nAffineTransform.identity = function () {\n return {a: 1.0, b: 0.0, c: 0.0, d: 1.0, tx: 0.0, ty: 0.0};\n};\n\n/**\n * !#en Clone a AffineTransform object from the specified transform.\n * !#zh 克隆指定的 AffineTransform 对象。\n * @method clone\n * @static\n * @param {AffineTransform} t\n * @return {AffineTransform}\n */\nAffineTransform.clone = function (t) {\n return {a: t.a, b: t.b, c: t.c, d: t.d, tx: t.tx, ty: t.ty};\n};\n\n/**\n * !#en\n * Concatenate a transform matrix to another\n * The results are reflected in the out affine transform\n * out = t1 * t2\n * This function is memory free, you should create the output affine transform by yourself and manage its memory.\n * !#zh\n * 拼接两个矩阵,将结果保存到 out 矩阵。这个函数不创建任何内存,你需要先创建 AffineTransform 对象用来存储结果,并作为第一个参数传入函数。\n * out = t1 * t2\n * @method concat\n * @static\n * @param {AffineTransform} out Out object to store the concat result\n * @param {AffineTransform} t1 The first transform object.\n * @param {AffineTransform} t2 The transform object to concatenate.\n * @return {AffineTransform} Out object with the result of concatenation.\n */\nAffineTransform.concat = function (out, t1, t2) {\n var a = t1.a, b = t1.b, c = t1.c, d = t1.d, tx = t1.tx, ty = t1.ty;\n out.a = a * t2.a + b * t2.c;\n out.b = a * t2.b + b * t2.d;\n out.c = c * t2.a + d * t2.c;\n out.d = c * t2.b + d * t2.d;\n out.tx = tx * t2.a + ty * t2.c + t2.tx;\n out.ty = tx * t2.b + ty * t2.d + t2.ty;\n return out;\n};\n\n/**\n * !#en Get the invert transform of an AffineTransform object.\n * This function is memory free, you should create the output affine transform by yourself and manage its memory.\n * !#zh 求逆矩阵。这个函数不创建任何内存,你需要先创建 AffineTransform 对象用来存储结果,并作为第一个参数传入函数。\n * @method invert\n * @static\n * @param {AffineTransform} out\n * @param {AffineTransform} t\n * @return {AffineTransform} Out object with inverted result.\n */\nAffineTransform.invert = function (out, t) {\n var a = t.a, b = t.b, c = t.c, d = t.d;\n var determinant = 1 / (a * d - b * c);\n var tx = t.tx, ty = t.ty;\n out.a = determinant * d;\n out.b = -determinant * b;\n out.c = -determinant * c;\n out.d = determinant * a;\n out.tx = determinant * (c * ty - d * tx);\n out.ty = determinant * (b * tx - a * ty);\n return out;\n};\n\n/**\n * !#en Get an AffineTransform object from a given matrix 4x4.\n * This function is memory free, you should create the output affine transform by yourself and manage its memory.\n * !#zh 从一个 4x4 Matrix 获取 AffineTransform 对象。这个函数不创建任何内存,你需要先创建 AffineTransform 对象用来存储结果,并作为第一个参数传入函数。\n * @method invert\n * @static\n * @param {AffineTransform} out\n * @param {Mat4} mat\n * @return {AffineTransform} Out object with inverted result.\n */\nAffineTransform.fromMat4 = function (out, mat) {\n let matm = mat.m;\n out.a = matm[0];\n out.b = matm[1];\n out.c = matm[4];\n out.d = matm[5];\n out.tx = matm[12];\n out.ty = matm[13];\n return out;\n};\n\n/**\n * !#en Apply the affine transformation on a point.\n * This function is memory free, you should create the output Vec2 by yourself and manage its memory.\n * !#zh 对一个点应用矩阵变换。这个函数不创建任何内存,你需要先创建一个 Vec2 对象用来存储结果,并作为第一个参数传入函数。\n * @method transformVec2\n * @static\n * @param {Vec2} out The output point to store the result\n * @param {Vec2|Number} point Point to apply transform or x.\n * @param {AffineTransform|Number} transOrY transform matrix or y.\n * @param {AffineTransform} [t] transform matrix.\n * @return {Vec2}\n */\nAffineTransform.transformVec2 = function (out, point, transOrY, t) {\n var x, y;\n if (t === undefined) {\n t = transOrY;\n x = point.x;\n y = point.y;\n } else {\n x = point;\n y = transOrY;\n }\n out.x = t.a * x + t.c * y + t.tx;\n out.y = t.b * x + t.d * y + t.ty;\n return out;\n};\n\n/**\n * !#en Apply the affine transformation on a size.\n * This function is memory free, you should create the output Size by yourself and manage its memory.\n * !#zh 应用仿射变换矩阵到 Size 上。这个函数不创建任何内存,你需要先创建一个 Size 对象用来存储结果,并作为第一个参数传入函数。\n * @method transformSize\n * @static\n * @param {Size} out The output point to store the result\n * @param {Size} size\n * @param {AffineTransform} t\n * @return {Size}\n */\nAffineTransform.transformSize = function (out, size, t) {\n out.width = t.a * size.width + t.c * size.height;\n out.height = t.b * size.width + t.d * size.height;\n return out;\n};\n\n/**\n * !#en Apply the affine transformation on a rect.\n * This function is memory free, you should create the output Rect by yourself and manage its memory.\n * !#zh 应用仿射变换矩阵到 Rect 上。这个函数不创建任何内存,你需要先创建一个 Rect 对象用来存储结果,并作为第一个参数传入函数。\n * @method transformRect\n * @static\n * @param {Rect} out\n * @param {Rect} rect\n * @param {AffineTransform} anAffineTransform\n * @return {Rect}\n */\nAffineTransform.transformRect = function(out, rect, t){\n var ol = rect.x;\n var ob = rect.y;\n var or = ol + rect.width;\n var ot = ob + rect.height;\n var lbx = t.a * ol + t.c * ob + t.tx;\n var lby = t.b * ol + t.d * ob + t.ty;\n var rbx = t.a * or + t.c * ob + t.tx;\n var rby = t.b * or + t.d * ob + t.ty;\n var ltx = t.a * ol + t.c * ot + t.tx;\n var lty = t.b * ol + t.d * ot + t.ty;\n var rtx = t.a * or + t.c * ot + t.tx;\n var rty = t.b * or + t.d * ot + t.ty;\n\n var minX = Math.min(lbx, rbx, ltx, rtx);\n var maxX = Math.max(lbx, rbx, ltx, rtx);\n var minY = Math.min(lby, rby, lty, rty);\n var maxY = Math.max(lby, rby, lty, rty);\n\n out.x = minX;\n out.y = minY;\n out.width = maxX - minX;\n out.height = maxY - minY;\n return out;\n};\n\n/**\n * !#en Apply the affine transformation on a rect, and truns to an Oriented Bounding Box.\n * This function is memory free, you should create the output vectors by yourself and manage their memory.\n * !#zh 应用仿射变换矩阵到 Rect 上, 并转换为有向包围盒。这个函数不创建任何内存,你需要先创建包围盒的四个 Vector 对象用来存储结果,并作为前四个参数传入函数。\n * @method transformObb\n * @static\n * @param {Vec2} out_bl\n * @param {Vec2} out_tl\n * @param {Vec2} out_tr\n * @param {Vec2} out_br\n * @param {Rect} rect\n * @param {AffineTransform} anAffineTransform\n */\nAffineTransform.transformObb = function (out_bl, out_tl, out_tr, out_br, rect, anAffineTransform) {\n var x = rect.x;\n var y = rect.y;\n var width = rect.width;\n var height = rect.height;\n\n var tx = anAffineTransform.a * x + anAffineTransform.c * y + anAffineTransform.tx;\n var ty = anAffineTransform.b * x + anAffineTransform.d * y + anAffineTransform.ty;\n var xa = anAffineTransform.a * width;\n var xb = anAffineTransform.b * width;\n var yc = anAffineTransform.c * height;\n var yd = anAffineTransform.d * height;\n\n out_tl.x = tx;\n out_tl.y = ty;\n out_tr.x = xa + tx;\n out_tr.y = xb + ty;\n out_bl.x = yc + tx;\n out_bl.y = yd + ty;\n out_br.x = xa + yc + tx;\n out_br.y = xb + yd + ty;\n};\n\ncc.AffineTransform = module.exports = AffineTransform;","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst Flags = require('../platform/CCObject').Flags;\nconst misc = require('./misc');\nconst js = require('../platform/js');\nconst IdGenerater = require('../platform/id-generater');\nconst eventManager = require('../event-manager');\nconst RenderFlow = require('../renderer/render-flow');\n\nconst Destroying = Flags.Destroying;\nconst DontDestroy = Flags.DontDestroy;\nconst Deactivating = Flags.Deactivating; \n\nconst CHILD_ADDED = 'child-added';\nconst CHILD_REMOVED = 'child-removed';\n\nvar idGenerater = new IdGenerater('Node');\n\nfunction getConstructor(typeOrClassName) {\n if (!typeOrClassName) {\n cc.errorID(3804);\n return null;\n }\n if (typeof typeOrClassName === 'string') {\n return js.getClassByName(typeOrClassName);\n }\n\n return typeOrClassName;\n}\n\nfunction findComponent(node, constructor) {\n if (constructor._sealed) {\n for (let i = 0; i < node._components.length; ++i) {\n let comp = node._components[i];\n if (comp.constructor === constructor) {\n return comp;\n }\n }\n }\n else {\n for (let i = 0; i < node._components.length; ++i) {\n let comp = node._components[i];\n if (comp instanceof constructor) {\n return comp;\n }\n }\n }\n return null;\n}\n\nfunction findComponents(node, constructor, components) {\n if (constructor._sealed) {\n for (let i = 0; i < node._components.length; ++i) {\n let comp = node._components[i];\n if (comp.constructor === constructor) {\n components.push(comp);\n }\n }\n }\n else {\n for (let i = 0; i < node._components.length; ++i) {\n let comp = node._components[i];\n if (comp instanceof constructor) {\n components.push(comp);\n }\n }\n }\n}\n\nfunction findChildComponent(children, constructor) {\n for (var i = 0; i < children.length; ++i) {\n var node = children[i];\n var comp = findComponent(node, constructor);\n if (comp) {\n return comp;\n }\n else if (node._children.length > 0) {\n comp = findChildComponent(node._children, constructor);\n if (comp) {\n return comp;\n }\n }\n }\n return null;\n}\n\nfunction findChildComponents(children, constructor, components) {\n for (var i = 0; i < children.length; ++i) {\n var node = children[i];\n findComponents(node, constructor, components);\n if (node._children.length > 0) {\n findChildComponents(node._children, constructor, components);\n }\n }\n}\n\n/**\n * A base node for CCNode, it will:\n * - maintain scene hierarchy and active logic\n * - notifications if some properties changed\n * - define some interfaces shares between CCNode\n * - define machanisms for Enity Component Systems\n * - define prefab and serialize functions\n *\n * @class _BaseNode\n * @extends Object\n * @uses EventTarget\n * @constructor\n * @param {String} [name]\n * @private\n */\nvar BaseNode = cc.Class({\n name: 'cc._BaseNode',\n extends: cc.Object,\n\n properties: {\n // SERIALIZABLE\n\n _parent: null,\n _children: [],\n\n _active: true,\n\n /**\n * @property _components\n * @type {Component[]}\n * @default []\n * @readOnly\n * @private\n */\n _components: [],\n\n /**\n * The PrefabInfo object\n * @property _prefab\n * @type {PrefabInfo}\n * @private\n */\n _prefab: null,\n\n /**\n * If true, the node is an persist node which won't be destroyed during scene transition.\n * If false, the node will be destroyed automatically when loading a new scene. Default is false.\n * @property _persistNode\n * @type {Boolean}\n * @default false\n * @private\n */\n _persistNode: {\n get () {\n return (this._objFlags & DontDestroy) > 0;\n },\n set (value) {\n if (value) {\n this._objFlags |= DontDestroy;\n }\n else {\n this._objFlags &= ~DontDestroy;\n }\n }\n },\n\n // API\n\n /**\n * !#en Name of node.\n * !#zh 该节点名称。\n * @property name\n * @type {String}\n * @example\n * node.name = \"New Node\";\n * cc.log(\"Node Name: \" + node.name);\n */\n name: {\n get () {\n return this._name;\n },\n set (value) {\n if (CC_DEV && value.indexOf('/') !== -1) {\n cc.errorID(1632);\n return;\n }\n this._name = value;\n if (CC_JSB && CC_NATIVERENDERER) {\n this._proxy.setName(this._name);\n }\n },\n },\n\n /**\n * !#en The uuid for editor, will be stripped before building project.\n * !#zh 主要用于编辑器的 uuid,在编辑器下可用于持久化存储,在项目构建之后将变成自增的 id。\n * @property uuid\n * @type {String}\n * @readOnly\n * @example\n * cc.log(\"Node Uuid: \" + node.uuid);\n */\n uuid: {\n get () {\n return this._id;\n }\n },\n\n /**\n * !#en All children nodes.\n * !#zh 节点的所有子节点。\n * @property children\n * @type {Node[]}\n * @readOnly\n * @example\n * var children = node.children;\n * for (var i = 0; i < children.length; ++i) {\n * cc.log(\"Node: \" + children[i]);\n * }\n */\n children: {\n get () {\n return this._children;\n }\n },\n\n /**\n * !#en All children nodes.\n * !#zh 节点的子节点数量。\n * @property childrenCount\n * @type {Number}\n * @readOnly\n * @example\n * var count = node.childrenCount;\n * cc.log(\"Node Children Count: \" + count);\n */\n childrenCount: {\n get () {\n return this._children.length;\n }\n },\n\n /**\n * !#en\n * The local active state of this node.
\n * Note that a Node may be inactive because a parent is not active, even if this returns true.
\n * Use {{#crossLink \"Node/activeInHierarchy:property\"}}{{/crossLink}} if you want to check if the Node is actually treated as active in the scene.\n * !#zh\n * 当前节点的自身激活状态。
\n * 值得注意的是,一个节点的父节点如果不被激活,那么即使它自身设为激活,它仍然无法激活。
\n * 如果你想检查节点在场景中实际的激活状态可以使用 {{#crossLink \"Node/activeInHierarchy:property\"}}{{/crossLink}}。\n * @property active\n * @type {Boolean}\n * @default true\n * @example\n * node.active = false;\n */\n active: {\n get () {\n return this._active;\n },\n set (value) {\n value = !!value;\n if (this._active !== value) {\n this._active = value;\n var parent = this._parent;\n if (parent) {\n var couldActiveInScene = parent._activeInHierarchy;\n if (couldActiveInScene) {\n cc.director._nodeActivator.activateNode(this, value);\n }\n }\n }\n }\n },\n\n /**\n * !#en Indicates whether this node is active in the scene.\n * !#zh 表示此节点是否在场景中激活。\n * @property activeInHierarchy\n * @type {Boolean}\n * @example\n * cc.log(\"activeInHierarchy: \" + node.activeInHierarchy);\n */\n activeInHierarchy: {\n get () {\n return this._activeInHierarchy;\n }\n },\n },\n\n /**\n * @method constructor\n * @param {String} [name]\n */\n ctor (name) {\n this._name = name !== undefined ? name : 'New Node';\n this._activeInHierarchy = false;\n this._id = CC_EDITOR ? Editor.Utils.UuidUtils.uuid() : idGenerater.getNewId();\n\n cc.director._scheduler && cc.director._scheduler.enableForTarget(this);\n\n /**\n * Register all related EventTargets,\n * all event callbacks will be removed in _onPreDestroy\n * @property __eventTargets\n * @type {EventTarget[]}\n * @private\n */\n this.__eventTargets = [];\n },\n /** \n * !#en The parent of the node.\n * !#zh 该节点的父节点。\n * @property {Node} parent\n * @example \n * cc.log(\"Node Parent: \" + node.parent);\n */\n\n /**\n * !#en Get parent of the node.\n * !#zh 获取该节点的父节点。\n * @method getParent\n * @return {Node}\n * @example\n * var parent = this.node.getParent();\n */\n getParent () {\n return this._parent;\n },\n\n /**\n * !#en Set parent of the node.\n * !#zh 设置该节点的父节点。\n * @method setParent\n * @param {Node} value\n * @example\n * node.setParent(newNode);\n */\n setParent (value) {\n if (this._parent === value) {\n return;\n }\n if (CC_EDITOR && cc.engine && !cc.engine.isPlaying) {\n if (_Scene.DetectConflict.beforeAddChild(this, value)) {\n return;\n }\n }\n var oldParent = this._parent;\n if (CC_DEBUG && oldParent && (oldParent._objFlags & Deactivating)) {\n cc.errorID(3821);\n }\n this._parent = value || null;\n\n this._onSetParent(value);\n\n if (value) {\n if (CC_DEBUG && (value._objFlags & Deactivating)) {\n cc.errorID(3821);\n }\n eventManager._setDirtyForNode(this);\n value._children.push(this);\n value.emit && value.emit(CHILD_ADDED, this);\n value._renderFlag |= RenderFlow.FLAG_CHILDREN;\n }\n if (oldParent) {\n if (!(oldParent._objFlags & Destroying)) {\n var removeAt = oldParent._children.indexOf(this);\n if (CC_DEV && removeAt < 0) {\n return cc.errorID(1633);\n }\n oldParent._children.splice(removeAt, 1);\n oldParent.emit && oldParent.emit(CHILD_REMOVED, this);\n this._onHierarchyChanged(oldParent);\n\n if (oldParent._children.length === 0) {\n oldParent._renderFlag &= ~RenderFlow.FLAG_CHILDREN;\n }\n }\n }\n else if (value) {\n this._onHierarchyChanged(null);\n }\n },\n\n // ABSTRACT INTERFACES\n\n /**\n * !#en\n * Properties configuration function
\n * All properties in attrs will be set to the node,
\n * when the setter of the node is available,
\n * the property will be set via setter function.
\n * !#zh 属性配置函数。在 attrs 的所有属性将被设置为节点属性。\n * @method attr\n * @param {Object} attrs - Properties to be set to node\n * @example\n * var attrs = { key: 0, num: 100 };\n * node.attr(attrs);\n */\n attr (attrs) {\n js.mixin(this, attrs);\n },\n\n // composition: GET\n\n /**\n * !#en Returns a child from the container given its uuid.\n * !#zh 通过 uuid 获取节点的子节点。\n * @method getChildByUuid\n * @param {String} uuid - The uuid to find the child node.\n * @return {Node} a Node whose uuid equals to the input parameter\n * @example\n * var child = node.getChildByUuid(uuid);\n */\n getChildByUuid (uuid) {\n if (!uuid) {\n cc.log(\"Invalid uuid\");\n return null;\n }\n\n var locChildren = this._children;\n for (var i = 0, len = locChildren.length; i < len; i++) {\n if (locChildren[i]._id === uuid)\n return locChildren[i];\n }\n return null;\n },\n\n /**\n * !#en Returns a child from the container given its name.\n * !#zh 通过名称获取节点的子节点。\n * @method getChildByName\n * @param {String} name - A name to find the child node.\n * @return {Node} a CCNode object whose name equals to the input parameter\n * @example\n * var child = node.getChildByName(\"Test Node\");\n */\n getChildByName (name) {\n if (!name) {\n cc.log(\"Invalid name\");\n return null;\n }\n\n var locChildren = this._children;\n for (var i = 0, len = locChildren.length; i < len; i++) {\n if (locChildren[i]._name === name)\n return locChildren[i];\n }\n return null;\n },\n\n // composition: ADD\n\n addChild (child) {\n\n if (CC_DEV && !(child instanceof cc._BaseNode)) {\n return cc.errorID(1634, cc.js.getClassName(child));\n }\n cc.assertID(child, 1606);\n cc.assertID(child._parent === null, 1605);\n\n // invokes the parent setter\n child.setParent(this);\n\n },\n\n /**\n * !#en\n * Inserts a child to the node at a specified index.\n * !#zh\n * 插入子节点到指定位置\n * @method insertChild\n * @param {Node} child - the child node to be inserted\n * @param {Number} siblingIndex - the sibling index to place the child in\n * @example\n * node.insertChild(child, 2);\n */\n insertChild (child, siblingIndex) {\n child.parent = this;\n child.setSiblingIndex(siblingIndex);\n },\n\n // HIERARCHY METHODS\n\n /**\n * !#en Get the sibling index.\n * !#zh 获取同级索引。\n * @method getSiblingIndex\n * @return {Number}\n * @example\n * var index = node.getSiblingIndex();\n */\n getSiblingIndex () {\n if (this._parent) {\n return this._parent._children.indexOf(this);\n }\n else {\n return 0;\n }\n },\n\n /**\n * !#en Set the sibling index of this node.\n * !#zh 设置节点同级索引。\n * @method setSiblingIndex\n * @param {Number} index\n * @example\n * node.setSiblingIndex(1);\n */\n setSiblingIndex (index) {\n if (!this._parent) {\n return;\n }\n if (this._parent._objFlags & Deactivating) {\n cc.errorID(3821);\n return;\n }\n var siblings = this._parent._children;\n index = index !== -1 ? index : siblings.length - 1;\n var oldIndex = siblings.indexOf(this);\n if (index !== oldIndex) {\n siblings.splice(oldIndex, 1);\n if (index < siblings.length) {\n siblings.splice(index, 0, this);\n }\n else {\n siblings.push(this);\n }\n this._onSiblingIndexChanged && this._onSiblingIndexChanged(index);\n }\n },\n\n /**\n * !#en Walk though the sub children tree of the current node.\n * Each node, including the current node, in the sub tree will be visited two times, before all children and after all children.\n * This function call is not recursive, it's based on stack.\n * Please don't walk any other node inside the walk process.\n * !#zh 遍历该节点的子树里的所有节点并按规则执行回调函数。\n * 对子树中的所有节点,包含当前节点,会执行两次回调,prefunc 会在访问它的子节点之前调用,postfunc 会在访问所有子节点之后调用。\n * 这个函数的实现不是基于递归的,而是基于栈展开递归的方式。\n * 请不要在 walk 过程中对任何其他的节点嵌套执行 walk。\n * @method walk\n * @param {Function} prefunc The callback to process node when reach the node for the first time\n * @param {_BaseNode} prefunc.target The current visiting node\n * @param {Function} postfunc The callback to process node when re-visit the node after walked all children in its sub tree\n * @param {_BaseNode} postfunc.target The current visiting node\n * @example\n * node.walk(function (target) {\n * console.log('Walked through node ' + target.name + ' for the first time');\n * }, function (target) {\n * console.log('Walked through node ' + target.name + ' after walked all children in its sub tree');\n * });\n */\n walk (prefunc, postfunc) {\n var BaseNode = cc._BaseNode;\n var index = 1;\n var children, child, curr, i, afterChildren;\n var stack = BaseNode._stacks[BaseNode._stackId];\n if (!stack) {\n stack = [];\n BaseNode._stacks.push(stack);\n }\n BaseNode._stackId++;\n\n stack.length = 0;\n stack[0] = this;\n var parent = null;\n afterChildren = false;\n while (index) {\n index--;\n curr = stack[index];\n if (!curr) {\n continue;\n }\n if (!afterChildren && prefunc) {\n // pre call\n prefunc(curr);\n }\n else if (afterChildren && postfunc) {\n // post call\n postfunc(curr);\n }\n \n // Avoid memory leak\n stack[index] = null;\n // Do not repeatly visit child tree, just do post call and continue walk\n if (afterChildren) {\n if (parent === this._parent) break;\n afterChildren = false;\n }\n else {\n // Children not proceeded and has children, proceed to child tree\n if (curr._children.length > 0) {\n parent = curr;\n children = curr._children;\n i = 0;\n stack[index] = children[i];\n index++;\n }\n // No children, then repush curr to be walked for post func\n else {\n stack[index] = curr;\n index++;\n afterChildren = true;\n }\n continue;\n }\n // curr has no sub tree, so look into the siblings in parent children\n if (children) {\n i++;\n // Proceed to next sibling in parent children\n if (children[i]) {\n stack[index] = children[i];\n index++;\n }\n // No children any more in this sub tree, go upward\n else if (parent) {\n stack[index] = parent;\n index++;\n // Setup parent walk env\n afterChildren = true;\n if (parent._parent) {\n children = parent._parent._children;\n i = children.indexOf(parent);\n parent = parent._parent;\n }\n else {\n // At root\n parent = null;\n children = null;\n }\n\n // ERROR\n if (i < 0) {\n break;\n }\n }\n }\n }\n stack.length = 0;\n BaseNode._stackId--;\n },\n\n cleanup () {\n\n },\n\n /**\n * !#en\n * Remove itself from its parent node. If cleanup is `true`, then also remove all events and actions.
\n * If the cleanup parameter is not passed, it will force a cleanup, so it is recommended that you always pass in the `false` parameter when calling this API.
\n * If the node orphan, then nothing happens.\n * !#zh\n * 从父节点中删除该节点。如果不传入 cleanup 参数或者传入 `true`,那么这个节点上所有绑定的事件、action 都会被删除。
\n * 因此建议调用这个 API 时总是传入 `false` 参数。
\n * 如果这个节点是一个孤节点,那么什么都不会发生。\n * @method removeFromParent\n * @param {Boolean} [cleanup=true] - true if all actions and callbacks on this node should be removed, false otherwise.\n * @example\n * node.removeFromParent();\n * node.removeFromParent(false);\n */\n removeFromParent (cleanup) {\n if (this._parent) {\n if (cleanup === undefined)\n cleanup = true;\n this._parent.removeChild(this, cleanup);\n }\n },\n\n /**\n * !#en\n * Removes a child from the container. It will also cleanup all running actions depending on the cleanup parameter.

\n * If the cleanup parameter is not passed, it will force a cleanup.
\n * \"remove\" logic MUST only be on this method
\n * If a class wants to extend the 'removeChild' behavior it only needs
\n * to override this method.\n * !#zh\n * 移除节点中指定的子节点,是否需要清理所有正在运行的行为取决于 cleanup 参数。
\n * 如果 cleanup 参数不传入,默认为 true 表示清理。
\n * @method removeChild\n * @param {Node} child - The child node which will be removed.\n * @param {Boolean} [cleanup=true] - true if all running actions and callbacks on the child node will be cleanup, false otherwise.\n * @example\n * node.removeChild(newNode);\n * node.removeChild(newNode, false);\n */\n removeChild (child, cleanup) {\n if (this._children.indexOf(child) > -1) {\n // If you don't do cleanup, the child's actions will not get removed and the\n if (cleanup || cleanup === undefined) {\n child.cleanup();\n }\n // invoke the parent setter\n child.parent = null;\n }\n },\n\n /**\n * !#en\n * Removes all children from the container and do a cleanup all running actions depending on the cleanup parameter.
\n * If the cleanup parameter is not passed, it will force a cleanup.\n * !#zh\n * 移除节点所有的子节点,是否需要清理所有正在运行的行为取决于 cleanup 参数。
\n * 如果 cleanup 参数不传入,默认为 true 表示清理。\n * @method removeAllChildren\n * @param {Boolean} [cleanup=true] - true if all running actions on all children nodes should be cleanup, false otherwise.\n * @example\n * node.removeAllChildren();\n * node.removeAllChildren(false);\n */\n removeAllChildren (cleanup) {\n // not using detachChild improves speed here\n var children = this._children;\n if (cleanup === undefined)\n cleanup = true;\n for (var i = children.length - 1; i >= 0; i--) {\n var node = children[i];\n if (node) {\n // If you don't do cleanup, the node's actions will not get removed and the\n if (cleanup)\n node.cleanup();\n\n node.parent = null;\n }\n }\n this._children.length = 0;\n },\n\n /**\n * !#en Is this node a child of the given node?\n * !#zh 是否是指定节点的子节点?\n * @method isChildOf\n * @param {Node} parent\n * @return {Boolean} - Returns true if this node is a child, deep child or identical to the given node.\n * @example\n * node.isChildOf(newNode);\n */\n isChildOf (parent) {\n var child = this;\n do {\n if (child === parent) {\n return true;\n }\n child = child._parent;\n }\n while (child);\n return false;\n },\n\n // COMPONENT\n\n /**\n * !#en\n * Returns the component of supplied type if the node has one attached, null if it doesn't.
\n * You can also get component in the node by passing in the name of the script.\n * !#zh\n * 获取节点上指定类型的组件,如果节点有附加指定类型的组件,则返回,如果没有则为空。
\n * 传入参数也可以是脚本的名称。\n * @method getComponent\n * @param {Function|String} typeOrClassName\n * @return {Component}\n * @example\n * // get sprite component\n * var sprite = node.getComponent(cc.Sprite);\n * // get custom test class\n * var test = node.getComponent(\"Test\");\n * @typescript\n * getComponent(type: {prototype: T}): T\n * getComponent(className: string): any\n */\n getComponent (typeOrClassName) {\n var constructor = getConstructor(typeOrClassName);\n if (constructor) {\n return findComponent(this, constructor);\n }\n return null;\n },\n\n /**\n * !#en Returns all components of supplied type in the node.\n * !#zh 返回节点上指定类型的所有组件。\n * @method getComponents\n * @param {Function|String} typeOrClassName\n * @return {Component[]}\n * @example\n * var sprites = node.getComponents(cc.Sprite);\n * var tests = node.getComponents(\"Test\");\n * @typescript\n * getComponents(type: {prototype: T}): T[]\n * getComponents(className: string): any[]\n */\n getComponents (typeOrClassName) {\n var constructor = getConstructor(typeOrClassName), components = [];\n if (constructor) {\n findComponents(this, constructor, components);\n }\n return components;\n },\n\n /**\n * !#en Returns the component of supplied type in any of its children using depth first search.\n * !#zh 递归查找所有子节点中第一个匹配指定类型的组件。\n * @method getComponentInChildren\n * @param {Function|String} typeOrClassName\n * @return {Component}\n * @example\n * var sprite = node.getComponentInChildren(cc.Sprite);\n * var Test = node.getComponentInChildren(\"Test\");\n * @typescript\n * getComponentInChildren(type: {prototype: T}): T\n * getComponentInChildren(className: string): any\n */\n getComponentInChildren (typeOrClassName) {\n var constructor = getConstructor(typeOrClassName);\n if (constructor) {\n return findChildComponent(this._children, constructor);\n }\n return null;\n },\n\n /**\n * !#en Returns all components of supplied type in self or any of its children.\n * !#zh 递归查找自身或所有子节点中指定类型的组件\n * @method getComponentsInChildren\n * @param {Function|String} typeOrClassName\n * @return {Component[]}\n * @example\n * var sprites = node.getComponentsInChildren(cc.Sprite);\n * var tests = node.getComponentsInChildren(\"Test\");\n * @typescript\n * getComponentsInChildren(type: {prototype: T}): T[]\n * getComponentsInChildren(className: string): any[]\n */\n getComponentsInChildren (typeOrClassName) {\n var constructor = getConstructor(typeOrClassName), components = [];\n if (constructor) {\n findComponents(this, constructor, components);\n findChildComponents(this._children, constructor, components);\n }\n return components;\n },\n\n _checkMultipleComp: (CC_EDITOR || CC_PREVIEW) && function (ctor) {\n var existing = this.getComponent(ctor._disallowMultiple);\n if (existing) {\n if (existing.constructor === ctor) {\n cc.errorID(3805, js.getClassName(ctor), this._name);\n }\n else {\n cc.errorID(3806, js.getClassName(ctor), this._name, js.getClassName(existing));\n }\n return false;\n }\n return true;\n },\n\n /**\n * !#en Adds a component class to the node. You can also add component to node by passing in the name of the script.\n * !#zh 向节点添加一个指定类型的组件类,你还可以通过传入脚本的名称来添加组件。\n * @method addComponent\n * @param {Function|String} typeOrClassName - The constructor or the class name of the component to add\n * @return {Component} - The newly added component\n * @example\n * var sprite = node.addComponent(cc.Sprite);\n * var test = node.addComponent(\"Test\");\n * @typescript\n * addComponent(type: {new(): T}): T\n * addComponent(className: string): any\n */\n addComponent (typeOrClassName) {\n if (CC_EDITOR && (this._objFlags & Destroying)) {\n cc.error('isDestroying');\n return null;\n }\n\n // get component\n\n var constructor;\n if (typeof typeOrClassName === 'string') {\n constructor = js.getClassByName(typeOrClassName);\n if (!constructor) {\n cc.errorID(3807, typeOrClassName);\n if (cc._RFpeek()) {\n cc.errorID(3808, typeOrClassName);\n }\n return null;\n }\n }\n else {\n if (!typeOrClassName) {\n cc.errorID(3804);\n return null;\n }\n constructor = typeOrClassName;\n }\n\n // check component\n\n if (typeof constructor !== 'function') {\n cc.errorID(3809);\n return null;\n }\n if (!js.isChildClassOf(constructor, cc.Component)) {\n cc.errorID(3810);\n return null;\n }\n\n if ((CC_EDITOR || CC_PREVIEW) && constructor._disallowMultiple) {\n if (!this._checkMultipleComp(constructor)) {\n return null;\n }\n }\n\n // check requirement\n\n var ReqComp = constructor._requireComponent;\n if (ReqComp && !this.getComponent(ReqComp)) {\n var depended = this.addComponent(ReqComp);\n if (!depended) {\n // depend conflicts\n return null;\n }\n }\n\n //// check conflict\n //\n //if (CC_EDITOR && !_Scene.DetectConflict.beforeAddComponent(this, constructor)) {\n // return null;\n //}\n\n //\n\n var component = new constructor();\n component.node = this;\n this._components.push(component);\n if ((CC_EDITOR || CC_TEST) && cc.engine && (this._id in cc.engine.attachedObjsForEditor)) {\n cc.engine.attachedObjsForEditor[component._id] = component;\n }\n if (this._activeInHierarchy) {\n cc.director._nodeActivator.activateComp(component);\n }\n\n return component;\n },\n\n /**\n * This api should only used by undo system\n * @method _addComponentAt\n * @param {Component} comp\n * @param {Number} index\n * @private\n */\n _addComponentAt: CC_EDITOR && function (comp, index) {\n if (this._objFlags & Destroying) {\n return cc.error('isDestroying');\n }\n if (!(comp instanceof cc.Component)) {\n return cc.errorID(3811);\n }\n if (index > this._components.length) {\n return cc.errorID(3812);\n }\n\n // recheck attributes because script may changed\n var ctor = comp.constructor;\n if (ctor._disallowMultiple) {\n if (!this._checkMultipleComp(ctor)) {\n return;\n }\n }\n var ReqComp = ctor._requireComponent;\n if (ReqComp && !this.getComponent(ReqComp)) {\n if (index === this._components.length) {\n // If comp should be last component, increase the index because required component added\n ++index;\n }\n var depended = this.addComponent(ReqComp);\n if (!depended) {\n // depend conflicts\n return null;\n }\n }\n\n comp.node = this;\n this._components.splice(index, 0, comp);\n if ((CC_EDITOR || CC_TEST) && cc.engine && (this._id in cc.engine.attachedObjsForEditor)) {\n cc.engine.attachedObjsForEditor[comp._id] = comp;\n }\n if (this._activeInHierarchy) {\n cc.director._nodeActivator.activateComp(comp);\n }\n },\n\n /**\n * !#en\n * Removes a component identified by the given name or removes the component object given.\n * You can also use component.destroy() if you already have the reference.\n * !#zh\n * 删除节点上的指定组件,传入参数可以是一个组件构造函数或组件名,也可以是已经获得的组件引用。\n * 如果你已经获得组件引用,你也可以直接调用 component.destroy()\n * @method removeComponent\n * @param {String|Function|Component} component - The need remove component.\n * @deprecated please destroy the component to remove it.\n * @example\n * node.removeComponent(cc.Sprite);\n * var Test = require(\"Test\");\n * node.removeComponent(Test);\n */\n removeComponent (component) {\n if (!component) {\n cc.errorID(3813);\n return;\n }\n if (!(component instanceof cc.Component)) {\n component = this.getComponent(component);\n }\n if (component) {\n component.destroy();\n }\n },\n\n /**\n * @method _getDependComponent\n * @param {Component} depended\n * @return {Component}\n * @private\n */\n _getDependComponent: CC_EDITOR && function (depended) {\n for (var i = 0; i < this._components.length; i++) {\n var comp = this._components[i];\n if (comp !== depended && comp.isValid && !cc.Object._willDestroy(comp)) {\n var depend = comp.constructor._requireComponent;\n if (depend && depended instanceof depend) {\n return comp;\n }\n }\n }\n return null;\n },\n\n // do remove component, only used internally\n _removeComponent (component) {\n if (!component) {\n cc.errorID(3814);\n return;\n }\n\n if (!(this._objFlags & Destroying)) {\n var i = this._components.indexOf(component);\n if (i !== -1) {\n this._components.splice(i, 1);\n if ((CC_EDITOR || CC_TEST) && cc.engine) {\n delete cc.engine.attachedObjsForEditor[component._id];\n }\n }\n else if (component.node !== this) {\n cc.errorID(3815);\n }\n }\n },\n\n destroy () {\n if (cc.Object.prototype.destroy.call(this)) {\n this.active = false;\n }\n },\n\n /**\n * !#en\n * Destroy all children from the node, and release all their own references to other objects.
\n * Actual destruct operation will delayed until before rendering.\n * !#zh\n * 销毁所有子节点,并释放所有它们对其它对象的引用。
\n * 实际销毁操作会延迟到当前帧渲染前执行。\n * @method destroyAllChildren\n * @example\n * node.destroyAllChildren();\n */\n destroyAllChildren () {\n var children = this._children;\n for (var i = 0; i < children.length; ++i) {\n children[i].destroy();\n }\n },\n\n _onSetParent (value) {},\n _onPostActivated () {},\n _onBatchCreated (dontSyncChildPrefab) {},\n\n _onHierarchyChanged (oldParent) {\n var newParent = this._parent;\n if (this._persistNode && !(newParent instanceof cc.Scene)) {\n cc.game.removePersistRootNode(this);\n if (CC_EDITOR) {\n cc.warnID(1623);\n }\n }\n\n if (CC_EDITOR || CC_TEST) {\n var scene = cc.director.getScene();\n var inCurrentSceneBefore = oldParent && oldParent.isChildOf(scene);\n var inCurrentSceneNow = newParent && newParent.isChildOf(scene);\n if (!inCurrentSceneBefore && inCurrentSceneNow) {\n // attached\n this._registerIfAttached(true);\n }\n else if (inCurrentSceneBefore && !inCurrentSceneNow) {\n // detached\n this._registerIfAttached(false);\n }\n\n // update prefab\n var newPrefabRoot = newParent && newParent._prefab && newParent._prefab.root;\n var myPrefabInfo = this._prefab;\n var PrefabUtils = Editor.require('scene://utils/prefab');\n if (myPrefabInfo) {\n if (newPrefabRoot) {\n if (myPrefabInfo.root !== newPrefabRoot) {\n if (myPrefabInfo.root === this) {\n // nest prefab\n myPrefabInfo.fileId || (myPrefabInfo.fileId = Editor.Utils.UuidUtils.uuid());\n PrefabUtils.checkCircularReference(myPrefabInfo.root);\n }\n else {\n // change prefab\n PrefabUtils.linkPrefab(newPrefabRoot._prefab.asset, newPrefabRoot, this);\n PrefabUtils.checkCircularReference(newPrefabRoot);\n }\n }\n }\n else if (myPrefabInfo.root === this) {\n // nested prefab to root prefab\n myPrefabInfo.fileId = ''; // root prefab doesn't have fileId\n }\n else {\n // detach from prefab\n PrefabUtils.unlinkPrefab(this);\n }\n }\n else if (newPrefabRoot) {\n // attach to prefab\n PrefabUtils.linkPrefab(newPrefabRoot._prefab.asset, newPrefabRoot, this);\n PrefabUtils.checkCircularReference(newPrefabRoot);\n }\n\n // conflict detection\n _Scene.DetectConflict.afterAddChild(this);\n }\n\n var shouldActiveNow = this._active && !!(newParent && newParent._activeInHierarchy);\n if (this._activeInHierarchy !== shouldActiveNow) {\n cc.director._nodeActivator.activateNode(this, shouldActiveNow);\n }\n },\n\n _instantiate (cloned, isSyncedNode) {\n if (!cloned) {\n cloned = cc.instantiate._clone(this, this);\n }\n\n var newPrefabInfo = cloned._prefab;\n if (CC_EDITOR && newPrefabInfo) {\n if (cloned === newPrefabInfo.root) {\n newPrefabInfo.fileId = '';\n }\n else {\n var PrefabUtils = Editor.require('scene://utils/prefab');\n PrefabUtils.unlinkPrefab(cloned);\n }\n }\n if (CC_EDITOR && cc.engine._isPlaying) {\n let syncing = newPrefabInfo && cloned === newPrefabInfo.root && newPrefabInfo.sync;\n if (!syncing) {\n cloned._name += ' (Clone)';\n }\n }\n\n // reset and init\n cloned._parent = null;\n cloned._onBatchCreated(isSyncedNode);\n\n return cloned;\n },\n\n _registerIfAttached: (CC_EDITOR || CC_TEST) && function (register) {\n var attachedObjsForEditor = cc.engine.attachedObjsForEditor;\n if (register) {\n attachedObjsForEditor[this._id] = this;\n for (let i = 0; i < this._components.length; i++) {\n let comp = this._components[i];\n attachedObjsForEditor[comp._id] = comp;\n }\n cc.engine.emit('node-attach-to-scene', this);\n }\n else {\n cc.engine.emit('node-detach-from-scene', this);\n delete attachedObjsForEditor[this._id];\n for (let i = 0; i < this._components.length; i++) {\n let comp = this._components[i];\n delete attachedObjsForEditor[comp._id];\n }\n }\n var children = this._children;\n for (let i = 0, len = children.length; i < len; ++i) {\n var child = children[i];\n child._registerIfAttached(register);\n }\n },\n\n _onPreDestroy () {\n var i, len;\n\n // marked as destroying\n this._objFlags |= Destroying;\n\n // detach self and children from editor\n var parent = this._parent;\n var destroyByParent = parent && (parent._objFlags & Destroying);\n if (!destroyByParent && (CC_EDITOR || CC_TEST)) {\n this._registerIfAttached(false);\n }\n\n // destroy children\n var children = this._children;\n for (i = 0, len = children.length; i < len; ++i) {\n // destroy immediate so its _onPreDestroy can be called\n children[i]._destroyImmediate();\n }\n\n // destroy self components\n for (i = 0, len = this._components.length; i < len; ++i) {\n var component = this._components[i];\n // destroy immediate so its _onPreDestroy can be called\n component._destroyImmediate();\n }\n\n var eventTargets = this.__eventTargets;\n for (i = 0, len = eventTargets.length; i < len; ++i) {\n var target = eventTargets[i];\n target && target.targetOff(this);\n }\n eventTargets.length = 0;\n\n // remove from persist\n if (this._persistNode) {\n cc.game.removePersistRootNode(this);\n }\n\n if (!destroyByParent) {\n // remove from parent\n if (parent) {\n var childIndex = parent._children.indexOf(this);\n parent._children.splice(childIndex, 1);\n parent.emit && parent.emit('child-removed', this);\n }\n }\n\n return destroyByParent;\n },\n\n onRestore: CC_EDITOR && function () {\n // check activity state\n var shouldActiveNow = this._active && !!(this._parent && this._parent._activeInHierarchy);\n if (this._activeInHierarchy !== shouldActiveNow) {\n cc.director._nodeActivator.activateNode(this, shouldActiveNow);\n }\n },\n});\n\nBaseNode.idGenerater = idGenerater;\n\n// For walk\nBaseNode._stacks = [[]];\nBaseNode._stackId = 0;\n\nBaseNode.prototype._onPreDestroyBase = BaseNode.prototype._onPreDestroy;\nif (CC_EDITOR) {\n BaseNode.prototype._onPreDestroy = function () {\n var destroyByParent = this._onPreDestroyBase();\n if (!destroyByParent) {\n // ensure this node can reattach to scene by undo system\n // (simulate some destruct logic to make undo system work correctly)\n this._parent = null;\n }\n return destroyByParent;\n };\n}\n\nBaseNode.prototype._onHierarchyChangedBase = BaseNode.prototype._onHierarchyChanged;\n\nif(CC_EDITOR) {\n BaseNode.prototype._onRestoreBase = BaseNode.prototype.onRestore;\n}\n\n// Define public getter and setter methods to ensure api compatibility.\nvar SameNameGetSets = ['parent', 'name', 'children', 'childrenCount',];\nmisc.propertyDefine(BaseNode, SameNameGetSets, {});\n\nif (CC_DEV) {\n // promote debug info\n js.get(BaseNode.prototype, ' INFO ', function () {\n var path = '';\n var node = this;\n while (node && !(node instanceof cc.Scene)) {\n if (path) {\n path = node.name + '/' + path;\n }\n else {\n path = node.name;\n }\n node = node._parent;\n }\n return this.name + ', path: ' + path;\n });\n}\n\n/**\n * !#en\n * Note: This event is only emitted from the top most node whose active value did changed,\n * not including its child nodes.\n * !#zh\n * 注意:此节点激活时,此事件仅从最顶部的节点发出。\n * @event active-in-hierarchy-changed\n * @param {Event.EventCustom} event\n */\n\ncc._BaseNode = module.exports = BaseNode;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar EPSILON = 1e-6;\n\n/**\n * Searches the entire sorted Array for an element and returns the index of the element.\n *\n * @method binarySearch\n * @param {number[]} array\n * @param {number} value\n * @return {number} The index of item in the sorted Array, if item is found; otherwise, a negative number that is the bitwise complement of the index of the next element that is larger than item or, if there is no larger element, the bitwise complement of array's length.\n */\n// function binarySearch (array, value) {\n// for (var l = 0, h = array.length - 1, m = h >>> 1;\n// l <= h;\n// m = (l + h) >>> 1\n// ) {\n// var test = array[m];\n// if (test > value) {\n// h = m - 1;\n// }\n// else if (test < value) {\n// l = m + 1;\n// }\n// else {\n// return m;\n// }\n// }\n// return ~l;\n// }\n\n/**\n * Searches the entire sorted Array for an element and returns the index of the element.\n * It accepts iteratee which is invoked for value and each element of array to compute their sort ranking.\n * The iteratee is invoked with one argument: (value).\n *\n * @method binarySearchBy\n * @param {number[]} array\n * @param {number} value\n * @param {function} iteratee - the iteratee invoked per element\n * @return {number} The index of item in the sorted Array, if item is found; otherwise, a negative number that is the bitwise complement of the index of the next element that is larger than item or, if there is no larger element, the bitwise complement of array's length.\n */\n// function binarySearchBy (array, value, iteratee) {\n// for (var l = 0, h = array.length - 1, m = h >>> 1;\n// l <= h;\n// m = (l + h) >>> 1\n// ) {\n// var test = iteratee(array[m]);\n// if (test > value) {\n// h = m - 1;\n// }\n// else if (test < value) {\n// l = m + 1;\n// }\n// else {\n// return m;\n// }\n// }\n// return ~l;\n// }\n\nfunction binarySearchEpsilon (array, value) {\n for (var l = 0, h = array.length - 1, m = h >>> 1;\n l <= h;\n m = (l + h) >>> 1\n ) {\n var test = array[m];\n if (test > value + EPSILON) {\n h = m - 1;\n }\n else if (test < value - EPSILON) {\n l = m + 1;\n }\n else {\n return m;\n }\n }\n return ~l;\n}\n\n\nmodule.exports = {\n binarySearchEpsilon\n};\n","\nconst RenderComponent = require('../components/CCRenderComponent');\nconst BlendFactor = require('../platform/CCMacro').BlendFactor;\nconst gfx = require('../../renderer/gfx');\n\n/**\n * !#en\n * Helper class for setting material blend function.\n * !#zh\n * 设置材质混合模式的辅助类。\n * @class BlendFunc\n */\nlet BlendFunc = cc.Class({\n properties: {\n _srcBlendFactor: BlendFactor.SRC_ALPHA,\n _dstBlendFactor: BlendFactor.ONE_MINUS_SRC_ALPHA,\n\n /**\n * !#en specify the source Blend Factor, this will generate a custom material object, please pay attention to the memory cost.\n * !#zh 指定原图的混合模式,这会克隆一个新的材质对象,注意这带来的开销\n * @property srcBlendFactor\n * @type {macro.BlendFactor}\n * @example\n * sprite.srcBlendFactor = cc.macro.BlendFactor.ONE;\n */\n srcBlendFactor: {\n get () {\n return this._srcBlendFactor;\n },\n set (value) {\n if (this._srcBlendFactor === value) return;\n this._srcBlendFactor = value;\n this._updateBlendFunc(true);\n this._onBlendChanged && this._onBlendChanged();\n },\n animatable: false,\n type: BlendFactor,\n tooltip: CC_DEV && 'i18n:COMPONENT.sprite.src_blend_factor',\n visible: true\n },\n\n /**\n * !#en specify the destination Blend Factor.\n * !#zh 指定目标的混合模式\n * @property dstBlendFactor\n * @type {macro.BlendFactor}\n * @example\n * sprite.dstBlendFactor = cc.macro.BlendFactor.ONE;\n */\n dstBlendFactor: {\n get () {\n return this._dstBlendFactor;\n },\n set (value) {\n if (this._dstBlendFactor === value) return;\n this._dstBlendFactor = value;\n this._updateBlendFunc(true);\n },\n animatable: false,\n type: BlendFactor,\n tooltip: CC_DEV && 'i18n:COMPONENT.sprite.dst_blend_factor',\n visible: true\n },\n },\n\n setMaterial (index, material) {\n let materialVar = RenderComponent.prototype.setMaterial.call(this, index, material);\n\n if (this._srcBlendFactor !== BlendFactor.SRC_ALPHA || this._dstBlendFactor !== BlendFactor.ONE_MINUS_SRC_ALPHA) {\n this._updateMaterialBlendFunc(materialVar);\n }\n\n return materialVar;\n },\n\n _updateMaterial () {\n this._updateBlendFunc();\n },\n\n _updateBlendFunc (force) {\n if (!force) {\n if (this._srcBlendFactor === BlendFactor.SRC_ALPHA && this._dstBlendFactor === BlendFactor.ONE_MINUS_SRC_ALPHA) {\n return;\n }\n }\n \n let materials = this.getMaterials();\n for (let i = 0; i < materials.length; i++) {\n let material = materials[i];\n this._updateMaterialBlendFunc(material);\n }\n },\n\n _updateMaterialBlendFunc (material) {\n material.setBlend(\n true,\n gfx.BLEND_FUNC_ADD,\n this._srcBlendFactor, this._dstBlendFactor,\n gfx.BLEND_FUNC_ADD,\n this._srcBlendFactor, this._dstBlendFactor\n );\n \n if (CC_JSB) {\n RenderComponent.prototype.markForRender.call(this, true);\n } \n },\n});\n\nmodule.exports = cc.BlendFunc = BlendFunc;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar Base64Values = require('./misc').BASE64_VALUES;\n\nvar HexChars = '0123456789abcdef'.split('');\n\nvar _t = ['', '', '', ''];\nvar UuidTemplate = _t.concat(_t, '-', _t, '-', _t, '-', _t, '-', _t, _t, _t);\nvar Indices = UuidTemplate.map(function (x, i) { return x === '-' ? NaN : i; }).filter(isFinite);\n\n// fcmR3XADNLgJ1ByKhqcC5Z -> fc991dd7-0033-4b80-9d41-c8a86a702e59\nmodule.exports = function (base64) {\n if (base64.length !== 22) {\n return base64;\n }\n UuidTemplate[0] = base64[0];\n UuidTemplate[1] = base64[1];\n for (var i = 2, j = 2; i < 22; i += 2) {\n var lhs = Base64Values[base64.charCodeAt(i)];\n var rhs = Base64Values[base64.charCodeAt(i + 1)];\n UuidTemplate[Indices[j++]] = HexChars[lhs >> 2];\n UuidTemplate[Indices[j++]] = HexChars[((lhs & 3) << 2) | rhs >> 4];\n UuidTemplate[Indices[j++]] = HexChars[rhs & 0xF];\n }\n return UuidTemplate.join('');\n};\n\nif (CC_TEST) {\n cc._Test.decodeUuid = module.exports;\n}\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * Finds a node by hierarchy path, the path is case-sensitive.\n * It will traverse the hierarchy by splitting the path using '/' character.\n * This function will still returns the node even if it is inactive.\n * It is recommended to not use this function every frame instead cache the result at startup.\n *\n * @method find\n * @static\n * @param {String} path\n * @param {Node} [referenceNode]\n * @return {Node|null} the node or null if not found\n */\ncc.find = module.exports = function (path, referenceNode) {\n if (path == null) {\n cc.errorID(3814);\n return null;\n }\n if (!referenceNode) {\n var scene = cc.director.getScene();\n if (!scene) {\n if (CC_DEV) {\n cc.warnID(5601);\n }\n return null;\n }\n else if (CC_DEV && !scene.isValid) {\n cc.warnID(5602);\n return null;\n }\n referenceNode = scene;\n }\n else if (CC_DEV && !referenceNode.isValid) {\n cc.warnID(5603);\n return null;\n }\n\n var match = referenceNode;\n var startIndex = (path[0] !== '/') ? 0 : 1; // skip first '/'\n var nameList = path.split('/');\n\n // parse path\n for (var n = startIndex; n < nameList.length; n++) {\n var name = nameList[n];\n var children = match._children;\n match = null;\n for (var t = 0, len = children.length; t < len; ++t) {\n var subChild = children[t];\n if (subChild.name === name) {\n match = subChild;\n break;\n }\n }\n if (!match) {\n return null;\n }\n }\n\n return match;\n};\n","\nimport MaterialVariant from '../assets/material/material-variant';\nconst Material = require('../assets/material/CCMaterial');\n\n/**\n * An internal helper class for switching render component's material between normal sprite material and gray sprite material.\n * @class GraySpriteState\n */\nlet GraySpriteState = cc.Class({\n properties: {\n _normalMaterial: null,\n\n /**\n * !#en The normal material.\n * !#zh 正常状态的材质。\n * @property normalMaterial\n * @type {Material}\n * @default null\n */\n normalMaterial: {\n get () {\n return this._normalMaterial;\n },\n set (val) {\n this._normalMaterial = val;\n this._updateDisabledState && this._updateDisabledState();\n },\n type: Material,\n tooltip: CC_DEV && 'i18n:COMPONENT.button.normal_material',\n animatable: false\n },\n\n _grayMaterial: null,\n\n /**\n * !#en The gray material.\n * !#zh 置灰状态的材质。\n * @property grayMaterial\n * @type {Material}\n * @default null\n */\n grayMaterial: {\n get () {\n return this._grayMaterial;\n },\n set (val) {\n this._grayMaterial = val;\n this._updateDisabledState && this._updateDisabledState();\n },\n type: Material,\n tooltip: CC_DEV && 'i18n:COMPONENT.button.gray_material',\n animatable: false\n }\n },\n \n _switchGrayMaterial (useGrayMaterial, renderComp) {\n let material;\n if (useGrayMaterial) {\n material = this._grayMaterial;\n if (!material) {\n material = Material.getBuiltinMaterial('2d-gray-sprite');\n }\n material = this._grayMaterial = MaterialVariant.create(material, renderComp);\n }\n else {\n material = this._normalMaterial;\n if (!material) {\n material = Material.getBuiltinMaterial('2d-sprite', renderComp);\n }\n material = this._normalMaterial = MaterialVariant.create(material, renderComp);\n }\n \n renderComp.setMaterial(0, material);\n }\n});\n\nmodule.exports = GraySpriteState;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar eventRegx = /^(click)(\\s)*=|(param)(\\s)*=/;\nvar imageAttrReg = /(\\s)*src(\\s)*=|(\\s)*height(\\s)*=|(\\s)*width(\\s)*=|(\\s)*align(\\s)*=|(\\s)*offset(\\s)*=|(\\s)*click(\\s)*=|(\\s)*param(\\s)*=/;\n/**\n * A utils class for parsing HTML texts. The parsed results will be an object array.\n */\nvar HtmlTextParser = function() {\n this._parsedObject = {};\n this._specialSymbolArray = [];\n this._specialSymbolArray.push([/</g, '<']);\n this._specialSymbolArray.push([/>/g, '>']);\n this._specialSymbolArray.push([/&/g, '&']);\n this._specialSymbolArray.push([/"/g, '\"']);\n this._specialSymbolArray.push([/'/g, '\\'']);\n this._specialSymbolArray.push([/ /g, ' ']);\n};\n\nHtmlTextParser.prototype = {\n constructor: HtmlTextParser,\n parse: function(htmlString) {\n this._resultObjectArray = [];\n this._stack = [];\n\n var startIndex = 0;\n var length = htmlString.length;\n while (startIndex < length) {\n var tagEndIndex = htmlString.indexOf('>', startIndex);\n var tagBeginIndex = -1;\n if (tagEndIndex >= 0) {\n tagBeginIndex = htmlString.lastIndexOf('<', tagEndIndex);\n var noTagBegin = tagBeginIndex < (startIndex - 1);\n\n if (noTagBegin) {\n tagBeginIndex = htmlString.indexOf('<', tagEndIndex + 1);\n tagEndIndex = htmlString.indexOf('>', tagBeginIndex + 1);\n }\n }\n\n if (tagBeginIndex < 0) {\n this._stack.pop();\n this._processResult(htmlString.substring(startIndex));\n startIndex = length;\n } else {\n var newStr = htmlString.substring(startIndex, tagBeginIndex);\n var tagStr = htmlString.substring(tagBeginIndex + 1, tagEndIndex);\n if (tagStr === \"\") newStr = htmlString.substring(startIndex, tagEndIndex + 1);\n this._processResult(newStr);\n if (tagEndIndex === -1) {\n // cc.error('The HTML tag is invalid!');\n tagEndIndex = tagBeginIndex;\n } else if (htmlString.charAt(tagBeginIndex + 1) === '\\/'){\n this._stack.pop();\n } else {\n this._addToStack(tagStr);\n }\n startIndex = tagEndIndex + 1;\n }\n }\n\n\n return this._resultObjectArray;\n },\n\n _attributeToObject: function (attribute) {\n attribute = attribute.trim();\n\n var obj = {};\n var header = attribute.match(/^(color|size)(\\s)*=/);\n var tagName;\n var nextSpace;\n var eventObj;\n var eventHanlderString;\n if (header) {\n tagName = header[0];\n attribute = attribute.substring(tagName.length).trim();\n if(attribute === \"\") return obj;\n\n //parse color\n nextSpace = attribute.indexOf(' ');\n switch(tagName[0]){\n case 'c':\n if (nextSpace > -1) {\n obj.color = attribute.substring(0, nextSpace).trim();\n } else {\n obj.color = attribute;\n }\n break;\n case 's':\n obj.size = parseInt(attribute);\n break;\n }\n\n //tag has event arguments\n if(nextSpace > -1) {\n eventHanlderString = attribute.substring(nextSpace+1).trim();\n eventObj = this._processEventHandler(eventHanlderString);\n obj.event = eventObj;\n }\n return obj;\n }\n\n header = attribute.match(/^(br(\\s)*\\/)/);\n if(header && header[0].length > 0) {\n tagName = header[0].trim();\n if(tagName.startsWith(\"br\") && tagName[tagName.length-1] === \"/\") {\n obj.isNewLine = true;\n this._resultObjectArray.push({text: \"\", style: {newline: true}});\n return obj;\n }\n }\n\n header = attribute.match(/^(img(\\s)*src(\\s)*=[^>]+\\/)/);\n if(header && header[0].length > 0) {\n tagName = header[0].trim();\n if(tagName.startsWith(\"img\") && tagName[tagName.length-1] === \"/\") {\n header = attribute.match(imageAttrReg);\n var tagValue;\n var remainingArgument;\n var isValidImageTag = false;\n while (header) {\n //skip the invalid tags at first\n attribute = attribute.substring(attribute.indexOf(header[0]));\n tagName = attribute.substr(0, header[0].length);\n //remove space and = character\n remainingArgument = attribute.substring(tagName.length).trim();\n nextSpace = remainingArgument.indexOf(' ');\n\n tagValue = (nextSpace > -1) ? remainingArgument.substr(0, nextSpace) : remainingArgument;\n tagName = tagName.replace(/[^a-zA-Z]/g, \"\").trim();\n tagName = tagName.toLocaleLowerCase();\n\n attribute = remainingArgument.substring(nextSpace).trim();\n if ( tagValue.endsWith( '\\/' ) ) tagValue = tagValue.slice( 0, -1 );\n if (tagName === \"src\") {\n switch (tagValue.charCodeAt(0)) {\n case 34: // \"\n case 39: // '\n isValidImageTag = true;\n tagValue = tagValue.slice(1, -1);\n break;\n }\n obj.isImage = true;\n obj.src = tagValue;\n } else if (tagName === \"height\") {\n obj.imageHeight = parseInt(tagValue);\n } else if (tagName === \"width\") {\n obj.imageWidth = parseInt(tagValue);\n } else if (tagName === \"align\") {\n switch (tagValue.charCodeAt(0)) {\n case 34: // \"\n case 39: // '\n tagValue = tagValue.slice(1, -1);\n break;\n }\n obj.imageAlign = tagValue.toLocaleLowerCase();\n } else if (tagName === \"offset\") {\n obj.imageOffset = tagValue;\n } else if (tagName === \"click\") {\n obj.event = this._processEventHandler(tagName + \"=\" + tagValue);\n }\n\n if (obj.event && tagName === 'param') {\n obj.event.param = tagValue.replace(/^\\\"|\\\"$/g, '');\n }\n\n header = attribute.match(imageAttrReg);\n }\n\n if( isValidImageTag && obj.isImage ) {\n this._resultObjectArray.push({text: \"\", style: obj});\n }\n\n return {};\n }\n }\n\n header = attribute.match(/^(outline(\\s)*[^>]*)/);\n if (header) {\n attribute = header[0].substring(\"outline\".length).trim();\n var defaultOutlineObject = {color: \"#ffffff\", width: 1};\n if (attribute) {\n var outlineAttrReg = /(\\s)*color(\\s)*=|(\\s)*width(\\s)*=|(\\s)*click(\\s)*=|(\\s)*param(\\s)*=/;\n header = attribute.match(outlineAttrReg);\n var tagValue;\n while (header) {\n //skip the invalid tags at first\n attribute = attribute.substring(attribute.indexOf(header[0]));\n tagName = attribute.substr(0, header[0].length);\n //remove space and = character\n remainingArgument = attribute.substring(tagName.length).trim();\n nextSpace = remainingArgument.indexOf(' ');\n if (nextSpace > -1) {\n tagValue = remainingArgument.substr(0, nextSpace);\n } else {\n tagValue = remainingArgument;\n }\n tagName = tagName.replace(/[^a-zA-Z]/g, \"\").trim();\n tagName = tagName.toLocaleLowerCase();\n\n attribute = remainingArgument.substring(nextSpace).trim();\n if (tagName === \"click\") {\n obj.event = this._processEventHandler(tagName + \"=\" + tagValue);\n } else if (tagName === \"color\") {\n defaultOutlineObject.color = tagValue;\n } else if (tagName === \"width\") {\n defaultOutlineObject.width = parseInt(tagValue);\n }\n\n if (obj.event && tagName === 'param') {\n obj.event.param = tagValue.replace(/^\\\"|\\\"$/g, '');\n }\n\n header = attribute.match(outlineAttrReg);\n }\n }\n obj.outline = defaultOutlineObject;\n }\n\n header = attribute.match(/^(on|u|b|i)(\\s)*/);\n if(header && header[0].length > 0) {\n tagName = header[0];\n attribute = attribute.substring(tagName.length).trim();\n switch(tagName[0]){\n case 'u':\n obj.underline = true;\n break;\n case 'i':\n obj.italic = true;\n break;\n case 'b':\n obj.bold = true;\n break;\n }\n if(attribute === \"\") {\n return obj;\n }\n eventObj = this._processEventHandler(attribute);\n obj.event = eventObj;\n }\n\n return obj;\n },\n\n _processEventHandler: function (eventString) {\n var index = 0;\n var obj = {};\n var eventNames = eventString.match(eventRegx);\n var isValidTag = false;\n while(eventNames) {\n var eventName = eventNames[0];\n var eventValue = \"\";\n isValidTag = false;\n eventString = eventString.substring(eventName.length).trim();\n if(eventString.charAt(0) === \"\\\"\") {\n index = eventString.indexOf(\"\\\"\", 1);\n if (index > -1) {\n eventValue = eventString.substring(1, index).trim();\n isValidTag = true;\n }\n index++;\n } else if(eventString.charAt(0) === \"\\'\") {\n index = eventString.indexOf('\\'', 1);\n if(index > -1) {\n eventValue = eventString.substring(1, index).trim();\n isValidTag = true;\n }\n index++;\n } else {\n //skip the invalid attribute value\n var match = eventString.match(/(\\S)+/);\n if(match) {\n eventValue = match[0];\n } else {\n eventValue = \"\";\n }\n index = eventValue.length;\n }\n\n if(isValidTag) {\n eventName = eventName.substring(0, eventName.length-1).trim();\n obj[eventName] = eventValue;\n }\n\n eventString = eventString.substring(index).trim();\n eventNames = eventString.match(eventRegx);\n }\n\n return obj;\n },\n\n _addToStack: function(attribute) {\n var obj = this._attributeToObject(attribute);\n\n if (this._stack.length === 0){\n this._stack.push(obj);\n } else {\n if(obj.isNewLine || obj.isImage) {\n return;\n }\n //for nested tags\n var previousTagObj = this._stack[this._stack.length - 1];\n for (var key in previousTagObj) {\n if (!(obj[key])) {\n obj[key] = previousTagObj[key];\n }\n }\n this._stack.push(obj);\n }\n },\n\n _processResult: function(value) {\n if (value === \"\") {\n return;\n }\n\n value = this._escapeSpecialSymbol(value);\n if (this._stack.length > 0) {\n this._resultObjectArray.push({text: value, style: this._stack[this._stack.length - 1]});\n } else {\n this._resultObjectArray.push({text: value});\n }\n },\n\n _escapeSpecialSymbol: function(str) {\n for(var i = 0; i < this._specialSymbolArray.length; ++i) {\n var key = this._specialSymbolArray[i][0];\n var value = this._specialSymbolArray[i][1];\n\n str = str.replace(key, value);\n }\n return str;\n }\n};\n\nif (CC_TEST) {\n cc._Test.HtmlTextParser = HtmlTextParser;\n}\n\nmodule.exports = HtmlTextParser;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n \nrequire('./CCPath');\nif (!CC_EDITOR) {\n require('./profiler/CCProfiler');\n}\nrequire('./find');\nrequire('./mutable-forward-iterator');\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar js = require('../platform/js');\n\n/**\n * misc utilities\n * @class misc\n * @static\n */\nvar misc = {};\n\nmisc.propertyDefine = function (ctor, sameNameGetSets, diffNameGetSets) {\n function define (np, propName, getter, setter) {\n var pd = Object.getOwnPropertyDescriptor(np, propName);\n if (pd) {\n if (pd.get) np[getter] = pd.get;\n if (pd.set && setter) np[setter] = pd.set;\n }\n else {\n var getterFunc = np[getter];\n if (CC_DEV && !getterFunc) {\n var clsName = (cc.Class._isCCClass(ctor) && js.getClassName(ctor)) ||\n ctor.name ||\n '(anonymous class)';\n cc.warnID(5700, propName, getter, clsName);\n }\n else {\n js.getset(np, propName, getterFunc, np[setter]);\n }\n }\n }\n var propName, np = ctor.prototype;\n for (var i = 0; i < sameNameGetSets.length; i++) {\n propName = sameNameGetSets[i];\n var suffix = propName[0].toUpperCase() + propName.slice(1);\n define(np, propName, 'get' + suffix, 'set' + suffix);\n }\n for (propName in diffNameGetSets) {\n var getset = diffNameGetSets[propName];\n define(np, propName, getset[0], getset[1]);\n }\n};\n\n/**\n * @param {Number} x\n * @return {Number}\n * Constructor\n */\nmisc.NextPOT = function (x) {\n x = x - 1;\n x = x | (x >> 1);\n x = x | (x >> 2);\n x = x | (x >> 4);\n x = x | (x >> 8);\n x = x | (x >> 16);\n return x + 1;\n};\n\n//var DirtyFlags = m.DirtyFlags = {\n// TRANSFORM: 1 << 0,\n// SIZE: 1 << 1,\n// //Visible:\n// //Color:\n// //Opacity\n// //Cache\n// //Order\n// //Text\n// //Gradient\n// ALL: (1 << 2) - 1\n//};\n//\n//DirtyFlags.WIDGET = DirtyFlags.TRANSFORM | DirtyFlags.SIZE;\n\nif (CC_EDITOR) {\n // use anonymous function here to ensure it will not being hoisted without CC_EDITOR\n\n misc.tryCatchFunctor_EDITOR = function (funcName) {\n return Function('target',\n 'try {\\n' +\n ' target.' + funcName + '();\\n' +\n '}\\n' +\n 'catch (e) {\\n' +\n ' cc._throw(e);\\n' +\n '}');\n };\n}\n\nmisc.BUILTIN_CLASSID_RE = /^(?:cc|dragonBones|sp|ccsg)\\..+/;\n\n\nvar BASE64_KEYS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\nvar BASE64_VALUES = new Array(123); // max char code in base64Keys\nfor (let i = 0; i < 123; ++i) BASE64_VALUES[i] = 64; // fill with placeholder('=') index\nfor (let i = 0; i < 64; ++i) BASE64_VALUES[BASE64_KEYS.charCodeAt(i)] = i;\n\n// decoded value indexed by base64 char code\nmisc.BASE64_VALUES = BASE64_VALUES;\n\n// set value to map, if key exists, push to array\nmisc.pushToMap = function (map, key, value, pushFront) {\n var exists = map[key];\n if (exists) {\n if (Array.isArray(exists)) {\n if (pushFront) {\n exists.push(exists[0]);\n exists[0] = value;\n }\n else {\n exists.push(value);\n }\n }\n else {\n map[key] = (pushFront ? [value, exists] : [exists, value]);\n }\n }\n else {\n map[key] = value;\n }\n};\n\n/**\n * !#en Clamp a value between from and to.\n * !#zh\n * 限定浮点数的最大最小值。
\n * 数值大于 max_inclusive 则返回 max_inclusive。
\n * 数值小于 min_inclusive 则返回 min_inclusive。
\n * 否则返回自身。\n * @method clampf\n * @param {Number} value\n * @param {Number} min_inclusive\n * @param {Number} max_inclusive\n * @return {Number}\n * @example\n * var v1 = cc.misc.clampf(20, 0, 20); // 20;\n * var v2 = cc.misc.clampf(-1, 0, 20); // 0;\n * var v3 = cc.misc.clampf(10, 0, 20); // 10;\n */\nmisc.clampf = function (value, min_inclusive, max_inclusive) {\n if (min_inclusive > max_inclusive) {\n var temp = min_inclusive;\n min_inclusive = max_inclusive;\n max_inclusive = temp;\n }\n return value < min_inclusive ? min_inclusive : value < max_inclusive ? value : max_inclusive;\n};\n\n/**\n * !#en Clamp a value between 0 and 1.\n * !#zh 限定浮点数的取值范围为 0 ~ 1 之间。\n * @method clamp01\n * @param {Number} value\n * @return {Number}\n * @example\n * var v1 = cc.misc.clamp01(20); // 1;\n * var v2 = cc.misc.clamp01(-1); // 0;\n * var v3 = cc.misc.clamp01(0.5); // 0.5;\n */\nmisc.clamp01 = function (value) {\n return value < 0 ? 0 : value < 1 ? value : 1;\n};\n\n/**\n * Linear interpolation between 2 numbers, the ratio sets how much it is biased to each end\n * @method lerp\n * @param {Number} a number A\n * @param {Number} b number B\n * @param {Number} r ratio between 0 and 1\n * @return {Number}\n * @example {@link cocos2d/core/platform/CCMacro/lerp.js}\n */\nmisc.lerp = function (a, b, r) {\n return a + (b - a) * r;\n};\n\n/**\n * converts degrees to radians\n * @param {Number} angle\n * @return {Number}\n * @method degreesToRadians\n */\nmisc.degreesToRadians = function (angle) {\n return angle * cc.macro.RAD;\n};\n\n/**\n * converts radians to degrees\n * @param {Number} angle\n * @return {Number}\n * @method radiansToDegrees\n */\nmisc.radiansToDegrees = function (angle) {\n return angle * cc.macro.DEG;\n};\n\ncc.misc = module.exports = misc;","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * @example\n * var array = [0, 1, 2, 3, 4];\n * var iterator = new cc.js.array.MutableForwardIterator(array);\n * for (iterator.i = 0; iterator.i < array.length; ++iterator.i) {\n * var item = array[iterator.i];\n * ...\n * }\n */\nfunction MutableForwardIterator (array) {\n this.i = 0;\n this.array = array;\n}\n\nvar proto = MutableForwardIterator.prototype;\n\nproto.remove = function (value) {\n var index = this.array.indexOf(value);\n if (index >= 0) {\n this.removeAt(index);\n }\n};\nproto.removeAt = function (i) {\n this.array.splice(i, 1);\n\n if (i <= this.i) {\n --this.i;\n }\n};\nproto.fastRemove = function (value) {\n var index = this.array.indexOf(value);\n if (index >= 0) {\n this.fastRemoveAt(index);\n }\n};\nproto.fastRemoveAt = function (i) {\n var array = this.array;\n array[i] = array[array.length - 1];\n --array.length;\n\n if (i <= this.i) {\n --this.i;\n }\n};\n\nproto.push = function (item) {\n this.array.push(item);\n};\n\n//js.getset(proto, 'length',\n// function () {\n// return this.array.length;\n// },\n// function (len) {\n// this.array.length = len;\n// if (this.i >= len) {\n// this.i = len - 1;\n// }\n// }\n//);\n\nmodule.exports = MutableForwardIterator;\n","\nexport default class Pool {\n enabled = false;\n count = 0;\n maxSize = 1024;\n\n get () {\n\n }\n put () {\n\n }\n clear () {\n\n }\n}\n\ncc.pool = {};\n\nPool.register = function (name, pool) {\n cc.pool[name] = pool;\n}\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\ncc._PrefabInfo = cc.Class({\n name: 'cc.PrefabInfo',\n // extends: require('../platform/CCObject'),\n properties: {\n // the most top node of this prefab\n root: null,\n\n // 所属的 prefab 资源对象 (cc.Prefab)\n // In Editor, only asset._uuid is usable because asset will be changed.\n asset: null,\n\n // To identify the node in the prefab asset, so only needs to be unique.\n // Not available in the root node.\n fileId: '',\n\n // Indicates whether this node should always synchronize with the prefab asset, only available in the root node\n sync: false,\n },\n});\n\n// prefab helper function\nmodule.exports = {\n // update node to make it sync with prefab\n syncWithPrefab: function (node) {\n var _prefab = node._prefab;\n\n if (!_prefab.asset) {\n if (CC_EDITOR) {\n var NodeUtils = Editor.require('scene://utils/node');\n var PrefabUtils = Editor.require('scene://utils/prefab');\n\n cc.warn(Editor.T('MESSAGE.prefab.missing_prefab', { node: NodeUtils.getNodePath(node) }));\n node.name += PrefabUtils.MISSING_PREFAB_SUFFIX;\n }\n else {\n cc.errorID(3701, node.name);\n }\n node._prefab = null;\n return;\n }\n\n // save root's preserved props to avoid overwritten by prefab\n var _objFlags = node._objFlags;\n var _parent = node._parent;\n var _id = node._id;\n var _name = node._name;\n var _active = node._active;\n var eulerAnglesX = node._eulerAngles.x;\n var eulerAnglesY = node._eulerAngles.y;\n var eulerAnglesZ = node._eulerAngles.z;\n var _localZOrder = node._localZOrder;\n var trs = node._trs;\n var x = trs[0];\n var y = trs[1];\n var z = trs[2];\n\n // instantiate prefab\n cc.game._isCloning = true;\n if (CC_SUPPORT_JIT) {\n _prefab.asset._doInstantiate(node);\n }\n else {\n // root in prefab asset is always synced\n var prefabRoot = _prefab.asset.data;\n\n // use node as the instantiated prefabRoot to make references to prefabRoot in prefab redirect to node\n prefabRoot._iN$t = node;\n\n // instantiate prefab and apply to node\n cc.instantiate._clone(prefabRoot, prefabRoot);\n }\n cc.game._isCloning = false;\n\n // restore preserved props\n node._objFlags = _objFlags;\n node._parent = _parent;\n node._id = _id;\n node._prefab = _prefab;\n node._name = _name;\n node._active = _active;\n node._localZOrder = _localZOrder;\n trs = node._trs;\n trs[0] = x;\n trs[1] = y;\n trs[2] = z;\n node._eulerAngles.x = eulerAnglesX;\n node._eulerAngles.y = eulerAnglesY;\n node._eulerAngles.z = eulerAnglesZ;\n }\n};\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nvar macro = require('../../platform/CCMacro');\n\nconst PerfCounter = require('./perf-counter');\n\nlet _showFPS = false;\nlet _fontSize = 15;\n\nlet _stats = null;\nlet _rootNode = null;\nlet _label = null;\n\nfunction generateStats () {\n if (_stats) return;\n \n _stats = {\n fps: { desc: 'Framerate (FPS)', below: 30, average: 500 },\n draws: { desc: 'Draw Call' },\n frame: { desc: 'Frame time (ms)', min: 0, max: 50, average: 500 },\n logic: { desc: 'Game Logic (ms)', min: 0, max: 50, average: 500, color: '#080' },\n render: { desc: 'Renderer (ms)', min: 0, max: 50, average: 500, color: '#f90' },\n mode: { desc: cc.game.renderType === cc.game.RENDER_TYPE_WEBGL ? 'WebGL' : 'Canvas', min: 1 }\n };\n\n let now = performance.now();\n for (let id in _stats) {\n _stats[id]._counter = new PerfCounter(id, _stats[id], now);\n }\n}\n\nfunction generateNode () {\n if (_rootNode && _rootNode.isValid) return;\n\n\n _rootNode = new cc.Node('PROFILER-NODE');\n _rootNode.x = _rootNode.y = 10;\n\n _rootNode.groupIndex = cc.Node.BuiltinGroupIndex.DEBUG;\n cc.Camera._setupDebugCamera();\n\n _rootNode.zIndex = macro.MAX_ZINDEX;\n cc.game.addPersistRootNode(_rootNode);\n\n let left = new cc.Node('LEFT-PANEL');\n left.anchorX = left.anchorY = 0;\n let leftLabel = left.addComponent(cc.Label);\n leftLabel.fontSize = _fontSize;\n leftLabel.lineHeight = _fontSize;\n left.parent = _rootNode;\n\n let right = new cc.Node('RIGHT-PANEL');\n right.anchorX = 1;\n right.anchorY = 0;\n right.x = 200;\n let rightLabel = right.addComponent(cc.Label);\n rightLabel.horizontalAlign = cc.Label.HorizontalAlign.RIGHT;\n rightLabel.fontSize = _fontSize;\n rightLabel.lineHeight = _fontSize;\n right.parent = _rootNode;\n if (cc.sys.platform !== cc.sys.BAIDU_GAME_SUB &&\n cc.sys.platform !== cc.sys.WECHAT_GAME_SUB) {\n leftLabel.cacheMode = cc.Label.CacheMode.CHAR;\n rightLabel.cacheMode = cc.Label.CacheMode.CHAR;\n }\n\n _label = {\n left: leftLabel,\n right: rightLabel\n };\n}\n\nfunction beforeUpdate () {\n generateNode();\n\n let now = cc.director._lastUpdate;\n _stats['frame']._counter.start(now);\n _stats['logic']._counter.start(now);\n}\n\nfunction afterUpdate () {\n let now = performance.now();\n if (cc.director.isPaused()) {\n _stats['frame']._counter.start(now);\n }\n else {\n _stats['logic']._counter.end(now);\n }\n _stats['render']._counter.start(now);\n}\n\nfunction updateLabel (stat) {\n let length = 20;\n let desc = stat.desc;\n let value = stat._counter.human() + '';\n stat.label.string = stat.desc + ' ' + stat._counter.human();\n}\n\nfunction afterDraw () {\n let now = performance.now();\n _stats['render']._counter.end(now);\n _stats['draws']._counter.value = cc.renderer.drawCalls;\n _stats['frame']._counter.end(now);\n _stats['fps']._counter.frame(now);\n \n let left = '';\n let right = '';\n for (let id in _stats) {\n let stat = _stats[id];\n stat._counter.sample(now);\n\n left += stat.desc + '\\n';\n right += stat._counter.human() + '\\n';\n }\n\n if (_label) {\n _label.left.string = left;\n _label.right.string = right;\n }\n}\n\ncc.profiler = module.exports = {\n isShowingStats () {\n return _showFPS;\n },\n\n hideStats () {\n if (_showFPS) {\n if (_rootNode) {\n _rootNode.active = false;\n }\n\n cc.director.off(cc.Director.EVENT_BEFORE_UPDATE, beforeUpdate);\n cc.director.off(cc.Director.EVENT_AFTER_UPDATE, afterUpdate);\n cc.director.off(cc.Director.EVENT_AFTER_DRAW, afterDraw);\n _showFPS = false;\n }\n },\n\n showStats () {\n if (!_showFPS) {\n generateStats();\n\n if (_rootNode) {\n _rootNode.active = true;\n }\n\n cc.director.on(cc.Director.EVENT_BEFORE_UPDATE, beforeUpdate);\n cc.director.on(cc.Director.EVENT_AFTER_UPDATE, afterUpdate);\n cc.director.on(cc.Director.EVENT_AFTER_DRAW, afterDraw);\n _showFPS = true;\n }\n }\n}\n","let Counter = cc.Class({\n name: 'cc.Counter',\n ctor (id, opts, now) {\n this._id = id;\n this._opts = opts || {};\n\n this._value = 0;\n this._total = 0;\n this._averageValue = 0;\n this._accumValue = 0;\n this._accumSamples = 0;\n this._accumStart = now;\n },\n\n properties: {\n value: {\n get () {\n return this._value;\n },\n set (v) {\n this._value = v;\n }\n }\n },\n\n _average (v, now) {\n if (this._opts.average) {\n this._accumValue += v;\n ++this._accumSamples;\n\n let t = now;\n if (t - this._accumStart >= this._opts.average) {\n this._averageValue = this._accumValue / this._accumSamples;\n this._accumValue = 0;\n this._accumStart = t;\n this._accumSamples = 0;\n }\n }\n },\n\n sample (now) {\n this._average(this._value, now);\n },\n\n human () {\n let v = this._opts.average ? this._averageValue : this._value;\n return Math.round(v * 100) / 100;\n },\n\n alarm () {\n return (\n (this._opts.below && this._value < this._opts.below) ||\n (this._opts.over && this._value > this._opts.over)\n );\n }\n})\n\nmodule.exports = Counter;\n","const Counter = require('./counter');\n\nlet PerfCounter = cc.Class({\n name: 'cc.PerfCounter',\n extends: Counter,\n \n ctor (id, opts, now) {\n // DISABLE\n // this._idstart = `${id}_start`;\n // this._idend = `${id}_end`;\n\n this._time = now;\n },\n\n start(now) {\n this._time = now;\n\n // DISABLE: long time running will cause performance drop down\n // window.performance.mark(this._idstart);\n },\n\n end(now) {\n this._value = now - this._time;\n\n // DISABLE: long time running will cause performance drop down\n // window.performance.mark(this._idend);\n // window.performance.measure(this._id, this._idstart, this._idend);\n\n this._average(this._value);\n },\n\n tick() {\n this.end();\n this.start();\n },\n\n frame(now) {\n let t = now;\n let e = t - this._time;\n this._total++;\n let avg = this._opts.average || 1000;\n\n if (e > avg) {\n this._value = this._total * 1000 / e;\n this._total = 0;\n this._time = t;\n this._average(this._value);\n }\n }\n});\n\nmodule.exports = PerfCounter;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport js from '../platform/js'\n\n// Draw text the textBaseline ratio (Can adjust the appropriate baseline ratio based on the platform)\nlet _BASELINE_RATIO = 0.26;\nlet _BASELINE_OFFSET = 0;\nif (CC_RUNTIME) {\n _BASELINE_OFFSET = _BASELINE_RATIO * 2 / 3;\n}\n\nconst MAX_CACHE_SIZE = 100;\n\nlet pool = new js.Pool(2);\npool.get = function () {\n var node = this._get() || {\n key: null,\n value: null,\n prev: null,\n next: null\n };\n\n return node;\n};\n\nfunction LRUCache(size) {\n this.count = 0;\n this.limit = size;\n this.datas = {};\n this.head = null;\n this.tail = null;\n}\n\nLRUCache.prototype.moveToHead = function (node) {\n node.next = this.head;\n node.prev = null;\n if (this.head !== null) \n this.head.prev = node;\n this.head = node;\n if (this.tail === null) \n this.tail = node;\n this.count++;\n this.datas[node.key] = node;\n}\n\nLRUCache.prototype.put = function (key, value) {\n const node = pool.get();\n node.key = key;\n node.value = value;\n \n if (this.count >= this.limit) {\n let discard = this.tail;\n delete this.datas[discard.key];\n this.count--;\n this.tail = discard.prev;\n this.tail.next = null;\n discard.prev = null;\n discard.next = null;\n pool.put(discard);\n }\n this.moveToHead(node);\n}\n\nLRUCache.prototype.remove = function (node) {\n if (node.prev !== null) {\n node.prev.next = node.next;\n } else {\n this.head = node.next;\n }\n if (node.next !== null) {\n node.next.prev = node.prev;\n } else {\n this.tail = node.prev;\n }\n delete this.datas[node.key];\n this.count--;\n}\n\nLRUCache.prototype.get = function (key) {\n const node = this.datas[key];\n if (node) {\n this.remove(node);\n this.moveToHead(node);\n return node.value;\n }\n return null;\n}\n\nLRUCache.prototype.clear = function () {\n this.count = 0;\n this.datas = {};\n this.head = null;\n this.tail = null;\n}\n\nLRUCache.prototype.has = function (key) {\n return !!this.datas[key];\n}\n\nLRUCache.prototype.delete = function (key) {\n const node = this.datas[key];\n this.remove(node);\n}\n\nlet measureCache = new LRUCache(MAX_CACHE_SIZE);\n\nvar textUtils = {\n\n BASELINE_RATIO: _BASELINE_RATIO,\n MIDDLE_RATIO: (_BASELINE_RATIO + 1) / 2 - _BASELINE_RATIO,\n BASELINE_OFFSET: _BASELINE_OFFSET,\n\n label_wordRex : /([a-zA-Z0-9ÄÖÜäöüßéèçàùêâîôûа-яА-ЯЁё]+|\\S)/,\n label_symbolRex : /^[!,.:;'}\\]%\\?>、‘“》?。,!]/,\n label_lastWordRex : /([a-zA-Z0-9ÄÖÜäöüßéèçàùêâîôûаíìÍÌïÁÀáàÉÈÒÓòóŐőÙÚŰúűñÑæÆœŒÃÂãÔõěščřžýáíéóúůťďňĚŠČŘŽÁÍÉÓÚŤżźśóńłę湯ŹŚÓŃŁĘĆĄ-яА-ЯЁё]+|\\S)$/,\n label_lastEnglish : /[a-zA-Z0-9ÄÖÜäöüßéèçàùêâîôûаíìÍÌïÁÀáàÉÈÒÓòóŐőÙÚŰúűñÑæÆœŒÃÂãÔõěščřžýáíéóúůťďňĚŠČŘŽÁÍÉÓÚŤżźśóńłę湯ŹŚÓŃŁĘĆĄ-яА-ЯЁё]+$/,\n label_firstEnglish : /^[a-zA-Z0-9ÄÖÜäöüßéèçàùêâîôûаíìÍÌïÁÀáàÉÈÒÓòóŐőÙÚŰúűñÑæÆœŒÃÂãÔõěščřžýáíéóúůťďňĚŠČŘŽÁÍÉÓÚŤżźśóńłę湯ŹŚÓŃŁĘĆĄ-яА-ЯЁё]/,\n // The unicode standard will never assign a character from code point 0xD800 to 0xDFFF\n // high surrogate (0xD800-0xDBFF) and low surrogate(0xDC00-0xDFFF) combines to a character on the Supplementary Multilingual Plane\n // reference: https://en.wikipedia.org/wiki/UTF-16\n highSurrogateRex: /[\\uD800-\\uDBFF]/,\n lowSurrogateRex: /[\\uDC00-\\uDFFF]/,\n label_wrapinspection : true,\n\n __CHINESE_REG: /^[\\u4E00-\\u9FFF\\u3400-\\u4DFF]+$/,\n __JAPANESE_REG: /[\\u3000-\\u303F]|[\\u3040-\\u309F]|[\\u30A0-\\u30FF]|[\\uFF00-\\uFFEF]|[\\u4E00-\\u9FAF]|[\\u2605-\\u2606]|[\\u2190-\\u2195]|\\u203B/g,\n __KOREAN_REG: /^[\\u1100-\\u11FF]|[\\u3130-\\u318F]|[\\uA960-\\uA97F]|[\\uAC00-\\uD7AF]|[\\uD7B0-\\uD7FF]+$/,\n\n isUnicodeCJK: function(ch) {\n return this.__CHINESE_REG.test(ch) || this.__JAPANESE_REG.test(ch) || this.__KOREAN_REG.test(ch);\n },\n\n //Checking whether the character is a whitespace\n isUnicodeSpace: function(ch) {\n ch = ch.charCodeAt(0);\n return ((ch >= 9 && ch <= 13) || ch === 32 || ch === 133 || ch === 160 || ch === 5760 || (ch >= 8192 && ch <= 8202) || ch === 8232 || ch === 8233 || ch === 8239 || ch === 8287 || ch === 12288);\n },\n\n safeMeasureText: function (ctx, string, desc) {\n let font = desc || ctx.font;\n let key = font + \"\\uD83C\\uDFAE\" + string;\n let cache = measureCache.get(key);\n if (cache !== null) {\n return cache;\n }\n\n let metric = ctx.measureText(string);\n let width = metric && metric.width || 0;\n measureCache.put(key, width);\n\n return width;\n },\n\n // in case truncate a character on the Supplementary Multilingual Plane\n // test case: a = '😉🚗'\n // _safeSubstring(a, 1) === '😉🚗'\n // _safeSubstring(a, 0, 1) === '😉'\n // _safeSubstring(a, 0, 2) === '😉'\n // _safeSubstring(a, 0, 3) === '😉'\n // _safeSubstring(a, 0, 4) === '😉🚗'\n // _safeSubstring(a, 1, 2) === _safeSubstring(a, 1, 3) === '😉'\n // _safeSubstring(a, 2, 3) === _safeSubstring(a, 2, 4) === '🚗'\n _safeSubstring (targetString, startIndex, endIndex) {\n let newStartIndex = startIndex, newEndIndex = endIndex;\n let startChar = targetString[startIndex];\n if (this.lowSurrogateRex.test(startChar)) {\n newStartIndex--;\n }\n if (endIndex !== undefined) {\n if (endIndex - 1 !== startIndex) {\n let endChar = targetString[endIndex - 1];\n if (this.highSurrogateRex.test(endChar)) {\n newEndIndex--;\n }\n }\n else if (this.highSurrogateRex.test(startChar)) {\n newEndIndex++;\n }\n }\n return targetString.substring(newStartIndex, newEndIndex);\n },\n\n fragmentText: function (stringToken, allWidth, maxWidth, measureText) {\n //check the first character\n var wrappedWords = [];\n //fast return if strArr is empty\n if(stringToken.length === 0 || maxWidth < 0) {\n wrappedWords.push('');\n return wrappedWords;\n }\n\n var text = stringToken;\n while (allWidth > maxWidth && text.length > 1) {\n\n var fuzzyLen = text.length * ( maxWidth / allWidth ) | 0;\n var tmpText = this._safeSubstring(text, fuzzyLen);\n var width = allWidth - measureText(tmpText);\n var sLine = tmpText;\n var pushNum = 0;\n\n var checkWhile = 0;\n var checkCount = 10;\n\n //Exceeded the size\n while (width > maxWidth && checkWhile++ < checkCount) {\n fuzzyLen *= maxWidth / width;\n fuzzyLen = fuzzyLen | 0;\n tmpText = this._safeSubstring(text, fuzzyLen);\n width = allWidth - measureText(tmpText);\n }\n\n checkWhile = 0;\n\n //Find the truncation point\n while (width <= maxWidth && checkWhile++ < checkCount) {\n if (tmpText) {\n var exec = this.label_wordRex.exec(tmpText);\n pushNum = exec ? exec[0].length : 1;\n sLine = tmpText;\n }\n\n fuzzyLen = fuzzyLen + pushNum;\n tmpText = this._safeSubstring(text, fuzzyLen);\n width = allWidth - measureText(tmpText);\n }\n\n fuzzyLen -= pushNum;\n // in case maxWidth cannot contain any characters, need at least one character per line\n if (fuzzyLen === 0) {\n fuzzyLen = 1;\n sLine = this._safeSubstring(text, 1);\n }\n else if (fuzzyLen === 1 && this.highSurrogateRex.test(text[0])) {\n fuzzyLen = 2;\n sLine = this._safeSubstring(text, 2);\n }\n\n var sText = this._safeSubstring(text, 0, fuzzyLen), result;\n\n //symbol in the first\n if (this.label_wrapinspection) {\n if (this.label_symbolRex.test(sLine || tmpText)) {\n result = this.label_lastWordRex.exec(sText);\n fuzzyLen -= result ? result[0].length : 0;\n if (fuzzyLen === 0) fuzzyLen = 1;\n\n sLine = this._safeSubstring(text, fuzzyLen);\n sText = this._safeSubstring(text, 0, fuzzyLen);\n }\n }\n\n //To judge whether a English words are truncated\n if (this.label_firstEnglish.test(sLine)) {\n result = this.label_lastEnglish.exec(sText);\n if (result && sText !== result[0]) {\n fuzzyLen -= result[0].length;\n sLine = this._safeSubstring(text, fuzzyLen);\n sText = this._safeSubstring(text, 0, fuzzyLen);\n }\n }\n\n // The first line And do not wrap should not remove the space\n if (wrappedWords.length === 0) {\n wrappedWords.push(sText);\n }\n else {\n sText = sText.trimLeft();\n if (sText.length > 0) {\n wrappedWords.push(sText);\n }\n }\n text = sLine || tmpText;\n allWidth = measureText(text);\n }\n\n if (wrappedWords.length === 0) {\n wrappedWords.push(text);\n }\n else {\n text = text.trimLeft();\n if (text.length > 0) {\n wrappedWords.push(text);\n }\n }\n return wrappedWords;\n },\n};\n\ncc.textUtils = module.exports = textUtils;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst Texture2D = require('../assets/CCTexture2D');\n\nlet textureUtil = {\n loadImage (url, cb, target) {\n cc.assertID(url, 3103);\n\n var tex = cc.assetManager.assets.get(url);\n if (tex) {\n if (tex.loaded) {\n cb && cb.call(target, null, tex);\n return tex;\n }\n else\n {\n tex.once(\"load\", function(){\n cb && cb.call(target, null, tex);\n }, target);\n return tex;\n }\n }\n else {\n cc.assetManager.loadRemote(url, function (err, texture) {\n cb && cb.call(target, err, texture);\n });\n }\n },\n\n cacheImage (url, image) {\n if (url && image) {\n var tex = new Texture2D();\n tex.initWithElement(image);\n cc.assetManager.assets.add(url, tex);\n return tex;\n }\n },\n\n postLoadTexture (texture, callback) {\n if (texture.loaded) {\n callback && callback();\n return;\n }\n if (!texture.nativeUrl) {\n callback && callback();\n return;\n }\n // load image\n cc.assetManager.postLoadNative(texture, callback);\n }\n};\n\nmodule.exports = textureUtil;","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nlet NodeUnit = require('./node-unit');\nlet NodeMemPool = require('./node-mem-pool');\n\nmodule.exports = {\n NodeMemPool: new NodeMemPool(NodeUnit)\n};","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nlet MemPool = function (unitClass) {\n this._unitClass = unitClass;\n this._pool = [];\n this._findOrder = [];\n\n if (CC_JSB && CC_NATIVERENDERER) {\n this._initNative();\n }\n};\n\nlet proto = MemPool.prototype;\nproto._initNative = function () {\n this._nativeMemPool = new renderer.MemPool();\n};\n\nproto._buildUnit = function (unitID) {\n let unit = new this._unitClass(unitID, this);\n if (CC_JSB && CC_NATIVERENDERER) {\n this._nativeMemPool.updateCommonData(unitID, unit._data, unit._signData);\n }\n return unit;\n};\n\nproto._destroyUnit = function (unitID) {\n this._pool[unitID] = null;\n for (let idx = 0, n = this._findOrder.length; idx < n; idx++) {\n let unit = this._findOrder[idx];\n if (unit && unit.unitID == unitID) {\n this._findOrder.splice(idx, 1);\n break;\n }\n }\n if (CC_JSB && CC_NATIVERENDERER) {\n this._nativeMemPool.removeCommonData(unitID);\n }\n};\n\nproto._findUnitID = function () {\n let unitID = 0;\n let pool = this._pool;\n while (pool[unitID]) unitID++;\n return unitID;\n};\n\nproto.pop = function () {\n let findUnit = null;\n let idx = 0;\n let findOrder = this._findOrder;\n let pool = this._pool;\n for (let n = findOrder.length; idx < n; idx++) {\n let unit = findOrder[idx];\n if (unit && unit.hasSpace()) {\n findUnit = unit;\n break;\n }\n }\n\n if (!findUnit) {\n let unitID = this._findUnitID();\n findUnit = this._buildUnit(unitID);\n pool[unitID] = findUnit;\n findOrder.push(findUnit);\n idx = findOrder.length - 1;\n }\n\n // swap has space unit to first position, so next find will fast\n let firstUnit = findOrder[0];\n if (firstUnit !== findUnit) {\n findOrder[0] = findUnit;\n findOrder[idx] = firstUnit;\n }\n\n return findUnit.pop();\n};\n\nproto.push = function (info) {\n let unit = this._pool[info.unitID];\n unit.push(info.index);\n if (this._findOrder.length > 1 && unit.isAllFree()) {\n this._destroyUnit(info.unitID);\n }\n return unit;\n};\nmodule.exports = MemPool;","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nlet MemPool = require('./mem-pool');\nlet NodeMemPool = function (unitClass) {\n MemPool.call(this, unitClass);\n};\n\n(function(){\n let Super = function(){};\n Super.prototype = MemPool.prototype;\n NodeMemPool.prototype = new Super();\n})();\n\nlet proto = NodeMemPool.prototype;\nproto._initNative = function () {\n this._nativeMemPool = new renderer.NodeMemPool();\n};\n\nproto._destroyUnit = function (unitID) {\n MemPool.prototype._destroyUnit.call(this, unitID);\n if (CC_JSB && CC_NATIVERENDERER) {\n this._nativeMemPool.removeNodeData(unitID);\n }\n};\n\nmodule.exports = NodeMemPool;","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport { FLOAT_ARRAY_TYPE, FLOAT_BYTES } from '../../value-types/utils'\n\nconst Uint32_Bytes = 4;\nconst Uint8_Bytes = 1;\n\n// Space : [Dirty] [Size:4 Uint32]\nconst Dirty_Type = Uint32Array;\nconst Dirty_Members = 1;\nconst Dirty_Stride = Dirty_Members * Uint32_Bytes;\n\n// Space : [TRS] [Size:4 * 10 Float32|Float64]\nconst TRS_Members = 10;\nconst TRS_Stride = TRS_Members * FLOAT_BYTES;\n\n// Space : [LocalMatrix] [Size:4 * 16 Float32|Float64]\nconst LocalMatrix_Members = 16;\nconst LocalMatrix_Stride = LocalMatrix_Members * FLOAT_BYTES;\n\n// Space : [WorldMatrix] [Size:4 * 16 Float32|Float64]\nconst WorldMatrix_Members = 16;\nconst WorldMatrix_Stride = WorldMatrix_Members * FLOAT_BYTES;\n\n// Space : [Parent Unit] [Size:4 Uint32]\n// Space : [Parent Index] [Size:4 Uint32]\nconst Parent_Type = Uint32Array;\nconst Parent_Members = 2;\nconst Parent_Stride = Parent_Members * Uint32_Bytes;\n\n// Space : [ZOrder] [Size:4 Uint32]\nconst ZOrder_Type = Uint32Array;\nconst ZOrder_Members = 1;\nconst ZOrder_Stride = ZOrder_Members * Uint32_Bytes;\n\n// Space : [CullingMask] [Size:4 Int32]\nconst CullingMask_Type = Int32Array;\nconst CullingMask_Members = 1;\nconst CullingMask_Stride = CullingMask_Members * Uint32_Bytes;\n\n// Space : [Opacity] [Size:1 Uint8]\nconst Opacity_Type = Uint8Array;\nconst Opacity_Members = 1;\nconst Opacity_Stride = Opacity_Members * Uint8_Bytes;\n\n// Space : [Is3D] [Size:1 Uint8]\nconst Is3D_Type = Uint8Array;\nconst Is3D_Members = 1;\nconst Is3D_Stride = Is3D_Members * Uint8_Bytes;\n\n// Space : [NodePtr] [Size:4 * 2 Uint32]\nconst Node_Type = Uint32Array;\nconst Node_Members = 2;\n\n// Space : [Skew] [Size:4 * 2 Float32]\nconst Skew_Members = 2;\nconst Skew_Stride = Skew_Members * FLOAT_BYTES;\n\nlet UnitBase = require('./unit-base');\nlet NodeUnit = function (unitID, memPool) {\n UnitBase.call(this, unitID, memPool);\n\n let contentNum = this._contentNum;\n this.trsList = new FLOAT_ARRAY_TYPE(contentNum * TRS_Members);\n this.localMatList = new FLOAT_ARRAY_TYPE(contentNum * LocalMatrix_Members);\n this.worldMatList = new FLOAT_ARRAY_TYPE(contentNum * WorldMatrix_Members);\n\n if (CC_JSB && CC_NATIVERENDERER) {\n this.dirtyList = new Dirty_Type(contentNum * Dirty_Members);\n this.parentList = new Parent_Type(contentNum * Parent_Members);\n this.zOrderList = new ZOrder_Type(contentNum * ZOrder_Members);\n this.cullingMaskList = new CullingMask_Type(contentNum * CullingMask_Members);\n this.opacityList = new Opacity_Type(contentNum * Opacity_Members);\n this.is3DList = new Is3D_Type(contentNum * Is3D_Members);\n this.nodeList = new Node_Type(contentNum * Node_Members);\n this.skewList = new FLOAT_ARRAY_TYPE(contentNum * Skew_Members);\n\n this._memPool._nativeMemPool.updateNodeData(\n unitID,\n this.dirtyList,\n this.trsList,\n this.localMatList,\n this.worldMatList,\n this.parentList,\n this.zOrderList,\n this.cullingMaskList,\n this.opacityList,\n this.is3DList,\n this.nodeList,\n this.skewList\n );\n }\n\n for (let i = 0; i < contentNum; i ++) {\n let space = this._spacesData[i];\n\n space.trs = new FLOAT_ARRAY_TYPE(this.trsList.buffer, i * TRS_Stride, TRS_Members);\n space.localMat = new FLOAT_ARRAY_TYPE(this.localMatList.buffer, i * LocalMatrix_Stride, LocalMatrix_Members);\n space.worldMat = new FLOAT_ARRAY_TYPE(this.worldMatList.buffer, i * WorldMatrix_Stride, WorldMatrix_Members);\n\n if (CC_JSB && CC_NATIVERENDERER) {\n space.dirty = new Dirty_Type(this.dirtyList.buffer, i * Dirty_Stride, Dirty_Members);\n space.parent = new Parent_Type(this.parentList.buffer, i * Parent_Stride, Parent_Members);\n space.zOrder = new ZOrder_Type(this.zOrderList.buffer, i * ZOrder_Stride, ZOrder_Members);\n space.cullingMask = new CullingMask_Type(this.cullingMaskList.buffer, i * CullingMask_Stride, CullingMask_Members);\n space.opacity = new Opacity_Type(this.opacityList.buffer, i * Opacity_Stride, Opacity_Members);\n space.is3D = new Is3D_Type(this.is3DList.buffer, i * Is3D_Stride, Is3D_Members);\n space.skew = new FLOAT_ARRAY_TYPE(this.skewList.buffer, i * Skew_Stride, Skew_Members);\n }\n }\n};\n\n(function(){\n let Super = function(){};\n Super.prototype = UnitBase.prototype;\n NodeUnit.prototype = new Super();\n})();\n\nmodule.exports = NodeUnit;","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n// Unit has many segment, layout such as :\n// Head Free Pointer + Using Segment Num + Segment 1 + Segment 2 + Segment 3 ...\n\n// sign data format\n// Space : [If Free Flag] [Size:1 Uint16]\n// Space : [Next Free Index] [Size:1 Uint16]\n\n// invalid pointer value\nlet POINTER_INVALID_FLAG = 0xffff;\nlet SPACE_FREE_FLAG = 0x0;\nlet SPACE_USE_FLAG = 0x1;\nlet POS_NEXT_FREE = 0;\nlet POS_FREE_FLAG = 1;\n\nlet UnitBase = function (unitID, memPool, contentNum) {\n contentNum = contentNum || 128;\n\n // set unit id\n this.unitID = unitID;\n this._memPool = memPool;\n\n this._data = new Uint16Array(2);\n // head of the free content index\n this._data[0] = 0;\n // using segment num\n this._data[1] = 0;\n\n this._contentNum = contentNum;\n this._signData = new Uint16Array(this._contentNum * 2);\n this._spacesData = [];\n\n for (let i = 0; i < contentNum; i++) {\n let signIndex = i * 2;\n // store content block index but not sign array index\n this._signData[signIndex + POS_NEXT_FREE] = i + 1;\n this._signData[signIndex + POS_FREE_FLAG] = SPACE_FREE_FLAG;\n\n this._spacesData[i] = {\n index: i,\n unitID: unitID,\n };\n }\n // last one has no next space;\n this._signData[(contentNum - 1) * 2] = POINTER_INVALID_FLAG;\n};\n\nlet UnitBaseProto = UnitBase.prototype;\nUnitBaseProto.hasSpace = function () {\n return this._data[0] !== POINTER_INVALID_FLAG;\n};\n\nUnitBaseProto.isAllFree = function () {\n return this._data[1] == 0;\n};\n\n// pop space from unit\nUnitBaseProto.pop = function () {\n let headFreeIndex = this._data[0];\n if (headFreeIndex === POINTER_INVALID_FLAG) return null;\n\n let index = headFreeIndex;\n let signIndex = index * 2;\n let space = this._spacesData[index];\n\n // set use flag\n this._signData[signIndex + POS_FREE_FLAG] = SPACE_USE_FLAG;\n\n // store new next free space index\n this._data[0] = this._signData[signIndex + POS_NEXT_FREE];\n // add using segment num\n this._data[1]++;\n return space;\n};\n\n// push back to unit\nUnitBaseProto.push = function (index) {\n let signIndex = index * 2;\n\n // set free flag\n this._signData[signIndex + POS_FREE_FLAG] = SPACE_FREE_FLAG;\n\n // store head free index to the space\n this._signData[signIndex + POS_NEXT_FREE] = this._data[0];\n // update head free index\n this._data[0] = index;\n // sub using segment num\n this._data[1]--;\n};\n\n// dump all space info\nUnitBaseProto.dump = function () {\n let spaceNum = 0;\n let index = this._data[0];\n let freeStr = \"\";\n \n while (index != POINTER_INVALID_FLAG) {\n spaceNum ++;\n freeStr += index + \"->\";\n index = this._signData[index * 2 + POS_NEXT_FREE];\n }\n\n let usingNum = 0;\n let usingStr = \"\";\n let contentNum = this._contentNum;\n for (let i = 0; i < contentNum; i++) {\n let freeFlag = this._signData[i * 2 + POS_FREE_FLAG];\n if (freeFlag == SPACE_USE_FLAG) {\n usingNum ++;\n usingStr += i + \"->\";\n }\n }\n \n let totalNum = spaceNum + usingNum;\n console.log(\n \"unitID:\", this.unitID, \n \"spaceNum:\", spaceNum, \n \"calc using num:\", usingNum, \n 'store using num:', this._data[1], \n 'calc total num:', totalNum, \n 'actually total num:', this._contentNum\n );\n console.log(\"free info:\", freeStr);\n console.log(\"using info:\", usingStr);\n\n if (usingNum != this._data[1]) {\n cc.error(\n 'using num error', \n \"calc using num:\", usingNum, \n 'store using num:', this._data[1]\n );\n }\n\n if (spaceNum + usingNum != this._contentNum) {\n cc.error(\n 'total num error', \n 'calc total num:', totalNum, \n 'actually total num:', this._contentNum\n );\n }\n};\n\nmodule.exports = UnitBase;","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport ValueType from './value-type';\nimport CCClass from '../platform/CCClass';\nimport misc from '../utils/misc';\n\n/**\n * !#en\n * Representation of RGBA colors.\n *\n * Each color component is a floating point value with a range from 0 to 255.\n *\n * You can also use the convenience method {{#crossLink \"cc/color:method\"}}cc.color{{/crossLink}} to create a new Color.\n *\n * !#zh\n * cc.Color 用于表示颜色。\n *\n * 它包含 RGBA 四个以浮点数保存的颜色分量,每个的值都在 0 到 255 之间。\n *\n * 您也可以通过使用 {{#crossLink \"cc/color:method\"}}cc.color{{/crossLink}} 的便捷方法来创建一个新的 Color。\n *\n * @class Color\n * @extends ValueType\n */\nexport default class Color extends ValueType {\n static div = Color.divide;\n static sub = Color.subtract;\n static mul = Color.multiply;\n\n /**\n * !#en Solid white, RGBA is [255, 255, 255, 255].\n * !#zh 纯白色,RGBA 是 [255, 255, 255, 255]。\n * @property WHITE\n * @type {Color}\n * @static\n */\n static get WHITE () { return new Color(255, 255, 255, 255); }\n static readonly WHITE_R: Color = Color.WHITE;\n\n /**\n * !#en Solid black, RGBA is [0, 0, 0, 255].\n * !#zh 纯黑色,RGBA 是 [0, 0, 0, 255]。\n * @property BLACK\n * @type {Color}\n * @static\n */\n static get BLACK () { return new Color(0, 0, 0, 255); }\n static readonly BLACK_R: Color = Color.BLACK;\n\n /**\n * !#en Transparent, RGBA is [0, 0, 0, 0].\n * !#zh 透明,RGBA 是 [0, 0, 0, 0]。\n * @property TRANSPARENT\n * @type {Color}\n * @static\n */\n static get TRANSPARENT () { return new Color(0, 0, 0, 0); }\n static readonly TRANSPARENT_R: Color = Color.TRANSPARENT;\n\n /**\n * !#en Grey, RGBA is [127.5, 127.5, 127.5].\n * !#zh 灰色,RGBA 是 [127.5, 127.5, 127.5]。\n * @property GRAY\n * @type {Color}\n * @static\n */\n static get GRAY () { return new Color(127.5, 127.5, 127.5); }\n static readonly GRAY_R: Color = Color.GRAY;\n\n /**\n * !#en Solid red, RGBA is [255, 0, 0].\n * !#zh 纯红色,RGBA 是 [255, 0, 0]。\n * @property RED\n * @type {Color}\n * @static\n */\n static get RED () { return new Color(255, 0, 0); }\n static readonly RED_R: Color = Color.RED;\n /**\n * !#en Solid green, RGBA is [0, 255, 0].\n * !#zh 纯绿色,RGBA 是 [0, 255, 0]。\n * @property GREEN\n * @type {Color}\n * @static\n */\n static get GREEN () { return new Color(0, 255, 0); }\n static readonly GREEN_R: Color = Color.GREEN;\n /**\n * !#en Solid blue, RGBA is [0, 0, 255].\n * !#zh 纯蓝色,RGBA 是 [0, 0, 255]。\n * @property BLUE\n * @type {Color}\n * @static\n */\n static get BLUE () { return new Color(0, 0, 255); }\n static readonly BLUE_R: Color = Color.BLUE;\n /**\n * !#en Yellow, RGBA is [255, 235, 4].\n * !#zh 黄色,RGBA 是 [255, 235, 4]。\n * @property YELLOW\n * @type {Color}\n * @static\n */\n static get YELLOW () { return new Color(255, 235, 4); }\n static readonly YELLOW_R: Color = Color.YELLOW;\n /**\n * !#en Orange, RGBA is [255, 127, 0].\n * !#zh 橙色,RGBA 是 [255, 127, 0]。\n * @property ORANGE\n * @type {Color}\n * @static\n */\n static get ORANGE () { return new Color(255, 127, 0); }\n static readonly ORANGE_R: Color = Color.ORANGE;\n /**\n * !#en Cyan, RGBA is [0, 255, 255].\n * !#zh 青色,RGBA 是 [0, 255, 255]。\n * @property CYAN\n * @type {Color}\n * @static\n */\n static get CYAN () { return new Color(0, 255, 255); }\n static readonly CYAN_R: Color = Color.CYAN;\n /**\n * !#en Magenta, RGBA is [255, 0, 255].\n * !#zh 洋红色(品红色),RGBA 是 [255, 0, 255]。\n * @property MAGENTA\n * @type {Color}\n * @static\n */\n static get MAGENTA () { return new Color(255, 0, 255); }\n static readonly MAGENTA_R: Color = Color.MAGENTA;\n\n /**\n * Copy content of a color into another.\n * @method copy\n * @typescript\n * copy (out: Color, a: Color): Color\n * @static\n */\n static copy (out: Color, a: Color): Color {\n out.r = a.r;\n out.g = a.g;\n out.b = a.b;\n out.a = a.a;\n return out;\n }\n\n /**\n * Clone a new color.\n * @method clone\n * @typescript\n * clone (a: Color): Color\n * @static\n */\n static clone (a: Color): Color {\n return new Color(a.r, a.g, a.b, a.a);\n }\n\n /**\n * Set the components of a color to the given values.\n * @method set\n * @typescript\n * set (out: Color, r?: number, g?: number, b?: number, a?: number): Color\n * @static\n */\n static set (out: Color, r = 255, g = 255, b = 255, a = 255): Color {\n out.r = r;\n out.g = g;\n out.b = b;\n out.a = a;\n return out;\n }\n\n /**\n * Converts the hexadecimal formal color into rgb formal.\n * @method fromHex\n * @typescript\n * fromHex (out: Color, hex: number): Color\n * @static\n * @deprecated\n */\n static fromHex (out: Color, hex: number): Color {\n let r = ((hex >> 24)) / 255.0;\n let g = ((hex >> 16) & 0xff) / 255.0;\n let b = ((hex >> 8) & 0xff) / 255.0;\n let a = ((hex) & 0xff) / 255.0;\n\n out.r = r;\n out.g = g;\n out.b = b;\n out.a = a;\n return out;\n }\n\n /**\n * Converts the hexadecimal formal color into rgb formal.\n * @method fromHEX\n * @typescript\n * fromHEX (out: Color, hex: string): Color\n * @static\n */\n static fromHEX (out: Color, hexString: string): Color {\n hexString = (hexString.indexOf('#') === 0) ? hexString.substring(1) : hexString;\n out.r = parseInt(hexString.substr(0, 2), 16) || 0;\n out.g = parseInt(hexString.substr(2, 2), 16) || 0;\n out.b = parseInt(hexString.substr(4, 2), 16) || 0;\n out.a = parseInt(hexString.substr(6, 2), 16) || 255;\n out._val = ((out.a << 24) >>> 0) + (out.b << 16) + (out.g << 8) + out.r;\n return out;\n }\n\n /**\n * Add components of two colors, respectively.\n * @method add\n * @typescript\n * add (out: Color, a: Color, b: Color): Color\n * @static\n */\n static add (out: Color, a: Color, b: Color): Color {\n out.r = a.r + b.r;\n out.g = a.g + b.g;\n out.b = a.b + b.b;\n out.a = a.a + b.a;\n return out;\n }\n\n /**\n * Subtract components of color b from components of color a, respectively.\n * @method subtract\n * @typescript\n * subtract (out: Color, a: Color, b: Color): Color\n * @static\n */\n static subtract (out: Color, a: Color, b: Color): Color {\n out.r = a.r - b.r;\n out.g = a.g - b.g;\n out.b = a.b - b.b;\n out.a = a.a - b.a;\n return out;\n }\n\n /**\n * Multiply components of two colors, respectively.\n * @method multiply\n * @typescript\n * multiply (out: Color, a: Color, b: Color): Color\n * @static\n */\n static multiply (out: Color, a: Color, b: Color): Color {\n out.r = a.r * b.r;\n out.g = a.g * b.g;\n out.b = a.b * b.b;\n out.a = a.a * b.a;\n return out;\n }\n\n /**\n * Divide components of color a by components of color b, respectively.\n * @method divide\n * @typescript\n * divide (out: Color, a: Color, b: Color): Color\n * @static\n */\n static divide (out: Color, a: Color, b: Color): Color {\n out.r = a.r / b.r;\n out.g = a.g / b.g;\n out.b = a.b / b.b;\n out.a = a.a / b.a;\n return out;\n }\n\n /**\n * Scales a color by a number.\n * @method scale\n * @typescript\n * scale (out: Color, a: Color, b: number): Color\n * @static\n */\n static scale (out: Color, a: Color, b: number): Color {\n out.r = a.r * b;\n out.g = a.g * b;\n out.b = a.b * b;\n out.a = a.a * b;\n return out;\n }\n\n /**\n * Performs a linear interpolation between two colors.\n * @method lerp\n * @typescript\n * lerp (out: Color, a: Color, b: Color, t: number): Color\n * @static\n */\n static lerp (out: Color, a: Color, b: Color, t: number): Color {\n let ar = a.r,\n ag = a.g,\n ab = a.b,\n aa = a.a;\n out.r = ar + t * (b.r - ar);\n out.g = ag + t * (b.g - ag);\n out.b = ab + t * (b.b - ab);\n out.a = aa + t * (b.a - aa);\n return out;\n }\n\n /**\n * !#zh 颜色转数组\n * !#en Turn an array of colors\n * @method toArray\n * @typescript\n * toArray > (out: Out, a: IColorLike, ofs?: number): Out\n * @param ofs 数组起始偏移量\n * @static\n */\n static toArray> (out: Out, a: IColorLike, ofs = 0) {\n const scale = (a instanceof Color || a.a > 1) ? 1 / 255 : 1;\n out[ofs + 0] = a.r * scale;\n out[ofs + 1] = a.g * scale;\n out[ofs + 2] = a.b * scale;\n out[ofs + 3] = a.a * scale;\n return out;\n }\n\n /**\n * !#zh 数组转颜色\n * !#en An array of colors turn\n * @method fromArray\n * @typescript\n * fromArray (arr: IWritableArrayLike, out: Out, ofs?: number): Out\n * @param ofs 数组起始偏移量\n * @static\n */\n static fromArray (arr: IWritableArrayLike, out: Out, ofs = 0) {\n out.r = arr[ofs + 0] * 255;\n out.g = arr[ofs + 1] * 255;\n out.b = arr[ofs + 2] * 255;\n out.a = arr[ofs + 3] * 255;\n return out;\n }\n\n /**\n * !#zh 颜色 RGB 预乘 Alpha 通道\n * !#en RGB premultiply alpha channel\n * @method premultiplyAlpha\n * @typescript\n * premultiplyAlpha (out: Out, a: IColorLike)\n * @param out 返回颜色\n * @param color 预乘处理的目标颜色\n * @static\n */\n static premultiplyAlpha (out, color) {\n let alpha = color.a / 255.0;\n out.r = color.r * alpha;\n out.g = color.g * alpha;\n out.b = color.b * alpha;\n\n out._fastSetA(color.a);\n\n return out;\n }\n\n _val: number = 0;\n\n /**\n * @method constructor\n * @param {Number} [r=0] - red component of the color, default value is 0.\n * @param {Number} [g=0] - green component of the color, defualt value is 0.\n * @param {Number} [b=0] - blue component of the color, default value is 0.\n * @param {Number} [a=255] - alpha component of the color, default value is 255.\n */\n constructor (r: Color | number = 0, g: number = 0, b: number = 0, a: number = 255) {\n super();\n if (typeof r === 'object') {\n g = r.g;\n b = r.b;\n a = r.a;\n r = r.r;\n }\n\n this._val = ((a << 24) >>> 0) + (b << 16) + (g << 8) + (r|0);\n }\n\n /**\n * !#en Clone a new color from the current color.\n * !#zh 克隆当前颜色。\n * @method clone\n * @return {Color} Newly created color.\n * @example\n * var color = new cc.Color();\n * var newColor = color.clone();// Color {r: 0, g: 0, b: 0, a: 255}\n */\n clone (): Color {\n var ret = new Color();\n ret._val = this._val;\n return ret;\n }\n\n /**\n * !#en TODO\n * !#zh 判断两个颜色是否相等。\n * @method equals\n * @param {Color} other\n * @return {Boolean}\n * @example\n * var color1 = cc.Color.WHITE;\n * var color2 = new cc.Color(255, 255, 255);\n * cc.log(color1.equals(color2)); // true;\n * color2 = cc.Color.RED;\n * cc.log(color2.equals(color1)); // false;\n */\n equals (other: Color): boolean {\n return other && this._val === other._val;\n }\n\n /**\n * !#en TODO\n * !#zh 线性插值\n * @method lerp\n * @param {Color} to\n * @param {number} ratio - the interpolation coefficient.\n * @param {Color} [out] - optional, the receiving vector.\n * @return {Color}\n * @example {@link cocos2d/core/value-types/CCColor/lerp.js}\n */\n lerp (to: Color, ratio: number, out?: Color): Color {\n out = out || new Color();\n var r = this.r;\n var g = this.g;\n var b = this.b;\n var a = this.a;\n out.r = r + (to.r - r) * ratio;\n out.g = g + (to.g - g) * ratio;\n out.b = b + (to.b - b) * ratio;\n out.a = a + (to.a - a) * ratio;\n return out;\n };\n\n /**\n * !#en TODO\n * !#zh 转换为方便阅读的字符串。\n * @method toString\n * @return {String}\n * @example\n * var color = cc.Color.WHITE;\n * color.toString(); // \"rgba(255, 255, 255, 255)\"\n */\n toString (): string {\n return \"rgba(\" +\n this.r.toFixed() + \", \" +\n this.g.toFixed() + \", \" +\n this.b.toFixed() + \", \" +\n this.a.toFixed() + \")\";\n };\n\n /**\n * !#en Get or set red channel value\n * !#zh 获取或者设置红色通道\n * @property {number} r\n */\n get r (): number {\n return this.getR();\n }\n set r (v: number) {\n this.setR(v);\n }\n\n /**\n * !#en Get or set green channel value\n * !#zh 获取或者设置绿色通道\n * @property {number} g\n */\n get g (): number {\n return this.getG();\n }\n set g (v: number) {\n this.setG(v);\n }\n\n /**\n * !#en Get or set blue channel value\n * !#zh 获取或者设置蓝色通道\n * @property {number} b\n */\n get b (): number {\n return this.getB();\n }\n set b (v: number) {\n this.setB(v);\n }\n\n /**\n * !#en Get or set alpha channel value\n * !#zh 获取或者设置透明通道\n * @property {number} a\n */\n get a (): number {\n return this.getA();\n }\n set a (v: number) {\n this.setA(v);\n }\n\n /**\n * !#en Gets red channel value\n * !#zh 获取当前颜色的红色值。\n * @method getR\n * @return {Number} red value.\n */\n getR (): number {\n return this._val & 0x000000ff;\n }\n /**\n * !#en Sets red value and return the current color object\n * !#zh 设置当前的红色值,并返回当前对象。\n * @method setR\n * @param {Number} red - the new Red component.\n * @return {Color} this color.\n * @example\n * var color = new cc.Color();\n * color.setR(255); // Color {r: 255, g: 0, b: 0, a: 255}\n */\n setR (red): this {\n red = ~~misc.clampf(red, 0, 255);\n this._val = ((this._val & 0xffffff00) | red) >>> 0;\n return this;\n }\n /**\n * !#en Gets green channel value\n * !#zh 获取当前颜色的绿色值。\n * @method getG\n * @return {Number} green value.\n */\n getG (): number {\n return (this._val & 0x0000ff00) >> 8;\n }\n /**\n * !#en Sets green value and return the current color object\n * !#zh 设置当前的绿色值,并返回当前对象。\n * @method setG\n * @param {Number} green - the new Green component.\n * @return {Color} this color.\n * @example\n * var color = new cc.Color();\n * color.setG(255); // Color {r: 0, g: 255, b: 0, a: 255}\n */\n setG (green): this {\n green = ~~misc.clampf(green, 0, 255);\n this._val = ((this._val & 0xffff00ff) | (green << 8)) >>> 0;\n return this;\n }\n /**\n * !#en Gets blue channel value\n * !#zh 获取当前颜色的蓝色值。\n * @method getB\n * @return {Number} blue value.\n */\n getB (): number {\n return (this._val & 0x00ff0000) >> 16;\n }\n /**\n * !#en Sets blue value and return the current color object\n * !#zh 设置当前的蓝色值,并返回当前对象。\n * @method setB\n * @param {Number} blue - the new Blue component.\n * @return {Color} this color.\n * @example\n * var color = new cc.Color();\n * color.setB(255); // Color {r: 0, g: 0, b: 255, a: 255}\n */\n setB (blue): this {\n blue = ~~misc.clampf(blue, 0, 255);\n this._val = ((this._val & 0xff00ffff) | (blue << 16)) >>> 0;\n return this;\n }\n /**\n * !#en Gets alpha channel value\n * !#zh 获取当前颜色的透明度值。\n * @method getA\n * @return {Number} alpha value.\n */\n getA (): number {\n return (this._val & 0xff000000) >>> 24;\n }\n /**\n * !#en Sets alpha value and return the current color object\n * !#zh 设置当前的透明度,并返回当前对象。\n * @method setA\n * @param {Number} alpha - the new Alpha component.\n * @return {Color} this color.\n * @example\n * var color = new cc.Color();\n * color.setA(0); // Color {r: 0, g: 0, b: 0, a: 0}\n */\n setA (alpha): this {\n alpha = ~~misc.clampf(alpha, 0, 255);\n this._val = ((this._val & 0x00ffffff) | (alpha << 24)) >>> 0;\n return this;\n }\n\n /**\n * !#en Convert color to css format.\n * !#zh 转换为 CSS 格式。\n * @method toCSS\n * @param {String} [opt=\"rgba\"] - \"rgba\", \"rgb\", \"#rgb\" or \"#rrggbb\".\n * @return {String}\n * @example\n * var color = cc.Color.BLACK;\n * color.toCSS(); // \"rgba(0,0,0,1.00)\";\n * color.toCSS(\"rgba\"); // \"rgba(0,0,0,1.00)\";\n * color.toCSS(\"rgb\"); // \"rgba(0,0,0)\";\n * color.toCSS(\"#rgb\"); // \"#000\";\n * color.toCSS(\"#rrggbb\"); // \"#000000\";\n */\n toCSS (opt: string): string {\n if (!opt || opt === 'rgba') {\n return \"rgba(\" +\n this.r + \",\" +\n this.g + \",\" +\n this.b + \",\" +\n (this.a / 255).toFixed(2) + \")\"\n ;\n }\n else if (opt === 'rgb') {\n return \"rgb(\" +\n this.r + \",\" +\n this.g + \",\" +\n this.b + \")\"\n ;\n }\n else {\n return '#' + this.toHEX(opt);\n }\n }\n\n /**\n * !#en Read hex string and store color data into the current color object, the hex string must be formated as rgba or rgb.\n * !#zh 读取 16 进制颜色。\n * @method fromHEX\n * @param {String} hexString\n * @return {Color}\n * @chainable\n * @example\n * var color = cc.Color.BLACK;\n * color.fromHEX(\"#FFFF33\"); // Color {r: 255, g: 255, b: 51, a: 255};\n */\n fromHEX (hexString: string): this {\n hexString = (hexString.indexOf('#') === 0) ? hexString.substring(1) : hexString;\n let r = parseInt(hexString.substr(0, 2), 16) || 0;\n let g = parseInt(hexString.substr(2, 2), 16) || 0;\n let b = parseInt(hexString.substr(4, 2), 16) || 0;\n let a = parseInt(hexString.substr(6, 2), 16) || 255;\n this._val = ((a << 24) >>> 0) + (b << 16) + (g << 8) + r;\n return this;\n }\n\n /**\n * !#en convert Color to HEX color string.\n * !#zh 转换为 16 进制。\n * @method toHEX\n * @param {String} [fmt=\"#rrggbb\"] - \"#rgb\", \"#rrggbb\" or \"#rrggbbaa\".\n * @return {String}\n * @example\n * var color = cc.Color.BLACK;\n * color.toHEX(\"#rgb\"); // \"000\";\n * color.toHEX(\"#rrggbb\"); // \"000000\";\n */\n toHEX (fmt): string {\n const prefix = '0';\n // #rrggbb\n let hex = [\n (this.r < 16 ? prefix : '') + (this.r).toString(16),\n (this.g < 16 ? prefix : '') + (this.g).toString(16),\n (this.b < 16 ? prefix : '') + (this.b).toString(16),\n ];\n if (fmt === '#rgb') {\n hex[0] = hex[0][0];\n hex[1] = hex[1][0];\n hex[2] = hex[2][0];\n }\n else if (fmt === '#rrggbbaa') {\n hex.push((this.a < 16 ? prefix : '') + (this.a).toString(16));\n }\n return hex.join('');\n };\n\n /**\n * !#en Convert to 24bit rgb value.\n * !#zh 转换为 24bit 的 RGB 值。\n * @method toRGBValue\n * @return {Number}\n * @example\n * var color = cc.Color.YELLOW;\n * color.toRGBValue(); // 16771844;\n */\n toRGBValue (): number {\n return this._val & 0x00ffffff;\n }\n\n /**\n * !#en Read HSV model color and convert to RGB color\n * !#zh 读取 HSV(色彩模型)格式。\n * @method fromHSV\n * @param {Number} h\n * @param {Number} s\n * @param {Number} v\n * @return {Color}\n * @chainable\n * @example\n * var color = cc.Color.YELLOW;\n * color.fromHSV(0, 0, 1); // Color {r: 255, g: 255, b: 255, a: 255};\n */\n fromHSV (h, s, v): this {\n var r, g, b;\n if (s === 0) {\n r = g = b = v;\n }\n else {\n if (v === 0) {\n r = g = b = 0;\n }\n else {\n if (h === 1) h = 0;\n h *= 6;\n var i = Math.floor(h);\n var f = h - i;\n var p = v * (1 - s);\n var q = v * (1 - (s * f));\n var t = v * (1 - (s * (1 - f)));\n switch (i) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n\n case 5:\n r = v;\n g = p;\n b = q;\n break;\n }\n }\n }\n r *= 255;\n g *= 255;\n b *= 255;\n this._val = ((this.a << 24) >>> 0) + (b << 16) + (g << 8) + (r|0);\n return this;\n }\n\n /**\n * !#en Transform to HSV model color\n * !#zh 转换为 HSV(色彩模型)格式。\n * @method toHSV\n * @return {Object} - {h: number, s: number, v: number}.\n * @example\n * var color = cc.Color.YELLOW;\n * color.toHSV(); // Object {h: 0.1533864541832669, s: 0.9843137254901961, v: 1};\n */\n toHSV () {\n var r = this.r / 255;\n var g = this.g / 255;\n var b = this.b / 255;\n var hsv = { h: 0, s: 0, v: 0 };\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var delta = 0;\n hsv.v = max;\n hsv.s = max ? (max - min) / max : 0;\n if (!hsv.s) hsv.h = 0;\n else {\n delta = max - min;\n if (r === max) hsv.h = (g - b) / delta;\n else if (g === max) hsv.h = 2 + (b - r) / delta;\n else hsv.h = 4 + (r - g) / delta;\n hsv.h /= 6;\n if (hsv.h < 0) hsv.h += 1.0;\n }\n return hsv;\n }\n\n /**\n * !#en Set the color\n * !#zh 设置颜色\n * @method set\n * @typescript\n * set (color: Color): Color\n * @param {Color} color\n */\n set (color: Color): this {\n if (color._val) {\n this._val = color._val;\n }\n else {\n this.r = color.r;\n this.g = color.g;\n this.b = color.b;\n this.a = color.a;\n }\n return this;\n }\n\n _fastSetA (alpha) {\n this._val = ((this._val & 0x00ffffff) | (alpha << 24)) >>> 0;\n }\n\n /**\n * !#en Multiplies the current color by the specified color\n * !#zh 将当前颜色乘以与指定颜色\n * @method multiply\n * @return {Color}\n * @param {Color} other\n */\n multiply (other: Color) {\n let r = ((this._val & 0x000000ff) * other.r) >> 8;\n let g = ((this._val & 0x0000ff00) * other.g) >> 8;\n let b = ((this._val & 0x00ff0000) * other.b) >> 8;\n let a = ((this._val & 0xff000000) >>> 8) * other.a;\n this._val = (a & 0xff000000) | (b & 0x00ff0000) | (g & 0x0000ff00) | (r & 0x000000ff);\n return this;\n }\n}\n\nCCClass.fastDefine('cc.Color', Color, { r: 0, g: 0, b: 0, a: 255 });\n\n\ncc.Color = Color;\n\n/**\n * @module cc\n */\n\n/**\n * !#en\n * The convenience method to create a new {{#crossLink \"Color/Color:method\"}}cc.Color{{/crossLink}}\n * Alpha channel is optional. Default value is 255.\n *\n * !#zh\n * 通过该方法来创建一个新的 {{#crossLink \"Color/Color:method\"}}cc.Color{{/crossLink}} 对象。\n * Alpha 通道是可选的。默认值是 255。\n *\n * @method color\n * @param {Number} [r=0]\n * @param {Number} [g=0]\n * @param {Number} [b=0]\n * @param {Number} [a=255]\n * @return {Color}\n * @example {@link cocos2d/core/value-types/CCColor/color.js}\n */\ncc.color = function color (r, g, b, a) {\n if (typeof r === 'string') {\n var result = new Color();\n return result.fromHEX(r);\n }\n if (typeof r === 'object') {\n return new Color(r.r, r.g, r.b, r.a);\n }\n return new Color(r, g, b, a);\n};\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nexport { default as Vec2 } from './vec2';\nexport { default as Vec3} from './vec3';\nexport { default as Vec4} from './vec4';\nexport { default as Mat4} from './mat4';\nexport { default as Mat3} from './mat3';\nexport { default as Rect} from './rect';\nexport { default as Size} from './size';\nexport { default as Color} from './color';\nexport { default as Quat} from './quat';\nexport { default as Trs} from './trs';\nexport * from './utils';\n\ncc.math = module.exports;\n","import { EPSILON, FLOAT_ARRAY_TYPE } from '../value-types/utils';\nimport Vec3 from './vec3';\nimport Vec2 from './vec2';\nimport Mat4 from './mat4';\nimport Quat from './quat';\n\n/**\n * Mathematical 3x3 matrix.\n *\n * NOTE: we use column-major matrix for all matrix calculation.\n *\n * This may lead to some confusion when referencing OpenGL documentation,\n * however, which represents out all matricies in column-major format.\n * This means that while in code a matrix may be typed out as:\n *\n * [1, 0, 0, 0,\n * 0, 1, 0, 0,\n * 0, 0, 1, 0,\n * x, y, z, 0]\n *\n * The same matrix in the [OpenGL documentation](https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glTranslate.xml)\n * is written as:\n *\n * 1 0 0 x\n * 0 1 0 y\n * 0 0 1 z\n * 0 0 0 0\n *\n * Please rest assured, however, that they are the same thing!\n * This is not unique to glMatrix, either, as OpenGL developers have long been confused by the\n * apparent lack of consistency between the memory layout and the documentation.\n *\n * @class Mat3\n * @extends ValueType\n */\nexport default class Mat3 {\n static sub = Mat3.subtract;\n static mul = Mat3.multiply;\n\n /**\n * Identity of Mat3\n * @property {Mat3} IDENTITY\n * @static\n */\n static IDENTITY = Object.freeze(new Mat3());\n\n /**\n * Creates a matrix, with elements specified separately.\n *\n * @param {Number} m00 - Value assigned to element at column 0 row 0.\n * @param {Number} m01 - Value assigned to element at column 0 row 1.\n * @param {Number} m02 - Value assigned to element at column 0 row 2.\n * @param {Number} m03 - Value assigned to element at column 1 row 0.\n * @param {Number} m04 - Value assigned to element at column 1 row 1.\n * @param {Number} m05 - Value assigned to element at column 1 row 2.\n * @param {Number} m06 - Value assigned to element at column 2 row 0.\n * @param {Number} m07 - Value assigned to element at column 2 row 1.\n * @param {Number} m08 - Value assigned to element at column 2 row 2.\n * @returns {Mat3} The newly created matrix.\n * @static\n */\n static create (m00: number = 1, m01: number = 0, m02: number = 0, m03: number = 0, m04: number = 1, m05: number = 0, m06: number = 0, m07: number = 0, m08: number = 1): Mat3 {\n return new Mat3(m00, m01, m02, m03, m04, m05, m06, m07, m08);\n }\n\n /**\n * Clone a matrix.\n *\n * @param {Mat3} a - Matrix to clone.\n * @returns {Mat3} The newly created matrix.\n * @static\n */\n static clone (a: Mat3): Mat3 {\n let am = a.m;\n return new Mat3(\n am[0], am[1], am[2],\n am[3], am[4], am[5],\n am[6], am[7], am[8]\n );\n }\n\n /**\n * Copy content of a matrix into another.\n *\n * @param {Mat3} out - Matrix to modified.\n * @param {Mat3} a - The specified matrix.\n * @returns {Mat3} out.\n * @static\n */\n static copy (out: Mat3, a: Mat3): Mat3 {\n out.m.set(a.m);\n return out;\n }\n\n /**\n * Sets the elements of a matrix to the given values.\n *\n * @param {Mat3} out - The matrix to modified.\n * @param {Number} m00 - Value assigned to element at column 0 row 0.\n * @param {Number} m01 - Value assigned to element at column 0 row 1.\n * @param {Number} m02 - Value assigned to element at column 0 row 2.\n * @param {Number} m10 - Value assigned to element at column 1 row 0.\n * @param {Number} m11 - Value assigned to element at column 1 row 1.\n * @param {Number} m12 - Value assigned to element at column 1 row 2.\n * @param {Number} m20 - Value assigned to element at column 2 row 0.\n * @param {Number} m21 - Value assigned to element at column 2 row 1.\n * @param {Number} m22 - Value assigned to element at column 2 row 2.\n * @returns {Mat3} out.\n * @static\n */\n static set (out: Mat3, m00: number, m01: number, m02: number, m10: number, m11: number, m12: number, m20: number, m21: number, m22: number): Mat3 {\n let outm = out.m;\n outm[0] = m00;\n outm[1] = m01;\n outm[2] = m02;\n outm[3] = m10;\n outm[4] = m11;\n outm[5] = m12;\n outm[6] = m20;\n outm[7] = m21;\n outm[8] = m22;\n return out;\n }\n\n /**\n * return an identity matrix.\n *\n * @returns {Mat3} out.\n * @static\n */\n static identity (out: Mat3): Mat3 {\n let outm = out.m;\n outm[0] = 1;\n outm[1] = 0;\n outm[2] = 0;\n outm[3] = 0;\n outm[4] = 1;\n outm[5] = 0;\n outm[6] = 0;\n outm[7] = 0;\n outm[8] = 1;\n return out;\n }\n\n /**\n * Transposes a matrix.\n *\n * @param {Mat3} out - Matrix to store result.\n * @param {Mat3} a - Matrix to transpose.\n * @returns {Mat3} out.\n * @static\n */\n static transpose (out: Mat3, a: Mat3): Mat3 {\n let am = a.m, outm = out.m;\n // If we are transposing ourselves we can skip a few steps but have to cache some values\n if (out === a) {\n let a01 = am[1], a02 = am[2], a12 = am[5];\n outm[1] = am[3];\n outm[2] = am[6];\n outm[3] = a01;\n outm[5] = am[7];\n outm[6] = a02;\n outm[7] = a12;\n } else {\n outm[0] = am[0];\n outm[1] = am[3];\n outm[2] = am[6];\n outm[3] = am[1];\n outm[4] = am[4];\n outm[5] = am[7];\n outm[6] = am[2];\n outm[7] = am[5];\n outm[8] = am[8];\n }\n\n return out;\n }\n\n /**\n * Inverts a matrix.\n *\n * @param {Mat3} out - Matrix to store result.\n * @param {Mat3} a - Matrix to invert.\n * @returns {Mat3} out.\n * @static\n */\n static invert (out: Mat3, a: Mat3): Mat3 {\n let am = a.m, outm = out.m;\n let a00 = am[0], a01 = am[1], a02 = am[2],\n a10 = am[3], a11 = am[4], a12 = am[5],\n a20 = am[6], a21 = am[7], a22 = am[8];\n\n let b01 = a22 * a11 - a12 * a21;\n let b11 = -a22 * a10 + a12 * a20;\n let b21 = a21 * a10 - a11 * a20;\n\n // Calculate the determinant\n let det = a00 * b01 + a01 * b11 + a02 * b21;\n\n if (!det) {\n return out;\n }\n det = 1.0 / det;\n\n outm[0] = b01 * det;\n outm[1] = (-a22 * a01 + a02 * a21) * det;\n outm[2] = (a12 * a01 - a02 * a11) * det;\n outm[3] = b11 * det;\n outm[4] = (a22 * a00 - a02 * a20) * det;\n outm[5] = (-a12 * a00 + a02 * a10) * det;\n outm[6] = b21 * det;\n outm[7] = (-a21 * a00 + a01 * a20) * det;\n outm[8] = (a11 * a00 - a01 * a10) * det;\n return out;\n }\n\n /**\n * Calculates the adjugate of a matrix.\n *\n * @param {Mat3} out - Matrix to store result.\n * @param {Mat3} a - Matrix to calculate.\n * @returns {Mat3} out.\n * @static\n */\n static adjoint (out: Mat3, a: Mat3): Mat3 {\n let am = a.m, outm = out.m;\n let a00 = am[0], a01 = am[1], a02 = am[2],\n a10 = am[3], a11 = am[4], a12 = am[5],\n a20 = am[6], a21 = am[7], a22 = am[8];\n\n outm[0] = (a11 * a22 - a12 * a21);\n outm[1] = (a02 * a21 - a01 * a22);\n outm[2] = (a01 * a12 - a02 * a11);\n outm[3] = (a12 * a20 - a10 * a22);\n outm[4] = (a00 * a22 - a02 * a20);\n outm[5] = (a02 * a10 - a00 * a12);\n outm[6] = (a10 * a21 - a11 * a20);\n outm[7] = (a01 * a20 - a00 * a21);\n outm[8] = (a00 * a11 - a01 * a10);\n return out;\n }\n\n /**\n * Calculates the determinant of a matrix.\n *\n * @param {Mat3} a - Matrix to calculate.\n * @returns {Number} Determinant of a.\n * @static\n */\n static determinant (a: Mat3): number {\n let am = a.m;\n let a00 = am[0], a01 = am[1], a02 = am[2],\n a10 = am[3], a11 = am[4], a12 = am[5],\n a20 = am[6], a21 = am[7], a22 = am[8];\n\n return a00 * (a22 * a11 - a12 * a21) + a01 * (-a22 * a10 + a12 * a20) + a02 * (a21 * a10 - a11 * a20);\n }\n\n /**\n * Multiply two matrices explicitly.\n *\n * @param {Mat3} out - Matrix to store result.\n * @param {Mat3} a - The first operand.\n * @param {Mat3} b - The second operand.\n * @returns {Mat3} out.\n * @static\n */\n static multiply (out: Mat3, a: Mat3, b: Mat3): Mat3 {\n let am = a.m, bm = b.m, outm = out.m;\n let a00 = am[0], a01 = am[1], a02 = am[2],\n a10 = am[3], a11 = am[4], a12 = am[5],\n a20 = am[6], a21 = am[7], a22 = am[8];\n\n let b00 = bm[0], b01 = bm[1], b02 = bm[2];\n let b10 = bm[3], b11 = bm[4], b12 = bm[5];\n let b20 = bm[6], b21 = bm[7], b22 = bm[8];\n\n outm[0] = b00 * a00 + b01 * a10 + b02 * a20;\n outm[1] = b00 * a01 + b01 * a11 + b02 * a21;\n outm[2] = b00 * a02 + b01 * a12 + b02 * a22;\n\n outm[3] = b10 * a00 + b11 * a10 + b12 * a20;\n outm[4] = b10 * a01 + b11 * a11 + b12 * a21;\n outm[5] = b10 * a02 + b11 * a12 + b12 * a22;\n\n outm[6] = b20 * a00 + b21 * a10 + b22 * a20;\n outm[7] = b20 * a01 + b21 * a11 + b22 * a21;\n outm[8] = b20 * a02 + b21 * a12 + b22 * a22;\n return out;\n }\n\n /**\n * !#en Take the first third order of the fourth order matrix and multiply by the third order matrix\n * !#zh 取四阶矩阵的前三阶,与三阶矩阵相乘\n * @param {Mat3} out - Matrix to store result.\n * @param {Mat3} a - The first operand.\n * @param {Mat3} b - The second operand.\n * @returns {Mat3} out.\n * @static\n */\n static multiplyMat4 (out: Out, a: Out, b: IMat4Like) {\n let am = a.m, bm = b.m, outm = out.m;\n let a00 = am[0], a01 = am[1], a02 = am[2],\n a10 = am[3], a11 = am[4], a12 = am[5],\n a20 = am[6], a21 = am[7], a22 = am[8];\n\n const b00 = bm[0], b01 = bm[1], b02 = bm[2];\n const b10 = bm[4], b11 = bm[5], b12 = bm[6];\n const b20 = bm[8], b21 = bm[9], b22 = bm[10];\n\n outm[0] = b00 * a00 + b01 * a10 + b02 * a20;\n outm[1] = b00 * a01 + b01 * a11 + b02 * a21;\n outm[2] = b00 * a02 + b01 * a12 + b02 * a22;\n outm[3] = b10 * a00 + b11 * a10 + b12 * a20;\n outm[4] = b10 * a01 + b11 * a11 + b12 * a21;\n outm[5] = b10 * a02 + b11 * a12 + b12 * a22;\n outm[6] = b20 * a00 + b21 * a10 + b22 * a20;\n outm[7] = b20 * a01 + b21 * a11 + b22 * a21;\n outm[8] = b20 * a02 + b21 * a12 + b22 * a22;\n return out;\n }\n\n /**\n * Multiply a matrix with a translation matrix given by a translation offset.\n *\n * @param {Mat3} out - Matrix to store result.\n * @param {Mat3} a - Matrix to multiply.\n * @param {vec2} v - The translation offset.\n * @returns {Mat3} out.\n * @static\n */\n static translate (out: Mat3, a: Mat3, v: Vec2): Mat3 {\n let am = a.m, outm = out.m;\n let a00 = am[0], a01 = am[1], a02 = am[2],\n a10 = am[3], a11 = am[4], a12 = am[5],\n a20 = am[6], a21 = am[7], a22 = am[8];\n let x = v.x, y = v.y;\n\n outm[0] = a00;\n outm[1] = a01;\n outm[2] = a02;\n\n outm[3] = a10;\n outm[4] = a11;\n outm[5] = a12;\n\n outm[6] = x * a00 + y * a10 + a20;\n outm[7] = x * a01 + y * a11 + a21;\n outm[8] = x * a02 + y * a12 + a22;\n return out;\n }\n\n /**\n * Rotates a matrix by the given angle.\n *\n * @param {Mat3} out - Matrix to store result.\n * @param {Mat3} a - Matrix to rotate.\n * @param {Number} rad - The rotation angle.\n * @returns {Mat3} out\n * @static\n */\n static rotate (out: Mat3, a: Mat3, rad: number): Mat3 {\n let am = a.m, outm = out.m;\n let a00 = am[0], a01 = am[1], a02 = am[2],\n a10 = am[3], a11 = am[4], a12 = am[5],\n a20 = am[6], a21 = am[7], a22 = am[8];\n\n let s = Math.sin(rad);\n let c = Math.cos(rad);\n\n outm[0] = c * a00 + s * a10;\n outm[1] = c * a01 + s * a11;\n outm[2] = c * a02 + s * a12;\n\n outm[3] = c * a10 - s * a00;\n outm[4] = c * a11 - s * a01;\n outm[5] = c * a12 - s * a02;\n\n outm[6] = a20;\n outm[7] = a21;\n outm[8] = a22;\n return out;\n }\n\n /**\n * Multiply a matrix with a scale matrix given by a scale vector.\n *\n * @param {Mat3} out - Matrix to store result.\n * @param {Mat3} a - Matrix to multiply.\n * @param {vec2} v - The scale vector.\n * @returns {Mat3} out\n **/\n static scale (out: Mat3, a: Mat3, v: Vec2): Mat3 {\n let x = v.x, y = v.y;\n let am = a.m, outm = out.m;\n\n outm[0] = x * am[0];\n outm[1] = x * am[1];\n outm[2] = x * am[2];\n\n outm[3] = y * am[3];\n outm[4] = y * am[4];\n outm[5] = y * am[5];\n\n outm[6] = am[6];\n outm[7] = am[7];\n outm[8] = am[8];\n return out;\n }\n\n /**\n * Copies the upper-left 3x3 values of a 4x4 matrix into a 3x3 matrix.\n *\n * @param {Mat3} out - Matrix to store result.\n * @param {mat4} a - The 4x4 matrix.\n * @returns {Mat3} out.\n * @static\n */\n static fromMat4 (out: Mat3, a: Mat4): Mat3 {\n let am = a.m, outm = out.m;\n outm[0] = am[0];\n outm[1] = am[1];\n outm[2] = am[2];\n outm[3] = am[4];\n outm[4] = am[5];\n outm[5] = am[6];\n outm[6] = am[8];\n outm[7] = am[9];\n outm[8] = am[10];\n return out;\n }\n\n /**\n * Creates a matrix from a translation offset.\n * This is equivalent to (but much faster than):\n *\n * mat3.identity(dest);\n * mat3.translate(dest, dest, vec);\n *\n * @param {Mat3} out - Matrix to store result.\n * @param {vec2} v - The translation offset.\n * @returns {Mat3} out.\n * @static\n */\n static fromTranslation (out: Mat3, v: Vec2): Mat3 {\n let outm = out.m;\n outm[0] = 1;\n outm[1] = 0;\n outm[2] = 0;\n outm[3] = 0;\n outm[4] = 1;\n outm[5] = 0;\n outm[6] = v.x;\n outm[7] = v.y;\n outm[8] = 1;\n return out;\n }\n\n /**\n * Creates a matrix from a given angle.\n * This is equivalent to (but much faster than):\n *\n * mat3.identity(dest);\n * mat3.rotate(dest, dest, rad);\n *\n * @param {Mat3} out - Matrix to store result.\n * @param {Number} rad - The rotation angle.\n * @returns {Mat3} out.\n * @static\n */\n static fromRotation (out: Mat3, rad: number): Mat3 {\n let s = Math.sin(rad), c = Math.cos(rad);\n let outm = out.m;\n\n outm[0] = c;\n outm[1] = s;\n outm[2] = 0;\n\n outm[3] = -s;\n outm[4] = c;\n outm[5] = 0;\n\n outm[6] = 0;\n outm[7] = 0;\n outm[8] = 1;\n return out;\n }\n\n /**\n * Creates a matrix from a scale vector.\n * This is equivalent to (but much faster than):\n *\n * mat3.identity(dest);\n * mat3.scale(dest, dest, vec);\n *\n * @param {Mat3} out - Matrix to store result.\n * @param {vec2} v - Scale vector.\n * @returns {Mat3} out.\n * @static\n */\n static fromScaling (out: Mat3, v: Vec2): Mat3 {\n let outm = out.m;\n outm[0] = v.x;\n outm[1] = 0;\n outm[2] = 0;\n\n outm[3] = 0;\n outm[4] = v.y;\n outm[5] = 0;\n\n outm[6] = 0;\n outm[7] = 0;\n outm[8] = 1;\n return out;\n }\n\n /**\n * Calculates a 3x3 matrix from the given quaternion.\n *\n * @param {Mat3} out - Matrix to store result.\n * @param {quat} q - The quaternion.\n *\n * @returns {Mat3} out.\n * @static\n */\n static fromQuat (out: Mat3, q: Quat): Mat3 {\n let outm = out.m;\n let x = q.x, y = q.y, z = q.z, w = q.w;\n let x2 = x + x;\n let y2 = y + y;\n let z2 = z + z;\n\n let xx = x * x2;\n let yx = y * x2;\n let yy = y * y2;\n let zx = z * x2;\n let zy = z * y2;\n let zz = z * z2;\n let wx = w * x2;\n let wy = w * y2;\n let wz = w * z2;\n\n outm[0] = 1 - yy - zz;\n outm[3] = yx - wz;\n outm[6] = zx + wy;\n\n outm[1] = yx + wz;\n outm[4] = 1 - xx - zz;\n outm[7] = zy - wx;\n\n outm[2] = zx - wy;\n outm[5] = zy + wx;\n outm[8] = 1 - xx - yy;\n\n return out;\n }\n\n /**\n * Calculates a 3x3 matrix from view direction and up direction.\n *\n * @param {Mat3} out - Matrix to store result.\n * @param {vec3} view - View direction (must be normalized).\n * @param {vec3} [up] - Up direction, default is (0,1,0) (must be normalized).\n *\n * @returns {Mat3} out\n * @static\n */\n static fromViewUp (out: Mat3, view: Vec3, up?: Vec3): Mat3 {\n let _fromViewUpIIFE = (function () {\n let default_up = new Vec3(0, 1, 0);\n let x = new Vec3();\n let y = new Vec3();\n\n return function (out, view, up) {\n if (Vec3.lengthSqr(view) < EPSILON * EPSILON) {\n Mat3.identity(out);\n return out;\n }\n\n up = up || default_up;\n Vec3.normalize(x, Vec3.cross(x, up, view));\n\n if (Vec3.lengthSqr(x) < EPSILON * EPSILON) {\n Mat3.identity(out);\n return out;\n }\n\n Vec3.cross(y, view, x);\n Mat3.set(\n out,\n x.x, x.y, x.z,\n y.x, y.y, y.z,\n view.x, view.y, view.z\n );\n\n return out;\n };\n })();\n return _fromViewUpIIFE(out, view, up);\n }\n\n /**\n * Calculates a 3x3 normal matrix (transpose inverse) from the 4x4 matrix.\n *\n * @param {Mat3} out - Matrix to store result.\n * @param {mat4} a - A 4x4 matrix to derive the normal matrix from.\n *\n * @returns {Mat3} out.\n * @static\n */\n static normalFromMat4 (out: Mat3, a: Mat4): Mat3 {\n let am = a.m, outm = out.m;\n let a00 = am[0], a01 = am[1], a02 = am[2], a03 = am[3],\n a10 = am[4], a11 = am[5], a12 = am[6], a13 = am[7],\n a20 = am[8], a21 = am[9], a22 = am[10], a23 = am[11],\n a30 = am[12], a31 = am[13], a32 = am[14], a33 = am[15];\n\n let b00 = a00 * a11 - a01 * a10;\n let b01 = a00 * a12 - a02 * a10;\n let b02 = a00 * a13 - a03 * a10;\n let b03 = a01 * a12 - a02 * a11;\n let b04 = a01 * a13 - a03 * a11;\n let b05 = a02 * a13 - a03 * a12;\n let b06 = a20 * a31 - a21 * a30;\n let b07 = a20 * a32 - a22 * a30;\n let b08 = a20 * a33 - a23 * a30;\n let b09 = a21 * a32 - a22 * a31;\n let b10 = a21 * a33 - a23 * a31;\n let b11 = a22 * a33 - a23 * a32;\n\n // Calculate the determinant\n let det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n if (!det) {\n return out;\n }\n det = 1.0 / det;\n\n outm[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n outm[1] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n outm[2] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n\n outm[3] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n outm[4] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n outm[5] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n\n outm[6] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n outm[7] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n outm[8] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n\n return out;\n }\n\n /**\n * Returns Frobenius norm of a matrix.\n *\n * @param {Mat3} a - Matrix to calculate Frobenius norm of.\n * @returns {Number} - The frobenius norm.\n * @static\n */\n static frob (a: Mat3): number {\n let am = a.m;\n return (Math.sqrt(Math.pow(am[0], 2) + Math.pow(am[1], 2) + Math.pow(am[2], 2) + Math.pow(am[3], 2) + Math.pow(am[4], 2) + Math.pow(am[5], 2) + Math.pow(am[6], 2) + Math.pow(am[7], 2) + Math.pow(am[8], 2)));\n }\n\n /**\n * Adds two matrices.\n *\n * @param {Mat3} out - Matrix to store result.\n * @param {Mat3} a - The first operand.\n * @param {Mat3} b - The second operand.\n * @returns {Mat3} out.\n * @static\n */\n static add (out: Mat3, a: Mat3, b: Mat3): Mat3 {\n let am = a.m, bm = b.m, outm = out.m;\n outm[0] = am[0] + bm[0];\n outm[1] = am[1] + bm[1];\n outm[2] = am[2] + bm[2];\n outm[3] = am[3] + bm[3];\n outm[4] = am[4] + bm[4];\n outm[5] = am[5] + bm[5];\n outm[6] = am[6] + bm[6];\n outm[7] = am[7] + bm[7];\n outm[8] = am[8] + bm[8];\n return out;\n }\n\n /**\n * Subtracts matrix b from matrix a.\n *\n * @param {Mat3} out - Matrix to store result.\n * @param {Mat3} a - The first operand.\n * @param {Mat3} b - The second operand.\n * @returns {Mat3} out.\n * @static\n */\n static subtract (out: Mat3, a: Mat3, b: Mat3): Mat3 {\n let am = a.m, bm = b.m, outm = out.m;\n outm[0] = am[0] - bm[0];\n outm[1] = am[1] - bm[1];\n outm[2] = am[2] - bm[2];\n outm[3] = am[3] - bm[3];\n outm[4] = am[4] - bm[4];\n outm[5] = am[5] - bm[5];\n outm[6] = am[6] - bm[6];\n outm[7] = am[7] - bm[7];\n outm[8] = am[8] - bm[8];\n return out;\n }\n\n /**\n * Multiply each element of a matrix by a scalar number.\n *\n * @param {Mat3} out - Matrix to store result.\n * @param {Mat3} a - Matrix to scale\n * @param {Number} b - The scale number.\n * @returns {Mat3} out.\n * @static\n */\n static multiplyScalar (out: Mat3, a: Mat3, b: number): Mat3 {\n let am = a.m, outm = out.m;\n outm[0] = am[0] * b;\n outm[1] = am[1] * b;\n outm[2] = am[2] * b;\n outm[3] = am[3] * b;\n outm[4] = am[4] * b;\n outm[5] = am[5] * b;\n outm[6] = am[6] * b;\n outm[7] = am[7] * b;\n outm[8] = am[8] * b;\n return out;\n }\n\n /**\n * Adds two matrices after multiplying each element of the second operand by a scalar number.\n *\n * @param {Mat3} out - Matrix to store result.\n * @param {Mat3} a - The first operand.\n * @param {Mat3} b - The second operand.\n * @param {Number} scale - The scale number.\n * @returns {Mat3} out.\n * @static\n */\n static multiplyScalarAndAdd (out: Mat3, a: Mat3, b: Mat3, scale: number): Mat3 {\n let am = a.m, bm = b.m, outm = out.m;\n outm[0] = am[0] + (bm[0] * scale);\n outm[1] = am[1] + (bm[1] * scale);\n outm[2] = am[2] + (bm[2] * scale);\n outm[3] = am[3] + (bm[3] * scale);\n outm[4] = am[4] + (bm[4] * scale);\n outm[5] = am[5] + (bm[5] * scale);\n outm[6] = am[6] + (bm[6] * scale);\n outm[7] = am[7] + (bm[7] * scale);\n outm[8] = am[8] + (bm[8] * scale);\n return out;\n }\n\n /**\n * Returns whether the specified matrices are equal. (Compared using ===)\n *\n * @param {Mat3} a - The first matrix.\n * @param {Mat3} b - The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n * @static\n */\n static exactEquals (a: Mat3, b: Mat3): boolean {\n let am = a.m, bm = b.m;\n return am[0] === bm[0] && am[1] === bm[1] && am[2] === bm[2] &&\n am[3] === bm[3] && am[4] === bm[4] && am[5] === bm[5] &&\n am[6] === bm[6] && am[7] === bm[7] && am[8] === bm[8];\n }\n\n /**\n * Returns whether the specified matrices are approximately equal.\n *\n * @param {Mat3} a - The first matrix.\n * @param {Mat3} b - The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n * @static\n */\n static equals (a: Mat3, b: Mat3): boolean {\n let am = a.m, bm = b.m;\n let a0 = am[0], a1 = am[1], a2 = am[2], a3 = am[3], a4 = am[4], a5 = am[5], a6 = am[6], a7 = am[7], a8 = am[8];\n let b0 = bm[0], b1 = bm[1], b2 = bm[2], b3 = bm[3], b4 = bm[4], b5 = bm[5], b6 = bm[6], b7 = bm[7], b8 = bm[8];\n return (\n Math.abs(a0 - b0) <= EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) &&\n Math.abs(a1 - b1) <= EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) &&\n Math.abs(a2 - b2) <= EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) &&\n Math.abs(a3 - b3) <= EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) &&\n Math.abs(a4 - b4) <= EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) &&\n Math.abs(a5 - b5) <= EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) &&\n Math.abs(a6 - b6) <= EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) &&\n Math.abs(a7 - b7) <= EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7)) &&\n Math.abs(a8 - b8) <= EPSILON * Math.max(1.0, Math.abs(a8), Math.abs(b8))\n );\n }\n\n /**\n * !#zh 矩阵转数组\n * !#en Matrix transpose array\n * @method toArray\n * @typescript\n * toArray > (out: Out, mat: IMat3Like, ofs?: number): Out\n * @param ofs 数组内的起始偏移量\n * @static\n */\n static toArray > (out: Out, mat: IMat3Like, ofs = 0) {\n let m = mat.m;\n for (let i = 0; i < 9; i++) {\n out[ofs + i] = m[i];\n }\n return out;\n }\n\n /**\n * !#zh 数组转矩阵\n * !#en Transfer matrix array\n * @method fromArray\n * @typescript\n * fromArray (out: Out, arr: IWritableArrayLike, ofs?: number): Out\n * @param ofs 数组起始偏移量\n * @static\n */\n static fromArray (out: Out, arr: IWritableArrayLike, ofs = 0) {\n let m = out.m;\n for (let i = 0; i < 9; i++) {\n m[i] = arr[ofs + i];\n }\n return out;\n }\n\n /**\n * !#en Matrix Data\n * !#zh 矩阵数据\n * @property {Float64Array | Float32Array} m\n */\n m: FloatArray;\n\n\n /**\n * @method constructor\n * @typescript\n * constructor (m00?: number | Float32Array, m01?: number, m02?: number, m03?: number, m04?: number, m05?: number, m06?: number, m07?: number, m08?: number)\n */\n constructor (\n m00: number | FloatArray = 1, m01 = 0, m02 = 0,\n m03 = 0, m04 = 1, m05 = 0,\n m06 = 0, m07 = 0, m08 = 1\n ) {\n if (m00 instanceof FLOAT_ARRAY_TYPE) {\n this.m = m00;\n } else {\n this.m = new FLOAT_ARRAY_TYPE(9);\n let m = this.m;\n /**\n * The element at column 0 row 0.\n * @type {number}\n * */\n m[0] = m00 as number;\n\n /**\n * The element at column 0 row 1.\n * @type {number}\n * */\n m[1] = m01;\n\n /**\n * The element at column 0 row 2.\n * @type {number}\n * */\n m[2] = m02;\n\n /**\n * The element at column 1 row 0.\n * @type {number}\n * */\n m[3] = m03;\n\n /**\n * The element at column 1 row 1.\n * @type {number}\n * */\n m[4] = m04;\n\n /**\n * The element at column 1 row 2.\n * @type {number}\n * */\n m[5] = m05;\n\n /**\n * The element at column 2 row 0.\n * @type {number}\n * */\n m[6] = m06;\n\n /**\n * The element at column 2 row 1.\n * @type {number}\n * */\n m[7] = m07;\n\n /**\n * The element at column 2 row 2.\n * @type {number}\n * */\n m[8] = m08;\n }\n }\n\n\n /**\n * Returns a string representation of a matrix.\n *\n * @param {Mat3} a - The matrix.\n * @returns {String} String representation of this matrix.\n */\n toString () {\n let am = this.m;\n return `mat3(${am[0]}, ${am[1]}, ${am[2]}, ${am[3]}, ${am[4]}, ${am[5]}, ${am[6]}, ${am[7]}, ${am[8]})`;\n }\n}\n\ncc.Mat3 = Mat3;\n","/****************************************************************************\n Copyright (c) 2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport ValueType from './value-type';\nimport CCClass from '../platform/CCClass';\nimport Vec3 from './vec3';\nimport Quat from './quat';\nimport { EPSILON, FLOAT_ARRAY_TYPE } from './utils';\nimport Mat3 from './mat3';\n\nlet _a00: number = 0; let _a01: number = 0; let _a02: number = 0; let _a03: number = 0;\nlet _a10: number = 0; let _a11: number = 0; let _a12: number = 0; let _a13: number = 0;\nlet _a20: number = 0; let _a21: number = 0; let _a22: number = 0; let _a23: number = 0;\nlet _a30: number = 0; let _a31: number = 0; let _a32: number = 0; let _a33: number = 0;\n\n/**\n * !#en Representation of 4*4 matrix.\n * !#zh 表示 4*4 矩阵\n *\n * @class Mat4\n * @extends ValueType\n */\nexport default class Mat4 extends ValueType {\n static mul = Mat4.multiply;\n static sub = Mat4.subtract;\n\n /**\n * !#en Multiply the current matrix with another one\n * !#zh 将当前矩阵与指定矩阵相乘\n * @method mul\n * @param {Mat4} other the second operand\n * @param {Mat4} [out] the receiving matrix, you can pass the same matrix to save result to itself, if not provided, a new matrix will be created\n * @returns {Mat4} out\n */\n mul (m: Mat4, out: Mat4): Mat4 {\n return Mat4.multiply(out || new Mat4(), this, m);\n }\n /**\n * !#en Multiply each element of the matrix by a scalar.\n * !#zh 将矩阵的每一个元素都乘以指定的缩放值。\n * @method mulScalar\n * @param {Number} number amount to scale the matrix's elements by\n * @param {Mat4} [out] the receiving matrix, you can pass the same matrix to save result to itself, if not provided, a new matrix will be created\n * @returns {Mat4} out\n */\n mulScalar (num: number, out: Mat4) {\n Mat4.multiplyScalar(out || new Mat4(), this, num);\n }\n /**\n * !#en Subtracts the current matrix with another one\n * !#zh 将当前矩阵与指定的矩阵相减\n * @method sub\n * @param {Mat4} other the second operand\n * @param {Mat4} [out] the receiving matrix, you can pass the same matrix to save result to itself, if not provided, a new matrix will be created\n * @returns {Mat4} out\n */\n sub (m: Mat4, out: Mat4) {\n Mat4.subtract(out || new Mat4(), this, m);\n }\n\n /**\n * Identity of Mat4\n * @property {Mat4} IDENTITY\n * @static\n */\n static IDENTITY = Object.freeze(new Mat4());\n\n /**\n * !#zh 获得指定矩阵的拷贝\n * !#en Copy of the specified matrix to obtain\n * @method clone\n * @typescript\n * clone (a: Out): Mat4\n * @static\n */\n static clone (a: Out) {\n let m = a.m;\n return new Mat4(\n m[0], m[1], m[2], m[3],\n m[4], m[5], m[6], m[7],\n m[8], m[9], m[10], m[11],\n m[12], m[13], m[14], m[15],\n );\n }\n\n /**\n * !#zh 复制目标矩阵\n * !#en Copy the target matrix\n * @method copy\n * @typescript\n * copy (out: Out, a: Out): Out\n * @static\n */\n static copy (out: Out, a: Out) {\n let m = out.m, am = a.m;\n m[0] = am[0];\n m[1] = am[1];\n m[2] = am[2];\n m[3] = am[3];\n m[4] = am[4];\n m[5] = am[5];\n m[6] = am[6];\n m[7] = am[7];\n m[8] = am[8];\n m[9] = am[9];\n m[10] = am[10];\n m[11] = am[11];\n m[12] = am[12];\n m[13] = am[13];\n m[14] = am[14];\n m[15] = am[15];\n return out;\n }\n\n /**\n * !#zh 设置矩阵值\n * !#en Setting matrix values\n * @static\n */\n static set (\n out: Out,\n m00: number, m01: number, m02: number, m03: number,\n m10: number, m11: number, m12: number, m13: number,\n m20: number, m21: number, m22: number, m23: number,\n m30: number, m31: number, m32: number, m33: number,\n ) {\n let m = out.m;\n m[0] = m00; m[1] = m01; m[2] = m02; m[3] = m03;\n m[4] = m10; m[5] = m11; m[6] = m12; m[7] = m13;\n m[8] = m20; m[9] = m21; m[10] = m22; m[11] = m23;\n m[12] = m30; m[13] = m31; m[14] = m32; m[15] = m33;\n return out;\n }\n\n /**\n * !#zh 将目标赋值为单位矩阵\n * !#en The target of an assignment is the identity matrix\n * @method identity\n * @typescript\n * identity (out: Out): Out\n * @static\n */\n static identity (out: Out) {\n let m = out.m;\n m[0] = 1;\n m[1] = 0;\n m[2] = 0;\n m[3] = 0;\n m[4] = 0;\n m[5] = 1;\n m[6] = 0;\n m[7] = 0;\n m[8] = 0;\n m[9] = 0;\n m[10] = 1;\n m[11] = 0;\n m[12] = 0;\n m[13] = 0;\n m[14] = 0;\n m[15] = 1;\n return out;\n }\n\n /**\n * !#zh 转置矩阵\n * !#en Transposed matrix\n * @method transpose\n * @typescript\n * transpose (out: Out, a: Out): Out\n * @static\n */\n static transpose (out: Out, a: Out) {\n let m = out.m, am = a.m;\n // If we are transposing ourselves we can skip a few steps but have to cache some values\n if (out === a) {\n const a01 = am[1], a02 = am[2], a03 = am[3], a12 = am[6], a13 = am[7], a23 = am[11];\n m[1] = am[4];\n m[2] = am[8];\n m[3] = am[12];\n m[4] = a01;\n m[6] = am[9];\n m[7] = am[13];\n m[8] = a02;\n m[9] = a12;\n m[11] = am[14];\n m[12] = a03;\n m[13] = a13;\n m[14] = a23;\n } else {\n m[0] = am[0];\n m[1] = am[4];\n m[2] = am[8];\n m[3] = am[12];\n m[4] = am[1];\n m[5] = am[5];\n m[6] = am[9];\n m[7] = am[13];\n m[8] = am[2];\n m[9] = am[6];\n m[10] = am[10];\n m[11] = am[14];\n m[12] = am[3];\n m[13] = am[7];\n m[14] = am[11];\n m[15] = am[15];\n }\n return out;\n }\n\n /**\n * !#zh 矩阵求逆\n * !#en Matrix inversion\n * @method invert\n * @typescript\n * invert (out: Out, a: Out): Out\n * @static\n */\n static invert (out: Out, a: Out) {\n let am = a.m;\n _a00 = am[0]; _a01 = am[1]; _a02 = am[2]; _a03 = am[3];\n _a10 = am[4]; _a11 = am[5]; _a12 = am[6]; _a13 = am[7];\n _a20 = am[8]; _a21 = am[9]; _a22 = am[10]; _a23 = am[11];\n _a30 = am[12]; _a31 = am[13]; _a32 = am[14]; _a33 = am[15];\n\n const b00 = _a00 * _a11 - _a01 * _a10;\n const b01 = _a00 * _a12 - _a02 * _a10;\n const b02 = _a00 * _a13 - _a03 * _a10;\n const b03 = _a01 * _a12 - _a02 * _a11;\n const b04 = _a01 * _a13 - _a03 * _a11;\n const b05 = _a02 * _a13 - _a03 * _a12;\n const b06 = _a20 * _a31 - _a21 * _a30;\n const b07 = _a20 * _a32 - _a22 * _a30;\n const b08 = _a20 * _a33 - _a23 * _a30;\n const b09 = _a21 * _a32 - _a22 * _a31;\n const b10 = _a21 * _a33 - _a23 * _a31;\n const b11 = _a22 * _a33 - _a23 * _a32;\n\n // Calculate the determinant\n let det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n if (det === 0) { return null; }\n det = 1.0 / det;\n\n let m = out.m;\n m[0] = (_a11 * b11 - _a12 * b10 + _a13 * b09) * det;\n m[1] = (_a02 * b10 - _a01 * b11 - _a03 * b09) * det;\n m[2] = (_a31 * b05 - _a32 * b04 + _a33 * b03) * det;\n m[3] = (_a22 * b04 - _a21 * b05 - _a23 * b03) * det;\n m[4] = (_a12 * b08 - _a10 * b11 - _a13 * b07) * det;\n m[5] = (_a00 * b11 - _a02 * b08 + _a03 * b07) * det;\n m[6] = (_a32 * b02 - _a30 * b05 - _a33 * b01) * det;\n m[7] = (_a20 * b05 - _a22 * b02 + _a23 * b01) * det;\n m[8] = (_a10 * b10 - _a11 * b08 + _a13 * b06) * det;\n m[9] = (_a01 * b08 - _a00 * b10 - _a03 * b06) * det;\n m[10] = (_a30 * b04 - _a31 * b02 + _a33 * b00) * det;\n m[11] = (_a21 * b02 - _a20 * b04 - _a23 * b00) * det;\n m[12] = (_a11 * b07 - _a10 * b09 - _a12 * b06) * det;\n m[13] = (_a00 * b09 - _a01 * b07 + _a02 * b06) * det;\n m[14] = (_a31 * b01 - _a30 * b03 - _a32 * b00) * det;\n m[15] = (_a20 * b03 - _a21 * b01 + _a22 * b00) * det;\n\n return out;\n }\n\n /**\n * !#zh 矩阵行列式\n * !#en Matrix determinant\n * @method determinant\n * @typescript\n * determinant (a: Out): number\n * @static\n */\n static determinant (a: Out): number {\n let m = a.m;\n _a00 = m[0]; _a01 = m[1]; _a02 = m[2]; _a03 = m[3];\n _a10 = m[4]; _a11 = m[5]; _a12 = m[6]; _a13 = m[7];\n _a20 = m[8]; _a21 = m[9]; _a22 = m[10]; _a23 = m[11];\n _a30 = m[12]; _a31 = m[13]; _a32 = m[14]; _a33 = m[15];\n\n const b00 = _a00 * _a11 - _a01 * _a10;\n const b01 = _a00 * _a12 - _a02 * _a10;\n const b02 = _a00 * _a13 - _a03 * _a10;\n const b03 = _a01 * _a12 - _a02 * _a11;\n const b04 = _a01 * _a13 - _a03 * _a11;\n const b05 = _a02 * _a13 - _a03 * _a12;\n const b06 = _a20 * _a31 - _a21 * _a30;\n const b07 = _a20 * _a32 - _a22 * _a30;\n const b08 = _a20 * _a33 - _a23 * _a30;\n const b09 = _a21 * _a32 - _a22 * _a31;\n const b10 = _a21 * _a33 - _a23 * _a31;\n const b11 = _a22 * _a33 - _a23 * _a32;\n\n // Calculate the determinant\n return b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n }\n\n /**\n * !#zh 矩阵乘法\n * !#en Matrix Multiplication\n * @method multiply\n * @typescript\n * multiply (out: Out, a: Out, b: Out): Out\n * @static\n */\n static multiply (out: Out, a: Out, b: Out) {\n let m = out.m, am = a.m, bm = b.m;\n _a00 = am[0]; _a01 = am[1]; _a02 = am[2]; _a03 = am[3];\n _a10 = am[4]; _a11 = am[5]; _a12 = am[6]; _a13 = am[7];\n _a20 = am[8]; _a21 = am[9]; _a22 = am[10]; _a23 = am[11];\n _a30 = am[12]; _a31 = am[13]; _a32 = am[14]; _a33 = am[15];\n\n // Cache only the current line of the second matrix\n let b0 = bm[0], b1 = bm[1], b2 = bm[2], b3 = bm[3];\n m[0] = b0 * _a00 + b1 * _a10 + b2 * _a20 + b3 * _a30;\n m[1] = b0 * _a01 + b1 * _a11 + b2 * _a21 + b3 * _a31;\n m[2] = b0 * _a02 + b1 * _a12 + b2 * _a22 + b3 * _a32;\n m[3] = b0 * _a03 + b1 * _a13 + b2 * _a23 + b3 * _a33;\n\n b0 = bm[4]; b1 = bm[5]; b2 = bm[6]; b3 = bm[7];\n m[4] = b0 * _a00 + b1 * _a10 + b2 * _a20 + b3 * _a30;\n m[5] = b0 * _a01 + b1 * _a11 + b2 * _a21 + b3 * _a31;\n m[6] = b0 * _a02 + b1 * _a12 + b2 * _a22 + b3 * _a32;\n m[7] = b0 * _a03 + b1 * _a13 + b2 * _a23 + b3 * _a33;\n\n b0 = bm[8]; b1 = bm[9]; b2 = bm[10]; b3 = bm[11];\n m[8] = b0 * _a00 + b1 * _a10 + b2 * _a20 + b3 * _a30;\n m[9] = b0 * _a01 + b1 * _a11 + b2 * _a21 + b3 * _a31;\n m[10] = b0 * _a02 + b1 * _a12 + b2 * _a22 + b3 * _a32;\n m[11] = b0 * _a03 + b1 * _a13 + b2 * _a23 + b3 * _a33;\n\n b0 = bm[12]; b1 = bm[13]; b2 = bm[14]; b3 = bm[15];\n m[12] = b0 * _a00 + b1 * _a10 + b2 * _a20 + b3 * _a30;\n m[13] = b0 * _a01 + b1 * _a11 + b2 * _a21 + b3 * _a31;\n m[14] = b0 * _a02 + b1 * _a12 + b2 * _a22 + b3 * _a32;\n m[15] = b0 * _a03 + b1 * _a13 + b2 * _a23 + b3 * _a33;\n return out;\n }\n\n /**\n * !#zh 在给定矩阵变换基础上加入变换\n * !#en Was added in a given transformation matrix transformation on the basis of\n * @method transform\n * @typescript\n * transform (out: Out, a: Out, v: VecLike): Out\n * @static\n */\n static transform (out: Out, a: Out, v: VecLike) {\n const x = v.x, y = v.y, z = v.z;\n let m = out.m, am = a.m;\n if (a === out) {\n m[12] = am[0] * x + am[4] * y + am[8] * z + am[12];\n m[13] = am[1] * x + am[5] * y + am[9] * z + am[13];\n m[14] = am[2] * x + am[6] * y + am[10] * z + am[14];\n m[15] = am[3] * x + am[7] * y + am[11] * z + am[15];\n } else {\n _a00 = am[0]; _a01 = am[1]; _a02 = am[2]; _a03 = am[3];\n _a10 = am[4]; _a11 = am[5]; _a12 = am[6]; _a13 = am[7];\n _a20 = am[8]; _a21 = am[9]; _a22 = am[10]; _a23 = am[11];\n _a30 = am[12]; _a31 = am[13]; _a32 = am[14]; _a33 = am[15];\n\n m[0] = _a00; m[1] = _a01; m[2] = _a02; m[3] = _a03;\n m[4] = _a10; m[5] = _a11; m[6] = _a12; m[7] = _a13;\n m[8] = _a20; m[9] = _a21; m[10] = _a22; m[11] = _a23;\n\n m[12] = _a00 * x + _a10 * y + _a20 * z + am[12];\n m[13] = _a01 * x + _a11 * y + _a21 * z + am[13];\n m[14] = _a02 * x + _a12 * y + _a22 * z + am[14];\n m[15] = _a03 * x + _a13 * y + _a23 * z + am[15];\n }\n return out;\n }\n\n /**\n * !#zh 在给定矩阵变换基础上加入新位移变换\n * !#en Add new displacement transducer in a matrix transformation on the basis of a given\n * @method translate\n * @typescript\n * translate (out: Out, a: Out, v: VecLike): Out\n * @static\n */\n static translate (out: Out, a: Out, v: VecLike) {\n let m = out.m, am = a.m;\n if (a === out) {\n m[12] += v.x;\n m[13] += v.y;\n m[14] += v.z;\n } else {\n m[0] = am[0]; m[1] = am[1]; m[2] = am[2]; m[3] = am[3];\n m[4] = am[4]; m[5] = am[5]; m[6] = am[6]; m[7] = am[7];\n m[8] = am[8]; m[9] = am[9]; m[10] = am[10]; m[11] = am[11];\n m[12] += v.x;\n m[13] += v.y;\n m[14] += v.z;\n m[15] = am[15];\n }\n return out;\n }\n\n /**\n * !#zh 在给定矩阵变换基础上加入新缩放变换\n * !#en Add new scaling transformation in a given matrix transformation on the basis of\n * @method scale\n * @typescript\n * scale (out: Out, a: Out, v: VecLike): Out\n * @static\n */\n static scale (out: Out, a: Out, v: VecLike) {\n const x = v.x, y = v.y, z = v.z;\n let m = out.m, am = a.m;\n m[0] = am[0] * x;\n m[1] = am[1] * x;\n m[2] = am[2] * x;\n m[3] = am[3] * x;\n m[4] = am[4] * y;\n m[5] = am[5] * y;\n m[6] = am[6] * y;\n m[7] = am[7] * y;\n m[8] = am[8] * z;\n m[9] = am[9] * z;\n m[10] = am[10] * z;\n m[11] = am[11] * z;\n m[12] = am[12];\n m[13] = am[13];\n m[14] = am[14];\n m[15] = am[15];\n return out;\n }\n\n /**\n * !#zh 在给定矩阵变换基础上加入新旋转变换\n * !#en Add a new rotational transform matrix transformation on the basis of a given\n * @method rotate\n * @typescript\n * rotate (out: Out, a: Out, rad: number, axis: VecLike): Out\n * @param rad 旋转角度\n * @param axis 旋转轴\n * @static\n */\n static rotate (out: Out, a: Out, rad: number, axis: VecLike) {\n let x = axis.x, y = axis.y, z = axis.z;\n\n let len = Math.sqrt(x * x + y * y + z * z);\n\n if (Math.abs(len) < EPSILON) {\n return null;\n }\n\n len = 1 / len;\n x *= len;\n y *= len;\n z *= len;\n\n const s = Math.sin(rad);\n const c = Math.cos(rad);\n const t = 1 - c;\n\n let am = a.m;\n _a00 = am[0]; _a01 = am[1]; _a02 = am[2]; _a03 = am[3];\n _a10 = am[4]; _a11 = am[5]; _a12 = am[6]; _a13 = am[7];\n _a20 = am[8]; _a21 = am[9]; _a22 = am[10]; _a23 = am[11];\n\n // Construct the elements of the rotation matrix\n const b00 = x * x * t + c, b01 = y * x * t + z * s, b02 = z * x * t - y * s;\n const b10 = x * y * t - z * s, b11 = y * y * t + c, b12 = z * y * t + x * s;\n const b20 = x * z * t + y * s, b21 = y * z * t - x * s, b22 = z * z * t + c;\n\n let m = out.m;\n // Perform rotation-specific matrix multiplication\n m[0] = _a00 * b00 + _a10 * b01 + _a20 * b02;\n m[1] = _a01 * b00 + _a11 * b01 + _a21 * b02;\n m[2] = _a02 * b00 + _a12 * b01 + _a22 * b02;\n m[3] = _a03 * b00 + _a13 * b01 + _a23 * b02;\n m[4] = _a00 * b10 + _a10 * b11 + _a20 * b12;\n m[5] = _a01 * b10 + _a11 * b11 + _a21 * b12;\n m[6] = _a02 * b10 + _a12 * b11 + _a22 * b12;\n m[7] = _a03 * b10 + _a13 * b11 + _a23 * b12;\n m[8] = _a00 * b20 + _a10 * b21 + _a20 * b22;\n m[9] = _a01 * b20 + _a11 * b21 + _a21 * b22;\n m[10] = _a02 * b20 + _a12 * b21 + _a22 * b22;\n m[11] = _a03 * b20 + _a13 * b21 + _a23 * b22;\n\n // If the source and destination differ, copy the unchanged last row\n if (a !== out) {\n m[12] = am[12];\n m[13] = am[13];\n m[14] = am[14];\n m[15] = am[15];\n }\n\n return out;\n }\n\n /**\n * !#zh 在给定矩阵变换基础上加入绕 X 轴的旋转变换\n * !#en Add rotational transformation around the X axis at a given matrix transformation on the basis of\n * @method rotateX\n * @typescript\n * rotateX (out: Out, a: Out, rad: number): Out\n * @param rad 旋转角度\n * @static\n */\n static rotateX (out: Out, a: Out, rad: number) {\n let m = out.m, am = a.m;\n const s = Math.sin(rad),\n c = Math.cos(rad),\n a10 = am[4],\n a11 = am[5],\n a12 = am[6],\n a13 = am[7],\n a20 = am[8],\n a21 = am[9],\n a22 = am[10],\n a23 = am[11];\n\n if (a !== out) { // If the source and destination differ, copy the unchanged rows\n m[0] = am[0];\n m[1] = am[1];\n m[2] = am[2];\n m[3] = am[3];\n m[12] = am[12];\n m[13] = am[13];\n m[14] = am[14];\n m[15] = am[15];\n }\n\n // Perform axis-specific matrix multiplication\n m[4] = a10 * c + a20 * s;\n m[5] = a11 * c + a21 * s;\n m[6] = a12 * c + a22 * s;\n m[7] = a13 * c + a23 * s;\n m[8] = a20 * c - a10 * s;\n m[9] = a21 * c - a11 * s;\n m[10] = a22 * c - a12 * s;\n m[11] = a23 * c - a13 * s;\n\n return out;\n }\n\n /**\n * !#zh 在给定矩阵变换基础上加入绕 Y 轴的旋转变换\n * !#en Add about the Y axis rotation transformation in a given matrix transformation on the basis of\n * @method rotateY\n * @typescript\n * rotateY (out: Out, a: Out, rad: number): Out\n * @param rad 旋转角度\n * @static\n */\n static rotateY (out: Out, a: Out, rad: number) {\n let m = out.m, am = a.m;\n const s = Math.sin(rad),\n c = Math.cos(rad),\n a00 = am[0],\n a01 = am[1],\n a02 = am[2],\n a03 = am[3],\n a20 = am[8],\n a21 = am[9],\n a22 = am[10],\n a23 = am[11];\n\n if (a !== out) { // If the source and destination differ, copy the unchanged rows\n m[4] = am[4];\n m[5] = am[5];\n m[6] = am[6];\n m[7] = am[7];\n m[12] = am[12];\n m[13] = am[13];\n m[14] = am[14];\n m[15] = am[15];\n }\n\n // Perform axis-specific matrix multiplication\n m[0] = a00 * c - a20 * s;\n m[1] = a01 * c - a21 * s;\n m[2] = a02 * c - a22 * s;\n m[3] = a03 * c - a23 * s;\n m[8] = a00 * s + a20 * c;\n m[9] = a01 * s + a21 * c;\n m[10] = a02 * s + a22 * c;\n m[11] = a03 * s + a23 * c;\n\n return out;\n }\n\n /**\n * !#zh 在给定矩阵变换基础上加入绕 Z 轴的旋转变换\n * !#en Added about the Z axis at a given rotational transformation matrix transformation on the basis of\n * @method rotateZ\n * @typescript\n * rotateZ (out: Out, a: Out, rad: number): Out\n * @param rad 旋转角度\n * @static\n */\n static rotateZ (out: Out, a: Out, rad: number) {\n const am = a.m;\n let m = out.m;\n const s = Math.sin(rad),\n c = Math.cos(rad),\n a00 = a.m[0],\n a01 = a.m[1],\n a02 = a.m[2],\n a03 = a.m[3],\n a10 = a.m[4],\n a11 = a.m[5],\n a12 = a.m[6],\n a13 = a.m[7];\n\n // If the source and destination differ, copy the unchanged last row\n if (a !== out) {\n m[8] = am[8];\n m[9] = am[9];\n m[10] = am[10];\n m[11] = am[11];\n m[12] = am[12];\n m[13] = am[13];\n m[14] = am[14];\n m[15] = am[15];\n }\n\n // Perform axis-specific matrix multiplication\n m[0] = a00 * c + a10 * s;\n m[1] = a01 * c + a11 * s;\n m[2] = a02 * c + a12 * s;\n m[3] = a03 * c + a13 * s;\n m[4] = a10 * c - a00 * s;\n m[5] = a11 * c - a01 * s;\n m[6] = a12 * c - a02 * s;\n m[7] = a13 * c - a03 * s;\n\n return out;\n }\n\n /**\n * !#zh 计算位移矩阵\n * !#en Displacement matrix calculation\n * @method fromTranslation\n * @typescript\n * fromTranslation (out: Out, v: VecLike): Out\n * @static\n */\n static fromTranslation (out: Out, v: VecLike) {\n let m = out.m;\n m[0] = 1;\n m[1] = 0;\n m[2] = 0;\n m[3] = 0;\n m[4] = 0;\n m[5] = 1;\n m[6] = 0;\n m[7] = 0;\n m[8] = 0;\n m[9] = 0;\n m[10] = 1;\n m[11] = 0;\n m[12] = v.x;\n m[13] = v.y;\n m[14] = v.z;\n m[15] = 1;\n return out;\n }\n\n /**\n * !#zh 计算缩放矩阵\n * !#en Scaling matrix calculation\n * @method fromScaling\n * @typescript\n * fromScaling (out: Out, v: VecLike): Out\n * @static\n */\n static fromScaling (out: Out, v: VecLike) {\n let m = out.m;\n m[0] = v.x;\n m[1] = 0;\n m[2] = 0;\n m[3] = 0;\n m[4] = 0;\n m[5] = v.y;\n m[6] = 0;\n m[7] = 0;\n m[8] = 0;\n m[9] = 0;\n m[10] = v.z;\n m[11] = 0;\n m[12] = 0;\n m[13] = 0;\n m[14] = 0;\n m[15] = 1;\n return out;\n }\n\n /**\n * !#zh 计算旋转矩阵\n * !#en Calculates the rotation matrix\n * @method fromRotation\n * @typescript\n * fromRotation (out: Out, rad: number, axis: VecLike): Out\n * @static\n */\n static fromRotation (out: Out, rad: number, axis: VecLike) {\n let x = axis.x, y = axis.y, z = axis.z;\n let len = Math.sqrt(x * x + y * y + z * z);\n\n if (Math.abs(len) < EPSILON) {\n return null;\n }\n\n len = 1 / len;\n x *= len;\n y *= len;\n z *= len;\n\n const s = Math.sin(rad);\n const c = Math.cos(rad);\n const t = 1 - c;\n\n // Perform rotation-specific matrix multiplication\n let m = out.m;\n m[0] = x * x * t + c;\n m[1] = y * x * t + z * s;\n m[2] = z * x * t - y * s;\n m[3] = 0;\n m[4] = x * y * t - z * s;\n m[5] = y * y * t + c;\n m[6] = z * y * t + x * s;\n m[7] = 0;\n m[8] = x * z * t + y * s;\n m[9] = y * z * t - x * s;\n m[10] = z * z * t + c;\n m[11] = 0;\n m[12] = 0;\n m[13] = 0;\n m[14] = 0;\n m[15] = 1;\n return out;\n }\n\n /**\n * !#zh 计算绕 X 轴的旋转矩阵\n * !#en Calculating rotation matrix about the X axis\n * @method fromXRotation\n * @typescript\n * fromXRotation (out: Out, rad: number): Out\n * @static\n */\n static fromXRotation (out: Out, rad: number) {\n const s = Math.sin(rad), c = Math.cos(rad);\n\n // Perform axis-specific matrix multiplication\n let m = out.m;\n m[0] = 1;\n m[1] = 0;\n m[2] = 0;\n m[3] = 0;\n m[4] = 0;\n m[5] = c;\n m[6] = s;\n m[7] = 0;\n m[8] = 0;\n m[9] = -s;\n m[10] = c;\n m[11] = 0;\n m[12] = 0;\n m[13] = 0;\n m[14] = 0;\n m[15] = 1;\n return out;\n }\n\n /**\n * !#zh 计算绕 Y 轴的旋转矩阵\n * !#en Calculating rotation matrix about the Y axis\n * @method fromYRotation\n * @typescript\n * fromYRotation (out: Out, rad: number): Out\n * @static\n */\n static fromYRotation (out: Out, rad: number) {\n const s = Math.sin(rad), c = Math.cos(rad);\n\n // Perform axis-specific matrix multiplication\n let m = out.m;\n m[0] = c;\n m[1] = 0;\n m[2] = -s;\n m[3] = 0;\n m[4] = 0;\n m[5] = 1;\n m[6] = 0;\n m[7] = 0;\n m[8] = s;\n m[9] = 0;\n m[10] = c;\n m[11] = 0;\n m[12] = 0;\n m[13] = 0;\n m[14] = 0;\n m[15] = 1;\n return out;\n }\n\n /**\n * !#zh 计算绕 Z 轴的旋转矩阵\n * !#en Calculating rotation matrix about the Z axis\n * @method fromZRotation\n * @typescript\n * fromZRotation (out: Out, rad: number): Out\n * @static\n */\n static fromZRotation (out: Out, rad: number) {\n const s = Math.sin(rad), c = Math.cos(rad);\n\n // Perform axis-specific matrix multiplication\n let m = out.m;\n m[0] = c;\n m[1] = s;\n m[2] = 0;\n m[3] = 0;\n m[4] = -s;\n m[5] = c;\n m[6] = 0;\n m[7] = 0;\n m[8] = 0;\n m[9] = 0;\n m[10] = 1;\n m[11] = 0;\n m[12] = 0;\n m[13] = 0;\n m[14] = 0;\n m[15] = 1;\n return out;\n }\n\n /**\n * !#zh 根据旋转和位移信息计算矩阵\n * !#en The rotation and displacement information calculating matrix\n * @method fromRT\n * @typescript\n * fromRT (out: Out, q: Quat, v: VecLike): Out\n * @static\n */\n static fromRT (out: Out, q: Quat, v: VecLike) {\n const x = q.x, y = q.y, z = q.z, w = q.w;\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n\n const xx = x * x2;\n const xy = x * y2;\n const xz = x * z2;\n const yy = y * y2;\n const yz = y * z2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n\n let m = out.m;\n m[0] = 1 - (yy + zz);\n m[1] = xy + wz;\n m[2] = xz - wy;\n m[3] = 0;\n m[4] = xy - wz;\n m[5] = 1 - (xx + zz);\n m[6] = yz + wx;\n m[7] = 0;\n m[8] = xz + wy;\n m[9] = yz - wx;\n m[10] = 1 - (xx + yy);\n m[11] = 0;\n m[12] = v.x;\n m[13] = v.y;\n m[14] = v.z;\n m[15] = 1;\n\n return out;\n }\n\n /**\n * !#zh 提取矩阵的位移信息, 默认矩阵中的变换以 S->R->T 的顺序应用\n * !#en Extracting displacement information of the matrix, the matrix transform to the default sequential application S-> R-> T is\n * @method getTranslation\n * @typescript\n * getTranslation (out: VecLike, mat: Out): VecLike\n * @static\n */\n static getTranslation (out: VecLike, mat: Out) {\n let m = mat.m;\n out.x = m[12];\n out.y = m[13];\n out.z = m[14];\n\n return out;\n }\n\n /**\n * !#zh 提取矩阵的缩放信息, 默认矩阵中的变换以 S->R->T 的顺序应用\n * !#en Scaling information extraction matrix, the matrix transform to the default sequential application S-> R-> T is\n * @method getScaling\n * @typescript\n * getScaling (out: VecLike, mat: Out): VecLike\n * @static\n */\n static getScaling (out: VecLike, mat: Out) {\n let m = mat.m;\n let m3 = m3_1.m;\n const m00 = m3[0] = m[0];\n const m01 = m3[1] = m[1];\n const m02 = m3[2] = m[2];\n const m04 = m3[3] = m[4];\n const m05 = m3[4] = m[5];\n const m06 = m3[5] = m[6];\n const m08 = m3[6] = m[8];\n const m09 = m3[7] = m[9];\n const m10 = m3[8] = m[10];\n out.x = Math.sqrt(m00 * m00 + m01 * m01 + m02 * m02);\n out.y = Math.sqrt(m04 * m04 + m05 * m05 + m06 * m06);\n out.z = Math.sqrt(m08 * m08 + m09 * m09 + m10 * m10);\n // account for refections\n if (Mat3.determinant(m3_1) < 0) { out.x *= -1; }\n return out;\n }\n\n /**\n * !#zh 提取矩阵的旋转信息, 默认输入矩阵不含有缩放信息,如考虑缩放应使用 `toRTS` 函数。\n * !#en Rotation information extraction matrix, the matrix containing no default input scaling information, such as the use of `toRTS` should consider the scaling function.\n * @method getRotation\n * @typescript\n * getRotation (out: Quat, mat: Out): Quat\n * @static\n */\n static getRotation (out: Quat, mat: Out) {\n let m = mat.m;\n const trace = m[0] + m[5] + m[10];\n let S = 0;\n\n if (trace > 0) {\n S = Math.sqrt(trace + 1.0) * 2;\n out.w = 0.25 * S;\n out.x = (m[6] - m[9]) / S;\n out.y = (m[8] - m[2]) / S;\n out.z = (m[1] - m[4]) / S;\n } else if ((m[0] > m[5]) && (m[0] > m[10])) {\n S = Math.sqrt(1.0 + m[0] - m[5] - m[10]) * 2;\n out.w = (m[6] - m[9]) / S;\n out.x = 0.25 * S;\n out.y = (m[1] + m[4]) / S;\n out.z = (m[8] + m[2]) / S;\n } else if (m[5] > m[10]) {\n S = Math.sqrt(1.0 + m[5] - m[0] - m[10]) * 2;\n out.w = (m[8] - m[2]) / S;\n out.x = (m[1] + m[4]) / S;\n out.y = 0.25 * S;\n out.z = (m[6] + m[9]) / S;\n } else {\n S = Math.sqrt(1.0 + m[10] - m[0] - m[5]) * 2;\n out.w = (m[1] - m[4]) / S;\n out.x = (m[8] + m[2]) / S;\n out.y = (m[6] + m[9]) / S;\n out.z = 0.25 * S;\n }\n\n return out;\n }\n\n /**\n * !#zh 提取旋转、位移、缩放信息, 默认矩阵中的变换以 S->R->T 的顺序应用\n * !#en Extracting rotational displacement, zoom information, the default matrix transformation in order S-> R-> T applications\n * @method toRTS\n * @typescript\n * toRTS (mat: Out, q: Quat, v: VecLike, s: VecLike): void\n * @static\n */\n static toRTS (mat: Out, q: Quat, v: VecLike, s: VecLike) {\n let m = mat.m;\n let m3 = m3_1.m;\n s.x = Vec3.set(v3_1, m[0], m[1], m[2]).mag();\n m3[0] = m[0] / s.x;\n m3[1] = m[1] / s.x;\n m3[2] = m[2] / s.x;\n s.y = Vec3.set(v3_1, m[4], m[5], m[6]).mag();\n m3[3] = m[4] / s.y;\n m3[4] = m[5] / s.y;\n m3[5] = m[6] / s.y;\n s.z = Vec3.set(v3_1, m[8], m[9], m[10]).mag();\n m3[6] = m[8] / s.z;\n m3[7] = m[9] / s.z;\n m3[8] = m[10] / s.z;\n const det = Mat3.determinant(m3_1);\n if (det < 0) { s.x *= -1; m3[0] *= -1; m3[1] *= -1; m3[2] *= -1; }\n Quat.fromMat3(q, m3_1); // already normalized\n Vec3.set(v, m[12], m[13], m[14]);\n }\n\n /**\n * !#zh 根据旋转、位移、缩放信息计算矩阵,以 S->R->T 的顺序应用\n * !#en The rotary displacement, the scaling matrix calculation information, the order S-> R-> T applications\n * @method fromRTS\n * @typescript\n * fromRTS (out: Out, q: Quat, v: VecLike, s: VecLike): Out\n * @static\n */\n static fromRTS (out: Out, q: Quat, v: VecLike, s: VecLike) {\n const x = q.x, y = q.y, z = q.z, w = q.w;\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n\n const xx = x * x2;\n const xy = x * y2;\n const xz = x * z2;\n const yy = y * y2;\n const yz = y * z2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n const sx = s.x;\n const sy = s.y;\n const sz = s.z;\n\n let m = out.m;\n m[0] = (1 - (yy + zz)) * sx;\n m[1] = (xy + wz) * sx;\n m[2] = (xz - wy) * sx;\n m[3] = 0;\n m[4] = (xy - wz) * sy;\n m[5] = (1 - (xx + zz)) * sy;\n m[6] = (yz + wx) * sy;\n m[7] = 0;\n m[8] = (xz + wy) * sz;\n m[9] = (yz - wx) * sz;\n m[10] = (1 - (xx + yy)) * sz;\n m[11] = 0;\n m[12] = v.x;\n m[13] = v.y;\n m[14] = v.z;\n m[15] = 1;\n\n return out;\n }\n\n /**\n * !#zh 根据指定的旋转、位移、缩放及变换中心信息计算矩阵,以 S->R->T 的顺序应用\n * !#en According to the specified rotation, displacement, and scale conversion matrix calculation information center, order S-> R-> T applications\n * @method fromRTSOrigin\n * @typescript\n * fromRTSOrigin (out: Out, q: Quat, v: VecLike, s: VecLike, o: VecLike): Out\n * @param q 旋转值\n * @param v 位移值\n * @param s 缩放值\n * @param o 指定变换中心\n * @static\n */\n static fromRTSOrigin (out: Out, q: Quat, v: VecLike, s: VecLike, o: VecLike) {\n const x = q.x, y = q.y, z = q.z, w = q.w;\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n\n const xx = x * x2;\n const xy = x * y2;\n const xz = x * z2;\n const yy = y * y2;\n const yz = y * z2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n\n const sx = s.x;\n const sy = s.y;\n const sz = s.z;\n\n const ox = o.x;\n const oy = o.y;\n const oz = o.z;\n\n let m = out.m;\n m[0] = (1 - (yy + zz)) * sx;\n m[1] = (xy + wz) * sx;\n m[2] = (xz - wy) * sx;\n m[3] = 0;\n m[4] = (xy - wz) * sy;\n m[5] = (1 - (xx + zz)) * sy;\n m[6] = (yz + wx) * sy;\n m[7] = 0;\n m[8] = (xz + wy) * sz;\n m[9] = (yz - wx) * sz;\n m[10] = (1 - (xx + yy)) * sz;\n m[11] = 0;\n m[12] = v.x + ox - (m[0] * ox + m[4] * oy + m[8] * oz);\n m[13] = v.y + oy - (m[1] * ox + m[5] * oy + m[9] * oz);\n m[14] = v.z + oz - (m[2] * ox + m[6] * oy + m[10] * oz);\n m[15] = 1;\n\n return out;\n }\n\n /**\n * !#zh 根据指定的旋转信息计算矩阵\n * !#en The rotation matrix calculation information specified\n * @method fromQuat\n * @typescript\n * fromQuat (out: Out, q: Quat): Out\n * @static\n */\n static fromQuat (out: Out, q: Quat) {\n const x = q.x, y = q.y, z = q.z, w = q.w;\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n\n const xx = x * x2;\n const yx = y * x2;\n const yy = y * y2;\n const zx = z * x2;\n const zy = z * y2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n\n let m = out.m;\n m[0] = 1 - yy - zz;\n m[1] = yx + wz;\n m[2] = zx - wy;\n m[3] = 0;\n\n m[4] = yx - wz;\n m[5] = 1 - xx - zz;\n m[6] = zy + wx;\n m[7] = 0;\n\n m[8] = zx + wy;\n m[9] = zy - wx;\n m[10] = 1 - xx - yy;\n m[11] = 0;\n\n m[12] = 0;\n m[13] = 0;\n m[14] = 0;\n m[15] = 1;\n\n return out;\n }\n\n /**\n * !#zh 根据指定的视锥体信息计算矩阵\n * !#en The matrix calculation information specified frustum\n * @method frustum\n * @typescript\n * frustum (out: Out, left: number, right: number, bottom: number, top: number, near: number, far: number): Out\n * @param left 左平面距离\n * @param right 右平面距离\n * @param bottom 下平面距离\n * @param top 上平面距离\n * @param near 近平面距离\n * @param far 远平面距离\n * @static\n */\n static frustum (out: Out, left: number, right: number, bottom: number, top: number, near: number, far: number) {\n const rl = 1 / (right - left);\n const tb = 1 / (top - bottom);\n const nf = 1 / (near - far);\n\n let m = out.m;\n m[0] = (near * 2) * rl;\n m[1] = 0;\n m[2] = 0;\n m[3] = 0;\n m[4] = 0;\n m[5] = (near * 2) * tb;\n m[6] = 0;\n m[7] = 0;\n m[8] = (right + left) * rl;\n m[9] = (top + bottom) * tb;\n m[10] = (far + near) * nf;\n m[11] = -1;\n m[12] = 0;\n m[13] = 0;\n m[14] = (far * near * 2) * nf;\n m[15] = 0;\n return out;\n }\n\n /**\n * !#zh 计算透视投影矩阵\n * !#en Perspective projection matrix calculation\n * @method perspective\n * @typescript\n * perspective (out: Out, fovy: number, aspect: number, near: number, far: number): Out\n * @param fovy 纵向视角高度\n * @param aspect 长宽比\n * @param near 近平面距离\n * @param far 远平面距离\n * @static\n */\n static perspective (out: Out, fovy: number, aspect: number, near: number, far: number) {\n const f = 1.0 / Math.tan(fovy / 2);\n const nf = 1 / (near - far);\n\n let m = out.m;\n m[0] = f / aspect;\n m[1] = 0;\n m[2] = 0;\n m[3] = 0;\n m[4] = 0;\n m[5] = f;\n m[6] = 0;\n m[7] = 0;\n m[8] = 0;\n m[9] = 0;\n m[10] = (far + near) * nf;\n m[11] = -1;\n m[12] = 0;\n m[13] = 0;\n m[14] = (2 * far * near) * nf;\n m[15] = 0;\n return out;\n }\n\n /**\n * !#zh 计算正交投影矩阵\n * !#en Computing orthogonal projection matrix\n * @method ortho\n * @typescript\n * ortho (out: Out, left: number, right: number, bottom: number, top: number, near: number, far: number): Out\n * @param left 左平面距离\n * @param right 右平面距离\n * @param bottom 下平面距离\n * @param top 上平面距离\n * @param near 近平面距离\n * @param far 远平面距离\n * @static\n */\n static ortho (out: Out, left: number, right: number, bottom: number, top: number, near: number, far: number) {\n const lr = 1 / (left - right);\n const bt = 1 / (bottom - top);\n const nf = 1 / (near - far);\n let m = out.m;\n m[0] = -2 * lr;\n m[1] = 0;\n m[2] = 0;\n m[3] = 0;\n m[4] = 0;\n m[5] = -2 * bt;\n m[6] = 0;\n m[7] = 0;\n m[8] = 0;\n m[9] = 0;\n m[10] = 2 * nf;\n m[11] = 0;\n m[12] = (left + right) * lr;\n m[13] = (top + bottom) * bt;\n m[14] = (far + near) * nf;\n m[15] = 1;\n return out;\n }\n\n /**\n * !#zh 根据视点计算矩阵,注意 `eye - center` 不能为零向量或与 `up` 向量平行\n * !#en `Up` parallel vector or vector center` not be zero - the matrix calculation according to the viewpoint, note` eye\n * @method lookAt\n * @typescript\n * lookAt (out: Out, eye: VecLike, center: VecLike, up: VecLike): Out\n * @param eye 当前位置\n * @param center 目标视点\n * @param up 视口上方向\n * @static\n */\n static lookAt (out: Out, eye: VecLike, center: VecLike, up: VecLike) {\n const eyex = eye.x;\n const eyey = eye.y;\n const eyez = eye.z;\n const upx = up.x;\n const upy = up.y;\n const upz = up.z;\n const centerx = center.x;\n const centery = center.y;\n const centerz = center.z;\n\n let z0 = eyex - centerx;\n let z1 = eyey - centery;\n let z2 = eyez - centerz;\n\n let len = 1 / Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2);\n z0 *= len;\n z1 *= len;\n z2 *= len;\n\n let x0 = upy * z2 - upz * z1;\n let x1 = upz * z0 - upx * z2;\n let x2 = upx * z1 - upy * z0;\n len = 1 / Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2);\n x0 *= len;\n x1 *= len;\n x2 *= len;\n\n const y0 = z1 * x2 - z2 * x1;\n const y1 = z2 * x0 - z0 * x2;\n const y2 = z0 * x1 - z1 * x0;\n\n let m = out.m;\n m[0] = x0;\n m[1] = y0;\n m[2] = z0;\n m[3] = 0;\n m[4] = x1;\n m[5] = y1;\n m[6] = z1;\n m[7] = 0;\n m[8] = x2;\n m[9] = y2;\n m[10] = z2;\n m[11] = 0;\n m[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);\n m[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);\n m[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);\n m[15] = 1;\n\n return out;\n }\n\n /**\n * !#zh 计算逆转置矩阵\n * !#en Reversal matrix calculation\n * @method inverseTranspose\n * @typescript\n * inverseTranspose (out: Out, a: Out): Out\n * @static\n */\n static inverseTranspose (out: Out, a: Out) {\n\n let m = a.m;\n _a00 = m[0]; _a01 = m[1]; _a02 = m[2]; _a03 = m[3];\n _a10 = m[4]; _a11 = m[5]; _a12 = m[6]; _a13 = m[7];\n _a20 = m[8]; _a21 = m[9]; _a22 = m[10]; _a23 = m[11];\n _a30 = m[12]; _a31 = m[13]; _a32 = m[14]; _a33 = m[15];\n\n const b00 = _a00 * _a11 - _a01 * _a10;\n const b01 = _a00 * _a12 - _a02 * _a10;\n const b02 = _a00 * _a13 - _a03 * _a10;\n const b03 = _a01 * _a12 - _a02 * _a11;\n const b04 = _a01 * _a13 - _a03 * _a11;\n const b05 = _a02 * _a13 - _a03 * _a12;\n const b06 = _a20 * _a31 - _a21 * _a30;\n const b07 = _a20 * _a32 - _a22 * _a30;\n const b08 = _a20 * _a33 - _a23 * _a30;\n const b09 = _a21 * _a32 - _a22 * _a31;\n const b10 = _a21 * _a33 - _a23 * _a31;\n const b11 = _a22 * _a33 - _a23 * _a32;\n\n // Calculate the determinant\n let det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n if (!det) {\n return null;\n }\n det = 1.0 / det;\n\n m = out.m;\n m[0] = (_a11 * b11 - _a12 * b10 + _a13 * b09) * det;\n m[1] = (_a12 * b08 - _a10 * b11 - _a13 * b07) * det;\n m[2] = (_a10 * b10 - _a11 * b08 + _a13 * b06) * det;\n m[3] = 0;\n\n m[4] = (_a02 * b10 - _a01 * b11 - _a03 * b09) * det;\n m[5] = (_a00 * b11 - _a02 * b08 + _a03 * b07) * det;\n m[6] = (_a01 * b08 - _a00 * b10 - _a03 * b06) * det;\n m[7] = 0;\n\n m[8] = (_a31 * b05 - _a32 * b04 + _a33 * b03) * det;\n m[9] = (_a32 * b02 - _a30 * b05 - _a33 * b01) * det;\n m[10] = (_a30 * b04 - _a31 * b02 + _a33 * b00) * det;\n m[11] = 0;\n\n m[12] = 0;\n m[13] = 0;\n m[14] = 0;\n m[15] = 1;\n\n return out;\n }\n\n /**\n * !#zh 逐元素矩阵加法\n * !#en Element by element matrix addition\n * @method add\n * @typescript\n * add (out: Out, a: Out, b: Out): Out\n * @static\n */\n static add (out: Out, a: Out, b: Out) {\n let m = out.m, am = a.m, bm = b.m;\n m[0] = am[0] + bm[0];\n m[1] = am[1] + bm[1];\n m[2] = am[2] + bm[2];\n m[3] = am[3] + bm[3];\n m[4] = am[4] + bm[4];\n m[5] = am[5] + bm[5];\n m[6] = am[6] + bm[6];\n m[7] = am[7] + bm[7];\n m[8] = am[8] + bm[8];\n m[9] = am[9] + bm[9];\n m[10] = am[10] + bm[10];\n m[11] = am[11] + bm[11];\n m[12] = am[12] + bm[12];\n m[13] = am[13] + bm[13];\n m[14] = am[14] + bm[14];\n m[15] = am[15] + bm[15];\n return out;\n }\n\n /**\n * !#zh 逐元素矩阵减法\n * !#en Matrix element by element subtraction\n * @method subtract\n * @typescript\n * subtract (out: Out, a: Out, b: Out): Out\n * @static\n */\n static subtract (out: Out, a: Out, b: Out) {\n let m = out.m, am = a.m, bm = b.m;\n m[0] = am[0] - bm[0];\n m[1] = am[1] - bm[1];\n m[2] = am[2] - bm[2];\n m[3] = am[3] - bm[3];\n m[4] = am[4] - bm[4];\n m[5] = am[5] - bm[5];\n m[6] = am[6] - bm[6];\n m[7] = am[7] - bm[7];\n m[8] = am[8] - bm[8];\n m[9] = am[9] - bm[9];\n m[10] = am[10] - bm[10];\n m[11] = am[11] - bm[11];\n m[12] = am[12] - bm[12];\n m[13] = am[13] - bm[13];\n m[14] = am[14] - bm[14];\n m[15] = am[15] - bm[15];\n return out;\n }\n\n /**\n * !#zh 矩阵标量乘法\n * !#en Matrix scalar multiplication\n * @method multiplyScalar\n * @typescript\n * multiplyScalar (out: Out, a: Out, b: number): Out\n * @static\n */\n static multiplyScalar (out: Out, a: Out, b: number) {\n let m = out.m, am = a.m;\n m[0] = am[0] * b;\n m[1] = am[1] * b;\n m[2] = am[2] * b;\n m[3] = am[3] * b;\n m[4] = am[4] * b;\n m[5] = am[5] * b;\n m[6] = am[6] * b;\n m[7] = am[7] * b;\n m[8] = am[8] * b;\n m[9] = am[9] * b;\n m[10] = am[10] * b;\n m[11] = am[11] * b;\n m[12] = am[12] * b;\n m[13] = am[13] * b;\n m[14] = am[14] * b;\n m[15] = am[15] * b;\n return out;\n }\n\n /**\n * !#zh 逐元素矩阵标量乘加: A + B * scale\n * !#en Elements of the matrix by the scalar multiplication and addition: A + B * scale\n * @method multiplyScalarAndAdd\n * @typescript\n * multiplyScalarAndAdd (out: Out, a: Out, b: Out, scale: number): Out\n * @static\n */\n static multiplyScalarAndAdd (out: Out, a: Out, b: Out, scale: number) {\n let m = out.m, am = a.m, bm = b.m;\n m[0] = am[0] + (bm[0] * scale);\n m[1] = am[1] + (bm[1] * scale);\n m[2] = am[2] + (bm[2] * scale);\n m[3] = am[3] + (bm[3] * scale);\n m[4] = am[4] + (bm[4] * scale);\n m[5] = am[5] + (bm[5] * scale);\n m[6] = am[6] + (bm[6] * scale);\n m[7] = am[7] + (bm[7] * scale);\n m[8] = am[8] + (bm[8] * scale);\n m[9] = am[9] + (bm[9] * scale);\n m[10] = am[10] + (bm[10] * scale);\n m[11] = am[11] + (bm[11] * scale);\n m[12] = am[12] + (bm[12] * scale);\n m[13] = am[13] + (bm[13] * scale);\n m[14] = am[14] + (bm[14] * scale);\n m[15] = am[15] + (bm[15] * scale);\n return out;\n }\n\n /**\n * !#zh 矩阵等价判断\n * !#en Analyzing the equivalent matrix\n * @method strictEquals\n * @return {bool}\n * @typescript\n * strictEquals (a: Out, b: Out): boolean\n * @static\n */\n static strictEquals (a: Out, b: Out) {\n let am = a.m, bm = b.m;\n return am[0] === bm[0] && am[1] === bm[1] && am[2] === bm[2] && am[3] === bm[3] &&\n am[4] === bm[4] && am[5] === bm[5] && am[6] === bm[6] && am[7] === bm[7] &&\n am[8] === bm[8] && am[9] === bm[9] && am[10] === bm[10] && am[11] === bm[11] &&\n am[12] === bm[12] && am[13] === bm[13] && am[14] === bm[14] && am[15] === bm[15];\n }\n\n /**\n * !#zh 排除浮点数误差的矩阵近似等价判断\n * !#en Negative floating point error is approximately equivalent to determining a matrix\n * @method equals\n * @typescript\n * equals (a: Out, b: Out, epsilon?: number): boolean\n * @static\n */\n static equals (a: Out, b: Out, epsilon = EPSILON) {\n\n let am = a.m, bm = b.m;\n return (\n Math.abs(am[0] - bm[0]) <= epsilon * Math.max(1.0, Math.abs(am[0]), Math.abs(bm[0])) &&\n Math.abs(am[1] - bm[1]) <= epsilon * Math.max(1.0, Math.abs(am[1]), Math.abs(bm[1])) &&\n Math.abs(am[2] - bm[2]) <= epsilon * Math.max(1.0, Math.abs(am[2]), Math.abs(bm[2])) &&\n Math.abs(am[3] - bm[3]) <= epsilon * Math.max(1.0, Math.abs(am[3]), Math.abs(bm[3])) &&\n Math.abs(am[4] - bm[4]) <= epsilon * Math.max(1.0, Math.abs(am[4]), Math.abs(bm[4])) &&\n Math.abs(am[5] - bm[5]) <= epsilon * Math.max(1.0, Math.abs(am[5]), Math.abs(bm[5])) &&\n Math.abs(am[6] - bm[6]) <= epsilon * Math.max(1.0, Math.abs(am[6]), Math.abs(bm[6])) &&\n Math.abs(am[7] - bm[7]) <= epsilon * Math.max(1.0, Math.abs(am[7]), Math.abs(bm[7])) &&\n Math.abs(am[8] - bm[8]) <= epsilon * Math.max(1.0, Math.abs(am[8]), Math.abs(bm[8])) &&\n Math.abs(am[9] - bm[9]) <= epsilon * Math.max(1.0, Math.abs(am[9]), Math.abs(bm[9])) &&\n Math.abs(am[10] - bm[10]) <= epsilon * Math.max(1.0, Math.abs(am[10]), Math.abs(bm[10])) &&\n Math.abs(am[11] - bm[11]) <= epsilon * Math.max(1.0, Math.abs(am[11]), Math.abs(bm[11])) &&\n Math.abs(am[12] - bm[12]) <= epsilon * Math.max(1.0, Math.abs(am[12]), Math.abs(bm[12])) &&\n Math.abs(am[13] - bm[13]) <= epsilon * Math.max(1.0, Math.abs(am[13]), Math.abs(bm[13])) &&\n Math.abs(am[14] - bm[14]) <= epsilon * Math.max(1.0, Math.abs(am[14]), Math.abs(bm[14])) &&\n Math.abs(am[15] - bm[15]) <= epsilon * Math.max(1.0, Math.abs(am[15]), Math.abs(bm[15]))\n );\n }\n\n /**\n * Calculates the adjugate of a matrix.\n *\n * @param {Mat4} out - Matrix to store result.\n * @param {Mat4} a - Matrix to calculate.\n * @returns {Mat4} out.\n */\n static adjoint (out, a) {\n let am = a.m, outm = out.m;\n let a00 = am[0], a01 = am[1], a02 = am[2], a03 = am[3],\n a10 = am[4], a11 = am[5], a12 = am[6], a13 = am[7],\n a20 = am[8], a21 = am[9], a22 = am[10], a23 = am[11],\n a30 = am[12], a31 = am[13], a32 = am[14], a33 = am[15];\n\n outm[0] = (a11 * (a22 * a33 - a23 * a32) - a21 * (a12 * a33 - a13 * a32) + a31 * (a12 * a23 - a13 * a22));\n outm[1] = -(a01 * (a22 * a33 - a23 * a32) - a21 * (a02 * a33 - a03 * a32) + a31 * (a02 * a23 - a03 * a22));\n outm[2] = (a01 * (a12 * a33 - a13 * a32) - a11 * (a02 * a33 - a03 * a32) + a31 * (a02 * a13 - a03 * a12));\n outm[3] = -(a01 * (a12 * a23 - a13 * a22) - a11 * (a02 * a23 - a03 * a22) + a21 * (a02 * a13 - a03 * a12));\n outm[4] = -(a10 * (a22 * a33 - a23 * a32) - a20 * (a12 * a33 - a13 * a32) + a30 * (a12 * a23 - a13 * a22));\n outm[5] = (a00 * (a22 * a33 - a23 * a32) - a20 * (a02 * a33 - a03 * a32) + a30 * (a02 * a23 - a03 * a22));\n outm[6] = -(a00 * (a12 * a33 - a13 * a32) - a10 * (a02 * a33 - a03 * a32) + a30 * (a02 * a13 - a03 * a12));\n outm[7] = (a00 * (a12 * a23 - a13 * a22) - a10 * (a02 * a23 - a03 * a22) + a20 * (a02 * a13 - a03 * a12));\n outm[8] = (a10 * (a21 * a33 - a23 * a31) - a20 * (a11 * a33 - a13 * a31) + a30 * (a11 * a23 - a13 * a21));\n outm[9] = -(a00 * (a21 * a33 - a23 * a31) - a20 * (a01 * a33 - a03 * a31) + a30 * (a01 * a23 - a03 * a21));\n outm[10] = (a00 * (a11 * a33 - a13 * a31) - a10 * (a01 * a33 - a03 * a31) + a30 * (a01 * a13 - a03 * a11));\n outm[11] = -(a00 * (a11 * a23 - a13 * a21) - a10 * (a01 * a23 - a03 * a21) + a20 * (a01 * a13 - a03 * a11));\n outm[12] = -(a10 * (a21 * a32 - a22 * a31) - a20 * (a11 * a32 - a12 * a31) + a30 * (a11 * a22 - a12 * a21));\n outm[13] = (a00 * (a21 * a32 - a22 * a31) - a20 * (a01 * a32 - a02 * a31) + a30 * (a01 * a22 - a02 * a21));\n outm[14] = -(a00 * (a11 * a32 - a12 * a31) - a10 * (a01 * a32 - a02 * a31) + a30 * (a01 * a12 - a02 * a11));\n outm[15] = (a00 * (a11 * a22 - a12 * a21) - a10 * (a01 * a22 - a02 * a21) + a20 * (a01 * a12 - a02 * a11));\n return out;\n }\n\n /**\n * !#zh 矩阵转数组\n * !#en Matrix transpose array\n * @method toArray\n * @typescript\n * toArray > (out: Out, mat: IMat4Like, ofs?: number): Out\n * @param ofs 数组内的起始偏移量\n * @static\n */\n static toArray> (out: Out, mat: IMat4Like, ofs = 0) {\n let m = mat.m;\n for (let i = 0; i < 16; i++) {\n out[ofs + i] = m[i];\n }\n return out;\n }\n\n /**\n * !#zh 数组转矩阵\n * !#en Transfer matrix array\n * @method fromArray\n * @typescript\n * fromArray (out: Out, arr: IWritableArrayLike, ofs?: number): Out\n * @param ofs 数组起始偏移量\n * @static\n */\n static fromArray (out: Out, arr: IWritableArrayLike, ofs = 0) {\n let m = out.m;\n for (let i = 0; i < 16; i++) {\n m[i] = arr[ofs + i];\n }\n return out;\n }\n\n /**\n * !#en Matrix Data\n * !#zh 矩阵数据\n * @property {Float64Array | Float32Array} m\n */\n m: FloatArray;\n\n\n /**\n * !#en\n * Constructor\n * see {{#crossLink \"cc/mat4:method\"}}cc.mat4{{/crossLink}}\n * !#zh\n * 构造函数,可查看 {{#crossLink \"cc/mat4:method\"}}cc.mat4{{/crossLink}}\n * @method constructor\n * @typescript\n * constructor ( m00?: number, m01?: number, m02?: number, m03?: number, m10?: number, m11?: number, m12?: number, m13?: number, m20?: number, m21?: number, m22?: number, m23?: number, m30?: number, m31?: number, m32?: number, m33?: number)\n */\n constructor (\n m00: number | FloatArray = 1, m01: number = 0, m02: number = 0, m03: number = 0,\n m10: number = 0, m11: number = 1, m12: number = 0, m13: number = 0,\n m20: number = 0, m21: number = 0, m22: number = 1, m23: number = 0,\n m30: number = 0, m31: number = 0, m32: number = 0, m33: number = 1) {\n super();\n if (m00 instanceof FLOAT_ARRAY_TYPE) {\n this.m = m00;\n } else {\n this.m = new FLOAT_ARRAY_TYPE(16);\n let tm = this.m;\n tm[0] = m00 as number;\n tm[1] = m01;\n tm[2] = m02;\n tm[3] = m03;\n tm[4] = m10;\n tm[5] = m11;\n tm[6] = m12;\n tm[7] = m13;\n tm[8] = m20;\n tm[9] = m21;\n tm[10] = m22;\n tm[11] = m23;\n tm[12] = m30;\n tm[13] = m31;\n tm[14] = m32;\n tm[15] = m33;\n }\n }\n\n /**\n * !#en clone a Mat4 object\n * !#zh 克隆一个 Mat4 对象\n * @method clone\n * @return {Mat4}\n */\n clone () {\n let t = this;\n let tm = t.m;\n return new Mat4(\n tm[0], tm[1], tm[2], tm[3],\n tm[4], tm[5], tm[6], tm[7],\n tm[8], tm[9], tm[10], tm[11],\n tm[12], tm[13], tm[14], tm[15]);\n }\n\n /**\n * !#en Sets the matrix with another one's value\n * !#zh 用另一个矩阵设置这个矩阵的值。\n * @method set\n * @param {Mat4} srcObj\n * @return {Mat4} returns this\n * @chainable\n */\n set (s) {\n let t = this;\n let tm = t.m, sm = s.m;\n tm[0] = sm[0];\n tm[1] = sm[1];\n tm[2] = sm[2];\n tm[3] = sm[3];\n tm[4] = sm[4];\n tm[5] = sm[5];\n tm[6] = sm[6];\n tm[7] = sm[7];\n tm[8] = sm[8];\n tm[9] = sm[9];\n tm[10] = sm[10];\n tm[11] = sm[11];\n tm[12] = sm[12];\n tm[13] = sm[13];\n tm[14] = sm[14];\n tm[15] = sm[15];\n return this;\n }\n\n /**\n * !#en Check whether two matrix equal\n * !#zh 当前的矩阵是否与指定的矩阵相等。\n * @method equals\n * @param {Mat4} other\n * @return {Boolean}\n */\n equals (other) {\n return Mat4.strictEquals(this, other);\n }\n\n /**\n * !#en Check whether two matrix equal with default degree of variance.\n * !#zh\n * 近似判断两个矩阵是否相等。
\n * 判断 2 个矩阵是否在默认误差范围之内,如果在则返回 true,反之则返回 false。\n * @method fuzzyEquals\n * @param {Mat4} other\n * @return {Boolean}\n */\n fuzzyEquals (other) {\n return Mat4.equals(this, other);\n }\n\n /**\n * !#en Transform to string with matrix informations\n * !#zh 转换为方便阅读的字符串。\n * @method toString\n * @return {string}\n */\n toString () {\n let tm = this.m;\n if (tm) {\n return \"[\\n\" +\n tm[0] + \", \" + tm[1] + \", \" + tm[2] + \", \" + tm[3] + \",\\n\" +\n tm[4] + \", \" + tm[5] + \", \" + tm[6] + \", \" + tm[7] + \",\\n\" +\n tm[8] + \", \" + tm[9] + \", \" + tm[10] + \", \" + tm[11] + \",\\n\" +\n tm[12] + \", \" + tm[13] + \", \" + tm[14] + \", \" + tm[15] + \"\\n\" +\n \"]\";\n } else {\n return \"[\\n\" +\n \"1, 0, 0, 0\\n\" +\n \"0, 1, 0, 0\\n\" +\n \"0, 0, 1, 0\\n\" +\n \"0, 0, 0, 1\\n\" +\n \"]\";\n }\n }\n\n /**\n * Set the matrix to the identity matrix\n * @method identity\n * @returns {Mat4} self\n * @chainable\n */\n identity (): this {\n return Mat4.identity(this);\n }\n\n /**\n * Transpose the values of a mat4\n * @method transpose\n * @param {Mat4} [out] the receiving matrix, you can pass the same matrix to save result to itself, if not provided, a new matrix will be created.\n * @returns {Mat4} out\n */\n transpose (out) {\n out = out || new Mat4();\n return Mat4.transpose(out, this);\n }\n\n /**\n * Inverts a mat4\n * @method invert\n * @param {Mat4} [out] the receiving matrix, you can pass the same matrix to save result to itself, if not provided, a new matrix will be created.\n * @returns {Mat4} out\n */\n invert (out) {\n out = out || new Mat4();\n return Mat4.invert(out, this);\n }\n\n /**\n * Calculates the adjugate of a mat4\n * @method adjoint\n * @param {Mat4} [out] the receiving matrix, you can pass the same matrix to save result to itself, if not provided, a new matrix will be created.\n * @returns {Mat4} out\n */\n adjoint (out) {\n out = out || new Mat4();\n return Mat4.adjoint(out, this);\n }\n\n /**\n * Calculates the determinant of a mat4\n * @method determinant\n * @returns {Number} determinant of a\n */\n determinant () {\n return Mat4.determinant(this);\n }\n\n /**\n * Adds two Mat4\n * @method add\n * @param {Mat4} other the second operand\n * @param {Mat4} [out] the receiving matrix, you can pass the same matrix to save result to itself, if not provided, a new matrix will be created.\n * @returns {Mat4} out\n */\n add (other, out) {\n out = out || new Mat4();\n return Mat4.add(out, this, other);\n }\n\n /**\n * Subtracts the current matrix with another one\n * @method subtract\n * @param {Mat4} other the second operand\n * @returns {Mat4} this\n */\n subtract (other): this {\n return Mat4.subtract(this, this, other);\n }\n\n /**\n * Subtracts the current matrix with another one\n * @method multiply\n * @param {Mat4} other the second operand\n * @returns {Mat4} this\n */\n multiply (other): this {\n return Mat4.multiply(this, this, other);\n }\n\n /**\n * Multiply each element of the matrix by a scalar.\n * @method multiplyScalar\n * @param {Number} number amount to scale the matrix's elements by\n * @returns {Mat4} this\n */\n multiplyScalar (number): this {\n return Mat4.multiplyScalar(this, this, number);\n }\n\n /**\n * Translate a mat4 by the given vector\n * @method translate\n * @param {Vec3} v vector to translate by\n * @param {Mat4} [out] the receiving matrix, you can pass the same matrix to save result to itself, if not provided, a new matrix will be created\n * @returns {Mat4} out\n */\n translate (v, out) {\n out = out || new Mat4();\n return Mat4.translate(out, this, v);\n }\n\n /**\n * Scales the mat4 by the dimensions in the given vec3\n * @method scale\n * @param {Vec3} v vector to scale by\n * @param {Mat4} [out] the receiving matrix, you can pass the same matrix to save result to itself, if not provided, a new matrix will be created\n * @returns {Mat4} out\n */\n scale (v, out) {\n out = out || new Mat4();\n return Mat4.scale(out, this, v);\n }\n\n /**\n * Rotates a mat4 by the given angle around the given axis\n * @method rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @param {Vec3} axis the axis to rotate around\n * @param {Mat4} [out] the receiving matrix, you can pass the same matrix to save result to itself, if not provided, a new matrix will be created\n * @returns {Mat4} out\n */\n rotate (rad, axis, out) {\n out = out || new Mat4();\n return Mat4.rotate(out, this, rad, axis);\n }\n\n /**\n * Returns the translation vector component of a transformation matrix.\n * @method getTranslation\n * @param {Vec3} out Vector to receive translation component, if not provided, a new vec3 will be created\n * @return {Vec3} out\n */\n getTranslation (out) {\n out = out || new Vec3();\n return Mat4.getTranslation(out, this);\n }\n\n /**\n * Returns the scale factor component of a transformation matrix\n * @method getScale\n * @param {Vec3} out Vector to receive scale component, if not provided, a new vec3 will be created\n * @return {Vec3} out\n */\n getScale (out) {\n out = out || new Vec3();\n return Mat4.getScaling(out, this);\n }\n\n /**\n * Returns the rotation factor component of a transformation matrix\n * @method getRotation\n * @param {Quat} out Vector to receive rotation component, if not provided, a new quaternion object will be created\n * @return {Quat} out\n */\n getRotation (out) {\n out = out || new Quat();\n return Mat4.getRotation(out, this);\n }\n\n /**\n * Restore the matrix values from a quaternion rotation, vector translation and vector scale\n * @method fromRTS\n * @param {Quat} q Rotation quaternion\n * @param {Vec3} v Translation vector\n * @param {Vec3} s Scaling vector\n * @returns {Mat4} the current mat4 object\n * @chainable\n */\n fromRTS (q, v, s): this {\n return Mat4.fromRTS(this, q, v, s);\n }\n\n /**\n * Restore the matrix values from a quaternion rotation\n * @method fromQuat\n * @param {Quat} q Rotation quaternion\n * @returns {Mat4} the current mat4 object\n * @chainable\n */\n fromQuat (quat): this {\n return Mat4.fromQuat(this, quat);\n }\n}\n\nconst v3_1: Vec3 = new Vec3();\nconst m3_1: Mat3 = new Mat3();\n\nCCClass.fastDefine('cc.Mat4', Mat4, {\n m00: 1, m01: 0, m02: 0, m03: 0,\n m04: 0, m05: 1, m06: 0, m07: 0,\n m08: 0, m09: 0, m10: 1, m11: 0,\n m12: 0, m13: 0, m14: 0, m15: 1\n});\n\nfor (let i = 0; i < 16; i++) {\n Object.defineProperty(Mat4.prototype, 'm' + i, {\n get () {\n return this.m[i];\n },\n set (value) {\n this.m[i] = value;\n },\n });\n}\n\n/**\n * @module cc\n */\n\n/**\n * !#en The convenience method to create a new {{#crossLink \"Mat4\"}}cc.Mat4{{/crossLink}}.\n * !#zh 通过该简便的函数进行创建 {{#crossLink \"Mat4\"}}cc.Mat4{{/crossLink}} 对象。\n * @method mat4\n * @param {Number} [m00] Component in column 0, row 0 position (index 0)\n * @param {Number} [m01] Component in column 0, row 1 position (index 1)\n * @param {Number} [m02] Component in column 0, row 2 position (index 2)\n * @param {Number} [m03] Component in column 0, row 3 position (index 3)\n * @param {Number} [m10] Component in column 1, row 0 position (index 4)\n * @param {Number} [m11] Component in column 1, row 1 position (index 5)\n * @param {Number} [m12] Component in column 1, row 2 position (index 6)\n * @param {Number} [m13] Component in column 1, row 3 position (index 7)\n * @param {Number} [m20] Component in column 2, row 0 position (index 8)\n * @param {Number} [m21] Component in column 2, row 1 position (index 9)\n * @param {Number} [m22] Component in column 2, row 2 position (index 10)\n * @param {Number} [m23] Component in column 2, row 3 position (index 11)\n * @param {Number} [m30] Component in column 3, row 0 position (index 12)\n * @param {Number} [m31] Component in column 3, row 1 position (index 13)\n * @param {Number} [m32] Component in column 3, row 2 position (index 14)\n * @param {Number} [m33] Component in column 3, row 3 position (index 15)\n * @return {Mat4}\n */\ncc.mat4 = function (m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\n let mat = new Mat4(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33);\n if (m00 === undefined) {\n Mat4.identity(mat);\n }\n return mat;\n};\n\ncc.Mat4 = Mat4;\n","/****************************************************************************\n Copyright (c) 2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport ValueType from './value-type';\nimport CCClass from '../platform/CCClass';\nimport Vec3 from './vec3';\nimport Mat3 from './mat3';\nimport { EPSILON, toDegree } from './utils';\n\nlet _x: number = 0.0;\nlet _y: number = 0.0;\nlet _z: number = 0.0;\nlet _w: number = 0.0;\n\n/**\n * !#en Representation of 2D vectors and points.\n * !#zh 表示 2D 向量和坐标\n *\n * @class Quat\n * @extends ValueType\n */\n\n/**\n * !#en\n * Constructor\n * see {{#crossLink \"cc/quat:method\"}}cc.quat{{/crossLink}}\n * !#zh\n * 构造函数,可查看 {{#crossLink \"cc/quat:method\"}}cc.quat{{/crossLink}}\n * @method constructor\n * @param {number} [x=0]\n * @param {number} [y=0]\n * @param {number} [z=0]\n * @param {number} [w=1]\n */\nexport default class Quat extends ValueType {\n static mul = Quat.multiply;\n static scale = Quat.multiplyScalar;\n static mag = Quat.len;\n\n /**\n * !#en Calculate the multiply result between this quaternion and another one\n * !#zh 计算四元数乘积的结果\n * @method mul\n * @param {Quat} other\n * @param {Quat} [out]\n * @returns {Quat} out\n */\n mul (other: Quat, out?: Quat): Quat {\n return Quat.multiply(out || new Quat(), this, other);\n }\n\n static IDENTITY = Object.freeze(new Quat());\n\n /**\n * !#zh 获得指定四元数的拷贝\n * !#en Obtaining copy specified quaternion\n * @method clone\n * @typescript\n * clone (a: Out): Quat\n * @static\n */\n static clone (a: Out) {\n return new Quat(a.x, a.y, a.z, a.w);\n }\n\n /**\n * !#zh 复制目标四元数\n * !#en Copy quaternion target\n * @method copy\n * @typescript\n * copy (out: Out, a: QuatLike): Out\n * @static\n */\n static copy (out: Out, a: QuatLike) {\n out.x = a.x;\n out.y = a.y;\n out.z = a.z;\n out.w = a.w;\n return out;\n }\n\n /**\n * !#zh 设置四元数值\n * !#en Provided Quaternion Value\n * @method set\n * @typescript\n * set (out: Out, x: number, y: number, z: number, w: number): Out\n * @static\n */\n static set (out: Out, x: number, y: number, z: number, w: number) {\n out.x = x;\n out.y = y;\n out.z = z;\n out.w = w;\n return out;\n }\n\n /**\n * !#zh 将目标赋值为单位四元数\n * !#en The target of an assignment as a unit quaternion\n * @method identity\n * @typescript\n * identity (out: Out): Out\n * @static\n */\n static identity (out: Out) {\n out.x = 0;\n out.y = 0;\n out.z = 0;\n out.w = 1;\n return out;\n }\n\n /**\n * !#zh 设置四元数为两向量间的最短路径旋转,默认两向量都已归一化\n * !#en Set quaternion rotation is the shortest path between two vectors, the default two vectors are normalized\n * @method rotationTo\n * @typescript\n * rotationTo (out: Out, a: VecLike, b: VecLike): Out\n * @static\n */\n static rotationTo (out: Out, a: VecLike, b: VecLike) {\n const dot = Vec3.dot(a, b);\n if (dot < -0.999999) {\n Vec3.cross(v3_1, Vec3.RIGHT, a);\n if (v3_1.mag() < 0.000001) {\n Vec3.cross(v3_1, Vec3.UP, a);\n }\n Vec3.normalize(v3_1, v3_1);\n Quat.fromAxisAngle(out, v3_1, Math.PI);\n return out;\n } else if (dot > 0.999999) {\n out.x = 0;\n out.y = 0;\n out.z = 0;\n out.w = 1;\n return out;\n } else {\n Vec3.cross(v3_1, a, b);\n out.x = v3_1.x;\n out.y = v3_1.y;\n out.z = v3_1.z;\n out.w = 1 + dot;\n return Quat.normalize(out, out);\n }\n }\n\n /**\n * !#zh 获取四元数的旋转轴和旋转弧度\n * !#en Get the rotary shaft and the arc of rotation quaternion\n * @method getAxisAngle\n * @param {Vec3} outAxis - 旋转轴输出\n * @param {Quat} q - 源四元数\n * @return {Number} - 旋转弧度\n * @typescript\n * getAxisAngle (outAxis: VecLike, q: Out): number\n * @static\n */\n static getAxisAngle (outAxis: VecLike, q: Out) {\n const rad = Math.acos(q.w) * 2.0;\n const s = Math.sin(rad / 2.0);\n if (s !== 0.0) {\n outAxis.x = q.x / s;\n outAxis.y = q.y / s;\n outAxis.z = q.z / s;\n } else {\n // If s is zero, return any axis (no rotation - axis does not matter)\n outAxis.x = 1;\n outAxis.y = 0;\n outAxis.z = 0;\n }\n return rad;\n }\n\n /**\n * !#zh 四元数乘法\n * !#en Quaternion multiplication\n * @method multiply\n * @typescript\n * multiply (out: Out, a: QuatLike_1, b: QuatLike_2): Out\n * @static\n */\n static multiply (out: Out, a: QuatLike_1, b: QuatLike_2) {\n _x = a.x * b.w + a.w * b.x + a.y * b.z - a.z * b.y;\n _y = a.y * b.w + a.w * b.y + a.z * b.x - a.x * b.z;\n _z = a.z * b.w + a.w * b.z + a.x * b.y - a.y * b.x;\n _w = a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z;\n out.x = _x;\n out.y = _y;\n out.z = _z;\n out.w = _w;\n return out;\n }\n\n /**\n * !#zh 四元数标量乘法\n * !#en Quaternion scalar multiplication\n * @method multiplyScalar\n * @typescript\n * multiplyScalar (out: Out, a: Out, b: number): Out\n * @static\n */\n static multiplyScalar (out: Out, a: Out, b: number) {\n out.x = a.x * b;\n out.y = a.y * b;\n out.z = a.z * b;\n out.w = a.w * b;\n return out;\n }\n\n /**\n * !#zh 四元数乘加:A + B * scale\n * !#en Quaternion multiplication and addition: A + B * scale\n * @method scaleAndAdd\n * @typescript\n * scaleAndAdd (out: Out, a: Out, b: Out, scale: number): Out\n * @static\n */\n static scaleAndAdd (out: Out, a: Out, b: Out, scale: number) {\n out.x = a.x + b.x * scale;\n out.y = a.y + b.y * scale;\n out.z = a.z + b.z * scale;\n out.w = a.w + b.w * scale;\n return out;\n }\n\n /**\n * !#zh 绕 X 轴旋转指定四元数\n * !#en About the X axis specified quaternion\n * @method rotateX\n * @typescript\n * rotateX (out: Out, a: Out, rad: number): Out\n * @param rad 旋转弧度\n * @static\n */\n static rotateX (out: Out, a: Out, rad: number) {\n rad *= 0.5;\n\n const bx = Math.sin(rad);\n const bw = Math.cos(rad);\n\n _x = a.x * bw + a.w * bx;\n _y = a.y * bw + a.z * bx;\n _z = a.z * bw - a.y * bx;\n _w = a.w * bw - a.x * bx;\n\n out.x = _x;\n out.y = _y;\n out.z = _z;\n out.w = _w;\n\n return out;\n }\n\n /**\n * !#zh 绕 Y 轴旋转指定四元数\n * !#en Rotation about the Y axis designated quaternion\n * @method rotateY\n * @typescript\n * rotateY (out: Out, a: Out, rad: number): Out\n * @param rad 旋转弧度\n * @static\n */\n static rotateY (out: Out, a: Out, rad: number) {\n rad *= 0.5;\n\n const by = Math.sin(rad);\n const bw = Math.cos(rad);\n\n _x = a.x * bw - a.z * by;\n _y = a.y * bw + a.w * by;\n _z = a.z * bw + a.x * by;\n _w = a.w * bw - a.y * by;\n\n out.x = _x;\n out.y = _y;\n out.z = _z;\n out.w = _w;\n\n return out;\n }\n\n /**\n * !#zh 绕 Z 轴旋转指定四元数\n * !#en Around the Z axis specified quaternion\n * @method rotateZ\n * @typescript\n * rotateZ (out: Out, a: Out, rad: number): Out\n * @param rad 旋转弧度\n * @static\n */\n static rotateZ (out: Out, a: Out, rad: number) {\n rad *= 0.5;\n\n const bz = Math.sin(rad);\n const bw = Math.cos(rad);\n\n _x = a.x * bw + a.y * bz;\n _y = a.y * bw - a.x * bz;\n _z = a.z * bw + a.w * bz;\n _w = a.w * bw - a.z * bz;\n\n out.x = _x;\n out.y = _y;\n out.z = _z;\n out.w = _w;\n\n return out;\n }\n\n /**\n * !#zh 绕世界空间下指定轴旋转四元数\n * !#en Space around the world at a given axis of rotation quaternion\n * @method rotateAround\n * @typescript\n * rotateAround (out: Out, rot: Out, axis: VecLike, rad: number): Out\n * @param axis 旋转轴,默认已归一化\n * @param rad 旋转弧度\n * @static\n */\n static rotateAround (out: Out, rot: Out, axis: VecLike, rad: number) {\n // get inv-axis (local to rot)\n Quat.invert(qt_1, rot);\n Vec3.transformQuat(v3_1, axis, qt_1);\n // rotate by inv-axis\n Quat.fromAxisAngle(qt_1, v3_1, rad);\n Quat.multiply(out, rot, qt_1);\n return out;\n }\n\n /**\n * !#zh 绕本地空间下指定轴旋转四元数\n * !#en Local space around the specified axis rotation quaternion\n * @method rotateAroundLocal\n * @typescript\n * rotateAroundLocal (out: Out, rot: Out, axis: VecLike, rad: number): Out\n * @param axis 旋转轴\n * @param rad 旋转弧度\n * @static\n */\n static rotateAroundLocal (out: Out, rot: Out, axis: VecLike, rad: number) {\n Quat.fromAxisAngle(qt_1, axis, rad);\n Quat.multiply(out, rot, qt_1);\n return out;\n }\n\n /**\n * !#zh 根据 xyz 分量计算 w 分量,默认已归一化\n * !#en The component w xyz components calculated, normalized by default\n * @method calculateW\n * @typescript\n * calculateW (out: Out, a: Out): Out\n * @static\n */\n static calculateW (out: Out, a: Out) {\n\n out.x = a.x;\n out.y = a.y;\n out.z = a.z;\n out.w = Math.sqrt(Math.abs(1.0 - a.x * a.x - a.y * a.y - a.z * a.z));\n return out;\n }\n\n /**\n * !#zh 四元数点积(数量积)\n * !#en Quaternion dot product (scalar product)\n * @method dot\n * @typescript\n * dot (a: Out, b: Out): number\n * @static\n */\n static dot (a: Out, b: Out) {\n return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w;\n }\n\n /**\n * !#zh 逐元素线性插值: A + t * (B - A)\n * !#en Element by element linear interpolation: A + t * (B - A)\n * @method lerp\n * @typescript\n * lerp (out: Out, a: Out, b: Out, t: number): Out\n * @static\n */\n static lerp (out: Out, a: Out, b: Out, t: number) {\n out.x = a.x + t * (b.x - a.x);\n out.y = a.y + t * (b.y - a.y);\n out.z = a.z + t * (b.z - a.z);\n out.w = a.w + t * (b.w - a.w);\n return out;\n }\n\n /**\n * !#zh 四元数球面插值\n * !#en Spherical quaternion interpolation\n * @method slerp\n * @typescript\n * slerp(out: Out, a: QuatLike_1, b: QuatLike_2, t: number): Out\n * @static\n */\n static slerp\n (out: Out, a: QuatLike_1, b: QuatLike_2, t: number) {\n // benchmarks:\n // http://jsperf.com/quaternion-slerp-implementations\n\n let scale0 = 0;\n let scale1 = 0;\n\n // calc cosine\n let cosom = a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w;\n // adjust signs (if necessary)\n if (cosom < 0.0) {\n cosom = -cosom;\n b.x = -b.x;\n b.y = -b.y;\n b.z = -b.z;\n b.w = -b.w;\n }\n // calculate coefficients\n if ((1.0 - cosom) > 0.000001) {\n // standard case (slerp)\n const omega = Math.acos(cosom);\n const sinom = Math.sin(omega);\n scale0 = Math.sin((1.0 - t) * omega) / sinom;\n scale1 = Math.sin(t * omega) / sinom;\n } else {\n // \"from\" and \"to\" quaternions are very close\n // ... so we can do a linear interpolation\n scale0 = 1.0 - t;\n scale1 = t;\n }\n // calculate final values\n out.x = scale0 * a.x + scale1 * b.x;\n out.y = scale0 * a.y + scale1 * b.y;\n out.z = scale0 * a.z + scale1 * b.z;\n out.w = scale0 * a.w + scale1 * b.w;\n\n return out;\n }\n\n /**\n * !#zh 带两个控制点的四元数球面插值\n * !#en Quaternion with two spherical interpolation control points\n * @method sqlerp\n * @typescript\n * sqlerp (out: Out, a: Out, b: Out, c: Out, d: Out, t: number): Out\n * @static\n */\n static sqlerp (out: Out, a: Out, b: Out, c: Out, d: Out, t: number) {\n Quat.slerp(qt_1, a, d, t);\n Quat.slerp(qt_2, b, c, t);\n Quat.slerp(out, qt_1, qt_2, 2 * t * (1 - t));\n return out;\n }\n\n /**\n * !#zh 四元数求逆\n * !#en Quaternion inverse\n * @method invert\n * @typescript\n * invert (out: Out, a: QuatLike): Out\n * @static\n */\n static invert (out: Out, a: QuatLike) {\n const dot = a.x * a.x + a.y * a.y + a.z * a.z + a.w * a.w;\n const invDot = dot ? 1.0 / dot : 0;\n\n // TODO: Would be faster to return [0,0,0,0] immediately if dot == 0\n\n out.x = -a.x * invDot;\n out.y = -a.y * invDot;\n out.z = -a.z * invDot;\n out.w = a.w * invDot;\n return out;\n }\n\n /**\n * !#zh 求共轭四元数,对单位四元数与求逆等价,但更高效\n * !#en Conjugating a quaternion, and the unit quaternion equivalent to inversion, but more efficient\n * @method conjugate\n * @typescript\n * conjugate (out: Out, a: Out): Out\n * @static\n */\n static conjugate (out: Out, a: Out) {\n out.x = -a.x;\n out.y = -a.y;\n out.z = -a.z;\n out.w = a.w;\n return out;\n }\n\n /**\n * !#zh 求四元数长度\n * !#en Seek length quaternion\n * @method len\n * @typescript\n * len (a: Out): number\n * @static\n */\n static len (a: Out) {\n return Math.sqrt(a.x * a.x + a.y * a.y + a.z * a.z + a.w * a.w);\n }\n\n /**\n * !#zh 求四元数长度平方\n * !#en Seeking quaternion square of the length\n * @method lengthSqr\n * @typescript\n * lengthSqr (a: Out): number\n * @static\n */\n static lengthSqr (a: Out) {\n return a.x * a.x + a.y * a.y + a.z * a.z + a.w * a.w;\n }\n\n /**\n * !#zh 归一化四元数\n * !#en Normalized quaternions\n * @method normalize\n * @typescript\n * normalize (out: Out, a: Out): Out\n * @static\n */\n static normalize (out: Out, a: Out) {\n let len = a.x * a.x + a.y * a.y + a.z * a.z + a.w * a.w;\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n out.x = a.x * len;\n out.y = a.y * len;\n out.z = a.z * len;\n out.w = a.w * len;\n }\n return out;\n }\n\n /**\n * !#zh 根据本地坐标轴朝向计算四元数,默认三向量都已归一化且相互垂直\n * !#en Calculated according to the local orientation quaternion coordinate axis, the default three vectors are normalized and mutually perpendicular\n * @method fromAxes\n * @typescript\n * fromAxes (out: Out, xAxis: VecLike, yAxis: VecLike, zAxis: VecLike): Out\n * @static\n */\n static fromAxes (out: Out, xAxis: VecLike, yAxis: VecLike, zAxis: VecLike) {\n Mat3.set(m3_1,\n xAxis.x, xAxis.y, xAxis.z,\n yAxis.x, yAxis.y, yAxis.z,\n zAxis.x, zAxis.y, zAxis.z,\n );\n return Quat.normalize(out, Quat.fromMat3(out, m3_1));\n }\n\n /**\n * !#zh 根据视口的前方向和上方向计算四元数\n * !#en The forward direction and the direction of the viewport computing quaternion\n * @method fromViewUp\n * @typescript\n * fromViewUp (out: Out, view: Vec3, up?: Vec3): Out\n * @param view 视口面向的前方向,必须归一化\n * @param up 视口的上方向,必须归一化,默认为 (0, 1, 0)\n * @static\n */\n static fromViewUp (out: Out, view: Vec3, up?: Vec3) {\n Mat3.fromViewUp(m3_1, view, up);\n return Quat.normalize(out, Quat.fromMat3(out, m3_1));\n }\n\n /**\n * !#zh 根据旋转轴和旋转弧度计算四元数\n * !#en The quaternion calculated and the arc of rotation of the rotary shaft\n * @method fromAxisAngle\n * @typescript\n * fromAxisAngle (out: Out, axis: VecLike, rad: number): Out\n * @static\n */\n static fromAxisAngle (out: Out, axis: VecLike, rad: number) {\n rad = rad * 0.5;\n const s = Math.sin(rad);\n out.x = s * axis.x;\n out.y = s * axis.y;\n out.z = s * axis.z;\n out.w = Math.cos(rad);\n return out;\n }\n\n /**\n * Set a quaternion from the given euler angle 0, 0, z.\n *\n * @param {Quat} out - Quaternion to store result.\n * @param {number} z - Angle to rotate around Z axis in degrees.\n * @returns {Quat}\n * @function\n */\n static fromAngleZ (out: Quat, z: number): Quat {\n z *= halfToRad;\n out.x = out.y = 0;\n out.z = Math.sin(z);\n out.w = Math.cos(z);\n return out;\n }\n\n /**\n * !#zh 根据三维矩阵信息计算四元数,默认输入矩阵不含有缩放信息\n * !#en Calculating the three-dimensional quaternion matrix information, default zoom information input matrix does not contain\n * @method fromMat3\n * @typescript\n * fromMat3 (out: Out, mat: Mat3): Out\n * @static\n */\n static fromMat3 (out: Out, mat: Mat3) {\n let m = mat.m;\n let m00 = m[0], m10 = m[1], m20 = m[2],\n m01 = m[3], m11 = m[4], m21 = m[5],\n m02 = m[6], m12 = m[7], m22 = m[8];\n\n const trace = m00 + m11 + m22;\n\n if (trace > 0) {\n const s = 0.5 / Math.sqrt(trace + 1.0);\n\n out.w = 0.25 / s;\n out.x = (m21 - m12) * s;\n out.y = (m02 - m20) * s;\n out.z = (m10 - m01) * s;\n\n } else if ((m00 > m11) && (m00 > m22)) {\n const s = 2.0 * Math.sqrt(1.0 + m00 - m11 - m22);\n\n out.w = (m21 - m12) / s;\n out.x = 0.25 * s;\n out.y = (m01 + m10) / s;\n out.z = (m02 + m20) / s;\n\n } else if (m11 > m22) {\n const s = 2.0 * Math.sqrt(1.0 + m11 - m00 - m22);\n\n out.w = (m02 - m20) / s;\n out.x = (m01 + m10) / s;\n out.y = 0.25 * s;\n out.z = (m12 + m21) / s;\n\n } else {\n const s = 2.0 * Math.sqrt(1.0 + m22 - m00 - m11);\n\n out.w = (m10 - m01) / s;\n out.x = (m02 + m20) / s;\n out.y = (m12 + m21) / s;\n out.z = 0.25 * s;\n }\n\n return out;\n }\n\n /**\n * !#zh 根据欧拉角信息计算四元数,旋转顺序为 YZX\n * !#en The quaternion calculated Euler angle information, rotation order YZX\n * @method fromEuler\n * @typescript\n * fromEuler (out: Out, x: number, y: number, z: number): Out\n * @static\n */\n static fromEuler (out: Out, x: number, y: number, z: number) {\n x *= halfToRad;\n y *= halfToRad;\n z *= halfToRad;\n\n const sx = Math.sin(x);\n const cx = Math.cos(x);\n const sy = Math.sin(y);\n const cy = Math.cos(y);\n const sz = Math.sin(z);\n const cz = Math.cos(z);\n\n out.x = sx * cy * cz + cx * sy * sz;\n out.y = cx * sy * cz + sx * cy * sz;\n out.z = cx * cy * sz - sx * sy * cz;\n out.w = cx * cy * cz - sx * sy * sz;\n\n return out;\n }\n\n /**\n * !#zh 返回定义此四元数的坐标系 X 轴向量\n * !#en This returns the result of the quaternion coordinate system X-axis vector\n * @method toAxisX\n * @typescript\n * toAxisX (out: VecLike, q: Out): VecLike\n * @static\n */\n static toAxisX (out: VecLike, q: Out) {\n const fy = 2.0 * q.y;\n const fz = 2.0 * q.z;\n out.x = 1.0 - fy * q.y - fz * q.z;\n out.y = fy * q.x + fz * q.w;\n out.z = fz * q.x + fy * q.w;\n\n return out;\n }\n\n /**\n * !#zh 返回定义此四元数的坐标系 Y 轴向量\n * !#en This returns the result of the quaternion coordinate system Y axis vector\n * @method toAxisY\n * @typescript\n * toAxisY (out: VecLike, q: Out): VecLike\n * @static\n */\n static toAxisY (out: VecLike, q: Out) {\n const fx = 2.0 * q.x;\n const fy = 2.0 * q.y;\n const fz = 2.0 * q.z;\n out.x = fy * q.x - fz * q.w;\n out.y = 1.0 - fx * q.x - fz * q.z;\n out.z = fz * q.y + fx * q.w;\n\n return out;\n }\n\n /**\n * !#zh 返回定义此四元数的坐标系 Z 轴向量\n * !#en This returns the result of the quaternion coordinate system the Z-axis vector\n * @method toAxisZ\n * @typescript\n * toAxisZ (out: VecLike, q: Out): VecLike\n * @static\n */\n static toAxisZ (out: VecLike, q: Out) {\n const fx = 2.0 * q.x;\n const fy = 2.0 * q.y;\n const fz = 2.0 * q.z;\n out.x = fz * q.x - fy * q.w;\n out.y = fz * q.y - fx * q.w;\n out.z = 1.0 - fx * q.x - fy * q.y;\n\n return out;\n }\n\n /**\n * !#zh 根据四元数计算欧拉角,返回角度 x, y 在 [-180, 180] 区间内, z 默认在 [-90, 90] 区间内,旋转顺序为 YZX\n * !#en The quaternion calculated Euler angles, return angle x, y in the [-180, 180] interval, z default the range [-90, 90] interval, the rotation order YZX\n * @method toEuler\n * @typescript\n * toEuler (out: Out, q: IQuatLike, outerZ?: boolean): Out\n * @param outerZ z 取值范围区间改为 [-180, -90] U [90, 180]\n * @static\n */\n static toEuler (out: Out, q: IQuatLike, outerZ?: boolean) {\n const { x, y, z, w } = q;\n let bank = 0;\n let heading = 0;\n let attitude = 0;\n const test = x * y + z * w;\n if (test > 0.499999) {\n bank = 0; // default to zero\n heading = toDegree(2 * Math.atan2(x, w));\n attitude = 90;\n } else if (test < -0.499999) {\n bank = 0; // default to zero\n heading = -toDegree(2 * Math.atan2(x, w));\n attitude = -90;\n } else {\n const sqx = x * x;\n const sqy = y * y;\n const sqz = z * z;\n bank = toDegree(Math.atan2(2 * x * w - 2 * y * z, 1 - 2 * sqx - 2 * sqz));\n heading = toDegree(Math.atan2(2 * y * w - 2 * x * z, 1 - 2 * sqy - 2 * sqz));\n attitude = toDegree(Math.asin(2 * test));\n if (outerZ) {\n bank = -180 * Math.sign(bank + 1e-6) + bank;\n heading = -180 * Math.sign(heading + 1e-6) + heading;\n attitude = 180 * Math.sign(attitude + 1e-6) - attitude;\n }\n }\n out.x = bank; out.y = heading; out.z = attitude;\n return out;\n }\n\n /**\n * !#zh 四元数等价判断\n * !#en Analyzing quaternion equivalent\n * @method strictEquals\n * @typescript\n * strictEquals (a: Out, b: Out): boolean\n * @static\n */\n static strictEquals (a: Out, b: Out) {\n return a.x === b.x && a.y === b.y && a.z === b.z && a.w === b.w;\n }\n\n /**\n * !#zh 排除浮点数误差的四元数近似等价判断\n * !#en Negative floating point error quaternion approximately equivalent Analyzing\n * @method equals\n * @typescript\n * equals (a: Out, b: Out, epsilon?: number): boolean\n * @static\n */\n static equals (a: Out, b: Out, epsilon = EPSILON) {\n return (Math.abs(a.x - b.x) <= epsilon * Math.max(1.0, Math.abs(a.x), Math.abs(b.x)) &&\n Math.abs(a.y - b.y) <= epsilon * Math.max(1.0, Math.abs(a.y), Math.abs(b.y)) &&\n Math.abs(a.z - b.z) <= epsilon * Math.max(1.0, Math.abs(a.z), Math.abs(b.z)) &&\n Math.abs(a.w - b.w) <= epsilon * Math.max(1.0, Math.abs(a.w), Math.abs(b.w)));\n }\n\n\n /**\n * !#zh 四元数转数组\n * !#en Quaternion rotation array\n * @method toArray\n * @typescript\n * toArray > (out: Out, q: IQuatLike, ofs?: number): Out\n * @param ofs 数组内的起始偏移量\n * @static\n */\n static toArray > (out: Out, q: IQuatLike, ofs = 0) {\n out[ofs + 0] = q.x;\n out[ofs + 1] = q.y;\n out[ofs + 2] = q.z;\n out[ofs + 3] = q.w;\n return out;\n }\n\n /**\n * !#zh 数组转四元数\n * !#en Array to a quaternion\n * @method fromArray\n * @typescript\n * fromArray (out: Out, arr: IWritableArrayLike, ofs?: number): Out\n * @param ofs 数组起始偏移量\n * @static\n */\n static fromArray (out: Out, arr: IWritableArrayLike, ofs = 0) {\n out.x = arr[ofs + 0];\n out.y = arr[ofs + 1];\n out.z = arr[ofs + 2];\n out.w = arr[ofs + 3];\n return out;\n }\n\n\n /**\n * @property {Number} x\n */\n x: number;\n /**\n * @property {Number} y\n */\n y: number;\n /**\n * @property {Number} z\n */\n z: number;\n /**\n * @property {Number} w\n */\n w: number;\n\n constructor (x: Quat | number = 0, y: number = 0, z: number = 0, w: number = 1) {\n super();\n\n if (x && typeof x === 'object') {\n this.x = x.x;\n this.y = x.y;\n this.z = x.z;\n this.w = x.w;\n }\n else {\n this.x = x as number;\n this.y = y;\n this.z = z;\n this.w = w;\n }\n }\n\n /**\n * !#en clone a Quat object and return the new object\n * !#zh 克隆一个四元数并返回\n * @method clone\n * @return {Quat}\n */\n clone (): Quat {\n return new Quat(this.x, this.y, this.z, this.w);\n }\n\n /**\n * !#en Set values with another quaternion\n * !#zh 用另一个四元数的值设置到当前对象上。\n * @method set\n * @param {Quat} newValue - !#en new value to set. !#zh 要设置的新值\n * @return {Quat} returns this\n * @chainable\n */\n set (newValue: Quat): this {\n this.x = newValue.x;\n this.y = newValue.y;\n this.z = newValue.z;\n this.w = newValue.w;\n return this;\n }\n\n /**\n * !#en Check whether current quaternion equals another\n * !#zh 当前的四元数是否与指定的四元数相等。\n * @method equals\n * @param {Quat} other\n * @return {Boolean}\n */\n equals (other: Quat): boolean {\n return other && this.x === other.x && this.y === other.y && this.z === other.z && this.w === other.w;\n }\n\n /**\n * !#en Convert quaternion to euler\n * !#zh 转换四元数到欧拉角\n * @method toEuler\n * @param {Vec3} out\n * @return {Vec3}\n */\n toEuler (out: Vec3): Vec3 {\n return Quat.toEuler(out, this);\n }\n\n /**\n * !#en Convert euler to quaternion\n * !#zh 转换欧拉角到四元数\n * @method fromEuler\n * @param {Vec3} euler\n * @return {Quat}\n */\n fromEuler (euler: Vec3): this {\n return Quat.fromEuler(this, euler.x, euler.y, euler.z);\n }\n\n /**\n * !#en Calculate the interpolation result between this quaternion and another one with given ratio\n * !#zh 计算四元数的插值结果\n * @member lerp\n * @param {Quat} to\n * @param {Number} ratio\n * @param {Quat} [out]\n * @returns {Quat} out\n */\n lerp (to: Quat, ratio: number, out?: Quat): Quat {\n out = out || new Quat();\n Quat.slerp(out, this, to, ratio);\n return out;\n }\n\n /**\n * !#en Calculate the multiply result between this quaternion and another one\n * !#zh 计算四元数乘积的结果\n * @member multiply\n * @param {Quat} other\n * @returns {Quat} this\n */\n multiply (other: Quat): this {\n return Quat.multiply(this, this, other);\n }\n\n /**\n * !#en Rotates a quaternion by the given angle (in radians) about a world space axis.\n * !#zh 围绕世界空间轴按给定弧度旋转四元数\n * @member rotateAround\n * @param {Quat} rot - Quaternion to rotate\n * @param {Vec3} axis - The axis around which to rotate in world space\n * @param {Number} rad - Angle (in radians) to rotate\n * @param {Quat} [out] - Quaternion to store result\n * @returns {Quat} out\n */\n rotateAround (rot: Quat, axis: Vec3, rad: number, out?: Quat): Quat {\n out = out || new Quat();\n return Quat.rotateAround(out, rot, axis, rad);\n }\n}\n\nconst qt_1 = new Quat();\nconst qt_2 = new Quat();\nconst v3_1 = new Vec3();\nconst m3_1 = new Mat3();\nconst halfToRad = 0.5 * Math.PI / 180.0;\n\nCCClass.fastDefine('cc.Quat', Quat, { x: 0, y: 0, z: 0, w: 1 });\n\n\n/**\n * @module cc\n */\n\n/**\n * !#en The convenience method to create a new {{#crossLink \"Quat\"}}cc.Quat{{/crossLink}}.\n * !#zh 通过该简便的函数进行创建 {{#crossLink \"Quat\"}}cc.Quat{{/crossLink}} 对象。\n * @method quat\n * @param {Number|Object} [x=0]\n * @param {Number} [y=0]\n * @param {Number} [z=0]\n * @param {Number} [w=1]\n * @return {Quat}\n */\ncc.quat = function quat (x, y, z, w) {\n return new Quat(x, y, z, w);\n};\n\ncc.Quat = Quat;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport ValueType from './value-type';\nimport CCClass from '../platform/CCClass';\nimport Vec2 from './vec2';\nimport Mat4 from './mat4';\nimport Size from './size';\n\n/**\n * !#en A 2D rectangle defined by x, y position and width, height.\n * !#zh 通过位置和宽高定义的 2D 矩形。\n * @class Rect\n * @extends ValueType\n */\n/**\n * !#en\n * Constructor of Rect class.\n * see {{#crossLink \"cc/rect:method\"}} cc.rect {{/crossLink}} for convenience method.\n * !#zh\n * Rect类的构造函数。可以通过 {{#crossLink \"cc/rect:method\"}} cc.rect {{/crossLink}} 简便方法进行创建。\n *\n * @method constructor\n * @param {Number} [x=0]\n * @param {Number} [y=0]\n * @param {Number} [w=0]\n * @param {Number} [h=0]\n */\nexport default class Rect extends ValueType {\n\n /**\n * !#en Creates a rectangle from two coordinate values.\n * !#zh 根据指定 2 个坐标创建出一个矩形区域。\n * @static\n * @method fromMinMax\n * @param {Vec2} v1\n * @param {Vec2} v2\n * @return {Rect}\n * @example\n * cc.Rect.fromMinMax(cc.v2(10, 10), cc.v2(20, 20)); // Rect {x: 10, y: 10, width: 10, height: 10};\n */\n static fromMinMax (v1: Vec2, v2: Vec2) {\n var min_x = Math.min(v1.x, v2.x);\n var min_y = Math.min(v1.y, v2.y);\n var max_x = Math.max(v1.x, v2.x);\n var max_y = Math.max(v1.y, v2.y);\n\n return new Rect(min_x, min_y, max_x - min_x, max_y - min_y);\n }\n\n /**\n * @property {Number} x\n */\n x: number;\n /**\n * @property {Number} y\n */\n y: number;\n /**\n * @property {Number} width\n */\n width: number;\n /**\n * @property {Number} height\n */\n height: number;\n constructor (x: Rect | number = 0, y: number = 0, w: number = 0, h: number = 0) {\n super();\n if (x && typeof x === 'object') {\n y = x.y;\n w = x.width;\n h = x.height;\n x = x.x;\n }\n this.x = x as number || 0;\n this.y = y || 0;\n this.width = w || 0;\n this.height = h || 0;\n }\n\n\n /**\n * !#en TODO\n * !#zh 克隆一个新的 Rect。\n * @method clone\n * @return {Rect}\n * @example\n * var a = new cc.Rect(0, 0, 10, 10);\n * a.clone();// Rect {x: 0, y: 0, width: 10, height: 10}\n */\n clone (): Rect {\n return new Rect(this.x, this.y, this.width, this.height);\n }\n\n /**\n * !#en TODO\n * !#zh 是否等于指定的矩形。\n * @method equals\n * @param {Rect} other\n * @return {Boolean}\n * @example\n * var a = new cc.Rect(0, 0, 10, 10);\n * var b = new cc.Rect(0, 0, 10, 10);\n * a.equals(b);// true;\n */\n equals (other: Rect): boolean {\n return other &&\n this.x === other.x &&\n this.y === other.y &&\n this.width === other.width &&\n this.height === other.height;\n };\n\n /**\n * !#en TODO\n * !#zh 线性插值\n * @method lerp\n * @param {Rect} to\n * @param {Number} ratio - the interpolation coefficient.\n * @param {Rect} [out] - optional, the receiving vector.\n * @return {Rect}\n * @example\n * var a = new cc.Rect(0, 0, 10, 10);\n * var b = new cc.Rect(50, 50, 100, 100);\n * update (dt) {\n * // method 1;\n * var c = a.lerp(b, dt * 0.1);\n * // method 2;\n * a.lerp(b, dt * 0.1, c);\n * }\n */\n lerp (to: Rect, ratio: number, out?: Rect): Rect {\n out = out || new Rect();\n var x = this.x;\n var y = this.y;\n var width = this.width;\n var height = this.height;\n out.x = x + (to.x - x) * ratio;\n out.y = y + (to.y - y) * ratio;\n out.width = width + (to.width - width) * ratio;\n out.height = height + (to.height - height) * ratio;\n return out;\n };\n\n set (source: Rect): Rect {\n this.x = source.x;\n this.y = source.y;\n this.width = source.width;\n this.height = source.height;\n return this;\n }\n\n /**\n * !#en Check whether the current rectangle intersects with the given one\n * !#zh 当前矩形与指定矩形是否相交。\n * @method intersects\n * @param {Rect} rect\n * @return {Boolean}\n * @example\n * var a = new cc.Rect(0, 0, 10, 10);\n * var b = new cc.Rect(0, 0, 20, 20);\n * a.intersects(b);// true\n */\n intersects (rect: Rect): boolean {\n var maxax = this.x + this.width,\n maxay = this.y + this.height,\n maxbx = rect.x + rect.width,\n maxby = rect.y + rect.height;\n return !(maxax < rect.x || maxbx < this.x || maxay < rect.y || maxby < this.y);\n }\n\n /**\n * !#en Returns the overlapping portion of 2 rectangles.\n * !#zh 返回 2 个矩形重叠的部分。\n * @method intersection\n * @param {Rect} out Stores the result\n * @param {Rect} rectB\n * @return {Rect} Returns the out parameter\n * @example\n * var a = new cc.Rect(0, 10, 20, 20);\n * var b = new cc.Rect(0, 10, 10, 10);\n * var intersection = new cc.Rect();\n * a.intersection(intersection, b); // intersection {x: 0, y: 10, width: 10, height: 10};\n */\n intersection (out: Rect, rectB: Rect): Rect {\n var axMin = this.x, ayMin = this.y, axMax = this.x + this.width, ayMax = this.y + this.height;\n var bxMin = rectB.x, byMin = rectB.y, bxMax = rectB.x + rectB.width, byMax = rectB.y + rectB.height;\n out.x = Math.max(axMin, bxMin);\n out.y = Math.max(ayMin, byMin);\n out.width = Math.min(axMax, bxMax) - out.x;\n out.height = Math.min(ayMax, byMax) - out.y;\n return out;\n }\n\n /**\n * !#en Check whether the current rect contains the given point\n * !#zh 当前矩形是否包含指定坐标点。\n * Returns true if the point inside this rectangle.\n * @method contains\n * @param {Vec2} point\n * @return {Boolean}\n * @example\n * var a = new cc.Rect(0, 0, 10, 10);\n * var b = new cc.Vec2(0, 5);\n * a.contains(b);// true\n */\n contains (point: Vec2): boolean {\n return (this.x <= point.x &&\n this.x + this.width >= point.x &&\n this.y <= point.y &&\n this.y + this.height >= point.y);\n }\n\n /**\n * !#en Returns true if the other rect totally inside this rectangle.\n * !#zh 当前矩形是否包含指定矩形。\n * @method containsRect\n * @param {Rect} rect\n * @return {Boolean}\n * @example\n * var a = new cc.Rect(0, 0, 20, 20);\n * var b = new cc.Rect(0, 0, 10, 10);\n * a.containsRect(b);// true\n */\n containsRect (rect: Rect): boolean {\n return (this.x <= rect.x &&\n this.x + this.width >= rect.x + rect.width &&\n this.y <= rect.y &&\n this.y + this.height >= rect.y + rect.height);\n }\n\n /**\n * !#en Returns the smallest rectangle that contains the current rect and the given rect.\n * !#zh 返回一个包含当前矩形和指定矩形的最小矩形。\n * @method union\n * @param {Rect} out Stores the result\n * @param {Rect} rectB\n * @return {Rect} Returns the out parameter\n * @example\n * var a = new cc.Rect(0, 10, 20, 20);\n * var b = new cc.Rect(0, 10, 10, 10);\n * var union = new cc.Rect();\n * a.union(union, b); // union {x: 0, y: 10, width: 20, height: 20};\n */\n union (out: Rect, rectB: Rect): Rect {\n var ax = this.x, ay = this.y, aw = this.width, ah = this.height;\n var bx = rectB.x, by = rectB.y, bw = rectB.width, bh = rectB.height;\n out.x = Math.min(ax, bx);\n out.y = Math.min(ay, by);\n out.width = Math.max(ax + aw, bx + bw) - out.x;\n out.height = Math.max(ay + ah, by + bh) - out.y;\n return out;\n }\n\n /**\n * !#en Apply matrix4 to the rect.\n * !#zh 使用 mat4 对矩形进行矩阵转换。\n * @method transformMat4\n * @param out {Rect} The output rect\n * @param mat {Mat4} The matrix4\n */\n transformMat4 (out: Rect, mat: Mat4): Rect {\n let ol = this.x;\n let ob = this.y;\n let or = ol + this.width;\n let ot = ob + this.height;\n let matm = mat.m;\n let lbx = matm[0] * ol + matm[4] * ob + matm[12];\n let lby = matm[1] * ol + matm[5] * ob + matm[13];\n let rbx = matm[0] * or + matm[4] * ob + matm[12];\n let rby = matm[1] * or + matm[5] * ob + matm[13];\n let ltx = matm[0] * ol + matm[4] * ot + matm[12];\n let lty = matm[1] * ol + matm[5] * ot + matm[13];\n let rtx = matm[0] * or + matm[4] * ot + matm[12];\n let rty = matm[1] * or + matm[5] * ot + matm[13];\n\n let minX = Math.min(lbx, rbx, ltx, rtx);\n let maxX = Math.max(lbx, rbx, ltx, rtx);\n let minY = Math.min(lby, rby, lty, rty);\n let maxY = Math.max(lby, rby, lty, rty);\n\n out.x = minX;\n out.y = minY;\n out.width = maxX - minX;\n out.height = maxY - minY;\n return out;\n }\n\n /**\n * !#en Output rect informations to string\n * !#zh 转换为方便阅读的字符串\n * @method toString\n * @return {String}\n * @example\n * var a = new cc.Rect(0, 0, 10, 10);\n * a.toString();// \"(0.00, 0.00, 10.00, 10.00)\";\n */\n toString (): string {\n return '(' + this.x.toFixed(2) + ', ' + this.y.toFixed(2) + ', ' + this.width.toFixed(2) +\n ', ' + this.height.toFixed(2) + ')';\n }\n\n /**\n * !#en The minimum x value, equals to rect.x\n * !#zh 矩形 x 轴上的最小值,等价于 rect.x。\n * @property xMin\n * @type {Number}\n */\n get xMin () {\n return this.x;\n }\n set xMin (v) {\n this.width += this.x - v;\n this.x = v;\n }\n\n /**\n * !#en The minimum y value, equals to rect.y\n * !#zh 矩形 y 轴上的最小值。\n * @property yMin\n * @type {Number}\n */\n get yMin () {\n return this.y;\n }\n set yMin (v) {\n this.height += this.y - v;\n this.y = v;\n }\n\n\n /**\n * !#en The maximum x value.\n * !#zh 矩形 x 轴上的最大值。\n * @property xMax\n * @type {Number}\n */\n get xMax () {\n return this.x + this.width;\n }\n set xMax (value) {\n this.width = value - this.x;\n }\n\n /**\n * !#en The maximum y value.\n * !#zh 矩形 y 轴上的最大值。\n * @property yMax\n * @type {Number}\n */\n get yMax () {\n return this.y + this.height;\n }\n set yMax (value) {\n this.height = value - this.y;\n }\n\n /**\n * !#en The position of the center of the rectangle.\n * !#zh 矩形的中心点。\n * @property {Vec2} center\n */\n get center () {\n return new Vec2(this.x + this.width * 0.5,\n this.y + this.height * 0.5);\n }\n set center (value) {\n this.x = value.x - this.width * 0.5;\n this.y = value.y - this.height * 0.5;\n }\n\n /**\n * !#en The X and Y position of the rectangle.\n * !#zh 矩形的 x 和 y 坐标。\n * @property {Vec2} origin\n */\n get origin () {\n return new Vec2(this.x, this.y);\n }\n set origin (value) {\n this.x = value.x;\n this.y = value.y;\n }\n\n /**\n * !#en Width and height of the rectangle.\n * !#zh 矩形的大小。\n * @property {Size} size\n */\n get size () {\n return new Size(this.width, this.height);\n }\n set size (value) {\n this.width = value.width;\n this.height = value.height;\n }\n}\n\nCCClass.fastDefine('cc.Rect', Rect, { x: 0, y: 0, width: 0, height: 0 });\ncc.Rect = Rect;\n\n\n/**\n * @module cc\n */\n\n/**\n * !#en\n * The convenience method to create a new Rect.\n * see {{#crossLink \"Rect/Rect:method\"}}cc.Rect{{/crossLink}}\n * !#zh\n * 该方法用来快速创建一个新的矩形。{{#crossLink \"Rect/Rect:method\"}}cc.Rect{{/crossLink}}\n * @method rect\n * @param {Number} [x=0]\n * @param {Number} [y=0]\n * @param {Number} [w=0]\n * @param {Number} [h=0]\n * @return {Rect}\n * @example\n * var a = new cc.Rect(0 , 0, 10, 0);\n */\ncc.rect = function rect (x, y, w, h) {\n return new Rect(x, y, w, h);\n};\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport ValueType from './value-type';\nimport CCClass from '../platform/CCClass';\n\n/**\n * !#en\n * cc.Size is the class for size object,
\n * please do not use its constructor to create sizes,
\n * use {{#crossLink \"cc/size:method\"}}{{/crossLink}} alias function instead.
\n * It will be deprecated soon, please use cc.Vec2 instead.\n *\n * !#zh\n * cc.Size 是 size 对象的类。
\n * 请不要使用它的构造函数创建的 size,
\n * 使用 {{#crossLink \"cc/size:method\"}}{{/crossLink}} 别名函数。
\n * 它不久将被取消,请使用cc.Vec2代替。\n *\n * @class Size\n */\n/**\n * @method constructor\n * @param {Number|Size} width\n * @param {Number} [height]\n */\nexport default class Size extends ValueType {\n\n /**\n * !#en return a Size object with width = 0 and height = 0.\n * !#zh 返回一个宽度为 0 和高度为 0 的 Size 对象。\n * @property ZERO\n * @type {Size}\n * @default new Size(0, 0)\n * @static\n */\n static get ZERO () { return new Size(); }\n static readonly ZERO_R = Size.ZERO;\n\n /**\n * @property {Number} width\n */\n width: number;\n /**\n * @property {Number} height\n */\n height: number;\n\n constructor (width: Size | number = 0, height: number = 0) {\n super();\n if (width && typeof width === 'object') {\n this.width = width.width;\n this.height = width.height;\n }\n else {\n this.width = width as number || 0;\n this.height = height || 0;\n }\n }\n\n /**\n * !#en TODO\n * !#zh 克隆 size 对象。\n * @method clone\n * @return {Size}\n * @example\n * var a = new cc.size(10, 10);\n * a.clone();// return Size {width: 0, height: 0};\n */\n clone (): Size {\n return new Size(this.width, this.height);\n }\n\n /**\n * !#en TODO\n * !#zh 当前 Size 对象是否等于指定 Size 对象。\n * @method equals\n * @param {Size} other\n * @return {Boolean}\n * @example\n * var a = new cc.size(10, 10);\n * a.equals(new cc.size(10, 10));// return true;\n */\n equals (other: Size): boolean {\n return other &&\n this.width === other.width &&\n this.height === other.height;\n }\n\n /**\n * !#en TODO\n * !#zh 线性插值。\n * @method lerp\n * @param {Rect} to\n * @param {Number} ratio - the interpolation coefficient.\n * @param {Size} [out] - optional, the receiving vector.\n * @return {Size}\n * @example\n * var a = new cc.size(10, 10);\n * var b = new cc.rect(50, 50, 100, 100);\n * update (dt) {\n * // method 1;\n * var c = a.lerp(b, dt * 0.1);\n * // method 2;\n * a.lerp(b, dt * 0.1, c);\n * }\n */\n lerp (to: Size, ratio: number, out?: Size): Size {\n out = out || new Size();\n var width = this.width;\n var height = this.height;\n out.width = width + (to.width - width) * ratio;\n out.height = height + (to.height - height) * ratio;\n return out;\n }\n\n set (source): Size {\n this.width = source.width;\n this.height = source.height;\n return this;\n }\n\n /**\n * !#en TODO\n * !#zh 转换为方便阅读的字符串。\n * @method toString\n * @return {String}\n * @example\n * var a = new cc.size(10, 10);\n * a.toString();// return \"(10.00, 10.00)\";\n */\n toString (): string {\n return '(' + this.width.toFixed(2) + ', ' + this.height.toFixed(2) + ')';\n }\n}\n\nCCClass.fastDefine('cc.Size', Size, { width: 0, height: 0 });\n\n\n/**\n * @module cc\n */\n\n/**\n * !#en\n * Helper function that creates a cc.Size.
\n * Please use cc.p or cc.v2 instead, it will soon replace cc.Size.\n * !#zh\n * 创建一个 cc.Size 对象的帮助函数。
\n * 注意:可以使用 cc.p 或者是 cc.v2 代替,它们将很快取代 cc.Size。\n * @method size\n * @param {Number|Size} w - width or a size object\n * @param {Number} [h] - height\n * @return {Size}\n * @example {@link cocos2d/core/value-types/CCSize/size.js}\n */\ncc.size = function (w, h) {\n return new Size(w, h);\n};\n\ncc.Size = Size;\n","\nimport Quat from './quat';\nimport Vec3 from './vec3';\nimport Mat4 from './Mat4';\n\nlet tmp_quat = new Quat();\n\nexport default class Trs {\n static toRotation (out: Quat, a: FloatArray): Quat {\n out.x = a[3];\n out.y = a[4];\n out.z = a[5];\n out.w = a[6];\n return out;\n }\n\n static fromRotation (out: FloatArray, a: Quat): FloatArray {\n out[3] = a.x;\n out[4] = a.y;\n out[5] = a.z;\n out[6] = a.w;\n return out;\n }\n\n static toEuler (out: Vec3, a: FloatArray): Vec3 {\n Trs.toRotation(tmp_quat, a);\n Quat.toEuler(out, tmp_quat);\n return out;\n }\n\n static fromEuler (out: FloatArray, a: Vec3): FloatArray {\n Quat.fromEuler(tmp_quat, a.x, a.y, a.z);\n Trs.fromRotation(out, tmp_quat);\n return out;\n }\n\n static fromEulerNumber (out: FloatArray, x: number, y: number, z: number): FloatArray {\n Quat.fromEuler(tmp_quat, x, y, z);\n Trs.fromRotation(out, tmp_quat);\n return out;\n }\n\n static toScale (out: Vec3, a: FloatArray): Vec3 {\n out.x = a[7];\n out.y = a[8];\n out.z = a[9];\n return out;\n }\n\n static fromScale (out: FloatArray, a: Vec3): FloatArray {\n out[7] = a.x;\n out[8] = a.y;\n out[9] = a.z;\n return out;\n }\n\n static toPosition (out: Vec3, a: FloatArray): Vec3 {\n out.x = a[0];\n out.y = a[1];\n out.z = a[2];\n return out;\n }\n\n static fromPosition (out: FloatArray, a: Vec3): FloatArray {\n out[0] = a.x;\n out[1] = a.y;\n out[2] = a.z;\n return out;\n }\n\n static fromAngleZ (out: FloatArray, a: number): FloatArray {\n Quat.fromAngleZ(tmp_quat, a);\n Trs.fromRotation(out, tmp_quat);\n return out;\n }\n\n static toMat4 (out: Mat4, trs: FloatArray): Mat4 {\n let x = trs[3], y = trs[4], z = trs[5], w = trs[6];\n let x2 = x + x;\n let y2 = y + y;\n let z2 = z + z;\n\n let xx = x * x2;\n let xy = x * y2;\n let xz = x * z2;\n let yy = y * y2;\n let yz = y * z2;\n let zz = z * z2;\n let wx = w * x2;\n let wy = w * y2;\n let wz = w * z2;\n let sx = trs[7];\n let sy = trs[8];\n let sz = trs[9];\n\n let m = out.m;\n m[0] = (1 - (yy + zz)) * sx;\n m[1] = (xy + wz) * sx;\n m[2] = (xz - wy) * sx;\n m[3] = 0;\n m[4] = (xy - wz) * sy;\n m[5] = (1 - (xx + zz)) * sy;\n m[6] = (yz + wx) * sy;\n m[7] = 0;\n m[8] = (xz + wy) * sz;\n m[9] = (yz - wx) * sz;\n m[10] = (1 - (xx + yy)) * sz;\n m[11] = 0;\n m[12] = trs[0];\n m[13] = trs[1];\n m[14] = trs[2];\n m[15] = 1;\n\n return out;\n }\n}\n\ncc.Trs = Trs;","/**\n * @ignore\n */\nconst _d2r = Math.PI / 180.0;\n/**\n * @ignore\n */\nconst _r2d = 180.0 / Math.PI;\n\n/**\n * @property {number} EPSILON\n */\nexport const EPSILON = 0.000001;\n\n// Number of bits in an integer\nexport const INT_BITS = 32;\nexport const INT_MAX = 0x7fffffff;\nexport const INT_MIN = -1 << (INT_BITS - 1);\n\n/**\n * Use single-precision floating point on native platforms to be compatible with native math libraries.\n * Double precision floating point is used on Web platforms and editors to reduce the overhead of type conversion.\n */\nexport const FLOAT_ARRAY_TYPE = (CC_JSB && CC_NATIVERENDERER) ? Float32Array : Float64Array;\nexport const FLOAT_BYTES = (CC_JSB && CC_NATIVERENDERER) ? 4 : 8;\n\n/**\n * Tests whether or not the arguments have approximately the same value, within an absolute\n * or relative tolerance of glMatrix.EPSILON (an absolute tolerance is used for values less\n * than or equal to 1.0, and a relative tolerance is used for larger values)\n *\n * @param {Number} a The first number to test.\n * @param {Number} b The second number to test.\n * @returns {Boolean} True if the numbers are approximately equal, false otherwise.\n */\nexport function equals(a, b) {\n return Math.abs(a - b) <= EPSILON * Math.max(1.0, Math.abs(a), Math.abs(b));\n}\n\n/**\n * Tests whether or not the arguments have approximately the same value by given maxDiff\n *\n * @param {Number} a The first number to test.\n * @param {Number} b The second number to test.\n * @param {Number} maxDiff Maximum difference.\n * @returns {Boolean} True if the numbers are approximately equal, false otherwise.\n */\nexport function approx(a, b, maxDiff) {\n maxDiff = maxDiff || EPSILON;\n return Math.abs(a - b) <= maxDiff;\n}\n\n/**\n * Clamps a value between a minimum float and maximum float value.\n *\n * @method clamp\n * @param {number} val\n * @param {number} min\n * @param {number} max\n * @return {number}\n */\nexport function clamp(val, min, max) {\n return val < min ? min : val > max ? max : val;\n}\n\n/**\n * Clamps a value between 0 and 1.\n *\n * @method clamp01\n * @param {number} val\n * @return {number}\n */\nexport function clamp01(val) {\n return val < 0 ? 0 : val > 1 ? 1 : val;\n}\n\n/**\n * @method lerp\n * @param {number} from\n * @param {number} to\n * @param {number} ratio - the interpolation coefficient\n * @return {number}\n */\nexport function lerp(from, to, ratio) {\n return from + (to - from) * ratio;\n}\n\n/**\n* Convert Degree To Radian\n*\n* @param {Number} a Angle in Degrees\n*/\nexport function toRadian(a) {\n return a * _d2r;\n}\n\n/**\n* Convert Radian To Degree\n*\n* @param {Number} a Angle in Radian\n*/\nexport function toDegree(a) {\n return a * _r2d;\n}\n\n/**\n* @method random\n*/\nexport const random = Math.random;\n\n/**\n * Returns a floating-point random number between min (inclusive) and max (exclusive).\n *\n * @method randomRange\n * @param {number} min\n * @param {number} max\n * @return {number} the random number\n */\nexport function randomRange(min, max) {\n return Math.random() * (max - min) + min;\n}\n\n/**\n * Returns a random integer between min (inclusive) and max (exclusive).\n *\n * @method randomRangeInt\n * @param {number} min\n * @param {number} max\n * @return {number} the random integer\n */\nexport function randomRangeInt(min, max) {\n return Math.floor(randomRange(min, max));\n}\n\n/**\n * Linear congruential generator using Hull-Dobell Theorem.\n *\n * @method pseudoRandom\n * @param {number} seed the random seed\n * @return {number} the pseudo random\n */\nexport function pseudoRandom(seed) {\n seed = (seed * 9301 + 49297) % 233280;\n return seed / 233280.0;\n}\n\n/**\n * Returns a floating-point pseudo-random number between min (inclusive) and max (exclusive).\n *\n * @method pseudoRandomRange\n * @param {number} seed\n * @param {number} min\n * @param {number} max\n * @return {number} the random number\n */\nexport function pseudoRandomRange(seed, min, max) {\n return pseudoRandom(seed) * (max - min) + min;\n}\n\n/**\n * Returns a pseudo-random integer between min (inclusive) and max (exclusive).\n *\n * @method pseudoRandomRangeInt\n * @param {number} seed\n * @param {number} min\n * @param {number} max\n * @return {number} the random integer\n */\nexport function pseudoRandomRangeInt(seed, min, max) {\n return Math.floor(pseudoRandomRange(seed, min, max));\n}\n\n/**\n * Returns the next power of two for the value\n *\n * @method nextPow2\n * @param {number} val\n * @return {number} the the next power of two\n */\nexport function nextPow2(val) {\n --val;\n val = (val >> 1) | val;\n val = (val >> 2) | val;\n val = (val >> 4) | val;\n val = (val >> 8) | val;\n val = (val >> 16) | val;\n ++val;\n\n return val;\n}\n\n/**\n * Returns float remainder for t / length\n *\n * @method repeat\n * @param {number} t time start at 0\n * @param {number} length time of one cycle\n * @return {number} the time wrapped in the first cycle\n */\nexport function repeat(t, length) {\n return t - Math.floor(t / length) * length;\n}\n\n/**\n * Returns time wrapped in ping-pong mode\n *\n * @method repeat\n * @param {number} t time start at 0\n * @param {number} length time of one cycle\n * @return {number} the time wrapped in the first cycle\n */\nexport function pingPong(t, length) {\n t = repeat(t, length * 2);\n t = length - Math.abs(t - length);\n return t;\n}\n\n/**\n * Returns ratio of a value within a given range\n *\n * @method repeat\n * @param {number} from start value\n * @param {number} to end value\n * @param {number} value given value\n * @return {number} the ratio between [from,to]\n */\nexport function inverseLerp(from, to, value) {\n return (value - from) / (to - from);\n}\n\n/**\n * Returns -1, 0, +1 depending on sign of x.\n * \n * @method sign\n * @param {number} v\n */\nexport function sign (v) {\n return (v > 0) - (v < 0);\n}","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport js from '../platform/js';\n\n/**\n * !#en The base class of all value types.\n * !#zh 所有值类型的基类。\n * @class ValueType\n *\n */\nexport default class ValueType {\n /**\n * !#en This method returns an exact copy of current value.\n * !#zh 克隆当前值,该方法返回一个新对象,新对象的值和原对象相等。\n * @method clone\n * @return {ValueType}\n */\n clone () : ValueType {\n cc.errorID('0100', js.getClassName(this) + '.clone');\n // @ts-ignore\n return null;\n }\n\n /**\n * !#en Compares this object with the other one.\n * !#zh 当前对象是否等于指定对象。\n * @method equals\n * @param {ValueType} other\n * @return {Boolean}\n */\n equals (other) {\n cc.errorID('0100', js.getClassName(this) + '.equals');\n return false;\n }\n\n /**\n * !#en\n * Linearly interpolates between this value to to value by ratio which is in the range [0, 1].\n * When ratio = 0 returns this. When ratio = 1 return to. When ratio = 0.5 returns the average of this and to.\n * !#zh\n * 线性插值。
\n * 当 ratio = 0 时返回自身,ratio = 1 时返回目标,ratio = 0.5 返回自身和目标的平均值。。\n * @method lerp\n * @param {ValueType} to - the to value\n * @param {number} ratio - the interpolation coefficient\n * @return {ValueType}\n */\n lerp (to, ratio) {\n cc.errorID('0100', js.getClassName(this) + '.lerp');\n return this.clone();\n }\n\n /**\n * !#en\n * Copys all the properties from another given object to this value.\n * !#zh\n * 从其它对象把所有属性复制到当前对象。\n * @method set\n * @param {ValueType} source - the source to copy\n */\n set (source) {\n cc.errorID('0100', js.getClassName(this) + '.set');\n }\n\n /**\n * !#en Convert to a readable string.\n * !#zh 转换为方便阅读的字符串。\n * @method toString\n * @return {string}\n */\n toString () {\n return '' + {};\n }\n}\n\njs.setClassName('cc.ValueType', ValueType);\ncc.ValueType = ValueType;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport ValueType from './value-type';\nimport Mat4 from './mat4';\nimport CCClass from '../platform/CCClass';\nimport misc from '../utils/misc';\nimport { EPSILON, random } from './utils';\n\nlet _x: number = 0.0;\nlet _y: number = 0.0;\n\n/**\n * !#en Representation of 2D vectors and points.\n * !#zh 表示 2D 向量和坐标\n *\n * @class Vec2\n * @extends ValueType\n */\n\nexport default class Vec2 extends ValueType {\n // deprecated\n static sub = Vec2.subtract;\n static mul = Vec2.multiply;\n static scale = Vec2.multiplyScalar;\n static mag = Vec2.len;\n static squaredMagnitude = Vec2.lengthSqr;\n static div = Vec2.divide;\n /**\n * !#en Returns the length of this vector.\n * !#zh 返回该向量的长度。\n * @method mag\n * @return {number} the result\n * @example\n * var v = cc.v2(10, 10);\n * v.mag(); // return 14.142135623730951;\n */\n mag = Vec2.prototype.len;\n /**\n * !#en Returns the squared length of this vector.\n * !#zh 返回该向量的长度平方。\n * @method magSqr\n * @return {number} the result\n * @example\n * var v = cc.v2(10, 10);\n * v.magSqr(); // return 200;\n */\n magSqr = Vec2.prototype.lengthSqr;\n /**\n * !#en Subtracts one vector from this. If you want to save result to another vector, use sub() instead.\n * !#zh 向量减法。如果你想保存结果到另一个向量,可使用 sub() 代替。\n * @method subSelf\n * @param {Vec2} vector\n * @return {Vec2} returns this\n * @chainable\n * @example\n * var v = cc.v2(10, 10);\n * v.subSelf(cc.v2(5, 5));// return Vec2 {x: 5, y: 5};\n */\n subSelf = Vec2.prototype.subtract;\n /**\n * !#en Subtracts one vector from this, and returns the new result.\n * !#zh 向量减法,并返回新结果。\n * @method sub\n * @param {Vec2} vector\n * @param {Vec2} [out] - optional, the receiving vector, you can pass the same vec2 to save result to itself, if not provided, a new vec2 will be created\n * @return {Vec2} the result\n * @example\n * var v = cc.v2(10, 10);\n * v.sub(cc.v2(5, 5)); // return Vec2 {x: 5, y: 5};\n * var v1 = new Vec2;\n * v.sub(cc.v2(5, 5), v1); // return Vec2 {x: 5, y: 5};\n */\n sub (vector: Vec2, out?: Vec2): Vec2 {\n return Vec2.subtract(out || new Vec2(), this, vector);\n }\n /**\n * !#en Multiplies this by a number. If you want to save result to another vector, use mul() instead.\n * !#zh 缩放当前向量。如果你想结果保存到另一个向量,可使用 mul() 代替。\n * @method mulSelf\n * @param {number} num\n * @return {Vec2} returns this\n * @chainable\n * @example\n * var v = cc.v2(10, 10);\n * v.mulSelf(5);// return Vec2 {x: 50, y: 50};\n */\n mulSelf = Vec2.prototype.multiplyScalar;\n /**\n * !#en Multiplies by a number, and returns the new result.\n * !#zh 缩放向量,并返回新结果。\n * @method mul\n * @param {number} num\n * @param {Vec2} [out] - optional, the receiving vector, you can pass the same vec2 to save result to itself, if not provided, a new vec2 will be created\n * @return {Vec2} the result\n * @example\n * var v = cc.v2(10, 10);\n * v.mul(5); // return Vec2 {x: 50, y: 50};\n * var v1 = new Vec2;\n * v.mul(5, v1); // return Vec2 {x: 50, y: 50};\n */\n mul (num: number, out?: Vec2): Vec2 {\n return Vec2.multiplyScalar(out || new Vec2(), this, num);\n }\n /**\n * !#en Divides by a number. If you want to save result to another vector, use div() instead.\n * !#zh 向量除法。如果你想结果保存到另一个向量,可使用 div() 代替。\n * @method divSelf\n * @param {number} num\n * @return {Vec2} returns this\n * @chainable\n * @example\n * var v = cc.v2(10, 10);\n * v.divSelf(5); // return Vec2 {x: 2, y: 2};\n */\n divSelf = Vec2.prototype.divide;\n /**\n * !#en Divides by a number, and returns the new result.\n * !#zh 向量除法,并返回新的结果。\n * @method div\n * @param {number} num\n * @param {Vec2} [out] - optional, the receiving vector, you can pass the same vec2 to save result to itself, if not provided, a new vec2 will be created\n * @return {Vec2} the result\n * @example\n * var v = cc.v2(10, 10);\n * v.div(5); // return Vec2 {x: 2, y: 2};\n * var v1 = new Vec2;\n * v.div(5, v1); // return Vec2 {x: 2, y: 2};\n */\n div (num: number, out?: Vec2): Vec2 {\n return Vec2.multiplyScalar(out || new Vec2(), this, 1/num);\n }\n /**\n * !#en Multiplies two vectors.\n * !#zh 分量相乘。\n * @method scaleSelf\n * @param {Vec2} vector\n * @return {Vec2} returns this\n * @chainable\n * @example\n * var v = cc.v2(10, 10);\n * v.scaleSelf(cc.v2(5, 5));// return Vec2 {x: 50, y: 50};\n */\n scaleSelf = Vec2.prototype.multiply;\n /**\n * !#en Multiplies two vectors, and returns the new result.\n * !#zh 分量相乘,并返回新的结果。\n * @method scale\n * @param {Vec2} vector\n * @param {Vec2} [out] - optional, the receiving vector, you can pass the same vec2 to save result to itself, if not provided, a new vec2 will be created\n * @return {Vec2} the result\n * @example\n * var v = cc.v2(10, 10);\n * v.scale(cc.v2(5, 5)); // return Vec2 {x: 50, y: 50};\n * var v1 = new Vec2;\n * v.scale(cc.v2(5, 5), v1); // return Vec2 {x: 50, y: 50};\n */\n scale (vector: Vec2, out?: Vec2): Vec2 {\n return Vec2.multiply(out || new Vec2(), this, vector);\n }\n /**\n * !#en Negates the components. If you want to save result to another vector, use neg() instead.\n * !#zh 向量取反。如果你想结果保存到另一个向量,可使用 neg() 代替。\n * @method negSelf\n * @return {Vec2} returns this\n * @chainable\n * @example\n * var v = cc.v2(10, 10);\n * v.negSelf(); // return Vec2 {x: -10, y: -10};\n */\n negSelf = Vec2.prototype.negate;\n /**\n * !#en Negates the components, and returns the new result.\n * !#zh 返回取反后的新向量。\n * @method neg\n * @param {Vec2} [out] - optional, the receiving vector, you can pass the same vec2 to save result to itself, if not provided, a new vec2 will be created\n * @return {Vec2} the result\n * @example\n * var v = cc.v2(10, 10);\n * var v1 = new Vec2;\n * v.neg(v1); // return Vec2 {x: -10, y: -10};\n */\n neg (out?: Vec2): Vec2 {\n return Vec2.negate(out || new Vec2(), this);\n }\n\n /**\n * !#en return a Vec2 object with x = 1 and y = 1.\n * !#zh 新 Vec2 对象。\n * @property ONE\n * @type Vec2\n * @static\n */\n static get ONE () { return new Vec2(1, 1) };\n static readonly ONE_R = Vec2.ONE;\n\n /**\n * !#en return a Vec2 object with x = 0 and y = 0.\n * !#zh 返回 x = 0 和 y = 0 的 Vec2 对象。\n * @property {Vec2} ZERO\n * @static\n */\n static get ZERO () { return new Vec2(0, 0) };\n /**\n * !#en return a readonly Vec2 object with x = 0 and y = 0.\n * !#zh 返回一个 x = 0 和 y = 0 的 Vec2 只读对象。\n * @property {Vec2} ZERO_R\n * @readonly\n * @static\n */\n static readonly ZERO_R = Vec2.ZERO;\n\n /**\n * !#en return a Vec2 object with x = 0 and y = 1.\n * !#zh 返回 x = 0 和 y = 1 的 Vec2 对象。\n * @property {Vec2} UP\n * @static\n */\n static get UP () { return new Vec2(0, 1) };\n /**\n * !#en return a readonly Vec2 object with x = 0 and y = 1.\n * !#zh 返回 x = 0 和 y = 1 的 Vec2 只读对象。\n * @property {Vec2} UP_R\n * @static\n * @readonly\n */\n static readonly UP_R = Vec2.UP;\n\n /**\n * !#en return a readonly Vec2 object with x = 1 and y = 0.\n * !#zh 返回 x = 1 和 y = 0 的 Vec2 只读对象。\n * @property {Vec2} RIGHT\n * @static\n */\n static get RIGHT () { return new Vec2(1, 0) };\n /**\n * !#en return a Vec2 object with x = 1 and y = 0.\n * !#zh 返回 x = 1 和 y = 0 的 Vec2 对象。\n * @property {Vec2} RIGHT_R\n * @static\n * @readonly\n */\n static readonly RIGHT_R = Vec2.RIGHT;\n\n /**\n * !#zh 获得指定向量的拷贝\n * @method clone\n * @typescript\n * clone (a: Out): Vec2\n * @static\n */\n static clone (a: Out) {\n return new Vec2(a.x, a.y);\n }\n\n /**\n * !#zh 复制指定向量的值\n * @method copy\n * @typescript\n * copy (out: Out, a: Out): Out\n * @static\n */\n static copy (out: Out, a: Out) {\n out.x = a.x;\n out.y = a.y;\n return out;\n }\n\n /**\n * !#zh 设置向量值\n * @method set\n * @typescript\n * set (out: Out, x: number, y: number): Out\n * @static\n */\n static set (out: Out, x: number, y: number) {\n out.x = x;\n out.y = y;\n return out;\n }\n\n /**\n * !#zh 逐元素向量加法\n * @method add\n * @typescript\n * add (out: Out, a: Out, b: Out): Out\n * @static\n */\n static add (out: Out, a: Out, b: Out) {\n out.x = a.x + b.x;\n out.y = a.y + b.y;\n return out;\n }\n\n /**\n * !#zh 逐元素向量减法\n * @method subtract\n * @typescript\n * subtract (out: Out, a: Out, b: Out): Out\n * @static\n */\n static subtract (out: Out, a: Out, b: Out) {\n out.x = a.x - b.x;\n out.y = a.y - b.y;\n return out;\n }\n\n /**\n * !#zh 逐元素向量乘法\n * @method multiply\n * @typescript\n * multiply (out: Out, a: Out, b: Out): Out\n * @static\n */\n static multiply (out: Out, a: Out, b: Out) {\n out.x = a.x * b.x;\n out.y = a.y * b.y;\n return out;\n }\n\n /**\n * !#zh 逐元素向量除法\n * @method divide\n * @typescript\n * divide (out: Out, a: Out, b: Out): Out\n * @static\n */\n static divide (out: Out, a: Out, b: Out) {\n out.x = a.x / b.x;\n out.y = a.y / b.y;\n return out;\n }\n\n /**\n * !#zh 逐元素向量向上取整\n * @method ceil\n * @typescript\n * ceil (out: Out, a: Out): Out\n * @static\n */\n static ceil (out: Out, a: Out) {\n out.x = Math.ceil(a.x);\n out.y = Math.ceil(a.y);\n return out;\n }\n\n /**\n * !#zh 逐元素向量向下取整\n * @method floor\n * @typescript\n * floor (out: Out, a: Out): Out\n * @static\n */\n static floor (out: Out, a: Out) {\n out.x = Math.floor(a.x);\n out.y = Math.floor(a.y);\n return out;\n }\n\n /**\n * !#zh 逐元素向量最小值\n * @method min\n * @typescript\n * min (out: Out, a: Out, b: Out): Out\n * @static\n */\n static min (out: Out, a: Out, b: Out) {\n out.x = Math.min(a.x, b.x);\n out.y = Math.min(a.y, b.y);\n return out;\n }\n\n\n /**\n * !#zh 逐元素向量最大值\n * @method max\n * @typescript\n * max (out: Out, a: Out, b: Out): Out\n * @static\n */\n static max (out: Out, a: Out, b: Out) {\n out.x = Math.max(a.x, b.x);\n out.y = Math.max(a.y, b.y);\n return out;\n }\n\n /**\n * !#zh 逐元素向量四舍五入取整\n * @method round\n * @typescript\n * round (out: Out, a: Out): Out\n * @static\n */\n static round (out: Out, a: Out) {\n out.x = Math.round(a.x);\n out.y = Math.round(a.y);\n return out;\n }\n\n /**\n * !#zh 向量标量乘法\n * @method multiplyScalar\n * @typescript\n * multiplyScalar (out: Out, a: Out, b: number): Out\n * @static\n */\n static multiplyScalar (out: Out, a: Out, b: number) {\n out.x = a.x * b;\n out.y = a.y * b;\n return out;\n }\n\n /**\n * !#zh 逐元素向量乘加: A + B * scale\n * @method scaleAndAdd\n * @typescript\n * scaleAndAdd (out: Out, a: Out, b: Out, scale: number): Out\n * @static\n */\n static scaleAndAdd (out: Out, a: Out, b: Out, scale: number) {\n out.x = a.x + (b.x * scale);\n out.y = a.y + (b.y * scale);\n return out;\n }\n\n /**\n * !#zh 求两向量的欧氏距离\n * @method distance\n * @typescript\n * distance (a: Out, b: Out): number\n * @static\n */\n static distance (a: Out, b: Out) {\n _x = b.x - a.x;\n _y = b.y - a.y;\n return Math.sqrt(_x * _x + _y * _y);\n }\n\n /**\n * !#zh 求两向量的欧氏距离平方\n * @method squaredDistance\n * @typescript\n * squaredDistance (a: Out, b: Out): number\n * @static\n */\n static squaredDistance (a: Out, b: Out) {\n _x = b.x - a.x;\n _y = b.y - a.y;\n return _x * _x + _y * _y;\n }\n\n /**\n * !#zh 求向量长度\n * @method len\n * @typescript\n * len (a: Out): number\n * @static\n */\n static len (a: Out) {\n _x = a.x;\n _y = a.y;\n return Math.sqrt(_x * _x + _y * _y);\n }\n\n /**\n * !#zh 求向量长度平方\n * @method lengthSqr\n * @typescript\n * lengthSqr (a: Out): number\n * @static\n */\n static lengthSqr (a: Out) {\n _x = a.x;\n _y = a.y;\n return _x * _x + _y * _y;\n }\n\n /**\n * !#zh 逐元素向量取负\n * @method negate\n * @typescript\n * negate (out: Out, a: Out): Out\n * @static\n */\n static negate (out: Out, a: Out) {\n out.x = -a.x;\n out.y = -a.y;\n return out;\n }\n\n /**\n * !#zh 逐元素向量取倒数,接近 0 时返回 Infinity\n * @method inverse\n * @typescript\n * inverse (out: Out, a: Out): Out\n * @static\n */\n static inverse (out: Out, a: Out) {\n out.x = 1.0 / a.x;\n out.y = 1.0 / a.y;\n return out;\n }\n\n /**\n * !#zh 逐元素向量取倒数,接近 0 时返回 0\n * @method inverseSafe\n * @typescript\n * inverseSafe (out: Out, a: Out): Out\n * @static\n */\n static inverseSafe (out: Out, a: Out) {\n _x = a.x;\n _y = a.y;\n\n if (Math.abs(_x) < EPSILON) {\n out.x = 0;\n } else {\n out.x = 1.0 / _x;\n }\n\n if (Math.abs(_y) < EPSILON) {\n out.y = 0;\n } else {\n out.y = 1.0 / _y;\n }\n\n return out;\n }\n\n /**\n * !#zh 归一化向量\n * @method normalize\n * @typescript\n * normalize (out: Out, a: Vec2Like): Out\n * @static\n */\n static normalize (out: Out, a: Vec2Like) {\n _x = a.x;\n _y = a.y;\n let len = _x * _x + _y * _y;\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n out.x = _x * len;\n out.y = _y * len;\n }\n return out;\n }\n\n /**\n * !#zh 向量点积(数量积)\n * @method dot\n * @typescript\n * dot (a: Out, b: Out): number\n * @static\n */\n static dot (a: Out, b: Out) {\n return a.x * b.x + a.y * b.y;\n }\n\n /**\n * !#zh 向量叉积(向量积),注意二维向量的叉积为与 Z 轴平行的三维向量\n * @method cross\n * @typescript\n * cross (out: Vec2, a: Out, b: Out): Vec2\n * @static\n */\n static cross (out: Vec2, a: Out, b: Out) {\n out.x = out.y = 0;\n out.z = a.x * b.y - a.y * b.x;\n return out;\n }\n\n /**\n * !#zh 逐元素向量线性插值: A + t * (B - A)\n * @method lerp\n * @typescript\n * lerp (out: Out, a: Out, b: Out, t: number): Out\n * @static\n */\n static lerp (out: Out, a: Out, b: Out, t: number) {\n _x = a.x;\n _y = a.y;\n out.x = _x + t * (b.x - _x);\n out.y = _y + t * (b.y - _y);\n return out;\n }\n\n /**\n * !#zh 生成一个在单位圆上均匀分布的随机向量\n * @method random\n * @typescript\n * random (out: Out, scale?: number): Out\n * @static\n */\n static random (out: Out, scale?: number) {\n scale = scale || 1.0;\n const r = random() * 2.0 * Math.PI;\n out.x = Math.cos(r) * scale;\n out.y = Math.sin(r) * scale;\n return out;\n }\n\n /**\n * !#zh 向量与三维矩阵乘法,默认向量第三位为 1。\n * @method transformMat3\n * @typescript\n * transformMat3 (out: Out, a: Out, mat: IMat3Like): Out\n * @static\n */\n static transformMat3 (out: Out, a: Out, mat: MatLike) {\n _x = a.x;\n _y = a.y;\n let m = mat.m;\n out.x = m[0] * _x + m[3] * _y + m[6];\n out.y = m[1] * _x + m[4] * _y + m[7];\n return out;\n }\n\n /**\n * !#zh 向量与四维矩阵乘法,默认向量第三位为 0,第四位为 1。\n * @method transformMat4\n * @typescript\n * transformMat4 (out: Out, a: Out, mat: MatLike): Out\n * @static\n */\n static transformMat4 (out: Out, a: Out, mat: MatLike) {\n _x = a.x;\n _y = a.y;\n let m = mat.m;\n out.x = m[0] * _x + m[4] * _y + m[12];\n out.y = m[1] * _x + m[5] * _y + m[13];\n return out;\n }\n\n /**\n * !#zh 向量等价判断\n * @method strictEquals\n * @typescript\n * strictEquals (a: Out, b: Out): boolean\n * @static\n */\n static strictEquals (a: Out, b: Out) {\n return a.x === b.x && a.y === b.y;\n }\n\n /**\n * !#zh 排除浮点数误差的向量近似等价判断\n * @method equals\n * @typescript\n * equals (a: Out, b: Out, epsilon?: number): boolean\n * @static\n */\n static equals (a: Out, b: Out, epsilon = EPSILON) {\n return (\n Math.abs(a.x - b.x) <=\n epsilon * Math.max(1.0, Math.abs(a.x), Math.abs(b.x)) &&\n Math.abs(a.y - b.y) <=\n epsilon * Math.max(1.0, Math.abs(a.y), Math.abs(b.y))\n );\n }\n\n /**\n * !#zh 排除浮点数误差的向量近似等价判断\n * @method angle\n * @typescript\n * angle (a: Out, b: Out): number\n * @static\n */\n static angle (a: Out, b: Out) {\n Vec2.normalize(v2_1, a);\n Vec2.normalize(v2_2, b);\n const cosine = Vec2.dot(v2_1, v2_2);\n if (cosine > 1.0) {\n return 0;\n }\n if (cosine < -1.0) {\n return Math.PI;\n }\n return Math.acos(cosine);\n }\n\n /**\n * !#zh 向量转数组\n * @method toArray\n * @typescript\n * toArray > (out: Out, v: IVec2Like, ofs?: number): Out\n * @static\n */\n static toArray > (out: Out, v: IVec2Like, ofs = 0) {\n out[ofs + 0] = v.x;\n out[ofs + 1] = v.y;\n return out;\n }\n\n /**\n * !#zh 数组转向量\n * @method fromArray\n * @typescript\n * fromArray (out: Out, arr: IWritableArrayLike, ofs?: number): Out\n * @static\n */\n static fromArray (out: Out, arr: IWritableArrayLike, ofs = 0) {\n out.x = arr[ofs + 0];\n out.y = arr[ofs + 1];\n return out;\n }\n\n /**\n * @property {Number} x\n */\n x: number;\n\n /**\n * @property {Number} y\n */\n y: number;\n\n // compatible with vec3\n z: number = 0;\n\n /**\n * !#en\n * Constructor\n * see {{#crossLink \"cc/vec2:method\"}}cc.v2{{/crossLink}} or {{#crossLink \"cc/p:method\"}}cc.p{{/crossLink}}\n * !#zh\n * 构造函数,可查看 {{#crossLink \"cc/vec2:method\"}}cc.v2{{/crossLink}} 或者 {{#crossLink \"cc/p:method\"}}cc.p{{/crossLink}}\n * @method constructor\n * @param {Number} [x=0]\n * @param {Number} [y=0]\n */\n constructor (x: number | Vec2 = 0, y: number = 0) {\n super();\n\n if (x && typeof x === 'object') {\n this.x = x.x || 0;\n this.y = x.y || 0;\n } else {\n this.x = x as number || 0;\n this.y = y || 0;\n }\n }\n\n /**\n * !#en clone a Vec2 object\n * !#zh 克隆一个 Vec2 对象\n * @method clone\n * @return {Vec2}\n */\n clone (): Vec2 {\n return new Vec2(this.x, this.y);\n }\n\n /**\n * !#en Sets vector with another's value\n * !#zh 设置向量值。\n * @method set\n * @param {Vec2} newValue - !#en new value to set. !#zh 要设置的新值\n * @return {Vec2} returns this\n * @chainable\n */\n set (newValue: Vec2): this {\n this.x = newValue.x;\n this.y = newValue.y;\n return this;\n }\n\n /**\n * !#en Check whether two vector equal\n * !#zh 当前的向量是否与指定的向量相等。\n * @method equals\n * @param {Vec2} other\n * @return {Boolean}\n */\n equals (other: Vec2): boolean {\n return other && this.x === other.x && this.y === other.y;\n }\n\n /**\n * !#en Check whether two vector equal with some degree of variance.\n * !#zh\n * 近似判断两个点是否相等。
\n * 判断 2 个向量是否在指定数值的范围之内,如果在则返回 true,反之则返回 false。\n * @method fuzzyEquals\n * @param {Vec2} other\n * @param {Number} variance\n * @return {Boolean}\n */\n fuzzyEquals (other: Vec2, variance): boolean {\n if (this.x - variance <= other.x && other.x <= this.x + variance) {\n if (this.y - variance <= other.y && other.y <= this.y + variance)\n return true;\n }\n return false;\n }\n\n /**\n * !#en Transform to string with vector informations\n * !#zh 转换为方便阅读的字符串。\n * @method toString\n * @return {string}\n */\n toString (): string {\n return \"(\" +\n this.x.toFixed(2) + \", \" +\n this.y.toFixed(2) + \")\"\n ;\n }\n\n /**\n * !#en Calculate linear interpolation result between this vector and another one with given ratio\n * !#zh 线性插值。\n * @method lerp\n * @param {Vec2} to\n * @param {Number} ratio - the interpolation coefficient\n * @param {Vec2} [out] - optional, the receiving vector, you can pass the same vec2 to save result to itself, if not provided, a new vec2 will be created\n * @return {Vec2}\n */\n lerp (to: Vec2, ratio: number, out?: Vec2): Vec2 {\n out = out || new Vec2();\n var x = this.x;\n var y = this.y;\n out.x = x + (to.x - x) * ratio;\n out.y = y + (to.y - y) * ratio;\n return out;\n }\n\n /**\n * !#en Clamp the vector between from float and to float.\n * !#zh\n * 返回指定限制区域后的向量。
\n * 向量大于 max_inclusive 则返回 max_inclusive。
\n * 向量小于 min_inclusive 则返回 min_inclusive。
\n * 否则返回自身。\n * @method clampf\n * @param {Vec2} min_inclusive\n * @param {Vec2} max_inclusive\n * @return {Vec2}\n * @example\n * var min_inclusive = cc.v2(0, 0);\n * var max_inclusive = cc.v2(20, 20);\n * var v1 = cc.v2(20, 20).clampf(min_inclusive, max_inclusive); // Vec2 {x: 20, y: 20};\n * var v2 = cc.v2(0, 0).clampf(min_inclusive, max_inclusive); // Vec2 {x: 0, y: 0};\n * var v3 = cc.v2(10, 10).clampf(min_inclusive, max_inclusive); // Vec2 {x: 10, y: 10};\n */\n clampf (min_inclusive: Vec2, max_inclusive: Vec2): this {\n this.x = misc.clampf(this.x, min_inclusive.x, max_inclusive.x);\n this.y = misc.clampf(this.y, min_inclusive.y, max_inclusive.y);\n return this;\n }\n\n /**\n * !#en Adds this vector.\n * !#zh 向量加法。\n * @method add\n * @param {Vec2} vector\n * @param {Vec2} [out]\n * @return {Vec2} returns this\n * @chainable\n * @example\n * var v = cc.v2(10, 10);\n * v.add(cc.v2(5, 5));// return Vec2 {x: 15, y: 15};\n */\n add (vector: Vec2, out?: Vec2): Vec2 {\n out = out || new Vec2();\n out.x = this.x + vector.x;\n out.y = this.y + vector.y;\n return out;\n }\n\n /**\n * !#en Adds this vector. If you want to save result to another vector, use add() instead.\n * !#zh 向量加法。如果你想保存结果到另一个向量,使用 add() 代替。\n * @method addSelf\n * @param {Vec2} vector\n * @return {Vec2} returns this\n * @chainable\n */\n addSelf (vector: Vec2): this {\n this.x += vector.x;\n this.y += vector.y;\n return this;\n }\n\n /**\n * !#en Subtracts one vector from this.\n * !#zh 向量减法。\n * @method subtract\n * @param {Vec2} vector\n * @return {Vec2} returns this\n * @chainable\n * @example\n * var v = cc.v2(10, 10);\n * v.subSelf(cc.v2(5, 5));// return Vec2 {x: 5, y: 5};\n */\n subtract (vector: Vec2): this {\n this.x -= vector.x;\n this.y -= vector.y;\n return this;\n }\n\n /**\n * !#en Multiplies this by a number.\n * !#zh 缩放当前向量。\n * @method multiplyScalar\n * @param {number} num\n * @return {Vec2} returns this\n * @chainable\n * @example\n * var v = cc.v2(10, 10);\n * v.multiply(5);// return Vec2 {x: 50, y: 50};\n */\n multiplyScalar (num: number): this {\n this.x *= num;\n this.y *= num;\n return this;\n }\n\n /**\n * !#en Multiplies two vectors.\n * !#zh 分量相乘。\n * @method multiply\n * @param {Vec2} vector\n * @return {Vec2} returns this\n * @chainable\n * @example\n * var v = cc.v2(10, 10);\n * v.multiply(cc.v2(5, 5));// return Vec2 {x: 50, y: 50};\n */\n multiply (vector: Vec2): this {\n this.x *= vector.x;\n this.y *= vector.y;\n return this;\n }\n\n /**\n * !#en Divides by a number.\n * !#zh 向量除法。\n * @method divide\n * @param {number} num\n * @return {Vec2} returns this\n * @chainable\n * @example\n * var v = cc.v2(10, 10);\n * v.divide(5); // return Vec2 {x: 2, y: 2};\n */\n divide (num: number): this {\n this.x /= num;\n this.y /= num;\n return this;\n }\n\n /**\n * !#en Negates the components.\n * !#zh 向量取反。\n * @method negate\n * @return {Vec2} returns this\n * @chainable\n * @example\n * var v = cc.v2(10, 10);\n * v.negate(); // return Vec2 {x: -10, y: -10};\n */\n negate (): this {\n this.x = -this.x;\n this.y = -this.y;\n return this;\n }\n\n /**\n * !#en Dot product\n * !#zh 当前向量与指定向量进行点乘。\n * @method dot\n * @param {Vec2} [vector]\n * @return {number} the result\n * @example\n * var v = cc.v2(10, 10);\n * v.dot(cc.v2(5, 5)); // return 100;\n */\n dot (vector: Vec2): number {\n return this.x * vector.x + this.y * vector.y;\n }\n\n /**\n * !#en Cross product\n * !#zh 当前向量与指定向量进行叉乘。\n * @method cross\n * @param {Vec2} [vector]\n * @return {number} the result\n * @example\n * var v = cc.v2(10, 10);\n * v.cross(cc.v2(5, 5)); // return 0;\n */\n cross (vector: Vec2): number {\n return this.x * vector.y - this.y * vector.x;\n }\n\n /**\n * !#en Returns the length of this vector.\n * !#zh 返回该向量的长度。\n * @method len\n * @return {number} the result\n * @example\n * var v = cc.v2(10, 10);\n * v.len(); // return 14.142135623730951;\n */\n len (): number {\n return Math.sqrt(this.x * this.x + this.y * this.y);\n }\n\n /**\n * !#en Returns the squared length of this vector.\n * !#zh 返回该向量的长度平方。\n * @method lengthSqr\n * @return {number} the result\n * @example\n * var v = cc.v2(10, 10);\n * v.lengthSqr(); // return 200;\n */\n lengthSqr (): number {\n return this.x * this.x + this.y * this.y;\n }\n\n /**\n * !#en Make the length of this vector to 1.\n * !#zh 向量归一化,让这个向量的长度为 1。\n * @method normalizeSelf\n * @return {Vec2} returns this\n * @chainable\n * @example\n * var v = cc.v2(10, 10);\n * v.normalizeSelf(); // return Vec2 {x: 0.7071067811865475, y: 0.7071067811865475};\n */\n normalizeSelf (): Vec2 {\n var magSqr = this.x * this.x + this.y * this.y;\n if (magSqr === 1.0)\n return this;\n\n if (magSqr === 0.0) {\n return this;\n }\n\n var invsqrt = 1.0 / Math.sqrt(magSqr);\n this.x *= invsqrt;\n this.y *= invsqrt;\n\n return this;\n }\n\n /**\n * !#en\n * Returns this vector with a magnitude of 1.
\n *
\n * Note that the current vector is unchanged and a new normalized vector is returned. If you want to normalize the current vector, use normalizeSelf function.\n * !#zh\n * 返回归一化后的向量。
\n *
\n * 注意,当前向量不变,并返回一个新的归一化向量。如果你想来归一化当前向量,可使用 normalizeSelf 函数。\n * @method normalize\n * @param {Vec2} [out] - optional, the receiving vector, you can pass the same vec2 to save result to itself, if not provided, a new vec2 will be created\n * @return {Vec2} result\n * var v = cc.v2(10, 10);\n * v.normalize(); // return Vec2 {x: 0.7071067811865475, y: 0.7071067811865475};\n */\n normalize (out?: Vec2): Vec2 {\n out = out || new Vec2();\n out.x = this.x;\n out.y = this.y;\n out.normalizeSelf();\n return out;\n }\n\n /**\n * !#en Get angle in radian between this and vector.\n * !#zh 夹角的弧度。\n * @method angle\n * @param {Vec2} vector\n * @return {number} from 0 to Math.PI\n */\n angle (vector: Vec2): number {\n var magSqr1 = this.magSqr();\n var magSqr2 = vector.magSqr();\n\n if (magSqr1 === 0 || magSqr2 === 0) {\n console.warn(\"Can't get angle between zero vector\");\n return 0.0;\n }\n\n var dot = this.dot(vector);\n var theta = dot / (Math.sqrt(magSqr1 * magSqr2));\n theta = misc.clampf(theta, -1.0, 1.0);\n return Math.acos(theta);\n }\n\n /**\n * !#en Get angle in radian between this and vector with direction.\n * !#zh 带方向的夹角的弧度。\n * @method signAngle\n * @param {Vec2} vector\n * @return {number} from -MathPI to Math.PI\n */\n signAngle (vector: Vec2): number {\n let angle = this.angle(vector);\n return this.cross(vector) < 0 ? -angle : angle;\n }\n\n /**\n * !#en rotate\n * !#zh 返回旋转给定弧度后的新向量。\n * @method rotate\n * @param {number} radians\n * @param {Vec2} [out] - optional, the receiving vector, you can pass the same vec2 to save result to itself, if not provided, a new vec2 will be created\n * @return {Vec2} the result\n */\n rotate (radians: number, out?: Vec2): Vec2 {\n out = out || new Vec2();\n out.x = this.x;\n out.y = this.y;\n return out.rotateSelf(radians);\n }\n\n /**\n * !#en rotate self\n * !#zh 按指定弧度旋转向量。\n * @method rotateSelf\n * @param {number} radians\n * @return {Vec2} returns this\n * @chainable\n */\n rotateSelf (radians: number): Vec2 {\n var sin = Math.sin(radians);\n var cos = Math.cos(radians);\n var x = this.x;\n this.x = cos * x - sin * this.y;\n this.y = sin * x + cos * this.y;\n return this;\n }\n\n /**\n * !#en Calculates the projection of the current vector over the given vector.\n * !#zh 返回当前向量在指定 vector 向量上的投影向量。\n * @method project\n * @param {Vec2} vector\n * @return {Vec2}\n * @example\n * var v1 = cc.v2(20, 20);\n * var v2 = cc.v2(5, 5);\n * v1.project(v2); // Vec2 {x: 20, y: 20};\n */\n project (vector: Vec2): Vec2 {\n return vector.multiplyScalar(this.dot(vector) / vector.dot(vector));\n }\n\n /**\n * Transforms the vec2 with a mat4. 3rd vector component is implicitly '0', 4th vector component is implicitly '1'\n * @method transformMat4\n * @param {Mat4} m matrix to transform with\n * @param {Vec2} [out] the receiving vector, you can pass the same vec2 to save result to itself, if not provided, a new vec2 will be created\n * @returns {Vec2} out\n */\n transformMat4 (m: Mat4, out?: Vec2): Vec2 {\n out = out || new Vec2();\n Vec2.transformMat4(out, this, m);\n return out;\n }\n\n /**\n * Returns the maximum value in x, y.\n * @method maxAxis\n * @returns {number}\n */\n maxAxis (): number {\n return Math.max(this.x, this.y);\n }\n}\n\nconst v2_1 = new Vec2();\nconst v2_2 = new Vec2();\n\nCCClass.fastDefine('cc.Vec2', Vec2, { x: 0, y: 0 });\n\n\n\n/**\n * @module cc\n */\n\n\n/**\n * !#en The convenience method to create a new {{#crossLink \"Vec2\"}}cc.Vec2{{/crossLink}}.\n * !#zh 通过该简便的函数进行创建 {{#crossLink \"Vec2\"}}cc.Vec2{{/crossLink}} 对象。\n * @method v2\n * @param {Number|Object} [x=0]\n * @param {Number} [y=0]\n * @return {Vec2}\n * @example\n * var v1 = cc.v2();\n * var v2 = cc.v2(0, 0);\n * var v3 = cc.v2(v2);\n * var v4 = cc.v2({x: 100, y: 100});\n */\ncc.v2 = function v2 (x, y) {\n return new Vec2(x, y);\n};\n\ncc.Vec2 = Vec2;\n","/****************************************************************************\n Copyright (c) 2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport ValueType from './value-type';\nimport CCClass from '../platform/CCClass';\nimport misc from '../utils/misc';\nimport Vec2 from './vec2';\nimport Mat4 from './mat4';\nimport { EPSILON, random } from './utils';\n\nlet _x: number = 0.0;\nlet _y: number = 0.0;\nlet _z: number = 0.0;\n\n/**\n * !#en Representation of 3D vectors and points.\n * !#zh 表示 3D 向量和坐标\n *\n * @class Vec3\n * @extends ValueType\n */\n\nexport default class Vec3 extends ValueType {\n // deprecated\n static sub = Vec3.subtract;\n static mul = Vec3.multiply;\n static scale = Vec3.multiplyScalar;\n static mag = Vec3.len;\n static squaredMagnitude = Vec3.lengthSqr;\n static div = Vec3.divide;\n\n /**\n * !#en Returns the length of this vector.\n * !#zh 返回该向量的长度。\n * @method mag\n * @return {number} the result\n * @example\n * var v = cc.v3(10, 10, 10);\n * v.mag(); // return 17.320508075688775;\n */\n mag = Vec3.prototype.len;\n /**\n * !#en Returns the squared length of this vector.\n * !#zh 返回该向量的长度平方。\n * @method magSqr\n * @return {number} the result\n */\n magSqr = Vec3.prototype.lengthSqr;\n /**\n * !#en Subtracts one vector from this. If you want to save result to another vector, use sub() instead.\n * !#zh 向量减法。如果你想保存结果到另一个向量,可使用 sub() 代替。\n * @method subSelf\n * @param {Vec3} vector\n * @return {Vec3} returns this\n * @chainable\n */\n subSelf = Vec3.prototype.subtract;\n /**\n * !#en Subtracts one vector from this, and returns the new result.\n * !#zh 向量减法,并返回新结果。\n * @method sub\n * @param {Vec3} vector\n * @param {Vec3} [out] - optional, the receiving vector, you can pass the same vec3 to save result to itself, if not provided, a new vec3 will be created\n * @return {Vec3} the result\n */\n sub (vector: Vec3, out?: Vec3) {\n return Vec3.subtract(out || new Vec3(), this, vector);\n }\n /**\n * !#en Multiplies this by a number. If you want to save result to another vector, use mul() instead.\n * !#zh 缩放当前向量。如果你想结果保存到另一个向量,可使用 mul() 代替。\n * @method mulSelf\n * @param {number} num\n * @return {Vec3} returns this\n * @chainable\n */\n mulSelf = Vec3.prototype.multiplyScalar;\n /**\n * !#en Multiplies by a number, and returns the new result.\n * !#zh 缩放向量,并返回新结果。\n * @method mul\n * @param {number} num\n * @param {Vec3} [out] - optional, the receiving vector, you can pass the same vec3 to save result to itself, if not provided, a new vec3 will be created\n * @return {Vec3} the result\n */\n mul (num: number, out?: Vec3) {\n return Vec3.multiplyScalar(out || new Vec3(), this, num);\n }\n /**\n * !#en Divides by a number. If you want to save result to another vector, use div() instead.\n * !#zh 向量除法。如果你想结果保存到另一个向量,可使用 div() 代替。\n * @method divSelf\n * @param {number} num\n * @return {Vec3} returns this\n * @chainable\n */\n divSelf = Vec3.prototype.divide;\n /**\n * !#en Divides by a number, and returns the new result.\n * !#zh 向量除法,并返回新的结果。\n * @method div\n * @param {number} num\n * @param {Vec3} [out] - optional, the receiving vector, you can pass the same vec3 to save result to itself, if not provided, a new vec3 will be created\n * @return {Vec3} the result\n */\n div (num: number, out?: Vec3): Vec3 {\n return Vec3.multiplyScalar(out || new Vec3(), this, 1/num);\n }\n /**\n * !#en Multiplies two vectors.\n * !#zh 分量相乘。\n * @method scaleSelf\n * @param {Vec3} vector\n * @return {Vec3} returns this\n * @chainable\n */\n scaleSelf = Vec3.prototype.multiply;\n /**\n * !#en Multiplies two vectors, and returns the new result.\n * !#zh 分量相乘,并返回新的结果。\n * @method scale\n * @param {Vec3} vector\n * @param {Vec3} [out] - optional, the receiving vector, you can pass the same vec3 to save result to itself, if not provided, a new vec3 will be created\n * @return {Vec3} the result\n */\n scale (vector: Vec3, out?: Vec3) {\n return Vec3.multiply(out || new Vec3(), this, vector);\n }\n /**\n * !#en Negates the components. If you want to save result to another vector, use neg() instead.\n * !#zh 向量取反。如果你想结果保存到另一个向量,可使用 neg() 代替。\n * @method negSelf\n * @return {Vec3} returns this\n * @chainable\n */\n negSelf = Vec3.prototype.negate;\n /**\n * !#en Negates the components, and returns the new result.\n * !#zh 返回取反后的新向量。\n * @method neg\n * @param {Vec3} [out] - optional, the receiving vector, you can pass the same vec3 to save result to itself, if not provided, a new vec3 will be created\n * @return {Vec3} the result\n */\n neg (out?: Vec3) {\n return Vec3.negate(out || new Vec3(), this);\n }\n\n /**\n * !#en return a Vec3 object with x = 1, y = 1, z = 1.\n * !#zh 新 Vec3 对象。\n * @property ONE\n * @type Vec3\n * @static\n */\n static get ONE () { return new Vec3(1, 1, 1); }\n static readonly ONE_R = Vec3.ONE;\n\n /**\n * !#en return a Vec3 object with x = 0, y = 0, z = 0.\n * !#zh 返回 x = 0,y = 0,z = 0 的 Vec3 对象。\n * @property ZERO\n * @type Vec3\n * @static\n */\n static get ZERO () { return new Vec3(); }\n static readonly ZERO_R = Vec3.ZERO;\n\n /**\n * !#en return a Vec3 object with x = 0, y = 1, z = 0.\n * !#zh 返回 x = 0, y = 1, z = 0 的 Vec3 对象。\n * @property UP\n * @type Vec3\n * @static\n */\n static get UP () { return new Vec3(0, 1, 0); }\n static readonly UP_R = Vec3.UP;\n\n /**\n * !#en return a Vec3 object with x = 1, y = 0, z = 0.\n * !#zh 返回 x = 1,y = 0,z = 0 的 Vec3 对象。\n * @property RIGHT\n * @type Vec3\n * @static\n */\n static get RIGHT () { return new Vec3(1, 0, 0); }\n static readonly RIGHT_R = Vec3.RIGHT;\n\n /**\n * !#en return a Vec3 object with x = 0, y = 0, z = 1.\n * !#zh 返回 x = 0,y = 0,z = 1 的 Vec3 对象。\n * @property FORWARD\n * @type Vec3\n * @static\n */\n static get FORWARD () { return new Vec3(0, 0, 1); }\n static readonly FRONT_R = Vec3.FORWARD;\n\n\n /**\n * !#zh 将目标赋值为零向量\n * !#en The target of an assignment zero vector\n * @method zero\n * @typescript\n * zero (out: Out): Out\n * @static\n */\n static zero (out: Out) {\n out.x = 0;\n out.y = 0;\n out.z = 0;\n return out;\n }\n\n /**\n * !#zh 获得指定向量的拷贝\n * !#en Obtaining copy vectors designated\n * @method clone\n * @typescript\n * clone (a: Out): Vec3\n * @static\n */\n static clone (a: Out) {\n return new Vec3(a.x, a.y, a.z);\n }\n\n /**\n * !#zh 复制目标向量\n * !#en Copy the target vector\n * @method copy\n * @typescript\n * copy (out: Out, a: Vec3Like): Out\n * @static\n */\n static copy (out: Out, a: Vec3Like) {\n out.x = a.x;\n out.y = a.y;\n out.z = a.z;\n return out;\n }\n\n /**\n * !#zh 设置向量值\n * !#en Set to value\n * @method set\n * @typescript\n * set (out: Out, x: number, y: number, z: number): Out\n * @static\n */\n static set (out: Out, x: number, y: number, z: number) {\n out.x = x;\n out.y = y;\n out.z = z;\n return out;\n }\n\n /**\n * !#zh 逐元素向量加法\n * !#en Element-wise vector addition\n * @method add\n * @typescript\n * add (out: Out, a: Out, b: Out): Out\n * @static\n */\n static add (out: Out, a: Out, b: Out) {\n out.x = a.x + b.x;\n out.y = a.y + b.y;\n out.z = a.z + b.z;\n return out;\n }\n\n /**\n * !#zh 逐元素向量减法\n * !#en Element-wise vector subtraction\n * @method subtract\n * @typescript\n * subtract (out: Out, a: Out, b: Out): Out\n * @static\n */\n static subtract (out: Out, a: Out, b: Out) {\n out.x = a.x - b.x;\n out.y = a.y - b.y;\n out.z = a.z - b.z;\n return out;\n }\n\n /**\n * !#zh 逐元素向量乘法 (分量积)\n * !#en Element-wise vector multiplication (product component)\n * @method multiply\n * @typescript\n * multiply (out: Out, a: Vec3Like_1, b: Vec3Like_2): Out\n * @static\n */\n static multiply (out: Out, a: Vec3Like_1, b: Vec3Like_2) {\n out.x = a.x * b.x;\n out.y = a.y * b.y;\n out.z = a.z * b.z;\n return out;\n }\n\n /**\n * !#zh 逐元素向量除法\n * !#en Element-wise vector division\n * @method divide\n * @typescript\n * divide (out: Out, a: Out, b: Out): Out\n * @static\n */\n static divide (out: Out, a: Out, b: Out) {\n out.x = a.x / b.x;\n out.y = a.y / b.y;\n out.z = a.z / b.z;\n return out;\n }\n\n /**\n * !#zh 逐元素向量向上取整\n * !#en Rounding up by elements of the vector\n * @method ceil\n * @typescript\n * ceil (out: Out, a: Out): Out\n * @static\n */\n static ceil (out: Out, a: Out) {\n out.x = Math.ceil(a.x);\n out.y = Math.ceil(a.y);\n out.z = Math.ceil(a.z);\n return out;\n }\n\n /**\n * !#zh 逐元素向量向下取整\n * !#en Element vector by rounding down\n * @method floor\n * @typescript\n * floor (out: Out, a: Out): Out\n * @static\n */\n static floor (out: Out, a: Out) {\n out.x = Math.floor(a.x);\n out.y = Math.floor(a.y);\n out.z = Math.floor(a.z);\n return out;\n }\n\n /**\n * !#zh 逐元素向量最小值\n * !#en The minimum by-element vector\n * @method min\n * @typescript\n * min (out: Out, a: Out, b: Out): Out\n * @static\n */\n static min (out: Out, a: Out, b: Out) {\n out.x = Math.min(a.x, b.x);\n out.y = Math.min(a.y, b.y);\n out.z = Math.min(a.z, b.z);\n return out;\n }\n\n /**\n * !#zh 逐元素向量最大值\n * !#en The maximum value of the element-wise vector\n * @method max\n * @typescript\n * max (out: Out, a: Out, b: Out): Out\n * @static\n */\n static max (out: Out, a: Out, b: Out) {\n out.x = Math.max(a.x, b.x);\n out.y = Math.max(a.y, b.y);\n out.z = Math.max(a.z, b.z);\n return out;\n }\n\n /**\n * !#zh 逐元素向量四舍五入取整\n * !#en Element-wise vector of rounding to whole\n * @method round\n * @typescript\n * round (out: Out, a: Out): Out\n * @static\n */\n static round (out: Out, a: Out) {\n out.x = Math.round(a.x);\n out.y = Math.round(a.y);\n out.z = Math.round(a.z);\n return out;\n }\n\n /**\n * !#zh 向量标量乘法\n * !#en Vector scalar multiplication\n * @method multiplyScalar\n * @typescript\n * multiplyScalar (out: Out, a: Vec3Like, b: number): Out\n * @static\n */\n static multiplyScalar (out: Out, a: Vec3Like, b: number) {\n out.x = a.x * b;\n out.y = a.y * b;\n out.z = a.z * b;\n return out;\n }\n\n /**\n * !#zh 逐元素向量乘加: A + B * scale\n * !#en Element-wise vector multiply add: A + B * scale\n * @method scaleAndAdd\n * @typescript\n * scaleAndAdd (out: Out, a: Out, b: Out, scale: number): Out\n * @static\n */\n static scaleAndAdd (out: Out, a: Out, b: Out, scale: number) {\n out.x = a.x + b.x * scale;\n out.y = a.y + b.y * scale;\n out.z = a.z + b.z * scale;\n return out;\n }\n\n /**\n * !#zh 求两向量的欧氏距离\n * !#en Seeking two vectors Euclidean distance\n * @method distance\n * @typescript\n * distance (a: Out, b: Out): number\n * @static\n */\n static distance (a: Out, b: Out) {\n _x = b.x - a.x;\n _y = b.y - a.y;\n _z = b.z - a.z;\n return Math.sqrt(_x * _x + _y * _y + _z * _z);\n }\n\n /**\n * !#zh 求两向量的欧氏距离平方\n * !#en Euclidean distance squared seeking two vectors\n * @method squaredDistance\n * @typescript\n * squaredDistance (a: Out, b: Out): number\n * @static\n */\n static squaredDistance (a: Out, b: Out) {\n _x = b.x - a.x;\n _y = b.y - a.y;\n _z = b.z - a.z;\n return _x * _x + _y * _y + _z * _z;\n }\n\n /**\n * !#zh 求向量长度\n * !#en Seeking vector length\n * @method len\n * @typescript\n * len (a: Out): number\n * @static\n */\n static len (a: Out) {\n _x = a.x;\n _y = a.y;\n _z = a.z;\n return Math.sqrt(_x * _x + _y * _y + _z * _z);\n }\n\n /**\n * !#zh 求向量长度平方\n * !#en Seeking squared vector length\n * @method lengthSqr\n * @typescript\n * lengthSqr (a: Out): number\n * @static\n */\n static lengthSqr (a: Out) {\n _x = a.x;\n _y = a.y;\n _z = a.z;\n return _x * _x + _y * _y + _z * _z;\n }\n\n /**\n * !#zh 逐元素向量取负\n * !#en By taking the negative elements of the vector\n * @method negate\n * @typescript\n * negate (out: Out, a: Out): Out\n * @static\n */\n static negate (out: Out, a: Out) {\n out.x = -a.x;\n out.y = -a.y;\n out.z = -a.z;\n return out;\n }\n\n /**\n * !#zh 逐元素向量取倒数,接近 0 时返回 Infinity\n * !#en Element vector by taking the inverse, return near 0 Infinity\n * @method inverse\n * @typescript\n * inverse (out: Out, a: Out): Out\n * @static\n */\n static inverse (out: Out, a: Out) {\n out.x = 1.0 / a.x;\n out.y = 1.0 / a.y;\n out.z = 1.0 / a.z;\n return out;\n }\n\n /**\n * !#zh 逐元素向量取倒数,接近 0 时返回 0\n * !#en Element vector by taking the inverse, return near 0 0\n * @method inverseSafe\n * @typescript\n * inverseSafe (out: Out, a: Out): Out\n * @static\n */\n static inverseSafe (out: Out, a: Out) {\n _x = a.x;\n _y = a.y;\n _z = a.z;\n\n if (Math.abs(_x) < EPSILON) {\n out.x = 0;\n } else {\n out.x = 1.0 / _x;\n }\n\n if (Math.abs(_y) < EPSILON) {\n out.y = 0;\n } else {\n out.y = 1.0 / _y;\n }\n\n if (Math.abs(_z) < EPSILON) {\n out.z = 0;\n } else {\n out.z = 1.0 / _z;\n }\n\n return out;\n }\n\n /**\n * !#zh 归一化向量\n * !#en Normalized vector\n * @method normalize\n * @typescript\n * normalize (out: Out, a: Vec3Like): Out\n * @static\n */\n static normalize (out: Out, a: Vec3Like) {\n _x = a.x;\n _y = a.y;\n _z = a.z;\n\n let len = _x * _x + _y * _y + _z * _z;\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n out.x = _x * len;\n out.y = _y * len;\n out.z = _z * len;\n }\n return out;\n }\n\n /**\n * !#zh 向量点积(数量积)\n * !#en Vector dot product (scalar product)\n * @method dot\n * @typescript\n * dot (a: Out, b: Out): number\n * @static\n */\n static dot (a: Out, b: Out) {\n return a.x * b.x + a.y * b.y + a.z * b.z;\n }\n\n /**\n * !#zh 向量叉积(向量积)\n * !#en Vector cross product (vector product)\n * @method cross\n * @typescript\n * cross (out: Out, a: Vec3Like_1, b: Vec3Like_2): Out\n * @static\n */\n static cross (out: Out, a: Vec3Like_1, b: Vec3Like_2) {\n const { x: ax, y: ay, z: az } = a;\n const { x: bx, y: by, z: bz } = b;\n out.x = ay * bz - az * by;\n out.y = az * bx - ax * bz;\n out.z = ax * by - ay * bx;\n return out;\n }\n\n /**\n * !#zh 逐元素向量线性插值: A + t * (B - A)\n * !#en Vector element by element linear interpolation: A + t * (B - A)\n * @method lerp\n * @typescript\n * lerp (out: Out, a: Out, b: Out, t: number): Out\n * @static\n */\n static lerp (out: Out, a: Out, b: Out, t: number) {\n out.x = a.x + t * (b.x - a.x);\n out.y = a.y + t * (b.y - a.y);\n out.z = a.z + t * (b.z - a.z);\n return out;\n }\n\n /**\n * !#zh 生成一个在单位球体上均匀分布的随机向量\n * !#en Generates a uniformly distributed random vectors on the unit sphere\n * @method random\n * @typescript\n * random (out: Out, scale?: number): Out\n * @param scale 生成的向量长度\n * @static\n */\n static random (out: Out, scale?: number) {\n scale = scale || 1.0;\n\n const phi = random() * 2.0 * Math.PI;\n const cosTheta = random() * 2 - 1;\n const sinTheta = Math.sqrt(1 - cosTheta * cosTheta);\n\n out.x = sinTheta * Math.cos(phi) * scale;\n out.y = sinTheta * Math.sin(phi) * scale;\n out.z = cosTheta * scale;\n return out;\n }\n\n /**\n * !#zh 向量与四维矩阵乘法,默认向量第四位为 1。\n * !#en Four-dimensional vector and matrix multiplication, the default vectors fourth one.\n * @method transformMat4\n * @typescript\n * transformMat4 (out: Out, a: Vec3Like, mat: MatLike): Out\n * @static\n */\n static transformMat4 (out: Out, a: Vec3Like, mat: MatLike) {\n _x = a.x;\n _y = a.y;\n _z = a.z;\n let m = mat.m;\n let rhw = m[3] * _x + m[7] * _y + m[11] * _z + m[15];\n rhw = rhw ? 1 / rhw : 1;\n out.x = (m[0] * _x + m[4] * _y + m[8] * _z + m[12]) * rhw;\n out.y = (m[1] * _x + m[5] * _y + m[9] * _z + m[13]) * rhw;\n out.z = (m[2] * _x + m[6] * _y + m[10] * _z + m[14]) * rhw;\n return out;\n }\n\n /**\n * !#zh 向量与四维矩阵乘法,默认向量第四位为 0。\n * !#en Four-dimensional vector and matrix multiplication, vector fourth default is 0.\n * @method transformMat4Normal\n * @typescript\n * transformMat4Normal (out: Out, a: Out, mat: MatLike): Out\n * @static\n */\n static transformMat4Normal (out: Out, a: Out, mat: MatLike) {\n _x = a.x;\n _y = a.y;\n _z = a.z;\n let m = mat.m;\n let rhw = m[3] * _x + m[7] * _y + m[11] * _z;\n rhw = rhw ? 1 / rhw : 1;\n out.x = (m[0] * _x + m[4] * _y + m[8] * _z) * rhw;\n out.y = (m[1] * _x + m[5] * _y + m[9] * _z) * rhw;\n out.z = (m[2] * _x + m[6] * _y + m[10] * _z) * rhw;\n return out;\n }\n\n /**\n * !#zh 向量与三维矩阵乘法\n * !#en Dimensional vector matrix multiplication\n * @method transformMat3\n * @typescript\n * transformMat3 (out: Out, a: Out, mat: MatLike): Out\n * @static\n */\n static transformMat3 (out: Out, a: Out, mat: MatLike) {\n _x = a.x;\n _y = a.y;\n _z = a.z;\n let m = mat.m;\n out.x = _x * m[0] + _y * m[3] + _z * m[6];\n out.y = _x * m[1] + _y * m[4] + _z * m[7];\n out.z = _x * m[2] + _y * m[5] + _z * m[8];\n return out;\n }\n\n /**\n * !#zh 向量仿射变换\n * !#en Affine transformation vector\n * @method transformAffine\n * @typescript\n * transformAffine(out: Out, v: VecLike, mat: MatLike): Out\n * @static\n */\n static transformAffine\n (out: Out, v: VecLike, mat: MatLike) {\n _x = v.x;\n _y = v.y;\n _z = v.z;\n let m = mat.m;\n out.x = m[0] * _x + m[1] * _y + m[2] * _z + m[3];\n out.y = m[4] * _x + m[5] * _y + m[6] * _z + m[7];\n out.x = m[8] * _x + m[9] * _y + m[10] * _z + m[11];\n return out;\n }\n\n /**\n * !#zh 向量四元数乘法\n * !#en Vector quaternion multiplication\n * @method transformQuat\n * @typescript\n * transformQuat (out: Out, a: VecLike, q: QuatLike): Out\n * @static\n */\n static transformQuat (out: Out, a: VecLike, q: QuatLike) {\n // benchmarks: http://jsperf.com/quaternion-transform-Vec3-implementations\n\n // calculate quat * vec\n const ix = q.w * a.x + q.y * a.z - q.z * a.y;\n const iy = q.w * a.y + q.z * a.x - q.x * a.z;\n const iz = q.w * a.z + q.x * a.y - q.y * a.x;\n const iw = -q.x * a.x - q.y * a.y - q.z * a.z;\n\n // calculate result * inverse quat\n out.x = ix * q.w + iw * -q.x + iy * -q.z - iz * -q.y;\n out.y = iy * q.w + iw * -q.y + iz * -q.x - ix * -q.z;\n out.z = iz * q.w + iw * -q.z + ix * -q.y - iy * -q.x;\n return out;\n }\n\n /**\n * !#zh 以缩放 -> 旋转 -> 平移顺序变换向量\n * !#en To scale -> rotation -> transformation vector sequence translation\n * @method transformQuat\n * @typescript\n * transformRTS(out: Out, a: VecLike, r: QuatLike, t: VecLike, s: VecLike): Out\n * @static\n */\n static transformRTS (\n out: Out, a: VecLike, r: QuatLike, t: VecLike, s: VecLike) {\n const x = a.x * s.x;\n const y = a.y * s.y;\n const z = a.z * s.z;\n const ix = r.w * x + r.y * z - r.z * y;\n const iy = r.w * y + r.z * x - r.x * z;\n const iz = r.w * z + r.x * y - r.y * x;\n const iw = -r.x * x - r.y * y - r.z * z;\n out.x = ix * r.w + iw * -r.x + iy * -r.z - iz * -r.y + t.x;\n out.y = iy * r.w + iw * -r.y + iz * -r.x - ix * -r.z + t.y;\n out.z = iz * r.w + iw * -r.z + ix * -r.y - iy * -r.x + t.z;\n return out;\n }\n\n /**\n * !#zh 以平移 -> 旋转 -> 缩放顺序逆变换向量\n * !#en Translational -> rotation -> Zoom inverse transformation vector sequence\n * @method transformInverseRTS\n * @typescript\n * transformInverseRTS(out: Out, a: VecLike, r: QuatLike, t: VecLike, s: VecLike): Out\n * @static\n */\n static transformInverseRTS (\n out: Out, a: VecLike, r: QuatLike, t: VecLike, s: VecLike) {\n const x = a.x - t.x;\n const y = a.y - t.y;\n const z = a.z - t.z;\n const ix = r.w * x - r.y * z + r.z * y;\n const iy = r.w * y - r.z * x + r.x * z;\n const iz = r.w * z - r.x * y + r.y * x;\n const iw = r.x * x + r.y * y + r.z * z;\n out.x = (ix * r.w + iw * r.x + iy * r.z - iz * r.y) / s.x;\n out.y = (iy * r.w + iw * r.y + iz * r.x - ix * r.z) / s.y;\n out.z = (iz * r.w + iw * r.z + ix * r.y - iy * r.x) / s.z;\n return out;\n }\n\n /**\n * !#zh 绕 X 轴旋转向量指定弧度\n * !#en Rotation vector specified angle about the X axis\n * @method rotateX\n * @typescript\n * rotateX (out: Out, v: Out, o: Out, a: number): Out\n * @param v 待旋转向量\n * @param o 旋转中心\n * @param a 旋转弧度\n * @static\n */\n static rotateX (out: Out, v: Out, o: Out, a: number) {\n // Translate point to the origin\n _x = v.x - o.x;\n _y = v.y - o.y;\n _z = v.z - o.z;\n\n // perform rotation\n const cos = Math.cos(a);\n const sin = Math.sin(a);\n const rx = _x;\n const ry = _y * cos - _z * sin;\n const rz = _y * sin + _z * cos;\n\n // translate to correct position\n out.x = rx + o.x;\n out.y = ry + o.y;\n out.z = rz + o.z;\n\n return out;\n }\n\n /**\n * !#zh 绕 Y 轴旋转向量指定弧度\n * !#en Rotation vector specified angle around the Y axis\n * @method rotateY\n * @typescript\n * rotateY (out: Out, v: Out, o: Out, a: number): Out\n * @param v 待旋转向量\n * @param o 旋转中心\n * @param a 旋转弧度\n * @static\n */\n static rotateY (out: Out, v: Out, o: Out, a: number) {\n // Translate point to the origin\n _x = v.x - o.x;\n _y = v.y - o.y;\n _z = v.z - o.z;\n\n // perform rotation\n const cos = Math.cos(a);\n const sin = Math.sin(a);\n const rx = _z * sin + _x * cos;\n const ry = _y;\n const rz = _z * cos - _x * sin;\n\n // translate to correct position\n out.x = rx + o.x;\n out.y = ry + o.y;\n out.z = rz + o.z;\n\n return out;\n }\n\n /**\n * !#zh 绕 Z 轴旋转向量指定弧度\n * !#en Around the Z axis specified angle vector\n * @method rotateZ\n * @typescript\n * rotateZ (out: Out, v: Out, o: Out, a: number): Out\n * @param v 待旋转向量\n * @param o 旋转中心\n * @param a 旋转弧度\n * @static\n */\n static rotateZ (out: Out, v: Out, o: Out, a: number) {\n // Translate point to the origin\n _x = v.x - o.x;\n _y = v.y - o.y;\n _z = v.z - o.z;\n\n // perform rotation\n const cos = Math.cos(a);\n const sin = Math.sin(a);\n const rx = _x * cos - _y * sin;\n const ry = _x * sin + _y * cos;\n const rz = _z;\n\n // translate to correct position\n out.x = rx + o.x;\n out.y = ry + o.y;\n out.z = rz + o.z;\n\n return out;\n }\n\n /**\n * !#zh 向量等价判断\n * !#en Equivalent vectors Analyzing\n * @method strictEquals\n * @typescript\n * strictEquals (a: Out, b: Out): boolean\n * @static\n */\n static strictEquals (a: Out, b: Out) {\n return a.x === b.x && a.y === b.y && a.z === b.z;\n }\n\n /**\n * !#zh 排除浮点数误差的向量近似等价判断\n * !#en Negative error vector floating point approximately equivalent Analyzing\n * @method equals\n * @typescript\n * equals (a: Out, b: Out, epsilon?: number): boolean\n * @static\n */\n static equals (a: Out, b: Out, epsilon = EPSILON) {\n const { x: a0, y: a1, z: a2 } = a;\n const { x: b0, y: b1, z: b2 } = b;\n return (\n Math.abs(a0 - b0) <=\n epsilon * Math.max(1.0, Math.abs(a0), Math.abs(b0)) &&\n Math.abs(a1 - b1) <=\n epsilon * Math.max(1.0, Math.abs(a1), Math.abs(b1)) &&\n Math.abs(a2 - b2) <=\n epsilon * Math.max(1.0, Math.abs(a2), Math.abs(b2))\n );\n }\n\n /**\n * !#zh 求两向量夹角弧度\n * !#en Radian angle between two vectors seek\n * @method angle\n * @typescript\n * angle (a: Out, b: Out): number\n * @static\n */\n static angle (a: Out, b: Out) {\n Vec3.normalize(v3_1, a);\n Vec3.normalize(v3_2, b);\n const cosine = Vec3.dot(v3_1, v3_2);\n if (cosine > 1.0) {\n return 0;\n }\n if (cosine < -1.0) {\n return Math.PI;\n }\n return Math.acos(cosine);\n }\n\n /**\n * !#zh 计算向量在指定平面上的投影\n * !#en Calculating a projection vector in the specified plane\n * @method projectOnPlane\n * @typescript\n * projectOnPlane (out: Out, a: Out, n: Out): Out\n * @param a 待投影向量\n * @param n 指定平面的法线\n * @static\n */\n static projectOnPlane (out: Out, a: Out, n: Out) {\n return Vec3.subtract(out, a, Vec3.project(out, a, n));\n }\n\n /**\n * !#zh 计算向量在指定向量上的投影\n * !#en Projection vector calculated in the vector designated\n * @method project\n * @typescript\n * project (out: Out, a: Out, b: Out): Out\n * @param a 待投影向量\n * @param n 目标向量\n * @static\n */\n static project (out: Out, a: Out, b: Out) {\n const sqrLen = Vec3.lengthSqr(b);\n if (sqrLen < 0.000001) {\n return Vec3.set(out, 0, 0, 0);\n } else {\n return Vec3.multiplyScalar(out, b, Vec3.dot(a, b) / sqrLen);\n }\n }\n\n /**\n * !#zh 向量转数组\n * !#en Vector transfer array\n * @method toArray\n * @typescript\n * toArray > (out: Out, v: IVec3Like, ofs?: number): Out\n * @param ofs 数组起始偏移量\n * @static\n */\n static toArray > (out: Out, v: IVec3Like, ofs = 0) {\n out[ofs + 0] = v.x;\n out[ofs + 1] = v.y;\n out[ofs + 2] = v.z;\n\n return out;\n }\n\n /**\n * !#zh 数组转向量\n * !#en Array steering amount\n * @method fromArray\n * @typescript\n * fromArray (out: Out, arr: IWritableArrayLike, ofs?: number): Out\n * @param ofs 数组起始偏移量\n * @static\n */\n static fromArray (out: Out, arr: IWritableArrayLike, ofs = 0) {\n out.x = arr[ofs + 0];\n out.y = arr[ofs + 1];\n out.z = arr[ofs + 2];\n return out;\n }\n\n\n /**\n * @property {Number} x\n */\n x: number;\n /**\n * @property {Number} y\n */\n y: number;\n /**\n * @property {Number} z\n */\n z: number;\n\n\n /**\n * !#en\n * Constructor\n * see {{#crossLink \"cc/vec3:method\"}}cc.v3{{/crossLink}}\n * !#zh\n * 构造函数,可查看 {{#crossLink \"cc/vec3:method\"}}cc.v3{{/crossLink}}\n * @method constructor\n * @param {Vec3|number} [x=0]\n * @param {number} [y=0]\n * @param {number} [z=0]\n */\n constructor (x: Vec3 | number = 0, y: number = 0, z: number = 0) {\n super();\n if (x && typeof x === 'object') {\n this.x = x.x;\n this.y = x.y;\n this.z = x.z;\n }\n else {\n this.x = x as number;\n this.y = y;\n this.z = z;\n }\n }\n\n /**\n * !#en clone a Vec3 value\n * !#zh 克隆一个 Vec3 值\n * @method clone\n * @return {Vec3}\n */\n clone (): Vec3 {\n return new Vec3(this.x, this.y, this.z);\n }\n\n /**\n * !#en Set the current vector value with the given vector.\n * !#zh 用另一个向量设置当前的向量对象值。\n * @method set\n * @param {Vec3} newValue - !#en new value to set. !#zh 要设置的新值\n * @return {Vec3} returns this\n * @chainable\n */\n set (newValue: Vec3): Vec3 {\n this.x = newValue.x;\n this.y = newValue.y;\n this.z = newValue.z;\n return this;\n }\n\n /**\n * !#en Check whether the vector equals another one\n * !#zh 当前的向量是否与指定的向量相等。\n * @method equals\n * @param {Vec3} other\n * @return {Boolean}\n */\n equals (other: Vec3): boolean {\n return other && this.x === other.x && this.y === other.y && this.z === other.z;\n }\n\n\n /**\n * !#en Check whether two vector equal with some degree of variance.\n * !#zh\n * 近似判断两个点是否相等。
\n * 判断 2 个向量是否在指定数值的范围之内,如果在则返回 true,反之则返回 false。\n * @method fuzzyEquals\n * @param {Vec3} other\n * @param {Number} variance\n * @return {Boolean}\n */\n fuzzyEquals (other: Vec3, variance: number): boolean {\n if (this.x - variance <= other.x && other.x <= this.x + variance) {\n if (this.y - variance <= other.y && other.y <= this.y + variance) {\n if (this.z - variance <= other.z && other.z <= this.z + variance)\n return true;\n }\n }\n return false;\n }\n\n /**\n * !#en Transform to string with vector informations\n * !#zh 转换为方便阅读的字符串。\n * @method toString\n * @return {string}\n */\n toString (): string {\n return \"(\" +\n this.x.toFixed(2) + \", \" +\n this.y.toFixed(2) + \", \" +\n this.z.toFixed(2) + \")\"\n ;\n }\n\n /**\n * !#en Calculate linear interpolation result between this vector and another one with given ratio\n * !#zh 线性插值。\n * @method lerp\n * @param {Vec3} to\n * @param {number} ratio - the interpolation coefficient\n * @param {Vec3} [out] - optional, the receiving vector, you can pass the same vec3 to save result to itself, if not provided, a new vec3 will be created\n * @return {Vec3}\n */\n lerp (to: Vec3, ratio: number, out?: Vec3): Vec3 {\n out = out || new Vec3();\n Vec3.lerp(out, this, to, ratio);\n return out;\n }\n\n /**\n * !#en Clamp the vector between from float and to float.\n * !#zh\n * 返回指定限制区域后的向量。
\n * 向量大于 max_inclusive 则返回 max_inclusive。
\n * 向量小于 min_inclusive 则返回 min_inclusive。
\n * 否则返回自身。\n * @method clampf\n * @param {Vec3} min_inclusive\n * @param {Vec3} max_inclusive\n * @return {Vec3}\n */\n clampf (min_inclusive: Vec3, max_inclusive: Vec3): Vec3 {\n this.x = misc.clampf(this.x, min_inclusive.x, max_inclusive.x);\n this.y = misc.clampf(this.y, min_inclusive.y, max_inclusive.y);\n this.z = misc.clampf(this.z, min_inclusive.z, max_inclusive.z);\n return this;\n }\n\n /**\n * !#en Adds this vector. If you want to save result to another vector, use add() instead.\n * !#zh 向量加法。如果你想保存结果到另一个向量,使用 add() 代替。\n * @method addSelf\n * @param {Vec3} vector\n * @return {Vec3} returns this\n * @chainable\n */\n addSelf (vector: Vec3): this {\n this.x += vector.x;\n this.y += vector.y;\n this.z += vector.z;\n return this;\n }\n\n /**\n * !#en Adds two vectors, and returns the new result.\n * !#zh 向量加法,并返回新结果。\n * @method add\n * @param {Vec3} vector\n * @param {Vec3} [out] - optional, the receiving vector, you can pass the same vec3 to save result to itself, if not provided, a new vec3 will be created\n * @return {Vec3} the result\n */\n add (vector: Vec3, out?: Vec3): Vec3 {\n out = out || new Vec3();\n out.x = this.x + vector.x;\n out.y = this.y + vector.y;\n out.z = this.z + vector.z;\n return out;\n }\n\n /**\n * !#en Subtracts one vector from this.\n * !#zh 向量减法。\n * @method subtract\n * @param {Vec3} vector\n * @return {Vec3} returns this\n * @chainable\n */\n subtract (vector: Vec3): Vec3 {\n this.x -= vector.x;\n this.y -= vector.y;\n this.z -= vector.z;\n return this;\n }\n\n /**\n * !#en Multiplies this by a number.\n * !#zh 缩放当前向量。\n * @method multiplyScalar\n * @param {number} num\n * @return {Vec3} returns this\n * @chainable\n */\n multiplyScalar (num: number): Vec3 {\n this.x *= num;\n this.y *= num;\n this.z *= num;\n return this;\n }\n\n /**\n * !#en Multiplies two vectors.\n * !#zh 分量相乘。\n * @method multiply\n * @param {Vec3} vector\n * @return {Vec3} returns this\n * @chainable\n */\n multiply (vector: Vec3): Vec3 {\n this.x *= vector.x;\n this.y *= vector.y;\n this.z *= vector.z;\n return this;\n }\n\n /**\n * !#en Divides by a number.\n * !#zh 向量除法。\n * @method divide\n * @param {number} num\n * @return {Vec3} returns this\n * @chainable\n */\n divide (num: number): Vec3 {\n this.x /= num;\n this.y /= num;\n this.z /= num;\n return this;\n }\n\n /**\n * !#en Negates the components.\n * !#zh 向量取反。\n * @method negate\n * @return {Vec3} returns this\n * @chainable\n */\n negate (): this {\n this.x = -this.x;\n this.y = -this.y;\n this.z = -this.z;\n return this;\n }\n\n /**\n * !#en Dot product\n * !#zh 当前向量与指定向量进行点乘。\n * @method dot\n * @param {Vec3} [vector]\n * @return {number} the result\n */\n dot (vector: Vec3): number {\n return this.x * vector.x + this.y * vector.y + this.z * vector.z;\n }\n\n /**\n * !#en Cross product\n * !#zh 当前向量与指定向量进行叉乘。\n * @method cross\n * @param {Vec3} vector\n * @param {Vec3} [out]\n * @return {Vec3} the result\n */\n cross (vector: Vec3, out?: Vec3): Vec3 {\n out = out || new Vec3();\n Vec3.cross(out, this, vector)\n return out;\n }\n\n /**\n * !#en Returns the length of this vector.\n * !#zh 返回该向量的长度。\n * @method len\n * @return {number} the result\n * @example\n * var v = cc.v3(10, 10, 10);\n * v.len(); // return 17.320508075688775;\n */\n len (): number {\n return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);\n }\n\n /**\n * !#en Returns the squared length of this vector.\n * !#zh 返回该向量的长度平方。\n * @method lengthSqr\n * @return {number} the result\n */\n lengthSqr (): number {\n return this.x * this.x + this.y * this.y + this.z * this.z;\n }\n\n /**\n * !#en Make the length of this vector to 1.\n * !#zh 向量归一化,让这个向量的长度为 1。\n * @method normalizeSelf\n * @return {Vec3} returns this\n * @chainable\n */\n normalizeSelf (): Vec3 {\n Vec3.normalize(this, this);\n return this;\n };\n\n /**\n * !#en\n * Returns this vector with a magnitude of 1.
\n *
\n * Note that the current vector is unchanged and a new normalized vector is returned. If you want to normalize the current vector, use normalizeSelf function.\n * !#zh\n * 返回归一化后的向量。
\n *
\n * 注意,当前向量不变,并返回一个新的归一化向量。如果你想来归一化当前向量,可使用 normalizeSelf 函数。\n * @method normalize\n * @param {Vec3} [out] - optional, the receiving vector, you can pass the same vec3 to save result to itself, if not provided, a new vec3 will be created\n * @return {Vec3} result\n */\n normalize (out?: Vec3): Vec3 {\n out = out || new Vec3();\n Vec3.normalize(out, this);\n return out;\n }\n\n /**\n * Transforms the vec3 with a mat4. 4th vector component is implicitly '1'\n * @method transformMat4\n * @param {Mat4} m matrix to transform with\n * @param {Vec3} [out] the receiving vector, you can pass the same vec3 to save result to itself, if not provided, a new vec3 will be created\n * @returns {Vec3} out\n */\n transformMat4 (m: Mat4, out?: Vec3): Vec3 {\n out = out || new Vec3();\n Vec3.transformMat4(out, this, m);\n return out;\n }\n\n /**\n * Returns the maximum value in x, y, and z\n * @method maxAxis\n * @returns {number}\n */\n maxAxis (): number {\n return Math.max(this.x, this.y, this.z);\n }\n\n /**\n * !#en Get angle in radian between this and vector.\n * !#zh 夹角的弧度。\n * @method angle\n * @param {Vec3} vector\n * @return {number} from 0 to Math.PI\n */\n angle = Vec2.prototype.angle\n /**\n * !#en Calculates the projection of the current vector over the given vector.\n * !#zh 返回当前向量在指定 vector 向量上的投影向量。\n * @method project\n * @param {Vec3} vector\n * @return {Vec3}\n * @example\n * var v1 = cc.v3(20, 20, 20);\n * var v2 = cc.v3(5, 5, 5);\n * v1.project(v2); // Vec3 {x: 20, y: 20, z: 20};\n */\n project = Vec2.prototype.project\n // Compatible with the vec2 API\n\n /**\n * !#en Get angle in radian between this and vector with direction.
\n * In order to compatible with the vec2 API.\n * !#zh 带方向的夹角的弧度。该方法仅用做兼容 2D 计算。\n * @method signAngle\n * @param {Vec3 | Vec2} vector\n * @return {number} from -MathPI to Math.PI\n * @deprecated\n */\n signAngle (vector) {\n cc.warnID(1408, 'vec3.signAngle', 'v2.1', 'cc.v2(selfVector).signAngle(vector)');\n let vec1 = new Vec2(this.x, this.y);\n let vec2 = new Vec2(vector.x, vector.y);\n return vec1.signAngle(vec2);\n }\n\n /**\n * !#en rotate. In order to compatible with the vec2 API.\n * !#zh 返回旋转给定弧度后的新向量。该方法仅用做兼容 2D 计算。\n * @method rotate\n * @param {number} radians\n * @param {Vec3} [out] - optional, the receiving vector, you can pass the same vec2 to save result to itself, if not provided, a new vec2 will be created\n * @return {Vec2 | Vec3} if the 'out' value is a vec3 you will get a Vec3 return.\n * @deprecated\n */\n rotate (radians, out) {\n cc.warnID(1408, 'vec3.rotate', 'v2.1', 'cc.v2(selfVector).rotate(radians, out)');\n return Vec2.prototype.rotate.call(this, radians, out);\n }\n\n /**\n * !#en rotate self. In order to compatible with the vec2 API.\n * !#zh 按指定弧度旋转向量。该方法仅用做兼容 2D 计算。\n * @method rotateSelf\n * @param {number} radians\n * @return {Vec3} returns this\n * @chainable\n * @deprecated\n */\n rotateSelf (radians) {\n cc.warnID(1408, 'vec3.rotateSelf', 'v2.1', 'cc.v2(selfVector).rotateSelf(radians)');\n return Vec2.prototype.rotateSelf.call(this, radians);\n }\n}\n\nconst v3_1 = new Vec3();\nconst v3_2 = new Vec3();\n\nCCClass.fastDefine('cc.Vec3', Vec3, { x: 0, y: 0, z: 0 });\n\n/**\n * @module cc\n */\n\n/**\n * !#en The convenience method to create a new {{#crossLink \"Vec3\"}}cc.Vec3{{/crossLink}}.\n * !#zh 通过该简便的函数进行创建 {{#crossLink \"Vec3\"}}cc.Vec3{{/crossLink}} 对象。\n * @method v3\n * @param {Number|Object} [x=0]\n * @param {Number} [y=0]\n * @param {Number} [z=0]\n * @return {Vec3}\n * @example\n * var v1 = cc.v3();\n * var v2 = cc.v3(0, 0, 0);\n * var v3 = cc.v3(v2);\n * var v4 = cc.v3({x: 100, y: 100, z: 0});\n */\ncc.v3 = function v3 (x, y, z) {\n return new Vec3(x, y, z);\n};\n\ncc.Vec3 = Vec3;\n","/*\n Copyright (c) 2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos.com\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n*/\n\nimport CCClass from '../platform/CCClass';\nimport ValueType from './value-type';\nimport Mat4 from './mat4';\nimport { clamp, EPSILON, random } from './utils';\n\nlet _x: number = 0.0;\nlet _y: number = 0.0;\nlet _z: number = 0.0;\nlet _w: number = 0.0;\n\n/**\n * !#en Representation of 3D vectors and points.\n * !#zh 表示 3D 向量和坐标\n *\n * @class Vec4\n * @extends ValueType\n */\nexport default class Vec4 extends ValueType {\n // deprecated\n public static sub = Vec4.subtract;\n public static mul = Vec4.multiply;\n public static div = Vec4.divide;\n public static scale = Vec4.multiplyScalar;\n public static mag = Vec4.len;\n public static squaredMagnitude = Vec4.lengthSqr;\n mag = Vec4.prototype.len;\n magSqr = Vec4.prototype.lengthSqr;\n /**\n * !#en Subtracts one vector from this. If you want to save result to another vector, use sub() instead.\n * !#zh 向量减法。如果你想保存结果到另一个向量,可使用 sub() 代替。\n * @method subSelf\n * @param {Vec4} vector\n * @return {Vec4} returns this\n * @chainable\n */\n subSelf = Vec4.prototype.subtract;\n /**\n * !#en Subtracts one vector from this, and returns the new result.\n * !#zh 向量减法,并返回新结果。\n * @method sub\n * @param {Vec4} vector\n * @param {Vec4} [out] - optional, the receiving vector, you can pass the same vec4 to save result to itself, if not provided, a new vec4 will be created\n * @return {Vec4} the result\n */\n sub (vector: Vec4, out?: Vec4) {\n return Vec4.subtract(out || new Vec4(), this, vector);\n }\n /**\n * !#en Multiplies this by a number. If you want to save result to another vector, use mul() instead.\n * !#zh 缩放当前向量。如果你想结果保存到另一个向量,可使用 mul() 代替。\n * @method mulSelf\n * @param {number} num\n * @return {Vec4} returns this\n * @chainable\n */\n mulSelf = Vec4.prototype.multiplyScalar;\n /**\n * !#en Multiplies by a number, and returns the new result.\n * !#zh 缩放向量,并返回新结果。\n * @method mul\n * @param {number} num\n * @param {Vec4} [out] - optional, the receiving vector, you can pass the same vec4 to save result to itself, if not provided, a new vec4 will be created\n * @return {Vec4} the result\n */\n mul (num: number, out?: Vec4) {\n return Vec4.multiplyScalar(out || new Vec4(), this, num);\n }\n /**\n * !#en Divides by a number. If you want to save result to another vector, use div() instead.\n * !#zh 向量除法。如果你想结果保存到另一个向量,可使用 div() 代替。\n * @method divSelf\n * @param {number} num\n * @return {Vec4} returns this\n * @chainable\n */\n divSelf = Vec4.prototype.divide;\n /**\n * !#en Divides by a number, and returns the new result.\n * !#zh 向量除法,并返回新的结果。\n * @method div\n * @param {number} num\n * @param {Vec4} [out] - optional, the receiving vector, you can pass the same vec4 to save result to itself, if not provided, a new vec4 will be created\n * @return {Vec4} the result\n */\n div (num: number, out?: Vec4): Vec4 {\n return Vec4.multiplyScalar(out || new Vec4(), this, 1/num);\n }\n /**\n * !#en Multiplies two vectors.\n * !#zh 分量相乘。\n * @method scaleSelf\n * @param {Vec4} vector\n * @return {Vec4} returns this\n * @chainable\n */\n scaleSelf = Vec4.prototype.multiply;\n /**\n * !#en Multiplies two vectors, and returns the new result.\n * !#zh 分量相乘,并返回新的结果。\n * @method scale\n * @param {Vec4} vector\n * @param {Vec4} [out] - optional, the receiving vector, you can pass the same vec4 to save result to itself, if not provided, a new vec4 will be created\n * @return {Vec4} the result\n */\n scale (vector: Vec4, out?: Vec4) {\n return Vec4.multiply(out || new Vec4(), this, vector);\n }\n /**\n * !#en Negates the components. If you want to save result to another vector, use neg() instead.\n * !#zh 向量取反。如果你想结果保存到另一个向量,可使用 neg() 代替。\n * @method negSelf\n * @return {Vec4} returns this\n * @chainable\n */\n negSelf = Vec4.prototype.negate;\n /**\n * !#en Negates the components, and returns the new result.\n * !#zh 返回取反后的新向量。\n * @method neg\n * @param {Vec4} [out] - optional, the receiving vector, you can pass the same vec4 to save result to itself, if not provided, a new vec4 will be created\n * @return {Vec4} the result\n */\n neg (out?: Vec4) {\n return Vec4.negate(out || new Vec4(), this);\n }\n\n public static get ZERO () { return new Vec4(0, 0, 0, 0); }\n public static readonly ZERO_R = Vec4.ZERO;\n\n public static get ONE () { return new Vec4(1, 1, 1, 1); }\n public static readonly ONE_R = Vec4.ONE;\n\n public static get NEG_ONE () { return new Vec4(-1, -1, -1, -1); }\n public static readonly NEG_ONE_R = Vec4.NEG_ONE;\n\n /**\n * !#zh 获得指定向量的拷贝\n * !#en Obtaining copy vectors designated\n * @method clone\n * @typescript\n * clone (a: Out): Vec4\n * @static\n */\n public static clone (a: Out) {\n return new Vec4(a.x, a.y, a.z, a.w);\n }\n\n /**\n * !#zh 复制目标向量\n * !#en Copy the target vector\n * @method copy\n * @typescript\n * copy (out: Out, a: Out): Out\n * @static\n */\n public static copy (out: Out, a: Out) {\n out.x = a.x;\n out.y = a.y;\n out.z = a.z;\n out.w = a.w;\n return out;\n }\n\n /**\n * !#zh 设置向量值\n * !#en Set to value\n * @method set\n * @typescript\n * set (out: Out, x: number, y: number, z: number, w: number): Out\n * @static\n */\n public static set (out: Out, x: number, y: number, z: number, w: number) {\n out.x = x;\n out.y = y;\n out.z = z;\n out.w = w;\n return out;\n }\n\n /**\n * !#zh 逐元素向量加法\n * !#en Element-wise vector addition\n * @method add\n * @typescript\n * add (out: Out, a: Out, b: Out): Out\n * @static\n */\n public static add (out: Out, a: Out, b: Out) {\n out.x = a.x + b.x;\n out.y = a.y + b.y;\n out.z = a.z + b.z;\n out.w = a.w + b.w;\n return out;\n }\n\n /**\n * !#zh 逐元素向量减法\n * !#en Element-wise vector subtraction\n * @method subtract\n * @typescript\n * subtract (out: Out, a: Out, b: Out): Out\n * @static\n */\n public static subtract (out: Out, a: Out, b: Out) {\n out.x = a.x - b.x;\n out.y = a.y - b.y;\n out.z = a.z - b.z;\n out.w = a.w - b.w;\n return out;\n }\n\n /**\n * !#zh 逐元素向量乘法\n * !#en Element-wise vector multiplication\n * @method multiply\n * @typescript\n * multiply (out: Out, a: Out, b: Out): Out\n * @static\n */\n public static multiply (out: Out, a: Out, b: Out) {\n out.x = a.x * b.x;\n out.y = a.y * b.y;\n out.z = a.z * b.z;\n out.w = a.w * b.w;\n return out;\n }\n\n /**\n * !#zh 逐元素向量除法\n * !#en Element-wise vector division\n * @method divide\n * @typescript\n * divide (out: Out, a: Out, b: Out): Out\n * @static\n */\n public static divide (out: Out, a: Out, b: Out) {\n out.x = a.x / b.x;\n out.y = a.y / b.y;\n out.z = a.z / b.z;\n out.w = a.w / b.w;\n return out;\n }\n\n /**\n * !#zh 逐元素向量向上取整\n * !#en Rounding up by elements of the vector\n * @method ceil\n * @typescript\n * ceil (out: Out, a: Out): Out\n * @static\n */\n public static ceil (out: Out, a: Out) {\n out.x = Math.ceil(a.x);\n out.y = Math.ceil(a.y);\n out.z = Math.ceil(a.z);\n out.w = Math.ceil(a.w);\n return out;\n }\n\n /**\n * !#zh 逐元素向量向下取整\n * !#en Element vector by rounding down\n * @method floor\n * @typescript\n * floor (out: Out, a: Out): Out\n * @static\n */\n public static floor (out: Out, a: Out) {\n out.x = Math.floor(a.x);\n out.y = Math.floor(a.y);\n out.z = Math.floor(a.z);\n out.w = Math.floor(a.w);\n return out;\n }\n\n /**\n * !#zh 逐元素向量最小值\n * !#en The minimum by-element vector\n * @method min\n * @typescript\n * min (out: Out, a: Out, b: Out): Out\n * @static\n */\n public static min (out: Out, a: Out, b: Out) {\n out.x = Math.min(a.x, b.x);\n out.y = Math.min(a.y, b.y);\n out.z = Math.min(a.z, b.z);\n out.w = Math.min(a.w, b.w);\n return out;\n }\n\n /**\n * !#zh 逐元素向量最大值\n * !#en The maximum value of the element-wise vector\n * @method max\n * @typescript\n * max (out: Out, a: Out, b: Out): Out\n * @static\n */\n public static max (out: Out, a: Out, b: Out) {\n out.x = Math.max(a.x, b.x);\n out.y = Math.max(a.y, b.y);\n out.z = Math.max(a.z, b.z);\n out.w = Math.max(a.w, b.w);\n return out;\n }\n\n /**\n * !#zh 逐元素向量四舍五入取整\n * !#en Element-wise vector of rounding to whole\n * @method round\n * @typescript\n * round (out: Out, a: Out): Out\n * @static\n */\n public static round (out: Out, a: Out) {\n out.x = Math.round(a.x);\n out.y = Math.round(a.y);\n out.z = Math.round(a.z);\n out.w = Math.round(a.w);\n return out;\n }\n\n /**\n * !#zh 向量标量乘法\n * !#en Vector scalar multiplication\n * @method multiplyScalar\n * @typescript\n * multiplyScalar (out: Out, a: Out, b: number): Out\n * @static\n */\n public static multiplyScalar (out: Out, a: Out, b: number) {\n out.x = a.x * b;\n out.y = a.y * b;\n out.z = a.z * b;\n out.w = a.w * b;\n return out;\n }\n\n /**\n * !#zh 逐元素向量乘加: A + B * scale\n * !#en Element-wise vector multiply add: A + B * scale\n * @method scaleAndAdd\n * @typescript\n * scaleAndAdd (out: Out, a: Out, b: Out, scale: number): Out\n * @static\n */\n public static scaleAndAdd (out: Out, a: Out, b: Out, scale: number) {\n out.x = a.x + (b.x * scale);\n out.y = a.y + (b.y * scale);\n out.z = a.z + (b.z * scale);\n out.w = a.w + (b.w * scale);\n return out;\n }\n\n /**\n * !#zh 求两向量的欧氏距离\n * !#en Seeking two vectors Euclidean distance\n * @method distance\n * @typescript\n * distance (a: Out, b: Out): number\n * @static\n */\n public static distance (a: Out, b: Out) {\n const x = b.x - a.x;\n const y = b.y - a.y;\n const z = b.z - a.z;\n const w = b.w - a.w;\n return Math.sqrt(x * x + y * y + z * z + w * w);\n }\n\n /**\n * !#zh 求两向量的欧氏距离平方\n * !#en Euclidean distance squared seeking two vectors\n * @method squaredDistance\n * @typescript\n * squaredDistance (a: Out, b: Out): number\n * @static\n */\n public static squaredDistance (a: Out, b: Out) {\n const x = b.x - a.x;\n const y = b.y - a.y;\n const z = b.z - a.z;\n const w = b.w - a.w;\n return x * x + y * y + z * z + w * w;\n }\n\n /**\n * !#zh 求向量长度\n * !#en Seeking vector length\n * @method len\n * @typescript\n * len (a: Out): number\n * @static\n */\n public static len (a: Out) {\n _x = a.x;\n _y = a.y;\n _z = a.z;\n _w = a.w;\n return Math.sqrt(_x * _x + _y * _y + _z * _z + _w * _w);\n }\n\n /**\n * !#zh 求向量长度平方\n * !#en Seeking squared vector length\n * @method lengthSqr\n * @typescript\n * lengthSqr (a: Out): number\n * @static\n */\n public static lengthSqr (a: Out) {\n _x = a.x;\n _y = a.y;\n _z = a.z;\n _w = a.w;\n return _x * _x + _y * _y + _z * _z + _w * _w;\n }\n\n /**\n * !#zh 逐元素向量取负\n * !#en By taking the negative elements of the vector\n * @method negate\n * @typescript\n * negate (out: Out, a: Out): Out\n * @static\n */\n public static negate (out: Out, a: Out) {\n out.x = -a.x;\n out.y = -a.y;\n out.z = -a.z;\n out.w = -a.w;\n return out;\n }\n\n /**\n * !#zh 逐元素向量取倒数,接近 0 时返回 Infinity\n * !#en Element vector by taking the inverse, return near 0 Infinity\n * @method inverse\n * @typescript\n * inverse (out: Out, a: Out): Out\n * @static\n */\n public static inverse (out: Out, a: Out) {\n out.x = 1.0 / a.x;\n out.y = 1.0 / a.y;\n out.z = 1.0 / a.z;\n out.w = 1.0 / a.w;\n return out;\n }\n\n /**\n * !#zh 逐元素向量取倒数,接近 0 时返回 0\n * !#en Element vector by taking the inverse, return near 0 0\n * @method inverseSafe\n * @typescript\n * inverseSafe (out: Out, a: Out): Out\n * @static\n */\n public static inverseSafe (out: Out, a: Out) {\n _x = a.x;\n _y = a.y;\n _z = a.z;\n _w = a.w;\n\n if (Math.abs(_x) < EPSILON) {\n out.x = 0;\n } else {\n out.x = 1.0 / _x;\n }\n\n if (Math.abs(_y) < EPSILON) {\n out.y = 0;\n } else {\n out.y = 1.0 / _y;\n }\n\n if (Math.abs(_z) < EPSILON) {\n out.z = 0;\n } else {\n out.z = 1.0 / _z;\n }\n\n if (Math.abs(_w) < EPSILON) {\n out.w = 0;\n } else {\n out.w = 1.0 / _w;\n }\n\n return out;\n }\n\n /**\n * !#zh 归一化向量\n * !#en Normalized vector\n * @method normalize\n * @typescript\n * normalize (out: Out, a: Out): Out\n * @static\n */\n public static normalize (out: Out, a: Out) {\n _x = a.x;\n _y = a.y;\n _z = a.z;\n _w = a.w;\n let len = _x * _x + _y * _y + _z * _z + _w * _w;\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n out.x = _x * len;\n out.y = _y * len;\n out.z = _z * len;\n out.w = _w * len;\n }\n return out;\n }\n\n /**\n * !#zh 向量点积(数量积)\n * !#en Vector dot product (scalar product)\n * @method dot\n * @typescript\n * dot (a: Out, b: Out): number\n * @static\n */\n public static dot (a: Out, b: Out) {\n return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w;\n }\n\n /**\n * !#zh 逐元素向量线性插值: A + t * (B - A)\n * !#en Vector element by element linear interpolation: A + t * (B - A)\n * @method lerp\n * @typescript\n * lerp (out: Out, a: Out, b: Out, t: number): Out\n * @static\n */\n public static lerp (out: Out, a: Out, b: Out, t: number) {\n out.x = a.x + t * (b.x - a.x);\n out.y = a.y + t * (b.y - a.y);\n out.z = a.z + t * (b.z - a.z);\n out.w = a.w + t * (b.w - a.w);\n return out;\n }\n\n /**\n * !#zh 生成一个在单位球体上均匀分布的随机向量\n * !#en Generates a uniformly distributed random vectors on the unit sphere\n * @method random\n * @typescript\n * random (out: Out, scale?: number): Out\n * @param scale 生成的向量长度\n * @static\n */\n public static random (out: Out, scale?: number) {\n scale = scale || 1.0;\n\n const phi = random() * 2.0 * Math.PI;\n const cosTheta = random() * 2 - 1;\n const sinTheta = Math.sqrt(1 - cosTheta * cosTheta);\n\n out.x = sinTheta * Math.cos(phi) * scale;\n out.y = sinTheta * Math.sin(phi) * scale;\n out.z = cosTheta * scale;\n out.w = 0;\n return out;\n }\n\n /**\n * !#zh 向量矩阵乘法\n * !#en Vector matrix multiplication\n * @method transformMat4\n * @typescript\n * transformMat4 (out: Out, a: Out, mat: MatLike): Out\n * @static\n */\n public static transformMat4 (out: Out, a: Out, mat: MatLike) {\n _x = a.x;\n _y = a.y;\n _z = a.z;\n _w = a.w;\n let m = mat.m;\n out.x = m[0] * _x + m[4] * _y + m[8] * _z + m[12] * _w;\n out.y = m[1] * _x + m[5] * _y + m[9] * _z + m[13] * _w;\n out.z = m[2] * _x + m[6] * _y + m[10] * _z + m[14] * _w;\n out.w = m[3] * _x + m[7] * _y + m[11] * _z + m[15] * _w;\n return out;\n }\n\n /**\n * !#zh 向量仿射变换\n * !#en Affine transformation vector\n * @method transformAffine\n * @typescript\n * transformAffine(out: Out, v: VecLike, mat: MatLike): Out\n * @static\n */\n public static transformAffine\n (out: Out, v: VecLike, mat: MatLike) {\n _x = v.x;\n _y = v.y;\n _z = v.z;\n _w = v.w;\n let m = mat.m;\n out.x = m[0] * _x + m[1] * _y + m[2] * _z + m[3] * _w;\n out.y = m[4] * _x + m[5] * _y + m[6] * _z + m[7] * _w;\n out.x = m[8] * _x + m[9] * _y + m[10] * _z + m[11] * _w;\n out.w = v.w;\n return out;\n }\n\n /**\n * !#zh 向量四元数乘法\n * !#en Vector quaternion multiplication\n * @method transformQuat\n * @typescript\n * transformQuat (out: Out, a: Out, q: QuatLike): Out\n * @static\n */\n public static transformQuat (out: Out, a: Out, q: QuatLike) {\n const { x, y, z } = a;\n\n _x = q.x;\n _y = q.y;\n _z = q.z;\n _w = q.w;\n\n // calculate quat * vec\n const ix = _w * x + _y * z - _z * y;\n const iy = _w * y + _z * x - _x * z;\n const iz = _w * z + _x * y - _y * x;\n const iw = -_x * x - _y * y - _z * z;\n\n // calculate result * inverse quat\n out.x = ix * _w + iw * -_x + iy * -_z - iz * -_y;\n out.y = iy * _w + iw * -_y + iz * -_x - ix * -_z;\n out.z = iz * _w + iw * -_z + ix * -_y - iy * -_x;\n out.w = a.w;\n return out;\n }\n\n /**\n * !#zh 向量等价判断\n * !#en Equivalent vectors Analyzing\n * @method strictEquals\n * @typescript\n * strictEquals (a: Out, b: Out): boolean\n * @static\n */\n public static strictEquals (a: Out, b: Out) {\n return a.x === b.x && a.y === b.y && a.z === b.z && a.w === b.w;\n }\n\n /**\n * !#zh 排除浮点数误差的向量近似等价判断\n * !#en Negative error vector floating point approximately equivalent Analyzing\n * @method equals\n * @typescript\n * equals (a: Out, b: Out, epsilon?: number): boolean\n * @static\n */\n public static equals (a: Out, b: Out, epsilon = EPSILON) {\n return (Math.abs(a.x - b.x) <= epsilon * Math.max(1.0, Math.abs(a.x), Math.abs(b.x)) &&\n Math.abs(a.y - b.y) <= epsilon * Math.max(1.0, Math.abs(a.y), Math.abs(b.y)) &&\n Math.abs(a.z - b.z) <= epsilon * Math.max(1.0, Math.abs(a.z), Math.abs(b.z)) &&\n Math.abs(a.w - b.w) <= epsilon * Math.max(1.0, Math.abs(a.w), Math.abs(b.w)));\n }\n\n /**\n * !#zh 向量转数组\n * !#en Vector transfer array\n * @method toArray\n * @typescript\n * toArray > (out: Out, v: IVec4Like, ofs?: number): Out\n * @param ofs 数组起始偏移量\n * @static\n */\n public static toArray > (out: Out, v: IVec4Like, ofs = 0) {\n out[ofs + 0] = v.x;\n out[ofs + 1] = v.y;\n out[ofs + 2] = v.z;\n out[ofs + 3] = v.w;\n return out;\n }\n\n /**\n * !#zh 数组转向量\n * !#en Array steering amount\n * @method fromArray\n * @typescript\n * fromArray (out: Out, arr: IWritableArrayLike, ofs?: number): Out\n * @param ofs 数组起始偏移量\n * @static\n */\n public static fromArray (out: Out, arr: IWritableArrayLike, ofs = 0) {\n out.x = arr[ofs + 0];\n out.y = arr[ofs + 1];\n out.z = arr[ofs + 2];\n out.w = arr[ofs + 3];\n return out;\n }\n\n /**\n * @property {Number} x\n */\n public x: number;\n\n /**\n * @property {Number} y\n */\n public y: number;\n\n /**\n * @property {Number} z\n */\n public z: number;\n\n /**\n * @property {Number} w\n */\n public w: number;\n\n /**\n * !#en\n * Constructor\n * see {{#crossLink \"cc/vec4:method\"}}cc.v4{{/crossLink}}\n * !#zh\n * 构造函数,可查看 {{#crossLink \"cc/vec4:method\"}}cc.v4{{/crossLink}}\n * @method constructor\n * @param {number} [x=0]\n * @param {number} [y=0]\n * @param {number} [z=0]\n * @param {number} [w=0]\n */\n constructor (x: number | Vec4 = 0, y: number = 0, z: number = 0, w: number = 0) {\n super();\n if (x && typeof x === 'object') {\n this.x = x.x;\n this.y = x.y;\n this.z = x.z;\n this.w = x.w;\n } else {\n this.x = x as number;\n this.y = y;\n this.z = z;\n this.w = w;\n }\n }\n\n /**\n * !#en clone a Vec4 value\n * !#zh 克隆一个 Vec4 值\n * @method clone\n * @return {Vec4}\n */\n public clone () {\n return new Vec4(this.x, this.y, this.z, this.w);\n }\n\n /**\n * !#en Set the current vector value with the given vector.\n * !#zh 用另一个向量设置当前的向量对象值。\n * @method set\n * @param {Vec4} newValue - !#en new value to set. !#zh 要设置的新值\n * @return {Vec4} returns this\n */\n public set (other: Vec4);\n\n public set (x?: number, y?: number, z?: number, w?: number);\n\n public set (x?: number | Vec4, y?: number, z?: number, w?: number) {\n if (x && typeof x === 'object') {\n this.x = x.x;\n this.y = x.y;\n this.z = x.z;\n this.w = x.w;\n } else {\n this.x = x as number || 0;\n this.y = y || 0;\n this.z = z || 0;\n this.w = w || 0;\n }\n return this;\n }\n\n /**\n * !#en Check whether the vector equals another one\n * !#zh 当前的向量是否与指定的向量相等。\n * @method equals\n * @param {Vec4} other\n * @param {number} [epsilon]\n * @return {Boolean}\n */\n public equals (other: Vec4, epsilon = EPSILON) {\n return (Math.abs(this.x - other.x) <= epsilon * Math.max(1.0, Math.abs(this.x), Math.abs(other.x)) &&\n Math.abs(this.y - other.y) <= epsilon * Math.max(1.0, Math.abs(this.y), Math.abs(other.y)) &&\n Math.abs(this.z - other.z) <= epsilon * Math.max(1.0, Math.abs(this.z), Math.abs(other.z)) &&\n Math.abs(this.w - other.w) <= epsilon * Math.max(1.0, Math.abs(this.w), Math.abs(other.w)));\n }\n\n /**\n * !#en Check whether the vector equals another one\n * !#zh 判断当前向量是否在误差范围内与指定分量的向量相等。\n * @method equals4f\n * @param {number} x - 相比较的向量的 x 分量。\n * @param {number} y - 相比较的向量的 y 分量。\n * @param {number} z - 相比较的向量的 z 分量。\n * @param {number} w - 相比较的向量的 w 分量。\n * @param {number} [epsilon] - 允许的误差,应为非负数。\n * @returns {Boolean} - 当两向量的各分量都在指定的误差范围内分别相等时,返回 `true`;否则返回 `false`。\n */\n public equals4f (x: number, y: number, z: number, w: number, epsilon = EPSILON) {\n return (Math.abs(this.x - x) <= epsilon * Math.max(1.0, Math.abs(this.x), Math.abs(x)) &&\n Math.abs(this.y - y) <= epsilon * Math.max(1.0, Math.abs(this.y), Math.abs(y)) &&\n Math.abs(this.z - z) <= epsilon * Math.max(1.0, Math.abs(this.z), Math.abs(z)) &&\n Math.abs(this.w - w) <= epsilon * Math.max(1.0, Math.abs(this.w), Math.abs(w)));\n }\n\n /**\n * !#en Check whether strict equals other Vec4\n * !#zh 判断当前向量是否与指定向量相等。两向量的各分量都分别相等时返回 `true`;否则返回 `false`。\n * @method strictEquals\n * @param {Vec4} other - 相比较的向量。\n * @returns {boolean}\n */\n public strictEquals (other: Vec4) {\n return this.x === other.x && this.y === other.y && this.z === other.z && this.w === other.w;\n }\n\n /**\n * !#en Check whether strict equals other Vec4\n * !#zh 判断当前向量是否与指定分量的向量相等。两向量的各分量都分别相等时返回 `true`;否则返回 `false`。\n * @method strictEquals4f\n * @param {number} x - 指定向量的 x 分量。\n * @param {number} y - 指定向量的 y 分量。\n * @param {number} z - 指定向量的 z 分量。\n * @param {number} w - 指定向量的 w 分量。\n * @returns {boolean}\n */\n public strictEquals4f (x: number, y: number, z: number, w: number) {\n return this.x === x && this.y === y && this.z === z && this.w === w;\n }\n\n /**\n * !#en Calculate linear interpolation result between this vector and another one with given ratio\n * !#zh 根据指定的插值比率,从当前向量到目标向量之间做插值。\n * @method lerp\n * @param {Vec4} to 目标向量。\n * @param {number} ratio 插值比率,范围为 [0,1]。\n * @returns {Vec4}\n */\n public lerp (to: Vec4, ratio: number) {\n _x = this.x;\n _y = this.y;\n _z = this.z;\n _w = this.w;\n this.x = _x + ratio * (to.x - _x);\n this.y = _y + ratio * (to.y - _y);\n this.z = _z + ratio * (to.z - _z);\n this.w = _w + ratio * (to.w - _w);\n return this;\n }\n\n /**\n * !#en Transform to string with vector informations\n * !#zh 返回当前向量的字符串表示。\n * @method toString\n * @returns {string} 当前向量的字符串表示。\n */\n public toString (): string {\n return `(${this.x.toFixed(2)}, ${this.y.toFixed(2)}, ${this.z.toFixed(2)}, ${this.w.toFixed(2)})`;\n }\n\n /**\n * !#en Clamp the vector between minInclusive and maxInclusive.\n * !#zh 设置当前向量的值,使其各个分量都处于指定的范围内。\n * @method clampf\n * @param {Vec4} minInclusive 每个分量都代表了对应分量允许的最小值。\n * @param {Vec4} maxInclusive 每个分量都代表了对应分量允许的最大值。\n * @returns {Vec4}\n */\n public clampf (minInclusive: Vec4, maxInclusive: Vec4) {\n this.x = clamp(this.x, minInclusive.x, maxInclusive.x);\n this.y = clamp(this.y, minInclusive.y, maxInclusive.y);\n this.z = clamp(this.z, minInclusive.z, maxInclusive.z);\n this.w = clamp(this.w, minInclusive.w, maxInclusive.w);\n return this;\n }\n\n /**\n * !#en Adds this vector. If you want to save result to another vector, use add() instead.\n * !#zh 向量加法。如果你想保存结果到另一个向量,使用 add() 代替。\n * @method addSelf\n * @param {Vec4} vector\n * @return {Vec4} returns this\n * @chainable\n */\n addSelf (vector: Vec4): this {\n this.x += vector.x;\n this.y += vector.y;\n this.z += vector.z;\n this.w += vector.w;\n return this;\n }\n\n /**\n * !#en Adds two vectors, and returns the new result.\n * !#zh 向量加法,并返回新结果。\n * @method add\n * @param {Vec4} vector\n * @param {Vec4} [out] - optional, the receiving vector, you can pass the same vec4 to save result to itself, if not provided, a new vec4 will be created\n * @return {Vec4} the result\n */\n add (vector: Vec4, out?: Vec4): Vec4 {\n out = out || new Vec4();\n out.x = this.x + vector.x;\n out.y = this.y + vector.y;\n out.z = this.z + vector.z;\n out.w = this.w + vector.w;\n return out;\n }\n\n /**\n * !#en Subtracts one vector from this, and returns the new result.\n * !#zh 向量减法,并返回新结果。\n * @method subtract\n * @param {Vec4} vector\n * @param {Vec4} [out] - optional, the receiving vector, you can pass the same vec4 to save result to itself, if not provided, a new vec4 will be created\n * @return {Vec4} the result\n */\n subtract (vector: Vec4, out?: Vec4): Vec4 {\n out = out || new Vec4();\n out.x = this.x - vector.x;\n out.y = this.y - vector.y;\n out.z = this.z - vector.z;\n out.w = this.w - vector.w;\n return out;\n }\n\n /**\n * !#en Multiplies this by a number.\n * !#zh 缩放当前向量。\n * @method multiplyScalar\n * @param {number} num\n * @return {Vec4} returns this\n * @chainable\n */\n multiplyScalar (num: number): this {\n this.x *= num;\n this.y *= num;\n this.z *= num;\n this.w *= num;\n return this;\n }\n\n /**\n * !#en Multiplies two vectors.\n * !#zh 分量相乘。\n * @method multiply\n * @param {Vec4} vector\n * @return {Vec4} returns this\n * @chainable\n */\n multiply (vector: Vec4): this {\n this.x *= vector.x;\n this.y *= vector.y;\n this.z *= vector.z;\n this.w *= vector.w;\n return this;\n }\n\n /**\n * !#en Divides by a number.\n * !#zh 向量除法。\n * @method divide\n * @param {number} num\n * @return {Vec4} returns this\n * @chainable\n */\n divide (num: number): this {\n this.x /= num;\n this.y /= num;\n this.z /= num;\n this.w /= num;\n return this;\n }\n\n /**\n * !#en Negates the components.\n * !#zh 向量取反\n * @method negate\n * @return {Vec4} returns this\n * @chainable\n */\n negate (): this {\n this.x = -this.x;\n this.y = -this.y;\n this.z = -this.z;\n this.w = -this.w;\n return this;\n }\n\n /**\n * !#en Dot product\n * !#zh 当前向量与指定向量进行点乘。\n * @method dot\n * @param {Vec4} [vector]\n * @return {number} the result\n */\n dot (vector: Vec4): number {\n return this.x * vector.x + this.y * vector.y + this.z * vector.z + this.w * vector.w;\n }\n\n /**\n * !#en Cross product\n * !#zh 当前向量与指定向量进行叉乘。\n * @method cross\n * @param {Vec4} vector\n * @param {Vec4} [out]\n * @return {Vec4} the result\n */\n cross (vector: Vec4, out?: Vec4): Vec4 {\n out = out || new Vec4();\n const { x: ax, y: ay, z: az } = this;\n const { x: bx, y: by, z: bz } = vector;\n\n out.x = ay * bz - az * by;\n out.y = az * bx - ax * bz;\n out.z = ax * by - ay * bx;\n return out;\n }\n\n /**\n * !#en Returns the length of this vector.\n * !#zh 返回该向量的长度。\n * @method len\n * @return {number} the result\n * @example\n * var v = cc.v4(10, 10);\n * v.len(); // return 14.142135623730951;\n */\n len (): number {\n let x = this.x,\n y = this.y,\n z = this.z,\n w = this.w;\n return Math.sqrt(x * x + y * y + z * z + w * w);\n }\n\n /**\n * !#en Returns the squared length of this vector.\n * !#zh 返回该向量的长度平方。\n * @method lengthSqr\n * @return {number} the result\n */\n lengthSqr (): number {\n let x = this.x,\n y = this.y,\n z = this.z,\n w = this.w;\n return x * x + y * y + z * z + w * w;\n }\n\n /**\n * !#en Make the length of this vector to 1.\n * !#zh 向量归一化,让这个向量的长度为 1。\n * @method normalizeSelf\n * @return {Vec4} returns this\n * @chainable\n */\n normalizeSelf () {\n this.normalize(this);\n return this;\n }\n\n /**\n * !#en\n * Returns this vector with a magnitude of 1.
\n *
\n * Note that the current vector is unchanged and a new normalized vector is returned. If you want to normalize the current vector, use normalizeSelf function.\n * !#zh\n * 返回归一化后的向量。
\n *
\n * 注意,当前向量不变,并返回一个新的归一化向量。如果你想来归一化当前向量,可使用 normalizeSelf 函数。\n * @method normalize\n * @param {Vec4} [out] - optional, the receiving vector, you can pass the same vec4 to save result to itself, if not provided, a new vec4 will be created\n * @return {Vec4} result\n */\n normalize (out?: Vec4): Vec4 {\n out = out || new Vec4();\n _x = this.x;\n _y = this.y;\n _z = this.z;\n _w = this.w;\n let len = _x * _x + _y * _y + _z * _z + _w * _w;\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n out.x = _x * len;\n out.y = _y * len;\n out.z = _z * len;\n out.w = _w * len;\n }\n return out;\n }\n\n /**\n * Transforms the vec4 with a mat4. 4th vector component is implicitly '1'\n * @method transformMat4\n * @param {Mat4} m matrix to transform with\n * @param {Vec4} [out] the receiving vector, you can pass the same vec4 to save result to itself, if not provided, a new vec4 will be created\n * @returns {Vec4} out\n */\n transformMat4 (matrix: Mat4, out: Vec4): Vec4 {\n out = out || new Vec4();\n _x = this.x;\n _y = this.y;\n _z = this.z;\n _w = this.w;\n let m = matrix.m;\n out.x = m[0] * _x + m[4] * _y + m[8] * _z + m[12] * _w;\n out.y = m[1] * _x + m[5] * _y + m[9] * _z + m[13] * _w;\n out.z = m[2] * _x + m[6] * _y + m[10] * _z + m[14] * _w;\n out.w = m[3] * _x + m[7] * _y + m[11] * _z + m[15] * _w;\n return out;\n }\n\n /**\n * Returns the maximum value in x, y, z, w.\n * @method maxAxis\n * @returns {number}\n */\n maxAxis (): number {\n return Math.max(this.x, this.y, this.z, this.w);\n }\n}\n\nCCClass.fastDefine('cc.Vec4', Vec4, { x: 0, y: 0, z: 0, w: 0 });\n\nexport function v4 (other: Vec4): Vec4;\nexport function v4 (x?: number, y?: number, z?: number, w?: number): Vec4;\n\nexport function v4 (x?: number | Vec4, y?: number, z?: number, w?: number) {\n return new Vec4(x as any, y, z, w);\n}\n\ncc.v4 = v4;\ncc.Vec4 = Vec4;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n\nvar js = cc.js;\n\nif (CC_DEBUG) {\n\n function deprecateEnum (obj, oldPath, newPath, hasTypePrefixBefore) {\n if (!CC_SUPPORT_JIT) {\n return;\n }\n hasTypePrefixBefore = hasTypePrefixBefore !== false;\n var enumDef = Function('return ' + newPath)();\n var entries = cc.Enum.getList(enumDef);\n var delimiter = hasTypePrefixBefore ? '_' : '.';\n for (var i = 0; i < entries.length; i++) {\n var entry = entries[i].name;\n var oldPropName;\n if (hasTypePrefixBefore) {\n var oldTypeName = oldPath.split('.').slice(-1)[0];\n oldPropName = oldTypeName + '_' + entry;\n }\n else {\n oldPropName = entry;\n }\n js.get(obj, oldPropName, function (entry) {\n cc.errorID(1400, oldPath + delimiter + entry, newPath + '.' + entry);\n return enumDef[entry];\n }.bind(null, entry));\n }\n }\n\n function markAsRemoved (ownerCtor, removedProps, ownerName) {\n if (!ownerCtor) {\n // 可能被裁剪了\n return;\n }\n ownerName = ownerName || js.getClassName(ownerCtor);\n removedProps.forEach(function (prop) {\n function error () {\n cc.errorID(1406, ownerName, prop);\n }\n js.getset(ownerCtor.prototype, prop, error, error);\n });\n }\n\n function markAsDeprecated (ownerCtor, deprecatedProps, ownerName) {\n if (!ownerCtor) {\n return;\n }\n ownerName = ownerName || js.getClassName(ownerCtor);\n let descriptors = Object.getOwnPropertyDescriptors(ownerCtor.prototype);\n deprecatedProps.forEach(function (prop) {\n let deprecatedProp = prop[0];\n let newProp = prop[1];\n let descriptor = descriptors[deprecatedProp];\n js.getset(ownerCtor.prototype, deprecatedProp, function () {\n cc.warnID(1400, `${ownerName}.${deprecatedProp}`, `${ownerName}.${newProp}`);\n return descriptor.get.call(this);\n }, function (v) {\n cc.warnID(1400, `${ownerName}.${deprecatedProp}`, `${ownerName}.${newProp}`);\n descriptor.set.call(this, v);\n });\n })\n }\n\n function markAsRemovedInObject (ownerObj, removedProps, ownerName) {\n if (!ownerObj) {\n // 可能被裁剪了\n return;\n }\n removedProps.forEach(function (prop) {\n function error () {\n cc.errorID(1406, ownerName, prop);\n }\n js.getset(ownerObj, prop, error);\n });\n }\n\n function provideClearError (owner, obj, ownerName) {\n if (!owner) {\n // 可能被裁剪了\n return;\n }\n var className = ownerName || cc.js.getClassName(owner);\n var Info = 'Sorry, ' + className + '.%s is removed, please use %s instead.';\n for (var prop in obj) {\n function define (prop, getset) {\n function accessor (newProp) {\n cc.error(Info, prop, newProp);\n }\n if (!Array.isArray(getset)) {\n getset = getset.split(',')\n .map(function (x) {\n return x.trim();\n });\n }\n try {\n js.getset(owner, prop, accessor.bind(null, getset[0]), getset[1] && accessor.bind(null, getset[1]));\n }\n catch (e) {}\n }\n var getset = obj[prop];\n if (prop[0] === '*') {\n // get set\n var etProp = prop.slice(1);\n define('g' + etProp, getset);\n define('s' + etProp, getset);\n }\n else {\n prop.split(',')\n .map(function (x) {\n return x.trim();\n })\n .forEach(function (x) {\n define(x, getset);\n });\n }\n }\n }\n\n function markFunctionWarning (ownerCtor, obj, ownerName) {\n if (!ownerCtor) {\n // 可能被裁剪了\n return;\n }\n ownerName = ownerName || js.getClassName(ownerCtor);\n for (var prop in obj) {\n (function(){\n var propName = prop;\n var originFunc = ownerCtor[propName];\n if (!originFunc) return;\n\n function warn () {\n cc.warn('Sorry, %s.%s is deprecated. Please use %s instead', ownerName, propName, obj[propName]);\n return originFunc.apply(this, arguments);\n }\n\n ownerCtor[propName] = warn;\n })();\n }\n }\n // remove cc.info\n js.get(cc, 'info', function () {\n cc.errorID(1400, 'cc.info', 'cc.log');\n return cc.log;\n });\n // cc.spriteFrameCache\n js.get(cc, \"spriteFrameCache\", function () {\n cc.errorID(1404);\n });\n\n // cc.vmath\n js.get(cc, 'vmath', function () {\n cc.warnID(1400, 'cc.vmath', 'cc.math');\n return cc.math;\n });\n js.get(cc.math, 'vec2', function () {\n cc.warnID(1400, 'cc.vmath.vec2', 'cc.Vec2');\n return cc.Vec2;\n })\n js.get(cc.math, 'vec3', function () {\n cc.warnID(1400, 'cc.vmath.vec3', 'cc.Vec3');\n return cc.Vec3;\n })\n js.get(cc.math, 'vec4', function () {\n cc.warnID(1400, 'cc.vmath.vec4', 'cc.Vec4');\n return cc.Vec4;\n })\n js.get(cc.math, 'mat4', function () {\n cc.warnID(1400, 'cc.vmath.mat4', 'cc.Mat4');\n return cc.Mat4;\n })\n js.get(cc.math, 'mat3', function () {\n cc.warnID(1400, 'cc.vmath.mat3', 'cc.Mat3');\n return cc.Mat3;\n })\n js.get(cc.math, 'quat', function () {\n cc.warnID(1400, 'cc.vmath.quat', 'cc.Quat');\n return cc.Quat;\n })\n\n // SpriteFrame\n js.get(cc.SpriteFrame.prototype, '_textureLoaded', function () {\n cc.errorID(1400, 'spriteFrame._textureLoaded', 'spriteFrame.textureLoaded()');\n return this.textureLoaded();\n });\n markAsRemoved(cc.SpriteFrame, [\n 'addLoadedEventListener'\n ]);\n markFunctionWarning(cc.Sprite.prototype, {\n setState: 'cc.Sprite.setMaterial',\n getState: 'cc.Sprite.getMaterial'\n }, 'cc.Sprite');\n\n js.get(cc.SpriteFrame.prototype, 'clearTexture', function () {\n cc.errorID(1406, 'cc.SpriteFrame', 'clearTexture');\n return function () {};\n });\n\n // cc.textureCache\n js.get(cc, 'textureCache', function () {\n cc.errorID(1406, 'cc', 'textureCache');\n });\n\n // Texture\n let Texture2D = cc.Texture2D;\n js.get(Texture2D.prototype, 'releaseTexture', function () {\n cc.errorID(1400, 'texture.releaseTexture()', 'texture.destroy()');\n return this.destroy;\n });\n\n js.get(Texture2D.prototype, 'getName', function () {\n cc.errorID(1400, 'texture.getName()', 'texture._glID');\n return function () {\n return this._glID || null;\n };\n });\n\n js.get(Texture2D.prototype, 'isLoaded', function () {\n cc.errorID(1400, 'texture.isLoaded function', 'texture.loaded property');\n return (function () {\n return this.loaded;\n });\n });\n\n js.get(Texture2D.prototype, 'setAntiAliasTexParameters', function () {\n cc.errorID(1400, 'texture.setAntiAliasTexParameters()', 'texture.setFilters(cc.Texture2D.Filter.LINEAR, cc.Texture2D.Filter.LINEAR)');\n return function () {\n this.setFilters(Texture2D.Filter.LINEAR, Texture2D.Filter.LINEAR);\n };\n });\n\n js.get(Texture2D.prototype, 'setAliasTexParameters', function () {\n cc.errorID(1400, 'texture.setAntiAliasTexParameters()', 'texture.setFilters(cc.Texture2D.Filter.NEAREST, cc.Texture2D.Filter.NEAREST)');\n return function () {\n this.setFilters(Texture2D.Filter.NEAREST, Texture2D.Filter.NEAREST);\n };\n });\n\n // cc.macro\n markAsRemovedInObject(cc.macro, [\n 'ENABLE_GL_STATE_CACHE',\n 'FIX_ARTIFACTS_BY_STRECHING_TEXEL',\n ], 'cc.macro');\n\n provideClearError(cc.macro, {\n PI: 'Math.PI',\n PI2: 'Math.PI * 2',\n FLT_MAX: 'Number.MAX_VALUE',\n FLT_MIN: 'Number.MIN_VALUE',\n UINT_MAX: 'Number.MAX_SAFE_INTEGER'\n }, 'cc.macro');\n\n // cc.game\n markAsRemovedInObject(cc.game, [\n 'CONFIG_KEY',\n ], 'cc.game');\n\n // cc.sys\n markAsRemovedInObject(cc.sys, [\n 'dumpRoot',\n 'cleanScript',\n 'BROWSER_TYPE_WECHAT_GAME',\n 'BROWSER_TYPE_WECHAT_GAME_SUB',\n 'BROWSER_TYPE_BAIDU_GAME',\n 'BROWSER_TYPE_BAIDU_GAME_SUB',\n 'BROWSER_TYPE_XIAOMI_GAME',\n 'BROWSER_TYPE_ALIPAY_GAME',\n ], 'cc.sys');\n\n // cc.Director\n provideClearError(cc.Director, {\n EVENT_PROJECTION_CHANGED: '',\n EVENT_BEFORE_VISIT: 'EVENT_AFTER_UPDATE',\n EVENT_AFTER_VISIT: 'EVENT_BEFORE_DRAW',\n }, 'cc.Director');\n markFunctionWarning(cc.Director.prototype, {\n convertToGL: 'cc.view.convertToLocationInView',\n convertToUI: '',\n getWinSize: 'cc.winSize',\n getWinSizeInPixels: 'cc.winSize',\n getVisibleSize: 'cc.view.getVisibleSize',\n getVisibleOrigin: 'cc.view.getVisibleOrigin',\n purgeCachedData: 'cc.assetManager.releaseAll',\n setDepthTest: 'cc.Camera.main.depth',\n setClearColor: 'cc.Camera.main.backgroundColor',\n getRunningScene: 'cc.director.getScene',\n getAnimationInterval: 'cc.game.getFrameRate',\n setAnimationInterval: 'cc.game.setFrameRate',\n isDisplayStats: 'cc.debug.isDisplayStats',\n setDisplayStats: 'cc.debug.setDisplayStats',\n stopAnimation: 'cc.game.pause',\n startAnimation: 'cc.game.resume',\n }, 'cc.Director');\n markAsRemoved(cc.Director, [\n 'pushScene',\n 'popScene',\n 'popToRootScene',\n 'popToSceneStackLevel',\n 'setProjection',\n 'getProjection',\n ], 'cc.Director');\n\n // Scheduler\n provideClearError(cc.Scheduler, {\n scheduleCallbackForTarget: 'schedule',\n scheduleUpdateForTarget: 'scheduleUpdate',\n unscheduleCallbackForTarget: 'unschedule',\n unscheduleUpdateForTarget: 'unscheduleUpdate',\n unscheduleAllCallbacksForTarget: 'unscheduleAllForTarget',\n unscheduleAllCallbacks: 'unscheduleAll',\n unscheduleAllCallbacksWithMinPriority: 'unscheduleAllWithMinPriority'\n }, 'cc.Scheduler');\n\n // cc.view\n provideClearError(cc.view, {\n adjustViewPort: 'adjustViewportMeta',\n setViewPortInPoints: 'setViewportInPoints',\n getViewPortRect: 'getViewportRect'\n }, 'cc.view');\n markAsRemovedInObject(cc.view, [\n 'isViewReady',\n 'setTargetDensityDPI',\n 'getTargetDensityDPI',\n 'setFrameZoomFactor',\n 'canSetContentScaleFactor',\n 'setContentTranslateLeftTop',\n 'getContentTranslateLeftTop',\n 'setViewName',\n 'getViewName'\n ], 'cc.view');\n\n // cc.PhysicsManager\n markAsRemoved(cc.PhysicsManager, [\n 'attachDebugDrawToCamera',\n 'detachDebugDrawFromCamera',\n ]);\n\n // cc.CollisionManager\n markAsRemoved(cc.CollisionManager, [\n 'attachDebugDrawToCamera',\n 'detachDebugDrawFromCamera',\n ]);\n\n // cc.Node\n provideClearError(cc._BaseNode.prototype, {\n 'tag': 'name',\n 'getTag': 'name',\n 'setTag': 'name',\n 'getChildByTag': 'getChildByName',\n 'removeChildByTag': 'getChildByName(name).destroy()'\n });\n\n markAsRemoved(cc.Node, [\n '_cascadeColorEnabled',\n 'cascadeColor',\n 'isCascadeColorEnabled',\n 'setCascadeColorEnabled',\n '_cascadeOpacityEnabled',\n 'cascadeOpacity',\n 'isCascadeOpacityEnabled',\n 'setCascadeOpacityEnabled',\n 'opacityModifyRGB',\n 'isOpacityModifyRGB',\n 'setOpacityModifyRGB',\n 'ignoreAnchor',\n 'isIgnoreAnchorPointForPosition',\n 'ignoreAnchorPointForPosition',\n 'isRunning',\n '_sgNode',\n ]);\n\n markFunctionWarning(cc.Node.prototype, {\n getNodeToParentTransform: 'getLocalMatrix',\n getNodeToParentTransformAR: 'getLocalMatrix',\n getNodeToWorldTransform: 'getWorldMatrix',\n getNodeToWorldTransformAR: 'getWorldMatrix',\n getParentToNodeTransform: 'getLocalMatrix',\n getWorldToNodeTransform: 'getWorldMatrix',\n convertTouchToNodeSpace: 'convertToNodeSpaceAR',\n convertTouchToNodeSpaceAR: 'convertToNodeSpaceAR',\n convertToWorldSpace: 'convertToWorldSpaceAR',\n convertToNodeSpace: 'convertToNodeSpaceAR'\n });\n\n provideClearError(cc.Node.prototype, {\n getRotationX: 'rotationX',\n setRotationX: 'rotationX',\n getRotationY: 'rotationY',\n setRotationY: 'rotationY',\n getPositionX: 'x',\n setPositionX: 'x',\n getPositionY: 'y',\n setPositionY: 'y',\n getSkewX: 'skewX',\n setSkewX: 'skewX',\n getSkewY: 'skewY',\n setSkewY: 'skewY',\n getScaleX: 'scaleX',\n setScaleX: 'scaleX',\n getScaleY: 'scaleY',\n setScaleY: 'scaleY',\n getOpacity: 'opacity',\n setOpacity: 'opacity',\n getColor: 'color',\n setColor: 'color',\n getLocalZOrder: 'zIndex',\n setLocalZOrder: 'zIndex',\n });\n\n provideClearError(cc.Sprite.prototype, {\n setInsetLeft: 'cc.SpriteFrame insetLeft',\n setInsetRight: 'cc.SpriteFrame insetRight',\n setInsetTop: 'cc.SpriteFrame insetTop',\n setInsetBottom: 'cc.SpriteFrame insetBottom',\n });\n\n // cc.Material\n cc.Material.getInstantiatedBuiltinMaterial = cc.MaterialVariant.createWithBuiltin;\n cc.Material.getInstantiatedMaterial = cc.MaterialVariant.create;\n markFunctionWarning(cc.Material, {\n getInstantiatedBuiltinMaterial: 'cc.MaterialVariant.createWithBuiltin',\n getInstantiatedMaterial: 'cc.MaterialVariant.create'\n });\n\n // cc.RenderComponent\n cc.js.getset(cc.RenderComponent.prototype, 'sharedMaterials', function () {\n cc.warnID(1400, 'sharedMaterials', 'getMaterials');\n return this.materials;\n }, function (v) {\n cc.warnID(1400, 'sharedMaterials', 'setMaterial');\n this.materials = v;\n })\n\n // cc.Camera\n markFunctionWarning(cc.Camera.prototype, {\n getNodeToCameraTransform: 'getWorldToScreenMatrix2D',\n getCameraToWorldPoint: 'getScreenToWorldPoint',\n getWorldToCameraPoint: 'getWorldToScreenPoint',\n getCameraToWorldMatrix: 'getScreenToWorldMatrix2D',\n getWorldToCameraMatrix: 'getWorldToScreenMatrix2D'\n });\n\n markAsRemoved(cc.Camera, [\n 'addTarget',\n 'removeTarget',\n 'getTargets'\n ]);\n\n // SCENE\n var ERR = '\"%s\" is not defined in the Scene, it is only defined in normal nodes.';\n CC_EDITOR || Object.defineProperties(cc.Scene.prototype, {\n active: {\n get: function () {\n cc.error(ERR, 'active');\n return true;\n },\n set: function () {\n cc.error(ERR, 'active');\n }\n },\n activeInHierarchy: {\n get: function () {\n cc.error(ERR, 'activeInHierarchy');\n return true;\n },\n },\n getComponent: {\n get: function () {\n cc.error(ERR, 'getComponent');\n return function () {\n return null;\n };\n }\n },\n addComponent: {\n get: function () {\n cc.error(ERR, 'addComponent');\n return function () {\n return null;\n };\n }\n },\n });\n\n // cc.dynamicAtlasManager\n markAsRemovedInObject(cc.dynamicAtlasManager, [\n 'minFrameSize'\n ], 'cc.dynamicAtlasManager')\n\n // light component\n if (cc.Light) {\n markAsRemovedInObject(cc.Light.prototype, [\n 'shadowDepthScale',\n ], 'cc.Light.prototype');\n }\n\n // Value types\n provideClearError(cc, {\n // AffineTransform\n affineTransformMake: 'cc.AffineTransform.create',\n affineTransformMakeIdentity: 'cc.AffineTransform.identity',\n affineTransformClone: 'cc.AffineTransform.clone',\n affineTransformConcat: 'cc.AffineTransform.concat',\n affineTransformConcatIn: 'cc.AffineTransform.concat',\n affineTransformInvert: 'cc.AffineTransform.invert',\n affineTransformInvertIn: 'cc.AffineTransform.invert',\n affineTransformInvertOut: 'cc.AffineTransform.invert',\n affineTransformEqualToTransform: 'cc.AffineTransform.equal',\n pointApplyAffineTransform: 'cc.AffineTransform.transformVec2',\n sizeApplyAffineTransform: 'cc.AffineTransform.transformSize',\n rectApplyAffineTransform: 'cc.AffineTransform.transformRect',\n obbApplyAffineTransform: 'cc.AffineTransform.transformObb',\n\n // Vec2\n pointEqualToPoint: 'cc.Vec2 equals',\n\n // Size\n sizeEqualToSize: 'cc.Size equals',\n\n // Rect\n rectEqualToRect: 'rectA.equals(rectB)',\n rectContainsRect: 'rectA.containsRect(rectB)',\n rectContainsPoint: 'rect.contains(vec2)',\n rectOverlapsRect: 'rectA.intersects(rectB)',\n rectIntersectsRect: 'rectA.intersects(rectB)',\n rectIntersection: 'rectA.intersection(intersection, rectB)',\n rectUnion: 'rectA.union(union, rectB)',\n rectGetMaxX: 'rect.xMax',\n rectGetMidX: 'rect.center.x',\n rectGetMinX: 'rect.xMin',\n rectGetMaxY: 'rect.yMax',\n rectGetMidY: 'rect.center.y',\n rectGetMinY: 'rect.yMin',\n\n // Color\n colorEqual: 'colorA.equals(colorB)',\n hexToColor: 'color.fromHEX(hexColor)',\n colorToHex: 'color.toHEX()',\n\n // Enums\n TextAlignment: 'cc.macro.TextAlignment',\n VerticalTextAlignment: 'cc.macro.VerticalTextAlignment',\n\n // Point Extensions\n pNeg: 'p.neg()',\n pAdd: 'p1.add(p2)',\n pSub: 'p1.sub(p2)',\n pMult: 'p.mul(factor)',\n pMidpoint: 'p1.add(p2).mul(0.5)',\n pDot: 'p1.dot(p2)',\n pCross: 'p1.cross(p2)',\n pPerp: 'p.rotate(-90 * Math.PI / 180)',\n pRPerp: 'p.rotate(90 * Math.PI / 180)',\n pProject: 'p1.project(p2)',\n pLengthSQ: 'p.magSqr()',\n pDistanceSQ: 'p1.sub(p2).magSqr()',\n pLength: 'p.mag()',\n pDistance: 'p1.sub(p2).mag()',\n pNormalize: 'p.normalize()',\n pForAngle: 'cc.v2(Math.cos(a), Math.sin(a))',\n pToAngle: 'Math.atan2(v.y, v.x)',\n pZeroIn: 'p.x = p.y = 0',\n pIn: 'p1.set(p2)',\n pMultIn: 'p.mulSelf(factor)',\n pSubIn: 'p1.subSelf(p2)',\n pAddIn: 'p1.addSelf(p2)',\n pNormalizeIn: 'p.normalizeSelf()',\n pSameAs: 'p1.equals(p2)',\n pAngle: 'v1.angle(v2)',\n pAngleSigned: 'v1.signAngle(v2)',\n pRotateByAngle: 'p.rotate(radians)',\n pCompMult: 'v1.multiply(v2)',\n pFuzzyEqual: 'v1.fuzzyEquals(v2, tolerance)',\n pLerp: 'p.lerp(endPoint, ratio)',\n pClamp: 'p.clampf(min_inclusive, max_inclusive)',\n\n rand: 'Math.random() * 0xffffff',\n randomMinus1To1: '(Math.random() - 0.5) * 2',\n\n container: 'cc.game.container',\n _canvas: 'cc.game.canvas',\n _renderType: 'cc.game.renderType',\n\n _getError: 'cc.debug.getError',\n _initDebugSetting: 'cc.debug._resetDebugSetting',\n DebugMode: 'cc.debug.DebugMode',\n }, 'cc');\n markAsRemovedInObject(cc, [\n 'blendFuncDisable',\n\n 'pFromSize',\n 'pCompOp',\n 'pIntersectPoint',\n 'pSegmentIntersect',\n 'pLineIntersect',\n\n 'obbApplyMatrix',\n\n 'getImageFormatByData',\n\n 'initEngine',\n ], 'cc');\n markFunctionWarning(cc, {\n // cc.p\n p: 'cc.v2'\n }, 'cc');\n // cc.Rect\n provideClearError(cc.Rect, {\n contain: 'rectA.contains(rectB)',\n transformMat4: 'rect.transformMat4(out, mat4)'\n });\n // cc.Color\n provideClearError(cc.Color, {\n rgb2hsv: 'color.toHSV()',\n hsv2rgb: 'color.fromHSV(h, s, v)'\n });\n markFunctionWarning(cc.Color, {\n fromHex: 'cc.Color.fromHEX',\n })\n\n // macro functions\n js.get(cc, 'lerp', function () {\n cc.errorID(1400, 'cc.lerp', 'cc.misc.lerp');\n return cc.misc.lerp;\n });\n js.get(cc, 'random0To1', function () {\n cc.errorID(1400, 'cc.random0To1', 'Math.random');\n return Math.random;\n });\n js.get(cc, 'degreesToRadians', function () {\n cc.errorID(1400, 'cc.degreesToRadians', 'cc.misc.degreesToRadians');\n return cc.misc.degreesToRadians;\n });\n js.get(cc, 'radiansToDegrees', function () {\n cc.errorID(1400, 'cc.radiansToDegrees', 'cc.misc.radiansToDegrees');\n return cc.misc.radiansToDegrees;\n });\n js.get(cc, 'clampf', function () {\n cc.errorID(1400, 'cc.clampf', 'cc.misc.clampf');\n return cc.misc.clampf;\n });\n js.get(cc, 'clamp01', function () {\n cc.errorID(1400, 'cc.clamp01', 'cc.misc.clamp01');\n return cc.misc.clamp01;\n });\n js.get(cc, 'ImageFormat', function () {\n cc.errorID(1400, 'cc.ImageFormat', 'cc.macro.ImageFormat');\n return cc.macro.ImageFormat;\n });\n js.get(cc, 'KEY', function () {\n cc.errorID(1400, 'cc.KEY', 'cc.macro.KEY');\n return cc.macro.KEY;\n });\n js.get(cc, 'Easing', function () {\n cc.errorID(1400, 'cc.Easing', 'cc.easing');\n return cc.easing;\n });\n\n // cc.isChildClassOf\n js.get(cc, 'isChildClassOf', function () {\n cc.errorID(1400, 'cc.isChildClassOf', 'cc.js.isChildClassOf');\n return cc.js.isChildClassOf;\n });\n\n // dragon bones\n if (typeof dragonBones !== 'undefined') {\n js.get(dragonBones.CCFactory, 'getFactory', function () {\n cc.errorID(1400, 'dragonBones.CCFactory.getFactory', 'dragonBones.CCFactory.getInstance');\n return dragonBones.CCFactory.getInstance;\n });\n }\n\n // renderEngine\n cc.renderer.renderEngine = {\n get gfx () {\n cc.warnID(1400, 'cc.renderer.renderEngine.gfx', 'cc.gfx');\n return cc.gfx;\n },\n get math () {\n cc.warnID(1400, 'cc.renderer.renderEngine.math', 'cc.math');\n return cc.vmath;\n },\n get InputAssembler () {\n cc.warnID(1400, 'cc.renderer.renderEngine.InputAssembler', 'cc.renderer.InputAssembler');\n return cc.renderer.InputAssembler;\n }\n };\n \n // audio\n markAsRemovedInObject(cc.audioEngine, [\n 'getProfile',\n 'preload',\n 'setMaxWebAudioSize',\n ], 'cc.audioEngine');\n}\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nrequire('./core/CCGame');\n\n// ensure modular-cocos2d can determine whether action module is included\nrequire('./actions');","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst Asset = require('../core/assets/CCAsset');\nconst CCSpriteFrame = require('../core/assets/CCSpriteFrame');\n\n/**\n * Class for particle asset handling.\n * @class ParticleAsset\n * @extends Asset\n */\nvar ParticleAsset = cc.Class({\n name: 'cc.ParticleAsset',\n extends: Asset,\n\n properties: {\n spriteFrame: {\n default: null,\n type: CCSpriteFrame\n }\n }\n});\n\ncc.ParticleAsset = module.exports = ParticleAsset;\n","'use strict';\n\n/**\n * enums\n */\nconst enums = {\n // buffer usage\n USAGE_STATIC: 35044, // gl.STATIC_DRAW\n USAGE_DYNAMIC: 35048, // gl.DYNAMIC_DRAW\n USAGE_STREAM: 35040, // gl.STREAM_DRAW\n\n // index buffer format\n INDEX_FMT_UINT8: 5121, // gl.UNSIGNED_BYTE\n INDEX_FMT_UINT16: 5123, // gl.UNSIGNED_SHORT\n INDEX_FMT_UINT32: 5125, // gl.UNSIGNED_INT (OES_element_index_uint)\n\n // vertex attribute semantic\n ATTR_POSITION: 'a_position',\n ATTR_NORMAL: 'a_normal',\n ATTR_TANGENT: 'a_tangent',\n ATTR_BITANGENT: 'a_bitangent',\n ATTR_WEIGHTS: 'a_weights',\n ATTR_JOINTS: 'a_joints',\n ATTR_COLOR: 'a_color',\n ATTR_COLOR0: 'a_color0',\n ATTR_COLOR1: 'a_color1',\n ATTR_UV: 'a_uv',\n ATTR_UV0: 'a_uv0',\n ATTR_UV1: 'a_uv1',\n ATTR_UV2: 'a_uv2',\n ATTR_UV3: 'a_uv3',\n ATTR_UV4: 'a_uv4',\n ATTR_UV5: 'a_uv5',\n ATTR_UV6: 'a_uv6',\n ATTR_UV7: 'a_uv7',\n\n // vertex attribute type\n ATTR_TYPE_INT8: 5120, // gl.BYTE\n ATTR_TYPE_UINT8: 5121, // gl.UNSIGNED_BYTE\n ATTR_TYPE_INT16: 5122, // gl.SHORT\n ATTR_TYPE_UINT16: 5123, // gl.UNSIGNED_SHORT\n ATTR_TYPE_INT32: 5124, // gl.INT\n ATTR_TYPE_UINT32: 5125, // gl.UNSIGNED_INT\n ATTR_TYPE_FLOAT32: 5126, // gl.FLOAT\n\n // texture filter\n FILTER_NEAREST: 0,\n FILTER_LINEAR: 1,\n\n // texture wrap mode\n WRAP_REPEAT: 10497, // gl.REPEAT\n WRAP_CLAMP: 33071, // gl.CLAMP_TO_EDGE\n WRAP_MIRROR: 33648, // gl.MIRRORED_REPEAT\n\n // texture format\n // compress formats\n TEXTURE_FMT_RGB_DXT1: 0,\n TEXTURE_FMT_RGBA_DXT1: 1,\n TEXTURE_FMT_RGBA_DXT3: 2,\n TEXTURE_FMT_RGBA_DXT5: 3,\n TEXTURE_FMT_RGB_ETC1: 4,\n TEXTURE_FMT_RGB_PVRTC_2BPPV1: 5,\n TEXTURE_FMT_RGBA_PVRTC_2BPPV1: 6,\n TEXTURE_FMT_RGB_PVRTC_4BPPV1: 7,\n TEXTURE_FMT_RGBA_PVRTC_4BPPV1: 8,\n\n // normal formats\n TEXTURE_FMT_A8: 9,\n TEXTURE_FMT_L8: 10,\n TEXTURE_FMT_L8_A8: 11,\n TEXTURE_FMT_R5_G6_B5: 12,\n TEXTURE_FMT_R5_G5_B5_A1: 13,\n TEXTURE_FMT_R4_G4_B4_A4: 14,\n TEXTURE_FMT_RGB8: 15,\n TEXTURE_FMT_RGBA8: 16,\n TEXTURE_FMT_RGB16F: 17,\n TEXTURE_FMT_RGBA16F: 18,\n TEXTURE_FMT_RGB32F: 19,\n TEXTURE_FMT_RGBA32F: 20,\n TEXTURE_FMT_R32F: 21,\n TEXTURE_FMT_111110F: 22,\n TEXTURE_FMT_SRGB: 23,\n TEXTURE_FMT_SRGBA: 24,\n\n // depth formats\n TEXTURE_FMT_D16: 25,\n TEXTURE_FMT_D32: 26,\n TEXTURE_FMT_D24S8: 27,\n\n // etc2 format\n TEXTURE_FMT_RGB_ETC2: 28,\n TEXTURE_FMT_RGBA_ETC2: 29,\n\n // depth and stencil function\n DS_FUNC_NEVER: 512, // gl.NEVER\n DS_FUNC_LESS: 513, // gl.LESS\n DS_FUNC_EQUAL: 514, // gl.EQUAL\n DS_FUNC_LEQUAL: 515, // gl.LEQUAL\n DS_FUNC_GREATER: 516, // gl.GREATER\n DS_FUNC_NOTEQUAL: 517, // gl.NOTEQUAL\n DS_FUNC_GEQUAL: 518, // gl.GEQUAL\n DS_FUNC_ALWAYS: 519, // gl.ALWAYS\n\n // render-buffer format\n RB_FMT_RGBA4: 32854, // gl.RGBA4\n RB_FMT_RGB5_A1: 32855, // gl.RGB5_A1\n RB_FMT_RGB565: 36194, // gl.RGB565\n RB_FMT_D16: 33189, // gl.DEPTH_COMPONENT16\n RB_FMT_S8: 36168, // gl.STENCIL_INDEX8\n RB_FMT_D24S8: 34041, // gl.DEPTH_STENCIL\n\n // blend-equation\n BLEND_FUNC_ADD: 32774, // gl.FUNC_ADD\n BLEND_FUNC_SUBTRACT: 32778, // gl.FUNC_SUBTRACT\n BLEND_FUNC_REVERSE_SUBTRACT: 32779, // gl.FUNC_REVERSE_SUBTRACT\n\n // blend\n BLEND_ZERO: 0, // gl.ZERO\n BLEND_ONE: 1, // gl.ONE\n BLEND_SRC_COLOR: 768, // gl.SRC_COLOR\n BLEND_ONE_MINUS_SRC_COLOR: 769, // gl.ONE_MINUS_SRC_COLOR\n BLEND_DST_COLOR: 774, // gl.DST_COLOR\n BLEND_ONE_MINUS_DST_COLOR: 775, // gl.ONE_MINUS_DST_COLOR\n BLEND_SRC_ALPHA: 770, // gl.SRC_ALPHA\n BLEND_ONE_MINUS_SRC_ALPHA: 771, // gl.ONE_MINUS_SRC_ALPHA\n BLEND_DST_ALPHA: 772, // gl.DST_ALPHA\n BLEND_ONE_MINUS_DST_ALPHA: 773, // gl.ONE_MINUS_DST_ALPHA\n BLEND_CONSTANT_COLOR: 32769, // gl.CONSTANT_COLOR\n BLEND_ONE_MINUS_CONSTANT_COLOR: 32770, // gl.ONE_MINUS_CONSTANT_COLOR\n BLEND_CONSTANT_ALPHA: 32771, // gl.CONSTANT_ALPHA\n BLEND_ONE_MINUS_CONSTANT_ALPHA: 32772, // gl.ONE_MINUS_CONSTANT_ALPHA\n BLEND_SRC_ALPHA_SATURATE: 776, // gl.SRC_ALPHA_SATURATE\n\n // stencil operation\n STENCIL_DISABLE: 0, // disable stencil\n STENCIL_ENABLE: 1, // enable stencil\n STENCIL_INHERIT: 2, // inherit stencil states\n\n STENCIL_OP_KEEP: 7680, // gl.KEEP\n STENCIL_OP_ZERO: 0, // gl.ZERO\n STENCIL_OP_REPLACE: 7681, // gl.REPLACE\n STENCIL_OP_INCR: 7682, // gl.INCR\n STENCIL_OP_INCR_WRAP: 34055, // gl.INCR_WRAP\n STENCIL_OP_DECR: 7683, // gl.DECR\n STENCIL_OP_DECR_WRAP: 34056, // gl.DECR_WRAP\n STENCIL_OP_INVERT: 5386, // gl.INVERT\n\n // cull\n CULL_NONE: 0,\n CULL_FRONT: 1028,\n CULL_BACK: 1029,\n CULL_FRONT_AND_BACK: 1032,\n\n // primitive type\n PT_POINTS: 0, // gl.POINTS\n PT_LINES: 1, // gl.LINES\n PT_LINE_LOOP: 2, // gl.LINE_LOOP\n PT_LINE_STRIP: 3, // gl.LINE_STRIP\n PT_TRIANGLES: 4, // gl.TRIANGLES\n PT_TRIANGLE_STRIP: 5, // gl.TRIANGLE_STRIP\n PT_TRIANGLE_FAN: 6, // gl.TRIANGLE_FAN\n};\n\nlet RenderQueue = {\n OPAQUE: 0,\n TRANSPARENT: 1,\n OVERLAY: 2\n};\n\n/**\n * JS Implementation of MurmurHash2\n * \n * @author Gary Court\n * @see http://github.com/garycourt/murmurhash-js\n * @author Austin Appleby\n * @see http://sites.google.com/site/murmurhash/\n * \n * @param {string} str ASCII only\n * @param {number} seed Positive integer only\n * @return {number} 32-bit positive integer hash\n */\n\nfunction murmurhash2_32_gc(str, seed) {\n var\n l = str.length,\n h = seed ^ l,\n i = 0,\n k;\n \n while (l >= 4) {\n \tk = \n \t ((str.charCodeAt(i) & 0xff)) |\n \t ((str.charCodeAt(++i) & 0xff) << 8) |\n \t ((str.charCodeAt(++i) & 0xff) << 16) |\n \t ((str.charCodeAt(++i) & 0xff) << 24);\n \n k = (((k & 0xffff) * 0x5bd1e995) + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n k ^= k >>> 24;\n k = (((k & 0xffff) * 0x5bd1e995) + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n\n\th = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16)) ^ k;\n\n l -= 4;\n ++i;\n }\n \n switch (l) {\n case 3: h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n case 2: h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n case 1: h ^= (str.charCodeAt(i) & 0xff);\n h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n }\n\n h ^= h >>> 13;\n h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n h ^= h >>> 15;\n\n return h >>> 0;\n}\n\n// Extensions\nvar WebGLEXT;\n(function (WebGLEXT) {\n WebGLEXT[WebGLEXT[\"COMPRESSED_RGB_S3TC_DXT1_EXT\"] = 33776] = \"COMPRESSED_RGB_S3TC_DXT1_EXT\";\n WebGLEXT[WebGLEXT[\"COMPRESSED_RGBA_S3TC_DXT1_EXT\"] = 33777] = \"COMPRESSED_RGBA_S3TC_DXT1_EXT\";\n WebGLEXT[WebGLEXT[\"COMPRESSED_RGBA_S3TC_DXT3_EXT\"] = 33778] = \"COMPRESSED_RGBA_S3TC_DXT3_EXT\";\n WebGLEXT[WebGLEXT[\"COMPRESSED_RGBA_S3TC_DXT5_EXT\"] = 33779] = \"COMPRESSED_RGBA_S3TC_DXT5_EXT\";\n WebGLEXT[WebGLEXT[\"COMPRESSED_SRGB_S3TC_DXT1_EXT\"] = 35916] = \"COMPRESSED_SRGB_S3TC_DXT1_EXT\";\n WebGLEXT[WebGLEXT[\"COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT\"] = 35917] = \"COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT\";\n WebGLEXT[WebGLEXT[\"COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT\"] = 35918] = \"COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT\";\n WebGLEXT[WebGLEXT[\"COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT\"] = 35919] = \"COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT\";\n WebGLEXT[WebGLEXT[\"COMPRESSED_RGB_PVRTC_4BPPV1_IMG\"] = 35840] = \"COMPRESSED_RGB_PVRTC_4BPPV1_IMG\";\n WebGLEXT[WebGLEXT[\"COMPRESSED_RGB_PVRTC_2BPPV1_IMG\"] = 35841] = \"COMPRESSED_RGB_PVRTC_2BPPV1_IMG\";\n WebGLEXT[WebGLEXT[\"COMPRESSED_RGBA_PVRTC_4BPPV1_IMG\"] = 35842] = \"COMPRESSED_RGBA_PVRTC_4BPPV1_IMG\";\n WebGLEXT[WebGLEXT[\"COMPRESSED_RGBA_PVRTC_2BPPV1_IMG\"] = 35843] = \"COMPRESSED_RGBA_PVRTC_2BPPV1_IMG\";\n WebGLEXT[WebGLEXT[\"COMPRESSED_RGB_ETC1_WEBGL\"] = 36196] = \"COMPRESSED_RGB_ETC1_WEBGL\";\n})(WebGLEXT || (WebGLEXT = {}));\nvar GFXObjectType;\n(function (GFXObjectType) {\n GFXObjectType[GFXObjectType[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n GFXObjectType[GFXObjectType[\"BUFFER\"] = 1] = \"BUFFER\";\n GFXObjectType[GFXObjectType[\"TEXTURE\"] = 2] = \"TEXTURE\";\n GFXObjectType[GFXObjectType[\"TEXTURE_VIEW\"] = 3] = \"TEXTURE_VIEW\";\n GFXObjectType[GFXObjectType[\"RENDER_PASS\"] = 4] = \"RENDER_PASS\";\n GFXObjectType[GFXObjectType[\"FRAMEBUFFER\"] = 5] = \"FRAMEBUFFER\";\n GFXObjectType[GFXObjectType[\"SAMPLER\"] = 6] = \"SAMPLER\";\n GFXObjectType[GFXObjectType[\"SHADER\"] = 7] = \"SHADER\";\n GFXObjectType[GFXObjectType[\"PIPELINE_LAYOUT\"] = 8] = \"PIPELINE_LAYOUT\";\n GFXObjectType[GFXObjectType[\"PIPELINE_STATE\"] = 9] = \"PIPELINE_STATE\";\n GFXObjectType[GFXObjectType[\"BINDING_LAYOUT\"] = 10] = \"BINDING_LAYOUT\";\n GFXObjectType[GFXObjectType[\"INPUT_ASSEMBLER\"] = 11] = \"INPUT_ASSEMBLER\";\n GFXObjectType[GFXObjectType[\"COMMAND_ALLOCATOR\"] = 12] = \"COMMAND_ALLOCATOR\";\n GFXObjectType[GFXObjectType[\"COMMAND_BUFFER\"] = 13] = \"COMMAND_BUFFER\";\n GFXObjectType[GFXObjectType[\"QUEUE\"] = 14] = \"QUEUE\";\n GFXObjectType[GFXObjectType[\"WINDOW\"] = 15] = \"WINDOW\";\n})(GFXObjectType || (GFXObjectType = {}));\nvar GFXStatus;\n(function (GFXStatus) {\n GFXStatus[GFXStatus[\"UNREADY\"] = 0] = \"UNREADY\";\n GFXStatus[GFXStatus[\"FAILED\"] = 1] = \"FAILED\";\n GFXStatus[GFXStatus[\"SUCCESS\"] = 2] = \"SUCCESS\";\n})(GFXStatus || (GFXStatus = {}));\nvar GFXObject = /** @class */ (function () {\n function GFXObject(gfxType) {\n this._gfxType = GFXObjectType.UNKNOWN;\n this._status = GFXStatus.UNREADY;\n this._gfxType = gfxType;\n }\n Object.defineProperty(GFXObject.prototype, \"gfxType\", {\n get: function () {\n return this._gfxType;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(GFXObject.prototype, \"status\", {\n get: function () {\n return this._status;\n },\n enumerable: true,\n configurable: true\n });\n return GFXObject;\n}());\nvar GFXAttributeName;\n(function (GFXAttributeName) {\n GFXAttributeName[\"ATTR_POSITION\"] = \"a_position\";\n GFXAttributeName[\"ATTR_NORMAL\"] = \"a_normal\";\n GFXAttributeName[\"ATTR_TANGENT\"] = \"a_tangent\";\n GFXAttributeName[\"ATTR_BITANGENT\"] = \"a_bitangent\";\n GFXAttributeName[\"ATTR_WEIGHTS\"] = \"a_weights\";\n GFXAttributeName[\"ATTR_JOINTS\"] = \"a_joints\";\n GFXAttributeName[\"ATTR_COLOR\"] = \"a_color\";\n GFXAttributeName[\"ATTR_COLOR1\"] = \"a_color1\";\n GFXAttributeName[\"ATTR_COLOR2\"] = \"a_color2\";\n GFXAttributeName[\"ATTR_TEX_COORD\"] = \"a_texCoord\";\n GFXAttributeName[\"ATTR_TEX_COORD1\"] = \"a_texCoord1\";\n GFXAttributeName[\"ATTR_TEX_COORD2\"] = \"a_texCoord2\";\n GFXAttributeName[\"ATTR_TEX_COORD3\"] = \"a_texCoord3\";\n GFXAttributeName[\"ATTR_TEX_COORD4\"] = \"a_texCoord4\";\n GFXAttributeName[\"ATTR_TEX_COORD5\"] = \"a_texCoord5\";\n GFXAttributeName[\"ATTR_TEX_COORD6\"] = \"a_texCoord6\";\n GFXAttributeName[\"ATTR_TEX_COORD7\"] = \"a_texCoord7\";\n GFXAttributeName[\"ATTR_TEX_COORD8\"] = \"a_texCoord8\";\n})(GFXAttributeName || (GFXAttributeName = {}));\nvar GFXType;\n(function (GFXType) {\n GFXType[GFXType[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n GFXType[GFXType[\"BOOL\"] = 1] = \"BOOL\";\n GFXType[GFXType[\"BOOL2\"] = 2] = \"BOOL2\";\n GFXType[GFXType[\"BOOL3\"] = 3] = \"BOOL3\";\n GFXType[GFXType[\"BOOL4\"] = 4] = \"BOOL4\";\n GFXType[GFXType[\"INT\"] = 5] = \"INT\";\n GFXType[GFXType[\"INT2\"] = 6] = \"INT2\";\n GFXType[GFXType[\"INT3\"] = 7] = \"INT3\";\n GFXType[GFXType[\"INT4\"] = 8] = \"INT4\";\n GFXType[GFXType[\"UINT\"] = 9] = \"UINT\";\n GFXType[GFXType[\"UINT2\"] = 10] = \"UINT2\";\n GFXType[GFXType[\"UINT3\"] = 11] = \"UINT3\";\n GFXType[GFXType[\"UINT4\"] = 12] = \"UINT4\";\n GFXType[GFXType[\"FLOAT\"] = 13] = \"FLOAT\";\n GFXType[GFXType[\"FLOAT2\"] = 14] = \"FLOAT2\";\n GFXType[GFXType[\"FLOAT3\"] = 15] = \"FLOAT3\";\n GFXType[GFXType[\"FLOAT4\"] = 16] = \"FLOAT4\";\n GFXType[GFXType[\"COLOR4\"] = 17] = \"COLOR4\";\n GFXType[GFXType[\"MAT2\"] = 18] = \"MAT2\";\n GFXType[GFXType[\"MAT2X3\"] = 19] = \"MAT2X3\";\n GFXType[GFXType[\"MAT2X4\"] = 20] = \"MAT2X4\";\n GFXType[GFXType[\"MAT3X2\"] = 21] = \"MAT3X2\";\n GFXType[GFXType[\"MAT3\"] = 22] = \"MAT3\";\n GFXType[GFXType[\"MAT3X4\"] = 23] = \"MAT3X4\";\n GFXType[GFXType[\"MAT4X2\"] = 24] = \"MAT4X2\";\n GFXType[GFXType[\"MAT4X3\"] = 25] = \"MAT4X3\";\n GFXType[GFXType[\"MAT4\"] = 26] = \"MAT4\";\n GFXType[GFXType[\"SAMPLER1D\"] = 27] = \"SAMPLER1D\";\n GFXType[GFXType[\"SAMPLER1D_ARRAY\"] = 28] = \"SAMPLER1D_ARRAY\";\n GFXType[GFXType[\"SAMPLER2D\"] = 29] = \"SAMPLER2D\";\n GFXType[GFXType[\"SAMPLER2D_ARRAY\"] = 30] = \"SAMPLER2D_ARRAY\";\n GFXType[GFXType[\"SAMPLER3D\"] = 31] = \"SAMPLER3D\";\n GFXType[GFXType[\"SAMPLER_CUBE\"] = 32] = \"SAMPLER_CUBE\";\n GFXType[GFXType[\"COUNT\"] = 33] = \"COUNT\";\n})(GFXType || (GFXType = {}));\nvar GFXFormat;\n(function (GFXFormat) {\n GFXFormat[GFXFormat[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n GFXFormat[GFXFormat[\"A8\"] = 1] = \"A8\";\n GFXFormat[GFXFormat[\"L8\"] = 2] = \"L8\";\n GFXFormat[GFXFormat[\"LA8\"] = 3] = \"LA8\";\n GFXFormat[GFXFormat[\"R8\"] = 4] = \"R8\";\n GFXFormat[GFXFormat[\"R8SN\"] = 5] = \"R8SN\";\n GFXFormat[GFXFormat[\"R8UI\"] = 6] = \"R8UI\";\n GFXFormat[GFXFormat[\"R8I\"] = 7] = \"R8I\";\n GFXFormat[GFXFormat[\"R16F\"] = 8] = \"R16F\";\n GFXFormat[GFXFormat[\"R16UI\"] = 9] = \"R16UI\";\n GFXFormat[GFXFormat[\"R16I\"] = 10] = \"R16I\";\n GFXFormat[GFXFormat[\"R32F\"] = 11] = \"R32F\";\n GFXFormat[GFXFormat[\"R32UI\"] = 12] = \"R32UI\";\n GFXFormat[GFXFormat[\"R32I\"] = 13] = \"R32I\";\n GFXFormat[GFXFormat[\"RG8\"] = 14] = \"RG8\";\n GFXFormat[GFXFormat[\"RG8SN\"] = 15] = \"RG8SN\";\n GFXFormat[GFXFormat[\"RG8UI\"] = 16] = \"RG8UI\";\n GFXFormat[GFXFormat[\"RG8I\"] = 17] = \"RG8I\";\n GFXFormat[GFXFormat[\"RG16F\"] = 18] = \"RG16F\";\n GFXFormat[GFXFormat[\"RG16UI\"] = 19] = \"RG16UI\";\n GFXFormat[GFXFormat[\"RG16I\"] = 20] = \"RG16I\";\n GFXFormat[GFXFormat[\"RG32F\"] = 21] = \"RG32F\";\n GFXFormat[GFXFormat[\"RG32UI\"] = 22] = \"RG32UI\";\n GFXFormat[GFXFormat[\"RG32I\"] = 23] = \"RG32I\";\n GFXFormat[GFXFormat[\"RGB8\"] = 24] = \"RGB8\";\n GFXFormat[GFXFormat[\"SRGB8\"] = 25] = \"SRGB8\";\n GFXFormat[GFXFormat[\"RGB8SN\"] = 26] = \"RGB8SN\";\n GFXFormat[GFXFormat[\"RGB8UI\"] = 27] = \"RGB8UI\";\n GFXFormat[GFXFormat[\"RGB8I\"] = 28] = \"RGB8I\";\n GFXFormat[GFXFormat[\"RGB16F\"] = 29] = \"RGB16F\";\n GFXFormat[GFXFormat[\"RGB16UI\"] = 30] = \"RGB16UI\";\n GFXFormat[GFXFormat[\"RGB16I\"] = 31] = \"RGB16I\";\n GFXFormat[GFXFormat[\"RGB32F\"] = 32] = \"RGB32F\";\n GFXFormat[GFXFormat[\"RGB32UI\"] = 33] = \"RGB32UI\";\n GFXFormat[GFXFormat[\"RGB32I\"] = 34] = \"RGB32I\";\n GFXFormat[GFXFormat[\"RGBA8\"] = 35] = \"RGBA8\";\n GFXFormat[GFXFormat[\"SRGB8_A8\"] = 36] = \"SRGB8_A8\";\n GFXFormat[GFXFormat[\"RGBA8SN\"] = 37] = \"RGBA8SN\";\n GFXFormat[GFXFormat[\"RGBA8UI\"] = 38] = \"RGBA8UI\";\n GFXFormat[GFXFormat[\"RGBA8I\"] = 39] = \"RGBA8I\";\n GFXFormat[GFXFormat[\"RGBA16F\"] = 40] = \"RGBA16F\";\n GFXFormat[GFXFormat[\"RGBA16UI\"] = 41] = \"RGBA16UI\";\n GFXFormat[GFXFormat[\"RGBA16I\"] = 42] = \"RGBA16I\";\n GFXFormat[GFXFormat[\"RGBA32F\"] = 43] = \"RGBA32F\";\n GFXFormat[GFXFormat[\"RGBA32UI\"] = 44] = \"RGBA32UI\";\n GFXFormat[GFXFormat[\"RGBA32I\"] = 45] = \"RGBA32I\";\n // Special Format\n GFXFormat[GFXFormat[\"R5G6B5\"] = 46] = \"R5G6B5\";\n GFXFormat[GFXFormat[\"R11G11B10F\"] = 47] = \"R11G11B10F\";\n GFXFormat[GFXFormat[\"RGB5A1\"] = 48] = \"RGB5A1\";\n GFXFormat[GFXFormat[\"RGBA4\"] = 49] = \"RGBA4\";\n GFXFormat[GFXFormat[\"RGB10A2\"] = 50] = \"RGB10A2\";\n GFXFormat[GFXFormat[\"RGB10A2UI\"] = 51] = \"RGB10A2UI\";\n GFXFormat[GFXFormat[\"RGB9E5\"] = 52] = \"RGB9E5\";\n // Depth-Stencil Format\n GFXFormat[GFXFormat[\"D16\"] = 53] = \"D16\";\n GFXFormat[GFXFormat[\"D16S8\"] = 54] = \"D16S8\";\n GFXFormat[GFXFormat[\"D24\"] = 55] = \"D24\";\n GFXFormat[GFXFormat[\"D24S8\"] = 56] = \"D24S8\";\n GFXFormat[GFXFormat[\"D32F\"] = 57] = \"D32F\";\n GFXFormat[GFXFormat[\"D32F_S8\"] = 58] = \"D32F_S8\";\n // Compressed Format\n // Block Compression Format, DDS (DirectDraw Surface)\n // DXT1: 3 channels (5:6:5), 1/8 origianl size, with 0 or 1 bit of alpha\n GFXFormat[GFXFormat[\"BC1\"] = 59] = \"BC1\";\n GFXFormat[GFXFormat[\"BC1_ALPHA\"] = 60] = \"BC1_ALPHA\";\n GFXFormat[GFXFormat[\"BC1_SRGB\"] = 61] = \"BC1_SRGB\";\n GFXFormat[GFXFormat[\"BC1_SRGB_ALPHA\"] = 62] = \"BC1_SRGB_ALPHA\";\n // DXT3: 4 channels (5:6:5), 1/4 origianl size, with 4 bits of alpha\n GFXFormat[GFXFormat[\"BC2\"] = 63] = \"BC2\";\n GFXFormat[GFXFormat[\"BC2_SRGB\"] = 64] = \"BC2_SRGB\";\n // DXT5: 4 channels (5:6:5), 1/4 origianl size, with 8 bits of alpha\n GFXFormat[GFXFormat[\"BC3\"] = 65] = \"BC3\";\n GFXFormat[GFXFormat[\"BC3_SRGB\"] = 66] = \"BC3_SRGB\";\n // 1 channel (8), 1/4 origianl size\n GFXFormat[GFXFormat[\"BC4\"] = 67] = \"BC4\";\n GFXFormat[GFXFormat[\"BC4_SNORM\"] = 68] = \"BC4_SNORM\";\n // 2 channels (8:8), 1/2 origianl size\n GFXFormat[GFXFormat[\"BC5\"] = 69] = \"BC5\";\n GFXFormat[GFXFormat[\"BC5_SNORM\"] = 70] = \"BC5_SNORM\";\n // 3 channels (16:16:16), half-floating point, 1/6 origianl size\n // UF16: unsigned float, 5 exponent bits + 11 mantissa bits\n // SF16: signed float, 1 signed bit + 5 exponent bits + 10 mantissa bits\n GFXFormat[GFXFormat[\"BC6H_UF16\"] = 71] = \"BC6H_UF16\";\n GFXFormat[GFXFormat[\"BC6H_SF16\"] = 72] = \"BC6H_SF16\";\n // 4 channels (4~7 bits per channel) with 0 to 8 bits of alpha, 1/3 original size\n GFXFormat[GFXFormat[\"BC7\"] = 73] = \"BC7\";\n GFXFormat[GFXFormat[\"BC7_SRGB\"] = 74] = \"BC7_SRGB\";\n // Ericsson Texture Compression Format\n GFXFormat[GFXFormat[\"ETC_RGB8\"] = 75] = \"ETC_RGB8\";\n GFXFormat[GFXFormat[\"ETC2_RGB8\"] = 76] = \"ETC2_RGB8\";\n GFXFormat[GFXFormat[\"ETC2_SRGB8\"] = 77] = \"ETC2_SRGB8\";\n GFXFormat[GFXFormat[\"ETC2_RGB8_A1\"] = 78] = \"ETC2_RGB8_A1\";\n GFXFormat[GFXFormat[\"ETC2_SRGB8_A1\"] = 79] = \"ETC2_SRGB8_A1\";\n GFXFormat[GFXFormat[\"ETC2_RGBA8\"] = 80] = \"ETC2_RGBA8\";\n GFXFormat[GFXFormat[\"ETC2_SRGB8_A8\"] = 81] = \"ETC2_SRGB8_A8\";\n GFXFormat[GFXFormat[\"EAC_R11\"] = 82] = \"EAC_R11\";\n GFXFormat[GFXFormat[\"EAC_R11SN\"] = 83] = \"EAC_R11SN\";\n GFXFormat[GFXFormat[\"EAC_RG11\"] = 84] = \"EAC_RG11\";\n GFXFormat[GFXFormat[\"EAC_RG11SN\"] = 85] = \"EAC_RG11SN\";\n // PVRTC (PowerVR)\n GFXFormat[GFXFormat[\"PVRTC_RGB2\"] = 86] = \"PVRTC_RGB2\";\n GFXFormat[GFXFormat[\"PVRTC_RGBA2\"] = 87] = \"PVRTC_RGBA2\";\n GFXFormat[GFXFormat[\"PVRTC_RGB4\"] = 88] = \"PVRTC_RGB4\";\n GFXFormat[GFXFormat[\"PVRTC_RGBA4\"] = 89] = \"PVRTC_RGBA4\";\n GFXFormat[GFXFormat[\"PVRTC2_2BPP\"] = 90] = \"PVRTC2_2BPP\";\n GFXFormat[GFXFormat[\"PVRTC2_4BPP\"] = 91] = \"PVRTC2_4BPP\";\n})(GFXFormat || (GFXFormat = {}));\nvar GFXBufferUsageBit;\n(function (GFXBufferUsageBit) {\n GFXBufferUsageBit[GFXBufferUsageBit[\"NONE\"] = 0] = \"NONE\";\n GFXBufferUsageBit[GFXBufferUsageBit[\"TRANSFER_SRC\"] = 1] = \"TRANSFER_SRC\";\n GFXBufferUsageBit[GFXBufferUsageBit[\"TRANSFER_DST\"] = 2] = \"TRANSFER_DST\";\n GFXBufferUsageBit[GFXBufferUsageBit[\"INDEX\"] = 4] = \"INDEX\";\n GFXBufferUsageBit[GFXBufferUsageBit[\"VERTEX\"] = 8] = \"VERTEX\";\n GFXBufferUsageBit[GFXBufferUsageBit[\"UNIFORM\"] = 16] = \"UNIFORM\";\n GFXBufferUsageBit[GFXBufferUsageBit[\"STORAGE\"] = 32] = \"STORAGE\";\n GFXBufferUsageBit[GFXBufferUsageBit[\"INDIRECT\"] = 64] = \"INDIRECT\";\n})(GFXBufferUsageBit || (GFXBufferUsageBit = {}));\nvar GFXMemoryUsageBit;\n(function (GFXMemoryUsageBit) {\n GFXMemoryUsageBit[GFXMemoryUsageBit[\"NONE\"] = 0] = \"NONE\";\n GFXMemoryUsageBit[GFXMemoryUsageBit[\"DEVICE\"] = 1] = \"DEVICE\";\n GFXMemoryUsageBit[GFXMemoryUsageBit[\"HOST\"] = 2] = \"HOST\";\n})(GFXMemoryUsageBit || (GFXMemoryUsageBit = {}));\nvar GFXBufferAccessBit;\n(function (GFXBufferAccessBit) {\n GFXBufferAccessBit[GFXBufferAccessBit[\"NONE\"] = 0] = \"NONE\";\n GFXBufferAccessBit[GFXBufferAccessBit[\"READ\"] = 1] = \"READ\";\n GFXBufferAccessBit[GFXBufferAccessBit[\"WRITE\"] = 2] = \"WRITE\";\n})(GFXBufferAccessBit || (GFXBufferAccessBit = {}));\nvar GFXPrimitiveMode;\n(function (GFXPrimitiveMode) {\n GFXPrimitiveMode[GFXPrimitiveMode[\"POINT_LIST\"] = 0] = \"POINT_LIST\";\n GFXPrimitiveMode[GFXPrimitiveMode[\"LINE_LIST\"] = 1] = \"LINE_LIST\";\n GFXPrimitiveMode[GFXPrimitiveMode[\"LINE_STRIP\"] = 2] = \"LINE_STRIP\";\n GFXPrimitiveMode[GFXPrimitiveMode[\"LINE_LOOP\"] = 3] = \"LINE_LOOP\";\n GFXPrimitiveMode[GFXPrimitiveMode[\"LINE_LIST_ADJACENCY\"] = 4] = \"LINE_LIST_ADJACENCY\";\n GFXPrimitiveMode[GFXPrimitiveMode[\"LINE_STRIP_ADJACENCY\"] = 5] = \"LINE_STRIP_ADJACENCY\";\n GFXPrimitiveMode[GFXPrimitiveMode[\"ISO_LINE_LIST\"] = 6] = \"ISO_LINE_LIST\";\n // raycast detectable:\n GFXPrimitiveMode[GFXPrimitiveMode[\"TRIANGLE_LIST\"] = 7] = \"TRIANGLE_LIST\";\n GFXPrimitiveMode[GFXPrimitiveMode[\"TRIANGLE_STRIP\"] = 8] = \"TRIANGLE_STRIP\";\n GFXPrimitiveMode[GFXPrimitiveMode[\"TRIANGLE_FAN\"] = 9] = \"TRIANGLE_FAN\";\n GFXPrimitiveMode[GFXPrimitiveMode[\"TRIANGLE_LIST_ADJACENCY\"] = 10] = \"TRIANGLE_LIST_ADJACENCY\";\n GFXPrimitiveMode[GFXPrimitiveMode[\"TRIANGLE_STRIP_ADJACENCY\"] = 11] = \"TRIANGLE_STRIP_ADJACENCY\";\n GFXPrimitiveMode[GFXPrimitiveMode[\"TRIANGLE_PATCH_ADJACENCY\"] = 12] = \"TRIANGLE_PATCH_ADJACENCY\";\n GFXPrimitiveMode[GFXPrimitiveMode[\"QUAD_PATCH_LIST\"] = 13] = \"QUAD_PATCH_LIST\";\n})(GFXPrimitiveMode || (GFXPrimitiveMode = {}));\nvar GFXPolygonMode;\n(function (GFXPolygonMode) {\n GFXPolygonMode[GFXPolygonMode[\"FILL\"] = 0] = \"FILL\";\n GFXPolygonMode[GFXPolygonMode[\"POINT\"] = 1] = \"POINT\";\n GFXPolygonMode[GFXPolygonMode[\"LINE\"] = 2] = \"LINE\";\n})(GFXPolygonMode || (GFXPolygonMode = {}));\nvar GFXShadeModel;\n(function (GFXShadeModel) {\n GFXShadeModel[GFXShadeModel[\"GOURAND\"] = 0] = \"GOURAND\";\n GFXShadeModel[GFXShadeModel[\"FLAT\"] = 1] = \"FLAT\";\n})(GFXShadeModel || (GFXShadeModel = {}));\nvar GFXCullMode;\n(function (GFXCullMode) {\n GFXCullMode[GFXCullMode[\"NONE\"] = 0] = \"NONE\";\n GFXCullMode[GFXCullMode[\"FRONT\"] = 1] = \"FRONT\";\n GFXCullMode[GFXCullMode[\"BACK\"] = 2] = \"BACK\";\n})(GFXCullMode || (GFXCullMode = {}));\nvar GFXComparisonFunc;\n(function (GFXComparisonFunc) {\n GFXComparisonFunc[GFXComparisonFunc[\"NEVER\"] = 0] = \"NEVER\";\n GFXComparisonFunc[GFXComparisonFunc[\"LESS\"] = 1] = \"LESS\";\n GFXComparisonFunc[GFXComparisonFunc[\"EQUAL\"] = 2] = \"EQUAL\";\n GFXComparisonFunc[GFXComparisonFunc[\"LESS_EQUAL\"] = 3] = \"LESS_EQUAL\";\n GFXComparisonFunc[GFXComparisonFunc[\"GREATER\"] = 4] = \"GREATER\";\n GFXComparisonFunc[GFXComparisonFunc[\"NOT_EQUAL\"] = 5] = \"NOT_EQUAL\";\n GFXComparisonFunc[GFXComparisonFunc[\"GREATER_EQUAL\"] = 6] = \"GREATER_EQUAL\";\n GFXComparisonFunc[GFXComparisonFunc[\"ALWAYS\"] = 7] = \"ALWAYS\";\n})(GFXComparisonFunc || (GFXComparisonFunc = {}));\nvar GFXStencilOp;\n(function (GFXStencilOp) {\n GFXStencilOp[GFXStencilOp[\"ZERO\"] = 0] = \"ZERO\";\n GFXStencilOp[GFXStencilOp[\"KEEP\"] = 1] = \"KEEP\";\n GFXStencilOp[GFXStencilOp[\"REPLACE\"] = 2] = \"REPLACE\";\n GFXStencilOp[GFXStencilOp[\"INCR\"] = 3] = \"INCR\";\n GFXStencilOp[GFXStencilOp[\"DECR\"] = 4] = \"DECR\";\n GFXStencilOp[GFXStencilOp[\"INVERT\"] = 5] = \"INVERT\";\n GFXStencilOp[GFXStencilOp[\"INCR_WRAP\"] = 6] = \"INCR_WRAP\";\n GFXStencilOp[GFXStencilOp[\"DECR_WRAP\"] = 7] = \"DECR_WRAP\";\n})(GFXStencilOp || (GFXStencilOp = {}));\nvar GFXBlendOp;\n(function (GFXBlendOp) {\n GFXBlendOp[GFXBlendOp[\"ADD\"] = 0] = \"ADD\";\n GFXBlendOp[GFXBlendOp[\"SUB\"] = 1] = \"SUB\";\n GFXBlendOp[GFXBlendOp[\"REV_SUB\"] = 2] = \"REV_SUB\";\n GFXBlendOp[GFXBlendOp[\"MIN\"] = 3] = \"MIN\";\n GFXBlendOp[GFXBlendOp[\"MAX\"] = 4] = \"MAX\";\n})(GFXBlendOp || (GFXBlendOp = {}));\nvar GFXBlendFactor;\n(function (GFXBlendFactor) {\n GFXBlendFactor[GFXBlendFactor[\"ZERO\"] = 0] = \"ZERO\";\n GFXBlendFactor[GFXBlendFactor[\"ONE\"] = 1] = \"ONE\";\n GFXBlendFactor[GFXBlendFactor[\"SRC_ALPHA\"] = 2] = \"SRC_ALPHA\";\n GFXBlendFactor[GFXBlendFactor[\"DST_ALPHA\"] = 3] = \"DST_ALPHA\";\n GFXBlendFactor[GFXBlendFactor[\"ONE_MINUS_SRC_ALPHA\"] = 4] = \"ONE_MINUS_SRC_ALPHA\";\n GFXBlendFactor[GFXBlendFactor[\"ONE_MINUS_DST_ALPHA\"] = 5] = \"ONE_MINUS_DST_ALPHA\";\n GFXBlendFactor[GFXBlendFactor[\"SRC_COLOR\"] = 6] = \"SRC_COLOR\";\n GFXBlendFactor[GFXBlendFactor[\"DST_COLOR\"] = 7] = \"DST_COLOR\";\n GFXBlendFactor[GFXBlendFactor[\"ONE_MINUS_SRC_COLOR\"] = 8] = \"ONE_MINUS_SRC_COLOR\";\n GFXBlendFactor[GFXBlendFactor[\"ONE_MINUS_DST_COLOR\"] = 9] = \"ONE_MINUS_DST_COLOR\";\n GFXBlendFactor[GFXBlendFactor[\"SRC_ALPHA_SATURATE\"] = 10] = \"SRC_ALPHA_SATURATE\";\n GFXBlendFactor[GFXBlendFactor[\"CONSTANT_COLOR\"] = 11] = \"CONSTANT_COLOR\";\n GFXBlendFactor[GFXBlendFactor[\"ONE_MINUS_CONSTANT_COLOR\"] = 12] = \"ONE_MINUS_CONSTANT_COLOR\";\n GFXBlendFactor[GFXBlendFactor[\"CONSTANT_ALPHA\"] = 13] = \"CONSTANT_ALPHA\";\n GFXBlendFactor[GFXBlendFactor[\"ONE_MINUS_CONSTANT_ALPHA\"] = 14] = \"ONE_MINUS_CONSTANT_ALPHA\";\n})(GFXBlendFactor || (GFXBlendFactor = {}));\nvar GFXColorMask;\n(function (GFXColorMask) {\n GFXColorMask[GFXColorMask[\"NONE\"] = 0] = \"NONE\";\n GFXColorMask[GFXColorMask[\"R\"] = 1] = \"R\";\n GFXColorMask[GFXColorMask[\"G\"] = 2] = \"G\";\n GFXColorMask[GFXColorMask[\"B\"] = 4] = \"B\";\n GFXColorMask[GFXColorMask[\"A\"] = 8] = \"A\";\n GFXColorMask[GFXColorMask[\"ALL\"] = 15] = \"ALL\";\n})(GFXColorMask || (GFXColorMask = {}));\nvar GFXFilter;\n(function (GFXFilter) {\n GFXFilter[GFXFilter[\"NONE\"] = 0] = \"NONE\";\n GFXFilter[GFXFilter[\"POINT\"] = 1] = \"POINT\";\n GFXFilter[GFXFilter[\"LINEAR\"] = 2] = \"LINEAR\";\n GFXFilter[GFXFilter[\"ANISOTROPIC\"] = 3] = \"ANISOTROPIC\";\n})(GFXFilter || (GFXFilter = {}));\nvar GFXAddress;\n(function (GFXAddress) {\n GFXAddress[GFXAddress[\"WRAP\"] = 0] = \"WRAP\";\n GFXAddress[GFXAddress[\"MIRROR\"] = 1] = \"MIRROR\";\n GFXAddress[GFXAddress[\"CLAMP\"] = 2] = \"CLAMP\";\n GFXAddress[GFXAddress[\"BORDER\"] = 3] = \"BORDER\";\n})(GFXAddress || (GFXAddress = {}));\nvar GFXTextureType;\n(function (GFXTextureType) {\n GFXTextureType[GFXTextureType[\"TEX1D\"] = 0] = \"TEX1D\";\n GFXTextureType[GFXTextureType[\"TEX2D\"] = 1] = \"TEX2D\";\n GFXTextureType[GFXTextureType[\"TEX3D\"] = 2] = \"TEX3D\";\n})(GFXTextureType || (GFXTextureType = {}));\nvar GFXTextureUsageBit;\n(function (GFXTextureUsageBit) {\n GFXTextureUsageBit[GFXTextureUsageBit[\"NONE\"] = 0] = \"NONE\";\n GFXTextureUsageBit[GFXTextureUsageBit[\"TRANSFER_SRC\"] = 1] = \"TRANSFER_SRC\";\n GFXTextureUsageBit[GFXTextureUsageBit[\"TRANSFER_DST\"] = 2] = \"TRANSFER_DST\";\n GFXTextureUsageBit[GFXTextureUsageBit[\"SAMPLED\"] = 4] = \"SAMPLED\";\n GFXTextureUsageBit[GFXTextureUsageBit[\"STORAGE\"] = 8] = \"STORAGE\";\n GFXTextureUsageBit[GFXTextureUsageBit[\"COLOR_ATTACHMENT\"] = 16] = \"COLOR_ATTACHMENT\";\n GFXTextureUsageBit[GFXTextureUsageBit[\"DEPTH_STENCIL_ATTACHMENT\"] = 32] = \"DEPTH_STENCIL_ATTACHMENT\";\n GFXTextureUsageBit[GFXTextureUsageBit[\"TRANSIENT_ATTACHMENT\"] = 64] = \"TRANSIENT_ATTACHMENT\";\n GFXTextureUsageBit[GFXTextureUsageBit[\"INPUT_ATTACHMENT\"] = 128] = \"INPUT_ATTACHMENT\";\n})(GFXTextureUsageBit || (GFXTextureUsageBit = {}));\nvar GFXSampleCount;\n(function (GFXSampleCount) {\n GFXSampleCount[GFXSampleCount[\"X1\"] = 0] = \"X1\";\n GFXSampleCount[GFXSampleCount[\"X2\"] = 1] = \"X2\";\n GFXSampleCount[GFXSampleCount[\"X4\"] = 2] = \"X4\";\n GFXSampleCount[GFXSampleCount[\"X8\"] = 3] = \"X8\";\n GFXSampleCount[GFXSampleCount[\"X16\"] = 4] = \"X16\";\n GFXSampleCount[GFXSampleCount[\"X32\"] = 5] = \"X32\";\n GFXSampleCount[GFXSampleCount[\"X64\"] = 6] = \"X64\";\n})(GFXSampleCount || (GFXSampleCount = {}));\nvar GFXTextureFlagBit;\n(function (GFXTextureFlagBit) {\n GFXTextureFlagBit[GFXTextureFlagBit[\"NONE\"] = 0] = \"NONE\";\n GFXTextureFlagBit[GFXTextureFlagBit[\"GEN_MIPMAP\"] = 1] = \"GEN_MIPMAP\";\n GFXTextureFlagBit[GFXTextureFlagBit[\"CUBEMAP\"] = 2] = \"CUBEMAP\";\n GFXTextureFlagBit[GFXTextureFlagBit[\"BAKUP_BUFFER\"] = 4] = \"BAKUP_BUFFER\";\n})(GFXTextureFlagBit || (GFXTextureFlagBit = {}));\nvar GFXTextureViewType;\n(function (GFXTextureViewType) {\n GFXTextureViewType[GFXTextureViewType[\"TV1D\"] = 0] = \"TV1D\";\n GFXTextureViewType[GFXTextureViewType[\"TV2D\"] = 1] = \"TV2D\";\n GFXTextureViewType[GFXTextureViewType[\"TV3D\"] = 2] = \"TV3D\";\n GFXTextureViewType[GFXTextureViewType[\"CUBE\"] = 3] = \"CUBE\";\n GFXTextureViewType[GFXTextureViewType[\"TV1D_ARRAY\"] = 4] = \"TV1D_ARRAY\";\n GFXTextureViewType[GFXTextureViewType[\"TV2D_ARRAY\"] = 5] = \"TV2D_ARRAY\";\n})(GFXTextureViewType || (GFXTextureViewType = {}));\nvar GFXShaderType;\n(function (GFXShaderType) {\n GFXShaderType[GFXShaderType[\"VERTEX\"] = 0] = \"VERTEX\";\n GFXShaderType[GFXShaderType[\"HULL\"] = 1] = \"HULL\";\n GFXShaderType[GFXShaderType[\"DOMAIN\"] = 2] = \"DOMAIN\";\n GFXShaderType[GFXShaderType[\"GEOMETRY\"] = 3] = \"GEOMETRY\";\n GFXShaderType[GFXShaderType[\"FRAGMENT\"] = 4] = \"FRAGMENT\";\n GFXShaderType[GFXShaderType[\"COMPUTE\"] = 5] = \"COMPUTE\";\n GFXShaderType[GFXShaderType[\"COUNT\"] = 6] = \"COUNT\";\n})(GFXShaderType || (GFXShaderType = {}));\nvar GFXBindingType;\n(function (GFXBindingType) {\n GFXBindingType[GFXBindingType[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n GFXBindingType[GFXBindingType[\"UNIFORM_BUFFER\"] = 1] = \"UNIFORM_BUFFER\";\n GFXBindingType[GFXBindingType[\"SAMPLER\"] = 2] = \"SAMPLER\";\n GFXBindingType[GFXBindingType[\"STORAGE_BUFFER\"] = 3] = \"STORAGE_BUFFER\";\n})(GFXBindingType || (GFXBindingType = {}));\nvar GFXCommandBufferType;\n(function (GFXCommandBufferType) {\n GFXCommandBufferType[GFXCommandBufferType[\"PRIMARY\"] = 0] = \"PRIMARY\";\n GFXCommandBufferType[GFXCommandBufferType[\"SECONDARY\"] = 1] = \"SECONDARY\";\n})(GFXCommandBufferType || (GFXCommandBufferType = {}));\n// Enumeration all possible values of operations to be performed on initially Loading a Framebuffer Object.\nvar GFXLoadOp;\n(function (GFXLoadOp) {\n GFXLoadOp[GFXLoadOp[\"LOAD\"] = 0] = \"LOAD\";\n GFXLoadOp[GFXLoadOp[\"CLEAR\"] = 1] = \"CLEAR\";\n GFXLoadOp[GFXLoadOp[\"DISCARD\"] = 2] = \"DISCARD\";\n})(GFXLoadOp || (GFXLoadOp = {}));\n// Enumerates all possible values of operations to be performed when Storing to a Framebuffer Object.\nvar GFXStoreOp;\n(function (GFXStoreOp) {\n GFXStoreOp[GFXStoreOp[\"STORE\"] = 0] = \"STORE\";\n GFXStoreOp[GFXStoreOp[\"DISCARD\"] = 1] = \"DISCARD\";\n})(GFXStoreOp || (GFXStoreOp = {}));\nvar GFXTextureLayout;\n(function (GFXTextureLayout) {\n GFXTextureLayout[GFXTextureLayout[\"UNDEFINED\"] = 0] = \"UNDEFINED\";\n GFXTextureLayout[GFXTextureLayout[\"GENERAL\"] = 1] = \"GENERAL\";\n GFXTextureLayout[GFXTextureLayout[\"COLOR_ATTACHMENT_OPTIMAL\"] = 2] = \"COLOR_ATTACHMENT_OPTIMAL\";\n GFXTextureLayout[GFXTextureLayout[\"DEPTH_STENCIL_ATTACHMENT_OPTIMAL\"] = 3] = \"DEPTH_STENCIL_ATTACHMENT_OPTIMAL\";\n GFXTextureLayout[GFXTextureLayout[\"DEPTH_STENCIL_READONLY_OPTIMAL\"] = 4] = \"DEPTH_STENCIL_READONLY_OPTIMAL\";\n GFXTextureLayout[GFXTextureLayout[\"SHADER_READONLY_OPTIMAL\"] = 5] = \"SHADER_READONLY_OPTIMAL\";\n GFXTextureLayout[GFXTextureLayout[\"TRANSFER_SRC_OPTIMAL\"] = 6] = \"TRANSFER_SRC_OPTIMAL\";\n GFXTextureLayout[GFXTextureLayout[\"TRANSFER_DST_OPTIMAL\"] = 7] = \"TRANSFER_DST_OPTIMAL\";\n GFXTextureLayout[GFXTextureLayout[\"PREINITIALIZED\"] = 8] = \"PREINITIALIZED\";\n GFXTextureLayout[GFXTextureLayout[\"PRESENT_SRC\"] = 9] = \"PRESENT_SRC\";\n})(GFXTextureLayout || (GFXTextureLayout = {}));\nvar GFXPipelineBindPoint;\n(function (GFXPipelineBindPoint) {\n GFXPipelineBindPoint[GFXPipelineBindPoint[\"GRAPHICS\"] = 0] = \"GRAPHICS\";\n GFXPipelineBindPoint[GFXPipelineBindPoint[\"COMPUTE\"] = 1] = \"COMPUTE\";\n GFXPipelineBindPoint[GFXPipelineBindPoint[\"RAY_TRACING\"] = 2] = \"RAY_TRACING\";\n})(GFXPipelineBindPoint || (GFXPipelineBindPoint = {}));\nvar GFXDynamicState;\n(function (GFXDynamicState) {\n GFXDynamicState[GFXDynamicState[\"VIEWPORT\"] = 0] = \"VIEWPORT\";\n GFXDynamicState[GFXDynamicState[\"SCISSOR\"] = 1] = \"SCISSOR\";\n GFXDynamicState[GFXDynamicState[\"LINE_WIDTH\"] = 2] = \"LINE_WIDTH\";\n GFXDynamicState[GFXDynamicState[\"DEPTH_BIAS\"] = 3] = \"DEPTH_BIAS\";\n GFXDynamicState[GFXDynamicState[\"BLEND_CONSTANTS\"] = 4] = \"BLEND_CONSTANTS\";\n GFXDynamicState[GFXDynamicState[\"DEPTH_BOUNDS\"] = 5] = \"DEPTH_BOUNDS\";\n GFXDynamicState[GFXDynamicState[\"STENCIL_WRITE_MASK\"] = 6] = \"STENCIL_WRITE_MASK\";\n GFXDynamicState[GFXDynamicState[\"STENCIL_COMPARE_MASK\"] = 7] = \"STENCIL_COMPARE_MASK\";\n})(GFXDynamicState || (GFXDynamicState = {}));\nvar GFXStencilFace;\n(function (GFXStencilFace) {\n GFXStencilFace[GFXStencilFace[\"FRONT\"] = 0] = \"FRONT\";\n GFXStencilFace[GFXStencilFace[\"BACK\"] = 1] = \"BACK\";\n GFXStencilFace[GFXStencilFace[\"ALL\"] = 2] = \"ALL\";\n})(GFXStencilFace || (GFXStencilFace = {}));\nvar GFXQueueType;\n(function (GFXQueueType) {\n GFXQueueType[GFXQueueType[\"GRAPHICS\"] = 0] = \"GRAPHICS\";\n GFXQueueType[GFXQueueType[\"COMPUTE\"] = 1] = \"COMPUTE\";\n GFXQueueType[GFXQueueType[\"TRANSFER\"] = 2] = \"TRANSFER\";\n})(GFXQueueType || (GFXQueueType = {}));\nvar GFXClearFlag;\n(function (GFXClearFlag) {\n GFXClearFlag[GFXClearFlag[\"NONE\"] = 0] = \"NONE\";\n GFXClearFlag[GFXClearFlag[\"COLOR\"] = 1] = \"COLOR\";\n GFXClearFlag[GFXClearFlag[\"DEPTH\"] = 2] = \"DEPTH\";\n GFXClearFlag[GFXClearFlag[\"STENCIL\"] = 4] = \"STENCIL\";\n GFXClearFlag[GFXClearFlag[\"DEPTH_STENCIL\"] = 6] = \"DEPTH_STENCIL\";\n GFXClearFlag[GFXClearFlag[\"ALL\"] = 7] = \"ALL\";\n})(GFXClearFlag || (GFXClearFlag = {}));\nfunction GFXGetTypeSize(type) {\n switch (type) {\n case GFXType.BOOL:\n case GFXType.INT:\n case GFXType.UINT:\n case GFXType.FLOAT: return 4;\n case GFXType.BOOL2:\n case GFXType.INT2:\n case GFXType.UINT2:\n case GFXType.FLOAT2: return 8;\n case GFXType.BOOL3:\n case GFXType.INT3:\n case GFXType.UINT3:\n case GFXType.FLOAT3: return 12;\n case GFXType.BOOL4:\n case GFXType.INT4:\n case GFXType.UINT4:\n case GFXType.FLOAT4:\n case GFXType.MAT2: return 16;\n case GFXType.MAT2X3: return 24;\n case GFXType.MAT2X4: return 32;\n case GFXType.MAT3X2: return 24;\n case GFXType.MAT3: return 36;\n case GFXType.MAT3X4: return 48;\n case GFXType.MAT4X2: return 32;\n case GFXType.MAT4X2: return 32;\n case GFXType.MAT4: return 64;\n case GFXType.SAMPLER1D:\n case GFXType.SAMPLER1D_ARRAY:\n case GFXType.SAMPLER2D:\n case GFXType.SAMPLER2D_ARRAY:\n case GFXType.SAMPLER3D:\n case GFXType.SAMPLER_CUBE: return 4;\n default: {\n return 0;\n }\n }\n}\n\n// import { GFXBuffer } from '../gfx/buffer';\nvar RenderPassStage;\n(function (RenderPassStage) {\n RenderPassStage[RenderPassStage[\"DEFAULT\"] = 100] = \"DEFAULT\";\n})(RenderPassStage || (RenderPassStage = {}));\nvar RenderPriority;\n(function (RenderPriority) {\n RenderPriority[RenderPriority[\"MIN\"] = 0] = \"MIN\";\n RenderPriority[RenderPriority[\"MAX\"] = 255] = \"MAX\";\n RenderPriority[RenderPriority[\"DEFAULT\"] = 128] = \"DEFAULT\";\n})(RenderPriority || (RenderPriority = {}));\nvar MAX_BINDING_SUPPORTED = 24; // from WebGL 2 spec\nvar UniformBinding;\n(function (UniformBinding) {\n // UBOs\n UniformBinding[UniformBinding[\"UBO_GLOBAL\"] = MAX_BINDING_SUPPORTED - 1] = \"UBO_GLOBAL\";\n UniformBinding[UniformBinding[\"UBO_SHADOW\"] = MAX_BINDING_SUPPORTED - 2] = \"UBO_SHADOW\";\n UniformBinding[UniformBinding[\"UBO_LOCAL\"] = MAX_BINDING_SUPPORTED - 3] = \"UBO_LOCAL\";\n UniformBinding[UniformBinding[\"UBO_FORWARD_LIGHTS\"] = MAX_BINDING_SUPPORTED - 4] = \"UBO_FORWARD_LIGHTS\";\n UniformBinding[UniformBinding[\"UBO_SKINNING\"] = MAX_BINDING_SUPPORTED - 5] = \"UBO_SKINNING\";\n UniformBinding[UniformBinding[\"UBO_SKINNING_TEXTURE\"] = MAX_BINDING_SUPPORTED - 6] = \"UBO_SKINNING_TEXTURE\";\n UniformBinding[UniformBinding[\"UBO_UI\"] = MAX_BINDING_SUPPORTED - 7] = \"UBO_UI\";\n // samplers\n UniformBinding[UniformBinding[\"SAMPLER_JOINTS\"] = MAX_BINDING_SUPPORTED + 1] = \"SAMPLER_JOINTS\";\n UniformBinding[UniformBinding[\"SAMPLER_ENVIRONMENT\"] = MAX_BINDING_SUPPORTED + 2] = \"SAMPLER_ENVIRONMENT\";\n // rooms left for custom bindings\n // effect importer prepares bindings according to this\n UniformBinding[UniformBinding[\"CUSTUM_UBO_BINDING_END_POINT\"] = MAX_BINDING_SUPPORTED - 7] = \"CUSTUM_UBO_BINDING_END_POINT\";\n UniformBinding[UniformBinding[\"CUSTOM_SAMPLER_BINDING_START_POINT\"] = MAX_BINDING_SUPPORTED + 6] = \"CUSTOM_SAMPLER_BINDING_START_POINT\";\n})(UniformBinding || (UniformBinding = {}));\n// export class UBOGlobal {\n// public static TIME_OFFSET: number = 0;\n// public static SCREEN_SIZE_OFFSET: number = UBOGlobal.TIME_OFFSET + 4;\n// public static SCREEN_SCALE_OFFSET: number = UBOGlobal.SCREEN_SIZE_OFFSET + 4;\n// public static NATIVE_SIZE_OFFSET: number = UBOGlobal.SCREEN_SCALE_OFFSET + 4;\n// public static MAT_VIEW_OFFSET: number = UBOGlobal.NATIVE_SIZE_OFFSET + 4;\n// public static MAT_VIEW_INV_OFFSET: number = UBOGlobal.MAT_VIEW_OFFSET + 16;\n// public static MAT_PROJ_OFFSET: number = UBOGlobal.MAT_VIEW_INV_OFFSET + 16;\n// public static MAT_PROJ_INV_OFFSET: number = UBOGlobal.MAT_PROJ_OFFSET + 16;\n// public static MAT_VIEW_PROJ_OFFSET: number = UBOGlobal.MAT_PROJ_INV_OFFSET + 16;\n// public static MAT_VIEW_PROJ_INV_OFFSET: number = UBOGlobal.MAT_VIEW_PROJ_OFFSET + 16;\n// public static CAMERA_POS_OFFSET: number = UBOGlobal.MAT_VIEW_PROJ_INV_OFFSET + 16;\n// public static EXPOSURE_OFFSET: number = UBOGlobal.CAMERA_POS_OFFSET + 4;\n// public static MAIN_LIT_DIR_OFFSET: number = UBOGlobal.EXPOSURE_OFFSET + 4;\n// public static MAIN_LIT_COLOR_OFFSET: number = UBOGlobal.MAIN_LIT_DIR_OFFSET + 4;\n// public static AMBIENT_SKY_OFFSET: number = UBOGlobal.MAIN_LIT_COLOR_OFFSET + 4;\n// public static AMBIENT_GROUND_OFFSET: number = UBOGlobal.AMBIENT_SKY_OFFSET + 4;\n// public static COUNT: number = UBOGlobal.AMBIENT_GROUND_OFFSET + 4;\n// public static SIZE: number = UBOGlobal.COUNT * 4;\n// public static BLOCK: GFXUniformBlock = {\n// binding: UniformBinding.UBO_GLOBAL, name: 'CCGlobal', members: [\n// { name: 'cc_time', type: GFXType.FLOAT4, count: 1 },\n// { name: 'cc_screenSize', type: GFXType.FLOAT4, count: 1 },\n// { name: 'cc_screenScale', type: GFXType.FLOAT4, count: 1 },\n// { name: 'cc_nativeSize', type: GFXType.FLOAT4, count: 1 },\n// { name: 'cc_matView', type: GFXType.MAT4, count: 1 },\n// { name: 'cc_matViewInv', type: GFXType.MAT4, count: 1 },\n// { name: 'cc_matProj', type: GFXType.MAT4, count: 1 },\n// { name: 'cc_matProjInv', type: GFXType.MAT4, count: 1 },\n// { name: 'cc_matViewProj', type: GFXType.MAT4, count: 1 },\n// { name: 'cc_matViewProjInv', type: GFXType.MAT4, count: 1 },\n// { name: 'cc_cameraPos', type: GFXType.FLOAT4, count: 1 },\n// { name: 'cc_exposure', type: GFXType.FLOAT4, count: 1 },\n// { name: 'cc_mainLitDir', type: GFXType.FLOAT4, count: 1 },\n// { name: 'cc_mainLitColor', type: GFXType.FLOAT4, count: 1 },\n// { name: 'cc_ambientSky', type: GFXType.FLOAT4, count: 1 },\n// { name: 'cc_ambientGround', type: GFXType.FLOAT4, count: 1 },\n// ],\n// };\n// public view: Float32Array = new Float32Array(UBOGlobal.COUNT);\n// }\n// export class UBOShadow {\n// public static MAT_LIGHT_PLANE_PROJ_OFFSET: number = 0;\n// public static SHADOW_COLOR_OFFSET: number = UBOShadow.MAT_LIGHT_PLANE_PROJ_OFFSET + 16;\n// public static COUNT: number = UBOShadow.SHADOW_COLOR_OFFSET + 4;\n// public static SIZE: number = UBOShadow.COUNT * 4;\n// public static BLOCK: GFXUniformBlock = {\n// binding: UniformBinding.UBO_SHADOW, name: 'CCShadow', members: [\n// { name: 'cc_matLightPlaneProj', type: GFXType.MAT4, count: 1 },\n// { name: 'cc_shadowColor', type: GFXType.FLOAT4, count: 1 },\n// ],\n// };\n// public view: Float32Array = new Float32Array(UBOShadow.COUNT);\n// }\n// export const localBindingsDesc: Map = new Map();\n// export class UBOLocal {\n// public static MAT_WORLD_OFFSET: number = 0;\n// public static MAT_WORLD_IT_OFFSET: number = UBOLocal.MAT_WORLD_OFFSET + 16;\n// public static COUNT: number = UBOLocal.MAT_WORLD_IT_OFFSET + 16;\n// public static SIZE: number = UBOLocal.COUNT * 4;\n// public static BLOCK: GFXUniformBlock = {\n// binding: UniformBinding.UBO_LOCAL, name: 'CCLocal', members: [\n// { name: 'cc_matWorld', type: GFXType.MAT4, count: 1 },\n// { name: 'cc_matWorldIT', type: GFXType.MAT4, count: 1 },\n// ],\n// };\n// public view: Float32Array = new Float32Array(UBOLocal.COUNT);\n// }\n// localBindingsDesc.set(UBOLocal.BLOCK.name, {\n// type: GFXBindingType.UNIFORM_BUFFER,\n// blockInfo: UBOLocal.BLOCK,\n// });\n// export class UBOForwardLight {\n// public static MAX_SPHERE_LIGHTS = 2;\n// public static MAX_SPOT_LIGHTS = 2;\n// public static SPHERE_LIGHT_POS_OFFSET: number = 0;\n// public static SPHERE_LIGHT_SIZE_RANGE_OFFSET: number = UBOForwardLight.SPHERE_LIGHT_POS_OFFSET + UBOForwardLight.MAX_SPHERE_LIGHTS * 4;\n// public static SPHERE_LIGHT_COLOR_OFFSET: number = UBOForwardLight.SPHERE_LIGHT_SIZE_RANGE_OFFSET + UBOForwardLight.MAX_SPHERE_LIGHTS * 4;\n// public static SPOT_LIGHT_POS_OFFSET: number = UBOForwardLight.SPHERE_LIGHT_COLOR_OFFSET + UBOForwardLight.MAX_SPOT_LIGHTS * 4;\n// public static SPOT_LIGHT_SIZE_RANGE_ANGLE_OFFSET: number = UBOForwardLight.SPOT_LIGHT_POS_OFFSET + UBOForwardLight.MAX_SPOT_LIGHTS * 4;\n// public static SPOT_LIGHT_DIR_OFFSET: number = UBOForwardLight.SPOT_LIGHT_SIZE_RANGE_ANGLE_OFFSET + UBOForwardLight.MAX_SPOT_LIGHTS * 4;\n// public static SPOT_LIGHT_COLOR_OFFSET: number = UBOForwardLight.SPOT_LIGHT_DIR_OFFSET + UBOForwardLight.MAX_SPOT_LIGHTS * 4;\n// public static COUNT: number = UBOForwardLight.SPOT_LIGHT_COLOR_OFFSET + UBOForwardLight.MAX_SPOT_LIGHTS * 4;\n// public static SIZE: number = UBOForwardLight.COUNT * 4;\n// public static BLOCK: GFXUniformBlock = {\n// binding: UniformBinding.UBO_FORWARD_LIGHTS, name: 'CCForwardLight', members: [\n// { name: 'cc_sphereLitPos', type: GFXType.FLOAT4, count: UBOForwardLight.MAX_SPHERE_LIGHTS },\n// { name: 'cc_sphereLitSizeRange', type: GFXType.FLOAT4, count: UBOForwardLight.MAX_SPHERE_LIGHTS },\n// { name: 'cc_sphereLitColor', type: GFXType.FLOAT4, count: UBOForwardLight.MAX_SPHERE_LIGHTS },\n// { name: 'cc_spotLitPos', type: GFXType.FLOAT4, count: UBOForwardLight.MAX_SPOT_LIGHTS },\n// { name: 'cc_spotLitSizeRangeAngle', type: GFXType.FLOAT4, count: UBOForwardLight.MAX_SPOT_LIGHTS },\n// { name: 'cc_spotLitDir', type: GFXType.FLOAT4, count: UBOForwardLight.MAX_SPOT_LIGHTS },\n// { name: 'cc_spotLitColor', type: GFXType.FLOAT4, count: UBOForwardLight.MAX_SPOT_LIGHTS },\n// ],\n// };\n// public view: Float32Array = new Float32Array(UBOForwardLight.COUNT);\n// }\n// localBindingsDesc.set(UBOForwardLight.BLOCK.name, {\n// type: GFXBindingType.UNIFORM_BUFFER,\n// blockInfo: UBOForwardLight.BLOCK,\n// });\n// export class UBOSkinning {\n// public static MAT_JOINT_OFFSET: number = 0;\n// public static JOINTS_TEXTURE_SIZE_OFFSET: number = UBOSkinning.MAT_JOINT_OFFSET + 128 * 16;\n// public static COUNT: number = UBOSkinning.JOINTS_TEXTURE_SIZE_OFFSET + 4;\n// public static SIZE: number = UBOSkinning.COUNT * 4;\n// public static BLOCK: GFXUniformBlock = {\n// binding: UniformBinding.UBO_SKINNING, name: 'CCSkinning', members: [\n// { name: 'cc_matJoint', type: GFXType.MAT4, count: 128 },\n// { name: 'cc_jointsTextureSize', type: GFXType.FLOAT4, count: 1 },\n// ],\n// };\n// }\n// localBindingsDesc.set(UBOSkinning.BLOCK.name, {\n// type: GFXBindingType.UNIFORM_BUFFER,\n// blockInfo: UBOSkinning.BLOCK,\n// });\n// export const UNIFORM_JOINTS_TEXTURE: GFXUniformSampler = {\n// binding: UniformBinding.SAMPLER_JOINTS, name: 'cc_jointsTexture', type: GFXType.SAMPLER2D, count: 1,\n// };\n// localBindingsDesc.set(UNIFORM_JOINTS_TEXTURE.name, {\n// type: GFXBindingType.SAMPLER,\n// samplerInfo: UNIFORM_JOINTS_TEXTURE,\n// });\n// export interface IInternalBindingDesc {\n// type: GFXBindingType;\n// blockInfo?: GFXUniformBlock;\n// samplerInfo?: GFXUniformSampler;\n// }\n// export interface IInternalBindingInst extends IInternalBindingDesc {\n// buffer?: GFXBuffer;\n// sampler?: GFXSampler;\n// textureView?: GFXTextureView;\n// }\n\n// this file is used for offline effect building.\nvar _a, _b;\nvar SamplerInfoIndex;\n(function (SamplerInfoIndex) {\n SamplerInfoIndex[SamplerInfoIndex[\"minFilter\"] = 0] = \"minFilter\";\n SamplerInfoIndex[SamplerInfoIndex[\"magFilter\"] = 1] = \"magFilter\";\n SamplerInfoIndex[SamplerInfoIndex[\"mipFilter\"] = 2] = \"mipFilter\";\n SamplerInfoIndex[SamplerInfoIndex[\"addressU\"] = 3] = \"addressU\";\n SamplerInfoIndex[SamplerInfoIndex[\"addressV\"] = 4] = \"addressV\";\n SamplerInfoIndex[SamplerInfoIndex[\"addressW\"] = 5] = \"addressW\";\n SamplerInfoIndex[SamplerInfoIndex[\"maxAnisotropy\"] = 6] = \"maxAnisotropy\";\n SamplerInfoIndex[SamplerInfoIndex[\"cmpFunc\"] = 7] = \"cmpFunc\";\n SamplerInfoIndex[SamplerInfoIndex[\"minLOD\"] = 8] = \"minLOD\";\n SamplerInfoIndex[SamplerInfoIndex[\"maxLOD\"] = 9] = \"maxLOD\";\n SamplerInfoIndex[SamplerInfoIndex[\"mipLODBias\"] = 10] = \"mipLODBias\";\n SamplerInfoIndex[SamplerInfoIndex[\"borderColor\"] = 11] = \"borderColor\";\n SamplerInfoIndex[SamplerInfoIndex[\"total\"] = 15] = \"total\";\n})(SamplerInfoIndex || (SamplerInfoIndex = {}));\nvar typeMap = {};\ntypeMap[typeMap['bool'] = GFXType.BOOL] = 'bool';\ntypeMap[typeMap['int'] = GFXType.INT] = 'int';\ntypeMap[typeMap['ivec2'] = GFXType.INT2] = 'ivec2invTypeParams';\ntypeMap[typeMap['ivec3'] = GFXType.INT3] = 'ivec3';\ntypeMap[typeMap['ivec4'] = GFXType.INT4] = 'ivec4';\ntypeMap[typeMap['float'] = GFXType.FLOAT] = 'float';\ntypeMap[typeMap['vec2'] = GFXType.FLOAT2] = 'vec2';\ntypeMap[typeMap['vec3'] = GFXType.FLOAT3] = 'vec3';\ntypeMap[typeMap['vec4'] = GFXType.FLOAT4] = 'vec4';\ntypeMap[typeMap['mat2'] = GFXType.MAT2] = 'mat2';\ntypeMap[typeMap['mat3'] = GFXType.MAT3] = 'mat3';\ntypeMap[typeMap['mat4'] = GFXType.MAT4] = 'mat4';\ntypeMap[typeMap['sampler2D'] = GFXType.SAMPLER2D] = 'sampler2D';\ntypeMap[typeMap['samplerCube'] = GFXType.SAMPLER_CUBE] = 'samplerCube';\nvar sizeMap = (_a = {},\n _a[GFXType.BOOL] = 4,\n _a[GFXType.INT] = 4,\n _a[GFXType.INT2] = 8,\n _a[GFXType.INT3] = 12,\n _a[GFXType.INT4] = 16,\n _a[GFXType.FLOAT] = 4,\n _a[GFXType.FLOAT2] = 8,\n _a[GFXType.FLOAT3] = 12,\n _a[GFXType.FLOAT4] = 16,\n _a[GFXType.MAT2] = 16,\n _a[GFXType.MAT3] = 36,\n _a[GFXType.MAT4] = 64,\n _a[GFXType.SAMPLER2D] = 4,\n _a[GFXType.SAMPLER_CUBE] = 4,\n _a);\nvar formatMap = (_b = {},\n _b[GFXType.BOOL] = GFXFormat.R32I,\n _b[GFXType.INT] = GFXFormat.R32I,\n _b[GFXType.INT2] = GFXFormat.RG32I,\n _b[GFXType.INT3] = GFXFormat.RGB32I,\n _b[GFXType.INT4] = GFXFormat.RGBA32I,\n _b[GFXType.FLOAT] = GFXFormat.R32F,\n _b[GFXType.FLOAT2] = GFXFormat.RG32F,\n _b[GFXType.FLOAT3] = GFXFormat.RGB32F,\n _b[GFXType.FLOAT4] = GFXFormat.RGBA32F,\n _b);\n// const passParams = {\n// // color mask\n// NONE: gfx.GFXColorMask.NONE,\n// R: gfx.GFXColorMask.R,\n// G: gfx.GFXColorMask.G,\n// B: gfx.GFXColorMask.B,\n// A: gfx.GFXColorMask.A,\n// RG: gfx.GFXColorMask.R | gfx.GFXColorMask.G,\n// RB: gfx.GFXColorMask.R | gfx.GFXColorMask.B,\n// RA: gfx.GFXColorMask.R | gfx.GFXColorMask.A,\n// GB: gfx.GFXColorMask.G | gfx.GFXColorMask.B,\n// GA: gfx.GFXColorMask.G | gfx.GFXColorMask.A,\n// BA: gfx.GFXColorMask.B | gfx.GFXColorMask.A,\n// RGB: gfx.GFXColorMask.R | gfx.GFXColorMask.G | gfx.GFXColorMask.B,\n// RGA: gfx.GFXColorMask.R | gfx.GFXColorMask.G | gfx.GFXColorMask.A,\n// RBA: gfx.GFXColorMask.R | gfx.GFXColorMask.B | gfx.GFXColorMask.A,\n// GBA: gfx.GFXColorMask.G | gfx.GFXColorMask.B | gfx.GFXColorMask.A,\n// ALL: gfx.GFXColorMask.ALL,\n// // blend operation\n// ADD: gfx.GFXBlendOp.ADD,\n// SUB: gfx.GFXBlendOp.SUB,\n// REV_SUB: gfx.GFXBlendOp.REV_SUB,\n// MIN: gfx.GFXBlendOp.MIN,\n// MAX: gfx.GFXBlendOp.MAX,\n// // blend factor\n// ZERO: gfx.GFXBlendFactor.ZERO,\n// ONE: gfx.GFXBlendFactor.ONE,\n// SRC_ALPHA: gfx.GFXBlendFactor.SRC_ALPHA,\n// DST_ALPHA: gfx.GFXBlendFactor.DST_ALPHA,\n// ONE_MINUS_SRC_ALPHA: gfx.GFXBlendFactor.ONE_MINUS_SRC_ALPHA,\n// ONE_MINUS_DST_ALPHA: gfx.GFXBlendFactor.ONE_MINUS_DST_ALPHA,\n// SRC_COLOR: gfx.GFXBlendFactor.SRC_COLOR,\n// DST_COLOR: gfx.GFXBlendFactor.DST_COLOR,\n// ONE_MINUS_SRC_COLOR: gfx.GFXBlendFactor.ONE_MINUS_SRC_COLOR,\n// ONE_MINUS_DST_COLOR: gfx.GFXBlendFactor.ONE_MINUS_DST_COLOR,\n// SRC_ALPHA_SATURATE: gfx.GFXBlendFactor.SRC_ALPHA_SATURATE,\n// CONSTANT_COLOR: gfx.GFXBlendFactor.CONSTANT_COLOR,\n// ONE_MINUS_CONSTANT_COLOR: gfx.GFXBlendFactor.ONE_MINUS_CONSTANT_COLOR,\n// CONSTANT_ALPHA: gfx.GFXBlendFactor.CONSTANT_ALPHA,\n// ONE_MINUS_CONSTANT_ALPHA: gfx.GFXBlendFactor.ONE_MINUS_CONSTANT_ALPHA,\n// // stencil operation\n// // ZERO: GFXStencilOp.ZERO, // duplicate, safely removed because enum value is(and always will be) the same\n// KEEP: gfx.GFXStencilOp.KEEP,\n// REPLACE: gfx.GFXStencilOp.REPLACE,\n// INCR: gfx.GFXStencilOp.INCR,\n// DECR: gfx.GFXStencilOp.DECR,\n// INVERT: gfx.GFXStencilOp.INVERT,\n// INCR_WRAP: gfx.GFXStencilOp.INCR_WRAP,\n// DECR_WRAP: gfx.GFXStencilOp.DECR_WRAP,\n// // comparison function\n// NEVER: gfx.GFXComparisonFunc.NEVER,\n// LESS: gfx.GFXComparisonFunc.LESS,\n// EQUAL: gfx.GFXComparisonFunc.EQUAL,\n// LESS_EQUAL: gfx.GFXComparisonFunc.LESS_EQUAL,\n// GREATER: gfx.GFXComparisonFunc.GREATER,\n// NOT_EQUAL: gfx.GFXComparisonFunc.NOT_EQUAL,\n// GREATER_EQUAL: gfx.GFXComparisonFunc.GREATER_EQUAL,\n// ALWAYS: gfx.GFXComparisonFunc.ALWAYS,\n// // cull mode\n// // NONE: GFXCullMode.NONE, // duplicate, safely removed because enum value is(and always will be) the same\n// FRONT: gfx.GFXCullMode.FRONT,\n// BACK: gfx.GFXCullMode.BACK,\n// // shade mode\n// GOURAND: gfx.GFXShadeModel.GOURAND,\n// FLAT: gfx.GFXShadeModel.FLAT,\n// // polygon mode\n// FILL: gfx.GFXPolygonMode.FILL,\n// LINE: gfx.GFXPolygonMode.LINE,\n// POINT: gfx.GFXPolygonMode.POINT,\n// // primitive mode\n// POINT_LIST: gfx.GFXPrimitiveMode.POINT_LIST,\n// LINE_LIST: gfx.GFXPrimitiveMode.LINE_LIST,\n// LINE_STRIP: gfx.GFXPrimitiveMode.LINE_STRIP,\n// LINE_LOOP: gfx.GFXPrimitiveMode.LINE_LOOP,\n// TRIANGLE_LIST: gfx.GFXPrimitiveMode.TRIANGLE_LIST,\n// TRIANGLE_STRIP: gfx.GFXPrimitiveMode.TRIANGLE_STRIP,\n// TRIANGLE_FAN: gfx.GFXPrimitiveMode.TRIANGLE_FAN,\n// LINE_LIST_ADJACENCY: gfx.GFXPrimitiveMode.LINE_LIST_ADJACENCY,\n// LINE_STRIP_ADJACENCY: gfx.GFXPrimitiveMode.LINE_STRIP_ADJACENCY,\n// TRIANGLE_LIST_ADJACENCY: gfx.GFXPrimitiveMode.TRIANGLE_LIST_ADJACENCY,\n// TRIANGLE_STRIP_ADJACENCY: gfx.GFXPrimitiveMode.TRIANGLE_STRIP_ADJACENCY,\n// TRIANGLE_PATCH_ADJACENCY: gfx.GFXPrimitiveMode.TRIANGLE_PATCH_ADJACENCY,\n// QUAD_PATCH_LIST: gfx.GFXPrimitiveMode.QUAD_PATCH_LIST,\n// ISO_LINE_LIST: gfx.GFXPrimitiveMode.ISO_LINE_LIST,\n// // POINT: gfx.GFXFilter.POINT, // duplicate, safely removed because enum value is(and always will be) the same\n// LINEAR: gfx.GFXFilter.LINEAR,\n// ANISOTROPIC: gfx.GFXFilter.ANISOTROPIC,\n// WRAP: gfx.GFXAddress.WRAP,\n// MIRROR: gfx.GFXAddress.MIRROR,\n// CLAMP: gfx.GFXAddress.CLAMP,\n// BORDER: gfx.GFXAddress.BORDER,\n// VIEWPORT: gfx.GFXDynamicState.VIEWPORT,\n// SCISSOR: gfx.GFXDynamicState.SCISSOR,\n// LINE_WIDTH: gfx.GFXDynamicState.LINE_WIDTH,\n// DEPTH_BIAS: gfx.GFXDynamicState.DEPTH_BIAS,\n// BLEND_CONSTANTS: gfx.GFXDynamicState.BLEND_CONSTANTS,\n// DEPTH_BOUNDS: gfx.GFXDynamicState.DEPTH_BOUNDS,\n// STENCIL_WRITE_MASK: gfx.GFXDynamicState.STENCIL_WRITE_MASK,\n// STENCIL_COMPARE_MASK: gfx.GFXDynamicState.STENCIL_COMPARE_MASK,\n// TRUE: true,\n// FALSE: false\n// };\nvar passParams = {\n BACK: enums.CULL_BACK,\n FRONT: enums.CULL_FRONT,\n NONE: enums.CULL_NONE,\n ADD: enums.BLEND_FUNC_ADD,\n SUB: enums.BLEND_FUNC_SUBTRACT,\n REV_SUB: enums.BLEND_FUNC_REVERSE_SUBTRACT,\n ZERO: enums.BLEND_ZERO,\n ONE: enums.BLEND_ONE,\n SRC_COLOR: enums.BLEND_SRC_COLOR,\n ONE_MINUS_SRC_COLOR: enums.BLEND_ONE_MINUS_SRC_COLOR,\n DST_COLOR: enums.BLEND_DST_COLOR,\n ONE_MINUS_DST_COLOR: enums.BLEND_ONE_MINUS_DST_COLOR,\n SRC_ALPHA: enums.BLEND_SRC_ALPHA,\n ONE_MINUS_SRC_ALPHA: enums.BLEND_ONE_MINUS_SRC_ALPHA,\n DST_ALPHA: enums.BLEND_DST_ALPHA,\n ONE_MINUS_DST_ALPHA: enums.BLEND_ONE_MINUS_DST_ALPHA,\n CONSTANT_COLOR: enums.BLEND_CONSTANT_COLOR,\n ONE_MINUS_CONSTANT_COLOR: enums.BLEND_ONE_MINUS_CONSTANT_COLOR,\n CONSTANT_ALPHA: enums.BLEND_CONSTANT_ALPHA,\n ONE_MINUS_CONSTANT_ALPHA: enums.BLEND_ONE_MINUS_CONSTANT_ALPHA,\n SRC_ALPHA_SATURATE: enums.BLEND_SRC_ALPHA_SATURATE,\n NEVER: enums.DS_FUNC_NEVER,\n LESS: enums.DS_FUNC_LESS,\n EQUAL: enums.DS_FUNC_EQUAL,\n LEQUAL: enums.DS_FUNC_LEQUAL,\n GREATER: enums.DS_FUNC_GREATER,\n NOTEQUAL: enums.DS_FUNC_NOTEQUAL,\n GEQUAL: enums.DS_FUNC_GEQUAL,\n ALWAYS: enums.DS_FUNC_ALWAYS,\n KEEP: enums.STENCIL_OP_KEEP,\n REPLACE: enums.STENCIL_OP_REPLACE,\n INCR: enums.STENCIL_OP_INCR,\n INCR_WRAP: enums.STENCIL_OP_INCR_WRAP,\n DECR: enums.STENCIL_OP_DECR,\n DECR_WRAP: enums.STENCIL_OP_DECR_WRAP,\n INVERT: enums.STENCIL_OP_INVERT\n};\nObject.assign(passParams, RenderPassStage);\n// for structural type checking\n// an 'any' key will check against all elements defined in that object\n// a key start with '$' means its essential, and can't be undefined\nvar effectStructure = {\n $techniques: [\n {\n $passes: [\n {\n depthStencilState: {},\n rasterizerState: {},\n blendState: { targets: [{}] },\n properties: { any: { sampler: {}, inspector: {} } }\n }\n ]\n }\n ]\n};\nvar mappings = {\n murmurhash2_32_gc: murmurhash2_32_gc,\n SamplerInfoIndex: SamplerInfoIndex,\n effectStructure: effectStructure,\n typeMap: typeMap,\n sizeMap: sizeMap,\n formatMap: formatMap,\n passParams: passParams,\n RenderQueue: RenderQueue,\n RenderPriority: RenderPriority,\n GFXGetTypeSize: GFXGetTypeSize,\n UniformBinding: UniformBinding\n};\n\nmodule.exports = mappings;\n","// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\nimport { RecyclePool } from '../memop';\nimport enums from '../enums';\nimport { Vec2, Vec4, Mat3, Mat4, Color, Vec3 } from '../../core/value-types';\nimport ProgramLib from './program-lib';\nimport View from './view';\nimport gfx from '../gfx';\n\nlet _m4_tmp = new Mat4();\n\nlet _stageInfos = new RecyclePool(() => {\n return {\n stage: null,\n items: null,\n };\n}, 8);\n\nlet _float2_pool = new RecyclePool(() => {\n return new Float32Array(2);\n}, 8);\n\nlet _float3_pool = new RecyclePool(() => {\n return new Float32Array(3);\n}, 8);\n\nlet _float4_pool = new RecyclePool(() => {\n return new Float32Array(4);\n}, 8);\n\nlet _float9_pool = new RecyclePool(() => {\n return new Float32Array(9);\n}, 8);\n\nlet _float16_pool = new RecyclePool(() => {\n return new Float32Array(16);\n}, 8);\n\nlet _float64_pool = new RecyclePool(() => {\n return new Float32Array(64);\n}, 8);\n\nlet _int2_pool = new RecyclePool(() => {\n return new Int32Array(2);\n}, 8);\n\nlet _int3_pool = new RecyclePool(() => {\n return new Int32Array(3);\n}, 8);\n\nlet _int4_pool = new RecyclePool(() => {\n return new Int32Array(4);\n}, 8);\n\nlet _int64_pool = new RecyclePool(() => {\n return new Int32Array(64);\n}, 8);\n\nexport default class Base {\n /**\n * @param {gfx.Device} device\n * @param {Object} opts\n * @param {gfx.Texture2D} opts.defaultTexture\n * @param {gfx.TextureCube} opts.defaultTextureCube\n */\n constructor (device, opts) {\n this._device = device;\n this._programLib = new ProgramLib(device);\n this._opts = opts;\n this._type2defaultValue = {\n [enums.PARAM_INT]: 0,\n [enums.PARAM_INT2]: new Vec2(0, 0),\n [enums.PARAM_INT3]: new Vec3(0, 0, 0),\n [enums.PARAM_INT4]: new Vec4(0, 0, 0, 0),\n [enums.PARAM_FLOAT]: 0.0,\n [enums.PARAM_FLOAT2]: new Vec2(0, 0),\n [enums.PARAM_FLOAT3]: new Vec3(0, 0, 0),\n [enums.PARAM_FLOAT4]: new Vec4(0, 0, 0, 0),\n [enums.PARAM_COLOR4]: new Color(0, 0, 0, 1),\n [enums.PARAM_MAT3]: new Mat3(),\n [enums.PARAM_MAT4]: new Mat4(),\n [enums.PARAM_TEXTURE_2D]: opts.defaultTexture,\n [enums.PARAM_TEXTURE_CUBE]: opts.defaultTextureCube,\n };\n this._stage2fn = {};\n this._usedTextureUnits = 0;\n\n this._viewPools = new RecyclePool(() => {\n return new View();\n }, 8);\n\n this._drawItemsPools = new RecyclePool(() => {\n return {\n model: null,\n node: null,\n ia: null,\n effect: null,\n defines: null,\n uniforms: null\n };\n }, 100);\n\n this._stageItemsPools = new RecyclePool(() => {\n return new RecyclePool(() => {\n return {\n model: null,\n node: null,\n ia: null,\n effect: null,\n defines: null,\n passes: [],\n sortKey: -1,\n uniforms: null\n };\n }, 100);\n }, 16);\n\n this._definesChanged = false;\n }\n\n _resetTextuerUnit () {\n this._usedTextureUnits = 0;\n }\n\n _allocTextureUnit () {\n const device = this._device;\n\n let unit = this._usedTextureUnits;\n if (unit >= device._caps.maxTextureUnits) {\n console.warn(`Trying to use ${unit} texture units while this GPU supports only ${device._caps.maxTextureUnits}`);\n }\n\n this._usedTextureUnits += 1;\n return unit;\n }\n\n _registerStage (name, fn) {\n this._stage2fn[name] = fn;\n }\n\n clear () {\n this._programLib.clear();\n this.reset();\n }\n\n reset () {\n this._viewPools.reset();\n this._stageItemsPools.reset();\n\n this._definesChanged = false;\n }\n\n _requestView () {\n return this._viewPools.add();\n }\n\n _render (view, scene) {\n const device = this._device;\n\n // setup framebuffer\n device.setFrameBuffer(view._framebuffer);\n\n // setup viewport\n device.setViewport(\n view._rect.x,\n view._rect.y,\n view._rect.w,\n view._rect.h\n );\n\n // setup clear\n let clearOpts = {};\n if (view._clearFlags & enums.CLEAR_COLOR) {\n clearOpts.color = Vec4.toArray([], view._color);\n }\n if (view._clearFlags & enums.CLEAR_DEPTH) {\n clearOpts.depth = view._depth;\n }\n if (view._clearFlags & enums.CLEAR_STENCIL) {\n clearOpts.stencil = view._stencil;\n }\n device.clear(clearOpts);\n\n // get all draw items\n this._drawItemsPools.reset();\n\n for (let i = 0; i < scene._models.length; ++i) {\n let model = scene._models.data[i];\n\n // filter model by view\n if ((model._cullingMask & view._cullingMask) === 0) {\n continue;\n }\n\n let drawItem = this._drawItemsPools.add();\n model.extractDrawItem(drawItem);\n }\n\n // dispatch draw items to different stage\n _stageInfos.reset();\n\n for (let i = 0; i < view._stages.length; ++i) {\n let stage = view._stages[i];\n let stageItems = this._stageItemsPools.add();\n stageItems.reset();\n\n for (let j = 0; j < this._drawItemsPools.length; ++j) {\n let drawItem = this._drawItemsPools.data[j];\n let passes = drawItem.effect.stagePasses[stage];\n if (!passes || passes.length === 0) continue;\n\n let stageItem = stageItems.add();\n stageItem.passes = passes;\n stageItem.model = drawItem.model;\n stageItem.node = drawItem.node;\n stageItem.ia = drawItem.ia;\n stageItem.effect = drawItem.effect;\n stageItem.defines = drawItem.defines;\n stageItem.sortKey = -1;\n stageItem.uniforms = drawItem.uniforms;\n }\n\n let stageInfo = _stageInfos.add();\n stageInfo.stage = stage;\n stageInfo.items = stageItems;\n }\n\n // render stages\n for (let i = 0; i < _stageInfos.length; ++i) {\n let info = _stageInfos.data[i];\n let fn = this._stage2fn[info.stage];\n fn(view, info.items);\n }\n }\n\n _setProperty (prop) {\n const device = this._device;\n let param = prop.value;\n\n if (param === undefined) {\n param = prop.val;\n }\n\n if (param === undefined) {\n param = this._type2defaultValue[prop.type];\n }\n\n if (param === undefined) {\n console.warn(`Failed to set technique property ${prop.name}, value not found.`);\n return;\n }\n\n if (\n prop.type === enums.PARAM_TEXTURE_2D ||\n prop.type === enums.PARAM_TEXTURE_CUBE\n ) {\n if (Array.isArray(param)) {\n if (param.length > prop.count) {\n console.error(`Failed to set property [${prop.name}] : The length of texture array [${param.length}] is bigger than [${prop.count}].`);\n return;\n }\n let slots = _int64_pool.add();\n for (let index = 0; index < param.length; ++index) {\n slots[index] = this._allocTextureUnit();\n }\n device.setTextureArray(prop.name, param, slots);\n } else {\n device.setTexture(prop.name, param, this._allocTextureUnit());\n }\n } else {\n if (prop.directly) {\n device.setUniformDirectly(prop.name, param);\n }\n else {\n device.setUniform(prop.name, param);\n }\n }\n }\n\n _draw (item) {\n const device = this._device;\n const programLib = this._programLib;\n const { node, ia, passes, effect } = item;\n\n // reset the pool\n // NOTE: we can use drawCounter optimize this\n // TODO: should be configurable\n _float2_pool.reset();\n _float3_pool.reset();\n _float4_pool.reset();\n _float9_pool.reset();\n _float16_pool.reset();\n _float64_pool.reset();\n _int2_pool.reset();\n _int3_pool.reset();\n _int4_pool.reset();\n _int64_pool.reset();\n\n // set common uniforms\n // TODO: try commit this depends on effect\n // {\n node.getWorldMatrix(_m4_tmp);\n device.setUniform('cc_matWorld', Mat4.toArray(_float16_pool.add(), _m4_tmp));\n\n // let wq = node.getWorldRotation(cc.quat());\n Mat4.invert(_m4_tmp, _m4_tmp);\n Mat4.transpose(_m4_tmp, _m4_tmp);\n device.setUniform('cc_matWorldIT', Mat4.toArray(_float16_pool.add(), _m4_tmp));\n // }\n\n let defines = this._defines;\n\n // for each pass\n for (let i = 0; i < passes.length; ++i) {\n let pass = passes[i];\n\n if (this._definesChanged) {\n pass._programKey = null;\n }\n\n let count = ia.count;\n\n // set vertex buffer\n if (ia._vertexBuffer) {\n device.setVertexBuffer(0, ia._vertexBuffer);\n }\n\n // set index buffer\n if (ia._indexBuffer) {\n device.setIndexBuffer(ia._indexBuffer);\n }\n\n // set primitive type\n device.setPrimitiveType(ia._primitiveType);\n\n // set program\n Object.setPrototypeOf(defines, pass._defines);\n\n let program = programLib.getProgram(pass, defines, effect.name);\n device.setProgram(program);\n\n let uniforms = program._uniforms;\n let variants = pass._properties;\n for (let j = 0; j < uniforms.length; j++) {\n let prop = variants[uniforms[j].name];\n if (prop !== undefined)\n this._setProperty(prop);\n }\n\n\n // cull mode\n device.setCullMode(pass._cullMode);\n\n // blend\n if (pass._blend) {\n device.enableBlend();\n device.setBlendFuncSep(\n pass._blendSrc,\n pass._blendDst,\n pass._blendSrcAlpha,\n pass._blendDstAlpha\n );\n device.setBlendEqSep(\n pass._blendEq,\n pass._blendAlphaEq\n );\n device.setBlendColor32(pass._blendColor);\n }\n\n // depth test & write\n if (pass._depthTest) {\n device.enableDepthTest();\n device.setDepthFunc(pass._depthFunc);\n }\n if (pass._depthWrite) {\n device.enableDepthWrite();\n }\n\n // stencil\n device.setStencilTest(pass._stencilTest);\n if (pass._stencilTest === gfx.STENCIL_ENABLE) {\n // front\n device.setStencilFuncFront(\n pass._stencilFuncFront,\n pass._stencilRefFront,\n pass._stencilMaskFront\n );\n device.setStencilOpFront(\n pass._stencilFailOpFront,\n pass._stencilZFailOpFront,\n pass._stencilZPassOpFront,\n pass._stencilWriteMaskFront\n );\n\n // back\n device.setStencilFuncBack(\n pass._stencilFuncBack,\n pass._stencilRefBack,\n pass._stencilMaskBack\n );\n device.setStencilOpBack(\n pass._stencilFailOpBack,\n pass._stencilZFailOpBack,\n pass._stencilZPassOpBack,\n pass._stencilWriteMaskBack\n );\n }\n\n // draw pass\n device.draw(ia._start, count);\n\n this._resetTextuerUnit();\n }\n }\n}\n","// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\nimport gfx from '../gfx';\n\nexport default class InputAssembler {\n constructor(vb, ib, pt = gfx.PT_TRIANGLES) {\n this._vertexBuffer = vb;\n this._indexBuffer = ib;\n this._primitiveType = pt;\n this._start = 0;\n this._count = -1;\n\n // TODO: instancing data\n // this._stream = 0;\n }\n\n /**\n * @property {Number} count The number of indices or vertices to dispatch in the draw call.\n */\n get count() {\n if (this._count !== -1) {\n return this._count;\n }\n\n if (this._indexBuffer) {\n return this._indexBuffer.count;\n }\n\n if (this._vertexBuffer) {\n return this._vertexBuffer.count;\n }\n\n return 0;\n }\n}","// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\nimport gfx from '../gfx';\nimport enums from '../enums';\nimport ValueType from '../../core/value-types/value-type';\n\nexport default class Pass {\n constructor (name, detailName, programName, stage, properties = {}, defines = {}) {\n this._name = name;\n this._detailName = detailName;\n this._programName = programName;\n this._programKey = null;\n this._stage = stage;\n this._properties = properties;\n this._defines = defines;\n\n // cullmode\n this._cullMode = gfx.CULL_BACK;\n\n // blending\n this._blend = false;\n this._blendEq = gfx.BLEND_FUNC_ADD;\n this._blendAlphaEq = gfx.BLEND_FUNC_ADD;\n this._blendSrc = gfx.BLEND_SRC_ALPHA;\n this._blendDst = gfx.BLEND_ONE_MINUS_SRC_ALPHA;\n this._blendSrcAlpha = gfx.BLEND_SRC_ALPHA;\n this._blendDstAlpha = gfx.BLEND_ONE_MINUS_SRC_ALPHA;\n this._blendColor = 0xffffffff;\n\n // depth\n this._depthTest = false;\n this._depthWrite = false;\n this._depthFunc = gfx.DS_FUNC_LESS,\n\n // stencil\n this._stencilTest = gfx.STENCIL_INHERIT;\n\n // front\n this._stencilFuncFront = gfx.DS_FUNC_ALWAYS;\n this._stencilRefFront = 0;\n this._stencilMaskFront = 0xff;\n this._stencilFailOpFront = gfx.STENCIL_OP_KEEP;\n this._stencilZFailOpFront = gfx.STENCIL_OP_KEEP;\n this._stencilZPassOpFront = gfx.STENCIL_OP_KEEP;\n this._stencilWriteMaskFront = 0xff;\n // back\n this._stencilFuncBack = gfx.DS_FUNC_ALWAYS;\n this._stencilRefBack = 0;\n this._stencilMaskBack = 0xff;\n this._stencilFailOpBack = gfx.STENCIL_OP_KEEP;\n this._stencilZFailOpBack = gfx.STENCIL_OP_KEEP;\n this._stencilZPassOpBack = gfx.STENCIL_OP_KEEP;\n this._stencilWriteMaskBack = 0xff;\n }\n\n setCullMode (cullMode = gfx.CULL_BACK) {\n this._cullMode = cullMode;\n }\n\n setBlend (\n enabled = false,\n blendEq = gfx.BLEND_FUNC_ADD,\n blendSrc = gfx.BLEND_SRC_ALPHA,\n blendDst = gfx.BLEND_ONE_MINUS_SRC_ALPHA,\n blendAlphaEq = gfx.BLEND_FUNC_ADD,\n blendSrcAlpha = gfx.BLEND_SRC_ALPHA,\n blendDstAlpha = gfx.BLEND_ONE_MINUS_SRC_ALPHA,\n blendColor = 0xffffffff\n ) {\n this._blend = enabled;\n this._blendEq = blendEq;\n this._blendSrc = blendSrc;\n this._blendDst = blendDst;\n this._blendAlphaEq = blendAlphaEq;\n this._blendSrcAlpha = blendSrcAlpha;\n this._blendDstAlpha = blendDstAlpha;\n this._blendColor = blendColor;\n }\n\n setDepth (\n depthTest = false,\n depthWrite = false,\n depthFunc = gfx.DS_FUNC_LESS\n ) {\n this._depthTest = depthTest;\n this._depthWrite = depthWrite;\n this._depthFunc = depthFunc;\n }\n\n setStencilFront (\n enabled = gfx.STENCIL_INHERIT,\n stencilFunc = gfx.DS_FUNC_ALWAYS,\n stencilRef = 0,\n stencilMask = 0xff,\n stencilFailOp = gfx.STENCIL_OP_KEEP,\n stencilZFailOp = gfx.STENCIL_OP_KEEP,\n stencilZPassOp = gfx.STENCIL_OP_KEEP,\n stencilWriteMask = 0xff\n ) {\n this._stencilTest = enabled;\n this._stencilFuncFront = stencilFunc;\n this._stencilRefFront = stencilRef;\n this._stencilMaskFront = stencilMask;\n this._stencilFailOpFront = stencilFailOp;\n this._stencilZFailOpFront = stencilZFailOp;\n this._stencilZPassOpFront = stencilZPassOp;\n this._stencilWriteMaskFront = stencilWriteMask;\n }\n\n setStencilEnabled (stencilTest = gfx.STENCIL_INHERIT) {\n this._stencilTest = stencilTest;\n }\n\n setStencilBack (\n stencilTest = gfx.STENCIL_INHERIT,\n stencilFunc = gfx.DS_FUNC_ALWAYS,\n stencilRef = 0,\n stencilMask = 0xff,\n stencilFailOp = gfx.STENCIL_OP_KEEP,\n stencilZFailOp = gfx.STENCIL_OP_KEEP,\n stencilZPassOp = gfx.STENCIL_OP_KEEP,\n stencilWriteMask = 0xff\n ) {\n this._stencilTest = stencilTest;\n this._stencilFuncBack = stencilFunc;\n this._stencilRefBack = stencilRef;\n this._stencilMaskBack = stencilMask;\n this._stencilFailOpBack = stencilFailOp;\n this._stencilZFailOpBack = stencilZFailOp;\n this._stencilZPassOpBack = stencilZPassOp;\n this._stencilWriteMaskBack = stencilWriteMask;\n }\n\n setStage (stage) {\n this._stage = stage;\n }\n\n setProperties (properties) {\n this._properties = properties;\n }\n\n getProperty (name) {\n if (!this._properties[name]) {\n return;\n }\n return this._properties[name].value;\n }\n\n setProperty (name, value, directly) {\n let prop = this._properties[name];\n if (!prop) {\n return false;\n }\n\n prop.directly = directly;\n\n if (Array.isArray(value)) {\n let array = prop.value;\n if (array.length !== value.length) {\n cc.warnID(9105, this._name, name);\n return;\n }\n for (let i = 0; i < value.length; i++) {\n array[i] = value[i];\n }\n }\n else {\n if (value && !ArrayBuffer.isView(value)) {\n if (prop.type === enums.PARAM_TEXTURE_2D) {\n prop.value = value.getImpl();\n }\n else if (value instanceof ValueType) {\n value.constructor.toArray(prop.value, value);\n }\n else {\n if (typeof value === 'object') {\n cc.warnID(9106, this._name, name);\n }\n prop.value = value;\n }\n }\n else {\n prop.value = value;\n }\n }\n\n return true;\n }\n\n getDefine (name) {\n return this._defines[name];\n }\n\n define (name, value, force) {\n let oldValue = this._defines[name];\n\n if (!force && oldValue === undefined) {\n return false;\n }\n\n if (oldValue !== value) {\n this._defines[name] = value;\n this._programKey = null;\n }\n\n return true;\n }\n\n clone () {\n let pass = new Pass(this._programName);\n Object.assign(pass, this);\n\n let newProperties = {};\n let properties = this._properties;\n for (let name in properties) {\n let prop = properties[name];\n let newProp = newProperties[name] = {};\n\n let value = prop.value;\n if (Array.isArray(value)) {\n newProp.value = value.concat();\n }\n else if (ArrayBuffer.isView(value)) {\n newProp.value = new value.__proto__.constructor(value);\n }\n else {\n newProp.value = value;\n }\n\n for (let name in prop) {\n if (name === 'value') continue;\n newProp[name] = prop[name];\n }\n }\n\n pass._properties = newProperties;\n pass._defines = Object.assign({}, this._defines);\n\n return pass;\n }\n}\n","// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\nimport gfx from '../gfx';\n\nlet _shdID = 0;\n\nfunction _generateDefines(tmpDefines, defines) {\n let results = [];\n for (let i = 0; i < tmpDefines.length; i++) {\n let name = tmpDefines[i].name;\n let value = defines[name];\n if (typeof value !== 'number') {\n value = value ? 1 : 0;\n }\n results.push(`#define ${name} ${value}`);\n }\n return results.join('\\n') + '\\n';\n}\n\nfunction _replaceMacroNums(string, tmpDefines, defines) {\n let tmp = string;\n\n for (let i = 0; i < tmpDefines.length; i++) {\n let name = tmpDefines[i].name;\n let value = defines[name];\n if (Number.isInteger(value)) {\n let reg = new RegExp(name, 'g');\n tmp = tmp.replace(reg, value);\n }\n }\n return tmp;\n}\n\nfunction _unrollLoops(string) {\n let pattern = /#pragma for (\\w+) in range\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)([\\s\\S]+?)#pragma endFor/g;\n function replace(match, index, begin, end, snippet) {\n let unroll = '';\n let parsedBegin = parseInt(begin);\n let parsedEnd = parseInt(end);\n if (parsedBegin.isNaN || parsedEnd.isNaN) {\n console.error('Unroll For Loops Error: begin and end of range must be an int num.');\n }\n for (let i = parsedBegin; i < parsedEnd; ++i) {\n unroll += snippet.replace(new RegExp(`{${index}}`, 'g'), i);\n }\n return unroll;\n }\n return string.replace(pattern, replace);\n}\n\nfunction _replaceHighp(string) {\n return string.replace(/\\bhighp\\b/g, 'mediump');\n}\n\nexport default class ProgramLib {\n /**\n * @param {gfx.Device} device\n */\n constructor(device) {\n this._device = device;\n\n // register templates\n this._templates = {};\n this._cache = {};\n\n this._checkPrecision();\n }\n\n clear () {\n this._templates = {};\n this._cache = {};\n }\n\n /**\n * @param {string} name\n * @param {string} vert\n * @param {string} frag\n * @param {Object[]} defines\n *\n * @example:\n * // this object is auto-generated from your actual shaders\n * let program = {\n * name: 'foobar',\n * vert: vertTmpl,\n * frag: fragTmpl,\n * defines: [\n * { name: 'shadow', type: 'boolean' },\n * { name: 'lightCount', type: 'number', min: 1, max: 4 }\n * ],\n * attributes: [{ name: 'a_position', type: 'vec3' }],\n * uniforms: [{ name: 'color', type: 'vec4' }],\n * extensions: ['GL_OES_standard_derivatives'],\n * };\n * programLib.define(program);\n */\n define(prog) {\n let { name, defines, glsl1 } = prog;\n let { vert, frag } = glsl1 || prog;\n if (this._templates[name]) {\n // console.warn(`Failed to define shader ${name}: already exists.`);\n return;\n }\n\n let id = ++_shdID;\n\n // calculate option mask offset\n let offset = 0;\n for (let i = 0; i < defines.length; ++i) {\n let def = defines[i];\n let cnt = 1;\n\n if (def.type === 'number') {\n let range = def.range || [];\n def.min = range[0] || 0;\n def.max = range[1] || 4;\n cnt = Math.ceil(Math.log2(def.max - def.min));\n\n def._map = function (value) {\n return (value - this.min) << this._offset;\n }.bind(def);\n } else { // boolean\n def._map = function (value) {\n if (value) {\n return 1 << this._offset;\n }\n return 0;\n }.bind(def);\n }\n\n def._offset = offset;\n offset += cnt;\n }\n\n let uniforms = prog.uniforms || [];\n\n if (prog.samplers) {\n for (let i = 0; i < prog.samplers.length; i++) {\n uniforms.push(prog.samplers[i])\n }\n }\n if (prog.blocks) {\n for (let i = 0; i < prog.blocks.length; i++) {\n let defines = prog.blocks[i].defines;\n let members = prog.blocks[i].members;\n for (let j = 0; j < members.length; j++) {\n uniforms.push({\n defines,\n name: members[j].name,\n type: members[j].type,\n })\n }\n }\n }\n\n // store it\n this._templates[name] = {\n id,\n name,\n vert,\n frag,\n defines,\n attributes: prog.attributes,\n uniforms,\n extensions: prog.extensions\n };\n }\n\n getTemplate(name) {\n return this._templates[name];\n }\n\n /**\n * Does this library has the specified program?\n * @param {string} name\n * @returns {boolean}\n */\n hasProgram(name) {\n return this._templates[name] !== undefined;\n }\n\n getKey(name, defines) {\n let tmpl = this._templates[name];\n let key = 0;\n for (let i = 0; i < tmpl.defines.length; ++i) {\n let tmplDefs = tmpl.defines[i];\n\n let value = defines[tmplDefs.name];\n if (value === undefined) {\n continue;\n }\n\n key |= tmplDefs._map(value);\n }\n\n // return key << 8 | tmpl.id;\n // key number maybe bigger than 32 bit, need use string to store value.\n return tmpl.id + ':' + key;\n }\n\n getProgram(pass, defines, errPrefix) {\n let key = pass._programKey = pass._programKey || this.getKey(pass._programName, defines);\n let program = this._cache[key];\n if (program) {\n return program;\n }\n\n // get template\n let tmpl = this._templates[pass._programName];\n let customDef = _generateDefines(tmpl.defines, defines);\n let vert = _replaceMacroNums(tmpl.vert, tmpl.defines, defines);\n vert = customDef + _unrollLoops(vert);\n if (!this._highpSupported) {\n vert = _replaceHighp(vert);\n }\n\n let frag = _replaceMacroNums(tmpl.frag, tmpl.defines, defines);\n frag = customDef + _unrollLoops(frag);\n if (!this._highpSupported) {\n frag = _replaceHighp(frag);\n }\n\n program = new gfx.Program(this._device, {\n vert,\n frag\n });\n let errors = program.link();\n if (errors) {\n let vertLines = vert.split('\\n');\n let fragLines = frag.split('\\n');\n let defineLength = tmpl.defines.length;\n errors.forEach(err => {\n let line = err.line - 1;\n let originLine = err.line - defineLength;\n\n let lines = err.type === 'vs' ? vertLines : fragLines;\n // let source = ` ${lines[line-1]}\\n>${lines[line]}\\n ${lines[line+1]}`;\n let source = lines[line];\n\n let info = err.info || `Failed to compile ${err.type} ${err.fileID} (ln ${originLine}): \\n ${err.message}: \\n ${source}`;\n cc.error(`${errPrefix} : ${info}`);\n })\n }\n this._cache[key] = program;\n\n return program;\n }\n\n _checkPrecision () {\n let gl = this._device._gl;\n let highpSupported = false;\n if (gl.getShaderPrecisionFormat) {\n let vertHighp = gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_FLOAT);\n let fragHighp = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT);\n highpSupported = (vertHighp && vertHighp.precision > 0) &&\n (fragHighp && fragHighp.precision > 0);\n }\n if (!highpSupported) {\n cc.warnID(9102);\n }\n this._highpSupported = highpSupported;\n }\n}\n","// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\nexport default class Technique {\n constructor(name, passes) {\n this._name = name;\n this._passes = passes;\n }\n\n get name () {\n return this._name;\n }\n\n get passes() {\n return this._passes;\n }\n\n clone () {\n let passes = [];\n for (let i = 0; i < this._passes.length; i++) {\n passes.push(this._passes[i].clone());\n }\n return new Technique(this._name, passes);\n }\n}","// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\nimport { Vec3, Mat4, Vec4 } from '../../core/value-types';\nimport enums from '../enums';\n\nlet _m4_tmp = new Mat4();\nlet _genID = 0;\n\n/**\n * A representation of a single camera view\n */\nexport default class View {\n /**\n * Setup a default view\n */\n constructor() {\n this._id = _genID++;\n\n // priority. the smaller one will be rendered first\n this._priority = 0;\n\n // viewport\n this._rect = {\n x: 0, y: 0, w: 1, h: 1\n };\n\n // TODO:\n // this._scissor = {\n // x: 0, y: 0, w: 1, h: 1\n // };\n\n // clear options\n this._color = new Vec4(0.3, 0.3, 0.3, 1);\n this._depth = 1;\n this._stencil = 0;\n this._clearFlags = enums.CLEAR_COLOR | enums.CLEAR_DEPTH;\n this._clearModel = null;\n\n // matrix\n this._matView = cc.mat4();\n this._matViewInv = cc.mat4();\n this._matProj = cc.mat4();\n this._matViewProj = cc.mat4();\n this._matInvViewProj = cc.mat4();\n\n // stages & framebuffer\n this._stages = [];\n this._cullingByID = false;\n this._framebuffer = null;\n\n this._shadowLight = null; // TODO: should not refer light in view.\n\n this._cullingMask = 0xffffffff;\n }\n\n /**\n * Get the view's forward direction\n * @param {Vec3} out the receiving vector\n * @returns {Vec3} the receiving vector\n */\n getForward(out) {\n let m = this._matView.m;\n return Vec3.set(\n out,\n -m[2],\n -m[6],\n -m[10]\n );\n }\n\n /**\n * Get the view's observing location\n * @param {Vec3} out the receiving vector\n * @returns {Vec3} the receiving vector\n */\n getPosition(out) {\n Mat4.invert(_m4_tmp, this._matView);\n return Mat4.getTranslation(out, _m4_tmp);\n }\n}\n","// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\nimport { typeMap } from './build/mappings'\n\nexport default {\n // projection\n PROJ_PERSPECTIVE: 0,\n PROJ_ORTHO: 1,\n\n // lights\n LIGHT_DIRECTIONAL: 0,\n LIGHT_POINT: 1,\n LIGHT_SPOT: 2,\n LIGHT_AMBIENT: 3,\n\n // shadows\n SHADOW_NONE: 0,\n SHADOW_HARD: 1,\n SHADOW_SOFT: 2,\n\n // parameter type\n PARAM_INT: typeMap.int,\n PARAM_INT2: typeMap.ivec2,\n PARAM_INT3: typeMap.ivec3,\n PARAM_INT4: typeMap.ivec4,\n PARAM_FLOAT: typeMap.float,\n PARAM_FLOAT2: typeMap.vec2,\n PARAM_FLOAT3: typeMap.vec3,\n PARAM_FLOAT4: typeMap.vec4,\n PARAM_MAT2: typeMap.mat2,\n PARAM_MAT3: typeMap.mat3,\n PARAM_MAT4: typeMap.mat4,\n PARAM_TEXTURE_2D: typeMap.sampler2D,\n PARAM_TEXTURE_CUBE: typeMap.samplerCube,\n\n // clear flags\n CLEAR_COLOR: 1,\n CLEAR_DEPTH: 2,\n CLEAR_STENCIL: 4,\n CLEAR_SKYBOX: 8,\n\n //\n BUFFER_VIEW_INT8: 0,\n BUFFER_VIEW_UINT8: 1,\n BUFFER_VIEW_INT16: 2,\n BUFFER_VIEW_UINT16: 3,\n BUFFER_VIEW_INT32: 4,\n BUFFER_VIEW_UINT32: 5,\n BUFFER_VIEW_FLOAT32: 6,\n};\n","import State from './state';\nimport { enums } from './enums';\n\nimport Texture2D from './texture-2d';\nimport TextureCube from './texture-cube';\n\nconst GL_INT = 5124;\nconst GL_FLOAT = 5126;\nconst GL_FLOAT_VEC2 = 35664;\nconst GL_FLOAT_VEC3 = 35665;\nconst GL_FLOAT_VEC4 = 35666;\nconst GL_INT_VEC2 = 35667;\nconst GL_INT_VEC3 = 35668;\nconst GL_INT_VEC4 = 35669;\nconst GL_BOOL = 35670;\nconst GL_BOOL_VEC2 = 35671;\nconst GL_BOOL_VEC3 = 35672;\nconst GL_BOOL_VEC4 = 35673;\nconst GL_FLOAT_MAT2 = 35674;\nconst GL_FLOAT_MAT3 = 35675;\nconst GL_FLOAT_MAT4 = 35676;\nconst GL_SAMPLER_2D = 35678;\nconst GL_SAMPLER_CUBE = 35680;\n\n/**\n * _type2uniformCommit\n */\nlet _type2uniformCommit = {\n [GL_INT]: function (gl, id, value) {\n gl.uniform1i(id, value);\n },\n\n [GL_FLOAT]: function (gl, id, value) {\n gl.uniform1f(id, value);\n },\n\n [GL_FLOAT_VEC2]: function (gl, id, value) {\n gl.uniform2fv(id, value);\n },\n\n [GL_FLOAT_VEC3]: function (gl, id, value) {\n gl.uniform3fv(id, value);\n },\n\n [GL_FLOAT_VEC4]: function (gl, id, value) {\n gl.uniform4fv(id, value);\n },\n\n [GL_INT_VEC2]: function (gl, id, value) {\n gl.uniform2iv(id, value);\n },\n\n [GL_INT_VEC3]: function (gl, id, value) {\n gl.uniform3iv(id, value);\n },\n\n [GL_INT_VEC4]: function (gl, id, value) {\n gl.uniform4iv(id, value);\n },\n\n [GL_BOOL]: function (gl, id, value) {\n gl.uniform1i(id, value);\n },\n\n [GL_BOOL_VEC2]: function (gl, id, value) {\n gl.uniform2iv(id, value);\n },\n\n [GL_BOOL_VEC3]: function (gl, id, value) {\n gl.uniform3iv(id, value);\n },\n\n [GL_BOOL_VEC4]: function (gl, id, value) {\n gl.uniform4iv(id, value);\n },\n\n [GL_FLOAT_MAT2]: function (gl, id, value) {\n gl.uniformMatrix2fv(id, false, value);\n },\n\n [GL_FLOAT_MAT3]: function (gl, id, value) {\n gl.uniformMatrix3fv(id, false, value);\n },\n\n [GL_FLOAT_MAT4]: function (gl, id, value) {\n gl.uniformMatrix4fv(id, false, value);\n },\n\n [GL_SAMPLER_2D]: function (gl, id, value) {\n gl.uniform1i(id, value);\n },\n\n [GL_SAMPLER_CUBE]: function (gl, id, value) {\n gl.uniform1i(id, value);\n },\n};\n\n/**\n * _type2uniformArrayCommit\n */\nlet _type2uniformArrayCommit = {\n [GL_INT]: function (gl, id, value) {\n gl.uniform1iv(id, value);\n },\n\n [GL_FLOAT]: function (gl, id, value) {\n gl.uniform1fv(id, value);\n },\n\n [GL_FLOAT_VEC2]: function (gl, id, value) {\n gl.uniform2fv(id, value);\n },\n\n [GL_FLOAT_VEC3]: function (gl, id, value) {\n gl.uniform3fv(id, value);\n },\n\n [GL_FLOAT_VEC4]: function (gl, id, value) {\n gl.uniform4fv(id, value);\n },\n\n [GL_INT_VEC2]: function (gl, id, value) {\n gl.uniform2iv(id, value);\n },\n\n [GL_INT_VEC3]: function (gl, id, value) {\n gl.uniform3iv(id, value);\n },\n\n [GL_INT_VEC4]: function (gl, id, value) {\n gl.uniform4iv(id, value);\n },\n\n [GL_BOOL]: function (gl, id, value) {\n gl.uniform1iv(id, value);\n },\n\n [GL_BOOL_VEC2]: function (gl, id, value) {\n gl.uniform2iv(id, value);\n },\n\n [GL_BOOL_VEC3]: function (gl, id, value) {\n gl.uniform3iv(id, value);\n },\n\n [GL_BOOL_VEC4]: function (gl, id, value) {\n gl.uniform4iv(id, value);\n },\n\n [GL_FLOAT_MAT2]: function (gl, id, value) {\n gl.uniformMatrix2fv(id, false, value);\n },\n\n [GL_FLOAT_MAT3]: function (gl, id, value) {\n gl.uniformMatrix3fv(id, false, value);\n },\n\n [GL_FLOAT_MAT4]: function (gl, id, value) {\n gl.uniformMatrix4fv(id, false, value);\n },\n\n [GL_SAMPLER_2D]: function (gl, id, value) {\n gl.uniform1iv(id, value);\n },\n\n [GL_SAMPLER_CUBE]: function (gl, id, value) {\n gl.uniform1iv(id, value);\n },\n};\n\n/**\n * _commitBlendStates\n */\nfunction _commitBlendStates(gl, cur, next) {\n // enable/disable blend\n if (cur.blend !== next.blend) {\n if (!next.blend) {\n gl.disable(gl.BLEND);\n return;\n }\n\n gl.enable(gl.BLEND);\n\n if (\n next.blendSrc === enums.BLEND_CONSTANT_COLOR ||\n next.blendSrc === enums.BLEND_ONE_MINUS_CONSTANT_COLOR ||\n next.blendDst === enums.BLEND_CONSTANT_COLOR ||\n next.blendDst === enums.BLEND_ONE_MINUS_CONSTANT_COLOR\n ) {\n gl.blendColor(\n (next.blendColor >> 24) / 255,\n (next.blendColor >> 16 & 0xff) / 255,\n (next.blendColor >> 8 & 0xff) / 255,\n (next.blendColor & 0xff) / 255\n );\n }\n\n if (next.blendSep) {\n gl.blendFuncSeparate(next.blendSrc, next.blendDst, next.blendSrcAlpha, next.blendDstAlpha);\n gl.blendEquationSeparate(next.blendEq, next.blendAlphaEq);\n } else {\n gl.blendFunc(next.blendSrc, next.blendDst);\n gl.blendEquation(next.blendEq);\n }\n\n return;\n }\n\n // nothing to update\n if (next.blend === false) {\n return;\n }\n\n // blend-color\n if (cur.blendColor !== next.blendColor) {\n gl.blendColor(\n (next.blendColor >> 24) / 255,\n (next.blendColor >> 16 & 0xff) / 255,\n (next.blendColor >> 8 & 0xff) / 255,\n (next.blendColor & 0xff) / 255\n );\n }\n\n // separate diff, reset all\n if (cur.blendSep !== next.blendSep) {\n if (next.blendSep) {\n gl.blendFuncSeparate(next.blendSrc, next.blendDst, next.blendSrcAlpha, next.blendDstAlpha);\n gl.blendEquationSeparate(next.blendEq, next.blendAlphaEq);\n } else {\n gl.blendFunc(next.blendSrc, next.blendDst);\n gl.blendEquation(next.blendEq);\n }\n\n return;\n }\n\n if (next.blendSep) {\n // blend-func-separate\n if (\n cur.blendSrc !== next.blendSrc ||\n cur.blendDst !== next.blendDst ||\n cur.blendSrcAlpha !== next.blendSrcAlpha ||\n cur.blendDstAlpha !== next.blendDstAlpha\n ) {\n gl.blendFuncSeparate(next.blendSrc, next.blendDst, next.blendSrcAlpha, next.blendDstAlpha);\n }\n\n // blend-equation-separate\n if (\n cur.blendEq !== next.blendEq ||\n cur.blendAlphaEq !== next.blendAlphaEq\n ) {\n gl.blendEquationSeparate(next.blendEq, next.blendAlphaEq);\n }\n } else {\n // blend-func\n if (\n cur.blendSrc !== next.blendSrc ||\n cur.blendDst !== next.blendDst\n ) {\n gl.blendFunc(next.blendSrc, next.blendDst);\n }\n\n // blend-equation\n if (cur.blendEq !== next.blendEq) {\n gl.blendEquation(next.blendEq);\n }\n }\n}\n\n/**\n * _commitDepthStates\n */\nfunction _commitDepthStates(gl, cur, next) {\n // enable/disable depth-test\n if (cur.depthTest !== next.depthTest) {\n if (!next.depthTest) {\n gl.disable(gl.DEPTH_TEST);\n return;\n }\n\n gl.enable(gl.DEPTH_TEST);\n gl.depthFunc(next.depthFunc);\n gl.depthMask(next.depthWrite);\n\n return;\n }\n\n // commit depth-write\n if (cur.depthWrite !== next.depthWrite) {\n gl.depthMask(next.depthWrite);\n }\n\n // check if depth-write enabled\n if (next.depthTest === false) {\n if (next.depthWrite) {\n next.depthTest = true;\n next.depthFunc = enums.DS_FUNC_ALWAYS;\n\n gl.enable(gl.DEPTH_TEST);\n gl.depthFunc(next.depthFunc);\n }\n\n return;\n }\n\n // depth-func\n if (cur.depthFunc !== next.depthFunc) {\n gl.depthFunc(next.depthFunc);\n }\n}\n\n/**\n * _commitStencilStates\n */\nfunction _commitStencilStates(gl, cur, next) {\n // inherit stencil states\n if (next.stencilTest === enums.STENCIL_INHERIT) {\n return;\n }\n\n if (next.stencilTest !== cur.stencilTest) {\n if (next.stencilTest === enums.STENCIL_DISABLE) {\n gl.disable(gl.STENCIL_TEST);\n return;\n }\n\n gl.enable(gl.STENCIL_TEST);\n\n if (next.stencilSep) {\n gl.stencilFuncSeparate(gl.FRONT, next.stencilFuncFront, next.stencilRefFront, next.stencilMaskFront);\n gl.stencilMaskSeparate(gl.FRONT, next.stencilWriteMaskFront);\n gl.stencilOpSeparate(gl.FRONT, next.stencilFailOpFront, next.stencilZFailOpFront, next.stencilZPassOpFront);\n gl.stencilFuncSeparate(gl.BACK, next.stencilFuncBack, next.stencilRefBack, next.stencilMaskBack);\n gl.stencilMaskSeparate(gl.BACK, next.stencilWriteMaskBack);\n gl.stencilOpSeparate(gl.BACK, next.stencilFailOpBack, next.stencilZFailOpBack, next.stencilZPassOpBack);\n } else {\n gl.stencilFunc(next.stencilFuncFront, next.stencilRefFront, next.stencilMaskFront);\n gl.stencilMask(next.stencilWriteMaskFront);\n gl.stencilOp(next.stencilFailOpFront, next.stencilZFailOpFront, next.stencilZPassOpFront);\n }\n\n return;\n }\n\n // fast return\n if (next.stencilTest === enums.STENCIL_DISABLE) {\n return;\n }\n\n if (cur.stencilSep !== next.stencilSep) {\n if (next.stencilSep) {\n gl.stencilFuncSeparate(gl.FRONT, next.stencilFuncFront, next.stencilRefFront, next.stencilMaskFront);\n gl.stencilMaskSeparate(gl.FRONT, next.stencilWriteMaskFront);\n gl.stencilOpSeparate(gl.FRONT, next.stencilFailOpFront, next.stencilZFailOpFront, next.stencilZPassOpFront);\n gl.stencilFuncSeparate(gl.BACK, next.stencilFuncBack, next.stencilRefBack, next.stencilMaskBack);\n gl.stencilMaskSeparate(gl.BACK, next.stencilWriteMaskBack);\n gl.stencilOpSeparate(gl.BACK, next.stencilFailOpBack, next.stencilZFailOpBack, next.stencilZPassOpBack);\n } else {\n gl.stencilFunc(next.stencilFuncFront, next.stencilRefFront, next.stencilMaskFront);\n gl.stencilMask(next.stencilWriteMaskFront);\n gl.stencilOp(next.stencilFailOpFront, next.stencilZFailOpFront, next.stencilZPassOpFront);\n }\n return;\n }\n\n if (next.stencilSep) {\n // front\n if (\n cur.stencilFuncFront !== next.stencilFuncFront ||\n cur.stencilRefFront !== next.stencilRefFront ||\n cur.stencilMaskFront !== next.stencilMaskFront\n ) {\n gl.stencilFuncSeparate(gl.FRONT, next.stencilFuncFront, next.stencilRefFront, next.stencilMaskFront);\n }\n if (cur.stencilWriteMaskFront !== next.stencilWriteMaskFront) {\n gl.stencilMaskSeparate(gl.FRONT, next.stencilWriteMaskFront);\n }\n if (\n cur.stencilFailOpFront !== next.stencilFailOpFront ||\n cur.stencilZFailOpFront !== next.stencilZFailOpFront ||\n cur.stencilZPassOpFront !== next.stencilZPassOpFront\n ) {\n gl.stencilOpSeparate(gl.FRONT, next.stencilFailOpFront, next.stencilZFailOpFront, next.stencilZPassOpFront);\n }\n\n // back\n if (\n cur.stencilFuncBack !== next.stencilFuncBack ||\n cur.stencilRefBack !== next.stencilRefBack ||\n cur.stencilMaskBack !== next.stencilMaskBack\n ) {\n gl.stencilFuncSeparate(gl.BACK, next.stencilFuncBack, next.stencilRefBack, next.stencilMaskBack);\n }\n if (cur.stencilWriteMaskBack !== next.stencilWriteMaskBack) {\n gl.stencilMaskSeparate(gl.BACK, next.stencilWriteMaskBack);\n }\n if (\n cur.stencilFailOpBack !== next.stencilFailOpBack ||\n cur.stencilZFailOpBack !== next.stencilZFailOpBack ||\n cur.stencilZPassOpBack !== next.stencilZPassOpBack\n ) {\n gl.stencilOpSeparate(gl.BACK, next.stencilFailOpBack, next.stencilZFailOpBack, next.stencilZPassOpBack);\n }\n } else {\n if (\n cur.stencilFuncFront !== next.stencilFuncFront ||\n cur.stencilRefFront !== next.stencilRefFront ||\n cur.stencilMaskFront !== next.stencilMaskFront\n ) {\n gl.stencilFunc(next.stencilFuncFront, next.stencilRefFront, next.stencilMaskFront);\n }\n if (cur.stencilWriteMaskFront !== next.stencilWriteMaskFront) {\n gl.stencilMask(next.stencilWriteMaskFront);\n }\n if (\n cur.stencilFailOpFront !== next.stencilFailOpFront ||\n cur.stencilZFailOpFront !== next.stencilZFailOpFront ||\n cur.stencilZPassOpFront !== next.stencilZPassOpFront\n ) {\n gl.stencilOp(next.stencilFailOpFront, next.stencilZFailOpFront, next.stencilZPassOpFront);\n }\n }\n\n}\n\n/**\n * _commitCullMode\n */\nfunction _commitCullMode(gl, cur, next) {\n if (cur.cullMode === next.cullMode) {\n return;\n }\n\n if (next.cullMode === enums.CULL_NONE) {\n gl.disable(gl.CULL_FACE);\n return;\n }\n\n gl.enable(gl.CULL_FACE);\n gl.cullFace(next.cullMode);\n}\n\n/**\n * _commitVertexBuffers\n */\nfunction _commitVertexBuffers(device, gl, cur, next) {\n let attrsDirty = false;\n\n // nothing changed for vertex buffer\n if (next.maxStream === -1) {\n return;\n }\n\n if (cur.maxStream !== next.maxStream) {\n attrsDirty = true;\n } else if (cur.program !== next.program) {\n attrsDirty = true;\n } else {\n for (let i = 0; i < next.maxStream + 1; ++i) {\n if (\n cur.vertexBuffers[i] !== next.vertexBuffers[i] ||\n cur.vertexBufferOffsets[i] !== next.vertexBufferOffsets[i]\n ) {\n attrsDirty = true;\n break;\n }\n }\n }\n\n if (attrsDirty) {\n for (let i = 0; i < device._caps.maxVertexAttribs; ++i) {\n device._newAttributes[i] = 0;\n }\n\n for (let i = 0; i < next.maxStream + 1; ++i) {\n let vb = next.vertexBuffers[i];\n let vbOffset = next.vertexBufferOffsets[i];\n if (!vb || vb._glID === -1) {\n continue;\n }\n\n gl.bindBuffer(gl.ARRAY_BUFFER, vb._glID);\n\n for (let j = 0; j < next.program._attributes.length; ++j) {\n let attr = next.program._attributes[j];\n\n let el = vb._format.element(attr.name);\n if (!el) {\n console.warn(`Can not find vertex attribute: ${attr.name}`);\n continue;\n }\n\n if (device._enabledAttributes[attr.location] === 0) {\n gl.enableVertexAttribArray(attr.location);\n device._enabledAttributes[attr.location] = 1;\n }\n device._newAttributes[attr.location] = 1;\n\n gl.vertexAttribPointer(\n attr.location,\n el.num,\n el.type,\n el.normalize,\n el.stride,\n el.offset + vbOffset * el.stride\n );\n }\n }\n\n // disable unused attributes\n for (let i = 0; i < device._caps.maxVertexAttribs; ++i) {\n if (device._enabledAttributes[i] !== device._newAttributes[i]) {\n gl.disableVertexAttribArray(i);\n device._enabledAttributes[i] = 0;\n }\n }\n }\n}\n\n/**\n * _commitTextures\n */\nfunction _commitTextures(gl, cur, next) {\n for (let i = 0; i < next.maxTextureSlot + 1; ++i) {\n if (cur.textureUnits[i] !== next.textureUnits[i]) {\n let texture = next.textureUnits[i];\n if (texture && texture._glID !== -1) {\n gl.activeTexture(gl.TEXTURE0 + i);\n gl.bindTexture(texture._target, texture._glID);\n }\n }\n }\n}\n\n/**\n * _attach\n */\nfunction _attach(gl, location, attachment, face = 0) {\n if (attachment instanceof Texture2D) {\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n location,\n gl.TEXTURE_2D,\n attachment._glID,\n 0\n );\n } else if (attachment instanceof TextureCube) {\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n location,\n gl.TEXTURE_CUBE_MAP_POSITIVE_X + face,\n attachment._glID,\n 0\n );\n } else {\n gl.framebufferRenderbuffer(\n gl.FRAMEBUFFER,\n location,\n gl.RENDERBUFFER,\n attachment._glID\n );\n }\n}\n\nexport default class Device {\n /**\n * @property caps\n */\n get caps() {\n return this._caps;\n }\n\n /**\n * @param {HTMLElement} canvasEL\n * @param {object} opts\n */\n constructor(canvasEL, opts) {\n let gl;\n\n // default options\n opts = opts || {};\n if (opts.alpha === undefined) {\n opts.alpha = false;\n }\n if (opts.stencil === undefined) {\n opts.stencil = true;\n }\n if (opts.depth === undefined) {\n opts.depth = true;\n }\n if (opts.antialias === undefined) {\n opts.antialias = false;\n }\n // NOTE: it is said the performance improved in mobile device with this flag off.\n if (opts.preserveDrawingBuffer === undefined) {\n opts.preserveDrawingBuffer = false;\n }\n\n try {\n gl = canvasEL.getContext('webgl', opts)\n || canvasEL.getContext('experimental-webgl', opts)\n || canvasEL.getContext('webkit-3d', opts)\n || canvasEL.getContext('moz-webgl', opts);\n } catch (err) {\n console.error(err);\n return;\n }\n\n // No errors are thrown using try catch\n // Tested through ios baidu browser 4.14.1\n if (!gl) {\n console.error('This device does not support webgl');\n }\n\n // statics\n /**\n * @type {WebGLRenderingContext}\n */\n this._gl = gl;\n this._extensions = {};\n this._caps = {}; // capability\n this._stats = {\n texture: 0,\n vb: 0,\n ib: 0,\n drawcalls: 0,\n };\n\n // https://developer.mozilla.org/zh-CN/docs/Web/API/WebGL_API/Using_Extensions\n this._initExtensions([\n 'EXT_texture_filter_anisotropic',\n 'EXT_shader_texture_lod',\n 'OES_standard_derivatives',\n 'OES_texture_float',\n 'OES_texture_float_linear',\n 'OES_texture_half_float',\n 'OES_texture_half_float_linear',\n 'OES_vertex_array_object',\n 'WEBGL_compressed_texture_atc',\n 'WEBGL_compressed_texture_etc',\n 'WEBGL_compressed_texture_etc1',\n 'WEBGL_compressed_texture_pvrtc',\n 'WEBGL_compressed_texture_s3tc',\n 'WEBGL_depth_texture',\n 'WEBGL_draw_buffers',\n ]);\n this._initCaps();\n this._initStates();\n\n // runtime\n State.initDefault(this);\n this._current = new State(this);\n this._next = new State(this);\n this._uniforms = {}; // name: { value, num, dirty }\n this._vx = this._vy = this._vw = this._vh = 0;\n this._sx = this._sy = this._sw = this._sh = 0;\n this._framebuffer = null;\n\n //\n this._enabledAttributes = new Array(this._caps.maxVertexAttribs);\n this._newAttributes = new Array(this._caps.maxVertexAttribs);\n\n for (let i = 0; i < this._caps.maxVertexAttribs; ++i) {\n this._enabledAttributes[i] = 0;\n this._newAttributes[i] = 0;\n }\n }\n\n _initExtensions(extensions) {\n const gl = this._gl;\n\n for (let i = 0; i < extensions.length; ++i) {\n let name = extensions[i];\n let vendorPrefixes = [\"\", \"WEBKIT_\", \"MOZ_\"];\n\n for (var j = 0; j < vendorPrefixes.length; j++) {\n try {\n let ext = gl.getExtension(vendorPrefixes[j] + name);\n if (ext) {\n this._extensions[name] = ext;\n break;\n }\n } catch (e) {\n console.error(e);\n }\n }\n }\n }\n\n _initCaps() {\n const gl = this._gl;\n const extDrawBuffers = this.ext('WEBGL_draw_buffers');\n\n this._caps.maxVertexStreams = 4;\n this._caps.maxVertexTextures = gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS);\n this._caps.maxFragUniforms = gl.getParameter(gl.MAX_FRAGMENT_UNIFORM_VECTORS);\n this._caps.maxTextureUnits = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS);\n this._caps.maxVertexAttribs = gl.getParameter(gl.MAX_VERTEX_ATTRIBS);\n this._caps.maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE);\n\n this._caps.maxDrawBuffers = extDrawBuffers ? gl.getParameter(extDrawBuffers.MAX_DRAW_BUFFERS_WEBGL) : 1;\n this._caps.maxColorAttachments = extDrawBuffers ? gl.getParameter(extDrawBuffers.MAX_COLOR_ATTACHMENTS_WEBGL) : 1;\n }\n\n _initStates() {\n const gl = this._gl;\n\n // gl.frontFace(gl.CCW);\n gl.disable(gl.BLEND);\n gl.blendFunc(gl.ONE, gl.ZERO);\n gl.blendEquation(gl.FUNC_ADD);\n gl.blendColor(1,1,1,1);\n\n gl.colorMask(true, true, true, true);\n\n gl.enable(gl.CULL_FACE);\n gl.cullFace(gl.BACK);\n\n gl.disable(gl.DEPTH_TEST);\n gl.depthFunc(gl.LESS);\n gl.depthMask(false);\n gl.disable(gl.POLYGON_OFFSET_FILL);\n gl.depthRange(0,1);\n\n gl.disable(gl.STENCIL_TEST);\n gl.stencilFunc(gl.ALWAYS, 0, 0xFF);\n gl.stencilMask(0xFF);\n gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP);\n\n // TODO:\n // this.setAlphaToCoverage(false);\n // this.setTransformFeedbackBuffer(null);\n // this.setRaster(true);\n // this.setDepthBias(false);\n\n gl.clearDepth(1);\n gl.clearColor(0, 0, 0, 0);\n gl.clearStencil(0);\n\n gl.disable(gl.SCISSOR_TEST);\n }\n\n _restoreTexture(unit) {\n const gl = this._gl;\n\n let texture = this._current.textureUnits[unit];\n if (texture && texture._glID !== -1) {\n gl.bindTexture(texture._target, texture._glID);\n } else {\n gl.bindTexture(gl.TEXTURE_2D, null);\n }\n }\n\n _restoreIndexBuffer () {\n const gl = this._gl;\n\n let ib = this._current.indexBuffer;\n if (ib && ib._glID !== -1) {\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ib._glID);\n }\n else {\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);\n }\n }\n\n /**\n * @method ext\n * @param {string} name\n */\n ext(name) {\n return this._extensions[name];\n }\n\n allowFloatTexture() {\n return this.ext(\"OES_texture_float\") != null;\n }\n\n // ===============================\n // Immediate Settings\n // ===============================\n\n /**\n * @method setFrameBuffer\n * @param {FrameBuffer} fb - null means use the backbuffer\n */\n setFrameBuffer(fb) {\n if (this._framebuffer === fb) {\n return;\n }\n\n this._framebuffer = fb;\n const gl = this._gl;\n\n if (!fb) {\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n return;\n }\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, fb._glID);\n\n let numColors = fb._colors.length;\n for (let i = 0; i < numColors; ++i) {\n let colorBuffer = fb._colors[i];\n _attach(gl, gl.COLOR_ATTACHMENT0 + i, colorBuffer);\n\n // TODO: what about cubemap face??? should be the target parameter for colorBuffer\n }\n for (let i = numColors; i < this._caps.maxColorAttachments; ++i) {\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0 + i,\n gl.TEXTURE_2D,\n null,\n 0\n );\n }\n\n if (fb._depth) {\n _attach(gl, gl.DEPTH_ATTACHMENT, fb._depth);\n }\n\n if (fb._stencil) {\n _attach(gl, gl.STENCIL_ATTACHMENT, fb._stencil);\n }\n\n if (fb._depthStencil) {\n _attach(gl, gl.DEPTH_STENCIL_ATTACHMENT, fb._depthStencil);\n }\n }\n\n /**\n * @method setViewport\n * @param {Number} x\n * @param {Number} y\n * @param {Number} w\n * @param {Number} h\n */\n setViewport(x, y, w, h) {\n if (\n this._vx !== x ||\n this._vy !== y ||\n this._vw !== w ||\n this._vh !== h\n ) {\n this._gl.viewport(x, y, w, h);\n this._vx = x;\n this._vy = y;\n this._vw = w;\n this._vh = h;\n }\n }\n\n /**\n * @method setScissor\n * @param {Number} x\n * @param {Number} y\n * @param {Number} w\n * @param {Number} h\n */\n setScissor(x, y, w, h) {\n if (\n this._sx !== x ||\n this._sy !== y ||\n this._sw !== w ||\n this._sh !== h\n ) {\n this._gl.scissor(x, y, w, h);\n this._sx = x;\n this._sy = y;\n this._sw = w;\n this._sh = h;\n }\n }\n\n /**\n * @method clear\n * @param {Object} opts\n * @param {Array} opts.color\n * @param {Number} opts.depth\n * @param {Number} opts.stencil\n */\n clear(opts) {\n if (opts.color === undefined && opts.depth === undefined && opts.stencil === undefined) {\n return;\n }\n const gl = this._gl;\n let flags = 0;\n\n if (opts.color !== undefined) {\n flags |= gl.COLOR_BUFFER_BIT;\n gl.clearColor(opts.color[0], opts.color[1], opts.color[2], opts.color[3]);\n }\n\n if (opts.depth !== undefined) {\n flags |= gl.DEPTH_BUFFER_BIT;\n gl.clearDepth(opts.depth);\n\n gl.enable(gl.DEPTH_TEST);\n gl.depthMask(true);\n gl.depthFunc(gl.ALWAYS);\n }\n\n if (opts.stencil !== undefined) {\n flags |= gl.STENCIL_BUFFER_BIT;\n gl.clearStencil(opts.stencil);\n }\n\n gl.clear(flags);\n\n // restore depth-write\n if (opts.depth !== undefined) {\n if (this._current.depthTest === false) {\n gl.disable(gl.DEPTH_TEST);\n } else {\n if (this._current.depthWrite === false) {\n gl.depthMask(false);\n }\n if (this._current.depthFunc !== enums.DS_FUNC_ALWAYS) {\n gl.depthFunc(this._current.depthFunc);\n }\n }\n }\n }\n\n // ===============================\n // Deferred States\n // ===============================\n\n /**\n * @method enableBlend\n */\n enableBlend() {\n this._next.blend = true;\n }\n\n /**\n * @method enableDepthTest\n */\n enableDepthTest() {\n this._next.depthTest = true;\n }\n\n /**\n * @method enableDepthWrite\n */\n enableDepthWrite() {\n this._next.depthWrite = true;\n }\n\n /**\n * @method enableStencilTest\n * @param {Number} stencilTest\n */\n setStencilTest(stencilTest) {\n this._next.stencilTest = stencilTest;\n }\n\n /**\n * @method setStencilFunc\n * @param {DS_FUNC_*} func\n * @param {Number} ref\n * @param {Number} mask\n */\n setStencilFunc(func, ref, mask) {\n this._next.stencilSep = false;\n this._next.stencilFuncFront = this._next.stencilFuncBack = func;\n this._next.stencilRefFront = this._next.stencilRefBack = ref;\n this._next.stencilMaskFront = this._next.stencilMaskBack = mask;\n }\n\n /**\n * @method setStencilFuncFront\n * @param {DS_FUNC_*} func\n * @param {Number} ref\n * @param {Number} mask\n */\n setStencilFuncFront(func, ref, mask) {\n this._next.stencilSep = true;\n this._next.stencilFuncFront = func;\n this._next.stencilRefFront = ref;\n this._next.stencilMaskFront = mask;\n }\n\n /**\n * @method setStencilFuncBack\n * @param {DS_FUNC_*} func\n * @param {Number} ref\n * @param {Number} mask\n */\n setStencilFuncBack(func, ref, mask) {\n this._next.stencilSep = true;\n this._next.stencilFuncBack = func;\n this._next.stencilRefBack = ref;\n this._next.stencilMaskBack = mask;\n }\n\n /**\n * @method setStencilOp\n * @param {STENCIL_OP_*} failOp\n * @param {STENCIL_OP_*} zFailOp\n * @param {STENCIL_OP_*} zPassOp\n * @param {Number} writeMask\n */\n setStencilOp(failOp, zFailOp, zPassOp, writeMask) {\n this._next.stencilFailOpFront = this._next.stencilFailOpBack = failOp;\n this._next.stencilZFailOpFront = this._next.stencilZFailOpBack = zFailOp;\n this._next.stencilZPassOpFront = this._next.stencilZPassOpBack = zPassOp;\n this._next.stencilWriteMaskFront = this._next.stencilWriteMaskBack = writeMask;\n }\n\n /**\n * @method setStencilOpFront\n * @param {STENCIL_OP_*} failOp\n * @param {STENCIL_OP_*} zFailOp\n * @param {STENCIL_OP_*} zPassOp\n * @param {Number} writeMask\n */\n setStencilOpFront(failOp, zFailOp, zPassOp, writeMask) {\n this._next.stencilSep = true;\n this._next.stencilFailOpFront = failOp;\n this._next.stencilZFailOpFront = zFailOp;\n this._next.stencilZPassOpFront = zPassOp;\n this._next.stencilWriteMaskFront = writeMask;\n }\n\n /**\n * @method setStencilOpBack\n * @param {STENCIL_OP_*} failOp\n * @param {STENCIL_OP_*} zFailOp\n * @param {STENCIL_OP_*} zPassOp\n * @param {Number} writeMask\n */\n setStencilOpBack(failOp, zFailOp, zPassOp, writeMask) {\n this._next.stencilSep = true;\n this._next.stencilFailOpBack = failOp;\n this._next.stencilZFailOpBack = zFailOp;\n this._next.stencilZPassOpBack = zPassOp;\n this._next.stencilWriteMaskBack = writeMask;\n }\n\n /**\n * @method setDepthFunc\n * @param {DS_FUNC_*} depthFunc\n */\n setDepthFunc(depthFunc) {\n this._next.depthFunc = depthFunc;\n }\n\n /**\n * @method setBlendColor32\n * @param {Number} rgba\n */\n setBlendColor32(rgba) {\n this._next.blendColor = rgba;\n }\n\n /**\n * @method setBlendColor\n * @param {Number} r\n * @param {Number} g\n * @param {Number} b\n * @param {Number} a\n */\n setBlendColor(r, g, b, a) {\n this._next.blendColor = ((r * 255) << 24 | (g * 255) << 16 | (b * 255) << 8 | a * 255) >>> 0;\n }\n\n /**\n * @method setBlendFunc\n * @param {BELND_*} src\n * @param {BELND_*} dst\n */\n setBlendFunc(src, dst) {\n this._next.blendSep = false;\n this._next.blendSrc = src;\n this._next.blendDst = dst;\n }\n\n /**\n * @method setBlendFuncSep\n * @param {BELND_*} src\n * @param {BELND_*} dst\n * @param {BELND_*} srcAlpha\n * @param {BELND_*} dstAlpha\n */\n setBlendFuncSep(src, dst, srcAlpha, dstAlpha) {\n this._next.blendSep = true;\n this._next.blendSrc = src;\n this._next.blendDst = dst;\n this._next.blendSrcAlpha = srcAlpha;\n this._next.blendDstAlpha = dstAlpha;\n }\n\n /**\n * @method setBlendEq\n * @param {BELND_FUNC_*} eq\n */\n setBlendEq(eq) {\n this._next.blendSep = false;\n this._next.blendEq = eq;\n }\n\n /**\n * @method setBlendEqSep\n * @param {BELND_FUNC_*} eq\n * @param {BELND_FUNC_*} alphaEq\n */\n setBlendEqSep(eq, alphaEq) {\n this._next.blendSep = true;\n this._next.blendEq = eq;\n this._next.blendAlphaEq = alphaEq;\n }\n\n /**\n * @method setCullMode\n * @param {CULL_*} mode\n */\n setCullMode(mode) {\n this._next.cullMode = mode;\n }\n\n /**\n * @method setVertexBuffer\n * @param {Number} stream\n * @param {VertexBuffer} buffer\n * @param {Number} start - start vertex\n */\n setVertexBuffer(stream, buffer, start = 0) {\n this._next.vertexBuffers[stream] = buffer;\n this._next.vertexBufferOffsets[stream] = start;\n if (this._next.maxStream < stream) {\n this._next.maxStream = stream;\n }\n }\n\n /**\n * @method setIndexBuffer\n * @param {IndexBuffer} buffer\n */\n setIndexBuffer(buffer) {\n this._next.indexBuffer = buffer;\n }\n\n /**\n * @method setProgram\n * @param {Program} program\n */\n setProgram(program) {\n this._next.program = program;\n }\n\n /**\n * @method setTexture\n * @param {String} name\n * @param {Texture} texture\n * @param {Number} slot\n */\n setTexture(name, texture, slot) {\n if (slot >= this._caps.maxTextureUnits) {\n console.warn(`Can not set texture ${name} at stage ${slot}, max texture exceed: ${this._caps.maxTextureUnits}`);\n return;\n }\n\n this._next.textureUnits[slot] = texture;\n this.setUniform(name, slot);\n\n if (this._next.maxTextureSlot < slot) {\n this._next.maxTextureSlot = slot;\n }\n }\n\n /**\n * @method setTextureArray\n * @param {String} name\n * @param {Array} textures\n * @param {Int32Array} slots\n */\n setTextureArray(name, textures, slots) {\n let len = textures.length;\n if (len >= this._caps.maxTextureUnits) {\n console.warn(`Can not set ${len} textures for ${name}, max texture exceed: ${this._caps.maxTextureUnits}`);\n return;\n }\n for (let i = 0; i < len; ++i) {\n let slot = slots[i];\n this._next.textureUnits[slot] = textures[i];\n\n if (this._next.maxTextureSlot < slot) {\n this._next.maxTextureSlot = slot;\n }\n }\n this.setUniform(name, slots);\n }\n\n /**\n * @method setUniform\n * @param {String} name\n * @param {*} value\n */\n setUniform(name, value) {\n let uniform = this._uniforms[name];\n\n let sameType = false;\n let isArray = false, isFloat32Array = false, isInt32Array = false;\n do {\n if (!uniform) {\n break;\n }\n\n isFloat32Array = Array.isArray(value) || value instanceof Float32Array;\n isInt32Array = value instanceof Int32Array;\n isArray = isFloat32Array || isInt32Array;\n if (uniform.isArray !== isArray) {\n break;\n }\n\n if (uniform.isArray && uniform.value.length !== value.length) {\n break;\n }\n\n sameType = true;\n } while (false);\n\n if (!sameType) {\n let newValue = value;\n if (isFloat32Array) {\n newValue = new Float32Array(value);\n }\n else if (isInt32Array) {\n newValue = new Int32Array(value);\n }\n\n uniform = {\n dirty: true,\n value: newValue,\n isArray: isArray\n };\n } else {\n let oldValue = uniform.value;\n let dirty = false;\n if (uniform.isArray) {\n for (let i = 0, l = oldValue.length; i < l; i++) {\n if (oldValue[i] !== value[i]) {\n dirty = true;\n oldValue[i] = value[i];\n }\n }\n }\n else {\n if (oldValue !== value) {\n dirty = true;\n uniform.value = value;\n }\n }\n\n if (dirty) {\n uniform.dirty = true;\n }\n }\n this._uniforms[name] = uniform;\n }\n\n setUniformDirectly(name, value) {\n let uniform = this._uniforms[name];\n if (!uniform) {\n this._uniforms[name] = uniform = {};\n }\n uniform.dirty = true;\n uniform.value = value;\n }\n\n /**\n * @method setPrimitiveType\n * @param {PT_*} type\n */\n setPrimitiveType(type) {\n this._next.primitiveType = type;\n }\n\n /**\n * @method resetDrawCalls\n */\n resetDrawCalls () {\n this._stats.drawcalls = 0;\n }\n \n /**\n * @method getDrawCalls\n */\n getDrawCalls () {\n return this._stats.drawcalls;\n }\n\n /**\n * @method draw\n * @param {Number} base\n * @param {Number} count\n */\n draw(base, count) {\n const gl = this._gl;\n let cur = this._current;\n let next = this._next;\n\n // commit blend\n _commitBlendStates(gl, cur, next);\n\n // commit depth\n _commitDepthStates(gl, cur, next);\n\n // commit stencil\n _commitStencilStates(gl, cur, next);\n\n // commit cull\n _commitCullMode(gl, cur, next);\n\n // commit vertex-buffer\n _commitVertexBuffers(this, gl, cur, next);\n\n // commit index-buffer\n if (cur.indexBuffer !== next.indexBuffer) {\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, next.indexBuffer && next.indexBuffer._glID !== -1 ? next.indexBuffer._glID : null);\n }\n\n // commit program\n let programDirty = false;\n if (cur.program !== next.program) {\n if (next.program._linked) {\n gl.useProgram(next.program._glID);\n } else {\n console.warn('Failed to use program: has not linked yet.');\n }\n programDirty = true;\n }\n\n // commit texture/sampler\n _commitTextures(gl, cur, next);\n\n // commit uniforms\n for (let i = 0; i < next.program._uniforms.length; ++i) {\n let uniformInfo = next.program._uniforms[i];\n let uniform = this._uniforms[uniformInfo.name];\n if (!uniform) {\n // console.warn(`Can not find uniform ${uniformInfo.name}`);\n continue;\n }\n\n if (!programDirty && !uniform.dirty) {\n continue;\n }\n\n uniform.dirty = false;\n\n // TODO: please consider array uniform: uniformInfo.size > 0\n\n let commitFunc = (uniformInfo.size === undefined) ? _type2uniformCommit[uniformInfo.type] : _type2uniformArrayCommit[uniformInfo.type];\n if (!commitFunc) {\n console.warn(`Can not find commit function for uniform ${uniformInfo.name}`);\n continue;\n }\n\n commitFunc(gl, uniformInfo.location, uniform.value);\n }\n\n if (count) {\n // drawPrimitives\n if (next.indexBuffer) {\n gl.drawElements(\n this._next.primitiveType,\n count,\n next.indexBuffer._format,\n base * next.indexBuffer._bytesPerIndex\n );\n } else {\n gl.drawArrays(\n this._next.primitiveType,\n base,\n count\n );\n }\n\n // update stats\n this._stats.drawcalls++;\n }\n\n // TODO: autogen mipmap for color buffer\n // if (this._framebuffer && this._framebuffer.colors[0].mipmap) {\n // gl.bindTexture(this._framebuffer.colors[i]._target, colors[i]._glID);\n // gl.generateMipmap(this._framebuffer.colors[i]._target);\n // }\n\n // reset states\n cur.set(next);\n next.reset();\n }\n}","const GL_NEAREST = 9728; // gl.NEAREST\nconst GL_LINEAR = 9729; // gl.LINEAR\nconst GL_NEAREST_MIPMAP_NEAREST = 9984; // gl.NEAREST_MIPMAP_NEAREST\nconst GL_LINEAR_MIPMAP_NEAREST = 9985; // gl.LINEAR_MIPMAP_NEAREST\nconst GL_NEAREST_MIPMAP_LINEAR = 9986; // gl.NEAREST_MIPMAP_LINEAR\nconst GL_LINEAR_MIPMAP_LINEAR = 9987; // gl.LINEAR_MIPMAP_LINEAR\n\n// const GL_BYTE = 5120; // gl.BYTE\nconst GL_UNSIGNED_BYTE = 5121; // gl.UNSIGNED_BYTE\n// const GL_SHORT = 5122; // gl.SHORT\nconst GL_UNSIGNED_SHORT = 5123; // gl.UNSIGNED_SHORT\nconst GL_UNSIGNED_INT = 5125; // gl.UNSIGNED_INT\nconst GL_FLOAT = 5126; // gl.FLOAT\nconst GL_UNSIGNED_SHORT_5_6_5 = 33635; // gl.UNSIGNED_SHORT_5_6_5\nconst GL_UNSIGNED_SHORT_4_4_4_4 = 32819; // gl.UNSIGNED_SHORT_4_4_4_4\nconst GL_UNSIGNED_SHORT_5_5_5_1 = 32820; // gl.UNSIGNED_SHORT_5_5_5_1\nconst GL_HALF_FLOAT_OES = 36193; // gl.HALF_FLOAT_OES\n\nconst GL_DEPTH_COMPONENT = 6402; // gl.DEPTH_COMPONENT\n\nconst GL_ALPHA = 6406; // gl.ALPHA\nconst GL_RGB = 6407; // gl.RGB\nconst GL_RGBA = 6408; // gl.RGBA\nconst GL_LUMINANCE = 6409; // gl.LUMINANCE\nconst GL_LUMINANCE_ALPHA = 6410; // gl.LUMINANCE_ALPHA\n\nconst GL_COMPRESSED_RGB_S3TC_DXT1_EXT = 0x83F0; // ext.COMPRESSED_RGB_S3TC_DXT1_EXT\nconst GL_COMPRESSED_RGBA_S3TC_DXT1_EXT = 0x83F1; // ext.COMPRESSED_RGBA_S3TC_DXT1_EXT\nconst GL_COMPRESSED_RGBA_S3TC_DXT3_EXT = 0x83F2; // ext.COMPRESSED_RGBA_S3TC_DXT3_EXT\nconst GL_COMPRESSED_RGBA_S3TC_DXT5_EXT = 0x83F3; // ext.COMPRESSED_RGBA_S3TC_DXT5_EXT\n\nconst GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG = 0x8C00; // ext.COMPRESSED_RGB_PVRTC_4BPPV1_IMG\nconst GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG = 0x8C01; // ext.COMPRESSED_RGB_PVRTC_2BPPV1_IMG\nconst GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG = 0x8C02; // ext.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG\nconst GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG = 0x8C03; // ext.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG\n\nconst GL_COMPRESSED_RGB_ETC1_WEBGL = 0x8D64; // ext.COMPRESSED_RGB_ETC1_WEBGL\n\nconst GL_COMPRESSED_RGB8_ETC2 = 0x9274; // ext.COMPRESSED_RGB8_ETC2\nconst GL_COMPRESSED_RGBA8_ETC2_EAC = 0x9278; // ext.COMPRESSED_RGBA8_ETC2_EAC\n\nconst _filterGL = [\n [ GL_NEAREST, GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST_MIPMAP_LINEAR ],\n [ GL_LINEAR, GL_LINEAR_MIPMAP_NEAREST, GL_LINEAR_MIPMAP_LINEAR ],\n];\n\nconst _textureFmtGL = [\n // TEXTURE_FMT_RGB_DXT1: 0\n { format: GL_RGB, internalFormat: GL_COMPRESSED_RGB_S3TC_DXT1_EXT, pixelType: null },\n\n // TEXTURE_FMT_RGBA_DXT1: 1\n { format: GL_RGBA, internalFormat: GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixelType: null },\n\n // TEXTURE_FMT_RGBA_DXT3: 2\n { format: GL_RGBA, internalFormat: GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, pixelType: null },\n\n // TEXTURE_FMT_RGBA_DXT5: 3\n { format: GL_RGBA, internalFormat: GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, pixelType: null },\n\n // TEXTURE_FMT_RGB_ETC1: 4\n { format: GL_RGB, internalFormat: GL_COMPRESSED_RGB_ETC1_WEBGL, pixelType: null },\n\n // TEXTURE_FMT_RGB_PVRTC_2BPPV1: 5\n { format: GL_RGB, internalFormat: GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG, pixelType: null },\n\n // TEXTURE_FMT_RGBA_PVRTC_2BPPV1: 6\n { format: GL_RGBA, internalFormat: GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG, pixelType: null },\n\n // TEXTURE_FMT_RGB_PVRTC_4BPPV1: 7\n { format: GL_RGB, internalFormat: GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG, pixelType: null },\n\n // TEXTURE_FMT_RGBA_PVRTC_4BPPV1: 8\n { format: GL_RGBA, internalFormat: GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG, pixelType: null },\n\n // TEXTURE_FMT_A8: 9\n { format: GL_ALPHA, internalFormat: GL_ALPHA, pixelType: GL_UNSIGNED_BYTE },\n\n // TEXTURE_FMT_L8: 10\n { format: GL_LUMINANCE, internalFormat: GL_LUMINANCE, pixelType: GL_UNSIGNED_BYTE },\n\n // TEXTURE_FMT_L8_A8: 11\n { format: GL_LUMINANCE_ALPHA, internalFormat: GL_LUMINANCE_ALPHA, pixelType: GL_UNSIGNED_BYTE },\n\n // TEXTURE_FMT_R5_G6_B5: 12\n { format: GL_RGB, internalFormat: GL_RGB, pixelType: GL_UNSIGNED_SHORT_5_6_5 },\n\n // TEXTURE_FMT_R5_G5_B5_A1: 13\n { format: GL_RGBA, internalFormat: GL_RGBA, pixelType: GL_UNSIGNED_SHORT_5_5_5_1 },\n\n // TEXTURE_FMT_R4_G4_B4_A4: 14\n { format: GL_RGBA, internalFormat: GL_RGBA, pixelType: GL_UNSIGNED_SHORT_4_4_4_4 },\n\n // TEXTURE_FMT_RGB8: 15\n { format: GL_RGB, internalFormat: GL_RGB, pixelType: GL_UNSIGNED_BYTE },\n\n // TEXTURE_FMT_RGBA8: 16\n { format: GL_RGBA, internalFormat: GL_RGBA, pixelType: GL_UNSIGNED_BYTE },\n\n // TEXTURE_FMT_RGB16F: 17\n { format: GL_RGB, internalFormat: GL_RGB, pixelType: GL_HALF_FLOAT_OES },\n\n // TEXTURE_FMT_RGBA16F: 18\n { format: GL_RGBA, internalFormat: GL_RGBA, pixelType: GL_HALF_FLOAT_OES },\n\n // TEXTURE_FMT_RGB32F: 19\n { format: GL_RGB, internalFormat: GL_RGB, pixelType: GL_FLOAT },\n\n // TEXTURE_FMT_RGBA32F: 20\n { format: GL_RGBA, internalFormat: GL_RGBA, pixelType: GL_FLOAT },\n\n // TEXTURE_FMT_R32F: 21\n { format: null, internalFormat: null, pixelType: null },\n\n // TEXTURE_FMT_111110F: 22\n { format: null, internalFormat: null, pixelType: null },\n\n // TEXTURE_FMT_SRGB: 23\n { format: null, internalFormat: null, pixelType: null },\n\n // TEXTURE_FMT_SRGBA: 24\n { format: null, internalFormat: null, pixelType: null },\n\n // TEXTURE_FMT_D16: 25\n { format: GL_DEPTH_COMPONENT, internalFormat: GL_DEPTH_COMPONENT, pixelType: GL_UNSIGNED_SHORT },\n\n // TEXTURE_FMT_D32: 26\n { format: GL_DEPTH_COMPONENT, internalFormat: GL_DEPTH_COMPONENT, pixelType: GL_UNSIGNED_INT },\n\n // TEXTURE_FMT_D24S8: 27\n { format: GL_DEPTH_COMPONENT, internalFormat: GL_DEPTH_COMPONENT, pixelType: GL_UNSIGNED_INT },\n\n // TEXTURE_FMT_RGB_ETC2: 28\n { format: GL_RGB, internalFormat: GL_COMPRESSED_RGB8_ETC2, pixelType: null },\n\n // TEXTURE_FMT_RGBA_ETC2: 29\n { format: GL_RGBA, internalFormat: GL_COMPRESSED_RGBA8_ETC2_EAC, pixelType: null },\n];\n\n/**\n * enums\n */\nexport const enums = {\n // buffer usage\n USAGE_STATIC: 35044, // gl.STATIC_DRAW\n USAGE_DYNAMIC: 35048, // gl.DYNAMIC_DRAW\n USAGE_STREAM: 35040, // gl.STREAM_DRAW\n\n // index buffer format\n INDEX_FMT_UINT8: 5121, // gl.UNSIGNED_BYTE\n INDEX_FMT_UINT16: 5123, // gl.UNSIGNED_SHORT\n INDEX_FMT_UINT32: 5125, // gl.UNSIGNED_INT (OES_element_index_uint)\n\n // vertex attribute semantic\n ATTR_POSITION: 'a_position',\n ATTR_NORMAL: 'a_normal',\n ATTR_TANGENT: 'a_tangent',\n ATTR_BITANGENT: 'a_bitangent',\n ATTR_WEIGHTS: 'a_weights',\n ATTR_JOINTS: 'a_joints',\n ATTR_COLOR: 'a_color',\n ATTR_COLOR0: 'a_color0',\n ATTR_COLOR1: 'a_color1',\n ATTR_UV: 'a_uv',\n ATTR_UV0: 'a_uv0',\n ATTR_UV1: 'a_uv1',\n ATTR_UV2: 'a_uv2',\n ATTR_UV3: 'a_uv3',\n ATTR_UV4: 'a_uv4',\n ATTR_UV5: 'a_uv5',\n ATTR_UV6: 'a_uv6',\n ATTR_UV7: 'a_uv7',\n ATTR_TEX_COORD: 'a_texCoord',\n ATTR_TEX_COORD1: 'a_texCoord1',\n ATTR_TEX_COORD2: 'a_texCoord2',\n ATTR_TEX_COORD3: 'a_texCoord3',\n ATTR_TEX_COORD4: 'a_texCoord4',\n ATTR_TEX_COORD5: 'a_texCoord5',\n ATTR_TEX_COORD6: 'a_texCoord6',\n ATTR_TEX_COORD7: 'a_texCoord7',\n ATTR_TEX_COORD8: 'a_texCoord8',\n ATTR_TEX_ID: 'a_texId',\n\n\n // vertex attribute type\n ATTR_TYPE_INT8: 5120, // gl.BYTE\n ATTR_TYPE_UINT8: 5121, // gl.UNSIGNED_BYTE\n ATTR_TYPE_INT16: 5122, // gl.SHORT\n ATTR_TYPE_UINT16: 5123, // gl.UNSIGNED_SHORT\n ATTR_TYPE_INT32: 5124, // gl.INT\n ATTR_TYPE_UINT32: 5125, // gl.UNSIGNED_INT\n ATTR_TYPE_FLOAT32: 5126, // gl.FLOAT\n\n // texture filter\n FILTER_NEAREST: 0,\n FILTER_LINEAR: 1,\n\n // texture wrap mode\n WRAP_REPEAT: 10497, // gl.REPEAT\n WRAP_CLAMP: 33071, // gl.CLAMP_TO_EDGE\n WRAP_MIRROR: 33648, // gl.MIRRORED_REPEAT\n\n // texture format\n // compress formats\n TEXTURE_FMT_RGB_DXT1: 0,\n TEXTURE_FMT_RGBA_DXT1: 1,\n TEXTURE_FMT_RGBA_DXT3: 2,\n TEXTURE_FMT_RGBA_DXT5: 3,\n TEXTURE_FMT_RGB_ETC1: 4,\n TEXTURE_FMT_RGB_PVRTC_2BPPV1: 5,\n TEXTURE_FMT_RGBA_PVRTC_2BPPV1: 6,\n TEXTURE_FMT_RGB_PVRTC_4BPPV1: 7,\n TEXTURE_FMT_RGBA_PVRTC_4BPPV1: 8,\n\n // normal formats\n TEXTURE_FMT_A8: 9,\n TEXTURE_FMT_L8: 10,\n TEXTURE_FMT_L8_A8: 11,\n TEXTURE_FMT_R5_G6_B5: 12,\n TEXTURE_FMT_R5_G5_B5_A1: 13,\n TEXTURE_FMT_R4_G4_B4_A4: 14,\n TEXTURE_FMT_RGB8: 15,\n TEXTURE_FMT_RGBA8: 16,\n TEXTURE_FMT_RGB16F: 17,\n TEXTURE_FMT_RGBA16F: 18,\n TEXTURE_FMT_RGB32F: 19,\n TEXTURE_FMT_RGBA32F: 20,\n TEXTURE_FMT_R32F: 21,\n TEXTURE_FMT_111110F: 22,\n TEXTURE_FMT_SRGB: 23,\n TEXTURE_FMT_SRGBA: 24,\n\n // depth formats\n TEXTURE_FMT_D16: 25,\n TEXTURE_FMT_D32: 26,\n TEXTURE_FMT_D24S8: 27,\n\n // etc2 format\n TEXTURE_FMT_RGB_ETC2: 28,\n TEXTURE_FMT_RGBA_ETC2: 29,\n\n // depth and stencil function\n DS_FUNC_NEVER: 512, // gl.NEVER\n DS_FUNC_LESS: 513, // gl.LESS\n DS_FUNC_EQUAL: 514, // gl.EQUAL\n DS_FUNC_LEQUAL: 515, // gl.LEQUAL\n DS_FUNC_GREATER: 516, // gl.GREATER\n DS_FUNC_NOTEQUAL: 517, // gl.NOTEQUAL\n DS_FUNC_GEQUAL: 518, // gl.GEQUAL\n DS_FUNC_ALWAYS: 519, // gl.ALWAYS\n\n // render-buffer format\n RB_FMT_RGBA4: 32854, // gl.RGBA4\n RB_FMT_RGB5_A1: 32855, // gl.RGB5_A1\n RB_FMT_RGB565: 36194, // gl.RGB565\n RB_FMT_D16: 33189, // gl.DEPTH_COMPONENT16\n RB_FMT_S8: 36168, // gl.STENCIL_INDEX8\n RB_FMT_D24S8: 34041, // gl.DEPTH_STENCIL\n\n // blend-equation\n BLEND_FUNC_ADD: 32774, // gl.FUNC_ADD\n BLEND_FUNC_SUBTRACT: 32778, // gl.FUNC_SUBTRACT\n BLEND_FUNC_REVERSE_SUBTRACT: 32779, // gl.FUNC_REVERSE_SUBTRACT\n\n // blend\n BLEND_ZERO: 0, // gl.ZERO\n BLEND_ONE: 1, // gl.ONE\n BLEND_SRC_COLOR: 768, // gl.SRC_COLOR\n BLEND_ONE_MINUS_SRC_COLOR: 769, // gl.ONE_MINUS_SRC_COLOR\n BLEND_DST_COLOR: 774, // gl.DST_COLOR\n BLEND_ONE_MINUS_DST_COLOR: 775, // gl.ONE_MINUS_DST_COLOR\n BLEND_SRC_ALPHA: 770, // gl.SRC_ALPHA\n BLEND_ONE_MINUS_SRC_ALPHA: 771, // gl.ONE_MINUS_SRC_ALPHA\n BLEND_DST_ALPHA: 772, // gl.DST_ALPHA\n BLEND_ONE_MINUS_DST_ALPHA: 773, // gl.ONE_MINUS_DST_ALPHA\n BLEND_CONSTANT_COLOR: 32769, // gl.CONSTANT_COLOR\n BLEND_ONE_MINUS_CONSTANT_COLOR: 32770, // gl.ONE_MINUS_CONSTANT_COLOR\n BLEND_CONSTANT_ALPHA: 32771, // gl.CONSTANT_ALPHA\n BLEND_ONE_MINUS_CONSTANT_ALPHA: 32772, // gl.ONE_MINUS_CONSTANT_ALPHA\n BLEND_SRC_ALPHA_SATURATE: 776, // gl.SRC_ALPHA_SATURATE\n\n // stencil operation\n STENCIL_DISABLE: 0, // disable stencil\n STENCIL_ENABLE: 1, // enable stencil\n STENCIL_INHERIT: 2, // inherit stencil states\n\n STENCIL_OP_KEEP: 7680, // gl.KEEP\n STENCIL_OP_ZERO: 0, // gl.ZERO\n STENCIL_OP_REPLACE: 7681, // gl.REPLACE\n STENCIL_OP_INCR: 7682, // gl.INCR\n STENCIL_OP_INCR_WRAP: 34055, // gl.INCR_WRAP\n STENCIL_OP_DECR: 7683, // gl.DECR\n STENCIL_OP_DECR_WRAP: 34056, // gl.DECR_WRAP\n STENCIL_OP_INVERT: 5386, // gl.INVERT\n\n // cull\n CULL_NONE: 0,\n CULL_FRONT: 1028,\n CULL_BACK: 1029,\n CULL_FRONT_AND_BACK: 1032,\n\n // primitive type\n PT_POINTS: 0, // gl.POINTS\n PT_LINES: 1, // gl.LINES\n PT_LINE_LOOP: 2, // gl.LINE_LOOP\n PT_LINE_STRIP: 3, // gl.LINE_STRIP\n PT_TRIANGLES: 4, // gl.TRIANGLES\n PT_TRIANGLE_STRIP: 5, // gl.TRIANGLE_STRIP\n PT_TRIANGLE_FAN: 6, // gl.TRIANGLE_FAN\n};\n\n/**\n * @method attrTypeBytes\n * @param {ATTR_TYPE_*} attrType\n */\nexport function attrTypeBytes(attrType) {\n if (attrType === enums.ATTR_TYPE_INT8) {\n return 1;\n } else if (attrType === enums.ATTR_TYPE_UINT8) {\n return 1;\n } else if (attrType === enums.ATTR_TYPE_INT16) {\n return 2;\n } else if (attrType === enums.ATTR_TYPE_UINT16) {\n return 2;\n } else if (attrType === enums.ATTR_TYPE_INT32) {\n return 4;\n } else if (attrType === enums.ATTR_TYPE_UINT32) {\n return 4;\n } else if (attrType === enums.ATTR_TYPE_FLOAT32) {\n return 4;\n }\n\n console.warn(`Unknown ATTR_TYPE: ${attrType}`);\n return 0;\n}\n\n/**\n * @method glFilter\n * @param {WebGLContext} gl\n * @param {FILTER_*} filter\n * @param {FILTER_*} mipFilter\n */\nexport function glFilter(gl, filter, mipFilter = -1) {\n let result = _filterGL[filter][mipFilter+1];\n if (result === undefined) {\n console.warn(`Unknown FILTER: ${filter}`);\n return mipFilter === -1 ? gl.LINEAR : gl.LINEAR_MIPMAP_LINEAR;\n }\n\n return result;\n}\n\n/**\n * @method glTextureFmt\n * @param {TEXTURE_FMT_*} fmt\n */\nexport function glTextureFmt(fmt) {\n let result = _textureFmtGL[fmt];\n if (result === undefined) {\n console.warn(`Unknown TEXTURE_FMT: ${fmt}`);\n return _textureFmtGL[enums.TEXTURE_FMT_RGBA8];\n }\n\n return result;\n}\n","export default class FrameBuffer {\n /**\n * @constructor\n * @param {Device} device\n * @param {Number} width\n * @param {Number} height\n * @param {Object} options\n * @param {Array} options.colors\n * @param {RenderBuffer|Texture2D|TextureCube} options.depth\n * @param {RenderBuffer|Texture2D|TextureCube} options.stencil\n * @param {RenderBuffer|Texture2D|TextureCube} options.depthStencil\n */\n constructor(device, width, height, options) {\n this._device = device;\n this._width = width;\n this._height = height;\n\n this._colors = options.colors || [];\n this._depth = options.depth || null;\n this._stencil = options.stencil || null;\n this._depthStencil = options.depthStencil || null;\n\n this._glID = device._gl.createFramebuffer();\n }\n\n /**\n * @method destroy\n */\n destroy() {\n if (this._glID === null) {\n console.error('The frame-buffer already destroyed');\n return;\n }\n\n const gl = this._device._gl;\n\n gl.deleteFramebuffer(this._glID);\n\n this._glID = null;\n }\n\n getHandle() {\n return this._glID;\n }\n}","import { enums } from './enums';\n\nconst BYTES_PER_INDEX = {\n [enums.INDEX_FMT_UINT8]: 1,\n [enums.INDEX_FMT_UINT16]: 2,\n [enums.INDEX_FMT_UINT32]: 4,\n}\n\nclass IndexBuffer {\n /**\n * @constructor\n * @param {Device} device\n * @param {INDEX_FMT_*} format\n * @param {USAGE_*} usage\n * @param {ArrayBuffer | Uint8Array} data\n */\n constructor(device, format, usage, data) {\n this._device = device;\n this._format = format;\n this._usage = usage;\n this._bytesPerIndex = BYTES_PER_INDEX[format];\n this._bytes = data.byteLength;\n this._numIndices = this._bytes / this._bytesPerIndex;\n\n this._needExpandDataStore = true;\n\n // update\n this._glID = device._gl.createBuffer();\n this.update(0, data);\n\n // stats\n device._stats.ib += this._bytes;\n }\n\n /**\n * @method destroy\n */\n destroy() {\n if (this._glID === -1) {\n console.error('The buffer already destroyed');\n return;\n }\n\n let gl = this._device._gl;\n gl.deleteBuffer(this._glID);\n this._device._stats.ib -= this.bytes;\n\n this._glID = -1;\n }\n\n /**\n * @method update\n * @param {Number} byteOffset\n * @param {ArrayBuffer} data\n */\n update(byteOffset, data) {\n if (this._glID === -1) {\n console.error('The buffer is destroyed');\n return;\n }\n\n if (data.byteLength === 0) return;\n\n // Need to create new buffer object when bytes exceed\n if (byteOffset + data.byteLength > this._bytes) {\n if (byteOffset) {\n // Lost data between [0, byteOffset] which is need for new buffer\n console.error('Failed to update data, bytes exceed.');\n return;\n }\n else {\n this._needExpandDataStore = true;\n this._bytes = byteOffset + data.byteLength;\n this._numIndices = this._bytes / this._bytesPerIndex;\n }\n }\n\n /** @type{WebGLRenderingContext} */\n let gl = this._device._gl;\n let glUsage = this._usage;\n\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._glID);\n if (this._needExpandDataStore) {\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, data, glUsage);\n this._needExpandDataStore = false;\n }\n else {\n gl.bufferSubData(gl.ELEMENT_ARRAY_BUFFER, byteOffset, data);\n }\n this._device._restoreIndexBuffer();\n }\n\n get count () {\n return this._numIndices;\n }\n\n setUsage (usage) {\n this._usage = usage;\n }\n}\n\nIndexBuffer.BYTES_PER_INDEX = BYTES_PER_INDEX;\n\nexport default IndexBuffer;\n","import {\n enums,\n attrTypeBytes,\n glFilter,\n glTextureFmt,\n} from './enums';\n\nlet gfx = null;\n\nif (CC_JSB && CC_NATIVERENDERER) {\n gfx = window.gfx;\n} else {\n let VertexFormat = require('./vertex-format');\n let IndexBuffer = require('./index-buffer');\n let VertexBuffer = require('./vertex-buffer');\n let Program = require('./program');\n let Texture = require('./texture');\n let Texture2D = require('./texture-2d');\n let TextureCube = require('./texture-cube');\n let RenderBuffer = require('./render-buffer');\n let FrameBuffer = require('./frame-buffer');\n let Device = require('./device');\n\n gfx = {\n // classes\n VertexFormat,\n IndexBuffer,\n VertexBuffer,\n Program,\n Texture,\n Texture2D,\n TextureCube,\n RenderBuffer,\n FrameBuffer,\n Device,\n\n // functions\n attrTypeBytes,\n glFilter,\n glTextureFmt,\n };\n Object.assign(gfx, enums);\n}\n\nexport default gfx;\ncc.gfx = gfx;\n","export function isPow2(v) {\n return !(v & (v - 1)) && (!!v);\n}","let _genID = 0;\n\nfunction _parseError(out, type, errorLog) {\n if(!errorLog){\n return;\n }\n errorLog.split('\\n').forEach(msg => {\n if (msg.length < 5) {\n return;\n }\n\n let parts = /^ERROR:\\s+(\\d+):(\\d+):\\s*(.*)$/.exec(msg);\n if (parts) {\n out.push({\n type: type,\n fileID: parts[1] | 0,\n line: parts[2] | 0,\n message: parts[3].trim()\n })\n } else if (msg.length > 0) {\n out.push({\n type: type,\n fileID: -1,\n line: 0,\n message: msg\n });\n }\n });\n}\n\nexport default class Program {\n /**\n * @param {ef.GraphicsDevice} device - graphic device\n * @param {object} options - shader definition\n * @param {string} options.vert - vertex shader source code\n * @param {string} options.frag - fragment shader shader source code\n * @example\n * let prog = new Program(device, {\n * vert: `\n * attribute vec3 a_position;\n * void main() {\n * gl_Position = vec4( a_position, 1.0 );\n * }\n * `,\n * frag: `\n * precision mediump float;\n * void main() {\n * gl_FragColor = vec4( 1.0, 1.0, 1.0, 1.0 );\n * }\n * `\n * });\n */\n constructor(device, options) {\n this._device = device;\n\n // stores gl information: { location, type }\n this._attributes = [];\n this._uniforms = [];\n this._samplers = [];\n this._errors = [];\n this._linked = false;\n this._vertSource = options.vert;\n this._fragSource = options.frag;\n this._glID = null;\n this._id = _genID++;\n }\n\n get id() {\n return this._id;\n }\n\n link() {\n if (this._linked) {\n return;\n }\n\n let gl = this._device._gl;\n\n let vertShader = _createShader(gl, gl.VERTEX_SHADER, this._vertSource);\n let fragShader = _createShader(gl, gl.FRAGMENT_SHADER, this._fragSource);\n\n let program = gl.createProgram();\n gl.attachShader(program, vertShader);\n gl.attachShader(program, fragShader);\n gl.linkProgram(program);\n\n let failed = false;\n let errors = this._errors;\n\n if (!gl.getShaderParameter(vertShader, gl.COMPILE_STATUS)) {\n _parseError(errors, 'vs', gl.getShaderInfoLog(vertShader));\n failed = true;\n }\n\n if (!gl.getShaderParameter(fragShader, gl.COMPILE_STATUS)) {\n _parseError(errors, 'fs', gl.getShaderInfoLog(fragShader));\n failed = true;\n }\n\n gl.deleteShader(vertShader);\n gl.deleteShader(fragShader);\n\n if (failed) {\n return errors;\n }\n\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n errors.push({info: `Failed to link shader program: ${gl.getProgramInfoLog(program)}`});\n return errors;\n }\n\n this._glID = program;\n\n // parse attribute\n let numAttributes = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES);\n for (let i = 0; i < numAttributes; ++i) {\n let info = gl.getActiveAttrib(program, i);\n let location = gl.getAttribLocation(program, info.name);\n\n this._attributes.push({\n name: info.name,\n location: location,\n type: info.type,\n });\n }\n\n // parse uniform\n let numUniforms = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS);\n for (let i = 0; i < numUniforms; ++i) {\n let info = gl.getActiveUniform(program, i);\n let name = info.name;\n let location = gl.getUniformLocation(program, name);\n let isArray = name.substr(name.length - 3) === '[0]';\n if (isArray) {\n name = name.substr(0, name.length - 3);\n }\n\n let uniform = {\n name: name,\n location: location,\n type: info.type,\n size: isArray ? info.size : undefined, // used when uniform is an array\n };\n this._uniforms.push(uniform);\n }\n\n this._linked = true;\n }\n\n destroy() {\n let gl = this._device._gl;\n gl.deleteProgram(this._glID);\n\n this._linked = false;\n this._glID = null;\n this._attributes = [];\n this._uniforms = [];\n this._samplers = [];\n }\n}\n\n// ====================\n// internal\n// ====================\n\nfunction _createShader(gl, type, src) {\n let shader = gl.createShader(type);\n gl.shaderSource(shader, src);\n gl.compileShader(shader);\n\n return shader;\n}","export default class RenderBuffer {\n /**\n * @constructor\n * @param {Device} device\n * @param {RB_FMT_*} format\n * @param {Number} width\n * @param {Number} height\n */\n constructor(device, format, width, height) {\n this._device = device;\n this._format = format;\n \n this._glID = device._gl.createRenderbuffer();\n this.update(width, height);\n }\n\n update (width, height) {\n this._width = width;\n this._height = height;\n\n const gl = this._device._gl;\n gl.bindRenderbuffer(gl.RENDERBUFFER, this._glID);\n gl.renderbufferStorage(gl.RENDERBUFFER, this._format, width, height);\n gl.bindRenderbuffer(gl.RENDERBUFFER, null);\n }\n\n /**\n * @method destroy\n */\n destroy() {\n if (this._glID === null) {\n console.error('The render-buffer already destroyed');\n return;\n }\n\n const gl = this._device._gl;\n\n gl.bindRenderbuffer(gl.RENDERBUFFER, null);\n gl.deleteRenderbuffer(this._glID);\n\n this._glID = null;\n }\n}","import { enums } from './enums';\n\nconst _default = {\n // blend\n blend: false,\n blendSep: false,\n blendColor: 0xffffffff,\n blendEq: enums.BLEND_FUNC_ADD,\n blendAlphaEq: enums.BLEND_FUNC_ADD,\n blendSrc: enums.BLEND_ONE,\n blendDst: enums.BLEND_ZERO,\n blendSrcAlpha: enums.BLEND_ONE,\n blendDstAlpha: enums.BLEND_ZERO,\n\n // depth\n depthTest: false,\n depthWrite: false,\n depthFunc: enums.DS_FUNC_LESS,\n\n // stencil\n stencilTest: false,\n stencilSep: false,\n stencilFuncFront: enums.DS_FUNC_ALWAYS,\n stencilRefFront: 0,\n stencilMaskFront: 0xff,\n stencilFailOpFront: enums.STENCIL_OP_KEEP,\n stencilZFailOpFront: enums.STENCIL_OP_KEEP,\n stencilZPassOpFront: enums.STENCIL_OP_KEEP,\n stencilWriteMaskFront: 0xff,\n stencilFuncBack: enums.DS_FUNC_ALWAYS,\n stencilRefBack: 0,\n stencilMaskBack: 0xff,\n stencilFailOpBack: enums.STENCIL_OP_KEEP,\n stencilZFailOpBack: enums.STENCIL_OP_KEEP,\n stencilZPassOpBack: enums.STENCIL_OP_KEEP,\n stencilWriteMaskBack: 0xff,\n\n // cull-mode\n cullMode: enums.CULL_BACK,\n\n // primitive-type\n primitiveType: enums.PT_TRIANGLES,\n\n // bindings\n maxStream: -1,\n vertexBuffers: [],\n vertexBufferOffsets: [],\n indexBuffer: null,\n maxTextureSlot: -1,\n textureUnits: [],\n program: null,\n};\n\nexport default class State {\n constructor(device) {\n // bindings\n this.vertexBuffers = new Array(device._caps.maxVertexStreams);\n this.vertexBufferOffsets = new Array(device._caps.maxVertexStreams);\n this.textureUnits = new Array(device._caps.maxTextureUnits);\n\n this.set(_default);\n }\n\n static initDefault(device) {\n _default.vertexBuffers = new Array(device._caps.maxVertexStreams);\n _default.vertexBufferOffsets = new Array(device._caps.maxVertexStreams);\n _default.textureUnits = new Array(device._caps.maxTextureUnits);\n }\n\n reset () {\n this.set(_default);\n }\n\n set (cpy) {\n // blending\n this.blend = cpy.blend;\n this.blendSep = cpy.blendSep;\n this.blendColor = cpy.blendColor;\n this.blendEq = cpy.blendEq;\n this.blendAlphaEq = cpy.blendAlphaEq;\n this.blendSrc = cpy.blendSrc;\n this.blendDst = cpy.blendDst;\n this.blendSrcAlpha = cpy.blendSrcAlpha;\n this.blendDstAlpha = cpy.blendDstAlpha;\n\n // depth\n this.depthTest = cpy.depthTest;\n this.depthWrite = cpy.depthWrite;\n this.depthFunc = cpy.depthFunc;\n\n // stencil\n this.stencilTest = cpy.stencilTest;\n this.stencilSep = cpy.stencilSep;\n this.stencilFuncFront = cpy.stencilFuncFront;\n this.stencilRefFront = cpy.stencilRefFront;\n this.stencilMaskFront = cpy.stencilMaskFront;\n this.stencilFailOpFront = cpy.stencilFailOpFront;\n this.stencilZFailOpFront = cpy.stencilZFailOpFront;\n this.stencilZPassOpFront = cpy.stencilZPassOpFront;\n this.stencilWriteMaskFront = cpy.stencilWriteMaskFront;\n this.stencilFuncBack = cpy.stencilFuncBack;\n this.stencilRefBack = cpy.stencilRefBack;\n this.stencilMaskBack = cpy.stencilMaskBack;\n this.stencilFailOpBack = cpy.stencilFailOpBack;\n this.stencilZFailOpBack = cpy.stencilZFailOpBack;\n this.stencilZPassOpBack = cpy.stencilZPassOpBack;\n this.stencilWriteMaskBack = cpy.stencilWriteMaskBack;\n\n // cull-mode\n this.cullMode = cpy.cullMode;\n\n // primitive-type\n this.primitiveType = cpy.primitiveType;\n\n // buffer bindings\n this.maxStream = cpy.maxStream;\n for (let i = 0; i < cpy.vertexBuffers.length; ++i) {\n this.vertexBuffers[i] = cpy.vertexBuffers[i];\n }\n for (let i = 0; i < cpy.vertexBufferOffsets.length; ++i) {\n this.vertexBufferOffsets[i] = cpy.vertexBufferOffsets[i];\n }\n this.indexBuffer = cpy.indexBuffer;\n\n // texture bindings\n this.maxTextureSlot = cpy.maxTextureSlot;\n for (let i = 0; i < cpy.textureUnits.length; ++i) {\n this.textureUnits[i] = cpy.textureUnits[i];\n }\n\n this.program = cpy.program;\n }\n}","// @ts-check\nimport Texture from './texture';\nimport { enums, glFilter, glTextureFmt } from './enums';\nimport { isPow2 } from './misc';\n\n/**\n * @typedef {HTMLImageElement | HTMLCanvasElement} HTMLImageSource\n * @typedef {HTMLImageSource | ArrayBufferView} ImageSource\n * @typedef {{width?: number, height?: number, minFilter?: number, magFilter?: number, mipFilter?: number, wrapS?: number, wrapT?: number, format?: number, genMipmaps?: boolean, images?: ImageSource[], image?: ImageSource, flipY?: boolean, premultiplyAlpha?: boolean, anisotropy?: number}} TextureUpdateOpts\n * @typedef {import(\"../gfx/device\").default} Device\n */\n\nexport default class Texture2D extends Texture {\n /**\n * @constructor\n * @param {Device} device\n * @param {TextureUpdateOpts} options\n */\n constructor(device, options) {\n super(device);\n\n let gl = this._device._gl;\n this._target = gl.TEXTURE_2D;\n this._glID = gl.createTexture();\n\n // always alloc texture in GPU when we create it.\n options.images = options.images || [null];\n this.update(options);\n }\n\n /**\n * @method update\n * @param {TextureUpdateOpts} options\n */\n update(options) {\n let gl = this._device._gl;\n let genMipmaps = this._genMipmap;\n\n if (options) {\n if (options.width !== undefined) {\n this._width = options.width;\n }\n if (options.height !== undefined) {\n this._height = options.height;\n }\n if (options.anisotropy !== undefined) {\n this._anisotropy = options.anisotropy;\n }\n if (options.minFilter !== undefined) {\n this._minFilter = options.minFilter;\n }\n if (options.magFilter !== undefined) {\n this._magFilter = options.magFilter;\n }\n if (options.mipFilter !== undefined) {\n this._mipFilter = options.mipFilter;\n }\n if (options.wrapS !== undefined) {\n this._wrapS = options.wrapS;\n }\n if (options.wrapT !== undefined) {\n this._wrapT = options.wrapT;\n }\n if (options.format !== undefined) {\n this._format = options.format;\n this._compressed = \n (this._format >= enums.TEXTURE_FMT_RGB_DXT1 && this._format <= enums.TEXTURE_FMT_RGBA_PVRTC_4BPPV1) || \n (this._format >= enums.TEXTURE_FMT_RGB_ETC2 && this._format <= enums.TEXTURE_FMT_RGBA_ETC2)\n ;\n }\n\n // check if generate mipmap\n if (options.genMipmaps !== undefined) {\n this._genMipmap = options.genMipmaps;\n genMipmaps = options.genMipmaps;\n }\n\n let maxSize = this._device.caps.maxTextureSize || Number.MAX_VALUE;\n let textureMaxSize = Math.max(options.width || 0, options.height || 0);\n if (maxSize < textureMaxSize)\n console.warn(`The current texture size ${textureMaxSize} exceeds the maximum size [${maxSize}] supported on the device.`);\n\n if (options.images !== undefined) {\n if (options.images.length > 1) {\n genMipmaps = false;\n let maxLength = options.width > options.height ? options.width : options.height;\n if (maxLength >> (options.images.length - 1) !== 1) {\n console.error('texture-2d mipmap is invalid, should have a 1x1 mipmap.');\n }\n }\n }\n }\n\n // NOTE: get pot after this._width, this._height has been assigned.\n let pot = isPow2(this._width) && isPow2(this._height);\n if (!pot) {\n genMipmaps = false;\n }\n\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, this._glID);\n if (options.images !== undefined && options.images.length > 0) {\n this._setMipmap(options.images, options.flipY, options.premultiplyAlpha);\n if (options.images.length > 1) this._genMipmap = true;\n }\n if (genMipmaps) {\n gl.hint(gl.GENERATE_MIPMAP_HINT, gl.NICEST);\n gl.generateMipmap(gl.TEXTURE_2D);\n this._genMipmap = true;\n }\n\n this._setTexInfo();\n this._device._restoreTexture(0);\n }\n\n /**\n * @method updateSubImage\n * @param {Object} options\n * @param {Number} options.x\n * @param {Number} options.y\n * @param {Number} options.width\n * @param {Number} options.height\n * @param {Number} options.level\n * @param {HTMLCanvasElement | HTMLImageElement | HTMLVideoElement | ArrayBufferView} options.image\n * @param {Boolean} options.flipY\n * @param {Boolean} options.premultiplyAlpha\n */\n updateSubImage(options) {\n let gl = this._device._gl;\n let glFmt = glTextureFmt(this._format);\n\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, this._glID);\n this._setSubImage(glFmt, options);\n this._device._restoreTexture(0);\n }\n\n /**\n * @method updateImage\n * @param {Object} options\n * @param {Number} options.width\n * @param {Number} options.height\n * @param {Number} options.level\n * @param {HTMLCanvasElement | HTMLImageElement | HTMLVideoElement | ArrayBufferView} options.image\n * @param {Boolean} options.flipY\n * @param {Boolean} options.premultiplyAlpha\n */\n updateImage(options) {\n let gl = this._device._gl;\n let glFmt = glTextureFmt(this._format);\n\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, this._glID);\n this._setImage(glFmt, options);\n this._device._restoreTexture(0);\n }\n\n _setSubImage(glFmt, options) {\n let gl = this._device._gl;\n let flipY = options.flipY;\n let premultiplyAlpha = options.premultiplyAlpha;\n let img = options.image;\n\n if (img && !ArrayBuffer.isView(img) && !(img instanceof ArrayBuffer)) {\n if (flipY === undefined) {\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);\n } else {\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);\n }\n\n if (premultiplyAlpha === undefined) {\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n } else {\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultiplyAlpha);\n }\n\n gl.texSubImage2D(gl.TEXTURE_2D, options.level, options.x, options.y, glFmt.format, glFmt.pixelType, img);\n } else {\n if (flipY === undefined) {\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);\n } else {\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);\n }\n\n if (premultiplyAlpha === undefined) {\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n } else {\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultiplyAlpha);\n }\n\n if (this._compressed) {\n gl.compressedTexSubImage2D(gl.TEXTURE_2D,\n options.level,\n options.x,\n options.y,\n options.width,\n options.height,\n glFmt.format,\n img\n );\n } else {\n gl.texSubImage2D(\n gl.TEXTURE_2D,\n options.level,\n options.x,\n options.y,\n options.width,\n options.height,\n glFmt.format,\n glFmt.pixelType,\n img\n );\n }\n }\n }\n\n _setImage(glFmt, options) {\n let gl = this._device._gl;\n let flipY = options.flipY;\n let premultiplyAlpha = options.premultiplyAlpha;\n let img = options.image;\n\n if (img && !ArrayBuffer.isView(img) && !(img instanceof ArrayBuffer)) {\n if (flipY === undefined) {\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);\n } else {\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);\n }\n\n if (premultiplyAlpha === undefined) {\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n } else {\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultiplyAlpha);\n }\n\n gl.texImage2D(\n gl.TEXTURE_2D,\n options.level,\n glFmt.internalFormat,\n glFmt.format,\n glFmt.pixelType,\n img\n );\n } else {\n if (flipY === undefined) {\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);\n } else {\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);\n }\n\n if (premultiplyAlpha === undefined) {\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n } else {\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultiplyAlpha);\n }\n\n if (this._compressed) {\n gl.compressedTexImage2D(\n gl.TEXTURE_2D,\n options.level,\n glFmt.internalFormat,\n options.width,\n options.height,\n 0,\n img\n );\n } else {\n gl.texImage2D(\n gl.TEXTURE_2D,\n options.level,\n glFmt.internalFormat,\n options.width,\n options.height,\n 0,\n glFmt.format,\n glFmt.pixelType,\n img\n );\n }\n }\n }\n\n _setMipmap(images, flipY, premultiplyAlpha) {\n let glFmt = glTextureFmt(this._format);\n let options = {\n width: this._width,\n height: this._height,\n flipY: flipY,\n premultiplyAlpha: premultiplyAlpha,\n level: 0,\n image: null\n };\n\n for (let i = 0; i < images.length; ++i) {\n options.level = i;\n options.width = this._width >> i;\n options.height = this._height >> i;\n options.image = images[i];\n this._setImage(glFmt, options);\n }\n }\n\n _setTexInfo() {\n let gl = this._device._gl;\n let pot = isPow2(this._width) && isPow2(this._height);\n\n // WebGL1 doesn't support all wrap modes with NPOT textures\n if (!pot && (this._wrapS !== enums.WRAP_CLAMP || this._wrapT !== enums.WRAP_CLAMP)) {\n console.warn('WebGL1 doesn\\'t support all wrap modes with NPOT textures');\n this._wrapS = enums.WRAP_CLAMP;\n this._wrapT = enums.WRAP_CLAMP;\n }\n\n let mipFilter = this._genMipmap ? this._mipFilter : -1;\n if (!pot && mipFilter !== -1) {\n console.warn('NPOT textures do not support mipmap filter');\n mipFilter = -1;\n }\n\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, glFilter(gl, this._minFilter, mipFilter));\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, glFilter(gl, this._magFilter, -1));\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, this._wrapS);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, this._wrapT);\n\n let ext = this._device.ext('EXT_texture_filter_anisotropic');\n if (ext) {\n gl.texParameteri(gl.TEXTURE_2D, ext.TEXTURE_MAX_ANISOTROPY_EXT, this._anisotropy);\n }\n }\n}","import Texture from './texture';\nimport { enums, glFilter, glTextureFmt } from './enums';\nimport { isPow2 } from './misc';\n\nexport default class TextureCube extends Texture {\n /**\n * @constructor\n * @param {Device} device\n * @param {Object} options\n * @param {Array} options.images\n * @param {Boolean} options.genMipmaps\n * @param {Number} options.width\n * @param {Number} options.height\n * @param {TEXTURE_FMT_*} options.format\n * @param {Number} options.anisotropy\n * @param {FILTER_*} options.minFilter\n * @param {FILTER_*} options.magFilter\n * @param {FILTER_*} options.mipFilter\n * @param {WRAP_*} options.wrapS\n * @param {WRAP_*} options.wrapT\n * @param {WRAP_*} options.wrapR\n * @param {Boolean} options.flipY\n * @param {Boolean} options.premultiplyAlpha\n */\n constructor(device, options) {\n super(device);\n let gl = this._device._gl;\n this._target = gl.TEXTURE_CUBE_MAP;\n this._glID = gl.createTexture();\n this.update(options);\n }\n\n /**\n * @method update\n * @param {Object} options\n * @param {Array} options.images\n * @param {Boolean} options.genMipmaps\n * @param {Number} options.width\n * @param {Number} options.height\n * @param {TEXTURE_FMT_*} options.format\n * @param {Number} options.anisotropy\n * @param {FILTER_*} options.minFilter\n * @param {FILTER_*} options.magFilter\n * @param {FILTER_*} options.mipFilter\n * @param {WRAP_*} options.wrapS\n * @param {WRAP_*} options.wrapT\n * @param {WRAP_*} options.wrapR\n * @param {Boolean} options.flipY\n * @param {Boolean} options.premultiplyAlpha\n */\n update(options) {\n let gl = this._device._gl;\n let genMipmaps = this._genMipmaps;\n\n if (options) {\n if (options.width !== undefined) {\n this._width = options.width;\n }\n if (options.height !== undefined) {\n this._height = options.height;\n }\n if (options.anisotropy !== undefined) {\n this._anisotropy = options.anisotropy;\n }\n if (options.minFilter !== undefined) {\n this._minFilter = options.minFilter;\n }\n if (options.magFilter !== undefined) {\n this._magFilter = options.magFilter;\n }\n if (options.mipFilter !== undefined) {\n this._mipFilter = options.mipFilter;\n }\n if (options.wrapS !== undefined) {\n this._wrapS = options.wrapS;\n }\n if (options.wrapT !== undefined) {\n this._wrapT = options.wrapT;\n }\n // wrapR available in webgl2\n // if (options.wrapR !== undefined) {\n // this._wrapR = options.wrapR;\n // }\n if (options.format !== undefined) {\n this._format = options.format;\n this._compressed = \n (this._format >= enums.TEXTURE_FMT_RGB_DXT1 && this._format <= enums.TEXTURE_FMT_RGBA_PVRTC_4BPPV1) || \n (this._format >= enums.TEXTURE_FMT_RGB_ETC2 && this._format <= enums.TEXTURE_FMT_RGBA_ETC2)\n ;\n }\n\n // check if generate mipmap\n if (options.genMipmaps !== undefined) {\n this._genMipmaps = options.genMipmaps;\n genMipmaps = options.genMipmaps;\n }\n\n if (options.images !== undefined) {\n if (options.images.length > 1) {\n genMipmaps = false;\n if (options.width !== options.height) {\n console.warn('texture-cube width and height should be identical.');\n }\n if (options.width >> (options.images.length - 1) !== 1) {\n console.error('texture-cube mipmap is invalid. please set mipmap as 1x1, 2x2, 4x4 ... nxn');\n }\n }\n }\n }\n\n // NOTE: get pot after this._width, this._height has been assigned.\n let pot = isPow2(this._width) && isPow2(this._height);\n if (!pot) {\n genMipmaps = false;\n }\n\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_CUBE_MAP, this._glID);\n if (options.images !== undefined && options.images.length > 0) {\n this._setMipmap(options.images, options.flipY, options.premultiplyAlpha);\n if (options.images.length > 1) this._genMipmaps = true;\n }\n if (genMipmaps) {\n gl.hint(gl.GENERATE_MIPMAP_HINT, gl.NICEST);\n gl.generateMipmap(gl.TEXTURE_CUBE_MAP);\n this._genMipmaps = true;\n }\n\n this._setTexInfo();\n\n this._device._restoreTexture(0);\n }\n\n /**\n * @method updateSubImage\n * @param {Object} options\n * @param {Number} options.x\n * @param {Number} options.y\n * @param {Number} options.width\n * @param {Number} options.height\n * @param {Number} options.level\n * @param {Number} options.faceIndex\n * @param {HTMLCanvasElement | HTMLImageElement | HTMLVideoElement | ArrayBufferView} options.image\n * @param {Boolean} options.flipY\n * @param {Boolean} options.premultiplyAlpha\n */\n updateSubImage(options) {\n let gl = this._device._gl;\n let glFmt = glTextureFmt(this._format);\n\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_CUBE_MAP, this._glID);\n this._setSubImage(glFmt, options);\n\n this._device._restoreTexture(0);\n }\n\n /**\n * @method updateImage\n * @param {Object} options\n * @param {Number} options.width\n * @param {Number} options.height\n * @param {Number} options.level\n * @param {Number} options.faceIndex\n * @param {HTMLCanvasElement | HTMLImageElement | HTMLVideoElement | ArrayBufferView} options.image\n * @param {Boolean} options.flipY\n * @param {Boolean} options.premultiplyAlpha\n */\n updateImage(options) {\n let gl = this._device._gl;\n let glFmt = glTextureFmt(this._format);\n\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_CUBE_MAP, this._glID);\n this._setImage(glFmt, options);\n this._device._restoreTexture(0);\n }\n\n _setSubImage(glFmt, options) {\n let gl = this._device._gl;\n let flipY = options.flipY;\n let premultiplyAlpha = options.premultiplyAlpha;\n let faceIndex = options.faceIndex;\n let img = options.image;\n\n if (flipY === undefined) {\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);\n } else {\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);\n }\n\n if (premultiplyAlpha === undefined) {\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n } else {\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultiplyAlpha);\n }\n\n if (img && !ArrayBuffer.isView(img) && !(img instanceof ArrayBuffer)) {\n gl.texSubImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex, options.level, options.x, options.y, glFmt.format, glFmt.pixelType, img);\n } else {\n if (this._compressed) {\n gl.compressedTexSubImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex,\n options.level,\n options.x,\n options.y,\n options.width,\n options.height,\n glFmt.format,\n img\n );\n } else {\n gl.texSubImage2D(\n gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex,\n options.level,\n options.x,\n options.y,\n options.width,\n options.height,\n glFmt.format,\n glFmt.pixelType,\n img\n );\n }\n }\n }\n\n _setImage(glFmt, options) {\n let gl = this._device._gl;\n let flipY = options.flipY;\n let premultiplyAlpha = options.premultiplyAlpha;\n let faceIndex = options.faceIndex;\n let img = options.image;\n\n if (flipY === undefined) {\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);\n } else {\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);\n }\n\n if (premultiplyAlpha === undefined) {\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n } else {\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultiplyAlpha);\n }\n if (img && !ArrayBuffer.isView(img) && !(img instanceof ArrayBuffer)) {\n gl.texImage2D(\n gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex,\n options.level,\n glFmt.internalFormat,\n glFmt.format,\n glFmt.pixelType,\n img\n );\n } else {\n if (this._compressed) {\n gl.compressedTexImage2D(\n gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex,\n options.level,\n glFmt.internalFormat,\n options.width,\n options.height,\n 0,\n img\n );\n } else {\n gl.texImage2D(\n gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex,\n options.level,\n glFmt.internalFormat,\n options.width,\n options.height,\n 0,\n glFmt.format,\n glFmt.pixelType,\n img\n );\n }\n }\n }\n\n // levelImages = [imagePosX, imageNegX, imagePosY, imageNegY, imagePosZ, imageNegz]\n // images = [levelImages0, levelImages1, ...]\n _setMipmap(images, flipY, premultiplyAlpha) {\n let glFmt = glTextureFmt(this._format);\n let options = {\n width: this._width,\n height: this._height,\n faceIndex: 0,\n flipY: flipY,\n premultiplyAlpha: premultiplyAlpha,\n level: 0,\n image: null\n };\n\n for (let i = 0; i < images.length; ++i) {\n let levelImages = images[i];\n options.level = i;\n options.width = this._width >> i;\n options.height = this._height >> i;\n\n for (let face = 0; face < 6; ++face) {\n options.faceIndex = face;\n options.image = levelImages[face];\n this._setImage(glFmt, options);\n }\n }\n }\n\n _setTexInfo() {\n let gl = this._device._gl;\n let pot = isPow2(this._width) && isPow2(this._height);\n\n // WebGL1 doesn't support all wrap modes with NPOT textures\n if (!pot && (this._wrapS !== enums.WRAP_CLAMP || this._wrapT !== enums.WRAP_CLAMP)) {\n console.warn('WebGL1 doesn\\'t support all wrap modes with NPOT textures');\n this._wrapS = enums.WRAP_CLAMP;\n this._wrapT = enums.WRAP_CLAMP;\n }\n\n let mipFilter = this._genMipmaps ? this._mipFilter : -1;\n if (!pot && mipFilter !== -1) {\n console.warn('NPOT textures do not support mipmap filter');\n mipFilter = -1;\n }\n\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MIN_FILTER, glFilter(gl, this._minFilter, mipFilter));\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MAG_FILTER, glFilter(gl, this._magFilter, -1));\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_S, this._wrapS);\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_T, this._wrapT);\n // wrapR available in webgl2\n // gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_R, this._wrapR);\n\n let ext = this._device.ext('EXT_texture_filter_anisotropic');\n if (ext) {\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, ext.TEXTURE_MAX_ANISOTROPY_EXT, this._anisotropy);\n }\n }\n}\n","import { enums } from './enums';\n\n/**\n * @type {WebGLTexture}\n */\nconst _nullWebGLTexture = null;\n\nlet _textureID = 0;\n\n/**\n * @typedef {import(\"../gfx/device\").default} Device\n */\n\nexport default class Texture {\n /**\n * @param {Device} device\n */\n constructor(device) {\n this._device = device;\n\n this._width = 4;\n this._height = 4;\n this._genMipmaps = false;\n this._compressed = false;\n\n this._anisotropy = 1;\n this._minFilter = enums.FILTER_LINEAR;\n this._magFilter = enums.FILTER_LINEAR;\n this._mipFilter = enums.FILTER_LINEAR;\n this._wrapS = enums.WRAP_REPEAT;\n this._wrapT = enums.WRAP_REPEAT;\n // wrapR available in webgl2\n // this._wrapR = enums.WRAP_REPEAT;\n this._format = enums.TEXTURE_FMT_RGBA8;\n\n this._target = -1;\n \n this._id = _textureID++;\n }\n\n /**\n * @method destroy\n */\n destroy() {\n if (this._glID === _nullWebGLTexture) {\n console.error('The texture already destroyed');\n return;\n }\n\n let gl = this._device._gl;\n gl.deleteTexture(this._glID);\n\n this._device._stats.tex -= this.bytes;\n this._glID = _nullWebGLTexture;\n }\n}","import { enums } from './enums';\n\nclass VertexBuffer {\n /**\n * @constructor\n * @param {Device} device\n * @param {VertexFormat} format\n * @param {USAGE_*} usage\n * @param {ArrayBuffer | Uint8Array} data\n */\n constructor(device, format, usage, data) {\n this._device = device;\n this._format = format;\n this._usage = usage;\n this._bytesPerVertex = this._format._bytes;\n this._bytes = data.byteLength;\n this._numVertices = this._bytes / this._bytesPerVertex;\n\n this._needExpandDataStore = true;\n\n // update\n this._glID = device._gl.createBuffer();\n this.update(0, data);\n\n // stats\n device._stats.vb += this._bytes;\n }\n\n /**\n * @method destroy\n */\n destroy() {\n if (this._glID === -1) {\n console.error('The buffer already destroyed');\n return;\n }\n\n let gl = this._device._gl;\n gl.deleteBuffer(this._glID);\n this._device._stats.vb -= this.bytes;\n\n this._glID = -1;\n }\n\n /**\n * @method update\n * @param {Number} byteOffset\n * @param {ArrayBuffer} data\n */\n update(byteOffset, data) {\n if (this._glID === -1) {\n console.error('The buffer is destroyed');\n return;\n }\n\n if (data.byteLength === 0) return;\n\n // Need to create new buffer object when bytes exceed\n if (byteOffset + data.byteLength > this._bytes) {\n if (byteOffset) {\n // Lost data between [0, byteOffset] which is need for new buffer\n console.error('Failed to update data, bytes exceed.');\n return;\n }\n else {\n this._needExpandDataStore = true;\n this._bytes = byteOffset + data.byteLength;\n this._numVertices = this._bytes / this._bytesPerVertex;\n }\n }\n\n let gl = this._device._gl;\n let glUsage = this._usage;\n\n gl.bindBuffer(gl.ARRAY_BUFFER, this._glID);\n if (this._needExpandDataStore) {\n gl.bufferData(gl.ARRAY_BUFFER, data, glUsage);\n this._needExpandDataStore = false;\n }\n else {\n gl.bufferSubData(gl.ARRAY_BUFFER, byteOffset, data);\n }\n gl.bindBuffer(gl.ARRAY_BUFFER, null);\n }\n\n get count () {\n return this._numVertices;\n }\n\n getFormat (name) {\n return this._format.element(name);\n }\n\n setUsage (usage) {\n this._usage = usage;\n }\n}\n\nexport default VertexBuffer;\n","import { attrTypeBytes } from './enums';\nimport murmurhash2 from '../murmurhash2_gc';\n\n// ====================\n// exports\n// ====================\n\nexport default class VertexFormat {\n /**\n * @constructor\n * @param {Array} infos\n *\n * @example\n * let vertexFmt = new VertexFormat([\n * { name: gfx.ATTR_POSITION, type: gfx.ATTR_TYPE_FLOAT32, num: 3 },\n * { name: gfx.ATTR_UV0, type: gfx.ATTR_TYPE_FLOAT32, num: 2 },\n * { name: gfx.ATTR_COLOR, type: gfx.ATTR_TYPE_FLOAT32, num: 4, normalize: true },\n * ])\n */\n constructor(infos) {\n this._attr2el = {};\n this._elements = [];\n this._bytes = 0;\n\n let hash = \"\";\n\n for (let i = 0, len = infos.length; i < len; ++i) {\n let info = infos[i];\n let el = {\n name: info.name,\n offset: this._bytes,\n stride: 0,\n stream: -1,\n type: info.type,\n num: info.num,\n normalize: (info.normalize === undefined) ? false : info.normalize,\n bytes: info.num * attrTypeBytes(info.type),\n };\n\n this._attr2el[el.name] = el;\n this._elements.push(el);\n\n this._bytes += el.bytes;\n\n hash += `${el.name}:${el.num}:${el.type}:${el.normalize}`;\n }\n\n for (let i = 0, len = this._elements.length; i < len; ++i) {\n let el = this._elements[i];\n el.stride = this._bytes;\n }\n\n this._hash = murmurhash2(hash, 666);\n }\n\n /**\n * @method element\n * @param {string} attrName\n */\n element(attrName) {\n return this._attr2el[attrName];\n }\n\n /**\n * @method getHash\n */\n getHash () {\n return this._hash;\n }\n}","export default class CircularPool {\n constructor(fn, size) {\n this._cursor = 0;\n this._data = new Array(size);\n\n for (let i = 0; i < size; ++i) {\n this._data[i] = fn();\n }\n }\n\n request() {\n let item = this._data[this._cursor];\n this._cursor = (this._cursor + 1) % this._data.length;\n\n return item;\n }\n}","import sort from './timsort';\n\nexport default class FixedArray {\n constructor(size) {\n this._count = 0;\n this._data = new Array(size);\n }\n\n _resize(size) {\n if (size > this._data.length) {\n for (let i = this._data.length; i < size; ++i) {\n this._data[i] = undefined;\n }\n }\n }\n\n get length() {\n return this._count;\n }\n\n get data() {\n return this._data;\n }\n\n reset() {\n for (let i = 0; i < this._count; ++i) {\n this._data[i] = undefined;\n }\n\n this._count = 0;\n }\n\n push(val) {\n if (this._count >= this._data.length) {\n this._resize(this._data.length * 2);\n }\n\n this._data[this._count] = val;\n ++this._count;\n }\n\n pop() {\n --this._count;\n\n if (this._count < 0) {\n this._count = 0;\n }\n\n let ret = this._data[this._count];\n this._data[this._count] = undefined;\n\n return ret;\n }\n\n fastRemove(idx) {\n if (idx >= this._count || idx < 0) {\n return;\n }\n\n let last = this._count - 1;\n this._data[idx] = this._data[last];\n this._data[last] = undefined;\n this._count -= 1;\n }\n\n indexOf(val) {\n return this._data.indexOf(val);\n }\n\n sort(cmp) {\n return sort(this._data, 0, this._count, cmp);\n }\n}","export { default as CircularPool } from './circular-pool';\nexport { default as FixedArray } from './fixed-array';\nexport { default as LinkedArray } from './linked-array';\nexport { default as Pool } from './pool';\nexport { default as RecyclePool } from './recycle-pool';\nexport { default as TypedArrayPool } from './typed-array-pool';","import Pool from './pool';\n\n// NOTE: you must have `_prev` and `_next` field in the object returns by `fn`\n\nexport default class LinkedArray {\n constructor(fn, size) {\n this._fn = fn;\n this._count = 0;\n this._head = null;\n this._tail = null;\n\n this._pool = new Pool(fn, size);\n }\n\n get head() {\n return this._head;\n }\n\n get tail() {\n return this._tail;\n }\n\n get length() {\n return this._count;\n }\n\n add() {\n let node = this._pool.alloc();\n\n if (!this._tail) {\n this._head = node;\n } else {\n this._tail._next = node;\n node._prev = this._tail;\n }\n this._tail = node;\n this._count += 1;\n\n return node;\n }\n\n remove(node) {\n if (node._prev) {\n node._prev._next = node._next;\n } else {\n this._head = node._next;\n }\n\n if (node._next) {\n node._next._prev = node._prev;\n } else {\n this._tail = node._prev;\n }\n\n node._next = null;\n node._prev = null;\n this._pool.free(node);\n this._count -= 1;\n }\n\n forEach(fn, binder) {\n let cursor = this._head;\n if (!cursor) {\n return;\n }\n\n if (binder) {\n fn = fn.bind(binder);\n }\n\n let idx = 0;\n let next = cursor;\n\n while (cursor) {\n next = cursor._next;\n fn(cursor, idx, this);\n\n cursor = next;\n ++idx;\n }\n }\n}","export default class Pool {\n constructor(fn, size) {\n this._fn = fn;\n this._idx = size - 1;\n this._frees = new Array(size);\n\n for (let i = 0; i < size; ++i) {\n this._frees[i] = fn();\n }\n }\n\n _expand(size) {\n let old = this._frees;\n this._frees = new Array(size);\n\n let len = size - old.length;\n for (let i = 0; i < len; ++i) {\n this._frees[i] = this._fn();\n }\n\n for (let i = len, j = 0; i < size; ++i, ++j) {\n this._frees[i] = old[j];\n }\n\n this._idx += len;\n }\n\n alloc() {\n // create some more space (expand by 20%, minimum 1)\n if (this._idx < 0) {\n this._expand(Math.round(this._frees.length * 1.2) + 1);\n }\n\n let ret = this._frees[this._idx];\n this._frees[this._idx] = null;\n --this._idx;\n\n return ret;\n }\n\n free(obj) {\n ++this._idx;\n this._frees[this._idx] = obj;\n }\n\n /**\n * 清除对象池。\n * @param fn 清除回调,对每个释放的对象调用一次。\n */\n clear (fn) {\n for (let i = 0; i <= this._idx; i++) {\n if (fn) {\n fn(this._frees[i]);\n }\n }\n this._frees.length = 0;\n this._idx = -1;\n }\n}","import sort from './timsort';\n\n/**\n * Recycle Pool\n * @class RecyclePool\n */\nexport default class RecyclePool {\n constructor(fn, size) {\n this._fn = fn;\n this._count = 0;\n this._data = new Array(size);\n\n for (let i = 0; i < size; ++i) {\n this._data[i] = fn();\n }\n }\n\n get length() {\n return this._count;\n }\n\n get data() {\n return this._data;\n }\n\n reset() {\n this._count = 0;\n }\n\n resize(size) {\n if (size > this._data.length) {\n for (let i = this._data.length; i < size; ++i) {\n this._data[i] = this._fn();\n }\n }\n }\n\n add() {\n if (this._count >= this._data.length) {\n this.resize(this._data.length * 2);\n }\n\n return this._data[this._count++];\n }\n\n remove(idx) {\n if (idx >= this._count) {\n return;\n }\n\n let last = this._count - 1;\n let tmp = this._data[idx];\n this._data[idx] = this._data[last];\n this._data[last] = tmp;\n this._count -= 1;\n }\n\n sort(cmp) {\n return sort(this._data, 0, this._count, cmp);\n }\n}\n\ncc.RecyclePool = RecyclePool;","// reference: https://github.com/mziccard/node-timsort\n\n/**\n * Default minimum size of a run.\n */\nconst DEFAULT_MIN_MERGE = 32;\n\n/**\n * Minimum ordered subsequece required to do galloping.\n */\nconst DEFAULT_MIN_GALLOPING = 7;\n\n/**\n * Default tmp storage length. Can increase depending on the size of the\n * smallest run to merge.\n */\nconst DEFAULT_TMP_STORAGE_LENGTH = 256;\n\n/**\n * Pre-computed powers of 10 for efficient lexicographic comparison of\n * small integers.\n */\nconst POWERS_OF_TEN = [1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9]\n\n/**\n * Estimate the logarithm base 10 of a small integer.\n *\n * @param {number} x - The integer to estimate the logarithm of.\n * @return {number} - The estimated logarithm of the integer.\n */\nfunction log10(x) {\n if (x < 1e5) {\n if (x < 1e2) {\n return x < 1e1 ? 0 : 1;\n }\n\n if (x < 1e4) {\n return x < 1e3 ? 2 : 3;\n }\n\n return 4;\n }\n\n if (x < 1e7) {\n return x < 1e6 ? 5 : 6;\n }\n\n if (x < 1e9) {\n return x < 1e8 ? 7 : 8;\n }\n\n return 9;\n}\n\n/**\n * Default alphabetical comparison of items.\n *\n * @param {string|object|number} a - First element to compare.\n * @param {string|object|number} b - Second element to compare.\n * @return {number} - A positive number if a.toString() > b.toString(), a\n * negative number if .toString() < b.toString(), 0 otherwise.\n */\nfunction alphabeticalCompare(a, b) {\n if (a === b) {\n return 0;\n }\n\n if (~~a === a && ~~b === b) {\n if (a === 0 || b === 0) {\n return a < b ? -1 : 1;\n }\n\n if (a < 0 || b < 0) {\n if (b >= 0) {\n return -1;\n }\n\n if (a >= 0) {\n return 1;\n }\n\n a = -a;\n b = -b;\n }\n\n const al = log10(a);\n const bl = log10(b);\n\n let t = 0;\n\n if (al < bl) {\n a *= POWERS_OF_TEN[bl - al - 1];\n b /= 10;\n t = -1;\n } else if (al > bl) {\n b *= POWERS_OF_TEN[al - bl - 1];\n a /= 10;\n t = 1;\n }\n\n if (a === b) {\n return t;\n }\n\n return a < b ? -1 : 1;\n }\n\n let aStr = String(a);\n let bStr = String(b);\n\n if (aStr === bStr) {\n return 0;\n }\n\n return aStr < bStr ? -1 : 1;\n}\n\n/**\n * Compute minimum run length for TimSort\n *\n * @param {number} n - The size of the array to sort.\n */\nfunction minRunLength(n) {\n let r = 0;\n\n while (n >= DEFAULT_MIN_MERGE) {\n r |= (n & 1);\n n >>= 1;\n }\n\n return n + r;\n}\n\n/**\n * Counts the length of a monotonically ascending or strictly monotonically\n * descending sequence (run) starting at array[lo] in the range [lo, hi). If\n * the run is descending it is made ascending.\n *\n * @param {array} array - The array to reverse.\n * @param {number} lo - First element in the range (inclusive).\n * @param {number} hi - Last element in the range.\n * @param {function} compare - Item comparison function.\n * @return {number} - The length of the run.\n */\nfunction makeAscendingRun(array, lo, hi, compare) {\n let runHi = lo + 1;\n\n if (runHi === hi) {\n return 1;\n }\n\n // Descending\n if (compare(array[runHi++], array[lo]) < 0) {\n while (runHi < hi && compare(array[runHi], array[runHi - 1]) < 0) {\n runHi++;\n }\n\n reverseRun(array, lo, runHi);\n // Ascending\n } else {\n while (runHi < hi && compare(array[runHi], array[runHi - 1]) >= 0) {\n runHi++;\n }\n }\n\n return runHi - lo;\n}\n\n/**\n * Reverse an array in the range [lo, hi).\n *\n * @param {array} array - The array to reverse.\n * @param {number} lo - First element in the range (inclusive).\n * @param {number} hi - Last element in the range.\n */\nfunction reverseRun(array, lo, hi) {\n hi--;\n\n while (lo < hi) {\n let t = array[lo];\n array[lo++] = array[hi];\n array[hi--] = t;\n }\n}\n\n/**\n * Perform the binary sort of the array in the range [lo, hi) where start is\n * the first element possibly out of order.\n *\n * @param {array} array - The array to sort.\n * @param {number} lo - First element in the range (inclusive).\n * @param {number} hi - Last element in the range.\n * @param {number} start - First element possibly out of order.\n * @param {function} compare - Item comparison function.\n */\nfunction binaryInsertionSort(array, lo, hi, start, compare) {\n if (start === lo) {\n start++;\n }\n\n for (; start < hi; start++) {\n let pivot = array[start];\n\n // Ranges of the array where pivot belongs\n let left = lo;\n let right = start;\n\n /*\n * pivot >= array[i] for i in [lo, left)\n * pivot < array[i] for i in in [right, start)\n */\n while (left < right) {\n let mid = (left + right) >>> 1;\n\n if (compare(pivot, array[mid]) < 0) {\n right = mid;\n } else {\n left = mid + 1;\n }\n }\n\n /*\n * Move elements right to make room for the pivot. If there are elements\n * equal to pivot, left points to the first slot after them: this is also\n * a reason for which TimSort is stable\n */\n let n = start - left;\n // Switch is just an optimization for small arrays\n switch (n) {\n case 3:\n array[left + 3] = array[left + 2];\n /* falls through */\n case 2:\n array[left + 2] = array[left + 1];\n /* falls through */\n case 1:\n array[left + 1] = array[left];\n break;\n default:\n while (n > 0) {\n array[left + n] = array[left + n - 1];\n n--;\n }\n }\n\n array[left] = pivot;\n }\n}\n\n/**\n * Find the position at which to insert a value in a sorted range. If the range\n * contains elements equal to the value the leftmost element index is returned\n * (for stability).\n *\n * @param {number} value - Value to insert.\n * @param {array} array - The array in which to insert value.\n * @param {number} start - First element in the range.\n * @param {number} length - Length of the range.\n * @param {number} hint - The index at which to begin the search.\n * @param {function} compare - Item comparison function.\n * @return {number} - The index where to insert value.\n */\nfunction gallopLeft(value, array, start, length, hint, compare) {\n let lastOffset = 0;\n let maxOffset = 0;\n let offset = 1;\n\n if (compare(value, array[start + hint]) > 0) {\n maxOffset = length - hint;\n\n while (offset < maxOffset && compare(value, array[start + hint + offset]) > 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n\n // Make offsets relative to start\n lastOffset += hint;\n offset += hint;\n\n // value <= array[start + hint]\n } else {\n maxOffset = hint + 1;\n while (offset < maxOffset && compare(value, array[start + hint - offset]) <= 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n\n // Make offsets relative to start\n let tmp = lastOffset;\n lastOffset = hint - offset;\n offset = hint - tmp;\n }\n\n /*\n * Now array[start+lastOffset] < value <= array[start+offset], so value\n * belongs somewhere in the range (start + lastOffset, start + offset]. Do a\n * binary search, with invariant array[start + lastOffset - 1] < value <=\n * array[start + offset].\n */\n lastOffset++;\n while (lastOffset < offset) {\n let m = lastOffset + ((offset - lastOffset) >>> 1);\n\n if (compare(value, array[start + m]) > 0) {\n lastOffset = m + 1;\n\n } else {\n offset = m;\n }\n }\n return offset;\n}\n\n/**\n * Find the position at which to insert a value in a sorted range. If the range\n * contains elements equal to the value the rightmost element index is returned\n * (for stability).\n *\n * @param {number} value - Value to insert.\n * @param {array} array - The array in which to insert value.\n * @param {number} start - First element in the range.\n * @param {number} length - Length of the range.\n * @param {number} hint - The index at which to begin the search.\n * @param {function} compare - Item comparison function.\n * @return {number} - The index where to insert value.\n */\nfunction gallopRight(value, array, start, length, hint, compare) {\n let lastOffset = 0;\n let maxOffset = 0;\n let offset = 1;\n\n if (compare(value, array[start + hint]) < 0) {\n maxOffset = hint + 1;\n\n while (offset < maxOffset && compare(value, array[start + hint - offset]) < 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n\n // Make offsets relative to start\n let tmp = lastOffset;\n lastOffset = hint - offset;\n offset = hint - tmp;\n\n // value >= array[start + hint]\n } else {\n maxOffset = length - hint;\n\n while (offset < maxOffset && compare(value, array[start + hint + offset]) >= 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n\n // Make offsets relative to start\n lastOffset += hint;\n offset += hint;\n }\n\n /*\n * Now array[start+lastOffset] < value <= array[start+offset], so value\n * belongs somewhere in the range (start + lastOffset, start + offset]. Do a\n * binary search, with invariant array[start + lastOffset - 1] < value <=\n * array[start + offset].\n */\n lastOffset++;\n\n while (lastOffset < offset) {\n let m = lastOffset + ((offset - lastOffset) >>> 1);\n\n if (compare(value, array[start + m]) < 0) {\n offset = m;\n\n } else {\n lastOffset = m + 1;\n }\n }\n\n return offset;\n}\n\nclass TimSort {\n\n constructor(array, compare) {\n this.array = array;\n this.compare = compare;\n this.minGallop = DEFAULT_MIN_GALLOPING;\n this.length = array.length;\n\n this.tmpStorageLength = DEFAULT_TMP_STORAGE_LENGTH;\n if (this.length < 2 * DEFAULT_TMP_STORAGE_LENGTH) {\n this.tmpStorageLength = this.length >>> 1;\n }\n\n this.tmp = new Array(this.tmpStorageLength);\n\n this.stackLength =\n (this.length < 120 ? 5 :\n this.length < 1542 ? 10 :\n this.length < 119151 ? 19 : 40);\n\n this.runStart = new Array(this.stackLength);\n this.runLength = new Array(this.stackLength);\n this.stackSize = 0;\n }\n\n /**\n * Push a new run on TimSort's stack.\n *\n * @param {number} runStart - Start index of the run in the original array.\n * @param {number} runLength - Length of the run;\n */\n pushRun(runStart, runLength) {\n this.runStart[this.stackSize] = runStart;\n this.runLength[this.stackSize] = runLength;\n this.stackSize += 1;\n }\n\n /**\n * Merge runs on TimSort's stack so that the following holds for all i:\n * 1) runLength[i - 3] > runLength[i - 2] + runLength[i - 1]\n * 2) runLength[i - 2] > runLength[i - 1]\n */\n mergeRuns() {\n while (this.stackSize > 1) {\n let n = this.stackSize - 2;\n\n if ((n >= 1 &&\n this.runLength[n - 1] <= this.runLength[n] + this.runLength[n + 1]) ||\n (n >= 2 &&\n this.runLength[n - 2] <= this.runLength[n] + this.runLength[n - 1])) {\n\n if (this.runLength[n - 1] < this.runLength[n + 1]) {\n n--;\n }\n\n } else if (this.runLength[n] > this.runLength[n + 1]) {\n break;\n }\n this.mergeAt(n);\n }\n }\n\n /**\n * Merge all runs on TimSort's stack until only one remains.\n */\n forceMergeRuns() {\n while (this.stackSize > 1) {\n let n = this.stackSize - 2;\n\n if (n > 0 && this.runLength[n - 1] < this.runLength[n + 1]) {\n n--;\n }\n\n this.mergeAt(n);\n }\n }\n\n /**\n * Merge the runs on the stack at positions i and i+1. Must be always be called\n * with i=stackSize-2 or i=stackSize-3 (that is, we merge on top of the stack).\n *\n * @param {number} i - Index of the run to merge in TimSort's stack.\n */\n mergeAt(i) {\n let compare = this.compare;\n let array = this.array;\n\n let start1 = this.runStart[i];\n let length1 = this.runLength[i];\n let start2 = this.runStart[i + 1];\n let length2 = this.runLength[i + 1];\n\n this.runLength[i] = length1 + length2;\n\n if (i === this.stackSize - 3) {\n this.runStart[i + 1] = this.runStart[i + 2];\n this.runLength[i + 1] = this.runLength[i + 2];\n }\n\n this.stackSize--;\n\n /*\n * Find where the first element in the second run goes in run1. Previous\n * elements in run1 are already in place\n */\n let k = gallopRight(array[start2], array, start1, length1, 0, compare);\n start1 += k;\n length1 -= k;\n\n if (length1 === 0) {\n return;\n }\n\n /*\n * Find where the last element in the first run goes in run2. Next elements\n * in run2 are already in place\n */\n length2 = gallopLeft(array[start1 + length1 - 1], array, start2, length2, length2 - 1, compare);\n\n if (length2 === 0) {\n return;\n }\n\n /*\n * Merge remaining runs. A tmp array with length = min(length1, length2) is\n * used\n */\n if (length1 <= length2) {\n this.mergeLow(start1, length1, start2, length2);\n\n } else {\n this.mergeHigh(start1, length1, start2, length2);\n }\n }\n\n /**\n * Merge two adjacent runs in a stable way. The runs must be such that the\n * first element of run1 is bigger than the first element in run2 and the\n * last element of run1 is greater than all the elements in run2.\n * The method should be called when run1.length <= run2.length as it uses\n * TimSort temporary array to store run1. Use mergeHigh if run1.length >\n * run2.length.\n *\n * @param {number} start1 - First element in run1.\n * @param {number} length1 - Length of run1.\n * @param {number} start2 - First element in run2.\n * @param {number} length2 - Length of run2.\n */\n mergeLow(start1, length1, start2, length2) {\n\n let compare = this.compare;\n let array = this.array;\n let tmp = this.tmp;\n let i = 0;\n\n for (i = 0; i < length1; i++) {\n tmp[i] = array[start1 + i];\n }\n\n let cursor1 = 0;\n let cursor2 = start2;\n let dest = start1;\n\n array[dest++] = array[cursor2++];\n\n if (--length2 === 0) {\n for (i = 0; i < length1; i++) {\n array[dest + i] = tmp[cursor1 + i];\n }\n return;\n }\n\n if (length1 === 1) {\n for (i = 0; i < length2; i++) {\n array[dest + i] = array[cursor2 + i];\n }\n array[dest + length2] = tmp[cursor1];\n return;\n }\n\n let minGallop = this.minGallop;\n\n while (true) {\n let count1 = 0;\n let count2 = 0;\n let exit = false;\n\n do {\n if (compare(array[cursor2], tmp[cursor1]) < 0) {\n array[dest++] = array[cursor2++];\n count2++;\n count1 = 0;\n\n if (--length2 === 0) {\n exit = true;\n break;\n }\n\n } else {\n array[dest++] = tmp[cursor1++];\n count1++;\n count2 = 0;\n if (--length1 === 1) {\n exit = true;\n break;\n }\n }\n } while ((count1 | count2) < minGallop);\n\n if (exit) {\n break;\n }\n\n do {\n count1 = gallopRight(array[cursor2], tmp, cursor1, length1, 0, compare);\n\n if (count1 !== 0) {\n for (i = 0; i < count1; i++) {\n array[dest + i] = tmp[cursor1 + i];\n }\n\n dest += count1;\n cursor1 += count1;\n length1 -= count1;\n if (length1 <= 1) {\n exit = true;\n break;\n }\n }\n\n array[dest++] = array[cursor2++];\n\n if (--length2 === 0) {\n exit = true;\n break;\n }\n\n count2 = gallopLeft(tmp[cursor1], array, cursor2, length2, 0, compare);\n\n if (count2 !== 0) {\n for (i = 0; i < count2; i++) {\n array[dest + i] = array[cursor2 + i];\n }\n\n dest += count2;\n cursor2 += count2;\n length2 -= count2;\n\n if (length2 === 0) {\n exit = true;\n break;\n }\n }\n array[dest++] = tmp[cursor1++];\n\n if (--length1 === 1) {\n exit = true;\n break;\n }\n\n minGallop--;\n\n } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING);\n\n if (exit) {\n break;\n }\n\n if (minGallop < 0) {\n minGallop = 0;\n }\n\n minGallop += 2;\n }\n\n this.minGallop = minGallop;\n\n if (minGallop < 1) {\n this.minGallop = 1;\n }\n\n if (length1 === 1) {\n for (i = 0; i < length2; i++) {\n array[dest + i] = array[cursor2 + i];\n }\n array[dest + length2] = tmp[cursor1];\n\n } else if (length1 === 0) {\n throw new Error('mergeLow preconditions were not respected');\n\n } else {\n for (i = 0; i < length1; i++) {\n array[dest + i] = tmp[cursor1 + i];\n }\n }\n }\n\n /**\n * Merge two adjacent runs in a stable way. The runs must be such that the\n * first element of run1 is bigger than the first element in run2 and the\n * last element of run1 is greater than all the elements in run2.\n * The method should be called when run1.length > run2.length as it uses\n * TimSort temporary array to store run2. Use mergeLow if run1.length <=\n * run2.length.\n *\n * @param {number} start1 - First element in run1.\n * @param {number} length1 - Length of run1.\n * @param {number} start2 - First element in run2.\n * @param {number} length2 - Length of run2.\n */\n mergeHigh(start1, length1, start2, length2) {\n let compare = this.compare;\n let array = this.array;\n let tmp = this.tmp;\n let i = 0;\n\n for (i = 0; i < length2; i++) {\n tmp[i] = array[start2 + i];\n }\n\n let cursor1 = start1 + length1 - 1;\n let cursor2 = length2 - 1;\n let dest = start2 + length2 - 1;\n let customCursor = 0;\n let customDest = 0;\n\n array[dest--] = array[cursor1--];\n\n if (--length1 === 0) {\n customCursor = dest - (length2 - 1);\n\n for (i = 0; i < length2; i++) {\n array[customCursor + i] = tmp[i];\n }\n\n return;\n }\n\n if (length2 === 1) {\n dest -= length1;\n cursor1 -= length1;\n customDest = dest + 1;\n customCursor = cursor1 + 1;\n\n for (i = length1 - 1; i >= 0; i--) {\n array[customDest + i] = array[customCursor + i];\n }\n\n array[dest] = tmp[cursor2];\n return;\n }\n\n let minGallop = this.minGallop;\n\n while (true) {\n let count1 = 0;\n let count2 = 0;\n let exit = false;\n\n do {\n if (compare(tmp[cursor2], array[cursor1]) < 0) {\n array[dest--] = array[cursor1--];\n count1++;\n count2 = 0;\n if (--length1 === 0) {\n exit = true;\n break;\n }\n\n } else {\n array[dest--] = tmp[cursor2--];\n count2++;\n count1 = 0;\n if (--length2 === 1) {\n exit = true;\n break;\n }\n }\n\n } while ((count1 | count2) < minGallop);\n\n if (exit) {\n break;\n }\n\n do {\n count1 = length1 - gallopRight(tmp[cursor2], array, start1, length1, length1 - 1, compare);\n\n if (count1 !== 0) {\n dest -= count1;\n cursor1 -= count1;\n length1 -= count1;\n customDest = dest + 1;\n customCursor = cursor1 + 1;\n\n for (i = count1 - 1; i >= 0; i--) {\n array[customDest + i] = array[customCursor + i];\n }\n\n if (length1 === 0) {\n exit = true;\n break;\n }\n }\n\n array[dest--] = tmp[cursor2--];\n\n if (--length2 === 1) {\n exit = true;\n break;\n }\n\n count2 = length2 - gallopLeft(array[cursor1], tmp, 0, length2, length2 - 1, compare);\n\n if (count2 !== 0) {\n dest -= count2;\n cursor2 -= count2;\n length2 -= count2;\n customDest = dest + 1;\n customCursor = cursor2 + 1;\n\n for (i = 0; i < count2; i++) {\n array[customDest + i] = tmp[customCursor + i];\n }\n\n if (length2 <= 1) {\n exit = true;\n break;\n }\n }\n\n array[dest--] = array[cursor1--];\n\n if (--length1 === 0) {\n exit = true;\n break;\n }\n\n minGallop--;\n\n } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING);\n\n if (exit) {\n break;\n }\n\n if (minGallop < 0) {\n minGallop = 0;\n }\n\n minGallop += 2;\n }\n\n this.minGallop = minGallop;\n\n if (minGallop < 1) {\n this.minGallop = 1;\n }\n\n if (length2 === 1) {\n dest -= length1;\n cursor1 -= length1;\n customDest = dest + 1;\n customCursor = cursor1 + 1;\n\n for (i = length1 - 1; i >= 0; i--) {\n array[customDest + i] = array[customCursor + i];\n }\n\n array[dest] = tmp[cursor2];\n\n } else if (length2 === 0) {\n throw new Error('mergeHigh preconditions were not respected');\n\n } else {\n customCursor = dest - (length2 - 1);\n for (i = 0; i < length2; i++) {\n array[customCursor + i] = tmp[i];\n }\n }\n }\n}\n\n/**\n * Sort an array in the range [lo, hi) using TimSort.\n *\n * @param {array} array - The array to sort.\n * @param {number} lo - First element in the range (inclusive).\n * @param {number} hi - Last element in the range.\n * @param {function=} compare - Item comparison function. Default is alphabetical.\n */\nexport default function (array, lo, hi, compare) {\n if (!Array.isArray(array)) {\n throw new TypeError('Can only sort arrays');\n }\n\n /*\n * Handle the case where a comparison function is not provided. We do\n * lexicographic sorting\n */\n\n if (lo === undefined) {\n lo = 0;\n }\n\n if (hi === undefined) {\n hi = array.length;\n }\n\n if (compare === undefined) {\n compare = alphabeticalCompare;\n }\n\n let remaining = hi - lo;\n\n // The array is already sorted\n if (remaining < 2) {\n return;\n }\n\n let runLength = 0;\n // On small arrays binary sort can be used directly\n if (remaining < DEFAULT_MIN_MERGE) {\n runLength = makeAscendingRun(array, lo, hi, compare);\n binaryInsertionSort(array, lo, hi, lo + runLength, compare);\n return;\n }\n\n let ts = new TimSort(array, compare);\n\n let minRun = minRunLength(remaining);\n\n do {\n runLength = makeAscendingRun(array, lo, hi, compare);\n if (runLength < minRun) {\n let force = remaining;\n if (force > minRun) {\n force = minRun;\n }\n\n binaryInsertionSort(array, lo, lo + force, lo + runLength, compare);\n runLength = force;\n }\n // Push new run and merge if necessary\n ts.pushRun(lo, runLength);\n ts.mergeRuns();\n\n // Go find next run\n remaining -= runLength;\n lo += runLength;\n\n } while (remaining !== 0);\n\n // Force merging of remaining runs\n ts.forceMergeRuns();\n}","let _bufferPools = Array(8);\nfor (let i = 0; i < 8; ++i) {\n _bufferPools[i] = [];\n}\n\nfunction _nextPow16(v) {\n for (let i = 16; i <= (1 << 28); i *= 16) {\n if (v <= i) {\n return i;\n }\n }\n return 0;\n}\n\nfunction _log2(v) {\n let r, shift;\n r = (v > 0xFFFF) << 4; v >>>= r;\n shift = (v > 0xFF) << 3; v >>>= shift; r |= shift;\n shift = (v > 0xF) << 2; v >>>= shift; r |= shift;\n shift = (v > 0x3) << 1; v >>>= shift; r |= shift;\n return r | (v >> 1);\n}\n\nfunction _alloc(n) {\n let sz = _nextPow16(n);\n let bin = _bufferPools[_log2(sz) >> 2];\n if (bin.length > 0) {\n return bin.pop();\n }\n return new ArrayBuffer(sz);\n}\n\nfunction _free(buf) {\n _bufferPools[_log2(buf.byteLength) >> 2].push(buf);\n}\n\nexport default {\n alloc_int8(n) {\n let result = new Int8Array(_alloc(n), 0, n);\n if (result.length !== n) {\n return result.subarray(0, n);\n }\n\n return result;\n },\n\n alloc_uint8(n) {\n let result = new Uint8Array(_alloc(n), 0, n);\n if (result.length !== n) {\n return result.subarray(0, n);\n }\n\n return result;\n },\n\n alloc_int16(n) {\n let result = new Int16Array(_alloc(2 * n), 0, n);\n if (result.length !== n) {\n return result.subarray(0, n);\n }\n\n return result;\n },\n\n alloc_uint16(n) {\n let result = new Uint16Array(_alloc(2 * n), 0, n);\n if (result.length !== n) {\n return result.subarray(0, n);\n }\n\n return result;\n },\n\n alloc_int32(n) {\n let result = new Int32Array(_alloc(4 * n), 0, n);\n if (result.length !== n) {\n return result.subarray(0, n);\n }\n\n return result;\n },\n\n alloc_uint32(n) {\n let result = new Uint32Array(_alloc(4 * n), 0, n);\n if (result.length !== n) {\n return result.subarray(0, n);\n }\n\n return result;\n },\n\n alloc_float32(n) {\n let result = new Float32Array(_alloc(4 * n), 0, n);\n if (result.length !== n) {\n return result.subarray(0, n);\n }\n\n return result;\n },\n\n alloc_float64(n) {\n let result = new Float64Array(_alloc(8 * n), 0, n);\n if (result.length !== n) {\n return result.subarray(0, n);\n }\n\n return result;\n },\n\n alloc_dataview(n) {\n let result = new DataView(_alloc(n), 0, n);\n if (result.length !== n) {\n return result.subarray(0, n);\n }\n\n return result;\n },\n\n free(array) {\n _free(array.buffer);\n },\n\n reset() {\n let _bufferPools = Array(8);\n for (let i = 0; i < 8; ++i) {\n _bufferPools[i] = [];\n }\n },\n};","/**\n * JS Implementation of MurmurHash2\n * \n * @author Gary Court\n * @see http://github.com/garycourt/murmurhash-js\n * @author Austin Appleby\n * @see http://sites.google.com/site/murmurhash/\n * \n * @param {string} str ASCII only\n * @param {number} seed Positive integer only\n * @return {number} 32-bit positive integer hash\n */\n\nexport default function murmurhash2_32_gc(str, seed) {\n var\n l = str.length,\n h = seed ^ l,\n i = 0,\n k;\n \n while (l >= 4) {\n \tk = \n \t ((str.charCodeAt(i) & 0xff)) |\n \t ((str.charCodeAt(++i) & 0xff) << 8) |\n \t ((str.charCodeAt(++i) & 0xff) << 16) |\n \t ((str.charCodeAt(++i) & 0xff) << 24);\n \n k = (((k & 0xffff) * 0x5bd1e995) + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n k ^= k >>> 24;\n k = (((k & 0xffff) * 0x5bd1e995) + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n\n\th = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16)) ^ k;\n\n l -= 4;\n ++i;\n }\n \n switch (l) {\n case 3: h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n case 2: h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n case 1: h ^= (str.charCodeAt(i) & 0xff);\n h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n }\n\n h ^= h >>> 13;\n h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n h ^= h >>> 15;\n\n return h >>> 0;\n}","// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\nimport { Vec3, Vec4, Mat4 } from '../../core/value-types';\nimport BaseRenderer from '../core/base-renderer';\nimport enums from '../enums';\nimport { RecyclePool } from '../memop';\n\nlet _a16_view = new Float32Array(16);\nlet _a16_view_inv = new Float32Array(16);\nlet _a16_proj = new Float32Array(16);\nlet _a16_viewProj = new Float32Array(16);\nlet _a4_camPos = new Float32Array(4);\n\nlet _a64_shadow_lightViewProj = new Float32Array(64);\nlet _a16_shadow_lightViewProjs = [];\nlet _a4_shadow_info = new Float32Array(4);\n\nlet _camPos = new Vec4(0, 0, 0, 0);\nlet _camFwd = new Vec3(0, 0, 0);\nlet _v3_tmp1 = new Vec3(0, 0, 0);\n\nconst CC_MAX_LIGHTS = 4;\nconst CC_MAX_SHADOW_LIGHTS = 2;\n\nlet _float16_pool = new RecyclePool(() => {\n return new Float32Array(16);\n}, 8);\n\nfunction sortView (a, b) {\n return (a._priority - b._priority);\n}\n\nexport default class ForwardRenderer extends BaseRenderer {\n constructor(device, builtin) {\n super(device, builtin);\n\n this._time = new Float32Array(4);\n\n this._lights = [];\n this._shadowLights = [];\n\n this._numLights = 0;\n\n this._defines = {\n };\n\n this._registerStage('shadowcast', this._shadowStage.bind(this));\n this._registerStage('opaque', this._opaqueStage.bind(this));\n this._registerStage('transparent', this._transparentStage.bind(this));\n }\n\n reset () {\n _float16_pool.reset();\n super.reset();\n }\n\n render (scene, dt) {\n this.reset();\n\n if (!CC_EDITOR) {\n if (dt) {\n this._time[0] += dt;\n this._time[1] = dt;\n this._time[2] ++;\n }\n this._device.setUniform('cc_time', this._time);\n }\n\n this._updateLights(scene);\n\n const canvas = this._device._gl.canvas;\n for (let i = 0; i < scene._cameras.length; ++i) {\n let view = this._requestView();\n let width = canvas.width;\n let height = canvas.height;\n let camera = scene._cameras.data[i];\n camera.extractView(view, width, height);\n }\n\n // render by cameras\n this._viewPools.sort(sortView);\n\n for (let i = 0; i < this._viewPools.length; ++i) {\n let view = this._viewPools.data[i];\n this._render(view, scene);\n }\n }\n\n // direct render a single camera\n renderCamera (camera, scene) {\n this.reset();\n\n this._updateLights(scene);\n\n const canvas = this._device._gl.canvas;\n let width = canvas.width;\n let height = canvas.height;\n\n let view = this._requestView();\n camera.extractView(view, width, height);\n\n // render by cameras\n this._viewPools.sort(sortView);\n\n for (let i = 0; i < this._viewPools.length; ++i) {\n let view = this._viewPools.data[i];\n this._render(view, scene);\n }\n }\n\n _updateLights (scene) {\n this._lights.length = 0;\n this._shadowLights.length = 0;\n\n let lights = scene._lights;\n for (let i = 0; i < lights.length; ++i) {\n let light = lights.data[i];\n light.update(this._device);\n\n if (light.shadowType !== enums.SHADOW_NONE) {\n if (this._shadowLights.length < CC_MAX_SHADOW_LIGHTS) {\n this._shadowLights.splice(0, 0, light);\n }\n let view = this._requestView();\n light.extractView(view, ['shadowcast']);\n\n this._lights.splice(0, 0, light);\n }\n else {\n this._lights.push(light);\n }\n }\n\n this._updateLightDefines();\n this._numLights = lights._count;\n }\n\n _updateLightDefines () {\n let defines = this._defines;\n\n for (let i = 0; i < this._lights.length; ++i) {\n let light = this._lights[i];\n let lightKey = `CC_LIGHT_${i}_TYPE`;\n let shadowKey = `CC_SHADOW_${i}_TYPE`;\n if (defines[lightKey] !== light._type){\n defines[lightKey] = light._type;\n this._definesChanged = true;\n }\n if (defines[shadowKey] !== light._shadowType){\n defines[shadowKey] = light._shadowType;\n this._definesChanged = true;\n }\n }\n\n let newCount = Math.min(CC_MAX_LIGHTS, this._lights.length);\n if (defines.CC_NUM_LIGHTS !== newCount) {\n defines.CC_NUM_LIGHTS = newCount;\n this._definesChanged = true;\n }\n newCount = Math.min(CC_MAX_LIGHTS, this._shadowLights.length);\n if (defines.CC_NUM_SHADOW_LIGHTS !== newCount) {\n defines.CC_NUM_SHADOW_LIGHTS = newCount;\n this._definesChanged = true;\n }\n }\n\n _submitLightsUniforms () {\n let device = this._device;\n\n if (this._lights.length > 0) {\n let positionAndRanges = _float16_pool.add();\n let directions = _float16_pool.add();\n let colors = _float16_pool.add();\n let lightNum = Math.min(CC_MAX_LIGHTS, this._lights.length);\n for (let i = 0; i < lightNum; ++i) {\n let light = this._lights[i];\n let index = i * 4;\n\n colors.set(light._colorUniform, index);\n directions.set(light._directionUniform, index);\n positionAndRanges.set(light._positionUniform, index);\n positionAndRanges[index+3] = light._range;\n\n if (light._type === enums.LIGHT_SPOT) {\n directions[index+3] = light._spotUniform[0];\n colors[index+3] = light._spotUniform[1];\n }\n else {\n directions[index+3] = 0;\n colors[index+3] = 0;\n }\n }\n\n device.setUniform('cc_lightDirection', directions);\n device.setUniform('cc_lightColor', colors);\n device.setUniform('cc_lightPositionAndRange', positionAndRanges);\n }\n }\n\n _submitShadowStageUniforms(view) {\n\n let light = view._shadowLight;\n\n let shadowInfo = _a4_shadow_info;\n shadowInfo[0] = light.shadowMinDepth;\n shadowInfo[1] = light.shadowMaxDepth;\n shadowInfo[2] = light.shadowDepthScale;\n shadowInfo[3] = light.shadowDarkness;\n\n this._device.setUniform('cc_shadow_map_lightViewProjMatrix', Mat4.toArray(_a16_viewProj, view._matViewProj));\n this._device.setUniform('cc_shadow_map_info', shadowInfo);\n this._device.setUniform('cc_shadow_map_bias', light.shadowBias);\n\n this._defines.CC_SHADOW_TYPE = light._shadowType;\n }\n\n _submitOtherStagesUniforms() {\n let shadowInfo = _float16_pool.add();\n\n for (let i = 0; i < this._shadowLights.length; ++i) {\n let light = this._shadowLights[i];\n let view = _a16_shadow_lightViewProjs[i];\n if (!view) {\n view = _a16_shadow_lightViewProjs[i] = new Float32Array(_a64_shadow_lightViewProj.buffer, i * 64, 16);\n }\n Mat4.toArray(view, light.viewProjMatrix);\n\n let index = i*4;\n shadowInfo[index] = light.shadowMinDepth;\n shadowInfo[index+1] = light.shadowMaxDepth;\n shadowInfo[index+2] = light._shadowResolution;\n shadowInfo[index+3] = light.shadowDarkness;\n }\n\n this._device.setUniform(`cc_shadow_lightViewProjMatrix`, _a64_shadow_lightViewProj);\n this._device.setUniform(`cc_shadow_info`, shadowInfo);\n // this._device.setUniform(`cc_frustumEdgeFalloff_${index}`, light.frustumEdgeFalloff);\n }\n\n _sortItems (items) {\n // sort items\n items.sort((a, b) => {\n // if (a.layer !== b.layer) {\n // return a.layer - b.layer;\n // }\n\n if (a.passes.length !== b.passes.length) {\n return a.passes.length - b.passes.length;\n }\n\n return a.sortKey - b.sortKey;\n });\n }\n\n _shadowStage (view, items) {\n // update rendering\n this._submitShadowStageUniforms(view);\n\n // this._sortItems(items);\n\n // draw it\n for (let i = 0; i < items.length; ++i) {\n let item = items.data[i];\n if (item.effect.getDefine('CC_CASTING_SHADOW')) {\n this._draw(item);\n }\n }\n }\n\n _drawItems (view, items) {\n let shadowLights = this._shadowLights;\n if (shadowLights.length === 0 && this._numLights === 0) {\n for (let i = 0; i < items.length; ++i) {\n let item = items.data[i];\n this._draw(item);\n }\n }\n else {\n for (let i = 0; i < items.length; ++i) {\n let item = items.data[i];\n\n for (let shadowIdx = 0; shadowIdx < shadowLights.length; ++shadowIdx) {\n this._device.setTexture('cc_shadow_map_'+shadowIdx, shadowLights[shadowIdx].shadowMap, this._allocTextureUnit());\n }\n\n this._draw(item);\n }\n }\n }\n\n _opaqueStage (view, items) {\n view.getPosition(_camPos);\n\n // update uniforms\n this._device.setUniform('cc_matView', Mat4.toArray(_a16_view, view._matView));\n this._device.setUniform('cc_matViewInv', Mat4.toArray(_a16_view_inv, view._matViewInv));\n this._device.setUniform('cc_matProj', Mat4.toArray(_a16_proj, view._matProj));\n this._device.setUniform('cc_matViewProj', Mat4.toArray(_a16_viewProj, view._matViewProj));\n this._device.setUniform('cc_cameraPos', Vec4.toArray(_a4_camPos, _camPos));\n\n // update rendering\n this._submitLightsUniforms();\n this._submitOtherStagesUniforms();\n\n this._drawItems(view, items);\n }\n\n _transparentStage (view, items) {\n view.getPosition(_camPos);\n view.getForward(_camFwd);\n\n // update uniforms\n this._device.setUniform('cc_matView', Mat4.toArray(_a16_view, view._matView));\n this._device.setUniform('cc_matViewInv', Mat4.toArray(_a16_view_inv, view._matViewInv));\n this._device.setUniform('cc_matProj', Mat4.toArray(_a16_proj, view._matProj));\n this._device.setUniform('cc_matViewProj', Mat4.toArray(_a16_viewProj, view._matViewProj));\n this._device.setUniform('cc_cameraPos', Vec4.toArray(_a4_camPos, _camPos));\n\n this._submitLightsUniforms();\n this._submitOtherStagesUniforms();\n\n // calculate zdist\n for (let i = 0; i < items.length; ++i) {\n let item = items.data[i];\n\n // TODO: we should use mesh center instead!\n item.node.getWorldPosition(_v3_tmp1);\n\n Vec3.sub(_v3_tmp1, _v3_tmp1, _camPos);\n item.sortKey = -Vec3.dot(_v3_tmp1, _camFwd);\n }\n\n this._sortItems(items);\n this._drawItems(view, items);\n }\n}\n","// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\nimport { Vec3, Mat4, lerp, Vec4 } from '../../core/value-types';\nimport { Ray } from '../../core/geom-utils';\nimport enums from '../enums';\n\nlet _tmp_mat4 = new Mat4();\n\nlet _matView = new Mat4();\nlet _matViewInv = new Mat4();\nlet _matProj = new Mat4();\nlet _matViewProj = new Mat4();\nlet _matInvViewProj = new Mat4();\nlet _tmp_v3 = new Vec3();\nlet _tmp2_v3 = new Vec3();\n\n/**\n * A representation of a camera instance\n */\nexport default class Camera {\n _poolID = -1;\n _node = null;\n _projection = enums.PROJ_PERSPECTIVE;\n\n // priority. the smaller one will be rendered first\n _priority = 0;\n\n // clear options\n _color = new Vec4(0.2, 0.3, 0.47, 1);\n _depth = 1;\n _stencil = 0;\n _clearFlags = enums.CLEAR_COLOR | enums.CLEAR_DEPTH;\n _clearModel = null;\n\n // stages & framebuffer\n _stages = [];\n _framebuffer = null;\n\n // projection properties\n _near = 0.01;\n _far = 1000.0;\n _fov = Math.PI / 4.0; // vertical fov\n _rect = {\n x: 0, y: 0, w: 1, h: 1\n };\n\n // ortho properties\n _orthoHeight = 10;\n\n _cullingMask = 0xffffffff;\n\n\n // culling mask\n get cullingMask () {\n return this._cullingMask;\n }\n\n set cullingMask (mask) {\n this._cullingMask = mask;\n }\n\n setCullingMask (mask) {\n this._cullingMask = mask;\n }\n\n /**\n * Get the hosting node of this camera\n * @returns {Node} the hosting node\n */\n getNode () {\n return this._node;\n }\n\n /**\n * Set the hosting node of this camera\n * @param {Node} node the hosting node\n */\n setNode (node) {\n this._node = node;\n }\n\n /**\n * Get the projection type of the camera\n * @returns {number} camera projection type\n */\n getType () {\n return this._projection;\n }\n\n /**\n * Set the projection type of the camera\n * @param {number} type camera projection type\n */\n setType (type) {\n this._projection = type;\n }\n\n /**\n * Get the priority of the camera\n * @returns {number} camera priority\n */\n getPriority () {\n return this._priority;\n }\n\n /**\n * Set the priority of the camera\n * @param {number} priority camera priority\n */\n setPriority (priority) {\n this._priority = priority;\n }\n\n /**\n * Get the orthogonal height of the camera\n * @returns {number} camera height\n */\n getOrthoHeight () {\n return this._orthoHeight;\n }\n\n /**\n * Set the orthogonal height of the camera\n * @param {number} val camera height\n */\n setOrthoHeight (val) {\n this._orthoHeight = val;\n }\n\n /**\n * Get the field of view of the camera\n * @returns {number} camera field of view\n */\n getFov () {\n return this._fov;\n }\n\n /**\n * Set the field of view of the camera\n * @param {number} fov camera field of view\n */\n setFov (fov) {\n this._fov = fov;\n }\n\n /**\n * Get the near clipping distance of the camera\n * @returns {number} camera near clipping distance\n */\n getNear () {\n return this._near;\n }\n\n /**\n * Set the near clipping distance of the camera\n * @param {number} near camera near clipping distance\n */\n setNear (near) {\n this._near = near;\n }\n\n /**\n * Get the far clipping distance of the camera\n * @returns {number} camera far clipping distance\n */\n getFar () {\n return this._far;\n }\n\n /**\n * Set the far clipping distance of the camera\n * @param {number} far camera far clipping distance\n */\n setFar (far) {\n this._far = far;\n }\n\n /**\n * Get the clear color of the camera\n * @returns {Vec4} out the receiving color vector\n */\n getColor (out) {\n return Vec4.copy(out, this._color);\n }\n\n /**\n * Set the clear color of the camera\n * @param {number} r red channel of camera clear color\n * @param {number} g green channel of camera clear color\n * @param {number} b blue channel of camera clear color\n * @param {number} a alpha channel of camera clear color\n */\n setColor (r, g, b, a) {\n Vec4.set(this._color, r, g, b, a);\n }\n\n /**\n * Get the clear depth of the camera\n * @returns {number} camera clear depth\n */\n getDepth () {\n return this._depth;\n }\n\n /**\n * Set the clear depth of the camera\n * @param {number} depth camera clear depth\n */\n setDepth (depth) {\n this._depth = depth;\n }\n\n /**\n * Get the clearing stencil value of the camera\n * @returns {number} camera clearing stencil value\n */\n getStencil () {\n return this._stencil;\n }\n\n /**\n * Set the clearing stencil value of the camera\n * @param {number} stencil camera clearing stencil value\n */\n setStencil (stencil) {\n this._stencil = stencil;\n }\n\n /**\n * Get the clearing flags of the camera\n * @returns {number} camera clearing flags\n */\n getClearFlags () {\n return this._clearFlags;\n }\n\n /**\n * Set the clearing flags of the camera\n * @param {number} flags camera clearing flags\n */\n setClearFlags (flags) {\n this._clearFlags = flags;\n }\n\n /**\n * Get the rect of the camera\n * @param {Object} out the receiving object\n * @returns {Object} camera rect\n */\n getRect (out) {\n out.x = this._rect.x;\n out.y = this._rect.y;\n out.w = this._rect.w;\n out.h = this._rect.h;\n\n return out;\n }\n\n /**\n * Set the rect of the camera\n * @param {Number} x - [0,1]\n * @param {Number} y - [0,1]\n * @param {Number} w - [0,1]\n * @param {Number} h - [0,1]\n */\n setRect (x, y, w, h) {\n this._rect.x = x;\n this._rect.y = y;\n this._rect.w = w;\n this._rect.h = h;\n }\n\n /**\n * Get the stages of the camera\n * @returns {string[]} camera stages\n */\n getStages () {\n return this._stages;\n }\n\n /**\n * Set the stages of the camera\n * @param {string[]} stages camera stages\n */\n setStages (stages) {\n this._stages = stages;\n }\n\n /**\n * Get the framebuffer of the camera\n * @returns {FrameBuffer} camera framebuffer\n */\n getFramebuffer () {\n return this._framebuffer;\n }\n\n /**\n * Set the framebuffer of the camera\n * @param {FrameBuffer} framebuffer camera framebuffer\n */\n setFrameBuffer (framebuffer) {\n this._framebuffer = framebuffer;\n }\n\n _calcMatrices (width, height) {\n // view matrix\n this._node.getWorldRT(_matViewInv);\n Mat4.invert(_matView, _matViewInv);\n\n // projection matrix\n let aspect = width / height;\n if (this._projection === enums.PROJ_PERSPECTIVE) {\n Mat4.perspective(_matProj,\n this._fov,\n aspect,\n this._near,\n this._far\n );\n } else {\n let x = this._orthoHeight * aspect;\n let y = this._orthoHeight;\n Mat4.ortho(_matProj,\n -x, x, -y, y, this._near, this._far\n );\n }\n\n // view-projection\n Mat4.mul(_matViewProj, _matProj, _matView);\n // inv view-projection\n Mat4.invert(_matInvViewProj, _matViewProj);\n }\n\n /**\n * extract a view of this camera\n * @param {View} out the receiving view\n * @param {number} width framebuffer width\n * @param {number} height framebuffer height\n */\n extractView (out, width, height) {\n if (this._framebuffer) {\n width = this._framebuffer._width;\n height = this._framebuffer._height;\n }\n\n // priority\n out._priority = this._priority;\n\n // rect\n out._rect.x = this._rect.x * width;\n out._rect.y = this._rect.y * height;\n out._rect.w = this._rect.w * width;\n out._rect.h = this._rect.h * height;\n\n // clear opts\n this.getColor(out._color);\n out._depth = this._depth;\n out._stencil = this._stencil;\n out._clearFlags = this._clearFlags;\n out._clearModel = this._clearModel;\n\n // stages & framebuffer\n out._stages = this._stages;\n out._framebuffer = this._framebuffer;\n\n this._calcMatrices(width, height);\n Mat4.copy(out._matView, _matView);\n Mat4.copy(out._matViewInv, _matViewInv);\n Mat4.copy(out._matProj, _matProj);\n Mat4.copy(out._matViewProj, _matViewProj);\n Mat4.copy(out._matInvViewProj, _matInvViewProj);\n\n out._cullingMask = this._cullingMask;\n }\n\n /**\n * transform a screen position to a world space ray\n * @param {number} x the screen x position to be transformed\n * @param {number} y the screen y position to be transformed\n * @param {number} width framebuffer width\n * @param {number} height framebuffer height\n * @param {Ray} out the resulting ray\n * @returns {Ray} the resulting ray\n */\n screenPointToRay (x, y, width, height, out) {\n if (!cc.geomUtils) return out;\n\n out = out || new Ray();\n this._calcMatrices(width, height);\n\n let cx = this._rect.x * width;\n let cy = this._rect.y * height;\n let cw = this._rect.w * width;\n let ch = this._rect.h * height;\n\n // far plane intersection\n Vec3.set(_tmp2_v3, (x - cx) / cw * 2 - 1, (y - cy) / ch * 2 - 1, 1);\n Vec3.transformMat4(_tmp2_v3, _tmp2_v3, _matInvViewProj);\n\n if (this._projection === enums.PROJ_PERSPECTIVE) {\n // camera origin\n this._node.getWorldPosition(_tmp_v3);\n } else {\n // near plane intersection\n Vec3.set(_tmp_v3, (x - cx) / cw * 2 - 1, (y - cy) / ch * 2 - 1, -1);\n Vec3.transformMat4(_tmp_v3, _tmp_v3, _matInvViewProj);\n }\n\n return Ray.fromPoints(out, _tmp_v3, _tmp2_v3);\n }\n\n /**\n * transform a screen position to world space\n * @param {Vec3} out the resulting vector\n * @param {Vec3} screenPos the screen position to be transformed\n * @param {number} width framebuffer width\n * @param {number} height framebuffer height\n * @returns {Vec3} the resulting vector\n */\n screenToWorld (out, screenPos, width, height) {\n this._calcMatrices(width, height);\n\n let cx = this._rect.x * width;\n let cy = this._rect.y * height;\n let cw = this._rect.w * width;\n let ch = this._rect.h * height;\n\n if (this._projection === enums.PROJ_PERSPECTIVE) {\n // calculate screen pos in far clip plane\n Vec3.set(out,\n (screenPos.x - cx) / cw * 2 - 1,\n (screenPos.y - cy) / ch * 2 - 1,\n 0.9999\n );\n\n // transform to world\n Vec3.transformMat4(out, out, _matInvViewProj);\n\n // lerp to depth z\n this._node.getWorldPosition(_tmp_v3);\n\n Vec3.lerp(out, _tmp_v3, out, lerp(this._near / this._far, 1, screenPos.z));\n } else {\n Vec3.set(out,\n (screenPos.x - cx) / cw * 2 - 1,\n (screenPos.y - cy) / ch * 2 - 1,\n screenPos.z * 2 - 1\n );\n\n // transform to world\n Vec3.transformMat4(out, out, _matInvViewProj);\n }\n\n return out;\n }\n\n /**\n * transform a world space position to screen space\n * @param {Vec3} out the resulting vector\n * @param {Vec3} worldPos the world space position to be transformed\n * @param {number} width framebuffer width\n * @param {number} height framebuffer height\n * @returns {Vec3} the resulting vector\n */\n worldToScreen (out, worldPos, width, height) {\n this._calcMatrices(width, height);\n\n let cx = this._rect.x * width;\n let cy = this._rect.y * height;\n let cw = this._rect.w * width;\n let ch = this._rect.h * height;\n\n Vec3.transformMat4(out, worldPos, _matViewProj);\n out.x = cx + (out.x + 1) * 0.5 * cw;\n out.y = cy + (out.y + 1) * 0.5 * ch;\n out.z = out.z * 0.5 + 0.5;\n\n return out;\n }\n\n /**\n * transform a world space matrix to screen space\n * @param {Mat4} out the resulting vector\n * @param {Mat4} worldMatrix the world space matrix to be transformed\n * @param {number} width framebuffer width\n * @param {number} height framebuffer height\n * @returns {Mat4} the resulting vector\n */\n worldMatrixToScreen (out, worldMatrix, width, height) {\n this._calcMatrices(width, height);\n\n Mat4.mul(out, _matViewProj, worldMatrix);\n\n let halfWidth = width / 2;\n let halfHeight = height / 2;\n Mat4.identity(_tmp_mat4);\n Mat4.transform(_tmp_mat4, _tmp_mat4, Vec3.set(_tmp_v3, halfWidth, halfHeight, 0));\n Mat4.scale(_tmp_mat4, _tmp_mat4, Vec3.set(_tmp_v3, halfWidth, halfHeight, 1));\n\n Mat4.mul(out, _tmp_mat4, out);\n\n return out;\n }\n}\n","// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n/**\n * A representation of a model\n */\nexport default class Model {\n /**\n * Setup a default empty model\n */\n constructor() {\n this._type = 'default';\n this._poolID = -1;\n this._node = null;\n this._inputAssembler = null;\n this._effect = null;\n this._viewID = -1;\n this._cameraID = -1;\n this._userKey = -1;\n this._castShadow = false;\n this._boundingShape = null;\n }\n\n /**\n * Set the hosting node of this model\n * @param {Node} node the hosting node\n */\n setNode(node) {\n this._node = node;\n }\n\n /**\n * Set the input assembler\n * @param {InputAssembler} ia\n */\n setInputAssembler(ia) {\n this._inputAssembler = ia;\n }\n\n /**\n * Set the model effect\n * @param {?Effect} effect the effect to use\n */\n setEffect(effect) {\n this._effect = effect;\n }\n\n /**\n * Set the user key\n * @param {number} key\n */\n setUserKey(key) {\n this._userKey = key;\n }\n\n /**\n * Extract a drawing item\n * @param {Object} out the receiving item\n */\n extractDrawItem(out) {\n out.model = this;\n out.node = this._node;\n out.ia = this._inputAssembler;\n out.effect = this._effect;\n }\n}\n","// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\nimport { FixedArray } from '../memop';\n\n/**\n * A representation of the scene\n */\nclass Scene {\n /**\n * Setup a default empty scene\n */\n constructor(app) {\n this._lights = new FixedArray(16);\n this._models = new FixedArray(16);\n this._cameras = new FixedArray(16);\n this._debugCamera = null;\n this._app = app;\n\n // NOTE: we don't use pool for views (because it's less changed and it doesn't have poolID)\n this._views = [];\n }\n\n _add(pool, item) {\n if (item._poolID !== -1) {\n return;\n }\n\n pool.push(item);\n item._poolID = pool.length - 1;\n }\n\n _remove(pool, item) {\n if (item._poolID === -1) {\n return;\n }\n\n pool.data[pool.length-1]._poolID = item._poolID;\n pool.fastRemove(item._poolID);\n item._poolID = -1;\n }\n\n /**\n * reset the model viewIDs\n */\n reset() {\n for (let i = 0; i < this._models.length; ++i) {\n let model = this._models.data[i];\n model._viewID = -1;\n }\n }\n\n /**\n * Set the debug camera\n * @param {Camera} cam the debug camera\n */\n setDebugCamera(cam) {\n this._debugCamera = cam;\n }\n\n /**\n * Get the count of registered cameras\n * @returns {number} camera count\n */\n getCameraCount() {\n return this._cameras.length;\n }\n\n /**\n * Get the specified camera\n * @param {number} idx camera index\n * @returns {Camera} the specified camera\n */\n getCamera(idx) {\n return this._cameras.data[idx];\n }\n\n /**\n * register a camera\n * @param {Camera} camera the new camera\n */\n addCamera(camera) {\n this._add(this._cameras, camera);\n }\n\n /**\n * remove a camera\n * @param {Camera} camera the camera to be removed\n */\n removeCamera(camera) {\n this._remove(this._cameras, camera);\n }\n\n /**\n * Get the count of registered model\n * @returns {number} model count\n */\n getModelCount() {\n return this._models.length;\n }\n\n /**\n * Get the specified model\n * @param {number} idx model index\n * @returns {Model} the specified model\n */\n getModel(idx) {\n return this._models.data[idx];\n }\n\n /**\n * register a model\n * @param {Model} model the new model\n */\n addModel(model) {\n this._add(this._models, model);\n }\n\n /**\n * remove a model\n * @param {Model} model the model to be removed\n */\n removeModel(model) {\n this._remove(this._models, model);\n }\n\n /**\n * Get the count of registered light\n * @returns {number} light count\n */\n getLightCount() {\n return this._lights.length;\n }\n\n /**\n * Get the specified light\n * @param {number} idx light index\n * @returns {Light} the specified light\n */\n getLight(idx) {\n return this._lights.data[idx];\n }\n\n /**\n * register a light\n * @param {Light} light the new light\n */\n addLight(light) {\n this._add(this._lights, light);\n }\n\n /**\n * remove a light\n * @param {Light} light the light to be removed\n */\n removeLight(light) {\n this._remove(this._lights, light);\n }\n\n /**\n * register a view\n * @param {View} view the new view\n */\n addView(view) {\n if (this._views.indexOf(view) === -1) {\n this._views.push(view);\n }\n }\n\n /**\n * remove a view\n * @param {View} view the view to be removed\n */\n removeView(view) {\n let idx = this._views.indexOf(view);\n if (idx !== -1) {\n this._views.splice(idx, 1);\n }\n }\n}\n\nexport default Scene;\n","import enums from './enums';\nimport { Vec2, Vec3, Vec4, Color, Mat4 } from '../core/value-types';\nimport Texture2D from '../core/assets/CCTexture2D';\n\nlet gfxTexture2D = null, gfxTextureCube = null;\nif (CC_JSB && CC_NATIVERENDERER) {\n gfxTexture2D = gfx.Texture2D;\n} else {\n gfxTexture2D = require('./gfx/texture-2d');\n}\n\nconst CCObject = cc.Object;\n\nlet ctor2default = {\n [Boolean]: v => v || false,\n [Number]: v => v ? (ArrayBuffer.isView(v) ? v[0] : v) : 0,\n [Vec2]: v => v ? cc.v2(v[0], v[1]) : cc.v2(),\n [Vec3]: v => v ? cc.v3(v[0], v[1], v[2]) : cc.v3(),\n [Vec4]: v => v ? cc.v4(v[0], v[1], v[2], v[3]) : cc.v4(),\n [Color]: v => v ? cc.color(v[0] * 255, v[1] * 255, v[2] * 255,\n (v[3] || 1) * 255) : cc.color(),\n [Mat4]: v => v ? cc.mat4(\n v[0], v[1], v[2], v[3],\n v[4], v[5], v[6], v[7],\n v[8], v[9], v[10], v[11],\n v[12], v[13], v[14], v[15],\n ) : cc.mat4(),\n [Texture2D]: () => null,\n [CCObject]: () => null\n};\n\n\nlet enums2ctor = {\n [enums.PARAM_INT]: Number,\n [enums.PARAM_INT2]: Vec2,\n [enums.PARAM_INT3]: Vec3,\n [enums.PARAM_INT4]: Vec4,\n [enums.PARAM_FLOAT]: Number,\n [enums.PARAM_FLOAT2]: Vec2,\n [enums.PARAM_FLOAT3]: Vec3,\n [enums.PARAM_FLOAT4]: Vec4,\n [enums.PARAM_MAT4]: Mat4,\n [enums.PARAM_TEXTURE_2D]: Texture2D,\n \n color: Color,\n number: Number,\n boolean: Boolean,\n default: CCObject\n};\n\nexport let ctor2enums = {\n [Number]: enums.PARAM_FLOAT,\n [Vec2]: enums.PARAM_FLOAT2,\n [Vec3]: enums.PARAM_FLOAT3,\n [Vec4]: enums.PARAM_FLOAT4,\n [Color]: enums.PARAM_COLOR3,\n [Color]: enums.PARAM_COLOR4,\n [Mat4]: enums.PARAM_MAT4,\n [Texture2D]: enums.PARAM_TEXTURE_2D,\n [gfxTexture2D]: enums.PARAM_TEXTURE_2D,\n};\n\nexport let enums2default = {\n [enums.PARAM_INT]: new Uint32Array([0]),\n [enums.PARAM_INT2]: new Uint32Array([0, 0]),\n [enums.PARAM_INT3]: new Uint32Array([0, 0, 0]),\n [enums.PARAM_INT4]: new Uint32Array([0, 0, 0, 0]),\n [enums.PARAM_FLOAT]: new Float32Array([0]),\n [enums.PARAM_FLOAT2]: new Float32Array([0, 0]),\n [enums.PARAM_FLOAT3]: new Float32Array([0, 0, 0]),\n [enums.PARAM_FLOAT4]: new Float32Array([0, 0, 0, 0]),\n [enums.PARAM_MAT4]: cc.mat4().m,\n [enums.PARAM_TEXTURE_2D]: null,\n \n number: 0,\n boolean: false,\n}\n\nexport let getInstanceType = function (t) {\n return enums2ctor[t] || enums2ctor.default;\n};\nexport let getInstanceCtor = function (t) {\n return ctor2default[getInstanceType(t)];\n};\nexport let getClassName = function (t) {\n return cc.js.getClassName(getInstanceType(t));\n};\n\nlet className2InspectorName = {\n Number: 'number',\n Boolean: 'boolean'\n};\nexport function getInspectorProps (prop) {\n let editor = {\n type: prop.type\n };\n\n Object.assign(editor, prop.editor || prop.inspector);\n \n editor.defines = prop.defines;\n editor.value = getInstanceCtor(editor.type)(prop.value);\n if (prop.range) {\n editor.range = prop.range;\n }\n\n let className = getClassName(editor.type);\n editor.typeName = className2InspectorName[className] || className;\n \n editor.valueCtor = enums2ctor[editor.type];\n\n if (editor.typeName == 'cc.Texture2D') {\n editor.typeName = 'cc.Asset';\n editor.assetType = 'cc.Texture2D';\n }\n\n return editor;\n};","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * Class for tiled map asset handling.\n * @class TiledMapAsset\n * @extends Asset\n *\n */\nlet TiledMapAsset = cc.Class({\n name: 'cc.TiledMapAsset',\n extends: cc.Asset,\n\n properties: {\n tmxXmlStr: '',\n\n /**\n * @property {Texture2D[]} textures\n */\n textures: {\n default: [],\n type: [cc.Texture2D]\n },\n\n /**\n * @property {String[]} textureNames\n */\n textureNames: [cc.String],\n\n /**\n * @property {Size[]} textureSizes\n */\n textureSizes: {\n default: [],\n type: [cc.Size]\n },\n\n /**\n * @property {Texture2D[]} imageLayerTextures\n */\n imageLayerTextures: {\n default: [],\n type: [cc.Texture2D]\n },\n\n /**\n * @property {String[]} imageLayerTextureNames\n */\n imageLayerTextureNames: [cc.String],\n\n tsxFiles: [cc.TextAsset],\n tsxFileNames: [cc.String],\n },\n\n statics: {\n preventDeferredLoadDependents: true\n },\n\n createNode: CC_EDITOR && function (callback) {\n let node = new cc.Node(this.name);\n let tiledMap = node.addComponent(cc.TiledMap);\n tiledMap.tmxAsset = this;\n\n return callback(null, node);\n }\n});\n\ncc.TiledMapAsset = TiledMapAsset;\nmodule.exports = TiledMapAsset;\n","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nrequire('./cocos2d/core');\nrequire('./cocos2d/animation');\n\nif (CC_EDITOR && Editor.isMainProcess) {\n require('./cocos2d/particle/CCParticleAsset');\n require('./cocos2d/tilemap/CCTiledMapAsset');\n}\nelse {\n require('./cocos2d/particle');\n require('./cocos2d/tilemap');\n require('./cocos2d/videoplayer/CCVideoPlayer');\n require('./cocos2d/webview/CCWebView');\n require('./cocos2d/core/components/CCStudioComponent');\n require('./extensions/ccpool/CCNodePool');\n require('./cocos2d/actions');\n}\n\nrequire('./extensions/spine');\nrequire('./extensions/dragonbones');\n\nif (!CC_EDITOR || !Editor.isMainProcess) {\n require('./cocos2d/deprecated');\n}\n","/****************************************************************************\n Copyright (c) 2019 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport Mat4 from '../../cocos2d/core/value-types/mat4';\nconst RenderFlow = require('../../cocos2d/core/renderer/render-flow');\nconst FLAG_TRANSFORM = RenderFlow.FLAG_TRANSFORM;\nconst EmptyHandle = function () {}\nconst ATTACHED_ROOT_NAME = 'ATTACHED_NODE_TREE';\nconst ATTACHED_PRE_NAME = 'ATTACHED_NODE:';\nconst limitNode = function (node) {\n // attached node's world matrix update per frame\n Object.defineProperty(node, '_worldMatDirty', {\n get () { return true; },\n set (value) {/* do nothing */}\n });\n // shield world matrix calculate interface\n node._calculWorldMatrix = EmptyHandle;\n node._mulMat = EmptyHandle;\n};\nlet _tempMat4 = new Mat4();\n\n/**\n * @module sp\n */\n\n/**\n * !#en Attach node tool\n * !#zh 挂点工具类\n * @class sp.AttachUtil\n */\nlet AttachUtil = cc.Class({\n name: 'sp.AttachUtil',\n\n ctor () {\n this._inited = false;\n this._skeleton = null;\n this._skeletonNode = null;\n this._skeletonComp = null;\n\n this._attachedRootNode = null;\n this._attachedNodeArray = [];\n this._boneIndexToNode = {};\n },\n\n init (skeletonComp) {\n this._inited = true;\n this._skeleton = skeletonComp._skeleton;\n this._skeletonNode = skeletonComp.node;\n this._skeletonComp = skeletonComp;\n },\n\n reset () {\n this._inited = false;\n this._skeleton = null;\n this._skeletonNode = null;\n this._skeletonComp = null;\n },\n\n _prepareAttachNode () {\n let armature = this._skeleton;\n if (!armature) {\n return;\n }\n\n let rootNode = this._skeletonNode.getChildByName(ATTACHED_ROOT_NAME);\n if (!rootNode || !rootNode.isValid) {\n rootNode = new cc.Node(ATTACHED_ROOT_NAME);\n limitNode(rootNode);\n this._skeletonNode.addChild(rootNode);\n }\n\n let isCached = this._skeletonComp.isAnimationCached();\n if (isCached && this._skeletonComp._frameCache) {\n this._skeletonComp._frameCache.enableCacheAttachedInfo();\n }\n\n this._attachedRootNode = rootNode;\n return rootNode;\n },\n\n _buildBoneAttachedNode (bone, boneIndex) {\n let boneNodeName = ATTACHED_PRE_NAME + bone.data.name;\n let boneNode = new cc.Node(boneNodeName);\n this._buildBoneRelation(boneNode, bone, boneIndex);\n return boneNode;\n },\n\n _buildBoneRelation (boneNode, bone, boneIndex) {\n limitNode(boneNode);\n boneNode._bone = bone;\n boneNode._boneIndex = boneIndex;\n this._attachedNodeArray.push(boneNode);\n this._boneIndexToNode[boneIndex] = boneNode;\n },\n\n /**\n * !#en Gets attached root node.\n * !#zh 获取挂接节点树的根节点\n * @method getAttachedRootNode\n * @return {cc.Node}\n */\n getAttachedRootNode () {\n return this._attachedRootNode;\n },\n\n /**\n * !#en Gets attached node which you want.\n * !#zh 获得对应的挂点\n * @method getAttachedNodes\n * @param {String} boneName\n * @return {Node[]}\n */\n getAttachedNodes (boneName) {\n let nodeArray = this._attachedNodeArray;\n let res = [];\n if (!this._inited) return res;\n for (let i = 0, n = nodeArray.length; i < n; i++) {\n let boneNode = nodeArray[i];\n if (!boneNode || !boneNode.isValid) continue;\n if (boneNode.name === ATTACHED_PRE_NAME + boneName) {\n res.push(boneNode);\n }\n }\n return res;\n },\n\n _rebuildNodeArray () {\n let findMap = this._boneIndexToNode = {};\n let oldNodeArray = this._attachedNodeArray;\n let nodeArray = this._attachedNodeArray = [];\n for (let i = 0, n = oldNodeArray.length; i < n; i++) {\n let boneNode = oldNodeArray[i];\n if (!boneNode || !boneNode.isValid || boneNode._toRemove) continue;\n nodeArray.push(boneNode);\n findMap[boneNode._boneIndex] = boneNode;\n }\n },\n\n _sortNodeArray () {\n let nodeArray = this._attachedNodeArray;\n nodeArray.sort(function (a, b) {\n return a._boneIndex < b._boneIndex? -1 : 1;\n });\n },\n\n _getNodeByBoneIndex (boneIndex) {\n let findMap = this._boneIndexToNode;\n let boneNode = findMap[boneIndex];\n if (!boneNode || !boneNode.isValid) return null;\n return boneNode;\n },\n\n /**\n * !#en Destroy attached node which you want.\n * !#zh 销毁对应的挂点\n * @method destroyAttachedNodes\n * @param {String} boneName\n */\n destroyAttachedNodes (boneName) {\n if (!this._inited) return;\n\n let nodeArray = this._attachedNodeArray;\n let markTree = function (rootNode) {\n let children = rootNode.children;\n for (let i = 0, n = children.length; i < n; i++) {\n let c = children[i];\n if (c) markTree(c);\n }\n rootNode._toRemove = true;\n }\n\n for (let i = 0, n = nodeArray.length; i < n; i++) {\n let boneNode = nodeArray[i];\n if (!boneNode || !boneNode.isValid) continue;\n\n let delName = boneNode.name.split(ATTACHED_PRE_NAME)[1];\n if (delName === boneName) {\n markTree(boneNode);\n boneNode.removeFromParent(true);\n boneNode.destroy();\n nodeArray[i] = null;\n }\n }\n\n this._rebuildNodeArray();\n },\n\n /**\n * !#en Traverse all bones to generate the minimum node tree containing the given bone names, NOTE that make sure the skeleton has initialized before calling this interface.\n * !#zh 遍历所有插槽,生成包含所有给定插槽名称的最小节点树,注意,调用该接口前请确保骨骼动画已经初始化好。\n * @method generateAttachedNodes\n * @param {String} boneName\n * @return {Node[]} attached node array\n */\n generateAttachedNodes (boneName) {\n let targetNodes = [];\n if (!this._inited) return targetNodes;\n\n let rootNode = this._prepareAttachNode();\n if (!rootNode) return targetNodes;\n\n let res = [];\n let bones = this._skeleton.bones;\n for (let i = 0, n = bones.length; i < n; i++) {\n let bone = bones[i];\n let boneData = bone.data;\n if (boneData.name == boneName) {\n res.push(bone);\n }\n }\n\n let buildBoneTree = function (bone) {\n if (!bone) return;\n let boneData = bone.data;\n let boneNode = this._getNodeByBoneIndex(boneData.index);\n if (boneNode) return boneNode;\n\n boneNode = this._buildBoneAttachedNode(bone, boneData.index);\n\n let parentBoneNode = buildBoneTree(bone.parent) || rootNode;\n boneNode.parent = parentBoneNode;\n\n return boneNode;\n }.bind(this);\n\n for (let i = 0, n = res.length; i < n; i++) {\n let targetNode = buildBoneTree(res[i]);\n targetNodes.push(targetNode);\n }\n\n this._sortNodeArray();\n return targetNodes;\n },\n\n /**\n * !#en Destroy all attached node.\n * !#zh 销毁所有挂点\n * @method destroyAllAttachedNodes\n */\n destroyAllAttachedNodes () {\n this._attachedRootNode = null;\n this._attachedNodeArray.length = 0;\n this._boneIndexToNode = {};\n if (!this._inited) return;\n\n let rootNode = this._skeletonNode.getChildByName(ATTACHED_ROOT_NAME);\n if (rootNode) {\n rootNode.removeFromParent(true);\n rootNode.destroy();\n rootNode = null;\n }\n },\n\n /**\n * !#en Traverse all bones to generate a tree containing all bones nodes, NOTE that make sure the skeleton has initialized before calling this interface.\n * !#zh 遍历所有插槽,生成包含所有插槽的节点树,注意,调用该接口前请确保骨骼动画已经初始化好。\n * @method generateAllAttachedNodes\n * @return {cc.Node} root node\n */\n generateAllAttachedNodes () {\n if (!this._inited) return;\n\n // clear all records\n this._boneIndexToNode = {};\n this._attachedNodeArray.length = 0;\n \n let rootNode = this._prepareAttachNode();\n if (!rootNode) return;\n\n let bones = this._skeleton.bones;\n for (let i = 0, n = bones.length; i < n; i++) {\n let bone = bones[i];\n let boneData = bone.data;\n let parentNode = null;\n if (bone.parent) {\n let parentIndex = bone.parent.data.index;\n parentNode = this._boneIndexToNode[parentIndex];\n } else {\n parentNode = rootNode;\n }\n\n if (parentNode) {\n let boneNode = parentNode.getChildByName(ATTACHED_PRE_NAME + boneData.name);\n if (!boneNode || !boneNode.isValid) {\n boneNode = this._buildBoneAttachedNode(bone, boneData.index);\n parentNode.addChild(boneNode);\n } else {\n this._buildBoneRelation(boneNode, bone, boneData.index);\n }\n }\n }\n return rootNode;\n },\n\n _hasAttachedNode () {\n if (!this._inited) return false;\n\n let attachedRootNode = this._skeletonNode.getChildByName(ATTACHED_ROOT_NAME);\n return !!attachedRootNode;\n },\n\n _associateAttachedNode () {\n if (!this._inited) return;\n\n let rootNode = this._skeletonNode.getChildByName(ATTACHED_ROOT_NAME);\n if (!rootNode || !rootNode.isValid) return;\n this._attachedRootNode = rootNode;\n\n // clear all records\n this._boneIndexToNode = {};\n let nodeArray = this._attachedNodeArray;\n nodeArray.length = 0;\n limitNode(rootNode);\n\n if (!CC_NATIVERENDERER) {\n let isCached = this._skeletonComp.isAnimationCached();\n if (isCached && this._skeletonComp._frameCache) {\n this._skeletonComp._frameCache.enableCacheAttachedInfo();\n }\n }\n\n let bones = this._skeleton.bones;\n for (let i = 0, n = bones.length; i < n; i++) {\n let bone = bones[i];\n let boneData = bone.data;\n let parentNode = null;\n if (bone.parent) {\n let parentIndex = bone.parent.data.index;\n parentNode = this._boneIndexToNode[parentIndex];\n } else {\n parentNode = rootNode;\n }\n\n if (parentNode) {\n let boneNode = parentNode.getChildByName(ATTACHED_PRE_NAME + boneData.name);\n if (boneNode && boneNode.isValid) {\n this._buildBoneRelation(boneNode, bone, boneData.index);\n }\n }\n }\n },\n\n _syncAttachedNode () {\n if (!this._inited) return;\n\n let rootNode = this._attachedRootNode;\n let nodeArray = this._attachedNodeArray;\n if (!rootNode || !rootNode.isValid) {\n this._attachedRootNode = null;\n nodeArray.length = 0;\n return;\n }\n \n let rootMatrix = this._skeletonNode._worldMatrix;\n Mat4.copy(rootNode._worldMatrix, rootMatrix);\n rootNode._renderFlag &= ~FLAG_TRANSFORM;\n\n let boneInfos = null;\n let isCached = this._skeletonComp.isAnimationCached();\n if (isCached) {\n boneInfos = this._skeletonComp._curFrame && this._skeletonComp._curFrame.boneInfos;\n } else {\n boneInfos = this._skeleton.bones;\n }\n\n if (!boneInfos) return;\n\n let mulMat = this._skeletonNode._mulMat;\n let matrixHandle = function (nodeMat, parentMat, bone) {\n let tm = _tempMat4.m;\n tm[0] = bone.a;\n tm[1] = bone.c;\n tm[4] = bone.b;\n tm[5] = bone.d;\n tm[12] = bone.worldX;\n tm[13] = bone.worldY;\n mulMat(nodeMat, parentMat, _tempMat4);\n };\n\n let nodeArrayDirty = false;\n for (let i = 0, n = nodeArray.length; i < n; i++) {\n let boneNode = nodeArray[i];\n // Node has been destroy\n if (!boneNode || !boneNode.isValid) { \n nodeArray[i] = null;\n nodeArrayDirty = true;\n continue;\n }\n let bone = boneInfos[boneNode._boneIndex];\n // Bone has been destroy\n if (!bone) {\n boneNode.removeFromParent(true);\n boneNode.destroy();\n nodeArray[i] = null;\n nodeArrayDirty = true;\n continue;\n }\n matrixHandle(boneNode._worldMatrix, rootNode._worldMatrix, bone);\n boneNode._renderFlag &= ~FLAG_TRANSFORM;\n }\n if (nodeArrayDirty) {\n this._rebuildNodeArray();\n }\n },\n});\n\nmodule.exports = sp.AttachUtil = AttachUtil;","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nconst TrackEntryListeners = require('./track-entry-listeners');\nconst RenderComponent = require('../../cocos2d/core/components/CCRenderComponent');\nconst spine = require('./lib/spine');\nconst Graphics = require('../../cocos2d/core/graphics/graphics');\nconst RenderFlow = require('../../cocos2d/core/renderer/render-flow');\nconst FLAG_POST_RENDER = RenderFlow.FLAG_POST_RENDER;\n\nlet SkeletonCache = require('./skeleton-cache');\nlet AttachUtil = require('./AttachUtil');\n\n/**\n * @module sp\n */\nlet DefaultSkinsEnum = cc.Enum({ 'default': -1 });\nlet DefaultAnimsEnum = cc.Enum({ '': 0 });\n\n/**\n * !#en Enum for animation cache mode type.\n * !#zh Spine动画缓存类型\n * @enum Skeleton.AnimationCacheMode\n */\nlet AnimationCacheMode = cc.Enum({\n /**\n * !#en The realtime mode.\n * !#zh 实时计算模式。\n * @property {Number} REALTIME\n */\n REALTIME: 0,\n /**\n * !#en The shared cache mode.\n * !#zh 共享缓存模式。\n * @property {Number} SHARED_CACHE\n */\n SHARED_CACHE: 1,\n /**\n * !#en The private cache mode.\n * !#zh 私有缓存模式。\n * @property {Number} PRIVATE_CACHE\n */\n PRIVATE_CACHE: 2 \n});\n\nfunction setEnumAttr (obj, propName, enumDef) {\n cc.Class.Attr.setClassAttr(obj, propName, 'type', 'Enum');\n cc.Class.Attr.setClassAttr(obj, propName, 'enumList', cc.Enum.getList(enumDef));\n}\n\n/**\n * !#en\n * The skeleton of Spine
\n *
\n * (Skeleton has a reference to a SkeletonData and stores the state for skeleton instance,\n * which consists of the current pose's bone SRT, slot colors, and which slot attachments are visible.
\n * Multiple skeletons can use the same SkeletonData which includes all animations, skins, and attachments.)
\n * !#zh\n * Spine 骨骼动画
\n *
\n * (Skeleton 具有对骨骼数据的引用并且存储了骨骼实例的状态,\n * 它由当前的骨骼动作,slot 颜色,和可见的 slot attachments 组成。
\n * 多个 Skeleton 可以使用相同的骨骼数据,其中包括所有的动画,皮肤和 attachments。\n *\n * @class Skeleton\n * @extends RenderComponent\n */\nsp.Skeleton = cc.Class({\n name: 'sp.Skeleton',\n extends: RenderComponent,\n editor: CC_EDITOR && {\n menu: 'i18n:MAIN_MENU.component.renderers/Spine Skeleton',\n help: 'app://docs/html/components/spine.html',\n inspector: 'packages://inspector/inspectors/comps/skeleton2d.js',\n },\n\n statics: {\n AnimationCacheMode: AnimationCacheMode,\n },\n\n properties: {\n /**\n * !#en The skeletal animation is paused?\n * !#zh 该骨骼动画是否暂停。\n * @property paused\n * @type {Boolean}\n * @readOnly\n * @default false\n */\n paused: {\n default: false,\n visible: false\n },\n\n /**\n * !#en\n * The skeleton data contains the skeleton information (bind pose bones, slots, draw order,\n * attachments, skins, etc) and animations but does not hold any state.
\n * Multiple skeletons can share the same skeleton data.\n * !#zh\n * 骨骼数据包含了骨骼信息(绑定骨骼动作,slots,渲染顺序,\n * attachments,皮肤等等)和动画但不持有任何状态。
\n * 多个 Skeleton 可以共用相同的骨骼数据。\n * @property {sp.SkeletonData} skeletonData\n */\n skeletonData: {\n default: null,\n type: sp.SkeletonData,\n notify () {\n this.defaultSkin = '';\n this.defaultAnimation = '';\n if (CC_EDITOR) {\n this._refreshInspector();\n }\n this._updateSkeletonData();\n },\n tooltip: CC_DEV && 'i18n:COMPONENT.skeleton.skeleton_data'\n },\n\n // 由于 spine 的 skin 是无法二次替换的,所以只能设置默认的 skin\n /**\n * !#en The name of default skin.\n * !#zh 默认的皮肤名称。\n * @property {String} defaultSkin\n */\n defaultSkin: {\n default: '',\n visible: false\n },\n\n /**\n * !#en The name of default animation.\n * !#zh 默认的动画名称。\n * @property {String} defaultAnimation\n */\n defaultAnimation: {\n default: '',\n visible: false\n },\n\n /**\n * !#en The name of current playing animation.\n * !#zh 当前播放的动画名称。\n * @property {String} animation\n */\n animation: {\n get () {\n if (this.isAnimationCached()) {\n return this._animationName;\n } else {\n var entry = this.getCurrent(0);\n return (entry && entry.animation.name) || \"\";\n }\n },\n set (value) {\n this.defaultAnimation = value;\n if (value) {\n this.setAnimation(0, value, this.loop);\n }\n else if (!this.isAnimationCached()) {\n this.clearTrack(0);\n this.setToSetupPose();\n }\n },\n visible: false\n },\n\n /**\n * @property {Number} _defaultSkinIndex\n */\n _defaultSkinIndex: {\n get () {\n if (this.skeletonData) {\n var skinsEnum = this.skeletonData.getSkinsEnum();\n if(skinsEnum) {\n if(this.defaultSkin === \"\") {\n if(skinsEnum.hasOwnProperty(0)) {\n this._defaultSkinIndex = 0;\n return 0;\n }\n } else {\n var skinIndex = skinsEnum[this.defaultSkin];\n if (skinIndex !== undefined) {\n return skinIndex;\n }\n }\n }\n }\n return 0;\n },\n set (value) {\n var skinsEnum;\n if (this.skeletonData) {\n skinsEnum = this.skeletonData.getSkinsEnum();\n }\n if ( !skinsEnum ) {\n return cc.errorID('',\n this.name);\n }\n var skinName = skinsEnum[value];\n if (skinName !== undefined) {\n this.defaultSkin = skinName;\n this.setSkin(this.defaultSkin);\n if (CC_EDITOR && !cc.engine.isPlaying) {\n this._refreshInspector();\n }\n }\n else {\n cc.errorID(7501, this.name);\n }\n },\n type: DefaultSkinsEnum,\n visible: true,\n animatable: false,\n displayName: \"Default Skin\",\n tooltip: CC_DEV && 'i18n:COMPONENT.skeleton.default_skin'\n },\n\n // value of 0 represents no animation\n _animationIndex: {\n get () {\n var animationName = (!CC_EDITOR || cc.engine.isPlaying) ? this.animation : this.defaultAnimation;\n if (this.skeletonData && animationName) {\n var animsEnum = this.skeletonData.getAnimsEnum();\n if (animsEnum) {\n var animIndex = animsEnum[animationName];\n if (animIndex !== undefined) {\n return animIndex;\n }\n }\n }\n return 0;\n },\n set (value) {\n if (value === 0) {\n this.animation = '';\n return;\n }\n var animsEnum;\n if (this.skeletonData) {\n animsEnum = this.skeletonData.getAnimsEnum();\n }\n if ( !animsEnum ) {\n return cc.errorID(7502, this.name);\n }\n var animName = animsEnum[value];\n if (animName !== undefined) {\n this.animation = animName;\n }\n else {\n cc.errorID(7503, this.name);\n }\n\n },\n type: DefaultAnimsEnum,\n visible: true,\n animatable: false,\n displayName: 'Animation',\n tooltip: CC_DEV && 'i18n:COMPONENT.skeleton.animation'\n },\n\n // Record pre cache mode.\n _preCacheMode: -1,\n _cacheMode: AnimationCacheMode.REALTIME,\n _defaultCacheMode: {\n default: 0,\n type: AnimationCacheMode,\n notify () {\n this.setAnimationCacheMode(this._defaultCacheMode);\n },\n editorOnly: true,\n visible: true,\n animatable: false,\n displayName: \"Animation Cache Mode\",\n tooltip: CC_DEV && 'i18n:COMPONENT.skeleton.animation_cache_mode'\n },\n\n /**\n * !#en TODO\n * !#zh 是否循环播放当前骨骼动画。\n * @property {Boolean} loop\n * @default true\n */\n loop: {\n default: true,\n tooltip: CC_DEV && 'i18n:COMPONENT.skeleton.loop'\n },\n\n /**\n * !#en Indicates whether to enable premultiplied alpha.\n * You should disable this option when image's transparent area appears to have opaque pixels,\n * or enable this option when image's half transparent area appears to be darken.\n * !#zh 是否启用贴图预乘。\n * 当图片的透明区域出现色块时需要关闭该选项,当图片的半透明区域颜色变黑时需要启用该选项。\n * @property {Boolean} premultipliedAlpha\n * @default true\n */\n premultipliedAlpha: {\n default: true,\n tooltip: CC_DEV && 'i18n:COMPONENT.skeleton.premultipliedAlpha'\n },\n\n /**\n * !#en The time scale of this skeleton.\n * !#zh 当前骨骼中所有动画的时间缩放率。\n * @property {Number} timeScale\n * @default 1\n */\n timeScale: {\n default: 1,\n tooltip: CC_DEV && 'i18n:COMPONENT.skeleton.time_scale'\n },\n\n /**\n * !#en Indicates whether open debug slots.\n * !#zh 是否显示 slot 的 debug 信息。\n * @property {Boolean} debugSlots\n * @default false\n */\n debugSlots: {\n default: false,\n editorOnly: true,\n tooltip: CC_DEV && 'i18n:COMPONENT.skeleton.debug_slots',\n notify () {\n this._updateDebugDraw();\n }\n },\n\n /**\n * !#en Indicates whether open debug bones.\n * !#zh 是否显示 bone 的 debug 信息。\n * @property {Boolean} debugBones\n * @default false\n */\n debugBones: {\n default: false,\n editorOnly: true,\n tooltip: CC_DEV && 'i18n:COMPONENT.skeleton.debug_bones',\n notify () {\n this._updateDebugDraw();\n }\n },\n\n /**\n * !#en Indicates whether open debug mesh.\n * !#zh 是否显示 mesh 的 debug 信息。\n * @property {Boolean} debugMesh\n * @default false\n */\n debugMesh: {\n default: false,\n editorOnly: true,\n tooltip: CC_DEV && 'i18n:COMPONENT.skeleton.debug_mesh',\n notify () {\n this._updateDebugDraw();\n }\n },\n\n /**\n * !#en Enabled two color tint.\n * !#zh 是否启用染色效果。\n * @property {Boolean} useTint\n * @default false\n */\n useTint: {\n default: false,\n tooltip: CC_DEV && 'i18n:COMPONENT.skeleton.use_tint',\n notify () {\n this._updateUseTint();\n }\n },\n\n /**\n * !#en Enabled batch model, if skeleton is complex, do not enable batch, or will lower performance.\n * !#zh 开启合批,如果渲染大量相同纹理,且结构简单的骨骼动画,开启合批可以降低drawcall,否则请不要开启,cpu消耗会上升。\n * @property {Boolean} enableBatch\n * @default false\n */\n enableBatch: {\n default: false,\n notify () {\n this._updateBatch();\n },\n tooltip: CC_DEV && 'i18n:COMPONENT.skeleton.enabled_batch'\n },\n\n // Below properties will effect when cache mode is SHARED_CACHE or PRIVATE_CACHE.\n // accumulate time\n _accTime: 0,\n // Play times counter\n _playCount: 0,\n // Frame cache\n _frameCache: null,\n // Cur frame\n _curFrame: null,\n // Skeleton cache\n _skeletonCache : null,\n // Aimation name\n _animationName : \"\",\n // Animation queue\n _animationQueue : [],\n // Head animation info of \n _headAniInfo : null,\n // Play times\n _playTimes : 0,\n // Is animation complete.\n _isAniComplete: true,\n \n autoSwitchMaterial: {\n type: RenderComponent.EnableType,\n default: RenderComponent.EnableType.GLOBAL,\n notify(oldValue) {\n if (this.autoSwitchMaterial === oldValue) return;\n this.setVertsDirty();\n },\n },\n allowDynamicAtlas: {\n type: RenderComponent.EnableType,\n default: RenderComponent.EnableType.GLOBAL,\n notify(oldValue) {\n if (this.allowDynamicAtlas === oldValue) return;\n this.setVertsDirty();\n },\n },\n },\n\n // CONSTRUCTOR\n ctor () {\n this._effectDelegate = null;\n this._skeleton = null;\n this._rootBone = null;\n this._listener = null;\n this._materialCache = {};\n this._debugRenderer = null;\n this._startSlotIndex = -1;\n this._endSlotIndex = -1;\n this._startEntry = {animation : {name : \"\"}, trackIndex : 0};\n this._endEntry = {animation : {name : \"\"}, trackIndex : 0};\n this.attachUtil = new AttachUtil();\n this._dataDirty = true;\n },\n\n setVertsDirty() {\n this.invalidAnimationCache();\n this._dataDirty = true;\n this._materialCache = {};\n this._super();\n },\n\n // override base class _getDefaultMaterial to modify default material\n _getDefaultMaterial () {\n return cc.Material.getBuiltinMaterial('2d-spine');\n },\n\n // override base class _updateMaterial to set define value and clear material cache\n _updateMaterial () {\n let useTint = this.useTint || (this.isAnimationCached() && !CC_NATIVERENDERER);\n let baseMaterial = this.getMaterial(0);\n if (baseMaterial) {\n const isMultiSupport = baseMaterial.material.isMultiSupport();\n if (!isMultiSupport) {\n baseMaterial.define('USE_TINT', useTint);\n baseMaterial.define('CC_USE_MODEL', !this.enableBatch);\n }\n \n let srcBlendFactor = this.premultipliedAlpha ? cc.gfx.BLEND_ONE : cc.gfx.BLEND_SRC_ALPHA;\n let dstBlendFactor = cc.gfx.BLEND_ONE_MINUS_SRC_ALPHA;\n\n baseMaterial.setBlend(\n true,\n cc.gfx.BLEND_FUNC_ADD,\n srcBlendFactor, srcBlendFactor,\n cc.gfx.BLEND_FUNC_ADD,\n dstBlendFactor, dstBlendFactor\n );\n\n if (isMultiSupport) {\n if (this.useTint) this.useTint = false;\n if (!this.enableBatch) this.enableBatch = true;\n }\n }\n this._materialCache = {};\n },\n\n // override base class disableRender to clear post render flag\n disableRender () {\n this._super();\n this.node._renderFlag &= ~FLAG_POST_RENDER;\n },\n\n // override base class disableRender to add post render flag\n markForRender (enable) {\n this._super(enable);\n if (enable) {\n this.node._renderFlag |= FLAG_POST_RENDER;\n } else {\n this.node._renderFlag &= ~FLAG_POST_RENDER;\n }\n },\n\n // if change use tint mode, just clear material cache\n _updateUseTint () {\n let baseMaterial = this.getMaterial(0);\n if (baseMaterial) {\n let useTint = this.useTint || (this.isAnimationCached() && !CC_NATIVERENDERER);\n if (!baseMaterial.material.isMultiSupport()) {\n baseMaterial.define('USE_TINT', useTint);\n } else {\n if (this.useTint) this.useTint = false;\n }\n }\n this._materialCache = {};\n },\n\n // if change use batch mode, just clear material cache\n _updateBatch () {\n let baseMaterial = this.getMaterial(0);\n if (baseMaterial) {\n if (!baseMaterial.material.isMultiSupport()) {\n baseMaterial.define('CC_USE_MODEL', !this.enableBatch);\n } else {\n if (!this.enableBatch) this.enableBatch = true;\n }\n }\n this._materialCache = {};\n },\n\n _validateRender () {\n let skeletonData = this.skeletonData;\n if (!skeletonData || !skeletonData.isTexturesLoaded()) {\n this.disableRender();\n return;\n }\n this._super();\n },\n\n /**\n * !#en\n * Sets runtime skeleton data to sp.Skeleton.
\n * This method is different from the `skeletonData` property. This method is passed in the raw data provided by the Spine runtime, and the skeletonData type is the asset type provided by Creator.\n * !#zh\n * 设置底层运行时用到的 SkeletonData。
\n * 这个接口有别于 `skeletonData` 属性,这个接口传入的是 Spine runtime 提供的原始数据,而 skeletonData 的类型是 Creator 提供的资源类型。\n * @method setSkeletonData\n * @param {sp.spine.SkeletonData} skeletonData\n */\n setSkeletonData (skeletonData) {\n if (skeletonData.width != null && skeletonData.height != null) {\n this.node.setContentSize(skeletonData.width, skeletonData.height);\n }\n\n if (!CC_EDITOR) {\n if (this._cacheMode === AnimationCacheMode.SHARED_CACHE) {\n this._skeletonCache = SkeletonCache.sharedCache;\n } else if (this._cacheMode === AnimationCacheMode.PRIVATE_CACHE) {\n this._skeletonCache = new SkeletonCache;\n this._skeletonCache.enablePrivateMode();\n }\n }\n\n if (this.isAnimationCached()) {\n if (this.debugBones || this.debugSlots) {\n cc.warn(\"Debug bones or slots is invalid in cached mode\");\n }\n let skeletonInfo = this._skeletonCache.getSkeletonCache(this.skeletonData._uuid, skeletonData);\n this._skeleton = skeletonInfo.skeleton;\n this._clipper = skeletonInfo.clipper;\n this._rootBone = this._skeleton.getRootBone();\n } else {\n this._skeleton = new spine.Skeleton(skeletonData);\n this._clipper = new spine.SkeletonClipping();\n this._rootBone = this._skeleton.getRootBone();\n }\n\n this.markForRender(true);\n },\n\n /**\n * !#en Sets slots visible range.\n * !#zh 设置骨骼插槽可视范围。\n * @method setSlotsRange\n * @param {Number} startSlotIndex\n * @param {Number} endSlotIndex\n */\n setSlotsRange (startSlotIndex, endSlotIndex) {\n if (this.isAnimationCached()) {\n cc.warn(\"Slots visible range can not be modified in cached mode.\");\n } else {\n this._startSlotIndex = startSlotIndex;\n this._endSlotIndex = endSlotIndex;\n }\n },\n\n /**\n * !#en Sets animation state data.
\n * The parameter type is {{#crossLinkModule \"sp.spine\"}}sp.spine{{/crossLinkModule}}.AnimationStateData.\n * !#zh 设置动画状态数据。
\n * 参数是 {{#crossLinkModule \"sp.spine\"}}sp.spine{{/crossLinkModule}}.AnimationStateData。\n * @method setAnimationStateData\n * @param {sp.spine.AnimationStateData} stateData\n */\n setAnimationStateData (stateData) {\n if (this.isAnimationCached()) {\n cc.warn(\"'setAnimationStateData' interface can not be invoked in cached mode.\");\n } else {\n var state = new spine.AnimationState(stateData);\n if (this._listener) {\n if (this._state) {\n this._state.removeListener(this._listener);\n }\n state.addListener(this._listener);\n }\n this._state = state;\n }\n \n },\n\n // IMPLEMENT\n __preload () {\n this._super();\n if (CC_EDITOR) {\n var Flags = cc.Object.Flags;\n this._objFlags |= (Flags.IsAnchorLocked | Flags.IsSizeLocked);\n \n this._refreshInspector();\n }\n\n var children = this.node.children;\n for (var i = 0, n = children.length; i < n; i++) {\n var child = children[i];\n if (child && child._name === \"DEBUG_DRAW_NODE\" ) {\n child.destroy();\n }\n }\n\n this._updateSkeletonData();\n this._updateDebugDraw();\n this._updateUseTint();\n this._updateBatch();\n },\n\n /**\n * !#en\n * It's best to set cache mode before set property 'dragonAsset', or will waste some cpu time.\n * If set the mode in editor, then no need to worry about order problem.\n * !#zh \n * 若想切换渲染模式,最好在设置'dragonAsset'之前,先设置好渲染模式,否则有运行时开销。\n * 若在编辑中设置渲染模式,则无需担心设置次序的问题。\n * \n * @method setAnimationCacheMode\n * @param {AnimationCacheMode} cacheMode\n * @example\n * skeleton.setAnimationCacheMode(sp.Skeleton.AnimationCacheMode.SHARED_CACHE);\n */\n setAnimationCacheMode (cacheMode) {\n if (this._preCacheMode !== cacheMode) {\n this._cacheMode = cacheMode;\n this._updateSkeletonData();\n this._updateUseTint();\n }\n },\n\n /**\n * !#en Whether in cached mode.\n * !#zh 当前是否处于缓存模式。\n * @method isAnimationCached\n * @return {Boolean}\n */\n isAnimationCached () {\n if (CC_EDITOR) return false;\n return this._cacheMode !== AnimationCacheMode.REALTIME;\n },\n\n update (dt) {\n if (CC_EDITOR) return;\n if (this.paused) return;\n\n dt *= this.timeScale * sp.timeScale;\n\n if (this.isAnimationCached()) {\n\n // Cache mode and has animation queue.\n if (this._isAniComplete) {\n if (this._animationQueue.length === 0 && !this._headAniInfo) {\n let frameCache = this._frameCache;\n if (frameCache && frameCache.isInvalid()) {\n frameCache.updateToFrame();\n let frames = frameCache.frames;\n this._curFrame = frames[frames.length - 1];\n }\n return;\n }\n if (!this._headAniInfo) {\n this._headAniInfo = this._animationQueue.shift();\n }\n this._accTime += dt;\n if (this._accTime > this._headAniInfo.delay) {\n let aniInfo = this._headAniInfo;\n this._headAniInfo = null;\n this.setAnimation (0, aniInfo.animationName, aniInfo.loop);\n }\n return;\n }\n\n this._updateCache(dt);\n } else {\n this._updateRealtime(dt);\n }\n },\n\n _emitCacheCompleteEvent () {\n if (!this._listener) return;\n this._endEntry.animation.name = this._animationName;\n this._listener.complete && this._listener.complete(this._endEntry);\n this._listener.end && this._listener.end(this._endEntry);\n },\n\n _updateCache (dt) {\n let frameCache = this._frameCache;\n if (!frameCache.isInited()) {\n return;\n }\n let frames = frameCache.frames;\n let frameTime = SkeletonCache.FrameTime;\n\n // Animation Start, the event diffrent from dragonbones inner event,\n // It has no event object.\n if (this._accTime == 0 && this._playCount == 0) {\n this._startEntry.animation.name = this._animationName;\n this._listener && this._listener.start && this._listener.start(this._startEntry);\n }\n\n this._accTime += dt;\n let frameIdx = Math.floor(this._accTime / frameTime);\n if (!frameCache.isCompleted) {\n frameCache.updateToFrame(frameIdx);\n }\n\n if (frameCache.isCompleted && frameIdx >= frames.length) {\n this._playCount ++;\n if (this._playTimes > 0 && this._playCount >= this._playTimes) {\n // set frame to end frame.\n this._curFrame = frames[frames.length - 1];\n this._accTime = 0;\n this._playCount = 0;\n this._isAniComplete = true;\n this._emitCacheCompleteEvent();\n return;\n }\n this._accTime = 0;\n frameIdx = 0;\n this._emitCacheCompleteEvent();\n }\n this._curFrame = frames[frameIdx];\n },\n\n _updateRealtime (dt) {\n let skeleton = this._skeleton;\n let state = this._state;\n if (skeleton) {\n skeleton.update(dt);\n if (state) {\n state.update(dt);\n state.apply(skeleton);\n }\n }\n },\n\n /**\n * !#en Sets vertex effect delegate.\n * !#zh 设置顶点动画代理\n * @method setVertexEffectDelegate\n * @param {sp.VertexEffectDelegate} effectDelegate\n */\n setVertexEffectDelegate (effectDelegate) {\n this._effectDelegate = effectDelegate;\n },\n\n // RENDERER\n\n /**\n * !#en Computes the world SRT from the local SRT for each bone.\n * !#zh 重新更新所有骨骼的世界 Transform,\n * 当获取 bone 的数值未更新时,即可使用该函数进行更新数值。\n * @method updateWorldTransform\n * @example\n * var bone = spine.findBone('head');\n * cc.log(bone.worldX); // return 0;\n * spine.updateWorldTransform();\n * bone = spine.findBone('head');\n * cc.log(bone.worldX); // return -23.12;\n */\n updateWorldTransform () {\n if (!this.isAnimationCached()) return;\n\n if (this._skeleton) {\n this._skeleton.updateWorldTransform();\n }\n },\n\n /**\n * !#en Sets the bones and slots to the setup pose.\n * !#zh 还原到起始动作\n * @method setToSetupPose\n */\n setToSetupPose () {\n if (this._skeleton) {\n this._skeleton.setToSetupPose();\n }\n },\n\n /**\n * !#en\n * Sets the bones to the setup pose,\n * using the values from the `BoneData` list in the `SkeletonData`.\n * !#zh\n * 设置 bone 到起始动作\n * 使用 SkeletonData 中的 BoneData 列表中的值。\n * @method setBonesToSetupPose\n */\n setBonesToSetupPose () {\n if (this._skeleton) {\n this._skeleton.setBonesToSetupPose();\n }\n },\n\n /**\n * !#en\n * Sets the slots to the setup pose,\n * using the values from the `SlotData` list in the `SkeletonData`.\n * !#zh\n * 设置 slot 到起始动作。\n * 使用 SkeletonData 中的 SlotData 列表中的值。\n * @method setSlotsToSetupPose\n */\n setSlotsToSetupPose () {\n if (this._skeleton) {\n this._skeleton.setSlotsToSetupPose();\n }\n },\n\n /**\n * !#en\n * Updating an animation cache to calculate all frame data in the animation is a cost in \n * performance due to calculating all data in a single frame.\n * To update the cache, use the invalidAnimationCache method with high performance.\n * !#zh\n * 更新某个动画缓存, 预计算动画中所有帧数据,由于在单帧计算所有数据,所以较消耗性能。\n * 若想更新缓存,可使用 invalidAnimationCache 方法,具有较高性能。\n * @method updateAnimationCache\n * @param {String} animName\n */\n updateAnimationCache (animName) {\n if (!this.isAnimationCached()) return;\n let uuid = this.skeletonData._uuid;\n if (this._skeletonCache) {\n this._skeletonCache.updateAnimationCache(uuid, animName);\n }\n },\n\n /**\n * !#en\n * Invalidates the animation cache, which is then recomputed on each frame..\n * !#zh\n * 使动画缓存失效,之后会在每帧重新计算。\n * @method invalidAnimationCache\n */\n invalidAnimationCache () {\n if (!this.isAnimationCached()) return;\n if (this._skeletonCache) {\n this._skeletonCache.invalidAnimationCache(this.skeletonData._uuid);\n }\n },\n\n /**\n * !#en\n * Finds a bone by name.\n * This does a string comparison for every bone.
\n * Returns a {{#crossLinkModule \"sp.spine\"}}sp.spine{{/crossLinkModule}}.Bone object.\n * !#zh\n * 通过名称查找 bone。\n * 这里对每个 bone 的名称进行了对比。
\n * 返回一个 {{#crossLinkModule \"sp.spine\"}}sp.spine{{/crossLinkModule}}.Bone 对象。\n *\n * @method findBone\n * @param {String} boneName\n * @return {sp.spine.Bone}\n */\n findBone (boneName) {\n if (this._skeleton) {\n return this._skeleton.findBone(boneName);\n }\n return null;\n },\n\n /**\n * !#en\n * Finds a slot by name. This does a string comparison for every slot.
\n * Returns a {{#crossLinkModule \"sp.spine\"}}sp.spine{{/crossLinkModule}}.Slot object.\n * !#zh\n * 通过名称查找 slot。这里对每个 slot 的名称进行了比较。
\n * 返回一个 {{#crossLinkModule \"sp.spine\"}}sp.spine{{/crossLinkModule}}.Slot 对象。\n *\n * @method findSlot\n * @param {String} slotName\n * @return {sp.spine.Slot}\n */\n findSlot (slotName) {\n if (this._skeleton) {\n return this._skeleton.findSlot(slotName);\n }\n return null;\n },\n\n /**\n * !#en\n * Finds a skin by name and makes it the active skin.\n * This does a string comparison for every skin.
\n * Note that setting the skin does not change which attachments are visible.
\n * Returns a {{#crossLinkModule \"sp.spine\"}}sp.spine{{/crossLinkModule}}.Skin object.\n * !#zh\n * 按名称查找皮肤,激活该皮肤。这里对每个皮肤的名称进行了比较。
\n * 注意:设置皮肤不会改变 attachment 的可见性。
\n * 返回一个 {{#crossLinkModule \"sp.spine\"}}sp.spine{{/crossLinkModule}}.Skin 对象。\n *\n * @method setSkin\n * @param {String} skinName\n */\n setSkin (skinName) {\n if (this._skeleton) {\n this._skeleton.setSkinByName(skinName);\n this._skeleton.setSlotsToSetupPose();\n }\n this.invalidAnimationCache();\n },\n\n /**\n * !#en\n * Returns the attachment for the slot and attachment name.\n * The skeleton looks first in its skin, then in the skeleton data’s default skin.
\n * Returns a {{#crossLinkModule \"sp.spine\"}}sp.spine{{/crossLinkModule}}.Attachment object.\n * !#zh\n * 通过 slot 和 attachment 的名称获取 attachment。Skeleton 优先查找它的皮肤,然后才是 Skeleton Data 中默认的皮肤。
\n * 返回一个 {{#crossLinkModule \"sp.spine\"}}sp.spine{{/crossLinkModule}}.Attachment 对象。\n *\n * @method getAttachment\n * @param {String} slotName\n * @param {String} attachmentName\n * @return {sp.spine.Attachment}\n */\n getAttachment (slotName, attachmentName) {\n if (this._skeleton) {\n return this._skeleton.getAttachmentByName(slotName, attachmentName);\n }\n return null;\n },\n\n /**\n * !#en\n * Sets the attachment for the slot and attachment name.\n * The skeleton looks first in its skin, then in the skeleton data’s default skin.\n * !#zh\n * 通过 slot 和 attachment 的名字来设置 attachment。\n * Skeleton 优先查找它的皮肤,然后才是 Skeleton Data 中默认的皮肤。\n * @method setAttachment\n * @param {String} slotName\n * @param {String} attachmentName\n */\n setAttachment (slotName, attachmentName) {\n if (this._skeleton) {\n this._skeleton.setAttachment(slotName, attachmentName);\n }\n this.invalidAnimationCache();\n },\n\n /**\n * 获取 attachment 的 region\n */\n getRegion(slotName, attachmentName) {\n const attachment = this.getAttachment(slotName, attachmentName);\n if (attachment) {\n return attachment.region;\n }\n return null;\n },\n\n /**\n * 修改 attachment 的 region\n */\n setRegion(slotName, attachmentName, region) {\n const attachment = this.getAttachment(slotName, attachmentName);\n if (attachment) {\n attachment.region = region;\n if (attachment instanceof sp.spine.MeshAttachment) {\n attachment.updateUVs();\n } else if (attachment instanceof sp.spine.RegionAttachment) {\n attachment.setRegion(region);\n attachment.updateOffset();\n }\n this.setVertsDirty();\n return true;\n }\n return false;\n },\n\n /**\n * Return the renderer of attachment.\n * @method getTextureAtlas\n * @param {sp.spine.RegionAttachment|spine.BoundingBoxAttachment} regionAttachment\n * @return {sp.spine.TextureAtlasRegion}\n */\n getTextureAtlas (regionAttachment) {\n return regionAttachment.region;\n },\n\n // ANIMATION\n /**\n * !#en\n * Mix applies all keyframe values,\n * interpolated for the specified time and mixed with the current values.\n * !#zh 为所有关键帧设定混合及混合时间(从当前值开始差值)。\n * @method setMix\n * @param {String} fromAnimation\n * @param {String} toAnimation\n * @param {Number} duration\n */\n setMix (fromAnimation, toAnimation, duration) {\n if (this._state) {\n this._state.data.setMix(fromAnimation, toAnimation, duration);\n }\n },\n\n /**\n * !#en Set the current animation. Any queued animations are cleared.
\n * Returns a {{#crossLinkModule \"sp.spine\"}}sp.spine{{/crossLinkModule}}.TrackEntry object.\n * !#zh 设置当前动画。队列中的任何的动画将被清除。
\n * 返回一个 {{#crossLinkModule \"sp.spine\"}}sp.spine{{/crossLinkModule}}.TrackEntry 对象。\n * @method setAnimation\n * @param {Number} trackIndex\n * @param {String} name\n * @param {Boolean} loop\n * @return {sp.spine.TrackEntry}\n */\n setAnimation (trackIndex, name, loop) {\n\n this._playTimes = loop ? 0 : 1;\n this._animationName = name;\n\n if (this.isAnimationCached()) {\n if (trackIndex !== 0) {\n cc.warn(\"Track index can not greater than 0 in cached mode.\");\n }\n if (!this._skeletonCache) return null;\n let cache = this._skeletonCache.getAnimationCache(this.skeletonData._uuid, name);\n if (!cache) {\n cache = this._skeletonCache.initAnimationCache(this.skeletonData._uuid, name);\n }\n if (cache) {\n this._isAniComplete = false;\n this._accTime = 0;\n this._playCount = 0;\n this._frameCache = cache;\n if (this.attachUtil._hasAttachedNode()) {\n this._frameCache.enableCacheAttachedInfo();\n }\n this._frameCache.updateToFrame(0);\n this._curFrame = this._frameCache.frames[0];\n }\n } else {\n if (this._skeleton) {\n var animation = this._skeleton.data.findAnimation(name);\n if (!animation) {\n cc.logID(7509, name);\n return null;\n }\n var res = this._state.setAnimationWith(trackIndex, animation, loop);\n this._state.apply(this._skeleton);\n return res;\n }\n }\n return null;\n },\n\n /**\n * !#en Adds an animation to be played delay seconds after the current or last queued animation.
\n * Returns a {{#crossLinkModule \"sp.spine\"}}sp.spine{{/crossLinkModule}}.TrackEntry object.\n * !#zh 添加一个动画到动画队列尾部,还可以延迟指定的秒数。
\n * 返回一个 {{#crossLinkModule \"sp.spine\"}}sp.spine{{/crossLinkModule}}.TrackEntry 对象。\n * @method addAnimation\n * @param {Number} trackIndex\n * @param {String} name\n * @param {Boolean} loop\n * @param {Number} [delay=0]\n * @return {sp.spine.TrackEntry}\n */\n addAnimation (trackIndex, name, loop, delay) {\n delay = delay || 0;\n if (this.isAnimationCached()) {\n if (trackIndex !== 0) {\n cc.warn(\"Track index can not greater than 0 in cached mode.\");\n }\n this._animationQueue.push({animationName : name, loop: loop, delay : delay});\n } else {\n if (this._skeleton) {\n var animation = this._skeleton.data.findAnimation(name);\n if (!animation) {\n cc.logID(7510, name);\n return null;\n }\n return this._state.addAnimationWith(trackIndex, animation, loop, delay);\n }\n }\n return null;\n },\n\n /**\n * !#en Find animation with specified name.\n * !#zh 查找指定名称的动画\n * @method findAnimation\n * @param {String} name\n * @returns {sp.spine.Animation}\n */\n findAnimation (name) {\n if (this._skeleton) {\n return this._skeleton.data.findAnimation(name);\n }\n return null;\n },\n\n /**\n * !#en Returns track entry by trackIndex.
\n * Returns a {{#crossLinkModule \"sp.spine\"}}sp.spine{{/crossLinkModule}}.TrackEntry object.\n * !#zh 通过 track 索引获取 TrackEntry。
\n * 返回一个 {{#crossLinkModule \"sp.spine\"}}sp.spine{{/crossLinkModule}}.TrackEntry 对象。\n * @method getCurrent\n * @param trackIndex\n * @return {sp.spine.TrackEntry}\n */\n getCurrent (trackIndex) {\n if (this.isAnimationCached()) {\n cc.warn(\"'getCurrent' interface can not be invoked in cached mode.\");\n } else {\n if (this._state) {\n return this._state.getCurrent(trackIndex);\n }\n }\n return null;\n },\n\n /**\n * !#en Clears all tracks of animation state.\n * !#zh 清除所有 track 的动画状态。\n * @method clearTracks\n */\n clearTracks () {\n if (this.isAnimationCached()) {\n cc.warn(\"'clearTracks' interface can not be invoked in cached mode.\");\n } else {\n if (this._state) {\n this._state.clearTracks();\n }\n }\n },\n\n /**\n * !#en Clears track of animation state by trackIndex.\n * !#zh 清除出指定 track 的动画状态。\n * @method clearTrack\n * @param {number} trackIndex\n */\n clearTrack (trackIndex) {\n if (this.isAnimationCached()) {\n cc.warn(\"'clearTrack' interface can not be invoked in cached mode.\");\n } else {\n if (this._state) {\n this._state.clearTrack(trackIndex);\n if (CC_EDITOR && !cc.engine.isPlaying) {\n this._state.update(0);\n }\n }\n }\n },\n\n /**\n * !#en Set the start event listener.\n * !#zh 用来设置开始播放动画的事件监听。\n * @method setStartListener\n * @param {function} listener\n */\n setStartListener (listener) {\n this._ensureListener();\n this._listener.start = listener;\n },\n\n /**\n * !#en Set the interrupt event listener.\n * !#zh 用来设置动画被打断的事件监听。\n * @method setInterruptListener\n * @param {function} listener\n */\n setInterruptListener (listener) {\n this._ensureListener();\n this._listener.interrupt = listener;\n },\n\n /**\n * !#en Set the end event listener.\n * !#zh 用来设置动画播放完后的事件监听。\n * @method setEndListener\n * @param {function} listener\n */\n setEndListener (listener) {\n this._ensureListener();\n this._listener.end = listener;\n },\n\n /**\n * !#en Set the dispose event listener.\n * !#zh 用来设置动画将被销毁的事件监听。\n * @method setDisposeListener\n * @param {function} listener\n */\n setDisposeListener (listener) {\n this._ensureListener();\n this._listener.dispose = listener;\n },\n\n /**\n * !#en Set the complete event listener.\n * !#zh 用来设置动画播放一次循环结束后的事件监听。\n * @method setCompleteListener\n * @param {function} listener\n */\n setCompleteListener (listener) {\n this._ensureListener();\n this._listener.complete = listener;\n },\n\n /**\n * !#en Set the animation event listener.\n * !#zh 用来设置动画播放过程中帧事件的监听。\n * @method setEventListener\n * @param {function} listener\n */\n setEventListener (listener) {\n this._ensureListener();\n this._listener.event = listener;\n },\n\n /**\n * !#en Set the start event listener for specified TrackEntry.\n * !#zh 用来为指定的 TrackEntry 设置动画开始播放的事件监听。\n * @method setTrackStartListener\n * @param {sp.spine.TrackEntry} entry\n * @param {function} listener\n */\n setTrackStartListener (entry, listener) {\n TrackEntryListeners.getListeners(entry).start = listener;\n },\n\n /**\n * !#en Set the interrupt event listener for specified TrackEntry.\n * !#zh 用来为指定的 TrackEntry 设置动画被打断的事件监听。\n * @method setTrackInterruptListener\n * @param {sp.spine.TrackEntry} entry\n * @param {function} listener\n */\n setTrackInterruptListener (entry, listener) {\n TrackEntryListeners.getListeners(entry).interrupt = listener;\n },\n\n /**\n * !#en Set the end event listener for specified TrackEntry.\n * !#zh 用来为指定的 TrackEntry 设置动画播放结束的事件监听。\n * @method setTrackEndListener\n * @param {sp.spine.TrackEntry} entry\n * @param {function} listener\n */\n setTrackEndListener (entry, listener) {\n TrackEntryListeners.getListeners(entry).end = listener;\n },\n\n /**\n * !#en Set the dispose event listener for specified TrackEntry.\n * !#zh 用来为指定的 TrackEntry 设置动画即将被销毁的事件监听。\n * @method setTrackDisposeListener\n * @param {sp.spine.TrackEntry} entry\n * @param {function} listener\n */\n setTrackDisposeListener(entry, listener){\n TrackEntryListeners.getListeners(entry).dispose = listener;\n },\n\n /**\n * !#en Set the complete event listener for specified TrackEntry.\n * !#zh 用来为指定的 TrackEntry 设置动画一次循环播放结束的事件监听。\n * @method setTrackCompleteListener\n * @param {sp.spine.TrackEntry} entry\n * @param {function} listener\n * @param {sp.spine.TrackEntry} listener.entry\n * @param {Number} listener.loopCount\n */\n setTrackCompleteListener (entry, listener) {\n TrackEntryListeners.getListeners(entry).complete = function (trackEntry) {\n var loopCount = Math.floor(trackEntry.trackTime / trackEntry.animationEnd); \n listener(trackEntry, loopCount);\n };\n },\n\n /**\n * !#en Set the event listener for specified TrackEntry.\n * !#zh 用来为指定的 TrackEntry 设置动画帧事件的监听。\n * @method setTrackEventListener\n * @param {sp.spine.TrackEntry} entry\n * @param {function} listener\n */\n setTrackEventListener (entry, listener) {\n TrackEntryListeners.getListeners(entry).event = listener;\n },\n\n /**\n * !#en Get the animation state object\n * !#zh 获取动画状态\n * @method getState\n * @return {sp.spine.AnimationState} state\n */\n getState () {\n return this._state;\n },\n\n // update animation list for editor\n _updateAnimEnum: CC_EDITOR && function () {\n var animEnum;\n if (this.skeletonData) {\n animEnum = this.skeletonData.getAnimsEnum();\n }\n // change enum\n setEnumAttr(this, '_animationIndex', animEnum || DefaultAnimsEnum);\n },\n // update skin list for editor\n _updateSkinEnum: CC_EDITOR && function () {\n var skinEnum;\n if (this.skeletonData) {\n skinEnum = this.skeletonData.getSkinsEnum();\n }\n // change enum\n setEnumAttr(this, '_defaultSkinIndex', skinEnum || DefaultSkinsEnum);\n },\n\n _ensureListener () {\n if (!this._listener) {\n this._listener = new TrackEntryListeners();\n if (this._state) {\n this._state.addListener(this._listener);\n }\n }\n },\n\n _updateSkeletonData () {\n if (!this.skeletonData) {\n this.disableRender();\n return;\n }\n\n let data = this.skeletonData.getRuntimeData();\n if (!data) {\n this.disableRender();\n return;\n }\n \n try {\n this.setSkeletonData(data);\n if (!this.isAnimationCached()) {\n this.setAnimationStateData(new spine.AnimationStateData(this._skeleton.data));\n }\n this.defaultSkin && this.setSkin(this.defaultSkin);\n }\n catch (e) {\n cc.warn(e);\n }\n \n this.attachUtil.init(this);\n this.attachUtil._associateAttachedNode();\n this._preCacheMode = this._cacheMode;\n this.animation = this.defaultAnimation;\n this._dataDirty = true;\n },\n\n _refreshInspector () {\n // update inspector\n this._updateAnimEnum();\n this._updateSkinEnum();\n Editor.Utils.refreshSelectedInspector('node', this.node.uuid);\n },\n\n _updateDebugDraw: function () {\n if (this.debugBones || this.debugSlots) {\n if (!this._debugRenderer) {\n let debugDrawNode = new cc.PrivateNode();\n debugDrawNode.name = 'DEBUG_DRAW_NODE';\n let debugDraw = debugDrawNode.addComponent(Graphics);\n debugDraw.lineWidth = 1;\n debugDraw.strokeColor = cc.color(255, 0, 0, 255);\n \n this._debugRenderer = debugDraw;\n }\n\n this._debugRenderer.node.parent = this.node;\n if (this.isAnimationCached()) {\n cc.warn(\"Debug bones or slots is invalid in cached mode\");\n }\n }\n else if (this._debugRenderer) {\n this._debugRenderer.node.parent = null;\n }\n },\n});\n\nmodule.exports = sp.Skeleton;\n","/****************************************************************************\n Copyright (c) 2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n http://www.cocos2d-x.org\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * !#en\n * The global main namespace of Spine, all classes, functions,\n * properties and constants of Spine are defined in this namespace\n * !#zh\n * Spine 的全局的命名空间,\n * 与 Spine 相关的所有的类,函数,属性,常量都在这个命名空间中定义。\n * @module sp\n * @main sp\n */\n\n/*\n * Reference:\n * http://esotericsoftware.com/spine-runtime-terminology\n * http://esotericsoftware.com/files/runtime-diagram.png\n * http://en.esotericsoftware.com/spine-using-runtimes\n */\n\nvar _global = typeof window === 'undefined' ? global : window;\nvar _isUseSpine = true;\n\nif (!CC_NATIVERENDERER) {\n _global.spine = require('./lib/spine');\n} else if (!_global.spine) {\n _isUseSpine = false;\n}\n\nif (_isUseSpine) {\n _global.sp = {};\n\n /**\n * !#en\n * The global time scale of Spine.\n * !#zh\n * Spine 全局时间缩放率。\n * @example\n * sp.timeScale = 0.8;\n */\n sp._timeScale = 1.0;\n Object.defineProperty(sp, 'timeScale', {\n get () {\n return this._timeScale;\n },\n set (value) {\n this._timeScale = value;\n },\n configurable: true,\n });\n\n // The attachment type of spine. It contains three type: REGION(0), BOUNDING_BOX(1), MESH(2) and SKINNED_MESH.\n sp.ATTACHMENT_TYPE = {\n REGION: 0,\n BOUNDING_BOX: 1,\n MESH: 2,\n SKINNED_MESH:3\n };\n\n /**\n * !#en The event type of spine skeleton animation.\n * !#zh 骨骼动画事件类型。\n * @enum AnimationEventType\n */\n sp.AnimationEventType = cc.Enum({\n /**\n * !#en The play spine skeleton animation start type.\n * !#zh 开始播放骨骼动画。\n * @property {Number} START\n */\n START: 0,\n /**\n * !#en Another entry has replaced this entry as the current entry. This entry may continue being applied for mixing.\n * !#zh 当前的 entry 被其他的 entry 替换。当使用 mixing 时,当前的 entry 会继续运行。\n */\n INTERRUPT: 1,\n /**\n * !#en The play spine skeleton animation finish type.\n * !#zh 播放骨骼动画结束。\n * @property {Number} END\n */\n END: 2,\n /**\n * !#en The entry will be disposed.\n * !#zh entry 将被销毁。\n */\n DISPOSE: 3,\n /**\n * !#en The play spine skeleton animation complete type.\n * !#zh 播放骨骼动画完成。\n * @property {Number} COMPLETE\n */\n COMPLETE: 4,\n /**\n * !#en The spine skeleton animation event type.\n * !#zh 骨骼动画事件。\n * @property {Number} EVENT\n */\n EVENT: 5\n });\n\n /**\n * @module sp\n */\n if (!CC_EDITOR || !Editor.isMainProcess) {\n \n sp.spine = _global.spine;\n if (!CC_NATIVERENDERER) {\n require('./skeleton-texture');\n }\n\n require('./skeleton-data');\n require('./vertex-effect-delegate');\n require('./Skeleton');\n require('./spine-assembler');\n }\n else {\n require('./skeleton-data');\n }\n}\n\n/**\n * !#en\n * `sp.spine` is the namespace for official Spine Runtime, which officially implemented and maintained by Spine.
\n * Please refer to the official documentation for its detailed usage: [http://en.esotericsoftware.com/spine-using-runtimes](http://en.esotericsoftware.com/spine-using-runtimes)\n * !#zh\n * sp.spine 模块是 Spine 官方运行库的 API 入口,由 Spine 官方统一实现和维护,具体用法请参考:[http://zh.esotericsoftware.com/spine-using-runtimes](http://zh.esotericsoftware.com/spine-using-runtimes)\n * @module sp.spine\n * @main sp.spine\n */\n","// Spine runtime version 3.8\n\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar spine;\n(function (spine) {\n var Animation = (function () {\n function Animation(name, timelines, duration) {\n if (name == null)\n throw new Error(\"name cannot be null.\");\n if (timelines == null)\n throw new Error(\"timelines cannot be null.\");\n this.name = name;\n this.timelines = timelines;\n this.timelineIds = [];\n for (var i = 0; i < timelines.length; i++)\n this.timelineIds[timelines[i].getPropertyId()] = true;\n this.duration = duration;\n }\n Animation.prototype.hasTimeline = function (id) {\n return this.timelineIds[id] == true;\n };\n Animation.prototype.apply = function (skeleton, lastTime, time, loop, events, alpha, blend, direction) {\n if (skeleton == null)\n throw new Error(\"skeleton cannot be null.\");\n if (loop && this.duration != 0) {\n time %= this.duration;\n if (lastTime > 0)\n lastTime %= this.duration;\n }\n var timelines = this.timelines;\n for (var i = 0, n = timelines.length; i < n; i++)\n timelines[i].apply(skeleton, lastTime, time, events, alpha, blend, direction);\n };\n Animation.binarySearch = function (values, target, step) {\n if (step === void 0) { step = 1; }\n var low = 0;\n var high = values.length / step - 2;\n if (high == 0)\n return step;\n var current = high >>> 1;\n while (true) {\n if (values[(current + 1) * step] <= target)\n low = current + 1;\n else\n high = current;\n if (low == high)\n return (low + 1) * step;\n current = (low + high) >>> 1;\n }\n };\n Animation.linearSearch = function (values, target, step) {\n for (var i = 0, last = values.length - step; i <= last; i += step)\n if (values[i] > target)\n return i;\n return -1;\n };\n return Animation;\n }());\n spine.Animation = Animation;\n var MixBlend;\n (function (MixBlend) {\n MixBlend[MixBlend[\"setup\"] = 0] = \"setup\";\n MixBlend[MixBlend[\"first\"] = 1] = \"first\";\n MixBlend[MixBlend[\"replace\"] = 2] = \"replace\";\n MixBlend[MixBlend[\"add\"] = 3] = \"add\";\n })(MixBlend = spine.MixBlend || (spine.MixBlend = {}));\n var MixDirection;\n (function (MixDirection) {\n MixDirection[MixDirection[\"mixIn\"] = 0] = \"mixIn\";\n MixDirection[MixDirection[\"mixOut\"] = 1] = \"mixOut\";\n })(MixDirection = spine.MixDirection || (spine.MixDirection = {}));\n var TimelineType;\n (function (TimelineType) {\n TimelineType[TimelineType[\"rotate\"] = 0] = \"rotate\";\n TimelineType[TimelineType[\"translate\"] = 1] = \"translate\";\n TimelineType[TimelineType[\"scale\"] = 2] = \"scale\";\n TimelineType[TimelineType[\"shear\"] = 3] = \"shear\";\n TimelineType[TimelineType[\"attachment\"] = 4] = \"attachment\";\n TimelineType[TimelineType[\"color\"] = 5] = \"color\";\n TimelineType[TimelineType[\"deform\"] = 6] = \"deform\";\n TimelineType[TimelineType[\"event\"] = 7] = \"event\";\n TimelineType[TimelineType[\"drawOrder\"] = 8] = \"drawOrder\";\n TimelineType[TimelineType[\"ikConstraint\"] = 9] = \"ikConstraint\";\n TimelineType[TimelineType[\"transformConstraint\"] = 10] = \"transformConstraint\";\n TimelineType[TimelineType[\"pathConstraintPosition\"] = 11] = \"pathConstraintPosition\";\n TimelineType[TimelineType[\"pathConstraintSpacing\"] = 12] = \"pathConstraintSpacing\";\n TimelineType[TimelineType[\"pathConstraintMix\"] = 13] = \"pathConstraintMix\";\n TimelineType[TimelineType[\"twoColor\"] = 14] = \"twoColor\";\n })(TimelineType = spine.TimelineType || (spine.TimelineType = {}));\n var CurveTimeline = (function () {\n function CurveTimeline(frameCount) {\n if (frameCount <= 0)\n throw new Error(\"frameCount must be > 0: \" + frameCount);\n this.curves = spine.Utils.newFloatArray((frameCount - 1) * CurveTimeline.BEZIER_SIZE);\n }\n CurveTimeline.prototype.getFrameCount = function () {\n return this.curves.length / CurveTimeline.BEZIER_SIZE + 1;\n };\n CurveTimeline.prototype.setLinear = function (frameIndex) {\n this.curves[frameIndex * CurveTimeline.BEZIER_SIZE] = CurveTimeline.LINEAR;\n };\n CurveTimeline.prototype.setStepped = function (frameIndex) {\n this.curves[frameIndex * CurveTimeline.BEZIER_SIZE] = CurveTimeline.STEPPED;\n };\n CurveTimeline.prototype.getCurveType = function (frameIndex) {\n var index = frameIndex * CurveTimeline.BEZIER_SIZE;\n if (index == this.curves.length)\n return CurveTimeline.LINEAR;\n var type = this.curves[index];\n if (type == CurveTimeline.LINEAR)\n return CurveTimeline.LINEAR;\n if (type == CurveTimeline.STEPPED)\n return CurveTimeline.STEPPED;\n return CurveTimeline.BEZIER;\n };\n CurveTimeline.prototype.setCurve = function (frameIndex, cx1, cy1, cx2, cy2) {\n var tmpx = (-cx1 * 2 + cx2) * 0.03, tmpy = (-cy1 * 2 + cy2) * 0.03;\n var dddfx = ((cx1 - cx2) * 3 + 1) * 0.006, dddfy = ((cy1 - cy2) * 3 + 1) * 0.006;\n var ddfx = tmpx * 2 + dddfx, ddfy = tmpy * 2 + dddfy;\n var dfx = cx1 * 0.3 + tmpx + dddfx * 0.16666667, dfy = cy1 * 0.3 + tmpy + dddfy * 0.16666667;\n var i = frameIndex * CurveTimeline.BEZIER_SIZE;\n var curves = this.curves;\n curves[i++] = CurveTimeline.BEZIER;\n var x = dfx, y = dfy;\n for (var n = i + CurveTimeline.BEZIER_SIZE - 1; i < n; i += 2) {\n curves[i] = x;\n curves[i + 1] = y;\n dfx += ddfx;\n dfy += ddfy;\n ddfx += dddfx;\n ddfy += dddfy;\n x += dfx;\n y += dfy;\n }\n };\n CurveTimeline.prototype.getCurvePercent = function (frameIndex, percent) {\n percent = spine.MathUtils.clamp(percent, 0, 1);\n var curves = this.curves;\n var i = frameIndex * CurveTimeline.BEZIER_SIZE;\n var type = curves[i];\n if (type == CurveTimeline.LINEAR)\n return percent;\n if (type == CurveTimeline.STEPPED)\n return 0;\n i++;\n var x = 0;\n for (var start = i, n = i + CurveTimeline.BEZIER_SIZE - 1; i < n; i += 2) {\n x = curves[i];\n if (x >= percent) {\n var prevX = void 0, prevY = void 0;\n if (i == start) {\n prevX = 0;\n prevY = 0;\n }\n else {\n prevX = curves[i - 2];\n prevY = curves[i - 1];\n }\n return prevY + (curves[i + 1] - prevY) * (percent - prevX) / (x - prevX);\n }\n }\n var y = curves[i - 1];\n return y + (1 - y) * (percent - x) / (1 - x);\n };\n CurveTimeline.LINEAR = 0;\n CurveTimeline.STEPPED = 1;\n CurveTimeline.BEZIER = 2;\n CurveTimeline.BEZIER_SIZE = 10 * 2 - 1;\n return CurveTimeline;\n }());\n spine.CurveTimeline = CurveTimeline;\n var RotateTimeline = (function (_super) {\n __extends(RotateTimeline, _super);\n function RotateTimeline(frameCount) {\n var _this = _super.call(this, frameCount) || this;\n _this.frames = spine.Utils.newFloatArray(frameCount << 1);\n return _this;\n }\n RotateTimeline.prototype.getPropertyId = function () {\n return (TimelineType.rotate << 24) + this.boneIndex;\n };\n RotateTimeline.prototype.setFrame = function (frameIndex, time, degrees) {\n frameIndex <<= 1;\n this.frames[frameIndex] = time;\n this.frames[frameIndex + RotateTimeline.ROTATION] = degrees;\n };\n RotateTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {\n var frames = this.frames;\n var bone = skeleton.bones[this.boneIndex];\n if (!bone.active)\n return;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n bone.rotation = bone.data.rotation;\n return;\n case MixBlend.first:\n var r_1 = bone.data.rotation - bone.rotation;\n bone.rotation += (r_1 - (16384 - ((16384.499999999996 - r_1 / 360) | 0)) * 360) * alpha;\n }\n return;\n }\n if (time >= frames[frames.length - RotateTimeline.ENTRIES]) {\n var r_2 = frames[frames.length + RotateTimeline.PREV_ROTATION];\n switch (blend) {\n case MixBlend.setup:\n bone.rotation = bone.data.rotation + r_2 * alpha;\n break;\n case MixBlend.first:\n case MixBlend.replace:\n r_2 += bone.data.rotation - bone.rotation;\n r_2 -= (16384 - ((16384.499999999996 - r_2 / 360) | 0)) * 360;\n case MixBlend.add:\n bone.rotation += r_2 * alpha;\n }\n return;\n }\n var frame = Animation.binarySearch(frames, time, RotateTimeline.ENTRIES);\n var prevRotation = frames[frame + RotateTimeline.PREV_ROTATION];\n var frameTime = frames[frame];\n var percent = this.getCurvePercent((frame >> 1) - 1, 1 - (time - frameTime) / (frames[frame + RotateTimeline.PREV_TIME] - frameTime));\n var r = frames[frame + RotateTimeline.ROTATION] - prevRotation;\n r = prevRotation + (r - (16384 - ((16384.499999999996 - r / 360) | 0)) * 360) * percent;\n switch (blend) {\n case MixBlend.setup:\n bone.rotation = bone.data.rotation + (r - (16384 - ((16384.499999999996 - r / 360) | 0)) * 360) * alpha;\n break;\n case MixBlend.first:\n case MixBlend.replace:\n r += bone.data.rotation - bone.rotation;\n case MixBlend.add:\n bone.rotation += (r - (16384 - ((16384.499999999996 - r / 360) | 0)) * 360) * alpha;\n }\n };\n RotateTimeline.ENTRIES = 2;\n RotateTimeline.PREV_TIME = -2;\n RotateTimeline.PREV_ROTATION = -1;\n RotateTimeline.ROTATION = 1;\n return RotateTimeline;\n }(CurveTimeline));\n spine.RotateTimeline = RotateTimeline;\n var TranslateTimeline = (function (_super) {\n __extends(TranslateTimeline, _super);\n function TranslateTimeline(frameCount) {\n var _this = _super.call(this, frameCount) || this;\n _this.frames = spine.Utils.newFloatArray(frameCount * TranslateTimeline.ENTRIES);\n return _this;\n }\n TranslateTimeline.prototype.getPropertyId = function () {\n return (TimelineType.translate << 24) + this.boneIndex;\n };\n TranslateTimeline.prototype.setFrame = function (frameIndex, time, x, y) {\n frameIndex *= TranslateTimeline.ENTRIES;\n this.frames[frameIndex] = time;\n this.frames[frameIndex + TranslateTimeline.X] = x;\n this.frames[frameIndex + TranslateTimeline.Y] = y;\n };\n TranslateTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {\n var frames = this.frames;\n var bone = skeleton.bones[this.boneIndex];\n if (!bone.active)\n return;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n bone.x = bone.data.x;\n bone.y = bone.data.y;\n return;\n case MixBlend.first:\n bone.x += (bone.data.x - bone.x) * alpha;\n bone.y += (bone.data.y - bone.y) * alpha;\n }\n return;\n }\n var x = 0, y = 0;\n if (time >= frames[frames.length - TranslateTimeline.ENTRIES]) {\n x = frames[frames.length + TranslateTimeline.PREV_X];\n y = frames[frames.length + TranslateTimeline.PREV_Y];\n }\n else {\n var frame = Animation.binarySearch(frames, time, TranslateTimeline.ENTRIES);\n x = frames[frame + TranslateTimeline.PREV_X];\n y = frames[frame + TranslateTimeline.PREV_Y];\n var frameTime = frames[frame];\n var percent = this.getCurvePercent(frame / TranslateTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + TranslateTimeline.PREV_TIME] - frameTime));\n x += (frames[frame + TranslateTimeline.X] - x) * percent;\n y += (frames[frame + TranslateTimeline.Y] - y) * percent;\n }\n switch (blend) {\n case MixBlend.setup:\n bone.x = bone.data.x + x * alpha;\n bone.y = bone.data.y + y * alpha;\n break;\n case MixBlend.first:\n case MixBlend.replace:\n bone.x += (bone.data.x + x - bone.x) * alpha;\n bone.y += (bone.data.y + y - bone.y) * alpha;\n break;\n case MixBlend.add:\n bone.x += x * alpha;\n bone.y += y * alpha;\n }\n };\n TranslateTimeline.ENTRIES = 3;\n TranslateTimeline.PREV_TIME = -3;\n TranslateTimeline.PREV_X = -2;\n TranslateTimeline.PREV_Y = -1;\n TranslateTimeline.X = 1;\n TranslateTimeline.Y = 2;\n return TranslateTimeline;\n }(CurveTimeline));\n spine.TranslateTimeline = TranslateTimeline;\n var ScaleTimeline = (function (_super) {\n __extends(ScaleTimeline, _super);\n function ScaleTimeline(frameCount) {\n return _super.call(this, frameCount) || this;\n }\n ScaleTimeline.prototype.getPropertyId = function () {\n return (TimelineType.scale << 24) + this.boneIndex;\n };\n ScaleTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {\n var frames = this.frames;\n var bone = skeleton.bones[this.boneIndex];\n if (!bone.active)\n return;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n bone.scaleX = bone.data.scaleX;\n bone.scaleY = bone.data.scaleY;\n return;\n case MixBlend.first:\n bone.scaleX += (bone.data.scaleX - bone.scaleX) * alpha;\n bone.scaleY += (bone.data.scaleY - bone.scaleY) * alpha;\n }\n return;\n }\n var x = 0, y = 0;\n if (time >= frames[frames.length - ScaleTimeline.ENTRIES]) {\n x = frames[frames.length + ScaleTimeline.PREV_X] * bone.data.scaleX;\n y = frames[frames.length + ScaleTimeline.PREV_Y] * bone.data.scaleY;\n }\n else {\n var frame = Animation.binarySearch(frames, time, ScaleTimeline.ENTRIES);\n x = frames[frame + ScaleTimeline.PREV_X];\n y = frames[frame + ScaleTimeline.PREV_Y];\n var frameTime = frames[frame];\n var percent = this.getCurvePercent(frame / ScaleTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + ScaleTimeline.PREV_TIME] - frameTime));\n x = (x + (frames[frame + ScaleTimeline.X] - x) * percent) * bone.data.scaleX;\n y = (y + (frames[frame + ScaleTimeline.Y] - y) * percent) * bone.data.scaleY;\n }\n if (alpha == 1) {\n if (blend == MixBlend.add) {\n bone.scaleX += x - bone.data.scaleX;\n bone.scaleY += y - bone.data.scaleY;\n }\n else {\n bone.scaleX = x;\n bone.scaleY = y;\n }\n }\n else {\n var bx = 0, by = 0;\n if (direction == MixDirection.mixOut) {\n switch (blend) {\n case MixBlend.setup:\n bx = bone.data.scaleX;\n by = bone.data.scaleY;\n bone.scaleX = bx + (Math.abs(x) * spine.MathUtils.signum(bx) - bx) * alpha;\n bone.scaleY = by + (Math.abs(y) * spine.MathUtils.signum(by) - by) * alpha;\n break;\n case MixBlend.first:\n case MixBlend.replace:\n bx = bone.scaleX;\n by = bone.scaleY;\n bone.scaleX = bx + (Math.abs(x) * spine.MathUtils.signum(bx) - bx) * alpha;\n bone.scaleY = by + (Math.abs(y) * spine.MathUtils.signum(by) - by) * alpha;\n break;\n case MixBlend.add:\n bx = bone.scaleX;\n by = bone.scaleY;\n bone.scaleX = bx + (Math.abs(x) * spine.MathUtils.signum(bx) - bone.data.scaleX) * alpha;\n bone.scaleY = by + (Math.abs(y) * spine.MathUtils.signum(by) - bone.data.scaleY) * alpha;\n }\n }\n else {\n switch (blend) {\n case MixBlend.setup:\n bx = Math.abs(bone.data.scaleX) * spine.MathUtils.signum(x);\n by = Math.abs(bone.data.scaleY) * spine.MathUtils.signum(y);\n bone.scaleX = bx + (x - bx) * alpha;\n bone.scaleY = by + (y - by) * alpha;\n break;\n case MixBlend.first:\n case MixBlend.replace:\n bx = Math.abs(bone.scaleX) * spine.MathUtils.signum(x);\n by = Math.abs(bone.scaleY) * spine.MathUtils.signum(y);\n bone.scaleX = bx + (x - bx) * alpha;\n bone.scaleY = by + (y - by) * alpha;\n break;\n case MixBlend.add:\n bx = spine.MathUtils.signum(x);\n by = spine.MathUtils.signum(y);\n bone.scaleX = Math.abs(bone.scaleX) * bx + (x - Math.abs(bone.data.scaleX) * bx) * alpha;\n bone.scaleY = Math.abs(bone.scaleY) * by + (y - Math.abs(bone.data.scaleY) * by) * alpha;\n }\n }\n }\n };\n return ScaleTimeline;\n }(TranslateTimeline));\n spine.ScaleTimeline = ScaleTimeline;\n var ShearTimeline = (function (_super) {\n __extends(ShearTimeline, _super);\n function ShearTimeline(frameCount) {\n return _super.call(this, frameCount) || this;\n }\n ShearTimeline.prototype.getPropertyId = function () {\n return (TimelineType.shear << 24) + this.boneIndex;\n };\n ShearTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {\n var frames = this.frames;\n var bone = skeleton.bones[this.boneIndex];\n if (!bone.active)\n return;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n bone.shearX = bone.data.shearX;\n bone.shearY = bone.data.shearY;\n return;\n case MixBlend.first:\n bone.shearX += (bone.data.shearX - bone.shearX) * alpha;\n bone.shearY += (bone.data.shearY - bone.shearY) * alpha;\n }\n return;\n }\n var x = 0, y = 0;\n if (time >= frames[frames.length - ShearTimeline.ENTRIES]) {\n x = frames[frames.length + ShearTimeline.PREV_X];\n y = frames[frames.length + ShearTimeline.PREV_Y];\n }\n else {\n var frame = Animation.binarySearch(frames, time, ShearTimeline.ENTRIES);\n x = frames[frame + ShearTimeline.PREV_X];\n y = frames[frame + ShearTimeline.PREV_Y];\n var frameTime = frames[frame];\n var percent = this.getCurvePercent(frame / ShearTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + ShearTimeline.PREV_TIME] - frameTime));\n x = x + (frames[frame + ShearTimeline.X] - x) * percent;\n y = y + (frames[frame + ShearTimeline.Y] - y) * percent;\n }\n switch (blend) {\n case MixBlend.setup:\n bone.shearX = bone.data.shearX + x * alpha;\n bone.shearY = bone.data.shearY + y * alpha;\n break;\n case MixBlend.first:\n case MixBlend.replace:\n bone.shearX += (bone.data.shearX + x - bone.shearX) * alpha;\n bone.shearY += (bone.data.shearY + y - bone.shearY) * alpha;\n break;\n case MixBlend.add:\n bone.shearX += x * alpha;\n bone.shearY += y * alpha;\n }\n };\n return ShearTimeline;\n }(TranslateTimeline));\n spine.ShearTimeline = ShearTimeline;\n var ColorTimeline = (function (_super) {\n __extends(ColorTimeline, _super);\n function ColorTimeline(frameCount) {\n var _this = _super.call(this, frameCount) || this;\n _this.frames = spine.Utils.newFloatArray(frameCount * ColorTimeline.ENTRIES);\n return _this;\n }\n ColorTimeline.prototype.getPropertyId = function () {\n return (TimelineType.color << 24) + this.slotIndex;\n };\n ColorTimeline.prototype.setFrame = function (frameIndex, time, r, g, b, a) {\n frameIndex *= ColorTimeline.ENTRIES;\n this.frames[frameIndex] = time;\n this.frames[frameIndex + ColorTimeline.R] = r;\n this.frames[frameIndex + ColorTimeline.G] = g;\n this.frames[frameIndex + ColorTimeline.B] = b;\n this.frames[frameIndex + ColorTimeline.A] = a;\n };\n ColorTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {\n var slot = skeleton.slots[this.slotIndex];\n if (!slot.bone.active)\n return;\n var frames = this.frames;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n slot.color.setFromColor(slot.data.color);\n return;\n case MixBlend.first:\n var color = slot.color, setup = slot.data.color;\n color.add((setup.r - color.r) * alpha, (setup.g - color.g) * alpha, (setup.b - color.b) * alpha, (setup.a - color.a) * alpha);\n }\n return;\n }\n var r = 0, g = 0, b = 0, a = 0;\n if (time >= frames[frames.length - ColorTimeline.ENTRIES]) {\n var i = frames.length;\n r = frames[i + ColorTimeline.PREV_R];\n g = frames[i + ColorTimeline.PREV_G];\n b = frames[i + ColorTimeline.PREV_B];\n a = frames[i + ColorTimeline.PREV_A];\n }\n else {\n var frame = Animation.binarySearch(frames, time, ColorTimeline.ENTRIES);\n r = frames[frame + ColorTimeline.PREV_R];\n g = frames[frame + ColorTimeline.PREV_G];\n b = frames[frame + ColorTimeline.PREV_B];\n a = frames[frame + ColorTimeline.PREV_A];\n var frameTime = frames[frame];\n var percent = this.getCurvePercent(frame / ColorTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + ColorTimeline.PREV_TIME] - frameTime));\n r += (frames[frame + ColorTimeline.R] - r) * percent;\n g += (frames[frame + ColorTimeline.G] - g) * percent;\n b += (frames[frame + ColorTimeline.B] - b) * percent;\n a += (frames[frame + ColorTimeline.A] - a) * percent;\n }\n if (alpha == 1)\n slot.color.set(r, g, b, a);\n else {\n var color = slot.color;\n if (blend == MixBlend.setup)\n color.setFromColor(slot.data.color);\n color.add((r - color.r) * alpha, (g - color.g) * alpha, (b - color.b) * alpha, (a - color.a) * alpha);\n }\n };\n ColorTimeline.ENTRIES = 5;\n ColorTimeline.PREV_TIME = -5;\n ColorTimeline.PREV_R = -4;\n ColorTimeline.PREV_G = -3;\n ColorTimeline.PREV_B = -2;\n ColorTimeline.PREV_A = -1;\n ColorTimeline.R = 1;\n ColorTimeline.G = 2;\n ColorTimeline.B = 3;\n ColorTimeline.A = 4;\n return ColorTimeline;\n }(CurveTimeline));\n spine.ColorTimeline = ColorTimeline;\n var TwoColorTimeline = (function (_super) {\n __extends(TwoColorTimeline, _super);\n function TwoColorTimeline(frameCount) {\n var _this = _super.call(this, frameCount) || this;\n _this.frames = spine.Utils.newFloatArray(frameCount * TwoColorTimeline.ENTRIES);\n return _this;\n }\n TwoColorTimeline.prototype.getPropertyId = function () {\n return (TimelineType.twoColor << 24) + this.slotIndex;\n };\n TwoColorTimeline.prototype.setFrame = function (frameIndex, time, r, g, b, a, r2, g2, b2) {\n frameIndex *= TwoColorTimeline.ENTRIES;\n this.frames[frameIndex] = time;\n this.frames[frameIndex + TwoColorTimeline.R] = r;\n this.frames[frameIndex + TwoColorTimeline.G] = g;\n this.frames[frameIndex + TwoColorTimeline.B] = b;\n this.frames[frameIndex + TwoColorTimeline.A] = a;\n this.frames[frameIndex + TwoColorTimeline.R2] = r2;\n this.frames[frameIndex + TwoColorTimeline.G2] = g2;\n this.frames[frameIndex + TwoColorTimeline.B2] = b2;\n };\n TwoColorTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {\n var slot = skeleton.slots[this.slotIndex];\n if (!slot.bone.active)\n return;\n var frames = this.frames;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n slot.color.setFromColor(slot.data.color);\n slot.darkColor.setFromColor(slot.data.darkColor);\n return;\n case MixBlend.first:\n var light = slot.color, dark = slot.darkColor, setupLight = slot.data.color, setupDark = slot.data.darkColor;\n light.add((setupLight.r - light.r) * alpha, (setupLight.g - light.g) * alpha, (setupLight.b - light.b) * alpha, (setupLight.a - light.a) * alpha);\n dark.add((setupDark.r - dark.r) * alpha, (setupDark.g - dark.g) * alpha, (setupDark.b - dark.b) * alpha, 0);\n }\n return;\n }\n var r = 0, g = 0, b = 0, a = 0, r2 = 0, g2 = 0, b2 = 0;\n if (time >= frames[frames.length - TwoColorTimeline.ENTRIES]) {\n var i = frames.length;\n r = frames[i + TwoColorTimeline.PREV_R];\n g = frames[i + TwoColorTimeline.PREV_G];\n b = frames[i + TwoColorTimeline.PREV_B];\n a = frames[i + TwoColorTimeline.PREV_A];\n r2 = frames[i + TwoColorTimeline.PREV_R2];\n g2 = frames[i + TwoColorTimeline.PREV_G2];\n b2 = frames[i + TwoColorTimeline.PREV_B2];\n }\n else {\n var frame = Animation.binarySearch(frames, time, TwoColorTimeline.ENTRIES);\n r = frames[frame + TwoColorTimeline.PREV_R];\n g = frames[frame + TwoColorTimeline.PREV_G];\n b = frames[frame + TwoColorTimeline.PREV_B];\n a = frames[frame + TwoColorTimeline.PREV_A];\n r2 = frames[frame + TwoColorTimeline.PREV_R2];\n g2 = frames[frame + TwoColorTimeline.PREV_G2];\n b2 = frames[frame + TwoColorTimeline.PREV_B2];\n var frameTime = frames[frame];\n var percent = this.getCurvePercent(frame / TwoColorTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + TwoColorTimeline.PREV_TIME] - frameTime));\n r += (frames[frame + TwoColorTimeline.R] - r) * percent;\n g += (frames[frame + TwoColorTimeline.G] - g) * percent;\n b += (frames[frame + TwoColorTimeline.B] - b) * percent;\n a += (frames[frame + TwoColorTimeline.A] - a) * percent;\n r2 += (frames[frame + TwoColorTimeline.R2] - r2) * percent;\n g2 += (frames[frame + TwoColorTimeline.G2] - g2) * percent;\n b2 += (frames[frame + TwoColorTimeline.B2] - b2) * percent;\n }\n if (alpha == 1) {\n slot.color.set(r, g, b, a);\n slot.darkColor.set(r2, g2, b2, 1);\n }\n else {\n var light = slot.color, dark = slot.darkColor;\n if (blend == MixBlend.setup) {\n light.setFromColor(slot.data.color);\n dark.setFromColor(slot.data.darkColor);\n }\n light.add((r - light.r) * alpha, (g - light.g) * alpha, (b - light.b) * alpha, (a - light.a) * alpha);\n dark.add((r2 - dark.r) * alpha, (g2 - dark.g) * alpha, (b2 - dark.b) * alpha, 0);\n }\n };\n TwoColorTimeline.ENTRIES = 8;\n TwoColorTimeline.PREV_TIME = -8;\n TwoColorTimeline.PREV_R = -7;\n TwoColorTimeline.PREV_G = -6;\n TwoColorTimeline.PREV_B = -5;\n TwoColorTimeline.PREV_A = -4;\n TwoColorTimeline.PREV_R2 = -3;\n TwoColorTimeline.PREV_G2 = -2;\n TwoColorTimeline.PREV_B2 = -1;\n TwoColorTimeline.R = 1;\n TwoColorTimeline.G = 2;\n TwoColorTimeline.B = 3;\n TwoColorTimeline.A = 4;\n TwoColorTimeline.R2 = 5;\n TwoColorTimeline.G2 = 6;\n TwoColorTimeline.B2 = 7;\n return TwoColorTimeline;\n }(CurveTimeline));\n spine.TwoColorTimeline = TwoColorTimeline;\n var AttachmentTimeline = (function () {\n function AttachmentTimeline(frameCount) {\n this.frames = spine.Utils.newFloatArray(frameCount);\n this.attachmentNames = new Array(frameCount);\n }\n AttachmentTimeline.prototype.getPropertyId = function () {\n return (TimelineType.attachment << 24) + this.slotIndex;\n };\n AttachmentTimeline.prototype.getFrameCount = function () {\n return this.frames.length;\n };\n AttachmentTimeline.prototype.setFrame = function (frameIndex, time, attachmentName) {\n this.frames[frameIndex] = time;\n this.attachmentNames[frameIndex] = attachmentName;\n };\n AttachmentTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {\n var slot = skeleton.slots[this.slotIndex];\n if (!slot.bone.active)\n return;\n if (direction == MixDirection.mixOut && blend == MixBlend.setup) {\n var attachmentName_1 = slot.data.attachmentName;\n slot.setAttachment(attachmentName_1 == null ? null : skeleton.getAttachment(this.slotIndex, attachmentName_1));\n return;\n }\n var frames = this.frames;\n if (time < frames[0]) {\n if (blend == MixBlend.setup || blend == MixBlend.first) {\n var attachmentName_2 = slot.data.attachmentName;\n slot.setAttachment(attachmentName_2 == null ? null : skeleton.getAttachment(this.slotIndex, attachmentName_2));\n }\n return;\n }\n var frameIndex = 0;\n if (time >= frames[frames.length - 1])\n frameIndex = frames.length - 1;\n else\n frameIndex = Animation.binarySearch(frames, time, 1) - 1;\n var attachmentName = this.attachmentNames[frameIndex];\n skeleton.slots[this.slotIndex]\n .setAttachment(attachmentName == null ? null : skeleton.getAttachment(this.slotIndex, attachmentName));\n };\n return AttachmentTimeline;\n }());\n spine.AttachmentTimeline = AttachmentTimeline;\n var zeros = null;\n var DeformTimeline = (function (_super) {\n __extends(DeformTimeline, _super);\n function DeformTimeline(frameCount) {\n var _this = _super.call(this, frameCount) || this;\n _this.frames = spine.Utils.newFloatArray(frameCount);\n _this.frameVertices = new Array(frameCount);\n if (zeros == null)\n zeros = spine.Utils.newFloatArray(64);\n return _this;\n }\n DeformTimeline.prototype.getPropertyId = function () {\n return (TimelineType.deform << 27) + +this.attachment.id + this.slotIndex;\n };\n DeformTimeline.prototype.setFrame = function (frameIndex, time, vertices) {\n this.frames[frameIndex] = time;\n this.frameVertices[frameIndex] = vertices;\n };\n DeformTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n var slot = skeleton.slots[this.slotIndex];\n if (!slot.bone.active)\n return;\n var slotAttachment = slot.getAttachment();\n if (!(slotAttachment instanceof spine.VertexAttachment) || !(slotAttachment.deformAttachment == this.attachment))\n return;\n var deformArray = slot.deform;\n if (deformArray.length == 0)\n blend = MixBlend.setup;\n var frameVertices = this.frameVertices;\n var vertexCount = frameVertices[0].length;\n var frames = this.frames;\n if (time < frames[0]) {\n var vertexAttachment = slotAttachment;\n switch (blend) {\n case MixBlend.setup:\n deformArray.length = 0;\n return;\n case MixBlend.first:\n if (alpha == 1) {\n deformArray.length = 0;\n break;\n }\n var deform_1 = spine.Utils.setArraySize(deformArray, vertexCount);\n if (vertexAttachment.bones == null) {\n var setupVertices = vertexAttachment.vertices;\n for (var i = 0; i < vertexCount; i++)\n deform_1[i] += (setupVertices[i] - deform_1[i]) * alpha;\n }\n else {\n alpha = 1 - alpha;\n for (var i = 0; i < vertexCount; i++)\n deform_1[i] *= alpha;\n }\n }\n return;\n }\n var deform = spine.Utils.setArraySize(deformArray, vertexCount);\n if (time >= frames[frames.length - 1]) {\n var lastVertices = frameVertices[frames.length - 1];\n if (alpha == 1) {\n if (blend == MixBlend.add) {\n var vertexAttachment = slotAttachment;\n if (vertexAttachment.bones == null) {\n var setupVertices = vertexAttachment.vertices;\n for (var i_1 = 0; i_1 < vertexCount; i_1++) {\n deform[i_1] += lastVertices[i_1] - setupVertices[i_1];\n }\n }\n else {\n for (var i_2 = 0; i_2 < vertexCount; i_2++)\n deform[i_2] += lastVertices[i_2];\n }\n }\n else {\n spine.Utils.arrayCopy(lastVertices, 0, deform, 0, vertexCount);\n }\n }\n else {\n switch (blend) {\n case MixBlend.setup: {\n var vertexAttachment_1 = slotAttachment;\n if (vertexAttachment_1.bones == null) {\n var setupVertices = vertexAttachment_1.vertices;\n for (var i_3 = 0; i_3 < vertexCount; i_3++) {\n var setup = setupVertices[i_3];\n deform[i_3] = setup + (lastVertices[i_3] - setup) * alpha;\n }\n }\n else {\n for (var i_4 = 0; i_4 < vertexCount; i_4++)\n deform[i_4] = lastVertices[i_4] * alpha;\n }\n break;\n }\n case MixBlend.first:\n case MixBlend.replace:\n for (var i_5 = 0; i_5 < vertexCount; i_5++)\n deform[i_5] += (lastVertices[i_5] - deform[i_5]) * alpha;\n case MixBlend.add:\n var vertexAttachment = slotAttachment;\n if (vertexAttachment.bones == null) {\n var setupVertices = vertexAttachment.vertices;\n for (var i_6 = 0; i_6 < vertexCount; i_6++) {\n deform[i_6] += (lastVertices[i_6] - setupVertices[i_6]) * alpha;\n }\n }\n else {\n for (var i_7 = 0; i_7 < vertexCount; i_7++)\n deform[i_7] += lastVertices[i_7] * alpha;\n }\n }\n }\n return;\n }\n var frame = Animation.binarySearch(frames, time);\n var prevVertices = frameVertices[frame - 1];\n var nextVertices = frameVertices[frame];\n var frameTime = frames[frame];\n var percent = this.getCurvePercent(frame - 1, 1 - (time - frameTime) / (frames[frame - 1] - frameTime));\n if (alpha == 1) {\n if (blend == MixBlend.add) {\n var vertexAttachment = slotAttachment;\n if (vertexAttachment.bones == null) {\n var setupVertices = vertexAttachment.vertices;\n for (var i_8 = 0; i_8 < vertexCount; i_8++) {\n var prev = prevVertices[i_8];\n deform[i_8] += prev + (nextVertices[i_8] - prev) * percent - setupVertices[i_8];\n }\n }\n else {\n for (var i_9 = 0; i_9 < vertexCount; i_9++) {\n var prev = prevVertices[i_9];\n deform[i_9] += prev + (nextVertices[i_9] - prev) * percent;\n }\n }\n }\n else {\n for (var i_10 = 0; i_10 < vertexCount; i_10++) {\n var prev = prevVertices[i_10];\n deform[i_10] = prev + (nextVertices[i_10] - prev) * percent;\n }\n }\n }\n else {\n switch (blend) {\n case MixBlend.setup: {\n var vertexAttachment_2 = slotAttachment;\n if (vertexAttachment_2.bones == null) {\n var setupVertices = vertexAttachment_2.vertices;\n for (var i_11 = 0; i_11 < vertexCount; i_11++) {\n var prev = prevVertices[i_11], setup = setupVertices[i_11];\n deform[i_11] = setup + (prev + (nextVertices[i_11] - prev) * percent - setup) * alpha;\n }\n }\n else {\n for (var i_12 = 0; i_12 < vertexCount; i_12++) {\n var prev = prevVertices[i_12];\n deform[i_12] = (prev + (nextVertices[i_12] - prev) * percent) * alpha;\n }\n }\n break;\n }\n case MixBlend.first:\n case MixBlend.replace:\n for (var i_13 = 0; i_13 < vertexCount; i_13++) {\n var prev = prevVertices[i_13];\n deform[i_13] += (prev + (nextVertices[i_13] - prev) * percent - deform[i_13]) * alpha;\n }\n break;\n case MixBlend.add:\n var vertexAttachment = slotAttachment;\n if (vertexAttachment.bones == null) {\n var setupVertices = vertexAttachment.vertices;\n for (var i_14 = 0; i_14 < vertexCount; i_14++) {\n var prev = prevVertices[i_14];\n deform[i_14] += (prev + (nextVertices[i_14] - prev) * percent - setupVertices[i_14]) * alpha;\n }\n }\n else {\n for (var i_15 = 0; i_15 < vertexCount; i_15++) {\n var prev = prevVertices[i_15];\n deform[i_15] += (prev + (nextVertices[i_15] - prev) * percent) * alpha;\n }\n }\n }\n }\n };\n return DeformTimeline;\n }(CurveTimeline));\n spine.DeformTimeline = DeformTimeline;\n var EventTimeline = (function () {\n function EventTimeline(frameCount) {\n this.frames = spine.Utils.newFloatArray(frameCount);\n this.events = new Array(frameCount);\n }\n EventTimeline.prototype.getPropertyId = function () {\n return TimelineType.event << 24;\n };\n EventTimeline.prototype.getFrameCount = function () {\n return this.frames.length;\n };\n EventTimeline.prototype.setFrame = function (frameIndex, event) {\n this.frames[frameIndex] = event.time;\n this.events[frameIndex] = event;\n };\n EventTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n if (firedEvents == null)\n return;\n var frames = this.frames;\n var frameCount = this.frames.length;\n if (lastTime > time) {\n this.apply(skeleton, lastTime, Number.MAX_VALUE, firedEvents, alpha, blend, direction);\n lastTime = -1;\n }\n else if (lastTime >= frames[frameCount - 1])\n return;\n if (time < frames[0])\n return;\n var frame = 0;\n if (lastTime < frames[0])\n frame = 0;\n else {\n frame = Animation.binarySearch(frames, lastTime);\n var frameTime = frames[frame];\n while (frame > 0) {\n if (frames[frame - 1] != frameTime)\n break;\n frame--;\n }\n }\n for (; frame < frameCount && time >= frames[frame]; frame++)\n firedEvents.push(this.events[frame]);\n };\n return EventTimeline;\n }());\n spine.EventTimeline = EventTimeline;\n var DrawOrderTimeline = (function () {\n function DrawOrderTimeline(frameCount) {\n this.frames = spine.Utils.newFloatArray(frameCount);\n this.drawOrders = new Array(frameCount);\n }\n DrawOrderTimeline.prototype.getPropertyId = function () {\n return TimelineType.drawOrder << 24;\n };\n DrawOrderTimeline.prototype.getFrameCount = function () {\n return this.frames.length;\n };\n DrawOrderTimeline.prototype.setFrame = function (frameIndex, time, drawOrder) {\n this.frames[frameIndex] = time;\n this.drawOrders[frameIndex] = drawOrder;\n };\n DrawOrderTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n var drawOrder = skeleton.drawOrder;\n var slots = skeleton.slots;\n if (direction == MixDirection.mixOut && blend == MixBlend.setup) {\n spine.Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length);\n return;\n }\n var frames = this.frames;\n if (time < frames[0]) {\n if (blend == MixBlend.setup || blend == MixBlend.first)\n spine.Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length);\n return;\n }\n var frame = 0;\n if (time >= frames[frames.length - 1])\n frame = frames.length - 1;\n else\n frame = Animation.binarySearch(frames, time) - 1;\n var drawOrderToSetupIndex = this.drawOrders[frame];\n if (drawOrderToSetupIndex == null)\n spine.Utils.arrayCopy(slots, 0, drawOrder, 0, slots.length);\n else {\n for (var i = 0, n = drawOrderToSetupIndex.length; i < n; i++)\n drawOrder[i] = slots[drawOrderToSetupIndex[i]];\n }\n };\n return DrawOrderTimeline;\n }());\n spine.DrawOrderTimeline = DrawOrderTimeline;\n var IkConstraintTimeline = (function (_super) {\n __extends(IkConstraintTimeline, _super);\n function IkConstraintTimeline(frameCount) {\n var _this = _super.call(this, frameCount) || this;\n _this.frames = spine.Utils.newFloatArray(frameCount * IkConstraintTimeline.ENTRIES);\n return _this;\n }\n IkConstraintTimeline.prototype.getPropertyId = function () {\n return (TimelineType.ikConstraint << 24) + this.ikConstraintIndex;\n };\n IkConstraintTimeline.prototype.setFrame = function (frameIndex, time, mix, softness, bendDirection, compress, stretch) {\n frameIndex *= IkConstraintTimeline.ENTRIES;\n this.frames[frameIndex] = time;\n this.frames[frameIndex + IkConstraintTimeline.MIX] = mix;\n this.frames[frameIndex + IkConstraintTimeline.SOFTNESS] = softness;\n this.frames[frameIndex + IkConstraintTimeline.BEND_DIRECTION] = bendDirection;\n this.frames[frameIndex + IkConstraintTimeline.COMPRESS] = compress ? 1 : 0;\n this.frames[frameIndex + IkConstraintTimeline.STRETCH] = stretch ? 1 : 0;\n };\n IkConstraintTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n var frames = this.frames;\n var constraint = skeleton.ikConstraints[this.ikConstraintIndex];\n if (!constraint.active)\n return;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n constraint.mix = constraint.data.mix;\n constraint.softness = constraint.data.softness;\n constraint.bendDirection = constraint.data.bendDirection;\n constraint.compress = constraint.data.compress;\n constraint.stretch = constraint.data.stretch;\n return;\n case MixBlend.first:\n constraint.mix += (constraint.data.mix - constraint.mix) * alpha;\n constraint.softness += (constraint.data.softness - constraint.softness) * alpha;\n constraint.bendDirection = constraint.data.bendDirection;\n constraint.compress = constraint.data.compress;\n constraint.stretch = constraint.data.stretch;\n }\n return;\n }\n if (time >= frames[frames.length - IkConstraintTimeline.ENTRIES]) {\n if (blend == MixBlend.setup) {\n constraint.mix = constraint.data.mix + (frames[frames.length + IkConstraintTimeline.PREV_MIX] - constraint.data.mix) * alpha;\n constraint.softness = constraint.data.softness\n + (frames[frames.length + IkConstraintTimeline.PREV_SOFTNESS] - constraint.data.softness) * alpha;\n if (direction == MixDirection.mixOut) {\n constraint.bendDirection = constraint.data.bendDirection;\n constraint.compress = constraint.data.compress;\n constraint.stretch = constraint.data.stretch;\n }\n else {\n constraint.bendDirection = frames[frames.length + IkConstraintTimeline.PREV_BEND_DIRECTION];\n constraint.compress = frames[frames.length + IkConstraintTimeline.PREV_COMPRESS] != 0;\n constraint.stretch = frames[frames.length + IkConstraintTimeline.PREV_STRETCH] != 0;\n }\n }\n else {\n constraint.mix += (frames[frames.length + IkConstraintTimeline.PREV_MIX] - constraint.mix) * alpha;\n constraint.softness += (frames[frames.length + IkConstraintTimeline.PREV_SOFTNESS] - constraint.softness) * alpha;\n if (direction == MixDirection.mixIn) {\n constraint.bendDirection = frames[frames.length + IkConstraintTimeline.PREV_BEND_DIRECTION];\n constraint.compress = frames[frames.length + IkConstraintTimeline.PREV_COMPRESS] != 0;\n constraint.stretch = frames[frames.length + IkConstraintTimeline.PREV_STRETCH] != 0;\n }\n }\n return;\n }\n var frame = Animation.binarySearch(frames, time, IkConstraintTimeline.ENTRIES);\n var mix = frames[frame + IkConstraintTimeline.PREV_MIX];\n var softness = frames[frame + IkConstraintTimeline.PREV_SOFTNESS];\n var frameTime = frames[frame];\n var percent = this.getCurvePercent(frame / IkConstraintTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + IkConstraintTimeline.PREV_TIME] - frameTime));\n if (blend == MixBlend.setup) {\n constraint.mix = constraint.data.mix + (mix + (frames[frame + IkConstraintTimeline.MIX] - mix) * percent - constraint.data.mix) * alpha;\n constraint.softness = constraint.data.softness\n + (softness + (frames[frame + IkConstraintTimeline.SOFTNESS] - softness) * percent - constraint.data.softness) * alpha;\n if (direction == MixDirection.mixOut) {\n constraint.bendDirection = constraint.data.bendDirection;\n constraint.compress = constraint.data.compress;\n constraint.stretch = constraint.data.stretch;\n }\n else {\n constraint.bendDirection = frames[frame + IkConstraintTimeline.PREV_BEND_DIRECTION];\n constraint.compress = frames[frame + IkConstraintTimeline.PREV_COMPRESS] != 0;\n constraint.stretch = frames[frame + IkConstraintTimeline.PREV_STRETCH] != 0;\n }\n }\n else {\n constraint.mix += (mix + (frames[frame + IkConstraintTimeline.MIX] - mix) * percent - constraint.mix) * alpha;\n constraint.softness += (softness + (frames[frame + IkConstraintTimeline.SOFTNESS] - softness) * percent - constraint.softness) * alpha;\n if (direction == MixDirection.mixIn) {\n constraint.bendDirection = frames[frame + IkConstraintTimeline.PREV_BEND_DIRECTION];\n constraint.compress = frames[frame + IkConstraintTimeline.PREV_COMPRESS] != 0;\n constraint.stretch = frames[frame + IkConstraintTimeline.PREV_STRETCH] != 0;\n }\n }\n };\n IkConstraintTimeline.ENTRIES = 6;\n IkConstraintTimeline.PREV_TIME = -6;\n IkConstraintTimeline.PREV_MIX = -5;\n IkConstraintTimeline.PREV_SOFTNESS = -4;\n IkConstraintTimeline.PREV_BEND_DIRECTION = -3;\n IkConstraintTimeline.PREV_COMPRESS = -2;\n IkConstraintTimeline.PREV_STRETCH = -1;\n IkConstraintTimeline.MIX = 1;\n IkConstraintTimeline.SOFTNESS = 2;\n IkConstraintTimeline.BEND_DIRECTION = 3;\n IkConstraintTimeline.COMPRESS = 4;\n IkConstraintTimeline.STRETCH = 5;\n return IkConstraintTimeline;\n }(CurveTimeline));\n spine.IkConstraintTimeline = IkConstraintTimeline;\n var TransformConstraintTimeline = (function (_super) {\n __extends(TransformConstraintTimeline, _super);\n function TransformConstraintTimeline(frameCount) {\n var _this = _super.call(this, frameCount) || this;\n _this.frames = spine.Utils.newFloatArray(frameCount * TransformConstraintTimeline.ENTRIES);\n return _this;\n }\n TransformConstraintTimeline.prototype.getPropertyId = function () {\n return (TimelineType.transformConstraint << 24) + this.transformConstraintIndex;\n };\n TransformConstraintTimeline.prototype.setFrame = function (frameIndex, time, rotateMix, translateMix, scaleMix, shearMix) {\n frameIndex *= TransformConstraintTimeline.ENTRIES;\n this.frames[frameIndex] = time;\n this.frames[frameIndex + TransformConstraintTimeline.ROTATE] = rotateMix;\n this.frames[frameIndex + TransformConstraintTimeline.TRANSLATE] = translateMix;\n this.frames[frameIndex + TransformConstraintTimeline.SCALE] = scaleMix;\n this.frames[frameIndex + TransformConstraintTimeline.SHEAR] = shearMix;\n };\n TransformConstraintTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n var frames = this.frames;\n var constraint = skeleton.transformConstraints[this.transformConstraintIndex];\n if (!constraint.active)\n return;\n if (time < frames[0]) {\n var data = constraint.data;\n switch (blend) {\n case MixBlend.setup:\n constraint.rotateMix = data.rotateMix;\n constraint.translateMix = data.translateMix;\n constraint.scaleMix = data.scaleMix;\n constraint.shearMix = data.shearMix;\n return;\n case MixBlend.first:\n constraint.rotateMix += (data.rotateMix - constraint.rotateMix) * alpha;\n constraint.translateMix += (data.translateMix - constraint.translateMix) * alpha;\n constraint.scaleMix += (data.scaleMix - constraint.scaleMix) * alpha;\n constraint.shearMix += (data.shearMix - constraint.shearMix) * alpha;\n }\n return;\n }\n var rotate = 0, translate = 0, scale = 0, shear = 0;\n if (time >= frames[frames.length - TransformConstraintTimeline.ENTRIES]) {\n var i = frames.length;\n rotate = frames[i + TransformConstraintTimeline.PREV_ROTATE];\n translate = frames[i + TransformConstraintTimeline.PREV_TRANSLATE];\n scale = frames[i + TransformConstraintTimeline.PREV_SCALE];\n shear = frames[i + TransformConstraintTimeline.PREV_SHEAR];\n }\n else {\n var frame = Animation.binarySearch(frames, time, TransformConstraintTimeline.ENTRIES);\n rotate = frames[frame + TransformConstraintTimeline.PREV_ROTATE];\n translate = frames[frame + TransformConstraintTimeline.PREV_TRANSLATE];\n scale = frames[frame + TransformConstraintTimeline.PREV_SCALE];\n shear = frames[frame + TransformConstraintTimeline.PREV_SHEAR];\n var frameTime = frames[frame];\n var percent = this.getCurvePercent(frame / TransformConstraintTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + TransformConstraintTimeline.PREV_TIME] - frameTime));\n rotate += (frames[frame + TransformConstraintTimeline.ROTATE] - rotate) * percent;\n translate += (frames[frame + TransformConstraintTimeline.TRANSLATE] - translate) * percent;\n scale += (frames[frame + TransformConstraintTimeline.SCALE] - scale) * percent;\n shear += (frames[frame + TransformConstraintTimeline.SHEAR] - shear) * percent;\n }\n if (blend == MixBlend.setup) {\n var data = constraint.data;\n constraint.rotateMix = data.rotateMix + (rotate - data.rotateMix) * alpha;\n constraint.translateMix = data.translateMix + (translate - data.translateMix) * alpha;\n constraint.scaleMix = data.scaleMix + (scale - data.scaleMix) * alpha;\n constraint.shearMix = data.shearMix + (shear - data.shearMix) * alpha;\n }\n else {\n constraint.rotateMix += (rotate - constraint.rotateMix) * alpha;\n constraint.translateMix += (translate - constraint.translateMix) * alpha;\n constraint.scaleMix += (scale - constraint.scaleMix) * alpha;\n constraint.shearMix += (shear - constraint.shearMix) * alpha;\n }\n };\n TransformConstraintTimeline.ENTRIES = 5;\n TransformConstraintTimeline.PREV_TIME = -5;\n TransformConstraintTimeline.PREV_ROTATE = -4;\n TransformConstraintTimeline.PREV_TRANSLATE = -3;\n TransformConstraintTimeline.PREV_SCALE = -2;\n TransformConstraintTimeline.PREV_SHEAR = -1;\n TransformConstraintTimeline.ROTATE = 1;\n TransformConstraintTimeline.TRANSLATE = 2;\n TransformConstraintTimeline.SCALE = 3;\n TransformConstraintTimeline.SHEAR = 4;\n return TransformConstraintTimeline;\n }(CurveTimeline));\n spine.TransformConstraintTimeline = TransformConstraintTimeline;\n var PathConstraintPositionTimeline = (function (_super) {\n __extends(PathConstraintPositionTimeline, _super);\n function PathConstraintPositionTimeline(frameCount) {\n var _this = _super.call(this, frameCount) || this;\n _this.frames = spine.Utils.newFloatArray(frameCount * PathConstraintPositionTimeline.ENTRIES);\n return _this;\n }\n PathConstraintPositionTimeline.prototype.getPropertyId = function () {\n return (TimelineType.pathConstraintPosition << 24) + this.pathConstraintIndex;\n };\n PathConstraintPositionTimeline.prototype.setFrame = function (frameIndex, time, value) {\n frameIndex *= PathConstraintPositionTimeline.ENTRIES;\n this.frames[frameIndex] = time;\n this.frames[frameIndex + PathConstraintPositionTimeline.VALUE] = value;\n };\n PathConstraintPositionTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n var frames = this.frames;\n var constraint = skeleton.pathConstraints[this.pathConstraintIndex];\n if (!constraint.active)\n return;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n constraint.position = constraint.data.position;\n return;\n case MixBlend.first:\n constraint.position += (constraint.data.position - constraint.position) * alpha;\n }\n return;\n }\n var position = 0;\n if (time >= frames[frames.length - PathConstraintPositionTimeline.ENTRIES])\n position = frames[frames.length + PathConstraintPositionTimeline.PREV_VALUE];\n else {\n var frame = Animation.binarySearch(frames, time, PathConstraintPositionTimeline.ENTRIES);\n position = frames[frame + PathConstraintPositionTimeline.PREV_VALUE];\n var frameTime = frames[frame];\n var percent = this.getCurvePercent(frame / PathConstraintPositionTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PathConstraintPositionTimeline.PREV_TIME] - frameTime));\n position += (frames[frame + PathConstraintPositionTimeline.VALUE] - position) * percent;\n }\n if (blend == MixBlend.setup)\n constraint.position = constraint.data.position + (position - constraint.data.position) * alpha;\n else\n constraint.position += (position - constraint.position) * alpha;\n };\n PathConstraintPositionTimeline.ENTRIES = 2;\n PathConstraintPositionTimeline.PREV_TIME = -2;\n PathConstraintPositionTimeline.PREV_VALUE = -1;\n PathConstraintPositionTimeline.VALUE = 1;\n return PathConstraintPositionTimeline;\n }(CurveTimeline));\n spine.PathConstraintPositionTimeline = PathConstraintPositionTimeline;\n var PathConstraintSpacingTimeline = (function (_super) {\n __extends(PathConstraintSpacingTimeline, _super);\n function PathConstraintSpacingTimeline(frameCount) {\n return _super.call(this, frameCount) || this;\n }\n PathConstraintSpacingTimeline.prototype.getPropertyId = function () {\n return (TimelineType.pathConstraintSpacing << 24) + this.pathConstraintIndex;\n };\n PathConstraintSpacingTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n var frames = this.frames;\n var constraint = skeleton.pathConstraints[this.pathConstraintIndex];\n if (!constraint.active)\n return;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n constraint.spacing = constraint.data.spacing;\n return;\n case MixBlend.first:\n constraint.spacing += (constraint.data.spacing - constraint.spacing) * alpha;\n }\n return;\n }\n var spacing = 0;\n if (time >= frames[frames.length - PathConstraintSpacingTimeline.ENTRIES])\n spacing = frames[frames.length + PathConstraintSpacingTimeline.PREV_VALUE];\n else {\n var frame = Animation.binarySearch(frames, time, PathConstraintSpacingTimeline.ENTRIES);\n spacing = frames[frame + PathConstraintSpacingTimeline.PREV_VALUE];\n var frameTime = frames[frame];\n var percent = this.getCurvePercent(frame / PathConstraintSpacingTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PathConstraintSpacingTimeline.PREV_TIME] - frameTime));\n spacing += (frames[frame + PathConstraintSpacingTimeline.VALUE] - spacing) * percent;\n }\n if (blend == MixBlend.setup)\n constraint.spacing = constraint.data.spacing + (spacing - constraint.data.spacing) * alpha;\n else\n constraint.spacing += (spacing - constraint.spacing) * alpha;\n };\n return PathConstraintSpacingTimeline;\n }(PathConstraintPositionTimeline));\n spine.PathConstraintSpacingTimeline = PathConstraintSpacingTimeline;\n var PathConstraintMixTimeline = (function (_super) {\n __extends(PathConstraintMixTimeline, _super);\n function PathConstraintMixTimeline(frameCount) {\n var _this = _super.call(this, frameCount) || this;\n _this.frames = spine.Utils.newFloatArray(frameCount * PathConstraintMixTimeline.ENTRIES);\n return _this;\n }\n PathConstraintMixTimeline.prototype.getPropertyId = function () {\n return (TimelineType.pathConstraintMix << 24) + this.pathConstraintIndex;\n };\n PathConstraintMixTimeline.prototype.setFrame = function (frameIndex, time, rotateMix, translateMix) {\n frameIndex *= PathConstraintMixTimeline.ENTRIES;\n this.frames[frameIndex] = time;\n this.frames[frameIndex + PathConstraintMixTimeline.ROTATE] = rotateMix;\n this.frames[frameIndex + PathConstraintMixTimeline.TRANSLATE] = translateMix;\n };\n PathConstraintMixTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n var frames = this.frames;\n var constraint = skeleton.pathConstraints[this.pathConstraintIndex];\n if (!constraint.active)\n return;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n constraint.rotateMix = constraint.data.rotateMix;\n constraint.translateMix = constraint.data.translateMix;\n return;\n case MixBlend.first:\n constraint.rotateMix += (constraint.data.rotateMix - constraint.rotateMix) * alpha;\n constraint.translateMix += (constraint.data.translateMix - constraint.translateMix) * alpha;\n }\n return;\n }\n var rotate = 0, translate = 0;\n if (time >= frames[frames.length - PathConstraintMixTimeline.ENTRIES]) {\n rotate = frames[frames.length + PathConstraintMixTimeline.PREV_ROTATE];\n translate = frames[frames.length + PathConstraintMixTimeline.PREV_TRANSLATE];\n }\n else {\n var frame = Animation.binarySearch(frames, time, PathConstraintMixTimeline.ENTRIES);\n rotate = frames[frame + PathConstraintMixTimeline.PREV_ROTATE];\n translate = frames[frame + PathConstraintMixTimeline.PREV_TRANSLATE];\n var frameTime = frames[frame];\n var percent = this.getCurvePercent(frame / PathConstraintMixTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PathConstraintMixTimeline.PREV_TIME] - frameTime));\n rotate += (frames[frame + PathConstraintMixTimeline.ROTATE] - rotate) * percent;\n translate += (frames[frame + PathConstraintMixTimeline.TRANSLATE] - translate) * percent;\n }\n if (blend == MixBlend.setup) {\n constraint.rotateMix = constraint.data.rotateMix + (rotate - constraint.data.rotateMix) * alpha;\n constraint.translateMix = constraint.data.translateMix + (translate - constraint.data.translateMix) * alpha;\n }\n else {\n constraint.rotateMix += (rotate - constraint.rotateMix) * alpha;\n constraint.translateMix += (translate - constraint.translateMix) * alpha;\n }\n };\n PathConstraintMixTimeline.ENTRIES = 3;\n PathConstraintMixTimeline.PREV_TIME = -3;\n PathConstraintMixTimeline.PREV_ROTATE = -2;\n PathConstraintMixTimeline.PREV_TRANSLATE = -1;\n PathConstraintMixTimeline.ROTATE = 1;\n PathConstraintMixTimeline.TRANSLATE = 2;\n return PathConstraintMixTimeline;\n }(CurveTimeline));\n spine.PathConstraintMixTimeline = PathConstraintMixTimeline;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var AnimationState = (function () {\n function AnimationState(data) {\n this.tracks = new Array();\n this.timeScale = 1;\n this.events = new Array();\n this.listeners = new Array();\n this.queue = new EventQueue(this);\n this.propertyIDs = new spine.IntSet();\n this.animationsChanged = false;\n this.trackEntryPool = new spine.Pool(function () { return new TrackEntry(); });\n this.data = data;\n }\n AnimationState.prototype.update = function (delta) {\n delta *= this.timeScale;\n var tracks = this.tracks;\n for (var i = 0, n = tracks.length; i < n; i++) {\n var current = tracks[i];\n if (current == null)\n continue;\n current.animationLast = current.nextAnimationLast;\n current.trackLast = current.nextTrackLast;\n var currentDelta = delta * current.timeScale;\n if (current.delay > 0) {\n current.delay -= currentDelta;\n if (current.delay > 0)\n continue;\n currentDelta = -current.delay;\n current.delay = 0;\n }\n var next = current.next;\n if (next != null) {\n var nextTime = current.trackLast - next.delay;\n if (nextTime >= 0) {\n next.delay = 0;\n next.trackTime += current.timeScale == 0 ? 0 : (nextTime / current.timeScale + delta) * next.timeScale;\n current.trackTime += currentDelta;\n this.setCurrent(i, next, true);\n while (next.mixingFrom != null) {\n next.mixTime += delta;\n next = next.mixingFrom;\n }\n continue;\n }\n }\n else if (current.trackLast >= current.trackEnd && current.mixingFrom == null) {\n tracks[i] = null;\n this.queue.end(current);\n this.disposeNext(current);\n continue;\n }\n if (current.mixingFrom != null && this.updateMixingFrom(current, delta)) {\n var from = current.mixingFrom;\n current.mixingFrom = null;\n if (from != null)\n from.mixingTo = null;\n while (from != null) {\n this.queue.end(from);\n from = from.mixingFrom;\n }\n }\n current.trackTime += currentDelta;\n }\n this.queue.drain();\n };\n AnimationState.prototype.updateMixingFrom = function (to, delta) {\n var from = to.mixingFrom;\n if (from == null)\n return true;\n var finished = this.updateMixingFrom(from, delta);\n from.animationLast = from.nextAnimationLast;\n from.trackLast = from.nextTrackLast;\n if (to.mixTime > 0 && to.mixTime >= to.mixDuration) {\n if (from.totalAlpha == 0 || to.mixDuration == 0) {\n to.mixingFrom = from.mixingFrom;\n if (from.mixingFrom != null)\n from.mixingFrom.mixingTo = to;\n to.interruptAlpha = from.interruptAlpha;\n this.queue.end(from);\n }\n return finished;\n }\n from.trackTime += delta * from.timeScale;\n to.mixTime += delta;\n return false;\n };\n AnimationState.prototype.apply = function (skeleton) {\n if (skeleton == null)\n throw new Error(\"skeleton cannot be null.\");\n if (this.animationsChanged)\n this._animationsChanged();\n var events = this.events;\n var tracks = this.tracks;\n var applied = false;\n for (var i = 0, n = tracks.length; i < n; i++) {\n var current = tracks[i];\n if (current == null || current.delay > 0)\n continue;\n applied = true;\n var blend = i == 0 ? spine.MixBlend.first : current.mixBlend;\n var mix = current.alpha;\n if (current.mixingFrom != null)\n mix *= this.applyMixingFrom(current, skeleton, blend);\n else if (current.trackTime >= current.trackEnd && current.next == null)\n mix = 0;\n var animationLast = current.animationLast, animationTime = current.getAnimationTime();\n var timelineCount = current.animation.timelines.length;\n var timelines = current.animation.timelines;\n if ((i == 0 && mix == 1) || blend == spine.MixBlend.add) {\n for (var ii = 0; ii < timelineCount; ii++) {\n spine.Utils.webkit602BugfixHelper(mix, blend);\n timelines[ii].apply(skeleton, animationLast, animationTime, events, mix, blend, spine.MixDirection.mixIn);\n }\n }\n else {\n var timelineMode = current.timelineMode;\n var firstFrame = current.timelinesRotation.length == 0;\n if (firstFrame)\n spine.Utils.setArraySize(current.timelinesRotation, timelineCount << 1, null);\n var timelinesRotation = current.timelinesRotation;\n for (var ii = 0; ii < timelineCount; ii++) {\n var timeline = timelines[ii];\n var timelineBlend = (timelineMode[ii] & (AnimationState.NOT_LAST - 1)) == AnimationState.SUBSEQUENT ? blend : spine.MixBlend.setup;\n if (timeline instanceof spine.RotateTimeline) {\n this.applyRotateTimeline(timeline, skeleton, animationTime, mix, timelineBlend, timelinesRotation, ii << 1, firstFrame);\n }\n else {\n spine.Utils.webkit602BugfixHelper(mix, blend);\n timeline.apply(skeleton, animationLast, animationTime, events, mix, timelineBlend, spine.MixDirection.mixIn);\n }\n }\n }\n this.queueEvents(current, animationTime);\n events.length = 0;\n current.nextAnimationLast = animationTime;\n current.nextTrackLast = current.trackTime;\n }\n this.queue.drain();\n return applied;\n };\n AnimationState.prototype.applyMixingFrom = function (to, skeleton, blend) {\n var from = to.mixingFrom;\n if (from.mixingFrom != null)\n this.applyMixingFrom(from, skeleton, blend);\n var mix = 0;\n if (to.mixDuration == 0) {\n mix = 1;\n if (blend == spine.MixBlend.first)\n blend = spine.MixBlend.setup;\n }\n else {\n mix = to.mixTime / to.mixDuration;\n if (mix > 1)\n mix = 1;\n if (blend != spine.MixBlend.first)\n blend = from.mixBlend;\n }\n var events = mix < from.eventThreshold ? this.events : null;\n var attachments = mix < from.attachmentThreshold, drawOrder = mix < from.drawOrderThreshold;\n var animationLast = from.animationLast, animationTime = from.getAnimationTime();\n var timelineCount = from.animation.timelines.length;\n var timelines = from.animation.timelines;\n var alphaHold = from.alpha * to.interruptAlpha, alphaMix = alphaHold * (1 - mix);\n if (blend == spine.MixBlend.add) {\n for (var i = 0; i < timelineCount; i++)\n timelines[i].apply(skeleton, animationLast, animationTime, events, alphaMix, blend, spine.MixDirection.mixOut);\n }\n else {\n var timelineMode = from.timelineMode;\n var timelineHoldMix = from.timelineHoldMix;\n var firstFrame = from.timelinesRotation.length == 0;\n if (firstFrame)\n spine.Utils.setArraySize(from.timelinesRotation, timelineCount << 1, null);\n var timelinesRotation = from.timelinesRotation;\n from.totalAlpha = 0;\n for (var i = 0; i < timelineCount; i++) {\n var timeline = timelines[i];\n var direction = spine.MixDirection.mixOut;\n var timelineBlend = void 0;\n var alpha = 0;\n switch (timelineMode[i] & (AnimationState.NOT_LAST - 1)) {\n case AnimationState.SUBSEQUENT:\n timelineBlend = blend;\n if (!attachments && timeline instanceof spine.AttachmentTimeline) {\n if ((timelineMode[i] & AnimationState.NOT_LAST) == AnimationState.NOT_LAST)\n continue;\n timelineBlend = spine.MixBlend.setup;\n }\n if (!drawOrder && timeline instanceof spine.DrawOrderTimeline)\n continue;\n alpha = alphaMix;\n break;\n case AnimationState.FIRST:\n timelineBlend = spine.MixBlend.setup;\n alpha = alphaMix;\n break;\n case AnimationState.HOLD:\n timelineBlend = spine.MixBlend.setup;\n alpha = alphaHold;\n break;\n default:\n timelineBlend = spine.MixBlend.setup;\n var holdMix = timelineHoldMix[i];\n alpha = alphaHold * Math.max(0, 1 - holdMix.mixTime / holdMix.mixDuration);\n break;\n }\n from.totalAlpha += alpha;\n if (timeline instanceof spine.RotateTimeline)\n this.applyRotateTimeline(timeline, skeleton, animationTime, alpha, timelineBlend, timelinesRotation, i << 1, firstFrame);\n else {\n spine.Utils.webkit602BugfixHelper(alpha, blend);\n if (timelineBlend == spine.MixBlend.setup) {\n if (timeline instanceof spine.AttachmentTimeline) {\n if (attachments || (timelineMode[i] & AnimationState.NOT_LAST) == AnimationState.NOT_LAST)\n direction = spine.MixDirection.mixIn;\n }\n else if (timeline instanceof spine.DrawOrderTimeline) {\n if (drawOrder)\n direction = spine.MixDirection.mixIn;\n }\n }\n timeline.apply(skeleton, animationLast, animationTime, events, alpha, timelineBlend, direction);\n }\n }\n }\n if (to.mixDuration > 0)\n this.queueEvents(from, animationTime);\n this.events.length = 0;\n from.nextAnimationLast = animationTime;\n from.nextTrackLast = from.trackTime;\n return mix;\n };\n AnimationState.prototype.applyRotateTimeline = function (timeline, skeleton, time, alpha, blend, timelinesRotation, i, firstFrame) {\n if (firstFrame)\n timelinesRotation[i] = 0;\n if (alpha == 1) {\n timeline.apply(skeleton, 0, time, null, 1, blend, spine.MixDirection.mixIn);\n return;\n }\n var rotateTimeline = timeline;\n var frames = rotateTimeline.frames;\n var bone = skeleton.bones[rotateTimeline.boneIndex];\n if (!bone.active)\n return;\n var r1 = 0, r2 = 0;\n if (time < frames[0]) {\n switch (blend) {\n case spine.MixBlend.setup:\n bone.rotation = bone.data.rotation;\n default:\n return;\n case spine.MixBlend.first:\n r1 = bone.rotation;\n r2 = bone.data.rotation;\n }\n }\n else {\n r1 = blend == spine.MixBlend.setup ? bone.data.rotation : bone.rotation;\n if (time >= frames[frames.length - spine.RotateTimeline.ENTRIES])\n r2 = bone.data.rotation + frames[frames.length + spine.RotateTimeline.PREV_ROTATION];\n else {\n var frame = spine.Animation.binarySearch(frames, time, spine.RotateTimeline.ENTRIES);\n var prevRotation = frames[frame + spine.RotateTimeline.PREV_ROTATION];\n var frameTime = frames[frame];\n var percent = rotateTimeline.getCurvePercent((frame >> 1) - 1, 1 - (time - frameTime) / (frames[frame + spine.RotateTimeline.PREV_TIME] - frameTime));\n r2 = frames[frame + spine.RotateTimeline.ROTATION] - prevRotation;\n r2 -= (16384 - ((16384.499999999996 - r2 / 360) | 0)) * 360;\n r2 = prevRotation + r2 * percent + bone.data.rotation;\n r2 -= (16384 - ((16384.499999999996 - r2 / 360) | 0)) * 360;\n }\n }\n var total = 0, diff = r2 - r1;\n diff -= (16384 - ((16384.499999999996 - diff / 360) | 0)) * 360;\n if (diff == 0) {\n total = timelinesRotation[i];\n }\n else {\n var lastTotal = 0, lastDiff = 0;\n if (firstFrame) {\n lastTotal = 0;\n lastDiff = diff;\n }\n else {\n lastTotal = timelinesRotation[i];\n lastDiff = timelinesRotation[i + 1];\n }\n var current = diff > 0, dir = lastTotal >= 0;\n if (spine.MathUtils.signum(lastDiff) != spine.MathUtils.signum(diff) && Math.abs(lastDiff) <= 90) {\n if (Math.abs(lastTotal) > 180)\n lastTotal += 360 * spine.MathUtils.signum(lastTotal);\n dir = current;\n }\n total = diff + lastTotal - lastTotal % 360;\n if (dir != current)\n total += 360 * spine.MathUtils.signum(lastTotal);\n timelinesRotation[i] = total;\n }\n timelinesRotation[i + 1] = diff;\n r1 += total * alpha;\n bone.rotation = r1 - (16384 - ((16384.499999999996 - r1 / 360) | 0)) * 360;\n };\n AnimationState.prototype.queueEvents = function (entry, animationTime) {\n var animationStart = entry.animationStart, animationEnd = entry.animationEnd;\n var duration = animationEnd - animationStart;\n var trackLastWrapped = entry.trackLast % duration;\n var events = this.events;\n var i = 0, n = events.length;\n for (; i < n; i++) {\n var event_1 = events[i];\n if (event_1.time < trackLastWrapped)\n break;\n if (event_1.time > animationEnd)\n continue;\n this.queue.event(entry, event_1);\n }\n var complete = false;\n if (entry.loop)\n complete = duration == 0 || trackLastWrapped > entry.trackTime % duration;\n else\n complete = animationTime >= animationEnd && entry.animationLast < animationEnd;\n if (complete)\n this.queue.complete(entry);\n for (; i < n; i++) {\n var event_2 = events[i];\n if (event_2.time < animationStart)\n continue;\n this.queue.event(entry, events[i]);\n }\n };\n AnimationState.prototype.clearTracks = function () {\n var oldDrainDisabled = this.queue.drainDisabled;\n this.queue.drainDisabled = true;\n for (var i = 0, n = this.tracks.length; i < n; i++)\n this.clearTrack(i);\n this.tracks.length = 0;\n this.queue.drainDisabled = oldDrainDisabled;\n this.queue.drain();\n };\n AnimationState.prototype.clearTrack = function (trackIndex) {\n if (trackIndex >= this.tracks.length)\n return;\n var current = this.tracks[trackIndex];\n if (current == null)\n return;\n this.queue.end(current);\n this.disposeNext(current);\n var entry = current;\n while (true) {\n var from = entry.mixingFrom;\n if (from == null)\n break;\n this.queue.end(from);\n entry.mixingFrom = null;\n entry.mixingTo = null;\n entry = from;\n }\n this.tracks[current.trackIndex] = null;\n this.queue.drain();\n };\n AnimationState.prototype.setCurrent = function (index, current, interrupt) {\n var from = this.expandToIndex(index);\n this.tracks[index] = current;\n if (from != null) {\n if (interrupt)\n this.queue.interrupt(from);\n current.mixingFrom = from;\n from.mixingTo = current;\n current.mixTime = 0;\n if (from.mixingFrom != null && from.mixDuration > 0)\n current.interruptAlpha *= Math.min(1, from.mixTime / from.mixDuration);\n from.timelinesRotation.length = 0;\n }\n this.queue.start(current);\n };\n AnimationState.prototype.setAnimation = function (trackIndex, animationName, loop) {\n var animation = this.data.skeletonData.findAnimation(animationName);\n if (animation == null)\n throw new Error(\"Animation not found: \" + animationName);\n return this.setAnimationWith(trackIndex, animation, loop);\n };\n AnimationState.prototype.setAnimationWith = function (trackIndex, animation, loop) {\n if (animation == null)\n throw new Error(\"animation cannot be null.\");\n var interrupt = true;\n var current = this.expandToIndex(trackIndex);\n if (current != null) {\n if (current.nextTrackLast == -1) {\n this.tracks[trackIndex] = current.mixingFrom;\n this.queue.interrupt(current);\n this.queue.end(current);\n this.disposeNext(current);\n current = current.mixingFrom;\n interrupt = false;\n }\n else\n this.disposeNext(current);\n }\n var entry = this.trackEntry(trackIndex, animation, loop, current);\n this.setCurrent(trackIndex, entry, interrupt);\n this.queue.drain();\n return entry;\n };\n AnimationState.prototype.addAnimation = function (trackIndex, animationName, loop, delay) {\n var animation = this.data.skeletonData.findAnimation(animationName);\n if (animation == null)\n throw new Error(\"Animation not found: \" + animationName);\n return this.addAnimationWith(trackIndex, animation, loop, delay);\n };\n AnimationState.prototype.addAnimationWith = function (trackIndex, animation, loop, delay) {\n if (animation == null)\n throw new Error(\"animation cannot be null.\");\n var last = this.expandToIndex(trackIndex);\n if (last != null) {\n while (last.next != null)\n last = last.next;\n }\n var entry = this.trackEntry(trackIndex, animation, loop, last);\n if (last == null) {\n this.setCurrent(trackIndex, entry, true);\n this.queue.drain();\n }\n else {\n last.next = entry;\n if (delay <= 0) {\n var duration = last.animationEnd - last.animationStart;\n if (duration != 0) {\n if (last.loop)\n delay += duration * (1 + ((last.trackTime / duration) | 0));\n else\n delay += Math.max(duration, last.trackTime);\n delay -= this.data.getMix(last.animation, animation);\n }\n else\n delay = last.trackTime;\n }\n }\n entry.delay = delay;\n return entry;\n };\n AnimationState.prototype.setEmptyAnimation = function (trackIndex, mixDuration) {\n var entry = this.setAnimationWith(trackIndex, AnimationState.emptyAnimation, false);\n entry.mixDuration = mixDuration;\n entry.trackEnd = mixDuration;\n return entry;\n };\n AnimationState.prototype.addEmptyAnimation = function (trackIndex, mixDuration, delay) {\n if (delay <= 0)\n delay -= mixDuration;\n var entry = this.addAnimationWith(trackIndex, AnimationState.emptyAnimation, false, delay);\n entry.mixDuration = mixDuration;\n entry.trackEnd = mixDuration;\n return entry;\n };\n AnimationState.prototype.setEmptyAnimations = function (mixDuration) {\n var oldDrainDisabled = this.queue.drainDisabled;\n this.queue.drainDisabled = true;\n for (var i = 0, n = this.tracks.length; i < n; i++) {\n var current = this.tracks[i];\n if (current != null)\n this.setEmptyAnimation(current.trackIndex, mixDuration);\n }\n this.queue.drainDisabled = oldDrainDisabled;\n this.queue.drain();\n };\n AnimationState.prototype.expandToIndex = function (index) {\n if (index < this.tracks.length)\n return this.tracks[index];\n spine.Utils.ensureArrayCapacity(this.tracks, index + 1, null);\n this.tracks.length = index + 1;\n return null;\n };\n AnimationState.prototype.trackEntry = function (trackIndex, animation, loop, last) {\n var entry = this.trackEntryPool.obtain();\n entry.trackIndex = trackIndex;\n entry.animation = animation;\n entry.loop = loop;\n entry.holdPrevious = false;\n entry.eventThreshold = 0;\n entry.attachmentThreshold = 0;\n entry.drawOrderThreshold = 0;\n entry.animationStart = 0;\n entry.animationEnd = animation.duration;\n entry.animationLast = -1;\n entry.nextAnimationLast = -1;\n entry.delay = 0;\n entry.trackTime = 0;\n entry.trackLast = -1;\n entry.nextTrackLast = -1;\n entry.trackEnd = Number.MAX_VALUE;\n entry.timeScale = 1;\n entry.alpha = 1;\n entry.interruptAlpha = 1;\n entry.mixTime = 0;\n entry.mixDuration = last == null ? 0 : this.data.getMix(last.animation, animation);\n return entry;\n };\n AnimationState.prototype.disposeNext = function (entry) {\n var next = entry.next;\n while (next != null) {\n this.queue.dispose(next);\n next = next.next;\n }\n entry.next = null;\n };\n AnimationState.prototype._animationsChanged = function () {\n this.animationsChanged = false;\n this.propertyIDs.clear();\n for (var i = 0, n = this.tracks.length; i < n; i++) {\n var entry = this.tracks[i];\n if (entry == null)\n continue;\n while (entry.mixingFrom != null)\n entry = entry.mixingFrom;\n do {\n if (entry.mixingFrom == null || entry.mixBlend != spine.MixBlend.add)\n this.computeHold(entry);\n entry = entry.mixingTo;\n } while (entry != null);\n }\n this.propertyIDs.clear();\n for (var i = this.tracks.length - 1; i >= 0; i--) {\n var entry = this.tracks[i];\n while (entry != null) {\n this.computeNotLast(entry);\n entry = entry.mixingFrom;\n }\n }\n };\n AnimationState.prototype.computeHold = function (entry) {\n var to = entry.mixingTo;\n var timelines = entry.animation.timelines;\n var timelinesCount = entry.animation.timelines.length;\n var timelineMode = spine.Utils.setArraySize(entry.timelineMode, timelinesCount);\n entry.timelineHoldMix.length = 0;\n var timelineDipMix = spine.Utils.setArraySize(entry.timelineHoldMix, timelinesCount);\n var propertyIDs = this.propertyIDs;\n if (to != null && to.holdPrevious) {\n for (var i = 0; i < timelinesCount; i++) {\n propertyIDs.add(timelines[i].getPropertyId());\n timelineMode[i] = AnimationState.HOLD;\n }\n return;\n }\n outer: for (var i = 0; i < timelinesCount; i++) {\n var timeline = timelines[i];\n var id = timeline.getPropertyId();\n if (!propertyIDs.add(id))\n timelineMode[i] = AnimationState.SUBSEQUENT;\n else if (to == null || timeline instanceof spine.AttachmentTimeline || timeline instanceof spine.DrawOrderTimeline\n || timeline instanceof spine.EventTimeline || !to.animation.hasTimeline(id)) {\n timelineMode[i] = AnimationState.FIRST;\n }\n else {\n for (var next = to.mixingTo; next != null; next = next.mixingTo) {\n if (next.animation.hasTimeline(id))\n continue;\n if (entry.mixDuration > 0) {\n timelineMode[i] = AnimationState.HOLD_MIX;\n timelineDipMix[i] = next;\n continue outer;\n }\n break;\n }\n timelineMode[i] = AnimationState.HOLD;\n }\n }\n };\n AnimationState.prototype.computeNotLast = function (entry) {\n var timelines = entry.animation.timelines;\n var timelinesCount = entry.animation.timelines.length;\n var timelineMode = entry.timelineMode;\n var propertyIDs = this.propertyIDs;\n for (var i = 0; i < timelinesCount; i++) {\n if (timelines[i] instanceof spine.AttachmentTimeline) {\n var timeline = timelines[i];\n if (!propertyIDs.add(timeline.slotIndex))\n timelineMode[i] |= AnimationState.NOT_LAST;\n }\n }\n };\n AnimationState.prototype.getCurrent = function (trackIndex) {\n if (trackIndex >= this.tracks.length)\n return null;\n return this.tracks[trackIndex];\n };\n AnimationState.prototype.addListener = function (listener) {\n if (listener == null)\n throw new Error(\"listener cannot be null.\");\n this.listeners.push(listener);\n };\n AnimationState.prototype.removeListener = function (listener) {\n var index = this.listeners.indexOf(listener);\n if (index >= 0)\n this.listeners.splice(index, 1);\n };\n AnimationState.prototype.clearListeners = function () {\n this.listeners.length = 0;\n };\n AnimationState.prototype.clearListenerNotifications = function () {\n this.queue.clear();\n };\n AnimationState.emptyAnimation = new spine.Animation(\"\", [], 0);\n AnimationState.SUBSEQUENT = 0;\n AnimationState.FIRST = 1;\n AnimationState.HOLD = 2;\n AnimationState.HOLD_MIX = 3;\n AnimationState.NOT_LAST = 4;\n return AnimationState;\n }());\n spine.AnimationState = AnimationState;\n var TrackEntry = (function () {\n function TrackEntry() {\n this.mixBlend = spine.MixBlend.replace;\n this.timelineMode = new Array();\n this.timelineHoldMix = new Array();\n this.timelinesRotation = new Array();\n }\n TrackEntry.prototype.reset = function () {\n this.next = null;\n this.mixingFrom = null;\n this.mixingTo = null;\n this.animation = null;\n this.listener = null;\n this.timelineMode.length = 0;\n this.timelineHoldMix.length = 0;\n this.timelinesRotation.length = 0;\n };\n TrackEntry.prototype.getAnimationTime = function () {\n if (this.loop) {\n var duration = this.animationEnd - this.animationStart;\n if (duration == 0)\n return this.animationStart;\n return (this.trackTime % duration) + this.animationStart;\n }\n return Math.min(this.trackTime + this.animationStart, this.animationEnd);\n };\n TrackEntry.prototype.setAnimationLast = function (animationLast) {\n this.animationLast = animationLast;\n this.nextAnimationLast = animationLast;\n };\n TrackEntry.prototype.isComplete = function () {\n return this.trackTime >= this.animationEnd - this.animationStart;\n };\n TrackEntry.prototype.resetRotationDirections = function () {\n this.timelinesRotation.length = 0;\n };\n return TrackEntry;\n }());\n spine.TrackEntry = TrackEntry;\n var EventQueue = (function () {\n function EventQueue(animState) {\n this.objects = [];\n this.drainDisabled = false;\n this.animState = animState;\n }\n EventQueue.prototype.start = function (entry) {\n this.objects.push(EventType.start);\n this.objects.push(entry);\n this.animState.animationsChanged = true;\n };\n EventQueue.prototype.interrupt = function (entry) {\n this.objects.push(EventType.interrupt);\n this.objects.push(entry);\n };\n EventQueue.prototype.end = function (entry) {\n this.objects.push(EventType.end);\n this.objects.push(entry);\n this.animState.animationsChanged = true;\n };\n EventQueue.prototype.dispose = function (entry) {\n this.objects.push(EventType.dispose);\n this.objects.push(entry);\n };\n EventQueue.prototype.complete = function (entry) {\n this.objects.push(EventType.complete);\n this.objects.push(entry);\n };\n EventQueue.prototype.event = function (entry, event) {\n this.objects.push(EventType.event);\n this.objects.push(entry);\n this.objects.push(event);\n };\n EventQueue.prototype.drain = function () {\n if (this.drainDisabled)\n return;\n this.drainDisabled = true;\n var objects = this.objects;\n var listeners = this.animState.listeners;\n for (var i = 0; i < objects.length; i += 2) {\n var type = objects[i];\n var entry = objects[i + 1];\n switch (type) {\n case EventType.start:\n if (entry.listener != null && entry.listener.start)\n entry.listener.start(entry);\n for (var ii = 0; ii < listeners.length; ii++)\n if (listeners[ii].start)\n listeners[ii].start(entry);\n break;\n case EventType.interrupt:\n if (entry.listener != null && entry.listener.interrupt)\n entry.listener.interrupt(entry);\n for (var ii = 0; ii < listeners.length; ii++)\n if (listeners[ii].interrupt)\n listeners[ii].interrupt(entry);\n break;\n case EventType.end:\n if (entry.listener != null && entry.listener.end)\n entry.listener.end(entry);\n for (var ii = 0; ii < listeners.length; ii++)\n if (listeners[ii].end)\n listeners[ii].end(entry);\n case EventType.dispose:\n if (entry.listener != null && entry.listener.dispose)\n entry.listener.dispose(entry);\n for (var ii = 0; ii < listeners.length; ii++)\n if (listeners[ii].dispose)\n listeners[ii].dispose(entry);\n this.animState.trackEntryPool.free(entry);\n break;\n case EventType.complete:\n if (entry.listener != null && entry.listener.complete)\n entry.listener.complete(entry);\n for (var ii = 0; ii < listeners.length; ii++)\n if (listeners[ii].complete)\n listeners[ii].complete(entry);\n break;\n case EventType.event:\n var event_3 = objects[i++ + 2];\n if (entry.listener != null && entry.listener.event)\n entry.listener.event(entry, event_3);\n for (var ii = 0; ii < listeners.length; ii++)\n if (listeners[ii].event)\n listeners[ii].event(entry, event_3);\n break;\n }\n }\n this.clear();\n this.drainDisabled = false;\n };\n EventQueue.prototype.clear = function () {\n this.objects.length = 0;\n };\n return EventQueue;\n }());\n spine.EventQueue = EventQueue;\n var EventType;\n (function (EventType) {\n EventType[EventType[\"start\"] = 0] = \"start\";\n EventType[EventType[\"interrupt\"] = 1] = \"interrupt\";\n EventType[EventType[\"end\"] = 2] = \"end\";\n EventType[EventType[\"dispose\"] = 3] = \"dispose\";\n EventType[EventType[\"complete\"] = 4] = \"complete\";\n EventType[EventType[\"event\"] = 5] = \"event\";\n })(EventType = spine.EventType || (spine.EventType = {}));\n var AnimationStateAdapter = (function () {\n function AnimationStateAdapter() {\n }\n AnimationStateAdapter.prototype.start = function (entry) {\n };\n AnimationStateAdapter.prototype.interrupt = function (entry) {\n };\n AnimationStateAdapter.prototype.end = function (entry) {\n };\n AnimationStateAdapter.prototype.dispose = function (entry) {\n };\n AnimationStateAdapter.prototype.complete = function (entry) {\n };\n AnimationStateAdapter.prototype.event = function (entry, event) {\n };\n return AnimationStateAdapter;\n }());\n spine.AnimationStateAdapter = AnimationStateAdapter;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var AnimationStateData = (function () {\n function AnimationStateData(skeletonData) {\n this.animationToMixTime = {};\n this.defaultMix = 0;\n if (skeletonData == null)\n throw new Error(\"skeletonData cannot be null.\");\n this.skeletonData = skeletonData;\n }\n AnimationStateData.prototype.setMix = function (fromName, toName, duration) {\n var from = this.skeletonData.findAnimation(fromName);\n if (from == null)\n throw new Error(\"Animation not found: \" + fromName);\n var to = this.skeletonData.findAnimation(toName);\n if (to == null)\n throw new Error(\"Animation not found: \" + toName);\n this.setMixWith(from, to, duration);\n };\n AnimationStateData.prototype.setMixWith = function (from, to, duration) {\n if (from == null)\n throw new Error(\"from cannot be null.\");\n if (to == null)\n throw new Error(\"to cannot be null.\");\n var key = from.name + \".\" + to.name;\n this.animationToMixTime[key] = duration;\n };\n AnimationStateData.prototype.getMix = function (from, to) {\n var key = from.name + \".\" + to.name;\n var value = this.animationToMixTime[key];\n return value === undefined ? this.defaultMix : value;\n };\n return AnimationStateData;\n }());\n spine.AnimationStateData = AnimationStateData;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var AssetManager = (function () {\n function AssetManager(textureLoader, pathPrefix) {\n if (pathPrefix === void 0) { pathPrefix = \"\"; }\n this.assets = {};\n this.errors = {};\n this.toLoad = 0;\n this.loaded = 0;\n this.textureLoader = textureLoader;\n this.pathPrefix = pathPrefix;\n }\n AssetManager.downloadText = function (url, success, error) {\n var request = new XMLHttpRequest();\n request.open(\"GET\", url, true);\n request.onload = function () {\n if (request.status == 200) {\n success(request.responseText);\n }\n else {\n error(request.status, request.responseText);\n }\n };\n request.onerror = function () {\n error(request.status, request.responseText);\n };\n request.send();\n };\n AssetManager.downloadBinary = function (url, success, error) {\n var request = new XMLHttpRequest();\n request.open(\"GET\", url, true);\n request.responseType = \"arraybuffer\";\n request.onload = function () {\n if (request.status == 200) {\n success(new Uint8Array(request.response));\n }\n else {\n error(request.status, request.responseText);\n }\n };\n request.onerror = function () {\n error(request.status, request.responseText);\n };\n request.send();\n };\n AssetManager.prototype.loadBinary = function (path, success, error) {\n var _this = this;\n if (success === void 0) { success = null; }\n if (error === void 0) { error = null; }\n path = this.pathPrefix + path;\n this.toLoad++;\n AssetManager.downloadBinary(path, function (data) {\n _this.assets[path] = data;\n if (success)\n success(path, data);\n _this.toLoad--;\n _this.loaded++;\n }, function (state, responseText) {\n _this.errors[path] = \"Couldn't load binary \" + path + \": status \" + status + \", \" + responseText;\n if (error)\n error(path, \"Couldn't load binary \" + path + \": status \" + status + \", \" + responseText);\n _this.toLoad--;\n _this.loaded++;\n });\n };\n AssetManager.prototype.loadText = function (path, success, error) {\n var _this = this;\n if (success === void 0) { success = null; }\n if (error === void 0) { error = null; }\n path = this.pathPrefix + path;\n this.toLoad++;\n AssetManager.downloadText(path, function (data) {\n _this.assets[path] = data;\n if (success)\n success(path, data);\n _this.toLoad--;\n _this.loaded++;\n }, function (state, responseText) {\n _this.errors[path] = \"Couldn't load text \" + path + \": status \" + status + \", \" + responseText;\n if (error)\n error(path, \"Couldn't load text \" + path + \": status \" + status + \", \" + responseText);\n _this.toLoad--;\n _this.loaded++;\n });\n };\n AssetManager.prototype.loadTexture = function (path, success, error) {\n var _this = this;\n if (success === void 0) { success = null; }\n if (error === void 0) { error = null; }\n path = this.pathPrefix + path;\n this.toLoad++;\n var img = new Image();\n img.crossOrigin = \"anonymous\";\n img.onload = function (ev) {\n var texture = _this.textureLoader(img);\n _this.assets[path] = texture;\n _this.toLoad--;\n _this.loaded++;\n if (success)\n success(path, img);\n };\n img.onerror = function (ev) {\n _this.errors[path] = \"Couldn't load image \" + path;\n _this.toLoad--;\n _this.loaded++;\n if (error)\n error(path, \"Couldn't load image \" + path);\n };\n img.src = path;\n };\n AssetManager.prototype.loadTextureData = function (path, data, success, error) {\n var _this = this;\n if (success === void 0) { success = null; }\n if (error === void 0) { error = null; }\n path = this.pathPrefix + path;\n this.toLoad++;\n var img = new Image();\n img.onload = function (ev) {\n var texture = _this.textureLoader(img);\n _this.assets[path] = texture;\n _this.toLoad--;\n _this.loaded++;\n if (success)\n success(path, img);\n };\n img.onerror = function (ev) {\n _this.errors[path] = \"Couldn't load image \" + path;\n _this.toLoad--;\n _this.loaded++;\n if (error)\n error(path, \"Couldn't load image \" + path);\n };\n img.src = data;\n };\n AssetManager.prototype.loadTextureAtlas = function (path, success, error) {\n var _this = this;\n if (success === void 0) { success = null; }\n if (error === void 0) { error = null; }\n var parent = path.lastIndexOf(\"/\") >= 0 ? path.substring(0, path.lastIndexOf(\"/\")) : \"\";\n path = this.pathPrefix + path;\n this.toLoad++;\n AssetManager.downloadText(path, function (atlasData) {\n var pagesLoaded = { count: 0 };\n var atlasPages = new Array();\n try {\n var atlas = new spine.TextureAtlas(atlasData, function (path) {\n atlasPages.push(parent + \"/\" + path);\n var image = document.createElement(\"img\");\n image.width = 16;\n image.height = 16;\n return new spine.FakeTexture(image);\n });\n }\n catch (e) {\n var ex = e;\n _this.errors[path] = \"Couldn't load texture atlas \" + path + \": \" + ex.message;\n if (error)\n error(path, \"Couldn't load texture atlas \" + path + \": \" + ex.message);\n _this.toLoad--;\n _this.loaded++;\n return;\n }\n var _loop_1 = function (atlasPage) {\n var pageLoadError = false;\n _this.loadTexture(atlasPage, function (imagePath, image) {\n pagesLoaded.count++;\n if (pagesLoaded.count == atlasPages.length) {\n if (!pageLoadError) {\n try {\n var atlas = new spine.TextureAtlas(atlasData, function (path) {\n return _this.get(parent + \"/\" + path);\n });\n _this.assets[path] = atlas;\n if (success)\n success(path, atlas);\n _this.toLoad--;\n _this.loaded++;\n }\n catch (e) {\n var ex = e;\n _this.errors[path] = \"Couldn't load texture atlas \" + path + \": \" + ex.message;\n if (error)\n error(path, \"Couldn't load texture atlas \" + path + \": \" + ex.message);\n _this.toLoad--;\n _this.loaded++;\n }\n }\n else {\n _this.errors[path] = \"Couldn't load texture atlas page \" + imagePath + \"} of atlas \" + path;\n if (error)\n error(path, \"Couldn't load texture atlas page \" + imagePath + \" of atlas \" + path);\n _this.toLoad--;\n _this.loaded++;\n }\n }\n }, function (imagePath, errorMessage) {\n pageLoadError = true;\n pagesLoaded.count++;\n if (pagesLoaded.count == atlasPages.length) {\n _this.errors[path] = \"Couldn't load texture atlas page \" + imagePath + \"} of atlas \" + path;\n if (error)\n error(path, \"Couldn't load texture atlas page \" + imagePath + \" of atlas \" + path);\n _this.toLoad--;\n _this.loaded++;\n }\n });\n };\n for (var _i = 0, atlasPages_1 = atlasPages; _i < atlasPages_1.length; _i++) {\n var atlasPage = atlasPages_1[_i];\n _loop_1(atlasPage);\n }\n }, function (state, responseText) {\n _this.errors[path] = \"Couldn't load texture atlas \" + path + \": status \" + status + \", \" + responseText;\n if (error)\n error(path, \"Couldn't load texture atlas \" + path + \": status \" + status + \", \" + responseText);\n _this.toLoad--;\n _this.loaded++;\n });\n };\n AssetManager.prototype.get = function (path) {\n path = this.pathPrefix + path;\n return this.assets[path];\n };\n AssetManager.prototype.remove = function (path) {\n path = this.pathPrefix + path;\n var asset = this.assets[path];\n if (asset.dispose)\n asset.dispose();\n this.assets[path] = null;\n };\n AssetManager.prototype.removeAll = function () {\n for (var key in this.assets) {\n var asset = this.assets[key];\n if (asset.dispose)\n asset.dispose();\n }\n this.assets = {};\n };\n AssetManager.prototype.isLoadingComplete = function () {\n return this.toLoad == 0;\n };\n AssetManager.prototype.getToLoad = function () {\n return this.toLoad;\n };\n AssetManager.prototype.getLoaded = function () {\n return this.loaded;\n };\n AssetManager.prototype.dispose = function () {\n this.removeAll();\n };\n AssetManager.prototype.hasErrors = function () {\n return Object.keys(this.errors).length > 0;\n };\n AssetManager.prototype.getErrors = function () {\n return this.errors;\n };\n return AssetManager;\n }());\n spine.AssetManager = AssetManager;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var AtlasAttachmentLoader = (function () {\n function AtlasAttachmentLoader(atlas) {\n this.atlas = atlas;\n }\n AtlasAttachmentLoader.prototype.newRegionAttachment = function (skin, name, path) {\n var region = this.atlas.findRegion(path);\n if (region == null) {\n // throw new Error(\"Region not found in atlas: \" + path + \" (region attachment: \" + name + \")\");\n return null;\n }\n region.renderObject = region;\n var attachment = new spine.RegionAttachment(name);\n attachment.setRegion(region);\n return attachment;\n };\n AtlasAttachmentLoader.prototype.newMeshAttachment = function (skin, name, path) {\n var region = this.atlas.findRegion(path);\n if (region == null) {\n // throw new Error(\"Region not found in atlas: \" + path + \" (mesh attachment: \" + name + \")\");\n return null;\n }\n region.renderObject = region;\n var attachment = new spine.MeshAttachment(name);\n attachment.region = region;\n return attachment;\n };\n AtlasAttachmentLoader.prototype.newBoundingBoxAttachment = function (skin, name) {\n return new spine.BoundingBoxAttachment(name);\n };\n AtlasAttachmentLoader.prototype.newPathAttachment = function (skin, name) {\n return new spine.PathAttachment(name);\n };\n AtlasAttachmentLoader.prototype.newPointAttachment = function (skin, name) {\n return new spine.PointAttachment(name);\n };\n AtlasAttachmentLoader.prototype.newClippingAttachment = function (skin, name) {\n return new spine.ClippingAttachment(name);\n };\n return AtlasAttachmentLoader;\n }());\n spine.AtlasAttachmentLoader = AtlasAttachmentLoader;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var BlendMode;\n (function (BlendMode) {\n BlendMode[BlendMode[\"Normal\"] = 0] = \"Normal\";\n BlendMode[BlendMode[\"Additive\"] = 1] = \"Additive\";\n BlendMode[BlendMode[\"Multiply\"] = 2] = \"Multiply\";\n BlendMode[BlendMode[\"Screen\"] = 3] = \"Screen\";\n })(BlendMode = spine.BlendMode || (spine.BlendMode = {}));\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var Bone = (function () {\n function Bone(data, skeleton, parent) {\n this.children = new Array();\n this.x = 0;\n this.y = 0;\n this.rotation = 0;\n this.scaleX = 0;\n this.scaleY = 0;\n this.shearX = 0;\n this.shearY = 0;\n this.ax = 0;\n this.ay = 0;\n this.arotation = 0;\n this.ascaleX = 0;\n this.ascaleY = 0;\n this.ashearX = 0;\n this.ashearY = 0;\n this.appliedValid = false;\n this.a = 0;\n this.b = 0;\n this.c = 0;\n this.d = 0;\n this.worldY = 0;\n this.worldX = 0;\n this.sorted = false;\n this.active = false;\n if (data == null)\n throw new Error(\"data cannot be null.\");\n if (skeleton == null)\n throw new Error(\"skeleton cannot be null.\");\n this.data = data;\n this.skeleton = skeleton;\n this.parent = parent;\n this.setToSetupPose();\n }\n Bone.prototype.isActive = function () {\n return this.active;\n };\n Bone.prototype.update = function () {\n this.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY);\n };\n Bone.prototype.updateWorldTransform = function () {\n this.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY);\n };\n Bone.prototype.updateWorldTransformWith = function (x, y, rotation, scaleX, scaleY, shearX, shearY) {\n this.ax = x;\n this.ay = y;\n this.arotation = rotation;\n this.ascaleX = scaleX;\n this.ascaleY = scaleY;\n this.ashearX = shearX;\n this.ashearY = shearY;\n this.appliedValid = true;\n var parent = this.parent;\n if (parent == null) {\n var skeleton = this.skeleton;\n var rotationY = rotation + 90 + shearY;\n var sx = skeleton.scaleX;\n var sy = skeleton.scaleY;\n this.a = spine.MathUtils.cosDeg(rotation + shearX) * scaleX * sx;\n this.b = spine.MathUtils.cosDeg(rotationY) * scaleY * sx;\n this.c = spine.MathUtils.sinDeg(rotation + shearX) * scaleX * sy;\n this.d = spine.MathUtils.sinDeg(rotationY) * scaleY * sy;\n this.worldX = x * sx + skeleton.x;\n this.worldY = y * sy + skeleton.y;\n return;\n }\n var pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d;\n this.worldX = pa * x + pb * y + parent.worldX;\n this.worldY = pc * x + pd * y + parent.worldY;\n switch (this.data.transformMode) {\n case spine.TransformMode.Normal: {\n var rotationY = rotation + 90 + shearY;\n var la = spine.MathUtils.cosDeg(rotation + shearX) * scaleX;\n var lb = spine.MathUtils.cosDeg(rotationY) * scaleY;\n var lc = spine.MathUtils.sinDeg(rotation + shearX) * scaleX;\n var ld = spine.MathUtils.sinDeg(rotationY) * scaleY;\n this.a = pa * la + pb * lc;\n this.b = pa * lb + pb * ld;\n this.c = pc * la + pd * lc;\n this.d = pc * lb + pd * ld;\n return;\n }\n case spine.TransformMode.OnlyTranslation: {\n var rotationY = rotation + 90 + shearY;\n this.a = spine.MathUtils.cosDeg(rotation + shearX) * scaleX;\n this.b = spine.MathUtils.cosDeg(rotationY) * scaleY;\n this.c = spine.MathUtils.sinDeg(rotation + shearX) * scaleX;\n this.d = spine.MathUtils.sinDeg(rotationY) * scaleY;\n break;\n }\n case spine.TransformMode.NoRotationOrReflection: {\n var s = pa * pa + pc * pc;\n var prx = 0;\n if (s > 0.0001) {\n s = Math.abs(pa * pd - pb * pc) / s;\n pb = pc * s;\n pd = pa * s;\n prx = Math.atan2(pc, pa) * spine.MathUtils.radDeg;\n }\n else {\n pa = 0;\n pc = 0;\n prx = 90 - Math.atan2(pd, pb) * spine.MathUtils.radDeg;\n }\n var rx = rotation + shearX - prx;\n var ry = rotation + shearY - prx + 90;\n var la = spine.MathUtils.cosDeg(rx) * scaleX;\n var lb = spine.MathUtils.cosDeg(ry) * scaleY;\n var lc = spine.MathUtils.sinDeg(rx) * scaleX;\n var ld = spine.MathUtils.sinDeg(ry) * scaleY;\n this.a = pa * la - pb * lc;\n this.b = pa * lb - pb * ld;\n this.c = pc * la + pd * lc;\n this.d = pc * lb + pd * ld;\n break;\n }\n case spine.TransformMode.NoScale:\n case spine.TransformMode.NoScaleOrReflection: {\n var cos = spine.MathUtils.cosDeg(rotation);\n var sin = spine.MathUtils.sinDeg(rotation);\n var za = (pa * cos + pb * sin) / this.skeleton.scaleX;\n var zc = (pc * cos + pd * sin) / this.skeleton.scaleY;\n var s = Math.sqrt(za * za + zc * zc);\n if (s > 0.00001)\n s = 1 / s;\n za *= s;\n zc *= s;\n s = Math.sqrt(za * za + zc * zc);\n if (this.data.transformMode == spine.TransformMode.NoScale\n && (pa * pd - pb * pc < 0) != (this.skeleton.scaleX < 0 != this.skeleton.scaleY < 0))\n s = -s;\n var r = Math.PI / 2 + Math.atan2(zc, za);\n var zb = Math.cos(r) * s;\n var zd = Math.sin(r) * s;\n var la = spine.MathUtils.cosDeg(shearX) * scaleX;\n var lb = spine.MathUtils.cosDeg(90 + shearY) * scaleY;\n var lc = spine.MathUtils.sinDeg(shearX) * scaleX;\n var ld = spine.MathUtils.sinDeg(90 + shearY) * scaleY;\n this.a = za * la + zb * lc;\n this.b = za * lb + zb * ld;\n this.c = zc * la + zd * lc;\n this.d = zc * lb + zd * ld;\n break;\n }\n }\n this.a *= this.skeleton.scaleX;\n this.b *= this.skeleton.scaleX;\n this.c *= this.skeleton.scaleY;\n this.d *= this.skeleton.scaleY;\n };\n Bone.prototype.setToSetupPose = function () {\n var data = this.data;\n this.x = data.x;\n this.y = data.y;\n this.rotation = data.rotation;\n this.scaleX = data.scaleX;\n this.scaleY = data.scaleY;\n this.shearX = data.shearX;\n this.shearY = data.shearY;\n };\n Bone.prototype.getWorldRotationX = function () {\n return Math.atan2(this.c, this.a) * spine.MathUtils.radDeg;\n };\n Bone.prototype.getWorldRotationY = function () {\n return Math.atan2(this.d, this.b) * spine.MathUtils.radDeg;\n };\n Bone.prototype.getWorldScaleX = function () {\n return Math.sqrt(this.a * this.a + this.c * this.c);\n };\n Bone.prototype.getWorldScaleY = function () {\n return Math.sqrt(this.b * this.b + this.d * this.d);\n };\n Bone.prototype.updateAppliedTransform = function () {\n this.appliedValid = true;\n var parent = this.parent;\n if (parent == null) {\n this.ax = this.worldX;\n this.ay = this.worldY;\n this.arotation = Math.atan2(this.c, this.a) * spine.MathUtils.radDeg;\n this.ascaleX = Math.sqrt(this.a * this.a + this.c * this.c);\n this.ascaleY = Math.sqrt(this.b * this.b + this.d * this.d);\n this.ashearX = 0;\n this.ashearY = Math.atan2(this.a * this.b + this.c * this.d, this.a * this.d - this.b * this.c) * spine.MathUtils.radDeg;\n return;\n }\n var pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d;\n var pid = 1 / (pa * pd - pb * pc);\n var dx = this.worldX - parent.worldX, dy = this.worldY - parent.worldY;\n this.ax = (dx * pd * pid - dy * pb * pid);\n this.ay = (dy * pa * pid - dx * pc * pid);\n var ia = pid * pd;\n var id = pid * pa;\n var ib = pid * pb;\n var ic = pid * pc;\n var ra = ia * this.a - ib * this.c;\n var rb = ia * this.b - ib * this.d;\n var rc = id * this.c - ic * this.a;\n var rd = id * this.d - ic * this.b;\n this.ashearX = 0;\n this.ascaleX = Math.sqrt(ra * ra + rc * rc);\n if (this.ascaleX > 0.0001) {\n var det = ra * rd - rb * rc;\n this.ascaleY = det / this.ascaleX;\n this.ashearY = Math.atan2(ra * rb + rc * rd, det) * spine.MathUtils.radDeg;\n this.arotation = Math.atan2(rc, ra) * spine.MathUtils.radDeg;\n }\n else {\n this.ascaleX = 0;\n this.ascaleY = Math.sqrt(rb * rb + rd * rd);\n this.ashearY = 0;\n this.arotation = 90 - Math.atan2(rd, rb) * spine.MathUtils.radDeg;\n }\n };\n Bone.prototype.worldToLocal = function (world) {\n var a = this.a, b = this.b, c = this.c, d = this.d;\n var invDet = 1 / (a * d - b * c);\n var x = world.x - this.worldX, y = world.y - this.worldY;\n world.x = (x * d * invDet - y * b * invDet);\n world.y = (y * a * invDet - x * c * invDet);\n return world;\n };\n Bone.prototype.localToWorld = function (local) {\n var x = local.x, y = local.y;\n local.x = x * this.a + y * this.b + this.worldX;\n local.y = x * this.c + y * this.d + this.worldY;\n return local;\n };\n Bone.prototype.worldToLocalRotation = function (worldRotation) {\n var sin = spine.MathUtils.sinDeg(worldRotation), cos = spine.MathUtils.cosDeg(worldRotation);\n return Math.atan2(this.a * sin - this.c * cos, this.d * cos - this.b * sin) * spine.MathUtils.radDeg + this.rotation - this.shearX;\n };\n Bone.prototype.localToWorldRotation = function (localRotation) {\n localRotation -= this.rotation - this.shearX;\n var sin = spine.MathUtils.sinDeg(localRotation), cos = spine.MathUtils.cosDeg(localRotation);\n return Math.atan2(cos * this.c + sin * this.d, cos * this.a + sin * this.b) * spine.MathUtils.radDeg;\n };\n Bone.prototype.rotateWorld = function (degrees) {\n var a = this.a, b = this.b, c = this.c, d = this.d;\n var cos = spine.MathUtils.cosDeg(degrees), sin = spine.MathUtils.sinDeg(degrees);\n this.a = cos * a - sin * c;\n this.b = cos * b - sin * d;\n this.c = sin * a + cos * c;\n this.d = sin * b + cos * d;\n this.appliedValid = false;\n };\n return Bone;\n }());\n spine.Bone = Bone;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var BoneData = (function () {\n function BoneData(index, name, parent) {\n this.x = 0;\n this.y = 0;\n this.rotation = 0;\n this.scaleX = 1;\n this.scaleY = 1;\n this.shearX = 0;\n this.shearY = 0;\n this.transformMode = TransformMode.Normal;\n this.skinRequired = false;\n this.color = new spine.Color();\n if (index < 0)\n throw new Error(\"index must be >= 0.\");\n if (name == null)\n throw new Error(\"name cannot be null.\");\n this.index = index;\n this.name = name;\n this.parent = parent;\n }\n return BoneData;\n }());\n spine.BoneData = BoneData;\n var TransformMode;\n (function (TransformMode) {\n TransformMode[TransformMode[\"Normal\"] = 0] = \"Normal\";\n TransformMode[TransformMode[\"OnlyTranslation\"] = 1] = \"OnlyTranslation\";\n TransformMode[TransformMode[\"NoRotationOrReflection\"] = 2] = \"NoRotationOrReflection\";\n TransformMode[TransformMode[\"NoScale\"] = 3] = \"NoScale\";\n TransformMode[TransformMode[\"NoScaleOrReflection\"] = 4] = \"NoScaleOrReflection\";\n })(TransformMode = spine.TransformMode || (spine.TransformMode = {}));\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var ConstraintData = (function () {\n function ConstraintData(name, order, skinRequired) {\n this.name = name;\n this.order = order;\n this.skinRequired = skinRequired;\n }\n return ConstraintData;\n }());\n spine.ConstraintData = ConstraintData;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var Event = (function () {\n function Event(time, data) {\n if (data == null)\n throw new Error(\"data cannot be null.\");\n this.time = time;\n this.data = data;\n }\n return Event;\n }());\n spine.Event = Event;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var EventData = (function () {\n function EventData(name) {\n this.name = name;\n }\n return EventData;\n }());\n spine.EventData = EventData;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var IkConstraint = (function () {\n function IkConstraint(data, skeleton) {\n this.bendDirection = 0;\n this.compress = false;\n this.stretch = false;\n this.mix = 1;\n this.softness = 0;\n this.active = false;\n if (data == null)\n throw new Error(\"data cannot be null.\");\n if (skeleton == null)\n throw new Error(\"skeleton cannot be null.\");\n this.data = data;\n this.mix = data.mix;\n this.softness = data.softness;\n this.bendDirection = data.bendDirection;\n this.compress = data.compress;\n this.stretch = data.stretch;\n this.bones = new Array();\n for (var i = 0; i < data.bones.length; i++)\n this.bones.push(skeleton.findBone(data.bones[i].name));\n this.target = skeleton.findBone(data.target.name);\n }\n IkConstraint.prototype.isActive = function () {\n return this.active;\n };\n IkConstraint.prototype.apply = function () {\n this.update();\n };\n IkConstraint.prototype.update = function () {\n var target = this.target;\n var bones = this.bones;\n switch (bones.length) {\n case 1:\n this.apply1(bones[0], target.worldX, target.worldY, this.compress, this.stretch, this.data.uniform, this.mix);\n break;\n case 2:\n this.apply2(bones[0], bones[1], target.worldX, target.worldY, this.bendDirection, this.stretch, this.softness, this.mix);\n break;\n }\n };\n IkConstraint.prototype.apply1 = function (bone, targetX, targetY, compress, stretch, uniform, alpha) {\n if (!bone.appliedValid)\n bone.updateAppliedTransform();\n var p = bone.parent;\n var id = 1 / (p.a * p.d - p.b * p.c);\n var x = targetX - p.worldX, y = targetY - p.worldY;\n var tx = (x * p.d - y * p.b) * id - bone.ax, ty = (y * p.a - x * p.c) * id - bone.ay;\n var rotationIK = Math.atan2(ty, tx) * spine.MathUtils.radDeg - bone.ashearX - bone.arotation;\n if (bone.ascaleX < 0)\n rotationIK += 180;\n if (rotationIK > 180)\n rotationIK -= 360;\n else if (rotationIK < -180)\n rotationIK += 360;\n var sx = bone.ascaleX, sy = bone.ascaleY;\n if (compress || stretch) {\n var b = bone.data.length * sx, dd = Math.sqrt(tx * tx + ty * ty);\n if ((compress && dd < b) || (stretch && dd > b) && b > 0.0001) {\n var s = (dd / b - 1) * alpha + 1;\n sx *= s;\n if (uniform)\n sy *= s;\n }\n }\n bone.updateWorldTransformWith(bone.ax, bone.ay, bone.arotation + rotationIK * alpha, sx, sy, bone.ashearX, bone.ashearY);\n };\n IkConstraint.prototype.apply2 = function (parent, child, targetX, targetY, bendDir, stretch, softness, alpha) {\n if (alpha == 0) {\n child.updateWorldTransform();\n return;\n }\n if (!parent.appliedValid)\n parent.updateAppliedTransform();\n if (!child.appliedValid)\n child.updateAppliedTransform();\n var px = parent.ax, py = parent.ay, psx = parent.ascaleX, sx = psx, psy = parent.ascaleY, csx = child.ascaleX;\n var os1 = 0, os2 = 0, s2 = 0;\n if (psx < 0) {\n psx = -psx;\n os1 = 180;\n s2 = -1;\n }\n else {\n os1 = 0;\n s2 = 1;\n }\n if (psy < 0) {\n psy = -psy;\n s2 = -s2;\n }\n if (csx < 0) {\n csx = -csx;\n os2 = 180;\n }\n else\n os2 = 0;\n var cx = child.ax, cy = 0, cwx = 0, cwy = 0, a = parent.a, b = parent.b, c = parent.c, d = parent.d;\n var u = Math.abs(psx - psy) <= 0.0001;\n if (!u) {\n cy = 0;\n cwx = a * cx + parent.worldX;\n cwy = c * cx + parent.worldY;\n }\n else {\n cy = child.ay;\n cwx = a * cx + b * cy + parent.worldX;\n cwy = c * cx + d * cy + parent.worldY;\n }\n var pp = parent.parent;\n a = pp.a;\n b = pp.b;\n c = pp.c;\n d = pp.d;\n var id = 1 / (a * d - b * c), x = cwx - pp.worldX, y = cwy - pp.worldY;\n var dx = (x * d - y * b) * id - px, dy = (y * a - x * c) * id - py;\n var l1 = Math.sqrt(dx * dx + dy * dy), l2 = child.data.length * csx, a1, a2;\n if (l1 < 0.0001) {\n this.apply1(parent, targetX, targetY, false, stretch, false, alpha);\n child.updateWorldTransformWith(cx, cy, 0, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY);\n return;\n }\n x = targetX - pp.worldX;\n y = targetY - pp.worldY;\n var tx = (x * d - y * b) * id - px, ty = (y * a - x * c) * id - py;\n var dd = tx * tx + ty * ty;\n if (softness != 0) {\n softness *= psx * (csx + 1) / 2;\n var td = Math.sqrt(dd), sd = td - l1 - l2 * psx + softness;\n if (sd > 0) {\n var p = Math.min(1, sd / (softness * 2)) - 1;\n p = (sd - softness * (1 - p * p)) / td;\n tx -= p * tx;\n ty -= p * ty;\n dd = tx * tx + ty * ty;\n }\n }\n outer: if (u) {\n l2 *= psx;\n var cos = (dd - l1 * l1 - l2 * l2) / (2 * l1 * l2);\n if (cos < -1)\n cos = -1;\n else if (cos > 1) {\n cos = 1;\n if (stretch)\n sx *= (Math.sqrt(dd) / (l1 + l2) - 1) * alpha + 1;\n }\n a2 = Math.acos(cos) * bendDir;\n a = l1 + l2 * cos;\n b = l2 * Math.sin(a2);\n a1 = Math.atan2(ty * a - tx * b, tx * a + ty * b);\n }\n else {\n a = psx * l2;\n b = psy * l2;\n var aa = a * a, bb = b * b, ta = Math.atan2(ty, tx);\n c = bb * l1 * l1 + aa * dd - aa * bb;\n var c1 = -2 * bb * l1, c2 = bb - aa;\n d = c1 * c1 - 4 * c2 * c;\n if (d >= 0) {\n var q = Math.sqrt(d);\n if (c1 < 0)\n q = -q;\n q = -(c1 + q) / 2;\n var r0 = q / c2, r1 = c / q;\n var r = Math.abs(r0) < Math.abs(r1) ? r0 : r1;\n if (r * r <= dd) {\n y = Math.sqrt(dd - r * r) * bendDir;\n a1 = ta - Math.atan2(y, r);\n a2 = Math.atan2(y / psy, (r - l1) / psx);\n break outer;\n }\n }\n var minAngle = spine.MathUtils.PI, minX = l1 - a, minDist = minX * minX, minY = 0;\n var maxAngle = 0, maxX = l1 + a, maxDist = maxX * maxX, maxY = 0;\n c = -a * l1 / (aa - bb);\n if (c >= -1 && c <= 1) {\n c = Math.acos(c);\n x = a * Math.cos(c) + l1;\n y = b * Math.sin(c);\n d = x * x + y * y;\n if (d < minDist) {\n minAngle = c;\n minDist = d;\n minX = x;\n minY = y;\n }\n if (d > maxDist) {\n maxAngle = c;\n maxDist = d;\n maxX = x;\n maxY = y;\n }\n }\n if (dd <= (minDist + maxDist) / 2) {\n a1 = ta - Math.atan2(minY * bendDir, minX);\n a2 = minAngle * bendDir;\n }\n else {\n a1 = ta - Math.atan2(maxY * bendDir, maxX);\n a2 = maxAngle * bendDir;\n }\n }\n var os = Math.atan2(cy, cx) * s2;\n var rotation = parent.arotation;\n a1 = (a1 - os) * spine.MathUtils.radDeg + os1 - rotation;\n if (a1 > 180)\n a1 -= 360;\n else if (a1 < -180)\n a1 += 360;\n parent.updateWorldTransformWith(px, py, rotation + a1 * alpha, sx, parent.ascaleY, 0, 0);\n rotation = child.arotation;\n a2 = ((a2 + os) * spine.MathUtils.radDeg - child.ashearX) * s2 + os2 - rotation;\n if (a2 > 180)\n a2 -= 360;\n else if (a2 < -180)\n a2 += 360;\n child.updateWorldTransformWith(cx, cy, rotation + a2 * alpha, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY);\n };\n return IkConstraint;\n }());\n spine.IkConstraint = IkConstraint;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var IkConstraintData = (function (_super) {\n __extends(IkConstraintData, _super);\n function IkConstraintData(name) {\n var _this = _super.call(this, name, 0, false) || this;\n _this.bones = new Array();\n _this.bendDirection = 1;\n _this.compress = false;\n _this.stretch = false;\n _this.uniform = false;\n _this.mix = 1;\n _this.softness = 0;\n return _this;\n }\n return IkConstraintData;\n }(spine.ConstraintData));\n spine.IkConstraintData = IkConstraintData;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var PathConstraint = (function () {\n function PathConstraint(data, skeleton) {\n this.position = 0;\n this.spacing = 0;\n this.rotateMix = 0;\n this.translateMix = 0;\n this.spaces = new Array();\n this.positions = new Array();\n this.world = new Array();\n this.curves = new Array();\n this.lengths = new Array();\n this.segments = new Array();\n this.active = false;\n if (data == null)\n throw new Error(\"data cannot be null.\");\n if (skeleton == null)\n throw new Error(\"skeleton cannot be null.\");\n this.data = data;\n this.bones = new Array();\n for (var i = 0, n = data.bones.length; i < n; i++)\n this.bones.push(skeleton.findBone(data.bones[i].name));\n this.target = skeleton.findSlot(data.target.name);\n this.position = data.position;\n this.spacing = data.spacing;\n this.rotateMix = data.rotateMix;\n this.translateMix = data.translateMix;\n }\n PathConstraint.prototype.isActive = function () {\n return this.active;\n };\n PathConstraint.prototype.apply = function () {\n this.update();\n };\n PathConstraint.prototype.update = function () {\n var attachment = this.target.getAttachment();\n if (!(attachment instanceof spine.PathAttachment))\n return;\n var rotateMix = this.rotateMix, translateMix = this.translateMix;\n var translate = translateMix > 0, rotate = rotateMix > 0;\n if (!translate && !rotate)\n return;\n var data = this.data;\n var percentSpacing = data.spacingMode == spine.SpacingMode.Percent;\n var rotateMode = data.rotateMode;\n var tangents = rotateMode == spine.RotateMode.Tangent, scale = rotateMode == spine.RotateMode.ChainScale;\n var boneCount = this.bones.length, spacesCount = tangents ? boneCount : boneCount + 1;\n var bones = this.bones;\n var spaces = spine.Utils.setArraySize(this.spaces, spacesCount), lengths = null;\n var spacing = this.spacing;\n if (scale || !percentSpacing) {\n if (scale)\n lengths = spine.Utils.setArraySize(this.lengths, boneCount);\n var lengthSpacing = data.spacingMode == spine.SpacingMode.Length;\n for (var i = 0, n = spacesCount - 1; i < n;) {\n var bone = bones[i];\n var setupLength = bone.data.length;\n if (setupLength < PathConstraint.epsilon) {\n if (scale)\n lengths[i] = 0;\n spaces[++i] = 0;\n }\n else if (percentSpacing) {\n if (scale) {\n var x = setupLength * bone.a, y = setupLength * bone.c;\n var length_1 = Math.sqrt(x * x + y * y);\n lengths[i] = length_1;\n }\n spaces[++i] = spacing;\n }\n else {\n var x = setupLength * bone.a, y = setupLength * bone.c;\n var length_2 = Math.sqrt(x * x + y * y);\n if (scale)\n lengths[i] = length_2;\n spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length_2 / setupLength;\n }\n }\n }\n else {\n for (var i = 1; i < spacesCount; i++)\n spaces[i] = spacing;\n }\n var positions = this.computeWorldPositions(attachment, spacesCount, tangents, data.positionMode == spine.PositionMode.Percent, percentSpacing);\n var boneX = positions[0], boneY = positions[1], offsetRotation = data.offsetRotation;\n var tip = false;\n if (offsetRotation == 0)\n tip = rotateMode == spine.RotateMode.Chain;\n else {\n tip = false;\n var p = this.target.bone;\n offsetRotation *= p.a * p.d - p.b * p.c > 0 ? spine.MathUtils.degRad : -spine.MathUtils.degRad;\n }\n for (var i = 0, p = 3; i < boneCount; i++, p += 3) {\n var bone = bones[i];\n bone.worldX += (boneX - bone.worldX) * translateMix;\n bone.worldY += (boneY - bone.worldY) * translateMix;\n var x = positions[p], y = positions[p + 1], dx = x - boneX, dy = y - boneY;\n if (scale) {\n var length_3 = lengths[i];\n if (length_3 != 0) {\n var s = (Math.sqrt(dx * dx + dy * dy) / length_3 - 1) * rotateMix + 1;\n bone.a *= s;\n bone.c *= s;\n }\n }\n boneX = x;\n boneY = y;\n if (rotate) {\n var a = bone.a, b = bone.b, c = bone.c, d = bone.d, r = 0, cos = 0, sin = 0;\n if (tangents)\n r = positions[p - 1];\n else if (spaces[i + 1] == 0)\n r = positions[p + 2];\n else\n r = Math.atan2(dy, dx);\n r -= Math.atan2(c, a);\n if (tip) {\n cos = Math.cos(r);\n sin = Math.sin(r);\n var length_4 = bone.data.length;\n boneX += (length_4 * (cos * a - sin * c) - dx) * rotateMix;\n boneY += (length_4 * (sin * a + cos * c) - dy) * rotateMix;\n }\n else {\n r += offsetRotation;\n }\n if (r > spine.MathUtils.PI)\n r -= spine.MathUtils.PI2;\n else if (r < -spine.MathUtils.PI)\n r += spine.MathUtils.PI2;\n r *= rotateMix;\n cos = Math.cos(r);\n sin = Math.sin(r);\n bone.a = cos * a - sin * c;\n bone.b = cos * b - sin * d;\n bone.c = sin * a + cos * c;\n bone.d = sin * b + cos * d;\n }\n bone.appliedValid = false;\n }\n };\n PathConstraint.prototype.computeWorldPositions = function (path, spacesCount, tangents, percentPosition, percentSpacing) {\n var target = this.target;\n var position = this.position;\n var spaces = this.spaces, out = spine.Utils.setArraySize(this.positions, spacesCount * 3 + 2), world = null;\n var closed = path.closed;\n var verticesLength = path.worldVerticesLength, curveCount = verticesLength / 6, prevCurve = PathConstraint.NONE;\n if (!path.constantSpeed) {\n var lengths = path.lengths;\n curveCount -= closed ? 1 : 2;\n var pathLength_1 = lengths[curveCount];\n if (percentPosition)\n position *= pathLength_1;\n if (percentSpacing) {\n for (var i = 1; i < spacesCount; i++)\n spaces[i] *= pathLength_1;\n }\n world = spine.Utils.setArraySize(this.world, 8);\n for (var i = 0, o = 0, curve = 0; i < spacesCount; i++, o += 3) {\n var space = spaces[i];\n position += space;\n var p = position;\n if (closed) {\n p %= pathLength_1;\n if (p < 0)\n p += pathLength_1;\n curve = 0;\n }\n else if (p < 0) {\n if (prevCurve != PathConstraint.BEFORE) {\n prevCurve = PathConstraint.BEFORE;\n path.computeWorldVertices(target, 2, 4, world, 0, 2);\n }\n this.addBeforePosition(p, world, 0, out, o);\n continue;\n }\n else if (p > pathLength_1) {\n if (prevCurve != PathConstraint.AFTER) {\n prevCurve = PathConstraint.AFTER;\n path.computeWorldVertices(target, verticesLength - 6, 4, world, 0, 2);\n }\n this.addAfterPosition(p - pathLength_1, world, 0, out, o);\n continue;\n }\n for (;; curve++) {\n var length_5 = lengths[curve];\n if (p > length_5)\n continue;\n if (curve == 0)\n p /= length_5;\n else {\n var prev = lengths[curve - 1];\n p = (p - prev) / (length_5 - prev);\n }\n break;\n }\n if (curve != prevCurve) {\n prevCurve = curve;\n if (closed && curve == curveCount) {\n path.computeWorldVertices(target, verticesLength - 4, 4, world, 0, 2);\n path.computeWorldVertices(target, 0, 4, world, 4, 2);\n }\n else\n path.computeWorldVertices(target, curve * 6 + 2, 8, world, 0, 2);\n }\n this.addCurvePosition(p, world[0], world[1], world[2], world[3], world[4], world[5], world[6], world[7], out, o, tangents || (i > 0 && space == 0));\n }\n return out;\n }\n if (closed) {\n verticesLength += 2;\n world = spine.Utils.setArraySize(this.world, verticesLength);\n path.computeWorldVertices(target, 2, verticesLength - 4, world, 0, 2);\n path.computeWorldVertices(target, 0, 2, world, verticesLength - 4, 2);\n world[verticesLength - 2] = world[0];\n world[verticesLength - 1] = world[1];\n }\n else {\n curveCount--;\n verticesLength -= 4;\n world = spine.Utils.setArraySize(this.world, verticesLength);\n path.computeWorldVertices(target, 2, verticesLength, world, 0, 2);\n }\n var curves = spine.Utils.setArraySize(this.curves, curveCount);\n var pathLength = 0;\n var x1 = world[0], y1 = world[1], cx1 = 0, cy1 = 0, cx2 = 0, cy2 = 0, x2 = 0, y2 = 0;\n var tmpx = 0, tmpy = 0, dddfx = 0, dddfy = 0, ddfx = 0, ddfy = 0, dfx = 0, dfy = 0;\n for (var i = 0, w = 2; i < curveCount; i++, w += 6) {\n cx1 = world[w];\n cy1 = world[w + 1];\n cx2 = world[w + 2];\n cy2 = world[w + 3];\n x2 = world[w + 4];\n y2 = world[w + 5];\n tmpx = (x1 - cx1 * 2 + cx2) * 0.1875;\n tmpy = (y1 - cy1 * 2 + cy2) * 0.1875;\n dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.09375;\n dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.09375;\n ddfx = tmpx * 2 + dddfx;\n ddfy = tmpy * 2 + dddfy;\n dfx = (cx1 - x1) * 0.75 + tmpx + dddfx * 0.16666667;\n dfy = (cy1 - y1) * 0.75 + tmpy + dddfy * 0.16666667;\n pathLength += Math.sqrt(dfx * dfx + dfy * dfy);\n dfx += ddfx;\n dfy += ddfy;\n ddfx += dddfx;\n ddfy += dddfy;\n pathLength += Math.sqrt(dfx * dfx + dfy * dfy);\n dfx += ddfx;\n dfy += ddfy;\n pathLength += Math.sqrt(dfx * dfx + dfy * dfy);\n dfx += ddfx + dddfx;\n dfy += ddfy + dddfy;\n pathLength += Math.sqrt(dfx * dfx + dfy * dfy);\n curves[i] = pathLength;\n x1 = x2;\n y1 = y2;\n }\n if (percentPosition)\n position *= pathLength;\n else\n position *= pathLength / path.lengths[curveCount - 1];\n if (percentSpacing) {\n for (var i = 1; i < spacesCount; i++)\n spaces[i] *= pathLength;\n }\n var segments = this.segments;\n var curveLength = 0;\n for (var i = 0, o = 0, curve = 0, segment = 0; i < spacesCount; i++, o += 3) {\n var space = spaces[i];\n position += space;\n var p = position;\n if (closed) {\n p %= pathLength;\n if (p < 0)\n p += pathLength;\n curve = 0;\n }\n else if (p < 0) {\n this.addBeforePosition(p, world, 0, out, o);\n continue;\n }\n else if (p > pathLength) {\n this.addAfterPosition(p - pathLength, world, verticesLength - 4, out, o);\n continue;\n }\n for (;; curve++) {\n var length_6 = curves[curve];\n if (p > length_6)\n continue;\n if (curve == 0)\n p /= length_6;\n else {\n var prev = curves[curve - 1];\n p = (p - prev) / (length_6 - prev);\n }\n break;\n }\n if (curve != prevCurve) {\n prevCurve = curve;\n var ii = curve * 6;\n x1 = world[ii];\n y1 = world[ii + 1];\n cx1 = world[ii + 2];\n cy1 = world[ii + 3];\n cx2 = world[ii + 4];\n cy2 = world[ii + 5];\n x2 = world[ii + 6];\n y2 = world[ii + 7];\n tmpx = (x1 - cx1 * 2 + cx2) * 0.03;\n tmpy = (y1 - cy1 * 2 + cy2) * 0.03;\n dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.006;\n dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.006;\n ddfx = tmpx * 2 + dddfx;\n ddfy = tmpy * 2 + dddfy;\n dfx = (cx1 - x1) * 0.3 + tmpx + dddfx * 0.16666667;\n dfy = (cy1 - y1) * 0.3 + tmpy + dddfy * 0.16666667;\n curveLength = Math.sqrt(dfx * dfx + dfy * dfy);\n segments[0] = curveLength;\n for (ii = 1; ii < 8; ii++) {\n dfx += ddfx;\n dfy += ddfy;\n ddfx += dddfx;\n ddfy += dddfy;\n curveLength += Math.sqrt(dfx * dfx + dfy * dfy);\n segments[ii] = curveLength;\n }\n dfx += ddfx;\n dfy += ddfy;\n curveLength += Math.sqrt(dfx * dfx + dfy * dfy);\n segments[8] = curveLength;\n dfx += ddfx + dddfx;\n dfy += ddfy + dddfy;\n curveLength += Math.sqrt(dfx * dfx + dfy * dfy);\n segments[9] = curveLength;\n segment = 0;\n }\n p *= curveLength;\n for (;; segment++) {\n var length_7 = segments[segment];\n if (p > length_7)\n continue;\n if (segment == 0)\n p /= length_7;\n else {\n var prev = segments[segment - 1];\n p = segment + (p - prev) / (length_7 - prev);\n }\n break;\n }\n this.addCurvePosition(p * 0.1, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents || (i > 0 && space == 0));\n }\n return out;\n };\n PathConstraint.prototype.addBeforePosition = function (p, temp, i, out, o) {\n var x1 = temp[i], y1 = temp[i + 1], dx = temp[i + 2] - x1, dy = temp[i + 3] - y1, r = Math.atan2(dy, dx);\n out[o] = x1 + p * Math.cos(r);\n out[o + 1] = y1 + p * Math.sin(r);\n out[o + 2] = r;\n };\n PathConstraint.prototype.addAfterPosition = function (p, temp, i, out, o) {\n var x1 = temp[i + 2], y1 = temp[i + 3], dx = x1 - temp[i], dy = y1 - temp[i + 1], r = Math.atan2(dy, dx);\n out[o] = x1 + p * Math.cos(r);\n out[o + 1] = y1 + p * Math.sin(r);\n out[o + 2] = r;\n };\n PathConstraint.prototype.addCurvePosition = function (p, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents) {\n if (p == 0 || isNaN(p)) {\n out[o] = x1;\n out[o + 1] = y1;\n out[o + 2] = Math.atan2(cy1 - y1, cx1 - x1);\n return;\n }\n var tt = p * p, ttt = tt * p, u = 1 - p, uu = u * u, uuu = uu * u;\n var ut = u * p, ut3 = ut * 3, uut3 = u * ut3, utt3 = ut3 * p;\n var x = x1 * uuu + cx1 * uut3 + cx2 * utt3 + x2 * ttt, y = y1 * uuu + cy1 * uut3 + cy2 * utt3 + y2 * ttt;\n out[o] = x;\n out[o + 1] = y;\n if (tangents) {\n if (p < 0.001)\n out[o + 2] = Math.atan2(cy1 - y1, cx1 - x1);\n else\n out[o + 2] = Math.atan2(y - (y1 * uu + cy1 * ut * 2 + cy2 * tt), x - (x1 * uu + cx1 * ut * 2 + cx2 * tt));\n }\n };\n PathConstraint.NONE = -1;\n PathConstraint.BEFORE = -2;\n PathConstraint.AFTER = -3;\n PathConstraint.epsilon = 0.00001;\n return PathConstraint;\n }());\n spine.PathConstraint = PathConstraint;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var PathConstraintData = (function (_super) {\n __extends(PathConstraintData, _super);\n function PathConstraintData(name) {\n var _this = _super.call(this, name, 0, false) || this;\n _this.bones = new Array();\n return _this;\n }\n return PathConstraintData;\n }(spine.ConstraintData));\n spine.PathConstraintData = PathConstraintData;\n var PositionMode;\n (function (PositionMode) {\n PositionMode[PositionMode[\"Fixed\"] = 0] = \"Fixed\";\n PositionMode[PositionMode[\"Percent\"] = 1] = \"Percent\";\n })(PositionMode = spine.PositionMode || (spine.PositionMode = {}));\n var SpacingMode;\n (function (SpacingMode) {\n SpacingMode[SpacingMode[\"Length\"] = 0] = \"Length\";\n SpacingMode[SpacingMode[\"Fixed\"] = 1] = \"Fixed\";\n SpacingMode[SpacingMode[\"Percent\"] = 2] = \"Percent\";\n })(SpacingMode = spine.SpacingMode || (spine.SpacingMode = {}));\n var RotateMode;\n (function (RotateMode) {\n RotateMode[RotateMode[\"Tangent\"] = 0] = \"Tangent\";\n RotateMode[RotateMode[\"Chain\"] = 1] = \"Chain\";\n RotateMode[RotateMode[\"ChainScale\"] = 2] = \"ChainScale\";\n })(RotateMode = spine.RotateMode || (spine.RotateMode = {}));\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var Assets = (function () {\n function Assets(clientId) {\n this.toLoad = new Array();\n this.assets = {};\n this.clientId = clientId;\n }\n Assets.prototype.loaded = function () {\n var i = 0;\n for (var v in this.assets)\n i++;\n return i;\n };\n return Assets;\n }());\n var SharedAssetManager = (function () {\n function SharedAssetManager(pathPrefix) {\n if (pathPrefix === void 0) { pathPrefix = \"\"; }\n this.clientAssets = {};\n this.queuedAssets = {};\n this.rawAssets = {};\n this.errors = {};\n this.pathPrefix = pathPrefix;\n }\n SharedAssetManager.prototype.queueAsset = function (clientId, textureLoader, path) {\n var clientAssets = this.clientAssets[clientId];\n if (clientAssets === null || clientAssets === undefined) {\n clientAssets = new Assets(clientId);\n this.clientAssets[clientId] = clientAssets;\n }\n if (textureLoader !== null)\n clientAssets.textureLoader = textureLoader;\n clientAssets.toLoad.push(path);\n if (this.queuedAssets[path] === path) {\n return false;\n }\n else {\n this.queuedAssets[path] = path;\n return true;\n }\n };\n SharedAssetManager.prototype.loadText = function (clientId, path) {\n var _this = this;\n path = this.pathPrefix + path;\n if (!this.queueAsset(clientId, null, path))\n return;\n var request = new XMLHttpRequest();\n request.onreadystatechange = function () {\n if (request.readyState == XMLHttpRequest.DONE) {\n if (request.status >= 200 && request.status < 300) {\n _this.rawAssets[path] = request.responseText;\n }\n else {\n _this.errors[path] = \"Couldn't load text \" + path + \": status \" + request.status + \", \" + request.responseText;\n }\n }\n };\n request.open(\"GET\", path, true);\n request.send();\n };\n SharedAssetManager.prototype.loadJson = function (clientId, path) {\n var _this = this;\n path = this.pathPrefix + path;\n if (!this.queueAsset(clientId, null, path))\n return;\n var request = new XMLHttpRequest();\n request.onreadystatechange = function () {\n if (request.readyState == XMLHttpRequest.DONE) {\n if (request.status >= 200 && request.status < 300) {\n _this.rawAssets[path] = JSON.parse(request.responseText);\n }\n else {\n _this.errors[path] = \"Couldn't load text \" + path + \": status \" + request.status + \", \" + request.responseText;\n }\n }\n };\n request.open(\"GET\", path, true);\n request.send();\n };\n SharedAssetManager.prototype.loadTexture = function (clientId, textureLoader, path) {\n var _this = this;\n path = this.pathPrefix + path;\n if (!this.queueAsset(clientId, textureLoader, path))\n return;\n var img = new Image();\n img.src = path;\n img.crossOrigin = \"anonymous\";\n img.onload = function (ev) {\n _this.rawAssets[path] = img;\n };\n img.onerror = function (ev) {\n _this.errors[path] = \"Couldn't load image \" + path;\n };\n };\n SharedAssetManager.prototype.get = function (clientId, path) {\n path = this.pathPrefix + path;\n var clientAssets = this.clientAssets[clientId];\n if (clientAssets === null || clientAssets === undefined)\n return true;\n return clientAssets.assets[path];\n };\n SharedAssetManager.prototype.updateClientAssets = function (clientAssets) {\n for (var i = 0; i < clientAssets.toLoad.length; i++) {\n var path = clientAssets.toLoad[i];\n var asset = clientAssets.assets[path];\n if (asset === null || asset === undefined) {\n var rawAsset = this.rawAssets[path];\n if (rawAsset === null || rawAsset === undefined)\n continue;\n if (rawAsset instanceof HTMLImageElement) {\n clientAssets.assets[path] = clientAssets.textureLoader(rawAsset);\n }\n else {\n clientAssets.assets[path] = rawAsset;\n }\n }\n }\n };\n SharedAssetManager.prototype.isLoadingComplete = function (clientId) {\n var clientAssets = this.clientAssets[clientId];\n if (clientAssets === null || clientAssets === undefined)\n return true;\n this.updateClientAssets(clientAssets);\n return clientAssets.toLoad.length == clientAssets.loaded();\n };\n SharedAssetManager.prototype.dispose = function () {\n };\n SharedAssetManager.prototype.hasErrors = function () {\n return Object.keys(this.errors).length > 0;\n };\n SharedAssetManager.prototype.getErrors = function () {\n return this.errors;\n };\n return SharedAssetManager;\n }());\n spine.SharedAssetManager = SharedAssetManager;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var Skeleton = (function () {\n function Skeleton(data) {\n this._updateCache = new Array();\n this.updateCacheReset = new Array();\n this.time = 0;\n this.scaleX = 1;\n this.scaleY = 1;\n this.x = 0;\n this.y = 0;\n if (data == null)\n throw new Error(\"data cannot be null.\");\n this.data = data;\n this.bones = new Array();\n for (var i = 0; i < data.bones.length; i++) {\n var boneData = data.bones[i];\n var bone = void 0;\n if (boneData.parent == null)\n bone = new spine.Bone(boneData, this, null);\n else {\n var parent_1 = this.bones[boneData.parent.index];\n bone = new spine.Bone(boneData, this, parent_1);\n parent_1.children.push(bone);\n }\n this.bones.push(bone);\n }\n this.slots = new Array();\n this.drawOrder = new Array();\n for (var i = 0; i < data.slots.length; i++) {\n var slotData = data.slots[i];\n var bone = this.bones[slotData.boneData.index];\n var slot = new spine.Slot(slotData, bone);\n this.slots.push(slot);\n this.drawOrder.push(slot);\n }\n this.ikConstraints = new Array();\n for (var i = 0; i < data.ikConstraints.length; i++) {\n var ikConstraintData = data.ikConstraints[i];\n this.ikConstraints.push(new spine.IkConstraint(ikConstraintData, this));\n }\n this.transformConstraints = new Array();\n for (var i = 0; i < data.transformConstraints.length; i++) {\n var transformConstraintData = data.transformConstraints[i];\n this.transformConstraints.push(new spine.TransformConstraint(transformConstraintData, this));\n }\n this.pathConstraints = new Array();\n for (var i = 0; i < data.pathConstraints.length; i++) {\n var pathConstraintData = data.pathConstraints[i];\n this.pathConstraints.push(new spine.PathConstraint(pathConstraintData, this));\n }\n this.color = new spine.Color(1, 1, 1, 1);\n this.updateCache();\n }\n Skeleton.prototype.updateCache = function () {\n var updateCache = this._updateCache;\n updateCache.length = 0;\n this.updateCacheReset.length = 0;\n var bones = this.bones;\n for (var i = 0, n = bones.length; i < n; i++) {\n var bone = bones[i];\n bone.sorted = bone.data.skinRequired;\n bone.active = !bone.sorted;\n }\n if (this.skin != null) {\n var skinBones = this.skin.bones;\n for (var i = 0, n = this.skin.bones.length; i < n; i++) {\n var bone = this.bones[skinBones[i].index];\n do {\n bone.sorted = false;\n bone.active = true;\n bone = bone.parent;\n } while (bone != null);\n }\n }\n var ikConstraints = this.ikConstraints;\n var transformConstraints = this.transformConstraints;\n var pathConstraints = this.pathConstraints;\n var ikCount = ikConstraints.length, transformCount = transformConstraints.length, pathCount = pathConstraints.length;\n var constraintCount = ikCount + transformCount + pathCount;\n outer: for (var i = 0; i < constraintCount; i++) {\n for (var ii = 0; ii < ikCount; ii++) {\n var constraint = ikConstraints[ii];\n if (constraint.data.order == i) {\n this.sortIkConstraint(constraint);\n continue outer;\n }\n }\n for (var ii = 0; ii < transformCount; ii++) {\n var constraint = transformConstraints[ii];\n if (constraint.data.order == i) {\n this.sortTransformConstraint(constraint);\n continue outer;\n }\n }\n for (var ii = 0; ii < pathCount; ii++) {\n var constraint = pathConstraints[ii];\n if (constraint.data.order == i) {\n this.sortPathConstraint(constraint);\n continue outer;\n }\n }\n }\n for (var i = 0, n = bones.length; i < n; i++)\n this.sortBone(bones[i]);\n };\n Skeleton.prototype.sortIkConstraint = function (constraint) {\n constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin != null && spine.Utils.contains(this.skin.constraints, constraint.data, true)));\n if (!constraint.active)\n return;\n var target = constraint.target;\n this.sortBone(target);\n var constrained = constraint.bones;\n var parent = constrained[0];\n this.sortBone(parent);\n if (constrained.length > 1) {\n var child = constrained[constrained.length - 1];\n if (!(this._updateCache.indexOf(child) > -1))\n this.updateCacheReset.push(child);\n }\n this._updateCache.push(constraint);\n this.sortReset(parent.children);\n constrained[constrained.length - 1].sorted = true;\n };\n Skeleton.prototype.sortPathConstraint = function (constraint) {\n constraint.active = constraint.target.bone.isActive() && (!constraint.data.skinRequired || (this.skin != null && spine.Utils.contains(this.skin.constraints, constraint.data, true)));\n if (!constraint.active)\n return;\n var slot = constraint.target;\n var slotIndex = slot.data.index;\n var slotBone = slot.bone;\n if (this.skin != null)\n this.sortPathConstraintAttachment(this.skin, slotIndex, slotBone);\n if (this.data.defaultSkin != null && this.data.defaultSkin != this.skin)\n this.sortPathConstraintAttachment(this.data.defaultSkin, slotIndex, slotBone);\n for (var i = 0, n = this.data.skins.length; i < n; i++)\n this.sortPathConstraintAttachment(this.data.skins[i], slotIndex, slotBone);\n var attachment = slot.getAttachment();\n if (attachment instanceof spine.PathAttachment)\n this.sortPathConstraintAttachmentWith(attachment, slotBone);\n var constrained = constraint.bones;\n var boneCount = constrained.length;\n for (var i = 0; i < boneCount; i++)\n this.sortBone(constrained[i]);\n this._updateCache.push(constraint);\n for (var i = 0; i < boneCount; i++)\n this.sortReset(constrained[i].children);\n for (var i = 0; i < boneCount; i++)\n constrained[i].sorted = true;\n };\n Skeleton.prototype.sortTransformConstraint = function (constraint) {\n constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin != null && spine.Utils.contains(this.skin.constraints, constraint.data, true)));\n if (!constraint.active)\n return;\n this.sortBone(constraint.target);\n var constrained = constraint.bones;\n var boneCount = constrained.length;\n if (constraint.data.local) {\n for (var i = 0; i < boneCount; i++) {\n var child = constrained[i];\n this.sortBone(child.parent);\n if (!(this._updateCache.indexOf(child) > -1))\n this.updateCacheReset.push(child);\n }\n }\n else {\n for (var i = 0; i < boneCount; i++) {\n this.sortBone(constrained[i]);\n }\n }\n this._updateCache.push(constraint);\n for (var ii = 0; ii < boneCount; ii++)\n this.sortReset(constrained[ii].children);\n for (var ii = 0; ii < boneCount; ii++)\n constrained[ii].sorted = true;\n };\n Skeleton.prototype.sortPathConstraintAttachment = function (skin, slotIndex, slotBone) {\n var attachments = skin.attachments[slotIndex];\n if (!attachments)\n return;\n for (var key in attachments) {\n this.sortPathConstraintAttachmentWith(attachments[key], slotBone);\n }\n };\n Skeleton.prototype.sortPathConstraintAttachmentWith = function (attachment, slotBone) {\n if (!(attachment instanceof spine.PathAttachment))\n return;\n var pathBones = attachment.bones;\n if (pathBones == null)\n this.sortBone(slotBone);\n else {\n var bones = this.bones;\n var i = 0;\n while (i < pathBones.length) {\n var boneCount = pathBones[i++];\n for (var n = i + boneCount; i < n; i++) {\n var boneIndex = pathBones[i];\n this.sortBone(bones[boneIndex]);\n }\n }\n }\n };\n Skeleton.prototype.sortBone = function (bone) {\n if (bone.sorted)\n return;\n var parent = bone.parent;\n if (parent != null)\n this.sortBone(parent);\n bone.sorted = true;\n this._updateCache.push(bone);\n };\n Skeleton.prototype.sortReset = function (bones) {\n for (var i = 0, n = bones.length; i < n; i++) {\n var bone = bones[i];\n if (!bone.active)\n continue;\n if (bone.sorted)\n this.sortReset(bone.children);\n bone.sorted = false;\n }\n };\n Skeleton.prototype.updateWorldTransform = function () {\n var updateCacheReset = this.updateCacheReset;\n for (var i = 0, n = updateCacheReset.length; i < n; i++) {\n var bone = updateCacheReset[i];\n bone.ax = bone.x;\n bone.ay = bone.y;\n bone.arotation = bone.rotation;\n bone.ascaleX = bone.scaleX;\n bone.ascaleY = bone.scaleY;\n bone.ashearX = bone.shearX;\n bone.ashearY = bone.shearY;\n bone.appliedValid = true;\n }\n var updateCache = this._updateCache;\n for (var i = 0, n = updateCache.length; i < n; i++)\n updateCache[i].update();\n };\n Skeleton.prototype.setToSetupPose = function () {\n this.setBonesToSetupPose();\n this.setSlotsToSetupPose();\n };\n Skeleton.prototype.setBonesToSetupPose = function () {\n var bones = this.bones;\n for (var i = 0, n = bones.length; i < n; i++)\n bones[i].setToSetupPose();\n var ikConstraints = this.ikConstraints;\n for (var i = 0, n = ikConstraints.length; i < n; i++) {\n var constraint = ikConstraints[i];\n constraint.mix = constraint.data.mix;\n constraint.softness = constraint.data.softness;\n constraint.bendDirection = constraint.data.bendDirection;\n constraint.compress = constraint.data.compress;\n constraint.stretch = constraint.data.stretch;\n }\n var transformConstraints = this.transformConstraints;\n for (var i = 0, n = transformConstraints.length; i < n; i++) {\n var constraint = transformConstraints[i];\n var data = constraint.data;\n constraint.rotateMix = data.rotateMix;\n constraint.translateMix = data.translateMix;\n constraint.scaleMix = data.scaleMix;\n constraint.shearMix = data.shearMix;\n }\n var pathConstraints = this.pathConstraints;\n for (var i = 0, n = pathConstraints.length; i < n; i++) {\n var constraint = pathConstraints[i];\n var data = constraint.data;\n constraint.position = data.position;\n constraint.spacing = data.spacing;\n constraint.rotateMix = data.rotateMix;\n constraint.translateMix = data.translateMix;\n }\n };\n Skeleton.prototype.setSlotsToSetupPose = function () {\n var slots = this.slots;\n spine.Utils.arrayCopy(slots, 0, this.drawOrder, 0, slots.length);\n for (var i = 0, n = slots.length; i < n; i++)\n slots[i].setToSetupPose();\n };\n Skeleton.prototype.getRootBone = function () {\n if (this.bones.length == 0)\n return null;\n return this.bones[0];\n };\n Skeleton.prototype.findBone = function (boneName) {\n if (boneName == null)\n throw new Error(\"boneName cannot be null.\");\n var bones = this.bones;\n for (var i = 0, n = bones.length; i < n; i++) {\n var bone = bones[i];\n if (bone.data.name == boneName)\n return bone;\n }\n return null;\n };\n Skeleton.prototype.findBoneIndex = function (boneName) {\n if (boneName == null)\n throw new Error(\"boneName cannot be null.\");\n var bones = this.bones;\n for (var i = 0, n = bones.length; i < n; i++)\n if (bones[i].data.name == boneName)\n return i;\n return -1;\n };\n Skeleton.prototype.findSlot = function (slotName) {\n if (slotName == null)\n throw new Error(\"slotName cannot be null.\");\n var slots = this.slots;\n for (var i = 0, n = slots.length; i < n; i++) {\n var slot = slots[i];\n if (slot.data.name == slotName)\n return slot;\n }\n return null;\n };\n Skeleton.prototype.findSlotIndex = function (slotName) {\n if (slotName == null)\n throw new Error(\"slotName cannot be null.\");\n var slots = this.slots;\n for (var i = 0, n = slots.length; i < n; i++)\n if (slots[i].data.name == slotName)\n return i;\n return -1;\n };\n Skeleton.prototype.setSkinByName = function (skinName) {\n var skin = this.data.findSkin(skinName);\n if (skin == null)\n throw new Error(\"Skin not found: \" + skinName);\n this.setSkin(skin);\n };\n Skeleton.prototype.setSkin = function (newSkin) {\n if (newSkin == this.skin)\n return;\n if (newSkin != null) {\n if (this.skin != null)\n newSkin.attachAll(this, this.skin);\n else {\n var slots = this.slots;\n for (var i = 0, n = slots.length; i < n; i++) {\n var slot = slots[i];\n var name_1 = slot.data.attachmentName;\n if (name_1 != null) {\n var attachment = newSkin.getAttachment(i, name_1);\n if (attachment != null)\n slot.setAttachment(attachment);\n }\n }\n }\n }\n this.skin = newSkin;\n this.updateCache();\n };\n Skeleton.prototype.getAttachmentByName = function (slotName, attachmentName) {\n return this.getAttachment(this.data.findSlotIndex(slotName), attachmentName);\n };\n Skeleton.prototype.getAttachment = function (slotIndex, attachmentName) {\n if (attachmentName == null)\n throw new Error(\"attachmentName cannot be null.\");\n if (this.skin != null) {\n var attachment = this.skin.getAttachment(slotIndex, attachmentName);\n if (attachment != null)\n return attachment;\n }\n if (this.data.defaultSkin != null)\n return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);\n return null;\n };\n Skeleton.prototype.setAttachment = function (slotName, attachmentName) {\n if (slotName == null)\n throw new Error(\"slotName cannot be null.\");\n var slots = this.slots;\n for (var i = 0, n = slots.length; i < n; i++) {\n var slot = slots[i];\n if (slot.data.name == slotName) {\n var attachment = null;\n if (attachmentName != null) {\n attachment = this.getAttachment(i, attachmentName);\n if (attachment == null)\n throw new Error(\"Attachment not found: \" + attachmentName + \", for slot: \" + slotName);\n }\n slot.setAttachment(attachment);\n return;\n }\n }\n throw new Error(\"Slot not found: \" + slotName);\n };\n Skeleton.prototype.findIkConstraint = function (constraintName) {\n if (constraintName == null)\n throw new Error(\"constraintName cannot be null.\");\n var ikConstraints = this.ikConstraints;\n for (var i = 0, n = ikConstraints.length; i < n; i++) {\n var ikConstraint = ikConstraints[i];\n if (ikConstraint.data.name == constraintName)\n return ikConstraint;\n }\n return null;\n };\n Skeleton.prototype.findTransformConstraint = function (constraintName) {\n if (constraintName == null)\n throw new Error(\"constraintName cannot be null.\");\n var transformConstraints = this.transformConstraints;\n for (var i = 0, n = transformConstraints.length; i < n; i++) {\n var constraint = transformConstraints[i];\n if (constraint.data.name == constraintName)\n return constraint;\n }\n return null;\n };\n Skeleton.prototype.findPathConstraint = function (constraintName) {\n if (constraintName == null)\n throw new Error(\"constraintName cannot be null.\");\n var pathConstraints = this.pathConstraints;\n for (var i = 0, n = pathConstraints.length; i < n; i++) {\n var constraint = pathConstraints[i];\n if (constraint.data.name == constraintName)\n return constraint;\n }\n return null;\n };\n Skeleton.prototype.getBounds = function (offset, size, temp) {\n if (temp === void 0) { temp = new Array(2); }\n if (offset == null)\n throw new Error(\"offset cannot be null.\");\n if (size == null)\n throw new Error(\"size cannot be null.\");\n var drawOrder = this.drawOrder;\n var minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY;\n for (var i = 0, n = drawOrder.length; i < n; i++) {\n var slot = drawOrder[i];\n if (!slot.bone.active)\n continue;\n var verticesLength = 0;\n var vertices = null;\n var attachment = slot.getAttachment();\n if (attachment instanceof spine.RegionAttachment) {\n verticesLength = 8;\n vertices = spine.Utils.setArraySize(temp, verticesLength, 0);\n attachment.computeWorldVertices(slot.bone, vertices, 0, 2);\n }\n else if (attachment instanceof spine.MeshAttachment) {\n var mesh = attachment;\n verticesLength = mesh.worldVerticesLength;\n vertices = spine.Utils.setArraySize(temp, verticesLength, 0);\n mesh.computeWorldVertices(slot, 0, verticesLength, vertices, 0, 2);\n }\n if (vertices != null) {\n for (var ii = 0, nn = vertices.length; ii < nn; ii += 2) {\n var x = vertices[ii], y = vertices[ii + 1];\n minX = Math.min(minX, x);\n minY = Math.min(minY, y);\n maxX = Math.max(maxX, x);\n maxY = Math.max(maxY, y);\n }\n }\n }\n offset.set(minX, minY);\n size.set(maxX - minX, maxY - minY);\n };\n Skeleton.prototype.update = function (delta) {\n this.time += delta;\n };\n return Skeleton;\n }());\n spine.Skeleton = Skeleton;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var SkeletonBinary = (function () {\n function SkeletonBinary(attachmentLoader) {\n this.scale = 1;\n this.linkedMeshes = new Array();\n this.attachmentLoader = attachmentLoader;\n }\n SkeletonBinary.prototype.readSkeletonData = function (binary) {\n var scale = this.scale;\n var skeletonData = new spine.SkeletonData();\n skeletonData.name = \"\";\n var input = new BinaryInput(binary);\n skeletonData.hash = input.readString();\n skeletonData.version = input.readString();\n skeletonData.x = input.readFloat();\n skeletonData.y = input.readFloat();\n skeletonData.width = input.readFloat();\n skeletonData.height = input.readFloat();\n var nonessential = input.readBoolean();\n if (nonessential) {\n skeletonData.fps = input.readFloat();\n skeletonData.imagesPath = input.readString();\n skeletonData.audioPath = input.readString();\n }\n var n = 0;\n n = input.readInt(true);\n for (var i = 0; i < n; i++)\n input.strings.push(input.readString());\n n = input.readInt(true);\n for (var i = 0; i < n; i++) {\n var name_2 = input.readString();\n var parent_2 = i == 0 ? null : skeletonData.bones[input.readInt(true)];\n var data = new spine.BoneData(i, name_2, parent_2);\n data.rotation = input.readFloat();\n data.x = input.readFloat() * scale;\n data.y = input.readFloat() * scale;\n data.scaleX = input.readFloat();\n data.scaleY = input.readFloat();\n data.shearX = input.readFloat();\n data.shearY = input.readFloat();\n data.length = input.readFloat() * scale;\n data.transformMode = SkeletonBinary.TransformModeValues[input.readInt(true)];\n data.skinRequired = input.readBoolean();\n if (nonessential)\n spine.Color.rgba8888ToColor(data.color, input.readInt32());\n skeletonData.bones.push(data);\n }\n n = input.readInt(true);\n for (var i = 0; i < n; i++) {\n var slotName = input.readString();\n var boneData = skeletonData.bones[input.readInt(true)];\n var data = new spine.SlotData(i, slotName, boneData);\n spine.Color.rgba8888ToColor(data.color, input.readInt32());\n var darkColor = input.readInt32();\n if (darkColor != -1)\n spine.Color.rgb888ToColor(data.darkColor = new spine.Color(), darkColor);\n data.attachmentName = input.readStringRef();\n data.blendMode = SkeletonBinary.BlendModeValues[input.readInt(true)];\n skeletonData.slots.push(data);\n }\n n = input.readInt(true);\n for (var i = 0, nn = void 0; i < n; i++) {\n var data = new spine.IkConstraintData(input.readString());\n data.order = input.readInt(true);\n data.skinRequired = input.readBoolean();\n nn = input.readInt(true);\n for (var ii = 0; ii < nn; ii++)\n data.bones.push(skeletonData.bones[input.readInt(true)]);\n data.target = skeletonData.bones[input.readInt(true)];\n data.mix = input.readFloat();\n data.softness = input.readFloat() * scale;\n data.bendDirection = input.readByte();\n data.compress = input.readBoolean();\n data.stretch = input.readBoolean();\n data.uniform = input.readBoolean();\n skeletonData.ikConstraints.push(data);\n }\n n = input.readInt(true);\n for (var i = 0, nn = void 0; i < n; i++) {\n var data = new spine.TransformConstraintData(input.readString());\n data.order = input.readInt(true);\n data.skinRequired = input.readBoolean();\n nn = input.readInt(true);\n for (var ii = 0; ii < nn; ii++)\n data.bones.push(skeletonData.bones[input.readInt(true)]);\n data.target = skeletonData.bones[input.readInt(true)];\n data.local = input.readBoolean();\n data.relative = input.readBoolean();\n data.offsetRotation = input.readFloat();\n data.offsetX = input.readFloat() * scale;\n data.offsetY = input.readFloat() * scale;\n data.offsetScaleX = input.readFloat();\n data.offsetScaleY = input.readFloat();\n data.offsetShearY = input.readFloat();\n data.rotateMix = input.readFloat();\n data.translateMix = input.readFloat();\n data.scaleMix = input.readFloat();\n data.shearMix = input.readFloat();\n skeletonData.transformConstraints.push(data);\n }\n n = input.readInt(true);\n for (var i = 0, nn = void 0; i < n; i++) {\n var data = new spine.PathConstraintData(input.readString());\n data.order = input.readInt(true);\n data.skinRequired = input.readBoolean();\n nn = input.readInt(true);\n for (var ii = 0; ii < nn; ii++)\n data.bones.push(skeletonData.bones[input.readInt(true)]);\n data.target = skeletonData.slots[input.readInt(true)];\n data.positionMode = SkeletonBinary.PositionModeValues[input.readInt(true)];\n data.spacingMode = SkeletonBinary.SpacingModeValues[input.readInt(true)];\n data.rotateMode = SkeletonBinary.RotateModeValues[input.readInt(true)];\n data.offsetRotation = input.readFloat();\n data.position = input.readFloat();\n if (data.positionMode == spine.PositionMode.Fixed)\n data.position *= scale;\n data.spacing = input.readFloat();\n if (data.spacingMode == spine.SpacingMode.Length || data.spacingMode == spine.SpacingMode.Fixed)\n data.spacing *= scale;\n data.rotateMix = input.readFloat();\n data.translateMix = input.readFloat();\n skeletonData.pathConstraints.push(data);\n }\n var defaultSkin = this.readSkin(input, skeletonData, true, nonessential);\n if (defaultSkin != null) {\n skeletonData.defaultSkin = defaultSkin;\n skeletonData.skins.push(defaultSkin);\n }\n {\n var i = skeletonData.skins.length;\n spine.Utils.setArraySize(skeletonData.skins, n = i + input.readInt(true));\n for (; i < n; i++)\n skeletonData.skins[i] = this.readSkin(input, skeletonData, false, nonessential);\n }\n n = this.linkedMeshes.length;\n for (var i = 0; i < n; i++) {\n var linkedMesh = this.linkedMeshes[i];\n var skin = linkedMesh.skin == null ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin);\n if (skin == null)\n throw new Error(\"Skin not found: \" + linkedMesh.skin);\n var parent_3 = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent);\n if (parent_3 == null)\n throw new Error(\"Parent mesh not found: \" + linkedMesh.parent);\n linkedMesh.mesh.deformAttachment = linkedMesh.inheritDeform ? parent_3 : linkedMesh.mesh;\n linkedMesh.mesh.setParentMesh(parent_3);\n linkedMesh.mesh.updateUVs();\n }\n this.linkedMeshes.length = 0;\n n = input.readInt(true);\n for (var i = 0; i < n; i++) {\n var data = new spine.EventData(input.readStringRef());\n data.intValue = input.readInt(false);\n data.floatValue = input.readFloat();\n data.stringValue = input.readString();\n data.audioPath = input.readString();\n if (data.audioPath != null) {\n data.volume = input.readFloat();\n data.balance = input.readFloat();\n }\n skeletonData.events.push(data);\n }\n n = input.readInt(true);\n for (var i = 0; i < n; i++)\n skeletonData.animations.push(this.readAnimation(input, input.readString(), skeletonData));\n return skeletonData;\n };\n SkeletonBinary.prototype.readSkin = function (input, skeletonData, defaultSkin, nonessential) {\n var skin = null;\n var slotCount = 0;\n if (defaultSkin) {\n slotCount = input.readInt(true);\n if (slotCount == 0)\n return null;\n skin = new spine.Skin(\"default\");\n }\n else {\n skin = new spine.Skin(input.readStringRef());\n skin.bones.length = input.readInt(true);\n for (var i = 0, n = skin.bones.length; i < n; i++)\n skin.bones[i] = skeletonData.bones[input.readInt(true)];\n for (var i = 0, n = input.readInt(true); i < n; i++)\n skin.constraints.push(skeletonData.ikConstraints[input.readInt(true)]);\n for (var i = 0, n = input.readInt(true); i < n; i++)\n skin.constraints.push(skeletonData.transformConstraints[input.readInt(true)]);\n for (var i = 0, n = input.readInt(true); i < n; i++)\n skin.constraints.push(skeletonData.pathConstraints[input.readInt(true)]);\n slotCount = input.readInt(true);\n }\n for (var i = 0; i < slotCount; i++) {\n var slotIndex = input.readInt(true);\n for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n var name_3 = input.readStringRef();\n var attachment = this.readAttachment(input, skeletonData, skin, slotIndex, name_3, nonessential);\n if (attachment != null)\n skin.setAttachment(slotIndex, name_3, attachment);\n }\n }\n return skin;\n };\n SkeletonBinary.prototype.readAttachment = function (input, skeletonData, skin, slotIndex, attachmentName, nonessential) {\n var scale = this.scale;\n var name = input.readStringRef();\n if (name == null)\n name = attachmentName;\n var typeIndex = input.readByte();\n var type = SkeletonBinary.AttachmentTypeValues[typeIndex];\n switch (type) {\n case spine.AttachmentType.Region: {\n var path = input.readStringRef();\n var rotation = input.readFloat();\n var x = input.readFloat();\n var y = input.readFloat();\n var scaleX = input.readFloat();\n var scaleY = input.readFloat();\n var width = input.readFloat();\n var height = input.readFloat();\n var color = input.readInt32();\n if (path == null)\n path = name;\n var region = this.attachmentLoader.newRegionAttachment(skin, name, path);\n if (region == null)\n return null;\n region.path = path;\n region.x = x * scale;\n region.y = y * scale;\n region.scaleX = scaleX;\n region.scaleY = scaleY;\n region.rotation = rotation;\n region.width = width * scale;\n region.height = height * scale;\n spine.Color.rgba8888ToColor(region.color, color);\n region.updateOffset();\n return region;\n }\n case spine.AttachmentType.BoundingBox: {\n var vertexCount = input.readInt(true);\n var vertices = this.readVertices(input, vertexCount);\n var color = nonessential ? input.readInt32() : 0;\n var box = this.attachmentLoader.newBoundingBoxAttachment(skin, name);\n if (box == null)\n return null;\n box.worldVerticesLength = vertexCount << 1;\n box.vertices = vertices.vertices;\n box.bones = vertices.bones;\n if (nonessential)\n spine.Color.rgba8888ToColor(box.color, color);\n return box;\n }\n case spine.AttachmentType.Mesh: {\n var path = input.readStringRef();\n var color = input.readInt32();\n var vertexCount = input.readInt(true);\n var uvs = this.readFloatArray(input, vertexCount << 1, 1);\n var triangles = this.readShortArray(input);\n var vertices = this.readVertices(input, vertexCount);\n var hullLength = input.readInt(true);\n var edges = null;\n var width = 0, height = 0;\n if (nonessential) {\n edges = this.readShortArray(input);\n width = input.readFloat();\n height = input.readFloat();\n }\n if (path == null)\n path = name;\n var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path);\n if (mesh == null)\n return null;\n mesh.path = path;\n spine.Color.rgba8888ToColor(mesh.color, color);\n mesh.bones = vertices.bones;\n mesh.vertices = vertices.vertices;\n mesh.worldVerticesLength = vertexCount << 1;\n mesh.triangles = triangles;\n mesh.regionUVs = uvs;\n mesh.updateUVs();\n mesh.hullLength = hullLength << 1;\n if (nonessential) {\n mesh.edges = edges;\n mesh.width = width * scale;\n mesh.height = height * scale;\n }\n return mesh;\n }\n case spine.AttachmentType.LinkedMesh: {\n var path = input.readStringRef();\n var color = input.readInt32();\n var skinName = input.readStringRef();\n var parent_4 = input.readStringRef();\n var inheritDeform = input.readBoolean();\n var width = 0, height = 0;\n if (nonessential) {\n width = input.readFloat();\n height = input.readFloat();\n }\n if (path == null)\n path = name;\n var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path);\n if (mesh == null)\n return null;\n mesh.path = path;\n spine.Color.rgba8888ToColor(mesh.color, color);\n if (nonessential) {\n mesh.width = width * scale;\n mesh.height = height * scale;\n }\n this.linkedMeshes.push(new LinkedMesh(mesh, skinName, slotIndex, parent_4, inheritDeform));\n return mesh;\n }\n case spine.AttachmentType.Path: {\n var closed_1 = input.readBoolean();\n var constantSpeed = input.readBoolean();\n var vertexCount = input.readInt(true);\n var vertices = this.readVertices(input, vertexCount);\n var lengths = spine.Utils.newArray(vertexCount / 3, 0);\n for (var i = 0, n = lengths.length; i < n; i++)\n lengths[i] = input.readFloat() * scale;\n var color = nonessential ? input.readInt32() : 0;\n var path = this.attachmentLoader.newPathAttachment(skin, name);\n if (path == null)\n return null;\n path.closed = closed_1;\n path.constantSpeed = constantSpeed;\n path.worldVerticesLength = vertexCount << 1;\n path.vertices = vertices.vertices;\n path.bones = vertices.bones;\n path.lengths = lengths;\n if (nonessential)\n spine.Color.rgba8888ToColor(path.color, color);\n return path;\n }\n case spine.AttachmentType.Point: {\n var rotation = input.readFloat();\n var x = input.readFloat();\n var y = input.readFloat();\n var color = nonessential ? input.readInt32() : 0;\n var point = this.attachmentLoader.newPointAttachment(skin, name);\n if (point == null)\n return null;\n point.x = x * scale;\n point.y = y * scale;\n point.rotation = rotation;\n if (nonessential)\n spine.Color.rgba8888ToColor(point.color, color);\n return point;\n }\n case spine.AttachmentType.Clipping: {\n var endSlotIndex = input.readInt(true);\n var vertexCount = input.readInt(true);\n var vertices = this.readVertices(input, vertexCount);\n var color = nonessential ? input.readInt32() : 0;\n var clip = this.attachmentLoader.newClippingAttachment(skin, name);\n if (clip == null)\n return null;\n clip.endSlot = skeletonData.slots[endSlotIndex];\n clip.worldVerticesLength = vertexCount << 1;\n clip.vertices = vertices.vertices;\n clip.bones = vertices.bones;\n if (nonessential)\n spine.Color.rgba8888ToColor(clip.color, color);\n return clip;\n }\n }\n return null;\n };\n SkeletonBinary.prototype.readVertices = function (input, vertexCount) {\n var verticesLength = vertexCount << 1;\n var vertices = new Vertices();\n var scale = this.scale;\n if (!input.readBoolean()) {\n vertices.vertices = this.readFloatArray(input, verticesLength, scale);\n return vertices;\n }\n var weights = new Array();\n var bonesArray = new Array();\n for (var i = 0; i < vertexCount; i++) {\n var boneCount = input.readInt(true);\n bonesArray.push(boneCount);\n for (var ii = 0; ii < boneCount; ii++) {\n bonesArray.push(input.readInt(true));\n weights.push(input.readFloat() * scale);\n weights.push(input.readFloat() * scale);\n weights.push(input.readFloat());\n }\n }\n vertices.vertices = spine.Utils.toFloatArray(weights);\n vertices.bones = bonesArray;\n return vertices;\n };\n SkeletonBinary.prototype.readFloatArray = function (input, n, scale) {\n var array = new Array(n);\n if (scale == 1) {\n for (var i = 0; i < n; i++)\n array[i] = input.readFloat();\n }\n else {\n for (var i = 0; i < n; i++)\n array[i] = input.readFloat() * scale;\n }\n return array;\n };\n SkeletonBinary.prototype.readShortArray = function (input) {\n var n = input.readInt(true);\n var array = new Array(n);\n for (var i = 0; i < n; i++)\n array[i] = input.readShort();\n return array;\n };\n SkeletonBinary.prototype.readAnimation = function (input, name, skeletonData) {\n var timelines = new Array();\n var scale = this.scale;\n var duration = 0;\n var tempColor1 = new spine.Color();\n var tempColor2 = new spine.Color();\n for (var i = 0, n = input.readInt(true); i < n; i++) {\n var slotIndex = input.readInt(true);\n for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n var timelineType = input.readByte();\n var frameCount = input.readInt(true);\n switch (timelineType) {\n case SkeletonBinary.SLOT_ATTACHMENT: {\n var timeline = new spine.AttachmentTimeline(frameCount);\n timeline.slotIndex = slotIndex;\n for (var frameIndex = 0; frameIndex < frameCount; frameIndex++)\n timeline.setFrame(frameIndex, input.readFloat(), input.readStringRef());\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[frameCount - 1]);\n break;\n }\n case SkeletonBinary.SLOT_COLOR: {\n var timeline = new spine.ColorTimeline(frameCount);\n timeline.slotIndex = slotIndex;\n for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) {\n var time = input.readFloat();\n spine.Color.rgba8888ToColor(tempColor1, input.readInt32());\n timeline.setFrame(frameIndex, time, tempColor1.r, tempColor1.g, tempColor1.b, tempColor1.a);\n if (frameIndex < frameCount - 1)\n this.readCurve(input, frameIndex, timeline);\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.ColorTimeline.ENTRIES]);\n break;\n }\n case SkeletonBinary.SLOT_TWO_COLOR: {\n var timeline = new spine.TwoColorTimeline(frameCount);\n timeline.slotIndex = slotIndex;\n for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) {\n var time = input.readFloat();\n spine.Color.rgba8888ToColor(tempColor1, input.readInt32());\n spine.Color.rgb888ToColor(tempColor2, input.readInt32());\n timeline.setFrame(frameIndex, time, tempColor1.r, tempColor1.g, tempColor1.b, tempColor1.a, tempColor2.r, tempColor2.g, tempColor2.b);\n if (frameIndex < frameCount - 1)\n this.readCurve(input, frameIndex, timeline);\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.TwoColorTimeline.ENTRIES]);\n break;\n }\n }\n }\n }\n for (var i = 0, n = input.readInt(true); i < n; i++) {\n var boneIndex = input.readInt(true);\n for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n var timelineType = input.readByte();\n var frameCount = input.readInt(true);\n switch (timelineType) {\n case SkeletonBinary.BONE_ROTATE: {\n var timeline = new spine.RotateTimeline(frameCount);\n timeline.boneIndex = boneIndex;\n for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) {\n timeline.setFrame(frameIndex, input.readFloat(), input.readFloat());\n if (frameIndex < frameCount - 1)\n this.readCurve(input, frameIndex, timeline);\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.RotateTimeline.ENTRIES]);\n break;\n }\n case SkeletonBinary.BONE_TRANSLATE:\n case SkeletonBinary.BONE_SCALE:\n case SkeletonBinary.BONE_SHEAR: {\n var timeline = void 0;\n var timelineScale = 1;\n if (timelineType == SkeletonBinary.BONE_SCALE)\n timeline = new spine.ScaleTimeline(frameCount);\n else if (timelineType == SkeletonBinary.BONE_SHEAR)\n timeline = new spine.ShearTimeline(frameCount);\n else {\n timeline = new spine.TranslateTimeline(frameCount);\n timelineScale = scale;\n }\n timeline.boneIndex = boneIndex;\n for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) {\n timeline.setFrame(frameIndex, input.readFloat(), input.readFloat() * timelineScale, input.readFloat() * timelineScale);\n if (frameIndex < frameCount - 1)\n this.readCurve(input, frameIndex, timeline);\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.TranslateTimeline.ENTRIES]);\n break;\n }\n }\n }\n }\n for (var i = 0, n = input.readInt(true); i < n; i++) {\n var index = input.readInt(true);\n var frameCount = input.readInt(true);\n var timeline = new spine.IkConstraintTimeline(frameCount);\n timeline.ikConstraintIndex = index;\n for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) {\n timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat() * scale, input.readByte(), input.readBoolean(), input.readBoolean());\n if (frameIndex < frameCount - 1)\n this.readCurve(input, frameIndex, timeline);\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.IkConstraintTimeline.ENTRIES]);\n }\n for (var i = 0, n = input.readInt(true); i < n; i++) {\n var index = input.readInt(true);\n var frameCount = input.readInt(true);\n var timeline = new spine.TransformConstraintTimeline(frameCount);\n timeline.transformConstraintIndex = index;\n for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) {\n timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat(), input.readFloat(), input.readFloat());\n if (frameIndex < frameCount - 1)\n this.readCurve(input, frameIndex, timeline);\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.TransformConstraintTimeline.ENTRIES]);\n }\n for (var i = 0, n = input.readInt(true); i < n; i++) {\n var index = input.readInt(true);\n var data = skeletonData.pathConstraints[index];\n for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n var timelineType = input.readByte();\n var frameCount = input.readInt(true);\n switch (timelineType) {\n case SkeletonBinary.PATH_POSITION:\n case SkeletonBinary.PATH_SPACING: {\n var timeline = void 0;\n var timelineScale = 1;\n if (timelineType == SkeletonBinary.PATH_SPACING) {\n timeline = new spine.PathConstraintSpacingTimeline(frameCount);\n if (data.spacingMode == spine.SpacingMode.Length || data.spacingMode == spine.SpacingMode.Fixed)\n timelineScale = scale;\n }\n else {\n timeline = new spine.PathConstraintPositionTimeline(frameCount);\n if (data.positionMode == spine.PositionMode.Fixed)\n timelineScale = scale;\n }\n timeline.pathConstraintIndex = index;\n for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) {\n timeline.setFrame(frameIndex, input.readFloat(), input.readFloat() * timelineScale);\n if (frameIndex < frameCount - 1)\n this.readCurve(input, frameIndex, timeline);\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.PathConstraintPositionTimeline.ENTRIES]);\n break;\n }\n case SkeletonBinary.PATH_MIX: {\n var timeline = new spine.PathConstraintMixTimeline(frameCount);\n timeline.pathConstraintIndex = index;\n for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) {\n timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat());\n if (frameIndex < frameCount - 1)\n this.readCurve(input, frameIndex, timeline);\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.PathConstraintMixTimeline.ENTRIES]);\n break;\n }\n }\n }\n }\n for (var i = 0, n = input.readInt(true); i < n; i++) {\n var skin = skeletonData.skins[input.readInt(true)];\n for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n var slotIndex = input.readInt(true);\n for (var iii = 0, nnn = input.readInt(true); iii < nnn; iii++) {\n var attachment = skin.getAttachment(slotIndex, input.readStringRef());\n var weighted = attachment.bones != null;\n var vertices = attachment.vertices;\n var deformLength = weighted ? vertices.length / 3 * 2 : vertices.length;\n var frameCount = input.readInt(true);\n var timeline = new spine.DeformTimeline(frameCount);\n timeline.slotIndex = slotIndex;\n timeline.attachment = attachment;\n for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) {\n var time = input.readFloat();\n var deform = void 0;\n var end = input.readInt(true);\n if (end == 0)\n deform = weighted ? spine.Utils.newFloatArray(deformLength) : vertices;\n else {\n deform = spine.Utils.newFloatArray(deformLength);\n var start = input.readInt(true);\n end += start;\n if (scale == 1) {\n for (var v = start; v < end; v++)\n deform[v] = input.readFloat();\n }\n else {\n for (var v = start; v < end; v++)\n deform[v] = input.readFloat() * scale;\n }\n if (!weighted) {\n for (var v = 0, vn = deform.length; v < vn; v++)\n deform[v] += vertices[v];\n }\n }\n timeline.setFrame(frameIndex, time, deform);\n if (frameIndex < frameCount - 1)\n this.readCurve(input, frameIndex, timeline);\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[frameCount - 1]);\n }\n }\n }\n var drawOrderCount = input.readInt(true);\n if (drawOrderCount > 0) {\n var timeline = new spine.DrawOrderTimeline(drawOrderCount);\n var slotCount = skeletonData.slots.length;\n for (var i = 0; i < drawOrderCount; i++) {\n var time = input.readFloat();\n var offsetCount = input.readInt(true);\n var drawOrder = spine.Utils.newArray(slotCount, 0);\n for (var ii = slotCount - 1; ii >= 0; ii--)\n drawOrder[ii] = -1;\n var unchanged = spine.Utils.newArray(slotCount - offsetCount, 0);\n var originalIndex = 0, unchangedIndex = 0;\n for (var ii = 0; ii < offsetCount; ii++) {\n var slotIndex = input.readInt(true);\n while (originalIndex != slotIndex)\n unchanged[unchangedIndex++] = originalIndex++;\n drawOrder[originalIndex + input.readInt(true)] = originalIndex++;\n }\n while (originalIndex < slotCount)\n unchanged[unchangedIndex++] = originalIndex++;\n for (var ii = slotCount - 1; ii >= 0; ii--)\n if (drawOrder[ii] == -1)\n drawOrder[ii] = unchanged[--unchangedIndex];\n timeline.setFrame(i, time, drawOrder);\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[drawOrderCount - 1]);\n }\n var eventCount = input.readInt(true);\n if (eventCount > 0) {\n var timeline = new spine.EventTimeline(eventCount);\n for (var i = 0; i < eventCount; i++) {\n var time = input.readFloat();\n var eventData = skeletonData.events[input.readInt(true)];\n var event_4 = new spine.Event(time, eventData);\n event_4.intValue = input.readInt(false);\n event_4.floatValue = input.readFloat();\n event_4.stringValue = input.readBoolean() ? input.readString() : eventData.stringValue;\n if (event_4.data.audioPath != null) {\n event_4.volume = input.readFloat();\n event_4.balance = input.readFloat();\n }\n timeline.setFrame(i, event_4);\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[eventCount - 1]);\n }\n return new spine.Animation(name, timelines, duration);\n };\n SkeletonBinary.prototype.readCurve = function (input, frameIndex, timeline) {\n switch (input.readByte()) {\n case SkeletonBinary.CURVE_STEPPED:\n timeline.setStepped(frameIndex);\n break;\n case SkeletonBinary.CURVE_BEZIER:\n this.setCurve(timeline, frameIndex, input.readFloat(), input.readFloat(), input.readFloat(), input.readFloat());\n break;\n }\n };\n SkeletonBinary.prototype.setCurve = function (timeline, frameIndex, cx1, cy1, cx2, cy2) {\n timeline.setCurve(frameIndex, cx1, cy1, cx2, cy2);\n };\n SkeletonBinary.AttachmentTypeValues = [0, 1, 2, 3, 4, 5, 6];\n SkeletonBinary.TransformModeValues = [spine.TransformMode.Normal, spine.TransformMode.OnlyTranslation, spine.TransformMode.NoRotationOrReflection, spine.TransformMode.NoScale, spine.TransformMode.NoScaleOrReflection];\n SkeletonBinary.PositionModeValues = [spine.PositionMode.Fixed, spine.PositionMode.Percent];\n SkeletonBinary.SpacingModeValues = [spine.SpacingMode.Length, spine.SpacingMode.Fixed, spine.SpacingMode.Percent];\n SkeletonBinary.RotateModeValues = [spine.RotateMode.Tangent, spine.RotateMode.Chain, spine.RotateMode.ChainScale];\n SkeletonBinary.BlendModeValues = [spine.BlendMode.Normal, spine.BlendMode.Additive, spine.BlendMode.Multiply, spine.BlendMode.Screen];\n SkeletonBinary.BONE_ROTATE = 0;\n SkeletonBinary.BONE_TRANSLATE = 1;\n SkeletonBinary.BONE_SCALE = 2;\n SkeletonBinary.BONE_SHEAR = 3;\n SkeletonBinary.SLOT_ATTACHMENT = 0;\n SkeletonBinary.SLOT_COLOR = 1;\n SkeletonBinary.SLOT_TWO_COLOR = 2;\n SkeletonBinary.PATH_POSITION = 0;\n SkeletonBinary.PATH_SPACING = 1;\n SkeletonBinary.PATH_MIX = 2;\n SkeletonBinary.CURVE_LINEAR = 0;\n SkeletonBinary.CURVE_STEPPED = 1;\n SkeletonBinary.CURVE_BEZIER = 2;\n return SkeletonBinary;\n }());\n spine.SkeletonBinary = SkeletonBinary;\n var BinaryInput = (function () {\n function BinaryInput(data, strings, index, buffer) {\n if (strings === void 0) { strings = new Array(); }\n if (index === void 0) { index = 0; }\n if (buffer === void 0) { buffer = new DataView(data.buffer); }\n this.strings = strings;\n this.index = index;\n this.buffer = buffer;\n }\n BinaryInput.prototype.readByte = function () {\n return this.buffer.getInt8(this.index++);\n };\n BinaryInput.prototype.readShort = function () {\n var value = this.buffer.getInt16(this.index);\n this.index += 2;\n return value;\n };\n BinaryInput.prototype.readInt32 = function () {\n var value = this.buffer.getInt32(this.index);\n this.index += 4;\n return value;\n };\n BinaryInput.prototype.readInt = function (optimizePositive) {\n var b = this.readByte();\n var result = b & 0x7F;\n if ((b & 0x80) != 0) {\n b = this.readByte();\n result |= (b & 0x7F) << 7;\n if ((b & 0x80) != 0) {\n b = this.readByte();\n result |= (b & 0x7F) << 14;\n if ((b & 0x80) != 0) {\n b = this.readByte();\n result |= (b & 0x7F) << 21;\n if ((b & 0x80) != 0) {\n b = this.readByte();\n result |= (b & 0x7F) << 28;\n }\n }\n }\n }\n return optimizePositive ? result : ((result >>> 1) ^ -(result & 1));\n };\n BinaryInput.prototype.readStringRef = function () {\n var index = this.readInt(true);\n return index == 0 ? null : this.strings[index - 1];\n };\n BinaryInput.prototype.readString = function () {\n var byteCount = this.readInt(true);\n switch (byteCount) {\n case 0:\n return null;\n case 1:\n return \"\";\n }\n byteCount--;\n var chars = \"\";\n var charCount = 0;\n for (var i = 0; i < byteCount;) {\n var b = this.readByte();\n switch (b >> 4) {\n case 12:\n case 13:\n chars += String.fromCharCode(((b & 0x1F) << 6 | this.readByte() & 0x3F));\n i += 2;\n break;\n case 14:\n chars += String.fromCharCode(((b & 0x0F) << 12 | (this.readByte() & 0x3F) << 6 | this.readByte() & 0x3F));\n i += 3;\n break;\n default:\n chars += String.fromCharCode(b);\n i++;\n }\n }\n return chars;\n };\n BinaryInput.prototype.readFloat = function () {\n var value = this.buffer.getFloat32(this.index);\n this.index += 4;\n return value;\n };\n BinaryInput.prototype.readBoolean = function () {\n return this.readByte() != 0;\n };\n return BinaryInput;\n }());\n var LinkedMesh = (function () {\n function LinkedMesh(mesh, skin, slotIndex, parent, inheritDeform) {\n this.mesh = mesh;\n this.skin = skin;\n this.slotIndex = slotIndex;\n this.parent = parent;\n this.inheritDeform = inheritDeform;\n }\n return LinkedMesh;\n }());\n var Vertices = (function () {\n function Vertices(bones, vertices) {\n if (bones === void 0) { bones = null; }\n if (vertices === void 0) { vertices = null; }\n this.bones = bones;\n this.vertices = vertices;\n }\n return Vertices;\n }());\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var SkeletonBounds = (function () {\n function SkeletonBounds() {\n this.minX = 0;\n this.minY = 0;\n this.maxX = 0;\n this.maxY = 0;\n this.boundingBoxes = new Array();\n this.polygons = new Array();\n this.polygonPool = new spine.Pool(function () {\n return spine.Utils.newFloatArray(16);\n });\n }\n SkeletonBounds.prototype.update = function (skeleton, updateAabb) {\n if (skeleton == null)\n throw new Error(\"skeleton cannot be null.\");\n var boundingBoxes = this.boundingBoxes;\n var polygons = this.polygons;\n var polygonPool = this.polygonPool;\n var slots = skeleton.slots;\n var slotCount = slots.length;\n boundingBoxes.length = 0;\n polygonPool.freeAll(polygons);\n polygons.length = 0;\n for (var i = 0; i < slotCount; i++) {\n var slot = slots[i];\n if (!slot.bone.active)\n continue;\n var attachment = slot.getAttachment();\n if (attachment instanceof spine.BoundingBoxAttachment) {\n var boundingBox = attachment;\n boundingBoxes.push(boundingBox);\n var polygon = polygonPool.obtain();\n if (polygon.length != boundingBox.worldVerticesLength) {\n polygon = spine.Utils.newFloatArray(boundingBox.worldVerticesLength);\n }\n polygons.push(polygon);\n boundingBox.computeWorldVertices(slot, 0, boundingBox.worldVerticesLength, polygon, 0, 2);\n }\n }\n if (updateAabb) {\n this.aabbCompute();\n }\n else {\n this.minX = Number.POSITIVE_INFINITY;\n this.minY = Number.POSITIVE_INFINITY;\n this.maxX = Number.NEGATIVE_INFINITY;\n this.maxY = Number.NEGATIVE_INFINITY;\n }\n };\n SkeletonBounds.prototype.aabbCompute = function () {\n var minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY;\n var polygons = this.polygons;\n for (var i = 0, n = polygons.length; i < n; i++) {\n var polygon = polygons[i];\n var vertices = polygon;\n for (var ii = 0, nn = polygon.length; ii < nn; ii += 2) {\n var x = vertices[ii];\n var y = vertices[ii + 1];\n minX = Math.min(minX, x);\n minY = Math.min(minY, y);\n maxX = Math.max(maxX, x);\n maxY = Math.max(maxY, y);\n }\n }\n this.minX = minX;\n this.minY = minY;\n this.maxX = maxX;\n this.maxY = maxY;\n };\n SkeletonBounds.prototype.aabbContainsPoint = function (x, y) {\n return x >= this.minX && x <= this.maxX && y >= this.minY && y <= this.maxY;\n };\n SkeletonBounds.prototype.aabbIntersectsSegment = function (x1, y1, x2, y2) {\n var minX = this.minX;\n var minY = this.minY;\n var maxX = this.maxX;\n var maxY = this.maxY;\n if ((x1 <= minX && x2 <= minX) || (y1 <= minY && y2 <= minY) || (x1 >= maxX && x2 >= maxX) || (y1 >= maxY && y2 >= maxY))\n return false;\n var m = (y2 - y1) / (x2 - x1);\n var y = m * (minX - x1) + y1;\n if (y > minY && y < maxY)\n return true;\n y = m * (maxX - x1) + y1;\n if (y > minY && y < maxY)\n return true;\n var x = (minY - y1) / m + x1;\n if (x > minX && x < maxX)\n return true;\n x = (maxY - y1) / m + x1;\n if (x > minX && x < maxX)\n return true;\n return false;\n };\n SkeletonBounds.prototype.aabbIntersectsSkeleton = function (bounds) {\n return this.minX < bounds.maxX && this.maxX > bounds.minX && this.minY < bounds.maxY && this.maxY > bounds.minY;\n };\n SkeletonBounds.prototype.containsPoint = function (x, y) {\n var polygons = this.polygons;\n for (var i = 0, n = polygons.length; i < n; i++)\n if (this.containsPointPolygon(polygons[i], x, y))\n return this.boundingBoxes[i];\n return null;\n };\n SkeletonBounds.prototype.containsPointPolygon = function (polygon, x, y) {\n var vertices = polygon;\n var nn = polygon.length;\n var prevIndex = nn - 2;\n var inside = false;\n for (var ii = 0; ii < nn; ii += 2) {\n var vertexY = vertices[ii + 1];\n var prevY = vertices[prevIndex + 1];\n if ((vertexY < y && prevY >= y) || (prevY < y && vertexY >= y)) {\n var vertexX = vertices[ii];\n if (vertexX + (y - vertexY) / (prevY - vertexY) * (vertices[prevIndex] - vertexX) < x)\n inside = !inside;\n }\n prevIndex = ii;\n }\n return inside;\n };\n SkeletonBounds.prototype.intersectsSegment = function (x1, y1, x2, y2) {\n var polygons = this.polygons;\n for (var i = 0, n = polygons.length; i < n; i++)\n if (this.intersectsSegmentPolygon(polygons[i], x1, y1, x2, y2))\n return this.boundingBoxes[i];\n return null;\n };\n SkeletonBounds.prototype.intersectsSegmentPolygon = function (polygon, x1, y1, x2, y2) {\n var vertices = polygon;\n var nn = polygon.length;\n var width12 = x1 - x2, height12 = y1 - y2;\n var det1 = x1 * y2 - y1 * x2;\n var x3 = vertices[nn - 2], y3 = vertices[nn - 1];\n for (var ii = 0; ii < nn; ii += 2) {\n var x4 = vertices[ii], y4 = vertices[ii + 1];\n var det2 = x3 * y4 - y3 * x4;\n var width34 = x3 - x4, height34 = y3 - y4;\n var det3 = width12 * height34 - height12 * width34;\n var x = (det1 * width34 - width12 * det2) / det3;\n if (((x >= x3 && x <= x4) || (x >= x4 && x <= x3)) && ((x >= x1 && x <= x2) || (x >= x2 && x <= x1))) {\n var y = (det1 * height34 - height12 * det2) / det3;\n if (((y >= y3 && y <= y4) || (y >= y4 && y <= y3)) && ((y >= y1 && y <= y2) || (y >= y2 && y <= y1)))\n return true;\n }\n x3 = x4;\n y3 = y4;\n }\n return false;\n };\n SkeletonBounds.prototype.getPolygon = function (boundingBox) {\n if (boundingBox == null)\n throw new Error(\"boundingBox cannot be null.\");\n var index = this.boundingBoxes.indexOf(boundingBox);\n return index == -1 ? null : this.polygons[index];\n };\n SkeletonBounds.prototype.getWidth = function () {\n return this.maxX - this.minX;\n };\n SkeletonBounds.prototype.getHeight = function () {\n return this.maxY - this.minY;\n };\n return SkeletonBounds;\n }());\n spine.SkeletonBounds = SkeletonBounds;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var SkeletonClipping = (function () {\n function SkeletonClipping() {\n this.triangulator = new spine.Triangulator();\n this.clippingPolygon = new Array();\n this.clipOutput = new Array();\n this.clippedVertices = new Array();\n this.clippedTriangles = new Array();\n this.scratch = new Array();\n }\n SkeletonClipping.prototype.clipStart = function (slot, clip) {\n if (this.clipAttachment != null)\n return 0;\n this.clipAttachment = clip;\n var n = clip.worldVerticesLength;\n var vertices = spine.Utils.setArraySize(this.clippingPolygon, n);\n clip.computeWorldVertices(slot, 0, n, vertices, 0, 2);\n var clippingPolygon = this.clippingPolygon;\n SkeletonClipping.makeClockwise(clippingPolygon);\n var clippingPolygons = this.clippingPolygons = this.triangulator.decompose(clippingPolygon, this.triangulator.triangulate(clippingPolygon));\n for (var i = 0, n_1 = clippingPolygons.length; i < n_1; i++) {\n var polygon = clippingPolygons[i];\n SkeletonClipping.makeClockwise(polygon);\n polygon.push(polygon[0]);\n polygon.push(polygon[1]);\n }\n return clippingPolygons.length;\n };\n SkeletonClipping.prototype.clipEndWithSlot = function (slot) {\n if (this.clipAttachment != null && this.clipAttachment.endSlot == slot.data)\n this.clipEnd();\n };\n SkeletonClipping.prototype.clipEnd = function () {\n if (this.clipAttachment == null)\n return;\n this.clipAttachment = null;\n this.clippingPolygons = null;\n this.clippedVertices.length = 0;\n this.clippedTriangles.length = 0;\n this.clippingPolygon.length = 0;\n };\n SkeletonClipping.prototype.isClipping = function () {\n return this.clipAttachment != null;\n };\n SkeletonClipping.prototype.clipTriangles = function (vertices, verticesLength, triangles, trianglesLength, uvs, light, dark, twoColor, stride, originIndexOffset, originVertOffset, originUVSOffset) {\n var clipOutput = this.clipOutput, clippedVertices = this.clippedVertices;\n var clippedTriangles = this.clippedTriangles;\n var polygons = this.clippingPolygons;\n var polygonsCount = this.clippingPolygons.length;\n var vertexSize = twoColor ? 12 : 8;\n var index = 0;\n\n originIndexOffset = originIndexOffset || 0;\n originVertOffset = originVertOffset || 0;\n originUVSOffset = originUVSOffset || 0;\n\n clippedVertices.length = 0;\n clippedTriangles.length = 0;\n outer: for (var i = originIndexOffset, n = originIndexOffset + trianglesLength; i < n; i += 3) {\n var vertexOffset = triangles[i] * stride;\n var xyOffset = vertexOffset + originVertOffset;\n var uvOffset = vertexOffset + originUVSOffset;\n var x1 = vertices[xyOffset], y1 = vertices[xyOffset + 1];\n var u1 = uvs[uvOffset], v1 = uvs[uvOffset + 1];\n \n vertexOffset = triangles[i + 1] * stride;\n xyOffset = vertexOffset + originVertOffset;\n uvOffset = vertexOffset + originUVSOffset;\n var x2 = vertices[xyOffset], y2 = vertices[xyOffset + 1];\n var u2 = uvs[uvOffset], v2 = uvs[uvOffset + 1];\n \n vertexOffset = triangles[i + 2] * stride;\n xyOffset = vertexOffset + originVertOffset;\n uvOffset = vertexOffset + originUVSOffset;\n var x3 = vertices[xyOffset], y3 = vertices[xyOffset + 1];\n var u3 = uvs[uvOffset], v3 = uvs[uvOffset + 1];\n \n for (var p = 0; p < polygonsCount; p++) {\n var s = clippedVertices.length;\n if (this.clip(x1, y1, x2, y2, x3, y3, polygons[p], clipOutput)) {\n var clipOutputLength = clipOutput.length;\n if (clipOutputLength == 0)\n continue;\n var d0 = y2 - y3, d1 = x3 - x2, d2 = x1 - x3, d4 = y3 - y1;\n var d = 1 / (d0 * d2 + d1 * (y1 - y3));\n var clipOutputCount = clipOutputLength >> 1;\n var clipOutputItems = this.clipOutput;\n var clippedVerticesItems = spine.Utils.setArraySize(clippedVertices, s + clipOutputCount * vertexSize);\n for (var ii = 0; ii < clipOutputLength; ii += 2) {\n var x = clipOutputItems[ii], y = clipOutputItems[ii + 1];\n clippedVerticesItems[s] = x;\n clippedVerticesItems[s + 1] = y;\n clippedVerticesItems[s + 2] = light.r;\n clippedVerticesItems[s + 3] = light.g;\n clippedVerticesItems[s + 4] = light.b;\n clippedVerticesItems[s + 5] = light.a;\n var c0 = x - x3, c1 = y - y3;\n var a = (d0 * c0 + d1 * c1) * d;\n var b = (d4 * c0 + d2 * c1) * d;\n var c = 1 - a - b;\n clippedVerticesItems[s + 6] = u1 * a + u2 * b + u3 * c;\n clippedVerticesItems[s + 7] = v1 * a + v2 * b + v3 * c;\n if (twoColor) {\n clippedVerticesItems[s + 8] = dark.r;\n clippedVerticesItems[s + 9] = dark.g;\n clippedVerticesItems[s + 10] = dark.b;\n clippedVerticesItems[s + 11] = dark.a;\n }\n s += vertexSize;\n }\n s = clippedTriangles.length;\n var clippedTrianglesItems = spine.Utils.setArraySize(clippedTriangles, s + 3 * (clipOutputCount - 2));\n clipOutputCount--;\n for (var ii = 1; ii < clipOutputCount; ii++) {\n clippedTrianglesItems[s] = index;\n clippedTrianglesItems[s + 1] = (index + ii);\n clippedTrianglesItems[s + 2] = (index + ii + 1);\n s += 3;\n }\n index += clipOutputCount + 1;\n }\n else {\n var clippedVerticesItems = spine.Utils.setArraySize(clippedVertices, s + 3 * vertexSize);\n clippedVerticesItems[s] = x1;\n clippedVerticesItems[s + 1] = y1;\n clippedVerticesItems[s + 2] = light.r;\n clippedVerticesItems[s + 3] = light.g;\n clippedVerticesItems[s + 4] = light.b;\n clippedVerticesItems[s + 5] = light.a;\n if (!twoColor) {\n clippedVerticesItems[s + 6] = u1;\n clippedVerticesItems[s + 7] = v1;\n clippedVerticesItems[s + 8] = x2;\n clippedVerticesItems[s + 9] = y2;\n clippedVerticesItems[s + 10] = light.r;\n clippedVerticesItems[s + 11] = light.g;\n clippedVerticesItems[s + 12] = light.b;\n clippedVerticesItems[s + 13] = light.a;\n clippedVerticesItems[s + 14] = u2;\n clippedVerticesItems[s + 15] = v2;\n clippedVerticesItems[s + 16] = x3;\n clippedVerticesItems[s + 17] = y3;\n clippedVerticesItems[s + 18] = light.r;\n clippedVerticesItems[s + 19] = light.g;\n clippedVerticesItems[s + 20] = light.b;\n clippedVerticesItems[s + 21] = light.a;\n clippedVerticesItems[s + 22] = u3;\n clippedVerticesItems[s + 23] = v3;\n }\n else {\n clippedVerticesItems[s + 6] = u1;\n clippedVerticesItems[s + 7] = v1;\n clippedVerticesItems[s + 8] = dark.r;\n clippedVerticesItems[s + 9] = dark.g;\n clippedVerticesItems[s + 10] = dark.b;\n clippedVerticesItems[s + 11] = dark.a;\n clippedVerticesItems[s + 12] = x2;\n clippedVerticesItems[s + 13] = y2;\n clippedVerticesItems[s + 14] = light.r;\n clippedVerticesItems[s + 15] = light.g;\n clippedVerticesItems[s + 16] = light.b;\n clippedVerticesItems[s + 17] = light.a;\n clippedVerticesItems[s + 18] = u2;\n clippedVerticesItems[s + 19] = v2;\n clippedVerticesItems[s + 20] = dark.r;\n clippedVerticesItems[s + 21] = dark.g;\n clippedVerticesItems[s + 22] = dark.b;\n clippedVerticesItems[s + 23] = dark.a;\n clippedVerticesItems[s + 24] = x3;\n clippedVerticesItems[s + 25] = y3;\n clippedVerticesItems[s + 26] = light.r;\n clippedVerticesItems[s + 27] = light.g;\n clippedVerticesItems[s + 28] = light.b;\n clippedVerticesItems[s + 29] = light.a;\n clippedVerticesItems[s + 30] = u3;\n clippedVerticesItems[s + 31] = v3;\n clippedVerticesItems[s + 32] = dark.r;\n clippedVerticesItems[s + 33] = dark.g;\n clippedVerticesItems[s + 34] = dark.b;\n clippedVerticesItems[s + 35] = dark.a;\n }\n s = clippedTriangles.length;\n var clippedTrianglesItems = spine.Utils.setArraySize(clippedTriangles, s + 3);\n clippedTrianglesItems[s] = index;\n clippedTrianglesItems[s + 1] = (index + 1);\n clippedTrianglesItems[s + 2] = (index + 2);\n index += 3;\n continue outer;\n }\n }\n }\n };\n SkeletonClipping.prototype.clip = function (x1, y1, x2, y2, x3, y3, clippingArea, output) {\n var originalOutput = output;\n var clipped = false;\n var input = null;\n if (clippingArea.length % 4 >= 2) {\n input = output;\n output = this.scratch;\n }\n else\n input = this.scratch;\n input.length = 0;\n input.push(x1);\n input.push(y1);\n input.push(x2);\n input.push(y2);\n input.push(x3);\n input.push(y3);\n input.push(x1);\n input.push(y1);\n output.length = 0;\n var clippingVertices = clippingArea;\n var clippingVerticesLast = clippingArea.length - 4;\n for (var i = 0;; i += 2) {\n var edgeX = clippingVertices[i], edgeY = clippingVertices[i + 1];\n var edgeX2 = clippingVertices[i + 2], edgeY2 = clippingVertices[i + 3];\n var deltaX = edgeX - edgeX2, deltaY = edgeY - edgeY2;\n var inputVertices = input;\n var inputVerticesLength = input.length - 2, outputStart = output.length;\n for (var ii = 0; ii < inputVerticesLength; ii += 2) {\n var inputX = inputVertices[ii], inputY = inputVertices[ii + 1];\n var inputX2 = inputVertices[ii + 2], inputY2 = inputVertices[ii + 3];\n var side2 = deltaX * (inputY2 - edgeY2) - deltaY * (inputX2 - edgeX2) > 0;\n if (deltaX * (inputY - edgeY2) - deltaY * (inputX - edgeX2) > 0) {\n if (side2) {\n output.push(inputX2);\n output.push(inputY2);\n continue;\n }\n var c0 = inputY2 - inputY, c2 = inputX2 - inputX;\n var s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY);\n if (Math.abs(s) > 0.000001) {\n var ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s;\n output.push(edgeX + (edgeX2 - edgeX) * ua);\n output.push(edgeY + (edgeY2 - edgeY) * ua);\n }\n else {\n output.push(edgeX);\n output.push(edgeY);\n }\n }\n else if (side2) {\n var c0 = inputY2 - inputY, c2 = inputX2 - inputX;\n var s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY);\n if (Math.abs(s) > 0.000001) {\n var ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s;\n output.push(edgeX + (edgeX2 - edgeX) * ua);\n output.push(edgeY + (edgeY2 - edgeY) * ua);\n }\n else {\n output.push(edgeX);\n output.push(edgeY);\n }\n output.push(inputX2);\n output.push(inputY2);\n }\n clipped = true;\n }\n if (outputStart == output.length) {\n originalOutput.length = 0;\n return true;\n }\n output.push(output[0]);\n output.push(output[1]);\n if (i == clippingVerticesLast)\n break;\n var temp = output;\n output = input;\n output.length = 0;\n input = temp;\n }\n if (originalOutput != output) {\n originalOutput.length = 0;\n for (var i = 0, n = output.length - 2; i < n; i++)\n originalOutput[i] = output[i];\n }\n else\n originalOutput.length = originalOutput.length - 2;\n return clipped;\n };\n SkeletonClipping.makeClockwise = function (polygon) {\n var vertices = polygon;\n var verticeslength = polygon.length;\n var area = vertices[verticeslength - 2] * vertices[1] - vertices[0] * vertices[verticeslength - 1], p1x = 0, p1y = 0, p2x = 0, p2y = 0;\n for (var i = 0, n = verticeslength - 3; i < n; i += 2) {\n p1x = vertices[i];\n p1y = vertices[i + 1];\n p2x = vertices[i + 2];\n p2y = vertices[i + 3];\n area += p1x * p2y - p2x * p1y;\n }\n if (area < 0)\n return;\n for (var i = 0, lastX = verticeslength - 2, n = verticeslength >> 1; i < n; i += 2) {\n var x = vertices[i], y = vertices[i + 1];\n var other = lastX - i;\n vertices[i] = vertices[other];\n vertices[i + 1] = vertices[other + 1];\n vertices[other] = x;\n vertices[other + 1] = y;\n }\n };\n return SkeletonClipping;\n }());\n spine.SkeletonClipping = SkeletonClipping;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var SkeletonData = (function () {\n function SkeletonData() {\n this.bones = new Array();\n this.slots = new Array();\n this.skins = new Array();\n this.events = new Array();\n this.animations = new Array();\n this.ikConstraints = new Array();\n this.transformConstraints = new Array();\n this.pathConstraints = new Array();\n this.fps = 0;\n }\n SkeletonData.prototype.findBone = function (boneName) {\n if (boneName == null)\n throw new Error(\"boneName cannot be null.\");\n var bones = this.bones;\n for (var i = 0, n = bones.length; i < n; i++) {\n var bone = bones[i];\n if (bone.name == boneName)\n return bone;\n }\n return null;\n };\n SkeletonData.prototype.findBoneIndex = function (boneName) {\n if (boneName == null)\n throw new Error(\"boneName cannot be null.\");\n var bones = this.bones;\n for (var i = 0, n = bones.length; i < n; i++)\n if (bones[i].name == boneName)\n return i;\n return -1;\n };\n SkeletonData.prototype.findSlot = function (slotName) {\n if (slotName == null)\n throw new Error(\"slotName cannot be null.\");\n var slots = this.slots;\n for (var i = 0, n = slots.length; i < n; i++) {\n var slot = slots[i];\n if (slot.name == slotName)\n return slot;\n }\n return null;\n };\n SkeletonData.prototype.findSlotIndex = function (slotName) {\n if (slotName == null)\n throw new Error(\"slotName cannot be null.\");\n var slots = this.slots;\n for (var i = 0, n = slots.length; i < n; i++)\n if (slots[i].name == slotName)\n return i;\n return -1;\n };\n SkeletonData.prototype.findSkin = function (skinName) {\n if (skinName == null)\n throw new Error(\"skinName cannot be null.\");\n var skins = this.skins;\n for (var i = 0, n = skins.length; i < n; i++) {\n var skin = skins[i];\n if (skin.name == skinName)\n return skin;\n }\n return null;\n };\n SkeletonData.prototype.findEvent = function (eventDataName) {\n if (eventDataName == null)\n throw new Error(\"eventDataName cannot be null.\");\n var events = this.events;\n for (var i = 0, n = events.length; i < n; i++) {\n var event_5 = events[i];\n if (event_5.name == eventDataName)\n return event_5;\n }\n return null;\n };\n SkeletonData.prototype.findAnimation = function (animationName) {\n if (animationName == null)\n throw new Error(\"animationName cannot be null.\");\n var animations = this.animations;\n for (var i = 0, n = animations.length; i < n; i++) {\n var animation = animations[i];\n if (animation.name == animationName)\n return animation;\n }\n return null;\n };\n SkeletonData.prototype.findIkConstraint = function (constraintName) {\n if (constraintName == null)\n throw new Error(\"constraintName cannot be null.\");\n var ikConstraints = this.ikConstraints;\n for (var i = 0, n = ikConstraints.length; i < n; i++) {\n var constraint = ikConstraints[i];\n if (constraint.name == constraintName)\n return constraint;\n }\n return null;\n };\n SkeletonData.prototype.findTransformConstraint = function (constraintName) {\n if (constraintName == null)\n throw new Error(\"constraintName cannot be null.\");\n var transformConstraints = this.transformConstraints;\n for (var i = 0, n = transformConstraints.length; i < n; i++) {\n var constraint = transformConstraints[i];\n if (constraint.name == constraintName)\n return constraint;\n }\n return null;\n };\n SkeletonData.prototype.findPathConstraint = function (constraintName) {\n if (constraintName == null)\n throw new Error(\"constraintName cannot be null.\");\n var pathConstraints = this.pathConstraints;\n for (var i = 0, n = pathConstraints.length; i < n; i++) {\n var constraint = pathConstraints[i];\n if (constraint.name == constraintName)\n return constraint;\n }\n return null;\n };\n SkeletonData.prototype.findPathConstraintIndex = function (pathConstraintName) {\n if (pathConstraintName == null)\n throw new Error(\"pathConstraintName cannot be null.\");\n var pathConstraints = this.pathConstraints;\n for (var i = 0, n = pathConstraints.length; i < n; i++)\n if (pathConstraints[i].name == pathConstraintName)\n return i;\n return -1;\n };\n return SkeletonData;\n }());\n spine.SkeletonData = SkeletonData;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var SkeletonJson = (function () {\n function SkeletonJson(attachmentLoader) {\n this.scale = 1;\n this.linkedMeshes = new Array();\n this.attachmentLoader = attachmentLoader;\n }\n SkeletonJson.prototype.readSkeletonData = function (json) {\n var scale = this.scale;\n var skeletonData = new spine.SkeletonData();\n var root = typeof (json) === \"string\" ? JSON.parse(json) : json;\n var skeletonMap = root.skeleton;\n if (skeletonMap != null) {\n skeletonData.hash = skeletonMap.hash;\n skeletonData.version = skeletonMap.spine;\n skeletonData.x = skeletonMap.x;\n skeletonData.y = skeletonMap.y;\n skeletonData.width = skeletonMap.width;\n skeletonData.height = skeletonMap.height;\n skeletonData.fps = skeletonMap.fps;\n skeletonData.imagesPath = skeletonMap.images;\n }\n if (root.bones) {\n for (var i = 0; i < root.bones.length; i++) {\n var boneMap = root.bones[i];\n var parent_5 = null;\n var parentName = this.getValue(boneMap, \"parent\", null);\n if (parentName != null) {\n parent_5 = skeletonData.findBone(parentName);\n if (parent_5 == null)\n throw new Error(\"Parent bone not found: \" + parentName);\n }\n var data = new spine.BoneData(skeletonData.bones.length, boneMap.name, parent_5);\n data.length = this.getValue(boneMap, \"length\", 0) * scale;\n data.x = this.getValue(boneMap, \"x\", 0) * scale;\n data.y = this.getValue(boneMap, \"y\", 0) * scale;\n data.rotation = this.getValue(boneMap, \"rotation\", 0);\n data.scaleX = this.getValue(boneMap, \"scaleX\", 1);\n data.scaleY = this.getValue(boneMap, \"scaleY\", 1);\n data.shearX = this.getValue(boneMap, \"shearX\", 0);\n data.shearY = this.getValue(boneMap, \"shearY\", 0);\n data.transformMode = SkeletonJson.transformModeFromString(this.getValue(boneMap, \"transform\", \"normal\"));\n data.skinRequired = this.getValue(boneMap, \"skin\", false);\n skeletonData.bones.push(data);\n }\n }\n if (root.slots) {\n for (var i = 0; i < root.slots.length; i++) {\n var slotMap = root.slots[i];\n var slotName = slotMap.name;\n var boneName = slotMap.bone;\n var boneData = skeletonData.findBone(boneName);\n if (boneData == null)\n throw new Error(\"Slot bone not found: \" + boneName);\n var data = new spine.SlotData(skeletonData.slots.length, slotName, boneData);\n var color = this.getValue(slotMap, \"color\", null);\n if (color != null)\n data.color.setFromString(color);\n var dark = this.getValue(slotMap, \"dark\", null);\n if (dark != null) {\n data.darkColor = new spine.Color(1, 1, 1, 1);\n data.darkColor.setFromString(dark);\n }\n data.attachmentName = this.getValue(slotMap, \"attachment\", null);\n data.blendMode = SkeletonJson.blendModeFromString(this.getValue(slotMap, \"blend\", \"normal\"));\n skeletonData.slots.push(data);\n }\n }\n if (root.ik) {\n for (var i = 0; i < root.ik.length; i++) {\n var constraintMap = root.ik[i];\n var data = new spine.IkConstraintData(constraintMap.name);\n data.order = this.getValue(constraintMap, \"order\", 0);\n data.skinRequired = this.getValue(constraintMap, \"skin\", false);\n for (var j = 0; j < constraintMap.bones.length; j++) {\n var boneName = constraintMap.bones[j];\n var bone = skeletonData.findBone(boneName);\n if (bone == null)\n throw new Error(\"IK bone not found: \" + boneName);\n data.bones.push(bone);\n }\n var targetName = constraintMap.target;\n data.target = skeletonData.findBone(targetName);\n if (data.target == null)\n throw new Error(\"IK target bone not found: \" + targetName);\n data.mix = this.getValue(constraintMap, \"mix\", 1);\n data.softness = this.getValue(constraintMap, \"softness\", 0) * scale;\n data.bendDirection = this.getValue(constraintMap, \"bendPositive\", true) ? 1 : -1;\n data.compress = this.getValue(constraintMap, \"compress\", false);\n data.stretch = this.getValue(constraintMap, \"stretch\", false);\n data.uniform = this.getValue(constraintMap, \"uniform\", false);\n skeletonData.ikConstraints.push(data);\n }\n }\n if (root.transform) {\n for (var i = 0; i < root.transform.length; i++) {\n var constraintMap = root.transform[i];\n var data = new spine.TransformConstraintData(constraintMap.name);\n data.order = this.getValue(constraintMap, \"order\", 0);\n data.skinRequired = this.getValue(constraintMap, \"skin\", false);\n for (var j = 0; j < constraintMap.bones.length; j++) {\n var boneName = constraintMap.bones[j];\n var bone = skeletonData.findBone(boneName);\n if (bone == null)\n throw new Error(\"Transform constraint bone not found: \" + boneName);\n data.bones.push(bone);\n }\n var targetName = constraintMap.target;\n data.target = skeletonData.findBone(targetName);\n if (data.target == null)\n throw new Error(\"Transform constraint target bone not found: \" + targetName);\n data.local = this.getValue(constraintMap, \"local\", false);\n data.relative = this.getValue(constraintMap, \"relative\", false);\n data.offsetRotation = this.getValue(constraintMap, \"rotation\", 0);\n data.offsetX = this.getValue(constraintMap, \"x\", 0) * scale;\n data.offsetY = this.getValue(constraintMap, \"y\", 0) * scale;\n data.offsetScaleX = this.getValue(constraintMap, \"scaleX\", 0);\n data.offsetScaleY = this.getValue(constraintMap, \"scaleY\", 0);\n data.offsetShearY = this.getValue(constraintMap, \"shearY\", 0);\n data.rotateMix = this.getValue(constraintMap, \"rotateMix\", 1);\n data.translateMix = this.getValue(constraintMap, \"translateMix\", 1);\n data.scaleMix = this.getValue(constraintMap, \"scaleMix\", 1);\n data.shearMix = this.getValue(constraintMap, \"shearMix\", 1);\n skeletonData.transformConstraints.push(data);\n }\n }\n if (root.path) {\n for (var i = 0; i < root.path.length; i++) {\n var constraintMap = root.path[i];\n var data = new spine.PathConstraintData(constraintMap.name);\n data.order = this.getValue(constraintMap, \"order\", 0);\n data.skinRequired = this.getValue(constraintMap, \"skin\", false);\n for (var j = 0; j < constraintMap.bones.length; j++) {\n var boneName = constraintMap.bones[j];\n var bone = skeletonData.findBone(boneName);\n if (bone == null)\n throw new Error(\"Transform constraint bone not found: \" + boneName);\n data.bones.push(bone);\n }\n var targetName = constraintMap.target;\n data.target = skeletonData.findSlot(targetName);\n if (data.target == null)\n throw new Error(\"Path target slot not found: \" + targetName);\n data.positionMode = SkeletonJson.positionModeFromString(this.getValue(constraintMap, \"positionMode\", \"percent\"));\n data.spacingMode = SkeletonJson.spacingModeFromString(this.getValue(constraintMap, \"spacingMode\", \"length\"));\n data.rotateMode = SkeletonJson.rotateModeFromString(this.getValue(constraintMap, \"rotateMode\", \"tangent\"));\n data.offsetRotation = this.getValue(constraintMap, \"rotation\", 0);\n data.position = this.getValue(constraintMap, \"position\", 0);\n if (data.positionMode == spine.PositionMode.Fixed)\n data.position *= scale;\n data.spacing = this.getValue(constraintMap, \"spacing\", 0);\n if (data.spacingMode == spine.SpacingMode.Length || data.spacingMode == spine.SpacingMode.Fixed)\n data.spacing *= scale;\n data.rotateMix = this.getValue(constraintMap, \"rotateMix\", 1);\n data.translateMix = this.getValue(constraintMap, \"translateMix\", 1);\n skeletonData.pathConstraints.push(data);\n }\n }\n if (root.skins) {\n var skins = root.skins;\n var isArray = skins instanceof Array;\n if (!isArray) {\n var skinArr = [];\n for (var skinName in skins) {\n skinArr.push({name: skinName, attachments: skins[skinName]});\n }\n skins = skinArr;\n }\n for (var i = 0; i < skins.length; i++) {\n var skinMap = skins[i];\n var skin = new spine.Skin(skinMap.name);\n if (skinMap.bones) {\n for (var ii = 0; ii < skinMap.bones.length; ii++) {\n var bone = skeletonData.findBone(skinMap.bones[ii]);\n if (bone == null)\n throw new Error(\"Skin bone not found: \" + skinMap.bones[i]);\n skin.bones.push(bone);\n }\n }\n if (skinMap.ik) {\n for (var ii = 0; ii < skinMap.ik.length; ii++) {\n var constraint = skeletonData.findIkConstraint(skinMap.ik[ii]);\n if (constraint == null)\n throw new Error(\"Skin IK constraint not found: \" + skinMap.ik[i]);\n skin.constraints.push(constraint);\n }\n }\n if (skinMap.transform) {\n for (var ii = 0; ii < skinMap.transform.length; ii++) {\n var constraint = skeletonData.findTransformConstraint(skinMap.transform[ii]);\n if (constraint == null)\n throw new Error(\"Skin transform constraint not found: \" + skinMap.transform[i]);\n skin.constraints.push(constraint);\n }\n }\n if (skinMap.path) {\n for (var ii = 0; ii < skinMap.path.length; ii++) {\n var constraint = skeletonData.findPathConstraint(skinMap.path[ii]);\n if (constraint == null)\n throw new Error(\"Skin path constraint not found: \" + skinMap.path[i]);\n skin.constraints.push(constraint);\n }\n }\n for (var slotName in skinMap.attachments) {\n var slot = skeletonData.findSlot(slotName);\n if (slot == null)\n throw new Error(\"Slot not found: \" + slotName);\n var slotMap = skinMap.attachments[slotName];\n for (var entryName in slotMap) {\n var attachment = this.readAttachment(slotMap[entryName], skin, slot.index, entryName, skeletonData);\n if (attachment != null)\n skin.setAttachment(slot.index, entryName, attachment);\n }\n }\n skeletonData.skins.push(skin);\n if (skin.name == \"default\")\n skeletonData.defaultSkin = skin;\n }\n }\n for (var i = 0, n = this.linkedMeshes.length; i < n; i++) {\n var linkedMesh = this.linkedMeshes[i];\n var skin = linkedMesh.skin == null ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin);\n if (skin == null)\n throw new Error(\"Skin not found: \" + linkedMesh.skin);\n var parent_6 = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent);\n if (parent_6 == null)\n throw new Error(\"Parent mesh not found: \" + linkedMesh.parent);\n linkedMesh.mesh.deformAttachment = linkedMesh.inheritDeform ? parent_6 : linkedMesh.mesh;\n linkedMesh.mesh.setParentMesh(parent_6);\n linkedMesh.mesh.updateUVs();\n }\n this.linkedMeshes.length = 0;\n if (root.events) {\n for (var eventName in root.events) {\n var eventMap = root.events[eventName];\n var data = new spine.EventData(eventName);\n data.intValue = this.getValue(eventMap, \"int\", 0);\n data.floatValue = this.getValue(eventMap, \"float\", 0);\n data.stringValue = this.getValue(eventMap, \"string\", \"\");\n data.audioPath = this.getValue(eventMap, \"audio\", null);\n if (data.audioPath != null) {\n data.volume = this.getValue(eventMap, \"volume\", 1);\n data.balance = this.getValue(eventMap, \"balance\", 0);\n }\n skeletonData.events.push(data);\n }\n }\n if (root.animations) {\n for (var animationName in root.animations) {\n var animationMap = root.animations[animationName];\n this.readAnimation(animationMap, animationName, skeletonData);\n }\n }\n return skeletonData;\n };\n SkeletonJson.prototype.readAttachment = function (map, skin, slotIndex, name, skeletonData) {\n var scale = this.scale;\n name = this.getValue(map, \"name\", name);\n var type = this.getValue(map, \"type\", \"region\");\n switch (type) {\n case \"region\": {\n var path = this.getValue(map, \"path\", name);\n var region = this.attachmentLoader.newRegionAttachment(skin, name, path);\n if (region == null)\n return null;\n region.path = path;\n region.x = this.getValue(map, \"x\", 0) * scale;\n region.y = this.getValue(map, \"y\", 0) * scale;\n region.scaleX = this.getValue(map, \"scaleX\", 1);\n region.scaleY = this.getValue(map, \"scaleY\", 1);\n region.rotation = this.getValue(map, \"rotation\", 0);\n region.width = map.width * scale;\n region.height = map.height * scale;\n var color = this.getValue(map, \"color\", null);\n if (color != null)\n region.color.setFromString(color);\n region.updateOffset();\n return region;\n }\n case \"boundingbox\": {\n var box = this.attachmentLoader.newBoundingBoxAttachment(skin, name);\n if (box == null)\n return null;\n this.readVertices(map, box, map.vertexCount << 1);\n var color = this.getValue(map, \"color\", null);\n if (color != null)\n box.color.setFromString(color);\n return box;\n }\n case \"mesh\":\n case \"linkedmesh\": {\n var path = this.getValue(map, \"path\", name);\n var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path);\n if (mesh == null)\n return null;\n mesh.path = path;\n var color = this.getValue(map, \"color\", null);\n if (color != null)\n mesh.color.setFromString(color);\n mesh.width = this.getValue(map, \"width\", 0) * scale;\n mesh.height = this.getValue(map, \"height\", 0) * scale;\n var parent_7 = this.getValue(map, \"parent\", null);\n if (parent_7 != null) {\n this.linkedMeshes.push(new LinkedMesh(mesh, this.getValue(map, \"skin\", null), slotIndex, parent_7, this.getValue(map, \"deform\", true)));\n return mesh;\n }\n var uvs = map.uvs;\n this.readVertices(map, mesh, uvs.length);\n mesh.triangles = map.triangles;\n mesh.regionUVs = uvs;\n mesh.updateUVs();\n mesh.edges = this.getValue(map, \"edges\", null);\n mesh.hullLength = this.getValue(map, \"hull\", 0) * 2;\n return mesh;\n }\n case \"path\": {\n var path = this.attachmentLoader.newPathAttachment(skin, name);\n if (path == null)\n return null;\n path.closed = this.getValue(map, \"closed\", false);\n path.constantSpeed = this.getValue(map, \"constantSpeed\", true);\n var vertexCount = map.vertexCount;\n this.readVertices(map, path, vertexCount << 1);\n var lengths = spine.Utils.newArray(vertexCount / 3, 0);\n for (var i = 0; i < map.lengths.length; i++)\n lengths[i] = map.lengths[i] * scale;\n path.lengths = lengths;\n var color = this.getValue(map, \"color\", null);\n if (color != null)\n path.color.setFromString(color);\n return path;\n }\n case \"point\": {\n var point = this.attachmentLoader.newPointAttachment(skin, name);\n if (point == null)\n return null;\n point.x = this.getValue(map, \"x\", 0) * scale;\n point.y = this.getValue(map, \"y\", 0) * scale;\n point.rotation = this.getValue(map, \"rotation\", 0);\n var color = this.getValue(map, \"color\", null);\n if (color != null)\n point.color.setFromString(color);\n return point;\n }\n case \"clipping\": {\n var clip = this.attachmentLoader.newClippingAttachment(skin, name);\n if (clip == null)\n return null;\n var end = this.getValue(map, \"end\", null);\n if (end != null) {\n var slot = skeletonData.findSlot(end);\n if (slot == null)\n throw new Error(\"Clipping end slot not found: \" + end);\n clip.endSlot = slot;\n }\n var vertexCount = map.vertexCount;\n this.readVertices(map, clip, vertexCount << 1);\n var color = this.getValue(map, \"color\", null);\n if (color != null)\n clip.color.setFromString(color);\n return clip;\n }\n }\n return null;\n };\n SkeletonJson.prototype.readVertices = function (map, attachment, verticesLength) {\n var scale = this.scale;\n attachment.worldVerticesLength = verticesLength;\n var vertices = map.vertices;\n if (verticesLength == vertices.length) {\n var scaledVertices = spine.Utils.toFloatArray(vertices);\n if (scale != 1) {\n for (var i = 0, n = vertices.length; i < n; i++)\n scaledVertices[i] *= scale;\n }\n attachment.vertices = scaledVertices;\n return;\n }\n var weights = new Array();\n var bones = new Array();\n for (var i = 0, n = vertices.length; i < n;) {\n var boneCount = vertices[i++];\n bones.push(boneCount);\n for (var nn = i + boneCount * 4; i < nn; i += 4) {\n bones.push(vertices[i]);\n weights.push(vertices[i + 1] * scale);\n weights.push(vertices[i + 2] * scale);\n weights.push(vertices[i + 3]);\n }\n }\n attachment.bones = bones;\n attachment.vertices = spine.Utils.toFloatArray(weights);\n };\n SkeletonJson.prototype.readAnimation = function (map, name, skeletonData) {\n var scale = this.scale;\n var timelines = new Array();\n var duration = 0;\n if (map.slots) {\n for (var slotName in map.slots) {\n var slotMap = map.slots[slotName];\n var slotIndex = skeletonData.findSlotIndex(slotName);\n if (slotIndex == -1)\n throw new Error(\"Slot not found: \" + slotName);\n for (var timelineName in slotMap) {\n var timelineMap = slotMap[timelineName];\n if (timelineName == \"attachment\") {\n var timeline = new spine.AttachmentTimeline(timelineMap.length);\n timeline.slotIndex = slotIndex;\n var frameIndex = 0;\n for (var i = 0; i < timelineMap.length; i++) {\n var valueMap = timelineMap[i];\n timeline.setFrame(frameIndex++, this.getValue(valueMap, \"time\", 0), valueMap.name);\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]);\n }\n else if (timelineName == \"color\") {\n var timeline = new spine.ColorTimeline(timelineMap.length);\n timeline.slotIndex = slotIndex;\n var frameIndex = 0;\n for (var i = 0; i < timelineMap.length; i++) {\n var valueMap = timelineMap[i];\n var color = new spine.Color();\n color.setFromString(valueMap.color);\n timeline.setFrame(frameIndex, this.getValue(valueMap, \"time\", 0), color.r, color.g, color.b, color.a);\n this.readCurve(valueMap, timeline, frameIndex);\n frameIndex++;\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.ColorTimeline.ENTRIES]);\n }\n else if (timelineName == \"twoColor\") {\n var timeline = new spine.TwoColorTimeline(timelineMap.length);\n timeline.slotIndex = slotIndex;\n var frameIndex = 0;\n for (var i = 0; i < timelineMap.length; i++) {\n var valueMap = timelineMap[i];\n var light = new spine.Color();\n var dark = new spine.Color();\n light.setFromString(valueMap.light);\n dark.setFromString(valueMap.dark);\n timeline.setFrame(frameIndex, this.getValue(valueMap, \"time\", 0), light.r, light.g, light.b, light.a, dark.r, dark.g, dark.b);\n this.readCurve(valueMap, timeline, frameIndex);\n frameIndex++;\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.TwoColorTimeline.ENTRIES]);\n }\n else\n throw new Error(\"Invalid timeline type for a slot: \" + timelineName + \" (\" + slotName + \")\");\n }\n }\n }\n if (map.bones) {\n for (var boneName in map.bones) {\n var boneMap = map.bones[boneName];\n var boneIndex = skeletonData.findBoneIndex(boneName);\n if (boneIndex == -1)\n throw new Error(\"Bone not found: \" + boneName);\n for (var timelineName in boneMap) {\n var timelineMap = boneMap[timelineName];\n if (timelineName === \"rotate\") {\n var timeline = new spine.RotateTimeline(timelineMap.length);\n timeline.boneIndex = boneIndex;\n var frameIndex = 0;\n for (var i = 0; i < timelineMap.length; i++) {\n var valueMap = timelineMap[i];\n timeline.setFrame(frameIndex, this.getValue(valueMap, \"time\", 0), this.getValue(valueMap, \"angle\", 0));\n this.readCurve(valueMap, timeline, frameIndex);\n frameIndex++;\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.RotateTimeline.ENTRIES]);\n }\n else if (timelineName === \"translate\" || timelineName === \"scale\" || timelineName === \"shear\") {\n var timeline = null;\n var timelineScale = 1, defaultValue = 0;\n if (timelineName === \"scale\") {\n timeline = new spine.ScaleTimeline(timelineMap.length);\n defaultValue = 1;\n }\n else if (timelineName === \"shear\")\n timeline = new spine.ShearTimeline(timelineMap.length);\n else {\n timeline = new spine.TranslateTimeline(timelineMap.length);\n timelineScale = scale;\n }\n timeline.boneIndex = boneIndex;\n var frameIndex = 0;\n for (var i = 0; i < timelineMap.length; i++) {\n var valueMap = timelineMap[i];\n var x = this.getValue(valueMap, \"x\", defaultValue), y = this.getValue(valueMap, \"y\", defaultValue);\n timeline.setFrame(frameIndex, this.getValue(valueMap, \"time\", 0), x * timelineScale, y * timelineScale);\n this.readCurve(valueMap, timeline, frameIndex);\n frameIndex++;\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.TranslateTimeline.ENTRIES]);\n }\n else\n throw new Error(\"Invalid timeline type for a bone: \" + timelineName + \" (\" + boneName + \")\");\n }\n }\n }\n if (map.ik) {\n for (var constraintName in map.ik) {\n var constraintMap = map.ik[constraintName];\n var constraint = skeletonData.findIkConstraint(constraintName);\n var timeline = new spine.IkConstraintTimeline(constraintMap.length);\n timeline.ikConstraintIndex = skeletonData.ikConstraints.indexOf(constraint);\n var frameIndex = 0;\n for (var i = 0; i < constraintMap.length; i++) {\n var valueMap = constraintMap[i];\n timeline.setFrame(frameIndex, this.getValue(valueMap, \"time\", 0), this.getValue(valueMap, \"mix\", 1), this.getValue(valueMap, \"softness\", 0) * scale, this.getValue(valueMap, \"bendPositive\", true) ? 1 : -1, this.getValue(valueMap, \"compress\", false), this.getValue(valueMap, \"stretch\", false));\n this.readCurve(valueMap, timeline, frameIndex);\n frameIndex++;\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.IkConstraintTimeline.ENTRIES]);\n }\n }\n if (map.transform) {\n for (var constraintName in map.transform) {\n var constraintMap = map.transform[constraintName];\n var constraint = skeletonData.findTransformConstraint(constraintName);\n var timeline = new spine.TransformConstraintTimeline(constraintMap.length);\n timeline.transformConstraintIndex = skeletonData.transformConstraints.indexOf(constraint);\n var frameIndex = 0;\n for (var i = 0; i < constraintMap.length; i++) {\n var valueMap = constraintMap[i];\n timeline.setFrame(frameIndex, this.getValue(valueMap, \"time\", 0), this.getValue(valueMap, \"rotateMix\", 1), this.getValue(valueMap, \"translateMix\", 1), this.getValue(valueMap, \"scaleMix\", 1), this.getValue(valueMap, \"shearMix\", 1));\n this.readCurve(valueMap, timeline, frameIndex);\n frameIndex++;\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.TransformConstraintTimeline.ENTRIES]);\n }\n }\n let mapPath = map.path || map.paths;\n if (mapPath) {\n for (var constraintName in mapPath) {\n var constraintMap = mapPath[constraintName];\n var index = skeletonData.findPathConstraintIndex(constraintName);\n if (index == -1)\n throw new Error(\"Path constraint not found: \" + constraintName);\n var data = skeletonData.pathConstraints[index];\n for (var timelineName in constraintMap) {\n var timelineMap = constraintMap[timelineName];\n if (timelineName === \"position\" || timelineName === \"spacing\") {\n var timeline = null;\n var timelineScale = 1;\n if (timelineName === \"spacing\") {\n timeline = new spine.PathConstraintSpacingTimeline(timelineMap.length);\n if (data.spacingMode == spine.SpacingMode.Length || data.spacingMode == spine.SpacingMode.Fixed)\n timelineScale = scale;\n }\n else {\n timeline = new spine.PathConstraintPositionTimeline(timelineMap.length);\n if (data.positionMode == spine.PositionMode.Fixed)\n timelineScale = scale;\n }\n timeline.pathConstraintIndex = index;\n var frameIndex = 0;\n for (var i = 0; i < timelineMap.length; i++) {\n var valueMap = timelineMap[i];\n timeline.setFrame(frameIndex, this.getValue(valueMap, \"time\", 0), this.getValue(valueMap, timelineName, 0) * timelineScale);\n this.readCurve(valueMap, timeline, frameIndex);\n frameIndex++;\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.PathConstraintPositionTimeline.ENTRIES]);\n }\n else if (timelineName === \"mix\") {\n var timeline = new spine.PathConstraintMixTimeline(timelineMap.length);\n timeline.pathConstraintIndex = index;\n var frameIndex = 0;\n for (var i = 0; i < timelineMap.length; i++) {\n var valueMap = timelineMap[i];\n timeline.setFrame(frameIndex, this.getValue(valueMap, \"time\", 0), this.getValue(valueMap, \"rotateMix\", 1), this.getValue(valueMap, \"translateMix\", 1));\n this.readCurve(valueMap, timeline, frameIndex);\n frameIndex++;\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.PathConstraintMixTimeline.ENTRIES]);\n }\n }\n }\n }\n if (map.deform) {\n for (var deformName in map.deform) {\n var deformMap = map.deform[deformName];\n var skin = skeletonData.findSkin(deformName);\n if (skin == null)\n throw new Error(\"Skin not found: \" + deformName);\n for (var slotName in deformMap) {\n var slotMap = deformMap[slotName];\n var slotIndex = skeletonData.findSlotIndex(slotName);\n if (slotIndex == -1)\n throw new Error(\"Slot not found: \" + slotMap.name);\n for (var timelineName in slotMap) {\n var timelineMap = slotMap[timelineName];\n var attachment = skin.getAttachment(slotIndex, timelineName);\n if (attachment == null) {\n // throw new Error(\"Deform attachment not found: \" + timelineMap.name);\n continue;\n }\n var weighted = attachment.bones != null;\n var vertices = attachment.vertices;\n var deformLength = weighted ? vertices.length / 3 * 2 : vertices.length;\n var timeline = new spine.DeformTimeline(timelineMap.length);\n timeline.slotIndex = slotIndex;\n timeline.attachment = attachment;\n var frameIndex = 0;\n for (var j = 0; j < timelineMap.length; j++) {\n var valueMap = timelineMap[j];\n var deform = void 0;\n var verticesValue = this.getValue(valueMap, \"vertices\", null);\n if (verticesValue == null)\n deform = weighted ? spine.Utils.newFloatArray(deformLength) : vertices;\n else {\n deform = spine.Utils.newFloatArray(deformLength);\n var start = this.getValue(valueMap, \"offset\", 0);\n spine.Utils.arrayCopy(verticesValue, 0, deform, start, verticesValue.length);\n if (scale != 1) {\n for (var i = start, n = i + verticesValue.length; i < n; i++)\n deform[i] *= scale;\n }\n if (!weighted) {\n for (var i = 0; i < deformLength; i++)\n deform[i] += vertices[i];\n }\n }\n timeline.setFrame(frameIndex, this.getValue(valueMap, \"time\", 0), deform);\n this.readCurve(valueMap, timeline, frameIndex);\n frameIndex++;\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]);\n }\n }\n }\n }\n var drawOrderNode = map.drawOrder;\n if (drawOrderNode == null)\n drawOrderNode = map.draworder;\n if (drawOrderNode != null) {\n var timeline = new spine.DrawOrderTimeline(drawOrderNode.length);\n var slotCount = skeletonData.slots.length;\n var frameIndex = 0;\n for (var j = 0; j < drawOrderNode.length; j++) {\n var drawOrderMap = drawOrderNode[j];\n var drawOrder = null;\n var offsets = this.getValue(drawOrderMap, \"offsets\", null);\n if (offsets != null) {\n drawOrder = spine.Utils.newArray(slotCount, -1);\n var unchanged = spine.Utils.newArray(slotCount - offsets.length, 0);\n var originalIndex = 0, unchangedIndex = 0;\n for (var i = 0; i < offsets.length; i++) {\n var offsetMap = offsets[i];\n var slotIndex = skeletonData.findSlotIndex(offsetMap.slot);\n if (slotIndex == -1)\n throw new Error(\"Slot not found: \" + offsetMap.slot);\n while (originalIndex != slotIndex)\n unchanged[unchangedIndex++] = originalIndex++;\n drawOrder[originalIndex + offsetMap.offset] = originalIndex++;\n }\n while (originalIndex < slotCount)\n unchanged[unchangedIndex++] = originalIndex++;\n for (var i = slotCount - 1; i >= 0; i--)\n if (drawOrder[i] == -1)\n drawOrder[i] = unchanged[--unchangedIndex];\n }\n timeline.setFrame(frameIndex++, this.getValue(drawOrderMap, \"time\", 0), drawOrder);\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]);\n }\n if (map.events) {\n var timeline = new spine.EventTimeline(map.events.length);\n var frameIndex = 0;\n for (var i = 0; i < map.events.length; i++) {\n var eventMap = map.events[i];\n var eventData = skeletonData.findEvent(eventMap.name);\n if (eventData == null)\n throw new Error(\"Event not found: \" + eventMap.name);\n var event_6 = new spine.Event(spine.Utils.toSinglePrecision(this.getValue(eventMap, \"time\", 0)), eventData);\n event_6.intValue = this.getValue(eventMap, \"int\", eventData.intValue);\n event_6.floatValue = this.getValue(eventMap, \"float\", eventData.floatValue);\n event_6.stringValue = this.getValue(eventMap, \"string\", eventData.stringValue);\n if (event_6.data.audioPath != null) {\n event_6.volume = this.getValue(eventMap, \"volume\", 1);\n event_6.balance = this.getValue(eventMap, \"balance\", 0);\n }\n timeline.setFrame(frameIndex++, event_6);\n }\n timelines.push(timeline);\n duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]);\n }\n if (isNaN(duration)) {\n throw new Error(\"Error while parsing animation, duration is NaN\");\n }\n skeletonData.animations.push(new spine.Animation(name, timelines, duration));\n };\n SkeletonJson.prototype.readCurve = function (map, timeline, frameIndex) {\n var curve = map.curve;\n if (!curve)\n return;\n if (curve == \"stepped\") {\n timeline.setStepped(frameIndex);\n } else if (Object.prototype.toString.call(curve) === '[object Array]') {\n timeline.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);\n } else {\n timeline.setCurve(frameIndex, curve, this.getValue(map, \"c2\", 0), this.getValue(map, \"c3\", 1), this.getValue(map, \"c4\", 1));\n }\n };\n SkeletonJson.prototype.getValue = function (map, prop, defaultValue) {\n return map[prop] !== undefined ? map[prop] : defaultValue;\n };\n SkeletonJson.blendModeFromString = function (str) {\n str = str.toLowerCase();\n if (str == \"normal\")\n return spine.BlendMode.Normal;\n if (str == \"additive\")\n return spine.BlendMode.Additive;\n if (str == \"multiply\")\n return spine.BlendMode.Multiply;\n if (str == \"screen\")\n return spine.BlendMode.Screen;\n throw new Error(\"Unknown blend mode: \" + str);\n };\n SkeletonJson.positionModeFromString = function (str) {\n str = str.toLowerCase();\n if (str == \"fixed\")\n return spine.PositionMode.Fixed;\n if (str == \"percent\")\n return spine.PositionMode.Percent;\n throw new Error(\"Unknown position mode: \" + str);\n };\n SkeletonJson.spacingModeFromString = function (str) {\n str = str.toLowerCase();\n if (str == \"length\")\n return spine.SpacingMode.Length;\n if (str == \"fixed\")\n return spine.SpacingMode.Fixed;\n if (str == \"percent\")\n return spine.SpacingMode.Percent;\n throw new Error(\"Unknown position mode: \" + str);\n };\n SkeletonJson.rotateModeFromString = function (str) {\n str = str.toLowerCase();\n if (str == \"tangent\")\n return spine.RotateMode.Tangent;\n if (str == \"chain\")\n return spine.RotateMode.Chain;\n if (str == \"chainscale\")\n return spine.RotateMode.ChainScale;\n throw new Error(\"Unknown rotate mode: \" + str);\n };\n SkeletonJson.transformModeFromString = function (str) {\n str = str.toLowerCase();\n if (str == \"normal\")\n return spine.TransformMode.Normal;\n if (str == \"onlytranslation\")\n return spine.TransformMode.OnlyTranslation;\n if (str == \"norotationorreflection\")\n return spine.TransformMode.NoRotationOrReflection;\n if (str == \"noscale\")\n return spine.TransformMode.NoScale;\n if (str == \"noscaleorreflection\")\n return spine.TransformMode.NoScaleOrReflection;\n throw new Error(\"Unknown transform mode: \" + str);\n };\n return SkeletonJson;\n }());\n spine.SkeletonJson = SkeletonJson;\n var LinkedMesh = (function () {\n function LinkedMesh(mesh, skin, slotIndex, parent, inheritDeform) {\n this.mesh = mesh;\n this.skin = skin;\n this.slotIndex = slotIndex;\n this.parent = parent;\n this.inheritDeform = inheritDeform;\n }\n return LinkedMesh;\n }());\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var SkinEntry = (function () {\n function SkinEntry(slotIndex, name, attachment) {\n this.slotIndex = slotIndex;\n this.name = name;\n this.attachment = attachment;\n }\n return SkinEntry;\n }());\n spine.SkinEntry = SkinEntry;\n var Skin = (function () {\n function Skin(name) {\n this.attachments = new Array();\n this.bones = Array();\n this.constraints = new Array();\n if (name == null)\n throw new Error(\"name cannot be null.\");\n this.name = name;\n }\n Skin.prototype.setAttachment = function (slotIndex, name, attachment) {\n if (attachment == null)\n throw new Error(\"attachment cannot be null.\");\n var attachments = this.attachments;\n if (slotIndex >= attachments.length)\n attachments.length = slotIndex + 1;\n if (!attachments[slotIndex])\n attachments[slotIndex] = {};\n attachments[slotIndex][name] = attachment;\n };\n Skin.prototype.addSkin = function (skin) {\n for (var i = 0; i < skin.bones.length; i++) {\n var bone = skin.bones[i];\n var contained = false;\n for (var j = 0; j < this.bones.length; j++) {\n if (this.bones[j] == bone) {\n contained = true;\n break;\n }\n }\n if (!contained)\n this.bones.push(bone);\n }\n for (var i = 0; i < skin.constraints.length; i++) {\n var constraint = skin.constraints[i];\n var contained = false;\n for (var j = 0; j < this.constraints.length; j++) {\n if (this.constraints[j] == constraint) {\n contained = true;\n break;\n }\n }\n if (!contained)\n this.constraints.push(constraint);\n }\n var attachments = skin.getAttachments();\n for (var i = 0; i < attachments.length; i++) {\n var attachment = attachments[i];\n this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment);\n }\n };\n Skin.prototype.copySkin = function (skin) {\n for (var i = 0; i < skin.bones.length; i++) {\n var bone = skin.bones[i];\n var contained = false;\n for (var j = 0; j < this.bones.length; j++) {\n if (this.bones[j] == bone) {\n contained = true;\n break;\n }\n }\n if (!contained)\n this.bones.push(bone);\n }\n for (var i = 0; i < skin.constraints.length; i++) {\n var constraint = skin.constraints[i];\n var contained = false;\n for (var j = 0; j < this.constraints.length; j++) {\n if (this.constraints[j] == constraint) {\n contained = true;\n break;\n }\n }\n if (!contained)\n this.constraints.push(constraint);\n }\n var attachments = skin.getAttachments();\n for (var i = 0; i < attachments.length; i++) {\n var attachment = attachments[i];\n if (attachment.attachment == null)\n continue;\n if (attachment.attachment instanceof spine.MeshAttachment) {\n attachment.attachment = attachment.attachment.newLinkedMesh();\n this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment);\n }\n else {\n attachment.attachment = attachment.attachment.copy();\n this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment);\n }\n }\n };\n Skin.prototype.getAttachment = function (slotIndex, name) {\n var dictionary = this.attachments[slotIndex];\n return dictionary ? dictionary[name] : null;\n };\n Skin.prototype.removeAttachment = function (slotIndex, name) {\n var dictionary = this.attachments[slotIndex];\n if (dictionary)\n dictionary[name] = null;\n };\n Skin.prototype.getAttachments = function () {\n var entries = new Array();\n for (var i = 0; i < this.attachments.length; i++) {\n var slotAttachments = this.attachments[i];\n if (slotAttachments) {\n for (var name_4 in slotAttachments) {\n var attachment = slotAttachments[name_4];\n if (attachment)\n entries.push(new SkinEntry(i, name_4, attachment));\n }\n }\n }\n return entries;\n };\n Skin.prototype.getAttachmentsForSlot = function (slotIndex, attachments) {\n var slotAttachments = this.attachments[slotIndex];\n if (slotAttachments) {\n for (var name_5 in slotAttachments) {\n var attachment = slotAttachments[name_5];\n if (attachment)\n attachments.push(new SkinEntry(slotIndex, name_5, attachment));\n }\n }\n };\n Skin.prototype.clear = function () {\n this.attachments.length = 0;\n this.bones.length = 0;\n this.constraints.length = 0;\n };\n Skin.prototype.attachAll = function (skeleton, oldSkin) {\n var slotIndex = 0;\n for (var i = 0; i < skeleton.slots.length; i++) {\n var slot = skeleton.slots[i];\n var slotAttachment = slot.getAttachment();\n if (slotAttachment && slotIndex < oldSkin.attachments.length) {\n var dictionary = oldSkin.attachments[slotIndex];\n for (var key in dictionary) {\n var skinAttachment = dictionary[key];\n if (slotAttachment == skinAttachment) {\n var attachment = this.getAttachment(slotIndex, key);\n if (attachment != null)\n slot.setAttachment(attachment);\n break;\n }\n }\n }\n slotIndex++;\n }\n };\n return Skin;\n }());\n spine.Skin = Skin;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var Slot = (function () {\n function Slot(data, bone) {\n this.deform = new Array();\n if (data == null)\n throw new Error(\"data cannot be null.\");\n if (bone == null)\n throw new Error(\"bone cannot be null.\");\n this.data = data;\n this.bone = bone;\n this.color = new spine.Color();\n this.darkColor = data.darkColor == null ? null : new spine.Color();\n this.setToSetupPose();\n }\n Slot.prototype.getSkeleton = function () {\n return this.bone.skeleton;\n };\n Slot.prototype.getAttachment = function () {\n return this.attachment;\n };\n Slot.prototype.setAttachment = function (attachment) {\n if (this.attachment == attachment)\n return;\n this.attachment = attachment;\n this.attachmentTime = this.bone.skeleton.time;\n this.deform.length = 0;\n };\n Slot.prototype.setAttachmentTime = function (time) {\n this.attachmentTime = this.bone.skeleton.time - time;\n };\n Slot.prototype.getAttachmentTime = function () {\n return this.bone.skeleton.time - this.attachmentTime;\n };\n Slot.prototype.setToSetupPose = function () {\n this.color.setFromColor(this.data.color);\n if (this.darkColor != null)\n this.darkColor.setFromColor(this.data.darkColor);\n if (this.data.attachmentName == null)\n this.attachment = null;\n else {\n this.attachment = null;\n this.setAttachment(this.bone.skeleton.getAttachment(this.data.index, this.data.attachmentName));\n }\n };\n return Slot;\n }());\n spine.Slot = Slot;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var SlotData = (function () {\n function SlotData(index, name, boneData) {\n this.color = new spine.Color(1, 1, 1, 1);\n if (index < 0)\n throw new Error(\"index must be >= 0.\");\n if (name == null)\n throw new Error(\"name cannot be null.\");\n if (boneData == null)\n throw new Error(\"boneData cannot be null.\");\n this.index = index;\n this.name = name;\n this.boneData = boneData;\n }\n return SlotData;\n }());\n spine.SlotData = SlotData;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var Texture = (function () {\n function Texture(image) {\n this._image = image;\n }\n Texture.prototype.getImage = function () {\n return this._image;\n };\n Texture.filterFromString = function (text) {\n switch (text.toLowerCase()) {\n case \"nearest\": return TextureFilter.Nearest;\n case \"linear\": return TextureFilter.Linear;\n case \"mipmap\": return TextureFilter.MipMap;\n case \"mipmapnearestnearest\": return TextureFilter.MipMapNearestNearest;\n case \"mipmaplinearnearest\": return TextureFilter.MipMapLinearNearest;\n case \"mipmapnearestlinear\": return TextureFilter.MipMapNearestLinear;\n case \"mipmaplinearlinear\": return TextureFilter.MipMapLinearLinear;\n default: throw new Error(\"Unknown texture filter \" + text);\n }\n };\n Texture.wrapFromString = function (text) {\n switch (text.toLowerCase()) {\n case \"mirroredtepeat\": return TextureWrap.MirroredRepeat;\n case \"clamptoedge\": return TextureWrap.ClampToEdge;\n case \"repeat\": return TextureWrap.Repeat;\n default: throw new Error(\"Unknown texture wrap \" + text);\n }\n };\n return Texture;\n }());\n spine.Texture = Texture;\n var TextureFilter;\n (function (TextureFilter) {\n TextureFilter[TextureFilter[\"Nearest\"] = 9728] = \"Nearest\";\n TextureFilter[TextureFilter[\"Linear\"] = 9729] = \"Linear\";\n TextureFilter[TextureFilter[\"MipMap\"] = 9987] = \"MipMap\";\n TextureFilter[TextureFilter[\"MipMapNearestNearest\"] = 9984] = \"MipMapNearestNearest\";\n TextureFilter[TextureFilter[\"MipMapLinearNearest\"] = 9985] = \"MipMapLinearNearest\";\n TextureFilter[TextureFilter[\"MipMapNearestLinear\"] = 9986] = \"MipMapNearestLinear\";\n TextureFilter[TextureFilter[\"MipMapLinearLinear\"] = 9987] = \"MipMapLinearLinear\";\n })(TextureFilter = spine.TextureFilter || (spine.TextureFilter = {}));\n var TextureWrap;\n (function (TextureWrap) {\n TextureWrap[TextureWrap[\"MirroredRepeat\"] = 33648] = \"MirroredRepeat\";\n TextureWrap[TextureWrap[\"ClampToEdge\"] = 33071] = \"ClampToEdge\";\n TextureWrap[TextureWrap[\"Repeat\"] = 10497] = \"Repeat\";\n })(TextureWrap = spine.TextureWrap || (spine.TextureWrap = {}));\n var TextureRegion = (function () {\n function TextureRegion() {\n this.u = 0;\n this.v = 0;\n this.u2 = 0;\n this.v2 = 0;\n this.width = 0;\n this.height = 0;\n this.rotate = false;\n this.offsetX = 0;\n this.offsetY = 0;\n this.originalWidth = 0;\n this.originalHeight = 0;\n }\n return TextureRegion;\n }());\n spine.TextureRegion = TextureRegion;\n var FakeTexture = (function (_super) {\n __extends(FakeTexture, _super);\n function FakeTexture() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n FakeTexture.prototype.setFilters = function (minFilter, magFilter) { };\n FakeTexture.prototype.setWraps = function (uWrap, vWrap) { };\n FakeTexture.prototype.dispose = function () { };\n return FakeTexture;\n }(Texture));\n spine.FakeTexture = FakeTexture;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var TextureAtlas = (function () {\n function TextureAtlas(atlasText, textureLoader) {\n this.pages = new Array();\n this.regions = new Array();\n this.load(atlasText, textureLoader);\n }\n TextureAtlas.prototype.load = function (atlasText, textureLoader) {\n if (textureLoader == null)\n throw new Error(\"textureLoader cannot be null.\");\n var reader = new TextureAtlasReader(atlasText);\n var tuple = new Array(4);\n var page = null;\n while (true) {\n var line = reader.readLine();\n if (line == null)\n break;\n line = line.trim();\n if (line.length == 0)\n page = null;\n else if (!page) {\n page = new TextureAtlasPage();\n page.name = line;\n if (reader.readTuple(tuple) == 2) {\n page.width = parseInt(tuple[0]);\n page.height = parseInt(tuple[1]);\n reader.readTuple(tuple);\n }\n reader.readTuple(tuple);\n page.minFilter = spine.Texture.filterFromString(tuple[0]);\n page.magFilter = spine.Texture.filterFromString(tuple[1]);\n var direction = reader.readValue();\n page.uWrap = spine.TextureWrap.ClampToEdge;\n page.vWrap = spine.TextureWrap.ClampToEdge;\n if (direction == \"x\")\n page.uWrap = spine.TextureWrap.Repeat;\n else if (direction == \"y\")\n page.vWrap = spine.TextureWrap.Repeat;\n else if (direction == \"xy\")\n page.uWrap = page.vWrap = spine.TextureWrap.Repeat;\n page.texture = textureLoader(line);\n page.texture.setFilters(page.minFilter, page.magFilter);\n page.texture.setWraps(page.uWrap, page.vWrap);\n page.width = page.texture.getImage().width;\n page.height = page.texture.getImage().height;\n this.pages.push(page);\n }\n else {\n var region = new TextureAtlasRegion();\n region.name = line;\n region.page = page;\n var rotateValue = reader.readValue();\n if (rotateValue.toLocaleLowerCase() == \"true\") {\n region.degrees = 90;\n }\n else if (rotateValue.toLocaleLowerCase() == \"false\") {\n region.degrees = 0;\n }\n else {\n region.degrees = parseFloat(rotateValue);\n }\n region.rotate = region.degrees == 90;\n reader.readTuple(tuple);\n var x = parseInt(tuple[0]);\n var y = parseInt(tuple[1]);\n reader.readTuple(tuple);\n var width = parseInt(tuple[0]);\n var height = parseInt(tuple[1]);\n region.u = x / page.width;\n region.v = y / page.height;\n if (region.rotate) {\n region.u2 = (x + height) / page.width;\n region.v2 = (y + width) / page.height;\n }\n else {\n region.u2 = (x + width) / page.width;\n region.v2 = (y + height) / page.height;\n }\n region.x = x;\n region.y = y;\n region.width = Math.abs(width);\n region.height = Math.abs(height);\n if (reader.readTuple(tuple) == 4) {\n if (reader.readTuple(tuple) == 4) {\n reader.readTuple(tuple);\n }\n }\n region.originalWidth = parseInt(tuple[0]);\n region.originalHeight = parseInt(tuple[1]);\n reader.readTuple(tuple);\n region.offsetX = parseInt(tuple[0]);\n region.offsetY = parseInt(tuple[1]);\n region.index = parseInt(reader.readValue());\n region.texture = page.texture;\n this.regions.push(region);\n }\n }\n };\n TextureAtlas.prototype.findRegion = function (name) {\n for (var i = 0; i < this.regions.length; i++) {\n if (this.regions[i].name == name) {\n return this.regions[i];\n }\n }\n return null;\n };\n TextureAtlas.prototype.dispose = function () {\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].texture.dispose();\n }\n };\n return TextureAtlas;\n }());\n spine.TextureAtlas = TextureAtlas;\n var TextureAtlasReader = (function () {\n function TextureAtlasReader(text) {\n this.index = 0;\n this.lines = text.split(/\\r\\n|\\r|\\n/);\n }\n TextureAtlasReader.prototype.readLine = function () {\n if (this.index >= this.lines.length)\n return null;\n return this.lines[this.index++];\n };\n TextureAtlasReader.prototype.readValue = function () {\n var line = this.readLine();\n var colon = line.indexOf(\":\");\n if (colon == -1)\n throw new Error(\"Invalid line: \" + line);\n return line.substring(colon + 1).trim();\n };\n TextureAtlasReader.prototype.readTuple = function (tuple) {\n var line = this.readLine();\n var colon = line.indexOf(\":\");\n if (colon == -1)\n throw new Error(\"Invalid line: \" + line);\n var i = 0, lastMatch = colon + 1;\n for (; i < 3; i++) {\n var comma = line.indexOf(\",\", lastMatch);\n if (comma == -1)\n break;\n tuple[i] = line.substr(lastMatch, comma - lastMatch).trim();\n lastMatch = comma + 1;\n }\n tuple[i] = line.substring(lastMatch).trim();\n return i + 1;\n };\n return TextureAtlasReader;\n }());\n var TextureAtlasPage = (function () {\n function TextureAtlasPage() {\n }\n return TextureAtlasPage;\n }());\n spine.TextureAtlasPage = TextureAtlasPage;\n var TextureAtlasRegion = (function (_super) {\n __extends(TextureAtlasRegion, _super);\n function TextureAtlasRegion() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return TextureAtlasRegion;\n }(spine.TextureRegion));\n spine.TextureAtlasRegion = TextureAtlasRegion;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var TransformConstraint = (function () {\n function TransformConstraint(data, skeleton) {\n this.rotateMix = 0;\n this.translateMix = 0;\n this.scaleMix = 0;\n this.shearMix = 0;\n this.temp = new spine.Vector2();\n this.active = false;\n if (data == null)\n throw new Error(\"data cannot be null.\");\n if (skeleton == null)\n throw new Error(\"skeleton cannot be null.\");\n this.data = data;\n this.rotateMix = data.rotateMix;\n this.translateMix = data.translateMix;\n this.scaleMix = data.scaleMix;\n this.shearMix = data.shearMix;\n this.bones = new Array();\n for (var i = 0; i < data.bones.length; i++)\n this.bones.push(skeleton.findBone(data.bones[i].name));\n this.target = skeleton.findBone(data.target.name);\n }\n TransformConstraint.prototype.isActive = function () {\n return this.active;\n };\n TransformConstraint.prototype.apply = function () {\n this.update();\n };\n TransformConstraint.prototype.update = function () {\n if (this.data.local) {\n if (this.data.relative)\n this.applyRelativeLocal();\n else\n this.applyAbsoluteLocal();\n }\n else {\n if (this.data.relative)\n this.applyRelativeWorld();\n else\n this.applyAbsoluteWorld();\n }\n };\n TransformConstraint.prototype.applyAbsoluteWorld = function () {\n var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix;\n var target = this.target;\n var ta = target.a, tb = target.b, tc = target.c, td = target.d;\n var degRadReflect = ta * td - tb * tc > 0 ? spine.MathUtils.degRad : -spine.MathUtils.degRad;\n var offsetRotation = this.data.offsetRotation * degRadReflect;\n var offsetShearY = this.data.offsetShearY * degRadReflect;\n var bones = this.bones;\n for (var i = 0, n = bones.length; i < n; i++) {\n var bone = bones[i];\n var modified = false;\n if (rotateMix != 0) {\n var a = bone.a, b = bone.b, c = bone.c, d = bone.d;\n var r = Math.atan2(tc, ta) - Math.atan2(c, a) + offsetRotation;\n if (r > spine.MathUtils.PI)\n r -= spine.MathUtils.PI2;\n else if (r < -spine.MathUtils.PI)\n r += spine.MathUtils.PI2;\n r *= rotateMix;\n var cos = Math.cos(r), sin = Math.sin(r);\n bone.a = cos * a - sin * c;\n bone.b = cos * b - sin * d;\n bone.c = sin * a + cos * c;\n bone.d = sin * b + cos * d;\n modified = true;\n }\n if (translateMix != 0) {\n var temp = this.temp;\n target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY));\n bone.worldX += (temp.x - bone.worldX) * translateMix;\n bone.worldY += (temp.y - bone.worldY) * translateMix;\n modified = true;\n }\n if (scaleMix > 0) {\n var s = Math.sqrt(bone.a * bone.a + bone.c * bone.c);\n var ts = Math.sqrt(ta * ta + tc * tc);\n if (s > 0.00001)\n s = (s + (ts - s + this.data.offsetScaleX) * scaleMix) / s;\n bone.a *= s;\n bone.c *= s;\n s = Math.sqrt(bone.b * bone.b + bone.d * bone.d);\n ts = Math.sqrt(tb * tb + td * td);\n if (s > 0.00001)\n s = (s + (ts - s + this.data.offsetScaleY) * scaleMix) / s;\n bone.b *= s;\n bone.d *= s;\n modified = true;\n }\n if (shearMix > 0) {\n var b = bone.b, d = bone.d;\n var by = Math.atan2(d, b);\n var r = Math.atan2(td, tb) - Math.atan2(tc, ta) - (by - Math.atan2(bone.c, bone.a));\n if (r > spine.MathUtils.PI)\n r -= spine.MathUtils.PI2;\n else if (r < -spine.MathUtils.PI)\n r += spine.MathUtils.PI2;\n r = by + (r + offsetShearY) * shearMix;\n var s = Math.sqrt(b * b + d * d);\n bone.b = Math.cos(r) * s;\n bone.d = Math.sin(r) * s;\n modified = true;\n }\n if (modified)\n bone.appliedValid = false;\n }\n };\n TransformConstraint.prototype.applyRelativeWorld = function () {\n var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix;\n var target = this.target;\n var ta = target.a, tb = target.b, tc = target.c, td = target.d;\n var degRadReflect = ta * td - tb * tc > 0 ? spine.MathUtils.degRad : -spine.MathUtils.degRad;\n var offsetRotation = this.data.offsetRotation * degRadReflect, offsetShearY = this.data.offsetShearY * degRadReflect;\n var bones = this.bones;\n for (var i = 0, n = bones.length; i < n; i++) {\n var bone = bones[i];\n var modified = false;\n if (rotateMix != 0) {\n var a = bone.a, b = bone.b, c = bone.c, d = bone.d;\n var r = Math.atan2(tc, ta) + offsetRotation;\n if (r > spine.MathUtils.PI)\n r -= spine.MathUtils.PI2;\n else if (r < -spine.MathUtils.PI)\n r += spine.MathUtils.PI2;\n r *= rotateMix;\n var cos = Math.cos(r), sin = Math.sin(r);\n bone.a = cos * a - sin * c;\n bone.b = cos * b - sin * d;\n bone.c = sin * a + cos * c;\n bone.d = sin * b + cos * d;\n modified = true;\n }\n if (translateMix != 0) {\n var temp = this.temp;\n target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY));\n bone.worldX += temp.x * translateMix;\n bone.worldY += temp.y * translateMix;\n modified = true;\n }\n if (scaleMix > 0) {\n var s = (Math.sqrt(ta * ta + tc * tc) - 1 + this.data.offsetScaleX) * scaleMix + 1;\n bone.a *= s;\n bone.c *= s;\n s = (Math.sqrt(tb * tb + td * td) - 1 + this.data.offsetScaleY) * scaleMix + 1;\n bone.b *= s;\n bone.d *= s;\n modified = true;\n }\n if (shearMix > 0) {\n var r = Math.atan2(td, tb) - Math.atan2(tc, ta);\n if (r > spine.MathUtils.PI)\n r -= spine.MathUtils.PI2;\n else if (r < -spine.MathUtils.PI)\n r += spine.MathUtils.PI2;\n var b = bone.b, d = bone.d;\n r = Math.atan2(d, b) + (r - spine.MathUtils.PI / 2 + offsetShearY) * shearMix;\n var s = Math.sqrt(b * b + d * d);\n bone.b = Math.cos(r) * s;\n bone.d = Math.sin(r) * s;\n modified = true;\n }\n if (modified)\n bone.appliedValid = false;\n }\n };\n TransformConstraint.prototype.applyAbsoluteLocal = function () {\n var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix;\n var target = this.target;\n if (!target.appliedValid)\n target.updateAppliedTransform();\n var bones = this.bones;\n for (var i = 0, n = bones.length; i < n; i++) {\n var bone = bones[i];\n if (!bone.appliedValid)\n bone.updateAppliedTransform();\n var rotation = bone.arotation;\n if (rotateMix != 0) {\n var r = target.arotation - rotation + this.data.offsetRotation;\n r -= (16384 - ((16384.499999999996 - r / 360) | 0)) * 360;\n rotation += r * rotateMix;\n }\n var x = bone.ax, y = bone.ay;\n if (translateMix != 0) {\n x += (target.ax - x + this.data.offsetX) * translateMix;\n y += (target.ay - y + this.data.offsetY) * translateMix;\n }\n var scaleX = bone.ascaleX, scaleY = bone.ascaleY;\n if (scaleMix != 0) {\n if (scaleX > 0.00001)\n scaleX = (scaleX + (target.ascaleX - scaleX + this.data.offsetScaleX) * scaleMix) / scaleX;\n if (scaleY > 0.00001)\n scaleY = (scaleY + (target.ascaleY - scaleY + this.data.offsetScaleY) * scaleMix) / scaleY;\n }\n var shearY = bone.ashearY;\n if (shearMix != 0) {\n var r = target.ashearY - shearY + this.data.offsetShearY;\n r -= (16384 - ((16384.499999999996 - r / 360) | 0)) * 360;\n bone.shearY += r * shearMix;\n }\n bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY);\n }\n };\n TransformConstraint.prototype.applyRelativeLocal = function () {\n var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix;\n var target = this.target;\n if (!target.appliedValid)\n target.updateAppliedTransform();\n var bones = this.bones;\n for (var i = 0, n = bones.length; i < n; i++) {\n var bone = bones[i];\n if (!bone.appliedValid)\n bone.updateAppliedTransform();\n var rotation = bone.arotation;\n if (rotateMix != 0)\n rotation += (target.arotation + this.data.offsetRotation) * rotateMix;\n var x = bone.ax, y = bone.ay;\n if (translateMix != 0) {\n x += (target.ax + this.data.offsetX) * translateMix;\n y += (target.ay + this.data.offsetY) * translateMix;\n }\n var scaleX = bone.ascaleX, scaleY = bone.ascaleY;\n if (scaleMix != 0) {\n if (scaleX > 0.00001)\n scaleX *= ((target.ascaleX - 1 + this.data.offsetScaleX) * scaleMix) + 1;\n if (scaleY > 0.00001)\n scaleY *= ((target.ascaleY - 1 + this.data.offsetScaleY) * scaleMix) + 1;\n }\n var shearY = bone.ashearY;\n if (shearMix != 0)\n shearY += (target.ashearY + this.data.offsetShearY) * shearMix;\n bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY);\n }\n };\n return TransformConstraint;\n }());\n spine.TransformConstraint = TransformConstraint;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var TransformConstraintData = (function (_super) {\n __extends(TransformConstraintData, _super);\n function TransformConstraintData(name) {\n var _this = _super.call(this, name, 0, false) || this;\n _this.bones = new Array();\n _this.rotateMix = 0;\n _this.translateMix = 0;\n _this.scaleMix = 0;\n _this.shearMix = 0;\n _this.offsetRotation = 0;\n _this.offsetX = 0;\n _this.offsetY = 0;\n _this.offsetScaleX = 0;\n _this.offsetScaleY = 0;\n _this.offsetShearY = 0;\n _this.relative = false;\n _this.local = false;\n return _this;\n }\n return TransformConstraintData;\n }(spine.ConstraintData));\n spine.TransformConstraintData = TransformConstraintData;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var Triangulator = (function () {\n function Triangulator() {\n this.convexPolygons = new Array();\n this.convexPolygonsIndices = new Array();\n this.indicesArray = new Array();\n this.isConcaveArray = new Array();\n this.triangles = new Array();\n this.polygonPool = new spine.Pool(function () {\n return new Array();\n });\n this.polygonIndicesPool = new spine.Pool(function () {\n return new Array();\n });\n }\n Triangulator.prototype.triangulate = function (verticesArray) {\n var vertices = verticesArray;\n var vertexCount = verticesArray.length >> 1;\n var indices = this.indicesArray;\n indices.length = 0;\n for (var i = 0; i < vertexCount; i++)\n indices[i] = i;\n var isConcave = this.isConcaveArray;\n isConcave.length = 0;\n for (var i = 0, n = vertexCount; i < n; ++i)\n isConcave[i] = Triangulator.isConcave(i, vertexCount, vertices, indices);\n var triangles = this.triangles;\n triangles.length = 0;\n while (vertexCount > 3) {\n var previous = vertexCount - 1, i = 0, next = 1;\n while (true) {\n outer: if (!isConcave[i]) {\n var p1 = indices[previous] << 1, p2 = indices[i] << 1, p3 = indices[next] << 1;\n var p1x = vertices[p1], p1y = vertices[p1 + 1];\n var p2x = vertices[p2], p2y = vertices[p2 + 1];\n var p3x = vertices[p3], p3y = vertices[p3 + 1];\n for (var ii = (next + 1) % vertexCount; ii != previous; ii = (ii + 1) % vertexCount) {\n if (!isConcave[ii])\n continue;\n var v = indices[ii] << 1;\n var vx = vertices[v], vy = vertices[v + 1];\n if (Triangulator.positiveArea(p3x, p3y, p1x, p1y, vx, vy)) {\n if (Triangulator.positiveArea(p1x, p1y, p2x, p2y, vx, vy)) {\n if (Triangulator.positiveArea(p2x, p2y, p3x, p3y, vx, vy))\n break outer;\n }\n }\n }\n break;\n }\n if (next == 0) {\n do {\n if (!isConcave[i])\n break;\n i--;\n } while (i > 0);\n break;\n }\n previous = i;\n i = next;\n next = (next + 1) % vertexCount;\n }\n triangles.push(indices[(vertexCount + i - 1) % vertexCount]);\n triangles.push(indices[i]);\n triangles.push(indices[(i + 1) % vertexCount]);\n indices.splice(i, 1);\n isConcave.splice(i, 1);\n vertexCount--;\n var previousIndex = (vertexCount + i - 1) % vertexCount;\n var nextIndex = i == vertexCount ? 0 : i;\n isConcave[previousIndex] = Triangulator.isConcave(previousIndex, vertexCount, vertices, indices);\n isConcave[nextIndex] = Triangulator.isConcave(nextIndex, vertexCount, vertices, indices);\n }\n if (vertexCount == 3) {\n triangles.push(indices[2]);\n triangles.push(indices[0]);\n triangles.push(indices[1]);\n }\n return triangles;\n };\n Triangulator.prototype.decompose = function (verticesArray, triangles) {\n var vertices = verticesArray;\n var convexPolygons = this.convexPolygons;\n this.polygonPool.freeAll(convexPolygons);\n convexPolygons.length = 0;\n var convexPolygonsIndices = this.convexPolygonsIndices;\n this.polygonIndicesPool.freeAll(convexPolygonsIndices);\n convexPolygonsIndices.length = 0;\n var polygonIndices = this.polygonIndicesPool.obtain();\n polygonIndices.length = 0;\n var polygon = this.polygonPool.obtain();\n polygon.length = 0;\n var fanBaseIndex = -1, lastWinding = 0;\n for (var i = 0, n = triangles.length; i < n; i += 3) {\n var t1 = triangles[i] << 1, t2 = triangles[i + 1] << 1, t3 = triangles[i + 2] << 1;\n var x1 = vertices[t1], y1 = vertices[t1 + 1];\n var x2 = vertices[t2], y2 = vertices[t2 + 1];\n var x3 = vertices[t3], y3 = vertices[t3 + 1];\n var merged = false;\n if (fanBaseIndex == t1) {\n var o = polygon.length - 4;\n var winding1 = Triangulator.winding(polygon[o], polygon[o + 1], polygon[o + 2], polygon[o + 3], x3, y3);\n var winding2 = Triangulator.winding(x3, y3, polygon[0], polygon[1], polygon[2], polygon[3]);\n if (winding1 == lastWinding && winding2 == lastWinding) {\n polygon.push(x3);\n polygon.push(y3);\n polygonIndices.push(t3);\n merged = true;\n }\n }\n if (!merged) {\n if (polygon.length > 0) {\n convexPolygons.push(polygon);\n convexPolygonsIndices.push(polygonIndices);\n }\n else {\n this.polygonPool.free(polygon);\n this.polygonIndicesPool.free(polygonIndices);\n }\n polygon = this.polygonPool.obtain();\n polygon.length = 0;\n polygon.push(x1);\n polygon.push(y1);\n polygon.push(x2);\n polygon.push(y2);\n polygon.push(x3);\n polygon.push(y3);\n polygonIndices = this.polygonIndicesPool.obtain();\n polygonIndices.length = 0;\n polygonIndices.push(t1);\n polygonIndices.push(t2);\n polygonIndices.push(t3);\n lastWinding = Triangulator.winding(x1, y1, x2, y2, x3, y3);\n fanBaseIndex = t1;\n }\n }\n if (polygon.length > 0) {\n convexPolygons.push(polygon);\n convexPolygonsIndices.push(polygonIndices);\n }\n for (var i = 0, n = convexPolygons.length; i < n; i++) {\n polygonIndices = convexPolygonsIndices[i];\n if (polygonIndices.length == 0)\n continue;\n var firstIndex = polygonIndices[0];\n var lastIndex = polygonIndices[polygonIndices.length - 1];\n polygon = convexPolygons[i];\n var o = polygon.length - 4;\n var prevPrevX = polygon[o], prevPrevY = polygon[o + 1];\n var prevX = polygon[o + 2], prevY = polygon[o + 3];\n var firstX = polygon[0], firstY = polygon[1];\n var secondX = polygon[2], secondY = polygon[3];\n var winding = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, firstX, firstY);\n for (var ii = 0; ii < n; ii++) {\n if (ii == i)\n continue;\n var otherIndices = convexPolygonsIndices[ii];\n if (otherIndices.length != 3)\n continue;\n var otherFirstIndex = otherIndices[0];\n var otherSecondIndex = otherIndices[1];\n var otherLastIndex = otherIndices[2];\n var otherPoly = convexPolygons[ii];\n var x3 = otherPoly[otherPoly.length - 2], y3 = otherPoly[otherPoly.length - 1];\n if (otherFirstIndex != firstIndex || otherSecondIndex != lastIndex)\n continue;\n var winding1 = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, x3, y3);\n var winding2 = Triangulator.winding(x3, y3, firstX, firstY, secondX, secondY);\n if (winding1 == winding && winding2 == winding) {\n otherPoly.length = 0;\n otherIndices.length = 0;\n polygon.push(x3);\n polygon.push(y3);\n polygonIndices.push(otherLastIndex);\n prevPrevX = prevX;\n prevPrevY = prevY;\n prevX = x3;\n prevY = y3;\n ii = 0;\n }\n }\n }\n for (var i = convexPolygons.length - 1; i >= 0; i--) {\n polygon = convexPolygons[i];\n if (polygon.length == 0) {\n convexPolygons.splice(i, 1);\n this.polygonPool.free(polygon);\n polygonIndices = convexPolygonsIndices[i];\n convexPolygonsIndices.splice(i, 1);\n this.polygonIndicesPool.free(polygonIndices);\n }\n }\n return convexPolygons;\n };\n Triangulator.isConcave = function (index, vertexCount, vertices, indices) {\n var previous = indices[(vertexCount + index - 1) % vertexCount] << 1;\n var current = indices[index] << 1;\n var next = indices[(index + 1) % vertexCount] << 1;\n return !this.positiveArea(vertices[previous], vertices[previous + 1], vertices[current], vertices[current + 1], vertices[next], vertices[next + 1]);\n };\n Triangulator.positiveArea = function (p1x, p1y, p2x, p2y, p3x, p3y) {\n return p1x * (p3y - p2y) + p2x * (p1y - p3y) + p3x * (p2y - p1y) >= 0;\n };\n Triangulator.winding = function (p1x, p1y, p2x, p2y, p3x, p3y) {\n var px = p2x - p1x, py = p2y - p1y;\n return p3x * py - p3y * px + px * p1y - p1x * py >= 0 ? 1 : -1;\n };\n return Triangulator;\n }());\n spine.Triangulator = Triangulator;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var IntSet = (function () {\n function IntSet() {\n this.array = new Array();\n }\n IntSet.prototype.add = function (value) {\n var contains = this.contains(value);\n this.array[value | 0] = value | 0;\n return !contains;\n };\n IntSet.prototype.contains = function (value) {\n return this.array[value | 0] != undefined;\n };\n IntSet.prototype.remove = function (value) {\n this.array[value | 0] = undefined;\n };\n IntSet.prototype.clear = function () {\n this.array.length = 0;\n };\n return IntSet;\n }());\n spine.IntSet = IntSet;\n var Color = (function () {\n function Color(r, g, b, a) {\n if (r === void 0) { r = 0; }\n if (g === void 0) { g = 0; }\n if (b === void 0) { b = 0; }\n if (a === void 0) { a = 0; }\n this.r = r;\n this.g = g;\n this.b = b;\n this.a = a;\n }\n Color.prototype.set = function (r, g, b, a) {\n this.r = r;\n this.g = g;\n this.b = b;\n this.a = a;\n this.clamp();\n return this;\n };\n Color.prototype.setFromColor = function (c) {\n this.r = c.r;\n this.g = c.g;\n this.b = c.b;\n this.a = c.a;\n return this;\n };\n Color.prototype.setFromString = function (hex) {\n hex = hex.charAt(0) == '#' ? hex.substr(1) : hex;\n this.r = parseInt(hex.substr(0, 2), 16) / 255.0;\n this.g = parseInt(hex.substr(2, 2), 16) / 255.0;\n this.b = parseInt(hex.substr(4, 2), 16) / 255.0;\n this.a = (hex.length != 8 ? 255 : parseInt(hex.substr(6, 2), 16)) / 255.0;\n return this;\n };\n Color.prototype.add = function (r, g, b, a) {\n this.r += r;\n this.g += g;\n this.b += b;\n this.a += a;\n this.clamp();\n return this;\n };\n Color.prototype.clamp = function () {\n if (this.r < 0)\n this.r = 0;\n else if (this.r > 1)\n this.r = 1;\n if (this.g < 0)\n this.g = 0;\n else if (this.g > 1)\n this.g = 1;\n if (this.b < 0)\n this.b = 0;\n else if (this.b > 1)\n this.b = 1;\n if (this.a < 0)\n this.a = 0;\n else if (this.a > 1)\n this.a = 1;\n return this;\n };\n Color.rgba8888ToColor = function (color, value) {\n color.r = ((value & 0xff000000) >>> 24) / 255;\n color.g = ((value & 0x00ff0000) >>> 16) / 255;\n color.b = ((value & 0x0000ff00) >>> 8) / 255;\n color.a = ((value & 0x000000ff)) / 255;\n };\n Color.rgb888ToColor = function (color, value) {\n color.r = ((value & 0x00ff0000) >>> 16) / 255;\n color.g = ((value & 0x0000ff00) >>> 8) / 255;\n color.b = ((value & 0x000000ff)) / 255;\n };\n Color.WHITE = new Color(1, 1, 1, 1);\n Color.RED = new Color(1, 0, 0, 1);\n Color.GREEN = new Color(0, 1, 0, 1);\n Color.BLUE = new Color(0, 0, 1, 1);\n Color.MAGENTA = new Color(1, 0, 1, 1);\n return Color;\n }());\n spine.Color = Color;\n var MathUtils = (function () {\n function MathUtils() {\n }\n MathUtils.clamp = function (value, min, max) {\n if (value < min)\n return min;\n if (value > max)\n return max;\n return value;\n };\n MathUtils.cosDeg = function (degrees) {\n return Math.cos(degrees * MathUtils.degRad);\n };\n MathUtils.sinDeg = function (degrees) {\n return Math.sin(degrees * MathUtils.degRad);\n };\n MathUtils.signum = function (value) {\n return value > 0 ? 1 : value < 0 ? -1 : 0;\n };\n MathUtils.toInt = function (x) {\n return x > 0 ? Math.floor(x) : Math.ceil(x);\n };\n MathUtils.cbrt = function (x) {\n var y = Math.pow(Math.abs(x), 1 / 3);\n return x < 0 ? -y : y;\n };\n MathUtils.randomTriangular = function (min, max) {\n return MathUtils.randomTriangularWith(min, max, (min + max) * 0.5);\n };\n MathUtils.randomTriangularWith = function (min, max, mode) {\n var u = Math.random();\n var d = max - min;\n if (u <= (mode - min) / d)\n return min + Math.sqrt(u * d * (mode - min));\n return max - Math.sqrt((1 - u) * d * (max - mode));\n };\n MathUtils.PI = 3.1415927;\n MathUtils.PI2 = MathUtils.PI * 2;\n MathUtils.radiansToDegrees = 180 / MathUtils.PI;\n MathUtils.radDeg = MathUtils.radiansToDegrees;\n MathUtils.degreesToRadians = MathUtils.PI / 180;\n MathUtils.degRad = MathUtils.degreesToRadians;\n return MathUtils;\n }());\n spine.MathUtils = MathUtils;\n var Interpolation = (function () {\n function Interpolation() {\n }\n Interpolation.prototype.apply = function (start, end, a) {\n return start + (end - start) * this.applyInternal(a);\n };\n return Interpolation;\n }());\n spine.Interpolation = Interpolation;\n var Pow = (function (_super) {\n __extends(Pow, _super);\n function Pow(power) {\n var _this = _super.call(this) || this;\n _this.power = 2;\n _this.power = power;\n return _this;\n }\n Pow.prototype.applyInternal = function (a) {\n if (a <= 0.5)\n return Math.pow(a * 2, this.power) / 2;\n return Math.pow((a - 1) * 2, this.power) / (this.power % 2 == 0 ? -2 : 2) + 1;\n };\n return Pow;\n }(Interpolation));\n spine.Pow = Pow;\n var PowOut = (function (_super) {\n __extends(PowOut, _super);\n function PowOut(power) {\n return _super.call(this, power) || this;\n }\n PowOut.prototype.applyInternal = function (a) {\n return Math.pow(a - 1, this.power) * (this.power % 2 == 0 ? -1 : 1) + 1;\n };\n return PowOut;\n }(Pow));\n spine.PowOut = PowOut;\n var Utils = (function () {\n function Utils() {\n }\n Utils.arrayCopy = function (source, sourceStart, dest, destStart, numElements) {\n for (var i = sourceStart, j = destStart; i < sourceStart + numElements; i++, j++) {\n dest[j] = source[i];\n }\n };\n Utils.setArraySize = function (array, size, value) {\n if (value === void 0) { value = 0; }\n var oldSize = array.length;\n if (oldSize == size)\n return array;\n array.length = size;\n if (oldSize < size) {\n for (var i = oldSize; i < size; i++)\n array[i] = value;\n }\n return array;\n };\n Utils.ensureArrayCapacity = function (array, size, value) {\n if (value === void 0) { value = 0; }\n if (array.length >= size)\n return array;\n return Utils.setArraySize(array, size, value);\n };\n Utils.newArray = function (size, defaultValue) {\n var array = new Array(size);\n for (var i = 0; i < size; i++)\n array[i] = defaultValue;\n return array;\n };\n Utils.newFloatArray = function (size) {\n if (Utils.SUPPORTS_TYPED_ARRAYS) {\n return new Float32Array(size);\n }\n else {\n var array = new Array(size);\n for (var i = 0; i < array.length; i++)\n array[i] = 0;\n return array;\n }\n };\n Utils.newShortArray = function (size) {\n if (Utils.SUPPORTS_TYPED_ARRAYS) {\n return new Int16Array(size);\n }\n else {\n var array = new Array(size);\n for (var i = 0; i < array.length; i++)\n array[i] = 0;\n return array;\n }\n };\n Utils.toFloatArray = function (array) {\n return Utils.SUPPORTS_TYPED_ARRAYS ? new Float32Array(array) : array;\n };\n Utils.toSinglePrecision = function (value) {\n return Utils.SUPPORTS_TYPED_ARRAYS ? Math.fround(value) : value;\n };\n Utils.webkit602BugfixHelper = function (alpha, blend) {\n };\n Utils.contains = function (array, element, identity) {\n if (identity === void 0) { identity = true; }\n for (var i = 0; i < array.length; i++) {\n if (array[i] == element)\n return true;\n }\n return false;\n };\n Utils.SUPPORTS_TYPED_ARRAYS = typeof (Float32Array) !== \"undefined\";\n return Utils;\n }());\n spine.Utils = Utils;\n var DebugUtils = (function () {\n function DebugUtils() {\n }\n DebugUtils.logBones = function (skeleton) {\n for (var i = 0; i < skeleton.bones.length; i++) {\n var bone = skeleton.bones[i];\n console.log(bone.data.name + \", \" + bone.a + \", \" + bone.b + \", \" + bone.c + \", \" + bone.d + \", \" + bone.worldX + \", \" + bone.worldY);\n }\n };\n return DebugUtils;\n }());\n spine.DebugUtils = DebugUtils;\n var Pool = (function () {\n function Pool(instantiator) {\n this.items = new Array();\n this.instantiator = instantiator;\n }\n Pool.prototype.obtain = function () {\n return this.items.length > 0 ? this.items.pop() : this.instantiator();\n };\n Pool.prototype.free = function (item) {\n if (item.reset)\n item.reset();\n this.items.push(item);\n };\n Pool.prototype.freeAll = function (items) {\n for (var i = 0; i < items.length; i++) {\n if (items[i].reset)\n items[i].reset();\n this.items[i] = items[i];\n }\n };\n Pool.prototype.clear = function () {\n this.items.length = 0;\n };\n return Pool;\n }());\n spine.Pool = Pool;\n var Vector2 = (function () {\n function Vector2(x, y) {\n if (x === void 0) { x = 0; }\n if (y === void 0) { y = 0; }\n this.x = x;\n this.y = y;\n }\n Vector2.prototype.set = function (x, y) {\n this.x = x;\n this.y = y;\n return this;\n };\n Vector2.prototype.length = function () {\n var x = this.x;\n var y = this.y;\n return Math.sqrt(x * x + y * y);\n };\n Vector2.prototype.normalize = function () {\n var len = this.length();\n if (len != 0) {\n this.x /= len;\n this.y /= len;\n }\n return this;\n };\n return Vector2;\n }());\n spine.Vector2 = Vector2;\n var TimeKeeper = (function () {\n function TimeKeeper() {\n this.maxDelta = 0.064;\n this.framesPerSecond = 0;\n this.delta = 0;\n this.totalTime = 0;\n this.lastTime = Date.now() / 1000;\n this.frameCount = 0;\n this.frameTime = 0;\n }\n TimeKeeper.prototype.update = function () {\n var now = Date.now() / 1000;\n this.delta = now - this.lastTime;\n this.frameTime += this.delta;\n this.totalTime += this.delta;\n if (this.delta > this.maxDelta)\n this.delta = this.maxDelta;\n this.lastTime = now;\n this.frameCount++;\n if (this.frameTime > 1) {\n this.framesPerSecond = this.frameCount / this.frameTime;\n this.frameTime = 0;\n this.frameCount = 0;\n }\n };\n return TimeKeeper;\n }());\n spine.TimeKeeper = TimeKeeper;\n var WindowedMean = (function () {\n function WindowedMean(windowSize) {\n if (windowSize === void 0) { windowSize = 32; }\n this.addedValues = 0;\n this.lastValue = 0;\n this.mean = 0;\n this.dirty = true;\n this.values = new Array(windowSize);\n }\n WindowedMean.prototype.hasEnoughData = function () {\n return this.addedValues >= this.values.length;\n };\n WindowedMean.prototype.addValue = function (value) {\n if (this.addedValues < this.values.length)\n this.addedValues++;\n this.values[this.lastValue++] = value;\n if (this.lastValue > this.values.length - 1)\n this.lastValue = 0;\n this.dirty = true;\n };\n WindowedMean.prototype.getMean = function () {\n if (this.hasEnoughData()) {\n if (this.dirty) {\n var mean = 0;\n for (var i = 0; i < this.values.length; i++) {\n mean += this.values[i];\n }\n this.mean = mean / this.values.length;\n this.dirty = false;\n }\n return this.mean;\n }\n else {\n return 0;\n }\n };\n return WindowedMean;\n }());\n spine.WindowedMean = WindowedMean;\n})(spine || (spine = {}));\n(function () {\n if (!Math.fround) {\n Math.fround = (function (array) {\n return function (x) {\n return array[0] = x, array[0];\n };\n })(new Float32Array(1));\n }\n})();\nvar spine;\n(function (spine) {\n var Attachment = (function () {\n function Attachment(name) {\n if (name == null)\n throw new Error(\"name cannot be null.\");\n this.name = name;\n }\n return Attachment;\n }());\n spine.Attachment = Attachment;\n var VertexAttachment = (function (_super) {\n __extends(VertexAttachment, _super);\n function VertexAttachment(name) {\n var _this = _super.call(this, name) || this;\n _this.id = (VertexAttachment.nextID++ & 65535) << 11;\n _this.worldVerticesLength = 0;\n _this.deformAttachment = _this;\n return _this;\n }\n VertexAttachment.prototype.computeWorldVertices = function (slot, start, count, worldVertices, offset, stride) {\n count = offset + (count >> 1) * stride;\n var skeleton = slot.bone.skeleton;\n var deformArray = slot.deform;\n var vertices = this.vertices;\n var bones = this.bones;\n if (bones == null) {\n if (deformArray.length > 0)\n vertices = deformArray;\n var bone = slot.bone;\n var x = bone.worldX;\n var y = bone.worldY;\n var a = bone.a, b = bone.b, c = bone.c, d = bone.d;\n for (var v_1 = start, w = offset; w < count; v_1 += 2, w += stride) {\n var vx = vertices[v_1], vy = vertices[v_1 + 1];\n worldVertices[w] = vx * a + vy * b + x;\n worldVertices[w + 1] = vx * c + vy * d + y;\n }\n return;\n }\n var v = 0, skip = 0;\n for (var i = 0; i < start; i += 2) {\n var n = bones[v];\n v += n + 1;\n skip += n;\n }\n var skeletonBones = skeleton.bones;\n if (deformArray.length == 0) {\n for (var w = offset, b = skip * 3; w < count; w += stride) {\n var wx = 0, wy = 0;\n var n = bones[v++];\n n += v;\n for (; v < n; v++, b += 3) {\n var bone = skeletonBones[bones[v]];\n var vx = vertices[b], vy = vertices[b + 1], weight = vertices[b + 2];\n wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight;\n wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight;\n }\n worldVertices[w] = wx;\n worldVertices[w + 1] = wy;\n }\n }\n else {\n var deform = deformArray;\n for (var w = offset, b = skip * 3, f = skip << 1; w < count; w += stride) {\n var wx = 0, wy = 0;\n var n = bones[v++];\n n += v;\n for (; v < n; v++, b += 3, f += 2) {\n var bone = skeletonBones[bones[v]];\n var vx = vertices[b] + deform[f], vy = vertices[b + 1] + deform[f + 1], weight = vertices[b + 2];\n wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight;\n wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight;\n }\n worldVertices[w] = wx;\n worldVertices[w + 1] = wy;\n }\n }\n };\n VertexAttachment.prototype.copyTo = function (attachment) {\n if (this.bones != null) {\n attachment.bones = new Array(this.bones.length);\n spine.Utils.arrayCopy(this.bones, 0, attachment.bones, 0, this.bones.length);\n }\n else\n attachment.bones = null;\n if (this.vertices != null) {\n attachment.vertices = spine.Utils.newFloatArray(this.vertices.length);\n spine.Utils.arrayCopy(this.vertices, 0, attachment.vertices, 0, this.vertices.length);\n }\n else\n attachment.vertices = null;\n attachment.worldVerticesLength = this.worldVerticesLength;\n attachment.deformAttachment = this.deformAttachment;\n };\n VertexAttachment.nextID = 0;\n return VertexAttachment;\n }(Attachment));\n spine.VertexAttachment = VertexAttachment;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var AttachmentType;\n (function (AttachmentType) {\n AttachmentType[AttachmentType[\"Region\"] = 0] = \"Region\";\n AttachmentType[AttachmentType[\"BoundingBox\"] = 1] = \"BoundingBox\";\n AttachmentType[AttachmentType[\"Mesh\"] = 2] = \"Mesh\";\n AttachmentType[AttachmentType[\"LinkedMesh\"] = 3] = \"LinkedMesh\";\n AttachmentType[AttachmentType[\"Path\"] = 4] = \"Path\";\n AttachmentType[AttachmentType[\"Point\"] = 5] = \"Point\";\n AttachmentType[AttachmentType[\"Clipping\"] = 6] = \"Clipping\";\n })(AttachmentType = spine.AttachmentType || (spine.AttachmentType = {}));\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var BoundingBoxAttachment = (function (_super) {\n __extends(BoundingBoxAttachment, _super);\n function BoundingBoxAttachment(name) {\n var _this = _super.call(this, name) || this;\n _this.color = new spine.Color(1, 1, 1, 1);\n return _this;\n }\n BoundingBoxAttachment.prototype.copy = function () {\n var copy = new BoundingBoxAttachment(name);\n this.copyTo(copy);\n copy.color.setFromColor(this.color);\n return copy;\n };\n return BoundingBoxAttachment;\n }(spine.VertexAttachment));\n spine.BoundingBoxAttachment = BoundingBoxAttachment;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var ClippingAttachment = (function (_super) {\n __extends(ClippingAttachment, _super);\n function ClippingAttachment(name) {\n var _this = _super.call(this, name) || this;\n _this.color = new spine.Color(0.2275, 0.2275, 0.8078, 1);\n return _this;\n }\n ClippingAttachment.prototype.copy = function () {\n var copy = new ClippingAttachment(name);\n this.copyTo(copy);\n copy.endSlot = this.endSlot;\n copy.color.setFromColor(this.color);\n return copy;\n };\n return ClippingAttachment;\n }(spine.VertexAttachment));\n spine.ClippingAttachment = ClippingAttachment;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var MeshAttachment = (function (_super) {\n __extends(MeshAttachment, _super);\n function MeshAttachment(name) {\n var _this = _super.call(this, name) || this;\n _this.color = new spine.Color(1, 1, 1, 1);\n _this.tempColor = new spine.Color(0, 0, 0, 0);\n return _this;\n }\n MeshAttachment.prototype.updateUVs = function () {\n var regionUVs = this.regionUVs;\n if (this.uvs == null || this.uvs.length != regionUVs.length)\n this.uvs = spine.Utils.newFloatArray(regionUVs.length);\n var uvs = this.uvs;\n var n = this.uvs.length;\n var u = this.region.u, v = this.region.v, width = 0, height = 0;\n if (this.region instanceof spine.TextureAtlasRegion) {\n var region = this.region;\n var textureWidth = region.texture.getImage().width, textureHeight = region.texture.getImage().height;\n switch (region.degrees) {\n case 90:\n u -= (region.originalHeight - region.offsetY - region.height) / textureWidth;\n v -= (region.originalWidth - region.offsetX - region.width) / textureHeight;\n width = region.originalHeight / textureWidth;\n height = region.originalWidth / textureHeight;\n for (var i = 0; i < n; i += 2) {\n uvs[i] = u + regionUVs[i + 1] * width;\n uvs[i + 1] = v + (1 - regionUVs[i]) * height;\n }\n return;\n case 180:\n u -= (region.originalWidth - region.offsetX - region.width) / textureWidth;\n v -= region.offsetY / textureHeight;\n width = region.originalWidth / textureWidth;\n height = region.originalHeight / textureHeight;\n for (var i = 0; i < n; i += 2) {\n uvs[i] = u + (1 - regionUVs[i]) * width;\n uvs[i + 1] = v + (1 - regionUVs[i + 1]) * height;\n }\n return;\n case 270:\n u -= region.offsetY / textureWidth;\n v -= region.offsetX / textureHeight;\n width = region.originalHeight / textureWidth;\n height = region.originalWidth / textureHeight;\n for (var i = 0; i < n; i += 2) {\n uvs[i] = u + (1 - regionUVs[i + 1]) * width;\n uvs[i + 1] = v + regionUVs[i] * height;\n }\n return;\n }\n u -= region.offsetX / textureWidth;\n v -= (region.originalHeight - region.offsetY - region.height) / textureHeight;\n width = region.originalWidth / textureWidth;\n height = region.originalHeight / textureHeight;\n }\n else if (this.region == null) {\n u = v = 0;\n width = height = 1;\n }\n else {\n width = this.region.u2 - u;\n height = this.region.v2 - v;\n }\n for (var i = 0; i < n; i += 2) {\n uvs[i] = u + regionUVs[i] * width;\n uvs[i + 1] = v + regionUVs[i + 1] * height;\n }\n };\n MeshAttachment.prototype.getParentMesh = function () {\n return this.parentMesh;\n };\n MeshAttachment.prototype.setParentMesh = function (parentMesh) {\n this.parentMesh = parentMesh;\n if (parentMesh != null) {\n this.bones = parentMesh.bones;\n this.vertices = parentMesh.vertices;\n this.worldVerticesLength = parentMesh.worldVerticesLength;\n this.regionUVs = parentMesh.regionUVs;\n this.triangles = parentMesh.triangles;\n this.hullLength = parentMesh.hullLength;\n this.worldVerticesLength = parentMesh.worldVerticesLength;\n }\n };\n MeshAttachment.prototype.copy = function () {\n if (this.parentMesh != null)\n return this.newLinkedMesh();\n var copy = new MeshAttachment(this.name);\n copy.region = this.region;\n copy.path = this.path;\n copy.color.setFromColor(this.color);\n this.copyTo(copy);\n copy.regionUVs = new Array(this.regionUVs.length);\n spine.Utils.arrayCopy(this.regionUVs, 0, copy.regionUVs, 0, this.regionUVs.length);\n copy.uvs = new Array(this.uvs.length);\n spine.Utils.arrayCopy(this.uvs, 0, copy.uvs, 0, this.uvs.length);\n copy.triangles = new Array(this.triangles.length);\n spine.Utils.arrayCopy(this.triangles, 0, copy.triangles, 0, this.triangles.length);\n copy.hullLength = this.hullLength;\n if (this.edges != null) {\n copy.edges = new Array(this.edges.length);\n spine.Utils.arrayCopy(this.edges, 0, copy.edges, 0, this.edges.length);\n }\n copy.width = this.width;\n copy.height = this.height;\n return copy;\n };\n MeshAttachment.prototype.newLinkedMesh = function () {\n var copy = new MeshAttachment(this.name);\n copy.region = this.region;\n copy.path = this.path;\n copy.color.setFromColor(this.color);\n copy.deformAttachment = this.deformAttachment;\n copy.setParentMesh(this.parentMesh != null ? this.parentMesh : this);\n copy.updateUVs();\n return copy;\n };\n return MeshAttachment;\n }(spine.VertexAttachment));\n spine.MeshAttachment = MeshAttachment;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var PathAttachment = (function (_super) {\n __extends(PathAttachment, _super);\n function PathAttachment(name) {\n var _this = _super.call(this, name) || this;\n _this.closed = false;\n _this.constantSpeed = false;\n _this.color = new spine.Color(1, 1, 1, 1);\n return _this;\n }\n PathAttachment.prototype.copy = function () {\n var copy = new PathAttachment(name);\n this.copyTo(copy);\n copy.lengths = new Array(this.lengths.length);\n spine.Utils.arrayCopy(this.lengths, 0, copy.lengths, 0, this.lengths.length);\n copy.closed = closed;\n copy.constantSpeed = this.constantSpeed;\n copy.color.setFromColor(this.color);\n return copy;\n };\n return PathAttachment;\n }(spine.VertexAttachment));\n spine.PathAttachment = PathAttachment;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var PointAttachment = (function (_super) {\n __extends(PointAttachment, _super);\n function PointAttachment(name) {\n var _this = _super.call(this, name) || this;\n _this.color = new spine.Color(0.38, 0.94, 0, 1);\n return _this;\n }\n PointAttachment.prototype.computeWorldPosition = function (bone, point) {\n point.x = this.x * bone.a + this.y * bone.b + bone.worldX;\n point.y = this.x * bone.c + this.y * bone.d + bone.worldY;\n return point;\n };\n PointAttachment.prototype.computeWorldRotation = function (bone) {\n var cos = spine.MathUtils.cosDeg(this.rotation), sin = spine.MathUtils.sinDeg(this.rotation);\n var x = cos * bone.a + sin * bone.b;\n var y = cos * bone.c + sin * bone.d;\n return Math.atan2(y, x) * spine.MathUtils.radDeg;\n };\n PointAttachment.prototype.copy = function () {\n var copy = new PointAttachment(name);\n copy.x = this.x;\n copy.y = this.y;\n copy.rotation = this.rotation;\n copy.color.setFromColor(this.color);\n return copy;\n };\n return PointAttachment;\n }(spine.VertexAttachment));\n spine.PointAttachment = PointAttachment;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var RegionAttachment = (function (_super) {\n __extends(RegionAttachment, _super);\n function RegionAttachment(name) {\n var _this = _super.call(this, name) || this;\n _this.x = 0;\n _this.y = 0;\n _this.scaleX = 1;\n _this.scaleY = 1;\n _this.rotation = 0;\n _this.width = 0;\n _this.height = 0;\n _this.color = new spine.Color(1, 1, 1, 1);\n _this.offset = spine.Utils.newFloatArray(8);\n _this.uvs = spine.Utils.newFloatArray(8);\n _this.tempColor = new spine.Color(1, 1, 1, 1);\n return _this;\n }\n RegionAttachment.prototype.updateOffset = function () {\n var regionScaleX = this.width / this.region.originalWidth * this.scaleX;\n var regionScaleY = this.height / this.region.originalHeight * this.scaleY;\n var localX = -this.width / 2 * this.scaleX + this.region.offsetX * regionScaleX;\n var localY = -this.height / 2 * this.scaleY + this.region.offsetY * regionScaleY;\n var localX2 = localX + this.region.width * regionScaleX;\n var localY2 = localY + this.region.height * regionScaleY;\n var radians = this.rotation * Math.PI / 180;\n var cos = Math.cos(radians);\n var sin = Math.sin(radians);\n var localXCos = localX * cos + this.x;\n var localXSin = localX * sin;\n var localYCos = localY * cos + this.y;\n var localYSin = localY * sin;\n var localX2Cos = localX2 * cos + this.x;\n var localX2Sin = localX2 * sin;\n var localY2Cos = localY2 * cos + this.y;\n var localY2Sin = localY2 * sin;\n var offset = this.offset;\n offset[RegionAttachment.OX1] = localXCos - localYSin;\n offset[RegionAttachment.OY1] = localYCos + localXSin;\n offset[RegionAttachment.OX2] = localXCos - localY2Sin;\n offset[RegionAttachment.OY2] = localY2Cos + localXSin;\n offset[RegionAttachment.OX3] = localX2Cos - localY2Sin;\n offset[RegionAttachment.OY3] = localY2Cos + localX2Sin;\n offset[RegionAttachment.OX4] = localX2Cos - localYSin;\n offset[RegionAttachment.OY4] = localYCos + localX2Sin;\n };\n RegionAttachment.prototype.setRegion = function (region) {\n this.region = region;\n var uvs = this.uvs;\n if (region.degrees === 90) {\n uvs[2] = region.u;\n uvs[3] = region.v2;\n uvs[4] = region.u;\n uvs[5] = region.v;\n uvs[6] = region.u2;\n uvs[7] = region.v;\n uvs[0] = region.u2;\n uvs[1] = region.v2;\n } else if (region.degrees === 270) {\n uvs[6] = region.u;\n uvs[7] = region.v2;\n uvs[0] = region.u;\n uvs[1] = region.v;\n uvs[2] = region.u2;\n uvs[3] = region.v;\n uvs[4] = region.u2;\n uvs[5] = region.v2;\n } else {\n uvs[0] = region.u;\n uvs[1] = region.v2;\n uvs[2] = region.u;\n uvs[3] = region.v;\n uvs[4] = region.u2;\n uvs[5] = region.v;\n uvs[6] = region.u2;\n uvs[7] = region.v2;\n }\n };\n RegionAttachment.prototype.computeWorldVertices = function (bone, worldVertices, offset, stride) {\n var vertexOffset = this.offset;\n var x = bone.worldX, y = bone.worldY;\n var a = bone.a, b = bone.b, c = bone.c, d = bone.d;\n var offsetX = 0, offsetY = 0;\n offsetX = vertexOffset[RegionAttachment.OX1];\n offsetY = vertexOffset[RegionAttachment.OY1];\n worldVertices[offset] = offsetX * a + offsetY * b + x;\n worldVertices[offset + 1] = offsetX * c + offsetY * d + y;\n offset += stride;\n offsetX = vertexOffset[RegionAttachment.OX2];\n offsetY = vertexOffset[RegionAttachment.OY2];\n worldVertices[offset] = offsetX * a + offsetY * b + x;\n worldVertices[offset + 1] = offsetX * c + offsetY * d + y;\n offset += stride;\n offsetX = vertexOffset[RegionAttachment.OX3];\n offsetY = vertexOffset[RegionAttachment.OY3];\n worldVertices[offset] = offsetX * a + offsetY * b + x;\n worldVertices[offset + 1] = offsetX * c + offsetY * d + y;\n offset += stride;\n offsetX = vertexOffset[RegionAttachment.OX4];\n offsetY = vertexOffset[RegionAttachment.OY4];\n worldVertices[offset] = offsetX * a + offsetY * b + x;\n worldVertices[offset + 1] = offsetX * c + offsetY * d + y;\n };\n RegionAttachment.prototype.copy = function () {\n var copy = new RegionAttachment(name);\n copy.region = this.region;\n copy.rendererObject = this.rendererObject;\n copy.path = this.path;\n copy.x = this.x;\n copy.y = this.y;\n copy.scaleX = this.scaleX;\n copy.scaleY = this.scaleY;\n copy.rotation = this.rotation;\n copy.width = this.width;\n copy.height = this.height;\n spine.Utils.arrayCopy(this.uvs, 0, copy.uvs, 0, 8);\n spine.Utils.arrayCopy(this.offset, 0, copy.offset, 0, 8);\n copy.color.setFromColor(this.color);\n return copy;\n };\n RegionAttachment.OX1 = 0;\n RegionAttachment.OY1 = 1;\n RegionAttachment.OX2 = 2;\n RegionAttachment.OY2 = 3;\n RegionAttachment.OX3 = 4;\n RegionAttachment.OY3 = 5;\n RegionAttachment.OX4 = 6;\n RegionAttachment.OY4 = 7;\n RegionAttachment.X1 = 0;\n RegionAttachment.Y1 = 1;\n RegionAttachment.C1R = 2;\n RegionAttachment.C1G = 3;\n RegionAttachment.C1B = 4;\n RegionAttachment.C1A = 5;\n RegionAttachment.U1 = 6;\n RegionAttachment.V1 = 7;\n RegionAttachment.X2 = 8;\n RegionAttachment.Y2 = 9;\n RegionAttachment.C2R = 10;\n RegionAttachment.C2G = 11;\n RegionAttachment.C2B = 12;\n RegionAttachment.C2A = 13;\n RegionAttachment.U2 = 14;\n RegionAttachment.V2 = 15;\n RegionAttachment.X3 = 16;\n RegionAttachment.Y3 = 17;\n RegionAttachment.C3R = 18;\n RegionAttachment.C3G = 19;\n RegionAttachment.C3B = 20;\n RegionAttachment.C3A = 21;\n RegionAttachment.U3 = 22;\n RegionAttachment.V3 = 23;\n RegionAttachment.X4 = 24;\n RegionAttachment.Y4 = 25;\n RegionAttachment.C4R = 26;\n RegionAttachment.C4G = 27;\n RegionAttachment.C4B = 28;\n RegionAttachment.C4A = 29;\n RegionAttachment.U4 = 30;\n RegionAttachment.V4 = 31;\n return RegionAttachment;\n }(spine.Attachment));\n spine.RegionAttachment = RegionAttachment;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var JitterEffect = (function () {\n function JitterEffect(jitterX, jitterY) {\n this.jitterX = 0;\n this.jitterY = 0;\n this.jitterX = jitterX;\n this.jitterY = jitterY;\n }\n JitterEffect.prototype.begin = function (skeleton) {\n };\n JitterEffect.prototype.transform = function (position, uv, light, dark) {\n position.x += spine.MathUtils.randomTriangular(-this.jitterX, this.jitterY);\n position.y += spine.MathUtils.randomTriangular(-this.jitterX, this.jitterY);\n };\n JitterEffect.prototype.end = function () {\n };\n return JitterEffect;\n }());\n spine.JitterEffect = JitterEffect;\n})(spine || (spine = {}));\nvar spine;\n(function (spine) {\n var SwirlEffect = (function () {\n function SwirlEffect(radius, interpolation) {\n this.centerX = 0;\n this.centerY = 0;\n this.radius = 0;\n this.angle = 0;\n this.worldX = 0;\n this.worldY = 0;\n this.radius = radius;\n this.interpolation = interpolation;\n }\n SwirlEffect.prototype.begin = function (skeleton) {\n this.worldX = skeleton.x + this.centerX;\n this.worldY = skeleton.y + this.centerY;\n };\n SwirlEffect.prototype.transform = function (position, uv, light, dark) {\n var radAngle = this.angle * spine.MathUtils.degreesToRadians;\n var x = position.x - this.worldX;\n var y = position.y - this.worldY;\n var dist = Math.sqrt(x * x + y * y);\n if (dist < this.radius) {\n var theta = this.interpolation.apply(0, radAngle, (this.radius - dist) / this.radius);\n var cos = Math.cos(theta);\n var sin = Math.sin(theta);\n position.x = cos * x - sin * y + this.worldX;\n position.y = sin * x + cos * y + this.worldY;\n }\n };\n SwirlEffect.prototype.end = function () {\n };\n SwirlEffect.interpolation = new spine.PowOut(2);\n return SwirlEffect;\n }());\n spine.SwirlEffect = SwirlEffect;\n})(spine || (spine = {}));\n//# sourceMappingURL=spine-core.js.map\n\nmodule.exports = spine;\n","/****************************************************************************\n Copyright (c) 2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nconst TrackEntryListeners = require('./track-entry-listeners');\nconst spine = require('./lib/spine');\n// Permit max cache time, unit is second.\nconst MaxCacheTime = 30;\nconst FrameTime = 1 / 60;\n\nlet _vertices = [];\nlet _indices = [];\nlet _boneInfoOffset = 0;\nlet _vertexOffset = 0;\nlet _indexOffset = 0;\nlet _vfOffset = 0;\nlet _preTexUrl = null;\nlet _preBlendMode = null;\nlet _segVCount = 0;\nlet _segICount = 0;\nlet _segOffset = 0;\nlet _colorOffset = 0;\nlet _preFinalColor = null;\nlet _preDarkColor = null;\n// x y u v c1 c2\nlet _perVertexSize = 6;\n// x y u v r1 g1 b1 a1 r2 g2 b2 a2\nlet _perClipVertexSize = 12;\nlet _vfCount = 0, _indexCount = 0;\nlet _tempr, _tempg, _tempb, _tempa;\nlet _finalColor32, _darkColor32;\nlet _finalColor = new spine.Color(1, 1, 1, 1);\nlet _darkColor = new spine.Color(1, 1, 1, 1);\nlet _quadTriangles = [0, 1, 2, 2, 3, 0];\n\n//Cache all frames in an animation\nlet AnimationCache = cc.Class({\n ctor () {\n this._privateMode = false;\n this._inited = false;\n this._invalid = true;\n this._enableCacheAttachedInfo = false;\n this.frames = [];\n this.totalTime = 0;\n this._frameIdx = -1;\n this.isCompleted = false;\n\n this._skeletonInfo = null;\n this._animationName = null;\n this._tempSegments = null;\n this._tempColors = null;\n this._tempBoneInfos = null;\n },\n\n init (skeletonInfo, animationName) {\n this._inited = true;\n this._animationName = animationName;\n this._skeletonInfo = skeletonInfo;\n },\n\n // Clear texture quote.\n clear () {\n this._inited = false;\n for (let i = 0, n = this.frames.length; i < n; i++) {\n let frame = this.frames[i];\n frame.segments.length = 0;\n }\n this.invalidAllFrame();\n },\n\n bind (listener) {\n let completeHandle = function (entry) {\n if (entry && entry.animation.name === this._animationName) {\n this.isCompleted = true;\n }\n }.bind(this);\n\n listener.complete = completeHandle;\n },\n\n unbind (listener) {\n listener.complete = null;\n },\n\n begin () {\n if (!this._invalid) return;\n\n let skeletonInfo = this._skeletonInfo;\n let preAnimationCache = skeletonInfo.curAnimationCache;\n \n if (preAnimationCache && preAnimationCache !== this) {\n if (this._privateMode) {\n // Private cache mode just invalid pre animation frame.\n preAnimationCache.invalidAllFrame();\n } else {\n // If pre animation not finished, play it to the end.\n preAnimationCache.updateToFrame();\n }\n }\n\n let skeleton = skeletonInfo.skeleton;\n let listener = skeletonInfo.listener;\n let state = skeletonInfo.state;\n\n let animation = skeleton.data.findAnimation(this._animationName);\n state.setAnimationWith(0, animation, false);\n this.bind(listener);\n\n // record cur animation cache\n skeletonInfo.curAnimationCache = this;\n this._frameIdx = -1;\n this.isCompleted = false;\n this.totalTime = 0;\n this._invalid = false;\n },\n\n end () {\n if (!this._needToUpdate()) {\n // clear cur animation cache\n this._skeletonInfo.curAnimationCache = null;\n this.frames.length = this._frameIdx + 1;\n this.isCompleted = true;\n this.unbind(this._skeletonInfo.listener);\n }\n },\n\n _needToUpdate (toFrameIdx) {\n return !this.isCompleted && \n this.totalTime < MaxCacheTime && \n (toFrameIdx == undefined || this._frameIdx < toFrameIdx);\n },\n\n updateToFrame (toFrameIdx) {\n if (!this._inited) return;\n\n this.begin();\n\n if (!this._needToUpdate(toFrameIdx)) return;\n\n let skeletonInfo = this._skeletonInfo;\n let skeleton = skeletonInfo.skeleton;\n let clipper = skeletonInfo.clipper;\n let state = skeletonInfo.state;\n\n do {\n // Solid update frame rate 1/60.\n skeleton.update(FrameTime);\n state.update(FrameTime);\n state.apply(skeleton);\n skeleton.updateWorldTransform();\n this._frameIdx++;\n this._updateFrame(skeleton, clipper, this._frameIdx);\n this.totalTime += FrameTime;\n } while (this._needToUpdate(toFrameIdx));\n\n this.end();\n },\n\n isInited () {\n return this._inited;\n },\n\n isInvalid () {\n return this._invalid;\n },\n\n invalidAllFrame () {\n this.isCompleted = false;\n this._invalid = true;\n },\n\n updateAllFrame () {\n this.invalidAllFrame();\n this.updateToFrame();\n },\n\n enableCacheAttachedInfo () {\n if (!this._enableCacheAttachedInfo) {\n this._enableCacheAttachedInfo = true;\n this.invalidAllFrame();\n }\n },\n\n _updateFrame (skeleton, clipper, index) {\n _vfOffset = 0;\n _boneInfoOffset = 0;\n _indexOffset = 0;\n _vertexOffset = 0;\n _preTexUrl = null;\n _preBlendMode = null;\n _segVCount = 0;\n _segICount = 0;\n _segOffset = 0;\n _colorOffset = 0;\n _preFinalColor = null;\n _preDarkColor = null;\n\n this.frames[index] = this.frames[index] || {\n segments : [],\n colors : [],\n boneInfos : [],\n vertices : null,\n uintVert : null,\n indices : null,\n };\n let frame = this.frames[index];\n\n let segments = this._tempSegments = frame.segments;\n let colors = this._tempColors = frame.colors;\n let boneInfos = this._tempBoneInfos = frame.boneInfos;\n this._traverseSkeleton(skeleton, clipper);\n if (_colorOffset > 0) {\n colors[_colorOffset - 1].vfOffset = _vfOffset;\n }\n colors.length = _colorOffset;\n boneInfos.length = _boneInfoOffset;\n // Handle pre segment.\n let preSegOffset = _segOffset - 1;\n if (preSegOffset >= 0) {\n // Judge segment vertex count is not empty.\n if (_segICount > 0) {\n let preSegInfo = segments[preSegOffset];\n preSegInfo.indexCount = _segICount;\n preSegInfo.vfCount = _segVCount * _perVertexSize;\n preSegInfo.vertexCount = _segVCount;\n segments.length = _segOffset;\n } else {\n // Discard pre segment.\n segments.length = _segOffset - 1;\n }\n }\n\n // Segments is empty,discard all segments.\n if (segments.length == 0) return;\n\n // Fill vertices\n let vertices = frame.vertices;\n let uintVert = frame.uintVert;\n if (!vertices || vertices.length < _vfOffset) {\n vertices = frame.vertices = new Float32Array(_vfOffset);\n uintVert = frame.uintVert = new Uint32Array(vertices.buffer);\n }\n for (let i = 0, j = 0; i < _vfOffset;) {\n vertices[i++] = _vertices[j++]; // x\n vertices[i++] = _vertices[j++]; // y\n vertices[i++] = _vertices[j++]; // u\n vertices[i++] = _vertices[j++]; // v\n uintVert[i++] = _vertices[j++]; // color1\n uintVert[i++] = _vertices[j++]; // color2\n }\n\n // Fill indices\n let indices = frame.indices;\n if (!indices || indices.length < _indexOffset) {\n indices = frame.indices = new Uint16Array(_indexOffset);\n }\n\n for (let i = 0; i < _indexOffset; i++) {\n indices[i] = _indices[i];\n }\n\n frame.vertices = vertices;\n frame.uintVert = uintVert;\n frame.indices = indices;\n },\n\n fillVertices (skeletonColor, attachmentColor, slotColor, clipper, slot) {\n\n _tempa = slotColor.a * attachmentColor.a * skeletonColor.a * 255;\n _tempr = attachmentColor.r * skeletonColor.r * 255;\n _tempg = attachmentColor.g * skeletonColor.g * 255;\n _tempb = attachmentColor.b * skeletonColor.b * 255;\n \n _finalColor.r = _tempr * slotColor.r;\n _finalColor.g = _tempg * slotColor.g;\n _finalColor.b = _tempb * slotColor.b;\n _finalColor.a = _tempa;\n\n if (slot.darkColor == null) {\n _darkColor.set(0.0, 0, 0, 1.0);\n } else {\n _darkColor.r = slot.darkColor.r * _tempr;\n _darkColor.g = slot.darkColor.g * _tempg;\n _darkColor.b = slot.darkColor.b * _tempb;\n }\n _darkColor.a = 0;\n\n _finalColor32 = ((_finalColor.a<<24) >>> 0) + (_finalColor.b<<16) + (_finalColor.g<<8) + _finalColor.r;\n _darkColor32 = ((_darkColor.a<<24) >>> 0) + (_darkColor.b<<16) + (_darkColor.g<<8) + _darkColor.r;\n\n if (_preFinalColor !== _finalColor32 || _preDarkColor !== _darkColor32) {\n let colors = this._tempColors;\n _preFinalColor = _finalColor32;\n _preDarkColor = _darkColor32;\n if (_colorOffset > 0) {\n colors[_colorOffset - 1].vfOffset = _vfOffset;\n }\n colors[_colorOffset++] = {\n fr : _finalColor.r,\n fg : _finalColor.g,\n fb : _finalColor.b,\n fa : _finalColor.a,\n dr : _darkColor.r,\n dg : _darkColor.g,\n db : _darkColor.b,\n da : _darkColor.a,\n vfOffset : 0\n }\n }\n\n if (!clipper.isClipping()) {\n \n for (let v = _vfOffset, n = _vfOffset + _vfCount; v < n; v += _perVertexSize) {\n _vertices[v + 4] = _finalColor32; // light color\n _vertices[v + 5] = _darkColor32; // dark color\n }\n \n } else {\n clipper.clipTriangles(_vertices, _vfCount, _indices, _indexCount, _vertices, _finalColor, _darkColor, true, _perVertexSize, _indexOffset, _vfOffset, _vfOffset + 2);\n let clippedVertices = clipper.clippedVertices;\n let clippedTriangles = clipper.clippedTriangles;\n \n // insure capacity\n _indexCount = clippedTriangles.length;\n _vfCount = clippedVertices.length / _perClipVertexSize * _perVertexSize;\n\n // fill indices\n for (let ii = 0, jj = _indexOffset, nn = clippedTriangles.length; ii < nn;) {\n _indices[jj++] = clippedTriangles[ii++];\n }\n\n // fill vertices contain x y u v light color dark color\n for (let v = 0, n = clippedVertices.length, offset = _vfOffset; v < n; v += 12, offset += _perVertexSize) {\n _vertices[offset] = clippedVertices[v]; // x\n _vertices[offset + 1] = clippedVertices[v + 1]; // y\n _vertices[offset + 2] = clippedVertices[v + 6]; // u\n _vertices[offset + 3] = clippedVertices[v + 7]; // v\n\n _vertices[offset + 4] = _finalColor32;\n _vertices[offset + 5] = _darkColor32;\n }\n }\n },\n\n _traverseSkeleton (skeleton, clipper) {\n let segments = this._tempSegments;\n let boneInfos = this._tempBoneInfos;\n let skeletonColor = skeleton.color;\n let attachment, attachmentColor, slotColor, uvs, triangles;\n let isRegion, isMesh, isClip;\n let texture;\n let preSegOffset, preSegInfo;\n let blendMode;\n let slot;\n\n let bones = skeleton.bones;\n if (this._enableCacheAttachedInfo) {\n for (let i = 0, l = bones.length; i < l; i++, _boneInfoOffset++) {\n let bone = bones[i];\n let boneInfo = boneInfos[_boneInfoOffset];\n if (!boneInfo) {\n boneInfo = boneInfos[_boneInfoOffset] = {};\n }\n boneInfo.a = bone.a;\n boneInfo.b = bone.b;\n boneInfo.c = bone.c;\n boneInfo.d = bone.d;\n boneInfo.worldX = bone.worldX;\n boneInfo.worldY = bone.worldY;\n }\n }\n\n for (let slotIdx = 0, slotCount = skeleton.drawOrder.length; slotIdx < slotCount; slotIdx++) {\n slot = skeleton.drawOrder[slotIdx];\n \n _vfCount = 0;\n _indexCount = 0;\n\n attachment = slot.getAttachment();\n if (!attachment) {\n clipper.clipEndWithSlot(slot);\n continue;\n }\n\n isRegion = attachment instanceof spine.RegionAttachment;\n isMesh = attachment instanceof spine.MeshAttachment;\n isClip = attachment instanceof spine.ClippingAttachment;\n\n if (isClip) {\n clipper.clipStart(slot, attachment);\n continue;\n }\n\n if (!isRegion && !isMesh) {\n clipper.clipEndWithSlot(slot);\n continue;\n }\n\n texture = attachment.region.texture._texture;\n if (!texture) {\n clipper.clipEndWithSlot(slot);\n continue;\n }\n \n blendMode = slot.data.blendMode;\n if (_preTexUrl !== texture.nativeUrl || _preBlendMode !== blendMode) {\n _preTexUrl = texture.nativeUrl;\n _preBlendMode = blendMode;\n // Handle pre segment.\n preSegOffset = _segOffset - 1;\n if (preSegOffset >= 0) {\n if (_segICount > 0) {\n preSegInfo = segments[preSegOffset];\n preSegInfo.indexCount = _segICount;\n preSegInfo.vertexCount = _segVCount;\n preSegInfo.vfCount = _segVCount * _perVertexSize;\n } else {\n // Discard pre segment.\n _segOffset--;\n }\n }\n // Handle now segment.\n segments[_segOffset] = {\n tex : texture,\n blendMode : blendMode,\n indexCount : 0,\n vertexCount : 0,\n vfCount : 0\n };\n _segOffset++;\n _segICount = 0;\n _segVCount = 0;\n }\n\n if (isRegion) {\n \n triangles = _quadTriangles;\n \n // insure capacity\n _vfCount = 4 * _perVertexSize;\n _indexCount = 6;\n \n // compute vertex and fill x y\n attachment.computeWorldVertices(slot.bone, _vertices, _vfOffset, _perVertexSize);\n }\n else if (isMesh) {\n \n triangles = attachment.triangles;\n \n // insure capacity\n _vfCount = (attachment.worldVerticesLength >> 1) * _perVertexSize;\n _indexCount = triangles.length;\n \n // compute vertex and fill x y\n attachment.computeWorldVertices(slot, 0, attachment.worldVerticesLength, _vertices, _vfOffset, _perVertexSize);\n }\n \n if (_vfCount == 0 || _indexCount == 0) {\n clipper.clipEndWithSlot(slot);\n continue;\n }\n \n // fill indices\n for (let ii = 0, jj = _indexOffset, nn = triangles.length; ii < nn;) {\n _indices[jj++] = triangles[ii++];\n }\n\n // fill u v\n uvs = attachment.uvs;\n for (let v = _vfOffset, n = _vfOffset + _vfCount, u = 0; v < n; v += _perVertexSize, u += 2) {\n _vertices[v + 2] = uvs[u]; // u\n _vertices[v + 3] = uvs[u + 1]; // v\n }\n\n attachmentColor = attachment.color;\n slotColor = slot.color;\n\n this.fillVertices(skeletonColor, attachmentColor, slotColor, clipper, slot);\n \n if (_indexCount > 0) {\n for (let ii = _indexOffset, nn = _indexOffset + _indexCount; ii < nn; ii++) {\n _indices[ii] += _segVCount;\n }\n _indexOffset += _indexCount;\n _vfOffset += _vfCount;\n _vertexOffset = _vfOffset / _perVertexSize;\n _segICount += _indexCount;\n _segVCount += _vfCount / _perVertexSize;\n }\n \n clipper.clipEndWithSlot(slot);\n }\n \n clipper.clipEnd();\n }\n});\n\nlet SkeletonCache = cc.Class({\n ctor () {\n this._privateMode = false;\n this._animationPool = {};\n this._skeletonCache = {};\n },\n\n enablePrivateMode () {\n this._privateMode = true;\n },\n\n clear () {\n this._animationPool = {};\n this._skeletonCache = {};\n },\n\n removeSkeleton (uuid) {\n var skeletonInfo = this._skeletonCache[uuid];\n if (!skeletonInfo) return;\n let animationsCache = skeletonInfo.animationsCache;\n for (var aniKey in animationsCache) {\n // Clear cache texture, and put cache into pool.\n // No need to create TypedArray next time.\n let animationCache = animationsCache[aniKey];\n if (!animationCache) continue;\n this._animationPool[uuid + \"#\" + aniKey] = animationCache;\n animationCache.clear();\n }\n\n delete this._skeletonCache[uuid];\n },\n\n getSkeletonCache (uuid, skeletonData) {\n let skeletonInfo = this._skeletonCache[uuid];\n if (!skeletonInfo) {\n let skeleton = new spine.Skeleton(skeletonData);\n let clipper = new spine.SkeletonClipping();\n let stateData = new spine.AnimationStateData(skeleton.data);\n let state = new spine.AnimationState(stateData);\n let listener = new TrackEntryListeners();\n state.addListener(listener);\n\n this._skeletonCache[uuid] = skeletonInfo = {\n skeleton : skeleton,\n clipper : clipper,\n state : state,\n listener : listener,\n // Cache all kinds of animation frame.\n // When skeleton is dispose, clear all animation cache.\n animationsCache : {},\n curAnimationCache: null\n };\n }\n return skeletonInfo;\n },\n\n getAnimationCache (uuid, animationName) {\n let skeletonInfo = this._skeletonCache[uuid];\n if (!skeletonInfo) return null;\n\n let animationsCache = skeletonInfo.animationsCache;\n return animationsCache[animationName];\n },\n\n invalidAnimationCache (uuid) {\n let skeletonInfo = this._skeletonCache[uuid];\n let skeleton = skeletonInfo && skeletonInfo.skeleton;\n if (!skeleton) return;\n\n let animationsCache = skeletonInfo.animationsCache;\n for (var aniKey in animationsCache) {\n let animationCache = animationsCache[aniKey];\n animationCache.invalidAllFrame();\n }\n },\n\n initAnimationCache (uuid, animationName) {\n if (!animationName) return null;\n let skeletonInfo = this._skeletonCache[uuid];\n let skeleton = skeletonInfo && skeletonInfo.skeleton;\n if (!skeleton) return null;\n\n let animation = skeleton.data.findAnimation(animationName);\n if (!animation) {\n return null;\n }\n\n let animationsCache = skeletonInfo.animationsCache;\n let animationCache = animationsCache[animationName];\n if (!animationCache) {\n // If cache exist in pool, then just use it.\n let poolKey = uuid + \"#\" + animationName;\n animationCache = this._animationPool[poolKey];\n if (animationCache) {\n delete this._animationPool[poolKey];\n } else {\n animationCache = new AnimationCache();\n animationCache._privateMode = this._privateMode;\n }\n animationCache.init(skeletonInfo, animationName);\n animationsCache[animationName] = animationCache;\n }\n return animationCache;\n },\n\n updateAnimationCache (uuid, animationName) {\n if (animationName) {\n let animationCache = this.initAnimationCache(uuid, animationName);\n if (!animationCache) return null;\n animationCache.updateAllFrame();\n } else {\n let skeletonInfo = this._skeletonCache[uuid];\n let skeleton = skeletonInfo && skeletonInfo.skeleton;\n if (!skeleton) return;\n\n let animationsCache = skeletonInfo.animationsCache;\n for (var aniKey in animationsCache) {\n let animationCache = animationsCache[aniKey];\n animationCache.updateAllFrame();\n }\n }\n }\n});\n\nSkeletonCache.FrameTime = FrameTime;\nSkeletonCache.sharedCache = new SkeletonCache();\nmodule.exports = SkeletonCache;","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n/**\n * @module sp\n */\nlet SkeletonCache = !CC_JSB && require('./skeleton-cache').sharedCache;\n\n/**\n * !#en The skeleton data of spine.\n * !#zh Spine 的 骨骼数据。\n * @class SkeletonData\n * @extends Asset\n */\nlet SkeletonData = cc.Class({\n name: 'sp.SkeletonData',\n extends: cc.Asset,\n\n ctor: function () {\n this.reset();\n },\n\n properties: {\n _skeletonJson: null,\n\n // use by jsb\n skeletonJsonStr: {\n get: function () {\n if (this._skeletonJson) {\n return JSON.stringify(this._skeletonJson);\n } else {\n return \"\";\n }\n }\n },\n\n /**\n * !#en See http://en.esotericsoftware.com/spine-json-format\n * !#zh 可查看 Spine 官方文档 http://zh.esotericsoftware.com/spine-json-format\n * @property {Object} skeletonJson\n */\n skeletonJson: {\n get: function () {\n return this._skeletonJson;\n },\n set: function (value) {\n this.reset();\n if (typeof(value) == \"string\") {\n this._skeletonJson = JSON.parse(value);\n } else {\n this._skeletonJson = value;\n }\n // If create by manual, uuid is empty.\n if (!this._uuid && value.skeleton) {\n this._uuid = value.skeleton.hash;\n }\n }\n },\n\n _atlasText: \"\",\n\n /**\n * @property {String} atlasText\n */\n atlasText: {\n get: function () {\n return this._atlasText;\n },\n set: function (value) {\n this._atlasText = value;\n this.reset();\n }\n },\n\n /**\n * @property {Texture2D[]} textures\n */\n textures: {\n default: [],\n type: [cc.Texture2D]\n },\n\n /**\n * @property {String[]} textureNames\n * @private\n */\n textureNames: {\n default: [],\n type: [cc.String]\n },\n\n /**\n * !#en\n * A scale can be specified on the JSON or binary loader which will scale the bone positions,\n * image sizes, and animation translations.\n * This can be useful when using different sized images than were used when designing the skeleton\n * in Spine. For example, if using images that are half the size than were used in Spine,\n * a scale of 0.5 can be used. This is commonly used for games that can run with either low or high\n * resolution texture atlases.\n * see http://en.esotericsoftware.com/spine-using-runtimes#Scaling\n * !#zh 可查看 Spine 官方文档: http://zh.esotericsoftware.com/spine-using-runtimes#Scaling\n * @property {Number} scale\n */\n scale: 1,\n\n _nativeAsset: {\n get () {\n return this._buffer;\n },\n set (bin) {\n this._buffer = bin.buffer || bin;\n this.reset();\n },\n override: true\n },\n },\n\n statics: {\n preventDeferredLoadDependents: true,\n\n createRegion(spriteFrame, original = undefined) {\n const region = new sp.spine.TextureAtlasRegion();\n\n const texture = spriteFrame.getTexture();\n const rect = spriteFrame.getRect();\n const origSize = spriteFrame.getOriginalSize();\n const _offset = spriteFrame.getOffset();\n const rotate = spriteFrame.isRotated();\n const offset = cc.v2(\n (origSize.width - rect.width) * 0.5 + _offset.x,\n (origSize.height - rect.height) * 0.5 + _offset.y,\n );\n const degrees = rotate ? 270 : 0;\n\n if (original) {\n region.name = original.name;\n region.page = original.page;\n }\n\n region.x = rect.x;\n region.y = rect.y;\n region.width = rect.width;\n region.height = rect.height;\n region.originalWidth = origSize.width;\n region.originalHeight = origSize.height;\n region.offsetX = offset.x;\n region.offsetY = offset.y;\n region.rotate = degrees != 0;\n region.degrees = degrees;\n\n const skelTex = new sp.SkeletonTexture({\n width: texture.width,\n height: texture.height,\n });\n skelTex.setRealTexture(texture);\n region.texture = skelTex;\n\n this.updateRegionUV(region);\n\n return region;\n },\n\n updateRegionUV(region) {\n const texture = region.texture._texture;\n if (region.rotate) {\n region.u = region.x / texture.width;\n region.v = region.y / texture.height;\n region.u2 = (region.x + region.height) / texture.width;\n region.v2 = (region.y + region.width) / texture.height;\n } else {\n region.u = region.x / texture.width;\n region.v = region.y / texture.height;\n region.u2 = (region.x + region.width) / texture.width;\n region.v2 = (region.y + region.height) / texture.height;\n }\n },\n\n createSpriteFrame(region) {\n const frame = new cc.SpriteFrame(\n region.texture._texture,\n cc.rect(region.x, region.y, region.width, region.height),\n region.rotate, // 如果 region 不是 0 或 270 则会出现问题\n cc.v2(region.offsetX - (region.originalWidth - region.width) * 0.5, region.offsetY - (region.originalHeight - region.height) * 0.5),\n cc.size(region.originalWidth, region.originalHeight),\n );\n return frame;\n },\n },\n\n // PUBLIC\n\n createNode: CC_EDITOR && function (callback) {\n let node = new cc.Node(this.name);\n let skeleton = node.addComponent(sp.Skeleton);\n skeleton.skeletonData = this;\n\n return callback(null, node);\n },\n\n reset: function () {\n /**\n * @property {sp.spine.SkeletonData} _skeletonData\n * @private\n */\n this._skeletonCache = null;\n /**\n * @property {sp.spine.Atlas} _atlasCache\n * @private\n */\n this._atlasCache = null;\n if (CC_EDITOR) {\n this._skinsEnum = null;\n this._animsEnum = null;\n }\n this._cloneId = 0;\n },\n\n ensureTexturesLoaded (loaded, caller) {\n let textures = this.textures; \n let texsLen = textures.length;\n if (texsLen == 0) {\n loaded.call(caller, false);\n return;\n }\n let loadedCount = 0;\n let loadedItem = function () {\n loadedCount++;\n if (loadedCount >= texsLen) {\n loaded && loaded.call(caller, true);\n loaded = null;\n }\n }\n for (let i = 0; i < texsLen; i++) {\n let tex = textures[i];\n if (tex.loaded) {\n loadedItem();\n } else {\n tex.once('load', loadedItem);\n }\n }\n },\n\n isTexturesLoaded () {\n let textures = this.textures; \n let texsLen = textures.length;\n for (let i = 0; i < texsLen; i++) {\n let tex = textures[i];\n if (!tex.loaded) {\n return false;\n }\n }\n return true;\n },\n\n /**\n * !#en Get the included SkeletonData used in spine runtime.
\n * Returns a {{#crossLinkModule \"sp.spine\"}}sp.spine{{/crossLinkModule}}.SkeletonData object.\n * !#zh 获取 Spine Runtime 使用的 SkeletonData。
\n * 返回一个 {{#crossLinkModule \"sp.spine\"}}sp.spine{{/crossLinkModule}}.SkeletonData 对象。\n * @method getRuntimeData\n * @param {Boolean} [quiet=false]\n * @return {sp.spine.SkeletonData}\n */\n getRuntimeData: function (quiet) {\n if (this._skeletonCache) {\n return this._skeletonCache;\n }\n\n if ( !(this.textures && this.textures.length > 0) && this.textureNames && this.textureNames.length > 0 ) {\n if ( !quiet ) {\n cc.errorID(7507, this.name);\n }\n return null;\n }\n\n let atlas = this._getAtlas(quiet);\n if (! atlas) {\n return null;\n }\n let attachmentLoader = new sp.spine.AtlasAttachmentLoader(atlas);\n\n let resData = null;\n let reader = null;\n if (this.skeletonJson) {\n reader = new sp.spine.SkeletonJson(attachmentLoader);\n resData = this.skeletonJson;\n } else {\n reader = new sp.spine.SkeletonBinary(attachmentLoader);\n resData = new Uint8Array(this._nativeAsset);\n }\n\n reader.scale = this.scale;\n this._skeletonCache = reader.readSkeletonData(resData);\n atlas.dispose();\n\n return this._skeletonCache;\n },\n\n // EDITOR\n\n getSkinsEnum: CC_EDITOR && function () {\n if (this._skinsEnum) {\n return this._skinsEnum;\n }\n let sd = this.getRuntimeData(true);\n if (sd) {\n let skins = sd.skins;\n let enumDef = {};\n for (let i = 0; i < skins.length; i++) {\n let name = skins[i].name;\n enumDef[name] = i;\n }\n return this._skinsEnum = cc.Enum(enumDef);\n }\n return null;\n },\n\n getAnimsEnum: CC_EDITOR && function () {\n if (this._animsEnum) {\n return this._animsEnum;\n }\n let sd = this.getRuntimeData(true);\n if (sd) {\n let enumDef = { '': 0 };\n let anims = sd.animations;\n for (let i = 0; i < anims.length; i++) {\n let name = anims[i].name;\n enumDef[name] = i + 1;\n }\n return this._animsEnum = cc.Enum(enumDef);\n }\n return null;\n },\n\n // PRIVATE\n\n _getTexture: function (line) {\n let names = this.textureNames;\n for (let i = 0; i < names.length; i++) {\n if (names[i] === line) {\n let texture = this.textures[i];\n let tex = new sp.SkeletonTexture({ width: texture.width, height: texture.height });\n tex.setRealTexture(texture);\n return tex;\n }\n }\n cc.errorID(7506, line);\n return null;\n },\n\n /**\n * @method _getAtlas\n * @param {boolean} [quiet=false]\n * @return {sp.spine.Atlas}\n * @private\n */\n _getAtlas: function (quiet) {\n if (this._atlasCache) {\n return this._atlasCache;\n }\n\n if ( !this.atlasText ) {\n if ( !quiet ) {\n cc.errorID(7508, this.name);\n }\n return null;\n }\n\n return this._atlasCache = new sp.spine.TextureAtlas(this.atlasText, this._getTexture.bind(this));\n },\n\n /**\n * 克隆 SkeletonData\n */\n clone: function () {\n const cloned = new SkeletonData();\n cloned._cloneId = this._cloneId + 1;\n const suffix = '(clone ' + String(cloned._cloneId) + ')';\n cloned._uuid = this._uuid + suffix;\n cloned.name = this.name + suffix;\n cloned.scale = this.scale;\n cloned.textureNames = this.textureNames;\n cloned.textures = this.textures;\n cloned._atlasText = this._atlasText;\n cloned._skeletonJson = this._skeletonJson;\n cloned._buffer = this._buffer;\n\n return cloned;\n },\n\n destroy() {\n // 删除动态图集\n if (this._atlasCache) {\n const regions = this._atlasCache.regions;\n for (const region of regions) {\n if (region._spriteFrame) {\n region._spriteFrame.destroy();\n region._spriteFrame = null;\n }\n }\n }\n if (this._skeletonCache) {\n const skins = this._skeletonCache.skins;\n for (const skin of skins) {\n for (const attachments of skin.attachments) {\n for (const key in attachments) {\n const region = attachments[key].region;\n if (region && region._spriteFrame) {\n region._spriteFrame.destroy();\n region._spriteFrame = null;\n }\n }\n }\n }\n }\n SkeletonCache.removeSkeleton(this._uuid);\n this._super();\n },\n});\n\nsp.SkeletonData = module.exports = SkeletonData;\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nsp.SkeletonTexture = cc.Class({\n name: 'sp.SkeletonTexture',\n extends: sp.spine.Texture,\n _texture: null,\n _material: null,\n\n setRealTexture: function(tex) {\n this._texture = tex;\n },\n\n getRealTexture: function() {\n return this._texture;\n },\n\n setFilters: function(minFilter, magFilter) {\n if (this._texture) {\n this._texture.setFilters(minFilter, magFilter);\n }\n },\n\n setWraps: function(uWrap, vWrap) {\n if (this._texture) {\n this._texture.setWrapMode(uWrap, vWrap);\n }\n },\n\n dispose: function() {}\n});\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nimport Assembler from '../../cocos2d/core/renderer/assembler';\n\nconst Skeleton = require('./Skeleton');\nconst spine = require('./lib/spine');\nconst RenderFlow = require('../../cocos2d/core/renderer/render-flow');\nconst VertexFormat = require('../../cocos2d/core/renderer/webgl/vertex-format')\nconst VFOneColor = VertexFormat.vfmtPosUvColor;\nconst VFOneColorTexId = VertexFormat.vfmtPosUvColorTexId;\nconst VFTwoColor = VertexFormat.vfmtPosUvTwoColor;\nconst gfx = cc.gfx;\n\nconst FLAG_BATCH = 0x10;\nconst FLAG_TWO_COLOR = 0x01;\n\nlet _handleVal = 0x00;\nlet _quadTriangles = [0, 1, 2, 2, 3, 0];\nlet _slotColor = cc.color(0, 0, 255, 255);\nlet _boneColor = cc.color(255, 0, 0, 255);\nlet _originColor = cc.color(0, 255, 0, 255);\nlet _meshColor = cc.color(255, 255, 0, 255);\n\nlet _finalColor = null;\nlet _darkColor = null;\nlet _tempPos = null, _tempUv = null;\nif (!CC_NATIVERENDERER) {\n _finalColor = new spine.Color(1, 1, 1, 1);\n _darkColor = new spine.Color(1, 1, 1, 1);\n _tempPos = new spine.Vector2();\n _tempUv = new spine.Vector2();\n}\n\nlet _premultipliedAlpha;\nlet _multiplier;\nlet _slotRangeStart;\nlet _slotRangeEnd;\nlet _useTint;\nlet _useMulti;\nlet _texId;\nlet _debugSlots;\nlet _debugBones;\nlet _debugMesh;\nlet _nodeR,\n _nodeG,\n _nodeB,\n _nodeA;\nlet _finalColor32, _darkColor32;\nlet _vertexFormat;\nlet _perVertexSize;\nlet _perClipVertexSize;\n\nlet _vertexFloatCount = 0, _vertexCount = 0, _vertexFloatOffset = 0, _vertexOffset = 0,\n _indexCount = 0, _indexOffset = 0, _vfOffset = 0;\nlet _tempr, _tempg, _tempb;\nlet _inRange;\nlet _mustFlush;\nlet _x, _y, _m00, _m04, _m12, _m01, _m05, _m13;\nlet _r, _g, _b, _fr, _fg, _fb, _fa, _dr, _dg, _db, _da;\nlet _comp, _buffer, _renderer, _node, _needColor, _vertexEffect;\n\nfunction _getSlotMaterial (tex, blendMode) {\n let src, dst;\n switch (blendMode) {\n case spine.BlendMode.Additive:\n src = _premultipliedAlpha ? cc.macro.ONE : cc.macro.SRC_ALPHA;\n dst = cc.macro.ONE;\n break;\n case spine.BlendMode.Multiply:\n src = cc.macro.DST_COLOR;\n dst = cc.macro.ONE_MINUS_SRC_ALPHA;\n break;\n case spine.BlendMode.Screen:\n src = cc.macro.ONE;\n dst = cc.macro.ONE_MINUS_SRC_COLOR;\n break;\n case spine.BlendMode.Normal:\n default:\n src = _premultipliedAlpha ? cc.macro.ONE : cc.macro.SRC_ALPHA;\n dst = cc.macro.ONE_MINUS_SRC_ALPHA;\n break;\n }\n\n let useModel = !_comp.enableBatch;\n let baseMaterial = _comp._materials[0];\n if (!baseMaterial) return null;\n\n if (_useMulti) {\n let key = tex.getId() + src + dst;\n let materialCache = _comp._materialCache;\n let materialInfo = materialCache[key];\n if (!materialInfo) {\n let texId = baseMaterial.material.getMultiHandler().getIndex(tex.getImpl());\n if (!materialCache.baseMaterial) {\n materialInfo = { material: baseMaterial, texId: texId };\n materialCache.baseMaterial = materialInfo;\n } else {\n materialInfo = { material: cc.MaterialVariant.create(baseMaterial), texId: texId };\n }\n\n if (texId === -1) {\n materialInfo.material.setProperty('texture', tex);\n materialInfo.texId = 0;\n }\n\n // update blend function\n materialInfo.material.setBlend(\n true,\n gfx.BLEND_FUNC_ADD,\n src, dst,\n gfx.BLEND_FUNC_ADD,\n src, dst\n );\n materialCache[key] = materialInfo;\n }\n _texId = materialInfo.texId;\n return materialInfo.material;\n } else {\n // The key use to find corresponding material\n let key = tex.getId() + src + dst + _useTint + useModel;\n let materialCache = _comp._materialCache;\n let material = materialCache[key];\n if (!material) {\n if (!materialCache.baseMaterial) {\n material = baseMaterial;\n materialCache.baseMaterial = baseMaterial;\n } else {\n material = cc.MaterialVariant.create(baseMaterial);\n }\n\n material.define('CC_USE_MODEL', useModel);\n material.define('USE_TINT', _useTint);\n // update texture\n material.setProperty('texture', tex);\n\n // update blend function\n material.setBlend(\n true,\n gfx.BLEND_FUNC_ADD,\n src, dst,\n gfx.BLEND_FUNC_ADD,\n src, dst\n );\n materialCache[key] = material;\n }\n\n return material;\n }\n}\n\nfunction _handleColor (color) {\n // temp rgb has multiply 255, so need divide 255;\n _fa = color.fa * _nodeA;\n _multiplier = _premultipliedAlpha ? _fa / 255 : 1;\n _r = _nodeR * _multiplier;\n _g = _nodeG * _multiplier;\n _b = _nodeB * _multiplier;\n\n _fr = color.fr * _r;\n _fg = color.fg * _g;\n _fb = color.fb * _b;\n _finalColor32 = ((_fa<<24) >>> 0) + (_fb<<16) + (_fg<<8) + _fr;\n\n _dr = color.dr * _r;\n _dg = color.dg * _g;\n _db = color.db * _b;\n _da = _premultipliedAlpha ? 255 : 0;\n _darkColor32 = ((_da<<24) >>> 0) + (_db<<16) + (_dg<<8) + _dr;\n}\n\nfunction _spineColorToInt32 (spineColor) {\n return ((spineColor.a<<24) >>> 0) + (spineColor.b<<16) + (spineColor.g<<8) + spineColor.r;\n}\n\nexport default class SpineAssembler extends Assembler {\n updateRenderData (comp) {\n if (comp.isAnimationCached()) return;\n\n if (comp._dataDirty) {\n // 自动合图\n this.packDynamicAtlasForSpine(comp);\n\n // 自动切换材质\n const autoSwitchMaterial = comp.autoSwitchMaterial;\n if ((cc.sp.autoSwitchMaterial && autoSwitchMaterial === 0) || autoSwitchMaterial === 1) {\n const material = comp._materials[0];\n if (!material) return false;\n\n const skins = comp.skeletonData._skeletonCache.skins;\n for (const skin of skins) {\n for (const attachment of skin.attachments) {\n for (const key in attachment) {\n const region = attachment[key].region;\n if (region && region.texture) {\n this.checkAndSwitchMaterial(comp, region.texture._texture, material);\n break;\n }\n }\n }\n }\n }\n comp._dataDirty = false;\n }\n\n let skeleton = comp._skeleton;\n if (skeleton) {\n skeleton.updateWorldTransform();\n }\n }\n\n packDynamicAtlasForSpine(comp) {\n if (CC_TEST) return false;\n\n const allowDynamicAtlas = comp.allowDynamicAtlas;\n if ((cc.sp.allowDynamicAtlas && allowDynamicAtlas === 0) || allowDynamicAtlas === 1) {\n if (cc.dynamicAtlasManager) {\n const skins = comp.skeletonData._skeletonCache.skins;\n for (const skin of skins) {\n for (const attachments of skin.attachments) {\n for (const key in attachments) {\n const attachment = attachments[key];\n const region = attachment.region;\n if (region && !region._original && region.texture && region.texture._texture.packable) {\n if (region._spriteFrame) {\n region._spriteFrame.destroy();\n region._spriteFrame = null;\n }\n const frame = sp.SkeletonData.createSpriteFrame(region);\n const packedFrame = cc.dynamicAtlasManager.insertSpriteFrame(frame);\n if (packedFrame) {\n frame._setDynamicAtlasFrame(packedFrame);\n\n region._original = {\n _texture: region.texture,\n _x: region.x,\n _y: region.y,\n };\n\n region.texture = new sp.SkeletonTexture({\n width: packedFrame.texture.width,\n height: packedFrame.texture.height,\n });\n region.texture.setRealTexture(packedFrame.texture);\n\n region.x = packedFrame.x;\n region.y = packedFrame.y;\n\n // update uv\n sp.SkeletonData.updateRegionUV(region);\n if (attachment instanceof sp.spine.MeshAttachment) {\n attachment.updateUVs();\n } else {\n attachment.setRegion(region);\n attachment.updateOffset(); \n }\n\n frame.once(\"_resetDynamicAtlasFrame\", () => {\n region.x = region._original._x;\n region.y = region._original._y;\n region.texture = region._original._texture;\n region._original = null;\n\n // update uv\n sp.SkeletonData.updateRegionUV(region);\n if (attachment instanceof sp.spine.MeshAttachment) {\n attachment.updateUVs();\n } else {\n attachment.setRegion(region);\n attachment.updateOffset();\n }\n });\n region._spriteFrame = frame;\n } else {\n frame.destroy();\n }\n }\n }\n } \n }\n }\n }\n }\n\n fillVertices (skeletonColor, attachmentColor, slotColor, clipper, slot) {\n\n let vbuf = _buffer._vData,\n ibuf = _buffer._iData,\n uintVData = _buffer._uintVData;\n let offsetInfo;\n\n _finalColor.a = slotColor.a * attachmentColor.a * skeletonColor.a * _nodeA * 255;\n _multiplier = _premultipliedAlpha? _finalColor.a : 255;\n _tempr = _nodeR * attachmentColor.r * skeletonColor.r * _multiplier;\n _tempg = _nodeG * attachmentColor.g * skeletonColor.g * _multiplier;\n _tempb = _nodeB * attachmentColor.b * skeletonColor.b * _multiplier;\n \n _finalColor.r = _tempr * slotColor.r;\n _finalColor.g = _tempg * slotColor.g;\n _finalColor.b = _tempb * slotColor.b;\n\n if (slot.darkColor == null) {\n _darkColor.set(0.0, 0.0, 0.0, 1.0);\n } else {\n _darkColor.r = slot.darkColor.r * _tempr;\n _darkColor.g = slot.darkColor.g * _tempg;\n _darkColor.b = slot.darkColor.b * _tempb;\n }\n _darkColor.a = _premultipliedAlpha ? 255 : 0;\n\n if (!clipper.isClipping()) {\n if (_vertexEffect) {\n for (let v = _vertexFloatOffset, n = _vertexFloatOffset + _vertexFloatCount; v < n; v += _perVertexSize) {\n _tempPos.x = vbuf[v];\n _tempPos.y = vbuf[v + 1];\n _tempUv.x = vbuf[v + 2];\n _tempUv.y = vbuf[v + 3];\n _vertexEffect.transform(_tempPos, _tempUv, _finalColor, _darkColor);\n\n vbuf[v] = _tempPos.x; // x\n vbuf[v + 1] = _tempPos.y; // y\n vbuf[v + 2] = _tempUv.x; // u\n vbuf[v + 3] = _tempUv.y; // v\n uintVData[v + 4] = _spineColorToInt32(_finalColor); // light color\n if (_useMulti) {\n vbuf[v + 5] = _texId;\n } else {\n _useTint && (uintVData[v + 5] = _spineColorToInt32(_darkColor)); // dark color\n }\n }\n } else {\n _finalColor32 = _spineColorToInt32(_finalColor);\n _darkColor32 = _spineColorToInt32(_darkColor);\n \n for (let v = _vertexFloatOffset, n = _vertexFloatOffset + _vertexFloatCount; v < n; v += _perVertexSize) {\n uintVData[v + 4] = _finalColor32; // light color\n if (_useMulti) {\n vbuf[v + 5] = _texId;\n } else {\n _useTint && (uintVData[v + 5] = _darkColor32); // dark color\n }\n }\n }\n } else {\n let uvs = vbuf.subarray(_vertexFloatOffset + 2);\n clipper.clipTriangles(vbuf.subarray(_vertexFloatOffset), _vertexFloatCount, ibuf.subarray(_indexOffset), _indexCount, uvs, _finalColor, _darkColor, _useTint, _perVertexSize);\n let clippedVertices = new Float32Array(clipper.clippedVertices);\n let clippedTriangles = clipper.clippedTriangles;\n \n // insure capacity\n _indexCount = clippedTriangles.length;\n _vertexFloatCount = clippedVertices.length / _perClipVertexSize * _perVertexSize;\n\n offsetInfo = _buffer.requestForSpine(_vertexFloatCount / _perVertexSize, _indexCount);\n _indexOffset = offsetInfo.indiceOffset,\n _vertexOffset = offsetInfo.vertexOffset,\n _vertexFloatOffset = offsetInfo.byteOffset >> 2;\n vbuf = _buffer._vData,\n ibuf = _buffer._iData;\n uintVData = _buffer._uintVData;\n\n // fill indices\n ibuf.set(clippedTriangles, _indexOffset);\n\n // fill vertices contain x y u v light color dark color\n if (_vertexEffect) {\n for (let v = 0, n = clippedVertices.length, offset = _vertexFloatOffset; v < n; v += _perClipVertexSize, offset += _perVertexSize) {\n _tempPos.x = clippedVertices[v];\n _tempPos.y = clippedVertices[v + 1];\n _finalColor.set(clippedVertices[v + 2], clippedVertices[v + 3], clippedVertices[v + 4], clippedVertices[v + 5]);\n _tempUv.x = clippedVertices[v + 6];\n _tempUv.y = clippedVertices[v + 7];\n if (_useTint) {\n _darkColor.set(clippedVertices[v + 8], clippedVertices[v + 9], clippedVertices[v + 10], clippedVertices[v + 11]);\n } else {\n _darkColor.set(0, 0, 0, 0);\n }\n _vertexEffect.transform(_tempPos, _tempUv, _finalColor, _darkColor);\n\n vbuf[offset] = _tempPos.x; // x\n vbuf[offset + 1] = _tempPos.y; // y\n vbuf[offset + 2] = _tempUv.x; // u\n vbuf[offset + 3] = _tempUv.y; // v\n uintVData[offset + 4] = _spineColorToInt32(_finalColor);\n if (_useMulti) {\n vbuf[offset + 5] = _texId;\n } else {\n if (_useTint) {\n uintVData[offset + 5] = _spineColorToInt32(_darkColor);\n }\n }\n }\n } else {\n for (let v = 0, n = clippedVertices.length, offset = _vertexFloatOffset; v < n; v += _perClipVertexSize, offset += _perVertexSize) {\n vbuf[offset] = clippedVertices[v]; // x\n vbuf[offset + 1] = clippedVertices[v + 1]; // y\n vbuf[offset + 2] = clippedVertices[v + 6]; // u\n vbuf[offset + 3] = clippedVertices[v + 7]; // v\n\n _finalColor32 = ((clippedVertices[v + 5]<<24) >>> 0) + (clippedVertices[v + 4]<<16) + (clippedVertices[v + 3]<<8) + clippedVertices[v + 2];\n uintVData[offset + 4] = _finalColor32;\n if (_useMulti) {\n vbuf[offset + 5] = _texId;\n } else {\n if (_useTint) {\n _darkColor32 = ((clippedVertices[v + 11] << 24) >>> 0) + (clippedVertices[v + 10] << 16) + (clippedVertices[v + 9] << 8) + clippedVertices[v + 8];\n uintVData[offset + 5] = _darkColor32;\n }\n }\n }\n }\n }\n }\n\n realTimeTraverse (worldMat) {\n let vbuf;\n let ibuf;\n\n let locSkeleton = _comp._skeleton;\n let skeletonColor = locSkeleton.color;\n let graphics = _comp._debugRenderer;\n let clipper = _comp._clipper;\n let material = null;\n let attachment, attachmentColor, slotColor, uvs, triangles;\n let isRegion, isMesh, isClip;\n let offsetInfo;\n let slot;\n let worldMatm;\n\n _slotRangeStart = _comp._startSlotIndex;\n _slotRangeEnd = _comp._endSlotIndex;\n _inRange = false;\n if (_slotRangeStart == -1) _inRange = true;\n\n _debugSlots = _comp.debugSlots;\n _debugBones = _comp.debugBones;\n _debugMesh = _comp.debugMesh;\n if (graphics && (_debugBones || _debugSlots || _debugMesh)) {\n graphics.clear();\n graphics.lineWidth = 2;\n }\n \n // x y u v r1 g1 b1 a1 r2 g2 b2 a2 or x y u v r g b a \n _perClipVertexSize = _useMulti ? 12 : (_useTint ? 12 : 8);\n \n _vertexFloatCount = 0;\n _vertexFloatOffset = 0;\n _vertexOffset = 0;\n _indexCount = 0;\n _indexOffset = 0;\n\n for (let slotIdx = 0, slotCount = locSkeleton.drawOrder.length; slotIdx < slotCount; slotIdx++) {\n slot = locSkeleton.drawOrder[slotIdx];\n\n if(slot == undefined) {\n continue;\n }\n\n if (_slotRangeStart >= 0 && _slotRangeStart == slot.data.index) {\n _inRange = true;\n }\n \n if (!_inRange) {\n clipper.clipEndWithSlot(slot);\n continue;\n }\n \n if (_slotRangeEnd >= 0 && _slotRangeEnd == slot.data.index) {\n _inRange = false;\n }\n \n _vertexFloatCount = 0;\n _indexCount = 0;\n\n attachment = slot.getAttachment();\n if (!attachment) {\n clipper.clipEndWithSlot(slot);\n continue;\n }\n\n isRegion = attachment instanceof spine.RegionAttachment;\n isMesh = attachment instanceof spine.MeshAttachment;\n isClip = attachment instanceof spine.ClippingAttachment;\n\n if (isClip) {\n clipper.clipStart(slot, attachment);\n continue;\n }\n\n if (!isRegion && !isMesh) {\n clipper.clipEndWithSlot(slot);\n continue;\n }\n\n material = _getSlotMaterial(attachment.region.texture._texture, slot.data.blendMode);\n if (!material) {\n clipper.clipEndWithSlot(slot);\n continue;\n }\n\n if (_mustFlush || material.getHash() !== _renderer.material.getHash()) {\n _mustFlush = false;\n _renderer._flush();\n _renderer.node = _node;\n _renderer.material = material;\n }\n\n if (isRegion) {\n \n triangles = _quadTriangles;\n \n // insure capacity\n _vertexFloatCount = 4 * _perVertexSize;\n _indexCount = 6;\n\n offsetInfo = _buffer.requestForSpine(4, 6);\n _indexOffset = offsetInfo.indiceOffset,\n _vertexOffset = offsetInfo.vertexOffset,\n _vertexFloatOffset = offsetInfo.byteOffset >> 2;\n vbuf = _buffer._vData,\n ibuf = _buffer._iData;\n \n // compute vertex and fill x y\n attachment.computeWorldVertices(slot.bone, vbuf, _vertexFloatOffset, _perVertexSize);\n \n // draw debug slots if enabled graphics\n if (graphics && _debugSlots) {\n graphics.strokeColor = _slotColor;\n graphics.moveTo(vbuf[_vertexFloatOffset], vbuf[_vertexFloatOffset + 1]);\n for (let ii = _vertexFloatOffset + _perVertexSize, nn = _vertexFloatOffset + _vertexFloatCount; ii < nn; ii += _perVertexSize) {\n graphics.lineTo(vbuf[ii], vbuf[ii + 1]);\n }\n graphics.close();\n graphics.stroke();\n }\n }\n else if (isMesh) {\n \n triangles = attachment.triangles;\n \n // insure capacity\n _vertexFloatCount = (attachment.worldVerticesLength >> 1) * _perVertexSize;\n _indexCount = triangles.length;\n\n offsetInfo = _buffer.requestForSpine(_vertexFloatCount / _perVertexSize, _indexCount);\n _indexOffset = offsetInfo.indiceOffset,\n _vertexOffset = offsetInfo.vertexOffset,\n _vertexFloatOffset = offsetInfo.byteOffset >> 2;\n vbuf = _buffer._vData,\n ibuf = _buffer._iData;\n \n // compute vertex and fill x y\n attachment.computeWorldVertices(slot, 0, attachment.worldVerticesLength, vbuf, _vertexFloatOffset, _perVertexSize);\n\n // draw debug mesh if enabled graphics\n if (graphics && _debugMesh) {\n graphics.strokeColor = _meshColor;\n\n for (let ii = 0, nn = triangles.length; ii < nn; ii += 3) {\n let v1 = triangles[ii] * _perVertexSize + _vertexFloatOffset;\n let v2 = triangles[ii + 1] * _perVertexSize + _vertexFloatOffset;\n let v3 = triangles[ii + 2] * _perVertexSize + _vertexFloatOffset;\n \n graphics.moveTo(vbuf[v1], vbuf[v1 + 1]);\n graphics.lineTo(vbuf[v2], vbuf[v2 + 1]);\n graphics.lineTo(vbuf[v3], vbuf[v3 + 1]);\n graphics.close();\n graphics.stroke();\n }\n }\n }\n \n if (_vertexFloatCount == 0 || _indexCount == 0) {\n clipper.clipEndWithSlot(slot);\n continue;\n }\n \n // fill indices\n ibuf.set(triangles, _indexOffset);\n\n // fill u v\n uvs = attachment.uvs;\n for (let v = _vertexFloatOffset, n = _vertexFloatOffset + _vertexFloatCount, u = 0; v < n; v += _perVertexSize, u += 2) {\n vbuf[v + 2] = uvs[u]; // u\n vbuf[v + 3] = uvs[u + 1]; // v\n }\n\n attachmentColor = attachment.color,\n slotColor = slot.color;\n\n this.fillVertices(skeletonColor, attachmentColor, slotColor, clipper, slot);\n \n // reset buffer pointer, because clipper maybe realloc a new buffer in file Vertices function.\n vbuf = _buffer._vData,\n ibuf = _buffer._iData;\n \n if (_indexCount > 0) {\n for (let ii = _indexOffset, nn = _indexOffset + _indexCount; ii < nn; ii++) {\n ibuf[ii] += _vertexOffset;\n }\n\n if (worldMat) {\n worldMatm = worldMat.m;\n _m00 = worldMatm[0];\n _m04 = worldMatm[4];\n _m12 = worldMatm[12];\n _m01 = worldMatm[1];\n _m05 = worldMatm[5];\n _m13 = worldMatm[13];\n for (let ii = _vertexFloatOffset, nn = _vertexFloatOffset + _vertexFloatCount; ii < nn; ii += _perVertexSize) {\n _x = vbuf[ii];\n _y = vbuf[ii + 1];\n vbuf[ii] = _x * _m00 + _y * _m04 + _m12;\n vbuf[ii + 1] = _x * _m01 + _y * _m05 + _m13;\n }\n }\n _buffer.adjustForSpine(_vertexFloatCount / _perVertexSize, _indexCount);\n }\n \n clipper.clipEndWithSlot(slot);\n }\n \n clipper.clipEnd();\n \n if (graphics && _debugBones) {\n let bone;\n graphics.strokeColor = _boneColor;\n graphics.fillColor = _slotColor; // Root bone color is same as slot color.\n \n for (let i = 0, n = locSkeleton.bones.length; i < n; i++) {\n bone = locSkeleton.bones[i];\n let x = bone.data.length * bone.a + bone.worldX;\n let y = bone.data.length * bone.c + bone.worldY;\n \n // Bone lengths.\n graphics.moveTo(bone.worldX, bone.worldY);\n graphics.lineTo(x, y);\n graphics.stroke();\n \n // Bone origins.\n graphics.circle(bone.worldX, bone.worldY, Math.PI * 1.5);\n graphics.fill();\n if (i === 0) {\n graphics.fillColor = _originColor;\n }\n }\n }\n }\n\n cacheTraverse (worldMat) {\n \n let frame = _comp._curFrame;\n if (!frame) return;\n\n let segments = frame.segments;\n if (segments.length == 0) return;\n\n let vbuf, ibuf, uintbuf;\n let material;\n let offsetInfo;\n let vertices = frame.vertices;\n let indices = frame.indices;\n let worldMatm;\n\n let frameVFOffset = 0, frameIndexOffset = 0, segVFCount = 0;\n if (worldMat) {\n worldMatm = worldMat.m;\n _m00 = worldMatm[0];\n _m01 = worldMatm[1];\n _m04 = worldMatm[4];\n _m05 = worldMatm[5];\n _m12 = worldMatm[12];\n _m13 = worldMatm[13];\n }\n\n let justTranslate = _m00 === 1 && _m01 === 0 && _m04 === 0 && _m05 === 1;\n let needBatch = (_handleVal & FLAG_BATCH);\n let calcTranslate = needBatch && justTranslate;\n\n let colorOffset = 0;\n let colors = frame.colors;\n let nowColor = colors[colorOffset++];\n let maxVFOffset = nowColor.vfOffset;\n _handleColor(nowColor);\n\n for (let i = 0, n = segments.length; i < n; i++) {\n let segInfo = segments[i];\n material = _getSlotMaterial(segInfo.tex, segInfo.blendMode);\n if (!material) continue;\n\n if (_mustFlush || material.getHash() !== _renderer.material.getHash()) {\n _mustFlush = false;\n _renderer._flush();\n _renderer.node = _node;\n _renderer.material = material;\n }\n\n _vertexCount = segInfo.vertexCount;\n _indexCount = segInfo.indexCount;\n\n offsetInfo = _buffer.requestForSpine(_vertexCount, _indexCount);\n _indexOffset = offsetInfo.indiceOffset;\n _vertexOffset = offsetInfo.vertexOffset;\n _vfOffset = offsetInfo.byteOffset >> 2;\n vbuf = _buffer._vData;\n ibuf = _buffer._iData;\n uintbuf = _buffer._uintVData;\n\n for (let ii = _indexOffset, il = _indexOffset + _indexCount; ii < il; ii++) {\n ibuf[ii] = _vertexOffset + indices[frameIndexOffset++];\n }\n\n segVFCount = segInfo.vfCount;\n vbuf.set(vertices.subarray(frameVFOffset, frameVFOffset + segVFCount), _vfOffset);\n frameVFOffset += segVFCount;\n\n if (calcTranslate) {\n for (let ii = _vfOffset, il = _vfOffset + segVFCount; ii < il; ii += 6) {\n vbuf[ii] += _m12;\n vbuf[ii + 1] += _m13;\n }\n } else if (needBatch) {\n for (let ii = _vfOffset, il = _vfOffset + segVFCount; ii < il; ii += 6) {\n _x = vbuf[ii];\n _y = vbuf[ii + 1];\n vbuf[ii] = _x * _m00 + _y * _m04 + _m12;\n vbuf[ii + 1] = _x * _m01 + _y * _m05 + _m13;\n }\n }\n\n _buffer.adjustForSpine(_vertexCount, _indexCount);\n if ( !_needColor ) continue;\n\n // handle color\n let frameColorOffset = frameVFOffset - segVFCount;\n for (let ii = _vfOffset + 4, il = _vfOffset + 4 + segVFCount; ii < il; ii += 6, frameColorOffset += 6) {\n if (frameColorOffset >= maxVFOffset) {\n nowColor = colors[colorOffset++];\n _handleColor(nowColor);\n maxVFOffset = nowColor.vfOffset;\n }\n uintbuf[ii] = _finalColor32;\n uintbuf[ii + 1] = _darkColor32;\n }\n }\n }\n\n fillBuffers (comp, renderer) {\n \n let node = comp.node;\n node._renderFlag |= RenderFlow.FLAG_UPDATE_RENDER_DATA;\n if (!comp._skeleton) return;\n\n let nodeColor = node._color;\n _nodeR = nodeColor.r / 255;\n _nodeG = nodeColor.g / 255;\n _nodeB = nodeColor.b / 255;\n _nodeA = nodeColor.a / 255;\n\n let baseMaterial = comp._materials[0];\n if (!baseMaterial) return;\n\n _useMulti = baseMaterial.material.isMultiSupport();\n _useTint = !_useMulti && (comp.useTint || comp.isAnimationCached());\n _vertexFormat = _useMulti ? VFOneColorTexId : (_useTint ? VFTwoColor : VFOneColor);\n // x y u v color1 color2 or x y u v color\n _perVertexSize = _useMulti ? 6 :(_useTint ? 6 : 5);\n\n _node = comp.node;\n _buffer = renderer.getBuffer('mesh', _vertexFormat);\n _renderer = renderer;\n _comp = comp;\n\n _mustFlush = true;\n _premultipliedAlpha = comp.premultipliedAlpha;\n _multiplier = 1.0;\n _handleVal = 0x00;\n _needColor = false;\n _vertexEffect = comp._effectDelegate && comp._effectDelegate._vertexEffect;\n\n if (nodeColor._val !== 0xffffffff || _premultipliedAlpha) {\n _needColor = true;\n }\n\n if (_useTint) {\n _handleVal |= FLAG_TWO_COLOR;\n }\n\n let worldMat = undefined;\n if (_comp.enableBatch) {\n worldMat = _node._worldMatrix;\n _mustFlush = false;\n _handleVal |= FLAG_BATCH;\n }\n\n if (comp.isAnimationCached()) {\n // Traverse input assembler.\n this.cacheTraverse(worldMat);\n } else {\n if (_vertexEffect) _vertexEffect.begin(comp._skeleton);\n this.realTimeTraverse(worldMat);\n if (_vertexEffect) _vertexEffect.end();\n }\n\n // sync attached node matrix\n renderer.worldMatDirty++;\n comp.attachUtil._syncAttachedNode();\n\n // Clear temp var.\n _node = undefined;\n _buffer = undefined;\n _renderer = undefined;\n _comp = undefined;\n _vertexEffect = null;\n }\n\n postFillBuffers (comp, renderer) {\n renderer.worldMatDirty--;\n }\n}\n\nAssembler.register(Skeleton, SpineAssembler);\n","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\nlet TrackEntryListeners = function () {\n this.start = null;\n this.end = null;\n this.complete = null;\n this.event = null;\n this.interrupt = null;\n this.dispose = null;\n};\n\nTrackEntryListeners.getListeners = function(entry){\n if (!entry.listener) {\n entry.listener = new TrackEntryListeners();\n }\n return entry.listener;\n};\n\nmodule.exports = TrackEntryListeners;","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\nconst spine = require('./lib/spine');\n/**\n * @module sp\n */\n\n/**\n * !#en\n * The delegate of spine vertex effect\n * !#zh\n * Spine 顶点动画代理\n * @class VertexEffectDelegate\n */\nsp.VertexEffectDelegate = cc.Class({\n name: 'sp.VertexEffectDelegate',\n\n ctor () {\n this._vertexEffect = null;\n this._interpolation = null;\n this._effectType = 'none';\n },\n\n /**\n * !#en Clears vertex effect.\n * !#zh 清空顶点效果\n * @method clear\n */\n clear () {\n this._vertexEffect = null;\n this._interpolation = null;\n this._effectType = 'none';\n },\n\n /**\n * !#en Inits delegate with jitter effect\n * !#zh 设置顶点抖动效果\n * @method initJitter\n * @param {Number} jitterX\n * @param {Number} jitterY\n */\n initJitter (jitterX, jitterY) {\n this._effectType = 'jitter';\n this._vertexEffect = new spine.JitterEffect(jitterX, jitterY);\n return this._vertexEffect;\n },\n\n /**\n * !#en Inits delegate with swirl effect\n * !#zh 设置顶点漩涡效果\n * @method initSwirlWithPow\n * @param {Number} radius \n * @param {Number} power\n * @return {sp.spine.JitterEffect}\n */\n initSwirlWithPow(radius, power) {\n this._interpolation = new spine.Pow(power);\n this._vertexEffect = new spine.SwirlEffect(radius, this._interpolation);\n return this._vertexEffect;\n },\n\n /**\n * !#en Inits delegate with swirl effect\n * !#zh 设置顶点漩涡效果\n * @method initSwirlWithPowOut\n * @param {Number} radius \n * @param {Number} power\n * @return {sp.spine.SwirlEffect}\n */\n initSwirlWithPowOut(radius, power) {\n this._interpolation = new spine.PowOut(power);\n this._vertexEffect = new spine.SwirlEffect(radius, this._interpolation);\n return this._vertexEffect;\n },\n\n /**\n * !#en Gets jitter vertex effect\n * !#zh 获取顶点抖动效果\n * @method getJitterVertexEffect\n * @return {sp.spine.JitterEffect}\n */\n getJitterVertexEffect () {\n return this._vertexEffect;\n },\n\n /**\n * !#en Gets swirl vertex effect\n * !#zh 获取顶点漩涡效果\n * @method getSwirlVertexEffect\n * @return {sp.spine.SwirlEffect}\n */\n getSwirlVertexEffect () {\n return this._vertexEffect;\n },\n\n /**\n * !#en Gets vertex effect\n * !#zh 获取顶点效果\n * @method getVertexEffect\n * @return {sp.spine.JitterEffect|sp.spine.SwirlEffect}\n */\n getVertexEffect () {\n return this._vertexEffect;\n },\n\n /**\n * !#en Gets effect type\n * !#zh 获取效果类型\n * @method getEffectType\n * @return {String}\n */\n getEffectType () {\n return this._effectType;\n }\n});\nmodule.exports = sp.VertexEffectDelegate;","/****************************************************************************\n Copyright (c) 2013-2016 Chukong Technologies Inc.\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n// PREDEFINE\n\n// window may be undefined when first load engine from editor\nvar _global = typeof window === 'undefined' ? global : window;\n\n/**\n * !#en\n * The main namespace of Cocos2d-JS, all engine core classes, functions, properties and constants are defined in this namespace.\n * !#zh\n * Cocos 引擎的主要命名空间,引擎代码中所有的类,函数,属性和常量都在这个命名空间中定义。\n * @module cc\n * @main cc\n */\n_global.cc = _global.cc || {};\n\n// For internal usage\ncc.internal = cc.internal || {};\n\nrequire('./predefine');\n\n// polyfills\nrequire('./polyfill/string');\nrequire('./polyfill/misc');\nrequire('./polyfill/array');\nrequire('./polyfill/object');\nrequire('./polyfill/array-buffer');\nrequire('./polyfill/number');\nif (!(CC_EDITOR && Editor.isMainProcess)) {\n require('./polyfill/typescript');\n}\n\nrequire('./cocos2d/core/predefine');\n\n// LOAD COCOS2D ENGINE CODE\n\nif (!(CC_EDITOR && Editor.isMainProcess)) {\n require('./cocos2d');\n}\n\n// LOAD EXTENDS\n\nrequire('./extends');\n\nif (CC_EDITOR) {\n if (Editor.isMainProcess) {\n Editor.versions['cocos2d'] = require('./package').version;\n }\n}\n\nmodule.exports = _global.cc;","if (!ArrayBuffer.isView) {\n const TypedArray = Object.getPrototypeOf(Int8Array);\n ArrayBuffer.isView = (typeof TypedArray === 'function') ? function (obj) {\n return obj instanceof TypedArray;\n } : function (obj) {\n // old JSC, phantom, QtWebview\n if (typeof obj !== 'object') {\n return false;\n }\n let ctor = obj.constructor;\n return ctor === Float64Array || ctor === Float32Array || ctor === Uint8Array || ctor === Uint32Array || ctor === Int8Array;\n };\n}\n","if (!Array.isArray) {\n Array.isArray = function (arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n };\n}\n\nif (!Array.prototype.find) {\n Array.prototype.find = function (callback) {\n var length = this.length;\n for (var i = 0; i < length; i++) {\n var element = this[i];\n if (callback.call(this, element, i, this)) {\n return element;\n }\n }\n\n return undefined;\n };\n}\n\n// for ie 11\nif (!Array.prototype.includes) {\n Array.prototype.includes = function (value) {\n return this.indexOf(value) !== -1;\n };\n}\n","if (!Math.sign) {\n Math.sign = function (x) {\n x = +x; // convert to a number\n if (x === 0 || isNaN(x)) {\n return x;\n }\n return x > 0 ? 1 : -1;\n };\n}\n\nif (!Math.log2) {\n Math.log2 = function (x) {\n return Math.log(x) * Math.LOG2E;\n };\n}\n\nif (!Number.isInteger) {\n Number.isInteger = function (value) {\n return typeof value === 'number' && isFinite(value) && Math.floor(value) === value;\n };\n}\n\nif (CC_JSB || CC_RUNTIME || !console.time) {\n var Timer = window.performance || Date;\n var _timerTable = Object.create(null);\n console.time = function (label) {\n _timerTable[label] = Timer.now();\n };\n console.timeEnd = function (label) {\n var startTime = _timerTable[label];\n var duration = Timer.now() - startTime;\n console.log(`${label}: ${duration}ms`);\n };\n}\n","\nNumber.parseFloat = Number.parseFloat || parseFloat;\nNumber.parseInt = Number.parseInt || parseInt;\n","\n// for IE11\nif (!Object.assign) {\n Object.assign = function (target, source) {\n return cc.js.mixin(target, source);\n }\n}\n\n// for Baidu browser\n// Implementation reference to: \n// http://2ality.com/2016/02/object-getownpropertydescriptors.html\n// http://docs.w3cub.com/javascript/global_objects/reflect/ownkeys/\nif (!Object.getOwnPropertyDescriptors) {\n Object.getOwnPropertyDescriptors = function (obj) {\n let descriptors = {};\n let ownKeys = Object.getOwnPropertyNames(obj);\n if (Object.getOwnPropertySymbols) { // for IE 11\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(obj));\n }\n for(let i = 0; i < ownKeys.length; ++i){\n let key = ownKeys[i];\n descriptors[key] = Object.getOwnPropertyDescriptor(obj, key);\n }\n return descriptors;\n }\n}","if (!String.prototype.startsWith) {\n String.prototype.startsWith = function (searchString, position) {\n position = position || 0;\n return this.lastIndexOf(searchString, position) === position;\n };\n}\n\nif (!String.prototype.endsWith) {\n String.prototype.endsWith = function (searchString, position) {\n if (typeof position === 'undefined' || position > this.length) {\n position = this.length;\n }\n position -= searchString.length;\n var lastIndex = this.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n };\n}\n\nif (!String.prototype.trimLeft) {\n String.prototype.trimLeft = function () {\n return this.replace(/^\\s+/, '');\n };\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global global, define, System, Reflect, Promise */\r\n\r\n// tslib 2.0.3\r\n\r\nvar extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n\r\nwindow.__extends = function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n};\r\n\r\nwindow.__assign = Object.assign || function (t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n};\r\n\r\nwindow.__rest = function (s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n};\r\n\r\nwindow.__decorate = function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\n\r\nwindow.__param = function (paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n};\r\n\r\nwindow.__metadata = function (metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n};\r\n\r\nwindow.__awaiter = function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\n\r\nwindow.__generator = function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\n\r\nwindow.__exportStar = function(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n};\r\n\r\nwindow.__createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nwindow.__values = function (o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n};\r\n\r\nwindow.__read = function (o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n};\r\n\r\nwindow.__spread = function () {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n};\r\n\r\nwindow.__spreadArrays = function () {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nwindow.__await = function (v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n};\r\n\r\nwindow.__asyncGenerator = function (thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n};\r\n\r\nwindow.__asyncDelegator = function (o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n};\r\n\r\nwindow.__asyncValues = function (o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n};\r\n\r\nwindow.__makeTemplateObject = function (cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nwindow.__importStar = function (mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n};\r\n\r\nwindow.__importDefault = function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\n\r\nwindow.__classPrivateFieldGet = function (receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n};\r\n\r\nwindow.__classPrivateFieldSet = function (receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n};","/****************************************************************************\n Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.\n\n https://www.cocos.com/\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated engine source code (the \"Software\"), a limited,\n worldwide, royalty-free, non-assignable, revocable and non-exclusive license\n to use Cocos Creator solely to develop games on your target platforms. You shall\n not use Cocos Creator software for developing other software or tools that's\n used for developing games. You are not granted to publish, distribute,\n sublicense, and/or sell copies of Cocos Creator.\n\n The software or tools in this License Agreement are licensed, not sold.\n Xiamen Yaji Software Co., Ltd. reserves all rights not expressly granted to you.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n ****************************************************************************/\n\n// MACROS\n\n/**\n * !#zh\n * 这里是一些用来判断执行环境的宏,这些宏都是全局变量,直接访问即可。
\n * 在项目构建时,这些宏将会被预处理并根据构建的平台剔除不需要的代码,例如\n *\n * if (CC_DEBUG) {\n * cc.log('debug');\n * }\n * else {\n * cc.log('release');\n * }\n *\n * 在构建后会只剩下\n *\n * cc.log('release');\n *\n *
\n * 如需判断脚本是否运行于指定平台,可以用如下表达式:\n *\n * {\n * \"编辑器\": CC_EDITOR,\n * \"编辑器 或 预览\": CC_DEV,\n * \"编辑器 或 预览 或 构建调试\": CC_DEBUG,\n * \"网页预览\": CC_PREVIEW && !CC_JSB,\n * \"模拟器预览\": CC_PREVIEW && CC_JSB,\n * \"构建调试\": CC_BUILD && CC_DEBUG,\n * \"构建发行\": CC_BUILD && !CC_DEBUG,\n * }\n *\n * !#en\n * Here are some of the macro used to determine the execution environment, these macros are global variables, can be accessed directly.
\n * When the project is built, these macros will be preprocessed and discard unreachable code based on the built platform, for example:\n *\n * if (CC_DEBUG) {\n * cc.log('debug');\n * }\n * else {\n * cc.log('release');\n * }\n *\n * After build will become:\n *\n * cc.log('release');\n *\n *
\n * To determine whether the script is running on the specified platform, you can use the following expression:\n *\n * {\n * \"editor\": CC_EDITOR,\n * \"editor or preview\": CC_DEV,\n * \"editor or preview or build in debug mode\": CC_DEBUG,\n * \"web preview\": CC_PREVIEW && !CC_JSB,\n * \"simulator preview\": CC_PREVIEW && CC_JSB,\n * \"build in debug mode\": CC_BUILD && CC_DEBUG,\n * \"build in release mode\": CC_BUILD && !CC_DEBUG,\n * }\n *\n * @module GLOBAL-MACROS\n */\n/**\n * @property {Boolean} CC_EDITOR - Running in the editor.\n */\n/**\n * @property {Boolean} CC_PREVIEW - Preview in browser or simulator.\n */\n/**\n * @property {Boolean} CC_DEV - Running in the editor or preview.\n */\n/**\n * @property {Boolean} CC_DEBUG - Running in the editor or preview, or build in debug mode.\n */\n/**\n * @property {Boolean} CC_BUILD - Running in published project.\n */\n/**\n * @property {Boolean} CC_JSB - Running in native platform (mobile app, desktop app, or simulator).\n */\n/**\n * @property {Boolean} CC_TEST - Running in the engine's unit test.\n */\n/**\n * @property {Boolean} CC_RUNTIME - Running in runtime environments.\n */\n\n// window may be undefined when first load engine from editor\nvar _global = typeof window === 'undefined' ? global : window;\n\n/*\n * @param defaultValue - The default value is only used in the editor or preview.\n */\nfunction defineMacro (name, defaultValue) {\n // if \"global_defs\" not preprocessed by uglify, just declare them globally,\n // this may happened in release version's preview page.\n if (typeof _global[name] === 'undefined') {\n _global[name] = defaultValue;\n }\n}\n\nfunction defineDeprecatedMacroGetter (name, defaultValue) {\n if (typeof _global[name] === 'undefined') {\n Object.defineProperty(_global, name, {\n get: function () {\n let recommandedUsage;\n if (name === 'CC_WECHATGAMESUB') {\n recommandedUsage = 'cc.sys.platform === cc.sys.WECHAT_GAME_SUB';\n }\n else if (name === 'CC_WECHATGAME') {\n recommandedUsage = 'cc.sys.platform === cc.sys.WECHAT_GAME'; \n }\n else if (name === 'CC_QQPLAY') {\n recommandedUsage = 'cc.sys.platform === cc.sys.QQ_PLAY';\n }\n cc.warnID(1400, name, recommandedUsage);\n return defaultValue;\n }\n });\n }\n}\n\nfunction defined (name) {\n return typeof _global[name] === 'object';\n}\n\n// ensure CC_BUILD is defined\n// should not use window.CC_BUILD because we need get global_defs defined in uglify\ndefineMacro('CC_BUILD', false);\n\n// These default values can only be defined after building\n// If you need to modify them\n// please modify the `global_defs` in the option returned by `gulp/util/utils.js: getUglifyOptions`.\nif (CC_BUILD) {\n _global.CC_BUILD = CC_BUILD;\n _global.CC_DEV = CC_DEV;\n _global.CC_DEBUG = CC_DEBUG;\n _global.CC_JSB = CC_JSB;\n _global.CC_NATIVERENDERER = CC_NATIVERENDERER;\n _global.CC_SUPPORT_JIT = CC_SUPPORT_JIT;\n _global.CC_PHYSICS_BUILTIN = CC_PHYSICS_BUILTIN;\n _global.CC_PHYSICS_CANNON = CC_PHYSICS_CANNON;\n _global.CC_EDITOR = CC_EDITOR;\n _global.CC_PREVIEW = CC_PREVIEW;\n _global.CC_TEST = CC_TEST;\n _global.CC_RUNTIME = CC_RUNTIME;\n _global.CC_JSB = CC_JSB;\n}\nelse {\n defineMacro('CC_DEV', true); // (CC_EDITOR && !CC_BUILD) || CC_PREVIEW || CC_TEST\n defineMacro('CC_DEBUG', true); // CC_DEV || Debug Build\n defineMacro('CC_JSB', defined('jsb'));\n defineMacro('CC_NATIVERENDERER', defined('jsb'));\n defineMacro('CC_SUPPORT_JIT', true);\n defineMacro('CC_PHYSICS_BUILTIN', false);\n defineMacro('CC_PHYSICS_CANNON', true);\n defineMacro('CC_EDITOR', defined('Editor') && defined('process') && ('electron' in process.versions));\n defineMacro('CC_PREVIEW', !CC_EDITOR);\n defineMacro('CC_TEST', defined('tap') || defined('QUnit'));\n defineMacro('CC_RUNTIME', 'function' === typeof loadRuntime);\n defineMacro('CC_JSB', defined('jsb') && !CC_RUNTIME);\n}\n\n// deprecated \nconst WECHATGAMESUB = !!(defined('wx') && wx.getSharedCanvas);\nconst WECHATGAME = !!(defined('wx') && (wx.getSystemInfoSync || wx.getSharedCanvas));\nconst QQPLAY = defined('bk');\ndefineDeprecatedMacroGetter('CC_WECHATGAMESUB', WECHATGAMESUB);\ndefineDeprecatedMacroGetter('CC_WECHATGAME', WECHATGAME);\ndefineDeprecatedMacroGetter('CC_QQPLAY', QQPLAY);\n\nif (CC_DEV) {\n /**\n * contains internal apis for unit tests\n * @expose\n */\n cc._Test = {};\n}\n\n/**\n * @module cc\n */\n\n/**\n * The current version of Cocos2d being used.
\n * Please DO NOT remove this String, it is an important flag for bug tracking.
\n * If you post a bug to forum, please attach this flag.\n * @property {String} ENGINE_VERSION\n */\nconst engineVersion = '2.4.5';\n_global['CocosEngine'] = cc.ENGINE_VERSION = engineVersion;\n"],"sourceRoot":"./"} \ No newline at end of file diff --git a/demo/web-mobile/favicon.8de18.ico b/demo/web-mobile/favicon.8de18.ico new file mode 100644 index 0000000000000000000000000000000000000000..0bd33cd2ae958e377836c9ca630aaeb07349aa43 GIT binary patch literal 1150 zcmah{%}-N75MQE+M?HD=rilk*j0Y1B{t2E;xOgxz8jS`eMuPZ(fTF}=peYnfErqsN z1WJQ^8mNM#h*)fBp)IsUYDES5UE0TM$C-UT)1c9LncbP+%x`vP-!fK&-@bhe*8}Y0 zZpQXA#txw(gouRW#!g}Ee`08EJfTx5G~Gs>YtU+r3|PCPmJYqUt*KsXP%BUVi*M8@ z)ua8r5LyXBCXlxYgjQGJ^*|pOH7f1jYMAxfH%`X~AjzRBpFDsjMJ+s6 z)q_#1hD=uAF_+T;-5pwcVGT=XyV~P+@wm7xLS1D!)ZM=YRBvW#0;D#HsU|-kakME~AH=Rzyqq}9GYf*AvUSiQGC?8jYra=LTc$~v?GjW$B2={4znw?~PbPz6|Jp-L>t&q>>c^%uxE0bf^z9b0SJjbMa z1_o_2w=8^xq7W_V6hu^<&Fcy*So6aK%hd#sfq>bBa;SfBm zD8*T&_aXD?pZYzXBlHF^r$H2@x^f@izJ~cd;9G-P`#WAsUMOcR{H2w+vTSaCAE8+b z#r}5ecONoNIg#~so6IZR + + + + + Cocos Creator | Cocos-Service-Pack-Demo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+ + + + + + + + diff --git a/demo/web-mobile/main.c5ece.js b/demo/web-mobile/main.c5ece.js new file mode 100644 index 00000000..3886044f --- /dev/null +++ b/demo/web-mobile/main.c5ece.js @@ -0,0 +1,144 @@ +window.boot = function () { + var settings = window._CCSettings; + window._CCSettings = undefined; + var onProgress = null; + + var RESOURCES = cc.AssetManager.BuiltinBundleName.RESOURCES; + var INTERNAL = cc.AssetManager.BuiltinBundleName.INTERNAL; + var MAIN = cc.AssetManager.BuiltinBundleName.MAIN; + function setLoadingDisplay () { + // Loading splash scene + var splash = document.getElementById('splash'); + var progressBar = splash.querySelector('.progress-bar span'); + onProgress = function (finish, total) { + var percent = 100 * finish / total; + if (progressBar) { + progressBar.style.width = percent.toFixed(2) + '%'; + } + }; + splash.style.display = 'block'; + progressBar.style.width = '0%'; + + cc.director.once(cc.Director.EVENT_AFTER_SCENE_LAUNCH, function () { + splash.style.display = 'none'; + }); + } + + var onStart = function () { + + cc.view.enableRetina(true); + cc.view.resizeWithBrowserSize(true); + + if (cc.sys.isBrowser) { + setLoadingDisplay(); + } + + if (cc.sys.isMobile) { + if (settings.orientation === 'landscape') { + cc.view.setOrientation(cc.macro.ORIENTATION_LANDSCAPE); + } + else if (settings.orientation === 'portrait') { + cc.view.setOrientation(cc.macro.ORIENTATION_PORTRAIT); + } + cc.view.enableAutoFullScreen([ + cc.sys.BROWSER_TYPE_BAIDU, + cc.sys.BROWSER_TYPE_BAIDU_APP, + cc.sys.BROWSER_TYPE_WECHAT, + cc.sys.BROWSER_TYPE_MOBILE_QQ, + cc.sys.BROWSER_TYPE_MIUI, + cc.sys.BROWSER_TYPE_HUAWEI, + cc.sys.BROWSER_TYPE_UC, + ].indexOf(cc.sys.browserType) < 0); + } + + // Limit downloading max concurrent task to 2, + // more tasks simultaneously may cause performance draw back on some android system / browsers. + // You can adjust the number based on your own test result, you have to set it before any loading process to take effect. + if (cc.sys.isBrowser && cc.sys.os === cc.sys.OS_ANDROID) { + cc.assetManager.downloader.maxConcurrency = 2; + cc.assetManager.downloader.maxRequestsPerFrame = 2; + } + + var launchScene = settings.launchScene; + var bundle = cc.assetManager.bundles.find(function (b) { + return b.getSceneInfo(launchScene); + }); + + bundle.loadScene(launchScene, null, onProgress, + function (err, scene) { + if (!err) { + cc.director.runSceneImmediate(scene); + if (cc.sys.isBrowser) { + // show canvas + var canvas = document.getElementById('GameCanvas'); + canvas.style.visibility = ''; + var div = document.getElementById('GameDiv'); + if (div) { + div.style.backgroundImage = ''; + } + console.log('Success to load scene: ' + launchScene); + } + } + } + ); + + }; + + var option = { + id: 'GameCanvas', + debugMode: settings.debug ? cc.debug.DebugMode.INFO : cc.debug.DebugMode.ERROR, + showFPS: settings.debug, + frameRate: 60, + groupList: settings.groupList, + collisionMatrix: settings.collisionMatrix, + }; + + cc.assetManager.init({ + bundleVers: settings.bundleVers, + remoteBundles: settings.remoteBundles, + server: settings.server + }); + + var bundleRoot = [INTERNAL]; + settings.hasResourcesBundle && bundleRoot.push(RESOURCES); + + var count = 0; + function cb (err) { + if (err) return console.error(err.message, err.stack); + count++; + if (count === bundleRoot.length + 1) { + cc.assetManager.loadBundle(MAIN, function (err) { + if (!err) cc.game.run(option, onStart); + }); + } + } + + cc.assetManager.loadScript(settings.jsList.map(function (x) { return 'src/' + x;}), cb); + + for (var i = 0; i < bundleRoot.length; i++) { + cc.assetManager.loadBundle(bundleRoot[i], cb); + } +}; + +if (window.jsb) { + var isRuntime = (typeof loadRuntime === 'function'); + if (isRuntime) { + require('src/settings.4ff07.js'); + require('src/cocos2d-runtime.js'); + if (CC_PHYSICS_BUILTIN || CC_PHYSICS_CANNON) { + require('src/physics.js'); + } + require('jsb-adapter/engine/index.js'); + } + else { + require('src/settings.4ff07.js'); + require('src/cocos2d-jsb.js'); + if (CC_PHYSICS_BUILTIN || CC_PHYSICS_CANNON) { + require('src/physics.js'); + } + require('jsb-adapter/jsb-engine.js'); + } + + cc.macro.CLEANUP_IMAGE_CACHE = true; + window.boot(); +} \ No newline at end of file diff --git a/demo/web-mobile/splash.85cfd.png b/demo/web-mobile/splash.85cfd.png new file mode 100644 index 0000000000000000000000000000000000000000..1e93bf96758676ddab9ed8c7f6a89445944d987d GIT binary patch literal 5884 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 KAZ3c?f&T+Pkw``W literal 0 HcmV?d00001 diff --git a/demo/web-mobile/src/settings.4ff07.js b/demo/web-mobile/src/settings.4ff07.js new file mode 100644 index 00000000..0e2b7aef --- /dev/null +++ b/demo/web-mobile/src/settings.4ff07.js @@ -0,0 +1,29 @@ +window._CCSettings = { + platform: "web-mobile", + groupList: [ + "default" + ], + collisionMatrix: [ + [ + true + ] + ], + hasResourcesBundle: false, + hasStartSceneBundle: false, + remoteBundles: [], + subpackages: [], + launchScene: "db://assets/main.fire", + orientation: "landscape", + debug: true, + jsList: [], + bundleVers: { + sp: "de22b", + internal: "8360b", + common: "40d4c", + home: "9b664", + "multi-render": "f7eed", + spine: "68273", + "text-render": "697bc", + main: "ced16" + } +}; diff --git a/demo/web-mobile/style-desktop.81ede.css b/demo/web-mobile/style-desktop.81ede.css new file mode 100644 index 00000000..71876492 --- /dev/null +++ b/demo/web-mobile/style-desktop.81ede.css @@ -0,0 +1,116 @@ +body { + cursor: default; + padding: 0; + border: 0; + margin: 0; + + text-align: center; + background-color: white; + font-family: Helvetica, Verdana, Arial, sans-serif; +} + +body, canvas, div { + outline: none; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + -khtml-user-select: none; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +/* Remove spin of input type number */ +input::-webkit-outer-spin-button, +input::-webkit-inner-spin-button { + /* display: none; <- Crashes Chrome on hover */ + -webkit-appearance: none; + margin: 0; /* <-- Apparently some margin are still there even though it's hidden */ +} + +#Cocos2dGameContainer { + position: absolute; + margin: 0; + overflow: hidden; + left: 0px; + top: 0px; +} + +canvas { + background-color: rgba(0, 0, 0, 0); +} + +a:link, a:visited { + color: #000; +} + +a:active, a:hover { + color: #666; +} + +p.header { + font-size: small; +} + +p.footer { + font-size: x-small; +} + +#splash { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + + background: #171717 url(./splash.85cfd.png) no-repeat center; + background-size: 350px; +} + +.progress-bar { + background-color: #1a1a1a; + position: absolute; + left: 50%; + top: 80%; + height: 5px; + width: 300px; + margin: 0 -150px; + border-radius: 5px; + box-shadow: 0 1px 5px #000 inset, 0 1px 0 #444; +} + +.progress-bar span { + display: block; + height: 100%; + border-radius: 5px; + box-shadow: 0 1px 0 rgba(255, 255, 255, .5) inset; + transition: width .4s ease-in-out; + background-color: #3dc5de; +} + +.stripes span { + background-size: 30px 30px; + background-image: linear-gradient(135deg, rgba(255, 255, 255, .15) 25%, transparent 25%, + transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, + transparent 75%, transparent); + + animation: animate-stripes 1s linear infinite; +} + +@keyframes animate-stripes { + 0% {background-position: 0 0;} 100% {background-position: 60px 0;} +} + +h1 { + color: #444; + text-shadow: 3px 3px 15px; +} + +#GameDiv { + width: 800px; + height: 450px; + margin: 0 auto; + background: black; + position: relative; + border: 3px solid black; + border-radius: 6px; + box-shadow: 0 5px 40px #333 +} diff --git a/demo/web-mobile/style-mobile.25fc5.css b/demo/web-mobile/style-mobile.25fc5.css new file mode 100644 index 00000000..8e0fe7f9 --- /dev/null +++ b/demo/web-mobile/style-mobile.25fc5.css @@ -0,0 +1,124 @@ +html { + -ms-touch-action: none; +} + +body, canvas, div { + display: block; + outline: none; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + + user-select: none; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + -khtml-user-select: none; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +/* Remove spin of input type number */ +input::-webkit-outer-spin-button, +input::-webkit-inner-spin-button { + /* display: none; <- Crashes Chrome on hover */ + -webkit-appearance: none; + margin: 0; /* <-- Apparently some margin are still there even though it's hidden */ +} + +body { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + padding: 0; + border: 0; + margin: 0; + + cursor: default; + color: #888; + background-color: #333; + + text-align: center; + font-family: Helvetica, Verdana, Arial, sans-serif; + + display: flex; + flex-direction: column; + + /* fix bug: https://github.com/cocos-creator/2d-tasks/issues/791 */ + /* overflow cannot be applied in Cocos2dGameContainer, + otherwise child elements will be hidden when Cocos2dGameContainer rotated 90 deg */ + overflow: hidden; +} + +#Cocos2dGameContainer { + position: absolute; + margin: 0; + left: 0px; + top: 0px; + + display: -webkit-box; + -webkit-box-orient: horizontal; + -webkit-box-align: center; + -webkit-box-pack: center; +} + +canvas { + background-color: rgba(0, 0, 0, 0); +} + +a:link, a:visited { + color: #666; +} + +a:active, a:hover { + color: #666; +} + +p.header { + font-size: small; +} + +p.footer { + font-size: x-small; +} + +#splash { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: #171717 url(./splash.85cfd.png) no-repeat center; + background-size: 45%; +} + +.progress-bar { + position: absolute; + left: 27.5%; + top: 80%; + height: 3px; + padding: 2px; + width: 45%; + border-radius: 7px; + box-shadow: 0 1px 5px #000 inset, 0 1px 0 #444; +} + +.progress-bar span { + display: block; + height: 100%; + border-radius: 3px; + transition: width .4s ease-in-out; + background-color: #3dc5de; +} + +.stripes span { + background-size: 30px 30px; + background-image: linear-gradient(135deg, rgba(255, 255, 255, .15) 25%, transparent 25%, + transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, + transparent 75%, transparent); + + animation: animate-stripes 1s linear infinite; +} + +@keyframes animate-stripes { + 0% {background-position: 0 0;} 100% {background-position: 60px 0;} +} diff --git a/demo/web-mobile/vconsole.min.bac6b.js b/demo/web-mobile/vconsole.min.bac6b.js new file mode 100644 index 00000000..9f718653 --- /dev/null +++ b/demo/web-mobile/vconsole.min.bac6b.js @@ -0,0 +1,12 @@ +/*! + * vConsole v3.2.0 (https://github.com/Tencent/vConsole) + * + * Tencent is pleased to support the open source community by making vConsole available. + * Copyright (C) 2017 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + */ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.VConsole=t():e.VConsole=t()}(this,function(){return function(e){function t(n){if(o[n])return o[n].exports;var i=o[n]={exports:{},id:n,loaded:!1};return e[n].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var o={};return t.m=e,t.c=o,t.p="",t(0)}([function(e,t,o){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0}),o(1);var i=o(2),a=n(i),r=o(18),l=n(r);a["default"].VConsolePlugin=l["default"],t["default"]=a["default"],e.exports=t["default"]},function(e,t){"use strict";if("undefined"==typeof Symbol){window.Symbol=function(){};var o="__symbol_iterator_key";window.Symbol.iterator=o,Array.prototype[o]=function(){var e=this,t=0;return{next:function(){return{done:e.length===t,value:e.length===t?void 0:e[t++]}}}}}},function(e,t,o){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t["default"]=e,t}function i(e){return e&&e.__esModule?e:{"default":e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var o=0;odocument.documentElement.offsetWidth&&(o=document.documentElement.offsetWidth-t.offsetWidth),n+t.offsetHeight>document.documentElement.offsetHeight&&(n=document.documentElement.offsetHeight-t.offsetHeight),0>o&&(o=0),0>n&&(n=0),this.switchPos.x=o,this.switchPos.y=n,v["default"].one(".vc-switch").style.right=o+"px",v["default"].one(".vc-switch").style.bottom=n+"px");var i=window.devicePixelRatio||1,a=document.querySelector('[name="viewport"]');if(a&&a.content){var r=a.content.match(/initial\-scale\=\d+(\.\d+)?/),l=r?parseFloat(r[0].split("=")[1]):1;1>l&&(this.$dom.style.fontSize=13*i+"px")}v["default"].one(".vc-mask",this.$dom).style.display="none"}},{key:"_mockTap",value:function(){var e=700,t=10,o=void 0,n=void 0,i=void 0,a=!1,r=null;this.$dom.addEventListener("touchstart",function(e){if(void 0===o){var t=e.targetTouches[0];n=t.pageX,i=t.pageY,o=e.timeStamp,r=e.target.nodeType===Node.TEXT_NODE?e.target.parentNode:e.target}},!1),this.$dom.addEventListener("touchmove",function(e){var o=e.changedTouches[0];(Math.abs(o.pageX-n)>t||Math.abs(o.pageY-i)>t)&&(a=!0)}),this.$dom.addEventListener("touchend",function(t){if(a===!1&&t.timeStamp-o0){var n=o.touches[0].pageX-e.switchPos.startX,i=o.touches[0].pageY-e.switchPos.startY,a=e.switchPos.x-n,r=e.switchPos.y-i;a+t.offsetWidth>document.documentElement.offsetWidth&&(a=document.documentElement.offsetWidth-t.offsetWidth),r+t.offsetHeight>document.documentElement.offsetHeight&&(r=document.documentElement.offsetHeight-t.offsetHeight),0>a&&(a=0),0>r&&(r=0),t.style.right=a+"px",t.style.bottom=r+"px",e.switchPos.endX=a,e.switchPos.endY=r,o.preventDefault()}}),v["default"].bind(v["default"].one(".vc-switch",e.$dom),"click",function(){e.show()}),v["default"].bind(v["default"].one(".vc-hide",e.$dom),"click",function(){e.hide()}),v["default"].bind(v["default"].one(".vc-mask",e.$dom),"click",function(t){return t.target!=v["default"].one(".vc-mask")?!1:void e.hide()}),v["default"].delegate(v["default"].one(".vc-tabbar",e.$dom),"click",".vc-tab",function(t){var o=this.dataset.tab;o!=e.activedTab&&e.showTab(o)}),v["default"].bind(v["default"].one(".vc-panel",e.$dom),"transitionend webkitTransitionEnd oTransitionEnd otransitionend",function(t){return t.target!=v["default"].one(".vc-panel")?!1:void(v["default"].hasClass(e.$dom,"vc-toggle")||(t.target.style.display="none"))});var o=v["default"].one(".vc-content",e.$dom),n=!1;v["default"].bind(o,"touchstart",function(e){var t=o.scrollTop,i=o.scrollHeight,a=t+o.offsetHeight;0===t?(o.scrollTop=1,0===o.scrollTop&&(v["default"].hasClass(e.target,"vc-cmd-input")||(n=!0))):a===i&&(o.scrollTop=t-1,o.scrollTop===t&&(v["default"].hasClass(e.target,"vc-cmd-input")||(n=!0)))}),v["default"].bind(o,"touchmove",function(e){n&&e.preventDefault()}),v["default"].bind(o,"touchend",function(e){n=!1})}},{key:"_autoRun",value:function(){this.isInited=!0;for(var e in this.pluginList)this._initPlugin(this.pluginList[e]);this.tabList.length>0&&this.showTab(this.tabList[0]),this.triggerEvent("ready")}},{key:"triggerEvent",value:function(e,t){e="on"+e.charAt(0).toUpperCase()+e.slice(1),d.isFunction(this.option[e])&&this.option[e].apply(this,t)}},{key:"_initPlugin",value:function(e){var t=this;e.vConsole=this,e.trigger("init"),e.trigger("renderTab",function(o){t.tabList.push(e.id);var n=v["default"].render(g["default"],{id:e.id,name:e.name});v["default"].one(".vc-tabbar",t.$dom).insertAdjacentElement("beforeend",n);var i=v["default"].render(m["default"],{id:e.id});o&&(d.isString(o)?i.innerHTML+=o:d.isFunction(o.appendTo)?o.appendTo(i):d.isElement(o)&&i.insertAdjacentElement("beforeend",o)),v["default"].one(".vc-content",t.$dom).insertAdjacentElement("beforeend",i)}),e.trigger("addTopBar",function(o){if(o)for(var n=v["default"].one(".vc-topbar",t.$dom),i=function(t){var i=o[t],a=v["default"].render(_["default"],{name:i.name||"Undefined",className:i.className||"",pluginID:e.id});if(i.data)for(var r in i.data)a.dataset[r]=i.data[r];d.isFunction(i.onClick)&&v["default"].bind(a,"click",function(t){var o=i.onClick.call(a);o===!1||(v["default"].removeClass(v["default"].all(".vc-topbar-"+e.id),"vc-actived"),v["default"].addClass(a,"vc-actived"))}),n.insertAdjacentElement("beforeend",a)},a=0;a-1&&this.tabList.splice(c,1);try{delete this.pluginList[e]}catch(s){this.pluginList[e]=void 0}return this.activedTab==e&&this.tabList.length>0&&this.showTab(this.tabList[0]),!0}},{key:"show",value:function(){if(this.isInited){var e=this,t=v["default"].one(".vc-panel",this.$dom);t.style.display="block",setTimeout(function(){v["default"].addClass(e.$dom,"vc-toggle"),e._triggerPluginsEvent("showConsole");var t=v["default"].one(".vc-mask",e.$dom);t.style.display="block"},10)}}},{key:"hide",value:function(){if(this.isInited){v["default"].removeClass(this.$dom,"vc-toggle"),this._triggerPluginsEvent("hideConsole");var e=v["default"].one(".vc-mask",this.$dom),t=v["default"].one(".vc-panel",this.$dom);v["default"].bind(e,"transitionend",function(o){e.style.display="none",t.style.display="none"})}}},{key:"showSwitch",value:function(){if(this.isInited){var e=v["default"].one(".vc-switch",this.$dom);e.style.display="block"}}},{key:"hideSwitch",value:function(){if(this.isInited){var e=v["default"].one(".vc-switch",this.$dom);e.style.display="none"}}},{key:"showTab",value:function(e){if(this.isInited){var t=v["default"].one("#__vc_log_"+e);v["default"].removeClass(v["default"].all(".vc-tab",this.$dom),"vc-actived"),v["default"].addClass(v["default"].one("#__vc_tab_"+e),"vc-actived"),v["default"].removeClass(v["default"].all(".vc-logbox",this.$dom),"vc-actived"),v["default"].addClass(t,"vc-actived");var o=v["default"].all(".vc-topbar-"+e,this.$dom);v["default"].removeClass(v["default"].all(".vc-toptab",this.$dom),"vc-toggle"),v["default"].addClass(o,"vc-toggle"),o.length>0?v["default"].addClass(v["default"].one(".vc-content",this.$dom),"vc-has-topbar"):v["default"].removeClass(v["default"].one(".vc-content",this.$dom),"vc-has-topbar"),v["default"].removeClass(v["default"].all(".vc-tool",this.$dom),"vc-toggle"),v["default"].addClass(v["default"].all(".vc-tool-"+e,this.$dom),"vc-toggle"),this.activedTab&&this._triggerPluginEvent(this.activedTab,"hide"),this.activedTab=e,this._triggerPluginEvent(this.activedTab,"show")}}},{key:"setOption",value:function(e,t){if(d.isString(e))this.option[e]=t,this._triggerPluginsEvent("updateOption");else if(d.isObject(e)){for(var o in e)this.option[o]=e[o];this._triggerPluginsEvent("updateOption")}else console.debug("The first parameter of vConsole.setOption() must be a string or an object.")}},{key:"destroy",value:function(){if(this.isInited){for(var e=Object.keys(this.pluginList),t=e.length-1;t>=0;t--)this.removePlugin(e[t]);this.$dom.parentNode.removeChild(this.$dom)}}}]),e}();t["default"]=A,e.exports=t["default"]},function(e,t){e.exports={name:"vconsole",version:"3.2.0",description:"A lightweight, extendable front-end developer tool for mobile web page.",homepage:"https://github.com/Tencent/vConsole",main:"dist/vconsole.min.js",scripts:{test:"mocha",dist:"webpack"},keywords:["console","debug","mobile"],repository:{type:"git",url:"git+https://github.com/Tencent/vConsole.git"},dependencies:{},devDependencies:{"babel-core":"^6.7.7","babel-loader":"^6.2.4","babel-plugin-add-module-exports":"^0.1.4","babel-preset-es2015":"^6.6.0","babel-preset-stage-3":"^6.5.0",chai:"^3.5.0","css-loader":"^0.23.1","extract-text-webpack-plugin":"^1.0.1","html-loader":"^0.4.3",jsdom:"^9.2.1","json-loader":"^0.5.4",less:"^2.5.3","less-loader":"^2.2.3",mocha:"^2.5.3","style-loader":"^0.13.1",webpack:"~1.12.11"},author:"Tencent",license:"MIT"}},function(e,t){"use strict";function o(e){var t=e>0?new Date(e):new Date,o=t.getDate()<10?"0"+t.getDate():t.getDate(),n=t.getMonth()<9?"0"+(t.getMonth()+1):t.getMonth()+1,i=t.getFullYear(),a=t.getHours()<10?"0"+t.getHours():t.getHours(),r=t.getMinutes()<10?"0"+t.getMinutes():t.getMinutes(),l=t.getSeconds()<10?"0"+t.getSeconds():t.getSeconds(),c=t.getMilliseconds()<10?"0"+t.getMilliseconds():t.getMilliseconds();return 100>c&&(c="0"+c),{time:+t,year:i,month:n,day:o,hour:a,minute:r,second:l,millisecond:c}}function n(e){return"[object Number]"==Object.prototype.toString.call(e)}function i(e){return"[object String]"==Object.prototype.toString.call(e)}function a(e){return"[object Array]"==Object.prototype.toString.call(e)}function r(e){return"[object Boolean]"==Object.prototype.toString.call(e)}function l(e){return"[object Undefined]"==Object.prototype.toString.call(e)}function c(e){return"[object Null]"==Object.prototype.toString.call(e)}function s(e){return"[object Symbol]"==Object.prototype.toString.call(e)}function d(e){return!("[object Object]"!=Object.prototype.toString.call(e)&&(n(e)||i(e)||r(e)||a(e)||c(e)||u(e)||l(e)||s(e)))}function u(e){return"[object Function]"==Object.prototype.toString.call(e)}function v(e){return"object"===("undefined"==typeof HTMLElement?"undefined":w(HTMLElement))?e instanceof HTMLElement:e&&"object"===("undefined"==typeof e?"undefined":w(e))&&null!==e&&1===e.nodeType&&"string"==typeof e.nodeName}function f(e){var t=Object.prototype.toString.call(e);return"[object global]"==t||"[object Window]"==t||"[object DOMWindow]"==t}function p(e){var t=Object.prototype.hasOwnProperty;if(!e||"object"!==("undefined"==typeof e?"undefined":w(e))||e.nodeType||f(e))return!1;try{if(e.constructor&&!t.call(e,"constructor")&&!t.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(o){return!1}var n=void 0;for(n in e);return void 0===n||t.call(e,n)}function h(e){return document.createElement("a").appendChild(document.createTextNode(e)).parentNode.innerHTML}function g(e){var t=arguments.length<=1||void 0===arguments[1]?" ":arguments[1],o=arguments.length<=2||void 0===arguments[2]?"CIRCULAR_DEPENDECY_OBJECT":arguments[2],n=[],i=JSON.stringify(e,function(e,t){if("object"===("undefined"==typeof t?"undefined":w(t))&&null!==t){if(~n.indexOf(t))return o;n.push(t)}return t},t);return n=null,i}function b(e){if(!d(e)&&!a(e))return[];var t=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],o=[];for(var n in e)t.indexOf(n)<0&&o.push(n);return o=o.sort()}function m(e){return Object.prototype.toString.call(e).replace("[object ","").replace("]","")}function y(e,t){window.localStorage&&(e="vConsole_"+e,localStorage.setItem(e,t))}function _(e){return window.localStorage?(e="vConsole_"+e,localStorage.getItem(e)):void 0}Object.defineProperty(t,"__esModule",{value:!0});var w="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e};t.getDate=o,t.isNumber=n,t.isString=i,t.isArray=a,t.isBoolean=r,t.isUndefined=l,t.isNull=c,t.isSymbol=s,t.isObject=d,t.isFunction=u,t.isElement=v,t.isWindow=f,t.isPlainObject=p,t.htmlEncode=h,t.JSONStringify=g,t.getObjAllKeys=b,t.getObjName=m,t.setStorage=y,t.getStorage=_},function(e,t,o){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var i=o(4),a=o(6),r=n(a),l={};l.one=function(e,t){return t?t.querySelector(e):document.querySelector(e)},l.all=function(e,t){var o=void 0,n=[];return o=t?t.querySelectorAll(e):document.querySelectorAll(e),o&&o.length>0&&(n=Array.prototype.slice.call(o)),n},l.addClass=function(e,t){if(e){(0,i.isArray)(e)||(e=[e]);for(var o=0;o-1||(a.push(t),e[o].className=a.join(" "))}}},l.removeClass=function(e,t){if(e){(0,i.isArray)(e)||(e=[e]);for(var o=0;o0&&(d=s[0].getAttribute("nonce")||"");var u=document.createElement("SCRIPT");u.innerHTML=a,u.setAttribute("nonce",d),document.documentElement.appendChild(u);var v=__mito_result;if(document.documentElement.removeChild(u),!o){var f=document.createElement("DIV");f.innerHTML=v,v=f.children[0]}return v}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=o,e.exports=t["default"]},function(e,t,o){var n=o(8);"string"==typeof n&&(n=[[e.id,n,""]]);o(10)(n,{});n.locals&&(e.exports=n.locals)},function(e,t,o){t=e.exports=o(9)(),t.push([e.id,'#__vconsole{color:#000;font-size:13px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}#__vconsole .vc-max-height{max-height:19.23076923em}#__vconsole .vc-max-height-line{max-height:3.38461538em}#__vconsole .vc-min-height{min-height:3.07692308em}#__vconsole dd,#__vconsole dl,#__vconsole pre{margin:0}#__vconsole .vc-switch{display:block;position:fixed;right:.76923077em;bottom:.76923077em;color:#fff;background-color:#04be02;line-height:1;font-size:1.07692308em;padding:.61538462em 1.23076923em;z-index:10000;border-radius:.30769231em;box-shadow:0 0 .61538462em rgba(0,0,0,.4)}#__vconsole .vc-mask{top:0;background:transparent;z-index:10001;transition:background .3s;-webkit-tap-highlight-color:transparent;overflow-y:scroll}#__vconsole .vc-mask,#__vconsole .vc-panel{display:none;position:fixed;left:0;right:0;bottom:0}#__vconsole .vc-panel{min-height:85%;z-index:10002;background-color:#efeff4;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transform:translateY(100%);transform:translateY(100%)}#__vconsole .vc-tabbar{border-bottom:1px solid #d9d9d9;overflow-x:auto;height:3em;width:auto;white-space:nowrap}#__vconsole .vc-tabbar .vc-tab{display:inline-block;line-height:3em;padding:0 1.15384615em;border-right:1px solid #d9d9d9;text-decoration:none;color:#000;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}#__vconsole .vc-tabbar .vc-tab:active{background-color:rgba(0,0,0,.15)}#__vconsole .vc-tabbar .vc-tab.vc-actived{background-color:#fff}#__vconsole .vc-content{background-color:#fff;overflow-x:hidden;overflow-y:auto;position:absolute;top:3.07692308em;left:0;right:0;bottom:3.07692308em;-webkit-overflow-scrolling:touch}#__vconsole .vc-content.vc-has-topbar{top:5.46153846em}#__vconsole .vc-topbar{background-color:#fbf9fe;display:flex;display:-webkit-box;flex-direction:row;flex-wrap:wrap;-webkit-box-direction:row;-webkit-flex-wrap:wrap;width:100%}#__vconsole .vc-topbar .vc-toptab{display:none;flex:1;-webkit-box-flex:1;line-height:2.30769231em;padding:0 1.15384615em;border-bottom:1px solid #d9d9d9;text-decoration:none;text-align:center;color:#000;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}#__vconsole .vc-topbar .vc-toptab.vc-toggle{display:block}#__vconsole .vc-topbar .vc-toptab:active{background-color:rgba(0,0,0,.15)}#__vconsole .vc-topbar .vc-toptab.vc-actived{border-bottom:1px solid #3e82f7}#__vconsole .vc-logbox{display:none;position:relative;min-height:100%}#__vconsole .vc-logbox i{font-style:normal}#__vconsole .vc-logbox .vc-log{padding-bottom:3em;-webkit-tap-highlight-color:transparent}#__vconsole .vc-logbox .vc-log:empty:before{content:"Empty";color:#999;position:absolute;top:45%;left:0;right:0;bottom:0;font-size:1.15384615em;text-align:center}#__vconsole .vc-logbox .vc-item{margin:0;padding:.46153846em .61538462em;overflow:hidden;line-height:1.3;border-bottom:1px solid #eee;word-break:break-word}#__vconsole .vc-logbox .vc-item-info{color:#6a5acd}#__vconsole .vc-logbox .vc-item-debug{color:#daa520}#__vconsole .vc-logbox .vc-item-warn{color:orange;border-color:#ffb930;background-color:#fffacd}#__vconsole .vc-logbox .vc-item-error{color:#dc143c;border-color:#f4a0ab;background-color:#ffe4e1}#__vconsole .vc-logbox .vc-log.vc-log-partly .vc-item{display:none}#__vconsole .vc-logbox .vc-log.vc-log-partly-error .vc-item-error,#__vconsole .vc-logbox .vc-log.vc-log-partly-info .vc-item-info,#__vconsole .vc-logbox .vc-log.vc-log-partly-log .vc-item-log,#__vconsole .vc-logbox .vc-log.vc-log-partly-warn .vc-item-warn{display:block}#__vconsole .vc-logbox .vc-item .vc-item-content{margin-right:4.61538462em;display:block}#__vconsole .vc-logbox .vc-item .vc-item-meta{color:#888;float:right;width:4.61538462em;text-align:right}#__vconsole .vc-logbox .vc-item.vc-item-nometa .vc-item-content{margin-right:0}#__vconsole .vc-logbox .vc-item.vc-item-nometa .vc-item-meta{display:none}#__vconsole .vc-logbox .vc-item .vc-item-code{display:block;white-space:pre-wrap;overflow:auto;position:relative}#__vconsole .vc-logbox .vc-item .vc-item-code.vc-item-code-input,#__vconsole .vc-logbox .vc-item .vc-item-code.vc-item-code-output{padding-left:.92307692em}#__vconsole .vc-logbox .vc-item .vc-item-code.vc-item-code-input:before,#__vconsole .vc-logbox .vc-item .vc-item-code.vc-item-code-output:before{content:"\\203A";position:absolute;top:-.23076923em;left:0;font-size:1.23076923em;color:#6a5acd}#__vconsole .vc-logbox .vc-item .vc-item-code.vc-item-code-output:before{content:"\\2039"}#__vconsole .vc-logbox .vc-item .vc-fold{display:block;overflow:auto;-webkit-overflow-scrolling:touch}#__vconsole .vc-logbox .vc-item .vc-fold .vc-fold-outer{display:block;font-style:italic;padding-left:.76923077em;position:relative}#__vconsole .vc-logbox .vc-item .vc-fold .vc-fold-outer:active{background-color:#e6e6e6}#__vconsole .vc-logbox .vc-item .vc-fold .vc-fold-outer:before{content:"";position:absolute;top:.30769231em;left:.15384615em;width:0;height:0;border:.30769231em solid transparent;border-left-color:#000}#__vconsole .vc-logbox .vc-item .vc-fold .vc-fold-outer.vc-toggle:before{top:.46153846em;left:0;border-top-color:#000;border-left-color:transparent}#__vconsole .vc-logbox .vc-item .vc-fold .vc-fold-inner{display:none;margin-left:.76923077em}#__vconsole .vc-logbox .vc-item .vc-fold .vc-fold-inner.vc-toggle{display:block}#__vconsole .vc-logbox .vc-item .vc-fold .vc-fold-inner .vc-code-key{margin-left:.76923077em}#__vconsole .vc-logbox .vc-item .vc-fold .vc-fold-outer .vc-code-key{margin-left:0}#__vconsole .vc-logbox .vc-code-key{color:#905}#__vconsole .vc-logbox .vc-code-private-key{color:#d391b5}#__vconsole .vc-logbox .vc-code-function{color:#905;font-style:italic}#__vconsole .vc-logbox .vc-code-boolean,#__vconsole .vc-logbox .vc-code-number{color:#0086b3}#__vconsole .vc-logbox .vc-code-string{color:#183691}#__vconsole .vc-logbox .vc-code-null,#__vconsole .vc-logbox .vc-code-undefined{color:#666}#__vconsole .vc-logbox .vc-cmd{position:absolute;height:3.07692308em;left:0;right:0;bottom:0;border-top:1px solid #d9d9d9;display:block!important}#__vconsole .vc-logbox .vc-cmd .vc-cmd-input-wrap{display:block;height:2.15384615em;margin-right:3.07692308em;padding:.46153846em .61538462em}#__vconsole .vc-logbox .vc-cmd .vc-cmd-input{width:100%;border:none;resize:none;outline:none;padding:0;font-size:.92307692em}#__vconsole .vc-logbox .vc-cmd .vc-cmd-input::-webkit-input-placeholder{line-height:2.15384615em}#__vconsole .vc-logbox .vc-cmd .vc-cmd-btn{position:absolute;top:0;right:0;bottom:0;width:3.07692308em;border:none;background-color:#efeff4;outline:none;-webkit-touch-callout:none;font-size:1em}#__vconsole .vc-logbox .vc-cmd .vc-cmd-btn:active{background-color:rgba(0,0,0,.15)}#__vconsole .vc-logbox .vc-group .vc-group-preview{-webkit-touch-callout:none}#__vconsole .vc-logbox .vc-group .vc-group-preview:active{background-color:#e6e6e6}#__vconsole .vc-logbox .vc-group .vc-group-detail{display:none;padding:0 0 .76923077em 1.53846154em;border-bottom:1px solid #eee}#__vconsole .vc-logbox .vc-group.vc-actived .vc-group-detail{display:block;background-color:#fbf9fe}#__vconsole .vc-logbox .vc-group.vc-actived .vc-table-row{background-color:#fff}#__vconsole .vc-logbox .vc-group.vc-actived .vc-group-preview{background-color:#fbf9fe}#__vconsole .vc-logbox .vc-table .vc-table-row{display:flex;display:-webkit-flex;flex-direction:row;flex-wrap:wrap;-webkit-box-direction:row;-webkit-flex-wrap:wrap;overflow:hidden;border-bottom:1px solid #eee}#__vconsole .vc-logbox .vc-table .vc-table-row.vc-left-border{border-left:1px solid #eee}#__vconsole .vc-logbox .vc-table .vc-table-col{flex:1;-webkit-box-flex:1;padding:.23076923em .30769231em;border-left:1px solid #eee;overflow:auto;white-space:pre-wrap;word-break:break-word;-webkit-overflow-scrolling:touch}#__vconsole .vc-logbox .vc-table .vc-table-col:first-child{border:none}#__vconsole .vc-logbox .vc-table .vc-small .vc-table-col{padding:0 .30769231em;font-size:.92307692em}#__vconsole .vc-logbox .vc-table .vc-table-col-2{flex:2;-webkit-box-flex:2}#__vconsole .vc-logbox .vc-table .vc-table-col-3{flex:3;-webkit-box-flex:3}#__vconsole .vc-logbox .vc-table .vc-table-col-4{flex:4;-webkit-box-flex:4}#__vconsole .vc-logbox .vc-table .vc-table-col-5{flex:5;-webkit-box-flex:5}#__vconsole .vc-logbox .vc-table .vc-table-col-6{flex:6;-webkit-box-flex:6}#__vconsole .vc-logbox .vc-table .vc-table-row-error{border-color:#f4a0ab;background-color:#ffe4e1}#__vconsole .vc-logbox .vc-table .vc-table-row-error .vc-table-col{color:#dc143c;border-color:#f4a0ab}#__vconsole .vc-logbox .vc-table .vc-table-col-title{font-weight:700}#__vconsole .vc-logbox.vc-actived{display:block}#__vconsole .vc-toolbar{border-top:1px solid #d9d9d9;line-height:3em;position:absolute;left:0;right:0;bottom:0;display:flex;display:-webkit-box;flex-direction:row;-webkit-box-direction:row}#__vconsole .vc-toolbar .vc-tool{display:none;text-decoration:none;color:#000;width:50%;flex:1;-webkit-box-flex:1;text-align:center;position:relative;-webkit-touch-callout:none}#__vconsole .vc-toolbar .vc-tool.vc-global-tool,#__vconsole .vc-toolbar .vc-tool.vc-toggle{display:block}#__vconsole .vc-toolbar .vc-tool:active{background-color:rgba(0,0,0,.15)}#__vconsole .vc-toolbar .vc-tool:after{content:" ";position:absolute;top:.53846154em;bottom:.53846154em;right:0;border-left:1px solid #d9d9d9}#__vconsole .vc-toolbar .vc-tool-last:after{border:none}#__vconsole.vc-toggle .vc-switch{display:none}#__vconsole.vc-toggle .vc-mask{background:rgba(0,0,0,.6);display:block}#__vconsole.vc-toggle .vc-panel{-webkit-transform:translate(0);transform:translate(0)}',""])},function(e,t){"use strict";e.exports=function(){var e=[];return e.toString=function(){for(var e=[],t=0;t=0&&y.splice(t,1)}function l(e){var t=document.createElement("style");return t.type="text/css",a(e,t),t}function c(e){var t=document.createElement("link");return t.rel="stylesheet",a(e,t),t}function s(e,t){var o,n,i;if(t.singleton){var a=m++;o=b||(b=l(t)),n=d.bind(null,o,a,!1),i=d.bind(null,o,a,!0)}else e.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(o=c(t),n=v.bind(null,o),i=function(){r(o),o.href&&URL.revokeObjectURL(o.href)}):(o=l(t),n=u.bind(null,o),i=function(){r(o)});return n(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;n(e=t)}else i()}}function d(e,t,o,n){var i=o?"":n.css;if(e.styleSheet)e.styleSheet.cssText=_(t,i);else{var a=document.createTextNode(i),r=e.childNodes;r[t]&&e.removeChild(r[t]),r.length?e.insertBefore(a,r[t]):e.appendChild(a)}}function u(e,t){var o=t.css,n=t.media;if(n&&e.setAttribute("media",n),e.styleSheet)e.styleSheet.cssText=o;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(o))}}function v(e,t){var o=t.css,n=t.sourceMap;n&&(o+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(n))))+" */");var i=new Blob([o],{type:"text/css" +}),a=e.href;e.href=URL.createObjectURL(i),a&&URL.revokeObjectURL(a)}var f={},p=function(e){var t;return function(){return"undefined"==typeof t&&(t=e.apply(this,arguments)),t}},h=p(function(){return/msie [6-9]\b/.test(window.navigator.userAgent.toLowerCase())}),g=p(function(){return document.head||document.getElementsByTagName("head")[0]}),b=null,m=0,y=[];e.exports=function(e,t){t=t||{},"undefined"==typeof t.singleton&&(t.singleton=h()),"undefined"==typeof t.insertAt&&(t.insertAt="bottom");var o=i(e);return n(o,t),function(e){for(var a=[],r=0;r\n
vConsole
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n Hide\n
\n
\n'},function(e,t){e.exports='{{name}}'},function(e,t){e.exports='
\n \n
'},function(e,t){e.exports='{{name}}'},function(e,t){e.exports='{{name}}'},function(e,t,o){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t["default"]=e,t}function i(e){return e&&e.__esModule?e:{"default":e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var c=function(){function e(e,t){for(var o=0;oi;i++)n[i]=arguments[i];var l=r(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(n)));return l.tplTabbox=b["default"],l.windowOnError=null,l}return l(t,e),c(t,[{key:"onReady",value:function(){var e=this;s(Object.getPrototypeOf(t.prototype),"onReady",this).call(this),u["default"].bind(u["default"].one(".vc-cmd",this.$tabbox),"submit",function(t){t.preventDefault();var o=u["default"].one(".vc-cmd-input",t.target),n=o.value;o.value="",""!==n&&e.evalCommand(n)});var o="";o+="if (!!window) {",o+="window.__vConsole_cmd_result = undefined;",o+="window.__vConsole_cmd_error = false;",o+="}";var n=document.getElementsByTagName("script"),i="";n.length>0&&(i=n[0].getAttribute("nonce")||"");var a=document.createElement("SCRIPT");a.innerHTML=o,a.setAttribute("nonce",i),document.documentElement.appendChild(a),document.documentElement.removeChild(a)}},{key:"mockConsole",value:function(){s(Object.getPrototypeOf(t.prototype),"mockConsole",this).call(this);var e=this;f.isFunction(window.onerror)&&(this.windowOnError=window.onerror),window.onerror=function(t,o,n,i,a){var r=t;o&&(r+="\n"+o.replace(location.origin,"")),(n||i)&&(r+=":"+n+":"+i);var l=!!a&&!!a.stack,c=l&&a.stack.toString()||"";e.printLog({logType:"error",logs:[r,c],noOrigin:!0}),f.isFunction(e.windowOnError)&&e.windowOnError.call(window,t,o,n,i,a)}}},{key:"evalCommand",value:function(e){this.printLog({logType:"log",content:u["default"].render(y["default"],{content:e,type:"input"}),noMeta:!0,style:""});var t="";t+="try {\n",t+="window.__vConsole_cmd_result = (function() {\n",t+="return "+e+";\n",t+="})();\n",t+="window.__vConsole_cmd_error = false;\n",t+="} catch (e) {\n",t+="window.__vConsole_cmd_result = e.message;\n",t+="window.__vConsole_cmd_error = true;\n",t+="}";var o=document.getElementsByTagName("script"),n="";o.length>0&&(n=o[0].getAttribute("nonce")||"");var i=document.createElement("SCRIPT");i.innerHTML=t,i.setAttribute("nonce",n),document.documentElement.appendChild(i);var a=window.__vConsole_cmd_result,r=window.__vConsole_cmd_error;if(document.documentElement.removeChild(i),0==r){var l=void 0;f.isArray(a)||f.isObject(a)?l=this.getFoldedLine(a):(f.isNull(a)?a="null":f.isUndefined(a)?a="undefined":f.isFunction(a)?a="function()":f.isString(a)&&(a='"'+a+'"'),l=u["default"].render(y["default"],{content:a,type:"output"})),this.printLog({logType:"log",content:l,noMeta:!0,style:""})}else this.printLog({logType:"error",logs:[a],noMeta:!0,style:""})}}]),t}(h["default"]);t["default"]=_,e.exports=t["default"]},function(e,t,o){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function i(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t["default"]=e,t}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},s=function(){function e(e,t){for(var o=0;oi;i++)n[i]=arguments[i];var l=r(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(n)));return l.tplTabbox="",l.allowUnformattedLog=!0,l.isReady=!1,l.isShow=!1,l.$tabbox=null,l.console={},l.logList=[],l.isInBottom=!0,l.maxLogNumber=x,l.logNumber=0,l.mockConsole(),l}return l(t,e),s(t,[{key:"onInit",value:function(){this.$tabbox=f["default"].render(this.tplTabbox,{}),this.updateMaxLogNumber()}},{key:"onRenderTab",value:function(e){e(this.$tabbox)}},{key:"onAddTopBar",value:function(e){for(var t=this,o=["All","Log","Info","Warn","Error"],n=[],i=0;i=o.scrollHeight?e.isInBottom=!0:e.isInBottom=!1)});for(var n=0;nthis.maxLogNumber;){var e=f["default"].one(".vc-item",this.$tabbox);if(!e)break;e.parentNode.removeChild(e),this.logNumber--}}},{key:"showLogType",value:function(e){var t=f["default"].one(".vc-log",this.$tabbox);f["default"].removeClass(t,"vc-log-partly-log"),f["default"].removeClass(t,"vc-log-partly-info"),f["default"].removeClass(t,"vc-log-partly-warn"),f["default"].removeClass(t,"vc-log-partly-error"),"all"==e?f["default"].removeClass(t,"vc-log-partly"):(f["default"].addClass(t,"vc-log-partly"),f["default"].addClass(t,"vc-log-partly-"+e))}},{key:"autoScrollToBottom",value:function(){this.vConsole.option.disableLogScrolling||this.scrollToBottom()}},{key:"scrollToBottom",value:function(){var e=f["default"].one(".vc-content");e&&(e.scrollTop=e.scrollHeight-e.offsetHeight)}},{key:"mockConsole",value:function(){var e=this,t=this,o=["log","info","warn","debug","error"];window.console?(o.map(function(e){t.console[e]=window.console[e]}),t.console.time=window.console.time,t.console.timeEnd=window.console.timeEnd,t.console.clear=window.console.clear):window.console={},o.map(function(t){window.console[t]=function(){for(var o=arguments.length,n=Array(o),i=0;o>i;i++)n[i]=arguments[i];e.printLog({logType:t,logs:n})}});var n={};window.console.time=function(e){n[e]=Date.now()},window.console.timeEnd=function(e){var t=n[e];t?(console.log(e+":",Date.now()-t+"ms"),delete n[e]):console.log(e+": 0ms")},window.console.clear=function(){for(var e=arguments.length,o=Array(e),n=0;e>n;n++)o[n]=arguments[n];t.clearLog(),t.console.clear.apply(window.console,o)}}},{key:"clearLog",value:function(){f["default"].one(".vc-log",this.$tabbox).innerHTML=""}},{key:"printOriginLog",value:function(e){"function"==typeof this.console[e.logType]&&this.console[e.logType].apply(window.console,e.logs)}},{key:"printLog",value:function(e){var t=e.logs||[];if(t.length||e.content){t=[].slice.call(t||[]);var o=!0,n=/^\[(\w+)\]$/i,i="";if(u.isString(t[0])){var a=t[0].match(n);null!==a&&a.length>0&&(i=a[1].toLowerCase())}if(i?o=i==this.id:0==this.allowUnformattedLog&&(o=!1),!o)return void(e.noOrigin||this.printOriginLog(e));if(e.date||(e.date=+new Date),!this.isReady)return void this.logList.push(e);if(u.isString(t[0])&&(t[0]=t[0].replace(n,""),""===t[0]&&t.shift()),!e.meta){var r=u.getDate(e.date);e.meta=r.hour+":"+r.minute+":"+r.second}for(var l=f["default"].render(b["default"],{logType:e.logType,noMeta:!!e.noMeta,meta:e.meta,style:e.style||""}),s=f["default"].one(".vc-item-content",l),d=0;d "+t[d].toString()+"":u.isObject(t[d])||u.isArray(t[d])?this.getFoldedLine(t[d]):" "+u.htmlEncode(t[d]).replace(/\n/g,"
")+"
"}catch(p){v=" ["+c(t[d])+"]"}v&&("string"==typeof v?s.insertAdjacentHTML("beforeend",v):s.insertAdjacentElement("beforeend",v))}u.isObject(e.content)&&s.insertAdjacentElement("beforeend",e.content),f["default"].one(".vc-log",this.$tabbox).insertAdjacentElement("beforeend",l),this.logNumber++,this.limitMaxLogs(),this.isInBottom&&this.autoScrollToBottom(),e.noOrigin||this.printOriginLog(e)}}},{key:"getFoldedLine",value:function(e,t){var o=this;if(!t){var n=u.JSONStringify(e),i=n.substr(0,26);t=u.getObjName(e),n.length>26&&(i+="..."),t+=" "+i}var a=f["default"].render(y["default"],{outer:t,lineType:"obj"});return f["default"].bind(f["default"].one(".vc-fold-outer",a),"click",function(t){t.preventDefault(),t.stopPropagation(),f["default"].hasClass(a,"vc-toggle")?(f["default"].removeClass(a,"vc-toggle"),f["default"].removeClass(f["default"].one(".vc-fold-inner",a),"vc-toggle"),f["default"].removeClass(f["default"].one(".vc-fold-outer",a),"vc-toggle")):(f["default"].addClass(a,"vc-toggle"),f["default"].addClass(f["default"].one(".vc-fold-inner",a),"vc-toggle"),f["default"].addClass(f["default"].one(".vc-fold-outer",a),"vc-toggle"));var n=f["default"].one(".vc-fold-inner",a);if(0==n.children.length&&e){for(var i=u.getObjAllKeys(e),r=0;r\n {{if (!noMeta)}}{{meta}}{{/if}}\n
\n'},function(e,t){e.exports='
\n {{if (lineType == \'obj\')}}\n {{outer}}\n
\n {{else if (lineType == \'value\')}}\n {{value}}\n {{else if (lineType == \'kv\')}}\n {{key}}: {{value}}\n {{/if}}\n
'},function(e,t){e.exports='\n {{key}}: {{value}}\n'},function(e,t){e.exports='
\n
\n
\n \n
\n \n
\n
\n
'},function(e,t){e.exports='
{{content}}
'},function(e,t,o){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function i(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t["default"]=e,t}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var c=function(){function e(e,t){for(var o=0;oi;i++)n[i]=arguments[i];var l=r(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(n)));return l.tplTabbox=p["default"],l.allowUnformattedLog=!1,l}return l(t,e),c(t,[{key:"onInit",value:function(){s(Object.getPrototypeOf(t.prototype),"onInit",this).call(this),this.printSystemInfo()}},{key:"printSystemInfo",value:function(){var e=navigator.userAgent,t="",o=e.match(/(ipod).*\s([\d_]+)/i),n=e.match(/(ipad).*\s([\d_]+)/i),i=e.match(/(iphone)\sos\s([\d_]+)/i),a=e.match(/(android)\s([\d\.]+)/i);t="Unknown",a?t="Android "+a[2]:i?t="iPhone, iOS "+i[2].replace(/_/g,"."):n?t="iPad, iOS "+n[2].replace(/_/g,"."):o&&(t="iPod, iOS "+o[2].replace(/_/g,"."));var r=t,l=e.match(/MicroMessenger\/([\d\.]+)/i);t="Unknown",l&&l[1]?(t=l[1],r+=", WeChat "+t,console.info("[system]","System:",r)):console.info("[system]","System:",r),t="Unknown",t="https:"==location.protocol?"HTTPS":"http:"==location.protocol?"HTTP":location.protocol.replace(":",""),r=t;var c=e.toLowerCase().match(/ nettype\/([^ ]+)/g);t="Unknown",c&&c[0]?(c=c[0].split("/"),t=c[1],r+=", "+t,console.info("[system]","Network:",r)):console.info("[system]","Protocol:",r),console.info("[system]","UA:",e),setTimeout(function(){var e=window.performance||window.msPerformance||window.webkitPerformance;if(e&&e.timing){var t=e.timing;t.navigationStart&&console.info("[system]","navigationStart:",t.navigationStart),t.navigationStart&&t.domainLookupStart&&console.info("[system]","navigation:",t.domainLookupStart-t.navigationStart+"ms"),t.domainLookupEnd&&t.domainLookupStart&&console.info("[system]","dns:",t.domainLookupEnd-t.domainLookupStart+"ms"),t.connectEnd&&t.connectStart&&(t.connectEnd&&t.secureConnectionStart?console.info("[system]","tcp (ssl):",t.connectEnd-t.connectStart+"ms ("+(t.connectEnd-t.secureConnectionStart)+"ms)"):console.info("[system]","tcp:",t.connectEnd-t.connectStart+"ms")),t.responseStart&&t.requestStart&&console.info("[system]","request:",t.responseStart-t.requestStart+"ms"),t.responseEnd&&t.responseStart&&console.info("[system]","response:",t.responseEnd-t.responseStart+"ms"),t.domComplete&&t.domLoading&&(t.domContentLoadedEventStart&&t.domLoading?console.info("[system]","domComplete (domLoaded):",t.domComplete-t.domLoading+"ms ("+(t.domContentLoadedEventStart-t.domLoading)+"ms)"):console.info("[system]","domComplete:",t.domComplete-t.domLoading+"ms")),t.loadEventEnd&&t.loadEventStart&&console.info("[system]","loadEvent:",t.loadEventEnd-t.loadEventStart+"ms"),t.navigationStart&&t.loadEventEnd&&console.info("[system]","total (DOM):",t.loadEventEnd-t.navigationStart+"ms ("+(t.domComplete-t.navigationStart)+"ms)")}},0)}}]),t}(v["default"]);t["default"]=h,e.exports=t["default"]},function(e,t){e.exports='
\n
\n
'},function(e,t,o){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t["default"]=e,t}function i(e){return e&&e.__esModule?e:{"default":e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var c=function(){function e(e,t){for(var o=0;oi;i++)n[i]=arguments[i];var l=r(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(n)));return l.$tabbox=d["default"].render(g["default"],{}),l.$header=null,l.reqList={},l.domList={},l.isReady=!1,l.isShow=!1,l.isInBottom=!0,l._open=void 0,l._send=void 0,l.mockAjax(),l}return l(t,e),c(t,[{key:"onRenderTab",value:function(e){e(this.$tabbox)}},{key:"onAddTool",value:function(e){var t=this,o=[{name:"Clear",global:!1,onClick:function(e){t.clearLog()}}];e(o)}},{key:"onReady",value:function(){var e=this;e.isReady=!0,this.renderHeader(),d["default"].delegate(d["default"].one(".vc-log",this.$tabbox),"click",".vc-group-preview",function(t){var o=this.dataset.reqid,n=this.parentNode;d["default"].hasClass(n,"vc-actived")?(d["default"].removeClass(n,"vc-actived"),e.updateRequest(o,{actived:!1})):(d["default"].addClass(n,"vc-actived"),e.updateRequest(o,{actived:!0})),t.preventDefault()});var t=d["default"].one(".vc-content");d["default"].bind(t,"scroll",function(o){e.isShow&&(t.scrollTop+t.offsetHeight>=t.scrollHeight?e.isInBottom=!0:e.isInBottom=!1)});for(var o in e.reqList)e.updateRequest(o,{})}},{key:"onRemove",value:function(){window.XMLHttpRequest&&(window.XMLHttpRequest.prototype.open=this._open,window.XMLHttpRequest.prototype.send=this._send,this._open=void 0,this._send=void 0)}},{key:"onShow",value:function(){this.isShow=!0,1==this.isInBottom&&this.scrollToBottom()}},{key:"onHide",value:function(){this.isShow=!1}},{key:"onShowConsole",value:function(){1==this.isInBottom&&this.scrollToBottom()}},{key:"scrollToBottom",value:function(){var e=d["default"].one(".vc-content");e.scrollTop=e.scrollHeight-e.offsetHeight}},{key:"clearLog",value:function(){this.reqList={};for(var e in this.domList)this.domList[e].remove(),this.domList[e]=void 0;this.domList={},this.renderHeader()}},{key:"renderHeader",value:function(){var e=Object.keys(this.reqList).length,t=d["default"].render(m["default"],{count:e}),o=d["default"].one(".vc-log",this.$tabbox);this.$header?this.$header.parentNode.replaceChild(t,this.$header):o.parentNode.insertBefore(t,o),this.$header=t}},{key:"updateRequest",value:function(e,t){var o=Object.keys(this.reqList).length,n=this.reqList[e]||{};for(var i in t)n[i]=t[i];if(this.reqList[e]=n,this.isReady){var a={id:e,url:n.url,status:n.status,method:n.method||"-",costTime:n.costTime>0?n.costTime+"ms":"-",header:n.header||null,getData:n.getData||null,postData:n.postData||null,response:null,actived:!!n.actived};switch(n.responseType){case"":case"text":if(v.isString(n.response))try{a.response=JSON.parse(n.response),a.response=JSON.stringify(a.response,null,1),a.response=v.htmlEncode(a.response)}catch(r){a.response=v.htmlEncode(n.response)}else"undefined"!=typeof n.response&&(a.response=Object.prototype.toString.call(n.response));break;case"json":"undefined"!=typeof n.response&&(a.response=JSON.stringify(n.response,null,1));break;case"blob":case"document":case"arraybuffer":default:"undefined"!=typeof n.response&&(a.response=Object.prototype.toString.call(n.response))}0==n.readyState||1==n.readyState?a.status="Pending":2==n.readyState||3==n.readyState?a.status="Loading":4==n.readyState||(a.status="Unknown");var l=d["default"].render(_["default"],a),c=this.domList[e];n.status>=400&&d["default"].addClass(d["default"].one(".vc-group-preview",l),"vc-table-row-error"),c?c.parentNode.replaceChild(l,c):d["default"].one(".vc-log",this.$tabbox).insertAdjacentElement("beforeend",l),this.domList[e]=l;var s=Object.keys(this.reqList).length;s!=o&&this.renderHeader(),this.isInBottom&&this.scrollToBottom()}}},{key:"mockAjax",value:function(){var e=window.XMLHttpRequest;if(e){var t=this,o=window.XMLHttpRequest.prototype.open,n=window.XMLHttpRequest.prototype.send;t._open=o,t._send=n,window.XMLHttpRequest.prototype.open=function(){var e=this,n=[].slice.call(arguments),i=n[0],a=n[1],r=t.getUniqueID(),l=null;e._requestID=r,e._method=i,e._url=a;var c=e.onreadystatechange||function(){},s=function(){var o=t.reqList[r]||{};if(o.readyState=e.readyState,o.status=0,e.readyState>1&&(o.status=e.status),o.responseType=e.responseType,0==e.readyState)o.startTime||(o.startTime=+new Date);else if(1==e.readyState)o.startTime||(o.startTime=+new Date);else if(2==e.readyState){o.header={};for(var n=e.getAllResponseHeaders()||"",i=n.split("\n"),a=0;a0){a.getData={},r=r.join("?"),r=r.split("&");var l=!0,c=!1,s=void 0;try{for(var d,u=r[Symbol.iterator]();!(l=(d=u.next()).done);l=!0){var f=d.value;f=f.split("="),a.getData[f[0]]=f[1]}}catch(p){c=!0,s=p}finally{try{!l&&u["return"]&&u["return"]()}finally{if(c)throw s}}}if("POST"==a.method)if(v.isString(i)){var h=i.split("&");a.postData={};var g=!0,b=!1,m=void 0;try{for(var y,_=h[Symbol.iterator]();!(g=(y=_.next()).done);g=!0){var w=y.value;w=w.split("="),a.postData[w[0]]=w[1]}}catch(p){b=!0,m=p}finally{try{!g&&_["return"]&&_["return"]()}finally{if(b)throw m}}}else v.isPlainObject(i)&&(a.postData=i);return e._noVConsole||t.updateRequest(e._requestID,a),n.apply(e,o)}}}},{key:"getUniqueID",value:function(){var e="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=16*Math.random()|0,o="x"==e?t:3&t|8;return o.toString(16)});return e}}]),t}(p["default"]);t["default"]=w,e.exports=t["default"]},function(e,t){e.exports='
\n
\n
'},function(e,t){e.exports='
\n
Name {{if (count > 0)}}({{count}}){{/if}}
\n
Method
\n
Status
\n
Time
\n
'},function(e,t){e.exports='
\n
\n
{{url}}
\n
{{method}}
\n
{{status}}
\n
{{costTime}}
\n
\n
\n {{if (header !== null)}}\n
\n
\n
Headers
\n
\n {{for (var key in header)}}\n
\n
{{key}}
\n
{{header[key]}}
\n
\n {{/for}}\n
\n {{/if}}\n {{if (getData !== null)}}\n
\n
\n
Query String Parameters
\n
\n {{for (var key in getData)}}\n
\n
{{key}}
\n
{{getData[key]}}
\n
\n {{/for}}\n
\n {{/if}}\n {{if (postData !== null)}}\n
\n
\n
Form Data
\n
\n {{for (var key in postData)}}\n
\n
{{key}}
\n
{{postData[key]}}
\n
\n {{/for}}\n
\n {{/if}}\n
\n
\n
Response
\n
\n
\n
{{response || \'\'}}
\n
\n
\n
\n
'},function(e,t,o){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t["default"]=e,t}function i(e){return e&&e.__esModule?e:{"default":e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function"); +}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var c=function(){function e(e,t){for(var o=0;oi;i++)n[i]=arguments[i];var l=r(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(n))),c=l;c.isInited=!1,c.node={},c.$tabbox=b["default"].render(v["default"],{}),c.nodes=[],c.activedElem={};var s=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;return c.observer=new s(function(e){for(var t=0;t0&&this.onChildRemove(e),e.addedNodes.length>0&&this.onChildAdd(e);break;case"attributes":this.onAttributesChange(e);break;case"characterData":this.onCharacterDataChange(e)}}},{key:"onChildRemove",value:function(e){var t=e.target,o=t.__vconsole_node;if(o){for(var n=0;n0||(e.childNodes[i]?n.renderView(e.childNodes[i],r,"replace"):r.style.display="none"))}}}),o){case"replace":t.parentNode.replaceChild(i,t);break;case"insertBefore":t.parentNode.insertBefore(i,t);break;default:t.appendChild(i)}return i}},{key:"getNode",value:function(e){if(!this._isIgnoredElement(e)){var t=e.__vconsole_node||{};if(t.nodeType=e.nodeType,t.nodeName=e.nodeName,t.tagName=e.tagName||"",t.textContent="",t.nodeType!=e.TEXT_NODE&&t.nodeType!=e.DOCUMENT_TYPE_NODE||(t.textContent=e.textContent),t.id=e.id||"",t.className=e.className||"",t.attributes=[],e.hasAttributes&&e.hasAttributes())for(var o=0;o0)for(var n=0;n.vcelm-node{display:block}.vcelm-l .vcelm-node:active{background-color:rgba(0,0,0,.15)}.vcelm-l.vcelm-noc .vcelm-node:active{background-color:transparent}.vcelm-t{white-space:pre-wrap;word-wrap:break-word}.vcelm-l .vcelm-l{display:none}.vcelm-l.vc-toggle>.vcelm-l{margin-left:4px;display:block}.vcelm-l:before{content:"";display:block;position:absolute;top:6px;left:3px;width:0;height:0;border:3px solid transparent;border-left-color:#000}.vcelm-l.vc-toggle:before{display:block;top:6px;left:0;border-top-color:#000;border-left-color:transparent}.vcelm-l.vcelm-noc:before{display:none}',""])},function(e,t){e.exports='
\n
\n
'},function(e,t,o){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t["default"]=e,t}function i(e){return e&&e.__esModule?e:{"default":e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e){var t=["br","hr","img","input","link","meta"];return e=e?e.toLowerCase():"",t.indexOf(e)>-1}function l(e){return document.createTextNode(e)}function c(e){return e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")}Object.defineProperty(t,"__esModule",{value:!0});var s=function(){function e(e,t){for(var o=0;o<{{node.tagName.toLowerCase()}}{{if (node.className || node.attributes.length)}}\n \n {{for (var i = 0; i < node.attributes.length; i++)}}\n {{if (node.attributes[i].value !== \'\')}}\n {{node.attributes[i].name}}="{{node.attributes[i].value}}"{{else}}\n {{node.attributes[i].name}}{{/if}}{{/for}}{{/if}}>'},function(e,t){e.exports='</{{node.tagName.toLowerCase()}}>'},function(e,t,o){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t["default"]=e,t}function i(e){return e&&e.__esModule?e:{"default":e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var c=function(){function e(e,t){for(var o=0;oi;i++)n[i]=arguments[i];var l=r(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(n)));return l.$tabbox=m["default"].render(v["default"],{}),l.currentType="",l.typeNameMap={cookies:"Cookies",localstorage:"LocalStorage"},l}return l(t,e),c(t,[{key:"onRenderTab",value:function(e){e(this.$tabbox)}},{key:"onAddTopBar",value:function(e){for(var t=this,o=["Cookies","LocalStorage"],n=[],i=0;i\n
\n'},function(e,t){e.exports='
\n
\n
Name
\n
Value
\n
\n {{for (var i = 0; i < list.length; i++)}}\n
\n
{{list[i].name}}
\n
{{list[i].value}}
\n
\n {{/for}}\n
'}])}); \ No newline at end of file